summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2020-03-19 13:53:45 +0100
committerThomas Deutschmann <whissi@gentoo.org>2020-08-13 11:28:25 +0200
commitdc2ba49207af71193f1390d84bba4e15aeea0ce0 (patch)
tree79c2a51cb5fa2b87800b1113e0015a7108cd2eb3
parentImport Ghostscript 9.50 (diff)
downloadghostscript-gpl-patches-dc2ba49207af71193f1390d84bba4e15aeea0ce0.tar.gz
ghostscript-gpl-patches-dc2ba49207af71193f1390d84bba4e15aeea0ce0.tar.bz2
ghostscript-gpl-patches-dc2ba49207af71193f1390d84bba4e15aeea0ce0.zip
Import Ghostscript 9.52ghostscript-9.52
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
-rw-r--r--Makefile.in36
-rw-r--r--Resource/Init/gs_cidfm.ps11
-rw-r--r--Resource/Init/gs_fonts.ps21
-rw-r--r--Resource/Init/gs_init.ps47
-rw-r--r--Resource/Init/gs_lev2.ps2
-rw-r--r--Resource/Init/gs_pdfwr.ps2
-rw-r--r--Resource/Init/gs_res.ps2
-rw-r--r--Resource/Init/gs_ttf.ps8
-rw-r--r--Resource/Init/pdf_base.ps138
-rw-r--r--Resource/Init/pdf_draw.ps855
-rw-r--r--Resource/Init/pdf_font.ps387
-rw-r--r--Resource/Init/pdf_main.ps178
-rw-r--r--Resource/Init/pdf_ops.ps204
-rw-r--r--arch/arch_autoconf.h.in4
-rw-r--r--arch/osx-x86-x86_64-ppc-gcc.h12
-rwxr-xr-xautogen.sh25
-rw-r--r--base/cal.mak16
-rw-r--r--base/claptrap-planar.c2
-rw-r--r--base/ets.h1
-rw-r--r--base/expat.mak6
-rw-r--r--base/fapiufst.c4
-rw-r--r--base/freetype.mak319
-rw-r--r--base/gdbflags.h2
-rw-r--r--base/gdevdbit.c8
-rw-r--r--base/gdevdevn.c101
-rw-r--r--base/gdevdevn.h10
-rw-r--r--base/gdevdflt.c16
-rw-r--r--base/gdevdrop.c9
-rw-r--r--base/gdevepo.c17
-rw-r--r--base/gdevflp.c20
-rw-r--r--base/gdevmem.h3
-rw-r--r--base/gdevmpla.c2
-rw-r--r--base/gdevmplt.c3
-rw-r--r--base/gdevnfwd.c20
-rw-r--r--base/gdevoflt.c14
-rw-r--r--base/gdevp14.c1594
-rw-r--r--base/gdevp14.h39
-rw-r--r--base/gdevprn.c22
-rw-r--r--base/gdevsclass.c11
-rw-r--r--base/gdevsclass.h1
-rw-r--r--base/gdevvec.c5
-rw-r--r--base/genconf.c11
-rw-r--r--base/gp.h8
-rw-r--r--base/gp_dosfs.c2
-rw-r--r--base/gp_ntfs.c2
-rw-r--r--base/gp_os2fs.c2
-rw-r--r--base/gp_psync.c76
-rw-r--r--base/gp_unifn.c4
-rw-r--r--base/gp_unifs.c57
-rw-r--r--base/gp_unix.c66
-rw-r--r--base/gp_vms.c2
-rw-r--r--base/gpmisc.c102
-rw-r--r--base/gs.mak8
-rw-r--r--base/gsalloc.c24
-rw-r--r--base/gsbitcom.c34
-rw-r--r--base/gscdefs.h2
-rw-r--r--base/gscdevn.c62
-rw-r--r--base/gscolor.c16
-rw-r--r--base/gscolor2.c16
-rw-r--r--base/gscolor3.c14
-rw-r--r--base/gscpixel.c3
-rw-r--r--base/gscsepr.c17
-rw-r--r--base/gscspace.c89
-rw-r--r--base/gscspace.h3
-rw-r--r--base/gsdcolor.h2
-rw-r--r--base/gsdevice.c2
-rw-r--r--base/gsdparam.c6
-rw-r--r--base/gsdps1.c2
-rw-r--r--base/gsftopts.h19
-rw-r--r--base/gsfunc4.c9
-rw-r--r--base/gshtscr.c11
-rw-r--r--base/gsicc.c97
-rw-r--r--base/gsicc.h4
-rw-r--r--base/gsicc_cache.c87
-rw-r--r--base/gsicc_create.c6
-rw-r--r--base/gsicc_lcms2.c2
-rw-r--r--base/gsicc_lcms2mt.c3
-rw-r--r--base/gsicc_manage.c38
-rw-r--r--base/gsicc_manage.h1
-rw-r--r--base/gsimage.c18
-rw-r--r--base/gsioram.c4
-rw-r--r--base/gsiorom.c2
-rw-r--r--base/gsiparam.h12
-rw-r--r--base/gslibctx.c105
-rw-r--r--base/gsline.c10
-rw-r--r--base/gsmalloc.c6
-rw-r--r--base/gsmchunk.c48
-rw-r--r--base/gsovrc.c475
-rw-r--r--base/gsovrc.h37
-rw-r--r--base/gspaint.c285
-rw-r--r--base/gspaint.h4
-rw-r--r--base/gsparam.c25
-rw-r--r--base/gspath.c49
-rw-r--r--base/gspcolor.c2
-rw-r--r--base/gsptype1.c50
-rw-r--r--base/gsptype2.c3
-rw-r--r--base/gssprintf.c3
-rw-r--r--base/gsstate.c155
-rw-r--r--base/gstext.c41
-rw-r--r--base/gstparam.h11
-rw-r--r--base/gstrans.h13
-rw-r--r--base/gstype42.c11
-rw-r--r--base/gsutil.c2
-rw-r--r--base/gxacpath.c4
-rw-r--r--base/gxblend.c873
-rw-r--r--base/gxblend1.c30
-rw-r--r--base/gxclfile.c3
-rw-r--r--base/gxclimag.c13
-rw-r--r--base/gxclip.c108
-rw-r--r--base/gxclip.h10
-rw-r--r--base/gxclipm.c3
-rw-r--r--base/gxclist.c8
-rw-r--r--base/gxclist.h6
-rw-r--r--base/gxclpath.c231
-rw-r--r--base/gxclpath.h47
-rw-r--r--base/gxclrast.c136
-rw-r--r--base/gxclrect.c17
-rw-r--r--base/gxclthrd.c69
-rw-r--r--base/gxcmap.c3
-rw-r--r--base/gxcpath.c6
-rw-r--r--base/gxdevcli.h14
-rw-r--r--base/gxdevice.h6
-rw-r--r--base/gxdevsop.h14
-rw-r--r--base/gxdownscale.c62
-rw-r--r--base/gxdtfill.h4
-rw-r--r--base/gxfapiu.h1
-rw-r--r--base/gxfill.c26
-rw-r--r--base/gxgstate.h20
-rw-r--r--base/gxhintn.c5
-rw-r--r--base/gxicolor.c125
-rw-r--r--base/gxidata.c3
-rw-r--r--base/gximage.c1
-rw-r--r--base/gximage3.c2
-rw-r--r--base/gximono.c2
-rw-r--r--base/gxipixel.c12
-rw-r--r--base/gxiscale.c1
-rw-r--r--base/gxmclip.c4
-rw-r--r--base/gxpaint.c24
-rw-r--r--base/gxpaint.h2
-rw-r--r--base/gxpath.h1
-rw-r--r--base/gxpath2.c3
-rw-r--r--base/gxpcmap.c100
-rw-r--r--base/gxpcolor.h17
-rw-r--r--base/gxscanc.c8
-rw-r--r--base/gxstroke.c9
-rw-r--r--base/jbig2.mak56
-rw-r--r--base/lcupsi.mak6
-rw-r--r--base/lib.mak7416
-rw-r--r--base/memento.c545
-rw-r--r--base/memento.h36
-rw-r--r--base/mkromfs.c71
-rw-r--r--base/msvccmd.mak7
-rw-r--r--base/msvclib.mak46
-rw-r--r--base/openjpeg.mak2
-rw-r--r--base/pack_ps.c2
-rw-r--r--base/png.mak2
-rw-r--r--base/scfe.c3
-rw-r--r--base/simscale.c2
-rw-r--r--base/sjpegc.c12
-rw-r--r--base/sjpx_openjpeg.c17
-rw-r--r--base/spwgd.c11
-rw-r--r--base/srle.c10
-rw-r--r--base/srlx.h3
-rw-r--r--base/std.h1
-rw-r--r--base/stdint_.h3
-rw-r--r--base/stdpre.h32
-rw-r--r--base/tiff.mak115
-rw-r--r--base/unix-dll.mak24
-rw-r--r--base/unix-gcc.mak8
-rw-r--r--base/unixansi.mak4
-rw-r--r--base/unixinst.mak2
-rw-r--r--base/version.mak6
-rw-r--r--base/windows_.h2
-rwxr-xr-xconfig.guess (renamed from freetype/builds/unix/config.guess)10
-rwxr-xr-xconfig.sub (renamed from freetype/builds/unix/config.sub)16
-rwxr-xr-xconfigure1207
-rw-r--r--configure.ac889
-rw-r--r--contrib/contrib.mak30
-rw-r--r--contrib/eplaser/gdevescv.c24
-rw-r--r--contrib/gdevadmp.c410
-rw-r--r--contrib/gdevbjc_.c37
-rw-r--r--contrib/gdevbjc_.h4
-rw-r--r--contrib/gdevbjca.c40
-rw-r--r--contrib/gdevcd8.c68
-rw-r--r--contrib/gdevdj9.c208
-rw-r--r--contrib/gdevgdi.c22
-rw-r--r--contrib/gdevhl12.c2
-rw-r--r--contrib/gdevln03.c2
-rw-r--r--contrib/gdevlx32.c101
-rw-r--r--contrib/gdevlx7.c13
-rw-r--r--contrib/gdevmd2k.c50
-rw-r--r--contrib/gdevop4w.c96
-rw-r--r--contrib/japanese/gdev10v.c22
-rw-r--r--contrib/japanese/gdevalps.c27
-rw-r--r--contrib/japanese/gdevespg.c20
-rw-r--r--contrib/japanese/gdevlbp3.c4
-rw-r--r--contrib/japanese/gdevmjc.c48
-rw-r--r--contrib/japanese/gdevnpdl.c68
-rw-r--r--contrib/japanese/gdevp201.c34
-rw-r--r--contrib/japanese/gdevrpdl.c8
-rw-r--r--contrib/lips4/gdevl4r.c51
-rw-r--r--contrib/lips4/gdevl4v.c35
-rw-r--r--contrib/lips4/gdevlips.c4
-rw-r--r--contrib/lips4/gdevlips.h32
-rw-r--r--contrib/lips4/gdevlprn.c9
-rw-r--r--contrib/opvp/gdevopvp.c71
-rw-r--r--contrib/pcl3/eprn/eprnrend.c4
-rw-r--r--contrib/pcl3/eprn/gdeveprn.c11
-rw-r--r--contrib/pcl3/eprn/gdeveprn.h2
-rw-r--r--contrib/pcl3/eprn/mediasize.c6
-rw-r--r--contrib/pcl3/eprn/mediasize.h4
-rw-r--r--contrib/pcl3/src/gdevpcl3.c182
-rw-r--r--contrib/pcl3/src/pclcap.c298
-rw-r--r--contrib/pcl3/src/pclgen.c4
-rw-r--r--cups/gdevcups.c6
-rw-r--r--cups/libs/filter/cupsraster.c (renamed from cups/libs/filter/raster.c)0
-rw-r--r--devices/contrib.mak515
-rw-r--r--devices/devs.mak2493
-rw-r--r--devices/gdev3852.c22
-rw-r--r--devices/gdev4081.c23
-rw-r--r--devices/gdev4693.c29
-rw-r--r--devices/gdev8510.c12
-rw-r--r--devices/gdevatx.c22
-rw-r--r--devices/gdevbit.c12
-rw-r--r--devices/gdevbj10.c3
-rw-r--r--devices/gdevbmp.c4
-rw-r--r--devices/gdevccr.c8
-rw-r--r--devices/gdevcdj.c12
-rw-r--r--devices/gdevcfax.c4
-rw-r--r--devices/gdevcif.c29
-rw-r--r--devices/gdevclj.c31
-rw-r--r--devices/gdevcljc.c2
-rw-r--r--devices/gdevdjtc.c12
-rw-r--r--devices/gdevdm24.c81
-rw-r--r--devices/gdevdsp.c26
-rw-r--r--devices/gdevepsc.c76
-rw-r--r--devices/gdevepsn.c73
-rw-r--r--devices/gdevescp.c35
-rw-r--r--devices/gdevgprf.c1330
-rw-r--r--devices/gdevhl7x.c43
-rw-r--r--devices/gdevicov.c20
-rw-r--r--devices/gdevifno.c11
-rw-r--r--devices/gdevimgn.c12
-rw-r--r--devices/gdevjbig2.c4
-rw-r--r--devices/gdevjpx.c4
-rw-r--r--devices/gdevl31s.c10
-rw-r--r--devices/gdevlbp8.c25
-rw-r--r--devices/gdevlj56.c3
-rw-r--r--devices/gdevlp8k.c43
-rw-r--r--devices/gdevlxm.c77
-rw-r--r--devices/gdevmgr.c35
-rw-r--r--devices/gdevn533.c11
-rw-r--r--devices/gdevokii.c69
-rw-r--r--devices/gdevpbm.c2
-rw-r--r--devices/gdevpcx.c2
-rw-r--r--devices/gdevpdfimg.c32
-rw-r--r--devices/gdevperm.c10
-rw-r--r--devices/gdevphex.c63
-rw-r--r--devices/gdevpjet.c67
-rw-r--r--devices/gdevplan.c15
-rw-r--r--devices/gdevpng.c14
-rw-r--r--devices/gdevpsd.c6
-rw-r--r--devices/gdevpsim.c18
-rw-r--r--devices/gdevrinkj.c25
-rw-r--r--devices/gdevsppr.c13
-rw-r--r--devices/gdevstc.c8
-rw-r--r--devices/gdevtfnx.c22
-rw-r--r--devices/gdevtifs.c10
-rw-r--r--devices/gdevtknk.c11
-rw-r--r--devices/gdevtsep.c240
-rw-r--r--devices/gdevwpr2.c8
-rw-r--r--devices/gdevx.h3
-rw-r--r--devices/gdevxcf.c18
-rw-r--r--devices/gdevxcmp.c16
-rw-r--r--devices/gdevxcmp.h3
-rw-r--r--devices/gdevxini.c8
-rw-r--r--devices/vector/gdevagl.c2
-rw-r--r--devices/vector/gdevagl.h2
-rw-r--r--devices/vector/gdevpdf.c4
-rw-r--r--devices/vector/gdevpdfb.h16
-rw-r--r--devices/vector/gdevpdfd.c203
-rw-r--r--devices/vector/gdevpdfe.c20
-rw-r--r--devices/vector/gdevpdfg.c256
-rw-r--r--devices/vector/gdevpdfg.h9
-rw-r--r--devices/vector/gdevpdfi.c21
-rw-r--r--devices/vector/gdevpdfp.c19
-rw-r--r--devices/vector/gdevpdft.c4
-rw-r--r--devices/vector/gdevpdfu.c4
-rw-r--r--devices/vector/gdevpdfx.h10
-rw-r--r--devices/vector/gdevpdtb.c2
-rw-r--r--devices/vector/gdevpdts.c2
-rw-r--r--devices/vector/gdevpdtt.c4
-rw-r--r--devices/vector/gdevpsdf.h7
-rw-r--r--devices/vector/gdevpsdi.c15
-rw-r--r--devices/vector/gdevpsds.c5
-rw-r--r--devices/vector/gdevpsds.h3
-rw-r--r--devices/vector/gdevpsdu.c2
-rw-r--r--devices/vector/gdevpsu.c5
-rw-r--r--devices/vector/gdevpx.c1
-rw-r--r--devices/vector/gdevtxtw.c201
-rw-r--r--devices/vector/gdevxps.c43
-rw-r--r--doc/API.htm46
-rw-r--r--doc/C-style.htm2
-rw-r--r--doc/DLL.htm4
-rw-r--r--doc/Deprecated.htm4
-rw-r--r--doc/Develop.htm4
-rw-r--r--doc/Devices.htm10
-rw-r--r--doc/Drivers.htm4
-rw-r--r--doc/Fonts.htm19
-rw-r--r--doc/GS9_Color_Management.pdfbin2195244 -> 6606532 bytes
-rw-r--r--doc/GS9_Color_Management.tex44
-rw-r--r--doc/History9.htm15948
-rw-r--r--doc/Install.htm4
-rw-r--r--doc/Internal.htm4
-rw-r--r--doc/Language.htm61
-rw-r--r--doc/Lib.htm4
-rw-r--r--doc/Make.htm16
-rw-r--r--doc/News.htm95
-rw-r--r--doc/Ps-style.htm4
-rw-r--r--doc/Ps2epsi.htm4
-rw-r--r--doc/Psfiles.htm4
-rw-r--r--doc/Readme.htm9
-rw-r--r--doc/Release.htm4
-rw-r--r--doc/SavedPages.htm2
-rw-r--r--doc/Source.htm4
-rw-r--r--doc/Unix-lpr.htm4
-rw-r--r--doc/Use.htm91
-rw-r--r--doc/VectorDevices.htm18
-rw-r--r--doc/WhatIsGS.htm4
-rw-r--r--doc/gs-vms.hlp2
-rw-r--r--doc/sample_downscale_device.htm4
-rw-r--r--doc/subclass.htm2
-rw-r--r--doc/thirdparty.htm33
-rw-r--r--examples/transparency_example.ps2
-rw-r--r--freetype/CMakeLists.txt79
-rw-r--r--freetype/ChangeLog3670
-rw-r--r--freetype/ChangeLog.2012
-rw-r--r--freetype/ChangeLog.214
-rw-r--r--freetype/ChangeLog.222
-rw-r--r--freetype/ChangeLog.2360
-rw-r--r--freetype/ChangeLog.248
-rw-r--r--freetype/ChangeLog.256
-rw-r--r--freetype/ChangeLog.264
-rw-r--r--freetype/ChangeLog.272
-rw-r--r--freetype/ChangeLog.286
-rw-r--r--freetype/ChangeLog.292352
-rw-r--r--freetype/Jamfile7
-rw-r--r--freetype/Jamrules2
-rw-r--r--freetype/Makefile2
-rw-r--r--freetype/README18
-rw-r--r--freetype/README.git2
-rwxr-xr-xfreetype/autogen.sh2
-rw-r--r--freetype/builds/amiga/README4
-rw-r--r--freetype/builds/amiga/include/config/ftconfig.h2
-rw-r--r--freetype/builds/amiga/include/config/ftmodule.h2
-rw-r--r--freetype/builds/amiga/makefile2
-rw-r--r--freetype/builds/amiga/makefile.os42
-rw-r--r--freetype/builds/amiga/smakefile2
-rw-r--r--freetype/builds/amiga/src/base/ftdebug.c207
-rw-r--r--freetype/builds/amiga/src/base/ftsystem.c4
-rw-r--r--freetype/builds/ansi/ansi-def.mk5
-rw-r--r--freetype/builds/ansi/ansi.mk2
-rw-r--r--freetype/builds/beos/beos-def.mk5
-rw-r--r--freetype/builds/beos/beos.mk2
-rw-r--r--freetype/builds/beos/detect.mk2
-rw-r--r--freetype/builds/cmake/iOS.cmake2
-rwxr-xr-xfreetype/builds/cmake/testbuild.sh2
-rw-r--r--freetype/builds/compiler/ansi-cc.mk2
-rw-r--r--freetype/builds/compiler/bcc-dev.mk2
-rw-r--r--freetype/builds/compiler/bcc.mk2
-rw-r--r--freetype/builds/compiler/emx.mk2
-rw-r--r--freetype/builds/compiler/gcc-dev.mk2
-rw-r--r--freetype/builds/compiler/gcc.mk2
-rw-r--r--freetype/builds/compiler/intelc.mk2
-rw-r--r--freetype/builds/compiler/unix-lcc.mk2
-rw-r--r--freetype/builds/compiler/visualage.mk2
-rw-r--r--freetype/builds/compiler/visualc.mk2
-rw-r--r--freetype/builds/compiler/watcom.mk2
-rw-r--r--freetype/builds/compiler/win-lcc.mk2
-rw-r--r--freetype/builds/detect.mk2
-rw-r--r--freetype/builds/dos/detect.mk22
-rw-r--r--freetype/builds/dos/dos-def.mk5
-rw-r--r--freetype/builds/dos/dos-emx.mk2
-rw-r--r--freetype/builds/dos/dos-gcc.mk2
-rw-r--r--freetype/builds/dos/dos-wat.mk2
-rw-r--r--freetype/builds/exports.mk2
-rw-r--r--freetype/builds/freetype.mk55
-rw-r--r--freetype/builds/link_dos.mk2
-rw-r--r--freetype/builds/link_std.mk2
-rw-r--r--freetype/builds/mac/README8
-rw-r--r--freetype/builds/mac/freetype-Info.plist2
-rw-r--r--freetype/builds/mac/ftmac.c7
-rw-r--r--freetype/builds/modules.mk2
-rw-r--r--freetype/builds/os2/detect.mk18
-rw-r--r--freetype/builds/os2/os2-def.mk6
-rw-r--r--freetype/builds/os2/os2-dev.mk2
-rw-r--r--freetype/builds/os2/os2-gcc.mk2
-rw-r--r--freetype/builds/symbian/bld.inf2
-rw-r--r--freetype/builds/symbian/freetype.mmp2
-rw-r--r--freetype/builds/toplevel.mk27
-rw-r--r--freetype/builds/unix/aclocal.m45
-rwxr-xr-xfreetype/builds/unix/configure17204
-rw-r--r--freetype/builds/unix/configure.ac62
-rw-r--r--freetype/builds/unix/configure.raw60
-rw-r--r--freetype/builds/unix/detect.mk14
-rw-r--r--freetype/builds/unix/freetype-config.in2
-rw-r--r--freetype/builds/unix/freetype2.m42
-rw-r--r--freetype/builds/unix/ft-munmap.m42
-rw-r--r--freetype/builds/unix/ftconfig.in445
-rw-r--r--freetype/builds/unix/ftsystem.c4
-rw-r--r--freetype/builds/unix/install.mk2
-rwxr-xr-x[-rw-r--r--]freetype/builds/unix/ltmain.sh0
-rw-r--r--freetype/builds/unix/unix-cc.in2
-rw-r--r--freetype/builds/unix/unix-def.in8
-rw-r--r--freetype/builds/unix/unix-dev.mk2
-rw-r--r--freetype/builds/unix/unix-lcc.mk2
-rw-r--r--freetype/builds/unix/unix.mk2
-rw-r--r--freetype/builds/unix/unixddef.mk6
-rw-r--r--freetype/builds/vms/LIBS.OPT_IA64bin0 -> 82 bytes
-rw-r--r--freetype/builds/vms/_LINK.OPT_IA64bin0 -> 14464 bytes
-rw-r--r--freetype/builds/vms/ftconfig.h405
-rw-r--r--freetype/builds/vms/ftsystem.c4
-rw-r--r--freetype/builds/vms/vmslib.dat28
-rw-r--r--freetype/builds/wince/ftdebug.c243
-rw-r--r--freetype/builds/wince/vc2005-ce/freetype.vcproj76
-rw-r--r--freetype/builds/wince/vc2005-ce/index.html12
-rw-r--r--freetype/builds/wince/vc2008-ce/freetype.vcproj76
-rw-r--r--freetype/builds/wince/vc2008-ce/index.html12
-rw-r--r--freetype/builds/windows/detect.mk38
-rw-r--r--freetype/builds/windows/ftdebug.c230
-rw-r--r--freetype/builds/windows/vc2005/freetype.sln31
-rw-r--r--freetype/builds/windows/vc2005/freetype.vcproj217
-rw-r--r--freetype/builds/windows/vc2005/index.html37
-rw-r--r--freetype/builds/windows/vc2008/freetype.sln31
-rw-r--r--freetype/builds/windows/vc2008/freetype.vcproj668
-rw-r--r--freetype/builds/windows/vc2008/index.html37
-rw-r--r--freetype/builds/windows/vc2010/freetype.vcxproj119
-rw-r--r--freetype/builds/windows/vc2010/freetype.vcxproj.filters23
-rw-r--r--freetype/builds/windows/vc2010/index.html6
-rw-r--r--freetype/builds/windows/visualc/freetype.dsp179
-rw-r--r--freetype/builds/windows/visualc/freetype.sln22
-rw-r--r--freetype/builds/windows/visualc/freetype.vcproj304
-rw-r--r--freetype/builds/windows/visualc/index.html23
-rw-r--r--freetype/builds/windows/visualce/freetype.dsp20
-rw-r--r--freetype/builds/windows/visualce/freetype.vcproj84
-rw-r--r--freetype/builds/windows/visualce/index.html12
-rw-r--r--freetype/builds/windows/w32-bcc.mk2
-rw-r--r--freetype/builds/windows/w32-bccd.mk2
-rw-r--r--freetype/builds/windows/w32-dev.mk2
-rw-r--r--freetype/builds/windows/w32-gcc.mk2
-rw-r--r--freetype/builds/windows/w32-icc.mk2
-rw-r--r--freetype/builds/windows/w32-intl.mk2
-rw-r--r--freetype/builds/windows/w32-lcc.mk2
-rw-r--r--freetype/builds/windows/w32-mingw32.mk2
-rw-r--r--freetype/builds/windows/w32-vcc.mk2
-rw-r--r--freetype/builds/windows/w32-wat.mk2
-rw-r--r--freetype/builds/windows/win32-def.mk6
-rwxr-xr-xfreetype/configure135
-rw-r--r--freetype/devel/ft2build.h44
-rw-r--r--freetype/devel/ftoption.h1323
-rw-r--r--freetype/docs/CHANGES197
-rw-r--r--freetype/docs/CUSTOMIZE2
-rw-r--r--freetype/docs/DEBUG21
-rw-r--r--freetype/docs/DOCGUIDE298
-rw-r--r--freetype/docs/INSTALL4
-rw-r--r--freetype/docs/INSTALL.ANY2
-rw-r--r--freetype/docs/INSTALL.CROSS2
-rw-r--r--freetype/docs/INSTALL.GNU4
-rw-r--r--freetype/docs/INSTALL.UNIX2
-rw-r--r--freetype/docs/INSTALL.VMS2
-rw-r--r--freetype/docs/MAKEPP2
-rw-r--r--freetype/docs/TODO2
-rw-r--r--freetype/docs/VERSIONS.TXT4
-rw-r--r--freetype/docs/formats.txt6
-rw-r--r--freetype/docs/freetype-config.12
-rw-r--r--freetype/docs/raster.txt2
-rw-r--r--freetype/docs/reference/README34
-rw-r--r--freetype/docs/reference/ft2-auto_hinter.html112
-rw-r--r--freetype/docs/reference/ft2-base_interface.html3229
-rw-r--r--freetype/docs/reference/ft2-basic_types.html866
-rw-r--r--freetype/docs/reference/ft2-bdf_fonts.html280
-rw-r--r--freetype/docs/reference/ft2-bitmap_handling.html323
-rw-r--r--freetype/docs/reference/ft2-bzip2.html149
-rw-r--r--freetype/docs/reference/ft2-cache_subsystem.html1010
-rw-r--r--freetype/docs/reference/ft2-cff_driver.html120
-rw-r--r--freetype/docs/reference/ft2-cid_fonts.html240
-rw-r--r--freetype/docs/reference/ft2-computations.html707
-rw-r--r--freetype/docs/reference/ft2-error_code_values.html343
-rw-r--r--freetype/docs/reference/ft2-error_enumerations.html144
-rw-r--r--freetype/docs/reference/ft2-font_formats.html147
-rw-r--r--freetype/docs/reference/ft2-gasp_table.html190
-rw-r--r--freetype/docs/reference/ft2-glyph_management.html597
-rw-r--r--freetype/docs/reference/ft2-glyph_stroker.html819
-rw-r--r--freetype/docs/reference/ft2-glyph_variants.html294
-rw-r--r--freetype/docs/reference/ft2-gx_validation.html362
-rw-r--r--freetype/docs/reference/ft2-gzip.html202
-rw-r--r--freetype/docs/reference/ft2-header_file_macros.html694
-rw-r--r--freetype/docs/reference/ft2-header_inclusion.html117
-rw-r--r--freetype/docs/reference/ft2-incremental.html375
-rw-r--r--freetype/docs/reference/ft2-index.html379
-rw-r--r--freetype/docs/reference/ft2-lcd_filtering.html265
-rw-r--r--freetype/docs/reference/ft2-list_processing.html446
-rw-r--r--freetype/docs/reference/ft2-lzw.html149
-rw-r--r--freetype/docs/reference/ft2-mac_specific.html374
-rw-r--r--freetype/docs/reference/ft2-module_management.html824
-rw-r--r--freetype/docs/reference/ft2-multiple_masters.html723
-rw-r--r--freetype/docs/reference/ft2-ot_validation.html247
-rw-r--r--freetype/docs/reference/ft2-outline_processing.html970
-rw-r--r--freetype/docs/reference/ft2-parameter_tags.html232
-rw-r--r--freetype/docs/reference/ft2-pcf_driver.html111
-rw-r--r--freetype/docs/reference/ft2-pfr_fonts.html242
-rw-r--r--freetype/docs/reference/ft2-properties.html704
-rw-r--r--freetype/docs/reference/ft2-quick_advance.html224
-rw-r--r--freetype/docs/reference/ft2-raster.html531
-rw-r--r--freetype/docs/reference/ft2-sfnt_names.html304
-rw-r--r--freetype/docs/reference/ft2-sizes_management.html202
-rw-r--r--freetype/docs/reference/ft2-system_interface.html405
-rw-r--r--freetype/docs/reference/ft2-t1_cid_driver.html114
-rw-r--r--freetype/docs/reference/ft2-toc.html293
-rw-r--r--freetype/docs/reference/ft2-truetype_engine.html175
-rw-r--r--freetype/docs/reference/ft2-truetype_tables.html1869
-rw-r--r--freetype/docs/reference/ft2-tt_driver.html127
-rw-r--r--freetype/docs/reference/ft2-type1_tables.html867
-rw-r--r--freetype/docs/reference/ft2-user_allocation.html110
-rw-r--r--freetype/docs/reference/ft2-version.html251
-rw-r--r--freetype/docs/reference/ft2-winfnt_fonts.html310
-rw-r--r--freetype/docs/reference/site/404.html1034
-rw-r--r--freetype/docs/reference/site/assets/fonts/font-awesome.css4
-rw-r--r--freetype/docs/reference/site/assets/fonts/material-icons.css13
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.ttfbin0 -> 165548 bytes
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woffbin0 -> 98024 bytes
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff2bin0 -> 77160 bytes
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.ttfbin0 -> 128180 bytes
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woffbin0 -> 57620 bytes
-rw-r--r--freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff2bin0 -> 44300 bytes
-rw-r--r--freetype/docs/reference/site/assets/images/favicon.pngbin0 -> 521 bytes
-rw-r--r--freetype/docs/reference/site/assets/images/icons/bitbucket.1b09e088.svg20
-rw-r--r--freetype/docs/reference/site/assets/images/icons/github.f0b8504a.svg18
-rw-r--r--freetype/docs/reference/site/assets/images/icons/gitlab.6dd19c00.svg38
-rw-r--r--freetype/docs/reference/site/assets/javascripts/application.d9aa80ab.js6
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.da.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.de.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.du.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.es.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.fi.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.fr.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.hu.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.it.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.ja.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.jp.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.multi.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.nl.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.no.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.pt.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.ro.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.ru.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.stemmer.support.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.sv.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.th.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/lunr.tr.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/tinyseg.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/lunr/wordcut.js1
-rw-r--r--freetype/docs/reference/site/assets/javascripts/modernizr.1f0bcf2b.js1
-rw-r--r--freetype/docs/reference/site/assets/stylesheets/application-palette.224b79ff.css1
-rw-r--r--freetype/docs/reference/site/assets/stylesheets/application.982221ab.css1
-rw-r--r--freetype/docs/reference/site/ft2-auto_hinter.html1155
-rw-r--r--freetype/docs/reference/site/ft2-base_interface.html5342
-rw-r--r--freetype/docs/reference/site/ft2-basic_types.html2422
-rw-r--r--freetype/docs/reference/site/ft2-bdf_fonts.html1387
-rw-r--r--freetype/docs/reference/site/ft2-bitmap_handling.html1522
-rw-r--r--freetype/docs/reference/site/ft2-bzip2.html1200
-rw-r--r--freetype/docs/reference/site/ft2-cache_subsystem.html2425
-rw-r--r--freetype/docs/reference/site/ft2-cff_driver.html1163
-rw-r--r--freetype/docs/reference/site/ft2-cid_fonts.html1320
-rw-r--r--freetype/docs/reference/site/ft2-color_management.html1471
-rw-r--r--freetype/docs/reference/site/ft2-computations.html2074
-rw-r--r--freetype/docs/reference/site/ft2-error_code_values.html1395
-rw-r--r--freetype/docs/reference/site/ft2-error_enumerations.html1244
-rw-r--r--freetype/docs/reference/site/ft2-font_formats.html1197
-rw-r--r--freetype/docs/reference/site/ft2-gasp_table.html1255
-rw-r--r--freetype/docs/reference/site/ft2-glyph_management.html1860
-rw-r--r--freetype/docs/reference/site/ft2-glyph_stroker.html2154
-rw-r--r--freetype/docs/reference/site/ft2-glyph_variants.html1399
-rw-r--r--freetype/docs/reference/site/ft2-gx_validation.html1482
-rw-r--r--freetype/docs/reference/site/ft2-gzip.html1269
-rw-r--r--freetype/docs/reference/site/ft2-header_file_macros.html2355
-rw-r--r--freetype/docs/reference/site/ft2-header_inclusion.html1159
-rw-r--r--freetype/docs/reference/site/ft2-incremental.html1531
-rw-r--r--freetype/docs/reference/site/ft2-index.html2141
-rw-r--r--freetype/docs/reference/site/ft2-layer_management.html1313
-rw-r--r--freetype/docs/reference/site/ft2-lcd_rendering.html1420
-rw-r--r--freetype/docs/reference/site/ft2-list_processing.html1660
-rw-r--r--freetype/docs/reference/site/ft2-lzw.html1200
-rw-r--r--freetype/docs/reference/site/ft2-mac_specific.html1501
-rw-r--r--freetype/docs/reference/site/ft2-module_management.html2225
-rw-r--r--freetype/docs/reference/site/ft2-multiple_masters.html2126
-rw-r--r--freetype/docs/reference/site/ft2-ot_validation.html1326
-rw-r--r--freetype/docs/reference/site/ft2-outline_processing.html2314
-rw-r--r--freetype/docs/reference/site/ft2-parameter_tags.html1352
-rw-r--r--freetype/docs/reference/site/ft2-pcf_driver.html1154
-rw-r--r--freetype/docs/reference/site/ft2-pfr_fonts.html1324
-rw-r--r--freetype/docs/reference/site/ft2-properties.html1919
-rw-r--r--freetype/docs/reference/site/ft2-quick_advance.html1303
-rw-r--r--freetype/docs/reference/site/ft2-raster.html1741
-rw-r--r--freetype/docs/reference/site/ft2-sfnt_names.html1417
-rw-r--r--freetype/docs/reference/site/ft2-sizes_management.html1282
-rw-r--r--freetype/docs/reference/site/ft2-system_interface.html1576
-rw-r--r--freetype/docs/reference/site/ft2-t1_cid_driver.html1157
-rw-r--r--freetype/docs/reference/site/ft2-truetype_engine.html1240
-rw-r--r--freetype/docs/reference/site/ft2-truetype_tables.html3227
-rw-r--r--freetype/docs/reference/site/ft2-tt_driver.html1170
-rw-r--r--freetype/docs/reference/site/ft2-type1_tables.html2155
-rw-r--r--freetype/docs/reference/site/ft2-user_allocation.html1153
-rw-r--r--freetype/docs/reference/site/ft2-version.html1341
-rw-r--r--freetype/docs/reference/site/ft2-winfnt_fonts.html1401
-rw-r--r--freetype/docs/reference/site/images/favico.icobin0 -> 1150 bytes
-rw-r--r--freetype/docs/reference/site/index.html1273
-rw-r--r--freetype/docs/reference/site/javascripts/extra.js54
-rw-r--r--freetype/docs/reference/site/search/search_index.json1
-rw-r--r--freetype/docs/reference/site/sitemap.xml258
-rw-r--r--freetype/docs/reference/site/sitemap.xml.gzbin0 -> 221 bytes
-rw-r--r--freetype/docs/reference/site/stylesheets/extra.css221
-rw-r--r--freetype/docs/release14
-rw-r--r--freetype/include/freetype/config/ftconfig.h420
-rw-r--r--freetype/include/freetype/config/ftheader.h352
-rw-r--r--freetype/include/freetype/config/ftmodule.h12
-rw-r--r--freetype/include/freetype/config/ftoption.h1369
-rw-r--r--freetype/include/freetype/config/ftstdlib.h160
-rw-r--r--freetype/include/freetype/freetype.h6954
-rw-r--r--freetype/include/freetype/ftadvanc.h239
-rw-r--r--freetype/include/freetype/ftbbox.h129
-rw-r--r--freetype/include/freetype/ftbdf.h241
-rw-r--r--freetype/include/freetype/ftbitmap.h438
-rw-r--r--freetype/include/freetype/ftbzip2.h140
-rw-r--r--freetype/include/freetype/ftcache.h1190
-rw-r--r--freetype/include/freetype/ftchapters.h284
-rw-r--r--freetype/include/freetype/ftcid.h102
-rw-r--r--freetype/include/freetype/ftcolor.h311
-rw-r--r--freetype/include/freetype/ftdriver.h749
-rw-r--r--freetype/include/freetype/fterrdef.h101
-rw-r--r--freetype/include/freetype/fterrors.h263
-rw-r--r--freetype/include/freetype/ftfntfmt.h117
-rw-r--r--freetype/include/freetype/ftgasp.h74
-rw-r--r--freetype/include/freetype/ftglyph.h999
-rw-r--r--freetype/include/freetype/ftgxval.h490
-rw-r--r--freetype/include/freetype/ftgzip.h226
-rw-r--r--freetype/include/freetype/ftimage.h1771
-rw-r--r--freetype/include/freetype/ftincrem.h139
-rw-r--r--freetype/include/freetype/ftlcdfil.h311
-rw-r--r--freetype/include/freetype/ftlist.h421
-rw-r--r--freetype/include/freetype/ftlzw.h137
-rw-r--r--freetype/include/freetype/ftmac.h399
-rw-r--r--freetype/include/freetype/ftmm.h1180
-rw-r--r--freetype/include/freetype/ftmodapi.h946
-rw-r--r--freetype/include/freetype/ftmoderr.h191
-rw-r--r--freetype/include/freetype/ftotval.h303
-rw-r--r--freetype/include/freetype/ftoutln.h941
-rw-r--r--freetype/include/freetype/ftparams.h99
-rw-r--r--freetype/include/freetype/ftpfr.h258
-rw-r--r--freetype/include/freetype/ftrender.h214
-rw-r--r--freetype/include/freetype/ftsizes.h239
-rw-r--r--freetype/include/freetype/ftsnames.h394
-rw-r--r--freetype/include/freetype/ftstroke.h431
-rw-r--r--freetype/include/freetype/ftsynth.h38
-rw-r--r--freetype/include/freetype/ftsystem.h134
-rw-r--r--freetype/include/freetype/fttrigon.h84
-rw-r--r--freetype/include/freetype/fttypes.h851
-rw-r--r--freetype/include/freetype/ftwinfnt.h162
-rw-r--r--freetype/include/freetype/internal/autohint.h326
-rw-r--r--freetype/include/freetype/internal/cffotypes.h88
-rw-r--r--freetype/include/freetype/internal/cfftypes.h95
-rw-r--r--freetype/include/freetype/internal/ftcalc.h246
-rw-r--r--freetype/include/freetype/internal/ftdebug.h248
-rw-r--r--freetype/include/freetype/internal/ftdrv.h336
-rw-r--r--freetype/include/freetype/internal/ftgloadr.h55
-rw-r--r--freetype/include/freetype/internal/fthash.h28
-rw-r--r--freetype/include/freetype/internal/ftmemory.h77
-rw-r--r--freetype/include/freetype/internal/ftobjs.h1273
-rw-r--r--freetype/include/freetype/internal/ftpic.h71
-rw-r--r--freetype/include/freetype/internal/ftpsprop.h32
-rw-r--r--freetype/include/freetype/internal/ftrfork.h305
-rw-r--r--freetype/include/freetype/internal/ftserv.h669
-rw-r--r--freetype/include/freetype/internal/ftstream.h106
-rw-r--r--freetype/include/freetype/internal/fttrace.h84
-rw-r--r--freetype/include/freetype/internal/ftvalid.h82
-rw-r--r--freetype/include/freetype/internal/internal.h46
-rw-r--r--freetype/include/freetype/internal/psaux.h601
-rw-r--r--freetype/include/freetype/internal/pshints.h170
-rw-r--r--freetype/include/freetype/internal/services/svbdf.h48
-rw-r--r--freetype/include/freetype/internal/services/svcfftl.h54
-rw-r--r--freetype/include/freetype/internal/services/svcid.h53
-rw-r--r--freetype/include/freetype/internal/services/svfntfmt.h38
-rw-r--r--freetype/include/freetype/internal/services/svgldict.h59
-rw-r--r--freetype/include/freetype/internal/services/svgxval.h50
-rw-r--r--freetype/include/freetype/internal/services/svkern.h32
-rw-r--r--freetype/include/freetype/internal/services/svmetric.h62
-rw-r--r--freetype/include/freetype/internal/services/svmm.h158
-rw-r--r--freetype/include/freetype/internal/services/svotval.h32
-rw-r--r--freetype/include/freetype/internal/services/svpfr.h32
-rw-r--r--freetype/include/freetype/internal/services/svpostnm.h58
-rw-r--r--freetype/include/freetype/internal/services/svprop.h48
-rw-r--r--freetype/include/freetype/internal/services/svpscmap.h80
-rw-r--r--freetype/include/freetype/internal/services/svpsinfo.h57
-rw-r--r--freetype/include/freetype/internal/services/svsfnt.h49
-rw-r--r--freetype/include/freetype/internal/services/svttcmap.h94
-rw-r--r--freetype/include/freetype/internal/services/svtteng.h34
-rw-r--r--freetype/include/freetype/internal/services/svttglyf.h45
-rw-r--r--freetype/include/freetype/internal/services/svwinfnt.h32
-rw-r--r--freetype/include/freetype/internal/sfnt.h1094
-rw-r--r--freetype/include/freetype/internal/t1types.h85
-rw-r--r--freetype/include/freetype/internal/tttypes.h2010
-rw-r--r--freetype/include/freetype/internal/wofftypes.h112
-rw-r--r--freetype/include/freetype/t1tables.h616
-rw-r--r--freetype/include/freetype/ttnameid.h138
-rw-r--r--freetype/include/freetype/tttables.h976
-rw-r--r--freetype/include/freetype/tttags.h34
-rw-r--r--freetype/include/ft2build.h64
-rw-r--r--freetype/modules.cfg16
-rw-r--r--freetype/src/Jamfile2
-rw-r--r--freetype/src/autofit/Jamfile2
-rw-r--r--freetype/src/autofit/afangles.c52
-rw-r--r--freetype/src/autofit/afangles.h6
-rw-r--r--freetype/src/autofit/afblue.c39
-rw-r--r--freetype/src/autofit/afblue.cin32
-rw-r--r--freetype/src/autofit/afblue.dat28
-rw-r--r--freetype/src/autofit/afblue.h171
-rw-r--r--freetype/src/autofit/afblue.hin32
-rw-r--r--freetype/src/autofit/afcjk.c155
-rw-r--r--freetype/src/autofit/afcjk.h38
-rw-r--r--freetype/src/autofit/afcover.h32
-rw-r--r--freetype/src/autofit/afdummy.c42
-rw-r--r--freetype/src/autofit/afdummy.h34
-rw-r--r--freetype/src/autofit/aferrors.h48
-rw-r--r--freetype/src/autofit/afglobal.c98
-rw-r--r--freetype/src/autofit/afglobal.h46
-rw-r--r--freetype/src/autofit/afhints.c181
-rw-r--r--freetype/src/autofit/afhints.h238
-rw-r--r--freetype/src/autofit/afindic.c32
-rw-r--r--freetype/src/autofit/afindic.h34
-rw-r--r--freetype/src/autofit/aflatin.c262
-rw-r--r--freetype/src/autofit/aflatin.h44
-rw-r--r--freetype/src/autofit/aflatin2.c147
-rw-r--r--freetype/src/autofit/aflatin2.h34
-rw-r--r--freetype/src/autofit/afloader.c171
-rw-r--r--freetype/src/autofit/afloader.h42
-rw-r--r--freetype/src/autofit/afmodule.c88
-rw-r--r--freetype/src/autofit/afmodule.h36
-rw-r--r--freetype/src/autofit/afpic.c152
-rw-r--r--freetype/src/autofit/afpic.h105
-rw-r--r--freetype/src/autofit/afranges.c47
-rw-r--r--freetype/src/autofit/afranges.h32
-rw-r--r--freetype/src/autofit/afscript.h38
-rw-r--r--freetype/src/autofit/afshaper.c46
-rw-r--r--freetype/src/autofit/afshaper.h32
-rw-r--r--freetype/src/autofit/afstyles.h39
-rw-r--r--freetype/src/autofit/aftypes.h252
-rw-r--r--freetype/src/autofit/afwarp.c54
-rw-r--r--freetype/src/autofit/afwarp.h36
-rw-r--r--freetype/src/autofit/afwrtsys.h32
-rw-r--r--freetype/src/autofit/autofit.c33
-rw-r--r--freetype/src/autofit/module.mk2
-rw-r--r--freetype/src/autofit/rules.mk3
-rw-r--r--freetype/src/base/Jamfile7
-rw-r--r--freetype/src/base/basepic.c108
-rw-r--r--freetype/src/base/basepic.h91
-rw-r--r--freetype/src/base/ftadvanc.c32
-rw-r--r--freetype/src/base/ftapi.c121
-rw-r--r--freetype/src/base/ftbase.c36
-rw-r--r--freetype/src/base/ftbase.h32
-rw-r--r--freetype/src/base/ftbbox.c368
-rw-r--r--freetype/src/base/ftbdf.c32
-rw-r--r--freetype/src/base/ftbitmap.c376
-rw-r--r--freetype/src/base/ftcalc.c194
-rw-r--r--freetype/src/base/ftcid.c32
-rw-r--r--freetype/src/base/ftcolor.c157
-rw-r--r--freetype/src/base/ftdbgmem.c60
-rw-r--r--freetype/src/base/ftdebug.c179
-rw-r--r--freetype/src/base/fterrors.c46
-rw-r--r--freetype/src/base/ftfntfmt.c32
-rw-r--r--freetype/src/base/ftfstype.c32
-rw-r--r--freetype/src/base/ftgasp.c32
-rw-r--r--freetype/src/base/ftgloadr.c134
-rw-r--r--freetype/src/base/ftglyph.c141
-rw-r--r--freetype/src/base/ftgxval.c50
-rw-r--r--freetype/src/base/fthash.c28
-rw-r--r--freetype/src/base/ftinit.c217
-rw-r--r--freetype/src/base/ftlcdfil.c127
-rw-r--r--freetype/src/base/ftmac.c106
-rw-r--r--freetype/src/base/ftmm.c50
-rw-r--r--freetype/src/base/ftobjs.c577
-rw-r--r--freetype/src/base/ftotval.c32
-rw-r--r--freetype/src/base/ftoutln.c148
-rw-r--r--freetype/src/base/ftpatent.c34
-rw-r--r--freetype/src/base/ftpfr.c32
-rw-r--r--freetype/src/base/ftpic.c55
-rw-r--r--freetype/src/base/ftpsprop.c48
-rw-r--r--freetype/src/base/ftrfork.c72
-rw-r--r--freetype/src/base/ftsnames.c78
-rw-r--r--freetype/src/base/ftstream.c58
-rw-r--r--freetype/src/base/ftstroke.c120
-rw-r--r--freetype/src/base/ftsynth.c46
-rw-r--r--freetype/src/base/ftsystem.c281
-rw-r--r--freetype/src/base/fttrigon.c76
-rw-r--r--freetype/src/base/fttype1.c32
-rw-r--r--freetype/src/base/ftutil.c54
-rw-r--r--freetype/src/base/ftver.rc10
-rw-r--r--freetype/src/base/ftwinfnt.c32
-rw-r--r--freetype/src/base/rules.mk11
-rw-r--r--freetype/src/bdf/Jamfile2
-rw-r--r--freetype/src/bdf/bdf.h82
-rw-r--r--freetype/src/bdf/bdfdrivr.c69
-rw-r--r--freetype/src/bdf/bdfdrivr.h9
-rw-r--r--freetype/src/bdf/bdferror.h10
-rw-r--r--freetype/src/bdf/bdflib.c411
-rw-r--r--freetype/src/bzip2/Jamfile2
-rw-r--r--freetype/src/bzip2/ftbzip2.c52
-rw-r--r--freetype/src/bzip2/rules.mk2
-rw-r--r--freetype/src/cache/Jamfile2
-rw-r--r--freetype/src/cache/ftcache.c32
-rw-r--r--freetype/src/cache/ftcbasic.c36
-rw-r--r--freetype/src/cache/ftccache.c34
-rw-r--r--freetype/src/cache/ftccache.h64
-rw-r--r--freetype/src/cache/ftccback.h32
-rw-r--r--freetype/src/cache/ftccmap.c62
-rw-r--r--freetype/src/cache/ftcerror.h48
-rw-r--r--freetype/src/cache/ftcglyph.c32
-rw-r--r--freetype/src/cache/ftcglyph.h166
-rw-r--r--freetype/src/cache/ftcimage.c32
-rw-r--r--freetype/src/cache/ftcimage.h50
-rw-r--r--freetype/src/cache/ftcmanag.c38
-rw-r--r--freetype/src/cache/ftcmanag.h143
-rw-r--r--freetype/src/cache/ftcmru.c32
-rw-r--r--freetype/src/cache/ftcmru.h80
-rw-r--r--freetype/src/cache/ftcsbits.c92
-rw-r--r--freetype/src/cache/ftcsbits.h32
-rw-r--r--freetype/src/cache/rules.mk4
-rw-r--r--freetype/src/cff/Jamfile2
-rw-r--r--freetype/src/cff/cff.c33
-rw-r--r--freetype/src/cff/cffcmap.c35
-rw-r--r--freetype/src/cff/cffcmap.h32
-rw-r--r--freetype/src/cff/cffdrivr.c310
-rw-r--r--freetype/src/cff/cffdrivr.h34
-rw-r--r--freetype/src/cff/cfferrs.h46
-rw-r--r--freetype/src/cff/cffgload.c64
-rw-r--r--freetype/src/cff/cffgload.h32
-rw-r--r--freetype/src/cff/cffload.c61
-rw-r--r--freetype/src/cff/cffload.h32
-rw-r--r--freetype/src/cff/cffobjs.c118
-rw-r--r--freetype/src/cff/cffobjs.h48
-rw-r--r--freetype/src/cff/cffparse.c444
-rw-r--r--freetype/src/cff/cffparse.h55
-rw-r--r--freetype/src/cff/cffpic.c138
-rw-r--r--freetype/src/cff/cffpic.h121
-rw-r--r--freetype/src/cff/cfftoken.h32
-rw-r--r--freetype/src/cff/module.mk2
-rw-r--r--freetype/src/cff/rules.mk5
-rw-r--r--freetype/src/cid/Jamfile2
-rw-r--r--freetype/src/cid/ciderrs.h46
-rw-r--r--freetype/src/cid/cidgload.c49
-rw-r--r--freetype/src/cid/cidgload.h32
-rw-r--r--freetype/src/cid/cidload.c185
-rw-r--r--freetype/src/cid/cidload.h32
-rw-r--r--freetype/src/cid/cidobjs.c204
-rw-r--r--freetype/src/cid/cidobjs.h116
-rw-r--r--freetype/src/cid/cidparse.c46
-rw-r--r--freetype/src/cid/cidparse.h108
-rw-r--r--freetype/src/cid/cidriver.c56
-rw-r--r--freetype/src/cid/cidriver.h38
-rw-r--r--freetype/src/cid/cidtoken.h57
-rw-r--r--freetype/src/cid/module.mk2
-rw-r--r--freetype/src/cid/rules.mk2
-rw-r--r--freetype/src/cid/type1cid.c32
-rw-r--r--freetype/src/gxvalid/Jamfile2
-rw-r--r--freetype/src/gxvalid/README2
-rw-r--r--freetype/src/gxvalid/gxvalid.c34
-rw-r--r--freetype/src/gxvalid/gxvalid.h50
-rw-r--r--freetype/src/gxvalid/gxvbsln.c64
-rw-r--r--freetype/src/gxvalid/gxvcommn.c68
-rw-r--r--freetype/src/gxvalid/gxvcommn.h60
-rw-r--r--freetype/src/gxvalid/gxverror.h66
-rw-r--r--freetype/src/gxvalid/gxvfeat.c64
-rw-r--r--freetype/src/gxvalid/gxvfeat.h50
-rw-r--r--freetype/src/gxvalid/gxvfgen.c114
-rw-r--r--freetype/src/gxvalid/gxvjust.c66
-rw-r--r--freetype/src/gxvalid/gxvkern.c64
-rw-r--r--freetype/src/gxvalid/gxvlcar.c64
-rw-r--r--freetype/src/gxvalid/gxvmod.c64
-rw-r--r--freetype/src/gxvalid/gxvmod.h56
-rw-r--r--freetype/src/gxvalid/gxvmort.c65
-rw-r--r--freetype/src/gxvalid/gxvmort.h50
-rw-r--r--freetype/src/gxvalid/gxvmort0.c66
-rw-r--r--freetype/src/gxvalid/gxvmort1.c66
-rw-r--r--freetype/src/gxvalid/gxvmort2.c66
-rw-r--r--freetype/src/gxvalid/gxvmort4.c66
-rw-r--r--freetype/src/gxvalid/gxvmort5.c66
-rw-r--r--freetype/src/gxvalid/gxvmorx.c64
-rw-r--r--freetype/src/gxvalid/gxvmorx.h50
-rw-r--r--freetype/src/gxvalid/gxvmorx0.c66
-rw-r--r--freetype/src/gxvalid/gxvmorx1.c66
-rw-r--r--freetype/src/gxvalid/gxvmorx2.c66
-rw-r--r--freetype/src/gxvalid/gxvmorx4.c66
-rw-r--r--freetype/src/gxvalid/gxvmorx5.c66
-rw-r--r--freetype/src/gxvalid/gxvopbd.c64
-rw-r--r--freetype/src/gxvalid/gxvprop.c64
-rw-r--r--freetype/src/gxvalid/gxvtrak.c64
-rw-r--r--freetype/src/gxvalid/module.mk2
-rw-r--r--freetype/src/gxvalid/rules.mk2
-rw-r--r--freetype/src/gzip/Jamfile2
-rw-r--r--freetype/src/gzip/ftgzip.c64
-rw-r--r--freetype/src/gzip/infblock.c5
-rw-r--r--freetype/src/gzip/infcodes.c4
-rw-r--r--freetype/src/gzip/inflate.c10
-rw-r--r--freetype/src/gzip/rules.mk2
-rw-r--r--freetype/src/lzw/Jamfile2
-rw-r--r--freetype/src/lzw/ftlzw.c56
-rw-r--r--freetype/src/lzw/ftzopen.c48
-rw-r--r--freetype/src/lzw/ftzopen.h116
-rw-r--r--freetype/src/lzw/rules.mk2
-rw-r--r--freetype/src/otvalid/Jamfile2
-rw-r--r--freetype/src/otvalid/module.mk2
-rw-r--r--freetype/src/otvalid/otvalid.c32
-rw-r--r--freetype/src/otvalid/otvalid.h32
-rw-r--r--freetype/src/otvalid/otvbase.c46
-rw-r--r--freetype/src/otvalid/otvcommn.c46
-rw-r--r--freetype/src/otvalid/otvcommn.h32
-rw-r--r--freetype/src/otvalid/otverror.h48
-rw-r--r--freetype/src/otvalid/otvgdef.c46
-rw-r--r--freetype/src/otvalid/otvgpos.c46
-rw-r--r--freetype/src/otvalid/otvgpos.h32
-rw-r--r--freetype/src/otvalid/otvgsub.c46
-rw-r--r--freetype/src/otvalid/otvjstf.c46
-rw-r--r--freetype/src/otvalid/otvmath.c50
-rw-r--r--freetype/src/otvalid/otvmod.c46
-rw-r--r--freetype/src/otvalid/otvmod.h38
-rw-r--r--freetype/src/otvalid/rules.mk2
-rw-r--r--freetype/src/pcf/Jamfile2
-rw-r--r--freetype/src/pcf/pcf.h59
-rw-r--r--freetype/src/pcf/pcfdrivr.c163
-rw-r--r--freetype/src/pcf/pcfdrivr.h5
-rw-r--r--freetype/src/pcf/pcferror.h46
-rw-r--r--freetype/src/pcf/pcfread.c407
-rw-r--r--freetype/src/pcf/pcfutil.c6
-rw-r--r--freetype/src/pfr/Jamfile2
-rw-r--r--freetype/src/pfr/module.mk2
-rw-r--r--freetype/src/pfr/pfr.c32
-rw-r--r--freetype/src/pfr/pfrcmap.c32
-rw-r--r--freetype/src/pfr/pfrcmap.h32
-rw-r--r--freetype/src/pfr/pfrdrivr.c48
-rw-r--r--freetype/src/pfr/pfrdrivr.h38
-rw-r--r--freetype/src/pfr/pfrerror.h46
-rw-r--r--freetype/src/pfr/pfrgload.c52
-rw-r--r--freetype/src/pfr/pfrgload.h32
-rw-r--r--freetype/src/pfr/pfrload.c162
-rw-r--r--freetype/src/pfr/pfrload.h32
-rw-r--r--freetype/src/pfr/pfrobjs.c40
-rw-r--r--freetype/src/pfr/pfrobjs.h32
-rw-r--r--freetype/src/pfr/pfrsbit.c34
-rw-r--r--freetype/src/pfr/pfrsbit.h32
-rw-r--r--freetype/src/pfr/pfrtypes.h32
-rw-r--r--freetype/src/pfr/rules.mk2
-rw-r--r--freetype/src/psaux/Jamfile2
-rw-r--r--freetype/src/psaux/afmparse.c59
-rw-r--r--freetype/src/psaux/afmparse.h32
-rw-r--r--freetype/src/psaux/cffdecode.c300
-rw-r--r--freetype/src/psaux/cffdecode.h32
-rw-r--r--freetype/src/psaux/module.mk2
-rw-r--r--freetype/src/psaux/psarrst.c72
-rw-r--r--freetype/src/psaux/psarrst.h72
-rw-r--r--freetype/src/psaux/psaux.c32
-rw-r--r--freetype/src/psaux/psauxerr.h48
-rw-r--r--freetype/src/psaux/psauxmod.c32
-rw-r--r--freetype/src/psaux/psauxmod.h36
-rw-r--r--freetype/src/psaux/psblues.c100
-rw-r--r--freetype/src/psaux/psblues.h72
-rw-r--r--freetype/src/psaux/psconv.c46
-rw-r--r--freetype/src/psaux/psconv.h32
-rw-r--r--freetype/src/psaux/pserror.c72
-rw-r--r--freetype/src/psaux/pserror.h72
-rw-r--r--freetype/src/psaux/psfixed.h75
-rw-r--r--freetype/src/psaux/psfont.c82
-rw-r--r--freetype/src/psaux/psfont.h72
-rw-r--r--freetype/src/psaux/psft.c95
-rw-r--r--freetype/src/psaux/psft.h72
-rw-r--r--freetype/src/psaux/psglue.h72
-rw-r--r--freetype/src/psaux/pshints.c117
-rw-r--r--freetype/src/psaux/pshints.h72
-rw-r--r--freetype/src/psaux/psintrp.c147
-rw-r--r--freetype/src/psaux/psintrp.h72
-rw-r--r--freetype/src/psaux/psobjs.c486
-rw-r--r--freetype/src/psaux/psobjs.h40
-rw-r--r--freetype/src/psaux/psread.c74
-rw-r--r--freetype/src/psaux/psread.h72
-rw-r--r--freetype/src/psaux/psstack.c75
-rw-r--r--freetype/src/psaux/psstack.h72
-rw-r--r--freetype/src/psaux/pstypes.h72
-rw-r--r--freetype/src/psaux/rules.mk2
-rw-r--r--freetype/src/psaux/t1cmap.c35
-rw-r--r--freetype/src/psaux/t1cmap.h32
-rw-r--r--freetype/src/psaux/t1decode.c341
-rw-r--r--freetype/src/psaux/t1decode.h32
-rw-r--r--freetype/src/pshinter/Jamfile2
-rw-r--r--freetype/src/pshinter/module.mk2
-rw-r--r--freetype/src/pshinter/pshalgo.c50
-rw-r--r--freetype/src/pshinter/pshalgo.h32
-rw-r--r--freetype/src/pshinter/pshglob.c39
-rw-r--r--freetype/src/pshinter/pshglob.h68
-rw-r--r--freetype/src/pshinter/pshinter.c33
-rw-r--r--freetype/src/pshinter/pshmod.c35
-rw-r--r--freetype/src/pshinter/pshmod.h32
-rw-r--r--freetype/src/pshinter/pshnterr.h46
-rw-r--r--freetype/src/pshinter/pshpic.c76
-rw-r--r--freetype/src/pshinter/pshpic.h63
-rw-r--r--freetype/src/pshinter/pshrec.c38
-rw-r--r--freetype/src/pshinter/pshrec.h56
-rw-r--r--freetype/src/pshinter/rules.mk3
-rw-r--r--freetype/src/psnames/Jamfile2
-rw-r--r--freetype/src/psnames/module.mk2
-rw-r--r--freetype/src/psnames/psmodule.c73
-rw-r--r--freetype/src/psnames/psmodule.h32
-rw-r--r--freetype/src/psnames/psnamerr.h48
-rw-r--r--freetype/src/psnames/psnames.c33
-rw-r--r--freetype/src/psnames/pspic.c97
-rw-r--r--freetype/src/psnames/pspic.h68
-rw-r--r--freetype/src/psnames/pstables.h44
-rw-r--r--freetype/src/psnames/rules.mk21
-rw-r--r--freetype/src/raster/Jamfile2
-rw-r--r--freetype/src/raster/ftmisc.h50
-rw-r--r--freetype/src/raster/ftraster.c1285
-rw-r--r--freetype/src/raster/ftraster.h42
-rw-r--r--freetype/src/raster/ftrend1.c41
-rw-r--r--freetype/src/raster/ftrend1.h32
-rw-r--r--freetype/src/raster/module.mk2
-rw-r--r--freetype/src/raster/raster.c33
-rw-r--r--freetype/src/raster/rasterrs.h48
-rw-r--r--freetype/src/raster/rastpic.c89
-rw-r--r--freetype/src/raster/rastpic.h63
-rw-r--r--freetype/src/raster/rules.mk5
-rw-r--r--freetype/src/sfnt/Jamfile4
-rw-r--r--freetype/src/sfnt/module.mk2
-rw-r--r--freetype/src/sfnt/pngshim.c34
-rw-r--r--freetype/src/sfnt/pngshim.h34
-rw-r--r--freetype/src/sfnt/rules.mk22
-rw-r--r--freetype/src/sfnt/sfdriver.c259
-rw-r--r--freetype/src/sfnt/sfdriver.h34
-rw-r--r--freetype/src/sfnt/sferrors.h46
-rw-r--r--freetype/src/sfnt/sfnt.c37
-rw-r--r--freetype/src/sfnt/sfntpic.c143
-rw-r--r--freetype/src/sfnt/sfntpic.h112
-rw-r--r--freetype/src/sfnt/sfobjs.c654
-rw-r--r--freetype/src/sfnt/sfobjs.h34
-rw-r--r--freetype/src/sfnt/sfwoff.c434
-rw-r--r--freetype/src/sfnt/sfwoff.h41
-rw-r--r--freetype/src/sfnt/ttbdf.c54
-rw-r--r--freetype/src/sfnt/ttbdf.h32
-rw-r--r--freetype/src/sfnt/ttcmap.c656
-rw-r--r--freetype/src/sfnt/ttcmap.h70
-rw-r--r--freetype/src/sfnt/ttcmapc.h32
-rw-r--r--freetype/src/sfnt/ttcolr.c451
-rw-r--r--freetype/src/sfnt/ttcolr.h58
-rw-r--r--freetype/src/sfnt/ttcpal.c311
-rw-r--r--freetype/src/sfnt/ttcpal.h49
-rw-r--r--freetype/src/sfnt/ttkern.c56
-rw-r--r--freetype/src/sfnt/ttkern.h34
-rw-r--r--freetype/src/sfnt/ttload.c569
-rw-r--r--freetype/src/sfnt/ttload.h34
-rw-r--r--freetype/src/sfnt/ttmtx.c187
-rw-r--r--freetype/src/sfnt/ttmtx.h32
-rw-r--r--freetype/src/sfnt/ttpost.c117
-rw-r--r--freetype/src/sfnt/ttpost.h34
-rw-r--r--freetype/src/sfnt/ttsbit.c64
-rw-r--r--freetype/src/sfnt/ttsbit.h32
-rw-r--r--freetype/src/smooth/Jamfile2
-rw-r--r--freetype/src/smooth/ftgrays.c724
-rw-r--r--freetype/src/smooth/ftgrays.h49
-rw-r--r--freetype/src/smooth/ftsmerrs.h48
-rw-r--r--freetype/src/smooth/ftsmooth.c127
-rw-r--r--freetype/src/smooth/ftsmooth.h32
-rw-r--r--freetype/src/smooth/ftspic.c118
-rw-r--r--freetype/src/smooth/ftspic.h75
-rw-r--r--freetype/src/smooth/module.mk2
-rw-r--r--freetype/src/smooth/rules.mk5
-rw-r--r--freetype/src/smooth/smooth.c33
-rw-r--r--freetype/src/tools/afblue.pl2
-rw-r--r--freetype/src/tools/apinames.c441
-rw-r--r--freetype/src/tools/docmaker/content.py672
-rw-r--r--freetype/src/tools/docmaker/docbeauty.py111
-rw-r--r--freetype/src/tools/docmaker/docmaker.py115
-rw-r--r--freetype/src/tools/docmaker/formatter.py228
-rw-r--r--freetype/src/tools/docmaker/sources.py410
-rw-r--r--freetype/src/tools/docmaker/tohtml.py725
-rw-r--r--freetype/src/tools/docmaker/utils.py127
-rw-r--r--freetype/src/tools/ftfuzzer/README81
-rw-r--r--freetype/src/tools/ftfuzzer/ftfuzzer.cc428
-rw-r--r--freetype/src/tools/ftfuzzer/ftmutator.cc314
-rw-r--r--freetype/src/tools/ftfuzzer/rasterfuzzer.cc129
-rw-r--r--freetype/src/tools/ftfuzzer/runinput.cc58
-rw-r--r--freetype/src/tools/glnames.py50
-rwxr-xr-xfreetype/src/tools/update-copyright-year19
-rw-r--r--freetype/src/truetype/Jamfile2
-rw-r--r--freetype/src/truetype/module.mk2
-rw-r--r--freetype/src/truetype/rules.mk3
-rw-r--r--freetype/src/truetype/truetype.c33
-rw-r--r--freetype/src/truetype/ttdriver.c226
-rw-r--r--freetype/src/truetype/ttdriver.h34
-rw-r--r--freetype/src/truetype/tterrors.h48
-rw-r--r--freetype/src/truetype/ttgload.c555
-rw-r--r--freetype/src/truetype/ttgload.h32
-rw-r--r--freetype/src/truetype/ttgxvar.c1436
-rw-r--r--freetype/src/truetype/ttgxvar.h313
-rw-r--r--freetype/src/truetype/ttinterp.c3609
-rw-r--r--freetype/src/truetype/ttinterp.h168
-rw-r--r--freetype/src/truetype/ttobjs.c493
-rw-r--r--freetype/src/truetype/ttobjs.h312
-rw-r--r--freetype/src/truetype/ttpic.c101
-rw-r--r--freetype/src/truetype/ttpic.h88
-rw-r--r--freetype/src/truetype/ttpload.c244
-rw-r--r--freetype/src/truetype/ttpload.h32
-rw-r--r--freetype/src/truetype/ttsubpix.c90
-rw-r--r--freetype/src/truetype/ttsubpix.h52
-rw-r--r--freetype/src/type1/Jamfile2
-rw-r--r--freetype/src/type1/module.mk2
-rw-r--r--freetype/src/type1/rules.mk2
-rw-r--r--freetype/src/type1/t1afm.c46
-rw-r--r--freetype/src/type1/t1afm.h32
-rw-r--r--freetype/src/type1/t1driver.c219
-rw-r--r--freetype/src/type1/t1driver.h38
-rw-r--r--freetype/src/type1/t1errors.h46
-rw-r--r--freetype/src/type1/t1gload.c77
-rw-r--r--freetype/src/type1/t1gload.h32
-rw-r--r--freetype/src/type1/t1load.c410
-rw-r--r--freetype/src/type1/t1load.h32
-rw-r--r--freetype/src/type1/t1objs.c213
-rw-r--r--freetype/src/type1/t1objs.h132
-rw-r--r--freetype/src/type1/t1parse.c110
-rw-r--r--freetype/src/type1/t1parse.h101
-rw-r--r--freetype/src/type1/t1tokens.h32
-rw-r--r--freetype/src/type1/type1.c32
-rw-r--r--freetype/src/type42/Jamfile2
-rw-r--r--freetype/src/type42/module.mk2
-rw-r--r--freetype/src/type42/rules.mk2
-rw-r--r--freetype/src/type42/t42drivr.c86
-rw-r--r--freetype/src/type42/t42drivr.h38
-rw-r--r--freetype/src/type42/t42error.h46
-rw-r--r--freetype/src/type42/t42objs.c87
-rw-r--r--freetype/src/type42/t42objs.h32
-rw-r--r--freetype/src/type42/t42parse.c100
-rw-r--r--freetype/src/type42/t42parse.h32
-rw-r--r--freetype/src/type42/t42types.h32
-rw-r--r--freetype/src/type42/type42.c32
-rw-r--r--freetype/src/winfonts/Jamfile2
-rw-r--r--freetype/src/winfonts/fnterrs.h48
-rw-r--r--freetype/src/winfonts/module.mk2
-rw-r--r--freetype/src/winfonts/rules.mk2
-rw-r--r--freetype/src/winfonts/winfnt.c58
-rw-r--r--freetype/src/winfonts/winfnt.h40
-rw-r--r--freetype/vms_make.com210
-rwxr-xr-xinstall-sh (renamed from freetype/builds/unix/install-sh)23
-rw-r--r--jbig2dec/CHANGES21
-rw-r--r--jbig2dec/Makefile.am2
-rw-r--r--jbig2dec/Makefile.unix6
-rwxr-xr-xjbig2dec/autogen.sh2
-rw-r--r--jbig2dec/config_win32.h9
-rw-r--r--jbig2dec/jbig2.c12
-rw-r--r--jbig2dec/jbig2.h7
-rw-r--r--jbig2dec/jbig2_arith.c98
-rw-r--r--jbig2dec/jbig2_arith.h3
-rw-r--r--jbig2dec/jbig2_arith_iaid.c5
-rw-r--r--jbig2dec/jbig2_arith_int.c29
-rw-r--r--jbig2dec/jbig2_generic.c675
-rw-r--r--jbig2dec/jbig2_halftone.c12
-rw-r--r--jbig2dec/jbig2_huffman.c10
-rw-r--r--jbig2dec/jbig2_hufftab.c318
-rw-r--r--jbig2dec/jbig2_hufftab.h305
-rw-r--r--jbig2dec/jbig2_image.c386
-rw-r--r--jbig2dec/jbig2_mmr.c131
-rw-r--r--jbig2dec/jbig2_page.c17
-rw-r--r--jbig2dec/jbig2_priv.h22
-rw-r--r--jbig2dec/jbig2_refinement.c37
-rw-r--r--jbig2dec/jbig2_segment.c4
-rw-r--r--jbig2dec/jbig2_symbol_dict.c12
-rw-r--r--jbig2dec/jbig2_text.c3
-rw-r--r--jbig2dec/jbig2dec.12
-rw-r--r--jbig2dec/jbig2dec.c8
-rw-r--r--jbig2dec/memento.c147
-rw-r--r--jbig2dec/memento.h36
-rw-r--r--jbig2dec/msvc.mak12
-rwxr-xr-xjbig2dec/test_jbig2dec.py160
-rw-r--r--lcms2mt/ChangeLog2
-rw-r--r--lcms2mt/Projects/VC2010/lcms2mt.rc15
-rwxr-xr-xlcms2mt/config.guess1
-rw-r--r--lcms2mt/include/lcms2mt.h2
-rw-r--r--lcms2mt/src/cmscnvrt.c6
-rw-r--r--lcms2mt/src/cmsintrp.c996
-rw-r--r--lcms2mt/src/cmsio1.c13
-rw-r--r--lcms2mt/src/cmsopt.c2
-rw-r--r--lcms2mt/src/lcms2_internal.h2
-rw-r--r--lib/Fontmap.URW-136.T1580
-rw-r--r--lib/Fontmap.URW-136.TT574
-rwxr-xr-xlib/dvipdf2
-rw-r--r--lib/pdf_info.ps (renamed from toolbin/pdf_info.ps)41
-rw-r--r--libpng/ANNOUNCE58
-rw-r--r--libpng/AUTHORS45
-rw-r--r--libpng/CHANGES106
-rw-r--r--libpng/CMakeLists.txt324
-rw-r--r--libpng/INSTALL2
-rw-r--r--libpng/LICENSE179
-rw-r--r--libpng/Makefile.am7
-rw-r--r--libpng/Makefile.in374
-rw-r--r--libpng/README113
-rw-r--r--libpng/TODO49
-rw-r--r--libpng/TRADEMARK8
-rw-r--r--libpng/aclocal.m4193
-rw-r--r--libpng/arm/arm_init.c3
-rw-r--r--libpng/arm/filter_neon.S2
-rw-r--r--libpng/arm/filter_neon_intrinsics.c27
-rw-r--r--libpng/arm/palette_neon_intrinsics.c149
-rwxr-xr-xlibpng/autogen.sh2
-rwxr-xr-xlibpng/compile13
-rwxr-xr-xlibpng/config.guess1421
-rw-r--r--libpng/config.h.in3
-rwxr-xr-xlibpng/config.sub1807
-rwxr-xr-xlibpng/configure16128
-rw-r--r--libpng/configure.ac9
-rw-r--r--libpng/contrib/conftest/pngcp.dfa4
-rw-r--r--libpng/contrib/examples/iccfrompng.c2
-rw-r--r--libpng/contrib/examples/pngpixel.c6
-rw-r--r--libpng/contrib/gregbook/readpng2.c2
-rw-r--r--libpng/contrib/libtests/makepng.c42
-rw-r--r--libpng/contrib/libtests/pngimage.c18
-rw-r--r--libpng/contrib/libtests/pngstest.c39
-rw-r--r--libpng/contrib/libtests/pngunknown.c4
-rw-r--r--libpng/contrib/libtests/pngvalid.c240
-rw-r--r--libpng/contrib/libtests/readpng.c2
-rw-r--r--libpng/contrib/libtests/tarith.c10
-rw-r--r--libpng/contrib/libtests/timepng.c4
-rw-r--r--libpng/contrib/oss-fuzz/Dockerfile7
-rw-r--r--libpng/contrib/oss-fuzz/README.txt4
-rwxr-xr-xlibpng/contrib/oss-fuzz/build.sh11
-rw-r--r--libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc24
-rw-r--r--libpng/contrib/oss-fuzz/newcc190
-rw-r--r--libpng/contrib/pngminus/CHANGES.txt13
-rw-r--r--libpng/contrib/pngminus/CMakeLists.txt24
-rw-r--r--libpng/contrib/pngminus/LICENSE.txt22
-rw-r--r--libpng/contrib/pngminus/Makefile62
-rw-r--r--libpng/contrib/pngminus/README.txt (renamed from libpng/contrib/pngminus/README)85
-rw-r--r--libpng/contrib/pngminus/makefile.std66
-rw-r--r--libpng/contrib/pngminus/makefile.tc338
-rwxr-xr-xlibpng/contrib/pngminus/png2pnm.bat4
-rw-r--r--libpng/contrib/pngminus/png2pnm.c165
-rwxr-xr-xlibpng/contrib/pngminus/png2pnm.sh4
-rwxr-xr-xlibpng/contrib/pngminus/pngminus.bat2
-rwxr-xr-xlibpng/contrib/pngminus/pngminus.sh2
-rwxr-xr-xlibpng/contrib/pngminus/pnm2png.bat4
-rw-r--r--libpng/contrib/pngminus/pnm2png.c258
-rwxr-xr-xlibpng/contrib/pngminus/pnm2png.sh4
-rw-r--r--libpng/contrib/pngsuite/README2
-rw-r--r--libpng/contrib/pngsuite/bad_interlace_conversions.txt9
-rw-r--r--libpng/contrib/pngsuite/ibasn0g08.pngbin0 -> 237 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn0g16.pngbin0 -> 274 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn2c08.pngbin0 -> 299 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn2c16.pngbin0 -> 558 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn3p08.pngbin0 -> 1492 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn4a08.pngbin0 -> 198 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn4a16.pngbin0 -> 2839 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn6a08.pngbin0 -> 339 bytes
-rw-r--r--libpng/contrib/pngsuite/ibasn6a16.pngbin0 -> 4164 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbbn2c16.pngbin0 -> 2624 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbbn3p08.pngbin0 -> 1507 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbgn2c16.pngbin0 -> 2624 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbgn3p08.pngbin0 -> 1507 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbrn2c08.pngbin0 -> 1624 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbwn0g16.pngbin0 -> 1448 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbwn3p08.pngbin0 -> 1507 bytes
-rw-r--r--libpng/contrib/pngsuite/iftbyn3p08.pngbin0 -> 1507 bytes
-rw-r--r--libpng/contrib/pngsuite/iftp0n0g08.pngbin0 -> 847 bytes
-rw-r--r--libpng/contrib/pngsuite/iftp0n2c08.pngbin0 -> 2020 bytes
-rw-r--r--libpng/contrib/pngsuite/iftp0n3p08.pngbin0 -> 1495 bytes
-rw-r--r--libpng/contrib/pngsuite/iftp1n3p08.pngbin0 -> 1507 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/README2
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn0g01.pngbin0 -> 201 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn0g02.pngbin0 -> 138 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn0g04.pngbin0 -> 231 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn3p01.pngbin0 -> 116 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn3p02.pngbin0 -> 163 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/ibasn3p04.pngbin0 -> 288 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/iftbbn0g01.pngbin0 -> 214 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/iftbbn0g02.pngbin0 -> 211 bytes
-rw-r--r--libpng/contrib/pngsuite/interlaced/iftbbn0g04.pngbin0 -> 489 bytes
-rw-r--r--libpng/contrib/powerpc-vsx/README2
-rw-r--r--libpng/contrib/powerpc-vsx/linux_aux.c6
-rwxr-xr-xlibpng/contrib/testpngs/makepngs.sh2
-rwxr-xr-xlibpng/contrib/tools/chkfmt2
-rw-r--r--libpng/contrib/tools/makesRGB.c6
-rw-r--r--libpng/contrib/tools/pngcp.c26
-rw-r--r--libpng/contrib/tools/pngfix.c16
-rw-r--r--libpng/contrib/visupng/PngFile.c11
-rw-r--r--libpng/contrib/visupng/PngFile.h4
-rw-r--r--libpng/contrib/visupng/VisualPng.c2
-rwxr-xr-xlibpng/depcomp10
-rw-r--r--libpng/example.c436
-rwxr-xr-xlibpng/install-sh501
-rw-r--r--libpng/intel/filter_sse2_intrinsics.c49
-rw-r--r--libpng/intel/intel_init.c3
-rw-r--r--libpng/libpng-manual.txt157
-rw-r--r--libpng/libpng.3383
-rw-r--r--libpng/libpngpf.320
-rw-r--r--libpng/mips/filter_msa_intrinsics.c23
-rw-r--r--libpng/mips/mips_init.c3
-rwxr-xr-xlibpng/missing16
-rw-r--r--libpng/png.566
-rw-r--r--libpng/png.c83
-rw-r--r--libpng/png.h363
-rw-r--r--libpng/pngconf.h45
-rw-r--r--libpng/pngdebug.h6
-rw-r--r--libpng/pngerror.c12
-rw-r--r--libpng/pngget.c21
-rw-r--r--libpng/pnginfo.h18
-rw-r--r--libpng/pngmem.c6
-rw-r--r--libpng/pngpread.c52
-rw-r--r--libpng/pngpriv.h80
-rw-r--r--libpng/pngread.c48
-rw-r--r--libpng/pngrio.c16
-rw-r--r--libpng/pngrtran.c1684
-rw-r--r--libpng/pngrutil.c108
-rw-r--r--libpng/pngset.c28
-rw-r--r--libpng/pngstruct.h32
-rw-r--r--libpng/pngtest.c48
-rw-r--r--libpng/pngtrans.c28
-rw-r--r--libpng/pngwio.c14
-rw-r--r--libpng/pngwrite.c41
-rw-r--r--libpng/pngwtran.c19
-rw-r--r--libpng/pngwutil.c197
-rw-r--r--libpng/powerpc/filter_vsx_intrinsics.c19
-rw-r--r--libpng/powerpc/powerpc_init.c3
-rw-r--r--libpng/projects/owatcom/pngconfig.mak4
-rw-r--r--libpng/projects/visualc71/README.txt2
-rw-r--r--libpng/projects/vstudio/README.txt114
-rw-r--r--libpng/projects/vstudio/zlib.props9
-rw-r--r--libpng/scripts/README.txt55
-rw-r--r--libpng/scripts/def.c29
-rw-r--r--libpng/scripts/descrip.mms4
-rw-r--r--libpng/scripts/libpng-config-head.in2
-rw-r--r--libpng/scripts/libpng.pc.in2
-rw-r--r--libpng/scripts/makefile.32sunu2
-rw-r--r--libpng/scripts/makefile.64sunu2
-rw-r--r--libpng/scripts/makefile.bor170
-rw-r--r--libpng/scripts/makefile.cegcc2
-rw-r--r--libpng/scripts/makefile.clang87
-rw-r--r--libpng/scripts/makefile.clang-asan87
-rw-r--r--libpng/scripts/makefile.darwin2
-rw-r--r--libpng/scripts/makefile.freebsd2
-rw-r--r--libpng/scripts/makefile.gcc6
-rw-r--r--libpng/scripts/makefile.gcc-asan87
-rw-r--r--libpng/scripts/makefile.hp644
-rw-r--r--libpng/scripts/makefile.hpgcc2
-rw-r--r--libpng/scripts/makefile.hpux4
-rw-r--r--libpng/scripts/makefile.knr116
-rw-r--r--libpng/scripts/makefile.linux7
-rw-r--r--libpng/scripts/makefile.linux-opt4
-rw-r--r--libpng/scripts/makefile.mips2
-rw-r--r--libpng/scripts/makefile.msc100
-rw-r--r--libpng/scripts/makefile.msys9
-rw-r--r--libpng/scripts/makefile.ne12bsd56
-rw-r--r--libpng/scripts/makefile.netbsd21
-rw-r--r--libpng/scripts/makefile.openbsd18
-rw-r--r--libpng/scripts/makefile.sco2
-rw-r--r--libpng/scripts/makefile.sggcc2
-rw-r--r--libpng/scripts/makefile.sgi2
-rw-r--r--libpng/scripts/makefile.so92
-rw-r--r--libpng/scripts/makefile.solaris5
-rw-r--r--libpng/scripts/makefile.solaris-x86243
-rw-r--r--libpng/scripts/makefile.std4
-rw-r--r--libpng/scripts/makefile.sunos2
-rw-r--r--libpng/scripts/makefile.tc3100
-rwxr-xr-xlibpng/scripts/options.awk8
-rw-r--r--libpng/scripts/pnglibconf.dfa13
-rw-r--r--libpng/scripts/pnglibconf.h.prebuilt11
-rw-r--r--libpng/scripts/symbols.def1
-rwxr-xr-xlibpng/test-driver10
-rw-r--r--man/dvipdf.14
-rw-r--r--man/gs.14
-rw-r--r--man/gslp.14
-rw-r--r--man/gsnd.14
-rw-r--r--man/pdf2dsc.14
-rw-r--r--man/pdf2ps.14
-rw-r--r--man/pf2afm.14
-rw-r--r--man/pfbtopfa.14
-rw-r--r--man/printafm.14
-rw-r--r--man/ps2ascii.14
-rw-r--r--man/ps2epsi.14
-rw-r--r--man/ps2pdf.14
-rw-r--r--man/ps2pdfwr.14
-rw-r--r--man/ps2ps.14
-rw-r--r--openjpeg/.travis.yml153
-rw-r--r--openjpeg/CHANGELOG.md84
-rw-r--r--openjpeg/INSTALL.md138
-rw-r--r--openjpeg/NEWS.md8
-rw-r--r--openjpeg/appveyor.yml6
-rw-r--r--openjpeg/doc/Doxyfile.dox.cmake.in6
-rw-r--r--openjpeg/src/bin/CMakeLists.txt21
-rw-r--r--openjpeg/src/bin/common/CMakeLists.txt7
-rw-r--r--openjpeg/src/bin/common/color.c1127
-rw-r--r--openjpeg/src/bin/common/color.h47
-rw-r--r--openjpeg/src/bin/common/format_defs.h55
-rw-r--r--openjpeg/src/bin/common/opj_apps_config.h.cmake.in15
-rw-r--r--openjpeg/src/bin/common/opj_getopt.c277
-rw-r--r--openjpeg/src/bin/common/opj_getopt.h28
-rw-r--r--openjpeg/src/bin/common/opj_string.h72
-rw-r--r--openjpeg/src/bin/jp2/CMakeLists.txt88
-rw-r--r--openjpeg/src/bin/jp2/convert.c2595
-rw-r--r--openjpeg/src/bin/jp2/convert.h126
-rw-r--r--openjpeg/src/bin/jp2/convertbmp.c1106
-rw-r--r--openjpeg/src/bin/jp2/convertpng.c517
-rw-r--r--openjpeg/src/bin/jp2/converttif.c1510
-rw-r--r--openjpeg/src/bin/jp2/index.c456
-rw-r--r--openjpeg/src/bin/jp2/index.h54
-rw-r--r--openjpeg/src/bin/jp2/opj_compress.c2069
-rw-r--r--openjpeg/src/bin/jp2/opj_decompress.c1801
-rw-r--r--openjpeg/src/bin/jp2/opj_dump.c642
-rw-r--r--openjpeg/src/bin/jp2/windirent.h683
-rw-r--r--openjpeg/src/bin/jp3d/CMakeLists.txt41
-rw-r--r--openjpeg/src/bin/jp3d/convert.c1050
-rw-r--r--openjpeg/src/bin/jp3d/convert.h52
-rw-r--r--openjpeg/src/bin/jp3d/getopt.c119
-rw-r--r--openjpeg/src/bin/jp3d/getopt.h14
-rw-r--r--openjpeg/src/bin/jp3d/opj_jp3d_compress.c989
-rw-r--r--openjpeg/src/bin/jp3d/opj_jp3d_decompress.c601
-rwxr-xr-xopenjpeg/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl115
-rw-r--r--openjpeg/src/bin/jp3d/tcltk/README13
-rwxr-xr-xopenjpeg/src/bin/jp3d/tcltk/Thumbs.dbbin18944 -> 0 bytes
-rwxr-xr-xopenjpeg/src/bin/jp3d/tcltk/decoder.tcl272
-rwxr-xr-xopenjpeg/src/bin/jp3d/tcltk/encoder.tcl470
-rwxr-xr-xopenjpeg/src/bin/jp3d/tcltk/logoLPI.gifbin5212 -> 0 bytes
-rw-r--r--openjpeg/src/bin/jp3d/windirent.h679
-rw-r--r--openjpeg/src/bin/jpip/CMakeLists.txt161
-rw-r--r--openjpeg/src/bin/jpip/README149
-rw-r--r--openjpeg/src/bin/jpip/opj_dec_server.c98
-rw-r--r--openjpeg/src/bin/jpip/opj_jpip_addxml.c187
-rw-r--r--openjpeg/src/bin/jpip/opj_jpip_test.c75
-rw-r--r--openjpeg/src/bin/jpip/opj_jpip_transcode.c125
-rw-r--r--openjpeg/src/bin/jpip/opj_server.c131
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/dist/manifest.txt4
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/ImageManager.java136
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/ImageViewer.java266
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/ImageWindow.java120
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/ImgdecClient.java350
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/JPIPHttpClient.java503
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/MML.java116
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/PnmImage.java154
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/RegimViewer.java114
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer/src/ResizeListener.java67
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer_xerces/dist/manifest.txt.in5
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageViewer.java266
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageWindow.java124
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer_xerces/src/JP2XMLparser.java122
-rw-r--r--openjpeg/src/bin/jpip/opj_viewer_xerces/src/OptionPanel.java98
-rw-r--r--openjpeg/src/bin/jpwl/CMakeLists.txt62
-rw-r--r--openjpeg/src/bin/jpwl/convert.c3748
-rw-r--r--openjpeg/src/bin/jpwl/convert.h90
-rw-r--r--openjpeg/src/bin/jpwl/index.c454
-rw-r--r--openjpeg/src/bin/jpwl/index.h54
-rw-r--r--openjpeg/src/bin/jpwl/opj_jpwl_compress.c1951
-rw-r--r--openjpeg/src/bin/jpwl/opj_jpwl_decompress.c895
-rw-r--r--openjpeg/src/bin/jpwl/windirent.h680
-rw-r--r--openjpeg/src/bin/mj2/CMakeLists.txt47
-rw-r--r--openjpeg/src/bin/mj2/meta_out.c2858
-rw-r--r--openjpeg/src/bin/mj2/meta_out.h14
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata.c349
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata.dtd425
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata.h9
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata.sln29
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata.vcproj349
-rw-r--r--openjpeg/src/bin/mj2/mj2_to_metadata_Notes.docbin35328 -> 0 bytes
-rw-r--r--openjpeg/src/bin/mj2/opj_mj2_compress.c852
-rw-r--r--openjpeg/src/bin/mj2/opj_mj2_decompress.c258
-rw-r--r--openjpeg/src/bin/mj2/opj_mj2_extract.c162
-rw-r--r--openjpeg/src/bin/mj2/opj_mj2_wrap.c537
-rw-r--r--openjpeg/src/bin/mj2/readme.txt3
-rw-r--r--openjpeg/src/bin/wx/CMakeLists.txt4
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/CMakeLists.txt29
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/OPJViewer.iss48
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/Readme.txt100
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/about/about.htm36
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/about/opj_logo.pngbin6500 -> 0 bytes
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJAbout.cpp92
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJChild.icobin1078 -> 0 bytes
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJChild16.xpm28
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJDialogs.cpp1378
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJThreads.cpp1293
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.cpp1671
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.h869
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.icobin1078 -> 0 bytes
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.rc3
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/OPJViewer16.xpm26
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/about_htm.h56
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/build.h1
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/icon1.xpm79
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/icon2.xpm53
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/icon3.xpm79
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/icon4.xpm43
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/icon5.xpm79
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.cpp1595
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.h184
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/imagmxf.cpp507
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/imagmxf.h106
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/license.txt14
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/opj_logo.xpm285
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/readmeafter.txt34
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/readmebefore.txt11
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/wxj2kparser.cpp1470
-rw-r--r--openjpeg/src/bin/wx/OPJViewer/source/wxjp2parser.cpp1121
-rw-r--r--openjpeg/src/lib/CMakeLists.txt17
-rw-r--r--openjpeg/src/lib/openjp2/CMakeLists.txt3
-rw-r--r--openjpeg/src/lib/openjp2/bench_dwt.c2
-rw-r--r--openjpeg/src/lib/openjp2/dwt.c11
-rw-r--r--openjpeg/src/lib/openjp2/image.c4
-rw-r--r--openjpeg/src/lib/openjp2/j2k.c44
-rw-r--r--openjpeg/src/lib/openjp2/jp2.c9
-rw-r--r--openjpeg/src/lib/openjp2/openjpeg.h10
-rw-r--r--openjpeg/src/lib/openjp2/opj_intmath.h2
-rw-r--r--openjpeg/src/lib/openjp2/pi.c19
-rw-r--r--openjpeg/src/lib/openjp2/t1.c17
-rw-r--r--openjpeg/src/lib/openjp2/t2.c18
-rw-r--r--openjpeg/src/lib/openjp2/tcd.c26
-rw-r--r--openjpeg/src/lib/openjp2/thread.c4
-rw-r--r--psi/dscparse.c10
-rw-r--r--psi/dwtext.c4
-rw-r--r--psi/iapi.h11
-rw-r--r--psi/icontext.c3
-rw-r--r--psi/imain.c21
-rw-r--r--psi/imainarg.c4
-rw-r--r--psi/int.mak3157
-rw-r--r--psi/isave.c4
-rw-r--r--psi/msvc.mak247
-rw-r--r--psi/nsisinst.nsi27
-rw-r--r--psi/winint.mak2
-rw-r--r--psi/zbfont.c2
-rw-r--r--psi/zcolor.c7
-rw-r--r--psi/zfile.c5
-rw-r--r--psi/zfilter.c8
-rw-r--r--psi/zfont2.c10
-rw-r--r--psi/zpaint.c60
-rw-r--r--psi/zpcolor.c2
-rw-r--r--psi/ztype.c9
-rw-r--r--psi/zvmem.c3
-rw-r--r--tiff/CMakeLists.txt170
-rw-r--r--tiff/ChangeLog1599
-rw-r--r--tiff/HOWTO-RELEASE71
-rw-r--r--tiff/Makefile.am3
-rw-r--r--tiff/Makefile.in36
-rw-r--r--tiff/Makefile.vc1
-rw-r--r--tiff/README.md (renamed from tiff/README)20
-rw-r--r--tiff/README.vms12
-rw-r--r--tiff/RELEASE-DATE2
-rw-r--r--tiff/SConstruct2
-rw-r--r--tiff/TODO2
-rw-r--r--tiff/VERSION2
-rw-r--r--tiff/aclocal.m4191
-rw-r--r--tiff/build/Makefile.in20
-rwxr-xr-xtiff/config/compile13
-rwxr-xr-xtiff/config/config.guess742
-rwxr-xr-xtiff/config/config.sub359
-rwxr-xr-xtiff/config/depcomp10
-rwxr-xr-xtiff/config/install-sh512
-rw-r--r--[-rwxr-xr-x]tiff/config/ltmain.sh37
-rwxr-xr-xtiff/config/missing16
-rwxr-xr-xtiff/config/mkinstalldirs161
-rwxr-xr-xtiff/config/test-driver37
-rwxr-xr-xtiff/configure677
-rw-r--r--tiff/configure.ac154
-rw-r--r--tiff/configure.com1
-rw-r--r--tiff/contrib/Makefile.in20
-rw-r--r--tiff/contrib/addtiffo/Makefile.in47
-rw-r--r--tiff/contrib/addtiffo/addtiffo.c2
-rw-r--r--tiff/contrib/addtiffo/tif_overview.c14
-rw-r--r--tiff/contrib/addtiffo/tif_ovrcache.c2
-rw-r--r--tiff/contrib/dbs/Makefile.in52
-rw-r--r--tiff/contrib/dbs/tiff-bi.c2
-rw-r--r--tiff/contrib/dbs/tiff-grayscale.c2
-rw-r--r--tiff/contrib/dbs/tiff-palette.c2
-rw-r--r--tiff/contrib/dbs/tiff-rgb.c2
-rw-r--r--tiff/contrib/dbs/xtiff/Makefile.in18
-rw-r--r--tiff/contrib/dbs/xtiff/xtiff.c2
-rw-r--r--tiff/contrib/iptcutil/Makefile.in38
-rw-r--r--tiff/contrib/iptcutil/iptcutil.c5
-rw-r--r--tiff/contrib/mfs/Makefile.in18
-rw-r--r--tiff/contrib/pds/Makefile.in18
-rw-r--r--tiff/contrib/pds/README2
-rw-r--r--tiff/contrib/pds/tif_imageiter.c8
-rw-r--r--tiff/contrib/pds/tif_imageiter.h2
-rw-r--r--tiff/contrib/pds/tif_pdsdirread.c6
-rw-r--r--tiff/contrib/pds/tif_pdsdirwrite.c2
-rw-r--r--tiff/contrib/ras/Makefile.in18
-rw-r--r--tiff/contrib/ras/tif2ras.c3
-rw-r--r--tiff/contrib/stream/Makefile.in18
-rw-r--r--tiff/contrib/tags/Makefile.in18
-rw-r--r--tiff/contrib/tags/README2
-rw-r--r--tiff/contrib/tags/xtif_dir.c2
-rw-r--r--tiff/contrib/win_dib/Makefile.in18
-rw-r--r--tiff/contrib/win_dib/Makefile.w952
-rw-r--r--tiff/contrib/win_dib/README.tiff2dib2
-rw-r--r--tiff/contrib/win_dib/Tiffile.cpp4
-rw-r--r--tiff/html/Makefile.am4
-rw-r--r--tiff/html/Makefile.in24
-rw-r--r--tiff/html/addingtags.html4
-rw-r--r--tiff/html/bugs.html21
-rw-r--r--tiff/html/build.html2
-rw-r--r--tiff/html/document.html4
-rw-r--r--tiff/html/images.html4
-rw-r--r--tiff/html/images/Makefile.in18
-rw-r--r--tiff/html/index.html30
-rw-r--r--tiff/html/libtiff.html6
-rw-r--r--tiff/html/man/Makefile.in18
-rw-r--r--tiff/html/man/TIFFReadDirectory.3tiff.html8
-rw-r--r--tiff/html/man/TIFFWriteDirectory.3tiff.html2
-rw-r--r--tiff/html/man/TIFFmemory.3tiff.html2
-rw-r--r--tiff/html/v3.4beta007.html2
-rw-r--r--tiff/html/v3.4beta016.html2
-rw-r--r--tiff/html/v3.4beta018.html2
-rw-r--r--tiff/html/v3.4beta024.html2
-rw-r--r--tiff/html/v3.4beta028.html2
-rw-r--r--tiff/html/v3.4beta029.html2
-rw-r--r--tiff/html/v3.4beta031.html2
-rw-r--r--tiff/html/v3.4beta032.html2
-rw-r--r--tiff/html/v3.4beta033.html2
-rw-r--r--tiff/html/v3.4beta034.html2
-rw-r--r--tiff/html/v3.4beta035.html2
-rw-r--r--tiff/html/v3.4beta036.html2
-rw-r--r--tiff/html/v3.5.1.html2
-rw-r--r--tiff/html/v3.5.2.html2
-rw-r--r--tiff/html/v3.5.3.html4
-rw-r--r--tiff/html/v3.5.4.html2
-rw-r--r--tiff/html/v3.5.5.html2
-rw-r--r--tiff/html/v3.5.6-beta.html4
-rw-r--r--tiff/html/v3.5.7.html4
-rw-r--r--tiff/html/v3.6.0.html6
-rw-r--r--tiff/html/v3.6.1.html4
-rw-r--r--tiff/html/v3.7.0.html2
-rw-r--r--tiff/html/v3.7.0alpha.html2
-rw-r--r--tiff/html/v3.7.0beta.html2
-rw-r--r--tiff/html/v3.7.0beta2.html2
-rw-r--r--tiff/html/v3.7.1.html2
-rw-r--r--tiff/html/v3.7.2.html4
-rw-r--r--tiff/html/v3.7.3.html4
-rw-r--r--tiff/html/v3.7.4.html2
-rw-r--r--tiff/html/v3.8.0.html2
-rw-r--r--tiff/html/v3.8.1.html2
-rw-r--r--tiff/html/v3.8.2.html2
-rw-r--r--tiff/html/v3.9.0beta.html2
-rw-r--r--tiff/html/v3.9.1.html2
-rw-r--r--tiff/html/v3.9.2.html2
-rw-r--r--tiff/html/v4.0.0.html6
-rw-r--r--tiff/html/v4.0.1.html2
-rw-r--r--tiff/html/v4.0.10.html326
-rw-r--r--tiff/html/v4.0.2.html2
-rw-r--r--tiff/html/v4.0.3.html2
-rw-r--r--tiff/html/v4.0.4.html2
-rw-r--r--tiff/html/v4.0.4beta.html2
-rw-r--r--tiff/html/v4.0.5.html2
-rw-r--r--tiff/html/v4.0.6.html2
-rw-r--r--tiff/html/v4.0.7.html2
-rw-r--r--tiff/html/v4.0.8.html2
-rw-r--r--tiff/html/v4.0.9.html2
-rw-r--r--tiff/html/v4.1.0.html198
-rw-r--r--tiff/libtiff/CMakeLists.txt18
-rw-r--r--tiff/libtiff/Makefile.am4
-rw-r--r--tiff/libtiff/Makefile.in279
-rw-r--r--tiff/libtiff/Makefile.vc2
-rw-r--r--tiff/libtiff/SConstruct2
-rw-r--r--tiff/libtiff/libtiff.def7
-rw-r--r--tiff/libtiff/mkg3states.c4
-rw-r--r--tiff/libtiff/t4.h2
-rw-r--r--tiff/libtiff/tif_aux.c77
-rw-r--r--tiff/libtiff/tif_close.c2
-rw-r--r--tiff/libtiff/tif_codec.c10
-rw-r--r--tiff/libtiff/tif_color.c4
-rw-r--r--tiff/libtiff/tif_compress.c2
-rw-r--r--tiff/libtiff/tif_config.h.cmake.in48
-rw-r--r--tiff/libtiff/tif_config.h.in62
-rw-r--r--tiff/libtiff/tif_config.wince.h2
-rw-r--r--tiff/libtiff/tif_dir.c96
-rw-r--r--tiff/libtiff/tif_dir.h18
-rw-r--r--tiff/libtiff/tif_dirinfo.c17
-rw-r--r--tiff/libtiff/tif_dirread.c1356
-rw-r--r--tiff/libtiff/tif_dirwrite.c352
-rw-r--r--tiff/libtiff/tif_dumpmode.c2
-rw-r--r--tiff/libtiff/tif_error.c2
-rw-r--r--tiff/libtiff/tif_extension.c2
-rw-r--r--tiff/libtiff/tif_fax3.c2
-rw-r--r--tiff/libtiff/tif_fax3.h2
-rw-r--r--tiff/libtiff/tif_flush.c120
-rw-r--r--tiff/libtiff/tif_getimage.c36
-rw-r--r--tiff/libtiff/tif_jbig.c34
-rw-r--r--tiff/libtiff/tif_jpeg.c42
-rw-r--r--tiff/libtiff/tif_luv.c37
-rw-r--r--tiff/libtiff/tif_lzma.c11
-rw-r--r--tiff/libtiff/tif_lzw.c34
-rw-r--r--tiff/libtiff/tif_next.c2
-rw-r--r--tiff/libtiff/tif_ojpeg.c218
-rw-r--r--tiff/libtiff/tif_open.c28
-rw-r--r--tiff/libtiff/tif_packbits.c2
-rw-r--r--tiff/libtiff/tif_pixarlog.c16
-rw-r--r--tiff/libtiff/tif_predict.c2
-rw-r--r--tiff/libtiff/tif_predict.h6
-rw-r--r--tiff/libtiff/tif_print.c14
-rw-r--r--tiff/libtiff/tif_read.c269
-rw-r--r--tiff/libtiff/tif_stream.cxx8
-rw-r--r--tiff/libtiff/tif_strip.c40
-rw-r--r--tiff/libtiff/tif_swab.c2
-rw-r--r--tiff/libtiff/tif_thunder.c12
-rw-r--r--tiff/libtiff/tif_tile.c29
-rw-r--r--tiff/libtiff/tif_unix.c2
-rw-r--r--tiff/libtiff/tif_version.c1
-rw-r--r--tiff/libtiff/tif_warning.c2
-rw-r--r--tiff/libtiff/tif_webp.c695
-rw-r--r--tiff/libtiff/tif_win32.c41
-rw-r--r--tiff/libtiff/tif_write.c146
-rw-r--r--tiff/libtiff/tif_zip.c60
-rw-r--r--tiff/libtiff/tif_zstd.c440
-rw-r--r--tiff/libtiff/tiff.h18
-rw-r--r--tiff/libtiff/tiffconf.h.cmake.in9
-rw-r--r--tiff/libtiff/tiffconf.h.in9
-rw-r--r--tiff/libtiff/tiffconf.vc.h9
-rw-r--r--tiff/libtiff/tiffconf.wince.h11
-rw-r--r--tiff/libtiff/tiffio.h17
-rw-r--r--tiff/libtiff/tiffio.hxx3
-rw-r--r--tiff/libtiff/tiffiop.h56
-rw-r--r--tiff/libtiff/tiffvers.h4
-rw-r--r--tiff/m4/libtool.m427
-rw-r--r--tiff/man/Makefile.in17
-rw-r--r--tiff/man/TIFFClose.3tiff1
-rw-r--r--tiff/man/TIFFDataWidth.3tiff1
-rw-r--r--tiff/man/TIFFError.3tiff1
-rw-r--r--tiff/man/TIFFFieldDataType.3tiff1
-rw-r--r--tiff/man/TIFFFieldName.3tiff1
-rw-r--r--tiff/man/TIFFFieldPassCount.3tiff1
-rw-r--r--tiff/man/TIFFFieldReadCount.3tiff1
-rw-r--r--tiff/man/TIFFFieldTag.3tiff1
-rw-r--r--tiff/man/TIFFFieldWriteCount.3tiff1
-rw-r--r--tiff/man/TIFFFlush.3tiff1
-rw-r--r--tiff/man/TIFFGetField.3tiff1
-rw-r--r--tiff/man/TIFFOpen.3tiff16
-rw-r--r--tiff/man/TIFFPrintDirectory.3tiff1
-rw-r--r--tiff/man/TIFFRGBAImage.3tiff1
-rw-r--r--tiff/man/TIFFReadDirectory.3tiff1
-rw-r--r--tiff/man/TIFFReadEncodedStrip.3tiff1
-rw-r--r--tiff/man/TIFFReadEncodedTile.3tiff1
-rw-r--r--tiff/man/TIFFReadRGBAImage.3tiff1
-rw-r--r--tiff/man/TIFFReadRGBAStrip.3tiff1
-rw-r--r--tiff/man/TIFFReadRGBATile.3tiff1
-rw-r--r--tiff/man/TIFFReadRawStrip.3tiff1
-rw-r--r--tiff/man/TIFFReadRawTile.3tiff1
-rw-r--r--tiff/man/TIFFReadScanline.3tiff1
-rw-r--r--tiff/man/TIFFReadTile.3tiff1
-rw-r--r--tiff/man/TIFFSetDirectory.3tiff1
-rw-r--r--tiff/man/TIFFSetField.3tiff1
-rw-r--r--tiff/man/TIFFWarning.3tiff1
-rw-r--r--tiff/man/TIFFWriteDirectory.3tiff1
-rw-r--r--tiff/man/TIFFWriteEncodedStrip.3tiff1
-rw-r--r--tiff/man/TIFFWriteEncodedTile.3tiff1
-rw-r--r--tiff/man/TIFFWriteRawStrip.3tiff1
-rw-r--r--tiff/man/TIFFWriteRawTile.3tiff1
-rw-r--r--tiff/man/TIFFWriteScanline.3tiff1
-rw-r--r--tiff/man/TIFFWriteTile.3tiff1
-rw-r--r--tiff/man/TIFFbuffer.3tiff1
-rw-r--r--tiff/man/TIFFcodec.3tiff1
-rw-r--r--tiff/man/TIFFcolor.3tiff1
-rw-r--r--tiff/man/TIFFmemory.3tiff3
-rw-r--r--tiff/man/TIFFquery.3tiff3
-rw-r--r--tiff/man/TIFFsize.3tiff1
-rw-r--r--tiff/man/TIFFstrip.3tiff1
-rw-r--r--tiff/man/TIFFswab.3tiff1
-rw-r--r--tiff/man/TIFFtile.3tiff1
-rw-r--r--tiff/man/fax2ps.11
-rw-r--r--tiff/man/fax2tiff.11
-rw-r--r--tiff/man/libtiff.3tiff7
-rw-r--r--tiff/man/pal2rgb.11
-rw-r--r--tiff/man/ppm2tiff.11
-rw-r--r--tiff/man/raw2tiff.11
-rw-r--r--tiff/man/tiff2bw.11
-rw-r--r--tiff/man/tiff2pdf.11
-rw-r--r--tiff/man/tiff2ps.11
-rw-r--r--tiff/man/tiff2rgba.11
-rw-r--r--tiff/man/tiffcmp.11
-rw-r--r--tiff/man/tiffcp.11
-rw-r--r--tiff/man/tiffcrop.11
-rw-r--r--tiff/man/tiffdither.11
-rw-r--r--tiff/man/tiffdump.11
-rw-r--r--tiff/man/tiffgt.11
-rw-r--r--tiff/man/tiffinfo.11
-rw-r--r--tiff/man/tiffmedian.11
-rw-r--r--tiff/man/tiffset.11
-rw-r--r--tiff/man/tiffsplit.11
-rw-r--r--tiff/nmake.opt15
-rw-r--r--tiff/port/CMakeLists.txt8
-rw-r--r--tiff/port/Makefile.am4
-rw-r--r--tiff/port/Makefile.in92
-rw-r--r--tiff/port/Makefile.vc1
-rw-r--r--tiff/port/_strtol.h160
-rw-r--r--tiff/port/_strtoul.h127
-rw-r--r--tiff/port/dummy.c2
-rw-r--r--tiff/port/getopt.c2
-rw-r--r--tiff/port/lfind.c2
-rw-r--r--tiff/port/libport.h13
-rw-r--r--tiff/port/snprintf.c4
-rw-r--r--tiff/port/strcasecmp.c2
-rw-r--r--tiff/port/strtol.c45
-rw-r--r--tiff/port/strtoll.c44
-rw-r--r--tiff/port/strtoul.c91
-rw-r--r--tiff/port/strtoull.c108
-rw-r--r--tiff/test/CMakeLists.txt20
-rw-r--r--tiff/test/Makefile.am20
-rw-r--r--tiff/test/Makefile.in206
-rw-r--r--tiff/test/ascii_tag.c2
-rw-r--r--tiff/test/check_tag.c2
-rw-r--r--tiff/test/common.sh2
-rw-r--r--tiff/test/custom_dir.c2
-rw-r--r--tiff/test/defer_strile_loading.c311
-rw-r--r--tiff/test/defer_strile_writing.c239
-rwxr-xr-xtiff/test/fax2tiff.sh17
-rw-r--r--tiff/test/images/README.txt3
-rw-r--r--tiff/test/images/lzw-single-strip.tiffbin0 -> 76264 bytes
-rw-r--r--tiff/test/images/miniswhite-1c-1b.g3bin0 -> 9687 bytes
-rw-r--r--tiff/test/long_tag.c2
-rw-r--r--tiff/test/raw_decode.c2
-rw-r--r--tiff/test/refs/o-tiff2ps-EPS1.ps112
-rw-r--r--tiff/test/refs/o-tiff2ps-PS1.ps115
-rw-r--r--tiff/test/refs/o-tiff2ps-PS2.ps104
-rw-r--r--tiff/test/refs/o-tiff2ps-PS3.ps104
-rw-r--r--tiff/test/rewrite_tag.c41
-rw-r--r--tiff/test/short_tag.c2
-rw-r--r--tiff/test/strip.c2
-rw-r--r--tiff/test/strip_rw.c2
-rw-r--r--tiff/test/test_arrays.c2
-rw-r--r--tiff/test/test_arrays.h2
-rw-r--r--tiff/test/testtypes.c58
-rwxr-xr-xtiff/test/tiff2ps-EPS1.sh4
-rwxr-xr-xtiff/test/tiff2ps-PS1.sh4
-rwxr-xr-xtiff/test/tiff2ps-PS2.sh4
-rwxr-xr-xtiff/test/tiff2ps-PS3.sh4
-rwxr-xr-xtiff/test/tiffcp-lzw-scanline-decode.sh6
-rw-r--r--tiff/test/tifftest.h2
-rw-r--r--tiff/tools/CMakeLists.txt2
-rw-r--r--tiff/tools/Makefile.in125
-rw-r--r--tiff/tools/Makefile.vc1
-rw-r--r--tiff/tools/fax2ps.c2
-rw-r--r--tiff/tools/fax2tiff.c20
-rw-r--r--tiff/tools/pal2rgb.c44
-rw-r--r--tiff/tools/ppm2tiff.c19
-rw-r--r--tiff/tools/raw2tiff.c5
-rw-r--r--tiff/tools/rgb2ycbcr.c2
-rw-r--r--tiff/tools/thumbnail.c22
-rw-r--r--tiff/tools/tiff2bw.c50
-rw-r--r--tiff/tools/tiff2pdf.c166
-rw-r--r--tiff/tools/tiff2ps.c42
-rw-r--r--tiff/tools/tiff2rgba.c2
-rw-r--r--tiff/tools/tiffcmp.c7
-rw-r--r--tiff/tools/tiffcp.c38
-rw-r--r--tiff/tools/tiffcrop.c117
-rw-r--r--tiff/tools/tiffdither.c2
-rw-r--r--tiff/tools/tiffdump.c4
-rw-r--r--tiff/tools/tiffgt.c9
-rw-r--r--tiff/tools/tiffinfo.c4
-rw-r--r--tiff/tools/tiffmedian.c2
-rw-r--r--tiff/tools/tiffset.c23
-rw-r--r--tiff/tools/tiffsplit.c4
-rw-r--r--toolbin/genfontmap.ps16
-rw-r--r--toolbin/halftone/thresh_remap/thresh_remap.c2
-rwxr-xr-x[-rw-r--r--]toolbin/headercompile.pl0
-rwxr-xr-xtoolbin/localcluster/clusterpush.pl3
-rwxr-xr-xtoolbin/squeeze2text.py85
-rw-r--r--toolbin/vdb.pl280
-rw-r--r--windows/All.vcxproj425
-rw-r--r--windows/GhostPDL.sln103
-rw-r--r--windows/ghostpcl.vcxproj616
-rw-r--r--windows/ghostpcl.vcxproj.filters594
-rw-r--r--windows/ghostpdl.vcproj28
-rw-r--r--windows/ghostpdl.vcxproj432
-rw-r--r--windows/ghostpdl.vcxproj.filters31
-rw-r--r--windows/ghostscript.vcproj28
-rw-r--r--windows/ghostscript.vcxproj2779
-rw-r--r--windows/ghostscript.vcxproj.filters6988
-rw-r--r--windows/ghostscript_rt.vcxproj1
-rw-r--r--windows/ghostxps.vcxproj457
-rw-r--r--windows/ghostxps.vcxproj.filters105
1885 files changed, 195689 insertions, 175903 deletions
diff --git a/Makefile.in b/Makefile.in
index 8e36018b..0e5bd094 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
@@ -59,6 +59,10 @@ GPDLSRCDIR=@srcdir@/gpdl
GPDLGENDIR=./$(BUILDDIRPREFIX)@OBJDIR_BSDMAKE_WORKAROUND@
GPDLOBJDIR=./$(BUILDDIRPREFIX)@OBJDIR_BSDMAKE_WORKAROUND@
+URFSRCDIR=@srcdir@/urf
+URFGENDIR=./$(BUILDDIRPREFIX)@OBJDIR_BSDMAKE_WORKAROUND@
+URFOBJDIR=./$(BUILDDIRPREFIX)@OBJDIR_BSDMAKE_WORKAROUND@
+
CONTRIBDIR=@srcdir@/contrib
# Do not edit the next group of lines.
@@ -172,24 +176,36 @@ CAPOPT= @HAVE_MKSTEMP@ @HAVE_FILE64@ @HAVE_FSEEKO@ @HAVE_MKSTEMP64@ @HAVE_FONTCO
GS=@GS@
GS_SO_BASE=@GS@
+GS_SONAME=@GS_SONAME@
+GS_SONAME_MAJOR=@GS_SONAME_MAJOR@
+GS_SONAME_MAJOR_MINOR=@GS_SONAME_MAJOR_MINOR@
PCL=@PCL@
PCL_SO_BASE=@PCL@
+PCL_SONAME=@PCL_SONAME@
+PCL_SONAME_MAJOR=@PCL_SONAME_MAJOR@
+PCL_SONAME_MAJOR_MINOR=@PCL_SONAME_MAJOR_MINOR@
XPS=@XPS@
XPS_SO_BASE=@XPS@
+XPS_SONAME=@XPS_SONAME@
+XPS_SONAME_MAJOR=@XPS_SONAME_MAJOR@
+XPS_SONAME_MAJOR_MINOR=@XPS_SONAME_MAJOR_MINOR@
GPDL=@GPDL@
GPDL_SO_BASE=@GPDL@
+GPDL_SONAME=@GPDL_SONAME@
+GPDL_SONAME_MAJOR=@GPDL_SONAME_MAJOR@
+GPDL_SONAME_MAJOR_MINOR=@GPDL_SONAME_MAJOR_MINOR@
XE=@EXEEXT@
-XEAUX=@EXEEXT@
+XEAUX=@AUXEXEEXT@
PCL_TARGET=@PCL_TARGET@
XPS_TARGET=@XPS_TARGET@
GPDL_TARGET=@GPDL_TARGET@
-PCL_XPS_TARGETS=$(PCL_TARGET) $(XPS_TARGET) @GPDL_TARGET_VAR@
+PCL_XPS_PDL_TARGETS=$(PCL_TARGET) $(XPS_TARGET) $(GPDL_TARGET)
# Define the directories for debugging and profiling binaries, relative to
# the standard binaries.
@@ -270,6 +286,7 @@ TIFFPLATFORM=unix
TIFFCONFIG_SUFFIX=
LIBTIFF_NAME=tiff
TIFF_CFLAGS=@TIFFCFLAGS@
+ENABLE_TIFF=@ENABLETIFF@
# Define the directory where the zlib sources are stored.
# See zlib.mak for more information.
@@ -328,6 +345,12 @@ LCMS2_CFLAGS=-DSHARE_LCMS=$(SHARE_LCMS) @LCMS2_ENDIAN@ @SQRTF_SUBST@ @LCMS2_PTR
# Options are currently lcms or lcms2
WHICH_CMS=@WHICHLCMS@
+# Do we have URF support?
+ENABLE_URF=@ENABLEURF@
+GPDL_URF_TOP_OBJ=@GPDL_URF_TOP_OBJ@
+URF_INCLUDE=@URF_INCLUDE@
+URF_DEV=@URF_DEV@
+SURFX_H=@SURFX_H@
EXPATSRCDIR=@EXPATDIR@
EXPAT_CFLAGS=@EXPAT_CFLAGS@
@@ -538,6 +561,9 @@ SO_LIB_VERSION_SEPARATOR=@SO_LIB_VERSION_SEPARATOR@
#CAIRO_CFLAGS = @CAIRO_CFLAGS@
#CAIRO_LIBS = @CAIRO_LIBS@
+# AUX Tools flags
+MKROMFS_FLAGS=@MKROMFS_FLAGS@
+
# ------ Devices and features ------ #
# Choose the language feature(s) to include. See gs.mak for details.
@@ -558,7 +584,7 @@ FEATURE_DEVS=$(GLD)pipe.dev $(GLD)gsnogc.dev $(GLD)htxlib.dev $(GLD)psl3lib.dev
$(GLD)seprlib.dev $(GLD)translib.dev $(GLD)cidlib.dev $(GLD)psf0lib.dev $(GLD)psf1lib.dev\
$(GLD)psf2lib.dev $(GLD)lzwd.dev $(GLD)sicclib.dev \
$(GLD)sjbig2.dev $(GLD)sjpx.dev $(GLD)ramfs.dev \
- $(GLD)pwgd.dev $(GLD)siscale.dev
+ $(GLD)pwgd.dev $(GLD)siscale.dev $(URF_DEV)
#FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev
#FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)ttfont.dev $(GLD)pipe.dev
@@ -748,7 +774,7 @@ include $(GLSRCDIR)/unixinst.mak
distclean : clean config-clean soclean pgclean debugclean mementoclean
-$(RM_) -r $(BINDIR) $(GLOBJDIR) $(PSOBJDIR) $(AUXDIR)
-$(RM_) -r autom4te.cache
- -$(RM_) config.log config.status
+ -$(RM_) config.log config.status configaux.log @ARCH_AUTOCONF_HEADER@
-$(RM_) -r $(TIFFCONFDIR)
-$(RM_) Makefile
diff --git a/Resource/Init/gs_cidfm.ps b/Resource/Init/gs_cidfm.ps
index 5eb25f00..e123bfc1 100644
--- a/Resource/Init/gs_cidfm.ps
+++ b/Resource/Init/gs_cidfm.ps
@@ -120,7 +120,12 @@ currentdict end def
(DroidSansFallback.ttf)
} if
} if
- concatstrings
+ % If CIDFSubstFont looks like a path/file (rather than just file)
+ % use it without the CIDFSubstPath string
+ dup .file_name_directory_separator rsearch
+ {pop pop pop exch pop}
+ {pop concatstrings}
+ ifelse
% The CSI data just has to be valid, the substition machinery will
% generally overwrite it with appropriate values for the missing font.
/CSI [(Identity) 0]
@@ -136,7 +141,7 @@ currentdict end def
% <dir.../base.extn> .basename <dir>
/.splitdirname {
(/) rsearch { //true } { (\\) rsearch } ifelse
- {3 -2 roll pop pop //true}{//false} ifelse
+ {exch concatstrings exch pop //true}{//false} ifelse
} bind def
% <file> .addcidfmappath -
@@ -209,7 +214,7 @@ currentdict end def
} loop
} forall
currentdict end
- {exch pop (/) concatstrings /PermitFileReading exch .addcontrolpath} forall
+ {exch pop /PermitFileReading exch .addcontrolpath} forall
% Checks for vicious substitution cycles.
dup length dict copy % <<map>>
diff --git a/Resource/Init/gs_fonts.ps b/Resource/Init/gs_fonts.ps
index 8e361552..204e2832 100644
--- a/Resource/Init/gs_fonts.ps
+++ b/Resource/Init/gs_fonts.ps
@@ -69,7 +69,7 @@ end def
% <dir.../base.extn> .basename <dir>
/.splitdirname {
(/) rsearch { //true } { (\\) rsearch } ifelse
- {3 -2 roll pop pop //true}{//false} ifelse
+ {exch concatstrings exch pop //true}{//false} ifelse
} bind def
% <dict> .addfontmappermitpaths
@@ -1056,6 +1056,25 @@ $error /SubstituteFont { } put
//false
}ifelse
+ % If just opening the file didn't work, try opening the file name
+ % in the font resource directory
+ {
+ dup
+ //.fonttempstring /FontResourceDir getsystemparam .genericrfn
+ (r) { file } stopped {
+ pop pop //true
+ } {
+ dup .filename
+ { 3 -1 roll pop exch }
+ { pop }
+ ifelse
+ //false
+ } ifelse
+ }
+ {
+ //false
+ }ifelse
+
{
QUIET not
{ (Can't find \(or can't open\) font file ) print dup print
diff --git a/Resource/Init/gs_init.ps b/Resource/Init/gs_init.ps
index 722b57c1..05d01c21 100644
--- a/Resource/Init/gs_init.ps
+++ b/Resource/Init/gs_init.ps
@@ -34,7 +34,7 @@
% Interpreter library version number
% NOTE: the interpreter code requires that the first non-comment token
% in this file be an integer, and that it match the compiled-in version!
-950
+952
% Check the interpreter revision.
dup revision ne
@@ -197,6 +197,11 @@ currentdict /NOSAFERERRORS known
currentdict /SAFERERRORS known
} ifelse def
+currentdict /ALLOWPSTRANSPARENCY known not
+{
+ /ALLOWPSTRANSPARENCY //false def
+} if
+
currentdict /SHORTERRORS known /SHORTERRORS exch def
currentdict /TTYPAUSE known /TTYPAUSE exch def
currentdict /WRITESYSTEMDICT known /WRITESYSTEMDICT exch def
@@ -315,7 +320,7 @@ DELAYBIND
( have selected DELAYBIND. Unless you use this option with\n) print
( care \(and specifically, remember to call .bindnow\) it is\n) print
( possible that malicious code may be able to evade the\n) print
- ( limited security offered by the SAFER option.\n) print
+ ( limited security offered by the SAFER option.\n) print flush
} if
.currentglobal //false .setglobal
systemdict /.delaybind 2000 array .forceput
@@ -331,7 +336,7 @@ DELAYBIND
{ pop /.bind cvx exec
}
ifelse
- } .bind def
+ } .bind odef
} executeonly if
.currentglobal //true .setglobal
@@ -2201,6 +2206,18 @@ systemdict /EPSBoundingBoxInit .forceundef
readonly def
.setglobal
+/SAFERUndefinePostScriptOperators {
+ [
+ % Used by our own test suite files
+ /.setdotlength % Bug687720.ps
+ /.sort /.setdebug /.mementolistnewblocks /getenv
+ /unread
+ ]
+ {systemdict exch .forceundef} forall
+
+ //systemdict /SAFERUndefinePostScriptOperators .forceundef
+} .bind executeonly def % must be bound and hidden for .forceundef
+
/tempfilepaths
[
(TMPDIR) getenv not
@@ -2381,25 +2398,6 @@ currentdict /.locksafe_userparams .undef
currentdict /.setsafeglobal .undef
currentdict /.locksafeglobal .undef
-SAFER {
-/SAFERUndefinePostScriptOperators {
- [
- % Used by our own test suite files
- /.pushpdf14devicefilter % transparency-example.ps
- /.poppdf14devicefilter % transparency-example.ps
- /.setopacityalpha % transparency-example.ps
- /.setshapealpha % transparency-example.ps
- /.endtransparencygroup % transparency-example.ps
- /.setdotlength % Bug687720.ps
- /.sort /.setdebug /.mementolistnewblocks /getenv
- /unread
- ]
- {systemdict exch .forceundef} forall
-
- //systemdict /SAFERUndefinePostScriptOperators .forceundef
-} .bind executeonly def % must be bound and hidden for .forceundef
-} if
-
%% ---------------- SAFER stuff END -------------------%%
/UndefinePostScriptOperators {
@@ -2648,9 +2646,6 @@ FontDirectory readonly pop
% If we are using DELAYBIND we have to defer the undefinition
% until .bindnow.
DELAYBIND not {
- SAFER {
- //systemdict /SAFERUndefinePostScriptOperators get exec
- } if
//systemdict /UndefinePostScriptOperators get exec
} if
end
@@ -2694,7 +2689,7 @@ WRITESYSTEMDICT {
( care and specifically, remember to execute code like:\n) print
( "systemdict readonly pop"\n) print
( it is possible that malicious code may be able to evade the\n) print
- ( limited security offered by the SAFER option.\n) print
+ ( limited security offered by the SAFER option.\n) print flush
}if
}
{
diff --git a/Resource/Init/gs_lev2.ps b/Resource/Init/gs_lev2.ps
index 0fd41646..8c41aba0 100644
--- a/Resource/Init/gs_lev2.ps
+++ b/Resource/Init/gs_lev2.ps
@@ -660,7 +660,7 @@ currentuserparams /WaitTimeout known
% Search for valid (iccprofiles) directory as a sibling to (Resource)
% and set it as a default if found.
LIBPATH {
- (Resource) search {
+ (Resource) rsearch {
exch pop exch pop (iccprofiles) concatstrings
.file_name_separator concatstrings
dup (default_gray.icc) concatstrings status {
diff --git a/Resource/Init/gs_pdfwr.ps b/Resource/Init/gs_pdfwr.ps
index 422e66e1..ed691b9d 100644
--- a/Resource/Init/gs_pdfwr.ps
+++ b/Resource/Init/gs_pdfwr.ps
@@ -86,7 +86,7 @@ languagelevel 2 .setlanguagelevel
/MonoImageDownsampleThreshold 1.5
/MonoImageFilter /CCITTFaxEncode
/OffOptimizations 0
- /OPM 1
+ /OPM 0
/Optimize //true
/ParseDSCComments //true
/ParseDSCCommentsForDocInfo //true
diff --git a/Resource/Init/gs_res.ps b/Resource/Init/gs_res.ps
index 068514bf..5559e6a9 100644
--- a/Resource/Init/gs_res.ps
+++ b/Resource/Init/gs_res.ps
@@ -284,7 +284,7 @@ systemdict begin
dup .file_name_current eq {
pop
} {
- (Resource) search {
+ (Resource) rsearch {
exch concatstrings
exch pop
.file_name_separator concatstrings exit
diff --git a/Resource/Init/gs_ttf.ps b/Resource/Init/gs_ttf.ps
index 74043d16..6be8fe99 100644
--- a/Resource/Init/gs_ttf.ps
+++ b/Resource/Init/gs_ttf.ps
@@ -1304,7 +1304,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
TTFDEBUG { (\n1 setting alias: ) print dup ==only
( to be the same as ) print 2 index //== exec } if
- 7 index 2 index 3 -1 roll exch .forceput
+ 7 index 2 index 3 -1 roll exch put
} forall
pop pop pop
}
@@ -1322,7 +1322,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
exch pop
TTFDEBUG { (\n2 setting alias: ) print 1 index ==only
( to use glyph index: ) print dup //== exec } if
- 5 index 3 1 roll .forceput
+ 5 index 3 1 roll put
//false
}
{
@@ -1339,7 +1339,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
{ % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) gindex(integer)
TTFDEBUG { (\3 nsetting alias: ) print 1 index ==only
( to be index: ) print dup //== exec } if
- exch pop 5 index 3 1 roll .forceput
+ exch pop 5 index 3 1 roll put
}
{
pop pop
@@ -1369,7 +1369,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
} ifelse
]
TTFDEBUG { (Encoding: ) print dup === flush } if
-} .bind executeonly odef % hides .forceput
+} .bind odef
% ---------------- CIDFontType 2 font loading ---------------- %
diff --git a/Resource/Init/pdf_base.ps b/Resource/Init/pdf_base.ps
index 02503eef..618e5e51 100644
--- a/Resource/Init/pdf_base.ps
+++ b/Resource/Init/pdf_base.ps
@@ -776,11 +776,123 @@ currentdict /token_nofail_dict .undef
count 4 index add % Determine stack depth with objects
3 1 roll
resolveobjstreamopdict .pdfrun % Get PDF objects
- count counttomark 1 add index ne { % Check stack depth
- ( **** Error: Incorrect object count in object stream.\n) pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- /resolveobjectstream cvx /rangecheck signalerror
+ count counttomark 1 add index ne
+ {
+ count counttomark 1 add index gt {
+ ( **** Error: Incorrect object count in object stream (too many objects).\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ } if
+
+ % Its possible for us to end up here with a valid file. The way we work is to read the
+ % stream and tokenise all the objects, but that assumes there will be delimiters or
+ % whitespace between each object in the stream. We can easily think of cases where
+ % that is not true; eg two consecutive numbers 123 456 would be tokenised as a
+ % single number with the value 123456.
+ % In this case we can use the approach below to read each object individually and
+ % that will define the correct number of objects. After we've collected all the
+ % objects we'll check the number of objects recovered again, and see if there
+ % are still too few. We should probably raise an error in that case, but lets wait
+ % until we see a case.
+
+ % Having too many objects in an ObjStm is not illegal, dumb but not illegal. We can
+ % recover from this, but its complicated. The extra object could be any of the ones
+ % from the stream, the only way to find out is to process each object individually.
+ % Unfortunately, my attempts to come up with a version of .pdfrun which only tokenised
+ % one object got rapidly bogged down. So a new approach was needed.
+ %
+ % The idea is simple; turn the underlying file into a ReusableStream, then we can
+ % reposition it. Build an array of the object offsets, reposition the file to the
+ % start of each object in turn. For all except the last object, create a sub file
+ % using SubFileDeocde with an empty string, and an EODCount which is the difference
+ % between the offset of this object and the offset of the next.
+ % For the last object we just read from the offset to the end of the stream.
+ %
+ % Then call .pdfrun on that sub file, or the main stream, which will tokenise all the
+ % objects from that point onwards. Then discard all but the first object read.
+ %
+ % The complications arise from the fact that we need to end up with the objects on
+ % the stack, in the right order, preceded by a mark, a count, and an array containing
+ % all the object numbers.
+
+ % First, discard everything we read up to now; we can reuse the mark which was placed
+ % by the preceding code to do this, as long as we remember to replace that mark.
+ % Handily this will leave the count and the array which contains the object numbers in place.
+ cleartomark
+
+ % Replace the mark consumed by conttomark above, so that we match what the code following this error handling expects.
+ mark
+
+ % copy the ObjStm dictionary and then copy the count of objects expected
+ 4 index 4 index
+
+ % Copy the ObjStm dictionary, and create a file from it
+ 1 index //false resolvestream % Convert stream dict into a stream
+
+ /ReusableStreamDecode filter % We need to be able to re-position the stream
+
+ 1 index array % Create array for holding offsets
+
+ % Get the object offsets, these are stored at teh start of the stream, interleaved
+ % between the object numbers. We know reading these can't fail, because we've already
+ % done this to create the array of object numbers, above.
+ 0 1 % starting index (0), increment (1) for loop
+ 4 index 1 sub % limit of loop is object count-1 (because we start at 0)
+ {
+ 1 index 1 index % copy array and index
+ 4 index % copy the file object
+ token pop pop % read a token (object number) and discard it
+ 4 index token % read another token (offset)
+ pop put pop % put the offset into the array at the new index
+ } for
+
+ % We now have an array with all the object offsets in it
+ % So we need to reposition the file to the start of each object and read
+ % from that point. We use the difference between two offsets to setup
+ % a SubFileDecode filter to only read as many bytes as there are
+ % between the objects. Normally this should result in us reading one object,
+ % if there are extra objects then we'll discard the extras. By doing this
+ % we avoid tokenising the same data multiple times.
+
+ % Set the loop to be from 0 to the number of objects minus 1 (starts from 0), step 1.
+ 2 index 1 sub 0 1 3 -1 roll
+ {
+ dup % copy the loop index
+ 2 index length 2 sub lt % Check if index + 1 exceeds array size (it will on last iteration)
+
+ { % Not the last iteration
+ dup % copy the loop index
+ 2 index exch get 5 index /First get add % get the object offset, and add the value of First from the dictionary.
+ exch 1 add % add one to the loop index
+ 2 index exch get 5 index /First get add % and get the offset to the start of the next object
+
+ 1 index sub % copy the first offset and subtract from the second to get the length
+ exch
+ 3 index dup 3 -1 roll setfileposition % copy the file and position it to the offset of the object
+ exch
+ << /EODCount 3 -1 roll /EODString () >> % Set up a dictionary for the filter
+ /SubFileDecode filter % and apply it to limit the number of bytes read.
+ }
+ { % On the last iteration, simly read from the file, we don't need another SubFileDecode.
+ 1 index exch get 4 index /First get add % get the offset, and add the value of First from the dictionary.
+ 2 index dup 3 -1 roll setfileposition % copy the stream, and position it at that point
+ }ifelse
+
+ mark exch resolveobjstreamopdict .pdfrun % make a mark and then tokenise all the objects from there to the end of stream (or sub file)
+ counttomark 2 sub % Find out how many objects we created (less two, one for the count and one for the first object)
+ 0 1 3 -1 roll {pop pop} for % pop that many objects off the stack
+ 6 1 roll pop % roll the new object to be behind our working objects on the stack and pop the mark
+ } for
+
+ % pop most of the working objects (array, file, and ObjStrm dictionary)
+ % but leave count of objects. Check that aginst the number of objects
+ % retrieved. If we got too few then issue a warning.
+
+ pop pop exch pop counttomark 1 sub lt {
+ ( **** Error: Incorrect object count in object stream (too few objects).\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ } if
} if
+
% We have the object data
counttomark array astore % Put objects into an array
exch pop exch pop % Remove mark and count
@@ -1139,16 +1251,26 @@ currentdict /pdf_rules_dict undef
dup /JBIG2Globals knownoget {
% make global ctx
PDFfile fileposition exch % resolvestream is not reentrant
+ mark exch
//true resolvestream % stack after: PDFfileposition -file-
% Read the data in a loop until EOF to so we can move the strings into a bytestring
[ { counttomark 1 add index 60000 string readstring not { exit } if } loop ]
exch pop 0 1 index { length add } forall % compute the total length
% now copy the data from the array of strings into a bytestring
.bytestring exch 0 exch { 3 copy putinterval length add } forall pop
- .jbig2makeglobalctx
- PDFfile 3 -1 roll setfileposition
- 1 index exch
- /.jbig2globalctx exch put
+ % If this fails we don't want to abort totally, there may be more content
+ % in the PDF file that we can render. So just run in a stopped context.
+ {.jbig2makeglobalctx} stopped
+ {
+ cleartomark
+ PDFfile exch setfileposition
+ }
+ {
+ exch pop
+ PDFfile 3 -1 roll setfileposition
+ 1 index exch
+ /.jbig2globalctx exch put
+ } ifelse
} if
} bind executeonly def
diff --git a/Resource/Init/pdf_draw.ps b/Resource/Init/pdf_draw.ps
index a359a9c1..1deb0526 100644
--- a/Resource/Init/pdf_draw.ps
+++ b/Resource/Init/pdf_draw.ps
@@ -419,14 +419,43 @@ end
% Some functions used to implement phases of HT and HTP
/sethalftones {
+ % As is so often the case, if we get an error we need to clean up the stack, but we can't
+ % use mark/cleartomark, because the action which caused the error may have left a mark
+ % on the stack. So we need to define our own mark. On an error we'll clean up the stack
+ % until we reach this unique key on the stack
+ /SethalftonesMark exch
+
dup /Default eq {
- pop .setdefaulthalftone
- } {
- resolvehalftone sethalftone
+ pop .setdefaulthalftone pop
+ }
+ {
+ {resolvehalftone} stopped
+ {
+ (\n **** Error resolving halftone. Ignoring the halftone, output may be incorrect.\n)
+ pdfformaterror
+ % Clean up the stack by checking every entry until we find our unique key
+ {/SethalftonesMark eq {exit} if} loop
+ }
+ {
+ {sethalftone} stopped
+ {
+ (\n **** Error setting halftone. Ignoring the halftone, output may be incorrect.\n)
+ pdfformaterror
+ % Clean up the stack by checking every entry until we find our unique key
+ {/SethalftonesMark eq {exit} if} loop
+ }
+ {
+ pop
+ }ifelse
+ }ifelse
} ifelse
} bind executeonly def
/sethalftonephases {
- aload pop -1 2 index 2 index .setscreenphase pop pop
+ {aload pop -1 2 index 2 index .setscreenphase pop pop} stopped
+ {
+ (\n **** Error setting halftone phase. Ignoring the phase, output may be incorrect.\n)
+ pdfformaterror
+ } if
} bind executeonly def
/HT {
@@ -549,9 +578,25 @@ end
cleartomark //null exit
} if
gsave //nodict begin
- /CS knownoget {
+ dup /CS knownoget {
+ exch pop
resolvecolorspace dup setgcolorspace csput
- } if
+ }
+ {
+ % Group attributes dictionaries are supposed to contain a /CS
+ % entry, but Acrobat apparently also handles a /ColorSpace....
+ /ColorSpace knownoget {
+ ( **** Error: A transparency group XObject has a /ColorSpace instead of /CS attribute.\n)
+ pdfformaterror
+ resolvecolorspace dup setgcolorspace csput
+ }
+ {
+ ( **** Error: Ignoring a transparency group XObject without /CS attribute.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ cleartomark //null exit
+ }ifelse
+ } ifelse
aload pop setcolor [ currentgray ]
end grestore
/GrayBackground exch 3 2 roll
@@ -643,9 +688,19 @@ def
resolvecolorspace dup setgcolorspace csput
//true % use currentcolorspace
} {
- % inheriting the colorspace -- make sure Device* spaces are not CIEBased
- forceDefaultCS currentcolorspace 0 get .knownget { exec } if
- //false % no defined colorspace
+ % Group attributes dictionaries are supposed to contain a /CS
+ % entry, but Acrobat apparently also handles a /ColorSpace....
+ dup /Group oget /ColorSpace knownoget {
+ ( **** Error: A transparency group attribute dictionary has a /ColorSpace instead of /CS attribute.\n)
+ pdfformaterror
+ resolvecolorspace dup setgcolorspace csput
+ //true % use currentcolorspace
+ }
+ {
+ % inheriting the colorspace -- make sure Device* spaces are not CIEBased
+ forceDefaultCS currentcolorspace 0 get .knownget { exec } if
+ //false % no defined colorspace
+ } ifelse
} ifelse
3 -1 roll dup
dup 4 1 roll /BBox get aload pop .begintransparencymaskgroup
@@ -1066,6 +1121,8 @@ currentdict end readonly def
//true
} ifelse {
dup dup type /arraytype eq { 0 get } if
+ dup type /packedarraytype eq {exch pop exec dup} if
+
//csrdict exch .knownget {
exec dup type /nametype ne { dup length 1 eq { 0 get } if } if
} {
@@ -1423,8 +1480,12 @@ drawopdict begin
} {
clippath
} ifelse
- //null setup_trans
+ % If we get an error, just emit an empty box
+ { pathbbox } stopped { 0 0 0 0 } if
+ 4 array astore
grestore
+ //null
+ setup_trans
//do_shade exec
teardown_trans
} {
@@ -2210,21 +2271,15 @@ currentdict /last-ditch-bpc-csp undef
} bind executeonly def
/doimagesmask { % <imagemask> doimagesmask -
- PDFusingtransparency {
- currentdict /SMask knownoget
+ PDFusingtransparency not
+ /PreserveSMask /GetDeviceParam .special_op { exch pop } { //false } ifelse
+ or {
+ % not using transparency OR the device supports SMask (e.g. pdfwrite)
+ doimage
} {
- //false
- } ifelse
- { % We are doing transparency and SMask is present in the image
- % stack: <imagemask> <SMask>
- /PreserveSMask /GetDeviceParam .special_op {
- exch pop
- }{
- //false
- }ifelse
- {
- pop % pdfwrite will process SMask directly during 'doimage'
- } {
+ currentdict /SMask knownoget {
+ % We are doing transparency and SMask is present in the image
+ % stack: <imagemask> <SMask>
.begintransparencymaskimage
PDFfile fileposition exch
gsave //nodict begin
@@ -2236,34 +2291,44 @@ currentdict /last-ditch-bpc-csp undef
end grestore
PDFfile exch setfileposition
0 .endtransparencymask
- } ifelse
- << /Subtype /Group /Isolated //true
- /.image_with_SMask //true
- % pdfwrite needs : see gs/src/ztrans.c, gs/src/gdevpdft.c
- % Code to deal with a Matte in the SMask. We know the image dictionary must have an SMask
- % entry if we get here, so we don't need to check its existence. Just pull it out and see if
- % the SMask has a Matte entry. If it does, get the ColorSpace from the parent image and
- % put a /CS key with that colour space in the Group that we manufacture. Bug #700686
- % We also need to actually set the current colour space to be the same as the group
- % code only picks up the current colour space, not the space from the dictionary.
- currentdict /SMask get /Matte known {/CS currentdict /ColorSpace get dup pdfopdict /cs get exec } if
- >> 0 0 1 1 .begintransparencygroup
- doimage
- .endtransparencygroup
- % tell the compositor we're done with the SMask.
- % Note that any SMask in the ExtGState should be reapplied
- % by the next call to setfill(stroke)state AND this relies
- % on our lazy evaulation of SMask groups
- //false << /Subtype /None >> 0 0 0 0 .begintransparencymaskgroup
- } {
- .currentSMask //null ne {
- % the image doesn't have an SMask, but the ExtGState does, force a group.
- << /Subtype /Group /Isolated //true >> 0 0 1 1 .begintransparencygroup
+ << /Subtype /Group /Isolated //true
+ /.image_with_SMask //true
+ % pdfwrite needs : see gs/src/ztrans.c, gs/src/gdevpdft.c
+ % Code to deal with a Matte in the SMask. We know the image dictionary must have an SMask
+ % entry if we get here, so we don't need to check its existence. Just pull it out and see if
+ % the SMask has a Matte entry. If it does, get the ColorSpace from the parent image and
+ % put a /CS key with that colour space in the Group that we manufacture. Bug #700686
+ % We also need to actually set the current colour space to be the same as the group
+ % code only picks up the current colour space, not the space from the dictionary.
+ currentdict /SMask get /Matte known {/CS currentdict /ColorSpace get dup pdfopdict /cs get exec } if
+ >> 0 0 1 1
+ .begintransparencygroup
+ .currentstrokeconstantalpha .currentfillconstantalpha .currentshapealpha .currentopacityalpha 5 -1 roll
+ 1 .setfillconstantalpha 1 .setstrokeconstantalpha
+ 1 .setopacityalpha 1 .setshapealpha
doimage
+ .setopacityalpha .setshapealpha .setfillconstantalpha .setstrokeconstantalpha
.endtransparencygroup
- }
- { doimage }
- ifelse
+ % tell the compositor we're done with the SMask.
+ % Note that any SMask in the ExtGState should be reapplied
+ % by the next call to setfill(stroke)state AND this relies
+ % on our lazy evaulation of SMask groups
+ //false << /Subtype /None >> 0 0 0 0 .begintransparencymaskgroup
+ } {
+ % We don't have an SMask in the image but there might be an SMask in the ExtGState
+ .currentSMask //null ne {
+ % the image doesn't have an SMask, but the ExtGState does, force a group.
+ << /Subtype /Group /Isolated //true >> 0 0 1 1
+ .begintransparencygroup
+ .currentstrokeconstantalpha .currentfillconstantalpha .currentshapealpha .currentopacityalpha 5 -1 roll
+ 1 .setopacityalpha 1 .setshapealpha
+ doimage
+ .setopacityalpha .setshapealpha .setfillconstantalpha .setstrokeconstantalpha
+ .endtransparencygroup
+ } {
+ doimage
+ } ifelse
+ } ifelse
} ifelse
} bind executeonly def
@@ -2315,6 +2380,9 @@ currentdict /last-ditch-bpc-csp undef
/doimage { % <imagemask> doimage -
% imagedict is currentdict, gets popped from dstack
+ %% We must save the colour space, in case it gets changed. I did try doing this
+ %% at a higher level (/Do) but that caused numerous problems with pdfwrite.
+ currentcolorspace exch
%% save the current rendering intent
.currentrenderintent exch
@@ -2336,7 +2404,12 @@ currentdict /last-ditch-bpc-csp undef
makemaskimage
} if
% Stack: datasource imagemask
- gsave 1 1 moveto 0 0 lineto /image setup_trans grestore
+ gsave 1 1 moveto 0 0 lineto
+ % If we get an error, just emit an empty box
+ { pathbbox } stopped { 0 0 0 0 } if
+ 4 array astore grestore
+ /image
+ setup_trans
{ currentdict end setfillstate //true ValidateDecode { imagemask } }
{ ColorSpace setgcolorspace currentdict end setfillblend //false ValidateDecode { image } }
ifelse
@@ -2361,6 +2434,13 @@ currentdict /last-ditch-bpc-csp undef
%% restore the rendering intent
.setrenderingintent
+ %% and restore the colour space. We need to do this in a stopped context because
+ %% if we are rendering a glyph, the cache device will throw an error if we try
+ %% to change colour space (even when the new space is the same as the old space)
+ %% We can't tell if we are rendering a bitmap for a glyph, and its hard to compare
+ %% colour spaces, so just ignore errors for now.
+ {setcolorspace} stopped {pop} if
+
teardown_trans
} bind executeonly def
@@ -3043,7 +3123,7 @@ end
} ifelse
} ifelse
}
- { 0 setgray //true} ifelse
+ { //false } ifelse
} bind executeonly def
% Draw the border. Currently, we ignore requests for beveling, and we
@@ -3051,17 +3131,20 @@ end
/strokeborder { % <annot> <width> <dash> strokeborder -
1 index 0 ne { % do not draw if border width is 0
gsave
- 2 index annotsetcolor
- {
+% 2 index annotsetcolor
+% {
0 setdash dup setlinewidth
- exch annotrect
+ exch dup annotrect
+ 5 -1 roll /RD knownoget {
+ applyRD
+ } if
2 { 4 index sub 4 1 roll } repeat
2 { 4 index 0.5 mul add 4 1 roll } repeat
rectstroke pop
grestore
- } {
- pop pop pop
- } ifelse
+% } {
+% pop pop pop
+% } ifelse
} {
pop pop pop
}ifelse
@@ -3094,12 +3177,16 @@ end
% Scaling due to -dPDFFitPage is not undone, to keep the correct border width
% compared to the size of the surrounding marks.
//systemdict /NoUserUnit .knownget not { //false } if not
- //systemdict /PDFFitPage known not and { % UserUnit is ignored if -dPDFFitPage
+ //systemdict /PDFFitPage known not and
+ % Don't apply USerUnit if we are passing it to the device
+ /PassUserUnit /GetDeviceParam .special_op {exch pop} {//false} ifelse not and
+ { % UserUnit is ignored if -dPDFFitPage
Page /UserUnit knownoget { div } if
} if
{} 2 index /S knownoget {
/D eq { 2 index /D knownoget not { {3} } if exch pop } if
- } if 3 -1 roll pop strokeborder
+ } if
+ 3 -1 roll pop strokeborder
} {
dup 2 get
exch dup length 3 gt { 3 get } { pop {} } ifelse
@@ -3138,23 +3225,39 @@ end
% Scaling due to -dPDFFitPage is not undone, to keep the correct border width
% compared to the size of the surrounding marks.
//systemdict /NoUserUnit .knownget not { //false } if not
- //systemdict /PDFFitPage known not and { % UserUnit is ignored if -dPDFFitPage
+ //systemdict /PDFFitPage known not and
+ % Don't apply USerUnit if we are passing it to the device
+ /PassUserUnit /GetDeviceParam .special_op {exch pop} {//false} ifelse not and
+ { % UserUnit is ignored if -dPDFFitPage
Page /UserUnit knownoget { div } if
} if
{} 2 index /S knownoget {
/D eq { 2 index /D knownoget not { {3} } if exch pop } if
} if
3 index /CA knownoget {.setopacityalpha} if
- 3 -1 roll pop 2 index annotsetcolor {0 setdash setlinewidth stroke} if
+ 3 -1 roll pop
+% 2 index annotsetcolor {
+ 0 setdash setlinewidth stroke
+% } if
} {
dup 2 get
- exch dup length 3 gt { 3 get } { pop {} } ifelse
- 3 index /CA knownoget {.setopacityalpha} if
- 2 index annotsetcolor {0 setdash setlinewidth stroke} if
+ % If element 3 of the /Border array is 0, then don't draw the border
+ dup 0 ne {
+ exch dup length 3 gt { 3 get } { pop {} } ifelse
+ 3 index /CA knownoget {.setopacityalpha} if
+% 2 index annotsetcolor {
+ 0 setdash setlinewidth stroke
+% } if
+ }{
+ pop pop
+ } ifelse
} ifelse
} {
3 index /CA knownoget {.setopacityalpha} if
- 1 {} 2 index annotsetcolor {0 setdash setlinewidth stroke} if
+ 1 {}
+% 2 index annotsetcolor {
+ 0 setdash setlinewidth stroke
+% } if
} ifelse
pop
grestore
@@ -3241,12 +3344,24 @@ end
1 index /DA fget not {
1 index /V fget {
<EFBBBF> anchorsearch {
- pop /Helvetica findfont 12 scalefont setfont
+ pop /Helvetica findfont
+ 12 scalefont setfont
} {
<FEFF> anchorsearch {
pop pop /FallBackFont /Identity-UTF16-H [/CIDFallBack] composefont 12 scalefont setfont
} {
- pop /Helvetica findfont 12 scalefont setfont
+ pop /Helvetica findfont
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Helvetica-PDFDocEncoding def
+ currentdict
+ end
+ /Helvetica-PDFDocEncoding exch definefont
+ 12 scalefont setfont
}ifelse
}ifelse
} if
@@ -3318,109 +3433,151 @@ end
% } if
% } if
- dup /AP knownoget {
- dup /N known not {
- ( **** Error: Appearance dictionary (AP) lacks the mandatory normal (N) appearance.\n)
- pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
+ % Acrobat doesn't draw Widget annotations unles they have both /FT
+ % (which is defined as required) and /T keys present. Annoyingly
+ % these can either be inherited from the Form Definition Field
+ % dictionary (via the AcroForm tree) or present directly in the
+ % annotation, so we need to check the annotation to make sure its
+ % a Widget, then follow any /Parent key up to the root node
+ % extracting and storing any FT or T keys as we go (we only care if
+ % these are present, their value is immaterial). If after all that
+ % both keys are not present, then we don't draw the annotation.
+
+ dup /Subtype get /Widget eq {
+ dup /FT known 1 index /T known and not {
+ dup
+ {
+ dup /FT knownoget {
+ /FT exch 3 index 3 1 roll put
+ } if
+ dup /T knownoget {
+ /T exch 3 index 3 1 roll put
+ } if
+ /Parent knownoget not {
+ exit
+ } if
+ } loop
} if
- //false
- [/N /R /D] {
- % stack: scalex scaley annot appearance false key
- 2 index exch knownogetdict {
- exch not exit
+ dup /FT known 1 index /T known and {
+ //true
+ } {
+ ( **** Warning: A Widget annotation dictionary lacks either the FT or T key.\n)
+ pdfformaterror
+ ( Acrobat ignores such annotations, annotation will not be rendered.\n)
+ pdfformaterror
+ ( Output may not be as expected.\n) pdfformaterror
+ //false
+ } ifelse
+ } {
+ //true
+ }ifelse
+
+ {
+ dup /AP knownoget {
+ dup /N known not {
+ ( **** Error: Appearance dictionary (AP) lacks the mandatory normal (N) appearance.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
} if
- } forall
- % stack: scalex scaley annot appearance value true
- % stack: scalex scaley annot appearance false
- dup {
- pop exch pop
+ //false
+ [/N /R /D] {
+ % stack: scalex scaley annot appearance false key
+ 2 index exch knownogetdict {
+ exch not exit
+ } if
+ } forall
+ % stack: scalex scaley annot appearance value true
+ % stack: scalex scaley annot appearance false
+ dup {
+ pop exch pop
% Acrobat Distiller produces files in which this Form
% XObject lacks Type and Subtype keys. This is illegal,
% but Acrobat Reader accepts it. The only way we can
% tell whether this is a Form or a set of sub-appearances
% is by testing for the stream Length or File key.
% If the stream lacks Length key, try File key.
- dup /Length knownoget { type /integertype eq } { //false } ifelse
- 1 index /File knownoget { type /filetype eq or } if {
- % If this is a form then simply use it
- //true
- } {
- 1 index /AS knownoget not {
- % If we do not have AS then use any appearance
- { exch pop oforce exit } forall //true
+ dup /Length knownoget { type /integertype eq } { //false } ifelse
+ 1 index /File knownoget { type /filetype eq or } if {
+ % If this is a form then simply use it
+ //true
} {
- % Stack: annot Ndict AS
- % Get the specified appearance. If no appearance, then
- % display nothing - set stack = false.
- knownoget
+ 1 index /AS knownoget not {
+ % If we do not have AS then use any appearance
+ { exch pop oforce exit } forall //true
+ } {
+ % Stack: annot Ndict AS
+ % Get the specified appearance. If no appearance, then
+ % display nothing - set stack = false.
+ knownoget
+ } ifelse
} ifelse
+ } {
+ exch pop % discard useless AP dictionary
} ifelse
- } {
- exch pop % discard useless AP dictionary
- } ifelse
% Stack: scalex scaley annot appearance true
% Stack: scalex scaley annot false
- {
- dup type /dicttype eq {
+ {
+ dup type /dicttype eq {
% Draw appearance
% Initialize graphic following "7.4.4 Appearance Streams"
- q graphicsbeginpage textbeginpage
- 1 index annotrect pop pop translate
- 3 index 3 index scale % Apply scale factors
- dup /BBox knownoget {
- 1 index /Matrix knownoget not { {1 0 0 1 0 0} } if
- .bbox_transform pop pop
- % Compensate for non-zero origin of BBox
- neg exch neg exch translate
- } if
- DoForm Q
- } {
- ( **** Error: Annotation's appearance is not a dictionary.\n)
- pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- } ifelse
- } if
- } {
- dup /MK knownoget { % mk
- dup /BG knownoget { % mk bg
- dup length % mk bg len
- //set_bc_color exch .knownget {
- gsave
- exec
- 3 index 3 index scale
- 1 index annotrect rectfill
- grestore
+ q graphicsbeginpage textbeginpage
+ 1 index annotrect pop pop translate
+ 3 index 3 index scale % Apply scale factors
+ dup /BBox knownoget {
+ 1 index /Matrix knownoget not { {1 0 0 1 0 0} } if
+ .bbox_transform pop pop
+ % Compensate for non-zero origin of BBox
+ neg exch neg exch translate
+ } if
+ DoForm Q
} {
- pop
+ ( **** Error: Annotation's appearance is not a dictionary.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
} ifelse
} if
- dup /BC knownoget {
- dup length
- //set_bc_color exch .knownget {
- gsave
- exec
- 1 setlinewidth
- 3 index 3 index scale
- 1 index annotrect rectstroke
- grestore
- } {
- pop
- } ifelse
+ } {
+ dup /MK knownoget { % mk
+ dup /BG knownoget { % mk bg
+ dup length % mk bg len
+ //set_bc_color exch .knownget {
+ gsave
+ exec
+ 3 index 3 index scale
+ 1 index annotrect rectfill
+ grestore
+ } {
+ pop
+ } ifelse
+ } if
+ dup /BC knownoget {
+ dup length
+ //set_bc_color exch .knownget {
+ gsave
+ exec
+ 1 setlinewidth
+ 3 index 3 index scale
+ 1 index annotrect rectstroke
+ grestore
+ } {
+ pop
+ } ifelse
+ } if
+ pop
} if
- pop
- } if
- dup can-regenerate-ap {
- make_tx_da
- dup /UpdatedAP //true put
- 3 copy drawwidget
- } if
- } ifelse
+ dup can-regenerate-ap {
+ make_tx_da
+ dup /UpdatedAP //true put
+ 3 copy drawwidget
+ } if
+ } ifelse
+ } if
pop pop pop
} bind executeonly def
+
currentdict /set_bc_color undef
% For annotation object we have to determine the size of the output rectangle
@@ -3471,6 +3628,23 @@ currentdict /set_bc_color undef
} ifelse
} bind executeonly def
+/applyRD {
+ % x y w h [l t r b]
+ dup 0 get % x y w h [] l
+ 6 -1 roll add
+ 5 1 roll %x+l y w h []
+ dup 1 get %x+l y w h [] b
+ 5 -1 roll add %x+l w h [] b+y
+ 4 1 roll %x+l y+b w h []
+ aload pop %x+l y+b w h l t r b
+ exch %x+l y+b w h l t b r
+ 4 -1 roll add %x+l y+b w h t b r+l
+ 3 1 roll add %x+l y+b w h r+l t+b
+ 3 -1 roll exch sub %x+l y+b w r+l h-(t+b)
+ 3 1 roll sub %x+l y+b h-(t+b) w-(r+l)
+ exch
+} bind executeonly def
+
% Draw an annotation.
/drawannottypes 20 dict begin
@@ -3569,16 +3743,30 @@ currentdict /set_bc_color undef
{
gsave
dup /ca knownoget {.setopacityalpha} if
- dup annotrect rectfill
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ rectfill
grestore
dup /CA knownoget {.setopacityalpha} if
- drawborder
+ dup annotsetcolor {
+ drawborder
+ } if
//false
}{
- pop
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ drawopdict /re get exec
+ dup annotsetcolor {
+ strokeborderpath
+ } if
} ifelse
//endannottransparency exec
grestore
+ //false
}ifelse
} bind executeonly def
@@ -3608,11 +3796,17 @@ currentdict /set_bc_color undef
} {
gsave
//startannottransparency exec
- dup annotrect 4 2 roll exch 3 index 2 div add exch 2 index 2 div add
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ 4 2 roll exch 3 index 2 div add exch 2 index 2 div add
translate //drawellipse exec
dup
fillborderpath
- strokeborderpath
+ dup annotsetcolor {
+ strokeborderpath
+ } if
//endannottransparency exec
grestore
//false
@@ -3661,8 +3855,14 @@ currentdict /set_bc_color undef
fill
grestore
dup /CA knownoget {.setopacityalpha} if
- strokeborderpath
- } if
+ dup annotsetcolor {
+ strokeborderpath
+ } if
+ } {
+ dup annotsetcolor {
+ strokeborderpath
+ } if
+ } ifelse
//endannottransparency exec
//false
grestore
@@ -3795,7 +3995,7 @@ currentdict /set_bc_color undef
fillborderpath
grestore
} bind executeonly def
- /None {} bind executeonly def
+ /None {pop} bind executeonly def
/Butt {
dup
/BS knownoget {
@@ -3880,36 +4080,50 @@ currentdict /set_bc_color undef
} {
gsave
//startannottransparency exec
- dup /L knownoget {
- 1 index /LE knownoget {
- gsave
- 1 index aload pop % x1 y1 x2 y2
- 3 -1 roll sub % x1 x2 dy
- 3 1 roll exch sub % dy dx
- 2 copy translate
- atan
- rotate
- dup 0 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
- grestore
- gsave
- 1 index aload pop % x1 y1 x2 y2
- 3 -1 roll sub % x1 x2 dy
- 3 1 roll exch sub % dy dx
- 2 copy translate
- atan 180 add
- rotate
- 1 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
- grestore
- }if
- aload pop 4 2 roll
- moveto lineto
- strokeborderpath
- }{
- ( **** Error: Invalid L array for Line, annotation has not been drawn.\n)
- pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- pop
- } ifelse
+ dup annotsetcolor {
+ dup /L knownoget {
+ 1 index /LE knownoget { % <annot> [x1 y1 x2 y2] [LE1 LE2]
+ gsave
+ 1 index aload pop % <annot> [x1 y1 x2 y2] [LE1 LE2] x1 y1 x2 y2
+ 3 -1 roll sub % <annot> [x1 y1 x2 y2] [LE1 LE2] x1 x2 dy
+ 3 1 roll exch sub % <annot> [x1 y1 x2 y2] [LE1 LE2] dy dx
+ 3 index aload pop 4 2 roll pop pop
+ translate
+ 0 0 moveto
+ atan % <annot> [x1 y1 x2 y2] [LE1 LE2]
+ rotate
+ dup 1 get % <annot> [x1 y1 x2 y2] [LE1 LE2] LE1
+ dup //LineEnd_dict exch known not
+ {
+ pop /None
+ } if
+ //LineEnd_dict exch % <annot> [x1 y1 x2 y2] [LE1 LE2] <dict> LE1
+ get % <annot> [x1 y1 x2 y2] [LE1 LE2] {}
+ 3 index exch % <annot> [x1 y1 x2 y2] [LE1 LE2] <annot> {}
+ exec
+ grestore
+ gsave
+ 1 index aload pop % x1 y1 x2 y2
+ 3 -1 roll sub % x1 x2 dy
+ 3 1 roll exch sub % dy dx
+ 3 index aload pop pop pop
+ translate
+ 0 0 moveto
+ atan 180 add
+ rotate
+ 0 get dup //LineEnd_dict exch known not {pop /None} if //LineEnd_dict exch get 3 index exch exec
+ grestore
+ }if
+ aload pop 4 2 roll
+ moveto lineto
+ strokeborderpath
+ }{
+ ( **** Error: Invalid L array for Line, annotation has not been drawn.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ pop
+ } ifelse
+ } if
//endannottransparency exec
//false
grestore
@@ -3977,14 +4191,16 @@ currentdict /set_bc_color undef
/Link { % <annot> -> <false>
//startannottransparency exec
- dup drawborder dup calc_annot_scale
- 2 copy mul 0 ne
- {3 -1 roll drawwidget //false}
- {
- pop pop
- ( **** Error: ignoring annotation with scale factor of 0\n) pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- }ifelse
+ dup annotsetcolor {
+ dup drawborder dup calc_annot_scale
+ 2 copy mul 0 ne
+ {3 -1 roll drawwidget //false}
+ {
+ pop pop
+ ( **** Error: ignoring annotation with scale factor of 0\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ }ifelse
+ } if
//endannottransparency exec
} bind executeonly def
@@ -3998,7 +4214,8 @@ currentdict /set_bc_color undef
1 setlinewidth
1 setlinecap
1 setlinejoin
- dup annotsetcolor {
+ dup annotsetcolor
+ {
dup calc_annot_scale
2 copy mul 0 ne
{
@@ -4047,7 +4264,8 @@ currentdict /set_bc_color undef
//true
} {
0 setlinecap
- dup annotsetcolor {
+ dup annotsetcolor
+ {
dup calc_annot_scale
2 copy mul 0 ne
{
@@ -4087,7 +4305,8 @@ currentdict /set_bc_color undef
//true
} {
0 setlinecap
- dup annotsetcolor {
+ dup annotsetcolor
+ {
dup calc_annot_scale
2 copy mul 0 ne
{
@@ -4149,7 +4368,8 @@ currentdict /set_bc_color undef
//true
} {
0 setlinecap
- dup annotsetcolor {
+ dup annotsetcolor
+ {
/QuadPoints knownoget {
aload length 8 idiv {
6 -2 roll
@@ -4161,7 +4381,9 @@ currentdict /set_bc_color undef
} repeat
PDFusingtransparency {
//emptydict
- pathbbox 2 index add exch 3 index add exch .begintransparencygroup
+ % If we get an error, just emit an empty box
+ { pathbbox } stopped { 0 0 0 0 } if
+ 2 index add exch 3 index add exch .begintransparencygroup
/Multiply .setblendmode
fill
.endtransparencygroup
@@ -4182,7 +4404,8 @@ currentdict /set_bc_color undef
//true
} {
//startannottransparency exec
- dup annotsetcolor {
+ dup annotsetcolor
+ {
dup calc_annot_scale
2 copy mul 0 ne
{
@@ -4323,18 +4546,37 @@ currentdict /set_bc_color undef
}{
//false
} ifelse
- {dup annotrect
- %% Somewhat horrifyingly, rectfill maps directly to the device fill_rectangle
- %% method, which bypasses transparency (!!) So we construct the rectangle,
- %% and fill it, manually instead....
- gsave 4 2 roll moveto 1 index 0 rlineto
- 0 exch rlineto neg 0 rlineto closepath fill grestore
+ {
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ rectfill
} if
%% get and process the default appearance string, if we don't have one, use a default
/DA_Action_Dict
<<
- /Tf {exch dup /Helv eq {pop /Helvetica findfont exch scalefont setfont}{findfont exch scalefont setfont}ifelse}
+ /Tf
+ {
+ exch dup /Helv eq
+ {
+ pop /Helvetica dup findfont
+ }
+ {dup findfont}ifelse
+
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Helvetica-PDFDocEncoding def
+ currentdict
+ end
+ definefont
+ exch scalefont setfont
+ }
/r {aload pop setrgbcolor} % Can't find this actually defined anywhere, but Acrobat seems to honour it :-(
/rg {setrgbcolor}
/RG {setrgbcolor}
@@ -4380,27 +4622,108 @@ currentdict /set_bc_color undef
{cleartomark pop} ifelse
} {
0 setgray
- /Helvetica findfont 12 scalefont setfont
+ /Helvetica findfont
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Helvetica-PDFDocEncoding def
+ currentdict
+ end
+ /Helvetica-PDFDocEncoding exch definefont
+ 12 scalefont setfont
}ifelse
%% draw the border, if we don't have a border style dictionary, draw a default one.
- dup /BS knownoget {
+ dup /BS knownoget
+ {
pop dup drawborder
}{
newpath
0 setgray 1 setlinewidth
- dup annotrect 4 -1 roll 1 add 4 -1 roll 1 add 4 -1 roll 2 sub 4 -1 roll 2 sub
- 4 2 roll moveto
- currentpoint exch 3 index add exch lineto
- currentpoint 2 index add lineto
- exch currentpoint 3 1 roll exch sub exch lineto
- currentpoint 3 -1 roll sub lineto stroke
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ 4 -1 roll 4 -1 roll 4 -1 roll 4 -1 roll
+ 4 2 roll
+ } {
+ 4 -1 roll 1 add 4 -1 roll 1 add 4 -1 roll 2 sub 4 -1 roll 2 sub
+ 4 2 roll
+ }ifelse
+ moveto
+ currentpoint exch 3 index add exch
+ lineto
+ currentpoint 2 index add
+ lineto
+ exch currentpoint 3 1 roll exch sub exch
+ lineto
+ currentpoint 3 -1 roll sub
+ lineto stroke
}ifelse
+ gsave % in case we rotate the contents
%% Start the current point at the top left of the annotation Rect
%%
- dup annotrect 4 -1 roll 2 add 4 -1 roll 2 add 4 -1 roll 4 sub 4 -1 roll 4 sub
- 3 -1 roll add 2 index exch moveto 1 index add
+ dup /Rotate knownoget
+ % x y w h - x' w' x' y'
+ {
+ dup 90 eq {
+ pop
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ exch pop 3 -1 roll 2 index
+ moveto 90 rotate
+ 1 index add
+ } {
+ dup 180 eq {
+ pop
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ pop 3 -1 roll 1 index add -1 mul exch 1 index -1 mul 4 -1 roll
+ moveto 180 rotate
+ 1 index add
+ }{
+ 270 eq {
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ } if
+ dup 4 -1 roll add 3 -1 roll 3 index add exch
+ moveto 270 rotate
+ exch pop currentpoint
+ pop dup 3 -1 roll add
+ }{
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ 3 -1 roll add 2 index exch
+ moveto 1 index add
+ }{
+ 4 -1 roll 2 add 4 -1 roll 2 add 4 -1 roll 4 sub 4 -1 roll 4 sub
+ 3 -1 roll add 2 index exch
+ moveto 1 index add
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ }{
+ dup annotrect
+ 5 index /RD knownoget {
+ applyRD
+ 3 -1 roll add 2 index exch
+ moveto 1 index add
+ }{
+ 4 -1 roll 2 add 4 -1 roll 2 add 4 -1 roll 4 sub 4 -1 roll 4 sub
+ 3 -1 roll add 2 index exch
+ moveto 1 index add
+ } ifelse
+ } ifelse
%% Get the Contents string, if we don't have one, we're done
%%
@@ -4439,7 +4762,6 @@ currentdict /set_bc_color undef
%% and use it immediatley to start the text one line down
%%
currentpoint ..TextHeight sub moveto
-
%% Now we process each character code in the string. If we find
%% a /r/ or /n then we drop a line. If the character would end up
%% outside the Annot Rect, then we drop a line before showing it.
@@ -4453,7 +4775,8 @@ currentdict /set_bc_color undef
} {
1 string dup 0 4 -1 roll
put dup %% llx urx (string) (int) (int)
- stringwidth pop currentpoint pop add 3 index gt {
+ stringwidth pop currentpoint pop add 3 index
+ gt {
currentpoint exch pop 4 index exch ..TextHeight sub moveto
} if
show
@@ -4470,6 +4793,34 @@ currentdict /set_bc_color undef
} ifelse
} if
pop pop
+
+ grestore % in case the contents were rotated
+ dup /CL knownoget {
+ dup length 6 eq {
+ dup aload pop pop pop
+ } {
+ dup length 4 eq {
+ dup aload pop
+ } {
+ pop 0
+ } ifelse
+ } ifelse
+ 4 2 roll
+ exch 4 -1 roll sub
+ 3 1 roll exch sub
+ atan exch
+ aload pop moveto lineto lineto
+ currentpoint
+% stroke
+% 0 1 0 setrgbcolor
+ moveto currentpoint translate 0 0 moveto
+ 360 exch sub rotate
+ currentpoint
+ -5 -8 rlineto
+ moveto
+ 5 -8 rlineto
+ stroke
+ } if
//endannottransparency exec
//false
grestore
@@ -4505,7 +4856,18 @@ currentdict /set_bc_color undef
PDFusingtransparency {
.begintransparencytextgroup
} if
- /Times-Bold findfont exch scalefont setfont % (text) y
+ /Times-Bold findfont
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Times-Bold-PDFDocEncoding def
+ currentdict
+ end
+ /Times-Bold-PDFDocEncoding exch definefont
+ exch scalefont setfont % (text) y
gsave
0 0 moveto
1 index //false charpath flattenpath pathbbox
@@ -4668,7 +5030,18 @@ currentdict /set_bc_color undef
.begintransparencytextgroup
} if
0 setgray
- /Helvetica findfont 9 scalefont setfont
+ /Helvetica findfont
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Helvetica-PDFDocEncoding def
+ currentdict
+ end
+ /Helvetica-PDFDocEncoding exch definefont
+ 9 scalefont setfont
2 index aload pop 3 1 roll pop pop 30 sub exch 5 add exch
moveto show
PDFusingtransparency {
@@ -4687,7 +5060,18 @@ currentdict /set_bc_color undef
.begintransparencytextgroup
} if
0 setgray
- /Helvetica findfont 9 scalefont setfont
+ /Helvetica findfont
+ % re-encode the font to PDFDocEncoding
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding /PDFDocEncoding /Encoding findresource def
+ /FontName /Helvetica-PDFDocEncoding def
+ currentdict
+ end
+ /Helvetica-PDFDocEncoding exch definefont
+ 9 scalefont setfont
dup stringwidth pop
2 index aload pop pop exch pop exch sub
exch sub 2 div 2 index aload pop 3 1 roll pop pop 11 sub 3 1 roll add exch moveto
@@ -4748,6 +5132,25 @@ currentdict end readonly def
ifelse
} bind executeonly def
+/.PDFPreserveAnnotType?
+{
+ //false exch
+ /PreserveAnnotTypes where
+ {
+ /PreserveAnnotTypes get
+ {
+ dup /* eq exch 2 index eq or
+ {
+ pop //true exch
+ exit
+ } if
+ } forall
+ pop
+ }
+ {pop pop //true}
+ ifelse
+} bind executeonly def
+
/drawannot { % <annot> drawannot -
dup annotvisible {
gsave
@@ -5050,7 +5453,7 @@ currentdict end readonly def
gsave
dup dup /Subtype knownoget {
- dup //.PDFDrawAnnotType? exec
+ dup //.PDFPreserveAnnotType? exec
{
//preserveannottypes exch .knownget { exec } { //true } ifelse
{
@@ -5068,7 +5471,13 @@ currentdict end readonly def
}ifelse
} if
}
- {pop} ifelse
+ {
+ % Not preserving this type of annotation
+ % discard teh Subtype
+ pop
+ % copy the Annot dictionary and try drawing it instead
+ dup drawannot
+ } ifelse
% type known
} {
pop
diff --git a/Resource/Init/pdf_font.ps b/Resource/Init/pdf_font.ps
index 81b7af13..60deb64e 100644
--- a/Resource/Init/pdf_font.ps
+++ b/Resource/Init/pdf_font.ps
@@ -857,176 +857,222 @@ setglobal
/.pdfdfndict mark
/defaultfontname /Helvetica
.dicttomark readonly def
-/pdffindfont { % <font-resource> <fontname> pdffindfont <font>
- % If the font isn't available, synthesize one based on
- % its descriptor.
- dup /Font resourcestatus {
- pop pop pdffindcachedfont
- } {
- 1 index /FontDescriptor knownoget {
- % Stack: font-res fontname fontdesc
- dup /Flags oget
- dup 16#40 and -6 bitshift % 1, oblique/italic
- 1 index 16#40000 and -17 bitshift add % 2, bold
- exch 16#2 and 2 bitshift add % 8, serif
- % We should look at the fixed flag, too.
- % Stack: font-res fontname fontdesc properties
-
- % Even though /FontName is a required key in FontDescriptor dict
- % (As of the PDF 1.4 Reference Manual), In the case of missing
- % /FontName key, we substitue /BaseFont for the value of /FontName.
- % Yet another case of broken PDF's that Adobe Reader accepts.
- 1 index dup /FontName known {
- /FontName oget
- dup type /nametype ne {
- ( **** Error: /FontName in FontDescriptor is not a name.\n)
- pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- cvn
- } if
- } {
- ( **** Error: FontDescriptor missing required /FontName key. BaseFont name used.\n)
- pdfformaterror
- ( Output may be incorrect.\n) pdfformaterror
- pop 2 index % grab the BaseFont from the stack.
- } ifelse
- .remove_font_name_prefix
- exch
- % Analyzes font name and extract "Bold" and "Narrow" properties
- % which are not described by the FontDescriptor Flags.
- % We also allow the font name analysis to override the Flags setting
- % for Italic/Oblique as this gives us results more consistent with
- % Acrobat.
- 0 2 index //.fontnameproperties exec 7 and or
- % Rebind the default font name to Helvetica so that
- % fonts with no properties are handled correctly.
- //.pdfdfndict begin .substitutefontname end
- % Stack: font-res fontname fontdesc substname|null
- Fontmap 1 index known
- {//false}
- { .buildnativefontmap pop NativeFontmap 1 index known not} ifelse
- {
- % No available good substitution, use the standard one.
- pop 1 index .substitutefont
- } if
- dup 3 index ne {
- QUIET not {
- (Substituting font ) print dup =only
- ( for ) print 2 index =only (.) = flush
- } if
- % Send a warning to the device, in case its pdfwrite and we are in PDF/A mode
- % In that case the substituted font may not (probably doesn't) have glyphs which
- % match the /Widths of the original font, and that will cause a fault with PDF/A
- % so we need to let the device know.
- /SubstitutedFont /EventInfo .special_op
- } if
- pdffindcachedfont
- % Stack: font-res fontname fontdesc font
+% This code attempts to use the FontName and FontDescriptor to find a
+% 'better' match for a missing font than the default font. There
+% are a list of fonts and mappings here (TTfonts) and in gs_font.ps
+% (.substitutefaces) which we can use to map from a requested font
+% family name to a substitute family. If that fails we check the
+% FontDescriptor Flags to attempt a (very slightly) better match.
+% We use Times-Roman for serif fonts and Helvetica for non-serif.
+% This all seems pretty poor to me, but its long-standing, so we
+% won't attempt to meddle with it.
+/pdfsubstitutefont {
+ % Stack: font-res fontname fontdesc
+
+ dup /Flags oget
+ dup 16#40 and -6 bitshift % 1, oblique/italic
+ 1 index 16#40000 and -17 bitshift add % 2, bold
+ exch 16#2 and 2 bitshift add % 8, serif
+
+ % We should look at the fixed flag, too.
+ % Stack: font-res fontname fontdesc properties
+
+ % Even though /FontName is a required key in FontDescriptor dict
+ % (As of the PDF 1.4 Reference Manual), In the case of missing
+ % /FontName key, we substitue /BaseFont for the value of /FontName.
+ % Yet another case of broken PDF's that Adobe Reader accepts.
+ 1 index dup /FontName known
+ {
+ /FontName oget
+ dup type /nametype ne
+ {
+ ( **** Error: /FontName in FontDescriptor is not a name.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ cvn
+ } if
+ }
+ {
+ ( **** Error: FontDescriptor missing required /FontName key. BaseFont name used.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ pop 2 index % grab the BaseFont from the stack.
+ } ifelse
+ .remove_font_name_prefix
+ exch
+
+ % Analyzes font name and extract "Bold" and "Narrow" properties
+ % which are not described by the FontDescriptor Flags.
+ % We also allow the font name analysis to override the Flags setting
+ % for Italic/Oblique as this gives us results more consistent with
+ % Acrobat.
+ 0 2 index //.fontnameproperties exec 7 and or
+
+ % Rebind the default font name to Helvetica so that
+ % fonts with no properties are handled correctly.
+ //.pdfdfndict begin .substitutefontname end
- % Some non-compliant files are missing FirstChar/LastChar,
- % despite referencing a non-base14 font
- 3 index /FirstChar knownoget
+ % Stack: font-res fontname fontdesc substname|null
+ Fontmap 1 index known
+ {//false}
+ { .buildnativefontmap pop NativeFontmap 1 index known not}
+ ifelse
+
+ {
+ % No available good substitution, use the standard one.
+ pop 1 index .substitutefont
+ } if
+
+ dup 3 index ne
+ {
+ QUIET not
+ {
+ (Substituting font ) print dup =only
+ ( for ) print 2 index =only (.) = flush
+ } if
+ % Send a warning to the device, in case its pdfwrite and we are in PDF/A mode
+ % In that case the substituted font may not (probably doesn't) have glyphs which
+ % match the /Widths of the original font, and that will cause a fault with PDF/A
+ % so we need to let the device know.
+ /SubstitutedFont /EventInfo .special_op
+ } if
+
+ pdffindcachedfont
+ % Stack: font-res fontname fontdesc font
+
+ % Some non-compliant files are missing FirstChar/LastChar,
+ % despite referencing a non-base14 font
+ 3 index /FirstChar knownoget
+ {
+ 0 % push an initial value for accumating the Widths
+ 0 string % and an empty string to interrogate the font
+ 7 index /Widths knownoget
+ {
+ 0 1 2 index length 1 sub
{
- 0 % push an initial value for accumating the Widths
- 0 string % and an empty string to interrogate the font
- 7 index /Widths knownoget
+ dup 2 index exch get
+ dup type /packedarraytype eq {exec} if % Handle entries which are indirect references (seriously ? !!)
+ dup 0 gt % We ignore entries of zero in the widths array
{
- 0 1 2 index length 1 sub
+ exch 5 index add % add FirstChar to the idx to get a char code
+ dup 64 gt 1 index 91 lt and % we only want to consider A~Z and....
+ 1 index 96 gt 2 index 123 lt and or % ... a~z
{
- dup 2 index exch get
- dup type /packedarraytype eq {exec} if % Handle entries which are indirect references (seriously ? !!)
- dup 0 gt % We ignore entries of zero in the widths array
- {
- exch 5 index add % add FirstChar to the idx to get a char code
- dup 64 gt 1 index 91 lt and % we only want to consider A~Z and....
- 1 index 96 gt 2 index 123 lt and or % ... a~z
- {
- exch
- 5 -1 roll add 4 1 roll % add the width to the accumulator on the stack
- 1 string dup 0 4 -1 roll put
- 3 -1 roll concatstrings exch % add the char code to the string
- }
- {
- pop pop
- } ifelse
- }
- {
- pop pop
- } ifelse
- } for
- pop % get rid of the Widths array
- 3 -1 roll pop % get rid of the FirstChar value
- dup length dup 0 gt
- {
- 3 -1 roll exch div % calculate an average width from the Widths array
-
- gsave
- 2 index 10 scalefont setfont
- exch dup length exch stringwidth
- grestore
- pop 100 mul exch div div
- % Only make the font smaller/narrower, not larger/wider
- dup 1.0 lt
- {
- 0 0 2 index 0 0 6 array astore
- exch //true .copyfontdict
- dup /FontMatrix get 3 -1 roll matrix concatmatrix
- exch dup 3 -1 roll /FontMatrix exch put
- % we don't need to definfont here, we can leave that to .completefont below
- }
- {
- pop
- } ifelse
+ exch
+ 5 -1 roll add 4 1 roll % add the width to the accumulator on the stack
+ 1 string dup 0 4 -1 roll put
+ 3 -1 roll concatstrings exch % add the char code to the string
}
{
- % no suitable Widths entries - carry on and hope for the best......
- pop pop pop
+ pop pop
} ifelse
}
{
- % Broken file: no Widths array for non-base14 font - carry on and hope for the best......
- ( **** Warning: Widths array missing in FontDescriptor for non-base14 font\n)
- pdfformatwarning
- pop pop pop
+ pop pop
+ } ifelse
+ } for
+ pop % get rid of the Widths array
+ 3 -1 roll pop % get rid of the FirstChar value
+ dup length dup 0 gt
+ {
+ 3 -1 roll exch div % calculate an average width from the Widths array
+ gsave
+ 2 index 10 scalefont setfont
+ exch dup length exch stringwidth
+ grestore
+ pop 100 mul exch div div
+ % Only make the font smaller/narrower, not larger/wider
+ dup 1.0 lt
+ {
+ 0 0 2 index 0 0 6 array astore
+ exch //true .copyfontdict
+ dup /FontMatrix get 3 -1 roll matrix concatmatrix
+ exch dup 3 -1 roll /FontMatrix exch put
+ % we don't need to definfont here, we can leave that to .completefont below
+ }
+ {
+ pop
} ifelse
}
{
- ( **** Warning: FirstChar value missing in FontDescriptor for non-base14 font\n)
- pdfformatwarning
+ % no suitable Widths entries - carry on and hope for the best......
+ pop pop pop
} ifelse
- % Stack: font-res fontname fontdesc font
- % If this is a small-caps font, replace the CharString
- % entries for a..z.
-
- exch /Flags oget 16#20000 and 0 ne {
- //true .copyfontdict
- dup /CharStrings 2 copy get dup length dict .copydict
- % stack: font-res fontname font font /CharStrings CharStringsdict
- 5 index /FirstChar get 97 .max
- 6 index /LastChar get 122 .min 1 exch {
- % Stack: font-res fontname font' font' /CharStrings charstrings code
- % Note that this only remaps a-z, not accented characters.
- 6 index /Widths oget 1 index 8 index /FirstChar get sub oget
- 1 string dup 0 5 -1 roll put
- % Stack: font-res font' font' /CharStrings charstrings code
- % width (x)
- 2 index exch dup cvn exch
- dup 0 2 copy get 32 sub put 4 -1 roll {
- % Stack: operand (X) width
- 0 setcharwidth exch pop
- currentfont /FontMatrix get matrix invertmatrix concat
- 0.7 dup scale 0 0 moveto show
- } /exec cvx 4 packedarray cvx put
- } for put
- } if
- dup /FontName get 2 index ne {
- //true .copyfontdict
- 2 copy exch /FontName exch put
- } if
- exch pop .completefont
- } {
- % No descriptor available, use the default algorithm.
+ }
+ {
+ % Broken file: no Widths array for non-base14 font - carry on and hope for the best......
+ ( **** Warning: Widths array missing in FontDescriptor for non-base14 font\n)
+ pdfformatwarning
+ pop pop pop
+ } ifelse
+ }
+ {
+ ( **** Warning: FirstChar value missing in FontDescriptor for non-base14 font\n)
+ pdfformatwarning
+ } ifelse
+ % Stack: font-res fontname fontdesc font
+
+ % If this is a small-caps font, replace the CharString
+ % entries for a..z.
+ exch /Flags oget 16#20000 and 0 ne
+ {
+ //true .copyfontdict
+ dup /CharStrings 2 copy get dup length dict .copydict
+ % stack: font-res fontname font font /CharStrings CharStringsdict
+ 5 index /FirstChar get 97 .max
+ 6 index /LastChar get 122 .min 1 exch
+ {
+
+ % Stack: font-res fontname font' font' /CharStrings charstrings code
+ % Note that this only remaps a-z, not accented characters.
+ 6 index /Widths oget 1 index 8 index /FirstChar get sub oget
+ 1 string dup 0 5 -1 roll put
+
+ % Stack: font-res font' font' /CharStrings charstrings code
+ % width (x)
+ 2 index exch dup cvn exch
+ dup 0 2 copy get 32 sub put 4 -1 roll
+ {
+ % Stack: operand (X) width
+ 0 setcharwidth exch pop
+ currentfont /FontMatrix get matrix invertmatrix concat
+ 0.7 dup scale 0 0 moveto show
+ } /exec cvx 4 packedarray cvx put
+ } for put
+ } if
+
+ dup /FontName get 2 index ne
+ {
+ //true .copyfontdict
+ 2 copy exch /FontName exch put
+ } if
+ exch pop .completefont
+} bind executeonly def
+
+/pdffindfont { % <font-resource> <fontname> pdffindfont <font>
+ % If the font isn't available, synthesize one based on
+ % its descriptor.
+ dup /Font resourcestatus
+ {
+ pop pop pdffindcachedfont
+ }
+ {
+ 1 index /FontDescriptor knownoget {
+ /SUBSTFONT where not
+ {
+ pdfsubstitutefont
+ }
+ {
+ % User has defined SUBSTFONT, use the defined substitute font, do not
+ % try to be clever
+ pop % the dictionary containing SUBSTFONT
+ pop % the FontDescriptor
+ pdffindcachedfont
+ }ifelse
+ }
+ {
+ % No descriptor available, use the default algorithm.
pdffindcachedfont
} ifelse
} ifelse
@@ -2473,23 +2519,22 @@ currentdict /bndef undef
% if the font was defined in-line, we won't have a object number
dup /.gs.pdfobj# .knownget not { //null } if
} {
- dup /FontDescriptor knownoget {
% if the font was defined in-line, we won't have a object number
- dup /.gs.pdfobj# .knownget not { //null }if
- dup //null eq {
- exch pop
- }{
- exch dup /FontFile knownoget not {
- dup /FontFile2 knownoget not {
- dup /FontFile3 knownoget not {
- pop pop //null
- } {pop pop}ifelse
+ dup /.gs.pdfobj# .knownget not { //null }if
+ dup //null eq not {
+ 1 index /FontDescriptor knownoget {
+ dup /FontFile knownoget not {
+ dup /FontFile2 knownoget not {
+ dup /FontFile3 knownoget not {
+ pop pop //null
} {pop pop}ifelse
- }{pop pop}ifelse
- }ifelse
- }{
- //null
- } ifelse
+ } {pop pop}ifelse
+ }{pop pop}ifelse
+ }
+ {
+ pop //null
+ } ifelse
+ }if
} ifelse
3 1 roll
diff --git a/Resource/Init/pdf_main.ps b/Resource/Init/pdf_main.ps
index 7690bae0..5cd90556 100644
--- a/Resource/Init/pdf_main.ps
+++ b/Resource/Init/pdf_main.ps
@@ -47,7 +47,7 @@ userdict /GS_PDF_ProcSet undef
% PDF 1.1 operators
/BX { /BXlevel BXlevel 1 add store } bind executeonly
/EX { /BXlevel BXlevel 1 sub store } bind executeonly
- /PS { cvx exec } bind executeonly
+ /PS { DOPS { cvx exec } { pop } ifelse } bind executeonly % PS disabled by default, as in pdf_draw.ps DoPS
% PDF 1.2 operators
/BMC {
/BMClevel BMClevel 1 add store
@@ -2339,8 +2339,20 @@ end readonly def
/get_media_box { % <pagedict> get_media_box <box> <bool>
/MediaBox pget {
- oforce_array //true
- } {
+ oforce_array
+ dup length 4 eq {
+ //true
+ }
+ {
+ pop
+ ( **** Error: Page has an invalid /MediaBox attribute. Using the current page size.\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ [ 0 0 currentpagedevice /PageSize get aload pop ]
+ //false
+ }ifelse
+ }
+ {
( **** Error: Page has no /MediaBox attribute. Using the current page size.\n)
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
@@ -2493,9 +2505,26 @@ end readonly def
1
} {
1 index /UserUnit knownoget {
- PDFDEBUG { (Scaling due to UserUnit by ) print dup = flush } if
+ /PassUserUnit /GetDeviceParam .special_op {
+ exch pop dup {
+ [ /UserUnit 4 -1 roll .pdfputparams pop pop 1 exch
+ } if
+ }{
+ //false
+ }ifelse
+
+ not {
+ PDFDEBUG { (Scaling due to UserUnit by ) print dup = flush } if
+ } if
} {
- 1
+ /PassUserUnit /GetDeviceParam .special_op {
+ exch pop {
+ [ /UserUnit 1 .pdfputparams pop pop
+ } if
+ 1
+ }{
+ 1
+ } ifelse
} ifelse
} ifelse
} ifelse
@@ -2573,8 +2602,23 @@ currentdict /PDF2PS_matrix_key undef
% Set the page size.
//systemdict /NoUserUnit .knownget not { //false } if not {
3 index /UserUnit knownoget {
- dup 4 -1 roll mul 3 1 roll mul
- } if
+ /PassUserUnit /GetDeviceParam .special_op {
+ exch pop dup {
+ [ /UserUnit 4 -1 roll .pdfputparams pop pop
+ } if
+ }{
+ //false
+ }ifelse
+ not {
+ dup 4 -1 roll mul 3 1 roll mul
+ } if
+ } {
+ /PassUserUnit /GetDeviceParam .special_op {
+ exch pop {
+ [ /UserUnit 1 .pdfputparams pop pop
+ } if
+ }if
+ } ifelse
} if
} ifelse
2 array astore /PageSize exch def
@@ -2740,7 +2784,7 @@ currentdict /PDF2PS_matrix_key undef
.poppdf14devicefilter % NB: reset to DefaultQstate will also restore transfer function
/DefaultQstate qstate store % device has changed -- reset DefaultQstate
} {
- /setup_trans { pop } def % no-op this if the page doesn't use transparency
+ /setup_trans { pop pop } def % no-op this if the page doesn't use transparency
% NB: original will be restored from PDFsave
showpagecontents
} ifelse
@@ -2856,7 +2900,19 @@ currentdict /PDF2PS_matrix_key undef
% Draw the annotations
//systemdict /ShowAnnots .knownget not { //true } if {
/Annots knownoget {
- { oforce
+ {
+ /AnnotDrawCheck exch % marker to clean up stack on error
+ {oforce} stopped
+ {
+ ( **** Error: Unable to draw an annotation.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ count -1 0 { % make sure we don't go past the top of the stack
+ pop % remove the counter
+ /AnnotDrawCheck eq {exit} if % remove object and check if its the marker, exit if it is
+ } for
+ }
+ {
+ exch pop
dup //null ne {
.writepdfmarks
%%
@@ -2878,6 +2934,7 @@ currentdict /PDF2PS_matrix_key undef
} {
pop
} ifelse
+ } ifelse
} forall
} if
} if
@@ -3063,33 +3120,45 @@ currentdict /PDF2PS_matrix_key undef
//false exch % Assume no transparency
/Annots knownoget { % Get Annots array
{
- oforce
- dup //null ne {
- dup /Subtype knownoget {
- /Highlight eq { % Highlight annotation is always implemented
- pop pop //true exit % as transparency.
+ /AnnotTransparencyCheck exch % marker to clean up stack on error
+ {oforce} stopped
+ {
+ ( **** Error: Unable to check an annotation for use of transparency.\n) pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ count -1 0 { % make sure we don't go past the top of the stack
+ pop % remove the counter
+ /AnnotTransparencyCheck eq {exit} if % remove object and check if its the marker, exit if it is
+ } for
+ }
+ {
+ exch pop % remove the 'on error' marker
+ dup //null ne {
+ dup /Subtype knownoget {
+ /Highlight eq { % Highlight annotation is always implemented
+ pop pop //true exit % as transparency.
+ } if
} if
- } if
- dup /AP knownoget { % Get appearance dict for the annoation
- /N knownogetdict { % Get the /N (i.e. normal) appearance stream
- 4 dict exch resourceusestransparency { pop pop //true exit } if
+ dup /AP knownoget { % Get appearance dict for the annoation
+ /N knownogetdict { % Get the /N (i.e. normal) appearance stream
+ 4 dict exch resourceusestransparency { pop pop //true exit } if
+ } if
+ } if % If AP dict known
+ dup /BM knownoget {
+ //true exit
} if
- } if % If AP dict known
- dup /BM knownoget {
- //true exit
- } if
- dup /CA knownoget {
- 1 le {
- pop pop //true exit
+ dup /CA knownoget {
+ 1 le {
+ pop pop //true exit
+ } if
} if
- } if
- /ca knownoget {
- 1 le {
- pop //true exit
+ /ca knownoget {
+ 1 le {
+ pop //true exit
+ } if
} if
- } if
- } {
- pop
+ } {
+ pop
+ } ifelse
} ifelse
} forall % For all annots on the page
} if
@@ -3545,24 +3614,33 @@ end % pdfdict
/.setfillcolor /.setfillcolorspace /.setstrokecolor /.setstrokecolorspace /.currentrenderingintent /.setrenderingintent
/.currenttextrenderingmode /.settextspacing /.currenttextspacing /.settextleading /.currenttextleading
/.settextrise /.currenttextrise /.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling
-/.settextlinematrix /.currenttextlinematrix /.currenttextmatrix /.settextmatrix /.currentblendmode
-/.currentopacityalpha /.currentshapealpha /.currenttextknockout
-/.pushextendedgstate /.popextendedgstate /.begintransparencytextgroup
-/.endtransparencytextgroup /.begintransparencymaskgroup /.begintransparencymaskimage /.endtransparencymask /.image3x
-/.abortpdf14devicefilter /.pdfinkpath /.pdfFormName /.setstrokeconstantalpha
-/.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
-/.settextspacing /.currenttextspacing /.settextleading /.currenttextleading /.settextrise /.currenttextrise
-/.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling /.setPDFfontsize /.currentPDFfontsize
-/.setdistillerparams
-
-% Used by our own test suite files
-%/.pushpdf14devicefilter % transparency-example.ps
-%/.poppdf14devicefilter % transparency-example.ps
-%/.setopacityalpha % transparency-example.ps
-%/.setshapealpha % transparency-example.ps
-%/.endtransparencygroup % transparency-example.ps
+/.settextlinematrix /.currenttextlinematrix /.currenttextmatrix /.settextmatrix /.pushextendedgstate
+/.popextendedgstate
+
+/.pdfinkpath /.pdfFormName /.settextspacing /.currenttextspacing /.settextleading /.currenttextleading
+/.settextrise /.currenttextrise /.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling
+/.setPDFfontsize /.currentPDFfontsize /.setdistillerparams
% undefining these causes errors/incorrect output
-%/.settextrenderingmode /.setblendmode /.begintransparencygroup /.settextknockout /.setstrokeoverprint /.setfilloverprint
-%/.currentstrokeoverprint /.currentfilloverprint /.currentfillconstantalpha /.currentstrokeconstantalpha
+%/.settextrenderingmode
] systemdict .undefinternalnames
+
+% The following are split out allowing control via ALLOWPSTRANSPARENCY command line param
+[
+ /.currentblendmode /.currentopacityalpha /.currentshapealpha /.currenttextknockout /.begintransparencytextgroup
+ /.endtransparencytextgroup /.begintransparencymaskgroup /.begintransparencymaskimage /.begintransparencypagegroup
+ /.endtransparencymask /.image3x /.abortpdf14devicefilter /.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
+
+ % Used by our own test suite files
+ %/.pushpdf14devicefilter % transparency-example.ps
+ %/.poppdf14devicefilter % transparency-example.ps
+ %/.setopacityalpha % transparency-example.ps
+ %/.setshapealpha % transparency-example.ps
+ %/.endtransparencygroup % transparency-example.ps
+
+ % undefining these causes errors/incorrect output
+ %/.setblendmode /.begintransparencygroup /.settextknockout /.setstrokeoverprint /.setfilloverprint
+ %/.currentstrokeoverprint /.currentfilloverprint /.currentfillconstantalpha /.currentstrokeconstantalpha
+ %/.setstrokeconstantalpha /.setfillconstantalpha /.setSMask /.currentSMask
+
+] systemdict dup /ALLOWPSTRANSPARENCY get {pop pop}{.undefinternalnames}ifelse
diff --git a/Resource/Init/pdf_ops.ps b/Resource/Init/pdf_ops.ps
index d594035c..eb2168a5 100644
--- a/Resource/Init/pdf_ops.ps
+++ b/Resource/Init/pdf_ops.ps
@@ -279,8 +279,8 @@ currentdict /gput_always_allow .undef
/DeviceCMYK { [0 0 0 1] cvx } bind executeonly
/CIEBasedA { 0 } bind executeonly
/CIEBasedABC { [0 0 0] cvx } bind executeonly
- /CalGray { pop /DeviceGray 0 } bind executeonly
- /CalRGB { pop /DeviceRGB [0 0 0] cvx } bind executeonly
+ /CalGray { 0 } bind executeonly
+ /CalRGB { [0 0 0] cvx } bind executeonly
/Lab {[0 0 0] cvx } bind executeonly
/ICCBased { [ 1 index 1 oget /N get { 0 } repeat ] cvx } bind executeonly
/Separation { 1 } bind executeonly
@@ -701,7 +701,7 @@ end
% NB: setup_trans is defined as either setupOPtrans (for devices that can support
% overprint, or as setupSMtrans which pushes a group for SMask.
% Also see 'teardown_trans' that pops the group and resets the changed values.
-/setupOPtrans % <fillop|strokeop> setup_trans
+/setupOPtrans % [ pathbbox ] <fillop|strokeop> setup_trans
{ % Check OP and BM in case we need to push a group
//OPsaveDstack begin
//Dpush exec % push the current OPsaveDstack values into 'previous'
@@ -719,41 +719,34 @@ end
} ifelse
.currentSMask //null ne or { % push a group for OP or SMask
mark /Subtype /Group /Isolated .currentSMask //null ne .dicttomark
- 1 index /stroke eq {
- % BBox needs to include line width / line join expansion.
- gsave strokepath pathbbox grestore
- } {
- pathbbox % fill/eofill cases
- } ifelse
+ 2 index aload pop % pathbbox
.begintransparencygroup
% After group pushed, set opacityalpha, shapealpha and blendmode
/saveOA .currentopacityalpha def
/saveSA .currentshapealpha def
1 .setopacityalpha 1 .setshapealpha
/GroupPushed //true def
- } if
+ } {
+ /GroupPushed //false def
+ } ifelse
% we may change to CompatibleOverprint even if we didn't push a group.
ChangeBM {
/saveBM .currentblendmode def /CompatibleOverprint .setblendmode
} if
pop % fillop/strokeop
+ pop % pathbbox array
end % OPsaveDstack
} bind executeonly def
% Also see 'teardown_trans' that pops the group and resets the changed values.
-/setupSMtrans % <fillop|strokeop> setup_trans
+/setupSMtrans % [ pathbbox ] <fillop|strokeop> setup_trans
{
//OPsaveDstack begin
//Dpush exec % push the current OPsaveDstack values into 'previous'
.currentSMask //null ne 1 index /image ne and % only push for SMask if not from image
{
mark /Subtype /Group /Isolated //true .dicttomark
- exch /stroke eq {
- % BBox needs to include line width / line join expansion.
- gsave strokepath pathbbox grestore
- } {
- pathbbox % fill/eofill cases
- } ifelse
+ 2 index aload pop % pathbbox
.begintransparencygroup
% After group pushed, set opacityalpha, shapealpha and blendmode
/saveOA .currentopacityalpha def
@@ -762,9 +755,10 @@ end
/GroupPushed //true def
} {
/GroupPushed //false def
- pop % fillop/strokeop
} ifelse
end % OPsaveDstack
+ pop % fillop/strokeop
+ pop % pathbbox array
} bind executeonly def
% If a transparency group was pushed, pop it, and reset the settings.
@@ -791,9 +785,23 @@ currentdict dup /Dpush .undef /Dpop .undef
/fsexec % <fillop|strokeop> fsexec -
{
PDFusingtransparency {
- dup setup_trans
- cvx exec
- teardown_trans
+ dup /stroke eq 1 index /.fillstroke eq or 1 index /.eofillstroke eq or {
+ % BBox needs to include line width / line join expansion.
+ % strokepath will return empty path (no currentpoint) if nothing is stroked
+ { gsave strokepath pathbbox } stopped grestore {
+ % If we get an error, just emit an empty box
+ 0 0 0 0
+ } if
+ } {
+ % If we get an error, just emit an empty box
+ { pathbbox } stopped { 0 0 0 0 } if
+ } ifelse
+ % pathbbox valid -- proceed with drawing
+ 4 array astore % pathbbox
+ 1 index
+ setup_trans
+ cvx exec
+ teardown_trans
} {
cvx exec
} ifelse
@@ -924,23 +932,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/B {
OFFlevels length 0 eq {
- PDFusingtransparency {
- % knockout trans group around the filled and stroked object
- mark
- /Isolated //true /Knockout //true
- .dicttomark
- % strokepath will return empty path (no currentpoint) if nothing is stroked
- gsave { strokepath pathbbox } stopped grestore not {
- 1 .setopacityalpha
- .begintransparencygroup
- gsave setfillstate fill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- .endtransparencygroup
- } { newpath pop } ifelse
- } {
- gsave setfillstate fill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- } ifelse
+ setstrokestate setfillstate /.fillstroke fsexec
} {
newpath
} ifelse
@@ -950,23 +942,7 @@ currentdict dup /Dpush .undef /Dpop .undef
/B* {
OFFlevels length 0 eq {
- PDFusingtransparency {
- % knockout trans group around the filled and stroked object
- mark
- /Isolated //true /Knockout //true
- .dicttomark
- % strokepath will return empty path (no currentpoint) if nothing is stroked
- gsave { strokepath pathbbox } stopped grestore not {
- 1 .setopacityalpha
- .begintransparencygroup
- gsave setfillstate eofill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- .endtransparencygroup
- } { newpath pop } ifelse
- } {
- gsave setfillstate eofill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- } ifelse
+ setstrokestate setfillstate /.eofillstroke fsexec
} {
newpath
} ifelse
@@ -982,49 +958,14 @@ currentdict dup /Dpush .undef /Dpop .undef
/f* { OFFlevels length 0 eq { gsave setfillstate eofill grestore } if n } bind executeonly def
/B {
OFFlevels length 0 eq {
- PDFusingtransparency {
- % knockout trans group around the filled and stroked object
- mark
- /Isolated //true /Knockout //true
- .dicttomark
- % strokepath will return empty path (no currentpoint) if nothing is stroked
- gsave {strokepath pathbbox } stopped grestore not
- {
- 1 .setopacityalpha
- .begintransparencygroup
- gsave setfillstate fill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- .endtransparencygroup
- } {
- newpath pop
- } ifelse
- } {
- gsave setfillstate fill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- } ifelse
+ .fillstroke
} if
n
} bind executeonly def
/b { closepath B } bind executeonly def
/B* {
OFFlevels length 0 eq {
- PDFusingtransparency {
- % knockout trans group around the filled and stroked object
- mark
- /Isolated //true /Knockout //true
- .dicttomark
- % strokepath will return empty path (no currentpoint) if nothing is stroked
- gsave {strokepath pathbbox} stopped grestore not {
- 1 .setopacityalpha
- .begintransparencygroup
- gsave setfillstate eofill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- .endtransparencygroup
- } { newpath pop } ifelse
- } {
- gsave setfillstate eofill grestore
- setstrokestate .swapcolors /stroke fsexec .swapcolors
- } ifelse
+ .eofillstroke
} if
n
} bind executeonly def
@@ -1219,9 +1160,19 @@ end readonly def
} bind executeonly def
+/clip_if_required {
+ .currenttextrenderingmode 4 ge
+ {currentpoint} //.internalstopped exec
+ {//false}
+ {pop pop //true}
+ ifelse and
+ { .currentfilladjust2 0 dup .setfilladjust2 clip .setfilladjust2} if
+ newpath
+} bind def
+
/ET_NO_TXT_KO {
currentdict /TextSaveMatrix known {
- .currenttextrenderingmode 4 ge { .currentfilladjust2 0 dup .setfilladjust2 clip .setfilladjust2 newpath} if
+ //clip_if_required exec
TextSaveMatrix setmatrix
currentdict /TextSaveMatrix undef
@@ -1244,6 +1195,8 @@ end readonly def
} if
} bind executeonly def
+currentdict /clip_if_required .undef
+
/ET {
//ET_NO_TXT_KO exec
% Group push occurred in pdf14_text_begin.
@@ -1642,8 +1595,19 @@ end readonly def
% If current path is not known to be valid, use the clip path
/TextTransSetup { % showarg path_valid TextTransSetup showarg
% showarg path_valid false TextTransSetup showarg
+ gsave
% NB: if 'show' is used, then we use the clippath, but a smaller bbox is preferred
- not dup { gsave clippath } if //null setup_trans { grestore } if
+ {
+ % path was (probably) valid (CTM may not be invertable)
+ % Since TR mode may include stroking, expand for stroke
+ % If we get an error, just emit an empty box
+ { strokepath pathbbox } stopped { 0 0 0 0 } if
+ } {
+ clippath pathbbox stopped { 0 0 0 0 } if
+ } ifelse
+ grestore
+ 4 array astore //null
+ setup_trans
} bind executeonly def
/TextTransTeardown {
@@ -1678,25 +1642,35 @@ end readonly def
% operations when the CTM is singular.
% Work around this here.
{
- matrix currentmatrix dup dup
- dup 0 get 0 eq 1 index 1 get 0 eq and {
- dup dup 2 get 0 eq { 0 }{ 1 } ifelse 1 put
- } if
- dup 2 get 0 eq 1 index 3 get 0 eq and {
- dup dup 1 get 0 eq { 3 }{ 2 } ifelse 1 put
- } if
- setmatrix
- currentpoint
- % don't worry about transparency for invisible text
- 4 index settextfillstate show % Tr was set to graphic state.
- moveto
- setmatrix
- % now set the currentpoint using the original matrix
- gsave
- setmatrix
- //false charpath currentpoint newpath
- grestore
- moveto
+ matrix currentmatrix
+ % Previously we tested specifically for a scale factor of 0,
+ % but bug #701875 has a CTM which is minute, but not zero. If
+ % we try to use that at anything except low resolution FreeType
+ % ends up trying to deal with glyph metrics where one dimension is 0
+ % and it throws an error. So instead of looking for zero, we'll look
+ % for a really tiny CTM.
+ % We also used to patch up the CTM, and still use it, but frankly
+ % this is too much trouble. If the CTM is tiny then the displacement
+ % due to drawing the text will also be tiny. Negligible in fact.
+ % So if its that small then lets just ignore it.
+ dup 0 get abs 0.00001 lt 1 index 1 get 0.00001 abs lt and not {
+ dup 2 get abs 0.00001 lt 1 index 3 get abs 0.00001 lt and not {
+ pop
+ currentpoint
+ % don't worry about transparency for invisible text
+ 2 index settextfillstate show % Tr was set to graphic state.
+ moveto
+ % now set the currentpoint using the original matrix
+ gsave
+ //false charpath currentpoint newpath
+ grestore
+ moveto
+ } {
+ pop pop
+ }ifelse
+ } {
+ pop pop
+ }ifelse
}
} {
{ //false charpath textrenderingprocs .currenttextrenderingmode get exec }
@@ -1919,7 +1893,9 @@ end readonly def
1 .setopacityalpha
% While text will always have a currentpoint, strokepath seems to mess with it.
% we get the currentpoint, then use moveto to restore it for pathbbox
- gsave currentpoint strokepath moveto pathbbox grestore
+ { gsave currentpoint strokepath moveto pathbbox } stopped grestore {
+ /tB cvx /undefinedresult signalerror
+ } if
.begintransparencygroup
gsave tf grestore tS
.endtransparencygroup
diff --git a/arch/arch_autoconf.h.in b/arch/arch_autoconf.h.in
index f9d9e997..34ec8678 100644
--- a/arch/arch_autoconf.h.in
+++ b/arch/arch_autoconf.h.in
@@ -19,6 +19,7 @@
#define ARCH_ALIGN_SHORT_MOD @ARCH_ALIGN_SHORT_MOD@
#define ARCH_ALIGN_INT_MOD @ARCH_ALIGN_INT_MOD@
#define ARCH_ALIGN_LONG_MOD @ARCH_ALIGN_LONG_MOD@
+#define ARCH_ALIGN_SIZE_T_MOD @ARCH_ALIGN_SIZE_T_MOD@
#define ARCH_ALIGN_PTR_MOD @ARCH_ALIGN_PTR_MOD@
#define ARCH_ALIGN_FLOAT_MOD @ARCH_ALIGN_FLOAT_MOD@
#define ARCH_ALIGN_DOUBLE_MOD @ARCH_ALIGN_DOUBLE_MOD@
@@ -30,11 +31,13 @@
#define ARCH_LOG2_SIZEOF_INT @ARCH_LOG2_SIZEOF_INT@
#define ARCH_LOG2_SIZEOF_LONG @ARCH_LOG2_SIZEOF_LONG@
#define ARCH_LOG2_SIZEOF_LONG_LONG @ARCH_LOG2_SIZEOF_LONG_LONG@
+#define ARCH_LOG2_SIZEOF_SIZE_T @ARCH_LOG2_SIZEOF_SIZE_T@
#define ARCH_LOG2_SIZEOF_PTR @ARCH_LOG2_SIZEOF_PTR@
#define ARCH_LOG2_SIZEOF_FLOAT @ARCH_LOG2_SIZEOF_FLOAT@
#define ARCH_LOG2_SIZEOF_DOUBLE @ARCH_LOG2_SIZEOF_DOUBLE@
#define ARCH_SIZEOF_PTR @ARCH_SIZEOF_PTR@
+#define ARCH_SIZEOF_SIZE_T @ARCH_SIZEOF_SIZE_T@
#define ARCH_SIZEOF_FLOAT @ARCH_SIZEOF_FLOAT@
#define ARCH_SIZEOF_DOUBLE @ARCH_SIZEOF_DOUBLE@
@@ -44,6 +47,7 @@
#define ARCH_MAX_USHORT ((unsigned short)~(unsigned short)0 + (unsigned short)0)
#define ARCH_MAX_UINT ((unsigned int)~0 + (unsigned int)0)
#define ARCH_MAX_ULONG ((unsigned long)~0L + (unsigned long)0)
+#define ARCH_MAX_SIZE_T ((size_t)~0L + (size_t)0)
/* ---------------- Floating point ---------------- */
diff --git a/arch/osx-x86-x86_64-ppc-gcc.h b/arch/osx-x86-x86_64-ppc-gcc.h
index db72c601..6166f897 100644
--- a/arch/osx-x86-x86_64-ppc-gcc.h
+++ b/arch/osx-x86-x86_64-ppc-gcc.h
@@ -7,6 +7,7 @@
#define ARCH_ALIGN_SHORT_MOD 2
#define ARCH_ALIGN_INT_MOD 4
#define ARCH_ALIGN_LONG_MOD 4
+#define ARCH_ALIGN_SIZE_T_MOD 4
#define ARCH_ALIGN_PTR_MOD 4
#define ARCH_ALIGN_FLOAT_MOD 4
#define ARCH_ALIGN_DOUBLE_MOD 4
@@ -17,7 +18,9 @@
#define ARCH_LOG2_SIZEOF_SHORT 1
#define ARCH_LOG2_SIZEOF_INT 2
#define ARCH_LOG2_SIZEOF_LONG 2
+#define ARCH_LOG2_SIZEOF_SIZE_T 2
#define ARCH_LOG2_SIZEOF_LONG_LONG 3
+#define ARCH_SIZEOF_SIZET 4
#ifndef ARCH_SIZEOF_GX_COLOR_INDEX
#define ARCH_SIZEOF_GX_COLOR_INDEX 8
@@ -35,6 +38,7 @@
#define ARCH_MAX_USHORT ((unsigned short)0xffff + (unsigned short)0)
#define ARCH_MAX_UINT ((unsigned int)~0 + (unsigned int)0)
#define ARCH_MAX_ULONG ((unsigned long)~0L + (unsigned long)0)
+#define ARCH_MAX_SIZE_T ((size_t)~0L + (size_t)0)
/* ---------------- Miscellaneous ---------------- */
@@ -53,6 +57,7 @@
#define ARCH_ALIGN_SHORT_MOD 2
#define ARCH_ALIGN_INT_MOD 4
#define ARCH_ALIGN_LONG_MOD 8
+#define ARCH_ALIGN_SIZE_T_MOD 8
#define ARCH_ALIGN_PTR_MOD 8
#define ARCH_ALIGN_FLOAT_MOD 4
#define ARCH_ALIGN_DOUBLE_MOD 8
@@ -63,7 +68,9 @@
#define ARCH_LOG2_SIZEOF_SHORT 1
#define ARCH_LOG2_SIZEOF_INT 2
#define ARCH_LOG2_SIZEOF_LONG 3
+#define ARCH_LOG2_SIZEOF_SIZE_T 3
#define ARCH_LOG2_SIZEOF_LONG_LONG 3
+#define ARCH_SIZEOF_SIZE_T 8
#ifndef ARCH_SIZEOF_GX_COLOR_INDEX
#define ARCH_SIZEOF_GX_COLOR_INDEX 8
@@ -81,6 +88,7 @@
#define ARCH_MAX_USHORT ((unsigned short)0xffff + (unsigned short)0)
#define ARCH_MAX_UINT ((unsigned int)~0 + (unsigned int)0)
#define ARCH_MAX_ULONG ((unsigned long)~0L + (unsigned long)0)
+#define ARCH_MAX_SIZE_T ((size_t)~0L + (size_t)0)
/* ---------------- Miscellaneous ---------------- */
@@ -96,6 +104,7 @@
#define ARCH_ALIGN_SHORT_MOD 2
#define ARCH_ALIGN_INT_MOD 4
#define ARCH_ALIGN_LONG_MOD 4
+#define ARCH_ALIGN_SIZE_T_MOD 4
#define ARCH_ALIGN_PTR_MOD 4
#define ARCH_ALIGN_FLOAT_MOD 4
#define ARCH_ALIGN_DOUBLE_MOD 4
@@ -106,7 +115,9 @@
#define ARCH_LOG2_SIZEOF_SHORT 1
#define ARCH_LOG2_SIZEOF_INT 2
#define ARCH_LOG2_SIZEOF_LONG 2
+#define ARCH_LOG2_SIZEOF_SIZE_T 2
#define ARCH_LOG2_SIZEOF_LONG_LONG 3
+#define ARCH_SIZEOF_SIZE_T 4
#ifndef ARCH_SIZEOF_GX_COLOR_INDEX
#define ARCH_SIZEOF_GX_COLOR_INDEX 8
@@ -124,6 +135,7 @@
#define ARCH_MAX_USHORT ((unsigned short)0xffff + (unsigned short)0)
#define ARCH_MAX_UINT ((unsigned int)~0 + (unsigned int)0)
#define ARCH_MAX_ULONG ((unsigned long)~0L + (unsigned long)0)
+#define ARCH_MAX_SIZE_T ((size_t)~0L + (size_t)0)
/* ---------------- Miscellaneous ---------------- */
diff --git a/autogen.sh b/autogen.sh
index 30f865df..7a078362 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -17,10 +17,31 @@ cd "$srcdir"
exit 1
}
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have automake installed to compile $package."
+ echo "Download the appropriate package for your distribution,"
+ echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+ exit 1
+}
+
+rm -rf autom4te.cache
+
echo "Generating configuration files for $package, please wait...."
-echo " running autoconf"
-autoconf || exit 1
+echo " running autoreconf"
+autoreconf || exit 1
+
+if test ! -x config.guess -o ! -x config.sub ; then
+ rm -f config.guess config.sub
+ cp `automake --print-libdir`/config.guess . || exit 1
+ cp `automake --print-libdir`/config.sub . || exit 1
+fi
+
+if test ! -x install-sh ; then
+ rm -f install-sh
+ cp `automake --print-libdir`/install-sh . || exit 1
+fi
if test -z "$*"; then
echo "I am going to run ./configure with no arguments - if you wish "
diff --git a/base/cal.mak b/base/cal.mak
index b0bf5bd7..2e18077b 100644
--- a/base/cal.mak
+++ b/base/cal.mak
@@ -58,11 +58,16 @@ cal_OBJS = \
$(CAL_OBJ)$(CAL_PREFIX)blend.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)cmsavx2.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)cmssse42.$(OBJ) \
+ $(CAL_OBJ)$(CAL_PREFIX)cmsneon.$(OBJ) \
$(CAL_OBJ)$(CAL_PREFIX)lcms2mt_cal.$(OBJ)
cal_HDRS = \
$(CAL_SRC)cal.h \
$(CAL_SRC)cal-impl.h \
+ $(CAL_SRC)cal-impl.h \
+ $(CAL_SRC)cal-immintrin.h \
+ $(CAL_SRC)cal-nmmintrin.h \
+ $(arch_h)
# external link .dev - empty, as we add the lib to LDFLAGS
#$(GLOBJ)cal.dev : $(CAL_MAK) $(ECHOGS_XE) \
@@ -75,7 +80,7 @@ $(GLOBJ)cal.dev : $(ECHOGS_XE) $(cal_OBJS) \
$(SETMOD) $(GLOBJ)cal $(cal_OBJS)
# define our specific compiler
-CAL_CC=$(CC) $(CFLAGS) $(CAL_CFLAGS) $(D_)OPJ_STATIC$(_D) $(D_)STANDARD_SLOW_VERSION$(_D) $(I_)$(CAL_GEN)$(_I) $(I_)$(CAL_SRC)$(_I)
+CAL_CC=$(CC) $(CFLAGS) $(CAL_CFLAGS) $(I_)$(CAL_GEN)$(_I) $(I_)$(CAL_SRC)$(_I)
CAL_O=$(O_)$(CAL_OBJ)$(CAL_PREFIX)
CAL_DEP=$(AK) $(CAL_MAK) $(MAKEDIRS)
@@ -101,6 +106,9 @@ $(CAL_OBJ)$(CAL_PREFIX)cmsavx2.$(OBJ) : $(CAL_SRC)cmsavx2.c $(cal_HDRS) $(CAL_DE
$(CAL_OBJ)$(CAL_PREFIX)cmssse42.$(OBJ) : $(CAL_SRC)cmssse42.c $(cal_HDRS) $(CAL_DEP)
$(CAL_CC) $(CAL_SSE4_2_CFLAGS) $(I_)$(LCMS2MTSRCDIR)$(D)include $(I_)$(LCMS2MTSRCDIR)$(D)src $(CAL_O)cmssse42.$(OBJ) $(C_) $(CAL_SRC)cmssse42.c
+$(CAL_OBJ)$(CAL_PREFIX)cmsneon.$(OBJ) : $(CAL_SRC)cmsneon.c $(cal_HDRS) $(CAL_DEP)
+ $(CAL_CC) $(CAL_SSE4_2_CFLAGS) $(CAL_NEON_CFLAGS) $(I_)$(LCMS2MTSRCDIR)$(D)include $(I_)$(LCMS2MTSRCDIR)$(D)src $(CAL_O)cmsneon.$(OBJ) $(C_) $(CAL_SRC)cmsneon.c
+
$(CAL_OBJ)$(CAL_PREFIX)lcms2mt_cal.$(OBJ) : $(CAL_SRC)lcms2mt_cal.c $(cal_HDRS) $(CAL_DEP) $(gsmemory_h)
$(CAL_CC) $(I_)$(LCMS2MTSRCDIR)$(D)include $(I_)$(GLSRC) $(I_)$(LCMS2MTSRCDIR)$(D)src $(CAL_O)lcms2mt_cal.$(OBJ) $(C_) $(CAL_SRC)lcms2mt_cal.c
@@ -113,5 +121,11 @@ $(CAL_OBJ)$(CAL_PREFIX)blendsse42.$(OBJ) : $(CAL_SRC)blendsse42.c $(cal_HDRS) $(
$(CAL_OBJ)$(CAL_PREFIX)blend.$(OBJ) : $(CAL_SRC)blend.c $(cal_HDRS) $(CAL_DEP) $(gsmemory_h)
$(CAL_CC) $(I_)$(GLSRC) $(CAL_O)blend.$(OBJ) $(C_) $(CAL_SRC)blend.c
+cal_ets_h=$(CAL_SRC)cal_ets.h
+ca_ets_tm_h=$(CAL_SRC)cal_ets_tm.h
+$(GLOBJ)ets_1.$(OBJ) : $(CAL_SRC)cal_ets.c $(CAL_SRC)ets_template.c \
+ $(cal_ets_h) $(cal_ets_tm_h) $(cal_HDRS) $(CAL_DEP) $(LIB_MAK)
+ $(GLCC) $(CAL_SSE4_2_CFLAGS) $(CAL_NEON_CFLAGS) $(GLO_)ets_1.$(OBJ) $(C_) $(CAL_SRC)cal_ets.c
+
# end of file
diff --git a/base/claptrap-planar.c b/base/claptrap-planar.c
index 46863654..9b06b184 100644
--- a/base/claptrap-planar.c
+++ b/base/claptrap-planar.c
@@ -43,7 +43,9 @@ inline static void process_at_pixel(ClapTrap * gs_restrict ct,
/* Use local vars to avoid pointer aliasing */
int width = ct->width;
int height = ct->height;
+#ifndef NDEBUG
int num_comp_lim = ct->num_comps;
+#endif
int max_x_offset = ct->max_x_offset;
int max_y_offset = ct->max_y_offset;
int span = ct->span;
diff --git a/base/ets.h b/base/ets.h
index a549da57..4b009b8a 100644
--- a/base/ets.h
+++ b/base/ets.h
@@ -120,6 +120,7 @@ ets_line(ETS_Ctx *ctx, unsigned char **dest, const ETS_SrcPixel * const * gs_res
void
ets_destroy(void *malloc_arg, ETS_Ctx *ctx);
+/* These are called from ETS and must be implemented by the calling code. */
void *
ets_malloc(void *malloc_arg, int size);
diff --git a/base/expat.mak b/base/expat.mak
index 61a90168..3cb3c3c8 100644
--- a/base/expat.mak
+++ b/base/expat.mak
@@ -47,8 +47,7 @@ expat.config-clean :
expat_=$(EXPATOBJ)xmlparse.$(OBJ) \
$(EXPATOBJ)xmltok.$(OBJ) \
- $(EXPATOBJ)xmlrole.$(OBJ) \
- $(EXPATOBJ)loadlibrary.$(OBJ)
+ $(EXPATOBJ)xmlrole.$(OBJ)
expat_xmlparse_hdrs=$(EXPATSRC)expat.h \
$(EXPATSRC)xmlrole.h \
@@ -81,9 +80,6 @@ $(EXPATOBJ)xmlrole.$(OBJ) : $(EXPATSRC)xmlrole.c $(expat_xmlrole_hdrs) $(EXPAT_M
$(EXPATOBJ)xmltok.$(OBJ) : $(EXPATSRC)xmltok.c $(expat_xmltok_hdrs) $(EXPAT_MAK) $(MAKEDIRS)
$(EXPATCC) $(EXPATO_)xmltok.$(OBJ) $(C_) $(EXPATSRC)xmltok.c
-$(EXPATOBJ)loadlibrary.$(OBJ) : $(EXPATSRC)loadlibrary.c $(expat_xmltok_hdrs) $(EXPAT_MAK) $(MAKEDIRS)
- $(EXPATCC) $(EXPATO_)loadlibrary.$(OBJ) $(C_) $(EXPATSRC)loadlibrary.c
-
# Copy the target definition we want
$(EXPATGEN)expat.dev : $(EXPAT_MAK) \
$(EXPATGEN)expat_$(SHARE_EXPAT).dev $(MAKEDIRS)
diff --git a/base/fapiufst.c b/base/fapiufst.c
index 8c542520..59aeb134 100644
--- a/base/fapiufst.c
+++ b/base/fapiufst.c
@@ -2165,8 +2165,10 @@ gs_fapi_ufst_init(gs_memory_t * mem, gs_fapi_server ** server)
sizeof
(fapi_ufst_server),
"fapi_ufst_server");
- if (serv == 0)
+ if (serv == NULL) {
+ gs_memory_chunk_release(cmem);
return_error(gs_error_Fatal);
+ }
memset(serv, 0, sizeof(*serv));
serv->mem = cmem;
diff --git a/base/freetype.mak b/base/freetype.mak
index c26d12da..eea93a7f 100644
--- a/base/freetype.mak
+++ b/base/freetype.mak
@@ -33,7 +33,7 @@ FTO_=$(O_)$(FTOBJ)
# we must define FT2_BUILD_LIBRARY to get internal declarations
# If GS is using the system zlib, freetype should also do so,
# FT_CONFIG_SYSTEM_ZLIB is set by the top makefile.
-FTCC=$(CC_) $(I_)$(FTSRCDIR)$(D)include$(_I) $(D_)FT2_BUILD_LIBRARY$(_D) $(D_)DARWIN_NO_CARBON$(_D) $(FT_CONFIG_SYSTEM_ZLIB)
+FTCC=$(CC_) $(I_)$(FTGEN)$(_I) $(I_)$(FTSRCDIR)$(D)include$(_I) $(D_)FT_CONFIG_OPTIONS_H=\"$(FTCONFH)\"$(_D) $(D_)FT2_BUILD_LIBRARY$(_D) $(D_)DARWIN_NO_CARBON$(_D) $(FT_CONFIG_SYSTEM_ZLIB)
# Define the name of this makefile.
FT_MAK=$(GLSRC)freetype.mak $(TOP_MAKEFILES)
@@ -110,8 +110,7 @@ ft_cff=\
$(FTOBJ)cffgload.$(OBJ) \
$(FTOBJ)cffload.$(OBJ) \
$(FTOBJ)cffobjs.$(OBJ) \
- $(FTOBJ)cffparse.$(OBJ) \
- $(FTOBJ)cffpic.$(OBJ)
+ $(FTOBJ)cffparse.$(OBJ)
ft_cid=\
$(FTOBJ)cidparse.$(OBJ) \
@@ -162,31 +161,26 @@ ft_pshinter=\
$(FTOBJ)pshalgo.$(OBJ)
ft_psnames=\
- $(FTOBJ)psmodule.$(OBJ) \
- $(FTOBJ)pspic.$(OBJ)
+ $(FTOBJ)psmodule.$(OBJ)
ft_raster=\
$(FTOBJ)ftraster.$(OBJ) \
- $(FTOBJ)ftrend1.$(OBJ) \
- $(FTOBJ)rastpic.$(OBJ)
+ $(FTOBJ)ftrend1.$(OBJ)
ft_smooth=\
$(FTOBJ)ftgrays.$(OBJ) \
- $(FTOBJ)ftsmooth.$(OBJ) \
- $(FTOBJ)ftspic.$(OBJ)
+ $(FTOBJ)ftsmooth.$(OBJ)
ft_sfnt=\
- $(FTOBJ)sfobjs.$(OBJ) \
- $(FTOBJ)sfdriver.$(OBJ) \
- $(FTOBJ)ttcmap.$(OBJ) \
$(FTOBJ)ttmtx.$(OBJ) \
$(FTOBJ)ttpost.$(OBJ) \
$(FTOBJ)ft2ttload.$(OBJ) \
$(FTOBJ)ttsbit.$(OBJ) \
$(FTOBJ)ttkern.$(OBJ) \
$(FTOBJ)ttbdf.$(OBJ) \
- $(FTOBJ)sfntpic.$(OBJ) \
- $(FTOBJ)pngshim.$(OBJ)
+ $(FTOBJ)sfnt.$(OBJ) \
+ $(FTOBJ)pngshim.$(OBJ) \
+ $(FTOBJ)ttcpal.$(OBJ)
ft_truetype=\
@@ -196,7 +190,6 @@ ft_truetype=\
$(FTOBJ)ttgload.$(OBJ) \
$(FTOBJ)ft2ttinterp.$(OBJ) \
$(FTOBJ)ttgxvar.$(OBJ) \
- $(FTOBJ)ttpic.$(OBJ) \
$(FTOBJ)ttsubpix.$(OBJ)
ft_type1=\
@@ -215,11 +208,11 @@ ft_type42=\
ft_winfonts=$(FTOBJ)winfnt.$(OBJ)
# instantiate the requested build option (shared or compiled in)
-$(FTGEN)freetype.dev : $(FT_MAK) $(FTGEN)freetype_$(SHARE_FT).dev $(FT_MAK) $(MAKEDIRS)
+$(FTGEN)freetype.dev : $(FTGEN)freetype_$(SHARE_FT).dev $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(CP_) $(FTGEN)freetype_$(SHARE_FT).dev $(FTGEN)freetype.dev
# Define the shared version.
-$(FTGEN)freetype_1.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE) $(FT_MAK) $(MAKEDIRS)
+$(FTGEN)freetype_1.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE) $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(SETMOD) $(FTGEN)freetype_1 -link $(FT_LIBS)
# Define the non-shared version.
@@ -227,7 +220,7 @@ $(FTGEN)freetype_0.dev : $(FT_MAK) $(ECHOGS_XE) \
$(ft_autofit) $(ft_base) $(ft_bdf) $(ft_cache) $(ft_cff) $(ft_cid) \
$(ft_gzip) $(ft_lzw) $(ft_pcf) $(ft_pfr) $(ft_psaux) $(ft_pshinter) \
$(ft_psnames) $(ft_raster) $(ft_smooth) $(ft_sfnt) $(ft_truetype) \
- $(ft_type1) $(ft_type42) $(ft_winfonts) $(MAKEDIRS)
+ $(ft_type1) $(ft_type42) $(ft_winfonts) $(GENFTCONFH) $(MAKEDIRS)
$(SETMOD) $(FTGEN)freetype_0 $(ft_autofit)
$(ADDMOD) $(FTGEN)freetype_0 $(ft_base)
$(ADDMOD) $(FTGEN)freetype_0 $(ft_bdf)
@@ -252,413 +245,401 @@ $(FTGEN)freetype_0.dev : $(FT_MAK) $(ECHOGS_XE) \
# custom build rules for each source file
-$(FTOBJ)afangles.$(OBJ) : $(FTSRC)autofit$(D)afangles.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afangles.$(OBJ) : $(FTSRC)autofit$(D)afangles.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afangles.$(OBJ) $(C_) $(FTSRC)autofit$(D)afangles.c
-$(FTOBJ)afcjk.$(OBJ) : $(FTSRC)autofit$(D)afcjk.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afcjk.$(OBJ) : $(FTSRC)autofit$(D)afcjk.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afcjk.$(OBJ) $(C_) $(FTSRC)autofit$(D)afcjk.c
-$(FTOBJ)afdummy.$(OBJ) : $(FTSRC)autofit$(D)afdummy.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afdummy.$(OBJ) : $(FTSRC)autofit$(D)afdummy.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afdummy.$(OBJ) $(C_) $(FTSRC)autofit$(D)afdummy.c
-$(FTOBJ)afglobal.$(OBJ) : $(FTSRC)autofit$(D)afglobal.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afglobal.$(OBJ) : $(FTSRC)autofit$(D)afglobal.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afglobal.$(OBJ) $(C_) $(FTSRC)autofit$(D)afglobal.c
-$(FTOBJ)afhints.$(OBJ) : $(FTSRC)autofit$(D)afhints.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afhints.$(OBJ) : $(FTSRC)autofit$(D)afhints.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afhints.$(OBJ) $(C_) $(FTSRC)autofit$(D)afhints.c
-$(FTOBJ)afindic.$(OBJ) : $(FTSRC)autofit$(D)afindic.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afindic.$(OBJ) : $(FTSRC)autofit$(D)afindic.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afindic.$(OBJ) $(C_) $(FTSRC)autofit$(D)afindic.c
-$(FTOBJ)aflatin.$(OBJ) : $(FTSRC)autofit$(D)aflatin.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)aflatin.$(OBJ) : $(FTSRC)autofit$(D)aflatin.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)aflatin.$(OBJ) $(C_) $(FTSRC)autofit$(D)aflatin.c
-$(FTOBJ)afloader.$(OBJ) : $(FTSRC)autofit$(D)afloader.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afloader.$(OBJ) : $(FTSRC)autofit$(D)afloader.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afloader.$(OBJ) $(C_) $(FTSRC)autofit$(D)afloader.c
-$(FTOBJ)afmodule.$(OBJ) : $(FTSRC)autofit$(D)afmodule.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afmodule.$(OBJ) : $(FTSRC)autofit$(D)afmodule.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afmodule.$(OBJ) $(C_) $(FTSRC)autofit$(D)afmodule.c
-$(FTOBJ)afwarp.$(OBJ) : $(FTSRC)autofit$(D)afwarp.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afwarp.$(OBJ) : $(FTSRC)autofit$(D)afwarp.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afwarp.$(OBJ) $(C_) $(FTSRC)autofit$(D)afwarp.c
-$(FTOBJ)afblue.$(OBJ) : $(FTSRC)autofit$(D)afblue.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afblue.$(OBJ) : $(FTSRC)autofit$(D)afblue.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afblue.$(OBJ) $(C_) $(FTSRC)autofit$(D)afblue.c
-$(FTOBJ)afranges.$(OBJ) : $(FTSRC)autofit$(D)afranges.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afranges.$(OBJ) : $(FTSRC)autofit$(D)afranges.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afranges.$(OBJ) $(C_) $(FTSRC)autofit$(D)afranges.c
-$(FTOBJ)afshaper.$(OBJ) : $(FTSRC)autofit$(D)afshaper.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afshaper.$(OBJ) : $(FTSRC)autofit$(D)afshaper.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afshaper.$(OBJ) $(C_) $(FTSRC)autofit$(D)afshaper.c
-$(FTOBJ)ftadvanc.$(OBJ) : $(FTSRC)base$(D)ftadvanc.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftadvanc.$(OBJ) : $(FTSRC)base$(D)ftadvanc.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftadvanc.$(OBJ) $(C_) $(FTSRC)base$(D)ftadvanc.c
-$(FTOBJ)ftcalc.$(OBJ) : $(FTSRC)base$(D)ftcalc.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcalc.$(OBJ) : $(FTSRC)base$(D)ftcalc.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcalc.$(OBJ) $(C_) $(FTSRC)base$(D)ftcalc.c
-$(FTOBJ)ftdbgmem.$(OBJ) : $(FTSRC)base$(D)ftdbgmem.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftdbgmem.$(OBJ) : $(FTSRC)base$(D)ftdbgmem.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftdbgmem.$(OBJ) $(C_) $(FTSRC)base$(D)ftdbgmem.c
-$(FTOBJ)ftgloadr.$(OBJ) : $(FTSRC)base$(D)ftgloadr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftgloadr.$(OBJ) : $(FTSRC)base$(D)ftgloadr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftgloadr.$(OBJ) $(C_) $(FTSRC)base$(D)ftgloadr.c
-$(FTOBJ)ftobjs.$(OBJ) : $(FTSRC)base$(D)ftobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftobjs.$(OBJ) : $(FTSRC)base$(D)ftobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftobjs.$(OBJ) $(C_) $(FTSRC)base$(D)ftobjs.c
-$(FTOBJ)ftoutln.$(OBJ) : $(FTSRC)base$(D)ftoutln.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftoutln.$(OBJ) : $(FTSRC)base$(D)ftoutln.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftoutln.$(OBJ) $(C_) $(FTSRC)base$(D)ftoutln.c
-$(FTOBJ)ftrfork.$(OBJ) : $(FTSRC)base$(D)ftrfork.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftrfork.$(OBJ) : $(FTSRC)base$(D)ftrfork.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftrfork.$(OBJ) $(C_) $(FTSRC)base$(D)ftrfork.c
-$(FTOBJ)ftsnames.$(OBJ) : $(FTSRC)base$(D)ftsnames.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftsnames.$(OBJ) : $(FTSRC)base$(D)ftsnames.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftsnames.$(OBJ) $(C_) $(FTSRC)base$(D)ftsnames.c
-$(FTOBJ)ftstream.$(OBJ) : $(FTSRC)base$(D)ftstream.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftstream.$(OBJ) : $(FTSRC)base$(D)ftstream.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftstream.$(OBJ) $(C_) $(FTSRC)base$(D)ftstream.c
-$(FTOBJ)fttrigon.$(OBJ) : $(FTSRC)base$(D)fttrigon.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)fttrigon.$(OBJ) : $(FTSRC)base$(D)fttrigon.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)fttrigon.$(OBJ) $(C_) $(FTSRC)base$(D)fttrigon.c
-$(FTOBJ)ftutil.$(OBJ) : $(FTSRC)base$(D)ftutil.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftutil.$(OBJ) : $(FTSRC)base$(D)ftutil.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftutil.$(OBJ) $(C_) $(FTSRC)base$(D)ftutil.c
-$(FTOBJ)ftbbox.$(OBJ) : $(FTSRC)base$(D)ftbbox.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftbbox.$(OBJ) : $(FTSRC)base$(D)ftbbox.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftbbox.$(OBJ) $(C_) $(FTSRC)base$(D)ftbbox.c
-$(FTOBJ)ftbdf.$(OBJ) : $(FTSRC)base$(D)ftbdf.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftbdf.$(OBJ) : $(FTSRC)base$(D)ftbdf.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftbdf.$(OBJ) $(C_) $(FTSRC)base$(D)ftbdf.c
-$(FTOBJ)ftbitmap.$(OBJ) : $(FTSRC)base$(D)ftbitmap.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftbitmap.$(OBJ) : $(FTSRC)base$(D)ftbitmap.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftbitmap.$(OBJ) $(C_) $(FTSRC)base$(D)ftbitmap.c
-$(FTOBJ)ftdebug.$(OBJ) : $(FTSRC)base$(D)ftdebug.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftdebug.$(OBJ) : $(FTSRC)base$(D)ftdebug.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftdebug.$(OBJ) $(C_) $(FTSRC)base$(D)ftdebug.c
-$(FTOBJ)ftgasp.$(OBJ) : $(FTSRC)base$(D)ftgasp.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftgasp.$(OBJ) : $(FTSRC)base$(D)ftgasp.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftgasp.$(OBJ) $(C_) $(FTSRC)base$(D)ftgasp.c
-$(FTOBJ)ftglyph.$(OBJ) : $(FTSRC)base$(D)ftglyph.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftglyph.$(OBJ) : $(FTSRC)base$(D)ftglyph.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftglyph.$(OBJ) $(C_) $(FTSRC)base$(D)ftglyph.c
-$(FTOBJ)ftgxval.$(OBJ) : $(FTSRC)base$(D)ftgxval.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftgxval.$(OBJ) : $(FTSRC)base$(D)ftgxval.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftgxval.$(OBJ) $(C_) $(FTSRC)base$(D)ftgxval.c
-$(FTOBJ)ftinit.$(OBJ) : $(FTSRC)base$(D)ftinit.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftinit.$(OBJ) : $(FTSRC)base$(D)ftinit.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftinit.$(OBJ) $(C_) $(FTSRC)base$(D)ftinit.c
-$(FTOBJ)ftlcdfil.$(OBJ) : $(FTSRC)base$(D)ftlcdfil.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftlcdfil.$(OBJ) : $(FTSRC)base$(D)ftlcdfil.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftlcdfil.$(OBJ) $(C_) $(FTSRC)base$(D)ftlcdfil.c
-$(FTOBJ)ftmm.$(OBJ) : $(FTSRC)base$(D)ftmm.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftmm.$(OBJ) : $(FTSRC)base$(D)ftmm.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftmm.$(OBJ) $(C_) $(FTSRC)base$(D)ftmm.c
-$(FTOBJ)ftotval.$(OBJ) : $(FTSRC)base$(D)ftotval.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftotval.$(OBJ) : $(FTSRC)base$(D)ftotval.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftotval.$(OBJ) $(C_) $(FTSRC)base$(D)ftotval.c
-$(FTOBJ)ftpfr.$(OBJ) : $(FTSRC)base$(D)ftpfr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftpfr.$(OBJ) : $(FTSRC)base$(D)ftpfr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftpfr.$(OBJ) $(C_) $(FTSRC)base$(D)ftpfr.c
-$(FTOBJ)ftstroke.$(OBJ) : $(FTSRC)base$(D)ftstroke.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftstroke.$(OBJ) : $(FTSRC)base$(D)ftstroke.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftstroke.$(OBJ) $(C_) $(FTSRC)base$(D)ftstroke.c
-$(FTOBJ)ftsynth.$(OBJ) : $(FTSRC)base$(D)ftsynth.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftsynth.$(OBJ) : $(FTSRC)base$(D)ftsynth.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftsynth.$(OBJ) $(C_) $(FTSRC)base$(D)ftsynth.c
-$(FTOBJ)ftsystem.$(OBJ) : $(FTSRC)base$(D)ftsystem.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftsystem.$(OBJ) : $(FTSRC)base$(D)ftsystem.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftsystem.$(OBJ) $(C_) $(FTSRC)base$(D)ftsystem.c
-$(FTOBJ)fttype1.$(OBJ) : $(FTSRC)base$(D)fttype1.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)fttype1.$(OBJ) : $(FTSRC)base$(D)fttype1.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)fttype1.$(OBJ) $(C_) $(FTSRC)base$(D)fttype1.c
-$(FTOBJ)ftwinfnt.$(OBJ) : $(FTSRC)base$(D)ftwinfnt.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftwinfnt.$(OBJ) : $(FTSRC)base$(D)ftwinfnt.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftwinfnt.$(OBJ) $(C_) $(FTSRC)base$(D)ftwinfnt.c
-$(FTOBJ)ftpatent.$(OBJ) : $(FTSRC)base$(D)ftpatent.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftpatent.$(OBJ) : $(FTSRC)base$(D)ftpatent.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftpatent.$(OBJ) $(C_) $(FTSRC)base$(D)ftpatent.c
-$(FTOBJ)ftmd5.$(OBJ) : $(FTSRC)base$(D)md5.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftmd5.$(OBJ) : $(FTSRC)base$(D)md5.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftmd5.$(OBJ) $(C_) $(FTSRC)base$(D)md5.c
-$(FTOBJ)fthash.$(OBJ) : $(FTSRC)base$(D)fthash.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)fthash.$(OBJ) : $(FTSRC)base$(D)fthash.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)fthash.$(OBJ) $(C_) $(FTSRC)base$(D)fthash.c
-$(FTOBJ)ftpsprop.$(OBJ) : $(FTSRC)base$(D)ftpsprop.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftpsprop.$(OBJ) : $(FTSRC)base$(D)ftpsprop.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftpsprop.$(OBJ) $(C_) $(FTSRC)base$(D)ftpsprop.c
-$(FTOBJ)ftfntfmt.$(OBJ) : $(FTSRC)base$(D)ftfntfmt.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftfntfmt.$(OBJ) : $(FTSRC)base$(D)ftfntfmt.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftfntfmt.$(OBJ) $(C_) $(FTSRC)base$(D)ftfntfmt.c
-$(FTOBJ)bdflib.$(OBJ) : $(FTSRC)bdf$(D)bdflib.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)bdflib.$(OBJ) : $(FTSRC)bdf$(D)bdflib.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)bdflib.$(OBJ) $(C_) $(FTSRC)bdf$(D)bdflib.c
-$(FTOBJ)bdfdrivr.$(OBJ) : $(FTSRC)bdf$(D)bdfdrivr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)bdfdrivr.$(OBJ) : $(FTSRC)bdf$(D)bdfdrivr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)bdfdrivr.$(OBJ) $(C_) $(FTSRC)bdf$(D)bdfdrivr.c
-$(FTOBJ)ftcbasic.$(OBJ) : $(FTSRC)cache$(D)ftcbasic.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcbasic.$(OBJ) : $(FTSRC)cache$(D)ftcbasic.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcbasic.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcbasic.c
-$(FTOBJ)ft2ccache.$(OBJ) : $(FTSRC)cache$(D)ftccache.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ft2ccache.$(OBJ) : $(FTSRC)cache$(D)ftccache.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ft2ccache.$(OBJ) $(C_) $(FTSRC)cache$(D)ftccache.c
-$(FTOBJ)ftccmap.$(OBJ) : $(FTSRC)cache$(D)ftccmap.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftccmap.$(OBJ) : $(FTSRC)cache$(D)ftccmap.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftccmap.$(OBJ) $(C_) $(FTSRC)cache$(D)ftccmap.c
-$(FTOBJ)ftcglyph.$(OBJ) : $(FTSRC)cache$(D)ftcglyph.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcglyph.$(OBJ) : $(FTSRC)cache$(D)ftcglyph.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcglyph.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcglyph.c
-$(FTOBJ)ftcimage.$(OBJ) : $(FTSRC)cache$(D)ftcimage.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcimage.$(OBJ) : $(FTSRC)cache$(D)ftcimage.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcimage.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcimage.c
-$(FTOBJ)ftcmanag.$(OBJ) : $(FTSRC)cache$(D)ftcmanag.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcmanag.$(OBJ) : $(FTSRC)cache$(D)ftcmanag.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcmanag.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcmanag.c
-$(FTOBJ)ftcmru.$(OBJ) : $(FTSRC)cache$(D)ftcmru.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcmru.$(OBJ) : $(FTSRC)cache$(D)ftcmru.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcmru.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcmru.c
-$(FTOBJ)ftcsbits.$(OBJ) : $(FTSRC)cache$(D)ftcsbits.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftcsbits.$(OBJ) : $(FTSRC)cache$(D)ftcsbits.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftcsbits.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcsbits.c
-$(FTOBJ)cff.$(OBJ) : $(FTSRC)cff$(D)cff.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cff.$(OBJ) : $(FTSRC)cff$(D)cff.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cff.$(OBJ) $(C_) $(FTSRC)cff$(D)cff.c
-$(FTOBJ)cffcmap.$(OBJ) : $(FTSRC)cff$(D)cffcmap.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffcmap.$(OBJ) : $(FTSRC)cff$(D)cffcmap.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffcmap.$(OBJ) $(C_) $(FTSRC)cff$(D)cffcmap.c
-$(FTOBJ)cffdrivr.$(OBJ) : $(FTSRC)cff$(D)cffdrivr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffdrivr.$(OBJ) : $(FTSRC)cff$(D)cffdrivr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffdrivr.$(OBJ) $(C_) $(FTSRC)cff$(D)cffdrivr.c
-$(FTOBJ)cffgload.$(OBJ) : $(FTSRC)cff$(D)cffgload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffgload.$(OBJ) : $(FTSRC)cff$(D)cffgload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffgload.$(OBJ) $(C_) $(FTSRC)cff$(D)cffgload.c
-$(FTOBJ)cffload.$(OBJ) : $(FTSRC)cff$(D)cffload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffload.$(OBJ) : $(FTSRC)cff$(D)cffload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffload.$(OBJ) $(C_) $(FTSRC)cff$(D)cffload.c
-$(FTOBJ)cffobjs.$(OBJ) : $(FTSRC)cff$(D)cffobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffobjs.$(OBJ) : $(FTSRC)cff$(D)cffobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffobjs.$(OBJ) $(C_) $(FTSRC)cff$(D)cffobjs.c
-$(FTOBJ)cffparse.$(OBJ) : $(FTSRC)cff$(D)cffparse.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffparse.$(OBJ) : $(FTSRC)cff$(D)cffparse.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffparse.$(OBJ) $(C_) $(FTSRC)cff$(D)cffparse.c
-$(FTOBJ)cffpic.$(OBJ) : $(FTSRC)cff$(D)cffpic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)cffpic.$(OBJ) $(C_) $(FTSRC)cff$(D)cffpic.c
-
-$(FTOBJ)cidparse.$(OBJ) : $(FTSRC)cid$(D)cidparse.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cidparse.$(OBJ) : $(FTSRC)cid$(D)cidparse.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cidparse.$(OBJ) $(C_) $(FTSRC)cid$(D)cidparse.c
-$(FTOBJ)cidload.$(OBJ) : $(FTSRC)cid$(D)cidload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cidload.$(OBJ) : $(FTSRC)cid$(D)cidload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cidload.$(OBJ) $(C_) $(FTSRC)cid$(D)cidload.c
-$(FTOBJ)cidriver.$(OBJ) : $(FTSRC)cid$(D)cidriver.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cidriver.$(OBJ) : $(FTSRC)cid$(D)cidriver.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cidriver.$(OBJ) $(C_) $(FTSRC)cid$(D)cidriver.c
-$(FTOBJ)cidgload.$(OBJ) : $(FTSRC)cid$(D)cidgload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cidgload.$(OBJ) : $(FTSRC)cid$(D)cidgload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cidgload.$(OBJ) $(C_) $(FTSRC)cid$(D)cidgload.c
-$(FTOBJ)cidobjs.$(OBJ) : $(FTSRC)cid$(D)cidobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cidobjs.$(OBJ) : $(FTSRC)cid$(D)cidobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cidobjs.$(OBJ) $(C_) $(FTSRC)cid$(D)cidobjs.c
-$(FTOBJ)ftgzip.$(OBJ) : $(FTSRC)gzip$(D)ftgzip.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftgzip.$(OBJ) : $(FTSRC)gzip$(D)ftgzip.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftgzip.$(OBJ) $(C_) $(FTSRC)gzip$(D)ftgzip.c
-$(FTOBJ)ftlzw.$(OBJ) : $(FTSRC)lzw$(D)ftlzw.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftlzw.$(OBJ) : $(FTSRC)lzw$(D)ftlzw.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftlzw.$(OBJ) $(C_) $(FTSRC)lzw$(D)ftlzw.c
-$(FTOBJ)pcfdrivr.$(OBJ) : $(FTSRC)pcf$(D)pcfdrivr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pcfdrivr.$(OBJ) : $(FTSRC)pcf$(D)pcfdrivr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pcfdrivr.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfdrivr.c
-$(FTOBJ)pcfread.$(OBJ) : $(FTSRC)pcf$(D)pcfread.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pcfread.$(OBJ) : $(FTSRC)pcf$(D)pcfread.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pcfread.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfread.c
-$(FTOBJ)pcfutil.$(OBJ) : $(FTSRC)pcf$(D)pcfutil.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pcfutil.$(OBJ) : $(FTSRC)pcf$(D)pcfutil.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pcfutil.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfutil.c
-$(FTOBJ)pfrload.$(OBJ) : $(FTSRC)pfr$(D)pfrload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrload.$(OBJ) : $(FTSRC)pfr$(D)pfrload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrload.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrload.c
-$(FTOBJ)pfrgload.$(OBJ) : $(FTSRC)pfr$(D)pfrgload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrgload.$(OBJ) : $(FTSRC)pfr$(D)pfrgload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrgload.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrgload.c
-$(FTOBJ)pfrcmap.$(OBJ) : $(FTSRC)pfr$(D)pfrcmap.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrcmap.$(OBJ) : $(FTSRC)pfr$(D)pfrcmap.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrcmap.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrcmap.c
-$(FTOBJ)pfrdrivr.$(OBJ) : $(FTSRC)pfr$(D)pfrdrivr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrdrivr.$(OBJ) : $(FTSRC)pfr$(D)pfrdrivr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrdrivr.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrdrivr.c
-$(FTOBJ)pfrsbit.$(OBJ) : $(FTSRC)pfr$(D)pfrsbit.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrsbit.$(OBJ) : $(FTSRC)pfr$(D)pfrsbit.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrsbit.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrsbit.c
-$(FTOBJ)pfrobjs.$(OBJ) : $(FTSRC)pfr$(D)pfrobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pfrobjs.$(OBJ) : $(FTSRC)pfr$(D)pfrobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pfrobjs.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrobjs.c
-$(FTOBJ)psobjs.$(OBJ) : $(FTSRC)psaux$(D)psobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psobjs.$(OBJ) : $(FTSRC)psaux$(D)psobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psobjs.$(OBJ) $(C_) $(FTSRC)psaux$(D)psobjs.c
-$(FTOBJ)t1decode.$(OBJ) : $(FTSRC)psaux$(D)t1decode.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1decode.$(OBJ) : $(FTSRC)psaux$(D)t1decode.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1decode.$(OBJ) $(C_) $(FTSRC)psaux$(D)t1decode.c
-$(FTOBJ)t1cmap.$(OBJ) : $(FTSRC)psaux$(D)t1cmap.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1cmap.$(OBJ) : $(FTSRC)psaux$(D)t1cmap.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1cmap.$(OBJ) $(C_) $(FTSRC)psaux$(D)t1cmap.c
-$(FTOBJ)afmparse.$(OBJ) : $(FTSRC)psaux$(D)afmparse.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)afmparse.$(OBJ) : $(FTSRC)psaux$(D)afmparse.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)afmparse.$(OBJ) $(C_) $(FTSRC)psaux$(D)afmparse.c
-$(FTOBJ)psconv.$(OBJ) : $(FTSRC)psaux$(D)psconv.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psconv.$(OBJ) : $(FTSRC)psaux$(D)psconv.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psconv.$(OBJ) $(C_) $(FTSRC)psaux$(D)psconv.c
-$(FTOBJ)psauxmod.$(OBJ) : $(FTSRC)psaux$(D)psauxmod.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psauxmod.$(OBJ) : $(FTSRC)psaux$(D)psauxmod.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psauxmod.$(OBJ) $(C_) $(FTSRC)psaux$(D)psauxmod.c
-$(FTOBJ)psft.$(OBJ) : $(FTSRC)psaux$(D)psft.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psft.$(OBJ) : $(FTSRC)psaux$(D)psft.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psft.$(OBJ) $(C_) $(FTSRC)psaux$(D)psft.c
-$(FTOBJ)cffdecode.$(OBJ) : $(FTSRC)psaux$(D)cffdecode.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)cffdecode.$(OBJ) : $(FTSRC)psaux$(D)cffdecode.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)cffdecode.$(OBJ) $(C_) $(FTSRC)psaux$(D)cffdecode.c
-$(FTOBJ)psfont.$(OBJ) : $(FTSRC)psaux$(D)psfont.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psfont.$(OBJ) : $(FTSRC)psaux$(D)psfont.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psfont.$(OBJ) $(C_) $(FTSRC)psaux$(D)psfont.c
-$(FTOBJ)psblues.$(OBJ) : $(FTSRC)psaux$(D)psblues.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psblues.$(OBJ) : $(FTSRC)psaux$(D)psblues.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psblues.$(OBJ) $(C_) $(FTSRC)psaux$(D)psblues.c
-$(FTOBJ)psintrp.$(OBJ) : $(FTSRC)psaux$(D)psintrp.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psintrp.$(OBJ) : $(FTSRC)psaux$(D)psintrp.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psintrp.$(OBJ) $(C_) $(FTSRC)psaux$(D)psintrp.c
-$(FTOBJ)pserror.$(OBJ) : $(FTSRC)psaux$(D)pserror.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pserror.$(OBJ) : $(FTSRC)psaux$(D)pserror.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pserror.$(OBJ) $(C_) $(FTSRC)psaux$(D)pserror.c
-$(FTOBJ)psstack.$(OBJ) : $(FTSRC)psaux$(D)psstack.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psstack.$(OBJ) : $(FTSRC)psaux$(D)psstack.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psstack.$(OBJ) $(C_) $(FTSRC)psaux$(D)psstack.c
-$(FTOBJ)pshints.$(OBJ) : $(FTSRC)psaux$(D)pshints.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pshints.$(OBJ) : $(FTSRC)psaux$(D)pshints.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pshints.$(OBJ) $(C_) $(FTSRC)psaux$(D)pshints.c
-$(FTOBJ)psarrst.$(OBJ) : $(FTSRC)psaux$(D)psarrst.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psarrst.$(OBJ) : $(FTSRC)psaux$(D)psarrst.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psarrst.$(OBJ) $(C_) $(FTSRC)psaux$(D)psarrst.c
-$(FTOBJ)psread.$(OBJ) : $(FTSRC)psaux$(D)psread.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psread.$(OBJ) : $(FTSRC)psaux$(D)psread.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psread.$(OBJ) $(C_) $(FTSRC)psaux$(D)psread.c
-$(FTOBJ)pshrec.$(OBJ) : $(FTSRC)pshinter$(D)pshrec.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pshrec.$(OBJ) : $(FTSRC)pshinter$(D)pshrec.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pshrec.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshrec.c
-$(FTOBJ)pshglob.$(OBJ) : $(FTSRC)pshinter$(D)pshglob.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pshglob.$(OBJ) : $(FTSRC)pshinter$(D)pshglob.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pshglob.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshglob.c
-$(FTOBJ)pshmod.$(OBJ) : $(FTSRC)pshinter$(D)pshmod.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pshmod.$(OBJ) : $(FTSRC)pshinter$(D)pshmod.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pshmod.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshmod.c
-$(FTOBJ)pshalgo.$(OBJ) : $(FTSRC)pshinter$(D)pshalgo.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pshalgo.$(OBJ) : $(FTSRC)pshinter$(D)pshalgo.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pshalgo.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshalgo.c
-$(FTOBJ)psmodule.$(OBJ) : $(FTSRC)psnames$(D)psmodule.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)psmodule.$(OBJ) : $(FTSRC)psnames$(D)psmodule.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)psmodule.$(OBJ) $(C_) $(FTSRC)psnames$(D)psmodule.c
-$(FTOBJ)pspic.$(OBJ) : $(FTSRC)psnames$(D)pspic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)pspic.$(OBJ) $(C_) $(FTSRC)psnames$(D)pspic.c
-
-$(FTOBJ)ftraster.$(OBJ) : $(FTSRC)raster$(D)ftraster.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftraster.$(OBJ) : $(FTSRC)raster$(D)ftraster.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftraster.$(OBJ) $(C_) $(FTSRC)raster$(D)ftraster.c
-$(FTOBJ)ftrend1.$(OBJ) : $(FTSRC)raster$(D)ftrend1.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftrend1.$(OBJ) : $(FTSRC)raster$(D)ftrend1.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftrend1.$(OBJ) $(C_) $(FTSRC)raster$(D)ftrend1.c
-$(FTOBJ)rastpic.$(OBJ) : $(FTSRC)raster$(D)rastpic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)rastpic.$(OBJ) $(C_) $(FTSRC)raster$(D)rastpic.c
+$(FTOBJ)raster.$(OBJ) : $(FTSRC)raster$(D)raster.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
+ $(FTCC) $(FTO_)raster.$(OBJ) $(C_) $(FTSRC)raster$(D)raster.c
-$(FTOBJ)ftgrays.$(OBJ) : $(FTSRC)smooth$(D)ftgrays.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftgrays.$(OBJ) : $(FTSRC)smooth$(D)ftgrays.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftgrays.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftgrays.c
-$(FTOBJ)ftsmooth.$(OBJ) : $(FTSRC)smooth$(D)ftsmooth.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ftsmooth.$(OBJ) : $(FTSRC)smooth$(D)ftsmooth.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ftsmooth.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftsmooth.c
-$(FTOBJ)ftspic.$(OBJ) : $(FTSRC)smooth$(D)ftspic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)ftspic.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftspic.c
-
-$(FTOBJ)sfobjs.$(OBJ) : $(FTSRC)sfnt$(D)sfobjs.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)sfobjs.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfobjs.c
+$(FTOBJ)smooth.$(OBJ) : $(FTSRC)smooth$(D)smooth.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
+ $(FTCC) $(FTO_)smooth.$(OBJ) $(C_) $(FTSRC)smooth$(D)smooth.c
-$(FTOBJ)sfdriver.$(OBJ) : $(FTSRC)sfnt$(D)sfdriver.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)sfdriver.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfdriver.c
-
-$(FTOBJ)ttcmap.$(OBJ) : $(FTSRC)sfnt$(D)ttcmap.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)ttcmap.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttcmap.c
-
-$(FTOBJ)ttmtx.$(OBJ) : $(FTSRC)sfnt$(D)ttmtx.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttmtx.$(OBJ) : $(FTSRC)sfnt$(D)ttmtx.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttmtx.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttmtx.c
-$(FTOBJ)ttpost.$(OBJ) : $(FTSRC)sfnt$(D)ttpost.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttpost.$(OBJ) : $(FTSRC)sfnt$(D)ttpost.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttpost.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttpost.c
-$(FTOBJ)ft2ttload.$(OBJ) : $(FTSRC)sfnt$(D)ttload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ft2ttload.$(OBJ) : $(FTSRC)sfnt$(D)ttload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ft2ttload.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttload.c
-$(FTOBJ)ttsbit.$(OBJ) : $(FTSRC)sfnt$(D)ttsbit.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttsbit.$(OBJ) : $(FTSRC)sfnt$(D)ttsbit.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttsbit.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttsbit.c
-$(FTOBJ)ttkern.$(OBJ) : $(FTSRC)sfnt$(D)ttkern.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttkern.$(OBJ) : $(FTSRC)sfnt$(D)ttkern.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttkern.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttkern.c
-$(FTOBJ)ttbdf.$(OBJ) : $(FTSRC)sfnt$(D)ttbdf.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttbdf.$(OBJ) : $(FTSRC)sfnt$(D)ttbdf.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttbdf.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttbdf.c
-$(FTOBJ)sfntpic.$(OBJ) : $(FTSRC)sfnt$(D)sfntpic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)sfntpic.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfntpic.c
+$(FTOBJ)sfnt.$(OBJ) : $(FTSRC)sfnt$(D)sfnt.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
+ $(FTCC) $(FTO_)sfnt.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfnt.c
-$(FTOBJ)pngshim.$(OBJ) : $(FTSRC)sfnt$(D)pngshim.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)pngshim.$(OBJ) : $(FTSRC)sfnt$(D)pngshim.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)pngshim.$(OBJ) $(C_) $(FTSRC)sfnt$(D)pngshim.c
-$(FTOBJ)ttdriver.$(OBJ) : $(FTSRC)truetype$(D)ttdriver.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttcpal.$(OBJ) : $(FTSRC)sfnt$(D)ttcpal.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
+ $(FTCC) $(FTO_)ttcpal.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttcpal.c
+
+$(FTOBJ)ttdriver.$(OBJ) : $(FTSRC)truetype$(D)ttdriver.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttdriver.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttdriver.c
-$(FTOBJ)ft2ttobjs.$(OBJ) : $(FTSRC)truetype$(D)ttobjs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ft2ttobjs.$(OBJ) : $(FTSRC)truetype$(D)ttobjs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ft2ttobjs.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttobjs.c
-$(FTOBJ)ttpload.$(OBJ) : $(FTSRC)truetype$(D)ttpload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttpload.$(OBJ) : $(FTSRC)truetype$(D)ttpload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttpload.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttpload.c
-$(FTOBJ)ttgload.$(OBJ) : $(FTSRC)truetype$(D)ttgload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttgload.$(OBJ) : $(FTSRC)truetype$(D)ttgload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttgload.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttgload.c
-$(FTOBJ)ft2ttinterp.$(OBJ) : $(FTSRC)truetype$(D)ttinterp.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ft2ttinterp.$(OBJ) : $(FTSRC)truetype$(D)ttinterp.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ft2ttinterp.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttinterp.c
-$(FTOBJ)ttgxvar.$(OBJ) : $(FTSRC)truetype$(D)ttgxvar.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttgxvar.$(OBJ) : $(FTSRC)truetype$(D)ttgxvar.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttgxvar.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttgxvar.c
-$(FTOBJ)ttpic.$(OBJ) : $(FTSRC)truetype$(D)ttpic.c $(FT_MAK) $(MAKEDIRS)
- $(FTCC) $(FTO_)ttpic.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttpic.c
+$(FTOBJ)truetype.$(OBJ) : $(FTSRC)truetype$(D)truetype.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
+ $(FTCC) $(FTO_)truetype.$(OBJ) $(C_) $(FTSRC)truetype$(D)truetype.c
-$(FTOBJ)ttsubpix.$(OBJ) : $(FTSRC)truetype$(D)ttsubpix.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)ttsubpix.$(OBJ) : $(FTSRC)truetype$(D)ttsubpix.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)ttsubpix.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttsubpix.c
-$(FTOBJ)t1afm.$(OBJ) : $(FTSRC)type1$(D)t1afm.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1afm.$(OBJ) : $(FTSRC)type1$(D)t1afm.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1afm.$(OBJ) $(C_) $(FTSRC)type1$(D)t1afm.c
-$(FTOBJ)t1driver.$(OBJ) : $(FTSRC)type1$(D)t1driver.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1driver.$(OBJ) : $(FTSRC)type1$(D)t1driver.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1driver.$(OBJ) $(C_) $(FTSRC)type1$(D)t1driver.c
-$(FTOBJ)t1objs.$(OBJ) : $(FTSRC)type1$(D)t1objs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1objs.$(OBJ) : $(FTSRC)type1$(D)t1objs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1objs.$(OBJ) $(C_) $(FTSRC)type1$(D)t1objs.c
-$(FTOBJ)t1load.$(OBJ) : $(FTSRC)type1$(D)t1load.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1load.$(OBJ) : $(FTSRC)type1$(D)t1load.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1load.$(OBJ) $(C_) $(FTSRC)type1$(D)t1load.c
-$(FTOBJ)t1gload.$(OBJ) : $(FTSRC)type1$(D)t1gload.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1gload.$(OBJ) : $(FTSRC)type1$(D)t1gload.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1gload.$(OBJ) $(C_) $(FTSRC)type1$(D)t1gload.c
-$(FTOBJ)t1parse.$(OBJ) : $(FTSRC)type1$(D)t1parse.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t1parse.$(OBJ) : $(FTSRC)type1$(D)t1parse.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t1parse.$(OBJ) $(C_) $(FTSRC)type1$(D)t1parse.c
-$(FTOBJ)t42objs.$(OBJ) : $(FTSRC)type42$(D)t42objs.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t42objs.$(OBJ) : $(FTSRC)type42$(D)t42objs.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t42objs.$(OBJ) $(C_) $(FTSRC)type42$(D)t42objs.c
-$(FTOBJ)t42parse.$(OBJ) : $(FTSRC)type42$(D)t42parse.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t42parse.$(OBJ) : $(FTSRC)type42$(D)t42parse.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t42parse.$(OBJ) $(C_) $(FTSRC)type42$(D)t42parse.c
-$(FTOBJ)t42drivr.$(OBJ) : $(FTSRC)type42$(D)t42drivr.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)t42drivr.$(OBJ) : $(FTSRC)type42$(D)t42drivr.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)t42drivr.$(OBJ) $(C_) $(FTSRC)type42$(D)t42drivr.c
-$(FTOBJ)winfnt.$(OBJ) : $(FTSRC)winfonts$(D)winfnt.c $(FT_MAK) $(MAKEDIRS)
+$(FTOBJ)winfnt.$(OBJ) : $(FTSRC)winfonts$(D)winfnt.c $(FT_MAK) $(GENFTCONFH) $(MAKEDIRS)
$(FTCC) $(FTO_)winfnt.$(OBJ) $(C_) $(FTSRC)winfonts$(D)winfnt.c
diff --git a/base/gdbflags.h b/base/gdbflags.h
index 9d6376f6..1ac6c586 100644
--- a/base/gdbflags.h
+++ b/base/gdbflags.h
@@ -31,7 +31,7 @@ FLAG(epo_disable, 4, 0, "Disable Erasepage Optimization (completely)"),
FLAG(epo_details, 5, 0, "Erasepage Optimization tracing"),
FLAG(epo_install_only, 6, 0, "Erasepage Optimization install only (for debugging subclass)"),
FLAG(init_details, 7, 0, "Language initialisation (detail)"),
-UNUSED(8)
+FLAG(overprint, 8, 0, "Overprint"),
UNUSED(9)
UNUSED(10)
UNUSED(11)
diff --git a/base/gdevdbit.c b/base/gdevdbit.c
index 8b5fa2f9..faeac5f6 100644
--- a/base/gdevdbit.c
+++ b/base/gdevdbit.c
@@ -194,14 +194,12 @@ gx_default_copy_alpha_hl_color(gx_device * dev, const byte * data, int data_x,
byte *src_planes[GS_CLIENT_COLOR_MAX_COMPONENTS];
gs_int_rect gb_rect;
int byte_depth;
- gx_color_index mask;
int shift, word_width;
gx_color_value *composite;
byte *gb_buff;
int x_curr, w_curr, gb_buff_start;
byte_depth = bpp / ncomps;
- mask = ((gx_color_index)1 << byte_depth) - 1;
shift = 16 - byte_depth;
word_width = byte_depth >> 3;
@@ -292,7 +290,7 @@ gx_default_copy_alpha_hl_color(gx_device * dev, const byte * data, int data_x,
return code;
}
/* reset ourselves */
- gb_buff_start = gb_buff_start + w_curr;
+ gb_buff_start = gb_buff_start + w_curr * word_width;
w_curr = 0;
x_curr = rx + 1;
} else {
@@ -330,9 +328,9 @@ gx_default_copy_alpha_hl_color(gx_device * dev, const byte * data, int data_x,
byte *ptr = ((src_planes[k]) + (sx - data_x) * word_width);
switch (word_width) {
case 2:
- *ptr++ = composite[k] & mask;
+ *ptr++ = composite[k] >> 8;
case 1:
- *ptr++ = (composite[k] >> shift) & mask;
+ *ptr++ = composite[k] >> shift;
}
}
} /* else on alpha != 0 */
diff --git a/base/gdevdevn.c b/base/gdevdevn.c
index d0305610..3b019d6f 100644
--- a/base/gdevdevn.c
+++ b/base/gdevdevn.c
@@ -268,7 +268,7 @@ devn_get_color_comp_index(gx_device * dev, gs_devn_params * pdevn_params,
{
int num_order = pdevn_params->num_separation_order_names;
int color_component_number = 0;
- int max_spot_colors = GX_DEVICE_MAX_SEPARATIONS - MAX_DEVICE_PROCESS_COLORS;
+ int max_spot_colors = GX_DEVICE_MAX_SEPARATIONS - pdevn_params->num_std_colorant_names;
/*
* Check if the component is in either the process color model list
@@ -318,15 +318,19 @@ devn_get_color_comp_index(gx_device * dev, gs_devn_params * pdevn_params,
* Check if we have room for another spot colorant.
*/
if (auto_spot_colors == ENABLE_AUTO_SPOT_COLORS)
- max_spot_colors = dev->color_info.max_components -
- pdevn_params->num_std_colorant_names;
+ /* limit max_spot_colors to what the device can handle given max_components */
+ max_spot_colors = min(max_spot_colors,
+ dev->color_info.max_components - pdevn_params->num_std_colorant_names);
if (pdevn_params->separations.num_separations < max_spot_colors) {
byte * sep_name;
gs_separations * separations = &pdevn_params->separations;
int sep_num = separations->num_separations++;
/* We have a new spot colorant - put in stable memory to avoid "restore" */
sep_name = gs_alloc_bytes(dev->memory->stable_memory, name_size, "devn_get_color_comp_index");
-
+ if (sep_name == NULL) {
+ separations->num_separations--; /* we didn't add it */
+ return -1;
+ }
memcpy(sep_name, pname, name_size);
separations->names[sep_num].size = name_size;
separations->names[sep_num].data = sep_name;
@@ -360,14 +364,17 @@ devn_get_params(gx_device * pdev, gs_param_list * plist,
gs_param_string_array scna;
gs_param_string_array sona;
gs_param_int_array equiv_cmyk;
- int equiv_elements[5 * (GX_DEVICE_MAX_SEPARATIONS - MAX_DEVICE_PROCESS_COLORS)] = { 0 }; /* 5 * max_spot_colors */
+ /* there are 5 ints per colorant in equiv_elements: a valid flag and an int for C, M, Y and K */
+ int equiv_elements[5 * GX_DEVICE_MAX_SEPARATIONS] = { 0 }; /* 5 * max_colors */
+ /* limit in case num_separations in pdevn_params exceeds what is expected. */
+ int num_separations = min(pdevn_params->separations.num_separations, sizeof(equiv_elements)/(5*sizeof(int)));
set_param_array(scna, NULL, 0);
set_param_array(sona, NULL, 0);
if (pequiv_colors != NULL) {
- for (spot_num = 0; spot_num < pdevn_params->separations.num_separations; spot_num++) {
+ for (spot_num = 0; spot_num < num_separations; spot_num++) {
equiv_elements[i++] = pequiv_colors->color[spot_num].color_info_valid ? 1 : 0;
equiv_elements[i++] = pequiv_colors->color[spot_num].c;
equiv_elements[i++] = pequiv_colors->color[spot_num].m;
@@ -444,7 +451,7 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
{
break;
} END_ARRAY_PARAM(sona, sone);
- if (sona.data != 0 && sona.size > GX_DEVICE_COLOR_MAX_COMPONENTS) {
+ if (sona.data != 0 && sona.size > pdev->color_info.max_components) {
param_signal_error(plist, "SeparationOrder", gs_error_rangecheck);
return_error(gs_error_rangecheck);
}
@@ -455,7 +462,7 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
{
break;
} END_ARRAY_PARAM(scna, scne);
- if (scna.data != 0 && scna.size > GX_DEVICE_MAX_SEPARATIONS) {
+ if (scna.data != 0 && scna.size > pdev->color_info.max_components) {
param_signal_error(plist, "SeparationColorNames", gs_error_rangecheck);
return_error(gs_error_rangecheck);
}
@@ -465,6 +472,10 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
{
break;
} END_ARRAY_PARAM(equiv_cmyk, equiv_cmyk_e);
+ if (equiv_cmyk.data != 0 && scna.size > pdev->color_info.max_components) {
+ param_signal_error(plist, "SeparationColorNames", gs_error_rangecheck);
+ return_error(gs_error_rangecheck);
+ }
/* Separations are only valid with a subrtractive color model */
if (pdev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) {
@@ -486,6 +497,10 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
/* We have a new separation */
sep_name = (byte *)gs_alloc_bytes(pdev->memory,
name_size, "devicen_put_params_no_sep_order");
+ if (sep_name == NULL) {
+ param_signal_error(plist, "SeparationColorNames", gs_error_VMerror);
+ return_error(gs_error_VMerror);
+ }
memcpy(sep_name, scna.data[i].data, name_size);
pdevn_params->separations.names[num_spot].size = name_size;
pdevn_params->separations.names[num_spot].data = sep_name;
@@ -495,9 +510,10 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
pequiv_colors->all_color_info_valid = false;
}
num_spot++;
+ num_spot_changed = true;
}
}
- num_spot_changed = true;
+
for (i = pdevn_params->separations.num_separations; i < num_spot; i++)
pdevn_params->separation_order_map[i + pdevn_params->num_std_colorant_names] =
i + pdevn_params->num_std_colorant_names;
@@ -591,8 +607,8 @@ devn_put_params(gx_device * pdev, gs_param_list * plist,
param_signal_error(plist, "PageSpotColors", gs_error_rangecheck);
return_error(gs_error_rangecheck);
}
- if (page_spot_colors > GX_DEVICE_COLOR_MAX_COMPONENTS - MAX_DEVICE_PROCESS_COLORS)
- page_spot_colors = GX_DEVICE_COLOR_MAX_COMPONENTS - MAX_DEVICE_PROCESS_COLORS;
+ if (page_spot_colors > pdev->color_info.max_components - pdevn_params->num_std_colorant_names)
+ page_spot_colors = pdev->color_info.max_components - pdevn_params->num_std_colorant_names;
/* Need to leave room for the process colors in GX_DEVICE_COLOR_MAX_COMPONENTS */
}
/*
@@ -700,6 +716,9 @@ devn_copy_params(gx_device * psrcdev, gx_device * pdesdev)
int name_size = src_devn_params->separations.names[k].size;
sep_name = (byte *)gs_alloc_bytes(pdesdev->memory->stable_memory,
name_size, "devn_copy_params");
+ if (sep_name == NULL) {
+ return_error(gs_error_VMerror);
+ }
memcpy(sep_name, src_devn_params->separations.names[k].data, name_size);
des_devn_params->separations.names[k].size = name_size;
des_devn_params->separations.names[k].data = sep_name;
@@ -716,6 +735,9 @@ devn_copy_params(gx_device * psrcdev, gx_device * pdesdev)
int name_size = src_devn_params->pdf14_separations.names[k].size;
sep_name = (byte *)gs_alloc_bytes(pdesdev->memory->stable_memory,
name_size, "devn_copy_params");
+ if (sep_name == NULL) {
+ return_error(gs_error_VMerror);
+ }
memcpy(sep_name, src_devn_params->pdf14_separations.names[k].data,
name_size);
des_devn_params->pdf14_separations.names[k].size = name_size;
@@ -1054,8 +1076,8 @@ const gx_devn_prn_device gs_devicen_device =
gx_devn_prn_device_body(devicen_procs, "devicen", 4, GX_CINFO_POLARITY_SUBTRACTIVE, 32, 255, 255, "DeviceCMYK"),
/* DeviceN device specific parameters */
{ 8, /* Bits per color - must match ncomp, depth, etc. above */
- NULL, /* No names for standard DeviceN color model */
- 0, /* No standard colorants for DeviceN */
+ DeviceCMYKComponents, /* Names of color model colorants */
+ 4, /* Number colorants for CMYK */
0, /* MaxSeparations has not been specified */
-1, /* PageSpotColors has not been specified */
{0}, /* SeparationNames */
@@ -1382,7 +1404,11 @@ spotcmyk_print_page(gx_device_printer * pdev, gp_file * prn_stream)
/* Open the output files for the spot colors */
for(i = 0; i < nspot; i++) {
gs_sprintf(spotname, "%ss%d", pdevn->fname, i);
+ code = gs_add_control_path(pdev->memory, gs_permit_file_writing, spotname);
+ if (code < 0)
+ goto prn_done;
spot_file[i] = gp_fopen(pdev->memory, spotname, "wb");
+ (void)gs_remove_control_path(pdev->memory, gs_permit_file_writing, spotname);
if (spot_file[i] == NULL) {
code = gs_note_error(gs_error_VMerror);
goto prn_done;
@@ -1391,7 +1417,9 @@ spotcmyk_print_page(gx_device_printer * pdev, gp_file * prn_stream)
/* Now create the output bit image files */
for (; lnum < bottom; ++lnum) {
- gdev_prn_get_bits(pdev, lnum, in, &data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &data);
+ if (code < 0)
+ goto prn_done;
/* Now put the pcm data into the output file */
if (npcmcolors) {
first_bit = bpc * (ncomp - npcmcolors);
@@ -1755,27 +1783,39 @@ devn_write_pcx_file(gx_device_printer * pdev, char * filename, int ncomp,
if (outname == NULL) {
code = gs_note_error(gs_error_VMerror);
- goto done;
+ goto done;
}
+ code = gs_add_control_path(pdev->memory, gs_permit_file_reading, filename);
+ if (code < 0)
+ goto done;
+
in = gp_fopen(pdev->memory, filename, "rb");
if (!in) {
code = gs_note_error(gs_error_invalidfileaccess);
- goto done;
+ goto done;
}
gs_sprintf(outname, "%s.pcx", filename);
+ code = gs_add_control_path(pdev->memory, gs_permit_file_writing, outname);
+ if (code < 0)
+ goto done;
out = gp_fopen(pdev->memory, outname, "wb");
if (!out) {
code = gs_note_error(gs_error_invalidfileaccess);
- goto done;
+ goto done;
}
+ if (ncomp == 4 && bpc == 8) {
+ ncomp = 3; /* we will convert 32-bit to 24-bit RGB */
+ }
planar = devn_setup_pcx_header(pdev, &header, ncomp, bpc);
code = devn_pcx_write_page(pdev, in, linesize, out, &header, planar, depth);
if (code >= 0)
code = devn_finish_pcx_file(pdev, out, &header, ncomp, bpc);
done:
+ (void)gs_remove_control_path(pdev->memory, gs_permit_file_reading, filename);
+ (void)gs_remove_control_path(pdev->memory, gs_permit_file_writing, outname);
if (in)
gp_fclose(in);
if (out)
@@ -1799,12 +1839,22 @@ devn_pcx_write_page(gx_device_printer * pdev, gp_file * infile, int linesize, gp
int height = pdev->height;
uint lsize = raster + rsize;
byte *line = gs_alloc_bytes(pdev->memory, lsize, "pcx file buffer");
+ byte *rgb_buff = NULL;
byte *plane = line + raster;
+ bool convert_to_rgb = false;
int y;
int code = 0; /* return code */
if (line == 0) /* can't allocate line buffer */
return_error(gs_error_VMerror);
+ if (pdev->color_info.num_components == 4 && depth == 32) {
+ rgb_buff = gs_alloc_bytes(pdev->memory, lsize, "pcx_rgb_buff");
+ if (rgb_buff == 0) /* can't allocate line buffer */
+ return_error(gs_error_VMerror);
+ raster = (raster * 3) / 4; /* will be rounded up to even later */
+ depth = 24; /* we will be writing 24-bit rgb */
+ convert_to_rgb = true;
+ }
/* Fill in the other variable entries in the header struct. */
@@ -1829,6 +1879,21 @@ devn_pcx_write_page(gx_device_printer * pdev, gp_file * infile, int linesize, gp
code = gp_fread(line, sizeof(byte), linesize, infile);
if (code < 0)
break;
+ /* If needed, convert to rgb */
+ if (convert_to_rgb) {
+ int i;
+ byte *row_in = line;
+
+ /* Transform the data. */
+ row = rgb_buff; /* adjust to converted output buffer */
+ for (i=0; i < linesize; i += 4) {
+ *row++ = ((255 - row_in[0]) * (255 - row_in[3])) / 255;
+ *row++ = ((255 - row_in[1]) * (255 - row_in[3])) / 255;
+ *row++ = ((255 - row_in[2]) * (255 - row_in[3])) / 255;
+ row_in += 4;
+ }
+ row = rgb_buff; /* adjust to converted output buffer */
+ }
end = row + raster;
if (!planar) { /* Just write the bits. */
if (raster & 1) { /* Round to even, with predictable padding. */
@@ -1891,6 +1956,8 @@ devn_pcx_write_page(gx_device_printer * pdev, gp_file * infile, int linesize, gp
}
pcx_done:
+ if (rgb_buff != NULL)
+ gs_free_object(pdev->memory, rgb_buff, "pcx_rgb_buff");
gs_free_object(pdev->memory, line, "pcx file buffer");
return code;
diff --git a/base/gdevdevn.h b/base/gdevdevn.h
index c153536f..3f50c996 100644
--- a/base/gdevdevn.h
+++ b/base/gdevdevn.h
@@ -25,14 +25,6 @@
#define LIMIT_TO_ICC 1
/*
- * Define the maximum number of process model colorants. Currently we only
- * have code for DeviceGray, DeviceRGB, and DeviceCMYK. Thus this value
- * only needs to be 4. However we are allowing for a future hexachrome
- * device. (This value does not include spot colors. See previous value.)
- */
-#define MAX_DEVICE_PROCESS_COLORS 6
-
-/*
* Type definitions associated with the fixed color model names.
*/
typedef const char * fixed_colorant_name;
@@ -57,7 +49,7 @@ struct gs_separations_s {
/*
* Type for holding a separation order map
*/
-typedef int gs_separation_map[GX_DEVICE_MAX_SEPARATIONS + MAX_DEVICE_PROCESS_COLORS];
+typedef int gs_separation_map[GX_DEVICE_MAX_SEPARATIONS];
typedef struct gs_devn_params_s {
/*
diff --git a/base/gdevdflt.c b/base/gdevdflt.c
index f1d1bb88..8d342995 100644
--- a/base/gdevdflt.c
+++ b/base/gdevdflt.c
@@ -767,6 +767,7 @@ gx_device_fill_in_procs(register gx_device * dev)
fill_dev_proc(dev, copy_planes, gx_default_copy_planes);
fill_dev_proc(dev, process_page, gx_default_process_page);
fill_dev_proc(dev, transform_pixel_region, gx_default_transform_pixel_region);
+ fill_dev_proc(dev, fill_stroke_path, gx_default_fill_stroke_path);
}
@@ -1062,6 +1063,8 @@ gx_default_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
/* Just ignore information about events */
case gxdso_event_info:
return 0;
+ case gxdso_overprint_active:
+ return 0;
}
return_error(gs_error_undefined);
}
@@ -1315,6 +1318,7 @@ int gx_copy_device_procs(gx_device *dest, gx_device *src, gx_device *prototype)
set_dev_proc(dest, strip_tile_rect_devn, dev_proc(prototype, strip_tile_rect_devn));
set_dev_proc(dest, process_page, dev_proc(prototype, process_page));
set_dev_proc(dest, transform_pixel_region, dev_proc(prototype, transform_pixel_region));
+ set_dev_proc(dest, fill_stroke_path, dev_proc(prototype, fill_stroke_path));
/*
* We absolutely must set the 'set_graphics_type_tag' to the default subclass one
@@ -1876,6 +1880,11 @@ transform_pixel_region_render_portrait(gx_device *dev, gx_default_transform_pixe
}
out = state->line;
+ if (minx < 0)
+ minx = 0;
+ if (maxx > dev->width)
+ maxx = dev->width;
+
if (pending_left < minx)
pending_left = minx;
else if (pending_left > maxx)
@@ -2050,7 +2059,7 @@ transform_pixel_region_render_landscape(gx_device *dev, gx_default_transform_pix
goto err;
data = run;
}
- return (code < 0 ? code : 1);
+ return 1;
/* Save position if error, in case we resume. */
err:
buffer[0] = run;
@@ -2115,10 +2124,11 @@ transform_pixel_region_render_skew(gx_device *dev, gx_default_transform_pixel_re
prev = data;
data += spp;
}
- return (code < 0 ? code : 1);
+ return 1;
/* Save position if error, in case we resume. */
err:
- buffer[0] = prev;
+ /* Only set buffer[0] if we've managed to set prev to something valid. */
+ if (prev != &initial_run[0]) buffer[0] = prev;
return code;
}
diff --git a/base/gdevdrop.c b/base/gdevdrop.c
index dfc6945e..dcd3f659 100644
--- a/base/gdevdrop.c
+++ b/base/gdevdrop.c
@@ -1561,7 +1561,6 @@ template_mem_transform_pixel_region_render_landscape(gx_device *dev, mem_transfo
int h = state->h;
const byte *data = buffer[0] + data_x * spp;
const byte *bufend = NULL;
- int code = 0;
const byte *run;
int k;
gx_color_value *conc = &cmapper->conc[0];
@@ -1648,15 +1647,9 @@ template_mem_transform_pixel_region_render_landscape(gx_device *dev, mem_transfo
}
}
}
- if (code < 0)
- goto err;
data = run;
}
- return (code < 0 ? code : 1);
- /* Save position if error, in case we resume. */
-err:
- buffer[0] = run;
- return code;
+ return 1;
}
static int
diff --git a/base/gdevepo.c b/base/gdevepo.c
index e57c1db9..45363781 100644
--- a/base/gdevepo.c
+++ b/base/gdevepo.c
@@ -81,6 +81,7 @@ static dev_proc_copy_planes(epo_copy_planes);
static dev_proc_copy_alpha_hl_color(epo_copy_alpha_hl_color);
static dev_proc_process_page(epo_process_page);
static dev_proc_transform_pixel_region(epo_transform_pixel_region);
+static dev_proc_fill_stroke_path(epo_fill_stroke_path);
/* The device prototype */
#define MAX_COORD (max_int_in_fixed - 1000)
@@ -184,7 +185,8 @@ gx_device_epo gs_epo_device =
default_subclass_strip_tile_rect_devn,
epo_copy_alpha_hl_color,
epo_process_page,
- epo_transform_pixel_region
+ epo_transform_pixel_region,
+ epo_fill_stroke_path,
}
};
@@ -679,6 +681,19 @@ int epo_process_page(gx_device *dev, gx_process_page_options_t *options)
return dev_proc(dev, process_page)(dev, options);
}
+int epo_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ int code = epo_handle_erase_page(dev);
+
+ if (code != 0)
+ return code;
+ return dev_proc(dev, fill_stroke_path)(dev, pgs, ppath, fill_params, pdcolor_fill,
+ stroke_params, pdcolor_stroke, pcpath);
+}
+
int epo_transform_pixel_region(gx_device *dev, transform_pixel_region_reason reason, transform_pixel_region_data *data)
{
int code = epo_handle_erase_page(dev);
diff --git a/base/gdevflp.c b/base/gdevflp.c
index f4b9a847..0ad19656 100644
--- a/base/gdevflp.c
+++ b/base/gdevflp.c
@@ -106,6 +106,7 @@ static dev_proc_strip_tile_rect_devn(flp_strip_tile_rect_devn);
static dev_proc_copy_alpha_hl_color(flp_copy_alpha_hl_color);
static dev_proc_process_page(flp_process_page);
static dev_proc_transform_pixel_region(flp_transform_pixel_region);
+static dev_proc_fill_stroke_path(flp_fill_stroke_path);
/* The device prototype */
#define MAX_COORD (max_int_in_fixed - 1000)
@@ -208,7 +209,9 @@ gx_device_flp gs_flp_device =
flp_strip_copy_rop2,
flp_strip_tile_rect_devn,
flp_copy_alpha_hl_color,
- flp_process_page
+ flp_process_page,
+ flp_transform_pixel_region,
+ flp_fill_stroke_path,
}
};
@@ -1213,6 +1216,21 @@ int flp_process_page(gx_device *dev, gx_process_page_options_t *options)
return 0;
}
+int flp_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ int code = SkipPage(dev);
+
+ if (code < 0)
+ return code;
+ if (!code)
+ return default_subclass_fill_stroke_path(dev, pgs, ppath, fill_params, pdcolor_fill,
+ stroke_params, pdcolor_stroke, pcpath);
+ return 0;
+}
+
int flp_transform_pixel_region(gx_device *dev, transform_pixel_region_reason reason, transform_pixel_region_data *data)
{
int code = SkipPage(dev);
diff --git a/base/gdevmem.h b/base/gdevmem.h
index c973ab40..69cb6d0f 100644
--- a/base/gdevmem.h
+++ b/base/gdevmem.h
@@ -203,7 +203,8 @@ dev_proc_transform_pixel_region(mem_transform_pixel_region);
NULL, /* strip_tile_rect_devn */\
NULL, /* copy_alpha_hl_color */\
NULL, /* process_page */\
- mem_transform_pixel_region\
+ mem_transform_pixel_region,\
+ NULL, /* fill_stroke_path */\
},\
0, /* target */\
mem_device_init_private /* see gxdevmem.h */\
diff --git a/base/gdevmpla.c b/base/gdevmpla.c
index 3bcbf491..ae805f4e 100644
--- a/base/gdevmpla.c
+++ b/base/gdevmpla.c
@@ -1718,6 +1718,8 @@ plane_strip_copy_rop(gx_device_memory * mdev,
* so ensure we have the right ones in there. */
set_dev_proc(mdev, get_bits_rectangle, dev_proc(mdproto, get_bits_rectangle));
set_dev_proc(mdev, fill_rectangle, dev_proc(mdproto, fill_rectangle));
+ /* mdev->color_info.depth is restored by MEM_RESTORE_PARAMS below. */
+ mdev->color_info.depth = mdev->planes[plane].depth;
code = dev_proc(mdproto, strip_copy_rop)((gx_device *)mdev, sdata, sourcex, sraster,
id, scolors, textures, tcolors,
x, y, width, height,
diff --git a/base/gdevmplt.c b/base/gdevmplt.c
index d10f194a..c102639f 100644
--- a/base/gdevmplt.c
+++ b/base/gdevmplt.c
@@ -152,7 +152,8 @@ gx_device_mplt gs_pcl_mono_palette_device =
default_subclass_strip_tile_rect_devn,
default_subclass_copy_alpha_hl_color,
default_subclass_process_page,
- default_subclass_transform_pixel_region
+ default_subclass_transform_pixel_region,
+ default_subclass_fill_stroke_path,
}
};
diff --git a/base/gdevnfwd.c b/base/gdevnfwd.c
index a78d3038..4174c957 100644
--- a/base/gdevnfwd.c
+++ b/base/gdevnfwd.c
@@ -117,7 +117,9 @@ gx_device_forward_fill_in_procs(register gx_device_forward * dev)
fill_dev_proc(dev, set_graphics_type_tag, gx_forward_set_graphics_type_tag);
fill_dev_proc(dev, strip_copy_rop2, gx_forward_strip_copy_rop2);
fill_dev_proc(dev, strip_tile_rect_devn, gx_forward_strip_tile_rect_devn);
+ fill_dev_proc(dev, strip_tile_rect_devn, gx_forward_strip_tile_rect_devn);
fill_dev_proc(dev, transform_pixel_region, gx_forward_transform_pixel_region);
+ fill_dev_proc(dev, fill_stroke_path, gx_forward_fill_stroke_path);
gx_device_fill_in_procs((gx_device *) dev);
}
@@ -450,6 +452,24 @@ gx_forward_stroke_path(gx_device * dev, const gs_gstate * pgs,
}
int
+gx_forward_fill_stroke_path(gx_device * dev, const gs_gstate * pgs,
+ gx_path * ppath,
+ const gx_fill_params * params_fill,
+ const gx_drawing_color * pdcolor_fill,
+ const gx_stroke_params * params_stroke,
+ const gx_drawing_color * pdcolor_stroke,
+ const gx_clip_path * pcpath)
+{
+ gx_device_forward * const fdev = (gx_device_forward *)dev;
+ gx_device *tdev = fdev->target;
+ dev_proc_fill_stroke_path((*proc)) =
+ (tdev == 0 ? (tdev = dev, gx_default_fill_stroke_path) :
+ dev_proc(tdev, fill_stroke_path));
+
+ return proc(tdev, pgs, ppath, params_fill, pdcolor_fill, params_stroke, pdcolor_stroke, pcpath);
+}
+
+int
gx_forward_fill_mask(gx_device * dev,
const byte * data, int dx, int raster, gx_bitmap_id id,
int x, int y, int w, int h,
diff --git a/base/gdevoflt.c b/base/gdevoflt.c
index f0818064..a8962e7c 100644
--- a/base/gdevoflt.c
+++ b/base/gdevoflt.c
@@ -67,6 +67,7 @@ static dev_proc_fill_linear_color_triangle(obj_filter_fill_linear_color_triangle
static dev_proc_put_image(obj_filter_put_image);
static dev_proc_strip_copy_rop2(obj_filter_strip_copy_rop2);
static dev_proc_strip_tile_rect_devn(obj_filter_strip_tile_rect_devn);
+static dev_proc_fill_stroke_path(obj_filter_fill_stroke_path);
/* The device prototype */
#define MAX_COORD (max_int_in_fixed - 1000)
@@ -174,7 +175,8 @@ gx_device_obj_filter gs_obj_filter_device =
obj_filter_strip_tile_rect_devn,
default_subclass_copy_alpha_hl_color,
default_subclass_process_page,
- default_subclass_transform_pixel_region
+ default_subclass_transform_pixel_region,
+ obj_filter_fill_stroke_path,
}
};
@@ -222,6 +224,16 @@ int obj_filter_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
return 0;
}
+int obj_filter_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ if ((dev->ObjectFilter & FILTERVECTOR) == 0)
+ return default_subclass_fill_stroke_path(dev, pgs, ppath, fill_params, pdcolor_fill, stroke_params, pdcolor_stroke, pcpath);
+ return 0;
+}
+
int obj_filter_fill_mask(gx_device *dev, const byte *data, int data_x, int raster, gx_bitmap_id id,
int x, int y, int width, int height,
const gx_drawing_color *pdcolor, int depth,
diff --git a/base/gdevp14.c b/base/gdevp14.c
index 993ad57b..2d11caea 100644
--- a/base/gdevp14.c
+++ b/base/gdevp14.c
@@ -15,6 +15,7 @@
/* Compositing devices for implementing PDF 1.4 imaging model */
+#include "assert_.h"
#include "math_.h"
#include "memory_.h"
#include "gx.h"
@@ -37,6 +38,9 @@
#include "gdevmem.h"
#include "gdevp14.h"
#include "gdevprn.h" /* for prn_device structures */
+#include "gdevppla.h" /* for gdev_prn_open_planar */
+#include "gdevdevnprn.h"
+#include "gscdevn.h"
#include "gsovrc.h"
#include "gxcmap.h"
#include "gscolor1.h"
@@ -179,6 +183,7 @@ dev_proc_decode_color(pdf14_decode_color16);
static dev_proc_fill_rectangle(pdf14_fill_rectangle);
static dev_proc_fill_rectangle_hl_color(pdf14_fill_rectangle_hl_color);
static dev_proc_fill_path(pdf14_fill_path);
+static dev_proc_fill_stroke_path(pdf14_fill_stroke_path);
static dev_proc_copy_mono(pdf14_copy_mono);
static dev_proc_fill_mask(pdf14_fill_mask);
static dev_proc_stroke_path(pdf14_stroke_path);
@@ -280,7 +285,10 @@ static const gx_color_map_procs *
gx_forward_set_graphics_type_tag, /* set_graphics_type_tag */\
NULL, /* strip_copy_rop2 */\
NULL, /* strip_tile_rect_devn */\
- pdf14_copy_alpha_hl_color /* copy_alpha_hl_color */\
+ pdf14_copy_alpha_hl_color, /* copy_alpha_hl_color */\
+ NULL, /* process_page */\
+ NULL, /* transform_pixel_region */\
+ pdf14_fill_stroke_path, /* fill_stroke */\
}
static const gx_device_procs pdf14_Gray_procs =
@@ -584,6 +592,10 @@ const pdf14_device gs_pdf14_custom_device = {
/* are set from the target device: width, height, xdpi, ydpi, MaxBitmap. */
static dev_proc_print_page(no_print_page);
+static dev_proc_ret_devn_params(pdf14_accum_ret_devn_params);
+static dev_proc_get_color_comp_index(pdf14_accum_get_color_comp_index);
+static dev_proc_get_color_mapping_procs(pdf14_accum_get_color_mapping_procs);
+static dev_proc_update_spot_equivalent_colors(pdf14_accum_update_spot_equivalent_colors);
static int
no_print_page(gx_device_printer *pdev, gp_file *prn_stream)
@@ -592,15 +604,14 @@ no_print_page(gx_device_printer *pdev, gp_file *prn_stream)
}
struct gx_device_pdf14_accum_s {
- gx_device_common;
- gx_prn_device_common;
+ gx_devn_prn_device_common;
gx_device *save_p14dev; /* the non-clist pdf14 deivce saved for after accum */
};
typedef struct gx_device_pdf14_accum_s gx_device_pdf14_accum;
-gs_public_st_suffix_add1_final(st_pdf14_accum, gx_device_pdf14_accum,
- "gx_device_pdf14_accum", pdf14_accum_enum_ptrs, pdf14_accum_reloc_ptrs,
- gx_device_finalize, st_device_printer, save_p14dev);
+gs_private_st_suffix_add1_final(st_gx_devn_accum_device, gx_device_pdf14_accum,
+ "gx_device_pdf14_accum", pdf14_accum_device_enum_ptrs, pdf14_accum_device_reloc_ptrs,
+ gx_devn_prn_device_finalize, st_gx_devn_prn_device, save_p14dev);
static const gx_device_procs pdf14_accum_Gray_procs =
prn_color_procs(gdev_prn_open, NULL, gdev_prn_close,
@@ -608,12 +619,14 @@ static const gx_device_procs pdf14_accum_Gray_procs =
const gx_device_pdf14_accum pdf14_accum_Gray = {
prn_device_stype_body(gx_device_pdf14_accum, pdf14_accum_Gray_procs, "pdf14-accum-Gray",
- &st_pdf14_accum,
+ &st_gx_devn_accum_device,
0/*width*/, 0/*height*/, 300/*xdpi*/, 300/*ydpi*/,
0/*lm*/, 0/*bm*/, 0/*rm*/, 0/*tm*/,
1/*ncomp*/, 8/*depth*/, 255/*max_gray*/, 0/*max_color*/,
256/*dither_grays*/, 0/*dither_colors*/,
no_print_page),
+ { 0 }, /* devn_params - not used */
+ { 0 }, /* equivalent_cmyk_color_params - not used */
0/*save_p14dev*/
};
@@ -623,12 +636,14 @@ static const gx_device_procs pdf14_accum_RGB_procs =
const gx_device_pdf14_accum pdf14_accum_RGB = {
prn_device_stype_body(gx_device_pdf14_accum, pdf14_accum_RGB_procs, "pdf14-accum-RGB",
- &st_pdf14_accum,
+ &st_gx_devn_accum_device,
0/*width*/, 0/*height*/, 300/*xdpi*/, 300/*ydpi*/,
0/*lm*/, 0/*bm*/, 0/*rm*/, 0/*tm*/,
3/*ncomp*/, 24/*depth*/, 0/*max_gray*/, 255/*max_color*/,
1/*dither_grays*/, 256/*dither_colors*/,
no_print_page),
+ { 0 }, /* devn_params - not used */
+ { 0 }, /* equivalent_cmyk_color_params - not used */
0/*save_p14dev*/
};
@@ -638,12 +653,112 @@ static const gx_device_procs pdf14_accum_CMYK_procs =
const gx_device_pdf14_accum pdf14_accum_CMYK = {
prn_device_stype_body(gx_device_pdf14_accum, pdf14_accum_CMYK_procs, "pdf14-accum-CMYK",
- &st_pdf14_accum,
+ &st_gx_devn_accum_device,
0/*width*/, 0/*height*/, 300/*xdpi*/, 300/*ydpi*/,
0/*lm*/, 0/*bm*/, 0/*rm*/, 0/*tm*/,
4/*ncomp*/, 32/*depth*/, 255/*max_gray*/, 255/*max_color*/,
256/*dither_grays*/, 256/*dither_colors*/,
no_print_page),
+ { 0 }, /* devn_params - not used */
+ { 0 }, /* equivalent_cmyk_color_params - not used */
+ 0/*save_p14dev*/
+};
+
+static const gx_device_procs pdf14_accum_CMYKspot_procs =
+{\
+ gdev_prn_open, /* open */\
+ NULL, /* get_initial_matrix */\
+ NULL, /* sync_output */\
+ NULL, /* output_page */\
+ gdev_prn_close, /* close */\
+ cmyk_8bit_map_cmyk_color, /* rgb_map_rgb_color */\
+ cmyk_8bit_map_color_cmyk, /* gx_default_rgb_map_color_rgb */\
+ NULL, /* fill_rectangle */\
+ NULL, /* tile_rectangle */\
+ NULL, /* copy_mono */\
+ NULL, /* copy_color */\
+ NULL, /* draw_line */\
+ NULL, /* get_bits */\
+ NULL, /* get_params */\
+ NULL, /* put_params */\
+ NULL, /* map_cmyk_color */\
+ NULL, /* get_xfont_procs */\
+ NULL, /* get_xfont_device */\
+ NULL, /* map_rgb_alpha_color */\
+ NULL, /* get_page_device */\
+ NULL, /* get_alpha_bits */\
+ NULL , /* copy_alpha */\
+ NULL, /* get_band */\
+ NULL, /* copy_rop */\
+ NULL, /* fill_path */\
+ NULL, /* stroke_path */\
+ NULL, /* fill_mask */\
+ NULL, /* fill_trapezoid */\
+ NULL, /* fill_parallelogram */\
+ NULL, /* fill_triangle */\
+ NULL, /* draw_thin_line */\
+ NULL, /* begin_image */\
+ NULL, /* image_data */\
+ NULL, /* end_image */\
+ NULL, /* strip_tile_rectangle */\
+ NULL, /* strip_copy_rop, */\
+ NULL, /* get_clipping_box */\
+ NULL, /* begin_typed_image */\
+ NULL, /* get_bits_rectangle */\
+ NULL, /* map_color_rgb_alpha */\
+ NULL, /* create_compositor */\
+ NULL, /* get_hardware_params */\
+ NULL, /* text_begin */\
+ NULL, /* finish_copydevice */\
+ NULL, /* begin_transparency_group */\
+ NULL, /* end_transparency_group */\
+ NULL, /* begin_transparency_mask */\
+ NULL, /* end_transparency_mask */\
+ NULL, /* discard_trans_layer */\
+ pdf14_accum_get_color_mapping_procs, /* get_color_mapping_procs */\
+ pdf14_accum_get_color_comp_index, /* get_color_comp_index */\
+ cmyk_8bit_map_cmyk_color, /* encode_color */\
+ cmyk_8bit_map_color_cmyk, /* decode_color */\
+ NULL, /* pattern_manage */\
+ NULL, /* fill_rectangle_hl_color */\
+ NULL, /* include_color_space */\
+ NULL, /* fill_linear_color_scanline */\
+ NULL, /* fill_linear_color_trapezoid */\
+ NULL, /* fill_linear_color_triangle */\
+ pdf14_accum_update_spot_equivalent_colors, /* update spot */\
+ pdf14_accum_ret_devn_params, /* DevN params */\
+ NULL, /* fill page */\
+ NULL, /* push_transparency_state */\
+ NULL, /* pop_transparency_state */\
+ NULL, /* put_image */\
+ NULL, /* dev_spec_op */\
+ NULL, /* copy_planes */\
+ NULL, /* */\
+ NULL, /* set_graphics_type_tag */\
+ NULL, /* strip_copy_rop2 */\
+ NULL, /* strip_tile_rect_devn */\
+ NULL /* copy_alpha_hl_color */\
+};
+
+const gx_device_pdf14_accum pdf14_accum_CMYKspot = {
+ prn_device_stype_body(gx_device_pdf14_accum, pdf14_accum_CMYKspot_procs, "pdf14-accum-CMYKspot",
+ &st_gx_devn_accum_device,
+ 0/*width*/, 0/*height*/, 300/*xdpi*/, 300/*ydpi*/,
+ 0/*lm*/, 0/*bm*/, 0/*rm*/, 0/*tm*/,
+ 4/*ncomp*/, 32/*depth*/, 255/*max_gray*/, 255/*max_color*/,
+ 256/*dither_grays*/, 256/*dither_colors*/,
+ no_print_page),
+ /* DeviceN parameters */
+ { 8, /* Not used - Bits per color */
+ DeviceCMYKComponents, /* Names of color model colorants */
+ 4, /* Number colorants for CMYK */
+ 0, /* MaxSeparations has not been specified */
+ -1, /* PageSpotColors has not been specified */
+ { 0 }, /* SeparationNames */
+ 0, /* SeparationOrder names */
+ {0, 1, 2, 3, 4, 5, 6, 7 } /* Initial component SeparationOrder */
+ },
+ { true }, /* equivalent_cmyk_color_params */
0/*save_p14dev*/
};
@@ -779,7 +894,7 @@ static forceinline pdf14_buf*
template_transform_color_buffer(gs_gstate *pgs, pdf14_ctx *ctx, gx_device *dev,
pdf14_buf *src_buf, byte *src_data, cmm_profile_t *src_profile,
cmm_profile_t *des_profile, int x0, int y0, int width, int height, bool *did_alloc,
- bool has_matte, bool deep)
+ bool has_matte, bool deep)
{
gsicc_rendering_param_t rendering_params;
gsicc_link_t *icc_link;
@@ -1185,26 +1300,36 @@ pdf14_ctx_free(pdf14_ctx *ctx)
* if backdrop is fully transparent.
**/
static pdf14_buf *
-pdf14_find_backdrop_buf(pdf14_ctx *ctx)
+pdf14_find_backdrop_buf(pdf14_ctx *ctx, bool *is_backdrop)
{
+ /* Our new buffer is buf */
pdf14_buf *buf = ctx->stack;
- while (buf != NULL) {
+ *is_backdrop = false;
+
+ if (buf != NULL) {
+ /* If the new buffer is isolated there is no backdrop */
if (buf->isolated) return NULL;
- if (buf->knockout && !buf->isolated) return buf->saved;
- /* If target (NOS) is knockout and isolated then the compositing will happen
- at the end */
- if (buf->saved != NULL && buf->saved->knockout && buf->saved->isolated) return NULL;
- /* Target (NOS) is not isolated. Next group on stack is a knockout.
- We need to compose with the backdrop when we do the pop */
- if (buf->saved != NULL && buf->saved->knockout && !buf->saved->isolated)
- return NULL;
- /* Not a knockout and not isolated. Initialize backdrop */
- if (!buf->knockout) return buf->saved;
- buf = buf->saved;
+
+ /* If the previous buffer is a knockout group
+ then we need to use its backdrop as the backdrop. If
+ it was isolated then that back drop was NULL */
+ if (buf->saved != NULL && buf->saved->knockout) {
+ /* Per the spec, if we have a non-isolated group
+ in a knockout group the non-isolated group
+ uses the backdrop of its parent group (the knockout group)
+ as its own backdrop. The non-isolated group must
+ go through the standard re-composition operation
+ to avoid the double application of the backdrop */
+ *is_backdrop = true;
+ return buf->saved;
+ }
+ /* This should be the non-isolated case where its parent is
+ not a knockout */
+ if (buf->saved != NULL) {
+ return buf->saved;
+ }
}
- /* this really shouldn't happen, as bottom-most buf should be
- non-knockout */
return NULL;
}
@@ -1218,8 +1343,8 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
gx_device *dev)
{
pdf14_buf *tos = ctx->stack;
- pdf14_buf *buf, *backdrop;
- bool has_shape, has_tags;
+ pdf14_buf *buf, * pdf14_backdrop;
+ bool has_shape, has_tags, is_backdrop;
if_debug1m('v', ctx->memory,
"[v]pdf14_push_transparency_group, idle = %d\n", idle);
@@ -1232,7 +1357,14 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
/* If the group is NOT isolated we add in the alpha_g plane. This enables
recompositing to be performed ala art_pdf_recomposite_group_8 so that
- the backdrop is only included one time in the computation. */
+ the backdrop is only included one time in the computation.
+
+ For shape and alpha, backdrop removal is accomplished by maintaining
+ two sets of variables to hold the accumulated values. The group shape
+ and alpha, f_g and alpha_g, accumulate only the shape and alpha of the group
+ elements, excluding the group backdrop.
+
+ */
/* Order of buffer data is color data, followed by alpha channel, followed by
shape (if present), then alpha_g (if present), then tags (if present) */
buf = pdf14_buf_new(rect, has_tags, !isolated, has_shape, idle, numcomps + 1,
@@ -1262,97 +1394,56 @@ pdf14_push_transparency_group(pdf14_ctx *ctx, gs_int_rect *rect, bool isolated,
return 0;
if (idle)
return 0;
- backdrop = pdf14_find_backdrop_buf(ctx);
- if (backdrop == NULL) {
+ pdf14_backdrop = pdf14_find_backdrop_buf(ctx, &is_backdrop);
+
+ /* Initializes buf->data with the backdrop or as opaque */
+ if (pdf14_backdrop == NULL || (is_backdrop && pdf14_backdrop->backdrop == NULL)) {
/* Note, don't clear out tags set by pdf14_buf_new == GS_UNKNOWN_TAG */
/* Memsetting by 0, so this copes with the deep case too */
memset(buf->data, 0, buf->planestride * (buf->n_chan +
(buf->has_shape ? 1 : 0) +
(buf->has_alpha_g ? 1 : 0)));
} else {
- if (!buf->knockout) {
- if (!cm_back_drop) {
- pdf14_preserve_backdrop(buf, tos, false
+ if (!cm_back_drop) {
+ pdf14_preserve_backdrop(buf, pdf14_backdrop, is_backdrop
#if RAW_DUMP
- , ctx->memory
+ , ctx->memory
#endif
- );
- } else {
- /* We must have an non-isolated group with a mismatch in color spaces.
- In this case, we can't just copy the buffer but must CM it */
- pdf14_preserve_backdrop_cm(buf, group_profile, tos, tos_profile,
- ctx->memory, pgs, dev, false);
- }
+ );
+ } else {
+ /* We must have an non-isolated group with a mismatch in color spaces.
+ In this case, we can't just copy the buffer but must CM it */
+ pdf14_preserve_backdrop_cm(buf, group_profile, pdf14_backdrop, tos_profile,
+ ctx->memory, pgs, dev, is_backdrop);
}
}
- /* If knockout, we have to maintain a copy of the backdrop in case we are
- drawing nonisolated groups on top of the knockout group. */
- if (buf->knockout) {
- buf->backdrop = gs_alloc_bytes(ctx->memory, buf->planestride * buf->n_chan,
- "pdf14_push_transparency_group");
+ /* If our new group is a non-isolated knockout group, we have to maintain
+ a copy of the backdrop in case we are drawing nonisolated groups on top of the
+ knockout group. They have to always blend with the groups backdrop
+ not what is currently drawn in the group. Selection of the backdrop
+ depends upon the properties of the parent group. For example, if
+ the parent itself is a knockout group we actually
+ need to blend with its backdrop. This could be NULL if the parent was
+ an isolated knockout group. */
+ if (buf->knockout && pdf14_backdrop != NULL) {
+ buf->backdrop = gs_alloc_bytes(ctx->memory, buf->planestride * buf->n_planes,
+ "pdf14_push_transparency_group");
if (buf->backdrop == NULL) {
return gs_throw(gs_error_VMerror, "Knockout backdrop allocation failed");
}
- if (buf->isolated) {
- /* We will have opaque backdrop for non-isolated compositing */
- /* Memsetting by 0, so this copes with the deep case too */
- memset(buf->backdrop, 0, buf->planestride * buf->n_chan);
- } else {
- /* Save knockout backdrop for non-isolated compositing */
- /* Note that we need to drill down through the non-isolated groups in our
- stack and make sure that we are not embedded in another knockout group */
- pdf14_buf *check = tos;
- pdf14_buf *child = NULL; /* Needed so we can get profile */
- cmm_profile_t *prev_knockout_profile;
-
- while (check != NULL) {
- if (check->isolated)
- break;
- if (check->knockout) {
- break;
- }
- child = check;
- check = check->saved;
- }
- /* Here we need to grab a back drop from a knockout parent group and
- potentially worry about color differences. */
- if (check == NULL || check->page_group) {
- prev_knockout_profile = tos_profile;
- check = tos;
- } else {
- if (child == NULL) {
- prev_knockout_profile = tos_profile;
- } else {
- prev_knockout_profile = child->parent_color_info->icc_profile;
- }
- }
- if (!cm_back_drop) {
- pdf14_preserve_backdrop(buf, check, false
-#if RAW_DUMP
- , ctx->memory
-#endif
- );
- } else {
- /* We must have an non-isolated group with a mismatch in color spaces.
- In this case, we can't just copy the buffer but must CM it */
- pdf14_preserve_backdrop_cm(buf, group_profile, check,
- prev_knockout_profile, ctx->memory, pgs,
- dev, false);
- }
- memcpy(buf->backdrop, buf->data, buf->planestride * buf->n_chan);
- }
+
+ memcpy(buf->backdrop, buf->data, buf->planestride * buf->n_planes);
+
#if RAW_DUMP
/* Dump the current buffer to see what we have. */
dump_raw_buffer(ctx->memory,
- ctx->stack->rect.q.y-ctx->stack->rect.p.y,
- ctx->stack->rowstride>>buf->deep, buf->n_chan,
- ctx->stack->planestride, ctx->stack->rowstride,
- "KnockoutBackDrop", buf->backdrop, buf->deep);
+ ctx->stack->rect.q.y - ctx->stack->rect.p.y,
+ ctx->stack->rowstride >> buf->deep, buf->n_planes,
+ ctx->stack->planestride, ctx->stack->rowstride,
+ "KnockoutBackDrop", buf->backdrop, buf->deep);
global_index++;
#endif
- } else {
- buf->backdrop = NULL;
}
#if RAW_DUMP
/* Dump the current buffer to see what we have. */
@@ -1380,7 +1471,7 @@ pdf14_pop_transparency_group(gs_gstate *pgs, pdf14_ctx *ctx,
bool icc_match;
pdf14_device *pdev = (pdf14_device *)dev;
bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ gx_color_index drawn_comps = pdev->drawn_comps_stroke | pdev->drawn_comps_fill;
bool has_matte = false;
if (nos == NULL)
@@ -1696,7 +1787,8 @@ pdf14_pop_transparency_mask(pdf14_ctx *ctx, gs_gstate *pgs, gx_device *dev)
catch this earlier and just avoid creating the structure
to begin with. For now we need to delete the structure
that was created. Only delete if the alpha value is 65535 */
- if (tos->alpha == 65535) {
+ if ((tos->alpha == 65535 && tos->is_ident) ||
+ (!tos->is_ident && (tos->transfer_fn[tos->alpha>>8] == 255))) {
pdf14_buf_free(tos);
if (ctx->mask_stack != NULL) {
pdf14_free_mask_stack(ctx, ctx->memory);
@@ -2350,8 +2442,6 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
rowstride = buf->rowstride;
code = gs_cspace_build_ICC(&pcs, NULL, pgs->memory);
- if (pcs == NULL)
- return_error(gs_error_VMerror);
if (code < 0)
return code;
/* Need to set this to avoid color management during the image color render
@@ -2422,7 +2512,7 @@ pdf14_put_image(gx_device * dev, gs_gstate * pgs, gx_device * target)
gx_build_blended_image_row;
#ifdef WITH_CAL
blend_row = cal_get_blend_row(pdev->memory->gs_lib_ctx->core->cal_ctx,
- blend_row, num_comp, deep);
+ blend_row, num_comp, deep);
#endif
if (!deep)
@@ -2705,6 +2795,7 @@ gs_pdf14_device_copy_params(gx_device *dev, const gx_device *target)
cmm_dev_profile_t *profile_targ;
cmm_dev_profile_t *profile_dev14;
pdf14_device *pdev = (pdf14_device*) dev;
+ int k;
COPY_PARAM(width);
COPY_PARAM(height);
@@ -2729,17 +2820,24 @@ gs_pdf14_device_copy_params(gx_device *dev, const gx_device *target)
profile_dev14 = dev->icc_struct;
dev_proc((gx_device *) target, get_profile)((gx_device *) target,
&(profile_targ));
- gsicc_adjust_profile_rc(profile_targ->device_profile[0], 1, "gs_pdf14_device_copy_params");
- if (profile_dev14->device_profile[0] != NULL) {
- gsicc_adjust_profile_rc(profile_dev14->device_profile[0], -1, "gs_pdf14_device_copy_params");
+
+ for (k = 0; k < NUM_DEVICE_PROFILES; k++) {
+ if (profile_targ->device_profile[k] != NULL) {
+ gsicc_adjust_profile_rc(profile_targ->device_profile[k], 1, "gs_pdf14_device_copy_params");
+ }
+ if (profile_dev14->device_profile[k] != NULL) {
+ gsicc_adjust_profile_rc(profile_dev14->device_profile[k], -1, "gs_pdf14_device_copy_params");
+ }
+ profile_dev14->device_profile[k] = profile_targ->device_profile[k];
+ profile_dev14->rendercond[k] = profile_targ->rendercond[k];
}
- profile_dev14->device_profile[0] = profile_targ->device_profile[0];
+
dev->icc_struct->devicegraytok = profile_targ->devicegraytok;
dev->icc_struct->graydetection = profile_targ->graydetection;
dev->icc_struct->pageneutralcolor = profile_targ->pageneutralcolor;
dev->icc_struct->supports_devn = profile_targ->supports_devn;
dev->icc_struct->usefastcolor = profile_targ->usefastcolor;
- profile_dev14->rendercond[0] = profile_targ->rendercond[0];
+
if (pdev->using_blend_cs) {
/* Swap the device profile and the blend profile. */
gsicc_adjust_profile_rc(profile_targ->device_profile[0], 1, "gs_pdf14_device_copy_params");
@@ -2827,11 +2925,14 @@ pdf14_set_marking_params(gx_device *dev, const gs_gstate *pgs)
pdev->alpha = pgs->opacity.alpha * pgs->shape.alpha;
pdev->blend_mode = pgs->blend_mode;
pdev->overprint = pgs->overprint;
- pdev->effective_overprint_mode = pgs->effective_overprint_mode;
+ pdev->stroke_overprint = pgs->stroke_overprint;
+ pdev->fillconstantalpha = pgs->fillconstantalpha;
+ pdev->strokeconstantalpha = pgs->strokeconstantalpha;
- if_debug5m('v', dev->memory,
- "[v]set_marking_params, opacity = %g, shape = %g, bm = %d, op = %d, eop = %d\n",
- pdev->opacity, pdev->shape, pgs->blend_mode, pgs->overprint, pgs->effective_overprint_mode);
+ if_debug6m('v', dev->memory,
+ "[v]set_marking_params, opacity = %g, shape = %g, bm = %d, op = %d, eop = %d seop = %d\n",
+ pdev->opacity, pdev->shape, pgs->blend_mode, pgs->overprint, pdev->effective_overprint_mode,
+ pdev->stroke_effective_op_mode);
}
static void
@@ -2870,15 +2971,68 @@ update_lop_for_pdf14(gs_gstate *pgs, const gx_drawing_color *pdcolor)
}
}
-static int
+static int
+push_shfill_group(pdf14_clist_device *pdev,
+ gs_gstate *pgs,
+ gs_fixed_rect *box)
+{
+ gs_transparency_group_params_t params = { 0 };
+ int code;
+ gs_rect cb;
+ gs_gstate fudged_pgs = *pgs;
+
+ /* gs_begin_transparency_group takes a bbox that it then
+ * transforms by ctm. Our bbox has already been transformed,
+ * so clear out the ctm. */
+ fudged_pgs.ctm.xx = 1.0;
+ fudged_pgs.ctm.xy = 0;
+ fudged_pgs.ctm.yx = 0;
+ fudged_pgs.ctm.yy = 1.0;
+ fudged_pgs.ctm.tx = 0;
+ fudged_pgs.ctm.ty = 0;
+ cb.p.x = fixed2int_pixround(box->p.x);
+ cb.p.y = fixed2int_pixround(box->p.y);
+ cb.q.x = fixed2int_pixround(box->q.x);
+ cb.q.y = fixed2int_pixround(box->q.y);
+
+ params.Isolated = false;
+ params.Knockout = true;
+ code = gs_begin_transparency_group(&fudged_pgs, &params, &cb, PDF14_BEGIN_TRANS_GROUP);
+
+ /* We have the group handle the blendmode and the opacity,
+ * and continue with the existing graphics state reset
+ * to normal, opaque operation. We could do it the other
+ * way around, but this way means that if we push a knockout
+ * group for a stroke, and then the code calls back into
+ * the fill operation as part of doing the stroking, we don't
+ * push another one. */
+ gs_setblendmode(pgs, BLEND_MODE_Normal);
+ gs_setopacityalpha(pgs, 1.0);
+ if (pdev) {
+ code = pdf14_clist_update_params(pdev, pgs, false, NULL);
+ if (code < 0)
+ return code;
+ }
+
+ return code;
+}
+
+static int
+pop_shfill_group(gs_gstate *pgs)
+{
+ return gs_end_transparency_group(pgs);
+}
+
+static int
pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
gx_path *ppath, const gx_fill_params *params,
const gx_drawing_color *pdcolor,
const gx_clip_path *pcpath)
{
gs_gstate new_pgs = *pgs;
- int code;
+ int code = 0;
gs_pattern2_instance_t *pinst = NULL;
+ int push_group = 0;
if (pdcolor == NULL)
return_error(gs_error_unknownerror); /* color must be defined */
@@ -2928,6 +3082,7 @@ pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
}
}
#endif
+ pdf14_set_marking_params(dev, &new_pgs);
code = pdf14_tile_pattern_fill(dev, &new_pgs, ppath,
params, pdcolor, pcpath);
new_pgs.trans_device = NULL;
@@ -2936,20 +3091,57 @@ pdf14_fill_path(gx_device *dev, const gs_gstate *pgs,
}
}
if (gx_dc_is_pattern2_color(pdcolor)) {
+ /* Non-idempotent blends require a transparency
+ * group to be pushed because shadings might
+ * paint several pixels twice. */
+ push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ !blend_is_idempotent(gs_currentblendmode(pgs));
pinst =
(gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
- pinst->saved->has_transparency = true;
- /* The transparency color space operations are driven
- by the pdf14 clist writer device. */
- pinst->saved->trans_device = dev;
+ pinst->saved->has_transparency = true;
+ /* The transparency color space operations are driven
+ by the pdf14 clist writer device. */
+ pinst->saved->trans_device = dev;
+ }
+ if (push_group) {
+ gs_fixed_rect box;
+ if (pcpath)
+ gx_cpath_outer_box(pcpath, &box);
+ else
+ (*dev_proc(dev, get_clipping_box)) (dev, &box);
+ if (ppath) {
+ gs_fixed_rect path_box;
+
+ gx_path_bbox(ppath, &path_box);
+ if (box.p.x < path_box.p.x)
+ box.p.x = path_box.p.x;
+ if (box.p.y < path_box.p.y)
+ box.p.y = path_box.p.y;
+ if (box.q.x > path_box.q.x)
+ box.q.x = path_box.q.x;
+ if (box.q.y > path_box.q.y)
+ box.q.y = path_box.q.y;
+ }
+ code = push_shfill_group(NULL, &new_pgs, &box);
+ } else
+ update_lop_for_pdf14(&new_pgs, pdcolor);
+ pdf14_set_marking_params(dev, &new_pgs);
+ if (code >= 0) {
+ new_pgs.trans_device = dev;
+ new_pgs.has_transparency = true;
+ /* ppath can permissibly be NULL here, if we want to have a
+ * shading or a pattern fill the clipping path. This upsets
+ * coverity, which is not smart enough to realise that the
+ * validity of a NULL ppath depends on the type of pdcolor.
+ * We'll mark it as a false positive. */
+ code = gx_default_fill_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
+ new_pgs.trans_device = NULL;
+ new_pgs.has_transparency = false;
+ }
+ if (code >= 0 && push_group) {
+ code = pop_shfill_group(&new_pgs);
+ pdf14_set_marking_params(dev, pgs);
}
- update_lop_for_pdf14(&new_pgs, pdcolor);
- pdf14_set_marking_params(dev, pgs);
- new_pgs.trans_device = dev;
- new_pgs.has_transparency = true;
- code = gx_default_fill_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
- new_pgs.trans_device = NULL;
- new_pgs.has_transparency = false;
if (pinst != NULL){
pinst->saved->trans_device = NULL;
}
@@ -2963,11 +3155,249 @@ pdf14_stroke_path(gx_device *dev, const gs_gstate *pgs,
const gx_clip_path *pcpath)
{
gs_gstate new_pgs = *pgs;
+ int push_group = 0;
+ int code = 0;
- update_lop_for_pdf14(&new_pgs, pdcolor);
- pdf14_set_marking_params(dev, pgs);
- return gx_default_stroke_path(dev, &new_pgs, ppath, params, pdcolor,
- pcpath);
+ if (pdcolor == NULL)
+ return_error(gs_error_unknownerror); /* color must be defined */
+ if (gx_dc_is_pattern2_color(pdcolor)) {
+ /* Non-idempotent blends require a transparency
+ * group to be pushed because shadings might
+ * paint several pixels twice. */
+ push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ !blend_is_idempotent(gs_currentblendmode(pgs));
+ }
+ if (push_group) {
+ gs_fixed_rect box;
+ if (pcpath)
+ gx_cpath_outer_box(pcpath, &box);
+ else
+ (*dev_proc(dev, get_clipping_box)) (dev, &box);
+
+ /* For fill_path, we accept ppath == NULL to mean
+ * fill the entire clipping region. That makes no
+ * sense for stroke_path, hence ppath is always non
+ * NULL here. */
+ {
+ gs_fixed_rect path_box;
+ gs_fixed_point expansion;
+
+ gx_path_bbox(ppath, &path_box);
+ /* Expand the path bounding box by the scaled line width. */
+ if (gx_stroke_path_expansion(pgs, ppath, &expansion) < 0) {
+ /* The expansion is so large it caused a limitcheck. */
+ path_box.p.x = path_box.p.y = min_fixed;
+ path_box.q.x = path_box.q.y = max_fixed;
+ } else {
+ expansion.x += pgs->fill_adjust.x;
+ expansion.y += pgs->fill_adjust.y;
+ /*
+ * It's theoretically possible for the following computations to
+ * overflow, so we need to check for this.
+ */
+ path_box.p.x = (path_box.p.x < min_fixed + expansion.x ? min_fixed :
+ path_box.p.x - expansion.x);
+ path_box.p.y = (path_box.p.y < min_fixed + expansion.y ? min_fixed :
+ path_box.p.y - expansion.y);
+ path_box.q.x = (path_box.q.x > max_fixed - expansion.x ? max_fixed :
+ path_box.q.x + expansion.x);
+ path_box.q.y = (path_box.q.y > max_fixed - expansion.y ? max_fixed :
+ path_box.q.y + expansion.y);
+ }
+ if (box.p.x < path_box.p.x)
+ box.p.x = path_box.p.x;
+ if (box.p.y < path_box.p.y)
+ box.p.y = path_box.p.y;
+ if (box.q.x > path_box.q.x)
+ box.q.x = path_box.q.x;
+ if (box.q.y > path_box.q.y)
+ box.q.y = path_box.q.y;
+ }
+ code = push_shfill_group(NULL, &new_pgs, &box);
+ } else
+ update_lop_for_pdf14(&new_pgs, pdcolor);
+ pdf14_set_marking_params(dev, &new_pgs);
+ if (code >= 0)
+ code = gx_default_stroke_path(dev, &new_pgs, ppath, params, pdcolor,
+ pcpath);
+ if (code >= 0 && push_group) {
+ code = pop_shfill_group(&new_pgs);
+ pdf14_set_marking_params(dev, pgs);
+ }
+
+ return code;
+}
+
+static int
+pdf14_fill_stroke_path(gx_device *dev, const gs_gstate *cpgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ union {
+ const gs_gstate *cpgs;
+ gs_gstate *pgs;
+ } const_breaker;
+ gs_gstate *pgs;
+ int code, code2;
+ gs_transparency_group_params_t params = { 0 };
+ gs_fixed_rect clip_bbox;
+ gs_rect bbox, group_stroke_box;
+ float opacity;
+ gs_blend_mode_t blend_mode;
+ gs_fixed_rect path_bbox;
+ int expansion_code;
+ gs_fixed_point expansion;
+ pdf14_device *p14dev = (pdf14_device *)dev;
+
+ /* Break const just once, neatly */
+ const_breaker.cpgs = cpgs;
+ pgs = const_breaker.pgs;
+
+ if ((pgs->fillconstantalpha == 0.0 && pgs->strokeconstantalpha == 0.0) ||
+ (pgs->ctm.xx == 0.0 && pgs->ctm.xy == 0.0 && pgs->ctm.yx == 0.0 && pgs->ctm.yy == 0.0))
+ return 0;
+
+ opacity = pgs->opacity.alpha;
+ blend_mode = pgs->blend_mode;
+
+ code = gx_curr_fixed_bbox(pgs, &clip_bbox, NO_PATH);
+ if (code < 0 && code != gs_error_unknownerror)
+ return code;
+ if (code == gs_error_unknownerror) {
+ /* didn't get clip box from gx_curr_fixed_bbox */
+ clip_bbox.p.x = clip_bbox.p.y = 0;
+ clip_bbox.q.x = int2fixed(dev->width);
+ clip_bbox.q.y = int2fixed(dev->height);
+ }
+ if (pcpath)
+ rect_intersect(clip_bbox, pcpath->outer_box);
+
+ /* expand the ppath using stroke expansion rule, then intersect it */
+ code = gx_path_bbox(ppath, &path_bbox);
+ if (code == gs_error_nocurrentpoint && ppath->segments->contents.subpath_first == 0)
+ return 0; /* ignore empty path */
+ if (code < 0)
+ return code;
+ expansion_code = gx_stroke_path_expansion(pgs, ppath, &expansion);
+ if (expansion_code >= 0) {
+ path_bbox.p.x -= expansion.x;
+ path_bbox.p.y -= expansion.y;
+ path_bbox.q.x += expansion.x;
+ path_bbox.q.y += expansion.y;
+ }
+ rect_intersect(path_bbox, clip_bbox);
+ bbox.p.x = fixed2float(path_bbox.p.x);
+ bbox.p.y = fixed2float(path_bbox.p.y);
+ bbox.q.x = fixed2float(path_bbox.q.x);
+ bbox.q.y = fixed2float(path_bbox.q.y);
+
+ code = gs_bbox_transform_inverse(&bbox, &ctm_only(pgs), &group_stroke_box);
+ if (code < 0)
+ return code;
+
+ /* See if overprint is enabled for both stroke and fill AND if ca == CA */
+ if (pgs->fillconstantalpha == pgs->strokeconstantalpha &&
+ p14dev->overprint && p14dev->stroke_overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) {
+ /* Push a non-isolated non-knockout group with alpha = 1.0 and
+ compatible overprint mode. Group will be composited with
+ original alpha and blend mode */
+ params.Isolated = false;
+ params.group_color = UNKNOWN;
+ params.Knockout = false;
+
+ /* non-isolated non-knockout group pushed with original alpha and blend mode */
+ code = pdf14_begin_transparency_group(dev, &params,
+ &group_stroke_box, pgs, dev->memory);
+ if (code < 0)
+ return code;
+
+ /* Change alpha to 1.0 and blend mode to compatible overprint for actual drawing */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+
+ if (pgs->fillconstantalpha > 0) {
+ p14dev->op_state = PDF14_OP_STATE_FILL;
+ code = pdf14_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (code < 0)
+ goto cleanup;
+ }
+
+ if (pgs->strokeconstantalpha > 0) {
+ gs_swapcolors_quick(pgs); /* flips stroke_color_index (to stroke) */
+ p14dev->op_state = PDF14_OP_STATE_STROKE;
+ code = pdf14_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ gs_swapcolors_quick(pgs); /* this flips pgs->stroke_color_index back as well */
+ if (code < 0)
+ goto cleanup; /* bail out (with colors swapped back to fill) */
+ }
+
+ } else {
+ /* Push a non-isolated knockout group. Do not change the alpha or
+ blend modes. Note: we need to draw those that have alpha = 0 */
+ params.Isolated = false;
+ params.group_color = UNKNOWN;
+ params.Knockout = true;
+
+ /* non-isolated knockout group is pushed with alpha = 1.0 and Normal blend mode */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+
+ code = pdf14_begin_transparency_group(dev, &params,
+ &group_stroke_box, pgs, dev->memory);
+ /* restore blend mode for actual drawing in the group */
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ if (code < 0) {
+ /* Make sure we put everything back even if we exit with an error. */
+ (void)gs_setopacityalpha(pgs, opacity);
+ return code;
+ }
+
+ (void)gs_setopacityalpha(pgs, pgs->fillconstantalpha); /* Can never fail */
+ p14dev->op_state = PDF14_OP_STATE_FILL;
+
+ /* If we are in an overprint situation, set the blend mode to compatible
+ overprint */
+ if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+ code = pdf14_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ if (code < 0)
+ goto cleanup;
+
+ gs_setopacityalpha(pgs, pgs->strokeconstantalpha); /* Can never fail */
+ gs_swapcolors_quick(pgs);
+ p14dev->op_state = PDF14_OP_STATE_STROKE;
+ if (pgs->stroke_overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+ code = pdf14_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ /* Don't need to restore blendmode here, as it will be restored below. */
+ gs_swapcolors_quick(pgs);
+ if (code < 0)
+ goto cleanup;
+ }
+
+cleanup:
+ /* Now during the pop do the compositing with alpha of 1.0 and normal blend */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+
+ /* Restore where we were. If an error occured while in the group push
+ return that error code but try to do the cleanup */
+ code2 = pdf14_end_transparency_group(dev, pgs);
+ if (code2 < 0) {
+ /* At this point things have gone very wrong. We should just shut down */
+ code = gs_abort_pdf14trans_device(pgs);
+ return code2;
+ }
+
+ /* Restore if there were any changes */
+ (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+
+ return code;
}
static int
@@ -3018,8 +3448,9 @@ do_pdf14_copy_alpha_color(gx_device * dev, const byte * data, int data_x,
int shape_off = num_chan * planestride;
int alpha_g_off = shape_off + (has_shape ? planestride : 0);
int tag_off = alpha_g_off + (has_alpha_g ? planestride : 0);
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
gx_color_index comps;
byte shape = 0; /* Quiet compiler. */
byte src_alpha;
@@ -3206,8 +3637,9 @@ do_pdf14_copy_alpha_color_16(gx_device * dev, const byte * data, int data_x,
int shape_off = num_chan * planestride;
int alpha_g_off = shape_off + (has_shape ? planestride : 0);
int tag_off = alpha_g_off + (has_alpha_g ? planestride : 0);
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
gx_color_index comps;
uint16_t shape = 0; /* Quiet compiler. */
uint16_t src_alpha;
@@ -3588,7 +4020,8 @@ pdf14_tile_pattern_fill(gx_device * pdev, const gs_gstate * pgs,
}
blend_mode = ptile->blending_mode;
memcpy(&save_pdf14_dev, p14dev, sizeof(pdf14_device));
- code = pdf14_push_transparency_group(p14dev->ctx, &rect, 1, 0, 65535, 65535,
+ code = pdf14_push_transparency_group(p14dev->ctx, &rect, 1, 0, (uint16_t)floor(65535 * p14dev->alpha + 0.5),
+ (uint16_t)floor(65535 * p14dev->shape + 0.5),
blend_mode, 0, 0, n_chan_tile-1,
false, NULL, NULL, pgs_noconst,
pdev);
@@ -3908,8 +4341,15 @@ pdf14_set_params(gs_gstate * pgs,
pgs->opacity.alpha = pparams->opacity.alpha;
if (pparams->changed & PDF14_SET_OVERPRINT)
pgs->overprint = pparams->overprint;
- if (pparams->changed & PDF14_SET_OVERPRINT_MODE)
- pgs->effective_overprint_mode = pparams->effective_overprint_mode;
+ if (pparams->changed & PDF14_SET_STROKEOVERPRINT)
+ pgs->stroke_overprint = pparams->stroke_overprint;
+ if (pparams->changed & PDF14_SET_FILLCONSTANTALPHA)
+ pgs->fillconstantalpha = pparams->fillconstantalpha;
+ if (pparams->changed & PDF14_SET_STROKECONSTANTALPHA)
+ pgs->strokeconstantalpha = pparams->strokeconstantalpha;
+ if (pparams->changed & PDF_SET_FILLSTROKE_STATE) {
+ gs_swapcolors_quick(pgs);
+ }
pdf14_set_marking_params(dev, pgs);
}
@@ -4381,13 +4821,22 @@ gx_update_pdf14_compositor(gx_device * pdev, gs_gstate * pgs,
break;
case PDF14_BEGIN_TRANS_PAGE_GROUP:
case PDF14_BEGIN_TRANS_GROUP:
+ if (p14dev->smask_constructed || p14dev->depth_within_smask)
+ p14dev->depth_within_smask++;
+ p14dev->smask_constructed = 0;
code = gx_begin_transparency_group(pgs, pdev, &params);
break;
case PDF14_END_TRANS_GROUP:
code = gx_end_transparency_group(pgs, pdev);
+ if (p14dev->depth_within_smask)
+ p14dev->depth_within_smask--;
break;
case PDF14_BEGIN_TRANS_TEXT_GROUP:
- p14dev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
+ if (p14dev->text_group == PDF14_TEXTGROUP_BT_PUSHED) {
+ p14dev->text_group = PDF14_TEXTGROUP_MISSING_ET;
+ emprintf(p14dev->memory, "Warning: Text group pushed but no ET found\n");
+ } else
+ p14dev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
break;
case PDF14_END_TRANS_TEXT_GROUP:
if (p14dev->text_group == PDF14_TEXTGROUP_BT_PUSHED)
@@ -4396,9 +4845,18 @@ gx_update_pdf14_compositor(gx_device * pdev, gs_gstate * pgs,
break;
case PDF14_BEGIN_TRANS_MASK:
code = gx_begin_transparency_mask(pgs, pdev, &params);
+ if (code >= 0)
+ p14dev->in_smask_construction++;
break;
case PDF14_END_TRANS_MASK:
code = gx_end_transparency_mask(pgs, pdev, &params);
+ if (code >= 0) {
+ p14dev->in_smask_construction--;
+ if (p14dev->in_smask_construction < 0)
+ p14dev->in_smask_construction = 0;
+ if (p14dev->in_smask_construction == 0)
+ p14dev->smask_constructed = 1;
+ }
break;
case PDF14_SET_BLEND_PARAMS:
pdf14_set_params(pgs, pdev, &pdf14pct->params);
@@ -4480,12 +4938,27 @@ pdf14_create_compositor(gx_device * dev, gx_device * * pcdev,
values around a fair amount. Hence the forced assignement here.
See gx_spot_colors_set_overprint in gscspace for issues... */
const gs_overprint_t * op_pct = (const gs_overprint_t *) pct;
- if (op_pct->params.retain_any_comps && !op_pct->params.retain_spot_comps) {
- p14dev->drawn_comps = op_pct->params.drawn_comps;
- } else {
- /* Draw everything. If this parameter was not set, clist does
- not fill it in. */
- p14dev->drawn_comps = ( (gx_color_index) 1 << (p14dev->color_info.num_components)) - (gx_color_index) 1;
+ gx_color_index drawn_comps;
+
+ p14dev->op_state = op_pct->params.op_state;
+
+ if (!p14dev->op_state) {
+ if (op_pct->params.retain_any_comps) {
+ drawn_comps = op_pct->params.drawn_comps;
+ } else {
+ /* Draw everything. If this parameter was not set, clist does
+ not fill it in. */
+ drawn_comps = ((gx_color_index)1 << (p14dev->color_info.num_components)) - (gx_color_index)1;
+ }
+
+ if (op_pct->params.is_fill_color) {
+ p14dev->effective_overprint_mode = op_pct->params.effective_opm;
+ p14dev->drawn_comps_fill = drawn_comps;
+ } else {
+ p14dev->stroke_effective_op_mode = op_pct->params.effective_opm;
+ p14dev->drawn_comps_stroke = drawn_comps;
+ }
+
}
*pcdev = dev;
return 0;
@@ -4494,9 +4967,9 @@ pdf14_create_compositor(gx_device * dev, gx_device * * pcdev,
}
static int
-pdf14_push_text_group(gx_device *dev, gs_gstate *pgs, gx_path *path,
- const gx_clip_path *pcpath, gs_blend_mode_t blend_mode, float opacity,
- bool is_clist)
+pdf14_push_text_group(gx_device *dev, gs_gstate *pgs,
+ gs_blend_mode_t blend_mode, float opacity,
+ bool is_clist)
{
int code;
gs_transparency_group_params_t params = { 0 };
@@ -4558,11 +5031,24 @@ pdf14_text_begin(gx_device * dev, gs_gstate * pgs,
Special note: If text-knockout is set to false while we are within a
BT ET pair, we should pop the group. I need to create a test file for
this case. */
+
+ /* Catch case where we already pushed a group and are trying to push another one.
+ In that case, we will pop the current one first, as we don't want to be left
+ with it. Note that if we have a BT and no other BTs or ETs then this issue
+ will not be caught until we do the put_image and notice that the stack is not
+ empty. */
+ if (pdev->text_group == PDF14_TEXTGROUP_MISSING_ET) {
+ code = gs_end_transparency_group(pgs);
+ if (code < 0)
+ return code;
+ pdev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
+ }
+
if (gs_currenttextknockout(pgs) && (blend_issue || opacity != 1.0) &&
gs_currenttextrenderingmode(pgs) != 3 && /* don't bother with invisible text */
pdev->text_group == PDF14_TEXTGROUP_BT_NOT_PUSHED)
if (draw) {
- code = pdf14_push_text_group(dev, pgs, path, pcpath, blend_mode, opacity,
+ code = pdf14_push_text_group(dev, pgs, blend_mode, opacity,
false);
}
*ppenum = (gs_text_enum_t *)penum;
@@ -5623,7 +6109,7 @@ pdf14_begin_transparency_mask(gx_device *dev,
return code;
/* Note that the soft mask always follows the group color requirements even
when we have a separable device */
- return pdf14_push_transparency_mask(pdev->ctx, &rect, bg_alpha,
+ code = pdf14_push_transparency_mask(pdev->ctx, &rect, bg_alpha,
transfer_fn, ptmp->function_is_identity,
ptmp->idle, ptmp->replacing,
ptmp->mask_id, ptmp->subtype,
@@ -5633,6 +6119,10 @@ pdf14_begin_transparency_mask(gx_device *dev,
ptmp->Matte_components,
ptmp->Matte,
ptmp->GrayBackground);
+ if (code < 0)
+ return code;
+
+ return 0;
}
static int
@@ -5647,6 +6137,7 @@ pdf14_end_transparency_mask(gx_device *dev, gs_gstate *pgs)
#ifdef DEBUG
pdf14_debug_mask_stack_state(pdev->ctx);
#endif
+
/* May need to reset some color stuff related
* to a mismatch between the Smask color space
* and the Smask blending space */
@@ -5701,6 +6192,7 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
byte *bline, *bg_ptr, *line, *dst_ptr;
byte src[PDF14_MAX_PLANES];
byte dst[PDF14_MAX_PLANES] = { 0 };
+ byte dst2[PDF14_MAX_PLANES] = { 0 };
int rowstride = buf->rowstride;
int planestride = buf->planestride;
int num_chan = buf->n_chan;
@@ -5718,9 +6210,11 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
int shift = 8;
byte shape = 0; /* Quiet compiler. */
byte src_alpha;
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
gx_color_index comps;
+ bool has_backdrop = buf->backdrop != NULL;
if (buf->data == NULL)
return 0;
@@ -5786,8 +6280,12 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
if (x + w > buf->dirty.q.x) buf->dirty.q.x = x + w;
if (y + h > buf->dirty.q.y) buf->dirty.q.y = y + h;
- /* composite with backdrop only */
- bline = buf->backdrop + (x - buf->rect.p.x) + (y - buf->rect.p.y) * rowstride;
+ /* composite with backdrop only. */
+ if (has_backdrop)
+ bline = buf->backdrop + (x - buf->rect.p.x) + (y - buf->rect.p.y) * rowstride;
+ else
+ bline = NULL;
+
line = buf->data + (x - buf->rect.p.x) + (y - buf->rect.p.y) * rowstride;
for (j = 0; j < h; ++j) {
@@ -5795,19 +6293,21 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
dst_ptr = line;
for (i = 0; i < w; ++i) {
/* Complement the components for subtractive color spaces */
- if (additive) {
- for (k = 0; k < num_chan; ++k)
- dst[k] = bg_ptr[k * planestride];
- } else {
- for (k = 0; k < num_comp; ++k)
- dst[k] = 255 - bg_ptr[k * planestride];
+ if (has_backdrop) {
+ if (additive) {
+ for (k = 0; k < num_chan; ++k)
+ dst[k] = bg_ptr[k * planestride];
+ } else {
+ for (k = 0; k < num_comp; ++k)
+ dst2[k] = dst[k] = 255 - bg_ptr[k * planestride];
+ }
+ dst2[num_comp] = dst[num_comp] = bg_ptr[num_comp * planestride]; /* alpha doesn't invert */
}
- dst[num_comp] = bg_ptr[num_comp * planestride]; /* alpha doesn't invert */
- if (buf->isolated) {
+ if (buf->isolated || !has_backdrop) {
art_pdf_knockoutisolated_group_8(dst, src, num_comp);
} else {
art_pdf_composite_knockout_8(dst, src, num_comp,
- blend_mode, pdev->blend_procs, pdev);
+ blend_mode, pdev->blend_procs, pdev);
}
/* Complement the results for subtractive color spaces */
if (additive) {
@@ -5815,9 +6315,17 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
dst_ptr[k * planestride] = dst[k];
} else {
if (overprint) {
- for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
+ /* We may have to do the compatible overprint blending */
+ if (!buf->isolated && drawn_comps != (( (size_t) 1 << (size_t) dev->color_info.num_components)-(size_t) 1)) {
+ art_pdf_composite_knockout_8(dst2, src, num_comp,
+ blend_mode, pdev->blend_procs, pdev);
+ }
+ for (k = 0, comps = drawn_comps; k < num_comp; ++k, comps >>= 1) {
if ((comps & 0x1) != 0) {
dst_ptr[k * planestride] = 255 - dst[k];
+ } else {
+ /* Compatible overprint blend result. */
+ dst_ptr[k * planestride] = 255 - dst2[k];
}
}
} else {
@@ -5827,6 +6335,8 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
dst_ptr[num_comp * planestride] = dst[num_comp];
}
if (tag_off) {
+ /* FIXME: As we are knocking out, possibly, we should be
+ * always overwriting tag values here? */
/* If src alpha is 100% then set to curr_tag, else or */
/* other than Normal BM, we always OR */
if (src[num_comp] == 255 && tag_blend) {
@@ -5835,16 +6345,14 @@ do_mark_fill_rectangle_ko_simple(gx_device *dev, int x, int y, int w, int h,
dst_ptr[tag_off] |= curr_tag;
}
}
- if (alpha_g_off) {
- int tmp = (255 - dst_ptr[alpha_g_off]) * src_alpha + 0x80;
- dst_ptr[alpha_g_off] = 255 - ((tmp + (tmp >> 8)) >> 8);
- }
- if (shape_off) {
- int tmp = (255 - dst_ptr[shape_off]) * shape + 0x80;
- dst_ptr[shape_off] = 255 - ((tmp + (tmp >> 8)) >> 8);
- }
+ /* Knockout group alpha and shape too */
+ if (alpha_g_off)
+ dst_ptr[alpha_g_off] = 255 - src_alpha;
+ if (shape_off)
+ dst_ptr[shape_off] = 255 - shape;
++dst_ptr;
- ++bg_ptr;
+ if (has_backdrop)
+ ++bg_ptr;
}
bline += rowstride;
line += rowstride;
@@ -5879,6 +6387,7 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
uint16_t *bline, *bg_ptr, *line, *dst_ptr;
uint16_t src[PDF14_MAX_PLANES];
uint16_t dst[PDF14_MAX_PLANES] = { 0 };
+ uint16_t dst2[PDF14_MAX_PLANES] = { 0 };
int rowstride = buf->rowstride;
int planestride = buf->planestride;
int num_chan = buf->n_chan;
@@ -5894,9 +6403,11 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
gs_graphics_type_tag_t curr_tag = GS_UNKNOWN_TAG; /* Quiet compiler */
uint16_t shape = 0; /* Quiet compiler. */
uint16_t src_alpha;
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
gx_color_index comps;
+ bool has_backdrop = buf->backdrop != NULL;
if (buf->data == NULL)
return 0;
@@ -5962,8 +6473,13 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
if (x + w > buf->dirty.q.x) buf->dirty.q.x = x + w;
if (y + h > buf->dirty.q.y) buf->dirty.q.y = y + h;
- /* composite with backdrop only */
- bline = (uint16_t *)(void *)(buf->backdrop + (x - buf->rect.p.x)*2 + (y - buf->rect.p.y) * rowstride);
+
+ /* composite with backdrop only. */
+ if (has_backdrop)
+ bline = (uint16_t*)(void*)(buf->backdrop + (x - buf->rect.p.x) * 2 + (y - buf->rect.p.y) * rowstride);
+ else
+ bline = NULL;
+
line = (uint16_t *)(void *)(buf->data + (x - buf->rect.p.x)*2 + (y - buf->rect.p.y) * rowstride);
planestride >>= 1;
rowstride >>= 1;
@@ -5976,15 +6492,17 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
dst_ptr = line;
for (i = 0; i < w; ++i) {
/* Complement the components for subtractive color spaces */
- if (additive) {
- for (k = 0; k < num_chan; ++k)
- dst[k] = bg_ptr[k * planestride];
- } else {
- for (k = 0; k < num_comp; ++k)
- dst[k] = 65535 - bg_ptr[k * planestride];
+ if (has_backdrop) {
+ if (additive) {
+ for (k = 0; k < num_chan; ++k)
+ dst[k] = bg_ptr[k * planestride];
+ } else {
+ for (k = 0; k < num_comp; ++k)
+ dst2[k] = dst[k] = 65535 - bg_ptr[k * planestride];
+ }
+ dst2[num_comp] = dst[num_comp] = bg_ptr[num_comp * planestride]; /* alpha doesn't invert */
}
- dst[num_comp] = bg_ptr[num_comp * planestride]; /* alpha doesn't invert */
- if (buf->isolated) {
+ if (buf->isolated || !has_backdrop) {
art_pdf_knockoutisolated_group_16(dst, src, num_comp);
} else {
art_pdf_composite_knockout_16(dst, src, num_comp,
@@ -5996,9 +6514,17 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
dst_ptr[k * planestride] = dst[k];
} else {
if (overprint) {
- for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
+ /* We may have to do the compatible overprint blending */
+ if (!buf->isolated && drawn_comps != (((size_t)1 << (size_t)dev->color_info.num_components) - (size_t)1)) {
+ art_pdf_composite_knockout_16(dst2, src, num_comp,
+ blend_mode, pdev->blend_procs, pdev);
+ }
+ for (k = 0, comps = drawn_comps; k < num_comp; ++k, comps >>= 1) {
if ((comps & 0x1) != 0) {
dst_ptr[k * planestride] = 65535 - dst[k];
+ } else {
+ /* Compatible overprint blend result. */
+ dst_ptr[k * planestride] = 65535 - dst2[k];
}
}
} else {
@@ -6008,6 +6534,8 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
dst_ptr[num_comp * planestride] = dst[num_comp];
}
if (tag_off) {
+ /* FIXME: As we are knocking out, possibly, we should be
+ * always overwriting tag values here? */
/* If src alpha is 100% then set to curr_tag, else or */
/* other than Normal BM, we always OR */
if (src[num_comp] == 65535 && tag_blend) {
@@ -6016,16 +6544,14 @@ do_mark_fill_rectangle_ko_simple16(gx_device *dev, int x, int y, int w, int h,
dst_ptr[tag_off] |= curr_tag;
}
}
- if (alpha_g_off) {
- int tmp = (65535 - dst_ptr[alpha_g_off]) * src_alpha + 0x8000;
- dst_ptr[alpha_g_off] = 65535 - ((tmp + (tmp >> 16)) >> 16);
- }
- if (shape_off) {
- int tmp = (65535 - dst_ptr[shape_off]) * shape + 0x8000;
- dst_ptr[shape_off] = 65535 - ((tmp + (tmp >> 16)) >> 16);
- }
+ /* Knockout group alpha and shape too */
+ if (alpha_g_off)
+ dst_ptr[alpha_g_off] = 65535 - src_alpha;
+ if (shape_off)
+ dst_ptr[shape_off] = 65535 - shape;
++dst_ptr;
- ++bg_ptr;
+ if (has_backdrop)
+ ++bg_ptr;
}
bline += rowstride;
line += rowstride;
@@ -6484,6 +7010,15 @@ pdf14_dev_spec_op(gx_device *pdev, int dev_spec_op,
return 0;
if(dev_spec_op == gxdso_JPEG_passthrough_query)
return 0;
+ if (dev_spec_op == gxdso_overprint_active) {
+ if (p14dev->pclist_device != NULL) {
+ return dev_proc(p14dev->pclist_device, dev_spec_op)(p14dev->pclist_device, dev_spec_op, data, size);
+ } else {
+ return p14dev->overprint || p14dev->stroke_overprint;
+ }
+ }
+ if (dev_spec_op == gxdso_in_smask)
+ return p14dev->in_smask_construction > 0 || p14dev->depth_within_smask;
return dev_proc(p14dev->target, dev_spec_op)(p14dev->target, dev_spec_op, data, size);
}
@@ -6620,6 +7155,8 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
p14dev->width = 1;
p14dev->height = 1;
}
+
+ p14dev->op_state = pgs->is_fill_color;
code = dev_proc((gx_device *) p14dev, open_device) ((gx_device *) p14dev);
*pdev = (gx_device *) p14dev;
pdf14_set_marking_params((gx_device *)p14dev, pgs);
@@ -6644,11 +7181,12 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
gx_device *new_target = NULL;
gx_device_color pdcolor;
frac pconc_white = frac_1;
+ bool UsePlanarBuffer = false;
if_debug0m('v', mem, "[v]gs_pdf14_device_push: Inserting clist device.\n");
/* get the prototype for the accumulator device based on colorspace */
- switch (target->color_info.num_components) {
+ switch (target->color_info.max_components) { /* use max_components in case is devn device */
case 1:
accum_proto = &pdf14_accum_Gray;
break;
@@ -6659,8 +7197,8 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
accum_proto = &pdf14_accum_CMYK;
break;
default:
- /* FIXME: DeviceN ?? */
- break; /* accum_proto will be NULL, so no accum device */
+ accum_proto = &pdf14_accum_CMYKspot;
+ UsePlanarBuffer = true;
}
if (accum_proto == NULL ||
(code = gs_copydevice(&new_target, (gx_device *)accum_proto, mem->stable_memory)) < 0)
@@ -6668,8 +7206,9 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
((gx_device_pdf14_accum *)new_target)->save_p14dev = (gx_device *)p14dev; /* non-clist p14dev */
/* Fill in values from the target device before opening */
+ new_target->color_info = p14dev->color_info;
+ ((gx_device_pdf14_accum *)new_target)->devn_params = p14dev->devn_params;
new_target->color_info.separable_and_linear = GX_CINFO_SEP_LIN;
- new_target->color_info.anti_alias = p14dev->color_info.anti_alias;
set_linear_color_bits_mask_shift(new_target);
gs_pdf14_device_copy_params(new_target, target);
((gx_device_pdf14_accum *)new_target)->page_uses_transparency = true;
@@ -6677,18 +7216,19 @@ gs_pdf14_device_push(gs_memory_t *mem, gs_gstate * pgs,
memcpy(&(new_target->space_params), &(target->space_params), sizeof(gdev_space_params));
max_bitmap = max(target->space_params.MaxBitmap, target->space_params.BufferSpace);
- new_target->space_params.BufferSpace = max_bitmap;
+ ((gx_device_pdf14_accum *)new_target)->space_params.BufferSpace = max_bitmap;
new_target->PageHandlerPushed = true;
new_target->ObjectHandlerPushed = true;
- if ((code = gdev_prn_open(new_target)) < 0 ||
+ /* UsePlanarBuffer is true in case this is CMYKspot */
+ if ((code = gdev_prn_open_planar(new_target, UsePlanarBuffer)) < 0 ||
!PRINTER_IS_CLIST((gx_device_printer *)new_target)) {
gs_free_object(mem->stable_memory, new_target, "pdf14-accum");
goto no_clist_accum;
}
/* Do the initial fillpage into the pdf14-accum device we just created */
- dev_proc(new_target, set_graphics_type_tag)(new_target, GS_UNTOUCHED_TAG);
+ dev_proc(new_target, set_graphics_type_tag)((gx_device *)new_target, GS_UNTOUCHED_TAG);
if ((code = gx_remap_concrete_DGray(gs_currentcolorspace_inline((gs_gstate *)pgs),
&pconc_white,
&pdcolor, pgs, new_target, gs_color_select_all,
@@ -6947,7 +7487,8 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
pdf14_needed = false; /* At page level, set back to false */
if (smask_level == 0 && trans_group_level == 0)
cdev->page_pdf14_needed = pdf14_needed; /* save for after popping to page level */
- *pbuf++ = pparams->changed;
+ /* Changed is now two bytes due to overprint stroke fill. Write as int */
+ put_value(pbuf, pparams->changed);
if (pparams->changed & PDF14_SET_BLEND_MODE)
*pbuf++ = pparams->blend_mode;
if (pparams->changed & PDF14_SET_TEXT_KNOCKOUT)
@@ -6958,8 +7499,14 @@ c_pdf14trans_write(const gs_composite_t * pct, byte * data, uint * psize,
put_value(pbuf, pparams->shape.alpha);
if (pparams->changed & PDF14_SET_OVERPRINT)
put_value(pbuf, pparams->overprint);
- if (pparams->changed & PDF14_SET_OVERPRINT_MODE)
- put_value(pbuf, pparams->effective_overprint_mode);
+ if (pparams->changed & PDF14_SET_STROKEOVERPRINT)
+ put_value(pbuf, pparams->stroke_overprint);
+ if (pparams->changed & PDF14_SET_FILLCONSTANTALPHA)
+ put_value(pbuf, pparams->fillconstantalpha);
+ if (pparams->changed & PDF14_SET_STROKECONSTANTALPHA)
+ put_value(pbuf, pparams->strokeconstantalpha);
+ if (pparams->changed & PDF_SET_FILLSTROKE_STATE)
+ put_value(pbuf, pparams->op_fs_state);
break;
case PDF14_PUSH_TRANS_STATE:
break;
@@ -7144,7 +7691,7 @@ c_pdf14trans_read(gs_composite_t * * ppct, const byte * data,
return 0;
break;
case PDF14_SET_BLEND_PARAMS:
- params.changed = *data++;
+ read_value(data, params.changed);
if (params.changed & PDF14_SET_BLEND_MODE)
params.blend_mode = *data++;
if (params.changed & PDF14_SET_TEXT_KNOCKOUT)
@@ -7155,8 +7702,14 @@ c_pdf14trans_read(gs_composite_t * * ppct, const byte * data,
read_value(data, params.shape.alpha);
if (params.changed & PDF14_SET_OVERPRINT)
read_value(data, params.overprint);
- if (params.changed & PDF14_SET_OVERPRINT_MODE)
- read_value(data, params.effective_overprint_mode);
+ if (params.changed & PDF14_SET_STROKEOVERPRINT)
+ read_value(data, params.stroke_overprint);
+ if (params.changed & PDF14_SET_FILLCONSTANTALPHA)
+ read_value(data, params.fillconstantalpha);
+ if (params.changed & PDF14_SET_STROKECONSTANTALPHA)
+ read_value(data, params.strokeconstantalpha);
+ if (params.changed & PDF_SET_FILLSTROKE_STATE)
+ read_value(data, params.op_fs_state);
break;
}
code = gs_create_pdf14trans(ppct, &params, mem);
@@ -7243,7 +7796,7 @@ find_opening_op(int opening_op, gs_composite_t **ppcte,
if (op != PDF14_SET_BLEND_PARAMS) {
if (opening_op == PDF14_BEGIN_TRANS_MASK)
return COMP_ENQUEUE;
- if (opening_op == PDF14_BEGIN_TRANS_GROUP || opening_op == PDF14_BEGIN_TRANS_PAGE_GROUP || opening_op == PDF14_BEGIN_TRANS_PAGE_GROUP) {
+ if (opening_op == PDF14_BEGIN_TRANS_GROUP || opening_op == PDF14_BEGIN_TRANS_PAGE_GROUP) {
if (op != PDF14_BEGIN_TRANS_MASK && op != PDF14_END_TRANS_MASK)
return COMP_ENQUEUE;
}
@@ -7580,13 +8133,17 @@ send_pdf14trans(gs_gstate * pgs, gx_device * dev,
gx_forward_set_graphics_type_tag, /* set_graphics_type_tag */\
NULL, /* strip_copy_rop2 */\
NULL, /* strip_tile_rect_devn */\
- gx_forward_copy_alpha_hl_color\
+ gx_forward_copy_alpha_hl_color,\
+ NULL, /* process_page */\
+ NULL, /* transform_pixel_region */\
+ pdf14_clist_fill_stroke_path,\
}
static dev_proc_create_compositor(pdf14_clist_create_compositor);
static dev_proc_create_compositor(pdf14_clist_forward_create_compositor);
static dev_proc_fill_path(pdf14_clist_fill_path);
static dev_proc_stroke_path(pdf14_clist_stroke_path);
+static dev_proc_fill_stroke_path(pdf14_clist_fill_stroke_path);
static dev_proc_text_begin(pdf14_clist_text_begin);
static dev_proc_begin_image(pdf14_clist_begin_image);
static dev_proc_begin_typed_image(pdf14_clist_begin_typed_image);
@@ -7870,6 +8427,7 @@ pdf14_create_clist_device(gs_memory_t *mem, gs_gstate * pgs,
pdev->pad = target->pad;
pdev->log2_align_mod = target->log2_align_mod;
pdev->is_planar = target->is_planar;
+ pdev->op_state = pgs->is_fill_color;
if (deep) {
set_dev_proc(pdev, encode_color, pdf14_encode_color16);
@@ -7991,6 +8549,96 @@ pdf14_ret_devn_params(gx_device *pdev)
}
/*
+ * devicen params
+ */
+gs_devn_params *
+pdf14_accum_ret_devn_params(gx_device *pdev)
+{
+ gx_device_pdf14_accum *p14dev = (gx_device_pdf14_accum *)pdev;
+
+ return(&(p14dev->devn_params));
+}
+
+static int
+pdf14_accum_get_color_comp_index(gx_device * dev,
+ const char * pname, int name_size, int component_type)
+{
+ pdf14_device *p14dev = (pdf14_device *)(((gx_device_pdf14_accum *)dev)->save_p14dev);
+ gx_device *target = p14dev->target;
+ int colorant_number = devn_get_color_comp_index(dev,
+ &(((gx_device_pdf14_accum *)dev)->devn_params),
+ &(((gx_device_pdf14_accum *)dev)->equiv_cmyk_colors),
+ pname, name_size, component_type, ENABLE_AUTO_SPOT_COLORS);
+
+ if (target != NULL)
+ /* colorant_number returned here _should_ be the same as from above */
+ colorant_number = (*dev_proc(target, get_color_comp_index))
+ (target, (const char *)pname, name_size, component_type);
+ return colorant_number;
+}
+
+/*
+ * The following procedures are used to map the standard color spaces into
+ * the separation color components for the pdf14_accum device.
+ */
+static void
+pdf14_accum_gray_cs_to_cmyk_cm(gx_device * dev, frac gray, frac out[])
+{
+ int * map =
+ (int *)(&((gx_device_pdf14_accum *) dev)->devn_params.separation_order_map);
+
+ gray_cs_to_devn_cm(dev, map, gray, out);
+}
+
+static void
+pdf14_accum_rgb_cs_to_cmyk_cm(gx_device * dev,
+ const gs_gstate *pgs, frac r, frac g, frac b, frac out[])
+{
+ int * map =
+ (int *)(&((gx_device_pdf14_accum *) dev)->devn_params.separation_order_map);
+
+ rgb_cs_to_devn_cm(dev, map, pgs, r, g, b, out);
+}
+
+static void
+pdf14_accum_cmyk_cs_to_cmyk_cm(gx_device * dev,
+ frac c, frac m, frac y, frac k, frac out[])
+{
+ const int * map =
+ (int *)(&((gx_device_pdf14_accum *) dev)->devn_params.separation_order_map);
+
+ cmyk_cs_to_devn_cm(dev, map, c, m, y, k, out);
+}
+
+static const gx_cm_color_map_procs pdf14_accum_cm_procs = {
+ pdf14_accum_gray_cs_to_cmyk_cm,
+ pdf14_accum_rgb_cs_to_cmyk_cm,
+ pdf14_accum_cmyk_cs_to_cmyk_cm
+};
+
+static const gx_cm_color_map_procs *
+pdf14_accum_get_color_mapping_procs(const gx_device * dev)
+{
+ return &pdf14_accum_cm_procs;
+}
+
+/*
+ * Device proc for updating the equivalent CMYK color for spot colors.
+ */
+static int
+pdf14_accum_update_spot_equivalent_colors(gx_device * dev, const gs_gstate * pgs)
+{
+ gx_device_pdf14_accum *pdev = (gx_device_pdf14_accum *)dev;
+ gx_device *tdev = ((pdf14_device *)(pdev->save_p14dev))->target;
+ int code = update_spot_equivalent_cmyk_colors(dev, pgs, &pdev->devn_params,
+ &pdev->equiv_cmyk_colors);
+
+ if (code >= 0 && tdev != NULL)
+ code = dev_proc(tdev, update_spot_equivalent_colors)(tdev, pgs);
+ return code;
+}
+
+/*
* Retrieve a list of spot color names for the PDF14 device.
*/
int
@@ -8144,6 +8792,9 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
break;
case PDF14_BEGIN_TRANS_PAGE_GROUP:
case PDF14_BEGIN_TRANS_GROUP:
+ if (pdev->smask_constructed || pdev->depth_within_smask)
+ pdev->depth_within_smask++;
+ pdev->smask_constructed = 0;
/*
* Keep track of any changes made in the blending parameters.
These need to be written out in the same bands as the group
@@ -8207,9 +8858,14 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
than transparent. We must use the parent colors bounding box in
determining the range of bands in which this mask can affect.
So, if needed change the masks bounding box at this time */
+ pdev->in_smask_construction++;
break;
case PDF14_BEGIN_TRANS_TEXT_GROUP:
- pdev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
+ if (pdev->text_group == PDF14_TEXTGROUP_BT_PUSHED) {
+ emprintf(pdev->memory, "Warning: Text group pushed but no ET found\n");
+ pdev->text_group = PDF14_TEXTGROUP_MISSING_ET;
+ } else
+ pdev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
*pcdev = dev;
return 0; /* Never put into clist. Only used during writing */
case PDF14_END_TRANS_TEXT_GROUP:
@@ -8222,11 +8878,19 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
if (code < 0)
return code;
break;
- case PDF14_END_TRANS_GROUP:
case PDF14_END_TRANS_MASK:
+ pdev->in_smask_construction--;
+ if (pdev->in_smask_construction < 0)
+ pdev->in_smask_construction = 0;
+ if (pdev->in_smask_construction == 0)
+ pdev->smask_constructed = 1;
+ /* fallthrough */
+ case PDF14_END_TRANS_GROUP:
/* We need to update the clist writer device procs based upon the
the group color space. */
code = pdf14_update_device_color_procs_pop_c(dev,pgs);
+ if (pdev->depth_within_smask)
+ pdev->depth_within_smask--;
if (code < 0)
return code;
break;
@@ -8262,45 +8926,85 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
/* If we were accumulating into a pdf14-clist-accum device, */
/* we now have to render the page into it's target device */
if (is_pdf14_compositor && pdf14pct->params.pdf14_op == PDF14_POP_DEVICE &&
- pdev->target->stype == &st_pdf14_accum) {
+ pdev->target->stype == &st_gx_devn_accum_device) {
- int y, rows_used;
- byte *linebuf = gs_alloc_bytes(mem, gx_device_raster((gx_device *)pdev, true), "pdf14-clist_accum pop dev");
+ int i, y, rows_used;
+ byte *linebuf;
byte *actual_data;
- gx_device *tdev = pdev->target; /* the printer class clist device used to accumulate */
+ gx_device_pdf14_accum *tdev = (gx_device_pdf14_accum *)(pdev->target); /* the printer class clist device used to accumulate */
/* get the target device we want to send the image to */
- gx_device *target = ((pdf14_device *)((gx_device_pdf14_accum *)(tdev))->save_p14dev)->target;
+ gx_device *target = ((pdf14_device *)(tdev->save_p14dev))->target;
gs_image1_t image;
gs_color_space *pcs;
gx_image_enum_common_t *info;
gx_image_plane_t planes;
gsicc_rendering_param_t render_cond;
cmm_dev_profile_t *dev_profile;
+ bool save_planar = pdev->is_planar;
+ gs_devn_params *target_devn_params = dev_proc(target, ret_devn_params)(target);
+ int save_num_separations;
- /*
- * Set color space in preparation for sending an image.
+ pdev->is_planar = false; /* so gx_device_raster is for entire chunky pixel line */
+ linebuf = gs_alloc_bytes(mem, gx_device_raster((gx_device *)pdev, true), "pdf14-clist_accum pop dev");
+ pdev->is_planar = save_planar;
+
+ /* As long as we don't have spot colors, we can use ICC colorspace, but spot
+ * colors do require devn support
*/
- code = gs_cspace_build_ICC(&pcs, NULL, pgs->memory);
- if (linebuf == NULL || pcs == NULL)
- goto put_accum_error;
+ if (tdev->color_info.num_components <= 4 ||
+ dev_proc(target, dev_spec_op)(target, gxdso_supports_devn, NULL, 0) <= 0) {
+ /*
+ * Set color space in preparation for sending an image.
+ */
+ code = gs_cspace_build_ICC(&pcs, NULL, pgs->memory);
+ if (code < 0)
+ goto put_accum_error;
- /* Need to set this to avoid color management during the
- image color render operation. Exception is for the special case
- when the destination was CIELAB. Then we need to convert from
- default RGB to CIELAB in the put image operation. That will happen
- here as we should have set the profile for the pdf14 device to RGB
- and the target will be CIELAB */
- code = dev_proc(dev, get_profile)(dev, &dev_profile);
- if (code < 0) {
- rc_decrement_only_cs(pcs, "pdf14_put_image");
- return code;
- }
- gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile,
- &(pcs->cmm_icc_profile_data), &render_cond);
- /* pcs takes a reference to the profile data it just retrieved. */
- gsicc_adjust_profile_rc(pcs->cmm_icc_profile_data, 1, "pdf14_clist_create_compositor");
- gsicc_set_icc_range(&(pcs->cmm_icc_profile_data));
+ /* Need to set this to avoid color management during the
+ image color render operation. Exception is for the special case
+ when the destination was CIELAB. Then we need to convert from
+ default RGB to CIELAB in the put image operation. That will happen
+ here as we should have set the profile for the pdf14 device to RGB
+ and the target will be CIELAB */
+ code = dev_proc(dev, get_profile)(dev, &dev_profile);
+ if (code < 0)
+ goto put_accum_error;
+ gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile,
+ &(pcs->cmm_icc_profile_data), &render_cond);
+ /* pcs takes a reference to the profile data it just retrieved. */
+ gsicc_adjust_profile_rc(pcs->cmm_icc_profile_data, 1, "pdf14_clist_create_compositor");
+ gsicc_set_icc_range(&(pcs->cmm_icc_profile_data));
+ } else {
+ /* DeviceN case -- need to handle spot colors */
+ code = gs_cspace_new_DeviceN(&pcs, tdev->color_info.num_components,
+ gs_currentcolorspace(pgs), pgs->memory);
+ if (code < 0)
+ goto put_accum_error;
+ /* set up a usable DeviceN space with info from the tdev->devn_params */
+ pcs->params.device_n.use_alt_cspace = false;
+ if ((code = pcs->type->install_cspace(pcs, pgs)) < 0) {
+ goto put_accum_error;
+ }
+ /* One last thing -- we need to fudge the pgs->color_component_map */
+ for (i=0; i < tdev->color_info.num_components; i++)
+ pgs->color_component_map.color_map[i] = i; /* enable all components in normal order */
+ /* copy devn_params that were accumulated into the target device's devn_params */
+ target_devn_params->bitspercomponent = tdev->devn_params.bitspercomponent;
+ target_devn_params->std_colorant_names = tdev->devn_params.std_colorant_names;
+ target_devn_params->num_std_colorant_names = tdev->devn_params.num_std_colorant_names;
+ target_devn_params->max_separations = tdev->devn_params.max_separations;
+ target_devn_params->page_spot_colors = tdev->devn_params.page_spot_colors;
+ target_devn_params->num_separation_order_names = tdev->devn_params.num_separation_order_names;
+ target_devn_params->separations = tdev->devn_params.separations;
+ memcpy(target_devn_params->separation_order_map, tdev->devn_params.separation_order_map,
+ sizeof(gs_separation_map));
+ target_devn_params->pdf14_separations = tdev->devn_params.pdf14_separations;
+ }
+ if (linebuf == NULL) {
+ code = gs_error_VMerror;
+ goto put_accum_error;
+ }
gs_image_t_init_adjust(&image, pcs, false);
image.ImageMatrix.xx = (float)pdev->width;
image.ImageMatrix.yy = (float)pdev->height;
@@ -8321,30 +9025,39 @@ pdf14_clist_create_compositor(gx_device * dev, gx_device ** pcdev,
if (code < 0)
goto put_accum_error;
for (y=0; y < tdev->height; y++) {
- code = dev_proc(tdev, get_bits)(tdev, y, linebuf, &actual_data);
+ code = dev_proc(tdev, get_bits)((gx_device *)tdev, y, linebuf, &actual_data);
+ if (code < 0)
+ goto put_accum_error;
planes.data = actual_data;
planes.data_x = 0;
planes.raster = tdev->width * tdev->color_info.num_components;
if ((code = info->procs->plane_data(info, &planes, 1, &rows_used)) < 0)
goto put_accum_error;
}
- info->procs->end_image(info, true);
+ code = info->procs->end_image(info, true);
put_accum_error:
gs_free_object(pdev->memory, linebuf, "pdf14_put_image");
/* This will also decrement the device profile */
rc_decrement_only_cs(pcs, "pdf14_put_image");
- dev_proc(tdev, close_device)(tdev); /* frees the prn_device memory */
+ dev_proc(tdev, close_device)((gx_device *)tdev); /* frees the prn_device memory */
/* Now unhook the clist device and hook to the original so we can clean up */
gx_device_set_target((gx_device_forward *)pdev,
((gx_device_pdf14_accum *)(pdev->target))->save_p14dev);
- pdev->pclist_device = pdev->target; /* FIXME: is this kosher ? */
+ pdev->pclist_device = pdev->target;
*pcdev = pdev->target; /* pass upwards to switch devices */
pdev->color_info = target->color_info; /* same as in pdf14_disable_clist */
+ if (target_devn_params != NULL) {
+ /* prevent devn_free_params from freeing names still in use by target device */
+ save_num_separations = tdev->devn_params.separations.num_separations;
+ tdev->devn_params.separations.num_separations = 0;
+ }
gs_free_object(tdev->memory, tdev, "popdevice pdf14-accum");
- return 0; /* DON'T perform set_target */
+ if (target_devn_params != NULL) {
+ target_devn_params->separations.num_separations = save_num_separations;
+ }
+ return code; /* DON'T perform set_target */
}
-
if (*pcdev != pdev->target)
gx_device_set_target((gx_device_forward *)pdev, *pcdev);
*pcdev = dev;
@@ -8422,9 +9135,21 @@ pdf14_clist_update_params(pdf14_clist_device * pdev, const gs_gstate * pgs,
changed |= PDF14_SET_OVERPRINT;
params.overprint = pdev->overprint = pgs->overprint;
}
- if (pgs->effective_overprint_mode != pdev->effective_overprint_mode) {
- changed |= PDF14_SET_OVERPRINT_MODE;
- params.effective_overprint_mode = pdev->effective_overprint_mode = pgs->effective_overprint_mode;
+ if (pgs->stroke_overprint != pdev->stroke_overprint) {
+ changed |= PDF14_SET_STROKEOVERPRINT;
+ params.stroke_overprint = pdev->stroke_overprint = pgs->stroke_overprint;
+ }
+ if (pgs->fillconstantalpha != pdev->fillconstantalpha) {
+ changed |= PDF14_SET_FILLCONSTANTALPHA;
+ params.fillconstantalpha = pdev->fillconstantalpha = pgs->fillconstantalpha;
+ }
+ if (pgs->strokeconstantalpha != pdev->strokeconstantalpha) {
+ changed |= PDF14_SET_STROKECONSTANTALPHA;
+ params.strokeconstantalpha = pdev->strokeconstantalpha = pgs->strokeconstantalpha;
+ }
+ if (pgs->is_fill_color != pdev->op_state) {
+ changed |= PDF_SET_FILLSTROKE_STATE;
+ params.op_fs_state = pdev->op_state = pgs->is_fill_color;
}
if (crop_blend_params) {
params.ctm = group_params->ctm;
@@ -8464,6 +9189,7 @@ pdf14_clist_fill_path(gx_device *dev, const gs_gstate *pgs,
cmm_dev_profile_t *dev_profile, *fwd_profile;
gsicc_rendering_param_t render_cond;
cmm_profile_t *icc_profile_fwd, *icc_profile_dev;
+ int push_group = 0;
code = dev_proc(dev, get_profile)(dev, &dev_profile);
if (code < 0)
@@ -8495,6 +9221,11 @@ pdf14_clist_fill_path(gx_device *dev, const gs_gstate *pgs,
mapping to the transparency group color space. */
if (pdcolor != NULL && gx_dc_is_pattern2_color(pdcolor)) {
+ /* Non-idempotent blends require a transparency
+ * group to be pushed because shadings might
+ * paint several pixels twice. */
+ push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ !blend_is_idempotent(gs_currentblendmode(pgs));
pinst =
(gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
pinst->saved->has_transparency = true;
@@ -8502,12 +9233,40 @@ pdf14_clist_fill_path(gx_device *dev, const gs_gstate *pgs,
clist writer device. */
pinst->saved->trans_device = dev;
}
- update_lop_for_pdf14(&new_pgs, pdcolor);
- new_pgs.trans_device = dev;
- new_pgs.has_transparency = true;
- code = gx_forward_fill_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
- new_pgs.trans_device = NULL;
- new_pgs.has_transparency = false;
+ if (push_group) {
+ gs_fixed_rect box;
+ if (pcpath)
+ gx_cpath_outer_box(pcpath, &box);
+ else
+ (*dev_proc(dev, get_clipping_box)) (dev, &box);
+ if (ppath) {
+ gs_fixed_rect path_box;
+
+ gx_path_bbox(ppath, &path_box);
+ if (box.p.x < path_box.p.x)
+ box.p.x = path_box.p.x;
+ if (box.p.y < path_box.p.y)
+ box.p.y = path_box.p.y;
+ if (box.q.x > path_box.q.x)
+ box.q.x = path_box.q.x;
+ if (box.q.y > path_box.q.y)
+ box.q.y = path_box.q.y;
+ }
+ code = push_shfill_group(pdev, &new_pgs, &box);
+ } else
+ update_lop_for_pdf14(&new_pgs, pdcolor);
+ if (code >= 0) {
+ new_pgs.trans_device = dev;
+ new_pgs.has_transparency = true;
+ code = gx_forward_fill_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
+ new_pgs.trans_device = NULL;
+ new_pgs.has_transparency = false;
+ }
+ if (code >= 0 && push_group) {
+ code = pop_shfill_group(&new_pgs);
+ if (code >= 0)
+ code = pdf14_clist_update_params(pdev, pgs, false, NULL);
+ }
if (pinst != NULL){
pinst->saved->trans_device = NULL;
}
@@ -8526,8 +9285,9 @@ pdf14_clist_stroke_path(gx_device *dev, const gs_gstate *pgs,
{
pdf14_clist_device * pdev = (pdf14_clist_device *)dev;
gs_gstate new_pgs = *pgs;
- int code;
+ int code = 0;
gs_pattern2_instance_t *pinst = NULL;
+ int push_group = 0;
/*
* Ensure that that the PDF 1.4 reading compositor will have the current
@@ -8542,25 +9302,294 @@ pdf14_clist_stroke_path(gx_device *dev, const gs_gstate *pgs,
different color space, then we need to get the proper device information
passed along so that we use the correct color procs and colorinfo about
the transparency device and not the final target device */
- if (pdcolor != NULL && gx_dc_is_pattern2_color(pdcolor) &&
- pdev->trans_group_parent_cmap_procs != NULL) {
- pinst =
- (gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
- pinst->saved->has_transparency = true;
- /* The transparency color space operations are driven
+ if (pdcolor != NULL && gx_dc_is_pattern2_color(pdcolor)) {
+ /* Non-idempotent blends require a transparency
+ * group to be pushed because shadings might
+ * paint several pixels twice. */
+ push_group = gs_currentopacityalpha(pgs) != 1.0 ||
+ !blend_is_idempotent(gs_currentblendmode(pgs));
+ if (pdev->trans_group_parent_cmap_procs != NULL) {
+ pinst =
+ (gs_pattern2_instance_t *)pdcolor->ccolor.pattern;
+ pinst->saved->has_transparency = true;
+ /* The transparency color space operations are driven
by the pdf14 clist writer device. */
- pinst->saved->trans_device = dev;
+ pinst->saved->trans_device = dev;
+ }
+ }
+ if (push_group) {
+ gs_fixed_rect box;
+ if (pcpath)
+ gx_cpath_outer_box(pcpath, &box);
+ else
+ (*dev_proc(dev, get_clipping_box)) (dev, &box);
+ if (ppath) {
+ gs_fixed_rect path_box;
+ gs_fixed_point expansion;
+
+ gx_path_bbox(ppath, &path_box);
+ /* Expand the path bounding box by the scaled line width. */
+ if (gx_stroke_path_expansion(pgs, ppath, &expansion) < 0) {
+ /* The expansion is so large it caused a limitcheck. */
+ path_box.p.x = path_box.p.y = min_fixed;
+ path_box.q.x = path_box.q.y = max_fixed;
+ } else {
+ expansion.x += pgs->fill_adjust.x;
+ expansion.y += pgs->fill_adjust.y;
+ /*
+ * It's theoretically possible for the following computations to
+ * overflow, so we need to check for this.
+ */
+ path_box.p.x = (path_box.p.x < min_fixed + expansion.x ? min_fixed :
+ path_box.p.x - expansion.x);
+ path_box.p.y = (path_box.p.y < min_fixed + expansion.y ? min_fixed :
+ path_box.p.y - expansion.y);
+ path_box.q.x = (path_box.q.x > max_fixed - expansion.x ? max_fixed :
+ path_box.q.x + expansion.x);
+ path_box.q.y = (path_box.q.y > max_fixed - expansion.y ? max_fixed :
+ path_box.q.y + expansion.y);
+ }
+ if (box.p.x < path_box.p.x)
+ box.p.x = path_box.p.x;
+ if (box.p.y < path_box.p.y)
+ box.p.y = path_box.p.y;
+ if (box.q.x > path_box.q.x)
+ box.q.x = path_box.q.x;
+ if (box.q.y > path_box.q.y)
+ box.q.y = path_box.q.y;
+ }
+ code = push_shfill_group(pdev, &new_pgs, &box);
+ } else
+ update_lop_for_pdf14(&new_pgs, pdcolor);
+
+ if (code >= 0) {
+ new_pgs.trans_device = dev;
+ new_pgs.has_transparency = true;
+ code = gx_forward_stroke_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
+ new_pgs.trans_device = NULL;
+ new_pgs.has_transparency = false;
+ }
+ if (code >= 0 && push_group) {
+ code = pop_shfill_group(&new_pgs);
+ if (code >= 0)
+ code = pdf14_clist_update_params(pdev, pgs, false, NULL);
+ }
+ if (pinst != NULL)
+ pinst->saved->trans_device = NULL;
+ return code;
+}
+
+/* Set up work for doing shading patterns in fill stroke through
+ the clist. We have to do all the dirty work now since we are
+ going through the default fill and stroke operations individually */
+static int
+pdf14_clist_fill_stroke_path_pattern_setup(gx_device* dev, const gs_gstate* cpgs, gx_path* ppath,
+ const gx_fill_params* params_fill, const gx_drawing_color* pdevc_fill,
+ const gx_stroke_params* params_stroke, const gx_drawing_color* pdevc_stroke,
+ const gx_clip_path* pcpath)
+{
+ union {
+ const gs_gstate *cpgs;
+ gs_gstate *pgs;
+ } const_breaker;
+ gs_gstate *pgs;
+ int code, code2;
+ gs_transparency_group_params_t params = { 0 };
+ gs_fixed_rect clip_bbox;
+ gs_rect bbox, group_stroke_box;
+ float opacity;
+ gs_blend_mode_t blend_mode;
+ gs_fixed_rect path_bbox;
+ int expansion_code;
+ gs_fixed_point expansion;
+
+ /* Break const just once, neatly */
+ const_breaker.cpgs = cpgs;
+ pgs = const_breaker.pgs;
+
+ opacity = pgs->opacity.alpha;
+ blend_mode = pgs->blend_mode;
+
+ code = gx_curr_fixed_bbox(pgs, &clip_bbox, NO_PATH);
+ if (code < 0 && code != gs_error_unknownerror)
+ return code;
+ if (code == gs_error_unknownerror) {
+ /* didn't get clip box from gx_curr_fixed_bbox */
+ clip_bbox.p.x = clip_bbox.p.y = 0;
+ clip_bbox.q.x = int2fixed(dev->width);
+ clip_bbox.q.y = int2fixed(dev->height);
+ }
+ if (pcpath)
+ rect_intersect(clip_bbox, pcpath->outer_box);
+
+ /* expand the ppath using stroke expansion rule, then intersect it */
+ code = gx_path_bbox(ppath, &path_bbox);
+ if (code == gs_error_nocurrentpoint && ppath->segments->contents.subpath_first == 0)
+ return 0; /* ignore empty path */
+ if (code < 0)
+ return code;
+ expansion_code = gx_stroke_path_expansion(pgs, ppath, &expansion);
+ if (expansion_code >= 0) {
+ path_bbox.p.x -= expansion.x;
+ path_bbox.p.y -= expansion.y;
+ path_bbox.q.x += expansion.x;
+ path_bbox.q.y += expansion.y;
+ }
+ rect_intersect(path_bbox, clip_bbox);
+ bbox.p.x = fixed2float(path_bbox.p.x);
+ bbox.p.y = fixed2float(path_bbox.p.y);
+ bbox.q.x = fixed2float(path_bbox.q.x);
+ bbox.q.y = fixed2float(path_bbox.q.y);
+
+ code = gs_bbox_transform_inverse(&bbox, &ctm_only(pgs), &group_stroke_box);
+ if (code < 0)
+ return code;
+
+ /* See if overprint is enabled for both stroke and fill AND if ca == CA */
+ if (pgs->fillconstantalpha == pgs->strokeconstantalpha &&
+ pgs->overprint && pgs->stroke_overprint &&
+ dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) {
+ /* Push a non-isolated non-knockout group with alpha = 1.0 and
+ compatible overprint mode. Group will be composited with
+ original alpha and blend mode */
+ params.Isolated = false;
+ params.group_color = UNKNOWN;
+ params.Knockout = false;
+
+ /* non-isolated non-knockout group pushed with original alpha and blend mode */
+ code = gs_begin_transparency_group(pgs, &params, &group_stroke_box, PDF14_BEGIN_TRANS_GROUP);
+ if (code < 0)
+ return code;
+
+ /* Change alpha to 1.0 and blend mode to compatible overprint for actual drawing */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+
+ /* Do fill */
+ if (pgs->fillconstantalpha > 0.0) {
+ code = pdf14_clist_fill_path(dev, pgs, ppath, params_fill, pdevc_fill, pcpath);
+ if (code < 0)
+ goto cleanup;
+ }
+
+ /* Do stroke */
+ if (pgs->strokeconstantalpha > 0.0) {
+ code = pdf14_clist_stroke_path(dev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
+ if (code < 0)
+ goto cleanup;
+ }
+
+ } else {
+ /* Push a non-isolated knockout group. Do not change the alpha or
+ blend modes */
+ params.Isolated = false;
+ params.group_color = UNKNOWN;
+ params.Knockout = true;
+
+ /* non-isolated knockout group is pushed with alpha = 1.0 and Normal blend mode */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+
+ code = gs_begin_transparency_group(pgs, &params, &group_stroke_box, PDF14_BEGIN_TRANS_GROUP);
+ /* restore blend mode for actual drawing in the group */
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ if (code < 0) {
+ (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
+ return code;
+ }
+
+ if (pgs->fillconstantalpha > 0.0) {
+ (void)gs_setopacityalpha(pgs, pgs->fillconstantalpha); /* Can never fail */
+
+ /* If we are in an overprint situation, set the blend mode to compatible
+ overprint */
+ if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+
+ code = pdf14_clist_fill_path(dev, pgs, ppath, params_fill, pdevc_fill, pcpath);
+ if (code < 0)
+ goto cleanup;
+
+ if (pgs->overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+ }
+
+ if (pgs->strokeconstantalpha > 0.0) {
+ (void)gs_setopacityalpha(pgs, pgs->strokeconstantalpha); /* Can never fail */
+ if (pgs->stroke_overprint && dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE)
+ (void)gs_setblendmode(pgs, BLEND_MODE_CompatibleOverprint); /* Can never fail */
+
+ code = pdf14_clist_stroke_path(dev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
+ if (code < 0)
+ goto cleanup;
+ }
}
- update_lop_for_pdf14(&new_pgs, pdcolor);
+cleanup:
+ /* Now during the pop do the compositing with alpha of 1.0 and normal blend */
+ (void)gs_setopacityalpha(pgs, 1.0); /* Can never fail */
+ (void)gs_setblendmode(pgs, BLEND_MODE_Normal); /* Can never fail */
+
+ /* Restore where we were. If an error occured while in the group push
+ return that error code but try to do the cleanup */
+ code2 = gs_end_transparency_group(pgs);
+ if (code2 < 0) {
+ /* At this point things have gone very wrong. We should just shut down */
+ code = gs_abort_pdf14trans_device(pgs);
+ return code2;
+ }
+
+ /* Restore if there were any changes */
+ (void)gs_setopacityalpha(pgs, opacity); /* Can never fail */
+ (void)gs_setblendmode(pgs, blend_mode); /* Can never fail */
+
+ return code;
+}
+
+/*
+ * fill_path routine for the PDF 1.4 transaprency compositor device for
+ * writing the clist.
+ */
+static int
+pdf14_clist_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *params_fill, const gx_drawing_color *pdevc_fill,
+ const gx_stroke_params *params_stroke, const gx_drawing_color *pdevc_stroke,
+ const gx_clip_path *pcpath)
+{
+ pdf14_clist_device * pdev = (pdf14_clist_device *)dev;
+ gs_gstate new_pgs = *pgs;
+ int code;
+
+ if ((pgs->fillconstantalpha == 0.0 && pgs->strokeconstantalpha == 0.0) ||
+ (pgs->ctm.xx == 0.0 && pgs->ctm.xy == 0.0 && pgs->ctm.yx == 0.0 && pgs->ctm.yy == 0.0))
+ return 0;
+
+ /*
+ * Ensure that that the PDF 1.4 reading compositor will have the current
+ * blending parameters. This is needed since the fill_rectangle routines
+ * do not have access to the gs_gstate. Thus we have to pass any
+ * changes explictly.
+ */
+ code = pdf14_clist_update_params(pdev, pgs, false, NULL);
+ if (code < 0)
+ return code;
+ /* If we are doing a shading fill or stroke, the clist can't
+ deal with this and end up in the pdf_fill_stroke operation.
+ We will need to break up the fill stroke now and do
+ the appropriate group pushes and set up. */
+
+ if ((pdevc_fill != NULL && gx_dc_is_pattern2_color(pdevc_fill)) ||
+ (pdevc_stroke != NULL && gx_dc_is_pattern2_color(pdevc_stroke))) {
+ return pdf14_clist_fill_stroke_path_pattern_setup(dev, pgs, ppath,
+ params_fill, pdevc_fill, params_stroke, pdevc_stroke, pcpath);
+ }
+ update_lop_for_pdf14(&new_pgs, pdevc_fill);
new_pgs.trans_device = dev;
new_pgs.has_transparency = true;
- code = gx_forward_stroke_path(dev, &new_pgs, ppath, params, pdcolor, pcpath);
+ code = gx_forward_fill_stroke_path(dev, &new_pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
new_pgs.trans_device = NULL;
new_pgs.has_transparency = false;
- if (pinst != NULL){
- pinst->saved->trans_device = NULL;
- }
return code;
}
@@ -8599,6 +9628,18 @@ pdf14_clist_text_begin(gx_device * dev, gs_gstate * pgs,
if (code < 0)
return code;
+ /* Catch case where we already pushed a group and are trying to push another one.
+ In that case, we will pop the current one first, as we don't want to be left
+ with it. Note that if we have a BT and no other BTs or ETs then this issue
+ will not be caught until we do the put_image and notice that the stack is not
+ empty. */
+ if (pdev->text_group == PDF14_TEXTGROUP_MISSING_ET) {
+ code = gs_end_transparency_group(pgs);
+ if (code < 0)
+ return code;
+ pdev->text_group = PDF14_TEXTGROUP_BT_NOT_PUSHED;
+ }
+
/* We may need to push a non-isolated transparency group if the following
is true.
1) We are not currently in one that we pushed for text. This is
@@ -8611,7 +9652,7 @@ pdf14_clist_text_begin(gx_device * dev, gs_gstate * pgs,
gs_currenttextrenderingmode(pgs) != 3 && /* don't bother with invisible text */
pdev->text_group == PDF14_TEXTGROUP_BT_NOT_PUSHED) {
if (draw) {
- code = pdf14_push_text_group(dev, pgs, path, pcpath, blend_mode, opacity, true);
+ code = pdf14_push_text_group(dev, pgs, blend_mode, opacity, true);
if (code == 0)
pdev->text_group = PDF14_TEXTGROUP_BT_PUSHED; /* Needed during clist writing */
}
@@ -9098,8 +10139,10 @@ c_pdf14trans_get_cropping(const gs_composite_t *pcte, int *ry, int *rheight,
pdf14_compute_group_device_int_rect(&pdf14pct->params.ctm,
&pdf14pct->params.bbox, &rect);
/* We have to crop this by the parent object and worry about the BC outside
- the range, except for image SMask which don't affect areas outside the image */
- if ( pdf14pct->params.GrayBackground == 1.0 || pdf14pct->params.mask_is_image) {
+ the range, except for image SMask which don't affect areas outside the image.
+ The presence of a transfer function opens the possibility of issues with this */
+ if (pdf14pct->params.mask_is_image || (pdf14pct->params.GrayBackground == 1.0 &&
+ pdf14pct->params.function_is_identity)) {
/* In this case there will not be a background effect to
worry about. The mask will not have any effect outside
the bounding box. This is NOT the default or common case. */
@@ -9193,7 +10236,7 @@ pdf14_spot_get_color_comp_index(gx_device *dev, const char *pname,
We need the real target procs */
if (target_get_color_comp_index == pdf14_cmykspot_get_color_comp_index)
target_get_color_comp_index =
- ((pdf14_clist_device *)pdev)->saved_target_get_color_comp_index;
+ ((pdf14_clist_device *)pdev)->saved_target_get_color_comp_index;
/*
* If this is not a separation name then simply forward it to the target
* device.
@@ -9214,6 +10257,9 @@ pdf14_spot_get_color_comp_index(gx_device *dev, const char *pname,
return comp_index - offset;
/*
* If we do not know this color, check if the output (target) device does.
+ * Note that if the target device has ENABLE_AUTO_SPOT_COLORS this will add
+ * the colorant so we will only get < 0 returned when we hit the max. for
+ * the target device.
*/
comp_index = (*target_get_color_comp_index)(tdev, pname, name_size, component_type);
/*
@@ -9225,14 +10271,20 @@ pdf14_spot_get_color_comp_index(gx_device *dev, const char *pname,
/*
* This is a new colorant. Add it to our list of colorants.
+ * The limit accounts for the number of process colors (at least 4).
*/
- if (pseparations->num_separations < GX_DEVICE_COLOR_MAX_COMPONENTS - 1) {
+ if ((pseparations->num_separations + 1) <
+ (GX_DEVICE_COLOR_MAX_COMPONENTS - max(num_process_colors, 4))) {
int sep_num = pseparations->num_separations++;
int color_component_number;
byte * sep_name;
sep_name = gs_alloc_bytes(dev->memory->stable_memory,
name_size, "pdf14_spot_get_color_comp_index");
+ if (sep_name == NULL) {
+ pseparations->num_separations--; /* we didn't add it */
+ return -1;
+ }
memcpy(sep_name, pname, name_size);
pseparations->names[sep_num].size = name_size;
pseparations->names[sep_num].data = sep_name;
diff --git a/base/gdevp14.h b/base/gdevp14.h
index 34991939..e4d4dfaa 100644
--- a/base/gdevp14.h
+++ b/base/gdevp14.h
@@ -34,6 +34,12 @@ typedef enum {
PDF14_DeviceCustom = 4
} pdf14_default_colorspace_t;
+typedef enum {
+ PDF14_OP_STATE_NONE = 0,
+ PDF14_OP_STATE_FILL = 1,
+ PDF14_OP_STATE_STROKE = 2,
+} PDF14_OP_FS_STATE;
+
/*
* This structure contains procedures for processing routine which differ
* between the different blending color spaces.
@@ -205,16 +211,49 @@ typedef struct pdf14_device_s {
float opacity;
float shape;
float alpha; /* alpha = opacity * shape */
+ float fillconstantalpha;
+ float strokeconstantalpha;
gs_blend_mode_t blend_mode;
bool text_knockout;
bool overprint;
bool effective_overprint_mode;
+ bool stroke_effective_op_mode;
+ bool stroke_overprint;
int text_group;
gx_color_index drawn_comps; /* Used for overprinting. Passed from overprint compositor */
+ gx_color_index drawn_comps_fill; /* selected by color_is_fill */
+ gx_color_index drawn_comps_stroke;
+ PDF14_OP_FS_STATE op_state;
gx_device * pclist_device;
bool free_devicen; /* Used to avoid freeing a deviceN parameter from target clist device */
bool sep_device;
bool using_blend_cs;
+
+ /* We now have some variables to help us determine whether
+ * we are in an SMask or not. Firstly, we have in_smask_construction,
+ * initially 0, incremented whenever we begin smask in the compositor,
+ * and decremented whenever we finish one. Thus this being non-zero
+ * implies we are in the 'construction' phase of at least one smask.
+ */
+ int in_smask_construction;
+ /* Next, we have smask_constructed. Again, initially 0. This is set
+ * to 1 whenever in_smask_construction returns to 0. It is reset to
+ * 0 on the next transparency group push (which takes possession of
+ * the smask that was just created. Thus this being 1 implies
+ * we have just constructed an smask, but not used it yet. */
+ int smask_constructed;
+ /* Finally, then we have depth_within_smask. This is used to keep the
+ * count of how many times we need to pop a transparency group to
+ * finish being governed by an smask. To keep this figure, we watch
+ * pushes of new transparency groups. On each such push, if
+ * smask_constructed is true, or depth_within_smask is already non-zero,
+ * we increment depth_within_smask. (i.e. whenever we start a group
+ * that will be governed by (and take possession of) an smask, or whenever
+ * we are already being governed by an smask, we know that we've just
+ * increased our nested depth by 1). Whenever we pop a group and it is
+ * non zero, we decrement it.
+ */
+ int depth_within_smask;
const gx_color_map_procs *(*save_get_cmap_procs)(const gs_gstate *,
const gx_device *);
gx_device_color_info saved_target_color_info;
diff --git a/base/gdevprn.c b/base/gdevprn.c
index 3518ce6f..9d5c9e9f 100644
--- a/base/gdevprn.c
+++ b/base/gdevprn.c
@@ -1699,22 +1699,28 @@ gdev_prn_get_bits(gx_device_printer * pdev, int y, byte * str, byte ** actual_da
}
/* Copy scan lines to a buffer. Return the number of scan lines, */
/* or <0 if error. This procedure is DEPRECATED. */
+/* Some old and contrib drivers ignore error codes, so make sure and fill */
+/* remaining lines if we get an error (and for lines past end of page). */
int
gdev_prn_copy_scan_lines(gx_device_printer * pdev, int y, byte * str, uint size)
{
uint line_size = gdev_prn_raster(pdev);
- int count = size / line_size;
- int i;
+ int requested_count = size / line_size;
+ int i, count;
+ int code = 0;
byte *dest = str;
- count = min(count, pdev->height - y);
+ /* Clamp count between 0 and remaining lines on page so we don't return < 0 */
+ /* unless gdev_prn_get_bits returns an error */
+ count = max(0, min(requested_count, pdev->height - y));
for (i = 0; i < count; i++, dest += line_size) {
- int code = gdev_prn_get_bits(pdev, y + i, dest, NULL);
-
- if (code < 0)
- return code;
+ code = gdev_prn_get_bits(pdev, y + i, dest, NULL);
+ if (code < 0)
+ break; /* will fill remaining lines and return code outside the loop */
}
- return count;
+ /* fill remaining lines with 0's to prevent printing garbage */
+ memset(dest, 0, line_size * (requested_count - i));
+ return (code < 0 ) ? code : count;
}
/* Close the current page. */
diff --git a/base/gdevsclass.c b/base/gdevsclass.c
index 0e2bf3a8..60f110c4 100644
--- a/base/gdevsclass.c
+++ b/base/gdevsclass.c
@@ -894,6 +894,17 @@ int default_subclass_process_page(gx_device *dev, gx_process_page_options_t *opt
return 0;
}
+int default_subclass_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ if (dev->child)
+ return dev_proc(dev->child, fill_stroke_path)(dev->child, pgs, ppath, fill_params, pdcolor_fill,
+ stroke_params, pdcolor_stroke, pcpath);
+ return 0;
+}
+
int default_subclass_transform_pixel_region(gx_device *dev, transform_pixel_region_reason reason, transform_pixel_region_data *data)
{
if (dev->child)
diff --git a/base/gdevsclass.h b/base/gdevsclass.h
index ada3a4e3..cc7a4359 100644
--- a/base/gdevsclass.h
+++ b/base/gdevsclass.h
@@ -102,6 +102,7 @@ dev_proc_strip_tile_rect_devn(default_subclass_strip_tile_rect_devn);
dev_proc_copy_alpha_hl_color(default_subclass_copy_alpha_hl_color);
dev_proc_process_page(default_subclass_process_page);
dev_proc_transform_pixel_region(default_subclass_transform_pixel_region);
+dev_proc_fill_stroke_path(default_subclass_fill_stroke_path);
void default_subclass_finalize(const gs_memory_t *cmem, void *vptr);
diff --git a/base/gdevvec.c b/base/gdevvec.c
index 351228bc..7136d76c 100644
--- a/base/gdevvec.c
+++ b/base/gdevvec.c
@@ -630,6 +630,11 @@ gdev_vector_dopath_init(gdev_vector_dopath_state_t *state,
gs_make_scaling(vdev->scale.x, vdev->scale.y, &state->scale_mat);
}
state->first = true;
+
+ /* This is purely to prevent Coverity from thinking gdev_vector_dopath()
+ could use uninitialised state->start.x. */
+ state->start.x = 0;
+ state->start.y = 0;
}
/*
diff --git a/base/genconf.c b/base/genconf.c
index 7537099b..de9afc95 100644
--- a/base/genconf.c
+++ b/base/genconf.c
@@ -353,7 +353,7 @@ static void mfree (void *om, const char *label);
int alloc_list(string_list_t *);
void free_list(string_list_t * list);
-void dev_file_name(char *);
+void dev_file_name(char *, int);
int process_replaces(config_t *);
int read_dev(config_t *, const char *);
int read_token(char *, int, const char **);
@@ -681,11 +681,12 @@ free_list(string_list_t * list)
/* If necessary, convert a .dev name to its file name. */
void
-dev_file_name(char *str)
+dev_file_name(char *str, int bufsize)
{
int len = strlen(str);
- if (len <= 4 || strcmp(".dev", str + len - 4))
+ if ((len <= 4 || strcmp(".dev", str + len - 4))
+ && bufsize > len + 4)
strcat(str, ".dev");
}
@@ -701,7 +702,7 @@ process_replaces(config_t * pconf)
strncpy(bufname, pconf->replaces.items[i].str, MAX_STR);
/* See if the file being replaced was included. */
- dev_file_name(bufname);
+ dev_file_name(bufname, MAX_STR + 1);
for (j = 0; j < pconf->file_names.count; ++j) {
const char *fname = pconf->file_names.items[j].str;
@@ -968,7 +969,7 @@ pre: sprintf(templat, pat, pconf->name_prefix);
pat = "image_type_(%%s,%simage_type_%%s)";
} else if (IS_CAT("include")) {
strcpy(str, item);
- dev_file_name(str);
+ dev_file_name(str, MAX_STR);
return read_dev(pconf, str);
} else if (IS_CAT("init")) {
pat = "init_(%s%%s_init)";
diff --git a/base/gp.h b/base/gp.h
index 5e5d2d25..948bbdb3 100644
--- a/base/gp.h
+++ b/base/gp.h
@@ -334,7 +334,11 @@ gp_rewind(gp_file *f) {
char *gp_fgets(char *buffer, size_t n, gp_file *f);
-int gp_fprintf(gp_file *f, const char *fmt, ...);
+int gp_fprintf(gp_file *f, const char *fmt, ...)
+#ifdef __GNUC__
+ __attribute__ ((format (__printf__, 2, 3)))
+#endif
+ ;
/* ------ Reading from stdin, unbuffered if possible ------ */
@@ -388,7 +392,7 @@ extern const char gp_current_directory_name[];
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
/* This is always either "" or "b". */
-extern const char gp_fmode_binary_suffix[];
+extern const char* gp_fmode_binary_suffix;
/* Define the file modes for binary reading or writing. */
/* (This is just a convenience: they are "r" or "w" + the suffix.) */
diff --git a/base/gp_dosfs.c b/base/gp_dosfs.c
index 47db3e49..cd143535 100644
--- a/base/gp_dosfs.c
+++ b/base/gp_dosfs.c
@@ -64,7 +64,7 @@ const char gp_file_name_list_separator = ';';
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
-const char gp_fmode_binary_suffix[] = "b";
+const char* gp_fmode_binary_suffix = "b";
/* Define the file modes for binary reading or writing. */
const char gp_fmode_rb[] = "rb";
diff --git a/base/gp_ntfs.c b/base/gp_ntfs.c
index aaf183be..40bd1489 100644
--- a/base/gp_ntfs.c
+++ b/base/gp_ntfs.c
@@ -75,7 +75,7 @@ const char gp_file_name_list_separator = ';';
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
-const char gp_fmode_binary_suffix[] = "b";
+const char* gp_fmode_binary_suffix = "b";
/* Define the file modes for binary reading or writing. */
const char gp_fmode_rb[] = "rb";
diff --git a/base/gp_os2fs.c b/base/gp_os2fs.c
index f365f772..98c0bb90 100644
--- a/base/gp_os2fs.c
+++ b/base/gp_os2fs.c
@@ -64,7 +64,7 @@ const char gp_current_directory_name[] = ".";
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
-const char gp_fmode_binary_suffix[] = "b";
+const char* gp_fmode_binary_suffix = "b";
/* Define the file modes for binary reading or writing. */
const char gp_fmode_rb[] = "rb";
diff --git a/base/gp_psync.c b/base/gp_psync.c
index eebefa1d..3a7d6a4d 100644
--- a/base/gp_psync.c
+++ b/base/gp_psync.c
@@ -66,10 +66,15 @@ gp_semaphore_open(gp_semaphore * sema)
pt_semaphore_t * const sem = (pt_semaphore_t *)sema;
int scode;
-#ifdef MEMENTO_SQUEEZE_BUILD
- eprintf("Can't create semaphores when memory squeezing with forks\n");
- Memento_bt();
- return_error(gs_error_VMerror);
+#ifdef MEMENTO
+ if (Memento_squeezing()) {
+ /* If squeezing, we nobble all the locking functions to do nothing.
+ * We also ensure we never actually create threads (elsewhere),
+ * so this is still safe. */
+ memset(&sem->mutex, 0, sizeof(sem->mutex));
+ memset(&sem->cond, 0, sizeof(sem->cond));
+ return 0;
+ }
#endif
if (!sema)
@@ -93,6 +98,11 @@ gp_semaphore_close(gp_semaphore * sema)
pt_semaphore_t * const sem = (pt_semaphore_t *)sema;
int scode, scode2;
+#ifdef MEMENTO
+ if (Memento_squeezing())
+ return 0;
+#endif
+
scode = pthread_cond_destroy(&sem->cond);
scode2 = pthread_mutex_destroy(&sem->mutex);
if (scode == 0)
@@ -106,10 +116,13 @@ gp_semaphore_wait(gp_semaphore * sema)
pt_semaphore_t * const sem = (pt_semaphore_t *)sema;
int scode, scode2;
-#ifdef MEMENTO_SQUEEZE_BUILD
- eprintf("Can't create mutexes when memory squeezing with forks\n");
- Memento_bt();
- return_error(gs_error_VMerror);
+#ifdef MEMENTO
+ if (Memento_squeezing()) {
+ /* If squeezing, we nobble all the locking functions to do nothing.
+ * We also ensure we never actually create threads (elsewhere),
+ * so this is still safe. */
+ return 0;
+ }
#endif
scode = pthread_mutex_lock(&sem->mutex);
@@ -134,6 +147,11 @@ gp_semaphore_signal(gp_semaphore * sema)
pt_semaphore_t * const sem = (pt_semaphore_t *)sema;
int scode, scode2;
+#ifdef MEMENTO
+ if (Memento_squeezing())
+ return 0;
+#endif
+
scode = pthread_mutex_lock(&sem->mutex);
if (scode != 0)
return SEM_ERROR_CODE(scode);
@@ -178,15 +196,15 @@ gp_monitor_open(gp_monitor * mona)
pthread_mutexattr_t attr;
pthread_mutexattr_t *attrp = NULL;
-#ifdef MEMENTO_SQUEEZE_BUILD
- eprintf("Can't create monitors when memory squeezing with forks\n");
- Memento_bt();
- return_error(gs_error_VMerror);
-#endif
-
if (!mona)
return -1; /* monitors are not movable */
+#ifdef MEMENTO
+ if (Memento_squeezing()) {
+ memset(mona, 0, sizeof(*mona));
+ return 0;
+ }
+#endif
#ifdef GS_RECURSIVE_MUTEXATTR
attrp = &attr;
@@ -216,6 +234,11 @@ gp_monitor_close(gp_monitor * mona)
pthread_mutex_t * const mon = &((gp_pthread_recursive_t *)mona)->mutex;
int scode;
+#ifdef MEMENTO
+ if (Memento_squeezing())
+ return 0;
+#endif
+
scode = pthread_mutex_destroy(mon);
return SEM_ERROR_CODE(scode);
}
@@ -226,6 +249,12 @@ gp_monitor_enter(gp_monitor * mona)
pthread_mutex_t * const mon = (pthread_mutex_t *)mona;
int scode;
+#ifdef MEMENTO
+ if (Memento_squeezing()) {
+ return 0;
+ }
+#endif
+
#ifdef GS_RECURSIVE_MUTEXATTR
scode = pthread_mutex_lock(mon);
#else
@@ -256,6 +285,11 @@ gp_monitor_leave(gp_monitor * mona)
pthread_mutex_t * const mon = (pthread_mutex_t *)mona;
int scode = 0;
+#ifdef MEMENTO
+ if (Memento_squeezing())
+ return 0;
+#endif
+
#ifdef GS_RECURSIVE_MUTEXATTR
scode = pthread_mutex_unlock(mon);
#else
@@ -303,18 +337,20 @@ gp_thread_begin_wrapper(void *thread_data /* gp_thread_creation_closure_t * */)
int
gp_create_thread(gp_thread_creation_callback_t proc, void *proc_data)
{
- gp_thread_creation_closure_t *closure =
- (gp_thread_creation_closure_t *)malloc(sizeof(*closure));
+ gp_thread_creation_closure_t *closure;
pthread_t ignore_thread;
pthread_attr_t attr;
int code;
-#ifdef MEMENTO_SQUEEZE_BUILD
- eprintf("Can't create threads when memory squeezing with forks\n");
- Memento_bt();
- return_error(gs_error_VMerror);
+#ifdef MEMENTO
+ if (Memento_squeezing()) {
+ eprintf("Can't create threads when memory squeezing with forks\n");
+ Memento_bt();
+ return_error(gs_error_VMerror);
+ }
#endif
+ closure = (gp_thread_creation_closure_t *)malloc(sizeof(*closure));
if (!closure)
return_error(gs_error_VMerror);
closure->proc = proc;
diff --git a/base/gp_unifn.c b/base/gp_unifn.c
index cd621953..643f3973 100644
--- a/base/gp_unifn.c
+++ b/base/gp_unifn.c
@@ -26,9 +26,9 @@ const char gp_file_name_list_separator = ':';
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
#if (defined(__MINGW32__) && __MINGW32__ == 1) || (defined(__CYGWIN__) && __CYGWIN__ == 1)
-const char gp_fmode_binary_suffix[] = "b";
+const char* gp_fmode_binary_suffix = "b";
#else
-const char gp_fmode_binary_suffix[] = "";
+const char* gp_fmode_binary_suffix = "";
#endif
diff --git a/base/gp_unifs.c b/base/gp_unifs.c
index f0deeb2a..70752634 100644
--- a/base/gp_unifs.c
+++ b/base/gp_unifs.c
@@ -128,6 +128,10 @@ gp_open_scratch_file_impl(const gs_memory_t *mem,
}
}
#else
+ /* Coverity thinks that any use of mktemp() is insecure. But if we
+ reach here then there is no mkstemp() alternative available, so there's
+ not much we can do. Haven't been able to disable this - e.g. '//
+ coverity[SECURE_TEMP]' doesn't have any affect. */
mktemp(fname);
fp = gp_fopentemp(fname, mode);
#endif
@@ -191,16 +195,16 @@ int gp_pread_impl(char *buf, size_t count, gs_offset_t offset, FILE *f)
int c;
int64_t os, curroff = gp_ftell_impl(f);
if (curroff < 0) return curroff;
-
+
os = gp_fseek_impl(f, offset, 0);
if (os < 0) return os;
-
+
c = fread(buf, 1, count, f);
if (c < 0) return c;
-
+
os = gp_fseek_impl(f, curroff, 0);
if (os < 0) return os;
-
+
return c;
#endif
}
@@ -215,16 +219,16 @@ int gp_pwrite_impl(const char *buf, size_t count, gs_offset_t offset, FILE *f)
int c;
int64_t os, curroff = gp_ftell_impl(f);
if (curroff < 0) return curroff;
-
+
os = gp_fseek_impl(f, offset, 0);
if (os < 0) return os;
-
+
c = fwrite(buf, 1, count, f);
if (c < 0) return c;
-
+
os = gp_fseek_impl(f, curroff, 0);
if (os < 0) return os;
-
+
return c;
#endif
}
@@ -434,7 +438,6 @@ gp_enumerate_files_next_impl(gs_memory_t * mem, file_enum * pfen, char *ptr, uin
char *pattern = pfen->pattern;
int pathead = pfen->pathead;
int len;
- struct stat stbuf;
if (pfen->first_time) {
pfen->dirp = ((worklen == 0) ? opendir(".") : opendir(work));
@@ -501,31 +504,24 @@ gp_enumerate_files_next_impl(gs_memory_t * mem, file_enum * pfen, char *ptr, uin
/* Perhaps descend into subdirectories */
if (pathead < maxlen) {
- DIR *dp;
-
- if (((stat(work, &stbuf) >= 0)
- ? !stat_is_dir(stbuf)
- /* Couldn't stat it.
- * Well, perhaps it's a directory and
- * we'll be able to list it anyway.
- * If it isn't or we can't, no harm done. */
- : 0))
+ /* Using stat() to decide whether this item is a directory then opening
+ using opendir(), results in Coverity complaining about races. Se
+ instead we simple call opendir() immediately and look at whether it
+ succeeded. */
+ DIR *dp = opendir(work);
+ if (!dp) {
+ /* Not a directory. */
goto winner;
+ }
if (pfen->patlen == pathead + 1) { /* Listing "foo/?/" -- return this entry */
- /* if it's a directory. */
- if (!stat_is_dir(stbuf)) { /* Do directoryp test the hard way */
- dp = opendir(work);
- if (!dp)
- goto top;
- closedir(dp);
- }
+ closedir(dp);
work[len++] = '/';
goto winner;
}
+
/* >>> Should optimise the case in which the next level */
/* >>> of directory has no wildcards. */
- dp = opendir(work);
#ifdef DEBUG
{
char save_end = pattern[pathead];
@@ -536,10 +532,7 @@ gp_enumerate_files_next_impl(gs_memory_t * mem, file_enum * pfen, char *ptr, uin
pattern[pathead] = save_end;
}
#endif /* DEBUG */
- if (!dp)
- /* Can't list this one */
- goto top;
- else { /* Advance to the next directory-delimiter */
+ { /* Advance to the next directory-delimiter */
/* in pattern */
char *p;
dirstack *d;
@@ -642,11 +635,11 @@ bool gp_fseekable_impl(FILE *f)
{
struct stat s;
int fno;
-
+
fno = fileno(f);
if (fno < 0)
return(false);
-
+
if (fstat(fno, &s) < 0)
return(false);
diff --git a/base/gp_unix.c b/base/gp_unix.c
index ce4fa057..bd2745f9 100644
--- a/base/gp_unix.c
+++ b/base/gp_unix.c
@@ -16,6 +16,9 @@
/* Unix-specific routines for Ghostscript */
+#ifdef __MINGW32__
+# include "windows_.h"
+#endif
#include "pipe_.h"
#include "string_.h"
#include "time_.h"
@@ -353,7 +356,11 @@ void *gp_enumerate_fonts_init(gs_memory_t *mem)
*/
code = 0;
while ((dirstr = FcStrListNext(fdirlist)) != NULL && code >= 0) {
- code = gs_add_control_path(mem, gs_permit_file_reading, (char *)dirstr);
+ char dirstr2[gp_file_name_sizeof];
+ dirstr2[0] = '\0';
+ strncat(dirstr2, (char *)dirstr, gp_file_name_sizeof - 2);
+ strncat(dirstr2, "/", gp_file_name_sizeof - 1);
+ code = gs_add_control_path(mem, gs_permit_file_reading, (char *)dirstr2);
}
FcStrListDone(fdirlist);
if (code < 0) {
@@ -370,6 +377,12 @@ void *gp_enumerate_fonts_init(gs_memory_t *mem)
os = FcObjectSetBuild(FC_FILE, FC_OUTLINE,
FC_FAMILY, FC_WEIGHT, FC_SLANT,
NULL);
+ /* We free the data allocated by FcFontList() when
+ gp_enumerate_fonts_free() calls FcFontSetDestroy(), but FcFontSetDestroy()
+ has been seen to leak blocks according to valgrind and asan. E.g. this can
+ be seen by running:
+ ./sanbin/gs -dNODISPLAY -dBATCH -dNOPAUSE -c "/A_Font findfont"
+ */
state->font_list = FcFontList(0, pat, os);
FcPatternDestroy(pat);
FcObjectSetDestroy(os);
@@ -466,3 +479,54 @@ void gp_enumerate_fonts_free(void *enum_state)
}
#endif
}
+
+/* A function to decode the next codepoint of the supplied args from the
+ * local windows codepage, or -1 for EOF.
+ * (copied from gp_win32.c)
+ */
+
+#ifdef __MINGW32__
+int
+gp_local_arg_encoding_get_codepoint(FILE *file, const char **astr)
+{
+ int len;
+ int c;
+ char arg[3];
+ wchar_t unicode[2];
+ char utf8[4];
+
+ if (file) {
+ c = fgetc(file);
+ if (c == EOF)
+ return EOF;
+ } else if (**astr) {
+ c = *(*astr)++;
+ if (c == 0)
+ return EOF;
+ } else {
+ return EOF;
+ }
+
+ arg[0] = c;
+ if (IsDBCSLeadByte(c)) {
+ if (file) {
+ c = fgetc(file);
+ if (c == EOF)
+ return EOF;
+ } else if (**astr) {
+ c = *(*astr)++;
+ if (c == 0)
+ return EOF;
+ }
+ arg[1] = c;
+ len = 2;
+ } else {
+ len = 1;
+ }
+
+ /* Convert the string (unterminated in, unterminated out) */
+ len = MultiByteToWideChar(CP_ACP, 0, arg, len, unicode, 2);
+
+ return unicode[0];
+}
+#endif
diff --git a/base/gp_vms.c b/base/gp_vms.c
index 120f8402..a69fb8e8 100644
--- a/base/gp_vms.c
+++ b/base/gp_vms.c
@@ -212,7 +212,7 @@ const char gp_current_directory_name[] = "[]";
/* Define the string to be concatenated with the file mode */
/* for opening files without end-of-line conversion. */
-const char gp_fmode_binary_suffix[] = "";
+const char* gp_fmode_binary_suffix = "";
/* Define the file modes for binary reading or writing. */
const char gp_fmode_rb[] = "r";
diff --git a/base/gpmisc.c b/base/gpmisc.c
index 9cca5d50..34cd71fb 100644
--- a/base/gpmisc.c
+++ b/base/gpmisc.c
@@ -743,7 +743,7 @@ gp_open_printer(const gs_memory_t *mem,
char fname[gp_file_name_sizeof],
int binary_mode)
{
- gp_file *file;
+ gp_file *file = NULL;
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gs_fs_list_t *fs = ctx->core->fs;
@@ -770,7 +770,7 @@ gp_open_scratch_file(const gs_memory_t *mem,
char *fname,
const char *mode)
{
- gp_file *file;
+ gp_file *file = NULL;
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gs_fs_list_t *fs = ctx->core->fs;
@@ -800,7 +800,7 @@ gp_open_scratch_file_rm(const gs_memory_t *mem,
char *fname,
const char *mode)
{
- gp_file *file;
+ gp_file *file = NULL;
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gs_fs_list_t *fs = ctx->core->fs;
@@ -969,7 +969,11 @@ validate(const gs_memory_t *mem,
const char *aend = path + strlen(path);
while (aend != a2 && !gs_file_name_check_separator(a2, 1, a2))
a2++;
- if (aend != a2)
+ /* If the control path ends in a directory separator and we've scanned
+ to the end of the candidate path with no further directory separators
+ found, we have a match
+ */
+ if (aend == a2)
/* PATH=abc/? pattern=abc/ */
goto found; /* Bingo! */
}
@@ -1008,48 +1012,88 @@ gp_validate_path_len(const gs_memory_t *mem,
const uint len,
const char *mode)
{
- char *buffer;
+ char *buffer, *bufferfull;
uint rlen;
int code = 0;
+ const char *cdirstr = gp_file_name_current();
+ int cdirstrl = strlen(cdirstr);
+ const char *dirsepstr = gp_file_name_separator();
+ int dirsepstrl = strlen(dirsepstr);
+ int prefix_len = cdirstrl + dirsepstrl;
/* mem->gs_lib_ctx can be NULL when we're called from mkromfs */
if (mem->gs_lib_ctx == NULL ||
mem->gs_lib_ctx->core->path_control_active == 0)
return 0;
+ /* For current directory accesses, we need handle both a "bare" name,
+ * and one with a cwd prefix (in Unix terms, both "myfile.ps" and
+ * "./myfile.ps".
+ *
+ * So we check up front if it's absolute, then just use that.
+ * If it includes cwd prefix, we try that, then remove the prefix
+ * and try again.
+ * If it doesn't include the cwd prefix, we try it, then add the
+ * prefix and try again.
+ * To facilitate that, we allocate a large enough buffer to take
+ * the path *and* the prefix up front.
+ */
+ if (gp_file_name_is_absolute(path, len)) {
+ /* Absolute path, we don't need anything extra */
+ prefix_len = cdirstrl = dirsepstrl = 0;
+ }
+ else if (len > prefix_len && !memcmp(path, cdirstr, cdirstrl)
+ && !memcmp(path + cdirstrl, dirsepstr, dirsepstrl)) {
+ prefix_len = 0;
+ }
rlen = len+1;
- buffer = (char *)gs_alloc_bytes(mem->non_gc_memory, rlen, "gp_validate_path");
- if (buffer == NULL)
+ bufferfull = (char *)gs_alloc_bytes(mem->non_gc_memory, rlen + prefix_len, "gp_validate_path");
+ if (bufferfull == NULL)
return gs_error_VMerror;
+ buffer = bufferfull + prefix_len;
if (gp_file_name_reduce(path, (uint)len, buffer, &rlen) != gp_combine_success)
return gs_error_invalidfileaccess;
buffer[rlen] = 0;
- switch (mode[0])
- {
- case 'r': /* Read */
- code = validate(mem, buffer, gs_permit_file_reading);
- break;
- case 'w': /* Write */
- code = validate(mem, buffer, gs_permit_file_writing);
- break;
- case 'a': /* Append needs reading and writing */
- code = (validate(mem, buffer, gs_permit_file_reading) |
- validate(mem, buffer, gs_permit_file_writing));
- break;
- case 'c': /* "Control" */
- code = validate(mem, buffer, gs_permit_file_control);
- break;
- case 't': /* "Rename to" */
- code = (validate(mem, buffer, gs_permit_file_writing) |
- validate(mem, buffer, gs_permit_file_control));
+ while (1) {
+ switch (mode[0])
+ {
+ case 'r': /* Read */
+ code = validate(mem, buffer, gs_permit_file_reading);
+ break;
+ case 'w': /* Write */
+ code = validate(mem, buffer, gs_permit_file_writing);
+ break;
+ case 'a': /* Append needs reading and writing */
+ code = (validate(mem, buffer, gs_permit_file_reading) |
+ validate(mem, buffer, gs_permit_file_writing));
+ break;
+ case 'c': /* "Control" */
+ code = validate(mem, buffer, gs_permit_file_control);
+ break;
+ case 't': /* "Rename to" */
+ code = (validate(mem, buffer, gs_permit_file_writing) |
+ validate(mem, buffer, gs_permit_file_control));
+ break;
+ default:
+ errprintf(mem, "gp_validate_path: Unknown mode='%s'\n", mode);
+ code = gs_note_error(gs_error_invalidfileaccess);
+ }
+ if (code < 0 && prefix_len > 0 && buffer > bufferfull) {
+ buffer = bufferfull;
+ memcpy(buffer, cdirstr, cdirstrl);
+ memcpy(buffer + cdirstrl, dirsepstr, dirsepstrl);
+ continue;
+ }
+ else if (code < 0 && cdirstrl > 0 && prefix_len == 0 && buffer == bufferfull) {
+ buffer = bufferfull + cdirstrl + dirsepstrl;
+ continue;
+ }
break;
- default:
- errprintf(mem, "gp_validate_path: Unknown mode='%s'\n", mode);
- code = gs_note_error(gs_error_invalidfileaccess);
}
- gs_free_object(mem->non_gc_memory, buffer, "gp_validate_path");
+
+ gs_free_object(mem->non_gc_memory, bufferfull, "gp_validate_path");
#ifdef EACCES
if (code == gs_error_invalidfileaccess)
errno = EACCES;
diff --git a/base/gs.mak b/base/gs.mak
index ffb31e36..d1b32355 100644
--- a/base/gs.mak
+++ b/base/gs.mak
@@ -269,11 +269,11 @@ gconfigd_h=$(GLGENDIR)$(D)gconfigd.h
iconfxx_h=$(GLGENDIR)$(D)iconfxx.h
iconfig_h=$(GLGENDIR)$(D)iconfig.h
-all default : $(GS_XE) $(PCL_XPS_TARGETS) $(GS_SHARED_OBJS) $(MAKEDIRSTOP) $(GS_MAK) $(MAKEDIRS)
+all default : $(GS_XE) $(PCL_XPS_PDL_TARGETS) $(GS_SHARED_OBJS) $(MAKEDIRSTOP) $(GS_MAK) $(MAKEDIRS)
$(NO_OP)
-experimental: all $(GPDL_TARGET)
- $(NO_OP)
+experimental: all
+ $(NO_OP)
# the distclean and maintainer-clean targets (if any)
# are the responsibility of the platform-specific
@@ -428,7 +428,7 @@ $(GLGENDIR)$(D)fdevs.tr: $(GS_MAK) $(ECHOGS_XE) $(GSPLAT_DEVS_ALL) $(FEATURE_DEV
$(EXP)$(ECHOGS_XE) -a $(GLGENDIR)$(D)fdevs.tr -+ $(FEATURE_DEVS_EXTRA)
$(GLGENDIR)$(D)devdevs.tr: $(GS_MAK) $(ECHOGS_XE) $(DEVICE_DEVS_ALL) $(MAKEDIRS)
- $(EXP)$(ECHOGS_XE) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS)
+ $(EXP)$(ECHOGS_XE) -w $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS)
$(EXP)$(ECHOGS_XE) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS1)
$(EXP)$(ECHOGS_XE) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS2)
$(EXP)$(ECHOGS_XE) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS3)
diff --git a/base/gsalloc.c b/base/gsalloc.c
index 89fb91e7..c9c3ba0e 100644
--- a/base/gsalloc.c
+++ b/base/gsalloc.c
@@ -865,8 +865,8 @@ ialloc_add_clump(gs_ref_memory_t *imem, ulong space, client_name_t cname)
/* Allow acquisition of this clump. */
imem->is_controlled = false;
imem->large_size = imem->clump_size;
- imem->limit = max_long;
- imem->gc_status.max_vm = max_long;
+ imem->limit = max_size_t;
+ imem->gc_status.max_vm = max_size_t;
/* Acquire the clump. */
cp = alloc_add_clump(imem, space, cname);
@@ -960,7 +960,7 @@ ialloc_set_limit(register gs_ref_memory_t * mem)
0);
if (mem->gc_status.enabled) {
- ulong limit = mem->gc_allocated + mem->gc_status.vm_threshold;
+ size_t limit = mem->gc_allocated + mem->gc_status.vm_threshold;
if (limit < mem->previous_status.allocated)
mem->limit = 0;
@@ -971,12 +971,12 @@ ialloc_set_limit(register gs_ref_memory_t * mem)
} else
mem->limit = min(max_allocated, mem->gc_allocated + FORCE_GC_LIMIT);
if_debug7m('0', (const gs_memory_t *)mem,
- "[0]space=%d, max_vm=%ld, prev.alloc=%ld, enabled=%d, "
- "gc_alloc=%ld, threshold=%ld => limit=%ld\n",
- mem->space, (long)mem->gc_status.max_vm,
- (long)mem->previous_status.allocated,
- mem->gc_status.enabled, (long)mem->gc_allocated,
- (long)mem->gc_status.vm_threshold, (long)mem->limit);
+ "[0]space=%d, max_vm=%"PRIdSIZE", prev.alloc=%"PRIdSIZE", enabled=%d, "
+ "gc_alloc=%"PRIdSIZE", threshold=%"PRIdSIZE" => limit=%"PRIdSIZE"\n",
+ mem->space, mem->gc_status.max_vm,
+ mem->previous_status.allocated,
+ mem->gc_status.enabled, mem->gc_allocated,
+ mem->gc_status.vm_threshold, mem->limit);
}
struct free_data
@@ -2476,9 +2476,9 @@ alloc_acquire_clump(gs_ref_memory_t * mem, size_t csize, bool has_strings,
return 0;
}
if_debug4m('0', (const gs_memory_t *)mem,
- "[0]signaling space=%d, allocated=%ld, limit=%ld, requested=%ld\n",
- mem->space, (long)mem->allocated,
- (long)mem->limit, (long)mem->gc_status.requested);
+ "[0]signaling space=%d, allocated=%"PRIdSIZE", limit=%"PRIdSIZE", requested=%"PRIdSIZE"\n",
+ mem->space, mem->allocated,
+ mem->limit, mem->gc_status.requested);
mem->gs_lib_ctx->gcsignal = mem->gc_status.signal_value;
}
}
diff --git a/base/gsbitcom.c b/base/gsbitcom.c
index 5af03642..6c8c78fe 100644
--- a/base/gsbitcom.c
+++ b/base/gsbitcom.c
@@ -13,6 +13,7 @@
CA 94945, U.S.A., +1(415)492-9861, for further information.
*/
+#include <assert.h>
/* Oversampled bitmap compression */
#include "std.h"
@@ -128,6 +129,34 @@ bits_compress_scaled(const byte * src, int srcx, uint width, uint height,
byte *d = dest;
uint h;
+ /* Assert some preconditions are satisfied: */
+
+ /* log2_x and log2_y must each be 0, 1 or 2. */
+ assert(log2_x >= 0 && log2_x < 3);
+ assert(log2_y >= 0 && log2_y < 3);
+
+ /* srcx and width must be multiple of xscale. */
+ assert(srcx % xscale == 0);
+ assert(width % xscale == 0);
+
+ /* height must be multiple of yscale. */
+ assert(height % yscale == 0);
+
+ /* because xscale is 1, 2 or 4 and srcx is a multiple of xscale,
+ in_shift_initial ends up being constrained as follows: */
+ if (log2_x == 0) {
+ /* in_shift_initial is {0,1,2,3,4,5,6,7]} */
+ assert(in_shift_initial >= 0 && in_shift_initial < 8);
+ }
+ if (log2_x == 1) {
+ /* in_shift_initial is {0,2,4,6}. */
+ assert(in_shift_initial >= 0 && in_shift_initial < 7 && in_shift_initial % 2 == 0);
+ }
+ if (log2_x == 2) {
+ /* in_shift_initial is {0,4} */
+ assert(in_shift_initial == 0 || in_shift_initial == 4);
+ }
+
for (h = height; h; srow += sskip, h -= yscale) {
const byte *s = srow;
@@ -196,8 +225,11 @@ bits_compress_scaled(const byte * src, int srcx, uint width, uint height,
for (index = 0, count = 0; index != sskip;
index += sraster
- )
+ ) {
+ /* Coverity 94484 incorrectly thinks in_shift can be negative. */
+ /* coverity[negative_shift] */
count += half_byte_1s[(s[index] >> in_shift) & mask];
+ }
if (count != 0 && table[count] == 0) { /* Look at adjacent cells to help prevent */
/* dropouts. */
uint orig_count = count;
diff --git a/base/gscdefs.h b/base/gscdefs.h
index 6c933503..5691c2e8 100644
--- a/base/gscdefs.h
+++ b/base/gscdefs.h
@@ -27,7 +27,7 @@
#ifndef GS_COPYRIGHT
# define GS_COPYRIGHT\
- "Copyright (C) 2019 Artifex Software, Inc. All rights reserved."
+ "Copyright (C) 2020 Artifex Software, Inc. All rights reserved."
#endif
#ifndef GS_PRODUCTFAMILY
diff --git a/base/gscdevn.c b/base/gscdevn.c
index d4f5aa32..5a4187cb 100644
--- a/base/gscdevn.c
+++ b/base/gscdevn.c
@@ -110,7 +110,7 @@ gs_cspace_new_DeviceN(
gs_color_space *pcs;
gs_device_n_params *pcsdevn;
char **pnames;
- int code;
+ int i, code;
if (palt_cspace == 0 || !palt_cspace->type->can_be_alt_space)
return_error(gs_error_rangecheck);
@@ -134,12 +134,13 @@ gs_cspace_new_DeviceN(
return code;
}
pnames = (char **)gs_alloc_bytes(pcsdevn->mem, num_components * sizeof(char *), "gs_cspace_new_DeviceN");
- memset(pnames, 0x00, num_components * sizeof(char *));
if (pnames == 0) {
gs_free_object(pmem, pcsdevn->map, ".gs_cspace_build_DeviceN(map)");
gs_free_object(pmem, pcs, "gs_cspace_new_DeviceN");
return_error(gs_error_VMerror);
}
+ for (i=0; i<num_components; i++)
+ pnames[i] = NULL; /* empty string for check_DeviceN_component_names */
pcs->base_space = palt_cspace;
rc_increment_cs(palt_cspace);
pcsdevn->names = pnames;
@@ -545,7 +546,7 @@ check_DeviceN_component_names(const gs_color_space * pcs, gs_gstate * pgs)
int num_comp = pcs->params.device_n.num_components;
int i;
int colorant_number;
- byte * pname;
+ const char *pname;
uint name_size;
gs_devicen_color_map * pcolor_component_map
= &pgs->color_component_map;
@@ -581,8 +582,10 @@ check_DeviceN_component_names(const gs_color_space * pcs, gs_gstate * pgs)
/*
* Get the character string and length for the component name.
*/
- pname = (byte *)names[i];
- name_size = strlen(names[i]);
+ pname = names[i];
+ if (pname == NULL)
+ pname = "";
+ name_size = strlen(pname);
/*
* Compare the colorant name to the device's. If the device's
* compare routine returns GX_DEVICE_COLOR_MAX_COMPONENTS then the
@@ -590,13 +593,13 @@ check_DeviceN_component_names(const gs_color_space * pcs, gs_gstate * pgs)
* SeparationOrder list.
*/
colorant_number = (*dev_proc(dev, get_color_comp_index))
- (dev, (const char *)pname, name_size, SEPARATION_NAME);
+ (dev, pname, name_size, SEPARATION_NAME);
if (colorant_number >= 0) { /* If valid colorant name */
pcolor_component_map->color_map[i] =
(colorant_number == GX_DEVICE_COLOR_MAX_COMPONENTS) ? -1
: colorant_number;
} else {
- if (strncmp((char *) pname, "None", name_size) != 0) {
+ if (strncmp(pname, "None", name_size) != 0) {
non_match = true;
} else {
/* Device N includes one or more None Entries. We can't reduce
@@ -621,7 +624,7 @@ gx_check_process_names_DeviceN(gs_color_space * pcs, gs_gstate * pgs)
int i, num_comp, num_spots = 0, num_rgb_process = 0;
int num_cmyk_process = 0, num_other = 0;
char **names;
- byte *pname;
+ const char *pname;
uint name_size;
names = pcs->params.device_n.names;
@@ -629,21 +632,23 @@ gx_check_process_names_DeviceN(gs_color_space * pcs, gs_gstate * pgs)
/* Step through the color space colorants */
for (i = 0; i < num_comp; i++) {
- pname = (byte *)names[i];
- name_size = strlen(names[i]);
+ pname = names[i];
+ if (pname == NULL)
+ pname = "";
+ name_size = strlen(pname);
/* Classify */
- if (strncmp((char *)pname, "None", name_size) == 0) {
+ if (strncmp(pname, "None", name_size) == 0) {
num_other++;
} else {
- if (strncmp((char *)pname, "Cyan", name_size) == 0 ||
- strncmp((char *)pname, "Magenta", name_size) == 0 ||
- strncmp((char *)pname, "Yellow", name_size) == 0 ||
- strncmp((char *)pname, "Black", name_size) == 0) {
+ if (strncmp(pname, "Cyan", name_size) == 0 ||
+ strncmp(pname, "Magenta", name_size) == 0 ||
+ strncmp(pname, "Yellow", name_size) == 0 ||
+ strncmp(pname, "Black", name_size) == 0) {
num_cmyk_process++;
- } else if (strncmp((char *)pname, "Red", name_size) == 0 ||
- strncmp((char *)pname, "Green", name_size) == 0 ||
- strncmp((char *)pname, "Blue", name_size) == 0) {
+ } else if (strncmp(pname, "Red", name_size) == 0 ||
+ strncmp(pname, "Green", name_size) == 0 ||
+ strncmp(pname, "Blue", name_size) == 0) {
num_rgb_process++;
} else {
num_spots++;
@@ -733,14 +738,18 @@ gx_set_overprint_DeviceN(const gs_color_space * pcs, gs_gstate * pgs)
if ( base_type->index == gs_color_space_index_DeviceCMYK )
return base_type->set_overprint( pcs->base_space, pgs );
else
- return gx_spot_colors_set_overprint( pcs->base_space, pgs);
+ return gx_set_no_overprint(pgs);
} else {
gs_overprint_params_t params;
- if ((params.retain_any_comps = pgs->overprint)) {
+
+ params.retain_any_comps = (pgs->overprint && pgs->is_fill_color) ||
+ (pgs->stroke_overprint && !pgs->is_fill_color);
+
+ if (params.retain_any_comps) {
int i, ncomps = pcs->params.device_n.num_components;
- params.retain_spot_comps = false;
+ params.is_fill_color = pgs->is_fill_color; /* for fill_stroke */
params.drawn_comps = 0;
for (i = 0; i < ncomps; i++) {
int mcomp = pcmap->color_map[i];
@@ -750,7 +759,9 @@ gx_set_overprint_DeviceN(const gs_color_space * pcs, gs_gstate * pgs)
}
/* Only DeviceCMYK can use overprint mode */
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
+ params.op_state = OP_STATE_NONE;
+ params.is_fill_color =pgs->is_fill_color;
return gs_gstate_update_overprint(pgs, &params);
}
}
@@ -765,7 +776,7 @@ gx_final_DeviceN(const gs_color_space * pcs)
char **proc_names = pcs->params.device_n.process_names;
int k;
- for (k = 0; k > pcs->params.device_n.num_components; k++)
+ for (k = 0; k < pcs->params.device_n.num_components; k++)
gs_free_object(mem, pcs->params.device_n.names[k], "gx_final_DeviceN");
gs_free_object(mem, pcs->params.device_n.names, "gx_final_DeviceN");
@@ -812,7 +823,10 @@ gx_serialize_DeviceN(const gs_color_space * pcs, stream * s)
if (code < 0)
return code;
for (n=0;n < p->num_components;n++) {
- code = sputs(s, (const byte *)p->names[n], strlen(p->names[n]) + 1, &m);
+ const char *name = p->names[n];
+ if (name == NULL)
+ name = "";
+ code = sputs(s, (const byte *)name, strlen(name) + 1, &m);
if (code < 0)
return code;
}
diff --git a/base/gscolor.c b/base/gscolor.c
index edf31994..81effa94 100644
--- a/base/gscolor.c
+++ b/base/gscolor.c
@@ -217,12 +217,14 @@ gx_set_device_color_1(gs_gstate * pgs)
{
gs_color_space *pcs;
- /* Get the current overprint setting so that it can be properly restored.
- No need to fool with the mode */
- int overprint = pgs->overprint;
+ /* We need to set the stroke *and* the fill overprint off
+ to ensure the op compositor is disabled. They will be
+ restored when the graphic state is restored */
+ if (pgs->stroke_overprint)
+ gs_setstrokeoverprint(pgs, false);
+ if (pgs->overprint)
+ gs_setfilloverprint(pgs, false);
- if (overprint)
- gs_setoverprint(pgs, false);
pcs = gs_cspace_new_DeviceGray(pgs->memory);
if (pcs) {
gs_setcolorspace(pgs, pcs);
@@ -234,10 +236,6 @@ gx_set_device_color_1(gs_gstate * pgs)
set_nonclient_dev_color(gs_currentdevicecolor_inline(pgs), 1);
pgs->log_op = lop_default;
- /* If we changed the overprint condition, restore */
- if (overprint)
- gs_setoverprint(pgs, true);
-
return 0;
}
diff --git a/base/gscolor2.c b/base/gscolor2.c
index a076d0cb..146e4c79 100644
--- a/base/gscolor2.c
+++ b/base/gscolor2.c
@@ -43,8 +43,7 @@ gs_setcolorspace_only(gs_gstate * pgs, gs_color_space * pcs)
if (pcs->id != cs_old->id) {
rc_increment_cs(pcs);
pgs->color[0].color_space = pcs;
- if ( (code = pcs->type->install_cspace(pcs, pgs)) < 0 ||
- (pgs->overprint && (code = gs_do_set_overprint(pgs)) < 0) ) {
+ if ( (code = pcs->type->install_cspace(pcs, pgs)) < 0) {
pgs->color[0].color_space = cs_old;
rc_decrement_only_cs(pcs, "gs_setcolorspace");
} else {
@@ -86,6 +85,7 @@ gs_setcolor(gs_gstate * pgs, const gs_client_color * pcc)
gs_client_color cc_old = *pgs->color[0].ccolor;
gx_device_color *dev_color = pgs->color[0].dev_color;
bool do_unset = true;
+ bool op;
if (pgs->in_cachedevice)
return_error(gs_error_undefined); /* PLRM3 page 215. */
@@ -105,6 +105,18 @@ gs_setcolor(gs_gstate * pgs, const gs_client_color * pcc)
(*pcs->type->restrict_color)(pgs->color[0].ccolor, pcs);
(*pcs->type->adjust_color_count)(&cc_old, pcs, -1);
+ /* If we are in a situation where we are doing overprint
+ with OPM, then we need to update the overprint
+ compositor as these values can affect what is drawn */
+ op = pgs->is_fill_color ? pgs->overprint : pgs->stroke_overprint;
+ if (pgs->color[0].effective_opm && op) {
+ if (pgs->is_fill_color) {
+ gs_setfilloverprint(pgs, op);
+ } else {
+ gs_setstrokeoverprint(pgs, op);
+ }
+ }
+
return 0;
}
diff --git a/base/gscolor3.c b/base/gscolor3.c
index 832cd35a..47b22f0b 100644
--- a/base/gscolor3.c
+++ b/base/gscolor3.c
@@ -73,6 +73,20 @@ gs_shfill(gs_gstate * pgs, const gs_shading_t * psh)
because .shfill is always called within gsave-grestore -
see gs/lib . */
code = gs_setcolorspace(pgs, psh->params.ColorSpace);
+ if (pgs->overprint || (!pgs->overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ gs_overprint_params_t op_params = { 0 };
+
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Shading Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+
+ op_params.op_state = OP_STATE_FILL;
+ gs_gstate_update_overprint(pgs, &op_params);
+ }
+
if (code < 0)
return 0;
if (psh->params.cie_joint_caches != NULL) {
diff --git a/base/gscpixel.c b/base/gscpixel.c
index 6663f1c4..37904406 100644
--- a/base/gscpixel.c
+++ b/base/gscpixel.c
@@ -113,7 +113,8 @@ gx_set_overprint_DevicePixel(const gs_color_space * pcs, gs_gstate * pgs)
gs_overprint_params_t params;
params.retain_any_comps = false;
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
+ params.is_fill_color = pgs->is_fill_color;
return gs_gstate_update_overprint(pgs, &params);
}
diff --git a/base/gscsepr.c b/base/gscsepr.c
index d0c81f0f..abde8590 100644
--- a/base/gscsepr.c
+++ b/base/gscsepr.c
@@ -186,16 +186,17 @@ gx_set_overprint_Separation(const gs_color_space * pcs, gs_gstate * pgs)
gs_devicen_color_map * pcmap = &pgs->color_component_map;
if (pcmap->use_alt_cspace)
- return gx_spot_colors_set_overprint(pcs->base_space, pgs);
+ return gx_set_no_overprint(pgs);
else {
gs_overprint_params_t params;
- /* We should not have to blend if we don't need the alternate tint transform */
- params.retain_any_comps = pgs->overprint &&
- pcs->params.separation.sep_type != SEP_ALL;
+ params.retain_any_comps = (((pgs->overprint && pgs->is_fill_color) ||
+ (pgs->stroke_overprint && !pgs->is_fill_color)) &&
+ (pcs->params.separation.sep_type != SEP_ALL));
+ params.is_fill_color = pgs->is_fill_color;
+ params.drawn_comps = 0;
+ params.op_state = OP_STATE_NONE;
if (params.retain_any_comps) {
- params.retain_spot_comps = false;
- params.drawn_comps = 0;
if (pcs->params.separation.sep_type != SEP_NONE) {
int mcomp = pcmap->color_map[0];
@@ -204,7 +205,7 @@ gx_set_overprint_Separation(const gs_color_space * pcs, gs_gstate * pgs)
}
}
/* Only DeviceCMYK can use overprint mode */
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
return gs_gstate_update_overprint(pgs, &params);
}
}
@@ -546,7 +547,7 @@ gx_serialize_Separation(const gs_color_space * pcs, stream * s)
if (code < 0)
return code;
- code = sputs(s, (const byte *)&p->sep_name, strlen(p->sep_name) + 1, &n);
+ code = sputs(s, (const byte *)p->sep_name, strlen(p->sep_name) + 1, &n);
if (code < 0)
return code;
code = cs_serialize(pcs->base_space, s);
diff --git a/base/gscspace.c b/base/gscspace.c
index d4ebef6d..2538c827 100644
--- a/base/gscspace.c
+++ b/base/gscspace.c
@@ -197,6 +197,10 @@ gs_cspace_new_scrgb(gs_memory_t *pmem, gs_gstate * pgs)
pcspace->cmm_icc_profile_data->profile_handle =
gsicc_get_profile_handle_buffer(pcspace->cmm_icc_profile_data->buffer,
pcspace->cmm_icc_profile_data->buffer_size, pmem);
+ if (!pcspace->cmm_icc_profile_data->profile_handle) {
+ rc_decrement(pcspace, "gs_cspace_new_scrgb");
+ return NULL;
+ }
profile = pcspace->cmm_icc_profile_data;
/* Compute the hash code of the profile. Everything in the
@@ -465,26 +469,47 @@ gx_install_DeviceCMYK(gs_color_space * pcs, gs_gstate * pgs)
}
/*
+ * Communicate to the overprint compositor that this particular
+ * state overprint is not enabled. This could be due to a
+ * mismatched color space, or that overprint is false or the
+ * device does not support it.
+ */
+int
+gx_set_no_overprint(gs_gstate* pgs)
+{
+ gs_overprint_params_t params = { 0 };
+
+ params.retain_any_comps = false;
+ params.op_state = OP_STATE_NONE;
+ params.is_fill_color = pgs->is_fill_color;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
+
+ return gs_gstate_update_overprint(pgs, &params);
+}
+
+/*
* Push an overprint compositor onto the current device indicating that,
* at most, the spot color parameters are to be preserved.
*
* This routine should be used for all Device, CIEBased, and ICCBased
- * color spaces, except for DeviceCMKY. Also, it would not be used for
- * DeviceRGB if we have simulated overprint turned on.
- * These latter cases requires a
- * special verson that supports overprint mode.
+ * color spaces, except for DeviceCMKY.
*/
int
gx_spot_colors_set_overprint(const gs_color_space * pcs, gs_gstate * pgs)
{
- gs_overprint_params_t params;
+ gs_overprint_params_t params = {0};
+ bool op = pgs->is_fill_color ? pgs->overprint : pgs->stroke_overprint;
- if ((params.retain_any_comps = pgs->overprint)) {
- params.retain_spot_comps = true;
+ if (!op)
params.retain_any_comps = false;
- }
+ else
+ params.retain_any_comps = true;
+
+ params.is_fill_color = pgs->is_fill_color;
+ params.op_state = OP_STATE_NONE;
+
/* Only DeviceCMYK case can have overprint mode set to true */
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
return gs_gstate_update_overprint(pgs, &params);
}
@@ -615,7 +640,7 @@ gx_set_overprint_DeviceCMYK(const gs_color_space * pcs, gs_gstate * pgs)
overprint simulation. This is seen with AR when doing output preview,
overprint simulation enabled of the file overprint_icc.pdf (see our
test files) which has SWOP ICC based CMYK fills. In AR, if we use a
- simluation ICC profile that is different than the source profile,
+ simulation ICC profile that is different than the source profile,
overprinting is no longer previewed. We follow the same logic here.
If the source and destination ICC profiles do not match, then there is
effectively no overprinting enabled. This is bug 692433 */
@@ -624,13 +649,17 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
gx_device * dev = pgs->device;
gx_device_color_info * pcinfo = (dev == 0 ? 0 : &dev->color_info);
gx_color_index drawn_comps = 0;
- gs_overprint_params_t params;
+ gs_overprint_params_t params = { 0 };
gx_device_color *pdc;
cmm_dev_profile_t *dev_profile;
cmm_profile_t *output_profile = 0;
int code;
bool profile_ok = false;
gsicc_rendering_param_t render_cond;
+ bool eop;
+
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_cmyk\n");
if (dev) {
code = dev_proc(dev, get_profile)(dev, &dev_profile);
@@ -646,6 +675,10 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
else
drawn_comps = pcinfo->process_comps;
}
+
+ if_debug1m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_cmyk. drawn_comps = 0x%x\n", drawn_comps);
+
if (drawn_comps == 0)
return gx_spot_colors_set_overprint(pcs, pgs);
@@ -658,15 +691,26 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
}
}
- pdc = gs_currentdevicecolor_inline(pgs);
- if (color_is_set(pdc) && profile_ok && pgs->effective_overprint_mode) {
+ eop = gs_currentcolor_eopm(pgs);
+
+ if_debug3m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_cmyk. is_fill_color = %d, pgs->color[0].effective_opm = %d pgs->color[1].effective_opm = %d\n",
+ pgs->is_fill_color, pgs->color[0].effective_opm, pgs->color[1].effective_opm);
+
+ if (profile_ok && eop) {
gx_color_index nz_comps, one, temp;
int code;
int num_colorant[4], k;
bool colorant_ok;
-
dev_color_proc_get_nonzero_comps((*procp));
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_cmyk. color_is_set, profile_ok and eop\n");
+
+ code = gx_set_dev_color(pgs);
+ if (code < 0)
+ return code;
+ pdc = gs_currentdevicecolor_inline(pgs);
procp = pdc->type->get_nonzero_comps;
if (pdc->ccolor_valid) {
/* If we have the source colors, then use those in making the
@@ -687,7 +731,9 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
one = 1;
colorant_ok = true;
for (k = 0; k < 4; k++) {
- if (pdc->ccolor.paint.values[k] != 0) {
+ /* Note: AR assumes the value is zero if it
+ is less than 0.5 out of 255 */
+ if (pdc->ccolor.paint.values[k] > (0.5 / 255.0)) {
if (num_colorant[k] == -1) {
colorant_ok = false;
} else {
@@ -707,15 +753,20 @@ int gx_set_overprint_cmyk(const gs_color_space * pcs, gs_gstate * pgs)
}
drawn_comps &= nz_comps;
}
+ params.is_fill_color = pgs->is_fill_color;
params.retain_any_comps = true;
- params.retain_spot_comps = false;
params.drawn_comps = drawn_comps;
+ params.op_state = OP_STATE_NONE;
+
+ if_debug2m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_cmyk. retain_any_comps = %d, drawn_comps = 0x%x\n",
+ params.retain_any_comps, params.drawn_comps);
+
/* We are in CMYK, the profiles match and overprint is true. Set effective
overprint mode to overprint mode but only if effective has not already
been set to 0 */
- pgs->effective_overprint_mode =
- (pgs->overprint_mode && pgs->effective_overprint_mode);
-
+ params.effective_opm = pgs->color[0].effective_opm =
+ pgs->overprint_mode && gs_currentcolor_eopm(pgs);
return gs_gstate_update_overprint(pgs, &params);
}
diff --git a/base/gscspace.h b/base/gscspace.h
index c46ffdbc..b4ef3e07 100644
--- a/base/gscspace.h
+++ b/base/gscspace.h
@@ -367,6 +367,9 @@ bool gs_color_space_equal(const gs_color_space *pcs1,
/* Restrict a color to its legal range. */
void gs_color_space_restrict_color(gs_client_color *, const gs_color_space *);
+/* Communicate to overprint compositor that overprint is not to be used */
+int gx_set_no_overprint(gs_gstate* pgs);
+
/*
* Get the base space of an Indexed or uncolored Pattern color space, or the
* alternate space of a Separation or DeviceN space. Return NULL if the
diff --git a/base/gsdcolor.h b/base/gsdcolor.h
index 9c553026..857ba735 100644
--- a/base/gsdcolor.h
+++ b/base/gsdcolor.h
@@ -360,7 +360,7 @@ struct gx_device_color_s {
struct gx_device_color_saved_s {
gx_device_color_type type;
- gs_graphics_type_tag_t tag; /* value used to set dev_color */
+ int devn_type; /* for fill / stroke */
union _svc {
gx_color_index pure;
struct _svbin {
diff --git a/base/gsdevice.c b/base/gsdevice.c
index 69fb1740..6e3ce83f 100644
--- a/base/gsdevice.c
+++ b/base/gsdevice.c
@@ -605,7 +605,7 @@ gs_setdevice_no_init(gs_gstate * pgs, gx_device * dev)
}
rc_assign(pgs->device, dev, "gs_setdevice_no_init");
gs_gstate_update_device(pgs, dev);
- return pgs->overprint ? gs_do_set_overprint(pgs) : 0;
+ return 0;
}
/* Initialize a just-allocated device. */
diff --git a/base/gsdparam.c b/base/gsdparam.c
index 63132129..70a2305b 100644
--- a/base/gsdparam.c
+++ b/base/gsdparam.c
@@ -87,7 +87,7 @@ int gx_default_get_param(gx_device *dev, char *Param, void *list)
bool devicegraytok = true; /* Default if device profile stuct not set */
bool graydetection = false;
bool usefastcolor = false; /* set for unmanaged color */
- bool sim_overprint = false; /* By default do not simulate overprinting */
+ bool sim_overprint = true; /* By default simulate overprinting (only valid with cmyk devices) */
bool prebandthreshold = true, temp_bool = false;
if(strcmp(Param, "OutputDevice") == 0){
@@ -506,7 +506,7 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
bool devicegraytok = true; /* Default if device profile stuct not set */
bool graydetection = false;
bool usefastcolor = false; /* set for unmanaged color */
- bool sim_overprint = false; /* By default do not simulate overprinting */
+ bool sim_overprint = true; /* By default simulate overprinting */
bool prebandthreshold = true, temp_bool;
int k;
int color_accuracy = MAX_COLOR_ACCURACY;
@@ -1421,7 +1421,7 @@ gx_default_put_params(gx_device * dev, gs_param_list * plist)
bool devicegraytok = true;
bool graydetection = false;
bool usefastcolor = false;
- bool sim_overprint = false;
+ bool sim_overprint = true;
bool prebandthreshold = false;
bool use_antidropout = dev->color_info.use_antidropout_downscaler;
bool temp_bool;
diff --git a/base/gsdps1.c b/base/gsdps1.c
index c59534cd..020eac67 100644
--- a/base/gsdps1.c
+++ b/base/gsdps1.c
@@ -217,7 +217,7 @@ gs_rectfill(gs_gstate * pgs, const gs_rect * pr, uint count)
gs_gstate_color_load(pgs) >= 0 &&
(*dev_proc(pdev, get_alpha_bits)) (pdev, go_graphics)
<= 1 &&
- (!pgs->overprint || !pgs->effective_overprint_mode)
+ (!pgs->overprint || !gs_currentcolor_eopm(pgs))
) {
uint i;
gs_fixed_rect clip_rect;
diff --git a/base/gsftopts.h b/base/gsftopts.h
new file mode 100644
index 00000000..ce7113ef
--- /dev/null
+++ b/base/gsftopts.h
@@ -0,0 +1,19 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+#include "freetype/config/ftoption.h"
+
+/* Freetype build customisations */
+#undef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
diff --git a/base/gsfunc4.c b/base/gsfunc4.c
index 1508d49b..f71fa63a 100644
--- a/base/gsfunc4.c
+++ b/base/gsfunc4.c
@@ -305,9 +305,16 @@ fn_PtCr_evaluate(const gs_function_t *pfn_common, const float *in, float *out)
vsp->value.f = gs_cos_degrees(vsp->value.f);
continue;
case PtCr_cvi:
- vsp->value.i = (int)(vsp->value.f);
+ {
+ /* Strictly speaking assigning one element of union
+ * to another, overlapping element of a different size is
+ * undefined behavior, hence assign to an intermediate variable
+ */
+ int int1 = (int)(vsp->value.f);
+ vsp->value.i = int1;
vsp->type = CVT_INT;
continue;
+ }
case PtCr_cvr:
continue; /* prepare handled it */
case PtCr_div:
diff --git a/base/gshtscr.c b/base/gshtscr.c
index 1379c217..7ceb20cf 100644
--- a/base/gshtscr.c
+++ b/base/gshtscr.c
@@ -346,6 +346,8 @@ pick_cell_size(gs_screen_halftone * ph, const gs_matrix * pmat, ulong max_size,
return_error(gs_error_rangecheck);
while ((fabs(u0) + fabs(v0)) * rt < 4)
++rt;
+ phcp->C = 0;
+
try_size:
better = false;
{
@@ -443,6 +445,15 @@ pick_cell_size(gs_screen_halftone * ph, const gs_matrix * pmat, ulong max_size,
goto done;
}
}
+ /* It is possible (for ridiculous halftone screens) to reach this point without ever
+ * having been able to find a suitable screen. In that case we will not have set
+ * phcp and so phcp->C will be undefined. We can detect this condition by checking rt
+ * is 1 (so its the first attempt to find a screen) and better is false (we didn't find
+ * a better match). If that happens, exit with an error.
+ */
+ if (rt == 1 && !better)
+ return_error(gs_error_rangecheck);
+
if (phcp->C < min_levels) { /* We don't have enough levels yet. Keep going. */
++rt;
goto try_size;
diff --git a/base/gsicc.c b/base/gsicc.c
index 5095d4f3..6cf4803e 100644
--- a/base/gsicc.c
+++ b/base/gsicc.c
@@ -353,12 +353,11 @@ gx_remap_concrete_ICC(const gs_color_space * pcs, const frac * pconc,
* To device space
*/
int
-gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
+gx_remap_ICC_with_link(const gs_client_color * pcc, const gs_color_space * pcs,
gx_device_color * pdc, const gs_gstate * pgs, gx_device * dev,
- gs_color_select_t select)
+ gs_color_select_t select, gsicc_link_t *icc_link)
{
- gsicc_link_t *icc_link;
- gsicc_rendering_param_t rendering_params;
+ cmm_dev_profile_t *dev_profile;
unsigned short psrc[GS_CLIENT_COLOR_MAX_COMPONENTS], psrc_cm[GS_CLIENT_COLOR_MAX_COMPONENTS];
unsigned short *psrc_temp;
frac conc[GS_CLIENT_COLOR_MAX_COMPONENTS];
@@ -368,20 +367,15 @@ gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
#endif
int num_des_comps;
int code;
- cmm_dev_profile_t *dev_profile;
code = dev_proc(dev, get_profile)(dev, &dev_profile);
if (code < 0)
return code;
if (dev_profile == NULL)
return gs_throw(gs_error_Fatal, "Attempting to do ICC remap with no profile");
- num_des_comps = gsicc_get_device_profile_comps(dev_profile);
- rendering_params.black_point_comp = pgs->blackptcomp;
- rendering_params.graphics_type_tag = dev->graphics_type_tag;
- rendering_params.override_icc = false;
- rendering_params.preserve_black = gsBKPRESNOTSPECIFIED;
- rendering_params.rendering_intent = pgs->renderingintent;
- rendering_params.cmm = gsCMM_DEFAULT;
+ if (icc_link == NULL)
+ return gs_throw(gs_error_Fatal, "Attempting to do ICC remap with no link");
+
/* Need to clear out psrc_cm in case we have separation bands that are
not color managed */
memset(psrc_cm,0,sizeof(unsigned short)*GS_CLIENT_COLOR_MAX_COMPONENTS);
@@ -397,14 +391,7 @@ gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
psrc[k] = (unsigned short) (pcc->paint.values[k]*65535.0);
}
}
- /* Get a link from the cache, or create if it is not there. Need to get 16 bit profile */
- icc_link = gsicc_get_link(pgs, dev, pcs, NULL, &rendering_params, pgs->memory);
- if (icc_link == NULL) {
- #ifdef DEBUG
- gs_warn("Could not create ICC link: Check profiles");
- #endif
- return -1;
- }
+ num_des_comps = gsicc_get_device_profile_comps(dev_profile);
if (icc_link->is_identity) {
psrc_temp = &(psrc[0]);
} else {
@@ -434,8 +421,6 @@ gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
if_debug0m(gs_debug_flag_icc, dev->memory, "]\n");
}
#endif
- /* Release the link */
- gsicc_release_link(icc_link);
/* Now do the remap for ICC which amounts to the alpha application
the transfer function and potentially the halftoning */
/* Right now we need to go from unsigned short to frac. I really
@@ -453,6 +438,42 @@ gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
return 0;
}
+int
+gx_remap_ICC(const gs_client_color * pcc, const gs_color_space * pcs,
+ gx_device_color * pdc, const gs_gstate * pgs, gx_device * dev,
+ gs_color_select_t select)
+{
+ gsicc_link_t *icc_link;
+ gsicc_rendering_param_t rendering_params;
+ cmm_dev_profile_t *dev_profile;
+ int code;
+
+ code = dev_proc(dev, get_profile)(dev, &dev_profile);
+ if (code < 0)
+ return code;
+ if (dev_profile == NULL)
+ return gs_throw(gs_error_Fatal, "Attempting to do ICC remap with no profile");
+
+ rendering_params.black_point_comp = pgs->blackptcomp;
+ rendering_params.graphics_type_tag = dev->graphics_type_tag;
+ rendering_params.override_icc = false;
+ rendering_params.preserve_black = gsBKPRESNOTSPECIFIED;
+ rendering_params.rendering_intent = pgs->renderingintent;
+ rendering_params.cmm = gsCMM_DEFAULT;
+ /* Get a link from the cache, or create if it is not there. Need to get 16 bit profile */
+ icc_link = gsicc_get_link(pgs, dev, pcs, NULL, &rendering_params, pgs->memory);
+ if (icc_link == NULL) {
+#ifdef DEBUG
+ gs_warn("Could not create ICC link: Check profiles");
+#endif
+ return_error(gs_error_unknownerror);
+ }
+ code = gx_remap_ICC_with_link(pcc, pcs, pdc, pgs, dev, select, icc_link);
+ /* Release the link */
+ gsicc_release_link(icc_link);
+ return code;
+}
+
/*
* Same as above, but there is no rescale of CIELAB colors. This is needed
since the rescale is not needed when the source data is image based.
@@ -494,10 +515,10 @@ gx_remap_ICC_imagelab(const gs_client_color * pcc, const gs_color_space * pcs,
/* Get a link from the cache, or create if it is not there. Need to get 16 bit profile */
icc_link = gsicc_get_link(pgs, dev, pcs, NULL, &rendering_params, pgs->memory);
if (icc_link == NULL) {
- #ifdef DEBUG
- gs_warn("Could not create ICC link: Check profiles");
- #endif
- return -1;
+#ifdef DEBUG
+ gs_warn("Could not create ICC link: Check profiles");
+#endif
+ return_error(gs_error_unknownerror);
}
if (icc_link->is_identity) {
psrc_temp = &(psrc[0]);
@@ -562,10 +583,10 @@ gx_concretize_ICC(
/* Get a link from the cache, or create if it is not there. Get 16 bit profile */
icc_link = gsicc_get_link(pgs, dev, pcs, NULL, &rendering_params, pgs->memory);
if (icc_link == NULL) {
- #ifdef DEBUG
- gs_warn("Could not create ICC link: Check profiles");
- #endif
- return -1;
+#ifdef DEBUG
+ gs_warn("Could not create ICC link: Check profiles");
+#endif
+ return_error(gs_error_unknownerror);
}
/* Transform the color */
if (icc_link->is_identity) {
@@ -623,6 +644,9 @@ gs_cspace_build_ICC(
gs_memory_t * pmem )
{
gs_color_space *pcspace = gs_cspace_alloc(pmem, &gs_color_space_type_ICC);
+ if (!pcspace) {
+ return_error(gs_error_VMerror);
+ }
*ppcspace = pcspace;
return 0;
@@ -653,9 +677,10 @@ gx_set_overprint_ICC(const gs_color_space * pcs, gs_gstate * pgs)
bool cs_ok;
cmm_dev_profile_t *dev_profile;
bool gray_to_k;
+ bool op = pgs->is_fill_color ? pgs->overprint : pgs->stroke_overprint;
if (dev == 0 || pcinfo == NULL)
- return gx_spot_colors_set_overprint(pcs, pgs);
+ return gx_set_no_overprint(pgs);
dev_proc(dev, get_profile)(dev, &dev_profile);
gray_to_k = dev_profile->devicegraytok;
@@ -666,8 +691,12 @@ gx_set_overprint_ICC(const gs_color_space * pcs, gs_gstate * pgs)
cs_ok = ((pcs->cmm_icc_profile_data->data_cs == gsCMYK) ||
(pcs->cmm_icc_profile_data->data_cs == gsGRAY && gray_to_k));
- if (!pgs->overprint || pcinfo->opmode == GX_CINFO_OPMODE_NOT || !cs_ok)
- return gx_spot_colors_set_overprint(pcs, pgs);
+ if_debug4m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gx_set_overprint_ICC. cs_ok = %d is_fill_color = %d overprint = %d stroke_overprint = %d \n",
+ cs_ok, pgs->is_fill_color, pgs->overprint, pgs->stroke_overprint);
+
+ if (!op || pcinfo->opmode == GX_CINFO_OPMODE_NOT || !cs_ok)
+ return gx_set_no_overprint(pgs);
else
return gx_set_overprint_cmyk(pcs, pgs);
}
@@ -688,7 +717,7 @@ gx_change_color_model(gx_device *dev, int num_comps, int bit_depth)
int k;
if (!((num_comps == 1) || (num_comps == 3) || (num_comps == 4)))
- return -1;
+ return_error(gs_error_unknownerror);
dev->color_info.max_components = num_comps;
dev->color_info.num_components = num_comps;
diff --git a/base/gsicc.h b/base/gsicc.h
index 8a3d6837..28347acc 100644
--- a/base/gsicc.h
+++ b/base/gsicc.h
@@ -35,4 +35,8 @@ extern cs_proc_remap_color(gx_remap_ICC_imagelab);
int gx_change_color_model(gx_device *dev, int num_comps, int bit_depth);
+int gx_remap_ICC_with_link(const gs_client_color * pcc, const gs_color_space * pcs,
+ gx_device_color * pdc, const gs_gstate * pgs, gx_device * dev,
+ gs_color_select_t select, gsicc_link_t *icc_link);
+
#endif /* gsicc_INCLUDED */
diff --git a/base/gsicc_cache.c b/base/gsicc_cache.c
index e87f9c0a..713c4ba4 100644
--- a/base/gsicc_cache.c
+++ b/base/gsicc_cache.c
@@ -104,9 +104,10 @@ gsicc_cache_new(gs_memory_t *memory)
"gsicc_cache_new");
if ( result == NULL )
return(NULL);
-#ifdef MEMENTO_SQUEEZE_BUILD
- result->lock = NULL;
-#else
+ result->head = NULL;
+ result->num_links = 0;
+ result->cache_full = false;
+ result->memory = memory->stable_memory;
result->lock = gx_monitor_label(gx_monitor_alloc(memory->stable_memory),
"gsicc_cache_new");
if (result->lock == NULL) {
@@ -120,12 +121,7 @@ gsicc_cache_new(gs_memory_t *memory)
gs_free_object(memory->stable_memory, result, "gsicc_cache_new");
return(NULL);
}
-#endif
rc_init_free(result, memory->stable_memory, 1, rc_gsicc_link_cache_free);
- result->head = NULL;
- result->num_links = 0;
- result->cache_full = false;
- result->memory = memory->stable_memory;
if_debug2m(gs_debug_flag_icc, memory,
"[icc] Allocating link cache = 0x%p memory = 0x%p\n",
result, result->memory);
@@ -165,12 +161,10 @@ icc_linkcache_finalize(const gs_memory_t *mem, void *ptr)
}
#endif
if (link_cache->rc.ref_count == 0) {
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_free(link_cache->lock);
link_cache->lock = NULL;
gx_semaphore_free(link_cache->full_wait);
link_cache->full_wait = 0;
-#endif
}
}
@@ -190,7 +184,6 @@ gsicc_alloc_link_dev(gs_memory_t *memory, cmm_profile_t *src_profile,
if (result == NULL)
return NULL;
-#ifndef MEMENTO_SQUEEZE_BUILD
result->lock = gx_monitor_label(gx_monitor_alloc(memory->stable_memory),
"gsicc_link_new");
if (result->lock == NULL) {
@@ -198,7 +191,6 @@ gsicc_alloc_link_dev(gs_memory_t *memory, cmm_profile_t *src_profile,
return NULL;
}
gx_monitor_enter(result->lock);
-#endif
/* set up placeholder values */
result->is_monitored = false;
@@ -283,15 +275,6 @@ gsicc_alloc_link(gs_memory_t *memory, gsicc_hashlink_t hashcode)
"gsicc_alloc_link");
if (result == NULL)
return NULL;
-#ifndef MEMENTO_SQUEEZE_BUILD
- result->lock = gx_monitor_label(gx_monitor_alloc(memory->stable_memory),
- "gsicc_link_new");
- if (result->lock == NULL) {
- gs_free_object(memory->stable_memory, result, "gsicc_alloc_link(lock)");
- return NULL;
- }
- gx_monitor_enter(result->lock); /* this link is owned by this thread until built and made "valid" */
-#endif
/* set up placeholder values */
result->is_monitored = false;
result->orig_procs.map_buffer = NULL;
@@ -313,6 +296,14 @@ gsicc_alloc_link(gs_memory_t *memory, gsicc_hashlink_t hashcode)
result->valid = false; /* not yet complete */
result->memory = memory->stable_memory;
+ result->lock = gx_monitor_label(gx_monitor_alloc(memory->stable_memory),
+ "gsicc_link_new");
+ if (result->lock == NULL) {
+ gs_free_object(memory->stable_memory, result, "gsicc_alloc_link(lock)");
+ return NULL;
+ }
+ gx_monitor_enter(result->lock); /* this link is owned by this thread until built and made "valid" */
+
if_debug1m('^', result->memory, "[^]icclink 0x%p init = 1\n",
result);
return result;
@@ -324,9 +315,7 @@ gsicc_set_link_data(gsicc_link_t *icc_link, void *link_handle,
bool includes_softproof, bool includes_devlink,
bool pageneutralcolor, gsicc_colorbuffer_t data_cs)
{
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(lock); /* lock the cache while changing data */
-#endif
icc_link->link_handle = link_handle;
gscms_get_link_dim(link_handle, &(icc_link->num_input), &(icc_link->num_output),
icc_link->memory);
@@ -349,20 +338,16 @@ gsicc_set_link_data(gsicc_link_t *icc_link, void *link_handle,
/* release the lock of the link so it can now be used */
icc_link->valid = true;
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link->lock);
gx_monitor_leave(lock); /* done with updating, let everyone run */
-#endif
}
static void
gsicc_link_free_contents(gsicc_link_t *icc_link)
{
icc_link->procs.free_link(icc_link);
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_free(icc_link->lock);
icc_link->lock = NULL;
-#endif
}
void
@@ -514,9 +499,7 @@ gsicc_findcachelink(gsicc_hashlink_t hash, gsicc_link_cache_t *icc_link_cache,
int64_t hashcode = hash.link_hashcode;
/* Look through the cache for the hashcode */
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(icc_link_cache->lock);
-#endif
/* List scanning is fast, so we scan the entire list, this includes */
/* links that are currently unused, but still in the cache (zero_ref) */
@@ -540,7 +523,6 @@ gsicc_findcachelink(gsicc_hashlink_t hash, gsicc_link_cache_t *icc_link_cache,
if_debug3m('^', curr->memory, "[^]%s 0x%p ++ => %d\n",
"icclink", curr, curr->ref_count);
while (curr->valid == false) {
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link_cache->lock); /* exit to let other threads run briefly */
gx_monitor_enter(curr->lock); /* wait until we can acquire the lock */
gx_monitor_leave(curr->lock); /* it _should be valid now */
@@ -551,19 +533,14 @@ gsicc_findcachelink(gsicc_hashlink_t hash, gsicc_link_cache_t *icc_link_cache,
emprintf1(curr->memory, "link 0x%p lock released, but still not valid.\n", curr); /* Breakpoint here */
}
gx_monitor_enter(icc_link_cache->lock); /* re-enter to loop and check */
-#endif
}
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link_cache->lock);
-#endif
return(curr); /* success */
}
prev = curr;
curr = curr->next;
}
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link_cache->lock);
-#endif
return NULL;
}
@@ -578,9 +555,7 @@ gsicc_remove_link(gsicc_link_t *link, const gs_memory_t *memory)
"[icc] Removing link = 0x%p memory = 0x%p\n", link,
memory->stable_memory);
/* NOTE: link->ref_count must be 0: assert ? */
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(icc_link_cache->lock);
-#endif
if (link->ref_count != 0) {
emprintf2(memory, "link at 0x%p being removed, but has ref_count = %d\n", link, link->ref_count);
}
@@ -604,19 +579,15 @@ gsicc_remove_link(gsicc_link_t *link, const gs_memory_t *memory)
/* use it (ref_count > 0). Skip freeing it if so. */
if (curr == link && link->ref_count == 0) {
icc_link_cache->num_links--; /* no longer in the cache */
-#ifndef MEMENTO_SQUEEZE_BUILD
if (icc_link_cache->cache_full) {
icc_link_cache->cache_full = false;
gx_semaphore_signal(icc_link_cache->full_wait); /* let a waiting thread run */
}
gx_monitor_leave(icc_link_cache->lock);
-#endif
gsicc_link_free(link, memory); /* outside link cache now. */
} else {
/* even if we didn't find the link to remove, unlock the cache */
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link_cache->lock);
-#endif
}
}
@@ -805,12 +776,12 @@ gsicc_get_link(const gs_gstate *pgs1, gx_device *dev_in,
an override setting. Also, only use the blackpoint if overide_bp
is set. Note that this can conflict with intents set from the source
objects so the user needs to understand what options to set. */
- gs_color_space_index index =
- gsicc_get_default_type(gs_input_profile);
code = dev_proc(dev, get_profile)(dev, &dev_profile);
+ if (code < 0)
+ return NULL;
+
/* Check for unmanaged color case */
- if (index < gs_color_space_index_DevicePixel &&
- dev_profile->usefastcolor) {
+ if (gsicc_use_fast_color(gs_input_profile) > 0 && dev_profile->usefastcolor) {
/* Return a "link" from the source space to the device color space */
gsicc_link_t *link = gsicc_nocm_get_link(pgs, dev,
gs_input_profile->num_comps);
@@ -874,9 +845,7 @@ gsicc_alloc_link_entry(gsicc_link_cache_t *icc_link_cache,
*ret_link = NULL;
/* First see if we can add a link */
/* TODO: this should be based on memory usage, not just num_links */
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(icc_link_cache->lock);
-#endif
while (icc_link_cache->num_links >= ICC_CACHE_MAXLINKS) {
/* Look through the cache for first zero ref count to re-use that entry.
When ref counts go to zero, the icc_link will have been moved to
@@ -897,12 +866,10 @@ gsicc_alloc_link_entry(gsicc_link_cache_t *icc_link_cache,
link = link->next;
}
if (link == NULL) {
-#ifndef MEMENTO_SQUEEZE_BUILD
icc_link_cache->cache_full = true;
/* unlock while waiting for a link to come available */
gx_monitor_leave(icc_link_cache->lock);
gx_semaphore_wait(icc_link_cache->full_wait);
-#endif
/* repeat the findcachelink to see if some other thread has */
/* already started building the link we need */
*ret_link = gsicc_findcachelink(hash, icc_link_cache,
@@ -911,9 +878,7 @@ gsicc_alloc_link_entry(gsicc_link_cache_t *icc_link_cache,
if (*ret_link != NULL)
return true;
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(icc_link_cache->lock); /* restore the lock */
-#endif
} else {
/* Remove the zero ref_count link profile we found. */
/* Even if we remove this link, we may still be maxed out so*/
@@ -934,10 +899,8 @@ gsicc_alloc_link_entry(gsicc_link_cache_t *icc_link_cache,
icc_link_cache->head = *ret_link;
icc_link_cache->num_links++;
}
-#ifndef MEMENTO_SQUEEZE_BUILD
/* unlock before returning */
gx_monitor_leave(icc_link_cache->lock);
-#endif
return false; /* we didn't find it, but return a link to be filled */
}
@@ -1154,10 +1117,8 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
proof_profile->buffer_size,
memory);
proof_profile->profile_handle = cms_proof_profile;
-#if !defined(MEMENTO_SQUEEZE_BUILD)
if (!gscms_is_threadsafe())
gx_monitor_enter(proof_profile->lock);
-#endif
} else {
/* Cant create the link */
gsicc_remove_link(link, cache_mem);
@@ -1174,10 +1135,8 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
devlink_profile->buffer_size,
memory);
devlink_profile->profile_handle = cms_devlink_profile;
-#if !defined(MEMENTO_SQUEEZE_BUILD)
if (!gscms_is_threadsafe())
gx_monitor_enter(devlink_profile->lock);
-#endif
} else {
/* Cant create the link */
gsicc_remove_link(link, cache_mem);
@@ -1185,7 +1144,6 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
}
}
}
-#if !defined(MEMENTO_SQUEEZE_BUILD)
/* Profile reading of same structure not thread safe in CMM */
if (!gscms_is_threadsafe()) {
gx_monitor_enter(gs_input_profile->lock);
@@ -1193,7 +1151,6 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
gx_monitor_enter(gs_output_profile->lock);
}
}
-#endif
/* We may have to worry about special handling for DeviceGray to
DeviceCMYK to ensure that Gray is mapped to K only. This is only
done once and then it is cached and the link used. Note that Adobe
@@ -1235,7 +1192,6 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
rendering_params,
src_dev_link, cms_flags,
cache_mem->non_gc_memory);
-#if !defined(MEMENTO_SQUEEZE_BUILD)
if (!gscms_is_threadsafe()) {
if (include_softproof) {
gx_monitor_leave(proof_profile->lock);
@@ -1244,20 +1200,17 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
gx_monitor_leave(devlink_profile->lock);
}
}
-#endif
} else {
link_handle = gscms_get_link(cms_input_profile, cms_output_profile,
rendering_params, cms_flags,
cache_mem->non_gc_memory);
}
-#if !defined(MEMENTO_SQUEEZE_BUILD)
if (!gscms_is_threadsafe()) {
if (!src_dev_link) {
gx_monitor_leave(gs_output_profile->lock);
}
gx_monitor_leave(gs_input_profile->lock);
}
-#endif
if (link_handle != NULL) {
if (gs_input_profile->data_cs == gsGRAY)
pageneutralcolor = false;
@@ -1284,13 +1237,11 @@ gsicc_get_link_profile(const gs_gstate *pgs, gx_device *dev,
if_debug2m('^', link->memory, "[^]icclink 0x%p -- => %d\n",
link, link->ref_count);
-#ifndef MEMENTO_SQUEEZE_BUILD
if (icc_link_cache->cache_full) {
icc_link_cache->cache_full = false;
gx_semaphore_signal(icc_link_cache->full_wait); /* let a waiting thread run */
}
gx_monitor_leave(link->lock);
-#endif
gsicc_remove_link(link, cache_mem);
return NULL;
}
@@ -1778,9 +1729,7 @@ gsicc_release_link(gsicc_link_t *icclink)
icc_link_cache = icclink->icc_link_cache;
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(icc_link_cache->lock);
-#endif
if_debug2m('^', icclink->memory, "[^]icclink 0x%p -- => %d\n",
icclink, icclink->ref_count - 1);
/* Decrement the reference count */
@@ -1818,17 +1767,13 @@ gsicc_release_link(gsicc_link_t *icclink)
prev->next = icclink;
icclink->next = curr;
}
-#ifndef MEMENTO_SQUEEZE_BUILD
/* Finally, if some thread was waiting because the cache was full, let it run */
if (icc_link_cache->cache_full) {
icc_link_cache->cache_full = false;
gx_semaphore_signal(icc_link_cache->full_wait); /* let a waiting thread run */
}
-#endif
}
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(icc_link_cache->lock);
-#endif
}
/* Used to initialize the buffer description prior to color conversion */
diff --git a/base/gsicc_create.c b/base/gsicc_create.c
index d0732575..ef464600 100644
--- a/base/gsicc_create.c
+++ b/base/gsicc_create.c
@@ -1206,7 +1206,7 @@ add_lutAtoBtype(unsigned char *input_ptr, gsicc_lutatob *lutatobparts)
}
/* Then the matrix */
if (lutatobparts->matrix != NULL) {
- add_matrixwithbias(curr_ptr,&(lutatobparts->matrix->cu.u),true);
+ add_matrixwithbias(curr_ptr,(float*) lutatobparts->matrix,true);
curr_ptr += (12*4);
/* M curves */
if (lutatobparts->m_curves != NULL) {
@@ -1537,7 +1537,7 @@ create_lutAtoBprofile(unsigned char **pp_buffer_in, icHeader *header,
/* Multiply the matrix in the AtoB object by the cam so that the data
is in D50 */
if (lutatobparts->matrix == NULL) {
- gsicc_create_copy_matrix3(cam, &(temp_matrix.cu.u));
+ gsicc_create_copy_matrix3(cam, (float*) &temp_matrix);
lutatobparts->matrix = &temp_matrix;
} else {
if (yonly) {
@@ -1759,7 +1759,7 @@ gsicc_create_abc_merge(gsicc_lutatob *atob_parts, gs_matrix3 *matrixLMN,
to the mapping of X=Y by the identity table. If there are b_curves
these have an output that is 16 bit. */
if (atob_parts->b_curves == NULL) {
- scale_matrix(&(atob_parts->matrix->cu.u), 2.0);
+ scale_matrix((float*) atob_parts->matrix, 2.0);
}
return 0;
}
diff --git a/base/gsicc_lcms2.c b/base/gsicc_lcms2.c
index 3428d4ff..2fc3645c 100644
--- a/base/gsicc_lcms2.c
+++ b/base/gsicc_lcms2.c
@@ -25,9 +25,7 @@
#include "gsicc_cms.h"
#include "gxdevice.h"
-#ifndef MEMENTO_SQUEEZE_BUILD
#define USE_LCMS2_LOCKING
-#endif
#ifdef USE_LCMS2_LOCKING
#include "gxsync.h"
diff --git a/base/gsicc_lcms2mt.c b/base/gsicc_lcms2mt.c
index ff128eed..ec65fec7 100644
--- a/base/gsicc_lcms2mt.c
+++ b/base/gsicc_lcms2mt.c
@@ -29,9 +29,7 @@
#include "cal.h"
#endif
-#ifndef MEMENTO_SQUEEZE_BUILD
#define USE_LCMS2_LOCKING
-#endif
#ifdef USE_LCMS2_LOCKING
#include "gxsync.h"
@@ -877,6 +875,7 @@ gscms_create(gs_memory_t *memory)
#ifdef WITH_CAL
cmsPlugin(ctx, cal_cms_extensions());
+ cmsPlugin(ctx, cal_cms_extensions2());
#endif
cmsSetLogErrorHandler(ctx, gscms_error);
diff --git a/base/gsicc_manage.c b/base/gsicc_manage.c
index 9de2a521..a841df7b 100644
--- a/base/gsicc_manage.c
+++ b/base/gsicc_manage.c
@@ -188,6 +188,10 @@ gsicc_set_iccsmaskprofile(const char *pname,
gsicc_get_profile_handle_buffer(icc_profile->buffer,
icc_profile->buffer_size,
mem);
+ if (!icc_profile->profile_handle) {
+ rc_free_icc_profile(mem, icc_profile, "gsicc_set_iccsmaskprofile");
+ return NULL;
+ }
/* Compute the hash code of the profile. Everything in the
ICC manager will have it's hash code precomputed */
gsicc_get_icc_buff_hash(icc_profile->buffer, &(icc_profile->hashcode),
@@ -496,6 +500,23 @@ gsicc_get_default_type(cmm_profile_t *profile_data)
}
}
+int
+gsicc_use_fast_color(cmm_profile_t* profile_data)
+{
+ switch (profile_data->default_match) {
+ case CIE_A:
+ case CIE_ABC:
+ case CIE_DEF:
+ case CIE_DEFG:
+ case LAB_TYPE:
+ case NAMED_TYPE:
+ case DEVICEN_TYPE:
+ return 0;
+ default:
+ return profile_data->num_comps;
+ }
+}
+
bool
gsicc_is_default_profile(cmm_profile_t *profile_data)
{
@@ -533,20 +554,14 @@ void
gsicc_adjust_profile_rc(cmm_profile_t *profile_data, int delta, const char *name_str)
{
if (profile_data != NULL) {
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter(profile_data->lock);
-#endif
if (profile_data->rc.ref_count == 1 && delta < 0) {
profile_data->rc.ref_count = 0; /* while locked */
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(profile_data->lock);
-#endif
rc_free_struct(profile_data, name_str);
} else {
rc_adjust(profile_data, delta, name_str);
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave(profile_data->lock);
-#endif
}
}
}
@@ -1440,7 +1455,7 @@ gsicc_new_device_profile_array(gs_memory_t *memory)
result->usefastcolor = false; /* Default is to not use fast color */
result->prebandthreshold = true;
result->supports_devn = false;
- result->sim_overprint = false; /* Default is now not to simulate overprint */
+ result->sim_overprint = true; /* Default is to simulate overprint */
rc_init_free(result, memory->non_gc_memory, 1, rc_free_profile_array);
return result;
}
@@ -2141,17 +2156,14 @@ gsicc_profile_new(stream *s, gs_memory_t *memory, const char* pname,
result->v2_size = 0;
result->release = gscms_release_profile; /* Default case */
-#ifdef MEMENTO_SQUEEZE_BUILD
- result->lock = NULL;
-#else
result->lock = gx_monitor_label(gx_monitor_alloc(mem_nongc),
"gsicc_manage");
if (result->lock == NULL) {
+ gs_free_object(mem_nongc, result->buffer, "gsicc_load_profile");
gs_free_object(mem_nongc, result, "gsicc_profile_new");
gs_free_object(mem_nongc, nameptr, "gsicc_profile_new");
return NULL;
}
-#endif
if_debug1m(gs_debug_flag_icc, mem_nongc,
"[icc] allocating ICC profile = 0x%p\n", result);
return result;
@@ -2185,12 +2197,10 @@ rc_free_icc_profile(gs_memory_t * mem, void *ptr_in, client_name_t cname)
profile->name_length = 0;
}
profile->hash_is_valid = 0;
-#ifndef MEMENTO_SQUEEZE_BUILD
if (profile->lock != NULL) {
gx_monitor_free(profile->lock);
profile->lock = NULL;
}
-#endif
/* If we had a DeviceN profile with names deallocate that now */
if (profile->spotnames != NULL) {
/* Free the linked list in this object */
@@ -2846,7 +2856,7 @@ dump_icc_buffer(const gs_memory_t *mem, int buffersize, char filename[],byte *Bu
gs_sprintf(full_file_name,"%d)%s_debug.icc",global_icc_index,filename);
fid = gp_fopen(mem, full_file_name,"wb");
- fwrite(Buffer,sizeof(unsigned char),buffersize,fid);
+ gp_fwrite(Buffer,sizeof(unsigned char),buffersize,fid);
fclose(fid);
}
#endif
diff --git a/base/gsicc_manage.h b/base/gsicc_manage.h
index 33f92aa8..c21407e7 100644
--- a/base/gsicc_manage.h
+++ b/base/gsicc_manage.h
@@ -112,6 +112,7 @@ cmm_profile_t* gsicc_get_gscs_profile(gs_color_space *gs_colorspace,
int gsicc_init_profile_info(cmm_profile_t *profile);
int gsicc_initialize_default_profile(cmm_profile_t *icc_profile);
gs_color_space_index gsicc_get_default_type(cmm_profile_t *profile_data);
+int gsicc_use_fast_color(cmm_profile_t* profile_data);
bool gsicc_is_default_profile(cmm_profile_t *profile_data);
bool gsicc_profile_from_ps(cmm_profile_t *profile_data);
void gsicc_adjust_profile_rc(cmm_profile_t *profile_data, int delta, const char *name_str);
diff --git a/base/gsimage.c b/base/gsimage.c
index be7d2f2c..7b4602fc 100644
--- a/base/gsimage.c
+++ b/base/gsimage.c
@@ -223,6 +223,24 @@ gs_image_begin_typed(const gs_image_common_t * pic, gs_gstate * pgs,
if (code < 0)
return code;
}
+
+ if (pgs->overprint || (!pgs->overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ gs_overprint_params_t op_params = { 0 };
+
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Image Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+
+ op_params.op_state = OP_STATE_FILL;
+ gs_gstate_update_overprint(pgs, &op_params);
+
+ dev = gs_currentdevice(pgs);
+ dev2 = dev;
+ }
+
/* Imagemask with shading color needs a special optimization
with converting the image into a clipping.
Check for such case after gs_gstate_color_load is done,
diff --git a/base/gsioram.c b/base/gsioram.c
index c0199b75..e21e3207 100644
--- a/base/gsioram.c
+++ b/base/gsioram.c
@@ -113,8 +113,8 @@ static int
s_ram_switch(stream *, bool);
static int
-ramfs_errno_to_code(int errno) {
- switch (errno) {
+ramfs_errno_to_code(int error_number) {
+ switch (error_number) {
case RAMFS_NOTFOUND:
return_error(gs_error_undefinedfilename);
case RAMFS_NOACCESS:
diff --git a/base/gsiorom.c b/base/gsiorom.c
index 6f76427c..6516568a 100644
--- a/base/gsiorom.c
+++ b/base/gsiorom.c
@@ -83,6 +83,8 @@ gs_private_st_ptrs1(st_romfs_file_enum, struct romfs_file_enum_s, "romfs_file_en
static uint32_t get_u32_big_endian(const uint32_t *a);
+/* coverity[ -tainted_data_return ] */
+/* coverity[ -tainted_data_argument : arg-0 ] */
static uint32_t
get_u32_big_endian(const uint32_t *a)
{
diff --git a/base/gsiparam.h b/base/gsiparam.h
index 2bad83bd..af9044b9 100644
--- a/base/gsiparam.h
+++ b/base/gsiparam.h
@@ -150,6 +150,10 @@ typedef enum {
/* Define an opaque type for a color space. */
typedef struct gs_color_space_s gs_color_space;
+/* NOTE: Ensure that this macro always ends on a pointer
+ * (or on something that will align at least with a pointer).
+ * Otherwise you'll get problems on 64bit builds, presumably
+ * because something is doing sizeof(this) ? */
#define gs_pixel_image_common\
gs_data_image_common;\
/*\
@@ -162,6 +166,14 @@ typedef struct gs_color_space_s gs_color_space;
* see the discussion of RasterOp in Language.htm.\
*/\
bool CombineWithColor;\
+ /*\
+ * Usually we can tell whether we are in an smask\
+ * by asking the device we are in. Sometimes (like\
+ * when dealing with the masked portion of a type 3\
+ * image), we are using a different device, and so\
+ * can't use that method. Instead the caller will\
+ * indicate it here. */\
+ int override_in_smask;\
/*\
* Define the source color space (must be NULL for masks).\
*\
diff --git a/base/gslibctx.c b/base/gslibctx.c
index 64e214d6..fbfd9143 100644
--- a/base/gslibctx.c
+++ b/base/gslibctx.c
@@ -79,12 +79,15 @@ gs_lib_ctx_set_icc_directory(const gs_memory_t *mem_gc, const char* pname,
}
gs_free_object(p_ctx_mem, p_ctx->profiledir,
"gs_lib_ctx_set_icc_directory");
+ p_ctx->profiledir = NULL;
+ p_ctx->profiledir_len = 0;
}
/* User param string. Must allocate in non-gc memory */
result = (char*) gs_alloc_bytes(p_ctx_mem, dir_namelen+1,
"gs_lib_ctx_set_icc_directory");
- if (result == NULL)
+ if (result == NULL) {
return -1;
+ }
strcpy(result, pname);
p_ctx->profiledir = result;
p_ctx->profiledir_len = dir_namelen;
@@ -262,14 +265,10 @@ int gs_lib_ctx_init(gs_lib_ctx_t *ctx, gs_memory_t *mem)
memset(pio, 0, sizeof(*pio));
if (ctx != NULL) {
-#ifdef MEMENTO_SQUEEZE_BUILD
- goto Failure;
-#else
pio->core = ctx->core;
gx_monitor_enter((gx_monitor_t *)(pio->core->monitor));
pio->core->refs++;
gx_monitor_leave((gx_monitor_t *)(pio->core->monitor));
-#endif /* MEMENTO_SQUEEZE_BUILD */
} else {
pio->core = (gs_lib_ctx_core_t *)gs_alloc_bytes_immovable(mem,
sizeof(gs_lib_ctx_core_t),
@@ -305,7 +304,6 @@ int gs_lib_ctx_init(gs_lib_ctx_t *ctx, gs_memory_t *mem)
pio->core->fs->memory = mem;
pio->core->fs->next = NULL;
-#ifndef MEMENTO_SQUEEZE_BUILD
pio->core->monitor = gx_monitor_alloc(mem);
if (pio->core->monitor == NULL) {
#ifdef WITH_CAL
@@ -316,7 +314,6 @@ int gs_lib_ctx_init(gs_lib_ctx_t *ctx, gs_memory_t *mem)
gs_free_object(mem, pio, "gs_lib_ctx_init");
return -1;
}
-#endif /* MEMENTO_SQUEEZE_BUILD */
pio->core->refs = 1;
pio->core->memory = mem;
@@ -414,17 +411,11 @@ void gs_lib_ctx_fin(gs_memory_t *mem)
mem_err_print = NULL;
#endif
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_enter((gx_monitor_t *)(ctx->core->monitor));
-#endif
refs = --ctx->core->refs;
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_leave((gx_monitor_t *)(ctx->core->monitor));
-#endif
if (refs == 0) {
-#ifndef MEMENTO_SQUEEZE_BUILD
gx_monitor_free((gx_monitor_t *)(ctx->core->monitor));
-#endif
#ifdef WITH_CAL
cal_fin(ctx->core->cal_ctx, ctx->core->memory);
#endif
@@ -577,7 +568,7 @@ gs_check_file_permission (gs_memory_t *mem, const char *fname, const int len, co
return code;
}
-static int
+static void
rewrite_percent_specifiers(char *s)
{
char *match_start;
@@ -589,7 +580,7 @@ rewrite_percent_specifiers(char *s)
while (*s && *s != '%')
s++;
if (*s == 0)
- return 0;
+ return;
match_start = s;
s++;
/* Skip over flags (just one instance of any given flag, in any order) */
@@ -629,10 +620,9 @@ rewrite_percent_specifiers(char *s)
*s == 'X') {
/* Success! */
memset(match_start, '*', s - match_start + 1);
- return 1;
+ return;
}
}
- return 0;
}
/* For the OutputFile permission we have to deal with formattable strings
@@ -648,6 +638,7 @@ gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname)
char *fp, f[gp_file_name_sizeof];
const int pipe = 124; /* ASCII code for '|' */
const int len = strlen(fname);
+ int i;
/* Be sure the string copy will fit */
if (len >= gp_file_name_sizeof)
@@ -655,29 +646,25 @@ gs_add_outputfile_control_path(gs_memory_t *mem, const char *fname)
strcpy(f, fname);
fp = f;
/* Try to rewrite any %d (or similar) in the string */
- if (!rewrite_percent_specifiers(f)) {
- /* No %d found, so check for pipes */
- int i;
- fp = f;
- for (i = 0; i < len; i++) {
- if (f[i] == pipe) {
- int code;
-
- fp = &f[i + 1];
- /* Because we potentially have to check file permissions at two levels
- for the output file (gx_device_open_output_file and the low level
- fopen API, if we're using a pipe, we have to add both the full string,
- (including the '|', and just the command to which we pipe - since at
- the pipe_fopen(), the leading '|' has been stripped.
- */
- code = gs_add_control_path(mem, gs_permit_file_writing, f);
- if (code < 0)
- return code;
- break;
- }
- if (!IS_WHITESPACE(f[i]))
- break;
+ rewrite_percent_specifiers(f);
+ for (i = 0; i < len; i++) {
+ if (f[i] == pipe) {
+ int code;
+
+ fp = &f[i + 1];
+ /* Because we potentially have to check file permissions at two levels
+ for the output file (gx_device_open_output_file and the low level
+ fopen API, if we're using a pipe, we have to add both the full string,
+ (including the '|', and just the command to which we pipe - since at
+ the pipe_fopen(), the leading '|' has been stripped.
+ */
+ code = gs_add_control_path(mem, gs_permit_file_writing, f);
+ if (code < 0)
+ return code;
+ break;
}
+ if (!IS_WHITESPACE(f[i]))
+ break;
}
return gs_add_control_path(mem, gs_permit_file_writing, fp);
}
@@ -688,6 +675,7 @@ gs_remove_outputfile_control_path(gs_memory_t *mem, const char *fname)
char *fp, f[gp_file_name_sizeof];
const int pipe = 124; /* ASCII code for '|' */
const int len = strlen(fname);
+ int i;
/* Be sure the string copy will fit */
if (len >= gp_file_name_sizeof)
@@ -695,29 +683,24 @@ gs_remove_outputfile_control_path(gs_memory_t *mem, const char *fname)
strcpy(f, fname);
fp = f;
/* Try to rewrite any %d (or similar) in the string */
- if (!rewrite_percent_specifiers(f)) {
- /* No %d found, so check for pipes */
- int i;
- fp = f;
- for (i = 0; i < len; i++) {
- if (f[i] == pipe) {
- int code;
-
- fp = &f[i + 1];
- /* Because we potentially have to check file permissions at two levels
- for the output file (gx_device_open_output_file and the low level
- fopen API, if we're using a pipe, we have to add both the full string,
- (including the '|', and just the command to which we pipe - since at
- the pipe_fopen(), the leading '|' has been stripped.
- */
- code = gs_remove_control_path(mem, gs_permit_file_writing, f);
- if (code < 0)
- return code;
- break;
- }
- if (!IS_WHITESPACE(f[i]))
- break;
+ for (i = 0; i < len; i++) {
+ if (f[i] == pipe) {
+ int code;
+
+ fp = &f[i + 1];
+ /* Because we potentially have to check file permissions at two levels
+ for the output file (gx_device_open_output_file and the low level
+ fopen API, if we're using a pipe, we have to add both the full string,
+ (including the '|', and just the command to which we pipe - since at
+ the pipe_fopen(), the leading '|' has been stripped.
+ */
+ code = gs_remove_control_path(mem, gs_permit_file_writing, f);
+ if (code < 0)
+ return code;
+ break;
}
+ if (!IS_WHITESPACE(f[i]))
+ break;
}
return gs_remove_control_path(mem, gs_permit_file_writing, fp);
}
diff --git a/base/gsline.c b/base/gsline.c
index 89cd40d6..80997be5 100644
--- a/base/gsline.c
+++ b/base/gsline.c
@@ -177,7 +177,7 @@ gx_set_dash(gx_dash_params * dash, const float *pattern, uint length,
dist_left = 0.0;
if (mem && ppat) {
gs_free_object(mem, ppat, "gx_set_dash(old pattern)");
- ppat = 0;
+ ppat = NULL;
}
} else {
uint size = length * sizeof(float);
@@ -205,16 +205,16 @@ gx_set_dash(gx_dash_params * dash, const float *pattern, uint length,
(dist_left > 0 || pattern[index] != 0)
)
ink = !ink, index++;
- if (mem) {
- if (ppat == 0)
+ if (mem != NULL) {
+ if (ppat == NULL)
ppat = (float *)gs_alloc_bytes(mem, size,
"gx_set_dash(pattern)");
else if (length != dash->pattern_size)
ppat = gs_resize_object(mem, ppat, size,
"gx_set_dash(pattern)");
- if (ppat == 0)
- return_error(gs_error_VMerror);
}
+ if (ppat == NULL)
+ return_error(gs_error_VMerror);
if (ppat != pattern)
memcpy(ppat, pattern, length * sizeof(float));
}
diff --git a/base/gsmalloc.c b/base/gsmalloc.c
index 4a2c2c20..971976a0 100644
--- a/base/gsmalloc.c
+++ b/base/gsmalloc.c
@@ -119,7 +119,7 @@ gs_malloc_memory_init(void)
mem->stable_memory = 0; /* just for tidyness, never referenced */
mem->procs = gs_malloc_memory_procs;
mem->allocated = 0;
- mem->limit = max_long;
+ mem->limit = max_size_t;
mem->used = 0;
mem->max_used = 0;
mem->gs_lib_ctx = 0;
@@ -127,13 +127,11 @@ gs_malloc_memory_init(void)
mem->thread_safe_memory = (gs_memory_t *)mem; /* this allocator is thread safe */
/* Allocate a monitor to serialize access to structures within */
mem->monitor = NULL; /* prevent use during initial allocation */
-#ifndef MEMENTO_SQUEEZE_BUILD
mem->monitor = gx_monitor_label(gx_monitor_alloc((gs_memory_t *)mem), "heap");
if (mem->monitor == NULL) {
free(mem);
return NULL;
}
-#endif
return mem;
}
@@ -188,7 +186,7 @@ gs_heap_alloc_bytes(gs_memory_t * mem, size_t size, client_name_t cname)
} else {
size_t added = size + sizeof(gs_malloc_block_t);
- if (added <= size || mmem->limit - added < mmem->used)
+ if (added <= size || added > mmem->limit || mmem->limit - added < mmem->used)
set_msg("exceeded limit");
else if ((ptr = (byte *) Memento_label(malloc(added), cname)) == 0)
set_msg("failed");
diff --git a/base/gsmchunk.c b/base/gsmchunk.c
index 10629b1e..f890de0e 100644
--- a/base/gsmchunk.c
+++ b/base/gsmchunk.c
@@ -1022,25 +1022,29 @@ chunk_alloc_struct_array(gs_memory_t * mem, size_t num_elements,
static void *
chunk_resize_object(gs_memory_t * mem, void *ptr, size_t new_num_elements, client_name_t cname)
{
- /* This isn't particularly efficient, but it is rarely used */
- chunk_obj_node_t *obj = (chunk_obj_node_t *)(((byte *)ptr) - SIZEOF_ROUND_ALIGN(chunk_obj_node_t));
- size_t new_size = (obj->type->ssize * new_num_elements);
- size_t old_size = obj->size - obj->padding;
- /* get the type from the old object */
- gs_memory_type_ptr_t type = obj->type;
- void *new_ptr;
- gs_memory_chunk_t *cmem = (gs_memory_chunk_t *)mem;
- size_t save_max_used = cmem->max_used;
+ void *new_ptr = NULL;
+
+ if (ptr != NULL) {
+ /* This isn't particularly efficient, but it is rarely used */
+ chunk_obj_node_t *obj = (chunk_obj_node_t *)(((byte *)ptr) - SIZEOF_ROUND_ALIGN(chunk_obj_node_t));
+ size_t new_size = (obj->type->ssize * new_num_elements);
+ size_t old_size = obj->size - obj->padding;
+ /* get the type from the old object */
+ gs_memory_type_ptr_t type = obj->type;
+ gs_memory_chunk_t *cmem = (gs_memory_chunk_t *)mem;
+ size_t save_max_used = cmem->max_used;
+
+ if (new_size == old_size)
+ return ptr;
+ if ((new_ptr = chunk_obj_alloc(mem, new_size, type, cname)) == 0)
+ return NULL;
+ memcpy(new_ptr, ptr, min(old_size, new_size));
+ chunk_free_object(mem, ptr, cname);
+ cmem->max_used = save_max_used;
+ if (cmem->used > cmem->max_used)
+ cmem->max_used = cmem->used;
+ }
- if (new_size == old_size)
- return ptr;
- if ((new_ptr = chunk_obj_alloc(mem, new_size, type, cname)) == 0)
- return 0;
- memcpy(new_ptr, ptr, min(old_size, new_size));
- chunk_free_object(mem, ptr, cname);
- cmem->max_used = save_max_used;
- if (cmem->used > cmem->max_used)
- cmem->max_used = cmem->used;
return new_ptr;
}
@@ -1396,9 +1400,13 @@ chunk_consolidate_free(gs_memory_t *mem)
static size_t
chunk_object_size(gs_memory_t * mem, const void *ptr)
{
- chunk_obj_node_t *obj = (chunk_obj_node_t *)(((byte *)ptr) - SIZEOF_ROUND_ALIGN(chunk_obj_node_t));
+ if (ptr != NULL) {
+ chunk_obj_node_t *obj = (chunk_obj_node_t *)(((byte *)ptr) - SIZEOF_ROUND_ALIGN(chunk_obj_node_t));
+
+ return obj->size - obj->padding;
+ }
- return obj->size - obj->padding;
+ return 0;
}
static gs_memory_type_ptr_t
diff --git a/base/gsovrc.c b/base/gsovrc.c
index d29808d1..3a60a865 100644
--- a/base/gsovrc.c
+++ b/base/gsovrc.c
@@ -16,6 +16,7 @@
/* overprint/overprint mode compositor implementation */
+#include "assert_.h"
#include "memory_.h"
#include "gx.h"
#include "gserrors.h"
@@ -29,6 +30,8 @@
#include "gxoprect.h"
#include "gsbitops.h"
#include "gxgstate.h"
+#include "gxdevsop.h"
+#include "gxcldev.h"
/* GC descriptor for gs_overprint_t */
private_st_gs_overprint_t();
@@ -109,10 +112,11 @@ c_overprint_equal(const gs_composite_t * pct0, const gs_composite_t * pct1)
pparams0 = &((const gs_overprint_t *)(pct0))->params;
pparams1 = &((const gs_overprint_t *)(pct1))->params;
+
+ if (pparams0->is_fill_color != pparams1->is_fill_color)
+ return true; /* this changed */
if (!pparams0->retain_any_comps)
return !pparams1->retain_any_comps;
- else if (pparams0->retain_spot_comps)
- return pparams1->retain_spot_comps;
else
return pparams0->drawn_comps == pparams1->drawn_comps;
} else
@@ -123,8 +127,10 @@ c_overprint_equal(const gs_composite_t * pct0, const gs_composite_t * pct1)
* Bits corresponding to boolean values in the first byte of the string
* representation of an overprint compositor.
*/
-#define OVERPRINT_ANY_COMPS 1
-#define OVERPRINT_SPOT_COMPS 2
+#define OVERPRINT_ANY_COMPS 1
+#define OVERPRINT_IS_FILL_COLOR 2
+#define OVERPRINT_SET_FILL_COLOR 0xc
+#define OVERPRINT_EOPM 0x10
/*
* Convert an overprint compositor to string form for use by the command
@@ -137,19 +143,39 @@ c_overprint_write(const gs_composite_t * pct, byte * data, uint * psize, gx_devi
byte flags = 0;
int used = 1, avail = *psize;
+ /* Clist writer needs to store active state of op device so that
+ we know when to send compositor actions to disable it */
+ if (pparams->op_state == OP_STATE_NONE) {
+ if (pparams->is_fill_color) {
+ if (pparams->retain_any_comps)
+ cdev->op_fill_active = true;
+ else
+ cdev->op_fill_active = false;
+ } else {
+ if (pparams->retain_any_comps)
+ cdev->op_stroke_active = true;
+ else
+ cdev->op_stroke_active = false;
+ }
+ }
+
/* encoded the booleans in a single byte */
- if (pparams->retain_any_comps) {
- flags |= OVERPRINT_ANY_COMPS;
- if (pparams->retain_spot_comps)
- flags |= OVERPRINT_SPOT_COMPS;
- /* write out the component bits only if necessary (and possible) */
- if (!pparams->retain_spot_comps) {
+ if (pparams->retain_any_comps || pparams->is_fill_color || pparams->op_state) {
+ flags |= (pparams->retain_any_comps) ? OVERPRINT_ANY_COMPS : 0;
+ flags |= (pparams->is_fill_color) ? OVERPRINT_IS_FILL_COLOR : 0;
+ flags |= (pparams->op_state) << 2;
+ flags |= (pparams->effective_opm) << 4;
+
+ /* write out the component bits */
+ if (pparams->retain_any_comps) {
uint tmp_size = (avail > 0 ? avail - 1 : 0);
int code = write_color_index(pparams->drawn_comps, data + 1,
- &tmp_size);
+ &tmp_size);
if (code < 0 && code != gs_error_rangecheck)
return code;
used += tmp_size;
+ if_debug0m('v', ((const gx_device*)cdev)->memory, "[v] drawn_comps stored\n");
+
}
}
@@ -158,7 +184,8 @@ c_overprint_write(const gs_composite_t * pct, byte * data, uint * psize, gx_devi
if (used > avail)
return_error(gs_error_rangecheck);
data[0] = flags;
- if_debug1m('v', ((const gx_device *)cdev)->memory, "[v]c_overprint_write(%d)\n", flags);
+ if_debug2m('v', ((const gx_device *)cdev)->memory, "[v]c_overprint_write(%d), drawn_comps=0x%x\n",
+ flags, pparams->drawn_comps);
return 0;
}
@@ -180,19 +207,27 @@ c_overprint_read(
if (size < 1)
return_error(gs_error_rangecheck);
flags = *data;
- if_debug1m('v', mem, "[v]c_overprint_read(%d)\n", flags);
+ if_debug1m('v', mem, "[v]c_overprint_read(%d)", flags);
params.retain_any_comps = (flags & OVERPRINT_ANY_COMPS) != 0;
- params.retain_spot_comps = (flags & OVERPRINT_SPOT_COMPS) != 0;
+ params.is_fill_color = (flags & OVERPRINT_IS_FILL_COLOR) != 0;
+ params.op_state = (flags & OVERPRINT_SET_FILL_COLOR) >> 2;
+ params.effective_opm = (flags & OVERPRINT_EOPM) >> 4;
params.idle = 0;
params.drawn_comps = 0;
/* check if the drawn_comps array is present */
- if (params.retain_any_comps && (!params.retain_spot_comps)) {
+ if (params.retain_any_comps) {
code = read_color_index(&params.drawn_comps, data + 1, size - 1);
if (code < 0)
return code;
nbytes += code;
+ if_debug0m('v', mem, ", drawn_comps read");
}
+ if_debug1m('v', mem, ", retain_any_comps=%d", params.retain_any_comps);
+ if_debug1m('v', mem, ", is_fill_color=%d", params.is_fill_color);
+ if_debug1m('v', mem, ", drawn_comps=0x%x", params.drawn_comps);
+ if_debug1m('v', mem, ", op_state=%d", params.op_state);
+ if_debug0m('v', mem, "\n");
code = gs_create_overprint(ppct, &params, mem);
return code < 0 ? code : nbytes;
}
@@ -203,9 +238,7 @@ c_overprint_read(
static gs_compositor_closing_state
c_overprint_is_closing(const gs_composite_t *this, gs_composite_t **ppcte, gx_device *dev)
{
- if (*ppcte != NULL && (*ppcte)->type->comp_id != GX_COMPOSITOR_OVERPRINT)
- return COMP_ENQUEUE;
- return COMP_REPLACE_PREV;
+ return COMP_ENQUEUE; /* maybe extra work, but these actions are fast */
}
static composite_create_default_compositor_proc(c_overprint_create_default_compositor);
@@ -280,8 +313,7 @@ gs_is_overprint_compositor(const gs_composite_t * pct)
* The data fields reflect entries in the gs_overprint_params_t
* structure. There is no explicit retain_any_comps field, as the current
* setting of this field can be determined by checking the fill_rectangle
- * method. There is also no retain_spot_comps field, as the code will
- * will determine explicitly which components are to be drawn.
+ * method.
*/
typedef struct overprint_device_s {
gx_device_forward_common;
@@ -291,7 +323,11 @@ typedef struct overprint_device_s {
* target color space is not separable and linear. It is also used
* for the devn color values since we may need more than 8 components
*/
- gx_color_index drawn_comps;
+ OP_FS_STATE op_state; /* used to select drawn_comps, fill or stroke */
+ gx_color_index drawn_comps_fill;
+ gx_color_index drawn_comps_stroke; /* pparams->is_fill_color determines which to set */
+ bool retain_none_stroke; /* These are used to know when we can set the procs to forward */
+ bool retain_none_fill;
/*
* The mask of gx_color_index bits to be retained during a drawing
@@ -313,7 +349,8 @@ typedef struct overprint_device_s {
* required. It will be required if depth > 8 and the host processor
* is little-endian.
*/
- gx_color_index retain_mask;
+ gx_color_index retain_mask_fill;
+ gx_color_index retain_mask_stroke;
bool copy_alpha_hl;
@@ -325,6 +362,13 @@ typedef struct overprint_device_s {
gx_device_procs generic_overprint_procs;
gx_device_procs no_overprint_procs;
gx_device_procs sep_overprint_procs;
+
+ /* Due to the setting of stroke and fill overprint we can get in
+ a situation where one makes the device idle. We need to know
+ if that is the case when doing a compositor push even when
+ no parameters have changed */
+ bool is_idle;
+
} overprint_device_t;
gs_private_st_suffix_add0_final( st_overprint_device_t,
@@ -354,6 +398,11 @@ static dev_proc_put_params(overprint_put_params);
static dev_proc_get_page_device(overprint_get_page_device);
static dev_proc_create_compositor(overprint_create_compositor);
static dev_proc_get_color_comp_index(overprint_get_color_comp_index);
+static dev_proc_fill_stroke_path(overprint_fill_stroke_path);
+static dev_proc_fill_path(overprint_fill_path);
+static dev_proc_stroke_path(overprint_stroke_path);
+static dev_proc_text_begin(overprint_text_begin);
+static dev_proc_dev_spec_op(overprint_dev_spec_op);
static const gx_device_procs no_overprint_procs = {
overprint_open_device, /* open_device */
@@ -421,13 +470,16 @@ static const gx_device_procs no_overprint_procs = {
0, /* push_transparency_state */
0, /* pop_transparency_state */
0, /* put_image */
- 0, /* dev_spec_op */
+ overprint_dev_spec_op, /* dev_spec_op */
gx_forward_copy_planes,
0, /* get profile */
0, /* set graphics type tag */
0, /* strip_copy_rop2 */
0, /* strip_tile_rect_devn */
- gx_forward_copy_alpha_hl_color /* copy_alpha_hl_color */
+ gx_forward_copy_alpha_hl_color, /* copy_alpha_hl_color */
+ NULL, /* process_page */\
+ NULL, /* transform_pixel_region */\
+ gx_forward_fill_stroke_path, /* fill_stroke */\
};
/*
@@ -489,8 +541,8 @@ static const gx_device_procs generic_overprint_procs = {
gx_default_copy_alpha, /* copy alpha */
0, /* get_band */
gx_default_copy_rop, /* copy_rop */
- gx_default_fill_path, /* fill_path */
- gx_default_stroke_path, /* stroke_path */
+ overprint_fill_path, /* fill_path */
+ overprint_stroke_path, /* stroke_path */
gx_default_fill_mask, /* fill_mask */
gx_default_fill_trapezoid, /* fill_trapezoid */
gx_default_fill_parallelogram, /* fill_parallelogram */
@@ -507,7 +559,7 @@ static const gx_device_procs generic_overprint_procs = {
0, /* map_color_rgb_alpha */
overprint_create_compositor, /* create_compositor */
0, /* get_hardware_params */
- gx_default_text_begin, /* text_begin */
+ overprint_text_begin, /* text_begin */
0, /* gx_finish_copydevice */
0, /* begin_transparency_group */
0, /* end_transparency_group */
@@ -530,13 +582,16 @@ static const gx_device_procs generic_overprint_procs = {
0, /* push_transparency_state */
0, /* pop_transparency_state */
0, /* put_image */
- 0, /* dev_spec_op */
+ overprint_dev_spec_op, /* dev_spec_op */
gx_forward_copy_planes,
0, /* get profile */
0, /* set graphics type tag */
0, /* strip_copy_rop2 */
0, /* strip_tile_rect_devn */
- gx_forward_copy_alpha_hl_color /* copy_alpha_hl_color */
+ gx_forward_copy_alpha_hl_color, /* copy_alpha_hl_color */
+ NULL, /* process_page */\
+ NULL, /* transform_pixel_region */\
+ overprint_fill_stroke_path, /* fill_stroke */
};
static const gx_device_procs sep_overprint_procs = {
@@ -564,14 +619,14 @@ static const gx_device_procs sep_overprint_procs = {
gx_default_copy_alpha, /* copy alpha */
0, /* get_band */
gx_default_copy_rop, /* copy_rop */
- gx_default_fill_path, /* fill_path */
- gx_default_stroke_path, /* stroke_path */
+ overprint_fill_path, /* fill_path */
+ overprint_stroke_path, /* stroke_path */
gx_default_fill_mask, /* fill_mask */
gx_default_fill_trapezoid, /* fill_trapezoid */
gx_default_fill_parallelogram, /* fill_parallelogram */
gx_default_fill_triangle, /* fill_triangle */
gx_default_draw_thin_line, /* draw_thin_line */
- gx_default_begin_image, /* begin_image */
+ gx_default_begin_image, /* begin_image */
0, /* image_data (obsolete) */
0, /* end_image (obsolete) */
gx_default_strip_tile_rectangle, /* strip_tile_rectangle */
@@ -582,7 +637,7 @@ static const gx_device_procs sep_overprint_procs = {
0, /* map_color_rgb_alpha */
overprint_create_compositor, /* create_compositor */
0, /* get_hardware_params */
- gx_default_text_begin, /* text_begin */
+ overprint_text_begin, /* text_begin */
0, /* gx_finish_copydevice */
0, /* begin_transparency_group */
0, /* end_transparency_group */
@@ -605,13 +660,16 @@ static const gx_device_procs sep_overprint_procs = {
0, /* push_transparency_state */
0, /* pop_transparency_state */
0, /* put_image */
- 0, /* dev_spec_op */
+ overprint_dev_spec_op, /* dev_spec_op */
overprint_copy_planes, /* copy planes */
0, /* get profile */
0, /* set graphics type tag */
0, /* strip_copy_rop2 */
0, /* strip_tile_rect_devn */
- overprint_copy_alpha_hl_color /* copy_alpha_hl_color */
+ overprint_copy_alpha_hl_color, /* copy_alpha_hl_color */
+ NULL, /* process_page */\
+ NULL, /* transform_pixel_region */\
+ overprint_fill_stroke_path, /* fill_stroke */
};
/*
@@ -686,10 +744,12 @@ swap_color_index(int depth, gx_color_index color)
* is separable.
*/
static void
-set_retain_mask(overprint_device_t * opdev)
+set_retain_mask(overprint_device_t * opdev, bool is_fill_color)
{
uchar i, ncomps = opdev->color_info.num_components;
- gx_color_index drawn_comps = opdev->drawn_comps, retain_mask = 0;
+ gx_color_index drawn_comps = is_fill_color ?
+ opdev->drawn_comps_fill : opdev->drawn_comps_stroke;
+ gx_color_index retain_mask = 0;
#if !ARCH_IS_BIG_ENDIAN
int depth = opdev->color_info.depth;
#endif
@@ -702,21 +762,10 @@ set_retain_mask(overprint_device_t * opdev)
if (depth > 8)
retain_mask = swap_color_index(depth, retain_mask);
#endif
- opdev->retain_mask = retain_mask;
-}
-
-/* enlarge mask of non-zero components */
-static gx_color_index
-check_drawn_comps(uchar ncomps, frac cvals[GX_DEVICE_COLOR_MAX_COMPONENTS])
-{
- uchar i;
- gx_color_index mask = 0x1, drawn_comps = 0;
-
- for (i = 0; i < ncomps; i++, mask <<= 1) {
- if (cvals[i] != frac_0)
- drawn_comps |= mask;
- }
- return drawn_comps;
+ if (is_fill_color)
+ opdev->retain_mask_fill = retain_mask;
+ else
+ opdev->retain_mask_stroke = retain_mask;
}
/*
@@ -728,68 +777,83 @@ check_drawn_comps(uchar ncomps, frac cvals[GX_DEVICE_COLOR_MAX_COMPONENTS])
*/
static int
update_overprint_params(
- overprint_device_t * opdev,
- const gs_overprint_params_t * pparams )
+ overprint_device_t* opdev,
+ const gs_overprint_params_t* pparams)
{
- uchar ncomps = opdev->color_info.num_components;
+ /* We can only turn off the overprint compositor if
+ BOTH the stroke and fill op are false. Otherwise
+ we will turn it off when setting one and turn on
+ when setting the other (or vice versa) */
+
+ /* Note if pparams is to set the opdev fill stroke state. Do that now and exit */
+ if (pparams->op_state != OP_STATE_NONE) {
+ opdev->op_state = pparams->op_state;
+ return 0;
+ }
+
+ if_debug4m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] update_overprint_params enter. retain_any_comps = %d, idle = %d, drawn_comps = 0x%x, is_fill_color = %d\n",
+ pparams->retain_any_comps, pparams->idle, pparams->drawn_comps, pparams->is_fill_color);
/* check if overprint is to be turned off */
if (!pparams->retain_any_comps || pparams->idle) {
- /* if fill_rectangle forwards, overprint is already off */
- if (dev_proc(opdev, fill_rectangle) != gx_forward_fill_rectangle)
- memcpy( &opdev->procs,
- &opdev->no_overprint_procs,
- sizeof(opdev->no_overprint_procs) );
+ if (pparams->is_fill_color) {
+ opdev->retain_none_fill = true;
+ opdev->drawn_comps_fill =
+ ((gx_color_index)1 << (opdev->color_info.num_components)) - (gx_color_index)1;
+ } else {
+ opdev->retain_none_stroke = true;
+ opdev->drawn_comps_stroke =
+ ((gx_color_index)1 << (opdev->color_info.num_components)) - (gx_color_index)1;
+ }
+
+ /* Set to forward only if both stroke and fill are not retaining any
+ and if we have not already set it to forward */
+ if (dev_proc(opdev, fill_rectangle) != gx_forward_fill_rectangle &&
+ opdev->retain_none_fill && opdev->retain_none_stroke) {
+ memcpy(&opdev->procs,
+ &opdev->no_overprint_procs,
+ sizeof(opdev->no_overprint_procs));
+ opdev->is_idle = true;
+ if_debug0m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] overprint fill_rectangle set to forward\n");
+ }
+
+ if_debug4m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] update_overprint_params exit. drawn_comps_fill = 0x%x, drawn_comps_stroke = 0x%x, retain_none_fill = %d, retain_none_stroke = %d \n",
+ opdev->drawn_comps_fill, opdev->drawn_comps_stroke, opdev->retain_none_fill, opdev->retain_none_stroke);
return 0;
}
+ opdev->is_idle = false;
/* set the procedures according to the color model */
- if (colors_are_separable_and_linear(&opdev->color_info))
- memcpy( &opdev->procs,
- &opdev->sep_overprint_procs,
- sizeof(opdev->sep_overprint_procs) );
- else
- memcpy( &opdev->procs,
- &opdev->generic_overprint_procs,
- sizeof(opdev->generic_overprint_procs) );
+ if (colors_are_separable_and_linear(&opdev->color_info)) {
+ memcpy(&opdev->procs, &opdev->sep_overprint_procs,
+ sizeof(opdev->sep_overprint_procs));
+ if_debug0m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] overprint procs set to sep\n");
+ } else {
+ memcpy(&opdev->procs, &opdev->generic_overprint_procs,
+ sizeof(opdev->generic_overprint_procs));
+ if_debug0m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] overprint procs set to generic\n");
+ }
- /* see if we need to determine the spot color components */
- if (!pparams->retain_spot_comps) {
- opdev->drawn_comps = pparams->drawn_comps;
+ if (pparams->is_fill_color) {
+ opdev->retain_none_fill = false;
+ opdev->drawn_comps_fill = pparams->drawn_comps;
} else {
- gx_device * dev = (gx_device *)opdev;
- subclass_color_mappings scm;
- frac cvals[GX_DEVICE_COLOR_MAX_COMPONENTS];
- gx_color_index drawn_comps = 0;
- static const frac frac_13 = float2frac(1.0 / 3.0);
-
- scm = get_color_mapping_procs_subclass(dev);
-
- map_gray_subclass(scm, frac_13, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
-
- map_rgb_subclass(scm, 0, frac_13, frac_0, frac_0, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
- map_rgb_subclass(scm, 0, frac_0, frac_13, frac_0, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
- map_rgb_subclass(scm, 0, frac_0, frac_0, frac_13, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
-
- map_cmyk_subclass(scm, frac_13, frac_0, frac_0, frac_0, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
- map_cmyk_subclass(scm, frac_0, frac_13, frac_0, frac_0, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
- map_cmyk_subclass(scm, frac_0, frac_0, frac_13, frac_0, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
- map_cmyk_subclass(scm, frac_0, frac_0, frac_0, frac_13, cvals);
- drawn_comps |= check_drawn_comps(ncomps, cvals);
-
- opdev->drawn_comps = drawn_comps;
+ opdev->retain_none_stroke = false;
+ opdev->drawn_comps_stroke = pparams->drawn_comps;
}
+ if_debug4m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] update_overprint_params exit. drawn_comps_fill = 0x%x, drawn_comps_stroke = 0x%x, retain_none_fill = %d, retain_none_stroke = %d \n",
+ opdev->drawn_comps_fill, opdev->drawn_comps_stroke, opdev->retain_none_fill, opdev->retain_none_stroke);
+
/* if appropriate, update the retain_mask field */
if (colors_are_separable_and_linear(&opdev->color_info))
- set_retain_mask(opdev);
+ set_retain_mask(opdev, pparams->is_fill_color);
return 0;
}
@@ -816,6 +880,7 @@ overprint_open_device(gx_device * dev)
if ((code = gs_opendevice(tdev)) >= 0) {
gx_device_copy_params(dev, tdev);
opdev->copy_alpha_hl = false;
+ opdev->is_idle = false;
}
return code;
}
@@ -893,11 +958,25 @@ overprint_create_compositor(
return gx_default_create_compositor(dev, pcdev, pct, pgs, memory, cdev);
else {
gs_overprint_params_t params = ((const gs_overprint_t *)pct)->params;
- int code;
+ overprint_device_t *opdev = (overprint_device_t *)dev;
+ int code = 0;
+ bool update;
+
+ if (params.is_fill_color)
+ update = (params.drawn_comps != opdev->drawn_comps_fill) ||
+ ((params.retain_any_comps == 0) != opdev->retain_none_fill);
+ else
+ update = (params.drawn_comps != opdev->drawn_comps_stroke) ||
+ ((params.retain_any_comps == 0) != opdev->retain_none_stroke);
params.idle = pct->idle;
- /* device must already exist, so just update the parameters */
- code = update_overprint_params((overprint_device_t *)dev, &params);
+ /* device must already exist, so just update the parameters if settings change */
+ if_debug6m(gs_debug_flag_overprint, opdev->memory,
+ "[overprint] overprint_create_compositor test for change. params.idle = %d vs. opdev->is_idle = %d \n params.is_fill_color = %d: params.drawn_comps = 0x%x vs. opdev->drawn_comps_fill = 0x%x OR opdev->drawn_comps_stroke = 0x%x\n",
+ params.idle, opdev->is_idle, params.is_fill_color, params.drawn_comps, opdev->drawn_comps_fill, opdev->drawn_comps_stroke);
+
+ if (update || params.idle != opdev->is_idle || params.op_state != OP_STATE_NONE)
+ code = update_overprint_params(opdev, &params);
if (code >= 0)
*pcdev = dev;
return code;
@@ -925,10 +1004,22 @@ overprint_generic_fill_rectangle(
if (tdev == 0)
return 0;
- else
- return gx_overprint_generic_fill_rectangle(tdev, opdev->drawn_comps, x,
- y, width, height, color,
- dev->memory);
+ else {
+
+ assert(opdev->op_state != 0);
+
+ /* See if we even need to do any overprinting. We have to maintain
+ the compositor active for fill/stroke cases even if we are only
+ doing a fill or a stroke */
+ if ((opdev->op_state == OP_STATE_FILL && opdev->retain_none_fill) ||
+ (opdev->op_state == OP_STATE_STROKE && opdev->retain_none_stroke))
+ return (*dev_proc(tdev, fill_rectangle)) (tdev, x, y, width, height, color);
+
+ return gx_overprint_generic_fill_rectangle(tdev,
+ opdev->op_state == OP_STATE_FILL ?
+ opdev->drawn_comps_fill : opdev->drawn_comps_stroke,
+ x, y, width, height, color, dev->memory);
+ }
}
static int
@@ -966,13 +1057,14 @@ overprint_copy_planes(gx_device * dev, const byte * data, int data_x, int raster
byte * gb_buff = 0;
gs_get_bits_params_t gb_params;
gs_int_rect gb_rect;
- int code = 0, raster;
+ int code = 0;
+ unsigned int raster;
int byte_depth;
int depth;
uchar num_comps;
uchar k,j;
gs_memory_t * mem = dev->memory;
- gx_color_index comps = opdev->drawn_comps;
+ gx_color_index comps = opdev->op_state == OP_STATE_FILL ? opdev->drawn_comps_fill : opdev->drawn_comps_stroke;
byte *curr_data = (byte *) data + data_x;
int row, offset;
@@ -1014,7 +1106,6 @@ overprint_copy_planes(gx_device * dev, const byte * data, int data_x, int raster
/* step through the height */
row = 0;
while (h-- > 0 && code >= 0) {
- comps = opdev->drawn_comps;
gb_rect.p.y = y++;
gb_rect.q.y = y;
offset = row * raster_in + data_x;
@@ -1078,14 +1169,15 @@ overprint_fill_rectangle_hl_color(gx_device *dev,
byte * gb_buff = 0;
gs_get_bits_params_t gb_params;
gs_int_rect gb_rect;
- int code = 0, raster;
+ int code = 0;
+ unsigned int raster;
int byte_depth;
int depth;
uchar num_comps;
int x, y, w, h;
uchar k, j;
gs_memory_t * mem = dev->memory;
- gx_color_index comps = opdev->drawn_comps;
+ gx_color_index comps;
gx_color_index mask;
int shift;
int deep;
@@ -1093,6 +1185,15 @@ overprint_fill_rectangle_hl_color(gx_device *dev,
if (tdev == 0)
return 0;
+ assert(opdev->op_state != 0);
+
+ /* See if we even need to do any overprinting. We have to maintain
+ the compositor active for fill/stroke cases even if we are only
+ doing a fill or a stroke */
+ if ((opdev->op_state == OP_STATE_FILL && opdev->retain_none_fill) ||
+ (opdev->op_state == OP_STATE_STROKE && opdev->retain_none_stroke))
+ return (*dev_proc(tdev, fill_rectangle_hl_color)) (tdev, rect, pgs, pdcolor, pcpath);
+
depth = tdev->color_info.depth;
num_comps = tdev->color_info.num_components;
@@ -1131,9 +1232,9 @@ overprint_fill_rectangle_hl_color(gx_device *dev,
/* step through the height */
while (h-- > 0 && code >= 0) {
- comps = opdev->drawn_comps;
gb_rect.p.y = y++;
gb_rect.q.y = y;
+ comps = opdev->op_state == OP_STATE_FILL ? opdev->drawn_comps_fill : opdev->drawn_comps_stroke;
/* And now through each plane */
for (k = 0; k < tdev->color_info.num_components; k++) {
/* First set the params to zero for all planes except the one we want */
@@ -1187,6 +1288,15 @@ overprint_sep_fill_rectangle(
else {
int depth = tdev->color_info.depth;
+ assert(opdev->op_state != 0);
+
+ /* See if we even need to do any overprinting. We have to maintain
+ the compositor active for fill/stroke cases even if we are only
+ doing a fill or a stroke */
+ if ((opdev->op_state == OP_STATE_FILL && opdev->retain_none_fill) ||
+ (opdev->op_state == OP_STATE_STROKE && opdev->retain_none_stroke))
+ return (*dev_proc(tdev, fill_rectangle)) (tdev, x, y, width, height, color);
+
/*
* Swap the color index into the order required by a byte-oriented
* bitmap. This is required only for littl-endian processors, and
@@ -1212,16 +1322,113 @@ overprint_sep_fill_rectangle(
* depth < 8 * sizeof(mono_fill_chunk).
*/
if ( depth <= 8 * sizeof(mono_fill_chunk) && (depth & (depth - 1)) == 0)
- return gx_overprint_sep_fill_rectangle_1(tdev, opdev->retain_mask,
- x, y, width, height,
- color, dev->memory);
+ return gx_overprint_sep_fill_rectangle_1(tdev, opdev->op_state == OP_STATE_FILL ?
+ opdev->retain_mask_fill : opdev->retain_mask_stroke,
+ x, y, width, height,
+ color, dev->memory);
else
- return gx_overprint_sep_fill_rectangle_2(tdev,opdev->retain_mask,
- x, y, width, height,
- color, dev->memory);
+ return gx_overprint_sep_fill_rectangle_2(tdev, opdev->op_state == OP_STATE_FILL ?
+ opdev->retain_mask_fill : opdev->retain_mask_stroke,
+ x, y, width, height,
+ color, dev->memory);
}
}
+/* We need this to ensure the device knows we are doing a fill */
+static int
+overprint_fill_path(gx_device* pdev, const gs_gstate* pgs,
+ gx_path* ppath, const gx_fill_params* params_fill,
+ const gx_device_color* pdcolor, const gx_clip_path* pcpath)
+{
+ overprint_device_t* opdev = (overprint_device_t*)pdev;
+
+ opdev->op_state = OP_STATE_FILL;
+ return gx_default_fill_path(pdev, pgs, ppath, params_fill,
+ pdcolor, pcpath);
+}
+
+/* We need this to ensure the device knows we are doing a stroke */
+static int
+overprint_stroke_path(gx_device* pdev, const gs_gstate* pgs,
+ gx_path* ppath, const gx_stroke_params* params_stroke,
+ const gx_device_color* pdcolor, const gx_clip_path* pcpath)
+{
+ overprint_device_t* opdev = (overprint_device_t*)pdev;
+ int code;
+
+ opdev->op_state = OP_STATE_STROKE;
+
+ /* Stroke methods use fill path so set that to default to
+ avoid mix up of is_fill_color */
+ opdev->procs.fill_path = gx_default_fill_path;
+ code = gx_default_stroke_path(pdev, pgs, ppath, params_stroke,
+ pdcolor, pcpath);
+ opdev->procs.fill_path = overprint_fill_path;
+
+ return code;
+}
+
+/*
+ * Cannot use default_fill_stroke_path because we need to set the is_fill_color
+ */
+static int
+overprint_fill_stroke_path(gx_device * pdev, const gs_gstate * pgs,
+ gx_path * ppath,
+ const gx_fill_params * params_fill,
+ const gx_device_color * pdevc_fill,
+ const gx_stroke_params * params_stroke,
+ const gx_device_color * pdevc_stroke,
+ const gx_clip_path * pcpath)
+{
+ int code;
+ overprint_device_t *opdev = (overprint_device_t *)pdev;
+
+ opdev->op_state = OP_STATE_FILL;
+ code = dev_proc(pdev, fill_path)(pdev, pgs, ppath, params_fill, pdevc_fill, pcpath);
+ if (code < 0)
+ return code;
+
+ /* Set up for stroke */
+ opdev->op_state = OP_STATE_STROKE;
+ code = dev_proc(pdev, stroke_path)(pdev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
+ return code;
+}
+
+/* We need to make sure we are set up properly based upon the text mode */
+static int
+overprint_text_begin(gx_device* dev, gs_gstate* pgs,
+ const gs_text_params_t* text, gs_font* font,
+ gx_path* path, const gx_device_color* pdcolor,
+ const gx_clip_path* pcpath,
+ gs_memory_t* mem, gs_text_enum_t** ppte)
+{
+ overprint_device_t* opdev = (overprint_device_t*)dev;
+
+ if (pgs->text_rendering_mode == 0)
+ opdev->op_state = OP_STATE_FILL;
+ else if (pgs->text_rendering_mode == 1)
+ opdev->op_state = OP_STATE_STROKE;
+
+ return gx_default_text_begin(dev, pgs, text, font,
+ path, pdcolor, pcpath, mem, ppte);
+}
+
+static int
+overprint_dev_spec_op(gx_device* pdev, int dev_spec_op,
+ void* data, int size)
+{
+ overprint_device_t* opdev = (overprint_device_t*)pdev;
+ gx_device* tdev = opdev->target;
+
+ if (tdev == 0)
+ return 0;
+
+ if (dev_spec_op == gxdso_overprint_active)
+ return !opdev->is_idle;
+
+ return dev_proc(tdev, dev_spec_op)(tdev, dev_spec_op, data, size);
+}
+
/* complete a procedure set */
static void
fill_in_procs(gx_device_procs * pprocs)
@@ -1254,14 +1461,6 @@ fill_in_procs(gx_device_procs * pprocs)
* Note that this routine will be called only if the device is not already
* an overprint compositor. Hence, if pct->params.retain_any_comps is
* false, we can just return.
- *
- * We also suppress use of overprint if the current device color model has only
- * a single component. In this case overprint mode is inapplicable (it applies
- * only to CMYK devices), and nothing can possibly be gained by using overprint.
- * More significantly, this cause avoids erroneous use of overprint when a
- * mask caching device is the current device, which would otherwise require
- * elaborate special handling in the caching device create_compositor
- * procedure.
*/
static int
c_overprint_create_default_compositor(
@@ -1286,17 +1485,17 @@ c_overprint_create_default_compositor(
}
/* build the overprint device */
- opdev = gs_alloc_struct_immovable( mem,
- overprint_device_t,
- &st_overprint_device_t,
- "create overprint compositor" );
+ opdev = gs_alloc_struct_immovable(mem,
+ overprint_device_t,
+ &st_overprint_device_t,
+ "create overprint compositor" );
*popdev = (gx_device *)opdev;
if (opdev == NULL)
return_error(gs_error_VMerror);
- gx_device_init( (gx_device *)opdev,
- (const gx_device *)&gs_overprint_device,
- mem,
- false );
+ gx_device_init((gx_device *)opdev,
+ (const gx_device *)&gs_overprint_device,
+ mem,
+ false );
memcpy(&opdev->no_overprint_procs,
&no_overprint_procs,
sizeof(no_overprint_procs));
@@ -1321,6 +1520,10 @@ c_overprint_create_default_compositor(
params = ovrpct->params;
params.idle = ovrpct->idle;
+ /* Initialize the stroke and fill states */
+ opdev->retain_none_fill = true;
+ opdev->retain_none_stroke = true;
+
/* set up the overprint parameters */
- return update_overprint_params( opdev, &params);
+ return update_overprint_params(opdev, &params);
}
diff --git a/base/gsovrc.h b/base/gsovrc.h
index 4df2df22..ccef5f5c 100644
--- a/base/gsovrc.h
+++ b/base/gsovrc.h
@@ -216,6 +216,12 @@
* closing of a device is not itself used as an error indication.
*/
+typedef enum {
+ OP_STATE_NONE = 0,
+ OP_STATE_FILL,
+ OP_STATE_STROKE,
+} OP_FS_STATE;
+
typedef struct gs_overprint_params_s gs_overprint_params_t;
struct gs_overprint_params_s {
@@ -227,38 +233,12 @@ struct gs_overprint_params_s {
* are ignored, and the compositor does nothing with respect to rendering
* (it doesn't even impose a performance penalty).
*
- * If this field is true, the retain_spot_comps and potentially the
- * retained_comps fields should be initialized.
*
* Note that this field may be false even if overprint is true. This
* would be the case if the current color space was a Separation color
* space with the component "All".
*/
- bool retain_any_comps;
-
- /*
- * Are spot (non-process) color component values retained?
- *
- * If overprint is true, this field will be true for all color spaces
- * other than Separation/DeviceN color spaces.
- *
- * The overprint compositor will itself determine what constitutes a
- * process color. This is done by using the color space mapping
- * routines for the target device for all three standard device
- * color spaces (DeviceGray, DeviceRGB, and DeviceCMYK) and the
- * set of all possible colors with individual components either 0
- * or 1. Any color model component which is mapped to 0 for all of
- * these cases is considered a spot color.
- *
- * If this field is true, the drawn_comps field (see below) is ignored.
- *
- * NB: This field should not be used if the DeviceCMYK color space
- * is being used with a DeviceCMYK color model (which may have
- * additional spot colors). Such a color model must explicitly
- * list the set of drawn components, so as to support overprint
- * mode.
- */
- bool retain_spot_comps;
+ bool retain_any_comps;
/*
* Don't we print anything with overprint ?
@@ -274,6 +254,9 @@ struct gs_overprint_params_s {
* it is to be left unaffected.
*/
gx_color_index drawn_comps;
+ bool is_fill_color; /* This tells us what the current color is for our set up */
+ OP_FS_STATE op_state; /* This sets the state of the device for an upcoming command */
+ bool effective_opm; /* PDF14 needs this information for its compatible blend mode */
};
/*
diff --git a/base/gspaint.c b/base/gspaint.c
index c8a98234..13836061 100644
--- a/base/gspaint.c
+++ b/base/gspaint.c
@@ -26,6 +26,7 @@
#include "gspath.h"
#include "gzpath.h"
#include "gxpaint.h"
+#include "gxpcolor.h" /* for do_fill_stroke */
#include "gzstate.h"
#include "gxdevice.h"
#include "gxdevmem.h"
@@ -36,6 +37,7 @@
#include "gxdevsop.h"
#include "gsicc_cms.h"
#include "gdevepo.h"
+#include "assert_.h"
/* Define the nominal size for alpha buffers. */
#define abuf_nominal_SMALL 500
@@ -198,7 +200,7 @@ scale_dash_pattern(gs_gstate * pgs, double scale)
Returns -ve for error
*/
static int
-alpha_buffer_init(gs_gstate * pgs, fixed extra_x, fixed extra_y, int alpha_bits,
+alpha_buffer_init(gs_gstate * pgs, fixed extra_x, fixed extra_y, int alpha_bits,
bool devn)
{
gx_device *dev = gs_currentdevice_inline(pgs);
@@ -303,6 +305,21 @@ static int do_fill(gs_gstate *pgs, int rule)
code = gs_gstate_color_load(pgs);
if (code < 0)
return code;
+
+ if (pgs->overprint || (!pgs->overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ gs_overprint_params_t op_params = { 0 };
+
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Fill Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+
+ op_params.op_state = OP_STATE_FILL;
+ gs_gstate_update_overprint(pgs, &op_params);
+ }
+
abits = 0;
{
gx_device_color *col = gs_currentdevicecolor_inline(pgs);
@@ -379,6 +396,7 @@ do_stroke(gs_gstate * pgs)
{
int code, abits, acode, rcode = 0;
bool devn;
+ bool is_fill_correct = true;
/* We need to distinguish text from vectors to set the object tag.
@@ -407,6 +425,34 @@ do_stroke(gs_gstate * pgs)
code = gs_gstate_color_load(pgs);
if (code < 0)
return code;
+
+
+ if (pgs->stroke_overprint || (!pgs->stroke_overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ gs_overprint_params_t op_params = { 0 };
+
+ /* PS2 does not have the concept of fill and stroke colors. Here we need to possibly correct
+ for that in the graphic state during this operation */
+ if (pgs->is_fill_color) {
+ is_fill_correct = false;
+ pgs->is_fill_color = false;
+ }
+
+
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Stroke Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0) {
+ if (!is_fill_correct) {
+ pgs->is_fill_color = true;
+ }
+ return code;
+ }
+
+ op_params.op_state = OP_STATE_STROKE;
+ gs_gstate_update_overprint(pgs, &op_params);
+ }
+
abits = 0;
{
gx_device_color *col = gs_currentdevicecolor_inline(pgs);
@@ -437,10 +483,18 @@ do_stroke(gs_gstate * pgs)
pgs->fill_adjust.x + extra_adjust,
pgs->fill_adjust.y + extra_adjust,
abits, devn);
- if (acode == 2) /* Special code meaning no fill required */
+ if (acode == 2) { /* Special code meaning no fill required */
+ if (!is_fill_correct) {
+ pgs->is_fill_color = true;
+ }
return 0;
- if (acode < 0)
+ }
+ if (acode < 0) {
+ if (!is_fill_correct) {
+ pgs->is_fill_color = true;
+ }
return acode;
+ }
gs_setlinewidth(pgs, new_width);
scale_dash_pattern(pgs, scale);
gs_setflat(pgs, orig_flatness * scale);
@@ -465,6 +519,10 @@ do_stroke(gs_gstate * pgs)
code = gx_stroke_fill(pgs->path, pgs);
if (code >= 0 && rcode < 0)
code = rcode;
+
+ if (!is_fill_correct) {
+ pgs->is_fill_color = true;
+ }
return code;
}
@@ -539,3 +597,224 @@ gs_strokepath2(gs_gstate * pgs)
{
return gs_strokepath_aux(pgs, false);
}
+
+static int do_fill_stroke(gs_gstate *pgs, int rule, int *restart)
+{
+ int code, abits, acode = 0, rcode = 0;
+ bool devn;
+ float orig_width, scale, orig_flatness;
+
+ /* It is either our first time, or the stroke was a pattern and
+ we are coming back from the error if restart < 1 (0 is first
+ time, 1 stroke is set, and we only need to finish out fill */
+ if (pgs->is_fill_color)
+ gs_swapcolors_quick(pgs);
+
+ if (*restart < 1) {
+
+ /* We need to distinguish text from vectors to set the object tag.
+
+ To make that determination, we check for the show graphics state being stored
+ in the current graphics state. This works even in the case of a glyph from a
+ Type 3 Postscript/PDF font which has multiple, nested gsave/grestore pairs in
+ the BuildGlyph/BuildChar procedure. Also, it works in the case of operating
+ without a glyph cache or bypassing the cache because the glyph is too large or
+ the cache being already full.
+
+ Note that it doesn't work for a construction like:
+ "(xyz) true charpath fill/stroke"
+ where the show machinations have completed before we get to the fill operation.
+ This has implications for how we handle PDF text rendering modes 1 and 2. To
+ handle that, we'll have to add a flag to the path structure, or to the path
+ segment structure (depending on how fine grained we require it to be).
+ */
+ if (pgs->show_gstate == NULL)
+ ensure_tag_is_set(pgs, pgs->device, GS_PATH_TAG); /* NB: may unset_dev_color */
+ else
+ ensure_tag_is_set(pgs, pgs->device, GS_TEXT_TAG); /* NB: may unset_dev_color */
+
+ /* if we are at restart == 0, we set the stroke color. */
+ code = gx_set_dev_color(pgs);
+ if (code != 0)
+ return code; /* may be gs_error_Remap_color or real error */
+ code = gs_gstate_color_load(pgs);
+ if (code < 0)
+ return code;
+ /* If this was a pattern color, make sure and lock it in the pattern_cache */
+ if (gx_dc_is_pattern1_color(gs_currentdevicecolor_inline(pgs))) {
+ gs_id id = gs_currentdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+
+ code = gx_pattern_cache_entry_set_lock(pgs, id, true);
+ if (code < 0)
+ return code; /* lock failed -- tile not in cache? */
+ }
+ }
+
+ if (pgs->stroke_overprint || (!pgs->stroke_overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] StrokeFill Stroke Set Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+ }
+ *restart = 1; /* finished, successfully with stroke_color */
+
+ gs_swapcolors_quick(pgs); /* switch to fill color */
+
+ /* Have to set the fill color too */
+ if (pgs->show_gstate == NULL)
+ ensure_tag_is_set(pgs, pgs->device, GS_PATH_TAG); /* NB: may unset_dev_color */
+ else
+ ensure_tag_is_set(pgs, pgs->device, GS_TEXT_TAG); /* NB: may unset_dev_color */
+
+ code = gx_set_dev_color(pgs);
+ if (code != 0) {
+ return code;
+ }
+ code = gs_gstate_color_load(pgs);
+ if (code < 0) {
+ /* color is set for fill, but a failure here is a problem */
+ /* i.e., something other than error_Remap_Color */
+ *restart = 2; /* we shouldn't re-enter with '2' */
+ goto out;
+ }
+
+ if (pgs->overprint || (!pgs->overprint && dev_proc(pgs->device, dev_spec_op)(pgs->device,
+ gxdso_overprint_active, NULL, 0))) {
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] StrokeFill Fill Set Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ goto out; /* fatal */
+ }
+
+ abits = 0;
+ {
+ gx_device_color *col_fill = gs_currentdevicecolor_inline(pgs);
+ gx_device_color *col_stroke = gs_altdevicecolor_inline(pgs);
+ devn = color_is_devn(col_fill) && color_is_devn(col_stroke);
+ /* could be devn and masked_devn */
+ if (color_is_pure(col_fill) || color_is_pure(col_stroke) || devn)
+ abits = alpha_buffer_bits(pgs);
+ }
+ if (abits > 1) {
+ /*
+ * Expand the bounding box by the line width.
+ * This is expensive to compute, so we only do it
+ * if we know we're going to buffer.
+ */
+ float new_width;
+ fixed extra_adjust;
+ float xxyy = fabs(pgs->ctm.xx) + fabs(pgs->ctm.yy);
+ float xyyx = fabs(pgs->ctm.xy) + fabs(pgs->ctm.yx);
+ gs_logical_operation_t orig_lop = pgs->log_op;
+ pgs->log_op |= lop_pdf14; /* Force stroking to happen all in 1 go */
+ scale = (float)(1 << (abits / 2));
+ orig_width = gs_currentlinewidth(pgs);
+ new_width = orig_width * scale;
+ extra_adjust =
+ float2fixed(max(xxyy, xyyx) * new_width / 2);
+ orig_flatness = gs_currentflat(pgs);
+
+ /* Scale up the line width, dash pattern, and flatness. */
+ if (extra_adjust < fixed_1)
+ extra_adjust = fixed_1;
+ acode = alpha_buffer_init(pgs,
+ pgs->fill_adjust.x + extra_adjust,
+ pgs->fill_adjust.y + extra_adjust,
+ abits, devn);
+ if (acode == 2) /* Special case for no fill required */
+ goto out;
+ if (acode < 0)
+ goto out;
+ gs_setlinewidth(pgs, new_width);
+ scale_dash_pattern(pgs, scale);
+ gs_setflat(pgs, orig_flatness * scale);
+ pgs->log_op = orig_lop;
+ } else
+ acode = 0;
+ code = gx_fill_stroke_path(pgs, rule);
+ if (abits > 1)
+ {
+ gs_setlinewidth(pgs, orig_width);
+ scale_dash_pattern(pgs, 1.0 / scale);
+ gs_setflat(pgs, orig_flatness);
+ acode = alpha_buffer_release(pgs, code >= 0);
+ }
+out:
+ if (gx_dc_is_pattern1_color(gs_altdevicecolor_inline(pgs))) {
+ gs_id id = gs_altdevicecolor_inline(pgs)->colors.pattern.p_tile->id;
+
+ rcode = gx_pattern_cache_entry_set_lock(pgs, id, false);
+ if (rcode < 0)
+ return rcode; /* unlock failed -- shouldn't be possible */
+ }
+ if (code >= 0 && acode < 0)
+ code = acode;
+ return code;
+}
+
+/* Fill the current path using a specified rule. */
+static int
+fill_stroke_with_rule(gs_gstate * pgs, int rule, int *restart)
+{
+ int code;
+
+ /* If we're inside a charpath, just merge the current path */
+ /* into the parent's path. */
+ if (pgs->in_charpath) {
+ /* If we're rendering a glyph cached, the show machinery decides
+ * whether to actually image it on the output or not, but uncached
+ * will render directly to the output, so for text rendering
+ * mode 3, we have to short circuit it here, but keep the
+ * current point
+ */
+ *restart = 0;
+ code = gx_path_add_char_path(pgs->show_gstate->path, pgs->path,
+ pgs->in_charpath);
+ if (code < 0)
+ return code;
+ if (pgs->in_charpath == cpm_true_charpath) {
+ /*
+ * A stroke inside a true charpath should do the
+ * equivalent of strokepath.
+ */
+ code = gs_strokepath(pgs);
+ if (code < 0)
+ return code;
+ code = gx_path_add_char_path(pgs->show_gstate->path, pgs->path,
+ pgs->in_charpath);
+ if (code < 0)
+ return code;
+ }
+ }
+ else if (gs_is_null_device(pgs->device) ||
+ (pgs->show_gstate && pgs->text_rendering_mode == 3 &&
+ pgs->in_cachedevice == CACHE_DEVICE_NOT_CACHING)) {
+ /* Text Rendering Mode = 3 => Neither stroke, nor fill */
+ /* Handle separately to prevent gs_gstate_color_load - bug 688308. */
+ *restart = 0;
+ gs_newpath(pgs);
+ code = 0;
+ } else {
+ code = do_fill_stroke(pgs, rule, restart);
+ if (code >= 0)
+ gs_newpath(pgs);
+ }
+ return code;
+}
+/* Fill using the winding number rule */
+int
+gs_fillstroke(gs_gstate * pgs, int *restart)
+{
+ pgs->device->sgr.stroke_stored = false;
+ return fill_stroke_with_rule(pgs, gx_rule_winding_number, restart);
+}
+/* Fill using the even/odd rule */
+int
+gs_eofillstroke(gs_gstate * pgs, int *restart)
+{
+ pgs->device->sgr.stroke_stored = false;
+ return fill_stroke_with_rule(pgs, gx_rule_even_odd, restart);
+}
diff --git a/base/gspaint.h b/base/gspaint.h
index 19a1040d..c95b6b48 100644
--- a/base/gspaint.h
+++ b/base/gspaint.h
@@ -28,7 +28,9 @@ int gs_erasepage(gs_gstate *),
gs_fillpage(gs_gstate *),
gs_fill(gs_gstate *),
gs_eofill(gs_gstate *),
- gs_stroke(gs_gstate *);
+ gs_stroke(gs_gstate *),
+ gs_fillstroke(gs_gstate * pgs, int *restart),
+ gs_eofillstroke(gs_gstate * pgs, int *restart);
/* Image tracing */
int gs_imagepath(gs_gstate *, int, int, const byte *);
diff --git a/base/gsparam.c b/base/gsparam.c
index b235d860..80cb0b2a 100644
--- a/base/gsparam.c
+++ b/base/gsparam.c
@@ -171,15 +171,25 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
* right now we can't. However, a 0-length heterogenous array
* will satisfy a request for any specific type.
*/
+ /* Strictly speaking assigning one element of union
+ * to another, overlapping element of a different size is
+ * undefined behavior, hence assign to intermediate variables
+ */
switch (pvalue->type /* actual type */ ) {
case gs_param_type_int:
switch (req_type) {
case gs_param_type_long:
- pvalue->value.l = pvalue->value.i;
+ {
+ long l = (long)pvalue->value.i;
+ pvalue->value.l = l;
goto ok;
+ }
case gs_param_type_float:
- pvalue->value.f = (float)pvalue->value.l;
+ {
+ float fl = (float)pvalue->value.l;
+ pvalue->value.f = fl;
goto ok;
+ }
default:
break;
}
@@ -187,15 +197,22 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
case gs_param_type_long:
switch (req_type) {
case gs_param_type_int:
+ {
+ int int1;
#if ARCH_SIZEOF_INT < ARCH_SIZEOF_LONG
if (pvalue->value.l != (int)pvalue->value.l)
return_error(gs_error_rangecheck);
#endif
- pvalue->value.i = (int)pvalue->value.l;
+ int1 = (int)pvalue->value.l;
+ pvalue->value.i = int1;
goto ok;
+ }
case gs_param_type_float:
- pvalue->value.f = (float)pvalue->value.l;
+ {
+ float fl = (float)pvalue->value.l;
+ pvalue->value.f = fl;
goto ok;
+ }
default:
break;
}
diff --git a/base/gspath.c b/base/gspath.c
index d55d5ffe..2080d2c4 100644
--- a/base/gspath.c
+++ b/base/gspath.c
@@ -329,26 +329,28 @@ static int common_clip(gs_gstate *, int);
The transparency group will be the intersection of the path and clipping
path */
int
-gx_curr_bbox(gs_gstate * pgs, gs_rect *bbox, gs_bbox_comp_t comp_type)
+gx_curr_fixed_bbox(gs_gstate * pgs, gs_fixed_rect *bbox, gs_bbox_comp_t comp_type)
{
- gx_clip_path *clip_path;
int code;
+ gx_clip_path *clip_path;
gs_fixed_rect path_bbox;
int expansion_code;
bool include_path = true;
gs_fixed_point expansion;
code = gx_effective_clip_path(pgs, &clip_path);
- if (code < 0) return code;
+ if (code < 0 || clip_path == NULL) {
+ bbox->p.x = bbox->p.y = bbox->q.x = bbox->q.y = 0;
+ return (code < 0) ? code : gs_error_unknownerror;
+ } else {
+ *bbox = clip_path->outer_box;
+ }
if (comp_type == NO_PATH) {
- bbox->p.x = fixed2float(clip_path->outer_box.p.x);
- bbox->p.y = fixed2float(clip_path->outer_box.p.y);
- bbox->q.x = fixed2float(clip_path->outer_box.q.x);
- bbox->q.y = fixed2float(clip_path->outer_box.q.y);
- return 0;
+ return 0;
}
code = gx_path_bbox(pgs->path, &path_bbox);
- if (code < 0) return code;
+ if (code < 0)
+ return code;
if (comp_type == PATH_STROKE) {
/* Handle any stroke expansion of our bounding box */
expansion_code = gx_stroke_path_expansion(pgs, pgs->path, &expansion);
@@ -364,22 +366,25 @@ gx_curr_bbox(gs_gstate * pgs, gs_rect *bbox, gs_bbox_comp_t comp_type)
}
}
if (include_path) {
- rect_intersect(path_bbox, clip_path->outer_box);
- /* clip path and drawing path */
- bbox->p.x = fixed2float(path_bbox.p.x);
- bbox->p.y = fixed2float(path_bbox.p.y);
- bbox->q.x = fixed2float(path_bbox.q.x);
- bbox->q.y = fixed2float(path_bbox.q.y);
- } else {
- /* clip path only */
- bbox->p.x = fixed2float(clip_path->outer_box.p.x);
- bbox->p.y = fixed2float(clip_path->outer_box.p.y);
- bbox->q.x = fixed2float(clip_path->outer_box.q.x);
- bbox->q.y = fixed2float(clip_path->outer_box.q.y);
+ rect_intersect(*bbox, path_bbox);
}
return 0;
}
+/* A variation of the above that returns a gs_rect (double) bbox */
+int
+gx_curr_bbox(gs_gstate * pgs, gs_rect *bbox, gs_bbox_comp_t comp_type)
+{
+ gs_fixed_rect curr_fixed_bbox;
+
+ gx_curr_fixed_bbox(pgs, &curr_fixed_bbox, comp_type);
+ bbox->p.x = fixed2float(curr_fixed_bbox.p.x);
+ bbox->p.y = fixed2float(curr_fixed_bbox.p.y);
+ bbox->q.x = fixed2float(curr_fixed_bbox.q.x);
+ bbox->q.y = fixed2float(curr_fixed_bbox.q.y);
+ return 0;
+}
+
/*
* Return the effective clipping path of a graphics state. Sometimes this
* is the intersection of the clip path and the view clip path; sometimes it
@@ -395,7 +400,7 @@ gx_effective_clip_path(gs_gstate * pgs, gx_clip_path ** ppcpath)
(pgs->view_clip == 0 || pgs->view_clip->rule == 0 ? gs_no_id :
pgs->view_clip->id);
- if (gs_device_is_memory(pgs->device)) {
+ if (pgs->device == NULL || gs_device_is_memory(pgs->device) || pgs->clip_path == NULL) {
*ppcpath = pgs->clip_path;
return 0;
}
diff --git a/base/gspcolor.c b/base/gspcolor.c
index 350682c6..e96331b1 100644
--- a/base/gspcolor.c
+++ b/base/gspcolor.c
@@ -281,7 +281,7 @@ gx_set_overprint_Pattern(const gs_color_space * pcs, gs_gstate * pgs)
if (!pgs->overprint) {
params.retain_any_comps = false;
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
return gs_gstate_update_overprint(pgs, &params);
}
return 0;
diff --git a/base/gsptype1.c b/base/gsptype1.c
index f81a63c1..7d4714f4 100644
--- a/base/gsptype1.c
+++ b/base/gsptype1.c
@@ -118,8 +118,11 @@ gs_pattern1_init(gs_pattern1_template_t * ppat)
}
/* Make an instance of a PatternType 1 pattern. */
-static int compute_inst_matrix(gs_pattern1_instance_t * pinst,
- gs_gstate * saved, gs_rect * pbbox, int width, int height);
+static int compute_inst_matrix(gs_pattern1_instance_t *pinst,
+ gs_gstate *saved,
+ gs_rect *pbbox,
+ int width, int height,
+ float *bbw, float *bbh);
int
gs_makepattern(gs_client_color * pcc, const gs_pattern1_template_t * pcp,
const gs_matrix * pmat, gs_gstate * pgs, gs_memory_t * mem)
@@ -145,6 +148,7 @@ gs_pattern1_make_pattern(gs_client_color * pcc,
int code = gs_make_pattern_common(pcc, (const gs_pattern_template_t *)pcp,
pmat, pgs, mem,
&st_pattern1_instance);
+ float bbw, bbh;
if (code < 0)
return code;
@@ -181,7 +185,7 @@ gs_pattern1_make_pattern(gs_client_color * pcc,
goto fsaved;
}
inst.templat = *pcp;
- code = compute_inst_matrix(&inst, saved, &bbox, dev_width, dev_height);
+ code = compute_inst_matrix(&inst, saved, &bbox, dev_width, dev_height, &bbw, &bbh);
if (code < 0)
goto fsaved;
@@ -214,9 +218,6 @@ gs_pattern1_make_pattern(gs_client_color * pcc,
if_debug5m('t', mem, "[t]bbox=(%g,%g),(%g,%g), uses_transparency=%d\n",
bbox.p.x, bbox.p.y, bbox.q.x, bbox.q.y, inst.templat.uses_transparency);
{
- float bbw = bbox.q.x - bbox.p.x;
- float bbh = bbox.q.y - bbox.p.y;
-
/* If the step and the size agree to within 1/2 pixel, */
/* make them the same. */
if (ADJUST_SCALE_BY_GS_TRADITION) {
@@ -235,7 +236,7 @@ gs_pattern1_make_pattern(gs_client_color * pcc,
bbox.p.x = bbox.p.y = bbox.q.x = bbox.q.y = 0;
} else {
/* Check for singular stepping matrix. */
- if (fabs(inst.step_matrix.xx * inst.step_matrix.yy - inst.step_matrix.xy * inst.step_matrix.yx) < 1.0e-6) {
+ if (fabs(inst.step_matrix.xx * inst.step_matrix.yy - inst.step_matrix.xy * inst.step_matrix.yx) < 1.0e-9) {
code = gs_note_error(gs_error_rangecheck);
goto fsaved;
}
@@ -247,7 +248,7 @@ gs_pattern1_make_pattern(gs_client_color * pcc,
gs_scale(saved, fabs(inst.size.x / inst.step_matrix.xx),
fabs(inst.size.y / inst.step_matrix.yy));
code = compute_inst_matrix(&inst, saved, &bbox,
- dev_width, dev_height);
+ dev_width, dev_height, &bbw, &bbh);
if (code < 0)
goto fsaved;
if (ADJUST_SCALE_FOR_THIN_LINES) {
@@ -529,14 +530,30 @@ clamp_pattern_bbox(gs_pattern1_instance_t * pinst, gs_rect * pbbox,
/* from the step values and the saved matrix. */
static int
compute_inst_matrix(gs_pattern1_instance_t * pinst, gs_gstate * saved,
- gs_rect * pbbox, int width, int height)
+ gs_rect * pbbox, int width, int height,
+ float *pbbw, float *pbbh)
{
float xx, xy, yx, yy, dx, dy, temp;
int code;
+ gs_matrix m = ctm_only(saved);
+
+ /* Bug 702124: Due to the limited precision of floats, we find that
+ * transforming (say) small height boxes in the presence of large tx/ty
+ * values can cause the box heights to map to 0. So calculate the
+ * width/height of the bbox before we roll the offset into it. */
+ m.tx = 0; m.ty = 0;
- code = gs_bbox_transform(&pinst->templat.BBox, &ctm_only(saved), pbbox);
+ code = gs_bbox_transform(&pinst->templat.BBox, &m, pbbox);
if (code < 0)
return code;
+
+ *pbbw = pbbox->q.x - pbbox->p.x;
+ *pbbh = pbbox->q.y - pbbox->p.y;
+
+ pbbox->p.x += ctm_only(saved).tx;
+ pbbox->p.y += ctm_only(saved).ty;
+ pbbox->q.x += ctm_only(saved).tx;
+ pbbox->q.y += ctm_only(saved).ty;
/*
* Adjust saved.ctm to map the bbox origin to pixels.
*/
@@ -704,7 +721,7 @@ gs_pattern1_set_color(const gs_client_color * pcc, gs_gstate * pgs)
gs_overprint_params_t params;
params.retain_any_comps = false;
- pgs->effective_overprint_mode = 0;
+ params.effective_opm = pgs->color[0].effective_opm = 0;
return gs_gstate_update_overprint(pgs, &params);
}
}
@@ -1628,6 +1645,7 @@ typedef struct gx_dc_serialized_tile_s {
} gx_dc_serialized_tile_t;
enum {
+ TILE_IS_LOCKED = 0x80000000,
TILE_HAS_OVERLAP = 0x40000000,
TILE_IS_SIMPLE = 0x20000000,
TILE_USES_TRANSP = 0x10000000,
@@ -1672,7 +1690,8 @@ gx_dc_pattern_write_raster(gx_color_tile *ptile, int64_t offset, byte *data,
buf.flags = ptile->depth
| (ptile->tiling_type<<TILE_TYPE_SHIFT)
| (ptile->is_simple ? TILE_IS_SIMPLE : 0)
- | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0);
+ | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0)
+ | (ptile->is_locked ? TILE_IS_LOCKED : 0);
if (sizeof(buf) > left) {
/* For a while we require the client to provide enough buffer size. */
return_error(gs_error_unregistered); /* Must not happen. */
@@ -1764,7 +1783,8 @@ gx_dc_pattern_trans_write_raster(gx_color_tile *ptile, int64_t offset, byte *dat
| TILE_USES_TRANSP
| (ptile->tiling_type<<TILE_TYPE_SHIFT)
| (ptile->is_simple ? TILE_IS_SIMPLE : 0)
- | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0);
+ | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0)
+ | (ptile->is_locked ? TILE_IS_LOCKED : 0);
buf.step_matrix = ptile->step_matrix;
buf.bbox = ptile->bbox;
buf.blending_mode = ptile->blending_mode;
@@ -1889,6 +1909,7 @@ gx_dc_pattern_write(
| (ptile->tiling_type<<TILE_TYPE_SHIFT)
| (ptile->is_simple ? TILE_IS_SIMPLE : 0)
| (ptile->has_overlap ? TILE_HAS_OVERLAP : 0)
+ | (ptile->is_locked ? TILE_IS_LOCKED : 0)
| (ptile->cdev->common.page_uses_transparency ? TILE_USES_TRANSP : 0);
buf.blending_mode = ptile->blending_mode; /* in case tile has transparency */
if (sizeof(buf) > left) {
@@ -2114,8 +2135,9 @@ gx_dc_pattern_read(
ptile->tiling_type = (buf.flags & TILE_TYPE_MASK)>>TILE_TYPE_SHIFT;
ptile->is_simple = !!(buf.flags & TILE_IS_SIMPLE);
ptile->has_overlap = !!(buf.flags & TILE_HAS_OVERLAP);
+ ptile->is_locked = !!(buf.flags & TILE_IS_LOCKED);
ptile->blending_mode = buf.blending_mode;
- ptile->is_dummy = 0;
+ ptile->is_dummy = false;
if (!(buf.flags & TILE_IS_CLIST)) {
diff --git a/base/gsptype2.c b/base/gsptype2.c
index 9bcf8af6..6573dee9 100644
--- a/base/gsptype2.c
+++ b/base/gsptype2.c
@@ -204,6 +204,9 @@ gs_pattern2_set_color(const gs_client_color * pcc, gs_gstate * pgs)
int code;
uchar k, num_comps;
+ /* Shading patterns can't use opm */
+ pgs->color[!pgs->is_fill_color].effective_opm = 0;
+
pinst->saved->overprint_mode = pgs->overprint_mode;
pinst->saved->overprint = pgs->overprint;
diff --git a/base/gssprintf.c b/base/gssprintf.c
index 49f54bd4..aab4051f 100644
--- a/base/gssprintf.c
+++ b/base/gssprintf.c
@@ -16,8 +16,9 @@
/* From: https://svn.apache.org/repos/asf/apr/apr/trunk/strings/apr_snprintf.c */
/* Additional modifications to work outside Apache for use with Ghostscript */
+#include "unistd_.h"
+#include "gp.h"
#include "stdio_.h"
-#include "stdint_.h"
#include "string_.h"
#include <stdarg.h>
#include "math_.h"
diff --git a/base/gsstate.c b/base/gsstate.c
index a7a61618..e48192ce 100644
--- a/base/gsstate.c
+++ b/base/gsstate.c
@@ -233,6 +233,9 @@ gs_gstate_alloc(gs_memory_t * mem)
if (code < 0)
goto fail;
gs_setalpha(pgs, 1.0);
+ gs_setfillconstantalpha(pgs, 1.0);
+ gs_setstrokeconstantalpha(pgs, 1.0);
+ gs_setalphaisshape(pgs, false);
gs_settransfer(pgs, gs_identity_transfer);
gs_setflat(pgs, 1.0);
gs_setfilladjust(pgs, 0.3, 0.3);
@@ -351,6 +354,14 @@ gs_gsave_for_save(gs_gstate * pgs, gs_gstate ** psaved)
/* Cut the stack so we can't grestore past here. */
*psaved = pgs->saved;
pgs->saved = 0;
+
+ code = gs_gsave(pgs);
+ if (code < 0) {
+ pgs->saved = *psaved;
+ *psaved = NULL;
+ gs_grestore(pgs);
+ return code;
+ }
return code;
fail:
if (new_cpath)
@@ -366,7 +377,6 @@ gs_grestore_only(gs_gstate * pgs)
gs_gstate tmp_gstate;
void *pdata = pgs->client_data;
void *sdata;
- bool prior_overprint = pgs->overprint;
if_debug2m('g', pgs->memory, "[g]grestore 0x%lx, level was %d\n",
(ulong) saved, pgs->level);
@@ -388,11 +398,6 @@ gs_grestore_only(gs_gstate * pgs)
*saved = tmp_gstate; /* restore "freed" state (pointers zeroed after contents freed) */
gs_free_object(pgs->memory, saved, "gs_grestore");
- /* update the overprint compositor, if necessary */
- if (prior_overprint || pgs->overprint)
- {
- return gs_do_set_overprint(pgs);
- }
return 0;
}
@@ -521,12 +526,7 @@ gs_setgstate(gs_gstate * pgs, const gs_gstate * pfrom)
pgs->view_clip = view_clip;
pgs->show_gstate =
(pgs->show_gstate == pfrom ? pgs : saved_show);
-
- /* update the overprint compositor, unconditionally. Unlike grestore, this */
- /* may skip over states where overprint was set, so the prior state can */
- /* not be relied on to avoid this call. setgstate is not as commonly used */
- /* as grestore, so the overhead of the compositor call is acceptable. */
- return(gs_do_set_overprint(pgs));
+ return 0;
}
/* Get the allocator pointer of a graphics state. */
@@ -632,28 +632,39 @@ gs_do_set_overprint(gs_gstate * pgs)
if (cs_num_components(pcs) < 0 && pcc->pattern != 0)
code = pcc->pattern->type->procs.set_color(pcc, pgs);
- else
- {
+ else {
+ gx_device* dev = pgs->device;
+ cmm_dev_profile_t* dev_profile;
+
+ dev_proc(dev, get_profile)(dev, &dev_profile);
+ if (!dev_profile->sim_overprint || dev_profile->device_profile[0]->data_cs != gsCMYK)
+ return code;
+
/* The spaces that do not allow opm (e.g. ones that are not ICC or DeviceCMYK)
will blow away any true setting later. But we have to be prepared
- in case this is an CMYK ICC space for example. Hence we set effective mode
+ in case this is a CMYK ICC space for example. Hence we set effective mode
to mode here (Bug 698721)*/
- pgs->effective_overprint_mode = pgs->overprint_mode;
+ pgs->color[0].effective_opm = pgs->overprint_mode;
+
+ if_debug2m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] gs_do_set_overprint. Preset effective mode. pgs->color[0].effective_opm = %d pgs->color[1].effective_opm = %d\n",
+ pgs->color[0].effective_opm, pgs->color[1].effective_opm);
+
pcs->type->set_overprint(pcs, pgs);
}
return code;
}
-/* setoverprint */
+/* setoverprint (non-stroke case) interpreter code
+ ensures that this is called when appropriate. This
+ should only be coming when we are doing PS files.
+ As they don't have separate stroke and fill overprint
+ controls */
void
gs_setoverprint(gs_gstate * pgs, bool ovp)
{
- bool prior_ovp = pgs->overprint;
-
pgs->overprint = ovp;
pgs->stroke_overprint = ovp;
- if (prior_ovp != ovp)
- (void)gs_do_set_overprint(pgs);
}
/* currentoverprint */
@@ -681,11 +692,7 @@ gs_currentstrokeoverprint(const gs_gstate * pgs)
void
gs_setfilloverprint(gs_gstate * pgs, bool ovp)
{
- bool prior_ovp = pgs->overprint;
-
pgs->overprint = ovp;
- if (prior_ovp != ovp)
- (void)gs_do_set_overprint(pgs);
}
/* currentstrokeoverprint */
@@ -699,15 +706,11 @@ gs_currentfilloverprint(const gs_gstate * pgs)
int
gs_setoverprintmode(gs_gstate * pgs, int mode)
{
- int prior_mode = pgs->effective_overprint_mode;
- int code = 0;
-
if (mode < 0 || mode > 1)
return_error(gs_error_rangecheck);
pgs->overprint_mode = mode;
- if (pgs->overprint && prior_mode != mode)
- code = gs_do_set_overprint(pgs);
- return code;
+
+ return 0;
}
/* currentoverprintmode */
@@ -1205,11 +1208,11 @@ gstate_alloc(gs_memory_t * mem, client_name_t cname, const gs_gstate * pfrom)
/* Copy the dash pattern from one gstate to another. */
static int
-gstate_copy_dash(gs_gstate * pto, const gs_gstate * pfrom)
+gstate_copy_dash(gs_memory_t *mem, gx_dash_params *dash , const gs_gstate * pfrom)
{
- return gs_setdash(pto, pfrom->line_params.dash.pattern,
+ return gx_set_dash(dash, pfrom->line_params.dash.pattern,
pfrom->line_params.dash.pattern_size,
- pfrom->line_params.dash.offset);
+ pfrom->line_params.dash.offset, mem);
}
/* Clone an existing graphics state. */
@@ -1222,28 +1225,35 @@ gstate_clone(gs_gstate * pfrom, gs_memory_t * mem, client_name_t cname,
{
gs_gstate *pgs = gstate_alloc(mem, cname, pfrom);
gs_gstate_parts parts;
+ void *pdata = NULL;
+ gx_dash_params dash;
- if (pgs == 0)
+ if (pgs == NULL)
return 0;
GSTATE_ASSIGN_PARTS(&parts, pgs);
- *pgs = *pfrom;
- /* Copy the dash pattern if necessary. */
- if (pgs->line_params.dash.pattern) {
- int code;
+ if (pfrom->client_data != NULL) {
+ pdata = (*pfrom->client_procs.alloc) (mem);
- pgs->line_params.dash.pattern = 0; /* force allocation */
- code = gstate_copy_dash(pgs, pfrom);
- if (code < 0)
+ if (pdata == NULL ||
+ gstate_copy_client_data(pfrom, pdata, pfrom->client_data, reason) < 0
+ )
goto fail;
}
- if (pgs->client_data != 0) {
- void *pdata = pgs->client_data = (*pgs->client_procs.alloc) (mem);
+ /* Copy the dash and dash pattern if necessary. */
+ dash = gs_currentlineparams_inline(pfrom)->dash;
+ if (pfrom->line_params.dash.pattern) {
+ int code;
- if (pdata == 0 ||
- gstate_copy_client_data(pgs, pdata, pfrom->client_data, reason) < 0
- )
+ dash.pattern = NULL; /* Ensures a fresh allocation */
+ code = gstate_copy_dash(mem, &dash, pfrom);
+ if (code < 0)
goto fail;
}
+ *pgs = *pfrom;
+ pgs->client_data = pdata;
+ gs_currentlineparams_inline(pgs)->dash = dash;
+ pgs->memory = mem;
+
gs_gstate_copied(pgs);
/* Don't do anything to clip_stack. */
@@ -1268,6 +1278,8 @@ gstate_clone(gs_gstate * pfrom, gs_memory_t * mem, client_name_t cname,
cs_adjust_counts_icc(pgs, 1);
return pgs;
fail:
+ if (pdata != NULL)
+ (*pfrom->client_procs.free) (pdata, mem);
memset(pgs->color, 0, 2*sizeof(gs_gstate_color));
gs_free_object(mem, pgs->line_params.dash.pattern, cname);
GSTATE_ASSIGN_PARTS(pgs, &parts);
@@ -1346,7 +1358,8 @@ gstate_copy(gs_gstate * pto, const gs_gstate * pfrom,
GSTATE_ASSIGN_PARTS(&parts, pto);
/* Copy the dash pattern if necessary. */
if (pfrom->line_params.dash.pattern || pto->line_params.dash.pattern) {
- int code = gstate_copy_dash(pto, pfrom);
+ int code = gstate_copy_dash(pto->memory,
+ &(gs_currentlineparams_inline(pto)->dash), pfrom);
if (code < 0)
return code;
@@ -1425,8 +1438,13 @@ gs_id gx_get_clip_path_id(gs_gstate *pgs)
return pgs->clip_path->id;
}
-void gs_swapcolors_quick(gs_gstate *pgs)
+void gs_swapcolors_quick(const gs_gstate *cpgs)
{
+ union {
+ const gs_gstate *cpgs;
+ gs_gstate *pgs;
+ } const_breaker;
+ gs_gstate *pgs;
struct gx_cie_joint_caches_s *tmp_cie;
gs_devicen_color_map tmp_ccm;
gs_client_color *tmp_cc;
@@ -1434,6 +1452,11 @@ void gs_swapcolors_quick(gs_gstate *pgs)
gx_device_color *tmp_dc;
gs_color_space *tmp_cs;
+ /* Break const just once, neatly, here rather than
+ * hackily in every caller. */
+ const_breaker.cpgs = cpgs;
+ pgs = const_breaker.pgs;
+
tmp_cc = pgs->color[0].ccolor;
pgs->color[0].ccolor = pgs->color[1].ccolor;
pgs->color[1].ccolor = tmp_cc;
@@ -1446,6 +1469,11 @@ void gs_swapcolors_quick(gs_gstate *pgs)
pgs->color[0].color_space = pgs->color[1].color_space;
pgs->color[1].color_space = tmp_cs;
+ /* Overprint and effective_op vary with stroke/fill and cs */
+ tmp = pgs->color[0].effective_opm;
+ pgs->color[0].effective_opm = pgs->color[1].effective_opm;
+ pgs->color[1].effective_opm = tmp;
+
/* Swap the bits of the gs_gstate that depend on the current color */
tmp_cie = pgs->cie_joint_caches;
pgs->cie_joint_caches = pgs->cie_joint_caches_alt;
@@ -1455,32 +1483,5 @@ void gs_swapcolors_quick(gs_gstate *pgs)
pgs->color_component_map = pgs->color_component_map_alt;
pgs->color_component_map_alt = tmp_ccm;
- tmp = pgs->overprint;
- pgs->overprint = pgs->stroke_overprint;
- pgs->stroke_overprint = tmp;
-}
-
-int gs_swapcolors(gs_gstate *pgs)
-{
- int prior_overprint = pgs->overprint;
-
- gs_swapcolors_quick(pgs);
-
- /* The following code will only call gs_do_set_overprint when we
- * have a change:
- * if ((prior_overprint != pgs->overprint) ||
- * ((prior_mode != pgs->effective_overprint_mode) &&
- * (pgs->overprint)))
- * return gs_do_set_overprint(pgs);
- * Sadly, that's no good, as we need to call when we have swapped
- * image space types too (separation <-> non separation for example).
- *
- * So instead, we call whenever at least one of them had overprint
- * turned on.
- */
- if (prior_overprint || pgs->overprint)
- {
- return gs_do_set_overprint(pgs);
- }
- return 0;
+ pgs->is_fill_color = !(pgs->is_fill_color); /* used by overprint for fill_stroke */
}
diff --git a/base/gstext.c b/base/gstext.c
index 1296e64f..c1fea18f 100644
--- a/base/gstext.c
+++ b/base/gstext.c
@@ -31,6 +31,7 @@
#include "gxtext.h"
#include "gzstate.h"
#include "gsutil.h"
+#include "gxdevsop.h"
/* GC descriptors */
public_st_gs_text_params();
@@ -271,6 +272,12 @@ gs_text_begin(gs_gstate * pgs, const gs_text_params_t * text,
{
gx_clip_path *pcpath = 0;
int code;
+ gs_overprint_params_t op_params = { 0 };
+ bool op_active = dev_proc(pgs->device, dev_spec_op)(pgs->device, gxdso_overprint_active, NULL, 0);
+ bool text_op_fill = ((pgs->overprint || (!pgs->overprint && op_active)) &&
+ (pgs->text_rendering_mode == 0));
+ bool text_op_stroke = ((pgs->stroke_overprint || (!pgs->stroke_overprint && op_active)) &&
+ (pgs->text_rendering_mode == 1));
/*
* Detect nocurrentpoint now, even if the string is empty, for Adobe
@@ -310,6 +317,40 @@ gs_text_begin(gs_gstate * pgs, const gs_text_params_t * text,
code = gs_gstate_color_load(pgs);
if (code < 0)
return code;
+
+ if (text_op_stroke) {
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Stroke Text Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+ } else if (text_op_fill) {
+ if_debug0m(gs_debug_flag_overprint, pgs->memory,
+ "[overprint] Fill Text Overprint\n");
+ code = gs_do_set_overprint(pgs);
+ if (code < 0)
+ return code;
+ }
+
+ /* If overprint is true, push the compositor action to set the op device state */
+ if ((pgs->overprint && pgs->text_rendering_mode == 0) ||
+ (pgs->stroke_overprint && pgs->text_rendering_mode == 1) ||
+ op_active) {
+ gx_device* dev = pgs->device;
+ cmm_dev_profile_t* dev_profile;
+
+ dev_proc(dev, get_profile)(dev, &dev_profile);
+ if (dev_profile->sim_overprint && dev_profile->device_profile[0]->data_cs == gsCMYK) {
+ if (pgs->text_rendering_mode == 0) {
+ op_params.op_state = OP_STATE_FILL;
+ gs_gstate_update_overprint(pgs, &op_params);
+ } else if (pgs->text_rendering_mode == 1) {
+ op_params.op_state = OP_STATE_STROKE;
+ gs_gstate_update_overprint(pgs, &op_params);
+ }
+ }
+ }
+
pgs->device->sgr.stroke_stored = false;
return gx_device_text_begin(pgs->device, pgs,
text, pgs->font, pgs->path,
diff --git a/base/gstparam.h b/base/gstparam.h
index 4de92bfb..e8aa4fb3 100644
--- a/base/gstparam.h
+++ b/base/gstparam.h
@@ -55,6 +55,17 @@ typedef enum {
"HardLight", "Overlay", "SoftLight", "Luminosity", "Hue",\
"Saturation", "Color", "CompatibleOverprint", "Compatible"
+#define blend_is_idempotent(B) \
+ (((((1<<BLEND_MODE_Multiply) | \
+ (1<<BLEND_MODE_Screen) | \
+ (1<<BLEND_MODE_Overlay) | \
+ (1<<BLEND_MODE_ColorDodge) | \
+ (1<<BLEND_MODE_ColorBurn) | \
+ (1<<BLEND_MODE_HardLight) | \
+ (1<<BLEND_MODE_SoftLight) | \
+ (1<<BLEND_MODE_Difference) | \
+ (1<<BLEND_MODE_Exclusion)) >> (B)) & 1) == 0)
+
/* Define the parameter structure for a transparency group. */
/* (Update gs_trans_group_params_init if these change.) */
typedef struct gs_transparency_group_params_s {
diff --git a/base/gstrans.h b/base/gstrans.h
index 0c9a3cd6..3dc72983 100644
--- a/base/gstrans.h
+++ b/base/gstrans.h
@@ -72,7 +72,10 @@ typedef enum {
#define PDF14_SET_SHAPE_ALPHA (1 << 2)
#define PDF14_SET_OPACITY_ALPHA (1 << 3)
#define PDF14_SET_OVERPRINT (1 << 4)
-#define PDF14_SET_OVERPRINT_MODE (1 << 5)
+#define PDF14_SET_FILLCONSTANTALPHA (1 << 6)
+#define PDF14_SET_STROKECONSTANTALPHA (1 << 7)
+#define PDF14_SET_STROKEOVERPRINT (1 << 8)
+#define PDF_SET_FILLSTROKE_STATE (1 << 9)
/* Used for keeping track of the text group madness, since we have the pdf14
device needs to know if we are int an BT/ET group vs. a FreeText Annotation
@@ -81,7 +84,8 @@ typedef enum {
typedef enum {
PDF14_TEXTGROUP_NO_BT, /* We are not in a BT/ET. Avoids Annotation Texts */
PDF14_TEXTGROUP_BT_NOT_PUSHED, /* We are in a BT/ET but no group pushed */
- PDF14_TEXTGROUP_BT_PUSHED /* We are in a BT/ET section and group was pushed */
+ PDF14_TEXTGROUP_BT_PUSHED, /* We are in a BT/ET section and group was pushed */
+ PDF14_TEXTGROUP_MISSING_ET /* We pushed a group already and then had another BT occur */
} pdf14_text_group_state;
typedef struct gs_transparency_source_s {
@@ -122,11 +126,15 @@ struct gs_pdf14trans_params_s {
int text_group;
gs_transparency_source_t opacity;
gs_transparency_source_t shape;
+ float fillconstantalpha;
+ float strokeconstantalpha;
bool mask_is_image;
gs_matrix ctm;
bool replacing;
bool overprint;
+ bool stroke_overprint;
bool effective_overprint_mode;
+ bool stroke_effective_op_mode;
bool idle; /* For clist reader.*/
uint mask_id; /* For clist reader.*/
int group_color_numcomps;
@@ -136,6 +144,7 @@ struct gs_pdf14trans_params_s {
bool crop_blend_params; /* This is used when the blend params are updated
during a transparency group push */
bool is_pattern; /* Needed to detect device push and pop for clist pattern */
+ PDF14_OP_FS_STATE op_fs_state;
};
/*
diff --git a/base/gstype42.c b/base/gstype42.c
index 49052a5d..3b8761de 100644
--- a/base/gstype42.c
+++ b/base/gstype42.c
@@ -773,17 +773,16 @@ gs_type42_find_post_name(gs_font_type42 * pfont, gs_glyph glyph, gs_string *gnam
if (gind < numglyphs) {
offs = pfont->data.post_offset + 34 + numglyphs * 2;
for (i = 0; i < numglyphs; i++) {
- byte len;
if (i == gind) {
- READ_SFNTS(pfont, offs, 1, &len);
- code = pfont->data.string_proc(pfont, offs + 1, len, (const byte **)&(gname->data));
+ READ_SFNTS(pfont, offs, 1, val);
+ code = pfont->data.string_proc(pfont, offs + 1, (uint)val[0], (const byte **)&(gname->data));
if (code > 0)
- gname->size = len;
+ gname->size = val[0];
break;
}
else {
- READ_SFNTS(pfont, offs, 1, &len);
- offs += len + 1;
+ READ_SFNTS(pfont, offs, 1, val);
+ offs += (uint)val[0] + 1;
}
}
}
diff --git a/base/gsutil.c b/base/gsutil.c
index d936d894..8d9c8679 100644
--- a/base/gsutil.c
+++ b/base/gsutil.c
@@ -24,8 +24,6 @@
#include "gsrect.h" /* for prototypes */
#include "gsuid.h"
#include "gsutil.h" /* for prototypes */
-#include "gzstate.h"
-#include "gxdcolor.h"
/* ------ Unique IDs ------ */
diff --git a/base/gxacpath.c b/base/gxacpath.c
index 6487c300..ebed0eb6 100644
--- a/base/gxacpath.c
+++ b/base/gxacpath.c
@@ -228,8 +228,8 @@ gx_cpath_accum_end(gx_device_cpath_accum * padev, gx_clip_path * pcpath)
apath.path_valid = false;
apath.id = gs_next_ids(padev->list_memory, 1); /* path changed => change id */
apath.cached = NULL;
- gx_cpath_assign_free(pcpath, &apath);
- return 0;
+ code = gx_cpath_assign_free(pcpath, &apath);
+ return code;
}
/* Discard an accumulator in case of error. */
diff --git a/base/gxblend.c b/base/gxblend.c
index 59d0deaf..8e806888 100644
--- a/base/gxblend.c
+++ b/base/gxblend.c
@@ -745,7 +745,7 @@ art_blend_saturation_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_
int mins, maxs;
int y;
int64_t scale;
- int r, g, b;
+ int64_t r, g, b;
minb = rb < gb ? rb : gb;
minb = minb < bb ? minb : bb;
@@ -764,15 +764,19 @@ art_blend_saturation_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_
maxs = rs > gs ? rs : gs;
maxs = maxs > bs ? maxs : bs;
+ /* -65535 <= maxs - mins <= 65535 i.e. 17 bits */
+ /* -65535 <= maxb - minb <= 65535 i.e. 17 bits */
+ /* worst case, maxb - minb == +/- 1, so scale would be 33 bits. */
scale = (((int64_t)(maxs - mins)) << 16) / (maxb - minb);
+ /* 0 <= y <= 65535 */
y = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8;
r = y + ((((rb - y) * scale) + 0x8000) >> 16);
g = y + ((((gb - y) * scale) + 0x8000) >> 16);
b = y + ((((bb - y) * scale) + 0x8000) >> 16);
- if ((r | g | b) & 0x10000) {
+ if ((r | g | b) & (int64_t)~0xffff) {
int64_t scalemin, scalemax;
- int min, max;
+ int64_t min, max;
min = r < g ? r : g;
min = min < b ? min : b;
@@ -780,7 +784,7 @@ art_blend_saturation_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_
max = max > b ? max : b;
if (min < 0)
- scalemin = ((int64_t)(y << 16)) / (y - min);
+ scalemin = (((int64_t)y) << 16) / (y - min);
else
scalemin = 0x10000;
@@ -1207,7 +1211,10 @@ art_blend_pixel_8_inline(byte *gs_restrict dst, const byte *gs_restrict backdrop
* PDF specification */
case BLEND_MODE_CompatibleOverprint:
{
- gx_color_index drawn_comps = p14dev->drawn_comps;
+ gx_color_index drawn_comps = p14dev->op_state == PDF14_OP_STATE_FILL ?
+ p14dev->drawn_comps_fill : p14dev->drawn_comps_stroke;
+ bool opm = p14dev->op_state == PDF14_OP_STATE_FILL ?
+ p14dev->effective_overprint_mode : p14dev->stroke_effective_op_mode;
gx_color_index comps;
/* If overprint mode is true and the current color space and
* the group color space are CMYK (or CMYK and spots), then
@@ -1266,12 +1273,14 @@ art_blend_pixel_8_inline(byte *gs_restrict dst, const byte *gs_restrict backdrop
the mixing of the source with the blend result. Essentially
replacing that mixing with the color we have here.
*/
- if (p14dev->effective_overprint_mode && p14dev->color_info.num_components > 3
+ if (opm && p14dev->color_info.num_components > 3
&& !(p14dev->ctx->additive)) {
- for (i = 0; i < 4; i++) {
- b = backdrop[i];
- s = src[i];
- dst[i] = s < 0xff ? s : b; /* Subtractive zero */
+ for (i = 0, comps = drawn_comps; i < 4; i++, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst[i] = src[i];
+ } else {
+ dst[i] = backdrop[i];
+ }
}
for (i = 4; i < n_chan; i++) {
dst[i] = backdrop[i];
@@ -1462,7 +1471,10 @@ art_blend_pixel_16_inline(uint16_t *gs_restrict dst, const uint16_t *gs_restrict
* PDF specification */
case BLEND_MODE_CompatibleOverprint:
{
- gx_color_index drawn_comps = p14dev->drawn_comps;
+ gx_color_index drawn_comps = p14dev->op_state == PDF14_OP_STATE_FILL ?
+ p14dev->drawn_comps_fill : p14dev->drawn_comps_stroke;
+ bool opm = p14dev->op_state == PDF14_OP_STATE_FILL ?
+ p14dev->effective_overprint_mode : p14dev->stroke_effective_op_mode;
gx_color_index comps;
/* If overprint mode is true and the current color space and
* the group color space are CMYK (or CMYK and spots), then
@@ -1472,12 +1484,14 @@ art_blend_pixel_16_inline(uint16_t *gs_restrict dst, const uint16_t *gs_restrict
* the CMYK colorants (see gx_put_blended_image_cmykspot).
* that way we don't have to worry about where the process colors
* are. */
- if (p14dev->effective_overprint_mode && p14dev->color_info.num_components > 3
+ if (opm && p14dev->color_info.num_components > 3
&& !(p14dev->ctx->additive)) {
- for (i = 0; i < 4; i++) {
- b = backdrop[i];
- s = src[i];
- dst[i] = s < 0xffff ? s : b; /* Subtractive zero */
+ for (i = 0, comps = drawn_comps; i < 4; i++, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst[i] = src[i];
+ } else {
+ dst[i] = backdrop[i];
+ }
}
for (i = 4; i < n_chan; i++) {
dst[i] = backdrop[i];
@@ -1527,9 +1541,10 @@ art_pdf_union_8(byte alpha1, byte alpha2)
}
#endif
-static void
-art_pdf_knockout_composite_pixel_alpha_8(byte *gs_restrict backdrop, byte tos_shape, byte *gs_restrict dst,
- const byte *gs_restrict src, int n_chan, gs_blend_mode_t blend_mode,
+static byte*
+art_pdf_knockout_composite_pixel_alpha_8(byte *gs_restrict backdrop, byte tos_shape,
+ byte *gs_restrict dst, byte *gs_restrict src, int n_chan,
+ gs_blend_mode_t blend_mode,
const pdf14_nonseparable_blending_procs_t * pblend_procs,
pdf14_device *p14dev)
{
@@ -1546,16 +1561,15 @@ art_pdf_knockout_composite_pixel_alpha_8(byte *gs_restrict backdrop, byte tos_sh
/* source alpha is zero, if we have a src shape value there then copy
the backdrop, else leave it alone */
if (tos_shape)
- memcpy(dst, backdrop, n_chan + 1);
- return;
+ return backdrop;
+ return NULL;
}
/* In this case a_s is not zero */
if (a_b == 0) {
/* backdrop alpha is zero but not source alpha, just copy source pixels and
avoid computation. */
- memcpy(dst, src, n_chan + 1);
- return;
+ return src;
}
/* Result alpha is Union of backdrop and source alpha */
@@ -1594,11 +1608,12 @@ art_pdf_knockout_composite_pixel_alpha_8(byte *gs_restrict backdrop, byte tos_sh
}
}
dst[n_chan] = a_r;
+ return dst;
}
-static void
+static forceinline uint16_t*
art_pdf_knockout_composite_pixel_alpha_16(uint16_t *gs_restrict backdrop, uint16_t tos_shape, uint16_t *gs_restrict dst,
- const uint16_t *gs_restrict src, int n_chan, gs_blend_mode_t blend_mode,
+ uint16_t *gs_restrict src, int n_chan, gs_blend_mode_t blend_mode,
const pdf14_nonseparable_blending_procs_t * pblend_procs,
pdf14_device *p14dev)
{
@@ -1615,16 +1630,15 @@ art_pdf_knockout_composite_pixel_alpha_16(uint16_t *gs_restrict backdrop, uint16
/* source alpha is zero, if we have a src shape value there then copy
the backdrop, else leave it alone */
if (tos_shape)
- memcpy(dst, backdrop, 2*(n_chan + 1));
- return;
+ return backdrop;
+ return NULL;
}
/* In this case a_s is not zero */
if (a_b == 0) {
/* backdrop alpha is zero but not source alpha, just copy source pixels and
avoid computation. */
- memcpy(dst, src, 2*(n_chan + 1));
- return;
+ return src;
}
/* Result alpha is Union of backdrop and source alpha */
@@ -1666,6 +1680,7 @@ art_pdf_knockout_composite_pixel_alpha_16(uint16_t *gs_restrict backdrop, uint16
}
}
dst[n_chan] = a_r;
+ return dst;
}
void
@@ -2073,9 +2088,6 @@ art_pdf_composite_pixel_alpha_16_fast_mono(uint16_t *gs_restrict dst, const uint
* @alpha: Alpha mask value.
* @src_alpha_g: alpha_g value associated with @src.
* @blend_mode: Blend mode for compositing.
- * @first_blend_spot: The first component for which Normal blending should be used.
- * @pblend_procs: Procs for handling non separable blending modes.
- * @p14dev: pdf14 device
*
* Note: this is only for non-isolated groups. This covers only the
* single-alpha case. A separate function is needed for dual-alpha,
@@ -2094,9 +2106,7 @@ art_pdf_composite_pixel_alpha_16_fast_mono(uint16_t *gs_restrict dst, const uint
static forceinline int
art_pdf_recomposite_group_8(byte *gs_restrict *dstp, byte *gs_restrict dst_alpha_g,
byte *gs_restrict src, byte src_alpha_g, int n_chan,
- byte alpha, gs_blend_mode_t blend_mode, int first_blend_spot,
- const pdf14_nonseparable_blending_procs_t * pblend_procs,
- pdf14_device *p14dev)
+ byte alpha, gs_blend_mode_t blend_mode)
{
byte dst_alpha;
int i;
@@ -2157,16 +2167,32 @@ art_pdf_recomposite_group_8(byte *gs_restrict *dstp, byte *gs_restrict dst_alpha
}
static forceinline int
+art_pdf_ko_recomposite_group_8(byte tos_shape,
+ byte src_alpha_g, byte* gs_restrict* dstp,
+ byte* gs_restrict dst_alpha_g, byte* gs_restrict src,
+ int n_chan, byte alpha, gs_blend_mode_t blend_mode, bool has_mask)
+{
+ byte* gs_restrict dst = *dstp;
+
+ if (tos_shape == 0 || src_alpha_g == 0) {
+ /* If a softmask was present pass it along Bug 693548 */
+ if (has_mask)
+ dst[n_chan] = alpha;
+ return 0;
+ }
+
+ return art_pdf_recomposite_group_8(dstp, dst_alpha_g, src, src_alpha_g,
+ n_chan, alpha, blend_mode);
+}
+
+static forceinline int
art_pdf_recomposite_group_16(uint16_t *gs_restrict *dstp, uint16_t *gs_restrict dst_alpha_g,
uint16_t *gs_restrict src, uint16_t src_alpha_g, int n_chan,
- uint16_t alpha, gs_blend_mode_t blend_mode, int first_blend_spot,
- const pdf14_nonseparable_blending_procs_t * pblend_procs,
- pdf14_device *p14dev)
+ uint16_t alpha, gs_blend_mode_t blend_mode)
{
uint16_t dst_alpha;
int i;
- int tmp;
- int scale;
+ uint32_t tmp;
uint16_t *gs_restrict dst = *dstp;
if (src_alpha_g == 0)
@@ -2192,25 +2218,24 @@ art_pdf_recomposite_group_16(uint16_t *gs_restrict *dstp, uint16_t *gs_restrict
if (src_alpha_g != 65535 && dst_alpha != 0) {
/* Uncomposite the color. In other words, solve
"src = (src, src_alpha_g) over dst" for src */
- scale = ((unsigned int)(dst_alpha * 65535 + (src_alpha_g>>1))) / src_alpha_g -
+ uint32_t scale = ((unsigned int)(dst_alpha * 65535 + (src_alpha_g>>1))) / src_alpha_g -
dst_alpha;
/* scale is NOT in 16.16 form here. I've seen values of 0xfefe01, for example. */
for (i = 0; i < n_chan; i++) {
int si, di;
int64_t tmp64;
+ int t;
si = src[i];
di = dst[i];
/* RJW: Nasty that we have to resort to 64bit here, but we'll live with it. */
- tmp64 = (si - di) * (int64_t)scale + 0x8000;
- tmp = si + (tmp64 >> 16);
-
- /* todo: it should be possible to optimize these cond branches */
- if (tmp < 0)
- tmp = 0;
- if (tmp > 65535)
- tmp = 65535;
- src[i] = tmp;
+ tmp64 = (si - di) * (uint64_t)scale + 0x8000;
+ t = si + (tmp64 >> 16);
+ if (t < 0)
+ t = 0;
+ else if (t > 65535)
+ t = 65535;
+ src[i] = t;
}
}
@@ -2218,7 +2243,7 @@ art_pdf_recomposite_group_16(uint16_t *gs_restrict *dstp, uint16_t *gs_restrict
tmp = (src_alpha_g * tmp + 0x8000)>>16;
src[n_chan] = tmp;
if (dst_alpha_g != NULL) {
- int d = *dst_alpha_g;
+ uint32_t d = *dst_alpha_g;
d += d>>15;
tmp = (0x10000 - d) * (0xffff - tmp) + 0x8000;
*dst_alpha_g = 0xffff - (tmp >> 16);
@@ -2228,95 +2253,25 @@ art_pdf_recomposite_group_16(uint16_t *gs_restrict *dstp, uint16_t *gs_restrict
/* todo: optimize BLEND_MODE_Normal buf alpha != 255 case */
}
-/**
- * art_pdf_composite_knockout_group_8: Composite group pixel.
- * @backdrop: Backdrop of original parent group.
- * @tos_shape: So that we know to copy the backdrop or not even if a_s is zero
- * @dst: Where to store pixel.
- * @dst_alpha_g: Optional pointer to alpha g value.
- * @alpha: Alpha mask value.
- * @blend_mode: Blend mode for compositing.
- * @pblend_procs: Procs for handling non separable blending modes.
- * @p14dev: PDF14 device
- * @has_mask: needed for knowing to pass back the soft mask value if shape = 0
- *
- * Note: this is only for knockout nonisolated groups.
- *
- * @alpha corresponds to $fk_i \cdot fm_i \cdot qk_i \cdot qm_i$.
- *
- * @NOTE: This function may corrupt src.
- **/
-static forceinline void
-art_pdf_composite_knockout_group_8(byte *gs_restrict backdrop, byte tos_shape, byte *gs_restrict dst,
- byte *gs_restrict dst_alpha_g, byte *gs_restrict src, int n_chan, byte alpha,
- gs_blend_mode_t blend_mode,
- const pdf14_nonseparable_blending_procs_t * pblend_procs,
- pdf14_device *p14dev, bool has_mask)
-{
- byte src_alpha; /* $\alpha g_n$ */
- int tmp;
-
- if (tos_shape == 0) {
- /* If a softmask was present pass it along Bug 693548 */
- if (has_mask)
- dst[n_chan] = alpha;
- return;
- }
-
- if (alpha != 255) {
- if (tos_shape != 255) return;
- src_alpha = src[n_chan];
- if (src_alpha == 0)
- return;
- tmp = src_alpha * alpha + 0x80;
- src[n_chan] = (tmp + (tmp >> 8)) >> 8;
- }
-
- if (dst_alpha_g != NULL) {
- tmp = (255 - *dst_alpha_g) * (255 - src[n_chan]) + 0x80;
- *dst_alpha_g = 255 - ((tmp + (tmp >> 8)) >> 8);
- }
- art_pdf_knockout_composite_pixel_alpha_8(backdrop, tos_shape, dst, src,
- n_chan, blend_mode, pblend_procs,
- p14dev);
-}
-
-static forceinline void
-art_pdf_composite_knockout_group_16(uint16_t *gs_restrict backdrop, uint16_t tos_shape, uint16_t *gs_restrict dst,
- uint16_t *gs_restrict dst_alpha_g, uint16_t *gs_restrict src, int n_chan, uint16_t alpha,
- gs_blend_mode_t blend_mode,
- const pdf14_nonseparable_blending_procs_t * pblend_procs,
- pdf14_device *p14dev, bool has_mask)
+static forceinline int
+art_pdf_ko_recomposite_group_16(uint16_t tos_shape,
+ uint16_t src_alpha_g, uint16_t* gs_restrict* dstp,
+ uint16_t* gs_restrict dst_alpha_g, uint16_t* gs_restrict src,
+ int n_chan, uint16_t alpha, gs_blend_mode_t blend_mode,
+ bool has_mask)
{
- int src_alpha; /* $\alpha g_n$ */
- int tmp;
+ uint16_t* gs_restrict dst = *dstp;
- if (tos_shape == 0) {
+ if (tos_shape == 0 || src_alpha_g == 0) {
/* If a softmask was present pass it along Bug 693548 */
if (has_mask)
dst[n_chan] = alpha;
- return;
- }
-
- if (alpha != 65535) {
- if (tos_shape != 65535) return;
- src_alpha = src[n_chan];
- if (src_alpha == 0)
- return;
- src_alpha += src_alpha>>15;
- tmp = src_alpha * alpha + 0x8000;
- src[n_chan] = tmp >> 16;
+ return 0;
}
- if (dst_alpha_g != NULL) {
- tmp = *dst_alpha_g;
- tmp += tmp>>15;
- tmp = (0x10000 - tmp) * (0xffff - src[n_chan]) + 0x8000;
- *dst_alpha_g = 0xffff - (tmp >> 16);
- }
- art_pdf_knockout_composite_pixel_alpha_16(backdrop, tos_shape, dst, src,
- n_chan, blend_mode, pblend_procs,
- p14dev);
+ return art_pdf_recomposite_group_16(dstp, dst_alpha_g, src,
+ src_alpha_g, n_chan, alpha,
+ blend_mode);
}
/**
@@ -2363,6 +2318,39 @@ art_pdf_composite_group_8(byte *gs_restrict dst, byte *gs_restrict dst_alpha_g,
}
static forceinline int
+art_pdf_ko_composite_group_8(byte tos_shape,
+ byte* gs_restrict src_alpha_g, byte* gs_restrict dst,
+ byte* gs_restrict dst_alpha_g, byte* gs_restrict src,
+ int n_chan, byte alpha, bool has_mask)
+{
+ byte src_alpha; /* $\alpha g_n$ */
+ int tmp;
+
+ if (tos_shape == 0 || (src_alpha_g != NULL && *src_alpha_g == 0)) {
+ /* If a softmask was present pass it along Bug 693548 */
+ if (has_mask)
+ dst[n_chan] = alpha;
+ return 0;
+ }
+
+ if (alpha != 255) {
+ if (tos_shape != 255)
+ return 0;
+ src_alpha = src[n_chan];
+ if (src_alpha == 0)
+ return 0;
+ tmp = src_alpha * alpha + 0x80;
+ src[n_chan] = (tmp + (tmp >> 8)) >> 8;
+ }
+
+ if (dst_alpha_g != NULL) {
+ tmp = (255 - *dst_alpha_g) * (255 - src[n_chan]) + 0x80;
+ *dst_alpha_g = 255 - ((tmp + (tmp >> 8)) >> 8);
+ }
+ return 1;
+}
+
+static forceinline int
art_pdf_composite_group_16(uint16_t *gs_restrict dst, uint16_t *gs_restrict dst_alpha_g,
uint16_t *gs_restrict src, int n_chan, uint16_t alpha)
{
@@ -2386,6 +2374,41 @@ art_pdf_composite_group_16(uint16_t *gs_restrict dst, uint16_t *gs_restrict dst_
return 1;
}
+static forceinline int
+art_pdf_ko_composite_group_16(uint16_t tos_shape,
+ uint16_t* gs_restrict src_alpha_g, uint16_t* gs_restrict dst,
+ uint16_t* gs_restrict dst_alpha_g, uint16_t* gs_restrict src,
+ int n_chan, uint16_t alpha, bool has_mask)
+{
+ uint16_t src_alpha;
+ int tmp;
+
+ if (tos_shape == 0 || (src_alpha_g != NULL && *src_alpha_g == 0)) {
+ /* If a softmask was present pass it along Bug 693548 */
+ if (has_mask)
+ dst[n_chan] = alpha;
+ return 0;
+ }
+
+ if (alpha != 65535) {
+ if (tos_shape != 65535)
+ return 0;
+ src_alpha = src[n_chan];
+ if (src_alpha == 0)
+ return 0;
+ tmp = alpha + (alpha >> 15);
+ src[n_chan] = (src_alpha * tmp + 0x8000) >> 16;
+ }
+
+ if (dst_alpha_g != NULL) {
+ tmp = *dst_alpha_g;
+ tmp += tmp >> 15;
+ tmp = (0x10000 - tmp) * (0xffff - src[n_chan]) + 0x8000;
+ *dst_alpha_g = 0xffff - (tmp >> 16);
+ }
+ return 1;
+}
+
/* A very simple case. Knockout isolated group going to a parent that is not
a knockout. Simply copy over everwhere where we have a non-zero alpha value */
void
@@ -2486,7 +2509,9 @@ art_pdf_composite_knockout_8(byte *gs_restrict dst,
inner loop is a single interpolation */
tmp = dst[i] * dst_alpha * (255 - src_shape) +
((int)src[i]) * 255 * src_shape + (result_alpha << 7);
- dst[i] = tmp / (result_alpha * 255);
+ tmp = tmp / (result_alpha * 255);
+ if (tmp > 255) tmp = 255;
+ dst[i] = tmp;
}
dst[n_chan] = result_alpha;
}
@@ -2504,23 +2529,24 @@ art_pdf_composite_knockout_8(byte *gs_restrict dst,
/* Result alpha is Union of backdrop and source alpha */
tmp = (0xff - a_b) * (0xff - a_s) + 0x80;
a_r = 0xff - (((tmp >> 8) + tmp) >> 8);
- /* todo: verify that a_r is nonzero in all cases */
- /* Compute a_s / a_r in 16.16 format */
- src_scale = ((a_s << 16) + (a_r >> 1)) / a_r;
+ if (a_r != 0) {
+ /* Compute a_s / a_r in 16.16 format */
+ src_scale = ((a_s << 16) + (a_r >> 1)) / a_r;
- art_blend_pixel_8(blend, dst, src, n_chan, blend_mode, pblend_procs, p14dev);
- for (i = 0; i < n_chan; i++) {
- int c_bl; /* Result of blend function */
- int c_mix; /* Blend result mixed with source color */
+ art_blend_pixel_8(blend, dst, src, n_chan, blend_mode, pblend_procs, p14dev);
+ for (i = 0; i < n_chan; i++) {
+ int c_bl; /* Result of blend function */
+ int c_mix; /* Blend result mixed with source color */
- c_s = src[i];
- c_b = dst[i];
- c_bl = blend[i];
- tmp = a_b * (c_bl - ((int)c_s)) + 0x80;
- c_mix = c_s + (((tmp >> 8) + tmp) >> 8);
- tmp = (c_b << 16) + src_scale * (c_mix - c_b) + 0x8000;
- dst[i] = tmp >> 16;
+ c_s = src[i];
+ c_b = dst[i];
+ c_bl = blend[i];
+ tmp = a_b * (c_bl - ((int)c_s)) + 0x80;
+ c_mix = c_s + (((tmp >> 8) + tmp) >> 8);
+ tmp = (c_b << 16) + src_scale * (c_mix - c_b) + 0x8000;
+ dst[i] = tmp >> 16;
+ }
}
dst[n_chan] = a_r;
}
@@ -2562,7 +2588,10 @@ art_pdf_composite_knockout_16(uint16_t *gs_restrict dst,
tmp = dst[i] * dst_alpha;
tmp = (tmp>>16) * (65535 - src_shape) +
src[i] * src_shape + (result_alpha>>1);
- dst[i] = tmp / result_alpha;
+ tmp = tmp / result_alpha;
+ if (tmp > 65535) tmp = 65535;
+ dst[i] = tmp;
+
}
}
dst[n_chan] = result_alpha;
@@ -2581,26 +2610,27 @@ art_pdf_composite_knockout_16(uint16_t *gs_restrict dst,
/* Result alpha is Union of backdrop and source alpha */
tmp = (0xffff - a_b) * (0xffff - a_s) + 0x8000;
a_r = 0xffff - (((tmp >> 16) + tmp) >> 16);
- /* todo: verify that a_r is nonzero in all cases */
- /* Compute a_s / a_r in 16.16 format */
- src_scale = ((a_s << 16) + (a_r >> 1)) / a_r;
+ if (a_r != 0) {
+ /* Compute a_s / a_r in 16.16 format */
+ src_scale = ((a_s << 16) + (a_r >> 1)) / a_r;
- src_scale >>= 1; /* Lose a bit to avoid overflow */
- a_b >>= 1; /* Lose a bit to avoid overflow */
- art_blend_pixel_16(blend, dst, src, n_chan, blend_mode, pblend_procs, p14dev);
- for (i = 0; i < n_chan; i++) {
- int c_bl; /* Result of blend function */
- int c_mix; /* Blend result mixed with source color */
- int stmp;
+ src_scale >>= 1; /* Lose a bit to avoid overflow */
+ a_b >>= 1; /* Lose a bit to avoid overflow */
+ art_blend_pixel_16(blend, dst, src, n_chan, blend_mode, pblend_procs, p14dev);
+ for (i = 0; i < n_chan; i++) {
+ int c_bl; /* Result of blend function */
+ int c_mix; /* Blend result mixed with source color */
+ int stmp;
- c_s = src[i];
- c_b = dst[i];
- c_bl = blend[i];
- stmp = a_b * (c_bl - ((int)c_s)) + 0x4000;
- c_mix = c_s + (((stmp >> 16) + stmp) >> 15);
- tmp = src_scale * (c_mix - c_b) + 0x4000;
- dst[i] = c_b + (tmp >> 15);
+ c_s = src[i];
+ c_b = dst[i];
+ c_bl = blend[i];
+ stmp = a_b * (c_bl - ((int)c_s)) + 0x4000;
+ c_mix = c_s + (((stmp >> 16) + stmp) >> 15);
+ tmp = src_scale * (c_mix - c_b) + 0x4000;
+ dst[i] = c_b + (tmp >> 15);
+ }
}
dst[n_chan] = a_r;
}
@@ -2785,7 +2815,7 @@ dump_raw_buffer_be(const gs_memory_t *mem, int num_rows, int width, int n_chan,
typedef void (*art_pdf_compose_group_fn)(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride,
+ byte *tos_alpha_g_ptr, byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride,
byte *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
byte *backdrop_ptr, bool has_matte, int n_chan, bool additive, int num_spots, bool overprint,
@@ -2798,7 +2828,8 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
byte alpha, byte shape, gs_blend_mode_t blend_mode,
bool tos_has_shape, int tos_shape_offset,
int tos_alpha_g_offset, int tos_tag_offset,
- bool tos_has_tag, byte *gs_restrict nos_ptr,
+ bool tos_has_tag, byte *gs_restrict tos_alpha_g_ptr,
+ byte *gs_restrict nos_ptr,
bool nos_isolated, int nos_planestride,
int nos_rowstride, byte *gs_restrict nos_alpha_g_ptr,
bool nos_knockout, int nos_shape_offset,
@@ -2819,7 +2850,6 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
byte tos_pixel[PDF14_MAX_PLANES];
byte nos_pixel[PDF14_MAX_PLANES];
byte back_drop[PDF14_MAX_PLANES];
- gx_color_index comps;
bool in_mask_rect_y;
bool in_mask_rect;
byte pix_alpha;
@@ -2955,27 +2985,33 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
/* alpha */
back_drop[n_chan] = backdrop_ptr[n_chan * nos_planestride];
}
- art_pdf_composite_knockout_group_8(back_drop, tos_shape,
- nos_pixel, nos_alpha_g_ptr,
- tos_pixel, n_chan, pix_alpha,
- blend_mode, pblend_procs,
- pdev, has_mask2);
+ if (tos_isolated ?
+ art_pdf_ko_composite_group_8(tos_shape, tos_alpha_g_ptr,
+ nos_pixel, nos_alpha_g_ptr,
+ tos_pixel, n_chan, pix_alpha,
+ has_mask2) :
+ art_pdf_ko_recomposite_group_8(tos_shape, has_alpha ? tos_ptr[tos_alpha_g_offset] : 255,
+ &dst, nos_alpha_g_ptr, tos_pixel, n_chan, pix_alpha,
+ blend_mode, has_mask2))
+ dst = art_pdf_knockout_composite_pixel_alpha_8(back_drop, tos_shape,
+ nos_pixel, tos_pixel,
+ n_chan, blend_mode,
+ pblend_procs, pdev);
} else if (tos_isolated ?
art_pdf_composite_group_8(nos_pixel, nos_alpha_g_ptr,
tos_pixel, n_chan, pix_alpha) :
art_pdf_recomposite_group_8(&dst, nos_alpha_g_ptr,
tos_pixel, has_alpha ? tos_ptr[tos_alpha_g_offset] : 255, n_chan,
- pix_alpha, blend_mode, first_blend_spot,
- pblend_procs, pdev)) {
+ pix_alpha, blend_mode)) {
dst = art_pdf_composite_pixel_alpha_8_inline(nos_pixel, tos_pixel, n_chan,
blend_mode, first_blend_spot,
pblend_procs, pdev);
}
if (nos_shape_offset && pix_alpha != 0) {
nos_ptr[nos_shape_offset] =
- art_pdf_union_mul_8 (nos_ptr[nos_shape_offset],
- has_alpha ? tos_ptr[tos_shape_offset] : global_shape,
- shape);
+ art_pdf_union_mul_8(nos_ptr[nos_shape_offset],
+ has_alpha ? tos_ptr[tos_shape_offset] : global_shape,
+ shape);
}
if (dst)
{
@@ -2992,24 +3028,8 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
}
} else {
/* Pure subtractive */
- /* If we were running in the compatible overprint blend mode
- * and popping the group, we don't need to fool with the
- * drawn components as that should have already have been
- * handled during the blending within our special non-isolated
- * group. So in other words, if the blend mode is normal
- * (or compatible) and we are doing overprint, the overprint
- * has NOT been handled by compatible overprint mode and we
- * need to take care of it now */
- if (overprint) {
- for (i = 0, comps = drawn_comps; comps != 0; ++i, comps >>= 1) {
- if ((comps & 0x1) != 0) {
- nos_ptr[i * nos_planestride] = 255 - dst[i];
- }
- }
- } else {
- for (i = 0; i < n_chan; ++i)
- nos_ptr[i * nos_planestride] = 255 - dst[i];
- }
+ for (i = 0; i < n_chan; ++i)
+ nos_ptr[i * nos_planestride] = 255 - dst[i];
}
/* alpha */
nos_ptr[n_chan * nos_planestride] = dst[n_chan];
@@ -3021,6 +3041,8 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
if (nos_alpha_g_ptr != NULL)
++nos_alpha_g_ptr;
+ if (tos_alpha_g_ptr != NULL)
+ ++tos_alpha_g_ptr;
if (backdrop_ptr != NULL)
++backdrop_ptr;
++tos_ptr;
@@ -3028,6 +3050,8 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
}
tos_ptr += tos_rowstride - width;
nos_ptr += nos_rowstride - width;
+ if (tos_alpha_g_ptr != NULL)
+ tos_alpha_g_ptr += tos_rowstride - width;
if (nos_alpha_g_ptr != NULL)
nos_alpha_g_ptr += nos_rowstride - width;
if (mask_row_ptr != NULL)
@@ -3039,7 +3063,7 @@ template_compose_group(byte *gs_restrict tos_ptr, bool tos_isolated,
static void
compose_group_knockout(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3048,7 +3072,7 @@ compose_group_knockout(byte *tos_ptr, bool tos_isolated, int tos_planestride, in
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */1,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3056,7 +3080,7 @@ compose_group_knockout(byte *tos_ptr, bool tos_isolated, int tos_planestride, in
static void
compose_group_nonknockout_blend(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3065,7 +3089,7 @@ compose_group_nonknockout_blend(byte *tos_ptr, bool tos_isolated, int tos_planes
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3073,7 +3097,7 @@ compose_group_nonknockout_blend(byte *tos_ptr, bool tos_isolated, int tos_planes
static void
compose_group_nonknockout_nonblend_isolated_allmask_common(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3138,7 +3162,7 @@ compose_group_nonknockout_nonblend_isolated_allmask_common(byte *tos_ptr, bool t
static void
compose_group_nonknockout_nonblend_isolated_mask_common(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3228,7 +3252,7 @@ compose_group_nonknockout_nonblend_isolated_mask_common(byte *tos_ptr, bool tos_
static void
compose_group_nonknockout_nonblend_isolated_nomask_common(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3237,7 +3261,7 @@ compose_group_nonknockout_nonblend_isolated_nomask_common(byte *tos_ptr, bool to
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, /*tos_isolated*/1, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, /*has_mask*/0, /*maskbuf*/NULL, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3245,7 +3269,7 @@ compose_group_nonknockout_nonblend_isolated_nomask_common(byte *tos_ptr, bool to
static void
compose_group_nonknockout_nonblend_nonisolated_mask_common(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3254,7 +3278,7 @@ compose_group_nonknockout_nonblend_nonisolated_mask_common(byte *tos_ptr, bool t
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, /*tos_isolated*/0, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3262,7 +3286,7 @@ compose_group_nonknockout_nonblend_nonisolated_mask_common(byte *tos_ptr, bool t
static void
compose_group_nonknockout_nonblend_nonisolated_nomask_common(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3271,7 +3295,7 @@ compose_group_nonknockout_nonblend_nonisolated_nomask_common(byte *tos_ptr, bool
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, /*tos_isolated*/0, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, /*has_mask*/0, /*maskbuf*/NULL, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3279,7 +3303,7 @@ compose_group_nonknockout_nonblend_nonisolated_nomask_common(byte *tos_ptr, bool
static void
compose_group_nonknockout_noblend_general(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3288,7 +3312,7 @@ compose_group_nonknockout_noblend_general(byte *tos_ptr, bool tos_isolated, int
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1);
@@ -3296,7 +3320,7 @@ compose_group_nonknockout_noblend_general(byte *tos_ptr, bool tos_isolated, int
static void
compose_group_alphaless_knockout(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3305,7 +3329,7 @@ compose_group_alphaless_knockout(byte *tos_ptr, bool tos_isolated, int tos_plane
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */1,
nos_shape_offset, nos_tag_offset, /* mask_row_ptr */ NULL, /* has_mask */ 0, /* maskbuf */ NULL, mask_bg_alpha, /* mask_tr_fn */ NULL,
backdrop_ptr, /* has_matte */ false , n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 0);
@@ -3313,7 +3337,7 @@ compose_group_alphaless_knockout(byte *tos_ptr, bool tos_isolated, int tos_plane
static void
compose_group_alphaless_nonknockout(byte *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, byte alpha, byte shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
- int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, byte *tos_alpha_g_ptr,
byte *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, byte *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
byte *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, byte mask_bg_alpha, const byte *mask_tr_fn,
@@ -3322,7 +3346,7 @@ compose_group_alphaless_nonknockout(byte *tos_ptr, bool tos_isolated, int tos_pl
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, /* mask_row_ptr */ NULL, /* has_mask */ 0, /* maskbuf */ NULL, mask_bg_alpha, /* mask_tr_fn */ NULL,
backdrop_ptr, /* has_matte */ false , n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 0);
@@ -3351,6 +3375,7 @@ do_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
bool nos_isolated = nos->isolated;
bool nos_knockout = nos->knockout;
byte *nos_alpha_g_ptr;
+ byte *tos_alpha_g_ptr;
int tos_shape_offset = n_chan * tos_planestride;
int tos_alpha_g_offset = tos_shape_offset + (tos->has_shape ? tos_planestride : 0);
bool tos_has_tag = tos->has_tags;
@@ -3390,6 +3415,10 @@ do_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
nos_alpha_g_ptr = nos_ptr + nos_alpha_g_offset;
} else
nos_alpha_g_ptr = NULL;
+ if (tos->has_alpha_g) {
+ tos_alpha_g_ptr = tos_ptr + tos_alpha_g_offset;
+ } else
+ tos_alpha_g_ptr = NULL;
if (nos->backdrop != NULL) {
backdrop_ptr = nos->backdrop + x0 - nos->rect.p.x +
(y0 - nos->rect.p.y) * nos->rowstride;
@@ -3473,10 +3502,10 @@ do_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
fn = &compose_group_nonknockout_blend; /* Small %ages, nothing more than 2% */
else if (tos->has_shape == 0 && tos_has_tag == 0 && nos_isolated == 0 && nos_alpha_g_ptr == NULL &&
nos_shape_offset == 0 && nos_tag_offset == 0 && backdrop_ptr == NULL && has_matte == 0 && num_spots == 0 &&
- overprint == 0) {
+ overprint == 0 && tos_alpha_g_ptr == NULL) {
/* Additive vs Subtractive makes no difference in normal blend mode with no spots */
if (tos_isolated) {
- if (has_mask || maskbuf) {/* 7% */
+ if (has_mask && maskbuf) {/* 7% */
/* AirPrint test case hits this */
if (maskbuf && maskbuf->rect.p.x <= x0 && maskbuf->rect.p.y <= y0 &&
maskbuf->rect.q.x >= x1 && maskbuf->rect.q.y >= y1) {
@@ -3495,8 +3524,12 @@ do_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
}
} else
fn = &compose_group_nonknockout_nonblend_isolated_mask_common;
- } else /* 14% */
- fn = &compose_group_nonknockout_nonblend_isolated_nomask_common;
+ } else
+ if (maskbuf) {
+ /* Outside mask */
+ fn = &compose_group_nonknockout_nonblend_isolated_mask_common;
+ } else
+ fn = &compose_group_nonknockout_nonblend_isolated_nomask_common;
} else {
if (has_mask || maskbuf) /* 4% */
fn = &compose_group_nonknockout_nonblend_nonisolated_mask_common;
@@ -3508,7 +3541,7 @@ do_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
fn(tos_ptr, tos_isolated, tos_planestride, tos->rowstride, alpha, shape,
blend_mode, tos->has_shape, tos_shape_offset, tos_alpha_g_offset,
- tos_tag_offset, tos_has_tag, nos_ptr, nos_isolated, nos_planestride,
+ tos_tag_offset, tos_has_tag, tos_alpha_g_ptr, nos_ptr, nos_isolated, nos_planestride,
nos->rowstride, nos_alpha_g_ptr, nos_knockout, nos_shape_offset,
nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha,
mask_tr_fn, backdrop_ptr, has_matte, n_chan, additive, num_spots,
@@ -3534,6 +3567,7 @@ interp16(const uint16_t *table, uint16_t idx)
typedef void (*art_pdf_compose_group16_fn)(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape,
int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+ uint16_t *tos_alpha_g_ptr,
uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride,
uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
@@ -3547,7 +3581,8 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode,
bool tos_has_shape, int tos_shape_offset,
int tos_alpha_g_offset, int tos_tag_offset,
- bool tos_has_tag, uint16_t *gs_restrict nos_ptr,
+ bool tos_has_tag, uint16_t *gs_restrict tos_alpha_g_ptr,
+ uint16_t *gs_restrict nos_ptr,
bool nos_isolated, int nos_planestride,
int nos_rowstride, uint16_t *gs_restrict nos_alpha_g_ptr,
bool nos_knockout, int nos_shape_offset,
@@ -3568,7 +3603,6 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
uint16_t tos_pixel[PDF14_MAX_PLANES];
uint16_t nos_pixel[PDF14_MAX_PLANES];
uint16_t back_drop[PDF14_MAX_PLANES];
- gx_color_index comps;
bool in_mask_rect_y;
bool in_mask_rect;
uint16_t pix_alpha;
@@ -3713,11 +3747,18 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
/* alpha */
back_drop[n_chan] = backdrop_ptr[n_chan * nos_planestride];
}
- art_pdf_composite_knockout_group_16(back_drop, tos_shape,
- nos_pixel, nos_alpha_g_ptr,
- tos_pixel, n_chan, pix_alpha,
- blend_mode, pblend_procs,
- pdev, has_mask2);
+
+ if (tos_isolated ?
+ art_pdf_ko_composite_group_16(tos_shape, tos_alpha_g_ptr,
+ nos_pixel, nos_alpha_g_ptr,
+ tos_pixel, n_chan, pix_alpha,
+ has_mask2) :
+ art_pdf_ko_recomposite_group_16(tos_shape, has_alpha ? tos_ptr[tos_alpha_g_offset] : 65535,
+ &dst, nos_alpha_g_ptr, tos_pixel, n_chan, pix_alpha,
+ blend_mode, has_mask2)) {
+ dst = art_pdf_knockout_composite_pixel_alpha_16(back_drop, tos_shape, nos_pixel, tos_pixel,
+ n_chan, blend_mode, pblend_procs, pdev);
+ }
}
else if (tos_isolated ?
art_pdf_composite_group_16(nos_pixel, nos_alpha_g_ptr,
@@ -3726,8 +3767,7 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
tos_pixel,
has_alpha ? GET16_2NATIVE(tos_is_be, tos_ptr[tos_alpha_g_offset]) : 65535,
n_chan,
- pix_alpha, blend_mode, first_blend_spot,
- pblend_procs, pdev)) {
+ pix_alpha, blend_mode)) {
dst = art_pdf_composite_pixel_alpha_16_inline(nos_pixel, tos_pixel, n_chan,
blend_mode, first_blend_spot,
pblend_procs, pdev);
@@ -3753,24 +3793,8 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
}
} else {
/* Pure subtractive */
- /* If we were running in the compatible overprint blend mode
- * and popping the group, we don't need to fool with the
- * drawn components as that should have already have been
- * handled during the blending within our special non-isolated
- * group. So in other words, if the blend mode is normal
- * (or compatible) and we are doing overprint, the overprint
- * has NOT been handled by compatible overprint mode and we
- * need to take care of it now */
- if (overprint) {
- for (i = 0, comps = drawn_comps; comps != 0; ++i, comps >>= 1) {
- if ((comps & 0x1) != 0) {
- nos_ptr[i * nos_planestride] = 65535 - dst[i];
- }
- }
- } else {
- for (i = 0; i < n_chan; ++i)
- nos_ptr[i * nos_planestride] = 65535 - dst[i];
- }
+ for (i = 0; i < n_chan; ++i)
+ nos_ptr[i * nos_planestride] = 65535 - dst[i];
}
/* alpha */
nos_ptr[n_chan * nos_planestride] = dst[n_chan];
@@ -3782,6 +3806,8 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
if (nos_alpha_g_ptr != NULL)
++nos_alpha_g_ptr;
+ if (tos_alpha_g_ptr != NULL)
+ ++tos_alpha_g_ptr;
if (backdrop_ptr != NULL)
++backdrop_ptr;
++tos_ptr;
@@ -3789,6 +3815,8 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
}
tos_ptr += tos_rowstride - width;
nos_ptr += nos_rowstride - width;
+ if (tos_alpha_g_ptr != NULL)
+ tos_alpha_g_ptr += tos_rowstride - width;
if (nos_alpha_g_ptr != NULL)
nos_alpha_g_ptr += nos_rowstride - width;
if (mask_row_ptr != NULL)
@@ -3799,8 +3827,9 @@ template_compose_group16(uint16_t *gs_restrict tos_ptr, bool tos_isolated,
}
static void
-compose_group16_knockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode,
- bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
+compose_group16_knockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset,
+ int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr,
uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
@@ -3809,36 +3838,35 @@ compose_group16_knockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestri
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */1,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_nonknockout_blend(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape,
- gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
+compose_group16_nonknockout_blend(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
+ uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
- template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
+ template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride,
+ alpha, shape, blend_mode, tos_has_shape,
tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
- nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
+ tos_alpha_g_ptr, nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_nonknockout_nonblend_isolated_allmask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha,
- uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
+compose_group16_nonknockout_nonblend_isolated_allmask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
+ uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
@@ -3904,12 +3932,11 @@ compose_group16_nonknockout_nonblend_isolated_allmask_common(uint16_t *tos_ptr,
}
static void
-compose_group16_nonknockout_nonblend_isolated_mask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape,
- gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
+compose_group16_nonknockout_nonblend_isolated_mask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
+ uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
@@ -3999,103 +4026,102 @@ compose_group16_nonknockout_nonblend_isolated_mask_common(uint16_t *tos_ptr, boo
}
static void
-compose_group16_nonknockout_nonblend_isolated_nomask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha,
- uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
+compose_group16_nonknockout_nonblend_isolated_nomask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
+ uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group16(tos_ptr, /*tos_isolated*/1, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/ 0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, /*has_mask*/0, /*maskbuf*/NULL, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_nonknockout_nonblend_nonisolated_mask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha,
- uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
+compose_group16_nonknockout_nonblend_nonisolated_mask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group16(tos_ptr, /*tos_isolated*/0, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_nonknockout_nonblend_nonisolated_nomask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha,
- uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
+compose_group16_nonknockout_nonblend_nonisolated_nomask_common(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
+ uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group16(tos_ptr, /*tos_isolated*/0, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, /*tos_has_shape*/0,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, /*tos_has_tag*/0, /*tos_alpha_g_ptr*/0,
nos_ptr, /*nos_isolated*/0, nos_planestride, nos_rowstride, /*nos_alpha_g_ptr*/0, /* nos_knockout = */0,
/*nos_shape_offset*/0, /*nos_tag_offset*/0, mask_row_ptr, /*has_mask*/0, /*maskbuf*/NULL, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, /*has_matte*/0, n_chan, /*additive*/1, /*num_spots*/0, /*overprint*/0, /*drawn_comps*/0, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_nonknockout_noblend_general(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape,
- gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
- uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
- uint16_t *backdrop_ptr,
- bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
+compose_group16_nonknockout_noblend_general(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset,
+ int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr,
+ bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
+ int nos_shape_offset, int nos_tag_offset, uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf,
+ uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn, uint16_t *backdrop_ptr, bool has_matte, int n_chan,
+ bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, BLEND_MODE_Normal, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr, has_matte, n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 1, 0);
}
static void
-compose_group16_alphaless_knockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape,
- gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
+compose_group16_alphaless_knockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset,
+ int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr,
+ bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
int nos_shape_offset, int nos_tag_offset,
uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
- template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride,
+ alpha, shape, blend_mode, tos_has_shape, tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */1,
nos_shape_offset, nos_tag_offset, /* mask_row_ptr */ NULL, /* has_mask */ 0, /* maskbuf */ NULL, mask_bg_alpha, /* mask_tr_fn */ NULL,
backdrop_ptr, /* has_matte */ false , n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 0, 1);
}
static void
-compose_group16_alphaless_nonknockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride, uint16_t alpha, uint16_t shape,
- gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset, int tos_tag_offset, bool tos_has_tag,
- uint16_t *nos_ptr, bool nos_isolated, int nos_planestride, int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout,
- int nos_shape_offset, int nos_tag_offset,
+compose_group16_alphaless_nonknockout(uint16_t *tos_ptr, bool tos_isolated, int tos_planestride, int tos_rowstride,
+ uint16_t alpha, uint16_t shape, gs_blend_mode_t blend_mode, bool tos_has_shape, int tos_shape_offset, int tos_alpha_g_offset,
+ int tos_tag_offset, bool tos_has_tag, uint16_t *tos_alpha_g_ptr, uint16_t *nos_ptr, bool nos_isolated, int nos_planestride,
+ int nos_rowstride, uint16_t *nos_alpha_g_ptr, bool nos_knockout, int nos_shape_offset, int nos_tag_offset,
uint16_t *mask_row_ptr, int has_mask, pdf14_buf *maskbuf, uint16_t mask_bg_alpha, const uint16_t *mask_tr_fn,
uint16_t *backdrop_ptr,
bool has_matte, int n_chan, bool additive, int num_spots, bool overprint, gx_color_index drawn_comps, int x0, int y0, int x1, int y1,
const pdf14_nonseparable_blending_procs_t *pblend_procs, pdf14_device *pdev)
{
- template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride, alpha, shape, blend_mode, tos_has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
- nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
+ template_compose_group16(tos_ptr, tos_isolated, tos_planestride, tos_rowstride,
+ alpha, shape, blend_mode, tos_has_shape, tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_alpha_g_ptr, nos_ptr, nos_isolated, nos_planestride, nos_rowstride, nos_alpha_g_ptr, /* nos_knockout = */0,
nos_shape_offset, nos_tag_offset, /* mask_row_ptr */ NULL, /* has_mask */ 0, /* maskbuf */ NULL, mask_bg_alpha, /* mask_tr_fn */ NULL,
backdrop_ptr, /* has_matte */ false , n_chan, additive, num_spots, overprint, drawn_comps, x0, y0, x1, y1, pblend_procs, pdev, 0, 1);
}
@@ -4125,6 +4151,7 @@ do_compose_group16(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
bool nos_isolated = nos->isolated;
bool nos_knockout = nos->knockout;
uint16_t *nos_alpha_g_ptr;
+ uint16_t *tos_alpha_g_ptr;
int tos_shape_offset = n_chan * tos_planestride;
int tos_alpha_g_offset = tos_shape_offset + (tos->has_shape ? tos_planestride : 0);
bool tos_has_tag = tos->has_tags;
@@ -4161,6 +4188,10 @@ do_compose_group16(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
nos_alpha_g_ptr = nos_ptr + (nos_alpha_g_offset>>1);
} else
nos_alpha_g_ptr = NULL;
+ if (tos->has_alpha_g) {
+ tos_alpha_g_ptr = tos_ptr + (tos_alpha_g_offset>>1);
+ } else
+ tos_alpha_g_ptr = NULL;
if (nos->backdrop != NULL) {
backdrop_ptr =
(uint16_t *)(void *)(nos->backdrop + (x0 - nos->rect.p.x)*2 +
@@ -4243,18 +4274,23 @@ do_compose_group16(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
fn = &compose_group16_nonknockout_blend; /* Small %ages, nothing more than 2% */
else if (tos->has_shape == 0 && tos_has_tag == 0 && nos_isolated == 0 && nos_alpha_g_ptr == NULL &&
nos_shape_offset == 0 && nos_tag_offset == 0 && backdrop_ptr == NULL && has_matte == 0 && num_spots == 0 &&
- overprint == 0) {
+ overprint == 0 && tos_alpha_g_ptr == NULL) {
/* Additive vs Subtractive makes no difference in normal blend mode with no spots */
if (tos_isolated) {
- if (has_mask || maskbuf) {/* 7% */
+ if (has_mask && maskbuf) {/* 7% */
/* AirPrint test case hits this */
if (maskbuf && maskbuf->rect.p.x <= x0 && maskbuf->rect.p.y <= y0 &&
maskbuf->rect.q.x >= x1 && maskbuf->rect.q.y >= y1)
fn = &compose_group16_nonknockout_nonblend_isolated_allmask_common;
else
fn = &compose_group16_nonknockout_nonblend_isolated_mask_common;
- } else /* 14% */
- fn = &compose_group16_nonknockout_nonblend_isolated_nomask_common;
+ } else
+ if (maskbuf) {
+ /* Outside mask data but still has mask */
+ fn = &compose_group16_nonknockout_nonblend_isolated_mask_common;
+ } else {
+ fn = &compose_group16_nonknockout_nonblend_isolated_nomask_common;
+ }
} else {
if (has_mask || maskbuf) /* 4% */
fn = &compose_group16_nonknockout_nonblend_nonisolated_mask_common;
@@ -4273,7 +4309,7 @@ do_compose_group16(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
nos_tag_offset >>= 1;
fn(tos_ptr, tos_isolated, tos_planestride, tos->rowstride>>1, alpha, shape, blend_mode, tos->has_shape,
tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
- nos_ptr, nos_isolated, nos_planestride, nos->rowstride>>1, nos_alpha_g_ptr, nos_knockout,
+ tos_alpha_g_ptr, nos_ptr, nos_isolated, nos_planestride, nos->rowstride>>1, nos_alpha_g_ptr, nos_knockout,
nos_shape_offset, nos_tag_offset,
mask_row_ptr, has_mask, maskbuf, mask_bg_alpha, mask_tr_fn,
backdrop_ptr,
@@ -4310,9 +4346,10 @@ do_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
gs_memory_t *memory, gx_device *dev)
{
pdf14_device *pdev = (pdf14_device *)dev;
- bool overprint = pdev->overprint;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
bool additive = pdev->ctx->additive;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
int n_chan = nos->n_chan;
int num_spots = tos->num_spots;
byte alpha = tos->alpha>>8;
@@ -4329,7 +4366,7 @@ do_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
bool tos_isolated = false;
bool nos_isolated = nos->isolated;
bool nos_knockout = nos->knockout;
- byte *nos_alpha_g_ptr;
+ byte *nos_alpha_g_ptr, *tos_alpha_g_ptr;
int tos_shape_offset = n_chan * tos_planestride;
int tos_alpha_g_offset = tos_shape_offset + (tos->has_shape ? tos_planestride : 0);
bool tos_has_tag = tos->has_tags;
@@ -4365,6 +4402,10 @@ do_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
nos_alpha_g_ptr = nos_ptr + nos_alpha_g_offset;
} else
nos_alpha_g_ptr = NULL;
+ if (tos->has_alpha_g) {
+ tos_alpha_g_ptr = tos_ptr + tos_alpha_g_offset;
+ } else
+ tos_alpha_g_ptr = NULL;
if (nos->backdrop != NULL) {
backdrop_ptr = nos->backdrop + x0 - nos->rect.p.x +
(y0 - nos->rect.p.y) * nos->rowstride;
@@ -4419,7 +4460,7 @@ do_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
fn = &compose_group_alphaless_nonknockout;
fn(tos_ptr, tos_isolated, tos_planestride, tos->rowstride, alpha, shape, blend_mode, tos->has_shape,
- tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag,
+ tos_shape_offset, tos_alpha_g_offset, tos_tag_offset, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride, nos->rowstride, nos_alpha_g_ptr, nos_knockout,
nos_shape_offset, nos_tag_offset,
mask_row_ptr, has_mask, /* maskbuf */ NULL, mask_bg_alpha, mask_tr_fn,
@@ -4440,9 +4481,10 @@ do_compose_alphaless_group16(pdf14_buf *tos, pdf14_buf *nos,
gs_memory_t *memory, gx_device *dev)
{
pdf14_device *pdev = (pdf14_device *)dev;
- bool overprint = pdev->overprint;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
bool additive = pdev->ctx->additive;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
int n_chan = nos->n_chan;
int num_spots = tos->num_spots;
uint16_t alpha = tos->alpha;
@@ -4462,6 +4504,7 @@ do_compose_alphaless_group16(pdf14_buf *tos, pdf14_buf *nos,
bool nos_isolated = nos->isolated;
bool nos_knockout = nos->knockout;
uint16_t *nos_alpha_g_ptr;
+ uint16_t *tos_alpha_g_ptr;
int tos_shape_offset = n_chan * tos_planestride;
int tos_alpha_g_offset = tos_shape_offset + (tos->has_shape ? tos_planestride : 0);
bool tos_has_tag = tos->has_tags;
@@ -4496,6 +4539,11 @@ do_compose_alphaless_group16(pdf14_buf *tos, pdf14_buf *nos,
nos_alpha_g_ptr = nos_ptr + (nos_alpha_g_offset>>1);
} else
nos_alpha_g_ptr = NULL;
+ if (tos->has_alpha_g) {
+ tos_alpha_g_ptr = tos_ptr + (tos_alpha_g_offset>>1);
+ } else
+ tos_alpha_g_ptr = NULL;
+
if (nos->backdrop != NULL) {
backdrop_ptr =
(uint16_t *)(void *)(nos->backdrop + (x0 - nos->rect.p.x)*2 +
@@ -4551,7 +4599,7 @@ do_compose_alphaless_group16(pdf14_buf *tos, pdf14_buf *nos,
fn = &compose_group16_alphaless_nonknockout;
fn(tos_ptr, tos_isolated, tos_planestride>>1, tos->rowstride>>1, alpha, shape, blend_mode, tos->has_shape,
- tos_shape_offset>>1, tos_alpha_g_offset>>1, tos_tag_offset>>1, tos_has_tag,
+ tos_shape_offset>>1, tos_alpha_g_offset>>1, tos_tag_offset>>1, tos_has_tag, tos_alpha_g_ptr,
nos_ptr, nos_isolated, nos_planestride>>1, nos->rowstride>>1, nos_alpha_g_ptr, nos_knockout,
nos_shape_offset>>1, nos_tag_offset>>1,
mask_row_ptr, has_mask, /* maskbuf */ NULL, mask_bg_alpha, NULL,
@@ -4580,16 +4628,15 @@ pdf14_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
typedef void (*pdf14_mark_fill_rect_fn)(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated);
+ int alpha_g_off, int shape_off, byte shape);
static forceinline void
template_mark_fill_rect(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i, j, k;
- gx_color_index comps;
byte dst[PDF14_MAX_PLANES] = { 0 };
byte dest_alpha;
bool tag_blend = blend_mode == BLEND_MODE_Normal ||
@@ -4638,45 +4685,49 @@ template_mark_fill_rect(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restri
dest_alpha = dst[num_comp];
pdst = art_pdf_composite_pixel_alpha_8_inline(dst, src, num_comp, blend_mode, first_blend_spot,
pdev->blend_procs, pdev);
- /* Until I see otherwise in AR or the spec, do not fool
- with spot overprinting while we are in an RGB or Gray
- blend color space. */
- if (!additive && overprint) {
+ /* Post blend complement for subtractive and handling of drawncomps
+ if overprint. We will have already done the compatible overprint
+ mode in the above composition */
+ if (!additive && !overprint) {
+ /* Pure subtractive */
+ for (k = 0; k < num_comp; ++k)
+ dst_ptr[k * planestride] = 255 - pdst[k];
+ } else if (!additive && overprint) {
+ int comps;
/* If this is an overprint case, and alpha_r is different
than alpha_d then we will need to adjust
the colors of the non-drawn components here too */
- for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
- if ((comps & 0x1) != 0) {
- dst_ptr[k * planestride] = 255 - pdst[k];
- } else if (dest_alpha != pdst[num_comp]) {
- /* We need val_new = (val_old * old_alpha) / new_alpha */
- if (pdst[num_comp] != 0) {
- int val = (int)floor(((float)dest_alpha / (float)pdst[num_comp]) * (255 - pdst[k]) + 0.5);
- if (val < 0)
- val = 0;
- else if (val > 255)
+ if (dest_alpha != pdst[num_comp] && pdst[num_comp] != 0) {
+ /* dest_alpha > pdst[num_comp], and dst[num_comp] != 0.
+ * Therefore dest_alpha / pdst[num_comp] <= 255 */
+ uint32_t scale = 256 * dest_alpha / pdst[num_comp];
+ for (k = 0, comps = drawn_comps; k < num_comp; ++k, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst_ptr[k * planestride] = 255 - pdst[k];
+ } else {
+ /* We need val_new = (val_old * old_alpha) / new_alpha */
+ uint32_t val = (scale * (255 - pdst[k]) + 128)>>8;
+ if (val > 255)
val = 255;
dst_ptr[k * planestride] = val;
}
}
- }
- } else {
- /* Post blend complement for subtractive */
- if (!additive) {
- /* Pure subtractive */
- for (k = 0; k < num_comp; ++k)
- dst_ptr[k * planestride] = 255 - pdst[k];
-
} else {
- /* Hybrid case, additive with subtractive spots */
- for (k = 0; k < (num_comp - num_spots); k++) {
- dst_ptr[k * planestride] = pdst[k];
- }
- for (k = 0; k < num_spots; k++) {
- dst_ptr[(k + num_comp - num_spots) * planestride] =
- 255 - pdst[k + num_comp - num_spots];
+ for (k = 0, comps = drawn_comps; k < num_comp; ++k, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst_ptr[k * planestride] = 255 - pdst[k];
+ }
}
}
+ } else {
+ /* Hybrid case, additive with subtractive spots */
+ for (k = 0; k < (num_comp - num_spots); k++) {
+ dst_ptr[k * planestride] = pdst[k];
+ }
+ for (k = 0; k < num_spots; k++) {
+ dst_ptr[(k + num_comp - num_spots) * planestride] =
+ 255 - pdst[k + num_comp - num_spots];
+ }
}
/* The alpha channel */
dst_ptr[num_comp * planestride] = pdst[num_comp];
@@ -4708,7 +4759,7 @@ static void
mark_fill_rect_alpha0(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i, j;
@@ -4732,19 +4783,19 @@ static void
mark_fill_rect(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
template_mark_fill_rect(w, h, dst_ptr, src, num_comp, num_spots, first_blend_spot,
src_alpha, rowstride, planestride, additive, pdev, blend_mode,
overprint, drawn_comps, tag_off, curr_tag,
- alpha_g_off, shape_off, shape, isolated);
+ alpha_g_off, shape_off, shape);
}
static void
mark_fill_rect_sub4_fast(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i, j, k;
@@ -4788,43 +4839,43 @@ static void
mark_fill_rect_add_nospots(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
template_mark_fill_rect(w, h, dst_ptr, src, num_comp, /*num_spots*/0, first_blend_spot,
src_alpha, rowstride, planestride, /*additive*/1, pdev, blend_mode,
/*overprint*/0, /*drawn_comps*/0, tag_off, curr_tag,
- alpha_g_off, shape_off, shape, /*isolated*/ 0);
+ alpha_g_off, shape_off, shape);
}
static void
mark_fill_rect_add_nospots_common(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
template_mark_fill_rect(w, h, dst_ptr, src, num_comp, /*num_spots*/0, /*first_blend_spot*/0,
src_alpha, rowstride, planestride, /*additive*/1, pdev, /*blend_mode*/BLEND_MODE_Normal,
/*overprint*/0, /*drawn_comps*/0, /*tag_off*/0, curr_tag,
- alpha_g_off, /*shape_off*/0, shape, /*isolated*/ 0);
+ alpha_g_off, /*shape_off*/0, shape);
}
static void
mark_fill_rect_add_nospots_common_no_alpha_g(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
template_mark_fill_rect(w, h, dst_ptr, src, num_comp, /*num_spots*/0, /*first_blend_spot*/0,
src_alpha, rowstride, planestride, /*additive*/1, pdev, /*blend_mode*/BLEND_MODE_Normal,
/*overprint*/0, /*drawn_comps*/0, /*tag_off*/0, curr_tag,
- /*alpha_g_off*/0, /*shape_off*/0, shape, /*isolated*/ 0);
+ /*alpha_g_off*/0, /*shape_off*/0, shape);
}
static void
mark_fill_rect_add3_common(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i, j, k;
@@ -4868,7 +4919,7 @@ static void
mark_fill_rect_add1_no_spots(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i;
bool tag_blend = blend_mode == BLEND_MODE_Normal ||
@@ -4914,7 +4965,7 @@ static void
mark_fill_rect_add1_no_spots_normal(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i;
@@ -4968,7 +5019,7 @@ static void
mark_fill_rect_add1_no_spots_fast(int w, int h, byte *gs_restrict dst_ptr, byte *gs_restrict src, int num_comp, int num_spots, int first_blend_spot,
byte src_alpha, int rowstride, int planestride, bool additive, pdf14_device *pdev, gs_blend_mode_t blend_mode,
bool overprint, gx_color_index drawn_comps, int tag_off, gs_graphics_type_tag_t curr_tag,
- int alpha_g_off, int shape_off, byte shape, bool isolated)
+ int alpha_g_off, int shape_off, byte shape)
{
int i;
@@ -5024,8 +5075,9 @@ do_mark_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
int shape_off = num_chan * planestride;
int alpha_g_off = shape_off + (has_shape ? planestride : 0);
int tag_off = alpha_g_off + (has_alpha_g ? planestride : 0);
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
byte shape = 0; /* Quiet compiler. */
byte src_alpha;
const gx_color_index mask = ((gx_color_index)1 << 8) - 1;
@@ -5033,7 +5085,6 @@ do_mark_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
int num_spots = buf->num_spots;
int first_blend_spot = num_comp;
pdf14_mark_fill_rect_fn fn;
- bool isolated = buf->isolated;
if (num_spots > 0 && !blend_valid_for_spot(blend_mode))
first_blend_spot = num_comp - num_spots;
@@ -5139,7 +5190,7 @@ do_mark_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
fn(w, h, dst_ptr, src, num_comp, num_spots, first_blend_spot, src_alpha,
rowstride, planestride, additive, pdev, blend_mode, overprint,
- drawn_comps, tag_off, curr_tag, alpha_g_off, shape_off, shape, isolated);
+ drawn_comps, tag_off, curr_tag, alpha_g_off, shape_off, shape);
#if 0
/* #if RAW_DUMP */
@@ -5170,8 +5221,8 @@ template_mark_fill_rect16(int w, int h, uint16_t *gs_restrict dst_ptr, uint16_t
int alpha_g_off, int shape_off, uint16_t shape_)
{
int i, j, k;
- gx_color_index comps;
uint16_t dst[PDF14_MAX_PLANES] = { 0 };
+ uint16_t dest_alpha;
/* Expand src_alpha and shape to be 0...0x10000 rather than 0...0xffff */
int src_alpha = src_alpha_ + (src_alpha_>>15);
int shape = shape_ + (shape_>>15);
@@ -5218,34 +5269,52 @@ template_mark_fill_rect16(int w, int h, uint16_t *gs_restrict dst_ptr, uint16_t
}
}
dst[num_comp] = dst_ptr[num_comp * planestride];
+ dest_alpha = dst[num_comp];
pdst = art_pdf_composite_pixel_alpha_16_inline(dst, src, num_comp, blend_mode, first_blend_spot,
pdev->blend_procs, pdev);
- /* Until I see otherwise in AR or the spec, do not fool
- with spot overprinting while we are in an RGB or Gray
- blend color space. */
- if (!additive && overprint) {
- for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
- if ((comps & 0x1) != 0) {
- dst_ptr[k * planestride] = 65535 - pdst[k];
+ /* Post blend complement for subtractive and handling of drawncomps
+ if overprint. We will have already done the compatible overprint
+ mode in the above composition */
+ if (!additive && !overprint) {
+ /* Pure subtractive */
+ for (k = 0; k < num_comp; ++k)
+ dst_ptr[k * planestride] = 65535 - pdst[k];
+ } else if (!additive && overprint) {
+ int comps;
+ /* If this is an overprint case, and alpha_r is different
+ than alpha_d then we will need to adjust
+ the colors of the non-drawn components here too */
+ if (dest_alpha != pdst[num_comp] && pdst[num_comp] != 0) {
+ /* dest_alpha > pdst[num_comp], and dst[num_comp] != 0.
+ * Therefore dest_alpha / pdst[num_comp] <= 65535 */
+ uint64_t scale = (uint64_t)65536 * dest_alpha / pdst[num_comp];
+ for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst_ptr[k * planestride] = 65535 - pdst[k];
+ } else {
+ /* We need val_new = (val_old * old_alpha) / new_alpha */
+ uint64_t val = (scale * (65535 - pdst[k]) + 32768)>>16;
+ if (val > 65535)
+ val = 65535;
+ dst_ptr[k * planestride] = val;
+ }
}
- }
- } else {
- /* Post blend complement for subtractive */
- if (!additive) {
- /* Pure subtractive */
- for (k = 0; k < num_comp; ++k)
- dst_ptr[k * planestride] = 65535 - pdst[k];
-
} else {
- /* Hybrid case, additive with subtractive spots */
- for (k = 0; k < (num_comp - num_spots); k++) {
- dst_ptr[k * planestride] = pdst[k];
- }
- for (k = 0; k < num_spots; k++) {
- dst_ptr[(k + num_comp - num_spots) * planestride] =
- 65535 - pdst[k + num_comp - num_spots];
+ for (k = 0, comps = drawn_comps; comps != 0; ++k, comps >>= 1) {
+ if ((comps & 0x1) != 0) {
+ dst_ptr[k * planestride] = 65535 - pdst[k];
+ }
}
}
+ } else {
+ /* Hybrid case, additive with subtractive spots */
+ for (k = 0; k < (num_comp - num_spots); k++) {
+ dst_ptr[k * planestride] = pdst[k];
+ }
+ for (k = 0; k < num_spots; k++) {
+ dst_ptr[(k + num_comp - num_spots) * planestride] =
+ 65535 - pdst[k + num_comp - num_spots];
+ }
}
/* The alpha channel */
dst_ptr[num_comp * planestride] = pdst[num_comp];
@@ -5335,7 +5404,7 @@ mark_fill_rect16_sub4_fast(int w, int h, uint16_t *gs_restrict dst_ptr, uint16_t
dst_ptr[4 * planestride] = a_s;
} else if (a_s != 0) {
/* Result alpha is Union of backdrop and source alpha */
- int tmp, src_scale;
+ unsigned int tmp, src_scale;
unsigned int a_r;
a_b += a_b>>15;
@@ -5418,9 +5487,8 @@ mark_fill_rect16_add3_common(int w, int h, uint16_t *gs_restrict dst_ptr, uint16
/* alpha */
dst_ptr[3 * planestride] = a_s;
} else if (a_s != 0) {
- int tmp;
+ unsigned int tmp, src_scale;
unsigned int a_r;
- int src_scale;
a_b += a_b >> 15;
/* Result alpha is Union of backdrop and source alpha */
@@ -5521,8 +5589,9 @@ mark_fill_rect16_add1_no_spots_normal(int w, int h, uint16_t *gs_restrict dst_pt
dst_ptr[planestride] = a_s;
} else {
/* Result alpha is Union of backdrop and source alpha */
- int tmp, src_scale, c_s, c_b;
+ unsigned int tmp, src_scale;
unsigned int a_r;
+ int c_s, c_b;
a_b += a_b>>15;
tmp = (0x10000 - a_b) * (0xffff - a_s) + 0x8000;
@@ -5580,8 +5649,9 @@ mark_fill_rect16_add1_no_spots_fast(int w, int h, uint16_t *gs_restrict dst_ptr,
dst_ptr[planestride] = a_s;
} else if (a_s != 0) {
/* Result alpha is Union of backdrop and source alpha */
- int tmp, src_scale, c_s, c_b;
+ unsigned int tmp, src_scale;
unsigned int a_r;
+ int c_s, c_b;
a_b += a_b>>15;
tmp = (0x10000 - a_b) * (0xffff - a_s) + 0x8000;
@@ -5627,8 +5697,9 @@ do_mark_fill_rectangle16(gx_device * dev, int x, int y, int w, int h,
int shape_off = num_chan * planestride;
int alpha_g_off = shape_off + (has_shape ? planestride : 0);
int tag_off = alpha_g_off + (has_alpha_g ? planestride : 0);
- bool overprint = pdev->overprint;
- gx_color_index drawn_comps = pdev->drawn_comps;
+ bool overprint = pdev->op_state == PDF14_OP_STATE_FILL ? pdev->overprint : pdev->stroke_overprint;
+ gx_color_index drawn_comps = pdev->op_state == PDF14_OP_STATE_FILL ?
+ pdev->drawn_comps_fill : pdev->drawn_comps_stroke;
uint16_t shape = 0; /* Quiet compiler. */
uint16_t src_alpha;
int num_spots = buf->num_spots;
diff --git a/base/gxblend1.c b/base/gxblend1.c
index 2f15c7c4..f439c0ac 100644
--- a/base/gxblend1.c
+++ b/base/gxblend1.c
@@ -311,7 +311,7 @@ pdf14_preserve_backdrop_cm(pdf14_buf *buf, cmm_profile_t *group_profile,
}
void
-pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool knockout_buff
+pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool from_backdrop
#if RAW_DUMP
, const gs_memory_t *mem
#endif
@@ -330,15 +330,14 @@ pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool knockout_buff
int i, n_planes;
bool deep = buf->deep;
- if (knockout_buff) {
- buf_plane = buf->backdrop;
+ buf_plane = buf->data;
+ n_planes = buf->n_planes;
+ if (from_backdrop) {
tos_plane = tos->backdrop;
- n_planes = buf->n_chan;
} else {
- buf_plane = buf->data;
tos_plane = tos->data;
- n_planes = buf->n_planes;
}
+
/* First clear out everything. There are cases where the incoming buf
has a region outside the existing tos group. Need to check if this
is getting clipped in which case we need to fix the allocation of
@@ -353,7 +352,7 @@ pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool knockout_buff
* alpha_g and shape, but don't need to clear the tag plane
* if it would be copied below (and if it exists). */
int tag_plane_num = tos->n_chan + !!buf->has_shape + !!buf->has_alpha_g;
- if (!knockout_buff && n_planes > tag_plane_num)
+ if (!from_backdrop && n_planes > tag_plane_num)
n_planes = tag_plane_num;
if (n_planes > tos->n_chan)
memset(buf->data + tos->n_chan * buf->planestride, 0, (n_planes - tos->n_chan) * buf->planestride);
@@ -369,22 +368,23 @@ pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool knockout_buff
buf_plane += buf->planestride;
tos_plane += tos->planestride;
}
- if (!knockout_buff)
+ if (!from_backdrop)
copy_extra_planes(buf_plane, buf, tos_plane, tos, width, height);
}
#if RAW_DUMP
if (x0 < x1 && y0 < y1) {
- byte *buf_plane = (knockout_buff ? buf->backdrop : buf->data);
- buf_plane += ((x0 - buf->rect.p.x)<<buf->deep) +
- (y0 - buf->rect.p.y) * buf->rowstride;
- dump_raw_buffer(mem, y1 - y0, x1 - x0, buf->n_planes, buf->planestride,
- buf->rowstride, "BackDropInit", buf_plane, buf->deep);
- global_index++;
+ byte *buf_plane = (from_backdrop ? buf->backdrop : buf->data);
+ if (buf_plane != NULL) {
+ buf_plane += ((x0 - buf->rect.p.x) << buf->deep) +
+ (y0 - buf->rect.p.y) * buf->rowstride;
+ dump_raw_buffer(mem, y1 - y0, x1 - x0, buf->n_planes, buf->planestride,
+ buf->rowstride, "BackDropInit", buf_plane, buf->deep);
+ global_index++;
+ }
}
#endif
}
-
/*
* Encode a list of colorant values into a gx_color_index_value.
*/
diff --git a/base/gxclfile.c b/base/gxclfile.c
index d2887dd2..841009a0 100644
--- a/base/gxclfile.c
+++ b/base/gxclfile.c
@@ -476,8 +476,7 @@ clist_rewind(clist_file_ptr cf, bool discard_data, const char *fname)
IFILE *ocf = fake_path_to_file(fname);
char fmode[4];
- strcpy(fmode, "w+");
- strcat(fmode, gp_fmode_binary_suffix);
+ snprintf(fmode, sizeof(fmode), "w+%s", gp_fmode_binary_suffix);
if (ocf) {
if (discard_data) {
diff --git a/base/gxclimag.c b/base/gxclimag.c
index c866b2c8..83f0ccef 100644
--- a/base/gxclimag.c
+++ b/base/gxclimag.c
@@ -220,7 +220,7 @@ clist_fill_mask(gx_device * dev,
if (code < 0)
return code;
code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re,
- devn_not_tile);
+ devn_not_tile_fill);
if (code == gs_error_unregistered)
return code;
if (depth > 1 && code >= 0)
@@ -537,7 +537,8 @@ clist_begin_typed_image(gx_device * dev, const gs_gstate * pgs,
indexed = false;
num_components = gs_color_space_num_components(pcs);
}
- uses_color = pim->CombineWithColor && rop3_uses_T(pgs->log_op);
+ uses_color = pim->CombineWithColor &&
+ (rop3_uses_T(pgs->log_op) || rop3_uses_S(pgs->log_op));
}
code = gx_image_enum_common_init((gx_image_enum_common_t *) pie,
(const gs_data_image_t *) pim,
@@ -755,8 +756,6 @@ clist_begin_typed_image(gx_device * dev, const gs_gstate * pgs,
goto use_default;
}
if (pim->Interpolate) {
- if (gx_device_is_pattern_clist(dev))
- goto use_default;
pie->support.x = pie->support.y = MAX_ISCALE_SUPPORT + 1;
} else {
pie->support.x = pie->support.y = 0;
@@ -999,7 +998,9 @@ clist_image_plane_data(gx_image_enum_common_t * info,
sbox.p.y = (y0 = y_orig) - pie->support.y;
sbox.q.x = pie->rect.q.x + pie->support.x;
sbox.q.y = (y1 = pie->y += yh_used) + pie->support.y;
- gs_bbox_transform(&sbox, &pie->matrix, &dbox);
+ code = gs_bbox_transform(&sbox, &pie->matrix, &dbox);
+ if (code < 0)
+ return code;
/*
* In order to keep the band list consistent, we must write out
* the image data in precisely those bands whose begin_image
@@ -1117,7 +1118,7 @@ clist_image_plane_data(gx_image_enum_common_t * info,
re.rect_nbands = ((pie->ymax + re.band_height - 1) / re.band_height) -
((pie->ymin) / re.band_height);
code = cmd_put_drawing_color(cdev, re.pcls, &pie->dcolor,
- &re, devn_not_tile);
+ &re, devn_not_tile_fill);
if (code < 0)
return code;
}
diff --git a/base/gxclip.c b/base/gxclip.c
index 47a19965..b0924307 100644
--- a/base/gxclip.c
+++ b/base/gxclip.c
@@ -47,6 +47,7 @@ static dev_proc_get_clipping_box(clip_get_clipping_box);
static dev_proc_get_bits_rectangle(clip_get_bits_rectangle);
static dev_proc_fill_path(clip_fill_path);
static dev_proc_transform_pixel_region(clip_transform_pixel_region);
+static dev_proc_fill_stroke_path(clip_fill_stroke_path);
/* The device descriptor. */
static const gx_device_clip gs_clip_device =
@@ -124,8 +125,9 @@ static const gx_device_clip gs_clip_device =
clip_strip_copy_rop2,
clip_strip_tile_rect_devn,
clip_copy_alpha_hl_color,
- NULL,
- clip_transform_pixel_region
+ NULL, /* process_page */
+ clip_transform_pixel_region,
+ clip_fill_stroke_path,
}
};
@@ -1600,14 +1602,25 @@ clip_transform_pixel_region(gx_device *dev, transform_pixel_region_reason reason
/* Single unskewed rectangle - we can use the underlying device direct */
local_data.u.init.clip = &local_clip;
local_clip = *data->u.init.clip;
- if (local_clip.p.x < cdev->current->xmin)
- local_clip.p.x = cdev->current->xmin;
- if (local_clip.q.x > cdev->current->xmax)
- local_clip.q.x = cdev->current->xmax;
- if (local_clip.p.y < cdev->current->ymin)
- local_clip.p.y = cdev->current->ymin;
- if (local_clip.q.y > cdev->current->ymax)
- local_clip.q.y = cdev->current->ymax;
+ if (cdev->list.transpose) {
+ if (local_clip.p.x < cdev->current->ymin)
+ local_clip.p.x = cdev->current->ymin;
+ if (local_clip.q.x > cdev->current->ymax)
+ local_clip.q.x = cdev->current->ymax;
+ if (local_clip.p.y < cdev->current->xmin)
+ local_clip.p.y = cdev->current->xmin;
+ if (local_clip.q.y > cdev->current->xmax)
+ local_clip.q.y = cdev->current->xmax;
+ } else {
+ if (local_clip.p.x < cdev->current->xmin)
+ local_clip.p.x = cdev->current->xmin;
+ if (local_clip.q.x > cdev->current->xmax)
+ local_clip.q.x = cdev->current->xmax;
+ if (local_clip.p.y < cdev->current->ymin)
+ local_clip.p.y = cdev->current->ymin;
+ if (local_clip.q.y > cdev->current->ymax)
+ local_clip.q.y = cdev->current->ymax;
+ }
state->use_default = 0;
ret = dev_proc(cdev->target, transform_pixel_region)(cdev->target, reason, &local_data);
} else {
@@ -1634,3 +1647,78 @@ clip_transform_pixel_region(gx_device *dev, transform_pixel_region_reason reason
return ret;
}
+
+static int
+clip_call_fill_stroke_path(clip_callback_data_t * pccd, int xc, int yc, int xec, int yec)
+{
+ gx_device *tdev = pccd->tdev;
+ dev_proc_fill_stroke_path((*proc));
+ int code;
+ gx_clip_path cpath_intersection;
+ gx_clip_path *pcpath = (gx_clip_path *)pccd->pcpath;
+
+ /* Previously the code here tested for pcpath != NULL, but
+ * we can commonly (such as from clist_playback_band) be
+ * called with a non-NULL, but still invalid clip path.
+ * Detect this by the list having at least one entry in it. */
+ if (pcpath != NULL && pcpath->rect_list->list.count != 0) {
+ gx_path rect_path;
+ code = gx_cpath_init_local_shared_nested(&cpath_intersection, pcpath, pccd->ppath->memory, 1);
+ if (code < 0)
+ return code;
+ gx_path_init_local(&rect_path, pccd->ppath->memory);
+ code = gx_path_add_rectangle(&rect_path, int2fixed(xc), int2fixed(yc), int2fixed(xec), int2fixed(yec));
+ if (code < 0)
+ return code;
+ code = gx_cpath_intersect(&cpath_intersection, &rect_path,
+ gx_rule_winding_number, (gs_gstate *)(pccd->pgs));
+ gx_path_free(&rect_path, "clip_call_fill_stroke_path");
+ } else {
+ gs_fixed_rect clip_box;
+ clip_box.p.x = int2fixed(xc);
+ clip_box.p.y = int2fixed(yc);
+ clip_box.q.x = int2fixed(xec);
+ clip_box.q.y = int2fixed(yec);
+ gx_cpath_init_local(&cpath_intersection, pccd->ppath->memory);
+ code = gx_cpath_from_rectangle(&cpath_intersection, &clip_box);
+ }
+ if (code < 0)
+ return code;
+ proc = dev_proc(tdev, fill_stroke_path);
+ if (proc == NULL)
+ proc = gx_default_fill_stroke_path;
+ code = (*proc)(pccd->tdev, pccd->pgs, pccd->ppath, pccd->params,
+ pccd->pdcolor, pccd->stroke_params, pccd->pstroke_dcolor,
+ &cpath_intersection);
+ gx_cpath_free(&cpath_intersection, "clip_call_fill_stroke_path");
+ return code;
+}
+
+static int
+clip_fill_stroke_path(gx_device *dev, const gs_gstate *pgs,
+ gx_path *ppath,
+ const gx_fill_params *params,
+ const gx_drawing_color *pdcolor,
+ const gx_stroke_params *stroke_params,
+ const gx_drawing_color *pstroke_dcolor,
+ const gx_clip_path *pcpath)
+{
+ gx_device_clip *rdev = (gx_device_clip *) dev;
+ clip_callback_data_t ccdata;
+ gs_fixed_rect box;
+
+ ccdata.pgs = pgs;
+ ccdata.ppath = ppath;
+ ccdata.params = params;
+ ccdata.pdcolor = pdcolor;
+ ccdata.stroke_params = stroke_params;
+ ccdata.pstroke_dcolor = pstroke_dcolor;
+ ccdata.pcpath = pcpath;
+ clip_get_clipping_box(dev, &box);
+ return clip_enumerate(rdev,
+ fixed2int(box.p.x),
+ fixed2int(box.p.y),
+ fixed2int(box.q.x - box.p.x),
+ fixed2int(box.q.y - box.p.y),
+ clip_call_fill_stroke_path, &ccdata);
+}
diff --git a/base/gxclip.h b/base/gxclip.h
index 61521ad1..c052200c 100644
--- a/base/gxclip.h
+++ b/base/gxclip.h
@@ -42,7 +42,8 @@ typedef struct clip_callback_data_s {
int sourcex; /* ibid. */
uint raster; /* ibid. */
int depth; /* copy_alpha, fill_mask */
- const gx_drawing_color *pdcolor; /* fill_mask, fill_rectangle_hl_color */
+ const gx_drawing_color *pdcolor; /* fill_mask, fill_rectangle_hl_color, fill_path, fill_stroke_path */
+ const gx_drawing_color *pstroke_dcolor; /* fill_stroke_path */
gs_logical_operation_t lop; /* fill_mask, strip_copy_rop */
const gx_clip_path *pcpath; /* fill_mask, fill_rectangle_hl_color*/
const gx_strip_bitmap *tiles; /* strip_tile_rectangle */
@@ -51,9 +52,10 @@ typedef struct clip_callback_data_s {
const gx_strip_bitmap *textures; /* ibid. */
const gx_color_index *tcolors; /* ibid. */
int plane_height; /* copy_planes, strip_copy_rop2 */
- const gs_gstate * pgs; /* fill_path, fill_rectangle_hl_color */
- gx_path * ppath; /* fill_path */
- const gx_fill_params * params; /* fill_path */
+ const gs_gstate *pgs; /* fill_path, fill_stroke_path, fill_rectangle_hl_color */
+ gx_path *ppath; /* fill_path, fill_stroke_path */
+ const gx_fill_params *params; /* fill_path, fill_stroke_path */
+ const gx_stroke_params *stroke_params; /* fill_stroke_path */
} clip_callback_data_t;
/* Declare the callback procedures. */
diff --git a/base/gxclipm.c b/base/gxclipm.c
index 40e503ad..0a98eb06 100644
--- a/base/gxclipm.c
+++ b/base/gxclipm.c
@@ -113,7 +113,8 @@ const gx_device_mask_clip gs_mask_clip_device =
mask_clip_strip_tile_rect_devn,
mask_clip_copy_alpha_hl_color,
NULL,
- gx_default_transform_pixel_region
+ gx_default_transform_pixel_region,
+ gx_forward_fill_stroke_path,
}
};
diff --git a/base/gxclist.c b/base/gxclist.c
index 14b825cc..c5e8fead 100644
--- a/base/gxclist.c
+++ b/base/gxclist.c
@@ -201,7 +201,8 @@ const gx_device_procs gs_clist_device_procs = {
clist_strip_tile_rect_devn,
clist_copy_alpha_hl_color,
clist_process_page,
- gx_default_transform_pixel_region
+ gx_default_transform_pixel_region,
+ clist_fill_stroke_path,
};
/*------------------- Choose the implementation -----------------------
@@ -577,6 +578,8 @@ clist_reset(gx_device * dev)
cdev->cropping_level = 0;
cdev->mask_id_count = cdev->mask_id = cdev->temp_mask_id = 0;
cdev->icc_table = NULL;
+ cdev->op_fill_active = false;
+ cdev->op_stroke_active = false;
return 0;
}
/*
@@ -636,8 +639,7 @@ clist_open_output_file(gx_device *dev)
code = clist_init(dev);
if (code < 0)
return code;
- strcpy(fmode, "w+");
- strcat(fmode, gp_fmode_binary_suffix);
+ snprintf(fmode, sizeof(fmode), "w+%s", gp_fmode_binary_suffix);
cdev->page_cfname[0] = 0; /* create a new file */
cdev->page_bfname[0] = 0; /* ditto */
clist_reset_page(cdev);
diff --git a/base/gxclist.h b/base/gxclist.h
index 43cc3d5b..e1e7ff1b 100644
--- a/base/gxclist.h
+++ b/base/gxclist.h
@@ -336,8 +336,7 @@ struct gx_device_clist_writer_s {
const gx_clip_path *clip_path; /* current clip path, */
/* only non-transient for images */
gs_id clip_path_id; /* id of current clip path */
- clist_color_space_t color_space; /* current color space, */
- /* only used for non-mask images */
+ clist_color_space_t color_space; /* only used for non-mask images */
gs_id transfer_ids[4]; /* ids of transfer maps */
gs_id black_generation_id; /* id of black generation map */
gs_id undercolor_removal_id; /* id of u.c.r. map */
@@ -366,6 +365,9 @@ struct gx_device_clist_writer_s {
access to the graphic state information in those
routines, this is the logical place to put this
information */
+ bool op_fill_active; /* Needed so we know state during clist writing */
+ bool op_stroke_active; /* Needed so we know state during clist writing */
+
};
/* Bits for gx_device_clist_writer.disable_mask. Bit set disables behavior */
diff --git a/base/gxclpath.c b/base/gxclpath.c
index cc5a5e3e..9a57932e 100644
--- a/base/gxclpath.c
+++ b/base/gxclpath.c
@@ -127,14 +127,18 @@ cmd_put_drawing_color(gx_device_clist_writer * cldev, gx_clist_state * pcls,
pdht->id != cldev->device_halftone_id ) {
if ((code = cmd_put_halftone(cldev, pdht)) < 0)
return code;
- color_unset(psdc);
+ psdc->type = gx_dc_type_none; /* force writing */
}
+ if (psdc->devn_type != devn_type) {
+ psdc->type = gx_dc_type_none; /* force writing if fill/stroke mismatch. */
+ psdc->devn_type = devn_type;
+ }
/*
* Get the device color type index and the required size.
*
* The complete cmd_opv_ext_put_drawing_color consists of:
- * comand code (2 bytes)
+ * command code (2 bytes)
* tile index value or non tile color (1)
* device color type index (1)
* length of serialized device color (enc_u_sizew(dc_size))
@@ -149,7 +153,7 @@ cmd_put_drawing_color(gx_device_clist_writer * cldev, gx_clist_state * pcls,
&dc_size );
/* if the returned value is > 0, no change in the color is necessary */
- if (code > 0 && devn_type == devn_not_tile)
+ if (code > 0 && ((devn_type == devn_not_tile_fill) || (devn_type == devn_not_tile_stroke)))
return 0;
else if (code < 0 && code != gs_error_rangecheck)
return code;
@@ -216,8 +220,11 @@ cmd_put_drawing_color(gx_device_clist_writer * cldev, gx_clist_state * pcls,
return code;
dp0 = dp;
switch (devn_type) {
- case devn_not_tile:
- dp[1] = cmd_opv_ext_put_drawing_color;
+ case devn_not_tile_fill:
+ dp[1] = cmd_opv_ext_put_fill_dcolor;
+ break;
+ case devn_not_tile_stroke:
+ dp[1] = cmd_opv_ext_put_stroke_dcolor;
break;
case devn_tile0:
dp[1] = cmd_opv_ext_put_tile_devn_color0;
@@ -226,7 +233,7 @@ cmd_put_drawing_color(gx_device_clist_writer * cldev, gx_clist_state * pcls,
dp[1] = cmd_opv_ext_put_tile_devn_color1;
break;
default:
- dp[1] = cmd_opv_ext_put_drawing_color;
+ dp[1] = cmd_opv_ext_put_fill_dcolor;
}
dp += 2;
*dp++ = di | (offset > 0 ? 0x80 : 0);
@@ -365,9 +372,9 @@ cmd_check_clip_path(gx_device_clist_writer * cldev, const gx_clip_path * pcpath)
(cj_ac_sa_known | flatness_known | op_bm_tk_known | opacity_alpha_known |\
shape_alpha_known | fill_adjust_known | alpha_known | clip_path_known)
static void
-cmd_check_fill_known(gx_device_clist_writer *cdev, const gs_gstate *pgs,
- double flatness, const gs_fixed_point *padjust,
- const gx_clip_path *pcpath, uint *punknown)
+cmd_check_fill_known(gx_device_clist_writer* cdev, const gs_gstate* pgs,
+ double flatness, const gs_fixed_point* padjust,
+ const gx_clip_path* pcpath, uint* punknown)
{
/*
* stroke_adjust is not needed for fills, and none of these are needed
@@ -391,14 +398,15 @@ cmd_check_fill_known(gx_device_clist_writer *cdev, const gs_gstate *pgs,
* though both parameters are passed in the state as well, this usually
* has no effect.
*/
- if (state_neq(overprint) || state_neq(effective_overprint_mode) ||
+ if (state_neq(overprint) || state_neq(overprint_mode) ||
state_neq(blend_mode) || state_neq(text_knockout) ||
- state_neq(renderingintent)) {
+ state_neq(stroke_overprint) || state_neq(renderingintent)) {
*punknown |= op_bm_tk_known;
state_update(overprint);
- state_update(effective_overprint_mode);
+ state_update(overprint_mode);
state_update(blend_mode);
state_update(text_knockout);
+ state_update(stroke_overprint);
state_update(renderingintent);
}
if (state_neq(opacity.alpha)) {
@@ -477,7 +485,7 @@ cmd_write_unknown(gx_device_clist_writer * cldev, gx_clist_state * pcls,
sizeof(float) + /* flatness */
sizeof(float) + /* line width */
sizeof(float) + /* miter limit */
- 2 + /* op_bm_tk and rend intent */
+ 3 + /* bm_tk, op, and rend intent */
sizeof(float) * 2 + /* opacity/shape alpha */
sizeof(cldev->gs_gstate.alpha)
];
@@ -513,8 +521,10 @@ cmd_write_unknown(gx_device_clist_writer * cldev, gx_clist_state * pcls,
if (unknown & op_bm_tk_known) {
*bp++ =
((int)cldev->gs_gstate.blend_mode << 3) +
- (cldev->gs_gstate.text_knockout << 2) +
- (cldev->gs_gstate.overprint_mode << 1) +
+ cldev->gs_gstate.text_knockout;
+ *bp++ =
+ (cldev->gs_gstate.overprint_mode << 2) +
+ (cldev->gs_gstate.stroke_overprint << 1) +
cldev->gs_gstate.overprint;
*bp++ = cldev->gs_gstate.renderingintent;
}
@@ -846,7 +856,7 @@ clist_fill_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
)
return code;
code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re,
- devn_not_tile);
+ devn_not_tile_fill);
if (code == gs_error_unregistered)
return code;
if (code < 0) {
@@ -869,6 +879,189 @@ clist_fill_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
}
int
+clist_fill_stroke_path(gx_device * pdev, const gs_gstate * pgs,
+ gx_path * ppath,
+ const gx_fill_params * params_fill,
+ const gx_device_color * pdevc_fill,
+ const gx_stroke_params * params_stroke,
+ const gx_device_color * pdevc_stroke,
+ const gx_clip_path * pcpath)
+{
+ gx_device_clist_writer * const cdev =
+ &((gx_device_clist *)pdev)->writer;
+ int pattern_size = pgs->line_params.dash.pattern_size;
+ byte op = (byte) (params_fill->rule == gx_rule_even_odd ?
+ cmd_opv_eofill_stroke : cmd_opv_fill_stroke);
+ uint unknown = 0;
+ gs_fixed_rect bbox;
+ gs_fixed_point expansion;
+ int adjust_y, expansion_code;
+ int ry, rheight;
+ gs_logical_operation_t lop = pgs->log_op;
+ bool slow_rop = cmd_slow_rop(pdev, lop_know_S_0(lop), pdevc_fill);
+ cmd_rects_enum_t re;
+
+ if (pdevc_stroke == NULL || pdevc_fill == NULL)
+ return_error(gs_error_unknownerror); /* shouldn't happen */
+
+ if ((cdev->disable_mask & (clist_disable_fill_path || clist_disable_stroke_path)) ||
+ gs_debug_c(',')
+ ) {
+ /* Disable path-based banding. */
+ return gx_default_fill_stroke_path(pdev, pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
+ }
+ /* TODO: For now punt to default if we have shaded color (pattern2) */
+ if (gx_dc_is_pattern2_color(pdevc_fill) || gx_dc_is_pattern2_color(pdevc_stroke)) {
+ return gx_default_fill_stroke_path(pdev, pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
+ }
+ gx_path_bbox(ppath, &bbox);
+ /* We must use the supplied gs_gstate, not our saved one, */
+ /* for computing the stroke expansion. */
+ expansion_code = gx_stroke_path_expansion(pgs, ppath, &expansion);
+ if (expansion_code < 0) {
+ /* Expansion is too large: use the entire page. */
+ adjust_y = 0;
+ ry = 0;
+ rheight = pdev->height;
+ } else {
+ adjust_y = fixed2int_ceiling(expansion.y) + 1;
+ ry = fixed2int(bbox.p.y) - adjust_y;
+ rheight = fixed2int_ceiling(bbox.q.y) - ry + adjust_y;
+ fit_fill_y(pdev, ry, rheight);
+ fit_fill_h(pdev, ry, rheight);
+ if (rheight <= 0)
+ return 0;
+ }
+ /* Check the dash pattern, since we bail out if */
+ /* the pattern is too large. */
+ if (cdev->gs_gstate.line_params.dash.pattern_size != pattern_size ||
+ (pattern_size != 0 &&
+ memcmp(cdev->dash_pattern, pgs->line_params.dash.pattern,
+ pattern_size * sizeof(float))) ||
+ cdev->gs_gstate.line_params.dash.offset !=
+ pgs->line_params.dash.offset ||
+ cdev->gs_gstate.line_params.dash.adapt !=
+ pgs->line_params.dash.adapt ||
+ cdev->gs_gstate.line_params.dot_length !=
+ pgs->line_params.dot_length ||
+ cdev->gs_gstate.line_params.dot_length_absolute !=
+ pgs->line_params.dot_length_absolute
+ ) {
+ /* Bail out if the dash pattern is too long. */
+ if (pattern_size > cmd_max_dash)
+ return gx_default_fill_stroke_path(pdev, pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
+ unknown |= dash_known;
+ /*
+ * Temporarily reset the dash pattern pointer for gx_set_dash,
+ * but don't leave it set, since that would confuse the GC.
+ */
+ cdev->gs_gstate.line_params.dash.pattern = cdev->dash_pattern;
+ gx_set_dash(&cdev->gs_gstate.line_params.dash,
+ pgs->line_params.dash.pattern,
+ pgs->line_params.dash.pattern_size,
+ pgs->line_params.dash.offset, NULL);
+ cdev->gs_gstate.line_params.dash.pattern = 0;
+ gx_set_dash_adapt(&cdev->gs_gstate.line_params.dash,
+ pgs->line_params.dash.adapt);
+ gx_set_dot_length(&cdev->gs_gstate.line_params,
+ pgs->line_params.dot_length,
+ pgs->line_params.dot_length_absolute);
+ }
+
+ if (state_neq(line_params.start_cap) || state_neq(line_params.join) ||
+ state_neq(line_params.end_cap) || state_neq(line_params.dash_cap)) {
+ unknown |= cap_join_known;
+ state_update(line_params.start_cap);
+ state_update(line_params.end_cap);
+ state_update(line_params.dash_cap);
+ state_update(line_params.join);
+ }
+ cmd_check_fill_known(cdev, pgs, params_fill->flatness, &pgs->fill_adjust,
+ pcpath, &unknown);
+ if (state_neq(line_params.half_width)) {
+ unknown |= line_width_known;
+ state_update(line_params.half_width);
+ }
+ if (state_neq(line_params.miter_limit)) {
+ unknown |= miter_limit_known;
+ gx_set_miter_limit(&cdev->gs_gstate.line_params,
+ pgs->line_params.miter_limit);
+ }
+ if (state_neq(ctm.xx) || state_neq(ctm.xy) ||
+ state_neq(ctm.yx) || state_neq(ctm.yy) ||
+ /* We don't actually need tx or ty, but we don't want to bother */
+ /* tracking them separately from the other coefficients. */
+ state_neq(ctm.tx) || state_neq(ctm.ty)
+ ) {
+ unknown |= ctm_known;
+ state_update(ctm);
+ }
+ if (unknown)
+ cmd_clear_known(cdev, unknown);
+ if (cdev->permanent_error < 0)
+ return (cdev->permanent_error);
+ /* If needed, update the trans_bbox */
+ if (cdev->pdf14_needed) {
+ gs_int_rect trans_bbox;
+ int rx = fixed2int(bbox.p.x) - 1;
+ int rwidth = fixed2int_ceiling(bbox.q.x) - rx + 1;
+ unknown |= STROKE_ALL_KNOWN;
+
+ fit_fill_w(cdev, rx, rwidth);
+ trans_bbox.p.x = rx;
+ trans_bbox.q.x = rx + rwidth - 1;
+ trans_bbox.p.y = ry;
+ trans_bbox.q.y = ry + rheight - 1;
+
+ clist_update_trans_bbox(cdev, &trans_bbox);
+ }
+ /* If either fill or stroke uses overprint, or overprint_mode != 0, then we */
+ /* need to write out the overprint drawn_comps and retain_* */
+ if (((pgs->overprint_mode || pgs->overprint || pgs->stroke_overprint))) {
+ unknown |= op_bm_tk_known;
+ }
+ RECT_ENUM_INIT(re, ry, rheight);
+ do {
+ int code;
+
+ RECT_STEP_INIT(re);
+ if ((code = cmd_do_write_unknown(cdev, re.pcls, STROKE_ALL_KNOWN | FILL_KNOWN)) < 0)
+ return code;
+ if ((code = cmd_do_enable_clip(cdev, re.pcls, pcpath != NULL)) < 0)
+ return code;
+ if ((code = cmd_update_lop(cdev, re.pcls, lop)) < 0)
+ return code;
+ /* Write the stroke first since do_fill_stroke will have locked the pattern */
+ /* tile if needed, and we want it locked after reading the stroke color. */
+ code = cmd_put_drawing_color(cdev, re.pcls, pdevc_stroke, &re, devn_not_tile_stroke);
+ if (code < 0) {
+ /* Something went wrong, use the default implementation. */
+ return gx_default_fill_stroke_path(pdev, pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
+ }
+ code = cmd_put_drawing_color(cdev, re.pcls, pdevc_fill, &re, devn_not_tile_fill);
+ if (code < 0) {
+ /* Something went wrong, use the default implementation. */
+ return gx_default_fill_stroke_path(pdev, pgs, ppath, params_fill, pdevc_fill,
+ params_stroke, pdevc_stroke, pcpath);
+ }
+ re.pcls->color_usage.slow_rop |= slow_rop;
+
+ /* Don't skip segments when expansion is unknown. */
+
+ code = cmd_put_path(cdev, re.pcls, ppath, min_fixed, max_fixed,
+ op, false, (segment_notes)~0);
+ if (code < 0)
+ return code;
+ re.y += re.height;
+ } while (re.y < re.yend);
+ return 0;
+}
+
+int
clist_stroke_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
const gx_stroke_params * params,
const gx_drawing_color * pdcolor, const gx_clip_path * pcpath)
@@ -1000,13 +1193,13 @@ clist_stroke_path(gx_device * dev, const gs_gstate * pgs, gx_path * ppath,
RECT_STEP_INIT(re);
CMD_CHECK_LAST_OP_BLOCK_DEFINED(cdev);
- if ((code = cmd_do_write_unknown(cdev, re.pcls, stroke_all_known)) < 0 ||
+ if ((code = cmd_do_write_unknown(cdev, re.pcls, STROKE_ALL_KNOWN)) < 0 ||
(code = cmd_do_enable_clip(cdev, re.pcls, pcpath != NULL)) < 0 ||
(code = cmd_update_lop(cdev, re.pcls, lop)) < 0
)
return code;
CMD_CHECK_LAST_OP_BLOCK_DEFINED(cdev);
- code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile);
+ code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile_stroke);
if (code == gs_error_unregistered)
return code;
if (code < 0) {
@@ -1102,7 +1295,7 @@ clist_put_polyfill(gx_device *dev, fixed px, fixed py,
do {
RECT_STEP_INIT(re);
if ((code = cmd_update_lop(cdev, re.pcls, lop)) < 0 ||
- (code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile)) < 0)
+ (code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile_fill)) < 0)
goto out;
re.pcls->color_usage.slow_rop |= slow_rop;
code = cmd_put_path(cdev, re.pcls, &path,
diff --git a/base/gxclpath.h b/base/gxclpath.h
index cda124e2..19e008c2 100644
--- a/base/gxclpath.h
+++ b/base/gxclpath.h
@@ -42,11 +42,12 @@
#define alpha_known (1<<9)
#define misc2_all_known ((1<<10)-1)
/* End of misc2 flags. */
+/* The following bits don't get passed in misc2, so are only limited by sizeof uint */
#define fill_adjust_known (1<<10)
#define ctm_known (1<<11)
#define dash_known (1<<12)
#define clip_path_known (1<<13)
-#define stroke_all_known ((1<<14)-1)
+#define STROKE_ALL_KNOWN ((1<<14)-1)
#define color_space_known (1<<14)
/*#define all_known ((1<<15)-1) */
@@ -145,44 +146,49 @@ typedef enum {
cmd_opv_fill = 0xf0,
cmd_opv_rgapto = 0xf1, /* dx%, dy% */
cmd_opv_eofill = 0xf3,
+ cmd_opv_fill_stroke = 0xf4,
+ cmd_opv_eofill_stroke = 0xf5,
cmd_opv_stroke = 0xf6,
cmd_opv_polyfill = 0xf9,
cmd_opv_fill_trapezoid = 0xfc
#define cmd_path_op_name_strings\
"fill", "rgapto", "?f2?", "eofill",\
- "?f4?", "?f5", "stroke", "?f7?",\
+ "fill_stroke", "eofill_stroke", "stroke", "?f7?",\
"?f8?", "polyfill", "?fa?", "?fb?",\
"fill_trapezoid", "?fd?", "?fe?", "?ff?"
-/* unused cmd_op values: 0xd0, 0xf2, 0xf4, 0xf5, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfd, 0xfe, 0xff */
+/* unused cmd_op values: 0xd0, 0xf2, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0xff */
} gx_cmd_xop;
/* This is usd for cmd_opv_ext_put_drawing_color so that we know if it
- is assocated with a tile or not */
+ is assocated with a tile or not and for fill or stroke color */
typedef enum {
- devn_not_tile = 0x00,
- devn_tile0 = 0x01,
- devn_tile1 = 0x02
+ devn_not_tile_fill = 0x00,
+ devn_not_tile_stroke = 0x01,
+ devn_tile0 = 0x02,
+ devn_tile1 = 0x03
} dc_devn_cl_type;
/*
* Further extended command set. This code always occupies a byte, which
* is the second byte of a command whose first byte is cmd_opv_extend.
*/
typedef enum {
- cmd_opv_ext_put_params = 0x00, /* serialized parameter list */
- cmd_opv_ext_create_compositor = 0x01, /* compositor id,
- * serialized compositor */
- cmd_opv_ext_put_halftone = 0x02, /* length of entire halftone */
- cmd_opv_ext_put_ht_seg = 0x03, /* segment length,
- * halftone segment data */
- cmd_opv_ext_put_drawing_color = 0x04, /* length, color type id,
- * serialized color */
- cmd_opv_ext_tile_rect_hl = 0x05, /* Uses devn colors in tiling fill */
- cmd_opv_ext_put_tile_devn_color0 = 0x6, /* Devn color0 for tile filling */
- cmd_opv_ext_put_tile_devn_color1 = 0x7, /* Devn color1 for tile filling */
- cmd_opv_ext_set_color_is_devn = 0x8, /* Used for overload of copy_color_alpha */
- cmd_opv_ext_unset_color_is_devn = 0x9 /* Used for overload of copy_color_alpha */
+ cmd_opv_ext_put_params = 0x00, /* serialized parameter list */
+ cmd_opv_ext_create_compositor = 0x01, /* compositor id,
+ * serialized compositor */
+ cmd_opv_ext_put_halftone = 0x02, /* length of entire halftone */
+ cmd_opv_ext_put_ht_seg = 0x03, /* segment length,
+ * halftone segment data */
+ cmd_opv_ext_put_fill_dcolor = 0x04, /* length, color type id,
+ * serialized color */
+ cmd_opv_ext_put_stroke_dcolor = 0x05, /* length, color type id,
+ * serialized color */
+ cmd_opv_ext_tile_rect_hl = 0x06, /* Uses devn colors in tiling fill */
+ cmd_opv_ext_put_tile_devn_color0 = 0x07, /* Devn color0 for tile filling */
+ cmd_opv_ext_put_tile_devn_color1 = 0x08, /* Devn color1 for tile filling */
+ cmd_opv_ext_set_color_is_devn = 0x09, /* Used for overload of copy_color_alpha */
+ cmd_opv_ext_unset_color_is_devn = 0x0a /* Used for overload of copy_color_alpha */
} gx_cmd_ext_op;
#define cmd_segment_op_num_operands_values\
@@ -210,6 +216,7 @@ typedef enum {
/* In gxclpath.c */
dev_proc_fill_path(clist_fill_path);
dev_proc_stroke_path(clist_stroke_path);
+dev_proc_fill_stroke_path(clist_fill_stroke_path);
dev_proc_fill_parallelogram(clist_fill_parallelogram);
dev_proc_fill_triangle(clist_fill_triangle);
diff --git a/base/gxclrast.c b/base/gxclrast.c
index 30c7e367..61982fff 100644
--- a/base/gxclrast.c
+++ b/base/gxclrast.c
@@ -250,8 +250,7 @@ static int read_set_bits(command_buf_t *pcb, tile_slot *bits,
static int read_set_misc2(command_buf_t *pcb, gs_gstate *pgs,
segment_notes *pnotes);
static int read_set_color_space(command_buf_t *pcb, gs_gstate *pgs,
- gs_color_space **ppcs, gx_device_clist_reader *cdev,
- gs_memory_t *mem);
+ gx_device_clist_reader *cdev, gs_memory_t *mem);
static int read_begin_image(command_buf_t *pcb, gs_image_common_t *pic,
gs_color_space *pcs);
static int read_put_params(command_buf_t *pcb, gs_gstate *pgs,
@@ -507,10 +506,12 @@ clist_playback_band(clist_playback_action playback_action,
struct _cas {
bool lop_enabled;
gx_device_color dcolor;
+ gs_fixed_point fa_save;
} clip_save;
bool in_clip = false;
gs_gstate gs_gstate;
- gx_device_color dev_color;
+ gx_device_color fill_color;
+ gx_device_color stroke_color;
float dash_pattern[cmd_max_dash];
gx_fill_params fill_params;
gx_stroke_params stroke_params;
@@ -608,8 +609,22 @@ in: /* Initialize for a new page. */
}
if (target != 0)
(*dev_proc(target, get_clipping_box))(target, &target_box);
+ memset(&gs_gstate, 0, sizeof(gs_gstate));
GS_STATE_INIT_VALUES_CLIST((&gs_gstate));
code = gs_gstate_initialize(&gs_gstate, mem);
+ gs_gstate.device = tdev;
+ gs_gstate.view_clip = NULL; /* Avoid issues in pdf14 fill stroke */
+ gs_gstate.clip_path = &clip_path;
+ pcs = gs_cspace_new_DeviceGray(mem);
+ if (pcs == NULL) {
+ code = gs_note_error(gs_error_VMerror);
+ goto out;
+ }
+ pcs->type->install_cspace(pcs, &gs_gstate);
+ gs_gstate.color[0].color_space = pcs;
+ rc_increment_cs(pcs);
+ gs_gstate.color[1].color_space = pcs;
+ rc_increment_cs(pcs);
/* Remove the ICC link cache and replace with the device link cache
so that we share the cache across bands */
rc_decrement(gs_gstate.icc_link_cache,"clist_playback_band");
@@ -629,13 +644,8 @@ in: /* Initialize for a new page. */
#ifdef DEBUG
halftone_type = ht_type_none;
#endif
- pcs = gs_cspace_new_DeviceGray(mem);
- if (pcs == NULL) {
- code = gs_note_error(gs_error_VMerror);
- goto out;
- }
- dev_color.ccolor_valid = false;
- color_unset(&dev_color);
+ fill_color.ccolor_valid = false;
+ color_unset(&fill_color);
data_bits = gs_alloc_bytes(mem, data_bits_size,
"clist_playback_band(data_bits)");
if (data_bits == 0) {
@@ -1289,9 +1299,15 @@ set_phase: /*
&target_box);
tdev = (gx_device *)&clip_accum;
clip_save.lop_enabled = state.lop_enabled;
- clip_save.dcolor = dev_color;
+ clip_save.dcolor = fill_color;
+ clip_save.fa_save.x = gs_gstate.fill_adjust.x;
+ clip_save.fa_save.y = gs_gstate.fill_adjust.y;
+ /* clip_path should match fill_path, i.e., with fill_adjust applied */
+ /* If we get here with the fill_adjust = [0, 0], set it to [0.5, 0.5]i */
+ if (clip_save.fa_save.x == 0 || clip_save.fa_save.y == 0)
+ gs_gstate.fill_adjust.x = gs_gstate.fill_adjust.y = fixed_half;
/* temporarily set a solid color */
- color_set_pure(&dev_color, (gx_color_index)1);
+ color_set_pure(&fill_color, (gx_color_index)1);
state.lop_enabled = false;
gs_gstate.log_op = lop_default;
break;
@@ -1324,13 +1340,16 @@ set_phase: /*
gs_gstate.log_op =
(state.lop_enabled ? state.lop :
lop_default);
- dev_color = clip_save.dcolor;
+ fill_color = clip_save.dcolor;
+ /* restore the fill_adjust if it was changed by begin_clip */
+ gs_gstate.fill_adjust.x = clip_save.fa_save.x;
+ gs_gstate.fill_adjust.y = clip_save.fa_save.y;
in_clip = false;
break;
case cmd_opv_set_color_space:
cbuf.ptr = cbp;
- code = read_set_color_space(&cbuf, &gs_gstate,
- &pcs, cdev, mem);
+ code = read_set_color_space(&cbuf, &gs_gstate, cdev, mem);
+ pcs = gs_gstate.color[0].color_space;
cbp = cbuf.ptr;
if (code < 0) {
if (code == gs_error_rangecheck)
@@ -1343,7 +1362,7 @@ set_phase: /*
gs_fixed_rect rect_hl;
cbp = cmd_read_rect(op & 0xf0, &state.rect, cbp);
- if (dev_color.type != gx_dc_type_devn) {
+ if (fill_color.type != gx_dc_type_devn) {
if_debug0m('L', mem, "hl rect fill without devn color\n");
code = gs_note_error(gs_error_typecheck);
goto out;
@@ -1357,7 +1376,7 @@ set_phase: /*
rect_hl.q.y = int2fixed(state.rect.height) + rect_hl.p.y;
code = dev_proc(tdev, fill_rectangle_hl_color) (tdev,
&rect_hl, NULL,
- &dev_color, NULL);
+ &fill_color, NULL);
}
continue;
case cmd_opv_begin_image_rect:
@@ -1396,10 +1415,11 @@ ibegin: if_debug0m('L', mem, "\n");
{
/* Processing an image operation */
dev_proc(tdev, set_graphics_type_tag)(tdev, GS_IMAGE_TAG);/* FIXME: what about text bitmaps? */
+ image.i4.override_in_smask = 0;
code = (*dev_proc(tdev, begin_typed_image))
(tdev, &gs_gstate, NULL,
(const gs_image_common_t *)&image,
- &image_rect, &dev_color, pcpath, mem,
+ &image_rect, &fill_color, pcpath, mem,
&image_info);
}
if (code < 0)
@@ -1784,14 +1804,17 @@ idata: data_size = 0;
&(state.tile_color_devn[1]),
tile_phase.x, tile_phase.y);
break;
+ case cmd_opv_ext_put_fill_dcolor:
+ pdcolor = &fill_color;
+ goto load_dcolor;
+ case cmd_opv_ext_put_stroke_dcolor:
+ pdcolor = &stroke_color;
+ goto load_dcolor;
case cmd_opv_ext_put_tile_devn_color0:
pdcolor = &set_dev_colors[0];
goto load_dcolor;
case cmd_opv_ext_put_tile_devn_color1:
pdcolor = &set_dev_colors[1];
- goto load_dcolor;
- case cmd_opv_ext_put_drawing_color:
- pdcolor = &dev_color;
load_dcolor:{
uint color_size;
int left, offset, l;
@@ -1951,10 +1974,38 @@ idata: data_size = 0;
fill:
fill_params.adjust = gs_gstate.fill_adjust;
fill_params.flatness = gs_gstate.flatness;
- code = gx_fill_path_only(ppath, tdev,
- &gs_gstate,
- &fill_params,
- &dev_color, pcpath);
+ code = (*dev_proc(tdev, fill_path))(tdev, &gs_gstate, ppath,
+ &fill_params, &fill_color, pcpath);
+ break;
+ case cmd_opv_fill_stroke:
+ fill_params.rule = gx_rule_winding_number;
+ goto fill_stroke;
+ case cmd_opv_eofill_stroke:
+ fill_params.rule = gx_rule_even_odd;
+ fill_stroke:
+ fill_params.adjust = gs_gstate.fill_adjust;
+ fill_params.flatness = gs_gstate.flatness;
+ stroke_params.flatness = gs_gstate.flatness;
+ stroke_params.traditional = false;
+ code = (*dev_proc(tdev, fill_stroke_path))(tdev, &gs_gstate, ppath,
+ &fill_params, &fill_color,
+ &stroke_params, &stroke_color, pcpath);
+ /* if the color is a pattern, it may have had the "is_locked" flag set */
+ /* clear those now (see do_fill_stroke). */
+ if (gx_dc_is_pattern1_color(&stroke_color)) {
+ gs_id id = stroke_color.colors.pattern.p_tile->id;
+
+ code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
+ if (code < 0)
+ return code; /* unlock failed -- should not happen */
+ }
+ if (gx_dc_is_pattern1_color(&fill_color)) {
+ gs_id id = fill_color.colors.pattern.p_tile->id;
+
+ code = gx_pattern_cache_entry_set_lock(&gs_gstate, id, false);
+ if (code < 0)
+ return code; /* unlock failed -- should not happen */
+ }
break;
case cmd_opv_stroke:
stroke_params.flatness = gs_gstate.flatness;
@@ -1962,10 +2013,10 @@ idata: data_size = 0;
code = (*dev_proc(tdev, stroke_path))
(tdev, &gs_gstate,
ppath, &stroke_params,
- &dev_color, pcpath);
+ &stroke_color, pcpath);
break;
case cmd_opv_polyfill:
- code = clist_do_polyfill(tdev, ppath, &dev_color,
+ code = clist_do_polyfill(tdev, ppath, &fill_color,
gs_gstate.log_op);
break;
case cmd_opv_fill_trapezoid:
@@ -2108,7 +2159,7 @@ idata: data_size = 0;
code = gx_default_fill_trapezoid(ttdev, &left, &right,
max(ybot - y0f, fixed_half),
min(ytop - y0f, int2fixed(wh)), swap_axes,
- &dev_color, gs_gstate.log_op);
+ &fill_color, gs_gstate.log_op);
}
break;
default:
@@ -2154,7 +2205,7 @@ idata: data_size = 0;
* is open pending a proper fix. */
code = (dev_proc(tdev, fillpage) == NULL ? 0 :
(*dev_proc(tdev, fillpage))(tdev, &gs_gstate,
- &dev_color));
+ &fill_color));
break;
}
case cmd_op_fill_rect_short >> 4:
@@ -2200,7 +2251,7 @@ idata: data_size = 0;
case cmd_op_tile_rect >> 4:
if (state.rect.width == 0 && state.rect.height == 0 &&
state.rect.x == 0 && state.rect.y == 0) {
- code = (*dev_proc(tdev, fillpage))(tdev, &gs_gstate, &dev_color);
+ code = (*dev_proc(tdev, fillpage))(tdev, &gs_gstate, &fill_color);
break;
}
case cmd_op_tile_rect_short >> 4:
@@ -2227,7 +2278,7 @@ idata: data_size = 0;
(tdev, source, data_x, raster, gx_no_bitmap_id,
state.rect.x - x0, state.rect.y - y0,
state.rect.width - data_x, state.rect.height,
- &dev_color, 1, gs_gstate.log_op, pcpath);
+ &fill_color, 1, gs_gstate.log_op, pcpath);
} else {
if (plane_height == 0) {
code = (*dev_proc(tdev, copy_mono))
@@ -2255,7 +2306,7 @@ idata: data_size = 0;
(tdev, source, data_x, raster, gx_no_bitmap_id,
state.rect.x - x0, state.rect.y - y0,
state.rect.width - data_x, state.rect.height,
- &dev_color, depth);
+ &fill_color, depth);
} else {
code = (*dev_proc(tdev, copy_alpha))
(tdev, source, data_x, raster, gx_no_bitmap_id,
@@ -2296,7 +2347,6 @@ idata: data_size = 0;
if (code == 0)
code = code1;
}
- rc_decrement_cs(pcs, "clist_playback_band");
gx_cpath_free(&clip_path, "clist_render_band exit");
gx_path_free(&path, "clist_render_band exit");
if (gs_gstate.pattern_cache != NULL) {
@@ -2341,6 +2391,7 @@ idata: data_size = 0;
goto in;
if (pfs.dev != NULL)
term_patch_fill_state(&pfs);
+ gs_free_object(mem, pcs, "clist_playback_band(pcs)");
gs_free_object(mem, cbuf_storage, "clist_playback_band(cbuf_storage)");
gx_cpath_free(&clip_path, "clist_playback_band");
if (pcpath != &clip_path)
@@ -2681,16 +2732,17 @@ read_set_misc2(command_buf_t *pcb, gs_gstate *pgs, segment_notes *pnotes)
if (mask & op_bm_tk_known) {
cb = *cbp++;
pgs->blend_mode = cb >> 3;
- pgs->text_knockout = (cb & 4) != 0;
+ pgs->text_knockout = cb & 1;
/* the following usually have no effect; see gxclpath.c */
- pgs->overprint_mode = (cb >> 1) & 1;
- pgs->effective_overprint_mode = pgs->overprint_mode;
+ cb = *cbp++;
+ pgs->overprint_mode = (cb >> 2) & 1;
+ pgs->stroke_overprint = (cb >> 1) & 1;
pgs->overprint = cb & 1;
cb = *cbp++;
pgs->renderingintent = cb;
- if_debug5m('L', pgs->memory, " BM=%d TK=%d OPM=%d OP=%d RI=%d\n",
+ if_debug6m('L', pgs->memory, " BM=%d TK=%d OPM=%d OP=%d op=%d RI=%d\n",
pgs->blend_mode, pgs->text_knockout, pgs->overprint_mode,
- pgs->overprint, pgs->renderingintent);
+ pgs->stroke_overprint, pgs->overprint, pgs->renderingintent);
}
if (mask & segment_notes_known) {
cb = *cbp++;
@@ -2715,8 +2767,7 @@ read_set_misc2(command_buf_t *pcb, gs_gstate *pgs, segment_notes *pnotes)
static int
read_set_color_space(command_buf_t *pcb, gs_gstate *pgs,
- gs_color_space **ppcs, gx_device_clist_reader *cdev,
- gs_memory_t *mem)
+ gx_device_clist_reader *cdev, gs_memory_t *mem)
{
const byte *cbp = pcb->ptr;
byte b = *cbp++;
@@ -2831,8 +2882,9 @@ read_set_color_space(command_buf_t *pcb, gs_gstate *pgs,
}
/* Release reference to old color space before installing new one. */
- rc_decrement_only_cs(*ppcs, "read_set_color_space");
- *ppcs = pcs;
+ if (pgs->color[0].color_space != NULL)
+ rc_decrement_only_cs(pgs->color[0].color_space, "read_set_color_space");
+ pgs->color[0].color_space = pcs;
out:
pcb->ptr = cbp;
return code;
diff --git a/base/gxclrect.c b/base/gxclrect.c
index 1eaa3915..00f01ba2 100644
--- a/base/gxclrect.c
+++ b/base/gxclrect.c
@@ -314,13 +314,14 @@ clist_fillpage(gx_device * dev, gs_gstate *pgs, gx_drawing_color *pdcolor)
int code;
/* flush previous contents */
- if ((code = clist_close_writer_and_init_reader(cldev) < 0) ||
- (code = clist_finish_page(dev, true)) < 0)
+ if ((code = clist_close_writer_and_init_reader(cldev) < 0))
+ return code;;
+ if ((code = clist_finish_page(dev, true)) < 0)
return code;;
pcls = cdev->states; /* Use any. */
- code = cmd_put_drawing_color(cdev, pcls, pdcolor, NULL, devn_not_tile);
+ code = cmd_put_drawing_color(cdev, pcls, pdcolor, NULL, devn_not_tile_fill);
if (code >= 0)
code = cmd_write_page_rect_cmd(cdev, cmd_op_fill_rect);
return code;
@@ -413,7 +414,7 @@ clist_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect,
re.pcls->color_usage.or |= color_usage;
code = cmd_disable_lop(cdev, re.pcls);
code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re,
- devn_not_tile);
+ devn_not_tile_fill);
if (code >= 0) {
code = cmd_write_rect_hl_cmd(cdev, re.pcls, cmd_op_fill_rect_hl,
rx, re.y, rwidth, re.height, false);
@@ -491,7 +492,7 @@ clist_write_fill_trapezoid(gx_device * dev,
RECT_STEP_INIT(re);
if (pdcolor != NULL) {
code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re,
- devn_not_tile);
+ devn_not_tile_fill);
if (code == gs_error_unregistered)
return code;
if (code < 0) {
@@ -617,6 +618,10 @@ clist_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
ibox->q.y = cwdev->cropping_max;
return 0;
}
+ if (dev_spec_op == gxdso_overprint_active) {
+ gx_device_clist_writer* cwdev = &((gx_device_clist*)pdev)->writer;
+ return cwdev->op_fill_active || cwdev->op_stroke_active;
+ }
/* forward to the appropriate super class */
if (cdev->is_printer)
return gdev_prn_forwarding_dev_spec_op(pdev, dev_spec_op, data, size);
@@ -1215,7 +1220,7 @@ clist_copy_alpha_hl_color(gx_device * dev, const byte * data, int data_x,
re.pcls->color_is_alpha = 1;
}
/* Set the color */
- code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile);
+ code = cmd_put_drawing_color(cdev, re.pcls, pdcolor, &re, devn_not_tile_fill);
copy:{
gx_cmd_rect rect;
int rsize;
diff --git a/base/gxclthrd.c b/base/gxclthrd.c
index 833f9a5e..6792673c 100644
--- a/base/gxclthrd.c
+++ b/base/gxclthrd.c
@@ -102,7 +102,47 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
ndev->pad = dev->pad;
ndev->log2_align_mod = dev->log2_align_mod;
ndev->is_planar = dev->is_planar;
- if (gscms_is_threadsafe()) {
+ ndev->icc_struct = NULL;
+
+ /* If the device ICC profile (or proof) is OI_PROFILE, then that was not handled
+ * by put/get params, and we cannot share the profiles between the 'parent' output device
+ * and the devices created for each thread. Thus we also cannot share the icc_struct.
+ * In this case we need to create a new icc_struct and clone the profiles. The clone
+ * operation also initializes some of the required data
+ * We need to do this *before* the gs_getdeviceparams/gs_putdeviceparams so gs_putdeviceparams
+ * will spot the same profile being used, and treat it as a no-op. Otherwise it will try to find
+ * a profile with the 'special' name "OI_PROFILE" and throw an error.
+ */
+ if (!gscms_is_threadsafe() || (dev->icc_struct != NULL &&
+ ((dev->icc_struct->device_profile[0] != NULL &&
+ strncmp(dev->icc_struct->device_profile[0]->name, OI_PROFILE, strlen(OI_PROFILE)) == 0)
+ || (dev->icc_struct->proof_profile != NULL &&
+ strncmp(dev->icc_struct->proof_profile->name, OI_PROFILE, strlen(OI_PROFILE)) == 0)))) {
+ ndev->icc_struct = gsicc_new_device_profile_array(ndev->memory);
+ if (!ndev->icc_struct) {
+ emprintf1(ndev->memory,
+ "Error setting up device profile array, code=%d. Rendering threads not started.\n",
+ code);
+ goto out_cleanup;
+ }
+ if ((code = gsicc_clone_profile(dev->icc_struct->device_profile[0],
+ &(ndev->icc_struct->device_profile[0]), ndev->memory)) < 0) {
+ emprintf1(dev->memory,
+ "Error setting up device profile, code=%d. Rendering threads not started.\n",
+ code);
+ goto out_cleanup;
+ }
+ if (dev->icc_struct->proof_profile &&
+ (code = gsicc_clone_profile(dev->icc_struct->proof_profile,
+ &ndev->icc_struct->proof_profile, ndev->memory)) < 0) {
+ emprintf1(dev->memory,
+ "Error setting up proof profile, code=%d. Rendering threads not started.\n",
+ code);
+ goto out_cleanup;
+
+ }
+ }
+ else {
/* safe to share the icc_struct among threads */
ndev->icc_struct = dev->icc_struct; /* Set before put params */
rc_increment(ndev->icc_struct);
@@ -120,29 +160,6 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
goto out_cleanup;
gs_c_param_list_release(&paramlist);
- /* If the device ICC profile (or proof) is OI_PROFILE, then that was not handled
- * by put/get params. In this case we need to clone the profiles. The clone
- * operation also initializes some of the required data */
- if (dev->icc_struct != NULL && dev->icc_struct->device_profile[0] != NULL &&
- strncmp(dev->icc_struct->device_profile[0]->name, OI_PROFILE, strlen(OI_PROFILE)) == 0) {
- if ((code = gsicc_clone_profile(dev->icc_struct->device_profile[0],
- &(ndev->icc_struct->device_profile[0]), ndev->memory)) < 0) {
- emprintf1(dev->memory,
- "Error setting up device profile, code=%d. Rendering threads not started.\n",
- code);
- goto out_cleanup;
- }
- }
- if (dev->icc_struct != NULL && dev->icc_struct->proof_profile != NULL &&
- strncmp(dev->icc_struct->proof_profile->name, OI_PROFILE, strlen(OI_PROFILE)) == 0) {
- if ((code = gsicc_clone_profile(dev->icc_struct->proof_profile,
- &ndev->icc_struct->proof_profile, ndev->memory)) < 0) {
- emprintf1(dev->memory,
- "Error setting up proof profile, code=%d. Rendering threads not started.\n",
- code);
- goto out_cleanup;
- }
- }
/* In the case of a separation device, we need to make sure we get the
devn params copied over */
pclist_devn_params = dev_proc(dev, ret_devn_params)(dev);
@@ -219,7 +236,7 @@ setup_device_and_mem_for_thread(gs_memory_t *chunk_base_mem, gx_device *dev, boo
/* The threads are maintained until clist_finish_page. At which
point, the threads are torn down, the master clist reader device
is changed to writer, and the icc_table and the icc_cache_cl freed */
- if (gscms_is_threadsafe()) {
+ if (dev->icc_struct == ndev->icc_struct) {
/* safe to share the link cache */
ncdev->icc_cache_cl = cdev->icc_cache_cl;
rc_increment(cdev->icc_cache_cl); /* FIXME: needs to be incdemented safely */
@@ -416,7 +433,7 @@ clist_setup_render_threads(gx_device *dev, int y, gx_process_page_options_t *opt
if ((code = gdev_create_buf_device(cdev->buf_procs.create_buf_device,
&(thread->bdev), ndev,
band*crdev->page_band_height, NULL,
- thread->memory, &(crdev->color_usage_array[0])) < 0))
+ thread->memory, &(crdev->color_usage_array[0]))) < 0)
break;
if ((thread->sema_this = gx_semaphore_label(gx_semaphore_alloc(thread->memory), "Band")) == NULL ||
(thread->sema_group = gx_semaphore_label(gx_semaphore_alloc(thread->memory), "Group")) == NULL) {
diff --git a/base/gxcmap.c b/base/gxcmap.c
index 417a2ea0..68d3a0bf 100644
--- a/base/gxcmap.c
+++ b/base/gxcmap.c
@@ -570,9 +570,6 @@ gx_remap_color(gs_gstate * pgs)
pcs, gs_currentdevicecolor_inline(pgs),
(gs_gstate *) pgs, pgs->device,
gs_color_select_texture);
- /* if overprint mode is in effect, update the overprint information */
- if (code >= 0 && pgs->overprint)
- code = gs_do_set_overprint(pgs);
return code;
}
diff --git a/base/gxcpath.c b/base/gxcpath.c
index ecdfe095..4c3d3478 100644
--- a/base/gxcpath.c
+++ b/base/gxcpath.c
@@ -325,8 +325,10 @@ gx_cpath_assign_preserve(gx_clip_path * pcpto, gx_clip_path * pcpfrom)
int code = cpath_alloc_list(&tolist, tolist->rc.memory,
"gx_cpath_assign");
- if (code < 0)
+ if (code < 0) {
+ rc_decrement(pcpto->path.segments, "gx_path_assign");
return code;
+ }
rc_decrement(pcpto->rect_list, "gx_cpath_assign");
} else {
/* Use pcpto's list object. */
@@ -354,7 +356,7 @@ gx_cpath_assign_free(gx_clip_path * pcpto, gx_clip_path * pcpfrom)
int code = gx_cpath_assign_preserve(pcpto, pcpfrom);
if (code < 0)
- return 0;
+ return code;
gx_cpath_free(pcpfrom, "gx_cpath_assign_free");
return 0;
}
diff --git a/base/gxdevcli.h b/base/gxdevcli.h
index 5524ff81..30d0eda0 100644
--- a/base/gxdevcli.h
+++ b/base/gxdevcli.h
@@ -1035,6 +1035,19 @@ typedef enum FILTER_FLAGS {
#define dev_proc_stroke_path(proc)\
dev_t_proc_stroke_path(proc, gx_device)
+ /* Added in release 9.22 */
+
+#define dev_t_proc_fill_stroke_path(proc, dev_t)\
+ int proc(dev_t *dev,\
+ const gs_gstate *pgs, gx_path *ppath,\
+ const gx_fill_params *fill_params,\
+ const gx_drawing_color *pdcolor_fill,\
+ const gx_stroke_params *stroke_params,\
+ const gx_drawing_color *pdcolor_stroke,\
+ const gx_clip_path *pcpath)
+#define dev_proc_fill_stroke_path(proc)\
+ dev_t_proc_fill_stroke_path(proc, gx_device)
+
/* Added in release 3.60 */
#define dev_t_proc_fill_mask(proc, dev_t)\
@@ -1642,6 +1655,7 @@ typedef struct {
dev_t_proc_copy_alpha_hl_color((*copy_alpha_hl_color), dev_t);\
dev_t_proc_process_page((*process_page), dev_t);\
dev_t_proc_transform_pixel_region((*transform_pixel_region), dev_t);\
+ dev_t_proc_fill_stroke_path((*fill_stroke_path), dev_t);\
}
/*
diff --git a/base/gxdevice.h b/base/gxdevice.h
index be6fd8a9..c7fd7454 100644
--- a/base/gxdevice.h
+++ b/base/gxdevice.h
@@ -52,8 +52,8 @@
#define DEFAULT_WIDTH_10THS_US_LETTER 85
#define DEFAULT_HEIGHT_10THS_US_LETTER 110
/* A4 paper (210mm x 297mm), we use 595pt x 842pt. */
-#define DEFAULT_WIDTH_10THS_A4 82.6389
-#define DEFAULT_HEIGHT_10THS_A4 116.9444
+#define DEFAULT_WIDTH_10THS_A4 82.6389f
+#define DEFAULT_HEIGHT_10THS_A4 116.9444f
/* Choose a default. A4 may be set in the makefile. */
#ifdef A4
# define DEFAULT_WIDTH_10THS DEFAULT_WIDTH_10THS_A4
@@ -314,6 +314,7 @@ dev_proc_strip_tile_rect_devn(gx_default_strip_tile_rect_devn);
dev_proc_copy_alpha_hl_color(gx_default_copy_alpha_hl_color);
dev_proc_process_page(gx_default_process_page);
dev_proc_transform_pixel_region(gx_default_transform_pixel_region);
+dev_proc_fill_stroke_path(gx_default_fill_stroke_path);
dev_proc_begin_transparency_group(gx_default_begin_transparency_group);
dev_proc_end_transparency_group(gx_default_end_transparency_group);
dev_proc_begin_transparency_mask(gx_default_begin_transparency_mask);
@@ -418,6 +419,7 @@ dev_proc_strip_copy_rop2(gx_forward_strip_copy_rop2);
dev_proc_strip_tile_rect_devn(gx_forward_strip_tile_rect_devn);
dev_proc_copy_alpha_hl_color(gx_forward_copy_alpha_hl_color);
dev_proc_transform_pixel_region(gx_forward_transform_pixel_region);
+dev_proc_fill_stroke_path(gx_forward_fill_stroke_path);
/* ---------------- Implementation utilities ---------------- */
int gx_default_get_param(gx_device *dev, char *Param, void *list);
diff --git a/base/gxdevsop.h b/base/gxdevsop.h
index 2d4d1a97..27ea0cb6 100644
--- a/base/gxdevsop.h
+++ b/base/gxdevsop.h
@@ -352,6 +352,20 @@ enum {
* the PDF font may not match the widths of the glyphs in the font.
*/
gxdso_event_info,
+ /* gxdso_overprint_active:
+ * data = NULL
+ * size = 0
+ * Returns 1 if the overprint device is active,
+ * 0 otherwise.
+ */
+ gxdso_overprint_active,
+ /* gxdso_in_smask:
+ * data = NULL
+ * size = 0
+ * Returns 1 if we are within an smask (either construction or usage),
+ * 0 otherwise.
+ */
+ gxdso_in_smask,
/* Debug only dsos follow here */
#ifdef DEBUG
diff --git a/base/gxdownscale.c b/base/gxdownscale.c
index e2e83eae..8721d1db 100644
--- a/base/gxdownscale.c
+++ b/base/gxdownscale.c
@@ -19,7 +19,12 @@
#include "string_.h"
#include "gdevprn.h"
#include "assert_.h"
+
+#ifdef WITH_CAL
+#include "cal_ets.h"
+#else
#include "ets.h"
+#endif
/* Nasty inline declaration, as gxht_thresh.h requires penum */
void gx_ht_threshold_row_bit_sub(byte *contone, byte *threshold_strip,
@@ -1799,6 +1804,57 @@ static int check_trapping(gs_memory_t *memory, int trap_w, int trap_h,
return 0;
}
+static void
+find_aspect_ratio(float *res, int *a, int *b)
+{
+ float xres = res[0];
+ float yres = res[1];
+ float f;
+
+ if (xres == yres) {
+ *a = *b = 1;
+ return;
+ }
+ else if (xres > yres)
+ {
+ xres /= yres;
+ f = xres - (int)xres;
+ if (f >= 0.2 && f < 0.3)
+ xres *= 4, yres = 4;
+ else if (f >= 0.3 && f < 0.4)
+ xres *= 3, yres = 3;
+ else if (f >= 0.4 && f < 0.6)
+ xres *= 2, yres = 2;
+ else if (f >= 0.6 && f < 0.7)
+ xres *= 3, yres = 3;
+ else if (f >= 0.7 && f < 0.8)
+ xres *= 4, yres = 4;
+ else
+ yres = 1;
+ *a = (int)(xres + 0.5);
+ *b = (int)yres;
+ }
+ else
+ {
+ yres /= xres;
+ f = yres - (int)yres;
+ if (f >= 0.2 && f < 0.3)
+ yres *= 4, xres = 4;
+ else if (f >= 0.3 && f < 0.4)
+ yres *= 3, xres = 3;
+ else if (f >= 0.4 && f < 0.6)
+ yres *= 2, xres = 2;
+ else if (f >= 0.6 && f < 0.7)
+ yres *= 3, xres = 3;
+ else if (f >= 0.7 && f < 0.8)
+ yres *= 4, xres = 4;
+ else
+ xres = 1;
+ *a = (int)xres;
+ *b = (int)(yres + 0.5);
+ }
+}
+
static int init_ets(gx_downscaler_t *ds, int num_planes, gx_downscale_core *downscale_core)
{
ETS_Params params = { 0 };
@@ -1831,13 +1887,15 @@ static int init_ets(gx_downscaler_t *ds, int num_planes, gx_downscale_core *down
for (i = 0; i < num_planes; i++)
rs_luts[i] = rs_lut;
+#ifdef WITH_CAL
+ params.context = ds->dev->memory->gs_lib_ctx->core->cal_ctx;
+#endif
params.width = ds->width;
params.n_planes = num_planes;
params.levels = 2;
params.luts = luts;
params.distscale = 0;
- params.aspect_x = 1;
- params.aspect_y = 1;
+ find_aspect_ratio(ds->dev->HWResolution, &params.aspect_x, &params.aspect_y);
params.strengths = strengths;
params.rand_scale = 0;
params.c1_scale = c1_scale;
diff --git a/base/gxdtfill.h b/base/gxdtfill.h
index f5eece33..5c1d3da6 100644
--- a/base/gxdtfill.h
+++ b/base/gxdtfill.h
@@ -182,7 +182,11 @@ GX_FILL_TRAPEZOID (gx_device * dev, const EDGE_TYPE * left,
if_debug2m('z', dev->memory, "[z]y=[%d,%d]\n", iy, iy1);
l.h = left->end.y - left->start.y;
+ if (l.h == 0)
+ return 0;
r.h = right->end.y - right->start.y;
+ if (r.h == 0)
+ return 0;
l.x = x0l + (fixed_half - fixed_epsilon);
r.x = x0r + (fixed_half - fixed_epsilon);
#if !LINEAR_COLOR
diff --git a/base/gxfapiu.h b/base/gxfapiu.h
index 5903909b..10ea80c0 100644
--- a/base/gxfapiu.h
+++ b/base/gxfapiu.h
@@ -20,6 +20,7 @@
#define gxfapiu_INCLUDED
#include "gp.h"
+#include "ufstport.h"
/* Set UFST callbacks. */
/* Warning : the language switch project doesn't guarantee
diff --git a/base/gxfill.c b/base/gxfill.c
index ab86769e..68bcdafc 100644
--- a/base/gxfill.c
+++ b/base/gxfill.c
@@ -469,7 +469,7 @@ gx_general_fill_path(gx_device * pdev, const gs_gstate * pgs,
fo.fixed_flat,
params->rule,
pdevc,
- (!fill_by_trapezoids && fo.fill_direct) ? -1 : (int)pgs->log_op);
+ (!fill_by_trapezoids && fo.fill_direct) ? -1 : (int)pgs->log_op);
if (ppath == &ffpath)
gx_path_free(ppath, "gx_general_fill_path");
return code;
@@ -663,6 +663,30 @@ gx_default_fill_path(gx_device * pdev, const gs_gstate * pgs,
return code;
}
+/*
+ * Fill/Stroke a path. This is the default implementation of the driver
+ * fill_path procedure.
+ */
+int
+gx_default_fill_stroke_path(gx_device * pdev, const gs_gstate * pgs,
+ gx_path * ppath,
+ const gx_fill_params * params_fill,
+ const gx_device_color * pdevc_fill,
+ const gx_stroke_params * params_stroke,
+ const gx_device_color * pdevc_stroke,
+ const gx_clip_path * pcpath)
+{
+ int code = dev_proc(pdev, fill_path)(pdev, pgs, ppath, params_fill, pdevc_fill, pcpath);
+
+ if (code < 0)
+ return code;
+ /* Swap colors to make sure the pgs colorspace is correct for stroke */
+ gs_swapcolors_quick(pgs);
+ code = dev_proc(pdev, stroke_path)(pdev, pgs, ppath, params_stroke, pdevc_stroke, pcpath);
+ gs_swapcolors_quick(pgs);
+ return code;
+}
+
/* Free the line list. */
static void
free_line_list(line_list *ll)
diff --git a/base/gxgstate.h b/base/gxgstate.h
index 4f243165..e6dd92f7 100644
--- a/base/gxgstate.h
+++ b/base/gxgstate.h
@@ -127,6 +127,7 @@ typedef struct gs_gstate_color_s {
gs_color_space *color_space; /* after substitution */
gs_client_color *ccolor;
gx_device_color *dev_color;
+ bool effective_opm;
} gs_gstate_color;
/*
@@ -201,6 +202,7 @@ typedef struct gs_xstate_trans_flags {
#define gs_currentcolor_inline(pgs) ((pgs)->color[0].ccolor)
#define gs_currentcolorspace_inline(pgs) ((pgs)->color[0].color_space)
#define gs_altdevicecolor_inline(pgs) ((pgs)->color[1].dev_color)
+#define gs_currentcolor_eopm(pgs) ((pgs)->color[0].effective_opm)
#define char_tm_only(pgs) *(gs_matrix *)&(pgs)->char_tm
@@ -249,7 +251,6 @@ struct gs_gstate_s {
gx_device *trans_device; /* trans device has all mappings to group color space */
bool overprint;
int overprint_mode;
- int effective_overprint_mode;
bool stroke_overprint;
float flatness;
gs_fixed_point fill_adjust; /* A path expansion for fill; -1 = dropout prevention*/
@@ -303,7 +304,7 @@ struct gs_gstate_s {
gs_matrix textmatrix;
/* Current colors (non-stroking, and stroking) */
gs_gstate_color color[2];
-
+ int is_fill_color;
/* Font: */
gs_font *font;
gs_font *root_font;
@@ -325,7 +326,7 @@ struct gs_gstate_s {
{ (float)(scale), 0.0, 0.0, (float)(-(scale)), 0.0, 0.0 },\
false, {0, 0}, {0, 0}, false, \
lop_default, gx_max_color_value, BLEND_MODE_Compatible,\
-{ 1.0 }, { 1.0 }, {0, 0}, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 0, 0, 0/*false*/, 1.0, \
+{ 1.0 }, { 1.0 }, {0, 0}, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 0, 0/*false*/, 1.0, \
{ fixed_half, fixed_half }, 0/*false*/, 1/*true*/, 0/*false*/, 1.0,\
1, 1/* bpt true */, 0, 0, 0, INIT_CUSTOM_COLOR_PTR /* 'Custom color' callback pointer */ \
gx_default_get_cmap_procs
@@ -355,7 +356,6 @@ struct gs_gstate_s {
s->trans_device = __state_init.trans_device; \
s->overprint = __state_init.overprint; \
s->overprint_mode = __state_init.overprint_mode; \
- s->effective_overprint_mode = __state_init.effective_overprint_mode; \
s->stroke_overprint = __state_init.stroke_overprint; \
s->flatness = __state_init.flatness; \
s->fill_adjust = __state_init.fill_adjust; \
@@ -370,6 +370,7 @@ struct gs_gstate_s {
s->icc_profile_cache = __state_init.icc_profile_cache; \
s->get_cmap_procs = __state_init.get_cmap_procs; \
s->show_gstate = NULL; \
+ s->is_fill_color = 1; \
} while (0)
struct_proc_finalize(gs_gstate_finalize);
@@ -437,8 +438,15 @@ int gs_currentscreenphase_pgs(const gs_gstate *, gs_int_point *, gs_color_select
(pgs)->current_point.x = xx;\
(pgs)->current_point.y = yy;
-int gs_swapcolors(gs_gstate *);
-void gs_swapcolors_quick(gs_gstate *);
+/* The const is a lie. The swapcolors stuff is a bit of a hack; a late
+ * addition to the graphics library, which has to be used in many places
+ * where the device interface only has a const gs_gstate available to it
+ * rather than a non-const one. In all these cases, we flip the colors
+ * during a call to a function, then swap it back again before we leave,
+ * so the net effect of the call remains that the gstate is not changed.
+ * Rather than breaking const at every single callsite, we move the const
+ * breaking into the function itself. */
+void gs_swapcolors_quick(const gs_gstate *);
/* Set the graphics_type_tag iff the requested tag bit is not set in the dev_color and */
/* unset the dev_color so that gx_set_dev_color will remap (encode) with the new tag. */
diff --git a/base/gxhintn.c b/base/gxhintn.c
index 1e3e429f..dc28c00d 100644
--- a/base/gxhintn.c
+++ b/base/gxhintn.c
@@ -467,8 +467,9 @@ static void t1_hinter__compute_rat_transform_coef(t1_hinter * self)
}
static inline void t1_hinter__adjust_matrix_precision(t1_hinter * self, fixed xx, fixed yy)
-{ fixed x = any_abs(xx), y = any_abs(yy);
- fixed c = (x > y ? x : y);
+{
+ ufixed x = any_abs(xx), y = any_abs(yy);
+ ufixed c = (x > y ? x : y);
while (c >= self->max_import_coord) {
/* Reduce the precision of ctmf to allow products to fit into 32 bits : */
diff --git a/base/gxicolor.c b/base/gxicolor.c
index 6425f525..3bee9814 100644
--- a/base/gxicolor.c
+++ b/base/gxicolor.c
@@ -62,8 +62,18 @@ static irender_proc(image_render_color_icc_tpr);
#ifndef WITH_CAL
static irender_proc(image_render_color_thresh);
#else
+
+#include "cal.h"
+
static irender_proc(image_render_color_ht_cal);
+static int
+image_render_color_ht_cal_skip_line(gx_image_enum *penum,
+ gx_device *dev)
+{
+ return !cal_halftone_next_line_required(penum->cal_ht);
+}
+
static void
color_halftone_callback(cal_halftone_data_t *ht, void *arg)
{
@@ -85,11 +95,6 @@ color_halftone_callback(cal_halftone_data_t *ht, void *arg)
static cal_halftone*
color_halftone_init(gx_image_enum *penum)
{
- void *callback;
- void *args;
- int ox;
- int dd_curr_y;
- int dev_width;
cal_halftone *cal_ht = NULL;
gx_dda_fixed dda_ht;
cal_context *ctx = penum->memory->gs_lib_ctx->core->cal_ctx;
@@ -108,9 +113,6 @@ color_halftone_init(gx_image_enum *penum)
dda_ht = penum->dda.pixel0.x;
if (penum->dxx > 0)
dda_translate(dda_ht, -fixed_epsilon);
- ox = dda_current(dda_ht);
- dd_curr_y = dda_current(penum->dda.pixel0.y);
- dev_width = gxht_dda_length(&dda_ht, penum->rect.w);
matrix.xx = penum->matrix.xx;
matrix.xy = penum->matrix.xy;
matrix.yx = penum->matrix.yx;
@@ -164,7 +166,6 @@ static int image_skip_color_icc_tpr(gx_image_enum *penum, gx_device *dev);
int
gs_image_class_4_color(gx_image_enum * penum, irender_proc_t *render_fn)
{
- bool std_cmap_procs;
int code = 0;
#if USE_FAST_HT_CODE
bool use_fast_thresh = true;
@@ -213,12 +214,10 @@ gs_image_class_4_color(gx_image_enum * penum, irender_proc_t *render_fn)
then we will need to use those and go through pixel by pixel instead
of blasting through buffers. This is true for example with many of
the color spaces for CUPs */
- std_cmap_procs = gx_device_uses_std_cmap_procs(penum->dev, penum->pgs);
if ( (gs_color_space_get_index(penum->pcs) == gs_color_space_index_DeviceN &&
- penum->pcs->cmm_icc_profile_data == NULL) || penum->use_mask_color ||
- !std_cmap_procs) {
+ penum->pcs->cmm_icc_profile_data == NULL) || penum->use_mask_color) {
*render_fn = &image_render_color_DeviceN;
- return code;
+ return 0;
}
/* Set up the link now */
@@ -271,6 +270,10 @@ gs_image_class_4_color(gx_image_enum * penum, irender_proc_t *render_fn)
penum->use_cie_range = (get_cie_range(penum->pcs) != NULL);
}
}
+ if (!gx_device_uses_std_cmap_procs(penum->dev, penum->pgs)) {
+ *render_fn = &image_render_color_DeviceN;
+ return code;
+ }
if (gx_device_must_halftone(penum->dev) && use_fast_thresh &&
(penum->posture == image_portrait || penum->posture == image_landscape)
&& penum->image_parent_type == gs_image_type1) {
@@ -292,7 +295,8 @@ gs_image_class_4_color(gx_image_enum * penum, irender_proc_t *render_fn)
penum->cal_ht = color_halftone_init(penum);
if (penum->cal_ht != NULL)
{
- penum->skip_render = image_render_color_ht_cal;
+ penum->skip_next_line = image_render_color_ht_cal_skip_line;
+ *render_fn = &image_render_color_ht_cal;
return code;
}
#else
@@ -441,14 +445,14 @@ decode_row(const gx_image_enum *penum, const byte *psrc, int spp, byte *pdes,
static int
image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
gx_device *dev, int *spp_cm_out, byte **psrc_cm,
- byte **psrc_cm_start, byte **bufend, bool planar_out)
+ byte **psrc_cm_start, byte **bufend, int *pspan, bool planar_out)
{
const gx_image_enum *const penum = penum_orig; /* const within proc */
const gs_gstate *pgs = penum->pgs;
bool need_decode = penum->icc_setup.need_decode;
gsicc_bufferdesc_t input_buff_desc;
gsicc_bufferdesc_t output_buff_desc;
- int num_pixels, spp_cm;
+ int spp_cm;
int spp = penum->spp;
bool force_planar = false;
int num_des_comps;
@@ -458,7 +462,6 @@ image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
const byte *planar_src;
byte *planar_des;
int j, k;
- int width;
code = dev_proc(dev, get_profile)(dev, &dev_profile);
if (code < 0) return code;
@@ -466,6 +469,8 @@ image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
if (penum->icc_link == NULL) {
return gs_rethrow(-1, "ICC Link not created during image render color");
}
+ if (pspan)
+ *pspan = w;
/* If the link is the identity, then we don't need to do any color
conversions except for potentially a decode. Planar out is a special
case. For now we let the CMM do the reorg into planar. We will want
@@ -481,14 +486,18 @@ image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
*bufend = *psrc_cm + w;
*psrc_cm_start = NULL;
} else {
+ int width = w/spp;
+ int span = (width+31)&~31;
spp_cm = num_des_comps;
- /* Put the buffer on a 32 byte memory alignment for SSE/AVX. Also
- extra space for 32 byte overrun */
- *psrc_cm_start = gs_alloc_bytes(pgs->memory, w * spp_cm/spp + 64,
- "image_color_icc_prep");
+ if (pspan)
+ *pspan = span;
+ /* Put the buffer on a 32 byte memory alignment for SSE/AVX for every
+ * line. Also extra space for 32 byte overrun. */
+ *psrc_cm_start = gs_alloc_bytes(pgs->memory, span * spp_cm + 64,
+ "image_color_icc_prep");
*psrc_cm = *psrc_cm_start + ((32 - (intptr_t)(*psrc_cm_start)) & 31);
- *bufend = *psrc_cm + w * spp_cm/spp;
+ *bufend = *psrc_cm + span * spp_cm;
if (penum->icc_link->is_identity) {
if (!force_planar) {
/* decode only. no CM. This is slow but does not happen that often */
@@ -514,11 +523,10 @@ image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
planar_src = psrc;
}
/* Now to planar */
- width = w/spp;
planar_des = *psrc_cm;
for (k = 0; k < width; k++) {
for (j = 0; j < spp; j++) {
- *(planar_des + j * width) = *planar_src++;
+ *(planar_des + j * span) = *planar_src++;
}
planar_des++;
}
@@ -530,18 +538,17 @@ image_color_icc_prep(gx_image_enum *penum_orig, const byte *psrc, uint w,
}
} else {
/* Set up the buffer descriptors. planar out always ends up here */
- num_pixels = w/spp;
gsicc_init_buffer(&input_buff_desc, spp, 1,
false, false, false, 0, w,
- 1, num_pixels);
+ 1, width);
if (!force_planar) {
gsicc_init_buffer(&output_buff_desc, spp_cm, 1,
- false, false, false, 0, num_pixels * spp_cm,
- 1, num_pixels);
+ false, false, false, 0, width * spp_cm,
+ 1, width);
} else {
gsicc_init_buffer(&output_buff_desc, spp_cm, 1,
- false, false, true, w/spp, w/spp,
- 1, num_pixels);
+ false, false, true, span, span,
+ 1, width);
}
/* For now, just blast it all through the link. If we had a significant reduction
we will want to repack the data first and then do this. That will be
@@ -590,18 +597,23 @@ image_render_color_ht_cal(gx_image_enum *penum, const byte *buffer, int data_x,
byte *psrc_cm = NULL, *psrc_cm_start = NULL;
byte *bufend = NULL;
byte *input[GX_DEVICE_COLOR_MAX_COMPONENTS]; /* to ensure 128 bit boundary */
+ int i;
+ int planestride;
- if (h == 0 || penum->line_size == 0) /* line_size == 0, nothing to do */
+ if (h == 0)
return 0;
/* Get the buffer into the device color space */
code = image_color_icc_prep(penum, psrc, w, dev, &spp_cm, &psrc_cm,
- &psrc_cm_start, &bufend, true);
+ &psrc_cm_start, &bufend, &planestride, true);
if (code < 0)
return code;
+ for (i = 0; i < spp_cm; i++)
+ input[i] = psrc_cm + w*i;
+
code = cal_halftone_process_planar(penum->cal_ht, penum->memory->non_gc_memory,
- input, halftone_callback, dev);
+ (const byte * const *)input, color_halftone_callback, dev);
/* Free cm buffer, if it was used */
if (psrc_cm_start != NULL) {
@@ -646,7 +658,7 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
if (h != 0 && penum->line_size != 0) { /* line_size == 0, nothing to do */
/* Get the buffer into the device color space */
code = image_color_icc_prep(penum, psrc, w, dev, &spp_cm, &psrc_cm,
- &psrc_cm_start, &bufend, true);
+ &psrc_cm_start, &bufend, &psrc_planestride, true);
if (code < 0)
return code;
} else {
@@ -786,16 +798,16 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
*(devc_contone_gray+1) = *psrc_temp;
}
} else {
- /* Mono case, forward */
- psrc_temp = psrc_cm;
- for (k=0; k<src_size; k++) {
- dda_next(dda_ht);
- xn = fixed2int_var_rounded(dda_current(dda_ht));
- while (xr < xn) {
- *devc_contone_gray++ = *psrc_temp;
- xr++;
- } /* at loop exit xn will be >= xr */
- psrc_temp++;
+ /* Mono case, forward */
+ psrc_temp = psrc_cm;
+ for (k=0; k<src_size; k++) {
+ dda_next(dda_ht);
+ xn = fixed2int_var_rounded(dda_current(dda_ht));
+ while (xr < xn) {
+ *devc_contone_gray++ = *psrc_temp;
+ xr++;
+ } /* at loop exit xn will be >= xr */
+ psrc_temp++;
}
}
} else {
@@ -810,7 +822,7 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
xr--;
} /* at loop exit xn will be >= xr */
psrc_temp++;
- }
+ }
}
break;
/* Monochrome landscape */
@@ -953,10 +965,9 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
dda_next(dda_ht);
xn = fixed2int_var_rounded(dda_current(dda_ht));
while (xr > xn) {
- for (j = 0; j < spp_out; j++) {
+ for (j = 0; j < spp_out; j++)
*(devc_contone[j] + position) = (psrc_plane[j])[i];
- position -= LAND_BITS;
- }
+ position -= LAND_BITS;
xr--;
} /* at loop exit xn will be <= xr */
i++;
@@ -967,9 +978,8 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
and 2x scaling which we will run into in 300 and
600dpi devices and content */
/* Apply initial offset */
- for (k = 0; k < spp_out; k++) {
+ for (k = 0; k < spp_out; k++)
devc_contone[k] = devc_contone[k] + position;
- }
if (src_size == dest_height) {
for (k = 0; k < data_length; k++) {
/* Is it better to unwind this? We know it is 4 */
@@ -995,10 +1005,9 @@ image_render_color_thresh(gx_image_enum *penum_orig, const byte *buffer, int dat
dda_next(dda_ht);
xn = fixed2int_var_rounded(dda_current(dda_ht));
while (xr > xn) {
- for (j = 0; j < spp_out; j++) {
+ for (j = 0; j < spp_out; j++)
*(devc_contone[j] + position) = (psrc_plane[j])[i];
- position -= LAND_BITS;
- }
+ position -= LAND_BITS;
xr--;
} /* at loop exit xn will be <= xr */
i++;
@@ -1066,7 +1075,7 @@ image_render_color_icc_tpr(gx_image_enum *penum_orig, const byte *buffer, int da
if (h == 0)
return 0;
code = image_color_icc_prep(penum_orig, psrc, w, dev, &spp_cm, &psrc_cm,
- &psrc_cm_start, &bufend, false);
+ &psrc_cm_start, &bufend, NULL, false);
if (code < 0) return code;
psrc_cm_initial = psrc_cm;
gx_get_cmapper(&cmapper, pgs, dev, has_transfer, must_halftone, gs_color_select_source);
@@ -1203,8 +1212,12 @@ image_render_color_DeviceN(gx_image_enum *penum_orig, const byte *buffer, int da
dmputs(dev->memory, "\n");
}
#endif
- mcode = remap_color(&cc, pcs, pdevc_next, pgs, dev,
- gs_color_select_source);
+ if (lab_case || penum->icc_link == NULL || pcs->cmm_icc_profile_data == NULL)
+ mcode = remap_color(&cc, pcs, pdevc_next, pgs, dev, gs_color_select_source);
+ else
+ mcode = gx_remap_ICC_with_link(&cc, pcs, pdevc_next, pgs, dev,
+ gs_color_select_source, penum->icc_link);
+
mapped: if (mcode < 0)
goto fill;
if (sizeof(pdevc_next->colors.binary.color[0]) <= sizeof(ulong))
diff --git a/base/gxidata.c b/base/gxidata.c
index 3dc0d312..f29fca27 100644
--- a/base/gxidata.c
+++ b/base/gxidata.c
@@ -208,6 +208,7 @@ gx_image1_plane_data(gx_image_enum_common_t * info,
dmprintf1(dev->memory, "[b]image1 y=%d\n", y);
if (gs_debug_c('B')) {
int i, n = width_spp;
+ byte *buftemp = (buffer == NULL) ? penum->buffer : buffer;
if (penum->bps > 8)
n *= 2;
@@ -215,7 +216,7 @@ gx_image1_plane_data(gx_image_enum_common_t * info,
n = (n + 7) / 8;
dmlputs(dev->memory, "[B]row:");
for (i = 0; i < n; i++)
- dmprintf1(dev->memory, " %02x", buffer[i]);
+ dmprintf1(dev->memory, " %02x", buftemp[i]);
dmputs(dev->memory, "\n");
}
#endif
diff --git a/base/gximage.c b/base/gximage.c
index 01fe9852..9df48630 100644
--- a/base/gximage.c
+++ b/base/gximage.c
@@ -70,6 +70,7 @@ gs_pixel_image_t_init(gs_pixel_image_t * pim,
pim->format = gs_image_format_chunky;
pim->ColorSpace = color_space;
pim->CombineWithColor = false;
+ pim->override_in_smask = 0;
}
/* Initialize the common part of an image-processing enumerator. */
diff --git a/base/gximage3.c b/base/gximage3.c
index 06fd7cdc..37693578 100644
--- a/base/gximage3.c
+++ b/base/gximage3.c
@@ -27,6 +27,7 @@
#include "gxclipm.h"
#include "gximage3.h"
#include "gxgstate.h"
+#include "gxdevsop.h"
#include <limits.h> /* For INT_MAX etc */
/* Forward references */
@@ -404,6 +405,7 @@ gx_begin_image3_generic(gx_device * dev,
m_mat = *pmat;
m_mat.tx -= origin.x;
m_mat.ty -= origin.y;
+ i_mask.override_in_smask = (dev_proc(dev, dev_spec_op)(dev, gxdso_in_smask, NULL, 0)) > 0;
/*
* Note that pgs = NULL here, since we don't want to have to
* create another gs_gstate with default log_op, etc.
diff --git a/base/gximono.c b/base/gximono.c
index b46a3761..ee2c69b4 100644
--- a/base/gximono.c
+++ b/base/gximono.c
@@ -1002,7 +1002,7 @@ image_render_mono_ht_cal(gx_image_enum * penum, const byte * buffer, int data_x,
return 0;
return cal_halftone_process_planar(penum->cal_ht, penum->memory->non_gc_memory,
- &input, halftone_callback, dev);
+ (const byte * const *)&input, halftone_callback, dev);
}
#else
/*
diff --git a/base/gxipixel.c b/base/gxipixel.c
index 7534f81c..9aad6c8a 100644
--- a/base/gxipixel.c
+++ b/base/gxipixel.c
@@ -282,7 +282,8 @@ gx_image_enum_begin(gx_device * dev, const gs_gstate * pgs,
bool device_color = true;
gs_fixed_rect obox, cbox;
bool gridfitimages = 0;
- bool in_pattern_accumulator = 0;
+ bool in_pattern_accumulator;
+ bool in_smask;
int orthogonal;
int force_interpolation = 0;
@@ -332,9 +333,11 @@ gx_image_enum_begin(gx_device * dev, const gs_gstate * pgs,
/* If we are in a pattern accumulator, we choose to always grid fit
* orthogonal images. We do this by asking the device whether we
* should grid fit. This allows us to avoid nasty blank lines around
- * the edges of cells.
+ * the edges of cells. Similarly, for smasks.
*/
- gridfitimages = in_pattern_accumulator && orthogonal;
+ in_smask = (pim->override_in_smask ||
+ (dev_proc(dev, dev_spec_op)(dev, gxdso_in_smask, NULL, 0)) > 0);
+ gridfitimages = (in_smask || in_pattern_accumulator) && orthogonal;
if (pgs != NULL && pgs->show_gstate != NULL) {
/* If we're a graphics state, and we're in a text object, then we
@@ -970,7 +973,7 @@ gx_image_enum_begin(gx_device * dev, const gs_gstate * pgs,
code = gx_alloc_rop_texture_device(&rtdev, mem,
"image RasterOp");
if (code < 0)
- return code;
+ goto fail;
/* The 'target' must not be NULL for gx_make_rop_texture_device */
if (!penum->clip_dev && !dev)
return_error(gs_error_undefined);
@@ -1036,6 +1039,7 @@ gx_image_enum_begin(gx_device * dev, const gs_gstate * pgs,
fail:
gs_free_object(mem, buffer, "image buffer");
gs_free_object(mem, penum->clues, "gx_image_enum_begin");
+ gs_free_object(mem, penum->clip_dev, "image clipper");
gs_free_object(mem, penum, "gx_begin_image1");
return code;
}
diff --git a/base/gxiscale.c b/base/gxiscale.c
index 72e32572..3eec2f7d 100644
--- a/base/gxiscale.c
+++ b/base/gxiscale.c
@@ -1204,6 +1204,7 @@ image_render_interpolate(gx_image_enum * penum, const byte * buffer,
int scaled_x_prev = 0;
gx_dda_fixed save_x_dda = pss->params.scale_dda.x;
+ devc.type = gx_dc_type_none; /* Needed for coverity, in call to color_is_pure() if color_handler is NULL. */
stream_w.limit = out + pss->params.WidthOut *
max(spp_decode * sizeofPixelOut, ARCH_SIZEOF_COLOR_INDEX) - 1;
stream_w.ptr = stream_w.limit - width * spp_decode * sizeofPixelOut;
diff --git a/base/gxmclip.c b/base/gxmclip.c
index bad2c369..dcefa823 100644
--- a/base/gxmclip.c
+++ b/base/gxmclip.c
@@ -89,7 +89,9 @@ gx_mask_clip_initialize(gx_device_mask_clip * cdev,
for (;;) {
ulong bitmap_size = max_ulong;
- if (buffer_height <= 0) {
+ /* Bug 702124: Allow for the case when size.y == 0 - then
+ * buffer_height will be zero, and it's not a VMerror. */
+ if (bits->size.y > 0 && buffer_height <= 0) {
/*
* The tile is too wide to buffer even one scan line.
* We could do copy_mono in chunks, but for now, we punt.
diff --git a/base/gxpaint.c b/base/gxpaint.c
index 9ea236eb..19e56b43 100644
--- a/base/gxpaint.c
+++ b/base/gxpaint.c
@@ -73,6 +73,30 @@ gx_stroke_fill(gx_path * ppath, gs_gstate * pgs)
}
int
+gx_fill_stroke_path(gs_gstate * pgs, int rule)
+{
+ gx_device *dev = gs_currentdevice_inline(pgs);
+ gx_clip_path *pcpath;
+ int code = gx_effective_clip_path(pgs, &pcpath);
+ gx_stroke_params stroke_params;
+ gx_fill_params fill_params;
+
+ if (code < 0)
+ return code;
+ fill_params.rule = rule;
+ fill_params.adjust.x = pgs->fill_adjust.x;
+ fill_params.adjust.y = pgs->fill_adjust.y;
+ fill_params.flatness = (caching_an_outline_font(pgs) ? 0.0 : pgs->flatness);
+ stroke_params.flatness = (caching_an_outline_font(pgs) ? 0.0 : pgs->flatness);
+ stroke_params.traditional = false;
+ return (*dev_proc(dev, fill_stroke_path))
+ (dev, (const gs_gstate *)pgs, pgs->path,
+ &fill_params, gs_currentdevicecolor_inline(pgs),
+ &stroke_params, gs_altdevicecolor_inline(pgs),
+ pcpath);
+}
+
+int
gx_stroke_add(gx_path * ppath, gx_path * to_path,
const gs_gstate * pgs, bool traditional)
{
diff --git a/base/gxpaint.h b/base/gxpaint.h
index e3e56e66..558e3978 100644
--- a/base/gxpaint.h
+++ b/base/gxpaint.h
@@ -36,6 +36,8 @@ int gx_fill_path(gx_path * ppath, gx_device_color * pdevc, gs_gstate * pgs,
int rule, fixed adjust_x, fixed adjust_y);
int gx_stroke_fill(gx_path * ppath, gs_gstate * pgs);
int gx_stroke_add(gx_path *ppath, gx_path *to_path, const gs_gstate * pgs, bool traditional);
+int gx_fill_stroke_path(gs_gstate *pgs, int rule);
+
/*
* gx_gstate_stroke_add needs a device for the sake of absolute-length
* dots (and for no other reason).
diff --git a/base/gxpath.h b/base/gxpath.h
index 505353a8..3c8d4124 100644
--- a/base/gxpath.h
+++ b/base/gxpath.h
@@ -309,6 +309,7 @@ int gx_clip_to_rectangle(gs_gstate *, gs_fixed_rect *);
int gx_clip_to_path(gs_gstate *);
int gx_default_clip_box(const gs_gstate *, gs_fixed_rect *);
int gx_effective_clip_path(gs_gstate *, gx_clip_path **);
+int gx_curr_fixed_bbox(gs_gstate * pgs, gs_fixed_rect *bbox, gs_bbox_comp_t comp_type);
int gx_curr_bbox(gs_gstate * pgs, gs_rect *bbox, gs_bbox_comp_t comp_type);
diff --git a/base/gxpath2.c b/base/gxpath2.c
index 49cad4d7..ed795ca5 100644
--- a/base/gxpath2.c
+++ b/base/gxpath2.c
@@ -58,6 +58,9 @@ gx_path_subpath_start_point(const gx_path * ppath, gs_fixed_point * ppt)
int
gx_path_bbox(gx_path * ppath, gs_fixed_rect * pbox)
{
+ if (ppath == NULL) {
+ return_error(gs_error_unknownerror) ;
+ }
if (ppath->bbox_accurate) {
/* The bounding box was set by setbbox. */
*pbox = ppath->bbox;
diff --git a/base/gxpcmap.c b/base/gxpcmap.c
index ea81fb00..ebd1de22 100644
--- a/base/gxpcmap.c
+++ b/base/gxpcmap.c
@@ -180,7 +180,8 @@ static const gx_device_pattern_accum gs_pattern_accum_device =
gx_default_strip_tile_rect_devn,
NULL, /* alpha_hl_color */
NULL, /* process_page */
- gx_default_transform_pixel_region /* NOT the default forwarding one */
+ gx_default_transform_pixel_region, /* NOT the default forwarding one */
+ gx_default_fill_stroke_path,
},
0, /* target */
0, 0, 0, 0 /* bitmap_memory, bits, mask, instance */
@@ -341,6 +342,23 @@ gx_pattern_accum_alloc(gs_memory_t * mem, gs_memory_t * storage_memory,
return fdev;
}
+gx_pattern_trans_t*
+new_pattern_trans_buff(gs_memory_t *mem)
+{
+ gx_pattern_trans_t *result;
+
+ /* Allocate structure that we will use for the trans pattern */
+ result = gs_alloc_struct(mem, gx_pattern_trans_t, &st_pattern_trans, "new_pattern_trans_buff");
+ result->transbytes = NULL;
+ result->pdev14 = NULL;
+ result->mem = NULL;
+ result->fill_trans_buffer = NULL;
+ result->buf = NULL;
+ result->n_chan = 0;
+
+ return(result);
+}
+
/*
* Initialize a pattern accumulator.
* Client must already have set instance and bitmap_memory.
@@ -392,14 +410,9 @@ pattern_accum_open(gx_device * dev)
do this since the transparency code all */
if (pinst->templat.uses_transparency) {
/* Allocate structure that we will use for the trans pattern */
- padev->transbuff = gs_alloc_struct(mem,gx_pattern_trans_t,&st_pattern_trans,"pattern_accum_open(trans)");
- padev->transbuff->transbytes = NULL;
- padev->transbuff->mem = NULL;
- padev->transbuff->pdev14 = NULL;
- padev->transbuff->fill_trans_buffer = NULL;
- /* n_chan = 0 => padev->transbuff isn't inited. */
- padev->transbuff->n_chan = 0;
- padev->transbuff->buf = NULL;
+ padev->transbuff = new_pattern_trans_buff(mem);
+ if (padev->transbuff == NULL)
+ return_error(gs_error_VMerror);
} else {
padev->transbuff = NULL;
}
@@ -496,21 +509,6 @@ pattern_accum_open(gx_device * dev)
return code;
}
-gx_pattern_trans_t*
-new_pattern_trans_buff(gs_memory_t *mem)
-{
- gx_pattern_trans_t *result;
-
- /* Allocate structure that we will use for the trans pattern */
- result = gs_alloc_struct(mem, gx_pattern_trans_t, &st_pattern_trans, "new_pattern_trans_buff");
- result->transbytes = NULL;
- result->pdev14 = NULL;
- result->mem = NULL;
- result->fill_trans_buffer = NULL;
-
- return(result);
-}
-
/* Close an accumulator and free the bits. */
static int
pattern_accum_close(gx_device * dev)
@@ -907,12 +905,14 @@ gstate_set_pattern_cache(gs_gstate * pgs, gx_pattern_cache * pcache)
}
/* Free a Pattern cache entry. */
+/* This will not free a pattern if it is 'locked' which should only be for */
+/* a stroke pattern during fill_stroke_path. */
static void
gx_pattern_cache_free_entry(gx_pattern_cache * pcache, gx_color_tile * ctile)
{
gx_device *temp_device;
- if ((ctile->id != gx_no_bitmap_id) && !ctile->is_dummy) {
+ if ((ctile->id != gx_no_bitmap_id) && !ctile->is_dummy && !ctile->is_locked) {
gs_memory_t *mem = pcache->memory;
/*
@@ -991,18 +991,25 @@ gx_pattern_cache_ensure_space(gs_gstate * pgs, int needed)
{
int code = ensure_pattern_cache(pgs);
gx_pattern_cache *pcache;
+ int start_free_id;
if (code < 0)
return; /* no cache -- just exit */
pcache = pgs->pattern_cache;
-
+ start_free_id = pcache->next; /* for scan wrap check */
/* If too large then start freeing entries */
- /* By starting at 'next', we attempt to first free the oldest entries */
+ /* By starting just after 'next', we attempt to first free the oldest entries */
while (pcache->bits_used + needed > pcache->max_bits &&
pcache->bits_used != 0) {
pcache->next = (pcache->next + 1) % pcache->num_tiles;
gx_pattern_cache_free_entry(pcache, &pcache->tiles[pcache->next]);
+ /* since a pattern may be temporarily locked (stroke pattern for fill_stroke_path) */
+ /* we may not have freed all entries even though we've scanned the entire cache. */
+ /* The following check for wrapping prevents infinite loop if stroke pattern was */
+ /* larger than pcache->max_bits, */
+ if (pcache->next == start_free_id)
+ break; /* we wrapped -- cache may not be empty */
}
}
@@ -1025,7 +1032,7 @@ gx_pattern_cache_update_used(gs_gstate *pgs, ulong used)
static void make_bitmap(gx_strip_bitmap *, const gx_device_memory *, gx_bitmap_id, const gs_memory_t *);
int
gx_pattern_cache_add_entry(gs_gstate * pgs,
- gx_device_forward * fdev, gx_color_tile ** pctile)
+ gx_device_forward * fdev, gx_color_tile ** pctile, gs_gstate* saved)
{
gx_pattern_cache *pcache;
const gs_pattern1_instance_t *pinst;
@@ -1070,8 +1077,8 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
* being 0.
*/
if (mmask != 0 &&
- fabsf(pinst->step_matrix.tx) <= pinst->size.x &&
- fabsf(pinst->step_matrix.ty) <= pinst->size.y &&
+ fabsf(pinst->step_matrix.xx) <= pinst->size.x &&
+ fabsf(pinst->step_matrix.yy) <= pinst->size.y &&
pinst->step_matrix.xy == 0 &&
pinst->step_matrix.yx == 0) {
int y;
@@ -1133,10 +1140,14 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
ctile->is_simple = pinst->is_simple;
ctile->has_overlap = pinst->has_overlap;
ctile->is_dummy = false;
- if (pinst->templat.uses_transparency)
- ctile->blending_mode = ((pdf14_device *)(pgs->device))->blend_mode;
+ ctile->is_locked = false;
+ if (pinst->templat.uses_transparency) {
+ /* to work with pdfi get the blend mode out of the saved pgs device */
+ ctile->blending_mode = ((pdf14_device*)(saved->device))->blend_mode;
+ }
else
ctile->blending_mode = 0;
+ ctile->trans_group_popped = false;
if (dev_proc(fdev, open_device) != pattern_clist_open_device) {
if (mbits != 0) {
make_bitmap(&ctile->tbits, mbits, gs_next_ids(pgs->memory, 1), pgs->memory);
@@ -1181,6 +1192,26 @@ gx_pattern_cache_add_entry(gs_gstate * pgs,
return 0;
}
+/* set or clear the 'is_locked' flag for a tile in the cache. Used by */
+/* fill_stroke_path to make sure a large stroke pattern stays in the */
+/* cache even if the fill is also a pattern. */
+int
+gx_pattern_cache_entry_set_lock(gs_gstate *pgs, gs_id id, bool new_lock_value)
+{
+ gx_pattern_cache *pcache;
+ gx_color_tile *ctile;
+ int code = ensure_pattern_cache(pgs);
+
+ if (code < 0)
+ return code;
+ pcache = pgs->pattern_cache;
+ ctile = &pcache->tiles[id % pcache->num_tiles];
+ if (ctile->id != id)
+ return_error(gs_error_undefined);
+ ctile->is_locked = new_lock_value;
+ return 0;
+}
+
/* Get entry for reading a pattern from clist. */
int
gx_pattern_cache_get_entry(gs_gstate * pgs, gs_id id, gx_color_tile ** pctile)
@@ -1230,6 +1261,7 @@ gx_pattern_cache_add_dummy_entry(gs_gstate *pgs,
ctile->is_simple = pinst->is_simple;
ctile->has_overlap = pinst->has_overlap;
ctile->is_dummy = true;
+ ctile->is_locked = false;
memset(&ctile->tbits, 0 , sizeof(ctile->tbits));
ctile->tbits.size = pinst->size;
ctile->tbits.id = gs_no_bitmap_id;
@@ -1366,6 +1398,7 @@ gx_pattern_cache_winnow(gx_pattern_cache * pcache,
for (i = 0; i < pcache->num_tiles; ++i) {
gx_color_tile *ctile = &pcache->tiles[i];
+ ctile->is_locked = false; /* force freeing */
if (ctile->id != gx_no_bitmap_id && (*proc) (ctile, proc_data))
gx_pattern_cache_free_entry(pcache, ctile);
}
@@ -1501,6 +1534,7 @@ gx_pattern_load(gx_device_color * pdc, const gs_gstate * pgs,
gs_free_object(((gx_device_pattern_accum *)adev)->bitmap_memory,
((gx_device_pattern_accum *)adev)->transbuff,
"gx_pattern_load");
+ ((gx_device_pattern_accum *)adev)->transbuff = NULL;
}
dev_proc(adev, close_device)((gx_device *)adev);
/* adev was the target of the pdf14 device, so also is no longer retained */
@@ -1537,7 +1571,7 @@ gx_pattern_load(gx_device_color * pdc, const gs_gstate * pgs,
}
/* We REALLY don't like the following cast.... */
code = gx_pattern_cache_add_entry((gs_gstate *)pgs,
- adev, &ctile);
+ adev, &ctile, saved);
if (code >= 0) {
if (!gx_pattern_cache_lookup(pdc, pgs, dev, select)) {
mlprintf(mem, "Pattern cache lookup failed after insertion!\n");
diff --git a/base/gxpcolor.h b/base/gxpcolor.h
index c12fa31a..38cd625b 100644
--- a/base/gxpcolor.h
+++ b/base/gxpcolor.h
@@ -214,17 +214,17 @@ struct gx_color_tile_s {
byte has_overlap; /* true if step size is smaller than bounding box */
byte is_dummy; /* if true, the device manages the pattern,
and the content of the tile is empty. */
- byte pad[2]; /* structure members alignment. */
- /* The following is neither key nor value. */
- uint index; /* the index of the tile within */
- bool trans_group_popped; /* Used to avoid multiple group pops in image mask fills */
- bool is_planar; /* Has to be stored here due to the device
+ byte trans_group_popped; /* Used to avoid multiple group pops in image mask fills */
+ byte is_planar; /* Has to be stored here due to the device
change that can occur when the tile is
created and when it is written in the clist
when we are writing to a transparency
device which, is not planar but the target
is */
- /* the cache (for GC) */
+ byte is_locked; /* stroke patterns cannot be freed during fill_stroke_path */
+ byte pad[2]; /* structure members alignment. */
+ /* The following is neither key nor value. */
+ uint index; /* the index of the tile within the cache (for GC) */
};
#define private_st_color_tile() /* in gxpcmap.c */\
@@ -306,12 +306,15 @@ void gx_pattern_cache_update_space(gs_gstate * pgs, int64_t used);
/* device, but it may zero out the bitmap_memory pointers to prevent */
/* the accumulated bitmaps from being freed when the device is closed. */
int gx_pattern_cache_add_entry(gs_gstate *, gx_device_forward *,
- gx_color_tile **);
+ gx_color_tile **, gs_gstate*);
/* Add a dummy Pattern cache entry. Stubs a pattern tile for interpreter when
device handles high level patterns. */
int gx_pattern_cache_add_dummy_entry(gs_gstate *pgs, gs_pattern1_instance_t *pinst,
int depth);
+/* set or clear the lock for a tile in the cache. Returns error if tile not in cache */
+int gx_pattern_cache_entry_set_lock(gs_gstate * pgs, gs_id id, bool new_lock_value);
+
/* Get entry for reading a pattern from clist. */
int gx_pattern_cache_get_entry(gs_gstate * pgs, gs_id id, gx_color_tile ** pctile);
diff --git a/base/gxscanc.c b/base/gxscanc.c
index f754624a..1a4bb23c 100644
--- a/base/gxscanc.c
+++ b/base/gxscanc.c
@@ -3449,7 +3449,7 @@ static void mark_line_tr_app(cursor_tr * gs_restrict cr, fixed sx, fixed sy, fix
int64_t y = (int64_t)ey - (int64_t)sy;
fixed new_sy = int2fixed(cr->base);
int64_t dy = (int64_t)new_sy - (int64_t)sy;
- sx += (int)((((int64_t)(ex-sx))*dy + y/2)/y);
+ sx += (int)(((((int64_t)ex-sx))*dy + y/2)/y);
sy = new_sy;
cursor_null_tr(cr);
cr->y = sy;
@@ -3463,7 +3463,7 @@ static void mark_line_tr_app(cursor_tr * gs_restrict cr, fixed sx, fixed sy, fix
int64_t dy = (int64_t)ey - (int64_t)new_ey;
saved_ex = ex;
saved_ey = ey;
- ex -= (int)((((int64_t)(ex-sx))*dy + y/2)/y);
+ ex -= (int)(((((int64_t)ex-sx))*dy + y/2)/y);
ey = new_ey;
iey = cr->scanlines;
}
@@ -3489,7 +3489,7 @@ static void mark_line_tr_app(cursor_tr * gs_restrict cr, fixed sx, fixed sy, fix
int64_t y = (int64_t)ey - (int64_t)sy;
fixed new_ey = int2fixed(cr->base);
int64_t dy = (int64_t)ey - (int64_t)new_ey;
- ex -= (int)((((int64_t)(ex-sx))*dy + y/2)/y);
+ ex -= (int)(((((int64_t)ex-sx))*dy + y/2)/y);
ey = new_ey;
iey = 0;
}
@@ -3498,7 +3498,7 @@ static void mark_line_tr_app(cursor_tr * gs_restrict cr, fixed sx, fixed sy, fix
int64_t y = (int64_t)ey - (int64_t)sy;
fixed new_sy = int2fixed(cr->base + cr->scanlines);
int64_t dy = (int64_t)new_sy - (int64_t)sy;
- sx += (int)((((int64_t)(ex-sx))*dy + y/2)/y);
+ sx += (int)(((((int64_t)ex-sx))*dy + y/2)/y);
sy = new_sy;
cursor_null_tr(cr);
cr->y = sy;
diff --git a/base/gxstroke.c b/base/gxstroke.c
index a15a22c9..52c15437 100644
--- a/base/gxstroke.c
+++ b/base/gxstroke.c
@@ -105,13 +105,18 @@ int
gx_stroke_path_expansion(const gs_gstate * pgs, const gx_path * ppath,
gs_fixed_point * ppt)
{
- const subpath *psub = ppath->first_subpath;
+ const subpath *psub;
const segment *pseg;
double cx = fabs(pgs->ctm.xx) + fabs(pgs->ctm.yx);
double cy = fabs(pgs->ctm.xy) + fabs(pgs->ctm.yy);
double expand = pgs->line_params.half_width;
int result = 1;
+ if (ppath == NULL) {
+ ppt->x = ppt->y = 0;
+ return 0; /* no expansion */
+ }
+ psub = ppath->first_subpath;
/* Adjust the expansion (E) for square caps, if needed */
if (pgs->line_params.start_cap == gs_cap_square ||
pgs->line_params.end_cap == gs_cap_square)
@@ -1053,9 +1058,9 @@ gx_stroke_path_only_aux(gx_path * ppath, gx_path * to_path, gx_device * pdev,
gx_path_free(&stroke_path_body, "gx_stroke_path_only error"); /* (only needed if error) */
if (to_path_reverse == &stroke_path_reverse)
gx_path_free(&stroke_path_reverse, "gx_stroke_path_only error");
+ exf:
if (dash_count)
gx_path_free(&dpath, "gx_stroke_path exit(dash path)");
- exf:
if (ppath->curve_count)
gx_path_free(&fpath, "gx_stroke_path exit(flattened path)");
return code;
diff --git a/base/jbig2.mak b/base/jbig2.mak
index eba11f52..c3d275b9 100644
--- a/base/jbig2.mak
+++ b/base/jbig2.mak
@@ -43,39 +43,40 @@ JBIG2OBJ=$(JBIG2OBJDIR)$(D)
libjbig2_OBJS1=\
$(JBIG2OBJ)jbig2.$(OBJ) \
$(JBIG2OBJ)jbig2_arith.$(OBJ) \
- $(JBIG2OBJ)jbig2_arith_iaid.$(OBJ) \
- $(JBIG2OBJ)jbig2_arith_int.$(OBJ) \
- $(JBIG2OBJ)jbig2_generic.$(OBJ) \
- $(JBIG2OBJ)jbig2_refinement.$(OBJ) \
- $(JBIG2OBJ)jbig2_huffman.$(OBJ) \
- $(JBIG2OBJ)jbig2_image.$(OBJ) \
- $(JBIG2OBJ)jbig2_mmr.$(OBJ)
+ $(JBIG2OBJ)jbig2_arith_iaid.$(OBJ) \
+ $(JBIG2OBJ)jbig2_arith_int.$(OBJ) \
+ $(JBIG2OBJ)jbig2_generic.$(OBJ) \
+ $(JBIG2OBJ)jbig2_refinement.$(OBJ) \
+ $(JBIG2OBJ)jbig2_huffman.$(OBJ) \
+ $(JBIG2OBJ)jbig2_hufftab.$(OBJ) \
+ $(JBIG2OBJ)jbig2_image.$(OBJ) \
+ $(JBIG2OBJ)jbig2_mmr.$(OBJ)
libjbig2_OBJS2=\
$(JBIG2OBJ)jbig2_page.$(OBJ) \
- $(JBIG2OBJ)jbig2_segment.$(OBJ) \
- $(JBIG2OBJ)jbig2_symbol_dict.$(OBJ) \
- $(JBIG2OBJ)jbig2_text.$(OBJ) \
- $(JBIG2OBJ)jbig2_halftone.$(OBJ) \
- $(JBIG2_EXTRA_OBJS)
+ $(JBIG2OBJ)jbig2_segment.$(OBJ) \
+ $(JBIG2OBJ)jbig2_symbol_dict.$(OBJ) \
+ $(JBIG2OBJ)jbig2_text.$(OBJ) \
+ $(JBIG2OBJ)jbig2_halftone.$(OBJ) \
+ $(JBIG2_EXTRA_OBJS)
libjbig2_OBJS=$(libjbig2_OBJS1) $(libjbig2_OBJS2)
libjbig2_HDRS=\
- $(JBIG2SRC)jbig2.h \
- $(JBIG2SRC)jbig2_arith.h \
- $(JBIG2SRC)jbig2_arith_iaid.h \
- $(JBIG2SRC)jbig2_arith_int.h \
- $(JBIG2SRC)jbig2_generic.h \
- $(JBIG2SRC)jbig2_huffman.h \
- $(JBIG2SRC)jbig2_hufftab.h \
- $(JBIG2SRC)jbig2_image.h \
- $(JBIG2SRC)jbig2_mmr.h \
- $(JBIG2SRC)jbig2_priv.h \
- $(JBIG2SRC)jbig2_symbol_dict.h \
- $(JBIG2SRC)jbig2_text.h \
- $(JBIG2SRC)jbig2_halftone.h \
- $(JBIG2SRC)config_win32.h
+ $(JBIG2SRC)jbig2.h \
+ $(JBIG2SRC)jbig2_arith.h \
+ $(JBIG2SRC)jbig2_arith_iaid.h \
+ $(JBIG2SRC)jbig2_arith_int.h \
+ $(JBIG2SRC)jbig2_generic.h \
+ $(JBIG2SRC)jbig2_huffman.h \
+ $(JBIG2SRC)jbig2_hufftab.h \
+ $(JBIG2SRC)jbig2_image.h \
+ $(JBIG2SRC)jbig2_mmr.h \
+ $(JBIG2SRC)jbig2_priv.h \
+ $(JBIG2SRC)jbig2_symbol_dict.h \
+ $(JBIG2SRC)jbig2_text.h \
+ $(JBIG2SRC)jbig2_halftone.h \
+ $(JBIG2SRC)config_win32.h
jbig2dec_OBJS=$(JBIG2OBJ)getopt.$(OBJ) $(JBIG2OBJ)getopt1.$(OBJ) $(JBIG2OBJ)sha1.$(OBJ)
jbig2dec_HDRS=$(JBIG2OBJ)getopt.h $(JBIG2OBJ)sha1.h
@@ -140,6 +141,9 @@ $(JBIG2OBJ)jbig2_refinement.$(OBJ) : $(JBIG2SRC)jbig2_refinement.c $(libjbig2_HD
$(JBIG2OBJ)jbig2_huffman.$(OBJ) : $(JBIG2SRC)jbig2_huffman.c $(libjbig2_HDRS) $(JBIG2DEP) $(JBIG2_MAK) $(MAKEDIRS)
$(JBIG2_CC) $(JBIG2O_)jbig2_huffman.$(OBJ) $(C_) $(JBIG2SRC)jbig2_huffman.c
+$(JBIG2OBJ)jbig2_hufftab.$(OBJ) : $(JBIG2SRC)jbig2_hufftab.c $(libjbig2_HDRS) $(JBIG2DEP) $(JBIG2_MAK) $(MAKEDIRS)
+ $(JBIG2_CC) $(JBIG2O_)jbig2_hufftab.$(OBJ) $(C_) $(JBIG2SRC)jbig2_hufftab.c
+
$(JBIG2OBJ)jbig2_image.$(OBJ) : $(JBIG2SRC)jbig2_image.c $(libjbig2_HDRS) $(JBIG2DEP) $(JBIG2_MAK) $(MAKEDIRS)
$(JBIG2_CC) $(JBIG2O_)jbig2_image.$(OBJ) $(C_) $(JBIG2SRC)jbig2_image.c
diff --git a/base/lcupsi.mak b/base/lcupsi.mak
index 0cfe2044..33f78124 100644
--- a/base/lcupsi.mak
+++ b/base/lcupsi.mak
@@ -40,7 +40,7 @@ LCUPSI_MAK=$(GLSRC)lcupsi.mak $(TOP_MAKEFILES)
LIBCUPSI_OBJS =\
$(LIBCUPSIOBJ)error.$(OBJ) \
$(LIBCUPSIOBJ)interpret.$(OBJ) \
- $(LIBCUPSIOBJ)raster.$(OBJ)
+ $(LIBCUPSIOBJ)cupsraster.$(OBJ)
LIBCUPSI_DEPS = \
$(LIBCUPSISRC)common.h $(LCUPSI_MAK) \
@@ -120,6 +120,6 @@ $(LIBCUPSIOBJ)error.$(OBJ) : $(LIBCUPSISRC)error.c $(LIBCUPSI_DEPS)
$(LIBCUPSIOBJ)interpret.$(OBJ) : $(LIBCUPSISRC)interpret.c $(LIBCUPSI_DEPS)
$(LCUPSI_CC) $(LCUPSIO_)interpret.$(OBJ) $(C_) $(LIBCUPSISRC)interpret.c
-$(LIBCUPSIOBJ)raster.$(OBJ) : $(LIBCUPSISRC)raster.c $(LIBCUPSI_DEPS)
- $(LCUPSI_CC) $(LCUPSIO_)raster.$(OBJ) $(C_) $(LIBCUPSISRC)raster.c
+$(LIBCUPSIOBJ)cupsraster.$(OBJ) : $(LIBCUPSISRC)cupsraster.c $(LIBCUPSI_DEPS)
+ $(LCUPSI_CC) $(LCUPSIO_)cupsraster.$(OBJ) $(C_) $(LIBCUPSISRC)cupsraster.c
diff --git a/base/lib.mak b/base/lib.mak
index 5772b8d9..ac5eae19 100644
--- a/base/lib.mak
+++ b/base/lib.mak
@@ -153,6 +153,15 @@ jpeglib__h=$(GLGEN)jpeglib_.h
cal_h=$(CALSRCDIR)$(D)cal.h
+# The following would logically be better in freetype.mak
+# but we need it for fapi_ft.c below
+FTCONFH=gsftopts.h
+GENFTCONFH=$(FTGENDIR)$(D)$(FTCONFH)
+BASEFTCONFH=$(GLSRC)$(FTCONFH)
+
+$(GENFTCONFH) : $(BASEFTCONFH) $(MAKEDIRS)
+ $(CP_) $(BASEFTCONFH) $(GENFTCONFH)
+
# Miscellaneous
gsio_h=$(GLSRC)gsio.h
@@ -374,16 +383,16 @@ $(GLOBJ)gsserial.$(OBJ) : $(GLSRC)gsserial.c $(stdpre_h) $(gstypes_h)\
$(GLOBJ)gsutil.$(OBJ) : $(GLSRC)gsutil.c $(AK) $(memory__h)\
$(string__h) $(gstypes_h) $(gserrors_h) $(gsmemory_h)\
- $(gsrect_h) $(gsuid_h) $(gsutil_h) $(gzstate_h) $(gxdcolor_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gsrect_h) $(gsuid_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gsutil.$(OBJ) $(C_) $(GLSRC)gsutil.c
$(AUX)gsutil.$(OBJ) : $(GLSRC)gsutil.c $(AK) $(memory__h) $(string__h)\
$(gstypes_h) $(gserrors_h) $(gsmemory_h)\
- $(gsrect_h) $(gsuid_h) $(gsutil_h) $(gzstate_h) $(gxdcolor_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gsrect_h) $(gsuid_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCCAUX) $(C_) $(AUXO_)gsutil.$(OBJ) $(GLSRC)gsutil.c
-$(GLOBJ)gssprintf.$(OBJ) : $(GLSRC)gssprintf.c $(gssprintf_h) $(stdio__h) \
- $(stdint__h) $(string__h) $(math__h)
+$(GLOBJ)gssprintf.$(OBJ) : $(GLSRC)gssprintf.c $(gssprintf_h) $(unistd__h) \
+ $(gp_h) $(stdio__h) $(stdint__h) $(string__h) $(math__h)
$(GLCC) $(GLO_)gssprintf.$(OBJ) $(C_) $(GLSRC)gssprintf.c
$(GLOBJ)gsstrtok.$(OBJ) : $(GLSRC)gsstrtok.c $(gsstrtok_h) $(string__h)
@@ -595,6 +604,7 @@ spprint_h=$(GLSRC)spprint.h
spsdf_h=$(GLSRC)spsdf.h
srlx_h=$(GLSRC)srlx.h
spwgx_h=$(GLSRC)spwgx.h
+surfx_h=$(SURFX_H)
sstring_h=$(GLSRC)sstring.h
strimpl_h=$(GLSRC)strimpl.h
szlibx_h=$(GLSRC)szlibx.h
@@ -951,8 +961,9 @@ $(GLOBJ)gscicach.$(OBJ) : $(GLSRC)gscicach.c $(AK) $(gx_h)\
$(GLCC) $(GLO_)gscicach.$(OBJ) $(C_) $(GLSRC)gscicach.c
$(GLOBJ)gsovrc.$(OBJ) : $(GLSRC)gsovrc.c $(AK) $(gx_h) $(gserrors_h)\
- $(memory__h) $(gsutil_h) $(gxcomp_h) $(gxdevice_h) $(gsdevice_h) $(gxgetbit_h)\
- $(gsovrc_h) $(gxdcolor_h) $(gxoprect_h) $(gsbitops_h) $(gxgstate_h) $(LIB_MAK) $(MAKEDIRS)
+ $(assert__h) $(memory__h) $(gsutil_h) $(gxcomp_h) $(gxdevice_h) $(gsdevice_h)\
+ $(gxgetbit_h) $(gsovrc_h) $(gxdcolor_h) $(gxoprect_h) $(gsbitops_h) $(gxgstate_h)\
+ $(gxdevsop_h) $(gxcldev_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gsovrc.$(OBJ) $(C_) $(GLSRC)gsovrc.c
$(GLOBJ)gxoprect.$(OBJ) : $(GLSRC)gxoprect.c $(AK) $(gx_h)\
@@ -1050,7 +1061,7 @@ $(GLOBJ)gspaint.$(OBJ) : $(GLSRC)gspaint.c $(AK) $(gx_h) $(gserrors_h)\
$(math__h) $(gpcheck_h) $(gsropt_h) $(gxfixed_h) $(gxmatrix_h) $(gspaint_h)\
$(gspath_h) $(gzpath_h) $(gxpaint_h) $(gzstate_h) $(gxdevice_h) $(gxdevmem_h)\
$(gzcpath_h) $(gxhldevc_h) $(gsutil_h) $(gxdevsop_h) $(gsicc_cms_h)\
- $(gdevepo_h) $(gxscanc_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gdevepo_h) $(gxscanc_h) $(gxpcolor_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gspaint.$(OBJ) $(C_) $(GLSRC)gspaint.c
$(GLOBJ)gsparam.$(OBJ) : $(GLSRC)gsparam.c $(AK) $(gx_h) $(gserrors_h)\
@@ -1089,7 +1100,7 @@ $(GLOBJ)gsstate.$(OBJ) : $(GLSRC)gsstate.c $(AK) $(gx_h) $(gserrors_h)\
$(GLOBJ)gstext.$(OBJ) : $(GLSRC)gstext.c $(AK) $(memory__h) $(gdebug_h)\
$(gserrors_h) $(gsmemory_h) $(gsstruct_h) $(gstypes_h)\
$(gxfcache_h) $(gxdevcli_h) $(gxdcolor_h) $(gxfont_h) $(gxpath_h)\
- $(gxtext_h) $(gzstate_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+ $(gxtext_h) $(gzstate_h) $(gsutil_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)gstext.$(OBJ) $(C_) $(GLSRC)gstext.c
# We make gsiodevs a separate module so the PS interpreter can replace it.
@@ -1308,12 +1319,22 @@ $(GLD)fapif1.dev : $(INT_MAK) $(ECHOGS_XE) $(GLOBJ)fapi_ft.$(OBJ) \
$(ADDMOD) $(GLD)fapif1 -include $(GLD)freetype
$(ADDMOD) $(GLD)fapif1 -fapi fapi_ft
-$(GLOBJ)fapi_ft.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\
+$(GLOBJ)fapi_ft_0.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\
+ $(stdio__h) $(malloc__h) $(write_t1_h) $(write_t2_h) $(math__h) $(gserrors_h)\
+ $(gsmemory_h) $(gsmalloc_h) $(gxfixed_h) $(gdebug_h) $(gxbitmap_h)\
+ $(gsmchunk_h) $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) $(gxfont1_h)\
+ $(gxfont_h) $(BASEFTCONFH) $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(FT_CFLAGS) $(D_)FT_CONFIG_OPTIONS_H=\"$(FTCONFH)\"$(_D) $(GLO_)fapi_ft_0.$(OBJ) $(C_) $(GLSRC)fapi_ft.c
+
+$(GLOBJ)fapi_ft_1.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\
$(stdio__h) $(malloc__h) $(write_t1_h) $(write_t2_h) $(math__h) $(gserrors_h)\
$(gsmemory_h) $(gsmalloc_h) $(gxfixed_h) $(gdebug_h) $(gxbitmap_h)\
$(gsmchunk_h) $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) $(gxfont1_h)\
- $(gxfont_h) $(LIB_MAK) $(MAKEDIRS)
- $(GLCC) $(FT_CFLAGS) $(GLO_)fapi_ft.$(OBJ) $(C_) $(GLSRC)fapi_ft.c
+ $(gxfont_h) $(BASEFTCONFH) $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(FT_CFLAGS) $(GLO_)fapi_ft_1.$(OBJ) $(C_) $(GLSRC)fapi_ft.c
+
+$(GLOBJ)fapi_ft.$(OBJ) : $(GLOBJ)fapi_ft_$(SHARE_FT).$(OBJ)
+ $(CP_) $(GLOBJ)fapi_ft_$(SHARE_FT).$(OBJ) $(GLOBJ)fapi_ft.$(OBJ)
# stub for FreeType bridge :
@@ -1363,18 +1384,29 @@ ets_h=$(GLSRC)ets.h
ets_tm_h=$(GLSRC)ets_tm.h
ets=$(GLOBJ)ets.$(OBJ)
-$(GLOBJ)ets.$(OBJ) : $(GLSRC)ets.c $(AK) \
+$(GLOBJ)ets_0.$(OBJ) : $(GLSRC)ets.c $(AK) \
$(ets_h) $(ets_tm_h) $(LIB_MAK) $(MAKEDIRS)
- $(GLCC) $(GLO_)ets.$(OBJ) $(C_) $(GLSRC)ets.c
+ $(GLCC) $(GLO_)ets_0.$(OBJ) $(C_) $(GLSRC)ets.c
+
+$(GLOBJ)ets.$(OBJ) : $(GLOBJ)ets_$(WITH_CAL).$(OBJ) $(AK) $(gp_h)
+ $(CP_) $(GLOBJ)ets_$(WITH_CAL).$(OBJ) $(GLOBJ)ets.$(OBJ)
# ----------- Downsampling routines ------------ #
gxdownscale_h=$(GLSRC)gxdownscale.h
downscale_=$(GLOBJ)gxdownscale.$(OBJ) $(claptrap) $(ets)
-$(GLOBJ)gxdownscale.$(OBJ) : $(GLSRC)gxdownscale.c $(AK) $(string__h)\
+$(GLOBJ)gxdownscale_0.$(OBJ) : $(GLSRC)gxdownscale.c $(AK) $(string__h)\
$(gxdownscale_h) $(gserrors_h) $(gdevprn_h) $(assert__h) $(ets_h)\
$(LIB_MAK) $(MAKEDIRS)
- $(GLCC) $(GLO_)gxdownscale.$(OBJ) $(C_) $(GLSRC)gxdownscale.c
+ $(GLCC) $(GLO_)gxdownscale_0.$(OBJ) $(C_) $(GLSRC)gxdownscale.c
+
+$(GLOBJ)gxdownscale_1.$(OBJ) : $(GLSRC)gxdownscale.c $(AK) $(string__h)\
+ $(gxdownscale_h) $(gserrors_h) $(gdevprn_h) $(assert__h) $(ets_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxdownscale_1.$(OBJ) $(C_) $(GLSRC)gxdownscale.c
+
+$(GLOBJ)gxdownscale.$(OBJ) : $(GLOBJ)gxdownscale_$(WITH_CAL).$(OBJ) $(AK) $(gp_h)
+ $(CP_) $(GLOBJ)gxdownscale_$(WITH_CAL).$(OBJ) $(GLOBJ)gxdownscale.$(OBJ)
###### Create a pseudo-"feature" for the entire graphics library.
@@ -1931,6 +1963,16 @@ $(GLOBJ)spwgd.$(OBJ) : $(GLSRC)spwgd.c $(AK) $(stdio__h) $(memory__h)\
$(spwgx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
$(GLCC) $(GLO_)spwgd.$(OBJ) $(C_) $(GLSRC)spwgd.c
+# ---------------- URF RunLength decode filter ---------------- #
+
+urfd_=$(GLOBJ)surfd.$(OBJ)
+$(GLD)urfd.dev : $(LIB_MAK) $(ECHOGS_XE) $(urfd_) $(LIB_MAK) $(MAKEDIRS)
+ $(SETMOD) $(GLD)urfd $(urfd_)
+
+$(GLOBJ)surfd.$(OBJ) : $(URFSRCDIR)$(D)surfd.c $(AK) $(stdio__h) $(memory__h)\
+ $(surfx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(GLO_)surfd.$(OBJ) $(C_) $(URFSRCDIR)$(D)surfd.c
+
# ---------------- String encoding/decoding filters ---------------- #
# These are used by the PostScript and PDF writers, and also by the
# PostScript interpreter.
@@ -2722,7 +2764,7 @@ $(GLD)colimlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(colimlib_) $(LIB_MAK) $(MAKEDIRS)
$(SETMOD) $(GLD)colimlib $(colimlib_)
$(ADDMOD) $(GLD)colimlib -imageclass 4_color
-$(GLOBJ)gxicolor.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
+$(GLOBJ)gxicolor_0.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
$(gserrors_h) $(memory__h) $(gpcheck_h) $(gxarith_h)\
$(gxfixed_h) $(gxfrac_h) $(gxmatrix_h)\
$(gsccolor_h) $(gspaint_h) $(gzstate_h)\
@@ -2730,7 +2772,20 @@ $(GLOBJ)gxicolor.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
$(gxgstate_h) $(gxdevmem_h) $(gxcpath_h) $(gximage_h)\
$(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h) $(gxcie_h)\
$(gscie_h) $(gzht_h) $(gxht_thresh_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
- $(GLCC) $(GLO_)gxicolor.$(OBJ) $(C_) $(GLSRC)gxicolor.c
+ $(GLCC) $(GLO_)gxicolor_0.$(OBJ) $(C_) $(GLSRC)gxicolor.c
+
+$(GLOBJ)gxicolor_1.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gxarith_h)\
+ $(gxfixed_h) $(gxfrac_h) $(gxmatrix_h)\
+ $(gsccolor_h) $(gspaint_h) $(gzstate_h)\
+ $(gxdevice_h) $(gxcmap_h) $(gxdcconv_h) $(gxdcolor_h)\
+ $(gxgstate_h) $(gxdevmem_h) $(gxcpath_h) $(gximage_h)\
+ $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h) $(gxcie_h)\
+ $(gscie_h) $(gzht_h) $(gxht_thresh_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+ $(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxicolor_1.$(OBJ) $(C_) $(GLSRC)gxicolor.c
+
+$(GLOBJ)gxicolor.$(OBJ) : $(GLOBJ)gxicolor_$(WITH_CAL).$(OBJ)
+ $(CP_) $(GLOBJ)gxicolor_$(WITH_CAL).$(OBJ) $(GLOBJ)gxicolor.$(OBJ)
# ---- Level 1 path miscellany (arcs, pathbbox, path enumeration) ---- #
@@ -3162,9 +3217,9 @@ $(GLOBJ)gdevp14_0.$(OBJ) : $(GLSRC)gdevp14.c $(AK) $(gx_h) $(gserrors_h)\
$(math__h) $(memory__h) $(gscdefs_h) $(gxdevice_h) $(gsdevice_h)\
$(gsstruct_h) $(gscoord_h) $(gxgstate_h) $(gxdcolor_h) $(gxiparam_h)\
$(gstparam_h) $(gxblend_h) $(gxtext_h) $(gsimage_h)\
- $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gsovrc_h) $(gxcmap_h)\
- $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
- $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h)\
+ $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gdevppla_h) $(gdevdevnprn_h)\
+ $(gsovrc_h) $(gxcmap_h) $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
+ $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h) $(gscdevn_h)\
$(gsptype1_h) $(gzcpath_h) $(gxpaint_h) $(gsicc_manage_h) $(gxclist_h)\
$(gxiclass_h) $(gximage_h) $(gsmatrix_h) $(gsicc_cache_h) $(gxdevsop_h)\
$(gsicc_h) $(gscms_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
@@ -3174,9 +3229,9 @@ $(GLOBJ)gdevp14_1.$(OBJ) : $(GLSRC)gdevp14.c $(AK) $(gx_h) $(gserrors_h)\
$(math__h) $(memory__h) $(gscdefs_h) $(gxdevice_h) $(gsdevice_h)\
$(gsstruct_h) $(gscoord_h) $(gxgstate_h) $(gxdcolor_h) $(gxiparam_h)\
$(gstparam_h) $(gxblend_h) $(gxtext_h) $(gsimage_h)\
- $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gsovrc_h) $(gxcmap_h)\
- $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
- $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h)\
+ $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gdevppla_h) $(gdevdevnprn_h)\
+ $(gsovrc_h) $(gxcmap_h) $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
+ $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h) $(gscdevn_h)\
$(gsptype1_h) $(gzcpath_h) $(gxpaint_h) $(gsicc_manage_h) $(gxclist_h)\
$(gxiclass_h) $(gximage_h) $(gsmatrix_h) $(gsicc_cache_h) $(gxdevsop_h)\
$(gsicc_h) $(gscms_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
@@ -3190,10 +3245,10 @@ translib_=$(GLOBJ)gstrans.$(OBJ) $(GLOBJ)gximag3x.$(OBJ)\
$(GLOBJ)gsequivc.$(OBJ) $(GLOBJ)gdevdcrd.$(OBJ)
$(GLD)translib.dev : $(LIB_MAK) $(ECHOGS_XE) $(translib_)\
- $(GLD)cspixlib.dev $(GLD)bboxutil.dev $(GLD)cielib.dev $(LIB_MAK) $(MAKEDIRS)
+ $(GLD)cspixlib.dev $(GLD)bboxutil.dev $(GLD)cielib.dev $(GLD)page.dev $(LIB_MAK) $(MAKEDIRS)
$(SETMOD) $(GLD)translib $(translib_)
$(ADDMOD) $(GLD)translib -imagetype 3x
- $(ADDMOD) $(GLD)translib -include $(GLD)cspixlib $(GLD)bboxutil
+ $(ADDMOD) $(GLD)translib -include $(GLD)cspixlib $(GLD)bboxutil $(GLD)page
$(ADDMOD) $(GLD)translib -include $(GLD)cielib.dev
# ---------------- Smooth shading ---------------- #
@@ -3284,12 +3339,12 @@ $(GLD)romfs0.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
# psi
$(GLGEN)gsromfs1_.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
$(GLGEN)gsromfs1_1.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_1.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
$(GLGEN)gsromfs1.c : $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
@@ -3298,13 +3353,13 @@ $(GLGEN)gsromfs1.c : $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
# pcl
$(GLGEN)pclromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_FONT_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
$(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS)
$(GLGEN)pclromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_1.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
$(GL_ROMFS_ARGS)
@@ -3313,12 +3368,12 @@ $(GLGEN)pclromfs1.c : $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)pclromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
$(GLGEN)pclromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_1.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
$(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
@@ -3327,12 +3382,12 @@ $(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
# xps
$(GLGEN)xpsromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
$(GLGEN)xpsromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_1.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
$(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
@@ -3340,12 +3395,12 @@ $(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)xpsromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
$(GLGEN)xpsromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_1.c \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
$(GLGEN)xpsromfs0.c : $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
@@ -3369,7 +3424,7 @@ $(GLGEN)pdlromfs1_c3.c : $(GLGEN)pdlromfs1_.c
$(GLGEN)pdlromfs1_.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_.c -s 4 \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_ROMFS_ARGS) $(PCLXL_FONT_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
$(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) \
$(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
@@ -3389,7 +3444,7 @@ $(GLGEN)pdlromfs1_1c3.c : $(GLGEN)pdlromfs1_1.c
$(GLGEN)pdlromfs1_1.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_1.c -s 4 \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) $(XPS_ROMFS_ARGS) \
$(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
@@ -3424,7 +3479,7 @@ $(GLGEN)pdlromfs0_c3.c : $(GLGEN)pdlromfs0_.c
$(GLGEN)pdlromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs0_.c -s 4 \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
# Non COMPILE_INITS + UFST variant
@@ -3442,7 +3497,7 @@ $(GLGEN)pdlromfs0_1c3.c : $(GLGEN)pdlromfs0_1.c
$(GLGEN)pdlromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs0_1.c -s 4 \
- -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+ $(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(GL_ROMFS_ARGS)
# Rules to fold Non COMPILE_INITS +/- UFST into 1 set of targets
@@ -3707,139 +3762,141 @@ $(GLOBJ)gslib.$(OBJ) : $(GLSRC)gslib.c $(AK)\
$(GLSRC)gdevdcrd.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsropt.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gslparam.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscpm.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gp.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)memento.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gp.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)srdline.h
$(GLSRC)gdevdcrd.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)memento.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscsel.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdcrd.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdio_.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gscompt.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevdcrd.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdcrd.h:$(GLSRC)std.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdcrd.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdcrd.h:$(GLGEN)arch.h
-$(GLSRC)gdevdcrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxtext.h
$(GLSRC)gdevpccm.h:$(GLSRC)gstext.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevpccm.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsropt.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsfont.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxftype.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsrect.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscms.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gslparam.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscpm.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gp.h
-$(GLSRC)gdevpccm.h:$(GLSRC)memento.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)srdline.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gp.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevpccm.h:$(GLSRC)srdline.h
$(GLSRC)gdevpccm.h:$(GLSRC)scommon.h
+$(GLSRC)gdevpccm.h:$(GLSRC)memento.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscsel.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stat_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevpccm.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevpccm.h:$(GLSRC)memory_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevpccm.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdio_.h
$(GLSRC)gdevpccm.h:$(GLSRC)gscompt.h
$(GLSRC)gdevpccm.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevpccm.h:$(GLSRC)stdint_.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevpccm.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevpccm.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gstypes.h
$(GLSRC)gdevpccm.h:$(GLSRC)std.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gstypes.h
$(GLSRC)gdevpccm.h:$(GLSRC)stdpre.h
$(GLSRC)gdevpccm.h:$(GLGEN)arch.h
-$(GLSRC)gdevpccm.h:$(GLSRC)gssprintf.h
$(GLSRC)stdint_.h:$(GLSRC)std.h
$(GLSRC)stdint_.h:$(GLSRC)stdpre.h
$(GLSRC)stdint_.h:$(GLGEN)arch.h
@@ -3848,48 +3905,49 @@ $(GLSRC)srdline.h:$(GLSRC)scommon.h
$(GLSRC)srdline.h:$(GLSRC)gsstype.h
$(GLSRC)srdline.h:$(GLSRC)gsmemory.h
$(GLSRC)srdline.h:$(GLSRC)gslibctx.h
-$(GLSRC)srdline.h:$(GLSRC)stdint_.h
$(GLSRC)srdline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)srdline.h:$(GLSRC)stdio_.h
-$(GLSRC)srdline.h:$(GLSRC)gstypes.h
+$(GLSRC)srdline.h:$(GLSRC)stdint_.h
+$(GLSRC)srdline.h:$(GLSRC)gssprintf.h
$(GLSRC)srdline.h:$(GLSRC)std.h
+$(GLSRC)srdline.h:$(GLSRC)gstypes.h
$(GLSRC)srdline.h:$(GLSRC)stdpre.h
$(GLSRC)srdline.h:$(GLGEN)arch.h
-$(GLSRC)srdline.h:$(GLSRC)gssprintf.h
$(GLSRC)gpmisc.h:$(GLSRC)gp.h
$(GLSRC)gpmisc.h:$(GLSRC)srdline.h
$(GLSRC)gpmisc.h:$(GLSRC)scommon.h
$(GLSRC)gpmisc.h:$(GLSRC)gsstype.h
+$(GLSRC)gpmisc.h:$(GLSRC)stat_.h
$(GLSRC)gpmisc.h:$(GLSRC)gsmemory.h
-$(GLSRC)gpmisc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gpmisc.h:$(GLSRC)memory_.h
+$(GLSRC)gpmisc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gpmisc.h:$(GLSRC)gslibctx.h
$(GLSRC)gpmisc.h:$(GLSRC)gscdefs.h
-$(GLSRC)gpmisc.h:$(GLSRC)stdint_.h
$(GLSRC)gpmisc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gpmisc.h:$(GLSRC)stdio_.h
-$(GLSRC)gpmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)gpmisc.h:$(GLSRC)stdint_.h
+$(GLSRC)gpmisc.h:$(GLSRC)gssprintf.h
$(GLSRC)gpmisc.h:$(GLSRC)std.h
+$(GLSRC)gpmisc.h:$(GLSRC)gstypes.h
$(GLSRC)gpmisc.h:$(GLSRC)stdpre.h
$(GLSRC)gpmisc.h:$(GLGEN)arch.h
-$(GLSRC)gpmisc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gp.h:$(GLSRC)stat_.h
$(GLSRC)gp.h:$(GLSRC)srdline.h
$(GLSRC)gp.h:$(GLSRC)scommon.h
$(GLSRC)gp.h:$(GLSRC)gsstype.h
+$(GLSRC)gp.h:$(GLSRC)stat_.h
$(GLSRC)gp.h:$(GLSRC)gsmemory.h
-$(GLSRC)gp.h:$(GLSRC)gpgetenv.h
$(GLSRC)gp.h:$(GLSRC)memory_.h
+$(GLSRC)gp.h:$(GLSRC)gpgetenv.h
$(GLSRC)gp.h:$(GLSRC)gslibctx.h
$(GLSRC)gp.h:$(GLSRC)gscdefs.h
-$(GLSRC)gp.h:$(GLSRC)stdint_.h
$(GLSRC)gp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gp.h:$(GLSRC)stdio_.h
-$(GLSRC)gp.h:$(GLSRC)gstypes.h
+$(GLSRC)gp.h:$(GLSRC)stdint_.h
+$(GLSRC)gp.h:$(GLSRC)gssprintf.h
$(GLSRC)gp.h:$(GLSRC)std.h
+$(GLSRC)gp.h:$(GLSRC)gstypes.h
$(GLSRC)gp.h:$(GLSRC)stdpre.h
$(GLSRC)gp.h:$(GLGEN)arch.h
-$(GLSRC)gp.h:$(GLSRC)gssprintf.h
$(GLSRC)gpcheck.h:$(GLSRC)std.h
$(GLSRC)gpcheck.h:$(GLSRC)stdpre.h
$(GLSRC)gpcheck.h:$(GLGEN)arch.h
@@ -3932,31 +3990,35 @@ $(GLSRC)memory_.h:$(GLGEN)arch.h
$(GLSRC)stat_.h:$(GLSRC)std.h
$(GLSRC)stat_.h:$(GLSRC)stdpre.h
$(GLSRC)stat_.h:$(GLGEN)arch.h
+$(GLSRC)stdio_.h:$(GLSRC)gssprintf.h
$(GLSRC)stdio_.h:$(GLSRC)std.h
$(GLSRC)stdio_.h:$(GLSRC)stdpre.h
$(GLSRC)stdio_.h:$(GLGEN)arch.h
-$(GLSRC)stdio_.h:$(GLSRC)gssprintf.h
$(GLSRC)string_.h:$(GLSRC)gsstrtok.h
$(GLSRC)string_.h:$(GLSRC)gsstrl.h
$(GLSRC)string_.h:$(GLSRC)std.h
$(GLSRC)string_.h:$(GLSRC)stdpre.h
$(GLSRC)string_.h:$(GLGEN)arch.h
+$(GLSRC)time_.h:$(GLGEN)gconfig_.h
+$(GLSRC)time_.h:$(GLSRC)std.h
+$(GLSRC)time_.h:$(GLSRC)stdpre.h
+$(GLSRC)time_.h:$(GLGEN)arch.h
$(GLSRC)unistd_.h:$(GLSRC)std.h
$(GLSRC)unistd_.h:$(GLSRC)stdpre.h
$(GLSRC)unistd_.h:$(GLGEN)arch.h
$(GLSRC)pipe_.h:$(GLSRC)stdio_.h
+$(GLSRC)pipe_.h:$(GLSRC)gssprintf.h
$(GLSRC)pipe_.h:$(GLSRC)std.h
$(GLSRC)pipe_.h:$(GLSRC)stdpre.h
$(GLSRC)pipe_.h:$(GLGEN)arch.h
-$(GLSRC)pipe_.h:$(GLSRC)gssprintf.h
$(GLSRC)jerror_.h:$(JSRCDIR)$(D)jerror.h
$(GLSRC)gxstdio.h:$(GLSRC)gsio.h
$(GLSRC)gslibctx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gslibctx.h:$(GLSRC)stdio_.h
+$(GLSRC)gslibctx.h:$(GLSRC)gssprintf.h
$(GLSRC)gslibctx.h:$(GLSRC)std.h
$(GLSRC)gslibctx.h:$(GLSRC)stdpre.h
$(GLSRC)gslibctx.h:$(GLGEN)arch.h
-$(GLSRC)gslibctx.h:$(GLSRC)gssprintf.h
$(GLSRC)gdebug.h:$(GLSRC)gdbflags.h
$(GLSRC)gdebug.h:$(GLSRC)std.h
$(GLSRC)gdebug.h:$(GLSRC)stdpre.h
@@ -3978,14 +4040,14 @@ $(GLSRC)gsmalloc.h:$(GLSRC)gxsync.h
$(GLSRC)gsmalloc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmalloc.h:$(GLSRC)gpsync.h
$(GLSRC)gsmalloc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmalloc.h:$(GLSRC)stdint_.h
$(GLSRC)gsmalloc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmalloc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsmalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmalloc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmalloc.h:$(GLSRC)std.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gstypes.h
$(GLSRC)gsmalloc.h:$(GLSRC)stdpre.h
$(GLSRC)gsmalloc.h:$(GLGEN)arch.h
-$(GLSRC)gsmalloc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmchunk.h:$(GLSRC)std.h
$(GLSRC)gsmchunk.h:$(GLSRC)stdpre.h
$(GLSRC)gsmchunk.h:$(GLGEN)arch.h
@@ -3995,20 +4057,20 @@ $(GLSRC)gsmdebug.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemory.h:$(GLSRC)gslibctx.h
$(GLSRC)gsmemory.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmemory.h:$(GLSRC)stdio_.h
-$(GLSRC)gsmemory.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemory.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmemory.h:$(GLSRC)std.h
+$(GLSRC)gsmemory.h:$(GLSRC)gstypes.h
$(GLSRC)gsmemory.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemory.h:$(GLGEN)arch.h
-$(GLSRC)gsmemory.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmemret.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmemret.h:$(GLSRC)gslibctx.h
$(GLSRC)gsmemret.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmemret.h:$(GLSRC)stdio_.h
-$(GLSRC)gsmemret.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemret.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmemret.h:$(GLSRC)std.h
+$(GLSRC)gsmemret.h:$(GLSRC)gstypes.h
$(GLSRC)gsmemret.h:$(GLSRC)stdpre.h
$(GLSRC)gsmemret.h:$(GLGEN)arch.h
-$(GLSRC)gsmemret.h:$(GLSRC)gssprintf.h
$(GLSRC)gsnogc.h:$(GLSRC)gsgc.h
$(GLSRC)gsnogc.h:$(GLSRC)gsalloc.h
$(GLSRC)gsnogc.h:$(GLSRC)std.h
@@ -4023,465 +4085,470 @@ $(GLSRC)gsstype.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstype.h:$(GLSRC)gslibctx.h
$(GLSRC)gsstype.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsstype.h:$(GLSRC)stdio_.h
-$(GLSRC)gsstype.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstype.h:$(GLSRC)gssprintf.h
$(GLSRC)gsstype.h:$(GLSRC)std.h
+$(GLSRC)gsstype.h:$(GLSRC)gstypes.h
$(GLSRC)gsstype.h:$(GLSRC)stdpre.h
$(GLSRC)gsstype.h:$(GLGEN)arch.h
-$(GLSRC)gsstype.h:$(GLSRC)gssprintf.h
$(GLSRC)gx.h:$(GLSRC)gdebug.h
$(GLSRC)gx.h:$(GLSRC)gsio.h
$(GLSRC)gx.h:$(GLSRC)gdbflags.h
$(GLSRC)gx.h:$(GLSRC)gserrors.h
$(GLSRC)gx.h:$(GLSRC)gsmemory.h
$(GLSRC)gx.h:$(GLSRC)gslibctx.h
-$(GLSRC)gx.h:$(GLSRC)gsgstate.h
$(GLSRC)gx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gx.h:$(GLSRC)stdio_.h
-$(GLSRC)gx.h:$(GLSRC)gstypes.h
+$(GLSRC)gx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gx.h:$(GLSRC)gssprintf.h
$(GLSRC)gx.h:$(GLSRC)std.h
+$(GLSRC)gx.h:$(GLSRC)gstypes.h
$(GLSRC)gx.h:$(GLSRC)stdpre.h
$(GLSRC)gx.h:$(GLGEN)arch.h
-$(GLSRC)gx.h:$(GLSRC)gssprintf.h
$(GLSRC)gxsync.h:$(GLSRC)gsmemory.h
$(GLSRC)gxsync.h:$(GLSRC)gpsync.h
$(GLSRC)gxsync.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxsync.h:$(GLSRC)stdint_.h
$(GLSRC)gxsync.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxsync.h:$(GLSRC)stdio_.h
-$(GLSRC)gxsync.h:$(GLSRC)gstypes.h
+$(GLSRC)gxsync.h:$(GLSRC)stdint_.h
+$(GLSRC)gxsync.h:$(GLSRC)gssprintf.h
$(GLSRC)gxsync.h:$(GLSRC)std.h
+$(GLSRC)gxsync.h:$(GLSRC)gstypes.h
$(GLSRC)gxsync.h:$(GLSRC)stdpre.h
$(GLSRC)gxsync.h:$(GLGEN)arch.h
-$(GLSRC)gxsync.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxclist.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gstrans.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxline.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstrans.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsht1.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclthrd.h:$(GLSRC)math_.h
$(GLSRC)gxclthrd.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxclthrd.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxband.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscindex.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsht.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscindex.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxtext.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscie.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstext.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclthrd.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscie.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxstate.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsropt.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsfont.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxftype.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsrect.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscms.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gslparam.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclio.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsio.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gp.h
-$(GLSRC)gxclthrd.h:$(GLSRC)memento.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclthrd.h:$(GLSRC)srdline.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gp.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclthrd.h:$(GLSRC)srdline.h
+$(GLSRC)gxclthrd.h:$(GLSRC)scommon.h
+$(GLSRC)gxclthrd.h:$(GLSRC)memento.h
$(GLSRC)gxclthrd.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclthrd.h:$(GLSRC)scommon.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stat_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclthrd.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclthrd.h:$(GLSRC)memory_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclthrd.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdio_.h
$(GLSRC)gxclthrd.h:$(GLSRC)gscompt.h
$(GLSRC)gxclthrd.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclthrd.h:$(GLSRC)stdint_.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclthrd.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclthrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gstypes.h
$(GLSRC)gxclthrd.h:$(GLSRC)std.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstypes.h
$(GLSRC)gxclthrd.h:$(GLSRC)stdpre.h
$(GLSRC)gxclthrd.h:$(GLGEN)arch.h
-$(GLSRC)gxclthrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevsop.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevsop.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gp.h
-$(GLSRC)gxdevsop.h:$(GLSRC)memento.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gp.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevsop.h:$(GLSRC)srdline.h
$(GLSRC)gxdevsop.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevsop.h:$(GLSRC)memento.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevsop.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevsop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevsop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevsop.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevsop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevsop.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevsop.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevsop.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevsop.h:$(GLSRC)std.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevsop.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevsop.h:$(GLGEN)arch.h
-$(GLSRC)gxdevsop.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevflp.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevflp.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevflp.h:$(GLSRC)gxtext.h
$(GLSRC)gdevflp.h:$(GLSRC)gstext.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevflp.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevflp.h:$(GLSRC)gsropt.h
$(GLSRC)gdevflp.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevflp.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevflp.h:$(GLSRC)gsfont.h
$(GLSRC)gdevflp.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevflp.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxftype.h
$(GLSRC)gdevflp.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevflp.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsrect.h
$(GLSRC)gdevflp.h:$(GLSRC)gscms.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevflp.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevflp.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevflp.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevflp.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevflp.h:$(GLSRC)gslparam.h
$(GLSRC)gdevflp.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscpm.h
$(GLSRC)gdevflp.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevflp.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevflp.h:$(GLSRC)gsio.h
-$(GLSRC)gdevflp.h:$(GLSRC)gp.h
-$(GLSRC)gdevflp.h:$(GLSRC)memento.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevflp.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevflp.h:$(GLSRC)srdline.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gp.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevflp.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevflp.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevflp.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevflp.h:$(GLSRC)srdline.h
$(GLSRC)gdevflp.h:$(GLSRC)scommon.h
+$(GLSRC)gdevflp.h:$(GLSRC)memento.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscsel.h
$(GLSRC)gdevflp.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevflp.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevflp.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevflp.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevflp.h:$(GLSRC)stat_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevflp.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevflp.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevflp.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevflp.h:$(GLSRC)memory_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevflp.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevflp.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevflp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdio_.h
$(GLSRC)gdevflp.h:$(GLSRC)gscompt.h
$(GLSRC)gdevflp.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevflp.h:$(GLSRC)stdint_.h
$(GLSRC)gdevflp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevflp.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevflp.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevflp.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevflp.h:$(GLSRC)gstypes.h
$(GLSRC)gdevflp.h:$(GLSRC)std.h
+$(GLSRC)gdevflp.h:$(GLSRC)gstypes.h
$(GLSRC)gdevflp.h:$(GLSRC)stdpre.h
$(GLSRC)gdevflp.h:$(GLGEN)arch.h
-$(GLSRC)gdevflp.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevflp.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevoflt.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtext.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstext.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsropt.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfont.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxftype.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrect.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscms.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslparam.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscpm.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsio.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gp.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memento.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)srdline.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gp.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)srdline.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)scommon.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscsel.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stat_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdio_.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscompt.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdint_.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstypes.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)std.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstypes.h
$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdpre.h
$(GLSRC)gdevkrnlsclass.h:$(GLGEN)arch.h
-$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxtext.h
$(GLSRC)gdevsclass.h:$(GLSRC)gstext.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevsclass.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsropt.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsfont.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxftype.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsrect.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscms.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gslparam.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscpm.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsio.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gp.h
-$(GLSRC)gdevsclass.h:$(GLSRC)memento.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevsclass.h:$(GLSRC)srdline.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gp.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevsclass.h:$(GLSRC)srdline.h
$(GLSRC)gdevsclass.h:$(GLSRC)scommon.h
+$(GLSRC)gdevsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscsel.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stat_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevsclass.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevsclass.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdio_.h
$(GLSRC)gdevsclass.h:$(GLSRC)gscompt.h
$(GLSRC)gdevsclass.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevsclass.h:$(GLSRC)stdint_.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevsclass.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevsclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gstypes.h
$(GLSRC)gdevsclass.h:$(GLSRC)std.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gstypes.h
$(GLSRC)gdevsclass.h:$(GLSRC)stdpre.h
$(GLSRC)gdevsclass.h:$(GLGEN)arch.h
-$(GLSRC)gdevsclass.h:$(GLSRC)gssprintf.h
$(GLSRC)gsnotify.h:$(GLSRC)gsstype.h
$(GLSRC)gsnotify.h:$(GLSRC)gsmemory.h
$(GLSRC)gsnotify.h:$(GLSRC)gslibctx.h
$(GLSRC)gsnotify.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnotify.h:$(GLSRC)stdio_.h
-$(GLSRC)gsnotify.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnotify.h:$(GLSRC)gssprintf.h
$(GLSRC)gsnotify.h:$(GLSRC)std.h
+$(GLSRC)gsnotify.h:$(GLSRC)gstypes.h
$(GLSRC)gsnotify.h:$(GLSRC)stdpre.h
$(GLSRC)gsnotify.h:$(GLGEN)arch.h
-$(GLSRC)gsnotify.h:$(GLSRC)gssprintf.h
$(GLSRC)gsstruct.h:$(GLSRC)gsstype.h
$(GLSRC)gsstruct.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstruct.h:$(GLSRC)gslibctx.h
$(GLSRC)gsstruct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsstruct.h:$(GLSRC)stdio_.h
-$(GLSRC)gsstruct.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstruct.h:$(GLSRC)gssprintf.h
$(GLSRC)gsstruct.h:$(GLSRC)std.h
+$(GLSRC)gsstruct.h:$(GLSRC)gstypes.h
$(GLSRC)gsstruct.h:$(GLSRC)stdpre.h
$(GLSRC)gsstruct.h:$(GLGEN)arch.h
-$(GLSRC)gsstruct.h:$(GLSRC)gssprintf.h
$(GLSRC)gsbitmap.h:$(GLSRC)gsstype.h
$(GLSRC)gsbitmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gsbitmap.h:$(GLSRC)gslibctx.h
$(GLSRC)gsbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsbitmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gsbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gsbitmap.h:$(GLSRC)std.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gstypes.h
$(GLSRC)gsbitmap.h:$(GLSRC)stdpre.h
$(GLSRC)gsbitmap.h:$(GLGEN)arch.h
-$(GLSRC)gsbitmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gsbitops.h:$(GLSRC)gxcindex.h
$(GLSRC)gsbitops.h:$(GLSRC)stdint_.h
-$(GLSRC)gsbitops.h:$(GLSRC)gstypes.h
$(GLSRC)gsbitops.h:$(GLSRC)std.h
+$(GLSRC)gsbitops.h:$(GLSRC)gstypes.h
$(GLSRC)gsbitops.h:$(GLSRC)stdpre.h
$(GLSRC)gsbitops.h:$(GLGEN)arch.h
$(GLSRC)gsbittab.h:$(GLSRC)gstypes.h
@@ -4490,8 +4557,8 @@ $(GLSRC)gsflip.h:$(GLSRC)stdpre.h
$(GLSRC)gsuid.h:$(GLSRC)std.h
$(GLSRC)gsuid.h:$(GLSRC)stdpre.h
$(GLSRC)gsuid.h:$(GLGEN)arch.h
-$(GLSRC)gsutil.h:$(GLSRC)gstypes.h
$(GLSRC)gsutil.h:$(GLSRC)std.h
+$(GLSRC)gsutil.h:$(GLSRC)gstypes.h
$(GLSRC)gsutil.h:$(GLSRC)stdpre.h
$(GLSRC)gsutil.h:$(GLGEN)arch.h
$(GLSRC)gxbitmap.h:$(GLSRC)gsbitmap.h
@@ -4500,11 +4567,11 @@ $(GLSRC)gxbitmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxbitmap.h:$(GLSRC)gslibctx.h
$(GLSRC)gxbitmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbitmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gxbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxbitmap.h:$(GLSRC)std.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gstypes.h
$(GLSRC)gxbitmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxbitmap.h:$(GLGEN)arch.h
-$(GLSRC)gxbitmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfarith.h:$(GLSRC)gxarith.h
$(GLSRC)gxfarith.h:$(GLSRC)stdpre.h
$(GLSRC)gxfixed.h:$(GLSRC)std.h
@@ -4518,30 +4585,30 @@ $(GLSRC)gxobj.h:$(GLSRC)gsmemory.h
$(GLSRC)gxobj.h:$(GLSRC)gslibctx.h
$(GLSRC)gxobj.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxobj.h:$(GLSRC)stdio_.h
-$(GLSRC)gxobj.h:$(GLSRC)gstypes.h
+$(GLSRC)gxobj.h:$(GLSRC)gssprintf.h
$(GLSRC)gxobj.h:$(GLSRC)std.h
+$(GLSRC)gxobj.h:$(GLSRC)gstypes.h
$(GLSRC)gxobj.h:$(GLSRC)stdpre.h
$(GLSRC)gxobj.h:$(GLGEN)arch.h
-$(GLSRC)gxobj.h:$(GLSRC)gssprintf.h
$(GLSRC)gxrplane.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxrplane.h:$(GLSRC)gsparam.h
$(GLSRC)gxrplane.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsparam.h
$(GLSRC)gxrplane.h:$(GLSRC)scommon.h
$(GLSRC)gxrplane.h:$(GLSRC)gsstype.h
$(GLSRC)gxrplane.h:$(GLSRC)gsmemory.h
$(GLSRC)gxrplane.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxrplane.h:$(GLSRC)stdint_.h
-$(GLSRC)gxrplane.h:$(GLSRC)gsgstate.h
$(GLSRC)gxrplane.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxrplane.h:$(GLSRC)stdio_.h
-$(GLSRC)gxrplane.h:$(GLSRC)gstypes.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxrplane.h:$(GLSRC)stdint_.h
+$(GLSRC)gxrplane.h:$(GLSRC)gssprintf.h
$(GLSRC)gxrplane.h:$(GLSRC)std.h
+$(GLSRC)gxrplane.h:$(GLSRC)gstypes.h
$(GLSRC)gxrplane.h:$(GLSRC)stdpre.h
$(GLSRC)gxrplane.h:$(GLGEN)arch.h
-$(GLSRC)gxrplane.h:$(GLSRC)gssprintf.h
$(GLSRC)gsrect.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsrect.h:$(GLSRC)gstypes.h
$(GLSRC)gsrect.h:$(GLSRC)std.h
+$(GLSRC)gsrect.h:$(GLSRC)gstypes.h
$(GLSRC)gsrect.h:$(GLSRC)stdpre.h
$(GLSRC)gsrect.h:$(GLGEN)arch.h
$(GLSRC)gxalloc.h:$(GLSRC)gxobj.h
@@ -4552,20 +4619,20 @@ $(GLSRC)gxalloc.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxalloc.h:$(GLSRC)gsstype.h
$(GLSRC)gxalloc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxalloc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxalloc.h:$(GLSRC)gsalloc.h
-$(GLSRC)gxalloc.h:$(GLSRC)stdint_.h
$(GLSRC)gxalloc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsalloc.h
$(GLSRC)gxalloc.h:$(GLSRC)stdio_.h
-$(GLSRC)gxalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxalloc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxalloc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxalloc.h:$(GLSRC)std.h
+$(GLSRC)gxalloc.h:$(GLSRC)gstypes.h
$(GLSRC)gxalloc.h:$(GLSRC)stdpre.h
$(GLSRC)gxalloc.h:$(GLGEN)arch.h
-$(GLSRC)gxalloc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxbitops.h:$(GLSRC)gsbitops.h
$(GLSRC)gxbitops.h:$(GLSRC)gxcindex.h
$(GLSRC)gxbitops.h:$(GLSRC)stdint_.h
-$(GLSRC)gxbitops.h:$(GLSRC)gstypes.h
$(GLSRC)gxbitops.h:$(GLSRC)std.h
+$(GLSRC)gxbitops.h:$(GLSRC)gstypes.h
$(GLSRC)gxbitops.h:$(GLSRC)stdpre.h
$(GLSRC)gxbitops.h:$(GLGEN)arch.h
$(GLSRC)gxcindex.h:$(GLSRC)stdint_.h
@@ -4582,199 +4649,206 @@ $(GLSRC)gxfont42.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont42.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont42.h:$(GLSRC)gstext.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont42.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscspace.h
$(GLSRC)gxfont42.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont42.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont42.h:$(GLSRC)gslparam.h
$(GLSRC)gxfont42.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfont42.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont42.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont42.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont42.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont42.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont42.h:$(GLSRC)gslparam.h
$(GLSRC)gxfont42.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont42.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfont42.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfont42.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfont42.h:$(GLSRC)memento.h
$(GLSRC)gxfont42.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont42.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont42.h:$(GLSRC)gxsync.h
$(GLSRC)gxfont42.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont42.h:$(GLSRC)memento.h
$(GLSRC)gxfont42.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfont42.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont42.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont42.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfont42.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont42.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont42.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont42.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont42.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont42.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont42.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont42.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont42.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont42.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfont42.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont42.h:$(GLSRC)std.h
+$(GLSRC)gxfont42.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont42.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont42.h:$(GLGEN)arch.h
-$(GLSRC)gxfont42.h:$(GLSRC)gssprintf.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcomp.h
$(GLSRC)gstrans.h:$(GLSRC)gdevp14.h
$(GLSRC)gstrans.h:$(GLSRC)gxcolor2.h
$(GLSRC)gstrans.h:$(GLSRC)gxpcolor.h
$(GLSRC)gstrans.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gstrans.h:$(GLSRC)gsequivc.h
$(GLSRC)gstrans.h:$(GLSRC)gxblend.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcomp.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdcolor.h
$(GLSRC)gstrans.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gstrans.h:$(GLSRC)gsequivc.h
$(GLSRC)gstrans.h:$(GLSRC)gscolor2.h
+$(GLSRC)gstrans.h:$(GLSRC)gscindex.h
$(GLSRC)gstrans.h:$(GLSRC)gxdevice.h
$(GLSRC)gstrans.h:$(GLSRC)gxcpath.h
$(GLSRC)gstrans.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstrans.h:$(GLSRC)gxpcache.h
-$(GLSRC)gstrans.h:$(GLSRC)gscindex.h
$(GLSRC)gstrans.h:$(GLSRC)gsptype1.h
-$(GLSRC)gstrans.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstrans.h:$(GLSRC)gxtext.h
-$(GLSRC)gstrans.h:$(GLSRC)gspcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gscie.h
$(GLSRC)gstrans.h:$(GLSRC)gstext.h
-$(GLSRC)gstrans.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gsnamecl.h
$(GLSRC)gstrans.h:$(GLSRC)gstparam.h
-$(GLSRC)gstrans.h:$(GLSRC)gscie.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcmap.h
-$(GLSRC)gstrans.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gstrans.h:$(GLSRC)gspcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcspace.h
$(GLSRC)gstrans.h:$(GLSRC)gsropt.h
$(GLSRC)gstrans.h:$(GLSRC)gsfunc.h
-$(GLSRC)gstrans.h:$(GLSRC)gxctable.h
-$(GLSRC)gstrans.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmalloc.h
$(GLSRC)gstrans.h:$(GLSRC)gxrplane.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcspace.h
-$(GLSRC)gstrans.h:$(GLSRC)gxiclass.h
-$(GLSRC)gstrans.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gxctable.h
+$(GLSRC)gstrans.h:$(GLSRC)gsuid.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gsimage.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdda.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcvalue.h
$(GLSRC)gstrans.h:$(GLSRC)gsfont.h
$(GLSRC)gstrans.h:$(GLSRC)gxfmap.h
-$(GLSRC)gstrans.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gstrans.h:$(GLSRC)gxpath.h
-$(GLSRC)gstrans.h:$(GLSRC)gspenum.h
-$(GLSRC)gstrans.h:$(GLSRC)gxtmap.h
-$(GLSRC)gstrans.h:$(GLSRC)gsimage.h
+$(GLSRC)gstrans.h:$(GLSRC)gxiclass.h
+$(GLSRC)gstrans.h:$(GLSRC)gxftype.h
$(GLSRC)gstrans.h:$(GLSRC)gxfrac.h
-$(GLSRC)gstrans.h:$(GLSRC)gxdda.h
-$(GLSRC)gstrans.h:$(GLSRC)gslparam.h
-$(GLSRC)gstrans.h:$(GLSRC)gxbcache.h
-$(GLSRC)gstrans.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gstrans.h:$(GLSRC)gsrect.h
$(GLSRC)gstrans.h:$(GLSRC)gscms.h
-$(GLSRC)gstrans.h:$(GLSRC)gxftype.h
-$(GLSRC)gstrans.h:$(GLSRC)gsdevice.h
$(GLSRC)gstrans.h:$(GLSRC)gscspace.h
-$(GLSRC)gstrans.h:$(GLSRC)gsuid.h
+$(GLSRC)gstrans.h:$(GLSRC)gxpath.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdevice.h
$(GLSRC)gstrans.h:$(GLSRC)gxarith.h
-$(GLSRC)gstrans.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstrans.h:$(GLSRC)gxstdio.h
+$(GLSRC)gstrans.h:$(GLSRC)gspenum.h
+$(GLSRC)gstrans.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstrans.h:$(GLSRC)gsrect.h
+$(GLSRC)gstrans.h:$(GLSRC)gslparam.h
$(GLSRC)gstrans.h:$(GLSRC)gsxfont.h
-$(GLSRC)gstrans.h:$(GLSRC)gxfixed.h
-$(GLSRC)gstrans.h:$(GLSRC)gsrefct.h
-$(GLSRC)gstrans.h:$(GLSRC)gscpm.h
$(GLSRC)gstrans.h:$(GLSRC)gsiparam.h
-$(GLSRC)gstrans.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstrans.h:$(GLSRC)gsio.h
-$(GLSRC)gstrans.h:$(GLSRC)gp.h
-$(GLSRC)gstrans.h:$(GLSRC)memento.h
-$(GLSRC)gstrans.h:$(GLSRC)gsparam.h
-$(GLSRC)gstrans.h:$(GLSRC)gsmatrix.h
$(GLSRC)gstrans.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gstrans.h:$(GLSRC)srdline.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrans.h:$(GLSRC)gscpm.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstrans.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstrans.h:$(GLSRC)gsparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gp.h
+$(GLSRC)gstrans.h:$(GLSRC)gsccolor.h
$(GLSRC)gstrans.h:$(GLSRC)gsstruct.h
$(GLSRC)gstrans.h:$(GLSRC)gxsync.h
-$(GLSRC)gstrans.h:$(GLSRC)gscsel.h
+$(GLSRC)gstrans.h:$(GLSRC)srdline.h
$(GLSRC)gstrans.h:$(GLSRC)scommon.h
+$(GLSRC)gstrans.h:$(GLSRC)memento.h
+$(GLSRC)gstrans.h:$(GLSRC)gscsel.h
$(GLSRC)gstrans.h:$(GLSRC)gsbitmap.h
$(GLSRC)gstrans.h:$(GLSRC)gsfname.h
-$(GLSRC)gstrans.h:$(GLSRC)gsccolor.h
$(GLSRC)gstrans.h:$(GLSRC)gsstype.h
+$(GLSRC)gstrans.h:$(GLSRC)stat_.h
+$(GLSRC)gstrans.h:$(GLSRC)gxtmap.h
$(GLSRC)gstrans.h:$(GLSRC)gsmemory.h
$(GLSRC)gstrans.h:$(GLSRC)gpsync.h
-$(GLSRC)gstrans.h:$(GLSRC)gpgetenv.h
$(GLSRC)gstrans.h:$(GLSRC)memory_.h
+$(GLSRC)gstrans.h:$(GLSRC)gpgetenv.h
$(GLSRC)gstrans.h:$(GLSRC)gslibctx.h
$(GLSRC)gstrans.h:$(GLSRC)gscdefs.h
+$(GLSRC)gstrans.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gstrans.h:$(GLSRC)stdio_.h
$(GLSRC)gstrans.h:$(GLSRC)gscompt.h
$(GLSRC)gstrans.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstrans.h:$(GLSRC)stdint_.h
$(GLSRC)gstrans.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrans.h:$(GLSRC)stdint_.h
+$(GLSRC)gstrans.h:$(GLSRC)gssprintf.h
$(GLSRC)gstrans.h:$(GLSRC)gsccode.h
-$(GLSRC)gstrans.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstrans.h:$(GLSRC)stdio_.h
-$(GLSRC)gstrans.h:$(GLSRC)gstypes.h
$(GLSRC)gstrans.h:$(GLSRC)std.h
+$(GLSRC)gstrans.h:$(GLSRC)gstypes.h
$(GLSRC)gstrans.h:$(GLSRC)stdpre.h
$(GLSRC)gstrans.h:$(GLGEN)arch.h
-$(GLSRC)gstrans.h:$(GLSRC)gssprintf.h
$(GLSRC)scommon.h:$(GLSRC)gsstype.h
$(GLSRC)scommon.h:$(GLSRC)gsmemory.h
$(GLSRC)scommon.h:$(GLSRC)gslibctx.h
-$(GLSRC)scommon.h:$(GLSRC)stdint_.h
$(GLSRC)scommon.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scommon.h:$(GLSRC)stdio_.h
-$(GLSRC)scommon.h:$(GLSRC)gstypes.h
+$(GLSRC)scommon.h:$(GLSRC)stdint_.h
+$(GLSRC)scommon.h:$(GLSRC)gssprintf.h
$(GLSRC)scommon.h:$(GLSRC)std.h
+$(GLSRC)scommon.h:$(GLSRC)gstypes.h
$(GLSRC)scommon.h:$(GLSRC)stdpre.h
$(GLSRC)scommon.h:$(GLGEN)arch.h
-$(GLSRC)scommon.h:$(GLSRC)gssprintf.h
$(GLSRC)stream.h:$(GLSRC)gxiodev.h
-$(GLSRC)stream.h:$(GLSRC)stat_.h
+$(GLSRC)stream.h:$(GLSRC)gsparam.h
$(GLSRC)stream.h:$(GLSRC)gp.h
$(GLSRC)stream.h:$(GLSRC)srdline.h
$(GLSRC)stream.h:$(GLSRC)scommon.h
$(GLSRC)stream.h:$(GLSRC)gsfname.h
$(GLSRC)stream.h:$(GLSRC)gsstype.h
+$(GLSRC)stream.h:$(GLSRC)stat_.h
$(GLSRC)stream.h:$(GLSRC)gsmemory.h
-$(GLSRC)stream.h:$(GLSRC)gpgetenv.h
$(GLSRC)stream.h:$(GLSRC)memory_.h
+$(GLSRC)stream.h:$(GLSRC)gpgetenv.h
$(GLSRC)stream.h:$(GLSRC)gslibctx.h
$(GLSRC)stream.h:$(GLSRC)gscdefs.h
-$(GLSRC)stream.h:$(GLSRC)stdint_.h
$(GLSRC)stream.h:$(GLSRC)gs_dll_call.h
$(GLSRC)stream.h:$(GLSRC)stdio_.h
-$(GLSRC)stream.h:$(GLSRC)gstypes.h
+$(GLSRC)stream.h:$(GLSRC)stdint_.h
+$(GLSRC)stream.h:$(GLSRC)gssprintf.h
$(GLSRC)stream.h:$(GLSRC)std.h
+$(GLSRC)stream.h:$(GLSRC)gstypes.h
$(GLSRC)stream.h:$(GLSRC)stdpre.h
$(GLSRC)stream.h:$(GLGEN)arch.h
-$(GLSRC)stream.h:$(GLSRC)gssprintf.h
$(GLSRC)ramfs.h:$(GLSRC)stream.h
$(GLSRC)ramfs.h:$(GLSRC)gxiodev.h
-$(GLSRC)ramfs.h:$(GLSRC)stat_.h
+$(GLSRC)ramfs.h:$(GLSRC)gsparam.h
$(GLSRC)ramfs.h:$(GLSRC)gp.h
$(GLSRC)ramfs.h:$(GLSRC)srdline.h
$(GLSRC)ramfs.h:$(GLSRC)scommon.h
$(GLSRC)ramfs.h:$(GLSRC)gsfname.h
$(GLSRC)ramfs.h:$(GLSRC)gsstype.h
+$(GLSRC)ramfs.h:$(GLSRC)stat_.h
$(GLSRC)ramfs.h:$(GLSRC)gsmemory.h
-$(GLSRC)ramfs.h:$(GLSRC)gpgetenv.h
$(GLSRC)ramfs.h:$(GLSRC)memory_.h
+$(GLSRC)ramfs.h:$(GLSRC)gpgetenv.h
$(GLSRC)ramfs.h:$(GLSRC)gslibctx.h
$(GLSRC)ramfs.h:$(GLSRC)gscdefs.h
-$(GLSRC)ramfs.h:$(GLSRC)stdint_.h
$(GLSRC)ramfs.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ramfs.h:$(GLSRC)stdio_.h
-$(GLSRC)ramfs.h:$(GLSRC)gstypes.h
+$(GLSRC)ramfs.h:$(GLSRC)stdint_.h
+$(GLSRC)ramfs.h:$(GLSRC)gssprintf.h
$(GLSRC)ramfs.h:$(GLSRC)std.h
+$(GLSRC)ramfs.h:$(GLSRC)gstypes.h
$(GLSRC)ramfs.h:$(GLSRC)stdpre.h
$(GLSRC)ramfs.h:$(GLGEN)arch.h
-$(GLSRC)ramfs.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsmd5.h:$(GLSRC)memory_.h
+$(GLSRC)gsmd5.h:$(GLSRC)std.h
+$(GLSRC)gsmd5.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmd5.h:$(GLGEN)arch.h
$(GLSRC)sha2.h:$(GLSRC)stdint_.h
$(GLSRC)sha2.h:$(GLSRC)std.h
$(GLSRC)sha2.h:$(GLSRC)stdpre.h
$(GLSRC)sha2.h:$(GLGEN)arch.h
$(GLSRC)gsalpha.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsccode.h:$(GLSRC)gstypes.h
$(GLSRC)gsccode.h:$(GLSRC)std.h
+$(GLSRC)gsccode.h:$(GLSRC)gstypes.h
$(GLSRC)gsccode.h:$(GLSRC)stdpre.h
$(GLSRC)gsccode.h:$(GLGEN)arch.h
$(GLSRC)gsccolor.h:$(GLSRC)gsstype.h
@@ -4782,15 +4856,15 @@ $(GLSRC)gsccolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gsccolor.h:$(GLSRC)gslibctx.h
$(GLSRC)gsccolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsccolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gsccolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsccolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gsccolor.h:$(GLSRC)std.h
+$(GLSRC)gsccolor.h:$(GLSRC)gstypes.h
$(GLSRC)gsccolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsccolor.h:$(GLGEN)arch.h
-$(GLSRC)gsccolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gscedata.h:$(GLSRC)stdpre.h
$(GLSRC)gscencs.h:$(GLSRC)gsccode.h
-$(GLSRC)gscencs.h:$(GLSRC)gstypes.h
$(GLSRC)gscencs.h:$(GLSRC)std.h
+$(GLSRC)gscencs.h:$(GLSRC)gstypes.h
$(GLSRC)gscencs.h:$(GLSRC)stdpre.h
$(GLSRC)gscencs.h:$(GLGEN)arch.h
$(GLSRC)gsclipsr.h:$(GLSRC)gsgstate.h
@@ -4804,33 +4878,33 @@ $(GLSRC)gscoord.h:$(GLSRC)scommon.h
$(GLSRC)gscoord.h:$(GLSRC)gsstype.h
$(GLSRC)gscoord.h:$(GLSRC)gsmemory.h
$(GLSRC)gscoord.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscoord.h:$(GLSRC)stdint_.h
-$(GLSRC)gscoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gscoord.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscoord.h:$(GLSRC)stdio_.h
-$(GLSRC)gscoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gscoord.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscoord.h:$(GLSRC)stdint_.h
+$(GLSRC)gscoord.h:$(GLSRC)gssprintf.h
$(GLSRC)gscoord.h:$(GLSRC)std.h
+$(GLSRC)gscoord.h:$(GLSRC)gstypes.h
$(GLSRC)gscoord.h:$(GLSRC)stdpre.h
$(GLSRC)gscoord.h:$(GLGEN)arch.h
-$(GLSRC)gscoord.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsdevice.h:$(GLSRC)gsparam.h
$(GLSRC)gsdevice.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsparam.h
$(GLSRC)gsdevice.h:$(GLSRC)scommon.h
$(GLSRC)gsdevice.h:$(GLSRC)gsstype.h
$(GLSRC)gsdevice.h:$(GLSRC)gsmemory.h
$(GLSRC)gsdevice.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdevice.h:$(GLSRC)stdint_.h
-$(GLSRC)gsdevice.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdevice.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdevice.h:$(GLSRC)stdio_.h
-$(GLSRC)gsdevice.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdevice.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdevice.h:$(GLSRC)gssprintf.h
$(GLSRC)gsdevice.h:$(GLSRC)std.h
+$(GLSRC)gsdevice.h:$(GLSRC)gstypes.h
$(GLSRC)gsdevice.h:$(GLSRC)stdpre.h
$(GLSRC)gsdevice.h:$(GLGEN)arch.h
-$(GLSRC)gsdevice.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfcmap.h:$(GLSRC)gsccode.h
-$(GLSRC)gsfcmap.h:$(GLSRC)gstypes.h
$(GLSRC)gsfcmap.h:$(GLSRC)std.h
+$(GLSRC)gsfcmap.h:$(GLSRC)gstypes.h
$(GLSRC)gsfcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gsfcmap.h:$(GLGEN)arch.h
$(GLSRC)gsfname.h:$(GLSRC)std.h
@@ -4841,15 +4915,15 @@ $(GLSRC)gsfont.h:$(GLSRC)scommon.h
$(GLSRC)gsfont.h:$(GLSRC)gsstype.h
$(GLSRC)gsfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfont.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfont.h:$(GLSRC)stdint_.h
-$(GLSRC)gsfont.h:$(GLSRC)gsgstate.h
$(GLSRC)gsfont.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfont.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfont.h:$(GLSRC)std.h
+$(GLSRC)gsfont.h:$(GLSRC)gstypes.h
$(GLSRC)gsfont.h:$(GLSRC)stdpre.h
$(GLSRC)gsfont.h:$(GLGEN)arch.h
-$(GLSRC)gsfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gsgdata.h:$(GLSRC)gsgcache.h
$(GLSRC)gsgdata.h:$(GLSRC)gsfont.h
$(GLSRC)gsgdata.h:$(GLSRC)gsmatrix.h
@@ -4857,37 +4931,37 @@ $(GLSRC)gsgdata.h:$(GLSRC)scommon.h
$(GLSRC)gsgdata.h:$(GLSRC)gsstype.h
$(GLSRC)gsgdata.h:$(GLSRC)gsmemory.h
$(GLSRC)gsgdata.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsgdata.h:$(GLSRC)stdint_.h
-$(GLSRC)gsgdata.h:$(GLSRC)gsgstate.h
$(GLSRC)gsgdata.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgdata.h:$(GLSRC)stdio_.h
-$(GLSRC)gsgdata.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsgdata.h:$(GLSRC)stdint_.h
+$(GLSRC)gsgdata.h:$(GLSRC)gssprintf.h
$(GLSRC)gsgdata.h:$(GLSRC)std.h
+$(GLSRC)gsgdata.h:$(GLSRC)gstypes.h
$(GLSRC)gsgdata.h:$(GLSRC)stdpre.h
$(GLSRC)gsgdata.h:$(GLGEN)arch.h
-$(GLSRC)gsgdata.h:$(GLSRC)gssprintf.h
$(GLSRC)gsgcache.h:$(GLSRC)scommon.h
$(GLSRC)gsgcache.h:$(GLSRC)gsstype.h
$(GLSRC)gsgcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gsgcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsgcache.h:$(GLSRC)stdint_.h
$(GLSRC)gsgcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsgcache.h:$(GLSRC)stdio_.h
-$(GLSRC)gsgcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsgcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gsgcache.h:$(GLSRC)std.h
+$(GLSRC)gsgcache.h:$(GLSRC)gstypes.h
$(GLSRC)gsgcache.h:$(GLSRC)stdpre.h
$(GLSRC)gsgcache.h:$(GLGEN)arch.h
-$(GLSRC)gsgcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gshsb.h:$(GLSRC)gsgstate.h
$(GLSRC)gsht.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsht.h:$(GLSRC)gstypes.h
$(GLSRC)gsht.h:$(GLSRC)std.h
+$(GLSRC)gsht.h:$(GLSRC)gstypes.h
$(GLSRC)gsht.h:$(GLSRC)stdpre.h
$(GLSRC)gsht.h:$(GLGEN)arch.h
$(GLSRC)gsht1.h:$(GLSRC)gsht.h
$(GLSRC)gsht1.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsht1.h:$(GLSRC)gstypes.h
$(GLSRC)gsht1.h:$(GLSRC)std.h
+$(GLSRC)gsht1.h:$(GLSRC)gstypes.h
$(GLSRC)gsht1.h:$(GLSRC)stdpre.h
$(GLSRC)gsht1.h:$(GLGEN)arch.h
$(GLSRC)gsjconf.h:$(GLSRC)stdpre.h
@@ -4899,57 +4973,57 @@ $(GLSRC)gsmatrix.h:$(GLSRC)scommon.h
$(GLSRC)gsmatrix.h:$(GLSRC)gsstype.h
$(GLSRC)gsmatrix.h:$(GLSRC)gsmemory.h
$(GLSRC)gsmatrix.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsmatrix.h:$(GLSRC)stdint_.h
$(GLSRC)gsmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsmatrix.h:$(GLSRC)stdio_.h
-$(GLSRC)gsmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmatrix.h:$(GLSRC)stdint_.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gssprintf.h
$(GLSRC)gsmatrix.h:$(GLSRC)std.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gstypes.h
$(GLSRC)gsmatrix.h:$(GLSRC)stdpre.h
$(GLSRC)gsmatrix.h:$(GLGEN)arch.h
-$(GLSRC)gsmatrix.h:$(GLSRC)gssprintf.h
$(GLSRC)gxbitfmt.h:$(GLSRC)stdpre.h
$(GLSRC)gxcomp.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxcomp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcomp.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcomp.h:$(GLSRC)memento.h
$(GLSRC)gxcomp.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcomp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcomp.h:$(GLSRC)scommon.h
+$(GLSRC)gxcomp.h:$(GLSRC)memento.h
$(GLSRC)gxcomp.h:$(GLSRC)gsstype.h
$(GLSRC)gxcomp.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcomp.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcomp.h:$(GLSRC)gscompt.h
-$(GLSRC)gxcomp.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcomp.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcomp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcomp.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcomp.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcomp.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcomp.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcomp.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcomp.h:$(GLSRC)std.h
+$(GLSRC)gxcomp.h:$(GLSRC)gstypes.h
$(GLSRC)gxcomp.h:$(GLSRC)stdpre.h
$(GLSRC)gxcomp.h:$(GLGEN)arch.h
-$(GLSRC)gxcomp.h:$(GLSRC)gssprintf.h
$(GLSRC)gsovrc.h:$(GLSRC)gxcomp.h
$(GLSRC)gsovrc.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gsovrc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsovrc.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsovrc.h:$(GLSRC)memento.h
$(GLSRC)gsovrc.h:$(GLSRC)gsparam.h
-$(GLSRC)gsovrc.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsovrc.h:$(GLSRC)scommon.h
+$(GLSRC)gsovrc.h:$(GLSRC)memento.h
$(GLSRC)gsovrc.h:$(GLSRC)gsstype.h
$(GLSRC)gsovrc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsovrc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsovrc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdio_.h
$(GLSRC)gsovrc.h:$(GLSRC)gscompt.h
$(GLSRC)gsovrc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsovrc.h:$(GLSRC)stdint_.h
$(GLSRC)gsovrc.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsovrc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsovrc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsovrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsovrc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsovrc.h:$(GLSRC)std.h
+$(GLSRC)gsovrc.h:$(GLSRC)gstypes.h
$(GLSRC)gsovrc.h:$(GLSRC)stdpre.h
$(GLSRC)gsovrc.h:$(GLGEN)arch.h
-$(GLSRC)gsovrc.h:$(GLSRC)gssprintf.h
$(GLSRC)gspaint.h:$(GLSRC)gsgstate.h
$(GLSRC)gspaint.h:$(GLSRC)stdpre.h
$(GLSRC)gsparam.h:$(GLSRC)gsstype.h
@@ -4957,287 +5031,287 @@ $(GLSRC)gsparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gsparam.h:$(GLSRC)gslibctx.h
$(GLSRC)gsparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gsparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gsparam.h:$(GLSRC)std.h
+$(GLSRC)gsparam.h:$(GLSRC)gstypes.h
$(GLSRC)gsparam.h:$(GLSRC)stdpre.h
$(GLSRC)gsparam.h:$(GLGEN)arch.h
-$(GLSRC)gsparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gsparams.h:$(GLSRC)stream.h
$(GLSRC)gsparams.h:$(GLSRC)gxiodev.h
-$(GLSRC)gsparams.h:$(GLSRC)stat_.h
-$(GLSRC)gsparams.h:$(GLSRC)gp.h
$(GLSRC)gsparams.h:$(GLSRC)gsparam.h
+$(GLSRC)gsparams.h:$(GLSRC)gp.h
$(GLSRC)gsparams.h:$(GLSRC)srdline.h
$(GLSRC)gsparams.h:$(GLSRC)scommon.h
$(GLSRC)gsparams.h:$(GLSRC)gsfname.h
$(GLSRC)gsparams.h:$(GLSRC)gsstype.h
+$(GLSRC)gsparams.h:$(GLSRC)stat_.h
$(GLSRC)gsparams.h:$(GLSRC)gsmemory.h
-$(GLSRC)gsparams.h:$(GLSRC)gpgetenv.h
$(GLSRC)gsparams.h:$(GLSRC)memory_.h
+$(GLSRC)gsparams.h:$(GLSRC)gpgetenv.h
$(GLSRC)gsparams.h:$(GLSRC)gslibctx.h
$(GLSRC)gsparams.h:$(GLSRC)gscdefs.h
-$(GLSRC)gsparams.h:$(GLSRC)stdint_.h
$(GLSRC)gsparams.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparams.h:$(GLSRC)stdio_.h
-$(GLSRC)gsparams.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparams.h:$(GLSRC)stdint_.h
+$(GLSRC)gsparams.h:$(GLSRC)gssprintf.h
$(GLSRC)gsparams.h:$(GLSRC)std.h
+$(GLSRC)gsparams.h:$(GLSRC)gstypes.h
$(GLSRC)gsparams.h:$(GLSRC)stdpre.h
$(GLSRC)gsparams.h:$(GLGEN)arch.h
-$(GLSRC)gsparams.h:$(GLSRC)gssprintf.h
$(GLSRC)gsparamx.h:$(GLSRC)gsparam.h
$(GLSRC)gsparamx.h:$(GLSRC)gsstype.h
$(GLSRC)gsparamx.h:$(GLSRC)gsmemory.h
$(GLSRC)gsparamx.h:$(GLSRC)gslibctx.h
$(GLSRC)gsparamx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsparamx.h:$(GLSRC)stdio_.h
-$(GLSRC)gsparamx.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparamx.h:$(GLSRC)gssprintf.h
$(GLSRC)gsparamx.h:$(GLSRC)std.h
+$(GLSRC)gsparamx.h:$(GLSRC)gstypes.h
$(GLSRC)gsparamx.h:$(GLSRC)stdpre.h
$(GLSRC)gsparamx.h:$(GLGEN)arch.h
-$(GLSRC)gsparamx.h:$(GLSRC)gssprintf.h
$(GLSRC)gspath2.h:$(GLSRC)gsmatrix.h
$(GLSRC)gspath2.h:$(GLSRC)scommon.h
$(GLSRC)gspath2.h:$(GLSRC)gsstype.h
$(GLSRC)gspath2.h:$(GLSRC)gsmemory.h
$(GLSRC)gspath2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspath2.h:$(GLSRC)stdint_.h
-$(GLSRC)gspath2.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspath2.h:$(GLSRC)stdio_.h
-$(GLSRC)gspath2.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspath2.h:$(GLSRC)stdint_.h
+$(GLSRC)gspath2.h:$(GLSRC)gssprintf.h
$(GLSRC)gspath2.h:$(GLSRC)std.h
+$(GLSRC)gspath2.h:$(GLSRC)gstypes.h
$(GLSRC)gspath2.h:$(GLSRC)stdpre.h
$(GLSRC)gspath2.h:$(GLGEN)arch.h
-$(GLSRC)gspath2.h:$(GLSRC)gssprintf.h
$(GLSRC)gspcolor.h:$(GLSRC)gsuid.h
-$(GLSRC)gspcolor.h:$(GLSRC)gsrefct.h
-$(GLSRC)gspcolor.h:$(GLSRC)memento.h
$(GLSRC)gspcolor.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gspcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsrefct.h
$(GLSRC)gspcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gspcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gspcolor.h:$(GLSRC)memento.h
$(GLSRC)gspcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gspcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gspcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspcolor.h:$(GLSRC)stdint_.h
-$(GLSRC)gspcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gspcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gspcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gspcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gspcolor.h:$(GLSRC)std.h
+$(GLSRC)gspcolor.h:$(GLSRC)gstypes.h
$(GLSRC)gspcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gspcolor.h:$(GLGEN)arch.h
-$(GLSRC)gspcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gsptype1.h:$(GLSRC)gspcolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype1.h:$(GLSRC)gsdcolor.h
$(GLSRC)gsptype1.h:$(GLSRC)gscms.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsdevice.h
$(GLSRC)gsptype1.h:$(GLSRC)gscspace.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsuid.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsdevice.h
$(GLSRC)gsptype1.h:$(GLSRC)gxarith.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsiparam.h
$(GLSRC)gsptype1.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsptype1.h:$(GLSRC)memento.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsparam.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsiparam.h
$(GLSRC)gsptype1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsparam.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsccolor.h
$(GLSRC)gsptype1.h:$(GLSRC)gxsync.h
$(GLSRC)gsptype1.h:$(GLSRC)scommon.h
+$(GLSRC)gsptype1.h:$(GLSRC)memento.h
$(GLSRC)gsptype1.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsccolor.h
$(GLSRC)gsptype1.h:$(GLSRC)gsstype.h
$(GLSRC)gsptype1.h:$(GLSRC)gsmemory.h
$(GLSRC)gsptype1.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsptype1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsptype1.h:$(GLSRC)stdint_.h
-$(GLSRC)gsptype1.h:$(GLSRC)gsgstate.h
$(GLSRC)gsptype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsptype1.h:$(GLSRC)stdio_.h
-$(GLSRC)gsptype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gsptype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gsptype1.h:$(GLSRC)std.h
+$(GLSRC)gsptype1.h:$(GLSRC)gstypes.h
$(GLSRC)gsptype1.h:$(GLSRC)stdpre.h
$(GLSRC)gsptype1.h:$(GLGEN)arch.h
-$(GLSRC)gsptype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gsropt.h:$(GLSRC)stdpre.h
-$(GLSRC)gstext.h:$(GLSRC)gsfont.h
-$(GLSRC)gstext.h:$(GLSRC)gxpath.h
-$(GLSRC)gstext.h:$(GLSRC)gspenum.h
-$(GLSRC)gstext.h:$(GLSRC)gslparam.h
$(GLSRC)gstext.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gstext.h:$(GLSRC)gsrect.h
+$(GLSRC)gstext.h:$(GLSRC)gsfont.h
$(GLSRC)gstext.h:$(GLSRC)gscms.h
-$(GLSRC)gstext.h:$(GLSRC)gsdevice.h
$(GLSRC)gstext.h:$(GLSRC)gscspace.h
+$(GLSRC)gstext.h:$(GLSRC)gxpath.h
+$(GLSRC)gstext.h:$(GLSRC)gsdevice.h
$(GLSRC)gstext.h:$(GLSRC)gxarith.h
+$(GLSRC)gstext.h:$(GLSRC)gspenum.h
+$(GLSRC)gstext.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstext.h:$(GLSRC)gsrect.h
+$(GLSRC)gstext.h:$(GLSRC)gslparam.h
+$(GLSRC)gstext.h:$(GLSRC)gsiparam.h
+$(GLSRC)gstext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstext.h:$(GLSRC)gscpm.h
$(GLSRC)gstext.h:$(GLSRC)gxfixed.h
$(GLSRC)gstext.h:$(GLSRC)gsrefct.h
-$(GLSRC)gstext.h:$(GLSRC)gscpm.h
-$(GLSRC)gstext.h:$(GLSRC)gsiparam.h
-$(GLSRC)gstext.h:$(GLSRC)gxhttile.h
-$(GLSRC)gstext.h:$(GLSRC)memento.h
$(GLSRC)gstext.h:$(GLSRC)gsparam.h
-$(GLSRC)gstext.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gstext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstext.h:$(GLSRC)gsccolor.h
$(GLSRC)gstext.h:$(GLSRC)gxsync.h
$(GLSRC)gstext.h:$(GLSRC)scommon.h
+$(GLSRC)gstext.h:$(GLSRC)memento.h
$(GLSRC)gstext.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gstext.h:$(GLSRC)gsccolor.h
$(GLSRC)gstext.h:$(GLSRC)gsstype.h
$(GLSRC)gstext.h:$(GLSRC)gsmemory.h
$(GLSRC)gstext.h:$(GLSRC)gpsync.h
$(GLSRC)gstext.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstext.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gstext.h:$(GLSRC)stdio_.h
$(GLSRC)gstext.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstext.h:$(GLSRC)stdint_.h
$(GLSRC)gstext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstext.h:$(GLSRC)stdint_.h
+$(GLSRC)gstext.h:$(GLSRC)gssprintf.h
$(GLSRC)gstext.h:$(GLSRC)gsccode.h
-$(GLSRC)gstext.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstext.h:$(GLSRC)stdio_.h
-$(GLSRC)gstext.h:$(GLSRC)gstypes.h
$(GLSRC)gstext.h:$(GLSRC)std.h
+$(GLSRC)gstext.h:$(GLSRC)gstypes.h
$(GLSRC)gstext.h:$(GLSRC)stdpre.h
$(GLSRC)gstext.h:$(GLGEN)arch.h
-$(GLSRC)gstext.h:$(GLSRC)gssprintf.h
$(GLSRC)gsxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gschar.h:$(GLSRC)gsstate.h
$(GLSRC)gschar.h:$(GLSRC)gsovrc.h
$(GLSRC)gschar.h:$(GLSRC)gscolor.h
-$(GLSRC)gschar.h:$(GLSRC)gsline.h
$(GLSRC)gschar.h:$(GLSRC)gxcomp.h
+$(GLSRC)gschar.h:$(GLSRC)gsline.h
$(GLSRC)gschar.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gschar.h:$(GLSRC)gsht.h
$(GLSRC)gschar.h:$(GLSRC)gxtext.h
$(GLSRC)gschar.h:$(GLSRC)gstext.h
$(GLSRC)gschar.h:$(GLSRC)gxfcache.h
+$(GLSRC)gschar.h:$(GLSRC)gsuid.h
+$(GLSRC)gschar.h:$(GLSRC)gsdcolor.h
$(GLSRC)gschar.h:$(GLSRC)gsfont.h
+$(GLSRC)gschar.h:$(GLSRC)gxftype.h
+$(GLSRC)gschar.h:$(GLSRC)gscms.h
+$(GLSRC)gschar.h:$(GLSRC)gscspace.h
$(GLSRC)gschar.h:$(GLSRC)gxpath.h
-$(GLSRC)gschar.h:$(GLSRC)gspenum.h
-$(GLSRC)gschar.h:$(GLSRC)gxtmap.h
-$(GLSRC)gschar.h:$(GLSRC)gslparam.h
$(GLSRC)gschar.h:$(GLSRC)gxbcache.h
-$(GLSRC)gschar.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gschar.h:$(GLSRC)gsrect.h
-$(GLSRC)gschar.h:$(GLSRC)gscms.h
-$(GLSRC)gschar.h:$(GLSRC)gxftype.h
$(GLSRC)gschar.h:$(GLSRC)gsdevice.h
-$(GLSRC)gschar.h:$(GLSRC)gscspace.h
-$(GLSRC)gschar.h:$(GLSRC)gsuid.h
$(GLSRC)gschar.h:$(GLSRC)gxarith.h
+$(GLSRC)gschar.h:$(GLSRC)gspenum.h
+$(GLSRC)gschar.h:$(GLSRC)gxhttile.h
+$(GLSRC)gschar.h:$(GLSRC)gsrect.h
+$(GLSRC)gschar.h:$(GLSRC)gslparam.h
$(GLSRC)gschar.h:$(GLSRC)gsxfont.h
+$(GLSRC)gschar.h:$(GLSRC)gsiparam.h
+$(GLSRC)gschar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gschar.h:$(GLSRC)gscpm.h
$(GLSRC)gschar.h:$(GLSRC)gxfixed.h
$(GLSRC)gschar.h:$(GLSRC)gsrefct.h
-$(GLSRC)gschar.h:$(GLSRC)gscpm.h
-$(GLSRC)gschar.h:$(GLSRC)gsiparam.h
-$(GLSRC)gschar.h:$(GLSRC)gxhttile.h
-$(GLSRC)gschar.h:$(GLSRC)memento.h
$(GLSRC)gschar.h:$(GLSRC)gsparam.h
-$(GLSRC)gschar.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gschar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)gsccolor.h
$(GLSRC)gschar.h:$(GLSRC)gxsync.h
-$(GLSRC)gschar.h:$(GLSRC)gscsel.h
$(GLSRC)gschar.h:$(GLSRC)scommon.h
+$(GLSRC)gschar.h:$(GLSRC)memento.h
+$(GLSRC)gschar.h:$(GLSRC)gscsel.h
$(GLSRC)gschar.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gschar.h:$(GLSRC)gsccolor.h
$(GLSRC)gschar.h:$(GLSRC)gsstype.h
+$(GLSRC)gschar.h:$(GLSRC)gxtmap.h
$(GLSRC)gschar.h:$(GLSRC)gsmemory.h
$(GLSRC)gschar.h:$(GLSRC)gpsync.h
$(GLSRC)gschar.h:$(GLSRC)gslibctx.h
+$(GLSRC)gschar.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gschar.h:$(GLSRC)stdio_.h
$(GLSRC)gschar.h:$(GLSRC)gscompt.h
$(GLSRC)gschar.h:$(GLSRC)gxcindex.h
-$(GLSRC)gschar.h:$(GLSRC)stdint_.h
$(GLSRC)gschar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gschar.h:$(GLSRC)stdint_.h
+$(GLSRC)gschar.h:$(GLSRC)gssprintf.h
$(GLSRC)gschar.h:$(GLSRC)gsccode.h
-$(GLSRC)gschar.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gschar.h:$(GLSRC)stdio_.h
-$(GLSRC)gschar.h:$(GLSRC)gstypes.h
$(GLSRC)gschar.h:$(GLSRC)std.h
+$(GLSRC)gschar.h:$(GLSRC)gstypes.h
$(GLSRC)gschar.h:$(GLSRC)stdpre.h
$(GLSRC)gschar.h:$(GLGEN)arch.h
-$(GLSRC)gschar.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsiparam.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsiparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparam.h:$(GLSRC)scommon.h
$(GLSRC)gsiparam.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsiparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparam.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparam.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gsiparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gsiparam.h:$(GLSRC)std.h
+$(GLSRC)gsiparam.h:$(GLSRC)gstypes.h
$(GLSRC)gsiparam.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparam.h:$(GLGEN)arch.h
-$(GLSRC)gsiparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gsimage.h:$(GLSRC)gsdevice.h
$(GLSRC)gsimage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsimage.h:$(GLSRC)gsparam.h
-$(GLSRC)gsimage.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsimage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsimage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsimage.h:$(GLSRC)gsparam.h
+$(GLSRC)gsimage.h:$(GLSRC)gsccolor.h
$(GLSRC)gsimage.h:$(GLSRC)scommon.h
$(GLSRC)gsimage.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsimage.h:$(GLSRC)gsccolor.h
$(GLSRC)gsimage.h:$(GLSRC)gsstype.h
$(GLSRC)gsimage.h:$(GLSRC)gsmemory.h
$(GLSRC)gsimage.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsimage.h:$(GLSRC)stdint_.h
-$(GLSRC)gsimage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsimage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsimage.h:$(GLSRC)stdio_.h
-$(GLSRC)gsimage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsimage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsimage.h:$(GLSRC)stdint_.h
+$(GLSRC)gsimage.h:$(GLSRC)gssprintf.h
$(GLSRC)gsimage.h:$(GLSRC)std.h
+$(GLSRC)gsimage.h:$(GLSRC)gstypes.h
$(GLSRC)gsimage.h:$(GLSRC)stdpre.h
$(GLSRC)gsimage.h:$(GLGEN)arch.h
-$(GLSRC)gsimage.h:$(GLSRC)gssprintf.h
$(GLSRC)gsline.h:$(GLSRC)gslparam.h
$(GLSRC)gsline.h:$(GLSRC)gsgstate.h
$(GLSRC)gsline.h:$(GLSRC)stdpre.h
$(GLSRC)gspath.h:$(GLSRC)gxmatrix.h
$(GLSRC)gspath.h:$(GLSRC)gspenum.h
-$(GLSRC)gspath.h:$(GLSRC)gxfixed.h
$(GLSRC)gspath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspath.h:$(GLSRC)gxfixed.h
$(GLSRC)gspath.h:$(GLSRC)scommon.h
$(GLSRC)gspath.h:$(GLSRC)gsstype.h
$(GLSRC)gspath.h:$(GLSRC)gsmemory.h
$(GLSRC)gspath.h:$(GLSRC)gslibctx.h
-$(GLSRC)gspath.h:$(GLSRC)stdint_.h
-$(GLSRC)gspath.h:$(GLSRC)gsgstate.h
$(GLSRC)gspath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gspath.h:$(GLSRC)stdio_.h
-$(GLSRC)gspath.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspath.h:$(GLSRC)stdint_.h
+$(GLSRC)gspath.h:$(GLSRC)gssprintf.h
$(GLSRC)gspath.h:$(GLSRC)std.h
+$(GLSRC)gspath.h:$(GLSRC)gstypes.h
$(GLSRC)gspath.h:$(GLSRC)stdpre.h
$(GLSRC)gspath.h:$(GLGEN)arch.h
-$(GLSRC)gspath.h:$(GLSRC)gssprintf.h
$(GLSRC)gsrop.h:$(GLSRC)gsropt.h
$(GLSRC)gsrop.h:$(GLSRC)gsgstate.h
$(GLSRC)gsrop.h:$(GLSRC)stdpre.h
$(GLSRC)gstparam.h:$(GLSRC)gsfunc.h
$(GLSRC)gstparam.h:$(GLSRC)gscspace.h
+$(GLSRC)gstparam.h:$(GLSRC)gsiparam.h
$(GLSRC)gstparam.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gstparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)gsmatrix.h
$(GLSRC)gstparam.h:$(GLSRC)gsrefct.h
-$(GLSRC)gstparam.h:$(GLSRC)gsiparam.h
-$(GLSRC)gstparam.h:$(GLSRC)memento.h
$(GLSRC)gstparam.h:$(GLSRC)gsparam.h
-$(GLSRC)gstparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gstparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gstparam.h:$(GLSRC)gsstruct.h
$(GLSRC)gstparam.h:$(GLSRC)scommon.h
+$(GLSRC)gstparam.h:$(GLSRC)memento.h
$(GLSRC)gstparam.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gstparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gstparam.h:$(GLSRC)gsstype.h
$(GLSRC)gstparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gstparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstparam.h:$(GLSRC)stdint_.h
-$(GLSRC)gstparam.h:$(GLSRC)gsgstate.h
$(GLSRC)gstparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gstparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gstparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gstparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gstparam.h:$(GLSRC)std.h
+$(GLSRC)gstparam.h:$(GLSRC)gstypes.h
$(GLSRC)gstparam.h:$(GLSRC)stdpre.h
$(GLSRC)gstparam.h:$(GLGEN)arch.h
-$(GLSRC)gstparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gxbcache.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxbcache.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxbcache.h:$(GLSRC)gsstype.h
@@ -5245,194 +5319,197 @@ $(GLSRC)gxbcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gxbcache.h:$(GLSRC)gslibctx.h
$(GLSRC)gxbcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxbcache.h:$(GLSRC)stdio_.h
-$(GLSRC)gxbcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gxbcache.h:$(GLSRC)std.h
+$(GLSRC)gxbcache.h:$(GLSRC)gstypes.h
$(GLSRC)gxbcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxbcache.h:$(GLGEN)arch.h
-$(GLSRC)gxbcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclio.h:$(GLSRC)gp.h
$(GLSRC)gxclio.h:$(GLSRC)srdline.h
$(GLSRC)gxclio.h:$(GLSRC)scommon.h
$(GLSRC)gxclio.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclio.h:$(GLSRC)stat_.h
$(GLSRC)gxclio.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxclio.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclio.h:$(GLSRC)memory_.h
+$(GLSRC)gxclio.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclio.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclio.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclio.h:$(GLSRC)stdint_.h
$(GLSRC)gxclio.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclio.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclio.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclio.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclio.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclio.h:$(GLSRC)std.h
+$(GLSRC)gxclio.h:$(GLSRC)gstypes.h
$(GLSRC)gxclio.h:$(GLSRC)stdpre.h
$(GLSRC)gxclio.h:$(GLGEN)arch.h
-$(GLSRC)gxclio.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclip.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclip.h:$(GLSRC)gxtext.h
$(GLSRC)gxclip.h:$(GLSRC)gstext.h
+$(GLSRC)gxclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclip.h:$(GLSRC)gsropt.h
$(GLSRC)gxclip.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclip.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclip.h:$(GLSRC)gsfont.h
$(GLSRC)gxclip.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclip.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclip.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclip.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip.h:$(GLSRC)gxftype.h
$(GLSRC)gxclip.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclip.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclip.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclip.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclip.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclip.h:$(GLSRC)gsrect.h
$(GLSRC)gxclip.h:$(GLSRC)gscms.h
-$(GLSRC)gxclip.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclip.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclip.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclip.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclip.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclip.h:$(GLSRC)gslparam.h
$(GLSRC)gxclip.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclip.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip.h:$(GLSRC)gscpm.h
$(GLSRC)gxclip.h:$(GLSRC)gxfixed.h
$(GLSRC)gxclip.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclip.h:$(GLSRC)gscpm.h
-$(GLSRC)gxclip.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclip.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxclip.h:$(GLSRC)gp.h
-$(GLSRC)gxclip.h:$(GLSRC)memento.h
$(GLSRC)gxclip.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclip.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclip.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclip.h:$(GLSRC)srdline.h
+$(GLSRC)gxclip.h:$(GLSRC)gp.h
+$(GLSRC)gxclip.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclip.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclip.h:$(GLSRC)gxsync.h
-$(GLSRC)gxclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip.h:$(GLSRC)srdline.h
$(GLSRC)gxclip.h:$(GLSRC)scommon.h
+$(GLSRC)gxclip.h:$(GLSRC)memento.h
+$(GLSRC)gxclip.h:$(GLSRC)gscsel.h
$(GLSRC)gxclip.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclip.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip.h:$(GLSRC)stat_.h
+$(GLSRC)gxclip.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclip.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclip.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclip.h:$(GLSRC)stdio_.h
$(GLSRC)gxclip.h:$(GLSRC)gscompt.h
$(GLSRC)gxclip.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclip.h:$(GLSRC)stdint_.h
$(GLSRC)gxclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclip.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclip.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclip.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclip.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclip.h:$(GLSRC)gstypes.h
$(GLSRC)gxclip.h:$(GLSRC)std.h
+$(GLSRC)gxclip.h:$(GLSRC)gstypes.h
$(GLSRC)gxclip.h:$(GLSRC)stdpre.h
$(GLSRC)gxclip.h:$(GLGEN)arch.h
-$(GLSRC)gxclip.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclipsr.h:$(GLSRC)gxpath.h
$(GLSRC)gxclipsr.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclipsr.h:$(GLSRC)gslparam.h
$(GLSRC)gxclipsr.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gscpm.h
$(GLSRC)gxclipsr.h:$(GLSRC)gxfixed.h
$(GLSRC)gxclipsr.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclipsr.h:$(GLSRC)gscpm.h
$(GLSRC)gxclipsr.h:$(GLSRC)memento.h
$(GLSRC)gxclipsr.h:$(GLSRC)gsgstate.h
-$(GLSRC)gxclipsr.h:$(GLSRC)gstypes.h
$(GLSRC)gxclipsr.h:$(GLSRC)std.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gstypes.h
$(GLSRC)gxclipsr.h:$(GLSRC)stdpre.h
$(GLSRC)gxclipsr.h:$(GLGEN)arch.h
$(GLSRC)gxcoord.h:$(GLSRC)gscoord.h
$(GLSRC)gxcoord.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxcoord.h:$(GLSRC)gxfixed.h
$(GLSRC)gxcoord.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcoord.h:$(GLSRC)gxfixed.h
$(GLSRC)gxcoord.h:$(GLSRC)scommon.h
$(GLSRC)gxcoord.h:$(GLSRC)gsstype.h
$(GLSRC)gxcoord.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcoord.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcoord.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcoord.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcoord.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcoord.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcoord.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcoord.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcoord.h:$(GLSRC)std.h
+$(GLSRC)gxcoord.h:$(GLSRC)gstypes.h
$(GLSRC)gxcoord.h:$(GLSRC)stdpre.h
$(GLSRC)gxcoord.h:$(GLGEN)arch.h
-$(GLSRC)gxcoord.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxcpath.h:$(GLSRC)gxtext.h
$(GLSRC)gxcpath.h:$(GLSRC)gstext.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcpath.h:$(GLSRC)gsropt.h
$(GLSRC)gxcpath.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxcpath.h:$(GLSRC)gsfont.h
$(GLSRC)gxcpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxftype.h
$(GLSRC)gxcpath.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxdda.h
-$(GLSRC)gxcpath.h:$(GLSRC)gslparam.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsrect.h
$(GLSRC)gxcpath.h:$(GLSRC)gscms.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxftype.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcpath.h:$(GLSRC)gslparam.h
$(GLSRC)gxcpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscpm.h
$(GLSRC)gxcpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gxcpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscpm.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxcpath.h:$(GLSRC)gp.h
-$(GLSRC)gxcpath.h:$(GLSRC)memento.h
$(GLSRC)gxcpath.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)srdline.h
+$(GLSRC)gxcpath.h:$(GLSRC)gp.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcpath.h:$(GLSRC)gxsync.h
-$(GLSRC)gxcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcpath.h:$(GLSRC)srdline.h
$(GLSRC)gxcpath.h:$(GLSRC)scommon.h
+$(GLSRC)gxcpath.h:$(GLSRC)memento.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscsel.h
$(GLSRC)gxcpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcpath.h:$(GLSRC)stat_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdio_.h
$(GLSRC)gxcpath.h:$(GLSRC)gscompt.h
$(GLSRC)gxcpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcpath.h:$(GLSRC)stdint_.h
$(GLSRC)gxcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxcpath.h:$(GLSRC)std.h
+$(GLSRC)gxcpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxcpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxcpath.h:$(GLGEN)arch.h
-$(GLSRC)gxcpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdda.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdda.h:$(GLSRC)std.h
$(GLSRC)gxdda.h:$(GLSRC)stdpre.h
@@ -5441,208 +5518,211 @@ $(GLSRC)gxdevbuf.h:$(GLSRC)gxband.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxclio.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxclio.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gp.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)memento.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gp.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)srdline.h
$(GLSRC)gxdevbuf.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)memento.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevbuf.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevbuf.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevbuf.h:$(GLSRC)std.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevbuf.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevbuf.h:$(GLGEN)arch.h
-$(GLSRC)gxdevbuf.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevrop.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevrop.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gp.h
-$(GLSRC)gxdevrop.h:$(GLSRC)memento.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gp.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevrop.h:$(GLSRC)srdline.h
$(GLSRC)gxdevrop.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevrop.h:$(GLSRC)memento.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevrop.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevrop.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevrop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevrop.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevrop.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevrop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevrop.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevrop.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevrop.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevrop.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevrop.h:$(GLSRC)std.h
+$(GLSRC)gxdevrop.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevrop.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevrop.h:$(GLGEN)arch.h
-$(GLSRC)gxdevrop.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevmem.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevmem.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gp.h
-$(GLSRC)gxdevmem.h:$(GLSRC)memento.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gp.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevmem.h:$(GLSRC)srdline.h
$(GLSRC)gxdevmem.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevmem.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevmem.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevmem.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevmem.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevmem.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevmem.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevmem.h:$(GLSRC)std.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevmem.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevmem.h:$(GLGEN)arch.h
-$(GLSRC)gxdevmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdhtres.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont0.h:$(GLSRC)gspath.h
@@ -5653,115 +5733,116 @@ $(GLSRC)gxfont0.h:$(GLSRC)gxfapi.h
$(GLSRC)gxfont0.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont0.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont0.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont0.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont0.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont0.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfont0.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsfont.h
$(GLSRC)gxfont0.h:$(GLSRC)gxftype.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscms.h
$(GLSRC)gxfont0.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont0.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont0.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont0.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfont0.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfont0.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfont0.h:$(GLSRC)memento.h
$(GLSRC)gxfont0.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont0.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont0.h:$(GLSRC)gxsync.h
$(GLSRC)gxfont0.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont0.h:$(GLSRC)memento.h
$(GLSRC)gxfont0.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfont0.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont0.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont0.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfont0.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont0.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont0.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont0.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont0.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont0.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont0.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont0.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont0.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfont0.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont0.h:$(GLSRC)std.h
+$(GLSRC)gxfont0.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont0.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0.h:$(GLGEN)arch.h
-$(GLSRC)gxfont0.h:$(GLSRC)gssprintf.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxtext.h
$(GLSRC)gxgetbit.h:$(GLSRC)gstext.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxgetbit.h:$(GLSRC)gstparam.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcspace.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsropt.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsfont.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxpath.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gspenum.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxftype.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxdda.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gslparam.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsrect.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscms.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxftype.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsdevice.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscspace.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxpath.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdevice.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxarith.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsrect.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gslparam.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscpm.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxfixed.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscpm.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gp.h
-$(GLSRC)gxgetbit.h:$(GLSRC)memento.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsparam.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)srdline.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gp.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsccolor.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsstruct.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxsync.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gscsel.h
+$(GLSRC)gxgetbit.h:$(GLSRC)srdline.h
$(GLSRC)gxgetbit.h:$(GLSRC)scommon.h
+$(GLSRC)gxgetbit.h:$(GLSRC)memento.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscsel.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gsccolor.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stat_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxtmap.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgetbit.h:$(GLSRC)gpsync.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxgetbit.h:$(GLSRC)memory_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxgetbit.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdio_.h
$(GLSRC)gxgetbit.h:$(GLSRC)gscompt.h
$(GLSRC)gxgetbit.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxgetbit.h:$(GLSRC)stdint_.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdint_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gssprintf.h
$(GLSRC)gxgetbit.h:$(GLSRC)gsccode.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxgetbit.h:$(GLSRC)stdio_.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gstypes.h
$(GLSRC)gxgetbit.h:$(GLSRC)std.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gstypes.h
$(GLSRC)gxgetbit.h:$(GLSRC)stdpre.h
$(GLSRC)gxgetbit.h:$(GLGEN)arch.h
-$(GLSRC)gxgetbit.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhttile.h:$(GLSRC)gxbitmap.h
$(GLSRC)gxhttile.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxhttile.h:$(GLSRC)gsstype.h
@@ -5769,373 +5850,375 @@ $(GLSRC)gxhttile.h:$(GLSRC)gsmemory.h
$(GLSRC)gxhttile.h:$(GLSRC)gslibctx.h
$(GLSRC)gxhttile.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhttile.h:$(GLSRC)stdio_.h
-$(GLSRC)gxhttile.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhttile.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhttile.h:$(GLSRC)std.h
+$(GLSRC)gxhttile.h:$(GLSRC)gstypes.h
$(GLSRC)gxhttile.h:$(GLSRC)stdpre.h
$(GLSRC)gxhttile.h:$(GLGEN)arch.h
-$(GLSRC)gxhttile.h:$(GLSRC)gssprintf.h
$(GLSRC)gxiclass.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxiclass.h:$(GLSRC)gsparam.h
$(GLSRC)gxiclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsparam.h
$(GLSRC)gxiclass.h:$(GLSRC)scommon.h
$(GLSRC)gxiclass.h:$(GLSRC)gsstype.h
$(GLSRC)gxiclass.h:$(GLSRC)gsmemory.h
$(GLSRC)gxiclass.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxiclass.h:$(GLSRC)stdint_.h
-$(GLSRC)gxiclass.h:$(GLSRC)gsgstate.h
$(GLSRC)gxiclass.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiclass.h:$(GLSRC)stdio_.h
-$(GLSRC)gxiclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxiclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiclass.h:$(GLSRC)gssprintf.h
$(GLSRC)gxiclass.h:$(GLSRC)std.h
+$(GLSRC)gxiclass.h:$(GLSRC)gstypes.h
$(GLSRC)gxiclass.h:$(GLSRC)stdpre.h
$(GLSRC)gxiclass.h:$(GLGEN)arch.h
-$(GLSRC)gxiclass.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxiodev.h:$(GLSRC)stat_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsparam.h
$(GLSRC)gxiodev.h:$(GLSRC)gp.h
$(GLSRC)gxiodev.h:$(GLSRC)srdline.h
$(GLSRC)gxiodev.h:$(GLSRC)scommon.h
$(GLSRC)gxiodev.h:$(GLSRC)gsfname.h
-$(GLSRC)gxiodev.h:$(GLSRC)gsparam.h
-$(GLSRC)gxiodev.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxiodev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiodev.h:$(GLSRC)stat_.h
$(GLSRC)gxiodev.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxiodev.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxiodev.h:$(GLSRC)memory_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxiodev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiodev.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxiodev.h:$(GLSRC)stdint_.h
$(GLSRC)gxiodev.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxiodev.h:$(GLSRC)stdio_.h
-$(GLSRC)gxiodev.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiodev.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gssprintf.h
$(GLSRC)gxiodev.h:$(GLSRC)std.h
+$(GLSRC)gxiodev.h:$(GLSRC)gstypes.h
$(GLSRC)gxiodev.h:$(GLSRC)stdpre.h
$(GLSRC)gxiodev.h:$(GLGEN)arch.h
-$(GLSRC)gxiodev.h:$(GLSRC)gssprintf.h
$(GLSRC)gxline.h:$(GLSRC)math_.h
$(GLSRC)gxline.h:$(GLSRC)gslparam.h
$(GLSRC)gxline.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxline.h:$(GLSRC)vmsmath.h
$(GLSRC)gxline.h:$(GLSRC)scommon.h
+$(GLSRC)gxline.h:$(GLSRC)vmsmath.h
$(GLSRC)gxline.h:$(GLSRC)gsstype.h
$(GLSRC)gxline.h:$(GLSRC)gsmemory.h
$(GLSRC)gxline.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxline.h:$(GLSRC)stdint_.h
$(GLSRC)gxline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxline.h:$(GLSRC)stdio_.h
-$(GLSRC)gxline.h:$(GLSRC)gstypes.h
+$(GLSRC)gxline.h:$(GLSRC)stdint_.h
+$(GLSRC)gxline.h:$(GLSRC)gssprintf.h
$(GLSRC)gxline.h:$(GLSRC)std.h
+$(GLSRC)gxline.h:$(GLSRC)gstypes.h
$(GLSRC)gxline.h:$(GLSRC)stdpre.h
$(GLSRC)gxline.h:$(GLGEN)arch.h
-$(GLSRC)gxline.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxmatrix.h:$(GLSRC)gxfixed.h
$(GLSRC)gxmatrix.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gxfixed.h
$(GLSRC)gxmatrix.h:$(GLSRC)scommon.h
$(GLSRC)gxmatrix.h:$(GLSRC)gsstype.h
$(GLSRC)gxmatrix.h:$(GLSRC)gsmemory.h
$(GLSRC)gxmatrix.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxmatrix.h:$(GLSRC)stdint_.h
$(GLSRC)gxmatrix.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxmatrix.h:$(GLSRC)stdio_.h
-$(GLSRC)gxmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gxmatrix.h:$(GLSRC)stdint_.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gssprintf.h
$(GLSRC)gxmatrix.h:$(GLSRC)std.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gstypes.h
$(GLSRC)gxmatrix.h:$(GLSRC)stdpre.h
$(GLSRC)gxmatrix.h:$(GLGEN)arch.h
-$(GLSRC)gxmatrix.h:$(GLSRC)gssprintf.h
$(GLSRC)gxmclip.h:$(GLSRC)gxclip.h
$(GLSRC)gxmclip.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxmclip.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxmclip.h:$(GLSRC)gxtext.h
$(GLSRC)gxmclip.h:$(GLSRC)gstext.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxmclip.h:$(GLSRC)gstparam.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcspace.h
$(GLSRC)gxmclip.h:$(GLSRC)gsropt.h
$(GLSRC)gxmclip.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxmclip.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxmclip.h:$(GLSRC)gsfont.h
$(GLSRC)gxmclip.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxpath.h
-$(GLSRC)gxmclip.h:$(GLSRC)gspenum.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxftype.h
$(GLSRC)gxmclip.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxdda.h
-$(GLSRC)gxmclip.h:$(GLSRC)gslparam.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsrect.h
$(GLSRC)gxmclip.h:$(GLSRC)gscms.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxftype.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsdevice.h
$(GLSRC)gxmclip.h:$(GLSRC)gscspace.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxpath.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdevice.h
$(GLSRC)gxmclip.h:$(GLSRC)gxarith.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxmclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsrect.h
+$(GLSRC)gxmclip.h:$(GLSRC)gslparam.h
$(GLSRC)gxmclip.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscpm.h
$(GLSRC)gxmclip.h:$(GLSRC)gxfixed.h
$(GLSRC)gxmclip.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscpm.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxmclip.h:$(GLSRC)gp.h
-$(GLSRC)gxmclip.h:$(GLSRC)memento.h
$(GLSRC)gxmclip.h:$(GLSRC)gsparam.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxmclip.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)srdline.h
+$(GLSRC)gxmclip.h:$(GLSRC)gp.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsccolor.h
$(GLSRC)gxmclip.h:$(GLSRC)gsstruct.h
$(GLSRC)gxmclip.h:$(GLSRC)gxsync.h
-$(GLSRC)gxmclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxmclip.h:$(GLSRC)srdline.h
$(GLSRC)gxmclip.h:$(GLSRC)scommon.h
+$(GLSRC)gxmclip.h:$(GLSRC)memento.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscsel.h
$(GLSRC)gxmclip.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxmclip.h:$(GLSRC)gsccolor.h
$(GLSRC)gxmclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxmclip.h:$(GLSRC)stat_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxtmap.h
$(GLSRC)gxmclip.h:$(GLSRC)gsmemory.h
$(GLSRC)gxmclip.h:$(GLSRC)gpsync.h
-$(GLSRC)gxmclip.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxmclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxmclip.h:$(GLSRC)gslibctx.h
$(GLSRC)gxmclip.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxmclip.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdio_.h
$(GLSRC)gxmclip.h:$(GLSRC)gscompt.h
$(GLSRC)gxmclip.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxmclip.h:$(GLSRC)stdint_.h
$(GLSRC)gxmclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdint_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gssprintf.h
$(GLSRC)gxmclip.h:$(GLSRC)gsccode.h
-$(GLSRC)gxmclip.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxmclip.h:$(GLSRC)stdio_.h
-$(GLSRC)gxmclip.h:$(GLSRC)gstypes.h
$(GLSRC)gxmclip.h:$(GLSRC)std.h
+$(GLSRC)gxmclip.h:$(GLSRC)gstypes.h
$(GLSRC)gxmclip.h:$(GLSRC)stdpre.h
$(GLSRC)gxmclip.h:$(GLGEN)arch.h
-$(GLSRC)gxmclip.h:$(GLSRC)gssprintf.h
$(GLSRC)gxoprect.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxoprect.h:$(GLSRC)gxtext.h
$(GLSRC)gxoprect.h:$(GLSRC)gstext.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxoprect.h:$(GLSRC)gstparam.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcspace.h
$(GLSRC)gxoprect.h:$(GLSRC)gsropt.h
$(GLSRC)gxoprect.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxoprect.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsuid.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsimage.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxdda.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxoprect.h:$(GLSRC)gsfont.h
$(GLSRC)gxoprect.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxpath.h
-$(GLSRC)gxoprect.h:$(GLSRC)gspenum.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsimage.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxftype.h
$(GLSRC)gxoprect.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxdda.h
-$(GLSRC)gxoprect.h:$(GLSRC)gslparam.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsrect.h
$(GLSRC)gxoprect.h:$(GLSRC)gscms.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxftype.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsdevice.h
$(GLSRC)gxoprect.h:$(GLSRC)gscspace.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsuid.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxpath.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdevice.h
$(GLSRC)gxoprect.h:$(GLSRC)gxarith.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxoprect.h:$(GLSRC)gspenum.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsrect.h
+$(GLSRC)gxoprect.h:$(GLSRC)gslparam.h
$(GLSRC)gxoprect.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscpm.h
$(GLSRC)gxoprect.h:$(GLSRC)gxfixed.h
$(GLSRC)gxoprect.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscpm.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxoprect.h:$(GLSRC)gp.h
-$(GLSRC)gxoprect.h:$(GLSRC)memento.h
$(GLSRC)gxoprect.h:$(GLSRC)gsparam.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxoprect.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)srdline.h
+$(GLSRC)gxoprect.h:$(GLSRC)gp.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsccolor.h
$(GLSRC)gxoprect.h:$(GLSRC)gsstruct.h
$(GLSRC)gxoprect.h:$(GLSRC)gxsync.h
-$(GLSRC)gxoprect.h:$(GLSRC)gscsel.h
+$(GLSRC)gxoprect.h:$(GLSRC)srdline.h
$(GLSRC)gxoprect.h:$(GLSRC)scommon.h
+$(GLSRC)gxoprect.h:$(GLSRC)memento.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscsel.h
$(GLSRC)gxoprect.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxoprect.h:$(GLSRC)gsccolor.h
$(GLSRC)gxoprect.h:$(GLSRC)gsstype.h
+$(GLSRC)gxoprect.h:$(GLSRC)stat_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxtmap.h
$(GLSRC)gxoprect.h:$(GLSRC)gsmemory.h
$(GLSRC)gxoprect.h:$(GLSRC)gpsync.h
-$(GLSRC)gxoprect.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxoprect.h:$(GLSRC)memory_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxoprect.h:$(GLSRC)gslibctx.h
$(GLSRC)gxoprect.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxoprect.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdio_.h
$(GLSRC)gxoprect.h:$(GLSRC)gscompt.h
$(GLSRC)gxoprect.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxoprect.h:$(GLSRC)stdint_.h
$(GLSRC)gxoprect.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdint_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gssprintf.h
$(GLSRC)gxoprect.h:$(GLSRC)gsccode.h
-$(GLSRC)gxoprect.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxoprect.h:$(GLSRC)stdio_.h
-$(GLSRC)gxoprect.h:$(GLSRC)gstypes.h
$(GLSRC)gxoprect.h:$(GLSRC)std.h
+$(GLSRC)gxoprect.h:$(GLSRC)gstypes.h
$(GLSRC)gxoprect.h:$(GLSRC)stdpre.h
$(GLSRC)gxoprect.h:$(GLGEN)arch.h
-$(GLSRC)gxoprect.h:$(GLSRC)gssprintf.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxblend.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdevice.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxcpath.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdevmem.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxpcache.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpcache.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxtext.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gspcolor.h
$(GLSRC)gxp1impl.h:$(GLSRC)gstext.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxp1impl.h:$(GLSRC)gstparam.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcspace.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsropt.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsuid.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsimage.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdda.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsfont.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxpath.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gspenum.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsimage.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxftype.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxdda.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gslparam.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsrect.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscms.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxftype.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsdevice.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscspace.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsuid.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpath.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdevice.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxarith.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gspenum.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsrect.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gslparam.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscpm.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsio.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gp.h
-$(GLSRC)gxp1impl.h:$(GLSRC)memento.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsparam.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxp1impl.h:$(GLSRC)srdline.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscpm.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gp.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsccolor.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsstruct.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxsync.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gscsel.h
+$(GLSRC)gxp1impl.h:$(GLSRC)srdline.h
$(GLSRC)gxp1impl.h:$(GLSRC)scommon.h
+$(GLSRC)gxp1impl.h:$(GLSRC)memento.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscsel.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsfname.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gsccolor.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsstype.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stat_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxtmap.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsmemory.h
$(GLSRC)gxp1impl.h:$(GLSRC)gpsync.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxp1impl.h:$(GLSRC)memory_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxp1impl.h:$(GLSRC)gslibctx.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdio_.h
$(GLSRC)gxp1impl.h:$(GLSRC)gscompt.h
$(GLSRC)gxp1impl.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxp1impl.h:$(GLSRC)stdint_.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdint_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gssprintf.h
$(GLSRC)gxp1impl.h:$(GLSRC)gsccode.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxp1impl.h:$(GLSRC)stdio_.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gstypes.h
$(GLSRC)gxp1impl.h:$(GLSRC)std.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gstypes.h
$(GLSRC)gxp1impl.h:$(GLSRC)stdpre.h
$(GLSRC)gxp1impl.h:$(GLGEN)arch.h
-$(GLSRC)gxp1impl.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxpath.h
-$(GLSRC)gxpaint.h:$(GLSRC)gspenum.h
-$(GLSRC)gxpaint.h:$(GLSRC)gslparam.h
$(GLSRC)gxpaint.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsrect.h
$(GLSRC)gxpaint.h:$(GLSRC)gscms.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpaint.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxpath.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpaint.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpaint.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsrect.h
+$(GLSRC)gxpaint.h:$(GLSRC)gslparam.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscpm.h
$(GLSRC)gxpaint.h:$(GLSRC)gxfixed.h
$(GLSRC)gxpaint.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxpaint.h:$(GLSRC)gscpm.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxpaint.h:$(GLSRC)memento.h
$(GLSRC)gxpaint.h:$(GLSRC)gsparam.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpaint.h:$(GLSRC)gxsync.h
$(GLSRC)gxpaint.h:$(GLSRC)scommon.h
+$(GLSRC)gxpaint.h:$(GLSRC)memento.h
$(GLSRC)gxpaint.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpaint.h:$(GLSRC)gsstype.h
$(GLSRC)gxpaint.h:$(GLSRC)gsmemory.h
$(GLSRC)gxpaint.h:$(GLSRC)gpsync.h
$(GLSRC)gxpaint.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxpaint.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpaint.h:$(GLSRC)stdint_.h
-$(GLSRC)gxpaint.h:$(GLSRC)gsgstate.h
$(GLSRC)gxpaint.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxpaint.h:$(GLSRC)stdio_.h
-$(GLSRC)gxpaint.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpaint.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpaint.h:$(GLSRC)gssprintf.h
$(GLSRC)gxpaint.h:$(GLSRC)std.h
+$(GLSRC)gxpaint.h:$(GLSRC)gstypes.h
$(GLSRC)gxpaint.h:$(GLSRC)stdpre.h
$(GLSRC)gxpaint.h:$(GLGEN)arch.h
-$(GLSRC)gxpaint.h:$(GLSRC)gssprintf.h
$(GLSRC)gxpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gxpath.h:$(GLSRC)gslparam.h
$(GLSRC)gxpath.h:$(GLSRC)gsrect.h
-$(GLSRC)gxpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpath.h:$(GLSRC)gslparam.h
$(GLSRC)gxpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gxpath.h:$(GLSRC)gsgstate.h
-$(GLSRC)gxpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxpath.h:$(GLSRC)std.h
+$(GLSRC)gxpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxpath.h:$(GLGEN)arch.h
$(GLSRC)gxpcache.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxpcache.h:$(GLSRC)gscms.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpcache.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpcache.h:$(GLSRC)gxarith.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsiparam.h
$(GLSRC)gxpcache.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxpcache.h:$(GLSRC)memento.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsparam.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsiparam.h
$(GLSRC)gxpcache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpcache.h:$(GLSRC)gxsync.h
$(GLSRC)gxpcache.h:$(GLSRC)scommon.h
+$(GLSRC)gxpcache.h:$(GLSRC)memento.h
$(GLSRC)gxpcache.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpcache.h:$(GLSRC)gsstype.h
$(GLSRC)gxpcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gxpcache.h:$(GLSRC)gpsync.h
$(GLSRC)gxpcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxpcache.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpcache.h:$(GLSRC)stdint_.h
-$(GLSRC)gxpcache.h:$(GLSRC)gsgstate.h
$(GLSRC)gxpcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxpcache.h:$(GLSRC)stdio_.h
-$(GLSRC)gxpcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gxpcache.h:$(GLSRC)std.h
+$(GLSRC)gxpcache.h:$(GLSRC)gstypes.h
$(GLSRC)gxpcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxpcache.h:$(GLGEN)arch.h
-$(GLSRC)gxpcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gxsample.h:$(GLSRC)std.h
$(GLSRC)gxsample.h:$(GLSRC)stdpre.h
$(GLSRC)gxsample.h:$(GLGEN)arch.h
@@ -6145,968 +6228,976 @@ $(GLSRC)gxscanc.h:$(GLSRC)gxdevice.h
$(GLSRC)gxscanc.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxscanc.h:$(GLSRC)gxtext.h
$(GLSRC)gxscanc.h:$(GLSRC)gstext.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxscanc.h:$(GLSRC)gstparam.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcspace.h
$(GLSRC)gxscanc.h:$(GLSRC)gsropt.h
$(GLSRC)gxscanc.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxscanc.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsuid.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsimage.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxdda.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxscanc.h:$(GLSRC)gsfont.h
$(GLSRC)gxscanc.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxpath.h
-$(GLSRC)gxscanc.h:$(GLSRC)gspenum.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsimage.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxftype.h
$(GLSRC)gxscanc.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxdda.h
-$(GLSRC)gxscanc.h:$(GLSRC)gslparam.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsrect.h
$(GLSRC)gxscanc.h:$(GLSRC)gscms.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxftype.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsdevice.h
$(GLSRC)gxscanc.h:$(GLSRC)gscspace.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsuid.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxpath.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdevice.h
$(GLSRC)gxscanc.h:$(GLSRC)gxarith.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxscanc.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxscanc.h:$(GLSRC)gspenum.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsrect.h
+$(GLSRC)gxscanc.h:$(GLSRC)gslparam.h
$(GLSRC)gxscanc.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscpm.h
$(GLSRC)gxscanc.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxscanc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxscanc.h:$(GLSRC)gsio.h
-$(GLSRC)gxscanc.h:$(GLSRC)gp.h
-$(GLSRC)gxscanc.h:$(GLSRC)memento.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsparam.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxscanc.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxscanc.h:$(GLSRC)srdline.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscpm.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gp.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsccolor.h
$(GLSRC)gxscanc.h:$(GLSRC)gsstruct.h
$(GLSRC)gxscanc.h:$(GLSRC)gxsync.h
-$(GLSRC)gxscanc.h:$(GLSRC)gscsel.h
+$(GLSRC)gxscanc.h:$(GLSRC)srdline.h
$(GLSRC)gxscanc.h:$(GLSRC)scommon.h
+$(GLSRC)gxscanc.h:$(GLSRC)memento.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscsel.h
$(GLSRC)gxscanc.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxscanc.h:$(GLSRC)gsfname.h
-$(GLSRC)gxscanc.h:$(GLSRC)gsccolor.h
$(GLSRC)gxscanc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxscanc.h:$(GLSRC)stat_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxtmap.h
$(GLSRC)gxscanc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxscanc.h:$(GLSRC)gpsync.h
-$(GLSRC)gxscanc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxscanc.h:$(GLSRC)memory_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxscanc.h:$(GLSRC)gslibctx.h
$(GLSRC)gxscanc.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxscanc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdio_.h
$(GLSRC)gxscanc.h:$(GLSRC)gscompt.h
$(GLSRC)gxscanc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxscanc.h:$(GLSRC)stdint_.h
$(GLSRC)gxscanc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxscanc.h:$(GLSRC)gsccode.h
-$(GLSRC)gxscanc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxscanc.h:$(GLSRC)stdio_.h
-$(GLSRC)gxscanc.h:$(GLSRC)gstypes.h
$(GLSRC)gxscanc.h:$(GLSRC)std.h
+$(GLSRC)gxscanc.h:$(GLSRC)gstypes.h
$(GLSRC)gxscanc.h:$(GLSRC)stdpre.h
$(GLSRC)gxscanc.h:$(GLGEN)arch.h
-$(GLSRC)gxscanc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxstate.h:$(GLSRC)gscspace.h
-$(GLSRC)gxstate.h:$(GLSRC)gsrefct.h
$(GLSRC)gxstate.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxstate.h:$(GLSRC)memento.h
-$(GLSRC)gxstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gxstate.h:$(GLSRC)scommon.h
+$(GLSRC)gxstate.h:$(GLSRC)memento.h
$(GLSRC)gxstate.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gxstate.h:$(GLSRC)gsstype.h
$(GLSRC)gxstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gxstate.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxstate.h:$(GLSRC)stdint_.h
-$(GLSRC)gxstate.h:$(GLSRC)gsgstate.h
$(GLSRC)gxstate.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gxstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gxstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gxstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gxstate.h:$(GLSRC)std.h
+$(GLSRC)gxstate.h:$(GLSRC)gstypes.h
$(GLSRC)gxstate.h:$(GLSRC)stdpre.h
$(GLSRC)gxstate.h:$(GLGEN)arch.h
-$(GLSRC)gxstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gxtext.h:$(GLSRC)gstext.h
$(GLSRC)gxtext.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxtext.h:$(GLSRC)gsuid.h
+$(GLSRC)gxtext.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxtext.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtext.h:$(GLSRC)gxftype.h
+$(GLSRC)gxtext.h:$(GLSRC)gscms.h
+$(GLSRC)gxtext.h:$(GLSRC)gscspace.h
$(GLSRC)gxtext.h:$(GLSRC)gxpath.h
-$(GLSRC)gxtext.h:$(GLSRC)gspenum.h
-$(GLSRC)gxtext.h:$(GLSRC)gslparam.h
$(GLSRC)gxtext.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxtext.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxtext.h:$(GLSRC)gsrect.h
-$(GLSRC)gxtext.h:$(GLSRC)gscms.h
-$(GLSRC)gxtext.h:$(GLSRC)gxftype.h
$(GLSRC)gxtext.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxtext.h:$(GLSRC)gscspace.h
-$(GLSRC)gxtext.h:$(GLSRC)gsuid.h
$(GLSRC)gxtext.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtext.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtext.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxtext.h:$(GLSRC)gsrect.h
+$(GLSRC)gxtext.h:$(GLSRC)gslparam.h
$(GLSRC)gxtext.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxtext.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxtext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtext.h:$(GLSRC)gscpm.h
$(GLSRC)gxtext.h:$(GLSRC)gxfixed.h
$(GLSRC)gxtext.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxtext.h:$(GLSRC)gscpm.h
-$(GLSRC)gxtext.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxtext.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxtext.h:$(GLSRC)memento.h
$(GLSRC)gxtext.h:$(GLSRC)gsparam.h
-$(GLSRC)gxtext.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxtext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtext.h:$(GLSRC)gsccolor.h
$(GLSRC)gxtext.h:$(GLSRC)gxsync.h
$(GLSRC)gxtext.h:$(GLSRC)scommon.h
+$(GLSRC)gxtext.h:$(GLSRC)memento.h
$(GLSRC)gxtext.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxtext.h:$(GLSRC)gsccolor.h
$(GLSRC)gxtext.h:$(GLSRC)gsstype.h
$(GLSRC)gxtext.h:$(GLSRC)gsmemory.h
$(GLSRC)gxtext.h:$(GLSRC)gpsync.h
$(GLSRC)gxtext.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxtext.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxtext.h:$(GLSRC)stdio_.h
$(GLSRC)gxtext.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxtext.h:$(GLSRC)stdint_.h
$(GLSRC)gxtext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtext.h:$(GLSRC)stdint_.h
+$(GLSRC)gxtext.h:$(GLSRC)gssprintf.h
$(GLSRC)gxtext.h:$(GLSRC)gsccode.h
-$(GLSRC)gxtext.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxtext.h:$(GLSRC)stdio_.h
-$(GLSRC)gxtext.h:$(GLSRC)gstypes.h
$(GLSRC)gxtext.h:$(GLSRC)std.h
+$(GLSRC)gxtext.h:$(GLSRC)gstypes.h
$(GLSRC)gxtext.h:$(GLSRC)stdpre.h
$(GLSRC)gxtext.h:$(GLGEN)arch.h
-$(GLSRC)gxtext.h:$(GLSRC)gssprintf.h
$(GLSRC)gxxfont.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxxfont.h:$(GLSRC)gxtext.h
$(GLSRC)gxxfont.h:$(GLSRC)gstext.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxxfont.h:$(GLSRC)gstparam.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcspace.h
$(GLSRC)gxxfont.h:$(GLSRC)gsropt.h
$(GLSRC)gxxfont.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxxfont.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsuid.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsimage.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxdda.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxxfont.h:$(GLSRC)gsfont.h
$(GLSRC)gxxfont.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxpath.h
-$(GLSRC)gxxfont.h:$(GLSRC)gspenum.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsimage.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxftype.h
$(GLSRC)gxxfont.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxdda.h
-$(GLSRC)gxxfont.h:$(GLSRC)gslparam.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsrect.h
$(GLSRC)gxxfont.h:$(GLSRC)gscms.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxftype.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsdevice.h
$(GLSRC)gxxfont.h:$(GLSRC)gscspace.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsuid.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxpath.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdevice.h
$(GLSRC)gxxfont.h:$(GLSRC)gxarith.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsrect.h
+$(GLSRC)gxxfont.h:$(GLSRC)gslparam.h
$(GLSRC)gxxfont.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscpm.h
$(GLSRC)gxxfont.h:$(GLSRC)gxfixed.h
$(GLSRC)gxxfont.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscpm.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxxfont.h:$(GLSRC)gp.h
-$(GLSRC)gxxfont.h:$(GLSRC)memento.h
$(GLSRC)gxxfont.h:$(GLSRC)gsparam.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxxfont.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)srdline.h
+$(GLSRC)gxxfont.h:$(GLSRC)gp.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsccolor.h
$(GLSRC)gxxfont.h:$(GLSRC)gsstruct.h
$(GLSRC)gxxfont.h:$(GLSRC)gxsync.h
-$(GLSRC)gxxfont.h:$(GLSRC)gscsel.h
+$(GLSRC)gxxfont.h:$(GLSRC)srdline.h
$(GLSRC)gxxfont.h:$(GLSRC)scommon.h
+$(GLSRC)gxxfont.h:$(GLSRC)memento.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscsel.h
$(GLSRC)gxxfont.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxxfont.h:$(GLSRC)gsccolor.h
$(GLSRC)gxxfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gxxfont.h:$(GLSRC)stat_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxtmap.h
$(GLSRC)gxxfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gxxfont.h:$(GLSRC)gpsync.h
-$(GLSRC)gxxfont.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxxfont.h:$(GLSRC)memory_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxxfont.h:$(GLSRC)gslibctx.h
$(GLSRC)gxxfont.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxxfont.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdio_.h
$(GLSRC)gxxfont.h:$(GLSRC)gscompt.h
$(GLSRC)gxxfont.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxxfont.h:$(GLSRC)stdint_.h
$(GLSRC)gxxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gxxfont.h:$(GLSRC)gsccode.h
-$(GLSRC)gxxfont.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxxfont.h:$(GLSRC)stdio_.h
-$(GLSRC)gxxfont.h:$(GLSRC)gstypes.h
$(GLSRC)gxxfont.h:$(GLSRC)std.h
+$(GLSRC)gxxfont.h:$(GLSRC)gstypes.h
$(GLSRC)gxxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gxxfont.h:$(GLGEN)arch.h
-$(GLSRC)gxxfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gxband.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxband.h:$(GLSRC)gxtext.h
$(GLSRC)gxband.h:$(GLSRC)gstext.h
+$(GLSRC)gxband.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxband.h:$(GLSRC)gstparam.h
-$(GLSRC)gxband.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxband.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxband.h:$(GLSRC)gxcspace.h
$(GLSRC)gxband.h:$(GLSRC)gsropt.h
$(GLSRC)gxband.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxband.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxband.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxband.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxband.h:$(GLSRC)gxclio.h
-$(GLSRC)gxband.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsuid.h
+$(GLSRC)gxband.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxband.h:$(GLSRC)gsimage.h
+$(GLSRC)gxband.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxband.h:$(GLSRC)gxdda.h
+$(GLSRC)gxband.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxband.h:$(GLSRC)gsfont.h
$(GLSRC)gxband.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxband.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxband.h:$(GLSRC)gxpath.h
-$(GLSRC)gxband.h:$(GLSRC)gspenum.h
-$(GLSRC)gxband.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxband.h:$(GLSRC)gsimage.h
+$(GLSRC)gxband.h:$(GLSRC)gxftype.h
$(GLSRC)gxband.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxband.h:$(GLSRC)gxdda.h
-$(GLSRC)gxband.h:$(GLSRC)gslparam.h
-$(GLSRC)gxband.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxband.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxband.h:$(GLSRC)gsrect.h
$(GLSRC)gxband.h:$(GLSRC)gscms.h
-$(GLSRC)gxband.h:$(GLSRC)gxftype.h
-$(GLSRC)gxband.h:$(GLSRC)gsdevice.h
$(GLSRC)gxband.h:$(GLSRC)gscspace.h
-$(GLSRC)gxband.h:$(GLSRC)gsuid.h
+$(GLSRC)gxband.h:$(GLSRC)gxpath.h
+$(GLSRC)gxband.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsdevice.h
$(GLSRC)gxband.h:$(GLSRC)gxarith.h
-$(GLSRC)gxband.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxband.h:$(GLSRC)gspenum.h
+$(GLSRC)gxband.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxband.h:$(GLSRC)gsrect.h
+$(GLSRC)gxband.h:$(GLSRC)gslparam.h
$(GLSRC)gxband.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxband.h:$(GLSRC)gxclio.h
+$(GLSRC)gxband.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxband.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxband.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxband.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxband.h:$(GLSRC)gscpm.h
$(GLSRC)gxband.h:$(GLSRC)gxfixed.h
$(GLSRC)gxband.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxband.h:$(GLSRC)gscpm.h
-$(GLSRC)gxband.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxband.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxband.h:$(GLSRC)gp.h
-$(GLSRC)gxband.h:$(GLSRC)memento.h
$(GLSRC)gxband.h:$(GLSRC)gsparam.h
-$(GLSRC)gxband.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxband.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxband.h:$(GLSRC)srdline.h
+$(GLSRC)gxband.h:$(GLSRC)gp.h
+$(GLSRC)gxband.h:$(GLSRC)gsccolor.h
$(GLSRC)gxband.h:$(GLSRC)gsstruct.h
$(GLSRC)gxband.h:$(GLSRC)gxsync.h
-$(GLSRC)gxband.h:$(GLSRC)gscsel.h
+$(GLSRC)gxband.h:$(GLSRC)srdline.h
$(GLSRC)gxband.h:$(GLSRC)scommon.h
+$(GLSRC)gxband.h:$(GLSRC)memento.h
+$(GLSRC)gxband.h:$(GLSRC)gscsel.h
$(GLSRC)gxband.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxband.h:$(GLSRC)gsccolor.h
$(GLSRC)gxband.h:$(GLSRC)gsstype.h
+$(GLSRC)gxband.h:$(GLSRC)stat_.h
+$(GLSRC)gxband.h:$(GLSRC)gxtmap.h
$(GLSRC)gxband.h:$(GLSRC)gsmemory.h
$(GLSRC)gxband.h:$(GLSRC)gpsync.h
-$(GLSRC)gxband.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxband.h:$(GLSRC)memory_.h
+$(GLSRC)gxband.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxband.h:$(GLSRC)gslibctx.h
$(GLSRC)gxband.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxband.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxband.h:$(GLSRC)stdio_.h
$(GLSRC)gxband.h:$(GLSRC)gscompt.h
$(GLSRC)gxband.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxband.h:$(GLSRC)stdint_.h
$(GLSRC)gxband.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxband.h:$(GLSRC)stdint_.h
+$(GLSRC)gxband.h:$(GLSRC)gssprintf.h
$(GLSRC)gxband.h:$(GLSRC)gsccode.h
-$(GLSRC)gxband.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxband.h:$(GLSRC)stdio_.h
-$(GLSRC)gxband.h:$(GLSRC)gstypes.h
$(GLSRC)gxband.h:$(GLSRC)std.h
+$(GLSRC)gxband.h:$(GLSRC)gstypes.h
$(GLSRC)gxband.h:$(GLSRC)stdpre.h
$(GLSRC)gxband.h:$(GLGEN)arch.h
-$(GLSRC)gxband.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcdevn.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcdevn.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsrefct.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcdevn.h:$(GLSRC)memento.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gxcdevn.h:$(GLSRC)memento.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsstype.h
$(GLSRC)gxcdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcdevn.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcdevn.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcdevn.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcdevn.h:$(GLSRC)std.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gstypes.h
$(GLSRC)gxcdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gxcdevn.h:$(GLGEN)arch.h
-$(GLSRC)gxcdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gxchar.h:$(GLSRC)gschar.h
$(GLSRC)gxchar.h:$(GLSRC)gsstate.h
$(GLSRC)gxchar.h:$(GLSRC)gsovrc.h
$(GLSRC)gxchar.h:$(GLSRC)gscolor.h
-$(GLSRC)gxchar.h:$(GLSRC)gsline.h
$(GLSRC)gxchar.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxchar.h:$(GLSRC)gsline.h
$(GLSRC)gxchar.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxchar.h:$(GLSRC)gsht.h
$(GLSRC)gxchar.h:$(GLSRC)gxtext.h
$(GLSRC)gxchar.h:$(GLSRC)gstext.h
$(GLSRC)gxchar.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxchar.h:$(GLSRC)gsuid.h
+$(GLSRC)gxchar.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxchar.h:$(GLSRC)gsfont.h
+$(GLSRC)gxchar.h:$(GLSRC)gxftype.h
+$(GLSRC)gxchar.h:$(GLSRC)gscms.h
+$(GLSRC)gxchar.h:$(GLSRC)gscspace.h
$(GLSRC)gxchar.h:$(GLSRC)gxpath.h
-$(GLSRC)gxchar.h:$(GLSRC)gspenum.h
-$(GLSRC)gxchar.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxchar.h:$(GLSRC)gslparam.h
$(GLSRC)gxchar.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxchar.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxchar.h:$(GLSRC)gsrect.h
-$(GLSRC)gxchar.h:$(GLSRC)gscms.h
-$(GLSRC)gxchar.h:$(GLSRC)gxftype.h
$(GLSRC)gxchar.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxchar.h:$(GLSRC)gscspace.h
-$(GLSRC)gxchar.h:$(GLSRC)gsuid.h
$(GLSRC)gxchar.h:$(GLSRC)gxarith.h
+$(GLSRC)gxchar.h:$(GLSRC)gspenum.h
+$(GLSRC)gxchar.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxchar.h:$(GLSRC)gsrect.h
+$(GLSRC)gxchar.h:$(GLSRC)gslparam.h
$(GLSRC)gxchar.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxchar.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxchar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxchar.h:$(GLSRC)gscpm.h
$(GLSRC)gxchar.h:$(GLSRC)gxfixed.h
$(GLSRC)gxchar.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxchar.h:$(GLSRC)gscpm.h
-$(GLSRC)gxchar.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxchar.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxchar.h:$(GLSRC)memento.h
$(GLSRC)gxchar.h:$(GLSRC)gsparam.h
-$(GLSRC)gxchar.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxchar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxchar.h:$(GLSRC)gsccolor.h
$(GLSRC)gxchar.h:$(GLSRC)gxsync.h
-$(GLSRC)gxchar.h:$(GLSRC)gscsel.h
$(GLSRC)gxchar.h:$(GLSRC)scommon.h
+$(GLSRC)gxchar.h:$(GLSRC)memento.h
+$(GLSRC)gxchar.h:$(GLSRC)gscsel.h
$(GLSRC)gxchar.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxchar.h:$(GLSRC)gsccolor.h
$(GLSRC)gxchar.h:$(GLSRC)gsstype.h
+$(GLSRC)gxchar.h:$(GLSRC)gxtmap.h
$(GLSRC)gxchar.h:$(GLSRC)gsmemory.h
$(GLSRC)gxchar.h:$(GLSRC)gpsync.h
$(GLSRC)gxchar.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxchar.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxchar.h:$(GLSRC)stdio_.h
$(GLSRC)gxchar.h:$(GLSRC)gscompt.h
$(GLSRC)gxchar.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxchar.h:$(GLSRC)stdint_.h
$(GLSRC)gxchar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxchar.h:$(GLSRC)stdint_.h
+$(GLSRC)gxchar.h:$(GLSRC)gssprintf.h
$(GLSRC)gxchar.h:$(GLSRC)gsccode.h
-$(GLSRC)gxchar.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxchar.h:$(GLSRC)stdio_.h
-$(GLSRC)gxchar.h:$(GLSRC)gstypes.h
$(GLSRC)gxchar.h:$(GLSRC)std.h
+$(GLSRC)gxchar.h:$(GLSRC)gstypes.h
$(GLSRC)gxchar.h:$(GLSRC)stdpre.h
$(GLSRC)gxchar.h:$(GLGEN)arch.h
-$(GLSRC)gxchar.h:$(GLSRC)gssprintf.h
$(GLSRC)gxchrout.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gsdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsdcolor.h:$(GLSRC)memento.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsparam.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gsdcolor.h:$(GLSRC)gxsync.h
$(GLSRC)gsdcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gsdcolor.h:$(GLSRC)memento.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gsdcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gsdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gsdcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsdcolor.h:$(GLSRC)stdint_.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gsdcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gsdcolor.h:$(GLSRC)std.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gstypes.h
$(GLSRC)gsdcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsdcolor.h:$(GLGEN)arch.h
-$(GLSRC)gsdcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsropt.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxdcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdcolor.h:$(GLSRC)memento.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdcolor.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gscsel.h
$(GLSRC)gxdcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gxdcolor.h:$(GLSRC)memento.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscsel.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsstype.h
$(GLSRC)gxdcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdcolor.h:$(GLSRC)gpsync.h
$(GLSRC)gxdcolor.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdcolor.h:$(GLSRC)stdint_.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdcolor.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdcolor.h:$(GLSRC)std.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gstypes.h
$(GLSRC)gxdcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gxdcolor.h:$(GLGEN)arch.h
-$(GLSRC)gxdcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxcspace.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gxfrac.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxfrac.h
$(GLSRC)gsnamecl.h:$(GLSRC)gscms.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsdevice.h
$(GLSRC)gsnamecl.h:$(GLSRC)gscspace.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsdevice.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxarith.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsiparam.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsnamecl.h:$(GLSRC)memento.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsparam.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsiparam.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsparam.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsccolor.h
$(GLSRC)gsnamecl.h:$(GLSRC)gxsync.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gscsel.h
$(GLSRC)gsnamecl.h:$(GLSRC)scommon.h
+$(GLSRC)gsnamecl.h:$(GLSRC)memento.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscsel.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsccolor.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsstype.h
$(GLSRC)gsnamecl.h:$(GLSRC)gsmemory.h
$(GLSRC)gsnamecl.h:$(GLSRC)gpsync.h
$(GLSRC)gsnamecl.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsnamecl.h:$(GLSRC)stdint_.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gsgstate.h
$(GLSRC)gsnamecl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsnamecl.h:$(GLSRC)stdio_.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsnamecl.h:$(GLSRC)stdint_.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gssprintf.h
$(GLSRC)gsnamecl.h:$(GLSRC)std.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gstypes.h
$(GLSRC)gsnamecl.h:$(GLSRC)stdpre.h
$(GLSRC)gsnamecl.h:$(GLGEN)arch.h
-$(GLSRC)gsnamecl.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscspace.h:$(GLSRC)gsrefct.h
$(GLSRC)gscspace.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscspace.h:$(GLSRC)memento.h
-$(GLSRC)gscspace.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscspace.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscspace.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscspace.h:$(GLSRC)gsccolor.h
$(GLSRC)gscspace.h:$(GLSRC)scommon.h
+$(GLSRC)gscspace.h:$(GLSRC)memento.h
$(GLSRC)gscspace.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscspace.h:$(GLSRC)gsccolor.h
$(GLSRC)gscspace.h:$(GLSRC)gsstype.h
$(GLSRC)gscspace.h:$(GLSRC)gsmemory.h
$(GLSRC)gscspace.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscspace.h:$(GLSRC)stdint_.h
-$(GLSRC)gscspace.h:$(GLSRC)gsgstate.h
$(GLSRC)gscspace.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscspace.h:$(GLSRC)stdio_.h
-$(GLSRC)gscspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gscspace.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscspace.h:$(GLSRC)stdint_.h
+$(GLSRC)gscspace.h:$(GLSRC)gssprintf.h
$(GLSRC)gscspace.h:$(GLSRC)std.h
+$(GLSRC)gscspace.h:$(GLSRC)gstypes.h
$(GLSRC)gscspace.h:$(GLSRC)stdpre.h
$(GLSRC)gscspace.h:$(GLGEN)arch.h
-$(GLSRC)gscspace.h:$(GLSRC)gssprintf.h
$(GLSRC)gscssub.h:$(GLSRC)gscspace.h
-$(GLSRC)gscssub.h:$(GLSRC)gsrefct.h
$(GLSRC)gscssub.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscssub.h:$(GLSRC)memento.h
-$(GLSRC)gscssub.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscssub.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscssub.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscssub.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscssub.h:$(GLSRC)gsccolor.h
$(GLSRC)gscssub.h:$(GLSRC)scommon.h
+$(GLSRC)gscssub.h:$(GLSRC)memento.h
$(GLSRC)gscssub.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscssub.h:$(GLSRC)gsccolor.h
$(GLSRC)gscssub.h:$(GLSRC)gsstype.h
$(GLSRC)gscssub.h:$(GLSRC)gsmemory.h
$(GLSRC)gscssub.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscssub.h:$(GLSRC)stdint_.h
-$(GLSRC)gscssub.h:$(GLSRC)gsgstate.h
$(GLSRC)gscssub.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscssub.h:$(GLSRC)stdio_.h
-$(GLSRC)gscssub.h:$(GLSRC)gstypes.h
+$(GLSRC)gscssub.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscssub.h:$(GLSRC)stdint_.h
+$(GLSRC)gscssub.h:$(GLSRC)gssprintf.h
$(GLSRC)gscssub.h:$(GLSRC)std.h
+$(GLSRC)gscssub.h:$(GLSRC)gstypes.h
$(GLSRC)gscssub.h:$(GLSRC)stdpre.h
$(GLSRC)gscssub.h:$(GLGEN)arch.h
-$(GLSRC)gscssub.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevcli.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevcli.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gp.h
-$(GLSRC)gxdevcli.h:$(GLSRC)memento.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gp.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevcli.h:$(GLSRC)srdline.h
$(GLSRC)gxdevcli.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevcli.h:$(GLSRC)memento.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevcli.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevcli.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevcli.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevcli.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevcli.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevcli.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevcli.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevcli.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevcli.h:$(GLSRC)std.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevcli.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevcli.h:$(GLGEN)arch.h
-$(GLSRC)gxdevcli.h:$(GLSRC)gssprintf.h
$(GLSRC)gscicach.h:$(GLSRC)gxdevcli.h
$(GLSRC)gscicach.h:$(GLSRC)gxtext.h
$(GLSRC)gscicach.h:$(GLSRC)gstext.h
+$(GLSRC)gscicach.h:$(GLSRC)gsnamecl.h
$(GLSRC)gscicach.h:$(GLSRC)gstparam.h
-$(GLSRC)gscicach.h:$(GLSRC)gxcmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcspace.h
$(GLSRC)gscicach.h:$(GLSRC)gsropt.h
$(GLSRC)gscicach.h:$(GLSRC)gsfunc.h
-$(GLSRC)gscicach.h:$(GLSRC)gsnamecl.h
$(GLSRC)gscicach.h:$(GLSRC)gxrplane.h
-$(GLSRC)gscicach.h:$(GLSRC)gxcspace.h
-$(GLSRC)gscicach.h:$(GLSRC)gxfcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsuid.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gsimage.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gscicach.h:$(GLSRC)gxdda.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcvalue.h
$(GLSRC)gscicach.h:$(GLSRC)gsfont.h
$(GLSRC)gscicach.h:$(GLSRC)gxfmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gscicach.h:$(GLSRC)gxpath.h
-$(GLSRC)gscicach.h:$(GLSRC)gspenum.h
-$(GLSRC)gscicach.h:$(GLSRC)gxtmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gsimage.h
+$(GLSRC)gscicach.h:$(GLSRC)gxftype.h
$(GLSRC)gscicach.h:$(GLSRC)gxfrac.h
-$(GLSRC)gscicach.h:$(GLSRC)gxdda.h
-$(GLSRC)gscicach.h:$(GLSRC)gslparam.h
-$(GLSRC)gscicach.h:$(GLSRC)gxbcache.h
-$(GLSRC)gscicach.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gscicach.h:$(GLSRC)gsrect.h
$(GLSRC)gscicach.h:$(GLSRC)gscms.h
-$(GLSRC)gscicach.h:$(GLSRC)gxftype.h
-$(GLSRC)gscicach.h:$(GLSRC)gsdevice.h
$(GLSRC)gscicach.h:$(GLSRC)gscspace.h
-$(GLSRC)gscicach.h:$(GLSRC)gsuid.h
+$(GLSRC)gscicach.h:$(GLSRC)gxpath.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdevice.h
$(GLSRC)gscicach.h:$(GLSRC)gxarith.h
-$(GLSRC)gscicach.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscicach.h:$(GLSRC)gspenum.h
+$(GLSRC)gscicach.h:$(GLSRC)gxhttile.h
+$(GLSRC)gscicach.h:$(GLSRC)gsrect.h
+$(GLSRC)gscicach.h:$(GLSRC)gslparam.h
$(GLSRC)gscicach.h:$(GLSRC)gsxfont.h
+$(GLSRC)gscicach.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscicach.h:$(GLSRC)gscpm.h
$(GLSRC)gscicach.h:$(GLSRC)gxfixed.h
$(GLSRC)gscicach.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscicach.h:$(GLSRC)gscpm.h
-$(GLSRC)gscicach.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscicach.h:$(GLSRC)gxhttile.h
-$(GLSRC)gscicach.h:$(GLSRC)gp.h
-$(GLSRC)gscicach.h:$(GLSRC)memento.h
$(GLSRC)gscicach.h:$(GLSRC)gsparam.h
-$(GLSRC)gscicach.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscicach.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gscicach.h:$(GLSRC)srdline.h
+$(GLSRC)gscicach.h:$(GLSRC)gp.h
+$(GLSRC)gscicach.h:$(GLSRC)gsccolor.h
$(GLSRC)gscicach.h:$(GLSRC)gsstruct.h
$(GLSRC)gscicach.h:$(GLSRC)gxsync.h
-$(GLSRC)gscicach.h:$(GLSRC)gscsel.h
+$(GLSRC)gscicach.h:$(GLSRC)srdline.h
$(GLSRC)gscicach.h:$(GLSRC)scommon.h
+$(GLSRC)gscicach.h:$(GLSRC)memento.h
+$(GLSRC)gscicach.h:$(GLSRC)gscsel.h
$(GLSRC)gscicach.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscicach.h:$(GLSRC)gsccolor.h
$(GLSRC)gscicach.h:$(GLSRC)gsstype.h
+$(GLSRC)gscicach.h:$(GLSRC)stat_.h
+$(GLSRC)gscicach.h:$(GLSRC)gxtmap.h
$(GLSRC)gscicach.h:$(GLSRC)gsmemory.h
$(GLSRC)gscicach.h:$(GLSRC)gpsync.h
-$(GLSRC)gscicach.h:$(GLSRC)gpgetenv.h
$(GLSRC)gscicach.h:$(GLSRC)memory_.h
+$(GLSRC)gscicach.h:$(GLSRC)gpgetenv.h
$(GLSRC)gscicach.h:$(GLSRC)gslibctx.h
$(GLSRC)gscicach.h:$(GLSRC)gscdefs.h
+$(GLSRC)gscicach.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscicach.h:$(GLSRC)stdio_.h
$(GLSRC)gscicach.h:$(GLSRC)gscompt.h
$(GLSRC)gscicach.h:$(GLSRC)gxcindex.h
-$(GLSRC)gscicach.h:$(GLSRC)stdint_.h
$(GLSRC)gscicach.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscicach.h:$(GLSRC)stdint_.h
+$(GLSRC)gscicach.h:$(GLSRC)gssprintf.h
$(GLSRC)gscicach.h:$(GLSRC)gsccode.h
-$(GLSRC)gscicach.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gscicach.h:$(GLSRC)stdio_.h
-$(GLSRC)gscicach.h:$(GLSRC)gstypes.h
$(GLSRC)gscicach.h:$(GLSRC)std.h
+$(GLSRC)gscicach.h:$(GLSRC)gstypes.h
$(GLSRC)gscicach.h:$(GLSRC)stdpre.h
$(GLSRC)gscicach.h:$(GLGEN)arch.h
-$(GLSRC)gscicach.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevice.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdevice.h:$(GLSRC)gxtext.h
$(GLSRC)gxdevice.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdevice.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdevice.h:$(GLSRC)gsropt.h
$(GLSRC)gxdevice.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxdevice.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdevice.h:$(GLSRC)gsfont.h
$(GLSRC)gxdevice.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdevice.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxftype.h
$(GLSRC)gxdevice.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdevice.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsrect.h
$(GLSRC)gxdevice.h:$(GLSRC)gscms.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevice.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdevice.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxdevice.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxdevice.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevice.h:$(GLSRC)gslparam.h
$(GLSRC)gxdevice.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscpm.h
$(GLSRC)gxdevice.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdevice.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxdevice.h:$(GLSRC)gsio.h
-$(GLSRC)gxdevice.h:$(GLSRC)gp.h
-$(GLSRC)gxdevice.h:$(GLSRC)memento.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxdevice.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdevice.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gp.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevice.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdevice.h:$(GLSRC)gxsync.h
-$(GLSRC)gxdevice.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevice.h:$(GLSRC)srdline.h
$(GLSRC)gxdevice.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevice.h:$(GLSRC)memento.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscsel.h
$(GLSRC)gxdevice.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxdevice.h:$(GLSRC)gsfname.h
-$(GLSRC)gxdevice.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdevice.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevice.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdevice.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdevice.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdevice.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevice.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdevice.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdevice.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevice.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdio_.h
$(GLSRC)gxdevice.h:$(GLSRC)gscompt.h
$(GLSRC)gxdevice.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdevice.h:$(GLSRC)stdint_.h
$(GLSRC)gxdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdevice.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdevice.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdevice.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdevice.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevice.h:$(GLSRC)std.h
+$(GLSRC)gxdevice.h:$(GLSRC)gstypes.h
$(GLSRC)gxdevice.h:$(GLSRC)stdpre.h
$(GLSRC)gxdevice.h:$(GLGEN)arch.h
-$(GLSRC)gxdevice.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdht.h:$(GLSRC)gxht.h
$(GLSRC)gxdht.h:$(GLSRC)gxhttype.h
$(GLSRC)gxdht.h:$(GLSRC)gsht1.h
$(GLSRC)gxdht.h:$(GLSRC)gsht.h
-$(GLSRC)gxdht.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdht.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdht.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdht.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdht.h:$(GLSRC)gscms.h
-$(GLSRC)gxdht.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdht.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdht.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdht.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdht.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdht.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdht.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdht.h:$(GLSRC)memento.h
-$(GLSRC)gxdht.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdht.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdht.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdht.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdht.h:$(GLSRC)gxsync.h
$(GLSRC)gxdht.h:$(GLSRC)scommon.h
+$(GLSRC)gxdht.h:$(GLSRC)memento.h
$(GLSRC)gxdht.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdht.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdht.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdht.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdht.h:$(GLSRC)gpsync.h
$(GLSRC)gxdht.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdht.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdht.h:$(GLSRC)stdint_.h
-$(GLSRC)gxdht.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdht.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdht.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdht.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdht.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdht.h:$(GLSRC)std.h
+$(GLSRC)gxdht.h:$(GLSRC)gstypes.h
$(GLSRC)gxdht.h:$(GLSRC)stdpre.h
$(GLSRC)gxdht.h:$(GLGEN)arch.h
-$(GLSRC)gxdht.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gscms.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)memento.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gxsync.h
$(GLSRC)gxdhtserial.h:$(GLSRC)scommon.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)memento.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsstype.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gpsync.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)stdint_.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdhtserial.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdhtserial.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdhtserial.h:$(GLSRC)std.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gstypes.h
$(GLSRC)gxdhtserial.h:$(GLSRC)stdpre.h
$(GLSRC)gxdhtserial.h:$(GLGEN)arch.h
-$(GLSRC)gxdhtserial.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxdither.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdither.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdither.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdither.h:$(GLSRC)gscms.h
-$(GLSRC)gxdither.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdither.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdither.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdither.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdither.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdither.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdither.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdither.h:$(GLSRC)memento.h
-$(GLSRC)gxdither.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdither.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdither.h:$(GLSRC)gsiparam.h
$(GLSRC)gxdither.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdither.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdither.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdither.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdither.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdither.h:$(GLSRC)gxsync.h
$(GLSRC)gxdither.h:$(GLSRC)scommon.h
+$(GLSRC)gxdither.h:$(GLSRC)memento.h
$(GLSRC)gxdither.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdither.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdither.h:$(GLSRC)gsstype.h
$(GLSRC)gxdither.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdither.h:$(GLSRC)gpsync.h
$(GLSRC)gxdither.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxdither.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdither.h:$(GLSRC)stdint_.h
-$(GLSRC)gxdither.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdither.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdither.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdither.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdither.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdither.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdither.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdither.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdither.h:$(GLSRC)std.h
+$(GLSRC)gxdither.h:$(GLSRC)gstypes.h
$(GLSRC)gxdither.h:$(GLSRC)stdpre.h
$(GLSRC)gxdither.h:$(GLGEN)arch.h
-$(GLSRC)gxdither.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclip2.h:$(GLSRC)gxmclip.h
$(GLSRC)gxclip2.h:$(GLSRC)gxclip.h
$(GLSRC)gxclip2.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclip2.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclip2.h:$(GLSRC)gxtext.h
$(GLSRC)gxclip2.h:$(GLSRC)gstext.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip2.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclip2.h:$(GLSRC)gsropt.h
$(GLSRC)gxclip2.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclip2.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclip2.h:$(GLSRC)gsfont.h
$(GLSRC)gxclip2.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclip2.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxftype.h
$(GLSRC)gxclip2.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclip2.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsrect.h
$(GLSRC)gxclip2.h:$(GLSRC)gscms.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclip2.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclip2.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclip2.h:$(GLSRC)gslparam.h
$(GLSRC)gxclip2.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscpm.h
$(GLSRC)gxclip2.h:$(GLSRC)gxfixed.h
$(GLSRC)gxclip2.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscpm.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxclip2.h:$(GLSRC)gp.h
-$(GLSRC)gxclip2.h:$(GLSRC)memento.h
$(GLSRC)gxclip2.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclip2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)srdline.h
+$(GLSRC)gxclip2.h:$(GLSRC)gp.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclip2.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclip2.h:$(GLSRC)gxsync.h
-$(GLSRC)gxclip2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip2.h:$(GLSRC)srdline.h
$(GLSRC)gxclip2.h:$(GLSRC)scommon.h
+$(GLSRC)gxclip2.h:$(GLSRC)memento.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscsel.h
$(GLSRC)gxclip2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclip2.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclip2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip2.h:$(GLSRC)stat_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclip2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclip2.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclip2.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclip2.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclip2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclip2.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclip2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdio_.h
$(GLSRC)gxclip2.h:$(GLSRC)gscompt.h
$(GLSRC)gxclip2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclip2.h:$(GLSRC)stdint_.h
$(GLSRC)gxclip2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclip2.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclip2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclip2.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclip2.h:$(GLSRC)gstypes.h
$(GLSRC)gxclip2.h:$(GLSRC)std.h
+$(GLSRC)gxclip2.h:$(GLSRC)gstypes.h
$(GLSRC)gxclip2.h:$(GLSRC)stdpre.h
$(GLSRC)gxclip2.h:$(GLGEN)arch.h
-$(GLSRC)gxclip2.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclipm.h:$(GLSRC)gxmclip.h
$(GLSRC)gxclipm.h:$(GLSRC)gxclip.h
$(GLSRC)gxclipm.h:$(GLSRC)gxdevmem.h
$(GLSRC)gxclipm.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclipm.h:$(GLSRC)gxtext.h
$(GLSRC)gxclipm.h:$(GLSRC)gstext.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclipm.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclipm.h:$(GLSRC)gsropt.h
$(GLSRC)gxclipm.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclipm.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclipm.h:$(GLSRC)gsfont.h
$(GLSRC)gxclipm.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclipm.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxftype.h
$(GLSRC)gxclipm.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclipm.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsrect.h
$(GLSRC)gxclipm.h:$(GLSRC)gscms.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclipm.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclipm.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclipm.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclipm.h:$(GLSRC)gslparam.h
$(GLSRC)gxclipm.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscpm.h
$(GLSRC)gxclipm.h:$(GLSRC)gxfixed.h
$(GLSRC)gxclipm.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscpm.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxclipm.h:$(GLSRC)gp.h
-$(GLSRC)gxclipm.h:$(GLSRC)memento.h
$(GLSRC)gxclipm.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxclipm.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)srdline.h
+$(GLSRC)gxclipm.h:$(GLSRC)gp.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclipm.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclipm.h:$(GLSRC)gxsync.h
-$(GLSRC)gxclipm.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclipm.h:$(GLSRC)srdline.h
$(GLSRC)gxclipm.h:$(GLSRC)scommon.h
+$(GLSRC)gxclipm.h:$(GLSRC)memento.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscsel.h
$(GLSRC)gxclipm.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxclipm.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclipm.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclipm.h:$(GLSRC)stat_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclipm.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclipm.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclipm.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclipm.h:$(GLSRC)memory_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclipm.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclipm.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclipm.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdio_.h
$(GLSRC)gxclipm.h:$(GLSRC)gscompt.h
$(GLSRC)gxclipm.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclipm.h:$(GLSRC)stdint_.h
$(GLSRC)gxclipm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclipm.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclipm.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclipm.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclipm.h:$(GLSRC)gstypes.h
$(GLSRC)gxclipm.h:$(GLSRC)std.h
+$(GLSRC)gxclipm.h:$(GLSRC)gstypes.h
$(GLSRC)gxclipm.h:$(GLSRC)stdpre.h
$(GLSRC)gxclipm.h:$(GLGEN)arch.h
-$(GLSRC)gxclipm.h:$(GLSRC)gssprintf.h
$(GLSRC)gxctable.h:$(GLSRC)gxfrac.h
$(GLSRC)gxctable.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxctable.h:$(GLSRC)gstypes.h
$(GLSRC)gxctable.h:$(GLSRC)std.h
+$(GLSRC)gxctable.h:$(GLSRC)gstypes.h
$(GLSRC)gxctable.h:$(GLSRC)stdpre.h
$(GLSRC)gxctable.h:$(GLGEN)arch.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcache.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfcache.h:$(GLSRC)gxbcache.h
$(GLSRC)gxfcache.h:$(GLSRC)gxftype.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxbcache.h
$(GLSRC)gxfcache.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxfcache.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxfcache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfcache.h:$(GLSRC)scommon.h
$(GLSRC)gxfcache.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxfcache.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcache.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcache.h:$(GLSRC)stdint_.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsgstate.h
-$(GLSRC)gxfcache.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcache.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcache.h:$(GLSRC)std.h
+$(GLSRC)gxfcache.h:$(GLSRC)gstypes.h
$(GLSRC)gxfcache.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcache.h:$(GLGEN)arch.h
-$(GLSRC)gxfcache.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont.h:$(GLSRC)gspath.h
$(GLSRC)gxfont.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxfont.h:$(GLSRC)gsgdata.h
@@ -7115,962 +7206,967 @@ $(GLSRC)gxfont.h:$(GLSRC)gxfapi.h
$(GLSRC)gxfont.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfont.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfont.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfont.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont.h:$(GLSRC)gsfont.h
$(GLSRC)gxfont.h:$(GLSRC)gxftype.h
-$(GLSRC)gxfont.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont.h:$(GLSRC)gscms.h
$(GLSRC)gxfont.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfont.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfont.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfont.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfont.h:$(GLSRC)memento.h
$(GLSRC)gxfont.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont.h:$(GLSRC)gxsync.h
$(GLSRC)gxfont.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont.h:$(GLSRC)memento.h
$(GLSRC)gxfont.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfont.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfont.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfont.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont.h:$(GLSRC)std.h
+$(GLSRC)gxfont.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont.h:$(GLGEN)arch.h
-$(GLSRC)gxfont.h:$(GLSRC)gssprintf.h
$(GLSRC)gxiparam.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxiparam.h:$(GLSRC)gxtext.h
$(GLSRC)gxiparam.h:$(GLSRC)gstext.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxiparam.h:$(GLSRC)gstparam.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcspace.h
$(GLSRC)gxiparam.h:$(GLSRC)gsropt.h
$(GLSRC)gxiparam.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxiparam.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsuid.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsimage.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxdda.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxiparam.h:$(GLSRC)gsfont.h
$(GLSRC)gxiparam.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxpath.h
-$(GLSRC)gxiparam.h:$(GLSRC)gspenum.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsimage.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxftype.h
$(GLSRC)gxiparam.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxdda.h
-$(GLSRC)gxiparam.h:$(GLSRC)gslparam.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsrect.h
$(GLSRC)gxiparam.h:$(GLSRC)gscms.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxftype.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsdevice.h
$(GLSRC)gxiparam.h:$(GLSRC)gscspace.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsuid.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxpath.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdevice.h
$(GLSRC)gxiparam.h:$(GLSRC)gxarith.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxiparam.h:$(GLSRC)gspenum.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsrect.h
+$(GLSRC)gxiparam.h:$(GLSRC)gslparam.h
$(GLSRC)gxiparam.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscpm.h
$(GLSRC)gxiparam.h:$(GLSRC)gxfixed.h
$(GLSRC)gxiparam.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscpm.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxiparam.h:$(GLSRC)gp.h
-$(GLSRC)gxiparam.h:$(GLSRC)memento.h
$(GLSRC)gxiparam.h:$(GLSRC)gsparam.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxiparam.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)srdline.h
+$(GLSRC)gxiparam.h:$(GLSRC)gp.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gxiparam.h:$(GLSRC)gsstruct.h
$(GLSRC)gxiparam.h:$(GLSRC)gxsync.h
-$(GLSRC)gxiparam.h:$(GLSRC)gscsel.h
+$(GLSRC)gxiparam.h:$(GLSRC)srdline.h
$(GLSRC)gxiparam.h:$(GLSRC)scommon.h
+$(GLSRC)gxiparam.h:$(GLSRC)memento.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscsel.h
$(GLSRC)gxiparam.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxiparam.h:$(GLSRC)gsccolor.h
$(GLSRC)gxiparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiparam.h:$(GLSRC)stat_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxtmap.h
$(GLSRC)gxiparam.h:$(GLSRC)gsmemory.h
$(GLSRC)gxiparam.h:$(GLSRC)gpsync.h
-$(GLSRC)gxiparam.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxiparam.h:$(GLSRC)memory_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxiparam.h:$(GLSRC)gslibctx.h
$(GLSRC)gxiparam.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxiparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdio_.h
$(GLSRC)gxiparam.h:$(GLSRC)gscompt.h
$(GLSRC)gxiparam.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxiparam.h:$(GLSRC)stdint_.h
$(GLSRC)gxiparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gxiparam.h:$(GLSRC)gsccode.h
-$(GLSRC)gxiparam.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxiparam.h:$(GLSRC)stdio_.h
-$(GLSRC)gxiparam.h:$(GLSRC)gstypes.h
$(GLSRC)gxiparam.h:$(GLSRC)std.h
+$(GLSRC)gxiparam.h:$(GLSRC)gstypes.h
$(GLSRC)gxiparam.h:$(GLSRC)stdpre.h
$(GLSRC)gxiparam.h:$(GLGEN)arch.h
-$(GLSRC)gxiparam.h:$(GLSRC)gssprintf.h
$(GLSRC)gximask.h:$(GLSRC)gsropt.h
-$(GLSRC)gximask.h:$(GLSRC)gxpath.h
-$(GLSRC)gximask.h:$(GLSRC)gspenum.h
-$(GLSRC)gximask.h:$(GLSRC)gslparam.h
$(GLSRC)gximask.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximask.h:$(GLSRC)gsrect.h
$(GLSRC)gximask.h:$(GLSRC)gscms.h
-$(GLSRC)gximask.h:$(GLSRC)gsdevice.h
$(GLSRC)gximask.h:$(GLSRC)gscspace.h
+$(GLSRC)gximask.h:$(GLSRC)gxpath.h
+$(GLSRC)gximask.h:$(GLSRC)gsdevice.h
$(GLSRC)gximask.h:$(GLSRC)gxarith.h
+$(GLSRC)gximask.h:$(GLSRC)gspenum.h
+$(GLSRC)gximask.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximask.h:$(GLSRC)gsrect.h
+$(GLSRC)gximask.h:$(GLSRC)gslparam.h
+$(GLSRC)gximask.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximask.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximask.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximask.h:$(GLSRC)gscpm.h
$(GLSRC)gximask.h:$(GLSRC)gxfixed.h
$(GLSRC)gximask.h:$(GLSRC)gsrefct.h
-$(GLSRC)gximask.h:$(GLSRC)gscpm.h
-$(GLSRC)gximask.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximask.h:$(GLSRC)gxhttile.h
-$(GLSRC)gximask.h:$(GLSRC)memento.h
$(GLSRC)gximask.h:$(GLSRC)gsparam.h
-$(GLSRC)gximask.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximask.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximask.h:$(GLSRC)gsccolor.h
$(GLSRC)gximask.h:$(GLSRC)gxsync.h
$(GLSRC)gximask.h:$(GLSRC)scommon.h
+$(GLSRC)gximask.h:$(GLSRC)memento.h
$(GLSRC)gximask.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximask.h:$(GLSRC)gsccolor.h
$(GLSRC)gximask.h:$(GLSRC)gsstype.h
$(GLSRC)gximask.h:$(GLSRC)gsmemory.h
$(GLSRC)gximask.h:$(GLSRC)gpsync.h
$(GLSRC)gximask.h:$(GLSRC)gslibctx.h
-$(GLSRC)gximask.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximask.h:$(GLSRC)stdint_.h
-$(GLSRC)gximask.h:$(GLSRC)gsgstate.h
$(GLSRC)gximask.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gximask.h:$(GLSRC)stdio_.h
-$(GLSRC)gximask.h:$(GLSRC)gstypes.h
+$(GLSRC)gximask.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximask.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximask.h:$(GLSRC)stdint_.h
+$(GLSRC)gximask.h:$(GLSRC)gssprintf.h
$(GLSRC)gximask.h:$(GLSRC)std.h
+$(GLSRC)gximask.h:$(GLSRC)gstypes.h
$(GLSRC)gximask.h:$(GLSRC)stdpre.h
$(GLSRC)gximask.h:$(GLGEN)arch.h
-$(GLSRC)gximask.h:$(GLSRC)gssprintf.h
$(GLSRC)gscie.h:$(GLSRC)gxctable.h
$(GLSRC)gscie.h:$(GLSRC)gxfrac.h
$(GLSRC)gscie.h:$(GLSRC)gscspace.h
-$(GLSRC)gscie.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscie.h:$(GLSRC)gsrefct.h
$(GLSRC)gscie.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscie.h:$(GLSRC)memento.h
-$(GLSRC)gscie.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscie.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscie.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscie.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscie.h:$(GLSRC)gsccolor.h
$(GLSRC)gscie.h:$(GLSRC)scommon.h
+$(GLSRC)gscie.h:$(GLSRC)memento.h
$(GLSRC)gscie.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscie.h:$(GLSRC)gsccolor.h
$(GLSRC)gscie.h:$(GLSRC)gsstype.h
$(GLSRC)gscie.h:$(GLSRC)gsmemory.h
$(GLSRC)gscie.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscie.h:$(GLSRC)stdint_.h
-$(GLSRC)gscie.h:$(GLSRC)gsgstate.h
$(GLSRC)gscie.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscie.h:$(GLSRC)stdio_.h
-$(GLSRC)gscie.h:$(GLSRC)gstypes.h
+$(GLSRC)gscie.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscie.h:$(GLSRC)stdint_.h
+$(GLSRC)gscie.h:$(GLSRC)gssprintf.h
$(GLSRC)gscie.h:$(GLSRC)std.h
+$(GLSRC)gscie.h:$(GLSRC)gstypes.h
$(GLSRC)gscie.h:$(GLSRC)stdpre.h
$(GLSRC)gscie.h:$(GLGEN)arch.h
-$(GLSRC)gscie.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc.h:$(GLSRC)gscie.h
-$(GLSRC)gsicc.h:$(GLSRC)gxctable.h
$(GLSRC)gsicc.h:$(GLSRC)gxcspace.h
-$(GLSRC)gsicc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsicc.h:$(GLSRC)gxctable.h
$(GLSRC)gsicc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsicc.h:$(GLSRC)gxfrac.h
$(GLSRC)gsicc.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc.h:$(GLSRC)gxarith.h
+$(GLSRC)gsicc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsicc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc.h:$(GLSRC)gxfixed.h
$(GLSRC)gsicc.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsicc.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsicc.h:$(GLSRC)memento.h
$(GLSRC)gsicc.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsicc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc.h:$(GLSRC)gxsync.h
-$(GLSRC)gsicc.h:$(GLSRC)gscsel.h
$(GLSRC)gsicc.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc.h:$(GLSRC)memento.h
+$(GLSRC)gsicc.h:$(GLSRC)gscsel.h
$(GLSRC)gsicc.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsicc.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsicc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc.h:$(GLSRC)std.h
+$(GLSRC)gsicc.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc.h:$(GLGEN)arch.h
-$(GLSRC)gsicc.h:$(GLSRC)gssprintf.h
$(GLSRC)gscrd.h:$(GLSRC)gscie.h
$(GLSRC)gscrd.h:$(GLSRC)gxctable.h
$(GLSRC)gscrd.h:$(GLSRC)gxfrac.h
$(GLSRC)gscrd.h:$(GLSRC)gscspace.h
-$(GLSRC)gscrd.h:$(GLSRC)gxfixed.h
-$(GLSRC)gscrd.h:$(GLSRC)gsrefct.h
$(GLSRC)gscrd.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscrd.h:$(GLSRC)memento.h
-$(GLSRC)gscrd.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrd.h:$(GLSRC)scommon.h
+$(GLSRC)gscrd.h:$(GLSRC)memento.h
$(GLSRC)gscrd.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscrd.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrd.h:$(GLSRC)gsstype.h
$(GLSRC)gscrd.h:$(GLSRC)gsmemory.h
$(GLSRC)gscrd.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscrd.h:$(GLSRC)stdint_.h
-$(GLSRC)gscrd.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrd.h:$(GLSRC)stdio_.h
-$(GLSRC)gscrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gscrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gscrd.h:$(GLSRC)std.h
+$(GLSRC)gscrd.h:$(GLSRC)gstypes.h
$(GLSRC)gscrd.h:$(GLSRC)stdpre.h
$(GLSRC)gscrd.h:$(GLGEN)arch.h
-$(GLSRC)gscrd.h:$(GLSRC)gssprintf.h
$(GLSRC)gscrdp.h:$(GLSRC)gscie.h
$(GLSRC)gscrdp.h:$(GLSRC)gxctable.h
$(GLSRC)gscrdp.h:$(GLSRC)gxfrac.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsdevice.h
$(GLSRC)gscrdp.h:$(GLSRC)gscspace.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscrdp.h:$(GLSRC)gxfixed.h
$(GLSRC)gscrdp.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscrdp.h:$(GLSRC)memento.h
$(GLSRC)gscrdp.h:$(GLSRC)gsparam.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscrdp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrdp.h:$(GLSRC)scommon.h
+$(GLSRC)gscrdp.h:$(GLSRC)memento.h
$(GLSRC)gscrdp.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsccolor.h
$(GLSRC)gscrdp.h:$(GLSRC)gsstype.h
$(GLSRC)gscrdp.h:$(GLSRC)gsmemory.h
$(GLSRC)gscrdp.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscrdp.h:$(GLSRC)stdint_.h
-$(GLSRC)gscrdp.h:$(GLSRC)gsgstate.h
$(GLSRC)gscrdp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscrdp.h:$(GLSRC)stdio_.h
-$(GLSRC)gscrdp.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscrdp.h:$(GLSRC)stdint_.h
+$(GLSRC)gscrdp.h:$(GLSRC)gssprintf.h
$(GLSRC)gscrdp.h:$(GLSRC)std.h
+$(GLSRC)gscrdp.h:$(GLSRC)gstypes.h
$(GLSRC)gscrdp.h:$(GLSRC)stdpre.h
$(GLSRC)gscrdp.h:$(GLGEN)arch.h
-$(GLSRC)gscrdp.h:$(GLSRC)gssprintf.h
$(GLSRC)gscdevn.h:$(GLSRC)gsfunc.h
$(GLSRC)gscdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsiparam.h
$(GLSRC)gscdevn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscdevn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscdevn.h:$(GLSRC)memento.h
$(GLSRC)gscdevn.h:$(GLSRC)gsparam.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gscdevn.h:$(GLSRC)gsstruct.h
$(GLSRC)gscdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gscdevn.h:$(GLSRC)memento.h
$(GLSRC)gscdevn.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gscdevn.h:$(GLSRC)gsstype.h
$(GLSRC)gscdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gscdevn.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscdevn.h:$(GLSRC)stdint_.h
-$(GLSRC)gscdevn.h:$(GLSRC)gsgstate.h
$(GLSRC)gscdevn.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscdevn.h:$(GLSRC)stdio_.h
-$(GLSRC)gscdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gscdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gscdevn.h:$(GLSRC)std.h
+$(GLSRC)gscdevn.h:$(GLSRC)gstypes.h
$(GLSRC)gscdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gscdevn.h:$(GLGEN)arch.h
-$(GLSRC)gscdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gscindex.h:$(GLSRC)gxfrac.h
$(GLSRC)gscindex.h:$(GLSRC)gscspace.h
-$(GLSRC)gscindex.h:$(GLSRC)gsrefct.h
$(GLSRC)gscindex.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscindex.h:$(GLSRC)memento.h
-$(GLSRC)gscindex.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscindex.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscindex.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscindex.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscindex.h:$(GLSRC)gsccolor.h
$(GLSRC)gscindex.h:$(GLSRC)scommon.h
+$(GLSRC)gscindex.h:$(GLSRC)memento.h
$(GLSRC)gscindex.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscindex.h:$(GLSRC)gsccolor.h
$(GLSRC)gscindex.h:$(GLSRC)gsstype.h
$(GLSRC)gscindex.h:$(GLSRC)gsmemory.h
$(GLSRC)gscindex.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscindex.h:$(GLSRC)stdint_.h
-$(GLSRC)gscindex.h:$(GLSRC)gsgstate.h
$(GLSRC)gscindex.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscindex.h:$(GLSRC)stdio_.h
-$(GLSRC)gscindex.h:$(GLSRC)gstypes.h
+$(GLSRC)gscindex.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscindex.h:$(GLSRC)stdint_.h
+$(GLSRC)gscindex.h:$(GLSRC)gssprintf.h
$(GLSRC)gscindex.h:$(GLSRC)std.h
+$(GLSRC)gscindex.h:$(GLSRC)gstypes.h
$(GLSRC)gscindex.h:$(GLSRC)stdpre.h
$(GLSRC)gscindex.h:$(GLGEN)arch.h
-$(GLSRC)gscindex.h:$(GLSRC)gssprintf.h
$(GLSRC)gscolor2.h:$(GLSRC)gscindex.h
$(GLSRC)gscolor2.h:$(GLSRC)gsptype1.h
-$(GLSRC)gscolor2.h:$(GLSRC)gspcolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gscie.h
+$(GLSRC)gscolor2.h:$(GLSRC)gspcolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gxctable.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsuid.h
$(GLSRC)gscolor2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxfrac.h
$(GLSRC)gscolor2.h:$(GLSRC)gscms.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsdevice.h
$(GLSRC)gscolor2.h:$(GLSRC)gscspace.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsuid.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsdevice.h
$(GLSRC)gscolor2.h:$(GLSRC)gxarith.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscolor2.h:$(GLSRC)gxfixed.h
$(GLSRC)gscolor2.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxhttile.h
-$(GLSRC)gscolor2.h:$(GLSRC)memento.h
$(GLSRC)gscolor2.h:$(GLSRC)gsparam.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsccolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gxsync.h
$(GLSRC)gscolor2.h:$(GLSRC)scommon.h
+$(GLSRC)gscolor2.h:$(GLSRC)memento.h
$(GLSRC)gscolor2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsccolor.h
$(GLSRC)gscolor2.h:$(GLSRC)gsstype.h
$(GLSRC)gscolor2.h:$(GLSRC)gsmemory.h
$(GLSRC)gscolor2.h:$(GLSRC)gpsync.h
$(GLSRC)gscolor2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscolor2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gscolor2.h:$(GLSRC)stdint_.h
-$(GLSRC)gscolor2.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor2.h:$(GLSRC)stdio_.h
-$(GLSRC)gscolor2.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor2.h:$(GLSRC)stdint_.h
+$(GLSRC)gscolor2.h:$(GLSRC)gssprintf.h
$(GLSRC)gscolor2.h:$(GLSRC)std.h
+$(GLSRC)gscolor2.h:$(GLSRC)gstypes.h
$(GLSRC)gscolor2.h:$(GLSRC)stdpre.h
$(GLSRC)gscolor2.h:$(GLGEN)arch.h
-$(GLSRC)gscolor2.h:$(GLSRC)gssprintf.h
$(GLSRC)gscsepr.h:$(GLSRC)gsfunc.h
$(GLSRC)gscsepr.h:$(GLSRC)gscspace.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsiparam.h
$(GLSRC)gscsepr.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscsepr.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscsepr.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscsepr.h:$(GLSRC)memento.h
$(GLSRC)gscsepr.h:$(GLSRC)gsparam.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscsepr.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsccolor.h
$(GLSRC)gscsepr.h:$(GLSRC)gsstruct.h
$(GLSRC)gscsepr.h:$(GLSRC)scommon.h
+$(GLSRC)gscsepr.h:$(GLSRC)memento.h
$(GLSRC)gscsepr.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsccolor.h
$(GLSRC)gscsepr.h:$(GLSRC)gsstype.h
$(GLSRC)gscsepr.h:$(GLSRC)gsmemory.h
$(GLSRC)gscsepr.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscsepr.h:$(GLSRC)stdint_.h
-$(GLSRC)gscsepr.h:$(GLSRC)gsgstate.h
$(GLSRC)gscsepr.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscsepr.h:$(GLSRC)stdio_.h
-$(GLSRC)gscsepr.h:$(GLSRC)gstypes.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscsepr.h:$(GLSRC)stdint_.h
+$(GLSRC)gscsepr.h:$(GLSRC)gssprintf.h
$(GLSRC)gscsepr.h:$(GLSRC)std.h
+$(GLSRC)gscsepr.h:$(GLSRC)gstypes.h
$(GLSRC)gscsepr.h:$(GLSRC)stdpre.h
$(GLSRC)gscsepr.h:$(GLGEN)arch.h
-$(GLSRC)gscsepr.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdcconv.h:$(GLSRC)gxfrac.h
$(GLSRC)gxdcconv.h:$(GLSRC)gsgstate.h
$(GLSRC)gxdcconv.h:$(GLSRC)std.h
$(GLSRC)gxdcconv.h:$(GLSRC)stdpre.h
$(GLSRC)gxdcconv.h:$(GLGEN)arch.h
-$(GLSRC)gxfmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxfmap.h:$(GLSRC)gxfrac.h
$(GLSRC)gxfmap.h:$(GLSRC)gsrefct.h
$(GLSRC)gxfmap.h:$(GLSRC)memento.h
$(GLSRC)gxfmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxfmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfmap.h:$(GLSRC)gslibctx.h
$(GLSRC)gxfmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfmap.h:$(GLSRC)std.h
+$(GLSRC)gxfmap.h:$(GLSRC)gstypes.h
$(GLSRC)gxfmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxfmap.h:$(GLGEN)arch.h
-$(GLSRC)gxfmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxcmap.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxfmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxcmap.h:$(GLSRC)gscms.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcmap.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcmap.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcmap.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxcmap.h:$(GLSRC)memento.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcmap.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcmap.h:$(GLSRC)gxsync.h
-$(GLSRC)gxcmap.h:$(GLSRC)gscsel.h
$(GLSRC)gxcmap.h:$(GLSRC)scommon.h
+$(GLSRC)gxcmap.h:$(GLSRC)memento.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscsel.h
$(GLSRC)gxcmap.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcmap.h:$(GLSRC)gpsync.h
$(GLSRC)gxcmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcmap.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcmap.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcmap.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcmap.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcmap.h:$(GLSRC)std.h
+$(GLSRC)gxcmap.h:$(GLSRC)gstypes.h
$(GLSRC)gxcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxcmap.h:$(GLGEN)arch.h
-$(GLSRC)gxcmap.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxgstate.h:$(GLSRC)gstrans.h
$(GLSRC)gxgstate.h:$(GLSRC)gxline.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstrans.h
$(GLSRC)gxgstate.h:$(GLSRC)gsht1.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcomp.h
$(GLSRC)gxgstate.h:$(GLSRC)math_.h
$(GLSRC)gxgstate.h:$(GLSRC)gdevp14.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxgstate.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxgstate.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsequivc.h
$(GLSRC)gxgstate.h:$(GLSRC)gxblend.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxgstate.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxgstate.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxgstate.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscindex.h
$(GLSRC)gxgstate.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcpath.h
$(GLSRC)gxgstate.h:$(GLSRC)gsht.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcpath.h
$(GLSRC)gxgstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxgstate.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscindex.h
$(GLSRC)gxgstate.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxgstate.h:$(GLSRC)gxtext.h
-$(GLSRC)gxgstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscie.h
$(GLSRC)gxgstate.h:$(GLSRC)gstext.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxgstate.h:$(GLSRC)gstparam.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscie.h
$(GLSRC)gxgstate.h:$(GLSRC)gxstate.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcspace.h
$(GLSRC)gxgstate.h:$(GLSRC)gsropt.h
$(GLSRC)gxgstate.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxctable.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxgstate.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxctable.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxgstate.h:$(GLSRC)gsfont.h
$(GLSRC)gxgstate.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxpath.h
-$(GLSRC)gxgstate.h:$(GLSRC)gspenum.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxftype.h
$(GLSRC)gxgstate.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxdda.h
-$(GLSRC)gxgstate.h:$(GLSRC)gslparam.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsrect.h
$(GLSRC)gxgstate.h:$(GLSRC)gscms.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxftype.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsdevice.h
$(GLSRC)gxgstate.h:$(GLSRC)gscspace.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxpath.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdevice.h
$(GLSRC)gxgstate.h:$(GLSRC)gxarith.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxgstate.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxgstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsrect.h
+$(GLSRC)gxgstate.h:$(GLSRC)gslparam.h
$(GLSRC)gxgstate.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxgstate.h:$(GLSRC)gscpm.h
$(GLSRC)gxgstate.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxgstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxgstate.h:$(GLSRC)gsio.h
-$(GLSRC)gxgstate.h:$(GLSRC)gp.h
-$(GLSRC)gxgstate.h:$(GLSRC)memento.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsparam.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxgstate.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxgstate.h:$(GLSRC)srdline.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gp.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gxgstate.h:$(GLSRC)gsstruct.h
$(GLSRC)gxgstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gxgstate.h:$(GLSRC)srdline.h
+$(GLSRC)gxgstate.h:$(GLSRC)scommon.h
+$(GLSRC)gxgstate.h:$(GLSRC)memento.h
$(GLSRC)gxgstate.h:$(GLSRC)vmsmath.h
$(GLSRC)gxgstate.h:$(GLSRC)gscsel.h
-$(GLSRC)gxgstate.h:$(GLSRC)scommon.h
$(GLSRC)gxgstate.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxgstate.h:$(GLSRC)gsfname.h
-$(GLSRC)gxgstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gxgstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgstate.h:$(GLSRC)stat_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxtmap.h
$(GLSRC)gxgstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gxgstate.h:$(GLSRC)gpsync.h
-$(GLSRC)gxgstate.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxgstate.h:$(GLSRC)memory_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxgstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gxgstate.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxgstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdio_.h
$(GLSRC)gxgstate.h:$(GLSRC)gscompt.h
$(GLSRC)gxgstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxgstate.h:$(GLSRC)stdint_.h
$(GLSRC)gxgstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gxgstate.h:$(GLSRC)gsccode.h
-$(GLSRC)gxgstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxgstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gxgstate.h:$(GLSRC)gstypes.h
$(GLSRC)gxgstate.h:$(GLSRC)std.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstypes.h
$(GLSRC)gxgstate.h:$(GLSRC)stdpre.h
$(GLSRC)gxgstate.h:$(GLGEN)arch.h
-$(GLSRC)gxgstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscolor2.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscindex.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsptype1.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsptype1.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxtext.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscie.h
$(GLSRC)gxcolor2.h:$(GLSRC)gstext.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcolor2.h:$(GLSRC)gstparam.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscie.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsropt.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxctable.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsfont.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxftype.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxdda.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gslparam.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsrect.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscms.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxftype.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gslparam.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscpm.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxfixed.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscpm.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gp.h
-$(GLSRC)gxcolor2.h:$(GLSRC)memento.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)srdline.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gp.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxsync.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcolor2.h:$(GLSRC)srdline.h
$(GLSRC)gxcolor2.h:$(GLSRC)scommon.h
+$(GLSRC)gxcolor2.h:$(GLSRC)memento.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscsel.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stat_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcolor2.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcolor2.h:$(GLSRC)memory_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcolor2.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdio_.h
$(GLSRC)gxcolor2.h:$(GLSRC)gscompt.h
$(GLSRC)gxcolor2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcolor2.h:$(GLSRC)stdint_.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcolor2.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcolor2.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gstypes.h
$(GLSRC)gxcolor2.h:$(GLSRC)std.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gstypes.h
$(GLSRC)gxcolor2.h:$(GLSRC)stdpre.h
$(GLSRC)gxcolor2.h:$(GLGEN)arch.h
-$(GLSRC)gxcolor2.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclist.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclist.h:$(GLSRC)gstrans.h
$(GLSRC)gxclist.h:$(GLSRC)gxline.h
+$(GLSRC)gxclist.h:$(GLSRC)gstrans.h
$(GLSRC)gxclist.h:$(GLSRC)gsht1.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclist.h:$(GLSRC)math_.h
$(GLSRC)gxclist.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclist.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclist.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxclist.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclist.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclist.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclist.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclist.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gxclist.h:$(GLSRC)gxband.h
-$(GLSRC)gxclist.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxclist.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclist.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxclist.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclist.h:$(GLSRC)gscindex.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclist.h:$(GLSRC)gsht.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclist.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclist.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxclist.h:$(GLSRC)gscindex.h
$(GLSRC)gxclist.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclist.h:$(GLSRC)gxtext.h
-$(GLSRC)gxclist.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gscie.h
$(GLSRC)gxclist.h:$(GLSRC)gstext.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclist.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclist.h:$(GLSRC)gscie.h
$(GLSRC)gxclist.h:$(GLSRC)gxstate.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxclist.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclist.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclist.h:$(GLSRC)gsropt.h
$(GLSRC)gxclist.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclist.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclist.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxclist.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclist.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclist.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclist.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclist.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclist.h:$(GLSRC)gsfont.h
$(GLSRC)gxclist.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclist.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclist.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclist.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclist.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclist.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclist.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclist.h:$(GLSRC)gxftype.h
$(GLSRC)gxclist.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclist.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclist.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclist.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclist.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclist.h:$(GLSRC)gsrect.h
$(GLSRC)gxclist.h:$(GLSRC)gscms.h
-$(GLSRC)gxclist.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclist.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclist.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclist.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclist.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclist.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclist.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclist.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclist.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclist.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclist.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclist.h:$(GLSRC)gslparam.h
$(GLSRC)gxclist.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclist.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclist.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclist.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclist.h:$(GLSRC)gxclio.h
$(GLSRC)gxclist.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclist.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclist.h:$(GLSRC)gsio.h
-$(GLSRC)gxclist.h:$(GLSRC)gp.h
-$(GLSRC)gxclist.h:$(GLSRC)memento.h
-$(GLSRC)gxclist.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclist.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxclist.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclist.h:$(GLSRC)srdline.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclist.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclist.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclist.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gp.h
+$(GLSRC)gxclist.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclist.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclist.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclist.h:$(GLSRC)srdline.h
+$(GLSRC)gxclist.h:$(GLSRC)scommon.h
+$(GLSRC)gxclist.h:$(GLSRC)memento.h
$(GLSRC)gxclist.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclist.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclist.h:$(GLSRC)scommon.h
$(GLSRC)gxclist.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclist.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclist.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclist.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclist.h:$(GLSRC)stat_.h
+$(GLSRC)gxclist.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclist.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclist.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclist.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclist.h:$(GLSRC)memory_.h
+$(GLSRC)gxclist.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclist.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclist.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclist.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclist.h:$(GLSRC)stdio_.h
$(GLSRC)gxclist.h:$(GLSRC)gscompt.h
$(GLSRC)gxclist.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclist.h:$(GLSRC)stdint_.h
$(GLSRC)gxclist.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclist.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclist.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclist.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclist.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclist.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclist.h:$(GLSRC)gstypes.h
$(GLSRC)gxclist.h:$(GLSRC)std.h
+$(GLSRC)gxclist.h:$(GLSRC)gstypes.h
$(GLSRC)gxclist.h:$(GLSRC)stdpre.h
$(GLSRC)gxclist.h:$(GLGEN)arch.h
-$(GLSRC)gxclist.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxcspace.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcspace.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcspace.h:$(GLSRC)gscms.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcspace.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcspace.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcspace.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxcspace.h:$(GLSRC)memento.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsiparam.h
$(GLSRC)gxcspace.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcspace.h:$(GLSRC)gxsync.h
-$(GLSRC)gxcspace.h:$(GLSRC)gscsel.h
$(GLSRC)gxcspace.h:$(GLSRC)scommon.h
+$(GLSRC)gxcspace.h:$(GLSRC)memento.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscsel.h
$(GLSRC)gxcspace.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcspace.h:$(GLSRC)gsstype.h
$(GLSRC)gxcspace.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcspace.h:$(GLSRC)gpsync.h
$(GLSRC)gxcspace.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcspace.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcspace.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcspace.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcspace.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcspace.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcspace.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcspace.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcspace.h:$(GLSRC)std.h
+$(GLSRC)gxcspace.h:$(GLSRC)gstypes.h
$(GLSRC)gxcspace.h:$(GLSRC)stdpre.h
$(GLSRC)gxcspace.h:$(GLGEN)arch.h
-$(GLSRC)gxcspace.h:$(GLSRC)gssprintf.h
$(GLSRC)gxht.h:$(GLSRC)gxhttype.h
$(GLSRC)gxht.h:$(GLSRC)gsht1.h
$(GLSRC)gxht.h:$(GLSRC)gsht.h
-$(GLSRC)gxht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxht.h:$(GLSRC)gscspace.h
-$(GLSRC)gxht.h:$(GLSRC)gsrefct.h
$(GLSRC)gxht.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxht.h:$(GLSRC)memento.h
-$(GLSRC)gxht.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxht.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht.h:$(GLSRC)scommon.h
+$(GLSRC)gxht.h:$(GLSRC)memento.h
$(GLSRC)gxht.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxht.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht.h:$(GLSRC)gsstype.h
+$(GLSRC)gxht.h:$(GLSRC)gxtmap.h
$(GLSRC)gxht.h:$(GLSRC)gsmemory.h
$(GLSRC)gxht.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxht.h:$(GLSRC)stdint_.h
-$(GLSRC)gxht.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht.h:$(GLSRC)stdio_.h
-$(GLSRC)gxht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxht.h:$(GLSRC)stdint_.h
+$(GLSRC)gxht.h:$(GLSRC)gssprintf.h
$(GLSRC)gxht.h:$(GLSRC)std.h
+$(GLSRC)gxht.h:$(GLSRC)gstypes.h
$(GLSRC)gxht.h:$(GLSRC)stdpre.h
$(GLSRC)gxht.h:$(GLGEN)arch.h
-$(GLSRC)gxht.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcie.h:$(GLSRC)gscie.h
-$(GLSRC)gxcie.h:$(GLSRC)gxctable.h
$(GLSRC)gxcie.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcie.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxcie.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcie.h:$(GLSRC)gxctable.h
$(GLSRC)gxcie.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcie.h:$(GLSRC)gxfrac.h
$(GLSRC)gxcie.h:$(GLSRC)gscms.h
-$(GLSRC)gxcie.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcie.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcie.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcie.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcie.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcie.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcie.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcie.h:$(GLSRC)gxfixed.h
$(GLSRC)gxcie.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcie.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcie.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxcie.h:$(GLSRC)memento.h
$(GLSRC)gxcie.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcie.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxcie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcie.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcie.h:$(GLSRC)gxsync.h
-$(GLSRC)gxcie.h:$(GLSRC)gscsel.h
$(GLSRC)gxcie.h:$(GLSRC)scommon.h
+$(GLSRC)gxcie.h:$(GLSRC)memento.h
+$(GLSRC)gxcie.h:$(GLSRC)gscsel.h
$(GLSRC)gxcie.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxcie.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcie.h:$(GLSRC)gsstype.h
$(GLSRC)gxcie.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcie.h:$(GLSRC)gpsync.h
$(GLSRC)gxcie.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxcie.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcie.h:$(GLSRC)stdint_.h
-$(GLSRC)gxcie.h:$(GLSRC)gsgstate.h
$(GLSRC)gxcie.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcie.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcie.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcie.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcie.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcie.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcie.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcie.h:$(GLSRC)std.h
+$(GLSRC)gxcie.h:$(GLSRC)gstypes.h
$(GLSRC)gxcie.h:$(GLSRC)stdpre.h
$(GLSRC)gxcie.h:$(GLGEN)arch.h
-$(GLSRC)gxcie.h:$(GLSRC)gssprintf.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gxiclass.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gxdda.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxiclass.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gxfixed.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsparam.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsparam.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht_thresh.h:$(GLSRC)scommon.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsccolor.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsstype.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gsmemory.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)stdint_.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gsgstate.h
$(GLSRC)gxht_thresh.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxht_thresh.h:$(GLSRC)stdio_.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)stdint_.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gssprintf.h
$(GLSRC)gxht_thresh.h:$(GLSRC)std.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gstypes.h
$(GLSRC)gxht_thresh.h:$(GLSRC)stdpre.h
$(GLSRC)gxht_thresh.h:$(GLGEN)arch.h
-$(GLSRC)gxht_thresh.h:$(GLSRC)gssprintf.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxblend.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdevice.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxcpath.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdevmem.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxpcache.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxpcache.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxtext.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gspcolor.h
$(GLSRC)gxpcolor.h:$(GLSRC)gstext.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxpcolor.h:$(GLSRC)gstparam.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcspace.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsropt.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsimage.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdda.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsfont.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxpath.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gspenum.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsimage.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxftype.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxdda.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gslparam.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsrect.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscms.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxftype.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscspace.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxpath.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdevice.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxarith.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsrect.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gslparam.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscpm.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsio.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gp.h
-$(GLSRC)gxpcolor.h:$(GLSRC)memento.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsparam.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxpcolor.h:$(GLSRC)srdline.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gp.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsstruct.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxsync.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gscsel.h
+$(GLSRC)gxpcolor.h:$(GLSRC)srdline.h
$(GLSRC)gxpcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gxpcolor.h:$(GLSRC)memento.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscsel.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsfname.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gsccolor.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stat_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxtmap.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsmemory.h
$(GLSRC)gxpcolor.h:$(GLSRC)gpsync.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxpcolor.h:$(GLSRC)memory_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxpcolor.h:$(GLSRC)gslibctx.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdio_.h
$(GLSRC)gxpcolor.h:$(GLSRC)gscompt.h
$(GLSRC)gxpcolor.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxpcolor.h:$(GLSRC)stdint_.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gxpcolor.h:$(GLSRC)gsccode.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxpcolor.h:$(GLSRC)stdio_.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gstypes.h
$(GLSRC)gxpcolor.h:$(GLSRC)std.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gstypes.h
$(GLSRC)gxpcolor.h:$(GLSRC)stdpre.h
$(GLSRC)gxpcolor.h:$(GLGEN)arch.h
-$(GLSRC)gxpcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gscolor.h:$(GLSRC)gxtmap.h
$(GLSRC)gscolor.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor.h:$(GLSRC)stdpre.h
$(GLSRC)gsstate.h:$(GLSRC)gsovrc.h
$(GLSRC)gsstate.h:$(GLSRC)gscolor.h
-$(GLSRC)gsstate.h:$(GLSRC)gsline.h
$(GLSRC)gsstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gsstate.h:$(GLSRC)gsline.h
$(GLSRC)gsstate.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gsstate.h:$(GLSRC)gsht.h
-$(GLSRC)gsstate.h:$(GLSRC)gxtmap.h
-$(GLSRC)gsstate.h:$(GLSRC)gslparam.h
$(GLSRC)gsstate.h:$(GLSRC)gsdevice.h
-$(GLSRC)gsstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gsstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsstate.h:$(GLSRC)gscpm.h
-$(GLSRC)gsstate.h:$(GLSRC)memento.h
+$(GLSRC)gsstate.h:$(GLSRC)gsrefct.h
$(GLSRC)gsstate.h:$(GLSRC)gsparam.h
-$(GLSRC)gsstate.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsstate.h:$(GLSRC)gscsel.h
$(GLSRC)gsstate.h:$(GLSRC)scommon.h
+$(GLSRC)gsstate.h:$(GLSRC)memento.h
+$(GLSRC)gsstate.h:$(GLSRC)gscsel.h
$(GLSRC)gsstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gsstate.h:$(GLSRC)gxtmap.h
$(GLSRC)gsstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gsstate.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsstate.h:$(GLSRC)stdio_.h
$(GLSRC)gsstate.h:$(GLSRC)gscompt.h
$(GLSRC)gsstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsstate.h:$(GLSRC)stdint_.h
$(GLSRC)gsstate.h:$(GLSRC)gsgstate.h
-$(GLSRC)gsstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gsstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gsstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gsstate.h:$(GLSRC)std.h
+$(GLSRC)gsstate.h:$(GLSRC)gstypes.h
$(GLSRC)gsstate.h:$(GLSRC)stdpre.h
$(GLSRC)gsstate.h:$(GLGEN)arch.h
-$(GLSRC)gsstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_create.h:$(GLSRC)gscie.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxctable.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxfrac.h
$(GLSRC)gsicc_create.h:$(GLSRC)gscspace.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsrefct.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_create.h:$(GLSRC)memento.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_create.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_create.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_create.h:$(GLSRC)memento.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_create.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_create.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_create.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_create.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_create.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_create.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_create.h:$(GLSRC)std.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc_create.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_create.h:$(GLGEN)arch.h
-$(GLSRC)gsicc_create.h:$(GLSRC)gssprintf.h
$(GLSRC)gximdecode.h:$(GLSRC)gximage.h
$(GLSRC)gximdecode.h:$(GLSRC)gxsample.h
$(GLSRC)gximdecode.h:$(GLSRC)sisparam.h
@@ -8081,215 +8177,218 @@ $(GLSRC)gximdecode.h:$(GLSRC)gxiparam.h
$(GLSRC)gximdecode.h:$(GLSRC)gxdevcli.h
$(GLSRC)gximdecode.h:$(GLSRC)gxtext.h
$(GLSRC)gximdecode.h:$(GLSRC)gstext.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximdecode.h:$(GLSRC)gstparam.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcspace.h
$(GLSRC)gximdecode.h:$(GLSRC)gsropt.h
$(GLSRC)gximdecode.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximdecode.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsuid.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcmap.h
$(GLSRC)gximdecode.h:$(GLSRC)strimpl.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxiclass.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsimage.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxdda.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcvalue.h
$(GLSRC)gximdecode.h:$(GLSRC)gsfont.h
$(GLSRC)gximdecode.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxpath.h
-$(GLSRC)gximdecode.h:$(GLSRC)gspenum.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsimage.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxiclass.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxftype.h
$(GLSRC)gximdecode.h:$(GLSRC)gxfrac.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxdda.h
-$(GLSRC)gximdecode.h:$(GLSRC)gslparam.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsrect.h
$(GLSRC)gximdecode.h:$(GLSRC)gscms.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxftype.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsdevice.h
$(GLSRC)gximdecode.h:$(GLSRC)gscspace.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsuid.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxpath.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdevice.h
$(GLSRC)gximdecode.h:$(GLSRC)gxarith.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximdecode.h:$(GLSRC)gspenum.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsrect.h
+$(GLSRC)gximdecode.h:$(GLSRC)gslparam.h
$(GLSRC)gximdecode.h:$(GLSRC)gsxfont.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxfixed.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsrefct.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscpm.h
$(GLSRC)gximdecode.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdsrc.h
$(GLSRC)gximdecode.h:$(GLSRC)gsio.h
-$(GLSRC)gximdecode.h:$(GLSRC)gp.h
-$(GLSRC)gximdecode.h:$(GLSRC)memento.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsparam.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsmatrix.h
$(GLSRC)gximdecode.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscpm.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gp.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsstruct.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxsync.h
$(GLSRC)gximdecode.h:$(GLSRC)gdbflags.h
$(GLSRC)gximdecode.h:$(GLSRC)srdline.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsstruct.h
$(GLSRC)gximdecode.h:$(GLSRC)gserrors.h
-$(GLSRC)gximdecode.h:$(GLSRC)gxsync.h
-$(GLSRC)gximdecode.h:$(GLSRC)gscsel.h
$(GLSRC)gximdecode.h:$(GLSRC)scommon.h
+$(GLSRC)gximdecode.h:$(GLSRC)memento.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscsel.h
$(GLSRC)gximdecode.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximdecode.h:$(GLSRC)gsccolor.h
$(GLSRC)gximdecode.h:$(GLSRC)gsstype.h
+$(GLSRC)gximdecode.h:$(GLSRC)stat_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxtmap.h
$(GLSRC)gximdecode.h:$(GLSRC)gsmemory.h
$(GLSRC)gximdecode.h:$(GLSRC)gpsync.h
-$(GLSRC)gximdecode.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximdecode.h:$(GLSRC)memory_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximdecode.h:$(GLSRC)gslibctx.h
$(GLSRC)gximdecode.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximdecode.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdio_.h
$(GLSRC)gximdecode.h:$(GLSRC)gscompt.h
$(GLSRC)gximdecode.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximdecode.h:$(GLSRC)stdint_.h
$(GLSRC)gximdecode.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdint_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gssprintf.h
$(GLSRC)gximdecode.h:$(GLSRC)gsccode.h
-$(GLSRC)gximdecode.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximdecode.h:$(GLSRC)stdio_.h
-$(GLSRC)gximdecode.h:$(GLSRC)gstypes.h
$(GLSRC)gximdecode.h:$(GLSRC)std.h
+$(GLSRC)gximdecode.h:$(GLSRC)gstypes.h
$(GLSRC)gximdecode.h:$(GLSRC)stdpre.h
$(GLSRC)gximdecode.h:$(GLGEN)arch.h
-$(GLSRC)gximdecode.h:$(GLSRC)gssprintf.h
$(GLSRC)gzacpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gzacpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzacpath.h:$(GLSRC)gxtext.h
$(GLSRC)gzacpath.h:$(GLSRC)gstext.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzacpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gzacpath.h:$(GLSRC)gsropt.h
$(GLSRC)gzacpath.h:$(GLSRC)gsfunc.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzacpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcvalue.h
$(GLSRC)gzacpath.h:$(GLSRC)gsfont.h
$(GLSRC)gzacpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gzacpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxftype.h
$(GLSRC)gzacpath.h:$(GLSRC)gxfrac.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxdda.h
-$(GLSRC)gzacpath.h:$(GLSRC)gslparam.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsrect.h
$(GLSRC)gzacpath.h:$(GLSRC)gscms.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxftype.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gzacpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gzacpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzacpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzacpath.h:$(GLSRC)gslparam.h
$(GLSRC)gzacpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscpm.h
$(GLSRC)gzacpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gzacpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscpm.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsiparam.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxhttile.h
-$(GLSRC)gzacpath.h:$(GLSRC)gp.h
-$(GLSRC)gzacpath.h:$(GLSRC)memento.h
$(GLSRC)gzacpath.h:$(GLSRC)gsparam.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzacpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)srdline.h
+$(GLSRC)gzacpath.h:$(GLSRC)gp.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gzacpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gzacpath.h:$(GLSRC)gxsync.h
-$(GLSRC)gzacpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzacpath.h:$(GLSRC)srdline.h
$(GLSRC)gzacpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzacpath.h:$(GLSRC)memento.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscsel.h
$(GLSRC)gzacpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzacpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gzacpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzacpath.h:$(GLSRC)stat_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxtmap.h
$(GLSRC)gzacpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzacpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gzacpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzacpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzacpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzacpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzacpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdio_.h
$(GLSRC)gzacpath.h:$(GLSRC)gscompt.h
$(GLSRC)gzacpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzacpath.h:$(GLSRC)stdint_.h
$(GLSRC)gzacpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzacpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gzacpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzacpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzacpath.h:$(GLSRC)gstypes.h
$(GLSRC)gzacpath.h:$(GLSRC)std.h
+$(GLSRC)gzacpath.h:$(GLSRC)gstypes.h
$(GLSRC)gzacpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzacpath.h:$(GLGEN)arch.h
-$(GLSRC)gzacpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzcpath.h:$(GLSRC)gzpath.h
$(GLSRC)gzcpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gzcpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzcpath.h:$(GLSRC)gxtext.h
$(GLSRC)gzcpath.h:$(GLSRC)gstext.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzcpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gzcpath.h:$(GLSRC)gsropt.h
$(GLSRC)gzcpath.h:$(GLSRC)gsfunc.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzcpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcvalue.h
$(GLSRC)gzcpath.h:$(GLSRC)gsfont.h
$(GLSRC)gzcpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gzcpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxftype.h
$(GLSRC)gzcpath.h:$(GLSRC)gxfrac.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxdda.h
-$(GLSRC)gzcpath.h:$(GLSRC)gslparam.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsrect.h
$(GLSRC)gzcpath.h:$(GLSRC)gscms.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxftype.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gzcpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gzcpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzcpath.h:$(GLSRC)gslparam.h
$(GLSRC)gzcpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscpm.h
$(GLSRC)gzcpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gzcpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscpm.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsiparam.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxhttile.h
-$(GLSRC)gzcpath.h:$(GLSRC)gp.h
-$(GLSRC)gzcpath.h:$(GLSRC)memento.h
$(GLSRC)gzcpath.h:$(GLSRC)gsparam.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzcpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)srdline.h
+$(GLSRC)gzcpath.h:$(GLSRC)gp.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gzcpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gzcpath.h:$(GLSRC)gxsync.h
-$(GLSRC)gzcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzcpath.h:$(GLSRC)srdline.h
$(GLSRC)gzcpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzcpath.h:$(GLSRC)memento.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscsel.h
$(GLSRC)gzcpath.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzcpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gzcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzcpath.h:$(GLSRC)stat_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxtmap.h
$(GLSRC)gzcpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzcpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gzcpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzcpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gzcpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzcpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdio_.h
$(GLSRC)gzcpath.h:$(GLSRC)gscompt.h
$(GLSRC)gzcpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzcpath.h:$(GLSRC)stdint_.h
$(GLSRC)gzcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzcpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gzcpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzcpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzcpath.h:$(GLSRC)gstypes.h
$(GLSRC)gzcpath.h:$(GLSRC)std.h
+$(GLSRC)gzcpath.h:$(GLSRC)gstypes.h
$(GLSRC)gzcpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzcpath.h:$(GLGEN)arch.h
-$(GLSRC)gzcpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzht.h:$(GLSRC)gxdht.h
$(GLSRC)gzht.h:$(GLSRC)gxht.h
$(GLSRC)gzht.h:$(GLSRC)gxhttype.h
@@ -8298,372 +8397,376 @@ $(GLSRC)gzht.h:$(GLSRC)gsht.h
$(GLSRC)gzht.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzht.h:$(GLSRC)gxtext.h
$(GLSRC)gzht.h:$(GLSRC)gstext.h
+$(GLSRC)gzht.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzht.h:$(GLSRC)gstparam.h
-$(GLSRC)gzht.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzht.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzht.h:$(GLSRC)gxcspace.h
$(GLSRC)gzht.h:$(GLSRC)gsropt.h
$(GLSRC)gzht.h:$(GLSRC)gsfunc.h
-$(GLSRC)gzht.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzht.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzht.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzht.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsuid.h
+$(GLSRC)gzht.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzht.h:$(GLSRC)gsimage.h
+$(GLSRC)gzht.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzht.h:$(GLSRC)gxdda.h
+$(GLSRC)gzht.h:$(GLSRC)gxcvalue.h
$(GLSRC)gzht.h:$(GLSRC)gsfont.h
$(GLSRC)gzht.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzht.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzht.h:$(GLSRC)gxpath.h
-$(GLSRC)gzht.h:$(GLSRC)gspenum.h
-$(GLSRC)gzht.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzht.h:$(GLSRC)gsimage.h
+$(GLSRC)gzht.h:$(GLSRC)gxftype.h
$(GLSRC)gzht.h:$(GLSRC)gxfrac.h
-$(GLSRC)gzht.h:$(GLSRC)gxdda.h
-$(GLSRC)gzht.h:$(GLSRC)gslparam.h
-$(GLSRC)gzht.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzht.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzht.h:$(GLSRC)gsrect.h
$(GLSRC)gzht.h:$(GLSRC)gscms.h
-$(GLSRC)gzht.h:$(GLSRC)gxftype.h
-$(GLSRC)gzht.h:$(GLSRC)gsdevice.h
$(GLSRC)gzht.h:$(GLSRC)gscspace.h
-$(GLSRC)gzht.h:$(GLSRC)gsuid.h
+$(GLSRC)gzht.h:$(GLSRC)gxpath.h
+$(GLSRC)gzht.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsdevice.h
$(GLSRC)gzht.h:$(GLSRC)gxarith.h
-$(GLSRC)gzht.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzht.h:$(GLSRC)gspenum.h
+$(GLSRC)gzht.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzht.h:$(GLSRC)gsrect.h
+$(GLSRC)gzht.h:$(GLSRC)gslparam.h
$(GLSRC)gzht.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzht.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzht.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzht.h:$(GLSRC)gscpm.h
$(GLSRC)gzht.h:$(GLSRC)gxfixed.h
$(GLSRC)gzht.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzht.h:$(GLSRC)gscpm.h
-$(GLSRC)gzht.h:$(GLSRC)gsiparam.h
-$(GLSRC)gzht.h:$(GLSRC)gxhttile.h
-$(GLSRC)gzht.h:$(GLSRC)gp.h
-$(GLSRC)gzht.h:$(GLSRC)memento.h
$(GLSRC)gzht.h:$(GLSRC)gsparam.h
-$(GLSRC)gzht.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzht.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzht.h:$(GLSRC)srdline.h
+$(GLSRC)gzht.h:$(GLSRC)gp.h
+$(GLSRC)gzht.h:$(GLSRC)gsccolor.h
$(GLSRC)gzht.h:$(GLSRC)gsstruct.h
$(GLSRC)gzht.h:$(GLSRC)gxsync.h
-$(GLSRC)gzht.h:$(GLSRC)gscsel.h
+$(GLSRC)gzht.h:$(GLSRC)srdline.h
$(GLSRC)gzht.h:$(GLSRC)scommon.h
+$(GLSRC)gzht.h:$(GLSRC)memento.h
+$(GLSRC)gzht.h:$(GLSRC)gscsel.h
$(GLSRC)gzht.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzht.h:$(GLSRC)gsccolor.h
$(GLSRC)gzht.h:$(GLSRC)gsstype.h
+$(GLSRC)gzht.h:$(GLSRC)stat_.h
+$(GLSRC)gzht.h:$(GLSRC)gxtmap.h
$(GLSRC)gzht.h:$(GLSRC)gsmemory.h
$(GLSRC)gzht.h:$(GLSRC)gpsync.h
-$(GLSRC)gzht.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzht.h:$(GLSRC)memory_.h
+$(GLSRC)gzht.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzht.h:$(GLSRC)gslibctx.h
$(GLSRC)gzht.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzht.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzht.h:$(GLSRC)stdio_.h
$(GLSRC)gzht.h:$(GLSRC)gscompt.h
$(GLSRC)gzht.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzht.h:$(GLSRC)stdint_.h
$(GLSRC)gzht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzht.h:$(GLSRC)stdint_.h
+$(GLSRC)gzht.h:$(GLSRC)gssprintf.h
$(GLSRC)gzht.h:$(GLSRC)gsccode.h
-$(GLSRC)gzht.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzht.h:$(GLSRC)stdio_.h
-$(GLSRC)gzht.h:$(GLSRC)gstypes.h
$(GLSRC)gzht.h:$(GLSRC)std.h
+$(GLSRC)gzht.h:$(GLSRC)gstypes.h
$(GLSRC)gzht.h:$(GLSRC)stdpre.h
$(GLSRC)gzht.h:$(GLGEN)arch.h
-$(GLSRC)gzht.h:$(GLSRC)gssprintf.h
$(GLSRC)gzline.h:$(GLSRC)gxline.h
$(GLSRC)gzline.h:$(GLSRC)math_.h
$(GLSRC)gzline.h:$(GLSRC)gslparam.h
$(GLSRC)gzline.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzline.h:$(GLSRC)vmsmath.h
$(GLSRC)gzline.h:$(GLSRC)scommon.h
+$(GLSRC)gzline.h:$(GLSRC)vmsmath.h
$(GLSRC)gzline.h:$(GLSRC)gsstype.h
$(GLSRC)gzline.h:$(GLSRC)gsmemory.h
$(GLSRC)gzline.h:$(GLSRC)gslibctx.h
-$(GLSRC)gzline.h:$(GLSRC)stdint_.h
-$(GLSRC)gzline.h:$(GLSRC)gsgstate.h
$(GLSRC)gzline.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzline.h:$(GLSRC)stdio_.h
-$(GLSRC)gzline.h:$(GLSRC)gstypes.h
+$(GLSRC)gzline.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzline.h:$(GLSRC)stdint_.h
+$(GLSRC)gzline.h:$(GLSRC)gssprintf.h
$(GLSRC)gzline.h:$(GLSRC)std.h
+$(GLSRC)gzline.h:$(GLSRC)gstypes.h
$(GLSRC)gzline.h:$(GLSRC)stdpre.h
$(GLSRC)gzline.h:$(GLGEN)arch.h
-$(GLSRC)gzline.h:$(GLSRC)gssprintf.h
$(GLSRC)gzpath.h:$(GLSRC)gxpath.h
$(GLSRC)gzpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gzpath.h:$(GLSRC)gslparam.h
$(GLSRC)gzpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzpath.h:$(GLSRC)gscpm.h
$(GLSRC)gzpath.h:$(GLSRC)gxfixed.h
$(GLSRC)gzpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzpath.h:$(GLSRC)gscpm.h
-$(GLSRC)gzpath.h:$(GLSRC)memento.h
-$(GLSRC)gzpath.h:$(GLSRC)gsmatrix.h
$(GLSRC)gzpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzpath.h:$(GLSRC)memento.h
$(GLSRC)gzpath.h:$(GLSRC)gsstype.h
$(GLSRC)gzpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gzpath.h:$(GLSRC)gslibctx.h
-$(GLSRC)gzpath.h:$(GLSRC)stdint_.h
-$(GLSRC)gzpath.h:$(GLSRC)gsgstate.h
$(GLSRC)gzpath.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gzpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gzpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzpath.h:$(GLSRC)std.h
+$(GLSRC)gzpath.h:$(GLSRC)gstypes.h
$(GLSRC)gzpath.h:$(GLSRC)stdpre.h
$(GLSRC)gzpath.h:$(GLGEN)arch.h
-$(GLSRC)gzpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gzstate.h:$(GLSRC)gsstate.h
$(GLSRC)gzstate.h:$(GLSRC)gsovrc.h
$(GLSRC)gzstate.h:$(GLSRC)gxgstate.h
-$(GLSRC)gzstate.h:$(GLSRC)gstrans.h
$(GLSRC)gzstate.h:$(GLSRC)gxline.h
-$(GLSRC)gzstate.h:$(GLSRC)gsht1.h
+$(GLSRC)gzstate.h:$(GLSRC)gstrans.h
$(GLSRC)gzstate.h:$(GLSRC)gscolor.h
-$(GLSRC)gzstate.h:$(GLSRC)gsline.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gzstate.h:$(GLSRC)gsht1.h
$(GLSRC)gzstate.h:$(GLSRC)math_.h
$(GLSRC)gzstate.h:$(GLSRC)gdevp14.h
$(GLSRC)gzstate.h:$(GLSRC)gxcolor2.h
$(GLSRC)gzstate.h:$(GLSRC)gxpcolor.h
$(GLSRC)gzstate.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gzstate.h:$(GLSRC)gsequivc.h
$(GLSRC)gzstate.h:$(GLSRC)gxblend.h
+$(GLSRC)gzstate.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gzstate.h:$(GLSRC)gsline.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdcolor.h
$(GLSRC)gzstate.h:$(GLSRC)gxmatrix.h
$(GLSRC)gzstate.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gzstate.h:$(GLSRC)gsequivc.h
-$(GLSRC)gzstate.h:$(GLSRC)gxclipsr.h
$(GLSRC)gzstate.h:$(GLSRC)gscolor2.h
+$(GLSRC)gzstate.h:$(GLSRC)gscindex.h
$(GLSRC)gzstate.h:$(GLSRC)gxdevice.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcpath.h
$(GLSRC)gzstate.h:$(GLSRC)gsht.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcpath.h
$(GLSRC)gzstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzstate.h:$(GLSRC)gxpcache.h
-$(GLSRC)gzstate.h:$(GLSRC)gscindex.h
$(GLSRC)gzstate.h:$(GLSRC)gsptype1.h
-$(GLSRC)gzstate.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzstate.h:$(GLSRC)gxtext.h
-$(GLSRC)gzstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gscie.h
$(GLSRC)gzstate.h:$(GLSRC)gstext.h
-$(GLSRC)gzstate.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzstate.h:$(GLSRC)gstparam.h
-$(GLSRC)gzstate.h:$(GLSRC)gscie.h
$(GLSRC)gzstate.h:$(GLSRC)gxstate.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcmap.h
-$(GLSRC)gzstate.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gzstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcspace.h
$(GLSRC)gzstate.h:$(GLSRC)gsropt.h
$(GLSRC)gzstate.h:$(GLSRC)gsfunc.h
-$(GLSRC)gzstate.h:$(GLSRC)gxctable.h
-$(GLSRC)gzstate.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmalloc.h
$(GLSRC)gzstate.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzstate.h:$(GLSRC)gxiclass.h
-$(GLSRC)gzstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gxctable.h
+$(GLSRC)gzstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcvalue.h
$(GLSRC)gzstate.h:$(GLSRC)gsfont.h
$(GLSRC)gzstate.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzstate.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzstate.h:$(GLSRC)gxpath.h
-$(GLSRC)gzstate.h:$(GLSRC)gspenum.h
-$(GLSRC)gzstate.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gzstate.h:$(GLSRC)gxiclass.h
+$(GLSRC)gzstate.h:$(GLSRC)gxftype.h
$(GLSRC)gzstate.h:$(GLSRC)gxfrac.h
-$(GLSRC)gzstate.h:$(GLSRC)gxdda.h
-$(GLSRC)gzstate.h:$(GLSRC)gslparam.h
-$(GLSRC)gzstate.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzstate.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzstate.h:$(GLSRC)gsrect.h
$(GLSRC)gzstate.h:$(GLSRC)gscms.h
-$(GLSRC)gzstate.h:$(GLSRC)gxftype.h
-$(GLSRC)gzstate.h:$(GLSRC)gsdevice.h
$(GLSRC)gzstate.h:$(GLSRC)gscspace.h
-$(GLSRC)gzstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gzstate.h:$(GLSRC)gxpath.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdevice.h
$(GLSRC)gzstate.h:$(GLSRC)gxarith.h
-$(GLSRC)gzstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gzstate.h:$(GLSRC)gxstdio.h
+$(GLSRC)gzstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gzstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzstate.h:$(GLSRC)gsrect.h
+$(GLSRC)gzstate.h:$(GLSRC)gslparam.h
$(GLSRC)gzstate.h:$(GLSRC)gsxfont.h
-$(GLSRC)gzstate.h:$(GLSRC)gxfixed.h
-$(GLSRC)gzstate.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzstate.h:$(GLSRC)gscpm.h
$(GLSRC)gzstate.h:$(GLSRC)gsiparam.h
-$(GLSRC)gzstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdsrc.h
$(GLSRC)gzstate.h:$(GLSRC)gsio.h
-$(GLSRC)gzstate.h:$(GLSRC)gp.h
-$(GLSRC)gzstate.h:$(GLSRC)memento.h
-$(GLSRC)gzstate.h:$(GLSRC)gsparam.h
-$(GLSRC)gzstate.h:$(GLSRC)gsmatrix.h
$(GLSRC)gzstate.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzstate.h:$(GLSRC)srdline.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gp.h
+$(GLSRC)gzstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gzstate.h:$(GLSRC)gsstruct.h
$(GLSRC)gzstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gzstate.h:$(GLSRC)srdline.h
+$(GLSRC)gzstate.h:$(GLSRC)scommon.h
+$(GLSRC)gzstate.h:$(GLSRC)memento.h
$(GLSRC)gzstate.h:$(GLSRC)vmsmath.h
$(GLSRC)gzstate.h:$(GLSRC)gscsel.h
-$(GLSRC)gzstate.h:$(GLSRC)scommon.h
$(GLSRC)gzstate.h:$(GLSRC)gsbitmap.h
$(GLSRC)gzstate.h:$(GLSRC)gsfname.h
-$(GLSRC)gzstate.h:$(GLSRC)gsccolor.h
$(GLSRC)gzstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gzstate.h:$(GLSRC)stat_.h
+$(GLSRC)gzstate.h:$(GLSRC)gxtmap.h
$(GLSRC)gzstate.h:$(GLSRC)gsmemory.h
$(GLSRC)gzstate.h:$(GLSRC)gpsync.h
-$(GLSRC)gzstate.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzstate.h:$(GLSRC)memory_.h
+$(GLSRC)gzstate.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzstate.h:$(GLSRC)gslibctx.h
$(GLSRC)gzstate.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzstate.h:$(GLSRC)stdio_.h
$(GLSRC)gzstate.h:$(GLSRC)gscompt.h
$(GLSRC)gzstate.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzstate.h:$(GLSRC)stdint_.h
$(GLSRC)gzstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gzstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gzstate.h:$(GLSRC)gsccode.h
-$(GLSRC)gzstate.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzstate.h:$(GLSRC)stdio_.h
-$(GLSRC)gzstate.h:$(GLSRC)gstypes.h
$(GLSRC)gzstate.h:$(GLSRC)std.h
+$(GLSRC)gzstate.h:$(GLSRC)gstypes.h
$(GLSRC)gzstate.h:$(GLSRC)stdpre.h
$(GLSRC)gzstate.h:$(GLGEN)arch.h
-$(GLSRC)gzstate.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxtext.h
$(GLSRC)gdevbbox.h:$(GLSRC)gstext.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevbbox.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsropt.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsfont.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxftype.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsrect.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscms.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gslparam.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscpm.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gp.h
-$(GLSRC)gdevbbox.h:$(GLSRC)memento.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)srdline.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gp.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevbbox.h:$(GLSRC)srdline.h
$(GLSRC)gdevbbox.h:$(GLSRC)scommon.h
+$(GLSRC)gdevbbox.h:$(GLSRC)memento.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscsel.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stat_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevbbox.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevbbox.h:$(GLSRC)memory_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevbbox.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdio_.h
$(GLSRC)gdevbbox.h:$(GLSRC)gscompt.h
$(GLSRC)gdevbbox.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevbbox.h:$(GLSRC)stdint_.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevbbox.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevbbox.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gstypes.h
$(GLSRC)gdevbbox.h:$(GLSRC)std.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gstypes.h
$(GLSRC)gdevbbox.h:$(GLSRC)stdpre.h
$(GLSRC)gdevbbox.h:$(GLGEN)arch.h
-$(GLSRC)gdevbbox.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmem.h:$(GLSRC)gxbitops.h
$(GLSRC)gdevmem.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevmem.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmem.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmem.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmem.h:$(GLSRC)gsropt.h
$(GLSRC)gdevmem.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmem.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevmem.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmem.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmem.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmem.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevmem.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmem.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmem.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmem.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmem.h:$(GLSRC)gslparam.h
$(GLSRC)gdevmem.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscpm.h
$(GLSRC)gdevmem.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevmem.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevmem.h:$(GLSRC)gp.h
-$(GLSRC)gdevmem.h:$(GLSRC)memento.h
$(GLSRC)gdevmem.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmem.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmem.h:$(GLSRC)gp.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmem.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmem.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmem.h:$(GLSRC)srdline.h
$(GLSRC)gdevmem.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmem.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmem.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmem.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevmem.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmem.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmem.h:$(GLSRC)gsbitops.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdio_.h
$(GLSRC)gdevmem.h:$(GLSRC)gscompt.h
$(GLSRC)gdevmem.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmem.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmem.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmem.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmem.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmem.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmem.h:$(GLSRC)std.h
+$(GLSRC)gdevmem.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmem.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmem.h:$(GLGEN)arch.h
-$(GLSRC)gdevmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmpla.h:$(GLSRC)gxrplane.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsdevice.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gsparam.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsparam.h
$(GLSRC)gdevmpla.h:$(GLSRC)scommon.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsstype.h
$(GLSRC)gdevmpla.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmpla.h:$(GLSRC)gslibctx.h
-$(GLSRC)gdevmpla.h:$(GLSRC)stdint_.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gsgstate.h
$(GLSRC)gdevmpla.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gdevmpla.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmpla.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmpla.h:$(GLSRC)std.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmpla.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmpla.h:$(GLGEN)arch.h
-$(GLSRC)gdevmpla.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmrop.h:$(GLSRC)gximage.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxsample.h
$(GLSRC)gdevmrop.h:$(GLSRC)sisparam.h
@@ -8672,642 +8775,647 @@ $(GLSRC)gdevmrop.h:$(GLSRC)gxiparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmrop.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrop.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsropt.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcmap.h
$(GLSRC)gdevmrop.h:$(GLSRC)strimpl.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gslparam.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscpm.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gp.h
-$(GLSRC)gdevmrop.h:$(GLSRC)memento.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gp.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrop.h:$(GLSRC)srdline.h
$(GLSRC)gdevmrop.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmrop.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrop.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmrop.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmrop.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdio_.h
$(GLSRC)gdevmrop.h:$(GLSRC)gscompt.h
$(GLSRC)gdevmrop.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmrop.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmrop.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmrop.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmrop.h:$(GLSRC)std.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmrop.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmrop.h:$(GLGEN)arch.h
-$(GLSRC)gdevmrop.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxdevmem.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmrun.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrun.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsropt.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gslparam.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscpm.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gp.h
-$(GLSRC)gdevmrun.h:$(GLSRC)memento.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gp.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrun.h:$(GLSRC)srdline.h
$(GLSRC)gdevmrun.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmrun.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmrun.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmrun.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmrun.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdio_.h
$(GLSRC)gdevmrun.h:$(GLSRC)gscompt.h
$(GLSRC)gdevmrun.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmrun.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmrun.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmrun.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmrun.h:$(GLSRC)std.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmrun.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmrun.h:$(GLGEN)arch.h
-$(GLSRC)gdevmrun.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxtext.h
$(GLSRC)gdevplnx.h:$(GLSRC)gstext.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevplnx.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsropt.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsfont.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxftype.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsrect.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscms.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gslparam.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscpm.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gp.h
-$(GLSRC)gdevplnx.h:$(GLSRC)memento.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)srdline.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gp.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevplnx.h:$(GLSRC)srdline.h
$(GLSRC)gdevplnx.h:$(GLSRC)scommon.h
+$(GLSRC)gdevplnx.h:$(GLSRC)memento.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscsel.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stat_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevplnx.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevplnx.h:$(GLSRC)memory_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevplnx.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdio_.h
$(GLSRC)gdevplnx.h:$(GLSRC)gscompt.h
$(GLSRC)gdevplnx.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevplnx.h:$(GLSRC)stdint_.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevplnx.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevplnx.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gstypes.h
$(GLSRC)gdevplnx.h:$(GLSRC)std.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gstypes.h
$(GLSRC)gdevplnx.h:$(GLSRC)stdpre.h
$(GLSRC)gdevplnx.h:$(GLGEN)arch.h
-$(GLSRC)gdevplnx.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevepo.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevepo.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevepo.h:$(GLSRC)gxtext.h
$(GLSRC)gdevepo.h:$(GLSRC)gstext.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevepo.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevepo.h:$(GLSRC)gsropt.h
$(GLSRC)gdevepo.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevepo.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevepo.h:$(GLSRC)gsfont.h
$(GLSRC)gdevepo.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevepo.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxftype.h
$(GLSRC)gdevepo.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevepo.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsrect.h
$(GLSRC)gdevepo.h:$(GLSRC)gscms.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevepo.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevepo.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevepo.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevepo.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevepo.h:$(GLSRC)gslparam.h
$(GLSRC)gdevepo.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscpm.h
$(GLSRC)gdevepo.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevepo.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevepo.h:$(GLSRC)gsio.h
-$(GLSRC)gdevepo.h:$(GLSRC)gp.h
-$(GLSRC)gdevepo.h:$(GLSRC)memento.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevepo.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevepo.h:$(GLSRC)srdline.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gp.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevepo.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevepo.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevepo.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevepo.h:$(GLSRC)srdline.h
$(GLSRC)gdevepo.h:$(GLSRC)scommon.h
+$(GLSRC)gdevepo.h:$(GLSRC)memento.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscsel.h
$(GLSRC)gdevepo.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevepo.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevepo.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevepo.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevepo.h:$(GLSRC)stat_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevepo.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevepo.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevepo.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevepo.h:$(GLSRC)memory_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevepo.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevepo.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevepo.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdio_.h
$(GLSRC)gdevepo.h:$(GLSRC)gscompt.h
$(GLSRC)gdevepo.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevepo.h:$(GLSRC)stdint_.h
$(GLSRC)gdevepo.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevepo.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevepo.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevepo.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevepo.h:$(GLSRC)gstypes.h
$(GLSRC)gdevepo.h:$(GLSRC)std.h
+$(GLSRC)gdevepo.h:$(GLSRC)gstypes.h
$(GLSRC)gdevepo.h:$(GLSRC)stdpre.h
$(GLSRC)gdevepo.h:$(GLGEN)arch.h
-$(GLSRC)gdevepo.h:$(GLSRC)gssprintf.h
$(GLSRC)sa85d.h:$(GLSRC)scommon.h
$(GLSRC)sa85d.h:$(GLSRC)gsstype.h
$(GLSRC)sa85d.h:$(GLSRC)gsmemory.h
$(GLSRC)sa85d.h:$(GLSRC)gslibctx.h
-$(GLSRC)sa85d.h:$(GLSRC)stdint_.h
$(GLSRC)sa85d.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85d.h:$(GLSRC)stdio_.h
-$(GLSRC)sa85d.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85d.h:$(GLSRC)stdint_.h
+$(GLSRC)sa85d.h:$(GLSRC)gssprintf.h
$(GLSRC)sa85d.h:$(GLSRC)std.h
+$(GLSRC)sa85d.h:$(GLSRC)gstypes.h
$(GLSRC)sa85d.h:$(GLSRC)stdpre.h
$(GLSRC)sa85d.h:$(GLGEN)arch.h
-$(GLSRC)sa85d.h:$(GLSRC)gssprintf.h
$(GLSRC)sa85x.h:$(GLSRC)sa85d.h
$(GLSRC)sa85x.h:$(GLSRC)scommon.h
$(GLSRC)sa85x.h:$(GLSRC)gsstype.h
$(GLSRC)sa85x.h:$(GLSRC)gsmemory.h
$(GLSRC)sa85x.h:$(GLSRC)gslibctx.h
-$(GLSRC)sa85x.h:$(GLSRC)stdint_.h
$(GLSRC)sa85x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sa85x.h:$(GLSRC)stdio_.h
-$(GLSRC)sa85x.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85x.h:$(GLSRC)stdint_.h
+$(GLSRC)sa85x.h:$(GLSRC)gssprintf.h
$(GLSRC)sa85x.h:$(GLSRC)std.h
+$(GLSRC)sa85x.h:$(GLSRC)gstypes.h
$(GLSRC)sa85x.h:$(GLSRC)stdpre.h
$(GLSRC)sa85x.h:$(GLGEN)arch.h
-$(GLSRC)sa85x.h:$(GLSRC)gssprintf.h
$(GLSRC)sbcp.h:$(GLSRC)scommon.h
$(GLSRC)sbcp.h:$(GLSRC)gsstype.h
$(GLSRC)sbcp.h:$(GLSRC)gsmemory.h
$(GLSRC)sbcp.h:$(GLSRC)gslibctx.h
-$(GLSRC)sbcp.h:$(GLSRC)stdint_.h
$(GLSRC)sbcp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbcp.h:$(GLSRC)stdio_.h
-$(GLSRC)sbcp.h:$(GLSRC)gstypes.h
+$(GLSRC)sbcp.h:$(GLSRC)stdint_.h
+$(GLSRC)sbcp.h:$(GLSRC)gssprintf.h
$(GLSRC)sbcp.h:$(GLSRC)std.h
+$(GLSRC)sbcp.h:$(GLSRC)gstypes.h
$(GLSRC)sbcp.h:$(GLSRC)stdpre.h
$(GLSRC)sbcp.h:$(GLGEN)arch.h
-$(GLSRC)sbcp.h:$(GLSRC)gssprintf.h
$(GLSRC)sbtx.h:$(GLSRC)scommon.h
$(GLSRC)sbtx.h:$(GLSRC)gsstype.h
$(GLSRC)sbtx.h:$(GLSRC)gsmemory.h
$(GLSRC)sbtx.h:$(GLSRC)gslibctx.h
-$(GLSRC)sbtx.h:$(GLSRC)stdint_.h
$(GLSRC)sbtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sbtx.h:$(GLSRC)stdio_.h
-$(GLSRC)sbtx.h:$(GLSRC)gstypes.h
+$(GLSRC)sbtx.h:$(GLSRC)stdint_.h
+$(GLSRC)sbtx.h:$(GLSRC)gssprintf.h
$(GLSRC)sbtx.h:$(GLSRC)std.h
+$(GLSRC)sbtx.h:$(GLSRC)gstypes.h
$(GLSRC)sbtx.h:$(GLSRC)stdpre.h
$(GLSRC)sbtx.h:$(GLGEN)arch.h
-$(GLSRC)sbtx.h:$(GLSRC)gssprintf.h
$(GLSRC)scanchar.h:$(GLSRC)scommon.h
$(GLSRC)scanchar.h:$(GLSRC)gsstype.h
$(GLSRC)scanchar.h:$(GLSRC)gsmemory.h
$(GLSRC)scanchar.h:$(GLSRC)gslibctx.h
-$(GLSRC)scanchar.h:$(GLSRC)stdint_.h
$(GLSRC)scanchar.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scanchar.h:$(GLSRC)stdio_.h
-$(GLSRC)scanchar.h:$(GLSRC)gstypes.h
+$(GLSRC)scanchar.h:$(GLSRC)stdint_.h
+$(GLSRC)scanchar.h:$(GLSRC)gssprintf.h
$(GLSRC)scanchar.h:$(GLSRC)std.h
+$(GLSRC)scanchar.h:$(GLSRC)gstypes.h
$(GLSRC)scanchar.h:$(GLSRC)stdpre.h
$(GLSRC)scanchar.h:$(GLGEN)arch.h
-$(GLSRC)scanchar.h:$(GLSRC)gssprintf.h
$(GLSRC)sfilter.h:$(GLSRC)scommon.h
$(GLSRC)sfilter.h:$(GLSRC)gsstype.h
$(GLSRC)sfilter.h:$(GLSRC)gsmemory.h
$(GLSRC)sfilter.h:$(GLSRC)gslibctx.h
-$(GLSRC)sfilter.h:$(GLSRC)stdint_.h
$(GLSRC)sfilter.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sfilter.h:$(GLSRC)stdio_.h
-$(GLSRC)sfilter.h:$(GLSRC)gstypes.h
+$(GLSRC)sfilter.h:$(GLSRC)stdint_.h
+$(GLSRC)sfilter.h:$(GLSRC)gssprintf.h
$(GLSRC)sfilter.h:$(GLSRC)std.h
+$(GLSRC)sfilter.h:$(GLSRC)gstypes.h
$(GLSRC)sfilter.h:$(GLSRC)stdpre.h
$(GLSRC)sfilter.h:$(GLGEN)arch.h
-$(GLSRC)sfilter.h:$(GLSRC)gssprintf.h
$(GLSRC)sdct.h:$(GLSRC)setjmp_.h
$(GLSRC)sdct.h:$(GLSRC)strimpl.h
$(GLSRC)sdct.h:$(GLSRC)gscms.h
-$(GLSRC)sdct.h:$(GLSRC)gsdevice.h
$(GLSRC)sdct.h:$(GLSRC)gscspace.h
-$(GLSRC)sdct.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdct.h:$(GLSRC)gsdevice.h
$(GLSRC)sdct.h:$(GLSRC)gsiparam.h
-$(GLSRC)sdct.h:$(GLSRC)memento.h
-$(GLSRC)sdct.h:$(GLSRC)gsparam.h
-$(GLSRC)sdct.h:$(GLSRC)gsmatrix.h
$(GLSRC)sdct.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sdct.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sdct.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdct.h:$(GLSRC)gsparam.h
+$(GLSRC)sdct.h:$(GLSRC)gsccolor.h
$(GLSRC)sdct.h:$(GLSRC)gsstruct.h
$(GLSRC)sdct.h:$(GLSRC)gxsync.h
$(GLSRC)sdct.h:$(GLSRC)scommon.h
+$(GLSRC)sdct.h:$(GLSRC)memento.h
$(GLSRC)sdct.h:$(GLSRC)gsbitmap.h
-$(GLSRC)sdct.h:$(GLSRC)gsccolor.h
$(GLSRC)sdct.h:$(GLSRC)gsstype.h
$(GLSRC)sdct.h:$(GLSRC)gsmemory.h
$(GLSRC)sdct.h:$(GLSRC)gpsync.h
$(GLSRC)sdct.h:$(GLSRC)gslibctx.h
-$(GLSRC)sdct.h:$(GLSRC)stdint_.h
-$(GLSRC)sdct.h:$(GLSRC)gsgstate.h
$(GLSRC)sdct.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdct.h:$(GLSRC)stdio_.h
-$(GLSRC)sdct.h:$(GLSRC)gstypes.h
+$(GLSRC)sdct.h:$(GLSRC)gsgstate.h
+$(GLSRC)sdct.h:$(GLSRC)stdint_.h
+$(GLSRC)sdct.h:$(GLSRC)gssprintf.h
$(GLSRC)sdct.h:$(GLSRC)std.h
+$(GLSRC)sdct.h:$(GLSRC)gstypes.h
$(GLSRC)sdct.h:$(GLSRC)stdpre.h
$(GLSRC)sdct.h:$(GLGEN)arch.h
-$(GLSRC)sdct.h:$(GLSRC)gssprintf.h
$(GLSRC)shc.h:$(GLSRC)scommon.h
$(GLSRC)shc.h:$(GLSRC)gsstype.h
$(GLSRC)shc.h:$(GLSRC)gsmemory.h
$(GLSRC)shc.h:$(GLSRC)gslibctx.h
-$(GLSRC)shc.h:$(GLSRC)gsbittab.h
-$(GLSRC)shc.h:$(GLSRC)stdint_.h
$(GLSRC)shc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)shc.h:$(GLSRC)stdio_.h
-$(GLSRC)shc.h:$(GLSRC)gstypes.h
+$(GLSRC)shc.h:$(GLSRC)gsbittab.h
+$(GLSRC)shc.h:$(GLSRC)stdint_.h
+$(GLSRC)shc.h:$(GLSRC)gssprintf.h
$(GLSRC)shc.h:$(GLSRC)std.h
+$(GLSRC)shc.h:$(GLSRC)gstypes.h
$(GLSRC)shc.h:$(GLSRC)stdpre.h
$(GLSRC)shc.h:$(GLGEN)arch.h
-$(GLSRC)shc.h:$(GLSRC)gssprintf.h
$(GLSRC)sisparam.h:$(GLSRC)gxdda.h
$(GLSRC)sisparam.h:$(GLSRC)gxfixed.h
$(GLSRC)sisparam.h:$(GLSRC)scommon.h
$(GLSRC)sisparam.h:$(GLSRC)gsstype.h
$(GLSRC)sisparam.h:$(GLSRC)gsmemory.h
$(GLSRC)sisparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)sisparam.h:$(GLSRC)stdint_.h
$(GLSRC)sisparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sisparam.h:$(GLSRC)stdio_.h
-$(GLSRC)sisparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sisparam.h:$(GLSRC)stdint_.h
+$(GLSRC)sisparam.h:$(GLSRC)gssprintf.h
$(GLSRC)sisparam.h:$(GLSRC)std.h
+$(GLSRC)sisparam.h:$(GLSRC)gstypes.h
$(GLSRC)sisparam.h:$(GLSRC)stdpre.h
$(GLSRC)sisparam.h:$(GLGEN)arch.h
-$(GLSRC)sisparam.h:$(GLSRC)gssprintf.h
$(GLSRC)sjpeg.h:$(GLSRC)sdct.h
$(GLSRC)sjpeg.h:$(GLSRC)setjmp_.h
$(GLSRC)sjpeg.h:$(GLSRC)strimpl.h
$(GLSRC)sjpeg.h:$(GLSRC)gscms.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsdevice.h
$(GLSRC)sjpeg.h:$(GLSRC)gscspace.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsrefct.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsdevice.h
$(GLSRC)sjpeg.h:$(GLSRC)gsiparam.h
-$(GLSRC)sjpeg.h:$(GLSRC)memento.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsparam.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsmatrix.h
$(GLSRC)sjpeg.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsrefct.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsparam.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsccolor.h
$(GLSRC)sjpeg.h:$(GLSRC)gsstruct.h
$(GLSRC)sjpeg.h:$(GLSRC)gxsync.h
$(GLSRC)sjpeg.h:$(GLSRC)scommon.h
+$(GLSRC)sjpeg.h:$(GLSRC)memento.h
$(GLSRC)sjpeg.h:$(GLSRC)gsbitmap.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsccolor.h
$(GLSRC)sjpeg.h:$(GLSRC)gsstype.h
$(GLSRC)sjpeg.h:$(GLSRC)gsmemory.h
$(GLSRC)sjpeg.h:$(GLSRC)gpsync.h
$(GLSRC)sjpeg.h:$(GLSRC)gslibctx.h
-$(GLSRC)sjpeg.h:$(GLSRC)stdint_.h
-$(GLSRC)sjpeg.h:$(GLSRC)gsgstate.h
$(GLSRC)sjpeg.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjpeg.h:$(GLSRC)stdio_.h
-$(GLSRC)sjpeg.h:$(GLSRC)gstypes.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsgstate.h
+$(GLSRC)sjpeg.h:$(GLSRC)stdint_.h
+$(GLSRC)sjpeg.h:$(GLSRC)gssprintf.h
$(GLSRC)sjpeg.h:$(GLSRC)std.h
+$(GLSRC)sjpeg.h:$(GLSRC)gstypes.h
$(GLSRC)sjpeg.h:$(GLSRC)stdpre.h
$(GLSRC)sjpeg.h:$(GLGEN)arch.h
-$(GLSRC)sjpeg.h:$(GLSRC)gssprintf.h
$(GLSRC)slzwx.h:$(GLSRC)scommon.h
$(GLSRC)slzwx.h:$(GLSRC)gsstype.h
$(GLSRC)slzwx.h:$(GLSRC)gsmemory.h
$(GLSRC)slzwx.h:$(GLSRC)gslibctx.h
-$(GLSRC)slzwx.h:$(GLSRC)stdint_.h
$(GLSRC)slzwx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)slzwx.h:$(GLSRC)stdio_.h
-$(GLSRC)slzwx.h:$(GLSRC)gstypes.h
+$(GLSRC)slzwx.h:$(GLSRC)stdint_.h
+$(GLSRC)slzwx.h:$(GLSRC)gssprintf.h
$(GLSRC)slzwx.h:$(GLSRC)std.h
+$(GLSRC)slzwx.h:$(GLSRC)gstypes.h
$(GLSRC)slzwx.h:$(GLSRC)stdpre.h
$(GLSRC)slzwx.h:$(GLGEN)arch.h
-$(GLSRC)slzwx.h:$(GLSRC)gssprintf.h
$(GLSRC)smd5.h:$(GLSRC)gsmd5.h
$(GLSRC)smd5.h:$(GLSRC)scommon.h
$(GLSRC)smd5.h:$(GLSRC)gsstype.h
$(GLSRC)smd5.h:$(GLSRC)gsmemory.h
+$(GLSRC)smd5.h:$(GLSRC)memory_.h
$(GLSRC)smd5.h:$(GLSRC)gslibctx.h
-$(GLSRC)smd5.h:$(GLSRC)stdint_.h
$(GLSRC)smd5.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smd5.h:$(GLSRC)stdio_.h
-$(GLSRC)smd5.h:$(GLSRC)gstypes.h
+$(GLSRC)smd5.h:$(GLSRC)stdint_.h
+$(GLSRC)smd5.h:$(GLSRC)gssprintf.h
$(GLSRC)smd5.h:$(GLSRC)std.h
+$(GLSRC)smd5.h:$(GLSRC)gstypes.h
$(GLSRC)smd5.h:$(GLSRC)stdpre.h
$(GLSRC)smd5.h:$(GLGEN)arch.h
-$(GLSRC)smd5.h:$(GLSRC)gssprintf.h
$(GLSRC)sarc4.h:$(GLSRC)scommon.h
$(GLSRC)sarc4.h:$(GLSRC)gsstype.h
$(GLSRC)sarc4.h:$(GLSRC)gsmemory.h
$(GLSRC)sarc4.h:$(GLSRC)gslibctx.h
-$(GLSRC)sarc4.h:$(GLSRC)stdint_.h
$(GLSRC)sarc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sarc4.h:$(GLSRC)stdio_.h
-$(GLSRC)sarc4.h:$(GLSRC)gstypes.h
+$(GLSRC)sarc4.h:$(GLSRC)stdint_.h
+$(GLSRC)sarc4.h:$(GLSRC)gssprintf.h
$(GLSRC)sarc4.h:$(GLSRC)std.h
+$(GLSRC)sarc4.h:$(GLSRC)gstypes.h
$(GLSRC)sarc4.h:$(GLSRC)stdpre.h
$(GLSRC)sarc4.h:$(GLGEN)arch.h
-$(GLSRC)sarc4.h:$(GLSRC)gssprintf.h
$(GLSRC)saes.h:$(GLSRC)aes.h
$(GLSRC)saes.h:$(GLSRC)scommon.h
$(GLSRC)saes.h:$(GLSRC)gsstype.h
$(GLSRC)saes.h:$(GLSRC)gsmemory.h
$(GLSRC)saes.h:$(GLSRC)gslibctx.h
-$(GLSRC)saes.h:$(GLSRC)stdint_.h
$(GLSRC)saes.h:$(GLSRC)gs_dll_call.h
$(GLSRC)saes.h:$(GLSRC)stdio_.h
-$(GLSRC)saes.h:$(GLSRC)gstypes.h
+$(GLSRC)saes.h:$(GLSRC)stdint_.h
+$(GLSRC)saes.h:$(GLSRC)gssprintf.h
$(GLSRC)saes.h:$(GLSRC)std.h
+$(GLSRC)saes.h:$(GLSRC)gstypes.h
$(GLSRC)saes.h:$(GLSRC)stdpre.h
$(GLSRC)saes.h:$(GLGEN)arch.h
-$(GLSRC)saes.h:$(GLSRC)gssprintf.h
$(GLSRC)sjbig2.h:$(GLSRC)scommon.h
$(GLSRC)sjbig2.h:$(GLSRC)gsstype.h
$(GLSRC)sjbig2.h:$(GLSRC)gsmemory.h
$(GLSRC)sjbig2.h:$(GLSRC)gslibctx.h
-$(GLSRC)sjbig2.h:$(GLSRC)stdint_.h
$(GLSRC)sjbig2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sjbig2.h:$(GLSRC)stdio_.h
-$(GLSRC)sjbig2.h:$(GLSRC)gstypes.h
+$(GLSRC)sjbig2.h:$(GLSRC)stdint_.h
+$(GLSRC)sjbig2.h:$(GLSRC)gssprintf.h
$(GLSRC)sjbig2.h:$(GLSRC)std.h
+$(GLSRC)sjbig2.h:$(GLSRC)gstypes.h
$(GLSRC)sjbig2.h:$(GLSRC)stdpre.h
$(GLSRC)sjbig2.h:$(GLGEN)arch.h
-$(GLSRC)sjbig2.h:$(GLSRC)gssprintf.h
$(GLSRC)spdiffx.h:$(GLSRC)scommon.h
$(GLSRC)spdiffx.h:$(GLSRC)gsstype.h
$(GLSRC)spdiffx.h:$(GLSRC)gsmemory.h
$(GLSRC)spdiffx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spdiffx.h:$(GLSRC)stdint_.h
$(GLSRC)spdiffx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spdiffx.h:$(GLSRC)stdio_.h
-$(GLSRC)spdiffx.h:$(GLSRC)gstypes.h
+$(GLSRC)spdiffx.h:$(GLSRC)stdint_.h
+$(GLSRC)spdiffx.h:$(GLSRC)gssprintf.h
$(GLSRC)spdiffx.h:$(GLSRC)std.h
+$(GLSRC)spdiffx.h:$(GLSRC)gstypes.h
$(GLSRC)spdiffx.h:$(GLSRC)stdpre.h
$(GLSRC)spdiffx.h:$(GLGEN)arch.h
-$(GLSRC)spdiffx.h:$(GLSRC)gssprintf.h
$(GLSRC)spngpx.h:$(GLSRC)scommon.h
$(GLSRC)spngpx.h:$(GLSRC)gsstype.h
$(GLSRC)spngpx.h:$(GLSRC)gsmemory.h
$(GLSRC)spngpx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spngpx.h:$(GLSRC)stdint_.h
$(GLSRC)spngpx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spngpx.h:$(GLSRC)stdio_.h
-$(GLSRC)spngpx.h:$(GLSRC)gstypes.h
+$(GLSRC)spngpx.h:$(GLSRC)stdint_.h
+$(GLSRC)spngpx.h:$(GLSRC)gssprintf.h
$(GLSRC)spngpx.h:$(GLSRC)std.h
+$(GLSRC)spngpx.h:$(GLSRC)gstypes.h
$(GLSRC)spngpx.h:$(GLSRC)stdpre.h
$(GLSRC)spngpx.h:$(GLGEN)arch.h
-$(GLSRC)spngpx.h:$(GLSRC)gssprintf.h
$(GLSRC)spprint.h:$(GLSRC)scommon.h
$(GLSRC)spprint.h:$(GLSRC)gsstype.h
$(GLSRC)spprint.h:$(GLSRC)gsmemory.h
$(GLSRC)spprint.h:$(GLSRC)gslibctx.h
-$(GLSRC)spprint.h:$(GLSRC)stdint_.h
$(GLSRC)spprint.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spprint.h:$(GLSRC)stdio_.h
-$(GLSRC)spprint.h:$(GLSRC)gstypes.h
+$(GLSRC)spprint.h:$(GLSRC)stdint_.h
+$(GLSRC)spprint.h:$(GLSRC)gssprintf.h
$(GLSRC)spprint.h:$(GLSRC)std.h
+$(GLSRC)spprint.h:$(GLSRC)gstypes.h
$(GLSRC)spprint.h:$(GLSRC)stdpre.h
$(GLSRC)spprint.h:$(GLGEN)arch.h
-$(GLSRC)spprint.h:$(GLSRC)gssprintf.h
$(GLSRC)spsdf.h:$(GLSRC)gsparam.h
$(GLSRC)spsdf.h:$(GLSRC)scommon.h
$(GLSRC)spsdf.h:$(GLSRC)gsstype.h
$(GLSRC)spsdf.h:$(GLSRC)gsmemory.h
$(GLSRC)spsdf.h:$(GLSRC)gslibctx.h
-$(GLSRC)spsdf.h:$(GLSRC)stdint_.h
$(GLSRC)spsdf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spsdf.h:$(GLSRC)stdio_.h
-$(GLSRC)spsdf.h:$(GLSRC)gstypes.h
+$(GLSRC)spsdf.h:$(GLSRC)stdint_.h
+$(GLSRC)spsdf.h:$(GLSRC)gssprintf.h
$(GLSRC)spsdf.h:$(GLSRC)std.h
+$(GLSRC)spsdf.h:$(GLSRC)gstypes.h
$(GLSRC)spsdf.h:$(GLSRC)stdpre.h
$(GLSRC)spsdf.h:$(GLGEN)arch.h
-$(GLSRC)spsdf.h:$(GLSRC)gssprintf.h
$(GLSRC)srlx.h:$(GLSRC)scommon.h
$(GLSRC)srlx.h:$(GLSRC)gsstype.h
$(GLSRC)srlx.h:$(GLSRC)gsmemory.h
$(GLSRC)srlx.h:$(GLSRC)gslibctx.h
-$(GLSRC)srlx.h:$(GLSRC)stdint_.h
$(GLSRC)srlx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)srlx.h:$(GLSRC)stdio_.h
-$(GLSRC)srlx.h:$(GLSRC)gstypes.h
+$(GLSRC)srlx.h:$(GLSRC)stdint_.h
+$(GLSRC)srlx.h:$(GLSRC)gssprintf.h
$(GLSRC)srlx.h:$(GLSRC)std.h
+$(GLSRC)srlx.h:$(GLSRC)gstypes.h
$(GLSRC)srlx.h:$(GLSRC)stdpre.h
$(GLSRC)srlx.h:$(GLGEN)arch.h
-$(GLSRC)srlx.h:$(GLSRC)gssprintf.h
$(GLSRC)spwgx.h:$(GLSRC)scommon.h
$(GLSRC)spwgx.h:$(GLSRC)gsstype.h
$(GLSRC)spwgx.h:$(GLSRC)gsmemory.h
$(GLSRC)spwgx.h:$(GLSRC)gslibctx.h
-$(GLSRC)spwgx.h:$(GLSRC)stdint_.h
$(GLSRC)spwgx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)spwgx.h:$(GLSRC)stdio_.h
-$(GLSRC)spwgx.h:$(GLSRC)gstypes.h
+$(GLSRC)spwgx.h:$(GLSRC)stdint_.h
+$(GLSRC)spwgx.h:$(GLSRC)gssprintf.h
$(GLSRC)spwgx.h:$(GLSRC)std.h
+$(GLSRC)spwgx.h:$(GLSRC)gstypes.h
$(GLSRC)spwgx.h:$(GLSRC)stdpre.h
$(GLSRC)spwgx.h:$(GLGEN)arch.h
-$(GLSRC)spwgx.h:$(GLSRC)gssprintf.h
$(GLSRC)sstring.h:$(GLSRC)scommon.h
$(GLSRC)sstring.h:$(GLSRC)gsstype.h
$(GLSRC)sstring.h:$(GLSRC)gsmemory.h
$(GLSRC)sstring.h:$(GLSRC)gslibctx.h
-$(GLSRC)sstring.h:$(GLSRC)stdint_.h
$(GLSRC)sstring.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sstring.h:$(GLSRC)stdio_.h
-$(GLSRC)sstring.h:$(GLSRC)gstypes.h
+$(GLSRC)sstring.h:$(GLSRC)stdint_.h
+$(GLSRC)sstring.h:$(GLSRC)gssprintf.h
$(GLSRC)sstring.h:$(GLSRC)std.h
+$(GLSRC)sstring.h:$(GLSRC)gstypes.h
$(GLSRC)sstring.h:$(GLSRC)stdpre.h
$(GLSRC)sstring.h:$(GLGEN)arch.h
-$(GLSRC)sstring.h:$(GLSRC)gssprintf.h
$(GLSRC)strimpl.h:$(GLSRC)gsstruct.h
$(GLSRC)strimpl.h:$(GLSRC)scommon.h
$(GLSRC)strimpl.h:$(GLSRC)gsstype.h
$(GLSRC)strimpl.h:$(GLSRC)gsmemory.h
$(GLSRC)strimpl.h:$(GLSRC)gslibctx.h
-$(GLSRC)strimpl.h:$(GLSRC)stdint_.h
$(GLSRC)strimpl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strimpl.h:$(GLSRC)stdio_.h
-$(GLSRC)strimpl.h:$(GLSRC)gstypes.h
+$(GLSRC)strimpl.h:$(GLSRC)stdint_.h
+$(GLSRC)strimpl.h:$(GLSRC)gssprintf.h
$(GLSRC)strimpl.h:$(GLSRC)std.h
+$(GLSRC)strimpl.h:$(GLSRC)gstypes.h
$(GLSRC)strimpl.h:$(GLSRC)stdpre.h
$(GLSRC)strimpl.h:$(GLGEN)arch.h
-$(GLSRC)strimpl.h:$(GLSRC)gssprintf.h
$(GLSRC)szlibx.h:$(GLSRC)scommon.h
$(GLSRC)szlibx.h:$(GLSRC)gsstype.h
$(GLSRC)szlibx.h:$(GLSRC)gsmemory.h
$(GLSRC)szlibx.h:$(GLSRC)gslibctx.h
-$(GLSRC)szlibx.h:$(GLSRC)stdint_.h
$(GLSRC)szlibx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)szlibx.h:$(GLSRC)stdio_.h
-$(GLSRC)szlibx.h:$(GLSRC)gstypes.h
+$(GLSRC)szlibx.h:$(GLSRC)stdint_.h
+$(GLSRC)szlibx.h:$(GLSRC)gssprintf.h
$(GLSRC)szlibx.h:$(GLSRC)std.h
+$(GLSRC)szlibx.h:$(GLSRC)gstypes.h
$(GLSRC)szlibx.h:$(GLSRC)stdpre.h
$(GLSRC)szlibx.h:$(GLGEN)arch.h
-$(GLSRC)szlibx.h:$(GLSRC)gssprintf.h
$(GLSRC)scf.h:$(GLSRC)shc.h
$(GLSRC)scf.h:$(GLSRC)scommon.h
$(GLSRC)scf.h:$(GLSRC)gsstype.h
$(GLSRC)scf.h:$(GLSRC)gsmemory.h
$(GLSRC)scf.h:$(GLSRC)gslibctx.h
-$(GLSRC)scf.h:$(GLSRC)gsbittab.h
-$(GLSRC)scf.h:$(GLSRC)stdint_.h
$(GLSRC)scf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scf.h:$(GLSRC)stdio_.h
-$(GLSRC)scf.h:$(GLSRC)gstypes.h
+$(GLSRC)scf.h:$(GLSRC)gsbittab.h
+$(GLSRC)scf.h:$(GLSRC)stdint_.h
+$(GLSRC)scf.h:$(GLSRC)gssprintf.h
$(GLSRC)scf.h:$(GLSRC)std.h
+$(GLSRC)scf.h:$(GLSRC)gstypes.h
$(GLSRC)scf.h:$(GLSRC)stdpre.h
$(GLSRC)scf.h:$(GLGEN)arch.h
-$(GLSRC)scf.h:$(GLSRC)gssprintf.h
$(GLSRC)scfx.h:$(GLSRC)shc.h
$(GLSRC)scfx.h:$(GLSRC)scommon.h
$(GLSRC)scfx.h:$(GLSRC)gsstype.h
$(GLSRC)scfx.h:$(GLSRC)gsmemory.h
$(GLSRC)scfx.h:$(GLSRC)gslibctx.h
-$(GLSRC)scfx.h:$(GLSRC)gsbittab.h
-$(GLSRC)scfx.h:$(GLSRC)stdint_.h
$(GLSRC)scfx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)scfx.h:$(GLSRC)stdio_.h
-$(GLSRC)scfx.h:$(GLSRC)gstypes.h
+$(GLSRC)scfx.h:$(GLSRC)gsbittab.h
+$(GLSRC)scfx.h:$(GLSRC)stdint_.h
+$(GLSRC)scfx.h:$(GLSRC)gssprintf.h
$(GLSRC)scfx.h:$(GLSRC)std.h
+$(GLSRC)scfx.h:$(GLSRC)gstypes.h
$(GLSRC)scfx.h:$(GLSRC)stdpre.h
$(GLSRC)scfx.h:$(GLGEN)arch.h
-$(GLSRC)scfx.h:$(GLSRC)gssprintf.h
$(GLSRC)siinterp.h:$(GLSRC)sisparam.h
$(GLSRC)siinterp.h:$(GLSRC)gxdda.h
$(GLSRC)siinterp.h:$(GLSRC)gxfixed.h
@@ -9315,14 +9423,14 @@ $(GLSRC)siinterp.h:$(GLSRC)scommon.h
$(GLSRC)siinterp.h:$(GLSRC)gsstype.h
$(GLSRC)siinterp.h:$(GLSRC)gsmemory.h
$(GLSRC)siinterp.h:$(GLSRC)gslibctx.h
-$(GLSRC)siinterp.h:$(GLSRC)stdint_.h
$(GLSRC)siinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siinterp.h:$(GLSRC)stdio_.h
-$(GLSRC)siinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)siinterp.h:$(GLSRC)stdint_.h
+$(GLSRC)siinterp.h:$(GLSRC)gssprintf.h
$(GLSRC)siinterp.h:$(GLSRC)std.h
+$(GLSRC)siinterp.h:$(GLSRC)gstypes.h
$(GLSRC)siinterp.h:$(GLSRC)stdpre.h
$(GLSRC)siinterp.h:$(GLGEN)arch.h
-$(GLSRC)siinterp.h:$(GLSRC)gssprintf.h
$(GLSRC)siscale.h:$(GLSRC)sisparam.h
$(GLSRC)siscale.h:$(GLSRC)gxdda.h
$(GLSRC)siscale.h:$(GLSRC)gxfixed.h
@@ -9330,14 +9438,14 @@ $(GLSRC)siscale.h:$(GLSRC)scommon.h
$(GLSRC)siscale.h:$(GLSRC)gsstype.h
$(GLSRC)siscale.h:$(GLSRC)gsmemory.h
$(GLSRC)siscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)siscale.h:$(GLSRC)stdint_.h
$(GLSRC)siscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)siscale.h:$(GLSRC)stdio_.h
-$(GLSRC)siscale.h:$(GLSRC)gstypes.h
+$(GLSRC)siscale.h:$(GLSRC)stdint_.h
+$(GLSRC)siscale.h:$(GLSRC)gssprintf.h
$(GLSRC)siscale.h:$(GLSRC)std.h
+$(GLSRC)siscale.h:$(GLSRC)gstypes.h
$(GLSRC)siscale.h:$(GLSRC)stdpre.h
$(GLSRC)siscale.h:$(GLGEN)arch.h
-$(GLSRC)siscale.h:$(GLSRC)gssprintf.h
$(GLSRC)sidscale.h:$(GLSRC)sisparam.h
$(GLSRC)sidscale.h:$(GLSRC)gxdda.h
$(GLSRC)sidscale.h:$(GLSRC)gxfixed.h
@@ -9345,14 +9453,14 @@ $(GLSRC)sidscale.h:$(GLSRC)scommon.h
$(GLSRC)sidscale.h:$(GLSRC)gsstype.h
$(GLSRC)sidscale.h:$(GLSRC)gsmemory.h
$(GLSRC)sidscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)sidscale.h:$(GLSRC)stdint_.h
$(GLSRC)sidscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sidscale.h:$(GLSRC)stdio_.h
-$(GLSRC)sidscale.h:$(GLSRC)gstypes.h
+$(GLSRC)sidscale.h:$(GLSRC)stdint_.h
+$(GLSRC)sidscale.h:$(GLSRC)gssprintf.h
$(GLSRC)sidscale.h:$(GLSRC)std.h
+$(GLSRC)sidscale.h:$(GLSRC)gstypes.h
$(GLSRC)sidscale.h:$(GLSRC)stdpre.h
$(GLSRC)sidscale.h:$(GLGEN)arch.h
-$(GLSRC)sidscale.h:$(GLSRC)gssprintf.h
$(GLSRC)simscale.h:$(GLSRC)sisparam.h
$(GLSRC)simscale.h:$(GLSRC)gxdda.h
$(GLSRC)simscale.h:$(GLSRC)gxfixed.h
@@ -9360,14 +9468,14 @@ $(GLSRC)simscale.h:$(GLSRC)scommon.h
$(GLSRC)simscale.h:$(GLSRC)gsstype.h
$(GLSRC)simscale.h:$(GLSRC)gsmemory.h
$(GLSRC)simscale.h:$(GLSRC)gslibctx.h
-$(GLSRC)simscale.h:$(GLSRC)stdint_.h
$(GLSRC)simscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)simscale.h:$(GLSRC)stdio_.h
-$(GLSRC)simscale.h:$(GLSRC)gstypes.h
+$(GLSRC)simscale.h:$(GLSRC)stdint_.h
+$(GLSRC)simscale.h:$(GLSRC)gssprintf.h
$(GLSRC)simscale.h:$(GLSRC)std.h
+$(GLSRC)simscale.h:$(GLSRC)gstypes.h
$(GLSRC)simscale.h:$(GLSRC)stdpre.h
$(GLSRC)simscale.h:$(GLGEN)arch.h
-$(GLSRC)simscale.h:$(GLSRC)gssprintf.h
$(GLSRC)gximage.h:$(GLSRC)gxsample.h
$(GLSRC)gximage.h:$(GLSRC)sisparam.h
$(GLSRC)gximage.h:$(GLSRC)gxcpath.h
@@ -9375,317 +9483,320 @@ $(GLSRC)gximage.h:$(GLSRC)gxiparam.h
$(GLSRC)gximage.h:$(GLSRC)gxdevcli.h
$(GLSRC)gximage.h:$(GLSRC)gxtext.h
$(GLSRC)gximage.h:$(GLSRC)gstext.h
+$(GLSRC)gximage.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage.h:$(GLSRC)gstparam.h
-$(GLSRC)gximage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage.h:$(GLSRC)gxcspace.h
$(GLSRC)gximage.h:$(GLSRC)gsropt.h
$(GLSRC)gximage.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximage.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximage.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximage.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage.h:$(GLSRC)gxcmap.h
$(GLSRC)gximage.h:$(GLSRC)strimpl.h
-$(GLSRC)gximage.h:$(GLSRC)gxiclass.h
-$(GLSRC)gximage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximage.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage.h:$(GLSRC)gxcvalue.h
$(GLSRC)gximage.h:$(GLSRC)gsfont.h
$(GLSRC)gximage.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximage.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximage.h:$(GLSRC)gxpath.h
-$(GLSRC)gximage.h:$(GLSRC)gspenum.h
-$(GLSRC)gximage.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximage.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage.h:$(GLSRC)gxiclass.h
+$(GLSRC)gximage.h:$(GLSRC)gxftype.h
$(GLSRC)gximage.h:$(GLSRC)gxfrac.h
-$(GLSRC)gximage.h:$(GLSRC)gxdda.h
-$(GLSRC)gximage.h:$(GLSRC)gslparam.h
-$(GLSRC)gximage.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximage.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximage.h:$(GLSRC)gsrect.h
$(GLSRC)gximage.h:$(GLSRC)gscms.h
-$(GLSRC)gximage.h:$(GLSRC)gxftype.h
-$(GLSRC)gximage.h:$(GLSRC)gsdevice.h
$(GLSRC)gximage.h:$(GLSRC)gscspace.h
-$(GLSRC)gximage.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage.h:$(GLSRC)gxpath.h
+$(GLSRC)gximage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsdevice.h
$(GLSRC)gximage.h:$(GLSRC)gxarith.h
-$(GLSRC)gximage.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximage.h:$(GLSRC)gsrect.h
+$(GLSRC)gximage.h:$(GLSRC)gslparam.h
$(GLSRC)gximage.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximage.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximage.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage.h:$(GLSRC)gscpm.h
$(GLSRC)gximage.h:$(GLSRC)gxfixed.h
$(GLSRC)gximage.h:$(GLSRC)gsrefct.h
-$(GLSRC)gximage.h:$(GLSRC)gscpm.h
-$(GLSRC)gximage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximage.h:$(GLSRC)gxhttile.h
-$(GLSRC)gximage.h:$(GLSRC)gp.h
-$(GLSRC)gximage.h:$(GLSRC)memento.h
$(GLSRC)gximage.h:$(GLSRC)gsparam.h
-$(GLSRC)gximage.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximage.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximage.h:$(GLSRC)srdline.h
+$(GLSRC)gximage.h:$(GLSRC)gp.h
+$(GLSRC)gximage.h:$(GLSRC)gsccolor.h
$(GLSRC)gximage.h:$(GLSRC)gsstruct.h
$(GLSRC)gximage.h:$(GLSRC)gxsync.h
-$(GLSRC)gximage.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage.h:$(GLSRC)srdline.h
$(GLSRC)gximage.h:$(GLSRC)scommon.h
+$(GLSRC)gximage.h:$(GLSRC)memento.h
+$(GLSRC)gximage.h:$(GLSRC)gscsel.h
$(GLSRC)gximage.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximage.h:$(GLSRC)gsccolor.h
$(GLSRC)gximage.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage.h:$(GLSRC)stat_.h
+$(GLSRC)gximage.h:$(GLSRC)gxtmap.h
$(GLSRC)gximage.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage.h:$(GLSRC)gpsync.h
-$(GLSRC)gximage.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximage.h:$(GLSRC)memory_.h
+$(GLSRC)gximage.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximage.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximage.h:$(GLSRC)stdio_.h
$(GLSRC)gximage.h:$(GLSRC)gscompt.h
$(GLSRC)gximage.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximage.h:$(GLSRC)stdint_.h
$(GLSRC)gximage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage.h:$(GLSRC)stdint_.h
+$(GLSRC)gximage.h:$(GLSRC)gssprintf.h
$(GLSRC)gximage.h:$(GLSRC)gsccode.h
-$(GLSRC)gximage.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximage.h:$(GLSRC)stdio_.h
-$(GLSRC)gximage.h:$(GLSRC)gstypes.h
$(GLSRC)gximage.h:$(GLSRC)std.h
+$(GLSRC)gximage.h:$(GLSRC)gstypes.h
$(GLSRC)gximage.h:$(GLSRC)stdpre.h
$(GLSRC)gximage.h:$(GLGEN)arch.h
-$(GLSRC)gximage.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxhldevc.h:$(GLSRC)gscms.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsdevice.h
$(GLSRC)gxhldevc.h:$(GLSRC)gscspace.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsdevice.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxarith.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsiparam.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxhldevc.h:$(GLSRC)memento.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsparam.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsiparam.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsccolor.h
$(GLSRC)gxhldevc.h:$(GLSRC)gxsync.h
$(GLSRC)gxhldevc.h:$(GLSRC)scommon.h
+$(GLSRC)gxhldevc.h:$(GLSRC)memento.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsccolor.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsstype.h
$(GLSRC)gxhldevc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxhldevc.h:$(GLSRC)gpsync.h
$(GLSRC)gxhldevc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxhldevc.h:$(GLSRC)stdint_.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gsgstate.h
$(GLSRC)gxhldevc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxhldevc.h:$(GLSRC)stdio_.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhldevc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhldevc.h:$(GLSRC)std.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gstypes.h
$(GLSRC)gxhldevc.h:$(GLSRC)stdpre.h
$(GLSRC)gxhldevc.h:$(GLGEN)arch.h
-$(GLSRC)gxhldevc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsptype2.h:$(GLSRC)gsshade.h
$(GLSRC)gsptype2.h:$(GLSRC)gspath.h
$(GLSRC)gsptype2.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gsptype2.h:$(GLSRC)gspcolor.h
$(GLSRC)gsptype2.h:$(GLSRC)gscie.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspcolor.h
$(GLSRC)gsptype2.h:$(GLSRC)gsfunc.h
$(GLSRC)gsptype2.h:$(GLSRC)gxctable.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxpath.h
-$(GLSRC)gsptype2.h:$(GLSRC)gspenum.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxfrac.h
-$(GLSRC)gsptype2.h:$(GLSRC)gslparam.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsuid.h
$(GLSRC)gsptype2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsrect.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxfrac.h
$(GLSRC)gsptype2.h:$(GLSRC)gscms.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsdevice.h
$(GLSRC)gsptype2.h:$(GLSRC)gscspace.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsuid.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxpath.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdevice.h
$(GLSRC)gsptype2.h:$(GLSRC)gxarith.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspenum.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsrect.h
+$(GLSRC)gsptype2.h:$(GLSRC)gslparam.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsiparam.h
$(GLSRC)gsptype2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscpm.h
$(GLSRC)gsptype2.h:$(GLSRC)gxfixed.h
$(GLSRC)gsptype2.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsptype2.h:$(GLSRC)gscpm.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsptype2.h:$(GLSRC)memento.h
$(GLSRC)gsptype2.h:$(GLSRC)gsparam.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsccolor.h
$(GLSRC)gsptype2.h:$(GLSRC)gsstruct.h
$(GLSRC)gsptype2.h:$(GLSRC)gxsync.h
$(GLSRC)gsptype2.h:$(GLSRC)scommon.h
+$(GLSRC)gsptype2.h:$(GLSRC)memento.h
$(GLSRC)gsptype2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsccolor.h
$(GLSRC)gsptype2.h:$(GLSRC)gsstype.h
$(GLSRC)gsptype2.h:$(GLSRC)gsmemory.h
$(GLSRC)gsptype2.h:$(GLSRC)gpsync.h
$(GLSRC)gsptype2.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsptype2.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsptype2.h:$(GLSRC)stdint_.h
-$(GLSRC)gsptype2.h:$(GLSRC)gsgstate.h
$(GLSRC)gsptype2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsptype2.h:$(GLSRC)stdio_.h
-$(GLSRC)gsptype2.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype2.h:$(GLSRC)stdint_.h
+$(GLSRC)gsptype2.h:$(GLSRC)gssprintf.h
$(GLSRC)gsptype2.h:$(GLSRC)std.h
+$(GLSRC)gsptype2.h:$(GLSRC)gstypes.h
$(GLSRC)gsptype2.h:$(GLSRC)stdpre.h
$(GLSRC)gsptype2.h:$(GLGEN)arch.h
-$(GLSRC)gsptype2.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxtext.h
$(GLSRC)gdevddrw.h:$(GLSRC)gstext.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevddrw.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsropt.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsfont.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxftype.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsrect.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscms.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gslparam.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscpm.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gp.h
-$(GLSRC)gdevddrw.h:$(GLSRC)memento.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)srdline.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gp.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevddrw.h:$(GLSRC)srdline.h
$(GLSRC)gdevddrw.h:$(GLSRC)scommon.h
+$(GLSRC)gdevddrw.h:$(GLSRC)memento.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscsel.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stat_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevddrw.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevddrw.h:$(GLSRC)memory_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevddrw.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdio_.h
$(GLSRC)gdevddrw.h:$(GLSRC)gscompt.h
$(GLSRC)gdevddrw.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevddrw.h:$(GLSRC)stdint_.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevddrw.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevddrw.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gstypes.h
$(GLSRC)gdevddrw.h:$(GLSRC)std.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gstypes.h
$(GLSRC)gdevddrw.h:$(GLSRC)stdpre.h
$(GLSRC)gdevddrw.h:$(GLGEN)arch.h
-$(GLSRC)gdevddrw.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfill.h:$(GLSRC)gzpath.h
$(GLSRC)gxfill.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxfill.h:$(GLSRC)gxtext.h
$(GLSRC)gxfill.h:$(GLSRC)gstext.h
+$(GLSRC)gxfill.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxfill.h:$(GLSRC)gstparam.h
-$(GLSRC)gxfill.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcspace.h
$(GLSRC)gxfill.h:$(GLSRC)gsropt.h
$(GLSRC)gxfill.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxfill.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxfill.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxfill.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxfill.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gsimage.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfill.h:$(GLSRC)gxdda.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxfill.h:$(GLSRC)gsfont.h
$(GLSRC)gxfill.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxfill.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfill.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfill.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gsimage.h
+$(GLSRC)gxfill.h:$(GLSRC)gxftype.h
$(GLSRC)gxfill.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxfill.h:$(GLSRC)gxdda.h
-$(GLSRC)gxfill.h:$(GLSRC)gslparam.h
-$(GLSRC)gxfill.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfill.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfill.h:$(GLSRC)gsrect.h
$(GLSRC)gxfill.h:$(GLSRC)gscms.h
-$(GLSRC)gxfill.h:$(GLSRC)gxftype.h
-$(GLSRC)gxfill.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfill.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfill.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfill.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfill.h:$(GLSRC)gxarith.h
-$(GLSRC)gxfill.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxfill.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfill.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfill.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfill.h:$(GLSRC)gslparam.h
$(GLSRC)gxfill.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfill.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfill.h:$(GLSRC)gscpm.h
$(GLSRC)gxfill.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfill.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfill.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfill.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfill.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfill.h:$(GLSRC)gp.h
-$(GLSRC)gxfill.h:$(GLSRC)memento.h
$(GLSRC)gxfill.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfill.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfill.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxfill.h:$(GLSRC)srdline.h
+$(GLSRC)gxfill.h:$(GLSRC)gp.h
+$(GLSRC)gxfill.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfill.h:$(GLSRC)gsstruct.h
$(GLSRC)gxfill.h:$(GLSRC)gxsync.h
-$(GLSRC)gxfill.h:$(GLSRC)gscsel.h
+$(GLSRC)gxfill.h:$(GLSRC)srdline.h
$(GLSRC)gxfill.h:$(GLSRC)scommon.h
+$(GLSRC)gxfill.h:$(GLSRC)memento.h
+$(GLSRC)gxfill.h:$(GLSRC)gscsel.h
$(GLSRC)gxfill.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfill.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfill.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfill.h:$(GLSRC)stat_.h
+$(GLSRC)gxfill.h:$(GLSRC)gxtmap.h
$(GLSRC)gxfill.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfill.h:$(GLSRC)gpsync.h
-$(GLSRC)gxfill.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxfill.h:$(GLSRC)memory_.h
+$(GLSRC)gxfill.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxfill.h:$(GLSRC)gslibctx.h
$(GLSRC)gxfill.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxfill.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfill.h:$(GLSRC)stdio_.h
$(GLSRC)gxfill.h:$(GLSRC)gscompt.h
$(GLSRC)gxfill.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfill.h:$(GLSRC)stdint_.h
$(GLSRC)gxfill.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfill.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfill.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfill.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfill.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfill.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfill.h:$(GLSRC)gstypes.h
$(GLSRC)gxfill.h:$(GLSRC)std.h
+$(GLSRC)gxfill.h:$(GLSRC)gstypes.h
$(GLSRC)gxfill.h:$(GLSRC)stdpre.h
$(GLSRC)gxfill.h:$(GLGEN)arch.h
-$(GLSRC)gxfill.h:$(GLSRC)gssprintf.h
$(GLSRC)ttfoutl.h:$(GLSRC)malloc_.h
$(GLSRC)ttfoutl.h:$(GLSRC)bobbin.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsuid.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsfont.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gxbcache.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxftype.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxbcache.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttfoutl.h:$(GLSRC)memento.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfoutl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxfixed.h
$(GLSRC)ttfoutl.h:$(GLSRC)scommon.h
+$(GLSRC)ttfoutl.h:$(GLSRC)memento.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsstype.h
$(GLSRC)ttfoutl.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfoutl.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttfoutl.h:$(GLSRC)stdint_.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsgstate.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gsccode.h
$(GLSRC)ttfoutl.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfoutl.h:$(GLSRC)stdio_.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfoutl.h:$(GLSRC)stdint_.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsccode.h
$(GLSRC)ttfoutl.h:$(GLSRC)std.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gstypes.h
$(GLSRC)ttfoutl.h:$(GLSRC)stdpre.h
$(GLSRC)ttfoutl.h:$(GLGEN)arch.h
-$(GLSRC)ttfoutl.h:$(GLSRC)gssprintf.h
$(GLSRC)gxttfb.h:$(GLSRC)ttfoutl.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxfont.h
$(GLSRC)gxttfb.h:$(GLSRC)malloc_.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfont.h
$(GLSRC)gxttfb.h:$(GLSRC)bobbin.h
$(GLSRC)gxttfb.h:$(GLSRC)gspath.h
$(GLSRC)gxttfb.h:$(GLSRC)gxmatrix.h
@@ -9696,255 +9807,258 @@ $(GLSRC)gxttfb.h:$(GLSRC)gsnotify.h
$(GLSRC)gxttfb.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxttfb.h:$(GLSRC)gstext.h
$(GLSRC)gxttfb.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsuid.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxttfb.h:$(GLSRC)gsfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxftype.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscms.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscspace.h
$(GLSRC)gxttfb.h:$(GLSRC)gxpath.h
-$(GLSRC)gxttfb.h:$(GLSRC)gspenum.h
-$(GLSRC)gxttfb.h:$(GLSRC)gslparam.h
$(GLSRC)gxttfb.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsrect.h
-$(GLSRC)gxttfb.h:$(GLSRC)gscms.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxftype.h
$(GLSRC)gxttfb.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxttfb.h:$(GLSRC)gscspace.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsuid.h
$(GLSRC)gxttfb.h:$(GLSRC)gxarith.h
+$(GLSRC)gxttfb.h:$(GLSRC)gspenum.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsrect.h
+$(GLSRC)gxttfb.h:$(GLSRC)gslparam.h
$(GLSRC)gxttfb.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscpm.h
$(GLSRC)gxttfb.h:$(GLSRC)gxfixed.h
$(GLSRC)gxttfb.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxttfb.h:$(GLSRC)gscpm.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxttfb.h:$(GLSRC)memento.h
$(GLSRC)gxttfb.h:$(GLSRC)gsparam.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxttfb.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsccolor.h
$(GLSRC)gxttfb.h:$(GLSRC)gxsync.h
$(GLSRC)gxttfb.h:$(GLSRC)scommon.h
+$(GLSRC)gxttfb.h:$(GLSRC)memento.h
$(GLSRC)gxttfb.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxttfb.h:$(GLSRC)gsccolor.h
$(GLSRC)gxttfb.h:$(GLSRC)gsstype.h
$(GLSRC)gxttfb.h:$(GLSRC)gsmemory.h
$(GLSRC)gxttfb.h:$(GLSRC)gpsync.h
$(GLSRC)gxttfb.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxttfb.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdio_.h
$(GLSRC)gxttfb.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxttfb.h:$(GLSRC)stdint_.h
$(GLSRC)gxttfb.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdint_.h
+$(GLSRC)gxttfb.h:$(GLSRC)gssprintf.h
$(GLSRC)gxttfb.h:$(GLSRC)gsccode.h
-$(GLSRC)gxttfb.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxttfb.h:$(GLSRC)stdio_.h
-$(GLSRC)gxttfb.h:$(GLSRC)gstypes.h
$(GLSRC)gxttfb.h:$(GLSRC)std.h
+$(GLSRC)gxttfb.h:$(GLSRC)gstypes.h
$(GLSRC)gxttfb.h:$(GLSRC)stdpre.h
$(GLSRC)gxttfb.h:$(GLGEN)arch.h
-$(GLSRC)gxttfb.h:$(GLSRC)gssprintf.h
$(GLSRC)gzspotan.h:$(GLSRC)gzpath.h
$(GLSRC)gzspotan.h:$(GLSRC)gxdevcli.h
$(GLSRC)gzspotan.h:$(GLSRC)gxtext.h
$(GLSRC)gzspotan.h:$(GLSRC)gstext.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzspotan.h:$(GLSRC)gstparam.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcspace.h
$(GLSRC)gzspotan.h:$(GLSRC)gsropt.h
$(GLSRC)gzspotan.h:$(GLSRC)gsfunc.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsnamecl.h
$(GLSRC)gzspotan.h:$(GLSRC)gxrplane.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxcspace.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsuid.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsimage.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxdda.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcvalue.h
$(GLSRC)gzspotan.h:$(GLSRC)gsfont.h
$(GLSRC)gzspotan.h:$(GLSRC)gxfmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxpath.h
-$(GLSRC)gzspotan.h:$(GLSRC)gspenum.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxtmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsimage.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxftype.h
$(GLSRC)gzspotan.h:$(GLSRC)gxfrac.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxdda.h
-$(GLSRC)gzspotan.h:$(GLSRC)gslparam.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxbcache.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsrect.h
$(GLSRC)gzspotan.h:$(GLSRC)gscms.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxftype.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsdevice.h
$(GLSRC)gzspotan.h:$(GLSRC)gscspace.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsuid.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxpath.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdevice.h
$(GLSRC)gzspotan.h:$(GLSRC)gxarith.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzspotan.h:$(GLSRC)gspenum.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsrect.h
+$(GLSRC)gzspotan.h:$(GLSRC)gslparam.h
$(GLSRC)gzspotan.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscpm.h
$(GLSRC)gzspotan.h:$(GLSRC)gxfixed.h
$(GLSRC)gzspotan.h:$(GLSRC)gsrefct.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscpm.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsiparam.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxhttile.h
-$(GLSRC)gzspotan.h:$(GLSRC)gp.h
-$(GLSRC)gzspotan.h:$(GLSRC)memento.h
$(GLSRC)gzspotan.h:$(GLSRC)gsparam.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gzspotan.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)srdline.h
+$(GLSRC)gzspotan.h:$(GLSRC)gp.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsccolor.h
$(GLSRC)gzspotan.h:$(GLSRC)gsstruct.h
$(GLSRC)gzspotan.h:$(GLSRC)gxsync.h
-$(GLSRC)gzspotan.h:$(GLSRC)gscsel.h
+$(GLSRC)gzspotan.h:$(GLSRC)srdline.h
$(GLSRC)gzspotan.h:$(GLSRC)scommon.h
+$(GLSRC)gzspotan.h:$(GLSRC)memento.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscsel.h
$(GLSRC)gzspotan.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gzspotan.h:$(GLSRC)gsccolor.h
$(GLSRC)gzspotan.h:$(GLSRC)gsstype.h
+$(GLSRC)gzspotan.h:$(GLSRC)stat_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxtmap.h
$(GLSRC)gzspotan.h:$(GLSRC)gsmemory.h
$(GLSRC)gzspotan.h:$(GLSRC)gpsync.h
-$(GLSRC)gzspotan.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzspotan.h:$(GLSRC)memory_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gpgetenv.h
$(GLSRC)gzspotan.h:$(GLSRC)gslibctx.h
$(GLSRC)gzspotan.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzspotan.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdio_.h
$(GLSRC)gzspotan.h:$(GLSRC)gscompt.h
$(GLSRC)gzspotan.h:$(GLSRC)gxcindex.h
-$(GLSRC)gzspotan.h:$(GLSRC)stdint_.h
$(GLSRC)gzspotan.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdint_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gssprintf.h
$(GLSRC)gzspotan.h:$(GLSRC)gsccode.h
-$(GLSRC)gzspotan.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gzspotan.h:$(GLSRC)stdio_.h
-$(GLSRC)gzspotan.h:$(GLSRC)gstypes.h
$(GLSRC)gzspotan.h:$(GLSRC)std.h
+$(GLSRC)gzspotan.h:$(GLSRC)gstypes.h
$(GLSRC)gzspotan.h:$(GLSRC)stdpre.h
$(GLSRC)gzspotan.h:$(GLGEN)arch.h
-$(GLSRC)gzspotan.h:$(GLSRC)gssprintf.h
$(GLSRC)gsequivc.h:$(GLSRC)gxdevcli.h
$(GLSRC)gsequivc.h:$(GLSRC)gxtext.h
$(GLSRC)gsequivc.h:$(GLSRC)gstext.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsnamecl.h
$(GLSRC)gsequivc.h:$(GLSRC)gstparam.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcspace.h
$(GLSRC)gsequivc.h:$(GLSRC)gsropt.h
$(GLSRC)gsequivc.h:$(GLSRC)gsfunc.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsnamecl.h
$(GLSRC)gsequivc.h:$(GLSRC)gxrplane.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxcspace.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsuid.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsimage.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxdda.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsequivc.h:$(GLSRC)gsfont.h
$(GLSRC)gsequivc.h:$(GLSRC)gxfmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxpath.h
-$(GLSRC)gsequivc.h:$(GLSRC)gspenum.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxtmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsimage.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxftype.h
$(GLSRC)gsequivc.h:$(GLSRC)gxfrac.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxdda.h
-$(GLSRC)gsequivc.h:$(GLSRC)gslparam.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxbcache.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsrect.h
$(GLSRC)gsequivc.h:$(GLSRC)gscms.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxftype.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsdevice.h
$(GLSRC)gsequivc.h:$(GLSRC)gscspace.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsuid.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxpath.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdevice.h
$(GLSRC)gsequivc.h:$(GLSRC)gxarith.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gspenum.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsrect.h
+$(GLSRC)gsequivc.h:$(GLSRC)gslparam.h
$(GLSRC)gsequivc.h:$(GLSRC)gsxfont.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscpm.h
$(GLSRC)gsequivc.h:$(GLSRC)gxfixed.h
$(GLSRC)gsequivc.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscpm.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxhttile.h
-$(GLSRC)gsequivc.h:$(GLSRC)gp.h
-$(GLSRC)gsequivc.h:$(GLSRC)memento.h
$(GLSRC)gsequivc.h:$(GLSRC)gsparam.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsequivc.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)srdline.h
+$(GLSRC)gsequivc.h:$(GLSRC)gp.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsccolor.h
$(GLSRC)gsequivc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsequivc.h:$(GLSRC)gxsync.h
-$(GLSRC)gsequivc.h:$(GLSRC)gscsel.h
+$(GLSRC)gsequivc.h:$(GLSRC)srdline.h
$(GLSRC)gsequivc.h:$(GLSRC)scommon.h
+$(GLSRC)gsequivc.h:$(GLSRC)memento.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscsel.h
$(GLSRC)gsequivc.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsequivc.h:$(GLSRC)gsccolor.h
$(GLSRC)gsequivc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsequivc.h:$(GLSRC)stat_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxtmap.h
$(GLSRC)gsequivc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsequivc.h:$(GLSRC)gpsync.h
-$(GLSRC)gsequivc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gsequivc.h:$(GLSRC)memory_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gpgetenv.h
$(GLSRC)gsequivc.h:$(GLSRC)gslibctx.h
$(GLSRC)gsequivc.h:$(GLSRC)gscdefs.h
+$(GLSRC)gsequivc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdio_.h
$(GLSRC)gsequivc.h:$(GLSRC)gscompt.h
$(GLSRC)gsequivc.h:$(GLSRC)gxcindex.h
-$(GLSRC)gsequivc.h:$(GLSRC)stdint_.h
$(GLSRC)gsequivc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsequivc.h:$(GLSRC)gsccode.h
-$(GLSRC)gsequivc.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gsequivc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsequivc.h:$(GLSRC)gstypes.h
$(GLSRC)gsequivc.h:$(GLSRC)std.h
+$(GLSRC)gsequivc.h:$(GLSRC)gstypes.h
$(GLSRC)gsequivc.h:$(GLSRC)stdpre.h
$(GLSRC)gsequivc.h:$(GLGEN)arch.h
-$(GLSRC)gsequivc.h:$(GLSRC)gssprintf.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxblend.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxtext.h
$(GLSRC)gdevdevn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdevn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsropt.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gslparam.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscpm.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gp.h
-$(GLSRC)gdevdevn.h:$(GLSRC)memento.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gp.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdevn.h:$(GLSRC)srdline.h
$(GLSRC)gdevdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdevn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscsel.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdevn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdevn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdio_.h
$(GLSRC)gdevdevn.h:$(GLSRC)gscompt.h
$(GLSRC)gdevdevn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdevn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevdevn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdevn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdevn.h:$(GLSRC)std.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdevn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdevn.h:$(GLGEN)arch.h
-$(GLSRC)gdevdevn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevprn.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)string_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrtok.h
@@ -9952,1032 +10066,1041 @@ $(GLSRC)gdevdevnprn.h:$(GLSRC)gxclthrd.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclpage.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclist.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gstrans.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxline.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstrans.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht1.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)math_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevp14.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcolor.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gx.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gx.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdebug.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxband.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsequivc.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclipsr.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscindex.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcache.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscindex.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtext.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscie.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstext.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscie.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstate.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsropt.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gslparam.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclio.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsio.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gp.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)memento.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gp.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxsync.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsutil.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrl.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gdbflags.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)srdline.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gserrors.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)memento.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)vmsmath.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)scommon.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdio_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gscompt.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)std.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevdevnprn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevdevnprn.h:$(GLGEN)arch.h
-$(GLSRC)gdevdevnprn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxtext.h
$(GLSRC)gdevoflt.h:$(GLSRC)gstext.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevoflt.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsropt.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsfont.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxftype.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsrect.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscms.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gslparam.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscpm.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsio.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gp.h
-$(GLSRC)gdevoflt.h:$(GLSRC)memento.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevoflt.h:$(GLSRC)srdline.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gp.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevoflt.h:$(GLSRC)srdline.h
$(GLSRC)gdevoflt.h:$(GLSRC)scommon.h
+$(GLSRC)gdevoflt.h:$(GLSRC)memento.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscsel.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stat_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevoflt.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevoflt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevoflt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdio_.h
$(GLSRC)gdevoflt.h:$(GLSRC)gscompt.h
$(GLSRC)gdevoflt.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevoflt.h:$(GLSRC)stdint_.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevoflt.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevoflt.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gstypes.h
$(GLSRC)gdevoflt.h:$(GLSRC)std.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gstypes.h
$(GLSRC)gdevoflt.h:$(GLSRC)stdpre.h
$(GLSRC)gdevoflt.h:$(GLGEN)arch.h
-$(GLSRC)gdevoflt.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfapi.h:$(GLSRC)gstext.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfapi.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfapi.h:$(GLSRC)gslparam.h
$(GLSRC)gxfapi.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsfont.h
$(GLSRC)gxfapi.h:$(GLSRC)gscms.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfapi.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfapi.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfapi.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfapi.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscpm.h
$(GLSRC)gxfapi.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfapi.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfapi.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfapi.h:$(GLSRC)memento.h
$(GLSRC)gxfapi.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfapi.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfapi.h:$(GLSRC)gxsync.h
$(GLSRC)gxfapi.h:$(GLSRC)scommon.h
+$(GLSRC)gxfapi.h:$(GLSRC)memento.h
$(GLSRC)gxfapi.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfapi.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfapi.h:$(GLSRC)gsstype.h
$(GLSRC)gxfapi.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfapi.h:$(GLSRC)gpsync.h
$(GLSRC)gxfapi.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfapi.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdio_.h
$(GLSRC)gxfapi.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfapi.h:$(GLSRC)stdint_.h
$(GLSRC)gxfapi.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfapi.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfapi.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfapi.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfapi.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfapi.h:$(GLSRC)gstypes.h
$(GLSRC)gxfapi.h:$(GLSRC)std.h
+$(GLSRC)gxfapi.h:$(GLSRC)gstypes.h
$(GLSRC)gxfapi.h:$(GLSRC)stdpre.h
$(GLSRC)gxfapi.h:$(GLGEN)arch.h
-$(GLSRC)gxfapi.h:$(GLSRC)gssprintf.h
$(GLSRC)wrfont.h:$(GLSRC)std.h
$(GLSRC)wrfont.h:$(GLSRC)stdpre.h
$(GLSRC)wrfont.h:$(GLGEN)arch.h
$(GLSRC)write_t1.h:$(GLSRC)gxfapi.h
$(GLSRC)write_t1.h:$(GLSRC)gstext.h
-$(GLSRC)write_t1.h:$(GLSRC)gsfont.h
-$(GLSRC)write_t1.h:$(GLSRC)gxpath.h
-$(GLSRC)write_t1.h:$(GLSRC)gspenum.h
-$(GLSRC)write_t1.h:$(GLSRC)gslparam.h
$(GLSRC)write_t1.h:$(GLSRC)gsdcolor.h
-$(GLSRC)write_t1.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t1.h:$(GLSRC)gsfont.h
$(GLSRC)write_t1.h:$(GLSRC)gscms.h
-$(GLSRC)write_t1.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t1.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t1.h:$(GLSRC)gxpath.h
+$(GLSRC)write_t1.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t1.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t1.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t1.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t1.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t1.h:$(GLSRC)gslparam.h
+$(GLSRC)write_t1.h:$(GLSRC)gsiparam.h
+$(GLSRC)write_t1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t1.h:$(GLSRC)gscpm.h
$(GLSRC)write_t1.h:$(GLSRC)gxfixed.h
$(GLSRC)write_t1.h:$(GLSRC)gsrefct.h
-$(GLSRC)write_t1.h:$(GLSRC)gscpm.h
-$(GLSRC)write_t1.h:$(GLSRC)gsiparam.h
-$(GLSRC)write_t1.h:$(GLSRC)gxhttile.h
-$(GLSRC)write_t1.h:$(GLSRC)memento.h
$(GLSRC)write_t1.h:$(GLSRC)gsparam.h
-$(GLSRC)write_t1.h:$(GLSRC)gsmatrix.h
-$(GLSRC)write_t1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t1.h:$(GLSRC)gsccolor.h
$(GLSRC)write_t1.h:$(GLSRC)gxsync.h
$(GLSRC)write_t1.h:$(GLSRC)scommon.h
+$(GLSRC)write_t1.h:$(GLSRC)memento.h
$(GLSRC)write_t1.h:$(GLSRC)gsbitmap.h
-$(GLSRC)write_t1.h:$(GLSRC)gsccolor.h
$(GLSRC)write_t1.h:$(GLSRC)gsstype.h
$(GLSRC)write_t1.h:$(GLSRC)gsmemory.h
$(GLSRC)write_t1.h:$(GLSRC)gpsync.h
$(GLSRC)write_t1.h:$(GLSRC)gslibctx.h
+$(GLSRC)write_t1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)write_t1.h:$(GLSRC)stdio_.h
$(GLSRC)write_t1.h:$(GLSRC)gxcindex.h
-$(GLSRC)write_t1.h:$(GLSRC)stdint_.h
$(GLSRC)write_t1.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t1.h:$(GLSRC)stdint_.h
+$(GLSRC)write_t1.h:$(GLSRC)gssprintf.h
$(GLSRC)write_t1.h:$(GLSRC)gsccode.h
-$(GLSRC)write_t1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)write_t1.h:$(GLSRC)stdio_.h
-$(GLSRC)write_t1.h:$(GLSRC)gstypes.h
$(GLSRC)write_t1.h:$(GLSRC)std.h
+$(GLSRC)write_t1.h:$(GLSRC)gstypes.h
$(GLSRC)write_t1.h:$(GLSRC)stdpre.h
$(GLSRC)write_t1.h:$(GLGEN)arch.h
-$(GLSRC)write_t1.h:$(GLSRC)gssprintf.h
$(GLSRC)write_t2.h:$(GLSRC)gxfapi.h
$(GLSRC)write_t2.h:$(GLSRC)gstext.h
-$(GLSRC)write_t2.h:$(GLSRC)gsfont.h
-$(GLSRC)write_t2.h:$(GLSRC)gxpath.h
-$(GLSRC)write_t2.h:$(GLSRC)gspenum.h
-$(GLSRC)write_t2.h:$(GLSRC)gslparam.h
$(GLSRC)write_t2.h:$(GLSRC)gsdcolor.h
-$(GLSRC)write_t2.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t2.h:$(GLSRC)gsfont.h
$(GLSRC)write_t2.h:$(GLSRC)gscms.h
-$(GLSRC)write_t2.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t2.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t2.h:$(GLSRC)gxpath.h
+$(GLSRC)write_t2.h:$(GLSRC)gsdevice.h
$(GLSRC)write_t2.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t2.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t2.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t2.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t2.h:$(GLSRC)gslparam.h
+$(GLSRC)write_t2.h:$(GLSRC)gsiparam.h
+$(GLSRC)write_t2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t2.h:$(GLSRC)gscpm.h
$(GLSRC)write_t2.h:$(GLSRC)gxfixed.h
$(GLSRC)write_t2.h:$(GLSRC)gsrefct.h
-$(GLSRC)write_t2.h:$(GLSRC)gscpm.h
-$(GLSRC)write_t2.h:$(GLSRC)gsiparam.h
-$(GLSRC)write_t2.h:$(GLSRC)gxhttile.h
-$(GLSRC)write_t2.h:$(GLSRC)memento.h
$(GLSRC)write_t2.h:$(GLSRC)gsparam.h
-$(GLSRC)write_t2.h:$(GLSRC)gsmatrix.h
-$(GLSRC)write_t2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t2.h:$(GLSRC)gsccolor.h
$(GLSRC)write_t2.h:$(GLSRC)gxsync.h
$(GLSRC)write_t2.h:$(GLSRC)scommon.h
+$(GLSRC)write_t2.h:$(GLSRC)memento.h
$(GLSRC)write_t2.h:$(GLSRC)gsbitmap.h
-$(GLSRC)write_t2.h:$(GLSRC)gsccolor.h
$(GLSRC)write_t2.h:$(GLSRC)gsstype.h
$(GLSRC)write_t2.h:$(GLSRC)gsmemory.h
$(GLSRC)write_t2.h:$(GLSRC)gpsync.h
$(GLSRC)write_t2.h:$(GLSRC)gslibctx.h
+$(GLSRC)write_t2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)write_t2.h:$(GLSRC)stdio_.h
$(GLSRC)write_t2.h:$(GLSRC)gxcindex.h
-$(GLSRC)write_t2.h:$(GLSRC)stdint_.h
$(GLSRC)write_t2.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t2.h:$(GLSRC)stdint_.h
+$(GLSRC)write_t2.h:$(GLSRC)gssprintf.h
$(GLSRC)write_t2.h:$(GLSRC)gsccode.h
-$(GLSRC)write_t2.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)write_t2.h:$(GLSRC)stdio_.h
-$(GLSRC)write_t2.h:$(GLSRC)gstypes.h
$(GLSRC)write_t2.h:$(GLSRC)std.h
+$(GLSRC)write_t2.h:$(GLSRC)gstypes.h
$(GLSRC)write_t2.h:$(GLSRC)stdpre.h
$(GLSRC)write_t2.h:$(GLGEN)arch.h
-$(GLSRC)write_t2.h:$(GLSRC)gssprintf.h
$(GLSRC)claptrap.h:$(GLSRC)gsmemory.h
$(GLSRC)claptrap.h:$(GLSRC)gslibctx.h
$(GLSRC)claptrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)claptrap.h:$(GLSRC)stdio_.h
-$(GLSRC)claptrap.h:$(GLSRC)gstypes.h
+$(GLSRC)claptrap.h:$(GLSRC)gssprintf.h
$(GLSRC)claptrap.h:$(GLSRC)std.h
+$(GLSRC)claptrap.h:$(GLSRC)gstypes.h
$(GLSRC)claptrap.h:$(GLSRC)stdpre.h
$(GLSRC)claptrap.h:$(GLGEN)arch.h
-$(GLSRC)claptrap.h:$(GLSRC)gssprintf.h
$(GLSRC)ets.h:$(GLSRC)stdpre.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxgetbit.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxtext.h
$(GLSRC)gxdownscale.h:$(GLSRC)gstext.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdownscale.h:$(GLSRC)gstparam.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcspace.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsropt.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsfont.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxpath.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gspenum.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxftype.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxdda.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gslparam.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsrect.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscms.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxftype.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscspace.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdevice.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxarith.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gslparam.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscpm.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxfixed.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscpm.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gp.h
-$(GLSRC)gxdownscale.h:$(GLSRC)memento.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsparam.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)srdline.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gp.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsstruct.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdownscale.h:$(GLSRC)srdline.h
$(GLSRC)gxdownscale.h:$(GLSRC)claptrap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gscsel.h
$(GLSRC)gxdownscale.h:$(GLSRC)scommon.h
+$(GLSRC)gxdownscale.h:$(GLSRC)memento.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscsel.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gsccolor.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stat_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxtmap.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsmemory.h
$(GLSRC)gxdownscale.h:$(GLSRC)gpsync.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdownscale.h:$(GLSRC)memory_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxdownscale.h:$(GLSRC)gslibctx.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxdownscale.h:$(GLSRC)ctype_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdio_.h
$(GLSRC)gxdownscale.h:$(GLSRC)gscompt.h
$(GLSRC)gxdownscale.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxdownscale.h:$(GLSRC)stdint_.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gssprintf.h
$(GLSRC)gxdownscale.h:$(GLSRC)gsccode.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxdownscale.h:$(GLSRC)stdio_.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gstypes.h
$(GLSRC)gxdownscale.h:$(GLSRC)std.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gstypes.h
$(GLSRC)gxdownscale.h:$(GLSRC)stdpre.h
$(GLSRC)gxdownscale.h:$(GLGEN)arch.h
-$(GLSRC)gxdownscale.h:$(GLSRC)gssprintf.h
$(GLSRC)strmio.h:$(GLSRC)scommon.h
$(GLSRC)strmio.h:$(GLSRC)gsstype.h
$(GLSRC)strmio.h:$(GLSRC)gsmemory.h
$(GLSRC)strmio.h:$(GLSRC)gslibctx.h
-$(GLSRC)strmio.h:$(GLSRC)stdint_.h
$(GLSRC)strmio.h:$(GLSRC)gs_dll_call.h
$(GLSRC)strmio.h:$(GLSRC)stdio_.h
-$(GLSRC)strmio.h:$(GLSRC)gstypes.h
+$(GLSRC)strmio.h:$(GLSRC)stdint_.h
+$(GLSRC)strmio.h:$(GLSRC)gssprintf.h
$(GLSRC)strmio.h:$(GLSRC)std.h
+$(GLSRC)strmio.h:$(GLSRC)gstypes.h
$(GLSRC)strmio.h:$(GLSRC)stdpre.h
$(GLSRC)strmio.h:$(GLGEN)arch.h
-$(GLSRC)strmio.h:$(GLSRC)gssprintf.h
$(GLSRC)sdcparam.h:$(GLSRC)sdct.h
$(GLSRC)sdcparam.h:$(GLSRC)setjmp_.h
$(GLSRC)sdcparam.h:$(GLSRC)strimpl.h
$(GLSRC)sdcparam.h:$(GLSRC)gscms.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsdevice.h
$(GLSRC)sdcparam.h:$(GLSRC)gscspace.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsdevice.h
$(GLSRC)sdcparam.h:$(GLSRC)gsiparam.h
-$(GLSRC)sdcparam.h:$(GLSRC)memento.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsparam.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsmatrix.h
$(GLSRC)sdcparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsparam.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsccolor.h
$(GLSRC)sdcparam.h:$(GLSRC)gsstruct.h
$(GLSRC)sdcparam.h:$(GLSRC)gxsync.h
$(GLSRC)sdcparam.h:$(GLSRC)scommon.h
+$(GLSRC)sdcparam.h:$(GLSRC)memento.h
$(GLSRC)sdcparam.h:$(GLSRC)gsbitmap.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsccolor.h
$(GLSRC)sdcparam.h:$(GLSRC)gsstype.h
$(GLSRC)sdcparam.h:$(GLSRC)gsmemory.h
$(GLSRC)sdcparam.h:$(GLSRC)gpsync.h
$(GLSRC)sdcparam.h:$(GLSRC)gslibctx.h
-$(GLSRC)sdcparam.h:$(GLSRC)stdint_.h
-$(GLSRC)sdcparam.h:$(GLSRC)gsgstate.h
$(GLSRC)sdcparam.h:$(GLSRC)gs_dll_call.h
$(GLSRC)sdcparam.h:$(GLSRC)stdio_.h
-$(GLSRC)sdcparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)sdcparam.h:$(GLSRC)stdint_.h
+$(GLSRC)sdcparam.h:$(GLSRC)gssprintf.h
$(GLSRC)sdcparam.h:$(GLSRC)std.h
+$(GLSRC)sdcparam.h:$(GLSRC)gstypes.h
$(GLSRC)sdcparam.h:$(GLSRC)stdpre.h
$(GLSRC)sdcparam.h:$(GLGEN)arch.h
-$(GLSRC)sdcparam.h:$(GLSRC)gssprintf.h
$(GLSRC)ssha2.h:$(GLSRC)sha2.h
$(GLSRC)ssha2.h:$(GLSRC)scommon.h
$(GLSRC)ssha2.h:$(GLSRC)gsstype.h
$(GLSRC)ssha2.h:$(GLSRC)gsmemory.h
$(GLSRC)ssha2.h:$(GLSRC)gslibctx.h
-$(GLSRC)ssha2.h:$(GLSRC)stdint_.h
$(GLSRC)ssha2.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ssha2.h:$(GLSRC)stdio_.h
-$(GLSRC)ssha2.h:$(GLSRC)gstypes.h
+$(GLSRC)ssha2.h:$(GLSRC)stdint_.h
+$(GLSRC)ssha2.h:$(GLSRC)gssprintf.h
$(GLSRC)ssha2.h:$(GLSRC)std.h
+$(GLSRC)ssha2.h:$(GLSRC)gstypes.h
$(GLSRC)ssha2.h:$(GLSRC)stdpre.h
$(GLSRC)ssha2.h:$(GLGEN)arch.h
-$(GLSRC)ssha2.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevprn.h:$(GLSRC)string_.h
$(GLSRC)gdevprn.h:$(GLSRC)gsstrtok.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclthrd.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclpage.h
$(GLSRC)gdevprn.h:$(GLSRC)gxclist.h
$(GLSRC)gdevprn.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevprn.h:$(GLSRC)gstrans.h
$(GLSRC)gdevprn.h:$(GLSRC)gxline.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstrans.h
$(GLSRC)gdevprn.h:$(GLSRC)gsht1.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcomp.h
$(GLSRC)gdevprn.h:$(GLSRC)math_.h
$(GLSRC)gdevprn.h:$(GLSRC)gdevp14.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevprn.h:$(GLSRC)gxpcolor.h
-$(GLSRC)gdevprn.h:$(GLSRC)gx.h
$(GLSRC)gdevprn.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gx.h
$(GLSRC)gdevprn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevprn.h:$(GLSRC)gdebug.h
$(GLSRC)gdevprn.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gdevprn.h:$(GLSRC)gxband.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsequivc.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxclipsr.h
$(GLSRC)gdevprn.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscindex.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevprn.h:$(GLSRC)gxpcache.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscindex.h
$(GLSRC)gdevprn.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevprn.h:$(GLSRC)gxtext.h
-$(GLSRC)gdevprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscie.h
$(GLSRC)gdevprn.h:$(GLSRC)gstext.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevprn.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscie.h
$(GLSRC)gdevprn.h:$(GLSRC)gxstate.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevprn.h:$(GLSRC)gsropt.h
$(GLSRC)gdevprn.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevprn.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevprn.h:$(GLSRC)gsfont.h
$(GLSRC)gdevprn.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevprn.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxftype.h
$(GLSRC)gdevprn.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevprn.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsrect.h
$(GLSRC)gdevprn.h:$(GLSRC)gscms.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevprn.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevprn.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevprn.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevprn.h:$(GLSRC)gslparam.h
$(GLSRC)gdevprn.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclio.h
$(GLSRC)gdevprn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevprn.h:$(GLSRC)gsio.h
-$(GLSRC)gdevprn.h:$(GLSRC)gp.h
-$(GLSRC)gdevprn.h:$(GLSRC)memento.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevprn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gp.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxsync.h
$(GLSRC)gdevprn.h:$(GLSRC)gsutil.h
$(GLSRC)gdevprn.h:$(GLSRC)gsstrl.h
$(GLSRC)gdevprn.h:$(GLSRC)gdbflags.h
$(GLSRC)gdevprn.h:$(GLSRC)srdline.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevprn.h:$(GLSRC)gserrors.h
-$(GLSRC)gdevprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevprn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevprn.h:$(GLSRC)memento.h
$(GLSRC)gdevprn.h:$(GLSRC)vmsmath.h
$(GLSRC)gdevprn.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevprn.h:$(GLSRC)scommon.h
$(GLSRC)gdevprn.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevprn.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevprn.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevprn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevprn.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevprn.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevprn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevprn.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevprn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevprn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdio_.h
$(GLSRC)gdevprn.h:$(GLSRC)gscompt.h
$(GLSRC)gdevprn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevprn.h:$(GLSRC)stdint_.h
$(GLSRC)gdevprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevprn.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevprn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevprn.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevprn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevprn.h:$(GLSRC)std.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstypes.h
$(GLSRC)gdevprn.h:$(GLSRC)stdpre.h
$(GLSRC)gdevprn.h:$(GLGEN)arch.h
-$(GLSRC)gdevprn.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxtext.h
$(GLSRC)gdevmplt.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevmplt.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsropt.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsfont.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxftype.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsrect.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscms.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gslparam.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscpm.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsio.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gp.h
-$(GLSRC)gdevmplt.h:$(GLSRC)memento.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevmplt.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gp.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmplt.h:$(GLSRC)srdline.h
$(GLSRC)gdevmplt.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmplt.h:$(GLSRC)memento.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscsel.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevmplt.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmplt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevmplt.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdio_.h
$(GLSRC)gdevmplt.h:$(GLSRC)gscompt.h
$(GLSRC)gdevmplt.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevmplt.h:$(GLSRC)stdint_.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevmplt.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevmplt.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmplt.h:$(GLSRC)std.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gstypes.h
$(GLSRC)gdevmplt.h:$(GLSRC)stdpre.h
$(GLSRC)gdevmplt.h:$(GLGEN)arch.h
-$(GLSRC)gdevmplt.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevppla.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gdevppla.h:$(GLSRC)gxband.h
$(GLSRC)gdevppla.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevppla.h:$(GLSRC)gxtext.h
$(GLSRC)gdevppla.h:$(GLSRC)gstext.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevppla.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevppla.h:$(GLSRC)gsropt.h
$(GLSRC)gdevppla.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevppla.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxclio.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevppla.h:$(GLSRC)gsfont.h
$(GLSRC)gdevppla.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevppla.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxftype.h
$(GLSRC)gdevppla.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevppla.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsrect.h
$(GLSRC)gdevppla.h:$(GLSRC)gscms.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevppla.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevppla.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevppla.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevppla.h:$(GLSRC)gslparam.h
$(GLSRC)gdevppla.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscpm.h
$(GLSRC)gdevppla.h:$(GLSRC)gxfixed.h
$(GLSRC)gdevppla.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscpm.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxhttile.h
-$(GLSRC)gdevppla.h:$(GLSRC)gp.h
-$(GLSRC)gdevppla.h:$(GLSRC)memento.h
$(GLSRC)gdevppla.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gdevppla.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)srdline.h
+$(GLSRC)gdevppla.h:$(GLSRC)gp.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevppla.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevppla.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevppla.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevppla.h:$(GLSRC)srdline.h
$(GLSRC)gdevppla.h:$(GLSRC)scommon.h
+$(GLSRC)gdevppla.h:$(GLSRC)memento.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscsel.h
$(GLSRC)gdevppla.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gdevppla.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevppla.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevppla.h:$(GLSRC)stat_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevppla.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevppla.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevppla.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevppla.h:$(GLSRC)memory_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevppla.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevppla.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevppla.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdio_.h
$(GLSRC)gdevppla.h:$(GLSRC)gscompt.h
$(GLSRC)gdevppla.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevppla.h:$(GLSRC)stdint_.h
$(GLSRC)gdevppla.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevppla.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevppla.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevppla.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevppla.h:$(GLSRC)gstypes.h
$(GLSRC)gdevppla.h:$(GLSRC)std.h
+$(GLSRC)gdevppla.h:$(GLSRC)gstypes.h
$(GLSRC)gdevppla.h:$(GLSRC)stdpre.h
$(GLSRC)gdevppla.h:$(GLGEN)arch.h
-$(GLSRC)gdevppla.h:$(GLSRC)gssprintf.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsiparm3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm3.h:$(GLSRC)scommon.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparm3.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparm3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparm3.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparm3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm3.h:$(GLSRC)stdio_.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm3.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gssprintf.h
$(GLSRC)gsiparm3.h:$(GLSRC)std.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gstypes.h
$(GLSRC)gsiparm3.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparm3.h:$(GLGEN)arch.h
-$(GLSRC)gsiparm3.h:$(GLSRC)gssprintf.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsiparm4.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm4.h:$(GLSRC)scommon.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gsccolor.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsstype.h
$(GLSRC)gsiparm4.h:$(GLSRC)gsmemory.h
$(GLSRC)gsiparm4.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsiparm4.h:$(GLSRC)stdint_.h
$(GLSRC)gsiparm4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsiparm4.h:$(GLSRC)stdio_.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm4.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gssprintf.h
$(GLSRC)gsiparm4.h:$(GLSRC)std.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gstypes.h
$(GLSRC)gsiparm4.h:$(GLSRC)stdpre.h
$(GLSRC)gsiparm4.h:$(GLGEN)arch.h
-$(GLSRC)gsiparm4.h:$(GLSRC)gssprintf.h
$(GLSRC)gximage3.h:$(GLSRC)gsiparm3.h
$(GLSRC)gximage3.h:$(GLSRC)gxiparam.h
$(GLSRC)gximage3.h:$(GLSRC)gxdevcli.h
$(GLSRC)gximage3.h:$(GLSRC)gxtext.h
$(GLSRC)gximage3.h:$(GLSRC)gstext.h
+$(GLSRC)gximage3.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage3.h:$(GLSRC)gstparam.h
-$(GLSRC)gximage3.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcspace.h
$(GLSRC)gximage3.h:$(GLSRC)gsropt.h
$(GLSRC)gximage3.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximage3.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximage3.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximage3.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximage3.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximage3.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcvalue.h
$(GLSRC)gximage3.h:$(GLSRC)gsfont.h
$(GLSRC)gximage3.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximage3.h:$(GLSRC)gxpath.h
-$(GLSRC)gximage3.h:$(GLSRC)gspenum.h
-$(GLSRC)gximage3.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage3.h:$(GLSRC)gxftype.h
$(GLSRC)gximage3.h:$(GLSRC)gxfrac.h
-$(GLSRC)gximage3.h:$(GLSRC)gxdda.h
-$(GLSRC)gximage3.h:$(GLSRC)gslparam.h
-$(GLSRC)gximage3.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximage3.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximage3.h:$(GLSRC)gsrect.h
$(GLSRC)gximage3.h:$(GLSRC)gscms.h
-$(GLSRC)gximage3.h:$(GLSRC)gxftype.h
-$(GLSRC)gximage3.h:$(GLSRC)gsdevice.h
$(GLSRC)gximage3.h:$(GLSRC)gscspace.h
-$(GLSRC)gximage3.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage3.h:$(GLSRC)gxpath.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdevice.h
$(GLSRC)gximage3.h:$(GLSRC)gxarith.h
-$(GLSRC)gximage3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage3.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage3.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximage3.h:$(GLSRC)gsrect.h
+$(GLSRC)gximage3.h:$(GLSRC)gslparam.h
$(GLSRC)gximage3.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximage3.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage3.h:$(GLSRC)gscpm.h
$(GLSRC)gximage3.h:$(GLSRC)gxfixed.h
$(GLSRC)gximage3.h:$(GLSRC)gsrefct.h
-$(GLSRC)gximage3.h:$(GLSRC)gscpm.h
-$(GLSRC)gximage3.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximage3.h:$(GLSRC)gxhttile.h
-$(GLSRC)gximage3.h:$(GLSRC)gp.h
-$(GLSRC)gximage3.h:$(GLSRC)memento.h
$(GLSRC)gximage3.h:$(GLSRC)gsparam.h
-$(GLSRC)gximage3.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximage3.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximage3.h:$(GLSRC)srdline.h
+$(GLSRC)gximage3.h:$(GLSRC)gp.h
+$(GLSRC)gximage3.h:$(GLSRC)gsccolor.h
$(GLSRC)gximage3.h:$(GLSRC)gsstruct.h
$(GLSRC)gximage3.h:$(GLSRC)gxsync.h
-$(GLSRC)gximage3.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage3.h:$(GLSRC)srdline.h
$(GLSRC)gximage3.h:$(GLSRC)scommon.h
+$(GLSRC)gximage3.h:$(GLSRC)memento.h
+$(GLSRC)gximage3.h:$(GLSRC)gscsel.h
$(GLSRC)gximage3.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximage3.h:$(GLSRC)gsccolor.h
$(GLSRC)gximage3.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage3.h:$(GLSRC)stat_.h
+$(GLSRC)gximage3.h:$(GLSRC)gxtmap.h
$(GLSRC)gximage3.h:$(GLSRC)gsmemory.h
$(GLSRC)gximage3.h:$(GLSRC)gpsync.h
-$(GLSRC)gximage3.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximage3.h:$(GLSRC)memory_.h
+$(GLSRC)gximage3.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximage3.h:$(GLSRC)gslibctx.h
$(GLSRC)gximage3.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximage3.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximage3.h:$(GLSRC)stdio_.h
$(GLSRC)gximage3.h:$(GLSRC)gscompt.h
$(GLSRC)gximage3.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximage3.h:$(GLSRC)stdint_.h
$(GLSRC)gximage3.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage3.h:$(GLSRC)stdint_.h
+$(GLSRC)gximage3.h:$(GLSRC)gssprintf.h
$(GLSRC)gximage3.h:$(GLSRC)gsccode.h
-$(GLSRC)gximage3.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximage3.h:$(GLSRC)stdio_.h
-$(GLSRC)gximage3.h:$(GLSRC)gstypes.h
$(GLSRC)gximage3.h:$(GLSRC)std.h
+$(GLSRC)gximage3.h:$(GLSRC)gstypes.h
$(GLSRC)gximage3.h:$(GLSRC)stdpre.h
$(GLSRC)gximage3.h:$(GLGEN)arch.h
-$(GLSRC)gximage3.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdht.h
$(GLSRC)gxcldev.h:$(GLSRC)srlx.h
$(GLSRC)gxcldev.h:$(GLSRC)gxht.h
$(GLSRC)gxcldev.h:$(GLSRC)gxhttype.h
$(GLSRC)gxcldev.h:$(GLSRC)gxclist.h
$(GLSRC)gxcldev.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxcldev.h:$(GLSRC)gstrans.h
$(GLSRC)gxcldev.h:$(GLSRC)gxline.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstrans.h
$(GLSRC)gxcldev.h:$(GLSRC)gsht1.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcomp.h
$(GLSRC)gxcldev.h:$(GLSRC)math_.h
$(GLSRC)gxcldev.h:$(GLSRC)scfx.h
$(GLSRC)gxcldev.h:$(GLSRC)gdevp14.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxcldev.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxcldev.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsequivc.h
$(GLSRC)gxcldev.h:$(GLSRC)gxblend.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxcldev.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gxcldev.h:$(GLSRC)gxband.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxcldev.h:$(GLSRC)shc.h
$(GLSRC)gxcldev.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscindex.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcpath.h
$(GLSRC)gxcldev.h:$(GLSRC)gsht.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcpath.h
$(GLSRC)gxcldev.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxcldev.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscindex.h
$(GLSRC)gxcldev.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxcldev.h:$(GLSRC)gxtext.h
-$(GLSRC)gxcldev.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscie.h
$(GLSRC)gxcldev.h:$(GLSRC)gstext.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxcldev.h:$(GLSRC)gstparam.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscie.h
$(GLSRC)gxcldev.h:$(GLSRC)gxstate.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcspace.h
$(GLSRC)gxcldev.h:$(GLSRC)gsropt.h
$(GLSRC)gxcldev.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxctable.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxcldev.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcmap.h
$(GLSRC)gxcldev.h:$(GLSRC)strimpl.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxclio.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxcldev.h:$(GLSRC)gsfont.h
$(GLSRC)gxcldev.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxpath.h
-$(GLSRC)gxcldev.h:$(GLSRC)gspenum.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxftype.h
$(GLSRC)gxcldev.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxdda.h
-$(GLSRC)gxcldev.h:$(GLSRC)gslparam.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsrect.h
$(GLSRC)gxcldev.h:$(GLSRC)gscms.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxftype.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcldev.h:$(GLSRC)gscspace.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdevice.h
$(GLSRC)gxcldev.h:$(GLSRC)gxarith.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxcldev.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxcldev.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcldev.h:$(GLSRC)gslparam.h
$(GLSRC)gxcldev.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxcldev.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclio.h
$(GLSRC)gxcldev.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxcldev.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxcldev.h:$(GLSRC)gsio.h
-$(GLSRC)gxcldev.h:$(GLSRC)gp.h
-$(GLSRC)gxcldev.h:$(GLSRC)memento.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsparam.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxcldev.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxcldev.h:$(GLSRC)srdline.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gp.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcldev.h:$(GLSRC)gsstruct.h
$(GLSRC)gxcldev.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcldev.h:$(GLSRC)srdline.h
+$(GLSRC)gxcldev.h:$(GLSRC)scommon.h
+$(GLSRC)gxcldev.h:$(GLSRC)memento.h
$(GLSRC)gxcldev.h:$(GLSRC)vmsmath.h
$(GLSRC)gxcldev.h:$(GLSRC)gscsel.h
-$(GLSRC)gxcldev.h:$(GLSRC)scommon.h
$(GLSRC)gxcldev.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxcldev.h:$(GLSRC)gsfname.h
-$(GLSRC)gxcldev.h:$(GLSRC)gsccolor.h
$(GLSRC)gxcldev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcldev.h:$(GLSRC)stat_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxtmap.h
$(GLSRC)gxcldev.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcldev.h:$(GLSRC)gpsync.h
-$(GLSRC)gxcldev.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcldev.h:$(GLSRC)memory_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxcldev.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcldev.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcldev.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdio_.h
$(GLSRC)gxcldev.h:$(GLSRC)gscompt.h
$(GLSRC)gxcldev.h:$(GLSRC)gsbittab.h
$(GLSRC)gxcldev.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxcldev.h:$(GLSRC)stdint_.h
$(GLSRC)gxcldev.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcldev.h:$(GLSRC)gsccode.h
-$(GLSRC)gxcldev.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxcldev.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcldev.h:$(GLSRC)gstypes.h
$(GLSRC)gxcldev.h:$(GLSRC)std.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstypes.h
$(GLSRC)gxcldev.h:$(GLSRC)stdpre.h
$(GLSRC)gxcldev.h:$(GLGEN)arch.h
-$(GLSRC)gxcldev.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclpage.h:$(GLSRC)gxclist.h
$(GLSRC)gxclpage.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclpage.h:$(GLSRC)gstrans.h
$(GLSRC)gxclpage.h:$(GLSRC)gxline.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstrans.h
$(GLSRC)gxclpage.h:$(GLSRC)gsht1.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclpage.h:$(GLSRC)math_.h
$(GLSRC)gxclpage.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclpage.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxclpage.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclpage.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclpage.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gxclpage.h:$(GLSRC)gxband.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxclpage.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscindex.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclpage.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclpage.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpage.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscindex.h
$(GLSRC)gxclpage.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpage.h:$(GLSRC)gxtext.h
-$(GLSRC)gxclpage.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscie.h
$(GLSRC)gxclpage.h:$(GLSRC)gstext.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclpage.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscie.h
$(GLSRC)gxclpage.h:$(GLSRC)gxstate.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclpage.h:$(GLSRC)gsropt.h
$(GLSRC)gxclpage.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxclpage.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclpage.h:$(GLSRC)gsfont.h
$(GLSRC)gxclpage.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclpage.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpage.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclpage.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsrect.h
$(GLSRC)gxclpage.h:$(GLSRC)gscms.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclpage.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclpage.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpage.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclpage.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclpage.h:$(GLSRC)gslparam.h
$(GLSRC)gxclpage.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclpage.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclio.h
$(GLSRC)gxclpage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclpage.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpage.h:$(GLSRC)gsio.h
-$(GLSRC)gxclpage.h:$(GLSRC)gp.h
-$(GLSRC)gxclpage.h:$(GLSRC)memento.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxclpage.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclpage.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gp.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclpage.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclpage.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpage.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpage.h:$(GLSRC)scommon.h
+$(GLSRC)gxclpage.h:$(GLSRC)memento.h
$(GLSRC)gxclpage.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclpage.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclpage.h:$(GLSRC)scommon.h
$(GLSRC)gxclpage.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclpage.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclpage.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclpage.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpage.h:$(GLSRC)stat_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclpage.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpage.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclpage.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclpage.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclpage.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpage.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclpage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdio_.h
$(GLSRC)gxclpage.h:$(GLSRC)gscompt.h
$(GLSRC)gxclpage.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclpage.h:$(GLSRC)stdint_.h
$(GLSRC)gxclpage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclpage.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclpage.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclpage.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclpage.h:$(GLSRC)gstypes.h
$(GLSRC)gxclpage.h:$(GLSRC)std.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstypes.h
$(GLSRC)gxclpage.h:$(GLSRC)stdpre.h
$(GLSRC)gxclpage.h:$(GLGEN)arch.h
-$(GLSRC)gxclpage.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcldev.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdht.h
$(GLSRC)gxclpath.h:$(GLSRC)srlx.h
@@ -10985,266 +11108,268 @@ $(GLSRC)gxclpath.h:$(GLSRC)gxht.h
$(GLSRC)gxclpath.h:$(GLSRC)gxhttype.h
$(GLSRC)gxclpath.h:$(GLSRC)gxclist.h
$(GLSRC)gxclpath.h:$(GLSRC)gxgstate.h
-$(GLSRC)gxclpath.h:$(GLSRC)gstrans.h
$(GLSRC)gxclpath.h:$(GLSRC)gxline.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstrans.h
$(GLSRC)gxclpath.h:$(GLSRC)gsht1.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcomp.h
$(GLSRC)gxclpath.h:$(GLSRC)math_.h
$(GLSRC)gxclpath.h:$(GLSRC)scfx.h
$(GLSRC)gxclpath.h:$(GLSRC)gdevp14.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcolor2.h
$(GLSRC)gxclpath.h:$(GLSRC)gxpcolor.h
$(GLSRC)gxclpath.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsequivc.h
$(GLSRC)gxclpath.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdcolor.h
$(GLSRC)gxclpath.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gxclpath.h:$(GLSRC)gxband.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsequivc.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxclipsr.h
$(GLSRC)gxclpath.h:$(GLSRC)shc.h
$(GLSRC)gxclpath.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscindex.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevice.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclpath.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcpath.h
$(GLSRC)gxclpath.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpath.h:$(GLSRC)gxpcache.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscindex.h
$(GLSRC)gxclpath.h:$(GLSRC)gsptype1.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxclpath.h:$(GLSRC)gxtext.h
-$(GLSRC)gxclpath.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscie.h
$(GLSRC)gxclpath.h:$(GLSRC)gstext.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxclpath.h:$(GLSRC)gstparam.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscie.h
$(GLSRC)gxclpath.h:$(GLSRC)gxstate.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcspace.h
$(GLSRC)gxclpath.h:$(GLSRC)gsropt.h
$(GLSRC)gxclpath.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxctable.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmalloc.h
$(GLSRC)gxclpath.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcmap.h
$(GLSRC)gxclpath.h:$(GLSRC)strimpl.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxiclass.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxclio.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxclpath.h:$(GLSRC)gsfont.h
$(GLSRC)gxclpath.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxpath.h
-$(GLSRC)gxclpath.h:$(GLSRC)gspenum.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxftype.h
$(GLSRC)gxclpath.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxdda.h
-$(GLSRC)gxclpath.h:$(GLSRC)gslparam.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsrect.h
$(GLSRC)gxclpath.h:$(GLSRC)gscms.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxftype.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclpath.h:$(GLSRC)gscspace.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdevice.h
$(GLSRC)gxclpath.h:$(GLSRC)gxarith.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpath.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclpath.h:$(GLSRC)gslparam.h
$(GLSRC)gxclpath.h:$(GLSRC)gsxfont.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxfixed.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxclpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclio.h
$(GLSRC)gxclpath.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxclpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdsrc.h
$(GLSRC)gxclpath.h:$(GLSRC)gsio.h
-$(GLSRC)gxclpath.h:$(GLSRC)gp.h
-$(GLSRC)gxclpath.h:$(GLSRC)memento.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsparam.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxclpath.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxclpath.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gp.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclpath.h:$(GLSRC)gsstruct.h
$(GLSRC)gxclpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpath.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpath.h:$(GLSRC)scommon.h
+$(GLSRC)gxclpath.h:$(GLSRC)memento.h
$(GLSRC)gxclpath.h:$(GLSRC)vmsmath.h
$(GLSRC)gxclpath.h:$(GLSRC)gscsel.h
-$(GLSRC)gxclpath.h:$(GLSRC)scommon.h
$(GLSRC)gxclpath.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxclpath.h:$(GLSRC)gsfname.h
-$(GLSRC)gxclpath.h:$(GLSRC)gsccolor.h
$(GLSRC)gxclpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpath.h:$(GLSRC)stat_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxtmap.h
$(GLSRC)gxclpath.h:$(GLSRC)gsmemory.h
$(GLSRC)gxclpath.h:$(GLSRC)gpsync.h
-$(GLSRC)gxclpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclpath.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdio_.h
$(GLSRC)gxclpath.h:$(GLSRC)gscompt.h
$(GLSRC)gxclpath.h:$(GLSRC)gsbittab.h
$(GLSRC)gxclpath.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxclpath.h:$(GLSRC)stdint_.h
$(GLSRC)gxclpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclpath.h:$(GLSRC)gsccode.h
-$(GLSRC)gxclpath.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxclpath.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxclpath.h:$(GLSRC)std.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstypes.h
$(GLSRC)gxclpath.h:$(GLSRC)stdpre.h
$(GLSRC)gxclpath.h:$(GLGEN)arch.h
-$(GLSRC)gxclpath.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclmem.h:$(GLSRC)strimpl.h
$(GLSRC)gxclmem.h:$(GLSRC)gxclio.h
$(GLSRC)gxclmem.h:$(GLSRC)gp.h
-$(GLSRC)gxclmem.h:$(GLSRC)srdline.h
$(GLSRC)gxclmem.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclmem.h:$(GLSRC)srdline.h
$(GLSRC)gxclmem.h:$(GLSRC)scommon.h
$(GLSRC)gxclmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclmem.h:$(GLSRC)stat_.h
$(GLSRC)gxclmem.h:$(GLSRC)gsmemory.h
-$(GLSRC)gxclmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxclmem.h:$(GLSRC)gslibctx.h
$(GLSRC)gxclmem.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxclmem.h:$(GLSRC)stdint_.h
$(GLSRC)gxclmem.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxclmem.h:$(GLSRC)stdio_.h
-$(GLSRC)gxclmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gxclmem.h:$(GLSRC)std.h
+$(GLSRC)gxclmem.h:$(GLSRC)gstypes.h
$(GLSRC)gxclmem.h:$(GLSRC)stdpre.h
$(GLSRC)gxclmem.h:$(GLGEN)arch.h
-$(GLSRC)gxclmem.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevvec.h:$(GLSRC)gxgstate.h
-$(GLSRC)gdevvec.h:$(GLSRC)gstrans.h
$(GLSRC)gdevvec.h:$(GLSRC)gxline.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstrans.h
$(GLSRC)gdevvec.h:$(GLSRC)gsht1.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcomp.h
-$(GLSRC)gdevvec.h:$(GLSRC)math_.h
$(GLSRC)gdevvec.h:$(GLSRC)gdevbbox.h
+$(GLSRC)gdevvec.h:$(GLSRC)math_.h
$(GLSRC)gdevvec.h:$(GLSRC)gdevp14.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevvec.h:$(GLSRC)gxpcolor.h
$(GLSRC)gdevvec.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsequivc.h
$(GLSRC)gdevvec.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevvec.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gdevvec.h:$(GLSRC)stream.h
$(GLSRC)gdevvec.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsequivc.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxclipsr.h
$(GLSRC)gdevvec.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscindex.h
$(GLSRC)gdevvec.h:$(GLSRC)gxdevice.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevvec.h:$(GLSRC)gsht.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevvec.h:$(GLSRC)gxiparam.h
$(GLSRC)gdevvec.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevvec.h:$(GLSRC)gxpcache.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscindex.h
$(GLSRC)gdevvec.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevvec.h:$(GLSRC)gxtext.h
-$(GLSRC)gdevvec.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscie.h
$(GLSRC)gdevvec.h:$(GLSRC)gstext.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevvec.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscie.h
$(GLSRC)gdevvec.h:$(GLSRC)gxstate.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)stream.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevvec.h:$(GLSRC)gsropt.h
$(GLSRC)gdevvec.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxrplane.h
$(GLSRC)gdevvec.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevvec.h:$(GLSRC)gxiodev.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevvec.h:$(GLSRC)stat_.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhldevc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevvec.h:$(GLSRC)gsfont.h
$(GLSRC)gdevvec.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevvec.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxftype.h
$(GLSRC)gdevvec.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevvec.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxhldevc.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsrect.h
$(GLSRC)gdevvec.h:$(GLSRC)gscms.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevvec.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevvec.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevvec.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevvec.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevvec.h:$(GLSRC)gslparam.h
$(GLSRC)gdevvec.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevvec.h:$(GLSRC)gscpm.h
$(GLSRC)gdevvec.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevvec.h:$(GLSRC)gsio.h
-$(GLSRC)gdevvec.h:$(GLSRC)gp.h
-$(GLSRC)gdevvec.h:$(GLSRC)memento.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevvec.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevvec.h:$(GLSRC)srdline.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gp.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevvec.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevvec.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevvec.h:$(GLSRC)srdline.h
+$(GLSRC)gdevvec.h:$(GLSRC)scommon.h
+$(GLSRC)gdevvec.h:$(GLSRC)memento.h
$(GLSRC)gdevvec.h:$(GLSRC)vmsmath.h
$(GLSRC)gdevvec.h:$(GLSRC)gscsel.h
-$(GLSRC)gdevvec.h:$(GLSRC)scommon.h
$(GLSRC)gdevvec.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevvec.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevvec.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevvec.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevvec.h:$(GLSRC)stat_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevvec.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevvec.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevvec.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevvec.h:$(GLSRC)memory_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevvec.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevvec.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevvec.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdio_.h
$(GLSRC)gdevvec.h:$(GLSRC)gscompt.h
$(GLSRC)gdevvec.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevvec.h:$(GLSRC)stdint_.h
$(GLSRC)gdevvec.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevvec.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevvec.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevvec.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevvec.h:$(GLSRC)gstypes.h
$(GLSRC)gdevvec.h:$(GLSRC)std.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstypes.h
$(GLSRC)gdevvec.h:$(GLSRC)stdpre.h
$(GLSRC)gdevvec.h:$(GLGEN)arch.h
-$(GLSRC)gdevvec.h:$(GLSRC)gssprintf.h
$(GLSRC)gshtx.h:$(GLSRC)gsht1.h
$(GLSRC)gshtx.h:$(GLSRC)gsht.h
-$(GLSRC)gshtx.h:$(GLSRC)gxtmap.h
$(GLSRC)gshtx.h:$(GLSRC)gscspace.h
-$(GLSRC)gshtx.h:$(GLSRC)gsrefct.h
$(GLSRC)gshtx.h:$(GLSRC)gsiparam.h
-$(GLSRC)gshtx.h:$(GLSRC)memento.h
-$(GLSRC)gshtx.h:$(GLSRC)gsmatrix.h
$(GLSRC)gshtx.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gshtx.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gshtx.h:$(GLSRC)gsrefct.h
+$(GLSRC)gshtx.h:$(GLSRC)gsccolor.h
$(GLSRC)gshtx.h:$(GLSRC)scommon.h
+$(GLSRC)gshtx.h:$(GLSRC)memento.h
$(GLSRC)gshtx.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gshtx.h:$(GLSRC)gsccolor.h
$(GLSRC)gshtx.h:$(GLSRC)gsstype.h
+$(GLSRC)gshtx.h:$(GLSRC)gxtmap.h
$(GLSRC)gshtx.h:$(GLSRC)gsmemory.h
$(GLSRC)gshtx.h:$(GLSRC)gslibctx.h
-$(GLSRC)gshtx.h:$(GLSRC)stdint_.h
-$(GLSRC)gshtx.h:$(GLSRC)gsgstate.h
$(GLSRC)gshtx.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gshtx.h:$(GLSRC)stdio_.h
-$(GLSRC)gshtx.h:$(GLSRC)gstypes.h
+$(GLSRC)gshtx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gshtx.h:$(GLSRC)stdint_.h
+$(GLSRC)gshtx.h:$(GLSRC)gssprintf.h
$(GLSRC)gshtx.h:$(GLSRC)std.h
+$(GLSRC)gshtx.h:$(GLSRC)gstypes.h
$(GLSRC)gshtx.h:$(GLSRC)stdpre.h
$(GLSRC)gshtx.h:$(GLGEN)arch.h
-$(GLSRC)gshtx.h:$(GLSRC)gssprintf.h
$(GLSRC)gxttf.h:$(GLSRC)stdpre.h
$(GLSRC)ttfsfnt.h:$(GLSRC)tttypes.h
$(GLSRC)ttfsfnt.h:$(GLSRC)ttconfig.h
@@ -11258,40 +11383,40 @@ $(GLSRC)ttfinp.h:$(GLSRC)ttfoutl.h
$(GLSRC)ttfinp.h:$(GLSRC)malloc_.h
$(GLSRC)ttfinp.h:$(GLSRC)bobbin.h
$(GLSRC)ttfinp.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsuid.h
$(GLSRC)ttfinp.h:$(GLSRC)gsfont.h
-$(GLSRC)ttfinp.h:$(GLSRC)gxbcache.h
$(GLSRC)ttfinp.h:$(GLSRC)gxftype.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxbcache.h
$(GLSRC)ttfinp.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttfinp.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttfinp.h:$(GLSRC)memento.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttfinp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxfixed.h
$(GLSRC)ttfinp.h:$(GLSRC)scommon.h
+$(GLSRC)ttfinp.h:$(GLSRC)memento.h
$(GLSRC)ttfinp.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttfinp.h:$(GLSRC)gsstype.h
$(GLSRC)ttfinp.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfinp.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttfinp.h:$(GLSRC)stdint_.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsgstate.h
-$(GLSRC)ttfinp.h:$(GLSRC)gsccode.h
$(GLSRC)ttfinp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfinp.h:$(GLSRC)stdio_.h
-$(GLSRC)ttfinp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfinp.h:$(GLSRC)stdint_.h
+$(GLSRC)ttfinp.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsccode.h
$(GLSRC)ttfinp.h:$(GLSRC)std.h
+$(GLSRC)ttfinp.h:$(GLSRC)gstypes.h
$(GLSRC)ttfinp.h:$(GLSRC)stdpre.h
$(GLSRC)ttfinp.h:$(GLGEN)arch.h
-$(GLSRC)ttfinp.h:$(GLSRC)gssprintf.h
$(GLSRC)ttfmemd.h:$(GLSRC)gsstype.h
$(GLSRC)ttfmemd.h:$(GLSRC)gsmemory.h
$(GLSRC)ttfmemd.h:$(GLSRC)gslibctx.h
$(GLSRC)ttfmemd.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttfmemd.h:$(GLSRC)stdio_.h
-$(GLSRC)ttfmemd.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gssprintf.h
$(GLSRC)ttfmemd.h:$(GLSRC)std.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gstypes.h
$(GLSRC)ttfmemd.h:$(GLSRC)stdpre.h
$(GLSRC)ttfmemd.h:$(GLGEN)arch.h
-$(GLSRC)ttfmemd.h:$(GLSRC)gssprintf.h
$(GLSRC)tttype.h:$(GLSRC)std.h
$(GLSRC)tttype.h:$(GLSRC)stdpre.h
$(GLSRC)tttype.h:$(GLGEN)arch.h
@@ -11318,14 +11443,14 @@ $(GLSRC)ttmisc.h:$(GLSRC)gserrors.h
$(GLSRC)ttmisc.h:$(GLSRC)vmsmath.h
$(GLSRC)ttmisc.h:$(GLSRC)gsmemory.h
$(GLSRC)ttmisc.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttmisc.h:$(GLSRC)gsgstate.h
$(GLSRC)ttmisc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttmisc.h:$(GLSRC)stdio_.h
-$(GLSRC)ttmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttmisc.h:$(GLSRC)gssprintf.h
$(GLSRC)ttmisc.h:$(GLSRC)std.h
+$(GLSRC)ttmisc.h:$(GLSRC)gstypes.h
$(GLSRC)ttmisc.h:$(GLSRC)stdpre.h
$(GLSRC)ttmisc.h:$(GLGEN)arch.h
-$(GLSRC)ttmisc.h:$(GLSRC)gssprintf.h
$(GLSRC)tttables.h:$(GLSRC)tttypes.h
$(GLSRC)tttables.h:$(GLSRC)ttconfig.h
$(GLSRC)tttables.h:$(GLSRC)tttype.h
@@ -11344,30 +11469,30 @@ $(GLSRC)ttobjs.h:$(GLSRC)ttconfig.h
$(GLSRC)ttobjs.h:$(GLSRC)tttype.h
$(GLSRC)ttobjs.h:$(GLSRC)ttconf.h
$(GLSRC)ttobjs.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsuid.h
$(GLSRC)ttobjs.h:$(GLSRC)gsfont.h
-$(GLSRC)ttobjs.h:$(GLSRC)gxbcache.h
$(GLSRC)ttobjs.h:$(GLSRC)gxftype.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsuid.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxbcache.h
$(GLSRC)ttobjs.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttobjs.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttobjs.h:$(GLSRC)memento.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttobjs.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxfixed.h
$(GLSRC)ttobjs.h:$(GLSRC)scommon.h
+$(GLSRC)ttobjs.h:$(GLSRC)memento.h
$(GLSRC)ttobjs.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttobjs.h:$(GLSRC)gsstype.h
$(GLSRC)ttobjs.h:$(GLSRC)gsmemory.h
$(GLSRC)ttobjs.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttobjs.h:$(GLSRC)stdint_.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsgstate.h
-$(GLSRC)ttobjs.h:$(GLSRC)gsccode.h
$(GLSRC)ttobjs.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttobjs.h:$(GLSRC)stdio_.h
-$(GLSRC)ttobjs.h:$(GLSRC)gstypes.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttobjs.h:$(GLSRC)stdint_.h
+$(GLSRC)ttobjs.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsccode.h
$(GLSRC)ttobjs.h:$(GLSRC)std.h
+$(GLSRC)ttobjs.h:$(GLSRC)gstypes.h
$(GLSRC)ttobjs.h:$(GLSRC)stdpre.h
$(GLSRC)ttobjs.h:$(GLGEN)arch.h
-$(GLSRC)ttobjs.h:$(GLSRC)gssprintf.h
$(GLSRC)ttcalc.h:$(GLSRC)ttcommon.h
$(GLSRC)ttcalc.h:$(GLSRC)tttypes.h
$(GLSRC)ttcalc.h:$(GLSRC)ttconfig.h
@@ -11388,30 +11513,30 @@ $(GLSRC)ttinterp.h:$(GLSRC)ttconfig.h
$(GLSRC)ttinterp.h:$(GLSRC)tttype.h
$(GLSRC)ttinterp.h:$(GLSRC)ttconf.h
$(GLSRC)ttinterp.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsuid.h
$(GLSRC)ttinterp.h:$(GLSRC)gsfont.h
-$(GLSRC)ttinterp.h:$(GLSRC)gxbcache.h
$(GLSRC)ttinterp.h:$(GLSRC)gxftype.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxbcache.h
$(GLSRC)ttinterp.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttinterp.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttinterp.h:$(GLSRC)memento.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttinterp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxfixed.h
$(GLSRC)ttinterp.h:$(GLSRC)scommon.h
+$(GLSRC)ttinterp.h:$(GLSRC)memento.h
$(GLSRC)ttinterp.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttinterp.h:$(GLSRC)gsstype.h
$(GLSRC)ttinterp.h:$(GLSRC)gsmemory.h
$(GLSRC)ttinterp.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttinterp.h:$(GLSRC)stdint_.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsgstate.h
-$(GLSRC)ttinterp.h:$(GLSRC)gsccode.h
$(GLSRC)ttinterp.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttinterp.h:$(GLSRC)stdio_.h
-$(GLSRC)ttinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttinterp.h:$(GLSRC)stdint_.h
+$(GLSRC)ttinterp.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsccode.h
$(GLSRC)ttinterp.h:$(GLSRC)std.h
+$(GLSRC)ttinterp.h:$(GLSRC)gstypes.h
$(GLSRC)ttinterp.h:$(GLSRC)stdpre.h
$(GLSRC)ttinterp.h:$(GLGEN)arch.h
-$(GLSRC)ttinterp.h:$(GLSRC)gssprintf.h
$(GLSRC)ttload.h:$(GLSRC)ttobjs.h
$(GLSRC)ttload.h:$(GLSRC)ttfoutl.h
$(GLSRC)ttload.h:$(GLSRC)malloc_.h
@@ -11424,30 +11549,30 @@ $(GLSRC)ttload.h:$(GLSRC)ttconfig.h
$(GLSRC)ttload.h:$(GLSRC)tttype.h
$(GLSRC)ttload.h:$(GLSRC)ttconf.h
$(GLSRC)ttload.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttload.h:$(GLSRC)gsuid.h
$(GLSRC)ttload.h:$(GLSRC)gsfont.h
-$(GLSRC)ttload.h:$(GLSRC)gxbcache.h
$(GLSRC)ttload.h:$(GLSRC)gxftype.h
-$(GLSRC)ttload.h:$(GLSRC)gsuid.h
+$(GLSRC)ttload.h:$(GLSRC)gxbcache.h
$(GLSRC)ttload.h:$(GLSRC)gsxfont.h
-$(GLSRC)ttload.h:$(GLSRC)gxfixed.h
-$(GLSRC)ttload.h:$(GLSRC)memento.h
-$(GLSRC)ttload.h:$(GLSRC)gsmatrix.h
$(GLSRC)ttload.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttload.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttload.h:$(GLSRC)gxfixed.h
$(GLSRC)ttload.h:$(GLSRC)scommon.h
+$(GLSRC)ttload.h:$(GLSRC)memento.h
$(GLSRC)ttload.h:$(GLSRC)gsbitmap.h
$(GLSRC)ttload.h:$(GLSRC)gsstype.h
$(GLSRC)ttload.h:$(GLSRC)gsmemory.h
$(GLSRC)ttload.h:$(GLSRC)gslibctx.h
-$(GLSRC)ttload.h:$(GLSRC)stdint_.h
-$(GLSRC)ttload.h:$(GLSRC)gsgstate.h
-$(GLSRC)ttload.h:$(GLSRC)gsccode.h
$(GLSRC)ttload.h:$(GLSRC)gs_dll_call.h
$(GLSRC)ttload.h:$(GLSRC)stdio_.h
-$(GLSRC)ttload.h:$(GLSRC)gstypes.h
+$(GLSRC)ttload.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttload.h:$(GLSRC)stdint_.h
+$(GLSRC)ttload.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttload.h:$(GLSRC)gsccode.h
$(GLSRC)ttload.h:$(GLSRC)std.h
+$(GLSRC)ttload.h:$(GLSRC)gstypes.h
$(GLSRC)ttload.h:$(GLSRC)stdpre.h
$(GLSRC)ttload.h:$(GLGEN)arch.h
-$(GLSRC)ttload.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfont1.h
$(GLSRC)gxhintn.h:$(GLSRC)gstype1.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfont42.h
@@ -11461,58 +11586,58 @@ $(GLSRC)gxhintn.h:$(GLSRC)gsnotify.h
$(GLSRC)gxhintn.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxhintn.h:$(GLSRC)gstext.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsuid.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxhintn.h:$(GLSRC)gsfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxftype.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscms.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscspace.h
$(GLSRC)gxhintn.h:$(GLSRC)gxpath.h
-$(GLSRC)gxhintn.h:$(GLSRC)gspenum.h
-$(GLSRC)gxhintn.h:$(GLSRC)gslparam.h
$(GLSRC)gxhintn.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsrect.h
-$(GLSRC)gxhintn.h:$(GLSRC)gscms.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxftype.h
$(GLSRC)gxhintn.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxhintn.h:$(GLSRC)gscspace.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsuid.h
$(GLSRC)gxhintn.h:$(GLSRC)gxarith.h
+$(GLSRC)gxhintn.h:$(GLSRC)gspenum.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsrect.h
+$(GLSRC)gxhintn.h:$(GLSRC)gslparam.h
$(GLSRC)gxhintn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscpm.h
$(GLSRC)gxhintn.h:$(GLSRC)gxfixed.h
$(GLSRC)gxhintn.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxhintn.h:$(GLSRC)gscpm.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxhintn.h:$(GLSRC)memento.h
$(GLSRC)gxhintn.h:$(GLSRC)gsparam.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxhintn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsccolor.h
$(GLSRC)gxhintn.h:$(GLSRC)gxsync.h
$(GLSRC)gxhintn.h:$(GLSRC)scommon.h
+$(GLSRC)gxhintn.h:$(GLSRC)memento.h
$(GLSRC)gxhintn.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxhintn.h:$(GLSRC)gsccolor.h
$(GLSRC)gxhintn.h:$(GLSRC)gsstype.h
$(GLSRC)gxhintn.h:$(GLSRC)gsmemory.h
$(GLSRC)gxhintn.h:$(GLSRC)gpsync.h
$(GLSRC)gxhintn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxhintn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdio_.h
$(GLSRC)gxhintn.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxhintn.h:$(GLSRC)stdint_.h
$(GLSRC)gxhintn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdint_.h
+$(GLSRC)gxhintn.h:$(GLSRC)gssprintf.h
$(GLSRC)gxhintn.h:$(GLSRC)gsccode.h
-$(GLSRC)gxhintn.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxhintn.h:$(GLSRC)stdio_.h
-$(GLSRC)gxhintn.h:$(GLSRC)gstypes.h
$(GLSRC)gxhintn.h:$(GLSRC)std.h
+$(GLSRC)gxhintn.h:$(GLSRC)gstypes.h
$(GLSRC)gxhintn.h:$(GLSRC)stdpre.h
$(GLSRC)gxhintn.h:$(GLGEN)arch.h
-$(GLSRC)gxhintn.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcid.h:$(GLSRC)gsstype.h
$(GLSRC)gxcid.h:$(GLSRC)gsmemory.h
$(GLSRC)gxcid.h:$(GLSRC)gslibctx.h
$(GLSRC)gxcid.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxcid.h:$(GLSRC)stdio_.h
-$(GLSRC)gxcid.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcid.h:$(GLSRC)gssprintf.h
$(GLSRC)gxcid.h:$(GLSRC)std.h
+$(GLSRC)gxcid.h:$(GLSRC)gstypes.h
$(GLSRC)gxcid.h:$(GLSRC)stdpre.h
$(GLSRC)gxcid.h:$(GLGEN)arch.h
-$(GLSRC)gxcid.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcid.h:$(GLSRC)gstype1.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfont42.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfont.h
@@ -11526,62 +11651,62 @@ $(GLSRC)gxfcid.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfcid.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfcid.h:$(GLSRC)gstext.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfcid.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscms.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscspace.h
$(GLSRC)gxfcid.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfcid.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfcid.h:$(GLSRC)gslparam.h
$(GLSRC)gxfcid.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfcid.h:$(GLSRC)gscms.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxftype.h
$(GLSRC)gxfcid.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfcid.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcid.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfcid.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfcid.h:$(GLSRC)gslparam.h
$(GLSRC)gxfcid.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscpm.h
$(GLSRC)gxfcid.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfcid.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfcid.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfcid.h:$(GLSRC)memento.h
$(GLSRC)gxfcid.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfcid.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfcid.h:$(GLSRC)gxsync.h
$(GLSRC)gxfcid.h:$(GLSRC)scommon.h
+$(GLSRC)gxfcid.h:$(GLSRC)memento.h
$(GLSRC)gxfcid.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfcid.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfcid.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcid.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcid.h:$(GLSRC)gpsync.h
$(GLSRC)gxfcid.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfcid.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdio_.h
$(GLSRC)gxfcid.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfcid.h:$(GLSRC)stdint_.h
$(GLSRC)gxfcid.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcid.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcid.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfcid.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfcid.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcid.h:$(GLSRC)gstypes.h
$(GLSRC)gxfcid.h:$(GLSRC)std.h
+$(GLSRC)gxfcid.h:$(GLSRC)gstypes.h
$(GLSRC)gxfcid.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcid.h:$(GLGEN)arch.h
-$(GLSRC)gxfcid.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcmap.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcmap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcmap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcmap.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gstypes.h
$(GLSRC)gxfcmap.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcmap.h:$(GLGEN)arch.h
-$(GLSRC)gxfcmap.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gxfcmap.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gxcid.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsfcmap.h
@@ -11589,14 +11714,14 @@ $(GLSRC)gxfcmap1.h:$(GLSRC)gsuid.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsstype.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcmap1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfcmap1.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsccode.h
$(GLSRC)gxfcmap1.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gstypes.h
$(GLSRC)gxfcmap1.h:$(GLSRC)stdpre.h
$(GLSRC)gxfcmap1.h:$(GLGEN)arch.h
-$(GLSRC)gxfcmap1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfont0.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfcid.h
$(GLSRC)gxfont0c.h:$(GLSRC)gstype1.h
@@ -11612,48 +11737,48 @@ $(GLSRC)gxfont0c.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont0c.h:$(GLSRC)gstext.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscspace.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gslparam.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gscms.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxftype.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gslparam.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfont0c.h:$(GLSRC)memento.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxsync.h
$(GLSRC)gxfont0c.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont0c.h:$(GLSRC)memento.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfont0c.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont0c.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont0c.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont0c.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont0c.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont0c.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont0c.h:$(GLSRC)std.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont0c.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont0c.h:$(GLGEN)arch.h
-$(GLSRC)gxfont0c.h:$(GLSRC)gssprintf.h
$(GLSRC)gscrypt1.h:$(GLSRC)stdpre.h
$(GLSRC)gstype1.h:$(GLSRC)gspath.h
$(GLSRC)gstype1.h:$(GLSRC)gxmatrix.h
@@ -11661,21 +11786,21 @@ $(GLSRC)gstype1.h:$(GLSRC)gsgdata.h
$(GLSRC)gstype1.h:$(GLSRC)gsgcache.h
$(GLSRC)gstype1.h:$(GLSRC)gsfont.h
$(GLSRC)gstype1.h:$(GLSRC)gspenum.h
-$(GLSRC)gstype1.h:$(GLSRC)gxfixed.h
$(GLSRC)gstype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstype1.h:$(GLSRC)gxfixed.h
$(GLSRC)gstype1.h:$(GLSRC)scommon.h
$(GLSRC)gstype1.h:$(GLSRC)gsstype.h
$(GLSRC)gstype1.h:$(GLSRC)gsmemory.h
$(GLSRC)gstype1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstype1.h:$(GLSRC)stdint_.h
-$(GLSRC)gstype1.h:$(GLSRC)gsgstate.h
$(GLSRC)gstype1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstype1.h:$(GLSRC)stdio_.h
-$(GLSRC)gstype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gstype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gstype1.h:$(GLSRC)std.h
+$(GLSRC)gstype1.h:$(GLSRC)gstypes.h
$(GLSRC)gstype1.h:$(GLSRC)stdpre.h
$(GLSRC)gstype1.h:$(GLGEN)arch.h
-$(GLSRC)gstype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont1.h:$(GLSRC)gstype1.h
$(GLSRC)gxfont1.h:$(GLSRC)gxfont.h
$(GLSRC)gxfont1.h:$(GLSRC)gspath.h
@@ -11686,53 +11811,53 @@ $(GLSRC)gxfont1.h:$(GLSRC)gxfapi.h
$(GLSRC)gxfont1.h:$(GLSRC)gsnotify.h
$(GLSRC)gxfont1.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxfont1.h:$(GLSRC)gstext.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsfont.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxpath.h
-$(GLSRC)gxfont1.h:$(GLSRC)gspenum.h
-$(GLSRC)gxfont1.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsuid.h
$(GLSRC)gxfont1.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsrect.h
-$(GLSRC)gxfont1.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsfont.h
$(GLSRC)gxfont1.h:$(GLSRC)gxftype.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscms.h
$(GLSRC)gxfont1.h:$(GLSRC)gscspace.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsdevice.h
$(GLSRC)gxfont1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont1.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscpm.h
$(GLSRC)gxfont1.h:$(GLSRC)gxfixed.h
$(GLSRC)gxfont1.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxfont1.h:$(GLSRC)gscpm.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxfont1.h:$(GLSRC)memento.h
$(GLSRC)gxfont1.h:$(GLSRC)gsparam.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxfont1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont1.h:$(GLSRC)gxsync.h
$(GLSRC)gxfont1.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont1.h:$(GLSRC)memento.h
$(GLSRC)gxfont1.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxfont1.h:$(GLSRC)gsccolor.h
$(GLSRC)gxfont1.h:$(GLSRC)gsstype.h
$(GLSRC)gxfont1.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfont1.h:$(GLSRC)gpsync.h
$(GLSRC)gxfont1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdio_.h
$(GLSRC)gxfont1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxfont1.h:$(GLSRC)stdint_.h
$(GLSRC)gxfont1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfont1.h:$(GLSRC)gsccode.h
-$(GLSRC)gxfont1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxfont1.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfont1.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont1.h:$(GLSRC)std.h
+$(GLSRC)gxfont1.h:$(GLSRC)gstypes.h
$(GLSRC)gxfont1.h:$(GLSRC)stdpre.h
$(GLSRC)gxfont1.h:$(GLGEN)arch.h
-$(GLSRC)gxfont1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxtype1.h:$(GLSRC)gxhintn.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfont1.h
$(GLSRC)gxtype1.h:$(GLSRC)gzpath.h
$(GLSRC)gxtype1.h:$(GLSRC)gstype1.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfont42.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxfont.h
$(GLSRC)gxtype1.h:$(GLSRC)gscrypt1.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfont.h
$(GLSRC)gxtype1.h:$(GLSRC)gspath.h
$(GLSRC)gxtype1.h:$(GLSRC)gxmatrix.h
$(GLSRC)gxtype1.h:$(GLSRC)gsgdata.h
@@ -11742,759 +11867,760 @@ $(GLSRC)gxtype1.h:$(GLSRC)gsnotify.h
$(GLSRC)gxtype1.h:$(GLSRC)gsfcmap.h
$(GLSRC)gxtype1.h:$(GLSRC)gstext.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsuid.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsdcolor.h
$(GLSRC)gxtype1.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxftype.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscms.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscspace.h
$(GLSRC)gxtype1.h:$(GLSRC)gxpath.h
-$(GLSRC)gxtype1.h:$(GLSRC)gspenum.h
-$(GLSRC)gxtype1.h:$(GLSRC)gslparam.h
$(GLSRC)gxtype1.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsrect.h
-$(GLSRC)gxtype1.h:$(GLSRC)gscms.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxftype.h
$(GLSRC)gxtype1.h:$(GLSRC)gsdevice.h
-$(GLSRC)gxtype1.h:$(GLSRC)gscspace.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsuid.h
$(GLSRC)gxtype1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtype1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsrect.h
+$(GLSRC)gxtype1.h:$(GLSRC)gslparam.h
$(GLSRC)gxtype1.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscpm.h
$(GLSRC)gxtype1.h:$(GLSRC)gxfixed.h
$(GLSRC)gxtype1.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxtype1.h:$(GLSRC)gscpm.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxtype1.h:$(GLSRC)memento.h
$(GLSRC)gxtype1.h:$(GLSRC)gsparam.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxtype1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsccolor.h
$(GLSRC)gxtype1.h:$(GLSRC)gxsync.h
$(GLSRC)gxtype1.h:$(GLSRC)scommon.h
+$(GLSRC)gxtype1.h:$(GLSRC)memento.h
$(GLSRC)gxtype1.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxtype1.h:$(GLSRC)gsccolor.h
$(GLSRC)gxtype1.h:$(GLSRC)gsstype.h
$(GLSRC)gxtype1.h:$(GLSRC)gsmemory.h
$(GLSRC)gxtype1.h:$(GLSRC)gpsync.h
$(GLSRC)gxtype1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxtype1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdio_.h
$(GLSRC)gxtype1.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxtype1.h:$(GLSRC)stdint_.h
$(GLSRC)gxtype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxtype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gxtype1.h:$(GLSRC)gsccode.h
-$(GLSRC)gxtype1.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxtype1.h:$(GLSRC)stdio_.h
-$(GLSRC)gxtype1.h:$(GLSRC)gstypes.h
$(GLSRC)gxtype1.h:$(GLSRC)std.h
+$(GLSRC)gxtype1.h:$(GLSRC)gstypes.h
$(GLSRC)gxtype1.h:$(GLSRC)stdpre.h
$(GLSRC)gxtype1.h:$(GLGEN)arch.h
-$(GLSRC)gxtype1.h:$(GLSRC)gssprintf.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsdsrc.h:$(GLSRC)scommon.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsstype.h
$(GLSRC)gsdsrc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsdsrc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsdsrc.h:$(GLSRC)stdint_.h
$(GLSRC)gsdsrc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsdsrc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsdsrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdsrc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsdsrc.h:$(GLSRC)std.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gstypes.h
$(GLSRC)gsdsrc.h:$(GLSRC)stdpre.h
$(GLSRC)gsdsrc.h:$(GLGEN)arch.h
-$(GLSRC)gsdsrc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsfunc.h:$(GLSRC)memento.h
$(GLSRC)gsfunc.h:$(GLSRC)gsparam.h
$(GLSRC)gsfunc.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc.h:$(GLSRC)memento.h
$(GLSRC)gsfunc.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc.h:$(GLSRC)std.h
+$(GLSRC)gsfunc.h:$(GLSRC)gstypes.h
$(GLSRC)gsfunc.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc.h:$(GLGEN)arch.h
-$(GLSRC)gsfunc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsfunc0.h:$(GLSRC)memento.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsparam.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc0.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc0.h:$(GLSRC)memento.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc0.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc0.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc0.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc0.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc0.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfunc0.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc0.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc0.h:$(GLSRC)std.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gstypes.h
$(GLSRC)gsfunc0.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc0.h:$(GLGEN)arch.h
-$(GLSRC)gsfunc0.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfunc.h:$(GLSRC)gsfunc.h
$(GLSRC)gxfunc.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gxfunc.h:$(GLSRC)memento.h
$(GLSRC)gxfunc.h:$(GLSRC)gsparam.h
$(GLSRC)gxfunc.h:$(GLSRC)gsstruct.h
$(GLSRC)gxfunc.h:$(GLSRC)scommon.h
+$(GLSRC)gxfunc.h:$(GLSRC)memento.h
$(GLSRC)gxfunc.h:$(GLSRC)gsstype.h
$(GLSRC)gxfunc.h:$(GLSRC)gsmemory.h
$(GLSRC)gxfunc.h:$(GLSRC)gslibctx.h
-$(GLSRC)gxfunc.h:$(GLSRC)stdint_.h
$(GLSRC)gxfunc.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxfunc.h:$(GLSRC)stdio_.h
-$(GLSRC)gxfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfunc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfunc.h:$(GLSRC)gssprintf.h
$(GLSRC)gxfunc.h:$(GLSRC)std.h
+$(GLSRC)gxfunc.h:$(GLSRC)gstypes.h
$(GLSRC)gxfunc.h:$(GLSRC)stdpre.h
$(GLSRC)gxfunc.h:$(GLGEN)arch.h
-$(GLSRC)gxfunc.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsfunc4.h:$(GLSRC)memento.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsparam.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc4.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc4.h:$(GLSRC)memento.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc4.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc4.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc4.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc4.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc4.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfunc4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc4.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc4.h:$(GLSRC)std.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gstypes.h
$(GLSRC)gsfunc4.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc4.h:$(GLGEN)arch.h
-$(GLSRC)gsfunc4.h:$(GLSRC)gssprintf.h
$(GLSRC)gscpixel.h:$(GLSRC)gscspace.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsrefct.h
$(GLSRC)gscpixel.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscpixel.h:$(GLSRC)memento.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscpixel.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsccolor.h
$(GLSRC)gscpixel.h:$(GLSRC)scommon.h
+$(GLSRC)gscpixel.h:$(GLSRC)memento.h
$(GLSRC)gscpixel.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsccolor.h
$(GLSRC)gscpixel.h:$(GLSRC)gsstype.h
$(GLSRC)gscpixel.h:$(GLSRC)gsmemory.h
$(GLSRC)gscpixel.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscpixel.h:$(GLSRC)stdint_.h
-$(GLSRC)gscpixel.h:$(GLSRC)gsgstate.h
$(GLSRC)gscpixel.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscpixel.h:$(GLSRC)stdio_.h
-$(GLSRC)gscpixel.h:$(GLSRC)gstypes.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscpixel.h:$(GLSRC)stdint_.h
+$(GLSRC)gscpixel.h:$(GLSRC)gssprintf.h
$(GLSRC)gscpixel.h:$(GLSRC)std.h
+$(GLSRC)gscpixel.h:$(GLSRC)gstypes.h
$(GLSRC)gscpixel.h:$(GLSRC)stdpre.h
$(GLSRC)gscpixel.h:$(GLGEN)arch.h
-$(GLSRC)gscpixel.h:$(GLSRC)gssprintf.h
-$(GLSRC)gscms.h:$(GLSRC)gsdevice.h
$(GLSRC)gscms.h:$(GLSRC)gscspace.h
-$(GLSRC)gscms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscms.h:$(GLSRC)gsdevice.h
$(GLSRC)gscms.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscms.h:$(GLSRC)memento.h
-$(GLSRC)gscms.h:$(GLSRC)gsparam.h
-$(GLSRC)gscms.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscms.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscms.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscms.h:$(GLSRC)gsparam.h
+$(GLSRC)gscms.h:$(GLSRC)gsccolor.h
$(GLSRC)gscms.h:$(GLSRC)gxsync.h
$(GLSRC)gscms.h:$(GLSRC)scommon.h
+$(GLSRC)gscms.h:$(GLSRC)memento.h
$(GLSRC)gscms.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscms.h:$(GLSRC)gsccolor.h
$(GLSRC)gscms.h:$(GLSRC)gsstype.h
$(GLSRC)gscms.h:$(GLSRC)gsmemory.h
$(GLSRC)gscms.h:$(GLSRC)gpsync.h
$(GLSRC)gscms.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscms.h:$(GLSRC)stdint_.h
-$(GLSRC)gscms.h:$(GLSRC)gsgstate.h
$(GLSRC)gscms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscms.h:$(GLSRC)stdio_.h
-$(GLSRC)gscms.h:$(GLSRC)gstypes.h
+$(GLSRC)gscms.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscms.h:$(GLSRC)stdint_.h
+$(GLSRC)gscms.h:$(GLSRC)gssprintf.h
$(GLSRC)gscms.h:$(GLSRC)std.h
+$(GLSRC)gscms.h:$(GLSRC)gstypes.h
$(GLSRC)gscms.h:$(GLSRC)stdpre.h
$(GLSRC)gscms.h:$(GLGEN)arch.h
-$(GLSRC)gscms.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gscspace.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)memento.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gxsync.h
$(GLSRC)gsicc_cms.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cms.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cms.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_cms.h:$(GLSRC)std.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc_cms.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_cms.h:$(GLGEN)arch.h
-$(GLSRC)gsicc_cms.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsicc_cms.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gscspace.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)memento.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gxsync.h
$(GLSRC)gsicc_manage.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)memento.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_manage.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_manage.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_manage.h:$(GLSRC)std.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc_manage.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_manage.h:$(GLGEN)arch.h
-$(GLSRC)gsicc_manage.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gxcvalue.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gscspace.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)memento.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gxsync.h
$(GLSRC)gsicc_cache.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_cache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_cache.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_cache.h:$(GLSRC)std.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc_cache.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_cache.h:$(GLGEN)arch.h
-$(GLSRC)gsicc_cache.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscms.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscspace.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsdevice.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)memento.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsparam.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxsync.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)memento.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsccolor.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsstype.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmemory.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gpsync.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdint_.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsgstate.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdio_.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gssprintf.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)std.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gstypes.h
$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdpre.h
$(GLSRC)gsicc_profilecache.h:$(GLGEN)arch.h
-$(GLSRC)gsicc_profilecache.h:$(GLSRC)gssprintf.h
$(GLSRC)gstrap.h:$(GLSRC)gspath.h
$(GLSRC)gstrap.h:$(GLSRC)gxmatrix.h
$(GLSRC)gstrap.h:$(GLSRC)gspenum.h
+$(GLSRC)gstrap.h:$(GLSRC)gsmatrix.h
$(GLSRC)gstrap.h:$(GLSRC)gxfixed.h
$(GLSRC)gstrap.h:$(GLSRC)gsparam.h
-$(GLSRC)gstrap.h:$(GLSRC)gsmatrix.h
$(GLSRC)gstrap.h:$(GLSRC)scommon.h
$(GLSRC)gstrap.h:$(GLSRC)gsstype.h
$(GLSRC)gstrap.h:$(GLSRC)gsmemory.h
$(GLSRC)gstrap.h:$(GLSRC)gslibctx.h
-$(GLSRC)gstrap.h:$(GLSRC)stdint_.h
-$(GLSRC)gstrap.h:$(GLSRC)gsgstate.h
$(GLSRC)gstrap.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gstrap.h:$(GLSRC)stdio_.h
-$(GLSRC)gstrap.h:$(GLSRC)gstypes.h
+$(GLSRC)gstrap.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrap.h:$(GLSRC)stdint_.h
+$(GLSRC)gstrap.h:$(GLSRC)gssprintf.h
$(GLSRC)gstrap.h:$(GLSRC)std.h
+$(GLSRC)gstrap.h:$(GLSRC)gstypes.h
$(GLSRC)gstrap.h:$(GLSRC)stdpre.h
$(GLSRC)gstrap.h:$(GLGEN)arch.h
-$(GLSRC)gstrap.h:$(GLSRC)gssprintf.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsiparm3.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsipar3x.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsccolor.h
$(GLSRC)gsipar3x.h:$(GLSRC)scommon.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gsccolor.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsstype.h
$(GLSRC)gsipar3x.h:$(GLSRC)gsmemory.h
$(GLSRC)gsipar3x.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsipar3x.h:$(GLSRC)stdint_.h
$(GLSRC)gsipar3x.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsipar3x.h:$(GLSRC)stdio_.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gstypes.h
+$(GLSRC)gsipar3x.h:$(GLSRC)stdint_.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gssprintf.h
$(GLSRC)gsipar3x.h:$(GLSRC)std.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gstypes.h
$(GLSRC)gsipar3x.h:$(GLSRC)stdpre.h
$(GLSRC)gsipar3x.h:$(GLGEN)arch.h
-$(GLSRC)gsipar3x.h:$(GLSRC)gssprintf.h
$(GLSRC)gximag3x.h:$(GLSRC)gsipar3x.h
$(GLSRC)gximag3x.h:$(GLSRC)gsiparm3.h
$(GLSRC)gximag3x.h:$(GLSRC)gxiparam.h
$(GLSRC)gximag3x.h:$(GLSRC)gxdevcli.h
$(GLSRC)gximag3x.h:$(GLSRC)gxtext.h
$(GLSRC)gximag3x.h:$(GLSRC)gstext.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximag3x.h:$(GLSRC)gstparam.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcspace.h
$(GLSRC)gximag3x.h:$(GLSRC)gsropt.h
$(GLSRC)gximag3x.h:$(GLSRC)gsfunc.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsnamecl.h
$(GLSRC)gximag3x.h:$(GLSRC)gxrplane.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxcspace.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsuid.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsimage.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxdda.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcvalue.h
$(GLSRC)gximag3x.h:$(GLSRC)gsfont.h
$(GLSRC)gximag3x.h:$(GLSRC)gxfmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxpath.h
-$(GLSRC)gximag3x.h:$(GLSRC)gspenum.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxtmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsimage.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxftype.h
$(GLSRC)gximag3x.h:$(GLSRC)gxfrac.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxdda.h
-$(GLSRC)gximag3x.h:$(GLSRC)gslparam.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxbcache.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsrect.h
$(GLSRC)gximag3x.h:$(GLSRC)gscms.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxftype.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsdevice.h
$(GLSRC)gximag3x.h:$(GLSRC)gscspace.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsuid.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxpath.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdevice.h
$(GLSRC)gximag3x.h:$(GLSRC)gxarith.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximag3x.h:$(GLSRC)gspenum.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsrect.h
+$(GLSRC)gximag3x.h:$(GLSRC)gslparam.h
$(GLSRC)gximag3x.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscpm.h
$(GLSRC)gximag3x.h:$(GLSRC)gxfixed.h
$(GLSRC)gximag3x.h:$(GLSRC)gsrefct.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscpm.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsiparam.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxhttile.h
-$(GLSRC)gximag3x.h:$(GLSRC)gp.h
-$(GLSRC)gximag3x.h:$(GLSRC)memento.h
$(GLSRC)gximag3x.h:$(GLSRC)gsparam.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gximag3x.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)srdline.h
+$(GLSRC)gximag3x.h:$(GLSRC)gp.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsccolor.h
$(GLSRC)gximag3x.h:$(GLSRC)gsstruct.h
$(GLSRC)gximag3x.h:$(GLSRC)gxsync.h
-$(GLSRC)gximag3x.h:$(GLSRC)gscsel.h
+$(GLSRC)gximag3x.h:$(GLSRC)srdline.h
$(GLSRC)gximag3x.h:$(GLSRC)scommon.h
+$(GLSRC)gximag3x.h:$(GLSRC)memento.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscsel.h
$(GLSRC)gximag3x.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gximag3x.h:$(GLSRC)gsccolor.h
$(GLSRC)gximag3x.h:$(GLSRC)gsstype.h
+$(GLSRC)gximag3x.h:$(GLSRC)stat_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxtmap.h
$(GLSRC)gximag3x.h:$(GLSRC)gsmemory.h
$(GLSRC)gximag3x.h:$(GLSRC)gpsync.h
-$(GLSRC)gximag3x.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximag3x.h:$(GLSRC)memory_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gpgetenv.h
$(GLSRC)gximag3x.h:$(GLSRC)gslibctx.h
$(GLSRC)gximag3x.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximag3x.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdio_.h
$(GLSRC)gximag3x.h:$(GLSRC)gscompt.h
$(GLSRC)gximag3x.h:$(GLSRC)gxcindex.h
-$(GLSRC)gximag3x.h:$(GLSRC)stdint_.h
$(GLSRC)gximag3x.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdint_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gssprintf.h
$(GLSRC)gximag3x.h:$(GLSRC)gsccode.h
-$(GLSRC)gximag3x.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gximag3x.h:$(GLSRC)stdio_.h
-$(GLSRC)gximag3x.h:$(GLSRC)gstypes.h
$(GLSRC)gximag3x.h:$(GLSRC)std.h
+$(GLSRC)gximag3x.h:$(GLSRC)gstypes.h
$(GLSRC)gximag3x.h:$(GLSRC)stdpre.h
$(GLSRC)gximag3x.h:$(GLGEN)arch.h
-$(GLSRC)gximag3x.h:$(GLSRC)gssprintf.h
$(GLSRC)gxblend.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxblend.h:$(GLSRC)gxtext.h
$(GLSRC)gxblend.h:$(GLSRC)gstext.h
+$(GLSRC)gxblend.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxblend.h:$(GLSRC)gstparam.h
-$(GLSRC)gxblend.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcspace.h
$(GLSRC)gxblend.h:$(GLSRC)gsropt.h
$(GLSRC)gxblend.h:$(GLSRC)gsfunc.h
-$(GLSRC)gxblend.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxblend.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxblend.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxblend.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsuid.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gsimage.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxblend.h:$(GLSRC)gxdda.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxblend.h:$(GLSRC)gsfont.h
$(GLSRC)gxblend.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxblend.h:$(GLSRC)gxpath.h
-$(GLSRC)gxblend.h:$(GLSRC)gspenum.h
-$(GLSRC)gxblend.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gsimage.h
+$(GLSRC)gxblend.h:$(GLSRC)gxftype.h
$(GLSRC)gxblend.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxblend.h:$(GLSRC)gxdda.h
-$(GLSRC)gxblend.h:$(GLSRC)gslparam.h
-$(GLSRC)gxblend.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxblend.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxblend.h:$(GLSRC)gsrect.h
$(GLSRC)gxblend.h:$(GLSRC)gscms.h
-$(GLSRC)gxblend.h:$(GLSRC)gxftype.h
-$(GLSRC)gxblend.h:$(GLSRC)gsdevice.h
$(GLSRC)gxblend.h:$(GLSRC)gscspace.h
-$(GLSRC)gxblend.h:$(GLSRC)gsuid.h
+$(GLSRC)gxblend.h:$(GLSRC)gxpath.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdevice.h
$(GLSRC)gxblend.h:$(GLSRC)gxarith.h
-$(GLSRC)gxblend.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxblend.h:$(GLSRC)gspenum.h
+$(GLSRC)gxblend.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxblend.h:$(GLSRC)gsrect.h
+$(GLSRC)gxblend.h:$(GLSRC)gslparam.h
$(GLSRC)gxblend.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxblend.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxblend.h:$(GLSRC)gscpm.h
$(GLSRC)gxblend.h:$(GLSRC)gxfixed.h
$(GLSRC)gxblend.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxblend.h:$(GLSRC)gscpm.h
-$(GLSRC)gxblend.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxblend.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxblend.h:$(GLSRC)gp.h
-$(GLSRC)gxblend.h:$(GLSRC)memento.h
$(GLSRC)gxblend.h:$(GLSRC)gsparam.h
-$(GLSRC)gxblend.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxblend.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxblend.h:$(GLSRC)srdline.h
+$(GLSRC)gxblend.h:$(GLSRC)gp.h
+$(GLSRC)gxblend.h:$(GLSRC)gsccolor.h
$(GLSRC)gxblend.h:$(GLSRC)gsstruct.h
$(GLSRC)gxblend.h:$(GLSRC)gxsync.h
-$(GLSRC)gxblend.h:$(GLSRC)gscsel.h
+$(GLSRC)gxblend.h:$(GLSRC)srdline.h
$(GLSRC)gxblend.h:$(GLSRC)scommon.h
+$(GLSRC)gxblend.h:$(GLSRC)memento.h
+$(GLSRC)gxblend.h:$(GLSRC)gscsel.h
$(GLSRC)gxblend.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gxblend.h:$(GLSRC)gsccolor.h
$(GLSRC)gxblend.h:$(GLSRC)gsstype.h
+$(GLSRC)gxblend.h:$(GLSRC)stat_.h
+$(GLSRC)gxblend.h:$(GLSRC)gxtmap.h
$(GLSRC)gxblend.h:$(GLSRC)gsmemory.h
$(GLSRC)gxblend.h:$(GLSRC)gpsync.h
-$(GLSRC)gxblend.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxblend.h:$(GLSRC)memory_.h
+$(GLSRC)gxblend.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxblend.h:$(GLSRC)gslibctx.h
$(GLSRC)gxblend.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxblend.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxblend.h:$(GLSRC)stdio_.h
$(GLSRC)gxblend.h:$(GLSRC)gscompt.h
$(GLSRC)gxblend.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxblend.h:$(GLSRC)stdint_.h
$(GLSRC)gxblend.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxblend.h:$(GLSRC)stdint_.h
+$(GLSRC)gxblend.h:$(GLSRC)gssprintf.h
$(GLSRC)gxblend.h:$(GLSRC)gsccode.h
-$(GLSRC)gxblend.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxblend.h:$(GLSRC)stdio_.h
-$(GLSRC)gxblend.h:$(GLSRC)gstypes.h
$(GLSRC)gxblend.h:$(GLSRC)std.h
+$(GLSRC)gxblend.h:$(GLSRC)gstypes.h
$(GLSRC)gxblend.h:$(GLSRC)stdpre.h
$(GLSRC)gxblend.h:$(GLGEN)arch.h
-$(GLSRC)gxblend.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcolor2.h
$(GLSRC)gdevp14.h:$(GLSRC)gxpcolor.h
$(GLSRC)gdevp14.h:$(GLSRC)gdevdevn.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxblend.h
$(GLSRC)gdevp14.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdcolor.h
$(GLSRC)gdevp14.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscindex.h
$(GLSRC)gdevp14.h:$(GLSRC)gxdevice.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcpath.h
$(GLSRC)gdevp14.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevp14.h:$(GLSRC)gxpcache.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscindex.h
$(GLSRC)gdevp14.h:$(GLSRC)gsptype1.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxdevcli.h
$(GLSRC)gdevp14.h:$(GLSRC)gxtext.h
-$(GLSRC)gdevp14.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscie.h
$(GLSRC)gdevp14.h:$(GLSRC)gstext.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsnamecl.h
$(GLSRC)gdevp14.h:$(GLSRC)gstparam.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscie.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxcmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcspace.h
$(GLSRC)gdevp14.h:$(GLSRC)gsropt.h
$(GLSRC)gdevp14.h:$(GLSRC)gsfunc.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxctable.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmalloc.h
$(GLSRC)gdevp14.h:$(GLSRC)gxrplane.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxcspace.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxiclass.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcvalue.h
$(GLSRC)gdevp14.h:$(GLSRC)gsfont.h
$(GLSRC)gdevp14.h:$(GLSRC)gxfmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxpath.h
-$(GLSRC)gdevp14.h:$(GLSRC)gspenum.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxtmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxftype.h
$(GLSRC)gdevp14.h:$(GLSRC)gxfrac.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxdda.h
-$(GLSRC)gdevp14.h:$(GLSRC)gslparam.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxbcache.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsrect.h
$(GLSRC)gdevp14.h:$(GLSRC)gscms.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxftype.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevp14.h:$(GLSRC)gscspace.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdevice.h
$(GLSRC)gdevp14.h:$(GLSRC)gxarith.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevp14.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevp14.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevp14.h:$(GLSRC)gslparam.h
$(GLSRC)gdevp14.h:$(GLSRC)gsxfont.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxfixed.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsrefct.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscpm.h
$(GLSRC)gdevp14.h:$(GLSRC)gsiparam.h
-$(GLSRC)gdevp14.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdsrc.h
$(GLSRC)gdevp14.h:$(GLSRC)gsio.h
-$(GLSRC)gdevp14.h:$(GLSRC)gp.h
-$(GLSRC)gdevp14.h:$(GLSRC)memento.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsparam.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsmatrix.h
$(GLSRC)gdevp14.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gdevp14.h:$(GLSRC)srdline.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gp.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevp14.h:$(GLSRC)gsstruct.h
$(GLSRC)gdevp14.h:$(GLSRC)gxsync.h
-$(GLSRC)gdevp14.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevp14.h:$(GLSRC)srdline.h
$(GLSRC)gdevp14.h:$(GLSRC)scommon.h
+$(GLSRC)gdevp14.h:$(GLSRC)memento.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscsel.h
$(GLSRC)gdevp14.h:$(GLSRC)gsbitmap.h
$(GLSRC)gdevp14.h:$(GLSRC)gsfname.h
-$(GLSRC)gdevp14.h:$(GLSRC)gsccolor.h
$(GLSRC)gdevp14.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevp14.h:$(GLSRC)stat_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxtmap.h
$(GLSRC)gdevp14.h:$(GLSRC)gsmemory.h
$(GLSRC)gdevp14.h:$(GLSRC)gpsync.h
-$(GLSRC)gdevp14.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevp14.h:$(GLSRC)memory_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gpgetenv.h
$(GLSRC)gdevp14.h:$(GLSRC)gslibctx.h
$(GLSRC)gdevp14.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevp14.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdio_.h
$(GLSRC)gdevp14.h:$(GLSRC)gscompt.h
$(GLSRC)gdevp14.h:$(GLSRC)gxcindex.h
-$(GLSRC)gdevp14.h:$(GLSRC)stdint_.h
$(GLSRC)gdevp14.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gssprintf.h
$(GLSRC)gdevp14.h:$(GLSRC)gsccode.h
-$(GLSRC)gdevp14.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gdevp14.h:$(GLSRC)stdio_.h
-$(GLSRC)gdevp14.h:$(GLSRC)gstypes.h
$(GLSRC)gdevp14.h:$(GLSRC)std.h
+$(GLSRC)gdevp14.h:$(GLSRC)gstypes.h
$(GLSRC)gdevp14.h:$(GLSRC)stdpre.h
$(GLSRC)gdevp14.h:$(GLGEN)arch.h
-$(GLSRC)gdevp14.h:$(GLSRC)gssprintf.h
$(GLSRC)gscolor3.h:$(GLSRC)gsshade.h
$(GLSRC)gscolor3.h:$(GLSRC)gspath.h
$(GLSRC)gscolor3.h:$(GLSRC)gxmatrix.h
$(GLSRC)gscolor3.h:$(GLSRC)gscie.h
$(GLSRC)gscolor3.h:$(GLSRC)gsfunc.h
$(GLSRC)gscolor3.h:$(GLSRC)gxctable.h
-$(GLSRC)gscolor3.h:$(GLSRC)gspenum.h
$(GLSRC)gscolor3.h:$(GLSRC)gxfrac.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsdevice.h
$(GLSRC)gscolor3.h:$(GLSRC)gscspace.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscolor3.h:$(GLSRC)gspenum.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsiparam.h
$(GLSRC)gscolor3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsmatrix.h
$(GLSRC)gscolor3.h:$(GLSRC)gxfixed.h
$(GLSRC)gscolor3.h:$(GLSRC)gsrefct.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsiparam.h
-$(GLSRC)gscolor3.h:$(GLSRC)memento.h
$(GLSRC)gscolor3.h:$(GLSRC)gsparam.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gscolor3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsccolor.h
$(GLSRC)gscolor3.h:$(GLSRC)gsstruct.h
$(GLSRC)gscolor3.h:$(GLSRC)scommon.h
+$(GLSRC)gscolor3.h:$(GLSRC)memento.h
$(GLSRC)gscolor3.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsccolor.h
$(GLSRC)gscolor3.h:$(GLSRC)gsstype.h
$(GLSRC)gscolor3.h:$(GLSRC)gsmemory.h
$(GLSRC)gscolor3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gscolor3.h:$(GLSRC)stdint_.h
-$(GLSRC)gscolor3.h:$(GLSRC)gsgstate.h
$(GLSRC)gscolor3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gscolor3.h:$(GLSRC)stdio_.h
-$(GLSRC)gscolor3.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor3.h:$(GLSRC)stdint_.h
+$(GLSRC)gscolor3.h:$(GLSRC)gssprintf.h
$(GLSRC)gscolor3.h:$(GLSRC)std.h
+$(GLSRC)gscolor3.h:$(GLSRC)gstypes.h
$(GLSRC)gscolor3.h:$(GLSRC)stdpre.h
$(GLSRC)gscolor3.h:$(GLGEN)arch.h
-$(GLSRC)gscolor3.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsfunc.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsdsrc.h
-$(GLSRC)gsfunc3.h:$(GLSRC)memento.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsparam.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsstruct.h
$(GLSRC)gsfunc3.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc3.h:$(GLSRC)memento.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsstype.h
$(GLSRC)gsfunc3.h:$(GLSRC)gsmemory.h
$(GLSRC)gsfunc3.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsfunc3.h:$(GLSRC)stdint_.h
$(GLSRC)gsfunc3.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsfunc3.h:$(GLSRC)stdio_.h
-$(GLSRC)gsfunc3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc3.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gssprintf.h
$(GLSRC)gsfunc3.h:$(GLSRC)std.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gstypes.h
$(GLSRC)gsfunc3.h:$(GLSRC)stdpre.h
$(GLSRC)gsfunc3.h:$(GLGEN)arch.h
-$(GLSRC)gsfunc3.h:$(GLSRC)gssprintf.h
$(GLSRC)gsshade.h:$(GLSRC)gspath.h
$(GLSRC)gsshade.h:$(GLSRC)gxmatrix.h
$(GLSRC)gsshade.h:$(GLSRC)gscie.h
$(GLSRC)gsshade.h:$(GLSRC)gsfunc.h
$(GLSRC)gsshade.h:$(GLSRC)gxctable.h
-$(GLSRC)gsshade.h:$(GLSRC)gspenum.h
$(GLSRC)gsshade.h:$(GLSRC)gxfrac.h
-$(GLSRC)gsshade.h:$(GLSRC)gsdevice.h
$(GLSRC)gsshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gsshade.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsshade.h:$(GLSRC)gspenum.h
+$(GLSRC)gsshade.h:$(GLSRC)gsiparam.h
$(GLSRC)gsshade.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsshade.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsshade.h:$(GLSRC)gsmatrix.h
$(GLSRC)gsshade.h:$(GLSRC)gxfixed.h
$(GLSRC)gsshade.h:$(GLSRC)gsrefct.h
-$(GLSRC)gsshade.h:$(GLSRC)gsiparam.h
-$(GLSRC)gsshade.h:$(GLSRC)memento.h
$(GLSRC)gsshade.h:$(GLSRC)gsparam.h
-$(GLSRC)gsshade.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gsshade.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsshade.h:$(GLSRC)gsccolor.h
$(GLSRC)gsshade.h:$(GLSRC)gsstruct.h
$(GLSRC)gsshade.h:$(GLSRC)scommon.h
+$(GLSRC)gsshade.h:$(GLSRC)memento.h
$(GLSRC)gsshade.h:$(GLSRC)gsbitmap.h
-$(GLSRC)gsshade.h:$(GLSRC)gsccolor.h
$(GLSRC)gsshade.h:$(GLSRC)gsstype.h
$(GLSRC)gsshade.h:$(GLSRC)gsmemory.h
$(GLSRC)gsshade.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsshade.h:$(GLSRC)stdint_.h
-$(GLSRC)gsshade.h:$(GLSRC)gsgstate.h
$(GLSRC)gsshade.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsshade.h:$(GLSRC)stdio_.h
-$(GLSRC)gsshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gsshade.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsshade.h:$(GLSRC)stdint_.h
+$(GLSRC)gsshade.h:$(GLSRC)gssprintf.h
$(GLSRC)gsshade.h:$(GLSRC)std.h
+$(GLSRC)gsshade.h:$(GLSRC)gstypes.h
$(GLSRC)gsshade.h:$(GLSRC)stdpre.h
$(GLSRC)gsshade.h:$(GLGEN)arch.h
-$(GLSRC)gsshade.h:$(GLSRC)gssprintf.h
$(GLSRC)gxshade.h:$(GLSRC)gsshade.h
$(GLSRC)gxshade.h:$(GLSRC)gspath.h
$(GLSRC)gxshade.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxshade.h:$(GLSRC)stream.h
$(GLSRC)gxshade.h:$(GLSRC)gscie.h
+$(GLSRC)gxshade.h:$(GLSRC)stream.h
$(GLSRC)gxshade.h:$(GLSRC)gsfunc.h
$(GLSRC)gxshade.h:$(GLSRC)gxctable.h
$(GLSRC)gxshade.h:$(GLSRC)gxiodev.h
-$(GLSRC)gxshade.h:$(GLSRC)stat_.h
-$(GLSRC)gxshade.h:$(GLSRC)gspenum.h
-$(GLSRC)gxshade.h:$(GLSRC)gxfrac.h
$(GLSRC)gxshade.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxshade.h:$(GLSRC)gxfrac.h
$(GLSRC)gxshade.h:$(GLSRC)gscms.h
-$(GLSRC)gxshade.h:$(GLSRC)gsdevice.h
$(GLSRC)gxshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gxshade.h:$(GLSRC)gsdevice.h
$(GLSRC)gxshade.h:$(GLSRC)gxarith.h
+$(GLSRC)gxshade.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxshade.h:$(GLSRC)gsiparam.h
$(GLSRC)gxshade.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxshade.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxshade.h:$(GLSRC)gsmatrix.h
$(GLSRC)gxshade.h:$(GLSRC)gxfixed.h
$(GLSRC)gxshade.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxshade.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxshade.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxshade.h:$(GLSRC)gp.h
-$(GLSRC)gxshade.h:$(GLSRC)memento.h
$(GLSRC)gxshade.h:$(GLSRC)gsparam.h
-$(GLSRC)gxshade.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxshade.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxshade.h:$(GLSRC)srdline.h
+$(GLSRC)gxshade.h:$(GLSRC)gp.h
+$(GLSRC)gxshade.h:$(GLSRC)gsccolor.h
$(GLSRC)gxshade.h:$(GLSRC)gsstruct.h
$(GLSRC)gxshade.h:$(GLSRC)gxsync.h
+$(GLSRC)gxshade.h:$(GLSRC)srdline.h
$(GLSRC)gxshade.h:$(GLSRC)scommon.h
+$(GLSRC)gxshade.h:$(GLSRC)memento.h
$(GLSRC)gxshade.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxshade.h:$(GLSRC)gsfname.h
-$(GLSRC)gxshade.h:$(GLSRC)gsccolor.h
$(GLSRC)gxshade.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade.h:$(GLSRC)stat_.h
$(GLSRC)gxshade.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade.h:$(GLSRC)gpsync.h
-$(GLSRC)gxshade.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxshade.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxshade.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade.h:$(GLSRC)gscdefs.h
-$(GLSRC)gxshade.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxshade.h:$(GLSRC)stdint_.h
-$(GLSRC)gxshade.h:$(GLSRC)gsgstate.h
$(GLSRC)gxshade.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gxshade.h:$(GLSRC)stdio_.h
-$(GLSRC)gxshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gxshade.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxshade.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade.h:$(GLSRC)stdint_.h
+$(GLSRC)gxshade.h:$(GLSRC)gssprintf.h
$(GLSRC)gxshade.h:$(GLSRC)std.h
+$(GLSRC)gxshade.h:$(GLSRC)gstypes.h
$(GLSRC)gxshade.h:$(GLSRC)stdpre.h
$(GLSRC)gxshade.h:$(GLGEN)arch.h
-$(GLSRC)gxshade.h:$(GLSRC)gssprintf.h
$(GLSRC)gxshade4.h:$(GLSRC)gxshade.h
$(GLSRC)gxshade4.h:$(GLSRC)gsshade.h
$(GLSRC)gxshade4.h:$(GLSRC)gscicach.h
$(GLSRC)gxshade4.h:$(GLSRC)gspath.h
$(GLSRC)gxshade4.h:$(GLSRC)gxmatrix.h
-$(GLSRC)gxshade4.h:$(GLSRC)stream.h
$(GLSRC)gxshade4.h:$(GLSRC)gxdevcli.h
$(GLSRC)gxshade4.h:$(GLSRC)gxtext.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscie.h
$(GLSRC)gxshade4.h:$(GLSRC)gstext.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxshade4.h:$(GLSRC)gstparam.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscie.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)stream.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcspace.h
$(GLSRC)gxshade4.h:$(GLSRC)gsropt.h
$(GLSRC)gxshade4.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxrplane.h
$(GLSRC)gxshade4.h:$(GLSRC)gxctable.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsnamecl.h
$(GLSRC)gxshade4.h:$(GLSRC)gxiodev.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxrplane.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxcspace.h
-$(GLSRC)gxshade4.h:$(GLSRC)stat_.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsuid.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsimage.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxdda.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcvalue.h
$(GLSRC)gxshade4.h:$(GLSRC)gsfont.h
$(GLSRC)gxshade4.h:$(GLSRC)gxfmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxpath.h
-$(GLSRC)gxshade4.h:$(GLSRC)gspenum.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxtmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsimage.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxftype.h
$(GLSRC)gxshade4.h:$(GLSRC)gxfrac.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxdda.h
-$(GLSRC)gxshade4.h:$(GLSRC)gslparam.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxbcache.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsrect.h
$(GLSRC)gxshade4.h:$(GLSRC)gscms.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxftype.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsdevice.h
$(GLSRC)gxshade4.h:$(GLSRC)gscspace.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsuid.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxpath.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdevice.h
$(GLSRC)gxshade4.h:$(GLSRC)gxarith.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxshade4.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsrect.h
+$(GLSRC)gxshade4.h:$(GLSRC)gslparam.h
$(GLSRC)gxshade4.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscpm.h
$(GLSRC)gxshade4.h:$(GLSRC)gxfixed.h
$(GLSRC)gxshade4.h:$(GLSRC)gsrefct.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscpm.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsiparam.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxhttile.h
-$(GLSRC)gxshade4.h:$(GLSRC)gp.h
-$(GLSRC)gxshade4.h:$(GLSRC)memento.h
$(GLSRC)gxshade4.h:$(GLSRC)gsparam.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsmatrix.h
-$(GLSRC)gxshade4.h:$(GLSRC)gxbitmap.h
-$(GLSRC)gxshade4.h:$(GLSRC)srdline.h
+$(GLSRC)gxshade4.h:$(GLSRC)gp.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsccolor.h
$(GLSRC)gxshade4.h:$(GLSRC)gsstruct.h
$(GLSRC)gxshade4.h:$(GLSRC)gxsync.h
-$(GLSRC)gxshade4.h:$(GLSRC)gscsel.h
+$(GLSRC)gxshade4.h:$(GLSRC)srdline.h
$(GLSRC)gxshade4.h:$(GLSRC)scommon.h
+$(GLSRC)gxshade4.h:$(GLSRC)memento.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscsel.h
$(GLSRC)gxshade4.h:$(GLSRC)gsbitmap.h
$(GLSRC)gxshade4.h:$(GLSRC)gsfname.h
-$(GLSRC)gxshade4.h:$(GLSRC)gsccolor.h
$(GLSRC)gxshade4.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade4.h:$(GLSRC)stat_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxtmap.h
$(GLSRC)gxshade4.h:$(GLSRC)gsmemory.h
$(GLSRC)gxshade4.h:$(GLSRC)gpsync.h
-$(GLSRC)gxshade4.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxshade4.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gpgetenv.h
$(GLSRC)gxshade4.h:$(GLSRC)gslibctx.h
$(GLSRC)gxshade4.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdio_.h
$(GLSRC)gxshade4.h:$(GLSRC)gscompt.h
$(GLSRC)gxshade4.h:$(GLSRC)gxcindex.h
-$(GLSRC)gxshade4.h:$(GLSRC)stdint_.h
$(GLSRC)gxshade4.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdint_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gssprintf.h
$(GLSRC)gxshade4.h:$(GLSRC)gsccode.h
-$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxshade4.h:$(GLSRC)stdio_.h
-$(GLSRC)gxshade4.h:$(GLSRC)gstypes.h
$(GLSRC)gxshade4.h:$(GLSRC)std.h
+$(GLSRC)gxshade4.h:$(GLSRC)gstypes.h
$(GLSRC)gxshade4.h:$(GLSRC)stdpre.h
$(GLSRC)gxshade4.h:$(GLGEN)arch.h
-$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gxshade4.h:$(GLSRC)gssprintf.h
-$(GLSRC)gsmd5.h:$(GLSRC)memory_.h
diff --git a/base/memento.c b/base/memento.c
index f1b938f9..50eed104 100644
--- a/base/memento.c
+++ b/base/memento.c
@@ -45,10 +45,13 @@ int atexit(void (*)(void));
#ifndef _MSC_VER
#include <stdint.h>
#include <limits.h>
+#include <unistd.h>
#endif
+#include <errno.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <string.h>
#ifdef __ANDROID__
#define MEMENTO_ANDROID
@@ -59,9 +62,11 @@ int atexit(void (*)(void));
#ifdef _MSC_VER
#define FMTZ "%llu"
#define FMTZ_CAST _int64
+#define FMTP "0x%p"
#else
#define FMTZ "%zu"
#define FMTZ_CAST size_t
+#define FMTP "%p"
#endif
#define UB(x) ((intptr_t)((x) & 0xFF))
@@ -251,7 +256,8 @@ enum {
Memento_Flag_BreakOnFree = 4,
Memento_Flag_BreakOnRealloc = 8,
Memento_Flag_Freed = 16,
- Memento_Flag_KnownLeak = 32
+ Memento_Flag_KnownLeak = 32,
+ Memento_Flag_Reported = 64
};
enum {
@@ -397,6 +403,11 @@ static void Memento_initMutex(Memento_mutex *m)
#endif
#endif
+typedef struct {
+ int begin;
+ int end;
+} Memento_range;
+
/* And our global structure */
static struct {
int inited;
@@ -427,6 +438,9 @@ static struct {
size_t numFrees;
size_t numReallocs;
Memento_mutex mutex;
+ Memento_range *squeezes;
+ int squeezes_num;
+ int squeezes_pos;
} memento;
#define MEMENTO_EXTRASIZE (sizeof(Memento_BlkHeader) + Memento_PostSize)
@@ -452,6 +466,7 @@ extern void backtrace_symbols_fd(void **, size_t, int);
extern char **backtrace_symbols(void **, size_t);
#define MEMENTO_BACKTRACE_MAX 256
+static void (*print_stack_value)(void *address);
/* Libbacktrace gubbins - relies on us having libdl to load the .so */
#ifdef HAVE_LIBDL
@@ -489,7 +504,6 @@ static backtrace_create_state_type backtrace_create_state;
static backtrace_pcinfo_type backtrace_pcinfo;
static struct backtrace_state *my_backtrace_state;
static void *libbt;
-static void (*print_stack_value)(void *address);
static char backtrace_exe[4096];
static void *current_addr;
@@ -535,7 +549,30 @@ static void print_stack_libbt(void *addr)
static void print_stack_libbt_failed(void *addr)
{
- char **strings = backtrace_symbols(&addr, 1);
+ char **strings;
+#if 0
+ /* Let's use a hack from Julian Smith to call gdb to extract the information */
+ /* Disabled for now, as I can't make this work. */
+ static char command[1024];
+ int e;
+ static int gdb_invocation_failed = 0;
+
+ if (gdb_invocation_failed == 0)
+ {
+ snprintf(command, sizeof(command),
+ //"gdb -q --batch -p=%i -ex 'info line *%p' -ex quit 2>/dev/null",
+ "gdb -q --batch -p=%i -ex 'info line *%p' -ex quit 2>/dev/null| egrep -v '(Thread debugging using)|(Using host libthread_db library)|(A debugging session is active)|(will be detached)|(Quit anyway)|(No such file or directory)|(^0x)|(^$)'",
+ getpid(), addr);
+ printf("%s\n", command);
+ e = system(command);
+ if (e == 0)
+ return; /* That'll do! */
+ gdb_invocation_failed = 1; /* If it's failed once, it'll probably keep failing. */
+ }
+#endif
+
+ /* We couldn't even get gdb! Make do. */
+ strings = backtrace_symbols(&addr, 1);
if (strings == NULL || strings[0] == NULL)
{
@@ -553,6 +590,12 @@ static void print_stack_libbt_failed(void *addr)
static int init_libbt(void)
{
+ static int libbt_inited = 0;
+
+ if (libbt_inited)
+ return 0;
+ libbt_inited = 1;
+
libbt = dlopen("libbacktrace.so", RTLD_LAZY);
if (libbt == NULL)
libbt = dlopen("/opt/lib/libbacktrace.so", RTLD_LAZY);
@@ -588,6 +631,9 @@ static int init_libbt(void)
return 1;
fail:
+ fprintf(stderr,
+ "MEMENTO: libbacktrace.so failed to load; backtraces will be sparse.\n"
+ "MEMENTO: See memento.h for how to rectify this.\n");
libbt = NULL;
backtrace_create_state = NULL;
backtrace_syminfo = NULL;
@@ -602,7 +648,7 @@ static void print_stack_default(void *addr)
if (strings == NULL || strings[0] == NULL)
{
- fprintf(stderr, " [0x%p]\n", addr);
+ fprintf(stderr, " ["FMTP"]\n", addr);
}
#ifdef HAVE_LIBDL
else if (strchr(strings[0], ':') == NULL)
@@ -614,8 +660,8 @@ static void print_stack_default(void *addr)
{
memcpy(backtrace_exe, strings[0], s - strings[0]);
backtrace_exe[s-strings[0]] = 0;
- if (init_libbt())
- print_stack_value(addr);
+ init_libbt();
+ print_stack_value(addr);
}
}
#endif
@@ -846,12 +892,12 @@ static void Memento_showStacktrace(void **stack, int numberOfFrames)
const char *sym = info.dli_sname ? info.dli_sname : "<unknown>";
char *demangled = __cxa_demangle(sym, NULL, 0, &status);
int offset = stack[i] - info.dli_saddr;
- fprintf(stderr, " [%p]%s(+0x%x)\n", stack[i], demangled && status == 0 ? demangled : sym, offset);
+ fprintf(stderr, " ["FMTP"]%s(+0x%x)\n", stack[i], demangled && status == 0 ? demangled : sym, offset);
free(demangled);
}
else
{
- fprintf(stderr, " [%p]\n", stack[i]);
+ fprintf(stderr, " ["FMTP"]\n", stack[i]);
}
}
}
@@ -1102,7 +1148,7 @@ static int Memento_Internal_checkFreedBlock(Memento_BlkHeader *b, void *arg)
goto mismatch4;
p += 4;
i -= 4;
- } while (i > 0);
+ } while (i > 0);
i += 4;
}
if (i & 2) {
@@ -1259,7 +1305,7 @@ static int showBlock(Memento_BlkHeader *b, int space)
{
int seq;
VALGRIND_MAKE_MEM_DEFINED(b, sizeof(Memento_BlkHeader));
- fprintf(stderr, "0x%p:(size=" FMTZ ",num=%d)",
+ fprintf(stderr, FMTP":(size=" FMTZ ",num=%d)",
MEMBLK_TOBLK(b), (FMTZ_CAST)b->rawsize, b->sequence);
if (b->label)
fprintf(stderr, "%c(%s)", space, b->label);
@@ -1376,10 +1422,11 @@ int Memento_listBlocksNested(void)
for (b = memento.used.head; b; b = b->next) {
char *p = MEMBLK_TOBLK(b);
int end = (b->rawsize < MEMENTO_PTRSEARCH ? b->rawsize : MEMENTO_PTRSEARCH);
+ VALGRIND_MAKE_MEM_DEFINED(p, end);
+ end -= sizeof(void *)-1;
for (i = MEMENTO_SEARCH_SKIP; i < end; i += sizeof(void *)) {
void *q = *(void **)(&p[i]);
void **r;
-
/* Do trivial checks on pointer */
if ((mask & (intptr_t)q) != mask || q < minptr || q > maxptr)
continue;
@@ -1400,7 +1447,7 @@ int Memento_listBlocksNested(void)
/* Not interested in pointers to ourself! */
if (child == b)
- continue;
+ continue;
/* We're also assuming acyclicness here. If this is one of
* our parents, ignore it. */
@@ -1505,7 +1552,7 @@ static int showInfo(Memento_BlkHeader *b, void *arg)
{
Memento_BlkDetails *details;
- fprintf(stderr, "0x%p:(size="FMTZ",num=%d)",
+ fprintf(stderr, FMTP":(size="FMTZ",num=%d)",
MEMBLK_TOBLK(b), (FMTZ_CAST)b->rawsize, b->sequence);
if (b->label)
fprintf(stderr, " (%s)", b->label);
@@ -1537,9 +1584,15 @@ static int Memento_nonLeakBlocksLeaked(void)
Memento_BlkHeader *blk = memento.used.head;
while (blk)
{
- if ((blk->flags & Memento_Flag_KnownLeak) == 0)
+ Memento_BlkHeader *next;
+ int leaked;
+ VALGRIND_MAKE_MEM_DEFINED(blk, sizeof(*blk));
+ leaked = ((blk->flags & Memento_Flag_KnownLeak) == 0);
+ next = blk->next;
+ VALGRIND_MAKE_MEM_DEFINED(blk, sizeof(*blk));
+ if (leaked)
return 1;
- blk = blk->next;
+ blk = next;
}
return 0;
}
@@ -1579,6 +1632,184 @@ void Memento_fin(void)
}
}
+/* Reads number from <text> using strtol().
+
+Params:
+ text:
+ text to read.
+ out:
+ pointer to output value.
+ relative:
+ *relative set to 1 if <text> starts with '+' or '-', else set to 0.
+ end:
+ *end is set to point to next unread character after number.
+
+Returns 0 on success, else -1.
+*/
+static int read_number(const char *text, int *out, int *relative, char **end)
+{
+ if (text[0] == '+' || text[0] == '-') {
+ *relative = 1;
+ }
+ else {
+ *relative = 0;
+ }
+ errno = 0;
+ *out = strtol(text, end, 0 /*base*/);
+ if (errno || *end == text) {
+ fprintf(stderr, "Failed to parse number at start of '%s'.\n", text);
+ return -1;
+ }
+ if (0) fprintf(stderr, "text='%s': *out=%i *relative=%i\n",
+ text, *out, *relative);
+ return 0;
+}
+
+/* Reads number plus optional delta value from <text>.
+
+Evaluates <number> or <number>[+|-<delta>]. E.g. text='1234+2' sets *out=1236,
+text='1234-1' sets *out=1233.
+
+Params:
+ text:
+ text to read.
+ out:
+ pointer to output value.
+ end:
+ *end is set to point to next unread character after number.
+
+Returns 0 on success, else -1.
+*/
+static int read_number_delta(const char *text, int *out, char **end)
+{
+ int e;
+ int relative;
+ e = read_number(text, out, &relative, end);
+ if (e) {
+ return e;
+ }
+ if (relative) {
+ fprintf(stderr, "Base number should not start with '+' or '-' at start of '%s'.\n",
+ text);
+ return -1;
+ }
+ if (*end) {
+ if (**end == '-' || **end == '+') {
+ int delta;
+ e = read_number(*end, &delta, &relative, end);
+ if (e) {
+ return e;
+ }
+ *out += delta;
+ }
+ }
+ if (0) fprintf(stderr, "text='%s': *out=%i\n", text, *out);
+ return 0;
+}
+
+/* Reads range.
+
+E.g.:
+ text='115867-2' sets *begin=115865 *end=115866.
+ text='115867-1..+3' sets *begin=115866 *end=115869.
+
+Supported patterns for text:
+ <range>
+ <value> - returns *begin=value *end=*begin+1.
+ <value1>..<value2> - returns *begin=value1 *end=value2.
+ <value>..+<number> - returns *begin=value *end=*begin+number.
+ <value>
+ <number>
+ <number>+<number>
+ <number>-<number>
+
+ <number>: [0-9]+
+
+If not specified, *end defaults to *begin+1.
+
+Returns 0 on success, else -1, with *string_end pointing to first unused
+character.
+*/
+static int read_number_range(const char *text, int *begin, int *end, char **string_end)
+{
+ int e;
+ e = read_number_delta(text, begin, string_end);
+ if (e) {
+ return e;
+ }
+ if (string_end && (*string_end)[0] == '.' && (*string_end)[1] == '.') {
+ int relative;
+ e = read_number((*string_end) + 2, end, &relative, string_end);
+ if (e) {
+ return e;
+ }
+ if (relative) {
+ *end += *begin;
+ }
+ }
+ else {
+ *end = *begin + 1;
+ }
+ if (*end < *begin) {
+ fprintf(stderr, "Range %i..%i has negative extent, at start of '%s'.\n",
+ *begin, *end, text);
+ return -1;
+ }
+ if (0) fprintf(stderr, "text='%s': *begin=%i *end=%i\n", text, *begin, *end);
+ return 0;
+}
+
+/*
+Format: <range>[,<range>]+
+
+For description of <range>, see read_number_range() above.
+
+E.g.:
+ MEMENTO_SQUEEZES=1234-2..+4,2345,2350..+2
+*/
+static int Memento_add_squeezes(const char *text)
+{
+ int e = 0;
+ for(;;) {
+ int begin;
+ int end;
+ char *string_end;
+ if (!*text) {
+ break;
+ }
+ e = read_number_range(text, &begin, &end, &string_end);
+ if (e) {
+ break;
+ }
+ if (*string_end && *string_end != ',') {
+ fprintf(stderr, "Expecting comma at start of '%s'.\n", string_end);
+ e = -1;
+ break;
+ }
+ fprintf(stderr, "Adding squeeze range %i..%i.\n",
+ begin, end, string_end-text);
+ memento.squeezes_num += 1;
+ memento.squeezes = MEMENTO_UNDERLYING_REALLOC(
+ memento.squeezes,
+ memento.squeezes_num * sizeof(*memento.squeezes)
+ );
+ if (!memento.squeezes) {
+ fprintf(stderr, "Failed to allocate memory for memento.squeezes_num=%i\n",
+ memento.squeezes_num);
+ e = -1;
+ break;
+ }
+ memento.squeezes[memento.squeezes_num-1].begin = begin;
+ memento.squeezes[memento.squeezes_num-1].end = end;
+
+ if (*string_end == 0) {
+ break;
+ }
+ text = string_end + 1;
+ }
+ return e;
+}
+
static void Memento_init(void)
{
char *env;
@@ -1590,10 +1821,16 @@ static void Memento_init(void)
memento.free.tail = NULL;
memento.sequence = 0;
memento.countdown = 1024;
+ memento.squeezes = NULL;
+ memento.squeezes_num = 0;
+ memento.squeezes_pos = 0;
env = getenv("MEMENTO_FAILAT");
memento.failAt = (env ? atoi(env) : 0);
+ env = getenv("MEMENTO_BREAKAT");
+ memento.breakAt = (env ? atoi(env) : 0);
+
env = getenv("MEMENTO_PARANOIA");
memento.paranoia = (env ? atoi(env) : 0);
if (memento.paranoia == 0)
@@ -1605,6 +1842,17 @@ static void Memento_init(void)
env = getenv("MEMENTO_SQUEEZEAT");
memento.squeezeAt = (env ? atoi(env) : 0);
+ env = getenv("MEMENTO_SQUEEZES");
+ if (env) {
+ int e;
+ fprintf(stderr, "Parsing squeeze ranges in MEMENTO_SQUEEZES=%s\n", env);
+ e = Memento_add_squeezes(env);
+ if (e) {
+ fprintf(stderr, "Failed to parse MEMENTO_SQUEEZES=%s\n", env);
+ exit(1);
+ }
+ }
+
env = getenv("MEMENTO_PATTERN");
memento.pattern = (env ? atoi(env) : 0);
@@ -1744,6 +1992,11 @@ static int squeeze(void)
} else
memento.patternBit <<= 1;
memento.squeezing = 1;
+
+ /* This is necessary to allow Memento_failThisEventLocked() near the
+ end to do 'return squeeze();'. */
+ memento.squeezes_num = 0;
+
return 1;
}
@@ -1815,6 +2068,7 @@ static void Memento_startFailing(void)
{
if (!memento.failing) {
fprintf(stderr, "Starting to fail...\n");
+ Memento_bt();
fflush(stderr);
memento.failing = 1;
memento.failAt = memento.sequence;
@@ -1931,9 +2185,46 @@ static int Memento_failThisEventLocked(void)
if (Memento_event()) Memento_breakpointLocked();
+ if (!memento.squeezing && memento.squeezes_num) {
+ /* Move to next relevant squeeze region if appropriate. */
+ for(;;) {
+ if (memento.squeezes_pos == memento.squeezes_num) {
+ break;
+ }
+ if (memento.sequence >= memento.squeezes[memento.squeezes_pos].end) {
+ memento.squeezes_pos += 1;
+ }
+ else {
+ break;
+ }
+ }
+
+ /* See whether memento.sequence is within this squeeze region. */
+ if (memento.squeezes_pos < memento.squeezes_num) {
+ int begin = memento.squeezes[memento.squeezes_pos].begin;
+ int end = memento.squeezes[memento.squeezes_pos].end;
+ if (memento.sequence >= begin && memento.sequence < end) {
+ if (1) {
+ fprintf(stderr,
+ "squeezes match memento.sequence=%i: memento.squeezes_pos=%i/%i %i..%i\n",
+ memento.sequence,
+ memento.squeezes_pos,
+ memento.squeezes_num,
+ memento.squeezes[memento.squeezes_pos].begin,
+ memento.squeezes[memento.squeezes_pos].end
+ );
+ }
+ return squeeze();
+ }
+ }
+ }
+
if ((memento.sequence >= memento.failAt) && (memento.failAt != 0))
Memento_startFailing();
- if ((memento.sequence >= memento.squeezeAt) && (memento.squeezeAt != 0)) {
+ if (memento.squeezes_num==0
+ && (memento.sequence >= memento.squeezeAt)
+ && (memento.squeezeAt != 0)
+ ) {
return squeeze();
}
@@ -2054,112 +2345,112 @@ static void do_reference(Memento_BlkHeader *blk, int event)
int Memento_checkPointerOrNull(void *blk)
{
- if (blk == NULL)
- return 0;
- if (blk == MEMENTO_PREFILL_PTR)
- fprintf(stderr, "Prefill value found as pointer - buffer underrun?\n");
- else if (blk == MEMENTO_POSTFILL_PTR)
- fprintf(stderr, "Postfill value found as pointer - buffer overrun?\n");
- else if (blk == MEMENTO_ALLOCFILL_PTR)
- fprintf(stderr, "Allocfill value found as pointer - use of uninitialised value?\n");
- else if (blk == MEMENTO_FREEFILL_PTR)
- fprintf(stderr, "Allocfill value found as pointer - use after free?\n");
- else
- return 0;
+ if (blk == NULL)
+ return 0;
+ if (blk == MEMENTO_PREFILL_PTR)
+ fprintf(stderr, "Prefill value found as pointer - buffer underrun?\n");
+ else if (blk == MEMENTO_POSTFILL_PTR)
+ fprintf(stderr, "Postfill value found as pointer - buffer overrun?\n");
+ else if (blk == MEMENTO_ALLOCFILL_PTR)
+ fprintf(stderr, "Allocfill value found as pointer - use of uninitialised value?\n");
+ else if (blk == MEMENTO_FREEFILL_PTR)
+ fprintf(stderr, "Allocfill value found as pointer - use after free?\n");
+ else
+ return 0;
#ifdef MEMENTO_DETAILS
- fprintf(stderr, "Current backtrace:\n");
- Memento_bt();
- fprintf(stderr, "History:\n");
- Memento_info(blk);
+ fprintf(stderr, "Current backtrace:\n");
+ Memento_bt();
+ fprintf(stderr, "History:\n");
+ Memento_info(blk);
#endif
- return 1;
+ return 1;
}
int Memento_checkBytePointerOrNull(void *blk)
{
- unsigned char i;
- if (blk == NULL)
- return 0;
- Memento_checkPointerOrNull(blk);
-
- i = *(unsigned int *)blk;
-
- if (i == MEMENTO_PREFILL_UBYTE)
- fprintf(stderr, "Prefill value found - buffer underrun?\n");
- else if (i == MEMENTO_POSTFILL_UBYTE)
- fprintf(stderr, "Postfill value found - buffer overrun?\n");
- else if (i == MEMENTO_ALLOCFILL_UBYTE)
- fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
- else if (i == MEMENTO_FREEFILL_UBYTE)
- fprintf(stderr, "Allocfill value found - use after free?\n");
- else
- return 0;
+ unsigned char i;
+ if (blk == NULL)
+ return 0;
+ Memento_checkPointerOrNull(blk);
+
+ i = *(unsigned int *)blk;
+
+ if (i == MEMENTO_PREFILL_UBYTE)
+ fprintf(stderr, "Prefill value found - buffer underrun?\n");
+ else if (i == MEMENTO_POSTFILL_UBYTE)
+ fprintf(stderr, "Postfill value found - buffer overrun?\n");
+ else if (i == MEMENTO_ALLOCFILL_UBYTE)
+ fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
+ else if (i == MEMENTO_FREEFILL_UBYTE)
+ fprintf(stderr, "Allocfill value found - use after free?\n");
+ else
+ return 0;
#ifdef MEMENTO_DETAILS
- fprintf(stderr, "Current backtrace:\n");
- Memento_bt();
- fprintf(stderr, "History:\n");
- Memento_info(blk);
+ fprintf(stderr, "Current backtrace:\n");
+ Memento_bt();
+ fprintf(stderr, "History:\n");
+ Memento_info(blk);
#endif
- Memento_breakpoint();
- return 1;
+ Memento_breakpoint();
+ return 1;
}
int Memento_checkShortPointerOrNull(void *blk)
{
- unsigned short i;
- if (blk == NULL)
- return 0;
- Memento_checkPointerOrNull(blk);
-
- i = *(unsigned short *)blk;
-
- if (i == MEMENTO_PREFILL_USHORT)
- fprintf(stderr, "Prefill value found - buffer underrun?\n");
- else if (i == MEMENTO_POSTFILL_USHORT)
- fprintf(stderr, "Postfill value found - buffer overrun?\n");
- else if (i == MEMENTO_ALLOCFILL_USHORT)
- fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
- else if (i == MEMENTO_FREEFILL_USHORT)
- fprintf(stderr, "Allocfill value found - use after free?\n");
- else
- return 0;
+ unsigned short i;
+ if (blk == NULL)
+ return 0;
+ Memento_checkPointerOrNull(blk);
+
+ i = *(unsigned short *)blk;
+
+ if (i == MEMENTO_PREFILL_USHORT)
+ fprintf(stderr, "Prefill value found - buffer underrun?\n");
+ else if (i == MEMENTO_POSTFILL_USHORT)
+ fprintf(stderr, "Postfill value found - buffer overrun?\n");
+ else if (i == MEMENTO_ALLOCFILL_USHORT)
+ fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
+ else if (i == MEMENTO_FREEFILL_USHORT)
+ fprintf(stderr, "Allocfill value found - use after free?\n");
+ else
+ return 0;
#ifdef MEMENTO_DETAILS
- fprintf(stderr, "Current backtrace:\n");
- Memento_bt();
- fprintf(stderr, "History:\n");
- Memento_info(blk);
+ fprintf(stderr, "Current backtrace:\n");
+ Memento_bt();
+ fprintf(stderr, "History:\n");
+ Memento_info(blk);
#endif
- Memento_breakpoint();
- return 1;
+ Memento_breakpoint();
+ return 1;
}
int Memento_checkIntPointerOrNull(void *blk)
{
- unsigned int i;
- if (blk == NULL)
- return 0;
- Memento_checkPointerOrNull(blk);
-
- i = *(unsigned int *)blk;
-
- if (i == MEMENTO_PREFILL_UINT)
- fprintf(stderr, "Prefill value found - buffer underrun?\n");
- else if (i == MEMENTO_POSTFILL_UINT)
- fprintf(stderr, "Postfill value found - buffer overrun?\n");
- else if (i == MEMENTO_ALLOCFILL_UINT)
- fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
- else if (i == MEMENTO_FREEFILL_UINT)
- fprintf(stderr, "Allocfill value found - use after free?\n");
- else
- return 0;
+ unsigned int i;
+ if (blk == NULL)
+ return 0;
+ Memento_checkPointerOrNull(blk);
+
+ i = *(unsigned int *)blk;
+
+ if (i == MEMENTO_PREFILL_UINT)
+ fprintf(stderr, "Prefill value found - buffer underrun?\n");
+ else if (i == MEMENTO_POSTFILL_UINT)
+ fprintf(stderr, "Postfill value found - buffer overrun?\n");
+ else if (i == MEMENTO_ALLOCFILL_UINT)
+ fprintf(stderr, "Allocfill value found - use of uninitialised value?\n");
+ else if (i == MEMENTO_FREEFILL_UINT)
+ fprintf(stderr, "Allocfill value found - use after free?\n");
+ else
+ return 0;
#ifdef MEMENTO_DETAILS
- fprintf(stderr, "Current backtrace:\n");
- Memento_bt();
- fprintf(stderr, "History:\n");
- Memento_info(blk);
+ fprintf(stderr, "Current backtrace:\n");
+ Memento_bt();
+ fprintf(stderr, "History:\n");
+ Memento_info(blk);
#endif
- Memento_breakpoint();
- return 1;
+ Memento_breakpoint();
+ return 1;
}
static void *do_takeRef(void *blk)
@@ -2358,7 +2649,11 @@ static int checkBlockUser(Memento_BlkHeader *memblk, const char *action)
}
fprintf(stderr, "Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
- Memento_breakpointLocked();
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
return 1;
}
#endif
@@ -2405,7 +2700,11 @@ static int checkBlock(Memento_BlkHeader *memblk, const char *action)
}
fprintf(stderr, "Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
- Memento_breakpointLocked();
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
return 1;
}
#endif
@@ -2596,6 +2895,11 @@ static int Memento_Internal_checkAllAlloced(Memento_BlkHeader *memblk, void *arg
data->preCorrupt = 0;
data->postCorrupt = 0;
data->freeCorrupt = 0;
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
}
else
memblk->lastCheckedOK = memento.sequence;
@@ -2615,7 +2919,7 @@ static int Memento_Internal_checkAllFreed(Memento_BlkHeader *memblk, void *arg)
fprintf(stderr, " ");
showBlock(memblk, ' ');
if (data->freeCorrupt) {
- fprintf(stderr, " index %d (address 0x%p) onwards", (int)data->index,
+ fprintf(stderr, " index %d (address "FMTP") onwards", (int)data->index,
&((char *)MEMBLK_TOBLK(memblk))[data->index]);
if (data->preCorrupt) {
fprintf(stderr, "+ preguard");
@@ -2636,6 +2940,11 @@ static int Memento_Internal_checkAllFreed(Memento_BlkHeader *memblk, void *arg)
fprintf(stderr, " corrupted.\n"
" Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
VALGRIND_MAKE_MEM_NOACCESS(memblk, sizeof(Memento_BlkHeader));
data->preCorrupt = 0;
data->postCorrupt = 0;
@@ -2723,7 +3032,7 @@ int Memento_find(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Address 0x%p is in %sallocated block ",
+ fprintf(stderr, "Address "FMTP" is in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2736,7 +3045,7 @@ int Memento_find(void *a)
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2759,7 +3068,7 @@ void Memento_breakOnFree(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Will stop when address 0x%p (in %sallocated block ",
+ fprintf(stderr, "Will stop when address "FMTP" (in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2775,7 +3084,7 @@ void Memento_breakOnFree(void *a)
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Can't stop on free; address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Can't stop on free; address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2784,7 +3093,7 @@ void Memento_breakOnFree(void *a)
MEMENTO_UNLOCK();
return;
}
- fprintf(stderr, "Can't stop on free; address 0x%p is not in a known block.\n", a);
+ fprintf(stderr, "Can't stop on free; address "FMTP" is not in a known block.\n", a);
MEMENTO_UNLOCK();
}
@@ -2798,7 +3107,7 @@ void Memento_breakOnRealloc(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Will stop when address 0x%p (in %sallocated block ",
+ fprintf(stderr, "Will stop when address "FMTP" (in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2814,7 +3123,7 @@ void Memento_breakOnRealloc(void *a)
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Can't stop on free/realloc; address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Can't stop on free/realloc; address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2823,7 +3132,7 @@ void Memento_breakOnRealloc(void *a)
MEMENTO_UNLOCK();
return;
}
- fprintf(stderr, "Can't stop on free/realloc; address 0x%p is not in a known block.\n", a);
+ fprintf(stderr, "Can't stop on free/realloc; address "FMTP" is not in a known block.\n", a);
MEMENTO_UNLOCK();
}
@@ -2852,6 +3161,11 @@ void Memento_stopLeaking(void)
memento.leaking--;
}
+int Memento_squeezing(void)
+{
+ return memento.squeezing;
+}
+
#endif /* MEMENTO_CPP_EXTRAS_ONLY */
#ifdef __cplusplus
@@ -3051,4 +3365,9 @@ void (Memento_stopLeaking)(void)
{
}
+int (Memento_squeezing)(void)
+{
+ return 0;
+}
+
#endif
diff --git a/base/memento.h b/base/memento.h
index d8cf5b34..b822479f 100644
--- a/base/memento.h
+++ b/base/memento.h
@@ -75,8 +75,7 @@
* An example:
* Suppose we have a gs invocation that crashes with memory corruption.
* * Build with -DMEMENTO.
- * * In your debugger put breakpoints on Memento_inited and
- * Memento_Breakpoint.
+ * * In your debugger put a breakpoint on Memento_breakpoint.
* * Run the program. It will stop in Memento_inited.
* * Execute Memento_setParanoia(1); (In VS use Ctrl-Alt-Q). (Note #1)
* * Continue execution.
@@ -92,9 +91,9 @@
* and 1458 - so if we rerun and stop the program at 1457, we can then
* step through, possibly with a data breakpoint at 0x172e710 and see
* when it occurs.
- * * So restart the program from the beginning. When we hit Memento_inited
- * execute Memento_breakAt(1457); (and maybe Memento_setParanoia(1), or
- * Memento_setParanoidAt(1457))
+ * * So restart the program from the beginning. When we stop after
+ * initialisation execute Memento_breakAt(1457); (and maybe
+ * Memento_setParanoia(1), or Memento_setParanoidAt(1457))
* * Continue execution until we hit Memento_breakpoint.
* * Now you can step through and watch the memory corruption happen.
*
@@ -157,6 +156,30 @@
* Both Windows and GCC provide separate new[] and delete[] operators
* for arrays. Apparently some systems do not. If this is the case for
* your system, define MEMENTO_CPP_NO_ARRAY_CONSTRUCTORS.
+ *
+ * "libbacktrace.so failed to load"
+ *
+ * In order to give nice backtraces on unix, Memento will try to use
+ * a libbacktrace dynamic library. If it can't find it, you'll see
+ * that warning, and your backtraces won't include file/line information.
+ *
+ * To fix this you'll need to build your own libbacktrace. Don't worry
+ * it's really easy:
+ * git clone git://github.com/ianlancetaylor/libbacktrace
+ * cd libbacktrace
+ * ./configure
+ * make
+ *
+ * This leaves the build .so as .libs/libbacktrace.so
+ *
+ * Memento will look for this on LD_LIBRARY_PATH, or in /opt/lib/,
+ * or in /lib/, or in /usr/lib/, or in /usr/local/lib/. I recommend
+ * using /opt/lib/ as this won't conflict with anything that you
+ * get via a package manager like apt.
+ *
+ * sudo mkdir /opt
+ * sudo mkdir /opt/lib
+ * sudo cp .libs/libbacktrace.so /opt/lib/
*/
#ifndef MEMENTO_H
@@ -238,6 +261,8 @@ void Memento_stopLeaking(void);
int Memento_sequence(void);
+int Memento_squeezing(void);
+
void Memento_fin(void);
void Memento_bt(void);
@@ -299,6 +324,7 @@ void Memento_bt(void);
#define Memento_fin() do {} while (0)
#define Memento_bt() do {} while (0)
#define Memento_sequence() (0)
+#define Memento_squeezing() (0)
#endif /* MEMENTO */
diff --git a/base/mkromfs.c b/base/mkromfs.c
index f6e4d6f9..54e33f28 100644
--- a/base/mkromfs.c
+++ b/base/mkromfs.c
@@ -383,12 +383,12 @@ int cmpstringp(const void *p1, const void *p2);
void put_uint32(FILE *out, const unsigned int q);
void put_bytes_padded(FILE *out, unsigned char *p, unsigned int len);
void inode_clear(romfs_inode* node);
-void inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int*totlen, split_data *splits);
+void inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int*totlen, split_data *splits, int verbose);
void process_path(char *path, const char *os_prefix, const char *rom_prefix,
Xlist_element *Xlist_head, int compression,
int compaction, int *inode_count, int *totlen, FILE *out,
- split_data *splits);
-FILE *prefix_open(const char *os_prefix, const char *inname);
+ split_data *splits, int verbose);
+FILE *prefix_open(const char *os_prefix, const char *inname, int verbose);
void prefix_add(const char *prefix, const char *filename, char *prefixed_path);
/* put 4 byte integer, big endian */
@@ -467,7 +467,7 @@ void inode_clear(romfs_inode* node)
}
static unsigned long
-do_inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int *totlen, int split)
+do_inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int *totlen, int split, int verbose)
{
int i, offset;
int blocks = (node->length+ROMFS_BLOCKSIZE-1)/ROMFS_BLOCKSIZE;
@@ -504,12 +504,14 @@ do_inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, i
}
fprintf(out, "\t0 };\t/* end-of-node */\n");
- printf("node '%s' len=%ld", node->name, node->length);
- printf(" %d blocks", blocks);
- if (compression) {
- printf(", compressed size=%d", clen);
+ if (verbose) {
+ printf("node '%s' len=%ld", node->name, node->length);
+ printf(" %d blocks", blocks);
+ if (compression) {
+ printf(", compressed size=%d", clen);
+ }
+ printf("\n");
}
- printf("\n");
if (compression)
return clen;
return node->length;
@@ -548,7 +550,7 @@ start_file(FILE *out)
/* write out an inode and its file data */
void
-inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int *totlen, split_data *splits)
+inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int *totlen, split_data *splits, int verbose)
{
prepare_splits(splits);
if (splits->max_splits) {
@@ -568,10 +570,10 @@ inode_write(FILE *out, romfs_inode *node, int compression, int inode_count, int
} else {
out2 = fopen(splits->outname_formatted, "a");
}
- splits->sizes[which] += do_inode_write(out2, node, compression, inode_count, totlen, 1);
+ splits->sizes[which] += do_inode_write(out2, node, compression, inode_count, totlen, 1, verbose);
fclose(out2);
} else
- (void)do_inode_write(out, node, compression, inode_count, totlen, 0);
+ (void)do_inode_write(out, node, compression, inode_count, totlen, 0, verbose);
}
void
@@ -1666,7 +1668,7 @@ int cmpstringp(const void *p1, const void *p2)
void process_path(char *path, const char *os_prefix, const char *rom_prefix,
Xlist_element *Xlist_head, int compression,
int compaction, int *inode_count, int *totlen, FILE *out,
- split_data *splits)
+ split_data *splits, int verbose)
{
int i, namelen, excluded, save_count=*inode_count;
Xlist_element *Xlist_scan;
@@ -1799,7 +1801,7 @@ void process_path(char *path, const char *os_prefix, const char *rom_prefix,
}
/* write out data for this file */
- inode_write(out, node, compression, *inode_count, totlen, splits);
+ inode_write(out, node, compression, *inode_count, totlen, splits, verbose);
/* clean up */
inode_clear(node);
free(node);
@@ -1835,7 +1837,7 @@ void process_path(char *path, const char *os_prefix, const char *rom_prefix,
* will be converted to a binary token.
*/
/* Forward references */
-void merge_to_ps(const char *os_prefix, const char *inname, FILE * in, FILE * config);
+void merge_to_ps(const char *os_prefix, const char *inname, FILE * in, FILE * config, int verbose);
int write_init(char *);
bool rl(FILE * in, char *str, int len);
void wsc(const byte *str, int len);
@@ -1845,7 +1847,7 @@ char *doit(char *line, bool intact);
void hex_string_to_binary(FILE *in);
void flush_buf(char *buf);
void mergefile(const char *os_prefix, const char *inname, FILE * in, FILE * config,
- bool intact);
+ bool intact, int verbose);
void flush_line_buf(int len);
typedef struct in_block_s in_block_t;
@@ -1894,7 +1896,7 @@ static int ib_feof(in_block_file *ibf)
static int
process_initfile(char *initfile, char *gconfig_h, const char *os_prefix,
const char *rom_prefix, int compression, int *inode_count,
- int *totlen, FILE *out, split_data *splits)
+ int *totlen, FILE *out, split_data *splits, int verbose)
{
int ret, block, blocks;
romfs_inode *node = NULL;
@@ -1939,7 +1941,7 @@ process_initfile(char *initfile, char *gconfig_h, const char *os_prefix,
node = calloc(1, sizeof(romfs_inode));
node->name = rom_filename; /* without -P prefix, with -d rom_prefix */
- merge_to_ps(os_prefix, initfile, in, config);
+ merge_to_ps(os_prefix, initfile, in, config, verbose);
fclose(in);
fclose(config);
@@ -2018,7 +2020,7 @@ process_initfile(char *initfile, char *gconfig_h, const char *os_prefix,
}
/* write data for this file */
- inode_write(out, node, compression, *inode_count, totlen, splits);
+ inode_write(out, node, compression, *inode_count, totlen, splits, verbose);
/* clean up */
inode_clear(node);
(*inode_count)++;
@@ -2280,7 +2282,7 @@ flush_buf(char *buf)
}
FILE *
-prefix_open(const char *os_prefix, const char *filename)
+prefix_open(const char *os_prefix, const char *filename, int verbose)
{
char *prefixed_path;
FILE *filep;
@@ -2291,7 +2293,9 @@ prefix_open(const char *os_prefix, const char *filename)
return NULL;
}
prefix_add(os_prefix, filename, prefixed_path);
- printf("including: '%s'\n", prefixed_path);
+ if (verbose) {
+ printf("including: '%s'\n", prefixed_path);
+ }
filep = fopen(prefixed_path, "rb");
free(prefixed_path);
return filep;
@@ -2299,7 +2303,7 @@ prefix_open(const char *os_prefix, const char *filename)
void
mergefile(const char *os_prefix, const char *inname, FILE * in, FILE * config,
- bool intact)
+ bool intact, int verbose)
{
char line[LINE_SIZE + 1];
char buf[LINE_SIZE + 1];
@@ -2324,12 +2328,12 @@ mergefile(const char *os_prefix, const char *inname, FILE * in, FILE * config,
FILE *ps;
psname[strlen(psname) - 1] = 0;
- ps = prefix_open(os_prefix, psname + 1);
+ ps = prefix_open(os_prefix, psname + 1, verbose);
if (ps == 0) {
fprintf(stderr, "Failed to open '%s' - aborting\n", psname+1);
exit(1);
}
- mergefile(os_prefix, psname + 1, ps, config, intact || do_intact);
+ mergefile(os_prefix, psname + 1, ps, config, intact || do_intact, verbose);
} else if (!strcmp(psname, "INITFILES")) {
/*
* We don't want to bind config.h into geninit, so
@@ -2344,10 +2348,10 @@ mergefile(const char *os_prefix, const char *inname, FILE * in, FILE * config,
exit(1);
*quote = 0;
- ps = prefix_open(os_prefix, psname + 9);
+ ps = prefix_open(os_prefix, psname + 9, verbose);
if (ps == 0)
exit(1);
- mergefile(os_prefix, psname + 9, ps, config, false);
+ mergefile(os_prefix, psname + 9, ps, config, false, verbose);
}
} else {
printf("Unknown %%%% Replace %d %s\n",
@@ -2400,7 +2404,7 @@ mergefile(const char *os_prefix, const char *inname, FILE * in, FILE * config,
/* Merge and produce a PostScript file. */
void
-merge_to_ps(const char *os_prefix, const char *inname, FILE * in, FILE * config)
+merge_to_ps(const char *os_prefix, const char *inname, FILE * in, FILE * config, int verbose)
{
char line[LINE_SIZE + 1];
@@ -2408,7 +2412,7 @@ merge_to_ps(const char *os_prefix, const char *inname, FILE * in, FILE * config)
sprintf(linebuf, "%s", line );
wl(linebuf);
}
- mergefile(os_prefix, inname, in, config, false);
+ mergefile(os_prefix, inname, in, config, false, verbose);
}
static void
@@ -2460,6 +2464,7 @@ main(int argc, char *argv[])
int atarg = 1;
int compression = 1; /* default to doing compression */
int compaction = 0;
+ int verbose = 1;
Xlist_element *Xlist_scan = NULL, *Xlist_head = NULL;
char pa[PATH_STR_LEN];
time_t buildtime = 0;
@@ -2475,6 +2480,7 @@ main(int argc, char *argv[])
" options:\n"
" -o outputfile default: obj/gsromfs.c if this option present, must be first.\n"
" -P prefix use prefix to find path. prefix not included in %%rom%%\n"
+ " -q reduce diagnostics\n"
" -X path exclude the path from further processing.\n"
" Note: The tail of any path encountered will be tested so .svn on the -X\n"
" list will exclude that path in all subsequent paths enumerated.\n"
@@ -2520,7 +2526,7 @@ main(int argc, char *argv[])
}
if (!buildtime)
buildtime = time(NULL);
- fprintf(out," time_t gs_romfs_buildtime = %ld;\n\n", buildtime);
+ fprintf(out," time_t gs_romfs_buildtime = %ld;\n\n", (long)buildtime);
/* process the remaining arguments (options interspersed with paths) */
for (; atarg < argc; atarg++) {
@@ -2539,6 +2545,9 @@ main(int argc, char *argv[])
case 'C':
compaction = 1;
break;
+ case 'q':
+ verbose = 0;
+ break;
case 'd':
if (++atarg == argc) {
printf(" option %s missing required argument\n", argv[atarg-1]);
@@ -2570,7 +2579,7 @@ main(int argc, char *argv[])
atarg++;
strncpy(gconfig_h, argv[atarg], PATH_STR_LEN - 1);
process_initfile(initfile, gconfig_h, os_prefix, rom_prefix, compression,
- &inode_count, &totlen, out, &splits);
+ &inode_count, &totlen, out, &splits, verbose);
}
break;
case 'P':
@@ -2601,7 +2610,7 @@ main(int argc, char *argv[])
/* process a path or file */
strncpy(pa, argv[atarg], PATH_STR_LEN - (strlen(os_prefix) < strlen(rom_prefix) ? strlen(rom_prefix) : strlen(os_prefix)));
process_path(pa, os_prefix, rom_prefix, Xlist_head,
- compression, compaction, &inode_count, &totlen, out, &splits);
+ compression, compaction, &inode_count, &totlen, out, &splits, verbose);
}
/* Now allow for the (probably never happening) case where we are splitting, but haven't written anything to one of the files */
diff --git a/base/msvccmd.mak b/base/msvccmd.mak
index 21299523..da0d8c2c 100644
--- a/base/msvccmd.mak
+++ b/base/msvccmd.mak
@@ -99,6 +99,8 @@ CDCC=/Zi
!if "$(CPU_FAMILY)"=="i386"
+!if ($(MSVC_VERSION) <= 12)
+# GB and QI0f were removed at (or before) VS2015
!if ($(MSVC_VERSION) >= 8) || defined(WIN64)
# MSVC 8 (2005) attempts to produce code good for all processors.
# and doesn't used /G5 or /GB.
@@ -113,6 +115,7 @@ CPFLAGS=/GB $(QI0f)
CPFLAGS=/GB $(QI0f)
!endif
!endif
+!endif
!if $(MSVC_VERSION)<5
FPFLAGS=/FPi87
@@ -200,7 +203,11 @@ COMPILE_WITH_FRAMES=/Oy-
CS=
!else
!if $(DEBUG)!=0 || $(TDEBUG)!=0
+!if $(MSVC_VERSION) < 14
+# This flag (Enable stack checks for all functions) has gone in
+# VS2015.
CS=/Ge
+!endif
!else
CS=/Gs
!endif
diff --git a/base/msvclib.mak b/base/msvclib.mak
index 48243216..5b1894b2 100644
--- a/base/msvclib.mak
+++ b/base/msvclib.mak
@@ -384,7 +384,7 @@ TIFFSRCDIR=tiff$(D)
TIFFCONFDIR=$(TIFFSRCDIR)
TIFFCONFIG_SUFFIX=.vc
TIFFPLATFORM=win32
-TIFFCFLAGS="-DJPEG_LIB_MK1_OR_12BIT=0"
+TIFF_CFLAGS=-DJPEG_SUPPORT -DOJPEG_SUPPORT -DJPEG_LIB_MK1_OR_12BIT=0
!endif
# Define which jbig2 library to use
@@ -511,6 +511,7 @@ CFLAGS=$(CFLAGS) $(XCFLAGS)
MSVC_VERSION=5
!endif
!if "$(_NMAKE_VER)" == "6.00.8168.0"
+# VC 6
MSVC_VERSION=6
!endif
!if "$(_NMAKE_VER)" == "7.00.9466"
@@ -524,44 +525,69 @@ MSVC_VERSION=7
MSVC_MINOR_VERSION=1
!endif
!if "$(_NMAKE_VER)" == "8.00.40607.16"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "8.00.50727.42"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "8.00.50727.762"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "9.00.21022.08"
+# VS2008
MSVC_VERSION=9
!endif
!if "$(_NMAKE_VER)" == "9.00.30729.01"
+# VS2008
MSVC_VERSION=9
!endif
!if "$(_NMAKE_VER)" == "10.00.30319.01"
+# VS2010
MSVC_VERSION=10
!endif
!if "$(_NMAKE_VER)" == "11.00.50522.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.50727.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.60315.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.60610.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "12.00.21005.1"
+# VS 2013
MSVC_VERSION=12
!endif
!if "$(_NMAKE_VER)" == "14.00.23506.0"
+# VS2015
MSVC_VERSION=14
!endif
+!if "$(_NMAKE_VER)" == "14.00.24210.0"
+# VS2015
+MSVC_VERSION=14
+!endif
+!if "$(_NMAKE_VER)" == "14.16.27034.0"
+# VS2017 or VS2019 (Toolset v141)
+MSVC_VERSION=15
+!endif
+!if "$(_NMAKE_VER)" == "14.24.28314.0"
+# VS2019 (Toolset v142)
+MSVC_VERSION=16
+!endif
!endif
!ifndef MSVC_VERSION
+!MESSAGE Could not determine MSVC_VERSION! Guessing at an ancient one.
MSVC_VERSION=6
!endif
!ifndef MSVC_MINOR_VERSION
@@ -849,6 +875,24 @@ LINKLIBPATH=/LIBPATH:"$(COMPBASE)\lib\amd64" /LIBPATH:"$(COMPBASE)\PlatformSDK\L
! endif
!endif
+!if $(MSVC_VERSION) == 15
+! if "$(DEVSTUDIO)"==""
+COMPBASE=
+SHAREDBASE=
+! else
+!MESSAGE Compilation is unlikely to work like this. Build from VS solution for now.
+! endif
+!endif
+
+!if $(MSVC_VERSION) == 16
+! if "$(DEVSTUDIO)"==""
+COMPBASE=
+SHAREDBASE=
+! else
+!MESSAGE Compilation is unlikely to work like this. Build from VS solution for now.
+! endif
+!endif
+
!if "$(ARM)"=="1"
VCINSTDIR=$(VS110COMNTOOLS)..\..\VC\
diff --git a/base/openjpeg.mak b/base/openjpeg.mak
index 9bbd5b0b..f02bd3fb 100644
--- a/base/openjpeg.mak
+++ b/base/openjpeg.mak
@@ -115,7 +115,7 @@ $(OPEN_JPEG_GEN)openjpeg_0.dev : $(ECHOGS_XE) $(open_jpeg_OBJS) \
$(SETMOD) $(OPEN_JPEG_GEN)openjpeg_0 $(open_jpeg_OBJS)
# define our specific compiler
-OPEN_JPEG_CC=$(CC) $(CFLAGS) $(D_)OPJ_STATIC$(_D) $(D_)STANDARD_SLOW_VERSION$(_D) $(I_)$(OPEN_JPEG_GEN)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(D)..$(_I) $(JPXCF_)
+OPEN_JPEG_CC=$(CC) $(CFLAGS) $(D_)OPJ_STATIC$(_D) $(I_)$(OPEN_JPEG_GEN)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(D)..$(_I) $(JPXCF_)
OPEN_JPEG_O=$(O_)$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)
OPEN_JPEG_DEP=$(AK) $(OPEN_JPEG_MAK) $(MAKEDIRS)
diff --git a/base/pack_ps.c b/base/pack_ps.c
index 1bd8edc1..764ae3b3 100644
--- a/base/pack_ps.c
+++ b/base/pack_ps.c
@@ -344,7 +344,7 @@ main(int argc, char *argv[])
if (!buildtime) {
buildtime = time(NULL);
}
- fprintf(outfile,"/* Auto-generated from PostScript file \"%s\" at time %ld */\n", infilename, buildtime);
+ fprintf(outfile,"/* Auto-generated from PostScript file \"%s\" at time %ld */\n", infilename, (long)buildtime);
while (readline(infile, inputline, INPUT_LINE_LENGTH_MAX)) {
diff --git a/base/png.mak b/base/png.mak
index 7c617f86..899e1785 100644
--- a/base/png.mak
+++ b/base/png.mak
@@ -62,7 +62,7 @@ PZGEN=$(ZGENDIR)$(D)
# adds /Za which conflicts with the libpng 1.5.x source.
PNGCC=$(CC) $(CFLAGS) $(PNG_CFLAGS) $(I_)$(PI_)$(_I) $(I_)$(PNGGENDIR)$(_I) $(PF_) \
$(D_)PNG_NO_ASSEMBLER_CODE$(_D) $(D_)PNG_INTEL_SSE_OPT=0$(_D) \
-$(D_)PNG_INTEL_SSE_IMPLEMENTATION=0$(_D)
+$(D_)PNG_INTEL_SSE_IMPLEMENTATION=0$(_D) $(D_)PNG_ARM_NEON_IMPLEMENTATION=0$(_D)
# Define the name of this makefile.
LIBPNG_MAK=$(GLSRC)png.mak $(TOP_MAKEFILES)
diff --git a/base/scfe.c b/base/scfe.c
index 3bdd4f62..fbb3bde6 100644
--- a/base/scfe.c
+++ b/base/scfe.c
@@ -380,6 +380,8 @@ s_CFE_process(stream_state * st, stream_cursor_read * pr,
}
/* Encode a 1-D scan line. */
+/* Attempt to stop coverity thinking skip_white_pixels() taints lbuf:*/
+/* coverity[ -tainted_data_argument : arg-1 ] */
static void
cf_encode_1d(stream_CFE_state * ss, const byte * lbuf, stream_cursor_write * pw)
{
@@ -411,6 +413,7 @@ cf_encode_1d(stream_CFE_state * ss, const byte * lbuf, stream_cursor_write * pw)
}
/* Encode a 2-D scan line. */
+/* coverity[ -tainted_data_argument : arg-1 ] */
static void
cf_encode_2d(stream_CFE_state * ss, const byte * lbuf, stream_cursor_write * pw,
const byte * lprev)
diff --git a/base/simscale.c b/base/simscale.c
index ad628fff..76bb3969 100644
--- a/base/simscale.c
+++ b/base/simscale.c
@@ -8363,7 +8363,7 @@ s_imscale_process(stream_state *st, stream_cursor_read *pr,
pr->ptr += ncopy;
} else {
memset(ss->window + 3 * w, 0xff, w);
- ss->src_offset += ss->src_size;
+ ss->src_offset = ss->src_size;
}
if (ss->src_offset == ss->src_size) {
ss->src_offset = 0;
diff --git a/base/sjpegc.c b/base/sjpegc.c
index 1810dcda..a54cc933 100644
--- a/base/sjpegc.c
+++ b/base/sjpegc.c
@@ -182,10 +182,11 @@ static long gs_j_mem_init (j_common_ptr cinfo)
static void gs_j_mem_term (j_common_ptr cinfo)
{
gs_memory_t *cmem = (gs_memory_t *)(GET_CUST_MEM_DATA(cinfo)->priv);
- gs_memory_t *mem = gs_memory_chunk_target(cmem);
+ gs_memory_t *mem = gs_memory_chunk_unwrap(cmem);
+
+ if (mem == cmem)
+ return;
- gs_memory_chunk_release(cmem);
-
(void)jpeg_cust_mem_set_private(GET_CUST_MEM_DATA(cinfo), mem);
}
#endif /* SHAREJPEG == 0 */
@@ -199,13 +200,16 @@ int gs_jpeg_mem_init (gs_memory_t *mem, j_common_ptr cinfo)
memset(&custm, 0x00, sizeof(custm));
+ /* JPEG allocated chunks don't need to be subject to gc. */
+ mem = mem->non_gc_memory;
+
if (!jpeg_cust_mem_init(&custm, (void *) mem, gs_j_mem_init, gs_j_mem_term, NULL,
gs_j_mem_alloc, gs_j_mem_free,
gs_j_mem_alloc, gs_j_mem_free, NULL)) {
code = gs_note_error(gs_error_VMerror);
}
if (code == 0) {
- custmptr = (jpeg_cust_mem_data *)gs_alloc_bytes(mem->non_gc_memory, sizeof(custm) + sizeof(void *), "JPEG custom memory descriptor");
+ custmptr = (jpeg_cust_mem_data *)gs_alloc_bytes(mem, sizeof(custm) + sizeof(void *), "JPEG custom memory descriptor");
if (!custmptr) {
code = gs_note_error(gs_error_VMerror);
}
diff --git a/base/sjpx_openjpeg.c b/base/sjpx_openjpeg.c
index b2769550..a4d7884e 100644
--- a/base/sjpx_openjpeg.c
+++ b/base/sjpx_openjpeg.c
@@ -38,20 +38,16 @@ int sjpxd_create(gs_memory_t *mem)
#if !defined(SHARE_JPX) || (SHARE_JPX == 0)
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
-#ifdef MEMENTO_SQUEEZE_BUILD
- ctx->sjpxd_private = NULL;
-#else
ctx->sjpxd_private = gx_monitor_label(gx_monitor_alloc(mem), "sjpxd_monitor");
if (ctx->sjpxd_private == NULL)
return gs_error_VMerror;
#endif
-#endif
return 0;
}
void sjpxd_destroy(gs_memory_t *mem)
{
-#if (!defined(SHARE_JPX) || (SHARE_JPX == 0)) && !defined(MEMENTO_SQUEEZE_BUILD)
+#if !defined(SHARE_JPX) || (SHARE_JPX == 0)
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
gx_monitor_free((gx_monitor_t *)ctx->sjpxd_private);
@@ -64,13 +60,9 @@ static int opj_lock(gs_memory_t *mem)
#if !defined(SHARE_JPX) || (SHARE_JPX == 0)
int ret;
-#ifdef MEMENTO_SQUEEZE_BUILD
- ret = 0;
-#else
gs_lib_ctx_t *ctx = mem->gs_lib_ctx;
ret = gx_monitor_enter((gx_monitor_t *)ctx->sjpxd_private);
-#endif
assert(opj_memory == NULL);
opj_memory = mem->non_gc_memory;
return ret;
@@ -86,12 +78,7 @@ static int opj_unlock(gs_memory_t *mem)
assert(opj_memory != NULL);
opj_memory = NULL;
-#ifdef MEMENTO_SQUEEZE_BUILD
- (void)ctx;
- return 0;
-#else
return gx_monitor_leave((gx_monitor_t *)ctx->sjpxd_private);
-#endif
#else
return 0;
#endif
@@ -439,7 +426,7 @@ static int decode_image(stream_jpxd_state * const state)
{
if (state->image->comps[compno].alpha == 0x00)
numprimcomp++;
- else if (state->image->comps[compno].alpha == 0x01)
+ else if (state->image->comps[compno].alpha == 0x01 || state->image->comps[compno].alpha == 0x02)
alpha_comp = compno;
}
diff --git a/base/spwgd.c b/base/spwgd.c
index 19ec7643..cb04cb72 100644
--- a/base/spwgd.c
+++ b/base/spwgd.c
@@ -171,8 +171,17 @@ data_produced:
}
}
+static void
+s_PWGD_release(stream_state * st)
+{
+ stream_PWGD_state *const ss = (stream_PWGD_state *) st;
+
+ gs_free_object(st->memory, ss->line_buffer, "PWGD(close)");
+ ss->line_buffer = NULL;
+}
+
/* Stream template */
const stream_template s_PWGD_template = {
- &st_PWGD_state, s_PWGD_init, s_PWGD_process, 1, 1, NULL,
+ &st_PWGD_state, s_PWGD_init, s_PWGD_process, 1, 1, s_PWGD_release,
s_PWGD_set_defaults
};
diff --git a/base/srle.c b/base/srle.c
index 0c0186e0..21b729f3 100644
--- a/base/srle.c
+++ b/base/srle.c
@@ -329,11 +329,13 @@ run_len_0_n0_read:
*++q = n0;
}
case state_eod_unmarked:
- if (wlimit - q < 1) {
- ss->state = state_eod_unmarked;
- goto no_output_room;
+ if (!ss->omitEOD) {
+ if (wlimit - q < 1) {
+ ss->state = state_eod_unmarked;
+ goto no_output_room;
+ }
+ *++q = 128; /* EOD */
}
- *++q = 128; /* EOD */
case state_eod:
ss->run_len = 0;
ss->state = state_0;
diff --git a/base/srlx.h b/base/srlx.h
index ebf17206..98309dbd 100644
--- a/base/srlx.h
+++ b/base/srlx.h
@@ -32,6 +32,7 @@ typedef struct stream_RLE_state_s {
stream_RL_state_common;
/* The following parameters are set by the client. */
ulong record_size;
+ bool omitEOD;
/* The following change dynamically. */
ulong record_left; /* bytes left in current record */
byte n0;
@@ -47,7 +48,7 @@ typedef struct stream_RLE_state_s {
/* We define the initialization procedure here, so that clients */
/* can avoid a procedure call. */
#define s_RLE_set_defaults_inline(ss)\
- ((ss)->EndOfData = true, (ss)->record_size = 0)
+ ((ss)->EndOfData = true, (ss)->omitEOD = false, (ss)->record_size = 0)
#define s_RLE_init_inline(ss)\
((ss)->record_left =\
((ss)->record_size == 0 ? ((ss)->record_size = max_uint) :\
diff --git a/base/std.h b/base/std.h
index 4f91777b..9c9e817f 100644
--- a/base/std.h
+++ b/base/std.h
@@ -85,6 +85,7 @@ typedef ulong bits32;
#define max_ushort ARCH_MAX_USHORT
#define max_uint ARCH_MAX_UINT
#define max_ulong ARCH_MAX_ULONG
+#define max_size_t ARCH_MAX_SIZE_T
/* Minimum and maximum values for pointers. */
#if ARCH_PTRS_ARE_SIGNED
diff --git a/base/stdint_.h b/base/stdint_.h
index 7da1457f..39ab5ac4 100644
--- a/base/stdint_.h
+++ b/base/stdint_.h
@@ -227,6 +227,9 @@ typedef unsigned long long uint64_t;
# define PRIiSIZE "lli"
# endif
# endif
+# ifndef PRIx64
+# define PRIx64 PRIxSIZE
+# endif
# endif
#endif /* stdint__INCLUDED */
diff --git a/base/stdpre.h b/base/stdpre.h
index d638d362..5dd068d9 100644
--- a/base/stdpre.h
+++ b/base/stdpre.h
@@ -123,20 +123,24 @@ typedef struct gp_file_s gp_file;
-/* Disable 'inline' if the compiler can't handle it. */
-#ifdef __DECC
-# undef inline
-# define inline __inline
-#else
-# ifdef __GNUC__
-/* Define inline as __inline__ so -pedantic won't produce a warning. */
-# undef inline
-# define inline __inline__
-# else
-# if !(defined(__MWERKS__) || defined(inline))
-# define inline /* */
-# endif
-# endif
+/* Ensure we have a definition of 'inline', even if that means
+ * disabling it if the compiler can't handle it. */
+#ifdef __cplusplus
+ /* inline will already be defined within C++ */
+#elif defined (__STDC_VERSION_) && (__STDC_VERSION__ >= 199901L)
+ /* inline will already be defined within C99 */
+#elif defined(_MSC_VER) && (_MSC_VER >= 1500) /* MSVC 9 or newer */
+ #define inline __inline
+#elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC 3 or newer */
+ /* Define inline as __inline__ so -pedantic won't produce a warning. */
+ #undef inline
+ #define inline __inline__
+#elif defined(__DECC)
+ #undef inline
+ #define inline __inline
+#elif !(defined(__MWERKS__) || defined(inline))
+ /* Unknown or ancient - disable it */
+ #define inline
#endif
/* Define ourselves a 'forceinline' we can use to more forcefully
diff --git a/base/tiff.mak b/base/tiff.mak
index 24b7543d..dec0e65e 100644
--- a/base/tiff.mak
+++ b/base/tiff.mak
@@ -42,7 +42,7 @@ tiff_1=$(TIFFOBJ)tif_aux.$(OBJ) $(TIFFOBJ)tif_close.$(OBJ) $(TIFFOBJ)tif_codec.$
tiff_2=$(TIFFOBJ)tif_compress.$(OBJ) $(TIFFOBJ)tif_dir.$(OBJ) $(TIFFOBJ)tif_dirinfo.$(OBJ) $(TIFFOBJ)tif_dirread.$(OBJ)
tiff_3=$(TIFFOBJ)tif_dirwrite.$(OBJ) $(TIFFOBJ)tif_dumpmode.$(OBJ) $(TIFFOBJ)tif_error.$(OBJ) $(TIFFOBJ)tif_extension.$(OBJ)
tiff_4=$(TIFFOBJ)tif_fax3.$(OBJ) $(TIFFOBJ)tif_fax3sm.$(OBJ) $(TIFFOBJ)tif_flush.$(OBJ) $(TIFFOBJ)tif_getimage.$(OBJ)
-tiff_5=$(TIFFOBJ)tif_jbig.$(OBJ) $(TIFFOBJ)tif_jpeg.$(OBJ) $(TIFFOBJ)tif_luv.$(OBJ) $(TIFFOBJ)tif_lzw.$(OBJ)
+tiff_5=$(TIFFOBJ)tif_jbig.$(OBJ) $(TIFFOBJ)tif_jpeg.$(OBJ) $(TIFFOBJ)tif_jpeg_12.$(OBJ) $(TIFFOBJ)tif_luv.$(OBJ) $(TIFFOBJ)tif_lzw.$(OBJ) $(TIFFOBJ)tif_webp.$(OBJ)
tiff_6=$(TIFFOBJ)tif_next.$(OBJ) $(TIFFOBJ)tif_ojpeg.$(OBJ) $(TIFFOBJ)tif_open.$(OBJ) $(TIFFOBJ)tif_packbits.$(OBJ)
tiff_7=$(TIFFOBJ)tif_pixarlog.$(OBJ) $(TIFFOBJ)tif_predict.$(OBJ) $(TIFFOBJ)tif_print.$(OBJ) $(TIFFOBJ)tif_read.$(OBJ)
tiff_8=$(TIFFOBJ)tif_strip.$(OBJ) $(TIFFOBJ)tif_swab.$(OBJ) $(TIFFOBJ)tif_thunder.$(OBJ) $(TIFFOBJ)tif_tile.$(OBJ)
@@ -110,6 +110,9 @@ $(TIFFOBJ)tif_getimage.$(OBJ) : $(TIFFSRC)/libtiff/tif_getimage.c $(TIFFDEP)
$(TIFFOBJ)tif_jbig.$(OBJ) : $(TIFFSRC)/libtiff/tif_jbig.c $(TIFFDEP)
$(TIFFCC) $(TIFFO_)tif_jbig.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_jbig.c
+$(TIFFOBJ)tif_jpeg_12.$(OBJ) : $(TIFFSRC)/libtiff/tif_jpeg_12.c $(TIFFDEP) $(JGENDIR)/jconfig.h
+ $(TIFFCC) $(TIFFO_)tif_jpeg_12.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_jpeg_12.c
+
$(TIFFOBJ)tif_jpeg.$(OBJ) : $(TIFFSRC)/libtiff/tif_jpeg.c $(TIFFDEP) $(JGENDIR)/jconfig.h
$(TIFFCC) $(TIFFO_)tif_jpeg.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_jpeg.c
@@ -119,11 +122,14 @@ $(TIFFOBJ)tif_luv.$(OBJ) : $(TIFFSRC)/libtiff/tif_luv.c $(TIFFDEP)
$(TIFFOBJ)tif_lzw.$(OBJ) : $(TIFFSRC)/libtiff/tif_lzw.c $(TIFFDEP)
$(TIFFCC) $(TIFFO_)tif_lzw.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_lzw.c
+$(TIFFOBJ)tif_webp.$(OBJ) : $(TIFFSRC)/libtiff/tif_webp.c $(TIFFDEP)
+ $(TIFFCC) $(TIFFO_)tif_webp.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_webp.c
+
$(TIFFOBJ)tif_next.$(OBJ) : $(TIFFSRC)/libtiff/tif_next.c $(TIFFDEP)
$(TIFFCC) $(TIFFO_)tif_next.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_next.c
$(TIFFOBJ)tif_ojpeg.$(OBJ) : $(TIFFSRC)/libtiff/tif_ojpeg.c $(jconfig_h) $(TIFFDEP)
- $(TIFFCC) $(TIFFO_)tif_ojpeg.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_ojpeg.c
+ $(TIFFCC) $(I_)$(GLI_) $(TIFFO_)tif_ojpeg.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_ojpeg.c
$(TIFFOBJ)tif_open.$(OBJ) : $(TIFFSRC)/libtiff/tif_open.c $(TIFFDEP)
$(TIFFCC) $(TIFFO_)tif_open.$(OBJ) $(C_) $(TIFFSRC)/libtiff/tif_open.c
@@ -241,113 +247,114 @@ $(GLSRC)gstiffio.h:$(GLSRC)gxclthrd.h
$(GLSRC)gstiffio.h:$(GLSRC)gxclpage.h
$(GLSRC)gstiffio.h:$(GLSRC)gxclist.h
$(GLSRC)gstiffio.h:$(GLSRC)gxgstate.h
-$(GLSRC)gstiffio.h:$(GLSRC)gstrans.h
$(GLSRC)gstiffio.h:$(GLSRC)gxline.h
+$(GLSRC)gstiffio.h:$(GLSRC)gstrans.h
$(GLSRC)gstiffio.h:$(GLSRC)gsht1.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcomp.h
$(GLSRC)gstiffio.h:$(GLSRC)math_.h
$(GLSRC)gstiffio.h:$(GLSRC)gdevp14.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcolor2.h
$(GLSRC)gstiffio.h:$(GLSRC)gxpcolor.h
-$(GLSRC)gstiffio.h:$(GLSRC)gx.h
$(GLSRC)gstiffio.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsequivc.h
+$(GLSRC)gstiffio.h:$(GLSRC)gx.h
$(GLSRC)gstiffio.h:$(GLSRC)gxblend.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcomp.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdcolor.h
$(GLSRC)gstiffio.h:$(GLSRC)gdebug.h
$(GLSRC)gstiffio.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxbitfmt.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevbuf.h
$(GLSRC)gstiffio.h:$(GLSRC)gxband.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxbitfmt.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsequivc.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxclipsr.h
$(GLSRC)gstiffio.h:$(GLSRC)gscolor2.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscindex.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevice.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcpath.h
$(GLSRC)gstiffio.h:$(GLSRC)gsht.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcpath.h
$(GLSRC)gstiffio.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstiffio.h:$(GLSRC)gxpcache.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscindex.h
$(GLSRC)gstiffio.h:$(GLSRC)gsptype1.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdevcli.h
$(GLSRC)gstiffio.h:$(GLSRC)gxtext.h
-$(GLSRC)gstiffio.h:$(GLSRC)gspcolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscie.h
$(GLSRC)gstiffio.h:$(GLSRC)gstext.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsnamecl.h
$(GLSRC)gstiffio.h:$(GLSRC)gstparam.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscie.h
$(GLSRC)gstiffio.h:$(GLSRC)gxstate.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcmap.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gstiffio.h:$(GLSRC)gspcolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcspace.h
$(GLSRC)gstiffio.h:$(GLSRC)gsropt.h
$(GLSRC)gstiffio.h:$(GLSRC)gsfunc.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxctable.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsmalloc.h
$(GLSRC)gstiffio.h:$(GLSRC)gxrplane.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcspace.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxiclass.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxclio.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxctable.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsuid.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsimage.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxdda.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxcvalue.h
$(GLSRC)gstiffio.h:$(GLSRC)gsfont.h
$(GLSRC)gstiffio.h:$(GLSRC)gxfmap.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxcvalue.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxpath.h
-$(GLSRC)gstiffio.h:$(GLSRC)gspenum.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxtmap.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsimage.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxiclass.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxftype.h
$(GLSRC)gstiffio.h:$(GLSRC)gxfrac.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxdda.h
-$(GLSRC)gstiffio.h:$(GLSRC)gslparam.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxbcache.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsdcolor.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsrect.h
$(GLSRC)gstiffio.h:$(GLSRC)gscms.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxftype.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsdevice.h
$(GLSRC)gstiffio.h:$(GLSRC)gscspace.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsuid.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxpath.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxbcache.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsdevice.h
$(GLSRC)gstiffio.h:$(GLSRC)gxarith.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstiffio.h:$(GLSRC)gxstdio.h
+$(GLSRC)gstiffio.h:$(GLSRC)gspenum.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsrect.h
+$(GLSRC)gstiffio.h:$(GLSRC)gslparam.h
$(GLSRC)gstiffio.h:$(GLSRC)gsxfont.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxfixed.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsrefct.h
-$(GLSRC)gstiffio.h:$(GLSRC)gscpm.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxclio.h
$(GLSRC)gstiffio.h:$(GLSRC)gsiparam.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsdsrc.h
$(GLSRC)gstiffio.h:$(GLSRC)gsio.h
-$(GLSRC)gstiffio.h:$(GLSRC)gp.h
-$(GLSRC)gstiffio.h:$(GLSRC)memento.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsparam.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsmatrix.h
$(GLSRC)gstiffio.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstiffio.h:$(GLSRC)gscpm.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsparam.h
+$(GLSRC)gstiffio.h:$(GLSRC)gp.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstiffio.h:$(GLSRC)gsstruct.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxsync.h
$(GLSRC)gstiffio.h:$(GLSRC)gsutil.h
$(GLSRC)gstiffio.h:$(GLSRC)gsstrl.h
$(GLSRC)gstiffio.h:$(GLSRC)gdbflags.h
$(GLSRC)gstiffio.h:$(GLSRC)srdline.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsstruct.h
$(GLSRC)gstiffio.h:$(GLSRC)gserrors.h
-$(GLSRC)gstiffio.h:$(GLSRC)gxsync.h
+$(GLSRC)gstiffio.h:$(GLSRC)scommon.h
+$(GLSRC)gstiffio.h:$(GLSRC)memento.h
$(GLSRC)gstiffio.h:$(GLSRC)vmsmath.h
$(GLSRC)gstiffio.h:$(GLSRC)gscsel.h
-$(GLSRC)gstiffio.h:$(GLSRC)scommon.h
$(GLSRC)gstiffio.h:$(GLSRC)gsbitmap.h
$(GLSRC)gstiffio.h:$(GLSRC)gsfname.h
-$(GLSRC)gstiffio.h:$(GLSRC)gsccolor.h
$(GLSRC)gstiffio.h:$(GLSRC)gsstype.h
+$(GLSRC)gstiffio.h:$(GLSRC)stat_.h
+$(GLSRC)gstiffio.h:$(GLSRC)gxtmap.h
$(GLSRC)gstiffio.h:$(GLSRC)gsmemory.h
$(GLSRC)gstiffio.h:$(GLSRC)gpsync.h
-$(GLSRC)gstiffio.h:$(GLSRC)gpgetenv.h
$(GLSRC)gstiffio.h:$(GLSRC)memory_.h
+$(GLSRC)gstiffio.h:$(GLSRC)gpgetenv.h
$(GLSRC)gstiffio.h:$(GLSRC)gslibctx.h
$(GLSRC)gstiffio.h:$(GLSRC)gscdefs.h
+$(GLSRC)gstiffio.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gstiffio.h:$(GLSRC)stdio_.h
$(GLSRC)gstiffio.h:$(GLSRC)gscompt.h
$(GLSRC)gstiffio.h:$(GLSRC)gxcindex.h
-$(GLSRC)gstiffio.h:$(GLSRC)stdint_.h
$(GLSRC)gstiffio.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstiffio.h:$(GLSRC)stdint_.h
+$(GLSRC)gstiffio.h:$(GLSRC)gssprintf.h
$(GLSRC)gstiffio.h:$(GLSRC)gsccode.h
-$(GLSRC)gstiffio.h:$(GLSRC)gs_dll_call.h
-$(GLSRC)gstiffio.h:$(GLSRC)stdio_.h
-$(GLSRC)gstiffio.h:$(GLSRC)gstypes.h
$(GLSRC)gstiffio.h:$(GLSRC)std.h
+$(GLSRC)gstiffio.h:$(GLSRC)gstypes.h
$(GLSRC)gstiffio.h:$(GLSRC)stdpre.h
$(GLSRC)gstiffio.h:$(GLGEN)arch.h
-$(GLSRC)gstiffio.h:$(GLSRC)gssprintf.h
diff --git a/base/unix-dll.mak b/base/unix-dll.mak
index 7ae731f7..0f9fd94c 100644
--- a/base/unix-dll.mak
+++ b/base/unix-dll.mak
@@ -66,21 +66,21 @@ GPDL_SONAME_BASE=lib$(GPDL_SO_BASE)
GS_SOEXT=$(SO_LIB_EXT)
GS_DLLEXT=$(DLL_EXT)
-GS_SONAME=$(GS_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
-GS_SONAME_MAJOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
-GS_SONAME_MAJOR_MINOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
+#GS_SONAME=$(GS_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
+#GS_SONAME_MAJOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
+#GS_SONAME_MAJOR_MINOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
-PCL_SONAME=$(PCL_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
-PCL_SONAME_MAJOR=$(PCL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
-PCL_SONAME_MAJOR_MINOR=$(PCL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
+#PCL_SONAME=$(PCL_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
+#PCL_SONAME_MAJOR=$(PCL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
+#PCL_SONAME_MAJOR_MINOR=$(PCL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
-XPS_SONAME=$(XPS_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
-XPS_SONAME_MAJOR=$(XPS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
-XPS_SONAME_MAJOR_MINOR=$(XPS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
+#XPS_SONAME=$(XPS_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
+#XPS_SONAME_MAJOR=$(XPS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
+#XPS_SONAME_MAJOR_MINOR=$(XPS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
-GPDL_SONAME=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
-GPDL_SONAME_MAJOR=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
-GPDL_SONAME_MAJOR_MINOR=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
+#GPDL_SONAME=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
+#GPDL_SONAME_MAJOR=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
+#GPDL_SONAME_MAJOR_MINOR=$(GPDL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
#LDFLAGS_SO=-shared -Wl,-soname=$(GS_SONAME_MAJOR)
diff --git a/base/unix-gcc.mak b/base/unix-gcc.mak
index a316038f..c27d0e3b 100644
--- a/base/unix-gcc.mak
+++ b/base/unix-gcc.mak
@@ -178,7 +178,7 @@ GPDL=gpdl
XE=
XEAUX=
-PCL_XPS_TARGETS=
+PCL_XPS_PDL_TARGETS=
# Define the directories for debugging and profiling binaries, relative to
# the standard binaries.
@@ -376,9 +376,9 @@ GCFLAGS= -Wall -Wstrict-prototypes -Wundef -Wmissing-declarations -Wmissing-pro
# Define the added flags for standard, debugging, profiling
# and shared object builds.
-CFLAGS_STANDARD= -O2
+CFLAGS_STANDARD= -O2 -DNDEBUG
CFLAGS_DEBUG= -g -O0
-CFLAGS_PROFILE=-pg -O2
+CFLAGS_PROFILE=-pg -O2 -DNDEBUG
CFLAGS_SO=-fPIC
# Define the other compilation flags. Add at most one of the following:
@@ -521,7 +521,7 @@ FEATURE_DEVS=$(GLD)pipe.dev $(GLD)gsnogc.dev $(GLD)htxlib.dev $(GLD)psl3lib.dev
$(GLD)seprlib.dev $(GLD)translib.dev $(GLD)cidlib.dev $(GLD)psf0lib.dev $(GLD)psf1lib.dev\
$(GLD)psf2lib.dev $(GLD)lzwd.dev $(GLD)sicclib.dev \
$(GLD)sjbig2.dev $(GLD)sjpx.dev $(GLD)ramfs.dev \
- $(GLD)pwgd.dev
+ $(GLD)pwgd.dev $(GLD)urfd.dev
diff --git a/base/unixansi.mak b/base/unixansi.mak
index 7376c71c..283552ba 100644
--- a/base/unixansi.mak
+++ b/base/unixansi.mak
@@ -221,9 +221,9 @@ CCLD=$(CC)
# Define the added flags for standard, debugging, and profiling builds.
-CFLAGS_STANDARD=-O
+CFLAGS_STANDARD=-O -DNDEBUG
CFLAGS_DEBUG=-g
-CFLAGS_PROFILE=-pg -O
+CFLAGS_PROFILE=-pg -O -DNDEBUG
# Define the other compilation flags. Add at most one of the following:
# -Aa -w -D_HPUX_SOURCE for the HP 400.
diff --git a/base/unixinst.mak b/base/unixinst.mak
index 32e1f3cc..099d9f2b 100644
--- a/base/unixinst.mak
+++ b/base/unixinst.mak
@@ -95,7 +95,7 @@ acctest.ps align.ps bdftops.ps \
caption.ps cid2code.ps docie.ps \
errpage.ps font2pcl.ps gslp.ps gsnup.ps image-qa.ps \
jispaper.ps landscap.ps lines.ps \
-mkcidfm.ps PDFA_def.ps PDFX_def.ps \
+mkcidfm.ps PDFA_def.ps PDFX_def.ps pdf_info.ps \
pf2afm.ps pfbtopfa.ps ppath.ps \
pphs.ps \
prfont.ps printafm.ps \
diff --git a/base/version.mak b/base/version.mak
index 50911c91..a5694e28 100644
--- a/base/version.mak
+++ b/base/version.mak
@@ -15,10 +15,10 @@
# Major and minor version numbers.
# MINOR0 is different from MINOR only if MINOR is a single digit.
GS_VERSION_MAJOR=9
-GS_VERSION_MINOR=50
-GS_VERSION_MINOR0=50
+GS_VERSION_MINOR=52
+GS_VERSION_MINOR0=52
# Revision date: year x 10000 + month x 100 + day.
-GS_REVISIONDATE=20191015
+GS_REVISIONDATE=20200319
# Derived values
GS_VERSION=$(GS_VERSION_MAJOR)$(GS_VERSION_MINOR0)
GS_DOT_VERSION=$(GS_VERSION_MAJOR).$(GS_VERSION_MINOR0)
diff --git a/base/windows_.h b/base/windows_.h
index 1a0403a2..61009b28 100644
--- a/base/windows_.h
+++ b/base/windows_.h
@@ -19,7 +19,9 @@
#ifndef windows__INCLUDED
# define windows__INCLUDED
+#ifndef STRICT
#define STRICT
+#endif
#ifdef METRO
#include <winapifamily.h>
#endif
diff --git a/freetype/builds/unix/config.guess b/config.guess
index 256083a7..f50dcdb6 100755
--- a/freetype/builds/unix/config.guess
+++ b/config.guess
@@ -2,7 +2,7 @@
# Attempt to guess a canonical system name.
# Copyright 1992-2018 Free Software Foundation, Inc.
-timestamp='2018-03-08'
+timestamp='2018-02-24'
# 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
@@ -1046,7 +1046,11 @@ EOF
echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
exit ;;
x86_64:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ if objdump -f /bin/sh | grep -q elf32-x86-64; then
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
+ else
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ fi
exit ;;
xtensa*:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1469,7 +1473,7 @@ EOF
exit 1
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/freetype/builds/unix/config.sub b/config.sub
index ba37cf99..1d8e98bc 100755
--- a/freetype/builds/unix/config.sub
+++ b/config.sub
@@ -2,7 +2,7 @@
# Configuration validation subroutine script.
# Copyright 1992-2018 Free Software Foundation, Inc.
-timestamp='2018-04-24'
+timestamp='2018-02-22'
# 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
@@ -249,12 +249,12 @@ case $basic_machine in
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
| arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | armv[78][arm] \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| ba \
| be32 | be64 \
| bfin \
- | c4x | c8051 | clipper | csky \
+ | c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| e2k | epiphany \
| fido | fr30 | frv | ft32 \
@@ -335,10 +335,6 @@ case $basic_machine in
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
;;
- m9s12z | m68hcs12z | hcs12z | s12z)
- basic_machine=s12z-unknown
- os=-none
- ;;
ms1)
basic_machine=mt-unknown
;;
@@ -382,7 +378,7 @@ case $basic_machine in
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -1380,7 +1376,7 @@ case $os in
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
@@ -1798,7 +1794,7 @@ echo "$basic_machine$os"
exit
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/configure b/configure
index beaea64a..4f502ea3 100755
--- a/configure
+++ b/configure
@@ -620,6 +620,7 @@ ac_includes_default="\
#endif"
ac_subst_vars='LTLIBOBJS
+ARCH_AUTOCONF_HEADER
AUXEXTRALIBS
LDFLAGSAUX
CFLAGSAUX_PROFILE
@@ -634,6 +635,7 @@ GCFLAGS
DBG_CFLAGS
OPT_CFLAGS
SRCDIR
+MKROMFS_FLAGS
ARCH_ARITH_RSHIFT
ARCH_DIV_NEG_POS_TRUNCATES
ARCH_PTRS_ARE_SIGNED
@@ -644,6 +646,8 @@ ARCH_LOG2_SIZEOF_FLOAT
ARCH_SIZEOF_FLOAT
ARCH_LOG2_SIZEOF_PTR
ARCH_SIZEOF_PTR
+ARCH_SIZEOF_SIZE_T
+ARCH_LOG2_SIZEOF_SIZE_T
ARCH_LOG2_SIZEOF_LONG_LONG
ARCH_LOG2_SIZEOF_LONG
ARCH_LOG2_SIZEOF_INT
@@ -652,14 +656,14 @@ ARCH_LOG2_SIZEOF_CHAR
ARCH_ALIGN_DOUBLE_MOD
ARCH_ALIGN_FLOAT_MOD
ARCH_ALIGN_PTR_MOD
+ARCH_ALIGN_SIZE_T_MOD
ARCH_ALIGN_LONG_MOD
ARCH_ALIGN_INT_MOD
ARCH_ALIGN_SHORT_MOD
CLUSTER_CFLAGS
VERSIONED_PATH
+AUXEXEEXT
AUXDIRPOSTFIX
-SUB_MAKE_OPTION
-ORDER_ONLY
HAVE_BYTESWAP_H
HAVE_BSWAP32
SQRTF_SUBST
@@ -689,6 +693,18 @@ GS_DYNAMIC_LDFLAGS
DYNAMIC_FLAGS
DYNAMIC_DEVS
DYNAMIC_CFLAGS
+GPDL_SONAME_MAJOR_MINOR
+GPDL_SONAME_MAJOR
+GPDL_SONAME
+XPS_SONAME_MAJOR_MINOR
+XPS_SONAME_MAJOR
+XPS_SONAME
+PCL_SONAME_MAJOR_MINOR
+PCL_SONAME_MAJOR
+PCL_SONAME
+GS_SONAME_MAJOR_MINOR
+GS_SONAME_MAJOR
+GS_SONAME
PNG_DEVS
IJS_DEVS
JBIG2_DEVS
@@ -697,7 +713,6 @@ CUPS_DEVS
F_DEVS
P_DEVS
COMPILE_INITS
-GPDL_TARGET_VAR
GPDL_MAK
GPDL_TARGET
GPDL
@@ -729,6 +744,11 @@ CAL_SSE4_2_CFLAGS
CAL_CFLAGS
WITH_CAL
CALSRCDIR
+SURFX_H
+URF_DEV
+URF_INCLUDE
+GPDL_URF_TOP_OBJ
+ENABLEURF
JPXDEVS
SHARE_JPX
JPXDIR
@@ -764,6 +784,7 @@ EXPAT_LIBS
EXPAT_CFLAGS
EXPATDIR
SHARE_EXPAT
+ENABLETIFF
TIFFCFLAGS
LIBTIFFCONFDIR
LIBTIFFDIR
@@ -806,6 +827,8 @@ HAVE_POPEN_PROTO
HAVE_PREAD_PWRITE
ARCH_SIZEOF_GX_COLOR_INDEX
LIBOBJS
+SUB_MAKE_OPTION
+ORDER_ONLY
OBJDIR_BSDMAKE_WORKAROUND
HAVE_SSE2
EGREP
@@ -829,6 +852,14 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
target_alias
host_alias
build_alias
@@ -872,6 +903,7 @@ ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_save_confaux
+enable_auxtools_only
enable_contrib
with_arch_h
enable_sse2
@@ -884,8 +916,8 @@ with_libpaper
enable_fontconfig
enable_dbus
enable_freetype
-enable_fapi
with_ufst
+with_local_zlib
with_libtiff
with_system_libtiff
enable_cups
@@ -898,6 +930,7 @@ with_ijs
with_luratech
with_jbig2dec
enable_openjpeg
+with_urf
with_cal
enable_gtk
with_x
@@ -905,10 +938,10 @@ with_gs
with_pcl
with_xps
with_gpdl
-enable_gpdl
enable_compile_inits
with_drivers
with_driversfile
+enable_hidden_visibility
enable_dynamic
with_fontpath
with_memory_alignment
@@ -916,8 +949,10 @@ enable_bswap32
enable_byteswap_h
with_gnu_make
with_exe_ext
+with_aux_exe_ext
with_versioned_path
enable_cluster
+enable_mkromfs_quiet
'
ac_precious_vars='build_alias
host_alias
@@ -1540,6 +1575,10 @@ _ACEOF
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]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
_ACEOF
fi
@@ -1561,16 +1600,17 @@ Optional Features:
--disable-dbus Do not use dbus to communicate with external
services
--disable-freetype Disable freetype for font rasterization
- --disable-fapi Force use of the (deprecated) Artifex font
- scaler/renderer
--disable-cups Do not include CUPS support
--disable-openjpeg Do not use OpenJPEG for JPX decoding
--disable-gtk Do not build the gtk loader
- --enable-gpdl Add gpdl to the default make target list
--disable-compile-inits Do not compile in initialization files
+ --enable-hidden-visibility
+ hide all shared library symbols which are not part
+ of its public API
--enable-dynamic Enable dynamically loaded drivers
--disable-bswap32 Do not use bswap32 instrinsic
--disable-byteswap-h Do not use byteswap.h functions
+ --enable-mkromfs-quiet Do not emit mkromfs verbose output
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -1584,6 +1624,8 @@ Optional Packages:
--without-libpaper disable libpaper support
--with-ufst=UFST_ROOT_DIR
Use UFST
+ --without-local-zlib do not check for local zlib sources (has no effect
+ on AUX toolchain when cross-building)
--without-libtiff disable use of libtiff
--with-system-libtiff Force using the systems libtiff
--without-pdftoraster Do not include CUPS' pdftoraster filter
@@ -1596,6 +1638,7 @@ Optional Packages:
--without-luratech do not try to use the Luratech library for JBIG2 nor
JPX decoding
--without-jbig2dec disable JBIG2 decode support
+ --without-urf do not try to include URF support
--without-cal do not try to use the CAL library for acceleration
--with-x use the X Window System
--with-gs=NAME name of the Ghostscript executible [[gs]]
@@ -1643,6 +1686,9 @@ Optional Packages:
--without-gnu-make disable GNU make features
--with-exe-ext=EXT set the file name executable extension (must include
any separator e.g. the period in ".exe")
+ --with-aux-exe-ext=EXT set the file name executable extension for auxiliary
+ binaries (must include any separator e.g. the period
+ in ".exe")
--without-versioned-path
Do not use file paths containing the version of GS.
@@ -2788,16 +2834,119 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+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_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+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_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; 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_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+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:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; 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_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+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
+
+
+
CFLAGS="${CFLAGS:=}"
CPPFLAGS="${CPPFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
LDFLAGS="${LDFLAGS:=}"
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
CFLAGSAUX="${CFLAGSAUX:=}"
+ CPPFLAGSAUX="${CPPFLAGSAUX:=}"
LDFLAGSAUX="${LDFLAGSAUX:=}"
else
CFLAGSAUX="${CFLAGSAUX:-$CFLAGS}"
+ CPPFLAGSAUX="${CPPFLAGSAUX:-$CPPFLAGS}"
LDFLAGSAUX="${LDFLAGSAUX:-$LDFLAGS}"
fi
@@ -3770,15 +3919,21 @@ CFLAGSAUX_PROFILETMP="\$(CFLAGS_PROFILE)"
LDFLAGSAUXTMP="\$(LDFLAGS)"
AUXEXTRALIBSTMP="\$(EXTRALIBS)"
-
# purposefully do not include "help" output for this
# Check whether --enable-save_confaux was given.
if test "${enable_save_confaux+set}" = set; then :
enableval=$enable_save_confaux;
fi
+# Check whether --enable-auxtools_only was given.
+if test "${enable_auxtools_only+set}" = set; then :
+ enableval=$enable_auxtools_only;
+fi
+
-if test x"$CCAUX" != x"" ; then
+absolute_source_path=$(cd "$(dirname "$0")" && pwd)
+
+if test x"$host" != x"$build" ; then
# rerun configure for the AUX tools, disabling a load of tests not relevant for CCAUX
olddir=`pwd`
if test x"$enable_save_confaux" = x"yes"; then
@@ -3798,9 +3953,11 @@ if test x"$CCAUX" != x"" ; then
echo $AUXFLAGS_MAK_LINE06 >> $AUXFLAGS_MAK.in
echo $AUXFLAGS_MAK_LINE07 >> $AUXFLAGS_MAK.in
- ../$0 CC="$CCAUX" CFLAGS="$CFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host= --build= --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Begin recursive call to configure script (for auxiliary tools)" >&5
+$as_echo "$as_me: Begin recursive call to configure script (for auxiliary tools)" >&6;}
+ "$absolute_source_path/configure" CC="$CCAUX" CFLAGS="$CFLAGSAUX" CPPFLAGS="$CPPFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host=$build --build=$build --enable-auxtools_only --disable-hidden-visibility --with-local-zlib --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
status=$?
- cp config.log ../configaux.log
+ cp config.log "$olddir/configaux.log"
if test $status -eq 0 ; then
CCAUX=$(grep CCAUX $AUXFLAGS_MAK | sed "s/CCAUX=//g")
GCFLAGSAUXTMP=$(grep GCFLAGSAUX $AUXFLAGS_MAK | sed "s/GCFLAGSAUX=//g")
@@ -3811,14 +3968,17 @@ if test x"$CCAUX" != x"" ; then
LDFLAGSAUXTMP=$(grep LDFLAGSAUX $AUXFLAGS_MAK | sed "s/LDFLAGSAUX=//g")
AUXEXTRALIBSTMP=$(grep AUXEXTRALIBS$ $AUXFLAGS_MAK | sed "s/AUXEXTRALIBS$=//g")
fi
- cd $olddir
+ cd "$olddir"
if test x"$enable_save_confaux" != x"yes"; then
rm -rf $CONFAUXDIR
fi
if test $status -ne 0 ; then
- as_fn_error $status "Recursive call to configure (for auxiliary tools) script failed" "$LINENO" 5
+ as_fn_error $status "Recursive call to configure script failed" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Recursive call to configure script succeeded" >&5
+$as_echo "$as_me: Recursive call to configure script succeeded" >&6;}
fi
fi
@@ -4005,8 +4165,17 @@ fi
#AC_PROG_INSTALL
-
-if test -n "$ac_tool_prefix"; then
+# If the caller has gives a specific pkg-config to use, then
+# use it, and skip the tests.
+if test x"$PKGCONFIG" != x"" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using $PKGCONFIG" >&5
+$as_echo "$as_me: Using $PKGCONFIG" >&6;}
+else
+# this is an unpleasant hack
+# but if we are cross compiling, and there isn't a matching
+# pkconfig for the --host setting, then don't use the 'local'
+# pkconfig at all
+ if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4104,13 +4273,8 @@ else
PKGCONFIG="$ac_cv_path_PKGCONFIG"
fi
-
-# this is an unpleasant hack
-# but if we are cross compiling, and there isn't a matching
-# pkconfig for the --host setting, then don't use the 'local'
-# pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
- # Extract the first word of "pkg-config", so it can be a program name with args.
+ if test x"$host" != x"$build" ; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
@@ -4150,8 +4314,9 @@ $as_echo "no" >&6; }
fi
- if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
- PKGCONFIG=
+ if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
+ PKGCONFIG=
+ fi
fi
fi
@@ -4258,7 +4423,7 @@ fi
# but if we are cross compiling, and there isn't a matching
# pkconfig for the --host setting, then don't use the 'local'
# pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
# 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4315,11 +4480,8 @@ CONTRIBINCLUDE="include $srcdir/contrib/contrib.mak"
INSTALL_CONTRIB="install-contrib-extras"
if test x"$enable_contrib" = x; then
- if test x"$cross_compiling" = x"yes"; then
- enable_contrib=
- else
- case `uname` in
- MINGW*|MSYS*)
+ case $host in
+ *-mingw*|*-msys*|*-cygwin*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling contrib devices" >&5
$as_echo "$as_me: WARNING: disabling contrib devices" >&2;}
enable_contrib=no
@@ -4327,7 +4489,6 @@ $as_echo "$as_me: WARNING: disabling contrib devices" >&2;}
*)
;;
esac
- fi
fi
if test x"$enable_contrib" != x"no"; then
@@ -4348,59 +4509,59 @@ fi
-#AC_CANONICAL_HOST
-
-CC_OPT_FLAGS_TO_TRY="-O"
+CC_OPT_FLAGS_TO_TRY="-O -DNDEBUG"
SET_DT_SONAME="-soname="
+CFLAGS_LARGEFILE=""
-if test x"$cross_compiling" = x"yes"; then
- if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
- CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
- fi
-else
- case `uname` in
- Linux*|GNU*)
+case $host in
+ *-linux*|*-gnu)
if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
;;
- *BSD)
+ *bsd*)
if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
;;
- Darwin*)
+ *-darwin*)
+ if test $ac_cv_c_compiler_gnu = yes; then
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+ CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ fi
+ SET_DT_SONAME=""
+ ;;
+ *-mingw*|*-msys*|*-cygwin*)
if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
SET_DT_SONAME=""
;;
- SunOS)
- CC_OPT_FLAGS_TO_TRY="-O2"
+ *-sun*|*-solaris*)
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+ CFLAGS_LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
# the trailing space is required!
if test $ac_cv_c_compiler_gnu = no; then
SET_DT_SONAME="-h "
fi
if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
else
CC_DBG_FLAGS_TO_TRY="-g -O0"
fi
;;
- AIX)
+ *-aix*)
if test $ac_cv_c_compiler_gnu = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
SET_DT_SONAME="so"
fi
;;
- esac
-fi
+esac
@@ -4409,11 +4570,11 @@ if test $ac_cv_c_compiler_gnu = yes; then
cflags_to_try="-Wall -Wstrict-prototypes -Wundef \
-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \
-fno-strict-aliasing -Werror=declaration-after-statement \
--fno-builtin -fno-common -Werror=return-type"
+-fno-builtin -fno-common -Werror=return-type $CFLAGS_LARGEFILE"
optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
else
- cflags_to_try=
+ cflags_to_try="$CFLAGS_LARGEFILE"
optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
fi
@@ -4473,18 +4634,25 @@ fi
ARCH_CONF_HEADER=
if test x"$with_arch_h" = x""; then
- if test x"$cross_compiling" = x"yes"; then
- ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
- else
- case `uname` in
- Darwin*)
+ case $host in
+ x86_64*-mingw*|x86_64*-msys*|x86_64*-cygwin*)
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
+ ;;
+ *-mingw*|*-msys*|*-cygwin*)
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
+ ;;
+ *-darwin*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/osx-x86-x86_64-ppc-gcc.h"
;;
*)
ARCH_CONF_HEADER=
+ if test x"$host" != x"$build"; then
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
+ else
+ ARCH_CONF_HEADER=
+ fi
;;
esac
- fi
else
ARCH_CONF_HEADER=$with_arch_h
fi
@@ -4500,7 +4668,7 @@ fi
#fi
# NOTE: To correctly disable GCC's strict aliasing with '-fno-strict-aliasing'
-# option, the 'cflags_to_try' have to checked after 'optflags_to_try'.
+# option, the 'cflags_to_try' have to be checked after 'optflags_to_try'.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking supported compiler flags" >&5
$as_echo_n "checking supported compiler flags... " >&6; }
old_cflags=$CFLAGS
@@ -4613,6 +4781,41 @@ CFLAGS="$CFLAGS_SAVED"
$as_echo " ...done." >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler/linker address santizer build warnings support" >&5
+$as_echo_n "checking compiler/linker address santizer build warnings support... " >&6; }
+
+CFLAGS_SANITIZE_TRY="$CFLAGS_SANITIZE -W -Wall -Wno-unused-parameter -Wno-sign-compare -Wno-implicit-fallthrough -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-old-style-declaration -Wno-unused-but-set-parameter"
+CFLAGS_SAVED="$CFLAGS"
+CFLAGS="$CFLAGS_SANITIZE_TRY"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ return(0);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ CFLAGS_SANITIZE="$CFLAGS"
+else
+ echo 'extra warnings not supported'
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+CFLAGS="$CFLAGS_SAVED"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ...done." >&5
+$as_echo " ...done." >&6; }
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_path_GREP+:} false; then :
@@ -5444,12 +5647,26 @@ done
OBJDIR_BSDMAKE_WORKAROUND=obj
+SUB_MAKE_OPTION=
+ORDER_ONLY=""
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if make is GNU make" >&5
+$as_echo_n "checking if make is GNU make... " >&6; }
+if make --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SUB_MAKE_OPTION="-f \$(MAKEFILE)"
+ ORDER_ONLY="|"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ # BSD Make treats obj special and cd into it first
+ OBJDIR_BSDMAKEWORKAOROUND="notobj"
+fi
+
+
+
-case `uname` in
- *BSD)
- OBJDIR_BSDMAKEWORKAOROUND="notobj"
- ;;
-esac
ac_fn_c_check_header_mongrel "$LINENO" "sys/window.h" "ac_cv_header_sys_window_h" "$ac_includes_default"
if test "x$ac_cv_header_sys_window_h" = xyes; then :
@@ -6184,15 +6401,15 @@ fi
-SUBCONFIG_OPTS=""
-
-if test x"$build_alias" != x""; then
- SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
-fi
+SUBCONFIG_OPTS="--build=$build --host=$host"
-if test x"$host_alias" != x""; then
- SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
-fi
+#SUBCONFIG_OPTS=""
+#if test x"$build_alias" != x""; then
+# SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
+#fi
+#if test x"$host_alias" != x""; then
+# SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
+#fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
@@ -6320,6 +6537,7 @@ fi
# if you haven't got pread/pwrite, we can't use multithreading
if test "x$HAVE_PREAD_PWRITE" != "x"; then
if test "$enable_threading" != "no"; then
+ mutex_result="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
if ${ac_cv_lib_pthread_pthread_create+:} false; then :
@@ -6363,8 +6581,8 @@ if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking recursive mutexes......." >&5
-$as_echo_n "checking recursive mutexes.......... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recursive mutexes" >&5
+$as_echo_n "checking for recursive mutexes... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
@@ -6389,6 +6607,7 @@ main ()
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE"
+ mutex_result="PTHREAD_MUTEX_RECURSIVE"
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -6414,10 +6633,13 @@ main ()
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP"
+ mutex_result="PTHREAD_MUTEX_RECURSIVE_NP"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutex_result" >&5
+$as_echo "$mutex_result" >&6; }
fi
fi
@@ -6643,8 +6865,23 @@ else
with_libidn=maybe
fi
+
if test x$with_libidn != xno; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stringprep in -lidn" >&5
+ if test x"$PKGCONFIG" != x""; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn with pkg-config" >&5
+$as_echo_n "checking for libidn with pkg-config... " >&6; }
+ if $PKGCONFIG --exists libidn; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ LIBS="$LIBS `$PKGCONFIG --libs libidn`"
+ HAVE_LIBIDN=-DHAVE_LIBIDN
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ if test -z "$HAVE_LIBIDN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stringprep in -lidn" >&5
$as_echo_n "checking for stringprep in -lidn... " >&6; }
if ${ac_cv_lib_idn_stringprep+:} false; then :
$as_echo_n "(cached) " >&6
@@ -6682,30 +6919,32 @@ fi
$as_echo "$ac_cv_lib_idn_stringprep" >&6; }
if test "x$ac_cv_lib_idn_stringprep" = xyes; then :
- with_libidn=no
- ac_fn_c_check_header_mongrel "$LINENO" "stringprep.h" "ac_cv_header_stringprep_h" "$ac_includes_default"
+ with_libidn=no
+ ac_fn_c_check_header_mongrel "$LINENO" "stringprep.h" "ac_cv_header_stringprep_h" "$ac_includes_default"
if test "x$ac_cv_header_stringprep_h" = xyes; then :
- with_libidn=yes
+
+ with_libidn=yes
+ HAVE_LIBIDN="-DHAVE_LIBIDN"
+ LIBS="$LIBS -lidn"
+
fi
else
- if test x$with_libidn != xmaybe; then
- as_fn_error $? "libidn not found" "$LINENO" 5
- fi
- with_libidn=no
+ if test x$with_libidn != xmaybe; then
+ as_fn_error $? "libidn not found" "$LINENO" 5
+ fi
+ with_libidn=no
fi
+ fi
fi
-HAVE_LIBIDN=''
+
UTF8DEVS=''
if test x$with_libidn != xno; then
- HAVE_LIBIDN=-DHAVE_LIBIDN
- LIBS="$LIBS -lidn"
-
if test x$found_iconv != xno; then
UTF8DEVS='$(PSD)utf8.dev'
fi
@@ -6809,7 +7048,7 @@ $as_echo_n "checking for fontconfig with pkg-config... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
FONTCONFIG_CFLAGS="$CFLAGS `$PKGCONFIG --cflags fontconfig`"
- FONTCONFIG_LIBS="`$PKGCONFIG --libs fontconfig`"
+ FONTCONFIG_LIBS="`$PKGCONFIG --libs-only-l fontconfig`"
HAVE_FONTCONFIG=-DHAVE_FONTCONFIG
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -6972,12 +7211,6 @@ UFST_CFLAGS=
UFST_LIB_EXT=
FAPIUFST_MAK="\$(GLSRCDIR)\$(D)stub.mak"
-# Check whether --enable-fapi was given.
-if test "${enable_fapi+set}" = set; then :
- enableval=$enable_fapi;
-fi
-
-
if test x"$enable_fapi" != xno; then
@@ -7082,7 +7315,7 @@ $as_echo "yes" >&6; }
if test x"$FTSRCDIR" = x"src"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- if test "x$PKGCONFIG" != x; then
+ if test x"$PKGCONFIG" != x""; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for system freetype2 >= 2.4.2 with pkg-config" >&5
$as_echo_n "checking for system freetype2 >= 2.4.2 with pkg-config... " >&6; }
# pkg-config needs the libtool version, which != the freetype2 version <sigh!>
@@ -7091,14 +7324,12 @@ $as_echo_n "checking for system freetype2 >= 2.4.2 with pkg-config... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
FT_CFLAGS="$CFLAGS `$PKGCONFIG --cflags freetype2`"
- FT_LIBS="`$PKGCONFIG --libs freetype2`"
+ FT_LIBS="`$PKGCONFIG --libs-only-l freetype2`"
FT_BRIDGE=1
SHARE_FT=1
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype library source not found...using native rasterizer" >&5
-$as_echo "$as_me: WARNING: freetype library source not found...using native rasterizer" >&2;}
AFS=1
fi
else
@@ -7196,6 +7427,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
fi
+if test x"$FT_BRIDGE" != x"1"; then
+ if test x"$enable_auxtools_only" != x"yes" ; then
+ as_fn_error $? "No usable Freetype source or library found" "$LINENO" 5
+ fi
+fi
+
+
@@ -7207,24 +7445,33 @@ fi
+TIFF_JPEG_INCLUDE=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for local jpeg library source" >&5
+if test x"$enable_auxtools_only" = x"yes" ; then
+ LIBJPEGDIR=
+ SHARE_LIBJPEG=0
+ $as_echo "#define DONT_HAVE_JMEMSYS_H 1" >>confdefs.h
+
+
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local jpeg library source" >&5
$as_echo_n "checking for local jpeg library source... " >&6; }
-LIBJPEGDIR=src
-if test -f $srcdir/jpeg/jpeglib.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: jpeg" >&5
+ LIBJPEGDIR=src
+ if test -f $srcdir/jpeg/jpeglib.h; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: jpeg" >&5
$as_echo "jpeg" >&6; }
- SHARE_LIBJPEG=0
- LIBJPEGDIR=$srcdir/jpeg
-elif test -f $srcdir/jpeg-6b/jpeglib.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: jpeg-6b" >&5
+ SHARE_LIBJPEG=0
+ LIBJPEGDIR=$srcdir/jpeg
+ elif test -f $srcdir/jpeg-6b/jpeglib.h; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: jpeg-6b" >&5
$as_echo "jpeg-6b" >&6; }
- SHARE_LIBJPEG=0
- LIBJPEGDIR=$srcdir/jpeg-6b
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ SHARE_LIBJPEG=0
+ LIBJPEGDIR=$srcdir/jpeg-6b
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_set_defaults in -ljpeg" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_set_defaults in -ljpeg" >&5
$as_echo_n "checking for jpeg_set_defaults in -ljpeg... " >&6; }
if ${ac_cv_lib_jpeg_jpeg_set_defaults+:} false; then :
$as_echo_n "(cached) " >&6
@@ -7262,7 +7509,7 @@ fi
$as_echo "$ac_cv_lib_jpeg_jpeg_set_defaults" >&6; }
if test "x$ac_cv_lib_jpeg_jpeg_set_defaults" = xyes; then :
- for ac_header in jpeglib.h
+ for ac_header in jpeglib.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
if test "x$ac_cv_header_jpeglib_h" = xyes; then :
@@ -7277,31 +7524,46 @@ done
fi
-fi
-if test -z "$SHARE_LIBJPEG"; then
- as_fn_error $? "I wasn't able to find a copy
- of the jpeg library. This is required for compiling
- ghostscript. Please download a copy of the source,
- e.g. from http://www.ijg.org/, unpack it at the
- top level of the gs source tree, and rename
- the directory to 'jpeg'.
- " "$LINENO" 5
-fi
+ fi
+
+ if test x"$LIBJPEGDIR" != x"src" ; then
+ TIFF_JPEG_INCLUDE="$LIBJPEGDIR"
+ fi
+
+ if test -z "$SHARE_LIBJPEG"; then
+ as_fn_error $? "I wasn't able to find a copy
+ of the jpeg library. This is required for compiling
+ ghostscript. Please download a copy of the source,
+ e.g. from http://www.ijg.org/, unpack it at the
+ top level of the gs source tree, and rename
+ the directory to 'jpeg'.
+ " "$LINENO" 5
+ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jmemsys.h" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jmemsys.h" >&5
$as_echo_n "checking for jmemsys.h... " >&6; }
-if test -r $LIBJPEGDIR/jmemsys.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ if test -r $LIBJPEGDIR/jmemsys.h; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
$as_echo "#define DONT_HAVE_JMEMSYS_H 1" >>confdefs.h
+ fi
fi
+# this option is useful if you're cross-compiling and want to use
+# your toolchain's zlib for $host but the local one for $build
+
+# Check whether --with-local-zlib was given.
+if test "${with_local_zlib+set}" = set; then :
+ withval=$with_local_zlib;
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for local zlib source" >&5
$as_echo_n "checking for local zlib source... " >&6; }
# we must define ZLIBDIR regardless because png.mak does a -I$(ZLIBDIR)
@@ -7310,7 +7572,64 @@ ZLIBDIR=src
AUX_SHARED_ZLIB=
ZLIBCFLAGS=""
-if test -d $srcdir/zlib; then
+if test x"$with_local_zlib" = x"no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: skip" >&5
+$as_echo "skip" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5
+$as_echo_n "checking for deflate in -lz... " >&6; }
+if ${ac_cv_lib_z_deflate+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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 deflate ();
+int
+main ()
+{
+return deflate ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_z_deflate=yes
+else
+ ac_cv_lib_z_deflate=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5
+$as_echo "$ac_cv_lib_z_deflate" >&6; }
+if test "x$ac_cv_lib_z_deflate" = xyes; then :
+
+ for ac_header in zlib.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
+ SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"
+fi
+
+done
+
+
+fi
+
+else
+ if test -d $srcdir/zlib; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
SHARE_ZLIB=0
@@ -7319,7 +7638,7 @@ $as_echo "yes" >&6; }
if test x"$ac_cv_c_compiler_gnu" = x"yes"; then
ZLIBCFLAGS="-Wno-write-strings"
fi
-else
+ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5
@@ -7375,6 +7694,7 @@ done
fi
+ fi
fi
if test -z "$SHARE_ZLIB"; then
as_fn_error $? "I did not find a copy of zlib on your system.
@@ -7399,21 +7719,25 @@ fi
-LIBPNGDIR=src
-PNGDEVS=''
-PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for local png library source" >&5
+if test x"$enable_auxtools_only" = x"yes" ; then
+ LIBPNGDIR=""
+ SHARE_LIBPNG=0
+else
+ LIBPNGDIR=src
+ PNGDEVS=''
+ PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local png library source" >&5
$as_echo_n "checking for local png library source... " >&6; }
-if test -f $srcdir/libpng/pngread.c; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ if test -f $srcdir/libpng/pngread.c; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- SHARE_LIBPNG=0
- LIBPNGDIR=$srcdir/libpng
- PNGDEVS="$PNGDEVS_ALL"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ SHARE_LIBPNG=0
+ LIBPNGDIR=$srcdir/libpng
+ PNGDEVS="$PNGDEVS_ALL"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_write_struct in -lpng" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_write_struct in -lpng" >&5
$as_echo_n "checking for png_create_write_struct in -lpng... " >&6; }
if ${ac_cv_lib_png_png_create_write_struct+:} false; then :
$as_echo_n "(cached) " >&6
@@ -7451,7 +7775,7 @@ fi
$as_echo "$ac_cv_lib_png_png_create_write_struct" >&6; }
if test "x$ac_cv_lib_png_png_create_write_struct" = xyes; then :
- for ac_header in png.h
+ for ac_header in png.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default"
if test "x$ac_cv_header_png_h" = xyes; then :
@@ -7459,8 +7783,8 @@ if test "x$ac_cv_header_png_h" = xyes; then :
#define HAVE_PNG_H 1
_ACEOF
- SHARE_LIBPNG=1
- PNGDEVS="$PNGDEVS_ALL"
+ SHARE_LIBPNG=1
+ PNGDEVS="$PNGDEVS_ALL"
else
SHARE_LIBPNG=0
@@ -7473,10 +7797,11 @@ else
SHARE_LIBPNG=0
fi
-fi
-if test -z "$PNGDEVS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: disabling png output devices" >&5
+ fi
+ if test -z "$PNGDEVS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: disabling png output devices" >&5
$as_echo "$as_me: disabling png output devices" >&6;}
+ fi
fi
@@ -7489,28 +7814,33 @@ $as_echo_n "checking for local lcms2mt library source... " >&6; }
LCMS2DIR=src
LCMS2MTDIR=src
+if test x"$enable_auxtools_only" = x"yes" ; then
+ SHARELCMS=0
+ LCMS2DIR=
+ LCMS2MTDIR=
+else
# First check for Artifex version
-LCMS2MTSRC=$srcdir/lcms2mt
-if test -f $LCMS2MTSRC/include/lcms2mt.h; then
+ LCMS2MTSRC=$srcdir/lcms2mt
+ if test -f $LCMS2MTSRC/include/lcms2mt.h; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
SHARELCMS=0
WHICHLCMS=lcms2mt
LCMS2MTDIR=$LCMS2MTSRC
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- # Now check for local lcms2 (non-Artifex)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local lcms2 library source" >&5
+ # Now check for local lcms2 (non-Artifex)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local lcms2 library source" >&5
$as_echo_n "checking for local lcms2 library source... " >&6; }
- LCMS2SRC=$srcdir/lcms2
- if test -f $LCMS2SRC/include/lcms2.h; then
+ LCMS2SRC=$srcdir/lcms2
+ if test -f $LCMS2SRC/include/lcms2.h; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
SHARELCMS=0
WHICHLCMS=lcms2
LCMS2DIR=$LCMS2SRC
- else
+ else
# See if we have system library of lcms2
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -7572,7 +7902,8 @@ fi
if test x$WHICHLCMS = x; then
as_fn_error $? "lcms2 not found, or too old" "$LINENO" 5
fi
- fi
+ fi
+ fi
fi
@@ -7619,6 +7950,7 @@ case "x$with_system_libtiff" in
LIBTIFFCONFDIR=tiff-config
HAVE_LOCAL_LIBTIFF=1
SHARE_LIBTIFF=0
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
# We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
# autoconf macro and b) requires pkg-config on the system, which is
@@ -7695,6 +8027,7 @@ $as_echo "$as_me: Could not find a copy of libtiff on your system. Disabling tif
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
fi
;;
xyes)
@@ -7770,6 +8103,7 @@ fi
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a copy of libtiff on your system. Disabling tiff and xps output devices." >&5
$as_echo "$as_me: Could not find a copy of libtiff on your system. Disabling tiff and xps output devices." >&6;}
@@ -7787,6 +8121,7 @@ $as_echo "yes" >&6; }
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -7845,7 +8180,7 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
if ! test -d "$LIBTIFFCONFDIR" ; then
mkdir "$LIBTIFFCONFDIR"
fi
- cd "$LIBTIFFCONFDIR" && ../"$LIBTIFFDIR"/configure --disable-jbig --disable-lzma $SUBCONFIG_OPTS
+ cd "$LIBTIFFCONFDIR" && "$absolute_source_path/$LIBTIFFDIR/configure" --disable-jbig --disable-lzma --disable-zstd --disable-webp $SUBCONFIG_OPTS
status=$?
if test $status -ne 0 ; then
as_fn_error $status "libtiff configure script failed" "$LINENO" 5
@@ -7855,6 +8190,10 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
if test x"$ac_cv_c_compiler_gnu" = x"yes"; then
TIFFCFLAGS="-Wno-write-strings $CFLAGS_NMI $CFLAGS_NUD -DJPEG_LIB_MK1_OR_12BIT=0"
fi
+ # if we're building with our own libjpeg, or we have another libjpeg available, allow jpeg compression in TIFF
+ if test x"$SHARE_LIBJPEG" = x"1" ; then
+ TIFFCFLAGS="-DJPEG_SUPPORT -DOJPEG_SUPPORT -DJPEG_LIB_MK1_OR_12BIT=0 $TIFFCFLAGS"
+ fi
echo
echo "Continuing with Ghostscript configuration..."
@@ -7865,12 +8204,14 @@ fi
+
+
SHARE_EXPAT=0
EXPATDIR=src
EXPAT_CFLAGS=
EXPAT_LIBS=
-if test x"$with_xps" != x"no" ; then
+if test x"$with_xps" != x"no" -a x"$enable_auxtools_only" != x"yes" ; then
if test -f $srcdir/xps/xps.mak; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for local expat library source" >&5
$as_echo_n "checking for local expat library source... " >&6; }
@@ -7957,7 +8298,6 @@ fi
-
# Check whether --enable-cups was given.
if test "${enable_cups+set}" = set; then :
enableval=$enable_cups;
@@ -8021,11 +8361,27 @@ CUPSVERSION="0"
CUPSPDFTORASTER="0"
CUPS_DIR=""
+cups_hard_fail=0
+
SHARELCUPS=1
SHARELCUPSI=1
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling cups" >&5
+$as_echo "$as_me: WARNING: disabling cups" >&2;}
+ enable_cups=no
+ ;;
+ *)
+ ;;
+esac
+
if ( test -f $srcdir/cups/gdevcups.c ); then
CUPS_DIR="$srcdir/cups"
+# If the user explicitly enabled cups, hard fail if not found
+ if test x"$enable_cups" = x"yes"; then
+ cups_hard_fail=1
+ fi
if test x$enable_cups != xno; then
if test x$with_local_cups != xyes; then
if test x"$CUPSCONFIG" = x""; then
@@ -8127,7 +8483,7 @@ else
CUPSCONFIG="$ac_cv_path_CUPSCONFIG"
fi
- if test x"$cross_compiling" = x"yes"; then
+ if test x"$build" != x"$host"; then
# Extract the first word of "cups-config", so it can be a program name with args.
set dummy cups-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -8172,6 +8528,10 @@ fi
CUPSCONFIG=
fi
fi
+ else
+# We were given a cups-config on the command line, assume the user intends to
+# include cups, and make not finding a hard fail.
+ cups_hard_fail=1
fi
# check for a libcups header
ac_fn_c_check_header_mongrel "$LINENO" "cups/cups.h" "ac_cv_header_cups_cups_h" "$ac_includes_default"
@@ -8253,6 +8613,10 @@ done
CUPSPDFTORASTER="1"
fi
fi
+ else
+ if test x"$cups_hard_fail" = x"1" ; then
+ as_fn_error $? "libcups/libcupsimage not found" "$LINENO" 5
+ fi
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: USING LOCAL CUPS SOURCE" >&5
@@ -8294,17 +8658,15 @@ if test "${with_ijs+set}" = set; then :
fi
-if test x"$cross_compiling" != x"yes"; then
- case `uname` in
- MINGW*|MSYS*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling the ijs device" >&5
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling the ijs device" >&5
$as_echo "$as_me: WARNING: disabling the ijs device" >&2;}
- with_ijs=no
+ with_ijs=no
;;
*)
;;
- esac
-fi
+esac
IJSDIR=src
IJSDEVS=''
@@ -8413,18 +8775,14 @@ $as_echo "yes" >&6; }
SHARE_JBIG2=0
JBIG2DIR=$srcdir/luratech/ldf_jb2
- if test x"$cross_compiling" = x"yes"; then
- if test x"$JBIG2_CFLAGS" != x""; then
- JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char $JBIG2_CFLAGS"
- else
- JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
- fi
+ if test x"$JBIG2_CFLAGS" != x""; then
+ JBIG2_AUTOCONF_CFLAGS="$JBIG2_CFLAGS"
else
- case `uname` in
- Darwin*)
+ case $host in
+ *-darwin*)
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -DMAC -DMAC_OS_X_BUILD -fsigned-char"
;;
- AIX)
+ *-aix*)
if test $ac_cv_c_compiler_gnu = yes; then
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
else
@@ -8630,18 +8988,14 @@ $as_echo "yes" >&6; }
SHARE_JPX=0
JPXDIR=$srcdir/luratech/lwf_jp2
- if test x"$cross_compiling" = x"yes"; then
- if test x"$JPX_CFLAGS" != x""; then
- JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 $JPX_CFLAGS"
- else
- JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DLINUX=1 -DFORTE"
- fi
+ if test x"$JPX_CFLAGS" != x""; then
+ JPX_AUTOCONF_CFLAGS="$JPX_CFLAGS"
else
- case `uname` in
- Darwin*)
+ case $host in
+ *-darwin*)
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DMAC -DMAC_OS_X_BUILD"
;;
- AIX)
+ *-aix*)
if test $ac_cv_c_compiler_gnu = yes; then
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -fsigned-char -DLINUX=1 -DFORTE"
else
@@ -8746,12 +9100,32 @@ done
JPX_AUTOCONF_CFLAGS="-D\"memalign(a,b)=malloc(b)\""
fi
- JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DMUTEX_pthread=0 $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO"
+ CFLAGS_old="$CFLAGS"
+ CFLAGS="-Wno-attributes"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -Wno-attributes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$CFLAGS_old"
+
+ JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DOPJ_STATIC -DMUTEX_pthread=0 $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO"
JPXDEVS='$(PSD)jpx.dev'
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
+ check_for_opj_stream_set_user_data=no
if test x"$PKGCONFIG" != x""; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenJPEG2" >&5
$as_echo_n "checking for OpenJPEG2... " >&6; }
@@ -8765,8 +9139,12 @@ $as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
+ check_for_opj_stream_set_user_data=yes
fi
else
+ check_for_opj_stream_set_user_data=yes
+ fi
+ if test x"$check_for_opj_stream_set_user_data" != x"no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for opj_stream_set_user_data in -lopenjp2" >&5
$as_echo_n "checking for opj_stream_set_user_data in -lopenjp2... " >&6; }
if ${ac_cv_lib_openjp2_opj_stream_set_user_data+:} false; then :
@@ -8822,6 +9200,39 @@ fi
+ENABLEURF=
+URF_DEVS=''
+URF_INCLUDE=
+URF_DEV=
+SURFX_H=
+
+# Check whether --with-urf was given.
+if test "${with_urf+set}" = set; then :
+ withval=$with_urf;
+fi
+
+
+if test x$with_urf != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for URF support" >&5
+$as_echo_n "checking for URF support... " >&6; }
+ if test -d $srcdir/urf; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ENABLEURF="\$(D_)URF_INCLUDED\$(_D)"
+ URF_DEVS='urfgray urfrgb urfcmyk'
+ GPDL_URF_TOP_OBJ=$(GPDLOBJ)/$(GPDL_URF_TOP_OBJ_FILE)
+ URF_INCLUDE=$(I_)$(URFSRCDIR)$(_I)
+ URF_DEV=$(GLD)urfd.dev
+ SURFX_H=SURFX_H=$(URFSRCDIR)$(D)surfx.h
+fi
+fi
+
+
+
+
+
+
+
# Check whether --with-cal was given.
if test "${with_cal+set}" = set; then :
@@ -9053,7 +9464,10 @@ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+if test x"$enable_auxtools_only" = x"yes" ; then
+ no_x=yes
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
$as_echo_n "checking for X... " >&6; }
@@ -9736,6 +10150,7 @@ fi
fi
+fi
X_LDFLAGS=""
X_CFLAGS=""
@@ -9749,9 +10164,14 @@ if test x$no_x != xyes; then
fi
if test ! "$x_libraries" = "NONE" -a ! "$x_libraries" = ""; then
X_LDFLAGS="-L$x_libraries"
- if test "$uname" = "SunOS"; then
+ case $host in
+ *-sun*|*-solaris*)
X_LDFLAGS="$X_LDFLAGS -R$x_libraries"
- fi
+ ;;
+ *)
+ ;;
+ esac
+
fi
if test "$x_includes" = "/usr/include"; then
@@ -10034,16 +10454,6 @@ fi
-# Check whether --enable-gpdl was given.
-if test "${enable_gpdl+set}" = set; then :
- enableval=$enable_gpdl;
- GPDL_TARGET_VAR="\$(GPDL_TARGET)"
-
-fi
-
-
-
-
COMPILE_INITS="1"
# Check whether --enable-compile-inits was given.
if test "${enable_compile_inits+set}" = set; then :
@@ -10055,6 +10465,7 @@ fi
+APPLE_DEVICES_REQUESTED="no"
# Check whether --with-drivers was given.
if test "${with_drivers+set}" = set; then :
@@ -10078,6 +10489,10 @@ if test "x$driversfile" != x; then
drivers="`tr '\n' ',' <$driversfile`"
fi
+if echo $drivers | grep 'APPLE\|iwhi\|iwlo\|iwlq' >/dev/null; then
+ APPLE_DEVICES_REQUESTED="yes"
+fi
+
P_DEVS0=""
F_DEVS0=""
CUPS_DEVS0=""
@@ -10094,6 +10509,7 @@ EPSON_DEVS='eps9high eps9mid epson epsonc escp lp8000 lq850 photoex st800 stcolo
CANON_DEVS='bj10e bj200 bjc600 bjc800 lbp8 lips3 bjcmono bjcgray bjccmyk bjccolor'
LEXMARK_DEVS='lxm5700m lxm3200 lex2050 lex3200 lex5700 lex7000'
BROTHER_DEVS='hl7x0 hl1240 hl1250'
+APPLE_DEVS='appledmp iwhi iwlo iwlq'
IBM_DEVS='ibmpro jetp3852'
OKI_DEVS='oki182 okiibm oki4w'
JAPAN_DEVS='lips4 lips4v ljet4pjl lj4dithp dj505j picty180 lips2p bjc880j pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 md50Mono md50Eco md1xMono escpage lp2000 npdl rpdl'
@@ -10112,7 +10528,7 @@ PBM_DEVS='pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pk
PS_DEVS='psdf psdcmyk psdrgb psdcmyk16 psdrgb16 pdfwrite ps2write eps2write bbox txtwrite inkcov ink_cov psdcmykog fpng pdfimage8 pdfimage24 pdfimage32 PCLm'
# the "display" device isn't an ideal fit in the list below, but it saves adding a "list" for just that one entry
-MISC_FDEVS='ccr cif inferno mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk gprf display'
+MISC_FDEVS='ccr cif inferno mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk display'
XPSDEV=$XPSWRITEDEVICE
@@ -10135,7 +10551,7 @@ while test -n "$drivers"; do
fi
;;
PRINTERS)
- P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS"
+ P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $APPLE_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS $URF_DEVS"
IJS_DEVS0="$IJSDEVS"
if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
P_DEVS0="$P_DEVS0 $OPVP_DEVS"
@@ -10150,6 +10566,10 @@ $as_echo "$as_me: WARNING: Unable to include opvp/oprp driver due to missing or
JBIG2_DEVS="$JBIG2FILEDEVS"
PNG_DEVS0="$PNGDEVS"
;;
+ APPLE)
+ # All Apple printers
+ P_DEVS0="$P_DEVS0 $APPLE_DEVS"
+ ;;
BMP)
# BMP file format
F_DEVS0="$F_DEVS0 $BMP_DEVS"
@@ -10343,6 +10763,14 @@ if test -n "$X11_DEVS0"; then
X11_DEVS=`(for i in $X11_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles 2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' ' '`
fi
+# if the user explicitly requested the Apple devices, then hard fail if they aren't available
+if test x"$APPLE_DEVICES_REQUESTED" = x"yes" ; then
+ APDEVS=`echo $P_DEVS | grep 'APPLE\|iwhi\|iwlo\|iwlq'`
+ if test -z "$APDEVS" ; then
+ as_fn_error $? "Requested Apple device(s) not available (iwhi, iwlo, and/or iwlq)" "$LINENO" 5
+ fi
+fi
+
@@ -10367,23 +10795,41 @@ SO_LIB_EXT=".so"
DLL_EXT=""
SO_LIB_VERSION_SEPARATOR="."
-if test x"$cross_compiling" = x"yes"; then
- DYNAMIC_CFLAGS="-fPIC"
- GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
- PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
- XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
- PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
- if test $ac_cv_c_compiler_gnu = yes; then
- # GCC high level flag
- DYNAMIC_LIBS="-rdynamic"
- else
- DYNAMIC_LIBS=""
- fi
- SO_LIB_EXT=".so"
-else
- case `uname` in
- Linux*|GNU*)
- DYNAMIC_CFLAGS="-fPIC"
+libname1="_SO_BASE)\$(GS_SOEXT)\$(DLL_EXT)"
+libname2="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(DLL_EXT)"
+libname3="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MINOR)\$(DLL_EXT)"
+GS_SONAME="lib\$(GS${libname1}"
+GS_SONAME_MAJOR="lib\$(GS${libname2}"
+GS_SONAME_MAJOR_MINOR="lib\$(GS${libname3}"
+PCL_SONAME="lib\$(PCL${libname1}"
+PCL_SONAME_MAJOR="lib\$(PCL${libname2}"
+PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname3}"
+XPS_SONAME="lib\$(XPS${libname1}"
+XPS_SONAME_MAJOR="lib\$(XPS${libname2}"
+XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname3}"
+GPDL_SONAME="lib\$(GPDL${libname1}"
+GPDL_SONAME_MAJOR="lib\$(GPDL${libname2}"
+GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname3}"
+
+hide_symbols=no
+attr_default=
+attr_hidden=
+_ldflags=
+
+# Check whether --enable-hidden-visibility was given.
+if test "${enable_hidden_visibility+set}" = set; then :
+ enableval=$enable_hidden_visibility; hide_symbols=yes
+fi
+
+
+if test x$hide_symbols = xyes -a $ac_cv_c_compiler_gnu = yes; then
+ attr_default="__attribute__((visibility(\\\"default\\\")))"
+ attr_hidden="__attribute__((visibility(\\\"hidden\\\")))"
+fi
+
+case $host in
+ *-linux*|*-gnu)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
@@ -10396,25 +10842,45 @@ else
fi
SO_LIB_EXT=".so"
;;
- MINGW*|MSYS*)
- DYNAMIC_CFLAGS=""
- GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
+ *-mingw*|*-msys*|*-cygwin*)
+ if test x$hide_symbols = xyes; then
+ attr_default="__declspec(dllexport)"
+ attr_hidden=""
+ else
+ _ldflags="-Wl,--export-all-symbols"
+ fi
+ _ldflags="$_ldflags -Wl,--enable-auto-import"
+ GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
SO_LIB_EXT=""
DLL_EXT=".dll"
SO_LIB_VERSION_SEPARATOR="-"
+ # make sure the import library doesn't link a program against the DLL with the minor version in it
+ GS_SONAME="lib\$(GS${libname1}"
+ GS_SONAME_MAJOR="lib\$(GS${libname3}"
+ GS_SONAME_MAJOR_MINOR="lib\$(GS${libname2}"
+ PCL_SONAME="lib\$(PCL${libname1}"
+ PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+ PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname2}"
+ XPS_SONAME="lib\$(XPS${libname1}"
+ XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+ XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname2}"
+ GPDL_SONAME="lib\$(GPDL${libname1}"
+ GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+ GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}"
;;
- *BSD)
- DYNAMIC_CFLAGS="-fPIC"
+ *bsd*)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
DYNAMIC_LIBS=""
SO_LIB_EXT=".so"
;;
- Darwin*)
+ *-darwin*)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GS_SONAME_MAJOR_MINOR)"
PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(PCL_SONAME_MAJOR_MINOR)"
XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(XPS_SONAME_MAJOR_MINOR)"
@@ -10422,29 +10888,35 @@ else
DYNAMIC_LIBS=""
SO_LIB_EXT=".dylib"
;;
- SunOS)
+ *-sun*|*-solaris*)
if test $ac_cv_c_compiler_gnu = yes; then
- DYNAMIC_CFLAGS="-fPIC"
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
else
- DYNAMIC_CFLAGS="-KPIC"
+ DYNAMIC_CFLAGS="-KPIC $DYNAMIC_CFLAGS"
+ #if test x$hide_symbols = xyes; then
+ # attr_default="__global"
+ # attr_hidden="__hidden"
+ # _ldflags="-xldscope=hidden"
+ #fi
+ # ^^^ untested
fi
- GS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
- PCL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
- XPS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
- PDL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
+ GS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR) $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR) $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR) $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR) $_ldflags"
DYNAMIC_LIBS=""
SO_LIB_EXT=".so"
- ;;
- AIX)
+ ;;
+ *-aix*)
if test $ac_cv_c_compiler_gnu = yes; then
- DYNAMIC_CFLAGS="-fPIC"
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
PDL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
else
- DYNAMIC_CFLAGS=""
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
PCL_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
@@ -10452,48 +10924,73 @@ else
fi
SO_LIB_EXT=".so"
;;
- esac
+esac
+
+if test x$hide_symbols = xyes ; then
+ if test $ac_cv_c_compiler_gnu = yes; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -fvisibility=hidden"
+ fi
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DGSDLLEXPORT=\"$attr_default\""
+ if test "x$FT_BRIDGE" = x1 -a "x$SHARE_FT" = x0 ; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -D\"FT_EXPORT(x)\"=\"$attr_hidden x\""
+ fi
+ if test "x$SHARE_EXPAT" = x0 ; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DXML_STATIC -DXMLIMPORT=\"$attr_hidden\""
+ fi
fi
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --enable-dynamic was given.
if test "${enable_dynamic+set}" = set; then :
enableval=$enable_dynamic;
if test "x$enable_dynamic" != xno; then
- case `uname` in
- Linux*|GNU*)
- INSTALL_SHARED="install-shared"
- if test "x$X_DEVS" != x; then
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- else
- DYNAMIC_DEVS=""
- fi
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ case $host in
+ *-linux*|*-gnu)
+ INSTALL_SHARED="install-shared"
+ if test "x$X_DEVS" != x; then
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ else
+ DYNAMIC_DEVS=""
+ fi
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- *BSD)
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *bsd*)
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- Darwin*)
- INSTALL_SHARED="install-shared"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *-darwin*)
+ INSTALL_SHARED="install-shared"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- SunOS)
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *-sun*|*-solaris*)
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
*)
- as_fn_error $? "Sorry, dynamic driver support not available on this platform!" "$LINENO" 5
+ as_fn_error $? "Sorry, dynamic driver support not available on this platform!" "$LINENO" 5
;;
esac
fi
@@ -11241,7 +11738,7 @@ done
-case `uname -a` in
+case $host in
*sparc*)
GCFLAGS="$GCFLAGS -DGS_USE_MEMORY_HEADER_ID=0"
;;
@@ -11316,19 +11813,13 @@ fi
if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
- if test x"$cross_compiling" = x"no"; then
- case `uname` in
- HP-UX)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- SunOS)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- AIX)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- esac
- fi
+ case $host in
+ *hpux*|*-sun*|*-aix*|*-solaris*)
+ GS_MEMPTR_ALIGNMENT=8
+ ;;
+ *)
+ ;;
+ esac
fi
if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
@@ -11525,12 +12016,9 @@ fi
# mingw, add the same prefix as the VS build uses
# --------------------------------------------------
AUXDIRPOSTFIX=""
-case `uname` in
- MINGW*|MSYS*)
+case $build in
+ *-mingw*|*-msys*|*-cygwin*)
AUXDIRPOSTFIX="_"
- if test x"$cross_compiling" != x"yes"; then
- CFLAGS="-DGS_NO_UTF8=1 $CFLAGS"
- fi
;;
esac
@@ -11541,29 +12029,46 @@ esac
# --------------------------------------------------
EXEEXT=""
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ EXEEXT=".exe"
+ ;;
+ *)
+ ;;
+esac
+
# Check whether --with-exe-ext was given.
if test "${with_exe_ext+set}" = set; then :
- withval=$with_exe_ext;
-else
- exe_ext=
+ withval=$with_exe_ext; EXEEXT="$with_exe_ext"
fi
-if test "x"$with_exe_ext != "x"; then
- EXEEXT="$with_exe_ext"
-else
- if test x"$cross_compiling" != x"yes"; then
- case `uname` in
- MINGW*|MSYS*)
- EXEEXT=".exe"
- ;;
- esac
- fi
+
+
+# --------------------------------------------------
+# Set executable name extention for aux binaries
+# usually empty on Unix-like systems
+# --------------------------------------------------
+AUXEXEEXT=""
+
+case $build in
+ *-mingw*|*-msys*|*-cygwin*)
+ AUXEXEEXT=".exe"
+ ;;
+ *)
+ ;;
+esac
+
+
+# Check whether --with-aux-exe-ext was given.
+if test "${with_aux_exe_ext+set}" = set; then :
+ withval=$with_aux_exe_ext; AUXEXEEXT="$with_aux_exe_ext"
fi
+
# --------------------------------------------------
# Check for disabling of versioned path option.
# By default the versioned path must be enabled!
@@ -11636,7 +12141,7 @@ fi
-if test x"$CCAUX" != x"$CC"; then
+if test x"$build" != x"$host"; then
ilog2()
{
@@ -11760,6 +12265,41 @@ _ACEOF
# The cast to long int works around a bug in the HP C Compiler,
# see AC_CHECK_SIZEOF for more information.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of size_t" >&5
+$as_echo_n "checking alignment of size_t... " >&6; }
+if ${ac_cv_alignof_size_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_size_t" "$ac_includes_default
+#ifndef offsetof
+# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0)
+#endif
+typedef struct { char x; size_t y; } ac__type_alignof_;"; then :
+
+else
+ if test "$ac_cv_type_size_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute alignment of size_t
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_alignof_size_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_size_t" >&5
+$as_echo "$ac_cv_alignof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define ALIGNOF_SIZE_T $ac_cv_alignof_size_t
+_ACEOF
+
+
+ # The cast to long int works around a bug in the HP C Compiler,
+# see AC_CHECK_SIZEOF for more information.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of void *" >&5
$as_echo_n "checking alignment of void *... " >&6; }
if ${ac_cv_alignof_void_p+:} false; then :
@@ -11870,6 +12410,8 @@ _ACEOF
ARCH_ALIGN_LONG_MOD=$ac_cv_alignof_long
+ ARCH_ALIGN_SIZE_T_MOD=$ac_cv_alignof_size_t
+
ARCH_ALIGN_PTR_MOD=$ac_cv_alignof_void_p
ARCH_ALIGN_FLOAT_MOD=$ac_cv_alignof_float
@@ -12046,6 +12588,39 @@ _ACEOF
# 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:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if ${ac_cv_sizeof_size_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_size_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_size_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_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:${as_lineno-$LINENO}: checking size of void *" >&5
$as_echo_n "checking size of void *... " >&6; }
if ${ac_cv_sizeof_void_p+:} false; then :
@@ -12162,6 +12737,12 @@ _ACEOF
ARCH_LOG2_SIZEOF_LONG_LONG=$?
+ ilog2 $ac_cv_sizeof_size_t
+ ARCH_LOG2_SIZEOF_SIZE_T=$?
+
+ ARCH_SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
+
+
ARCH_SIZEOF_PTR=$ac_cv_sizeof_void_p
ilog2 $ac_cv_sizeof_void_p
@@ -12292,6 +12873,14 @@ $as_echo "yes" >&6; }
CONFIG_FILES_LIST="$CONFIG_FILES_LIST $ARCH_AUTOCONF_HEADER:$ARCH_AUTOCONF_HEADER_PROTO"
fi
+# Check whether --enable-mkromfs-quiet was given.
+if test "${enable_mkromfs_quiet+set}" = set; then :
+ enableval=$enable_mkromfs_quiet; MKROMFS_FLAGS="-q $MKROMFS_FLAGS"
+fi
+
+
+
+
SRCDIR="$srcdir"
@@ -12313,7 +12902,7 @@ SRCDIR="$srcdir"
CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
-if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$CCAUX" = x"$CC"; then
+if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$build" = x"$host"; then
CONFIG_FILES_LIST="$CONFIG_FILES_LIST"
fi
diff --git a/configure.ac b/configure.ac
index 3b72367d..698abd30 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,17 +24,21 @@ AC_PREREQ(2.63)
AC_LANG(C)
AC_CONFIG_SRCDIR(psi/gs.c)
+AC_CANONICAL_HOST
+
dnl Inherit compiler flags from the environment...
CFLAGS="${CFLAGS:=}"
CPPFLAGS="${CPPFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
LDFLAGS="${LDFLAGS:=}"
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
CFLAGSAUX="${CFLAGSAUX:=}"
+ CPPFLAGSAUX="${CPPFLAGSAUX:=}"
LDFLAGSAUX="${LDFLAGSAUX:=}"
else
CFLAGSAUX="${CFLAGSAUX:-$CFLAGS}"
+ CPPFLAGSAUX="${CPPFLAGSAUX:-$CPPFLAGS}"
LDFLAGSAUX="${LDFLAGSAUX:-$LDFLAGS}"
fi
@@ -122,11 +126,13 @@ CFLAGSAUX_PROFILETMP="\$(CFLAGS_PROFILE)"
LDFLAGSAUXTMP="\$(LDFLAGS)"
AUXEXTRALIBSTMP="\$(EXTRALIBS)"
-
# purposefully do not include "help" output for this
AC_ARG_ENABLE([save_confaux])
+AC_ARG_ENABLE([auxtools_only])
-if test x"$CCAUX" != x"" ; then
+absolute_source_path=$(cd "$(dirname "$0")" && pwd)
+
+if test x"$host" != x"$build" ; then
# rerun configure for the AUX tools, disabling a load of tests not relevant for CCAUX
olddir=`pwd`
if test x"$enable_save_confaux" = x"yes"; then
@@ -146,9 +152,10 @@ if test x"$CCAUX" != x"" ; then
echo $AUXFLAGS_MAK_LINE06 >> $AUXFLAGS_MAK.in
echo $AUXFLAGS_MAK_LINE07 >> $AUXFLAGS_MAK.in
- ../$0 CC="$CCAUX" CFLAGS="$CFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host= --build= --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
+ AC_MSG_NOTICE([Begin recursive call to configure script (for auxiliary tools)])
+ "$absolute_source_path/configure" CC="$CCAUX" CFLAGS="$CFLAGSAUX" CPPFLAGS="$CPPFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host=$build --build=$build --enable-auxtools_only --disable-hidden-visibility --with-local-zlib --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
status=$?
- cp config.log ../configaux.log
+ cp config.log "$olddir/configaux.log"
if test $status -eq 0 ; then
CCAUX=$(grep CCAUX $AUXFLAGS_MAK | sed "s/CCAUX=//g")
GCFLAGSAUXTMP=$(grep GCFLAGSAUX $AUXFLAGS_MAK | sed "s/GCFLAGSAUX=//g")
@@ -159,14 +166,16 @@ if test x"$CCAUX" != x"" ; then
LDFLAGSAUXTMP=$(grep LDFLAGSAUX $AUXFLAGS_MAK | sed "s/LDFLAGSAUX=//g")
AUXEXTRALIBSTMP=$(grep AUXEXTRALIBS$ $AUXFLAGS_MAK | sed "s/AUXEXTRALIBS$=//g")
fi
- cd $olddir
+ cd "$olddir"
if test x"$enable_save_confaux" != x"yes"; then
rm -rf $CONFAUXDIR
fi
if test $status -ne 0 ; then
- AC_MSG_ERROR([Recursive call to configure (for auxiliary tools) script failed], $status)
+ AC_MSG_ERROR([Recursive call to configure script failed], $status)
+ else
+ AC_MSG_NOTICE([Recursive call to configure script succeeded])
fi
fi
@@ -196,18 +205,22 @@ AC_SUBST(SED_EXTENDED_REGEX_OPT)
AC_PROG_RANLIB
#AC_PROG_INSTALL
-
-dnl pkg-config is used for several tests now...
-AC_PATH_TOOL(PKGCONFIG, pkg-config)
-
+# If the caller has gives a specific pkg-config to use, then
+# use it, and skip the tests.
+if test x"$PKGCONFIG" != x"" ; then
+ AC_MSG_NOTICE([Using $PKGCONFIG])
+else
# this is an unpleasant hack
# but if we are cross compiling, and there isn't a matching
# pkconfig for the --host setting, then don't use the 'local'
# pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
- AC_PATH_PROG(BUILD_PKGCONFIG, pkg-config)
- if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
- PKGCONFIG=
+ AC_PATH_TOOL(PKGCONFIG, pkg-config)
+ if test x"$host" != x"$build" ; then
+ dnl pkg-config is used for several tests now...
+ AC_PATH_PROG(BUILD_PKGCONFIG, pkg-config)
+ if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
+ PKGCONFIG=
+ fi
fi
fi
@@ -217,7 +230,7 @@ AC_PATH_TOOL(STRIP_XE, strip)
# but if we are cross compiling, and there isn't a matching
# pkconfig for the --host setting, then don't use the 'local'
# pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
AC_PATH_PROG(BUILD_STRIP_XE, strip)
if test x"$BUILD_STRIP_XE" = x"$STRIP_XE" ; then
STRIP_XE=
@@ -234,18 +247,14 @@ CONTRIBINCLUDE="include $srcdir/contrib/contrib.mak"
INSTALL_CONTRIB="install-contrib-extras"
if test x"$enable_contrib" = x; then
- if test x"$cross_compiling" = x"yes"; then
- enable_contrib=
- else
- case `uname` in
- MINGW*|MSYS*)
+ case $host in
+ *-mingw*|*-msys*|*-cygwin*)
AC_MSG_WARN([disabling contrib devices])
enable_contrib=no
;;
*)
;;
esac
- fi
fi
if test x"$enable_contrib" != x"no"; then
@@ -269,59 +278,59 @@ dnl --------------------------------------------------
dnl Set build flags based on environment
dnl --------------------------------------------------
-#AC_CANONICAL_HOST
-
-CC_OPT_FLAGS_TO_TRY="-O"
+CC_OPT_FLAGS_TO_TRY="-O -DNDEBUG"
SET_DT_SONAME="-soname="
+CFLAGS_LARGEFILE=""
-if test x"$cross_compiling" = x"yes"; then
- if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
- CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
- fi
-else
- case `uname` in
- Linux*|GNU*)
+case $host in
+ *-linux*|*-gnu)
if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
;;
- *BSD)
+ *bsd*)
if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
;;
- Darwin*)
+ *-darwin*)
if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
fi
SET_DT_SONAME=""
;;
- SunOS)
- CC_OPT_FLAGS_TO_TRY="-O2"
+ *-mingw*|*-msys*|*-cygwin*)
+ if test $ac_cv_prog_gcc = yes; then
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+ CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+ fi
+ SET_DT_SONAME=""
+ ;;
+ *-sun*|*-solaris*)
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+ CFLAGS_LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
# the trailing space is required!
if test $ac_cv_prog_gcc = no; then
SET_DT_SONAME="-h "
fi
if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
else
CC_DBG_FLAGS_TO_TRY="-g -O0"
fi
;;
- AIX)
+ *-aix*)
if test $ac_cv_prog_gcc = yes; then
- CC_OPT_FLAGS_TO_TRY="-O2"
+ CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
SET_DT_SONAME="so"
fi
;;
- esac
-fi
+esac
AC_SUBST(SET_DT_SONAME)
@@ -330,11 +339,11 @@ if test $ac_cv_prog_gcc = yes; then
cflags_to_try="-Wall -Wstrict-prototypes -Wundef \
-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \
-fno-strict-aliasing -Werror=declaration-after-statement \
--fno-builtin -fno-common -Werror=return-type"
+-fno-builtin -fno-common -Werror=return-type $CFLAGS_LARGEFILE"
optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
else
- cflags_to_try=
+ cflags_to_try="$CFLAGS_LARGEFILE"
optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
fi
@@ -368,18 +377,25 @@ AC_ARG_WITH([arch_h], AC_HELP_STRING([--with-arch_h=<arch.h to use>],
ARCH_CONF_HEADER=
if test x"$with_arch_h" = x""; then
- if test x"$cross_compiling" = x"yes"; then
- ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
- else
- case `uname` in
- Darwin*)
+ case $host in
+ x86_64*-mingw*|x86_64*-msys*|x86_64*-cygwin*)
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
+ ;;
+ *-mingw*|*-msys*|*-cygwin*)
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
+ ;;
+ *-darwin*)
ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/osx-x86-x86_64-ppc-gcc.h"
;;
*)
ARCH_CONF_HEADER=
+ if test x"$host" != x"$build"; then
+ ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
+ else
+ ARCH_CONF_HEADER=
+ fi
;;
esac
- fi
else
ARCH_CONF_HEADER=$with_arch_h
fi
@@ -395,7 +411,7 @@ AC_SUBST(ARCH_CONF_HEADER)
#fi
# NOTE: To correctly disable GCC's strict aliasing with '-fno-strict-aliasing'
-# option, the 'cflags_to_try' have to checked after 'optflags_to_try'.
+# option, the 'cflags_to_try' have to be checked after 'optflags_to_try'.
AC_MSG_CHECKING([supported compiler flags])
old_cflags=$CFLAGS
@@ -448,6 +464,27 @@ AC_LINK_IFELSE(
CFLAGS="$CFLAGS_SAVED"
AC_MSG_RESULT([ ...done.])
+
+
+dnl ----------------------------
+dnl check for sanitize build warnings support
+dnl ----------------------------
+AC_MSG_CHECKING([compiler/linker address santizer build warnings support])
+
+CFLAGS_SANITIZE_TRY="$CFLAGS_SANITIZE -W -Wall -Wno-unused-parameter -Wno-sign-compare -Wno-implicit-fallthrough -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-old-style-declaration -Wno-unused-but-set-parameter"
+CFLAGS_SAVED="$CFLAGS"
+CFLAGS="$CFLAGS_SANITIZE_TRY"
+
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <stdio.h>], [
+ return(0);
+ ])],
+ [CFLAGS_SANITIZE="$CFLAGS"], [echo 'extra warnings not supported'])
+
+CFLAGS="$CFLAGS_SAVED"
+AC_MSG_RESULT([ ...done.])
+
+
dnl ----------------------------
dnl check for big/little endian
dnl ----------------------------
@@ -506,18 +543,30 @@ AC_HEADER_STDC
AC_CHECK_HEADERS([errno.h fcntl.h limits.h malloc.h memory.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/time.h sys/times.h syslog.h unistd.h dirent.h ndir.h sys/dir.h sys/ndir.h inttypes.h])
dnl --------------------------------------------------
-dnl Check for *BSD and apply BSD Make workaround
-dnl - BSD Make treats obj special and cd into it first.
+dnl Sun, BSD possibly other makes don't have quite the
+dnl feature set of GNU make. We still prefer GNU make,
+dnl but......
dnl --------------------------------------------------
OBJDIR_BSDMAKE_WORKAROUND=obj
+SUB_MAKE_OPTION=
+ORDER_ONLY=""
+
+AC_MSG_CHECKING(if make is GNU make)
+if make --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then
+ AC_MSG_RESULT(yes)
+ SUB_MAKE_OPTION="-f \$(MAKEFILE)"
+ ORDER_ONLY="|"
+else
+ AC_MSG_RESULT(no)
+ # BSD Make treats obj special and cd into it first
+ OBJDIR_BSDMAKEWORKAOROUND="notobj"
+fi
-case `uname` in
- *BSD)
- OBJDIR_BSDMAKEWORKAOROUND="notobj"
- ;;
-esac
AC_SUBST(OBJDIR_BSDMAKE_WORKAROUND)
+AC_SUBST(ORDER_ONLY)
+AC_SUBST(SUB_MAKE_OPTION)
+
AC_CHECK_HEADER([sys/window.h])
dnl --------------------------------------------------
@@ -658,15 +707,15 @@ dnl Set options that we want to pass into all other
dnl configure scripts we might call
dnl --------------------------------------------------
-SUBCONFIG_OPTS=""
-
-if test x"$build_alias" != x""; then
- SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
-fi
+SUBCONFIG_OPTS="--build=$build --host=$host"
-if test x"$host_alias" != x""; then
- SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
-fi
+#SUBCONFIG_OPTS=""
+#if test x"$build_alias" != x""; then
+# SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
+#fi
+#if test x"$host_alias" != x""; then
+# SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
+#fi
dnl --------------------------------------------------
dnl Check for libraries
@@ -701,11 +750,12 @@ AC_ARG_ENABLE([threading], AC_HELP_STRING([--disable-threading],
# if you haven't got pread/pwrite, we can't use multithreading
if test "x$HAVE_PREAD_PWRITE" != "x"; then
if test "$enable_threading" != "no"; then
+ mutex_result="no"
AC_CHECK_LIB(pthread, pthread_create, [
SYNC=posync;
PTHREAD_LIBS="-lpthread"
])
- AC_MSG_CHECKING([recursive mutexes.......])
+ AC_MSG_CHECKING([for recursive mutexes])
AC_TRY_COMPILE([#include <pthread.h>],
[
static int k = PTHREAD_MUTEX_RECURSIVE;
@@ -719,7 +769,8 @@ if test "x$HAVE_PREAD_PWRITE" != "x"; then
;
return 0;
],
- [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE"],
+ [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE"
+ mutex_result="PTHREAD_MUTEX_RECURSIVE"],
[AC_TRY_COMPILE([#include <pthread.h>],
[
static int k = PTHREAD_MUTEX_RECURSIVE_NP;
@@ -733,7 +784,9 @@ if test "x$HAVE_PREAD_PWRITE" != "x"; then
;
return 0;
],
- [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP"])])
+ [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP"
+ mutex_result="PTHREAD_MUTEX_RECURSIVE_NP"])])
+ AC_MSG_RESULT($mutex_result)
fi
fi
@@ -789,23 +842,38 @@ AC_ARG_WITH(libidn,
[AC_HELP_STRING([--without-libidn],
[Do not use libidn to support Unicode passwords])],,
[with_libidn=maybe])
+
if test x$with_libidn != xno; then
- AC_CHECK_LIB(idn, stringprep, [
- with_libidn=no
- AC_CHECK_HEADER([stringprep.h], [with_libidn=yes])
- ], [
- if test x$with_libidn != xmaybe; then
- AC_MSG_ERROR([libidn not found])
+ if test x"$PKGCONFIG" != x""; then
+ AC_MSG_CHECKING(for libidn with pkg-config)
+ if $PKGCONFIG --exists libidn; then
+ AC_MSG_RESULT(yes)
+ LIBS="$LIBS `$PKGCONFIG --libs libidn`"
+ HAVE_LIBIDN=-DHAVE_LIBIDN
+ else
+ AC_MSG_RESULT(no)
fi
- with_libidn=no
- ])
+ fi
+ if test -z "$HAVE_LIBIDN"; then
+ AC_CHECK_LIB(idn, stringprep, [
+ with_libidn=no
+ AC_CHECK_HEADER([stringprep.h],
+ [
+ with_libidn=yes
+ HAVE_LIBIDN="-DHAVE_LIBIDN"
+ LIBS="$LIBS -lidn"
+ ])
+ ], [
+ if test x$with_libidn != xmaybe; then
+ AC_MSG_ERROR([libidn not found])
+ fi
+ with_libidn=no
+ ])
+ fi
fi
-HAVE_LIBIDN=''
+
UTF8DEVS=''
if test x$with_libidn != xno; then
- HAVE_LIBIDN=-DHAVE_LIBIDN
- LIBS="$LIBS -lidn"
-
if test x$found_iconv != xno; then
UTF8DEVS='$(PSD)utf8.dev'
fi
@@ -853,7 +921,7 @@ if test "$enable_fontconfig" != "no"; then
if $PKGCONFIG --exists fontconfig; then
AC_MSG_RESULT(yes)
FONTCONFIG_CFLAGS="$CFLAGS `$PKGCONFIG --cflags fontconfig`"
- FONTCONFIG_LIBS="`$PKGCONFIG --libs fontconfig`"
+ FONTCONFIG_LIBS="`$PKGCONFIG --libs-only-l fontconfig`"
HAVE_FONTCONFIG=-DHAVE_FONTCONFIG
else
AC_MSG_RESULT(no)
@@ -919,9 +987,6 @@ UFST_CFLAGS=
UFST_LIB_EXT=
FAPIUFST_MAK="\$(GLSRCDIR)\$(D)stub.mak"
-AC_ARG_ENABLE([fapi], AC_HELP_STRING([--disable-fapi],
- [Force use of the (deprecated) Artifex font scaler/renderer]))
-
if test x"$enable_fapi" != xno; then
dnl UFST detection
@@ -989,19 +1054,18 @@ if test x"$enable_fapi" != xno; then
if test x"$FTSRCDIR" = x"src"; then
AC_MSG_RESULT([no])
- if test "x$PKGCONFIG" != x; then
+ if test x"$PKGCONFIG" != x""; then
AC_MSG_CHECKING(for system freetype2 >= 2.4.2 with pkg-config)
# pkg-config needs the libtool version, which != the freetype2 version <sigh!>
# There is a table of corresponding ft2<->libtool numbers in freetype/docs/VERSION.DLL
if $PKGCONFIG --atleast-version=12.0.6 freetype2; then
AC_MSG_RESULT(yes)
FT_CFLAGS="$CFLAGS `$PKGCONFIG --cflags freetype2`"
- FT_LIBS="`$PKGCONFIG --libs freetype2`"
+ FT_LIBS="`$PKGCONFIG --libs-only-l freetype2`"
FT_BRIDGE=1
SHARE_FT=1
else
AC_MSG_RESULT(no)
- AC_MSG_WARN([freetype library source not found...using native rasterizer])
AFS=1
fi
else
@@ -1035,6 +1099,12 @@ if test x"$enable_fapi" != xno; then
fi
fi
+if test x"$FT_BRIDGE" != x"1"; then
+ if test x"$enable_auxtools_only" != x"yes" ; then
+ AC_MSG_ERROR([No usable Freetype source or library found])
+ fi
+fi
+
AC_SUBST(INSERT_UFST_BRIDGE_EQUAL_ONE)
AC_SUBST(UFST_ROOT)
AC_SUBST(UFST_CFLAGS)
@@ -1047,47 +1117,67 @@ AC_SUBST(FTSRCDIR)
AC_SUBST(FT_CFLAGS)
AC_SUBST(FT_LIBS)
-AC_MSG_CHECKING([for local jpeg library source])
-dnl At present, we give the local source priority over the shared
-dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.
-dnl A more sophisticated approach would be to test the shared lib
-dnl to see whether it has already been patched.
-LIBJPEGDIR=src
-if test -f $srcdir/jpeg/jpeglib.h; then
- AC_MSG_RESULT([jpeg])
- SHARE_LIBJPEG=0
- LIBJPEGDIR=$srcdir/jpeg
-elif test -f $srcdir/jpeg-6b/jpeglib.h; then
- AC_MSG_RESULT([jpeg-6b])
- SHARE_LIBJPEG=0
- LIBJPEGDIR=$srcdir/jpeg-6b
-else
- AC_MSG_RESULT([no])
- AC_CHECK_LIB(jpeg, jpeg_set_defaults, [
- AC_CHECK_HEADERS([jpeglib.h], [SHARE_LIBJPEG=1])
- ])
-fi
-if test -z "$SHARE_LIBJPEG"; then
- AC_MSG_ERROR([I wasn't able to find a copy
- of the jpeg library. This is required for compiling
- ghostscript. Please download a copy of the source,
- e.g. from http://www.ijg.org/, unpack it at the
- top level of the gs source tree, and rename
- the directory to 'jpeg'.
- ])
-fi
-AC_SUBST(SHARE_LIBJPEG)
-AC_SUBST(LIBJPEGDIR)
-dnl check for the internal jpeg memory header
-AC_MSG_CHECKING([for jmemsys.h])
-if test -r $LIBJPEGDIR/jmemsys.h; then
- AC_MSG_RESULT([yes])
+TIFF_JPEG_INCLUDE=
+
+if test x"$enable_auxtools_only" = x"yes" ; then
+ LIBJPEGDIR=
+ SHARE_LIBJPEG=0
+ AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1, [])
+ AC_SUBST(SHARE_LIBJPEG)
+ AC_SUBST(LIBJPEGDIR)
else
- AC_MSG_RESULT([no])
- AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1,
- [define if the libjpeg memory system prototypes aren't available])
+ AC_MSG_CHECKING([for local jpeg library source])
+ dnl At present, we give the local source priority over the shared
+ dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.
+ dnl A more sophisticated approach would be to test the shared lib
+ dnl to see whether it has already been patched.
+ LIBJPEGDIR=src
+ if test -f $srcdir/jpeg/jpeglib.h; then
+ AC_MSG_RESULT([jpeg])
+ SHARE_LIBJPEG=0
+ LIBJPEGDIR=$srcdir/jpeg
+ elif test -f $srcdir/jpeg-6b/jpeglib.h; then
+ AC_MSG_RESULT([jpeg-6b])
+ SHARE_LIBJPEG=0
+ LIBJPEGDIR=$srcdir/jpeg-6b
+ else
+ AC_MSG_RESULT([no])
+ AC_CHECK_LIB(jpeg, jpeg_set_defaults, [
+ AC_CHECK_HEADERS([jpeglib.h], [SHARE_LIBJPEG=1])
+ ])
+ fi
+
+ if test x"$LIBJPEGDIR" != x"src" ; then
+ TIFF_JPEG_INCLUDE="$LIBJPEGDIR"
+ fi
+
+ if test -z "$SHARE_LIBJPEG"; then
+ AC_MSG_ERROR([I wasn't able to find a copy
+ of the jpeg library. This is required for compiling
+ ghostscript. Please download a copy of the source,
+ e.g. from http://www.ijg.org/, unpack it at the
+ top level of the gs source tree, and rename
+ the directory to 'jpeg'.
+ ])
+ fi
+ AC_SUBST(SHARE_LIBJPEG)
+ AC_SUBST(LIBJPEGDIR)
+ dnl check for the internal jpeg memory header
+ AC_MSG_CHECKING([for jmemsys.h])
+ if test -r $LIBJPEGDIR/jmemsys.h; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1,
+ [define if the libjpeg memory system prototypes aren't available])
+ fi
fi
+# this option is useful if you're cross-compiling and want to use
+# your toolchain's zlib for $host but the local one for $build
+AC_ARG_WITH([local-zlib], AC_HELP_STRING([--without-local-zlib],
+ [do not check for local zlib sources (has no effect on AUX toolchain when cross-building)]))
+
AC_MSG_CHECKING([for local zlib source])
dnl zlib is needed for language level 3, and libpng
# we must define ZLIBDIR regardless because png.mak does a -I$(ZLIBDIR)
@@ -1096,7 +1186,13 @@ ZLIBDIR=src
AUX_SHARED_ZLIB=
ZLIBCFLAGS=""
-if test -d $srcdir/zlib; then
+if test x"$with_local_zlib" = x"no" ; then
+ AC_MSG_RESULT([skip])
+ AC_CHECK_LIB(z, deflate, [
+ AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
+ ])
+else
+ if test -d $srcdir/zlib; then
AC_MSG_RESULT([yes])
SHARE_ZLIB=0
ZLIBDIR=$srcdir/zlib
@@ -1104,11 +1200,12 @@ if test -d $srcdir/zlib; then
if test x"$ac_cv_prog_gcc" = x"yes"; then
ZLIBCFLAGS="-Wno-write-strings"
fi
-else
+ else
AC_MSG_RESULT([no])
AC_CHECK_LIB(z, deflate, [
AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
])
+ fi
fi
if test -z "$SHARE_ZLIB"; then
AC_MSG_ERROR([I did not find a copy of zlib on your system.
@@ -1136,26 +1233,31 @@ AC_SUBST(ZLIBDIR)
AC_SUBST(FT_SYS_ZLIB)
dnl png for the png output device; it also requires zlib
-LIBPNGDIR=src
-PNGDEVS=''
-PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
-AC_MSG_CHECKING([for local png library source])
-if test -f $srcdir/libpng/pngread.c; then
- AC_MSG_RESULT([yes])
- SHARE_LIBPNG=0
- LIBPNGDIR=$srcdir/libpng
- PNGDEVS="$PNGDEVS_ALL"
+if test x"$enable_auxtools_only" = x"yes" ; then
+ LIBPNGDIR=""
+ SHARE_LIBPNG=0
else
- AC_MSG_RESULT([no])
- AC_CHECK_LIB(png, png_create_write_struct, [
- AC_CHECK_HEADERS(png.h, [
- SHARE_LIBPNG=1
- PNGDEVS="$PNGDEVS_ALL"
- ], [SHARE_LIBPNG=0])
- ], [SHARE_LIBPNG=0], [-lz])
-fi
-if test -z "$PNGDEVS"; then
- AC_MSG_NOTICE([disabling png output devices])
+ LIBPNGDIR=src
+ PNGDEVS=''
+ PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
+ AC_MSG_CHECKING([for local png library source])
+ if test -f $srcdir/libpng/pngread.c; then
+ AC_MSG_RESULT([yes])
+ SHARE_LIBPNG=0
+ LIBPNGDIR=$srcdir/libpng
+ PNGDEVS="$PNGDEVS_ALL"
+ else
+ AC_MSG_RESULT([no])
+ AC_CHECK_LIB(png, png_create_write_struct, [
+ AC_CHECK_HEADERS(png.h, [
+ SHARE_LIBPNG=1
+ PNGDEVS="$PNGDEVS_ALL"
+ ], [SHARE_LIBPNG=0])
+ ], [SHARE_LIBPNG=0], [-lz])
+ fi
+ if test -z "$PNGDEVS"; then
+ AC_MSG_NOTICE([disabling png output devices])
+ fi
fi
AC_SUBST(SHARE_LIBPNG)
AC_SUBST(LIBPNGDIR)
@@ -1167,24 +1269,29 @@ AC_MSG_CHECKING([for local lcms2mt library source])
LCMS2DIR=src
LCMS2MTDIR=src
+if test x"$enable_auxtools_only" = x"yes" ; then
+ SHARELCMS=0
+ LCMS2DIR=
+ LCMS2MTDIR=
+else
# First check for Artifex version
-LCMS2MTSRC=$srcdir/lcms2mt
-if test -f $LCMS2MTSRC/include/lcms2mt.h; then
+ LCMS2MTSRC=$srcdir/lcms2mt
+ if test -f $LCMS2MTSRC/include/lcms2mt.h; then
AC_MSG_RESULT([yes])
SHARELCMS=0
WHICHLCMS=lcms2mt
LCMS2MTDIR=$LCMS2MTSRC
-else
- AC_MSG_RESULT([no])
- # Now check for local lcms2 (non-Artifex)
- AC_MSG_CHECKING([for local lcms2 library source])
- LCMS2SRC=$srcdir/lcms2
- if test -f $LCMS2SRC/include/lcms2.h; then
+ else
+ AC_MSG_RESULT([no])
+ # Now check for local lcms2 (non-Artifex)
+ AC_MSG_CHECKING([for local lcms2 library source])
+ LCMS2SRC=$srcdir/lcms2
+ if test -f $LCMS2SRC/include/lcms2.h; then
AC_MSG_RESULT([yes])
SHARELCMS=0
WHICHLCMS=lcms2
LCMS2DIR=$LCMS2SRC
- else
+ else
# See if we have system library of lcms2
AC_MSG_RESULT([no])
AC_MSG_CHECKING([for system lcms2 library])
@@ -1194,7 +1301,8 @@ else
if test x$WHICHLCMS = x; then
AC_MSG_ERROR([lcms2 not found, or too old])
fi
- fi
+ fi
+ fi
fi
AC_SUBST(SHARELCMS)
@@ -1234,6 +1342,7 @@ case "x$with_system_libtiff" in
LIBTIFFCONFDIR=tiff-config
HAVE_LOCAL_LIBTIFF=1
SHARE_LIBTIFF=0
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
# We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
# autoconf macro and b) requires pkg-config on the system, which is
@@ -1259,6 +1368,7 @@ case "x$with_system_libtiff" in
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
fi
;;
xyes)
@@ -1284,6 +1394,7 @@ case "x$with_system_libtiff" in
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
AC_MSG_NOTICE([Could not find a copy of libtiff on your system. Disabling tiff and xps output devices.])
fi
@@ -1298,6 +1409,7 @@ case "x$with_system_libtiff" in
TIFFDEVS="$TIFFDEVS_ALL"
FAX_DEVS="$FAX_DEVS_ALL"
XPSWRITEDEVICE='xpswrite'
+ ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
else
AC_MSG_RESULT([no])
AC_MSG_NOTICE([Could not find local copy of libtiff. Disabling tiff and xps output devices.])
@@ -1324,7 +1436,7 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
if ! test -d "$LIBTIFFCONFDIR" ; then
mkdir "$LIBTIFFCONFDIR"
fi
- cd "$LIBTIFFCONFDIR" && ../"$LIBTIFFDIR"/configure --disable-jbig --disable-lzma $SUBCONFIG_OPTS
+ cd "$LIBTIFFCONFDIR" && "$absolute_source_path/$LIBTIFFDIR/configure" --disable-jbig --disable-lzma --disable-zstd --disable-webp $SUBCONFIG_OPTS
status=$?
if test $status -ne 0 ; then
AC_MSG_ERROR([libtiff configure script failed], $status)
@@ -1334,6 +1446,10 @@ if test x"$SHARE_LIBTIFF" = x"0" ; then
if test x"$ac_cv_prog_gcc" = x"yes"; then
TIFFCFLAGS="-Wno-write-strings $CFLAGS_NMI $CFLAGS_NUD -DJPEG_LIB_MK1_OR_12BIT=0"
fi
+ # if we're building with our own libjpeg, or we have another libjpeg available, allow jpeg compression in TIFF
+ if test x"$SHARE_LIBJPEG" = x"1" ; then
+ TIFFCFLAGS="-DJPEG_SUPPORT -DOJPEG_SUPPORT -DJPEG_LIB_MK1_OR_12BIT=0 $TIFFCFLAGS"
+ fi
echo
echo "Continuing with Ghostscript configuration..."
@@ -1343,13 +1459,15 @@ AC_SUBST(SHARE_LIBTIFF)
AC_SUBST(LIBTIFFDIR)
AC_SUBST(LIBTIFFCONFDIR)
AC_SUBST(TIFFCFLAGS)
+AC_SUBST(ENABLETIFF)
+
SHARE_EXPAT=0
EXPATDIR=src
EXPAT_CFLAGS=
EXPAT_LIBS=
-if test x"$with_xps" != x"no" ; then
+if test x"$with_xps" != x"no" -a x"$enable_auxtools_only" != x"yes" ; then
if test -f $srcdir/xps/xps.mak; then
AC_MSG_CHECKING([for local expat library source])
if test -f $srcdir/expat/lib/expat.h ; then
@@ -1383,7 +1501,6 @@ if test x"$with_xps" != x"no" ; then
fi
fi
-
AC_SUBST(SHARE_EXPAT)
AC_SUBST(EXPATDIR)
AC_SUBST(EXPAT_CFLAGS)
@@ -1423,21 +1540,40 @@ CUPSVERSION="0"
CUPSPDFTORASTER="0"
CUPS_DIR=""
+cups_hard_fail=0
+
SHARELCUPS=1
SHARELCUPSI=1
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ AC_MSG_WARN([disabling cups])
+ enable_cups=no
+ ;;
+ *)
+ ;;
+esac
+
if ( test -f $srcdir/cups/gdevcups.c ); then
CUPS_DIR="$srcdir/cups"
+# If the user explicitly enabled cups, hard fail if not found
+ if test x"$enable_cups" = x"yes"; then
+ cups_hard_fail=1
+ fi
if test x$enable_cups != xno; then
if test x$with_local_cups != xyes; then
if test x"$CUPSCONFIG" = x""; then
AC_PATH_TOOL(CUPSCONFIG,cups-config)
- if test x"$cross_compiling" = x"yes"; then
+ if test x"$build" != x"$host"; then
AC_PATH_PROG(BUILD_CUPSCONFIG, cups-config)
if test x"$BUILD_CUPSCONFIG" = x"$CUPSCONFIG" ; then
CUPSCONFIG=
fi
fi
+ else
+# We were given a cups-config on the command line, assume the user intends to
+# include cups, and make not finding a hard fail.
+ cups_hard_fail=1
fi
# check for a libcups header
AC_CHECK_HEADER([cups/cups.h],[],[CUPSCONFIG=""])
@@ -1491,6 +1627,10 @@ if ( test -f $srcdir/cups/gdevcups.c ); then
CUPSPDFTORASTER="1"
fi
fi
+ else
+ if test x"$cups_hard_fail" = x"1" ; then
+ AC_MSG_ERROR([libcups/libcupsimage not found])
+ fi
fi
else
AC_MSG_WARN([USING LOCAL CUPS SOURCE])
@@ -1528,16 +1668,14 @@ dnl look for IJS implementation
AC_ARG_WITH([ijs], AC_HELP_STRING([--without-ijs],
[disable IJS driver support]))
-if test x"$cross_compiling" != x"yes"; then
- case `uname` in
- MINGW*|MSYS*)
- AC_MSG_WARN([disabling the ijs device])
- with_ijs=no
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ AC_MSG_WARN([disabling the ijs device])
+ with_ijs=no
;;
*)
;;
- esac
-fi
+esac
dnl set safe defaults
IJSDIR=src
@@ -1589,18 +1727,14 @@ if test x$with_luratech != xno; then
SHARE_JBIG2=0
JBIG2DIR=$srcdir/luratech/ldf_jb2
- if test x"$cross_compiling" = x"yes"; then
- if test x"$JBIG2_CFLAGS" != x""; then
- JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char $JBIG2_CFLAGS"
- else
- JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
- fi
+ if test x"$JBIG2_CFLAGS" != x""; then
+ JBIG2_AUTOCONF_CFLAGS="$JBIG2_CFLAGS"
else
- case `uname` in
- Darwin*)
+ case $host in
+ *-darwin*)
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -DMAC -DMAC_OS_X_BUILD -fsigned-char"
;;
- AIX)
+ *-aix*)
if test $ac_cv_prog_gcc = yes; then
JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
else
@@ -1734,18 +1868,14 @@ if test x$with_luratech != xno; then
SHARE_JPX=0
JPXDIR=$srcdir/luratech/lwf_jp2
- if test x"$cross_compiling" = x"yes"; then
- if test x"$JPX_CFLAGS" != x""; then
- JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 $JPX_CFLAGS"
- else
- JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DLINUX=1 -DFORTE"
- fi
+ if test x"$JPX_CFLAGS" != x""; then
+ JPX_AUTOCONF_CFLAGS="$JPX_CFLAGS"
else
- case `uname` in
- Darwin*)
+ case $host in
+ *-darwin*)
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DMAC -DMAC_OS_X_BUILD"
;;
- AIX)
+ *-aix*)
if test $ac_cv_prog_gcc = yes; then
JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -fsigned-char -DLINUX=1 -DFORTE"
else
@@ -1815,11 +1945,17 @@ if test "x$JPX_DECODER" = "x"; then
JPX_AUTOCONF_CFLAGS="-D\"memalign(a,b)=malloc(b)\""
fi
- JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DMUTEX_pthread=0 $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO"
+ CFLAGS_old="$CFLAGS"
+ CFLAGS="-Wno-attributes"
+ AC_TRY_COMPILE([], [return 0;], [JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -Wno-attributes"])
+ CFLAGS="$CFLAGS_old"
+
+ JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DOPJ_STATIC -DMUTEX_pthread=0 $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO"
JPXDEVS='$(PSD)jpx.dev'
else
AC_MSG_RESULT([no])
+ check_for_opj_stream_set_user_data=no
if test x"$PKGCONFIG" != x""; then
AC_MSG_CHECKING(for OpenJPEG2)
if $PKGCONFIG --exists libopenjp2; then
@@ -1830,8 +1966,12 @@ if test "x$JPX_DECODER" = "x"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
+ check_for_opj_stream_set_user_data=yes
fi
else
+ check_for_opj_stream_set_user_data=yes
+ fi
+ if test x"$check_for_opj_stream_set_user_data" != x"no"; then
AC_CHECK_LIB(openjp2, opj_stream_set_user_data,
[JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO";
JPX_AUTOCONF_LIBS="-lopenjp2";
@@ -1849,6 +1989,33 @@ AC_SUBST(JPXDIR)
AC_SUBST(SHARE_JPX)
AC_SUBST(JPXDEVS)
+ENABLEURF=
+URF_DEVS=''
+URF_INCLUDE=
+URF_DEV=
+SURFX_H=
+AC_ARG_WITH([urf], AC_HELP_STRING([--without-urf],
+ [do not try to include URF support]))
+
+if test x$with_urf != xno; then
+ AC_MSG_CHECKING([for URF support])
+ if test -d $srcdir/urf; then
+ AC_MSG_RESULT([yes])
+ ENABLEURF="\$(D_)URF_INCLUDED\$(_D)"
+ URF_DEVS='urfgray urfrgb urfcmyk'
+ GPDL_URF_TOP_OBJ=$(GPDLOBJ)/$(GPDL_URF_TOP_OBJ_FILE)
+ URF_INCLUDE=$(I_)$(URFSRCDIR)$(_I)
+ URF_DEV=$(GLD)urfd.dev
+ SURFX_H=SURFX_H=$(URFSRCDIR)$(D)surfx.h
+fi
+fi
+
+AC_SUBST(ENABLEURF)
+AC_SUBST(GPDL_URF_TOP_OBJ)
+AC_SUBST(URF_INCLUDE)
+AC_SUBST(URF_DEV)
+AC_SUBST(SURFX_H)
+
AC_ARG_WITH([cal], AC_HELP_STRING([--without-cal],
[do not try to use the CAL library for acceleration]))
@@ -2015,7 +2182,11 @@ AC_SUBST(SOC_LIBS)
AC_SUBST(SOC_LOADER)
dnl optional X11 for display devices
-AC_PATH_XTRA
+if test x"$enable_auxtools_only" = x"yes" ; then
+ no_x=yes
+else
+ AC_PATH_XTRA
+fi
X_LDFLAGS=""
X_CFLAGS=""
@@ -2029,9 +2200,14 @@ if test x$no_x != xyes; then
fi
if test ! "$x_libraries" = "NONE" -a ! "$x_libraries" = ""; then
X_LDFLAGS="-L$x_libraries"
- if test "$uname" = "SunOS"; then
+ case $host in
+ *-sun*|*-solaris*)
X_LDFLAGS="$X_LDFLAGS -R$x_libraries"
- fi
+ ;;
+ *)
+ ;;
+ esac
+
fi
if test "$x_includes" = "/usr/include"; then
@@ -2156,14 +2332,6 @@ AC_SUBST(GPDL_TARGET)
AC_SUBST(GPDL_MAK)
-AC_ARG_ENABLE([gpdl], AC_HELP_STRING([--enable-gpdl],
- [Add gpdl to the default make target list]),
-[
- GPDL_TARGET_VAR="\$(GPDL_TARGET)"
-])
-
-AC_SUBST(GPDL_TARGET_VAR)
-
dnl do we compile the postscript initialization files into Ghostscript?
COMPILE_INITS="1"
AC_ARG_ENABLE([compile-inits], AC_HELP_STRING([--disable-compile-inits],
@@ -2174,6 +2342,7 @@ AC_ARG_ENABLE([compile-inits], AC_HELP_STRING([--disable-compile-inits],
AC_SUBST(COMPILE_INITS)
dnl look for drivers to compile...
+APPLE_DEVICES_REQUESTED="no"
AC_ARG_WITH(drivers,
[ --with-drivers=LIST Drivers to support, separated by commas.
Either list the drivers or use aliases:
@@ -2216,6 +2385,10 @@ if test "x$driversfile" != x; then
drivers="`tr '\n' ',' <$driversfile`"
fi
+if echo $drivers | grep 'APPLE\|iwhi\|iwlo\|iwlq' >/dev/null; then
+ APPLE_DEVICES_REQUESTED="yes"
+fi
+
dnl Check which drivers we'd like to support.
P_DEVS0=""
F_DEVS0=""
@@ -2234,6 +2407,7 @@ EPSON_DEVS='eps9high eps9mid epson epsonc escp lp8000 lq850 photoex st800 stcolo
CANON_DEVS='bj10e bj200 bjc600 bjc800 lbp8 lips3 bjcmono bjcgray bjccmyk bjccolor'
LEXMARK_DEVS='lxm5700m lxm3200 lex2050 lex3200 lex5700 lex7000'
BROTHER_DEVS='hl7x0 hl1240 hl1250'
+APPLE_DEVS='appledmp iwhi iwlo iwlq'
IBM_DEVS='ibmpro jetp3852'
OKI_DEVS='oki182 okiibm oki4w'
JAPAN_DEVS='lips4 lips4v ljet4pjl lj4dithp dj505j picty180 lips2p bjc880j pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 md50Mono md50Eco md1xMono escpage lp2000 npdl rpdl'
@@ -2253,7 +2427,7 @@ PBM_DEVS='pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pk
PS_DEVS='psdf psdcmyk psdrgb psdcmyk16 psdrgb16 pdfwrite ps2write eps2write bbox txtwrite inkcov ink_cov psdcmykog fpng pdfimage8 pdfimage24 pdfimage32 PCLm'
# the "display" device isn't an ideal fit in the list below, but it saves adding a "list" for just that one entry
-MISC_FDEVS='ccr cif inferno mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk gprf display'
+MISC_FDEVS='ccr cif inferno mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk display'
XPSDEV=$XPSWRITEDEVICE
@@ -2276,7 +2450,7 @@ while test -n "$drivers"; do
fi
;;
PRINTERS)
- P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS"
+ P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $APPLE_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS $URF_DEVS"
IJS_DEVS0="$IJSDEVS"
if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
P_DEVS0="$P_DEVS0 $OPVP_DEVS"
@@ -2290,6 +2464,10 @@ while test -n "$drivers"; do
JBIG2_DEVS="$JBIG2FILEDEVS"
PNG_DEVS0="$PNGDEVS"
;;
+ APPLE)
+ # All Apple printers
+ P_DEVS0="$P_DEVS0 $APPLE_DEVS"
+ ;;
BMP)
# BMP file format
F_DEVS0="$F_DEVS0 $BMP_DEVS"
@@ -2481,6 +2659,14 @@ if test -n "$X11_DEVS0"; then
X11_DEVS=`(for i in $X11_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles 2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' ' '`
fi
+# if the user explicitly requested the Apple devices, then hard fail if they aren't available
+if test x"$APPLE_DEVICES_REQUESTED" = x"yes" ; then
+ APDEVS=`echo $P_DEVS | grep 'APPLE\|iwhi\|iwlo\|iwlq'`
+ if test -z "$APDEVS" ; then
+ AC_MSG_ERROR([Requested Apple device(s) not available (iwhi, iwlo, and/or iwlq)])
+ fi
+fi
+
AC_SUBST(P_DEVS)
AC_SUBST(F_DEVS)
AC_SUBST(CUPS_DEVS)
@@ -2506,23 +2692,40 @@ SO_LIB_EXT=".so"
DLL_EXT=""
SO_LIB_VERSION_SEPARATOR="."
-if test x"$cross_compiling" = x"yes"; then
- DYNAMIC_CFLAGS="-fPIC"
- GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
- PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
- XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
- PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
- if test $ac_cv_prog_gcc = yes; then
- # GCC high level flag
- DYNAMIC_LIBS="-rdynamic"
- else
- DYNAMIC_LIBS=""
- fi
- SO_LIB_EXT=".so"
-else
- case `uname` in
- Linux*|GNU*)
- DYNAMIC_CFLAGS="-fPIC"
+libname1="_SO_BASE)\$(GS_SOEXT)\$(DLL_EXT)"
+libname2="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(DLL_EXT)"
+libname3="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MINOR)\$(DLL_EXT)"
+GS_SONAME="lib\$(GS${libname1}"
+GS_SONAME_MAJOR="lib\$(GS${libname2}"
+GS_SONAME_MAJOR_MINOR="lib\$(GS${libname3}"
+PCL_SONAME="lib\$(PCL${libname1}"
+PCL_SONAME_MAJOR="lib\$(PCL${libname2}"
+PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname3}"
+XPS_SONAME="lib\$(XPS${libname1}"
+XPS_SONAME_MAJOR="lib\$(XPS${libname2}"
+XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname3}"
+GPDL_SONAME="lib\$(GPDL${libname1}"
+GPDL_SONAME_MAJOR="lib\$(GPDL${libname2}"
+GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname3}"
+
+hide_symbols=no
+attr_default=
+attr_hidden=
+_ldflags=
+
+AC_ARG_ENABLE([hidden-visibility],
+ AC_HELP_STRING([--enable-hidden-visibility],
+ [hide all shared library symbols which are not part of its public API]),
+ [hide_symbols=yes])
+
+if test x$hide_symbols = xyes -a $ac_cv_prog_gcc = yes; then
+ attr_default="__attribute__((visibility(\\\"default\\\")))"
+ attr_hidden="__attribute__((visibility(\\\"hidden\\\")))"
+fi
+
+case $host in
+ *-linux*|*-gnu)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
@@ -2535,25 +2738,45 @@ else
fi
SO_LIB_EXT=".so"
;;
- MINGW*|MSYS*)
- DYNAMIC_CFLAGS=""
- GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
- PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
+ *-mingw*|*-msys*|*-cygwin*)
+ if test x$hide_symbols = xyes; then
+ attr_default="__declspec(dllexport)"
+ attr_hidden=""
+ else
+ _ldflags="-Wl,--export-all-symbols"
+ fi
+ _ldflags="$_ldflags -Wl,--enable-auto-import"
+ GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
SO_LIB_EXT=""
DLL_EXT=".dll"
SO_LIB_VERSION_SEPARATOR="-"
+ # make sure the import library doesn't link a program against the DLL with the minor version in it
+ GS_SONAME="lib\$(GS${libname1}"
+ GS_SONAME_MAJOR="lib\$(GS${libname3}"
+ GS_SONAME_MAJOR_MINOR="lib\$(GS${libname2}"
+ PCL_SONAME="lib\$(PCL${libname1}"
+ PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+ PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname2}"
+ XPS_SONAME="lib\$(XPS${libname1}"
+ XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+ XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname2}"
+ GPDL_SONAME="lib\$(GPDL${libname1}"
+ GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+ GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}"
;;
- *BSD)
- DYNAMIC_CFLAGS="-fPIC"
+ *bsd*)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
DYNAMIC_LIBS=""
SO_LIB_EXT=".so"
;;
- Darwin*)
+ *-darwin*)
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GS_SONAME_MAJOR_MINOR)"
PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(PCL_SONAME_MAJOR_MINOR)"
XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(XPS_SONAME_MAJOR_MINOR)"
@@ -2561,29 +2784,35 @@ else
DYNAMIC_LIBS=""
SO_LIB_EXT=".dylib"
;;
- SunOS)
+ *-sun*|*-solaris*)
if test $ac_cv_prog_gcc = yes; then
- DYNAMIC_CFLAGS="-fPIC"
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
else
- DYNAMIC_CFLAGS="-KPIC"
+ DYNAMIC_CFLAGS="-KPIC $DYNAMIC_CFLAGS"
+ #if test x$hide_symbols = xyes; then
+ # attr_default="__global"
+ # attr_hidden="__hidden"
+ # _ldflags="-xldscope=hidden"
+ #fi
+ # ^^^ untested
fi
- GS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
- PCL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
- XPS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
- PDL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
+ GS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR) $_ldflags"
+ PCL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR) $_ldflags"
+ XPS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR) $_ldflags"
+ PDL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR) $_ldflags"
DYNAMIC_LIBS=""
SO_LIB_EXT=".so"
- ;;
- AIX)
+ ;;
+ *-aix*)
if test $ac_cv_prog_gcc = yes; then
- DYNAMIC_CFLAGS="-fPIC"
+ DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
PCL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
XPS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
PDL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
else
- DYNAMIC_CFLAGS=""
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS"
GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
GS_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
PCL_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
@@ -2591,48 +2820,73 @@ else
fi
SO_LIB_EXT=".so"
;;
- esac
+esac
+
+if test x$hide_symbols = xyes ; then
+ if test $ac_cv_prog_gcc = yes; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -fvisibility=hidden"
+ fi
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DGSDLLEXPORT=\"$attr_default\""
+ if test "x$FT_BRIDGE" = x1 -a "x$SHARE_FT" = x0 ; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -D\"FT_EXPORT(x)\"=\"$attr_hidden x\""
+ fi
+ if test "x$SHARE_EXPAT" = x0 ; then
+ DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DXML_STATIC -DXMLIMPORT=\"$attr_hidden\""
+ fi
fi
+AC_SUBST(GS_SONAME)
+AC_SUBST(GS_SONAME_MAJOR)
+AC_SUBST(GS_SONAME_MAJOR_MINOR)
+AC_SUBST(PCL_SONAME)
+AC_SUBST(PCL_SONAME_MAJOR)
+AC_SUBST(PCL_SONAME_MAJOR_MINOR)
+AC_SUBST(XPS_SONAME)
+AC_SUBST(XPS_SONAME_MAJOR)
+AC_SUBST(XPS_SONAME_MAJOR_MINOR)
+AC_SUBST(GPDL_SONAME)
+AC_SUBST(GPDL_SONAME_MAJOR)
+AC_SUBST(GPDL_SONAME_MAJOR_MINOR)
+
AC_ARG_ENABLE([dynamic], AC_HELP_STRING([--enable-dynamic],
[Enable dynamically loaded drivers]),
[
if test "x$enable_dynamic" != xno; then
- case `uname` in
- Linux*|GNU*)
- INSTALL_SHARED="install-shared"
- if test "x$X_DEVS" != x; then
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- else
- DYNAMIC_DEVS=""
- fi
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ case $host in
+ *-linux*|*-gnu)
+ INSTALL_SHARED="install-shared"
+ if test "x$X_DEVS" != x; then
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ else
+ DYNAMIC_DEVS=""
+ fi
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- *BSD)
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *bsd*)
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- Darwin*)
- INSTALL_SHARED="install-shared"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- X11_DEVS=""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *-darwin*)
+ INSTALL_SHARED="install-shared"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ X11_DEVS=""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
- SunOS)
- DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
- DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
- OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
- DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+ *-sun*|*-solaris*)
+ DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+ DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+ OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+ DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
;;
*)
- AC_MSG_ERROR([Sorry, dynamic driver support not available on this platform!])
+ AC_MSG_ERROR([Sorry, dynamic driver support not available on this platform!])
;;
esac
fi
@@ -2735,7 +2989,7 @@ dnl --------------------------------------------------
dnl disable the memory header ID code on SPARC
dnl --------------------------------------------------
-case `uname -a` in
+case $host in
*sparc*)
GCFLAGS="$GCFLAGS -DGS_USE_MEMORY_HEADER_ID=0"
;;
@@ -2812,19 +3066,13 @@ AC_ARG_WITH(memory-alignment,
[GS_MEMPTR_ALIGNMENT=$with_memory_alignment],[GS_MEMPTR_ALIGNMENT=check])
if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
- if test x"$cross_compiling" = x"no"; then
- case `uname` in
- HP-UX)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- SunOS)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- AIX)
- GS_MEMPTR_ALIGNMENT=8
- ;;
- esac
- fi
+ case $host in
+ *hpux*|*-sun*|*-aix*|*-solaris*)
+ GS_MEMPTR_ALIGNMENT=8
+ ;;
+ *)
+ ;;
+ esac
fi
if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
@@ -2948,12 +3196,9 @@ AC_SUBST(SUB_MAKE_OPTION)
# mingw, add the same prefix as the VS build uses
# --------------------------------------------------
AUXDIRPOSTFIX=""
-case `uname` in
- MINGW*|MSYS*)
+case $build in
+ *-mingw*|*-msys*|*-cygwin*)
AUXDIRPOSTFIX="_"
- if test x"$cross_compiling" != x"yes"; then
- CFLAGS="-DGS_NO_UTF8=1 $CFLAGS"
- fi
;;
esac
AC_SUBST(AUXDIRPOSTFIX)
@@ -2964,24 +3209,41 @@ AC_SUBST(AUXDIRPOSTFIX)
# --------------------------------------------------
EXEEXT=""
-AC_ARG_WITH([exe-ext], AC_HELP_STRING([--with-exe-ext=EXT],
- [set the file name executable extension (must include any separator e.g. the period in ".exe")]),[], [exe_ext=])
+case $host in
+ *-mingw*|*-msys*|*-cygwin*)
+ EXEEXT=".exe"
+ ;;
+ *)
+ ;;
+esac
-if test "x"$with_exe_ext != "x"; then
- EXEEXT="$with_exe_ext"
-else
- if test x"$cross_compiling" != x"yes"; then
- case `uname` in
- MINGW*|MSYS*)
- EXEEXT=".exe"
- ;;
- esac
- fi
-fi
+AC_ARG_WITH([exe-ext], AC_HELP_STRING([--with-exe-ext=EXT],
+ [set the file name executable extension (must include any separator e.g. the period in ".exe")]),
+ [EXEEXT="$with_exe_ext"])
AC_SUBST(EXEEXT)
# --------------------------------------------------
+# Set executable name extention for aux binaries
+# usually empty on Unix-like systems
+# --------------------------------------------------
+AUXEXEEXT=""
+
+case $build in
+ *-mingw*|*-msys*|*-cygwin*)
+ AUXEXEEXT=".exe"
+ ;;
+ *)
+ ;;
+esac
+
+AC_ARG_WITH([aux-exe-ext], AC_HELP_STRING([--with-aux-exe-ext=EXT],
+ [set the file name executable extension for auxiliary binaries (must include any separator e.g. the period in ".exe")]),
+ [AUXEXEEXT="$with_aux_exe_ext"])
+
+AC_SUBST(AUXEXEEXT)
+
+# --------------------------------------------------
# Check for disabling of versioned path option.
# By default the versioned path must be enabled!
# Using this option is user's own risk & responsibility.
@@ -3034,7 +3296,7 @@ fi
AC_SUBST(CLUSTER_CFLAGS)
-if test x"$CCAUX" != x"$CC"; then
+if test x"$build" != x"$host"; then
ilog2()
{
@@ -3054,6 +3316,7 @@ if test x"$CCAUX" != x"$CC"; then
AC_CHECK_ALIGNOF([short])
AC_CHECK_ALIGNOF([int])
AC_CHECK_ALIGNOF([long])
+ AC_CHECK_ALIGNOF([size_t])
AC_CHECK_ALIGNOF([void *])
AC_CHECK_ALIGNOF([float])
AC_CHECK_ALIGNOF([double])
@@ -3061,6 +3324,7 @@ if test x"$CCAUX" != x"$CC"; then
AC_SUBST(ARCH_ALIGN_SHORT_MOD, $ac_cv_alignof_short)
AC_SUBST(ARCH_ALIGN_INT_MOD, $ac_cv_alignof_int)
AC_SUBST(ARCH_ALIGN_LONG_MOD, $ac_cv_alignof_long)
+ AC_SUBST(ARCH_ALIGN_SIZE_T_MOD, $ac_cv_alignof_size_t)
AC_SUBST(ARCH_ALIGN_PTR_MOD, $ac_cv_alignof_void_p)
AC_SUBST(ARCH_ALIGN_FLOAT_MOD, $ac_cv_alignof_float)
AC_SUBST(ARCH_ALIGN_DOUBLE_MOD, $ac_cv_alignof_double)
@@ -3070,6 +3334,7 @@ if test x"$CCAUX" != x"$CC"; then
AC_CHECK_SIZEOF([int])
AC_CHECK_SIZEOF([long])
AC_CHECK_SIZEOF([long long])
+ AC_CHECK_SIZEOF([size_t])
AC_CHECK_SIZEOF([void *])
AC_CHECK_SIZEOF([float])
AC_CHECK_SIZEOF([double])
@@ -3089,6 +3354,10 @@ if test x"$CCAUX" != x"$CC"; then
ilog2 $ac_cv_sizeof_long_long
AC_SUBST(ARCH_LOG2_SIZEOF_LONG_LONG, $?)
+ ilog2 $ac_cv_sizeof_size_t
+ AC_SUBST(ARCH_LOG2_SIZEOF_SIZE_T, $?)
+ AC_SUBST(ARCH_SIZEOF_SIZE_T, $ac_cv_sizeof_size_t)
+
AC_SUBST(ARCH_SIZEOF_PTR, $ac_cv_sizeof_void_p)
ilog2 $ac_cv_sizeof_void_p
AC_SUBST(ARCH_LOG2_SIZEOF_PTR, $?)
@@ -3151,6 +3420,14 @@ if test x"$CCAUX" != x"$CC"; then
fi
dnl --------------------------------------------------
+dnl AUX tool options
+dnl --------------------------------------------------
+AC_ARG_ENABLE([mkromfs-quiet], AC_HELP_STRING([--enable-mkromfs-quiet],
+ [Do not emit mkromfs verbose output]), [MKROMFS_FLAGS="-q $MKROMFS_FLAGS"])
+
+AC_SUBST(MKROMFS_FLAGS)
+
+dnl --------------------------------------------------
dnl Do substitutions
dnl --------------------------------------------------
SRCDIR="$srcdir"
@@ -3170,11 +3447,11 @@ AC_SUBST(CFLAGSAUX_DEBUG)
AC_SUBST(CFLAGSAUX_PROFILE)
AC_SUBST(LDFLAGSAUX)
AC_SUBST(AUXEXTRALIBS)
-
+AC_SUBST(ARCH_AUTOCONF_HEADER)
CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
-if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$CCAUX" = x"$CC"; then
+if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$build" = x"$host"; then
CONFIG_FILES_LIST="$CONFIG_FILES_LIST"
fi
diff --git a/contrib/contrib.mak b/contrib/contrib.mak
index 5411ae90..bb266407 100644
--- a/contrib/contrib.mak
+++ b/contrib/contrib.mak
@@ -141,6 +141,30 @@ CONTRIBSRC=$(CONTRIBDIR)$(D)
###### ----------------------- End of catalog ----------------------- ######
+### --------------------- The Apple printer devices --------------------- ###
+### Note: these drivers were contributed by users. ###
+### ###
+### Maintained by Mike Galatean contact via https://bugs.ghostscript.com ###
+### ###
+
+appledmp_=$(DEVOBJ)gdevadmp.$(OBJ)
+
+$(DEVOBJ)gdevadmp.$(OBJ) : $(CONTRIBSRC)gdevadmp.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DEVCC) $(DEVO_)gdevadmp.$(OBJ) $(C_) $(CONTRIBSRC)gdevadmp.c
+
+$(DD)appledmp.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+ $(SETPDEV) $(DD)appledmp $(appledmp_)
+
+$(DD)iwhi.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+ $(SETPDEV) $(DD)iwhi $(appledmp_)
+
+$(DD)iwlo.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+ $(SETPDEV) $(DD)iwlo $(appledmp_)
+
+$(DD)iwlq.dev : $(appledmp_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+ $(SETPDEV) $(DD)iwlq $(appledmp_)
+
+
### ----------------- The BJC-210/240/250/250ex/265/1000 ---------------- ###
###
@@ -1200,15 +1224,15 @@ $(DD)rpdl.dev : $(rpdl_) $(DD)page.dev \
### ---------- RICOH RPDL IV(600dpi) printer devices ---------- ###
#rpdl_=$(DEVOBJ)gdevrpdl.$(OBJ)
#$(DEVOBJ)gdevrpdl.$(OBJ) : $(JAPSRC)gdevrpdl.c \
- $(CONTRIB_MAK) $(MAKEDIRS)
+# $(CONTRIB_MAK) $(MAKEDIRS)
# $(DEVCC) $(DEVO_)gdevrpdl.$(OBJ) $(C_) $(JAPSRC)gdevrpdl.c
#
#$(DD)nx100f.dev : $(rpdl_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+# $(CONTRIB_MAK) $(MAKEDIRS)
# $(SETPDEV2) $(DD)nx100f $(rpdl_)
#
#$(DD)nx100v.dev : $(rpdl_) $(DD)page.dev \
- $(CONTRIB_MAK) $(MAKEDIRS)
+# $(CONTRIB_MAK) $(MAKEDIRS)
# $(SETPDEV2) $(DD)nx100v $(rpdl_)
### ------------ The ALPS Micro Dry printer devices ------------ ###
diff --git a/contrib/eplaser/gdevescv.c b/contrib/eplaser/gdevescv.c
index afcbdfd7..c7bd29e1 100644
--- a/contrib/eplaser/gdevescv.c
+++ b/contrib/eplaser/gdevescv.c
@@ -33,6 +33,15 @@
*/
+#include <stdlib.h> /* for abs() and free */
+
+/* Get this definition in before we read memento.h */
+static void
+unvectored_free(void *x)
+{
+ free(x);
+}
+
#if ( 6 > GS_VERSION_MAJOR )
#include <string.h>
@@ -59,7 +68,6 @@
#else /* 6 <= GS_VERSION_MAJOR */
#include "math_.h"
-#include <stdlib.h> /* for abs() */
#include <sys/utsname.h> /* for uname(2) */
#include <ctype.h> /* for toupper(3) */
@@ -969,7 +977,11 @@ escv_beginpage(gx_device_vector * vdev)
{
time_t t;
+#ifdef CLUSTER
+ memset(&t, 0, sizeof(t));
+#else
time(&t);
+#endif
lputs(s, " DATE=\"");
{
@@ -977,8 +989,14 @@ escv_beginpage(gx_device_vector * vdev)
char str[32];
size_t i;
+#ifdef CLUSTER
+ memset(&tm, 0, sizeof(tm));
+ strcpy(str, "1970/01/01 00:00:00");
+ i = strlen(str);
+#else
tm = localtime( &t );
i = strftime(str, 30, "%Y/%m/%d %H:%M:%S", tm);
+#endif
if ( 30 >= i )
str[i] = '\0';
@@ -1014,7 +1032,8 @@ escv_beginpage(gx_device_vector * vdev)
if (sysname)
{
lputs(s, sysname );
- free (sysname);
+ /* Carefully avoid memento interfering here. */
+ unvectored_free(sysname);
sysname = NULL;
}
}
@@ -2035,6 +2054,7 @@ escv_put_params(gx_device * dev, gs_param_list * plist)
ecode = code;
pmediae:
param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
if(!pdev->MediaType){
pdev->MediaType = 0;
diff --git a/contrib/gdevadmp.c b/contrib/gdevadmp.c
new file mode 100644
index 00000000..d48c0dab
--- /dev/null
+++ b/contrib/gdevadmp.c
@@ -0,0 +1,410 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/*
+ * Apple DMP / Imagewriter driver
+ *
+ * This is a modification of Mark Wedel's Apple DMP and
+ * Jonathan Luckey's Imagewriter II driver to
+ * support the Imagewriter LQ's higher resolution (320x216):
+ * appledmp: 120dpi x 72dpi is still supported (yuck)
+ * iwlo: 160dpi x 72dpi
+ * iwhi: 160dpi x 144dpi
+ * iwlq: 320dpi x 216dpi
+ *
+ * This is also my first attempt to work with gs. I have not included the LQ's
+ * ability to print in colour. Perhaps at a later date I will tackle that.
+ *
+ * BTW, to get your Imagewriter LQ serial printer to work with a PC, attach it
+ * with a nullmodem serial cable.
+ *
+ * Scott Barker (barkers@cuug.ab.ca)
+ */
+
+/*
+ * This is a modification of Mark Wedel's Apple DMP driver to
+ * support 2 higher resolutions:
+ * appledmp: 120dpi x 72dpi is still supported (yuck)
+ * iwlo: 160dpi x 72dpi
+ * iwhi: 160dpi x 144dpi
+ *
+ * The Imagewriter II is a bit odd. In pinfeed mode, it thinks its
+ * First line is 1 inch from the top of the page. If you set the top
+ * form so that it starts printing at the top of the page, and print
+ * to near the bottom, it thinks it has run onto the next page and
+ * the formfeed will skip a whole page. As a work around, I reverse
+ * the paper about a 1.5 inches at the end of the page before the
+ * formfeed to make it think its on the 'right' page. bah. hack!
+ *
+ * This is my first attempt to work with gs, so your milage may vary
+ *
+ * Jonathan Luckey (luckey@rtfm.mlb.fl.us)
+ */
+
+/* This is a bare bones driver I developed for my apple Dot Matrix Printer.
+ * This code originally was from the epson driver, but I removed a lot
+ * of stuff that was not needed.
+ *
+ * The Dot Matrix Printer was a predecessor to the apple Imagewriter. Its
+ * main difference being that it was parallel.
+ *
+ * This code should work fine on Imagewriters, as they have a superset
+ * of commands compared to the DMP printer.
+ *
+ * This driver does not produce the smalles output files possible. To
+ * do that, it should look through the output strings and find repeat
+ * occurances of characters, and use the escape sequence that allows
+ * printing repeat sequences. However, as I see it, this the limiting
+ * factor in printing is not transmission speed to the printer itself,
+ * but rather, how fast the print head can move. This is assuming the
+ * printer is set up with a reasonable speed (9600 bps)
+ *
+ * WHAT THE CODE DOES AND DOES NOT DO:
+ *
+ * To print out images, it sets the printer for unidirection printing
+ * and 15 cpi (120 dpi). IT sets line feed to 1/9 of an inch (72 dpi).
+ * When finished, it sets things back to bidirection print, 1/8" line
+ * feeds, and 12 cpi. There does not appear to be a way to reset
+ * things to initial values.
+ *
+ * This code does not set for 8 bit characters (which is required). It
+ * also assumes that carriage return/newline is needed, and not just
+ * carriage return. These are all switch settings on the DMP, and
+ * I have configured them for 8 bit data and cr only.
+ *
+ * You can search for the strings Init and Reset to find the strings
+ * that set up the printer and clear things when finished, and change
+ * them to meet your needs.
+ *
+ * Also, you need to make sure that the printer daemon (assuming unix)
+ * doesn't change the data as it is being printed. I have set my
+ * printcap file (sunos 4.1.1) with the string:
+ * ms=pass8,-opost
+ * and it works fine.
+ *
+ * Feel free to improve this code if you want. However, please make
+ * sure that the old DMP will still be supported by any changes. This
+ * may mean making an imagewriter device, and just copying this file
+ * to something like gdevimage.c.
+ *
+ * The limiting factor of the DMP is the vertical resolution. However, I
+ * see no way to do anything about this. Horizontal resolution could
+ * be increased by using 17 cpi (136 dpi). I believe the Imagewriter
+ * supports 24 cpi (192 dpi). However, the higher dpi, the slower
+ * the printing.
+ *
+ * Dot Matrix Code by Mark Wedel (master@cats.ucsc.edu)
+ *
+ *
+ * As of Oct 2019, maintained by Mike Galatean (contact through https://bugs.ghostscript.com )
+ *
+ */
+
+#include "gdevprn.h"
+
+/* The device descriptors */
+static dev_proc_print_page(dmp_print_page);
+
+/* Standard DMP device */
+const gx_device_printer far_data gs_appledmp_device =
+prn_device(prn_bg_procs, "appledmp", /* The print_page proc is compatible with allowing bg printing */
+ 85, /* width_10ths, 8.5" */
+ 110, /* height_10ths, 11" */
+ 120, 72, /* X_DPI, Y_DPI */
+ 0, 0.5, 0.5, 0, /* margins */
+ 1, dmp_print_page);
+
+/* lowrez Imagewriter device */
+const gx_device_printer far_data gs_iwlo_device =
+prn_device(prn_bg_procs, "iwlo", /* The print_page proc is compatible with allowing bg printing */
+ 85, /* width_10ths, 8.5" */
+ 110, /* height_10ths, 11" */
+ 160, 72, /* X_DPI, Y_DPI */
+ 0, 0.5, 0.5, 0, /* margins */
+ 1, dmp_print_page);
+
+/* hirez Imagewriter device */
+const gx_device_printer far_data gs_iwhi_device =
+prn_device(prn_bg_procs, "iwhi", /* The print_page proc is compatible with allowing bg printing */
+ 85, /* width_10ths, 8.5" */
+ 110, /* height_10ths, 11" */
+ 160, 144, /* X_DPI, Y_DPI */
+ 0, 0.5, 0.5, 0, /* margins */
+ 1, dmp_print_page);
+
+/* LQ hirez Imagewriter device */
+const gx_device_printer far_data gs_iwlq_device =
+prn_device(prn_bg_procs, "iwlq", /* The print_page proc is compatible with allowing bg printing */
+ 85, /* width_10ths, 8.5" */
+ 110, /* height_10ths, 11" */
+ 320, 216,
+ 0, 0, 0.5, 0, /* margins */
+ 1, dmp_print_page);
+
+/* ------ Internal routines ------ */
+
+#define DMP 1
+#define IWLO 2
+#define IWHI 3
+#define IWLQ 4
+
+/* Send the page to the printer. */
+static int
+dmp_print_page(gx_device_printer *pdev, gp_file *gprn_stream)
+{
+ int dev_type;
+
+ int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ /* Note that in_size is a multiple of 8. */
+ int in_size = line_size * 8;
+ /* FIXME: It would be better if this device used the gp_file and the gp_ API,
+ * rather than this "back door" approach
+ */
+ FILE *prn_stream = gp_get_file(gprn_stream);
+
+
+ byte *buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "dmp_print_page(buf1)");
+ byte *buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "dmp_print_page(buf2)");
+ byte *prn = (byte *)gs_malloc(pdev->memory, 3*in_size, 1, "dmp_print_page(prn)");
+
+ byte *in = buf1;
+ byte *out = buf2;
+ int lnum = 0;
+
+ /* Check allocations */
+ if ( buf1 == 0 || buf2 == 0 || prn == 0 )
+ {
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1,
+ "dmp_print_page(buf1)");
+ if ( buf2 )
+ gs_free(pdev->memory, (char *)buf2, in_size, 1,
+ "dmp_print_page(buf2)");
+ if ( prn )
+ gs_free(pdev->memory, (char *)prn, in_size, 1,
+ "dmp_print_page(prn)");
+ return_error(gs_error_VMerror);
+ }
+
+ if ( pdev->y_pixels_per_inch == 216 )
+ dev_type = IWLQ;
+ else if ( pdev->y_pixels_per_inch == 144 )
+ dev_type = IWHI;
+ else if ( pdev->x_pixels_per_inch == 160 )
+ dev_type = IWLO;
+ else
+ dev_type = DMP;
+
+ /* Initialize the printer and reset the margins. */
+
+ fputs("\r\n\033>\033T16", prn_stream);
+
+ switch(dev_type)
+ {
+ case IWLQ:
+ fputs("\033P\033a3", prn_stream);
+ break;
+ case IWHI:
+ case IWLO:
+ fputs("\033P", prn_stream);
+ break;
+ case DMP:
+ default:
+ fputs("\033q", prn_stream);
+ break;
+ }
+
+ /* Print lines of graphics */
+ while ( lnum < pdev->height )
+ {
+ byte *inp;
+ byte *in_end;
+ byte *out_end;
+ int lcnt,ltmp;
+ int count, passes;
+ byte *prn_blk, *prn_end, *prn_tmp;
+
+/* The apple DMP printer seems to be odd in that the bit order on
+ * each line is reverse what might be expected. Meaning, an
+ * underscore would be done as a series of 0x80, while on overscore
+ * would be done as a series of 0x01. So we get each
+ * scan line in reverse order.
+ */
+
+ switch (dev_type)
+ {
+ case IWLQ: passes = 3; break;
+ case IWHI: passes = 2; break;
+ case IWLO:
+ case DMP:
+ default: passes = 1; break;
+ }
+
+ for (count = 0; count < passes; count++)
+ {
+ for (lcnt=0; lcnt<8; lcnt++)
+ {
+ switch(dev_type)
+ {
+ case IWLQ: ltmp = lcnt + 8*count; break;
+ case IWHI: ltmp = 2*lcnt + count; break;
+ case IWLO:
+ case DMP:
+ default: ltmp = lcnt; break;
+ }
+
+ if ((lnum+ltmp)>pdev->height)
+ memset(in+lcnt*line_size,0,line_size);
+ else
+ gdev_prn_copy_scan_lines(pdev,
+ lnum+ltmp, in + line_size*(7 - lcnt),
+ line_size);
+ }
+
+ out_end = out;
+ inp = in;
+ in_end = inp + line_size;
+ for ( ; inp < in_end; inp++, out_end += 8 )
+ {
+ gdev_prn_transpose_8x8(inp, line_size,
+ out_end, 1);
+ }
+
+ out_end = out;
+
+ switch (dev_type)
+ {
+ case IWLQ: prn_end = prn + count; break;
+ case IWHI: prn_end = prn + in_size*count; break;
+ case IWLO:
+ case DMP:
+ default: prn_end = prn; break;
+ }
+
+ while ( (int)(out_end-out) < in_size)
+ {
+ *prn_end = *(out_end++);
+ if ((dev_type) == IWLQ) prn_end += 3;
+ else prn_end++;
+ }
+ }
+
+ switch (dev_type)
+ {
+ case IWLQ:
+ prn_blk = prn;
+ prn_end = prn_blk + in_size * 3;
+ while (prn_end > prn && prn_end[-1] == 0 &&
+ prn_end[-2] == 0 && prn_end[-3] == 0)
+ {
+ prn_end -= 3;
+ }
+ while (prn_blk < prn_end && prn_blk[0] == 0 &&
+ prn_blk[1] == 0 && prn_blk[2] == 0)
+ {
+ prn_blk += 3;
+ }
+ if (prn_end != prn_blk)
+ {
+ if ((prn_blk - prn) > 7)
+ fprintf(prn_stream,"\033U%04d%c%c%c",
+ (int)((prn_blk - prn)/3),
+ 0, 0, 0);
+ else
+ prn_blk = prn;
+ fprintf(prn_stream,"\033C%04d",
+ (int)((prn_end - prn_blk)/3));
+ fwrite(prn_blk, 1, (int)(prn_end - prn_blk),
+ prn_stream);
+ }
+ break;
+ case IWHI:
+ for (count = 0; count < 2; count++)
+ {
+ prn_blk = prn_tmp = prn + in_size*count;
+ prn_end = prn_blk + in_size;
+ while (prn_end > prn_blk && prn_end[-1] == 0)
+ prn_end--;
+ while (prn_blk < prn_end && prn_blk[0] == 0)
+ prn_blk++;
+ if (prn_end != prn_blk)
+ {
+ if ((prn_blk - prn_tmp) > 7)
+ fprintf(prn_stream,
+ "\033V%04d%c",
+ (int)(prn_blk-prn_tmp),
+ 0);
+ else
+ prn_blk = prn_tmp;
+ fprintf(prn_stream,"\033G%04d",
+ (int)(prn_end - prn_blk));
+ fwrite(prn_blk, 1,
+ (int)(prn_end - prn_blk),
+ prn_stream);
+ }
+ if (!count) fputs("\033T01\r\n",prn_stream);
+ }
+ fputs("\033T15",prn_stream);
+ break;
+ case IWLO:
+ case DMP:
+ default:
+ prn_blk = prn;
+ prn_end = prn_blk + in_size;
+ while (prn_end > prn_blk && prn_end[-1] == 0)
+ prn_end--;
+ while (prn_blk < prn_end && prn_blk[0] == 0)
+ prn_blk++;
+ if (prn_end != prn_blk)
+ {
+ if ((prn_blk - prn) > 7)
+ fprintf(prn_stream,"\033V%04d%c",
+ (int)(prn_blk - prn), 0);
+ else
+ prn_blk = prn;
+ fprintf(prn_stream,"\033G%04d",
+ (int)(prn_end - prn_blk));
+ fwrite(prn_blk, 1, (int)(prn_end - prn_blk),
+ prn_stream);
+ }
+ break;
+ }
+
+ fputs("\r\n",prn_stream);
+
+ switch (dev_type)
+ {
+ case IWLQ: lnum += 24 ; break;
+ case IWHI: lnum += 16 ; break;
+ case IWLO:
+ case DMP:
+ default: lnum += 8 ; break;
+ }
+ }
+
+ /* ImageWriter will skip a whole page if too close to end */
+ /* so skip back more than an inch */
+ if ( !(dev_type == DMP) )
+ fputs("\033T99\n\n\033r\n\n\n\n\033f", prn_stream);
+
+ /* Formfeed and Reset printer */
+ fputs("\033T16\f\033<\033B\033E", prn_stream);
+ fflush(prn_stream);
+
+ gs_free(pdev->memory, (char *)prn, in_size, 1, "dmp_print_page(prn)");
+ gs_free(pdev->memory, (char *)buf2, in_size, 1, "dmp_print_page(buf2)");
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "dmp_print_page(buf1)");
+ return 0;
+}
diff --git a/contrib/gdevbjc_.c b/contrib/gdevbjc_.c
index a5c7627a..a661ba0d 100644
--- a/contrib/gdevbjc_.c
+++ b/contrib/gdevbjc_.c
@@ -220,7 +220,8 @@ const gx_device_bjc_printer gs_bjcmono_device =
bjc_device(bjcmono_procs, "bjcmono",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
X_DPI, Y_DPI,
- (3.4 / 25.4), (7.0 / 25.4), (3.4 / 25.4), (3.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(7.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(3.0 / 25.4),
1, /* num components */
1, /* depth */
1, /* max gray */
@@ -242,7 +243,8 @@ const gx_device_bjc_printer gs_bjcgray_device =
bjc_device(bjcgray_procs, "bjcgray",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
X_DPI, Y_DPI,
- (3.4 / 25.4), (7.0 / 25.4), (3.4 / 25.4), (3.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(7.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(3.0 / 25.4),
1, /* num components */
8, /* depth */
255, /* max gray */
@@ -264,7 +266,8 @@ const gx_device_bjc_printer gs_bjccmyk_device =
bjc_device(bjc_cmykcolor_procs, "bjccmyk",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
X_DPI, Y_DPI,
- (3.4 / 25.4), (7.0 / 25.4), (3.4 / 25.4), (3.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(7.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(3.0 / 25.4),
4, /* num components */
4, /* depth */
1, /* max gray */
@@ -286,7 +289,8 @@ const gx_device_bjc_printer gs_bjccolor_device =
bjc_device(bjc_truecolor_procs, "bjccolor",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
X_DPI, Y_DPI,
- (3.4 / 25.4), (7.0 / 25.4), (3.4 / 25.4), (3.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(7.0 / 25.4),
+ (float)(3.4 / 25.4), (float)(3.0 / 25.4),
4, /* num components */
32, /* depth */
255, /* max gray */
@@ -386,8 +390,9 @@ gdev_bjc_get_params(gx_device * pdev, gs_param_list * plist)
{
const gx_device_bjc_printer * ppdev = (gx_device_bjc_printer *)pdev;
- int code = gdev_prn_get_params(pdev, plist);
- if (code < 0 ||
+ int code;
+ (void) (
+ (code = gdev_prn_get_params(pdev, plist)) < 0 ||
(code = param_write_string(plist, "PrinterType",
&paramValueToParam(strPrinterType, ppdev->printerType)->p_string)) < 0 ||
(code = param_write_string(plist, "Feeder",
@@ -413,8 +418,8 @@ gdev_bjc_get_params(gx_device * pdev, gs_param_list * plist)
(code = param_write_float(plist, "Gamma", &ppdev->gamma)) < 0 ||
(code = param_write_float(plist, "RedGamma", &ppdev->redGamma)) < 0 ||
(code = param_write_float(plist, "GreenGamma", &ppdev->greenGamma)) < 0 ||
- (code = param_write_float(plist, "BlueGamma", &ppdev->blueGamma)) < 0)
- return code;
+ (code = param_write_float(plist, "BlueGamma", &ppdev->blueGamma)) < 0
+ );
return code;
}
@@ -570,8 +575,8 @@ bjc_print_page_mono(gx_device_printer * pdev, gp_file * file)
((ppdev->ink & INK_K) ? 0x11: 0x10)); /* black or color */
char ink = 0x01; /* regular ink type */
char compress = (ppdev->compress == true ? 0x01 : 0x00); /* compression or not */
- int x_resolution = pdev->HWResolution[0];
- int y_resolution = pdev->HWResolution[1];
+ int x_resolution = (int)pdev->HWResolution[0];
+ int y_resolution = (int)pdev->HWResolution[1];
int length = 0/*x71*/, lm = 0/*x01*/, rm = 0/*x01*/, top = 0/*x50*/;
byte inkc = ppdev->ink;
byte mask_array[] = { 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe };
@@ -643,8 +648,8 @@ bjc_print_page_gray(gx_device_printer * pdev, gp_file * file)
((ppdev->ink & INK_K) ? 0x11: 0x10)); /* black or color */
char ink = 0x01; /* regular ink type */
char compress = (ppdev->compress == true ? 0x01 : 0x00); /* compression or not */
- int x_resolution = pdev->HWResolution[0];
- int y_resolution = pdev->HWResolution[1];
+ int x_resolution = (int)pdev->HWResolution[0];
+ int y_resolution = (int)pdev->HWResolution[1];
int length = 0/*x71*/, lm = 0/*x01*/, rm = 0/*x01*/, top = 0/*x50*/;
byte inkc = ppdev->ink;
byte mask_array[] = { 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe };
@@ -730,8 +735,8 @@ bjc_print_page_cmyk(gx_device_printer * pdev, gp_file * file)
char color = 0x10; /* color */
char ink = 0x01; /* regular ink type */
char compress = (ppdev->compress == true ? 0x01 : 0x00); /* compression or not */
- int x_resolution = pdev->HWResolution[0];
- int y_resolution = pdev->HWResolution[1];
+ int x_resolution = (int)pdev->HWResolution[0];
+ int y_resolution = (int)pdev->HWResolution[1];
int length = 0/*x71*/, lm = 0/*x01*/, rm = 0/*x01*/, top = 0/*x50*/;
int plane;
byte mask_array[] = { 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe };
@@ -851,8 +856,8 @@ bjc_print_page_color(gx_device_printer * pdev, gp_file * file)
char color = 0x10; /* color */
char ink = 0x01; /* regular ink type */
char compress = (ppdev->compress == true ? 0x01 : 0x00); /* compression or not */
- int x_resolution = pdev->HWResolution[0];
- int y_resolution = pdev->HWResolution[1];
+ int x_resolution = (int)pdev->HWResolution[0];
+ int y_resolution = (int)pdev->HWResolution[1];
int length = 0/*x71*/, lm = 0/*x01*/, rm = 0/*x01*/, top = 0/*x50*/;
byte mask_array[] = { 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe };
byte lastmask = mask_array[pdev->width % 8];
diff --git a/contrib/gdevbjc_.h b/contrib/gdevbjc_.h
index de32a510..92f5448c 100644
--- a/contrib/gdevbjc_.h
+++ b/contrib/gdevbjc_.h
@@ -135,8 +135,8 @@ typedef struct gx_device_bjc_printer_s gx_device_bjc_printer;
xdpi, ydpi,\
ncomp, depth, mg, mc, dg, dc,\
-(lo) * (xdpi), -(to) * (ydpi),\
- (lm) * 72.0, (bm) * 72.0,\
- (rm) * 72.0, (tm) * 72.0\
+ (lm) * 72.0f, (bm) * 72.0f,\
+ (rm) * 72.0f, (tm) * 72.0f\
),\
prn_device_body_rest_(print_page)
diff --git a/contrib/gdevbjca.c b/contrib/gdevbjca.c
index a023f0ee..142ddee4 100644
--- a/contrib/gdevbjca.c
+++ b/contrib/gdevbjca.c
@@ -342,12 +342,14 @@ bjc_compress(const byte *row, uint raster, byte *compressed)
register byte test, test2;
test = *exam;
- while ( exam < end_row ) {
- test2 = *++exam;
+ while ( ++exam < end_row ) {
+ test2 = *exam;
if ( test == test2 )
break;
test = test2;
}
+ /* exam points to the byte that didn't match, or end_row
+ * if we ran out of data. */
/* Find out how long the run is */
end_dis = exam - 1;
@@ -464,7 +466,11 @@ uint bjc_rand(gx_device_bjc_printer *dev)
void bjc_init_tresh(gx_device_bjc_printer *dev, int rnd)
{
+#ifdef CLUSTER
+ int i=0;
+#else
int i=(int)(time(NULL) & 0x0ff);
+#endif
float delta=40.64*rnd;
for(;i>0;i--) bjc_rand(dev);
for(i=-512; i<512; i++) dev->bjc_treshold[i+512] =
@@ -655,12 +661,15 @@ FloydSteinbergDitheringC(gx_device_bjc_printer *dev,
for( i=width; i>0; i--, row+=4, err_vect+=3) { /*separate components */
/* C + K */
- err_corrC = dev->bjc_gamma_tableC[ (*row) + (*(row+3))]
- + dev->FloydSteinbergC;
- err_corrM = dev->bjc_gamma_tableM[(*(row+1)) + (*(row+3))]
- + dev->FloydSteinbergM;
- err_corrY = dev->bjc_gamma_tableY[(*(row+2)) + (*(row+3))]
- + dev->FloydSteinbergY;
+ int v = row[0] + row[3];
+ if (v > 255) v = 255;
+ err_corrC = dev->bjc_gamma_tableC[v] + dev->FloydSteinbergC;
+ v = row[1] + row[3];
+ if (v > 255) v = 255;
+ err_corrM = dev->bjc_gamma_tableM[v] + dev->FloydSteinbergM;
+ v = row[2] + row[3];
+ if (v > 255) v = 255;
+ err_corrY = dev->bjc_gamma_tableY[v] + dev->FloydSteinbergY;
if(err_corrC > 4080 && limit_extr) err_corrC = 4080;
if(err_corrM > 4080 && limit_extr) err_corrM = 4080;
@@ -751,12 +760,15 @@ FloydSteinbergDitheringC(gx_device_bjc_printer *dev,
for( i=width; i>0; i--, row-=4, err_vect-=3) {
- err_corrC = dev->bjc_gamma_tableC[ (*row) + (*(row+3))]
- + dev->FloydSteinbergC;
- err_corrM = dev->bjc_gamma_tableM[(*(row+1)) + (*(row+3))]
- + dev->FloydSteinbergM;
- err_corrY = dev->bjc_gamma_tableY[(*(row+2)) + (*(row+3))]
- + dev->FloydSteinbergY;
+ int v = row[0] + row[3];
+ if (v > 255) v = 255;
+ err_corrC = dev->bjc_gamma_tableC[v] + dev->FloydSteinbergC;
+ v = row[1] + row[3];
+ if (v > 255) v = 255;
+ err_corrM = dev->bjc_gamma_tableM[v] + dev->FloydSteinbergM;
+ v = row[2] + row[3];
+ if (v > 255) v = 255;
+ err_corrY = dev->bjc_gamma_tableY[v] + dev->FloydSteinbergY;
if(err_corrC > 4080 && limit_extr) err_corrC = 4080;
if(err_corrM > 4080 && limit_extr) err_corrM = 4080;
diff --git a/contrib/gdevcd8.c b/contrib/gdevcd8.c
index bc5a741b..23532c0f 100644
--- a/contrib/gdevcd8.c
+++ b/contrib/gdevcd8.c
@@ -438,10 +438,10 @@ static int (* const rescale_color_plane[2][2]) (int, const byte *, const byte *,
* Drivers stuff.
*
*/
-#define DESKJET_PRINT_LIMIT 0.04 /* 'real' top margin? */
+#define DESKJET_PRINT_LIMIT 0.04f /* 'real' top margin? */
/* Margins are left, bottom, right, top. */
-#define DESKJET_MARGINS_LETTER 0.25, 0.50, 0.25, 0.167
-#define DESKJET_MARGINS_A4 0.13, 0.46, 0.13, 0.04
+#define DESKJET_MARGINS_LETTER 0.25f, 0.50f, 0.25f, 0.167f
+#define DESKJET_MARGINS_A4 0.13f, 0.46f, 0.13f, 0.04f
/* Define bits-per-pixel - default is 32-bit cmyk-mode */
#ifndef BITSPERPIXEL
# define BITSPERPIXEL 32
@@ -891,20 +891,20 @@ hp_colour_open(gx_device * pdev)
/* margins for DJ1600C from manual */
static const float m_cdj1600[4] = {
- 0.25, 0.5, 0.25, 0.5
+ 0.25f, 0.5f, 0.25f, 0.5f
};
/* margins for HP2200C */
static const float chp2200_a4[4] = {
- 0.13, 0.46, 0.13, 0.08
+ 0.13f, 0.46f, 0.13f, 0.08f
};
static const float chp2200_letter[4] = {
- 0.25, 0.46, 0.25, 0.08
+ 0.25f, 0.46f, 0.25f, 0.08f
};
/* margins for DNJ500C */
static const float cdnj500[4] = {
- 0.00, 0.00, 0.00, 0.00
+ 0.00f, 0.00f, 0.00f, 0.00f
};
const float *m = (float *)0;
@@ -1043,7 +1043,8 @@ hp_colour_open(gx_device * pdev)
default:
assert(0);
}
- gx_device_set_margins(pdev, m, true);
+ if (m != NULL)
+ gx_device_set_margins(pdev, m, true);
return gdev_prn_open(pdev);
}
@@ -1091,13 +1092,13 @@ cdj850_put_params(gx_device * pdev, gs_param_list * plist)
code = cdj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code);
code = cdj_put_param_int(plist, "Quality", &quality, 0, 2, code);
code = cdj_put_param_int(plist, "Papertype", &papertype, 0, 4, code);
- code = cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1, 9.0, code);
- code = cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code);
- code = cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code);
- code = cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0, 9.0, code);
- code = cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0, 9.0, code);
- code = cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0,
- 9.0, code);
+ code = cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1f, 9.0f, code);
+ code = cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0f, 9.0f, code);
+ code = cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0f, 9.0f, code);
+ code = cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0f, 9.0f, code);
+ code = cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0f, 9.0f, code);
+ code = cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0f,
+ 9.0f, code);
if (code < 0)
return code;
@@ -1830,8 +1831,8 @@ cdnj500_print_page(gx_device_printer * pdev, gp_file * prn_stream)
/* |Horz Res |Vert Rez |compr|orien|bits |planes*/
/* x,y resolution for color planes, assume x=y */
- int xres = cdj850->x_pixels_per_inch;
- int yres = cdj850->y_pixels_per_inch;
+ int xres = (int)cdj850->x_pixels_per_inch;
+ int yres = (int)cdj850->y_pixels_per_inch;
gs_memory_t *mem = pdev->memory;
int width_in_pixels = pdev->width;
@@ -2002,7 +2003,7 @@ send_scan_lines(gx_device_printer * pdev,
word rmask =
~(word) 0 << ((-pdev->width * misc_vars->storage_bpp) & (W * 8 - 1));
- lend = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi;
+ lend = (int)(pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi);
error_values->c = error_values->m = error_values->y =
error_values->k = 0;
@@ -3136,11 +3137,11 @@ cdj850_start_raster_mode(gx_device_printer * pdev, int paper_size,
init.a[25] = cdj850->intensities; /* Intensity levels yellow */
/* black plane resolution */
- assign_dpi(cdj850->x_pixels_per_inch, init.a + 2);
- assign_dpi(cdj850->y_pixels_per_inch, init.a + 4);
+ assign_dpi((int)cdj850->x_pixels_per_inch, init.a + 2);
+ assign_dpi((int)cdj850->y_pixels_per_inch, init.a + 4);
/* color plane resolution */
- xres = cdj850->x_pixels_per_inch / (cdj850->xscal + 1);
- yres = cdj850->y_pixels_per_inch / (cdj850->yscal + 1);
+ xres = (int)(cdj850->x_pixels_per_inch / (cdj850->xscal + 1));
+ yres = (int)(cdj850->y_pixels_per_inch / (cdj850->yscal + 1));
/* cyan */
assign_dpi(xres, init.a + 8);
assign_dpi(yres, init.a + 10);
@@ -3195,11 +3196,11 @@ cdj880_start_raster_mode(gx_device_printer * pdev, int paper_size,
init.a[25] = cdj850->intensities; /* Intensity levels yellow */
/* black plane resolution */
- assign_dpi(cdj850->x_pixels_per_inch, init.a + 2);
- assign_dpi(cdj850->y_pixels_per_inch, init.a + 4);
+ assign_dpi((int)cdj850->x_pixels_per_inch, init.a + 2);
+ assign_dpi((int)cdj850->y_pixels_per_inch, init.a + 4);
/* color plane resolution */
- xres = cdj850->x_pixels_per_inch / (cdj850->xscal + 1);
- yres = cdj850->y_pixels_per_inch / (cdj850->yscal + 1);
+ xres = (int)(cdj850->x_pixels_per_inch / (cdj850->xscal + 1));
+ yres = (int)(cdj850->y_pixels_per_inch / (cdj850->yscal + 1));
/* cyan */
assign_dpi(xres, init.a + 8);
assign_dpi(yres, init.a + 10);
@@ -3261,8 +3262,8 @@ chp2200_start_raster_mode(gx_device_printer * pdev, int paper_size,
/* |Horz Res |Vert Rez |compr|orien|bits |planes*/
/* x,y resolution for color planes, assume x=y */
- int xres = cdj850->x_pixels_per_inch;
- int yres = cdj850->y_pixels_per_inch;
+ int xres = (int)cdj850->x_pixels_per_inch;
+ int yres = (int)cdj850->y_pixels_per_inch;
int width_in_pixels = cdj850->width;
/* Exit from any previous language */
@@ -3322,7 +3323,7 @@ cdnj500_start_raster_mode(gx_device_printer * pdev, int paper_size,
gp_file * prn_stream)
{
/* x,y resolution for color planes, assume x=y */
- int xres = cdj850->x_pixels_per_inch;
+ int xres = (int)cdj850->x_pixels_per_inch;
float x = pdev->width / pdev->x_pixels_per_inch * 10;
float y = pdev->height / pdev->y_pixels_per_inch * 10;
@@ -3817,7 +3818,7 @@ gdev_pcl_map_color_rgb(gx_device * pdev, gx_color_index color,
break;
case 16:
{
- gx_color_value c = (gx_color_value) color ^ 0xffff;
+ gx_color_index c = (gx_color_index) color ^ 0xffff;
ushort value = c >> 11;
prgb[0] = ((value << 11) + (value << 6) + (value << 1) +
@@ -3832,7 +3833,7 @@ gdev_pcl_map_color_rgb(gx_device * pdev, gx_color_index color,
break;
case 24:
{
- gx_color_value c = (gx_color_value) color ^ 0xffffff;
+ gx_color_index c = (gx_color_index) color ^ 0xffffff;
prgb[0] = gx_color_value_from_byte(c >> 16);
prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff);
@@ -3998,8 +3999,9 @@ static void
cdj1600_start_raster_mode(gx_device_printer * pdev, int paper_size,
gp_file * prn_stream)
{
- uint raster_width = pdev->width -
- pdev->x_pixels_per_inch * (dev_l_margin(pdev) + dev_r_margin(pdev));
+ uint raster_width = (int)(pdev->width -
+ pdev->x_pixels_per_inch *
+ (dev_l_margin(pdev) + dev_r_margin(pdev)));
/* switch to PCL control language */
gp_fputs("\033%-12345X@PJL enter language = PCL\n", prn_stream);
diff --git a/contrib/gdevdj9.c b/contrib/gdevdj9.c
index 1191a322..1800b3cb 100644
--- a/contrib/gdevdj9.c
+++ b/contrib/gdevdj9.c
@@ -289,8 +289,8 @@ static int cdj970_write_trailer(gx_device *, gp_file *);
#define DESKJET_PRINT_LIMIT 0.04 /* 'real' top margin? */
/* Margins are left, bottom, right, top. */
-#define DESKJET_MARGINS_LETTER 0.25, 0.50, 0.25, 0.167
-#define DESKJET_MARGINS_A4 0.13, 0.46, 0.13, 0.04
+#define DESKJET_MARGINS_LETTER 0.25f, 0.50f, 0.25f, 0.167f
+#define DESKJET_MARGINS_A4 0.13f, 0.46f, 0.13f, 0.04f
/* Define bits-per-pixel - default is 32-bit cmyk-mode */
#ifndef BITSPERPIXEL
# define BITSPERPIXEL 32
@@ -574,26 +574,55 @@ static int cdj_set_bpp(gx_device *, int, int);
static int
hp_colour_open(gx_device * pdev)
{
- int retCode;
+ int retCode = 0;
+
+ /* Change the margins if necessary. */
+ static const float dj_a4[4] = {
+ DESKJET_MARGINS_A4
+ };
+
+ static const float dj_letter[4] = {
+ DESKJET_MARGINS_LETTER
+ };
+ const float *m = (float *)0;
cdj970->PageCtr = 0;
+ /* quality setup */
+ if (cdj970->quality == DRAFT) {
+ gx_device_set_resolution((gx_device *) pdev, 300.0, 300.0);
+ cdj970->xscal = 0;
+ cdj970->yscal = 0;
+ cdj970->intensities = 2;
+ } else if (cdj970->quality == NORMAL) {
+ gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0);
+ cdj970->xscal = 1;
+ cdj970->yscal = 1;
+ /* intensities = 4 from initialization */
+ } else { /* quality == PRESENTATION */
+ gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0);
+ cdj970->xscal = 0;
+ cdj970->yscal = 0;
+ /* intensities = 4 from initialization */
+ }
+
+ m = (gdev_pcl_paper_size((gx_device *) pdev) ==
+ PAPER_SIZE_A4 ? dj_a4 : dj_letter);
+
+ gx_device_set_margins((gx_device *) pdev, m, true);
+
/* Set up colour params if put_params has not already done so */
if (pdev->color_info.num_components == 0) {
- int code = cdj_set_bpp(pdev, pdev->color_info.depth,
+ retCode = cdj_set_bpp(pdev, pdev->color_info.depth,
pdev->color_info.num_components);
- if (code < 0)
- return code;
+ if (retCode < 0)
+ return retCode;
}
retCode = gdev_prn_open(pdev);
- if (retCode < 0)
- return (retCode);
- else {
+ if (retCode >= 0) {
retCode = gdev_prn_open_printer(pdev, true);
- if (retCode < 0)
- return (retCode);
}
return 0;
@@ -604,9 +633,10 @@ hp_colour_open(gx_device * pdev)
static int
cdj970_get_params(gx_device * pdev, gs_param_list * plist)
{
- int code = gdev_prn_get_params(pdev, plist);
-
- if (code < 0 ||
+ int code;
+
+ (void) (
+ (code = gdev_prn_get_params(pdev, plist)) < 0 ||
(code = param_write_int(plist, "Quality", &cdj970->quality)) < 0 ||
(code = param_write_int(plist, "Duplex", &cdj970->duplex)) < 0 ||
(code = param_write_int(plist, "Papertype", &cdj970->papertype)) < 0
@@ -623,9 +653,8 @@ cdj970_get_params(gx_device * pdev, gs_param_list * plist)
param_write_float(plist, "GammaValK", &cdj970->gammavalk)) < 0
|| (code =
param_write_float(plist, "BlackCorrect",
- &cdj970->blackcorrect)) < 0)
-
- return (code);
+ &cdj970->blackcorrect)) < 0
+ );
return (code);
}
@@ -647,26 +676,25 @@ cdj970_put_params(gx_device * pdev, gs_param_list * plist)
int bpp = 0;
int code = 0;
- code = cdj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code);
- code = cdj_put_param_int(plist, "Quality", &quality, 0, 2, code);
- code = cdj_put_param_int(plist, "Papertype", &papertype, 0, 4, code);
- code = cdj_put_param_int(plist, "Duplex", &duplex, 0, 2, code);
- code =
- cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1, 9.0,
- code);
- code =
- cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code);
- code =
- cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code);
- code =
- cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0, 9.0, code);
- code =
- cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0, 9.0, code);
- code =
- cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0, 9.0,
- code);
-
- if (code < 0)
+ if ((code = cdj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_int(plist, "Quality", &quality, 0, 2, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_int(plist, "Papertype", &papertype, 0, 4, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_int(plist, "Duplex", &duplex, 0, 2, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1f, 9.0, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0, 9.0, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0, 9.0, code)) < 0)
+ return code;
+ if ((code = cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0, 9.0, code)) < 0)
return code;
code = cdj_put_param_bpp(pdev, plist, bpp, bpp, 0);
@@ -674,7 +702,11 @@ cdj970_put_params(gx_device * pdev, gs_param_list * plist)
if (code < 0)
return code;
- cdj970->quality = quality;
+ if (cdj970->quality != quality) {
+ if (pdev->is_open)
+ gs_closedevice(pdev); /* quality can change resolution, force re-open */
+ cdj970->quality = quality;
+ }
cdj970->papertype = papertype;
cdj970->duplex = duplex;
cdj970->mastergamma = mastergamma;
@@ -684,7 +716,7 @@ cdj970_put_params(gx_device * pdev, gs_param_list * plist)
cdj970->gammavalk = gammavalk;
cdj970->blackcorrect = blackcorrect;
- return 0;
+ return code;
}
/**********************************************************************************/
@@ -783,47 +815,6 @@ cdj970_terminate_page(gx_device_printer * pdev, gp_file * prn_stream)
gp_fputs("\033*rC\f\033&l-2H", prn_stream); /* End Graphics, Reset */
}
-/* cdj970_one_time_initialisation:
-----------------------------------------------------------------------------------*/
-static void
-cdj970_one_time_initialisation(gx_device_printer * pdev)
-{
- /* Change the margins if necessary. */
- static const float dj_a4[4] = {
- DESKJET_MARGINS_A4
- };
-
- static const float dj_letter[4] = {
- DESKJET_MARGINS_LETTER
- };
- const float *m = (float *)0;
-
- /* quality setup */
- if (cdj970->quality == DRAFT) {
- gx_device_set_resolution((gx_device *) pdev, 300.0, 300.0);
- cdj970->xscal = 0;
- cdj970->yscal = 0;
- cdj970->intensities = 2;
- } else if (cdj970->quality == NORMAL) {
- gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0);
- cdj970->xscal = 1;
- cdj970->yscal = 1;
- /* intensities = 4 from initialization */
- } else { /* quality == PRESENTATION */
- gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0);
- cdj970->xscal = 0;
- cdj970->yscal = 0;
- /* intensities = 4 from initialization */
- }
-
- m = (gdev_pcl_paper_size((gx_device *) pdev) ==
- PAPER_SIZE_A4 ? dj_a4 : dj_letter);
-
- gx_device_set_margins((gx_device *) pdev, m, true);
-
- cdj970_write_header((gx_device *) pdev, pdev->file);
-}
-
/* cdj970_print_page: Here comes the hp970 output routine
----------------------------------------------------------------------------------*/
static int
@@ -836,7 +827,7 @@ cdj970_print_page(gx_device_printer * pdev, gp_file * prn_stream)
Gamma gamma;
if (cdj970->PageCtr == 0 && cdj970->ptype == DJ970C) {
- cdj970_one_time_initialisation(pdev);
+ cdj970_write_header((gx_device *)pdev, prn_stream);
}
/* make a local writable copy of the Gamma tables */
@@ -986,7 +977,7 @@ send_scan_lines(gx_device_printer * pdev,
word rmask =
~(word) 0 << ((-pdev->width * misc_vars->storage_bpp) & (W * 8 - 1));
- lend = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi;
+ lend = (int)(pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi);
error_values->c = error_values->m = error_values->y = error_values->k = 0;
@@ -1298,8 +1289,8 @@ do_black_correction(float kvalue, int kcorrect[256])
*col4 += ucr; /* add removed black to black */\
kadd = ucr + *(kcorrect + ucr);\
uca_fac = 1.0 + (kadd/255.0);\
- *col1 *= uca_fac;\
- *col2 *= uca_fac;\
+ *col1 = (byte)(*col1 * uca_fac);\
+ *col2 = (byte)(*col2 * uca_fac);\
}
/* do_gcr: Since resolution can be different on different planes, we need to
@@ -2000,12 +1991,12 @@ cdj970_start_raster_mode(gx_device_printer * pdev,
init.a[25] = cdj970->intensities; /* Intensity levels yellow */
/* black plane resolution */
- assign_dpi(cdj970->x_pixels_per_inch, init.a + 2);
- assign_dpi(cdj970->y_pixels_per_inch, init.a + 4);
+ assign_dpi((int)cdj970->x_pixels_per_inch, init.a + 2);
+ assign_dpi((int)cdj970->y_pixels_per_inch, init.a + 4);
/* color plane resolution */
- xres = cdj970->x_pixels_per_inch / (cdj970->xscal + 1);
- yres = cdj970->y_pixels_per_inch / (cdj970->yscal + 1);
+ xres = (int)(cdj970->x_pixels_per_inch / (cdj970->xscal + 1));
+ yres = (int)(cdj970->y_pixels_per_inch / (cdj970->yscal + 1));
/* cyan */
assign_dpi(xres, init.a + 8);
@@ -2279,6 +2270,10 @@ cdj_set_bpp(gx_device * pdev, int bpp, int ccomps)
ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0);
}
+ if (ci->depth != ((bpp > 1) && (bpp < 8) ? 8 : bpp)) {
+ if (pdev->is_open)
+ gs_closedevice(pdev); /* depth changed, make sure we re-open */
+ }
ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp);
return (0);
@@ -2548,7 +2543,7 @@ gdev_pcl_map_color_rgb(gx_device * pdev,
}
break;
case 16:{
- gx_color_value c = (gx_color_value) color ^ 0xffff;
+ gx_color_index c = (gx_color_index) color ^ 0xffff;
ushort value = c >> 11;
prgb[0] = ((value << 11) + (value << 6) + (value << 1) +
@@ -2563,7 +2558,7 @@ gdev_pcl_map_color_rgb(gx_device * pdev,
break;
case 24:{
- gx_color_value c = (gx_color_value) color ^ 0xffffff;
+ gx_color_index c = (gx_color_index) color ^ 0xffffff;
prgb[0] = gx_color_value_from_byte(c >> 16);
prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff);
@@ -2572,7 +2567,7 @@ gdev_pcl_map_color_rgb(gx_device * pdev,
break;
case 32:{
- gx_color_value w =
+ gx_color_index w =
gx_maxcol - gx_color_value_from_byte(color >> 24);
prgb[0] = w - gx_color_value_from_byte((color >> 16) & 0xff);
@@ -2597,16 +2592,16 @@ cdj_put_param_bpp(gx_device * pdev,
gs_param_list * plist,
int new_bpp, int real_bpp, int ccomps)
{
- if (new_bpp == 0 && ccomps == 0)
- return gdev_prn_put_params(pdev, plist);
- else {
- gx_device_color_info save_info;
- int save_bpp;
- int code;
+ int code = 0;
+ int save_bpp;
+ gx_device_color_info save_info;
- save_info = pdev->color_info;
- save_bpp = save_info.depth;
+ save_info = pdev->color_info;
+ save_bpp = save_info.depth;
+ if (new_bpp == 0 && ccomps == 0) {
+ code = gdev_prn_put_params(pdev, plist);
+ } else {
if (save_bpp == 8 && save_ccomps == 3 && !cprn_device->cmyk)
save_bpp = 3;
@@ -2630,12 +2625,21 @@ cdj_put_param_bpp(gx_device * pdev,
if ((cdj970->color_info.depth != save_bpp
|| (ccomps != 0 && ccomps != save_ccomps))
&& pdev->is_open)
- return (gs_closedevice(pdev));
+ gs_closedevice(pdev);
+ }
- return (0);
+ /* check for valid resolutions */
+ if (pdev->HWResolution[0] != pdev->HWResolution[1] ||
+ (pdev->HWResolution[0] != 300.0 && pdev->HWResolution[0] != 600.0) ) {
+ param_signal_error(plist, "HWResolution", gs_error_rangecheck);
+ emprintf1(pdev->memory, "\ncdj970: Invalid resolution: '%f'. Only 300 or 600 supported.\n\n",
+ pdev->HWResolution[0]);
+ cdj_set_bpp(pdev, save_bpp, save_ccomps);
+ return gs_error_rangecheck;
+ }
+ return code;
#undef save_ccomps
- }
}
/* cdj970_write_header:
diff --git a/contrib/gdevgdi.c b/contrib/gdevgdi.c
index 60bd5c19..cdd148ba 100644
--- a/contrib/gdevgdi.c
+++ b/contrib/gdevgdi.c
@@ -71,8 +71,8 @@
#define GDI_COMP_MODITIFF 6
#define GDI_COMP_NOSEND 0x7f
-#define GDI_MARGINS_A4 0.167, 0.167, 0.167, 0.167
-#define GDI_MARGINS_LETTER 0.167, 0.167, 0.167, 0.167
+#define GDI_MARGINS_A4 0.167f, 0.167f, 0.167f, 0.167f
+#define GDI_MARGINS_LETTER 0.167f, 0.167f, 0.167f, 0.167f
/*#define GDI_MARGINS_A4 0.0, 0.0, 0.0, 0.0*/
/*#define GDI_MARGINS_LETTER 0.0, 0.0, 0.0, 0.0*/
@@ -484,12 +484,15 @@ unsigned long FrameTiffComp(unsigned char *pubDest,
case 1:
*TgtPtr++ = 0x00;
ulret++;
+ /* Fall through. */
case 2:
*TgtPtr++ = 0x00;
ulret++;
+ /* Fall through. */
case 3:
*TgtPtr++ = 0x00;
ulret++;
+ /* Fall through. */
default:
break;
}
@@ -500,10 +503,13 @@ unsigned long FrameTiffComp(unsigned char *pubDest,
{
case 1:
ulret++;
+ /* Fall through. */
case 2:
ulret++;
+ /* Fall through. */
case 3:
ulret++;
+ /* Fall through. */
default:
break;
}
@@ -542,11 +548,14 @@ unsigned int FrameTiff_Comp(unsigned char *lpSrcBuf, unsigned char *lpTgtBuf, un
if(ubFirst == ubSecond) /* case of data match */
{
+ #if 0
+ /* This code causes coverity problems, and has no affect. */
usEndCnt = usCount;
if (usCount > 16384)
{
usEndCnt = 16384;
}
+ #endif
usEndCnt = usCount - 2;
while (usEndCnt--)
{
@@ -583,11 +592,14 @@ unsigned int FrameTiff_Comp(unsigned char *lpSrcBuf, unsigned char *lpTgtBuf, un
ubMisCnt = 0;
if (usCount > 2)
{
+ #if 0
+ /* This code causes coverity problems, and has no affect. */
usEndCnt = usCount;
if (usCount > 16384)
{
usEndCnt = 16384;
}
+ #endif
usEndCnt = usCount - 2;
/* usEndCnt = usCount - 2; original*/
/* 19990824 by LSM : for end file while (usEndCnt--)*/
@@ -680,11 +692,14 @@ unsigned int PreTiffComp(unsigned char *lpSrcBuf, unsigned int nSrcBytes)
if(ubFirst == ubSecond) /* case of data match */
{
+ #if 0
+ /* This code causes coverity problems, and has no affect. */
usEndCnt = usCount;
if (usCount > 16384)
{
usEndCnt = 16384;
}
+ #endif
usEndCnt = usCount - 2;
while (usEndCnt--)
{
@@ -716,12 +731,15 @@ unsigned int PreTiffComp(unsigned char *lpSrcBuf, unsigned int nSrcBytes)
ubMisCnt = 0;
if (usCount > 2)
{
+ #if 0
+ /* This code causes coverity problems, and has no affect. */
usEndCnt = usCount;
if (usCount > 16384)
{
usEndCnt = 16384;
}
/* usEndCnt = usCount - 2;*/
+ #endif
usEndCnt = usCount - 2;
/* 19990824 by LSM : for Last file while (usEndCnt--)*/
while (usEndCnt--)
diff --git a/contrib/gdevhl12.c b/contrib/gdevhl12.c
index 481d2a7a..9f4d617c 100644
--- a/contrib/gdevhl12.c
+++ b/contrib/gdevhl12.c
@@ -481,7 +481,7 @@ hl1250_compress_band(gp_file * prn_stream, hl1250_state_t * s, unsigned int band
break;
}
if (s->out_count) {
- gp_fprintf(prn_stream, "\033*b%uW", s->out_count * sizeof(u16) + 9);
+ gp_fprintf(prn_stream, "\033*b%luW", s->out_count * sizeof(u16) + 9);
put_be16(prn_stream, s->out_count * sizeof(u16) + 7);
put_be16(prn_stream, s->xl * 16);
put_be16(prn_stream, band + ytop);
diff --git a/contrib/gdevln03.c b/contrib/gdevln03.c
index 700afabe..88cf8a1f 100644
--- a/contrib/gdevln03.c
+++ b/contrib/gdevln03.c
@@ -239,7 +239,7 @@ gx_device_printer gs_sxlcrt_device =
"sxlcrt",
180,
110,
- 42.6667, 32.0,
+ 42.6667f, 32.0,
0, 0, 0, 0,
1, sxlcrt_print_page);
diff --git a/contrib/gdevlx32.c b/contrib/gdevlx32.c
index 5193cfe2..b06c7ec1 100644
--- a/contrib/gdevlx32.c
+++ b/contrib/gdevlx32.c
@@ -138,9 +138,9 @@ static int qualify_buffer(pagedata *gendata);
static int roll_buffer(pagedata *gendata);
static void calclinemargins(pagedata *gendata, byte *data, int mask, int *left, int *right);
static void calcbufmargins(pagedata *gendata,int head);
-static void print_color_page(pagedata *gendata);
+static int print_color_page(pagedata *gendata);
static void print_mono_page(pagedata *gendata);
-static void print_photo_page(pagedata *gendata);
+static int print_photo_page(pagedata *gendata);
/* Codes for the color indexes. */
#define WHITE 0x00 /* Pure white */
@@ -239,12 +239,12 @@ static void print_photo_page(pagedata *gendata);
* it's quite hard to know, from inside a printer driver, if we are
* printing on envelopes or on standard paper, so we just ignore that.
*/
-#define LXM3200_TOP_MARGIN 0.070
-#define LXM3200_BOTTOM_MARGIN 0.200
-#define LXM3200_A4_LEFT_MARGIN 0.135
-#define LXM3200_LETTER_LEFT_MARGIN 0.250
-#define LXM3200_A4_RIGHT_MARGIN 0.135
-#define LXM3200_LETTER_RIGHT_MARGIN 0.250
+#define LXM3200_TOP_MARGIN 0.070f
+#define LXM3200_BOTTOM_MARGIN 0.200f
+#define LXM3200_A4_LEFT_MARGIN 0.135f
+#define LXM3200_LETTER_LEFT_MARGIN 0.250f
+#define LXM3200_A4_RIGHT_MARGIN 0.135f
+#define LXM3200_LETTER_RIGHT_MARGIN 0.250f
/* Offsets for the top and bootom start of the printing frame. */
#define LXM3200_A4_TOPOFFSET 84
@@ -563,6 +563,7 @@ lxm3200_map_color_rgb(gx_device *dev, gx_color_index color,
static int
lxm3200_print_page(gx_device_printer *pdev, gp_file *prn_stream)
{
+ int code = 0;
lxm_device *dev = (lxm_device *)pdev;
pagedata *gendata;
@@ -766,11 +767,13 @@ lxm3200_print_page(gx_device_printer *pdev, gp_file *prn_stream)
switch(gendata->rendermode)
{
case LXM3200_P:
- print_photo_page(gendata);
+ code = print_photo_page(gendata);
+ if (code < 0) goto end;
break;
case LXM3200_C:
- print_color_page(gendata);
+ code = print_color_page(gendata);
+ if (code < 0) goto end;
break;
case LXM3200_M:
@@ -782,11 +785,13 @@ lxm3200_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* Output the end-of-page epilogue */
outputepilogue(gendata);
+ end:
+
/* Free the allocated resources */
freeresources(dev);
/* Done. Bye bye, see you on next page. */
- return(0);
+ return code;
}
/* Function that Ghostscript calls to ask the driver
@@ -1243,8 +1248,13 @@ finalizeheader(pagedata *gendata, int vskip, int newhead)
*/
dir = (header[2] & 0x01 ? LEFT : RIGHT);
- /* Retrieve the horizontal offset for the next stripe */
- offs2 = gendata->dev->hoffset[newhead][gendata->direction];
+ /* Retrieve the horizontal offset for the next stripe. We don't do this
+ if newhead is negative, because otherwise we would be out of bounds in
+ gendata->dev->hoffset[]; offs2 isn't actually used in this case anyway.
+ */
+ if (newhead >= 0) {
+ offs2 = gendata->dev->hoffset[newhead][gendata->direction];
+ }
/* Calculate the separation adjust in 1200ths of an inch */
if(newhead == LEFT)
@@ -1263,7 +1273,9 @@ finalizeheader(pagedata *gendata, int vskip, int newhead)
vskip *= gendata->yrmul;
/* Calculate absolute starting position of new stripe */
- nstartabs = newstart + offs2;
+ if (newhead >= 0) {
+ nstartabs = newstart + offs2;
+ }
/* Calculate absolute ending position of this stripe
* by summing (with proper sign) the starting position
@@ -1726,6 +1738,19 @@ encode_bw_buf(pagedata *gendata)
left = gendata->left - csep;
right = gendata->right + 2*csep;
}
+ /* Make sure we don't try to write data to the left of 0, or the right of the
+ * media. In the absence of a physical pritner to try this on, we'll have to
+ * hope the comment above is correct and we can simply not bother with the
+ * optimisation for accelerating the print head. The right edge one seems
+ * bonkers, why would we care about accelerating the head when we have
+ * already started printing ?
+ * This is to fix bug #701905, accessing beyond the end of gendata->outdata
+ * in 'convbuf' because right - left > number bytes in scan line.
+ */
+ if (left < 0)
+ left = 0;
+ if (right > gendata->numbytes)
+ right = gendata->numbytes;
/* Number of columns in a full row */
numcols = right - left;
@@ -2220,7 +2245,7 @@ static int
fill_mono_buffer(pagedata *gendata, int vline)
{
byte *in_data, *data;
- int i, ret, ofs;
+ int i, ret, ofs, code = 0;
/* Initialize the "data" pointer, that will be used to
* scan all the lines in the buffer, and the "ofs" pointer
@@ -2242,8 +2267,10 @@ fill_mono_buffer(pagedata *gendata, int vline)
while(vline < gendata->numvlines)
{
/* Ask Ghostscript for one rasterized line */
- gdev_prn_get_bits((gx_device_printer *)gendata->dev,
+ code = gdev_prn_get_bits((gx_device_printer *)gendata->dev,
vline, data+ofs, &in_data);
+ if (code < 0)
+ return code;
/* And check if it's all zero: if not, break out of
* the loop. This nice trick with memcpy it's by Stephen
@@ -2301,8 +2328,10 @@ fill_mono_buffer(pagedata *gendata, int vline)
/* If we are not at the end of the page, copy one more
* scanline into the buffer.
*/
- gdev_prn_get_bits((gx_device_printer *)gendata->dev,
+ code = gdev_prn_get_bits((gx_device_printer *)gendata->dev,
vline, data+ofs, &in_data);
+ if (code < 0)
+ return code;
if(in_data != data+ofs)memcpy(data+ofs, in_data, gendata->numrbytes);
}
@@ -2333,7 +2362,7 @@ static int
init_buffer(pagedata *gendata)
{
byte *in_data, *data;
- int i, ret, p1, p2, ofs;
+ int i, ret, p1, p2, ofs, code = 0;
data = gendata->scanbuf;
ofs = gendata->goffset;
@@ -2375,8 +2404,11 @@ init_buffer(pagedata *gendata)
if(i < gendata->numvlines)
{
- gdev_prn_get_bits((gx_device_printer *)gendata->dev,
+ code = gdev_prn_get_bits((gx_device_printer *)gendata->dev,
i, data+ofs, &in_data);
+ if (code < 0)
+ return code;
+
if(in_data != data+ofs)memcpy(data+ofs, in_data, gendata->numrbytes);
}
@@ -2562,8 +2594,10 @@ roll_buffer(pagedata *gendata)
memset(data, 0, gendata->numbytes);
if(vl < gendata->numvlines)
{
- gdev_prn_get_bits((gx_device_printer *)gendata->dev,
- vl, data+ofs, &in_data);
+ int code = gdev_prn_get_bits((gx_device_printer *)gendata->dev, vl, data+ofs, &in_data);
+ if (code < 0) {
+ return code;
+ }
if(in_data != data+ofs)memcpy(data+ofs, in_data, gendata->numrbytes);
}
vl++;
@@ -2714,7 +2748,7 @@ calcbufmargins(pagedata *gendata, int head)
* This is the main routine that prints in
* standard color mode.
*/
-static void
+static int
print_color_page(pagedata *gendata)
{
int res, lline, cmask;
@@ -2735,12 +2769,15 @@ print_color_page(pagedata *gendata)
*/
res = init_buffer(gendata);
while(res == 0)res = roll_buffer(gendata);
+ if (res < 0) {
+ return res;
+ }
/* If this buffer happens to be the last one,
* and empty as well, we had a blank page.
* Just exit without ado.
*/
- if(res == LAST)return;
+ if(res == LAST)return 0;
/* This is the first non-blank line of the
* page: issue a vertical skip command to
@@ -3082,6 +3119,8 @@ print_color_page(pagedata *gendata)
* by the trailing sequence).
*/
finalizeheader(gendata, 0, -1);
+
+ return 0;
}
/* This is the equivalent of print_color_page()
@@ -3189,7 +3228,7 @@ print_mono_page(pagedata *gendata)
* no need to care for different heights of the
* printing pens (i.e.: no "lastblack" tricks).
*/
-static void
+static int
print_photo_page(pagedata *gendata)
{
int res, lline;
@@ -3197,7 +3236,11 @@ print_photo_page(pagedata *gendata)
res = init_buffer(gendata);
while(res == 0)res = roll_buffer(gendata);
- if(res == LAST)return;
+ if (res < 0) {
+ return res;
+ }
+
+ if(res == LAST)return 0;
skiplines(gendata, gendata->curvline, COLTOPSTART);
lline = gendata->curvline;
@@ -3256,6 +3299,9 @@ print_photo_page(pagedata *gendata)
}
res = roll_buffer(gendata);
+ if (res < 0) {
+ return res;
+ }
while(!(res & LAST))
{
@@ -3315,6 +3361,9 @@ print_photo_page(pagedata *gendata)
}
res = roll_buffer(gendata);
+ if (res < 0) {
+ return res;
+ }
}
switch(res)
@@ -3331,6 +3380,7 @@ print_photo_page(pagedata *gendata)
encode_col_buf(gendata, LEFT);
lline++;
}
+ break;
case RHDATA:
calcbufmargins(gendata, RIGHT);
@@ -3369,4 +3419,5 @@ print_photo_page(pagedata *gendata)
}
finalizeheader(gendata, 0, -1);
+ return 0;
}
diff --git a/contrib/gdevlx7.c b/contrib/gdevlx7.c
index 9f0f127b..37f9697f 100644
--- a/contrib/gdevlx7.c
+++ b/contrib/gdevlx7.c
@@ -581,6 +581,7 @@ lxmgen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int lr_shift=((lxm_device*)pdev)->headSeparation;
byte *obp[LX7_BSW_H]; /* pointers to buffer lines */
int bufHeight;
+ int code = 0;
/* initiate vres mapping variable */
vres=LXR_600; /* default vertical resolution */
@@ -689,19 +690,24 @@ lxmgen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int c1200; /* testing empty line for 1200dpi... */
/* copy one line & test for all zeroes */
- gdev_prn_get_bits(pdev, pheight-prest, /* current line No. */
+ code = gdev_prn_get_bits(pdev, pheight-prest, /* current line No. */
pbuf, /* our buffer if needed */
&ppbuf); /* returns pointer to scanline
* either our buffer or
* gs internal data buffer
*/
+ if (code < 0)
+ goto error;
+
if (vres==LXR_1200 && (pheight-prest+LXH_DSKIP1<pheight))
{
- gdev_prn_get_bits(pdev, pheight-prest+LXH_DSKIP1,
+ code = gdev_prn_get_bits(pdev, pheight-prest+LXH_DSKIP1,
/* current line No. */
pbuf+bwidth, /* our buffer if needed */
&ppbuf2);
c1200=LX_LINE_EMPTY(ppbuf2,bwidth);
+ if (code < 0)
+ goto error;
}
else
c1200=1;
@@ -791,13 +797,14 @@ lxmgen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* eject page */
lex_eject(prn_stream);
+error:
gs_free(pdev->memory->non_gc_memory, (char*)pbuf,rpbufsize, 1, "lxmgen_print_page(pbuf)");
gs_free(pdev->memory->non_gc_memory, (char*)outbuf,OUT_BUF_SIZE, 1, "lxmgen_print_page(outbuf)");
#ifdef DEBUG
dprintf1("[%s] print_page() end\n",pdev->dname);
#endif
- return 0;
+ return code;
}
static int
diff --git a/contrib/gdevmd2k.c b/contrib/gdevmd2k.c
index ed45e981..86202774 100644
--- a/contrib/gdevmd2k.c
+++ b/contrib/gdevmd2k.c
@@ -28,11 +28,11 @@
#include <stdlib.h>
#include <limits.h>
-#define MM_PER_INCH 25.4
-#define TOP_MARGIN 12. / MM_PER_INCH
-#define BOTTOM_MARGIN 15. / MM_PER_INCH
-#define LEFT_MARGIN 3.4 / MM_PER_INCH
-#define RIGHT_MARGIN 3.4 / MM_PER_INCH
+#define MM_PER_INCH 25.4f
+#define TOP_MARGIN 12.f / MM_PER_INCH
+#define BOTTOM_MARGIN 15.f / MM_PER_INCH
+#define LEFT_MARGIN 3.4f / MM_PER_INCH
+#define RIGHT_MARGIN 3.4f / MM_PER_INCH
/* The device descriptor */
static dev_proc_open_device(alps_open);
@@ -110,8 +110,8 @@ typedef enum {
static int
alps_open(gx_device *pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
const float margins[4] = {
LEFT_MARGIN,
BOTTOM_MARGIN,
@@ -129,10 +129,10 @@ alps_open(gx_device *pdev)
return_error(gs_error_rangecheck);
density = (xdpi == 300 ? 0.75 : xdpi == 600 ? 0.44 : 0.4);
- dev_alps->cyan *= density;
- dev_alps->magenta *= density;
- dev_alps->yellow *= density;
- dev_alps->black *= density;
+ dev_alps->cyan = (int)(dev_alps->cyan * density);
+ dev_alps->magenta = (int)(dev_alps->magenta * density);
+ dev_alps->yellow = (int)(dev_alps->yellow * density);
+ dev_alps->black = (int)(dev_alps->black * density);
return gdev_prn_open(pdev);
}
@@ -402,15 +402,17 @@ runlength(byte *out, byte *in, int length)
return p_out - out;
}
-#define write_short(data, stream) { \
- gp_fputc((unsigned char) (data), stream); \
- gp_fputc((unsigned short) (data) >> 8, stream); \
+static void write_short(unsigned data, gp_file* stream)
+{
+ gp_fputc((unsigned char) (data), stream);
+ gp_fputc((unsigned short) (data) >> 8, stream);
}
-#define alps_cmd(cmd1, data, cmd2, stream) { \
- gp_fwrite(cmd1, 1, 3, stream); \
- write_short(data, stream); \
- gp_fputc(cmd2, stream); \
+static void alps_cmd(const char* cmd1, unsigned data, int cmd2, gp_file* stream)
+{
+ gp_fwrite(cmd1, 1, 3, stream);
+ write_short(data, stream);
+ gp_fputc(cmd2, stream);
}
static void
@@ -449,8 +451,8 @@ alps_init(gx_device_printer *pdev, gp_file *prn_stream, alps_printer_type ptype)
: pdev->x_pixels_per_inch == 600 ? 3 : 4), prn_stream);
gp_fputc(0122, prn_stream);
- height = (pdev->MediaSize[1] - pdev->HWMargins[1] - pdev->HWMargins[3])
- * pdev->y_pixels_per_inch / 72.;
+ height = (short)((pdev->MediaSize[1] - pdev->HWMargins[1] - pdev->HWMargins[3])
+ * pdev->y_pixels_per_inch / 72.);
alps_cmd("\033\046\154", height, 0120, prn_stream);
/* if -dReverseSide ... */
@@ -486,7 +488,7 @@ alps_print_page(gx_device_printer *pdev, gp_file *prn_stream,
int c_comp, num_comp = pdev->color_info.num_components;
int n_comp = (dev_alps->mediaType == 1 ? 3 : num_comp);
int *error, *ep;
- int i, j;
+ int i, j, code = 0;
/* allocate memory */
work = (byte *)gs_malloc(pdev->memory->non_gc_memory, 3+sizeof(int), line_size,
@@ -528,19 +530,23 @@ alps_print_page(gx_device_printer *pdev, gp_file *prn_stream,
for(y = 0; y < y_height; y ++) {
uint len = line_size;
- gdev_prn_get_bits(pdev, y, in, &dp);
+ code = gdev_prn_get_bits(pdev, y, in, &dp);
+ if (code < 0)
+ return code;
switch (pdev->color_info.depth) {
case 4:
/* get a component of CMYK from raster data */
len = cmyk_to_bit(work, dp, len, c_comp);
dp = work;
+ /* Fall through. */
case 1:
/* remove trailing 0s */
for( ; len > 0 && dp[len-1] == 0; len --);
break;
case 32:
dp += c_comp;
+ /* Fall through. */
case 8:
outP = work;
ep = error;
diff --git a/contrib/gdevop4w.c b/contrib/gdevop4w.c
index 3109cc67..a92f6e63 100644
--- a/contrib/gdevop4w.c
+++ b/contrib/gdevop4w.c
@@ -81,8 +81,8 @@
* inexact paperlength which is set to 117 10ths.
* Somebody should check for letter sized paper. I left it at 0.07".
*/
-#define OKI4W_MARGINS_LETTER 0.125, 0.25, 0.125, 0.07
-#define OKI4W_MARGINS_A4 0.125, 0.25, 0.125, 0.07
+#define OKI4W_MARGINS_LETTER 0.125f, 0.25f, 0.125f, 0.07f
+#define OKI4W_MARGINS_A4 0.125f, 0.25f, 0.125f, 0.07f
/* We round up the LINE_SIZE to a multiple of a ulong for faster scanning. */
#define word ulong
@@ -137,6 +137,8 @@ oki4w_open(gx_device *pdev)
static int
oki4w_close(gx_device *pdev)
{
+ /* RJW: We must call the close entry point for the class. */
+ return gdev_prn_close(pdev);
/*
if ( pdev->Duplex_set >= 0 && pdev->Duplex )
{ gdev_prn_open_printer(pdev, 1);
@@ -152,79 +154,6 @@ oki4w_close(gx_device *pdev)
/* ------ Internal routines ------ */
-static int
-oki_compress(byte *src, byte *dst, int count)
-{
- int dcnt = 0;
- byte lastval = *src;
- int run = 1;
- src++;
- count--;
- while (count-- > 0) {
- byte newval = *src++;
- if (newval == lastval) {
- run++;
- } else {
- /* end of run, flush data */
- if (run == 1) {
- byte *backptr = dst++;
- *dst++ = lastval;
- dcnt++;
- lastval = newval;
- while (run < 128 && count > 0) {
- run++;
- newval = *src++;
- *dst++ = newval;
- dcnt++;
- count--;
- if (newval == lastval) {
- break;
- }
- }
- if (newval == lastval) {
- run--;
- dst--;
- dcnt--;
- }
- *backptr = dst - backptr - 2;
- if (newval == lastval) {
- run = 2;
- } else {
- run = 1;
- }
- continue;
- }
- while (run > 128) {
- *dst++ = 0x81;
- *dst++ = lastval;
- run -= 128;
- dcnt += 2;
- }
- if (run > 0) {
- *dst++ = (0x101 - run) & 0xff;
- *dst++ = lastval;
- dcnt += 2;
- }
- lastval = newval;
- run = 1;
- }
- }
- /* end of run, flush data */
- while (run > 128) {
- *dst++ = 0x81;
- *dst++ = lastval;
- run -= 128;
- dcnt += 2;
- }
- if (run > 0) {
- *dst++ = (0x101 - run) & 0xff;
- *dst++ = lastval;
- dcnt += 2;
- }
-
- return dcnt;
-}
-
/* Send the page to the printer. For speed, compress each scan line, */
/* since computer-to-printer communication time is often a bottleneck. */
static int
@@ -241,8 +170,8 @@ oki4w_print_page(gx_device_printer *pdev, gp_file *prn_stream)
#define data ((byte *)data_words)
#define out_row ((byte *)out_row_words)
byte *out_data;
- int x_dpi = pdev->x_pixels_per_inch;
- int y_dpi = pdev->y_pixels_per_inch;
+ int x_dpi = (int)pdev->x_pixels_per_inch;
+ int y_dpi = (int)pdev->y_pixels_per_inch;
int y_dots_per_pixel = x_dpi / y_dpi;
int dpi_code, compress_code;
int num_rows = dev_print_scan_lines(pdev);
@@ -264,14 +193,12 @@ oki4w_print_page(gx_device_printer *pdev, gp_file *prn_stream)
if (y_dpi == 150) {
dpi_code = 3;
- compress_code = 2;
} else if (y_dpi == 300) {
dpi_code = 5;
- compress_code = 2;
} else {
dpi_code = 7;
- compress_code = 2;
}
+ compress_code = 2;
/* Initialize printer. */
/* if ( pdev->PageCount == 0 ) { */
@@ -332,13 +259,8 @@ oki4w_print_page(gx_device_printer *pdev, gp_file *prn_stream)
num_blank_lines = 0;
/* Compress the data */
- if (compress_code == 6) {
- out_count = oki_compress(data, out_data,
- (end_data - data_words) * W);
- } else {
- out_count = gdev_pcl_mode2compress(data_words,
- end_data, out_data);
- }
+ out_count = gdev_pcl_mode2compress(data_words,
+ end_data, out_data);
/* Transfer the data */
for (i = 0; i < y_dots_per_pixel; ++i) {
diff --git a/contrib/japanese/gdev10v.c b/contrib/japanese/gdev10v.c
index 510a74e8..f4c349d1 100644
--- a/contrib/japanese/gdev10v.c
+++ b/contrib/japanese/gdev10v.c
@@ -68,13 +68,26 @@ static dev_proc_print_page(bj10v_print_page);
static dev_proc_get_initial_matrix(bj10v_get_initial_matrix);
#endif
+static int
+bj10v_open(gx_device * pdev)
+{
+ if (pdev->HWResolution[0] < 180 ||
+ pdev->HWResolution[1] < 180)
+ {
+ emprintf(pdev->memory, "device requires a resolution of at least 180dpi\n");
+ return_error(gs_error_rangecheck);
+ }
+ return gdev_prn_open(pdev);
+}
+
+
#if 0
gx_device_procs prn_bj10v_procs =
prn_matrix_procs(gdev_prn_open, bj10v_get_initial_matrix,
gdev_prn_output_page, gdev_prn_close);
#endif
gx_device_procs prn_bj10v_procs =
- prn_procs(gdev_prn_open, gdev_prn_output_page, gdev_prn_close);
+ prn_procs(bj10v_open, gdev_prn_output_page, gdev_prn_close);
gx_device_printer gs_bj10v_device =
prn_device(prn_bj10v_procs, "bj10v",
@@ -196,8 +209,8 @@ bj10v_output_run(byte *data, int dnum, int bytes,
static int
bj10v_print_page(gx_device_printer *pdev, gp_file *prn_stream)
{ int line_size = gdev_prn_raster((gx_device *)pdev);
- int xres = pdev->x_pixels_per_inch;
- int yres = pdev->y_pixels_per_inch;
+ int xres = (int)pdev->x_pixels_per_inch;
+ int yres = (int)pdev->y_pixels_per_inch;
const char *mode = (yres == 180 ?
(xres == 180 ? "\052\047" : "\052\050") :
"|*");
@@ -206,7 +219,8 @@ bj10v_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int x_skip_unit = bytes_per_column * (xres / 180);
int y_skip_unit = (yres / 180);
byte *in = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "bj10v_print_page(in)");
- byte *out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "bj10v_print_page(out)");
+ /* We need one extra byte in <out> for our sentinel. */
+ byte *out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column * line_size + 1, 1, "bj10v_print_page(out)");
int lnum = 0;
int y_skip = 0;
int code = 0;
diff --git a/contrib/japanese/gdevalps.c b/contrib/japanese/gdevalps.c
index e6af9cf1..9d3122ac 100644
--- a/contrib/japanese/gdevalps.c
+++ b/contrib/japanese/gdevalps.c
@@ -43,9 +43,9 @@
/* Alps Micro Dry 600dpi monochrome printer driver */
#include "gdevprn.h"
-#define MD_TOP_MARGIN 0.47
-#define MD_BOTTOM_MARGIN 0.59
-#define MD_SIDE_MARGIN 0.13
+#define MD_TOP_MARGIN 0.47f
+#define MD_BOTTOM_MARGIN 0.59f
+#define MD_SIDE_MARGIN 0.13f
#define X_DPI 600
#define Y_DPI 600
@@ -155,13 +155,20 @@ static const char end_md[] = {
static int
md_open(gx_device *pdev)
{
- static const float md_margins[4] =
- { MD_SIDE_MARGIN, MD_BOTTOM_MARGIN,
- MD_SIDE_MARGIN, MD_TOP_MARGIN
- };
-
- gx_device_set_margins(pdev, md_margins, true);
- return gdev_prn_open(pdev);
+ static const float md_margins[4] =
+ {
+ MD_SIDE_MARGIN, MD_BOTTOM_MARGIN,
+ MD_SIDE_MARGIN, MD_TOP_MARGIN
+ };
+
+ if (pdev->HWResolution[0] != 600)
+ {
+ emprintf(pdev->memory, "device must have an X resolution of 600dpi\n");
+ return_error(gs_error_rangecheck);
+ }
+
+ gx_device_set_margins(pdev, md_margins, true);
+ return gdev_prn_open(pdev);
}
/* MD5000 monochrome mode entrance. */
diff --git a/contrib/japanese/gdevespg.c b/contrib/japanese/gdevespg.c
index 18ce6ca4..2f182134 100644
--- a/contrib/japanese/gdevespg.c
+++ b/contrib/japanese/gdevespg.c
@@ -66,8 +66,8 @@ static const char *epson_remote_start = "\033\001@EJL \r\n";
static int
escpage_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -81,8 +81,8 @@ escpage_open(gx_device * pdev)
static int
lp2000_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -273,21 +273,21 @@ escpage_paper_set(gx_device_printer * pdev, gp_file * fp)
int width, height, w, h, wp, hp, bLandscape;
EpagPaperTable *pt;
- width = pdev->MediaSize[0];
- height = pdev->MediaSize[1];
+ width = (int)pdev->MediaSize[0];
+ height = (int)pdev->MediaSize[1];
if (width < height) {
bLandscape = 0;
w = width;
h = height;
- wp = width / 72.0 * pdev->x_pixels_per_inch;
- hp = height / 72.0 * pdev->y_pixels_per_inch;
+ wp = (int)(width / 72.0 * pdev->x_pixels_per_inch);
+ hp = (int)(height / 72.0 * pdev->y_pixels_per_inch);
} else {
bLandscape = 1;
w = height;
h = width;
- wp = height / 72.0 * pdev->y_pixels_per_inch;
- hp = width / 72.0 * pdev->x_pixels_per_inch;
+ wp = (int)(height / 72.0 * pdev->y_pixels_per_inch);
+ hp = (int)(width / 72.0 * pdev->x_pixels_per_inch);
}
for (pt = epagPaperTable; pt->escpage > 0; pt++)
diff --git a/contrib/japanese/gdevlbp3.c b/contrib/japanese/gdevlbp3.c
index 096aecf6..8cbc2ce8 100644
--- a/contrib/japanese/gdevlbp3.c
+++ b/contrib/japanese/gdevlbp3.c
@@ -137,8 +137,8 @@ BoundImage(gx_device_printer *pDev, struct bounding *pBox)
height*10/Yres < 98 ? a5 :\
height*10/Yres < 109 ? b5 :\
height*10/Yres < 116 ? letter : a4;
- Xsize = Xres * mm_to_inch(PaperInfo[paper].w-100) / 160;
- Ysize = Yres * mm_to_inch(PaperInfo[paper].h-100) / 10;
+ Xsize = (int)(Xres * mm_to_inch(PaperInfo[paper].w-100) / 160);
+ Ysize = (int)(Yres * mm_to_inch(PaperInfo[paper].h-100) / 10);
/* ----==== Allocate momory ====---- */
if (LineSize < Xsize*2+1) {
LineSize = Xsize*2+1;
diff --git a/contrib/japanese/gdevmjc.c b/contrib/japanese/gdevmjc.c
index 85fa6a8a..b132167d 100644
--- a/contrib/japanese/gdevmjc.c
+++ b/contrib/japanese/gdevmjc.c
@@ -113,9 +113,9 @@ copies. */
/* Margins are left, bottom, right, top. */
/* left bottom right top */
-#define MJ700V2C_MARGINS_A4 0.118, 0.52, 0.118, 0.33465
-#define MJ6000C_MARGINS_A2 0.948, 0.52, 1.969, 0.33465
-#define MJ8000C_MARGINS_A2 0.194, 0.52, 0.194, 0.33465
+#define MJ700V2C_MARGINS_A4 0.118f, 0.52f, 0.118f, 0.33465f
+#define MJ6000C_MARGINS_A2 0.948f, 0.52f, 1.969f, 0.33465f
+#define MJ8000C_MARGINS_A2 0.194f, 0.52f, 0.194f, 0.33465f
/* Define bits-per-pixel for generic drivers - default is 24-bit mode */
#ifndef BITSPERPIXEL
@@ -296,8 +296,8 @@ mjcmyk_device(mj8000c_procs, "mj8000c", 360, 360, BITSPERPIXEL,
static int
gdev_mjc_paper_size(gx_device *dev)
{
- int width = dev->MediaSize[0];
- int height = dev->MediaSize[1];
+ int width = (int)dev->MediaSize[0];
+ int height = (int)dev->MediaSize[1];
if (width == 1190 && height == 1684)
return PAPER_SIZE_A2;
@@ -333,8 +333,8 @@ mj8000c_open(gx_device * pdev)
static int
mj_open(gx_device *pdev, int ptype)
{ /* Change the margins if necessary. */
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
static const float mj_margin[4] = { MJ700V2C_MARGINS_A4 };
static const float mj6000c_a2[4] = { MJ6000C_MARGINS_A2 };
@@ -365,7 +365,7 @@ mj_open(gx_device *pdev, int ptype)
gx_device_set_margins(pdev, m, true);
if (mj->colorcomp == 3)
- mj->density = mj->density * 720 / ydpi * 1.5;
+ mj->density = (int)(mj->density * 720 / ydpi) * 1.5;
else
mj->density = mj->density * 720 / ydpi;
@@ -440,6 +440,7 @@ mj_put_params(gx_device *pdev, gs_param_list *plist, int ptype)
code = put_param_int(plist, "Magenta", &magenta, 0, INT_MAX, code);
code = put_param_int(plist, "Yellow", &yellow, 0, INT_MAX, code);
code = put_param_int(plist, "Black", &black, 0, INT_MAX, code);
+ (void) code;
if ((code = param_read_bool(plist,
(param_name = "Unidirectional"),
@@ -667,7 +668,7 @@ mj_raster_cmd(int c_id, int in_size, byte* in, byte* buf2,
** walk forward, looking for matches:
*/
- for( q++ ; *q == *p && q < in_end ; q++ ) {
+ for( q++ ; q < in_end && *q == *p ; q++ ) {
if( (q-p) >= 128 ) {
if( p > inp ) {
count = p - inp;
@@ -998,7 +999,6 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
plane_size = calc_buffsize(line_size, storage_bpp);
if (bits_per_pixel == 1) { /* Data printed direct from i/p */
- databuff_size = 0; /* so no data buffer required, */
outbuff_size = plane_size * 4; /* but need separate output buffers */
}
@@ -1053,6 +1053,7 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
p += xtalbuff_size;
Kbuf[1] = p;
p += xtalbuff_size;
+ (void) p;
}
storage = (word *) gs_malloc(pdev->memory->non_gc_memory, storage_size_words, W, "mj_colour_print_page");
@@ -1105,7 +1106,6 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
p += plane_size;
}
if (bits_per_pixel == 1) {
- out_data = out_row = p; /* size is outbuff_size * 4 */
data[1] += databuff_size; /* coincides with plane_data pointers */
data[3] += databuff_size;
}
@@ -1174,17 +1174,14 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
#define MOFFSET (pdev->t_margin - MJ700V2C_PRINT_LIMIT) /* Print position */
{
- int MJ_MARGIN_MM = 55;
- uint top_skip = ( MJ_MARGIN_MM * pdev->y_pixels_per_inch ) / 254;
- top_skip = (top_skip ^ (-1)) & 65536;
gp_fwrite("\033(V\2\0\0\0",sizeof(byte), 7, prn_stream);
gp_fwrite("\033(v\2\0\0\xff",sizeof(byte), 7, prn_stream);
}
/* Send each scan line in turn */
{
- long int lend = pdev->height -
- (dev_t_margin_points(pdev) + dev_b_margin_points(pdev));
+ long int lend = (int)(pdev->height -
+ (dev_t_margin_points(pdev) + dev_b_margin_points(pdev)));
int cErr, mErr, yErr, kErr;
int this_pass, i;
long int lnum;
@@ -1441,14 +1438,6 @@ mj_color_correct(gx_color_value *Rptr ,gx_color_value *Gptr , gx_color_value *Bp
*Gptr = M;
*Bptr = Y;
return;
- } else if (G>B) { /* R=G>B */
- D = G-B;
- Wa = R;
- H = 256;
- } else { /* B>R=G */
- D = G-B;
- Wa = R;
- H = 1024;
}
}
@@ -1504,7 +1493,10 @@ mj_color_correct(gx_color_value *Rptr ,gx_color_value *Gptr , gx_color_value *Bp
if (Y<0)
Y=0;
- if(H>256 && H<1024){ /* green correct */
+ /* 2019-10-29 this used to be 'if(H>256 && H<1024)', which can then go
+ beyond bounds of the 512-element grnsep2[]. So have patched up to avoid
+ this, but without any proper idea about what's going on. */
+ if(H>256 && H<768){ /* green correct */
short work;
work=(((long)grnsep[M]*(long)grnsep2[H-256])>>16);
C+=work;
@@ -1613,12 +1605,12 @@ gdev_mjc_map_color_rgb(gx_device *pdev, gx_color_index color,
prgb[2] = -(c >> 2);
}
else
- { gx_color_value value = (gx_color_value)color ^ 0xff;
+ { gx_color_index value = (gx_color_index)color ^ 0xff;
prgb[0] = prgb[1] = prgb[2] = (value << 8) + value;
}
break;
case 16:
- { gx_color_value c = (gx_color_value)color ^ 0xffff;
+ { gx_color_index c = (gx_color_index)color ^ 0xffff;
ushort value = c >> 11;
prgb[0] = ((value << 11) + (value << 6) + (value << 1) +
(value >> 4)) >> (16 - gx_color_value_bits);
@@ -1631,7 +1623,7 @@ gdev_mjc_map_color_rgb(gx_device *pdev, gx_color_index color,
}
break;
case 24:
- { gx_color_value c = (gx_color_value)color ^ 0xffffff;
+ { gx_color_index c = (gx_color_index)color ^ 0xffffff;
prgb[0] = gx_color_value_from_byte(c >> 16);
prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff);
prgb[2] = gx_color_value_from_byte(c & 0xff);
diff --git a/contrib/japanese/gdevnpdl.c b/contrib/japanese/gdevnpdl.c
index 4ecace50..9deadaee 100644
--- a/contrib/japanese/gdevnpdl.c
+++ b/contrib/japanese/gdevnpdl.c
@@ -71,45 +71,45 @@
* The commented values are from the PC-PR1000E/4 User's Manual.
*/
/* margins of A3 paper */
-#define L_MARGIN_A3 0.20
-#define B_MARGIN_A3 0.24
-#define R_MARGIN_A3 0.20
-#define T_MARGIN_A3 0.20
+#define L_MARGIN_A3 0.20f
+#define B_MARGIN_A3 0.24f
+#define R_MARGIN_A3 0.20f
+#define T_MARGIN_A3 0.20f
/* margins of A4 paper */
-#define L_MARGIN_A4 0.31
-#define B_MARGIN_A4 0.20
-#define R_MARGIN_A4 0.16
-#define T_MARGIN_A4 0.20
+#define L_MARGIN_A4 0.31f
+#define B_MARGIN_A4 0.20f
+#define R_MARGIN_A4 0.16f
+#define T_MARGIN_A4 0.20f
/* margins of A5 paper */
-#define L_MARGIN_A5 0.31
-#define B_MARGIN_A5 0.16
-#define R_MARGIN_A5 0.16
-#define T_MARGIN_A5 0.20
+#define L_MARGIN_A5 0.31f
+#define B_MARGIN_A5 0.16f
+#define R_MARGIN_A5 0.16f
+#define T_MARGIN_A5 0.20f
/* margins of B4 paper */
-#define L_MARGIN_B4 0.31
-#define B_MARGIN_B4 0.24
-#define R_MARGIN_B4 0.31
-#define T_MARGIN_B4 0.20
+#define L_MARGIN_B4 0.31f
+#define B_MARGIN_B4 0.24f
+#define R_MARGIN_B4 0.31f
+#define T_MARGIN_B4 0.20f
/* margins of B5 paper */
-#define L_MARGIN_B5 0.31
-#define B_MARGIN_B5 0.24
-#define R_MARGIN_B5 0.16
-#define T_MARGIN_B5 0.20
+#define L_MARGIN_B5 0.31f
+#define B_MARGIN_B5 0.24f
+#define R_MARGIN_B5 0.16f
+#define T_MARGIN_B5 0.20f
/* margins of letter size paper */
-#define L_MARGIN_LETTER 0.31
-#define B_MARGIN_LETTER 0.24
-#define R_MARGIN_LETTER 0.20
-#define T_MARGIN_LETTER 0.20
+#define L_MARGIN_LETTER 0.31f
+#define B_MARGIN_LETTER 0.24f
+#define R_MARGIN_LETTER 0.20f
+#define T_MARGIN_LETTER 0.20f
/* margins of postcard size paper */
-#define L_MARGIN_POSTCARD 0.31
-#define B_MARGIN_POSTCARD 0.12
-#define R_MARGIN_POSTCARD 0.24
-#define T_MARGIN_POSTCARD 0.20
+#define L_MARGIN_POSTCARD 0.31f
+#define B_MARGIN_POSTCARD 0.12f
+#define R_MARGIN_POSTCARD 0.24f
+#define T_MARGIN_POSTCARD 0.20f
/* margins of env4 size paper */
-#define L_MARGIN_ENV4 0.20
-#define B_MARGIN_ENV4 0.20
-#define R_MARGIN_ENV4 0.20
-#define T_MARGIN_ENV4 0.20
+#define L_MARGIN_ENV4 0.20f
+#define B_MARGIN_ENV4 0.20f
+#define R_MARGIN_ENV4 0.20f
+#define T_MARGIN_ENV4 0.20f
/* The device descriptors */
static dev_proc_open_device(npdl_open);
@@ -527,8 +527,8 @@ npdl_set_page_layout(gx_device * dev)
static int
npdl_open(gx_device * dev)
{
- int xdpi = dev->x_pixels_per_inch;
- int ydpi = dev->y_pixels_per_inch;
+ int xdpi = (int)dev->x_pixels_per_inch;
+ int ydpi = (int)dev->y_pixels_per_inch;
/* Print Resolution Check */
if (xdpi != ydpi)
diff --git a/contrib/japanese/gdevp201.c b/contrib/japanese/gdevp201.c
index 11f8f98e..1d3f4607 100644
--- a/contrib/japanese/gdevp201.c
+++ b/contrib/japanese/gdevp201.c
@@ -134,6 +134,9 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
byte *in, *out;
int lnum, skip;
int head_pins, lr_pitch, x_dpi;
+ int code = 0;
+ byte mask;
+ int endidx = pdev->width>>3;
switch (check_mode(pdev->dname)){
case PR201:
@@ -160,6 +163,11 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
if(in == 0 || out == 0)
return -1;
+ if (pdev->width & 7)
+ mask = ~(255>>(pdev->width & 7));
+ else
+ mask = 255, endidx--;
+
/* Initialize printer */
gp_fputs("\033cl", pdev->file); /* Software Reset */
gp_fputs("\033P", pdev->file); /* Proportional Mode */
@@ -173,17 +181,26 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
lnum = 0;
skip = 0;
while(lnum < height) {
- byte *inp, *outp, *out_beg, *out_end;
- int x, y, num_lines, size, mod;
-
- /* Copy scan lines */
- if(gdev_prn_copy_scan_lines(pdev, lnum, in, chunk_size) < 0)
- break;
+ byte *inp, *outp, *out_beg, *out_end, *p;
+ int x, y, num_lines, size, mod, i;
/* The number of lines to process */
if((num_lines = height - lnum) > bits_per_column)
num_lines = bits_per_column;
+ /* Copy scan lines */
+ for (i = 0, p = in; i < num_lines; i++, p += line_size) {
+ code = gdev_prn_get_bits(pdev, lnum + i, p, NULL);
+ if (code < 0)
+ goto error;
+ p[endidx] &= mask;
+ }
+
+ /* Ensure we have a full stripe of line data */
+ for (; i < bits_per_column; i++, p += line_size) {
+ memset(p, 0, line_size);
+ }
+
/* Test for all zero */
size = line_size * num_lines;
if(in[0] == 0 &&
@@ -242,7 +259,7 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
out_beg -= (out_beg - out) % bytes_per_column;
/* Dot addressing */
- gp_fprintf(pdev->file, "\033F%04d",
+ gp_fprintf(pdev->file, "\033F%04" PRIdSIZE,
(out_beg - out) / bytes_per_column);
/* Dot graphics */
@@ -264,10 +281,11 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
gp_fputc('\f',pdev->file);
gp_fflush(pdev->file);
+error:
gs_free(pdev->memory->non_gc_memory, (char *)out,
bits_per_column, line_size, "pr201_print_page(out)");
gs_free(pdev->memory->non_gc_memory, (char *)in,
bits_per_column, line_size, "pr201_print_page(in)");
- return 0;
+ return code;
}
diff --git a/contrib/japanese/gdevrpdl.c b/contrib/japanese/gdevrpdl.c
index dee81bb5..d7e561f5 100644
--- a/contrib/japanese/gdevrpdl.c
+++ b/contrib/japanese/gdevrpdl.c
@@ -48,8 +48,8 @@ lprn_device(gx_device_lprn, rpdl_prn_procs, "rpdl",
static int
rpdl_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -238,8 +238,8 @@ rpdl_paper_set(gx_device_printer * pdev, gp_file * prn_stream)
/* Page size match tolerance in points */
#define TOL 5
- width = pdev->MediaSize[0];
- height = pdev->MediaSize[1];
+ width = (int)pdev->MediaSize[0];
+ height = (int)pdev->MediaSize[1];
if (width < height) {
w = width;
diff --git a/contrib/lips4/gdevl4r.c b/contrib/lips4/gdevl4r.c
index 9272a6be..f5015b1d 100644
--- a/contrib/lips4/gdevl4r.c
+++ b/contrib/lips4/gdevl4r.c
@@ -56,9 +56,9 @@ static dev_proc_image_out(lips4_image_out);
(int)((long)(DEFAULT_WIDTH_10THS) * (xdpi) / 10),\
(int)((long)(DEFAULT_HEIGHT_10THS) * (ydpi) / 10),\
xdpi, ydpi, color_bits,\
- -(lm) * (xdpi), -(tm) * (ydpi),\
- (lm) * 72.0, (bm) * 72.0,\
- (rm) * 72.0, (tm) * 72.0\
+ (float)(-(lm) * (xdpi)), (float)(-(tm) * (ydpi)),\
+ (float)((lm) * 72.0), (float)((bm) * 72.0f),\
+ (float)((rm) * 72.0), (float)((tm) * 72.0f)\
),\
lp_device_body_rest_(print_page_copies, image_out),\
cassetFeed, username, LIPS_PJL_DEFAULT,\
@@ -71,9 +71,9 @@ static dev_proc_image_out(lips4_image_out);
(int)((long)(DEFAULT_WIDTH_10THS) * (xdpi) / 10),\
(int)((long)(DEFAULT_HEIGHT_10THS) * (ydpi) / 10),\
xdpi, ydpi, color_bits,\
- -(lm) * (xdpi), -(tm) * (ydpi),\
- (lm) * 72.0, (bm) * 72.0,\
- (rm) * 72.0, (tm) * 72.0\
+ (float)(-(lm) * (xdpi)), (float)(-(tm) * (ydpi)),\
+ (float)((lm) * 72.0), (float)((bm) * 72.0),\
+ (float)((rm) * 72.0), (float)((tm) * 72.0)\
),\
lp_duplex_device_body_rest_(print_page_copies, image_out),\
cassetFeed,\
@@ -214,10 +214,10 @@ lips4_open(gx_device * pdev)
static int
lips_open(gx_device * pdev, lips_printer_type ptype)
{
- int width = pdev->MediaSize[0];
- int height = pdev->MediaSize[1];
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int width = (int)pdev->MediaSize[0];
+ int height = (int)pdev->MediaSize[1];
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Paper Size Check */
if (width <= height) { /* portrait */
@@ -437,6 +437,7 @@ lips_put_params(gx_device * pdev, gs_param_list * plist)
default:
ecode = code;
userne:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
usern.data = 0;
break;
@@ -502,7 +503,7 @@ lips4_put_params(gx_device * pdev, gs_param_list * plist)
(param_name = LIPS_OPTION_MEDIATYPE),
&pmedia)) {
case 0:
- if (pmedia.size > LIPS_MEDIACHAR_MAX) {
+ if (pmedia.size >= LIPS_MEDIACHAR_MAX) {
ecode = gs_error_limitcheck;
goto pmediae;
} else { /* Check the validity of ``MediaType'' characters */
@@ -520,6 +521,7 @@ lips4_put_params(gx_device * pdev, gs_param_list * plist)
default:
ecode = code;
pmediae:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
pmedia.data = 0;
break;
@@ -645,12 +647,15 @@ lips4type_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, int
{
if (!(lprn->CompBuf = gs_malloc(pdev->memory->non_gc_memory, bpl * 3 / 2 + 1, maxY, "(CompBuf)")))
return_error(gs_error_VMerror);
- if (!(lprn->CompBuf2 = gs_malloc(pdev->memory->non_gc_memory, bpl * 3 / 2 + 1, maxY, "(CompBuf2)")))
+
+ /* This buffer is used by lips_rle_encode(), which can require double
+ input size plus 2 bytes. */
+ if (!(lprn->CompBuf2 = gs_malloc(pdev->memory->non_gc_memory, bpl * 2 + 2, maxY, "(CompBuf2)")))
return_error(gs_error_VMerror);
if (lprn->NegativePrint) {
- int rm = pdev->width - (dev_l_margin(pdev) + dev_r_margin(pdev)) * pdev->x_pixels_per_inch;
- int bm = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * pdev->y_pixels_per_inch;
+ int rm = (int)(pdev->width - (dev_l_margin(pdev) + dev_r_margin(pdev)) * pdev->x_pixels_per_inch);
+ int bm = (int)(pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * pdev->y_pixels_per_inch);
/* Draw black rectangle */
gp_fprintf(prn_stream,
"%c{%c%da%c%de%c;;;3}",
@@ -822,11 +827,13 @@ lips4_image_out(gx_device_printer * pdev, gp_file * prn_stream, int x, int y, in
gp_fwrite(lprn->TmpBuf, 1, width / 8 * height, prn_stream);
}
} else {
+ /* 2019-11-28: changed two occurrencies of 'Len' to 'Len_rle' here, but
+ unable to test. */
gs_sprintf(comp_str, "%c%d;%d;%d;10;%d.r", LIPS_CSI,
- Len, width / 8, (int)pdev->x_pixels_per_inch, height);
+ Len_rle, width / 8, (int)pdev->x_pixels_per_inch, height);
if (Len_rle < width / 8 * height - strlen(comp_str) + strlen(raw_str)) {
gp_fprintf(prn_stream, "%s", comp_str);
- gp_fwrite(lprn->CompBuf2, 1, Len, prn_stream);
+ gp_fwrite(lprn->CompBuf2, 1, Len_rle, prn_stream);
} else {
/* compression result is bad. */
gp_fprintf(prn_stream, "%s", raw_str);
@@ -941,8 +948,8 @@ lips_job_start(gx_device_printer * pdev, lips_printer_type ptype, gp_file * prn_
gx_device_lips *const lips = (gx_device_lips *) pdev;
gx_device_lips4 *const lips4 = (gx_device_lips4 *) pdev;
int prev_paper_size, prev_paper_width, prev_paper_height, paper_size;
- int width = pdev->MediaSize[0];
- int height = pdev->MediaSize[1];
+ int width = (int)pdev->MediaSize[0];
+ int height = (int)pdev->MediaSize[1];
int tm, lm, rm, bm;
if (pdev->PageCount == 0) {
@@ -1168,14 +1175,14 @@ lips_job_start(gx_device_printer * pdev, lips_printer_type ptype, gp_file * prn_
}
if (prev_paper_size != paper_size) {
/* Top Margin: 63/300 inch + 5 mm */
- tm = (63. / 300. + 5. / MMETER_PER_INCH - dev_t_margin(pdev)) * pdev->x_pixels_per_inch;
+ tm = (int)((63. / 300. + 5. / MMETER_PER_INCH - dev_t_margin(pdev)) * pdev->x_pixels_per_inch);
if (tm > 0)
gp_fprintf(prn_stream, "%c%dk", LIPS_CSI, tm);
if (tm < 0)
gp_fprintf(prn_stream, "%c%de", LIPS_CSI, -tm);
/* Left Margin: 5 mm left */
- lm = (5. / MMETER_PER_INCH - dev_l_margin(pdev)) * pdev->x_pixels_per_inch;
+ lm = (int)((5. / MMETER_PER_INCH - dev_l_margin(pdev)) * pdev->x_pixels_per_inch);
if (lm > 0)
gp_fprintf(prn_stream, "%c%dj", LIPS_CSI, lm);
if (lm < 0)
@@ -1185,10 +1192,10 @@ lips_job_start(gx_device_printer * pdev, lips_printer_type ptype, gp_file * prn_
gp_fprintf(prn_stream, "%c0;2t", LIPS_CSI);
/* Bottom Margin: height */
- bm = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * pdev->y_pixels_per_inch;
+ bm = (int)(pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * pdev->y_pixels_per_inch);
gp_fprintf(prn_stream, "%c%de", LIPS_CSI, bm);
/* Right Margin: width */
- rm = pdev->width - (dev_l_margin(pdev) + dev_r_margin(pdev)) * pdev->x_pixels_per_inch;
+ rm = (int)(pdev->width - (dev_l_margin(pdev) + dev_r_margin(pdev)) * pdev->x_pixels_per_inch);
gp_fprintf(prn_stream, "%c%da", LIPS_CSI, rm);
gp_fprintf(prn_stream, "%c1;3t", LIPS_CSI);
diff --git a/contrib/lips4/gdevl4v.c b/contrib/lips4/gdevl4v.c
index eb4f31a1..47b3fd17 100644
--- a/contrib/lips4/gdevl4v.c
+++ b/contrib/lips4/gdevl4v.c
@@ -572,18 +572,10 @@ lips4v_copy_text_char(gx_device * dev, const byte * data,
}
}
/* ʸåȡֹ̿2 */
- if (download) {
- if (pdev->current_font != ccode / 128) {
- gs_sprintf(cset_number, "%c%d%%v", LIPS_CSI, ccode / 128);
- lputs(s, cset_number);
- pdev->current_font = ccode / 128;
- }
- } else {
- if (pdev->current_font != ccode / 128) {
- gs_sprintf(cset_number, "%c%d%%v", LIPS_CSI, ccode / 128);
- lputs(s, cset_number);
- pdev->current_font = ccode / 128;
- }
+ if (pdev->current_font != ccode / 128) {
+ gs_sprintf(cset_number, "%c%d%%v", LIPS_CSI, ccode / 128);
+ lputs(s, cset_number);
+ pdev->current_font = ccode / 128;
}
/* 顼 */
@@ -1313,9 +1305,10 @@ lips4v_beginpath(gx_device_vector * vdev, gx_path_type_t type)
if (type & gx_path_type_clip) {
lputs(s, "P(10");
sputc(s, LIPS_IS2);
- } else
+ } else {
lputs(s, "P(00");
sputc(s, LIPS_IS2);
+ }
return 0;
}
@@ -1396,11 +1389,11 @@ lips4v_endpath(gx_device_vector * vdev, gx_path_type_t type)
lputs(s, "P)");
sputc(s, LIPS_IS2);
if (type & gx_path_type_rule) {
- if (type & gx_path_type_winding_number) {
- lputs(s, "}I1");
+ if (type & gx_path_type_even_odd) {
+ lputs(s, "}I0");
sputc(s, LIPS_IS2);
} else {
- lputs(s, "}I0");
+ lputs(s, "}I1");
sputc(s, LIPS_IS2);
}
}
@@ -1640,6 +1633,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
casse:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
break;
}
@@ -1665,6 +1659,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
pmediae:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
pmedia.data = 0;
break;
@@ -1695,6 +1690,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
userne:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
usern.data = 0;
break;
@@ -1716,6 +1712,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
nupe:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
break;
}
@@ -1736,6 +1733,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
tden:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
break;
}
@@ -1771,6 +1769,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
}
ecode = code;
param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
break;
}
@@ -1795,6 +1794,7 @@ lips4v_put_params(gx_device * dev, gs_param_list * plist)
default:
ecode = code;
bppe:param_signal_error(plist, param_name, ecode);
+ /* Fall through. */
case 1:
break;
}
@@ -2469,9 +2469,10 @@ lips4v_image_end_image(gx_image_enum_common_t * info, bool draw_last)
if (pdev->OneBitMask)
pdev->OneBitMask = false;
- else
+ else {
lputs(s, "}Q1100");
sputc(s, LIPS_IS2); /* End of Image */
+ }
pdev->MaskReverse = -1;
diff --git a/contrib/lips4/gdevlips.c b/contrib/lips4/gdevlips.c
index 11aa8323..6dd07047 100644
--- a/contrib/lips4/gdevlips.c
+++ b/contrib/lips4/gdevlips.c
@@ -145,7 +145,7 @@ GetNumSameData(const byte * curPtr, const int maxnum)
if (1 == maxnum) {
return (1);
}
- while (*curPtr == *(curPtr + count) && maxnum > count) {
+ while (maxnum > count && *curPtr == *(curPtr + count)) {
count++;
}
@@ -160,7 +160,7 @@ GetNumWrongData(const byte * curPtr, const int maxnum)
if (1 == maxnum) {
return (1);
}
- while (*(curPtr + count) != *(curPtr + count + 1) && maxnum > count) {
+ while (maxnum > count+1 && *(curPtr + count) != *(curPtr + count + 1)) {
count++;
}
diff --git a/contrib/lips4/gdevlips.h b/contrib/lips4/gdevlips.h
index 0083d70f..1e3dd72c 100644
--- a/contrib/lips4/gdevlips.h
+++ b/contrib/lips4/gdevlips.h
@@ -114,29 +114,29 @@
#define LIPS4_COMPRESS_DEFAULT FALSE
#define LIPS2P_DPI_DEFAULT 240
-#define LIPS2P_LEFT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS2P_BOTTOM_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS2P_RIGHT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS2P_TOP_MARGIN_DEFAULT 5. / MMETER_PER_INCH
+#define LIPS2P_LEFT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS2P_BOTTOM_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS2P_RIGHT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS2P_TOP_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
#define LIPS3_DPI_DEFAULT 300
-#define LIPS3_LEFT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS3_BOTTOM_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS3_RIGHT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS3_TOP_MARGIN_DEFAULT 5. / MMETER_PER_INCH
+#define LIPS3_LEFT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS3_BOTTOM_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS3_RIGHT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS3_TOP_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
#define BJC880J_DPI_DEFAULT 360
-#define BJC880J_LEFT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define BJC880J_BOTTOM_MARGIN_DEFAULT 8. / MMETER_PER_INCH
-#define BJC880J_RIGHT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define BJC880J_TOP_MARGIN_DEFAULT 2. / MMETER_PER_INCH
+#define BJC880J_LEFT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define BJC880J_BOTTOM_MARGIN_DEFAULT (float)(8. / MMETER_PER_INCH)
+#define BJC880J_RIGHT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define BJC880J_TOP_MARGIN_DEFAULT (float)(2. / MMETER_PER_INCH)
#define LIPS4_DPI_DEFAULT 600
-#define LIPS4_LEFT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS4_BOTTOM_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS4_RIGHT_MARGIN_DEFAULT 5. / MMETER_PER_INCH
-#define LIPS4_TOP_MARGIN_DEFAULT 5. / MMETER_PER_INCH
+#define LIPS4_LEFT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS4_BOTTOM_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS4_RIGHT_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
+#define LIPS4_TOP_MARGIN_DEFAULT (float)(5. / MMETER_PER_INCH)
/* Define the default resolutions. */
diff --git a/contrib/lips4/gdevlprn.c b/contrib/lips4/gdevlprn.c
index df8f862e..7461e46e 100644
--- a/contrib/lips4/gdevlprn.c
+++ b/contrib/lips4/gdevlprn.c
@@ -334,9 +334,16 @@ lprn_is_black(gx_device_printer * pdev, int r, int h, int bx)
y0 = (r + h - bh) % maxY;
for (y = 0; y < bh; y++) {
p = &lprn->ImageBuf[(y0 + y) * bpl + bx * lprn->nBw];
- for (x = 0; x < lprn->nBw; x++)
+ for (x = 0; x < lprn->nBw; x++) {
+ /* bpl isn't necessarily a multiple of lprn->nBw, so
+ we need to explicitly stop after the last byte in this
+ line to avoid accessing either the next line's data or
+ going off the end of our buffer completely. This avoids
+ https://bugs.ghostscript.com/show_bug.cgi?id=701785. */
+ if (bx * lprn->nBw + x >= bpl) break;
if (p[x] != 0)
return 1;
+ }
}
return 0;
}
diff --git a/contrib/opvp/gdevopvp.c b/contrib/opvp/gdevopvp.c
index cb2921e6..70475add 100644
--- a/contrib/opvp/gdevopvp.c
+++ b/contrib/opvp/gdevopvp.c
@@ -1796,6 +1796,7 @@ opvp_load_vector_driver(void)
}
OpenPrinter_0_2 = NULL;
ErrorNo = NULL;
+ dlclose(h);
}
i++;
}
@@ -2505,15 +2506,12 @@ opvp_map_rgb_color(gx_device *dev,
b = prgb[2];
#endif
-#if !(ENABLE_SIMPLE_MODE)
- pdev = (gx_device_opvp *)dev;
- r = -1;
-#endif
- cs = OPVP_CSPACE_STANDARDRGB;
-
#if ENABLE_SIMPLE_MODE
cs = colorSpace;
#else
+ pdev = (gx_device_opvp *)dev;
+ r = -1;
+ cs = OPVP_CSPACE_STANDARDRGB;
if (pdev->is_open) {
/* call GetColorSpace */
if (apiEntry->opvpGetColorSpace) {
@@ -2560,7 +2558,11 @@ opvp_map_rgb_color(gx_device *dev,
} else {
k = 0;
}
- return (k + (y << 8) + (m << 16) + (c << 24));
+ return (gx_color_index) k
+ + ((gx_color_index) y << 8)
+ + ((gx_color_index) m << 16)
+ + ((gx_color_index) c << 24)
+ ;
break;
case OPVP_CSPACE_DEVICEGRAY:
#if GS_VERSION_MAJOR >= 8
@@ -3581,13 +3583,17 @@ opvp_fill_mask(
const gx_clip_path *pcpath)
{
if (vector) {
+ int code;
#if GS_VERSION_MAJOR >= 8 /* for gs 8.15 */
- gdev_vector_update_fill_color((gx_device_vector *)dev, NULL, pdcolor);
+ code = gdev_vector_update_fill_color((gx_device_vector *)dev, NULL, pdcolor);
#else
- gdev_vector_update_fill_color((gx_device_vector *)dev, pdcolor);
+ code = gdev_vector_update_fill_color((gx_device_vector *)dev, pdcolor);
#endif
- gdev_vector_update_clip_path((gx_device_vector *)dev, pcpath);
- gdev_vector_update_log_op((gx_device_vector *)dev, lop);
+ if (code < 0) return code;
+ code = gdev_vector_update_clip_path((gx_device_vector *)dev, pcpath);
+ if (code < 0) return code;
+ code = gdev_vector_update_log_op((gx_device_vector *)dev, lop);
+ if (code < 0) return code;
}
return gx_default_fill_mask(dev, data, data_x, raster, id,
@@ -4023,6 +4029,10 @@ opvp_image_plane_data(
if (buf) {
/* Adjust image data gamma */
pbe = (bbox_image_enum *)vinfo->bbox_info;
+ if (!pbe) {
+ ecode = gs_note_error(gs_error_invalidaccess);
+ goto end;
+ }
tinfo = (gx_image_enum *)pbe->target_info;
pgs = tinfo->pgs;
@@ -4339,20 +4349,16 @@ opvp_image_plane_data(
for (i = 0; i < height; i++) {
ptr = buf + raster_length * i;
for (j = 0; j < vinfo->width; j++) {
- ptr[j*3] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3]), effective_transfer[0])));
- ptr[j*3+1] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3+1]), effective_transfer[1])));
- ptr[j*3+2] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3+2]), effective_transfer[2])));
+ ptr[j*3+0] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+0]), effective_transfer[0]));
+ ptr[j*3+1] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+1]), effective_transfer[1]));
+ ptr[j*3+2] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+2]), effective_transfer[2]));
}
}
} else if (vinfo->bits_per_pixel == 8) { /* 8bit Gray image */
for (i = 0; i < height; i++) {
ptr = buf + raster_length * i;
for (j=0; j < vinfo->width; j++) {
- ptr[j] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j]), effective_transfer[3])));
+ ptr[j] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j]), effective_transfer[3]));
}
}
}
@@ -4361,20 +4367,16 @@ opvp_image_plane_data(
for (i = 0; i < height; i++) {
ptr = buf + raster_length * i;
for (j = 0; j < vinfo->width; j++) {
- ptr[j*3] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3]), effective_transfer.colored.red)));
- ptr[j*3+1] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3+1]), effective_transfer.colored.green)));
- ptr[j*3+2] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j*3+2]), effective_transfer.colored.blue)));
+ ptr[j*3+0] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+0]), effective_transfer.colored.red));
+ ptr[j*3+1] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+1]), effective_transfer.colored.green));
+ ptr[j*3+2] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j*3+2]), effective_transfer.colored.blue));
}
}
} else if (vinfo->bits_per_pixel == 8) { /* 8bit Gray image */
for (i = 0; i < height; i++) {
ptr = buf + raster_length * i;
for (j = 0; j < vinfo->width; j++) {
- ptr[j] = min(255, frac2cv(gx_map_color_frac(pgs,
- cv2frac(ptr[j]), effective_transfer.colored.gray)));
+ ptr[j] = frac2byte(gx_map_color_frac(pgs, byte2frac(ptr[j]), effective_transfer.colored.gray));
}
}
}
@@ -4385,14 +4387,15 @@ opvp_image_plane_data(
apiEntry->opvpTransferDrawImage(printerContext,
raster_length * height, (void *)buf);
}
- if (buf) {
- free(buf); /* free buffer */
- }
}
vinfo->y += height;
ecode = (vinfo->y >= vinfo->height);
+end:
+ if (buf) {
+ free(buf); /* free buffer */
+ }
return ecode;
}
@@ -4833,7 +4836,6 @@ opvp_vector_dopath(
int i;
int pop = 0;
int npoints = 0;
- int *cp_num = NULL;
_fPoint *points = NULL;
opvp_point_t *opvp_p = NULL;
_fPoint current;
@@ -4912,11 +4914,6 @@ opvp_vector_dopath(
break;
case gs_pe_curveto:
/* npoints */
- if (!cp_num)
- cp_num = calloc(sizeof(int), 2);
- cp_num[0] = npoints;
- cp_num[1] = 0;
-
/* call BezierPath */
if (apiEntry->opvpBezierPath) {
r = apiEntry->opvpBezierPath(
@@ -4938,7 +4935,6 @@ opvp_vector_dopath(
/* reset */
npoints = 1;
- if (cp_num) free(cp_num), cp_num = NULL;
points = realloc(points, sizeof(_fPoint));
points[0] = current;
#endif
@@ -5066,7 +5062,6 @@ opvp_vector_dopath(
#ifdef OPVP_OPT_MULTI_PATH
if (points) free(points);
if (opvp_p) free(opvp_p);
- if (cp_num) free(cp_num);
#endif
return ecode;
}
diff --git a/contrib/pcl3/eprn/eprnrend.c b/contrib/pcl3/eprn/eprnrend.c
index 9abe9007..2da1f9c6 100644
--- a/contrib/pcl3/eprn/eprnrend.c
+++ b/contrib/pcl3/eprn/eprnrend.c
@@ -240,7 +240,7 @@ gx_color_index eprn_map_rgb_color_for_RGB_flex(gx_device *device,
gx_color_value red = cv[0], green = cv[1], blue = cv[2];
gx_color_index value = 0;
gx_color_value step;
- unsigned int level;
+ gx_color_index level;
const eprn_Eprn *eprn = &((eprn_Device *)device)->eprn;
#ifdef EPRN_TRACE
@@ -466,7 +466,7 @@ gx_color_index eprn_map_cmyk_color_flex(gx_device *device,
gx_color_value cyan = cv[0], magenta = cv[1], yellow = cv[2], black = cv[3];
gx_color_index value = 0;
gx_color_value step;
- unsigned int level;
+ gx_color_index level;
const eprn_Eprn *eprn = &((eprn_Device *)device)->eprn;
#ifdef EPRN_TRACE
diff --git a/contrib/pcl3/eprn/gdeveprn.c b/contrib/pcl3/eprn/gdeveprn.c
index e7b1cb5b..d99895fd 100644
--- a/contrib/pcl3/eprn/gdeveprn.c
+++ b/contrib/pcl3/eprn/gdeveprn.c
@@ -836,11 +836,12 @@ int eprn_set_page_layout(eprn_Device *dev)
******************************************************************************/
-void eprn_init_device(eprn_Device *dev, const eprn_PrinterDescription *desc)
+int eprn_init_device(eprn_Device *dev, const eprn_PrinterDescription *desc)
{
eprn_Eprn *eprn = &dev->eprn;
int j;
float hres, vres;
+ int code;
if (dev->is_open) gs_closedevice((gx_device *)dev);
@@ -867,9 +868,11 @@ void eprn_init_device(eprn_Device *dev, const eprn_PrinterDescription *desc)
eprn->intensity_rendering = eprn_IR_halftones;
hres = dev->HWResolution[0];
vres = dev->HWResolution[1];
- eprn_check_colour_info(desc->colour_info, &eprn->colour_model,
+ code = eprn_check_colour_info(desc->colour_info, &eprn->colour_model,
&hres, &vres, &eprn->black_levels, &eprn->non_black_levels);
-
+ if (code) {
+ return code;
+ }
if (eprn->pagecount_file != NULL) {
gs_free(dev->memory->non_gc_memory, eprn->pagecount_file, strlen(eprn->pagecount_file) + 1,
sizeof(char), "eprn_init_device");
@@ -878,7 +881,7 @@ void eprn_init_device(eprn_Device *dev, const eprn_PrinterDescription *desc)
eprn->media_position_set = false;
- return;
+ return 0;
}
/******************************************************************************
diff --git a/contrib/pcl3/eprn/gdeveprn.h b/contrib/pcl3/eprn/gdeveprn.h
index e0c08927..e71799bd 100644
--- a/contrib/pcl3/eprn/gdeveprn.h
+++ b/contrib/pcl3/eprn/gdeveprn.h
@@ -632,7 +632,7 @@ typedef struct {
preceding each function's implementation. */
/* Initialize the eprn device for another printer model */
-extern void eprn_init_device(eprn_Device *dev,
+extern int eprn_init_device(eprn_Device *dev,
const eprn_PrinterDescription *desc);
/* Modify the information on supported media sizes and associated hardware
diff --git a/contrib/pcl3/eprn/mediasize.c b/contrib/pcl3/eprn/mediasize.c
index 8cfe3d91..21c6a26f 100644
--- a/contrib/pcl3/eprn/mediasize.c
+++ b/contrib/pcl3/eprn/mediasize.c
@@ -100,11 +100,11 @@ static const ms_SizeDescription list[] = {
/* Media called by this name may vary up to 0.5" in dimension (PPD 4.3). */
{sn(A4), {210*BP_PER_MM, 297*BP_PER_MM}},
{sn(Folio), {210*BP_PER_MM, 330*BP_PER_MM}},
- {sn(Quarto), {8.5*BP_PER_IN, 10.83*BP_PER_IN}}, /* 215.9 x 275.1 mm
+ {sn(Quarto), {8.5f*BP_PER_IN, 10.83f*BP_PER_IN}}, /* 215.9 x 275.1 mm
PPD 4.3 uses bp values for the definition, but this does not agree
with the mm values it specifies. The inch specifications fit. */
- {sn(Letter), {8.5*BP_PER_IN, 11.0*BP_PER_IN}}, /* 215.9 x 279.4 mm */
- {sn(Legal), {8.5*BP_PER_IN, 14.0*BP_PER_IN}}, /* 215.9 x 355.6 mm */
+ {sn(Letter), {8.5f*BP_PER_IN, 11.0f*BP_PER_IN}}, /* 215.9 x 279.4 mm */
+ {sn(Legal), {8.5f*BP_PER_IN, 14.0f*BP_PER_IN}}, /* 215.9 x 355.6 mm */
{sn(EnvKaku3), {216*BP_PER_MM, 277*BP_PER_MM}},
{sn(SuperA), {227*BP_PER_MM, 356*BP_PER_MM}},
{sn(ARCHA), {9*BP_PER_IN, 12*BP_PER_IN}}, /* 228.6 x 304.8 mm */
diff --git a/contrib/pcl3/eprn/mediasize.h b/contrib/pcl3/eprn/mediasize.h
index 8553b6ea..4033ad21 100644
--- a/contrib/pcl3/eprn/mediasize.h
+++ b/contrib/pcl3/eprn/mediasize.h
@@ -20,10 +20,10 @@
All these macros resolve to floating point numbers. */
/* Millimetres per inch */
-#define MM_PER_IN 25.4
+#define MM_PER_IN 25.4f
/* Big points (units in PostScript's default user space) per inch */
-#define BP_PER_IN 72.0
+#define BP_PER_IN 72.0f
/* Big points per millimetre */
#define BP_PER_MM (BP_PER_IN/MM_PER_IN)
diff --git a/contrib/pcl3/src/gdevpcl3.c b/contrib/pcl3/src/gdevpcl3.c
index 7582c9bc..6b6468e0 100644
--- a/contrib/pcl3/src/gdevpcl3.c
+++ b/contrib/pcl3/src/gdevpcl3.c
@@ -897,7 +897,11 @@ static int pcl3_put_params(gx_device *device, gs_param_list *plist)
if (dev->is_open) gs_closedevice(device);
dev->printer = subdevice_list[j].value;
dev->initialized = false;
- eprn_init_device((eprn_Device *)dev, &pcl3_printers[dev->printer].desc);
+ rc = eprn_init_device((eprn_Device *)dev, &pcl3_printers[dev->printer].desc);
+ if (rc < 0) {
+ last_error = rc;
+ param_signal_error(plist, pname, last_error);
+ }
}
else {
eprintf1("%s" ERRPREF "Unknown subdevice name: `", epref);
@@ -1378,8 +1382,8 @@ static int pcl3_open_device(gx_device *device)
/* Per-colorant information */
for (j = 0; j < data->number_of_colorants; j++) {
- data->colorant_array[j].hres = dev->HWResolution[0] + 0.5;
- data->colorant_array[j].vres = dev->HWResolution[1] + 0.5;
+ data->colorant_array[j].hres = (int)(dev->HWResolution[0] + 0.5);
+ data->colorant_array[j].vres = (int)(dev->HWResolution[1] + 0.5);
}
if (data->palette == pcl_CMY || data->palette == pcl_RGB)
for (j = 0; j < 3; j++)
@@ -1443,18 +1447,19 @@ static int pcl3_close_device(gx_device *device)
******************************************************************************/
-/* Macro to handle return codes from calls to pclgen routines */
-#define guard(call) \
- if ((rc = (call)) != 0) { \
- if (rc > 0) return_error(gs_error_Fatal); /* bugs are fatal :-) */ \
- return_error(gs_error_ioerror); /* actually any environment error */ \
- }
+/* Function to convert return codes from calls to pclgen routines. */
+static int convert(int code)
+{
+ if (code > 0) return gs_error_Fatal;
+ if (code < 0) return gs_error_ioerror;
+ return 0;
+}
static int pcl3_print_page(gx_device_printer *device, gp_file *out)
{
int
blank_lines,
- rc;
+ rc = 0;
pcl3_Device *dev = (pcl3_Device *)device;
const char *epref = dev->eprn.CUPS_messages? CUPS_ERRPREF: "";
pcl_RasterData rd;
@@ -1463,75 +1468,95 @@ static int pcl3_print_page(gx_device_printer *device, gp_file *out)
*lengths,
planes;
+ /* Make sure out cleanup code will cope with partially-initialised data. */
+ memset(&rd, 0, sizeof(pcl_RasterData)); /* Belt and braces. */
+ planes = 0;
+ lengths = NULL;
+ rd.next = NULL;
+ rd.previous = NULL;
+ rd.workspace[0] = NULL;
+ rd.workspace[1] = NULL;
+
/* If this is a new file or we've decided to re-configure, initialize the
printer first */
if (gdev_prn_file_is_new(device) || !dev->configured ||
dev->configure_every_page) {
- guard(pcl3_init_file(device->memory, out, &dev->file_data))
+ rc = convert(pcl3_init_file(device->memory, out, &dev->file_data));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
dev->configured = true;
}
/* Initialize raster data structure */
- memset(&rd, 0, sizeof(pcl_RasterData));
rd.global = &dev->file_data;
planes = eprn_number_of_bitplanes((eprn_Device *)dev);
lengths = (unsigned int *)malloc(planes*sizeof(unsigned int));
+ if (!lengths) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
+ }
+ eprn_number_of_octets((eprn_Device *)dev, lengths);
rd.next = (pcl_OctetString *)malloc(planes*sizeof(pcl_OctetString));
- if (pcl_cm_is_differential(dev->file_data.compression))
+ if (!rd.next) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
+ }
+ for (j=0; j<planes; j++) { /* Make sure we can free at any point. */
+ rd.next[j].str = NULL;
+ }
+ if (pcl_cm_is_differential(dev->file_data.compression)) {
rd.previous = (pcl_OctetString *)malloc(planes*sizeof(pcl_OctetString));
- if (lengths == NULL || rd.next == NULL ||
- (pcl_cm_is_differential(dev->file_data.compression) &&
- rd.previous == NULL)) {
- free(lengths); free(rd.next); free(rd.previous);
- eprintf1("%s" ERRPREF "Memory allocation failure from malloc().\n",
- epref);
- return_error(gs_error_VMerror);
+ if (!rd.previous) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
+ }
+ for (j=0; j<planes; j++) { /* Make sure we can free at any point. */
+ rd.previous[j].str = NULL;
+ }
+ for (j = 0; j < planes; j++) {
+ rd.previous[j].str = (pcl_Octet *)malloc(lengths[j]*sizeof(eprn_Octet));
+ if (!rd.previous[j].str) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
+ }
+ }
}
- eprn_number_of_octets((eprn_Device *)dev, lengths);
rd.width = 8*lengths[0]; /* all colorants have equal resolution */
- for (j = 0; j < planes; j++)
+ for (j = 0; j < planes; j++) {
rd.next[j].str = (pcl_Octet *)malloc(lengths[j]*sizeof(eprn_Octet));
+ if (!rd.next[j].str) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
+ }
+ }
/* Note: 'pcl_Octet' must be identical with 'eprn_Octet'. */
- if (pcl_cm_is_differential(dev->file_data.compression))
- for (j = 0; j < planes; j++)
- rd.previous[j].str = (pcl_Octet *)malloc(lengths[j]*sizeof(eprn_Octet));
rd.workspace_allocated = lengths[0];
for (j = 1; j < planes; j++)
if (lengths[j] > rd.workspace_allocated)
rd.workspace_allocated = lengths[j];
for (j = 0;
- j < 2 && (j != 1 || dev->file_data.compression == pcl_cm_delta); j++)
+ j < 2 && (j != 1 || dev->file_data.compression == pcl_cm_delta); j++) {
rd.workspace[j] =
(pcl_Octet *)malloc(rd.workspace_allocated*sizeof(pcl_Octet));
-
- /* Collective check for allocation failures */
- j = 0;
- while (j < planes && rd.next[j].str != NULL) j++;
- if (j == planes && pcl_cm_is_differential(dev->file_data.compression)) {
- j = 0;
- while (j < planes && rd.previous[j].str != NULL) j++;
- if (j == planes && dev->file_data.compression == pcl_cm_delta &&
- rd.workspace[1] == NULL) j = 0;
- }
- if (j < planes || rd.workspace[0] == NULL) {
- /* Free everything. Note that free(NULL) is legal and we did a memset()
- with 0 on 'rd'. */
- for (j = 0; j < planes; j++) {
- free(rd.next[j].str);
- if (pcl_cm_is_differential(dev->file_data.compression))
- free(rd.previous[j].str);
+ if (!rd.workspace[j]) {
+ rc = gs_note_error(gs_error_VMerror);
+ goto end;
}
- free(lengths); free(rd.next); free(rd.previous);
- for (j = 0; j < 2; j++) free(rd.workspace[j]);
-
- eprintf1("%s" ERRPREF "Memory allocation failure from malloc().\n",
- epref);
- return_error(gs_error_VMerror);
}
/* Open the page and start raster mode */
- guard(pcl3_begin_page(out, &dev->file_data))
- guard(pcl3_begin_raster(out, &rd))
+ rc = convert(pcl3_begin_page(out, &dev->file_data));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
+ rc = convert(pcl3_begin_raster(out, &rd));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
/* Loop over scan lines */
blank_lines = 0;
@@ -1565,25 +1590,56 @@ static int pcl3_print_page(gx_device_printer *device, gp_file *out)
if (j == planes) blank_lines++;
else {
if (blank_lines > 0) {
- guard(pcl3_skip_groups(out, &rd, blank_lines))
+ rc = convert(pcl3_skip_groups(out, &rd, blank_lines));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
blank_lines = 0;
}
- guard(pcl3_transfer_group(out, &rd))
+ rc = convert(pcl3_transfer_group(out, &rd));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
}
}
/* Terminate raster mode and close the page */
- guard(pcl3_end_raster(out, &rd))
- guard(pcl3_end_page(out, &dev->file_data))
+ rc = convert(pcl3_end_raster(out, &rd));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
+ rc = convert(pcl3_end_page(out, &dev->file_data));
+ if (rc) {
+ (void) gs_note_error(rc);
+ goto end;
+ }
+end:
/* Free dynamic storage */
- for (j = 0; j < planes; j++) free(rd.next[j].str);
- if (pcl_cm_is_differential(dev->file_data.compression))
- for (j = 0; j < planes; j++) free(rd.previous[j].str);
- for (j = 0; j < 2; j++) free(rd.workspace[j]);
- free(lengths); free(rd.next); free(rd.previous);
+ if (rd.next) {
+ for (j = 0; j < planes; j++) {
+ free(rd.next[j].str);
+ }
+ }
+ if (rd.previous) {
+ for (j = 0; j < planes; j++) {
+ free(rd.previous[j].str);
+ }
+ }
+ for (j = 0; j < 2; j++) {
+ free(rd.workspace[j]);
+ }
+ free(lengths);
+ free(rd.next);
+ free(rd.previous);
- return 0;
-}
+ if (rc == gs_error_VMerror) {
+ eprintf1("%s" ERRPREF "Memory allocation failure from malloc().\n",
+ epref);
+ }
-#undef guard
+ return rc;
+}
diff --git a/contrib/pcl3/src/pclcap.c b/contrib/pcl3/src/pclcap.c
index f07b93a2..77f52aa8 100644
--- a/contrib/pcl3/src/pclcap.c
+++ b/contrib/pcl3/src/pclcap.c
@@ -110,15 +110,15 @@ static const eprn_PageDescription
Note that BPD05054 gives different margins.
*/
{ms_Letter,
- 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN},
+ 0.25f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 0.25f*BP_PER_IN, 0.08f*BP_PER_IN},
{ms_Legal,
- 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN},
+ 0.25f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 0.25f*BP_PER_IN, 0.08f*BP_PER_IN},
{ms_A4,
- 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 3.6*BP_PER_MM, 0.08*BP_PER_IN},
+ 0.125f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 3.6f*BP_PER_MM, 0.08f*BP_PER_IN},
{ms_Executive,
- 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN},
+ 0.25f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 0.25f*BP_PER_IN, 0.08f*BP_PER_IN},
{ms_JISB5,
- 3.175*BP_PER_MM, (0.5-0.08)*BP_PER_IN, 3.25*BP_PER_MM, 0.08*BP_PER_IN},
+ 3.175f*BP_PER_MM, (0.5f-0.08f)*BP_PER_IN, 3.25f*BP_PER_MM, 0.08f*BP_PER_IN},
/* DJ3/4 p. 21: "Envelopes are printed in the landscape mode". As the
margins are given such that the largest value is designated as "bottom"
and the bottom is designated on page 19 as a long edge, I conclude that
@@ -126,9 +126,9 @@ static const eprn_PageDescription
dimensions for Env10 in portrait and EnvDL in landscape orientation.
*/
{ms_Env10 | MS_TRANSVERSE_FLAG,
- 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.08*BP_PER_IN, 0.08*BP_PER_IN},
+ 0.125f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 0.08f*BP_PER_IN, 0.08f*BP_PER_IN},
{ms_EnvDL | MS_TRANSVERSE_FLAG,
- 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.11*BP_PER_IN, 0.08*BP_PER_IN},
+ 0.125f*BP_PER_IN, (0.5f-0.08f)*BP_PER_IN, 0.11f*BP_PER_IN, 0.08f*BP_PER_IN},
{ms_none}
},
hpdj500_sizes[] = {
@@ -139,13 +139,13 @@ static const eprn_PageDescription
well.
Order of margins: left, bottom, right, top. */
{ms_Letter,
- 0.25*BP_PER_IN, 0.57*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.57f*BP_PER_IN, 0.25f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_Legal,
- 0.25*BP_PER_IN, 0.57*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.57f*BP_PER_IN, 0.25f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_A4,
- 3.1*BP_PER_MM, 0.57*BP_PER_IN, 3.6*BP_PER_MM, 0.1*BP_PER_IN},
+ 3.1f*BP_PER_MM, 0.57f*BP_PER_IN, 3.6f*BP_PER_MM, 0.1f*BP_PER_IN},
{ms_Env10 | MS_TRANSVERSE_FLAG, /* Margins from BPD05054 */
- 0.75*BP_PER_IN, 0.57*BP_PER_IN, 0.75*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.75f*BP_PER_IN, 0.57f*BP_PER_IN, 0.75f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_none}
},
hpdj500c_sizes[] = {
@@ -156,16 +156,16 @@ static const eprn_PageDescription
0.17 inches more at the bottom.
Order of margins: left, bottom, right, top. */
{ms_Letter,
- 0.25*BP_PER_IN, 0.4*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.4f*BP_PER_IN, 0.25f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_Legal,
- 0.25*BP_PER_IN, 0.4*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.4f*BP_PER_IN, 0.25f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_A4,
- 3.1*BP_PER_MM, 0.4*BP_PER_IN, 3.6*BP_PER_MM, 0.1*BP_PER_IN},
+ 3.1f*BP_PER_MM, 0.4f*BP_PER_IN, 3.6f*BP_PER_MM, 0.1f*BP_PER_IN},
{ms_Env10 | MS_TRANSVERSE_FLAG,
/* Margins from BPD05054, but I've chosen 0.4 in for the bottom margin
instead of 0.57 in as listed there because it looks to me like the
colour bottom. Compare with the DJ 500. */
- 0.75*BP_PER_IN, 0.4*BP_PER_IN, 0.75*BP_PER_IN, 0.1*BP_PER_IN},
+ 0.75f*BP_PER_IN, 0.4f*BP_PER_IN, 0.75f*BP_PER_IN, 0.1f*BP_PER_IN},
{ms_none}
},
common_sizes[] = { /* DJs 510, 520, 550C und 560C for printing in black */
@@ -175,19 +175,19 @@ static const eprn_PageDescription
For colour, the bottom margin must be increased by 0.13 inches.
Order of margins: left, bottom, right, top. */
{ms_Letter,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Legal,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Executive,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A4,
- 3.1*BP_PER_MM, 0.46*BP_PER_IN, 3.6*BP_PER_MM, 0.04*BP_PER_IN},
+ 3.1f*BP_PER_MM, 0.46f*BP_PER_IN, 3.6f*BP_PER_MM, 0.04f*BP_PER_IN},
/* Envelopes are supported according the TRG500, the margins are from
BPD05054. */
{ms_Env10, /* given in landscape by HP */
- 0.123*BP_PER_IN, 0.71*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.123f*BP_PER_IN, 0.71f*BP_PER_IN, 0.125f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_EnvDL, /* given in landscape by HP */
- 3.1*BP_PER_MM, 18.0*BP_PER_MM, 3.6*BP_PER_MM, 1.0*BP_PER_MM},
+ 3.1f*BP_PER_MM, 18.0f*BP_PER_MM, 3.6f*BP_PER_MM, 1.0f*BP_PER_MM},
{ms_none}
},
hpdj540_sizes[] = {
@@ -197,25 +197,25 @@ static const eprn_PageDescription
colour, the resulting data agree with those in the DG, pp. 65-66.
Order of margins: left, bottom, right, top. */
{ms_Executive,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A4, 3.2*BP_PER_MM, 11.7*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN},
- {ms_A5, 3.2*BP_PER_MM, 18.0*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN},
- {ms_JISB5, 4.2*BP_PER_MM, 11.7*BP_PER_MM, 4.2*BP_PER_MM, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Letter, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Legal, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A4, 3.2f*BP_PER_MM, 11.7f*BP_PER_MM, 3.2f*BP_PER_MM, 0.04f*BP_PER_IN},
+ {ms_A5, 3.2f*BP_PER_MM, 18.0f*BP_PER_MM, 3.2f*BP_PER_MM, 0.04f*BP_PER_IN},
+ {ms_JISB5, 4.2f*BP_PER_MM, 11.7f*BP_PER_MM, 4.2f*BP_PER_MM, 0.04f*BP_PER_IN},
{ms_Index4x6in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index5x8in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A6 | PCL_CARD_FLAG,
- 3.2*BP_PER_MM, 18.0*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN},
- {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 3.2f*BP_PER_MM, 18.0f*BP_PER_MM, 3.2f*BP_PER_MM, 0.04f*BP_PER_IN},
+ {ms_Env10, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
- {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_EnvDL, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
- {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_EnvC6, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
- {ms_Postcard, 4.2*BP_PER_MM, 18.0*BP_PER_MM, 4.2*BP_PER_MM, 0.04*BP_PER_IN},
+ {ms_Postcard, 4.2f*BP_PER_MM, 18.0f*BP_PER_MM, 4.2f*BP_PER_MM, 0.04f*BP_PER_IN},
{ms_none}
},
hpdj660c_sizes[] = {
@@ -228,34 +228,34 @@ static const eprn_PageDescription
contradiction with DG because BPD02519 gives different values for
printing from Windows.
*/
- {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_Letter, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Legal, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Executive,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A4, 0.13f*BP_PER_IN, 0.46f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A5, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_JISB5, 0.17f*BP_PER_IN, 0.46f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
/* The bottom margin for JISB5 is given with large differences. BPD02519
specifies it as 0.46 in for black from DOS, 0.59 in DOS/colour (agreeing
with +0.13 in for 'bottom_increment') and the same for Windows black or
colour. BPD05054 gives 0.84 in without distinguishing between black and
colour, and the DG gives 0.59 in. */
- {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_Env10, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
- {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_EnvDL, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
- {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_EnvC6, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* given in landscape by HP */
{ms_Index4x6in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index5x8in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A6 | PCL_CARD_FLAG,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Postcard,
- 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.17f*BP_PER_IN, 0.71f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_EnvUS_A2,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
/* Supported (BPD02925, BPD05054, DG), margins from BPD05054 agreeing
with DG p. 70 */
{ms_none}
@@ -276,30 +276,30 @@ static const eprn_PageDescription
(0.83 in vs. 0.59 in).
The DJ 690C does support banner printing (DJ6/8 p. 9).
*/
- {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ {ms_Letter, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A4, 0.13f*BP_PER_IN, 0.46f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Legal, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Env10, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Executive,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_EnvDL, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A5, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_JISB5, 0.17f*BP_PER_IN, 0.46f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_EnvC6, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index4x6in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index5x8in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A6 | PCL_CARD_FLAG,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Postcard,
- 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.17f*BP_PER_IN, 0.71f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_EnvUS_A2,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Letter | MS_BIG_FLAG, /* banner */
- 0.25*BP_PER_IN, 0.0, 0.25*BP_PER_IN, 0.0},
+ 0.25f*BP_PER_IN, 0.0f, 0.25f*BP_PER_IN, 0.0f},
{ms_A4 | MS_BIG_FLAG, /* banner */
- 0.13*BP_PER_IN, 0.0, 0.13*BP_PER_IN, 0.0},
+ 0.13f*BP_PER_IN, 0.0f, 0.13f*BP_PER_IN, 0.0f},
/* BPD05054 claims left and right margins of 0.25 in. */
{ms_none}
},
@@ -311,27 +311,27 @@ static const eprn_PageDescription
series 800 DeskJets.
*/
{ms_Executive,
- 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Letter, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Legal, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A5, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_A4, 0.13f*BP_PER_IN, 0.46f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_JISB5, 0.17f*BP_PER_IN, 0.46f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Postcard,
- 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.17f*BP_PER_IN, 0.71f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_DoublePostcard, /* not present in 'hpdj660c_sizes[]'; guessed */
- 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.17f*BP_PER_IN, 0.71f*BP_PER_IN, 0.17f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A6 | PCL_CARD_FLAG,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index4x6in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_Index5x8in,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
- {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_Env10, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_EnvDL, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
+ {ms_EnvC6, 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_EnvUS_A2,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_none}
},
hpdj850c_sizes[] = {
@@ -347,11 +347,11 @@ static const eprn_PageDescription
First some shorthand notation for margin types. The order is:
left, bottom, right, top.
*/
-#define type1 6.4*BP_PER_MM, 11.7*BP_PER_MM, 6.4*BP_PER_MM, 1.0*BP_PER_MM
-#define type2 3.4*BP_PER_MM, 11.7*BP_PER_MM, 3.4*BP_PER_MM, 1.0*BP_PER_MM
-#define type3 3.4*BP_PER_MM, 11.7*BP_PER_MM, 3.4*BP_PER_MM, 11.7*BP_PER_MM
-#define type4 3.2*BP_PER_MM, 11.7*BP_PER_MM, 3.2*BP_PER_MM, 1.0*BP_PER_MM
-#define type5 3.2*BP_PER_MM, 22.0*BP_PER_MM, 3.2*BP_PER_MM, 1.0*BP_PER_MM
+#define type1 6.4f*BP_PER_MM, 11.7f*BP_PER_MM, 6.4f*BP_PER_MM, 1.0f*BP_PER_MM
+#define type2 3.4f*BP_PER_MM, 11.7f*BP_PER_MM, 3.4f*BP_PER_MM, 1.0f*BP_PER_MM
+#define type3 3.4f*BP_PER_MM, 11.7f*BP_PER_MM, 3.4f*BP_PER_MM, 11.7f*BP_PER_MM
+#define type4 3.2f*BP_PER_MM, 11.7f*BP_PER_MM, 3.2f*BP_PER_MM, 1.0f*BP_PER_MM
+#define type5 3.2f*BP_PER_MM, 22.0f*BP_PER_MM, 3.2f*BP_PER_MM, 1.0f*BP_PER_MM
{ms_Letter, type1},
{ms_Legal, type1},
{ms_Executive, type1},
@@ -388,70 +388,70 @@ static const eprn_PageDescription
hpdj1120c_sizes[] = {
/* These values are from DJ1120C, pp. 11-12, and from BPD05567. I don't
consider them particularly trustworthy. */
- {ms_Executive, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN,
- 0.12*BP_PER_IN},
- {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN,
- 0.12*BP_PER_IN},
- {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN,
- 0.12*BP_PER_IN},
- {ms_Tabloid, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN},
- {ms_Statement, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN}, /* Not in BPD05567. */
- {ms_HPSuperB, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN},
- {ms_A6, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN}, /* Not in BPD05567. */
- {ms_A5, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_Executive, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
+ {ms_Letter, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
+ {ms_Legal, 0.25f*BP_PER_IN, 0.46f*BP_PER_IN, 0.25f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
+ {ms_Tabloid, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
+ {ms_Statement, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN}, /* Not in BPD05567. */
+ {ms_HPSuperB, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
+ {ms_A6, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN}, /* Not in BPD05567. */
+ {ms_A5, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_A4, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_A4, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.13 in, 0.46 in, 0.13 in, 0.12 in. */
- {ms_A3, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN}, /* Only in BPD05567. */
- {ms_JISB5, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_A3, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN}, /* Only in BPD05567. */
+ {ms_JISB5, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_JISB4, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN}, /* Not in BPD05567. */
- {ms_Postcard, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_JISB4, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN}, /* Not in BPD05567. */
+ {ms_Postcard, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_A6 | PCL_CARD_FLAG, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_A6 | PCL_CARD_FLAG, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_Index4x6in, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_Index4x6in, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_Index5x8in, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_Index5x8in, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_Env10, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_Env10, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvDL, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_EnvDL, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvC6, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_EnvC6, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvUS_A2, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_EnvUS_A2, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvChou3, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_EnvChou3, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvChou4, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN,
- 0.12*BP_PER_IN},
+ {ms_EnvChou4, 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN,
+ 0.12f*BP_PER_IN},
/* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */
- {ms_EnvKaku2, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN,
- 0.12*BP_PER_IN}, /* Not in BPD05567. */
+ {ms_EnvKaku2, 0.20f*BP_PER_IN, 0.46f*BP_PER_IN, 0.20f*BP_PER_IN,
+ 0.12f*BP_PER_IN}, /* Not in BPD05567. */
/* Banners are listed only in BPD05567: */
{ms_Letter | MS_BIG_FLAG,
- 0.25*BP_PER_IN, 0, 0.25*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.25f*BP_PER_IN, 0, 0.25f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_A4 | MS_BIG_FLAG,
- 0.13*BP_PER_IN, 0, 0.13*BP_PER_IN, 0.04*BP_PER_IN},
+ 0.13f*BP_PER_IN, 0, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN},
{ms_none}
};
@@ -480,13 +480,13 @@ static const eprn_CustomPageDescription
*/
{ /* Page width 7.12 to 8.5 in */
ms_CustomPageSize,
- 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN,
- 7.12*BP_PER_IN, 8.5*BP_PER_IN, 5.83*BP_PER_IN, 14*BP_PER_IN
+ 0.13f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN, 0.04f*BP_PER_IN,
+ 7.12f*BP_PER_IN, 8.5f*BP_PER_IN, 5.83f*BP_PER_IN, 14*BP_PER_IN
},
{ /* Page width 5 to 7.12 in */
ms_CustomPageSize,
- 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN,
- 5*BP_PER_IN, 7.12*BP_PER_IN, 5.83*BP_PER_IN, 14*BP_PER_IN
+ 0.13f*BP_PER_IN, 0.71f*BP_PER_IN, 0.125f*BP_PER_IN, 0.04f*BP_PER_IN,
+ 5*BP_PER_IN, 7.12f*BP_PER_IN, 5.83f*BP_PER_IN, 14*BP_PER_IN
},
{ms_none, 0, 0, 0, 0, 0, 0, 0, 0}
},
@@ -494,8 +494,8 @@ static const eprn_CustomPageDescription
/* Ranges from DJ6/8 p. 23, margins from A4 for the DJ 660C (BPD02519) */
{
ms_CustomPageSize,
- 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN,
- 5*BP_PER_IN, 8.5*BP_PER_IN, 148*BP_PER_MM, 14*BP_PER_IN
+ 0.13f*BP_PER_IN, 0.46f*BP_PER_IN, 0.13f*BP_PER_IN, 0.04f*BP_PER_IN,
+ 5*BP_PER_IN, 8.5f*BP_PER_IN, 148*BP_PER_MM, 14*BP_PER_IN
},
{ms_none, 0, 0, 0, 0, 0, 0, 0, 0}
},
@@ -520,7 +520,7 @@ static const eprn_CustomPageDescription
{ /* Taken from DJ1120C pp. 10 and 12. The minimum sizes are guessed
(smallest supported discrete dimensions) */
ms_CustomPageSize,
- 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, 0.12*BP_PER_IN,
+ 0.125f*BP_PER_IN, 0.46f*BP_PER_IN, 0.125f*BP_PER_IN, 0.12f*BP_PER_IN,
90*BP_PER_MM, 13*BP_PER_IN, 146*BP_PER_MM, 19*BP_PER_IN,
},
{ms_none, 0, 0, 0, 0, 0, 0, 0, 0}
@@ -533,7 +533,7 @@ static const eprn_CustomPageDescription
{
ms_CustomPageSize,
type2, /* use DJ 850C margins */
- 1.0E-37, 1.0E37, 1.0E-37, 1.0E37
+ 1.0E-37f, 1.0E37f, 1.0E-37f, 1.0E37f
},
{ms_none, 0, 0, 0, 0, 0, 0, 0, 0}
};
@@ -731,36 +731,36 @@ const pcl_PrinterDescription pcl3_printers[] = {
{ HPDJ500, pcl_level_3plus_DJ500,
{"HP DeskJet 500", hpdj500_sizes, NULL, 0.0, ci_old_mono } },
{ HPDJ500C, pcl_level_3plus_S5,
- { "HP DeskJet 500C", hpdj500c_sizes, NULL, 0.17*BP_PER_IN, ci_hpdj500c } },
+ { "HP DeskJet 500C", hpdj500c_sizes, NULL, 0.17f*BP_PER_IN, ci_hpdj500c } },
{ HPDJ510, pcl_level_3plus_S5,
{ "HP DeskJet 510", common_sizes, NULL, 0.0, ci_old_mono } },
{ HPDJ520, pcl_level_3plus_S5,
{ "HP DeskJet 520", common_sizes, NULL, 0.0, ci_old_mono } },
{ HPDJ540, pcl_level_3plus_S68,
{ "HP DeskJet 540", hpdj540_sizes, hpdj540_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj540 } },
+ 0.13f*BP_PER_IN, ci_hpdj540 } },
{ HPDJ550C, pcl_level_3plus_S5,
- { "HP DeskJet 550C", common_sizes, NULL, 0.13*BP_PER_IN, ci_hpdj5xx_cmyk }},
+ { "HP DeskJet 550C", common_sizes, NULL, 0.13f*BP_PER_IN, ci_hpdj5xx_cmyk }},
{ HPDJ560C, pcl_level_3plus_S5,
- { "HP DeskJet 560C", common_sizes, NULL, 0.13*BP_PER_IN, ci_hpdj5xx_cmyk }},
+ { "HP DeskJet 560C", common_sizes, NULL, 0.13f*BP_PER_IN, ci_hpdj5xx_cmyk }},
{ pcl3_generic_old, pcl_level_3plus_ERG_both,
{ "unspecified PCL-3+ printer (old)", common_sizes, NULL, 0.0, ci_any } },
{ HPDJ600, pcl_level_3plus_S68,
{ "HP DeskJet 600", hpdj6xx_and_8xx_sizes, hpdj_6xx_and_8xx_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj600 } },
+ 0.13f*BP_PER_IN, ci_hpdj600 } },
{ HPDJ660C, pcl_level_3plus_S68,
{ "HP DeskJet 660C", hpdj660c_sizes, hpdj_6xx_and_8xx_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj6xx } },
+ 0.13f*BP_PER_IN, ci_hpdj6xx } },
{ HPDJ670C, pcl_level_3plus_S68,
{ "HP DeskJet 670C", hpdj660c_sizes, hpdj_6xx_and_8xx_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj6xx } },
+ 0.13f*BP_PER_IN, ci_hpdj6xx } },
/* This printer can be treated as the DJ 660C (DJ6/8 p. 2). */
{ HPDJ680C, pcl_level_3plus_S68,
{ "HP DeskJet 680C", hpdj680c_sizes, hpdj_6xx_and_8xx_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj6xx } },
+ 0.13f*BP_PER_IN, ci_hpdj6xx } },
{ HPDJ690C, pcl_level_3plus_S68,
{ "HP DeskJet 690C", hpdj680c_sizes, hpdj_6xx_and_8xx_custom_sizes,
- 0.13*BP_PER_IN, ci_hpdj6xx } },
+ 0.13f*BP_PER_IN, ci_hpdj6xx } },
{ HPDJ850C, pcl_level_3plus_S68,
{ "HP DeskJet 850C", hpdj850c_sizes, hpdj850c_custom_sizes,
0.0, ci_hpdj85x } },
diff --git a/contrib/pcl3/src/pclgen.c b/contrib/pcl3/src/pclgen.c
index 0670d886..e6a9c963 100644
--- a/contrib/pcl3/src/pclgen.c
+++ b/contrib/pcl3/src/pclgen.c
@@ -150,7 +150,7 @@ static void send_ERG(gp_file *out, pcl_Level level)
int pcl3_init_file(gs_memory_t *mem, gp_file *out, pcl_FileData *data)
{
- pcl_bool needs_CRD = (data->level == pcl_level_3plus_CRD_only);
+ pcl_bool needs_CRD = (data && data->level == pcl_level_3plus_CRD_only);
/* Do we need Configure Raster Data? */
int j;
const pcl_ColorantState *colorant = NULL;
@@ -469,7 +469,7 @@ int pcl3_init_file(gs_memory_t *mem, gp_file *out, pcl_FileData *data)
gp_fprintf(out, "\033*r%dU",
/* PCL: Set Number of Planes per Row/Simple Color */
data->palette == pcl_RGB? 3: /* RGB palette */
- -data->number_of_colorants); /* (K)(CMY) palette */
+ -(int)data->number_of_colorants); /* (K)(CMY) palette */
/* Configure Raster Data */
if (needs_CRD) {
diff --git a/cups/gdevcups.c b/cups/gdevcups.c
index 3df3f039..8fa48860 100644
--- a/cups/gdevcups.c
+++ b/cups/gdevcups.c
@@ -2860,7 +2860,7 @@ cups_open(gx_device *pdev) /* I - Device info */
cups->PPD = ppdOpenFile(getenv("PPD"));
if (cups->pageSizeRequested[0] == '\0') {
- strncpy(cups->pageSizeRequested, cups->header.cupsPageSizeName, 64);
+ (void) snprintf(cups->pageSizeRequested, sizeof(cups->pageSizeRequested), "%s", cups->header.cupsPageSizeName);
#ifdef CUPS_DEBUG
dmprintf1(pdev->memory, "DEBUG: Page size requested: %s\n",
cups->header.cupsPageSizeName);
@@ -4443,6 +4443,8 @@ cups_set_color_info(gx_device *pdev) /* I - Device info */
case CUPS_CSPACE_SW :
case CUPS_CSPACE_WHITE :
case CUPS_CSPACE_RGB :
+ case CUPS_CSPACE_CMY:
+ case CUPS_CSPACE_YMC:
case CUPS_CSPACE_SRGB :
case CUPS_CSPACE_ADOBERGB :
case CUPS_CSPACE_RGBA :
@@ -4471,8 +4473,6 @@ cups_set_color_info(gx_device *pdev) /* I - Device info */
case CUPS_CSPACE_K :
case CUPS_CSPACE_GOLD :
case CUPS_CSPACE_SILVER :
- case CUPS_CSPACE_CMY :
- case CUPS_CSPACE_YMC :
case CUPS_CSPACE_KCMYcm :
case CUPS_CSPACE_CMYK :
case CUPS_CSPACE_YMCK :
diff --git a/cups/libs/filter/raster.c b/cups/libs/filter/cupsraster.c
index 8dd76abe..8dd76abe 100644
--- a/cups/libs/filter/raster.c
+++ b/cups/libs/filter/cupsraster.c
diff --git a/devices/contrib.mak b/devices/contrib.mak
index 6dc59b81..7f1cf863 100644
--- a/devices/contrib.mak
+++ b/devices/contrib.mak
@@ -16,7 +16,7 @@
# makefile for contributed device drivers.
# Define the name of this makefile.
-CONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
+DCONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
###### --------------------------- Catalog -------------------------- ######
@@ -123,10 +123,10 @@ CONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
### please contact narf@media-lab.media.mit.edu if you have questions. ###
pe_=$(DEVOBJ)gdevpe.$(OBJ)
-$(DD)pe.dev : $(pe_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pe.dev : $(pe_) $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETDEV) $(DD)pe $(pe_)
-$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevpe.$(OBJ) $(C_) $(DEVSRC)gdevpe.c
###### ----------------------- Other displays ------------------------ ######
@@ -137,10 +137,10 @@ $(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(CONTRIB_MAK) $
# This is implemented as a 'printer' device.
sonyfb_=$(DEVOBJ)gdevsnfb.$(OBJ)
-$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)sonyfb $(sonyfb_)
-$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevsnfb.$(OBJ) $(C_) $(DEVSRC)gdevsnfb.c
###### --------------- Memory-buffered printer devices --------------- ######
@@ -149,13 +149,13 @@ $(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
bj10e_=$(DEVOBJ)gdevbj10.$(OBJ)
-$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bj10e $(bj10e_)
-$(DD)bj200.dev : $(bj10e_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bj200.dev : $(bj10e_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bj200 $(bj10e_)
-$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevbj10.$(OBJ) $(C_) $(DEVSRC)gdevbj10.c
### ------------- The CalComp Raster Format ----------------------------- ###
@@ -164,10 +164,10 @@ $(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### questions. ###
ccr_=$(DEVOBJ)gdevccr.$(OBJ)
-$(DD)ccr.dev : $(ccr_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ccr.dev : $(ccr_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ccr $(ccr_)
-$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevccr.$(OBJ) $(C_) $(DEVSRC)gdevccr.c
### The H-P DeskJet, PaintJet, and DesignJet family color printer devices.###
@@ -186,48 +186,48 @@ $(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
cdeskjet_=$(DEVOBJ)gdevcdj.$(OBJ) $(HPPCL)
-$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cdeskjet $(cdeskjet_)
-$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cdjcolor $(cdeskjet_)
-$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cdjmono $(cdeskjet_)
-$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cdj500 $(cdeskjet_)
-$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cdj550 $(cdeskjet_)
-$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)declj250 $(cdeskjet_)
-$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)dnj650c $(cdeskjet_)
-$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lj4dith $(cdeskjet_)
-$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pj $(cdeskjet_)
-$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pjxl $(cdeskjet_)
# Note: the pjxl300 driver also works for the CopyJet.
-$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pjxl300 $(cdeskjet_)
# Note: the BJC600 driver also works for the BJC4000.
-$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjc600 $(cdeskjet_)
-$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)bjc800 $(cdeskjet_)
-$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)escp $(cdeskjet_)
# NB: you can also customise the build if required, using
@@ -238,15 +238,15 @@ gdevbjc_h=$(DEVSRC)gdevbjc.h
$(DEVOBJ)gdevcdj.$(OBJ) : $(DEVSRC)gdevcdj.c $(std_h) $(PDEVH)\
$(gsparam_h) $(gsstate_h) $(gxlum_h)\
- $(gdevbjc_h) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevbjc_h) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevcdj.$(OBJ) $(C_) $(DEVSRC)gdevcdj.c
djet500c_=$(DEVOBJ)gdevdjtc.$(OBJ) $(HPPCL)
-$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)djet500c $(djet500c_)
$(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevdjtc.$(OBJ) $(C_) $(DEVSRC)gdevdjtc.c
### -------------------- The H-P Color LaserJet 5/5M -------------------- ###
@@ -262,24 +262,24 @@ $(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h
cljet5_=$(DEVOBJ)gdevclj.$(OBJ) $(HPPCL)
-$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cljet5 $(cljet5_)
# The cljet5pr driver has hacks for trying to handle page rotation.
# The hacks only work with one special PCL interpreter. Don't use it!
-$(DD)cljet5pr.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5pr.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cljet5pr $(cljet5_)
$(DEVOBJ)gdevclj.$(OBJ) : $(DEVSRC)gdevclj.c $(math__h) $(PDEVH)\
- $(gx_h) $(gsparam_h) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gx_h) $(gsparam_h) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevclj.$(OBJ) $(C_) $(DEVSRC)gdevclj.c
cljet5c_=$(DEVOBJ)gdevcljc.$(OBJ) $(HPPCL)
-$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cljet5c $(cljet5c_)
$(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevcljc.$(OBJ) $(C_) $(DEVSRC)gdevcljc.c
### --------------- The H-P LaserJet 3100 software device --------------- ###
@@ -291,17 +291,17 @@ $(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h)
### Ulrich Schmid (uschmid@mail.hh.provi.de) if you have questions. ###
lj3100sw_=$(DEVOBJ)gdevl31s.$(OBJ) $(DEVOBJ)gdevmeds.$(OBJ)
-$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lj3100sw $(lj3100sw_)
gdevmeds_h=$(DEVSRC)gdevmeds.h
$(DEVOBJ)gdevl31s.$(OBJ) : $(DEVSRC)gdevl31s.c $(gdevmeds_h) $(PDEVH) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevl31s.$(OBJ) $(C_) $(DEVSRC)gdevl31s.c
$(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevmeds.$(OBJ) $(C_) $(DEVSRC)gdevmeds.c
### ------ CoStar LabelWriter II II/Plus device ------ ###
@@ -309,13 +309,13 @@ $(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) \
coslw_=$(DEVOBJ)gdevcslw.$(OBJ)
-$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)coslw2p $(coslw_)
-$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)coslwxl $(coslw_)
-$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevcslw.$(OBJ) $(C_) $(DEVSRC)gdevcslw.c
### ----------------- The generic Epson printer device ----------------- ###
@@ -327,21 +327,21 @@ $(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
epson_=$(DEVOBJ)gdevepsn.$(OBJ)
-$(DD)epson.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)epson.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epson $(epson_)
-$(DD)eps9mid.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)eps9mid.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)eps9mid $(epson_)
-$(DD)eps9high.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)eps9high.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)eps9high $(epson_)
-$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevepsn.$(OBJ) $(C_) $(DEVSRC)gdevepsn.c
### ----------------- The IBM Proprinter printer device ---------------- ###
-$(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ibmpro $(epson_)
### -------------- The Epson LQ-2550 color printer device -------------- ###
@@ -349,10 +349,10 @@ $(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
### Dave St. Clair (dave@exlog.com) if you have questions. ###
epsonc_=$(DEVOBJ)gdevepsc.$(OBJ)
-$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)epsonc $(epsonc_)
-$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevepsc.$(OBJ) $(C_) $(DEVSRC)gdevepsc.c
### ------------- The Epson ESC/P 2 language printer devices ------------- ###
@@ -364,36 +364,36 @@ $(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
ESCP2=$(DEVOBJ)gdevescp.$(OBJ)
-$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevescp.$(OBJ) $(C_) $(DEVSRC)gdevescp.c
-$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ap3250 $(ESCP2)
-$(DD)st800.dev : $(ESCP2) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)st800.dev : $(ESCP2) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)st800 $(ESCP2)
stcolor1_=$(DEVOBJ)gdevstc.$(OBJ) $(DEVOBJ)gdevstc1.$(OBJ) $(DEVOBJ)gdevstc2.$(OBJ)
stcolor2_=$(DEVOBJ)gdevstc3.$(OBJ) $(DEVOBJ)gdevstc4.$(OBJ)
-$(DD)stcolor.dev : $(stcolor1_) $(stcolor2_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)stcolor.dev : $(stcolor1_) $(stcolor2_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)stcolor $(stcolor1_)
$(ADDMOD) $(DD)stcolor -obj $(stcolor2_)
gdevstc_h=$(DEVSRC)gdevstc.h
-$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevstc.$(OBJ) $(C_) $(DEVSRC)gdevstc.c
-$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevstc1.$(OBJ) $(C_) $(DEVSRC)gdevstc1.c
-$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevstc2.$(OBJ) $(C_) $(DEVSRC)gdevstc2.c
-$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevstc3.$(OBJ) $(C_) $(DEVSRC)gdevstc3.c
-$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevstc4.$(OBJ) $(C_) $(DEVSRC)gdevstc4.c
### --------------- Ugly/Update -> Unified Printer Driver ---------------- ###
@@ -401,10 +401,10 @@ $(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(CONTRIB_M
### Gunther Hess (gunther@elmos.de) ###
uniprint_=$(DEVOBJ)gdevupd.$(OBJ)
-$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)uniprint $(uniprint_)
-$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevupd.$(OBJ) $(C_) $(DEVSRC)gdevupd.c
### ------------ The H-P PaintJet color printer device ----------------- ###
@@ -415,16 +415,16 @@ $(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(CONTRIB_MAK
PJET=$(DEVOBJ)gdevpjet.$(OBJ) $(HPPCL)
-$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevpjet.$(OBJ) $(C_) $(DEVSRC)gdevpjet.c
-$(DD)lj250.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj250.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lj250 $(PJET)
-$(DD)paintjet.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)paintjet.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)paintjet $(PJET)
-$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)pjetxl $(PJET)
###--------------------- The Brother HL 7x0 printer --------------------- ###
@@ -435,10 +435,10 @@ $(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
### for questions about usage with the MFC6550MC Fax Machine. ###
hl7x0_=$(DEVOBJ)gdevhl7x.$(OBJ)
-$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)hl7x0 $(hl7x0_)
-$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevhl7x.$(OBJ) $(C_) $(DEVSRC)gdevhl7x.c
### -------------- Imagen ImPress Laser Printer device ----------------- ###
@@ -449,13 +449,13 @@ $(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_M
### You may also add -DA4 if needed for A4 paper. ###
imagen_=$(DEVOBJ)gdevimgn.$(OBJ)
-$(DD)imagen.dev : $(imagen_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)imagen.dev : $(imagen_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)imagen $(imagen_)
# Uncomment the first line for the ipr spooler, the second line for parallel.
IMGN_OPT=
#IMGN_OPT=-DUSE_BYTE_STREAM
-$(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(IMGN_OPT) $(DEVO_)gdevimgn.$(OBJ) $(C_) $(DEVSRC)gdevimgn.c
### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ###
@@ -466,10 +466,10 @@ $(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### width of the jetprinter itself.) ###
jetp3852_=$(DEVOBJ)gdev3852.$(OBJ)
-$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)jetp3852 $(jetp3852_)
-$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdev3852.$(OBJ) $(C_) $(DEVSRC)gdev3852.c
### ---------- The Canon LBP-8II and LIPS III printer devices ---------- ###
@@ -478,13 +478,13 @@ $(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_M
### Lauri Paatero, lauri.paatero@paatero.pp.fi ###
lbp8_=$(DEVOBJ)gdevlbp8.$(OBJ)
-$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lbp8 $(lbp8_)
-$(DD)lips3.dev : $(lbp8_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lips3.dev : $(lbp8_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lips3 $(lbp8_)
-$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevlbp8.$(OBJ) $(C_) $(DEVSRC)gdevlbp8.c
### -------------- The Epson LP-8000 laser printer device -------------- ###
@@ -492,10 +492,10 @@ $(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Oleg Fat'yanov <faty1@rlem.titech.ac.jp> if you have questions.###
lp8000_=$(DEVOBJ)gdevlp8k.$(OBJ)
-$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lp8000 $(lp8000_)
-$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevlp8k.$(OBJ) $(C_) $(DEVSRC)gdevlp8k.c
### -------------- The C.Itoh M8510 printer device --------------------- ###
@@ -503,10 +503,10 @@ $(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDI
### Smith <bob@snuffy.penfield.ny.us> if you have questions. ###
m8510_=$(DEVOBJ)gdev8510.$(OBJ)
-$(DD)m8510.dev : $(m8510_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)m8510.dev : $(m8510_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)m8510 $(m8510_)
-$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdev8510.$(OBJ) $(C_) $(DEVSRC)gdev8510.c
### -------------- 24pin Dot-matrix printer with 360DPI ---------------- ###
@@ -517,13 +517,13 @@ $(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### questions about the Epson LQ850. ###
dm24_=$(DEVOBJ)gdevdm24.$(OBJ)
-$(DD)necp6.dev : $(dm24_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)necp6.dev : $(dm24_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)necp6 $(dm24_)
-$(DD)lq850.dev : $(dm24_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lq850.dev : $(dm24_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lq850 $(dm24_)
-$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevdm24.$(OBJ) $(C_) $(DEVSRC)gdevdm24.c
### ----------------- Lexmark 5700 printer ----------------------------- ###
@@ -531,10 +531,10 @@ $(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Stephen Taylor (setaylor@ma.ultranet.com) if you have questions. ###
lxm5700m_=$(DEVOBJ)gdevlxm.$(OBJ)
-$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lxm5700m $(lxm5700m_)
-$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevlxm.$(OBJ) $(C_) $(DEVSRC)gdevlxm.c
### ----------------- The Okidata MicroLine 182 device ----------------- ###
@@ -542,10 +542,10 @@ $(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(CONTRIB_MA
### Maarten Koning (smeg@bnr.ca) if you have questions. ###
oki182_=$(DEVOBJ)gdevo182.$(OBJ)
-$(DD)oki182.dev : $(oki182_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)oki182.dev : $(oki182_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)oki182 $(oki182_)
-$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevo182.$(OBJ) $(C_) $(DEVSRC)gdevo182.c
### ------------- The Okidata IBM compatible printer device ------------ ###
@@ -553,10 +553,10 @@ $(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Charles Mack (chasm@netcom.com) if you have questions. ###
okiibm_=$(DEVOBJ)gdevokii.$(OBJ)
-$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)okiibm $(okiibm_)
-$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevokii.$(OBJ) $(C_) $(DEVSRC)gdevokii.c
### ------------------ The Epson Stylus Photo devices ------------------ ###
@@ -564,10 +564,10 @@ $(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Zoltan Kocsi (zoltan@bendor.com.au) if you have questions. ###
photoex_=$(DEVOBJ)gdevphex.$(OBJ)
-$(DD)photoex.dev : $(photoex_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)photoex.dev : $(photoex_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)photoex $(photoex_)
-$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevphex.$(OBJ) $(C_) $(DEVSRC)gdevphex.c
### ------------- The Ricoh 4081 laser printer device ------------------ ###
@@ -575,11 +575,11 @@ $(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### please contact kdw@oasis.icl.co.uk if you have questions. ###
r4081_=$(DEVOBJ)gdev4081.$(OBJ)
-$(DD)r4081.dev : $(r4081_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)r4081.dev : $(r4081_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)r4081 $(r4081_)
-$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdev4081.$(OBJ) $(C_) $(DEVSRC)gdev4081.c
### -------------------- Sony NWP533 printer device -------------------- ###
@@ -587,10 +587,10 @@ $(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Kivinen (kivinen@joker.cs.hut.fi) if you have questions. ###
nwp533_=$(DEVOBJ)gdevn533.$(OBJ)
-$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)nwp533 $(nwp533_)
-$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevn533.$(OBJ) $(C_) $(DEVSRC)gdevn533.c
### ----------------- The StarJet SJ48 device -------------------------- ###
@@ -599,7 +599,7 @@ $(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### please contact Mats Akerblom (f86ma@dd.chalmers.se). ###
sj48_=$(DEVOBJ)gdevsj48.$(OBJ)
-$(DD)sj48.dev : $(sj48_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)sj48.dev : $(sj48_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)sj48 $(sj48_)
$(DEVOBJ)gdevsj48.$(OBJ) : $(DEVSRC)gdevsj48.c $(PDEVH)
@@ -611,16 +611,16 @@ $(DEVOBJ)gdevsj48.$(OBJ) : $(DEVSRC)gdevsj48.c $(PDEVH)
### if you have questions. ###
t4693d_=$(DEVOBJ)gdev4693.$(OBJ)
-$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)t4693d2 $(t4693d_)
-$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)t4693d4 $(t4693d_)
-$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)t4693d8 $(t4693d_)
-$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdev4693.$(OBJ) $(C_) $(DEVSRC)gdev4693.c
### -------------------- Tektronix ink-jet printers -------------------- ###
@@ -628,10 +628,10 @@ $(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
### Karsten Spang (spang@nbivax.nbi.dk) if you have questions. ###
tek4696_=$(DEVOBJ)gdevtknk.$(OBJ)
-$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)tek4696 $(tek4696_)
-$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevtknk.$(OBJ) $(C_) $(DEVSRC)gdevtknk.c
###### ------------------------- Fax devices ------------------------- ######
@@ -642,12 +642,12 @@ $(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(CONTRIB_M
cfax_=$(DEVOBJ)gdevcfax.$(OBJ)
-$(DD)cfax.dev : $(cfax_) $(DD)fax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cfax.dev : $(cfax_) $(DD)fax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETDEV) $(DD)cfax $(cfax_)
$(ADDMOD) $(DD)cfax -include $(DD)fax
$(DEVOBJ)gdevcfax.$(OBJ) : $(DEVSRC)gdevcfax.c $(PDEVH)\
- $(gdevfax_h) $(scfx_h) $(strimpl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevfax_h) $(scfx_h) $(strimpl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevcfax.$(OBJ) $(C_) $(DEVSRC)gdevcfax.c
### ------------------------- The DigiFAX device ------------------------ ###
@@ -659,16 +659,16 @@ $(DEVOBJ)gdevcfax.$(OBJ) : $(DEVSRC)gdevcfax.c $(PDEVH)\
dfax_=$(DEVOBJ)gdevdfax.$(OBJ)
-$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETDEV) $(DD)dfaxlow $(dfax_)
$(ADDMOD) $(DEVGEN)dfaxlow -include $(DD)tfax
-$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETDEV) $(DD)dfaxhigh $(dfax_)
$(ADDMOD) $(DEVGEN)dfaxhigh -include $(DD)tfax
$(DEVOBJ)gdevdfax.$(OBJ) : $(DEVSRC)gdevdfax.c $(PDEVH)\
- $(gdevfax_h) $(gdevtfax_h) $(scfx_h) $(strimpl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevfax_h) $(gdevtfax_h) $(scfx_h) $(strimpl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevdfax.$(OBJ) $(C_) $(DEVSRC)gdevdfax.c
###### --------------------- Raster file formats --------------------- ######
@@ -678,10 +678,10 @@ $(DEVOBJ)gdevdfax.$(OBJ) : $(DEVSRC)gdevdfax.c $(PDEVH)\
### Frederic Petrot (petrot@masi.ibp.fr) if you have questions. ###
cif_=$(DEVOBJ)gdevcif.$(OBJ)
-$(DD)cif.dev : $(cif_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cif.dev : $(cif_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)cif $(cif_)
-$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevcif.$(OBJ) $(C_) $(DEVSRC)gdevcif.c
### ------------------------- Inferno bitmaps -------------------------- ###
@@ -689,11 +689,11 @@ $(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
### Russ Cox <rsc@plan9.bell-labs.com> if you have questions. ###
inferno_=$(DEVOBJ)gdevifno.$(OBJ)
-$(DD)inferno.dev : $(inferno_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)inferno.dev : $(inferno_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)inferno $(inferno_)
$(DEVOBJ)gdevifno.$(OBJ) : $(DEVSRC)gdevifno.c $(PDEVH)\
- $(gsparam_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gsparam_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevifno.$(OBJ) $(C_) $(DEVSRC)gdevifno.c
### --------------------------- MGR devices ---------------------------- ###
@@ -705,25 +705,25 @@ MGR=$(DEVOBJ)gdevmgr.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
gdevmgr_h=$(DEVSRC)gdevmgr.h
$(DEVOBJ)gdevmgr.$(OBJ) : $(DEVSRC)gdevmgr.c $(PDEVH)\
- $(gdevmgr_h) $(gdevpccm_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevmgr_h) $(gdevpccm_h) $(DCONTRIB_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevmgr.$(OBJ) $(C_) $(DEVSRC)gdevmgr.c
-$(DD)mgrmono.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrmono.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgrmono $(MGR)
-$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgrgray2 $(MGR)
-$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgrgray4 $(MGR)
-$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgrgray8 $(MGR)
-$(DD)mgr4.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgr4.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgr4 $(MGR)
-$(DD)mgr8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgr8.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)mgr8 $(MGR)
#########################################################################
@@ -733,16 +733,16 @@ $(DD)mgr8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
### These drivers are based on patches on existing device drivers in the
### src/ directory, therefore they are not in addons/
-$(DD)ljet4pjl.dev : $(HPMONO) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ljet4pjl.dev : $(HPMONO) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)ljet4pjl $(HPMONO)
-$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)lj4dithp $(cdeskjet_)
-$(DD)dj505j.dev : $(cdeskjet_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dj505j.dev : $(cdeskjet_) $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)dj505j $(cdeskjet_)
-$(DD)picty180.dev : $(cdeskjet_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)picty180.dev : $(cdeskjet_) $(DCONTRIB_MAK) $(MAKEDIRS)
$(SETPDEV) $(DD)picty180 $(cdeskjet_)
#########################################################################
@@ -754,118 +754,119 @@ $(DEVSRC)gdevmeds.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsht1.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevmeds.h:$(GLSRC)math_.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gx.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gx.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscie.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscie.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gp.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)memento.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gp.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevmeds.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)memento.h
$(DEVSRC)gdevmeds.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)scommon.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevmeds.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevmeds.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevmeds.h:$(GLSRC)std.h
+$(DEVSRC)gdevmeds.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevmeds.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevmeds.h:$(GLGEN)arch.h
-$(DEVSRC)gdevmeds.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsstate.h
$(DEVSRC)gdevstc.h:$(GLSRC)string_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsstrtok.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsovrc.h
@@ -873,183 +874,185 @@ $(DEVSRC)gdevstc.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxline.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsline.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsht1.h
$(DEVSRC)gdevstc.h:$(GLSRC)math_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gx.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gx.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsline.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscie.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevstc.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscie.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gp.h
-$(DEVSRC)gdevstc.h:$(GLSRC)memento.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gp.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevstc.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevstc.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevstc.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevstc.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevstc.h:$(GLSRC)memento.h
$(DEVSRC)gdevstc.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevstc.h:$(GLSRC)scommon.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevstc.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevstc.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevstc.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevstc.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevstc.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevstc.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevstc.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevstc.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevstc.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevstc.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevstc.h:$(GLSRC)std.h
+$(DEVSRC)gdevstc.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevstc.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevstc.h:$(GLGEN)arch.h
-$(DEVSRC)gdevstc.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscpm.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxfixed.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscpm.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxhttile.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gp.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)memento.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gp.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxsync.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)srdline.h
$(DEVSRC)gdevmgr.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)memento.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevmgr.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevmgr.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevmgr.h:$(GLSRC)std.h
+$(DEVSRC)gdevmgr.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevmgr.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevmgr.h:$(GLGEN)arch.h
-$(DEVSRC)gdevmgr.h:$(GLSRC)gssprintf.h
diff --git a/devices/devs.mak b/devices/devs.mak
index 17ddfe03..a9c6ec18 100644
--- a/devices/devs.mak
+++ b/devices/devs.mak
@@ -1237,30 +1237,6 @@ $(DEVOBJ)gdevpsd.$(OBJ) : $(DEVSRC)gdevpsd.c $(PDEVH) $(math__h)\
$(gdevppla_h) $(gxiodev_h) $(gdevpsd_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevpsd.$(OBJ) $(C_) $(DEVSRC)gdevpsd.c
-### --------------------------- The GPRF device ------------------------- ###
-
-gprf_=$(DEVOBJ)gdevgprf.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ) $(GLOBJ)gsequivc.$(OBJ) $(DEVOBJ)gdevppla.$(OBJ)
-
-$(DD)gprf.dev : $(gprf_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
- $(SETDEV) $(DD)gprf $(gprf_)
-
-$(DEVOBJ)gdevgprf_1.$(OBJ) : $(DEVSRC)gdevgprf.c $(PDEVH) $(math__h)\
- $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\
- $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h) \
- $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) $(gxgetbit_h)\
- $(gdevppla_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
- $(DEVCC) $(DEVO_)gdevgprf_1.$(OBJ) $(II)$(ZI_)$(_I) $(C_) $(DEVSRC)gdevgprf.c
-
-$(DEVOBJ)gdevgprf_0.$(OBJ) : $(DEVSRC)gdevgprf.c $(PDEVH) $(math__h)\
- $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\
- $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h) $(zlib_h)\
- $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) $(gxgetbit_h)\
- $(gdevppla_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
- $(DEVCC) $(DEVO_)gdevgprf_0.$(OBJ) $(II)$(ZI_)$(_I) $(C_) $(DEVSRC)gdevgprf.c
-
-$(DEVOBJ)gdevgprf.$(OBJ) : $(DEVOBJ)gdevgprf_$(SHARE_ZLIB).$(OBJ) $(DEVS_MAK) $(MAKEDIRS)
- $(CP_) $(DEVOBJ)gdevgprf_$(SHARE_ZLIB).$(OBJ) $(DEVOBJ)gdevgprf.$(OBJ)
-
### ----------------------- The permutation device --------------------- ###
perm_=$(DEVOBJ)gdevperm.$(OBJ)
@@ -1695,11 +1671,23 @@ $(DD)tiffgray.dev : $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\
$(SETPDEV2) $(DD)tiffgray $(tiffgray_)
$(ADDMOD) $(DD)tiffgray -include $(DD)tiffs $(tiff_i_)
-$(DEVOBJ)gdevtsep.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\
+$(DEVOBJ)gdevtsep_0.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\
$(gdevtifs_h) $(gdevdevn_h) $(gxdevsop_h) $(gsequivc_h) $(stdio__h) $(ctype__h)\
+ $(gxdht_h) $(gxiodev_h) $(gxdownscale_h) $(gzht_h)\
$(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(gsicc_h)\
$(gscms_h) $(gsicc_cache_h) $(gxdevsop_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
- $(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c
+ $(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep_0.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c
+
+$(DEVOBJ)gdevtsep_1.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\
+ $(gdevtifs_h) $(gdevdevn_h) $(gxdevsop_h) $(gsequivc_h) $(stdio__h) $(ctype__h)\
+ $(gxdht_h) $(gxiodev_h) $(gxdownscale_h) $(gzht_h)\
+ $(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(gsicc_h) $(cal_h)\
+ $(gscms_h) $(gsicc_cache_h) $(gxdevsop_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(DEVCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep_1.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c
+
+$(DEVOBJ)gdevtsep.$(OBJ) : $(DEVOBJ)gdevtsep_$(WITH_CAL).$(OBJ)
+ $(CP_) $(DEVOBJ)gdevtsep_$(WITH_CAL).$(OBJ) $(DEVOBJ)gdevtsep.$(OBJ)
+
# TIFF Scaled (downscaled gray -> mono), configurable compression
@@ -1878,16 +1866,18 @@ lcups_dev=$(LCUPSGENDIR)$(D)lcups.dev
lcupsi_dev=$(LCUPSIGENDIR)$(D)lcupsi.dev
cups_=$(DEVOBJ)gdevcups.$(OBJ)
-$(DD)cups.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) \
+$(DD)cups.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
$(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)cups $(cups_)
$(ADDMOD) $(DD)cups -include $(lcups_dev)
$(ADDMOD) $(DD)cups -include $(lcupsi_dev)
-$(DD)pwgraster.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) \
+ $(ADDMOD) $(DD)cups -include $(GLD)page
+$(DD)pwgraster.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
$(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)pwgraster $(cups_)
$(ADDMOD) $(DD)pwgraster -include $(lcups_dev)
$(ADDMOD) $(DD)pwgraster -include $(lcupsi_dev)
+ $(ADDMOD) $(DD)pwgraster -include $(GLD)page
$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
$(CUPS_CC) $(DEVO_)gdevcups.$(OBJ) $(C_) $(CFLAGS) $(CUPSCFLAGS) \
@@ -1947,6 +1937,25 @@ $(DEVOBJ)gdevpdfimg.$(OBJ) : $(DEVSRC)gdevpdfimg.c $(AK) $(gdevkrnlsclass_h) \
$(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h)
$(DEVCC) $(DEVO_)gdevpdfimg.$(OBJ) $(C_) $(DEVSRC)gdevpdfimg.c
+### -------- URF device --------------------- ###
+urf=$(DEVOBJ)gdevurf.$(OBJ)
+$(DD)urfgray.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)urfgray $(urf)
+ $(ADDMOD) $(DD)urfgray -include $(GLD)page
+
+$(DD)urfrgb.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)urfrgb $(urf)
+ $(ADDMOD) $(DD)urfrgb -include $(GLD)page
+
+$(DD)urfcmyk.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)urfcmyk $(urf)
+ $(ADDMOD) $(DD)urfcmyk -include $(GLD)page
+
+$(DEVOBJ)gdevurf.$(OBJ) : $(URFSRCDIR)$(D)gdevurf.c $(AK) $(PDEVH) \
+ $(gsparam_h) $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gxdcconv_h)\
+ $(gsutil_h) $(DEVS_MAK) $(MAKEDIRS)
+ $(DEVCC) $(DEVO_)gdevurf.$(OBJ) $(C_) $(URFSRCDIR)$(D)gdevurf.c
+
# Dependencies:
$(DEVSRC)gxfcopy.h:$(GLSRC)gsfont.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsmatrix.h
@@ -1954,102 +1963,103 @@ $(DEVSRC)gxfcopy.h:$(GLSRC)scommon.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsstype.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gsmemory.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gslibctx.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)stdint_.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gsgstate.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gsccode.h
$(DEVSRC)gxfcopy.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gxfcopy.h:$(GLSRC)stdio_.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gstypes.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)stdint_.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsccode.h
$(DEVSRC)gxfcopy.h:$(GLSRC)std.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gstypes.h
$(DEVSRC)gxfcopy.h:$(GLSRC)stdpre.h
$(DEVSRC)gxfcopy.h:$(GLGEN)arch.h
-$(DEVSRC)gxfcopy.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdev8bcm.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdev8bcm.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscpm.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxfixed.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscpm.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxhttile.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gp.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)memento.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gp.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxsync.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)srdline.h
$(DEVSRC)gdevpcl.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevpcl.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevpcl.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevpcl.h:$(GLSRC)std.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevpcl.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpcl.h:$(GLGEN)arch.h
-$(DEVSRC)gdevpcl.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsparam.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsparam.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gslibctx.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdint_.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsu.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpsu.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdevprn.h
$(DEVSRC)gdevdljm.h:$(GLSRC)string_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrtok.h
@@ -2058,191 +2068,198 @@ $(DEVSRC)gdevdljm.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevdljm.h:$(DEVSRC)gdevpcl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsht1.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevdljm.h:$(GLSRC)math_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gx.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gx.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscie.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscie.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gp.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)memento.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gp.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevdljm.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)memento.h
$(DEVSRC)gdevdljm.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)scommon.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevdljm.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevdljm.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevdljm.h:$(GLSRC)std.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevdljm.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevdljm.h:$(GLGEN)arch.h
-$(DEVSRC)gdevdljm.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)x_.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)std.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevxcmp.h:$(GLGEN)arch.h
$(DEVSRC)gdevx.h:$(GLSRC)gdevbbox.h
$(DEVSRC)gdevx.h:$(DEVSRC)gdevxcmp.h
$(DEVSRC)gdevx.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevx.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevx.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevx.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevx.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevx.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevx.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevx.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevx.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevx.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevx.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevx.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevx.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevx.h:$(GLSRC)x_.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevx.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevx.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevx.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevx.h:$(GLSRC)x_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevx.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevx.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscpm.h
$(DEVSRC)gdevx.h:$(GLSRC)gxfixed.h
$(DEVSRC)gdevx.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscpm.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxhttile.h
-$(DEVSRC)gdevx.h:$(GLSRC)gp.h
-$(DEVSRC)gdevx.h:$(GLSRC)memento.h
$(DEVSRC)gdevx.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevx.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevx.h:$(GLSRC)gp.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevx.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevx.h:$(GLSRC)gxsync.h
-$(DEVSRC)gdevx.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevx.h:$(GLSRC)srdline.h
$(DEVSRC)gdevx.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevx.h:$(GLSRC)memento.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevx.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevx.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevx.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevx.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevx.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevx.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevx.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevx.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevx.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevx.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevx.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevx.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevx.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevx.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevx.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevx.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevx.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevx.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevx.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevx.h:$(GLSRC)std.h
+$(DEVSRC)gdevx.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevx.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevx.h:$(GLGEN)arch.h
-$(DEVSRC)gdevx.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gxfixed.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevpxut.h:$(GLSRC)scommon.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxat.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxen.h
@@ -2250,662 +2267,662 @@ $(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxop.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsstype.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gslibctx.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)stdint_.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gsgstate.h
$(DEVSRC)gdevpxut.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevpxut.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevpxut.h:$(GLSRC)std.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevpxut.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpxut.h:$(GLGEN)arch.h
-$(DEVSRC)gdevpxut.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht1.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcolor.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsequivc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxmatrix.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevice.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsdf.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)strimpl.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsbitmap.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gslibctx.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdint_.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsgstate.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)gs_dll_call.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsds.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpsds.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfc.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfg.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spsdf.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)smd5.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)smd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfo.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfx.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdfx.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcid.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstype1.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfont42.h
@@ -2920,432 +2937,432 @@ $(DEVVECSRC)gdevpsf.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfcmap.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstext.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdcolor.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscspace.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrect.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdevice.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsuid.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfixed.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscpm.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxhttile.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmatrix.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxsync.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsbitmap.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsstype.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gpsync.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpsf.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpsf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdt.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdt.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtx.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtb.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtb.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdt.h
@@ -3353,516 +3370,516 @@ $(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtd.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtf.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdti.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdti.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdt.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdts.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdts.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdts.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtf.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtx.h
@@ -3871,129 +3888,129 @@ $(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtt.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdtx.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcmap.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdt.h
@@ -4001,236 +4018,237 @@ $(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdfx.h
$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpsdf.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevvec.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxgstate.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfont.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxline.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstrans.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sarc4.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevbbox.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)math_.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scfx.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevbbox.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spprint.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevp14.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spsdf.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcolor.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdcolor.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcid.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxmatrix.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgdata.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stream.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitfmt.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsequivc.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxclipsr.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)shc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgcache.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscolor2.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnotify.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfcmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevice.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcpath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85d.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcache.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85d.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscindex.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsptype1.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevcli.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtext.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstext.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstparam.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscie.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstate.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcspace.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsropt.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxrplane.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxctable.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnamecl.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiodev.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxrplane.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhldevc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)strimpl.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiclass.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stat_.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcvalue.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfont.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcvalue.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpath.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspenum.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxftype.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfrac.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdda.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslparam.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhldevc.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbcache.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdcolor.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrect.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscms.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxftype.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscspace.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdevice.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxarith.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslparam.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsxfont.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfixed.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrefct.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscpm.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsiparam.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdsrc.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsio.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gp.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memento.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsparam.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmatrix.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitmap.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstruct.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memento.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)vmsmath.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscsel.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scommon.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbitmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfname.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccolor.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtmap.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmemory.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpsync.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpgetenv.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslibctx.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdio_.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscompt.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbittab.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcindex.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdint_.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gssprintf.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccode.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gs_dll_call.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdio_.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstypes.h
$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdpre.h
$(DEVVECSRC)gdevpdtw.h:$(GLGEN)arch.h
-$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsht1.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevbmp.h:$(GLSRC)math_.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcolor.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsequivc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscie.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscie.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gp.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)memento.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gp.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)memento.h
$(DEVSRC)gdevbmp.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)scommon.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevbmp.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevbmp.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevbmp.h:$(GLSRC)std.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevbmp.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevbmp.h:$(GLGEN)arch.h
-$(DEVSRC)gdevbmp.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevnprn.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevprn.h
$(DEVSRC)gdevpsd.h:$(GLSRC)string_.h
@@ -4239,116 +4257,117 @@ $(DEVSRC)gdevpsd.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsht1.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevpsd.h:$(GLSRC)math_.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gx.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gx.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscie.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscie.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gp.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)memento.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gp.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevpsd.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)memento.h
$(DEVSRC)gdevpsd.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)scommon.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevpsd.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevpsd.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevpsd.h:$(GLSRC)std.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevpsd.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevpsd.h:$(GLGEN)arch.h
-$(DEVSRC)gdevpsd.h:$(GLSRC)gssprintf.h
$(DEVSRC)minftrsz.h:$(GLSRC)std.h
$(DEVSRC)minftrsz.h:$(GLSRC)stdpre.h
$(DEVSRC)minftrsz.h:$(GLGEN)arch.h
@@ -4359,237 +4378,239 @@ $(DEVSRC)gdevfax.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsht1.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcomp.h
$(DEVSRC)gdevfax.h:$(GLSRC)math_.h
$(DEVSRC)gdevfax.h:$(GLSRC)scfx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevfax.h:$(GLSRC)shc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscie.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevfax.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscie.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gp.h
-$(DEVSRC)gdevfax.h:$(GLSRC)memento.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gp.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevfax.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevfax.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevfax.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevfax.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevfax.h:$(GLSRC)memento.h
$(DEVSRC)gdevfax.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevfax.h:$(GLSRC)scommon.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevfax.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevfax.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevfax.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevfax.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsbittab.h
$(DEVSRC)gdevfax.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevfax.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevfax.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevfax.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevfax.h:$(GLSRC)std.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevfax.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevfax.h:$(GLGEN)arch.h
-$(DEVSRC)gdevfax.h:$(GLSRC)gssprintf.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdownscale.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdownscale.h
$(DEVSRC)gdevtifs.h:$(GLSRC)string_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrtok.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclthrd.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclpage.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxclist.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxgstate.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxline.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstrans.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxgetbit.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsht1.h
$(DEVSRC)gdevtifs.h:$(GLSRC)math_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdevp14.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcolor2.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcolor.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gx.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gx.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdcolor.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdebug.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitfmt.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevbuf.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxband.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitfmt.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsequivc.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxclipsr.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevice.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcpath.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcache.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscindex.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsptype1.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxtext.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscie.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstext.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscie.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxstate.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcmap.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxctable.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmalloc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxiclass.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxclio.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxtmap.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsxfont.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxfixed.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclio.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdsrc.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsio.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gp.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)memento.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsmatrix.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gp.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsutil.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrl.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gdbflags.h
$(DEVSRC)gdevtifs.h:$(GLSRC)srdline.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsstruct.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gserrors.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gxsync.h
$(DEVSRC)gdevtifs.h:$(GLSRC)claptrap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gserrors.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)memento.h
$(DEVSRC)gdevtifs.h:$(GLSRC)vmsmath.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscsel.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)scommon.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsbitmap.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsfname.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevtifs.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gs_dll_call.h
$(DEVSRC)gdevtifs.h:$(GLSRC)ctype_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevtifs.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevtifs.h:$(GLSRC)std.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevtifs.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevtifs.h:$(GLGEN)arch.h
-$(DEVSRC)gdevtifs.h:$(GLSRC)gssprintf.h
diff --git a/devices/gdev3852.c b/devices/gdev3852.c
index 2222ebe8..84388357 100644
--- a/devices/gdev3852.c
+++ b/devices/gdev3852.c
@@ -65,10 +65,15 @@ jetp3852_print_page(gx_device_printer *pdev, gp_file *prn_stream)
unsigned int count,tempcnt;
unsigned char vtp,cntc1,cntc2;
int line_size_color_plane;
+ int code = 0;
byte data[DATA_SIZE];
byte plane_data[LINE_SIZE * 3];
+ /* Initialise data to zeros, otherwise later on, uninitialised bytes in
+ dp[] can be greater than 7, which breaks spr8[dp[]]. */
+ memset(data, 0x00, DATA_SIZE);
+
/* Set initial condition for printer */
gp_fputs("\033@",prn_stream);
@@ -77,10 +82,19 @@ jetp3852_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int lnum;
int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
int num_blank_lines = 0;
+
+ if (line_size > DATA_SIZE) {
+ emprintf2(pdev->memory, "invalid resolution and/or width gives line_size = %d, max. is %d\n",
+ line_size, DATA_SIZE);
+ return_error(gs_error_rangecheck);
+ }
+
for ( lnum = 0; lnum < pdev->height; lnum++ ) {
byte *end_data = data + line_size;
- gdev_prn_copy_scan_lines(pdev, lnum,
+ code = gdev_prn_copy_scan_lines(pdev, lnum,
(byte *)data, line_size);
+ if (code < 0)
+ break;
/* Remove trailing 0s. */
while ( end_data > data && end_data[-1] == 0 )
end_data--;
@@ -92,10 +106,6 @@ jetp3852_print_page(gx_device_printer *pdev, gp_file *prn_stream)
byte *odp;
byte *row;
- /* Pad with 0s to fill out the last */
- /* block of 8 bytes. */
- memset(end_data, 0, 7);
-
/* Transpose the data to get pixel planes. */
for ( i = 0, odp = plane_data; i < DATA_SIZE;
i += 8, odp++
@@ -166,5 +176,5 @@ jetp3852_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* eject page */
gp_fputs("\014", prn_stream);
- return 0;
+ return code;;
}
diff --git a/devices/gdev4081.c b/devices/gdev4081.c
index fe40b2c2..bd5c52d8 100644
--- a/devices/gdev4081.c
+++ b/devices/gdev4081.c
@@ -38,21 +38,19 @@ r4081_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
int out_size = ((pdev->width + 7) & -8) ;
byte *out = (byte *)gs_malloc(pdev->memory, out_size, 1, "r4081_print_page(out)");
- int lnum = 0;
+ int lnum = 0, code = 0;
int last = pdev->height;
/* Check allocations */
if ( out == 0 )
- { if ( out )
- gs_free(pdev->memory, (char *)out, out_size, 1,
- "r4081_print_page(out)");
- return -1;
- }
+ return_error(gs_error_VMerror);
/* find the first line which has something to print */
while ( lnum < last )
{
- gdev_prn_copy_scan_lines(pdev, lnum, (byte *)out, line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, (byte *)out, line_size);
+ if (code < 0)
+ goto xit;
if ( out[0] != 0 ||
memcmp((char *)out, (char *)out+1, line_size-1)
)
@@ -62,7 +60,9 @@ r4081_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* find the last line which has something to print */
while (last > lnum) {
- gdev_prn_copy_scan_lines(pdev, last-1, (byte *)out, line_size);
+ code = gdev_prn_copy_scan_lines(pdev, last-1, (byte *)out, line_size);
+ if (code < 0)
+ goto xit;
if ( out[0] != 0 ||
memcmp((char *)out, (char *)out+1, line_size-1)
)
@@ -77,7 +77,9 @@ r4081_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* Print lines of graphics */
while ( lnum < last )
{
- gdev_prn_copy_scan_lines(pdev, lnum, (byte *)out, line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, (byte *)out, line_size);
+ if (code < 0)
+ goto xit;
gp_fwrite(out, sizeof(char), line_size, prn_stream);
lnum ++;
}
@@ -85,6 +87,7 @@ r4081_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* Eject the page and reinitialize the printer */
gp_fputs("\f\033\rP", prn_stream);
+xit:
gs_free(pdev->memory, (char *)out, out_size, 1, "r4081_print_page(out)");
- return 0;
+ return code;
}
diff --git a/devices/gdev4693.c b/devices/gdev4693.c
index 7e18054f..baa975c5 100644
--- a/devices/gdev4693.c
+++ b/devices/gdev4693.c
@@ -83,7 +83,7 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
char *p;
ushort data_size = line_size/prn_dev->width;
int checksum;
- int lnum;
+ int lnum, code = 0;
int i;
#if !ARCH_IS_BIG_ENDIAN
byte swap;
@@ -121,12 +121,14 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
/* write header */
if (gp_fwrite(header,1,22,ps_stream) != 22) {
errprintf(dev->memory, "Could not write header (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
for (lnum = 0; lnum < prn_dev->height; lnum++) {
- gdev_prn_copy_scan_lines(prn_dev,lnum,data,line_size);
+ code = gdev_prn_copy_scan_lines(prn_dev,lnum,data,line_size);
+ if (code < 0)
+ goto xit;
for (i = 0; i < line_size; i += data_size) {
@@ -147,32 +149,33 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
break;
default:
errprintf(dev->memory,"Bad depth (%d) t4693d.\n",depth);
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_rangecheck);
+ code = gs_note_error(gs_error_rangecheck);
+ goto xit;
}
if (gp_fwrite(&data[i],1,data_size,ps_stream) != data_size) {
errprintf(dev->memory,"Could not write pixel (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
}
if (gp_fputc(0x02,ps_stream) != 0x02) {
errprintf(dev->memory,"Could not write EOL (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
}
if (gp_fputc(0x01,ps_stream) != 0x01) {
errprintf(dev->memory,"Could not write EOT (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ /* fall through to xit: */
}
+xit:
gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return(0);
+ return(code);
}
diff --git a/devices/gdev8510.c b/devices/gdev8510.c
index 7d235b5f..a7b16b54 100644
--- a/devices/gdev8510.c
+++ b/devices/gdev8510.c
@@ -68,9 +68,13 @@ m8510_print_page(gx_device_printer *pdev, gp_file *prn_stream)
while ( lnum < pdev->height ) {
/* get a raster */
for (i = 7; i >= 0; i--) {
- gdev_prn_copy_scan_lines(pdev, lnum, &in1[i*line_size], line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, &in1[i*line_size], line_size);
+ if (code < 0)
+ goto out;
lnum++;
- gdev_prn_copy_scan_lines(pdev, lnum, &in2[i*line_size], line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, &in2[i*line_size], line_size);
+ if (code < 0)
+ goto out;
lnum++;
}
@@ -107,7 +111,7 @@ static void
m8510_output_run(gx_device_printer *pdev,
byte *out, int pass, gp_file *prn_stream)
{
- byte *out_end = out + pdev->width;
+ byte *out_end = out + ((pdev->width + 7) & -8); /* round up to multiple of 8 */
char tmp[10];
int count;
@@ -128,7 +132,7 @@ m8510_output_run(gx_device_printer *pdev,
/* Transfer the line of data. */
count = out_end - out;
- if (count) {
+ if (count > 0) {
gs_sprintf(tmp, "\033g%03d", count/8);
gp_fwrite(tmp, 1, 5, prn_stream);
gp_fwrite(out, 1, count, prn_stream);
diff --git a/devices/gdevatx.c b/devices/gdevatx.c
index b5223316..aa5462ce 100644
--- a/devices/gdevatx.c
+++ b/devices/gdevatx.c
@@ -167,6 +167,7 @@ atx_print_page(gx_device_printer *pdev, gp_file *f, int max_width_bytes)
(int)ceil((height / pdev->HWResolution[1] + top_bottom_skip) * 100);
gs_memory_t *mem = pdev->memory;
int raster = gx_device_raster((gx_device *)pdev, true);
+ int width = pdev->width;
byte *buf;
/*
* ATX_COMPRESSED_DATA only takes a 1-byte (word) count.
@@ -176,6 +177,9 @@ atx_print_page(gx_device_printer *pdev, gp_file *f, int max_width_bytes)
byte *compressed;
int blank_lines, lnum;
int code = 0;
+ byte mask;
+ int endidx = width>>3;
+ int rowlen = (width+7)>>3;
/* Enforce a minimum 3" page length. */
if (page_length_100ths < 300)
@@ -187,15 +191,29 @@ atx_print_page(gx_device_printer *pdev, gp_file *f, int max_width_bytes)
code = gs_note_error(gs_error_VMerror);
goto done;
}
+ memset(buf, 0, raster);
+ if (width & 7)
+ mask = ~(255>>(width & 7));
+ else
+ mask = 255, endidx--;
+
fput_atx_command(f, ATX_SET_PAGE_LENGTH, page_length_100ths);
for (blank_lines = 0, lnum = 0; lnum < height; ++lnum) {
byte *row;
byte *end;
int count;
- gdev_prn_get_bits(pdev, lnum, buf, &row);
+ code = gdev_prn_get_bits(pdev, lnum, buf, &row);
+ if (code < 0)
+ goto done;
+ /* Clear any trailing padding bits */
+ row[endidx] &= mask;
+ /* We need an even number of bytes to work with. */
+ end = row + rowlen;
+ if (rowlen & 1)
+ *end++ = 0;
/* Find the end of the non-blank data. */
- for (end = row + raster; end > row && end[-1] == 0 && end[-2] == 0; )
+ while (end > row && end[-1] == 0 && end[-2] == 0)
end -= 2;
if (end == row) { /* blank line */
++blank_lines;
diff --git a/devices/gdevbit.c b/devices/gdevbit.c
index 98ef8d4d..d0c7711e 100644
--- a/devices/gdevbit.c
+++ b/devices/gdevbit.c
@@ -792,19 +792,22 @@ bit_print_page(gx_device_printer * pdev, gp_file * prn_stream)
int bottom = ((gx_device_bit *)pdev)->LastLine >= pdev->height ? pdev->height - 1 :
((gx_device_bit *)pdev)->LastLine;
int line_count = any_abs(bottom - lnum);
- int i, step = lnum > bottom ? -1 : 1;
+ int code = 0, i, step = lnum > bottom ? -1 : 1;
if (in == 0)
return_error(gs_error_VMerror);
if ((lnum == 0) && (bottom == 0))
line_count = pdev->height - 1; /* default when LastLine == 0, FirstLine == 0 */
for (i = 0; i <= line_count; i++, lnum += step) {
- gdev_prn_get_bits(pdev, lnum, in, &data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &data);
+ if (code < 0)
+ goto done;
if (!nul)
gp_fwrite(data, 1, line_size, prn_stream);
}
+done:
gs_free_object(pdev->memory, in, "bit_print_page(in)");
- return 0;
+ return code;
}
/* For tags device go ahead and add in the size so that we can strip and create
@@ -835,10 +838,11 @@ bittags_print_page(gx_device_printer * pdev, gp_file * prn_stream)
line_count = pdev->height - 1; /* default when LastLine == 0, FirstLine == 0 */
for (i = 0; i <= line_count; i++, lnum += step) {
if ((code = gdev_prn_get_bits(pdev, lnum, in, &data)) < 0)
- return code;
+ goto done;
if (!nul)
gp_fwrite(data, 1, line_size, prn_stream);
}
+done:
gs_free_object(pdev->memory, in, "bit_print_page(in)");
return 0;
}
diff --git a/devices/gdevbj10.c b/devices/gdevbj10.c
index 00f8569e..3423ebc5 100644
--- a/devices/gdevbj10.c
+++ b/devices/gdevbj10.c
@@ -312,7 +312,8 @@ bj10e_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* Copy 1 scan line and test for all zero. */
code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
- if ( code < 0 ) goto xit;
+ if ( code < 0 )
+ goto fin;
/* The mem... or str... functions should be faster than */
/* the following code, but all systems seem to implement */
/* them so badly that this code is faster. */
diff --git a/devices/gdevbmp.c b/devices/gdevbmp.c
index 3c6630ee..f8ce596e 100644
--- a/devices/gdevbmp.c
+++ b/devices/gdevbmp.c
@@ -162,7 +162,9 @@ bmp_print_page(gx_device_printer * pdev, gp_file * file)
/* BMP files want the image in bottom-to-top order! */
for (y = pdev->height - 1; y >= 0; y--) {
- gdev_prn_copy_scan_lines(pdev, y, row, raster);
+ code = gdev_prn_copy_scan_lines(pdev, y, row, raster);
+ if (code < 0)
+ goto done;
gp_fwrite((const char *)row, bmp_raster, 1, file);
}
diff --git a/devices/gdevccr.c b/devices/gdevccr.c
index 9fb22f35..2080d785 100644
--- a/devices/gdevccr.c
+++ b/devices/gdevccr.c
@@ -145,6 +145,7 @@ ccr_print_page(gx_device_printer *pdev, gp_file *pstream)
int cmy, c, m, y;
byte *in;
byte *data;
+ int code = 0;
if((in = (byte *)gs_malloc(pdev->memory, line_size, 1, "gsline")) == NULL)
return_error(gs_error_VMerror);
@@ -156,7 +157,9 @@ ccr_print_page(gx_device_printer *pdev, gp_file *pstream)
}
for ( l = 0; l < lnum; l++ )
- { gdev_prn_get_bits(pdev, l, in, &data);
+ { code = gdev_prn_get_bits(pdev, l, in, &data);
+ if (code < 0)
+ goto xit;
if(alloc_line(pdev->memory, &linebuf[l], pixnum))
{
gs_free(pdev->memory, in, line_size, 1, "gsline");
@@ -191,9 +194,10 @@ write_cpass(linebuf, lnum, CPASS, pstream);
CCFILEEND(pstream);
/* clean up */
+xit:
gs_free(pdev->memory, in, line_size, 1, "gsline");
free_rb_line( pdev->memory, linebuf, lnum, pixnum );
-return 0;
+return code;
}
/* ------ Internal routines ------ */
diff --git a/devices/gdevcdj.c b/devices/gdevcdj.c
index 8cf4e2e7..50a1d62c 100644
--- a/devices/gdevcdj.c
+++ b/devices/gdevcdj.c
@@ -1787,7 +1787,7 @@ bjc_compress(const byte *row, const byte *end_row, byte *compressed)
register byte test, test2;
test = *exam;
- while ( exam < end_row ) {
+ while ( exam + 1 < end_row ) {
test2 = *++exam;
if ( test == test2 )
break;
@@ -1969,7 +1969,7 @@ ep_print_image(gp_file *prn_stream, ep_globals *eg, char cmd, byte *data, int si
/* p2 is the head of non zero image. */
p2 = p3;
redo:
- for (p3 += row_bytes; memcmp(p3, zeros, row_bytes); p3 += row_bytes);
+ for (p3 += row_bytes; p3 < outp && memcmp(p3, zeros, row_bytes); p3 += row_bytes);
if (p3 < outp && memcmp(p3+row_bytes, zeros, row_bytes)) goto redo;
} else p1 = p2 = outp;
@@ -2022,6 +2022,7 @@ hp_colour_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
int compression = 0;
int scan = 0;
int *errors[2];
+ int code = 0;
const char *cid_string = (const char*) 0;
byte *data[4], *plane_data[4][4], *out_data;
byte *out_row, *out_row_alt;
@@ -2414,7 +2415,9 @@ hp_colour_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
word *data_words = (word *)data[scan];
register word *end_data = data_words + line_size_words;
- gdev_prn_copy_scan_lines(pdev, lnum, data[scan], line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, data[scan], line_size);
+ if (code < 0)
+ goto xit;
/* Mask off 1-bits beyond the line width. */
end_data[-1] &= rmask;
@@ -2744,11 +2747,12 @@ hp_colour_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
} else
gp_fputs("\033&l0H", prn_stream);
+xit:
/* free temporary storage */
gs_free(pdev->memory, (char *) eg.storage, eg.storage_size_words, W, "ep_print_buffer");
gs_free(pdev->memory, (char *) storage, storage_size_words, W, "hp_colour_print_page");
- return 0;
+ return code;
}
/*
diff --git a/devices/gdevcfax.c b/devices/gdevcfax.c
index d6fbebc4..6f6419ae 100644
--- a/devices/gdevcfax.c
+++ b/devices/gdevcfax.c
@@ -149,7 +149,9 @@ cfax_stream_print_page_width(gx_device_printer * pdev, gp_file * prn_stream,
if (code < 0)
return_error(gs_error_limitcheck);
/* Now, get the bits and encode them */
- gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ if (code < 0)
+ goto done;
if (col_size > in_size) {
memset(in + in_size , 0, col_size - in_size);
}
diff --git a/devices/gdevcif.c b/devices/gdevcif.c
index f67aaf2a..66f61ce3 100644
--- a/devices/gdevcif.c
+++ b/devices/gdevcif.c
@@ -47,26 +47,36 @@ cif_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int lnum;
byte *in = (byte *)gs_malloc(pdev->memory, line_size, 1, "cif_print_page(in)");
char *s;
+ const char *fname;
int scanline, scanbyte;
int length, start; /* length is the number of successive 1 bits, */
/* start is the set of 1 bit start position */
+ int code = 0;
if (in == 0)
return_error(gs_error_VMerror);
- if ((s = strchr(pdev->fname, '.')) == NULL)
- length = strlen(pdev->fname) + 1;
+#ifdef CLUSTER
+ fname = "clusterout";
+#else
+ fname = (const char *)(pdev->fname);
+#endif
+ if ((s = strchr(fname, '.')) == NULL)
+ length = strlen(fname) + 1;
else
- length = s - pdev->fname;
- s = (char *)gs_malloc(pdev->memory, length, sizeof(char), "cif_print_page(s)");
-
- strncpy(s, pdev->fname, length);
+ length = s - fname;
+ s = (char *)gs_malloc(pdev->memory, length+1, sizeof(char), "cif_print_page(s)");
+ if (s == NULL)
+ return_error(gs_error_VMerror);
+ strncpy(s, fname, length);
*(s + length) = '\0';
gp_fprintf(prn_stream, "DS1 25 1;\n9 %s;\nLCP;\n", s);
- gs_free(pdev->memory, s, length, 1, "cif_print_page(s)");
+ gs_free(pdev->memory, s, length+1, 1, "cif_print_page(s)");
for (lnum = 0; lnum < pdev->height; lnum++) {
- gdev_prn_copy_scan_lines(pdev, lnum, in, line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, in, line_size);
+ if (code < 0)
+ goto xit;
length = 0;
for (scanline = 0; scanline < line_size; scanline++)
#ifdef TILE /* original, simple, inefficient algorithm */
@@ -92,6 +102,7 @@ cif_print_page(gx_device_printer *pdev, gp_file *prn_stream)
#endif
}
gp_fprintf(prn_stream, "DF;\nC1;\nE\n");
+xit:
gs_free(pdev->memory, in, line_size, 1, "cif_print_page(in)");
- return 0;
+ return code;
}
diff --git a/devices/gdevclj.c b/devices/gdevclj.c
index d5b46689..542bb8ed 100644
--- a/devices/gdevclj.c
+++ b/devices/gdevclj.c
@@ -247,15 +247,24 @@ clj_get_params(gx_device *pdev, gs_param_list *plist)
* on error.
*/
static int
-clj_media_size(float mediasize[2], gs_param_list *plist)
+clj_media_size(float mediasize[2], gs_param_list *plist, gx_device *dev)
{
gs_param_float_array fres;
gs_param_float_array fsize;
gs_param_int_array hwsize;
int have_pagesize = 0;
+ float res[2];
- if ( (param_read_float_array(plist, "HWResolution", &fres) == 0) &&
- !is_supported_resolution(fres.data) )
+ if ( param_read_float_array(plist, "HWResolution", &fres) == 0) {
+ res[0] = fres.data[0];
+ res[1] = fres.data[1];
+ }
+ else
+ {
+ res[0] = dev->HWResolution[0];
+ res[1] = dev->HWResolution[1];
+ }
+ if (!is_supported_resolution(res) )
return_error(gs_error_rangecheck);
if ( (param_read_float_array(plist, "PageSize", &fsize) == 0) ||
@@ -266,8 +275,8 @@ clj_media_size(float mediasize[2], gs_param_list *plist)
}
if (param_read_int_array(plist, "HWSize", &hwsize) == 0) {
- mediasize[0] = ((float)hwsize.data[0]) * 72 / fres.data[0];
- mediasize[1] = ((float)hwsize.data[1]) * 72 / fres.data[1];
+ mediasize[0] = ((float)hwsize.data[0]) * 72 / res[0];
+ mediasize[1] = ((float)hwsize.data[1]) * 72 / res[1];
have_pagesize = 1;
}
@@ -286,7 +295,7 @@ clj_put_params(
{
float mediasize[2];
bool rotate = false;
- int have_pagesize = clj_media_size(mediasize, plist);
+ int have_pagesize = clj_media_size(mediasize, plist, pdev);
if (have_pagesize < 0)
return have_pagesize;
@@ -419,6 +428,7 @@ clj_print_page(
double fs_res = pdev->HWResolution[0] / 72.0;
double ss_res = pdev->HWResolution[1] / 72.0;
int imageable_width, imageable_height;
+ int code = 0;
/* no paper size at this point is a serious error */
if (psize == 0)
@@ -470,7 +480,9 @@ clj_print_page(
for (i = 0; i < imageable_height; i++) {
int clen[3];
- gdev_prn_copy_scan_lines(pdev, i, data, lsize);
+ code = gdev_prn_copy_scan_lines(pdev, i, data, lsize);
+ if (code < 0)
+ goto xit;
/* The 'lsize' bytes of data have the blank margin area at the end due */
/* to the 'initial_matrix' offsets that are applied. */
@@ -494,11 +506,12 @@ clj_print_page(
/* PCL will take care of blank lines at the end */
gp_fputs("\033*rC\f", prn_stream);
+xit:
/* free the buffers used */
gs_free_object(mem, cdata[0], "clj_print_page(cdata)");
gs_free_object(mem, data, "clj_print_page(data)");
- return 0;
+ return code;
}
/* CLJ device methods */
@@ -623,7 +636,7 @@ clj_pr_put_params(
float mediasize[2];
int code = 0;
bool rotate = false;
- int have_pagesize = clj_media_size(mediasize, plist);
+ int have_pagesize = clj_media_size(mediasize, plist, pdev);
if (have_pagesize < 0)
return have_pagesize;
diff --git a/devices/gdevcljc.c b/devices/gdevcljc.c
index 703f2639..65933260 100644
--- a/devices/gdevcljc.c
+++ b/devices/gdevcljc.c
@@ -68,7 +68,7 @@ cljc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
code = gdev_prn_copy_scan_lines(pdev, i, (byte *) data, raster);
if (code < 0)
- break;
+ goto out;
compressed_size = gdev_pcl_mode3compress(raster, data, prow, cdata);
gp_fprintf(prn_stream, "\033*b%dW", compressed_size);
gp_fwrite(cdata, sizeof(byte), compressed_size, prn_stream);
diff --git a/devices/gdevdjtc.c b/devices/gdevdjtc.c
index fa4681af..5fb1a4ba 100644
--- a/devices/gdevdjtc.c
+++ b/devices/gdevdjtc.c
@@ -75,6 +75,7 @@ djet500c_print_page(gx_device_printer *pdev, gp_file *fprn)
byte *plane3=NULL;
int bitSize=0;
int planeSize=0;
+ int code = 0;
/* select the most compressed mode available & clear tmp storage */
/* put printer in known state */
@@ -122,7 +123,9 @@ djet500c_print_page(gx_device_printer *pdev, gp_file *fprn)
{
byte *endData;
- gdev_prn_copy_scan_lines(pdev, lnum, bitData, lineSize);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, bitData, lineSize);
+ if (code < 0)
+ goto xit;
/* Identify and skip blank lines */
endData = bitData + lineSize;
@@ -149,6 +152,10 @@ djet500c_print_page(gx_device_printer *pdev, gp_file *fprn)
plane1=(byte*)malloc(planeSize+8);
plane2=(byte*)malloc(planeSize+8);
plane3=(byte*)malloc(planeSize+8);
+ if (plane1 == NULL || plane2 == NULL || plane3 == NULL) {
+ code = gs_error_VMerror;
+ goto xit;
+ }
}
/* Transpose the data to get pixel planes. */
for (k=i=0; k<lineLen; i+=8, k++)
@@ -207,13 +214,14 @@ djet500c_print_page(gx_device_printer *pdev, gp_file *fprn)
/* eject page */
gp_fputs("\033&l0H", fprn);
+xit:
/* release allocated memory */
if (bitData) free(bitData);
if (plane1) free(plane1);
if (plane2) free(plane2);
if (plane3) free(plane3);
- return 0;
+ return code;
}
/*
diff --git a/devices/gdevdm24.c b/devices/gdevdm24.c
index abf8508c..62b7ba89 100644
--- a/devices/gdevdm24.c
+++ b/devices/gdevdm24.c
@@ -51,20 +51,39 @@ static void dot24_improve_bitmap (byte *, int);
static int
dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_string, int init_len)
{
- int xres = (int)pdev->x_pixels_per_inch;
- int yres = (int)pdev->y_pixels_per_inch;
- int x_high = (xres == 360);
- int y_high = (yres == 360);
- int bits_per_column = (y_high ? 48 : 24);
- uint line_size = gdev_prn_raster (pdev);
- uint in_size = line_size * bits_per_column;
- byte *in = (byte *) gs_malloc (pdev->memory, in_size, 1, "dot24_print_page (in)");
- uint out_size = ((pdev->width + 7) & -8) * 3;
- byte *out = (byte *) gs_malloc (pdev->memory, out_size, 1, "dot24_print_page (out)");
- int y_passes = (y_high ? 2 : 1);
- int dots_per_space = xres / 10; /* pica space = 1/10" */
- int bytes_per_space = dots_per_space * 3;
- int skip = 0, lnum = 0, ypass;
+ int xres;
+ int yres;
+ int x_high;
+ int y_high;
+ int bits_per_column;
+ uint line_size;
+ uint in_size;
+ byte *in;
+ uint out_size;
+ byte *out;
+ int y_passes;
+ int dots_per_space;
+ int bytes_per_space;
+ int skip = 0, lnum = 0, code = 0, ypass;
+
+ xres = (int)pdev->x_pixels_per_inch;
+ yres = (int)pdev->y_pixels_per_inch;
+ x_high = (xres == 360);
+ y_high = (yres == 360);
+ dots_per_space = xres / 10; /* pica space = 1/10" */
+ bytes_per_space = dots_per_space * 3;
+ if (bytes_per_space == 0) {
+ /* We divide by bytes_per_space later on. */
+ return_error(gs_error_rangecheck);
+ }
+
+ bits_per_column = (y_high ? 48 : 24);
+ line_size = gdev_prn_raster (pdev);
+ in_size = line_size * bits_per_column;
+ in = (byte *) gs_malloc (pdev->memory, in_size, 1, "dot24_print_page (in)");
+ out_size = ((pdev->width + 7) & -8) * 3;
+ out = (byte *) gs_malloc (pdev->memory, out_size, 1, "dot24_print_page (out)");
+ y_passes = (y_high ? 2 : 1);
/* Check allocations */
if (in == 0 || out == 0)
@@ -92,7 +111,9 @@ dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_strin
int lcnt;
/* Copy 1 scan line and test for all zero. */
- gdev_prn_copy_scan_lines (pdev, lnum, in, line_size);
+ code = gdev_prn_copy_scan_lines (pdev, lnum, in, line_size);
+ if (code < 0)
+ goto xit;
if (in[0] == 0
&& !memcmp ((char *) in, (char *) in + 1, line_size - 1))
{
@@ -119,27 +140,40 @@ dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_strin
/* Copy the rest of the scan lines. */
if (y_high)
{
+ /* NOTE: even though fixed to not ignore return < 0 from gdev_prn_copy_scan_lines, */
+ /* this code seems wrong -- it doesn't seem to match the 'else' method. */
inp = in + line_size;
- for (lcnt = 1; lcnt < 24; lcnt++, inp += line_size)
- if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2, inp,
- line_size))
+ for (lcnt = 1; lcnt < 24; lcnt++, inp += line_size) {
+ code = gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2, inp, line_size);
+ if (code < 0)
+ goto xit;
+ if (code == 0)
{
+ /* Pad with lines of zeros. */
memset (inp, 0, (24 - lcnt) * line_size);
break;
}
+ }
inp = in + line_size * 24;
- for (lcnt = 0; lcnt < 24; lcnt++, inp += line_size)
- if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2 + 1, inp,
- line_size))
+ for (lcnt = 0; lcnt < 24; lcnt++, inp += line_size) {
+ code = gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2 + 1, inp, line_size);
+ if (code < 0)
+ goto xit;
+ if (code == 0)
{
+ /* Pad with lines of zeros. */
memset (inp, 0, (24 - lcnt) * line_size);
break;
}
+ }
}
else
{
- lcnt = 1 + gdev_prn_copy_scan_lines (pdev, lnum + 1, in + line_size,
+ code = gdev_prn_copy_scan_lines (pdev, lnum + 1, in + line_size,
in_size - line_size);
+ if (code < 0)
+ goto xit;
+ lcnt = code + 1; /* FIXME: why +1 */
if (lcnt < 24)
/* Pad with lines of zeros. */
memset (in + lcnt * line_size, 0, in_size - lcnt * line_size);
@@ -223,10 +257,11 @@ dot24_print_page (gx_device_printer *pdev, gp_file *prn_stream, char *init_strin
gp_fputs ("\f\033@", prn_stream);
gp_fflush (prn_stream);
+xit:
gs_free (pdev->memory, (char *) out, out_size, 1, "dot24_print_page (out)");
gs_free (pdev->memory, (char *) in, in_size, 1, "dot24_print_page (in)");
- return 0;
+ return code;
}
/* Output a single graphics command. */
diff --git a/devices/gdevdsp.c b/devices/gdevdsp.c
index 878220c8..8ac211d4 100644
--- a/devices/gdevdsp.c
+++ b/devices/gdevdsp.c
@@ -855,13 +855,11 @@ display_put_params(gx_device * dev, gs_param_list * plist)
int old_height = dev->height;
int old_format = ddev->nFormat;
void *old_handle = ddev->pHandle;
-
gs_devn_params *pdevn_params = &ddev->devn_params;
equivalent_cmyk_color_params *pequiv_colors = &ddev->equiv_cmyk_colors;
/* Save current data in case we have a problem */
gs_devn_params saved_devn_params = *pdevn_params;
equivalent_cmyk_color_params saved_equiv_colors = *pequiv_colors;
-
int format;
void *handle;
int found_string_handle = 0;
@@ -1015,11 +1013,11 @@ display_put_params(gx_device * dev, gs_param_list * plist)
/* Use utility routine to handle devn parameters */
ecode = devn_put_params(dev, plist, pdevn_params, pequiv_colors);
/*
- * Setting MaxSeparations changes color_info.depth in
- * devn_put_params, but we always use 64bpp,
- * so reset it to the the correct value.
+ * If we support_devn, setting MaxSeparations or PageSpotColors changed the
+ * color_info.depth in devn_put_params, but we always use 64bpp, so reset it
+ * to the correct value.
*/
- dev->color_info.depth = ARCH_SIZEOF_COLOR_INDEX * 8;
+ ddev->color_info.depth = ARCH_SIZEOF_COLOR_INDEX * 8;
}
if (ecode >= 0) {
@@ -1100,7 +1098,15 @@ display_put_params(gx_device * dev, gs_param_list * plist)
ddev->nFormat, ddev->mdev->base) < 0)
return_error(gs_error_rangecheck);
}
-
+ /*
+ * Make the color_info.depth correct for the bpc and num_components since
+ * devn mode always has the display bitmap set up for 64-bits, but others,
+ * such as pdf14 compositor expect it to match (for "deep" detection).
+ */
+ if (ddev->icc_struct && ddev->icc_struct->supports_devn) {
+ ddev->color_info.depth = ddev->devn_params.bitspercomponent *
+ ddev->color_info.num_components;
+ }
return 0;
}
@@ -1402,6 +1408,7 @@ display_alloc_bitmap(gx_device_display * ddev, gx_device * param_dev)
{
int ccode;
const gx_device_memory *mdproto;
+
if (ddev->callback == NULL)
return gs_error_Fatal;
@@ -1467,6 +1474,10 @@ display_alloc_bitmap(gx_device_display * ddev, gx_device * param_dev)
display_free_bitmap(ddev);
/* erase bitmap - before display gets redrawn */
+ /*
+ * Note that this will fill all 64 bits even if we've reset depth in the
+ * devn case, since the underlying mdev is 64-bit (see above).
+ */
if (ccode == 0) {
int i;
gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS];
@@ -1856,6 +1867,7 @@ display_set_color_format(gx_device_display *ddev, int nFormat)
maxvalue, maxvalue);
if ((nFormat & DISPLAY_DEPTH_MASK) == DISPLAY_DEPTH_8) {
ddev->devn_params.bitspercomponent = bpc;
+ ddev->icc_struct->supports_devn = true;
set_color_procs(pdev,
display_separation_encode_color,
display_separation_decode_color,
diff --git a/devices/gdevepsc.c b/devices/gdevepsc.c
index 192128a4..f6fa2b30 100644
--- a/devices/gdevepsc.c
+++ b/devices/gdevepsc.c
@@ -174,27 +174,55 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
int y_mult = (y_24pin ? 3 : 1);
int line_size = (pdev->width + 7) >> 3; /* always mono */
int in_size = line_size * (8 * y_mult);
- byte *in =
- (byte *) gs_malloc(pdev->memory, in_size + 1, 1,
- "epsc_print_page(in)");
int out_size = ((pdev->width + 7) & -8) * y_mult;
- byte *out =
- (byte *) gs_malloc(pdev->memory, out_size + 1, 1,
- "epsc_print_page(out)");
+ byte *in;
+ byte *out;
int x_dpi = (int)pdev->x_pixels_per_inch;
- char start_graphics = (char)
- ((y_24pin ? graphics_modes_24 : graphics_modes_9)[x_dpi / 60]);
- int first_pass = (start_graphics & DD ? 1 : 0);
- int last_pass = first_pass * 2;
- int dots_per_space = x_dpi / 10; /* pica space = 1/10" */
- int bytes_per_space = dots_per_space * y_mult;
- int skip = 0, lnum = 0, pass;
-/* declare color buffer and related vars */
+ char start_graphics;
+ int first_pass;
+ int last_pass;
+ int dots_per_space;
+ int bytes_per_space;
+ int skip = 0, lnum = 0, code = 0, pass;
+
byte *color_in;
int color_line_size, color_in_size;
- int spare_bits = (pdev->width % 8); /* left over bits to go to margin */
- int whole_bits = pdev->width - spare_bits;
+ int spare_bits;
+ int whole_bits;
+
+ int max_dpi = 60 * (
+ (y_24pin) ?
+ sizeof(graphics_modes_24) / sizeof(graphics_modes_24[0])
+ :
+ sizeof(graphics_modes_9) / sizeof(graphics_modes_9[0])
+ )
+ - 1;
+ if (x_dpi > max_dpi) {
+ return_error(gs_error_rangecheck);
+ }
+
+ start_graphics = (char)
+ ((y_24pin ? graphics_modes_24 : graphics_modes_9)[x_dpi / 60]);
+ first_pass = (start_graphics & DD ? 1 : 0);
+ last_pass = first_pass * 2;
+ dots_per_space = x_dpi / 10; /* pica space = 1/10" */
+ bytes_per_space = dots_per_space * y_mult;
+ if (bytes_per_space == 0) {
+ /* This avoids divide by zero later on, bug 701843. */
+ return_error(gs_error_rangecheck);
+ }
+
+ in =
+ (byte *) gs_malloc(pdev->memory, in_size + 1, 1,
+ "epsc_print_page(in)");
+ out =
+ (byte *) gs_malloc(pdev->memory, out_size + 1, 1,
+ "epsc_print_page(out)");
+
+ /* declare color buffer and related vars */
+ spare_bits = (pdev->width % 8); /* left over bits to go to margin */
+ whole_bits = pdev->width - spare_bits;
/* Check allocations */
if (in == 0 || out == 0) {
@@ -204,7 +232,7 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
if (out)
gs_free(pdev->memory, (char *)out, out_size + 1, 1,
"epsc_print_page(out)");
- return -1;
+ return_error(gs_error_VMerror);
}
/* Initialize the printer and reset the margins. */
@@ -220,7 +248,7 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
"epsc_print_page(in)");
gs_free(pdev->memory, (char *)out, out_size + 1, 1,
"epsc_print_page(out)");
- return (-1);
+ return_error(gs_error_VMerror);
}
} else {
color_in = in;
@@ -235,7 +263,9 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
byte *nextmono = NULL; /* position to map next color */
/* Copy 1 scan line and test for all zero. */
- gdev_prn_copy_scan_lines(pdev, lnum, color_in, color_line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, color_in, color_line_size);
+ if (code < 0)
+ goto xit;
if (color_in[0] == 0 &&
!memcmp((char *)color_in, (char *)color_in + 1,
@@ -255,9 +285,12 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
gp_fprintf(prn_stream, "\033J%c", skip);
/* Copy the rest of the scan lines. */
- lcnt = 1 + gdev_prn_copy_scan_lines(pdev, lnum + 1,
+ code = gdev_prn_copy_scan_lines(pdev, lnum + 1,
color_in + color_line_size,
color_in_size - color_line_size);
+ if (code < 0)
+ goto xit;
+ lcnt = code + 1;
if (lcnt < 8 * y_mult) {
memset((char *)(color_in + lcnt * color_line_size), 0,
@@ -425,13 +458,14 @@ epsc_print_page(gx_device_printer * pdev, gp_file * prn_stream)
/* Eject the page and reinitialize the printer */
gp_fputs("\f\033@", prn_stream);
+xit:
gs_free(pdev->memory, (char *)out, out_size + 1, 1,
"epsc_print_page(out)");
gs_free(pdev->memory, (char *)in, in_size + 1, 1, "epsc_print_page(in)");
if (gx_device_has_color(pdev))
gs_free(pdev->memory, (char *)color_in, color_in_size + 1, 1,
"epsc_print_page(rin)");
- return 0;
+ return code;
}
/* Output a single graphics command. */
diff --git a/devices/gdevepsn.c b/devices/gdevepsn.c
index 49faaf3d..c69e4b53 100644
--- a/devices/gdevepsn.c
+++ b/devices/gdevepsn.c
@@ -159,29 +159,53 @@ eps_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high,
int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
/* Note that in_size is a multiple of 8. */
int in_size = line_size * (8 * in_y_mult);
- byte *buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "eps_print_page(buf1)");
- byte *buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "eps_print_page(buf2)");
- byte *in = buf1;
- byte *out = buf2;
+ byte *buf1 = NULL;
+ byte *buf2 = NULL;
+ byte *in;
+ byte *out;
int out_y_mult = (y_24pin ? 3 : 1);
int x_dpi = (int)pdev->x_pixels_per_inch;
- char start_graphics =
- (y_24pin ? graphics_modes_24 : graphics_modes_9)[x_dpi / 60];
- int first_pass = (start_graphics & DD ? 1 : 0);
- int last_pass = first_pass * (y_9pin_high == 2 ? 1 : 2);
int y_passes = (y_9pin_high ? 3 : 1);
int dots_per_space = x_dpi / 10; /* pica space = 1/10" */
int bytes_per_space = dots_per_space * out_y_mult;
int tab_min_pixels = x_dpi * MIN_TAB_10THS / 10;
int skip = 0, lnum = 0, pass, ypass;
+ int code = 0;
+
+ char start_graphics;
+ int first_pass;
+ int last_pass;
+
+ if (y_24pin) {
+ if (x_dpi / 60 >= sizeof(graphics_modes_24) / sizeof(graphics_modes_24[0])) {
+ return_error(gs_error_rangecheck);
+ }
+ start_graphics = graphics_modes_24[x_dpi / 60];
+ }
+ else {
+ if (x_dpi / 60 >= sizeof(graphics_modes_9) / sizeof(graphics_modes_9[0])) {
+ return_error(gs_error_rangecheck);
+ }
+ start_graphics = graphics_modes_9[x_dpi / 60];
+ }
+ first_pass = (start_graphics & DD ? 1 : 0);
+ last_pass = first_pass * (y_9pin_high == 2 ? 1 : 2);
+
+ if (bytes_per_space == 0) {
+ /* This avoids divide by zero later on, bug 701843. */
+ return_error(gs_error_rangecheck);
+ }
+
+ buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "eps_print_page(buf1)");
+ buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "eps_print_page(buf2)");
+ in = buf1;
+ out = buf2;
+
/* Check allocations */
- if ( buf1 == 0 || buf2 == 0 )
- { if ( buf1 )
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "eps_print_page(buf1)");
- if ( buf2 )
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "eps_print_page(buf2)");
- return_error(gs_error_VMerror);
+ if ( buf1 == 0 || buf2 == 0 ) {
+ code = gs_error_VMerror;
+ goto xit;
}
/* Initialize the printer and reset the margins. */
@@ -207,7 +231,9 @@ eps_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high,
int lcnt;
/* Copy 1 scan line and test for all zero. */
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
if ( in_data[0] == 0 &&
!memcmp((char *)in_data, (char *)in_data + 1, line_size - 1)
)
@@ -229,7 +255,9 @@ eps_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high,
}
/* Copy the the scan lines. */
- lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ code = lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ if (code < 0)
+ goto xit;
if ( lcnt < 8 * in_y_mult )
{ /* Pad with lines of zeros. */
memset(in + lcnt * line_size, 0,
@@ -244,7 +272,7 @@ eps_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high,
/* can't print neighboring dots. */
int i;
for ( i = 0; i < line_size * in_y_mult; ++i )
- in_data[i] |= in_data[i + line_size];
+ in[i] |= in[i + line_size];
}
if ( y_9pin_high )
@@ -391,9 +419,14 @@ eps_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high,
gp_fputs(end_string, prn_stream);
gp_fflush(prn_stream);
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "eps_print_page(buf2)");
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "eps_print_page(buf1)");
- return 0;
+xit:
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "eps_print_page(buf1)");
+ if ( buf2 )
+ gs_free(pdev->memory, (char *)buf2, in_size, 1, "eps_print_page(buf2)");
+ if (code < 0)
+ return_error(code);
+ return code;
}
/* Output a single graphics command. */
diff --git a/devices/gdevescp.c b/devices/gdevescp.c
index 00043192..005fa58a 100644
--- a/devices/gdevescp.c
+++ b/devices/gdevescp.c
@@ -119,7 +119,7 @@ escp2_print_page(gx_device_printer *pdev, gp_file *prn_stream)
byte *out = buf2;
int skip, lnum, top, bottom, left, width;
- int count, i;
+ int code = 0, count, i;
/*
** Check for valid resolution:
@@ -141,12 +141,9 @@ escp2_print_page(gx_device_printer *pdev, gp_file *prn_stream)
** Check buffer allocations:
*/
- if ( buf1 == 0 || buf2 == 0 )
- { if ( buf1 )
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "escp2_print_page(buf1)");
- if ( buf2 )
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "escp2_print_page(buf2)");
- return_error(gs_error_VMerror);
+ if ( buf1 == 0 || buf2 == 0 ) {
+ code = gs_error_VMerror;
+ goto xit;
}
/*
@@ -218,14 +215,18 @@ escp2_print_page(gx_device_printer *pdev, gp_file *prn_stream)
** Check buffer for 0 data. We can't do this mid-band
*/
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
while ( in_data[0] == 0 &&
!memcmp((char *)in_data, (char *)in_data + 1, line_size - 1) &&
lnum < bottom )
{
lnum++;
skip++;
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
}
if(lnum == bottom ) break; /* finished with this page */
@@ -241,7 +242,9 @@ escp2_print_page(gx_device_printer *pdev, gp_file *prn_stream)
skip = 0;
}
- lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ code = lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ if (lcnt < 0)
+ goto xit;
/*
** Check to see if we don't have enough data to fill an entire
@@ -403,7 +406,13 @@ escp2_print_page(gx_device_printer *pdev, gp_file *prn_stream)
gp_fputs("\f\033@", prn_stream);
gp_fflush(prn_stream);
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "escp2_print_page(buf2)");
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "escp2_print_page(buf1)");
- return 0;
+xit:
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "escp2_print_page(buf1)");
+ if ( buf2 )
+ gs_free(pdev->memory, (char *)buf2, in_size, 1, "escp2_print_page(buf2)");
+ if (code < 0)
+ return_error(code);
+
+ return code;
}
diff --git a/devices/gdevgprf.c b/devices/gdevgprf.c
deleted file mode 100644
index ff383e57..00000000
--- a/devices/gdevgprf.c
+++ /dev/null
@@ -1,1330 +0,0 @@
-/* Copyright (C) 2001-2019 Artifex Software, Inc.
- All Rights Reserved.
-
- This software is provided AS-IS with no warranty, either express or
- implied.
-
- This software is distributed under license and may not be copied,
- modified or distributed except as expressly authorized under the terms
- of the license contained in the file LICENSE in this distribution.
-
- Refer to licensing information at http://www.artifex.com or contact
- Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
- CA 94945, U.S.A., +1(415)492-9861, for further information.
-*/
-
-
-/* gprf device, based upon the gdevpsd.c code. */
-
-#include "math_.h"
-#include "zlib.h"
-#include "gdevprn.h"
-#include "gsparam.h"
-#include "gscrd.h"
-#include "gscrdp.h"
-#include "gxlum.h"
-#include "gdevdcrd.h"
-#include "gstypes.h"
-#include "gxdcconv.h"
-#include "gdevdevn.h"
-#include "gsequivc.h"
-#include "gscms.h"
-#include "gsicc_cache.h"
-#include "gsicc_manage.h"
-#include "gxgetbit.h"
-#include "gdevppla.h"
-#include "gxdownscale.h"
-#include "gdevdevnprn.h"
-#include "gxdevsop.h"
-
-#ifndef MAX_CHAN
-# define MAX_CHAN 15
-#endif
-
-/* Define the device parameters. */
-#ifndef X_DPI
-# define X_DPI 72
-#endif
-#ifndef Y_DPI
-# define Y_DPI 72
-#endif
-
-#define MAX_COLOR_VALUE 255 /* We are using 8 bits per colorant */
-
-
-/* The device descriptor */
-static dev_proc_open_device(gprf_prn_open);
-static dev_proc_close_device(gprf_prn_close);
-static dev_proc_get_params(gprf_get_params);
-static dev_proc_put_params(gprf_put_params);
-static dev_proc_print_page(gprf_print_page);
-static dev_proc_get_color_mapping_procs(get_gprf_color_mapping_procs);
-static dev_proc_get_color_comp_index(gprf_get_color_comp_index);
-
-/*
- * A structure definition for a DeviceN type device
- */
-typedef struct gprf_device_s {
- gx_devn_prn_device_common;
- gx_downscaler_params downscale;
- int max_spots;
- bool lock_colorants;
- gsicc_link_t *icclink;
- bool warning_given; /* Used to notify the user that max colorants reached */
-} gprf_device;
-
-/* GC procedures */
-static
-ENUM_PTRS_WITH(gprf_device_enum_ptrs, gprf_device *pdev)
-{
- ENUM_PREFIX(st_gx_devn_prn_device, 0);
- (void)pdev; /* Stop unused var warning */
- return 0;
-}
-ENUM_PTRS_END
-
-static RELOC_PTRS_WITH(gprf_device_reloc_ptrs, gprf_device *pdev)
-{
- RELOC_PREFIX(st_gx_devn_prn_device);
- (void)pdev; /* Stop unused var warning */
-}
-RELOC_PTRS_END
-
-static int
-gprf_spec_op(gx_device *dev_, int op, void *data, int datasize)
-{
- if (op == gxdso_supports_devn) {
- return true;
- }
- if (op == gxdso_supports_iccpostrender) {
- return true;
- }
- return gx_default_dev_spec_op(dev_, op, data, datasize);
-}
-
-/* Even though gprf_device_finalize is the same as gx_devn_prn_device_finalize,
- * we need to implement it separately because st_composite_final
- * declares all 3 procedures as private. */
-static void
-gprf_device_finalize(const gs_memory_t *cmem, void *vpdev)
-{
- gx_devn_prn_device_finalize(cmem, vpdev);
-}
-
-gs_private_st_composite_final(st_gprf_device, gprf_device,
- "gprf_device", gprf_device_enum_ptrs, gprf_device_reloc_ptrs,
- gprf_device_finalize);
-
-/*
- * Macro definition for gprf device procedures
- */
-#define device_procs(get_color_mapping_procs)\
-{ gprf_prn_open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, /* output_page */\
- gprf_prn_close, /* close */\
- NULL, /* map_rgb_color - not used */\
- NULL, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- gprf_get_params, /* get_params */\
- gprf_put_params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* finish_copydevice */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- get_color_mapping_procs, /* get_color_mapping_procs */\
- gprf_get_color_comp_index, /* get_color_comp_index */\
- gx_devn_prn_encode_color, /* encode_color */\
- gx_devn_prn_decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- gx_devn_prn_update_spot_equivalent_colors, /* update_spot_equivalent_colors */\
- gx_devn_prn_ret_devn_params, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- gprf_spec_op /* dev_spec_op */\
-}
-
-#define gprf_device_body(procs, dname, ncomp, pol, depth, mg, mc, sl, cn)\
- std_device_full_body_type_extended(gprf_device, &procs, dname,\
- &st_gprf_device,\
- (int)((long)(DEFAULT_WIDTH_10THS) * (X_DPI) / 10),\
- (int)((long)(DEFAULT_HEIGHT_10THS) * (Y_DPI) / 10),\
- X_DPI, Y_DPI,\
- GX_DEVICE_COLOR_MAX_COMPONENTS, /* MaxComponents */\
- ncomp, /* NumComp */\
- pol, /* Polarity */\
- depth, 0, /* Depth, GrayIndex */\
- mg, mc, /* MaxGray, MaxColor */\
- mg + 1, mc + 1, /* DitherGray, DitherColor */\
- sl, /* Linear & Separable? */\
- cn, /* Process color model name */\
- 0, 0, /* offsets */\
- 0, 0, 0, 0 /* margins */\
- ),\
- prn_device_body_rest_(gprf_print_page)
-
-/*
- * CMYK process color model and spot color support.
- */
-static const gx_device_procs spot_cmyk_procs
- = device_procs(get_gprf_color_mapping_procs);
-
-const gprf_device gs_gprf_device =
-{
- gprf_device_body(spot_cmyk_procs, "gprf",
- ARCH_SIZEOF_GX_COLOR_INDEX, /* Number of components - need a nominal 1 bit for each */
- GX_CINFO_POLARITY_SUBTRACTIVE,
- ARCH_SIZEOF_GX_COLOR_INDEX * 8, /* 8 bits per component (albeit in planes) */
- 255, 255, GX_CINFO_SEP_LIN, "DeviceCMYK"),
- /* devn_params specific parameters */
- { 8, /* Bits per color - must match ncomp, depth, etc. above */
- DeviceCMYKComponents, /* Names of color model colorants */
- 4, /* Number colorants for CMYK */
- 0, /* MaxSeparations has not been specified */
- -1, /* PageSpotColors has not been specified */
- {0}, /* SeparationNames */
- 0, /* SeparationOrder names */
- {0, 1, 2, 3, 4, 5, 6, 7 } /* Initial component SeparationOrder */
- },
- { true }, /* equivalent CMYK colors for spot colors */
- /* gprf device specific parameters */
- GX_DOWNSCALER_PARAMS_DEFAULTS,
- GS_SOFT_MAX_SPOTS, /* max_spots */
- false, /* colorants not locked */
- 0, /* ICC link */
-};
-
-/* Open the gprf device */
-int
-gprf_prn_open(gx_device * pdev)
-{
- gprf_device *pdev_gprf = (gprf_device *) pdev;
- int code;
- int k;
- bool force_pdf, force_ps;
- cmm_dev_profile_t *profile_struct;
- gsicc_rendering_param_t rendering_params;
-
-#ifdef TEST_PAD_AND_ALIGN
- pdev->pad = 5;
- pdev->log2_align_mod = 6;
-#endif
-
- /* There are 2 approaches to the use of a DeviceN ICC output profile.
- One is to simply limit our device to only output the colorants
- defined in the output ICC profile. The other is to use the
- DeviceN ICC profile to color manage those N colorants and
- to let any other separations pass through unmolested. The define
- LIMIT_TO_ICC sets the option to limit our device to only the ICC
- colorants defined by -sICCOutputColors (or to the ones that are used
- as default names if ICCOutputColors is not used). The pass through option
- (LIMIT_TO_ICC set to 0) makes life a bit more difficult since we don't
- know if the page_spot_colors overlap with any spot colorants that exist
- in the DeviceN ICC output profile. Hence we don't know how many planes
- to use for our device. This is similar to the issue when processing
- a PostScript file. So that I remember, the cases are
- DeviceN Profile? limit_icc Result
- 0 0 force_pdf 0 force_ps 0 (no effect)
- 0 0 force_pdf 0 force_ps 0 (no effect)
- 1 0 force_pdf 0 force_ps 1 (colorants not known)
- 1 1 force_pdf 1 force_ps 0 (colorants known)
- */
- code = dev_proc(pdev, get_profile)((gx_device *)pdev, &profile_struct);
- if (code < 0)
- return code;
-
- if (profile_struct->spotnames == NULL) {
- force_pdf = false;
- force_ps = false;
- } else {
-#if LIMIT_TO_ICC
- force_pdf = true;
- force_ps = false;
-#else
- force_pdf = false;
- force_ps = true;
-#endif
- }
- pdev_gprf->warning_given = false;
- /* With planar the depth can be more than 64. Update the color
- info to reflect the proper depth and number of planes. Also note
- that the number of spot colors can change from page to page.
- Update things so that we only output separations for the
- inks on that page. */
-
- if ((pdev_gprf->devn_params.page_spot_colors >= 0 || force_pdf) && !force_ps) {
- if (force_pdf) {
- /* Use the information that is in the ICC profle. We will be here
- anytime that we have limited ourselves to a fixed number
- of colorants specified by the DeviceN ICC profile */
- pdev->color_info.num_components =
- (pdev_gprf->devn_params.separations.num_separations
- + pdev_gprf->devn_params.num_std_colorant_names);
- if (pdev->color_info.num_components > pdev->color_info.max_components)
- pdev->color_info.num_components = pdev->color_info.max_components;
- /* Limit us only to the ICC colorants */
- pdev->color_info.max_components = pdev->color_info.num_components;
- } else {
- /* Use the information that is in the page spot color. We should
- be here if we are processing a PDF and we do not have a DeviceN
- ICC profile specified for output */
- if (!(pdev_gprf->lock_colorants)) {
- pdev->color_info.num_components =
- (pdev_gprf->devn_params.page_spot_colors
- + pdev_gprf->devn_params.num_std_colorant_names);
- if (pdev->color_info.num_components > pdev->color_info.max_components)
- pdev->color_info.num_components = pdev->color_info.max_components;
- }
- }
- } else {
- /* We do not know how many spots may occur on the page.
- For this reason we go ahead and allocate the maximum that we
- have available. Note, lack of knowledge only occurs in the case
- of PS files. With PDF we know a priori the number of spot
- colorants. */
- if (!(pdev_gprf->lock_colorants)) {
- int num_comp = pdev_gprf->max_spots + 4; /* Spots + CMYK */
- if (num_comp > GS_CLIENT_COLOR_MAX_COMPONENTS)
- num_comp = GS_CLIENT_COLOR_MAX_COMPONENTS;
- pdev->color_info.num_components = num_comp;
- pdev->color_info.max_components = num_comp;
- }
- }
- /* Push this to the max amount as a default if someone has not set it */
- if (pdev_gprf->devn_params.num_separation_order_names == 0)
- for (k = 0; k < GS_CLIENT_COLOR_MAX_COMPONENTS; k++) {
- pdev_gprf->devn_params.separation_order_map[k] = k;
- }
- pdev->color_info.depth = pdev->color_info.num_components *
- pdev_gprf->devn_params.bitspercomponent;
- pdev->color_info.separable_and_linear = GX_CINFO_SEP_LIN;
- profile_struct->supports_devn = true;
- code = gdev_prn_open_planar(pdev, true);
-
- /* Take care of the ICC transform now. There are several possible ways
- * that this could go. One is that the CMYK colors are color managed
- * but the non-standard colorants are not. That is, we have specified
- * a CMYK profile for our device but we have other spot colorants in
- * the source file. In this case, we will do managed proofing for the
- * CMYK colorants and use the equivalent CMYK values for the spot colorants.
- * DeviceN colorants will be problematic in this case and we will do the
- * the best we can with the tools given to us. The other possibility is
- * that someone has given an NColor ICC profile for the device and we can
- * actually deal with the mapping directly. This is a much cleaner case
- * but as we know NColor profiles are not too common. Also we need to
- * deal with transparent colorants (e.g. varnish) in an intelligent manner.
- * Note that we require the post rendering profile to be RGB based for
- * this particular device. */
-
- if (pdev_gprf->icclink == NULL && profile_struct->device_profile[0] != NULL
- && profile_struct->postren_profile != NULL &&
- profile_struct->postren_profile->data_cs == gsRGB) {
- rendering_params.black_point_comp = gsBLACKPTCOMP_ON;
- rendering_params.graphics_type_tag = GS_UNKNOWN_TAG;
- rendering_params.override_icc = false;
- rendering_params.preserve_black = gsBLACKPRESERVE_OFF;
- rendering_params.rendering_intent = gsRELATIVECOLORIMETRIC;
- rendering_params.cmm = gsCMM_DEFAULT;
- pdev_gprf->icclink = gsicc_alloc_link_dev(pdev_gprf->memory,
- profile_struct->device_profile[0], profile_struct->postren_profile,
- &rendering_params);
- }
- return code;
-}
-
-/* Color mapping routines */
-
-/*
-* The following procedures are used to map the standard color spaces into
-* the color components. This is not where the color management occurs. These
-* may do a reordering of the colors following some ICC base color management
-* or they may be used in the case of -dUseFastColor as that relies upon the
-* device color mapping procedures
-*/
-static void
-gray_cs_to_gprf_cm(gx_device * dev, frac gray, frac out[])
-{
- int * map = ((gprf_device *)dev)->devn_params.separation_order_map;
- gray_cs_to_devn_cm(dev, map, gray, out);
-}
-
-static void
-rgb_cs_to_gprf_cm(gx_device * dev, const gs_gstate *pgs, frac r, frac g,
- frac b, frac out[])
-{
- int * map = ((gprf_device *)dev)->devn_params.separation_order_map;
- rgb_cs_to_devn_cm(dev, map, pgs, r, g, b, out);
-}
-
-static void
-cmyk_cs_to_gprf_cm(gx_device * dev, frac c, frac m, frac y, frac k, frac out[])
-{
- const gs_devn_params *devn = &(((gprf_device *) dev)->devn_params);
- const int *map = devn->separation_order_map;
- int j;
-
- if (devn->num_separation_order_names > 0) {
- /* This is to set only those that we are using */
- for (j = 0; j < devn->num_separation_order_names; j++) {
- switch (map[j]) {
- case 0:
- out[0] = c;
- break;
- case 1:
- out[1] = m;
- break;
- case 2:
- out[2] = y;
- break;
- case 3:
- out[3] = k;
- break;
- default:
- break;
- }
- }
- }
- else {
- cmyk_cs_to_devn_cm(dev, map, c, m, y, k, out);
- }
-}
-
-static const gx_cm_color_map_procs gprf_cm_procs = {
- gray_cs_to_gprf_cm, rgb_cs_to_gprf_cm, cmyk_cs_to_gprf_cm
-};
-
-/*
- * These are the handlers for returning the list of color space
- * to color model conversion routines.
- */
-static const gx_cm_color_map_procs *
-get_gprf_color_mapping_procs(const gx_device * dev)
-{
- return &gprf_cm_procs;
-}
-
-/* Get parameters. We provide a default CRD. */
-static int
-gprf_get_params(gx_device * pdev, gs_param_list * plist)
-{
- gprf_device *xdev = (gprf_device *)pdev;
- int code;
-
- code = gx_devn_prn_get_params(pdev, plist);
- if (code < 0)
- return code;
-
- code = gx_downscaler_write_params(plist, &xdev->downscale, 0);
- if (code < 0)
- return code;
- code = param_write_int(plist, "MaxSpots", &xdev->max_spots);
- if (code < 0)
- return code;
- code = param_write_bool(plist, "LockColorants", &xdev->lock_colorants);
- return code;
-}
-
-/* Set parameters. We allow setting the number of bits per component. */
-static int
-gprf_put_params(gx_device * pdev, gs_param_list * plist)
-{
- gprf_device * const pdevn = (gprf_device *) pdev;
- int code = 0;
-
- gx_device_color_info save_info = pdevn->color_info;
-
- code = gx_downscaler_read_params(plist, &pdevn->downscale, 0);
- if (code < 0)
- return code;
-
- switch (code = param_read_bool(plist, "LockColorants", &(pdevn->lock_colorants))) {
- case 0:
- break;
- case 1:
- break;
- default:
- param_signal_error(plist, "LockColorants", code);
- return code;
- }
-
- switch (code = param_read_int(plist,
- "MaxSpots",
- &pdevn->max_spots)) {
- case 0:
- if (pdevn->max_spots >= 0 && pdevn->max_spots <= GS_CLIENT_COLOR_MAX_COMPONENTS-4)
- break;
- emprintf1(pdevn->memory, "MaxSpots must be between 0 and %d\n",
- GS_CLIENT_COLOR_MAX_COMPONENTS-4);
- code = gs_error_rangecheck;
- /* fall through */
- default:
- param_signal_error(plist, "MaxSpots", code);
- return code;
- case 1:
- break;
- }
- code = 0;
-
- /* handle the standard DeviceN related parameters */
- if (code == 0)
- code = gx_devn_prn_put_params(pdev, plist);
-
- if (code < 0) {
- pdev->color_info = save_info;
- return code;
- }
- return code;
-}
-
-/*
- * This routine will check to see if the color component name match those
- * that are available amoung the current device's color components.
- *
- * Parameters:
- * dev - pointer to device data structure.
- * pname - pointer to name (zero termination not required)
- * nlength - length of the name
- *
- * This routine returns a positive value (0 to n) which is the device colorant
- * number if the name is found. It returns a negative value if not found.
- */
-static int
-gprf_get_color_comp_index(gx_device * dev, const char * pname,
- int name_size, int component_type)
-{
- int index;
- gprf_device *pdev = (gprf_device *)dev;
-
- if (strncmp(pname, "None", name_size) == 0) return -1;
- index = gx_devn_prn_get_color_comp_index(dev, pname, name_size,
- component_type);
- /* This is a one shot deal. That is it will simply post a notice once that
- some colorants will be converted due to a limit being reached. It will
- not list names of colorants since then I would need to keep track of
- which ones I have already mentioned. Also, if someone is fooling with
- num_order, then this warning is not given since they should know what
- is going on already */
- if (index < 0 && component_type == SEPARATION_NAME &&
- pdev->warning_given == false &&
- pdev->devn_params.num_separation_order_names == 0) {
- dmlprintf(dev->memory, "**** Max spot colorants reached.\n");
- dmlprintf(dev->memory, "**** Some colorants will be converted to equivalent CMYK values.\n");
- dmlprintf(dev->memory, "**** If this is a Postscript file, try using the -dMaxSpots= option.\n");
- pdev->warning_given = true;
- }
- return index;
-}
-
-/* ------ Private definitions ------ */
-
-typedef struct {
- gp_file *f;
-
- int width;
- int height;
- int n_extra_channels;
- int num_channels; /* base_bytes_pp + any spot colors that are imaged */
- /* Map output channel number to original separation number. */
- int chnl_to_orig_sep[GX_DEVICE_COLOR_MAX_COMPONENTS];
- /* Map output channel number to gx_color_index position. */
- int chnl_to_position[GX_DEVICE_COLOR_MAX_COMPONENTS];
-
- gsicc_link_t *icclink;
-
- unsigned long table_offset;
- gx_device_printer *dev;
- int deflate_bound;
- byte *deflate_block;
-} gprf_write_ctx;
-
-static int
-gprf_setup(gprf_write_ctx *xc, gx_device_printer *pdev, gp_file *file, int w, int h,
- gsicc_link_t *icclink)
-{
- int i;
- int spot_count;
- z_stream zstm;
- gx_devn_prn_device *dev = (gx_devn_prn_device *)pdev;
-
- xc->f = file;
- xc->dev = pdev;
- xc->icclink = icclink;
-
-#define NUM_CMYK_COMPONENTS 4
- for (i = 0; i < GX_DEVICE_COLOR_MAX_COMPONENTS; i++) {
- if (dev->devn_params.std_colorant_names[i] == NULL)
- break;
- }
- xc->num_channels = i;
- if (dev->devn_params.num_separation_order_names == 0) {
- xc->n_extra_channels = dev->devn_params.separations.num_separations;
- } else {
- /* Have to figure out how many in the order list were not std
- colorants */
- spot_count = 0;
- for (i = 0; i < dev->devn_params.num_separation_order_names; i++) {
- if (dev->devn_params.separation_order_map[i] >= NUM_CMYK_COMPONENTS) {
- spot_count++;
- }
- }
- xc->n_extra_channels = spot_count;
- }
- xc->width = w;
- xc->height = h;
- /*
- * Determine the order of the output components. This is based upon
- * the SeparationOrder parameter. This parameter can be used to select
- * which planes are actually imaged. For the process color model channels
- * we image the channels which are requested. Non requested process color
- * model channels are simply filled with white. For spot colors we only
- * image the requested channels.
- */
- for (i = 0; i < xc->num_channels + xc->n_extra_channels; i++) {
- xc->chnl_to_position[i] = i;
- xc->chnl_to_orig_sep[i] = i;
- }
- /* If we had a specify order name, then we may need to adjust things */
- if (dev->devn_params.num_separation_order_names > 0) {
- for (i = 0; i < dev->devn_params.num_separation_order_names; i++) {
- int sep_order_num = dev->devn_params.separation_order_map[i];
- if (sep_order_num >= NUM_CMYK_COMPONENTS) {
- xc->chnl_to_position[xc->num_channels] = sep_order_num;
- xc->chnl_to_orig_sep[xc->num_channels++] = sep_order_num;
- }
- }
- } else {
- xc->num_channels += dev->devn_params.separations.num_separations;
- }
-
- zstm.zalloc = NULL;
- zstm.zfree = NULL;
- zstm.opaque = NULL;
- deflateInit(&zstm, Z_BEST_SPEED);
- xc->deflate_bound = deflateBound(&zstm, 256*256);
- deflateEnd(&zstm);
- xc->deflate_block = gs_alloc_bytes(dev->memory, xc->deflate_bound, "gprf_setup");
-
- return (xc->deflate_block != NULL);
-}
-
-/* All multi-byte quantities are stored LSB-first! */
-#if ARCH_IS_BIG_ENDIAN
-# define assign_u16(a,v) a = ((v) >> 8) + ((v) << 8)
-# define assign_u32(a,v) a = (((v) >> 24) & 0xff) + (((v) >> 8) & 0xff00) + (((v) & 0xff00) << 8) + (((v) & 0xff) << 24)
-#else
-# define assign_u16(a,v) a = (v)
-# define assign_u32(a,v) a = (v)
-#endif
-
-static int
-gprf_write(gprf_write_ctx *xc, const byte *buf, int size) {
- int code;
-
- code = gp_fwrite(buf, 1, size, xc->f);
- if (code < size)
- return_error(gs_error_ioerror);
- return 0;
-}
-
-static int
-gprf_write_8(gprf_write_ctx *xc, byte v)
-{
- return gprf_write(xc, (byte *)&v, 1);
-}
-
-static int
-gprf_write_16(gprf_write_ctx *xc, bits16 v)
-{
- bits16 buf;
-
- assign_u16(buf, v);
- return gprf_write(xc, (byte *)&buf, 2);
-}
-
-static int
-gprf_write_32(gprf_write_ctx *xc, bits32 v)
-{
- bits32 buf;
-
- assign_u32(buf, v);
- return gprf_write(xc, (byte *)&buf, 4);
-}
-
-static int
-gprf_write_header(gprf_write_ctx *xc)
-{
- int i, code;
- int index;
- unsigned int offset;
- gx_devn_prn_device *dev = (gx_devn_prn_device *)xc->dev;
-
- code = (unsigned int)gp_ftell(xc->f);
- if (code < 0)
- return_error(gs_error_ioerror);
-
- offset = (unsigned int)code;
-
- code = gprf_write(xc, (const byte *)"GSPF", 4); /* Signature */
- if (code < 0)
- return code;
- code = gprf_write_16(xc, 1); /* Version - Always equal to 1*/
- if (code < 0)
- return code;
- code = gprf_write_16(xc, 0); /* Compression method - 0 (deflated deltas) */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, xc->width);
- if (code < 0)
- return code;
- code = gprf_write_32(xc, xc->height);
- if (code < 0)
- return code;
- code = gprf_write_16(xc, 8); /* Bits per channel */
- if (code < 0)
- return code;
- code = gprf_write_16(xc, xc->num_channels); /* Number of separations */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* ICC offset */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* ICC offset */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Table offset */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Table offset */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0); /* Reserved */
- if (code < 0)
- return code;
-
- /* Color Mode Data */
- for (i = 0; i < xc->num_channels; i++)
- {
- int j = xc->chnl_to_orig_sep[i];
- const char *name;
- int namelen;
- int c, m, y, k;
- byte cmyk[4], rgba[4];
-
- if (j < NUM_CMYK_COMPONENTS) {
- name = dev->devn_params.std_colorant_names[j];
- cmyk[0] = 0;
- cmyk[1] = 0;
- cmyk[2] = 0;
- cmyk[3] = 0;
- cmyk[j] = 255;
- if (name == NULL)
- namelen = 0;
- else
- namelen = strlen(name);
- } else {
- index = j - NUM_CMYK_COMPONENTS;
- name = (const char *)dev->devn_params.separations.names[index].data;
- namelen = dev->devn_params.separations.names[index].size;
- c = (2 * 255 * dev->equiv_cmyk_colors.color[index].c + frac_1) / (2 * frac_1);
- cmyk[0] = (c < 0 ? 0 : (c > 255 ? 255 : c));
- m = (2 * 255 * dev->equiv_cmyk_colors.color[index].m + frac_1) / (2 * frac_1);
- cmyk[1] = (m < 0 ? 0 : (m > 255 ? 255 : m));
- y = (2 * 255 * dev->equiv_cmyk_colors.color[index].y + frac_1) / (2 * frac_1);
- cmyk[2] = (y < 0 ? 0 : (y > 255 ? 255 : y));
- k = (2 * 255 * dev->equiv_cmyk_colors.color[index].k + frac_1) / (2 * frac_1);
- cmyk[3] = (k < 0 ? 0 : (k > 255 ? 255 : k));
- }
-
- /* Convert color to RGBA. To get the A value, we are going to need to
- deal with the mixing hints information in the PDF content. A ToDo
- project. At this point, everything has an alpha of 1.0 */
- rgba[3] = 255;
- if (xc->icclink != NULL) {
- xc->icclink->procs.map_color((gx_device *)dev, xc->icclink,
- &(cmyk[0]), &(rgba[0]), 1);
- } else {
- /* Something was wrong with the icclink. Use the canned routines. */
- frac rgb_frac[3], cmyk_frac[4];
- int index;
- int temp;
-
- if (j >= NUM_CMYK_COMPONENTS) {
- /* Non std. colorant */
- color_cmyk_to_rgb(dev->equiv_cmyk_colors.color[j].c,
- dev->equiv_cmyk_colors.color[j].m,
- dev->equiv_cmyk_colors.color[j].y,
- dev->equiv_cmyk_colors.color[j].k, NULL, rgb_frac, dev->memory);
- } else {
- /* Std. colorant */
- cmyk_frac[0] = frac_0;
- cmyk_frac[1] = frac_0;
- cmyk_frac[2] = frac_0;
- cmyk_frac[3] = frac_0;
- cmyk_frac[j] = frac_1;
- color_cmyk_to_rgb(cmyk_frac[0], cmyk_frac[1], cmyk_frac[2],
- cmyk_frac[3], NULL, rgb_frac, dev->memory);
- }
- /* Out of frac and to byte */
- for (index = 0; index < 3; index++) {
- temp = (2 * 255 * rgb_frac[index] + frac_1) / (2 * frac_1);
- rgba[index] = (temp < 0 ? 0 : (temp > 255 ? 255 : temp));
- }
- }
-
- code = gprf_write_8(xc, rgba[0]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, rgba[1]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, rgba[2]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, rgba[3]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, cmyk[0]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, cmyk[1]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, cmyk[2]);
- if (code < 0)
- return code;
- code = gprf_write_8(xc, cmyk[3]);
- if (code < 0)
- return code;
-
- if (namelen > 0) {
- code = gprf_write(xc, (const byte *)name, namelen);
- if (code < 0)
- return code;
- }
- code = gprf_write_8(xc, 0);
- if (code < 0)
- return code;
- }
-
- /* FIXME: ICC Profile would go here */
- /* Since MuPDF can't really use the profile and it's optional, at this point
- * we will not spend time writing out the profile. */
- /* Update header pointer to table */
- code = (unsigned long)gp_ftell(xc->f);
- if (code < 0)
- return_error(gs_error_ioerror);
- xc->table_offset = (unsigned int) code;
- if (gp_fseek(xc->f, offset+28, SEEK_SET) != 0)
- return_error (gs_error_ioerror);
- code = gprf_write_32(xc, xc->table_offset);
- if (code < 0)
- return code;
- if (gp_fseek(xc->f, xc->table_offset, SEEK_SET) != 0)
- return_error(gs_error_ioerror);
- return 0;
-}
-
-/*
- * Close device and clean up ICC structures.
- */
-static int
-gprf_prn_close(gx_device *dev)
-{
- gprf_device * const xdev = (gprf_device *) dev;
-
- if (xdev->icclink != NULL) {
- xdev->icclink->procs.free_link(xdev->icclink);
- gsicc_free_link_dev(xdev->memory, xdev->icclink);
- xdev->icclink = NULL;
- }
- return gdev_prn_close(dev);
-}
-
-static void *my_zalloc(void *opaque, unsigned int items, unsigned int size)
-{
- gs_memory_t *mem = (gs_memory_t *)opaque;
- return gs_alloc_bytes(mem, items * size, "gprf_zalloc");
-}
-
-static void my_zfree(void *opaque, void *addr)
-{
- gs_memory_t *mem = (gs_memory_t *)opaque;
- gs_free_object(mem, addr, "gprf_zalloc");
-}
-
-static int
-updateTable(gprf_write_ctx *xc)
-{
- int offset, code;
-
- /* Read the current position of the file */
- offset = gp_ftell(xc->f);
- if (offset < 0)
- return_error(gs_error_ioerror);
-
- /* Put that value into the table */
- if (gp_fseek(xc->f, xc->table_offset, SEEK_SET) != 0)
- return_error(gs_error_ioerror);
-
- code = gprf_write_32(xc, offset);
- if (code < 0)
- return code;
-
- code = gprf_write_32(xc, 0);
- if (code < 0)
- return code;
-
- xc->table_offset += 8;
-
- /* Seek back to where we were before */
- if (gp_fseek(xc->f, offset, SEEK_SET) != 0)
- return_error(gs_error_ioerror);
- return 0;
-}
-
-static int
-compressAndWrite(gprf_write_ctx *xc, byte *data, int tile_w, int tile_h, int raster)
-{
- int x, y, code;
- int delta = 0;
- byte *row_d;
- int orr = 0;
- z_stream zstm;
-
- code = updateTable(xc);
- if (code < 0)
- return code;
-
- /* Delta the data (and check for non-zero) */
- row_d = data;
- for (y = 0; y < tile_h; y++)
- {
- byte *d = row_d;
- for (x = 0; x < tile_w; x++)
- {
- int del = *d;
- orr |= *d;
- *d++ -= delta;
- delta = del;
- }
- row_d += raster;
- }
-
- /* If the separation is blank, no need to write anything more */
- if (orr == 0)
- return 0;
-
- /* Now we need to compress the data and write it. */
- zstm.zalloc = my_zalloc;
- zstm.zfree = my_zfree;
- zstm.opaque = xc->dev->memory;
- deflateInit(&zstm, Z_BEST_SPEED);
- zstm.avail_out = xc->deflate_bound;
- zstm.next_out = xc->deflate_block;
-
- row_d = data;
- for (y = 0; y < tile_h; y++)
- {
- zstm.avail_in = tile_w;
- zstm.next_in = row_d;
- deflate(&zstm, Z_NO_FLUSH);
- row_d += raster;
- }
- deflate(&zstm, Z_FINISH);
- deflateEnd(&zstm);
-
- code = gprf_write(xc, xc->deflate_block, xc->deflate_bound - zstm.avail_out);
- if (code < 0)
- return_error(gs_error_ioerror);
- return 0;
-}
-
-/* If the profile is NULL or if the profile does not support the spot
- colors then we have to calculate the equivalent CMYK values and then color
- manage. */
-static void
-build_cmyk_planar_raster(gprf_write_ctx *xc, byte *planes[], byte *cmyk_in,
- int raster, int ypos, cmyk_composite_map * cmyk_map)
-{
- int pixel, comp_num;
- uint temp, cyan, magenta, yellow, black;
- cmyk_composite_map * cmyk_map_entry;
- int num_comp = xc->num_channels;
- byte *cmyk = cmyk_in;
-
- for (pixel = 0; pixel < raster; pixel++) {
- cmyk_map_entry = cmyk_map;
- /* Get the first one */
- temp = *(planes[xc->chnl_to_position[0]] + ypos * raster + pixel);
- cyan = cmyk_map_entry->c * temp;
- magenta = cmyk_map_entry->m * temp;
- yellow = cmyk_map_entry->y * temp;
- black = cmyk_map_entry->k * temp;
- cmyk_map_entry++;
- /* Add in the contributions from the rest */
- for (comp_num = 1; comp_num < num_comp; comp_num++) {
- temp = *(planes[xc->chnl_to_position[comp_num]] + ypos * raster + pixel);
- cyan += cmyk_map_entry->c * temp;
- magenta += cmyk_map_entry->m * temp;
- yellow += cmyk_map_entry->y * temp;
- black += cmyk_map_entry->k * temp;
- cmyk_map_entry++;
- }
- cyan /= frac_1;
- magenta /= frac_1;
- yellow /= frac_1;
- black /= frac_1;
- if (cyan > MAX_COLOR_VALUE)
- cyan = MAX_COLOR_VALUE;
- if (magenta > MAX_COLOR_VALUE)
- magenta = MAX_COLOR_VALUE;
- if (yellow > MAX_COLOR_VALUE)
- yellow = MAX_COLOR_VALUE;
- if (black > MAX_COLOR_VALUE)
- black = MAX_COLOR_VALUE;
- /* Now store the CMYK value in the planar buffer */
- cmyk[0] = cyan;
- cmyk[raster] = magenta;
- cmyk[2 * raster] = yellow;
- cmyk[3 * raster] = black;
- cmyk++;
- }
-}
-
-/* Create RGB from CMYK the horribly slow way */
-static void
-get_rgb_planar_line(gprf_write_ctx *xc, byte *c, byte *m, byte *y, byte *k,
- byte *red_in, byte *green_in, byte *blue_in, int width)
-{
- int x_pos;
- int c_val, m_val, y_val, k_val;
- gprf_device *gprf_dev = (gprf_device *)xc->dev;
- frac rgb_frac[3];
- int temp;
- byte *rp = red_in;
- byte *gp = green_in;
- byte *bp = blue_in;
-
- for (x_pos = 0; x_pos < width; x_pos++) {
-
- c_val = (int)((long)(*c++)* frac_1 / 255.0);
- c_val = (c_val < 0 ? 0 : (c_val > frac_1 ? frac_1 : c_val));
-
- m_val = (int)((long)(*m++)* frac_1 / 255.0);
- m_val = (m_val < 0 ? 0 : (m_val > frac_1 ? frac_1 : m_val));
-
- y_val = (int)((long)(*y++)* frac_1 / 255.0);
- y_val = (y_val < 0 ? 0 : (y_val > frac_1 ? frac_1 : y_val));
-
- k_val = (int)((long)(*k++)* frac_1 / 255.0);
- k_val = (k_val < 0 ? 0 : (k_val > frac_1 ? frac_1 : k_val));
-
- color_cmyk_to_rgb(c_val, m_val, y_val, k_val, NULL, rgb_frac,
- gprf_dev->memory);
-
- temp = (2 * 255 * rgb_frac[0] + frac_1) / (2 * frac_1);
- temp = (temp < 0 ? 0 : (temp > 255 ? 255 : temp));
- *rp++ = temp;
-
- temp = (2 * 255 * rgb_frac[1] + frac_1) / (2 * frac_1);
- temp = (temp < 0 ? 0 : (temp > 255 ? 255 : temp));
- *gp++ = temp;
-
- temp = (2 * 255 * rgb_frac[2] + frac_1) / (2 * frac_1);
- temp = (temp < 0 ? 0 : (temp > 255 ? 255 : temp));
- *bp++ = temp;
- }
-}
-
-/*
- * Output the image data for the GPRF device.
- */
-static int
-gprf_write_image_data(gprf_write_ctx *xc)
-{
- gx_device_printer *pdev = xc->dev;
- int raster_row = bitmap_raster(pdev->width * 8);
- int raster_plane;
- byte *planes[GS_CLIENT_COLOR_MAX_COMPONENTS];
- byte *rgb[3];
- byte *cmyk = NULL;
- int code = 0;
- int i, y;
- int chan_idx;
- int tiled_w, tiled_h, tile_x, tile_y;
- int num_comp = xc->num_channels;
- gs_get_bits_params_t params;
- gx_downscaler_t ds = { NULL };
- gprf_device *gprf_dev = (gprf_device *)pdev;
- bool slowcolor = false;
- bool equiv_needed = false;
- cmyk_composite_map cmyk_map[GX_DEVICE_COLOR_MAX_COMPONENTS];
- gsicc_bufferdesc_t input_buffer_desc;
- gsicc_bufferdesc_t output_buffer_desc;
-
- /* Get set up for color management */
- /* We are going to deal with four cases for creating the RGB content.
- * Case 1: We have a CMYK ICC profile and only CMYK colors.
- * Case 2: We have a DeviceN ICC profile, which defines all our colorants
- * Case 3: We have a CMYK ICC profile and non-standard spot colorants
- * Case 4: There was an issue creating the ICC link
- * For Case 1 and Case 2, we will do a direct ICC mapping from the
- * planar components to the RGB proofing color. This is the best work
- * flow for accurate color proofing.
- * For Case 3, we will need to compute the equivalent CMYK color similar
- * to what the tiffsep device does and then apply the ICC mapping
- * For Case 4, we need to compute the equivalent CMYK color mapping AND
- * do the slow conversion to RGB */
-
- if (gprf_dev->icclink == NULL) {
- /* Case 4 */
- slowcolor = true;
- equiv_needed = true;
- } else {
- if (num_comp > 4 &&
- gprf_dev->icc_struct->device_profile[0]->data_cs == gsCMYK) {
- /* Case 3 */
- equiv_needed = true;
- }
- }
-
- /* Return planar data */
- params.options = (GB_RETURN_POINTER | GB_RETURN_COPY |
- GB_ALIGN_STANDARD | GB_OFFSET_0 | GB_RASTER_STANDARD |
- GB_PACKING_PLANAR | GB_COLORS_NATIVE | GB_ALPHA_NONE);
- params.x_offset = 0;
- params.raster = raster_row;
-
- /* For every plane, we need a buffer large enough to let us pull out
- * 256 raster lines from that plane. Make contiguous so that we can apply
- * color management */
- raster_plane = raster_row * 256;
- planes[0] = gs_alloc_bytes(pdev->memory, raster_plane * num_comp, "gprf_write_image_data");
- if (planes[0] == NULL)
- return_error(gs_error_VMerror);
-
- for (chan_idx = 1; chan_idx < num_comp; chan_idx++)
- {
- planes[chan_idx] = planes[0] + raster_plane * chan_idx;
- params.data[chan_idx] = planes[chan_idx];
- }
-
- /* We also need space for our RGB planes. */
- rgb[0] = gs_alloc_bytes(pdev->memory, raster_plane * 3,
- "gprf_write_image_data");
- if (rgb[0] == NULL)
- return_error(gs_error_VMerror);
- rgb[1] = rgb[0] + raster_plane;
- rgb[2] = rgb[0] + raster_plane * 2;
-
- /* Finally, we may need a temporary CMYK composite if we have no profile
- * to handle the spot colorants. Case 3 and Case 4. Also build the mapping
- * at this point. Note that this does not need to be the whole tile, just
- * a row across as it can be reused */
- if (equiv_needed) {
- build_cmyk_map((gx_device*)gprf_dev, num_comp, &gprf_dev->equiv_cmyk_colors,
- cmyk_map);
- cmyk = gs_alloc_bytes(pdev->memory, raster_row * 4,
- "gprf_write_image_data");
- if (cmyk == NULL)
- return_error(gs_error_VMerror);
- }
-
- code = gx_downscaler_init_planar(&ds, (gx_device *)pdev, &params, num_comp,
- gprf_dev->downscale.downscale_factor, 0, 8, 8);
- if (code < 0)
- goto cleanup;
-
- tiled_w = (xc->width + 255) / 256;
- tiled_h = (xc->height + 255) / 256;
-
- /* Reserve space in the table for all the offsets */
- for (i = 8 * tiled_w * tiled_h * (3 + xc->num_channels); i >= 0; i -= 8) {
- code = gprf_write_32(xc, 0);
- if (code < 0)
- return code;
- code = gprf_write_32(xc, 0);
- if (code < 0)
- return code;
- }
-
- /* Print the output planes */
- /* For each row of tiles... */
- for (tile_y = 0; tile_y < tiled_h; tile_y++) {
- /* Pull out the data for the tiles in that row. */
- int tile_h = (xc->height - tile_y * 256);
-
- if (tile_h > 256)
- tile_h = 256;
- for (y = 0; y < tile_h; y++) {
- for (chan_idx = 0; chan_idx < num_comp; chan_idx++) {
- params.data[chan_idx] = planes[chan_idx] + y * raster_row;
- }
- code = gx_downscaler_get_bits_rectangle(&ds, &params, y + tile_y * 256);
- if (code < 0)
- goto cleanup;
- for (chan_idx = 0; chan_idx < num_comp; chan_idx++) {
- if (params.data[chan_idx] != planes[chan_idx] + y * raster_row)
- memcpy(planes[chan_idx] + y * raster_row, params.data[chan_idx], raster_row);
- }
- /* Take care of any color management */
- if (equiv_needed) {
- build_cmyk_planar_raster(xc, planes, cmyk, raster_row, y, cmyk_map);
- /* At this point we have equiv. CMYK data */
- if (slowcolor) {
- /* Slowest case, no profile and spots present */
- get_rgb_planar_line(xc, cmyk, cmyk + raster_row,
- cmyk + 2 * raster_row, cmyk + 3 * raster_row,
- rgb[0] + y * raster_row, rgb[1] + y * raster_row,
- rgb[2] + y * raster_row, pdev->width);
- } else {
- /* ICC approach. Likely a case with spots but CMYK profile */
- /* set up for planar buffer transform */
- gsicc_init_buffer(&input_buffer_desc, 4, 1, false, false, true,
- raster_row, raster_row, 1, pdev->width);
- gsicc_init_buffer(&output_buffer_desc, 3, 1, false, false, true,
- raster_plane, raster_row, 1, pdev->width);
- xc->icclink->procs.map_buffer((gx_device *)gprf_dev,
- xc->icclink, &input_buffer_desc, &output_buffer_desc,
- cmyk, rgb[0] + y * raster_row);
- }
- } else {
- if (slowcolor) {
- /* CMYK input but profile likely missing here */
- get_rgb_planar_line(xc, planes[xc->chnl_to_position[0]] + y * raster_row,
- planes[xc->chnl_to_position[xc->chnl_to_position[1]]] + y * raster_row,
- planes[xc->chnl_to_position[xc->chnl_to_position[2]]] + y * raster_row,
- planes[xc->chnl_to_position[xc->chnl_to_position[3]]] + y * raster_row,
- rgb[0] + y * raster_row, rgb[1] + y * raster_row,
- rgb[2] + y * raster_row, pdev->width);
- } else {
- /* Fastest case all ICC. Note this could have an issue
- if someone reorders the cmyk values. */
- gsicc_init_buffer(&input_buffer_desc, num_comp, 1, false,
- false, true, raster_plane, raster_row, 1, pdev->width);
- gsicc_init_buffer(&output_buffer_desc, 3, 1, false, false, true,
- raster_plane, raster_row, 1, pdev->width);
- xc->icclink->procs.map_buffer((gx_device *)gprf_dev,
- xc->icclink, &input_buffer_desc, &output_buffer_desc,
- planes[0] + y * raster_row, rgb[0] + y * raster_row);
- }
- }
- }
-
- /* Now, for each tile... */
- for (tile_x = 0; tile_x < tiled_w; tile_x++) {
- int tile_w = (xc->width - tile_x * 256);
-
- if (tile_w > 256)
- tile_w = 256;
-
- /* Now we have to compress and write each separation in turn */
- code = compressAndWrite(xc, rgb[0] + tile_x * 256, tile_w, tile_h, raster_row);
- if (code >= 0)
- code = compressAndWrite(xc, rgb[1] + tile_x * 256, tile_w, tile_h, raster_row);
- if (code >= 0)
- code = compressAndWrite(xc, rgb[2] + tile_x * 256, tile_w, tile_h, raster_row);
- for (chan_idx = 0; chan_idx < num_comp; chan_idx++) {
- int j = xc->chnl_to_position[chan_idx];
- if (code >= 0)
- code = compressAndWrite(xc, planes[j] + tile_x * 256, tile_w, tile_h, raster_row);
- }
- }
- }
-
- /* And put the last entry in the table */
- updateTable(xc);
-
-cleanup:
- gx_downscaler_fin(&ds);
- gs_free_object(pdev->memory, planes[0], "gprf_write_image_data");
- gs_free_object(pdev->memory, rgb[0], "gprf_write_image_data");
- gs_free_object(pdev->memory, xc->deflate_block, "gprf_write_image_data");
- if (equiv_needed) {
- gs_free_object(pdev->memory, cmyk, "gprf_write_image_data");
- }
- return code;
-}
-
-static int
-gprf_print_page(gx_device_printer *pdev, gp_file *file)
-{
- int code;
-
- gprf_write_ctx xc;
- gprf_device *gprf_dev = (gprf_device *)pdev;
-
- gprf_setup(&xc, pdev, file,
- gx_downscaler_scale(pdev->width, gprf_dev->downscale.downscale_factor),
- gx_downscaler_scale(pdev->height, gprf_dev->downscale.downscale_factor),
- gprf_dev->icclink);
- code = gprf_write_header(&xc);
- if (code < 0)
- return code;
- code = gprf_write_image_data(&xc);
- if (code < 0)
- return code;
- return 0;
-}
diff --git a/devices/gdevhl7x.c b/devices/gdevhl7x.c
index 786449d9..1a3e5949 100644
--- a/devices/gdevhl7x.c
+++ b/devices/gdevhl7x.c
@@ -108,7 +108,7 @@ typedef struct {
typedef struct {
short previousSize;
- Byte previousData[1500]; /* Size bigger than any possible line */
+ Byte* previousData;
short nbBlankLines;
short nbLinesSent;
short pageWidth;
@@ -139,7 +139,9 @@ static int dumpPage(gx_device_printer * pSource,
ByteList * pCommandList,
Summary * pSummary
);
-static void initSummary(Summary * s,short pw, short ph, short resolution);
+static int initSummary(gx_device_printer* pdev, Summary * s,short pw, short ph, short resolution);
+
+static void freeSummary(gx_device_printer* pdev, Summary * s);
static void resetPreviousData(Summary * s);
@@ -319,6 +321,7 @@ static int
hl7x0_print_page(gx_device_printer *pdev, gp_file *printStream, int ptype,
int dots_per_inch, ByteList *initCommand)
{
+ int code;
/* UTILE*/
/* Command for a formFeed (we can't use strings because of the zeroes...)*/
Byte FormFeed[] = {'@','G',0x00,0x00,0x01,0xFF,'@','F'};
@@ -338,12 +341,17 @@ hl7x0_print_page(gx_device_printer *pdev, gp_file *printStream, int ptype,
/* bool dupset = pdev->Duplex_set >= 0; */
Summary pageSummary;
ByteList commandsBuffer;
- initSummary(&pageSummary,
+ if ( storage == 0 ) /* can't allocate working area */
+ return_error(gs_error_VMerror);
+ code = initSummary(pdev,
+ &pageSummary,
line_size,
num_rows,
x_dpi);
- if ( storage == 0 ) /* can't allocate working area */
- return_error(gs_error_VMerror);
+ if (code < 0) {
+ gs_free(pdev->memory, (char *)storage, storage_size_words, 1, "hl7X0_print_page");
+ return code;
+ }
initByteList(&commandsBuffer, storage, sizeOfBuffer,0 );
/* PLUS A MOI */
if ( pdev->PageCount == 0 )
@@ -358,9 +366,11 @@ hl7x0_print_page(gx_device_printer *pdev, gp_file *printStream, int ptype,
storage + sizeOfBuffer, /* The line buffer is after the dump buffer */
&commandsBuffer,
&pageSummary);
+ if (result < 0)
+ goto xit;
dumpToPrinter(&commandsBuffer,printStream);
- } while (result == DumpContinue);
+ } while (result == DumpContinue); /* NB: at end of page, result will be DumpFinished == 0 */
/* end raster graphics and eject page */
initByteList(&formFeedCommand,
@@ -369,10 +379,12 @@ hl7x0_print_page(gx_device_printer *pdev, gp_file *printStream, int ptype,
sizeof(FormFeed)); /* First free byte */
dumpToPrinter(&formFeedCommand, printStream);
+xit:
/* free temporary storage */
+ freeSummary(pdev, &pageSummary);
gs_free(pdev->memory, (char *)storage, storage_size_words, 1, "hl7X0_print_page");
- return 0; /* If we reach this line, it means there was no error */
+ return result; /* If we reach this line, it means there was no error */
}
/*
@@ -413,14 +425,23 @@ return (((LETTER_WIDTH * resolution/600 - pixWidth) + pixOffset * 2) + 7) / 8;
/*
* First values in a Summary
*/
-static void initSummary(Summary * s,short pw, short ph, short resolution){
+static int initSummary(gx_device_printer* pdev, Summary * s,short pw, short ph, short resolution){
s->previousSize = -1 ;
+ s->previousData = gs_malloc(pdev->memory, pw, 1, "initSummary");
s->nbBlankLines = 1;
s->nbLinesSent = 0;
s->pageWidth = pw; /* In Bytes */
s->pageHeight = ph;
s->horizontalOffset = horizontalOffset( pw * 8,LEFT_MARGIN, resolution) ;
s->resolution = resolution;
+ if (!s->previousData) {
+ return_error(gs_error_VMerror);
+ }
+ return 0;
+}
+
+static void freeSummary(gx_device_printer* pdev, Summary * s) {
+ gs_free(pdev->memory, s->previousData, s->pageWidth, 1, "freeSummary");
}
/*
@@ -445,6 +466,8 @@ static int dumpPage(gx_device_printer * pSource,
short lineNB;
short usefulLength;
short tmpLength;
+ int code = 0;
+
/* Initializations */
/* Make room for size of commands buffer */
pSaveCommandStart = currentPosition(pCommandList);
@@ -454,10 +477,12 @@ static int dumpPage(gx_device_printer * pSource,
for (lineNB = pSummary->nbLinesSent /*ERROR? + nbBlankLines */ ;
lineNB < pSummary->pageHeight ; lineNB ++ ) {
/* Fetch the line and put it into the buffer */
- gdev_prn_copy_scan_lines(pSource,
+ code = gdev_prn_copy_scan_lines(pSource,
lineNB,
pLineTmp,
pSummary->pageWidth);
+ if (code < 0)
+ return code;
usefulLength = stripTrailingBlanks(pLineTmp,pSummary->pageWidth);
if (usefulLength != 0) {
diff --git a/devices/gdevicov.c b/devices/gdevicov.c
index 4f4d7f5c..517ca4ff 100644
--- a/devices/gdevicov.c
+++ b/devices/gdevicov.c
@@ -37,18 +37,20 @@
static int
cov_write_page(gx_device_printer *pdev, gp_file *file)
{
- int code = 0;
+ int code = 0, ecode = 0;
int raster = gdev_prn_raster(pdev);
int height = pdev->height;
byte *line = gs_alloc_bytes(pdev->memory, raster, "ink coverage plugin buffer");
int y;
uint64_t c_pix = 0, m_pix = 0, y_pix = 0, k_pix = 0, total_pix = 0;
+ if (line == NULL)
+ return gs_error_VMerror;
for (y = 0; y < height; y++) {
byte *row, *end;
- code = gdev_prn_get_bits(pdev, y, line, &row);
- if (code < 0)
+ ecode = gdev_prn_get_bits(pdev, y, line, &row);
+ if (ecode < 0)
break;
end = row + raster;
@@ -90,14 +92,14 @@ cov_write_page(gx_device_printer *pdev, gp_file *file)
}
}
- return 0;
+ return (code > 0) ? ecode : 0;
}
/* cov_write_page2 gave ink coverage values not ratecoverage */
static int cov_write_page_ink(gx_device_printer *pdev, gp_file *file)
{
- int code = 0;
+ int code = 0, ecode = 0;
int raster = gdev_prn_raster(pdev);
int height = pdev->height;
double dc_pix=0;
@@ -109,11 +111,13 @@ static int cov_write_page_ink(gx_device_printer *pdev, gp_file *file)
int y;
uint64_t total_pix = 0;
+ if (line == NULL)
+ return gs_error_VMerror;
for (y = 0; y < height; y++) {
byte *row, *end;
- code = gdev_prn_get_bits(pdev, y, line, &row);
- if (code < 0)
+ ecode = gdev_prn_get_bits(pdev, y, line, &row);
+ if (ecode < 0)
break;
end = row + raster;
@@ -159,7 +163,7 @@ static int cov_write_page_ink(gx_device_printer *pdev, gp_file *file)
}
}
- return 0;
+ return (code > 0) ? ecode : 0;
}
static const gx_device_procs cov_procs =
diff --git a/devices/gdevifno.c b/devices/gdevifno.c
index 31aa5146..22d5837f 100644
--- a/devices/gdevifno.c
+++ b/devices/gdevifno.c
@@ -281,6 +281,7 @@ inferno_print_page(gx_device_printer *pdev, gp_file *f)
int gsbpl;
ulong u;
ushort us;
+ int code = 0;
inferno_device *bdev = (inferno_device *) pdev;
Rectangle r;
@@ -319,7 +320,10 @@ inferno_print_page(gx_device_printer *pdev, gp_file *f)
* to save all the ldepth lookups.
*/
for(y=0; y<pdev->height; y++) {
- gdev_prn_get_bits(pdev, y, buf, &p);
+
+ code = gdev_prn_get_bits(pdev, y, buf, &p);
+ if (code < 0)
+ goto xit;
for(x=0; x<pdev->width; x++) {
us = (p[2*x]<<8) | p[2*x+1];
@@ -372,12 +376,13 @@ inferno_print_page(gx_device_printer *pdev, gp_file *f)
return_error(gs_error_Fatal);
}
}
- gs_free_object(bdev->memory, buf, "inferno line buffer");
if(writeimageblock(w, nil, 0, bdev->memory) == ERROR) {
return_error(gs_error_Fatal);
}
+xit:
+ gs_free_object(bdev->memory, buf, "inferno line buffer");
- return 0;
+ return code;
}
/*
diff --git a/devices/gdevimgn.c b/devices/gdevimgn.c
index 7340c8d4..7c707bda 100644
--- a/devices/gdevimgn.c
+++ b/devices/gdevimgn.c
@@ -379,6 +379,7 @@ imagen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* page totals */
int totalBlankSwatches;
int totalGreySwatches;
+ int code = 0;
/* ----------------------------------------- */
/* Start of routine */
@@ -406,8 +407,8 @@ imagen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
swatchMap = (byte *)gs_malloc(pdev->memory, BIGSIZE,swatchCount / BIGSIZE + 1,
"imagen_print_page(swatchMap)" );
- if ( in == 0 || out == 0 )
- return -1;
+ if ( in == 0 || out == 0 || swatchMap == 0)
+ goto xit;
/* Initialize the page */
iWrite(prn_stream,iPAGE);
@@ -450,7 +451,9 @@ imagen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
} /* for temp */
/* get one line */
- gdev_prn_copy_scan_lines(pdev, lnum + swatchLine, in, line_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum + swatchLine, in, line_size);
+ if (code < 0)
+ goto xit;
DebugMsg(5,"Got scan line %d ", lnum + swatchLine);
DebugMsg(5,"line %d \n", swatchLine);
@@ -553,6 +556,7 @@ imagen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
gp_fflush(prn_stream);
+xit:
gs_free(pdev->memory, (char *)out, TotalBytesPerSw, swatchCount+1, "imagen_print_page(out)");
gs_free(pdev->memory, (char *)swatchMap, BIGSIZE, swatchCount / BIGSIZE + 1,
"imagen_print_page(swatchMap)" );
@@ -564,6 +568,6 @@ imagen_print_page(gx_device_printer *pdev, gp_file *prn_stream)
DebugMsg(1,"%s\n","End of imagen_print_page");
/* ----------------------------------------- */
- return 0;
+ return code;
} /* imagen_print_page */
diff --git a/devices/gdevjbig2.c b/devices/gdevjbig2.c
index ce85aa2c..a0dda91f 100644
--- a/devices/gdevjbig2.c
+++ b/devices/gdevjbig2.c
@@ -108,7 +108,9 @@ jbig2_print_page(gx_device_printer * pdev, gp_file * prn_stream)
code = gs_note_error(gs_error_ioerror);
goto done;
}
- gdev_prn_get_bits(pdev, lnum, in, &data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &data);
+ if (code < 0)
+ goto done;
sputs(&cstrm, data, state.stride, &ignore_used);
}
diff --git a/devices/gdevjpx.c b/devices/gdevjpx.c
index 0ba4e1a8..e38f5402 100644
--- a/devices/gdevjpx.c
+++ b/devices/gdevjpx.c
@@ -209,7 +209,9 @@ jpx_print_page(gx_device_printer * pdev, gp_file * prn_stream)
code = gs_note_error(gs_error_ioerror);
goto done;
}
- gdev_prn_get_bits(pdev, lnum, in, &data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &data);
+ if (code < 0)
+ goto done;
sputs(&cstrm, data, state.stride, &ignore_used);
}
diff --git a/devices/gdevl31s.c b/devices/gdevl31s.c
index 0871920a..b21b18c8 100644
--- a/devices/gdevl31s.c
+++ b/devices/gdevl31s.c
@@ -180,6 +180,8 @@ lj3100sw_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, int num
gs_memory_t *mem = pdev->memory;
byte *in = (byte *)gs_malloc(mem, line_size, 1, "lj3100sw_print_page");
byte *data;
+ int ecode = 0;
+
if (in == 0)
return_error(gs_error_VMerror);
if (gdev_prn_file_is_new(pdev)) {
@@ -211,7 +213,10 @@ lj3100sw_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, int num
int count = 0;
int bit_index = 0;
uint tmp = 0;
- gdev_prn_get_bits(pdev, i, in, &data);
+
+ ecode = gdev_prn_get_bits(pdev, i, in, &data);
+ if (ecode < 0)
+ goto xit;
for (j = 0; j <= printer_width; j++) {
int xoffset = (printer_width - paper_width) / 2;
int newcolor = 0;
@@ -261,8 +266,9 @@ lj3100sw_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, int num
for (i = 0; i < 4 * ppdev->NumCopies; i++)
lj3100sw_output_section_header(prn_stream, 54, 0, 0);
+xit:
gs_free(mem, (char *)in, line_size, 1, "lj3100sw_print_page");
- return 0;
+ return ecode;
}
static int
diff --git a/devices/gdevlbp8.c b/devices/gdevlbp8.c
index b99e219b..3136772a 100644
--- a/devices/gdevlbp8.c
+++ b/devices/gdevlbp8.c
@@ -40,7 +40,6 @@ problems
#define X_DPI 300
#define Y_DPI 300
-#define LINE_SIZE ((X_DPI * 85 / 10 + 7) / 8) /* bytes per line */
/* The device descriptors */
static dev_proc_print_page(lbp8_print_page);
@@ -105,22 +104,31 @@ static int
can_print_page(gx_device_printer *pdev, gp_file *prn_stream,
const char *init, int init_size, const char *end, int end_size)
{
- char data[LINE_SIZE*2];
+ char *data;
char *out_data;
int last_line_nro = 0;
+ int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ int code = 0;
+
+ data = (char *)gs_alloc_bytes(pdev->memory,
+ line_size*2,
+ "lbp8_line_buffer");
+ if (data == NULL)
+ return_error(gs_error_VMerror);
gp_fwrite(init, init_size, 1, prn_stream); /* initialize */
/* Send each scan line in turn */
{
int lnum;
- int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
byte rmask = (byte)(0xff << (-pdev->width & 7));
for ( lnum = 0; lnum < pdev->height; lnum++ ) {
- char *end_data = data + LINE_SIZE;
- gdev_prn_copy_scan_lines(pdev, lnum,
- (byte *)data, line_size);
+ char *end_data = data + line_size;
+ code = gdev_prn_copy_scan_lines(pdev, lnum,
+ (byte *)data, line_size);
+ if (code < 0)
+ goto xit;
/* Mask off 1-bits beyond the line width. */
end_data[-1] &= rmask;
/* Remove trailing 0s. */
@@ -194,7 +202,10 @@ can_print_page(gx_device_printer *pdev, gp_file *prn_stream,
if (end != NULL)
(void)gp_fwrite(end, end_size, 1, prn_stream);
- return 0;
+xit:
+ gs_free_object(pdev->memory, data, "lbp8_line_buffer");
+
+ return code;
}
/* Print an LBP-8 page. */
diff --git a/devices/gdevlj56.c b/devices/gdevlj56.c
index 4a473e0d..6199e5be 100644
--- a/devices/gdevlj56.c
+++ b/devices/gdevlj56.c
@@ -192,7 +192,7 @@ ljet5_print_page(gx_device_printer * pdev, gp_file * prn_stream)
code = gdev_prn_copy_scan_lines(pdev, lnum, (byte *) line, line_size);
if (code < 0)
- goto fin;
+ goto done;
px_put_us(s, lnum);
PX_PUT_LIT(s, line_header);
ncompr = gdev_pcl_mode2compress_padded(line, line + line_size_words,
@@ -202,7 +202,6 @@ ljet5_print_page(gx_device_printer * pdev, gp_file * prn_stream)
}
/* Finish up. */
- fin:
spputc(s, pxtEndImage);
spputc(s, pxtEndPage);
sflush(s);
diff --git a/devices/gdevlp8k.c b/devices/gdevlp8k.c
index 0a9bc03c..58ae0702 100644
--- a/devices/gdevlp8k.c
+++ b/devices/gdevlp8k.c
@@ -185,23 +185,21 @@ lp8000_print_page(gx_device_printer *pdev, gp_file *prn_stream)
unsigned int report_size;
byte *buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "lp8000_print_page(buf1)");
- byte *buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "lp8000_print_page(buf2)");
+
+ /* Worst case for rle compression below is 3 bytes for each 2 bytes of
+ input, with extra final byte. */
+ byte *buf2 = (byte *)gs_malloc(pdev->memory, in_size * 3 / 2 + 2, 1, "lp8000_print_page(buf2)");
byte *in = buf1;
byte *out = buf2;
int lnum, top, bottom, left, width;
- int count, left1, left2, left0;
+ int code = 0, count, left1, left2, left0;
/* Check memory allocations */
- if ( buf1 == 0 || buf2 == 0 )
- { if ( buf1 )
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "lp8000_print_page(buf1)");
-
- if ( buf2 )
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "lp8000_print_page(buf2)");
-
- return_error(gs_error_VMerror);
+ if ( buf1 == 0 || buf2 == 0 ) {
+ code = gs_error_VMerror;
+ goto xit;
}
/* Initialize the printer */
@@ -262,19 +260,25 @@ starting X value of the printer line.
** Check buffer for 0 data.
*/
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
while ( in_data[0] == 0 &&
!memcmp((char *)in_data, (char *)in_data + 1, line_size - 1) &&
lnum < bottom )
{
lnum++;
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
}
if(lnum == bottom ) break;
/* finished with this page */
- (void)gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ code = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ if (code < 0)
+ goto xit;
inp = in + left;
in_end = inp + width;
@@ -394,7 +398,14 @@ Y coordinate of the printer equals (lnum - 60)
gp_fflush(prn_stream);
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "lp8000_print_page(buf2)");
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "lp8000_print_page(buf1)");
- return 0;
+xit:
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "lp8000_print_page(buf1)");
+ if ( buf2 )
+ gs_free(pdev->memory, (char *)buf2, in_size, 1, "lp8000_print_page(buf2)");
+
+ if (code < 0)
+ return_error(code);
+
+ return code;
}
diff --git a/devices/gdevlxm.c b/devices/gdevlxm.c
index f3135dcd..fe577c32 100644
--- a/devices/gdevlxm.c
+++ b/devices/gdevlxm.c
@@ -146,6 +146,7 @@ lxm5700m_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int lnum,minX, maxX, i, l, highestX, leastX, extent;
int direction = RIGHTWARD;
int lastY = 0;
+ int code = 0;
int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
/* Note that in_size is a multiple of 8. */
@@ -158,12 +159,8 @@ lxm5700m_print_page(gx_device_printer *pdev, gp_file *prn_stream)
/* Check allocations */
if ( buf1 == 0 || swipeBuf == 0 ) {
- if ( buf1 )
-quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "lxm_print_page(buf1)");
- if ( swipeBuf )
- gs_free(pdev->memory, (char *)swipeBuf, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");
- return_error(gs_error_VMerror);
+ code = gs_error_VMerror;
+ goto xit;
}
{ /* Initialize the printer and reset the margins. */
@@ -186,7 +183,9 @@ quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
for (l=lnum; l<pdev->height; l++) {
/* Copy 1 scan line and test for all zero. */
- gdev_prn_get_bits(pdev, l, in, &in_data);
+ code = gdev_prn_get_bits(pdev, l, in, &in_data);
+ if (code < 0)
+ goto xit;
if ( in_data[0] != 0 ||
memcmp((char *)in_data, (char *)in_data + 1, line_size - 1)
) {
@@ -211,7 +210,9 @@ quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
}
/* Copy the the scan lines. */
- lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ code = lcnt = gdev_prn_copy_scan_lines(pdev, lnum, in, in_size);
+ if (code < 0)
+ goto xit;
if ( lcnt < swipeHeight ) {
/* Pad with lines of zeros. */
memset(in + lcnt * line_size, 0,
@@ -245,13 +246,21 @@ quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
outp = swipeBuf;
/* macro, not fcn call. Space penalty is modest, speed helps */
-#define buffer_store(x) if(outp-swipeBuf>=swipeBuf_size) {\
- gs_free(pdev->memory, (char *)swipeBuf, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");\
- swipeBuf_size*=2;\
- swipeBuf = (byte *)gs_malloc(pdev->memory, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");\
- if (swipeBuf == 0) goto quit_ignomiously;\
- break;}\
- else *outp++ = (x)
+#define buffer_store(x)\
+ {\
+ if (outp-swipeBuf>=swipeBuf_size) {\
+ size_t outp_offset = outp - swipeBuf;\
+ size_t swipeBuf_size_new = swipeBuf_size * 2;\
+ byte* swipeBuf_new = gs_malloc(pdev->memory, swipeBuf_size_new, 1, "lxm_print_page(swipeBuf_new)");\
+ if (!swipeBuf_new) { code = gs_error_VMerror; goto xit; }\
+ memcpy(swipeBuf_new, swipeBuf, swipeBuf_size);\
+ gs_free(pdev->memory, swipeBuf, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");\
+ swipeBuf_size = swipeBuf_size_new;\
+ swipeBuf = swipeBuf_new;\
+ outp = swipeBuf + outp_offset;\
+ }\
+ *outp++ = (x);\
+ }
{/* work out the bytes to store for this swipe*/
@@ -288,17 +297,26 @@ quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
sxBy8 = sx/8;
sxMask = 0x80>>(sx%8);
- /* loop through all the swipeHeight bits of this column */
- for (i = 0, b=1, y= sxBy8+j1*line_size; i < directorySize; i++,b<<=1) {
- sum = false;
- for (j=j1,c=c1 /*,y=i*16*line_size+sxBy8*/; j<16; j+=2, y+=2*line_size, c>>=2) {
- f = (in[y]&sxMask);
- if (f) {
- words[i] |= c;
- sum |= f;
+ /* loop through all the swipeHeight bits of this column.
+
+ Note that <sx> looks like it can get out of range, so we
+ check for this here. This fixes bug 701842.
+
+ [An alternative might be to change above code from 'maxX
+ = (maxX+3)&-2' to 'maxX = (maxX+1)&-2', but that might be
+ risky. */
+ if (sx < pdev->width) {
+ for (i = 0, b=1, y= sxBy8+j1*line_size; i < directorySize; i++,b<<=1) {
+ sum = false;
+ for (j=j1,c=c1 /*,y=i*16*line_size+sxBy8*/; j<16; j+=2, y+=2*line_size, c>>=2) {
+ f = (in[y]&sxMask);
+ if (f) {
+ words[i] |= c;
+ sum |= f;
+ }
}
+ if (!sum) directory |=b;
}
- if (!sum) directory |=b;
}
retval+=2;
buffer_store(directory>>8); buffer_store(directory&0xff);
@@ -355,9 +373,14 @@ quit_ignomiously: /* and a goto into an if statement is pretty ignomious! */
}
gp_fflush(prn_stream);
- gs_free(pdev->memory, (char *)swipeBuf, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "lxm_print_page(buf1)");
- return 0;
+xit:
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "lxm_print_page(buf1)");
+ if ( swipeBuf )
+ gs_free(pdev->memory, (char *)swipeBuf, swipeBuf_size, 1, "lxm_print_page(swipeBuf)");
+ if (code < 0)
+ return_error(code);
+ return code;
}
/*
diff --git a/devices/gdevmgr.c b/devices/gdevmgr.c
index 6f1f8d54..79c299d5 100644
--- a/devices/gdevmgr.c
+++ b/devices/gdevmgr.c
@@ -117,7 +117,6 @@ mgr_begin_page(gx_device_mgr *bdev, gp_file *pstream, mgr_cursor *pcur)
/* Write the header */
B_PUTHDR8(&head, bdev->width, bdev->height, bdev->mgr_depth);
- gp_fprintf(pstream, "");
if ( gp_fwrite(&head, 1, sizeof(head), pstream) < sizeof(head) )
return_error(gs_error_ioerror);
gp_fflush(pstream);
@@ -131,18 +130,20 @@ mgr_begin_page(gx_device_mgr *bdev, gp_file *pstream, mgr_cursor *pcur)
return 0;
}
-/* Advance to the next row. Return 0 if more, 1 if done. */
+/* Advance to the next row. Return 0 if more, 1 if done. <0 if error */
static int
mgr_next_row(mgr_cursor *pcur)
-{ if ( pcur->lnum >= pcur->dev->height )
+{ int code = 0;
+
+ if ( pcur->lnum >= pcur->dev->height )
{ gs_free(((gx_device_printer *)pcur->dev)->memory,
(char *)pcur->data, pcur->line_size, 1,
"mgr_next_row(done)");
return 1;
- }
- gdev_prn_copy_scan_lines((gx_device_printer *)pcur->dev,
+ }
+ code = gdev_prn_copy_scan_lines((gx_device_printer *)pcur->dev,
pcur->lnum++, pcur->data, pcur->line_size);
- return 0;
+ return code < 0 ? code : 0;
}
/* ------ Individual page printing routines ------ */
@@ -154,18 +155,25 @@ static int
mgr_print_page(gx_device_printer *pdev, gp_file *pstream)
{ mgr_cursor cur;
int mgr_wide;
+ int mask = 0xff;
int code = mgr_begin_page(bdev, pstream, &cur);
if ( code < 0 ) return code;
mgr_wide = bdev->width;
if (mgr_wide & 7)
+ {
+ mask <<= (mgr_wide&7);
mgr_wide += 8 - (mgr_wide & 7);
+ }
+ mgr_wide >>= 3;
while ( !(code = mgr_next_row(&cur)) )
- { if ( gp_fwrite(cur.data, sizeof(char), mgr_wide / 8, pstream) <
- mgr_wide / 8)
+ {
+ cur.data[mgr_wide-1] &= mask;
+ if ( gp_fwrite(cur.data, sizeof(char), mgr_wide, pstream) <
+ mgr_wide)
return_error(gs_error_ioerror);
- }
+ }
return (code < 0 ? code : 0);
}
@@ -212,6 +220,8 @@ mgrN_print_page(gx_device_printer *pdev, gp_file *pstream)
if ( bdev->mgr_depth != 8 )
data = (byte *)gs_malloc(pdev->memory, mgr_line_size, 1, "mgrN_print_page");
+ if (data == NULL)
+ return_error(gs_error_VMerror);
while ( !(code = mgr_next_row(&cur)) )
{
@@ -284,6 +294,7 @@ cmgrN_print_page(gx_device_printer *pdev, gp_file *pstream)
ushort prgb[3];
unsigned char table[256], backtable[256];
gx_device_mgr *mgr = (gx_device_mgr *)pdev;
+ int mask = 0xff;
int code = mgr_begin_page(bdev, pstream, &cur);
if ( code < 0 ) return code;
@@ -292,9 +303,14 @@ cmgrN_print_page(gx_device_printer *pdev, gp_file *pstream)
mgr_wide = bdev->width;
if (bdev->mgr_depth == 4 && mgr_wide & 1)
+ {
mgr_wide++;
+ mask = 0;
+ }
mgr_line_size = mgr_wide / (8 / bdev->mgr_depth);
data = (byte *)gs_malloc(pdev->memory, mgr_line_size, 1, "cmgrN_print_page");
+ if (data == NULL)
+ return_error(gs_error_VMerror);
if ( bdev->mgr_depth == 8 ) {
memset( table, 0, sizeof(table) );
@@ -320,6 +336,7 @@ cmgrN_print_page(gx_device_printer *pdev, gp_file *pstream)
*dp = *(bp++) << 4;
*(dp++) |= *(bp++) & 0x0f;
}
+ dp[-1] &= mask;
if ( gp_fwrite(data, sizeof(byte), mgr_line_size, pstream) < mgr_line_size )
return_error(gs_error_ioerror);
break;
diff --git a/devices/gdevn533.c b/devices/gdevn533.c
index 5130bd38..35720364 100644
--- a/devices/gdevn533.c
+++ b/devices/gdevn533.c
@@ -163,7 +163,7 @@ nwp533_close(gx_device *dev)
static int
nwp533_print_page(gx_device_printer *dev, gp_file *prn_stream)
{
- int lnum;
+ int lnum, code = 0;
int line_size = gdev_mem_bytes_per_scan_line(dev);
byte *in;
int printer_file;
@@ -174,6 +174,8 @@ nwp533_print_page(gx_device_printer *dev, gp_file *prn_stream)
line_size += 4 - (line_size % 4);
}
in = (byte *) gs_malloc(dev->memory, line_size, 1, "nwp533_output_page(in)");
+ if (in == NULL)
+ return_error(gs_error_VMerror);
restart:
if(ioctl(printer_file, LBIOCSTOP, 0) < 0)
{
@@ -186,7 +188,9 @@ nwp533_print_page(gx_device_printer *dev, gp_file *prn_stream)
for ( lnum = 0; lnum < dev->height; lnum++)
{
- gdev_prn_copy_scan_lines(prn_dev, lnum, in, line_size);
+ code = gdev_prn_copy_scan_lines(prn_dev, lnum, in, line_size);
+ if (code < 0)
+ goto xit;
if(write(printer_file, in, line_size) != line_size)
{
perror("Writting to output");
@@ -201,7 +205,8 @@ nwp533_print_page(gx_device_printer *dev, gp_file *prn_stream)
perror("Starting print");
return_error(gs_error_ioerror);
}
+xit:
gs_free(dev->memory, in, line_size, 1, "nwp533_output_page(in)");
- return 0;
+ return code;
}
diff --git a/devices/gdevokii.c b/devices/gdevokii.c
index d8929a22..3350f6d9 100644
--- a/devices/gdevokii.c
+++ b/devices/gdevokii.c
@@ -96,30 +96,46 @@ okiibm_print_page1(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high
-1, 0 /*60*/, 1 /*120*/, -1, 3 /*240*/
};
- int in_y_mult = (y_9pin_high ? 2 : 1);
- int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
- /* Note that in_size is a multiple of 8. */
- int in_size = line_size * (8 * in_y_mult);
- byte *buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "okiibm_print_page(buf1)");
- byte *buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "okiibm_print_page(buf2)");
- byte *in = buf1;
- byte *out = buf2;
- int out_y_mult = 1;
- int x_dpi = pdev->x_pixels_per_inch;
- char start_graphics = graphics_modes_9[x_dpi / 60];
- int first_pass = (start_graphics == 3 ? 1 : 0);
- int last_pass = first_pass * 2;
- int y_passes = (y_9pin_high ? 2 : 1);
+ int in_y_mult;
+ int line_size;
+ int in_size;
+ byte *buf1;
+ byte *buf2;
+ byte *in;
+ byte *out;
+ int out_y_mult;
+ int x_dpi;
+ char start_graphics;
+ int first_pass;
+ int last_pass;
+ int y_passes;
int skip = 0, lnum = 0, pass, ypass;
int y_step = 0;
+ int code = 0;
+
+ x_dpi = pdev->x_pixels_per_inch;
+ if (x_dpi / 60 >= sizeof(graphics_modes_9)/sizeof(graphics_modes_9[0])) {
+ return_error(gs_error_rangecheck);
+ }
+ in_y_mult = (y_9pin_high ? 2 : 1);
+ line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ /* Note that in_size is a multiple of 8. */
+ in_size = line_size * (8 * in_y_mult);
+ buf1 = (byte *)gs_malloc(pdev->memory, in_size, 1, "okiibm_print_page(buf1)");
+ buf2 = (byte *)gs_malloc(pdev->memory, in_size, 1, "okiibm_print_page(buf2)");
+ in = buf1;
+ out = buf2;
+ out_y_mult = 1;
+ start_graphics = graphics_modes_9[x_dpi / 60];
+ first_pass = (start_graphics == 3 ? 1 : 0);
+ last_pass = first_pass * 2;
+ y_passes = (y_9pin_high ? 2 : 1);
+ y_step = 0;
/* Check allocations */
- if ( buf1 == 0 || buf2 == 0 )
- { if ( buf1 )
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "okiibm_print_page(buf1)");
- if ( buf2 )
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "okiibm_print_page(buf2)");
- return_error(gs_error_VMerror);
+ if ( buf1 == 0 || buf2 == 0 ) {
+ code = gs_error_VMerror;
+ goto xit;
}
/* Initialize the printer. */
@@ -135,7 +151,9 @@ okiibm_print_page1(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high
int lcnt;
/* Copy 1 scan line and test for all zero. */
- gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ code = gdev_prn_get_bits(pdev, lnum, in, &in_data);
+ if (code < 0)
+ goto xit;
if ( in_data[0] == 0 &&
!memcmp((char *)in_data, (char *)in_data + 1, line_size - 1)
)
@@ -246,8 +264,13 @@ okiibm_print_page1(gx_device_printer *pdev, gp_file *prn_stream, int y_9pin_high
gp_fwrite(end_string, 1, end_length, prn_stream);
gp_fflush(prn_stream);
- gs_free(pdev->memory, (char *)buf2, in_size, 1, "okiibm_print_page(buf2)");
- gs_free(pdev->memory, (char *)buf1, in_size, 1, "okiibm_print_page(buf1)");
+xit:
+ if ( buf1 )
+ gs_free(pdev->memory, (char *)buf1, in_size, 1, "okiibm_print_page(buf1)");
+ if ( buf2 )
+ gs_free(pdev->memory, (char *)buf2, in_size, 1, "okiibm_print_page(buf2)");
+ if (code < 0)
+ return_error(code);
return 0;
}
diff --git a/devices/gdevpbm.c b/devices/gdevpbm.c
index 647349ed..412d0109 100644
--- a/devices/gdevpbm.c
+++ b/devices/gdevpbm.c
@@ -1054,6 +1054,8 @@ pnmcmyk_print_page(gx_device_printer *pdev, gp_file *pstream)
!strncmp(pdev->fname, "/dev/null", min(strlen(pdev->fname), 9));
int (*row_proc) (gx_device_printer *, byte *, int, gp_file *);
+ if (data == NULL)
+ return_error(gs_error_VMerror);
if (!output_is_nul) {
if (gp_fprintf(pstream, "P5\n") < 0) { /* PGM raw */
code = gs_note_error(gs_error_ioerror);
diff --git a/devices/gdevpcx.c b/devices/gdevpcx.c
index 1735851d..91de4abb 100644
--- a/devices/gdevpcx.c
+++ b/devices/gdevpcx.c
@@ -442,7 +442,7 @@ pcx_write_rle(const byte * from, const byte * end, int step, gp_file * file)
byte data = *from;
from += step;
- if (data != *from || from == end) {
+ if (from >= end || data != *from) {
if (data >= 0xc0)
gp_fputc(0xc1, file);
} else {
diff --git a/devices/gdevpdfimg.c b/devices/gdevpdfimg.c
index 31b42fb4..998574c8 100644
--- a/devices/gdevpdfimg.c
+++ b/devices/gdevpdfimg.c
@@ -271,6 +271,10 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
profile_struct->device_profile[0], profile_struct->postren_profile,
&rendering_params);
}
+ if (pdf_dev->icclink == NULL) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
+ return_error(gs_error_VMerror);
+ }
/* If it is identity, release it now and set link to NULL */
if (pdf_dev->icclink->is_identity) {
pdf_dev->icclink->procs.free_link(pdf_dev->icclink);
@@ -281,8 +285,10 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
/* Set up the stream and insert the file header */
pdf_dev->strm = s_alloc(pdf_dev->memory->non_gc_memory, "pdfimage_open_temp_stream(strm)");
- if (pdf_dev->strm == 0)
+ if (pdf_dev->strm == 0) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
+ }
pdf_dev->strm_buf = gs_alloc_bytes(pdf_dev->memory->non_gc_memory, pdf_dev->width * (pdf_dev->color_info.depth / 8),
"pdfimage_open_temp_stream(strm_buf)");
if (pdf_dev->strm_buf == 0) {
@@ -290,6 +296,7 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
"pdfimage_open_temp_stream(strm)");
pdf_dev->strm = 0;
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
}
swrite_file(pdf_dev->strm, pdf_dev->file, pdf_dev->strm_buf, pdf_dev->width * (pdf_dev->color_info.depth / 8));
@@ -654,7 +661,14 @@ pdf_compute_fileID(gx_device_pdf_image * pdev, byte fileID[16], char *CreationDa
gp_get_realtime(secs_ns);
#endif
sputs(s, (byte *)secs_ns, sizeof(secs_ns), &ignore);
+#ifdef CLUSTER
+ /* Don't have the ID's vary by filename output in the cluster testing.
+ * This prevents us comparing gs to gpdl results, and makes it harder
+ * to manually reproduce results. */
+ sputs(s, (const byte *)"ClusterTest.pdf", strlen("ClusterTest.pdf"), &ignore);
+#else
sputs(s, (const byte *)pdev->fname, strlen(pdev->fname), &ignore);
+#endif
stream_puts(s, "/ModDate ");
stream_puts(s, CreationDate);
@@ -723,6 +737,12 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
stream_puts(pdf_dev->strm, "]\n/Type /Pages\n>>\nendobj\n");
+#ifdef CLUSTER
+ memset(&t, 0, sizeof(t));
+ memset(&tms, 0, sizeof(tms));
+ timesign = 'Z';
+ timeoffset = 0;
+#else
time(&t);
tms = *gmtime(&t);
tms.tm_isdst = -1;
@@ -730,6 +750,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
timesign = (timeoffset == 0 ? 'Z' : timeoffset < 0 ? '-' : '+');
timeoffset = any_abs(timeoffset) / 60;
tms = *localtime(&t);
+#endif
gs_sprintf(CreationDate, "(D:%04d%02d%02d%02d%02d%02d%c%02d\'%02d\')",
tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday,
@@ -1262,6 +1283,10 @@ static int gdev_PCLm_begin_page(gx_device_pdf_image *pdf_dev,
profile_struct->device_profile[0], profile_struct->postren_profile,
&rendering_params);
}
+ if (pdf_dev->icclink == NULL) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
+ return_error(gs_error_VMerror);
+ }
/* If it is identity, release it now and set link to NULL */
if (pdf_dev->icclink->is_identity) {
pdf_dev->icclink->procs.free_link(pdf_dev->icclink);
@@ -1272,8 +1297,10 @@ static int gdev_PCLm_begin_page(gx_device_pdf_image *pdf_dev,
/* Set up the stream and insert the file header */
pdf_dev->strm = s_alloc(pdf_dev->memory->non_gc_memory, "pdfimage_open_temp_stream(strm)");
- if (pdf_dev->strm == 0)
+ if (pdf_dev->strm == 0) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
+ }
pdf_dev->strm_buf = gs_alloc_bytes(pdf_dev->memory->non_gc_memory, 512,
"pdfimage_open_temp_stream(strm_buf)");
if (pdf_dev->strm_buf == 0) {
@@ -1281,6 +1308,7 @@ static int gdev_PCLm_begin_page(gx_device_pdf_image *pdf_dev,
gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
"pdfimage_open_temp_stream(strm)");
pdf_dev->strm = 0;
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
}
swrite_file(pdf_dev->strm, pdf_dev->file, pdf_dev->strm_buf, 512);
diff --git a/devices/gdevperm.c b/devices/gdevperm.c
index fe2295e7..f2a5e38c 100644
--- a/devices/gdevperm.c
+++ b/devices/gdevperm.c
@@ -135,8 +135,8 @@ perm_print_page(gx_device_printer *pdev, gp_file *pstream)
gx_device_perm_t * const dev = (gx_device_perm_t *)pdev;
int ncomp = dev->num_std_colorant_names;
int raw_raster = pdev->width * ncomp;
- byte *raw_line;
- byte *cooked_line;
+ byte *raw_line = NULL;
+ byte *cooked_line = NULL;
byte *row;
int code = 0;
int mode = dev->mode;
@@ -145,9 +145,15 @@ perm_print_page(gx_device_printer *pdev, gp_file *pstream)
fprintf(pstream, "P6\n%d %d\n255\n", dev->width, dev->height);
raw_line = gs_alloc_bytes(pdev->memory, raw_raster, "perm_print_page");
cooked_line = gs_alloc_bytes(pdev->memory, dev->width * 3, "perm_print_page");
+ if (raw_line == NULL || cooked_line == NULL) {
+ gs_free_object(pdev->memory, raw_line, "perm_print_page");
+ return_error(gs_error_VMerror);
+ }
for (y = 0; y < dev->height; y++) {
int x;
code = gdev_prn_get_bits(pdev, y, raw_line, &row);
+ if (code < 0)
+ break;
for (x = 0; x < dev->width; x++) {
int c, m, y, k;
int r, g, b;
diff --git a/devices/gdevphex.c b/devices/gdevphex.c
index 590baf29..f3ca5048 100644
--- a/devices/gdevphex.c
+++ b/devices/gdevphex.c
@@ -947,8 +947,8 @@ static void ScheduleMiddle( SCHEDUL *p );
static void ScheduleTrailing( SCHEDUL *p );
static void ScheduleBand( SCHEDUL *p, int mask );
-static void RenderPage( RENDER *p );
-static void RenderLine( RENDER *p, int line );
+static int RenderPage( RENDER *p );
+static int RenderLine( RENDER *p, int line );
static int IsScanlineEmpty( RENDER *p, byte *line );
static int RleCompress( RAWLINE *raw, int min, int max, byte *rle_data );
@@ -1347,10 +1347,10 @@ float margins[ 4 ]; /* L, B, R, T */
width = pdev->width / pdev->x_pixels_per_inch;
- margins[ 0 ] = 0.12;
- margins[ 1 ] = 0.5;
- margins[ 2 ] = 0.12;
- margins[ 3 ] = ( width > 11.46+0.12 ) ? width - (11.46+0.12) : 0.12;
+ margins[ 0 ] = 0.12f;
+ margins[ 1 ] = 0.5f;
+ margins[ 2 ] = 0.12f;
+ margins[ 3 ] = ( width > 11.46f+0.12f ) ? width - (11.46f+0.12f) : 0.12f;
gx_device_set_margins( pdev, margins, true );
return( gdev_prn_open( pdev ) );
@@ -1399,7 +1399,7 @@ int i;
m = 255 - ( g >> ( gx_color_value_bits - 8 ) );
y = 255 - ( b >> ( gx_color_value_bits - 8 ) );
- k = xtrans[ min( c, min( m, y ) ) ] * 0.8; /* FIXME:empirical constant */
+ k = (int)(xtrans[ min( c, min( m, y ) ) ] * 0.8); /* FIXME:empirical constant */
c -= k;
m -= k;
y -= k;
@@ -1454,15 +1454,15 @@ CVAL r, g, b;
if ( MAP_RGB_ADOBE ) {
- r = gx_max_color_value * ( 1.0 - min( 1.0, (c / 255.0 + k / 255.0) ) );
- g = gx_max_color_value * ( 1.0 - min( 1.0, (m / 255.0 + k / 255.0) ) );
- b = gx_max_color_value * ( 1.0 - min( 1.0, (y / 255.0 + k / 255.0) ) );
+ r = (CVAL)(gx_max_color_value * ( 1.0 - min( 1.0, (c / 255.0 + k / 255.0) ) ));
+ g = (CVAL)(gx_max_color_value * ( 1.0 - min( 1.0, (m / 255.0 + k / 255.0) ) ));
+ b = (CVAL)(gx_max_color_value * ( 1.0 - min( 1.0, (y / 255.0 + k / 255.0) ) ));
}
else {
- r = gx_max_color_value * ( 1.0 - c / 255.0 ) * ( 1.0 - k / 255.0);
- g = gx_max_color_value * ( 1.0 - m / 255.0 ) * ( 1.0 - k / 255.0);
- b = gx_max_color_value * ( 1.0 - y / 255.0 ) * ( 1.0 - k / 255.0);
+ r = (CVAL)(gx_max_color_value * ( 1.0 - c / 255.0 ) * ( 1.0 - k / 255.0));
+ g = (CVAL)(gx_max_color_value * ( 1.0 - m / 255.0 ) * ( 1.0 - k / 255.0));
+ b = (CVAL)(gx_max_color_value * ( 1.0 - y / 255.0 ) * ( 1.0 - k / 255.0));
}
prgb[ 0 ] = r;
@@ -1682,6 +1682,7 @@ static int photoex_print_page( PDEV *device, gp_file *stream )
{
int pixels; /* Length of the line */
int x; /* Work vars */
+int code = 0;
EDEV *dev; /* Our device */
RENDER *render; /* Rendering info */
@@ -1709,7 +1710,7 @@ double psize;
/* Check if the requested width is within device limits.
The calculations are in 1440 dpi units. */
- start = 1440.0 * dev_l_margin( device );
+ start = (int)(1440.0 * dev_l_margin( device ));
x = xres == 360 ? 4 : xres == 720 ? 2 : 1;
@@ -1772,9 +1773,9 @@ double psize;
/* Set up papersize and margins */
- SendPaper( stream, device->height / device->y_pixels_per_inch * unit );
- SendMargin( stream, ( psize - dev_b_margin( device ) ) * unit,
- dev_t_margin( device ) * unit );
+ SendPaper( stream, (int)(device->height / device->y_pixels_per_inch * unit) );
+ SendMargin( stream, (int)(( psize - dev_b_margin( device ) ) * unit),
+ (int)( dev_t_margin( device ) * unit) );
/* Dot size as per user setting */
@@ -1791,7 +1792,9 @@ double psize;
/* Render the page and send image data to printer */
- RenderPage( render );
+ code = RenderPage( render );
+ if (code < 0)
+ goto xit;
/* Eject the paper, reset printer */
@@ -1799,10 +1802,10 @@ double psize;
SendReset( stream );
/* Release the memory and return */
-
+xit:
gs_free( dev->memory, render->dbuff, pixels, sizeof( long ), "PhotoEX" );
gs_free( dev->memory, render, 1, sizeof( RENDER ), "PhotoEX" );
- return( 0 );
+ return( code );
}
/*
@@ -1810,7 +1813,7 @@ double psize;
* ~~~~~~~~~~~~~~
*/
-static void RenderPage( RENDER *p )
+static int RenderPage( RENDER *p )
{
int last_done; /* The last line rendered */
int last_need; /* The largest line number we need */
@@ -1819,6 +1822,7 @@ int last_band; /* Indicates the last band */
int min, max; /* Min/max active bytes in a raw line */
int phase; /* 1440dpi X weave offset */
int i, j, l, col;
+int code = 0;
p->htone_thold = HalftoneThold( p );
p->htone_last = -1 - p->htone_thold;
@@ -1842,7 +1846,11 @@ int i, j, l, col;
last_need = last_done;
for ( i = NOZZLES-1 ; i >= 0 && p->schedule.head[ i ] == -1 ; i-- );
if ( i >= 0 ) last_need = p->schedule.head[ i ];
- while ( last_need > last_done ) RenderLine( p, ++last_done );
+ while ( last_need > last_done ) {
+ code = RenderLine( p, ++last_done );
+ if (code < 0)
+ return code; /* punt */
+ }
/* Now loop through the colours and build the data stream */
@@ -1932,6 +1940,8 @@ int i, j, l, col;
move_down += p->schedule.down;
} while ( ! last_band );
+
+ return code;
}
/*
@@ -1944,14 +1954,16 @@ int i, j, l, col;
* When it sees a nonempty line again, it restarts the renderer.
*/
-static void RenderLine( RENDER *p, int line )
+static int RenderLine( RENDER *p, int line )
{
byte *data;
-int i;
+int i, code = 0;
/* Get the line from Ghostscript and see if its empty */
- gdev_prn_get_bits( (PDEV *) p->dev, line, p->dbuff, &data );
+ code = gdev_prn_get_bits( (PDEV *) p->dev, line, p->dbuff, &data );
+ if (code < 0)
+ return code;
if ( IsScanlineEmpty( p, data ) ) {
@@ -1994,6 +2006,7 @@ int i;
HalftoneLine( p, line, data );
p->htone_last = line;
}
+ return 0;
}
/*
diff --git a/devices/gdevpjet.c b/devices/gdevpjet.c
index 4b474190..d9fc76ff 100644
--- a/devices/gdevpjet.c
+++ b/devices/gdevpjet.c
@@ -24,10 +24,6 @@
#define X_DPI 180
#define Y_DPI 180
-/* We round up LINE_SIZE to a multiple of 8 bytes */
-/* because that's the unit of transposition from pixels to planes. */
-#define LINE_SIZE ((X_DPI * 85 / 10 + 63) / 64 * 8)
-
/* The device descriptors */
static dev_proc_print_page(lj250_print_page);
static dev_proc_print_page(paintjet_print_page);
@@ -101,28 +97,46 @@ static int
pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
const char *end_page)
{
-#define DATA_SIZE (LINE_SIZE * 8)
- byte *data =
- (byte *)gs_malloc(pdev->memory, DATA_SIZE, 1,
+ int line_size;
+ int data_size;
+ byte *data = NULL;
+ byte *plane_data = NULL;
+ byte *temp = NULL;
+ int code = 0;
+
+ /* We round up line_size to a multiple of 8 bytes */
+ /* because that's the unit of transposition from pixels to planes. */
+ line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ line_size = (line_size + 7) / 8 * 8;
+ data_size = line_size * 8;
+
+ data =
+ (byte *)gs_malloc(pdev->memory, data_size, 1,
"paintjet_print_page(data)");
- byte *plane_data =
- (byte *)gs_malloc(pdev->memory, LINE_SIZE * 3, 1,
+ plane_data =
+ (byte *)gs_malloc(pdev->memory, line_size * 3, 1,
"paintjet_print_page(plane_data)");
- if ( data == 0 || plane_data == 0 )
+ temp = gs_malloc(pdev->memory, line_size * 2, 1, "paintjet_print_page(temp)");
+
+ if ( data == 0 || plane_data == 0 || temp == 0)
{ if ( data )
- gs_free(pdev->memory, (char *)data, DATA_SIZE, 1,
+ gs_free(pdev->memory, (char *)data, data_size, 1,
"paintjet_print_page(data)");
if ( plane_data )
- gs_free(pdev->memory, (char *)plane_data, LINE_SIZE * 3, 1,
+ gs_free(pdev->memory, (char *)plane_data, line_size * 3, 1,
"paintjet_print_page(plane_data)");
+ if (temp)
+ gs_free(pdev->memory, temp, line_size * 2, 1,
+ "paintjet_print_page(temp)");
return_error(gs_error_VMerror);
}
+ memset(data, 0x00, data_size);
/* set raster graphics resolution -- 90 or 180 dpi */
gp_fprintf(prn_stream, "\033*t%dR", X_DPI);
/* set the line width */
- gp_fprintf(prn_stream, "\033*r%dS", DATA_SIZE);
+ gp_fprintf(prn_stream, "\033*r%dS", data_size);
/* set the number of color planes */
gp_fprintf(prn_stream, "\033*r%dU", 3); /* always 3 */
@@ -138,12 +152,13 @@ pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
/* Send each scan line in turn */
{ int lnum;
- int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
int num_blank_lines = 0;
for ( lnum = 0; lnum < pdev->height; lnum++ )
{ byte *end_data = data + line_size;
- gdev_prn_copy_scan_lines(pdev, lnum,
+ code = gdev_prn_copy_scan_lines(pdev, lnum,
(byte *)data, line_size);
+ if (code < 0)
+ goto xit;
/* Remove trailing 0s. */
while ( end_data > data && end_data[-1] == 0 )
end_data--;
@@ -161,7 +176,7 @@ pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
memset(end_data, 0, 7);
/* Transpose the data to get pixel planes. */
- for ( i = 0, odp = plane_data; i < DATA_SIZE;
+ for ( i = 0, odp = plane_data; i < data_size;
i += 8, odp++
)
{ /* The following is for 16-bit machines */
@@ -181,8 +196,8 @@ pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
(spr2[dp[6]]) +
(spr2[dp[7]] >> 1);
odp[0] = (byte)(pword >> 16);
- odp[LINE_SIZE] = (byte)(pword >> 8);
- odp[LINE_SIZE*2] = (byte)(pword);
+ odp[line_size] = (byte)(pword >> 8);
+ odp[line_size*2] = (byte)(pword);
}
/* Skip blank lines if any */
if ( num_blank_lines > 0 )
@@ -194,11 +209,11 @@ pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
/* Transfer raster graphics */
/* in the order R, G, B. */
- for ( row = plane_data + LINE_SIZE * 2, i = 0;
- i < 3; row -= LINE_SIZE, i++
+ for ( row = plane_data + line_size * 2, i = 0;
+ i < 3; row -= line_size, i++
)
- { byte temp[LINE_SIZE * 2];
- int count = compress1_row(row, row + LINE_SIZE, temp);
+ {
+ int count = compress1_row(row, row + line_size, temp);
gp_fprintf(prn_stream, "\033*b%d%c",
count, "VVW"[i]);
gp_fwrite(temp, sizeof(byte),
@@ -211,10 +226,12 @@ pj_common_print_page(gx_device_printer *pdev, gp_file *prn_stream, int y_origin,
/* end the page */
gp_fputs(end_page, prn_stream);
- gs_free(pdev->memory, (char *)data, DATA_SIZE, 1, "paintjet_print_page(data)");
- gs_free(pdev->memory, (char *)plane_data, LINE_SIZE * 3, 1, "paintjet_print_page(plane_data)");
+xit:
+ gs_free(pdev->memory, (char *)data, data_size, 1, "paintjet_print_page(data)");
+ gs_free(pdev->memory, (char *)plane_data, line_size * 3, 1, "paintjet_print_page(plane_data)");
+ gs_free(pdev->memory, temp, line_size * 2, 1, "paintjet_print_page(temp)");
- return 0;
+ return code;
}
/*
diff --git a/devices/gdevplan.c b/devices/gdevplan.c
index b91f61d0..313d08f8 100644
--- a/devices/gdevplan.c
+++ b/devices/gdevplan.c
@@ -248,13 +248,26 @@ static void dump_row_pnmc(int w, byte **data, gp_file *dump_file)
static void dump_row_pbm(int w, byte **data, gp_file *dump_file)
{
byte *r = data[0];
+#ifdef CLUSTER
+ int end = w>>3;
+ byte mask = 255>>(w&7);
+ if (w & 7)
+ mask = ~mask;
+ else
+ end--;
+#else
+ byte mask = 255;
+#endif
if (dump_file == NULL)
return;
+ if (w == 0)
+ return;
w = (w+7)>>3;
- while (w--) {
+ while (--w) {
gp_fputc(*r++, dump_file);
}
+ gp_fputc(mask & *r, dump_file);
}
static void dump_row_pgm(int w, byte **data, gp_file *dump_file)
diff --git a/devices/gdevpng.c b/devices/gdevpng.c
index 10962516..73bc5bf3 100644
--- a/devices/gdevpng.c
+++ b/devices/gdevpng.c
@@ -557,7 +557,7 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
case 1:
bit_depth = 1;
color_type = PNG_COLOR_TYPE_GRAY;
- /* invert monocrome pixels */
+ /* invert monochrome pixels */
if (!monod) {
invert = true;
}
@@ -700,9 +700,21 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod)
depth/dst_bpc, factor, mfs, NULL, 0);
if (code >= 0)
{
+#ifdef CLUSTER
+ int bitlen = width*dst_bpc;
+ int end = bitlen>>3;
+ int mask = 255>>(bitlen&7);
+ if (bitlen & 7)
+ mask = ~mask;
+ else
+ end--;
+#endif
/* Write the contents of the image. */
for (y = 0; y < height; y++) {
gx_downscaler_getbits(&ds, row, y);
+#ifdef CLUSTER
+ row[end] &= mask;
+#endif
png_write_rows(png_ptr, &row, 1);
}
gx_downscaler_fin(&ds);
diff --git a/devices/gdevpsd.c b/devices/gdevpsd.c
index 26580aee..03292469 100644
--- a/devices/gdevpsd.c
+++ b/devices/gdevpsd.c
@@ -453,7 +453,11 @@ psd_prn_open(gx_device * pdev)
pdev->color_info.depth = pdev->color_info.num_components *
pdev_psd->devn_params.bitspercomponent;
pdev->color_info.separable_and_linear = GX_CINFO_SEP_LIN;
- pdev->icc_struct->supports_devn = true;
+ set_linear_color_bits_mask_shift(pdev);
+ if (pdev->color_info.polarity == GX_CINFO_POLARITY_ADDITIVE)
+ pdev->icc_struct->supports_devn = false;
+ else
+ pdev->icc_struct->supports_devn = true;
code = gdev_prn_open_planar(pdev, true);
return code;
}
diff --git a/devices/gdevpsim.c b/devices/gdevpsim.c
index 3c85c319..7a194c64 100644
--- a/devices/gdevpsim.c
+++ b/devices/gdevpsim.c
@@ -143,7 +143,7 @@ static int
psmono_print_page(gx_device_printer * pdev, gp_file * prn_stream)
{
int line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev);
- int lnum;
+ int lnum, code = 0;
byte *line = gs_alloc_bytes(pdev->memory, line_size, "psmono_print_page");
byte invert = (pdev->color_info.depth == 1 ? 0xff : 0);
gx_device_pswrite_common_t pswrite_common;
@@ -167,7 +167,9 @@ psmono_print_page(gx_device_printer * pdev, gp_file * prn_stream)
int left = line_size;
byte *data;
- gdev_prn_get_bits(pdev, lnum, line, &data);
+ code = gdev_prn_get_bits(pdev, lnum, line, &data);
+ if (code < 0)
+ goto xit;
p = data;
/* Loop invariant: p + left = data + line_size. */
#define min_repeat_run 10
@@ -216,10 +218,11 @@ psmono_print_page(gx_device_printer * pdev, gp_file * prn_stream)
/* Clean up and return. */
fputs("\n", prn_stream);
psw_write_page_trailer(prn_stream, 1, true);
+xit:
gs_free_object(pdev->memory, line, "psmono_print_page");
if (ferror(prn_stream))
return_error(gs_error_ioerror);
- return 0;
+ return code;
}
/* Close the file. */
@@ -307,7 +310,7 @@ psrgb_print_page(gx_device_printer * pdev, gp_file * prn_stream)
int width = pdev->width;
byte *lbuf = gs_alloc_bytes(mem, width * 3,
"psrgb_print_page(lbuf)");
- int lnum;
+ int lnum, code = 0;
stream fs, a85s, rls;
stream_A85E_state a85state;
stream_RLE_state rlstate;
@@ -354,7 +357,9 @@ psrgb_print_page(gx_device_printer * pdev, gp_file * prn_stream)
byte *data;
int i, c;
- gdev_prn_get_bits(pdev, lnum, lbuf, &data);
+ code = gdev_prn_get_bits(pdev, lnum, lbuf, &data);
+ if (code < 0)
+ goto xit;
for (c = 0; c < 3; ++c) {
const byte *p;
@@ -369,7 +374,10 @@ psrgb_print_page(gx_device_printer * pdev, gp_file * prn_stream)
sflush(&fs);
fputs("\n", prn_stream);
psw_write_page_trailer(prn_stream, 1, true);
+xit:
gs_free_object(mem, lbuf, "psrgb_print_page(lbuf)");
+ if (code < 0)
+ return_error(code);
if (ferror(prn_stream))
return_error(gs_error_ioerror);
return 0;
diff --git a/devices/gdevrinkj.c b/devices/gdevrinkj.c
index cc144d7e..509edd07 100644
--- a/devices/gdevrinkj.c
+++ b/devices/gdevrinkj.c
@@ -818,6 +818,9 @@ rinkj_add_lut(rinkj_device *rdev, rinkj_lutset *lutset, char plane, gp_file *f)
if (n_graph < 0 || n_graph > 256)
return -1;
chain = (rinkj_lutchain *)gs_alloc_bytes(rdev->memory, sizeof(rinkj_lutchain), "rinkj_add_lut");
+ if (chain == NULL) {
+ return -1;
+ }
chain->next = NULL;
chain->n_graph = n_graph;
chain->graph_x = (double *)gs_alloc_bytes(rdev->memory, sizeof(double) * n_graph, "rinkj_add_lut");
@@ -972,14 +975,23 @@ rinkj_write_image_data(gx_device_printer *pdev, RinkjDevice *cmyk_dev)
n_planes = n_planes_in + rdev->separation_names.num_names;
if_debug1m('r', rdev->memory, "[r]n_planes = %d\n", n_planes);
xsb = pdev->width;
- for (i = 0; i < n_planes_out; i++)
+ for (i = 0; i < n_planes_out; i++) {
plane_data[i] = gs_alloc_bytes(pdev->memory, xsb, "rinkj_write_image_data");
-
+ if (plane_data[i] == NULL) {
+ while (--i >= 0)
+ gs_free_object(pdev->memory, plane_data[i], "rinkj_write_image_data");
+ return_error(gs_error_VMerror);
+ }
+ }
if (rdev->icc_link != NULL) {
cache = (rinkj_color_cache_entry *)gs_alloc_bytes(pdev->memory, RINKJ_CCACHE_SIZE * sizeof(rinkj_color_cache_entry), "rinkj_write_image_data");
- if (cache == NULL)
- return gs_note_error(gs_error_VMerror);
+ if (cache == NULL) {
+ /* i == n_planes_out from above */
+ while (--i >= 0)
+ gs_free_object(pdev->memory, plane_data[i], "rinkj_write_image_data");
+ return_error(gs_error_VMerror);
+ }
/* Set up cache so that none of the keys will hit. */
@@ -999,11 +1011,15 @@ rinkj_write_image_data(gx_device_printer *pdev, RinkjDevice *cmyk_dev)
split_plane_data[6] = plane_data[3];
line = gs_alloc_bytes(pdev->memory, raster, "rinkj_write_image_data");
+ if (line == NULL)
+ goto xit;
for (y = 0; y < pdev->height; y++) {
byte *row;
int x;
code = gdev_prn_get_bits(pdev, y, line, &row);
+ if (code < 0)
+ goto xit;
if (rdev->icc_link == NULL) {
int rowix = 0;
@@ -1115,6 +1131,7 @@ rinkj_write_image_data(gx_device_printer *pdev, RinkjDevice *cmyk_dev)
}
rinkj_device_write(cmyk_dev, NULL);
+xit:
for (i = 0; i < n_planes_in; i++)
gs_free_object(pdev->memory, plane_data[i], "rinkj_write_image_data");
gs_free_object(pdev->memory, line, "rinkj_write_image_data");
diff --git a/devices/gdevsppr.c b/devices/gdevsppr.c
index 144187e3..ee3c5813 100644
--- a/devices/gdevsppr.c
+++ b/devices/gdevsppr.c
@@ -115,7 +115,8 @@ sparc_print_page(gx_device_printer *pdev, FILE *prn)
struct lpvi_page lpvipage;
struct lpvi_err lpvierr;
char *out_buf;
- int out_size;
+ int out_size, code = 0;
+
if (ioctl(fileno(prn),LPVIIOC_GETPAGE,&lpvipage)!=0)
{
errprintf(pdev->memory, "sparc_print_page: LPVIIOC_GETPAGE failed\n");
@@ -132,7 +133,12 @@ sparc_print_page(gx_device_printer *pdev, FILE *prn)
}
out_size=lpvipage.bitmap_width*lpvipage.page_length;
out_buf=gs_malloc(pdev->memory, out_size,1,"sparc_print_page: out_buf");
- gdev_prn_copy_scan_lines(pdev,0,out_buf,out_size);
+ if (out_buf == NULL)
+ return_error(gs_error_VMerror);
+
+ code = gdev_prn_copy_scan_lines(pdev,0,out_buf,out_size);
+ if (code < 0)
+ goto xit;
while (write(fileno(prn),out_buf,out_size)!=out_size)
{
if (ioctl(fileno(prn),LPVIIOC_GETERR,&lpvierr)!=0)
@@ -182,6 +188,7 @@ sparc_print_page(gx_device_printer *pdev, FILE *prn)
errprintf(pdev->memory, "OK.\n");
warning=0;
}
+xit:
gs_free(pdev->memory, out_buf,out_size,1,"sparc_print_page: out_buf");
- return 0;
+ return code;
}
diff --git a/devices/gdevstc.c b/devices/gdevstc.c
index 9040f062..951ded0e 100644
--- a/devices/gdevstc.c
+++ b/devices/gdevstc.c
@@ -362,6 +362,7 @@ stc_print_page(gx_device_printer * pdev, gp_file *prn_stream)
int prt_pixels; /* Number of pixels printed */
byte *col_line; /* A Line with a byte per pixel */
+ int code = 0;
#define OK4GO ((flags & STCOK4GO) != 0)
#define SORRY ( flags &= ~STCOK4GO)
@@ -591,7 +592,11 @@ stc_print_page(gx_device_printer * pdev, gp_file *prn_stream)
if(sd->stc.buf_y < sd->stc.prt_scans) { /* Test for White */
- gdev_prn_get_bits(pdev,sd->stc.buf_y,ext_line,&ext_data);
+ code = gdev_prn_get_bits(pdev,sd->stc.buf_y,ext_line,&ext_data);
+ if (code < 0) {
+ SORRY;
+ goto xit;
+ }
color = stc_iswhite(sd,prt_pixels,ext_data) ? ext_size : 0;
@@ -747,6 +752,7 @@ stc_print_page(gx_device_printer * pdev, gp_file *prn_stream)
*** Release the dynamic memory
***/
+xit:
if(ext_line != NULL)
gs_free(sd->memory, ext_line,ext_size,1,"stc_print_page/ext_line");
diff --git a/devices/gdevtfnx.c b/devices/gdevtfnx.c
index f07cc153..d9593cd2 100644
--- a/devices/gdevtfnx.c
+++ b/devices/gdevtfnx.c
@@ -126,13 +126,6 @@ tiff12_print_page(gx_device_printer * pdev, gp_file * file)
gx_device_tiff *const tfdev = (gx_device_tiff *)pdev;
int code;
- /* open the TIFF device */
- if (gdev_prn_file_is_new(pdev)) {
- tfdev->tif = tiff_from_filep(pdev, pdev->dname, file, tfdev->BigEndian, tfdev->UseBigTIFF);
- if (!tfdev->tif)
- return_error(gs_error_invalidfileaccess);
- }
-
code = gdev_tiff_begin_page(tfdev, file);
if (code < 0)
return code;
@@ -146,12 +139,16 @@ tiff12_print_page(gx_device_printer * pdev, gp_file * file)
{
int y;
int size = gdev_prn_raster(pdev);
- byte *data = gs_alloc_bytes(pdev->memory, size, "tiff12_print_page");
+
+ /* We allocate an extra 5 bytes to avoid buffer overflow when accessing
+ src[5] below, if size if not multiple of 6. This fixes bug-701807. */
+ int size_alloc = size + 5;
+ byte *data = gs_alloc_bytes(pdev->memory, size_alloc, "tiff12_print_page");
if (data == 0)
return_error(gs_error_VMerror);
- memset(data, 0, size);
+ memset(data, 0, size_alloc);
for (y = 0; y < pdev->height; ++y) {
const byte *src;
@@ -185,13 +182,6 @@ tiff_rgb_print_page(gx_device_printer * pdev, gp_file * file)
gx_device_tiff *const tfdev = (gx_device_tiff *)pdev;
int code;
- /* open the TIFF device */
- if (gdev_prn_file_is_new(pdev)) {
- tfdev->tif = tiff_from_filep(pdev, pdev->dname, file, tfdev->BigEndian, tfdev->UseBigTIFF);
- if (!tfdev->tif)
- return_error(gs_error_invalidfileaccess);
- }
-
code = gdev_tiff_begin_page(tfdev, file);
if (code < 0)
return code;
diff --git a/devices/gdevtifs.c b/devices/gdevtifs.c
index 722640aa..2d612bac 100644
--- a/devices/gdevtifs.c
+++ b/devices/gdevtifs.c
@@ -331,6 +331,9 @@ int gdev_tiff_begin_page(gx_device_tiff *tfdev,
profile_struct->device_profile[0], profile_struct->postren_profile,
&rendering_params);
}
+ if (tfdev->icclink == NULL) {
+ return_error(gs_error_VMerror);
+ }
/* If it is identity, release it now and set link to NULL */
if (tfdev->icclink->is_identity) {
tfdev->icclink->procs.free_link(tfdev->icclink);
@@ -404,8 +407,13 @@ int tiff_set_fields_for_printer(gx_device_printer *pdev,
time_t t;
char dateTimeValue[20];
+#ifdef CLUSTER
+ memset(&t, 0, sizeof(t));
+ memset(&tms, 0, sizeof(tms));
+#else
time(&t);
tms = *localtime(&t);
+#endif
gs_sprintf(dateTimeValue, "%04d:%02d:%02d %02d:%02d:%02d",
tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday,
tms.tm_hour, tms.tm_min, tms.tm_sec);
@@ -472,7 +480,7 @@ tiff_print_page(gx_device_printer *dev, TIFF *tif, int min_feature_size)
for (row = 0; row < dev->height && code >= 0; row++) {
code = gdev_prn_copy_scan_lines(dev, row, data, size);
if (code < 0)
- break;
+ goto cleanup;
if (min_feature_size > 1) {
filtered_count = min_feature_size_process(data, min_feature_data);
if (filtered_count == 0)
diff --git a/devices/gdevtknk.c b/devices/gdevtknk.c
index cd88a42d..35d98bfe 100644
--- a/devices/gdevtknk.c
+++ b/devices/gdevtknk.c
@@ -125,6 +125,7 @@ tekink_print_page(gx_device_printer *pdev, gp_file *prn_stream)
register byte bdata,mdata,ydata,cdata;
register byte mask,inbyte;
register byte *indataend,*outdataend;
+ int code = 0;
/* Allocate a temporary buffer for color separation.
The buffer is partitioned into an input buffer and four
@@ -134,7 +135,8 @@ tekink_print_page(gx_device_printer *pdev, gp_file *prn_stream)
line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
color_line_size=(pdev->width+7)/8;
indata1=(byte *)malloc(line_size+4*(color_line_size+1));
- if (indata1==NULL) return -1;
+ if (indata1==NULL)
+ return_error(gs_error_VMerror);
/* pointers to the partions */
indataend=indata1+line_size;
bdata1=indataend;
@@ -150,7 +152,9 @@ tekink_print_page(gx_device_printer *pdev, gp_file *prn_stream)
scan_lines=pdev->height;
for (scan_line=0;scan_line<scan_lines;scan_line++){
/* get data */
- gdev_prn_copy_scan_lines(pdev,scan_line,indata1,line_size);
+ code = gdev_prn_copy_scan_lines(pdev,scan_line,indata1,line_size);
+ if (code < 0)
+ goto xit;
/* Separate data into color planes */
bdatap = bdata1+1;
mdatap = mdata1+1;
@@ -248,7 +252,8 @@ tekink_print_page(gx_device_printer *pdev, gp_file *prn_stream)
gp_fputs("\f",prn_stream);
}
+xit:
/* Deallocate temp buffer */
free(indata1);
- return 0;
+ return code;
}
diff --git a/devices/gdevtsep.c b/devices/gdevtsep.c
index 5fb1025e..7fddf1c7 100644
--- a/devices/gdevtsep.c
+++ b/devices/gdevtsep.c
@@ -38,6 +38,7 @@
#include "gsequivc.h"
#include "gxdht.h"
#include "gxiodev.h"
+#include "gzht.h"
#include "stdio_.h"
#include "ctype_.h"
#include "gxgetbit.h"
@@ -49,6 +50,9 @@
#include "gsicc_cache.h"
#include "gxdevsop.h"
#include "gsicc.h"
+#ifdef WITH_CAL
+#include "cal.h"
+#endif
/*
* Some of the code in this module is based upon the gdevtfnx.c module.
@@ -1184,7 +1188,7 @@ tiffsep_put_params(gx_device * pdev, gs_param_list * plist)
}
switch (code = param_read_int(plist, (param_name = "MaxSpots"), &max_spots)) {
case 0:
- if ((max_spots >= 0) || (max_spots <= GS_CLIENT_COLOR_MAX_COMPONENTS-4)) {
+ if ((max_spots >= 0) && (max_spots <= GS_CLIENT_COLOR_MAX_COMPONENTS-4)) {
pdevn->max_spots = max_spots;
break;
}
@@ -1230,9 +1234,7 @@ tiffsep1_put_params(gx_device * pdev, gs_param_list * plist)
static void build_comp_to_sep_map(tiffsep_device *, short *);
static int number_output_separations(int, int, int, int);
static int create_separation_file_name(tiffsep_device *, char *, uint, int, bool);
-static byte * threshold_from_order( gx_ht_order *, int *, int *, gs_memory_t *);
static int sep1_ht_order_to_thresholds(gx_device *pdev, const gs_gstate *pgs);
-static void sep1_free_thresholds(tiffsep1_device *);
dev_proc_fill_path(clist_fill_path);
/* Open the tiffsep1 device. This will now be using planar buffers so that
@@ -1372,10 +1374,6 @@ tiffsep1_prn_close(gx_device * pdev)
tfdev->tiff[comp_num] = NULL;
}
}
- /* If we have thresholds, free them and clear the pointers */
- if( tfdev->thresholds[0].dstart != NULL) {
- sep1_free_thresholds(tfdev);
- }
done:
@@ -1796,6 +1794,9 @@ tiffsep_prn_open(gx_device * pdev)
profile_struct->device_profile[0], profile_struct->postren_profile,
&rendering_params);
}
+ if (pdev_sep->icclink == NULL) {
+ return_error(gs_error_VMerror);
+ }
/* If it is identity, release it now and set link to NULL */
if (pdev_sep->icclink->is_identity) {
pdev_sep->icclink->procs.free_link(pdev_sep->icclink);
@@ -2110,10 +2111,11 @@ sep1_ht_order_to_thresholds(gx_device *pdev, const gs_gstate *pgs)
{
tiffsep1_device * const tfdev = (tiffsep1_device *)pdev;
gs_memory_t *mem = pdev->memory;
+ int code;
- /* If we have thresholds, free them and clear the pointers */
+ /* If we have thresholds, clear the pointers */
if( tfdev->thresholds[0].dstart != NULL) {
- sep1_free_thresholds(tfdev);
+ tfdev->thresholds[0].dstart = NULL;
} else {
int nc, j;
gx_ht_order *d_order;
@@ -2125,130 +2127,39 @@ sep1_ht_order_to_thresholds(gx_device *pdev, const gs_gstate *pgs)
}
nc = pgs->dev_ht->num_comp;
for( j=0; j<nc; j++ ) {
+ int x, y;
+
d_order = &(pgs->dev_ht->components[j].corder);
dptr = &(tfdev->thresholds[j]);
- dptr->dstart = threshold_from_order( d_order, &(dptr->dwidth), &(dptr->dheight), mem);
- if( dptr->dstart == NULL ) {
+ /* In order to use the function from gsht.c we need to set the color_info */
+ /* values it uses to reflect the eventual 1-bit output, not contone */
+ pdev->color_info.dither_grays = pdev->color_info.dither_colors = 2;
+ pdev->color_info.polarity = GX_CINFO_POLARITY_ADDITIVE;
+ code = gx_ht_construct_threshold(d_order, pdev, pgs, j);
+ if( code < 0 ) {
emprintf(mem,
"sep1_order_to_thresholds: conversion to thresholds failed.\n");
- return_error(gs_error_rangecheck); /* error condition */
+ return_error(code); /* error condition */
}
+ pdev->color_info.dither_grays = pdev->color_info.dither_colors = 256;
+ pdev->color_info.polarity = GX_CINFO_POLARITY_SUBTRACTIVE;
+ /* Invert the thresholds so we (almost) match pbmraw dithered output */
+ for (y=0; y<d_order->full_height; y++) {
+ byte *s = d_order->threshold;
+ int s_offset = y * d_order->width;
+
+ for (x=0; x<d_order->width; x++) {
+ s[s_offset + x] = 256 - s[s_offset + x];
+ }
+ }
+ dptr->dstart = d_order->threshold;
+ dptr->dwidth = d_order->width;
+ dptr->dheight = d_order->full_height;
}
}
return 0;
}
-static void
-sep1_free_thresholds(tiffsep1_device *tfdev)
-{
- int i;
-
- for (i=0; i < GX_DEVICE_COLOR_MAX_COMPONENTS + 1; i++) {
- threshold_array_t *dptr = &(tfdev->thresholds[i]);
-
- if (dptr->dstart != NULL) {
- gs_free(tfdev->memory, dptr->dstart, dptr->dwidth * dptr->dheight, 1,
- "tiffsep1_threshold_array");
- dptr->dstart = NULL;
- }
- }
-}
-
-/************************************************************************/
-/* This routine generates a threshold matrix for use in */
-/* the color dithering routine from the "order" info in */
-/* the current graphics state. */
-/* */
-/************************************************************************/
-
-static byte*
-threshold_from_order( gx_ht_order *d_order, int *Width, int *Height, gs_memory_t *memory)
-{
- int i, j, l, prev_l;
- unsigned char *thresh;
- int num_repeat, shift;
-
- /* We can have simple or complete orders. Simple ones tile the threshold
- with shifts. To handle those we simply loop over the number of
- repeats making sure to shift columns when we set our threshold values */
- num_repeat = d_order->full_height / d_order->height;
- shift = d_order->shift;
-
-#ifdef DEBUG
-if ( gs_debug_c('h') ) {
- dmprintf2(memory, " width=%d, height=%d,",
- d_order->width, d_order->height );
- dmprintf2(memory, " num_levels=%d, raster=%d\n",
- d_order->num_levels, d_order->raster );
-}
-#endif
-
- thresh = (byte *)gs_malloc(memory, d_order->width * d_order->full_height, 1,
- "tiffsep1_threshold_array");
- if( thresh == NULL ) {
-#ifdef DEBUG
- emprintf(memory, "threshold_from_order, malloc failed\n");
- emprintf2(memory, " width=%d, height=%d,",
- d_order->width, d_order->height );
- emprintf2(memory, " num_levels=%d, raster=%d\n",
- d_order->num_levels, d_order->raster );
-#endif
- return thresh ; /* error if allocation failed */
- }
- for( i=0; i<d_order->num_bits; i++ )
- thresh[i] = 1;
-
- *Width = d_order->width;
- *Height = d_order->full_height;
-
- prev_l = 0;
- l = 1;
- while( l < d_order->num_levels ) {
- if( d_order->levels[l] > d_order->levels[prev_l] ) {
- int t_level = (256*l)/d_order->num_levels;
-
-#ifdef DEBUG
- if ( gs_debug_c('h') )
- dmprintf2(memory, " level[%3d]=%3d\n", l, d_order->levels[l]);
-#endif
- for( j=d_order->levels[prev_l]; j<d_order->levels[l]; j++) {
- gs_int_point col_row = { 0, 0 };
- int col_kk, row_kk, kk;
-
- d_order->procs->bit_index(d_order, j, &col_row);
-#ifdef DEBUG
- if ( gs_debug_c('h') )
- dmprintf3(memory, "row=%2d, col=%2d, t_level=%3d\n",
- col_row.y, col_row.x, t_level);
-#endif
- if( col_row.x < (int)d_order->width ) {
- for (kk = 0; kk < num_repeat; kk++) {
- row_kk = col_row.y + kk * d_order->height;
- col_kk = col_row.x + kk * shift;
- col_kk = col_kk % d_order->width;
- *(thresh + col_kk + (row_kk * d_order->width)) = t_level;
- }
- }
- }
- prev_l = l;
- }
- l++;
- }
-
-#ifdef DEBUG
- if (gs_debug_c('h')) {
- for( i=0; i<(int)d_order->height; i++ ) {
- dmprintf1(memory, "threshold array row %3d= ", i);
- for( j=(int)d_order->width-1; j>=0; j-- )
- dmprintf1(memory, "%3d ", *(thresh+j+(i*d_order->width)) );
- dmprintf(memory, "\n");
- }
- }
-#endif
-
- return thresh;
-}
-
/*
* This function prints out CMYK value with separation name for every
* separation. Where the original alternate colour space was DeviceCMYK, and the output
@@ -2365,6 +2276,7 @@ tiffsep_print_page(gx_device_printer * pdev, gp_file * file)
"\nUse of the %%d format is required to output more than one page to tiffsep.\n"
"See doc/Devices.htm#TIFF for details.\n\n");
code = gs_note_error(gs_error_ioerror);
+ goto done;
}
/* Write the page directory for the CMYK equivalent file. */
if (!tfdev->comp_file) {
@@ -2679,6 +2591,26 @@ done:
return code;
}
+#ifdef WITH_CAL
+static void
+ht_callback(cal_halftone_data_t *ht, void *arg)
+{
+ tiffsep1_device *tfdev = (tiffsep1_device *)arg;
+ int num_std_colorants = tfdev->devn_params.num_std_colorant_names;
+ int num_order = tfdev->devn_params.num_separation_order_names;
+ int num_spot = tfdev->devn_params.separations.num_separations;
+ int comp_num;
+ int num_comp = number_output_separations(tfdev->color_info.num_components,
+ num_std_colorants, num_order, num_spot);
+ /* Deliberately cast away const, cos tifflib has a bad interface. */
+ unsigned char *data = (unsigned char *)ht->data;
+
+ for (comp_num = 0; comp_num < num_comp; comp_num++) {
+ TIFFWriteScanline(tfdev->tiff[comp_num], &data[ht->raster*comp_num], ht->y, 0);
+ }
+}
+#endif
+
/*
* Output the image data for the tiff separation (tiffsep1) device. The data
* for the tiffsep1 device is written in separate planes to separate files.
@@ -2726,6 +2658,7 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
"\nUse of the %%d format is required to output more than one page to tiffsep1.\n"
"See doc/Devices.htm#TIFF for details.\n\n");
code = gs_note_error(gs_error_ioerror);
+ goto done;
}
/* If the output file is on disk and the name contains a page #, */
/* then delete the previous file. */
@@ -2809,8 +2742,41 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
int pixel, y;
gs_get_bits_params_t params;
gs_int_rect rect;
+ uint32_t *dithered_line = NULL;
+
+#ifdef WITH_CAL
+ cal_context *cal = pdev->memory->gs_lib_ctx->core->cal_ctx;
+ cal_halftone *cal_ht = NULL;
+ cal_matrix matrix = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
+
+ cal_ht = cal_halftone_init(cal,
+ pdev->memory->non_gc_memory,
+ pdev->width,
+ pdev->height,
+ &matrix,
+ comp_num,
+ NULL,
+ 0,
+ 0,
+ pdev->width,
+ pdev->height,
+ 0);
+ if (cal_ht != NULL) {
+ for (comp_num = 0; comp_num < num_comp; comp_num++)
+ if (cal_halftone_add_screen(cal,
+ pdev->memory->non_gc_memory,
+ cal_ht,
+ 0,
+ tfdev->thresholds[comp_num].dwidth,
+ tfdev->thresholds[comp_num].dheight,
+ 0,
+ 0,
+ tfdev->thresholds[comp_num].dstart) < 0)
+ goto cal_fail;
+ } else
+#endif
/* the dithered_line is assumed to be 32-bit aligned by the alloc */
- uint32_t *dithered_line = (uint32_t *)gs_alloc_bytes(pdev->memory, dithered_raster,
+ dithered_line = (uint32_t *)gs_alloc_bytes(pdev->memory, dithered_raster,
"tiffsep1_print_page");
memset(planes, 0, sizeof(*planes) * GS_CLIENT_COLOR_MAX_COMPONENTS);
@@ -2832,7 +2798,11 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
}
}
+#ifdef WITH_CAL
+ if (code < 0 || (cal_ht == NULL && dithered_line == NULL)) {
+#else
if (code < 0 || dithered_line == NULL) {
+#endif
code = gs_note_error(gs_error_VMerror);
goto cleanup;
}
@@ -2853,6 +2823,16 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
if (code < 0)
break;
+#ifdef WITH_CAL
+ if(cal_ht != NULL) {
+ if (cal_halftone_process_planar(cal_ht,
+ pdev->memory->non_gc_memory,
+ (const byte * const *)&params.data[0],
+ ht_callback,
+ tfdev) < 0)
+ goto cal_fail;
+ } else
+#endif
/* Dither the separation and write it out */
for (comp_num = 0; comp_num < num_comp; comp_num++ ) {
@@ -2869,8 +2849,8 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
*/
#define USE_32_BIT_WRITES
byte *thresh_line_base = tfdev->thresholds[comp_num].dstart +
- ((y % tfdev->thresholds[comp_num].dheight) *
- tfdev->thresholds[comp_num].dwidth) ;
+ ((y % tfdev->thresholds[comp_num].dheight) *
+ tfdev->thresholds[comp_num].dwidth) ;
byte *thresh_ptr = thresh_line_base;
byte *thresh_limit = thresh_ptr + tfdev->thresholds[comp_num].dwidth;
byte *src = params.data[comp_num];
@@ -2941,6 +2921,14 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file)
}
code = code1;
+#ifdef WITH_CAL
+ if(0) {
+cal_fail:
+ code = gs_error_unknownerror;
+ }
+ cal_halftone_fin(cal_ht, pdev->memory->non_gc_memory);
+#endif
+
/* free any allocations and exit with code */
cleanup:
gs_free_object(pdev->memory, dithered_line, "tiffsep1_print_page");
diff --git a/devices/gdevwpr2.c b/devices/gdevwpr2.c
index 3f834b57..29af469b 100644
--- a/devices/gdevwpr2.c
+++ b/devices/gdevwpr2.c
@@ -571,9 +571,12 @@ win_pr2_print_page(gx_device_printer * pdev, gp_file * file)
lines = scan_lines - y;
else
lines = yslice;
- for (i = 0; i < lines; i++)
- gdev_prn_copy_scan_lines(pdev, y + i,
+ for (i = 0; i < lines; i++) {
+ code = gdev_prn_copy_scan_lines(pdev, y + i,
row + (bmp_raster * (lines - 1 - i)), raster);
+ if (code < 0)
+ goto xit;
+ }
if (ratio > 1) {
StretchDIBits(wdev->hdcprn, 0, y*ratio, pdev->width*ratio, lines*ratio,
@@ -618,6 +621,7 @@ win_pr2_print_page(gx_device_printer * pdev, gp_file * file)
ShowWindow(wdev->hDlgModeless, SW_HIDE);
}
+xit:
GlobalUnlock(hrow);
GlobalFree(hrow);
diff --git a/devices/gdevx.h b/devices/gdevx.h
index d267afdd..0e97d934 100644
--- a/devices/gdevx.h
+++ b/devices/gdevx.h
@@ -20,9 +20,6 @@
#ifndef gdevx_INCLUDED
# define gdevx_INCLUDED
-/* Define the type of an X pixel. */
-typedef unsigned long x_pixel;
-
#include "gdevbbox.h"
#include "gdevxcmp.h"
diff --git a/devices/gdevxcf.c b/devices/gdevxcf.c
index 39c72831..a7e66174 100644
--- a/devices/gdevxcf.c
+++ b/devices/gdevxcf.c
@@ -1270,11 +1270,18 @@ xcf_write_image_data(xcf_write_ctx *xc, gx_device_printer *pdev)
tile_data = (byte **)gs_alloc_bytes(pdev->memory,
xc->n_tiles_x * sizeof(byte *),
"xcf_write_image_data");
+ if (line == NULL || tile_data == NULL) {
+ code = gs_error_VMerror;
+ goto xit;
+ }
+ memset(tile_data, 0, xc->n_tiles_x * sizeof(byte *));
for (tile_i = 0; tile_i < xc->n_tiles_x; tile_i++) {
int tile_bytes = xcf_tile_sizeof(xc, tile_i) * bytes_pp;
tile_data[tile_i] = gs_alloc_bytes(pdev->memory, tile_bytes,
"xcf_write_image_data");
+ if (tile_data[tile_i] == NULL)
+ goto xit;
}
for (tile_j = 0; tile_j < xc->n_tiles_y; tile_j++) {
int y0, y1;
@@ -1285,6 +1292,8 @@ xcf_write_image_data(xcf_write_ctx *xc, gx_device_printer *pdev)
y1 = min(xc->height, y0 + TILE_HEIGHT);
for (y = y0; y < y1; y++) {
code = gdev_prn_get_bits(pdev, y, line, &row);
+ if (code < 0)
+ goto xit;
if (link == NULL)
xcf_shuffle_to_tile(xc, tile_data, row, y);
else
@@ -1303,9 +1312,12 @@ xcf_write_image_data(xcf_write_ctx *xc, gx_device_printer *pdev)
}
}
- for (tile_i = 0; tile_i < xc->n_tiles_x; tile_i++) {
- gs_free_object(pdev->memory, tile_data[tile_i],
- "xcf_write_image_data");
+xit:
+ if (tile_data != NULL) {
+ for (tile_i = 0; tile_i < xc->n_tiles_x; tile_i++) {
+ gs_free_object(pdev->memory, tile_data[tile_i],
+ "xcf_write_image_data");
+ }
}
gs_free_object(pdev->memory, tile_data, "xcf_write_image_data");
gs_free_object(pdev->memory, line, "xcf_write_image_data");
diff --git a/devices/gdevxcmp.c b/devices/gdevxcmp.c
index 0aa73314..5cf5a56c 100644
--- a/devices/gdevxcmp.c
+++ b/devices/gdevxcmp.c
@@ -134,13 +134,16 @@ alloc_std_cmap(gx_device_X *xdev, bool colored)
/* Allocate the dynamic color table, if needed and possible. */
/* Uses: vinfo, cman.num_rgb. Sets: cman.dynamic.*. */
-static void
+/* Return true if the allocation was successful. */
+static bool
alloc_dynamic_colors(gx_device_X * xdev, int num_colors)
{
if (num_colors > 0) {
xdev->cman.dynamic.colors = (x11_color_t **)
gs_malloc(xdev->memory, sizeof(x11_color_t *), xdev->cman.num_rgb,
"x11 cman.dynamic.colors");
+ if (xdev->cman.dynamic.colors == NULL)
+ return false;
if (xdev->cman.dynamic.colors) {
int i;
@@ -152,6 +155,7 @@ alloc_dynamic_colors(gx_device_X * xdev, int num_colors)
xdev->cman.dynamic.used = 0;
}
}
+ return true;
}
/* Allocate an X color, updating the reverse map. */
@@ -388,8 +392,9 @@ gdev_x_setup_colors(gx_device_X * xdev)
}
/* Allocate the dynamic color table. */
- alloc_dynamic_colors(xdev, CUBE(xdev->cman.num_rgb) -
- CUBE(xdev->color_info.dither_colors));
+ if (!alloc_dynamic_colors(xdev, CUBE(xdev->cman.num_rgb) -
+ CUBE(xdev->color_info.dither_colors)))
+ return_error(gs_error_VMerror);
#undef CUBE
#undef CBRT
break;
@@ -436,8 +441,9 @@ grayscale:
}
/* Allocate the dynamic color table. */
- alloc_dynamic_colors(xdev, xdev->cman.num_rgb -
- xdev->color_info.dither_grays);
+ if (!alloc_dynamic_colors(xdev, xdev->cman.num_rgb -
+ xdev->color_info.dither_grays))
+ return_error(gs_error_VMerror);
break;
case 'M':
monochrome:
diff --git a/devices/gdevxcmp.h b/devices/gdevxcmp.h
index c64c81d2..0a71dd50 100644
--- a/devices/gdevxcmp.h
+++ b/devices/gdevxcmp.h
@@ -23,6 +23,9 @@
#include "std.h"
#include "gxcvalue.h"
+/* Define the type of an X pixel. */
+typedef unsigned long x_pixel;
+
/*
* The structure defined in this file is used in only one place, in the
* gx_device_X structure defined in gdevx.h. We define it as a separate
diff --git a/devices/gdevxini.c b/devices/gdevxini.c
index 98c743a9..3b46b182 100644
--- a/devices/gdevxini.c
+++ b/devices/gdevxini.c
@@ -634,6 +634,7 @@ x_set_buffer(gx_device_X * xdev)
xdev->buffer = buffer;
mdev->width = xdev->width;
mdev->height = xdev->height;
+ rc_decrement(mdev->icc_struct, "x_set_buffer");
mdev->icc_struct = xdev->icc_struct;
rc_increment(xdev->icc_struct);
mdev->color_info = xdev->orig_color_info;
@@ -939,6 +940,8 @@ gdev_x_put_params(gx_device * dev, gs_param_list * plist)
int
gdev_x_close(gx_device_X *xdev)
{
+ long MaxBitmap = xdev->space_params.MaxBitmap;
+
if (xdev->ghostview)
gdev_x_send_event(xdev, xdev->DONE);
if (xdev->vinfo) {
@@ -952,5 +955,10 @@ gdev_x_close(gx_device_X *xdev)
XFreeGC(xdev->dpy, xdev->gc);
XCloseDisplay(xdev->dpy);
+ /* MaxBitmap == 0 ensures x_set_buffer() configures as non-buffering */
+ xdev->space_params.MaxBitmap = 0;
+ x_set_buffer(xdev);
+ xdev->space_params.MaxBitmap = MaxBitmap;
+
return 0;
}
diff --git a/devices/vector/gdevagl.c b/devices/vector/gdevagl.c
index b2813e04..f9428a6e 100644
--- a/devices/vector/gdevagl.c
+++ b/devices/vector/gdevagl.c
@@ -4308,5 +4308,5 @@ treble_glyph_list_t TrebleGlyphList[] = {
quad_glyph_list_t QuadGlyphList[] = {
{"rehyehaleflamarabic", {0x0631, 0xFEF3, 0xFE8E, 0x0644}},
- {0x00, {0,0,0}}
+ {0x00, {0,0,0,0}}
};
diff --git a/devices/vector/gdevagl.h b/devices/vector/gdevagl.h
index e509f897..e3569226 100644
--- a/devices/vector/gdevagl.h
+++ b/devices/vector/gdevagl.h
@@ -33,5 +33,5 @@ typedef struct treble_glyph_list_s {
typedef struct quad_glyph_list_s {
const char *Glyph;
- short Unicode[4];
+ unsigned short Unicode[4];
} quad_glyph_list_t;
diff --git a/devices/vector/gdevpdf.c b/devices/vector/gdevpdf.c
index d918d603..b25a4a6a 100644
--- a/devices/vector/gdevpdf.c
+++ b/devices/vector/gdevpdf.c
@@ -1020,6 +1020,7 @@ pdf_close_page(gx_device_pdf * pdev, int num_copies)
page->contents_id = pdev->contents_id;
page->NumCopies_set = pdev->NumCopies_set;
page->NumCopies = pdev->NumCopies;
+ page->UserUnit = pdev->UserUnit;
pdf_record_usage(pdev, pdev->contents_id, pdev->next_page);
pdf_record_usage(pdev, pdev->contents_length_id, pdev->next_page);
pdf_record_usage(pdev, page->Page->id, pdev->next_page);
@@ -1337,6 +1338,9 @@ pdf_write_page(gx_device_pdf *pdev, int page_num)
bleedbox[0], bleedbox[1], bleedbox[2], bleedbox[3]);
}
pdf_print_orientation(pdev, page);
+ if (page->UserUnit != 1)
+ pprintg1(s, "/UserUnit %g\n", page->UserUnit);
+
pprintld1(s, "/Parent %ld 0 R\n", pdev->Pages->id);
if (pdev->ForOPDFRead && pdev->DoNumCopies && !pdev->ProduceDSC) {
if (page->NumCopies_set)
diff --git a/devices/vector/gdevpdfb.h b/devices/vector/gdevpdfb.h
index d000ee96..5ea7a355 100644
--- a/devices/vector/gdevpdfb.h
+++ b/devices/vector/gdevpdfb.h
@@ -98,7 +98,16 @@ const gx_device_pdf PDF_DEVICE_IDENT =
NULL, /* push_transparency_state */
NULL, /* pop_transparency_state */
NULL, /* put_image */
- gdev_pdf_dev_spec_op /* dev_spec_op */
+ gdev_pdf_dev_spec_op, /* dev_spec_op */
+ NULL, /* copy_planes */
+ NULL, /* get_profile */
+ NULL, /* set_graphics_type_tag */
+ NULL, /* strip_copy_rop2 */
+ NULL, /* strip_tile_rect_devn */
+ NULL, /* copy_alpha_hl_color */
+ NULL, /* process_page */
+ NULL, /* transform_pixel_region */
+ gdev_pdf_fill_stroke_path /* fill_stroke_path */
},
psdf_initial_values(PSDF_VERSION_INITIAL, 0 /*false */ ), /* (!ASCII85EncodePages) */
0, /* pdf_font_dir */
@@ -162,9 +171,9 @@ const gx_device_pdf PDF_DEVICE_IDENT =
{-1, -1}, /* page_dsc_info */
0 /*false*/, /* fill_overprint */
0 /*false*/, /* stroke_overprint */
+ 1 /* Absolute Colorimetric */, /* rendering intent */
0 /*false*/, /* remap_fill_coilor */
0 /*false*/, /* remap_stroke_coilor */
- 0, /* overprint_mode */
gs_no_id, /* halftone_id */
{gs_no_id, gs_no_id, gs_no_id, gs_no_id}, /* transfer_ids */
0, /* transfer_not_identity */
@@ -288,7 +297,8 @@ const gx_device_pdf PDF_DEVICE_IDENT =
-1, /* Last Form ID, start with -1 which means 'none' */
0, /* ExtensionMetadata */
0, /* PDFFormName */
- 0 /* PassThroughWriter */
+ 0, /* PassThroughWriter */
+ 1.0 /* UserUnit */
};
#else
diff --git a/devices/vector/gdevpdfd.c b/devices/vector/gdevpdfd.c
index 28c6b01d..1e62bad1 100644
--- a/devices/vector/gdevpdfd.c
+++ b/devices/vector/gdevpdfd.c
@@ -846,7 +846,7 @@ prepare_fill_with_clip(gx_device_pdf *pdev, const gs_gstate * pgs,
if (code < 0)
return code;
}
- code = pdf_prepare_fill(pdev, pgs);
+ code = pdf_prepare_fill(pdev, pgs, false);
if (code < 0)
return code;
return pdf_put_clip_path(pdev, pcpath);
@@ -1743,7 +1743,7 @@ gdev_pdf_stroke_path(gx_device * dev, const gs_gstate * pgs,
code = pdf_open_page(pdev, PDF_IN_STREAM);
if (code < 0)
return code;
- code = pdf_prepare_stroke(pdev, pgs);
+ code = pdf_prepare_stroke(pdev, pgs, false);
if (code == gs_error_rangecheck) {
/* Fallback to the default implermentation for handling
a transparency with CompatibilityLevel<=1.3 . */
@@ -1866,6 +1866,205 @@ gdev_pdf_stroke_path(gx_device * dev, const gs_gstate * pgs,
return 0;
}
+int
+gdev_pdf_fill_stroke_path(gx_device *dev, const gs_gstate *pgs, gx_path *ppath,
+ const gx_fill_params *fill_params, const gx_drawing_color *pdcolor_fill,
+ const gx_stroke_params *stroke_params, const gx_drawing_color *pdcolor_stroke,
+ const gx_clip_path *pcpath)
+{
+ gx_device_pdf *pdev = (gx_device_pdf *) dev;
+ int code;
+ bool new_clip;
+ bool have_path;
+
+ have_path = !gx_path_is_void(ppath);
+ if (!have_path) {
+ if (!pdev->vg_initial_set) {
+ /* See lib/gs_pdfwr.ps about "initial graphic state". */
+ pdf_prepare_initial_viewer_state(pdev, pgs);
+ pdf_reset_graphics(pdev);
+ return 0;
+ }
+ }
+
+ /* PostScript doesn't have a fill+stroke primitive, so break it into two operations
+ * PDF 1.2 only has a single overprint setting, we can't be certainto match that
+ * Because our inpu tcould be from a higher level. So be sure and break it into
+ * 2 operations.
+ */
+ if (pdev->ForOPDFRead || pdev->CompatibilityLevel < 1.3) {
+ code = gdev_pdf_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (code < 0)
+ return code;
+ gs_swapcolors_quick(pgs);
+ code = gdev_pdf_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ gs_swapcolors_quick(pgs);
+ return code;
+ } else {
+ bool set_ctm;
+ gs_matrix mat;
+ double scale, path_scale;
+ double prescale = 1;
+ gs_fixed_rect bbox;
+ gs_path_enum cenum;
+ gdev_vector_dopath_state_t state;
+ stream *s = pdev->strm;
+ /*
+ * Check for an empty clipping path.
+ */
+ if (pcpath) {
+ gs_fixed_rect cbox;
+
+ gx_cpath_outer_box(pcpath, &cbox);
+ if (cbox.p.x >= cbox.q.x || cbox.p.y >= cbox.q.y)
+ return 1; /* empty clipping path */
+// *box = cbox;
+ }
+ code = pdf_check_soft_mask(pdev, (gs_gstate *)pgs);
+ if (code < 0)
+ return code;
+
+ new_clip = pdf_must_put_clip_path(pdev, pcpath);
+ if (have_path || pdev->context == PDF_IN_NONE || new_clip) {
+ if (new_clip)
+ code = pdf_unclip(pdev);
+ else
+ code = pdf_open_page(pdev, PDF_IN_STREAM);
+ if (code < 0)
+ return code;
+ }
+ code = pdf_prepare_fill_stroke(pdev, pgs, false);
+ if (code < 0)
+ return code;
+
+ code = pdf_put_clip_path(pdev, pcpath);
+ if (code < 0)
+ return code;
+ /*
+ * If the CTM is not uniform, stroke width depends on angle.
+ * We'd like to avoid resetting the CTM, so we check for uniform
+ * CTMs explicitly. Note that in PDF, unlike PostScript, it is
+ * the CTM at the time of the stroke operation, not the CTM at
+ * the time the path was constructed, that is used for transforming
+ * the points of the path; so if we have to reset the CTM, we must
+ * do it before constructing the path, and inverse-transform all
+ * the coordinates.
+ */
+ set_ctm = (bool)gdev_vector_stroke_scaling((gx_device_vector *)pdev,
+ pgs, &scale, &mat);
+ if (set_ctm && ((pgs->ctm.xx == 0 && pgs->ctm.xy == 0) ||
+ (pgs->ctm.yx == 0 && pgs->ctm.yy == 0))) {
+ /* Acrobat Reader 5 and Adobe Reader 6 issues
+ the "Wrong operand type" error with matrices, which have 3 zero coefs.
+ Besides that, we found that Acrobat Reader 4, Acrobat Reader 5
+ and Adobe Reader 6 all store the current path in user space
+ and apply CTM in the time of stroking - See the bug 687901.
+ Therefore a precise conversion of Postscript to PDF isn't possible in this case.
+ Adobe viewers render a line with a constant width instead.
+ At last, with set_ctm == true we need the inverse matrix in
+ gdev_vector_dopath. Therefore we exclude projection matrices
+ (see bug 688363). */
+ set_ctm = false;
+ scale = fabs(pgs->ctm.xx + pgs->ctm.xy + pgs->ctm.yx + pgs->ctm.yy) /* Using the non-zero coeff. */
+ / sqrt(2); /* Empirically from Adobe. */
+ }
+ if (set_ctm) {
+ /*
+ * We want a scaling factor that will bring the largest reasonable
+ * user coordinate within bounds. We choose a factor based on the
+ * minor axis of the transformation. Thanks to Raph Levien for
+ * the following formula.
+ */
+ double a = mat.xx, b = mat.xy, c = mat.yx, d = mat.yy;
+ double u = fabs(a * d - b * c);
+ double v = a * a + b * b + c * c + d * d;
+ double minor = (sqrt(v + 2 * u) - sqrt(v - 2 * u)) * 0.5;
+
+ prescale = (minor == 0 || minor > 1 ? 1 : 1 / minor);
+ }
+ gx_path_bbox(ppath, &bbox);
+ {
+ /* Check whether a painting appears inside the clipping box.
+ Doing so after writing the clipping path due to /SP pdfmark
+ uses a special hack with painting outside the clipping box
+ for synchronizing the clipping path (see lib/gs_pdfwr.ps).
+ That hack appeared because there is no way to pass
+ the gs_gstate through gdev_pdf_put_params,
+ which pdfmark is implemented with.
+ */
+ gs_fixed_rect clip_box, stroke_bbox = bbox;
+ gs_point d0, d1;
+ gs_fixed_point p0, p1;
+ fixed bbox_expansion_x, bbox_expansion_y;
+
+ gs_distance_transform(pgs->line_params.half_width, 0, &ctm_only(pgs), &d0);
+ gs_distance_transform(0, pgs->line_params.half_width, &ctm_only(pgs), &d1);
+ p0.x = float2fixed(any_abs(d0.x));
+ p0.y = float2fixed(any_abs(d0.y));
+ p1.x = float2fixed(any_abs(d1.x));
+ p1.y = float2fixed(any_abs(d1.y));
+ bbox_expansion_x = max(p0.x, p1.x) + fixed_1 * 2;
+ bbox_expansion_y = max(p0.y, p1.y) + fixed_1 * 2;
+ stroke_bbox.p.x -= bbox_expansion_x;
+ stroke_bbox.p.y -= bbox_expansion_y;
+ stroke_bbox.q.x += bbox_expansion_x;
+ stroke_bbox.q.y += bbox_expansion_y;
+ gx_cpath_outer_box(pcpath, &clip_box);
+ rect_intersect(stroke_bbox, clip_box);
+ if (stroke_bbox.q.x < stroke_bbox.p.x || stroke_bbox.q.y < stroke_bbox.p.y)
+ return 0;
+ }
+ if (make_rect_scaling(pdev, &bbox, prescale, &path_scale)) {
+ scale /= path_scale;
+ if (set_ctm)
+ gs_matrix_scale(&mat, path_scale, path_scale, &mat);
+ else {
+ gs_make_scaling(path_scale, path_scale, &mat);
+ set_ctm = true;
+ }
+ }
+
+ code = pdf_setfillcolor((gx_device_vector *)pdev, pgs, pdcolor_fill);
+ if (code == gs_error_rangecheck) {
+ /* rangecheck means we revert to the equivalent to the default implementation */
+ code = gdev_pdf_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (code < 0)
+ return code;
+ /* Swap colors to make sure the pgs colorspace is correct for stroke */
+ gs_swapcolors_quick(pgs);
+ code = gdev_pdf_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ gs_swapcolors_quick(pgs);
+ return code;
+ }
+
+ /* Swap colors to make sure the pgs colorspace is correct for stroke */
+ gs_swapcolors_quick(pgs);
+ code = gdev_vector_prepare_stroke((gx_device_vector *)pdev, pgs, stroke_params,
+ pdcolor_stroke, scale);
+ gs_swapcolors_quick(pgs);
+ if (code < 0) {
+ code = gdev_pdf_fill_path(dev, pgs, ppath, fill_params, pdcolor_fill, pcpath);
+ if (code < 0)
+ return code;
+ return gdev_pdf_stroke_path(dev, pgs, ppath, stroke_params, pdcolor_stroke, pcpath);
+ }
+ if (!pdev->HaveStrokeColor)
+ pdev->saved_fill_color = pdev->saved_stroke_color;
+ if (set_ctm)
+ pdf_put_matrix(pdev, "q ", &mat, "cm\n");
+ if (pgs->line_params.dash.offset != 0 || pgs->line_params.dash.pattern_size != 0)
+ code = pdf_write_path(pdev, (gs_path_enum *)&cenum, &state, (gx_path *)ppath, 0, gx_path_type_stroke | gx_path_type_optimize | gx_path_type_dashed_stroke, (set_ctm ? &mat : (const gs_matrix *)0));
+ else
+ code = pdf_write_path(pdev, (gs_path_enum *)&cenum, &state, (gx_path *)ppath, 0, gx_path_type_stroke | gx_path_type_optimize, (set_ctm ? &mat : (const gs_matrix *)0));
+ if (code < 0)
+ return code;
+ s = pdev->strm;
+ stream_puts(s, (fill_params->rule < 0 ? "B\n" : "B*\n"));
+ stream_puts(s, (set_ctm ? " Q\n" : "\n"));
+ }
+ return 0;
+}
+
/*
The fill_rectangle_hl_color device method.
See gxdevcli.h about return codes.
diff --git a/devices/vector/gdevpdfe.c b/devices/vector/gdevpdfe.c
index 88ca7ac5..1c540709 100644
--- a/devices/vector/gdevpdfe.c
+++ b/devices/vector/gdevpdfe.c
@@ -202,8 +202,13 @@ pdf_xmp_time(char *buf, int buf_length)
time_t t;
char buf1[4+1+2+1+2+1]; /* yyyy-mm-dd\0 */
+#ifdef CLUSTER
+ memset(&t, 0, sizeof(t));
+ memset(&tms, 0, sizeof(tms));
+#else
time(&t);
tms = *localtime(&t);
+#endif
gs_sprintf(buf1,
"%04d-%02d-%02d",
tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday);
@@ -646,8 +651,7 @@ pdf_write_document_metadata(gx_device_pdf *pdev, const byte digest[6])
{
pdf_xml_tag_open_beg(s, "rdf:Description");
- pdf_xml_attribute_name(s, "rdf:about");
- pdf_xml_attribute_value(s, instance_uuid);
+ pdf_xml_copy(s, " rdf:about=\"\"");
pdf_xml_attribute_name(s, "xmlns:pdf");
pdf_xml_attribute_value(s, "http://ns.adobe.com/pdf/1.3/");
@@ -684,8 +688,7 @@ pdf_write_document_metadata(gx_device_pdf *pdev, const byte digest[6])
}
pdf_xml_tag_open_beg(s, "rdf:Description");
- pdf_xml_attribute_name(s, "rdf:about");
- pdf_xml_attribute_value(s, instance_uuid);
+ pdf_xml_copy(s, " rdf:about=\"\"");
pdf_xml_attribute_name(s, "xmlns:xmp");
pdf_xml_attribute_value(s, "http://ns.adobe.com/xap/1.0/");
pdf_xml_tag_end(s);
@@ -718,8 +721,7 @@ pdf_write_document_metadata(gx_device_pdf *pdev, const byte digest[6])
pdf_xml_newline(s);
pdf_xml_tag_open_beg(s, "rdf:Description");
- pdf_xml_attribute_name(s, "rdf:about");
- pdf_xml_attribute_value(s, instance_uuid);
+ pdf_xml_copy(s, " rdf:about=\"\"");
pdf_xml_attribute_name(s, "xmlns:xapMM");
pdf_xml_attribute_value(s, "http://ns.adobe.com/xap/1.0/mm/");
pdf_xml_attribute_name(s, "xapMM:DocumentID");
@@ -728,8 +730,7 @@ pdf_write_document_metadata(gx_device_pdf *pdev, const byte digest[6])
pdf_xml_newline(s);
pdf_xml_tag_open_beg(s, "rdf:Description");
- pdf_xml_attribute_name(s, "rdf:about");
- pdf_xml_attribute_value(s, instance_uuid);
+ pdf_xml_copy(s, " rdf:about=\"\"");
pdf_xml_attribute_name(s, "xmlns:dc");
pdf_xml_attribute_value(s, "http://purl.org/dc/elements/1.1/");
pdf_xml_attribute_name(s, "dc:format");
@@ -803,8 +804,7 @@ pdf_write_document_metadata(gx_device_pdf *pdev, const byte digest[6])
pdf_xml_newline(s);
if (pdev->PDFA != 0) {
pdf_xml_tag_open_beg(s, "rdf:Description");
- pdf_xml_attribute_name(s, "rdf:about");
- pdf_xml_attribute_value(s, instance_uuid);
+ pdf_xml_copy(s, " rdf:about=\"\"");
pdf_xml_attribute_name(s, "xmlns:pdfaid");
pdf_xml_attribute_value(s, "http://www.aiim.org/pdfa/ns/id/");
pdf_xml_attribute_name(s, "pdfaid:part");
diff --git a/devices/vector/gdevpdfg.c b/devices/vector/gdevpdfg.c
index bd06b9f1..0aa93e53 100644
--- a/devices/vector/gdevpdfg.c
+++ b/devices/vector/gdevpdfg.c
@@ -75,13 +75,14 @@ pdf_save_viewer_state(gx_device_pdf *pdev, stream *s)
pdev->vgstack[i].transfer_ids[2] = pdev->transfer_ids[2];
pdev->vgstack[i].transfer_ids[3] = pdev->transfer_ids[3];
pdev->vgstack[i].transfer_not_identity = pdev->transfer_not_identity;
- pdev->vgstack[i].opacity_alpha = pdev->state.opacity.alpha;
- pdev->vgstack[i].shape_alpha = pdev->state.shape.alpha;
+ pdev->vgstack[i].strokeconstantalpha = pdev->state.strokeconstantalpha;
+ pdev->vgstack[i].fillconstantalpha = pdev->state.fillconstantalpha;
+ pdev->vgstack[i].alphaisshape = pdev->state.alphaisshape;
pdev->vgstack[i].blend_mode = pdev->state.blend_mode;
pdev->vgstack[i].halftone_id = pdev->halftone_id;
pdev->vgstack[i].black_generation_id = pdev->black_generation_id;
pdev->vgstack[i].undercolor_removal_id = pdev->undercolor_removal_id;
- pdev->vgstack[i].overprint_mode = pdev->overprint_mode;
+ pdev->vgstack[i].overprint_mode = pdev->state.overprint_mode;
pdev->vgstack[i].smoothness = pdev->state.smoothness;
pdev->vgstack[i].flatness = pdev->state.flatness;
pdev->vgstack[i].text_knockout = pdev->state.text_knockout;
@@ -125,13 +126,14 @@ pdf_load_viewer_state(gx_device_pdf *pdev, pdf_viewer_state *s)
pdev->transfer_ids[2] = s->transfer_ids[2];
pdev->transfer_ids[3] = s->transfer_ids[3];
pdev->transfer_not_identity = s->transfer_not_identity;
- pdev->state.opacity.alpha = s->opacity_alpha;
- pdev->state.shape.alpha = s->shape_alpha;
+ pdev->state.strokeconstantalpha = s->strokeconstantalpha;
+ pdev->state.fillconstantalpha = s->fillconstantalpha;
+ pdev->state.alphaisshape = s->alphaisshape;
pdev->state.blend_mode = s->blend_mode;
pdev->halftone_id = s->halftone_id;
pdev->black_generation_id = s->black_generation_id;
pdev->undercolor_removal_id = s->undercolor_removal_id;
- pdev->overprint_mode = s->overprint_mode;
+ pdev->state.overprint_mode = s->overprint_mode;
pdev->state.smoothness = s->smoothness;
pdev->state.flatness = s->flatness;
pdev->state.text_knockout = s->text_knockout;
@@ -209,8 +211,9 @@ pdf_viewer_state_from_gs_gstate_aux(pdf_viewer_state *pvs, const gs_gstate *pgs)
pvs->transfer_ids[1] = (pgs->set_transfer.green != NULL ? pgs->set_transfer.green->id : 0);
pvs->transfer_ids[2] = (pgs->set_transfer.blue != NULL ? pgs->set_transfer.blue->id : 0);
pvs->transfer_ids[3] = (pgs->set_transfer.gray != NULL ? pgs->set_transfer.gray->id : 0);
- pvs->opacity_alpha = pgs->opacity.alpha;
- pvs->shape_alpha = pgs->shape.alpha;
+ pvs->fillconstantalpha = pgs->fillconstantalpha;
+ pvs->strokeconstantalpha = pgs->strokeconstantalpha;
+ pvs->alphaisshape = pgs->alphaisshape;
pvs->blend_mode = pgs->blend_mode;
pvs->halftone_id = (pgs->dev_ht != 0 ? pgs->dev_ht->id : 0);
pvs->black_generation_id = (pgs->black_generation != 0 ? pgs->black_generation->id : 0);
@@ -776,7 +779,7 @@ int convert_DeviceN_alternate(gx_device_pdf * pdev, const gs_gstate * pgs, const
return_error(gs_error_VMerror);
samples = (unsigned int)pow(2, pcs->params.device_n.num_components);
- data_buff = gs_alloc_bytes(pdev->memory, pdev->color_info.num_components * samples, "Convert DeviceN");
+ data_buff = gs_alloc_bytes(pdev->memory, (unsigned long)pdev->color_info.num_components * samples, "Convert DeviceN");
if (data_buff == 0) {
COS_FREE(pca, "convert DeviceN");
return_error(gs_error_VMerror);
@@ -2869,10 +2872,8 @@ pdf_update_transfer(gx_device_pdf *pdev, const gs_gstate *pgs,
*/
static int
pdf_update_alpha(gx_device_pdf *pdev, const gs_gstate *pgs,
- pdf_resource_t **ppres)
+ pdf_resource_t **ppres, bool for_text)
{
- bool ais;
- double alpha;
int code;
if (pdev->state.soft_mask_id != pgs->soft_mask_id) {
@@ -2882,9 +2883,11 @@ pdf_update_alpha(gx_device_pdf *pdev, const gs_gstate *pgs,
code = pdf_open_contents(pdev, PDF_IN_STREAM);
if (code < 0)
return code;
- code = pdf_restore_viewer_state(pdev, pdev->strm);
- if (code < 0)
- return code;
+ if (pdev->vgstack_depth > pdev->vgstack_bottom) {
+ code = pdf_restore_viewer_state(pdev, pdev->strm);
+ if (code < 0)
+ return code;
+ }
}
else{
gs_sprintf(buf, "%ld 0 R", pgs->soft_mask_id);
@@ -2901,44 +2904,27 @@ pdf_update_alpha(gx_device_pdf *pdev, const gs_gstate *pgs,
}
pdev->state.soft_mask_id = pgs->soft_mask_id;
}
- if (pdev->state.opacity.alpha != pgs->opacity.alpha) {
- if (pdev->state.shape.alpha != pgs->shape.alpha) {
- /* We had previously set one of opacity or shape, but we didn't
- * ever need to write the graphcis state out, leaving us with a
- * dangling alpha. We should honour the current state. One of
- * opacity or alpha will be the default (1.0), so use the other.
- */
- pdev->state.opacity.alpha = pgs->opacity.alpha;
- pdev->state.shape.alpha = pgs->shape.alpha;
- if (pgs->opacity.alpha != 1.0) {
- ais = false;
- alpha = pdev->state.opacity.alpha;
- }
- else {
- ais = true;
- alpha = pdev->state.shape.alpha;
- }
- } else {
- ais = false;
- alpha = pdev->state.opacity.alpha = pgs->opacity.alpha;
- }
- } else if (pdev->state.shape.alpha != pgs->shape.alpha) {
- ais = true;
- alpha = pdev->state.shape.alpha = pgs->shape.alpha;
+
+ if (pdev->state.alphaisshape != pgs->alphaisshape ||
+ pdev->state.strokeconstantalpha != pgs->strokeconstantalpha ||
+ pdev->state.fillconstantalpha != pgs->fillconstantalpha) {
+
+ pdev->state.strokeconstantalpha = pgs->strokeconstantalpha;
+ pdev->state.fillconstantalpha = pgs->fillconstantalpha;
+ pdev->state.alphaisshape = pgs->alphaisshape;
+
+ code = pdf_open_gstate(pdev, ppres);
+ if (code < 0)
+ return code;
+ code = cos_dict_put_c_key_bool(resource_dict(*ppres), "/AIS", pgs->alphaisshape);
+ if (code < 0)
+ return code;
+ code = cos_dict_put_c_key_real(resource_dict(*ppres), "/CA", pgs->strokeconstantalpha);
+ if (code < 0)
+ return code;
+ return cos_dict_put_c_key_real(resource_dict(*ppres), "/ca", pgs->fillconstantalpha);
} else
return 0;
- code = pdf_open_gstate(pdev, ppres);
- if (code < 0)
- return code;
- code = cos_dict_put_c_key_bool(resource_dict(*ppres), "/AIS", ais);
- if (code < 0)
- return code;
- /* we never do the 'both' operations (b, B, b*, B*) so we set both */
- /* CA and ca the same so that we stay in sync with state.*.alpha */
- code = cos_dict_put_c_key_real(resource_dict(*ppres), "/CA", alpha);
- if (code < 0)
- return code;
- return cos_dict_put_c_key_real(resource_dict(*ppres), "/ca", alpha);
}
/*
@@ -2946,7 +2932,7 @@ pdf_update_alpha(gx_device_pdf *pdev, const gs_gstate *pgs,
*/
int
pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
- pdf_resource_t **ppres)
+ pdf_resource_t **ppres, bool for_text)
{
int code = 0;
int bottom;
@@ -2966,7 +2952,7 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
return code;
pdev->state.blend_mode = pgs->blend_mode;
}
- code = pdf_update_alpha(pdev, pgs, ppres);
+ code = pdf_update_alpha(pdev, pgs, ppres, for_text);
if (code < 0)
return code;
} else {
@@ -2974,8 +2960,8 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
* If the graphics state calls for any transparency functions,
* we can't represent them, so return a rangecheck.
*/
- if (pgs->opacity.alpha != 1 ||
- pgs->shape.alpha != 1)
+ if (pgs->strokeconstantalpha != 1 ||
+ pgs->fillconstantalpha != 1)
return_error(gs_error_rangecheck);
}
/*
@@ -3072,9 +3058,13 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
}
}
}
- if (pdev->CompatibilityLevel >= 1.3 && pdev->sbstack_depth == bottom) {
- if (pdev->overprint_mode != pdev->params.OPM) {
- if (pdev->params.OPM == 1 && pdev->PDFA == 2) {
+ if (pdev->state.overprint_mode != pdev->params.OPM) {
+ if (pdev->params.OPM != pgs->overprint_mode)
+ ((gs_gstate *)pgs)->overprint_mode = pdev->params.OPM;
+ }
+ if (pdev->CompatibilityLevel >= 1.3 /*&& pdev->sbstack_depth == bottom */) {
+ if (pdev->state.overprint_mode != pgs->overprint_mode) {
+ if (pgs->overprint_mode == 1 && pdev->PDFA == 2) {
switch (pdev->PDFACompatibilityPolicy) {
case 0:
emprintf(pdev->memory,
@@ -3085,7 +3075,8 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
case 1:
emprintf(pdev->memory,
"Setting Overprint Mode to 1\n not permitted in PDF/A-2, overprint mode not set\n\n");
- pdev->params.OPM = 0;
+ /* Deliberately breaking const here in order to force the graphics state overprint mode to be unchanged */
+ ((gs_gstate *)pgs)->overprint_mode = pdev->state.overprint_mode;
break;
case 2:
emprintf(pdev->memory,
@@ -3100,14 +3091,14 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
break;
}
}
- if (pdev->overprint_mode != pdev->params.OPM) {
+ if (pdev->state.overprint_mode != pgs->overprint_mode) {
code = pdf_open_gstate(pdev, ppres);
if (code < 0)
return code;
- code = cos_dict_put_c_key_int(resource_dict(*ppres), "/OPM", pdev->params.OPM);
+ code = cos_dict_put_c_key_int(resource_dict(*ppres), "/OPM", pgs->overprint_mode);
if (code < 0)
return code;
- pdev->overprint_mode = pdev->params.OPM;
+ pdev->params.OPM = pdev->state.overprint_mode = pgs->overprint_mode;
}
}
if (pdev->state.smoothness != pgs->smoothness) {
@@ -3136,19 +3127,36 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs,
/* Update the graphics state for filling. */
int
-pdf_try_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs)
+pdf_try_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
{
pdf_resource_t *pres = 0;
- int code = pdf_prepare_drawing(pdev, pgs, &pres);
+ int code = pdf_prepare_drawing(pdev, pgs, &pres, for_text);
if (code < 0)
return code;
+ if (pdev->rendering_intent != pgs->renderingintent && !pdev->ForOPDFRead) {
+ static const char *const ri_names[] = { "Perceptual", "RelativeColorimetric", "Saturation", "AbsoluteColorimetric" };
+ char buf[32];
+
+ code = pdf_open_gstate(pdev, &pres);
+ if (code < 0)
+ return code;
+
+ buf[0] = '/';
+ strncpy(buf + 1, ri_names[pgs->renderingintent], sizeof(buf) - 2);
+ code = cos_dict_put_string_copy(resource_dict(pres), "/RI", buf);
+ if (code < 0)
+ return code;
+ pdev->rendering_intent = pgs->renderingintent;
+ }
+
/* Update overprint. */
if (pdev->params.PreserveOverprintSettings &&
(pdev->fill_overprint != pgs->overprint ||
pdev->font3) && !pdev->skip_colors
) {
- code = pdf_open_gstate(pdev, &pres);
+ if (pres == 0)
+ code = pdf_open_gstate(pdev, &pres);
if (code < 0)
return code;
/* PDF 1.2 only has a single overprint setting. */
@@ -3167,45 +3175,136 @@ pdf_try_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs)
return pdf_end_gstate(pdev, pres);
}
int
-pdf_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs)
+pdf_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
{
int code;
if (pdev->context != PDF_IN_STREAM) {
- code = pdf_try_prepare_fill(pdev, pgs);
+ code = pdf_try_prepare_fill(pdev, pgs, for_text);
if (code != gs_error_interrupt) /* See pdf_open_gstate */
return code;
code = pdf_open_contents(pdev, PDF_IN_STREAM);
if (code < 0)
return code;
}
- return pdf_try_prepare_fill(pdev, pgs);
+ return pdf_try_prepare_fill(pdev, pgs, for_text);
}
/* Update the graphics state for stroking. */
static int
-pdf_try_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs)
+pdf_try_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
+{
+ pdf_resource_t *pres = 0;
+ int code = pdf_prepare_drawing(pdev, pgs, &pres, for_text);
+
+ if (code < 0)
+ return code;
+ if (pdev->rendering_intent != pgs->renderingintent && !pdev->ForOPDFRead) {
+ static const char *const ri_names[] = { "Perceptual", "RelativeColorimetric", "Saturation", "AbsoluteColorimetric" };
+ char buf[32];
+
+ code = pdf_open_gstate(pdev, &pres);
+ if (code < 0)
+ return code;
+
+ buf[0] = '/';
+ strncpy(buf + 1, ri_names[pgs->renderingintent], sizeof(buf) - 2);
+ code = cos_dict_put_string_copy(resource_dict(pres), "/RI", buf);
+ if (code < 0)
+ return code;
+ pdev->rendering_intent = pgs->renderingintent;
+ }
+ /* Update overprint, stroke adjustment. */
+ if (pdev->params.PreserveOverprintSettings &&
+ pdev->stroke_overprint != pgs->stroke_overprint &&
+ !pdev->skip_colors
+ ) {
+ if (pres == 0)
+ code = pdf_open_gstate(pdev, &pres);
+ if (code < 0)
+ return code;
+ code = cos_dict_put_c_key_bool(resource_dict(pres), "/OP", pgs->stroke_overprint);
+ if (code < 0)
+ return code;
+ pdev->stroke_overprint = pgs->stroke_overprint;
+
+ /* According to PDF>=1.3 spec, OP also sets op,
+ if there is no /op in same graphic state object.
+ We don't write /op, so monitor the viewer's state here : */
+ pdev->fill_overprint = pgs->stroke_overprint;
+ }
+ if (pdev->state.stroke_adjust != pgs->stroke_adjust) {
+ code = pdf_open_gstate(pdev, &pres);
+ if (code < 0)
+ return code;
+ code = cos_dict_put_c_key_bool(resource_dict(pres), "/SA", pgs->stroke_adjust);
+ if (code < 0)
+ return code;
+ pdev->state.stroke_adjust = pgs->stroke_adjust;
+ }
+ return pdf_end_gstate(pdev, pres);
+}
+int
+pdf_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
+{
+ int code;
+
+ if (pdev->context != PDF_IN_STREAM) {
+ code = pdf_try_prepare_stroke(pdev, pgs, for_text);
+ if (code != gs_error_interrupt) /* See pdf_open_gstate */
+ return code;
+ code = pdf_open_contents(pdev, PDF_IN_STREAM);
+ if (code < 0)
+ return code;
+ }
+ return pdf_try_prepare_stroke(pdev, pgs, for_text);
+}
+
+static int
+pdf_try_prepare_fill_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
{
pdf_resource_t *pres = 0;
- int code = pdf_prepare_drawing(pdev, pgs, &pres);
+ int code = pdf_prepare_drawing(pdev, pgs, &pres, for_text);
if (code < 0)
return code;
+ /* Update overprint. */
+ if (pdev->params.PreserveOverprintSettings &&
+ (pdev->fill_overprint != pgs->overprint ||
+ pdev->stroke_overprint != pgs->stroke_overprint ||
+ pdev->font3) && !pdev->skip_colors
+ ) {
+ code = pdf_open_gstate(pdev, &pres);
+ if (code < 0)
+ return code;
+ /* PDF 1.2 only has a single overprint setting. */
+ if (pdev->CompatibilityLevel < 1.3) {
+ code = cos_dict_put_c_key_bool(resource_dict(pres), "/OP", pgs->overprint);
+ if (code < 0)
+ return code;
+ pdev->stroke_overprint = pgs->overprint;
+ } else {
+ code = cos_dict_put_c_key_bool(resource_dict(pres), "/op", pgs->overprint);
+ if (code < 0)
+ return code;
+ }
+ pdev->fill_overprint = pgs->overprint;
+ }
/* Update overprint, stroke adjustment. */
if (pdev->params.PreserveOverprintSettings &&
- pdev->stroke_overprint != pgs->overprint &&
+ pdev->stroke_overprint != pgs->stroke_overprint &&
!pdev->skip_colors
) {
code = pdf_open_gstate(pdev, &pres);
if (code < 0)
return code;
- code = cos_dict_put_c_key_bool(resource_dict(pres), "/OP", pgs->overprint);
+ code = cos_dict_put_c_key_bool(resource_dict(pres), "/OP", pgs->stroke_overprint);
if (code < 0)
return code;
- pdev->stroke_overprint = pgs->overprint;
+ pdev->stroke_overprint = pgs->stroke_overprint;
if (pdev->CompatibilityLevel < 1.3) {
/* PDF 1.2 only has a single overprint setting. */
- pdev->fill_overprint = pgs->overprint;
+ pdev->fill_overprint = pgs->stroke_overprint;
} else {
/* According to PDF>=1.3 spec, OP also sets op,
if there is no /op in same garphic state object.
@@ -3224,20 +3323,21 @@ pdf_try_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs)
}
return pdf_end_gstate(pdev, pres);
}
+
int
-pdf_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs)
+pdf_prepare_fill_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text)
{
int code;
if (pdev->context != PDF_IN_STREAM) {
- code = pdf_try_prepare_stroke(pdev, pgs);
+ code = pdf_try_prepare_fill_stroke(pdev, pgs, for_text);
if (code != gs_error_interrupt) /* See pdf_open_gstate */
return code;
code = pdf_open_contents(pdev, PDF_IN_STREAM);
if (code < 0)
return code;
}
- return pdf_try_prepare_stroke(pdev, pgs);
+ return pdf_try_prepare_fill_stroke(pdev, pgs, for_text);
}
/* Update the graphics state for an image other than an ImageType 1 mask. */
@@ -3248,7 +3348,7 @@ pdf_prepare_image(gx_device_pdf *pdev, const gs_gstate *pgs)
* As it turns out, this requires updating the same parameters as for
* filling.
*/
- return pdf_prepare_fill(pdev, pgs);
+ return pdf_prepare_fill(pdev, pgs, false);
}
/* Update the graphics state for an ImageType 1 mask. */
diff --git a/devices/vector/gdevpdfg.h b/devices/vector/gdevpdfg.h
index ffa7296d..e846b1a8 100644
--- a/devices/vector/gdevpdfg.h
+++ b/devices/vector/gdevpdfg.h
@@ -150,10 +150,11 @@ int pdf_set_drawing_color(gx_device_pdf * pdev, const gs_gstate * pgs,
* Bring the graphics state up to date for a drawing operation.
* (Text uses either fill or stroke.)
*/
-int pdf_try_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs);
-int pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs, pdf_resource_t **ppres);
-int pdf_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs);
-int pdf_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs);
+int pdf_try_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text);
+int pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs, pdf_resource_t **ppres, bool for_text);
+int pdf_prepare_fill(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text);
+int pdf_prepare_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text);
+int pdf_prepare_fill_stroke(gx_device_pdf *pdev, const gs_gstate *pgs, bool for_text);
int pdf_prepare_image(gx_device_pdf *pdev, const gs_gstate *pgs);
int pdf_prepare_imagemask(gx_device_pdf *pdev, const gs_gstate *pgs,
const gx_drawing_color *pdcolor);
diff --git a/devices/vector/gdevpdfi.c b/devices/vector/gdevpdfi.c
index fed96e46..b73ed3d6 100644
--- a/devices/vector/gdevpdfi.c
+++ b/devices/vector/gdevpdfi.c
@@ -1511,7 +1511,7 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
image[0].pixel.ColorSpace = pcs_orig;
image[0].pixel.BitsPerComponent = pim->BitsPerComponent;
code = psdf_setup_image_colors_filter(&pie->writer.binary[0],
- (gx_device_psdf *)pdev, &image[0].pixel, pgs);
+ (gx_device_psdf *)pdev, pim, &image[0].pixel, pgs);
if (code < 0)
goto fail_and_fallback;
image[0].pixel.ColorSpace = pcs_device;
@@ -1556,8 +1556,9 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
goto fail_and_fallback;
} else if (convert_to_process_colors) {
image[1].pixel.ColorSpace = pcs_orig;
+ image[1].pixel.BitsPerComponent = pim->BitsPerComponent;
code = psdf_setup_image_colors_filter(&pie->writer.binary[1],
- (gx_device_psdf *)pdev, &image[1].pixel, pgs);
+ (gx_device_psdf *)pdev, pim, &image[1].pixel, pgs);
if (code < 0) {
goto fail_and_fallback;
}
@@ -1595,9 +1596,13 @@ pdf_begin_typed_image(gx_device_pdf *pdev, const gs_gstate * pgs,
pmat, pgs, force_lossless, in_line);
if (code < 0)
goto fail_and_fallback;
+ /* Bug701972 -- added input_width arg here. For this case, just passing in the same
+ * width as before, so nothing changes. This is an obscure case that isn't tested
+ * on the cluster (note that it requires CompatibilityLevel < 1.3).
+ */
psdf_setup_image_to_mask_filter(&pie->writer.binary[i],
- (gx_device_psdf *)pdev, pim->Width, pim->Height,
- num_components, pim->BitsPerComponent, image[i].type4.MaskColor);
+ (gx_device_psdf *)pdev, pim->Width, pim->Height, pim->Width,
+ num_components, pim->BitsPerComponent, image[i].type4.MaskColor);
code = pdf_begin_image_data_decoded(pdev, num_components, pranges, i,
&image[i].pixel, &cs_value, pie);
if (code < 0)
@@ -1878,7 +1883,7 @@ pdf_image_end_image_data(gx_image_enum_common_t * info, bool draw_last,
pdf_image_enum *pie = (pdf_image_enum *)info;
int height = pie->writer.height;
int data_height = height - pie->rows_left;
- int code = 0;
+ int code = 0, ecode;
if (pie->writer.pres)
((pdf_x_object_t *)pie->writer.pres)->data_height = data_height;
@@ -1920,6 +1925,12 @@ pdf_image_end_image_data(gx_image_enum_common_t * info, bool draw_last,
if (pie->initial_colorspace != pdev->pcm_color_info_index)
pdf_set_process_color_model(pdev, pie->initial_colorspace);
+ /* Clean up any outstanding streams before freeing the enumerator */
+ while (pie->writer.alt_writer_count-- > 0) {
+ ecode = psdf_end_binary(&(pie->writer.binary[pie->writer.alt_writer_count]));
+ if (ecode < 0 && code >= 0) code = ecode;
+ }
+
gx_image_free_enum(&info);
return code;
}
diff --git a/devices/vector/gdevpdfp.c b/devices/vector/gdevpdfp.c
index df2ff377..2f29dba5 100644
--- a/devices/vector/gdevpdfp.c
+++ b/devices/vector/gdevpdfp.c
@@ -127,6 +127,7 @@ static const gs_param_item_t pdf_param_items[] = {
pi("FastWebView", gs_param_type_bool, Linearise),
pi("NoOutputFonts", gs_param_type_bool, FlattenFonts),
pi("WantsPageLabels", gs_param_type_bool, WantsPageLabels),
+ pi("UserUnit", gs_param_type_float, UserUnit),
#undef pi
gs_param_item_end
};
@@ -237,6 +238,14 @@ gdev_pdf_get_param(gx_device *dev, char *Param, void *list)
if (strcmp(Param, "ForOPDFRead") == 0) {
return(param_write_bool(plist, "ForOPDFRead", &pdev->ForOPDFRead));
}
+ if (strcmp(Param, "PassUserUnit") == 0) {
+ bool dummy;
+ if (pdev->CompatibilityLevel > 1.5)
+ dummy = true;
+ else
+ dummy = false;
+ return(param_write_bool(plist, "PassUserUnit", &dummy));
+ }
if (!pdev->is_ps2write) {
if (strcmp(Param, "pdfmark") == 0){
return(param_write_null(plist, "pdfmark"));
@@ -559,6 +568,16 @@ gdev_pdf_put_params_impl(gx_device * dev, const gx_device_pdf * save_dev, gs_par
if (cl < 1.2) {
pdev->HaveCFF = false;
}
+
+ ecode = param_read_float(plist, "UserUnit", &pdev->UserUnit);
+ if (ecode < 0)
+ goto fail;
+ if (pdev->UserUnit == 0 || (pdev->UserUnit != 1 && pdev->CompatibilityLevel < 1.6)) {
+ ecode = gs_note_error(gs_error_rangecheck);
+ param_signal_error(plist, "UserUnit", ecode);
+ goto fail;
+ }
+
ecode = gdev_psdf_put_params(dev, plist);
if (ecode < 0)
goto fail;
diff --git a/devices/vector/gdevpdft.c b/devices/vector/gdevpdft.c
index e8fb227a..46f4d312 100644
--- a/devices/vector/gdevpdft.c
+++ b/devices/vector/gdevpdft.c
@@ -200,7 +200,7 @@ pdf_begin_transparency_group(gs_gstate * pgs, gx_device_pdf * pdev,
pdf_resource_t *pres, *pres_gstate = NULL;
cos_dict_t *pcd = NULL, *pcd_Resources = NULL;
- code = pdf_prepare_drawing(pdev, pgs, &pres_gstate);
+ code = pdf_prepare_drawing(pdev, pgs, &pres_gstate, false);
if (code < 0)
return code;
code = pdf_end_gstate(pdev, pres_gstate);
@@ -282,7 +282,7 @@ pdf_begin_transparency_mask(gs_gstate * pgs, gx_device_pdf * pdev,
* changed, and so doesn't write out the GState
*/
pgs->soft_mask_id = 0;
- code = pdf_prepare_drawing(pdev, pgs, &pres);
+ code = pdf_prepare_drawing(pdev, pgs, &pres, false);
if (code == gs_error_interrupt) {
/* Not in an appropriate context, ignore it but restore
* the old soft_mask_id. Not sure this is correct, but it works for now.
diff --git a/devices/vector/gdevpdfu.c b/devices/vector/gdevpdfu.c
index 0b2b6400..05ea7881 100644
--- a/devices/vector/gdevpdfu.c
+++ b/devices/vector/gdevpdfu.c
@@ -51,7 +51,7 @@
#include "gs_mgl_e.h"
#include "gs_mro_e.h"
-extern single_glyph_list_t *SingleGlyphList;
+extern single_glyph_list_t SingleGlyphList[];
/* Define the size of internal stream buffers. */
/* (This is not a limitation, it only affects performance.) */
@@ -339,7 +339,7 @@ static int write_tt_encodings(stream *s, bool HaveTrueTypes)
if (HaveTrueTypes) {
char Buffer[256];
- single_glyph_list_t *entry = (single_glyph_list_t *)&SingleGlyphList;
+ single_glyph_list_t *entry = SingleGlyphList;
gs_sprintf(Buffer, "/AdobeGlyphList mark\n");
stream_write(s, Buffer, strlen(Buffer));
diff --git a/devices/vector/gdevpdfx.h b/devices/vector/gdevpdfx.h
index b7e00481..0e43a028 100644
--- a/devices/vector/gdevpdfx.h
+++ b/devices/vector/gdevpdfx.h
@@ -326,6 +326,7 @@ typedef struct pdf_page_s {
pdf_page_dsc_info_t dsc_info;
bool NumCopies_set; /* ps2write only. */
int NumCopies; /* ps2write only. */
+ float UserUnit; /* pdfwrite only */
} pdf_page_t;
#define private_st_pdf_page() /* in gdevpdf.c */\
gs_private_st_ptrs2(st_pdf_page, pdf_page_t, "pdf_page_t",\
@@ -479,8 +480,9 @@ struct pdf_font_cache_elem_s {
typedef struct pdf_viewer_state_s {
int transfer_not_identity; /* bitmask */
gs_id transfer_ids[4];
- float opacity_alpha; /* state.opacity.alpha */
- float shape_alpha; /* state.shape.alpha */
+ float strokeconstantalpha;
+ float fillconstantalpha;
+ bool alphaisshape;
gs_blend_mode_t blend_mode; /* state.blend_mode */
gs_id halftone_id;
gs_id black_generation_id;
@@ -618,8 +620,8 @@ struct gx_device_pdf_s {
pdf_page_dsc_info_t page_dsc_info; /* current page */
/* Additional graphics state */
bool fill_overprint, stroke_overprint;
+ int rendering_intent;
bool remap_fill_color, remap_stroke_color;
- int overprint_mode;
gs_id halftone_id;
gs_id transfer_ids[4];
int transfer_not_identity; /* bitmask */
@@ -900,6 +902,7 @@ struct gx_device_pdf_s {
* doing JPEG pass through we write the JPEG data here, and don't write
* anything in the image processing routines.
*/
+ float UserUnit;
};
#define is_in_page(pdev)\
@@ -960,6 +963,7 @@ extern const gx_device_vector_procs pdf_vector_procs;
dev_proc_fill_rectangle(gdev_pdf_fill_rectangle);
dev_proc_fill_path(gdev_pdf_fill_path);
dev_proc_stroke_path(gdev_pdf_stroke_path);
+dev_proc_fill_stroke_path(gdev_pdf_fill_stroke_path);
dev_proc_fillpage(gdev_pdf_fillpage);
/* In gdevpdfi.c */
dev_proc_begin_typed_image(gdev_pdf_begin_typed_image);
diff --git a/devices/vector/gdevpdtb.c b/devices/vector/gdevpdtb.c
index 8c98f4ae..9caa640e 100644
--- a/devices/vector/gdevpdtb.c
+++ b/devices/vector/gdevpdtb.c
@@ -509,7 +509,7 @@ pdf_write_FontFile_entry(gx_device_pdf *pdev, pdf_base_font_t *pbfont)
FontFile_key = "/FontFile2";
break;
default: /* Type 1/2, CIDFontType 0 */
- if (pdev->ResourcesBeforeUsage)
+ if (!pdev->HaveCFF)
FontFile_key = "/FontFile";
else
FontFile_key = "/FontFile3";
diff --git a/devices/vector/gdevpdts.c b/devices/vector/gdevpdts.c
index 8fba9080..055aeb44 100644
--- a/devices/vector/gdevpdts.c
+++ b/devices/vector/gdevpdts.c
@@ -815,7 +815,7 @@ int pdf_set_PaintType0_params (gx_device_pdf *pdev, gs_gstate *pgs, float size,
if (code < 0)
return code;
if (pdev->text->text_state->in.render_mode == ptsv->render_mode){
- code = pdf_prepare_stroke(pdev, pgs);
+ code = pdf_prepare_stroke(pdev, pgs, false);
if (code >= 0)
code = gdev_vector_prepare_stroke((gx_device_vector *)pdev,
pgs, NULL, NULL, 1);
diff --git a/devices/vector/gdevpdtt.c b/devices/vector/gdevpdtt.c
index 2c571de3..f248e998 100644
--- a/devices/vector/gdevpdtt.c
+++ b/devices/vector/gdevpdtt.c
@@ -416,7 +416,7 @@ pdf_prepare_text_drawing(gx_device_pdf *const pdev, gs_text_enum_t *pte)
code = 0;
if (code < 0)
return code;
- code = pdf_prepare_fill(pdev, pgs);
+ code = pdf_prepare_fill(pdev, pgs, true);
if (code < 0)
return code;
}
@@ -2535,7 +2535,7 @@ pdf_set_text_process_state(gx_device_pdf *pdev,
if (code < 0)
return code;
- code = pdf_prepare_stroke(pdev, pgs);
+ code = pdf_prepare_stroke(pdev, pgs, true);
if (code >= 0) {
code = gdev_vector_prepare_stroke((gx_device_vector *)pdev,
pgs, NULL, NULL, 1);
diff --git a/devices/vector/gdevpsdf.h b/devices/vector/gdevpsdf.h
index 959a4143..5047f43a 100644
--- a/devices/vector/gdevpsdf.h
+++ b/devices/vector/gdevpsdf.h
@@ -459,11 +459,14 @@ int psdf_setup_compression_chooser(psdf_binary_writer *pbw,
/* Set up an "image to mask" filter. */
int psdf_setup_image_to_mask_filter(psdf_binary_writer *pbw, gx_device_psdf *pdev,
- int width, int height, int depth, int bits_per_sample, uint *MaskColor);
+ int width, int height, int input_width,
+ int depth, int bits_per_sample, uint *MaskColor);
/* Set up an image colors filter. */
int psdf_setup_image_colors_filter(psdf_binary_writer *pbw,
- gx_device_psdf *pdev, gs_pixel_image_t * pim,
+ gx_device_psdf *pdev,
+ const gs_pixel_image_t *input_pim,
+ gs_pixel_image_t * pim,
const gs_gstate *pgs);
/* ---------------- Symbolic data printing ---------------- */
diff --git a/devices/vector/gdevpsdi.c b/devices/vector/gdevpsdi.c
index 485d685a..9c2adb72 100644
--- a/devices/vector/gdevpsdi.c
+++ b/devices/vector/gdevpsdi.c
@@ -828,7 +828,8 @@ psdf_setup_compression_chooser(psdf_binary_writer *pbw, gx_device_psdf *pdev,
/* Set up an "image to mask" filter. */
int
psdf_setup_image_to_mask_filter(psdf_binary_writer *pbw, gx_device_psdf *pdev,
- int width, int height, int depth, int bits_per_sample, uint *MaskColor)
+ int width, int height, int input_width,
+ int depth, int bits_per_sample, uint *MaskColor)
{
int code;
stream_state *ss = s_alloc_state(pdev->memory, s__image_colors_template.stype,
@@ -842,7 +843,7 @@ psdf_setup_image_to_mask_filter(psdf_binary_writer *pbw, gx_device_psdf *pdev,
if (code < 0)
return code;
s_image_colors_set_dimensions((stream_image_colors_state *)ss,
- width, height, depth, bits_per_sample);
+ width, height, input_width, depth, bits_per_sample);
s_image_colors_set_mask_colors((stream_image_colors_state *)ss, MaskColor);
return 0;
}
@@ -850,7 +851,9 @@ psdf_setup_image_to_mask_filter(psdf_binary_writer *pbw, gx_device_psdf *pdev,
/* Set up an image colors filter. */
int
psdf_setup_image_colors_filter(psdf_binary_writer *pbw,
- gx_device_psdf *pdev, gs_pixel_image_t * pim,
+ gx_device_psdf *pdev,
+ const gs_pixel_image_t *input_pim,
+ gs_pixel_image_t * pim,
const gs_gstate *pgs)
{ /* fixme: currently it's a stub convertion to mask. */
int code;
@@ -866,9 +869,9 @@ psdf_setup_image_colors_filter(psdf_binary_writer *pbw,
if (code < 0)
return code;
s_image_colors_set_dimensions((stream_image_colors_state *)ss,
- pim->Width, pim->Height,
- gs_color_space_num_components(pim->ColorSpace),
- pim->BitsPerComponent);
+ pim->Width, pim->Height, input_pim->Width,
+ gs_color_space_num_components(pim->ColorSpace),
+ pim->BitsPerComponent);
s_image_colors_set_color_space((stream_image_colors_state *)ss,
(gx_device *)pdev, pim->ColorSpace, pgs, pim->Decode);
pim->BitsPerComponent = pdev->color_info.comp_bits[0]; /* Same precision for all components. */
diff --git a/devices/vector/gdevpsds.c b/devices/vector/gdevpsds.c
index 44ba2b4c..65bbf544 100644
--- a/devices/vector/gdevpsds.c
+++ b/devices/vector/gdevpsds.c
@@ -1248,13 +1248,14 @@ s_image_colors_set_mask_colors(stream_image_colors_state * ss, uint *MaskColor)
/* Set image dimensions. */
void
s_image_colors_set_dimensions(stream_image_colors_state * ss,
- int width, int height, int depth, int bits_per_sample)
+ int width, int height, int input_width,
+ int depth, int bits_per_sample)
{
ss->width = width;
ss->height = height;
ss->depth = depth;
ss->bits_per_sample = bits_per_sample;
- ss->row_bits = bits_per_sample * depth * width;
+ ss->row_bits = bits_per_sample * depth * input_width;
ss->raster = bitmap_raster(ss->row_bits);
ss->row_alignment_bytes = 0; /* (ss->raster * 8 - ss->row_bits) / 8) doesn't work. */
}
diff --git a/devices/vector/gdevpsds.h b/devices/vector/gdevpsds.h
index 310072ce..35a756f0 100644
--- a/devices/vector/gdevpsds.h
+++ b/devices/vector/gdevpsds.h
@@ -253,7 +253,8 @@ struct stream_image_transfer_state_s {
stream_image_colors_reloc_ptrs, pcs, pdev, pgs)
void s_image_colors_set_dimensions(stream_image_colors_state * st,
- int width, int height, int depth, int bits_per_sample);
+ int width, int height, int input_width,
+ int depth, int bits_per_sample);
void s_image_colors_set_mask_colors(stream_image_colors_state * ss, uint *MaskColor);
diff --git a/devices/vector/gdevpsdu.c b/devices/vector/gdevpsdu.c
index c86405ec..d626358a 100644
--- a/devices/vector/gdevpsdu.c
+++ b/devices/vector/gdevpsdu.c
@@ -393,6 +393,8 @@ psdf_DCT_filter(gs_param_list *plist /* may be NULL */,
&st_jpeg_compress_data, "zDCTE");
if (jcdp == 0)
return_error(gs_error_VMerror);
+ jcdp->cinfo.mem = NULL;
+ jcdp->cinfo.client_data = NULL;
ss->data.compress = jcdp;
jcdp->memory = ss->jpeg_memory = mem; /* set now for allocation */
if ((code = gs_jpeg_create_compress(ss)) < 0)
diff --git a/devices/vector/gdevpsu.c b/devices/vector/gdevpsu.c
index 10a13d95..094ff945 100644
--- a/devices/vector/gdevpsu.c
+++ b/devices/vector/gdevpsu.c
@@ -186,8 +186,13 @@ psw_begin_file_header(gp_file *f, const gx_device *dev, const gs_rect *pbbox,
time_t t;
struct tm tms;
+#ifdef CLUSTER
+ memset(&t, 0, sizeof(t));
+ memset(&tms, 0, sizeof(tms));
+#else
time(&t);
tms = *localtime(&t);
+#endif
fprintf(f, "%%%%CreationDate: %d/%02d/%02d %02d:%02d:%02d\n",
tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday,
tms.tm_hour, tms.tm_min, tms.tm_sec);
diff --git a/devices/vector/gdevpx.c b/devices/vector/gdevpx.c
index 5d2d0edf..a1fce1b7 100644
--- a/devices/vector/gdevpx.c
+++ b/devices/vector/gdevpx.c
@@ -741,6 +741,7 @@ pclxl_write_image_data_RLE(gx_device_pclxl * xdev, const byte * base,
goto nc;
s_RLE_set_defaults_inline(&rlstate);
rlstate.EndOfData = false;
+ rlstate.omitEOD = true;
s_RLE_init_inline(&rlstate);
w.ptr = buf - 1;
w.limit = w.ptr + num_bytes;
diff --git a/devices/vector/gdevtxtw.c b/devices/vector/gdevtxtw.c
index aed535bc..87f9355d 100644
--- a/devices/vector/gdevtxtw.c
+++ b/devices/vector/gdevtxtw.c
@@ -37,10 +37,10 @@
/* #define TRACE_TXTWRITE 1 */
-extern single_glyph_list_t *SingleGlyphList;
-extern double_glyph_list_t *DoubleGlyphList;
-extern treble_glyph_list_t *TrebleGlyphList;
-extern quad_glyph_list_t *QuadGlyphList;
+extern single_glyph_list_t SingleGlyphList[];
+extern double_glyph_list_t DoubleGlyphList[];
+extern treble_glyph_list_t TrebleGlyphList[];
+extern quad_glyph_list_t QuadGlyphList[];
/*
* Define the structure used to return glyph width information. Note that
* there are two different sets of width information: real-number (x,y)
@@ -1046,10 +1046,10 @@ txtwrite_put_params(gx_device * dev, gs_param_list * plist)
{
gx_device_txtwrite_t *tdev = (gx_device_txtwrite_t *) dev;
int ecode = 0;
- int code;
+ int code, old_TextFormat = tdev->TextFormat;
const char *param_name;
gs_param_string ofs;
- bool dummy;
+ bool dummy, open = dev->is_open;
switch (code = param_read_string(plist, (param_name = "OutputFile"), &ofs)) {
case 0:
@@ -1092,12 +1092,6 @@ txtwrite_put_params(gx_device * dev, gs_param_list * plist)
if (code < 0)
return code;
- code = gx_default_put_params(dev, plist);
- if (code < 0)
- return code;
-
- dev->interpolate_control = 0;
-
if (ofs.data != 0) { /* Close the file if it's open. */
if (tdev->file != 0) {
gp_fclose(tdev->file);
@@ -1106,6 +1100,23 @@ txtwrite_put_params(gx_device * dev, gs_param_list * plist)
memcpy(tdev->fname, ofs.data, ofs.size);
tdev->fname[ofs.size] = 0;
}
+
+ /* If we change media size then gs_default_put_params will close
+ * the device if it is open. We don't want it to do that, so set
+ * the device's 'is_open' flag to false, and reset it after we've
+ * processed the params.
+ */
+ if (old_TextFormat == tdev->TextFormat && open)
+ dev->is_open = false;
+
+ code = gx_default_put_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ dev->is_open = open;
+
+ dev->interpolate_control = 0;
+
return 0;
}
@@ -1693,97 +1704,99 @@ static int get_unicode(textw_text_enum_t *penum, gs_font *font, gs_glyph glyph,
length = font->procs.decode_glyph((gs_font *)font, glyph, ch, NULL, 0);
if (length == 0) {
- code = font->procs.glyph_name(font, glyph, &gnstr);
- if (code >= 0 && gnstr.size == 7) {
- if (!memcmp(gnstr.data, "uni", 3)) {
- static const char *hexdigits = "0123456789ABCDEF";
- char *d0 = strchr(hexdigits, gnstr.data[3]);
- char *d1 = strchr(hexdigits, gnstr.data[4]);
- char *d2 = strchr(hexdigits, gnstr.data[5]);
- char *d3 = strchr(hexdigits, gnstr.data[6]);
-
- if (d0 != NULL && d1 != NULL && d2 != NULL && d3 != NULL) {
- *Buffer++ = ((d0 - hexdigits) << 12) + ((d1 - hexdigits) << 8) + ((d2 - hexdigits) << 4) + (d3 - hexdigits);
- return 1;
- }
- }
- }
- if (length == 0) {
- single_glyph_list_t *sentry = (single_glyph_list_t *)&SingleGlyphList;
- double_glyph_list_t *dentry = (double_glyph_list_t *)&DoubleGlyphList;
- treble_glyph_list_t *tentry = (treble_glyph_list_t *)&TrebleGlyphList;
- quad_glyph_list_t *qentry = (quad_glyph_list_t *)&QuadGlyphList;
-
- /* Search glyph to single Unicode value table */
- while (sentry->Glyph != 0) {
- if (sentry->Glyph[0] < gnstr.data[0]) {
- sentry++;
- continue;
- }
- if (sentry->Glyph[0] > gnstr.data[0]){
- break;
- }
- if (strlen(sentry->Glyph) == gnstr.size) {
- if(memcmp(gnstr.data, sentry->Glyph, gnstr.size) == 0) {
- *Buffer = sentry->Unicode;
+ if (glyph != GS_NO_GLYPH) {
+ code = font->procs.glyph_name(font, glyph, &gnstr);
+ if (code >= 0 && gnstr.size == 7) {
+ if (!memcmp(gnstr.data, "uni", 3)) {
+ static const char *hexdigits = "0123456789ABCDEF";
+ char *d0 = strchr(hexdigits, gnstr.data[3]);
+ char *d1 = strchr(hexdigits, gnstr.data[4]);
+ char *d2 = strchr(hexdigits, gnstr.data[5]);
+ char *d3 = strchr(hexdigits, gnstr.data[6]);
+
+ if (d0 != NULL && d1 != NULL && d2 != NULL && d3 != NULL) {
+ *Buffer++ = ((d0 - hexdigits) << 12) + ((d1 - hexdigits) << 8) + ((d2 - hexdigits) << 4) + (d3 - hexdigits);
return 1;
}
}
- sentry++;
}
-
- /* Search glyph to double Unicode value table */
- while (dentry->Glyph != 0) {
- if (dentry->Glyph[0] < gnstr.data[0]) {
- dentry++;
- continue;
- }
- if (dentry->Glyph[0] > gnstr.data[0]){
- break;
- }
- if (strlen(dentry->Glyph) == gnstr.size) {
- if(memcmp(gnstr.data, dentry->Glyph, gnstr.size) == 0) {
- memcpy(Buffer, dentry->Unicode, 2);
- return 2;
+ if (length == 0) {
+ single_glyph_list_t *sentry = SingleGlyphList;
+ double_glyph_list_t *dentry = DoubleGlyphList;
+ treble_glyph_list_t *tentry = TrebleGlyphList;
+ quad_glyph_list_t *qentry = QuadGlyphList;
+
+ /* Search glyph to single Unicode value table */
+ while (sentry->Glyph != 0) {
+ if (sentry->Glyph[0] < gnstr.data[0]) {
+ sentry++;
+ continue;
+ }
+ if (sentry->Glyph[0] > gnstr.data[0]){
+ break;
}
+ if (strlen(sentry->Glyph) == gnstr.size) {
+ if(memcmp(gnstr.data, sentry->Glyph, gnstr.size) == 0) {
+ *Buffer = sentry->Unicode;
+ return 1;
+ }
+ }
+ sentry++;
}
- dentry++;
- }
- /* Search glyph to triple Unicode value table */
- while (tentry->Glyph != 0) {
- if (tentry->Glyph[0] < gnstr.data[0]) {
- tentry++;
- continue;
- }
- if (tentry->Glyph[0] > gnstr.data[0]){
- break;
- }
- if (strlen(tentry->Glyph) == gnstr.size) {
- if(memcmp(gnstr.data, tentry->Glyph, gnstr.size) == 0) {
- memcpy(Buffer, tentry->Unicode, 3);
- return 3;
+ /* Search glyph to double Unicode value table */
+ while (dentry->Glyph != 0) {
+ if (dentry->Glyph[0] < gnstr.data[0]) {
+ dentry++;
+ continue;
+ }
+ if (dentry->Glyph[0] > gnstr.data[0]){
+ break;
+ }
+ if (strlen(dentry->Glyph) == gnstr.size) {
+ if(memcmp(gnstr.data, dentry->Glyph, gnstr.size) == 0) {
+ memcpy(Buffer, dentry->Unicode, 2);
+ return 2;
+ }
}
+ dentry++;
}
- tentry++;
- }
- /* Search glyph to quadruple Unicode value table */
- while (qentry->Glyph != 0) {
- if (qentry->Glyph[0] < gnstr.data[0]) {
- qentry++;
- continue;
- }
- if (qentry->Glyph[0] > gnstr.data[0]){
- break;
+ /* Search glyph to triple Unicode value table */
+ while (tentry->Glyph != 0) {
+ if (tentry->Glyph[0] < gnstr.data[0]) {
+ tentry++;
+ continue;
+ }
+ if (tentry->Glyph[0] > gnstr.data[0]){
+ break;
+ }
+ if (strlen(tentry->Glyph) == gnstr.size) {
+ if(memcmp(gnstr.data, tentry->Glyph, gnstr.size) == 0) {
+ memcpy(Buffer, tentry->Unicode, 3);
+ return 3;
+ }
+ }
+ tentry++;
}
- if (strlen(qentry->Glyph) == gnstr.size) {
- if(memcmp(gnstr.data, qentry->Glyph, gnstr.size) == 0) {
- memcpy(Buffer, qentry->Unicode, 4);
- return 4;
+
+ /* Search glyph to quadruple Unicode value table */
+ while (qentry->Glyph != 0) {
+ if (qentry->Glyph[0] < gnstr.data[0]) {
+ qentry++;
+ continue;
+ }
+ if (qentry->Glyph[0] > gnstr.data[0]){
+ break;
+ }
+ if (strlen(qentry->Glyph) == gnstr.size) {
+ if(memcmp(gnstr.data, qentry->Glyph, gnstr.size) == 0) {
+ memcpy(Buffer, qentry->Unicode, 4);
+ return 4;
+ }
}
+ qentry++;
}
- qentry++;
}
}
*Buffer = fallback;
@@ -1890,8 +1903,8 @@ txtwrite_process_cmap_text(gs_text_enum_t *pte)
pte->returned.total_width.x += dpt.x;
pte->returned.total_width.y += dpt.y;
- penum->TextBufferIndex += get_unicode(penum, (gs_font *)pte->orig_font, glyph, chr, &penum->TextBuffer[penum->TextBufferIndex]);
penum->Widths[penum->TextBufferIndex] += dpt.x;
+ penum->TextBufferIndex += get_unicode(penum, (gs_font *)pte->orig_font, glyph, chr, &penum->TextBuffer[penum->TextBufferIndex]);
break;
case 2: /* end of string */
return 0;
@@ -2109,7 +2122,8 @@ txt_add_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
if (!penum->text_state->Widths)
return gs_note_error(gs_error_VMerror);
- memcpy(penum->text_state->Widths, penum->Widths, penum->TextBufferIndex * sizeof(float));
+ memset(penum->text_state->Widths, 0x00, penum->TextBufferIndex * sizeof(float));
+ memcpy(penum->text_state->Widths, penum->Widths, penum->text.size * sizeof(float));
unsorted_entry->Unicode_Text = (unsigned short *)gs_malloc(tdev->memory->stable_memory,
penum->TextBufferIndex, sizeof(unsigned short), "txtwrite alloc sorted text buffer");
@@ -2121,7 +2135,8 @@ txt_add_fragment(gx_device_txtwrite_t *tdev, textw_text_enum_t *penum)
penum->TextBufferIndex, sizeof(float), "txtwrite alloc widths array");
if (!unsorted_entry->Widths)
return gs_note_error(gs_error_VMerror);
- memcpy(unsorted_entry->Widths, penum->Widths, penum->TextBufferIndex * sizeof(float));
+ memset(unsorted_entry->Widths, 0x00, penum->TextBufferIndex * sizeof(float));
+ memcpy(unsorted_entry->Widths, penum->Widths, penum->text.size * sizeof(float));
unsorted_entry->FontName = (char *)gs_malloc(tdev->memory->stable_memory,
(strlen(penum->text_state->FontName) + 1), sizeof(unsigned char), "txtwrite alloc sorted text buffer");
diff --git a/devices/vector/gdevxps.c b/devices/vector/gdevxps.c
index 71ca1f74..5d98c283 100644
--- a/devices/vector/gdevxps.c
+++ b/devices/vector/gdevxps.c
@@ -152,9 +152,12 @@ typedef struct xps_image_enum_s {
gp_file *fid;
} xps_image_enum_t;
-gs_private_st_suffix_add4(st_xps_image_enum, xps_image_enum_t,
+static void
+xps_image_enum_finalize(const gs_memory_t *cmem, void *vptr);
+
+gs_private_st_suffix_add4_final(st_xps_image_enum, xps_image_enum_t,
"xps_image_enum_t", xps_image_enum_enum_ptrs,
- xps_image_enum_reloc_ptrs, st_vector_image_enum,
+ xps_image_enum_reloc_ptrs, xps_image_enum_finalize, st_vector_image_enum,
buffer, devc_buffer, pcs, pgs);
typedef struct gx_device_xps_s {
@@ -1424,6 +1427,11 @@ xps_finish_image_path(gx_device_vector *vdev)
const char *fmt;
gs_matrix matrix;
+ /* If an error occurs during an image, we can get here after the enumerator
+ * has been freed - if that's the case, just bail out immediately
+ */
+ if (xps->xps_pie == NULL)
+ return;
/* Path is started. Do the image brush image brush and close the path */
write_str_to_current_page(xps, "\t<Path.Fill>\n");
write_str_to_current_page(xps, "\t\t<ImageBrush ");
@@ -2214,17 +2222,6 @@ xps_image_end_image(gx_image_enum_common_t * info, bool draw_last)
code = xps_add_image_relationship(pie);
exit:
- if (pie->pcs != NULL)
- rc_decrement(pie->pcs, "xps_image_end_image (pcs)");
- if (pie->buffer != NULL)
- gs_free_object(pie->memory, pie->buffer, "xps_image_end_image");
- if (pie->devc_buffer != NULL)
- gs_free_object(pie->memory, pie->devc_buffer, "xps_image_end_image");
-
- /* ICC clean up */
- if (pie->icc_link != NULL)
- gsicc_release_link(pie->icc_link);
-
return code;
}
@@ -2485,3 +2482,23 @@ tiff_from_name(gx_device_xps *dev, const char *name, int big_endian, bool usebig
xps_tifsDummyUnmapProc);
return t;
}
+
+static void
+xps_image_enum_finalize(const gs_memory_t *cmem, void *vptr)
+{
+ xps_image_enum_t *xpie = (xps_image_enum_t *)vptr;
+ gx_device_xps *xdev = (gx_device_xps *)xpie->dev;
+
+ xpie->dev = NULL;
+ if (xpie->pcs != NULL)
+ rc_decrement(xpie->pcs, "xps_image_end_image (pcs)");
+ if (xpie->buffer != NULL)
+ gs_free_object(xpie->memory, xpie->buffer, "xps_image_end_image");
+ if (xpie->devc_buffer != NULL)
+ gs_free_object(xpie->memory, xpie->devc_buffer, "xps_image_end_image");
+
+ /* ICC clean up */
+ if (xpie->icc_link != NULL)
+ gsicc_release_link(xpie->icc_link);
+ xdev->xps_pie = NULL;
+}
diff --git a/doc/API.htm b/doc/API.htm
index 913ca228..faee4d58 100644
--- a/doc/API.htm
+++ b/doc/API.htm
@@ -839,18 +839,18 @@ int main(int argc, char *argv[])
code = gsapi_new_instance(&amp;minst, NULL);
if (code &lt; 0)
- return 1;
+ return 1;
code = gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);
if (code == 0)
code = gsapi_init_with_args(minst, gsargc, gsargv);
code1 = gsapi_exit(minst);
if ((code == 0) || (code == gs_error_Quit))
- code = code1;
+ code = code1;
gsapi_delete_instance(minst);
if ((code == 0) || (code == gs_error_Quit))
- return 0;
+ return 0;
return 1;
}
</pre>
@@ -880,13 +880,13 @@ gsdll_stdin(void *instance, char *buf, int len)
int ch;
int count = 0;
while (count &lt; len) {
- ch = fgetc(stdin);
- if (ch == EOF)
- return 0;
- *buf++ = ch;
- count++;
- if (ch == '\n')
- break;
+ ch = fgetc(stdin);
+ if (ch == EOF)
+ return 0;
+ *buf++ = ch;
+ count++;
+ if (ch == '\n')
+ break;
}
return count;
}
@@ -917,21 +917,21 @@ int main(int argc, char *argv[])
code = gsapi_new_instance(&amp;minst, NULL);
if (code &lt; 0)
- return 1;
+ return 1;
gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
code = gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);
if (code == 0)
code = gsapi_init_with_args(minst, argc, argv);
if (code == 0)
- code = gsapi_run_string(minst, start_string, 0, &amp;exit_code);
+ code = gsapi_run_string(minst, start_string, 0, &amp;exit_code);
code1 = gsapi_exit(minst);
if ((code == 0) || (code == gs_error_Quit))
- code = code1;
+ code = code1;
gsapi_delete_instance(minst);
if ((code == 0) || (code == gs_error_Quit))
- return 0;
+ return 0;
return 1;
}
</pre>
@@ -950,27 +950,27 @@ int main(int argc, char *argv[])
code = gsapi_new_instance(&amp;minst, NULL);
if (code &lt; 0)
- return 1;
+ return 1;
code = gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);
if (code == 0)
code = gsapi_init_with_args(minst, argc, argv);
if (code == 0) {
- gsapi_run_string_begin(minst, 0, &amp;exit_code);
- gsapi_run_string_continue(minst, command, strlen(command), 0, &amp;exit_code);
- gsapi_run_string_continue(minst, "qu", 2, 0, &amp;exit_code);
- gsapi_run_string_continue(minst, "it", 2, 0, &amp;exit_code);
- gsapi_run_string_end(minst, 0, &amp;exit_code);
+ gsapi_run_string_begin(minst, 0, &amp;exit_code);
+ gsapi_run_string_continue(minst, command, strlen(command), 0, &amp;exit_code);
+ gsapi_run_string_continue(minst, "qu", 2, 0, &amp;exit_code);
+ gsapi_run_string_continue(minst, "it", 2, 0, &amp;exit_code);
+ gsapi_run_string_end(minst, 0, &amp;exit_code);
}
code1 = gsapi_exit(minst);
if ((code == 0) || (code == gs_error_Quit))
- code = code1;
+ code = code1;
gsapi_delete_instance(minst);
if ((code == 0) || (code == gs_error_Quit))
- return 0;
+ return 0;
return 1;
}
</pre>
@@ -1142,7 +1142,7 @@ implied.</p>
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.</p>
diff --git a/doc/C-style.htm b/doc/C-style.htm
index cbc5b3e4..99fa032a 100644
--- a/doc/C-style.htm
+++ b/doc/C-style.htm
@@ -1614,7 +1614,7 @@ implied.</p>
<p>This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.</p>
diff --git a/doc/DLL.htm b/doc/DLL.htm
index d4be6001..779bbba4 100644
--- a/doc/DLL.htm
+++ b/doc/DLL.htm
@@ -771,12 +771,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Deprecated.htm b/doc/Deprecated.htm
index e5d96250..4e187c6f 100644
--- a/doc/Deprecated.htm
+++ b/doc/Deprecated.htm
@@ -5768,12 +5768,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Develop.htm b/doc/Develop.htm
index 1a235635..65525865 100644
--- a/doc/Develop.htm
+++ b/doc/Develop.htm
@@ -4768,12 +4768,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Devices.htm b/doc/Devices.htm
index 3f123742..166c4080 100644
--- a/doc/Devices.htm
+++ b/doc/Devices.htm
@@ -520,9 +520,9 @@ many colorants occur on a particular page. With Postscript, this is not possibl
in general. To optimize for this, when rendering Postscript, it is possible to specify
at run-time the number of spot colorants you wish to have the device capable
of handling using the -dMaxSpots=N command option, where N is the number of spot
-colorants that you wish to be able to handle and must be
-less than 60 (60 + 4 CMYK process colorants gets us to a
-maximum of 64 colorants on a page). If you specify more than
+colorants that you wish to be able to handle and must be no more than the 64 minus the
+number of process colors. For example, 60 or less for a CMYK device such as tiffsep.
+If you specify more than
is needed, the document will render more slowly. The ideal case is to use
the same number as the maximum number of spot colorants that occur on a single page
of the document. If more spot colorants are encountered than is specified by
@@ -2010,12 +2010,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Drivers.htm b/doc/Drivers.htm
index 3ac03086..a051778b 100644
--- a/doc/Drivers.htm
+++ b/doc/Drivers.htm
@@ -3673,12 +3673,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Fonts.htm b/doc/Fonts.htm
index f343b1c9..e6fa7c09 100644
--- a/doc/Fonts.htm
+++ b/doc/Fonts.htm
@@ -131,7 +131,20 @@ with the names of font <em>files</em>, such as
aliases for font names, so that for instance,
<code>/NimbusNo9L-Regu</code> means the same font as
<code>/Times-Roman</code>.</p>
-
+<p>Where a mapping in <code>Fontmap</code> maps a font name to a path/file,
+the directory containing the font file is automatically added to the <code>permit
+file read</code> list. For example:
+<br>
+<code>/Arial (/usr/share/fonts/truetype/msttcorefonts/arial.ttf) ;</code>
+<br>
+will result in the path <code>/usr/share/fonts/truetype/msttcorefonts/</code> being
+added to the <code>permit file read</code> list. This is done on the basis that font files
+are often grouped in common directories, and rather than risk the file permissions lists
+being swamped with (potentially) hundreds of individual files, it makes sense to add the
+directories.
+<p><b>NOTE:</b> Fontmap is processed (and the paths added to the file permissions list) during
+initialisation of the Postscript interpreter, so any attempt by a Postscript job to change the
+font map cannot influence the file permissions list.
<hr>
<h2><a name="Free_fonts"></a>Ghostscript's free fonts</h2>
@@ -352,12 +365,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/GS9_Color_Management.pdf b/doc/GS9_Color_Management.pdf
index e4bf415a..1fef5528 100644
--- a/doc/GS9_Color_Management.pdf
+++ b/doc/GS9_Color_Management.pdf
Binary files differ
diff --git a/doc/GS9_Color_Management.tex b/doc/GS9_Color_Management.tex
index 16defbe5..0f78532b 100644
--- a/doc/GS9_Color_Management.tex
+++ b/doc/GS9_Color_Management.tex
@@ -24,6 +24,8 @@
\usepackage{color}
\usepackage{caption} % so that I can have captions that dont wrap back under the caption index
\usepackage{hyperref}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
\usepackage[ansinew]{inputenc}
\usepackage[all]{hypcap} % so that links to figures go to the figures and not the captions
\usepackage{subfig} % subfigure
@@ -35,24 +37,24 @@
\begin{titlepage}
-\begin{center}{\huge \bf Ghostscript 9.21 Color Management\\} \vspace{0.5in} {\Large Michael J.
-Vrhel, Ph.D.\\} {\Large Artifex Software\\} {\Large 7 Mt. Lassen Drive, A-134\\} {\Large Novato, CA 94903, USA\\}
+\begin{center}{\huge \bf Ghostscript 9.50 Color Management\\} \vspace{0.5in} {\Large Michael J.
+Vrhel, Ph.D.\\} {\Large Artifex Software\\} {\Large 7 Mt. Lassen Drive, A-134\\} {\Large San Rafael, CA 94903, USA\\}
{\Large www.artifex.com\\}
\end{center}
\vspace*{0.5in}
\begin{abstract}
-This document provides information about the color architecture in Ghostscript 9.21. The document is suitable for users who wish to
+This document provides information about the color architecture in Ghostscript 9.50. The document is suitable for users who wish to
obtain accurate color with their output device as well as for developers who wish to customize Ghostscript to achieve a higher
level of control and/or interface with a different color management module.
\end{abstract}
\begin{center}
\vspace*{0.25in}
-Revision 1.6
+Revision 1.65
\vspace*{0.25in}
\capstartfalse
\begin{figure}[h]
\begin{center}
-\includegraphics*[width=1.5in]{figures/Ghost.pdf}
+\includegraphics*[width=1.5in]{figures/ghostscriptR_stack_RGBclr_CS6.pdf}
\end{center}
\end{figure}
\capstarttrue
@@ -72,7 +74,7 @@ Revision 1.6
With release 9.0, the color architecture of Ghostscript was updated to primarily use the ICC\cite{ICC} format for its color management needs. Prior to this release, Ghostscript's color architecture was based heavily upon PostScript\cite{PS} Color Management (PCM). This is due to the fact that Ghostscript was designed prior to the ICC format and likely even before there was much thought about digital color management. At that point in time, color management was very much an art with someone adjusting controls to achieve the proper output color.
-Today, almost all print color management is performed using ICC profiles as opposed to PCM. This fact along with the desire to create a faster, more flexible design was the motivation for the color architectural changes in release 9.0. Since 9.0, several new features and capabilities have been added. As of the 9.21 release, features of the color architecture include:
+Today, almost all print color management is performed using ICC profiles as opposed to PCM. This fact along with the desire to create a faster, more flexible design was the motivation for the color architectural changes in release 9.0. Since 9.0, several new features and capabilities have been added. As of the 9.50 release, features of the color architecture include:
\begin{itemize}
\item Easy to interface different CMMs (Color Management Modules) with Ghostscript.
\item ALL color spaces are defined in terms of ICC profiles.
@@ -371,7 +373,7 @@ In the first example, copy the files in ./gs/toolbin/color/src\_color/ to ./iccp
% \leavevmode \epsfysize=3.0in
\includegraphics*[width=2.5in]{figures/text_graph_image_cmyk_rgb.pdf}
\end{center}
- \caption{Example file with mixed content. The file includes RGB and CMYK text, graphics, and images}
+ \caption{Example file with mixed content. The file includes RGB and CMYK text, graphics, and iamges}
\label{fig:normal}
\end{figure}
@@ -463,9 +465,9 @@ The manager is created when the imaging state object is created for the graphics
& cmm\_profile\_t *default\_rgb; & \textcolor{green}{/* Default RGB profile for device RGB */} \\
& cmm\_profile\_t *default\_cmyk; & \textcolor{green}{/* Default CMYK profile for device CMKY */} \\
& cmm\_profile\_t *lab\_profile; & \textcolor{green}{/* Colorspace type ICC profile from LAB to LAB */} \\
- & cmm\_profile\_t *xyz\_profile; & \textcolor{green}{/* RGB based profile that hands back CIEXYZ values */} \\
+ & cmm\_profile\_t *xyz\_profile; & \textcolor{green}{/* RGB profile that hands back CIEXYZ values */} \\
& cmm\_profile\_t *graytok\_profile;& \textcolor{green}{/* A specialized profile for mapping gray to K */} \\
- & gsicc\_devicen\_t *device\_n; & \textcolor{green}{/* A linked list of profiles used for DeviceN support */} \\
+ & gsicc\_devicen\_t *device\_n; & \textcolor{green}{/* A linked list of profiles for DeviceN support */} \\
& gsicc\_smask\_t *smask\_profiles; & \textcolor{green}{/* Profiles used when we are in a softmask group */ } \\
& bool override\_internal; & \textcolor{green}{/* Set via the user params */ } \\
& cmm\_srcgtag\_profile\_t *srcgtag\_profile; & \textcolor{green}{/* Object dependent source profiles */ } \\
@@ -525,7 +527,8 @@ Returns an ICC object given a stream pointer to the ICC content. The variables
\\
\begin{tabbing}
-\noindent int {\bf gsicc\_clone\_profile}(cmm\_profile\_t *source, cmm\_profile\_t **destination, gs\_memory\_t *memory);\\
+\noindent int {\bf gsicc\_clone\_profile}(\=cmm\_profile\_t *source, cmm\_profile\_t **destination, \\
+\>gs\_memory\_t *memory);\\
\end{tabbing}
\begin{minipage}[h]{6.0in}
@@ -601,7 +604,8 @@ Read out the serialized icc data contained in the c-list for a given hash code.
\end{minipage}\\
\begin{tabbing}
-\noindent cmm\_profile\_t* {\bf gsicc\_get\_gscs\_profile}(gs\_color\_space *gs\_colorspace, gsicc\_manager\_t *icc\_manager);\\
+\noindent cmm\_profile\_t* {\bf gsicc\_get\_gscs\_profile}(\=gs\_color\_space *gs\_colorspace, \\
+\> gsicc\_manager\_t *icc\_manager);\\
\end{tabbing}
\begin{minipage}[h]{6.0in}
@@ -642,8 +646,8 @@ Detect profiles that were set as part of the default settings. These are needed
\end{minipage}\\
\begin{tabbing}
-\noindent void {\bf gsicc\_get\_srcprofile}(\=gsicc\_colorbuffer\_t data\_cs,
- gs\_graphics\_type\_tag\_t graphics\_type\_tag,\\
+\noindent void {\bf gsicc\_get\_srcprofile}(\=gsicc\_colorbuffer\_t data\_cs,\\
+ \>gs\_graphics\_type\_tag\_t graphics\_type\_tag,\\
\>cmm\_srcgtag\_profile\_t *srcgtag\_profile,
cmm\_profile\_t **profile,\\
\>gsicc\_rendering\_intents\_t *rendering\_intent);\\
@@ -677,8 +681,8 @@ of this structure are shown below.\\
& bool usefastcolor; & \textcolor{green}{/* No color management */} \\
& bool supports\_devn; & \textcolor{green}{/* Set if the device handles DeviceN colors */} \\
& bool sim\_overprint; & \textcolor{green}{/* Indicates we want to do overprint blending */} \\
- & gsicc\_namelist\_t *spotnames; & \textcolor{green}{/* If device has an NCLR ICC profile, list of colorant names */} \\
- & bool prebandthreshold; & \textcolor{green}{/* Set if we should halftone images before display list */} \\
+ & gsicc\_namelist\_t *spotnames; & \textcolor{green}{/* If NCLR ICC profile, list of colorant names */} \\
+ & bool prebandthreshold; & \textcolor{green}{/* Should we halftone images before display list */} \\
& gs\_memory\_t *memory; & \\
& rc\_header rc; &
\end{tabular}
@@ -794,11 +798,11 @@ This is used to initialize a gsicc\_bufferdesc\_t object. Two of these objects a
\\
\begin{tabbing}
-\noindent gsicc\_link\_t* {\bf gsicc\_get\_link}(\=gs\_imager\_state * pis, gx\_device *dev, gs\_color\_space *input\_colorspace,\\
+\noindent gsicc\_link\_t* {\bf gsicc\_get\_link}(\=gs\_imager\_state * pis, gx\_device *dev,\\
+ \> gs\_color\_space *input\_colorspace, \\
\>gs\_color\_space *output\_colorspace,\\
- \> gsicc\_rendering\_param\_t *rendering\_params
- gs\_memory\_t
- *memory);\\
+ \> gsicc\_rendering\_param\_t *rendering\_params,\\
+ \>gs\_memory\_t *memory);\\
\end{tabbing}
\begin{minipage}[h]{6.0in}
@@ -1177,7 +1181,7 @@ Reading Massachusetts, 1999.
\end{thebibliography}
\vspace*{1.25in}
-Copyright (c) 2017, Artifex Software Inc. All rights reserved.
+Copyright (c) 2019, Artifex Software Inc. All rights reserved.
\end{document}
diff --git a/doc/History9.htm b/doc/History9.htm
index 020140dc..ac20b01e 100644
--- a/doc/History9.htm
+++ b/doc/History9.htm
@@ -79,6 +79,7 @@ TOC to see how to edit it for visual conciseness.
<h2>Table of contents</h2>
<blockquote><ul>
+<li><a href="#Version9.51">Version 9.52 (2020-03-19)</a>
<li><a href="#Version9.50">Version 9.50 (2019-10-15)</a>
<li><a href="#Version9.27">Version 9.27 (2019-04-03)</a>
<li><a href="#Version9.26">Version 9.26 (2018-11-20)</a>
@@ -133,6 +134,15891 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
+<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
+<p> Highlights in this release include:
+<ul>
+<li>
+<p>The 9.52 release replaces the 9.51 release, after a problem was reported with 9.51
+which warranted the quick turnaround. Thus, like 9.51, 9.52 is primarily a maintenance
+release, consolidating the changes we introduced in 9.50.
+</li>
+<li>
+<p>We have continued our work on code hygiene for this release, with a focus on the
+static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
+and we have now adopted a policy of maintaining zero Coverity issues in the
+Ghostscript/GhostPDL source base.
+</li>
+<li>
+<p><b>IMPORTANT:</b> In consultation with a representative of
+(<a href="http://www.openprinting.org">OpenPrinting</a>) it is
+our intention to deprecate and, in the not distant future, remove the
+OpenPrinting Vector/Raster Printer Drivers (that is, the <code>opvp</code>
+and <code>oprp</code> devices).
+<p> If you rely on either of these devices, <b><i>please</i></b> get in touch with
+us, so we can discuss your use case, and revise our plans accordingly.
+</li>
+<li>
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
+LCMS2 is not thread safe, and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe, and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
+</li>
+<li>
+<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
+</li>
+</ul>
+<p>For a list of open issues, or to report problems,
+please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
+<h3><a name="9.52_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
+<ul>
+<li>
+<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
+team are built with Microsoft Visual Studio 2019. As a result Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are, or will
+start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
+will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
+</li>
+<li>
+<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
+features), whilst we are improving it, remains sensitive to being driven correctly, and
+incorrect use can have unexpected/undefined results. Hence, as part of improving security
+we limited access to these operators, originally using the <code>-dSAFER</code> feature.
+As we made "SAFER" the default mode, that became unacceptable, hence the new option
+<code>-dALLOWPSTRANSPARENCY</code> which enables access to the operators.
+</li>
+<li>
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
+implementations. Firstly, as mentioned in the 9.50 release notes, SAFER now leaves
+standard Postcript functionality unchanged (except for the file access limitations).
+Secondly, the interaction with <code>save</code>&sol;<code>restore</code> operations,
+see <a href="Use.htm#Safer">SAFER</a>.
+<p><strong>Important Note for Windows Users</strong>:
+<br>
+The file/path pattern matching is case sensitive, even on Windows. This is a
+change in behaviour compared to the old code which, on Windows, was case
+<i>in</i>sensitive. This is in recognition of changes in Windows behaviour,
+in that it now supports (although does not enforce) case sensitivity.
+</li>
+<li>
+<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
+only non-standard and undocumented operators. Nevertheless, it is possible that
+any integrations or utilities that rely on those non-standard and undocumented
+operators may stop working, or may change behaviour.
+<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
+or the gs-devel mailing list would be best), and we'll work with you to either find an
+alternative solution or return the previous functionality, if there is genuinely no other
+option.
+<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for Postscript files. For PDF files, users are encouraged to look
+at <a href="https://www.mupdf.com">MuPDF</a>.
+</li>
+</ul>
+<h3><a name="9.52_changelog"></a>Changelog</h3>
+
+<p><strong>2020-03-14 15:07:37 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eec073529fb8dc0c3bb6d612b61bf483d135c9cf">eec073529fb8dc0c3bb6d612b61bf483d135c9cf</a>
+<blockquote>
+<p>
+ Bug 702217: Reinstate dynamic libs LDFLAGS for MacOS<br>
+<br>
+ With the significant revamp of the platform detection functions in configure<br>
+ the LDFLAGS for building the gs shared library on MacOS went astray. This<br>
+ puts them back in.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 09:06:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9cd9959372b9f14b493b87df57664ea831c5d80">a9cd9959372b9f14b493b87df57664ea831c5d80</a>
+<blockquote>
+<p>
+ Repair device subclassing after fill+stroke commit<br>
+<br>
+ Bug 702221 &quot;Ghostscript 9.51 - SIGFPE when -dFirstPage or -dLastPage is set&quot;<br>
+<br>
+ The fill+stroke commit had an error with the default method for handling<br>
+ fill_stroke_path which passed the subclassing device as a parameter to<br>
+ the child, instead of passing the child device. This caused seg faults,<br>
+ floating point exceptions, hangs, and possibly other problems.<br>
+<br>
+ In addition the object filtering device had been modified to pass the<br>
+ fill+stroke method to the default handler, instead of checking to see<br>
+ if vector operations should be dropped.<br>
+<br>
+ This commit fixes both problems.<br>
+<br>
+base/gdevoflt.c<br>
+base/gdevsclass.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:56:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f712440a2f251ae06277ec4a5ffe8ce7599aa4d8">f712440a2f251ae06277ec4a5ffe8ce7599aa4d8</a>
+<blockquote>
+<p>
+ Add ARCH_MAX_SIZE_T to configure's arch.h prototype<br>
+<br>
+arch/arch_autoconf.h.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:53:15 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=214d16924543fb3116a031463052e8b0eff3f1ae">214d16924543fb3116a031463052e8b0eff3f1ae</a>
+<blockquote>
+<p>
+ Don't fail on missing freetype for auxtools run<br>
+<br>
+ When cross compiling, we shouldn't fail the recursive call to configure if<br>
+ there's no freetype - since it's not required for auxtools.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 17:10:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=15f5f8bad503e9d3e63db9c3ca395deffd6b1e20">15f5f8bad503e9d3e63db9c3ca395deffd6b1e20</a>
+<blockquote>
+<p>
+ Fix 16bit blending problem.<br>
+<br>
+ Seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -r72 -dMaxBitmap=2000M<br>
+ tests_private/pdf/forms/v1.5/proxy_vol_1_number_1_1.pdf<br>
+<br>
+ on page 3.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:04:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f6e3e9238bb5cf7fe44c3c845be286a3314ed905">f6e3e9238bb5cf7fe44c3c845be286a3314ed905</a>
+<blockquote>
+<p>
+ Fix 64bit non-console windows build.<br>
+<br>
+ The creation of the text window was truncating the pointer to<br>
+ long (32bit) size. No idea how we've been getting away with this<br>
+ in the past. I can only assume this has been exposed by<br>
+ differences in the runtime lib with vs2019 as compared to<br>
+ earlier versions.<br>
+<br>
+psi/dwtext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 09:02:51 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda">ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda</a>
+<blockquote>
+<p>
+ Add mention of deprecating/removing opvp/oprp devices<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbaddcf6e251229a1506f2df33844365df39de44">dbaddcf6e251229a1506f2df33844365df39de44</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ad8020c3cb63345dd76119e8978c3353940a68e">4ad8020c3cb63345dd76119e8978c3353940a68e</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3cb8b3a403450d617b2b96ec0349bb99ce0d8379">3cb8b3a403450d617b2b96ec0349bb99ce0d8379</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d4305e916d3f75492d03dfd79ab1aaedf9545e3">5d4305e916d3f75492d03dfd79ab1aaedf9545e3</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c6efee0f594ad29394bf8a303f21d85dcb1d70a">2c6efee0f594ad29394bf8a303f21d85dcb1d70a</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f">ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29335f43967a0f089d6f2f37883a22f1516f7bde">29335f43967a0f089d6f2f37883a22f1516f7bde</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d0889b9fcf3a5d5012fad021b4c53828879016e">1d0889b9fcf3a5d5012fad021b4c53828879016e</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=86f81e9b799b66207c699768616a6e3ba3c311c3">86f81e9b799b66207c699768616a6e3ba3c311c3</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=635303ca7d8a36b3dabc9afbd9132f4b9a36dce5">635303ca7d8a36b3dabc9afbd9132f4b9a36dce5</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a00c75369e082798d82202a2b64d8e4b484d0c11">a00c75369e082798d82202a2b64d8e4b484d0c11</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32f3d6703a7e5c6582c066837783c6697e98b1ca">32f3d6703a7e5c6582c066837783c6697e98b1ca</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c1002cc251907e702fd5db9dc81365a964816c6">6c1002cc251907e702fd5db9dc81365a964816c6</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39557bd53eee75a8b8f762457ce57a5437e79d6c">39557bd53eee75a8b8f762457ce57a5437e79d6c</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60507d492507817bb5ae14a17a01d19c50d41e0a">60507d492507817bb5ae14a17a01d19c50d41e0a</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a9ea36465e97ce729c5ab26dc8e0d1435b7b246">3a9ea36465e97ce729c5ab26dc8e0d1435b7b246</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f3320f9b6214907d24a4a9f77638b199aa95f8e">8f3320f9b6214907d24a4a9f77638b199aa95f8e</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b28d57e7422d2d4df8c805342ad01dfc6c6e1232">b28d57e7422d2d4df8c805342ad01dfc6c6e1232</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0822ac2a5f1f02315a783504fccf615a55cf494f">0822ac2a5f1f02315a783504fccf615a55cf494f</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3">82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ff23ccf08707af544de59d6c59971d0c17098c">b1ff23ccf08707af544de59d6c59971d0c17098c</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=389324fd827e1172eb358b616a32af5fcb2633f6">389324fd827e1172eb358b616a32af5fcb2633f6</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=449433ff6689c603a56186dbde5721f6139aa939">449433ff6689c603a56186dbde5721f6139aa939</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6badfb362efe0fb4f0c3df106a33ecd5b0265ef7">6badfb362efe0fb4f0c3df106a33ecd5b0265ef7</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3dc65600d6d4eb060398f06f148cfe4f07a82439">3dc65600d6d4eb060398f06f148cfe4f07a82439</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=416baca7c4bcf0b1794b7b1647250bf09adaee9d">416baca7c4bcf0b1794b7b1647250bf09adaee9d</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4eb54af16c69ef36371291bd43f853865adea1eb">4eb54af16c69ef36371291bd43f853865adea1eb</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2276988137021618bb3ca440aba50e126160bcd">a2276988137021618bb3ca440aba50e126160bcd</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ddcae93fe1629e81d36b17b7fec9de787b411cc">9ddcae93fe1629e81d36b17b7fec9de787b411cc</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7de8fe5a49df0f9154fa707a934e39c012c3cc2a">7de8fe5a49df0f9154fa707a934e39c012c3cc2a</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d3f8c01231d52a5595e2727b31b8044188a5af8">2d3f8c01231d52a5595e2727b31b8044188a5af8</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=777d79315e0094bef83d241bc0d5683ea6775a55">777d79315e0094bef83d241bc0d5683ea6775a55</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6db4560f1e31bb92321894e0d008d310aa600097">6db4560f1e31bb92321894e0d008d310aa600097</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3">eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e01371e00caa8f5d08ef150a6f594c93ca495be2">e01371e00caa8f5d08ef150a6f594c93ca495be2</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c4e7cddc4d053f2850e697696e2498180547961a">c4e7cddc4d053f2850e697696e2498180547961a</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=239e70cd02491bab1cce9092c07c959427358646">239e70cd02491bab1cce9092c07c959427358646</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db5b51109ddee39b17b2ff2c2ac12f41a70785ef">db5b51109ddee39b17b2ff2c2ac12f41a70785ef</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cddd44e1bfcdaba1c289c3d83645613d136e5e3e">cddd44e1bfcdaba1c289c3d83645613d136e5e3e</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59089ab66b3faaa683bb3aeb0bf856b7aa284f9b">59089ab66b3faaa683bb3aeb0bf856b7aa284f9b</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25cd0c72b98f9efc6968254d1e3a2f33ec376369">25cd0c72b98f9efc6968254d1e3a2f33ec376369</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9523603ac713e365702b81c228edcaaac667dc4">e9523603ac713e365702b81c228edcaaac667dc4</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=924f7ea07c7773a3b1510c6206c9a34227e4b39e">924f7ea07c7773a3b1510c6206c9a34227e4b39e</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98b553c829fad94cd4338910468d2b1b6ee64f7">d98b553c829fad94cd4338910468d2b1b6ee64f7</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f55464d5c1640075a67a8b50557a48766783e08">4f55464d5c1640075a67a8b50557a48766783e08</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1887408860910c19c980f05fd0f8fc93b5f06a1">f1887408860910c19c980f05fd0f8fc93b5f06a1</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9">51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7faa941d09db8856378e45d4f5c81b5f93e5f90">b7faa941d09db8856378e45d4f5c81b5f93e5f90</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619c0231952c20cc14f0eaf603e0cb01aa937eff">619c0231952c20cc14f0eaf603e0cb01aa937eff</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5">8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6beaf42d25f3969b6dc3d8e1b1795017708000c5">6beaf42d25f3969b6dc3d8e1b1795017708000c5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d052b3de78b8034daed23e668758c76a8d8c478">8d052b3de78b8034daed23e668758c76a8d8c478</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1">dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08695f8ccebb0d25eb2a5933ecee92281eefc1be">08695f8ccebb0d25eb2a5933ecee92281eefc1be</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2cdef26db058e84c2cf4dff5f638e669f961b52">e2cdef26db058e84c2cf4dff5f638e669f961b52</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbecd13cc34f3dcdcedd726e7de12c988da9794a">bbecd13cc34f3dcdcedd726e7de12c988da9794a</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68be233f36feb045e442a18c4f4e4d2ced52b197">68be233f36feb045e442a18c4f4e4d2ced52b197</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2dea734a6184668511758fe1929a1d3166df85b6">2dea734a6184668511758fe1929a1d3166df85b6</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9af467b71198710bc42509e00b730a716b8e4828">9af467b71198710bc42509e00b730a716b8e4828</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:37:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9557cdc0b00894bc4c2c1fccb1f19c33fd7eb499">9557cdc0b00894bc4c2c1fccb1f19c33fd7eb499</a>
+<blockquote>
+<p>
+ Dates etc for 9.51 RC1<br>
+<br>
+Makefile.in<br>
+base/gscdefs.h<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 11:11:47 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad317d8d436f3ae282597631464313666451747f">ad317d8d436f3ae282597631464313666451747f</a>
+<blockquote>
+<p>
+ Fix bug 702060: clip_transform_pixel_region was ignoring the 'transpose' flag.<br>
+<br>
+base/gxclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 00:24:25 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c6bfa12cccb726974aa1c3ad5c4887600f7331d">1c6bfa12cccb726974aa1c3ad5c4887600f7331d</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.18 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 00:27:41 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=70f094ae147afdbbcfcff3351f3ec13db6a84c42">70f094ae147afdbbcfcff3351f3ec13db6a84c42</a>
+<blockquote>
+<p>
+ jbig2dec: Sync memento from ghostscript.<br>
+<br>
+jbig2dec/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 16:19:49 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f35924926cb35f08be5a12ded4a00eb2f42aed3e">f35924926cb35f08be5a12ded4a00eb2f42aed3e</a>
+<blockquote>
+<p>
+ Fix leaks after error in gs_main_init_with_args01() (found by memento).<br>
+<br>
+ Fixes various memento failures starting with:<br>
+ MEMENTO_FAILAT=2034 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 16:11:31 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2704441705cb115b352350252480dbb2505d9767">2704441705cb115b352350252480dbb2505d9767</a>
+<blockquote>
+<p>
+ Memento: show backtrace when we start failing.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 16:11:06 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c736329f36c2258011162c97eec59818fb6f147e">c736329f36c2258011162c97eec59818fb6f147e</a>
+<blockquote>
+<p>
+ Fixed segv after alloc failure in ps_impl_allocate_interp_instance() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=2017 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 16:00:29 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1cb9e832424a1185fe081e2238b2ba42f805318">f1cb9e832424a1185fe081e2238b2ba42f805318</a>
+<blockquote>
+<p>
+ Fixed leak in xps_impl_allocate_interp_instance() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=2011 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 15:40:01 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59dba1a5a0f2d45c18249697b3429c250ae7311a">59dba1a5a0f2d45c18249697b3429c250ae7311a</a>
+<blockquote>
+<p>
+ Fixed segv on error in gs_cspace_new_scrgb() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=2006 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gscspace.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 15:30:18 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95378885483aa68969417c84e59be4eb1ad0f05e">95378885483aa68969417c84e59be4eb1ad0f05e</a>
+<blockquote>
+<p>
+ Fixed segv on error in gsicc_set_iccsmaskprofile() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=1951 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 12:21:24 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=691d2e37fc9f06bf6fb0ed009a880f4d40a86f48">691d2e37fc9f06bf6fb0ed009a880f4d40a86f48</a>
+<blockquote>
+<p>
+ Fixed leak on error in xps_impl_allocate_interp_instance() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=1938 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 11:40:59 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=450eb91a0af4901b1f9a259cc69d8976113cbadb">450eb91a0af4901b1f9a259cc69d8976113cbadb</a>
+<blockquote>
+<p>
+ Fix error handling in xps_impl_allocate_interp_instance() (detected by memento).<br>
+<br>
+ Handle error from gs_font_dir_alloc(), and moved all cleanup to end.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=1937 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-10 11:21:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=33130c86c4d46bafe7613e3b4b114481c30d17ad">33130c86c4d46bafe7613e3b4b114481c30d17ad</a>
+<blockquote>
+<p>
+ Fix segv in gsicc_alloc_link() error handling (detected by memento).<br>
+<br>
+ Set up placeholder values in *result before trying to set result-&gt;lock, so that<br>
+ gs_free_object() works without segv.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=431 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsicc_cache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-07 19:01:01 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=da2759cd587e2a67134db469cb143643469f09f5">da2759cd587e2a67134db469cb143643469f09f5</a>
+<blockquote>
+<p>
+ Fix leak on error in gsicc_profile_new() (detected by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=369 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-07 19:38:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ddc921923d36c19480223f3d92c19aee03df961">0ddc921923d36c19480223f3d92c19aee03df961</a>
+<blockquote>
+<p>
+ Pull in a couple of memento fixes from Sebastian.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 16:59:29 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=df70f85ce3f5dd300b5ce75b348e78dff528c2f4">df70f85ce3f5dd300b5ce75b348e78dff528c2f4</a>
+<blockquote>
+<p>
+ jbig2dec: Invite user to define MEMENTO in CFLAGS.<br>
+<br>
+ Previously we invited the user to define MEMENTO in jbig2_priv.h.<br>
+ The problem with doing that is that the flag is enabled for all .c<br>
+ modules, except memento.c. This implies that while memento's wrapper<br>
+ functions are called, the versions being called are the ones that<br>
+ have memento features disabled.<br>
+<br>
+ Setting CFLAGS=-DMEMENTO while configuring/building is the better<br>
+ option as CFLAGS will affect all .c modules.<br>
+<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 16:55:51 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=20009c9e35eca1d66f0c1d2fadb9956304692156">20009c9e35eca1d66f0c1d2fadb9956304692156</a>
+<blockquote>
+<p>
+ jbig2dec: Fix compilation issues with memento build.<br>
+<br>
+jbig2dec/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-17 12:11:54 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5fde8364de28bc44965a57f1dd0190c0966bccb4">5fde8364de28bc44965a57f1dd0190c0966bccb4</a>
+<blockquote>
+<p>
+ jbig2dec: Fix memento interfering with allocator callback names.<br>
+<br>
+ Memento changes the names of the callbacks when they are set, but<br>
+ not when the structure is defined in the command line tool. Work<br>
+ around this by including memento prior to the structure being<br>
+ defined so that memento changes the names in both places.<br>
+<br>
+ The alternative would be changing the jbig2dec API yet again.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-08 03:18:09 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22665fbc3ff92c46952b07fcb99b8102e0fabde5">22665fbc3ff92c46952b07fcb99b8102e0fabde5</a>
+<blockquote>
+<p>
+ jbig2dec: Sync memento from ghostscript.<br>
+<br>
+jbig2dec/memento.c<br>
+jbig2dec/memento.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-11 01:51:19 +0100
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ebe1bfef330f4568c6ef394571cf800604dff277">ebe1bfef330f4568c6ef394571cf800604dff277</a>
+<blockquote>
+<p>
+ Bug 702097: Import security fixes for OpenJPEG.<br>
+<br>
+ Upstream has merged two security fixes. At the moment there is<br>
+ no new upstream release, so we merge the two fixes downstream:<br>
+<br>
+ * Fix for upstream issue #1228, registered as CVE-2020-6851:<br>
+ https://github.com/uclouvain/openjpeg/commit/024b8407392cb0b82b04b58ed256094ed5799e04<br>
+ &quot;opj_j2k_update_image_dimensions(): reject images whose coordinates are beyond INT_MAX (fixes #1228)&quot;<br>
+<br>
+ * Fix for upstream issue #1231, registered as CVE-2020-8112:<br>
+ https://github.com/uclouvain/openjpeg/commit/05f9b91e60debda0e83977e5e63b2e66486f7074<br>
+ &quot;opj_tcd_init_tile(): avoid integer overflow<br>
+ That could lead to later assertion failures.<br>
+ Fixes #1231 / CVE-2020-8112&quot;<br>
+<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+openjpeg/src/lib/openjp2/tcd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-06 11:47:48 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c6d8dcf8448235895759fb7e3268105c4092a194">c6d8dcf8448235895759fb7e3268105c4092a194</a>
+<blockquote>
+<p>
+ clusterpush.pl: exclude all *-bin and *-obj directories.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-07 14:27:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e507f7e272cfe94099ed6a395a3fa584d56fd3aa">e507f7e272cfe94099ed6a395a3fa584d56fd3aa</a>
+<blockquote>
+<p>
+ Fixed memento leak when squeezed in gs_main_init1().<br>
+<br>
+ Fixes leaked blocks in:<br>
+ MEMENTO_FAILAT=202 ./membin/gs -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+ Also in context_state_alloc(), ensure pcst-&gt;memory is valid even if we return<br>
+ an error.<br>
+<br>
+psi/icontext.c<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-07 12:33:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e9f7fc153d92cbed9a4f1fcf60778176888625d">0e9f7fc153d92cbed9a4f1fcf60778176888625d</a>
+<blockquote>
+<p>
+ Bug 702100: Followup: Fix arch.h for OS-X to include size_t changes.<br>
+<br>
+ Our fix for Bug 702100 meant we were using newly defined size_t<br>
+ limits from arch.h. While these were generated correctly for<br>
+ things using arch.h, they were missed out of one of the<br>
+ pregenerated files in the arch directory, namely the OS-X one.<br>
+<br>
+ Add those back here.<br>
+<br>
+ Thanks to Peter Skarpetis for reporting this.<br>
+<br>
+arch/osx-x86-x86_64-ppc-gcc.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-06 15:08:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e193b5dc14a6029b2648a5712c154499d819186f">e193b5dc14a6029b2648a5712c154499d819186f</a>
+<blockquote>
+<p>
+ Bug 702100: Fix memory limit to be based on size_t not long.<br>
+<br>
+ I missed this when converting from longs to size_ts. This<br>
+ resulted on different maximums for linux and windows 64bit<br>
+ builds, due to the different size of longs on those two<br>
+ platforms.<br>
+<br>
+ Update the debugging printfs to make use of the PRIdSIZE macros<br>
+ rather than truncating.<br>
+<br>
+base/gsalloc.c<br>
+base/gsmalloc.c<br>
+base/std.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-06 14:39:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ac7d3c0ed5a339c8e2fe25c43feac92b9813b1b">3ac7d3c0ed5a339c8e2fe25c43feac92b9813b1b</a>
+<blockquote>
+<p>
+ Sync memento between mupdf and gs.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-06 13:02:33 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d185c5afea23e937edda368491d382650001f5b4">d185c5afea23e937edda368491d382650001f5b4</a>
+<blockquote>
+<p>
+ Memento: Remove MEMENTO_SQUEEZE_BUILD from the code.<br>
+<br>
+ Rather than relying on building with MEMENTO_SQUEEZE_BUILD,<br>
+ instead nobble the pthread based threading functions themselves<br>
+ to check Memento_squeezing in MEMENTO builds.<br>
+<br>
+ a) This means less pollution of the code overall as the changes<br>
+ are restricted to just one module.<br>
+<br>
+ b) This will stop me forgetting to build with MEMENTO_SQUEEZE_BUILD<br>
+ and not understanding the results - EVERY SINGLE TIME.<br>
+<br>
+ c) It means a single MEMENTO build can be used both for<br>
+ memory squeezing (of single-threaded runs) and normal memento<br>
+ testing (of both single- and multi-threaded runs).<br>
+<br>
+base/gp_psync.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_lcms2.c<br>
+base/gsicc_lcms2mt.c<br>
+base/gsicc_manage.c<br>
+base/gslibctx.c<br>
+base/gsmalloc.c<br>
+base/memento.c<br>
+base/memento.h<br>
+base/sjpx_openjpeg.c<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-06 11:06:38 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f40471ba6312a89cda81c23c1690dfbdbbc2722f">f40471ba6312a89cda81c23c1690dfbdbbc2722f</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=352 in gsicc_cache_new()<br>
+<br>
+ Ensure that result's fields are initialised before we attempt to allocate<br>
+ result-&gt;lock. Otherwise if the latter fails and we attempt to clean up,<br>
+ icc_linkcache_finalize() will get a SEGV.<br>
+<br>
+base/gsicc_cache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-10-31 20:22:11 +0100
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=37fae2058eb7216c60801dfdbd5b9c987446866a">37fae2058eb7216c60801dfdbd5b9c987446866a</a>
+<blockquote>
+<p>
+ Re-apply fix for bug 700088 lost in openjpeg 2.3.1 upgrade.<br>
+<br>
+ The original commit message read:<br>
+<br>
+ Bug 700088: Report error if all wanted J2K components are not decoded.<br>
+<br>
+ Ghostscript used to attempt to use even the undecoded components.<br>
+ The source code for upstream's opj_decompress tool avoided this by<br>
+ a workaround along with a comment indicating that this ought to be<br>
+ done in the library (so all clients, e.g. Ghostscript will benefit<br>
+ from it). With this commit the library will error out if not all<br>
+ requested components are successfully decoded. Thus Ghostscript<br>
+ will no longer crash.<br>
+<br>
+ Reported in https://github.com/uclouvain/openjpeg/issues/1158<br>
+ sent upstream in https://github.com/uclouvain/openjpeg/pull/1164<br>
+ and finally committed in e66125fe260deee49fdf6e9978d9bd29871dd5bb<br>
+<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-05 11:53:57 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=56e3ed1abc84ef0c8a718b458a5734b016e7b8cc">56e3ed1abc84ef0c8a718b458a5734b016e7b8cc</a>
+<blockquote>
+<p>
+ jbig2dec: Simplify jbig2_arith_decode.<br>
+<br>
+ Previously we passed in an int * to get errors back, and<br>
+ used the return code for 0 or 1. Now we use the return code<br>
+ for 0, 1 or -ve for error.<br>
+<br>
+ This saves between 1% and 2% of gs runtime for decoding<br>
+ tests/pdf/Jbig2_042_06.pdf.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith.h<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_refinement.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-04 11:10:41 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db24ea3579f2fb6feef7eef98b7163ce6879ef98">db24ea3579f2fb6feef7eef98b7163ce6879ef98</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Revised handling of images within smasks.<br>
+<br>
+ In an earlier commit, (Jan 27th, f6f8b8de) I updated the gridfitting<br>
+ logic so that Images within SMask definitions were gridfitted. This<br>
+ solved the original complaint.<br>
+<br>
+ Sadly, this caused problems with other things (thanks to Ken for<br>
+ spotting them). Files sometimes use an image in an smask, and then<br>
+ another &quot;matching&quot; image masked by that smask. The upshot of my<br>
+ new code was that we'd treat them differently. 'Stretching' the<br>
+ SMasked image, and not stretching the underlying image could cause<br>
+ moire effects.<br>
+<br>
+ The solution, implemented here, is to apply gridfitting to images<br>
+ both in SMask definitions and usage.<br>
+<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gxdevsop.h<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-03 11:06:48 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=93ff4543685f8692db40a8911ad4605124b3433c">93ff4543685f8692db40a8911ad4605124b3433c</a>
+<blockquote>
+<p>
+ jbig2dec: Fix OSS-Fuzz issue 20493<br>
+<br>
+ The maximum x gbat works out as 126, where GBW is 32.<br>
+ This makes right = GBW - gmax huge. Clip the value to<br>
+ avoid problems.<br>
+<br>
+ Thanks for OSS-Fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-04 11:33:02 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a8572b92d6839abc60ecce6fae7a23b8b3a6bbbd">a8572b92d6839abc60ecce6fae7a23b8b3a6bbbd</a>
+<blockquote>
+<p>
+ Fix test of uninitialised value in halftone screens<br>
+<br>
+ This is a result of bug #702077 and commit :<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=f434497caaf2624caabbbc62f36b745e096e95b5<br>
+<br>
+ There's nothing wrong with the commit, but a 64-bit release build on<br>
+ Linux, using the customer file and 720 dpi, resulted in an infinite<br>
+ loop. Valgrind suggested this was due to an uninitialised variable.<br>
+<br>
+ The problem here was that the code assumed that the first iteration<br>
+ looking for the best match would succeed. However, because the halftone<br>
+ has a Frequency of 1 the value of 'W' exceeded the maximum of a short,<br>
+ which led to use running round the loop without finding a valid halftone.<br>
+<br>
+ Because we didn't find a valid halftone we would not set phcp to the<br>
+ values in 'p' (which is set by gx_compute_cell_values) and so we would<br>
+ test phcp-&gt;C which was uninitialised, and could end up going round the<br>
+ loop retrying with different values of rt endlessly.<br>
+<br>
+ This commit simply short-circuits this by checking to see if we have<br>
+ at least one valid match (rt is not 1) or that we have set phcp to p<br>
+ (better is true). If we have done neither of these, then exit<br>
+ immediately with an error to prevent testing phcp-&gt;C.<br>
+<br>
+base/gshtscr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-03 16:29:59 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b439a0a33f637254a831b3e76525002df3d41774">b439a0a33f637254a831b3e76525002df3d41774</a>
+<blockquote>
+<p>
+ jbig2dec: Fix OSS-Fuzz issue 20505.<br>
+<br>
+ Previous code could overflow if w &gt;= 2^32 - 32, breaking behaviour of 'if'<br>
+ statements and causing incorrect behaviour (including assert failures).<br>
+<br>
+ The fix is due to sebras - change expressions such as (x + 32 &gt; w) to (w - x &lt;<br>
+ 32) to avoid overflow for very large w. (We know at all times that x &lt;= w.)<br>
+<br>
+ Thanks for OSS-Fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_mmr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-03 11:06:48 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ece7a0b952d5dbca2a04682f38199444cb1ea16f">ece7a0b952d5dbca2a04682f38199444cb1ea16f</a>
+<blockquote>
+<p>
+ jbig2dec: Fix OSS-Fuzz issue 20493<br>
+<br>
+ The maximum x gbat works out as 126, where GBW is 32.<br>
+ This makes right = GBW - gmax huge. Clip the value to<br>
+ avoid problems.<br>
+<br>
+ Thanks for OSS-Fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-03 10:54:09 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f434497caaf2624caabbbc62f36b745e096e95b5">f434497caaf2624caabbbc62f36b745e096e95b5</a>
+<blockquote>
+<p>
+ PDF interpreter - don't abort stream on halftone errors<br>
+<br>
+ Bug #702077 &quot;Rangecheck error @720 dpi in sethalftone with SimpleDot&quot;<br>
+<br>
+ The supplied PDF file has a legal but stupid Halftone, it has a type 5<br>
+ halftone that does not specify a child halftone for each ink, for those<br>
+ inks that it does specify it uses the same halftone for all of them, and<br>
+ the child haftone has a /Frequency and /Angle of 1.<br>
+<br>
+ Chris suggests this is a Harlequin Rip specific halftone which is<br>
+ intended not to be used, but to be replaced by something in the rip. Of<br>
+ course this means that the PDF file is now device-specific because any<br>
+ conforming PDF consumer which halftones should use the crazy halftone<br>
+ in the file which will lead to terrible output.<br>
+<br>
+ However, poor quality isn't the complaint here, its the fact that we<br>
+ simply cannot create a halftone tile large enough to produce a 1 lpi<br>
+ screen at 720 dpi, so we throw an error.<br>
+<br>
+ I believe this is a reasonable error, so I'm not going to try and<br>
+ change it. Instead this commit runs sethalftone in a stopped context<br>
+ and, if it fails, does not abort the current content stream but instead<br>
+ emits a warning and carries on.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-03 10:15:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6a32a890b95355165cbaf79ff679c2f774b41d26">6a32a890b95355165cbaf79ff679c2f774b41d26</a>
+<blockquote>
+<p>
+ Update msvc.mak to cope with new nmake version.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-30 19:08:55 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a3bc57e11d62227a73e9d86d804966740a6a2196">a3bc57e11d62227a73e9d86d804966740a6a2196</a>
+<blockquote>
+<p>
+ Fix SEGV with -ZB debug in gx_image1_plane_data<br>
+<br>
+ Discovered while debugging. If the buffer is used &quot;in place&quot; without<br>
+ copying, the 'buffer' pointer in the debug loop would be NULL. Instead<br>
+ use the penum-&gt;buffer.<br>
+<br>
+base/gxidata.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 15:34:58 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c5a25063d6041902442334f633840bd8660451e">1c5a25063d6041902442334f633840bd8660451e</a>
+<blockquote>
+<p>
+ Further optimisations to jbig2_decode_generic functions.<br>
+<br>
+ Carry 'window' of pixel data across scanlines, and read<br>
+ samples from it.<br>
+<br>
+ Write pixel data back in whole bytes rather than single bits.<br>
+ Sadly, for cases where the adaptive pixels are non-standard we<br>
+ need to write back after every pixel in case the adaptive<br>
+ pixels read from it.<br>
+<br>
+ Profiling shows the time spent in the hotspot with jbig2_042_08.pdf<br>
+ drops from 56% to 43% with this optimisation.<br>
+<br>
+ Particular thanks to Sebastian for spotting various issues with<br>
+ this.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 15:21:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e84a5f7ca660af4de1afb5bce79f6262b44ebd1">0e84a5f7ca660af4de1afb5bce79f6262b44ebd1</a>
+<blockquote>
+<p>
+ Solve warnings in jbig2_image.h.<br>
+<br>
+ Move some static inlines into the only file they are called<br>
+ from rather than having them in the header.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_image.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-30 09:39:40 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e852e56f0413d5ecb70a83fc03d78ad4a0561433">e852e56f0413d5ecb70a83fc03d78ad4a0561433</a>
+<blockquote>
+<p>
+ More 'trailing white space' fixes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-30 09:12:13 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97868a9e6c787ea988f43952ae5d4236e142db13">97868a9e6c787ea988f43952ae5d4236e142db13</a>
+<blockquote>
+<p>
+ Fix trailing white spaces in a number of places.<br>
+<br>
+ Since I use the Git commit hooks to verify no white space problems I<br>
+ can't merge master into the pdfi branch without first fixing these.<br>
+<br>
+base/gp_unifs.c<br>
+base/gscolor2.c<br>
+base/gscspace.c<br>
+base/gsovrc.c<br>
+base/gxblend.c<br>
+base/gxccache.c<br>
+base/gxclthrd.c<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 15:10:06 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3b2ae21ca594934728f623667db1a002286193ea">3b2ae21ca594934728f623667db1a002286193ea</a>
+<blockquote>
+<p>
+ Fix plane_strip_copy_rop() to use correct color depth when processing the plane.<br>
+<br>
+ Temporarily change mdev-&gt;color_info.depth to mdev-&gt;planes[plane].depth<br>
+ so that things work when we process the plane. E.g. this fixes bug where<br>
+ mem_gray8_rgb24_strip_copy_rop() was overwriting into the line_ptrs[] array.<br>
+<br>
+ Fixes segv in:<br>
+ ./bin/gs -sOutputFile=foo -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=10000 -sDEVICE=psdrgb -r300 -Z: -sDEFAULTPAPERSIZE=letter -dNOPAUSE -dBATCH -K2000000 -dClusterJob -dJOBSERVER ../fts_27_2709.pdf<br>
+<br>
+base/gdevmpla.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-27 15:50:44 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f6f8b8de526266eebd850e43bf1d0037b6f62e4c">f6f8b8de526266eebd850e43bf1d0037b6f62e4c</a>
+<blockquote>
+<p>
+ Bug 702068: Fix 'cracks' appearing around transparently blended regions.<br>
+<br>
+ As part of rendering SMasks, we take the bbox for the region, and round<br>
+ it up to make the buffer in pdf14. If (as is frequently the case) the<br>
+ SMask contents are an image, the PS rendering of that image can result<br>
+ in it rounding DOWN (due to &quot;any part of a pixel&quot; vs &quot;pixel centre<br>
+ covered&quot;). This can result in 'cracks' around the edge of smasked<br>
+ groups.<br>
+<br>
+ The fix, implemented here, is to extend the logic that &quot;gridfits&quot;<br>
+ images within pattern accumulator to also cover smasks.<br>
+<br>
+ To make this work we add a new gx_dev_spec_op to detect whether we are<br>
+ in an smask definition.<br>
+<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gxdevsop.h<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 12:40:14 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e22376d9226b02ac8cb7951264dae2f3c1bc0b7f">e22376d9226b02ac8cb7951264dae2f3c1bc0b7f</a>
+<blockquote>
+<p>
+ jbig2dec: Fix OSS-Fuzz issue 20358<br>
+<br>
+ Avoid a signed/unsigned comparison which was implicitly casting<br>
+ gmax=-1 to unsigned, and hence making right larger than it should<br>
+ have been.<br>
+<br>
+ Apply similar fixes to equivalent places in the code.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 11:00:18 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc48809733f2eec9ab96c012f62c9dd3a7c06c90">dc48809733f2eec9ab96c012f62c9dd3a7c06c90</a>
+<blockquote>
+<p>
+ Tweak stdpre.h's definition of inline.<br>
+<br>
+ Ensure it's actually set when possible, in particular for<br>
+ VS.<br>
+<br>
+base/stdpre.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-28 17:54:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2450ea4feb89996e1107bb79d44a049bab5b971e">2450ea4feb89996e1107bb79d44a049bab5b971e</a>
+<blockquote>
+<p>
+ MSVC makefile tweaks for VS2019.<br>
+<br>
+ Spot a new version of nmake, as supplied with the latest version<br>
+ of the platform tools.<br>
+<br>
+ Cope with both Community and Professional versions of VS2019.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 10:00:39 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cb456c92a550e1af70a4e268b2f5b02f2df5b8c6">cb456c92a550e1af70a4e268b2f5b02f2df5b8c6</a>
+<blockquote>
+<p>
+ Fix jbig2dec compilation when inline is not defined.<br>
+<br>
+ VS 2008 defines __inline but not inline, later versions of Visual Studio<br>
+ do define inline, but apparently also permit __inline (presumably for<br>
+ backwards compatibility).<br>
+<br>
+ Since we now use inline for performance purposes in jbig2_image.h its<br>
+ vital that inline is defined. Here we modify the win32 config file to<br>
+ define inline in terms of __inline for VS 2008 and above, unless inline<br>
+ is already defined in which case we use it as is. For VS 2005<br>
+ Ghostscript defines inline as nothing, so we do the same.<br>
+<br>
+ Finally, add a last-ditch definition of inline (as nothing) to jbig2.h<br>
+ to cover any build environment where inline is still undefined, so that<br>
+ the code will at least compile.<br>
+<br>
+jbig2dec/config_win32.h<br>
+jbig2dec/jbig2.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-29 05:04:34 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=440dca503ee663290227334415f0c482e87b4ad7">440dca503ee663290227334415f0c482e87b4ad7</a>
+<blockquote>
+<p>
+ Bug 702041: Recognize pre-multiplied alpha when decoding with OpenJPEG.<br>
+<br>
+ The bug's attached PDF has an annotation where the apperance stream consists of<br>
+ a JPEG2000 image with a softmask embedded in the image data (SMaskInData is<br>
+ non-zero). The JPEG2000 bitstream provides all three RGB channels and has both<br>
+ non-pre-multiplied and pre-multiplied alpha. The last alpha channel defined in<br>
+ the bitstream happens to be the pre-multiplied alpha. Having more than than a<br>
+ single alpha channel is not allowed according to PDF 2.0 if SMaskInData is<br>
+ non-zero. So the JPEG2000 bitstream (and by inference the PDF file) is arguably<br>
+ broken.<br>
+<br>
+ Adobe Acrobat renders the annotation as a mostly transparent image consisting<br>
+ of a few hand-scribbled lines, but Ghostscript renders the annotation as a<br>
+ solid black square. So a workaround to match Acrobat is needed even if the PDF<br>
+ is broken.<br>
+<br>
+ OpenJPEG hides that the JPEG2000 bitstream has multiple alpha channels by<br>
+ discarding all alpha channels except the last one defined, so Ghostscript can<br>
+ only get at the pre-multipled alpha channel. Previously the OpenJPEG glue layer<br>
+ therefore didn't recognize any alpha channels at all. The PDF interpreter has<br>
+ its own JPX cdef header decoder in Resources/Init/pdf_draw.ps and it _did_<br>
+ recognize that the file contained an alpha channel. This mismatch between the<br>
+ OpenJPEG glue layer and the PDF interpreter meant that no alpha channel data<br>
+ was propagated to the transparency compositor. It assumed that the alpha<br>
+ channel was fully opaque and because the RGB channels are all zero the<br>
+ annotation was rendered as a solid black square.<br>
+<br>
+ Now that pre-multiplied alpha channels are recognized both in the OpenJPEG glue<br>
+ layer and in the PDF interpreter the pre-multiplied alpha channel data which<br>
+ contains the hand-scribbling is propagated to the transparency compositor which<br>
+ therefore can render the annotation similar to Acrobat.<br>
+<br>
+base/sjpx_openjpeg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-28 10:48:34 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e529d11fa270f8a40ebc2512cfb19cf8d3b0e50">0e529d11fa270f8a40ebc2512cfb19cf8d3b0e50</a>
+<blockquote>
+<p>
+ Remove &quot;STANDARD_SLOW_VERSION&quot; define from openjpeg makefile.<br>
+<br>
+ This was added (apparently) to workaround a bug causing SEGVs<br>
+ in the optimised code. Sadly, this also halves the speed of the<br>
+ code.<br>
+<br>
+ We have updated openjpeg since, so it shouldn't be necessary.<br>
+ Tests with the cluster seem to bear this out.<br>
+<br>
+base/openjpeg.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-28 17:35:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9156c43b44b64c3928d2ef20f15d56bd44c6f897">9156c43b44b64c3928d2ef20f15d56bd44c6f897</a>
+<blockquote>
+<p>
+ gpdl: Update j2k reading code to spot modified header.<br>
+<br>
+ The JP2K spec says we should spot &quot;jP &quot;, where previously<br>
+ we'd only been spotting &quot;jP\1a\1a&quot;. No idea where that<br>
+ latter one came from, but presumably we've been seeing it<br>
+ in some files. Make the code cope with both.<br>
+<br>
+gpdl/jp2ktop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-27 11:05:38 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85cf3b3a7befbed4811d9460dc6a4637f929f8ab">85cf3b3a7befbed4811d9460dc6a4637f929f8ab</a>
+<blockquote>
+<p>
+ Fix bug 702065: Multiple rendering threads run slower.<br>
+<br>
+ The image_render_color_DeviceN would remap colors using gx_remap_ICC<br>
+ which would get the link from the icclink_cache every time. This would<br>
+ temporarily lock the mutex for the cache which apparently caused delays.<br>
+<br>
+ This would only occur in devices that support spot colors, when the page<br>
+ used transparency due to gx_device_uses_std_cmap_procs returning false in<br>
+ this case.<br>
+<br>
+ The change refactors gx_remap_ICC to produce gx_remap_ICC_with_link that<br>
+ can be used by image_render_color_DeviceN with an icc_link that is retained<br>
+ in the image enum. The gs_image_class_4_color function is changed to get the<br>
+ icc_link for the image_enum before checking the for std cmap procs so that<br>
+ it will be available during image_render_color_DeviceN.<br>
+<br>
+base/gsicc.c<br>
+base/gsicc.h<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-28 10:47:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fe9e85d882ade3ebd55c4da0baf1f10d4bb8542d">fe9e85d882ade3ebd55c4da0baf1f10d4bb8542d</a>
+<blockquote>
+<p>
+ Remove stray defines from CAL makefile.<br>
+<br>
+ When I created the CAL makefile, I copied bits of it from elsewhere.<br>
+ I obviously copied in a few stray defines. Remove those.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-27 13:07:00 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad285b8ae3e1871db43d35e87f49e1d099eaf047">ad285b8ae3e1871db43d35e87f49e1d099eaf047</a>
+<blockquote>
+<p>
+ Fix devn code that failed to check for allocation returning NULL<br>
+<br>
+ Discovered while fixing Coverity CID 353647. pdf14_spot_get_color_comp_index<br>
+ failed to check, and since that code was copied from code in this file,<br>
+ it had the same problem.<br>
+<br>
+base/gdevdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-27 13:01:28 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6efb69c6ae71b10b492ca194f92bfae17310c481">6efb69c6ae71b10b492ca194f92bfae17310c481</a>
+<blockquote>
+<p>
+ Fix Coverity ID 353647: Possible out of bounds access<br>
+<br>
+ The testing where separations were added in pdf14_spot_get_color_comp_index<br>
+ was wrong since it failed to take into account the process colorants.<br>
+<br>
+ Also I found that the allocation of sep_name was not checked for NULL which<br>
+ could lead to dreferencing location 0 if the allocation failed. Note that<br>
+ there were other instances of this in gdevdevn.c which will be fixed in a<br>
+ separate commit.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 11:19:45 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=089bff145f277d66afe4a3d9e19441aeccaed235">089bff145f277d66afe4a3d9e19441aeccaed235</a>
+<blockquote>
+<p>
+ Fix bug 702062: Opacity being applied twice.<br>
+<br>
+ If an image has an SMask, the alpha was applied twice, during painting of<br>
+ the transparency group and again when the transparencygroup was popped.<br>
+ Thanks to Michael Vrhel for the analysis and suggested cure.<br>
+<br>
+ If the device has PreserveSMask (e.g., pdfwrite) the SMask will be processed<br>
+ by the device and we should not push the group, nor change the opacity.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-27 10:12:24 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17411adec88c3a846c10cb583cb261f50ca878d6">17411adec88c3a846c10cb583cb261f50ca878d6</a>
+<blockquote>
+<p>
+ Fix OSS-Fuzz issue 20332: buffer overflow in jbig2_image_compose.<br>
+<br>
+ With extreme values of x/y/w/h we can get overflow. Test for this<br>
+ and exit safely.<br>
+<br>
+ Thanks for OSS-Fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 14:45:15 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=430b6a3eacd9648d029887081e99b3a3f0bba3c7">430b6a3eacd9648d029887081e99b3a3f0bba3c7</a>
+<blockquote>
+<p>
+ Further optimisation to jbig2_decode_generic_template0_TPGDON.<br>
+<br>
+ When the &quot;standard&quot; values for gbat are used, the pixel lookups<br>
+ simplify nicely. Optimise for this case.<br>
+<br>
+ This brings the time spent in this function down to 17% (from 22%)<br>
+ for JBig2_042_08.pdf.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 12:55:27 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=94d8ea178fa7c36ad7b844d6d0912b6e090a35e2">94d8ea178fa7c36ad7b844d6d0912b6e090a35e2</a>
+<blockquote>
+<p>
+ Further optimisations to jbig2_decode_generic_template0_TPGDON.<br>
+<br>
+ Add a function to get a 'run' of pixels, and call that.<br>
+<br>
+ This takes the time spent in this function from 29% to 22% for<br>
+ Jbig2_042_08.pdf.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_image.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 12:09:08 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=124ef6a255de0a2816cce32c4fba0852eac1beb3">124ef6a255de0a2816cce32c4fba0852eac1beb3</a>
+<blockquote>
+<p>
+ jbig2dec: Optimise jbig2_decode_generic_template0_TPGDON<br>
+<br>
+ Decodes of JBig2_042_08.pdf (the worst comparing file to<br>
+ luratech in terms of time) show significant time in that<br>
+ function (45%). With this patch that drops to 29%.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_image.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-25 19:05:09 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2f9e74ece1690520cb77d7761cf0a5ddaa98474">a2f9e74ece1690520cb77d7761cf0a5ddaa98474</a>
+<blockquote>
+<p>
+ Coverity 94484: try different spacing in coverity annotation.<br>
+<br>
+base/gsbitcom.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-24 18:08:22 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34518a9aeaece63d97eda9b802824581846e289e">34518a9aeaece63d97eda9b802824581846e289e</a>
+<blockquote>
+<p>
+ jbig2dec: Fix whitespace issues from jbig2_image.c<br>
+<br>
+ Introduced because I edited this in MuPDF and copied it back across.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-24 18:00:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c1565a04a938408fe31c862f10ef91f9ab5a14b1">c1565a04a938408fe31c862f10ef91f9ab5a14b1</a>
+<blockquote>
+<p>
+ jbig2dec: reintroduce gcc attribute that got dropped by accident.<br>
+<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-24 17:04:27 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2e8041383100db54d1ea949d1b2648330f5188a">a2e8041383100db54d1ea949d1b2648330f5188a</a>
+<blockquote>
+<p>
+ Coverity 94484: added some asserts derived from bits_compress_scaled()'s preconditions.<br>
+<br>
+ These are enough to demonstrate to the reader that Coverity 94484's<br>
+ negative_shift warning is spurious - in_shift_initial cannot be negative.<br>
+<br>
+base/gsbitcom.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 17:12:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=409baa5cc81b8d184dceb52c06c9a80c5dcd61d6">409baa5cc81b8d184dceb52c06c9a80c5dcd61d6</a>
+<blockquote>
+<p>
+ Coverity 94484: added annotation to avoid negative_shift issue.<br>
+<br>
+base/gsbitcom.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-22 12:24:43 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=77b7cce9253863ac48ef6eb9821880250c7e1307">77b7cce9253863ac48ef6eb9821880250c7e1307</a>
+<blockquote>
+<p>
+ jbig2dec/jbig2_mmr.c: optimised jbig2_find_changing_element().<br>
+<br>
+ This was a hotspot after optimsation of jbig2_compose_image.<br>
+<br>
+ Rather than step through each bit in turn, we now look 8, 16 and 32-bit at a<br>
+ time.<br>
+<br>
+jbig2dec/jbig2_mmr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 10:39:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=079117d95a3f07587624d6fd9ca388b300d0759e">079117d95a3f07587624d6fd9ca388b300d0759e</a>
+<blockquote>
+<p>
+ jbig2dec: Insert missing &quot;inline&quot; in templating.<br>
+<br>
+ When using static inline templating to optimise a file, it's<br>
+ generally best to actually use static inline, and not just<br>
+ static.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-23 10:39:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8e918106400220ffe21aef6ef1d491a42991475">f8e918106400220ffe21aef6ef1d491a42991475</a>
+<blockquote>
+<p>
+ Squash some double -&gt; fixed warnings.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-21 18:16:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1b3c83af56412a06eeade1ea26a4db10de923a5">b1b3c83af56412a06eeade1ea26a4db10de923a5</a>
+<blockquote>
+<p>
+ Optimise jbig2_compose_image.<br>
+<br>
+ Work at byte level rather than bit level, and use static inline<br>
+ templating methods to generate optimised versions for each<br>
+ different operator.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-22 09:54:25 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bd73d0c1d0c42fd1671b56f1277b5e9f25391907">bd73d0c1d0c42fd1671b56f1277b5e9f25391907</a>
+<blockquote>
+<p>
+ Bug 702052: MaxSpots &gt; 58 caused exception with tiffsep device.<br>
+<br>
+ The MaxSpots devn parameter was allowed to be set according the the<br>
+ capability of the tiffsep device (up to 60), but an array to hold the<br>
+ equivalent CMYK parameter information was not that large. Get rid of<br>
+ the MAX_DEVICE_PROCESS_COLORS #define and use the device num_std_colorants<br>
+ and color_info.max_components to determine the maximum number of spot<br>
+ colorants possible for this and PageSpotColors and update the Devices.htm<br>
+ document to reflect the actual limit.<br>
+<br>
+ Also to reduce potential mischief, add range check error limits on the<br>
+ DeviceN params based on the device component support, not the absolute max.<br>
+<br>
+base/gdevdevn.c<br>
+base/gdevdevn.h<br>
+doc/Devices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-22 17:53:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d548e306ae773e228dba331e614dd4cca2c56c7">8d548e306ae773e228dba331e614dd4cca2c56c7</a>
+<blockquote>
+<p>
+ Bug 702057: Avoid division by zero in old scan converter.<br>
+<br>
+base/gxdtfill.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-21 11:19:33 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ba331d45f8e5be7723ff7bca9450f09c28910464">ba331d45f8e5be7723ff7bca9450f09c28910464</a>
+<blockquote>
+<p>
+ Bug 702053: Overprint precision issue<br>
+<br>
+ AR assumes for the purposes of overprint mode that a color<br>
+ value that is less that 0.5/255 is essentially zero. Also<br>
+ fix an issue in the Compatible overprint blend mode when<br>
+ overprint mode is enabled.<br>
+<br>
+base/gscspace.c<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-21 17:41:52 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d6569b95a29bf86dbdca0bc95e095acaad003525">d6569b95a29bf86dbdca0bc95e095acaad003525</a>
+<blockquote>
+<p>
+ Fix segfaults in transparent patterns with -Z@<br>
+<br>
+ One gc'ed member (buf) of the structure for patterns with transparency was not<br>
+ being initialised after allocation, meaning a debug build (which adds a<br>
+ validation step to the garbager) would attempt to follow an uninitialised<br>
+ pointer.<br>
+<br>
+ Adding the relevant initialisation meant almost identical code in two places,<br>
+ so use the pre-existing function insteading of duplicating the code.<br>
+<br>
+ Segfaults spotted in weekly debug-Z@ test.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-20 17:01:38 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a0df672b0b65110d81f1e143b2e3681d660df8d2">a0df672b0b65110d81f1e143b2e3681d660df8d2</a>
+<blockquote>
+<p>
+ Bug 702054: Fix threaded render segfault with shared ICC profiles<br>
+<br>
+ When creating the devices for individual rendering threads, if we cannot share<br>
+ the ICC profiles, we also cannot share the device icc_struct. In such a case,<br>
+ have each rendering thread device also create its own icc_struct.<br>
+<br>
+base/gxclthrd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-20 14:23:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=df228c8f42962d696861cfc79f7b114ac887d3c4">df228c8f42962d696861cfc79f7b114ac887d3c4</a>
+<blockquote>
+<p>
+ Coverity 341118: avoid stat()/opendir() race in gp_enumerate_files_next_impl().<br>
+<br>
+base/gp_unifs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-20 12:32:26 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=30f86d215ac5abba5cfe86f0307d642274b850e4">30f86d215ac5abba5cfe86f0307d642274b850e4</a>
+<blockquote>
+<p>
+ Coverity 350947: check return from gdev_prn_get_bits().<br>
+<br>
+ Also changed some fns from void to int so we can propogate any error.<br>
+<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-20 12:31:00 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bf2fcdc76fe0cec69e48f82e10144441b498a6b2">bf2fcdc76fe0cec69e48f82e10144441b498a6b2</a>
+<blockquote>
+<p>
+ Coverity 94484: assert that shift is &gt;= 0.<br>
+<br>
+ Have ran gs on 6,000 test files with some code that aborts if this shift is<br>
+ -ve, and nothing failed.<br>
+<br>
+base/gsbitcom.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-17 12:58:14 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=144077b38b07119a0a5293ff8f3fc9e44f2813e1">144077b38b07119a0a5293ff8f3fc9e44f2813e1</a>
+<blockquote>
+<p>
+ Bug 702049: Handle format strings in pipe OutputFiles<br>
+<br>
+ When we implemented the new file access controls, we didn't realise that piped<br>
+ output files could include formatted strings: &quot;|md5sum &gt; %03d.txt&quot;, for example.<br>
+<br>
+ This just tweaks the gs_add_control_path() logic so it will go through both<br>
+ the formatted string section *and* the pipe output section (rather than one or<br>
+ the other).<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-17 11:32:10 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb8c4e0dbc304e404a09e9e6f9551e1e504822bb">bb8c4e0dbc304e404a09e9e6f9551e1e504822bb</a>
+<blockquote>
+<p>
+ Improve handling of current directory permissions<br>
+<br>
+ Tweak the file access permissions code to allow file names with a current<br>
+ directory prefix to match &quot;bare&quot; file names - i.e. &quot;file.ps&quot; == &quot;./file.ps&quot;.<br>
+<br>
+ This improves compatibility with the &quot;-P&quot; command line option, as well as<br>
+ better matching user expectations.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 16:05:45 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05d44f258a727d86b9d7d9cbe04e43f3e741a636">05d44f258a727d86b9d7d9cbe04e43f3e741a636</a>
+<blockquote>
+<p>
+ Bug 702037: Handle empty path from PDF text clip modes<br>
+<br>
+ When using one of the clipping Tr modes (4 to 7), if there is no valid<br>
+ current point (i.e. no glyphs have been drawn, and no other previous operation<br>
+ has established a current point), Acrobat ignores the operation, whilst gs was<br>
+ treating that (as in Postscript) as an empty clip.<br>
+<br>
+ We now check for a valid current point before calling clip during the ET<br>
+ handling.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-16 09:33:47 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dfdf07b07d4fd83fc606d50eaa7132fc9ea7a1ce">dfdf07b07d4fd83fc606d50eaa7132fc9ea7a1ce</a>
+<blockquote>
+<p>
+ Coverity 353342: supposed Null pointer dereferences in gxclpath.c<br>
+<br>
+ Strange that it griped about passing pdevc_stroke to cmd_put_drawing_color,<br>
+ but not earlier where it was passed to gx_default_fill_stroke_path.<br>
+ Fix (hopefully) by checking for NULL color pointers before ANY use.<br>
+<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 12:23:21 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=27a3bf0bc16f492538434a9b1bfdbd588e29cedc">27a3bf0bc16f492538434a9b1bfdbd588e29cedc</a>
+<blockquote>
+<p>
+ Fix coverity CID 353343.<br>
+<br>
+ Remove ppcs. When the code was changed to write the pgs-&gt;color[0],<br>
+ the ppcs param was never removed.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 12:08:22 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39eff9a56b2077d1a9adb48dfefd38e5e94b59c6">39eff9a56b2077d1a9adb48dfefd38e5e94b59c6</a>
+<blockquote>
+<p>
+ Make -dUseFastColor occur even when source color space is ICC based<br>
+<br>
+ The exception will be the CIELAB color space, the PS CIE color spaces,<br>
+ named color, and DeviceN ICC profiles.<br>
+<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_manage.h<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 11:33:45 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1b7690cdd644fd690c2480a88da62be6131e79ab">1b7690cdd644fd690c2480a88da62be6131e79ab</a>
+<blockquote>
+<p>
+ Coverity 353370 dead code removal<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 13:42:33 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4872417c26e9133e1f39fc5f9a361053aaee87a7">4872417c26e9133e1f39fc5f9a361053aaee87a7</a>
+<blockquote>
+<p>
+ Coverity 350199: mark cf_encode_2d() as not tainting &lt;lbuf&gt; buffer.<br>
+<br>
+ After annotating cf_encode_1d(), this coverity issue appears to have changed<br>
+ to worrying about cf_encode_2d(). Would have expected a new issue to have been<br>
+ generated.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-15 11:09:53 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c58f4c538404527cac25b549453f5b805652b445">c58f4c538404527cac25b549453f5b805652b445</a>
+<blockquote>
+<p>
+ Fix dependency for custom freetype config header<br>
+<br>
+ I'd missed the dependency to make sure the required directories were created<br>
+ before attempting to copy the custom header into one of those directories.<br>
+<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-14 11:05:22 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22618fc2fde49c8fc24ed7e88e98f9677e689c85">22618fc2fde49c8fc24ed7e88e98f9677e689c85</a>
+<blockquote>
+<p>
+ Coverity 350199: Final attempt to convince coverity that cf_encode_1d() doesn't taint lbuf.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-13 13:42:21 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d824fb03a6653856dfe6e304bab8fe67a2c8f1f9">d824fb03a6653856dfe6e304bab8fe67a2c8f1f9</a>
+<blockquote>
+<p>
+ Bug 689279: Disable bitmap glyphs in freetype<br>
+<br>
+ The font in the XPS file has both outline and bitmap glyphs, and with such fonts<br>
+ freetype ends up marking them as &quot;bitmap&quot; and &quot;non-scalable&quot; fonts, so when we<br>
+ attempt to set a size for glyph scaling not equivalent to the included bitmaps,<br>
+ freetype throws an error.<br>
+<br>
+ The file works with (a default build) of mupdf because mupdf disables freetype's<br>
+ bitmap font support at build time. It is not possible to force freetype to<br>
+ ignore bitmap glyphs at run time.<br>
+<br>
+ This commit adopts a similar approach to mupdf, and disables bitmap glyph<br>
+ support using a custom options header file.<br>
+<br>
+base/freetype.mak<br>
+base/gsftopts.h<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-13 09:54:41 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=67559bed1c0dceb2a1a59be0349e3465a1361743">67559bed1c0dceb2a1a59be0349e3465a1361743</a>
+<blockquote>
+<p>
+ Fix error handling issue found by Coverity<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-13 18:18:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=defe1d994b52100f535cb9e6a7e6a4f4255d2b2b">defe1d994b52100f535cb9e6a7e6a4f4255d2b2b</a>
+<blockquote>
+<p>
+ Coverity 350199: another attempt to quieten coverity.<br>
+<br>
+ Will clean up annotations once we've found one that works.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-13 16:48:32 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3704918f3a987e95e7d06fc025de2dce04bab5e8">3704918f3a987e95e7d06fc025de2dce04bab5e8</a>
+<blockquote>
+<p>
+ Coverity 350199: further attempt to quieten coverity using -tainted_data_sink tag.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-12 15:43:51 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ad96e96f1f929e444fdb0e220d2b05c1dde1bf1">4ad96e96f1f929e444fdb0e220d2b05c1dde1bf1</a>
+<blockquote>
+<p>
+ Fix defects reported from fill-stroke3 merge<br>
+<br>
+base/gdevp14.c<br>
+base/gscspace.c<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-11 12:14:48 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05c41c0dedaa512419f15798cbc3da92b6a90bbc">05c41c0dedaa512419f15798cbc3da92b6a90bbc</a>
+<blockquote>
+<p>
+ Squashed commit fill-stroke3 branch<br>
+<br>
+ This branch had several contributors including Robin Watts,<br>
+ Ken Sharp and Ray Johnston.<br>
+<br>
+ The intent was to add a &quot;fill and stroke&quot; path device method<br>
+ to ensure we get proper rendering when doing fill/stroke<br>
+ methods with overprint and transparency. In addition,<br>
+ adding the method made it possible for pdfwrite to match<br>
+ the original pdf source file if it also had fill/stroke methods.<br>
+<br>
+ The interaction with overprint and transparency led to significant<br>
+ changes in parts of the code related to those sections. In particular,<br>
+ overprint was reworked to ensure that the overprint compositor and<br>
+ the transparency compositor were aware if it was to be using<br>
+ the overprint drawn_comps for stroke or for fill. The code was<br>
+ rewritten so that the overprint compositor actions only occurred when<br>
+ an actual operation occurred (e.g. fill, stroke, image, text) as opposed<br>
+ to every time that the overprint graphic state values changed.<br>
+<br>
+ When there is a fill-stroke operation with transparency, depending upon the<br>
+ graphic state values, a non-isolated knockout group may be pushed. From this,<br>
+ an issue with knockout groups within knockout groups was revealed, which was<br>
+ related to the backdrop selection. The backdrop selection code was simplified.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+base/gdbflags.h<br>
+base/gdevdflt.c<br>
+base/gdevepo.c<br>
+base/gdevflp.c<br>
+base/gdevmem.h<br>
+base/gdevmplt.c<br>
+base/gdevnfwd.c<br>
+base/gdevoflt.c<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gdevsclass.c<br>
+base/gdevsclass.h<br>
+base/gscdevn.c<br>
+base/gscolor.c<br>
+base/gscolor2.c<br>
+base/gscolor3.c<br>
+base/gscpixel.c<br>
+base/gscsepr.c<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gsdcolor.h<br>
+base/gsdevice.c<br>
+base/gsdparam.c<br>
+base/gsdps1.c<br>
+base/gsicc.c<br>
+base/gsicc_manage.c<br>
+base/gsimage.c<br>
+base/gsovrc.c<br>
+base/gsovrc.h<br>
+base/gspaint.c<br>
+base/gspaint.h<br>
+base/gspath.c<br>
+base/gspcolor.c<br>
+base/gsptype1.c<br>
+base/gsptype2.c<br>
+base/gsstate.c<br>
+base/gstext.c<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+base/gxccache.c<br>
+base/gxclimag.c<br>
+base/gxclip.c<br>
+base/gxclip.h<br>
+base/gxclipm.c<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxclpath.c<br>
+base/gxclpath.h<br>
+base/gxclrast.c<br>
+base/gxclrect.c<br>
+base/gxcmap.c<br>
+base/gxdevcli.h<br>
+base/gxdevice.h<br>
+base/gxdevsop.h<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+base/gxpaint.c<br>
+base/gxpaint.h<br>
+base/gxpath.h<br>
+base/gxpath2.c<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+base/gxstroke.c<br>
+base/lib.mak<br>
+devices/gdevpsd.c<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfg.h<br>
+devices/vector/gdevpdfx.h<br>
+lcms2mt/ChangeLog<br>
+lcms2mt/Projects/VC2010/lcms2mt.rc<br>
+lcms2mt/config.guess<br>
+psi/int.mak<br>
+psi/zcolor.c<br>
+psi/zpaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-10 16:50:08 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5faf010d8e043d77ff10f3deee466e9fb2dc7b7e">5faf010d8e043d77ff10f3deee466e9fb2dc7b7e</a>
+<blockquote>
+<p>
+ Bug 702032: Fix overflow problem in scan converter.<br>
+<br>
+ Very wide regions to be filled (&gt; 0x80000000) can cause problems<br>
+ with overflow in clipping calculations, causing regions to be<br>
+ filled 'the wrong way' (i.e. from -ve to x rather than from x to<br>
+ +ve).<br>
+<br>
+ Fix this by tweaking calculations to promote to 64bit 1 step<br>
+ earlier than before.<br>
+<br>
+base/gxscanc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-10 11:56:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=419f528cf8625a7e2989068324e962c498c255ef">419f528cf8625a7e2989068324e962c498c255ef</a>
+<blockquote>
+<p>
+ Coverity 94984: disabled code that had no affect other than to cause a coverity issue.<br>
+<br>
+contrib/gdevgdi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 17:14:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3c394504318a9a6774d65c386842d3f568126ce">e3c394504318a9a6774d65c386842d3f568126ce</a>
+<blockquote>
+<p>
+ Coverity 94488: improved detection of uninitialised Jbig2HuffmanEntry.<br>
+<br>
+ When checking for an incorrect uninitialised entry, test for /either/ of<br>
+ &lt;flags&gt; and &lt;PREFLEN&gt; being -1.<br>
+<br>
+ Previously we tested for /all/ of &lt;flags&gt;, &lt;PREFLEN&gt; and &lt;entry-&gt;u.RANGELOW&gt;<br>
+ being -1, which made coverity think that the following code could be run with<br>
+ PREFLEN=-1, which then triggers issue about illegal shifts.<br>
+<br>
+ [It seems that &lt;entry-&gt;u.RANGELOW&gt; can be -1 in normal operation, so have<br>
+ excluded from the new test.]<br>
+<br>
+jbig2dec/jbig2_huffman.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 15:09:58 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9c19743cf5bc787ebbcbbff58c5cce0c923d0cc">a9c19743cf5bc787ebbcbbff58c5cce0c923d0cc</a>
+<blockquote>
+<p>
+ Coverity 94740: added /* Fall through. */ comment.<br>
+<br>
+contrib/lips4/gdevl4r.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 15:07:21 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ee0bc7749eb7c2726bb593637de7653e2b62f10">7ee0bc7749eb7c2726bb593637de7653e2b62f10</a>
+<blockquote>
+<p>
+ Coverity 94747: removed 'if' with duplicate code.<br>
+<br>
+contrib/lips4/gdevl4v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 14:40:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ccd8370b09531128634b3f5bab76b1de426ab116">ccd8370b09531128634b3f5bab76b1de426ab116</a>
+<blockquote>
+<p>
+ Coverity 94809: added /* Fall through. */ comment.<br>
+<br>
+contrib/eplaser/gdevescv.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 14:26:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f563ab707b6068a653fb917974fb1e6a88c068d8">f563ab707b6068a653fb917974fb1e6a88c068d8</a>
+<blockquote>
+<p>
+ Coverity 121439: use gx_color_index instead of uint, to avoid overflow when shifting.<br>
+<br>
+contrib/pcl3/eprn/eprnrend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 14:21:01 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3acc9babb87048dda29ab766ca41750fc6f58eaf">3acc9babb87048dda29ab766ca41750fc6f58eaf</a>
+<blockquote>
+<p>
+ Coverity 94905: disabled code that had no affect other than to cause a coverity issue.<br>
+<br>
+contrib/gdevgdi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 11:32:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bd6f5232dbaaa372b9fdcdb98134af8096c807be">bd6f5232dbaaa372b9fdcdb98134af8096c807be</a>
+<blockquote>
+<p>
+ Coverity 95087: use cast to indicate intermediate integer division is expected.<br>
+<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-09 12:17:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=78773b740b3c0095fb4c5df59390f0eea84a6a49">78773b740b3c0095fb4c5df59390f0eea84a6a49</a>
+<blockquote>
+<p>
+ Docs: Fix a link to a long gone file.<br>
+<br>
+ Reword the &quot;What if I'm writing documentation?&quot; so it makes some sense.<br>
+<br>
+doc/Readme.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-17 15:50:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1075fd1caba19e642c9713c3a07961c0a3f0f88d">1075fd1caba19e642c9713c3a07961c0a3f0f88d</a>
+<blockquote>
+<p>
+ Improve the English in section on Unicode TTFs<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:13:35 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=af1fe01f44f528fb1322cfcf1b48aa5e1aa76059">af1fe01f44f528fb1322cfcf1b48aa5e1aa76059</a>
+<blockquote>
+<p>
+ Coverity 95007: propogate error from eprn_check_colour_info().<br>
+<br>
+contrib/pcl3/eprn/gdeveprn.c<br>
+contrib/pcl3/eprn/gdeveprn.h<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 14:25:52 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0a0c0ca0e16e8b598a7839011df4c3374ab561d">e0a0c0ca0e16e8b598a7839011df4c3374ab561d</a>
+<blockquote>
+<p>
+ clusterpush.pl: also exclude luratech* directories.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 13:08:07 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aba372d8efa1ffdb11a496474f519b0015b31031">aba372d8efa1ffdb11a496474f519b0015b31031</a>
+<blockquote>
+<p>
+ Coverity 94665: removed unnecessary if and refactored expression.<br>
+<br>
+contrib/gdevdj9.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 13:04:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5e1685812864cfde94a5c0daee0cae3307078aa7">5e1685812864cfde94a5c0daee0cae3307078aa7</a>
+<blockquote>
+<p>
+ Coverity 94713: added {...} to match indentation.<br>
+<br>
+contrib/lips4/gdevl4v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 13:02:35 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3b727b709f40d6b93e874680ab307aa124de5422">3b727b709f40d6b93e874680ab307aa124de5422</a>
+<blockquote>
+<p>
+ Coverity 94729: oki4w_print_page()'s compress_code is always 2.<br>
+<br>
+ Simplified code accordingly, and removed static fn oki_compress() as no longer<br>
+ referenced.<br>
+<br>
+contrib/gdevop4w.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:41:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4e4edd2161b4b7f3ccb23a90a8ca90dccffd078c">4e4edd2161b4b7f3ccb23a90a8ca90dccffd078c</a>
+<blockquote>
+<p>
+ Coverity 94757: avoid 'if (foo) return code; return code;' construct.<br>
+<br>
+ This code is slightly odd, and didn't want to make major changes, so have ended<br>
+ up with odd-looking extended expression whose actual value we ignore.<br>
+<br>
+contrib/gdevbjc_.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:31:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cef68e9a0ca0be10f08e415785f8b8fac37d7828">cef68e9a0ca0be10f08e415785f8b8fac37d7828</a>
+<blockquote>
+<p>
+ Coverity 94778: added missing {...}.<br>
+<br>
+contrib/lips4/gdevl4v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:28:15 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c517f26773cd3a63f029b1bf6e275b227e3af5e8">c517f26773cd3a63f029b1bf6e275b227e3af5e8</a>
+<blockquote>
+<p>
+ Coverity 94811: added break in switch block.<br>
+<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:25:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c84b20c653444310c979a5df78542e9671a6692">0c84b20c653444310c979a5df78542e9671a6692</a>
+<blockquote>
+<p>
+ Coverity 94846: don't dereference &lt;data&gt; without checking it isn't NULL.<br>
+<br>
+contrib/pcl3/src/pclgen.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 12:18:02 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=87c48dabcdb64262fc0d24ed81b38d28e7545cb2">87c48dabcdb64262fc0d24ed81b38d28e7545cb2</a>
+<blockquote>
+<p>
+ Coverity 95006: improved use preprocessor to hopefully fix this warning.<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 11:58:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c1e5ac5d9def3cbe25c52c63a3d5ba11f2603ac">4c1e5ac5d9def3cbe25c52c63a3d5ba11f2603ac</a>
+<blockquote>
+<p>
+ Coverity 121439: avoid overflow when shifting.<br>
+<br>
+contrib/pcl3/eprn/eprnrend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 11:58:14 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f71ebb708947e57eaf7cd33b319ec0676e03ba2e">f71ebb708947e57eaf7cd33b319ec0676e03ba2e</a>
+<blockquote>
+<p>
+ Coverity 121442: avoid overflow when shifting.<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-08 11:41:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4bb071925d68398f8efb493c6b529e897a9bc356">4bb071925d68398f8efb493c6b529e897a9bc356</a>
+<blockquote>
+<p>
+ Coverity 350199: fix coverity annotation arg number.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-07 19:43:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d24553cea74bda19ae7e3dd5a60302fdc49d1fb2">d24553cea74bda19ae7e3dd5a60302fdc49d1fb2</a>
+<blockquote>
+<p>
+ Fix indentation problems in examples in API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-06 16:30:17 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=147591b7a8390d0e98418851b60ac67e659cf2f1">147591b7a8390d0e98418851b60ac67e659cf2f1</a>
+<blockquote>
+<p>
+ PDF interpreter - don't abort on errors in JBIG2 globals<br>
+<br>
+ This was due to Julian's work on comparing jbig2dec with Luratech.<br>
+<br>
+ The test file 'normal_716.pdf' and the cluster test file<br>
+ jbig2_null_segments_and_glyphs.pdf throw errors when trying to read<br>
+ the JBIG2 globals dictionary. Luratech doesn't cache the globals, while<br>
+ jbig2dec does, and the problem was that jbig2dec was returning an error<br>
+ at a point where the PDF interpreter wasn't able to ignore it, while<br>
+ Luratech deferred the error to a later point, at a time when the<br>
+ interpreter could, and did, ignore it.<br>
+<br>
+ This meant that Luratech continued to render any further content on the<br>
+ page while jbig2dec did not, resulting in diffs.<br>
+<br>
+ This commit simply runs the global context extraction in a stopped<br>
+ context. If it fails we clean up the stack and exit, which (effectively)<br>
+ defers the error to the same point as the Luratech decoder.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-06 12:56:52 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a2414c7f88ef07cb9297bdeb3236cdba44c25ad">9a2414c7f88ef07cb9297bdeb3236cdba44c25ad</a>
+<blockquote>
+<p>
+ Bug 702018: Fix CAL build crash in tiffsep1.<br>
+<br>
+ The SSE code for CAL currently only copes with a maximum of 4<br>
+ planes. Ensure the device falls back to non-CAL code in such<br>
+ cases.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-06 11:40:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1085ead1dd22e3908c341df160a722e71a9c7cfe">1085ead1dd22e3908c341df160a722e71a9c7cfe</a>
+<blockquote>
+<p>
+ Fix VS2019 project getting many x64 builds wrong.<br>
+<br>
+windows/GhostPDL.sln<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-06 08:22:00 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c53f9d984015b65bf234d65befa552fe9d18c886">c53f9d984015b65bf234d65befa552fe9d18c886</a>
+<blockquote>
+<p>
+ Bug 702019: fix dependencies for cups devs and gdevp14<br>
+<br>
+ Any &quot;printer&quot; device depends on the low level 'page' device (page.dev),<br>
+ unaccountably, the cups devices (cups and pwgraster) did not have that<br>
+ dependency in the makefiles.<br>
+<br>
+ Also, the PDF transparency compositor now (and for some time) has also depended<br>
+ upon page.dev, so update the makefiles for that, too.<br>
+<br>
+base/lib.mak<br>
+devices/devs.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-04 20:04:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1aa5fdfdbea4c55445ee1bdbe08b822a1bd7a8c">d1aa5fdfdbea4c55445ee1bdbe08b822a1bd7a8c</a>
+<blockquote>
+<p>
+ Further refinement for Bug 701880. Make tiffsep better match pbmraw<br>
+<br>
+ The previous change attempted to fix the y-phase, but this was not a<br>
+ 180 degree rotation, so it caused the primary angle of the pattern to<br>
+ shift by 90 degrees. A better correspondence is achieved by inverting<br>
+ the polarity of the thresholds. This is slightly &quot;darker&quot; than pbmraw<br>
+ but the angle and phase matches pbmraw closely.<br>
+<br>
+ Note that the phase using the CAL module does not match the non-CAL<br>
+ or pbmraw, but the angle of the pattern does match.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-03 09:56:29 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=372c862f2050d82248316f54156e5bb33dd7520a">372c862f2050d82248316f54156e5bb33dd7520a</a>
+<blockquote>
+<p>
+ Fix Bug 701845. The devicen device would confuse transparency.<br>
+<br>
+ The devicen device defines 32-bit depth, but 0 components and no<br>
+ standard process colors or names. This confused the pdf14 device into<br>
+ writing a clist with 1-component (gray), but then because the icc_profile<br>
+ had 4 components, would try and use 4 component when reading.<br>
+<br>
+ Fix by making it 32-bit CMYK, and also fix to write a valid PCX by<br>
+ converting the 32-bit CMYK to 24-bit RGB on output. PCX cannot handle<br>
+ 32-bit CMYK. Prior to this, 32-bit CMYK would fail showpage with a<br>
+ rangecheck error.<br>
+<br>
+base/gdevdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-03 15:51:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9608d275bd750b189dd52681791f31617a640817">9608d275bd750b189dd52681791f31617a640817</a>
+<blockquote>
+<p>
+ Use CAL halftoning in tiffsep1 post processing.<br>
+<br>
+ A quick back to back test with/without cal using:<br>
+<br>
+ bin/gswin32c.exe -sDEVICE=tiffsep1 -o out.tif -r600 -dMaxBitmap=80000000<br>
+ examples/tiger.eps<br>
+<br>
+ shows timings of 1.142s vs 1.297s on my machine.<br>
+<br>
+devices/devs.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-03 15:52:41 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59ed026565b5be1bd055d0fbd1b066b8c07274e0">59ed026565b5be1bd055d0fbd1b066b8c07274e0</a>
+<blockquote>
+<p>
+ Squash warnings (dropped from earlier commit).<br>
+<br>
+ These warnings were supposed to have been squashed a few<br>
+ commits ago, but somehow got lost in a rebase. Thus they<br>
+ were mentioned in the commit message, but didn't make it<br>
+ in.<br>
+<br>
+ Avoid problems with 'errno' being a special thing that<br>
+ shouldn't be used as a parameter name.<br>
+<br>
+ Explicitly cast time_t to long for printing.<br>
+<br>
+base/gsioram.c<br>
+base/mkromfs.c<br>
+base/pack_ps.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-03 10:21:18 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7d012bfe6c8f248db8b8474743618c53318ce40">d7d012bfe6c8f248db8b8474743618c53318ce40</a>
+<blockquote>
+<p>
+ PDF interpreter - increase robustness in face of invalid annotations<br>
+<br>
+ Bug #702016 &quot;Invalid annotation causing an error&quot;<br>
+<br>
+ The PDF file has an annotation where the creating application has<br>
+ inserted the appearance stream directly into the annotation dictionary.<br>
+ This breaks the code which attempts to parse the annotation dictionary<br>
+ from an indirect reference into a dictionary object.<br>
+<br>
+ This commit tries to recover from such egregiously broken situations by<br>
+ running the 'oforce' in a stopped context. This is complicated firstly<br>
+ by the fact that we parse the annotation dictionary in two places, once<br>
+ to check it for the presence of transparency and once to actually draw<br>
+ it (if we are rendering annotations).<br>
+<br>
+ In addition, the code could potentially leave anything on the stack, so<br>
+ we can't use a mark/cleartomark pair to tidy up. Instead, use a<br>
+ (hopefully) unique name object, create it on the stack and in the case<br>
+ of an error, unwind the stack back to the expected name.<br>
+<br>
+ Finally, report the error to the user in a more or less meaningnful way.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-13 12:40:44 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=92031bd1fb9084088a657b7d83339bf499dcc7d2">92031bd1fb9084088a657b7d83339bf499dcc7d2</a>
+<blockquote>
+<p>
+ Update Visual Studio solution to VS2019.<br>
+<br>
+ Our belief is that this should work in all versions of VS from<br>
+ 2010 onwards.<br>
+<br>
+ By moving to VS2019, we lose support totally for Windows XP prior<br>
+ to SP3. If this is a problem, either build using the Makefile, or<br>
+ pull the old VS2005 solution out of git and use that. If customers<br>
+ find this to be a problem, we can maintain the old VS2005 solution<br>
+ alongside the new one with minimal effort.<br>
+<br>
+ Default builds lose support for Windows XP SP3/Windows Server 2003,<br>
+ but the new &quot;ReleaseXP&quot;, &quot;DebugXP&quot; and &quot;MementoXP&quot; configurations<br>
+ will target these platforms (assuming the v141 tools have been<br>
+ installed too).<br>
+<br>
+ These &quot;XP&quot; binaries will be build into {,debug,mem}objxp directories<br>
+ and will produce binaries with an 'XP' suffix: i.e.<br>
+ {,debug,mem}bin/{gs,gpcl6,gxps,gpdl}win{32,32}{,c}xp.exe.<br>
+<br>
+psi/msvc.mak<br>
+windows/All.vcxproj<br>
+windows/GhostPDL.sln<br>
+windows/ghostpcl.vcxproj<br>
+windows/ghostpcl.vcxproj.filters<br>
+windows/ghostpdl.vcxproj<br>
+windows/ghostpdl.vcxproj.filters<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+windows/ghostxps.vcxproj<br>
+windows/ghostxps.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-16 18:18:47 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=10d2678613d5a93bedc094a62b1b98972871f464">10d2678613d5a93bedc094a62b1b98972871f464</a>
+<blockquote>
+<p>
+ Tweak windows Makefiles to know about VS2017 and VS2019.<br>
+<br>
+ These builds have only been tested with &quot;DEVSTUDIO=&quot; (i.e.<br>
+ relying on the paths to the compilers etc having been set up<br>
+ in advance, such as happens when building from within the IDE<br>
+ using the supplied solution). Logic has been added for<br>
+ command like nmake builds, but this hasn't been tested.<br>
+<br>
+ Update the makefiles to avoid using flags that aren't supported<br>
+ in later versions.<br>
+<br>
+base/msvccmd.mak<br>
+base/msvclib.mak<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-01-02 11:01:03 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00cd7c475b173e5cdce7e1e4ff3f0880e1e70583">00cd7c475b173e5cdce7e1e4ff3f0880e1e70583</a>
+<blockquote>
+<p>
+ Squash warnings<br>
+<br>
+ Don't define STRICT multiple times.<br>
+<br>
+ Explicitly cast time_t's in printfs.<br>
+<br>
+ Avoid warnings due to errno being a #defined thing.<br>
+<br>
+base/windows_.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-26 13:14:43 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bf689ee0bff720f202ebc98f301c765f34e2c1fa">bf689ee0bff720f202ebc98f301c765f34e2c1fa</a>
+<blockquote>
+<p>
+ Bug 701880: tiffsep1 threshold_from_order caused dots in full white.<br>
+<br>
+ For patterns with &gt; 256 dots, threshold_from_order would put in 0 value<br>
+ cells which would then always be imaged. Change this device to (finally)<br>
+ use the gx_ht_construct_threshold used by the fast_ht thresholding code<br>
+ so that it should match the other devices, such as pbmraw.<br>
+<br>
+ Also vertically invert the use of the threshold array to match the dots<br>
+ of the other devices.<br>
+<br>
+ Add missing dependencies for gdevtsep.c in devs.mak<br>
+<br>
+devices/devs.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-19 09:22:32 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97ac0f6ef4010e0a49bf6f8f4515c32a5695df68">97ac0f6ef4010e0a49bf6f8f4515c32a5695df68</a>
+<blockquote>
+<p>
+ PDF interpreter -- take out manually drawn rectfill<br>
+<br>
+ We can now just draw the rectangle directly with rectfill.<br>
+ Whatever issue ken ran into 5 years ago no longer applies.<br>
+<br>
+ See also Bug 693731<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-18 14:46:26 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=719bf1f2c4104d933767d37e62489535e8ba9a17">719bf1f2c4104d933767d37e62489535e8ba9a17</a>
+<blockquote>
+<p>
+ pdfwrite - use correct FontFile key<br>
+<br>
+ This was found as part of bug #701997, even if we set -dCompatibilityLevel<br>
+ to 1.1, so that type 1 fonts are not converted to type 2 (1c, CFF) we<br>
+ would still write out a FontFile3 key, instead of the correct<br>
+ FontFile key.<br>
+<br>
+ Ghostscript doesn't care about this, but Acrobat refuses to parse the<br>
+ font from the file when it has the wrong FontFile key.<br>
+<br>
+ The test we were using was incorrect anyway, we were checking<br>
+ ResourcesBeforeUsgae and we should have been checking HaveCFF because<br>
+ if HaveCFF is true we would convert type 1 to CFF, and if it isn't we<br>
+ wouldn't.<br>
+<br>
+devices/vector/gdevpdtb.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-16 09:52:13 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb47dd4128481c2e62bbd6b5e354da8299f2f16b">bb47dd4128481c2e62bbd6b5e354da8299f2f16b</a>
+<blockquote>
+<p>
+ PDF interpreter - use PDFDocEncoding for fonts in text annotations<br>
+<br>
+ Bug #701889 &quot;&quot;<br>
+<br>
+ We were often not applying PDFDocEncoding to fonts when we used them to<br>
+ draw text for annotations. This commit re-encodes the selected font<br>
+ which will give a better result.<br>
+<br>
+ We probably should also check for UTF16-BE text and use the FallBack<br>
+ CIDFont in that case, but we'll wait for an example before trying to<br>
+ code that.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-14 19:13:27 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c3b184c41144a2650e5520643bbb1cff42c18acc">c3b184c41144a2650e5520643bbb1cff42c18acc</a>
+<blockquote>
+<p>
+ PDF interpreter - fix line ending positions on Line annotations<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ The calculation of the position of the line ending was incorrect, and<br>
+ we were applying the wrong LE entry to each end of the line.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-14 15:24:57 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1246085e17ee35928f737f1fbf69d69fe6b7a2ae">1246085e17ee35928f737f1fbf69d69fe6b7a2ae</a>
+<blockquote>
+<p>
+ PDF interpreter - Add arrows to /CL lines in FreeText annotations<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ Add arrowheads to the ends of callout lines.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-13 15:13:58 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=acccfd2fe90e25534e7d492ca2378dc32269e48e">acccfd2fe90e25534e7d492ca2378dc32269e48e</a>
+<blockquote>
+<p>
+ PDF interpreter - Fix multi-line FreeText annotation with /Rotate 270<br>
+<br>
+ The calculation of the 'width' of the container for the text was<br>
+ incorrect, as was the starting x co-ordinate. Fixed here.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-13 11:55:15 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5e5f7b41c080bdbd15fac5afbd09052a83e81a01">5e5f7b41c080bdbd15fac5afbd09052a83e81a01</a>
+<blockquote>
+<p>
+ PDF interpreter - apply /C to more annotation types<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ Seems we also need to apply the /C colour to Polygon, Square and Circle<br>
+ annotations before drawing them.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-13 11:23:28 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4940c5cb80916017d3ee0c9b53475323cf5ebbd6">4940c5cb80916017d3ee0c9b53475323cf5ebbd6</a>
+<blockquote>
+<p>
+ PDF interpreter - more annotation improvements<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ Apply the /RD array (if present) to the annotation /Rect before using<br>
+ the Rect to draw the border.<br>
+<br>
+ We were using the /C array in drawborder to set the colour before<br>
+ stroking the border, there are two problems with this; firstly the /C<br>
+ array is not used to specify a border colour, secondly we need to set<br>
+ the colour for certain objects irrespective of whether they have a<br>
+ border.<br>
+<br>
+ Remove annotsetcolor from drawborder and apply it to Squiggly, Strikeout,<br>
+ Underline, Highlight, Line and Ink annotations in order to set the<br>
+ colour before drawing the annotation. The specification says that this<br>
+ is used for; the border of a Link annotation, the title bar of a<br>
+ pop-up annotation's pop-up and the background of the annotation's icon<br>
+ when closed, but in fact Acrobat also uses it to set the colour for all<br>
+ the annotation types listed above.<br>
+<br>
+ There may still be more work needing done here, but this matches all the<br>
+ test cases I currently have.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 17:04:17 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d95dd7a23f25e73042f3c8e6043c83285387d0a1">d95dd7a23f25e73042f3c8e6043c83285387d0a1</a>
+<blockquote>
+<p>
+ PDF interpreter - apply RD array to Circle, Square and FreeText, apply Rotate to FreeText<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ The /RD array makes certain kinds of annotations be drawn in a smaller<br>
+ area. Although the spec does not mention it, Acrobat applies the<br>
+ /Rotate key if found to the text in a FreeText annotation.<br>
+<br>
+ Still more to do on the text; we are nto fitting the text correctly<br>
+ when Rotate is 270, not certain why. Also we are not drawing Borders<br>
+ when we should, some text is missing and text is in the wrong colour<br>
+ (due to not applying /DS)<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 19:47:18 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f25987c838ea9437b60f8b3b93f90e187013b641">f25987c838ea9437b60f8b3b93f90e187013b641</a>
+<blockquote>
+<p>
+ Tweak CAL makefile to include new intrinsics headers in dependencies.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 15:44:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=321cf6026a05e31140a87cc83a2653b048550df4">321cf6026a05e31140a87cc83a2653b048550df4</a>
+<blockquote>
+<p>
+ Fix arch.h dependency in cal build.<br>
+<br>
+ This was causing parallel makes of CAL enabled builds to<br>
+ fail.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 17:48:29 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6f6adb5448fda1f33db4c92c030709618e4ee54">b6f6adb5448fda1f33db4c92c030709618e4ee54</a>
+<blockquote>
+<p>
+ Support for YCbCr, LogL, LOGLUV and paletted TIFFs.<br>
+<br>
+ YCbCr TIFFs have to use TIFFRGBAImage as for the old JPEG<br>
+ encapsulation.<br>
+<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 22:32:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae1cee743e56a7b654d9dbb2ea88ed90d48d298d">ae1cee743e56a7b654d9dbb2ea88ed90d48d298d</a>
+<blockquote>
+<p>
+ Further fixes for GPDL TIFF.<br>
+<br>
+ Support JPEG encoded TIFFs (both old and new formats).<br>
+<br>
+ Old JPEG format requires the whole image to be decoded to an<br>
+ RGBAImage in memory at once; looks like that's just a limitation<br>
+ of libtiff. This is particularly annoying because it looks like<br>
+ the internals of libtiff are prepared to do scanline extraction<br>
+ as you'd hope, but aren't exposed to the outside world.<br>
+<br>
+base/msvclib.mak<br>
+base/tiff.mak<br>
+configure.ac<br>
+gpdl/gpdl.mak<br>
+gpdl/tifftop.c<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 17:26:02 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef66198ade77d5d551b3045cd36bed81c0b04f54">ef66198ade77d5d551b3045cd36bed81c0b04f54</a>
+<blockquote>
+<p>
+ Changes to libtiff for gpdl.<br>
+<br>
+ 1) Ensure that libtiff doesn't mess with 'boolean' in GS builds<br>
+ on Windows. Without this, the jpeg structures used by our JPEG<br>
+ lib build are different in size when called from gs and libtiff,<br>
+ resulting in runtime errors.<br>
+<br>
+ 2) Update libtiff so that it can correctly call into the jpeg<br>
+ library so that memory operations happen from our pools, not<br>
+ malloc/free. Slightly horrid in that this is more complex with<br>
+ OJPEG than JPEG files.<br>
+<br>
+tiff/libtiff/tif_jpeg.c<br>
+tiff/libtiff/tif_ojpeg.c<br>
+tiff/libtiff/tif_open.c<br>
+tiff/libtiff/tiffio.h<br>
+tiff/libtiff/tiffiop.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 10:52:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c248ced8997dfe8f253a07fc6cc5f47837ca12e">0c248ced8997dfe8f253a07fc6cc5f47837ca12e</a>
+<blockquote>
+<p>
+ Fixes for GPDL TIFF support.<br>
+<br>
+ Support tiled TIFFs, planar TIFFs, and TIFFs where the resolution<br>
+ isn't properly specified.<br>
+<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 14:33:27 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76bd0d75823a571130f340ab6231e064d1f997f7">76bd0d75823a571130f340ab6231e064d1f997f7</a>
+<blockquote>
+<p>
+ Move pdf_info.ps into lib (from toolbin)<br>
+<br>
+ And add it to the list of files to install on Unix systems.<br>
+<br>
+ Also, tweak the comments in pdf_info.ps to reflect its new home.<br>
+<br>
+base/unixinst.mak<br>
+lib/pdf_info.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 14:26:30 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e39d57f23585b6fe71db5433dc205459be7a3c22">e39d57f23585b6fe71db5433dc205459be7a3c22</a>
+<blockquote>
+<p>
+ Tweak to handle .shellarguments throwing an error<br>
+<br>
+ .shellarguments for quite some time has thrown an undefined error if Ghostscript<br>
+ is not invoked with the '--' option, so handle that.<br>
+<br>
+toolbin/pdf_info.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 14:16:41 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=72f6dd34cd0732cb7cdd9246d5063fc0f70ce79b">72f6dd34cd0732cb7cdd9246d5063fc0f70ce79b</a>
+<blockquote>
+<p>
+ Add hex string representation of font names<br>
+<br>
+ Mainly CIDFonts come up with multibyte characters in their names, hence making<br>
+ the normal Postscript string pretty meaningless. This adds a hex string<br>
+ representation which can be used in Fontmap.GS or cidfmap for subsitution.<br>
+<br>
+toolbin/pdf_info.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-12 13:07:46 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bcb6fb284fcbe776d9ddd44f98d196da7df2c054">bcb6fb284fcbe776d9ddd44f98d196da7df2c054</a>
+<blockquote>
+<p>
+ Add NDEBUG to the optimised build flags<br>
+<br>
+ Without that, asserts get included in an optimised build, which we don't want.<br>
+<br>
+base/unix-gcc.mak<br>
+base/unixansi.mak<br>
+configure.ac<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-10 15:37:35 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=044848a1752273471e9deab826045eca82030d62">044848a1752273471e9deab826045eca82030d62</a>
+<blockquote>
+<p>
+ Reinstate basic regular expression compatibility<br>
+<br>
+ In Basic Regular Expressions `+' is an ordinary character, use `*' instead.<br>
+<br>
+ This also maintains consistency with the equivalent code a few lines above in<br>
+ the file.<br>
+<br>
+jbig2dec/autogen.sh<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-09 03:00:42 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35828fce7ad795c546831520b7a57ef233453b43">35828fce7ad795c546831520b7a57ef233453b43</a>
+<blockquote>
+<p>
+ txtwrite - don't close the device on media size changes<br>
+<br>
+ Bug #701971 &quot;txtwrite incomplete for certain files and differs when stdout versus file is output&quot;<br>
+<br>
+ The problem is nothing to do with stdout vs file. The difference is due<br>
+ to the fact that the input PDF file has multiple pages with different<br>
+ media sizes. When the media size is changed the default put_params()<br>
+ method closes and reopens the device. When the txtwrite device is<br>
+ closed it closes its output file. Re-opening the device opens a new<br>
+ file, if the filename doesn not have a %d then the sam file is opened<br>
+ which will of course truncate it.<br>
+<br>
+ Writing to stdout obviously doesn't have this behaviour when the output<br>
+ file is closed.<br>
+<br>
+ We don't need to close the txtwrite device when the media size changes<br>
+ so here we patch the 'is_open' flag to prevent the default method<br>
+ from closing the device.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-06 21:45:09 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b46142c94bde32f620bda18e3bc5912fbf999446">b46142c94bde32f620bda18e3bc5912fbf999446</a>
+<blockquote>
+<p>
+ Bug 701973: Fix gssprintf.c includes for PRI macros<br>
+<br>
+ The header inclusion in gssprintf.c meant the definitions of the PRI macros<br>
+ for string formatting could be inconsistent with other source files.<br>
+<br>
+ Adding the appropriate headers in the correct order resolves that issue.<br>
+<br>
+base/gssprintf.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-06 21:44:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a4c78f01d9a1bd9862b575f33aa48afddd167005">a4c78f01d9a1bd9862b575f33aa48afddd167005</a>
+<blockquote>
+<p>
+ Fix configure based build for post-Sun Solaris releases<br>
+<br>
+base/stdint_.h<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-07 15:02:15 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3bf992e26006c8af9e137822159eb7c7540462c0">3bf992e26006c8af9e137822159eb7c7540462c0</a>
+<blockquote>
+<p>
+ PDF interpreter - Accept /ColorSpace as well as /CS in group attribute dictionary<br>
+<br>
+ Again, no bug report, the customer has asked that the file be kept<br>
+ confidential<br>
+<br>
+ The problem is due to a group attribute dictionary for an SMask. The<br>
+ dictionary is required to contain a /CS (colour space) entry in order<br>
+ to correctly set the background. In this case, however, the dictionary<br>
+ contains a /ColorSpace entry.<br>
+<br>
+ I've chosen to implement treating the /ColorSpace as a /CS entry, this<br>
+ is not what Acrobat does, but mimicking Acrobat's behaviour is more or<br>
+ less impossible for us. We do emit a warning.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-06 18:43:28 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=539fe73419fdf00ffd7747a2cf890e56bc6f0504">539fe73419fdf00ffd7747a2cf890e56bc6f0504</a>
+<blockquote>
+<p>
+ PDF interpreter - cope with legal but sub-optimal indirect /Pattern<br>
+<br>
+ No bug, the report is from a customer who wants the file to be treated<br>
+ confidentially.<br>
+<br>
+ The files uses a Pattern colour space, which it defines in a highly<br>
+ peculiar fashion:<br>
+<br>
+ stream<br>
+ ....<br>
+ /CS0 cs /P0 scn<br>
+<br>
+ ....<br>
+ endstream<br>
+<br>
+ CS0 is defined as:<br>
+ /CS0 22 0 R<br>
+<br>
+ and object 22 is:<br>
+<br>
+ 22 0 obj<br>
+ [ 23 0 R ]<br>
+ endobj<br>
+<br>
+ 23 0 obj<br>
+ /Pattern<br>
+ endobj<br>
+<br>
+ The PDF interpreter wasn't prepared to handle the name being an indirect<br>
+ reference.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 09:54:53 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5dfca9b93a17806e11d54068a6e5b9705f3b6bc6">5dfca9b93a17806e11d54068a6e5b9705f3b6bc6</a>
+<blockquote>
+<p>
+ Fix problem with setup_trans being undone by grestore<br>
+<br>
+ Noticed with text from Bug688728.pdf, but the offending method was<br>
+ also an issue with 'sh' and 'image' operations where the setup_trans<br>
+ invocation was withing a gsave ... grestore. The BlendMode and other<br>
+ graphics state parameters would be reset by the grestore.<br>
+<br>
+ Also some places could get errors from pathbbox and/or strokepath<br>
+ due to a non-invertable matrix, so errors from these now just emit<br>
+ an empty bbox [ 0 0 0 0 ].<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-05 12:50:26 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbd776580b26bdf27bcf5778dea94b446c786f67">fbd776580b26bdf27bcf5778dea94b446c786f67</a>
+<blockquote>
+<p>
+ Coverity ID 351435: reduce buffer size passed to strncat()<br>
+<br>
+ Fixes an (unlikely) potential buffer overflow<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-04 12:23:02 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=53ab3ecee8a60d412c2bf1406340bf9cb228e106">53ab3ecee8a60d412c2bf1406340bf9cb228e106</a>
+<blockquote>
+<p>
+ Bug 701969: Fix fontconfig path permissions handling<br>
+<br>
+ The paths from fontconfig to be added to the permit file reading list was not<br>
+ having the trailing directory separator added to indicate we want to allow<br>
+ the directory to be read.<br>
+<br>
+ Also, tweak the path/filename splitting (for the permit file read list) when<br>
+ parsing the cidfmap so it matches the improved version in gs_fonts.ps<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-02 18:24:09 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c25d59001421845d0ff74735388d450d62b459d5">c25d59001421845d0ff74735388d450d62b459d5</a>
+<blockquote>
+<p>
+ PDF interpreter - improve /Polygon annotation appearance creation<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance missing&quot;<br>
+<br>
+ Another case of failing to stroke the border of an annotation if it had<br>
+ no interior colour. We still don't support the 'Cloudy' Border Effect.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-02 17:59:34 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=11f6202373fc546cc10d08acfb5ca0463df20437">11f6202373fc546cc10d08acfb5ca0463df20437</a>
+<blockquote>
+<p>
+ PDF interpreter - generate callout (/CL) lines for FreeText annots<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance is missing&quot;<br>
+<br>
+ FreeText annotations can have a /CL (callout) entry, which defines a<br>
+ line to be drawn to the point referenced by the text.<br>
+<br>
+ This is a first pass at the problem, Acrobat generates arrow heads for<br>
+ the callout lines, this patch does not.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-02 17:19:00 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=182e228cee6b30c6e2f00d8abd20a6791d44323f">182e228cee6b30c6e2f00d8abd20a6791d44323f</a>
+<blockquote>
+<p>
+ PDF interpreter - improve /Square annotation appearance creation<br>
+<br>
+ Bug #701889 &quot;Annotation objects missing or incorrectly interpreted when appearance stream missing&quot;<br>
+<br>
+ First of probably several changes. In this case we were failing to<br>
+ stroke the border of a /Square annotation if it had no interior colour<br>
+ (we did not render the annotation at all).<br>
+<br>
+ In addition, when element 3 of the Border array was 0 we were still<br>
+ drawing a Border, which we should not do (this didn't show up until we<br>
+ fixed the problem above).<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-01 22:04:21 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c535c0c879162ccd7c88c5b8cc6c3a0847c0babe">c535c0c879162ccd7c88c5b8cc6c3a0847c0babe</a>
+<blockquote>
+<p>
+ Create devdevs.tr correctly<br>
+<br>
+ devdevs.tr is an interim list of output and core library &quot;devs&quot; that gets<br>
+ created and then used, ultimately, to create the gconfig.h header file<br>
+ (which has the bulid configuration of the graphics library), and the linker<br>
+ scripts.<br>
+<br>
+ When devdevs.tr required creation, we were always appending to the file (if it<br>
+ already existed), not overwriting it, meaning the list would grow indefinitely,<br>
+ and contain duplicates.<br>
+<br>
+ This looks like a typo: the first line of devdevs.tr creation used a '-a'<br>
+ echogs paramater, rather than the '-w' parameter.<br>
+<br>
+ I think this should solve the problem.<br>
+<br>
+base/gs.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-12-01 21:55:48 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aa4fa650fa837a6f7b22caad33699bbbf9156bc1">aa4fa650fa837a6f7b22caad33699bbbf9156bc1</a>
+<blockquote>
+<p>
+ Bug 701957: Explicitly disable webp and ztsd for libtiff<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 08:42:15 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2b492ad627bdcb476fa3cd15a1c31cc3b6b788d">c2b492ad627bdcb476fa3cd15a1c31cc3b6b788d</a>
+<blockquote>
+<p>
+ Fix typo (inadvertent paste) in devices/gdevjbig2.c from f63270230 commit<br>
+<br>
+devices/gdevjbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 14:40:47 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8636935ac086f56464f0541ed735f1016f2c3895">8636935ac086f56464f0541ed735f1016f2c3895</a>
+<blockquote>
+<p>
+ Coverity 94659: removed cp_num - was allocated but never actually used.<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 14:35:25 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a3f284624a68dcb1ecb72dcf307b42d194e78de1">a3f284624a68dcb1ecb72dcf307b42d194e78de1</a>
+<blockquote>
+<p>
+ Coverity 94653: fixed incorrect if() that was logically dead code.<br>
+<br>
+contrib/lips4/gdevl4v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 14:15:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ff02f8741f71830e7a4795645680a16b9d7ae106">ff02f8741f71830e7a4795645680a16b9d7ae106</a>
+<blockquote>
+<p>
+ Coverity 94652: return error from opvp_image_plane_data() rather than segv.<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 12:40:02 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f977255de00bb71f5c2627b8692912bb3263ee48">f977255de00bb71f5c2627b8692912bb3263ee48</a>
+<blockquote>
+<p>
+ Coverity 94645: added '/* Fall through. */ comments to switch statements.<br>
+<br>
+ This should convince Coverity that the fall-through's are intentional.<br>
+<br>
+contrib/lips4/gdevl4r.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 12:38:10 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f877f5bc792206085f9edf4143983d4156fb3ae5">f877f5bc792206085f9edf4143983d4156fb3ae5</a>
+<blockquote>
+<p>
+ Coverity 94638: added '/* Fall through. */ comments to switch statements.<br>
+<br>
+ This should convince Coverity that the fall-through's are intentional.<br>
+<br>
+contrib/gdevmd2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 12:33:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39286afa21126c193fcd0f3ccc0800f7c0662ed0">39286afa21126c193fcd0f3ccc0800f7c0662ed0</a>
+<blockquote>
+<p>
+ Coverity 94616: added '/* Fall through. */ comments to switch statements<br>
+<br>
+ This should convince Coverity that the fall-through's are intentional.<br>
+<br>
+contrib/gdevgdi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 12:30:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c899fc1100f21f6e24096375e2daac26b23f33b">1c899fc1100f21f6e24096375e2daac26b23f33b</a>
+<blockquote>
+<p>
+ Coverity 94608: added '/* Fall through. */ comments to switch statements.<br>
+<br>
+ This should convince Coverity that the fall-through's are intentional.<br>
+<br>
+contrib/lips4/gdevl4v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 12:10:19 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=adbf399b79b3e6b645e98acd53f42f9fd5ca9174">adbf399b79b3e6b645e98acd53f42f9fd5ca9174</a>
+<blockquote>
+<p>
+ Coverity 94601: avoid out-of-bounds access of gendata-&gt;dev-&gt;hoffset[] if newhead &lt; 0.<br>
+<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-29 11:41:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d04fe90a4c3b82e1286a1b341cdb89a96625715">1d04fe90a4c3b82e1286a1b341cdb89a96625715</a>
+<blockquote>
+<p>
+ Coverity 94490: check return codes in opvp_fill_mask().<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 18:26:56 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbd78a0467afb2c66a41d55ee9b3aee0a7a01d7b">fbd78a0467afb2c66a41d55ee9b3aee0a7a01d7b</a>
+<blockquote>
+<p>
+ Coverity 94511: Use full range of frac when source is 8-bit.<br>
+<br>
+ Essentially we use frac2byte() and byte2frac(), instead of frac2cv() and<br>
+ cv2frac(). This ensures we use full range of frac with the transfer fns.<br>
+<br>
+ Note that this change is untested. It is based on observation and discussion<br>
+ between gs develpoers. This code has not been modified since initial import.<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 17:00:08 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a537e5bd4252abdbdc3f90dfdce8dc9fb621b38d">a537e5bd4252abdbdc3f90dfdce8dc9fb621b38d</a>
+<blockquote>
+<p>
+ Coverity 94505: converted macros into static fns.<br>
+<br>
+ This should avoid Coverity worrying about bits 8-15 always being zero in a call<br>
+ of write_short().<br>
+<br>
+contrib/gdevmd2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 16:34:49 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35e0c3f70ba2646b4bdfb41663a708a8594eeb68">35e0c3f70ba2646b4bdfb41663a708a8594eeb68</a>
+<blockquote>
+<p>
+ Coverity 94553: fixed possible copy&amp;paste error in lips4_image_out().<br>
+<br>
+ Use Len_rle instead of Len inside RLE block.<br>
+<br>
+contrib/lips4/gdevl4r.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 16:08:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=792c922fc83aed63090fb37ffc823e75ec8f9c5c">792c922fc83aed63090fb37ffc823e75ec8f9c5c</a>
+<blockquote>
+<p>
+ Coverity 95077: fixed various scan-build issues with contrib/japanese/gdevmjc.c.<br>
+<br>
+ Some of these will correspond to coverity issues also.<br>
+<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 15:44:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=efff831b1f3a00c69a32b4edd48614d583f9034a">efff831b1f3a00c69a32b4edd48614d583f9034a</a>
+<blockquote>
+<p>
+ Coverity 95077: removed unused assignment to &lt;H&gt; variable.<br>
+<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 12:05:43 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=94190ff3e48c36a8538a3aba252e2b56909f6984">94190ff3e48c36a8538a3aba252e2b56909f6984</a>
+<blockquote>
+<p>
+ Coverity 95034: avoid warnings about ignoring return from gs_note_error().<br>
+<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 11:32:14 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c9f669385954f205d395cbacb2b611d659b3ebf9">c9f669385954f205d395cbacb2b611d659b3ebf9</a>
+<blockquote>
+<p>
+ Coverity 350199: add '-tainted_data_return' annotation.<br>
+<br>
+ This makes this annotation match what has worked elsewhere.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 14:36:52 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fd2b1946fe5a4a8c029324c15f9bd606a489f543">fd2b1946fe5a4a8c029324c15f9bd606a489f543</a>
+<blockquote>
+<p>
+ Include the source file libtiff webp compression support<br>
+<br>
+ If the webp lib is available, it could cause linker failures if we don't<br>
+ include the source file.<br>
+<br>
+base/tiff.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-28 11:29:03 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=874ef8cf7f0af2efae3d7fb6598013be5d277384">874ef8cf7f0af2efae3d7fb6598013be5d277384</a>
+<blockquote>
+<p>
+ Enable jpeg support in libtiff if possible<br>
+<br>
+base/tiff.mak<br>
+configure.ac<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 15:29:04 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=15f3faeffff7d1b2658b824262314091f7af088b">15f3faeffff7d1b2658b824262314091f7af088b</a>
+<blockquote>
+<p>
+ Coverity 95034: move code so that we have one less call to pcl_cm_is_differential().<br>
+<br>
+ fixes scan-build issue, e.g.:<br>
+ scan-build -o ../scan-build-out make sanitize<br>
+<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 15:27:25 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6e8c15137a70012776c1b163d7480e1a2cc7c61b">6e8c15137a70012776c1b163d7480e1a2cc7c61b</a>
+<blockquote>
+<p>
+ Coverity 95034: removed use of guard() macro.<br>
+<br>
+ Instead use static fn to convert error codes, with explicit inline code.<br>
+<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 14:29:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e1c4da27805ab9b545bc8ab5b0747c37b69454c">7e1c4da27805ab9b545bc8ab5b0747c37b69454c</a>
+<blockquote>
+<p>
+ Coverity 95034: refactor pcl3_print_page() to avoid leaks.<br>
+<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 13:11:29 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1df794e69d9f29dae215e50cf328ccad40fe29e8">1df794e69d9f29dae215e50cf328ccad40fe29e8</a>
+<blockquote>
+<p>
+ Coverity 95027: fix off-by-one when bounds-checking against LIPS_MEDIACHAR_MAX.<br>
+<br>
+contrib/lips4/gdevl4r.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 12:52:17 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9ccb4139c5f3fb89a5f4d6554e73323dbf73641">e9ccb4139c5f3fb89a5f4d6554e73323dbf73641</a>
+<blockquote>
+<p>
+ Coverity 94957: Call dlclose() to avoid leaks of handles from dlopen().<br>
+<br>
+contrib/opvp/gdevopvp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 11:39:28 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e4dcc70672b447df52b0a3c7976ab6ece280841e">e4dcc70672b447df52b0a3c7976ab6ece280841e</a>
+<blockquote>
+<p>
+ Coverity 350199: mark cf_encode_1d() as not tainting lbuf.<br>
+<br>
+ This may work better than the previous annotation.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 12:04:54 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=334132f45320ef35b54032c053c100d07e02ec98">334132f45320ef35b54032c053c100d07e02ec98</a>
+<blockquote>
+<p>
+ Fix problems seen with m8510 device and improve gdev_prn_copy_scan_lines<br>
+<br>
+ Previous patch made this device pay attention to return code from the<br>
+ gdev_prn_copy_scan_lines, which caused the all_devices test to get an error.<br>
+<br>
+ Also this device would get an ioerror if the page width was not a multiple<br>
+ of 8. Fix m8510_output_run to round up when setting out_end, bullet proof<br>
+ check of count so we don't try and print with a negative count.<br>
+<br>
+ Also fix gdev_prn_copy_scan_lines to return count == 0 if the starting<br>
+ line is past the end of the page, and fill lines past end of page with<br>
+ zeroes if the count did not fill it (or if there was an error from<br>
+ gdev_prn_get_bits).<br>
+<br>
+base/gdevprn.c<br>
+devices/gdev8510.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 14:43:58 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=23b4705f975ee0d4288ad47e62ffb8737ced48a8">23b4705f975ee0d4288ad47e62ffb8737ced48a8</a>
+<blockquote>
+<p>
+ GPDL PNG support<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/jp2ktop.c<br>
+gpdl/pngtop.c<br>
+pcl/pl/plimpl.c<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 14:35:05 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b772aaf901a3cd37baf5c06eb141c689829bf673">b772aaf901a3cd37baf5c06eb141c689829bf673</a>
+<blockquote>
+<p>
+ Bug 701949: Add 'omitEOD' flag to RLE compressor and use for PXL.<br>
+<br>
+ It turns out that some printers (Samsung ML-2250 and Canon<br>
+ ImageRunner iRC2380i at least) object to the EOD byte appearing<br>
+ in RLE data in PXL streams.<br>
+<br>
+ Ken kindly checked the PXL spec for me, and found that: &quot;The PXL<br>
+ spec does say a control code of -128 is ignored and not included<br>
+ in the decompressed data and the byte following a control byte<br>
+ of 128 (I assume they mean -128 here) is treated as the next<br>
+ control byte. And PCL only uses RLE data for images, so they do<br>
+ know how much data they expect.&quot;<br>
+<br>
+ Thus, the conclusion we reached is that PCL/PXL don't need<br>
+ (indeed, really does not want) the EOD byte.<br>
+<br>
+ The Postscript spec clearly defines the EOD byte though. Rather<br>
+ than break the streams for postscript, we introduce a flag<br>
+ 'omitEOD' that can be set for the encoder when we want to produce<br>
+ a stream for use with PCL/PXL.<br>
+<br>
+base/srle.c<br>
+base/srlx.h<br>
+devices/vector/gdevpx.c<br>
+psi/zfilter.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-27 13:27:35 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c9ed069d86f291dc3118ee96f76765432ac478e3">c9ed069d86f291dc3118ee96f76765432ac478e3</a>
+<blockquote>
+<p>
+ Update thirdparty.htm to reflect updated libs<br>
+<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 14:39:02 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79ac3f84060fbd5447219264ab0bcf89c7caa2cf">79ac3f84060fbd5447219264ab0bcf89c7caa2cf</a>
+<blockquote>
+<p>
+ Update Freetype to 2.4.10<br>
+<br>
+ Plus makefile updates to support it<br>
+<br>
+ Bug 701288: Handle SEAC ligature glyph metrics correctly.<br>
+<br>
+ As originally intended, a Type 1 SEAC charstring would be used for an accented<br>
+ glyph (like an a-caron, or u-umlaut) where the advance with of the SEAC glyph<br>
+ is the same as that of the 'base' glyph ('a' or 'u').<br>
+<br>
+ It this case, it is not uncommon for the SEAC to skip using an (H)SBW op code<br>
+ and rely on the one from the base glyph.<br>
+<br>
+ But out of spec fonts also use SEAC glyphs ligature glyphs (like 'oe' or 'fi'),<br>
+ and in those cases the overall advance width is greater than that of the 'base'<br>
+ glyph.<br>
+<br>
+ In this case, we have to allow for the SEAC glyph having included an (H)SBW and<br>
+ if it has, retain those values, rather than those from the base glyph.<br>
+<br>
+ Rename file and make file change to match<br>
+<br>
+ Avoids file name clash with freetype 2.4.10<br>
+<br>
+ Work around a change in the zlib API for 1.2.11<br>
+<br>
+ where it's used in the Freetype/zlib interface debugging code.<br>
+<br>
+base/freetype.mak<br>
+base/lcupsi.mak<br>
+cups/libs/filter/cupsraster.c<br>
+freetype/CMakeLists.txt<br>
+freetype/ChangeLog<br>
+freetype/ChangeLog.20<br>
+freetype/ChangeLog.21<br>
+freetype/ChangeLog.22<br>
+freetype/ChangeLog.23<br>
+freetype/ChangeLog.24<br>
+freetype/ChangeLog.25<br>
+freetype/ChangeLog.26<br>
+freetype/ChangeLog.27<br>
+freetype/ChangeLog.28<br>
+freetype/ChangeLog.29<br>
+freetype/Jamfile<br>
+freetype/Jamrules<br>
+freetype/Makefile<br>
+freetype/README<br>
+freetype/README.git<br>
+freetype/autogen.sh<br>
+freetype/builds/amiga/README<br>
+freetype/builds/amiga/include/config/ftconfig.h<br>
+freetype/builds/amiga/include/config/ftmodule.h<br>
+freetype/builds/amiga/makefile<br>
+freetype/builds/amiga/makefile.os4<br>
+freetype/builds/amiga/smakefile<br>
+freetype/builds/amiga/src/base/ftdebug.c<br>
+freetype/builds/amiga/src/base/ftsystem.c<br>
+freetype/builds/ansi/ansi-def.mk<br>
+freetype/builds/ansi/ansi.mk<br>
+freetype/builds/beos/beos-def.mk<br>
+freetype/builds/beos/beos.mk<br>
+freetype/builds/beos/detect.mk<br>
+freetype/builds/cmake/iOS.cmake<br>
+freetype/builds/cmake/testbuild.sh<br>
+freetype/builds/compiler/ansi-cc.mk<br>
+freetype/builds/compiler/bcc-dev.mk<br>
+freetype/builds/compiler/bcc.mk<br>
+freetype/builds/compiler/emx.mk<br>
+freetype/builds/compiler/gcc-dev.mk<br>
+freetype/builds/compiler/gcc.mk<br>
+freetype/builds/compiler/intelc.mk<br>
+freetype/builds/compiler/unix-lcc.mk<br>
+freetype/builds/compiler/visualage.mk<br>
+freetype/builds/compiler/visualc.mk<br>
+freetype/builds/compiler/watcom.mk<br>
+freetype/builds/compiler/win-lcc.mk<br>
+freetype/builds/detect.mk<br>
+freetype/builds/dos/detect.mk<br>
+freetype/builds/dos/dos-def.mk<br>
+freetype/builds/dos/dos-emx.mk<br>
+freetype/builds/dos/dos-gcc.mk<br>
+freetype/builds/dos/dos-wat.mk<br>
+freetype/builds/exports.mk<br>
+freetype/builds/freetype.mk<br>
+freetype/builds/link_dos.mk<br>
+freetype/builds/link_std.mk<br>
+freetype/builds/mac/README<br>
+freetype/builds/mac/freetype-Info.plist<br>
+freetype/builds/mac/ftmac.c<br>
+freetype/builds/modules.mk<br>
+freetype/builds/os2/detect.mk<br>
+freetype/builds/os2/os2-def.mk<br>
+freetype/builds/os2/os2-dev.mk<br>
+freetype/builds/os2/os2-gcc.mk<br>
+freetype/builds/symbian/bld.inf<br>
+freetype/builds/symbian/freetype.mmp<br>
+freetype/builds/toplevel.mk<br>
+freetype/builds/unix/aclocal.m4<br>
+freetype/builds/unix/config.guess<br>
+freetype/builds/unix/config.sub<br>
+freetype/builds/unix/configure<br>
+freetype/builds/unix/configure.ac<br>
+freetype/builds/unix/configure.raw<br>
+freetype/builds/unix/detect.mk<br>
+freetype/builds/unix/freetype-config.in<br>
+freetype/builds/unix/freetype2.m4<br>
+freetype/builds/unix/ft-munmap.m4<br>
+freetype/builds/unix/ftconfig.in<br>
+freetype/builds/unix/ftsystem.c<br>
+freetype/builds/unix/install-sh<br>
+freetype/builds/unix/install.mk<br>
+freetype/builds/unix/ltmain.sh<br>
+freetype/builds/unix/unix-cc.in<br>
+freetype/builds/unix/unix-def.in<br>
+freetype/builds/unix/unix-dev.mk<br>
+freetype/builds/unix/unix-lcc.mk<br>
+freetype/builds/unix/unix.mk<br>
+freetype/builds/unix/unixddef.mk<br>
+freetype/builds/vms/LIBS.OPT_IA64<br>
+freetype/builds/vms/_LINK.OPT_IA64<br>
+freetype/builds/vms/ftconfig.h<br>
+freetype/builds/vms/ftsystem.c<br>
+freetype/builds/vms/vmslib.dat<br>
+freetype/builds/wince/ftdebug.c<br>
+freetype/builds/wince/vc2005-ce/freetype.vcproj<br>
+freetype/builds/wince/vc2005-ce/index.html<br>
+freetype/builds/wince/vc2008-ce/freetype.vcproj<br>
+freetype/builds/wince/vc2008-ce/index.html<br>
+freetype/builds/windows/detect.mk<br>
+freetype/builds/windows/ftdebug.c<br>
+freetype/builds/windows/vc2005/freetype.sln<br>
+freetype/builds/windows/vc2005/freetype.vcproj<br>
+freetype/builds/windows/vc2005/index.html<br>
+freetype/builds/windows/vc2008/freetype.sln<br>
+freetype/builds/windows/vc2008/freetype.vcproj<br>
+freetype/builds/windows/vc2008/index.html<br>
+freetype/builds/windows/vc2010/freetype.vcxproj<br>
+freetype/builds/windows/vc2010/freetype.vcxproj.filters<br>
+freetype/builds/windows/vc2010/index.html<br>
+freetype/builds/windows/visualc/freetype.dsp<br>
+freetype/builds/windows/visualc/freetype.sln<br>
+freetype/builds/windows/visualc/freetype.vcproj<br>
+freetype/builds/windows/visualc/index.html<br>
+freetype/builds/windows/visualce/freetype.dsp<br>
+freetype/builds/windows/visualce/freetype.vcproj<br>
+freetype/builds/windows/visualce/index.html<br>
+freetype/builds/windows/w32-bcc.mk<br>
+freetype/builds/windows/w32-bccd.mk<br>
+freetype/builds/windows/w32-dev.mk<br>
+freetype/builds/windows/w32-gcc.mk<br>
+freetype/builds/windows/w32-icc.mk<br>
+freetype/builds/windows/w32-intl.mk<br>
+freetype/builds/windows/w32-lcc.mk<br>
+freetype/builds/windows/w32-mingw32.mk<br>
+freetype/builds/windows/w32-vcc.mk<br>
+freetype/builds/windows/w32-wat.mk<br>
+freetype/builds/windows/win32-def.mk<br>
+freetype/configure<br>
+freetype/devel/ft2build.h<br>
+freetype/devel/ftoption.h<br>
+freetype/docs/CHANGES<br>
+freetype/docs/CUSTOMIZE<br>
+freetype/docs/DEBUG<br>
+freetype/docs/DOCGUIDE<br>
+freetype/docs/INSTALL<br>
+freetype/docs/INSTALL.ANY<br>
+freetype/docs/INSTALL.CROSS<br>
+freetype/docs/INSTALL.GNU<br>
+freetype/docs/INSTALL.UNIX<br>
+freetype/docs/INSTALL.VMS<br>
+freetype/docs/MAKEPP<br>
+freetype/docs/TODO<br>
+freetype/docs/VERSIONS.TXT<br>
+freetype/docs/formats.txt<br>
+freetype/docs/freetype-config.1<br>
+freetype/docs/raster.txt<br>
+freetype/docs/reference/README<br>
+freetype/docs/reference/ft2-auto_hinter.html<br>
+freetype/docs/reference/ft2-base_interface.html<br>
+freetype/docs/reference/ft2-basic_types.html<br>
+freetype/docs/reference/ft2-bdf_fonts.html<br>
+freetype/docs/reference/ft2-bitmap_handling.html<br>
+freetype/docs/reference/ft2-bzip2.html<br>
+freetype/docs/reference/ft2-cache_subsystem.html<br>
+freetype/docs/reference/ft2-cff_driver.html<br>
+freetype/docs/reference/ft2-cid_fonts.html<br>
+freetype/docs/reference/ft2-computations.html<br>
+freetype/docs/reference/ft2-error_code_values.html<br>
+freetype/docs/reference/ft2-error_enumerations.html<br>
+freetype/docs/reference/ft2-font_formats.html<br>
+freetype/docs/reference/ft2-gasp_table.html<br>
+freetype/docs/reference/ft2-glyph_management.html<br>
+freetype/docs/reference/ft2-glyph_stroker.html<br>
+freetype/docs/reference/ft2-glyph_variants.html<br>
+freetype/docs/reference/ft2-gx_validation.html<br>
+freetype/docs/reference/ft2-gzip.html<br>
+freetype/docs/reference/ft2-header_file_macros.html<br>
+freetype/docs/reference/ft2-header_inclusion.html<br>
+freetype/docs/reference/ft2-incremental.html<br>
+freetype/docs/reference/ft2-index.html<br>
+freetype/docs/reference/ft2-lcd_filtering.html<br>
+freetype/docs/reference/ft2-list_processing.html<br>
+freetype/docs/reference/ft2-lzw.html<br>
+freetype/docs/reference/ft2-mac_specific.html<br>
+freetype/docs/reference/ft2-module_management.html<br>
+freetype/docs/reference/ft2-multiple_masters.html<br>
+freetype/docs/reference/ft2-ot_validation.html<br>
+freetype/docs/reference/ft2-outline_processing.html<br>
+freetype/docs/reference/ft2-parameter_tags.html<br>
+freetype/docs/reference/ft2-pcf_driver.html<br>
+freetype/docs/reference/ft2-pfr_fonts.html<br>
+freetype/docs/reference/ft2-properties.html<br>
+freetype/docs/reference/ft2-quick_advance.html<br>
+freetype/docs/reference/ft2-raster.html<br>
+freetype/docs/reference/ft2-sfnt_names.html<br>
+freetype/docs/reference/ft2-sizes_management.html<br>
+freetype/docs/reference/ft2-system_interface.html<br>
+freetype/docs/reference/ft2-t1_cid_driver.html<br>
+freetype/docs/reference/ft2-toc.html<br>
+freetype/docs/reference/ft2-truetype_engine.html<br>
+freetype/docs/reference/ft2-truetype_tables.html<br>
+freetype/docs/reference/ft2-tt_driver.html<br>
+freetype/docs/reference/ft2-type1_tables.html<br>
+freetype/docs/reference/ft2-user_allocation.html<br>
+freetype/docs/reference/ft2-version.html<br>
+freetype/docs/reference/ft2-winfnt_fonts.html<br>
+freetype/docs/reference/site/404.html<br>
+freetype/docs/reference/site/assets/fonts/font-awesome.css<br>
+freetype/docs/reference/site/assets/fonts/material-icons.css<br>
+freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.ttf<br>
+freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff<br>
+freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff2<br>
+freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.ttf<br>
+freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff<br>
+freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff2<br>
+freetype/docs/reference/site/assets/images/favicon.png<br>
+freetype/docs/reference/site/assets/images/icons/bitbucket.1b09e088.svg<br>
+freetype/docs/reference/site/assets/images/icons/github.f0b8504a.svg<br>
+freetype/docs/reference/site/assets/images/icons/gitlab.6dd19c00.svg<br>
+freetype/docs/reference/site/assets/javascripts/application.d9aa80ab.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.da.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.de.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.du.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.es.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.fi.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.fr.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.hu.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.it.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.ja.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.jp.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.multi.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.nl.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.no.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.pt.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.ro.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.ru.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.stemmer.support.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.sv.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.th.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/lunr.tr.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/tinyseg.js<br>
+freetype/docs/reference/site/assets/javascripts/lunr/wordcut.js<br>
+freetype/docs/reference/site/assets/javascripts/modernizr.1f0bcf2b.js<br>
+freetype/docs/reference/site/assets/stylesheets/application-palette.224b79ff.css<br>
+freetype/docs/reference/site/assets/stylesheets/application.982221ab.css<br>
+freetype/docs/reference/site/ft2-auto_hinter.html<br>
+freetype/docs/reference/site/ft2-base_interface.html<br>
+freetype/docs/reference/site/ft2-basic_types.html<br>
+freetype/docs/reference/site/ft2-bdf_fonts.html<br>
+freetype/docs/reference/site/ft2-bitmap_handling.html<br>
+freetype/docs/reference/site/ft2-bzip2.html<br>
+freetype/docs/reference/site/ft2-cache_subsystem.html<br>
+freetype/docs/reference/site/ft2-cff_driver.html<br>
+freetype/docs/reference/site/ft2-cid_fonts.html<br>
+freetype/docs/reference/site/ft2-color_management.html<br>
+freetype/docs/reference/site/ft2-computations.html<br>
+freetype/docs/reference/site/ft2-error_code_values.html<br>
+freetype/docs/reference/site/ft2-error_enumerations.html<br>
+freetype/docs/reference/site/ft2-font_formats.html<br>
+freetype/docs/reference/site/ft2-gasp_table.html<br>
+freetype/docs/reference/site/ft2-glyph_management.html<br>
+freetype/docs/reference/site/ft2-glyph_stroker.html<br>
+freetype/docs/reference/site/ft2-glyph_variants.html<br>
+freetype/docs/reference/site/ft2-gx_validation.html<br>
+freetype/docs/reference/site/ft2-gzip.html<br>
+freetype/docs/reference/site/ft2-header_file_macros.html<br>
+freetype/docs/reference/site/ft2-header_inclusion.html<br>
+freetype/docs/reference/site/ft2-incremental.html<br>
+freetype/docs/reference/site/ft2-index.html<br>
+freetype/docs/reference/site/ft2-layer_management.html<br>
+freetype/docs/reference/site/ft2-lcd_rendering.html<br>
+freetype/docs/reference/site/ft2-list_processing.html<br>
+freetype/docs/reference/site/ft2-lzw.html<br>
+freetype/docs/reference/site/ft2-mac_specific.html<br>
+freetype/docs/reference/site/ft2-module_management.html<br>
+freetype/docs/reference/site/ft2-multiple_masters.html<br>
+freetype/docs/reference/site/ft2-ot_validation.html<br>
+freetype/docs/reference/site/ft2-outline_processing.html<br>
+freetype/docs/reference/site/ft2-parameter_tags.html<br>
+freetype/docs/reference/site/ft2-pcf_driver.html<br>
+freetype/docs/reference/site/ft2-pfr_fonts.html<br>
+freetype/docs/reference/site/ft2-properties.html<br>
+freetype/docs/reference/site/ft2-quick_advance.html<br>
+freetype/docs/reference/site/ft2-raster.html<br>
+freetype/docs/reference/site/ft2-sfnt_names.html<br>
+freetype/docs/reference/site/ft2-sizes_management.html<br>
+freetype/docs/reference/site/ft2-system_interface.html<br>
+freetype/docs/reference/site/ft2-t1_cid_driver.html<br>
+freetype/docs/reference/site/ft2-truetype_engine.html<br>
+freetype/docs/reference/site/ft2-truetype_tables.html<br>
+freetype/docs/reference/site/ft2-tt_driver.html<br>
+freetype/docs/reference/site/ft2-type1_tables.html<br>
+freetype/docs/reference/site/ft2-user_allocation.html<br>
+freetype/docs/reference/site/ft2-version.html<br>
+freetype/docs/reference/site/ft2-winfnt_fonts.html<br>
+freetype/docs/reference/site/images/favico.ico<br>
+freetype/docs/reference/site/index.html<br>
+freetype/docs/reference/site/javascripts/extra.js<br>
+freetype/docs/reference/site/search/search_index.json<br>
+freetype/docs/reference/site/sitemap.xml<br>
+freetype/docs/reference/site/sitemap.xml.gz<br>
+freetype/docs/reference/site/stylesheets/extra.css<br>
+freetype/docs/release<br>
+freetype/include/freetype/config/ftconfig.h<br>
+freetype/include/freetype/config/ftheader.h<br>
+freetype/include/freetype/config/ftmodule.h<br>
+freetype/include/freetype/config/ftoption.h<br>
+freetype/include/freetype/config/ftstdlib.h<br>
+freetype/include/freetype/freetype.h<br>
+freetype/include/freetype/ftadvanc.h<br>
+freetype/include/freetype/ftbbox.h<br>
+freetype/include/freetype/ftbdf.h<br>
+freetype/include/freetype/ftbitmap.h<br>
+freetype/include/freetype/ftbzip2.h<br>
+freetype/include/freetype/ftcache.h<br>
+freetype/include/freetype/ftchapters.h<br>
+freetype/include/freetype/ftcid.h<br>
+freetype/include/freetype/ftcolor.h<br>
+freetype/include/freetype/ftdriver.h<br>
+freetype/include/freetype/fterrdef.h<br>
+freetype/include/freetype/fterrors.h<br>
+freetype/include/freetype/ftfntfmt.h<br>
+freetype/include/freetype/ftgasp.h<br>
+freetype/include/freetype/ftglyph.h<br>
+freetype/include/freetype/ftgxval.h<br>
+freetype/include/freetype/ftgzip.h<br>
+freetype/include/freetype/ftimage.h<br>
+freetype/include/freetype/ftincrem.h<br>
+freetype/include/freetype/ftlcdfil.h<br>
+freetype/include/freetype/ftlist.h<br>
+freetype/include/freetype/ftlzw.h<br>
+freetype/include/freetype/ftmac.h<br>
+freetype/include/freetype/ftmm.h<br>
+freetype/include/freetype/ftmodapi.h<br>
+freetype/include/freetype/ftmoderr.h<br>
+freetype/include/freetype/ftotval.h<br>
+freetype/include/freetype/ftoutln.h<br>
+freetype/include/freetype/ftparams.h<br>
+freetype/include/freetype/ftpfr.h<br>
+freetype/include/freetype/ftrender.h<br>
+freetype/include/freetype/ftsizes.h<br>
+freetype/include/freetype/ftsnames.h<br>
+freetype/include/freetype/ftstroke.h<br>
+freetype/include/freetype/ftsynth.h<br>
+freetype/include/freetype/ftsystem.h<br>
+freetype/include/freetype/fttrigon.h<br>
+freetype/include/freetype/fttypes.h<br>
+freetype/include/freetype/ftwinfnt.h<br>
+freetype/include/freetype/internal/autohint.h<br>
+freetype/include/freetype/internal/cffotypes.h<br>
+freetype/include/freetype/internal/cfftypes.h<br>
+freetype/include/freetype/internal/ftcalc.h<br>
+freetype/include/freetype/internal/ftdebug.h<br>
+freetype/include/freetype/internal/ftdrv.h<br>
+freetype/include/freetype/internal/ftgloadr.h<br>
+freetype/include/freetype/internal/fthash.h<br>
+freetype/include/freetype/internal/ftmemory.h<br>
+freetype/include/freetype/internal/ftobjs.h<br>
+freetype/include/freetype/internal/ftpic.h<br>
+freetype/include/freetype/internal/ftpsprop.h<br>
+freetype/include/freetype/internal/ftrfork.h<br>
+freetype/include/freetype/internal/ftserv.h<br>
+freetype/include/freetype/internal/ftstream.h<br>
+freetype/include/freetype/internal/fttrace.h<br>
+freetype/include/freetype/internal/ftvalid.h<br>
+freetype/include/freetype/internal/internal.h<br>
+freetype/include/freetype/internal/psaux.h<br>
+freetype/include/freetype/internal/pshints.h<br>
+freetype/include/freetype/internal/services/svbdf.h<br>
+freetype/include/freetype/internal/services/svcfftl.h<br>
+freetype/include/freetype/internal/services/svcid.h<br>
+freetype/include/freetype/internal/services/svfntfmt.h<br>
+freetype/include/freetype/internal/services/svgldict.h<br>
+freetype/include/freetype/internal/services/svgxval.h<br>
+freetype/include/freetype/internal/services/svkern.h<br>
+freetype/include/freetype/internal/services/svmetric.h<br>
+freetype/include/freetype/internal/services/svmm.h<br>
+freetype/include/freetype/internal/services/svotval.h<br>
+freetype/include/freetype/internal/services/svpfr.h<br>
+freetype/include/freetype/internal/services/svpostnm.h<br>
+freetype/include/freetype/internal/services/svprop.h<br>
+freetype/include/freetype/internal/services/svpscmap.h<br>
+freetype/include/freetype/internal/services/svpsinfo.h<br>
+freetype/include/freetype/internal/services/svsfnt.h<br>
+freetype/include/freetype/internal/services/svttcmap.h<br>
+freetype/include/freetype/internal/services/svtteng.h<br>
+freetype/include/freetype/internal/services/svttglyf.h<br>
+freetype/include/freetype/internal/services/svwinfnt.h<br>
+freetype/include/freetype/internal/sfnt.h<br>
+freetype/include/freetype/internal/t1types.h<br>
+freetype/include/freetype/internal/tttypes.h<br>
+freetype/include/freetype/internal/wofftypes.h<br>
+freetype/include/freetype/t1tables.h<br>
+freetype/include/freetype/ttnameid.h<br>
+freetype/include/freetype/tttables.h<br>
+freetype/include/freetype/tttags.h<br>
+freetype/include/ft2build.h<br>
+freetype/modules.cfg<br>
+freetype/src/Jamfile<br>
+freetype/src/autofit/Jamfile<br>
+freetype/src/autofit/afangles.c<br>
+freetype/src/autofit/afangles.h<br>
+freetype/src/autofit/afblue.c<br>
+freetype/src/autofit/afblue.cin<br>
+freetype/src/autofit/afblue.dat<br>
+freetype/src/autofit/afblue.h<br>
+freetype/src/autofit/afblue.hin<br>
+freetype/src/autofit/afcjk.c<br>
+freetype/src/autofit/afcjk.h<br>
+freetype/src/autofit/afcover.h<br>
+freetype/src/autofit/afdummy.c<br>
+freetype/src/autofit/afdummy.h<br>
+freetype/src/autofit/aferrors.h<br>
+freetype/src/autofit/afglobal.c<br>
+freetype/src/autofit/afglobal.h<br>
+freetype/src/autofit/afhints.c<br>
+freetype/src/autofit/afhints.h<br>
+freetype/src/autofit/afindic.c<br>
+freetype/src/autofit/afindic.h<br>
+freetype/src/autofit/aflatin.c<br>
+freetype/src/autofit/aflatin.h<br>
+freetype/src/autofit/aflatin2.c<br>
+freetype/src/autofit/aflatin2.h<br>
+freetype/src/autofit/afloader.c<br>
+freetype/src/autofit/afloader.h<br>
+freetype/src/autofit/afmodule.c<br>
+freetype/src/autofit/afmodule.h<br>
+freetype/src/autofit/afpic.c<br>
+freetype/src/autofit/afpic.h<br>
+freetype/src/autofit/afranges.c<br>
+freetype/src/autofit/afranges.h<br>
+freetype/src/autofit/afscript.h<br>
+freetype/src/autofit/afshaper.c<br>
+freetype/src/autofit/afshaper.h<br>
+freetype/src/autofit/afstyles.h<br>
+freetype/src/autofit/aftypes.h<br>
+freetype/src/autofit/afwarp.c<br>
+freetype/src/autofit/afwarp.h<br>
+freetype/src/autofit/afwrtsys.h<br>
+freetype/src/autofit/autofit.c<br>
+freetype/src/autofit/module.mk<br>
+freetype/src/autofit/rules.mk<br>
+freetype/src/base/Jamfile<br>
+freetype/src/base/basepic.c<br>
+freetype/src/base/basepic.h<br>
+freetype/src/base/ftadvanc.c<br>
+freetype/src/base/ftapi.c<br>
+freetype/src/base/ftbase.c<br>
+freetype/src/base/ftbase.h<br>
+freetype/src/base/ftbbox.c<br>
+freetype/src/base/ftbdf.c<br>
+freetype/src/base/ftbitmap.c<br>
+freetype/src/base/ftcalc.c<br>
+freetype/src/base/ftcid.c<br>
+freetype/src/base/ftcolor.c<br>
+freetype/src/base/ftdbgmem.c<br>
+freetype/src/base/ftdebug.c<br>
+freetype/src/base/fterrors.c<br>
+freetype/src/base/ftfntfmt.c<br>
+freetype/src/base/ftfstype.c<br>
+freetype/src/base/ftgasp.c<br>
+freetype/src/base/ftgloadr.c<br>
+freetype/src/base/ftglyph.c<br>
+freetype/src/base/ftgxval.c<br>
+freetype/src/base/fthash.c<br>
+freetype/src/base/ftinit.c<br>
+freetype/src/base/ftlcdfil.c<br>
+freetype/src/base/ftmac.c<br>
+freetype/src/base/ftmm.c<br>
+freetype/src/base/ftobjs.c<br>
+freetype/src/base/ftotval.c<br>
+freetype/src/base/ftoutln.c<br>
+freetype/src/base/ftpatent.c<br>
+freetype/src/base/ftpfr.c<br>
+freetype/src/base/ftpic.c<br>
+freetype/src/base/ftpsprop.c<br>
+freetype/src/base/ftrfork.c<br>
+freetype/src/base/ftsnames.c<br>
+freetype/src/base/ftstream.c<br>
+freetype/src/base/ftstroke.c<br>
+freetype/src/base/ftsynth.c<br>
+freetype/src/base/ftsystem.c<br>
+freetype/src/base/fttrigon.c<br>
+freetype/src/base/fttype1.c<br>
+freetype/src/base/ftutil.c<br>
+freetype/src/base/ftver.rc<br>
+freetype/src/base/ftwinfnt.c<br>
+freetype/src/base/rules.mk<br>
+freetype/src/bdf/Jamfile<br>
+freetype/src/bdf/bdf.h<br>
+freetype/src/bdf/bdfdrivr.c<br>
+freetype/src/bdf/bdfdrivr.h<br>
+freetype/src/bdf/bdferror.h<br>
+freetype/src/bdf/bdflib.c<br>
+freetype/src/bzip2/Jamfile<br>
+freetype/src/bzip2/ftbzip2.c<br>
+freetype/src/bzip2/rules.mk<br>
+freetype/src/cache/Jamfile<br>
+freetype/src/cache/ftcache.c<br>
+freetype/src/cache/ftcbasic.c<br>
+freetype/src/cache/ftccache.c<br>
+freetype/src/cache/ftccache.h<br>
+freetype/src/cache/ftccback.h<br>
+freetype/src/cache/ftccmap.c<br>
+freetype/src/cache/ftcerror.h<br>
+freetype/src/cache/ftcglyph.c<br>
+freetype/src/cache/ftcglyph.h<br>
+freetype/src/cache/ftcimage.c<br>
+freetype/src/cache/ftcimage.h<br>
+freetype/src/cache/ftcmanag.c<br>
+freetype/src/cache/ftcmanag.h<br>
+freetype/src/cache/ftcmru.c<br>
+freetype/src/cache/ftcmru.h<br>
+freetype/src/cache/ftcsbits.c<br>
+freetype/src/cache/ftcsbits.h<br>
+freetype/src/cache/rules.mk<br>
+freetype/src/cff/Jamfile<br>
+freetype/src/cff/cff.c<br>
+freetype/src/cff/cffcmap.c<br>
+freetype/src/cff/cffcmap.h<br>
+freetype/src/cff/cffdrivr.c<br>
+freetype/src/cff/cffdrivr.h<br>
+freetype/src/cff/cfferrs.h<br>
+freetype/src/cff/cffgload.c<br>
+freetype/src/cff/cffgload.h<br>
+freetype/src/cff/cffload.c<br>
+freetype/src/cff/cffload.h<br>
+freetype/src/cff/cffobjs.c<br>
+freetype/src/cff/cffobjs.h<br>
+freetype/src/cff/cffparse.c<br>
+freetype/src/cff/cffparse.h<br>
+freetype/src/cff/cffpic.c<br>
+freetype/src/cff/cffpic.h<br>
+freetype/src/cff/cfftoken.h<br>
+freetype/src/cff/module.mk<br>
+freetype/src/cff/rules.mk<br>
+freetype/src/cid/Jamfile<br>
+freetype/src/cid/ciderrs.h<br>
+freetype/src/cid/cidgload.c<br>
+freetype/src/cid/cidgload.h<br>
+freetype/src/cid/cidload.c<br>
+freetype/src/cid/cidload.h<br>
+freetype/src/cid/cidobjs.c<br>
+freetype/src/cid/cidobjs.h<br>
+freetype/src/cid/cidparse.c<br>
+freetype/src/cid/cidparse.h<br>
+freetype/src/cid/cidriver.c<br>
+freetype/src/cid/cidriver.h<br>
+freetype/src/cid/cidtoken.h<br>
+freetype/src/cid/module.mk<br>
+freetype/src/cid/rules.mk<br>
+freetype/src/cid/type1cid.c<br>
+freetype/src/gxvalid/Jamfile<br>
+freetype/src/gxvalid/README<br>
+freetype/src/gxvalid/gxvalid.c<br>
+freetype/src/gxvalid/gxvalid.h<br>
+freetype/src/gxvalid/gxvbsln.c<br>
+freetype/src/gxvalid/gxvcommn.c<br>
+freetype/src/gxvalid/gxvcommn.h<br>
+freetype/src/gxvalid/gxverror.h<br>
+freetype/src/gxvalid/gxvfeat.c<br>
+freetype/src/gxvalid/gxvfeat.h<br>
+freetype/src/gxvalid/gxvfgen.c<br>
+freetype/src/gxvalid/gxvjust.c<br>
+freetype/src/gxvalid/gxvkern.c<br>
+freetype/src/gxvalid/gxvlcar.c<br>
+freetype/src/gxvalid/gxvmod.c<br>
+freetype/src/gxvalid/gxvmod.h<br>
+freetype/src/gxvalid/gxvmort.c<br>
+freetype/src/gxvalid/gxvmort.h<br>
+freetype/src/gxvalid/gxvmort0.c<br>
+freetype/src/gxvalid/gxvmort1.c<br>
+freetype/src/gxvalid/gxvmort2.c<br>
+freetype/src/gxvalid/gxvmort4.c<br>
+freetype/src/gxvalid/gxvmort5.c<br>
+freetype/src/gxvalid/gxvmorx.c<br>
+freetype/src/gxvalid/gxvmorx.h<br>
+freetype/src/gxvalid/gxvmorx0.c<br>
+freetype/src/gxvalid/gxvmorx1.c<br>
+freetype/src/gxvalid/gxvmorx2.c<br>
+freetype/src/gxvalid/gxvmorx4.c<br>
+freetype/src/gxvalid/gxvmorx5.c<br>
+freetype/src/gxvalid/gxvopbd.c<br>
+freetype/src/gxvalid/gxvprop.c<br>
+freetype/src/gxvalid/gxvtrak.c<br>
+freetype/src/gxvalid/module.mk<br>
+freetype/src/gxvalid/rules.mk<br>
+freetype/src/gzip/Jamfile<br>
+freetype/src/gzip/ftgzip.c<br>
+freetype/src/gzip/infblock.c<br>
+freetype/src/gzip/infcodes.c<br>
+freetype/src/gzip/inflate.c<br>
+freetype/src/gzip/rules.mk<br>
+freetype/src/lzw/Jamfile<br>
+freetype/src/lzw/ftlzw.c<br>
+freetype/src/lzw/ftzopen.c<br>
+freetype/src/lzw/ftzopen.h<br>
+freetype/src/lzw/rules.mk<br>
+freetype/src/otvalid/Jamfile<br>
+freetype/src/otvalid/module.mk<br>
+freetype/src/otvalid/otvalid.c<br>
+freetype/src/otvalid/otvalid.h<br>
+freetype/src/otvalid/otvbase.c<br>
+freetype/src/otvalid/otvcommn.c<br>
+freetype/src/otvalid/otvcommn.h<br>
+freetype/src/otvalid/otverror.h<br>
+freetype/src/otvalid/otvgdef.c<br>
+freetype/src/otvalid/otvgpos.c<br>
+freetype/src/otvalid/otvgpos.h<br>
+freetype/src/otvalid/otvgsub.c<br>
+freetype/src/otvalid/otvjstf.c<br>
+freetype/src/otvalid/otvmath.c<br>
+freetype/src/otvalid/otvmod.c<br>
+freetype/src/otvalid/otvmod.h<br>
+freetype/src/otvalid/rules.mk<br>
+freetype/src/pcf/Jamfile<br>
+freetype/src/pcf/pcf.h<br>
+freetype/src/pcf/pcfdrivr.c<br>
+freetype/src/pcf/pcfdrivr.h<br>
+freetype/src/pcf/pcferror.h<br>
+freetype/src/pcf/pcfread.c<br>
+freetype/src/pcf/pcfutil.c<br>
+freetype/src/pfr/Jamfile<br>
+freetype/src/pfr/module.mk<br>
+freetype/src/pfr/pfr.c<br>
+freetype/src/pfr/pfrcmap.c<br>
+freetype/src/pfr/pfrcmap.h<br>
+freetype/src/pfr/pfrdrivr.c<br>
+freetype/src/pfr/pfrdrivr.h<br>
+freetype/src/pfr/pfrerror.h<br>
+freetype/src/pfr/pfrgload.c<br>
+freetype/src/pfr/pfrgload.h<br>
+freetype/src/pfr/pfrload.c<br>
+freetype/src/pfr/pfrload.h<br>
+freetype/src/pfr/pfrobjs.c<br>
+freetype/src/pfr/pfrobjs.h<br>
+freetype/src/pfr/pfrsbit.c<br>
+freetype/src/pfr/pfrsbit.h<br>
+freetype/src/pfr/pfrtypes.h<br>
+freetype/src/pfr/rules.mk<br>
+freetype/src/psaux/Jamfile<br>
+freetype/src/psaux/afmparse.c<br>
+freetype/src/psaux/afmparse.h<br>
+freetype/src/psaux/cffdecode.c<br>
+freetype/src/psaux/cffdecode.h<br>
+freetype/src/psaux/module.mk<br>
+freetype/src/psaux/psarrst.c<br>
+freetype/src/psaux/psarrst.h<br>
+freetype/src/psaux/psaux.c<br>
+freetype/src/psaux/psauxerr.h<br>
+freetype/src/psaux/psauxmod.c<br>
+freetype/src/psaux/psauxmod.h<br>
+freetype/src/psaux/psblues.c<br>
+freetype/src/psaux/psblues.h<br>
+freetype/src/psaux/psconv.c<br>
+freetype/src/psaux/psconv.h<br>
+freetype/src/psaux/pserror.c<br>
+freetype/src/psaux/pserror.h<br>
+freetype/src/psaux/psfixed.h<br>
+freetype/src/psaux/psfont.c<br>
+freetype/src/psaux/psfont.h<br>
+freetype/src/psaux/psft.c<br>
+freetype/src/psaux/psft.h<br>
+freetype/src/psaux/psglue.h<br>
+freetype/src/psaux/pshints.c<br>
+freetype/src/psaux/pshints.h<br>
+freetype/src/psaux/psintrp.c<br>
+freetype/src/psaux/psintrp.h<br>
+freetype/src/psaux/psobjs.c<br>
+freetype/src/psaux/psobjs.h<br>
+freetype/src/psaux/psread.c<br>
+freetype/src/psaux/psread.h<br>
+freetype/src/psaux/psstack.c<br>
+freetype/src/psaux/psstack.h<br>
+freetype/src/psaux/pstypes.h<br>
+freetype/src/psaux/rules.mk<br>
+freetype/src/psaux/t1cmap.c<br>
+freetype/src/psaux/t1cmap.h<br>
+freetype/src/psaux/t1decode.c<br>
+freetype/src/psaux/t1decode.h<br>
+freetype/src/pshinter/Jamfile<br>
+freetype/src/pshinter/module.mk<br>
+freetype/src/pshinter/pshalgo.c<br>
+freetype/src/pshinter/pshalgo.h<br>
+freetype/src/pshinter/pshglob.c<br>
+freetype/src/pshinter/pshglob.h<br>
+freetype/src/pshinter/pshinter.c<br>
+freetype/src/pshinter/pshmod.c<br>
+freetype/src/pshinter/pshmod.h<br>
+freetype/src/pshinter/pshnterr.h<br>
+freetype/src/pshinter/pshpic.c<br>
+freetype/src/pshinter/pshpic.h<br>
+freetype/src/pshinter/pshrec.c<br>
+freetype/src/pshinter/pshrec.h<br>
+freetype/src/pshinter/rules.mk<br>
+freetype/src/psnames/Jamfile<br>
+freetype/src/psnames/module.mk<br>
+freetype/src/psnames/psmodule.c<br>
+freetype/src/psnames/psmodule.h<br>
+freetype/src/psnames/psnamerr.h<br>
+freetype/src/psnames/psnames.c<br>
+freetype/src/psnames/pspic.c<br>
+freetype/src/psnames/pspic.h<br>
+freetype/src/psnames/pstables.h<br>
+freetype/src/psnames/rules.mk<br>
+freetype/src/raster/Jamfile<br>
+freetype/src/raster/ftmisc.h<br>
+freetype/src/raster/ftraster.c<br>
+freetype/src/raster/ftraster.h<br>
+freetype/src/raster/ftrend1.c<br>
+freetype/src/raster/ftrend1.h<br>
+freetype/src/raster/module.mk<br>
+freetype/src/raster/raster.c<br>
+freetype/src/raster/rasterrs.h<br>
+freetype/src/raster/rastpic.c<br>
+freetype/src/raster/rastpic.h<br>
+freetype/src/raster/rules.mk<br>
+freetype/src/sfnt/Jamfile<br>
+freetype/src/sfnt/module.mk<br>
+freetype/src/sfnt/pngshim.c<br>
+freetype/src/sfnt/pngshim.h<br>
+freetype/src/sfnt/rules.mk<br>
+freetype/src/sfnt/sfdriver.c<br>
+freetype/src/sfnt/sfdriver.h<br>
+freetype/src/sfnt/sferrors.h<br>
+freetype/src/sfnt/sfnt.c<br>
+freetype/src/sfnt/sfntpic.c<br>
+freetype/src/sfnt/sfntpic.h<br>
+freetype/src/sfnt/sfobjs.c<br>
+freetype/src/sfnt/sfobjs.h<br>
+freetype/src/sfnt/sfwoff.c<br>
+freetype/src/sfnt/sfwoff.h<br>
+freetype/src/sfnt/ttbdf.c<br>
+freetype/src/sfnt/ttbdf.h<br>
+freetype/src/sfnt/ttcmap.c<br>
+freetype/src/sfnt/ttcmap.h<br>
+freetype/src/sfnt/ttcmapc.h<br>
+freetype/src/sfnt/ttcolr.c<br>
+freetype/src/sfnt/ttcolr.h<br>
+freetype/src/sfnt/ttcpal.c<br>
+freetype/src/sfnt/ttcpal.h<br>
+freetype/src/sfnt/ttkern.c<br>
+freetype/src/sfnt/ttkern.h<br>
+freetype/src/sfnt/ttload.c<br>
+freetype/src/sfnt/ttload.h<br>
+freetype/src/sfnt/ttmtx.c<br>
+freetype/src/sfnt/ttmtx.h<br>
+freetype/src/sfnt/ttpost.c<br>
+freetype/src/sfnt/ttpost.h<br>
+freetype/src/sfnt/ttsbit.c<br>
+freetype/src/sfnt/ttsbit.h<br>
+freetype/src/smooth/Jamfile<br>
+freetype/src/smooth/ftgrays.c<br>
+freetype/src/smooth/ftgrays.h<br>
+freetype/src/smooth/ftsmerrs.h<br>
+freetype/src/smooth/ftsmooth.c<br>
+freetype/src/smooth/ftsmooth.h<br>
+freetype/src/smooth/ftspic.c<br>
+freetype/src/smooth/ftspic.h<br>
+freetype/src/smooth/module.mk<br>
+freetype/src/smooth/rules.mk<br>
+freetype/src/smooth/smooth.c<br>
+freetype/src/tools/afblue.pl<br>
+freetype/src/tools/apinames.c<br>
+freetype/src/tools/docmaker/content.py<br>
+freetype/src/tools/docmaker/docbeauty.py<br>
+freetype/src/tools/docmaker/docmaker.py<br>
+freetype/src/tools/docmaker/formatter.py<br>
+freetype/src/tools/docmaker/sources.py<br>
+freetype/src/tools/docmaker/tohtml.py<br>
+freetype/src/tools/docmaker/utils.py<br>
+freetype/src/tools/ftfuzzer/README<br>
+freetype/src/tools/ftfuzzer/ftfuzzer.cc<br>
+freetype/src/tools/ftfuzzer/ftmutator.cc<br>
+freetype/src/tools/ftfuzzer/rasterfuzzer.cc<br>
+freetype/src/tools/ftfuzzer/runinput.cc<br>
+freetype/src/tools/glnames.py<br>
+freetype/src/tools/update-copyright-year<br>
+freetype/src/truetype/Jamfile<br>
+freetype/src/truetype/module.mk<br>
+freetype/src/truetype/rules.mk<br>
+freetype/src/truetype/truetype.c<br>
+freetype/src/truetype/ttdriver.c<br>
+freetype/src/truetype/ttdriver.h<br>
+freetype/src/truetype/tterrors.h<br>
+freetype/src/truetype/ttgload.c<br>
+freetype/src/truetype/ttgload.h<br>
+freetype/src/truetype/ttgxvar.c<br>
+freetype/src/truetype/ttgxvar.h<br>
+freetype/src/truetype/ttinterp.c<br>
+freetype/src/truetype/ttinterp.h<br>
+freetype/src/truetype/ttobjs.c<br>
+freetype/src/truetype/ttobjs.h<br>
+freetype/src/truetype/ttpic.c<br>
+freetype/src/truetype/ttpic.h<br>
+freetype/src/truetype/ttpload.c<br>
+freetype/src/truetype/ttpload.h<br>
+freetype/src/truetype/ttsubpix.c<br>
+freetype/src/truetype/ttsubpix.h<br>
+freetype/src/type1/Jamfile<br>
+freetype/src/type1/module.mk<br>
+freetype/src/type1/rules.mk<br>
+freetype/src/type1/t1afm.c<br>
+freetype/src/type1/t1afm.h<br>
+freetype/src/type1/t1driver.c<br>
+freetype/src/type1/t1driver.h<br>
+freetype/src/type1/t1errors.h<br>
+freetype/src/type1/t1gload.c<br>
+freetype/src/type1/t1gload.h<br>
+freetype/src/type1/t1load.c<br>
+freetype/src/type1/t1load.h<br>
+freetype/src/type1/t1objs.c<br>
+freetype/src/type1/t1objs.h<br>
+freetype/src/type1/t1parse.c<br>
+freetype/src/type1/t1parse.h<br>
+freetype/src/type1/t1tokens.h<br>
+freetype/src/type1/type1.c<br>
+freetype/src/type42/Jamfile<br>
+freetype/src/type42/module.mk<br>
+freetype/src/type42/rules.mk<br>
+freetype/src/type42/t42drivr.c<br>
+freetype/src/type42/t42drivr.h<br>
+freetype/src/type42/t42error.h<br>
+freetype/src/type42/t42objs.c<br>
+freetype/src/type42/t42objs.h<br>
+freetype/src/type42/t42parse.c<br>
+freetype/src/type42/t42parse.h<br>
+freetype/src/type42/t42types.h<br>
+freetype/src/type42/type42.c<br>
+freetype/src/winfonts/Jamfile<br>
+freetype/src/winfonts/fnterrs.h<br>
+freetype/src/winfonts/module.mk<br>
+freetype/src/winfonts/rules.mk<br>
+freetype/src/winfonts/winfnt.c<br>
+freetype/src/winfonts/winfnt.h<br>
+freetype/vms_make.com<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 17:45:08 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=36cbd382b160ee4951d1911f85a4fa0723dd8db3">36cbd382b160ee4951d1911f85a4fa0723dd8db3</a>
+<blockquote>
+<p>
+ Update openjpeg to 2.3.1<br>
+<br>
+openjpeg/.gitignore<br>
+openjpeg/.travis.yml<br>
+openjpeg/CHANGELOG.md<br>
+openjpeg/INSTALL.md<br>
+openjpeg/NEWS.md<br>
+openjpeg/appveyor.yml<br>
+openjpeg/doc/Doxyfile.dox.cmake.in<br>
+openjpeg/src/bin/CMakeLists.txt<br>
+openjpeg/src/bin/common/CMakeLists.txt<br>
+openjpeg/src/bin/common/color.c<br>
+openjpeg/src/bin/common/color.h<br>
+openjpeg/src/bin/common/format_defs.h<br>
+openjpeg/src/bin/common/opj_apps_config.h.cmake.in<br>
+openjpeg/src/bin/common/opj_getopt.c<br>
+openjpeg/src/bin/common/opj_getopt.h<br>
+openjpeg/src/bin/common/opj_string.h<br>
+openjpeg/src/bin/jp2/CMakeLists.txt<br>
+openjpeg/src/bin/jp2/convert.c<br>
+openjpeg/src/bin/jp2/convert.h<br>
+openjpeg/src/bin/jp2/convertbmp.c<br>
+openjpeg/src/bin/jp2/convertpng.c<br>
+openjpeg/src/bin/jp2/converttif.c<br>
+openjpeg/src/bin/jp2/index.c<br>
+openjpeg/src/bin/jp2/index.h<br>
+openjpeg/src/bin/jp2/opj_compress.c<br>
+openjpeg/src/bin/jp2/opj_decompress.c<br>
+openjpeg/src/bin/jp2/opj_dump.c<br>
+openjpeg/src/bin/jp2/windirent.h<br>
+openjpeg/src/bin/jp3d/CMakeLists.txt<br>
+openjpeg/src/bin/jp3d/convert.c<br>
+openjpeg/src/bin/jp3d/convert.h<br>
+openjpeg/src/bin/jp3d/getopt.c<br>
+openjpeg/src/bin/jp3d/getopt.h<br>
+openjpeg/src/bin/jp3d/opj_jp3d_compress.c<br>
+openjpeg/src/bin/jp3d/opj_jp3d_decompress.c<br>
+openjpeg/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl<br>
+openjpeg/src/bin/jp3d/tcltk/README<br>
+openjpeg/src/bin/jp3d/tcltk/Thumbs.db<br>
+openjpeg/src/bin/jp3d/tcltk/decoder.tcl<br>
+openjpeg/src/bin/jp3d/tcltk/encoder.tcl<br>
+openjpeg/src/bin/jp3d/tcltk/logoLPI.gif<br>
+openjpeg/src/bin/jp3d/windirent.h<br>
+openjpeg/src/bin/jpip/CMakeLists.txt<br>
+openjpeg/src/bin/jpip/README<br>
+openjpeg/src/bin/jpip/opj_dec_server.c<br>
+openjpeg/src/bin/jpip/opj_jpip_addxml.c<br>
+openjpeg/src/bin/jpip/opj_jpip_test.c<br>
+openjpeg/src/bin/jpip/opj_jpip_transcode.c<br>
+openjpeg/src/bin/jpip/opj_server.c<br>
+openjpeg/src/bin/jpip/opj_viewer/dist/manifest.txt<br>
+openjpeg/src/bin/jpip/opj_viewer/src/ImageManager.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/ImageViewer.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/ImageWindow.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/ImgdecClient.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/JPIPHttpClient.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/MML.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/PnmImage.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/RegimViewer.java<br>
+openjpeg/src/bin/jpip/opj_viewer/src/ResizeListener.java<br>
+openjpeg/src/bin/jpip/opj_viewer_xerces/dist/manifest.txt.in<br>
+openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageViewer.java<br>
+openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageWindow.java<br>
+openjpeg/src/bin/jpip/opj_viewer_xerces/src/JP2XMLparser.java<br>
+openjpeg/src/bin/jpip/opj_viewer_xerces/src/OptionPanel.java<br>
+openjpeg/src/bin/jpwl/CMakeLists.txt<br>
+openjpeg/src/bin/jpwl/convert.c<br>
+openjpeg/src/bin/jpwl/convert.h<br>
+openjpeg/src/bin/jpwl/index.c<br>
+openjpeg/src/bin/jpwl/index.h<br>
+openjpeg/src/bin/jpwl/opj_jpwl_compress.c<br>
+openjpeg/src/bin/jpwl/opj_jpwl_decompress.c<br>
+openjpeg/src/bin/jpwl/windirent.h<br>
+openjpeg/src/bin/mj2/CMakeLists.txt<br>
+openjpeg/src/bin/mj2/meta_out.c<br>
+openjpeg/src/bin/mj2/meta_out.h<br>
+openjpeg/src/bin/mj2/mj2_to_metadata.c<br>
+openjpeg/src/bin/mj2/mj2_to_metadata.dtd<br>
+openjpeg/src/bin/mj2/mj2_to_metadata.h<br>
+openjpeg/src/bin/mj2/mj2_to_metadata.sln<br>
+openjpeg/src/bin/mj2/mj2_to_metadata.vcproj<br>
+openjpeg/src/bin/mj2/mj2_to_metadata_Notes.doc<br>
+openjpeg/src/bin/mj2/opj_mj2_compress.c<br>
+openjpeg/src/bin/mj2/opj_mj2_decompress.c<br>
+openjpeg/src/bin/mj2/opj_mj2_extract.c<br>
+openjpeg/src/bin/mj2/opj_mj2_wrap.c<br>
+openjpeg/src/bin/mj2/readme.txt<br>
+openjpeg/src/bin/wx/CMakeLists.txt<br>
+openjpeg/src/bin/wx/OPJViewer/CMakeLists.txt<br>
+openjpeg/src/bin/wx/OPJViewer/OPJViewer.iss<br>
+openjpeg/src/bin/wx/OPJViewer/Readme.txt<br>
+openjpeg/src/bin/wx/OPJViewer/about/about.htm<br>
+openjpeg/src/bin/wx/OPJViewer/about/opj_logo.png<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJAbout.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJChild.ico<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJChild16.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJDialogs.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJThreads.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.h<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.ico<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.rc<br>
+openjpeg/src/bin/wx/OPJViewer/source/OPJViewer16.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/about_htm.h<br>
+openjpeg/src/bin/wx/OPJViewer/source/build.h<br>
+openjpeg/src/bin/wx/OPJViewer/source/icon1.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/icon2.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/icon3.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/icon4.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/icon5.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.h<br>
+openjpeg/src/bin/wx/OPJViewer/source/imagmxf.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/imagmxf.h<br>
+openjpeg/src/bin/wx/OPJViewer/source/license.txt<br>
+openjpeg/src/bin/wx/OPJViewer/source/opj_logo.xpm<br>
+openjpeg/src/bin/wx/OPJViewer/source/readmeafter.txt<br>
+openjpeg/src/bin/wx/OPJViewer/source/readmebefore.txt<br>
+openjpeg/src/bin/wx/OPJViewer/source/wxj2kparser.cpp<br>
+openjpeg/src/bin/wx/OPJViewer/source/wxjp2parser.cpp<br>
+openjpeg/src/lib/CMakeLists.txt<br>
+openjpeg/src/lib/openjp2/CMakeLists.txt<br>
+openjpeg/src/lib/openjp2/bench_dwt.c<br>
+openjpeg/src/lib/openjp2/dwt.c<br>
+openjpeg/src/lib/openjp2/image.c<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+openjpeg/src/lib/openjp2/jp2.c<br>
+openjpeg/src/lib/openjp2/openjpeg.h<br>
+openjpeg/src/lib/openjp2/opj_intmath.h<br>
+openjpeg/src/lib/openjp2/pi.c<br>
+openjpeg/src/lib/openjp2/t1.c<br>
+openjpeg/src/lib/openjp2/t2.c<br>
+openjpeg/src/lib/openjp2/tcd.c<br>
+openjpeg/src/lib/openjp2/thread.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 13:19:03 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=107babf6d3652ed9bcf26b20823ac935ba86634b">107babf6d3652ed9bcf26b20823ac935ba86634b</a>
+<blockquote>
+<p>
+ Update expat to 2.2.9<br>
+<br>
+ And small makefile tweak to support it.<br>
+<br>
+base/expat.mak<br>
+expat/CMake.README<br>
+expat/CMakeLists.txt<br>
+expat/Changes<br>
+expat/ConfigureChecks.cmake<br>
+expat/Makefile.am<br>
+expat/Makefile.in<br>
+expat/README.md<br>
+expat/acinclude.m4<br>
+expat/aclocal.m4<br>
+expat/cmake/expat-config.cmake.in<br>
+expat/cmake/mingw-toolchain.cmake<br>
+expat/configure<br>
+expat/configure.ac<br>
+expat/conftools/ac_c_bigendian_cross.m4<br>
+expat/conftools/ar-lib<br>
+expat/conftools/ax-append-compile-flags.m4<br>
+expat/conftools/ax-append-flag.m4<br>
+expat/conftools/ax-append-link-flags.m4<br>
+expat/conftools/ax-check-compile-flag.m4<br>
+expat/conftools/ax-check-link-flag.m4<br>
+expat/conftools/ax-require-defined.m4<br>
+expat/conftools/config.guess<br>
+expat/conftools/config.sub<br>
+expat/conftools/expatcfg-compiler-supports-visibility.m4<br>
+expat/conftools/install-sh<br>
+expat/conftools/ltmain.sh<br>
+expat/conftools/missing<br>
+expat/doc/Makefile.am<br>
+expat/doc/Makefile.in<br>
+expat/doc/reference.html<br>
+expat/examples/Makefile.in<br>
+expat/examples/elements.c<br>
+expat/examples/elements.vcxproj<br>
+expat/examples/elements.vcxproj.filters<br>
+expat/examples/outline.c<br>
+expat/examples/outline.vcxproj<br>
+expat/examples/outline.vcxproj.filters<br>
+expat/expat.sln<br>
+expat/expat_config.h<br>
+expat/expat_config.h.cmake<br>
+expat/expat_config.h.in<br>
+expat/fix-xmltest-log.sh<br>
+expat/lib/Makefile.am<br>
+expat/lib/Makefile.in<br>
+expat/lib/asciitab.h<br>
+expat/lib/expat.h<br>
+expat/lib/expat.vcxproj<br>
+expat/lib/expat.vcxproj.filters<br>
+expat/lib/expat_external.h<br>
+expat/lib/expat_static.vcxproj<br>
+expat/lib/expat_static.vcxproj.filters<br>
+expat/lib/expatw.vcxproj<br>
+expat/lib/expatw.vcxproj.filters<br>
+expat/lib/expatw_static.vcxproj<br>
+expat/lib/expatw_static.vcxproj.filters<br>
+expat/lib/iasciitab.h<br>
+expat/lib/internal.h<br>
+expat/lib/latin1tab.h<br>
+expat/lib/libexpat.def<br>
+expat/lib/libexpatw.def<br>
+expat/lib/loadlibrary.c<br>
+expat/lib/nametab.h<br>
+expat/lib/siphash.h<br>
+expat/lib/utf8tab.h<br>
+expat/lib/winconfig.h<br>
+expat/lib/xmlparse.c<br>
+expat/lib/xmlrole.c<br>
+expat/lib/xmlrole.h<br>
+expat/lib/xmltok.c<br>
+expat/lib/xmltok.h<br>
+expat/lib/xmltok_impl.c<br>
+expat/lib/xmltok_impl.h<br>
+expat/lib/xmltok_ns.c<br>
+expat/test-driver-wrapper.sh<br>
+expat/tests/Makefile.in<br>
+expat/tests/benchmark/Makefile.in<br>
+expat/tests/benchmark/benchmark.c<br>
+expat/tests/benchmark/benchmark.sln<br>
+expat/tests/benchmark/benchmark.vcxproj<br>
+expat/tests/chardata.c<br>
+expat/tests/chardata.h<br>
+expat/tests/memcheck.c<br>
+expat/tests/memcheck.h<br>
+expat/tests/minicheck.c<br>
+expat/tests/minicheck.h<br>
+expat/tests/runtests.c<br>
+expat/tests/runtests.sln<br>
+expat/tests/runtests.vcxproj<br>
+expat/tests/runtests.vcxproj.filters<br>
+expat/tests/structdata.c<br>
+expat/tests/structdata.h<br>
+expat/tests/xmltest.sh<br>
+expat/win32/README.txt<br>
+expat/win32/build_expat_iss.bat<br>
+expat/win32/expat.iss<br>
+expat/xmlwf/Makefile.am<br>
+expat/xmlwf/Makefile.in<br>
+expat/xmlwf/codepage.c<br>
+expat/xmlwf/ct.c<br>
+expat/xmlwf/filemap.h<br>
+expat/xmlwf/readfilemap.c<br>
+expat/xmlwf/unixfilemap.c<br>
+expat/xmlwf/win32filemap.c<br>
+expat/xmlwf/xmlfile.c<br>
+expat/xmlwf/xmlfile.h<br>
+expat/xmlwf/xmlmime.c<br>
+expat/xmlwf/xmltchar.h<br>
+expat/xmlwf/xmlurl.h<br>
+expat/xmlwf/xmlwf.c<br>
+expat/xmlwf/xmlwf.vcxproj<br>
+expat/xmlwf/xmlwf.vcxproj.filters<br>
+expat/xmlwf/xmlwf_helpgen.py<br>
+expat/xmlwf/xmlwf_helpgen.sh<br>
+expat/xmlwf/xmlwin32url.cxx<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 13:13:11 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f25387684b5df27653e7f89a67e04d6151b92d02">f25387684b5df27653e7f89a67e04d6151b92d02</a>
+<blockquote>
+<p>
+ Update libpng to 1.6.37<br>
+<br>
+base/png.mak<br>
+libpng/ANNOUNCE<br>
+libpng/AUTHORS<br>
+libpng/CHANGES<br>
+libpng/CMakeLists.txt<br>
+libpng/INSTALL<br>
+libpng/LICENSE<br>
+libpng/Makefile.am<br>
+libpng/Makefile.in<br>
+libpng/README<br>
+libpng/TODO<br>
+libpng/TRADEMARK<br>
+libpng/aclocal.m4<br>
+libpng/arm/arm_init.c<br>
+libpng/arm/filter_neon.S<br>
+libpng/arm/filter_neon_intrinsics.c<br>
+libpng/arm/palette_neon_intrinsics.c<br>
+libpng/autogen.sh<br>
+libpng/compile<br>
+libpng/config.guess<br>
+libpng/config.h.in<br>
+libpng/config.sub<br>
+libpng/configure<br>
+libpng/configure.ac<br>
+libpng/contrib/conftest/pngcp.dfa<br>
+libpng/contrib/examples/iccfrompng.c<br>
+libpng/contrib/examples/pngpixel.c<br>
+libpng/contrib/gregbook/readpng2.c<br>
+libpng/contrib/libtests/makepng.c<br>
+libpng/contrib/libtests/pngimage.c<br>
+libpng/contrib/libtests/pngstest.c<br>
+libpng/contrib/libtests/pngunknown.c<br>
+libpng/contrib/libtests/pngvalid.c<br>
+libpng/contrib/libtests/readpng.c<br>
+libpng/contrib/libtests/tarith.c<br>
+libpng/contrib/libtests/timepng.c<br>
+libpng/contrib/oss-fuzz/Dockerfile<br>
+libpng/contrib/oss-fuzz/README.txt<br>
+libpng/contrib/oss-fuzz/build.sh<br>
+libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc<br>
+libpng/contrib/oss-fuzz/newcc<br>
+libpng/contrib/pngminus/CHANGES.txt<br>
+libpng/contrib/pngminus/CMakeLists.txt<br>
+libpng/contrib/pngminus/LICENSE.txt<br>
+libpng/contrib/pngminus/Makefile<br>
+libpng/contrib/pngminus/README.txt<br>
+libpng/contrib/pngminus/makefile.std<br>
+libpng/contrib/pngminus/makefile.tc3<br>
+libpng/contrib/pngminus/png2pnm.bat<br>
+libpng/contrib/pngminus/png2pnm.c<br>
+libpng/contrib/pngminus/png2pnm.sh<br>
+libpng/contrib/pngminus/pngminus.bat<br>
+libpng/contrib/pngminus/pngminus.sh<br>
+libpng/contrib/pngminus/pnm2png.bat<br>
+libpng/contrib/pngminus/pnm2png.c<br>
+libpng/contrib/pngminus/pnm2png.sh<br>
+libpng/contrib/pngsuite/README<br>
+libpng/contrib/pngsuite/bad_interlace_conversions.txt<br>
+libpng/contrib/pngsuite/ibasn0g08.png<br>
+libpng/contrib/pngsuite/ibasn0g16.png<br>
+libpng/contrib/pngsuite/ibasn2c08.png<br>
+libpng/contrib/pngsuite/ibasn2c16.png<br>
+libpng/contrib/pngsuite/ibasn3p08.png<br>
+libpng/contrib/pngsuite/ibasn4a08.png<br>
+libpng/contrib/pngsuite/ibasn4a16.png<br>
+libpng/contrib/pngsuite/ibasn6a08.png<br>
+libpng/contrib/pngsuite/ibasn6a16.png<br>
+libpng/contrib/pngsuite/iftbbn2c16.png<br>
+libpng/contrib/pngsuite/iftbbn3p08.png<br>
+libpng/contrib/pngsuite/iftbgn2c16.png<br>
+libpng/contrib/pngsuite/iftbgn3p08.png<br>
+libpng/contrib/pngsuite/iftbrn2c08.png<br>
+libpng/contrib/pngsuite/iftbwn0g16.png<br>
+libpng/contrib/pngsuite/iftbwn3p08.png<br>
+libpng/contrib/pngsuite/iftbyn3p08.png<br>
+libpng/contrib/pngsuite/iftp0n0g08.png<br>
+libpng/contrib/pngsuite/iftp0n2c08.png<br>
+libpng/contrib/pngsuite/iftp0n3p08.png<br>
+libpng/contrib/pngsuite/iftp1n3p08.png<br>
+libpng/contrib/pngsuite/interlaced/README<br>
+libpng/contrib/pngsuite/interlaced/ibasn0g01.png<br>
+libpng/contrib/pngsuite/interlaced/ibasn0g02.png<br>
+libpng/contrib/pngsuite/interlaced/ibasn0g04.png<br>
+libpng/contrib/pngsuite/interlaced/ibasn3p01.png<br>
+libpng/contrib/pngsuite/interlaced/ibasn3p02.png<br>
+libpng/contrib/pngsuite/interlaced/ibasn3p04.png<br>
+libpng/contrib/pngsuite/interlaced/iftbbn0g01.png<br>
+libpng/contrib/pngsuite/interlaced/iftbbn0g02.png<br>
+libpng/contrib/pngsuite/interlaced/iftbbn0g04.png<br>
+libpng/contrib/powerpc-vsx/README<br>
+libpng/contrib/powerpc-vsx/linux_aux.c<br>
+libpng/contrib/testpngs/makepngs.sh<br>
+libpng/contrib/tools/chkfmt<br>
+libpng/contrib/tools/makesRGB.c<br>
+libpng/contrib/tools/pngcp.c<br>
+libpng/contrib/tools/pngfix.c<br>
+libpng/contrib/visupng/PngFile.c<br>
+libpng/contrib/visupng/PngFile.h<br>
+libpng/contrib/visupng/VisualPng.c<br>
+libpng/depcomp<br>
+libpng/example.c<br>
+libpng/install-sh<br>
+libpng/intel/filter_sse2_intrinsics.c<br>
+libpng/intel/intel_init.c<br>
+libpng/libpng-manual.txt<br>
+libpng/libpng.3<br>
+libpng/libpngpf.3<br>
+libpng/mips/filter_msa_intrinsics.c<br>
+libpng/mips/mips_init.c<br>
+libpng/missing<br>
+libpng/png.5<br>
+libpng/png.c<br>
+libpng/png.h<br>
+libpng/pngconf.h<br>
+libpng/pngdebug.h<br>
+libpng/pngerror.c<br>
+libpng/pngget.c<br>
+libpng/pnginfo.h<br>
+libpng/pngmem.c<br>
+libpng/pngpread.c<br>
+libpng/pngpriv.h<br>
+libpng/pngread.c<br>
+libpng/pngrio.c<br>
+libpng/pngrtran.c<br>
+libpng/pngrutil.c<br>
+libpng/pngset.c<br>
+libpng/pngstruct.h<br>
+libpng/pngtest.c<br>
+libpng/pngtrans.c<br>
+libpng/pngwio.c<br>
+libpng/pngwrite.c<br>
+libpng/pngwtran.c<br>
+libpng/pngwutil.c<br>
+libpng/powerpc/filter_vsx_intrinsics.c<br>
+libpng/powerpc/powerpc_init.c<br>
+libpng/projects/owatcom/pngconfig.mak<br>
+libpng/projects/visualc71/README.txt<br>
+libpng/projects/vstudio/README.txt<br>
+libpng/projects/vstudio/zlib.props<br>
+libpng/scripts/README.txt<br>
+libpng/scripts/def.c<br>
+libpng/scripts/descrip.mms<br>
+libpng/scripts/libpng-config-head.in<br>
+libpng/scripts/libpng.pc.in<br>
+libpng/scripts/makefile.32sunu<br>
+libpng/scripts/makefile.64sunu<br>
+libpng/scripts/makefile.bor<br>
+libpng/scripts/makefile.cegcc<br>
+libpng/scripts/makefile.clang<br>
+libpng/scripts/makefile.clang-asan<br>
+libpng/scripts/makefile.darwin<br>
+libpng/scripts/makefile.freebsd<br>
+libpng/scripts/makefile.gcc<br>
+libpng/scripts/makefile.gcc-asan<br>
+libpng/scripts/makefile.hp64<br>
+libpng/scripts/makefile.hpgcc<br>
+libpng/scripts/makefile.hpux<br>
+libpng/scripts/makefile.knr<br>
+libpng/scripts/makefile.linux<br>
+libpng/scripts/makefile.linux-opt<br>
+libpng/scripts/makefile.mips<br>
+libpng/scripts/makefile.msc<br>
+libpng/scripts/makefile.msys<br>
+libpng/scripts/makefile.ne12bsd<br>
+libpng/scripts/makefile.netbsd<br>
+libpng/scripts/makefile.openbsd<br>
+libpng/scripts/makefile.sco<br>
+libpng/scripts/makefile.sggcc<br>
+libpng/scripts/makefile.sgi<br>
+libpng/scripts/makefile.so9<br>
+libpng/scripts/makefile.solaris<br>
+libpng/scripts/makefile.solaris-x86<br>
+libpng/scripts/makefile.std<br>
+libpng/scripts/makefile.sunos<br>
+libpng/scripts/makefile.tc3<br>
+libpng/scripts/options.awk<br>
+libpng/scripts/pnglibconf.dfa<br>
+libpng/scripts/pnglibconf.h.prebuilt<br>
+libpng/scripts/symbols.def<br>
+libpng/test-driver<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-26 12:13:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9282c39e6150befd80793b3221864c9f1f814b66">9282c39e6150befd80793b3221864c9f1f814b66</a>
+<blockquote>
+<p>
+ Update libtiff to 4.1.0<br>
+<br>
+ Add in portability changes to tiffiop.h<br>
+<br>
+ Portability tiffiop.h<br>
+<br>
+ Remove globals from tif_pixarlog.c<br>
+<br>
+tiff/CMakeLists.txt<br>
+tiff/ChangeLog<br>
+tiff/HOWTO-RELEASE<br>
+tiff/Makefile.am<br>
+tiff/Makefile.in<br>
+tiff/Makefile.vc<br>
+tiff/README.md<br>
+tiff/README.vms<br>
+tiff/RELEASE-DATE<br>
+tiff/SConstruct<br>
+tiff/TODO<br>
+tiff/VERSION<br>
+tiff/aclocal.m4<br>
+tiff/build/Makefile.in<br>
+tiff/config/compile<br>
+tiff/config/config.guess<br>
+tiff/config/config.sub<br>
+tiff/config/depcomp<br>
+tiff/config/install-sh<br>
+tiff/config/ltmain.sh<br>
+tiff/config/missing<br>
+tiff/config/mkinstalldirs<br>
+tiff/config/test-driver<br>
+tiff/configure<br>
+tiff/configure.ac<br>
+tiff/configure.com<br>
+tiff/contrib/Makefile.in<br>
+tiff/contrib/addtiffo/Makefile.in<br>
+tiff/contrib/addtiffo/addtiffo.c<br>
+tiff/contrib/addtiffo/tif_overview.c<br>
+tiff/contrib/addtiffo/tif_ovrcache.c<br>
+tiff/contrib/dbs/Makefile.in<br>
+tiff/contrib/dbs/tiff-bi.c<br>
+tiff/contrib/dbs/tiff-grayscale.c<br>
+tiff/contrib/dbs/tiff-palette.c<br>
+tiff/contrib/dbs/tiff-rgb.c<br>
+tiff/contrib/dbs/xtiff/Makefile.in<br>
+tiff/contrib/dbs/xtiff/xtiff.c<br>
+tiff/contrib/iptcutil/Makefile.in<br>
+tiff/contrib/iptcutil/iptcutil.c<br>
+tiff/contrib/mfs/Makefile.in<br>
+tiff/contrib/pds/Makefile.in<br>
+tiff/contrib/pds/README<br>
+tiff/contrib/pds/tif_imageiter.c<br>
+tiff/contrib/pds/tif_imageiter.h<br>
+tiff/contrib/pds/tif_pdsdirread.c<br>
+tiff/contrib/pds/tif_pdsdirwrite.c<br>
+tiff/contrib/ras/Makefile.in<br>
+tiff/contrib/ras/tif2ras.c<br>
+tiff/contrib/stream/Makefile.in<br>
+tiff/contrib/tags/Makefile.in<br>
+tiff/contrib/tags/README<br>
+tiff/contrib/tags/xtif_dir.c<br>
+tiff/contrib/win_dib/Makefile.in<br>
+tiff/contrib/win_dib/Makefile.w95<br>
+tiff/contrib/win_dib/README.tiff2dib<br>
+tiff/contrib/win_dib/Tiffile.cpp<br>
+tiff/html/Makefile.am<br>
+tiff/html/Makefile.in<br>
+tiff/html/addingtags.html<br>
+tiff/html/bugs.html<br>
+tiff/html/build.html<br>
+tiff/html/document.html<br>
+tiff/html/images.html<br>
+tiff/html/images/Makefile.in<br>
+tiff/html/index.html<br>
+tiff/html/libtiff.html<br>
+tiff/html/man/Makefile.in<br>
+tiff/html/man/TIFFReadDirectory.3tiff.html<br>
+tiff/html/man/TIFFWriteDirectory.3tiff.html<br>
+tiff/html/man/TIFFmemory.3tiff.html<br>
+tiff/html/v3.4beta007.html<br>
+tiff/html/v3.4beta016.html<br>
+tiff/html/v3.4beta018.html<br>
+tiff/html/v3.4beta024.html<br>
+tiff/html/v3.4beta028.html<br>
+tiff/html/v3.4beta029.html<br>
+tiff/html/v3.4beta031.html<br>
+tiff/html/v3.4beta032.html<br>
+tiff/html/v3.4beta033.html<br>
+tiff/html/v3.4beta034.html<br>
+tiff/html/v3.4beta035.html<br>
+tiff/html/v3.4beta036.html<br>
+tiff/html/v3.5.1.html<br>
+tiff/html/v3.5.2.html<br>
+tiff/html/v3.5.3.html<br>
+tiff/html/v3.5.4.html<br>
+tiff/html/v3.5.5.html<br>
+tiff/html/v3.5.6-beta.html<br>
+tiff/html/v3.5.7.html<br>
+tiff/html/v3.6.0.html<br>
+tiff/html/v3.6.1.html<br>
+tiff/html/v3.7.0.html<br>
+tiff/html/v3.7.0alpha.html<br>
+tiff/html/v3.7.0beta.html<br>
+tiff/html/v3.7.0beta2.html<br>
+tiff/html/v3.7.1.html<br>
+tiff/html/v3.7.2.html<br>
+tiff/html/v3.7.3.html<br>
+tiff/html/v3.7.4.html<br>
+tiff/html/v3.8.0.html<br>
+tiff/html/v3.8.1.html<br>
+tiff/html/v3.8.2.html<br>
+tiff/html/v3.9.0beta.html<br>
+tiff/html/v3.9.1.html<br>
+tiff/html/v3.9.2.html<br>
+tiff/html/v4.0.0.html<br>
+tiff/html/v4.0.1.html<br>
+tiff/html/v4.0.10.html<br>
+tiff/html/v4.0.2.html<br>
+tiff/html/v4.0.3.html<br>
+tiff/html/v4.0.4.html<br>
+tiff/html/v4.0.4beta.html<br>
+tiff/html/v4.0.5.html<br>
+tiff/html/v4.0.6.html<br>
+tiff/html/v4.0.7.html<br>
+tiff/html/v4.0.8.html<br>
+tiff/html/v4.0.9.html<br>
+tiff/html/v4.1.0.html<br>
+tiff/libtiff/CMakeLists.txt<br>
+tiff/libtiff/Makefile.am<br>
+tiff/libtiff/Makefile.in<br>
+tiff/libtiff/Makefile.vc<br>
+tiff/libtiff/SConstruct<br>
+tiff/libtiff/libtiff.def<br>
+tiff/libtiff/mkg3states.c<br>
+tiff/libtiff/t4.h<br>
+tiff/libtiff/tif_aux.c<br>
+tiff/libtiff/tif_close.c<br>
+tiff/libtiff/tif_codec.c<br>
+tiff/libtiff/tif_color.c<br>
+tiff/libtiff/tif_compress.c<br>
+tiff/libtiff/tif_config.h.cmake.in<br>
+tiff/libtiff/tif_config.h.in<br>
+tiff/libtiff/tif_config.wince.h<br>
+tiff/libtiff/tif_dir.c<br>
+tiff/libtiff/tif_dir.h<br>
+tiff/libtiff/tif_dirinfo.c<br>
+tiff/libtiff/tif_dirread.c<br>
+tiff/libtiff/tif_dirwrite.c<br>
+tiff/libtiff/tif_dumpmode.c<br>
+tiff/libtiff/tif_error.c<br>
+tiff/libtiff/tif_extension.c<br>
+tiff/libtiff/tif_fax3.c<br>
+tiff/libtiff/tif_fax3.h<br>
+tiff/libtiff/tif_flush.c<br>
+tiff/libtiff/tif_getimage.c<br>
+tiff/libtiff/tif_jbig.c<br>
+tiff/libtiff/tif_jpeg.c<br>
+tiff/libtiff/tif_luv.c<br>
+tiff/libtiff/tif_lzma.c<br>
+tiff/libtiff/tif_lzw.c<br>
+tiff/libtiff/tif_next.c<br>
+tiff/libtiff/tif_ojpeg.c<br>
+tiff/libtiff/tif_open.c<br>
+tiff/libtiff/tif_packbits.c<br>
+tiff/libtiff/tif_pixarlog.c<br>
+tiff/libtiff/tif_predict.c<br>
+tiff/libtiff/tif_predict.h<br>
+tiff/libtiff/tif_print.c<br>
+tiff/libtiff/tif_read.c<br>
+tiff/libtiff/tif_stream.cxx<br>
+tiff/libtiff/tif_strip.c<br>
+tiff/libtiff/tif_swab.c<br>
+tiff/libtiff/tif_thunder.c<br>
+tiff/libtiff/tif_tile.c<br>
+tiff/libtiff/tif_unix.c<br>
+tiff/libtiff/tif_version.c<br>
+tiff/libtiff/tif_warning.c<br>
+tiff/libtiff/tif_webp.c<br>
+tiff/libtiff/tif_win32.c<br>
+tiff/libtiff/tif_write.c<br>
+tiff/libtiff/tif_zip.c<br>
+tiff/libtiff/tif_zstd.c<br>
+tiff/libtiff/tiff.h<br>
+tiff/libtiff/tiffconf.h.cmake.in<br>
+tiff/libtiff/tiffconf.h.in<br>
+tiff/libtiff/tiffconf.vc.h<br>
+tiff/libtiff/tiffconf.wince.h<br>
+tiff/libtiff/tiffio.h<br>
+tiff/libtiff/tiffio.hxx<br>
+tiff/libtiff/tiffiop.h<br>
+tiff/libtiff/tiffvers.h<br>
+tiff/m4/libtool.m4<br>
+tiff/man/Makefile.in<br>
+tiff/man/TIFFClose.3tiff<br>
+tiff/man/TIFFDataWidth.3tiff<br>
+tiff/man/TIFFError.3tiff<br>
+tiff/man/TIFFFieldDataType.3tiff<br>
+tiff/man/TIFFFieldName.3tiff<br>
+tiff/man/TIFFFieldPassCount.3tiff<br>
+tiff/man/TIFFFieldReadCount.3tiff<br>
+tiff/man/TIFFFieldTag.3tiff<br>
+tiff/man/TIFFFieldWriteCount.3tiff<br>
+tiff/man/TIFFFlush.3tiff<br>
+tiff/man/TIFFGetField.3tiff<br>
+tiff/man/TIFFOpen.3tiff<br>
+tiff/man/TIFFPrintDirectory.3tiff<br>
+tiff/man/TIFFRGBAImage.3tiff<br>
+tiff/man/TIFFReadDirectory.3tiff<br>
+tiff/man/TIFFReadEncodedStrip.3tiff<br>
+tiff/man/TIFFReadEncodedTile.3tiff<br>
+tiff/man/TIFFReadRGBAImage.3tiff<br>
+tiff/man/TIFFReadRGBAStrip.3tiff<br>
+tiff/man/TIFFReadRGBATile.3tiff<br>
+tiff/man/TIFFReadRawStrip.3tiff<br>
+tiff/man/TIFFReadRawTile.3tiff<br>
+tiff/man/TIFFReadScanline.3tiff<br>
+tiff/man/TIFFReadTile.3tiff<br>
+tiff/man/TIFFSetDirectory.3tiff<br>
+tiff/man/TIFFSetField.3tiff<br>
+tiff/man/TIFFWarning.3tiff<br>
+tiff/man/TIFFWriteDirectory.3tiff<br>
+tiff/man/TIFFWriteEncodedStrip.3tiff<br>
+tiff/man/TIFFWriteEncodedTile.3tiff<br>
+tiff/man/TIFFWriteRawStrip.3tiff<br>
+tiff/man/TIFFWriteRawTile.3tiff<br>
+tiff/man/TIFFWriteScanline.3tiff<br>
+tiff/man/TIFFWriteTile.3tiff<br>
+tiff/man/TIFFbuffer.3tiff<br>
+tiff/man/TIFFcodec.3tiff<br>
+tiff/man/TIFFcolor.3tiff<br>
+tiff/man/TIFFmemory.3tiff<br>
+tiff/man/TIFFquery.3tiff<br>
+tiff/man/TIFFsize.3tiff<br>
+tiff/man/TIFFstrip.3tiff<br>
+tiff/man/TIFFswab.3tiff<br>
+tiff/man/TIFFtile.3tiff<br>
+tiff/man/fax2ps.1<br>
+tiff/man/fax2tiff.1<br>
+tiff/man/libtiff.3tiff<br>
+tiff/man/pal2rgb.1<br>
+tiff/man/ppm2tiff.1<br>
+tiff/man/raw2tiff.1<br>
+tiff/man/tiff2bw.1<br>
+tiff/man/tiff2pdf.1<br>
+tiff/man/tiff2ps.1<br>
+tiff/man/tiff2rgba.1<br>
+tiff/man/tiffcmp.1<br>
+tiff/man/tiffcp.1<br>
+tiff/man/tiffcrop.1<br>
+tiff/man/tiffdither.1<br>
+tiff/man/tiffdump.1<br>
+tiff/man/tiffgt.1<br>
+tiff/man/tiffinfo.1<br>
+tiff/man/tiffmedian.1<br>
+tiff/man/tiffset.1<br>
+tiff/man/tiffsplit.1<br>
+tiff/nmake.opt<br>
+tiff/port/CMakeLists.txt<br>
+tiff/port/Makefile.am<br>
+tiff/port/Makefile.in<br>
+tiff/port/Makefile.vc<br>
+tiff/port/_strtol.h<br>
+tiff/port/_strtoul.h<br>
+tiff/port/dummy.c<br>
+tiff/port/getopt.c<br>
+tiff/port/lfind.c<br>
+tiff/port/libport.h<br>
+tiff/port/snprintf.c<br>
+tiff/port/strcasecmp.c<br>
+tiff/port/strtol.c<br>
+tiff/port/strtoll.c<br>
+tiff/port/strtoul.c<br>
+tiff/port/strtoull.c<br>
+tiff/test/CMakeLists.txt<br>
+tiff/test/Makefile.am<br>
+tiff/test/Makefile.in<br>
+tiff/test/ascii_tag.c<br>
+tiff/test/check_tag.c<br>
+tiff/test/common.sh<br>
+tiff/test/custom_dir.c<br>
+tiff/test/defer_strile_loading.c<br>
+tiff/test/defer_strile_writing.c<br>
+tiff/test/fax2tiff.sh<br>
+tiff/test/images/README.txt<br>
+tiff/test/images/lzw-single-strip.tiff<br>
+tiff/test/images/miniswhite-1c-1b.g3<br>
+tiff/test/long_tag.c<br>
+tiff/test/raw_decode.c<br>
+tiff/test/refs/o-tiff2ps-EPS1.ps<br>
+tiff/test/refs/o-tiff2ps-PS1.ps<br>
+tiff/test/refs/o-tiff2ps-PS2.ps<br>
+tiff/test/refs/o-tiff2ps-PS3.ps<br>
+tiff/test/rewrite_tag.c<br>
+tiff/test/short_tag.c<br>
+tiff/test/strip.c<br>
+tiff/test/strip_rw.c<br>
+tiff/test/test_arrays.c<br>
+tiff/test/test_arrays.h<br>
+tiff/test/testtypes.c<br>
+tiff/test/tiff2ps-EPS1.sh<br>
+tiff/test/tiff2ps-PS1.sh<br>
+tiff/test/tiff2ps-PS2.sh<br>
+tiff/test/tiff2ps-PS3.sh<br>
+tiff/test/tiffcp-lzw-scanline-decode.sh<br>
+tiff/test/tifftest.h<br>
+tiff/tools/CMakeLists.txt<br>
+tiff/tools/Makefile.in<br>
+tiff/tools/Makefile.vc<br>
+tiff/tools/fax2ps.c<br>
+tiff/tools/fax2tiff.c<br>
+tiff/tools/pal2rgb.c<br>
+tiff/tools/ppm2tiff.c<br>
+tiff/tools/raw2tiff.c<br>
+tiff/tools/rgb2ycbcr.c<br>
+tiff/tools/thumbnail.c<br>
+tiff/tools/tiff2bw.c<br>
+tiff/tools/tiff2pdf.c<br>
+tiff/tools/tiff2ps.c<br>
+tiff/tools/tiff2rgba.c<br>
+tiff/tools/tiffcmp.c<br>
+tiff/tools/tiffcp.c<br>
+tiff/tools/tiffcrop.c<br>
+tiff/tools/tiffdither.c<br>
+tiff/tools/tiffdump.c<br>
+tiff/tools/tiffgt.c<br>
+tiff/tools/tiffinfo.c<br>
+tiff/tools/tiffmedian.c<br>
+tiff/tools/tiffset.c<br>
+tiff/tools/tiffsplit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 15:14:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aa13e1a3fac84ada2b676f9c5fcffb30f5df74dd">aa13e1a3fac84ada2b676f9c5fcffb30f5df74dd</a>
+<blockquote>
+<p>
+ Coverity 351088: check for errors in px_begin_error_page().<br>
+<br>
+ Had to change px_begin_error_page()'s API to use out-parameter, so that return<br>
+ value is error code.<br>
+<br>
+pcl/pxl/pxerrors.c<br>
+pcl/pxl/pxerrors.h<br>
+pcl/pxl/pxtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 14:42:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34fc5a7613eea288a8426d3be425c93647954668">34fc5a7613eea288a8426d3be425c93647954668</a>
+<blockquote>
+<p>
+ Coverity 351086: Fix out-of-bounds access to score[2].<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 19:48:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a570a05622cb178c031db64711b412cf640038b2">a570a05622cb178c031db64711b412cf640038b2</a>
+<blockquote>
+<p>
+ Coverity 350201, 350191: Add some notes to the code.<br>
+<br>
+ Coverity spots that pdf14_fill_path checks for ppath being<br>
+ NULL in one branch, hence assumes that it can be NULL in all<br>
+ cases. Furthermore it spots that it is passed into<br>
+ gx_default_fill_path, which can in some circumstances, dereference<br>
+ it without checking it first.<br>
+<br>
+ The reason for this is that fill_path can permissibly be called<br>
+ with a NULL path if we want to fill the given clipping path. This<br>
+ is only used for shadings and patterns, which is exactly the case<br>
+ checked for within gx_default_fill_path and pdf14_fill_path.<br>
+<br>
+ We'll resolve this with a 'false positive' in Coverity, but have<br>
+ added the comments for the benefit of future readers.<br>
+<br>
+ Coverity spots the same thing in pdf14_stroke_path, but there it<br>
+ really makes no sense for ppath to be NULL, so just eliminate the<br>
+ check.<br>
+<br>
+ Credit to Julian Smith for the investigation on this.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 18:30:33 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fee6b609fbb8d1f0744f98ee3bf930c1fd733660">fee6b609fbb8d1f0744f98ee3bf930c1fd733660</a>
+<blockquote>
+<p>
+ Fix indeterminism in gdevp201.c<br>
+<br>
+ The printers herein read 1bpp data from gs, and then compressed<br>
+ in terms of bytes. For the case where w%8 != 0, we'd have<br>
+ uninitialised bits. Solve this by masking the last byte of each<br>
+ line as appropriate.<br>
+<br>
+ Also, ensure that we don't 'overread' lines, check the return<br>
+ code from the get_bits call, and blank any lines of the buffer<br>
+ required to bring us up to a multiple of the stripe height.<br>
+<br>
+contrib/japanese/gdevp201.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 09:44:29 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f3b0a9e346a97b23f1f7e016944be514c8b0ec78">f3b0a9e346a97b23f1f7e016944be514c8b0ec78</a>
+<blockquote>
+<p>
+ Fix indeterminism in gdevatx.c<br>
+<br>
+ The compression used by this device relies on compressing pairs of<br>
+ bytes; as such we have to be careful that when we offset to the end<br>
+ of the line we don't move inot uninitialised data.<br>
+<br>
+ We fix this here by blanking an extra byte, and being smarter about<br>
+ where we start the search for trailing empties from.<br>
+<br>
+ This should resolve the differences we see in the all-devs test.<br>
+<br>
+devices/gdevatx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 16:12:17 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8a589c19d62884388cb9eff7d12bfba568e667ca">8a589c19d62884388cb9eff7d12bfba568e667ca</a>
+<blockquote>
+<p>
+ Fix incorrect transform in gpdl/pwgtop.c<br>
+<br>
+gpdl/pwgtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 19:43:46 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79e11b98dc078fcd92cda588ab6157a4aa14d0f0">79e11b98dc078fcd92cda588ab6157a4aa14d0f0</a>
+<blockquote>
+<p>
+ Add Jpeg2000 &quot;language&quot; interpreter for gpdl.<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/jp2ktop.c<br>
+pcl/pl/plimpl.c<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 15:59:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=113792dd347ac7b9436b9517aca91e1153fb230d">113792dd347ac7b9436b9517aca91e1153fb230d</a>
+<blockquote>
+<p>
+ Ensure oki4w device properly closes device.<br>
+<br>
+ This was causing indetermisms in cluster runs.<br>
+<br>
+contrib/gdevop4w.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 14:50:05 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=12eef95ef9ed7a086ca02f06ef93acce9c9a2676">12eef95ef9ed7a086ca02f06ef93acce9c9a2676</a>
+<blockquote>
+<p>
+ Remove FIXME and associated dead code in pwgtop.c<br>
+<br>
+ This should solve coverity 351087.<br>
+<br>
+gpdl/pwgtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-25 14:46:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ab089bf9511ccaa30a33d6e269ab0dae98ff5517">ab089bf9511ccaa30a33d6e269ab0dae98ff5517</a>
+<blockquote>
+<p>
+ Fix coverity #351085; toff_t's are unsigned.<br>
+<br>
+ The tiff lib uses a 'seek' function that apes 'fseek' in that<br>
+ it takes a whence field. In order for the whence field to be<br>
+ useful for 'SEEK_SET' (and half the cases of SEEK_CURR), it<br>
+ needs to be able to take negative offsets. The tiff seek<br>
+ function only passes positive offsets though as it uses an<br>
+ unsigned type.<br>
+<br>
+ It is therefore pointless to test against 0.<br>
+<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 15:31:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e056194328312f724089d52398e88c5a6a2fe277">e056194328312f724089d52398e88c5a6a2fe277</a>
+<blockquote>
+<p>
+ Windows installer: offer to uninstall previous installations<br>
+<br>
+ If the installer detects previous gs installations (from the registry keys), an<br>
+ additional page will appear in the installer, giving the user the option of<br>
+ uninstalling each existing installation in turn - it allows uninstall a given<br>
+ install, not uninstall it, or cancel out of uninstalling the remaining ones.<br>
+<br>
+psi/nsisinst.nsi<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 18:12:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9ff39ee82680ea1719ddf99cf3809e26df0c946">e9ff39ee82680ea1719ddf99cf3809e26df0c946</a>
+<blockquote>
+<p>
+ Coverity 351050: avoid buffer overflow warning.<br>
+<br>
+ For simplicity, have used a temp four-character buffer filled in by<br>
+ parse_file_access_string(), then snprintf() to append gp_fmode_binary_suffix<br>
+ safely.<br>
+<br>
+psi/zfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 18:08:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=354715346deed252ef7db53160b61d04bd630a2f">354715346deed252ef7db53160b61d04bd630a2f</a>
+<blockquote>
+<p>
+ Coverity 351049: avoid buffer overflow warning.<br>
+<br>
+ We're actually safe because gp_fmode_binary_suffix is max one-character long,<br>
+ but Coverity doesn't know that.<br>
+<br>
+base/gxclfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 18:05:35 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b8c8a6410658fdfe57ad5de4ae57fdc4cbece2ab">b8c8a6410658fdfe57ad5de4ae57fdc4cbece2ab</a>
+<blockquote>
+<p>
+ Coverity 351048: avoid buffer overflow warning.<br>
+<br>
+ We're actually safe because gp_fmode_binary_suffix is max one-character long,<br>
+ but Coverity doesn't know that.<br>
+<br>
+base/gxclist.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 17:45:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=882793bc7f35f21f7857e216966c0b777140a87c">882793bc7f35f21f7857e216966c0b777140a87c</a>
+<blockquote>
+<p>
+ Coverity 350209: fix bad return path in handle_dash_c().<br>
+<br>
+ Also refactored a little.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 10:43:43 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f611a6c45fafbea495206773eccf3028cfb4765">8f611a6c45fafbea495206773eccf3028cfb4765</a>
+<blockquote>
+<p>
+ Bug 701625 Treat CMY color space as additive<br>
+<br>
+ Our support of CMY devices is currently not ideal with<br>
+ respect to proper color management and the transparency<br>
+ imaging model as described in Bug 697965. My plan is<br>
+ to make a psd cmy based device and get things working<br>
+ properly in terms of spot colors and ICC color management.<br>
+ This will take a bit of effort and likely have a bug<br>
+ tail. For now for Bug 701625 an easy solution is to<br>
+ treat the color space as additive. In this case, the<br>
+ output looks reasonable.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 11:42:29 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f734274b455c321a4089d8ee7efa7511656ae9c6">f734274b455c321a4089d8ee7efa7511656ae9c6</a>
+<blockquote>
+<p>
+ Removed gp_fprintf(pstream, &quot;&quot;) call that has no affect.<br>
+<br>
+ This was causing gcc warning because gp_fprintf() is now checked by gcc for<br>
+ printf format warnings.<br>
+<br>
+devices/gdevmgr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 18:39:21 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17a947dcc56fee115d7b416de7648289b04185f8">17a947dcc56fee115d7b416de7648289b04185f8</a>
+<blockquote>
+<p>
+ Fix some -W -Wall warnings about printf format type mismatches.<br>
+<br>
+contrib/gdevhl12.c<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 17:47:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cbd8765cc2e5d67eae3d412a7584f37a9e02f2e9">cbd8765cc2e5d67eae3d412a7584f37a9e02f2e9</a>
+<blockquote>
+<p>
+ Bug 701932: fixed up head dependencies for pxstate_h.<br>
+<br>
+pcl/pxl/pxl.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 17:16:27 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ee9bb6efff8929ff8df4fb7ca42001c2aeacdf6">3ee9bb6efff8929ff8df4fb7ca42001c2aeacdf6</a>
+<blockquote>
+<p>
+ Coverity 350198: fixed jbig2_error() printf format / type mismatches.<br>
+<br>
+ Unfortunately stdint_.h isn't available to jbig2dec code so we can't use<br>
+ PRIdSIZE. Have instead used %li with a cast to long.<br>
+<br>
+ [This commit addresses all printf warnings from gcc -W -Wall; it probably fixes<br>
+ multiple similar coverity issues.]<br>
+<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 17:11:43 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=67a59c12667bbdddf67e78d9496f94b34d55e702">67a59c12667bbdddf67e78d9496f94b34d55e702</a>
+<blockquote>
+<p>
+ Coverity 350195: check return from process_row().<br>
+<br>
+pcl/pcl/rtraster.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 17:01:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3819f5121013dd93dd3653475e686d8f6df9b068">3819f5121013dd93dd3653475e686d8f6df9b068</a>
+<blockquote>
+<p>
+ Coverity 350189: explicitly ignore return from hpgl_arg_c_int().<br>
+<br>
+ We already initialised variable 'type', and we don't mind whether<br>
+ hpgl_arg_c_int() changes it before we switch on it. So cast hpgl_arg_c_int()'s<br>
+ return to void to stop Coverity from warning.<br>
+<br>
+pcl/pcl/pgconfig.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 16:52:32 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3b8f96dbe2dc0ab0cdbbf076cdb88e21c91639a5">3b8f96dbe2dc0ab0cdbbf076cdb88e21c91639a5</a>
+<blockquote>
+<p>
+ Coverity 350185: fix printf format type mismatch.<br>
+<br>
+ Unfortunately stdint_.h isn't available to jbig2dec code so we can't use<br>
+ PRIdSIZE. Have instead used %li with a cast to long.<br>
+<br>
+jbig2dec/jbig2_generic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 16:49:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4b31b05c2db5967c00d0b08023167935bbb3d015">4b31b05c2db5967c00d0b08023167935bbb3d015</a>
+<blockquote>
+<p>
+ If gcc, make gcc check jbig2_error()'s format string agrees with types of parameters.<br>
+<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 16:23:32 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1098cdd54a46dca9ca976b750ba25d0b714dfd9f">1098cdd54a46dca9ca976b750ba25d0b714dfd9f</a>
+<blockquote>
+<p>
+ Add a --enable-mkromfs-quiet configure option.<br>
+<br>
+ Sets MKROMFS_FLAGS=-q and pass to all invocations of mkromfs.<br>
+<br>
+ [Makefile.in and configure.ac changes by chrisl]<br>
+<br>
+Makefile.in<br>
+base/lib.mak<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 12:52:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1f60fa73b7c6b5acfae75b6e4a1fede2b75ea1c4">1f60fa73b7c6b5acfae75b6e4a1fede2b75ea1c4</a>
+<blockquote>
+<p>
+ mkromfs: added -q option to reduce verbose diagnostics.<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 16:45:33 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3e01cc30c90094bcbef2966f1048c504e6b5361e">3e01cc30c90094bcbef2966f1048c504e6b5361e</a>
+<blockquote>
+<p>
+ configure.ac: add -W -Wall to sanitize builds if supported.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 13:41:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b93f218d418827b689c61b37941ffd4eef0c0d84">b93f218d418827b689c61b37941ffd4eef0c0d84</a>
+<blockquote>
+<p>
+ Mark gp_fprintf() with gcc's __attribute__ ((format (__printf__, 2, 3))).<br>
+<br>
+ This makes gcc check types match the format string.<br>
+<br>
+base/gp.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 13:40:45 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=87cd6160bf654a164469e75a9df7cc7b690b5aaa">87cd6160bf654a164469e75a9df7cc7b690b5aaa</a>
+<blockquote>
+<p>
+ Coverity 350172: fix gp_fprintf() call to use PRIdSIZE for ptrdiff_t.<br>
+<br>
+contrib/japanese/gdevp201.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 12:24:48 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=53a370b272a89df418ea563f1abde7d774579105">53a370b272a89df418ea563f1abde7d774579105</a>
+<blockquote>
+<p>
+ Coverity 350169: avoid buffer overflow when writing to cups-&gt;pageSizeRequested.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 19:30:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7fe9289f10c47fe7557375c23b54cd87e521d11c">7fe9289f10c47fe7557375c23b54cd87e521d11c</a>
+<blockquote>
+<p>
+ Bug 701932: moved more global_* into px_state_s.<br>
+<br>
+ Specifically:<br>
+<br>
+ gs_point global_char_shear;<br>
+ gs_point global_char_scale;<br>
+ float global_char_bold_value;<br>
+ float global_char_angle;<br>
+<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 19:16:48 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=810c897c51e28dcdd589e1561af36769e72e0893">810c897c51e28dcdd589e1561af36769e72e0893</a>
+<blockquote>
+<p>
+ Bug 701932: moved more global_* into px_state_s.<br>
+<br>
+ Specifically:<br>
+<br>
+ static pcl_parser_state_t global_pcl_parser_state;<br>
+ static hpgl_parser_state_t global_gl_parser_state;<br>
+ static bool global_this_pass_contiguous = false;<br>
+ static bool global_pass_first = true;<br>
+<br>
+pcl/pxl/pxparse.c<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxpthr.h<br>
+pcl/pxl/pxstate.c<br>
+pcl/pxl/pxstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 17:39:58 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d48555f7777a983e0d15972f3838bb5583e20657">d48555f7777a983e0d15972f3838bb5583e20657</a>
+<blockquote>
+<p>
+ Bug 701932: moved global_pcs into px_state_s.<br>
+<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxpthr.h<br>
+pcl/pxl/pxsessio.c<br>
+pcl/pxl/pxstate.c<br>
+pcl/pxl/pxstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 12:42:16 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4db291eb31b4dc8c6864e438acdd9283c3347671">4db291eb31b4dc8c6864e438acdd9283c3347671</a>
+<blockquote>
+<p>
+ Coverity 350170: cope with -ve from gs_vsprintf().<br>
+<br>
+pcl/pcl/pcstatus.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 13:02:39 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0bc5d53fa1c0d7832008d1ae8e0e6804bf5f9e9e">0bc5d53fa1c0d7832008d1ae8e0e6804bf5f9e9e</a>
+<blockquote>
+<p>
+ Windows (un)installer: Fix case for registry key removal<br>
+<br>
+psi/nsisinst.nsi<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 10:30:14 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=efafc6f95b0bfedf63efafc55416846974a67bcc">efafc6f95b0bfedf63efafc55416846974a67bcc</a>
+<blockquote>
+<p>
+ &quot;Promote&quot; gpdl from experimental to actual product<br>
+<br>
+ Really, add gpdl to the default targets list.<br>
+<br>
+Makefile.in<br>
+base/gs.mak<br>
+base/unix-gcc.mak<br>
+configure.ac<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-22 11:49:02 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0243f6288ca26b2985f0778040feebae7322ac0b">0243f6288ca26b2985f0778040feebae7322ac0b</a>
+<blockquote>
+<p>
+ Coverity ID 94736<br>
+<br>
+ This was partially addressed in a previous commit (2 years ago) but<br>
+ because the 'contrib' folder wasn't included in the ananlysis, this<br>
+ second instance of the same problem didn't show up.<br>
+<br>
+contrib/gdevcd8.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 15:18:29 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d9d92ab6b774914d81f63c8e19d78e4022ad9976">d9d92ab6b774914d81f63c8e19d78e4022ad9976</a>
+<blockquote>
+<p>
+ Bug 701357: Fix color document<br>
+<br>
+ Getting proper encoding of _ character requires use of<br>
+ [T1]{fontenc} and lmodern.<br>
+<br>
+doc/GS9_Color_Management.pdf<br>
+doc/GS9_Color_Management.tex<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 14:06:50 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0129596f6cf2d090ed46f9a9c8189ab60b56735f">0129596f6cf2d090ed46f9a9c8189ab60b56735f</a>
+<blockquote>
+<p>
+ Bug 700929: Pass object type rendering intent settings to pdf14 device<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 18:45:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0c2e4d8f43d6e83a0a04e6d2c350d2d7fc1e7a6">e0c2e4d8f43d6e83a0a04e6d2c350d2d7fc1e7a6</a>
+<blockquote>
+<p>
+ gpdl: Fixup some warnings.<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/jpgtop.c<br>
+gpdl/pwgtop.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 19:02:47 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=23ea32bf2bd205c44c9a7979b3a187199e47da59">23ea32bf2bd205c44c9a7979b3a187199e47da59</a>
+<blockquote>
+<p>
+ gpdl: Add 'jbig2' language implementation.<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/jbig2top.c<br>
+pcl/pl/plimpl.c<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 19:01:31 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c30c4cda3c2487ce52f79a952e3d0febef1d8bd">0c30c4cda3c2487ce52f79a952e3d0febef1d8bd</a>
+<blockquote>
+<p>
+ Remove some dead code/variables from tifftop.c<br>
+<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 11:20:49 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7043e985298f75291e1fc25ad272140be31ffe6d">7043e985298f75291e1fc25ad272140be31ffe6d</a>
+<blockquote>
+<p>
+ Ghostscript Bug 701324. Improved robustness of lcms2mt<br>
+<br>
+ lcmsmt will give up if it can't find the perceptual MLUT.<br>
+ This fix will have it check to see if the colorimetric or<br>
+ saturation intents are present also.<br>
+<br>
+lcms2mt/src/cmsio1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 10:45:59 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aa30c0798d32decfd99ff8149553221917d4301e">aa30c0798d32decfd99ff8149553221917d4301e</a>
+<blockquote>
+<p>
+ Use gp_fwrite instead of fwrite.<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 08:40:02 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4640b5abd48430bfc76cc4e98cd626aa64075537">4640b5abd48430bfc76cc4e98cd626aa64075537</a>
+<blockquote>
+<p>
+ Bug 701717 Remove redundant check.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 15:40:02 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9189e54333d33104a0de8aa92b1c5a7662762048">9189e54333d33104a0de8aa92b1c5a7662762048</a>
+<blockquote>
+<p>
+ JBIG2_CFLAGS/JPX_CFLAGS handling and remove commented out code<br>
+<br>
+ The JBIG2_CFLAGS and JPX_CFLAGS allow a user to tweak the CFLAGS specific to<br>
+ the JBIG2 and JPX/JPEG2000 decoders respectively.<br>
+<br>
+ There was also some commented out code that, with the above tweak, is no<br>
+ longer required to be there.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 13:29:19 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=84a1bd8c73d740022877a5911851b8521ecc7458">84a1bd8c73d740022877a5911851b8521ecc7458</a>
+<blockquote>
+<p>
+ Bug 701440: only include libs calling pkg-config for freetype<br>
+<br>
+ Only have the -l options, not the -L ones because they confuse genconf<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 12:43:09 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aaea09a9a0e357b2784536b8476f4ab4fee19b64">aaea09a9a0e357b2784536b8476f4ab4fee19b64</a>
+<blockquote>
+<p>
+ Allow configure to set size etc for size_t in arch.h<br>
+<br>
+arch/arch_autoconf.h.in<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 11:30:17 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=64a35dc73ee8256421b1dd2760be0c73c05eadb8">64a35dc73ee8256421b1dd2760be0c73c05eadb8</a>
+<blockquote>
+<p>
+ Bug 701439: use pkg-config for libidn<br>
+<br>
+ If pkg-config is available, and knows about libidn, use it to get the CFLAGS and<br>
+ LIBS, otherwise fall back to the AC_CHECK_LIB/AC_CHECK_HEADER method<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 10:44:16 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=317c0154a8141b8dde6e303f1e18a95e01f8ee33">317c0154a8141b8dde6e303f1e18a95e01f8ee33</a>
+<blockquote>
+<p>
+ Bug 701689: CPPFLAGS for aux tools when cross-compiling<br>
+<br>
+ Introduce CPPFLAGSAUX<br>
+<br>
+ Credit to Marvin Schmidt<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 12:45:17 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c7c6043bde1517e8fd6d645d7c34142aec462248">c7c6043bde1517e8fd6d645d7c34142aec462248</a>
+<blockquote>
+<p>
+ Spaces should be tab<br>
+<br>
+base/gs.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-21 10:45:56 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d84ecc57837785b566ebd9d5909ba9edc9d697f">2d84ecc57837785b566ebd9d5909ba9edc9d697f</a>
+<blockquote>
+<p>
+ Use caller defined pkg-config and cups-config unconditionally<br>
+<br>
+ In an effort to better handle cross-compilation, we use a check combining<br>
+ AC_PATH_TOOL() and AC_PATH_PROG() - where AC_CHECK_TOOL() will first attempt to<br>
+ find the requested tool *with* a target-triplet prefix (for example,<br>
+ &quot;x86_64-linux-gnu-pkg-config&quot;) and if that fails, it will fall back to the<br>
+ unadorned tool (e.g. &quot;pkg-config&quot;). If we are cross-compiling, and both<br>
+ AC_PATH_TOOL() and AC_PATH_PROG() return the same value, we assume that<br>
+ AC_PATH_TOOL() has fallen back to the default, non-cross-compile version, and we<br>
+ disable using the given tool.<br>
+<br>
+ We do this for both pkg-config and cups-config.<br>
+<br>
+ This does not work well for every cross-compile environment, however, since not<br>
+ all use the convention of the target triplet prefix.<br>
+<br>
+ We already allowed the caller to specify both a pkg-config and cups-config to<br>
+ use, but we still applied the above outlined test.<br>
+<br>
+ Now, when the tool is explicitly specified, do *not* do the<br>
+ AC_PATH_TOOL()/AC_PATH_PROG(), assume the caller knows what they are doing, and<br>
+ just go ahead and use it.<br>
+<br>
+ Additionally, for cups-config, if the caller explicitly specified a cups-config,<br>
+ and/or explicitly set --enable-cups then make not finding the cups libraries a<br>
+ configure hard fail. By default, we'll still just warn, and exclude the cups<br>
+ devices.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-18 09:46:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=327dc8943c0aac1c7be7a1fb6e93346b61cd0900">327dc8943c0aac1c7be7a1fb6e93346b61cd0900</a>
+<blockquote>
+<p>
+ Bug #699331: better support for cross-compiling<br>
+<br>
+ This is mainly moving from using uname to identify the the target platform,<br>
+ to using the 'host' value to identify the target platform, and 'host' and<br>
+ 'build' values to know when we're cross-compiling.<br>
+<br>
+ There are also a couple of tweaks related to cross-compiling to MSYS.<br>
+<br>
+ Also, make double sure API symbols are always visible. This affects builds with<br>
+ gcc and compatible compilers.<br>
+<br>
+ Remove use of $cross_compiling variable<br>
+<br>
+ Credit to djcj for most of the changes<br>
+<br>
+.gitignore<br>
+Makefile.in<br>
+autogen.sh<br>
+base/gp_unix.c<br>
+base/gsutil.c<br>
+base/lib.mak<br>
+base/unix-dll.mak<br>
+configure.ac<br>
+pcl/pl/pjparse.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 14:58:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e20cd8d8fc1f40bf4218c18e545ca4ddb175c348">e20cd8d8fc1f40bf4218c18e545ca4ddb175c348</a>
+<blockquote>
+<p>
+ Remove gprf device from Windows makefile<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-21 11:05:36 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7a56ef4aed70a50bcd7731b61e59850e98d08a4d">7a56ef4aed70a50bcd7731b61e59850e98d08a4d</a>
+<blockquote>
+<p>
+ Ensure paths from Fontmap end in a directory separator<br>
+<br>
+ Since it's normal for multiple font files to be grouped together in a directory,<br>
+ we strip the file name off, and add just the directory to the permit read list,<br>
+ rather than flood the list with every font file.<br>
+<br>
+ The problem is, we weren't appending the directory separator character showing<br>
+ the directory was reading permitted.<br>
+<br>
+ This commit does that.<br>
+<br>
+ Also, add extra detail to the documentation about this aspect of file<br>
+ permissions lists.<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+doc/Fonts.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 15:24:28 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5e60fc862a73898ce048730d0c23c00b9ddb5578">5e60fc862a73898ce048730d0c23c00b9ddb5578</a>
+<blockquote>
+<p>
+ Bug 701660 Trans. Text knockout missing ET<br>
+<br>
+ The file has contents that look like this<br>
+<br>
+ BT<br>
+ stuff<br>
+ BT<br>
+ stuff<br>
+ ET<br>
+<br>
+ more stuff<br>
+<br>
+ The first BT meets the conditions to push the text group.<br>
+ Unfortunately it is missing the ET, so the group is never popped.<br>
+ These fixes will make sure that if we are in a text group and<br>
+ encounter another BT we popped the current text group.<br>
+<br>
+base/gdevp14.c<br>
+base/gstrans.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 13:15:18 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7118262b44939688c9143c278b8c76c6c620171">d7118262b44939688c9143c278b8c76c6c620171</a>
+<blockquote>
+<p>
+ Remove trailing whitespace<br>
+<br>
+gpdl/tifftop.c<br>
+pcl/pcl/pcfrgrnd.c<br>
+pcl/pxl/pxpthr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 12:32:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=31c4abe348de980ff7922e28f05cc3f788fab29a">31c4abe348de980ff7922e28f05cc3f788fab29a</a>
+<blockquote>
+<p>
+ Remove gproof device.<br>
+<br>
+configure.ac<br>
+devices/devs.mak<br>
+devices/gdevgprf.c<br>
+windows/ghostscript.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 11:04:43 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1a5a05cf164f6657e3cc52f6fa31524ed190b981">1a5a05cf164f6657e3cc52f6fa31524ed190b981</a>
+<blockquote>
+<p>
+ Coverity 95049: stop coverity taints for jbig2_get_int16() etc.<br>
+<br>
+jbig2dec/jbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 10:34:33 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a26c1ee0ef8db26ba79f6804a4f09e1c88cb234">9a26c1ee0ef8db26ba79f6804a4f09e1c88cb234</a>
+<blockquote>
+<p>
+ Coverity 350210: removed superflous extra param to jbig2_error().<br>
+<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 10:24:09 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9d8f69e1e37475775917e71ba9bf82b7a2098942">9d8f69e1e37475775917e71ba9bf82b7a2098942</a>
+<blockquote>
+<p>
+ Coverity 350166: stop coverity taint warnings for get_u32_big_endian().<br>
+<br>
+base/gsiorom.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 10:19:46 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09d9c492f135ceeb6d95323c1b340b1fc03f15ad">09d9c492f135ceeb6d95323c1b340b1fc03f15ad</a>
+<blockquote>
+<p>
+ Coverity 341108: removed special coverity comment that didn't work.<br>
+<br>
+base/gp_unifs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-20 10:13:03 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d79e80b43f388d1e9dd53d86466e04bdb2e6be25">d79e80b43f388d1e9dd53d86466e04bdb2e6be25</a>
+<blockquote>
+<p>
+ Coverity 102214: stop coverity worrying about pl_get_int16() etc.<br>
+<br>
+ These fns use byte swapping, which makes coverity think that they return<br>
+ tainted data, and also that they taint the input buffer.<br>
+<br>
+pcl/pl/plvalue.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 17:58:10 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b74cf2eff085b9270d26818e9064450ac4da41f9">b74cf2eff085b9270d26818e9064450ac4da41f9</a>
+<blockquote>
+<p>
+ Coverity 350199: try to stop coverity from thinking skip_white_pixels() taints buffer.<br>
+<br>
+base/scfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 17:30:52 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=763a96187a286432e3c90b564a2031278e3688d0">763a96187a286432e3c90b564a2031278e3688d0</a>
+<blockquote>
+<p>
+ Coverity 350190, 350208: make raster unsigned, to avoid sign extension issue.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 19:13:40 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1759596a7499d27e3d289bbff4c45f9206ad4798">1759596a7499d27e3d289bbff4c45f9206ad4798</a>
+<blockquote>
+<p>
+ Followon to fix for bug 701877.<br>
+<br>
+ This changes the 'extern' definitions for<br>
+ {Single,Double,Treble,Quad}GlyphList to be more correct. This<br>
+ enables us to use the simple castless form in the initialisations.<br>
+ This works nicely in Visual Studio, and will hopefully assuage<br>
+ Coverity.<br>
+<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 16:35:50 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c5eb242fa82585aa21371919ca4a7a2d4d4effc3">c5eb242fa82585aa21371919ca4a7a2d4d4effc3</a>
+<blockquote>
+<p>
+ Make sure blend mode is passed to tile with pdfi<br>
+<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+psi/zpcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 18:13:08 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=69bdf79e10370ed16a17a346690fd630272f7346">69bdf79e10370ed16a17a346690fd630272f7346</a>
+<blockquote>
+<p>
+ gpdl: Add tiff &quot;interpreter&quot; to gpdl.<br>
+<br>
+Makefile.in<br>
+configure.ac<br>
+gpdl/gpdl.mak<br>
+gpdl/tifftop.c<br>
+pcl/pl/plimpl.c<br>
+psi/msvc.mak<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 18:11:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b5956ac8be8c923ad9e9fd3045724a5579cf4dce">b5956ac8be8c923ad9e9fd3045724a5579cf4dce</a>
+<blockquote>
+<p>
+ gpdl: Fix compiler flags for pwgtop.c<br>
+<br>
+ Don't need to pass the JPEG include directory here.<br>
+<br>
+gpdl/gpdl.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 18:10:54 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0329372164611fdff22f8c02201ff1fbbf94aae7">0329372164611fdff22f8c02201ff1fbbf94aae7</a>
+<blockquote>
+<p>
+ gpdl: Fix jpeg/pwg behaviour with varying resolutions.<br>
+<br>
+ I thought this worked before, but tests revealed that it was<br>
+ broken.<br>
+<br>
+gpdl/jpgtop.c<br>
+gpdl/pwgtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 11:36:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd8747382f47393efd0f0013700a8294c0ded15c">cd8747382f47393efd0f0013700a8294c0ded15c</a>
+<blockquote>
+<p>
+ Slight reorganisation of gpdl interpreter files.<br>
+<br>
+ Rather than having each different &quot;language&quot; have a 'top' file<br>
+ in gpdl/foo/footop.c, move them to be gpdl/foo.c. Extra directories<br>
+ seem overkill at this point, and it simplifies the Makefile<br>
+ slightly.<br>
+<br>
+ Also, rename IMG to JPG.<br>
+<br>
+Makefile.in<br>
+gpdl/gpdl.mak<br>
+gpdl/jpgtop.c<br>
+gpdl/psitop.c<br>
+gpdl/pwgtop.c<br>
+pcl/pl/plimpl.c<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 16:40:16 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1b7dbc95945ef2afa38faeebfda56830f2762ab">e1b7dbc95945ef2afa38faeebfda56830f2762ab</a>
+<blockquote>
+<p>
+ Coverity 350182: check for error before dereferencing ptr from gs_cspace_build_ICC().<br>
+<br>
+ This allows us to remove the check for pcs == NULL after pcs has already been<br>
+ dereferenced, which was the coverity issue.<br>
+<br>
+ Also fixed gs_cspace_build_ICC() to return gs_error_VMerror if<br>
+ gs_cspace_alloc() fails - was returning zero with *ppcspace out-param set to<br>
+ NULL. Have checked that all callers don't rely on the out-param being NULL to<br>
+ indicate error. Though some of them make no checks at all.<br>
+<br>
+base/gdevp14.c<br>
+base/gsicc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 16:07:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e93430d762400247cdc4550be403a1f7c291112d">e93430d762400247cdc4550be403a1f7c291112d</a>
+<blockquote>
+<p>
+ Coverity 350180: change gp_fmode_binary_suffix from char[] to char*.<br>
+<br>
+ Am hoping this will persuade Coverity that it is zero-terminated and not<br>
+ zero-length, and thus safe to pass to strncat().<br>
+<br>
+base/gp.h<br>
+base/gp_dosfs.c<br>
+base/gp_ntfs.c<br>
+base/gp_os2fs.c<br>
+base/gp_unifn.c<br>
+base/gp_vms.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 15:19:16 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb2c2fbbc96b1f2de8e454ecb2adf3e58ddb52c3">bb2c2fbbc96b1f2de8e454ecb2adf3e58ddb52c3</a>
+<blockquote>
+<p>
+ Coverity 341108: disable mktemp() SECURE_TEMP issue, as mkstemp() not available.<br>
+<br>
+base/gp_unifs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 14:50:01 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a4c44cc7579ab80a1d49d721fad48e1ed9bbe976">a4c44cc7579ab80a1d49d721fad48e1ed9bbe976</a>
+<blockquote>
+<p>
+ Coverity 323321: remove unused goto label and 'code' variable from template_mem_transform_pixel_region_render_landscape().<br>
+<br>
+ The label and variable appear to have been copied from a similar function, but<br>
+ they are never used, and actually it looks like this fn can't fail.<br>
+<br>
+base/gdevdrop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 13:06:48 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f804ebfa526bd36a808319225488fe9de416f350">f804ebfa526bd36a808319225488fe9de416f350</a>
+<blockquote>
+<p>
+ Coverity: add additional annotation to jbig2_get_uint32().<br>
+<br>
+ Coverity thinks that jbig2_get_uint32() taints the buffer that it is passed,<br>
+ which causes coverity issues in calling code.<br>
+<br>
+ So this commit adds an addional coverity annotation to ensure the buffer is not<br>
+ tainted.<br>
+<br>
+ Am not 100% sure how to specify multiple annotations, but apparently doing<br>
+ things like '// coverity[ foo, bar ]' does not work, so we put the new<br>
+ annotation in a separate comment.<br>
+<br>
+jbig2dec/jbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-19 12:26:18 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ff87e872888da0f5cfd392b3f8b90fa7ad0e27c">7ff87e872888da0f5cfd392b3f8b90fa7ad0e27c</a>
+<blockquote>
+<p>
+ Fix the Lexmark contributed device<br>
+<br>
+ Bug #701905 &quot;heap-buffer-overflow at contrib/gdevlx32.c:1509 in convbuf&quot;<br>
+<br>
+ The problem here is actually much earlier. In encode_bw_buf() there is a<br>
+ comment (line 1771) about starting before the first non-white pixels<br>
+ in order to &quot;give the head a little more room to accelerate properly&quot;.<br>
+<br>
+ If the first non-white pixel is less than 3 pixels from the left edge<br>
+ of the raster, this will cause the calculation of 'left' to become<br>
+ negative. It seems to me this will immediately corrupt the data. In<br>
+ addition right is calculated in a similar fashion, if right is also<br>
+ close to the right edge of the raster, then we can end up with numcols<br>
+ being more than the width of the raster.<br>
+<br>
+ This argument is passed to convbuf() and that tries to read off the end<br>
+ of the input data, because numcols exceeds the bytes in the raster.<br>
+<br>
+ I'm pretty dubious about this whole piece of code but since I don't<br>
+ have a printer to test with I'm reluctant to make major changes. This<br>
+ commit simply clamps left to 0 and right to the right edge of the<br>
+ raster. The comment implies that the extra spacing probably isn't useful<br>
+ and certainly suggests that removing it won't be harmful.<br>
+<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 17:36:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e50bda19813d11555ff1ab4f7cb5c3e55ff0653">7e50bda19813d11555ff1ab4f7cb5c3e55ff0653</a>
+<blockquote>
+<p>
+ Coverity 341025: removed unreachable line of code.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 17:34:49 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05cfc3afb00404ddfd3c1eac635f369491995e5b">05cfc3afb00404ddfd3c1eac635f369491995e5b</a>
+<blockquote>
+<p>
+ Coverity 331894: check return from gs_bbox_transform().<br>
+<br>
+pcl/pl/plchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 17:32:05 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=81e179af142575eab21633b2023e752e1e244c9a">81e179af142575eab21633b2023e752e1e244c9a</a>
+<blockquote>
+<p>
+ Coverity 331893: check return code from gs_bbox_transform().<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 17:28:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d57aff5bbdb206f00e4b0cb3b324616be10d358e">d57aff5bbdb206f00e4b0cb3b324616be10d358e</a>
+<blockquote>
+<p>
+ Coverity 323321: avoid dead code.<br>
+<br>
+base/gdevdrop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 15:24:44 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3aa36ebc3df83d339695fff58a73332d5304c47d">3aa36ebc3df83d339695fff58a73332d5304c47d</a>
+<blockquote>
+<p>
+ Coverity 323317, 323320: avoid dead code.<br>
+<br>
+ Fixes coverity errors for transform_pixel_region_render_landscape() and<br>
+ transform_pixel_region_render_skew().<br>
+<br>
+base/gdevdflt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 14:49:38 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4a1a4e8ad165e678d3affab483460ec8b926d5dd">4a1a4e8ad165e678d3affab483460ec8b926d5dd</a>
+<blockquote>
+<p>
+ Coverity 261213: make pxPassthrough_pcl_state_nonpage_exceptions() check return from pcl_set_graphics_state().<br>
+<br>
+ Also changed pxPassthrough_pcl_state_nonpage_exceptions() to return an int, and<br>
+ made all of its callers check the return value.<br>
+<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxpthr.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 14:38:10 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1ee350a81d5799785ab53b3eece6e853cc4c607b">1ee350a81d5799785ab53b3eece6e853cc4c607b</a>
+<blockquote>
+<p>
+ Coverity 261210: wrap call of pcl_mark_page_for_path() in hpgl_call().<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 12:31:33 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=884690a576e16043e674efb9d047a00760ac8443">884690a576e16043e674efb9d047a00760ac8443</a>
+<blockquote>
+<p>
+ Coverity 135902: remove support for USE_MAP_TYPE_IN_SPECIFICATION.<br>
+<br>
+ We now always treat map type 0 as map type 1. As suggested by henrystyles.<br>
+<br>
+ This will fix coverity issue.<br>
+<br>
+pcl/pcl/pctext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 12:20:17 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9763a006f7c566e92f60e799fb2270c09807e9c8">9763a006f7c566e92f60e799fb2270c09807e9c8</a>
+<blockquote>
+<p>
+ Coverity 135902: Fixed indentation in char_is_printable().<br>
+<br>
+ This commit has no output from 'git diff -w', and is in preparation for next<br>
+ commit that fixes coverity issue.<br>
+<br>
+pcl/pcl/pctext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 16:55:22 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd84fd3a36d0ef809ed697ed12f1bb04655a0388">dd84fd3a36d0ef809ed697ed12f1bb04655a0388</a>
+<blockquote>
+<p>
+ Coverity 102254: avoid integer division when calculating double value.<br>
+<br>
+ It's possible that this could alter behaviour, but clusterpush showed no<br>
+ additional regressions.<br>
+<br>
+pcl/pcl/pctext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 12:08:38 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a631e0d40337da58ba596a9499b71c1d7888c9d5">a631e0d40337da58ba596a9499b71c1d7888c9d5</a>
+<blockquote>
+<p>
+ Coverity 126570: build_foreground(): return error if pindexed is NULL.<br>
+<br>
+ Previously we would dereference pindexed which would inevitably SEGV.<br>
+<br>
+pcl/pcl/pcfrgrnd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 11:25:16 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6fbd278d11e9ea567ea2dce0c7aa02e706d9a9e2">6fbd278d11e9ea567ea2dce0c7aa02e706d9a9e2</a>
+<blockquote>
+<p>
+ Coverity: try using C++ comment style for 'coverity[ -tainted_data_return ]'<br>
+<br>
+ E.g. for:<br>
+ https://scan4.coverity.com/reports.htm#v46841/p11408/fileInstanceId=69767421&amp;defectInstanceId=11904740&amp;mergedDefectId=95049<br>
+<br>
+jbig2dec/jbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-18 14:55:29 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e05d0e17c75adab181413c8bf5bf6760c76683e4">e05d0e17c75adab181413c8bf5bf6760c76683e4</a>
+<blockquote>
+<p>
+ 'fix' buffer overrun in eps9mid device leading to SEGV<br>
+<br>
+ Bug #701853 &quot;Segmentation fault at base/gsbitops.c:121 in bits_fill_rectangle&quot;<br>
+<br>
+ The actual fault here is considerably earlier in the actual sequence of<br>
+ execution.<br>
+<br>
+ The device(s) check for consecutive unchanged raster lines, and only<br>
+ emit new lines when two lines differ. In addition under some conditions<br>
+ the device can 'consolidate' runs by OR'ing the data in a raster with<br>
+ the same data in the next raster (I don't understand why this is needed)<br>
+<br>
+ In order to ensure that there is sufficient data (24 rasters) for the<br>
+ process to complete safely the raster data is copied into a buffer which<br>
+ is allocated large enough, and is set to zero if less lines than 24 are<br>
+ read from the device.<br>
+<br>
+ However the code doing the OR'ing wasn't using this memory, it was using<br>
+ the single scan line pulled from the device to check whether consecutive<br>
+ lines are the same. This caused it to run off the end of that buffer and<br>
+ overwrite the 'line_ptrs' member of the device structure. *Much* later<br>
+ we would attempt to use the corrupted data and that would cause a SEGV.<br>
+<br>
+ fixed by making the code OR'ing the lines use the workign buffer, as<br>
+ (I think) it should.<br>
+<br>
+devices/gdevepsn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-17 19:48:10 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=da03855bf9ca18eab05d4ac870d73f457758a77f">da03855bf9ca18eab05d4ac870d73f457758a77f</a>
+<blockquote>
+<p>
+ txtwrite - fix buffer overflow<br>
+<br>
+ Bug #701877 &quot;heap-buffer-overflow at devices/vector/gdevtxtw.c:2114 in txt_add_fragment&quot;<br>
+<br>
+ We were trying to read too many entries from the enumerator 'Widths'<br>
+ array, because we were reading the number of Unicode code points,<br>
+ instead of the number of character codes.<br>
+<br>
+ At the same time.....<br>
+<br>
+ re-instate the code which uses &amp; on the glyph lists and casts them to<br>
+ appropriate pointers. While gcc happily works with the code that was<br>
+ modified to make Coverity happy, Visual Studio absolutely does not.<br>
+ In order to make Visual Studio happy we do need the crazy pointers and<br>
+ casting. I think this is wrong, but this way works on both compilers<br>
+ and I couldn't find any other construction which did.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-16 10:00:58 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0aa9d4f8237f7a0b459fc567e76ab8f0c4c2eebd">0aa9d4f8237f7a0b459fc567e76ab8f0c4c2eebd</a>
+<blockquote>
+<p>
+ Coverity ID 350946<br>
+<br>
+ Not checking the return from gdev_prn_get_bits in two places<br>
+<br>
+ Again, no way for me to see this CID on the Coverity web interface.<br>
+<br>
+contrib/gdevlx7.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-16 09:55:36 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea274a722040b1186374a96d61715ae96d58c36b">ea274a722040b1186374a96d61715ae96d58c36b</a>
+<blockquote>
+<p>
+ Coverity IDs 350943, 350942 and 350947<br>
+<br>
+ Not checking the return value from gdev_prn_get_bits() in three places.<br>
+<br>
+ Again, cannot see this on the Coverity web interface.<br>
+<br>
+contrib/gdevlx32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-16 09:52:40 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a913d9dc801508b19a8d5605e785852e1bfb082">3a913d9dc801508b19a8d5605e785852e1bfb082</a>
+<blockquote>
+<p>
+ Coverity ID 350944<br>
+<br>
+ Not checking the return value from gdev_prn_get_bits()<br>
+<br>
+ Slightly worryingly, I have the email from Coverity describing this<br>
+ as a new issue, but I cannot persuade the Coverity web interface to<br>
+ display it.<br>
+<br>
+contrib/gdevmd2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-16 09:48:23 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8bf3152fe37368b49dcd23535a407c632d7157d2">8bf3152fe37368b49dcd23535a407c632d7157d2</a>
+<blockquote>
+<p>
+ Coverity IDs 350945 and 350948<br>
+<br>
+ In these routines code can only ever be 0 (OK) or 1 (error). So instead<br>
+ of testing for code &lt; 0 we need to test for code &gt; 0 for an error.<br>
+<br>
+devices/gdevicov.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-16 09:31:32 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5a4c29eeea1f0b63cc0b2fff3a1ca0f5b2d143b6">5a4c29eeea1f0b63cc0b2fff3a1ca0f5b2d143b6</a>
+<blockquote>
+<p>
+ Coverity IDs 350163, 350949<br>
+<br>
+ previous fix for 350163 missed additional unchecked use of xps_fseek()<br>
+<br>
+ In addition; copying the cleanup code was not a complete fix, because<br>
+ the existing cleanup code had a resource leak which Coverity did not<br>
+ previously complain about.....<br>
+<br>
+ Fix that too<br>
+<br>
+xps/xpsjxr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 18:50:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7fc7881b00a43fe1017e593846a0baf28e8837db">7fc7881b00a43fe1017e593846a0baf28e8837db</a>
+<blockquote>
+<p>
+ Add simple PWG &quot;interpreter&quot; for gpdl.<br>
+<br>
+base/spwgd.c<br>
+gpdl/gpdl.mak<br>
+gpdl/pwg/pwgtop.c<br>
+pcl/pl/plimpl.c<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 18:49:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=161adc70e0d6625618c5a6afcb5e04161acc2e2c">161adc70e0d6625618c5a6afcb5e04161acc2e2c</a>
+<blockquote>
+<p>
+ Squash a warning about an ininitialised variable.<br>
+<br>
+jpegxr/cw_emit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 18:48:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b8de03bdb8696517bff0259e827ece4f5746663c">b8de03bdb8696517bff0259e827ece4f5746663c</a>
+<blockquote>
+<p>
+ Squash a float -&gt; int warning.<br>
+<br>
+contrib/japanese/gdevlbp3.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 18:48:26 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=58bee0ad2c67888a52fa02e31de3120673525fda">58bee0ad2c67888a52fa02e31de3120673525fda</a>
+<blockquote>
+<p>
+ Squash a double -&gt; float warning.<br>
+<br>
+contrib/gdevdj9.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-13 18:08:20 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=372e4f29d3fcbfeaa83a5ee8cc530cbb948edab7">372e4f29d3fcbfeaa83a5ee8cc530cbb948edab7</a>
+<blockquote>
+<p>
+ Squash a warning in gdevcif due to dropping const.<br>
+<br>
+devices/gdevcif.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 17:30:23 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=194c53ed02d657159a7be894b6d4b54ce1f435d4">194c53ed02d657159a7be894b6d4b54ce1f435d4</a>
+<blockquote>
+<p>
+ Coverity ID 350163 unchecked return value<br>
+<br>
+ Check the return value of xps_fseek and throw an error if it fails.<br>
+<br>
+xps/xpsjxr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 12:32:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=83c6e520ee6eddeaa1e548e519eb1b42941e3153">83c6e520ee6eddeaa1e548e519eb1b42941e3153</a>
+<blockquote>
+<p>
+ Coverity 102206: use snprintf() to avoid unsafe strcpy() and strcat().<br>
+<br>
+pcl/pl/pjparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 12:24:36 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76c088b2b5468c1551c4636dc9d20f5b1ea5da36">76c088b2b5468c1551c4636dc9d20f5b1ea5da36</a>
+<blockquote>
+<p>
+ Coverity 102205: cast ushort to final expression type (long) before bit-shift, to avoid sign extension.<br>
+<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 11:49:17 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b51e2be557128054b0f1e8f6eb4c3b7de506cca2">b51e2be557128054b0f1e8f6eb4c3b7de506cca2</a>
+<blockquote>
+<p>
+ Coverity 102204: cast byte to long to avoid possible sign extension.<br>
+<br>
+pcl/pcl/pcwhtidx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 11:30:34 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd95eb235f00a600f8b8b99b8929e597283fa96c">dd95eb235f00a600f8b8b99b8929e597283fa96c</a>
+<blockquote>
+<p>
+ Coverity 102189: removed less-than-zero comparison of unsigned.<br>
+<br>
+pcl/pl/plfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 11:27:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95706a3ced4f1cfa50b2ea48f0095ed9423bafe5">95706a3ced4f1cfa50b2ea48f0095ed9423bafe5</a>
+<blockquote>
+<p>
+ Coverity 102173: removed unnecessary comparisons against hpgl_rm_character.<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 14:22:04 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5f24a32f0cc4513dfb9825900d561b3a6771b87c">5f24a32f0cc4513dfb9825900d561b3a6771b87c</a>
+<blockquote>
+<p>
+ Coverity ID 350216 - prevent dangling pointer<br>
+<br>
+ The variable pdcs is declared an immediately initialised to be<br>
+ dsc-&gt;dcs2. Coverity correctly points out that if dsc-&gt;page_count is 1<br>
+ we enter dsc_alloc_string, which can call dsc_reset() where,<br>
+ if dsc-&gt;dcs2 is set, it will be freed and dsc-&gt;dcs2 will be set to<br>
+ Null, leaving pdcs dangling.<br>
+<br>
+ By deferring the assignment of pdcs until it is actuallused we can<br>
+ be certain that it is valid.<br>
+<br>
+psi/dscparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 13:28:38 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=de9dc99614f86e4aaa0a447766a58447e76ca8c1">de9dc99614f86e4aaa0a447766a58447e76ca8c1</a>
+<blockquote>
+<p>
+ Attempted fix for Coverity ID 350194<br>
+<br>
+ Thanks to Robin for pointing me at the right bit of code.<br>
+<br>
+ There was a pointer cast and address of (&amp;) on an array which was<br>
+ already a pointer. This is, of course, silly, so remove the cast and<br>
+ &amp;.<br>
+<br>
+ At the same time, the quad_glyph_list was using signed shorts to hold<br>
+ the Unicode points, when it should have been using unsigned shorts, so<br>
+ fix that here too.<br>
+<br>
+devices/vector/gdevagl.h<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-15 08:26:36 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ea433a1a172298eda11203d698ce6fe69be58d2">0ea433a1a172298eda11203d698ce6fe69be58d2</a>
+<blockquote>
+<p>
+ Support CIDFSubstFont being a path/file<br>
+<br>
+ Preivously, to use a custom CIDFont substitute in a custom location, it was<br>
+ necessary to both both CIDFSubstPath (for the location) and CIDFSubstFont<br>
+ (the file name).<br>
+<br>
+ We'll now check the CIDFSubstFont value and if it looks like it includes a path<br>
+ (i.e. contains a directory/file separator string) then we'll use it as is,<br>
+ ignoring the CIDFSubstPath<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-14 13:22:11 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51aff033bdc8744adfd86ce8b35ef00f23621de2">51aff033bdc8744adfd86ce8b35ef00f23621de2</a>
+<blockquote>
+<p>
+ Bug 701903: (ps2write) clean up image enumerator streams.<br>
+<br>
+ At the end of an image (especially if the &quot;end&quot; is because of an error<br>
+ condition) make sure we clean up any streams created for the handling of the<br>
+ image data.<br>
+<br>
+ This saves leaving the streams around for gc to cleanup, and avoids a problem<br>
+ where a special purpose stream (for color images) holds a reference to a<br>
+ color space and graphics state either or both of which could be freed by a<br>
+ Postscript restore before the garbager gets called to deal with unreferenced<br>
+ objects.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-14 11:20:40 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=33f4f0c0ba5449fd535061e785090bc57849ae51">33f4f0c0ba5449fd535061e785090bc57849ae51</a>
+<blockquote>
+<p>
+ PDF interpreter - don't ignore SUBSTFONT<br>
+<br>
+ The PDF interpreter attempts to find a 'better' match for missing fonts<br>
+ by using a list of TrueType mappings (eg ArialMT, CourierNew) and a<br>
+ list of mappings (gs_font.ps, /.substitutefaces)<br>
+<br>
+ Failing to find a match there it attempts to use the FontDescriptor<br>
+ Flags if present. As far as I can see that basically means we use<br>
+ Times-Roman for serif fonts and Helvetica for sans serif.<br>
+<br>
+ This commit checks to see if SUBSTFONT is set. If it is we ignore all<br>
+ this nonsense and simply use the substitute font the user told us to.<br>
+ Otherwise we continue as before.<br>
+<br>
+ The diff is actually very simple, but the routine was very large so<br>
+ I decided to move the actual substitution code out into a separate<br>
+ function, to simplify the logic in pdffindfont which makes the<br>
+ differences appear substantial. All that has really changed is that the<br>
+ code to do the substitution, after checking for the existence of a<br>
+ FontDescriptor, checks to see if SUBSTFONT is defined. If it is we<br>
+ behave as if the font had no FontDescriptor and use the normal font<br>
+ substitution machinery.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 15:36:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=98a8b291b135d49ffca23d9a289786971cf33a12">98a8b291b135d49ffca23d9a289786971cf33a12</a>
+<blockquote>
+<p>
+ img language implementation<br>
+<br>
+ JPEGs only at this point.<br>
+<br>
+Makefile.in<br>
+gpdl/gpdl.mak<br>
+gpdl/image/imagetop.c<br>
+pcl/pl/plimpl.c<br>
+psi/msvc.mak<br>
+windows/ghostpdl.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 15:36:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=91b104936ec55b3f1f22673d7e286ff67e4e2475">91b104936ec55b3f1f22673d7e286ff67e4e2475</a>
+<blockquote>
+<p>
+ Public build changes to accommodate private URF support.<br>
+<br>
+ This includes build rubrik for devices to generate URF files<br>
+ (urfgray, urfrgb, urfcmyk), a decompression filter for the<br>
+ rle variant used in URF files and a urf &quot;language&quot; interpreter<br>
+ implementation for gpdl.<br>
+<br>
+ Note, this is only the build framework for these things. The<br>
+ actual implementation code lives in the private 'urf'<br>
+ git module, and will be activated automatically as part of<br>
+ the build if it is in position at configure time.<br>
+<br>
+Makefile.in<br>
+base/lib.mak<br>
+base/unix-gcc.mak<br>
+configure.ac<br>
+devices/devs.mak<br>
+gpdl/gpdl.mak<br>
+pcl/pl/plimpl.c<br>
+psi/int.mak<br>
+psi/msvc.mak<br>
+psi/zfilter.c<br>
+windows/ghostpdl.vcproj<br>
+windows/ghostscript.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-13 16:35:05 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=af558a708b40a78eef9c0bc5b2ae229d771a3537">af558a708b40a78eef9c0bc5b2ae229d771a3537</a>
+<blockquote>
+<p>
+ pdfwrite - Fix XMP emission<br>
+<br>
+ Bug #701895 &quot;Ghostscript should leave the rdf:description rdf:about attribute empty (XMP Metadata)&quot;<br>
+<br>
+ See the bug thread, it appears this value should be empty and this<br>
+ commit makes that change.<br>
+<br>
+devices/vector/gdevpdfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 20:14:36 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f63270230f329c6e89375af18d2bf2930421174a">f63270230f329c6e89375af18d2bf2930421174a</a>
+<blockquote>
+<p>
+ Fix devices that ignore return codes from gdev_prn get_bits &amp; copy_scan_lines<br>
+<br>
+ Discovered these when working on bug 701845 'devicen' device. Checking<br>
+ uncovered a plethora of other places that used one of these functions<br>
+ assuming success.<br>
+<br>
+ Also the gdev_prn_copy_scan_lines had places that assumed the return code<br>
+ was a valid line_count, so if negative, could memset many lines in front of<br>
+ an allocated buffer.<br>
+<br>
+ The code in a few of these usages is strange, and we don't have a way to<br>
+ check them, so this may not match the original intent.<br>
+<br>
+ Also, while perusing all of these files, check devices for alloc's that<br>
+ assume success and fix them (usually return gs_error_VMerror).<br>
+<br>
+base/gdevdevn.c<br>
+devices/gdev3852.c<br>
+devices/gdev4081.c<br>
+devices/gdev4693.c<br>
+devices/gdev8510.c<br>
+devices/gdevatx.c<br>
+devices/gdevbit.c<br>
+devices/gdevbj10.c<br>
+devices/gdevbmp.c<br>
+devices/gdevccr.c<br>
+devices/gdevcdj.c<br>
+devices/gdevcfax.c<br>
+devices/gdevcif.c<br>
+devices/gdevclj.c<br>
+devices/gdevcljc.c<br>
+devices/gdevdjtc.c<br>
+devices/gdevdm24.c<br>
+devices/gdevepsc.c<br>
+devices/gdevepsn.c<br>
+devices/gdevescp.c<br>
+devices/gdevgprf.c<br>
+devices/gdevhl7x.c<br>
+devices/gdevicov.c<br>
+devices/gdevifno.c<br>
+devices/gdevimgn.c<br>
+devices/gdevjbig2.c<br>
+devices/gdevjpx.c<br>
+devices/gdevl31s.c<br>
+devices/gdevlbp8.c<br>
+devices/gdevlj56.c<br>
+devices/gdevlp8k.c<br>
+devices/gdevlxm.c<br>
+devices/gdevmgr.c<br>
+devices/gdevn533.c<br>
+devices/gdevokii.c<br>
+devices/gdevpbm.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevperm.c<br>
+devices/gdevphex.c<br>
+devices/gdevpjet.c<br>
+devices/gdevpsim.c<br>
+devices/gdevrinkj.c<br>
+devices/gdevsppr.c<br>
+devices/gdevstc.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtknk.c<br>
+devices/gdevtsep.c<br>
+devices/gdevwpr2.c<br>
+devices/gdevxcf.c<br>
+devices/gdevxcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-13 13:51:27 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97277fcf0f70d482481ac329ce473e5687e7a935">97277fcf0f70d482481ac329ce473e5687e7a935</a>
+<blockquote>
+<p>
+ Bug 701906: Fix duplicate call to tiff_from_filep() that caused leak of TIFF object.<br>
+<br>
+ The code in tiff_rgb_print_page() did tfdev-&gt;tif = tiff_from_filep(), but<br>
+ then calls gdev_tiff_begin_page() which does the same thing, overwriting the<br>
+ original tfdev-&gt;tif.<br>
+<br>
+ Also changed tiff12_print_page() as it looks to have the same problem.<br>
+<br>
+ This fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -sOutputFile=tmp -sDEVICE=tiff48nc ../bug-701906.pdf<br>
+<br>
+devices/gdevtfnx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-13 14:03:25 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6690c60c3e1be875134150fa4909bff0de7d583f">6690c60c3e1be875134150fa4909bff0de7d583f</a>
+<blockquote>
+<p>
+ pdfwrite - For PDF input, copy any UserUnit to the output<br>
+<br>
+ If the input is PDF, and the input file uses the ugly UserUnit hack to<br>
+ work around MediaBox limits in Acrobat, and the CompatibilityLevel of<br>
+ the output is at least PDF 1.6, then do not apply the UserUnit to the<br>
+ MediaBox and do not scale the content. Instead pass the value of<br>
+ UserUnit to the pdfwrite device and insert it into the output page.<br>
+<br>
+ We use a special_op to inquire whether the device would like us to pass<br>
+ it the UserUnit. The pdfwrite device checks the current PDF level<br>
+ being emitted and either returns true, or false if too low a level is<br>
+ requested.<br>
+<br>
+ If it returns true the PDF interpreter does not apply the UserUnit<br>
+ scaling but instead uses a second special_op to inform the device what<br>
+ of the value of UserUnit.<br>
+<br>
+ The pdfwrite device adds any non-unity value of UserUnit to the page<br>
+ dictionary when emitting it.<br>
+<br>
+ If -dNoUserUnit is set we neither apply the UserUnit scaling nor pass it<br>
+ to the device.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_main.ps<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfp.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-12 15:51:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9e1d2f76cabf84576424af0c38dceef5881c2b21">9e1d2f76cabf84576424af0c38dceef5881c2b21</a>
+<blockquote>
+<p>
+ jbig2_hd_new(): return error if params-&gt;GRAYMAX is large enough that N wraps to zero.<br>
+<br>
+ This was noticed when investigating coverity warnings about params-&gt;GRAYMAX<br>
+ being tainted.<br>
+<br>
+jbig2dec/jbig2_halftone.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-12 15:48:50 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e6d0fcd87934f01d4fb3c3029558fea134fbd086">e6d0fcd87934f01d4fb3c3029558fea134fbd086</a>
+<blockquote>
+<p>
+ Attempt to quieten coverity complaints about tainted data from jbig2_get_int32() and jbig2_get_uint32().<br>
+<br>
+ E.g. see Coverity p11408:94824.<br>
+<br>
+jbig2dec/jbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-12 11:22:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d11a43b64a2e623aebdfa34f8ee992887dc5b2b2">d11a43b64a2e623aebdfa34f8ee992887dc5b2b2</a>
+<blockquote>
+<p>
+ Coverity p11408:350203: Stop coverity overflow warning about array of floats.<br>
+<br>
+ &amp;lutatobparts-&gt;matrix-&gt;cu.u points to something the size of three floats,<br>
+ but add_matrixwithbias() takes pointer to nine floats, which makes coverity<br>
+ complain.<br>
+<br>
+ This fix changes things so that we pass a pointer to something nine floats in<br>
+ size, which satisfies coverity.<br>
+<br>
+base/gsicc_create.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-12 10:29:16 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24ec06a27df63297796a379c95ee5d4b39040410">24ec06a27df63297796a379c95ee5d4b39040410</a>
+<blockquote>
+<p>
+ Bug 701894: fix the '--' and co options<br>
+<br>
+ The --, -+ and -@ need to add the file argument to the permit read list<br>
+ before attempting to open and interpret them.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 13:45:59 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=592fb032180aac0fc22a7c860ef116b38da8ca71">592fb032180aac0fc22a7c860ef116b38da8ca71</a>
+<blockquote>
+<p>
+ Coverity p11408:350214: fix use of uninitialised 'file'.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 13:41:29 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7da60037b788bec4217f6ee7017e238f541714ae">7da60037b788bec4217f6ee7017e238f541714ae</a>
+<blockquote>
+<p>
+ Coverity p11408:350217: avoid memcpy() with same buffers.<br>
+<br>
+pcl/pcl/pcindxed.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 12:44:26 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=658e14023fa84232c569ecc5528b77fd35bcf290">658e14023fa84232c569ecc5528b77fd35bcf290</a>
+<blockquote>
+<p>
+ Coverity p11408:350197: fix issue by initialising 'file' to NULL.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 11:17:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=11f8439f49a3704bb4506e02382a0e697e5edf8e">11f8439f49a3704bb4506e02382a0e697e5edf8e</a>
+<blockquote>
+<p>
+ Coverity p11408:350178: Stop coverity overflow warning about array of floats.<br>
+<br>
+base/gsicc_create.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 12:00:20 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1747b9267b4aac28e256820c5cea37af299af86">a1747b9267b4aac28e256820c5cea37af299af86</a>
+<blockquote>
+<p>
+ Make lack of freetype a hard error<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-24 10:09:55 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=37a322fb93c5cd1e96a4cad2ffccdc397f7c0ea5">37a322fb93c5cd1e96a4cad2ffccdc397f7c0ea5</a>
+<blockquote>
+<p>
+ Reinstate Apple devices (gdevadmp.c) as contrib devices<br>
+<br>
+configure.ac<br>
+contrib/contrib.mak<br>
+contrib/gdevadmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 10:21:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aad7bcab6a3aedc4e2bfecd7b1e6bf893c299d0e">aad7bcab6a3aedc4e2bfecd7b1e6bf893c299d0e</a>
+<blockquote>
+<p>
+ Better solution for commit 68aeff88e95c<br>
+<br>
+ This is a simplified (and fixed) solution for the problem addressed in commit<br>
+ 68aeff88e95c: instead of assiging to the 'fixed' type, then converting to<br>
+ ufixed (wrongly, in the original commit), just go straight to ufixed.<br>
+<br>
+ This solves coverity issues: 350493 and 350492<br>
+<br>
+base/gxhintn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-11 10:42:11 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2de09275898086e903a19812fd78e73381f7e71e">2de09275898086e903a19812fd78e73381f7e71e</a>
+<blockquote>
+<p>
+ Bug 695873: reverse search to auto-set GenericResourceDir<br>
+<br>
+ A -I path like:<br>
+<br>
+ /path/to/Resources/share/ghostscript/9.15/Resource/Init<br>
+<br>
+ Would cause us to wrongly set GenericResourceDir and the ICCProfilesDir because<br>
+ in both cases we'd search the path for the string 'Resource', and end up using:<br>
+<br>
+ /path/to/Resource<br>
+<br>
+ To work better, this uses the new and non-standard rsearch operator to search<br>
+ the path backwards.<br>
+<br>
+ I opted not to include the trailing directory separator at this stage because<br>
+ that complicates matters with platforms that uses different directory<br>
+ separators (Unix vs Windows vs OpenVMS, for example)<br>
+<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_res.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-09 12:51:05 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c198ac5dcb26fadc53074525cabb413e5395cdba">c198ac5dcb26fadc53074525cabb413e5395cdba</a>
+<blockquote>
+<p>
+ Clear out gs_gstate at the start of clist playback.<br>
+<br>
+ There are some elements of the (stack based) gs_gstate that were not being<br>
+ set by either GS_STATE_INIT_VALUES_CLIST, or gs_gstate_initialize, so set<br>
+ the entire structure to 0 before setting the values we care about. This<br>
+ was prompted by a customer that has made modifications to the clist playback<br>
+ that relied on gs_gstate.color[0/1].color_space being NULL or valid, but<br>
+ since it is so quick and only happens once per band, go ahead and do it.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-09 10:27:22 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7174b69e6c0027277fe1a9ece341c3380fe7979d">7174b69e6c0027277fe1a9ece341c3380fe7979d</a>
+<blockquote>
+<p>
+ Fix PDF 2.0 /Square annotation appearance generation<br>
+<br>
+ All the routines to generate annotation appearances are supposed to<br>
+ return a boolean value indicating whether an annotation has a valid<br>
+ Appearance (returns true, caller must run the appearance stream) or<br>
+ the appearance has been generated (false, caller must not attempt to<br>
+ run the appearance stream).<br>
+<br>
+ The /Square annotation was failing to return false if there was no<br>
+ appearance and one had been generated.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 17:40:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ba5b47dc979ca1590f280f482d432705e9b535bf">ba5b47dc979ca1590f280f482d432705e9b535bf</a>
+<blockquote>
+<p>
+ Coverity p11408:350177: avoid use of uninitialised state.start.x.<br>
+<br>
+ Probably not a problem in practise because we can't get gs_pe_closepat without<br>
+ earlier gs_pe_moveto or similar.<br>
+<br>
+base/gdevvec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 17:21:38 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4a3401e5e4f5828c67d7c65f77a3bb0106753649">4a3401e5e4f5828c67d7c65f77a3bb0106753649</a>
+<blockquote>
+<p>
+ Coverity p11408:350167: fixed use of uninitialised gp_file*.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 16:40:00 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f44249d69a36fa7233504bdb137af9ff5008ec37">f44249d69a36fa7233504bdb137af9ff5008ec37</a>
+<blockquote>
+<p>
+ Coverity Coverity p11408:350165: try to stop coverity warning about array of floats.<br>
+<br>
+ Coverity complains about passing &amp;float to something that assumes it is<br>
+ float[9]. Trying explicit cast of base object to float*.<br>
+<br>
+base/gsicc_create.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 16:25:01 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2029235dc8997314c1925e5786212a6c7331f0cf">2029235dc8997314c1925e5786212a6c7331f0cf</a>
+<blockquote>
+<p>
+ Coverity p11408:350164: only call memcpy() if buffers are different.<br>
+<br>
+ We could use memmove() instead, but this makes things a little clearer.<br>
+<br>
+pcl/pcl/pcindxed.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 12:31:08 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5605c6c6a9677013560a6a3c947f4b100eae4e09">5605c6c6a9677013560a6a3c947f4b100eae4e09</a>
+<blockquote>
+<p>
+ Coverity p11408:350160: attempt to avoid coverity issues when calling pl_dict_put().<br>
+<br>
+ Coverity doesn't like hard-coded 32 for the size of 'short<br>
+ unicode_fontname[16]', so use sizeof().<br>
+<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 15:13:50 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95151ae3c3c63100bc7ae958f59b8096e7a0f211">95151ae3c3c63100bc7ae958f59b8096e7a0f211</a>
+<blockquote>
+<p>
+ Improve handling of microscopic fonts with text rendering mode 3<br>
+<br>
+ Bug #701875 &quot;empty TIFF-file is generated when using -r300, correct output with -r72&quot;<br>
+<br>
+ In the past we've seen PDF producers set the text rendering mode to 3<br>
+ and then (goodness knows why) set a CTM where one of the scale factors<br>
+ is 0. In this case the scale factor isn't 0 but its absolutely minute,<br>
+ 5.3x10-6.<br>
+<br>
+ This evades our existing code, so here we improve it; we check to see<br>
+ if the CTM scales in either direction by a really small amount instead<br>
+ of 0 (0.000001).<br>
+<br>
+ In addition, we previously tried to patch up the CTM and use it anyway<br>
+ but really this is only going to make sense is one scale factor is<br>
+ tiny (or 0) and the other is sensible. If that's not the case then<br>
+ any displacement due to drawing the text will also be tiny. So lets<br>
+ simply ignore it.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 12:47:59 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0f7653fd4f1d1c5bf36719efcd8464eafcd46faf">0f7653fd4f1d1c5bf36719efcd8464eafcd46faf</a>
+<blockquote>
+<p>
+ Bug 701870: Use object number from Font rather than FontDescriptor<br>
+<br>
+ In case where two CIDFont /Font objects share a /FontDescriptor, because the<br>
+ /Font objects can contain different details like /CIDSystemInfo contents and<br>
+ /CIDToGIDMap, if we use the object number from the /FontDescriptor to validate<br>
+ the instance of the font we should use, we can end up reusing a (Postscript)<br>
+ font when we shouldn't. This can result in garbled or missing glyphs.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 12:08:52 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6882df85d37819d849476cf2b4822a90e64d9b24">6882df85d37819d849476cf2b4822a90e64d9b24</a>
+<blockquote>
+<p>
+ Add a couple of FIXMEs to the xps interpreter.<br>
+<br>
+xps/xpsimage.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 12:08:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7fac758d046c82d65fa69dd2c4bc0f1cf9712bc">b7fac758d046c82d65fa69dd2c4bc0f1cf9712bc</a>
+<blockquote>
+<p>
+ Remove unused gpdlpsi.mak file.<br>
+<br>
+gpdl/psi/gpdlpsi.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-08 11:32:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=328d27b3cccc89c4ff60529106489a9a635f0f72">328d27b3cccc89c4ff60529106489a9a635f0f72</a>
+<blockquote>
+<p>
+ Bug 701854: bj10v_print_page(): increase buffer by one byte to give space for sentinel.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -r928 -sOutputFile=tmp -sDEVICE=bj10v ../bug-701854.ps<br>
+<br>
+contrib/japanese/gdev10v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 10:08:35 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68aeff88e95ccfd1af430fe180597d624ad9f47e">68aeff88e95ccfd1af430fe180597d624ad9f47e</a>
+<blockquote>
+<p>
+ Old Type 1 hinter: protect against signed overflow<br>
+<br>
+ To avoid overflow during hinting, we tweak the balance of the size of the<br>
+ coordinates and the scaling in the hinter (this is only dealing with coords<br>
+ so large that hinting is largely pointless anyway).<br>
+<br>
+ But the code that does that didn't protect against signed overflow in the<br>
+ starting coordinates.<br>
+<br>
+ This is a naive protection to prevent an infinite (or near so) loop, but<br>
+ a) it's old code that shouldn't be in use anymore, and b) in practice it will<br>
+ make no difference to rendering with coordinates that large.<br>
+<br>
+base/gxhintn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 14:17:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=713645137a2fc483e5509bfd0f92d7311faeb614">713645137a2fc483e5509bfd0f92d7311faeb614</a>
+<blockquote>
+<p>
+ Some more transparency ops doc tweaks<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 16:55:15 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c3af6e12e4448b519d2b48c2047c0c83b3cf082">6c3af6e12e4448b519d2b48c2047c0c83b3cf082</a>
+<blockquote>
+<p>
+ Coverity issue 102147:323319: transform_pixel_region_render_skew(): don't return pointer to local data.<br>
+<br>
+base/gdevdflt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 16:18:32 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=66878fb30f37b06a532fdce39991f31642cdb09b">66878fb30f37b06a532fdce39991f31642cdb09b</a>
+<blockquote>
+<p>
+ Bug 701856: fix bad bracketting in original fix.<br>
+<br>
+devices/gdevepsn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 16:13:06 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76db3df8090127482960b742f15831e59816a05e">76db3df8090127482960b742f15831e59816a05e</a>
+<blockquote>
+<p>
+ Coverity issue 102147: initialise gx_device_color::type.<br>
+<br>
+ Might fix Coverity issue in base/gxiscale.c.<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 12:34:24 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9caccf9f09e06324f07822cc55e1737d881c6eb3">9caccf9f09e06324f07822cc55e1737d881c6eb3</a>
+<blockquote>
+<p>
+ Bug 701856: fixed buffer overflow in devices/gdevepsn.c.<br>
+<br>
+ Need to protect aginst overflow with high x_dpi when using local<br>
+ graphics_modes_24[] or graphics_modes_9[] arrays.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -r914 -sOutputFile=tmp -sDEVICE=eps9high ../bug-701856.pdf<br>
+<br>
+devices/gdevepsn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-07 11:57:35 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=018003614ad80910ca2c009eb1d523e8015756bc">018003614ad80910ca2c009eb1d523e8015756bc</a>
+<blockquote>
+<p>
+ Bug 701849: Fix buffer overflow in devices/gdevhl7x.c.<br>
+<br>
+ High values of pdev-&gt;x_pixels_per_inch result in Summary::pageWidth being<br>
+ greater than Summary::previousData's fixed size of 1500 bytes, which causes<br>
+ buffer overflow in resetPreviousData() (and possibly other places too).<br>
+<br>
+ So have changed to initSummary() to allocate Summary::previousData using<br>
+ gs_malloc(), and added freeSummary() to clean up.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -r968 -dFitPage -dUseCropBox -sPAPERSIZE=legal -sOutputFile=tmp -sDEVICE=hl7x0 ../bug-701849.pdf<br>
+<br>
+devices/gdevhl7x.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 15:25:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7da3de0c7662491fa2a0b6f5a638848bcf13a5fa">7da3de0c7662491fa2a0b6f5a638848bcf13a5fa</a>
+<blockquote>
+<p>
+ Bug 701847: make pj_common_print_page() work with any line_size.<br>
+<br>
+ Much of the code used to be hard-coded for fixed LINE_SIZE.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -sOutputFile=tmp -sDEVICE=lj250 ../bug-701847.pdf<br>
+<br>
+devices/gdevpjet.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 14:44:13 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=494eeedf73d13fac5710e56f3a8fb2e7e2379d73">494eeedf73d13fac5710e56f3a8fb2e7e2379d73</a>
+<blockquote>
+<p>
+ Bug 701846: fix use of uninitialised data in clj_media_size().<br>
+<br>
+ If param_read_float_array() fails, fres.data[] is unset. The values to use are<br>
+ always in res[].<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -dFIXEDMEDIA -sOutputFile=tmp -sDEVICE=cljet5pr ../bug-701846.pdf<br>
+<br>
+devices/gdevclj.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 12:41:28 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f6bc662909ab79e8fbe9822afb36e8a0eafc2b7">4f6bc662909ab79e8fbe9822afb36e8a0eafc2b7</a>
+<blockquote>
+<p>
+ Bug 701844: fixed output buffer size worst case in lp8000_print_page().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -dFIXEDMEDIA -sPAPERSIZE=legal -sOutputFile=tmp -sDEVICE=lp8000 ../bug-701844.pdf<br>
+<br>
+devices/gdevlp8k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 16:46:44 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ce681338646435ca064ab2d1b8bde1614e5ed3f1">ce681338646435ca064ab2d1b8bde1614e5ed3f1</a>
+<blockquote>
+<p>
+ PDF interpreter - preserve colour space on Image XObjects with Do<br>
+<br>
+ No bug number the customer file is large and looks confidential.<br>
+<br>
+ The problem is that the PDF file sets a custom colour space, then<br>
+ draws an image, the image is in a different colour space (DeviceRGB),<br>
+ the file then sets a new colour in the original space.<br>
+<br>
+ The PDF interpreter was changing the colour space in order to draw<br>
+ the image, but was not resetting it afterwards, which meant that the<br>
+ attempt to set the colour failed as the colour space was inappropriate.<br>
+<br>
+ I'm *amazed* this hasn't arisen before, its so clearly wrong.<br>
+<br>
+ This commit gets the colour space before executing the image, and puts<br>
+ it back again afterwards. We have to be careful to do the restoration<br>
+ in a stopped context because this code can be called when drawing a<br>
+ glyph, and we are not permitted to change colour space while in an<br>
+ uncoloured glyph, it throws an error.<br>
+<br>
+ In addition, the appearance generation for /Square annotations (and<br>
+ other types) was setting the colour space to white and filling the<br>
+ annotation rectangle, even if the /IC (Interior Color) key was not<br>
+ present. Acrobat appears not to do this so I've modified the code to<br>
+ not fill the annotation if there is no /IC in the annotation dictionary.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 11:56:07 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4e713293de84b689c4ab358f3e110ea54aa81925">4e713293de84b689c4ab358f3e110ea54aa81925</a>
+<blockquote>
+<p>
+ Bug 701843: avoid divide by zero in devices/gdevepsc.c:epsc_print_page().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -r8 -dNOCIE -dFitPage -sOutputFile=tmp -sDEVICE=epsonc ../bug-701843.pdf<br>
+<br>
+devices/gdevepsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 11:46:10 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f70ab2044429fe4b991801476ea3f4b4a5c0cdf4">f70ab2044429fe4b991801476ea3f4b4a5c0cdf4</a>
+<blockquote>
+<p>
+ Bug 701843: avoid divide by zero caused by custom resolution being too low.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -r8 -dNOCIE -dFitPage -sOutputFile=tmp -sDEVICE=eps9mid ../bug-701843.pdf<br>
+<br>
+devices/gdevepsn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-06 11:18:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ce2afc4f02617dee51f3322ae8386c4b46047c18">ce2afc4f02617dee51f3322ae8386c4b46047c18</a>
+<blockquote>
+<p>
+ Bug 701842: avoid buffer overflow in lxm5700m_print_page().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -sOutputFile=tmp -sDEVICE=lxm5700m ../bug-701842.ps<br>
+<br>
+devices/gdevlxm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 18:18:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=027c546e0dd11e0526f1780a7f3c2c66acffe209">027c546e0dd11e0526f1780a7f3c2c66acffe209</a>
+<blockquote>
+<p>
+ Bug 701842: Fix misindexing in gxicolor.c<br>
+<br>
+ We were incorrectly decrementing position per-component, rather<br>
+ than per-pixel (in 2 places).<br>
+<br>
+ Also, take care of some whitespace oddities.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 15:02:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1159afbcad927e1a32008b0ab87e257fc21da8e2">1159afbcad927e1a32008b0ab87e257fc21da8e2</a>
+<blockquote>
+<p>
+ Ensure strncpy() terminates when called from pjl_parsed_filename_to_string().<br>
+<br>
+ Passing strlen()+1 to strncpy() ensures that it will terminate the<br>
+ string. Possibly not required here because the code always terminates the<br>
+ string, but this might fix coverity issue 102147.<br>
+<br>
+pcl/pl/pjparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 14:59:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=67b4efc310af7bf9d30f84a70c6b9858ab138e3d">67b4efc310af7bf9d30f84a70c6b9858ab138e3d</a>
+<blockquote>
+<p>
+ Bug 701809: Fix out oob access in transform_pixel_region.<br>
+<br>
+ When collating pixels to write out using copy_color,<br>
+ we can only write within our array. Clip maxx/minx accordingly.<br>
+<br>
+base/gdevdflt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 14:54:22 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=02c566b4b5f3f60ff8ebd7f4523722c39c2d72e7">02c566b4b5f3f60ff8ebd7f4523722c39c2d72e7</a>
+<blockquote>
+<p>
+ Memento: Unlock a block with valgrind before checking it.<br>
+<br>
+ This avoids false positives on closedown.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 13:36:04 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f38c6b08c6582872af25fc669a5fd3bde9f32753">f38c6b08c6582872af25fc669a5fd3bde9f32753</a>
+<blockquote>
+<p>
+ Bug 701831: fixed buffer overflow in bjc_compress().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -sOutputFile=tmp -sDEVICE=bjc800 ../bug-701831.ps<br>
+<br>
+devices/gdevcdj.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 12:03:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b25cad42dc869e8e9d7ea58adae2c8baba0ee25d">b25cad42dc869e8e9d7ea58adae2c8baba0ee25d</a>
+<blockquote>
+<p>
+ Bug 701830: avoid buffer overflow in lips_rle_encode().<br>
+<br>
+ Worst case for lips_rle_encode() is 2*Length+2, so adjust corresponding alloc<br>
+ to match.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -r489 -dFitPage -sOutputFile=tmp -sDEVICE=lips4 ../bug-701830.eps<br>
+<br>
+contrib/lips4/gdevl4r.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 10:49:58 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e7118494be4162b8c2c06d8b7d4cb2d7ebb57f61">e7118494be4162b8c2c06d8b7d4cb2d7ebb57f61</a>
+<blockquote>
+<p>
+ Add -dALLOWPSTRANSPARENCY to the documentation.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 09:45:27 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=485904772c5f0aa1140032746e5a0abfc40f4cef">485904772c5f0aa1140032746e5a0abfc40f4cef</a>
+<blockquote>
+<p>
+ Bug 701841: remove .forceput from /.charkeys<br>
+<br>
+ When loading Type 1 or Truetype fonts from disk, we attempt to extend the glyph<br>
+ name table to include all identifiable glyph names from the Adobe Glyph List.<br>
+<br>
+ In the case of Type 1 fonts, the font itself (almost always) marks the<br>
+ CharStrings dictionary as read-only, hence we have to use .forceput for that<br>
+ case.<br>
+<br>
+ But for Truetype fonts, the CharStrings dictionary is created internally and is<br>
+ not read-only until *after* we have fully populated it (including the extended<br>
+ glyph names from the AGL), hence there is no need for .forceput, and no need to<br>
+ carry the security risk of using it.<br>
+<br>
+ Replace with regular put.<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-04 14:23:30 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=94d8955cb7725eb5f3557ddc02310c76124fdd1a">94d8955cb7725eb5f3557ddc02310c76124fdd1a</a>
+<blockquote>
+<p>
+ Bug 701818: better handling of error during PS/PDF image<br>
+<br>
+ In the xps device, if an error occurred after xps_begin_image() but before<br>
+ xps_image_end_image(), *if* the Postscript had called 'restore' as part of the<br>
+ error handling, the image enumerator would have been freed (by the restore)<br>
+ despite the xps device still holding a reference to it.<br>
+<br>
+ Simply changing to an allocator unaffected save/restore doesn't work because<br>
+ the enumerator holds references to other objects (graphics state, color space,<br>
+ possibly others) whose lifespans are inherently controlled by save/restore.<br>
+<br>
+ So, add a finalize method for the XPS device's image enumerator<br>
+ (xps_image_enum_finalize()) which takes over cleaning up the memory it allocates<br>
+ and also deals with cleaning up references from the device to the enumerator<br>
+ and from the enumerator to the device.<br>
+<br>
+devices/vector/gdevxps.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 15:30:19 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39b4cdb491c3e09434f5d2b9c334a898fb569850">39b4cdb491c3e09434f5d2b9c334a898fb569850</a>
+<blockquote>
+<p>
+ Update docs for current state of transparency ops<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 10:19:01 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1eac80695b2c6f2a85942a82518715549541969">d1eac80695b2c6f2a85942a82518715549541969</a>
+<blockquote>
+<p>
+ Add the ability to allow transparency ops in Postscript<br>
+<br>
+ -dALLOWPSTRANSPARENCY on the command line will prevent the undefining of the<br>
+ non-standard gs Postscript transparency operators.<br>
+<br>
+ Driving these operators in the wrong way can cause undefined behavior, hence<br>
+ not allowing them normally.<br>
+<br>
+ Also, use a better condition for dropping the transparency ops in:<br>
+ examples/transparency_example.ps<br>
+<br>
+Resource/Init/gs_init.ps<br>
+Resource/Init/pdf_main.ps<br>
+examples/transparency_example.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 08:50:45 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=27409d99b069e434c6863f43456cf8985bbdf7f8">27409d99b069e434c6863f43456cf8985bbdf7f8</a>
+<blockquote>
+<p>
+ Fix the quad glyph table<br>
+<br>
+ This might fix Coverity ID 350194. Even if it doesn't it is incorrect<br>
+ so fix the initialisation of the table.<br>
+<br>
+devices/vector/gdevagl.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-05 08:48:10 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=407c98a38c3a6ac1681144ed45cc2f4fc374c91f">407c98a38c3a6ac1681144ed45cc2f4fc374c91f</a>
+<blockquote>
+<p>
+ txtwrite - guard against using GS_NO_GLYPH to retrieve Unicode values<br>
+<br>
+ Bug 701822 &quot;Segmentation fault at psi/iname.c:296 in names_index_ref&quot;<br>
+<br>
+ Avoid using a glyph with the value GS_NO_GLYPH to retrieve a glyph<br>
+ name or Unicode code point from the glyph ID, as this is not a valid<br>
+ ID.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+psi/zbfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-04 16:12:04 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=af004276fd8f6c305727183c159b83021020f7d6">af004276fd8f6c305727183c159b83021020f7d6</a>
+<blockquote>
+<p>
+ Bug 701829: ep_print_image(): protect against memcmp() beyond buffer.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -r12 -sOutputFile=tmp -sDEVICE=escp ../bug-701829.pdf<br>
+<br>
+devices/gdevcdj.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 11:55:23 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f73e8b4d578e69a17f452fa60d2130c5faaefd6">4f73e8b4d578e69a17f452fa60d2130c5faaefd6</a>
+<blockquote>
+<p>
+ Fix bugs 701787, 701806, 701810. Problems with cdj970 device.<br>
+<br>
+ As Robin mentioned in bug 701787, the device was changing resolution AFTER<br>
+ the device had been opened and all of the buffers configured.<br>
+<br>
+ Move the &quot;one time&quot; initial setup into the open function, leaving the code<br>
+ to write the header in the print_page function. Presumably that only needs<br>
+ to be written once even if there are multiple pages.<br>
+<br>
+ Also add a check for valid resolutions since it appears that the intent was<br>
+ to have the &quot;Quality&quot; parameter set up 300 or 600 dpi. Other deskjet devices<br>
+ have this type of check.<br>
+<br>
+ Add a gs_closedevice if the Quality is changed since this will change the<br>
+ resolution and thus the page buffer geometry.<br>
+<br>
+ Lastly, fix cdj970_put_params so that errors are not ignored for all but the<br>
+ last (which happened to be BlackCorrect).<br>
+<br>
+ These changes prevent the bugs cited, but remain untested except for some<br>
+ parameter testing to make sure bad values don't cause memory violations. It<br>
+ does seem that some parameter values that are out of range (like Quality) are<br>
+ ignored, but that may be intentional.<br>
+<br>
+contrib/gdevdj9.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-04 15:32:04 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eaba1d97b62831b42c51840cc8ee2bc4576c942e">eaba1d97b62831b42c51840cc8ee2bc4576c942e</a>
+<blockquote>
+<p>
+ Bug 701828: make dot24_print_page() return error instead of divide by zero.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -r2 -sOutputFile=tmp -sDEVICE=necp6 ../bug-701828.pdf<br>
+<br>
+devices/gdevdm24.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-04 13:00:04 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a6f7464dddc689386668a38b92dfd03cc1b38a10">a6f7464dddc689386668a38b92dfd03cc1b38a10</a>
+<blockquote>
+<p>
+ Bug 701827: fixed incorrect buffer expansion in lxm5700m_print_page().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -r425 -dFitPage -sOutputFile=tmp -sDEVICE=lxm5700m ../bug-701827.eps<br>
+<br>
+devices/gdevlxm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-04 12:30:33 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2793769ff107d8d22dadd30c6e68cd781b569550">2793769ff107d8d22dadd30c6e68cd781b569550</a>
+<blockquote>
+<p>
+ Bug 701819: fixed ordering in if expression to avoid out-of-bounds access.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -r965 -sOutputFile=tmp -sDEVICE=pcx16 ../bug-701819.pdf<br>
+<br>
+devices/gdevpcx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 18:09:30 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=366ad48d076c1aa4c8f83c65011258a04e348207">366ad48d076c1aa4c8f83c65011258a04e348207</a>
+<blockquote>
+<p>
+ Bug 701815: avoid uninitialised bytes being &gt;7, which broke indexing.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -sOutputFile=tmp -sDEVICE=jetp3852 ../bug-701815.pdf<br>
+<br>
+devices/gdev3852.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 14:55:16 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ec065fd285f8064ac34cc160106dd730569ebc75">ec065fd285f8064ac34cc160106dd730569ebc75</a>
+<blockquote>
+<p>
+ Clear eol padding bits in &quot;atx&quot; devices.<br>
+<br>
+ This upsets the blank line detection and therefore can randomly<br>
+ change the output.<br>
+<br>
+devices/gdevatx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 14:26:52 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e4dce29961108c6fef5c02bf4d5e527b265bf8d8">e4dce29961108c6fef5c02bf4d5e527b265bf8d8</a>
+<blockquote>
+<p>
+ Mask eol padding bits for pngmono device in CLUSTER builds.<br>
+<br>
+devices/gdevpng.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 14:24:08 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9076e48cf91ba6bf4e939b0562c53e6cbb62282e">9076e48cf91ba6bf4e939b0562c53e6cbb62282e</a>
+<blockquote>
+<p>
+ Fix previous planm eol masking fix.<br>
+<br>
+ The previous attempt to fix the masking of eol padding bits<br>
+ for planm would have failed in the width == multiple of 8 case.<br>
+ Also make it dependent on CLUSTER here.<br>
+<br>
+devices/gdevplan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 12:38:41 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1126deff06d81d4fa1975ea0ed3a3b64e9cf0661">1126deff06d81d4fa1975ea0ed3a3b64e9cf0661</a>
+<blockquote>
+<p>
+ Update &quot;planm&quot; device to clear eol padding bits.<br>
+<br>
+ This should avoid md5 changes in the alldevs cluster test.<br>
+<br>
+devices/gdevplan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 12:22:55 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bcb881e566d90ae43648085ff1edfdcddcd6eb50">bcb881e566d90ae43648085ff1edfdcddcd6eb50</a>
+<blockquote>
+<p>
+ Fix &quot;cif&quot; device in CLUSTER builds.<br>
+<br>
+ Use a hardcoded &quot;clusterout&quot; filename for embedding rather<br>
+ than the real one in CLUSTER builds. This stops the md5sum<br>
+ from changing randomly.<br>
+<br>
+devices/gdevcif.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-11-01 10:26:44 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aadb53eb834b3def3ef68d78865ff87a68901804">aadb53eb834b3def3ef68d78865ff87a68901804</a>
+<blockquote>
+<p>
+ Tiffsep and Tiffsep1 - abort on multi-page input wtithout %d OutputFile<br>
+<br>
+ Bug #701821 &quot;Segmentation fault at tiff//libtiff/tif_dirinfo.c:513 in TIFFFindField&quot;<br>
+<br>
+ The tiffsep and tiffsep1 only set 'code' to an error when an attempt is<br>
+ made to write a second output file without using %d in the OutputFile<br>
+ specification.<br>
+<br>
+ This causes problems later when attempting to process the files. The<br>
+ devices should exit without trying to further process the pages under<br>
+ these conditions and this commit returns immediately on error.<br>
+<br>
+ The other devices like this already return immediately on error, it<br>
+ looks like the code here was copied between devices without realising<br>
+ that the tiffsep and tiffsep1 devices didn't exit when the error<br>
+ condition was set.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 19:47:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9c196bb7f6873b4fe43a649fc87cba363c6af8e5">9c196bb7f6873b4fe43a649fc87cba363c6af8e5</a>
+<blockquote>
+<p>
+ Fix devicen device for new file security world.<br>
+<br>
+ Again, update the code to allow spot files to be written.<br>
+<br>
+base/gdevdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 19:24:44 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a6e36c29b69b4d15aac872e37303dcf9cb8d7739">a6e36c29b69b4d15aac872e37303dcf9cb8d7739</a>
+<blockquote>
+<p>
+ Update spotcmyk device for new file access security.<br>
+<br>
+ This device writes the data to a file, then reads it back in,<br>
+ and writes out various spot &quot;.pcx&quot; files. Accordingly we<br>
+ need to make the file readable too, and then make the .pcx<br>
+ files writable.<br>
+<br>
+base/gdevdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 18:21:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbdb5f8527007b482d4e6037b558dbf3e6a06d3a">dbdb5f8527007b482d4e6037b558dbf3e6a06d3a</a>
+<blockquote>
+<p>
+ Fix spurious rangechecks from cljet5pr device.<br>
+<br>
+ The device would rangecheck whenever it was called with a<br>
+ param list that didn't contain HWResolution. Now, if it's<br>
+ not given an HWResolution, look at the device's current<br>
+ value.<br>
+<br>
+devices/gdevclj.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 17:42:48 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5673b5a50f141440329c62ee5b53eefcd585a3f">f5673b5a50f141440329c62ee5b53eefcd585a3f</a>
+<blockquote>
+<p>
+ pdfimg: Avoid ID's varying by filename in CLUSTER builds.<br>
+<br>
+ This was upsetting the alldevs runs.<br>
+<br>
+devices/gdevpdfimg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 17:01:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b5bc53eb7223f8999882a5d8e2e35c27fe7a0b57">b5bc53eb7223f8999882a5d8e2e35c27fe7a0b57</a>
+<blockquote>
+<p>
+ Bug 701788: added comment about asn/valgrind detecting leaks in fontconfig.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 16:22:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=255eef0a7d9d24962ebbcbb4b1858e44b803f16b">255eef0a7d9d24962ebbcbb4b1858e44b803f16b</a>
+<blockquote>
+<p>
+ mgr4 device: clear any unused trailing bits for each line.<br>
+<br>
+ This avoids valgrind errors and varying md5sums in the alldevs<br>
+ cluster test.<br>
+<br>
+devices/gdevmgr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 16:21:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=351a2251b4a80fa31ac15229036318b01d124532">351a2251b4a80fa31ac15229036318b01d124532</a>
+<blockquote>
+<p>
+ Squash warning caused by previous fix.<br>
+<br>
+ Include the correct header for 'free' before using it.<br>
+<br>
+contrib/eplaser/gdevescv.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 13:12:47 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f54414c8b15b2c27d1dcadd92cfe84f6d15f18dc">f54414c8b15b2c27d1dcadd92cfe84f6d15f18dc</a>
+<blockquote>
+<p>
+ Bug 701808: return error from okiibm_print_page1() if x_dpi too high.<br>
+<br>
+ Avoids asan error in:<br>
+ ./sanbin/gs -dBATCH -dNOPAUSE -dSAFER -r599 -sOutputFile=tmp -sDEVICE=okiibm ../bug-701808.pdf<br>
+<br>
+devices/gdevokii.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 15:36:22 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=464107095e614d54417ffd2bedbdc852efee0961">464107095e614d54417ffd2bedbdc852efee0961</a>
+<blockquote>
+<p>
+ Update lbp8 device to not use a fixed sized buffer for line data.<br>
+<br>
+devices/gdevlbp8.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 14:25:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5eaccd845c9957dff754ebfdde417fe5d82e5e82">5eaccd845c9957dff754ebfdde417fe5d82e5e82</a>
+<blockquote>
+<p>
+ Update vdb.pl script to latest version.<br>
+<br>
+toolbin/vdb.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 14:17:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0d998f17c495a12b04904113ff676c7427089883">0d998f17c495a12b04904113ff676c7427089883</a>
+<blockquote>
+<p>
+ Fix gdevescv for operation with Memento.<br>
+<br>
+ Blocks returned by system malloc can't be freed by Memento_free.<br>
+<br>
+ Also, avoid a problem in CLUSTER builds.<br>
+<br>
+contrib/eplaser/gdevescv.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 11:55:38 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=714e8995cd582d418276915cbbec3c70711fb19e">714e8995cd582d418276915cbbec3c70711fb19e</a>
+<blockquote>
+<p>
+ Bug 701807: avoid buffer overflow in tiff12_print_page().<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -r650 -sOutputFile=tmp -sDEVICE=tiff12nc ../bug-701807.pdf<br>
+<br>
+devices/gdevtfnx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 10:33:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c64d06deea998199a0e30180fd884286b4b2256c">c64d06deea998199a0e30180fd884286b4b2256c</a>
+<blockquote>
+<p>
+ Nobble various uses of &quot;time&quot; in the code in CLUSTER builds.<br>
+<br>
+ This causes the bjccolor device at least to give indeterminate<br>
+ results. Nobbling the rest won't hurt.<br>
+<br>
+contrib/eplaser/gdevescv.c<br>
+contrib/gdevbjca.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevtifs.c<br>
+devices/vector/gdevpdfe.c<br>
+devices/vector/gdevpsu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 10:31:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bf72f1a3dd5392ee8291e3b1518a0c2c5dc6ba39">bf72f1a3dd5392ee8291e3b1518a0c2c5dc6ba39</a>
+<blockquote>
+<p>
+ Fix valgrind problems with gdevbjca.c<br>
+<br>
+ 2 problems here. Firstly, we could access off the end of a row<br>
+ while looking for runs. Change the indexing to fix this.<br>
+<br>
+ Secondly, we could overrun our gamma tables due to unexpectedly<br>
+ large values. Add some clamping.<br>
+<br>
+contrib/gdevbjca.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 10:29:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa7f0cde80ce734ddc22bde34d121c1be5c7deb4">fa7f0cde80ce734ddc22bde34d121c1be5c7deb4</a>
+<blockquote>
+<p>
+ Fix various incorrect casts in contrib devices.<br>
+<br>
+ Various contrib devices cast a gx_color_index (a 32 or 64<br>
+ bit value typically containing 24 bits of data) down to<br>
+ a gx_color_value before manipulating it. This is a typo,<br>
+ copied into several places in the code. Correct it here.<br>
+<br>
+contrib/gdevcd8.c<br>
+contrib/gdevdj9.c<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-31 10:17:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1fd4a73480c5a2f900b1541b45a62ffcc75e12d">f1fd4a73480c5a2f900b1541b45a62ffcc75e12d</a>
+<blockquote>
+<p>
+ Fix warnings when building contrib on windows.<br>
+<br>
+ MSVC is much more sensitive to casting types than gcc is, it<br>
+ seems. Accordingly avoid making doubles when we want floats, and<br>
+ make all casts down to int (or byte) explicit.<br>
+<br>
+base/gxdevice.h<br>
+contrib/gdevbjc_.c<br>
+contrib/gdevbjc_.h<br>
+contrib/gdevcd8.c<br>
+contrib/gdevdj9.c<br>
+contrib/gdevgdi.c<br>
+contrib/gdevln03.c<br>
+contrib/gdevlx32.c<br>
+contrib/gdevmd2k.c<br>
+contrib/gdevop4w.c<br>
+contrib/japanese/gdev10v.c<br>
+contrib/japanese/gdevalps.c<br>
+contrib/japanese/gdevespg.c<br>
+contrib/japanese/gdevmjc.c<br>
+contrib/japanese/gdevnpdl.c<br>
+contrib/japanese/gdevrpdl.c<br>
+contrib/lips4/gdevl4r.c<br>
+contrib/lips4/gdevlips.h<br>
+contrib/pcl3/eprn/mediasize.c<br>
+contrib/pcl3/eprn/mediasize.h<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+contrib/pcl3/src/pclcap.c<br>
+contrib/pcl3/src/pclgen.c<br>
+devices/gdevphex.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-30 17:40:18 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=67a101f3eb888bc651cc13bfb06280a669a84967">67a101f3eb888bc651cc13bfb06280a669a84967</a>
+<blockquote>
+<p>
+ Fix contrib.mak to work on windows.<br>
+<br>
+ Building Debug-contrib|win32 will currently attempt to run<br>
+ contrib.mak 3 times due to poor commenting out of make lines.<br>
+ For me, this manifested itself as new instances of Visual<br>
+ Studio starting up and attempting to &quot;upgrade&quot; the makefile.<br>
+<br>
+contrib/contrib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 17:16:03 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4fcbece468706e0e89ed2856729b2ccacbc112be">4fcbece468706e0e89ed2856729b2ccacbc112be</a>
+<blockquote>
+<p>
+ Avoid some devices dying due to inappropriate resolutions.<br>
+<br>
+contrib/japanese/gdev10v.c<br>
+contrib/japanese/gdevalps.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 16:01:39 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=19cebe708b9ee3d9e0f8bcdd79dbc6ef9ddc70d2">19cebe708b9ee3d9e0f8bcdd79dbc6ef9ddc70d2</a>
+<blockquote>
+<p>
+ Avoid division by zero with bj10v device.<br>
+<br>
+ When called with a low resolution, we can end up dividing by zero.<br>
+ Spot this in the open call and give a rangecheck error.<br>
+<br>
+contrib/japanese/gdev10v.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 17:28:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=849e74e5ab450dd581942192da7101e0664fa5af">849e74e5ab450dd581942192da7101e0664fa5af</a>
+<blockquote>
+<p>
+ Bug 701799: avoid out-of-range array access in mj_color_correct().<br>
+<br>
+ Code is obscure, so this fix merely avoids out-of-range access in the simplest<br>
+ way possible, without understanding what the code is trying to do.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -sOutputFile=tmp -sDEVICE=mj6000c ../bug-701799.pdf<br>
+<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 16:49:13 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89f58f1aa95b3482cadf6977da49457194ee5358">89f58f1aa95b3482cadf6977da49457194ee5358</a>
+<blockquote>
+<p>
+ Bug 701794: check for x_dpi out of range in epsc_print_page().<br>
+<br>
+ Avoids out-of-bounds of local arrays graphics_modes_9 and graphics_modes_24.<br>
+<br>
+ Larger diff than would like, because can't return error from within<br>
+ declarations in old-style C.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -r680 -sOutputFile=tmp -sDEVICE=epsonc ../bug-701794.pdf<br>
+<br>
+devices/gdevepsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 16:20:56 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=863ada11f9a942a622a581312e2be022d9e2a6f7">863ada11f9a942a622a581312e2be022d9e2a6f7</a>
+<blockquote>
+<p>
+ Bug 701793: check we are within buffer before comparing buffer contents.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -sOutputFile=tmp -sDEVICE=mj700v2c ../bug-701793.pdf<br>
+<br>
+contrib/japanese/gdevmjc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 15:49:25 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9f39ed4a92578a020ae10459643e1fe72573d134">9f39ed4a92578a020ae10459643e1fe72573d134</a>
+<blockquote>
+<p>
+ Bug 701792: Avoid going beyond buffer in GetNumSameData() and GetNumWrongData().<br>
+<br>
+ GetNumSameData() compared buffer contents before checking that we are still<br>
+ within bounds of buffer, which caused the bug.<br>
+<br>
+ Have made similar fix to GetNumWrongData() because it has similar error.<br>
+<br>
+ Fixes address sanitizer error in:<br>
+ ./sanbin/gs -sOutputFile=tmp -sDEVICE=lips4v ../bug-701792.pdf<br>
+<br>
+contrib/lips4/gdevlips.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-29 14:13:25 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d31e25ed5b130499e0d880e4609b1b4824699768">d31e25ed5b130499e0d880e4609b1b4824699768</a>
+<blockquote>
+<p>
+ Bug 701788: include space for string terminator in call to malloc in cif_print_page().<br>
+<br>
+ Fixes ./sanbin/gs -sOutputFile=tmp -sDEVICE=cif ../bug-701788.pdf<br>
+<br>
+devices/gdevcif.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-28 17:29:34 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6e6c69487094b877bc56fcc07b9840f6e5b95925">6e6c69487094b877bc56fcc07b9840f6e5b95925</a>
+<blockquote>
+<p>
+ Bug #701803, fix missing Greek symbols.<br>
+<br>
+ New symbol set ISO/IEC 8859-7 Latin/Greek alphabet added.<br>
+<br>
+pcl/pl/plsymbol.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-28 10:37:46 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7870f4951bcc6a153f317e3439e14d0e929fd231">7870f4951bcc6a153f317e3439e14d0e929fd231</a>
+<blockquote>
+<p>
+ Bug 701795: Segv due to image mask issue<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-28 14:56:56 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e6b2518ed4b130ad649b96bf914558e642e414d">1e6b2518ed4b130ad649b96bf914558e642e414d</a>
+<blockquote>
+<p>
+ clusterpush.pl: also exclude sanbin and sanobj directories.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-28 14:41:35 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2df79b5fdf97e1e33503634910ad08672bcee39">a2df79b5fdf97e1e33503634910ad08672bcee39</a>
+<blockquote>
+<p>
+ Added support for MEMENTO_BREAKAT, equivalent to (gdb) call Memento_breakAt(...).<br>
+<br>
+ It can be more convenient to specify this on the command line rather than<br>
+ manually stop in gdb.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-28 14:37:48 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=450da26a76286a8342ec0864b3d113856709f8f6">450da26a76286a8342ec0864b3d113856709f8f6</a>
+<blockquote>
+<p>
+ Bug 701785: fixed sanitizer heap-buffer-overflow in lprn_is_black().<br>
+<br>
+ In contrib/lips4/gdevlprn.c:lprn_is_black(), it seems that bpl is not<br>
+ necessarily a multiple of lprn-&gt;nBw, so we need to explicitly avoid straying<br>
+ into the next line's data.<br>
+<br>
+ This also avoids accessing beyond our buffer if we are already on the last<br>
+ line, and so fixes the sanitizer error.<br>
+<br>
+ Fixes:<br>
+ ./sanbin/gs -sOutputFile=tmp -sDEVICE=lips2p ../bug-701785.pdf<br>
+<br>
+contrib/lips4/gdevlprn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-27 19:44:35 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=93cb0c0adbd9bcfefd021d59c472388f67d3300d">93cb0c0adbd9bcfefd021d59c472388f67d3300d</a>
+<blockquote>
+<p>
+ Fix Bug 701786: jetp3852 stack corruption caused by width/resolution<br>
+<br>
+ This &quot;contrib&quot; driver has a questionable design where it collects the raster<br>
+ data from the graphics library into a stack based array, but the size of the<br>
+ array cannot accomodate high resolutions or wide pages. Issue an error and<br>
+ fail (without stack corruption).<br>
+<br>
+devices/gdev3852.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-26 17:14:23 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c2dc335c212750e0fb8ae157063bc06cafa8d3e">2c2dc335c212750e0fb8ae157063bc06cafa8d3e</a>
+<blockquote>
+<p>
+ Color Laserjet device - properly check params<br>
+<br>
+ Bug #701796 &quot;Segmentation fault at devices/gdevclj.c:269 in clj_media_size&quot;<br>
+<br>
+ The test in clj_media_size() as incorrect, it didn't signal an error if<br>
+ there was no HWResolution in the param list. This left the parameter<br>
+ 'fres' undefined leading to a potential invalid memory read, or a<br>
+ divide-by-zero error.<br>
+<br>
+ This commit returns an error if we get a param list with no HWResolution<br>
+ I'm not absolutely certain if this is correct, but at least signalling<br>
+ an error is better than a seg fault.<br>
+<br>
+devices/gdevclj.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-26 15:43:38 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bfeff28bb56ee4424ac78619792c18bf4f5104ef">bfeff28bb56ee4424ac78619792c18bf4f5104ef</a>
+<blockquote>
+<p>
+ Coverity ID #126579 take 2<br>
+<br>
+ Commit 13b3c67366aef69beed5f9c7e058c59a03714997 addressed this, but<br>
+ there were 2 instances and that only fixed one. Fix the other here.<br>
+<br>
+devices/vector/gdevpdfg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-26 15:04:26 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aba3375ac24f8e02659d9b1eb9093909618cdb9f">aba3375ac24f8e02659d9b1eb9093909618cdb9f</a>
+<blockquote>
+<p>
+ Prevent a heap-buffer overrun<br>
+<br>
+ Bug #701791 &quot;global-buffer-overflow at devices/gdevpjet.c:177 in pj_common_print_page&quot;<br>
+<br>
+ We were not setting the unused bytes at the end of a line to 0, which<br>
+ later caused us to read uninitialised data from the line, and attempt<br>
+ to use that as the index into an 8-byte table. If the uninitialised<br>
+ data was greater than 16 then we would read off the end of the table.<br>
+<br>
+ Its 'probably' benign since we aren't using tis data, and we probably<br>
+ won't try to read from an invalid address, but its poor practice and<br>
+ its easily fixed. Setting the buffer to 0x00 before we start ensures<br>
+ that any padding bytes are in the valid range for the table.<br>
+<br>
+devices/gdevpjet.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-25 18:48:05 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4b9e86a33b237740df682369300f1a9507dc63c5">4b9e86a33b237740df682369300f1a9507dc63c5</a>
+<blockquote>
+<p>
+ Memento: Fix annoyance with %p<br>
+<br>
+ Windows displays %p without a leading 0x. Linux adds a leading 0x.<br>
+ Use a macro to give consistent results on all platforms.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-25 13:52:44 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17ad4a12dd40799655b71a93de1209a6a0f24204">17ad4a12dd40799655b71a93de1209a6a0f24204</a>
+<blockquote>
+<p>
+ Coverity issues: Assignment of overlapping union members<br>
+<br>
+ Strictly speaking assigning one element of union to another, overlapping<br>
+ element of a different size is undefined behavior, hence assign to intermediate<br>
+ variables before setting the other element in the union.<br>
+<br>
+ Coverity #: 350159, 350173, 350205, 350176, 350215, 350192<br>
+<br>
+base/gsfunc4.c<br>
+base/gsparam.c<br>
+pcl/pcl/pgparse.c<br>
+psi/zfont2.c<br>
+psi/ztype.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-25 13:30:56 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=62a1c3cdbb374d2f90b00f7aa276be50961c580a">62a1c3cdbb374d2f90b00f7aa276be50961c580a</a>
+<blockquote>
+<p>
+ Tweak the section on building with Visual Studio<br>
+<br>
+doc/Make.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-24 10:15:19 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e80779ae9f53fac617d1416f7075a1b1b7f7688c">e80779ae9f53fac617d1416f7075a1b1b7f7688c</a>
+<blockquote>
+<p>
+ Reduce confusion about contrib.mak dependency<br>
+<br>
+ We have two contri.mak files, one in devices/ and one in contrib/, both have<br>
+ dependency declarations:<br>
+ CONTRIB_MAK=...<br>
+<br>
+ This changes the devices/contrib.mak to use:<br>
+ DCONTRIB_MAK=...<br>
+<br>
+ Prepending the 'D' to avoid the two getting muddled.<br>
+<br>
+devices/contrib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-25 13:53:31 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ae928f80e70e04e89f0c36a7b58332fb0a9b19d">9ae928f80e70e04e89f0c36a7b58332fb0a9b19d</a>
+<blockquote>
+<p>
+ Fix CAL ETS compiler flags.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-24 15:04:58 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9001678252cc6c4e45251db70b83daae39b7d4ec">9001678252cc6c4e45251db70b83daae39b7d4ec</a>
+<blockquote>
+<p>
+ Bug 697545 (Memory Squeezing): fixed hpgl_polyfill_using_current_line_type() leak on error.<br>
+<br>
+ Need to always call hpgl_grestore().<br>
+<br>
+ Fixes this leak:<br>
+ MEMENTO_FAILAT=15840 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ../pcl5cfts/fts.1552<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-24 08:31:38 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d6746f08c592057dfd3abe1b957c8b23971508cc">d6746f08c592057dfd3abe1b957c8b23971508cc</a>
+<blockquote>
+<p>
+ Memento tweaks: libbacktrace warning/instructions.<br>
+<br>
+ If we can't load libbacktrace.so, give a warning that backtraces<br>
+ will be cryptic.<br>
+<br>
+ Add info to memento.h about where people can get libbacktrace<br>
+ from, how to build it, and where to install it.<br>
+<br>
+ Also add some code from Julian Smith to call gdb to extract<br>
+ backtrace data; this doesn't work for me, so it's disabled<br>
+ by default for now.<br>
+<br>
+base/memento.c<br>
+base/memento.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 13:29:38 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=de22d4d177a5911310d4af0777e87a8809a1622c">de22d4d177a5911310d4af0777e87a8809a1622c</a>
+<blockquote>
+<p>
+ Change pdf implementation to use CalGray and CalRGB<br>
+<br>
+ It was previously mapping these to DeviceGray and DeviceRGB for some<br>
+ reason.<br>
+<br>
+ See tests_private/pdf/PDF_1.7_FTS/fts_08_0829.pdf for example where this<br>
+ matters.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-21 17:37:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1cd6ee4a3724fbf70718483aa702c7af0f0a6cc">a1cd6ee4a3724fbf70718483aa702c7af0f0a6cc</a>
+<blockquote>
+<p>
+ Use CAL implementation of ETS in WITH_CAL builds.<br>
+<br>
+base/cal.mak<br>
+base/ets.h<br>
+base/gxdownscale.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-27 11:16:23 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a44d0ce727f2095fbbedb8bf6b1e062fca3c8f01">a44d0ce727f2095fbbedb8bf6b1e062fca3c8f01</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in gx_cpath_assign_preserve.<br>
+<br>
+ Update functionality to propagate error codes correctly and release path segments.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15840 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1552<br>
+<br>
+base/gxacpath.c<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 15:08:02 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4637eeae2415b593d84bb60dbac5369eb2ecc54b">4637eeae2415b593d84bb60dbac5369eb2ecc54b</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_LB.<br>
+<br>
+ Update code to propagate error codes correctly and prevent font leaks.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=19935 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1480<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 11:49:08 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc3b7d7f6882e1ed1ff41083ff22893efc5c5afa">dc3b7d7f6882e1ed1ff41083ff22893efc5c5afa</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_EP.<br>
+<br>
+ Update code to propagate error codes correctly and prevent graphic state leaks.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15166 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1470<br>
+<br>
+base/gxstroke.c<br>
+pcl/pcl/pgpoly.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 14:08:02 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ff1490e231c8b02ce77386a75f23ac76e97cc29">3ff1490e231c8b02ce77386a75f23ac76e97cc29</a>
+<blockquote>
+<p>
+ Bug 697545 (Memory Squeezing): fixed owl.pcl leak in hpgl_draw_current_path().<br>
+<br>
+ In pcl/pcl/pgdraw.c:hpgl_draw_current_path() case hpgl_char_fill_edge, ensure<br>
+ that we call hpgl_grestore() before looking at error from (*fill) (pgs).<br>
+<br>
+ Fixes leak at 10093 in:<br>
+ MEMENTO_SQUEEZEAT=1 membin/gpcl6 -sDEVICE=bit -o /dev/null pcl/examples/owl.pcl<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 15:08:29 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ce07cab3d1e9e38401cfaddd0312bd06f48422b">5ce07cab3d1e9e38401cfaddd0312bd06f48422b</a>
+<blockquote>
+<p>
+ Fix hpgl_call_and_check() macro to not define &lt;code&gt; local variable.<br>
+<br>
+ This can conflict with surrounding code. Use &lt;hpgl_call_and_check_code&gt;<br>
+ instead, which should be unique enough.<br>
+<br>
+pcl/pcl/pgmisc.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 10:02:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1bb7a148bc6a4e4a8736d27a937465aab95069e5">1bb7a148bc6a4e4a8736d27a937465aab95069e5</a>
+<blockquote>
+<p>
+ Revision for a34130a136fa that will actually work<br>
+<br>
+ The Coverity report was misleading, and I missed a compiler warning with<br>
+ commit a34130a136fa.<br>
+<br>
+ This resolves the compiler warning, and should keep coverity happy.<br>
+<br>
+base/gstype42.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 09:39:11 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d7243cea061373f592a6d9113626393ff0eb7d8">6d7243cea061373f592a6d9113626393ff0eb7d8</a>
+<blockquote>
+<p>
+ Coverity ID 350179: Add buffer size check for string<br>
+<br>
+ Before we append chars to a string buffer, check it's large enough<br>
+<br>
+base/genconf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-23 09:22:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a34130a136fa9a61af3991224438dbf31b834767">a34130a136fa9a61af3991224438dbf31b834767</a>
+<blockquote>
+<p>
+ Coverity ID 350219: Fix mistake in TTF post table handling<br>
+<br>
+ Mistakenly passing a pointer into a macro, rather than the variable.<br>
+<br>
+base/gstype42.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-11 10:20:04 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5573498b2d9abe918794d377729edeab6b28e1fb">5573498b2d9abe918794d377729edeab6b28e1fb</a>
+<blockquote>
+<p>
+ Add arch.h dependency for CAL.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-21 15:12:57 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a7fe4b47d438c78af0fc03adf030d465cfe0ba4f">a7fe4b47d438c78af0fc03adf030d465cfe0ba4f</a>
+<blockquote>
+<p>
+ Apply DOPS to &quot;bare&quot; PS operator in PDF's<br>
+<br>
+ PDF 1.2 defined a PS operator that could be used in streams to execute<br>
+ PostScript. This went away with PDF 1.3 2nd edition spec., but Ghostscript<br>
+ retained the functionality. In commit e7086fc6 we disabled the execution<br>
+ of Subtype /PS streams (requiring -dDOPS to enable them), but the &quot;PS&quot;<br>
+ operator, that sends PostScript strings to the underlying Postscript<br>
+ interpreter remained unaffected, leading to Bug 700176 exploit.<br>
+<br>
+ This patch also disables the &quot;PS&quot; operator unless -dDOPS is specified.<br>
+ Using -dDOPS is *NOT* recommended, although the fixes for Bug700176<br>
+ should prevent that particular exploit.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-22 10:57:59 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b4521b891de48d7f62be739d02749c4aeca2fde8">b4521b891de48d7f62be739d02749c4aeca2fde8</a>
+<blockquote>
+<p>
+ Fix dvipdf script<br>
+<br>
+ Bug #701771 &quot;dvipdf script broken&quot;<br>
+<br>
+ Apparently the script requires a trailing '-'<br>
+<br>
+lib/dvipdf<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-22 09:32:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c836caa3e05a286ac56f39ed45dab65eb979ee9">7c836caa3e05a286ac56f39ed45dab65eb979ee9</a>
+<blockquote>
+<p>
+ Update genfontmap.ps for SAFER default<br>
+<br>
+ Bug #701766 &quot; genfontmap.ps Unrecoverable error, exit code 1&quot;<br>
+<br>
+ The genfontmap.ps program, supplied as part of the support tools in<br>
+ 'toolbin' rather than Ghostscript proper, relies on the non-standard<br>
+ PostScript extension operator '.sort'.<br>
+<br>
+ As part of the security hardening, as many non-standard operators as<br>
+ possible were removed from Ghostscript when SAFER is set, including<br>
+ .sort, and with version 9.50 SAFER becomes the default.<br>
+<br>
+ This commit simply updates the genfontmap.ps program to check that it<br>
+ is being run with NOSAFER, emits a warning and exits if this is not the<br>
+ case. Also update the comments to indicate why we are doing this.<br>
+<br>
+toolbin/genfontmap.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-17 11:51:59 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95e76aad97b1b1c2da51f7fc7e904168fadb1399">95e76aad97b1b1c2da51f7fc7e904168fadb1399</a>
+<blockquote>
+<p>
+ Remove the 136 LL3 font set fontmap files<br>
+<br>
+ The fontmap for the type 1 136 set is now in the repo with the font files<br>
+<br>
+lib/Fontmap.URW-136.T1<br>
+lib/Fontmap.URW-136.TT<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-17 11:39:18 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=164db4ba0d766e591884079d6fb21ab63829549d">164db4ba0d766e591884079d6fb21ab63829549d</a>
+<blockquote>
+<p>
+ Fontmap: cope better with bare filename maps<br>
+<br>
+ We don't automatically add FontResourceDir to the libfile search path, so a<br>
+ name to plain file name mapping will only work if the directory containing the<br>
+ file is explicitly added to the search path. For example:<br>
+<br>
+ /Dingbats (d050000l.pfb) ;<br>
+<br>
+ With this change, in addition to the search path and the bare file name, we'll<br>
+ also try opening the file in the FontResourceDir, so users can use such custom<br>
+ mappings simply by adding the font files to the FontResourceDir (usually:<br>
+ Resource/Font).<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-19 11:06:46 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=618c3867b8edec9d0ea757949c926d4290995ac7">618c3867b8edec9d0ea757949c926d4290995ac7</a>
+<blockquote>
+<p>
+ Pattern handling- relax a heuristic<br>
+<br>
+ Bug #701753 &quot;Error reading a content stream&quot; with pdf using Type3 font&quot;<br>
+<br>
+ This file uses a type 3 font with a FontMatrix more usually found in<br>
+ type 1 font; [0.001 0 0 0.001 0 0]. It is also a coloured font, and<br>
+ uses a Pattern colour space with a Shading function to colour the text.<br>
+<br>
+ The Pattern cell, when scaled by the Font Matrix, results in a mapping<br>
+ of the step matrix to device space where the matrix determinant is less<br>
+ than 1/1,000,000. We detect this as a degenerate matrix and throw an<br>
+ error.<br>
+<br>
+ Acrobat renders an empty page.<br>
+<br>
+ So relax this heuristic further from 10^-6 to 10^-9, this allows the<br>
+ file to render and doesn't cause any changes in our regression tests.<br>
+<br>
+ Of course, at this cell size, the pattern renders blank, just as it<br>
+ does with Acrobat.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-16 08:18:59 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7acf36de36e6972be8a892078d214eea8e311cdd">7acf36de36e6972be8a892078d214eea8e311cdd</a>
+<blockquote>
+<p>
+ Fix bug 699457: Parameter range checking wrong (would not spot bad values).<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-16 08:04:34 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1170f928cc98b64a26edc275b66f081be9079cbb">1170f928cc98b64a26edc275b66f081be9079cbb</a>
+<blockquote>
+<p>
+ Fix bug 701719: Parens seem wrong -- fixed for clarity.<br>
+<br>
+base/gxclthrd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-16 16:12:50 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=928ae0dbcf9a2307bb33ba8d2abd83274fc34a7d">928ae0dbcf9a2307bb33ba8d2abd83274fc34a7d</a>
+<blockquote>
+<p>
+ Change a URL string to a an href link in the footers.<br>
+<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/sample_downscale_device.htm<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-16 06:52:51 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=65dbe88e660adcfba315fe559fcd7fd97628ee49">65dbe88e660adcfba315fe559fcd7fd97628ee49</a>
+<blockquote>
+<p>
+ Fix bug 701718: Use separate 'if' in clist_fillpage.<br>
+<br>
+ The intent was to return the error code if clist_close_writer_and_init_reader<br>
+ failed, THEN run clist_finish_page and similarly return if that fails.<br>
+<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-16 06:43:04 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e22ef03cdd31263ba1266f3d53aef7be4467e405">e22ef03cdd31263ba1266f3d53aef7be4467e405</a>
+<blockquote>
+<p>
+ Fix bug 701715. Problem in thresh_remap.c binary output.<br>
+<br>
+ I never use binary output -- just -p for PostScript output, so this<br>
+ was untested.<br>
+<br>
+toolbin/halftone/thresh_remap/thresh_remap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:39:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8a3309451ded2335b7f7ab5ebf1c19eebad8b32c">8a3309451ded2335b7f7ab5ebf1c19eebad8b32c</a>
+<blockquote>
+<p>
+ Bring master up to date with 9.50 branch<br>
+<br>
+ docs, dates etc<br>
+<br>
+ Dates and versions for 9.28 RC 1<br>
+<br>
+ Date for 9.28 rc2<br>
+<br>
+ Doc updates, changelog, news etc<br>
+<br>
+ Update to note explicitly case sensitivity on Windsows<br>
+<br>
+ In News.htm and History9.htm<br>
+<br>
+ Dates, docs, etc for 9.28 rc3<br>
+<br>
+ Dates and docs for 9.28 rc4<br>
+<br>
+ Small changelog tweak<br>
+<br>
+ Change version to 9.50<br>
+<br>
+ Update changelog<br>
+<br>
+ Fix a mistake in the news section<br>
+<br>
+ Dates etc for 9.50 release<br>
+<br>
+ Plus a comment on going to 9.50, rather than 9.28.<br>
+<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-15 09:27:39 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ac5c8747c9f9e2710a315ff25d41a7b9a592b583">ac5c8747c9f9e2710a315ff25d41a7b9a592b583</a>
+<blockquote>
+<p>
+ Version number, to dovetail with release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 18:29:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e7488d8a4d2bb48d6285d4ba3db1539206f0e67f">e7488d8a4d2bb48d6285d4ba3db1539206f0e67f</a>
+<blockquote>
+<p>
+ Have warning honor -dQUIET<br>
+<br>
+ Have the warning about calling .lockfileaccess or .setsafe when the controls are<br>
+ already in place honor the -dQUIET/-q command line params.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 18:07:29 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=75275c5c001699b32dfdc1d7d7977c8c4c9f2c80">75275c5c001699b32dfdc1d7d7977c8c4c9f2c80</a>
+<blockquote>
+<p>
+ Add words about .currentpathcontrolstate operator<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 10:20:19 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=74e468866b53e1a11d641549841b06027266ce39">74e468866b53e1a11d641549841b06027266ce39</a>
+<blockquote>
+<p>
+ Update docs on SAFER<br>
+<br>
+ to reflect that SAFER is now the default, and remove the comments about making<br>
+ SAFER the default &quot;in the future&quot;.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-11 15:10:41 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=72ab3591097a2e5ae5201f4a28d3560b019a1019">72ab3591097a2e5ae5201f4a28d3560b019a1019</a>
+<blockquote>
+<p>
+ PDF interpreter - handle ObjStm with contents which are non-delimited<br>
+<br>
+ No bug number, confidential file supplied by a customer.<br>
+<br>
+ This is in the same area as commit<br>
+ d9889892feaac3ca09f85d9bbdc001b1aec50cc3<br>
+<br>
+ In this case the file is actually completely valid and exposes a flaw<br>
+ in our processing of ObjStm streams. We 'tokenise' the entire contents<br>
+ of the ObjStm, for performance reasons, when we first need to read an<br>
+ object from it. This caused problems if we read too many objects which<br>
+ was dealt with in the commit above.<br>
+<br>
+ In this case, however, what we have is objects which do not have any<br>
+ delimiter, so the tokeniser carries straight on, instead of stopping<br>
+ when it reaches the end of the object (as given by the difference<br>
+ between successive offsets). For example, if we have three null objects<br>
+ then the (decompressed) stream would read nullnullnull, each object<br>
+ has a different offset and the length of each is given by subtracting<br>
+ one offset from the next.<br>
+<br>
+ What we were reading was, literally, nullnullnull which of course is not<br>
+ legal.<br>
+<br>
+ This commit leverages off the code in the commit to fix the extra<br>
+ objects and uses the same approach, we set up a ReusableStream on the<br>
+ decompressed ObjStm so we can seek around in it, then read each object<br>
+ by seeking to the offset, setting up a SubFileDecode (so we stop at the<br>
+ end of the object) and reading the object.<br>
+<br>
+ That works as well for this case, albeit with a (negligible in this<br>
+ case) performance penalty). We check at the end of reading the objects<br>
+ individually, and if we don't have enough objects then we raise a<br>
+ warning.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-11 12:06:07 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbe920c86d42919620a425d0933d9dcbfaa1c3cb">fbe920c86d42919620a425d0933d9dcbfaa1c3cb</a>
+<blockquote>
+<p>
+ PDF interpreter - do not unconditionally restore state in update_alpha<br>
+<br>
+ Bug #701644 &quot;Error: /unregistered in --.pdfexectoken--&quot;<br>
+<br>
+ The problem is caused by the insanely complicated (and inefficient)<br>
+ way the file is constructed. We have a SMask in a Group, which is<br>
+ enclosed within another Group.<br>
+<br>
+ When we call start a transparency mask we call pdf_prepare_drawing()<br>
+ which calls pdf_update_alpha(). Crucially this is called after we have<br>
+ entered a substream for an enclosing Group, but it does not begin a<br>
+ new substream.<br>
+<br>
+ However, pdf_update_alpha() assumes that if the smask_id has changed<br>
+ then a new viewer state has been saved, and the first thing it does<br>
+ is restore that state. If no such state has been saved (as here) then<br>
+ the code to restore the viewer state sees this as an error (which it is)<br>
+<br>
+ We fix this by checking to see if a viewer state has been pushed before<br>
+ trying to restore to it.<br>
+<br>
+devices/vector/gdevpdfg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-10 17:13:16 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9dddc61852d012b867e0353c7897b9c5301e17e6">9dddc61852d012b867e0353c7897b9c5301e17e6</a>
+<blockquote>
+<p>
+ PDF interpreter - Ignore invalid MediaBox array<br>
+<br>
+ Again, no bug, the specimen file is a confidential customer file.<br>
+<br>
+ The file contains, on page 60, an invalid MediaBox:<br>
+<br>
+ /MediaBox[ 0 0 612 792 0 0 720 917]<br>
+<br>
+ The 8 values were unloaded onto the stack, but only 4 were consumed<br>
+ leading to errors later in processing. This commit checks the length<br>
+ of the array and if it isn't exactly 4 then it exits and uses the<br>
+ current page size instead.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-10 15:51:13 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d305e46c4af1af14dfe79f7ebab6d2edf168f068">d305e46c4af1af14dfe79f7ebab6d2edf168f068</a>
+<blockquote>
+<p>
+ PDF interpreter - match observed Acrobat processing of Widget annots<br>
+<br>
+ No bug for this, arising from a customer file.<br>
+<br>
+ It appears Acrobat does not render Widget annotations unless the<br>
+ annotation dictionary contains a /FT and a /T key, either directly in<br>
+ the annotation dictionary or inherited from a Form Definition Field<br>
+ dictionary (via the AcroForm /Fields entry).<br>
+<br>
+ This commit checks annotations to see if they are Widgets, then checks<br>
+ to see if both /FT sand /T are present. If either is missing we walk<br>
+ back up the FDF heirarchy using the /Parent key, storing any FT or T<br>
+ keys in the annotation dictionary as we go.<br>
+<br>
+ We don't actually care what the associated values are, we only care if<br>
+ they keys are present, so reversing the lookup is acceptable here.<br>
+<br>
+ We then re-test the annotation dictionary for the presence of both keys<br>
+ and if either is missing we do not render the annotation.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-10 10:15:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=797ddfc6ef5f0cdfba664f550fe57acc43f309bb">797ddfc6ef5f0cdfba664f550fe57acc43f309bb</a>
+<blockquote>
+<p>
+ Fix the logic for permitted directories<br>
+<br>
+ The logic to match a permitted path ending in a directory separator with any<br>
+ file in that directory (but only that directory) was wrong, causing us to<br>
+ reject such cases.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-10 09:29:48 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d45d594ea5660976a21106ea864eb879801827b1">d45d594ea5660976a21106ea864eb879801827b1</a>
+<blockquote>
+<p>
+ ps2write - restore missing %%PageTrailer comment<br>
+<br>
+ Bug #701659 &quot;Missing %%PageTrailer commen&quot;<br>
+<br>
+ An oversight in commit 96c381cce28c27eac182549441a6c5025b0dcdd6<br>
+ caused the comment to be omitted.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-09 16:45:31 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34774ab185f17186b26949f5fee118dee9114d3a">34774ab185f17186b26949f5fee118dee9114d3a</a>
+<blockquote>
+<p>
+ PDF interpreter - fix /None case of Line Ending style<br>
+<br>
+ Bug #701622 &quot;pdfwrite device fails with annotation appearance&quot;<br>
+<br>
+ This is, in fact, nothing at all to do with pdfwrite. The problem is<br>
+ that, when generating an Appearance stream for a /Line Annotation which<br>
+ is defined without an Appearance stream, the /None line ending style<br>
+ was not popping the copy of the annotation dictionary.<br>
+<br>
+ This led to an error in the annotation. If a previous annotation used<br>
+ transparency, then this would cause the compositor to get confused,<br>
+ because we would start the transparency in the Line annotation, but<br>
+ the error meant we would not close the transparency group.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-07 00:02:27 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b2c1beac237865bde26c7fa921d24d17ecda6fab">b2c1beac237865bde26c7fa921d24d17ecda6fab</a>
+<blockquote>
+<p>
+ pdfwrite - preserve rendering intent<br>
+<br>
+ bug #701487 &quot;Renedring intent not preserved by pdfwrite&quot;<br>
+<br>
+ The pdfwrite device was not previously handling rendering intent changes<br>
+ this commit adds a rendering_intent member to the pdfwrite device<br>
+ structure, initialises it to 1 (absolute colorimetric) and then tracks<br>
+ changes to the graphics state, emitting /RI entries in ExtGSatet<br>
+ dictionaries as required.<br>
+<br>
+ This shows a number of small progressions in the test suite, and marked<br>
+ progressions with icc_v4_profile.pdf and icc_rendering_intent.pdf.<br>
+<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-06 17:42:53 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=faef233630240edfc3ad9f5ea154b5b32ed51c75">faef233630240edfc3ad9f5ea154b5b32ed51c75</a>
+<blockquote>
+<p>
+ pdfwrite - Use CA and ca for text with transparency<br>
+<br>
+ Bug #701631 &quot;pdfwrite: mishandling of alphas with Text render mode 2&quot;<br>
+<br>
+ The problem is in both the PDF interpreter and pdfwrite. In the past<br>
+ the PDF interpreter has never been able to create a fill+stroke<br>
+ primitive, because PostScript doesn't support that. However we added<br>
+ the ability for pdfwrite to maintain text rendering modes, for reasons<br>
+ of quality, which breaks that assumption.<br>
+<br>
+ Although we added the stroke and fill constant alpha to the C graphics<br>
+ state when we moved the PDF graphics state into the C graphics state,<br>
+ nothing actually ever used them. Instead the PDF interpreter sets a<br>
+ single 'opacity' alpha channel, based on whether the current operation<br>
+ is a stroke or a fill. Because we could not emit a combined operation<br>
+ this worked as we would set the opacity separately for each operation.<br>
+<br>
+ Of course for pdfwrite this doesn't work, and looking to the future<br>
+ when the fill+stroke primitive is available in the graphics library,<br>
+ we will need to do away with the opacity.alpha and properly use the<br>
+ fill and stroke alphas stored in the graphics state. For now, however,<br>
+ we need to continue to use the opacity.alpha, but when we are handling<br>
+ text (in pdfwrite) actually use the values of stroke and fill alpha<br>
+ instead of opacity.alpha.<br>
+<br>
+ So add a 'for_text' boolean to all the routines whihch need to set or<br>
+ update the alpha, and when writing the ExtGState, if we are handling<br>
+ text then use CA and ca instead of opacity.alpha.<br>
+<br>
+ This has also mean altering the XPS interpreter so that it sets the<br>
+ stroke and fill alphas as well as opacity.alpha, otherwise pdfwrite<br>
+ doesn't know which value to use for text operations.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfg.h<br>
+devices/vector/gdevpdft.c<br>
+devices/vector/gdevpdts.c<br>
+devices/vector/gdevpdtt.c<br>
+xps/xpscolor.c<br>
+xps/xpsimage.c<br>
+xps/xpsopacity.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-05 14:49:18 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=21a10f9e2cb9134c351fd568fc73222f2917e159">21a10f9e2cb9134c351fd568fc73222f2917e159</a>
+<blockquote>
+<p>
+ PDF interpreter - Improve PreserveAnnots<br>
+<br>
+ PreserveAnnots currenlty works in conjunction with ShowAnnotTypes, but<br>
+ We should really have a separate control for this.<br>
+<br>
+ This commit adds a new /PreserveAnnotTypses (must be set from PostScript<br>
+ in the same way as ShowAnnotTypes). PreserveAnnots and PreserveAnnotTypes<br>
+ only work with a device which can preserve Annotations (currently this<br>
+ is the pdfwrite device only).<br>
+<br>
+ If the device supports Annotation preservation, and PreserveAnnots is<br>
+ true (the default0 then for each annotation we consult the Types array,<br>
+ if the annotation is to be preserved then we pass it to the device. If<br>
+ not, then we pass the annotation to the 'draw' routines which will<br>
+ render teh annotation instead.<br>
+<br>
+ Using the two separate controls allows us to selectively control, by<br>
+ type, whther annotations are preserved, rendered, or simply ignored<br>
+ altogether.<br>
+<br>
+ Also fix an omission, and some typos, in the documentation for<br>
+ ShowAnnots in Use.htm<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-07 18:41:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=61c489110685f7cab8cbbbca7b15d9b5cb2463d0">61c489110685f7cab8cbbbca7b15d9b5cb2463d0</a>
+<blockquote>
+<p>
+ Bug 701657: Allocate &quot;memory&quot; device in immovable gc memory<br>
+<br>
+ Devices are supposed to be allocated in memory that cannot relocate (i.e.<br>
+ non-gc memory or an immovable allocation). The memory device accessible from<br>
+ Postscript (makeimagedevice/makewordimagedevice) was being created in regular,<br>
+ relocatable gc memory.<br>
+<br>
+ This caused an invalid memory access when cleaning up subclassed devices, as the<br>
+ one device in the chain may have moved. So switch to using an immovable<br>
+ allocation.<br>
+<br>
+base/gsdevmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-01 10:35:48 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d990b065c228802b3913602b4309165e42c08e9">2d990b065c228802b3913602b4309165e42c08e9</a>
+<blockquote>
+<p>
+ Fix memory corruption setting a halftone<br>
+<br>
+ When setting a new halftone in the graphics state, we try to re-use the data<br>
+ from the existing device halftone.<br>
+<br>
+ The problem is that the device halftone can have higher component indices than<br>
+ there are components in the new halftone we are creating. In this case, we can<br>
+ end up writing off the end of the components array for the new halftone<br>
+ structure.<br>
+<br>
+ Simply check that the new halftone has enough components before doing the<br>
+ duplication.<br>
+<br>
+base/gsht.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-30 13:40:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f03bac8ec2dabfff5583bf6afdd2b77f1885f8ef">f03bac8ec2dabfff5583bf6afdd2b77f1885f8ef</a>
+<blockquote>
+<p>
+ pdfwrite - don't honour /Producer key in DOCINFO pdfmark<br>
+<br>
+ Bug #701639 &quot;pdfwrite should not honour the /Producer key in DOCINFO pdfmark&quot;<br>
+<br>
+ The Producer in the document information dictionary (and XML Metadata)<br>
+ is defined quite clearly as the application which produced the PDF file<br>
+ from its native format.<br>
+<br>
+ Ghostscript uses the Producer key (if present in the pdfmark) to set<br>
+ the Producer, but it should not do so. Adobe Acrobat Distiller (at<br>
+ least the end user version) does not permit this value to be altered.<br>
+<br>
+ On reflection we can see why; in the case of a problem with a PDF file<br>
+ its important to know which application created it, and we should not<br>
+ let PostScript obscure that (we already do not pass the Producer<br>
+ information on when the input is PDF).<br>
+<br>
+ The code did already attempt to overwrite any Producer string which<br>
+ contained 'Distiller' (I have no idea why) and that code contained an<br>
+ error which could lead to an invalid Document Information dictionary<br>
+ being created.<br>
+<br>
+ This commit removes the ability for DOCINFO pdfmarks to alter the<br>
+ Producer, which obviously fixes the bug.<br>
+<br>
+ However..... it is actually important for our commercial customers to<br>
+ be able to set this value. A problem with a PDF file created by one of<br>
+ our customer's products should be reported to that customer, not us, as<br>
+ we will not be able to investigate the problem while our customer<br>
+ should be able to. At the very least our customer will know how to<br>
+ retrieve the configuration of Ghostscript being used.<br>
+<br>
+ So permit the commercial version of Ghostscript to set the /Producer<br>
+ from a pdfmark.<br>
+<br>
+devices/vector/gdevpdfm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-27 13:26:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=77f79475fd0419d16f1efe7812a44a9720fef10b">77f79475fd0419d16f1efe7812a44a9720fef10b</a>
+<blockquote>
+<p>
+ Bug 701634: Correctly handle file name of &quot;\0&quot;<br>
+<br>
+ Attempting to open a file with a filename string starting with a NULL<br>
+ character should be treated the same as if the string was zero length.<br>
+<br>
+ Not doing so created a broken file object leading to several operations<br>
+ resulting in a segfault.<br>
+<br>
+ Also, add cleanup in the event of such an error, freeing memory allocated in<br>
+ preparing the gs stream object.<br>
+<br>
+base/sfxcommon.c<br>
+psi/zfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-27 00:05:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef597bf4a05814a97d05866868f9b96b98746ae9">ef597bf4a05814a97d05866868f9b96b98746ae9</a>
+<blockquote>
+<p>
+ Correct Memento usage example in header.<br>
+<br>
+base/memento.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 10:47:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7db398d549a03ff5d37ec991eb60f01378eac88d">7db398d549a03ff5d37ec991eb60f01378eac88d</a>
+<blockquote>
+<p>
+ Revised comment for 8992f00edfd1c39154c013489de2a01d2e9a92ee<br>
+<br>
+ Make it clearer why the revised behaviour is required.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 09:34:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8992f00edfd1c39154c013489de2a01d2e9a92ee">8992f00edfd1c39154c013489de2a01d2e9a92ee</a>
+<blockquote>
+<p>
+ Bug 701313: Disable libtiff callbacks when libtiff is shared<br>
+<br>
+ It seems that libtiff uses global variables to store the error/warning callbacks<br>
+ so if two callers in the exe are using the libtiff shared lib, very bad things<br>
+ happen (usually a segfault).<br>
+<br>
+ So, if that's how we're linked, set the callbacks to NULL.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 18:37:21 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6293a99abfdc73b8881b2090cd7b01a1fbef5370">6293a99abfdc73b8881b2090cd7b01a1fbef5370</a>
+<blockquote>
+<p>
+ Fix pdf14_accum for DeviceN target devices such as display<br>
+<br>
+ Also fix display device for DeviceN (-dDisplayFormat=16#a0800).<br>
+ Not sure when, but it had bit-rotted.<br>
+<br>
+ The pdf14_accum device now has the DeviceN devn_params available since<br>
+ it now includes gx_devn_prn_device_common (rather than gx_prn_device_common).<br>
+ A pdf14_accum_CMYKSpot device is added that is used when the target device<br>
+ has more than 4 components. The pdf14_accum_CMYKSpot keeps the target device<br>
+ (e.g. display) device equiv_cmyk_colors and devn_params updated as the clist<br>
+ is being written.<br>
+<br>
+base/gdevp14.c<br>
+base/gscdevn.c<br>
+base/lib.mak<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-25 04:57:22 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=74787042b3259d51538d31556c38239d72539e3f">74787042b3259d51538d31556c38239d72539e3f</a>
+<blockquote>
+<p>
+ Run toolbin/headercompile.pl and update dependencies in Makefiles.<br>
+<br>
+ Move the definition of x_pixel within the headers to ensure<br>
+ gdevcmp.h stands alone.<br>
+<br>
+ Include a ufst header to ensure that gxfapiu.h stands alone.<br>
+<br>
+base/gxfapiu.h<br>
+base/lib.mak<br>
+base/tiff.mak<br>
+devices/contrib.mak<br>
+devices/devs.mak<br>
+devices/gdevx.h<br>
+devices/gdevxcmp.h<br>
+psi/int.mak<br>
+toolbin/headercompile.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-25 14:35:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb7802dc979aaa0e9e43310de0f1e8dcc7b31b2c">eb7802dc979aaa0e9e43310de0f1e8dcc7b31b2c</a>
+<blockquote>
+<p>
+ Bug 578865: Fix typo<br>
+<br>
+ Fix typo in previous commit.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-19 12:07:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=73bd448d2ebabad9ee31053abf897325a639cba1">73bd448d2ebabad9ee31053abf897325a639cba1</a>
+<blockquote>
+<p>
+ Bug 578865: Push transparency group for non idempotent shadings.<br>
+<br>
+ Shadings that write the same pixels more than once can be<br>
+ rendered incorrectly for blendmodes that aren't idempotent<br>
+ (or for non solid opacities). In such cases, push a transparency<br>
+ group so that the shading can be written just once, and<br>
+ then safely blended.<br>
+<br>
+ Note that this doesn't capture shadings that are rendered<br>
+ via zshfill.<br>
+<br>
+base/gdevp14.c<br>
+base/gstparam.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 18:52:16 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d1d6dc851e23edb36ac6e5db1bdf0edbba262bd">1d1d6dc851e23edb36ac6e5db1bdf0edbba262bd</a>
+<blockquote>
+<p>
+ Knockout groups should knockout the group alpha (and shape) too.<br>
+<br>
+ When marking within a knockout group, for each pixel we mark, we<br>
+ throw away the current colorant values in the destination, and<br>
+ base the calculations of the new colorant values on the stored<br>
+ backdrop values.<br>
+<br>
+ We were failing to do this for the group alpha and shape<br>
+ calculations. This could lead to the group alpha getting out of<br>
+ sync with the actual colorant values. We were seeing this with<br>
+ shadings (particularly gradient shadings) where the shadings<br>
+ paint some pixels more than once.<br>
+<br>
+ This becomes much more obvious with the forthcoming commit to<br>
+ use knockout groups for shadings with either transparency or<br>
+ non-idempotent blend modes.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-24 15:48:54 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05e794d14a2853c45a08d5c49d50d1fa5cadaf6c">05e794d14a2853c45a08d5c49d50d1fa5cadaf6c</a>
+<blockquote>
+<p>
+ Cope with .setsafe(global) being called when already 'SAFER'<br>
+<br>
+ As we default to SAFER file controls now, we want to cope with .setsafe and<br>
+ .setsafeglobal being called either when already SAFER, or called multiple times.<br>
+<br>
+ This means adding a .currentpathcontrolstate operator so we don't try to<br>
+ influence the path control lists after control is activated.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+psi/zfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-24 09:18:47 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ca729649efc3b041237b8b45bd2d011b70143ff">5ca729649efc3b041237b8b45bd2d011b70143ff</a>
+<blockquote>
+<p>
+ tiffsep(1): Cope with .tiff ending as well as .tif<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 20:04:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1daff4546ae8fae46fc4acb8b0bef013753488a">d1daff4546ae8fae46fc4acb8b0bef013753488a</a>
+<blockquote>
+<p>
+ Recast validate to use gs_file_name_check_separator.<br>
+<br>
+ Avoid using gp_file_name_directory_separator, as windows can<br>
+ have 2 different directory separators.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 18:05:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f4fc81482ecfef51adb4af98f6ac214c7e64bdb">3f4fc81482ecfef51adb4af98f6ac214c7e64bdb</a>
+<blockquote>
+<p>
+ Remove spurious call to gp_validate_path_len()...<br>
+<br>
+ ...in gx_device_open_output_file()<br>
+<br>
+ There is no need to validate the path in gx_device_open_output_file() as it will<br>
+ be done at a lower level (gp_fopen) for paths that require it (we only validate<br>
+ *after* the Postscript style %device% paths have been expanded into 'real'<br>
+ paths).<br>
+<br>
+ This also interacts badly with the revised handling of formatted string<br>
+ file names, hence remove it.<br>
+<br>
+base/gsdevice.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 17:56:34 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f874c5b9d2d5a3798dc00e53149c4a470ce5da01">f874c5b9d2d5a3798dc00e53149c4a470ce5da01</a>
+<blockquote>
+<p>
+ Fix tiffsep(1) interaction with file permissions lists<br>
+<br>
+ The previous solution didn't quite work, when using formatted strings for<br>
+ output file names (i.e. output-%d.tif).<br>
+<br>
+ This adds a dedicated gs_remove_outputfile_control_path() to mirror<br>
+ gs_add_outputfile_control_path() and uses those for the dynamic adding and<br>
+ removing of separation output file names.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 17:11:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1c253838b0e1ccbadc5c0bdb6e3bde59b3b00a1">a1c253838b0e1ccbadc5c0bdb6e3bde59b3b00a1</a>
+<blockquote>
+<p>
+ Update path validation to accept multiple *'s as special case.<br>
+<br>
+ Previously we interpretted multiple *'s as meaning the same as<br>
+ single *'s. Now we use them to mean &quot;just those chars that<br>
+ might be created by the use of a %...{d,x,u,i,o,X} format<br>
+ specifier&quot;.<br>
+<br>
+base/gpmisc.c<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 16:41:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3147ffb314f344520fb22c8bc57d4afcdc3c9c62">3147ffb314f344520fb22c8bc57d4afcdc3c9c62</a>
+<blockquote>
+<p>
+ Improve OutputFile handling of %d etc.<br>
+<br>
+ Only accept %d (and friends) (as opposed to anything starting with %).<br>
+ Only accept legal combinations of flags/widths/precision etc.<br>
+ Generate a more conservative wildcard.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 09:25:27 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a38bf66e8e041f21ebb25492e576262a55b318b1">a38bf66e8e041f21ebb25492e576262a55b318b1</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks and SEGV in pcl_font_header.<br>
+<br>
+ Update pcl_font_header to avoid freeing uninitialised font structure and also<br>
+ double freeing the font.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=17247 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0573<br>
+<br>
+pcl/pcl/pcsfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-22 20:11:00 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=893018e1c7aca3218555701208cc41daee34b8c4">893018e1c7aca3218555701208cc41daee34b8c4</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in pcl_execute_macro.<br>
+<br>
+ Prevent memory leaks on error.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15270 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1100<br>
+<br>
+pcl/pcl/pcmacros.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 12:38:02 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=adc3adfdf30f625444203a7c624c3fa123cfddd2">adc3adfdf30f625444203a7c624c3fa123cfddd2</a>
+<blockquote>
+<p>
+ Slight improvement to &quot;permit-file-***&quot; parameter documentation.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 11:17:53 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=829bfe72c69091da7f0d7c1243a7647114619070">829bfe72c69091da7f0d7c1243a7647114619070</a>
+<blockquote>
+<p>
+ Fix tiffsep and tiffsep1 with new file access control and SAFER mode<br>
+<br>
+ The tiffsep and tiffsep1 synthesize output file names with the outputfile<br>
+ and the separation color name, but the 'open' of these filenames would<br>
+ fail since they were not included on the permit_file_writing list.<br>
+ Add the full filename before opening, and remove the names after closing.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 11:53:10 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=baad48ab4b35dc9edf0317a1773d9efc7631f2d7">baad48ab4b35dc9edf0317a1773d9efc7631f2d7</a>
+<blockquote>
+<p>
+ Squash stupid const warning.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 19:42:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3aa9b059018bb49ddf67a87ddd87e01157143b99">3aa9b059018bb49ddf67a87ddd87e01157143b99</a>
+<blockquote>
+<p>
+ Squash some &quot;const&quot; warnings.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-19 11:51:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a09321624369d215a733fb991bf48c300c90107a">a09321624369d215a733fb991bf48c300c90107a</a>
+<blockquote>
+<p>
+ Remove some needlessly passed parameters.<br>
+<br>
+ For I am a bear of tiny brain, and such things confuse me.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 17:49:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=02108ce46f9beafbfa733598164a6ad254ada7ca">02108ce46f9beafbfa733598164a6ad254ada7ca</a>
+<blockquote>
+<p>
+ Fix &quot;permit-file-xxxx&quot; handling.<br>
+<br>
+ Ray spotted that gs_add_explicit_control_path was adding 17<br>
+ to arg before using it. 17 happens to be the right amount<br>
+ to add for &quot;--permit-file-read=&quot;, but the wrong amount for<br>
+ write/control/all.<br>
+<br>
+ Update the code to call it with the correct arg pointer<br>
+ to start with.<br>
+<br>
+ Also, update a couple of routines to cope with being called<br>
+ with NULL strings.<br>
+<br>
+ Also use enum values in switch rather than 0, 1, 2.<br>
+<br>
+base/gslibctx.c<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-18 20:40:42 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c0df83637a6234f804bef5a7ef31fe1bc5b66d78">c0df83637a6234f804bef5a7ef31fe1bc5b66d78</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in append_macro.<br>
+<br>
+ Prevent SEGV if append_macro is called with a NULL pointer and safe guarded<br>
+ calls to chunk_resize_object and chunk_object_size. Also resolved leak when<br>
+ resetting macros.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=14839 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1060<br>
+<br>
+base/gsmchunk.c<br>
+pcl/pcl/pcmacros.c<br>
+pcl/pcl/pcparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-19 11:02:48 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=071b96290c5e524291bb33b132e2cea3efd5f98e">071b96290c5e524291bb33b132e2cea3efd5f98e</a>
+<blockquote>
+<p>
+ Make missing jbig2 decoder fatal error.<br>
+<br>
+ If we have neither Luratech nor jbig2dec, have configure fail, unless<br>
+ explicitly run with --without-jbig2dec<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-18 17:18:29 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d9889892feaac3ca09f85d9bbdc001b1aec50cc3">d9889892feaac3ca09f85d9bbdc001b1aec50cc3</a>
+<blockquote>
+<p>
+ PDF interpreter - handle ObjStm containing more objects than declared<br>
+<br>
+ There's no bug number for this one, I can't easily create a reduced file<br>
+ without inadvertently fixing the problem, and I don't want to put the<br>
+ customer file into Bugzilla.<br>
+<br>
+ The problem is that the file contains an ObjStm (a compressed stream<br>
+ containing a sequence of PDF objects) which contains more objects than<br>
+ the stream declares. Not only that, but the extra object is neither the<br>
+ first nor the last object, so its not trivial to ignore.<br>
+<br>
+ Most consumers handle ObjStm constructs by using the 'catalog' at the<br>
+ head of the stream to find the offset of each object in the stream and<br>
+ then reposition to that object and read a single PDF object (note that<br>
+ objects in an ObjStm do not begin with 'obj' and do not end with<br>
+ 'endobj') which is IMO putting a lot of faith in the consumer's<br>
+ ability to detect a single object.<br>
+<br>
+ For performance reasons Ghostscript's PDF interpreter reads *all* the<br>
+ objects in the ObjStm immediately and stores them, thus trading memory<br>
+ use for performance (we only need to read and decompress the objects<br>
+ once). This approach is totally defeated when there are more objects<br>
+ than expected, because we don't know which object relates to which<br>
+ object number (no 'x y obj' in an ObjStm).<br>
+<br>
+ In this commit we spot the discrepancy; if there are too few objects we<br>
+ exit immediately with an error (technically we could do something about<br>
+ this too, provided the missing object is never used). If there are extra<br>
+ objects then we move to a fallback.<br>
+<br>
+ We discard all the objects we've read, then use the offsets in the<br>
+ 'catalog' to calculate the position and length of each object in the<br>
+ ObjStm. We position the file pointer to the start of the object and<br>
+ use a SubFileDecode filter to limit the number of bytes read to the<br>
+ difference between the offsets. We then use the existing code to read<br>
+ all the objects in that stream. If we get more than one then we discard<br>
+ all but the first.<br>
+<br>
+ Repeat the above until we reach the last object in the catalog; that has<br>
+ no known length so just read from there to the end of the stream.<br>
+<br>
+ The complications are all around getting the objects on the stack in<br>
+ the order expected by the code which follows, and defines the actual<br>
+ objects.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-18 14:28:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=107aae1f353db3b62f8b714c5100ec7bc180f2fb">107aae1f353db3b62f8b714c5100ec7bc180f2fb</a>
+<blockquote>
+<p>
+ Tri/QuadriLinear changes for lcms2mt.<br>
+<br>
+ Add a mechanism so that we can force lcms2mt to use<br>
+ TriLinear (or QuadriLinear) interpolation for specific<br>
+ transforms. This is primarily useful so we can get<br>
+ &quot;best case&quot; transforms which we can use as a baseline<br>
+ for our accelerations.<br>
+<br>
+ The use of TriLinear/QuadriLinear is governed by a new<br>
+ cmsFLAG bit, passed in to link creation. Unfortunately,<br>
+ these flag bits are not passed all the way down to where<br>
+ we actually need them. To avoid having to add an extra<br>
+ flags argument in many places, I stash the flags in a<br>
+ new field in the cmsContext. This is safe, if not entirely<br>
+ pretty, as each context will only be used in a single<br>
+ thread at a time. If this was a function used for more<br>
+ than just testing, we'd consider doing it in the neater<br>
+ (but more invasive) way.<br>
+<br>
+lcms2mt/include/lcms2mt.h<br>
+lcms2mt/src/cmscnvrt.c<br>
+lcms2mt/src/cmsintrp.c<br>
+lcms2mt/src/cmsopt.c<br>
+lcms2mt/src/lcms2_internal.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 11:32:33 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0b05dca78aaa456ba7b55b853917a4ae68a6fd38">0b05dca78aaa456ba7b55b853917a4ae68a6fd38</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in show_char_background.<br>
+<br>
+ Prevent memory leaks on error and then later releasing graphic state.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15988 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0891<br>
+<br>
+pcl/pcl/pctext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-17 10:37:58 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f40631e7592ed1287b2121840b3345acb1bdb1a8">f40631e7592ed1287b2121840b3345acb1bdb1a8</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent leak in gx_image_enum_begin.<br>
+<br>
+ Prevent leak in gx_image_enum_begin by freeing clip_dev.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15565 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-17 09:02:49 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=91d18aec6a19a0d3b341701d10355278f4703fdd">91d18aec6a19a0d3b341701d10355278f4703fdd</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in download_pcl_pattern.<br>
+<br>
+ The pattern is consumed by pl_dict_put during errors so remove second attempt to free it.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15501 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+pcl/pcl/pcuptrn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-17 11:42:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8c5348ae5fc35b449aa68eb6668cb6cbc6f345e0">8c5348ae5fc35b449aa68eb6668cb6cbc6f345e0</a>
+<blockquote>
+<p>
+ Fix file permissions interaction with '@' command line<br>
+<br>
+ If an options file (prefixed '@' on the command line) followed something that<br>
+ required initialising the Postscript interpreter (such as a '-c' option),<br>
+ opening the file would potentially fail because file permissions had been<br>
+ activated by the interpreter.<br>
+<br>
+ Add and remove the file from the permit reading list before attempting to open<br>
+ it.<br>
+<br>
+base/gsargs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 15:10:46 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=955c431ab611efd9a74e62a762cdc1ab9f64e14a">955c431ab611efd9a74e62a762cdc1ab9f64e14a</a>
+<blockquote>
+<p>
+ Add explicit &quot;flush&quot; after warning message.<br>
+<br>
+ The warning messages could get trampled on (due to buffering) by messages on<br>
+ stderr, flushing ensures the warning is emitted as intended.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-13 09:33:20 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2b3ed0ea5d07005e64badfb9212911a725fefb94">2b3ed0ea5d07005e64badfb9212911a725fefb94</a>
+<blockquote>
+<p>
+ Have .setsafe/.setsafeglobal undefine operators<br>
+<br>
+ In SAFER, we undefine certain delicate operators (mostly transparency related<br>
+ ones), but we weren't doing so if SAFER was enabled using .setsafe<br>
+<br>
+ This means some rejigging to keep NOSAFER and DELAYBIND working.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 14:23:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b3a1114d04a82e534d915b125eb34de21317993a">b3a1114d04a82e534d915b125eb34de21317993a</a>
+<blockquote>
+<p>
+ If set, add PCLFONTSOURCE value to permit_file_reading list<br>
+<br>
+pcl/pl/pjparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 13:07:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0350a0ab56e7b180d62af9423313d6c70345b386">0350a0ab56e7b180d62af9423313d6c70345b386</a>
+<blockquote>
+<p>
+ Bug 701561: 'reduce' paths before adding to permit lists<br>
+<br>
+ Before attempting to open files, we pre-process the requested file name to<br>
+ remove surplus/unnecessary elements: i.e. './././file' would be reduced to just<br>
+ './file', or '../dir/../dir/../dir/file' would be reduced to '../dir/file'.<br>
+<br>
+ The 'reduced' path is what we try to open, hence it is also what we check<br>
+ against the file permissions list before we allow files to be accessed.<br>
+<br>
+ That being so, we should also 'reduce' paths as we add them to the permissions<br>
+ lists - thus the permissions list creation and checking are consistent.<br>
+<br>
+base/gslibctx.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 12:18:48 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=511260d72a4b6df9bd2ba48e022f7c3921b547cb">511260d72a4b6df9bd2ba48e022f7c3921b547cb</a>
+<blockquote>
+<p>
+ Bug 697545 : Propagate error codes from pcl_break_underline correctly.<br>
+<br>
+ The code has been updated to correctly propagate error codes from all<br>
+ instances of pcl_break_underline.<br>
+<br>
+pcl/pcl/pccprint.c<br>
+pcl/pcl/pcfont.h<br>
+pcl/pcl/pcpage.c<br>
+pcl/pcl/pcpatrn.c<br>
+pcl/pcl/pcpatxfm.c<br>
+pcl/pcl/pctext.c<br>
+pcl/pcl/pcursor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 14:10:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c917d64d73fae679d445b233662e0ef4480078f6">c917d64d73fae679d445b233662e0ef4480078f6</a>
+<blockquote>
+<p>
+ Fix Bug 696333. Allow large bitmaps in clist when writing tile cache.<br>
+<br>
+ When writing bits to update the tile cache, we don't need to restrict to<br>
+ a single command buffer as with the copy_mono and copy_color commands.<br>
+<br>
+ Progressions on:<br>
+ tests_private/comparefiles/Bug694385.pdf.psdcmyk.300.1..gs<br>
+ tests_private/pdf/sumatra/2028_-_invisible_patterns.pdf.psdcmyk.300.1..gs<br>
+ tests_private/ps/ps3cet/09-47B.PS.pdf.pkmraw.300.0..gs_pdf<br>
+ tests_private/ps/ps3fts/176-01.ps.psdcmyk.300.1..gs<br>
+<br>
+base/gxclbits.c<br>
+base/gxcldev.h<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 10:37:42 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d79d17251261637b672f8518144ffffc42e1eb0e">d79d17251261637b672f8518144ffffc42e1eb0e</a>
+<blockquote>
+<p>
+ Fix SEGV with flp device and PCL with clist mode and large BandHeight.<br>
+<br>
+ If the 'clist_init' fails initially (with rangecheck) due to the buffer<br>
+ space too small for the BandHeight specified, we loop in the caller after<br>
+ increasing the buffer size, but clist_init left &quot;is_open&quot; false when failing.<br>
+ Add save_is_open in gdev_prn_setup_as_command_list so that we can restore it<br>
+ if the clist_init eventually suceeds.<br>
+<br>
+ The SEGV was with image_data because re-opening the flp device reset the<br>
+ &quot;obsolete&quot; procs to the default, so flp_image_data was replaced by the<br>
+ gx_default_image_data, but no begin_image had been performed (flp_begin_image<br>
+ skipped this since we were not yet at the FirstPage).<br>
+<br>
+base/gdevprn.c<br>
+base/gxclist.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 18:53:49 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8b0ed52ead9605cae14939362dbf9cdf22b9746c">8b0ed52ead9605cae14939362dbf9cdf22b9746c</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.17 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 18:48:36 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79e2d671b672f3bc4cca09808dd683b71eff702a">79e2d671b672f3bc4cca09808dd683b71eff702a</a>
+<blockquote>
+<p>
+ jbig2dec: Use the same contact information everywhere.<br>
+<br>
+jbig2dec/README<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 16:12:32 +0100
+</strong>
+<br>Paul Vojta &lt;vojta@math.berkely.edu&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e49d51de2b14f9a4ca873135ba3c8d7aa56256f">7e49d51de2b14f9a4ca873135ba3c8d7aa56256f</a>
+<blockquote>
+<p>
+ Documentation - fix some typos<br>
+<br>
+ Bug #701589 &quot;Minor documentation problems in 9.28-rc2&quot;<br>
+<br>
+ Thanks to Paul Vojta for pointing these out. Unfortunately we cannot use the<br>
+ supplied patch, as it includes alterations to History9.htm, which is auto-<br>
+ generated from the commit logs. The remaining changes are applied here.<br>
+<br>
+doc/Language.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 12:18:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3d2cd4b2f13573962105d1761e7bb58d5f079c9">e3d2cd4b2f13573962105d1761e7bb58d5f079c9</a>
+<blockquote>
+<p>
+ Bug 701563: pdfwrite annotation pdfmark /Border key<br>
+<br>
+ Despite the spec saying the values for the /Border key are in user space<br>
+ coordinates, Distiller appears to pass the values through to the output PDF<br>
+ untouched (no rescaling - unlike the values for /Rect, also in user space,<br>
+ according to the spec, which it does scale/translate). Ghostscript/pdfwrite<br>
+ did scale the /Border values.<br>
+<br>
+ This just changes pdfwrite to write the values out unchanged.<br>
+<br>
+devices/vector/gdevpdfm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 09:56:52 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ca426a86125b7bf2f52c00fbba1cef1395ea011">4ca426a86125b7bf2f52c00fbba1cef1395ea011</a>
+<blockquote>
+<p>
+ Documentation - add a note about SAFER for PDF/X ICC profiles<br>
+<br>
+ Bug #701553 &quot;Examples of PDF/X and PDF/A conversion should be updated for Ghostscript 9.28&quot;<br>
+<br>
+ ICC profiles required for PDF/X and PDF/A output need to be readable<br>
+ in order to work when -dSAFER is true (the new default). This wasn't<br>
+ clear from the documentation, so add a note about it.<br>
+<br>
+ As noted in the bug report, it is possible to embed the profile in the<br>
+ PostScript code, but as Chris says this is probably beyond reasonable<br>
+ expectations of the average user; they simply won't change the example<br>
+ and will then complain that it isn't correct. Users capable of making<br>
+ this work almost certainly have enough knowledge to realise they can<br>
+ do this instead of making the profile readable.<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-13 10:28:37 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0238104296a361d2dfcc678075e32f4c2070c52">e0238104296a361d2dfcc678075e32f4c2070c52</a>
+<blockquote>
+<p>
+ Bug 697545 : Propagate error codes from pcl_set_cap_x and pcl_set_cap_y correctly.<br>
+<br>
+ The code has been updated to correctly propagate error codes from all instances<br>
+ of pcl_set_cap_x and pcl_set_cap_y.<br>
+<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcjob.c<br>
+pcl/pcl/pcpage.c<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pcl/pcstatus.c<br>
+pcl/pcl/pcursor.c<br>
+pcl/pcl/pcursor.h<br>
+pcl/pcl/rtgmode.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 07:59:03 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29f3e8d45595f443170bf13290404be4d34b5a2e">29f3e8d45595f443170bf13290404be4d34b5a2e</a>
+<blockquote>
+<p>
+ Bug 697545 : Propagate error codes from pcl_do_CR and pcl_do_LF correctly.<br>
+<br>
+ The code has been updated to correctly propagate error codes from all instances<br>
+ of pcl_do_CR and pcl_do_LF.<br>
+<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcparse.c<br>
+pcl/pcl/pctext.c<br>
+pcl/pcl/pcursor.c<br>
+pcl/pcl/pcursor.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 19:41:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=afe11ca136aa173541ed0df09b8c189d2344f381">afe11ca136aa173541ed0df09b8c189d2344f381</a>
+<blockquote>
+<p>
+ Fix various printer devices to properly call spec ops.<br>
+<br>
+ Various printer devices (psd, psdcmykog, tiffsep, tiffscaled)<br>
+ were passing the spec ops on to gx_default_dev_spec_op rather<br>
+ than gdev_prn_dev_spec_op.<br>
+<br>
+ The most obvious implication of this was that we'd sometimes<br>
+ get a warning about printer devices having a private spec op.<br>
+<br>
+devices/gdevcmykog.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 17:09:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3b2ad1f24d2e9705481f9feb6835aa3e851726ac">3b2ad1f24d2e9705481f9feb6835aa3e851726ac</a>
+<blockquote>
+<p>
+ Bug 701568 followup: Fix RLE compressor.<br>
+<br>
+ The previous fix to the RLE compressor reveals an additional<br>
+ existing issue to do with us not checking whether we have<br>
+ space in the buffer to write the EOD byte.<br>
+<br>
+ Fixed here.<br>
+<br>
+base/srle.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 09:35:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68c7275d4a580dca6c0ed3798f3717eea3513403">68c7275d4a580dca6c0ed3798f3717eea3513403</a>
+<blockquote>
+<p>
+ Bug 701568: Fix gdevpx.c RLE stream handling.<br>
+<br>
+ The current code in pclxl_write_image_data_RLE passes<br>
+ lines of data to the RLE compression routine. It tells<br>
+ each invocation of that routine that this is the &quot;last&quot;<br>
+ block of data, when clearly it is not.<br>
+<br>
+ Accordingly, the compression routine inserts the &quot;EOD&quot; byte<br>
+ into the stream, and returns EOFC.<br>
+<br>
+ Independently of the return value used, having multiple EOD<br>
+ bytes in the data is clearly wrong. Update the caller to only<br>
+ pass &quot;last&quot; in for the last block.<br>
+<br>
+ The code still returns EOFC at the end of the data, so update<br>
+ this final call to accept (indeed, expect) that return value<br>
+ there.<br>
+<br>
+devices/vector/gdevpx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-10 14:22:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=13a560a4d13d51e4dd9f7dd48b27a6ebe681f877">13a560a4d13d51e4dd9f7dd48b27a6ebe681f877</a>
+<blockquote>
+<p>
+ Update CAL makefile for NEON cms functions (correction)<br>
+<br>
+ Add NEON flags and includes.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-10 14:22:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=61cff6434022bb4c444bd500da0628302abfb35e">61cff6434022bb4c444bd500da0628302abfb35e</a>
+<blockquote>
+<p>
+ Update CAL makefile for NEON cms functions.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-10 20:26:38 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be793aa94180e06135fd7fec36b6f6ab9ab67519">be793aa94180e06135fd7fec36b6f6ab9ab67519</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in gx_image_enum_begin.<br>
+<br>
+ Prevent memory leaks on error and then later releasing graphic state.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15242 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0720<br>
+<br>
+base/gxipixel.c<br>
+pcl/pcl/pcparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-09 21:41:16 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08c1e576fc09fcc7fdf5cd935d91fdfea1e7f0f9">08c1e576fc09fcc7fdf5cd935d91fdfea1e7f0f9</a>
+<blockquote>
+<p>
+ Bug 697545 : Propagate error code in pcl_enter_graphics_mode.<br>
+<br>
+ Propagate error code in pcl_enter_graphics_mode to prevent trying to use an<br>
+ uninitialised variable later leading to SEGV.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15210 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0720<br>
+<br>
+pcl/pcl/rtgmode.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-10 09:04:46 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8675b40266cbf9771a08f4178a6009cfd17e0ba1">8675b40266cbf9771a08f4178a6009cfd17e0ba1</a>
+<blockquote>
+<p>
+ Fix bug 701550, problem with forall on strings.<br>
+<br>
+ Hard to believe, but this problem has existed since at least version 3.33.<br>
+ The 'string_continue' function altered the size which was used to decide if<br>
+ there were still characters to be processed BEFORE invoking the 'push(#)' macro.<br>
+ If the 'push(1)' encountered a full stack segment, it would return stackoverflow<br>
+ so that the operand stack could be extended. This meant that the decision to<br>
+ stop enumerating the string would end early (depending on how many times the<br>
+ stackoverflow occurred).<br>
+<br>
+ Usually the procedure of the forall would either consume the character (reducing<br>
+ the stack), or add an element to the stack triggering the stack extension before<br>
+ the next execution of string_continue, but -c &quot;401 string { dup } forall count =&quot;<br>
+ results in only 800 stack elements (rather than 802 as expected).<br>
+<br>
+psi/zgeneric.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-08 13:30:52 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d9e1d9474e5e21fe8ed9a451b91c48233e629eee">d9e1d9474e5e21fe8ed9a451b91c48233e629eee</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks and memory corruption.<br>
+<br>
+ Prevent several memory leaks in pcl_enter_graphics_mode by releasing graphic state.<br>
+ Also prevent memory corruption by propagating error code from pcl_set_drawing_color.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=14648 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0861.new<br>
+<br>
+pcl/pcl/pcdraw.c<br>
+pcl/pcl/rtgmode.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-09 14:19:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bc48c29c5e86e6c528e23140c71ecfb58588333f">bc48c29c5e86e6c528e23140c71ecfb58588333f</a>
+<blockquote>
+<p>
+ Optimise Eval{5,6,7,8}Inputs{,Float}.<br>
+<br>
+ Only use 1 Temporary array, and avoid needless work in the<br>
+ 0xFFFF cases.<br>
+<br>
+lcms2mt/src/cmsintrp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-09 11:03:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=63e1fd40674a4f89f6593098cf100382061753e5">63e1fd40674a4f89f6593098cf100382061753e5</a>
+<blockquote>
+<p>
+ Tweak Eval4InputsFloat for speed.<br>
+<br>
+ Move to the Pentachoronal Interpolation algorithm.<br>
+<br>
+lcms2mt/src/cmsintrp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-06 18:04:17 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1cc72912138544dcf00ed0dbc77ceaf47de04e91">1cc72912138544dcf00ed0dbc77ceaf47de04e91</a>
+<blockquote>
+<p>
+ Tweak Eval4Inputs for speed.<br>
+<br>
+ In coding the SSE version for CAL, I spotted a slightly<br>
+ preferable test that allows us to capture some special<br>
+ cases for free. These special cases accelerate some<br>
+ useful cases including:<br>
+<br>
+ * C=M=Y=K (such as when all 0 = white?)<br>
+ * C=M=Y (such as when pure black)<br>
+ * M=Y=K (possibly useful in case we ever have profiles that<br>
+ store K first).<br>
+<br>
+lcms2mt/src/cmsintrp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-06 17:10:22 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f46434c0fe3707f53a825f39fa1bab8c0875c03">3f46434c0fe3707f53a825f39fa1bab8c0875c03</a>
+<blockquote>
+<p>
+ Update CAL initialisation to register second lcms2mt plugin.<br>
+<br>
+ The first plugin deals with transformations. The second deals<br>
+ with interpolation.<br>
+<br>
+base/gsicc_lcms2mt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-13 01:35:36 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b5e5ed8620f348e0fa619171d6f05a966a4bcf83">b5e5ed8620f348e0fa619171d6f05a966a4bcf83</a>
+<blockquote>
+<p>
+ jbig2dec: Validate coordinates when add image onto page.<br>
+<br>
+ Detected by Coverity in CID 94850.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-12 18:55:16 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ccc1a52f59194193450747e41006982d322c43a5">ccc1a52f59194193450747e41006982d322c43a5</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid extending page image beyond INT_MAX pixels high.<br>
+<br>
+ Detected by Coverity in CID 95080.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-12 18:52:44 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=758951f873b4b80de3c11294c3bc76ca0d6144d7">758951f873b4b80de3c11294c3bc76ca0d6144d7</a>
+<blockquote>
+<p>
+ jbig2dec: Validate range of Huffman Table range values.<br>
+<br>
+ Detected by Coverity in CID 94835.<br>
+<br>
+jbig2dec/jbig2_huffman.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-07 13:29:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd815dfe5e8db6e997466765218c80bb54902234">cd815dfe5e8db6e997466765218c80bb54902234</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid double checks for negative coordinates.<br>
+<br>
+ Negative coordinates are already handled prior in the function<br>
+ by falling back to the unoptimized case.<br>
+<br>
+ This was detected by Coverity in CID 303984 and CID 303985.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 02:27:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1ae9b9b92bfa6fef04a50b8f27c3dc6e9e03fba0">1ae9b9b92bfa6fef04a50b8f27c3dc6e9e03fba0</a>
+<blockquote>
+<p>
+ jbig2dec: A small collection of code cleanups.<br>
+<br>
+ * Refer to Jbig2ArithCx for memsetting in case it ever changes.<br>
+ * Fix typo.<br>
+ * Avoid using local variable when unnecessary.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-21 15:02:14 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=14cc5cb07861b8bd8c3a2cfd1d7ac21dd98fa202">14cc5cb07861b8bd8c3a2cfd1d7ac21dd98fa202</a>
+<blockquote>
+<p>
+ jbig2dec: Add all ubc test files.<br>
+<br>
+jbig2dec/test_jbig2dec.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 03:27:31 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=49a6ff2b166a4cda4d7b8c9d8192bb6f419c7ca3">49a6ff2b166a4cda4d7b8c9d8192bb6f419c7ca3</a>
+<blockquote>
+<p>
+ Bug 701197: jbig2dec: Fix incorrectly computed halftone skip mask.<br>
+<br>
+ Halftone regions using a skip mask and negative horizontal grid origin<br>
+ offsets caused issues due to multiplying signed and unsigned integers.<br>
+ The mixed types expression was computed unsigned unsigned arithmetic<br>
+ before being converted back to a signed integer. This meant that an<br>
+ expected negative value became positive.<br>
+<br>
+ Several of the test files mentioned in the README rendered incorrectly,<br>
+ e.g. 200-6-45.jb2. With this fix all files render correctly again.<br>
+<br>
+jbig2dec/jbig2_halftone.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 15:09:12 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8719833a6a4242880ad8b81cb8fe19e03667af52">8719833a6a4242880ad8b81cb8fe19e03667af52</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid duplicate declarations of Huffman tables in test code.<br>
+<br>
+ This is done by moving the tables into a separate compilation module and<br>
+ declaring the tables extern in the header file that is used elsewhere.<br>
+<br>
+base/jbig2.mak<br>
+jbig2dec/Makefile.am<br>
+jbig2dec/Makefile.unix<br>
+jbig2dec/jbig2_hufftab.c<br>
+jbig2dec/jbig2_hufftab.h<br>
+jbig2dec/msvc.mak<br>
+windows/ghostscript.vcproj<br>
+windows/ghostscript_rt.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 14:51:01 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d75727a7fd5efb2245c7b0d0b33ee8611446c150">d75727a7fd5efb2245c7b0d0b33ee8611446c150</a>
+<blockquote>
+<p>
+ jbig2dec: Fix leak of huffman decoder state in test code.<br>
+<br>
+jbig2dec/jbig2_huffman.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 14:50:09 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b3f859987f152e13ab141143234f686749f2caf7">b3f859987f152e13ab141143234f686749f2caf7</a>
+<blockquote>
+<p>
+ jbig2dec: Declare internal data array static.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 14:47:44 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=49fa7d21bc555a96e19318b56301185f12f68c55">49fa7d21bc555a96e19318b56301185f12f68c55</a>
+<blockquote>
+<p>
+ jbig2dec: Fix leak of log message in command line tool.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-21 15:02:02 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=314250a3126243a228249ebf1e6272c0beaec9d6">314250a3126243a228249ebf1e6272c0beaec9d6</a>
+<blockquote>
+<p>
+ jbig2dec: Verify file hashes of test files during testing.<br>
+<br>
+ Previously jbig2dec would accept any file with the same name.<br>
+<br>
+jbig2dec/test_jbig2dec.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 14:49:21 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9b92d33e7ed5e06d0728d6a1be771d8b464c50e">a9b92d33e7ed5e06d0728d6a1be771d8b464c50e</a>
+<blockquote>
+<p>
+ jbig2dec: Expect test files to reside inside jbig2dec directory.<br>
+<br>
+jbig2dec/test_jbig2dec.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 15:18:45 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8b3ffd237746e2bab2867ad460e8635a79cd5916">8b3ffd237746e2bab2867ad460e8635a79cd5916</a>
+<blockquote>
+<p>
+ jbig2dec: Indent test code by spaces like the rest of the code.<br>
+<br>
+jbig2dec/test_jbig2dec.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 22:18:14 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2e957c0b1afc6d2d705c9d075fc55db2de5df854">2e957c0b1afc6d2d705c9d075fc55db2de5df854</a>
+<blockquote>
+<p>
+ jbig2dec: Make tests expect that some test files return white image.<br>
+<br>
+ Previously these tests would just error out and jbig2dec would not<br>
+ return any output file at all. Now, jbig2dec parses as much as<br>
+ possible, while emitting warning/error messages. In the case of a<br>
+ few of the test files the end result is a white image.<br>
+<br>
+jbig2dec/test_jbig2dec.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 15:15:53 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c5c3a1f14c85582d09ab58f55b1fd83435b6562">1c5c3a1f14c85582d09ab58f55b1fd83435b6562</a>
+<blockquote>
+<p>
+ jbig2dec: Indent Makefiles with tabs like the rest of the Makefiles.<br>
+<br>
+base/jbig2.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 23:54:52 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5a6832ca60dfc34cb9a0680590cbd086f528fd22">5a6832ca60dfc34cb9a0680590cbd086f528fd22</a>
+<blockquote>
+<p>
+ Implement HyperPentahedral interpolation within lcms2mt.<br>
+<br>
+ This accelerates conversions from 4 component spaces, such as<br>
+ CMYK.<br>
+<br>
+base/gxfill.c<br>
+lcms2mt/src/cmsintrp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-10-31 20:22:11 +0100
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c6d485f4ba59072fba1a73f8f61071b00d7a7e6">1c6d485f4ba59072fba1a73f8f61071b00d7a7e6</a>
+<blockquote>
+<p>
+ Bug 700088: Report error if all wanted J2K components are not decoded.<br>
+<br>
+ Ghostscript used to attempt to use even the undecoded components.<br>
+ The source code for upstream's opj_decompress tool avoided this by<br>
+ a workaround along with a comment indicating that this ought to be<br>
+ done in the library (so all clients, e.g. Ghostscript will benefit<br>
+ from it). With this commit the library will error out if not all<br>
+ requested components are successfully decoded. Thus Ghostscript<br>
+ will no longer crash.<br>
+<br>
+ Reported in https://github.com/uclouvain/openjpeg/issues/1158<br>
+ sent upstream in https://github.com/uclouvain/openjpeg/pull/1164<br>
+ and finally committed in e66125fe260deee49fdf6e9978d9bd29871dd5bb<br>
+<br>
+openjpeg/src/bin/jp2/opj_decompress.c<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 12:34:55 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7d32c453538bee41c34f8a77a3feb1dcc0ce759">b7d32c453538bee41c34f8a77a3feb1dcc0ce759</a>
+<blockquote>
+<p>
+ Undo commit 95f7befcec1b30fd5014c8ad616485d32901ce33 for release<br>
+<br>
+ Proper handling of the page group color space is going to require<br>
+ a more complex solution whereby we ensure that we do the final<br>
+ alpha blending in the page group color space and not the target<br>
+ device color space.<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 08:52:16 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=40934a68930a1d6a41a26df694e1e50fe3c60202">40934a68930a1d6a41a26df694e1e50fe3c60202</a>
+<blockquote>
+<p>
+ Add -sBlendColorProfile into Use.htm<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 18:15:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e63504054baea4275af88e95418b5282c4394685">e63504054baea4275af88e95418b5282c4394685</a>
+<blockquote>
+<p>
+ Avoid potential UMR with arg checking in arg sanitization code.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 17:16:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cfdb64eec150da48dea5063b14ae7596e6b7050a">cfdb64eec150da48dea5063b14ae7596e6b7050a</a>
+<blockquote>
+<p>
+ Proper fix for deep color overprint.<br>
+<br>
+ The previous fix confused memset and memcpy. Properly write the<br>
+ (native endian) 16 bit color values into the big endian buffer.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 12:59:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eeeb033d21f22b128900ebc998668c87be725f7d">eeeb033d21f22b128900ebc998668c87be725f7d</a>
+<blockquote>
+<p>
+ Fix deep color mattes.<br>
+<br>
+ As seen with the content vanishing when rendering<br>
+ tests_private/pdf/sumatra/uninitialized_value_with_JPX_images.pdf<br>
+ to psdcmyk16. The Softmask on the image has a Matte of [1,1,1]<br>
+ and the calculations in the current code overflow, meaning that<br>
+ it comes out as completely white.<br>
+<br>
+ We resort to 64bit to avoid the overflow. Mattes are vanishingly<br>
+ rare, so speed shouldn't be an issue. We can revisit if we ever<br>
+ find a case that matters.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:45:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5569e2b2057a25ff1fe0b2b5106e71f2b5142f5c">5569e2b2057a25ff1fe0b2b5106e71f2b5142f5c</a>
+<blockquote>
+<p>
+ Update overprint hl_color code to cope with 16bit devices too.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:16:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51dbfc90fdc681f4500b498cec52056fb0d2224b">51dbfc90fdc681f4500b498cec52056fb0d2224b</a>
+<blockquote>
+<p>
+ Fix deep color transparency overprint.<br>
+<br>
+ The component copy loop at the end of the blend could fail to copy<br>
+ enough entries.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-30 15:16:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e48a71a99beb5870edadf0754e2c3bcf6a86f87">1e48a71a99beb5870edadf0754e2c3bcf6a86f87</a>
+<blockquote>
+<p>
+ Avoid overflow in deep color luminosity calculations.<br>
+<br>
+ Resort to 64bit as scale calculations are not constrained<br>
+ to the usual 16bit range.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 10:02:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59660b5d998b53df383192aee71b7439a424be47">59660b5d998b53df383192aee71b7439a424be47</a>
+<blockquote>
+<p>
+ Fix clearing of the drag and drop file list<br>
+<br>
+ Because we have to store the list of file names from drag and drop events, in<br>
+ order to correctly add and remove them from the permit file read list, we also<br>
+ want to clear the lists before we destroy the &quot;text&quot; window object.<br>
+<br>
+ The problem is, this happens after we shutdown Ghostscript and unload the dll.<br>
+<br>
+ This moves that clearing of the list into function that we call before we<br>
+ shut down.<br>
+<br>
+psi/dwmain.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 10:14:52 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=94742723659fb4bba6b50ad29123d4ff38a9ebd6">94742723659fb4bba6b50ad29123d4ff38a9ebd6</a>
+<blockquote>
+<p>
+ Fix path permissions added from cidfmap.<br>
+<br>
+ From the cidfmap, we accumulate a list of unique directory paths a we process<br>
+ cidfmap and then add them - when I did that code, I forgot that to allow access<br>
+ to the directory, we need a trailing directory separator.<br>
+<br>
+ Add that before calling .addcontrolpath<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 16:49:30 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4135d3b50a66dc67eb7f4f4ad360fdf703783141">4135d3b50a66dc67eb7f4f4ad360fdf703783141</a>
+<blockquote>
+<p>
+ Fix font file finding with -P<br>
+<br>
+ In trying to reproduce the issue that inspired commit dea69cd04964, I noticed<br>
+ that font file searching wasn't working correctly with -P specified on the<br>
+ command line.<br>
+<br>
+ Previously, it could just end up with us not finding a font we should have, but<br>
+ with dea69cd04964 it would result in a typecheck error.<br>
+<br>
+ This ensures the stack is always how it should be after the findlibfile<br>
+ call<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 16:10:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2b9ab0d54ab2299b3db94e57f45cfc52f6045e62">2b9ab0d54ab2299b3db94e57f45cfc52f6045e62</a>
+<blockquote>
+<p>
+ Make it clear: file/path matching is always case sensitive<br>
+<br>
+ even on Windows.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 19:50:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc2cbb8c78acdff736a966eb40ca22a6a7c52b26">cc2cbb8c78acdff736a966eb40ca22a6a7c52b26</a>
+<blockquote>
+<p>
+ Fix overflow in 16bit blending calculations.<br>
+<br>
+ The blending code uses the following construction in<br>
+ several places:<br>
+<br>
+ src_scale = ...; /* a value between 0 and 0x10000 */<br>
+ tmp = (y-z) * src_scale + 0x8000;<br>
+ foo = x + (tmp&gt;&gt;16);<br>
+<br>
+ Where x,y,z, are all expected to be in the 0...0xffff range.<br>
+<br>
+ Due to y-z having a sign bit, this can overflow a 32 bit tmp.<br>
+<br>
+ We therefore sacrifice a bit of accuracy in src_scale to get<br>
+ correctness.<br>
+<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 14:13:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8c5059661a48e2e17d0f15c7c6936510192728b6">8c5059661a48e2e17d0f15c7c6936510192728b6</a>
+<blockquote>
+<p>
+ Remove outdated FIXME's.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 12:50:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f531552c99a04f003412f7a83d4661e927f88d40">f531552c99a04f003412f7a83d4661e927f88d40</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid divide by zero in shading.<br>
+<br>
+ The previous commit for this bug was enough to solve the problem<br>
+ for ppmraw, but not, it seems, for other devices. This addresses<br>
+ the division by zero more directly.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 20:13:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25f7cb4da347610dd49bd8001746605f1a29caa8">25f7cb4da347610dd49bd8001746605f1a29caa8</a>
+<blockquote>
+<p>
+ Fix deep color transparency saturation blending.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2513.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 17:45:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b9e4b4e4d97a2f0c32596fed0342fb83773a56c2">b9e4b4e4d97a2f0c32596fed0342fb83773a56c2</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid division by zero in gx_shade_trapezoid<br>
+<br>
+ Remove some incorrect clipping code.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:54:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0d46b4f51b5efba7e72b7d45517d0fba642477aa">0d46b4f51b5efba7e72b7d45517d0fba642477aa</a>
+<blockquote>
+<p>
+ Exit early from gx_shade_trapezoid in more cases.<br>
+<br>
+ A zero height trap isn't plotted, so we can bail out early in<br>
+ that case.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 17:02:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=42f386a85d3998310f0317501b54780ffbe6dc6b">42f386a85d3998310f0317501b54780ffbe6dc6b</a>
+<blockquote>
+<p>
+ Fix deep colour transparency &quot;uncompositing&quot;.<br>
+<br>
+ Uncompositing a group uses a scale factor that is greater in range<br>
+ than we'd like; we need to resort to 64bit to do this to avoid<br>
+ losing accuracy.<br>
+<br>
+ This solves problems seen in:<br>
+<br>
+ tests_private/comparefiles/Bug689918.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 14:26:41 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dea69cd04964b27a08c8b340476d58031cb9e517">dea69cd04964b27a08c8b340476d58031cb9e517</a>
+<blockquote>
+<p>
+ Handle relative FONTPATH values<br>
+<br>
+ Prior to 9.21 (specifically: 8abd22010eb4db0fb1b10e430d5f5d83e015ef70), relative<br>
+ paths for FONTPATH worked, but did so due to a logic fault with how we search<br>
+ for &quot;lib&quot; files.<br>
+<br>
+ When attempting to open file names specified on the command line, we used a<br>
+ flag set in the command line handling (starting_arg_file) to know whether the<br>
+ lib file searching logic should try to open the file name directly (as well as<br>
+ trying the file combined with each path in the search path).<br>
+<br>
+ In versions prior to commit 8abd22010eb4 that flag (starting_arg_file) could<br>
+ remain set to true, even after the command line file(s) had been opened. This<br>
+ represented a (minor) security risk. Commit 8abd22010eb4 ensured the flag was<br>
+ properly (re)set, and that caused relative paths for FONTPATH stopped working.<br>
+<br>
+ Rather than reintroduce the security risk, update the code that checks whether<br>
+ the font files exist so it explicitly tries the file name directly, rather than<br>
+ assuming .libfile (or findlibfile, in this case) does that automatically.<br>
+<br>
+ Also remove an extraneous (but benign) dup of the font name.<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:27:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d10fde23ccd74c2721e4870c5914fe7373a7816">5d10fde23ccd74c2721e4870c5914fe7373a7816</a>
+<blockquote>
+<p>
+ pdfwrite - fix corner case with Color Conversion<br>
+<br>
+ Bug #701456 &quot;Ghostscript creates broken PDF file after color conversion&quot;<br>
+<br>
+ The test file is, essentially weird. The image on page 3 is not a single<br>
+ image, its a series of images, all of which are in a /Indexed /DeviceRGB<br>
+ colour space.<br>
+<br>
+ In addition, these images are drawn on *top* of another set of images<br>
+ (thereby completely obscuring them). These images are also drawn in<br>
+ /Indexed /DeviceRGB. However, these images are in fact monochrome, the<br>
+ Indexed space consists of 2 colours. This means that (highly unusually)<br>
+ we have a DeviceRGB image with 1 Bit Per Component.<br>
+<br>
+ This caused problems for the pdfwrite compression filter chooser because<br>
+ it chose (and configured) a compression scheme suitable for 1 BPC data<br>
+ and then actually output 8 BPC data. This led to the compression filter<br>
+ writing too little data.<br>
+<br>
+ Fix this here by setting the BPC to 8 if we are doing colour conversion,<br>
+ and have the colour conversion setup code use the original value in the<br>
+ image enumerator (the conversion code *does* need to know the input is<br>
+ 1 BPC).<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 11:36:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=02c252f00e7bbc9a9a23d0a0996e88ba1839f127">02c252f00e7bbc9a9a23d0a0996e88ba1839f127</a>
+<blockquote>
+<p>
+ PDF interpreter - more /Mask strangeness in Acrobat<br>
+<br>
+ Bug #701468 &quot; More weirdness with images containing invalid /Mask values&quot;<br>
+<br>
+ In order to render this file as per Acrobat, we need to ignore the /Mask<br>
+ array. However, in order to render bug 689717 correctly we need to fix<br>
+ the /Mask array.<br>
+<br>
+ Both cases are 1 BitsPerComponent DeviceGray images, the only difference<br>
+ is the actual /Mask values. Bug 689717 has [255 255] while 701468 has<br>
+ [243 255]. We can differentiate based on whether we have DeviceGray<br>
+ 1 BPC image, where the Mask values are not the same. In the case they<br>
+ are different we use the existing technique of calculating the maximum<br>
+ value and using that (for both, so there is no range). Where there is a<br>
+ range (ie not a single colour) this is clearly unusable in a 2-colour<br>
+ image, so ignore the /Mask altogether.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 15:28:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3554f0fc4dadebad2e816adbd7cf4a548f76de74">3554f0fc4dadebad2e816adbd7cf4a548f76de74</a>
+<blockquote>
+<p>
+ Fix deep colour knockout logic.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2507.pdf.psdcmyk16.72.0<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:34:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5280581fd0c075da7dc0632937e294a9fa3fe736">5280581fd0c075da7dc0632937e294a9fa3fe736</a>
+<blockquote>
+<p>
+ Squash a couple of warnings.<br>
+<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:01:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2e872508d683302b556a160004a9ca3d64e7b4f1">2e872508d683302b556a160004a9ca3d64e7b4f1</a>
+<blockquote>
+<p>
+ Fix SoftLight blending in deep color transparency.<br>
+<br>
+ As seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -dMaxBitmap=80000000 -o out.psd<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_09_0919.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 11:28:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1fe43c3ba4423631129925d789c936b9e461d1d6">1fe43c3ba4423631129925d789c936b9e461d1d6</a>
+<blockquote>
+<p>
+ Fix problems with pngalpha and deep color transparency filling.<br>
+<br>
+ The pngalpha device is created with a depth of 32, with 3 color<br>
+ components; this was confusing pdf14 into thinking that more<br>
+ than 8 bits per color were being used, and so deep color buffers<br>
+ were required.<br>
+<br>
+ To fix this we update the logic to be smarter; in cases where we<br>
+ don't have a clear determination based on bits alone, we look<br>
+ at the max_color and max_gray values. Because this code is now<br>
+ more complex than before, we pull it into a shared function.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+base/gdevprn.c<br>
+base/gsptype1.c<br>
+base/gstrans.c<br>
+base/gxclthrd.c<br>
+base/gxdevcli.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 15:06:17 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ac36b1eb87a919d3df19b7fb555d277d959396b">0ac36b1eb87a919d3df19b7fb555d277d959396b</a>
+<blockquote>
+<p>
+ Fix deep color transparency issue.<br>
+<br>
+ Fix overflow in art_pdf_composite_knockout_16, seen in:<br>
+<br>
+ tests_private/comparefiles/Bug690546.pdf.psdcmyk16.72.0<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 18:24:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cda2b1e057951dc4687c4d2ad489100d1ea6ea4b">cda2b1e057951dc4687c4d2ad489100d1ea6ea4b</a>
+<blockquote>
+<p>
+ Fix deep color transparent pattern problems.<br>
+<br>
+ Transparency buffers are held as native endian. Pattern cache<br>
+ tiles are held as big endian. When we make pattern cache tiles<br>
+ from transparency buffers we therefore need a conversion.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxp1fill.c<br>
+base/gxpcolor.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:35:14 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4e220de447dc5cc79a00e8bb57b69c6ea242fe75">4e220de447dc5cc79a00e8bb57b69c6ea242fe75</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Do not output LUTs with CUPS_DEBUG set<br>
+<br>
+ This change lets complete LUTs in the debug output only be listed when<br>
+ CUPS_DEBUG2 is set and not already with CUPS_DEBUG.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:08:52 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=30575d50af5f8dd17ef20ccbbf2b2d8afae51589">30575d50af5f8dd17ef20ccbbf2b2d8afae51589</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Prefer the page size requested by user<br>
+<br>
+ Without special scaling/cropping options (&quot;fit-to-page&quot;, &quot;fill&quot;,<br>
+ &quot;crop-to-fit΅, ...) PDF and PostScript files printed with CUPS will be<br>
+ printed with the page sizes of the document's pages and not the size<br>
+ requested by the user via the &quot;PageSize&quot; or &quot;media&quot; option. This<br>
+ allows correct printing of jobs with differently sized pages on<br>
+ printers which have the appropriate sizes loaded without need of<br>
+ manual intervention. Therefore the CUPS output device is matching each<br>
+ input page against the sizes listed in the PPD to generate a correct<br>
+ page geometry for the printer for each page.<br>
+<br>
+ Problem is if there are several equally-sized page size entries in the<br>
+ PPD. Without further guiding always the first match is used, making<br>
+ access to special functions provided by the others (like<br>
+ full-bleed/borderless printing) inaccessible.<br>
+<br>
+ This commit adds the functionality of the user-requested page size<br>
+ (via &quot;PageSize&quot; or &quot;media&quot; option) being preferred under the matching<br>
+ page sizes, so that if for example a user selects a full-bleed version<br>
+ of the desired page size and sends a photo, the photo gets rendered<br>
+ and printed with the page geometry which the PPD reports for the<br>
+ full-bleed version.<br>
+<br>
+ Nothing changes if the size of the user-requested page size does not<br>
+ match the size of the input page at all.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 12:45:27 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3283e6d5ce389f5b6d5ebf4adb309b1259a5fe1d">3283e6d5ce389f5b6d5ebf4adb309b1259a5fe1d</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Small fix on size matching improvements<br>
+<br>
+ This is a fix for one little oversight on the changes to support matching<br>
+ the input page size against the imageable areas of the PPD's page sizes.<br>
+<br>
+ This completes the fix of bug 701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-24 23:11:10 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3e09cede82a3b8c5c7a6e30a5934336f20dfa1f8">3e09cede82a3b8c5c7a6e30a5934336f20dfa1f8</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Improved page size matching with PPD<br>
+<br>
+ Applied the following improvements for finding the correct page size<br>
+ of the PPD file for the input page:<br>
+<br>
+ - Do not try to match by page size name, the input files do not<br>
+ contain page size names.<br>
+<br>
+ - Do not only match the input page size against the actual media sizes<br>
+ reported by the PPD but also to the imageable areas. Media size match<br>
+ is preferred but if there is no media size match, we accept also<br>
+ a match of the imageable area. In case of a match of the imageable<br>
+ area we position the input page in the imageable area of the output<br>
+ page.<br>
+<br>
+ - More debug output.<br>
+<br>
+ - In case of a custom page size (no match with PPD sizes) the page<br>
+ size name in the CUPS Raster output is a correct &quot;Custom.XXXxYYY&quot;<br>
+ and not the default page size name.<br>
+<br>
+ This should fix bug #701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 18:09:32 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d6bb6e69feb0a75be98d03f550258d4b7540aef">2d6bb6e69feb0a75be98d03f550258d4b7540aef</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Reduced page size comparison tolerances<br>
+<br>
+ Before each page gets rendered its size is compared to the page sizes<br>
+ of the PPD file to select the actual page size for the output. Reduced<br>
+ the tolerances from 7% for the long edge and 5% for the short edge to<br>
+ 1%, as before easily wrong sizes got picked (See also bug 701438).<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 10:11:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ab40cc018d8ac76758cebc7b4962e9b19fffc86">5ab40cc018d8ac76758cebc7b4962e9b19fffc86</a>
+<blockquote>
+<p>
+ Windows Installer: cope with COMPILE_INITS=0<br>
+<br>
+ We default to COMPILE_INITS=1, and that was the only case that the installer<br>
+ handled - i.e. building the installer with COMPILE_INITS=0 would install an<br>
+ executable that wouldn't work without extra action (-I.. or similar).<br>
+<br>
+ This changes the installer compiler invocation, and the installer creation<br>
+ so it behaves as it does now with COMPILE_INITS=1, but with COMPILE_INITS=0 the<br>
+ installer will write the path to Resource/Init into the GS_LIB registry<br>
+ key.<br>
+<br>
+psi/nsisinst.nsi<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 23:30:34 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=863d77f731c6144dcf139e06e64a857754d8327f">863d77f731c6144dcf139e06e64a857754d8327f</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Produce more debug output<br>
+<br>
+ When building with CUPS_DEBUG now debug output for the process of<br>
+ matching the page geometry with the PPD file's page sizes is<br>
+ produced.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 08:58:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24478335925f891673160893513fac43b0334c48">24478335925f891673160893513fac43b0334c48</a>
+<blockquote>
+<p>
+ Handle explicit '\' escaping in path matching<br>
+<br>
+ As well as having to cope with both '/' and '\' as directory separators on<br>
+ Windows, it turns out we also need to cope with the backslash separator being<br>
+ explicitly escaped (&quot;\\&quot;) - the explicit is added by the Postcript path<br>
+ templating code in gs_init.ps.<br>
+<br>
+ I don't want to change templating code because that would likely have<br>
+ implications in a lot of other places.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 10:51:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c9794ee644a904527006922e4fc387ad33be2a4">7c9794ee644a904527006922e4fc387ad33be2a4</a>
+<blockquote>
+<p>
+ Better CMYK conversion for bmpcmp<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmptab.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 17:49:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=079ea7d9e0c713a7834fc8f08d52ce42e6a03666">079ea7d9e0c713a7834fc8f08d52ce42e6a03666</a>
+<blockquote>
+<p>
+ Update bmpcmp.c to read psdrgb rather than psdbgr.<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 15:33:27 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=935408d6205742e40471b18d7f0f1fe4febc437c">935408d6205742e40471b18d7f0f1fe4febc437c</a>
+<blockquote>
+<p>
+ Fix commit ec0b35fed3de: &quot;Handle directory separators...&quot;<br>
+<br>
+ The logic in the above fix was wrong.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 14:28:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4041906852365a602c2f9e011703e4174bdc8040">4041906852365a602c2f9e011703e4174bdc8040</a>
+<blockquote>
+<p>
+ Bug 701451: Fix clist color_usage calculations for shadings.<br>
+<br>
+ Or rather, don't attempt to calculate them badly, and just<br>
+ use the safe &quot;all colors&quot; value.<br>
+<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:10:51 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd1b1cacadac2479e291efe611979bdc1b3bdb19">cd1b1cacadac2479e291efe611979bdc1b3bdb19</a>
+<blockquote>
+<p>
+ PDF interpreter - review .forceput security<br>
+<br>
+ Bug #701450 &quot;Safer Mode Bypass by .forceput Exposure in .pdfexectoken&quot;<br>
+<br>
+ By abusing the error handler it was possible to get the PDFDEBUG portion<br>
+ of .pdfexectoken, which uses .forceput left readable.<br>
+<br>
+ Add an executeonly appropriately to make sure that clause isn't readable<br>
+ no mstter what.<br>
+<br>
+ Review all the uses of .forceput searching for similar cases, add<br>
+ executeonly as required to secure those. All cases in the PostScript<br>
+ support files seem to be covered already.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_font.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:56:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ec0b35fed3de9f313c7c992844daac5f3f28618d">ec0b35fed3de9f313c7c992844daac5f3f28618d</a>
+<blockquote>
+<p>
+ Handle directory separators in access control matching<br>
+<br>
+ On Windows, we end up dealing with a mishmash of &quot;/&quot; and &quot;\&quot; as directory<br>
+ separators, so a simple equality check isn't sufficient.<br>
+<br>
+ Since there is already (platform specific) function for checking whether a<br>
+ string (or part thereof) is a directory separation, use it.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 21:50:18 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=453ef45209143ecf3c3e25dafd9fbe6698e2c5a1">453ef45209143ecf3c3e25dafd9fbe6698e2c5a1</a>
+<blockquote>
+<p>
+ Disable use of alternate tint transform ICC profile<br>
+<br>
+ A prior commit introduced the use of color management<br>
+ if the DeviceN or Separation device had an ICC profile<br>
+ associated with the colorants. While there is an argument<br>
+ for doing this, it is not the standard behavior seen in<br>
+ AR. Disabling for now and will likely turn this into a<br>
+ command line option.<br>
+<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:48:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc656558a289fa28dbb491d70478fd18973b287a">cc656558a289fa28dbb491d70478fd18973b287a</a>
+<blockquote>
+<p>
+ Fix crashes in RAW_DUMP debug code.<br>
+<br>
+ Dump the buffer before freeing the device, or the pointer will no<br>
+ longer be valid.<br>
+<br>
+ Also, don't access through ppatdev14 when we know it's NULL.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:47:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=633c454261c95e3d1771ad93b7bd6c481119c0d0">633c454261c95e3d1771ad93b7bd6c481119c0d0</a>
+<blockquote>
+<p>
+ Fix deep color transparency pattern copying problem.<br>
+<br>
+ The following test:<br>
+<br>
+ tests/pdf/pattrans_solid_nonrect.pdf.psdcmyk16.300.1..gs<br>
+<br>
+ among others, was showing problems, due to us treating the offset<br>
+ as bytes rather than shorts.<br>
+<br>
+base/gxp1fill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 14:29:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=69b066540069330a8a046039b93e1dcadecfa153">69b066540069330a8a046039b93e1dcadecfa153</a>
+<blockquote>
+<p>
+ Avoid signed overflow in deep transparency calculations.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 12:24:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=825f77eabdbfaa9d566d38c4b2be918143cd5778">825f77eabdbfaa9d566d38c4b2be918143cd5778</a>
+<blockquote>
+<p>
+ Fix overflow in deep color blending.<br>
+<br>
+ Multiplying a 16bit unsigned value with a 16 bit signed value<br>
+ in a 32bit int means we lose the sign bit. Sacrifice a bit of<br>
+ accuracy to avoid that.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 10:10:28 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=885444fcbe10dc42787ecb76686c8ee4dd33bf33">885444fcbe10dc42787ecb76686c8ee4dd33bf33</a>
+<blockquote>
+<p>
+ make .forceput inaccessible<br>
+<br>
+ Bug #701343, #701344, #701345<br>
+<br>
+ More defensive programming. We don't want people to access .forecput<br>
+ even though it is no longer sufficient to bypass SAFER. The exploit<br>
+ in #701343 didn't work anyway because of earlier work to stop the error<br>
+ handler being used, but nevertheless, prevent access to .forceput from<br>
+ .setuserparams2.<br>
+<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_pdfwr.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-19 10:03:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9dae3b271e781c076e49d94dc8590ed95e3f38c9">9dae3b271e781c076e49d94dc8590ed95e3f38c9</a>
+<blockquote>
+<p>
+ Handle drag'n'drop file name/paths<br>
+<br>
+ Because we now run by default with the file access permission active,<br>
+ we need to do additional work for Windows drag and drop files, so they don't<br>
+ throw an invalidaccess error (since we implement drag and drop by sending<br>
+ characters to the gs console to do '(file) run').<br>
+<br>
+ The problem is, we cannot add the file to read list, send the characters to the<br>
+ console, and remove the file from the read list because, although SendMessage()<br>
+ blocks until the message is handles, WriteConsoleInput() does not block until<br>
+ the console buffers are consumed (i.e. it is asynchronous). So, there is no<br>
+ certainty when the final SendMessage() in WM_DROPFILES case is finished that<br>
+ Ghostcript will actually have run the file.<br>
+<br>
+ So, we create a list of dropped file names, add them to the permit read list,<br>
+ when the next WM_DROPFILES event happens, or a WM_DESTROY event, we drop<br>
+ file names from the permit read list before, if necessary, adding the current<br>
+ ones.<br>
+<br>
+psi/dwimg.c<br>
+psi/dwmain.c<br>
+psi/dwmainc.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:43:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c18c7092e8945dcd932226bfea790c842ae21a0">6c18c7092e8945dcd932226bfea790c842ae21a0</a>
+<blockquote>
+<p>
+ Squash warnings in claptrap.<br>
+<br>
+ Thanks to William Bader for highlighting these.<br>
+<br>
+base/claptrap-planar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:28:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89f63112bd8ef15ba7df1fca5b962561c1f756c8">89f63112bd8ef15ba7df1fca5b962561c1f756c8</a>
+<blockquote>
+<p>
+ Squash warning in gdevpsd.c<br>
+<br>
+ Thanks to William Bader for spotting this.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 13:08:14 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f74553992b28ca536d62aa93cf9208bb7aa670b3">f74553992b28ca536d62aa93cf9208bb7aa670b3</a>
+<blockquote>
+<p>
+ Squash some compiler warnings.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+devices/gdevpdfimg.c<br>
+devices/vector/gdevpdfu.c<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 11:45:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=924f701fdc990ac981fb08c4f6c21c668b8b74ef">924f701fdc990ac981fb08c4f6c21c668b8b74ef</a>
+<blockquote>
+<p>
+ Fix X11 device ICC profile memory leaks<br>
+<br>
+ When the x11 devices are running in &quot;buffered mode&quot; (i.e. we render to a<br>
+ pixmap, then blit the pixmap to the X11 Window), we create a memory device<br>
+ which actually does the rendering.<br>
+<br>
+ The memory device takes a reference to the ICC profiles from the x11 device<br>
+ and it is reference counted.<br>
+<br>
+ Firstly, we always incremented the reference count, ignoring the posibility<br>
+ that we were resizing an existing memory device rather than creating a new one.<br>
+<br>
+ Secondly, when shutting down the x11 device, we ignored posibility that<br>
+ buffering was in force, and failed to free the memory device - most of the<br>
+ memory was hoovered up by the garbager, but the ICC profile data isn't in<br>
+ gc memory, hence showing a leak.<br>
+<br>
+ So, fix the memory device ICC reference counting, and reconfigure the device<br>
+ as non-buffering before we shut it down.<br>
+<br>
+devices/gdevxini.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 17:06:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79350a5f0fc9514746f34ff0820f0b6a89f67117">79350a5f0fc9514746f34ff0820f0b6a89f67117</a>
+<blockquote>
+<p>
+ Add -dNOSAFER for Windows installer cidfmap creation<br>
+<br>
+psi/nsisinst.nsi<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:35:15 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=443e60cd379c3a8b5fca89b59280573b2c651e33">443e60cd379c3a8b5fca89b59280573b2c651e33</a>
+<blockquote>
+<p>
+ Bump the version number for release.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 14:36:55 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1ae75eb9d43d9773915ab66b0c97086d0252257">f1ae75eb9d43d9773915ab66b0c97086d0252257</a>
+<blockquote>
+<p>
+ ps2write - don't password encrypt PostScript output!<br>
+<br>
+ Noticed while testing the args commit; if we set -sOwnerPassword (to<br>
+ create a password-protected PDF file), but select (e)ps2write as the<br>
+ device, then the resulting PostScript file would have all the streams<br>
+ (in a PDF sense) encrypted with PDF password encryption.<br>
+<br>
+ Unsurprisingly, this result in a completely unusable PostScript file.<br>
+ Lets not permit that....<br>
+<br>
+devices/vector/gdevpdfp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-15 10:03:54 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d2897b976cf065874516f9f8e2a040965b2a384b">d2897b976cf065874516f9f8e2a040965b2a384b</a>
+<blockquote>
+<p>
+ Remove RC string for real release<br>
+<br>
+base/gscdefs.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-15 08:54:21 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=18eedc30986ed2dfaf2357c0b0ca962532ace896">18eedc30986ed2dfaf2357c0b0ca962532ace896</a>
+<blockquote>
+<p>
+ Dates etc for 9.50 release<br>
+<br>
+ Plus a comment on going to 9.50, rather than 9.28.<br>
+<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-15 08:48:43 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=80f8dff6c57620dd5acae9ebc5b9ab64674b88f0">80f8dff6c57620dd5acae9ebc5b9ab64674b88f0</a>
+<blockquote>
+<p>
+ Fix a mistake in the news section<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 18:29:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24a66f42d67d83714ad971347488c0246e3e8f7c">24a66f42d67d83714ad971347488c0246e3e8f7c</a>
+<blockquote>
+<p>
+ Have warning honor -dQUIET<br>
+<br>
+ Have the warning about calling .lockfileaccess or .setsafe when the controls are<br>
+ already in place honor the -dQUIET/-q command line params.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 18:10:31 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dad10464de52d344287843ca872b56c8e7f33ccb">dad10464de52d344287843ca872b56c8e7f33ccb</a>
+<blockquote>
+<p>
+ Update changelog<br>
+<br>
+doc/History9.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 18:07:29 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f2e2a3fe85d64cabde82d0f6eb982643bc6e8427">f2e2a3fe85d64cabde82d0f6eb982643bc6e8427</a>
+<blockquote>
+<p>
+ Add words about .currentpathcontrolstate operator<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 10:28:15 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad5b08d8be2e7a91599d3bbbc6aa841144662239">ad5b08d8be2e7a91599d3bbbc6aa841144662239</a>
+<blockquote>
+<p>
+ Change version to 9.50<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-14 10:20:19 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1937e14f17e5de54b57d0e911e828639d197a08c">1937e14f17e5de54b57d0e911e828639d197a08c</a>
+<blockquote>
+<p>
+ Update docs on SAFER<br>
+<br>
+ to reflect that SAFER is now the default, and remove the comments about making<br>
+ SAFER the default &quot;in the future&quot;.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-10 09:29:48 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9c63f39ead4aab30addf213f0ab6843ac87b56cf">9c63f39ead4aab30addf213f0ab6843ac87b56cf</a>
+<blockquote>
+<p>
+ ps2write - restore missing %%PageTrailer comment<br>
+<br>
+ Bug #701659 &quot;Missing %%PageTrailer commen&quot;<br>
+<br>
+ An oversight in commit 96c381cce28c27eac182549441a6c5025b0dcdd6<br>
+ caused the comment to be omitted.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-07 18:41:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d89e1aa9cf65e5345a1f009b6d317db024719fe">1d89e1aa9cf65e5345a1f009b6d317db024719fe</a>
+<blockquote>
+<p>
+ Bug 701657: Allocate &quot;memory&quot; device in immovable gc memory<br>
+<br>
+ Devices are supposed to be allocated in memory that cannot relocate (i.e.<br>
+ non-gc memory or an immovable allocation). The memory device accessible from<br>
+ Postscript (makeimagedevice/makewordimagedevice) was being created in regular,<br>
+ relocatable gc memory.<br>
+<br>
+ This caused an invalid memory access when cleaning up subclassed devices, as the<br>
+ one device in the chain may have moved. So switch to using an immovable<br>
+ allocation.<br>
+<br>
+base/gsdevmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-02 00:01:17 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=458f715b0d59278f0788e0c89ee5eb04d48871ef">458f715b0d59278f0788e0c89ee5eb04d48871ef</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.17 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-01 10:35:48 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8ba9e017cdfab836f62853629d75f484127342e">f8ba9e017cdfab836f62853629d75f484127342e</a>
+<blockquote>
+<p>
+ Fix memory corruption setting a halftone<br>
+<br>
+ When setting a new halftone in the graphics state, we try to re-use the data<br>
+ from the existing device halftone.<br>
+<br>
+ The problem is that the device halftone can have higher component indices than<br>
+ there are components in the new halftone we are creating. In this case, we can<br>
+ end up writing off the end of the components array for the new halftone<br>
+ structure.<br>
+<br>
+ Simply check that the new halftone has enough components before doing the<br>
+ duplication.<br>
+<br>
+base/gsht.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-30 13:40:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1681c7ebb5a338002d5f7dd8da9bffda675f0656">1681c7ebb5a338002d5f7dd8da9bffda675f0656</a>
+<blockquote>
+<p>
+ pdfwrite - don't honour /Producer key in DOCINFO pdfmark<br>
+<br>
+ Bug #701639 &quot;pdfwrite should not honour the /Producer key in DOCINFO pdfmark&quot;<br>
+<br>
+ The Producer in the document information dictionary (and XML Metadata)<br>
+ is defined quite clearly as the application which produced the PDF file<br>
+ from its native format.<br>
+<br>
+ Ghostscript uses the Producer key (if present in the pdfmark) to set<br>
+ the Producer, but it should not do so. Adobe Acrobat Distiller (at<br>
+ least the end user version) does not permit this value to be altered.<br>
+<br>
+ On reflection we can see why; in the case of a problem with a PDF file<br>
+ its important to know which application created it, and we should not<br>
+ let PostScript obscure that (we already do not pass the Producer<br>
+ information on when the input is PDF).<br>
+<br>
+ The code did already attempt to overwrite any Producer string which<br>
+ contained 'Distiller' (I have no idea why) and that code contained an<br>
+ error which could lead to an invalid Document Information dictionary<br>
+ being created.<br>
+<br>
+ This commit removes the ability for DOCINFO pdfmarks to alter the<br>
+ Producer, which obviously fixes the bug.<br>
+<br>
+ However..... it is actually important for our commercial customers to<br>
+ be able to set this value. A problem with a PDF file created by one of<br>
+ our customer's products should be reported to that customer, not us, as<br>
+ we will not be able to investigate the problem while our customer<br>
+ should be able to. At the very least our customer will know how to<br>
+ retrieve the configuration of Ghostscript being used.<br>
+<br>
+ So permit the commercial version of Ghostscript to set the /Producer<br>
+ from a pdfmark.<br>
+<br>
+devices/vector/gdevpdfm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-30 09:16:28 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a27af00c8727ec4eaf0f4730963b8a81aab8590d">a27af00c8727ec4eaf0f4730963b8a81aab8590d</a>
+<blockquote>
+<p>
+ Small changelog tweak<br>
+<br>
+doc/History9.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-30 08:33:08 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=84864d86363a3e5b53f4b75fae7c850c2c22e5ee">84864d86363a3e5b53f4b75fae7c850c2c22e5ee</a>
+<blockquote>
+<p>
+ Dates and docs for 9.28 rc4<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-27 13:26:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55fef678a69b921b548d5e1ffb93d9162fedfdc3">55fef678a69b921b548d5e1ffb93d9162fedfdc3</a>
+<blockquote>
+<p>
+ Bug 701634: Correctly handle file name of &quot;\0&quot;<br>
+<br>
+ Attempting to open a file with a filename string starting with a NULL<br>
+ character should be treated the same as if the string was zero length.<br>
+<br>
+ Not doing so created a broken file object leading to several operations<br>
+ resulting in a segfault.<br>
+<br>
+ Also, add cleanup in the event of such an error, freeing memory allocated in<br>
+ preparing the gs stream object.<br>
+<br>
+base/sfxcommon.c<br>
+psi/zfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 10:47:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51e6a6103f9fa51e14c737e134bcef8a3daf7ef8">51e6a6103f9fa51e14c737e134bcef8a3daf7ef8</a>
+<blockquote>
+<p>
+ Revised comment for 8992f00edfd1c39154c013489de2a01d2e9a92ee<br>
+<br>
+ Make it clearer why the revised behaviour is required.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-26 09:34:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=833fc0371d2ca44ca603b2fd1a42fa1ef820f7eb">833fc0371d2ca44ca603b2fd1a42fa1ef820f7eb</a>
+<blockquote>
+<p>
+ Bug 701313: Disable libtiff callbacks when libtiff is shared<br>
+<br>
+ It seems that libtiff uses global variables to store the error/warning callbacks<br>
+ so if two callers in the exe are using the libtiff shared lib, very bad things<br>
+ happen (usually a segfault).<br>
+<br>
+ So, if that's how we're linked, set the callbacks to NULL.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-24 15:48:54 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cfd109650c2328300b21f7e5853c0e4bec669876">cfd109650c2328300b21f7e5853c0e4bec669876</a>
+<blockquote>
+<p>
+ Cope with .setsafe(global) being called when already 'SAFER'<br>
+<br>
+ As we default to SAFER file controls now, we want to cope with .setsafe and<br>
+ .setsafeglobal being called either when already SAFER, or called multiple times.<br>
+<br>
+ This means adding a .currentpathcontrolstate operator so we don't try to<br>
+ influence the path control lists after control is activated.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+psi/zfile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-24 09:18:47 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45013b96f1e7ef06c64028122ec8870f3a71335d">45013b96f1e7ef06c64028122ec8870f3a71335d</a>
+<blockquote>
+<p>
+ tiffsep(1): Cope with .tiff ending as well as .tif<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 20:04:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6aea104cc48170a4064a12e89c72a898c6bd5967">6aea104cc48170a4064a12e89c72a898c6bd5967</a>
+<blockquote>
+<p>
+ Recast validate to use gs_file_name_check_separator.<br>
+<br>
+ Avoid using gp_file_name_directory_separator, as windows can<br>
+ have 2 different directory separators.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 18:05:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1a661c69f78ea42828f94fe829163d20bcf7706">f1a661c69f78ea42828f94fe829163d20bcf7706</a>
+<blockquote>
+<p>
+ Remove spurious call to gp_validate_path_len()...<br>
+<br>
+ ...in gx_device_open_output_file()<br>
+<br>
+ There is no need to validate the path in gx_device_open_output_file() as it will<br>
+ be done at a lower level (gp_fopen) for paths that require it (we only validate<br>
+ *after* the Postscript style %device% paths have been expanded into 'real'<br>
+ paths).<br>
+<br>
+ This also interacts badly with the revised handling of formatted string<br>
+ file names, hence remove it.<br>
+<br>
+base/gsdevice.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 17:56:34 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eed7d85ac16ae516e1c4e51bcdea3924a973da5e">eed7d85ac16ae516e1c4e51bcdea3924a973da5e</a>
+<blockquote>
+<p>
+ Fix tiffsep(1) interaction with file permissions lists<br>
+<br>
+ The previous solution didn't quite work, when using formatted strings for<br>
+ output file names (i.e. output-%d.tif).<br>
+<br>
+ This adds a dedicated gs_remove_outputfile_control_path() to mirror<br>
+ gs_add_outputfile_control_path() and uses those for the dynamic adding and<br>
+ removing of separation output file names.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 17:11:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76ca3dd29559dd72da3f154e2ba18f86cd46fff6">76ca3dd29559dd72da3f154e2ba18f86cd46fff6</a>
+<blockquote>
+<p>
+ Update path validation to accept multiple *'s as special case.<br>
+<br>
+ Previously we interpretted multiple *'s as meaning the same as<br>
+ single *'s. Now we use them to mean &quot;just those chars that<br>
+ might be created by the use of a %...{d,x,u,i,o,X} format<br>
+ specifier&quot;.<br>
+<br>
+base/gpmisc.c<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-23 16:41:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dfc93423545c8a9a927b1f240ba4bdc22b39f0b6">dfc93423545c8a9a927b1f240ba4bdc22b39f0b6</a>
+<blockquote>
+<p>
+ Improve OutputFile handling of %d etc.<br>
+<br>
+ Only accept %d (and friends) (as opposed to anything starting with %).<br>
+ Only accept legal combinations of flags/widths/precision etc.<br>
+ Generate a more conservative wildcard.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 12:38:02 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd3db03d3e04c9146b596280d6da76cec23f60a6">cd3db03d3e04c9146b596280d6da76cec23f60a6</a>
+<blockquote>
+<p>
+ Slight improvement to &quot;permit-file-***&quot; parameter documentation.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 11:17:53 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4baa696cc3498ae834052440f9f9d9fc0b8ad122">4baa696cc3498ae834052440f9f9d9fc0b8ad122</a>
+<blockquote>
+<p>
+ Fix tiffsep and tiffsep1 with new file access control and SAFER mode<br>
+<br>
+ The tiffsep and tiffsep1 synthesize output file names with the outputfile<br>
+ and the separation color name, but the 'open' of these filenames would<br>
+ fail since they were not included on the permit_file_writing list.<br>
+ Add the full filename before opening, and remove the names after closing.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 11:53:10 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=41d79063acee7244f5990d2a8e19c567e24051af">41d79063acee7244f5990d2a8e19c567e24051af</a>
+<blockquote>
+<p>
+ Squash stupid const warning.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 19:42:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b58f45daa9007f482a49132cbfaa47c8b86ce7d5">b58f45daa9007f482a49132cbfaa47c8b86ce7d5</a>
+<blockquote>
+<p>
+ Squash some &quot;const&quot; warnings.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-20 17:49:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e7039d7a83a7e35b8b41d59d7fb9a8b4fda7fb0">0e7039d7a83a7e35b8b41d59d7fb9a8b4fda7fb0</a>
+<blockquote>
+<p>
+ Fix &quot;permit-file-xxxx&quot; handling.<br>
+<br>
+ Ray spotted that gs_add_explicit_control_path was adding 17<br>
+ to arg before using it. 17 happens to be the right amount<br>
+ to add for &quot;--permit-file-read=&quot;, but the wrong amount for<br>
+ write/control/all.<br>
+<br>
+ Update the code to call it with the correct arg pointer<br>
+ to start with.<br>
+<br>
+ Also, update a couple of routines to cope with being called<br>
+ with NULL strings.<br>
+<br>
+ Also use enum values in switch rather than 0, 1, 2.<br>
+<br>
+base/gslibctx.c<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-19 11:02:48 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=18316aba11fafc57ee77dbd7774b2c88b964a9d9">18316aba11fafc57ee77dbd7774b2c88b964a9d9</a>
+<blockquote>
+<p>
+ Make missing jbig2 decoder fatal error.<br>
+<br>
+ If we have neither Luratech nor jbig2dec, have configure fail, unless<br>
+ explicitly run with --without-jbig2dec<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-18 09:24:25 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=569a551f2a57f6e6c1e692f6b834c765dcbe7cfa">569a551f2a57f6e6c1e692f6b834c765dcbe7cfa</a>
+<blockquote>
+<p>
+ Dates, docs, etc for 9.28 rc3<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-17 11:42:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2ff44c7c8a09dd1c6b7cd750323ee4087b5cebc5">2ff44c7c8a09dd1c6b7cd750323ee4087b5cebc5</a>
+<blockquote>
+<p>
+ Fix file permissions interaction with '@' command line<br>
+<br>
+ If an options file (prefixed '@' on the command line) followed something that<br>
+ required initialising the Postscript interpreter (such as a '-c' option),<br>
+ opening the file would potentially fail because file permissions had been<br>
+ activated by the interpreter.<br>
+<br>
+ Add and remove the file from the permit reading list before attempting to open<br>
+ it.<br>
+<br>
+base/gsargs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 14:23:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3695b7f576c607bd3627e6e28dc982fdf68b1b32">3695b7f576c607bd3627e6e28dc982fdf68b1b32</a>
+<blockquote>
+<p>
+ If set, add PCLFONTSOURCE value to permit_file_reading list<br>
+<br>
+pcl/pl/pjparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 13:07:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4196e26a9cf3c8afd6c069a789ac649019ae096a">4196e26a9cf3c8afd6c069a789ac649019ae096a</a>
+<blockquote>
+<p>
+ Bug 701561: 'reduce' paths before adding to permit lists<br>
+<br>
+ Before attempting to open files, we pre-process the requested file name to<br>
+ remove surplus/unnecessary elements: i.e. './././file' would be reduced to just<br>
+ './file', or '../dir/../dir/../dir/file' would be reduced to '../dir/file'.<br>
+<br>
+ The 'reduced' path is what we try to open, hence it is also what we check<br>
+ against the file permissions list before we allow files to be accessed.<br>
+<br>
+ That being so, we should also 'reduce' paths as we add them to the permissions<br>
+ lists - thus the permissions list creation and checking are consistent.<br>
+<br>
+base/gslibctx.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 14:10:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3d55799ea64088e08fc2783012957035c77a66ca">3d55799ea64088e08fc2783012957035c77a66ca</a>
+<blockquote>
+<p>
+ Fix Bug 696333. Allow large bitmaps in clist when writing tile cache.<br>
+<br>
+ When writing bits to update the tile cache, we don't need to restrict to<br>
+ a single command buffer as with the copy_mono and copy_color commands.<br>
+<br>
+ Progressions on:<br>
+ tests_private/comparefiles/Bug694385.pdf.psdcmyk.300.1..gs<br>
+ tests_private/pdf/sumatra/2028_-_invisible_patterns.pdf.psdcmyk.300.1..gs<br>
+ tests_private/ps/ps3cet/09-47B.PS.pdf.pkmraw.300.0..gs_pdf<br>
+ tests_private/ps/ps3fts/176-01.ps.psdcmyk.300.1..gs<br>
+<br>
+base/gxclbits.c<br>
+base/gxcldev.h<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 10:37:42 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1613502f83ddba352cc8e98e7dd3182c9d7732bc">1613502f83ddba352cc8e98e7dd3182c9d7732bc</a>
+<blockquote>
+<p>
+ Fix SEGV with flp device and PCL with clist mode and large BandHeight.<br>
+<br>
+ If the 'clist_init' fails initially (with rangecheck) due to the buffer<br>
+ space too small for the BandHeight specified, we loop in the caller after<br>
+ increasing the buffer size, but clist_init left &quot;is_open&quot; false when failing.<br>
+ Add save_is_open in gdev_prn_setup_as_command_list so that we can restore it<br>
+ if the clist_init eventually suceeds.<br>
+<br>
+ The SEGV was with image_data because re-opening the flp device reset the<br>
+ &quot;obsolete&quot; procs to the default, so flp_image_data was replaced by the<br>
+ gx_default_image_data, but no begin_image had been performed (flp_begin_image<br>
+ skipped this since we were not yet at the FirstPage).<br>
+<br>
+base/gdevprn.c<br>
+base/gxclist.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 18:53:49 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f2d03f59e04a053c14285d8dbdd869bf9a4435e7">f2d03f59e04a053c14285d8dbdd869bf9a4435e7</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.17 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 18:48:36 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8da8fbaeb6074161bc3a9b22e89265f5942db0d9">8da8fbaeb6074161bc3a9b22e89265f5942db0d9</a>
+<blockquote>
+<p>
+ jbig2dec: Use the same contact information everywhere.<br>
+<br>
+jbig2dec/README<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 16:12:32 +0100
+</strong>
+<br>Paul Vojta &lt;vojta@math.berkely.edu&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c6e19334062d12189612b84f53fe393a7808f74">6c6e19334062d12189612b84f53fe393a7808f74</a>
+<blockquote>
+<p>
+ Documentation - fix some typos<br>
+<br>
+ Bug #701589 &quot;Minor documentation problems in 9.28-rc2&quot;<br>
+<br>
+ Thanks to Paul Vojta for pointing these out. Unfortunately we cannot use the<br>
+ supplied patch, as it includes alterations to History9.htm, which is auto-<br>
+ generated from the commit logs. The remaining changes are applied here.<br>
+<br>
+doc/Language.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-11 12:18:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90bdf83d696562e4136b8f565cac06cc32b161ae">90bdf83d696562e4136b8f565cac06cc32b161ae</a>
+<blockquote>
+<p>
+ Bug 701563: pdfwrite annotation pdfmark /Border key<br>
+<br>
+ Despite the spec saying the values for the /Border key are in user space<br>
+ coordinates, Distiller appears to pass the values through to the output PDF<br>
+ untouched (no rescaling - unlike the values for /Rect, also in user space,<br>
+ according to the spec, which it does scale/translate). Ghostscript/pdfwrite<br>
+ did scale the /Border values.<br>
+<br>
+ This just changes pdfwrite to write the values out unchanged.<br>
+<br>
+devices/vector/gdevpdfm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-16 09:56:52 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9e997cb97a274bebfc028e8831a43d6f66be0f9">a9e997cb97a274bebfc028e8831a43d6f66be0f9</a>
+<blockquote>
+<p>
+ Documentation - add a note about SAFER for PDF/X ICC profiles<br>
+<br>
+ Bug #701553 &quot;Examples of PDF/X and PDF/A conversion should be updated for Ghostscript 9.28&quot;<br>
+<br>
+ ICC profiles required for PDF/X and PDF/A output need to be readable<br>
+ in order to work when -dSAFER is true (the new default). This wasn't<br>
+ clear from the documentation, so add a note about it.<br>
+<br>
+ As noted in the bug report, it is possible to embed the profile in the<br>
+ PostScript code, but as Chris says this is probably beyond reasonable<br>
+ expectations of the average user; they simply won't change the example<br>
+ and will then complain that it isn't correct. Users capable of making<br>
+ this work almost certainly have enough knowledge to realise they can<br>
+ do this instead of making the profile readable.<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 19:41:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cea41505580dfe55234bd4972fbb09af5e2e6bb8">cea41505580dfe55234bd4972fbb09af5e2e6bb8</a>
+<blockquote>
+<p>
+ Fix various printer devices to properly call spec ops.<br>
+<br>
+ Various printer devices (psd, psdcmykog, tiffsep, tiffscaled)<br>
+ were passing the spec ops on to gx_default_dev_spec_op rather<br>
+ than gdev_prn_dev_spec_op.<br>
+<br>
+ The most obvious implication of this was that we'd sometimes<br>
+ get a warning about printer devices having a private spec op.<br>
+<br>
+devices/gdevcmykog.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 17:09:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89f3d6001728678755aca8c5a02e57bba72a0813">89f3d6001728678755aca8c5a02e57bba72a0813</a>
+<blockquote>
+<p>
+ Bug 701568 followup: Fix RLE compressor.<br>
+<br>
+ The previous fix to the RLE compressor reveals an additional<br>
+ existing issue to do with us not checking whether we have<br>
+ space in the buffer to write the EOD byte.<br>
+<br>
+ Fixed here.<br>
+<br>
+base/srle.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-12 09:35:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f394c0722d3415ba03f57dc32dcd8484d3173b62">f394c0722d3415ba03f57dc32dcd8484d3173b62</a>
+<blockquote>
+<p>
+ Bug 701568: Fix gdevpx.c RLE stream handling.<br>
+<br>
+ The current code in pclxl_write_image_data_RLE passes<br>
+ lines of data to the RLE compression routine. It tells<br>
+ each invocation of that routine that this is the &quot;last&quot;<br>
+ block of data, when clearly it is not.<br>
+<br>
+ Accordingly, the compression routine inserts the &quot;EOD&quot; byte<br>
+ into the stream, and returns EOFC.<br>
+<br>
+ Independently of the return value used, having multiple EOD<br>
+ bytes in the data is clearly wrong. Update the caller to only<br>
+ pass &quot;last&quot; in for the last block.<br>
+<br>
+ The code still returns EOFC at the end of the data, so update<br>
+ this final call to accept (indeed, expect) that return value<br>
+ there.<br>
+<br>
+devices/vector/gdevpx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-10 09:04:46 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6cd0b941d86fe54b7e818e563dc702a147bab95a">6cd0b941d86fe54b7e818e563dc702a147bab95a</a>
+<blockquote>
+<p>
+ Fix bug 701550, problem with forall on strings.<br>
+<br>
+ Hard to believe, but this problem has existed since at least version 3.33.<br>
+ The 'string_continue' function altered the size which was used to decide if<br>
+ there were still characters to be processed BEFORE invoking the 'push(#)' macro.<br>
+ If the 'push(1)' encountered a full stack segment, it would return stackoverflow<br>
+ so that the operand stack could be extended. This meant that the decision to<br>
+ stop enumerating the string would end early (depending on how many times the<br>
+ stackoverflow occurred).<br>
+<br>
+ Usually the procedure of the forall would either consume the character (reducing<br>
+ the stack), or add an element to the stack triggering the stack extension before<br>
+ the next execution of string_continue, but -c &quot;401 string { dup } forall count =&quot;<br>
+ results in only 800 stack elements (rather than 802 as expected).<br>
+<br>
+psi/zgeneric.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 15:54:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f560f3c468ac187eca8cd55ee46a46e2924e0924">f560f3c468ac187eca8cd55ee46a46e2924e0924</a>
+<blockquote>
+<p>
+ Doc updates, changelog, news etc<br>
+<br>
+ Update to note explicitly case sensitivity on Windsows<br>
+<br>
+ In News.htm and History9.htm<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-05 09:09:38 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc86598152465c85dfca5ba265608931672f730f">cc86598152465c85dfca5ba265608931672f730f</a>
+<blockquote>
+<p>
+ Date for 9.28 rc2<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-10-31 20:22:11 +0100
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=350a5cd8b7bddee3fa914c914dd40a685fed54e7">350a5cd8b7bddee3fa914c914dd40a685fed54e7</a>
+<blockquote>
+<p>
+ Bug 700088: Report error if all wanted J2K components are not decoded.<br>
+<br>
+ Ghostscript used to attempt to use even the undecoded components.<br>
+ The source code for upstream's opj_decompress tool avoided this by<br>
+ a workaround along with a comment indicating that this ought to be<br>
+ done in the library (so all clients, e.g. Ghostscript will benefit<br>
+ from it). With this commit the library will error out if not all<br>
+ requested components are successfully decoded. Thus Ghostscript<br>
+ will no longer crash.<br>
+<br>
+ Reported in https://github.com/uclouvain/openjpeg/issues/1158<br>
+ sent upstream in https://github.com/uclouvain/openjpeg/pull/1164<br>
+ and finally committed in e66125fe260deee49fdf6e9978d9bd29871dd5bb<br>
+<br>
+openjpeg/src/bin/jp2/opj_decompress.c<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 12:34:55 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b944e875baed62e718eee8e7ad2b351cd4f4aa07">b944e875baed62e718eee8e7ad2b351cd4f4aa07</a>
+<blockquote>
+<p>
+ Undo commit 95f7befcec1b30fd5014c8ad616485d32901ce33 for release<br>
+<br>
+ Proper handling of the page group color space is going to require<br>
+ a more complex solution whereby we ensure that we do the final<br>
+ alpha blending in the page group color space and not the target<br>
+ device color space.<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 08:52:16 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ebfe16357f3484209e69d6788cc52b20dbdb81a0">ebfe16357f3484209e69d6788cc52b20dbdb81a0</a>
+<blockquote>
+<p>
+ Add -sBlendColorProfile into Use.htm<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 18:15:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbdfaa56b00f2ba556476f0265e65e4ad370f641">bbdfaa56b00f2ba556476f0265e65e4ad370f641</a>
+<blockquote>
+<p>
+ Avoid potential UMR with arg checking in arg sanitization code.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 17:16:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00d4696ea2de6c48a57d5a4ce0c3bbfd99201e3a">00d4696ea2de6c48a57d5a4ce0c3bbfd99201e3a</a>
+<blockquote>
+<p>
+ Proper fix for deep color overprint.<br>
+<br>
+ The previous fix confused memset and memcpy. Properly write the<br>
+ (native endian) 16 bit color values into the big endian buffer.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 12:59:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c6d448b3fe616fdc2ba1e52766c9a4417e4e738f">c6d448b3fe616fdc2ba1e52766c9a4417e4e738f</a>
+<blockquote>
+<p>
+ Fix deep color mattes.<br>
+<br>
+ As seen with the content vanishing when rendering<br>
+ tests_private/pdf/sumatra/uninitialized_value_with_JPX_images.pdf<br>
+ to psdcmyk16. The Softmask on the image has a Matte of [1,1,1]<br>
+ and the calculations in the current code overflow, meaning that<br>
+ it comes out as completely white.<br>
+<br>
+ We resort to 64bit to avoid the overflow. Mattes are vanishingly<br>
+ rare, so speed shouldn't be an issue. We can revisit if we ever<br>
+ find a case that matters.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:45:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c1f255c2e825ab5e0a3d0f7bfa88538c7cbb912">4c1f255c2e825ab5e0a3d0f7bfa88538c7cbb912</a>
+<blockquote>
+<p>
+ Update overprint hl_color code to cope with 16bit devices too.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:16:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=373787ee145e906c8d19d5ccda84b4f267db2010">373787ee145e906c8d19d5ccda84b4f267db2010</a>
+<blockquote>
+<p>
+ Fix deep color transparency overprint.<br>
+<br>
+ The component copy loop at the end of the blend could fail to copy<br>
+ enough entries.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-30 15:16:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=361c4dd1e18ca0675173c0ad0104ffb910e93bb4">361c4dd1e18ca0675173c0ad0104ffb910e93bb4</a>
+<blockquote>
+<p>
+ Avoid overflow in deep color luminosity calculations.<br>
+<br>
+ Resort to 64bit as scale calculations are not constrained<br>
+ to the usual 16bit range.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 10:02:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51d57fafbdc021c8c73475db505156f77e96ce39">51d57fafbdc021c8c73475db505156f77e96ce39</a>
+<blockquote>
+<p>
+ Fix clearing of the drag and drop file list<br>
+<br>
+ Because we have to store the list of file names from drag and drop events, in<br>
+ order to correctly add and remove them from the permit file read list, we also<br>
+ want to clear the lists before we destroy the &quot;text&quot; window object.<br>
+<br>
+ The problem is, this happens after we shutdown Ghostscript and unload the dll.<br>
+<br>
+ This moves that clearing of the list into function that we call before we<br>
+ shut down.<br>
+<br>
+psi/dwmain.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 10:14:52 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad0532e379a9eb6eb8a6fc0a6305679b25cd9ecb">ad0532e379a9eb6eb8a6fc0a6305679b25cd9ecb</a>
+<blockquote>
+<p>
+ Fix path permissions added from cidfmap.<br>
+<br>
+ From the cidfmap, we accumulate a list of unique directory paths a we process<br>
+ cidfmap and then add them - when I did that code, I forgot that to allow access<br>
+ to the directory, we need a trailing directory separator.<br>
+<br>
+ Add that before calling .addcontrolpath<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 16:49:30 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f0fedf1f77a9fe70627355b45fdb809e83df3568">f0fedf1f77a9fe70627355b45fdb809e83df3568</a>
+<blockquote>
+<p>
+ Fix font file finding with -P<br>
+<br>
+ In trying to reproduce the issue that inspired commit dea69cd04964, I noticed<br>
+ that font file searching wasn't working correctly with -P specified on the<br>
+ command line.<br>
+<br>
+ Previously, it could just end up with us not finding a font we should have, but<br>
+ with dea69cd04964 it would result in a typecheck error.<br>
+<br>
+ This ensures the stack is always how it should be after the findlibfile<br>
+ call<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 16:10:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5c28996d19d5e10cb177e72c47037ec0c7b3e4d5">5c28996d19d5e10cb177e72c47037ec0c7b3e4d5</a>
+<blockquote>
+<p>
+ Make it clear: file/path matching is always case sensitive<br>
+<br>
+ even on Windows.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 19:50:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24532ce9371fd1f69dd343cbd6ac8187a86c5c96">24532ce9371fd1f69dd343cbd6ac8187a86c5c96</a>
+<blockquote>
+<p>
+ Fix overflow in 16bit blending calculations.<br>
+<br>
+ The blending code uses the following construction in<br>
+ several places:<br>
+<br>
+ src_scale = ...; /* a value between 0 and 0x10000 */<br>
+ tmp = (y-z) * src_scale + 0x8000;<br>
+ foo = x + (tmp&gt;&gt;16);<br>
+<br>
+ Where x,y,z, are all expected to be in the 0...0xffff range.<br>
+<br>
+ Due to y-z having a sign bit, this can overflow a 32 bit tmp.<br>
+<br>
+ We therefore sacrifice a bit of accuracy in src_scale to get<br>
+ correctness.<br>
+<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 14:13:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ca52028b90a09d056190548c41ae0b9a9fbadb4e">ca52028b90a09d056190548c41ae0b9a9fbadb4e</a>
+<blockquote>
+<p>
+ Remove outdated FIXME's.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 12:50:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bd59dc145252282d8f586c36082e63a0eba95c15">bd59dc145252282d8f586c36082e63a0eba95c15</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid divide by zero in shading.<br>
+<br>
+ The previous commit for this bug was enough to solve the problem<br>
+ for ppmraw, but not, it seems, for other devices. This addresses<br>
+ the division by zero more directly.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 20:13:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a32a379933f4ba27ff1ad5734ec8c24c42eb513">9a32a379933f4ba27ff1ad5734ec8c24c42eb513</a>
+<blockquote>
+<p>
+ Fix deep color transparency saturation blending.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2513.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 17:45:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68af4dbc7ca2d6bfdbe938b840799cb8883c973e">68af4dbc7ca2d6bfdbe938b840799cb8883c973e</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid division by zero in gx_shade_trapezoid<br>
+<br>
+ Remove some incorrect clipping code.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:54:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4be058791ae19131f19a8303364be53619abc280">4be058791ae19131f19a8303364be53619abc280</a>
+<blockquote>
+<p>
+ Exit early from gx_shade_trapezoid in more cases.<br>
+<br>
+ A zero height trap isn't plotted, so we can bail out early in<br>
+ that case.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 17:02:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9423e84178071f16b83d18412b22b0b479b1938b">9423e84178071f16b83d18412b22b0b479b1938b</a>
+<blockquote>
+<p>
+ Fix deep colour transparency &quot;uncompositing&quot;.<br>
+<br>
+ Uncompositing a group uses a scale factor that is greater in range<br>
+ than we'd like; we need to resort to 64bit to do this to avoid<br>
+ losing accuracy.<br>
+<br>
+ This solves problems seen in:<br>
+<br>
+ tests_private/comparefiles/Bug689918.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 14:26:41 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=131768114453972469296658b795406b79630538">131768114453972469296658b795406b79630538</a>
+<blockquote>
+<p>
+ Handle relative FONTPATH values<br>
+<br>
+ Prior to 9.21 (specifically: 8abd22010eb4db0fb1b10e430d5f5d83e015ef70), relative<br>
+ paths for FONTPATH worked, but did so due to a logic fault with how we search<br>
+ for &quot;lib&quot; files.<br>
+<br>
+ When attempting to open file names specified on the command line, we used a<br>
+ flag set in the command line handling (starting_arg_file) to know whether the<br>
+ lib file searching logic should try to open the file name directly (as well as<br>
+ trying the file combined with each path in the search path).<br>
+<br>
+ In versions prior to commit 8abd22010eb4 that flag (starting_arg_file) could<br>
+ remain set to true, even after the command line file(s) had been opened. This<br>
+ represented a (minor) security risk. Commit 8abd22010eb4 ensured the flag was<br>
+ properly (re)set, and that caused relative paths for FONTPATH stopped working.<br>
+<br>
+ Rather than reintroduce the security risk, update the code that checks whether<br>
+ the font files exist so it explicitly tries the file name directly, rather than<br>
+ assuming .libfile (or findlibfile, in this case) does that automatically.<br>
+<br>
+ Also remove an extraneous (but benign) dup of the font name.<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:27:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=98310063bdbe8c67bcfe84e2c648cfa286a05738">98310063bdbe8c67bcfe84e2c648cfa286a05738</a>
+<blockquote>
+<p>
+ pdfwrite - fix corner case with Color Conversion<br>
+<br>
+ Bug #701456 &quot;Ghostscript creates broken PDF file after color conversion&quot;<br>
+<br>
+ The test file is, essentially weird. The image on page 3 is not a single<br>
+ image, its a series of images, all of which are in a /Indexed /DeviceRGB<br>
+ colour space.<br>
+<br>
+ In addition, these images are drawn on *top* of another set of images<br>
+ (thereby completely obscuring them). These images are also drawn in<br>
+ /Indexed /DeviceRGB. However, these images are in fact monochrome, the<br>
+ Indexed space consists of 2 colours. This means that (highly unusually)<br>
+ we have a DeviceRGB image with 1 Bit Per Component.<br>
+<br>
+ This caused problems for the pdfwrite compression filter chooser because<br>
+ it chose (and configured) a compression scheme suitable for 1 BPC data<br>
+ and then actually output 8 BPC data. This led to the compression filter<br>
+ writing too little data.<br>
+<br>
+ Fix this here by setting the BPC to 8 if we are doing colour conversion,<br>
+ and have the colour conversion setup code use the original value in the<br>
+ image enumerator (the conversion code *does* need to know the input is<br>
+ 1 BPC).<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 11:36:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aee3b922087674ddd7c64444988018fafc3da127">aee3b922087674ddd7c64444988018fafc3da127</a>
+<blockquote>
+<p>
+ PDF interpreter - more /Mask strangeness in Acrobat<br>
+<br>
+ Bug #701468 &quot; More weirdness with images containing invalid /Mask values&quot;<br>
+<br>
+ In order to render this file as per Acrobat, we need to ignore the /Mask<br>
+ array. However, in order to render bug 689717 correctly we need to fix<br>
+ the /Mask array.<br>
+<br>
+ Both cases are 1 BitsPerComponent DeviceGray images, the only difference<br>
+ is the actual /Mask values. Bug 689717 has [255 255] while 701468 has<br>
+ [243 255]. We can differentiate based on whether we have DeviceGray<br>
+ 1 BPC image, where the Mask values are not the same. In the case they<br>
+ are different we use the existing technique of calculating the maximum<br>
+ value and using that (for both, so there is no range). Where there is a<br>
+ range (ie not a single colour) this is clearly unusable in a 2-colour<br>
+ image, so ignore the /Mask altogether.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 15:28:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad22dcaa078fd16f2ac395f65b6ad87ba24c8903">ad22dcaa078fd16f2ac395f65b6ad87ba24c8903</a>
+<blockquote>
+<p>
+ Fix deep colour knockout logic.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2507.pdf.psdcmyk16.72.0<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:34:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4cda7bfc8cc8c5c4dcd36167191012aa379100ac">4cda7bfc8cc8c5c4dcd36167191012aa379100ac</a>
+<blockquote>
+<p>
+ Squash a couple of warnings.<br>
+<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:01:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7b5166b5c65703abb02c15a31c9f8341f54d1470">7b5166b5c65703abb02c15a31c9f8341f54d1470</a>
+<blockquote>
+<p>
+ Fix SoftLight blending in deep color transparency.<br>
+<br>
+ As seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -dMaxBitmap=80000000 -o out.psd<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_09_0919.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 11:28:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5875be5edeb034787a11760c9330cac039f13044">5875be5edeb034787a11760c9330cac039f13044</a>
+<blockquote>
+<p>
+ Fix problems with pngalpha and deep color transparency filling.<br>
+<br>
+ The pngalpha device is created with a depth of 32, with 3 color<br>
+ components; this was confusing pdf14 into thinking that more<br>
+ than 8 bits per color were being used, and so deep color buffers<br>
+ were required.<br>
+<br>
+ To fix this we update the logic to be smarter; in cases where we<br>
+ don't have a clear determination based on bits alone, we look<br>
+ at the max_color and max_gray values. Because this code is now<br>
+ more complex than before, we pull it into a shared function.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+base/gdevprn.c<br>
+base/gsptype1.c<br>
+base/gstrans.c<br>
+base/gxclthrd.c<br>
+base/gxdevcli.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 15:06:17 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6e7283fa5bcea9ffbe4bb9da440dd8fa4820e4d6">6e7283fa5bcea9ffbe4bb9da440dd8fa4820e4d6</a>
+<blockquote>
+<p>
+ Fix deep color transparency issue.<br>
+<br>
+ Fix overflow in art_pdf_composite_knockout_16, seen in:<br>
+<br>
+ tests_private/comparefiles/Bug690546.pdf.psdcmyk16.72.0<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 18:24:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=628c9741323ea69b0be8e4008a81b1db3d644ab8">628c9741323ea69b0be8e4008a81b1db3d644ab8</a>
+<blockquote>
+<p>
+ Fix deep color transparent pattern problems.<br>
+<br>
+ Transparency buffers are held as native endian. Pattern cache<br>
+ tiles are held as big endian. When we make pattern cache tiles<br>
+ from transparency buffers we therefore need a conversion.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxp1fill.c<br>
+base/gxpcolor.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:35:14 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be4da9d67cbec784be740086681f96a63496ae48">be4da9d67cbec784be740086681f96a63496ae48</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Do not output LUTs with CUPS_DEBUG set<br>
+<br>
+ This change lets complete LUTs in the debug output only be listed when<br>
+ CUPS_DEBUG2 is set and not already with CUPS_DEBUG.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:08:52 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e28c843e56d1be4638bf9d84a499794534ea0d9">0e28c843e56d1be4638bf9d84a499794534ea0d9</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Prefer the page size requested by user<br>
+<br>
+ Without special scaling/cropping options (&quot;fit-to-page&quot;, &quot;fill&quot;,<br>
+ &quot;crop-to-fit΅, ...) PDF and PostScript files printed with CUPS will be<br>
+ printed with the page sizes of the document's pages and not the size<br>
+ requested by the user via the &quot;PageSize&quot; or &quot;media&quot; option. This<br>
+ allows correct printing of jobs with differently sized pages on<br>
+ printers which have the appropriate sizes loaded without need of<br>
+ manual intervention. Therefore the CUPS output device is matching each<br>
+ input page against the sizes listed in the PPD to generate a correct<br>
+ page geometry for the printer for each page.<br>
+<br>
+ Problem is if there are several equally-sized page size entries in the<br>
+ PPD. Without further guiding always the first match is used, making<br>
+ access to special functions provided by the others (like<br>
+ full-bleed/borderless printing) inaccessible.<br>
+<br>
+ This commit adds the functionality of the user-requested page size<br>
+ (via &quot;PageSize&quot; or &quot;media&quot; option) being preferred under the matching<br>
+ page sizes, so that if for example a user selects a full-bleed version<br>
+ of the desired page size and sends a photo, the photo gets rendered<br>
+ and printed with the page geometry which the PPD reports for the<br>
+ full-bleed version.<br>
+<br>
+ Nothing changes if the size of the user-requested page size does not<br>
+ match the size of the input page at all.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 12:45:27 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a5ccd009fd632e058b4f0bc2849cfc293b39d1f2">a5ccd009fd632e058b4f0bc2849cfc293b39d1f2</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Small fix on size matching improvements<br>
+<br>
+ This is a fix for one little oversight on the changes to support matching<br>
+ the input page size against the imageable areas of the PPD's page sizes.<br>
+<br>
+ This completes the fix of bug 701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-24 23:11:10 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a0284b5ac8c59014eab90c5a5ec388cd1676b79d">a0284b5ac8c59014eab90c5a5ec388cd1676b79d</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Improved page size matching with PPD<br>
+<br>
+ Applied the following improvements for finding the correct page size<br>
+ of the PPD file for the input page:<br>
+<br>
+ - Do not try to match by page size name, the input files do not<br>
+ contain page size names.<br>
+<br>
+ - Do not only match the input page size against the actual media sizes<br>
+ reported by the PPD but also to the imageable areas. Media size match<br>
+ is preferred but if there is no media size match, we accept also<br>
+ a match of the imageable area. In case of a match of the imageable<br>
+ area we position the input page in the imageable area of the output<br>
+ page.<br>
+<br>
+ - More debug output.<br>
+<br>
+ - In case of a custom page size (no match with PPD sizes) the page<br>
+ size name in the CUPS Raster output is a correct &quot;Custom.XXXxYYY&quot;<br>
+ and not the default page size name.<br>
+<br>
+ This should fix bug #701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 18:09:32 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ee43ff891b51f0ccec3ba38d538d3e23441ed439">ee43ff891b51f0ccec3ba38d538d3e23441ed439</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Reduced page size comparison tolerances<br>
+<br>
+ Before each page gets rendered its size is compared to the page sizes<br>
+ of the PPD file to select the actual page size for the output. Reduced<br>
+ the tolerances from 7% for the long edge and 5% for the short edge to<br>
+ 1%, as before easily wrong sizes got picked (See also bug 701438).<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 10:11:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0311b61d5df67cd98e2c2d23ef3cec1cc4faa800">0311b61d5df67cd98e2c2d23ef3cec1cc4faa800</a>
+<blockquote>
+<p>
+ Windows Installer: cope with COMPILE_INITS=0<br>
+<br>
+ We default to COMPILE_INITS=1, and that was the only case that the installer<br>
+ handled - i.e. building the installer with COMPILE_INITS=0 would install an<br>
+ executable that wouldn't work without extra action (-I.. or similar).<br>
+<br>
+ This changes the installer compiler invocation, and the installer creation<br>
+ so it behaves as it does now with COMPILE_INITS=1, but with COMPILE_INITS=0 the<br>
+ installer will write the path to Resource/Init into the GS_LIB registry<br>
+ key.<br>
+<br>
+psi/nsisinst.nsi<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 23:30:34 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=137a0bda39f861600488b5a11c63914854c454c8">137a0bda39f861600488b5a11c63914854c454c8</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Produce more debug output<br>
+<br>
+ When building with CUPS_DEBUG now debug output for the process of<br>
+ matching the page geometry with the PPD file's page sizes is<br>
+ produced.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 08:58:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09b53ebdc674f9f6e7a9c445e92617312dd93ab3">09b53ebdc674f9f6e7a9c445e92617312dd93ab3</a>
+<blockquote>
+<p>
+ Handle explicit '\' escaping in path matching<br>
+<br>
+ As well as having to cope with both '/' and '\' as directory separators on<br>
+ Windows, it turns out we also need to cope with the backslash separator being<br>
+ explicitly escaped (&quot;\\&quot;) - the explicit is added by the Postcript path<br>
+ templating code in gs_init.ps.<br>
+<br>
+ I don't want to change templating code because that would likely have<br>
+ implications in a lot of other places.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 10:51:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1692a288f1a17930f0b71e540908398a17d5366">f1692a288f1a17930f0b71e540908398a17d5366</a>
+<blockquote>
+<p>
+ Better CMYK conversion for bmpcmp<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmptab.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 17:49:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c8aaf3b7bc4232997d434170827fffd6887fc88f">c8aaf3b7bc4232997d434170827fffd6887fc88f</a>
+<blockquote>
+<p>
+ Update bmpcmp.c to read psdrgb rather than psdbgr.<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 15:33:27 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ba1827e220cd49a6732c04fcf3e55a268014377">9ba1827e220cd49a6732c04fcf3e55a268014377</a>
+<blockquote>
+<p>
+ Fix commit ec0b35fed3de: &quot;Handle directory separators...&quot;<br>
+<br>
+ The logic in the above fix was wrong.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 14:28:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7d0206d2b118b26f6d87ba8f09d077eba417e4c9">7d0206d2b118b26f6d87ba8f09d077eba417e4c9</a>
+<blockquote>
+<p>
+ Bug 701451: Fix clist color_usage calculations for shadings.<br>
+<br>
+ Or rather, don't attempt to calculate them badly, and just<br>
+ use the safe &quot;all colors&quot; value.<br>
+<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:10:51 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=320ec9672b987a765324f89450de08b70aafbcd3">320ec9672b987a765324f89450de08b70aafbcd3</a>
+<blockquote>
+<p>
+ PDF interpreter - review .forceput security<br>
+<br>
+ Bug #701450 &quot;Safer Mode Bypass by .forceput Exposure in .pdfexectoken&quot;<br>
+<br>
+ By abusing the error handler it was possible to get the PDFDEBUG portion<br>
+ of .pdfexectoken, which uses .forceput left readable.<br>
+<br>
+ Add an executeonly appropriately to make sure that clause isn't readable<br>
+ no mstter what.<br>
+<br>
+ Review all the uses of .forceput searching for similar cases, add<br>
+ executeonly as required to secure those. All cases in the PostScript<br>
+ support files seem to be covered already.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_font.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:56:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e5660f15f5fd4615254acec7ed403b4a7984cb09">e5660f15f5fd4615254acec7ed403b4a7984cb09</a>
+<blockquote>
+<p>
+ Handle directory separators in access control matching<br>
+<br>
+ On Windows, we end up dealing with a mishmash of &quot;/&quot; and &quot;\&quot; as directory<br>
+ separators, so a simple equality check isn't sufficient.<br>
+<br>
+ Since there is already (platform specific) function for checking whether a<br>
+ string (or part thereof) is a directory separation, use it.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 21:50:18 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=596e9baa1b24b0a9dac4d8bad1ea80cd23dcab79">596e9baa1b24b0a9dac4d8bad1ea80cd23dcab79</a>
+<blockquote>
+<p>
+ Disable use of alternate tint transform ICC profile<br>
+<br>
+ A prior commit introduced the use of color management<br>
+ if the DeviceN or Separation device had an ICC profile<br>
+ associated with the colorants. While there is an argument<br>
+ for doing this, it is not the standard behavior seen in<br>
+ AR. Disabling for now and will likely turn this into a<br>
+ command line option.<br>
+<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:48:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7547a2fc593e3a0bb8ea72f661389cd908c382f7">7547a2fc593e3a0bb8ea72f661389cd908c382f7</a>
+<blockquote>
+<p>
+ Fix crashes in RAW_DUMP debug code.<br>
+<br>
+ Dump the buffer before freeing the device, or the pointer will no<br>
+ longer be valid.<br>
+<br>
+ Also, don't access through ppatdev14 when we know it's NULL.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:47:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=421727ed068b3f41fdbd9657d759397610fe8821">421727ed068b3f41fdbd9657d759397610fe8821</a>
+<blockquote>
+<p>
+ Fix deep color transparency pattern copying problem.<br>
+<br>
+ The following test:<br>
+<br>
+ tests/pdf/pattrans_solid_nonrect.pdf.psdcmyk16.300.1..gs<br>
+<br>
+ among others, was showing problems, due to us treating the offset<br>
+ as bytes rather than shorts.<br>
+<br>
+base/gxp1fill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 14:29:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f9052f1debff2168d5a2606fa35bcaaf6f6f2ec7">f9052f1debff2168d5a2606fa35bcaaf6f6f2ec7</a>
+<blockquote>
+<p>
+ Avoid signed overflow in deep transparency calculations.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 12:24:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=898c9e5f06bb44ec3fd262b47eeaa5028e18773f">898c9e5f06bb44ec3fd262b47eeaa5028e18773f</a>
+<blockquote>
+<p>
+ Fix overflow in deep color blending.<br>
+<br>
+ Multiplying a 16bit unsigned value with a 16 bit signed value<br>
+ in a 32bit int means we lose the sign bit. Sacrifice a bit of<br>
+ accuracy to avoid that.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 10:10:28 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85c9d6de80ba57deeee289238aa1c0202f584c3c">85c9d6de80ba57deeee289238aa1c0202f584c3c</a>
+<blockquote>
+<p>
+ make .forceput inaccessible<br>
+<br>
+ Bug #701343, #701344, #701345<br>
+<br>
+ More defensive programming. We don't want people to access .forecput<br>
+ even though it is no longer sufficient to bypass SAFER. The exploit<br>
+ in #701343 didn't work anyway because of earlier work to stop the error<br>
+ handler being used, but nevertheless, prevent access to .forceput from<br>
+ .setuserparams2.<br>
+<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_pdfwr.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-19 10:03:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ba6d871c70398cfbd15b619127bf13ddea13282">3ba6d871c70398cfbd15b619127bf13ddea13282</a>
+<blockquote>
+<p>
+ Handle drag'n'drop file name/paths<br>
+<br>
+ Because we now run by default with the file access permission active,<br>
+ we need to do additional work for Windows drag and drop files, so they don't<br>
+ throw an invalidaccess error (since we implement drag and drop by sending<br>
+ characters to the gs console to do '(file) run').<br>
+<br>
+ The problem is, we cannot add the file to read list, send the characters to the<br>
+ console, and remove the file from the read list because, although SendMessage()<br>
+ blocks until the message is handles, WriteConsoleInput() does not block until<br>
+ the console buffers are consumed (i.e. it is asynchronous). So, there is no<br>
+ certainty when the final SendMessage() in WM_DROPFILES case is finished that<br>
+ Ghostcript will actually have run the file.<br>
+<br>
+ So, we create a list of dropped file names, add them to the permit read list,<br>
+ when the next WM_DROPFILES event happens, or a WM_DESTROY event, we drop<br>
+ file names from the permit read list before, if necessary, adding the current<br>
+ ones.<br>
+<br>
+psi/dwimg.c<br>
+psi/dwmain.c<br>
+psi/dwmainc.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:43:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d2e36e8ef01546aaee0cd0531fbc0fa932b23b99">d2e36e8ef01546aaee0cd0531fbc0fa932b23b99</a>
+<blockquote>
+<p>
+ Squash warnings in claptrap.<br>
+<br>
+ Thanks to William Bader for highlighting these.<br>
+<br>
+base/claptrap-planar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:28:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e34d5606835fc587e222b80bf9cac1bc40c4790b">e34d5606835fc587e222b80bf9cac1bc40c4790b</a>
+<blockquote>
+<p>
+ Squash warning in gdevpsd.c<br>
+<br>
+ Thanks to William Bader for spotting this.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 13:08:14 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f416b415e8e3a25446b66bf1a6253f86be0366de">f416b415e8e3a25446b66bf1a6253f86be0366de</a>
+<blockquote>
+<p>
+ Squash some compiler warnings.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+devices/gdevpdfimg.c<br>
+devices/vector/gdevpdfu.c<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:39:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ead927968ff8104e1a81df1590fced74927639d">9ead927968ff8104e1a81df1590fced74927639d</a>
+<blockquote>
+<p>
+ Dates and versions for 9.28 RC 1<br>
+<br>
+base/gscdefs.h<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:35:56 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae7dea2b9bd068f61b6aef312a7f4cbc9860cac3">ae7dea2b9bd068f61b6aef312a7f4cbc9860cac3</a>
+<blockquote>
+<p>
+ Revision date<br>
+<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 17:06:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2f8e2423c860e89b325675dc1311819179740c76">2f8e2423c860e89b325675dc1311819179740c76</a>
+<blockquote>
+<p>
+ Add -dNOSAFER for Windows installer cidfmap creation<br>
+<br>
+psi/nsisinst.nsi<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 14:36:55 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=226fb24dbe4f844b8c7531be3eccc2bfae1a103d">226fb24dbe4f844b8c7531be3eccc2bfae1a103d</a>
+<blockquote>
+<p>
+ ps2write - don't password encrypt PostScript output!<br>
+<br>
+ Noticed while testing the args commit; if we set -sOwnerPassword (to<br>
+ create a password-protected PDF file), but select (e)ps2write as the<br>
+ device, then the resulting PostScript file would have all the streams<br>
+ (in a PDF sense) encrypted with PDF password encryption.<br>
+<br>
+ Unsurprisingly, this result in a completely unusable PostScript file.<br>
+ Lets not permit that....<br>
+<br>
+devices/vector/gdevpdfp.c<br>
+<p>
+</blockquote>
+<hr>
+<hr size=20>
<h2><a name="Version9.50"></a>Version 9.50 (2019-10-15)</h2>
<p> Highlights in this release include:
<ul>
@@ -7606,6 +23492,64 @@ base/version.mak<br>
</blockquote>
<hr>
<hr size=20>
+<h2><a name="Version9.27"></a>Version 9.27 (2019-04-03)</h2>
+<p><strong>IMPORTANT:</strong> It is our intention, within the next 12 months (ideally sooner,
+in time for the next release) to make SAFER the default mode of operation. For many users
+this will have no effect, since they use SAFER explicitly, but some niche uses which rely
+on SAFER being disabled may need to start explicitly adding the &quot;-dNOSAFER&quot; option.
+<p> Highlights in this release include:
+<ul>
+<li>
+<p>We have extensively cleaned up the Postscript name space: removing access to internal
+and/or undocumented Postscript operators, procedures and data. This has benefits for security
+and maintainability.
+</li>
+<li>
+<p>We have added a new &quot;product&quot;: &quot;gpdl&quot;. This is a rethink/redesign of the old
+&quot;language_switch&quot; product (pspcl6), and includes all the interpreters we
+develop based on the Ghostscript graphics library: Postscript, PDF, PCL6, PXL and XPS.
+This is experimental, and should be considered of beta testing quality, and thus is not
+built by default: it can be built by using the &quot;experimental&quot; target.
+<p><code>gpdl</code> uses a heuristic to judge the file type being passed to it. In general,
+it supports most of the widely used command line options for each interpreter, but
+compatibility is not complete (the practicalities of swapping interpreters means it is
+unlikely that full parity of command line options will be possible).
+</li>
+<li>
+<p>Fontmap can now reference invidual fonts in a TrueType Collection for font subsitution.
+Previously, a Fontmap entry could only reference a TrueType collection and use the default
+(first) font. Now, the Fontmap syntax allows for specifying a specific index in a TTC.
+See the comments at the top of (the default) Fontmap.GS for details.
+</li>
+<li>
+<p>IMPORTANT: We are in the process of forking LittleCMS. LCMS2 is not thread safe, and
+cannot be made thread safe without breaking the ABI. Our fork will be thread safe, and include
+performance enhancements (these changes have all be been offered and rejected upstream). We
+will maintain compatibility between Ghostscript and LCMS2 for a time, but not in perpetuity.
+Our fork will be available as its own package separately from Ghostscript (and MuPDF).
+</li>
+<li>
+<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
+</li>
+</ul>
+<p>For a list of open issues, or to report problems,
+please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
+<h3><a name="9.27_Incompatible_changes"></a>Incompatible changes</h3>
+<ul>
+<li>
+<p>The process of &quot;tidying&quot; the Postscript name space should have removed
+only non-standard and undocumented operators. Nevertheless, it is possible that
+any integrations or utilities that rely on those non-standard and undocumented
+operators may stop working, or may change behaviour.
+<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
+or the gs-devel mailing list would be best), and we'll work with you to either find an
+alternative solution.
+<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for Postscript files. For PDF files, users are encouraged to look
+at <a href="https://www.mupdf.com">MuPDF</a>.
+</li>
+</ul>
<h3><a name="9.27_changelog"></a>Changelog</h3>
<p><strong>2019-04-03 09:27:46 +0100
</strong>
@@ -212444,12 +228388,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Install.htm b/doc/Install.htm
index 53017de7..759376d9 100644
--- a/doc/Install.htm
+++ b/doc/Install.htm
@@ -435,12 +435,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Internal.htm b/doc/Internal.htm
index 1b78ddc9..ac848116 100644
--- a/doc/Internal.htm
+++ b/doc/Internal.htm
@@ -113,12 +113,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Language.htm b/doc/Language.htm
index 0b35e236..15f39e37 100644
--- a/doc/Language.htm
+++ b/doc/Language.htm
@@ -438,8 +438,15 @@ The garbage collector doesn't reclaim portions of arrays obtained with
<h3><a name="Graphics_and_text"></a>Graphics and text operators</h3>
-<h4><a name="Transparency"></a>Transparency</h4>
-
+<h4><u><a name="Transparency"></a>Transparency</u></h4>
+<p><b><u>NOTE:</u></b> The following paragraphs describe non-standard operators
+for accessing the PDF 1.4 and later transparent imaging model through Postscript.
+If used incorrectly, they can have unexpected side effects and result in undefined
+behavior. As a result, these operators are disabled when <a href="Use.htm#Safer"><b>SAFER</b></a>
+is in force (as it is by default from version 9.50 onwards). To utilise these operators
+you will either have to disable <code>SAFER</code> (<code>-dNOSAFER</code>) or use
+the command line parameter <code>-dALLOWPSTRANSPARENCY</code>. The latter will make
+the custom operators available, but leave the file access controls active.
<p>
Ghostscript provides a set of operators for implementing the transparency
and compositing facilities of PDF 1.4. These are defined only if the
@@ -456,10 +463,34 @@ Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript
maintains separate alpha and mask values for opacity and shape, rather than
a single value with a Boolean that says whether it represents opacity or
shape.</p>
+<p>
+What follows is a subset of all the custom operators related to transparency, but
+covers the most useful, most common requirements.
+</p>
<h5><a name="Transparency_graphics_state_operators"></a>Graphics state
operators</h5>
+<p>Pushing the compositor device must be done before any other marking
+operations are made on the current page, and must be done per page.
+Popping the compositor should be done after the last marking operation
+of the page, and before the call to <code>showpage</code>. Any marking
+operations made after the compositor is popped will bypass the transparent
+imaging model, and may produce unexpected output.
+
+<dl>
+<dt><code>&lt;depth&gt; .pushpdf14devicefilter -</code></dt>
+<dd>Installs the transparency compositor device into the graphics state. At
+present the <code>depth</code> parameter should always be zero (<b>Subject
+To Change.</b>)
+</dl>
+<dl>
+<dt><code>- .popdf14devicefilter -</code></dt>
+<dd>Removes (or, more accuracately, disables) the transparency compositor in
+graphics state.
+</dl>
+
+
<dl>
<dt><code>&lt;modename&gt; .setblendmode -</code></dt>
<dd>Sets the blending mode in the graphics state. If the mode name is not
@@ -468,23 +499,43 @@ the blending mode is <code>/Compatible</code>.</dd>
</dl>
<dl>
+<dt><code>- .currentblendmode &lt;modename&gt;</code></dt>
+<dd>Returns the graphics state blend mode on the stack.
+</dl>
+
+<dl>
<dt><code>&lt;0..1&gt; .setopacityalpha -</code></dt>
<dd>Sets the opacity alpha value in the graphics state.
The initial opacity alpha value is 1.</dd>
</dl>
<dl>
+<dt><code>- .currentopacityalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state opacity alpha on the stack.</dd>
+</dl>
+
+<dl>
<dt><code>&lt;0..1&gt; .setshapealpha -</code></dt>
<dd>Sets the shape alpha value in the graphics state.
The initial shape alpha value is 1.</dd>
</dl>
<dl>
+<dt><code>- .currentshapealpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state shape alpha on the stack.</dd>
+</dl>
+
+<dl>
<dt><code>&lt;bool&gt; .settextknockout -</code></dt>
<dd>Sets the text knockout flag in the graphics state.
The initial value of the text knockout flag is <code>true</code>.</dd>
</dl>
+<dl>
+<dt><code>- .currenttextknockout &lt;bool&gt;</code></dt>
+<dd>Returns the graphics state text knockout on the stack..</dd>
+</dl>
+
<h5><a name="Transparency_rendering_stack_operators"></a>Rendering stack
operators</h5>
@@ -496,7 +547,7 @@ accumulate only a coverage value. Layers must be properly nested, i.e., the
'end' or 'discard' operator must match the corresponding 'begin' operator.</p>
<p>
-Beginning and ending layers must nest properly with respect to
+Beginning and ending groups must nest properly with respect to
<code>save</code> and <code>restore</code>: <code>save</code> and
<code>restore</code> do not save and restore the layer stack. Currently,
layers are not required to nest with respect to <code>gsave</code> and
@@ -1969,12 +2020,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Lib.htm b/doc/Lib.htm
index 3e2c1961..924a1e6e 100644
--- a/doc/Lib.htm
+++ b/doc/Lib.htm
@@ -1042,12 +1042,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Make.htm b/doc/Make.htm
index 0f69e0a5..e38e1438 100644
--- a/doc/Make.htm
+++ b/doc/Make.htm
@@ -922,7 +922,7 @@ to build the executable.</p>
<h3><a name="Microsoft_build"></a>Microsoft Visual Studio</h3>
-<h4><a name="Using_the_MS_Development_Environment"> </a>Using Microsoft Visual Studio</h4>
+<h4><a name="Using_the_MS_Development_Environment"> </a><u>Using Microsoft Visual Studio</u></h4>
<p>
The Ghostscript source distribution ships with <code>project</code> and <code>solution</code>
files for Visual Studio 2005 and later. These can be found in the <code>windows</code> directory.
@@ -937,6 +937,16 @@ configurations. In that case, you need to find the <code>Nmake</code> tab in the
<code>Property Pages</code> and modify the appropriate entry: <code>Build Command Line</code>,
<code>Rebuild All Command Line</code> and/or <code>Clean Command Line</code>.</p>
<p>
+As mentioned above, <code>nmake</code> does not support parallel builds. If you
+have downloaded and are building the <code>GhostPDL</code> source archive (which contains
+Ghostscript, GhostPCL, GhostXPS, and GhostPDL "products"), the <code>GhostPDL.sln</code>
+contains individual projects for each product but, as a result of the limitations of <code>nmake</code>
+the products cannot be built in parallel, because <code>nmake's</code> lack of parallel build
+awareness means it cannot manage the dependencies shared between the products, and may fail as multiple
+builds attempt to access the same dependencies.
+<p> To build all the products in one action, use the <code>All</code> &quot;pseudo-project&quot;. The
+<code>All</code> project uses a single <code>nmake</code> invocation to build all the supported products.
+<p>
NOTE: changing the <code>Output</code> property in the <code>Nmake</code> properties will not
change the name of the executable - to do that requires editing of the <code>psi/msvc.mak</code>
makefile, or you can add: <code>GS=myname.exe</code> to the <code>nmake</code> command line.</p>
@@ -1512,12 +1522,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/News.htm b/doc/News.htm
index c18ce550..ab0fe755 100644
--- a/doc/News.htm
+++ b/doc/News.htm
@@ -95,55 +95,70 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-
-<h2><a name="Version9.50"></a>Version 9.50 (2019-09-30)</h2>
+<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>The change to version 9.50 (rather than the intended 9.28) follows recognition
-of the extent and importance of the file access control redesign/reimplementation
-outlined below.
+<p>The 9.52 release replaces the 9.51 release after a problem was reported with 9.51
+which warranted the quick turnaround. Thus, like 9.51, 9.52 is primarily a maintenance
+release, consolidating the changes we introduced in 9.50.
</li>
<li>
-<p>The file access control capability (enable with <code>-dSAFER</code>) has been
-completely rewritten, with a ground-up rethink of the design. For more details,
-see: <a href="Use.htm#Safer">SAFER</a>.
-<p>It is important to note that <code>-dSAFER</code> now <strong>only</strong> enables
-the file access controls, and no longer applies restrictions to standard Postscript
-functionality (specifically, restrictions on <code>setpagedevice</code>. If your
-application relies on these Postscript restrictions, see <a href="Use.htm#OldSafer">OLDSAFER</a>,
-and please get in touch, as we do plan to remove those Postscript restrictions
-unless we have reason not to.
-<p><strong>IMPORTANT:</strong> File access controls are now enabled by default. In
-order to run Ghostscript without these controls, see <a href="Use.htm#NoSafer">NOSAFER</a>
-<p><strong>Important Note for Windows Users</strong>: See below under
-<a href="#28_Incompatible_changes">Incompatible Changes</a>
+<p>We have continued our work on code hygiene for this release, with a focus on the
+static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
+and we have now adopted a policy of maintaining zero Coverity issues in the
+Ghostscript/GhostPDL source base.
</li>
<li>
-<p>IMPORTANT: We are in the process of forking LittleCMS. LCMS2 is not thread safe, and
-cannot be made thread safe without breaking the ABI. Our fork will be thread safe, and include
-performance enhancements (these changes have all be been offered and rejected upstream). We
-will maintain compatibility between Ghostscript and LCMS2 for a time, but not in perpetuity.
-Our fork will be available as its own package separately from Ghostscript (and MuPDF).
+<p><b>IMPORTANT:</b> In consultation with a representative of
+(<a href="http://www.openprinting.org">OpenPrinting</a>) it is
+our intention to deprecate and, in the not distant future, remove the
+OpenPrinting Vector/Raster Printer Drivers (that is, the <code>opvp</code>
+and <code>oprp</code> devices).
+<p> If you rely on either of these devices, <b><i>please</i></b> get in touch with
+us, so we can discuss your use case, and revise our plans accordingly.
</li>
<li>
-<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
+LCMS2 is not thread-safe, and cannot be made thread-safe without breaking the ABI. Our fork
+will be thread-safe and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
</li>
<li>
-<p>Special thanks to Akira Kakuto, Paul Wessel, William Bader, Nelson H. F. Beebe and
-everyone else who put time and effort into testing this new release.
+<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
</li>
</ul>
<p>For a list of open issues, or to report problems,
please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
-<h3><a name="9.50_Incompatible_changes"></a>Incompatible changes</h3>
+<h3><a name="9.52_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
<ul>
<li>
-<p>There are a couple of subtle incompatibilities between the old and new SAFER
-implementations. Firstly, as mentioned above, SAFER now leaves standard Postcript
-functionality unchanged (except for the file access limitations). Secondly,
-the interaction with <code>save</code>&sol;<code>restore</code> operations, see
-<a href="Use.htm#Safer">SAFER</a>.
+<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
+team are built with Microsoft Visual Studio 2019. As a result Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are or will
+start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
+will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
+</li>
+<li>
+<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
+features), whilst we are improving it, remains sensitive to being driven correctly, and
+incorrect use can have unexpected/undefined results. Hence, as part of improving security,
+we limited access to these operators, originally using the <code>-dSAFER</code> feature.
+As we made "SAFER" the default mode, that became unacceptable, hence the new option
+<a href="Use.htm#ALLOWPSTRANSPARENCY">-dALLOWPSTRANSPARENCY</a> which enables
+access to the operators.
+</li>
+<li>
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
+implementations. Firstly, as mentioned in the 9.50 release notes, SAFER now leaves
+standard Postscript functionality unchanged (except for the file access limitations).
+Secondly, the interaction with <code>save</code>&sol;<code>restore</code> operations,
+see <a href="Use.htm#Safer">SAFER</a>.
<p><strong>Important Note for Windows Users</strong>:
<br>
The file/path pattern matching is case sensitive, even on Windows. This is a
@@ -152,23 +167,21 @@ change in behaviour compared to the old code which, on Windows, was case
in that it now supports (although does not enforce) case sensitivity.
</li>
<li>
-<p>The following is not strictly speaking new to 9.50, as not much has changed since
-9.27 in this area, but for those who don't upgrade with every release:
-<p>The process of &quot;tidying&quot; the Postscript name space should have removed
+<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
operators may stop working, or may change behaviour.
<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
or the gs-devel mailing list would be best), and we'll work with you to either find an
-alternative solution or return the previous functionality, if there is genuinely no other
+alternative solution or return the previous functionality if there is genuinely no other
option.
<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
-files relied upon internal use only features which are no longer available. GSView 5 will
+files relied upon internal use only features that are no longer available. GSView 5 will
still work as previously for Postscript files. For PDF files, users are encouraged to look
at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
-<h3><a name="9.50_changelog"></a>Changelog</h3>
+<h3><a name="9.52_changelog"></a>Changelog</h3>
<p>See the <a href="History9.htm">history file</a> for complete log
of changes.
@@ -179,7 +192,7 @@ of changes.
<hr>
<p>
-<small>Copyright &copy; 2005-2019 Artifex Software, Inc.
+<small>Copyright &copy; 2005-2020 Artifex Software, Inc.
All rights reserved.</small>
<p>
@@ -188,12 +201,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps-style.htm b/doc/Ps-style.htm
index c4e87855..29c268cc 100644
--- a/doc/Ps-style.htm
+++ b/doc/Ps-style.htm
@@ -544,12 +544,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps2epsi.htm b/doc/Ps2epsi.htm
index da592547..84db926c 100644
--- a/doc/Ps2epsi.htm
+++ b/doc/Ps2epsi.htm
@@ -224,12 +224,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Psfiles.htm b/doc/Psfiles.htm
index 0e1ffb09..bfea3bc5 100644
--- a/doc/Psfiles.htm
+++ b/doc/Psfiles.htm
@@ -889,12 +889,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Readme.htm b/doc/Readme.htm
index 713dc838..8e259902 100644
--- a/doc/Readme.htm
+++ b/doc/Readme.htm
@@ -304,7 +304,10 @@ and its interfaces</li>
<p>
If you are editing or adding to Ghostscript's existing documentation in
- HTML format, or writing a new document, you should read</p>
+ HTML format, or writing a new document, you should contact us on our
+ IRC channel or the <code>gs-devel</code> mailing list for guidance,
+ links to those are on: <a href="https://www.ghostscript.com">www.ghostscript.com</a>.
+</p>
<hr>
@@ -573,12 +576,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Release.htm b/doc/Release.htm
index 42304e5e..4c568b27 100644
--- a/doc/Release.htm
+++ b/doc/Release.htm
@@ -840,12 +840,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/SavedPages.htm b/doc/SavedPages.htm
index 517082d9..ddd80a9d 100644
--- a/doc/SavedPages.htm
+++ b/doc/SavedPages.htm
@@ -317,7 +317,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Source.htm b/doc/Source.htm
index 7deaa45f..1855f907 100644
--- a/doc/Source.htm
+++ b/doc/Source.htm
@@ -460,12 +460,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Unix-lpr.htm b/doc/Unix-lpr.htm
index 0330fc54..166eb6e3 100644
--- a/doc/Unix-lpr.htm
+++ b/doc/Unix-lpr.htm
@@ -299,12 +299,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Use.htm b/doc/Use.htm
index 6a81c1f5..0d82ec49 100644
--- a/doc/Use.htm
+++ b/doc/Use.htm
@@ -271,11 +271,18 @@ On other systems the executable may have a different name:</p>
<tr><td>VMS</td>
<td><code>gs</code></td></tr>
<tr><td>MS Windows 95 and later</td>
- <td><code>gswin32c</code></td></tr>
+ <td><code>gswin32.exe</code></td>
+ <td><code>gswin32c.exe</code></td>
+ <td><code>gswin64.exe</code></td>
+ <td><code>gswin64c.exe</code></td>
+</tr>
<tr><td>OS/2</td>
<td><code>gsos2</code></td></tr>
</table></blockquote>
-
+<p>On Windows, the two digit number indicates the word length of the system for which the binary was built (so
+<code>gswin32.exe</code> is for x86 Windows systems, whilst <code>gswin64.exe</code> is for x86_64 Windows
+systems). And the <code>&quot;c&quot;</code> suffix indicates a Windows console based binary (note that the
+<code>&quot;display device&quot;</code> window will still appear).
<hr>
<h2><a name="Output_device"></a>Selecting an output device</h2>
@@ -700,18 +707,18 @@ This option is also set by the <code>-dFitPage</code> option.</p>
<dl>
<dt><code>-dShowAnnots=false</code></dt>
<dd>
- Don't enumerate anntoations associated with the page objects through
- <code>Annots</code> attribute. Annotations are shown by default.</dd>
+ Don't enumerate annotations associated with the page
+ <code>Annots</code> key. Annotations are shown by default.</dd>
<p> In addition, finer control is available by defining an array
-<code>/ShowAnnotTypes</code>. Annoation types listed in this array will
+<code>/ShowAnnotTypes</code>. Annotation types listed in this array will
be drawn, whilst those not listed will not be drawn.</p>
<p> To use this feature:
-<code>-c "/ShowAnnotTypes [....]" -f &ltinput file&gt</code>
+<code>-c "/ShowAnnotTypes [....] def" -f &ltinput file&gt</code>
<br> Where the array can contain one or more of the following names:
<code>/Stamp</code>, <code>/Squiggly</code>, <code>/Underline</code>, <code>/Link</code>, <code>/Text</code>, <code>/Highlight</code>, <code>/Ink</code>, <code>/FreeText</code>, <code>/StrikeOut</code> and <code>/stamp_dict</code>.</p>
<p> For example, adding the follow to the command line:
-<code>-c "/ShowAnnotTypes [/Text /UnderLine]" -f &ltinput file&gt</code>
- <br> would draw only annoations with the subtypes &quotText&quot and &quotUnderLine&quot</p>
+<code>-c "/ShowAnnotTypes [/Text /UnderLine] def" -f &ltinput file&gt</code>
+ <br> would draw only annotations with the subtypes &quotText&quot and &quotUnderLine&quot</p>
</dl>
<dl>
@@ -1592,12 +1599,11 @@ possibly a specific one for each document.</p>
<h3><a name="UnicodeTT"></a>Using Unicode True Type fonts</h3>
-<p>Ghostscript can handle True Type fonts with the full Unicode character set.
-For doing that, a third-party software should generate a Postscript
-or PDF document with a text, which is encoded with the
-UTF-16 encoding. Ghostscript may be used for converting
-such Postscript documents to PDF and for
-re-distilling such PDF documents to PDF subsets.</p>
+<p>Ghostscript can make use of Truetype fonts with a Unicode character set.
+To do so, you should generate a (<b>NOTE:</b> non-standard!) Postscript or PDF
+job where the relevant text is encoded as UTF-16. Ghostscript may be used for
+converting such jobs to other formats (Postscript, PDF, PXL etc).
+The resulting output will be compliant with the spec (unlike the input).</p>
<p>
To render an UTF-16 encoded text, one must do the following :</p>
@@ -1611,12 +1617,12 @@ It must have a <code>cmap</code> table with
and <code>SpecificID</code> eqials to 1 (Unicode).</li>
<li>
-Describe the font in <code>lib/cidfmap</code>
+Describe the font in <code>Resource/Init/cidfmap</code>
with special values for the <code>CSI</code> key :
<code>[(Artifex) (Unicode) 0]</code>.</li>
<li>
-In the PS or PDF document combine the font
+In the PS or PDF job combine the font
with one of CMap <code>Identity-UTF16-H</code>
(for the horizontal writing mode)
or <code>Identity-UTF16-V</code>
@@ -1836,7 +1842,6 @@ RECORD
</pre></blockquote>
<li>If the FTP transfer was in binary mode:</li>
-<li>If the FTP transfer was in binary mode:</li>
<blockquote><code>
&#36; set file/attribute=(rfm:stmlf)
@@ -1861,8 +1866,8 @@ and then run Ghostscript by typing <code>gs</code> at the command line.</p>
<p>
The name of the Ghostscript command line executable on MS Windows is
-<code>gswin32c</code> so use this instead of the plain '<code>gs</code>' in
-the quickstart examples.</p>
+<code>gswin32c</code>/<code>gswin64c</code> so use this instead of the
+plain '<code>gs</code>' in the quickstart examples.</p>
<p>
To run the batch files in the ghostscript <code>lib</code> directory,
@@ -1884,8 +1889,8 @@ the command shell.</p>
<p>
There is also an older version for MS Windows called just <code>gswin32</code>
that provides its own window for the interactive postscript prompt.
-The executable <code>gswin32c</code> is usually the better option since
-it uses the native command prompt window.</p>
+The executable <code>gswin32c</code>/<code>gswin64c</code> is usually the better
+option since it uses the native command prompt window.</p>
<p>
For printer devices, the default output is the default printer.
@@ -2549,6 +2554,20 @@ incorrect) rendering of pages containing PDF 1.4 transparency and
blending.</dd>
</dl>
+<a name="ALLOWPSTRANSPARENCY"></a>
+<dl>
+ <dt><code>-dALLOWPSTRANSPARENCY</code></dt>
+<dd>
+Enables the use of the Ghostscript custom transparency operators
+(<a href="Language.htm#Transparency">Transparency</a>) from
+Postscript input. Normally, these operators are not accessible from Postscript
+jobs, being primarily intended to be called by the PDF interpreter. Using
+<code>-dALLOWPSTRANSPARENCY</code> leaves them available. It is important that
+these operators are used correctly, especially the order in which they are called,
+otherwise unintended, even undefined behavior may result.
+</dd>
+</dl>
+
<dl>
<dt><code>-dNO_TN5044</code></dt>
<dd>Turns off the TN 5044 psuedo operators. These psuedo operators are not a part
@@ -2561,8 +2580,10 @@ files from Corel 9 and Illustrator 88 do not operate properly if these operators
<dl>
<dt><code>-dDOPS</code></dt>
-<dd>Enables processing of DoPS directives in PDF files. DoPS has in
-fact been deprecated for some time. Use of this option is not
+<dd>Enables processing of Subtype /PS streams in PDF files and the DoPS operator.
+DoPS has in fact been deprecated for some time. Also the "PS" operator that was
+removed from the 1.3 2nd edition specification is also disabled by default, and
+enabled by <code>-dDOPS</code>. Use of this option is <b>NOT</b>
recommended in security-conscious applications, as it increases the
scope for malicious code. <code>-dDOPS</code> has no effect on
processing of PostScript source files. Note: in releases 7.30 and
@@ -2746,7 +2767,10 @@ names are separated by "<code>:</code>" on Unix systems, by
<dt><code>-sFONTPATH=</code><em>dir1</em><code>;</code><em>dir2</em><code>;</code><em>...</em></dt>
<dd>Specifies a list of directories that will be scanned when looking for
fonts not found on the search path, overriding the environment variable
- <code>GS_FONTPATH</code>.</dd>
+ <code>GS_FONTPATH</code>.
+<p>By implication, any paths specified by <code>FONTPATH</code> or <code>GS_FONTPATH</code> are automatically
+added to the <code>permit file read</code> list (see "<a href="#Safer">-dSAFER</a>").
+</dd>
</dl>
<dl>
@@ -3246,8 +3270,9 @@ to the output device profile. To achieve this, one should
<dl>
<dt><code>-dUseFastColor=</code><em>true/false</em></dt>
<dd>
-This is used to avoid the use of ICC profiles for source colors that
-are defined by DeviceGray, DeviceRGB and DeviceCMYK definitions. With
+This is used to avoid the use of ICC profiles for source colors. This
+includes those that are defined by DeviceGray, DeviceRGB and DeviceCMYK definitions
+as well as ICC-based color spaces in the source document. With
UseFastColor set to true, the traditional Postscript 255 minus operations
are used to convert between RGB and CMYK with black generation and undercolor
removal mappings.</dd>
@@ -3462,7 +3487,7 @@ Ghostscript development team) uses this interface, we have no control over third
code.
<p>
This is an entirely new implementation of <code>SAFER</code> for Ghostscript versions
-9.28 and later. Earlier versions (see "<a href="#OldSafer">-dOLDSAFER</a>") relied on
+9.50 and later. Earlier versions (see "<a href="#OldSafer">-dOLDSAFER</a>") relied on
storing the file permission lists in Postscript VM (Virtual Memory), and only applied
file access permissions to the Postscript file related operators. It relied on restricting
the function of <code>setpagedevice</code> to avoid the device code from being manipulated
@@ -3479,7 +3504,7 @@ access controls are enabled (see <a href="Language.htm#.activatepathcontrol">.ac
any call to <code>.addcontrolpath</code> after <code>.activatepathcontrol</code> will result in a
<code>Fatal</code> error causing the interpreter to immediately exit.
<p>
-An incompatibility exists between the pre-9.28 and 9.28 and later <code>SAFER</code>.
+An incompatibility exists between the pre-9.50 and 9.50 and later <code>SAFER</code>.
By removing storage and application entirely from the Postscript language
environment and internal context, SAFER is no longer affected by Postscript
<code>save</code>&sol;<code>restore</code> operations. Previously, it was possible
@@ -3494,7 +3519,7 @@ to do the equivalent of:
In that sequence, the <code>Postscript ops</code> would run with <code>SAFER</code> protection
but after the restore, <code>SAFER</code> would no longer be in force. This is no longer the case.
After the call to <code>.setsafe</code> the file controls are in force until the
-interpreter exits. As the 9.28 and later implementation no longer restricts the
+interpreter exits. As the 9.50 and later implementation no longer restricts the
operation of <code>setpagedevice</code>, and because this capability is <i>extremely</i>
rarely used, we feel the improvement in security warrants the small reduction in
flexibility.
@@ -3571,8 +3596,8 @@ are automatically added to the permit read lists.
<dd>
<strong>NOTE: This enables deprecated code which will shortly be removed</strong>
<p>Used in combination with <code>-dSAFER</code> (or <code>.setsafe</code>) enables
-the pre-9.28 SAFER implementation. It is included (for now) in case any users find
-a case where the 9.28 and later <code>SAFER</code> does not work for them. It means
+the pre-9.50 SAFER implementation. It is included (for now) in case any users find
+a case where the 9.50 and later <code>SAFER</code> does not work for them. It means
such users can keep working until we have assessed the issue, and distributed a solution.
<p>
Disables the <code>deletefile</code> and <code>renamefile</code>
@@ -5242,12 +5267,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/VectorDevices.htm b/doc/VectorDevices.htm
index 6bd61d34..1acc9ff1 100644
--- a/doc/VectorDevices.htm
+++ b/doc/VectorDevices.htm
@@ -771,6 +771,20 @@ to the old behaviour, or find that the new behaviour leads to problems, you can
inserted into the page content stream, instead of preserved as annotations.
</dd>
</dt>
+<d<p> In addition, finer control is available by defining an array
+<code>/PreserveAnnotTypes</code>. Annotation types listed in this array will
+be preserved, whilst those not listed will be drawn according to the setting os ShowAnnots and ShowAnnotTypes.
+By using the controls PreserveAnnots, PreserveAnnotTypes, ShowAnnots and ShowAnnotTypes it is possible to select
+by annotation type whether annotations are preserved as annotations, drawn into the page, or simply dropped.
+</p>
+<p> To use this feature:
+<code>-c "/PreserveAnnotTypes [....] def" -f &ltinput file&gt</code>
+<br> Where the array can contain one or more of the following names:
+<code>/Stamp</code>, <code>/Squiggly</code>, <code>/Underline</code>, <code>/Link</code>, <code>/Text</code>, <code>/Highlight</code>, <code>/Ink</code>, <code>/FreeText</code>, <code>/StrikeOut</code> and <code>/stamp_dict</code>.</p>
+<p> For example, adding the follow to the command line:
+<code>-c "/PreserveAnnotTypes [/Text /UnderLine] def" -f &ltinput file&gt</code>
+ <br> would preserve only annotations with the subtypes &quotText&quot and &quotUnderLine&quot</p>
+</d1>
<p>
The following options are useful for creating PDF 1.2 files:
@@ -1391,12 +1405,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/WhatIsGS.htm b/doc/WhatIsGS.htm
index d6739ab9..15835a50 100644
--- a/doc/WhatIsGS.htm
+++ b/doc/WhatIsGS.htm
@@ -184,12 +184,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/gs-vms.hlp b/doc/gs-vms.hlp
index f6264ad5..1fb39953 100644
--- a/doc/gs-vms.hlp
+++ b/doc/gs-vms.hlp
@@ -1,6 +1,6 @@
1 gs
gs - GPL Ghostscript interpreter/previewer
-! Ghostscript version 9.50, 15 October 2019
+! Ghostscript version 9.52, 19 March 2020
Usage:
$ gs [options] [file ...]
diff --git a/doc/sample_downscale_device.htm b/doc/sample_downscale_device.htm
index bb84b80f..8834c3d2 100644
--- a/doc/sample_downscale_device.htm
+++ b/doc/sample_downscale_device.htm
@@ -258,12 +258,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
<!--FINISH EDITING HERE-->
diff --git a/doc/subclass.htm b/doc/subclass.htm
index d6b41d5d..14b84309 100644
--- a/doc/subclass.htm
+++ b/doc/subclass.htm
@@ -812,7 +812,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/thirdparty.htm b/doc/thirdparty.htm
index bb87b340..bc2538e3 100644
--- a/doc/thirdparty.htm
+++ b/doc/thirdparty.htm
@@ -95,7 +95,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">eXpat</td>
-<td align="center">2.2.5</td>
+<td align="center">2.2.9</td>
<td align="center">XML parsing for XPS interpreter</td>
<td align="center">MIT/eXpat License</td>
<td align="center"><a href="http://expat.sourceforge.net/">http://expat.sourceforge.net/</a></td>
@@ -103,7 +103,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">FreeType</td>
-<td align="center">2.9.1</td>
+<td align="center">2.10.1</td>
<td align="center">Font scaling and rendering for Ghostscript</td>
<td align="center">FreeType License<br>
<font size="1">(BSD-style license with a credit clause)</font></td>
@@ -112,7 +112,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">jbig2dec</td>
-<td align="center">0.16</td>
+<td align="center">0.17</td>
<td align="center">JBIG2 decoding for the PDF interpreter</td>
<td align="center">Licensed with Ghostscript/GhostPDL<br>
<font size="1">(copyright owned by Artifex)</font></td>
@@ -140,7 +140,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">libpng</td>
-<td align="center">1.6.34</td>
+<td align="center">1.6.37</td>
<td align="center">PNG image encoding/decoding.</td>
<td align="center">libpng license<br>
<font size="1">classified as "a permissive free software license"</font></td>
@@ -149,7 +149,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">OpenJPEG</td>
-<td align="center">2.3.0</td>
+<td align="center">2.3.1</td>
<td align="center">JPEG2000 image decoding for the PDF interpreter</td>
<td align="center">BSD-style</td>
<td align="center"><a href="http://www.openjpeg.org/">http://www.openjpeg.org/</a></td>
@@ -157,7 +157,7 @@ the relevant license, and the "upstream" URL.
<tr height="60">
<td align="center">libtiff</td>
-<td align="center">4.0.9</td>
+<td align="center">4.1.0</td>
<td align="center">TIFF image encoding/decoding</td>
<td align="center">BSD-style</td>
<td align="center"><a href="http://www.remotesensing.org/libtiff/">http://www.remotesensing.org/libtiff/</a></td>
@@ -221,21 +221,6 @@ the relevant license, and the "upstream" URL.
<td align="center"><a href="http://www.luratech.com/">http://www.luratech.com/</a></td>
</tr>
-
-<tr>
-<td colspan="5" align="left"><hr>The following are deprecated but still available for use – support will be removed in a future release.<hr></td>
-</tr>
-
-<tr height="60">
-<td align="center">JasPer</td>
-<td align="center">1.701.0<br>
-<font size="1">(with patches, hence v1.701.0-gs5)</font></td>
-<td align="center">JPEG2000 image decoding for the PDF interpreter</td>
-<td align="center">JasPer License Version 2.0<br>
-<font size="1">based on MIT License</font></td>
-<td align="center"><a href="http://www.ece.uvic.ca/~frodo/jasper/">http://www.ece.uvic.ca/~frodo/jasper/</a></td>
-</tr>
-
<tr height="60">
<td align="center">LittleCMS<br>
<font size="1">(lcms2)</font></td>
@@ -254,7 +239,7 @@ the relevant license, and the "upstream" URL.
<hr>
<p>
-<small>Copyright &copy; 2005-2019 Artifex Software, Inc.
+<small>Copyright &copy; 2005-2020 Artifex Software, Inc.
All rights reserved.</small>
<p>
@@ -263,12 +248,12 @@ implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
-license. Refer to licensing information at http://www.artifex.com/
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.50, 15 October 2019
+<small>Ghostscript version 9.52, 19 March 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/examples/transparency_example.ps b/examples/transparency_example.ps
index 82ffadab..81200497 100644
--- a/examples/transparency_example.ps
+++ b/examples/transparency_example.ps
@@ -3,7 +3,7 @@
/PageUsesTransparency true def
-systemdict /.pushpdf14devicefilter known not
+systemdict /.setalphaisshape known not
{
(\n\n%%%% WARNING: Transparency operations ignored - probably due to using -dSAFER\n\n) print flush
/.pushpdf14devicefilter {pop} bind def
diff --git a/freetype/CMakeLists.txt b/freetype/CMakeLists.txt
index ad8ded0b..e3ffb83b 100644
--- a/freetype/CMakeLists.txt
+++ b/freetype/CMakeLists.txt
@@ -1,6 +1,6 @@
# CMakeLists.txt
#
-# Copyright 2013-2018 by
+# Copyright (C) 2013-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written originally by John Cary <cary@txcorp.com>
@@ -35,6 +35,10 @@
#
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR ..
#
+# or
+#
+# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR64 ..
+#
# Finally, build the project with:
#
# cmake --build build
@@ -96,9 +100,10 @@ include(CheckIncludeFile)
if (APPLE)
if (DEFINED IOS_PLATFORM)
if (NOT "${IOS_PLATFORM}" STREQUAL "OS"
- AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR")
+ AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR"
+ AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR64")
message(FATAL_ERROR
- "IOS_PLATFORM must be set to either OS or SIMULATOR")
+ "IOS_PLATFORM must be set to either OS, SIMULATOR, or SIMULATOR64")
endif ()
if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
message(AUTHOR_WARNING
@@ -129,7 +134,7 @@ endif ()
project(freetype C)
set(VERSION_MAJOR "2")
-set(VERSION_MINOR "9")
+set(VERSION_MINOR "10")
set(VERSION_PATCH "1")
# SOVERSION scheme: CURRENT.AGE.REVISION
@@ -153,7 +158,7 @@ option(FT_WITH_HARFBUZZ "Improve auto-hinting of OpenType fonts." OFF)
# Disallow in-source builds
-if ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
+if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
message(FATAL_ERROR
"In-source builds are not permitted! Make a separate folder for"
" building, e.g.,\n"
@@ -229,8 +234,19 @@ if (UNIX)
endif ()
string(REPLACE "/undef " "#undef "
FTCONFIG_H "${FTCONFIG_H}")
- file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h"
- "${FTCONFIG_H}")
+else ()
+ file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftconfig.h"
+ FTCONFIG_H)
+endif ()
+
+set(FTCONFIG_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h")
+if (EXISTS "${FTCONFIG_H_NAME}")
+ file(READ "${FTCONFIG_H_NAME}" ORIGINAL_FTCONFIG_H)
+else ()
+ set(ORIGINAL_FTCONFIG_H "")
+endif ()
+if (NOT (ORIGINAL_FTCONFIG_H STREQUAL FTCONFIG_H))
+ file(WRITE "${FTCONFIG_H_NAME}" "${FTCONFIG_H}")
endif ()
@@ -257,8 +273,16 @@ if (HARFBUZZ_FOUND)
"/\\* +(#define +FT_CONFIG_OPTION_USE_HARFBUZZ) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
-file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h"
- "${FTOPTION_H}")
+
+set(FTOPTION_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h")
+if (EXISTS "${FTOPTION_H_NAME}")
+ file(READ "${FTOPTION_H_NAME}" ORIGINAL_FTOPTION_H)
+else ()
+ set(ORIGINAL_FTOPTION_H "")
+endif ()
+if (NOT (ORIGINAL_FTOPTION_H STREQUAL FTOPTION_H))
+ file(WRITE "${FTOPTION_H_NAME}" "${FTOPTION_H}")
+endif ()
file(GLOB PUBLIC_HEADERS "include/ft2build.h" "include/freetype/*.h")
@@ -325,7 +349,7 @@ endif ()
if (NOT DISABLE_FORCE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX d)
-endif()
+endif ()
add_library(freetype
@@ -345,6 +369,10 @@ target_compile_definitions(
if (WIN32)
target_compile_definitions(
freetype PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS)
+ if (BUILD_SHARED_LIBS)
+ target_compile_definitions(
+ freetype PRIVATE DLL_EXPORT)
+ endif ()
endif ()
if (BUILD_SHARED_LIBS)
@@ -353,17 +381,17 @@ if (BUILD_SHARED_LIBS)
SOVERSION ${LIBRARY_SOVERSION})
endif ()
-target_include_directories(
- freetype BEFORE # Pick up ftconfig.h and ftoption.h generated above.
- PRIVATE "${PROJECT_BINARY_DIR}/include")
-
+# Pick up ftconfig.h and ftoption.h generated above, first.
target_include_directories(
freetype
- PRIVATE "${PROJECT_SOURCE_DIR}/include")
+ PUBLIC
+ $<INSTALL_INTERFACE:include/freetype2>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/include)
-target_include_directories(
- freetype
- PUBLIC $<INSTALL_INTERFACE:include/freetype2>)
if (BUILD_FRAMEWORK)
set_property(SOURCE ${PUBLIC_CONFIG_HEADERS}
@@ -444,7 +472,15 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
string(REPLACE "%LIBS_PRIVATE%" "" # All libs support pkg-config
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
- file(WRITE ${PROJECT_BINARY_DIR}/freetype2.pc ${FREETYPE2_PC_IN})
+ set(FREETYPE2_PC_IN_NAME "${PROJECT_BINARY_DIR}/freetype2.pc")
+ if (EXISTS "${FREETYPE2_PC_IN_NAME}")
+ file(READ "${FREETYPE2_PC_IN_NAME}" ORIGINAL_FREETYPE2_PC_IN)
+ else ()
+ set(ORIGINAL_FREETYPE2_PC_IN "")
+ endif ()
+ if (NOT (ORIGINAL_FREETYPE2_PC_IN STREQUAL FREETYPE2_PC_IN))
+ file(WRITE "${FREETYPE2_PC_IN_NAME}" ${FREETYPE2_PC_IN})
+ endif ()
install(
FILES ${PROJECT_BINARY_DIR}/freetype2.pc
@@ -457,6 +493,7 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
EXPORT freetype-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
FRAMEWORK DESTINATION Library/Frameworks
COMPONENT libraries)
install(
@@ -480,9 +517,9 @@ set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSIO
if (WIN32)
set(CPACK_GENERATOR ZIP)
-else()
+else ()
set(CPACK_GENERATOR TGZ)
-endif()
+endif ()
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers")
diff --git a/freetype/ChangeLog b/freetype/ChangeLog
index 806b8354..6450a60b 100644
--- a/freetype/ChangeLog
+++ b/freetype/ChangeLog
@@ -1,18 +1,14 @@
-2018-05-01 Werner Lemberg <wl@gnu.org>
+2019-07-01 Werner Lemberg <wl@gnu.org>
- * Version 2.9.1 released.
- =========================
+ * Version 2.10.1 released.
+ ==========================
- Tag sources with `VER-2-9-1'.
+ Tag sources with `VER-2-10-1'.
- * docs/VERSION.TXT: Add entry for version 2.9.1.
- * docs/CHANGES: Updated.
+ * docs/VERSION.TXT: Add entry for version 2.10.1.
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- src/base/ftver.rc, builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
+ * README, Jamfile (RefDoc), src/base/ftver.rc,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
@@ -24,521 +20,572 @@
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.9/2.9.1/, s/29/291/.
+ builds/wince/vc2008-ce/index.html: s/2.10.0/2.10.1/, s/2100/2101/.
* include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
- * builds/unix/configure.raw (version_info): Set to 22:1:16.
+ * builds/unix/configure.raw (version_info): Set to 23:1:17.
* CMakeLists.txt (VERSION_PATCH): Set to 1.
- * include/freetype/ftgasp.h: Use FT_BEGIN_HEADER and FT_END_HEADER.
+ * include/freetype/fterrors.h (FT_Error_String): Fix C++ compilation.
-2018-04-26 Werner Lemberg <wl@gnu.org>
+2019-06-26 Alexei Podtelezhnikov <apodtele@gmail.com>
- Another fix for handling invalid format 2 cmaps.
+ * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Fix inequality.
- Sigh.
+ Reported by Armin Hasitzka.
- Reported as
+2019-06-16 Werner Lemberg <wl@gnu.org>
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8003
+ * src/tools/apinames.c: Formatting, minor edits.
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
- an endless loop.
+2019-06-16 Werner Lemberg <wl@gnu.org>
-2018-04-24 Ben Wagner <bungeman@google.com>
+ [autofit] Disable hinting if no blue zones are available (#56450).
- [base] Avoid undefined behaviour in lcd filtering code (#53727).
+ * src/autofit/afglobal.c (af_face_global_get_metrics): Start again
+ (with dummy hinter module) if no blue zones are present.
- * src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
- Ensure `height > 0'.
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Change
+ signature to return error code.
+ If no blue zones are found, update `glyph_styles' array to hold
+ AF_STYLE_NONE_DFLT instead of the current style.
+ (af_latin_metrics_init): Return internal error code if no blue zones
+ are found.
-2018-04-22 Werner Lemberg <wl@gnu.org>
+2019-06-16 Werner Lemberg <wl@gnu.org>
- * src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing.
+ Towards better VMS support.
-2018-04-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+ More to come.
- [base] Fix bitmap emboldening.
+ * builds/vms/LIBS.OPT_IA64, builds/vms/_LINK.OPT_IA64,
+ builds/vms/vmslib.dat: New files provided by Jouk Jansen
+ <joukj@hrem.nano.tudelft.nl>.
- Bug introduced after release 2.8.
+ * builds/vms/ftconfig.h: Update, also from Jouk.
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): We use
- `FT_QALLOC_MULT', which doesn't zero out the buffer. Adjust the
- bitmap copying code to take care of this fact.
+2019-06-13 Werner Lemberg <wl@gnu.org>
-2018-04-22 Werner Lemberg <wl@gnu.org>
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Minor.
- Another fix for handling invalid format 2 cmaps.
+2019-06-13 Alexei Podtelezhnikov <apodtele@gmail.com>
- The previous commit was incomplete.
+ [smooth] Restore the span buffering for direct mode only.
- Reported as
+ The buffer size FT_MAX_GRAY_SPANS is set to 10 spans, which should be
+ enough to cover the entire scanline for simple glyphs in most cases:
+ each slightly slanted edge needs up to two spans, plus a filling span
+ in-between. This is not new, we used to do it before cb4388783cecc.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7928
+ * src/smooth/ftgrays.c (gray_TWorker): Add `spans' and `num_spans'.
+ (gray_hline, gray_sweep): Implement the span buffering.
+ (gray_raster_render): Use negative `num_spans' to avoid the direct
+ mode.
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
- an endless loop.
+2019-06-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-2018-04-19 Werner Lemberg <wl@gnu.org
+ * include/freetype/ftmodapi.h (FT_DebugHook_Func): Return error.
- [autofit] Add support for Georgian Mtavruli characters.
+ Fix a warning by adding a return value as in `TT_RunIns',
+ which should not be a compatibility issue.
- This will be part of the forthcoming Unicode 11.0.
+2019-06-11 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/autofit/afblue.dat: Add blue zone data for Mtavruli.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+ * src/truetype/ttobjs.c (tt_check_trickyness_family): Add `const'.
- * src/autofit/afscript.h: Add Mtavruli standard character.
+2019-06-11 Moazin Khatti <moazinkhatri@gmail.com>
-2018-04-18 Werner Lemberg <wl@gnu.org>
+ [gzip] Add support for `gzip' encoded header.
- Fix handling of invalid format 2 cmaps.
+ * src/gzip/ftgzip.c (FT_Gzip_Uncompress): Modify the the call to
+ `inflateInit2' to enable support for `gzip' encoded headers.
- The problem was introduced after the last release.
+2019-06-10 Alexei Podtelezhnikov <apodtele@gmail.com>
- Reported as
+ [type1,type42] Use `const' for string literals.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7828
+ * include/freetype/internal/psaux.h (PS_Table_FuncsRec): Updated.
+ * include/freetype/internal/t1types.h (T1_EncodingRec): Updated.
+ * src/psaux/psobjs.[ch] (ps_table_add): Updated.
+ * src/type1/t1load.c (T1_Open_Face, parse_encoding): Updated.
+ * src/type42/t42objs.c (T42_Open_Face): Updated.
+ * src/type42/t42parse.c (t42_parse_encoding): Updated.
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Avoid endless loop.
+ * src/cff/cffobjs.c (cff_face_init): Minor.
-2018-04-17 Werner Lemberg <wl@gnu.org>
+2019-06-10 Alexei Podtelezhnikov <apodtele@gmail.com>
- [truetype] Integer overflow issues.
+ [bdf,pcf] Use `const' for string literals.
- Reported as
+ * src/bdf/bdf.h (bdf_property_t): Updated `name'.
+ * src/bdf/bdflib.c (_bdf_list_split,bdf_create_property,
+ _bdf_add_property,_bdf_ato*): Updated.
+ * src/bdf/bdfdrivr.c (bdf_interpret_style): Updated.
+ * src/pcf/pcfread.c (pcf_intrpret_style): Ditto.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7739
+2019-06-07 Philip Race <philip.race@oracle.com>
- * src/truetype/ttinterp.c (Ins_CEILING): Use FT_PIX_CEIL_LONG.
+ * src/base/ftinit.c (FT_Set_Default_Properties): Fix crash.
-2018-04-16 Werner Lemberg <wl@gnu.org>
+ Terminate loop at end of environment.
- [truetype] Integer overflow issues.
+2019-05-31 Alexei Podtelezhnikov <apodtele@gmail.com>
- Reported as
+ Solidify VC2005 builds.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7718
+ * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Explicitly
+ declare `_BitScanReverse' intrinsic.
+ * builds/windows/visualc/freetype.vcproj [Debug]: Disable intrinsics.
- * src/truetype/ttinterp.c (Ins_MIRP): Use ADD_LONG.
+2019-05-30 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
-2018-04-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+ [sfnt] Separate WOFF sources and headers.
- [build] Use `info' function of make 3.81.
+ Move WOFF sources and headers to separate files.
- * configure, docs/INSTALL, docs/INSTALL.CROSS, docs/INSTALL.GNU,
- docs/INSTALL.UNIX, docs/MAKEPP: Bump make version requirements.
+ * include/freetype/internal/wofftypes.h, src/sfnt/sfwoff.c,
+ src/sfnt/sfwoff.h: New files.
- * builds/detect.mk (std_setup): Replace `echo' with `info'.
- (dos_setup): Removed.
- * builds/unix/install.mk, builds/modules.mk, builds/dos/detect.mk,
- builds/windows/detect.mk, builds/os2/detect.mk: Updated.
- * builds/newline: No longer needed.
+ * include/freetype/internal/fttrace.h: Register `sfwoff.c'.
-2018-04-15 Werner Lemberg <wl@gnu.org>
+ * include/freetype/internal/internal.h: Define
+ FT_INTERNAL_WOFF_TYPES_H.
- [truetype]: Limit `SLOOP' bytecode argument to 16 bits.
+ * include/freetype/internal/sfnt.h: Include FT_INTERNAL_WOFF_TYPES_H.
- This fixes
+ * include/freetype/internal/tttypes.h: Move out WOFF structures.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7707
+ * src/sfnt/rules.mk: Add `sfwoff.c'.
- * src/truetype/ttinterp.c (Ins_SLOOP): Do it.
+ * src/sfnt/sfnt.c: Include `sfwoff.c'.
-2018-04-14 Werner Lemberg <wl@gnu.org>
+ * src/sfnt/sfobjs.c: Include `sfwoff.h', move out WOFF sources.
- [truetype] Integer overflow issues.
+2019-05-30 Werner Lemberg <wl@gnu.org>
- Reported as
+ [base] Fix `make multi'.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7652
+ Reported by Nikhil.
- * src/truetype/ttinterp.c (Ins_MDAP): Use SUB_LONG.
+ * src/base/fterrors.c: Include FT_INTERNAL_DEBUG_H.
-2018-04-14 Werner Lemberg <wl@gnu.org>
+2019-05-29 Ben Wagner <bungeman@google.com>
- [autofit] Update to Unicode 11.0.0.
+ [truetype] Fix copy-and-paste error (#56409).
- But no support new scripts (volunteers welcomed).
+ * src/truetype/ttgload.c (load_truetype_glyph): Use correct indices
+ into `unrounded' array for phantom points.
- * src/autofit/afranges.c (af_arab_nonbase_uniranges,
- af_beng_nonbase_uniranges, af_cakm_nonbase_uniranges,
- af_deva_nonbase_uniranges, af_geor_uniranges,
- af_gujr_nonbase_uniranges, af_mlym_nonbase_uniranges,
- af_nkoo_nonbase_uniranges, af_telu_nonbase_uniranges,
- af_hani_uniranges): Add new data.
+2019-05-29 Werner Lemberg <wl@gnu.org>
-2018-04-10 Nikolaus Waxweiler <madigens@gmail.com>
+ [truetype] Fix 32bit builds (#56404).
- * CMakeLists.txt, builds/cmake/FindHarfBuzz.cmake: Extensive
- modernization measures.
+ Patch suggested by Ben Wagner <bungeman@google.com>.
- This brings up the minimum required CMake version to 2.8.12.
+ * src/truetype/ttgxvar.c (FT_fixedToInt, FT_fixedToFdot6): Remove
+ harmful cast to unsigned type.
- The installation paths follow the GNU defaults now, e.g. installing on a
- 64 bit host will place binaries into the lib64/ folder on e.g. Fedora.
+2019-05-26 Ben Wagner <bungeman@google.com>
- Symbols are hidden by default (e.g. `-fvisibility=hidden' on GCC).
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Improve accuracy.
- CMake will no longer look for a C++ compiler.
+2019-05-23 Werner Lemberg <wl@gnu.org>
- Library and .so version now match the Autotools build.
+ [truetype] Draw glyphs without deltas in variation font (#56374).
- Comments in the build file and informational messages now use platform
- agnostic example commands.
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Always fill
+ `unrounded' array.
- ftoption.h and ftconfig.h are written directly without a redundant `-new'
- copy.
+2019-05-21 Werner Lemberg <wl@gnu.org>
- External dependencies are expressed as option()s and will turn up as such
- in cmake-gui.
+ * src/truetype/ttinterp.c (opcode_name): Improve mnemonics.
- Internal: Properties such as dependencies and include directories are now
- privately set on the freetype library instead of globally.
+2019-05-16 Werner Lemberg <wl@gnu.org>
- The CPack definitions have been cleaned up, the `make dist' has been
- removed. Source packages generated with CPack don't contain Autotools
- files and aren't used by the maintainters anyway.
+ [truetype] Actually scale varied CVT values.
- On Windows, src/base/ftver.rc is compiled to decorate the library with
- version and copyright information.
+ Up to now, only the unscaled CVT values were varied; in other words,
+ the `CVAR' data was never used for bytecode hinting.
- A pkg-config file is now generated and installed.
+ * src/truetype/ttgxvar.c (tt_cvt_ready_iterator): New auxiliary
+ function.
+ (tt_face_vary_cvt): Use it to trigger rescaling of CVT values.
-2018-04-09 Werner Lemberg <wl@gnu.org>
+2019-05-16 Werner Lemberg <wl@gnu.org>
- [truetype] Integer overflow issues.
+ [truetype] Use 26.6 format for storing unscaled CVT values.
- Reported as
+ If `CVAR' data is applied to variation fonts, fractional values are
+ possible.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7453
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Change type of
+ `cvt' from `FT_Short' to `FT_Int32'.
- * src/truetype/ttinterp.c (Round_Super, Round_Super_45): Use
- ADD_LONG and SUB_LONG.
+ * src/truetype/ttgxvar.c (FT_fdot6ToFixed): New macro.
+ (tt_face_vary_cvt): Use it to update code to 26.6 format.
-2018-04-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/truetype/ttobjs.c (tt_size_run_prep): Update code to 26.6
+ format.
- [windows, wince] Clean up legacy project files.
+ * src/truetype/ttpload.c (tt_face_load_cvt): Stora data in 26.6
+ format.
- * builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/freetype.dsp: Remove per-file compile flags.
+2019-05-16 Werner Lemberg <wl@gnu.org>
-2018-04-04 Werner Lemberg <wl@gnu.org>
+ * src/truetype/ttgload.c (load_truetype_glyph): Init `unrounded'.
- [cff, type1] Sanitize `BlueFuzz' and `BlueShift'.
+ This fixes linear advance width values for spacing glyphs. Bug
+ introduced 2019-05-09.
- Reported as
+2019-05-16 Werner Lemberg <wl@gnu.org>
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7371
+ [truetype] Avoid code duplication.
- * src/cff/cffload.c (cff_load_private_dict): Sanitize
- `priv->blue_shift' and `priv->blue_fuzz' to avoid overflows later
- on.
+ * src/truetype/ttobjs.c (tt_size_run_prep): Scale CVT values in this
+ function.
+ (tt_size_ready_bytecode): Updated.
+ * src/truetype/ttgload.c (tt_loader_init): Updated.
- * src/type1/t1load.c (T1_Open_Face): Ditto.
+2019-05-13 Jouk Jansen <joukj@hrem.nano.tudelft.nl>
-2018-04-04 Ben Wagner <bungeman@google.com>
+ * vms_make.com: Updated. Handle `bzip2' directory, too.
- * src/truetype/ttobjs.c (trick_names): Add 3 tricky fonts (#53554),
- `DFHei-Md-HK-BF', `DFKaiShu-Md-HK-BF' and `DFMing-Bd-HK-BF'.
- (tt_check_trickyness_sfnt_ids): Add checksums for 3 tricky fonts
- in above.
+2019-05-13 Werner Lemberg <wl@gnu.org>
-2018-04-01 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psfont.c (cf2_font_setup): Fix compiler warning.
- * builds/toplevel.mk (work): Use $(SEP).
+2019-05-12 Werner Lemberg <wl@gnu.org>
- This fixes the `make refdoc' using Cygwin: $(CAT) is `type' on this
- platform, and this program only understands backslashes in paths.
+ [truetype] Doh. Fix last commit to make it work.
- Reported by Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>.
+ Very embarassing :-)
-2018-03-30 Werner Lemberg <wl@gnu.org>
+ Reported as
- [truetype] Fix memory leak (only if tracing is on).
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14701
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14705
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14710
- * src/truetype/ttgxvar.c (TT_Get_MM_Var) [FT_DEBUG_LEVEL_TRACE}: Fix
- it.
+ * src/truetype/ttgload.c (IS_DEFAULT_INSTANCE): Move up and add
+ argument; update all callers.
+ (TT_Process_Simple_Glyph): Use it. The `unrounded' array is active
+ for variation fonts only, thus also enclose related code with
+ `#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT ... #endif' where
+ necessary.
+ Revert commit a113e5d from 2019-05-09, and don't use `extra_points2'
+ but allocate a temporary array.
+ Speed up the scaling of the `unrounded' array.
-2018-03-23 Ben Wagner <bungeman@google.com>
+ * src/truetype/ttgxvar.c (FT_fixedToInt, FT_FixedToFdot6): Fix type
+ conversions and rounding. The unsigned type must have more or equal
+ bits to the signed type.
- [sfnt] Correctly handle missing bitmaps in sbix format (#53404).
+2019-05-09 Werner Lemberg <wl@gnu.org>
- * src/sfnt/ttfsbit.c (tt_face_load_sbix_image): Fix return value.
+ [truetype] Increase precision of font variation (#54371).
-2018-03-23 Ben Wagner <bungeman@google.com>
+ This patch makes FreeType use font units in 26.6 format internally
+ instead of integers.
- [truetype] Fix advance of empty glyphs in bitmap fonts (#53393).
+ * src/truetype/ttgxvar.c (FT_fixedToFdot6): New macro.
+ (TT_Vary_Apply_Glyph_Deltas): Add argument to output unrounded font
+ coordinates.
+ * src/truetype/ttgxvar.h: Updated.
- * src/truetype/ttgload.c (TT_Load_Glyph): Apply scaling to metrics
- for empty bitmaps.
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Use
+ `extra_points2' array to temporarily hold unrounded point
+ coordinates; use them to compute scaled coordinates and linear
+ advance width and height.
+ (load_truetype_code): Adjust similarly.
-2018-03-22 Werner Lemberg <wl@gnu.org>
+2019-05-09 Werner Lemberg <wl@gnu.org>
- Remove `ftlcdfil.c' and `ftfntfmt.c' from build files (#53415).
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Minor.
- builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt,
- builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/freetype.vcxproj.filters,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj, vms_make.com: Do it.
+2019-05-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-2018-03-13 Werner Lemberg <wl@gnu.org>
+ [smooth] Faster fractions.
- * src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric
- overflow.
+ * src/smooth/ftgrays.c (SUBPIXELS): Replace with...
+ (FRACT): A fractional coordinate macro to use in...
+ (gray_render_line, gray_render_scanline): ... here.
-2018-03-13 Werner Lemberg <wl@gnu.org>
+2019-05-07 Alexei Podtelezhnikov <apodtele@gmail.com>
- Fix cmap format 2 handling (#53320).
+ * src/raster/ftraster.c (Draw_Sweep): Unbreak.
- The patch introduced for #52646 was not correct.
+2019-05-05 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition.
+ * src/raster/ftraster.c: Clean-ups.
-2018-03-10 Nikolaus Waxweiler <madigens@gmail.com>
+2019-05-05 Werner Lemberg <wl@gnu.org>
- * CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05.
+ * src/truetype/ttgxvar.c: More use of `FT_fdot14ToFixed'.
-2018-03-09 Chun-wei Fan <fanc999@yahoo.com.tw>
+2019-05-04 Alexei Podtelezhnikov <apodtele@gmail.com>
- * CMakeLists.txt [win32]: Allow MSVC DLL builds (#53287).
+ * src/smooth/ftgrays.c (gray_render_line): Small shortcut.
- Do not limit DLL builds to MinGW, since we already have
- `__declspec(dllexport)' directives in `ftconfig.h'.
- Also suppress more warnings for POSIX functions.
+2019-05-04 Werner Lemberg <wl@gnu.org>
-2018-03-08 Hugh McMaster <hugh.mcmaster@outlook.com>
+ Various clang 8.0 static analyzer fixes.
- Make installation of `freetype-config' optional (#53093).
+ Reported by Sender Ghost <lightside@gmx.com>.
- * builds/unix/configure.raw: Add option `--enable-freetype-config'
- and set `INSTALL_FT2_CONFIG'.
- * builds/unix/unix-def.in (INSTALL_FT2_CONFIG): Define.
- * builds/unix/install.mk (install): Handle it.
+ * src/autofit/afcjk.c (af_cjk_hints_compute_edges): Catch a corner
+ case where `edge->first' could be NULL.
-2018-03-05 Werner Lemberg <wl@gnu.org>
+ * src/pfr/pfrobjs.c (pfr_slot_load): Remove unnecessary test of
+ `size'.
- Make `ftlcdfil.c' part of the `base' module.
+ * src/raster/ftraster.c (Draw_Sweep): Catch a corner case where
+ `draw_right' might be NULL.
- `ftobjs.c' needs `ft_lcd_padding'.
+ * src/sfnt/ttmtx.c (tt_face_get_metrics): Fix limit test for
+ `aadvance'.
+ Ensure `abearing' always hold a meaningful result.
- Problem reported by duhuanpeng <548708880@qq.com>.
+ * src/truetype/ttgload.c (load_truetype_glyph): Ensure `subglyph' is
+ not NULL before accessing it.
+ * src/truetype/ttgxvar.c (TT_Set_Named_Instance): Remove unnecessary
+ test of `namedstyle'.
- * modules.cfg (BASE_EXTENSIONS): Don't include `ftlcdfil.c'.
+ * src/type42/t42parse.c (t42_parser_done): Ensure
+ `parser->root.funcs.done' is not NULL before accessing it.
- * src/base/ftbase.c: Include `ftlcdfil.c'.
- * src/base/rules.mk (BASE_SRC): Add `ftlcdfil.c'.
- * src/base/Jamfile (_sources): Adjusted.
+2019-05-03 Alexei Podtelezhnikov <apodtele@gmail.com>
- * docs/INSTALL.ANY: Updated.
+ Miscellaneous macro updates.
-2018-03-05 Werner Lemberg <wl@gnu.org>
+ * src/base/ftoutln.c (SCALED): Updated.
+ * src/smooth/ftgrays.c (SCALED): Ditto.
+ (FLOOR, ROUND, CEILING): Removed.
+ * src/psaux/psfixed.h (cf2_fracToFixed): Updated.
- Make `ftfntfmt.c' part of the `base' module.
+2019-05-02 Alexei Podtelezhnikov <apodtele@gmail.com>
- `ftobjs.c' needs `FT_Get_Font_Format'.
+ Tweak LCD filtering.
- Problem reported by duhuanpeng <548708880@qq.com>.
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+ Choose direction from bitmap's pixel_mode.
+ * include/freetype/internal/ftobjs.c (FT_Bitmap_LcdFilterFunc):
+ Updated.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
- * modules.cfg (BASE_EXTENSIONS): Don't include `ftfntfmt.c'.
+2019-05-02 Werner Lemberg <wl@gnu.org>
- * src/base/ftbase.c: Include `ftfntfmt.c'.
- * src/base/rules.mk (BASE_SRC): Add `ftfntfmt.c'.
- * src/base/Jamfile (_sources): Adjusted.
+ * vms_make.com: Updated (#56253).
- * docs/INSTALL.ANY: Updated.
+ Remove no longer existing directories (`autohint', `otlayout').
+ Update used base extensions.
+ Activate `autofit' module.
+ Add `gxvalid' module.
+ Update copyright notices.
-2018-03-01 Werner Lemberg <wl@gnu.org>
+2019-04-29 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments.
+ [smooth] Simplify cubic Bézier flattening.
-2018-02-23 Werner Lemberg <wl@gnu.org>
+ The previous implementation is correct but it is too complex.
+ The revised algorithm is based on the fact that each split moves
+ the control points closer to the trisection points on the chord.
+ The corresponding distances are good surrogates for the curve
+ deviation from the straight line.
- * builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer.
+ This cubic flattening algorithm is somewhat similar to the conic
+ algorithm based the distance from the control point to the middle of
+ the chord. The cubic distances, however, decrease less predictably
+ but are easy enough to calculate on each step.
- Problem reported by Alan Coopersmith <alan.coopersmith@oracle.com>.
+ The new algorithm produces slightly larger number of splits, which is
+ compensated by its simplicity. The overall rendering performance is
+ improved by 1-2%. The larger number of splits does not necessarily
+ result in higher quality, which stays comparable.
-2018-02-17 Werner Lemberg <wl@gnu.org>
+ * src/smooth/ftgrays.c (gray_render_cubic): Replace the split
+ condition.
- [sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154).
+2019-04-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-2018-02-06 Werner Lemberg <wl@gnu.org>
+ [smooth] Bithacks and cosmetics.
- [truetype] Integer overflow issues.
+ * src/smooth/ftgrays.c (gray_record_cell, gray_set_cell, gray_hline,
+ gray_render_conic, gray_convert_glyph_inner): Updated.
- Reported as
+2019-04-25 Alexei Podtelezhnikov <apodtele@gmail.com>
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6027
+ Optimize Bézier bisections.
- * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIAP, Ins_MIRP): Use
- SUB_LONG; avoid FT_ABS.
+ This change makes bisections faster by 20-30%. When inlined into
+ `gray_render_cubic', this makes the function faster by 10% and is
+ noticeable in the overall rendering performance.
-2018-02-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/raster/ftraster.c (Split_Conic, Split_Cubic): Use shifts and
+ refactor.
+ * src/smooth/ftgrays.c (gray_split_conic, gray_split_cubic): Ditto.
+ * src/base/ftstroke.c (ft_conic_split, ft_cubic_split): Ditto.
+ * src/base/ftbbox.c (cubic_peak): Use shifts.
- [unix] Use -fvisibility=hidden.
+2019-04-23 Werner Lemberg <wl@gnu.org>
- It is now widely recommended that ELF shared libraries hide symbols
- except those with explicit __attribute__((visibility("default"))).
- This is supported by all major compilers and should rather be an
- option in libtool.
+ * src/sfnt/ttcmap.c (tt_cmap12_next): Remove dead code.
- * builds/unix/configure.raw: Add -fvisibility=hidden to CFLAGS.
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h (FT_EXPORT): Use visibility
- attribute.
+ Found by clang 8.0's static analyzer and reported by Sender Ghost
+ <lightside@gmx.com>.
-2018-01-27 Werner Lemberg <wl@gnu.org>
+2019-04-23 Werner Lemberg <wl@gnu.org>
- [truetype] Better protection against invalid VF data.
+ [base] Fix thinko in previous commit.
- Reported as
+ * src/base/ftbitmap.c (FT_Bitmap_Blend): Check final width, not
+ target pitch.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5739
+ Problem reported by Sender Ghost <lightside@gmx.com>.
- Bug introduced in commit 08cd62deedefe217f2ea50e392923ce8b5bc7ac7.
+2019-04-22 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttgxvar.c (TT_Set_Var_Design): Always initialize
- `normalizedcoords'.
+ * src/base/ftbitmap.c (FT_Bitmap_Blend): Check target pitch.
-2018-01-27 Werner Lemberg <wl@gnu.org>
+ Problem reported by Sender Ghost <lightside@gmx.com>.
- * src/truetype/ttinterp.c (Ins_GETVARIATION): Avoid NULL reference.
+2019-04-22 Werner Lemberg <wl@gnu.org>
- Reported as
+ Fix return value of `FT_Set_Named_Instance' (#56186).
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5736
+ * src/truetype/ttgxvar.c (TT_Set_Named_Instance): Correctly handle
+ internal return value -1 of `TT_Set_Var_Design'.
-2018-01-27 Werner Lemberg <wl@gnu.org>
+2019-04-18 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttgxvar.c (tt_set_mm_blend): Minor.
+ [pcf] Fix handling of undefined glyph (#56067).
-2018-01-27 Werner Lemberg <wl@gnu.org>
+ This commit fixes the changes from 2018-07-21, which broke charmap
+ iteration. We now add the default character as a new glyph with
+ index 0, thus increasing the number of glyphs by one (as before).
- [truetype] Better trace VF instances.
+ * src/pcf/pcfread.c (pcf_get_metrics): Adjust to new artificial
+ glyph with index 0.
+ Limit number of elements to 65534.
+ (pcf_get_bitmaps): Ditto.
+ Unify two loops into one; this avoids allocation of an intermediate
+ array.
+ (pcf_get_encodings): Don't flip indices but copy glyph metrics of
+ default character to index 0.
+ Also handle invalid default character.
- * src/truetype/ttgxvar.c (ft_var_to_normalized): Don't emit number
- of coordinates.
- (TT_Get_MM_Var): Trace instance indices names.
- (TT_Set_Var_Design): Updated.
+ * docs/CHANGES: Updated.
-2018-01-27 Werner Lemberg <wl@gnu.org>
+2019-04-15 Minmin Gong <gongminmin@msn.com>
- [truetype] Beautify tracing of VF axis records.
+ * CMakeLists.txt: Avoid rewriting of unchanged configuration files.
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Show axis records in a
- table-like manner.
+ Reported as
-2018-01-26 Ben Wagner <bungeman@google.com>
+ https://savannah.nongnu.org/patch/index.php?9755
- [truetype] Fix multiple calls of `FT_Get_MM_Var' (#52955).
+2019-04-15 JDG <JonathanG@iQmetrix.com>
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Set
- `face->blend->num_axis' in case we have to initialize the
- `face->blend'.
+ * src/tools/apinames.c (main): Fix error message.
-2018-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+ Reported as
- [apinames] Anonymous version map for GNU linker.
+ https://savannah.nongnu.org/patch/?9796
- * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.3.
- (OutputFormat): Add `OUTPUT_GNU_VERMAP'.
- (names_dump): Handle it.
- (usage): Updated.
- (main): Handle new command line flag `-wL'.
+2019-04-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-2018-01-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+ [smooth] Fix segfault in direct mode (#56092).
- [unix] Call libtool to clean up.
+ * src/base/ftoutln.c (FT_Outline_Render): Set missing clip_box for
+ direct mode.
+ * src/smooth/ftgrays.c (gray_raster_render): Use it.
- * builds/unix/install.mk (clean_project_unix, distclean_project_unix):
- Use libtool.
- * builds/freetype.mk: Minor.
+2019-04-06 Werner Lemberg <wl@gnu.org>
-2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/sfnt/ttcmap.c (tt_get_glyph_name): Pacify compiler (#56061).
- * src/base/ftver.rc: Fix mingw-w64 compilation.
+ This is for Visual Studio 2019 on ARM.
-2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+2019-04-06 Werner Lemberg <wl@gnu.org>
- [build] Enable VERSIONINFO resource for Cygwin/MinGW.
+ For distribution, replace `.tar.bz2' with `.tar.xz' bundles.
- * builds/unix/configure.raw: Check for resource compiler.
- * builds/unix/unix-cc.in: Conditionally set up resource compiler.
- * builds/freetype.mk: Add conditional rule for `ftver.rc'.
- * src/base/ftver.rc: Copyright notice and year update.
+ * builds/toplevel.mk (build): Do it.
-2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * README, docs/CHANGES, docs/release: Updated.
- [build] Move VERSIONINFO resource.
+2019-04-06 Antony Lee <anntzer.lee@gmail.com>
- * builds/windows/vc2010/freetype.vcxproj: Updated.
- * builds/windows/ftver.rc: Move file from here...
- * src/base/ftver.rc: ... to here.
+ Make `glyph_name' parameter to `FT_Get_Name_Index' a `const'.
-2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * include/freetype/freetype.h (FT_Get_Name_Index),
+ include/freetype/internal/ftobjs.h (FT_Face_GetGlyphNameIndexFunc),
+ include/freetype/internal/services/svgldict.h
+ (FT_GlyphDict_NameIndexFunc), src/base/ftobjs.c (FT_Get_Name_Index),
+ src/cff/cffdrivr.c (cff_get_name_index), src/sfnt/sfdriver.c
+ (sfnt_get_name_index), src/type1/t1driver.c (t1_get_name_index),
+ src/type42/t42drivr.c (t42_get_name_index): Add `const' to second
+ argument.
- [build] Expand dllexport/dllimport to Cygwin/MinGW.
+2019-03-31 Armin Hasitzka <prince.cherusker@gmail.com>
- * include/freetype/config/ftconfig.h: Respect DLL_EXPORT,
- s/_MSC_VER/_WIN32/.
- * builds/unix/ftconfig.in: Replicate here.
- * builds/vms/ftconfig.h: Replicate here.
+ [cff] Fix boundary checks.
-2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+ 642bc7590c701c8cd35a9f60fa899cfa518b17ff introduced dynamically
+ allocated memory when parsing CFF files with the "old" engine. Bounds
+ checks have never been updated, however, leading to pointless
+ comparisons of pointers in some cases. This commit presents a
+ solution for bounds checks in the CFF module with an extended logic
+ for the "old" engine while staying as concise as possible for the
+ "new" one.
- [build] Improve and document MSVC build.
+ * src/cff/cffparse.h: Introduce the struct `CFF_T2_StringRec' and
+ the additional field `t2_strings' within `CFF_ParserRec'.
- * include/freetype/config/ftconfig.h: Guard dllexport/dllimport
- attributes with _DLL and FT2_DLLIMPORT.
- * builds/windows/vc2010/index.html: Update documentation.
+ * src/cff/cffparse.c (cff_parser_within_limits): Move all boundary
+ checks into this new function and update the rest of `cffparse.c' to
+ use it.
-2018-01-10 Steve Robinson <ssrobins@gmail.com>
+ Reported as
- * CMakeLists.txt [win32]: Suppress warnings for POSIX functions.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12137
-2018-01-10 Ewald Hew <ewaldhew@gmail.com>
+2019-03-20 Werner Lemberg <wl@gnu.org>
- [psaux] Correctly handle Flex features (#52846).
+ [autofit] Fix Mongolian blue zone characters.
- * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO,
- cf2_cmdHMOVETO>: Do not move if doing Flex.
+ * src/autofit/afblue.dat: Use U+200D (ZERO-WIDTH JOINER) characters
+ to get medial forms for some Mongolian characters.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-2018-01-09 Alexei Podtelezhnikov <apodtele@gmail.com>
+2019-03-19 Werner Lemberg <wl@gnu.org>
- * builds/windows/vc2010/freetype.sln: Synchronize with the project.
+ [autofit] Add support for Mongolian script.
-2018-01-08 Werner Lemberg <wl@gnu.org>
+ As a de-facto standard, layouts using this script are constructed
+ horizontally line by line, then the lines are rotated clockwise for
+ vertical display.
- * Version 2.9 released.
- =======================
+ * src/autofit/afblue.dat: Add blue zone data for Mongolian.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+ * src/autofit/afscript.h: Add Mongolian standard characters.
- Tag sources with `VER-2-9'.
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Mongolian
+ data.
- * docs/VERSION.TXT: Add entry for version 2.9.
+2019-03-15 Werner Lemberg <wl@gnu.org>
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
+ * Version 2.10.0 released.
+ ==========================
+
+
+ Tag sources with `VER-2-10-0'.
+
+ * docs/VERSION.TXT: Add entry for version 2.10.0.
+ * docs/CHANGES: Updated.
+
+ * README, Jamfile (RefDoc), src/base/ftver.rc,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
@@ -547,1796 +594,2517 @@
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
- builds/windows/ftver.rc,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.8.1/2.9/, s/281/29/.
+ builds/wince/vc2008-ce/index.html: s/2.9.1/2.10.0/, s/291/2100/.
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 9.
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 10.
(FREETYPE_PATCH): Set to 0.
- * builds/unix/configure.raw (version_info): Set to 22:0:16.
- * CMakeLists.txt (VERSION_PATCH): Set to 0.
+ * builds/unix/configure.raw (version_info): Set to 23:0:17.
+ * CMakeLists.txt (VERSION_MINOR): Set to 10.
+ (VERSION_PATCH): Set to 0.
-2018-01-07 Werner Lemberg <wl@gnu.org>
+ * builds/toplevel.mk (version, winversion): Since the minor version
+ number has two digits now, never omit the patch number. We would
+ get ambiguous zip file names otherwise.
+ (dist): Remove remnants of `docmaker' tool.
+ (do-dist): Remove unused intermediate files.
- Add check for librt, needed for `ftbench' (#52824).
+ * src/cff/cffparse.c (destrict_c2s_item): Guard function with
+ CFF_CONFIG_OPTION_OLD_ENGINE macro.
- * builds/unix/configure.raw (LIB_CLOCK_GETTIME): Define; this will
- hold `-lrt' if necessary.
+2019-03-07 Andrei Alexeyev <0x416b617269@gmail.com>
+ Werner Lemberg <wl@gnu.org>
- * builds/unix/unix-cc.in (LIB_CLOCK_GETTIME): New variable.
+ Fix invalid function pointer casts.
-2018-01-07 Ewald Hew <ewaldhew@gmail.com>
+ This change should allow Freetype to work on WASM/Emscripten without
+ needing `-s EMULATE_FUNCTION_POINTER_CASTS=1'.
- [psaux] Fix Type 1 glyphs with too many stem hints.
+ * src/autofit/afdummy.c (af_dummy_hints_apply): Fix signature.
- According to the CFF specification, charstrings can have up to 96 stem
- hints. Due to hint replacement routines in Type 1 charstrings, some
- glyphs are rejected by the Adobe engine, which implements the above
- limit. This fix turns off hinting for such glyphs.
+ * src/cid/cidload.c (cid_parse_font_matrix, parse_fd_array,
+ parse_expansion_factor, parse_font_name): Return `void', not
+ `FT_Error'.
- * src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
- `cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
- hinting.
+ * include/freetype/internal/ftobjs.h (FT_CMap_CharVarIsDefaultFunc):
+ Fix signature.
-2018-01-06 Werner Lemberg <wl@gnu.org>
+2019-03-05 Werner Lemberg <wl@gnu.org>
- Add `FT_Done_MM_Var'.
+ [base] Handle numeric overflow (#55827).
- This is necessary in case the application's memory routines differ
- from FreeType. A typical example is a Python application on Windows
- that calls FreeType compiled as a DLL via the `ctypes' interface.
+ * src/base/ftglyph.c (FT_Glyph_Get_CBox): Use `FT_PIX_CEIL_LONG'.
- * include/freetype/ftmm.h, src/base/ftmm.c (FT_Done_MM_Var): Declare
- and define.
+2019-03-05 Sebastian Rasmussen <sebras@gmail.com>
- * docs/CHANGES: Updated.
+ [psaux] Fix use of uninitialized memory (#55832).
-2018-01-03 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psintrp.c (cf2_interpT2CharString): The call to
+ `cf2_arrstack_setCount' may fail because the allocator ran out of
+ memory. When this happens the stack is still written to before the
+ error condition is checked. This means that FreeType writes outside
+ of allocated memory. This commit moves the error check prior to the
+ stack assignment, hence the function now properly returns with an
+ error condition.
- [truetype] Round offsets of glyph components only if hinting is on.
+2019-02-23 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
- it.
+ * src/base/ftbitmap.c (FT_Bitmap_Blend): No fractional offsets.
-2018-01-03 Werner Lemberg <wl@gnu.org>
+ The function only provided a framework without an actual
+ implementation, which this commit removes.
- * src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.
+2019-02-23 Werner Lemberg <wl@gnu.org>
- This is a better fix than the previous commit, which is now
- reverted.
+ * src/tools/update-copyright-year: Insert `(C)'.
-2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+2019-02-21 Armin Hasitzka <prince.cherusker@gmail.com>
- Move internal LCD-related declarations.
+ [truetype] Mask numeric overflows.
- * include/freetype/ftlcdfil.h (ft_lcd_padding, ft_lcd_filter_fir):
- Move from here...
- * include/freetype/internal/ftobjs.h: ... to here.
+ * src/truetype/ttinterp.c (Move_CVT, Move_CVT_Stretched, Ins_MIRP):
+ Mask numeric overflows.
-2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+ Reported as
- * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
- [_MSC_VER]: Limit Visual C++ attributes.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11681
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11734
-2018-01-03 Werner Lemberg <wl@gnu.org>
+2019-02-21 Armin Hasitzka <prince.cherusker@gmail.com>
- [truetype] Make blend/design coordinate round-tripping work.
+ [psaux] Mask numeric overflow.
- Behdad reported that setting blend coordinates, then getting design
- coordinates did incorrectly return the default instance's
- coordinates.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings): Mask numeric
+ overflow.
- * src/truetype/ttgxvar.c (tt_set_mm_blend): Fix it.
+ Reported as
-2017-12-31 Werner Lemberg <wl@gnu.org>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13041
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix endless loop.
+2019-02-16 Wink Saville <wink@saville.com>
- Reported as
+ * src/autofit/afwarp.h (af_warper_compute): Fix declaration.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4838
+2019-02-02 Nikolaus Waxweiler <madigens@gmail.com>
-2017-12-31 Werner Lemberg <wl@gnu.org>
+ [truetype] Apply MVAR hasc, hdsc and hlgp metrics to current FT_Face metrics.
- Synchronize other Windows project files.
+ Instead of setting typo or win metrics as the new `FT_Face' metrics
+ indiscriminately, apply only typo deltas to the currently active
+ `FT_Face' metrics. This prevents line height differences when the
+ default outlines were used as the regular face and instances for
+ everything else, for example.
- * builds/windows/*: Add missing files.
+ * src/truetype/ttgxvar.c (tt_apply_mvar): Implement.
-2017-12-31 Werner Lemberg <wl@gnu.org>
+2019-02-02 Nikolaus Waxweiler <madigens@gmail.com>
- Update Visual C 2010 project files.
+ [sfnt] Use typo metrics if OS/2 fsSelection USE_TYPO_METRICS bit is set.
- Problem reported by Hin-Tak.
+ If the `OS/2' table exists and `fsSelection' bit 7
+ (USE_TYPO_METRICS) is set, use the `sTypo*' set of values to compute
+ the `FT_Face's ascender, descender, and height. Otherwise, fall
+ back to old behavior.
- * builds/windows/vc2010/freetype.vcxproj: Add files `ftbdf.c' and
- `ftcid.c'.
- Sort entries.
- * builds/windows/vc2010/freetype.vcxproj.filter: Ditto.
- Fix members of `FT_MODULE' group.
+ * src/sfnt/sfobjs.c (sfnt_load_face): Implement.
-2017-12-30 Werner Lemberg <wl@gnu.org>
+2019-01-18 John Tytgat <John.Tytgat@esko.com>
- * builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file.
+ [sfnt] Handle TT fonts having two PostScript font names (#55471).
-2017-12-28 Werner Lemberg <wl@gnu.org>
+ * src/sfnt/sfdriver.c (sfnt_get_name_id): Prefer English over any
+ other language found for PostScript font names.
- * builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file.
+2019-01-08 Chris Liddell <chris.liddell@artifex.com>
- Reported by Nikolaus.
+ [psaux] Fix closepath (#55414).
-2017-12-27 Werner Lemberg <wl@gnu.org>
+ All of the Type 1 path building is done with code common to the
+ revised CFF engine, with the exception of closepath, which was still
+ calling ps_builder_close_contour(), thus previously cached segments
+ were not always written to the path, and glyph corruption, or even
+ invalid outlines were possible.
- Fix compiler warnings.
+ * src/psauc/psinterp.c (cf2_interpT2CharString) <cf2_cmdCLOSEPATH>:
+ Switch to calling `cf2_glyphpath_closeOpenPath'.
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Make `pitch' and
- `new_pitch' unsigned.
+2018-12-29 Werner Lemberg <wl@gnu.org>
- * src/base/ftpsprop.c: Include FT_INTERNAL_POSTSCRIPT_PROPS_H.
+ * src/autofit/aflatin2.c: Some fixes from `aflatin.c' (#55310).
-2017-12-27 Werner Lemberg <wl@gnu.org>
+2018-12-25 Werner Lemberg <wl@gnu.org>
- Fixes for `make multi'.
+ * src/psaux/cffdecode.c (cff_operaor_seac): Fix numeric overflow.
- * include/freetype/internal/ftpsprop.h: Use `FT_BASE_CALLBACK'.
- (ps_property_get): Harmonize declaration with corresponding
- function typedef.
+ Reported as
- * include/freety[e/internal/fttrace.h: Add `trace_psprops'.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11915
- * src/base/ftpsprop.c: Include necessary header files.
- (FT_COMPONENT): Define.
- (ps_property_set): Tag with `FT_BASE_CALLBACK_DEF'.
- (ps_property_get): Tag with `FT_BASE_CALLBACK_DEF'.
- Harmonize declaration with corresponding function typedef.
+2018-12-12 Werner Lemberg <wl@gnu.org>
-2017-12-27 Werner Lemberg <wl@gnu.org>
+ [gxvalid] Fix compiler warnings.
- Provide support for intra-module callback functions.
+ * src/gxvalid/gxvjust.c (gxv_just_check_max_gid),
+ src/gxvalid/gxvmort.c (gxv_mort_coverage_validate): Use `FT_UNUSED'.
- This is needed especially for `make multi' with C++.
+2018-12-11 Werner Lemberg <wl@gnu.org>
- * include/freetype/config/ftconfig.h (FT_BASE_CALLBACK,
- FT_BASE_CALLBACK_DEF): New macros.
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Remove useless test.
-2017-12-25 Ewald Hew <ewaldhew@gmail.com>
+ `control_len' only gets its value from `n_ins' (and vice versa),
+ which is always read as `unsigned short' and thus can't be larger
+ than 0xFFFF.
- Move PostScript drivers' property handlers to `base'.
+2018-12-04 Werner Lemberg <wl@gnu.org>
- This reduces the amount of duplicated code across PostScript
- drivers.
+ [bdf] Ignore data after `ENDFONT'.
- * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c
- ({cff,cid,t1}_property_{get,set}): Moved to...
- * include/freetype/internal/ftpsprop.h: ...this new file.
- (ps_property_{get,set}): New functions to replace moved ones.
+ Reported as
- * src/base/ftpsprop.c: New file that implements above functions.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10798
- * include/freetype/internal/internal.h
- (FT_INTERNAL_POSTSCRIPT_PROPS_H): New macro.
+ * src/bdf/bdflib.c (_bdf_parse_end): New function.
+ (_bdf_parse_glyphs): Switch to `_bdf_parse_end' after `ENDFONT' has
+ been encountered.
- * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c:
- Updated.
+2018-12-02 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/base/Jamfile, src/base/rules.mk (BASE_SRC), src/base/ftbase.c:
- Updated.
+ * builds/windows/visualc/freetype.dsp: Dust off.
-2017-12-20 Werner Lemberg <wl@gnu.org>
+2018-11-27 Alexei Podtelezhnikov <apodtele@gmail.com>
- Speed up FT_Set_Var_{Design,Blend}_Coordinates if curr == new.
+ * builds/windows/vc2010/freetype.vcxproj: Simplify.
- We exit early if the current design or blend coordinates are
- identical to the new ones.
+2018-11-27 Chris Liddell <chris.liddell@artifex.com>
- * src/truetype/ttgxvar.c (tt_set_mm_blend, TT_Set_Var_Design):
- Implement it, returning internal error code -1 if there will be no
- variation change.
+ [type1,cff] Add FT_{Set,Get}_MM_WeightVector API calls.
- * src/type1/t1load.c (t1_set_mm_blend): Ditto.
+ For multiple master fonts, common usage (in Postscript) is to modify
+ the WeightVector of an existing font instance, this addition
+ supports that use.
- * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
- FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Updated.
+ * include/freetype/ftmm.h, src/base/ftmm.c (FT_Set_MM_WeightVector,
+ FT_Get_MM_WeightVector): New API functions.
-2017-12-18 Werner Lemberg <wl@gnu.org>
+ * include/freetype/internalservices/svmm.h
+ (FT_Set_MM_WeightVector_Func, FT_Get_MM_WeightVector_Func): New
+ function types.
+ (MultiMasters): Add `set_mm_weightvector' and `get_mm_weightvector'
+ members.
+ (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
- [sfnt] Fix charmap type 2 iterator (#52646).
+ * src/cffcffdrivr.c (cff_set_mm_weightvector,
+ cff_get_mm_weightvector): New functions.
+ (cff_service_multi_masters): Register them.
- The subsetted demo font of the report that exhibits the bug has a
- very unusual type 2 cmap for Unicode(!): It contains only two
- sub-headers, one for one-byte characters (covering the range 0x20 to
- 0xFA), and a second one for higher byte 0x01 (just for character
- code U+0131).
+ * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
+ This driver doesn't use the new interface.
- Before this commit, the iterator wasn't able to correctly handle a
- sub-header for higher byte 0x01.
+ * src/type1/t1load.c (T1_Set_MM_WeightVector,
+ T1_Get_MM_WeightVector): New functions.
+ * src/type1/t1driver.c (t1_service_multi_masters): Register them.
+ * src/type1/t1load.h: Updated.
- * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix character increment
- for outer loop.
+2018-11-27 Ben Wagner <bungeman@google.com>
-2017-12-18 Matthias Clasen <matthias.clasen@gmail.com>
+ [cff] Fix compiler warning (#55105).
- [truetype] Fix clamping, minor tracing code beautification.
+ * src/cff/cffparse.c (cff_parser_run): Guard label only used if
+ CFF_CONFIG_OPTION_OLD_ENGINE is active.
- * src/truetype/ttgxvar.c (ft_var_to_normalized): Trace number of
- design coordinates.
- Use clamped value.
+2018-11-27 Ben Wagner <bungeman@google.com>
-2017-12-18 Werner Lemberg <wl@gnu.org>
+ [truetype] Fix numeric overflow (#55103).
- * src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff.
+ * src/truetype/ttgload.c (compute_glyph_metrics): Use `SUB_LONG'.
-2017-12-18 Werner Lemberg <wl@gnu.org>
+2018-11-25 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688).
+ [builds] Belated DLL support with vc2002-vc2008.
-2017-12-18 Werner Lemberg <wl@gnu.org>
+ The solution and project files should be automatically upgraded for
+ the approriate Visual C++ version.
- [truetype] Fix previous commit.
+ * builds/windows/visualc/freetype.{sln,vcproj}: Major upgrades.
+ * builds/windows/visualc/index.html: Document the change.
+ * builds/windows/vc2005, builds/windows/vc2008: Removed as redundant.
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Correctly handle
- unhinted phantom points, which must be properly scaled.
+2018-11-22 Armin Hasitzka <prince.cherusker@gmail.com>
-2017-12-18 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffparse.c: Please the compiler.
- [truetype] Don't apply HVAR and VVAR deltas twice (#52683).
+2018-11-22 Armin Hasitzka <prince.cherusker@gmail.com>
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Always adjust
- `pp1' to `pp4', except if we have an HVAR and/or VVAR table.
+ [cff] Fix memory overflow.
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Handle
- alternative code branch identically w.r.t. presence of an HVAR
- and/or VVAR table.
+ Reported as
-2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9869
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10869
- [truetype] Correctly handle variation font phantom points (#52683).
+ * src/cff/cffparse.c (destruct_t2s_item, cff_parser_run): Store
+ evaluated T2 charstrings in separately allocated memory.
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix phantom
- point indices.
+2018-11-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+ * builds/windows/{visualc,vc2005,vc2008}/freetype.vcproj: Fix it.
- Fix incorrect advance width scaling (#52683).
+2018-11-10 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/base/ftadvance.c (FT_Get_Advances): Always respect the
- FT_LOAD_NO_SCALE flag if present.
+ [smooth] Placeholder only for library-enabled LCD filtering.
-2017-12-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/smooth/ftsmooth.c (ft_smooth_init): Add disabled
+ `FT_Library_SetLcdFilter' call.
- * builds/windows/vc2010/freetype.vcxproj: AfterBuild copy.
- * objs/.gitignore: Ignore almost everything.
+2018-11-09 Young Xiao <yangx92@hotmail.com>
-2017-12-11 Werner Lemberg <wl@gnu.org>
+ [psaux] Add safety guard (#54985).
- Fix compiler warning (#52640).
+ * src/psaux/psobjs.c (cff_builder_close_contour): Do it.
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused
- variable.
+2018-11-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-12-08 Azzuro <azzuro@team-mediaportal.com>
+ * builds/unix/configure.raw: Require `windows.h' for windres.
- * builds/windows/vc2010/freetype.vcxproj: Adjust output directory.
+2018-11-08 Alexei Podtelezhnikov <apodtele@gmail.com>
- This allows builds with different configurations in parallel.
+ [ftstroke] Fix unpredictable failures (#54986).
-2017-12-08 Werner Lemberg <wl@gnu.org>
+ * src/base/ftstroke.c (ft_sroke_border_lineto): Fix lineto check.
- Fix `make setup dos', second try (#52622).
+2018-11-08 Alexei Podtelezhnikov <apodtele@gmail.com>
- * builds/detect.mk (dos_setup): Don't use literal `>' character at
- all. Mixing the different escaping rules from make, dos, and
- windows is too fragile.
+ [ftstroke] Fix unpredictable failures (#54976).
-2017-12-08 Werner Lemberg <wl@gnu.org>
+ * src/base/ftstroke.c (ft_sroke_border_close): Set the start tags.
- [docmaker] Fix code section parsing.
+2018-11-07 Ben Wagner <bungeman@google.com>
- Stuff like
+ [truetype] Fix VF check from 2018-09-12 (#54973).
- {
- <bla>
- }
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Use correct
+ offsets for estimates.
- confused the parser, which incorrectly treated `<bla>' as a markup
- tag.
+2018-11-06 Werner Lemberg <wl@gnu.org>
- * src/tools/docmaker/content.py (ContentProcessor::process_content):
- Apply `re_markup_tags' only outside of code sections.
+ [pshinter] Fix numeric overflow.
-2017-12-08 Werner Lemberg <wl@gnu.org>
+ Reported as
- New `ftdriver.h' file, covering all driver modules.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11242
- This reduces redundancy and increases synergy; it also reduces the
- number of header files.
+ * src/pshinter/pshrec.c (ps_dimension_add_t1stem): Implement it.
- * include/freetype/config/ftheader.h (FT_DRIVER_H): New macro.
- (FT_AUTOHINTER_H, FT_CFF_DRIVER_H, FT_TRUETYPE_DRIVER_H,
- FT_PCF_DRIVER_H, FT_TYPE1_DRIVER_H): Make them aliases to
- FT_DRIVER_H.
+2018-11-06 Werner Lemberg <wl@gnu.org>
- * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
- include/freetype/ftpcfdrv.h, include/freetype/ftt1drv.h,
- include/freetype/ftttdrv.h: Replaced with...
- * include/freetype/ftdriver.h: ...this new file.
- (FT_CFF_HINTING_ADOBE, FT_T1_HINTING_ADOBE): Renamed to...
- (FT_HINTING_ADOBE): ... this new macro.
- (FT_CFF_HINTING_FREETYPE, FT_T1_HINTING_FREETYPE): Renamed to...
- (FT_HINTING_FREETYPE): ... this new macro.
+ [psaux] Fix timeout in old CFF engine.
- * src/*/*: Updated accordingly.
+ Reported as
-2017-12-08 Werner Lemberg <wl@gnu.org>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11260
- Move `ftdriver.h' to `ftdrv.h'.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_sqrt> [CFF_CONFIG_OPTION_OLD_ENGINE]: Fix potential endless
+ loop.
- * include/freetype/internal/ftdriver.h: Renamed to...
- * include/freetype/internal/ftdrv.h: ... this name.
+2018-11-04 Alexei Podtelezhnikov <apodtele@gmail.com>
- * include/freetype/internal/internal.h (FT_INTERNAL_DRIVER_H):
- Updated.
+ * src/truetype/ttgxvar.c: Use enum definitions.
+
+2018-11-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Adjust condition.
-2017-12-08 Werner Lemberg <wl@gnu.org>
+2018-11-03 Alexei Podtelezhnikov <apodtele@gmail.com>
- Fix access to uninitalized memory (#52613).
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Tracing tweaks.
- Also reported as
+2018-11-03 Alexei Podtelezhnikov <apodtele@gmail.com>
- https://bugs.chromium.org/p/chromium/issues/detail?id=791317
+ Revert due to specs: [truetype] Speed up variation IUP.
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): If increasing the
- bitmap size needs a larger bitmap buffer, assure that the new memory
- areas are initialized also.
+2018-11-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-12-08 Werner Lemberg <wl@gnu.org>
+ * src/truetype/ttgxvar.c (ft_var_get_item_delta): Fixed logic.
- Fix `make setup dos' (#52622).
+ Reported and tested by Behdad.
- * builds/detect.mk (dos_setup): Properly escape literal `>'
- character.
+2018-11-02 Shailesh Mistry <shailesh.mistry@hotmail.co.uk>
-2017-12-07 Werner Lemberg <wl@gnu.org>
+ [autofit] Prevent SEGV.
- Fix C++ compilation.
+ See
- * src/psaux/psauxmod.h: Use FT_CALLBACK_TABLE macro where necessary.
+ https://bugs.ghostscript.com/show_bug.cgi?id=697545
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix warning.
+ for more details on how the bug was found.
-2017-12-07 Werner Lemberg <wl@gnu.org>
+ * src/autofit/afloader.c (af_loader_load_glyph): Propagate error
+ code.
+
+2018-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
- Fix `make multi'.
+ [truetype] Speed up variation IUP.
- * include/freetype/internal/fttrace.h: Remove unused tracing macros.
- s/pshalgo2/pshalgo/.
- Add `trace_cffdecode'.
- * src/pshinter/pshalgo.c (FT_COMPONENT): Updated.
+ * src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial
+ snapping to the same position from true interpolation.
- * src/cff/cffload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
- * src/cff/cffobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H and
- FT_SERVICE_CFF_TABLE_LOAD_H.
+2018-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/cid/cidriver.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/type1/t1load.c (t1_set_mm_blend): Optimized.
- * src/psaux/cffdecode.c: Include FT_FREETYPE_H and
- FT_INTERNAL_DEBUG_H.
- (FT_COMPONENT): Define.
- * src/psaux/cffdecode.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
- * src/psaux/psauxmod.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
- Declare `cff_builder_funcs' and `ps_builder_funcs'.
- * src/psaux/psft.c: Include `psobjs.h' and `cffdecode.h'.
- * src/psaux/psobjs.c : Include `psauxmod.h'.
+2018-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-12-07 Werner Lemberg <wl@gnu.org>
+ * src/truetype/ttgxvar.c (ft_var_get_item_delta): Optimized.
- * include/freetype/config/ftheader.h: Some clean-up.
+2018-10-29 Werner Lemberg <wl@gnu.org>
- This commit removes documentation of deprecated macros and does some
- minor streamlining.
+ [base] Fix numeric overflow.
-2017-12-06 Werner Lemberg <wl@gnu.org>
+ Reported as
- * builds/symbian/bld.inf: Updated.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11080
-2017-12-06 Werner Lemberg <wl@gnu.org>
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use `MUL_LONG'.
- New header file `ftparams.h' that collects all parameter tags.
+2018-10-29 Werner Lemberg <wl@gnu.org>
- * include/freetype/config/ftheader.h (FT_PARAMETER_TAGS_H): New
- macro.
- (FT_TRUETYPE_UNPATENTED_H, FT_UNPATENTED_HINTING_H): Define it to
- `ftparams.h'.
+ [cff] Fix numeric overflow.
- * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
- include/freetype/ftincrem.h, include/freetype/ftlcdfil.h,
- include/freetype/ftsnames.h, include/freetype/ftt1drv.h: Include
- FT_PARAMETER_TAGS_H.
- Move FT_PARAM_TAG_XXX definitions to...
- * include/freetype/ftparams.h: ...this new file.
+ Reported as
- * include/freetype/ttunpat.h: Remove. No longer needed.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10988
-2017-12-05 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffparse.c (cff_parser_run)
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Use `NEG_LONG'.
- Improve tracing messages by using singular and plural forms.
+2018-10-27 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/*/*.c: Implement it.
+ [sfnt] Make `head' timestamps unsigned.
-2017-12-04 Werner Lemberg <wl@gnu.org>
+ It's been more than 2^31 seconds since 1904.
- [truetype] Allow shared points in `cvar' table (#52532).
+ * include/freetype/tttables.h (TT_Header): Change field types.
+ * src/sfnt/ttload.c (tt_face_load_generic_header): Updated.
- * src/truetype/ttgxvar.c (tt_face_vary_cvt): Implement it by copying
- and adjusting the corresponding code from
- `TT_Vary_Apply_Glyph_Deltas'.
+2018-10-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-11-28 Werner Lemberg <wl@gnu.org>
+ Revert: Align FreeType with standard C memory management.
- [truetype] Improving tracing of composite glyphs.
+2018-10-27 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph)
- [FT_DEBUG_LEVEL_TRACE]: Show composite glyph information.
+ [psaux] Fix numeric overflow.
-2017-11-27 Werner Lemberg <wl@gnu.org>
+ Triggered by
- [type1] Allow (again) `/Encoding' with >256 elements (#52464).
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11157
- In version 2.6.1, this has been disallowed to better reject
- malformed fonts; however, this restriction was too strong. This
- time, we only take the first 256 elements into account, since
- encoding arrays are always accessed with a 8bit integer, according
- to the PostScript Language Reference.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_blend>
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Fix integer overflow.
- * src/type1/t1load.c (parse_encoding): Implement it.
+2018-10-20 Werner Lemberg <wl@gnu.org>
-2017-11-27 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+ Avoid endless loop while tracing (#54858).
- Fix last commit (#52522).
+ * src/type1/t1load.c (parse_buildchar): Guard tracing stuff with
+ FT_DEBUG_LEVEL_TRACE.
- * builds/freetype.mk: Set `FT_OPTION_H' and `FTOPTION_FLAG'
- properly if we have `ftoption.h' in `BUILD_DIR'.
+2018-10-17 David Demelier <markand@malikania.fr>
-2017-11-24 Werner Lemberg <wl@gnu.org>
+ * CMakeLists.txt: Specify `RUNTIME DESTINATION'.
- [unix] Install a massaged `ftoption.h' file (#51780).
+ This is needed for DLL builds.
- * builds/unix/configure.raw (ftoption_set, ftoption_unset): New
- auxiliary functions to construct...
- (FTOPTION_H_SED): ... this new variable.
- Apply it as a sed argument while copying `ftoption.h' to the
- `builds/unix' directory (using `AC_CONFIG_FILES').
- Simplify code of test that checks cpp's computation of bit length
- (the test previously created an empty `ftoption.h' file and deleted
- it immediately afterwards); without this change, it can happen on my
- GNU/Linux box that `configure's execution of `config.status' doesn't
- create `ftoption.h' (no idea why this happens).
+2018-10-07 Werner Lemberg <wl@gnu.org>
- * builds/unix/install.mk (install): Install
- `builds/unix/ftoption.h'.
+ A missing Unicode cmap is not a fatal error.
- * builds/unix/unix-def.in (DISTCLEAN): Updated.
+ This is a follow-up to the previous commit.
- * builds/unix/.gitignore: Updated.
+ * src/cff/cffobjs.c (cff_face_init), src/sfnt/sfobjs.c
+ (sfnt_load_face), src/type1/t1objs.c (T1_Face_Init),
+ src/type42/t42objs.c (T42_Face_Init): Implement it.
-2017-11-23 Tor Andersson <tor.andersson@artifex.com>
+2018-10-07 Werner Lemberg <wl@gnu.org>
- Silence unused function warnings (#52465).
+ Fix handling of FT_CONFIG_OPTION_ADOBE_GLYPH_LIST (#54794).
- Some static function declarations cause unused function warnings if
- certain config options are turned off via `ftoption.h'.
+ * src/cff/cffcmap.c (cff_cmap_unicode_init), src/psaux/t1cmap.c
+ (t1_cmap_unicode_init), src/sfnt/ttcmap.c (tt_cmap_unicode_init):
+ Check `unicodes_init' field.
- * src/base/ftbase.h, src/base/ftrfork.c, src/sfnt/ttbdf.h,
- src/truetype/ttgxvar.h: Add #ifdef guards around these sections.
+2018-10-03 Werner Lemberg <wl@gnu.org>
-2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+ [ftgrays] Fix typo in stand-alone mode (#54771).
- * src/psaux/psft.c (cf2_setGlyphWidth): Check format before setting.
+ * src/smooth/ftgrays.c (FT_THROW) [STANDALONE_ &&
+ FT_DEBUG_LEVEL_TRACE]: Fix call to `FT_ERR_CAT'.
+
+2018-10-02 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix segfault.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4377
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10768
-2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_callothersubr> [CFF_CONFIG_OPTION_OLD_ENGINE]: Check
+ argument.
- [psaux] Fix CFF advance widths. (#52466)
+2018-10-02 Werner Lemberg <wl@gnu.org>
- Glyph advance widths were being written to the new `PS_Decoder' but not
- saved to the underlying format specific decoder. This caused pure CFF
- fonts to have bad advance width.
+ [psaux] Fix numeric overflow.
- * include/freetype/internal/psaux.h (PS_Decoder): Change `glyph_width'
- field to pointer.
- Remove unused fields.
- * src/psaux/psobjs.c (ps_decoder_init): Change `glyph_width' from copy
- to reference.
- Remove unused.
- * src/psaux/psft.c (cf2_setGlyphWidth): Update code.
+ Reported as
-2017-11-15 Vlad Tsyrklevich <vtsyrklevich@google.com>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10740
- * include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_roll>
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Use NEG_INT.
-2017-11-14 Nikolaus Waxweiler <madigens@gmail.com>
+2018-10-02 Werner Lemberg <wl@gnu.org>
- Use Adobe hinting engine for `light' hinting of both CFF and Type 1.
+ [pshinter] Handle numeric overflow.
- Since Ewald Hew factored the Adobe hinting engine out of the CFF
- driver code, we can now use it on Type 1 (and CID) font formats, as
- both have the same hinting philosophy.
+ Reported as
- This change activates the Adobe hinter when in LIGHT mode, and
- therefore always unless explicitly asking for the auto-hinter. This
- makes LIGHT behavior consistent with CFF fonts. As of this commit,
- the hinting engine table looks as follows.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10550
- LIGHT NORMAL
- -------------------------
- TrueType Auto v40
- CFF Adobe Adobe
- Type 1 Adobe Adobe
+ * src/pshinter/pshglob.c (psh_blues_snap_stem): Mask numeric
+ overflow.
-2017-11-10 Yuri Levchenko <yuri_levchenko@boolat.com>
+2018-09-27 Alexei Podtelezhnikov <apodtele@gmail.com>
- * CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option.
+ Align FreeType with standard C memory management.
-2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * include/freetype/ftsystem.h: Include FT_TYPES_H.
+ (*FT_Alloc_Func, *FT_Realloc_Func): Use size_t for the size arguments.
+ * src/raster/ftmisc.h: Ditto.
- * src/base/ftobjs.c (FT_Load_Glyph): Relocate condition.
+ * builds/amiga/src/base/ftsystem.c, builds/unix/ftsystem.c,
+ * builds/vms/ftsystem.c, src/base/ftsystem.c (ft_alloc, ft_realloc):
+ Use size_t for the size arguments.
-2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/base/ftdbgmem.c (ft_mem_debug_alloc, ft_mem_debug_realloc): Use
+ FT_Offset, aka size_t, for the size arguments.
- * src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables.
+2018-09-25 Werner Lemberg <wl@gnu.org>
-2017-11-03 Ewald Hew <ewaldhew@gmail.com>
+ Fix handling of `FT_Bool'.
- [psaux] Fix PostScript interpreter rewinding in Type 1 mode. (#52251)
+ Before this commit we had code like
- The interpreter in Type 1 mode rewinds the charstring after collecting
- all hints for building the initial hintmap (commit d52dd7f). However,
- some charstrings use `endchar' in a final subroutine call, rewinding to
- the start of that subroutine, and only a small section of the actual
- glyph is drawn.
+ (FT_Bool)( globals->glyph_styles[gindex] & 0x8000)
- * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdENDCHAR>:
- Ensure we are on the top level charstring before rewinding.
+ Since `FT_Bool' is defined to be an `unsigned char', the code
+ evaluated to something like
-2017-11-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+ (unsigned char)( 0x8532 & 0x8000)
- [truetype] Add more tricky fonts.
+ which in turn expanded to
- See the report by Yang Yinsen.
- https://lists.gnu.org/archive/html/freetype-devel/2017-11/msg00000.html
+ (unsigned char)( 0x8000)
- * src/truetype/ttobjs.c (trick_names): Add `DFGothic-EB',
- `DFGyoSho-Lt', `DFHSGothic-W5', `DFHSMincho-W3' and `DFHSMincho-W7'.
- (tt_check_trickyness_sfnt_ids): Add checksums for DFGothic-EB,
- DFGyoSho-Lt, DFHSGothic-W5, DFHSMincho-W3 and DFHSMincho-W7. Also
- add checksums for DLCLiShu and DLCHayBold which their family names
- were already listed but their checksums were previously unknown.
+ and finally yielded 0x00 – i.e., false – not as expected.
-2017-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+ Problem reported and analyzed by Tony Smith <tony.smith@macro4.com>.
- [smooth] Fix complex rendering at high ppem.
+ * include/freetype/fttypes.h (FT_BOOL): Add a comparison against
+ zero so that we always have a Boolean expression.
- We used to split large glyphs into horizontal bands and continue
- bisecting them still horizontally if that was not enough. This is
- guaranteed to fail when a single scanline cannot fit into the
- rendering memory pool. Now we bisect the bands vertically so that
- the smallest unit is a column of the band height, which is guranteed
- to fit into memory.
+ */*: Replace castings to `FT_Bool' with calls to `FT_BOOL' where
+ possible.
- * src/smooth/ftgrays.c (gray_convert_glyph): Implement it.
+2018-09-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+ [bdf] Speed up charmap access.
- [smooth] Improve complex rendering at high ppem.
+ This makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times faster.
- At large sizes almost but not exactly horizontal segments can quickly
- drain the rendering pool. This patch at least avoids filling the pool
- with trivial cells. Beyond this, we can only increase the pool size.
+ * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Help binary search
+ with continuous prediction.
- Reported, analyzed, and tested by Colin Fahey.
+2018-09-22 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Another tweak.
-2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+ This one should be clearer. When the rounded monochrome bbox collapses
+ we add a pixel that covers most if not all original cbox.
- [base] Improve tracing in FT_Load_Glyph, FT_*_Size.
+2018-09-21 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
- function name, glyph index, and load flags.
- (FT_Select_Metrics, FT_Request_Metrics): Remove all tracing.
- (FT_Select_Size, FT_Request_Size): Improve tracing.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Further tweak.
-2017-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-09-21 Ben Wagner <bungeman@google.com>
- [base] Improve tracing in FT_Render_Glyph.
+ Improve auto-hinter handling of bitmap fonts (#54681).
- * src/base/ftobjs.c (FT_Render_Glyph_Internal): Add total coverage
- calculations and downgrade Netpbm dump to bitmap:7.
+ For bitmap fonts, `FT_Load_Glyph' should either return an error or
+ not set the format to `FT_GLYPH_FORMAT_OUTLINE'. However, in this
+ case `FT_Load_Glyph' calls into the auto-hinter which calls back
+ into `FT_Load_Glyph' with `FT_LOAD_NO_SCALE' in the flags, which
+ marks the glyph as `FT_GLYPH_FORMAT_OUTLINE' with an empty path
+ (even though it doesn't have any path). It appears that the
+ auto-hinter should not be called when the face doesn't have
+ outlines. The current test for using the auto-hinter in
+ `FT_Load_Glyph' checks whether the driver supports scalable
+ outlines, but not if the face supports scalable outlines.
-2017-10-15 Ewald Hew <ewaldhew@gmail.com>
+ * src/base/ftobjs.c (FT_Load_Glyph): Directly check whether we have
+ scalable outlines.
- [cff] Fix segfault on missing `psaux' (#52218)
+2018-09-21 Werner Lemberg <wl@gnu.org>
- * src/cff/cffload.c (cff_done_blend): Add a check for possible nullptr.
+ [raster] Fix disappearing vertical lines (#54589).
- * modules.cfg: Update dependency list.
+ * src/raster/ftraster.c (Vertical_Sweep_Span): Handle special case
+ where both left and right outline exactly pass pixel centers.
-2017-10-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-09-20 Alexei Podtelezhnikov <apodtele@gmail.com>
- [base, cff] Fix MSVC warnings.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Tiny rounding tweak.
- * src/base/ftobjs.c (FT_New_Library): C4702: unreachable code.
- (ft_glyphslot_preset_bitmap): C4244: possible loss of data.
- * src/cff/cffload.c (cff_blend_doBlend): C4244: possible loss of data.
- Turn `sum' into unsigned.
+ This adds pixels in case a contour goes through the center
+ and they need to be turned on in the b/w rasterizer.
-2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-09-20 Alexei Podtelezhnikov <apodtele@gmail.com>
- [base] Netpbm image tracing.
+ [pcf] Replace charmap implementation.
- * src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
- (FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
+ PCF comes with charmap lookup table, aka PCF encodings. Using it
+ directly makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times
+ faster than the original BDF-like binary searches.
- * src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
+ * src/pcf/pcf.h (PCF_EncodingRec): Removed.
+ (PCF_FaceRec): Remove `nencodings' and `encodings'.
+ * src/pcf/pcfdrivr.c (pcf_cmap_char_{index,next}): Replaced.
+ * src/pcf/pcfread.c (pcf_get_encodings): Store data differently.
-2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-09-20 Werner Lemberg <wl@gnu.org>
- * builds/windows/ftdebug.c (FT_Message): Print to stderr.
- * builds/wince/ftdebug.c (FT_Message): Ditto.
+ [base] Remove unused function `FT_GlyphLoader_CopyPoints'.
-2017-10-14 Behdad Esfahbod <behdad@behdad.org>
+ * include/freetype/internal/ftgloadr.h, src/base/ftgloadr.c
+ (FT_GlyphLoader_CopyPoints): Do it.
- [afshaper] Delay creating `hb_set' objects until needed.
+2018-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
- In runs on Noto Naskh Arabic, this results in 89 sets created
- instead of 340 before. Makes auto-hinter setup with HarfBuzz
- enabled 20% to 30% faster.
+ [pcf] Prepare to replace charmap implementation.
- * src/autofit/afshaper.c (af_shaper_get_coverage): Implement it.
+ * src/pcf/pcf.h (PCF_FaceRec): Updated to include...
+ (PCF_EncRec): ... this new structure to store charmap geometry.
-2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+ * src/pcf/pcfread.c (pcf_get_encodings): Store charmap geometry.
- [type1, cid] Add hinting engine switch.
+2018-09-18 Alexei Podtelezhnikov <apodtele@gmail.com>
- Implement property service in `type1' and `cid' drivers to allow
- switching between FreeType or Adobe hinting engine when both are
- available.
+ Remove unused fields.
- * src/cid/cidriver.c (cid_property_{set,get}, cid_services),
- src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
- Properties service.
+ * src/pcf.h (PCF_FaceRec): Remove `charmap' and `charmap_handle'.
+ * src/bdfdrvr.h (BDF_FaceRec): Ditto.
+ * src/winfonts/winfnt.h (FNT_FaceRec): Ditto.
- * src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
- (T1_Driver_Init): Add default property values.
+2018-09-17 Werner Lemberg <wl@gnu.org>
-2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+ [pshinter] Handle numeric overflow.
- Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
+ Reported as
- This controls whether the old Type 1 engine gets compiled into FreeType.
- It is disabled by default.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10396
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (T1_CONFIG_OPTION_OLD_ENGINE): New macro.
+ * src/pshinter/pshglob.c: Include FT_INTERNAL_CALC_H.
+ (psh_blues_snap_stem): Mask numeric overflow.
+
+2018-09-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Some fixes for VF checks.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10317
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Properly exit memory
+ frame if we have invalid glyph variation data offsets.
+ (tt_face_vary_cvt): Protect against missing `tuplecoords' array.
+ Fix typo.
+
+2018-09-13 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Fix last commit.
+
+2018-09-13 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Check `result'.
+
+ Reported as
- * include/freetype/internal/psaux.h (PS_Decoder): Remove unused field.
- * include/freetype/internal/psaux.h, src/cid/cidgload.c
- (cid_load_glyph), src/psaux/psauxmod.c, src/psaux/psobjs.c
- (ps_builder_add_point), src/psaux/t1decode.c
- (t1_lookup_glyph_by_stdcharcode, t1_decoder_parse_glyph,
- t1operator_seac, t1_decoder_parse_charstrings), src/psaux/t1decode.h,
- src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Surround
- relevant code with macro.
- Minor code changes.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10316
-2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+2018-09-12 John Tytgat <John.Tytgat@esko.com>
- Extract width parsing from Type 1 parser.
+ [sfnt] Better PS name handling (#54629).
- Duplicate the fast advance width calculations from the old parser.
- This is to facilitate adding options for compiling out the old parser.
+ * src/sfnt/sfdriver (IS_WIN, IS_APPLE): Omit language ID checks.
+ (get_win_string, get_apple_string): Return NULL when the PostScript
+ font name characters is not according to specification.
+ (get_win_string): Make trace output work if the high byte if
+ non-zero.
+ (sfnt_get_var_ps_name, sfnt_get_ps_name): Previously we preferred
+ Win PS name (when there is also an Apple PS name); change this into
+ a fallback to Apple PS name in case the Win PS name is invalid.
- * src/psaux/t1decode.{c,h} (t1_decoder_parse_metrics): New function.
- * include/freetype/internal/psaux.h (T1_Decoder_Funcs): New entry
- `parse_metrics'.
- * src/psaux/psauxmod.c: Set the new entry.
+2018-09-12 Werner Lemberg <wl@gnu.org>
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String),
- src/cid/cidgload.c (cid_load_glyph): Separate
- conditional for selecting engine.
+ [truetype] Improve VF check.
-2017-10-09 Werner Lemberg <wl@gnu.org>
+ Triggered by
- * src/base/ftoutln.c (FT_Outline_Translate): Fix integer overflow.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10255
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Use better limit check
+ for `tupleCount'.
+
+2018-09-12 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Check `glyphoffsets'.
+
+2018-09-10 Armin Hasitzka <prince.cherusker@gmail.com>
+
+ * src/pshinter/pshrec.c (t2_hints_stems): Mask numeric overflow.
Reported as
- https://bugs.chromium.org/p/chromium/issues/detail?id=772775
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10215
+
+2018-09-09 Ben Wagner <bungeman@google.com>
+
+ * builds/freetype.mk (refdoc-venv): Ensure python version (#54631).
+
+2018-09-07 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix assertion failure.
+
+ Triggered by
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10212
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Reintroduce
+ `opened_frame' (removed in a change from 2018-08-26) to handle
+ deallocation of the second frame.
+
+2018-09-05 Werner Lemberg <wl@gnu.org>
+
+ Synchronize `ftdebug.c' files.
+
+ * builds/amiga/src/base/ftdebug.c, builds/wince/ftdebug.c,
+ builds/windows/ftdebug.c: Synchronize with `src/base/ftdebug.c'.
-2017-10-08 Werner Lemberg <wl@gnu.org>
+2018-09-05 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
- * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Integer overflows.
+ Add documentation guidelines file.
+
+ * docs/DOCGUIDE: New file.
+
+2018-09-04 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h: Synchronize with master `ftoption.h'.
+
+2018-09-03 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
+
+ [docwriter] Don't break code snippets accross lines.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3579
+ https://lists.nongnu.org/archive/html/freetype-devel/2018-08/msg00124.html
+
+ * docs/reference/markdown/stylesheets/extra.css (.md-typeset code):
+ Add rule `white-space'.
+
+2018-09-03 Werner Lemberg <wl@gnu.org>
+
+ */*: s/PSNames/psnames/.
+
+ Only tracing messages are affected.
+
+2018-09-03 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix heap buffer overflow in CPAL handling.
+
+ * src/sfnt/ttcpal.c (tt_face_palette_set): Fix boundary test.
+ (tt_face_load_cpal): Updated.
+
+2018-09-01 Werner Lemberg <wl@gnu.org>
+
+ Remove `FT_Outline_{New,Done}_Internal'.
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ These public API functions(!) were always undocumented and have
+ escaped all clean-up efforts until now.
- [sfnt] Adjust behaviour of PS font names for variation fonts.
+ * include/freetype/ftoutln.h (FT_Outline_New_Internal,
+ FT_Outline_Done_Internal): Removed.
- * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Use a named instance's
- PS name only if no variation is applied.
+ * src/base/ftoutln.h (FT_Outline_New_Internal,
+ FT_Outline_Done_Internal): Merge into...
+ (FT_Outline_New, FT_Outline_Done): ... these functions.
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ * docs/README: Updated.
- [cff, truetype] Adjust behaviour of named instances.
+2018-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
- This commit completely separates the interaction between named
- instances and variation functions. In particular, resetting the
- variation returns to the current named instance (if set) and not to
- the base font.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Check glyph format.
- As a side effect, variation functions no longer change the named
- instance index.
+2018-08-31 Armin Hasitzka <prince.cherusker@gmail.com>
- * src/cff/cffobjs.c (cff_face_init): Use MM service's `set_instance'
+ [errors] Refine the macro logic surrounding `FT_Error_String'.
+
+ * include/freetype/fterrors.h (FT_INCLUDE_ERR_PROTOS,
+ FT_ERR_PROTOS_DEFINED): Undefine `FT_INCLUDE_ERR_PROTOS' after
+ checking it and introduce a new macro that takes proper care of
+ multiple-inclusion protection.
+
+2018-08-31 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdebug.c (FT_Throw): Restore missing `FT_UNUSED' calls.
+
+2018-08-31 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdebug.c (FT_Throw): Reduce chattiness.
+
+2018-08-31 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Add initialization.
+
+2018-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Consolidate bitmap presetting and size assessment.
+
+ * include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
+ Change return type.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Return the bitmap
+ size assessment.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Use it to refuse the
+ rendering of enourmous or far-fetched outlines.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+
+2018-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Correct mono.
+
+2018-08-30 Armin Hasitzka <prince.cherusker@gmail.com>
+
+ [errors] Introduce a macro to control `FT_Error_String'.
+
+ * devel/ftoption.h (FT_CONFIG_OPTION_ERROR_STRINGS),
+ include/freetype/config/ftoption.h (FT_CONFIG_OPTION_ERROR_STRINGS):
+ New macro.
+
+2018-08-30 Armin Hasitzka <prince.cherusker@gmail.com>
+
+ [errors] Introduce `FT_Error_String'.
+
+ * include/freetype/fterrors.h (FT_Error_String),
+ src/base/fterrors.c (FT_Error_String): Implement `FT_Error_String'.
+
+ * src/base/ftbase.c, src/base/Jamfile (_source),
+ src/base/rules.mk (BASE_SRC): Add `fterrors.c' to the build logic.
+
+ * src/base/ftdebug.c (FT_Throw): Use `FT_Error_String'.
+
+2018-08-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Trace `before' and `after' edges of strong points.
+
+ * src/autofit/afhints.h (AF_PointRec) [FT_DEBUG_AUTOFIT]: New arrays
+ `before' and `after'.
+
+ * src/autofit/afhints.c (af_get_strong_edge_index): New auxiliary
function.
- Also apply `MVAR' table to named instances.
+ (af_glyph_hints_dump_points): Trace `before' and `after' edges.
+ (af_glyph_hints_align_strong_points) [FT_DEBUG_AUTOFIT]: Set
+ `before' and `after' information.
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Add cast.
- (tt_set_mm_blend): No longer check whether requested variation
- coincides with a named instance.
- (TT_Set_Var_Design): Use current named instance for default
- coordinates.
- * src/truetype/ttobjs.c (tt_face_init): Use `TT_Set_Named_Instance'.
+2018-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ [base] Overflow-resistant bitmap presetting.
- Make `FT_Set_Named_Instance' work.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Implement it.
- * src/cff/cffdrivr.c (cff_set_instance): New function.
- (cff_service_multi_masters): Register it.
+2018-08-29 Armin Hasitzka <prince.cherusker@gmail.com>
- * src/truetype/ttgxvar.c (TT_Set_Named_Instance): New function.
- * src/truetype/ttgxvar.h: Updated.
- * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Register
- it.
+ Fix numeric overflows.
- * src/type1/t1load.c (T1_Reset_MM_Blend): New function.
- * src/type1/t1load.h: Updated.
- * src/type1/t1driver.c (t1_service_multi_masters): Register it.
+ * src/pshint/pshalgo.c (psh_hint_align, psh_hint_align_light,
+ psh_hint_table_find_strong_points): Fix numeric overflows.
+
+ Reported as
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10083
- Make `FT_FACE_FLAG_VARIATION' work.
+2018-08-29 Werner Lemberg <wl@gnu.org>
- * include/freetype/internal/tttypes.h (TT_Face): Remove
- `is_default_instance'; this can be replaced with a combination of
- `FT_IS_VARIATION' and `FT_IS_INSTANCE'.
+ [cff] Fix handling of `roll' op in old engine.
- * src/cff/cffdrivr.c (cff_get_advances): Updated.
+ Reported as
- * src/sfnt/sfdriver.c (sfnt_get_ps_name), src/sfnt/sfobjs.c
- (sfnt_init_face): Updated.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10080
- * src/truetype/ttdriver.c (tt_get_advances), src/truetype/ttgload.c
- (TT_Process_Simple_Glyph, load_truetype_glyph, IS_DEFAULT_INSTANCE),
- src/truetype/ttgxvar.c (tt_set_mm_blend): Updated.
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
- Handle `FT_FACE_FLAG_VARIATION'.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_roll>
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Use modulo for loop count, as
+ documented in the specification.
- * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Handle
- `FT_FACE_FLAG_VARIATION'.
+2018-08-26 Werner Lemberg <wl@gnu.org>
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ * src/truetype/ttobjs.c (tt_size_read_bytecode): Trace CVT values.
- New function `FT_Set_Named_Instance'.
+2018-08-26 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
- No effect yet.
+ * configure: Copy assets required by docwriter.
- * src/base/ftmm.c (FT_Set_Named_Instance): New function.
+ Copy directory `docs/reference/markdown' when FreeType is compiled in a
+ different directory.
- * include/freetype/ftmm.h: Updated.
+ Fixes `make refdoc' if builddir != srcdir.
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ Reported as
- Add macros for checking whether a font variation is active.
+ https://lists.nongnu.org/archive/html/freetype-devel/2018-08/msg00083.html
- * include/freetype/freetype.h (FT_FACE_FLAG_VARIATION,
- FT_IS_VARIATION): New macros.
- No effect yet.
+2018-08-26 Werner Lemberg <wl@gnu.org>
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ * src/pshint/pshalgo.c (psh_hint_overlap): Fix numeric overflow.
- Add framework for setting named instance in MM service.
+ Reported as
- * include/freetype/internal/services/svmm.h (FT_Set_Instance_Func):
- New function typedef.
- (MultiMasters): Add `set_instance' member.
- (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10057
- * src/cff/cffdrivr.c (cff_service_multi_masters),
- src/truetype/ttdriver (tt_service_gx_multi_masters),
- src/type1/t1driver.c (t1_service_multi_masters): Updated.
+2018-08-26 Werner Lemberg <wl@gnu.org>
-2017-10-07 Werner Lemberg <wl@gnu.org>
+ Minor tracing adjustments.
- [type1] Minor code shuffling.
+ * src/base/ftstream.c (FT_Stream_EnterFrame, FT_Stream_ExitFrame):
+ Trace.
- * src/type1/t1load.c (T1_Set_MM_Blend): Make it a wrapper of...
- (t1_set_mm_blend): ...this new function.
- (T1_Set_MM_Design): Use `t1_set_mm_blend'.
+ * src/truetype/ttgload.c (TT_Access_Glyph_Frame): Remove tracing.
-2017-10-05 Werner Lemberg <wl@gnu.org>
+2018-08-26 Werner Lemberg <wl@gnu.org>
- * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Fix integer
- overflow.
+ [truetype] Avoid nested frames.
+
+ Triggered by
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10054
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Don't use variable
+ `opened_frame' to trace whether a frame must be closed at the end of
+ function: This fails because `TT_Vary_Apply_Glyph_Deltas' (which
+ gets called for space glyphs) uses a frame by itself. Instead,
+ close the frame after loading the header, then use another frame for
+ the remaining part of the glyph later on.
+
+ Also avoid calling `tt_get_metrics' twice under some circumstances.
+
+2018-08-26 Werner Lemberg <wl@gnu.org>
+
+ Various minor clean-ups.
+
+ * src/base/ftapi.c: Remove. Unused.
+ * src/base/Jamfile (_sources): Updated.
+
+ * src/base/ftstream.c (FT_Stream_ReleaseFrame): Remove redundant
+ code.
+
+2018-08-25 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
+
+ Convert documentation markup to Markdown.
+
+ It is the result of a GSoC 2018 project; this separate ChangeLog
+ commit covers the last four commits
+
+ ae5d1a4cec37557f31aec270332cfe886a62f9a0
+ 53c69ce04faed3dcc68ca0f54cb8d703d8babf69
+ 195728d5ba38f34fb2c2c20807c01656f2f59b66
+ c962db28ea59225f0105c03d907d4a9b71765687
+
+ * docs/reference/markdown/images/favico.ico,
+ docs/reference/markdown/javascripts/extra.js,
+ docs/reference/markdown/stylesheets/extra.css: New files.
+
+ * docs/reference/.gitignore, docs/reference/README: Updated.
+
+ * src/tools/docmaker/*: Removed. It has been replaced with
+ `docwriter', a python package available at
+
+ https://pypi.org/project/docwriter/
+
+ * Jamfile: Updated.
+ * builds/ansi/ansi-def.mk, builds/beos/beos-def.mk,
+ builds/dos/dos-def.mk, builds/os2/os2-def.mk (BIN),
+ builds/unix/unixddef.mk, builds/windows/win32-def.mk: New variable.
+
+ * builds/unix/configure.raw: Check for `python' and `pip'.
+ If not present, warn that `make refdoc' will fail.
+ * builds/unix/unix-def.in (PYTHON, PIP, BIN): New variables.
+
+ * builds/freetype.mk (PYTHON, PIP, VENV_NAME, VENV_DIR, ENV_PYTHON,
+ ENV_PIP): New variables.
+ (refdoc): Updated.
+ (refdoc-venv): New target.
+ (.PHONY): Updated.
+
+2018-08-23 Werner Lemberg <wl@gnu.org>
+
+ Add macros for handling over-/underflowing `FT_Int64' values.
+
+ * include/freetype/internal/ftcalc.h (ADD_INT64, SUB_INT64,
+ MUL_INT64, DIV_INT64) [FT_LONG64]: New macros.
+
+ * src/base/ftcalc.c (ft_corner_orientation) [FT_LONG64]: Use
+ `SUB_INT64' and `MUL_INT64'.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3539
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10028
-2017-10-05 Werner Lemberg <wl@gnu.org>
+2018-08-22 Werner Lemberg <wl@gnu.org>
- Fix compiler warnings.
+ [truetype] Improve legibility of `glyf' parsing.
- * src/cff/cffdrivr.c (cff_ps_get_font_extra): Avoid code that relies
- on numeric overflow.
- Add cast.
+ * src/truetype/ttgload.c (ON_CURVE_POINT, X_SHORT_VECTOR,
+ Y_SHORT_VECTOR, REPEAT_FLAG, X_POSITIVE, SAME_X, Y_POSITIVE, SAME_Y,
+ OVERLAP_SIMPLE): New macros.
+ (TT_Load_Simple_Glyph): Use new macros to make code more readable.
+ Remove useless adjustment of `outline->tags' elements.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix variable
- types, add cast.
+2018-08-21 Werner Lemberg <wl@gnu.org>
-2017-10-04 John Tytgat <John.Tytgat@esko.com>
+ * src/sfnt/ttcpal.c (tt_face_load_cpal): Add missing safety check.
- [cff] Add support for `FSType'.
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9981
- * include/freetype/internal/cfftypes.h (CFF_FontRec): Add
- `font_extra' entry.
+2018-08-18 Werner Lemberg <wl@gnu.org>
- * src/cff/cffdrivr.c (cff_ps_get_font_extra): New function to
- retrieve FSType info from the embedded PostScript data.
- (cff_service_ps_info): Register function.
+ [psaux] Avoid slow PS font parsing in case of error.
+
+ Reported as
- * src/cff/cffload.c (cff_font_done): Free `font_extra'.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9955
-2017-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/psaux/psobjs.c (ps_parser_to_bytes): Set `parser->cursor' even
+ in case of error to avoid potential re-scanning.
- Signedness fixes in bitmap presetting.
+2018-08-18 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix heap buffer overflow in old engine.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3514.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9967
- * src/raster/ftrend1.c (ft_raster1_render): Exlicitly signed height.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
- * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Explicitly unsigned
- subtraction.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_blend> [CFF_CONFIG_OPTION_OLD_ENGINE]: `num_designs' must be
+ non-zero.
+
+2018-08-16 Young Xiao <yangx92@hotmail.com>
+
+ * builds/mac/ftmac.c (parse_fond): Fix buffer overrun.
+
+ Reported as bug #54515, duplicate of #43540.
+
+2018-08-16 Werner Lemberg <wl@gnu.org>
+
+ * builds/*/ftsystem.c (FT_COMPONENT): Updated also.
-2017-09-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-08-15 Alexei Podtelezhnikov <apodtele@gmail.com>
- Bitmap metrics presetting [2/2].
+ [bdf] Don't track duplicate encodings.
- * src/base/ftobjs.c (FT_Load_Glyph): Preset the bitmap metrics when
- appropriate but `FT_Render_Glyph' is not called.
- * include/freetype/freetype.h (FT_GlyphSlotRec): Document the change.
+ There is no harm except some umbiguity in broken fonts with duplicate
+ encodings.
-2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Remove duplicate tracking.
+ (_bdf_parse_t): Remove large `have' bitfield.
- [smooth, raster] Miscellaneous cleanups.
+2018-08-15 Werner Lemberg <wl@gnu.org>
- * src/raster/ftrend1.c (ft_raster1_render): Clean up the exit.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Reduce
- translations and clean up the exit.
- (ft_smooth_render_lcd, ft_smooth_render_lcd): Remove unused `error'.
+ Don't use `trace_' prefix for FT_COMPONENT arguments.
-2017-09-28 Ben Wagner <bungeman@google.com>
+ * include/freetype/internal/ftdebug.h (FT_TRACE_COMP,
+ FT_TRACE_COMP_): New auxiliary macros to add `trace_' prefix.
+ (FT_TRACE): Use `FT_TRACE_COMP'.
- [truetype] Really, really fix #52082.
+ */* (FT_COMPONENT): Updated.
- * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+2018-08-14 Werner Lemberg <wl@gnu.org>
-2017-09-28 Werner Lemberg <wl@gnu.org>
+ Use formatting string in FT_TRACEX calls for non-simple arguments.
- * src/psaux/psintrp.c (cf2_doStems): Fix integer overflow.
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_hstem, cff_op_hintmask, cff_op_hlineto, cff_op_vhcurveto>:
+ Do it.
+
+ * src/psaux/pshints.c (cf2_hintmap_build): Ditto.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+ cf2_cmdVSTEM, cf2_cmdHLINETO, cf2_cmdRRCURVETO, cf2_cmdCALLSUBR,
+ cf2_escHSTEM3, cf2_cmdHINTMASK, cf2_cmdHVCURVETO>: Ditto.
+
+ * src/truetype/ttinterp.c (TT_RunIns): Ditto.
+
+2018-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [bdf] Remove unused fields.
+
+ * src/bdf/bdf.h (bdf_font_t): Remove `nmod', `umod', and `modified',
+ which were set but never used.
+ * src/bdf/bdflib.c (_bdf_parse_{glyphs,properties}, bdf_load_font):
+ Updated accordingly.
+
+2018-08-14 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix another segv in old engine.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3510
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9872
-2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Disallow invalid T1 opcodes in
+ dictionaries.
- * src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak.
+2018-08-14 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix missing error handling.
Reported as
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9865
-2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+ * src/psaux/cffparse.c (cff_parser_run)
+ [CFF_CONFIG_OPTION_OLD_ENGINE]: Don't ignore return value of
+ `parse_charstrings_old'.
- Bitmap metrics presetting [1/2].
+2018-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
- This mainly just extracts the code for presetting the bitmap metrics
- from the monochrome, grayscale, and LCD renderers into a separate
- function.
+ [bdf] Remove unused overflow storage.
- * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): New function that
- calculates prospective bitmap metrics for the given rendering mode.
- * include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
- Declare it.
+ * src/bdf/bdf.h (bdf_glyphlist_t): Remove this type.
+ (bdf_font_t): Remove `overflow' field.
+ * src/bdf/bdflib.c (bdf_free_font): Remove `overflow' freeing.
+
+2018-08-14 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix segv in old engine.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9864
+
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_random> [CFF_CONFIG_OPTION_OLD_ENGINE]: Use top dict's
+ `random' field directly if parsing dictionaries.
+
+2018-08-13 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [bdf] Use unsigned types.
+
+ * src/bdf/bdf.h (bdf_glyph_t): Unsign `encoding'.
+ (bdf_font_t): Unsign `default_char'.
+ * src/bdf/bdfdrivr.h (BDF_encoding_el): Unsign `enc'.
+
+ * src/bdf/bdflib.c (_bdf_add_property, _bdf_parse_glyphs,
+ _bdf_parse_start): Updated accordingly.
+ * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Ditto.
+
+2018-08-13 Werner Lemberg <wl@gnu.org>
+
+ * src/type42/t42parse.c (t42_parse_sfnts): One more format check.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9832
+
+2018-08-11 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c (FT_Matrix_Check): Fix integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9811
+
+2018-08-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Follow specs.
+
+2018-08-10 Ben Wagner <bungeman@google.com>
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Fix memory leak (#54435).
+
+2018-08-10 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Improve tracing.
+
+2018-08-10 Werner Lemberg <wl@gnu.org>
+
+ Fix clang warnings.
+
+ * src/base/ftdebug.c (ft_trace_level_enabled,
+ ft_trace_level_disabled): Add `static' keyword.
+
+2018-08-09 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [raster, smooth] Reinstate bitmap size limits.
- * src/base/ftlcdfil.c (ft_lcd_padding): New helper function that adds
- padding to CBox taking into account pecularities of LCD rendering.
- * include/freetype/ftlcdfil.h (ft_lcd_padding): Declare it.
+ This again moves outline and bitmap size checks one level up.
- * src/raster/ftrend1.c (ft_raster1_render): Reworked to use
- `ft_glyphslot_preset_bitmap'.
+ * src/base/ftoutln.c (FT_Outline_Render): Explicitly reject enormous
+ outlines.
+ * src/raster/ftrend1.c (ft_raster1_render): Reject enormous bitmaps
+ and, therefore, outlines that require them.
* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
- (ft_smooth_render_lcd, ft_smooth_render_lcd): The pixel_mode setting
- is moved to `ft_glyphslot_preset_bitmap'.
-2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+ * src/raster/ftraster.c (ft_black_render): Remove outline size checks.
+ * src/smooth/ftgrays.c (gray_raster_render): Ditto.
+ [STANDALONE]: Remove `FT_Outline_Get_CBox' copy.
- [psaux] Fix compiler warning.
+2018-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing
- code.
+ [pcf] Revert massive unsigning.
-2017-09-27 Werner Lemberg <wl@gnu.org>
+2018-08-08 Werner Lemberg <wl@gnu.org>
- * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
+ [smooth] Improve tracing.
-2017-09-25 Werner Lemberg <wl@gnu.org>
+ * src/smooth/ftgrays.c (gray_convert_glyph_inner): Only use tracing
+ if called the first time.
+ (gray_convert_glyph): Updated.
- [psaux] Fix compiler warnings.
+2018-08-08 Werner Lemberg <wl@gnu.org>
- * src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant
- test.
+ Add internal functions `FT_Trace_Disable' and `FT_Trace_Enable'.
- * src/psaux/psintrp.c (cf2_interpT2CharString)
- <cf2_escCALLOTHERSUBR>: Add casts.
+ It sometimes makes sense to suppress tracing informations, for
+ example, if it outputs identical messages again and again.
- * src/psaux/psobjs.c (ps_decoder_init): Add cast.
+ * include/freetype/internal/ftdebug.h: Make `ft_trace_levels' a
+ pointer.
+ (FT_Trace_Disable, FT_Trace_Enable): New declarations.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/base/ftdebug.c (ft_trace_levels): Rename to...
+ (ft_trace_levels_enabled): ... this.
+ (ft_trace_levels_disabled): New array.
+ (ft_trace_levels): New pointer.
+ (FT_Trace_Disable, FT_Trace_Enable): Implement.
+ (ft_debug_init): Updated.
- [psaux] Minor fixes.
+2018-08-08 Werner Lemberg <wl@gnu.org>
- * include/freetype/internal/psaux.h, src/psaux/psobjs.{c,h}:
- Rearrange `ps_builder_init' arguments to conventional order.
+ Debugging improvements.
- * src/psaux/psft.c (cf2_decoder_parse_charstrings): Add a check and
- notice for `SubFont' in Type 1 mode.
+ * src/base/ftobjs.c (pixel_modes): Move this array to top level
+ from ...
+ (FT_Load_Glyph): ... here.
+ (FT_Render_Glyph_Internal): Use `width' x `height' in trace message.
+ Use `pixel_modes'.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
- [psaux] Move `psdecode' into `psobjs'.
+ [pcf] Massive unsigning (part 2).
- As the former only contains a single procedure, move it into
- `psobjs' for simplicity. Also change the parameter order to the
- conventional one.
+ Treat all size related properties as unsigned values.
- * src/psaux/psdecode.c (ps_decoder_init): Moved to...
- * src/psaux/psobjs.c: ...Here.
- * src/psaux/psdecode.h, src/psaux/psobjs.h: Ditto.
+ * src/pcf/pcf.h (PCF_ParsePropertyRec): Use unsigned `name' and
+ `value'.
+ * src/pcf/pcfread.c (pcf_get_properties, pcf_load_font): Updated
+ parsing code and handling of AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE,
+ RESOLUTION_X and RESOLUTION_Y.
- * include/freetype/internal/psaux.h (PSAux_ServiceRec): Update
- `ps_decoder_init' function signature.
+2018-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/cff/cffgload.c, src/cid/cidgload.c, src/type1/t1gload.c:
- Update calls.
+ [pcf] Massive unsigning (part 1).
- * src/psaux/psaux.c, src/psaux/psauxmod.c: Update includes.
+ Unofficial specifications hesitate to use unsigned 32-bit integers.
+ Negative values caused a lot of trouble in the past and it is safer
+ and easier to treat some properties as unsigned.
- * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRV_SRC):
- Update file references.
+ * src/pcf/pcf.h (PCF_AccelRec): Use unsigned values for `fontAscent',
+ `fontDescent', and `maxOverlap'.
+ * src/pcf/pcfread.c (pcf_load_font, pcf_get_accel): Updated.
+ * src/pcf/pcfdrivr.c (PCF_Glyph_Load, PCF_Size_Select,
+ PCF_Size_Request): Updated.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-08-07 Alexei Podtelezhnikov <apodtele@gmail.com>
- [psaux] Fix Type 1 hinting.
+ * src/pcf/pcfread.c (pcf_get_bitmaps): Unsign `offsets' and
+ `bitmapSizes'.
- Type 1 hinting breaks sometimes when mid-charstring hints should
- have been in the initial hintmap. This fix adds a preprocessing
- pass that reads all hints and builds the correct initial hintmap
- first, before proceeding to build the glyph outline.
+2018-08-06 Werner Lemberg <wl@gnu.org>
- * src/psaux/psintrp.c (cf2_interpT2CharString): New
- `initial_map_ready' boolean flag.
- Ignore outline commands and hint changes on first pass.
- <cf2_cmdENDCHAR>: Add section to build hintmap and rewind.
+ * devel/ftoption.h: Synchronize with main `ftoption.h'.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-08-06 Alexei Podtelezhnikov <apodtele@gmail.com>
- [psaux] Add tracing for hints.
+ [pcf] Use unsigned types.
- * src/psaux/pshints.c (cf2_hintmap_dump): New function.
- (cf2_hintmap_insertHint): Trace incoming and inserted hints.
- (cf2_hintmap_build): Dump hintmap before and after hint adjustment.
+ * src/pcf/pcf.h (PCF_Encoding): Use unsigned `enc'.
+ * src/pcf/pcfdrivr.c (pcf_cmap_char_{index,next}): Ditto.
+ * src/pcf/pcfread.c (pcf_get_encodings): Use unsigned types.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-08-05 Werner Lemberg <wl@gnu.org>
- [psaux] Minor fixes.
+ * src/truetype/ttgload.c (compute_glyph_metrics): Fix overflow.
- * src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop
- results.
- s/font->decoder/decoder/ where necessary.
- <cf2_cmdHSTEM, cf2_cmdVSTEM, cf2_escHSTEM3, cf2_escVSTEM3>: Use
- offset parameter in `cf2_doStems' instead of doing correction for
- left-sidebearing.
+ Reported as
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ https://bugs.chromium.org/p/chromium/issues/detail?id=777151
- [cid] Use the new engine.
+2018-08-04 Werner Lemberg <wl@gnu.org>
- * src/cid/cidgload.c: Update includes.
- (cid_load_glyph, cid_slot_load_glyph): Implement changes to glyph
- loading code as with `type1' module.
+ * src/truetype/ttinterp.c (opcode_name): Fix typos.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-08-04 Werner Lemberg <wl@gnu.org>
- [cid] Add Adobe engine configuration.
+ Fix clang warnings.
- This is similar to what was done in the `type1' module.
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Fix type of
+ `orientation'.
- * src/cid/cidriver.c (t1cid_driver_class): Update declaration.
- * src/cid/cidobjs.c: Include FT_TYPE1_DRIVER_H.
- (cid_driver_init): Update code.
+ * src/gxvalid/gxvcommn.c (gx_lookup_value_read): Fix signature.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/pcf/pcfread.c (pcf_get_encodings): Fix type of some variables.
+ Add cast.
- [psaux] Change subfont synthesis for CID fonts.
+ * src/type1/t1load.c (parse_weight_vector): Fix cast.
- Change `t1_make_subfont' to take in the Private dict record as an
- argument. This is because Type 1 and CID font records in FreeType
- have this in different places.
+2018-07-31 Werner Lemberg <wl@gnu.org>
- * src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
- `FT_Face' so that CID is also accepted.
- Take `PS_Private' as an argument and let caller figure out where the
- Private dict actually is.
- Update references.
+ * src/cid/cidtoken.h: Handle `XUID' keyword.
- * include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
- declaration.
+2018-07-31 Werner Lemberg <wl@gnu.org>
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
- call.
+ [cid] Trace PostScript dictionaries.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/cid/cidload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ (cid_load_keyword, cid_parse_font_matrix, parse_fd_array,
+ parse_expansion_factor, cid_parse_dict): Add tracing calls.
+ (parse_font_name): New function to trace `/FontName' keywords in
+ /FDArray dict.
+ (cid_field_records): Register `parse_font_name'.
- [type1] Switch to Adobe engine.
+2018-07-30 Werner Lemberg <wl@gnu.org>
- * src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine.
+ [cff] Fix typo.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ Reported as
- [psaux] Extend Adobe interpreter (seac).
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9409
- This concludes the changes needed to add Type 1 support.
+ * src/cff/cffdrivr.c (cff_get_cid_from_glyph_index): Fix boundary
+ check.
- * src/psaux/psintrp.c: Update includes.
- (cf2_interpT2CharString) <cf2_escSEAC>: Implement this similarly to
- implied seac for CFF.
+2018-07-29 Werner Lemberg <wl@gnu.org>
- * src/psaux/t1decode.c (t1_lookup_glyph_by_stdcharcode_ps): New
- function to look up the glyph index.
+ * src/pcf/pcfread.c (pcf_get_encodings): Another thinko.
- * src/psaux/psft.c (cf2_getT1SeacComponent,
- cf2_freeT1SeacComponent): New functions to get the charstrings for
- seac components.
+ Reported as
- * src/psaux/t1decode.h, src/psaux/psft.h: Update declarations.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9608
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-07-28 Alexei Podtelezhnikov <apodtele@gmail.com>
- [psaux] Extend Adobe interpreter (flex in callothersubr).
+ [smooth] Fix Harmony memory management.
- * src/psaux/psintrp.c (cf2_interpT2CharString)
- <cf2_escCALLOTHERSUBR>: Fix Flex feature handling (OtherSubrs 0, 1,
- 2).
- <cf2_cmdRMOVETO>: Do not actually move the `glyphPath' while doing
- flex. This is to avoid closing the current contour.
+ Reported as
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9501
- [psaux] Extend Adobe interpreter (callothersubr).
+ * src/smooth/ftgrays.c (ft_smooth_render_generic): Restore buffer
+ after each rendering in case of failure.
- * src/psaux/psintrp.c (cf2_interpT2CharString)
- <cf2_escCALLOTHERSUBR>: Copy code from
- `t1_decoder_parse_charstrings' (in `t1decode.c').
- OtherSubr 3 (change hints) should reset the hintmask, so that the
- new hints are applied.
- Fix function calls and stack access.
+2018-07-28 Werner Lemberg <wl@gnu.org>
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ [type1] Avoid segfaults with `FT_Get_PS_Font_Value'.
- [psaux] Extend Adobe interpreter (pop).
+ Reported as
- * src/psaux/psintrp.c (cf2_interpT2CharString): Change how unhandled
- OtherSubr results are stored. Implement the PostScript stack using
- an array.
- <cf2_escPOP>: Ensure that the stack is not cleared after getting
- `OtherSubr' results.
- Fix stack access.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9610
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/type1/t1driver.c (t1_ps_get_font_value): Protect against NULL.
- [psaux] Extend Adobe interpreter (callsubr).
+2018-07-27 Werner Lemberg <wl@gnu.org>
- * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
- Type 1 mode.
+ [truetype] Make `TT_Set_MM_Blend' idempotent (#54388).
- * src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode.
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Correctly set
+ `face->doblend' if the current call to the function yields the same
+ blend coordinates as the previous call.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-07-27 Werner Lemberg <wl@gnu.org>
- [psaux] Extend Adobe interpreter (div, four-byte numbers).
+ [psaux, type1]: More tracing improvements.
- * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escDIV>: Add
- Type 1 mode. Type 1 requires large integers to be followed by
- `div'; cf. `Adobe Type 1 Font Format', section 6.2.
- <op == 255>: Push Type 1 four-byte numbers as `Int' always. This is
- to ensure `div' and `callsubr' get values they can use.
+ * src/psaux/psintrp.c (cf2_interpT2CharString): Trace skipped
+ outline commands.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/psaux/t1decode.c (t1_decoder_parse_charstring): Fix
+ missing case.
+ (t1_decoder_parse_metrics): Make tracing output more compact.
- [psaux] Extend Adobe interpreter (hints).
+ * src/type1/t1gload.c (T1_Compute_Max_Advance): Be less verbose.
+ (T1_Get_Advances): Add tracing.
- * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
- cf2_cmdVSTEM>: Add correction for left sidebearing in Type 1 mode.
- Allow adding hints mid-charstring.
- <cf2_escVSTEM3, cf2_escHSTEM3>: Translate into equivalent commands
- for three normal stem hints. This requires some recalculation of
- stem positions.
- Correction for left sidebearing.
+2018-07-25 Werner Lemberg <wl@gnu.org>
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ [psaux, type1] Trace PostScript dictionaries and other things.
- [psaux] Extend Adobe interpreter (hsbw, sbw).
+ The tracing of /Encoding, /Subrs, and /Charstrings is rudimentary
+ right now.
- * src/psaux/psintrp.c (cf2_doStems): `hsbw' or `sbw' must be the
- first operation in a Type 1 charstring.
- (cf2_interpT2CharString): Remove unused variables.
- <cf2_cmdHMOVETO, cf2_cmdVMOVETO, cf2_cmdRMOVETO>: `hsbw' or `sbw'
- must be the first operation in a Type 1 charstring.
- <cf2_cmdHSBW, cf2_escSBW>: Fix data access and add correction for
- left sidebearing.
+ * src/psaux/psobjs.c (ps_parser_load_field,
+ ps_parser_load_field_table): Add tracing calls.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Make tracing
+ output more compact.
- [psaux] Extend Adobe interpreter (setcurrentpoint).
+ * src/type1/t1gload.c (T1_Compute_Max_Advance, T1_Get_Advances): Add
+ tracing messages.
- * src/psaux/psintrp.c (cf2_interpT2CharString)
- <cf2_escSETCURRENTPT>: Fix stack access.
+ * src/type1/t1load.c (parse_blend_axis_types,
+ parse_blend_design_positions, parse_blend_design_map,
+ parse_weight_vector, t1_load_keyword, t1_parse_font_matrix,
+ parse_encoding, parse_subrs, parse_charstrings, T1_Open_Face): Add
+ tracing calls.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/type1/t1objs.c (T1_Face_Init): Add tracing call.
- [psaux] Extend Adobe interpreter (closepath).
+ * src/sfnt/sfobjs.c (sfnt_init_face): Make tracing message more
+ verbose.
- * src/psaux/psintrp.c (cf2_interpT2CharString) <c2f_cmdCLOSEPATH>:
- Use the right builder function. We can use the `haveWidth' boolean
- already present, instead of implementing `parse_state'.
+2018-07-25 Werner Lemberg <wl@gnu.org>
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ Fix minor ASAN run-time warnings.
- [psaux] Add Type 1 operations to Adobe CFF interpreter.
+ * src/base/ftutil.c (ft_mem_alloc, ft_mem_realloc): Only call
+ `FT_MEM_ZERO' if we actually have a buffer.
+ (ft_mem_dup): Only call `ft_memcpy' if we actually have a buffer.
- The following Type 1 specific ops have been added (copied from
- `t1decode'):
+2018-07-24 Alexei Podtelezhnikov <apodtele@gmail.com>
- closepath
- vstem3
- hstem3
- seac
- sbw
- callothersubr
- pop
- setcurrentpoint
- hsbw
+ [build] Fortify dllexport/dllimport attributes (#53969,#54330).
- The following require a Type 1 mode, because of differences in
- specification:
+ We no longer use predefined _DLL, which can be defined for static
+ builds too with /MD. We use DLL_EXPORT and DLL_IMPORT instead,
+ following libtool convention.
- hstem
- vstem
- vmoveto
- callsubr
- div
- rmoveto
- hmoveto
- Numbers
+ * CMakeLists.txt [WIN32], builds/windows/vc2010/freetype.vcxproj:
+ Define DLL_EXPORT manually.
- The subsequent commits will implement these changes and adapt
- accesses of data and objects to the new interpreter.
+ * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h, builds/windows/vc2010/index.html,
+ src/base/ftver.rc: /_DLL/d, s/FT2_DLLIMPORT/DLL_IMPORT/.
- NOTE: Will not compile in the meantime!
+2018-07-24 Werner Lemberg <wl@gnu.org>
- * src/psaux/psintrp.c: Add opcodes to enum.
- (cf2_interpT2CharString): Copy relevant code over from
- `t1_decoder_parse_charstrings' (in `t1decode.c').
+ [type1] Check relationship between number of axes and designs.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ For Multiple Masters fonts we don't support intermediate designs;
+ this implies that
- [type1] Fixes for rendering.
+ number_of_designs == 2 ^^ number_of_axes
- The Type 1 advance width calculation passes null for glyph slot,
- etc, which can cause null pointer access in the new interpreter.
- Fall back to the old one for now.
+ Reported as
- Fix the large glyph retry code and ensure hinting and scaling flags
- are set properly.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9557
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add a
- check for metrics_only.
- Set the `force_scaling' flag.
- (T1_Parse_Glyph): Updated.
- (T1_Load_Glyph): Add `hinting' and `scaled' flags.
+ * src/type1/t1load.c (T1_Open_Face): Ensure above constraint.
+ (T1_Get_MM_Var): Remove now redundant test.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-07-24 Hin-Tak Leung <htl10@users.sourceforge.net>
- [psaux] Add missing objects (2/2).
+ [truetype] Match ttdebug's naming of instruction mnemonics.
- Synthesize a `SubFont' object for Type 1 fonts. This is used in the
- interpreter to access Private dict data, which are stored in
- different places for Type 1 and CFF. This allows the same data to
- be used in either mode.
+ * src/truetype/ttinterp.c: The form used in ttdebug,
+ "MDRP[G,B,W,?]", etc., is slightly more readable than
+ "MDRP[00,01,02,03]".
- * src/psaux/psobjs.c (t1_make_subfont): New procedure to copy
- required values to a dummy `CFF_SubFont' object. This is similar to
- `cff_make_private_dict'.
- * src/psaux/psobjs.h: Add the new declaration.
+2018-07-24 Werner Lemberg <wl@gnu.org>
- * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Ditto.
- Add this to the PSAux Service for future use with CID fonts.
+ * src/pcf/pcfread.c (pcf_get_encodings): Thinko.
- * src/type1/t1gload.c: Include FT_INTERNAL_CFF_TYPES_H.
- (T1_Parse_Glyph_And_Get_Char_String): Add the call.
+ Reported as
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9561
- [psaux] Add missing objects for Type 1 (1/2).
+2018-07-22 Werner Lemberg <wl@gnu.org>
- Move `CF2_Font' instance to `PS_Decoder'. This is the context for
- the interpreter and since it is currently stored in `CFF_Font', is
- unavailable in Type 1 mode.
+ * src/pcf/pcfread.c (pcf_get_encodings): Check index of defaultChar.
- * include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): New
- `cf2_instance' field.
+ Reported as
- * src/psaux/psdecode.c (ps_decoder_init): Copy `cf2_instance' to
- `PS_Decoder'.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9527
- * src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
+2018-07-22 Werner Lemberg <wl@gnu.org>
- * src/psaux/psft.c (cf2_decoder_parse_charstrings): Update accesses.
+ * src/pcf/pcfread.c (pcf_load_font): Fix number of glyphs.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ This is an oversight of the module change 2018-07-21.
- Allow `type1' module to use the Adobe engine.
+ Reported as
- Add the callback and some conditionals to switch between the two
- engines.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9524
- * include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Change
- function declarations.
- * src/psaux/psauxmod.c (T1_Decoder_FuncsRec): Register the
- callbacks.
+2018-07-22 Werner Lemberg <wl@gnu.org>
- * src/psaux/psobjs.c (ps_builder_add_point): Add conditionals for
- number conversion.
+ [cid] Sanitize `BlueShift' and `BlueFuzz'.
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add code
- to choose which renderer to use.
+ This code is taken from the type1 module.
- * src/cid/cidgload.c (cid_load_glyph): Update call.
- * src/base/ftobjs.c, src/psaux/psobjs.c, src/type1/t1gload.c: Update
- includes.
+ Reported as
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9510
- [type1] Add Adobe engine configuration.
+ * src/cid/cidload.c (parse_fd_array): Set some private dict default
+ values.
+ (cid_face_open): Do the sanitizing.
+ Fix some tracing messages.
- Use the previously changed PS_Driver in type1 module to store
- hinting engine configuration.
+2018-07-21 Werner Lemberg <wl@gnu.org>
- * include/freetype/ftt1drv.h: New file.
- Duplicate and rename config options from CFF.
- * include/freetype/config/ftheader.h (FT_TYPE1_DRIVER_H): New macro.
+ [pcf] Fix handling of the undefined glyph.
- * src/type1/t1driver.c (t1_driver_class): Update declaration.
- * src/type1/t1objs.c: Include FT_TYPE1_DRIVER_H.
- (T1_Driver_Init): Update code.
+ This change makes the driver use the `defaultChar' property of PCF
+ files.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/pcf/pcf.h (PCF_FaceRec): Change type of `defaultChar' to
+ unsigned.
- [cff] Move and rename `CFF_Driver'.
+ * src/pcf/pcfread.c (pcf_get_encodings): Read `defaultChar' as
+ unsigned.
+ Validate `defaultChar'.
+ If `defaultChar' doesn't point to glyph index zero, swap glyphs with
+ index zero and index `defaultChar' and adjust the encodings
+ accordingly.
- This is so that we can use the same hinting engine parameters for
- Type 1.
+ * src/pcf/pcfdrivr.c (pcf_cmap_char_index, pcf_cmap_char_next,
+ PCF_Glyph_Load): Undo change from 2002-06-16 which always enforced
+ the first character in the font to be the default character.
- * include/freetype/internal/cffotypes.h (CFF_Driver): Rename and
- move to...
- * include/freetype/internal/psaux.h (PS_Driver): ...here.
+2018-07-20 Armin Hasitzka <prince.cherusker@gmail.com>
- * src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffload.c,
- src/cff/cffobjs.c, src/cff/cffobjs.h, src/psaux/psft.c,
- src/psaux/psobjs.c: Update references.
+ Move the legacy fuzz target to the `freetype-testing' repository.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ It can now be found at
- [psaux, type1] Reorganize object fields.
+ https://github.com/freetype/freetype2-testing/tree/master/fuzzing/src/legacy
- Make some fields more generic, so that we can access them the same
- way regardless of Type 1 or CFF.
+ * src/tools/ftfuzzer: Remove this folder and its contents from the
+ repository.
- * include/freetype/internal/psaux.h (PS_Builder): Change `TT_Face'
- to `FT_Face'.
- Remove unused fields.
+2018-07-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Avoid left-shift of negative numbers (#54322).
+
+ * src/cff/cffgload.c (cff_slot_load): Use multiplication.
+
+2018-07-17 Werner Lemberg <wl@gnu.org>
+
+ Allow FT_ENCODING_NONE for `FT_Select_Charmap'.
+
+ This is a valid encoding tag for BDF, PCF, and Windows FNT, and
+ there is no reason to disallow it for these formats.
+
+ * src/base/ftobjs.c (FT_Select_Charmap): Implement it.
+
+2018-07-17 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_get_encodings): Trace `defaultChar'.
+
+2018-07-16 Armin Hasitzka <prince.cherusker@gmail.com>
+
+ * include/freetype/internal/ftcalc.h: Add macros for handling
+ harmless over-/underflowing `FT_Int' values.
+
+ * src/sfnt/sfdriver.c (fixed2float): Fix negation of
+ `(int)(-2147483648)'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9423
+
+2018-07-16 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Fix off-by-one error.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9412
+
+2018-07-12 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Init `cbox'.
+
+ Taken from patch #9667, written by Steve Langasek
+ <vorlon@debian.org>.
+
+ This fixes a build failure (most probably a bug in gcc) on ppc64el
+ when building with -O3.
+
+2018-07-05 Werner Lemberg <wl@gnu.org>
+
+ Fix typo (#54238).
+
+ * src/base/ftcolor.c (FT_Palette_Set_Foreground_Color)
+ [!TT_CONFIG_OPTION_COLOR_LAYERS]: Add return value.
+
+2018-07-05 Werner Lemberg <wl@gnu.org>
+
+ Adjust table size comparisons (#54242).
+
+ * src/sfnt/ttcpal.c (tt_face_load_cpal): Implement it.
+
+2018-07-05 Werner Lemberg <wl@gnu.org>
+
+ Fix more 32bit issues (#54208).
+
+ * src/cff/cffload.c (cff_blend_build_vector): Convert assertion into
+ run-time error.
+
+ * src/truetype/ttgxvar.c (ft_var_to_normalized): Protect against
+ numeric overflow.
+
+2018-07-04 Werner Lemberg <wl@gnu.org>
+
+ Fix 32bit build warnings (#54239).
+
+ * src/base/ftbitmap.c (FT_Bitmap_Blend): Add casts to avoid signed
+ vs. unsigned comparisons.
+
+ * srb/sfnt/ttcolr.c (tt_face_get_colr_layer): Ditto.
+
+2018-07-02 Jeff Carey <Jeff.Carey@monotype.com>
+
+ * src/psnames/psmodule.c (ps_unicodes_init): Fix alloc debugging.
+
+2018-07-02 Werner Lemberg <wl@gnu.org>
+
+ s/palette_types/palette_flags/.
+
+ Suggested by Behdad.
+
+2018-07-02 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_Get_Color_Glyph_Layer' return FT_Bool.
+
+ * include/freetype/freetype.h, src/base/ftobjs.c
+ (FT_Get_Color_Glyph_Layer, FT_Render_Glyph_Internal): Updated.
+
+ * include/freetype/internal/sfnt.h (TT_Get_Colr_Layer_Func),
+ src/sfnt/ttcolr.h, src/sfnt/ttcolr.c (tt_face_get_colr_layer):
+ Updated.
+
+2018-07-01 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Get_Color_Glyph_Layer): Guard SFNT function.
+
+ Reported by Behdad.
+
+2018-06-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/fttrigon.c (FT_Tan): Improve accuracy.
+ (FT_Vector_Rotate): Simplify.
+
+2018-06-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftobjs.c (FT_Set_Charmap): Robustify.
+
+2018-06-25 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Add initializers.
+ Fix typo in `goto' destination.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9071
+
+2018-06-25 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Add initializers.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9070
+
+2018-06-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Increase precision while applying VF deltas.
+
+ It turned out that we incorrectly round CVT and glyph point deltas
+ before accumulation, leading to severe positioning errors if there
+ are many delta values to sum up.
+
+ Problem reported by Akiem Helmling <akiem@underware.nl> and analyzed
+ by Behdad.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackeddelta): Return deltas in
+ 16.16 format.
+ (tt_face_var_cvt): Collect deltas in `cvt_deltas', which is a 16.16
+ format array, and add the accumulated values to the CVT at the end
+ of the function.
+ (TT_Vary_Apply_Glyph_Deltas): Store data in `points_org' and
+ `points_out' in 16.16 format.
+ Collect deltas in `point_deltas_x' and `point_deltas_y', which are
+ 16.16 format arrays, and add the accumulated values to the glyph
+ coordinates at the end of the function.
+
+2018-06-24 Werner Lemberg <wl@gnu.org>
+
+ New base function `FT_Matrix_Check' (#54019).
+
+ * src/base/ftcalc.c (FT_Matrix_Check): New base function to properly
+ reject degenerate font matrices.
+
+ * include/freetype/internal/ftcalc.h: Updated.
+
+ * src/cff/cffparse.c (cff_parse_font_matrix), src/cid/cidload.c
+ (cid_parse_font_matrix), src/type1/t1load.c (t1_parse_font_matrix),
+ src/type42/t42parse.c (t42_parse_font_matrix): Use
+ `FT_Matrix_Check'.
+
+2018-06-23 Werner Lemberg <wl@gnu.org>
+
+ Fix typo.
+
+ Reported by Behdad.
+
+ * src/base/ftcolor.c (FT_Palette_Data_Get)
+ [!TT_CONFIG_OPTION_COLOR_LAYERS]: s/apalette/apalette_data/.
+
+2018-06-21 Werner Lemberg <wl@gnu.org>
+
+ s/FT_PALETTE_USABLE_WITH_/FT_PALETTE_FOR_/.
+
+ * include/freetype/ftcolor.h, include/freetype/internal/sfnt.h,
+ src/sfnt/ttcolr.c: Do it.
+
+2018-06-19 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix CPAL heap buffer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8968
+
+ * src/sfnt/ttcpal.c (tt_face_load_cpal): Guard CPAL version 1
+ offsets.
+
+2018-06-19 Werner Lemberg <wl@gnu.org>
+
+ Doh. Don't use CPAL or COLR data if tables are missing.
+
+ Reported by Alexei.
+
+ * src/sfnt/ttcolr.c (tt_face_get_colr_layer): Return immediately if
+ `colr' is NULL.
+
+ * src/sfnt/ttcpal.c (tt_face_palette_set): Return immediately, if
+ `cpal' is NULL.
+
+2018-06-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Introduce `FT_New_Glyph'.
+
+ This function facilitates access to full capabilities of FreeType
+ rendering engine for custom glyphs. This can be quite useful for
+ consistent rendering of mathematical and chemical formulas, e.g.
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=757078
+
+ * include/freetype/ftglyph.h, src/base/ftglyph.c (FT_New_Glyph): New
+ function.
+
+2018-06-17 Armin Hasitzka <prince.cherusker@gmail.com>
+
+ [bdf] Fix underflow of an unsigned value.
+
+ bdflib.c:1562 could be reached with `font->glyphs_used == 0'. That
+ caused an underflow of the unsigned value which results in undefined
+ behaviour.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Bail out earlier than before
+ if the `ENCODING' keyword cannot be found.
- * src/psaux/psft.c: Update all accesses of `PS_Builder.face'.
- Add some asserts to guard against casting `T1_Face' as `TT_Face'.
+2018-06-17 Werner Lemberg <wl@gnu.org>
- * src/type1/t1objs.h (T1_GlyphSlot): Reorder fields to follow
- `CFF_GlyphSlot', so that we can pretend they are the same in the
- interpreter.
+ [base] Add tracing for `FT_Bitmap_Blend'.
- * src/psaux/psobjs.c (ps_builder_init, ps_builder_add_point):
- Updated with above changes.
+ * include/freetype/internal/fttrace.h (trace_bitmap): New
+ enumeration.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+ * src/base/ftbitmap.c (FT_COMPONENT): Define.
+ (FT_Bitmap_Blend): Add `FT_TRACE5' calls.
- [psaux] Prepare for Type 1 mode.
+2018-06-17 Werner Lemberg <wl@gnu.org>
- Add some checks for Type 1 data passing through.
+ s/trace_bitmap/trace_checksum/.
- * src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
- * src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
- code which is not applicable for Type 1.
+ * include/freetype/internal/fttrace.h: s/bitmap/checksum/.
- * src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
- `decoder->cff' in Type 1 mode.
- Copy `is_t1' flag to `CF2_Font'.
+ * src/base/ftobjs.c (FT_COMPONENT): s/trace_bitmap/trace_checksum/.
+ Adjust code.
-2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+2018-06-16 Werner Lemberg <wl@gnu.org>
- [psaux, cff] Use the new objects.
+ [sfnt] Fix color glyph layer loading.
- * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Fix
- switching between new and old engines.
+ * src/sfnt/ttcolr.c (Colr): Add `table_size' field.
+ (tt_face_load_colr): Set it.
+ (tt_face_get_colr_layer): Check pointer limit for layer entries.
- * src/cff/cffgload.c, src/cff/cffparse.c: Update calls.
+2018-06-16 Werner Lemberg <wl@gnu.org>
- * src/psaux/psblues.c, src/psaux/psfont.c, src/psaux/psfont.h,
- src/psaux/psft.c, src/psaux/psft.h, src/psaux/psintrp.c: Update all
- to use new objects.
+ [sfnt] Fix color palette loading.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8933
+
+ * src/sfnt/ttcpal.c (Cpal): Add `table_size' field.
+ (tt_face_load_cpal): Set it.
+ (tt_face_palette_set): Check pointer limit for color entries.
+
+2018-06-16 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Blend): Avoid integer overflow.
+
+2018-06-16 Werner Lemberg <wl@gnu.org>
+
+ Add `FT_Bitmap_Blend' API.
+
+ Still missing: Support for negative bitmap pitch and subpixel offset
+ of source bitmap.
+
+ * include/freetype/ftbitmap.h, src/base/ftbitmap.c
+ (FT_Bitmap_Blend): New function.
+
+2018-06-14 Werner Lemberg <wl@gnu.org>
+
+ Replace `FT_Get_GlyphLayers' with `FT_Get_Color_Glyph_Layer'.
+
+ This avoids any additional allocation of COLR related structures in
+ a glyph slot.
+
+ * include/freetype/freetype.h (FT_Glyph_Layer, FT_Glyph_LayerRec,
+ FT_Get_GlyphLayers): Removed.
+
+ * include/freetype/internal/ftobjs.h (FT_Colr_InternalRec): Removed.
+ (FT_Slot_InternalRec): Remove `color_layers'.
+
+ * include/freetype/internal/sfnt.h (TT_Load_Colr_Layer_Func):
+ Removed.
+ (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): Remove
+ `load_colr_layer'.
- [psaux] Objects for new interpreter (part 2).
+ * src/base/ftobjs.c (ft_glyph_slot_done): Updated.
+ (FT_Render_Glyph_Internal): Use `FT_Get_Color_Glyph_Layer'.
+ (FT_Get_GlyphLayers): Removed.
- Make the new objects copy over values. They are essentially wrapper
- types for the different decoders/builders.
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
- * include/freetype/internal/psaux.h: Update declarations.
- (PS_Builder): Add `is_t1' flag.
- (PS_Decoder_{Get,Free}_Glyph_Callback): Renamed to...
- (CFF_Decoder_{Get,Free}_Glyph_Callback: ... this.
- (PS_Decoder): Updated.
- Add `t1_parse_callback' member.
- (PSAux_ServiceRec): Add `ps_decoder_init' member.
+ * src/sfnt/ttcolr.c (tt_face_load_colr_layers): Removed.
+ * src/sfnt/ttcolr.h: Updated.
- * src/psaux/psdecode.h, src/psaux/psobjs.h: Update declarations.
+ * src/truetype/ttgload.c (TT_Load_Glyph): Updated.
- * src/psaux/psdecode.c, src/psaux/psobjs.c: Implement copy with two
- modes.
+2018-06-14 Werner Lemberg <wl@gnu.org>
- * src/psaux/psauxmod.c: Add builder and decoder functions to `PSAux'
- service.
+ Provide iterative API to access `COLR' data.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ This solution doesn't store any data in an `FT_GlyphSlot' object.
- [psaux] Add objects for new interpreter.
+ * include/freetype/freetype.h (FT_LayerIterator): New structure.
+ (FT_Get_Color_Glyph_Layer): New function.
- Introduce `PS_Decoder' and `PS_Builder' which include all fields
- from either Type 1 or CFF decoders/builders.
+ * include/freetype/internal/sfnt.h (TT_Get_Colr_Layer_Func): New
+ function type.
+ (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): Add it.
- * include/freetype/internal/psaux.h (PS_Builder, PS_Decoder): New
- structs.
+ * src/base/ftobjs.c (FT_Get_Color_Glyph_Layer): Implement it.
+
+ * src/sfnt/ttcolr.c (tt_face_get_colr_layer): New function.
+ * src/sfnt/ttcolr.h: Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
+
+2018-06-14 Werner Lemberg <wl@gnu.org>
+
+ Add glyph index and glyph load flags to glyph slot.
+
+ * include/freetype/freetype.h (FT_GlyphSlotRec): Rename unused
+ `reserved' field to `glyph_index'.
+
+ * include/freetype/internal/ftobjs.h (FT_Slot_InternalRec): Add
+ `load_flags' field.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Set new fields.
+
+2018-06-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Move `CPAL' stuff into separate files.
+
+ * src/sfnt/sfdriver.c: Include `ttcpal.h'.
+ * src/sfnt/sfnt.c: Include `ttcpal.c'.
+
+ * src/sfnt/ttcolr.c, src/sfnt/ttcolr.h: Move CPAL stuff to ...
+ * src/sfnt/ttcpal.c, src/sfnt/ttcpal.c: ... these new files.
+
+ * src/sfnt/Jamfile (_sources), src/sfnt/rules.mk (SFNT_DRV_SRC):
+ Updated.
+
+ * include/freetype/internal/fttrace.h: Add support for `colr' and
+ `cpal'.
+ Sort entries.
- * src/psaux/psobjs.c, src/psaux/psobjs.h: Add `PS_Builder'
+2018-06-13 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Separate `CPAL' and `COLR' table handling.
+
+ Later on we want to support the `SVG' table also, which needs `CPAL'
+ (but not `COLR').
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface): Add `load_cpal'
+ and `free_cpal' fields.
+ (FT_DEFINE_SFNT_INTERFACE): Updated.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Replace
+ `colr_and_cpal' fields with `cpal' and `colr'.
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face, sfnt_done_face): Updated.
+
+ * src/sfnt/ttcolr.c (Colr, Cpal): Add `table' field.
+ (ColrCpal): Removed.
+ (tt_face_load_colr): Split off CPAL handling into...
+ (tt_face_load_cpal): ... this new function.
+ (tt_face_free_colr): Split off CPAL handling into...
+ (tt_face_free_cpal): ... this new function.
+ (tt_face_load_colr_layers, tt_face_palette_set): Updated.
+
+ * src/sfnt/ttcolr.h: Updated.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Updated.
+
+2018-06-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix `sizeof' thinko.
+
+ * src/sfnt/ttcolr.c (tt_face_load_colr, tt_face_palette_set): Don't
+ use `sizeof' for computing array limit.
+
+2018-06-12 Werner Lemberg <wl@gnu.org>
+
+ Finish CPAL/COLR support (4/4).
+
+ * src/sfnt/ttcolr.c (tt_face_find_color): Removed.
+ (tt_face_colr_blend_layer): Use `face->palette' instead of calling
+ `tt_face_find_color'.
+ Use and set text foreground color.
+
+2018-06-12 Werner Lemberg <wl@gnu.org>
+
+ Finish CPAL/COLR support (3/4).
+
+ * src/base/ftcolor.c: Include FT_INTERNAL_SFNT_H.
+ (FT_Palette_Select, FT_Palette_Set_Foreground_Color): Implement
functions.
- * src/psaux/psdecode.c, src/psaux/psdecode.h: New files to hold
- `PS_Decoder' initialization functions.
+2018-06-12 Werner Lemberg <wl@gnu.org>
+
+ Finish CPAL/COLR support (2/4).
+
+ * src/sfnt/ttcolr.c (tt_face_palette_set): New function.
+ (tt_face_load_colr): Allocate `face->palette' and call
+ `tt_face_palette_set'.
+ Adjust return error code in case of error.
+
+ * src/sfnt/ttcolr.h: Updated.
+
+ * include/freetype/internal/sfnt.h (TT_Set_Palette_Func): New
+ function type.
+ (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): Add it.
- * src/psaux/psaux.c, src/psaux/Jamfile (_sources),
- src/psaux/rules.mk (PSAUX_DRV_SRC): Updated.
+ * src/sfnt/sfdriver.c (sfnt_interface), src/sfnt/sfobjs.c
+ (sfnt_done_face): Updated.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+2018-06-12 Werner Lemberg <wl@gnu.org>
- [psaux] Rename files.
+ Finish CPAL/COLR support (1/4).
- Replace the `cf2' file name prefix with `ps' as the Adobe engine
- will be used for both PostScript Types 1 and 2 (CFF) instead of just
- CFF.
+ * include/freetype/internal/tttypes.h (TT_FaceRec): New fields
+ `palette_index', `palette', `have_foreground_color' and
+ `foreground_color'.
- s/cf2/ps/ for all following.
+2018-06-12 Werner Lemberg <wl@gnu.org>
- * src/psaux/cf2*: Rename files.
- * src/psaux/*: Update includes.
+ [sfnt] Minor.
- * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRC_SRC,
- PSAUX_DRV_H): Update file references.
+ * src/sfnt/ttcolr.c (tt_face_load_colr_layers):
+ s/palette_index/palette_entry_index/ for consistency.
+ Adjust return error code in case of error.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+2018-06-11 Alexei Podtelezhnikov <apodtele@gmail.com>
- [psaux] Minor fix.
+ [raster] Clean up.
- Use `MultiMasters' service in `psaux' instead of a call to `cff'.
- The project builds if CFF_CONFIG_OPTION_OLD_ENGINE is not defined.
+ * src/raster/ftraster.c (black_TWorker, SCALED, Set_High_Precision):
+ Clean up after 5-level gray removal (8dc8635874).
+ (Vertical_Sweep_Span): Be brief.
- * src/psaux/cf2ft.c: Update includes.
- (cf2_getNormalizedVector): Use `mm->get_var_blend' instead of
- `cff_get_var_blend'.
+2018-06-10 Werner Lemberg <wl@gnu.org>
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ [sfnt] Fix compiler warnings.
- [psaux, cff] Move `cff_random' into `psaux' service.
+ * src/sfnt/ttcolr.c (tt_face_load_colr, tt_face_load_colr_layers,
+ tt_face_colr_blend_layer): Add `NULL' initializers.
- NOTE: Does not compile!
+2018-06-10 Werner Lemberg <wl@gnu.org>
- Minor fix to allow both `cff' and `psaux' to use `cff_random'.
+ s/FT_Palette/FT_Palette_Data/, s/palette/palette_data/.
- * src/cff/cffload.c (cff_random): Move to...
- * src/psaux/psobjs.c: Here.
- * src/cff/cffload.h: Move corresponding declaration to
- `src/psaux/psobjs.h'.
+ * include/freetype/ftcolor.h, include/freetype/internal/tttypes.h,
+ src/base/ftcolor.c, src/sfnt/sfobjs.c, src/sfnt/ttcolr.c: Updated.
- * include/freetype/internal/psaux.h (PSAux_ServiceRec): Register the
- function here...
- * src/psaux/psauxmod.c: And here.
+2018-06-10 Nikolaus Waxweiler <madigens@gmail.com>
- * src/cff/cffload.c, src/psaux/cf2intrp.c: Update code.
+ CMakeLists: also accept IOS_PLATFORM=SIMULATOR64
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ This might be needed to build FreeType for the iOS simulator. See
+ https://savannah.nongnu.org/bugs/index.php?54048. Patch contributed
+ by Steve Robinson.
- [cff] Move struct declarations to `freetype/internal'.
+ * CMakeLists.txt: Accept IOS_PLATFORM=SIMULATOR64
- NOTE: Does not compile!
+2018-06-10 Werner Lemberg <wl@gnu.org>
- This is so that the CFF functions moved to `psaux' can access the
- same structs that they need.
+ Implement `FT_Palette_Get'.
- * src/cff/cfftypes.h: Moved to...
- * include/freetype/internal/cfftypes.h: ...Here.
+ * src/base/ftcolor.c: New file.
- * src/cff/cffobjs.h: Moved the struct declarations to...
- * include/freetype/internal/cffotypes.h: ... this new file.
+ * src/base/Jamefile (_sources), src/base/rules.mk (BASE_SRC),
+ src/base/ftbase.c: Add `ftcolor.c'.
- * include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
- FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
+2018-06-10 Werner Lemberg <wl@gnu.org>
- * src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
- src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
- src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
- include/freetype/internal/psaux.h,
- include/freetype/internal/services/svcfftl.h: Update includes.
+ * src/sfnt/ttcolr.c (tt_face_load_colr): Improve overflow checks.
- * src/cff/rules.mk (CFF_DRV_H): Updated.
+2018-06-09 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ [raster] Deal with pitch sign earlier.
- [psaux, cff] Add new service for inter-module calls.
+ * src/raster/ftraster.c (black_TWorker): Remove unused `traceG',
+ s/bTarget/bOrigin/.
+ (Render_Glyph): Set `ras.bOrigin' at the bottom-left corner.
+ (Vertical_Sweep_Init, {Vertical,Horizontal}_Sweep_{Span,Drop}):
+ Updated accordingly.
- NOTE: Does not compile!
+2018-06-09 Werner Lemberg <wl@gnu.org>
- This is to allow CFF functions moved to `psaux' to call functions
- declared in `src/cff/cffload.h'.
+ [sfnt] Read `CPAL' version 1 tables.
- * include/freetype/internal/services/svcfftl.h: New file, setting up
- a `CFFLoad' service.
+ * include/freetype/internal.tttypes.h: Include FT_COLOR_H.
+ (TT_FaceRec): Add `palette' field.
- * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC10,
- FT_DEFINE_SERVICEDESCREC): New macros.
- (FT_SERVICE_CFF_TABLE_LOAD_H): New macro.
+ * src/sfnt/ttcolr.c: Include FT_COLOR_H.
+ (Cpal): Remove all data covered by the new `palette' field in
+ `TT_FaceRec'.
+ (tt_face_load_colr): Updated.
+ Read `CPAL' version 1 data.
+ (tt_face_load_colr_layers, tt_face_find_color): Updated.
- * src/cff/cffdrivr.c, src/cff/cffpic.h: Register the new service.
+ * src/sfnt/sfobjs.c (sfnt_done_face): Free glyph color palette data.
- * src/cff/cfftypes.h (CFF_FontRec), src/psaux/cf2font.h
- (CF2_FontRec): Add service interface.
+2018-06-07 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/cff/cffobjs.c, src/psaux/cf2font.c, src/psaux/cf2ft.c,
- src/psaux/cf2intrp.c, src/psaux/cffdecode.c: Use the new service.
+ [base] API for Harmony LCD rendering.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ This introduces `FT_Library_SetLcdGeometry' for setting up arbitrary
+ LCD subpixel geometry including non-striped patterns.
- [psaux, cff] Add callbacks for inter-module calls.
+ * src/base/ftlcdfil.c (FT_Library_SetLcdGeometry): New function.
+ * include/freetype/ftlcdfil.h: Document it.
+ * include/freetype/freetype.h: Minor.
+ * include/freetype/ftchapters.h: Minor.
- NOTE: Does not compile!
+2018-06-06 Werner Lemberg <wl@gnu.org>
- * include/freetype/internal/psaux.h: Add function pointer
- declarations.
+ ftcolor.h: Redesign API.
- * src/psaux/cffdecode.c (cff_decoder_init): Update to take in
- callbacks.
- * src/psaux/cffdecode.h: Ditto.
+ While going to implement it I noticed that I need access to most of
+ the `CPAL' elements; I thus plan to add a `cpal' field to
+ `TT_FaceRec', which makes most of the previously suggested API
+ functions obsolete because the fields will be directly accessible.
- * src/cff/cffgload.c (cff_compute_max_advance, cff_slot_load):
- Update calls to pass in callbacks.
- * src/psaux/cf2ft.c, src/psaux/cffdecode.c: Use them.
+2018-06-06 Parth Wazurkar <parthwazurkar@gmail.com>
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ [bdf, pcf] Remove deprecated FT_FACE_FLAG_FAST_GLYPHS flag.
- [psaux, cff] Create new `PSAux' service interface entries.
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Remove deprecated
+ FT_FACE_FLAG_FAST_GLYPHS flag.
- NOTE: Does not compile!
+ * src/pcf/pcfread.c (pcf_load_font): Remove deprecated
+ FT_FACE_FLAG_FAST_GLYPHS flag.
- * include/freetype/internal/psaux.h: Include
- FT_INTERNAL_TRUETYPE_TYPES_H.
- (CFF_Builder_FuncsRec, CFF_Decocer_FuncsRec): New function tables.
- (CFF_Builder): Updated.
- Fix for forward declaration.
- (PSAux_ServiceRec): New field `cff_decoder_funcs'.
+2018-06-06 Werner Lemberg <wl@gnu.org>
- * src/psaux/psauxmod.c (cff_builder_funcs, cff_decoder_funcs): New
- function tables.
- (PSAux_Interface): Updated.
+ [smooth, raster] Limit bitmap size (#54019).
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add `psaux'
- service interface.
+ * src/raster/ftraster.c [STANDALONE] (FT_Outline_Get_CBox): Add
+ function.
+ [!STANDALONE]: Include FT_OUTLINE_H.
+ (ft_black_render): Compute CBox and reject glyphs larger than
+ 0xFFFF x 0xFFFF.
+
+ * src/smooth/ftgrays.c (gray_raster_render): Reject glyphs larger
+ than 0xFFFF x 0xFFFF.
- * src/cff/cffgload.c, src/cff/cffobjs.c, src/cff/cffparse.c: Update
- function calls to use psaux service.
+2018-06-03 Armin Hasitzka <prince.cherusker@gmail.com>
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ * src/smooth/ftgrays.c (gray_convert_glyph): Remove unused variables.
- [psaux, cff] Move CFF builder components into `psaux' module.
+2018-06-03 Werner Lemberg <wl@gnu.org>
- NOTE: Does not compile!
+ * src/tools/glnames.py (main): Emit header in `light' comment style.
- * src/cff/cffgload.c
- (cff_builder_{init,done,add_point,add_point1,add_contour,start_point,close_contour},
- cff_check_points): Move to...
- * src/psaux/psobjs.c: Here.
+2018-06-02 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/cff/cffgload.h: Move corresponding declarations to
- `src/psaux/psobjs.h'.
+ [smooth] Attempt to mitigate bug #54019.
- * src/cff/cffgload.h (CFF_Builder): Move struct declaration to...
- * include/freetype/internal/psaux.h: Here.
+ The robust rendering of estra large glyphs came with unbearable cost.
+ The old way of bisecting should fail but fail faster.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ * src/smooth/ftgrays.c (gray_convert_glyph): Switch back to bisecting
+ in y-direction.
- [psaux, cff] Move CFF decoder components into `psaux' module.
+2018-06-02 Werner Lemberg <wl@gnu.org>
- NOTE: Does not compile!
+ * src/truetype/ttinterp.c (Ins_MIRP): Use SUB_LONG; avoid FT_ABS.
+
+ Reported as
- * src/cff/cffgload.c (CFF_Operator,
- CFF_COUNT_{CHECK_WIDTH,EXACT,CLEAR_STACK}, cff_argument_counts,
- cff_operator_seac, cff_compute_bias,
- cff_lookup_glyph_by_stdcharcode,
- cff_decoder_{parse_charstrings,init,prepare}): Move to...
- * src/psaux/cffdecode.c: This new file.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8706
- * src/cff/cffgload.h: Move corresponding declarations to...
- * src/psaux/cffdecode.h: This new file.
+2018-06-02 Werner Lemberg <wl@gnu.org>
- * src/cff/cffgload.h (CFF_MAX_{OPERANDS,SUBRS_CALLS,TRANS_ELEMENTS},
- CFF_Decoder_Zone, CFF_Decoder): Move declarations to...
- * include/freetype/internal/psaux.h: Here.
+ * src/autofit/afwarp.h: Use AF_CONFIG_OPTION_USE_WARPER (#54033).
- * src/psaux/cf2ft.h: Update include.
+2018-05-31 Werner Lemberg <wl@gnu.org>
- * src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Update with
- the new file.
+ * src/raster/ftraster.c (black_TWorker_): Remove `gTarget' field.
-2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+ This is no longer used.
- [psaux, cff] Move Adobe's engine components into `psaux' module.
+2018-05-31 Werner Lemberg <wl@gnu.org>
- This is the first patch of a sequence to move the Type 2 charstring
- processing capability from the `cff' module to the `psaux' module.
+ [sfnt] Get colors from `CPAL' table in right order (#54015).
- NOTE: Does not compile!
+ * src/sfnt/ttcolr.c (tt_face_find_color): Fix it.
- * src/cff/cf2*: Move these files to...
- * src/psaux/cf2*: Here.
+2018-05-30 Werner Lemberg <wl@gnu.org>
- * src/cff/Jamfile (_sources), src/cff/rules.mk (CFF_DRV_SRC,
- CFF_DRV_H), src/cff/cff.c, src/cff/cffgload.c: Remove file
- references.
+ ftcolor.h: Improve API design, fix typos (#54011, #54014).
- * src/psaux/Jamfile (_sources), src/psaux/rules.mk, src/psaux/psaux.c
- (PSAUX_DRV_SRC, PSAUX_DRV_H): Add file references.
+ * include/freetype/ftcolor.h (FT_Palette_Get_Names): Replace with...
+ (FT_Palette_Get_Name_IDs): ... this function.
+ (FT_Palette_Get_Entry_Names): Replace with...
+ (FT_Palette_Get_Entry_Name_IDs): ... this function
+ s/FT_Palette_Set_Foreground_COlor/FT_Palette_Set_Foreground_Color/.
-2017-09-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-05-30 Armin Hasitzka <prince.cherusker@gmail.com>
- Tweak per-face LCD filtering controls.
+ Beautify a3cfed5e87232c933bdc64f43e8ebebcfd18b41b.
- Thing are simpler with a NULL-function pointer.
+ * src/autofit/afloader.c (af_loader_load_glyph): Move the
+ initialisationand declaration of variables into the if-block.
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
- pointer to the filter function.
- (FT_LibraryRec): Remove unused `lcd_filter'.
- (FT_Bitmap_LcdFilterFunc, ft_lcd_filter_fir): Move from here...
- * include/freetype/ftlcdfil.h (FT_Bitmap_LcdFilterFunc,
- ft_lcd_filter_fir): ... to here.
+2018-05-30 Armin Hasitzka <prince.cherusker@gmail.com>
- * src/base/ftobjs.c (ft_open_face_internal): NULL-initialize the
- per-face filter.
- (FT_Face_Properties): Set it.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Simplify.
+ Fix pointer underflow.
- * src/base/ftlcdfil.c (ft_lcd_filter_fir, FT_Libary_SetLcdFilter):
- Minor.
+ The declaration of `edge2' can be reached with `edge1 == NULL' and
+ `axis->edges == 0' which results in undefined behaviour.
-2017-09-24 Jonathan Kew <jfkthame@gmail.com>
+ * src/autofit/afloader.c (af_loader_load_glyph): Initialise `edge2'
+ after checking `axis->num_edges > 1'. `edge1 != NULL' can be assumed.
- [sfnt] Fix `premultiply_data' (#52092).
+2018-05-30 Werner Lemberg <wl@gnu.org>
- * src/sfnt/pngshim.c (premultiply_data): Don't use vector extension
- if we have less than 16 bytes of data.
+ Various minor color fixes.
-2017-09-24 Werner Lemberg <wl@gnu.org>
+ * include/freetype/config/ftheader.h (FT_COLOR_H): New macro.
- [otvalid] Fix handling of ValueRecords.
+ * include/freetype/internal/ftobjs.h (FT_Colr_Internal): Change
+ type of `load_flags' to `FT_Int32'.
- For GPOS pair positioning format 1 the description of ValueRecords
- in the OpenType specification (1.8.2, from today) is wrong – the
- offset has to be taken from the parent structure; in this case the
- `PairSet' table.
+ * include/freetype/internal/sfnt.h (TT_Load_Colr_Layer_Func): Change
+ type of `idx' to `FT_UInt'.
+ (TT_Blend_Colr_Func): Change type of `color_index' to `FT_UInt'.
- * src/otvalid/otvgpos.c (otv_PairSet_validate): Set `extra3'.
- (otv_PairPos_validate): Adjust.
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Change type of
+ `load_flags' to `FT_Int32'.
-2017-09-23 Werner Lemberg <wl@gnu.org>
+ * src/sfnt/ttcolr.c (find_base_glyph_record,
+ tt_face_load_colr_layers): Change type of `glyph_id' to `FT_UInt'.
+ (tt_face_find_color, tt_face_colr_blend_layer): Change type of
+ `color_index' to `FT_UInt'.
+ Fix signedness and type issues.
- [otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
+ * src/sfnt/ttcolr.h: Updated.
- * src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
- (otv_GPOS_validate): Implement it.
+2018-05-25 Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>
-2017-09-23 Werner Lemberg <wl@gnu.org>
+ [docmaker] Fix missing `Defined in (...)' under Windows/Cygwin.
- [otvalid] Update common table handling to OpenType 1.8.2.
+ This platform uses backslashes for paths, which docmaker didn't
+ understand correctly.
- * src/otvalid/otvcommn.c (otv_Device_validate): Handle
- VariationIndex subtable.
- (otv_Lookup_validate): Handle MarkFilteringSet.
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::blockEnter): Use
+ `os.path.normpath' to normalize the path for the platform being
+ used.
-2017-09-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-05-24 Alexei Podtelezhnikov <apodtele@gmail.com>
- [build] Windows-style DLL versioning.
+ [smooth] Formalize Harmony LCD rendering.
- * build/windows/ftver.rc: New VERSIONINFO resource.
- * build/windows/vc2010/freetype.vcxproj: Further improvements.
+ This generalizes magic outline shifts that make Harmony LCD
+ rendering work in terms of precise two-dimensional RGB subpixel
+ positions. These coordinates are now set in time of the `smooth'
+ module initialization and later used to shift a glyph outline for
+ rendering. FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V use the same
+ coordinates. The letter, however, rotates them before using.
+ The LCD bitmap padding is also calculated using these coordinates.
-2017-09-23 Ben Wagner <bungeman@google.com>
+ * include/freetype/internal/ftobjs.h (FT_LibraryRec): New array field
+ `lcd_geometry'.
+ * src/base/ftlcdfil.c (ft_lcd_padding): Reworked.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Updated accordingly.
- [truetype] Really fix #52082.
+ * src/smooth/ftsmooth.c [!FT_CONFIG_OPTION_SUBPIXEL_RENDERING]
+ (ft_smooth_init): Initialize `lcd_geometry'.
+ (ft_smooth_render_generic): Formalize outline shifts.
- * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+2018-05-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Reject elements of composites with invalid glyph indices.
+
+ Reported as
-2017-09-23 Werner Lemberg <wl@gnu.org>
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8413
- [otvalid] Handle `GDEF' v1.2 and v1.3 tables.
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph): Implement it.
- No validation of variation stuff yet.
+2018-05-22 Werner Lemberg <wl@gnu.org>
- * src/otvalid/otvgdef.c (otv_MarkGlyphSets_validate): New function.
- (otv_GDEF_validate): Implement it.
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Trace # of points.
-2017-09-22 Werner Lemberg <wl@gnu.org>
+2018-05-20 Werner Lemberg <wl@gnu.org>
- [otvalid] Handle `BASE' v1.1 table.
+ * include/freetype/ftcolor.h: New file.
- No validation of variation stuff yet.
+ This is an interface to the `CPAL' OpenType table. No
+ implementation yet.
- * src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
+2018-05-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-2017-09-22 Werner Lemberg <wl@gnu.org>
+ * include/freetype/internal/ftcalc.h (FT_MSB): Verified `_MSC_VER'.
+
+ Actually `_BitScanReverse' is available since VS2005.
+
+2018-05-18 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftcalc.h (FT_MSB): Use `_MSC_VER' value.
+
+ Older VC versions don't provide `_BitScanReverse'. We test for VC
+ 2013.
+
+ Reported by John Emmas <john@creativepost.co.uk>.
+
+2018-05-17 Werner Lemberg <wl@gnu.org>
+
+ s/inline/__inline/ for MSVC.
+
+ Reported by John Emmas <john@creativepost.co.uk>.
+
+ * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Do it.
+
+2018-05-16 Werner Lemberg <wl@gnu.org>
+
+ Add function `FT_Get_GlyphLayers' to access `COLR' table data.
+
+ * include/freetype/internal/ftobjs.h (FT_Glyph_LayerRec): Move this
+ structure to...
+ * include/freetype/freetype.h (FT_Glyph_LayerRec): ... this
+ header file.
+ (FT_Glyph_Layer): New typedef.
+ Update code to use it where appropriate.
+
+ * src/base/ftobjs.c (FT_Get_GlyphLayers): New function.
+
+2018-05-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Fix mono bitmap presetting (#53896).
+
+ It is rather fundamental to set monochrome bitmap based on rounded
+ CBox because the b/w rasterizer turns on pixels when their centers are
+ inside the glyph outline. The dropout control is unpredictable and can
+ distort narrow glyphs if the bitmap is too wide.
+
+ Reported by Chris Liddell.
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): If BBox boundaries
+ are too close, adjust them before rounding.
+
+2018-05-15 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix compiler warning (#53915).
+
+ * src/psaux/psft.c (cf2_freeT1SeacComponent): Do it.
+
+2018-05-15 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix memory leak in handling `COLR' data.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Free old `layers' array
+ before reassigning allocated memory.
+ Only allocate `color_layers' if we don't have one already.
+
+2018-05-15 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] If `COLR' is present, don't assume that all glyphs use it.
+
+ * src/sfnt/ttcolr.c (tt_face_load_colr_layers): Return FT_Err_Ok if
+ current glyph is not a `COLR' base glyph.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Don't allocate
+ `color_layers' if there are no color layers.
+
+2018-05-14 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Fix signature of `pixel_modes'.
+
+2018-05-14 Werner Lemberg <wl@gnu.org>
+
+ Provide dummy functions if `TT_CONFIG_OPTION_SFNT_NAMES' is not set.
+
+ * src/base/ftsnames.c [!TT_CONFIG_OPTION_SFNT_NAMES]: Implement it.
+
+2018-05-13 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Improve tracing.
+
+2018-05-13 Shao Yu Zhang <shaozhang@fb.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Preliminary support of coloured layer outlines (#44689).
+
+ This commit enables OpenType's COLR/CPAL table handling; a typical
+ application are color emojis that can be scaled to any size.
+
+ If the color palette does not exist or is invalid, the rendering
+ step rasterizes the outline instead. The current implementation
+ assumes that the foreground is black.
+
+ Enable this by defining option TT_CONFIG_OPTION_COLOR_LAYERS.
+
+ There are still some issues with metrics; additionally, an API to
+ fetch color layers is missing.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_COLOR_LAYERS): New macro.
+
+ * include/freetype/internal/ftobjs.h (FT_Glyph_LayerRec,
+ FT_Colr_InternalRec): New structures.
+ (FT_Slot_InternalRec): Add `color_layers' field.
+
+ * include/freetype/internal/sfnt.h (TT_Load_Colr_Layer_Func,
+ TT_Blend_Colr_Func): New function types.
+ (SFNT_Interface): Add `load_colr', `free_colr', `load_colr_layer',
+ and `colr_blend' fields.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add
+ `colr_and_cpal' field.
+
+ * include/freetype/internal/tttags. (TTAG_COLR, TTAG_CPAL): New
+ macros.
+
+ * src/sfnt/ttcolr.c, src/sfnt/ttcolr.h: New files.
+
+ * src/base/ftobjs.c (ft_glyphslot_done, FT_Render_Glyph_Internal):
+ Handle glyph color layers.
+
+ * src/sfnt/Jamfile (_sources), src/sfnt/rules.mk (SFNT_DRV_SRC): Add
+ `ttcolr.c'.
+
+ * src/sfnt/sfdriver.c: Include `ttcolr.h'.
+ (PUT_COLOR_LAYERS): New macro.
+ Update call to `FT_DEFINE_SFNT_INTERFACE'.
+
+ * src/sfnt/sfnt.c: Include `ttcolr.c'.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Load `COLR' and `CPAL' tables.
+ (sfnt_done_face): Updated.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Handle color layers.
+
+2018-05-12 Arkady Shapkin <arkady.shapkin@gmail.com>
+
+ Use MS VC++'s _BitScanReverse to calculate MSB (patch #9636).
+
+ * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Implement
+ it.
- [otvalid] Macros for 32bit offset support.
+2018-05-10 Alan Coopersmith <alan.coopersmith@oracle.com>
- * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
- OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
+ Fix DLL compilation on Solaris.
-2017-09-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+ AC_COMPILE_IFELSE only tries to compile a `*.c' to a `*.o'. The
+ Solaris Studio 12.1 through 12.5 compilers see the
+ `-fvisibility=hidden' flag, but ignore it with a warning of:
- [build] Simplify Visual C++ 2010 project.
+ cc: Warning: Option -fvisibility=hidden passed to ld,
+ if ld is invoked, ignored otherwise
- * build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded
- configurations and tweak.
+ AC_LINK_IFELSE does the compile and then tries to link the result,
+ at which point the Solaris linker will issue an error:
-2017-09-21 Werner Lemberg <wl@gnu.org>
+ ld: fatal: option '-fvisibility=hidden' is incompatible with
+ building a dynamic executable
- [truetype] Integer overflow (#52082).
+ If we don't use AC_LINK_IFELSE to catch the error, then configure
+ will fail further tests which attempt to link, such as those testing
+ dependencies like `libbz2'.
- * src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS.
+ Also, don't try adding `-fvisibility' if we have already added
+ `-xldscope', just use one of them, since Sun Studio 12 and earlier
+ compilers only issue a warning, and don't try passing through to the
+ linker to generate an error, so AC_LINK_IFELSE doesn't catch them.
-2017-09-21 Werner Lemberg <wl@gnu.org>
+ Tested on Solaris 11.4 beta with compiler versions:
- [sfnt] Fix postscript name for default instance of variation fonts.
+ Sun Studio 8 (Sun C 5.5)
+ Sun Studio 10 (Sun C 5.7)
+ Sun Studio 11 (Sun C 5.8)
+ Sun Studio 12 (Sun C 5.9)
+ Sun Studio 12.1 (Sun C 5.10)
+ Oracle Solaris Studio 12.2 (Sun C 5.11)
+ Oracle Solaris Studio 12.3 (Sun C 5.12)
+ Oracle Solaris Studio 12.4 (Sun C 5.13)
+ Oracle Developer Studio 12.5 (Sun C 5.14)
+ Oracle Developer Studio 12.6 (Sun C 5.15)
+ gcc 5.5.0
+ gcc 7.3.0
- Problem reported by Behdad.
+ and verified the libfreetype.so.6 generated by each of those
+ compilers exported the same set of symbols.
- * src/sfnt/sfdriver.c (sfnt_get_ps_name): Test
- `is_default_instance'.
+ * builds/unix/configure.raw: Implement it.
-2017-09-21 Werner Lemberg <wl@gnu.org>
+2018-05-08 Werner Lemberg <wl@gnu.org>
- [truetype] Fix `mmvar' array pointers, part 2.
+ [autofit] Avoid potential SEGV if running out of memory.
- The previous commit was incomplete.
+ Problem reported by Shailesh Mistry <shailesh.mistry@hotmail.co.uk>.
- * src/truetype/ttgxvar.c: Properly initialize sub-array offsets for
- `master' also.
+ * src/autofit/afshaper.c (af_shaper_buf_create,
+ af_shaper_buf_destroy) [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Don't
+ allocate and free a four-byte buffer. Instead, make those functions
+ no-ops; the calling functions will provide a pointer to a buffer
+ instead.
-2017-09-21 Werner Lemberg <wl@gnu.org>
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
+ af_cjk_metrics_init_blues, af_cjk_metrics_check_digits),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths,
+ af_latin_metrics_init_blues, af_latin_metrics_check_digits)
+ [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Use pointer to local variable for
+ `shaper_buf'.
- [truetype] Fix `mmvar' array pointers.
+2018-05-07 Nikolaus Waxweiler <madigens@gmail.com>
- Without this change, clang's AddressSanitizer reports many runtime
- errors due to misaligned addresses.
+ [cmake] Allow using project as subfolder in other project.
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use multiples of pointer
- size for sub-array offsets into `mmvar'.
+ * CMakeLists.txt: Test for CMake build directory being different
+ from source directory. Provide other parts of the build system
+ access the full include directory.
-2017-09-20 Werner Lemberg <wl@gnu.org>
+2018-05-07 Werner Lemberg <wl@gnu.org>
- [truetype] Integer overflows.
+ [build] Suppress configure's `nothing to be done' message.
- Changes triggered by
+ This is due to calling the configure script via `make' (within the
+ top-level `configure' wrapper script). The same can happen for all
+ other secondary make targets that are used to only modify the
+ primary one, e.g., `make setup devel'.
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3429
+ * builds/dos/detect.mk (emx, turboc, watcom, borlandc, borlandc16),
+ builds/os2/detect (visualage, watcom, borlandc, devel),
+ builds/unix/detect.mk (devel, lcc, unix), builds/windows/detect.mk
+ (visualc, watcom, visualage, lcc, mingw32, bcc32, devel-bcc,
+ devel-gcc): Use no-op recipe.
- * src/truetype/ttinterp.c (Ins_SHPIX, Ins_DELTAP): Use NEG_LONG.
- (Ins_MIAP): Use SUB_LONG.
+2018-05-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-2017-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+ Support symbol visibility features of Sun / Oracle C compilers.
- [build] Fix DLL builds in Visual C++ project.
+ Reported by Kiyoshi Kanazawa:
+ https://lists.gnu.org/archive/html/freetype-devel/2018-05/msg00008.html
+ Thanks to the suggestions by Alexei and Alan Coopersmith.
- * build/windows/vc2010/freetype.vcxproj: Use DynamicLibrary in Debug
- and Release configurations.
- * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
- [_DLL]: Use Visual C++ extensions.
+ * builds/unix/configure.raw: Check if "-xldscope=hidden" is
+ accepted, and if so, it is added to CFLAGS. This is the option
+ making Sun / Oracle C compilers hide the symbols from global
+ scope.
+ * include/freetype/config/ftconfig.h: Use "__global" prefix
+ for FT_EXPORT() macro, if SunPro C is newer than Sun ONE
+ Studio 8 (2003).
+ * builds/unix/ftconfig.in: Ditto.
+ * builds/vms/ftconfig.h: Ditto.
-2017-09-19 John Tytgat <John.Tytgat@esko.com>
+2018-05-02 Nikolaus Waxweiler <madigens@gmail.com>
- [cff] Fix family name logic of pure CFF fontdata (#52056).
+ Unbreak CMake Windows installation
- 1. If `FamilyName' is present in the CFF font, use this for
- FT_Face's `family_name'.
- 2. Otherwise, use the face name and chop off any subset prefix.
- 3. If at this point FT_Face's `family_name' is set, use this
- together with the full name to determine the style.
- 4. Otherwise, use `CIDFontName' as FT_Face's `family_name'.
- 5. If we don't have a valid style, use "Regular".
+ * CMakeLists.txt: Generate ftconfig.h on non-UNIX.
- Previously, FT_Face's `family_name' entry for pure CFF fontdata
- nearly always was the fontname itself, instead of the `FamilyName'
- entry in the CFF font (assuming there is one).
+2018-05-02 Werner Lemberg <wl@gnu.org>
- * src/cff/cffobjs.c (cff_face_init) [pure_cff]: Implement it.
+ Remove FT_CONFIG_OPTION_PIC and related code.
-2017-09-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+ */* [FT_CONFIG_OPTION_PIC]: Remove all code guarded by this
+ preprocessor symbol.
- [build] Declutter Visual C++ 2010-2017 project.
+ */*: Replace `XXX_GET' macros (which could be either a function in
+ PIC mode or an array in non-PIC mode) with `xxx' arrays.
- * build/windows/vc2010/freetype.vcxproj: Use MaxSpeed (/02)
- optimization for Release configuration throughout the project.
+ * include/freetype/internal/ftpic.h, src/autofit/afpic.c,
+ src/autofit/afpic.h, src/base/basepic.c, src/base/basepic.h,
+ src/base/ftpic.c, src/cff/cffpic.c, src/cff/cffpic.h,
+ src/pshinter/pshpic.c, src/pshinter/pshpic.h, src/psnames/pspic.c,
+ src/psnames/pspic.h, src/raster/rastpic.c, src/raster/rastpic.h,
+ src/sfnt/sfntpic.c, src/sfnt/sfntpic.h, src/smooth/ftspic.c,
+ src/smooth/ftspic.h, src/truetype/ttpic.c, src/truetype/ttpic.h:
+ Removed.
----------------------------------------------------------------------------
-Copyright 2017-2018 by
+Copyright (C) 2018-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.20 b/freetype/ChangeLog.20
index 63e3116b..a589e13b 100644
--- a/freetype/ChangeLog.20
+++ b/freetype/ChangeLog.20
@@ -1688,7 +1688,7 @@
2001-04-03 Werner Lemberg <wl@gnu.org>
- * src/*/Jamfile: Slight changes to make files more cryptic.
+ * src/*/Jamfile: Slight changes to make files more cryptic.
2001-04-03 Werner Lemberg <wl@gnu.org>
@@ -1928,7 +1928,7 @@
* 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
+ * 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.
@@ -2109,7 +2109,7 @@
* 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.
+ * 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,
@@ -2184,11 +2184,11 @@
2000-12-24 Tom Kacvinsky <tkacvins@freetype.org>
- * src/cff/t2gload.c (T2_Load_Glyph): Added code so that the font
+ * 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
+ the font matrix numbers are scaled by 1/(matrix->yy). Also, the
offset vector now contains integer values instead of 16.16 fixed
numbers.
@@ -2597,7 +2597,7 @@
----------------------------------------------------------------------------
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.21 b/freetype/ChangeLog.21
index 1adc8178..ea889eeb 100644
--- a/freetype/ChangeLog.21
+++ b/freetype/ChangeLog.21
@@ -553,7 +553,7 @@
(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
+ * 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,
@@ -9422,7 +9422,7 @@
----------------------------------------------------------------------------
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.22 b/freetype/ChangeLog.22
index 4517c322..feaab868 100644
--- a/freetype/ChangeLog.22
+++ b/freetype/ChangeLog.22
@@ -2821,7 +2821,7 @@
----------------------------------------------------------------------------
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.23 b/freetype/ChangeLog.23
index 85253f11..f1372522 100644
--- a/freetype/ChangeLog.23
+++ b/freetype/ChangeLog.23
@@ -750,7 +750,7 @@
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
sfnt: Cast a charcode to 32-bit in cmap format 14 parser.
-
+
* src/sfnt/ttcmap.c (tt_cmap14_char_var_index,
tt_cmap14_char_var_isdefault, tt_cmap14_char_variants,
tt_cmap14_variant_chars): Correct mismatches from
@@ -1344,24 +1344,24 @@
* include/freetype/config/ftstdlib.h: Introduce
FT_INT_MIN, to use in signed integer overflow in
16-bit and 64-bit platforms.
-
+
* include/freetype/internal/fttrace.h: Add a tracer
to ftsynth.c.
-
+
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Check
invalid strength causing integer overflow on 16-bit
platform.
-
+
* src/base/ftcalc.c (ft_corner_orientation): Change
the internal calculation from FT_Int to FT_Long, to
avoid an overflow on 16-bit platforms. The caller of
this function should use only the sign of result,
so the cast to FT_Int is acceptable.
-
+
* src/base/ftsynth.c: Introduce a tracer for synth module.
(FT_GlyphSlot_Embolden): Check invalid strength causing
integer overflow on 16-bit platform.
-
+
* src/bdf/bdfdrivr.c (BDF_Face_Init): The glyph index
in FT2 API is typed as FT_UInt, although BDF driver
can handle unsigned long glyph index internally. To
@@ -1372,25 +1372,25 @@
glyph pitch internally. To avoid integer overflow on
16-bit platform, too large glyph pitch should not be
returned.
-
+
* src/pfr/pfrsbit.c (pfr_slot_load_bitmap): The glyph
pitch in FT2 is typed as FT_UInt, although PFR font
format can include huge bitmap glyph with 24-bit pitch
(however, a glyph spends 16.7 pixel, it's not realistic).
To avoid integer overflow on 16-bit platform, huge
bitmap glyph should be excluded.
-
+
* src/smooth/ftgrays.c (gray_hline): As FT_Span.x is
truncated to fit its type (16-bit short), FT_Span.y
should be truncated to fit its type (FT_Int).
-
+
* src/cff/cffdrivr.c (cff_get_ros): CFF specification
defines the supplement in ROS as a real number.
Truncate it to fit public FT2 API.
-
+
* src/cff/cffparse.c (cff_parse_cid_ros): Warn the
supplement if it is truncated or rounded in cff_get_ros().
-
+
* src/cff/cfftypes.h: Change the type of internal variable
`supplement' from FT_Long to FT_ULong to fit the signedness
to the type in public API.
@@ -1653,7 +1653,7 @@
cff: Fix some data types mismatching with their sources.
- * src/cff/cffgload.c (cff_slot_load): The types of
+ * src/cff/cffgload.c (cff_slot_load): The types of
`top_upm' and `sub_upm' are matched with
CFF_FontRecDict->units_per_em.
@@ -1811,56 +1811,56 @@
gxv_XClassTable_lookupval_validate,
gxv_XClassTable_lookupfmt4_transit):
Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-
+
* src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
gxv_bsln_LookupFmt4_transit): Ditto.
-
+
* src/gxvalid/gxvjust.c
(gxv_just_pcTable_LookupValue_entry_validate,
gxv_just_classTable_entry_validate,
gxv_just_wdcTable_LookupValue_validate): Ditto.
-
+
* src/gxvalid/gxvkern.c
(gxv_kern_subtable_fmt1_entry_validate): Ditto.
-
+
* src/gxvalid/gxvlcar.c (gxv_lcar_LookupValue_validate,
gxv_lcar_LookupFmt4_transit): Ditto.
-
+
* src/gxvalid/gxvopbd.c (gxv_opbd_LookupValue_validate,
gxv_opbd_LookupFmt4_transit): Ditto.
-
+
* src/gxvalid/gxvprop.c (gxv_prop_LookupValue_validate,
gxv_prop_LookupFmt4_transit): Ditto.
-
+
* src/gxvalid/gxvmort4.c
(gxv_mort_subtable_type4_lookupval_validate): Ditto.
-
+
* src/gxvalid/gxvmort0.c
(gxv_mort_subtable_type0_entry_validate): Update
from GXV_StateTable_GlyphOffsetDesc
to GXV_StateTable_GlyphOffsetCPtr.
-
+
* src/gxvalid/gxvmort1.c
(gxv_mort_subtable_type1_entry_validate): Ditto.
-
+
* src/gxvalid/gxvmort2.c
(gxv_mort_subtable_type2_entry_validate): Ditto.
-
+
* src/gxvalid/gxvmort5.c
(gxv_mort_subtable_type5_entry_validate): Ditto.
-
+
* src/gxvalid/gxvmorx2.c
(gxv_morx_subtable_type2_entry_validate): Ditto.
-
+
* src/gxvalid/gxvmorx5.c
(gxv_morx_subtable_type5_entry_validate): Ditto.
-
+
* src/gxvalid/gxvmorx1.c
(gxv_morx_subtable_type1_entry_validate): Ditto.
(gxv_morx_subtable_type1_LookupValue_validate,
gxv_morx_subtable_type1_LookupFmt4_transit):
Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-
+
* src/gxvalid/gxvmorx0.c
(gxv_morx_subtable_type0_entry_validate): Update
from GXV_XStateTable_GlyphOffsetDesc
@@ -1976,7 +1976,7 @@
Prevent the overflows by a glyph with too many points or contours.
The bug is reported by Boris Letocha <b.letocha@gmc.net>. See
https://lists.gnu.org/archive/html/freetype-devel/2009-06/msg00031.html
- https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
* include/freetype/ftimage.h (FT_OUTLINE_CONTOURS_MAX,
FT_OUTLINE_POINTS_MAX): New macros to declare the maximum
@@ -6948,7 +6948,7 @@
2006-11-25 David Turner <david@freetype.org>
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
+ * 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.
@@ -7932,7 +7932,7 @@
----------------------------------------------------------------------------
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.24 b/freetype/ChangeLog.24
index 44abc406..52004dbc 100644
--- a/freetype/ChangeLog.24
+++ b/freetype/ChangeLog.24
@@ -231,7 +231,7 @@
* src/base/md5.c, src/base/md5.h: New files, taken from
- http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+ https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
* include/freetype/internal/fttrace.h: Add `bitmap'.
@@ -774,7 +774,7 @@
(Font_Class): Rename to...
(SPH_Font_Class): This. Decorate with `const' where appropriate.
-
+
* src/truetype/ttsubpix.h (scale_test_tweak, sph_test_tweak):
Decorate arguments with `const' where appropriate.
@@ -1271,7 +1271,7 @@
* src/autofit/afcjk.c (af_cjk_metrics_init_widths): Use it.
(af_cjk_metrics_init, af_cjk_script_class): Updated.
- * src/autofit/afindic.c (af_indic_metrics_init,
+ * src/autofit/afindic.c (af_indic_metrics_init,
af_indic_script_class): Updated.
* src/autofit/afcjk.h, src/autofit/aflatin.h: Updated.
@@ -6344,7 +6344,7 @@
----------------------------------------------------------------------------
-Copyright 2010-2018 by
+Copyright (C) 2010-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.25 b/freetype/ChangeLog.25
index 59cf2bfe..c4a3c536 100644
--- a/freetype/ChangeLog.25
+++ b/freetype/ChangeLog.25
@@ -3405,7 +3405,7 @@
The canonical URL to get updates for this file is
- http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
+ https://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
as the author told me in private communication.
@@ -4837,7 +4837,7 @@
Apply fixes for cppcheck nitpicks.
- http://cppcheck.sourceforge.net/
+ https://cppcheck.sourceforge.net/
The call was (from the top-level of the FreeType tree):
@@ -5145,7 +5145,7 @@
----------------------------------------------------------------------------
-Copyright 2013-2018 by
+Copyright (C) 2013-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.26 b/freetype/ChangeLog.26
index ea89e91a..5e0911c7 100644
--- a/freetype/ChangeLog.26
+++ b/freetype/ChangeLog.26
@@ -2393,7 +2393,7 @@
* src/autofit/afcjk.c (af_cjk_get_standard_width): New function.
(af_cjk_writing_system_class): Updated.
- * src/autofit/afdummy.c (af_dummy_writing_system_class): Updated.
+ * src/autofit/afdummy.c (af_dummy_writing_system_class): Updated.
* src/autofit/afindic.c (af_cjk_get_standard_width): New function.
(af_indic_writing_system_class): Updated.
* src/autofit/aflatin.c (af_latin_get_standard_width): New function.
@@ -5695,7 +5695,7 @@
----------------------------------------------------------------------------
-Copyright 2015-2018 by
+Copyright (C) 2015-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.27 b/freetype/ChangeLog.27
index 0e82b2fb..e9d1ec12 100644
--- a/freetype/ChangeLog.27
+++ b/freetype/ChangeLog.27
@@ -2090,7 +2090,7 @@
----------------------------------------------------------------------------
-Copyright 2016-2018 by
+Copyright (C) 2016-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.28 b/freetype/ChangeLog.28
index ca1ff385..c288bb96 100644
--- a/freetype/ChangeLog.28
+++ b/freetype/ChangeLog.28
@@ -2489,8 +2489,8 @@
Based on ideas taken from
- http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
- http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
+ https://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
+ https://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
* builds/unix/freetype-config.in: Rewritten. Use `pkg-config' to
set output variables if program is available.
@@ -3120,7 +3120,7 @@
----------------------------------------------------------------------------
-Copyright 2016-2018 by
+Copyright (C) 2016-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.29 b/freetype/ChangeLog.29
new file mode 100644
index 00000000..21340713
--- /dev/null
+++ b/freetype/ChangeLog.29
@@ -0,0 +1,2352 @@
+2018-05-01 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.9.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-9-1'.
+
+ * docs/VERSION.TXT: Add entry for version 2.9.1.
+ * docs/CHANGES: Updated.
+
+ * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
+ src/base/ftver.rc, builds/windows/vc2005/index.html,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2008/index.html,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/index.html,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualc/index.html,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj,
+ builds/windows/visualce/index.html,
+ builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2005-ce/index.html,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/index.html: s/2.9/2.9.1/, s/29/291/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.raw (version_info): Set to 22:1:16.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+ * include/freetype/ftgasp.h: Use FT_BEGIN_HEADER and FT_END_HEADER.
+
+2018-04-26 Werner Lemberg <wl@gnu.org>
+
+ Another fix for handling invalid format 2 cmaps.
+
+ Sigh.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8003
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+ an endless loop.
+
+2018-04-24 Ben Wagner <bungeman@google.com>
+
+ [base] Avoid undefined behaviour in lcd filtering code (#53727).
+
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+ Ensure `height > 0'.
+
+2018-04-22 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing.
+
+2018-04-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Fix bitmap emboldening.
+
+ Bug introduced after release 2.8.
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): We use
+ `FT_QALLOC_MULT', which doesn't zero out the buffer. Adjust the
+ bitmap copying code to take care of this fact.
+
+2018-04-22 Werner Lemberg <wl@gnu.org>
+
+ Another fix for handling invalid format 2 cmaps.
+
+ The previous commit was incomplete.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7928
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+ an endless loop.
+
+2018-04-19 Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Georgian Mtavruli characters.
+
+ This will be part of the forthcoming Unicode 11.0.
+
+ * src/autofit/afblue.dat: Add blue zone data for Mtavruli.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Mtavruli standard character.
+
+2018-04-18 Werner Lemberg <wl@gnu.org>
+
+ Fix handling of invalid format 2 cmaps.
+
+ The problem was introduced after the last release.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7828
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Avoid endless loop.
+
+2018-04-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7739
+
+ * src/truetype/ttinterp.c (Ins_CEILING): Use FT_PIX_CEIL_LONG.
+
+2018-04-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7718
+
+ * src/truetype/ttinterp.c (Ins_MIRP): Use ADD_LONG.
+
+2018-04-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Use `info' function of make 3.81.
+
+ * configure, docs/INSTALL, docs/INSTALL.CROSS, docs/INSTALL.GNU,
+ docs/INSTALL.UNIX, docs/MAKEPP: Bump make version requirements.
+
+ * builds/detect.mk (std_setup): Replace `echo' with `info'.
+ (dos_setup): Removed.
+ * builds/unix/install.mk, builds/modules.mk, builds/dos/detect.mk,
+ builds/windows/detect.mk, builds/os2/detect.mk: Updated.
+ * builds/newline: No longer needed.
+
+2018-04-15 Werner Lemberg <wl@gnu.org>
+
+ [truetype]: Limit `SLOOP' bytecode argument to 16 bits.
+
+ This fixes
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7707
+
+ * src/truetype/ttinterp.c (Ins_SLOOP): Do it.
+
+2018-04-14 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7652
+
+ * src/truetype/ttinterp.c (Ins_MDAP): Use SUB_LONG.
+
+2018-04-14 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Update to Unicode 11.0.0.
+
+ But no support new scripts (volunteers welcomed).
+
+ * src/autofit/afranges.c (af_arab_nonbase_uniranges,
+ af_beng_nonbase_uniranges, af_cakm_nonbase_uniranges,
+ af_deva_nonbase_uniranges, af_geor_uniranges,
+ af_gujr_nonbase_uniranges, af_mlym_nonbase_uniranges,
+ af_nkoo_nonbase_uniranges, af_telu_nonbase_uniranges,
+ af_hani_uniranges): Add new data.
+
+2018-04-10 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * CMakeLists.txt, builds/cmake/FindHarfBuzz.cmake: Extensive
+ modernization measures.
+
+ This brings up the minimum required CMake version to 2.8.12.
+
+ The installation paths follow the GNU defaults now, e.g. installing on a
+ 64 bit host will place binaries into the lib64/ folder on e.g. Fedora.
+
+ Symbols are hidden by default (e.g. `-fvisibility=hidden' on GCC).
+
+ CMake will no longer look for a C++ compiler.
+
+ Library and .so version now match the Autotools build.
+
+ Comments in the build file and informational messages now use platform
+ agnostic example commands.
+
+ ftoption.h and ftconfig.h are written directly without a redundant `-new'
+ copy.
+
+ External dependencies are expressed as option()s and will turn up as such
+ in cmake-gui.
+
+ Internal: Properties such as dependencies and include directories are now
+ privately set on the freetype library instead of globally.
+
+ The CPack definitions have been cleaned up, the `make dist' has been
+ removed. Source packages generated with CPack don't contain Autotools
+ files and aren't used by the maintainers anyway.
+
+ On Windows, src/base/ftver.rc is compiled to decorate the library with
+ version and copyright information.
+
+ A pkg-config file is now generated and installed.
+
+2018-04-09 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7453
+
+ * src/truetype/ttinterp.c (Round_Super, Round_Super_45): Use
+ ADD_LONG and SUB_LONG.
+
+2018-04-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [windows, wince] Clean up legacy project files.
+
+ * builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/visualce/freetype.vcproj,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualc/freetype.dsp: Remove per-file compile flags.
+
+2018-04-04 Werner Lemberg <wl@gnu.org>
+
+ [cff, type1] Sanitize `BlueFuzz' and `BlueShift'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7371
+
+ * src/cff/cffload.c (cff_load_private_dict): Sanitize
+ `priv->blue_shift' and `priv->blue_fuzz' to avoid overflows later
+ on.
+
+ * src/type1/t1load.c (T1_Open_Face): Ditto.
+
+2018-04-04 Ben Wagner <bungeman@google.com>
+
+ * src/truetype/ttobjs.c (trick_names): Add 3 tricky fonts (#53554),
+ `DFHei-Md-HK-BF', `DFKaiShu-Md-HK-BF' and `DFMing-Bd-HK-BF'.
+ (tt_check_trickyness_sfnt_ids): Add checksums for 3 tricky fonts
+ in above.
+
+2018-04-01 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (work): Use $(SEP).
+
+ This fixes the `make refdoc' using Cygwin: $(CAT) is `type' on this
+ platform, and this program only understands backslashes in paths.
+
+ Reported by Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>.
+
+2018-03-30 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak (only if tracing is on).
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var) [FT_DEBUG_LEVEL_TRACE}: Fix
+ it.
+
+2018-03-23 Ben Wagner <bungeman@google.com>
+
+ [sfnt] Correctly handle missing bitmaps in sbix format (#53404).
+
+ * src/sfnt/ttfsbit.c (tt_face_load_sbix_image): Fix return value.
+
+2018-03-23 Ben Wagner <bungeman@google.com>
+
+ [truetype] Fix advance of empty glyphs in bitmap fonts (#53393).
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Apply scaling to metrics
+ for empty bitmaps.
+
+2018-03-22 Werner Lemberg <wl@gnu.org>
+
+ Remove `ftlcdfil.c' and `ftfntfmt.c' from build files (#53415).
+
+ builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt,
+ builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/freetype.vcxproj.filters,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj, vms_make.com: Do it.
+
+2018-03-13 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric
+ overflow.
+
+2018-03-13 Werner Lemberg <wl@gnu.org>
+
+ Fix cmap format 2 handling (#53320).
+
+ The patch introduced for #52646 was not correct.
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition.
+
+2018-03-10 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05.
+
+2018-03-09 Chun-wei Fan <fanc999@yahoo.com.tw>
+
+ * CMakeLists.txt [win32]: Allow MSVC DLL builds (#53287).
+
+ Do not limit DLL builds to MinGW, since we already have
+ `__declspec(dllexport)' directives in `ftconfig.h'.
+ Also suppress more warnings for POSIX functions.
+
+2018-03-08 Hugh McMaster <hugh.mcmaster@outlook.com>
+
+ Make installation of `freetype-config' optional (#53093).
+
+ * builds/unix/configure.raw: Add option `--enable-freetype-config'
+ and set `INSTALL_FT2_CONFIG'.
+ * builds/unix/unix-def.in (INSTALL_FT2_CONFIG): Define.
+ * builds/unix/install.mk (install): Handle it.
+
+2018-03-05 Werner Lemberg <wl@gnu.org>
+
+ Make `ftlcdfil.c' part of the `base' module.
+
+ `ftobjs.c' needs `ft_lcd_padding'.
+
+ Problem reported by duhuanpeng <548708880@qq.com>.
+
+ * modules.cfg (BASE_EXTENSIONS): Don't include `ftlcdfil.c'.
+
+ * src/base/ftbase.c: Include `ftlcdfil.c'.
+ * src/base/rules.mk (BASE_SRC): Add `ftlcdfil.c'.
+ * src/base/Jamfile (_sources): Adjusted.
+
+ * docs/INSTALL.ANY: Updated.
+
+2018-03-05 Werner Lemberg <wl@gnu.org>
+
+ Make `ftfntfmt.c' part of the `base' module.
+
+ `ftobjs.c' needs `FT_Get_Font_Format'.
+
+ Problem reported by duhuanpeng <548708880@qq.com>.
+
+ * modules.cfg (BASE_EXTENSIONS): Don't include `ftfntfmt.c'.
+
+ * src/base/ftbase.c: Include `ftfntfmt.c'.
+ * src/base/rules.mk (BASE_SRC): Add `ftfntfmt.c'.
+ * src/base/Jamfile (_sources): Adjusted.
+
+ * docs/INSTALL.ANY: Updated.
+
+2018-03-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments.
+
+2018-02-23 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer.
+
+ Problem reported by Alan Coopersmith <alan.coopersmith@oracle.com>.
+
+2018-02-17 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154).
+
+2018-02-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6027
+
+ * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIAP, Ins_MIRP): Use
+ SUB_LONG; avoid FT_ABS.
+
+2018-02-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [unix] Use -fvisibility=hidden.
+
+ It is now widely recommended that ELF shared libraries hide symbols
+ except those with explicit __attribute__((visibility("default"))).
+ This is supported by all major compilers and should rather be an
+ option in libtool.
+
+ * builds/unix/configure.raw: Add -fvisibility=hidden to CFLAGS.
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+ include/freetype/config/ftconfig.h (FT_EXPORT): Use visibility
+ attribute.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better protection against invalid VF data.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5739
+
+ Bug introduced in commit 08cd62deedefe217f2ea50e392923ce8b5bc7ac7.
+
+ * src/truetype/ttgxvar.c (TT_Set_Var_Design): Always initialize
+ `normalizedcoords'.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_GETVARIATION): Avoid NULL reference.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5736
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Minor.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better trace VF instances.
+
+ * src/truetype/ttgxvar.c (ft_var_to_normalized): Don't emit number
+ of coordinates.
+ (TT_Get_MM_Var): Trace instance indices names.
+ (TT_Set_Var_Design): Updated.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Beautify tracing of VF axis records.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Show axis records in a
+ table-like manner.
+
+2018-01-26 Ben Wagner <bungeman@google.com>
+
+ [truetype] Fix multiple calls of `FT_Get_MM_Var' (#52955).
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Set
+ `face->blend->num_axis' in case we have to initialize the
+ `face->blend'.
+
+2018-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [apinames] Anonymous version map for GNU linker.
+
+ * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.3.
+ (OutputFormat): Add `OUTPUT_GNU_VERMAP'.
+ (names_dump): Handle it.
+ (usage): Updated.
+ (main): Handle new command line flag `-wL'.
+
+2018-01-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [unix] Call libtool to clean up.
+
+ * builds/unix/install.mk (clean_project_unix, distclean_project_unix):
+ Use libtool.
+ * builds/freetype.mk: Minor.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftver.rc: Fix mingw-w64 compilation.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Enable VERSIONINFO resource for Cygwin/MinGW.
+
+ * builds/unix/configure.raw: Check for resource compiler.
+ * builds/unix/unix-cc.in: Conditionally set up resource compiler.
+ * builds/freetype.mk: Add conditional rule for `ftver.rc'.
+ * src/base/ftver.rc: Copyright notice and year update.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Move VERSIONINFO resource.
+
+ * builds/windows/vc2010/freetype.vcxproj: Updated.
+ * builds/windows/ftver.rc: Move file from here...
+ * src/base/ftver.rc: ... to here.
+
+2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Expand dllexport/dllimport to Cygwin/MinGW.
+
+ * include/freetype/config/ftconfig.h: Respect DLL_EXPORT,
+ s/_MSC_VER/_WIN32/.
+ * builds/unix/ftconfig.in: Replicate here.
+ * builds/vms/ftconfig.h: Replicate here.
+
+2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Improve and document MSVC build.
+
+ * include/freetype/config/ftconfig.h: Guard dllexport/dllimport
+ attributes with _DLL and FT2_DLLIMPORT.
+ * builds/windows/vc2010/index.html: Update documentation.
+
+2018-01-10 Steve Robinson <ssrobins@gmail.com>
+
+ * CMakeLists.txt [win32]: Suppress warnings for POSIX functions.
+
+2018-01-10 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Correctly handle Flex features (#52846).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO,
+ cf2_cmdHMOVETO>: Do not move if doing Flex.
+
+2018-01-09 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/vc2010/freetype.sln: Synchronize with the project.
+
+2018-01-08 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.9 released.
+ =======================
+
+
+ Tag sources with `VER-2-9'.
+
+ * docs/VERSION.TXT: Add entry for version 2.9.
+
+ * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2005/index.html,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2008/index.html,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/index.html,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualc/index.html,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj,
+ builds/windows/visualce/index.html,
+ builds/windows/ftver.rc,
+ builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2005-ce/index.html,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/index.html: s/2.8.1/2.9/, s/281/29/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 9.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 22:0:16.
+ * CMakeLists.txt (VERSION_PATCH): Set to 0.
+
+2018-01-07 Werner Lemberg <wl@gnu.org>
+
+ Add check for librt, needed for `ftbench' (#52824).
+
+ * builds/unix/configure.raw (LIB_CLOCK_GETTIME): Define; this will
+ hold `-lrt' if necessary.
+
+ * builds/unix/unix-cc.in (LIB_CLOCK_GETTIME): New variable.
+
+2018-01-07 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix Type 1 glyphs with too many stem hints.
+
+ According to the CFF specification, charstrings can have up to 96 stem
+ hints. Due to hint replacement routines in Type 1 charstrings, some
+ glyphs are rejected by the Adobe engine, which implements the above
+ limit. This fix turns off hinting for such glyphs.
+
+ * src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
+ `cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
+ hinting.
+
+2018-01-06 Werner Lemberg <wl@gnu.org>
+
+ Add `FT_Done_MM_Var'.
+
+ This is necessary in case the application's memory routines differ
+ from FreeType. A typical example is a Python application on Windows
+ that calls FreeType compiled as a DLL via the `ctypes' interface.
+
+ * include/freetype/ftmm.h, src/base/ftmm.c (FT_Done_MM_Var): Declare
+ and define.
+
+ * docs/CHANGES: Updated.
+
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Round offsets of glyph components only if hinting is on.
+
+ * src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
+ it.
+
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.
+
+ This is a better fix than the previous commit, which is now
+ reverted.
+
+2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Move internal LCD-related declarations.
+
+ * include/freetype/ftlcdfil.h (ft_lcd_padding, ft_lcd_filter_fir):
+ Move from here...
+ * include/freetype/internal/ftobjs.h: ... to here.
+
+2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+ [_MSC_VER]: Limit Visual C++ attributes.
+
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Make blend/design coordinate round-tripping work.
+
+ Behdad reported that setting blend coordinates, then getting design
+ coordinates did incorrectly return the default instance's
+ coordinates.
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Fix it.
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix endless loop.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4838
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ Synchronize other Windows project files.
+
+ * builds/windows/*: Add missing files.
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ Update Visual C 2010 project files.
+
+ Problem reported by Hin-Tak.
+
+ * builds/windows/vc2010/freetype.vcxproj: Add files `ftbdf.c' and
+ `ftcid.c'.
+ Sort entries.
+ * builds/windows/vc2010/freetype.vcxproj.filter: Ditto.
+ Fix members of `FT_MODULE' group.
+
+2017-12-30 Werner Lemberg <wl@gnu.org>
+
+ * builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file.
+
+2017-12-28 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file.
+
+ Reported by Nikolaus.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Make `pitch' and
+ `new_pitch' unsigned.
+
+ * src/base/ftpsprop.c: Include FT_INTERNAL_POSTSCRIPT_PROPS_H.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Fixes for `make multi'.
+
+ * include/freetype/internal/ftpsprop.h: Use `FT_BASE_CALLBACK'.
+ (ps_property_get): Harmonize declaration with corresponding
+ function typedef.
+
+ * include/freety[e/internal/fttrace.h: Add `trace_psprops'.
+
+ * src/base/ftpsprop.c: Include necessary header files.
+ (FT_COMPONENT): Define.
+ (ps_property_set): Tag with `FT_BASE_CALLBACK_DEF'.
+ (ps_property_get): Tag with `FT_BASE_CALLBACK_DEF'.
+ Harmonize declaration with corresponding function typedef.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Provide support for intra-module callback functions.
+
+ This is needed especially for `make multi' with C++.
+
+ * include/freetype/config/ftconfig.h (FT_BASE_CALLBACK,
+ FT_BASE_CALLBACK_DEF): New macros.
+
+2017-12-25 Ewald Hew <ewaldhew@gmail.com>
+
+ Move PostScript drivers' property handlers to `base'.
+
+ This reduces the amount of duplicated code across PostScript
+ drivers.
+
+ * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c
+ ({cff,cid,t1}_property_{get,set}): Moved to...
+ * include/freetype/internal/ftpsprop.h: ...this new file.
+ (ps_property_{get,set}): New functions to replace moved ones.
+
+ * src/base/ftpsprop.c: New file that implements above functions.
+
+ * include/freetype/internal/internal.h
+ (FT_INTERNAL_POSTSCRIPT_PROPS_H): New macro.
+
+ * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c:
+ Updated.
+
+ * src/base/Jamfile, src/base/rules.mk (BASE_SRC), src/base/ftbase.c:
+ Updated.
+
+2017-12-20 Werner Lemberg <wl@gnu.org>
+
+ Speed up FT_Set_Var_{Design,Blend}_Coordinates if curr == new.
+
+ We exit early if the current design or blend coordinates are
+ identical to the new ones.
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend, TT_Set_Var_Design):
+ Implement it, returning internal error code -1 if there will be no
+ variation change.
+
+ * src/type1/t1load.c (t1_set_mm_blend): Ditto.
+
+ * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Updated.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix charmap type 2 iterator (#52646).
+
+ The subsetted demo font of the report that exhibits the bug has a
+ very unusual type 2 cmap for Unicode(!): It contains only two
+ sub-headers, one for one-byte characters (covering the range 0x20 to
+ 0xFA), and a second one for higher byte 0x01 (just for character
+ code U+0131).
+
+ Before this commit, the iterator wasn't able to correctly handle a
+ sub-header for higher byte 0x01.
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix character increment
+ for outer loop.
+
+2017-12-18 Matthias Clasen <matthias.clasen@gmail.com>
+
+ [truetype] Fix clamping, minor tracing code beautification.
+
+ * src/truetype/ttgxvar.c (ft_var_to_normalized): Trace number of
+ design coordinates.
+ Use clamped value.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688).
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix previous commit.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Correctly handle
+ unhinted phantom points, which must be properly scaled.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Don't apply HVAR and VVAR deltas twice (#52683).
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Always adjust
+ `pp1' to `pp4', except if we have an HVAR and/or VVAR table.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Handle
+ alternative code branch identically w.r.t. presence of an HVAR
+ and/or VVAR table.
+
+2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+
+ [truetype] Correctly handle variation font phantom points (#52683).
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix phantom
+ point indices.
+
+2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+
+ Fix incorrect advance width scaling (#52683).
+
+ * src/base/ftadvance.c (FT_Get_Advances): Always respect the
+ FT_LOAD_NO_SCALE flag if present.
+
+2017-12-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/vc2010/freetype.vcxproj: AfterBuild copy.
+ * objs/.gitignore: Ignore almost everything.
+
+2017-12-11 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warning (#52640).
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused
+ variable.
+
+2017-12-08 Azzuro <azzuro@team-mediaportal.com>
+
+ * builds/windows/vc2010/freetype.vcxproj: Adjust output directory.
+
+ This allows builds with different configurations in parallel.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix `make setup dos', second try (#52622).
+
+ * builds/detect.mk (dos_setup): Don't use literal `>' character at
+ all. Mixing the different escaping rules from make, dos, and
+ windows is too fragile.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Fix code section parsing.
+
+ Stuff like
+
+ {
+ <bla>
+ }
+
+ confused the parser, which incorrectly treated `<bla>' as a markup
+ tag.
+
+ * src/tools/docmaker/content.py (ContentProcessor::process_content):
+ Apply `re_markup_tags' only outside of code sections.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ New `ftdriver.h' file, covering all driver modules.
+
+ This reduces redundancy and increases synergy; it also reduces the
+ number of header files.
+
+ * include/freetype/config/ftheader.h (FT_DRIVER_H): New macro.
+ (FT_AUTOHINTER_H, FT_CFF_DRIVER_H, FT_TRUETYPE_DRIVER_H,
+ FT_PCF_DRIVER_H, FT_TYPE1_DRIVER_H): Make them aliases to
+ FT_DRIVER_H.
+
+ * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+ include/freetype/ftpcfdrv.h, include/freetype/ftt1drv.h,
+ include/freetype/ftttdrv.h: Replaced with...
+ * include/freetype/ftdriver.h: ...this new file.
+ (FT_CFF_HINTING_ADOBE, FT_T1_HINTING_ADOBE): Renamed to...
+ (FT_HINTING_ADOBE): ... this new macro.
+ (FT_CFF_HINTING_FREETYPE, FT_T1_HINTING_FREETYPE): Renamed to...
+ (FT_HINTING_FREETYPE): ... this new macro.
+
+ * src/*/*: Updated accordingly.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Move `ftdriver.h' to `ftdrv.h'.
+
+ * include/freetype/internal/ftdriver.h: Renamed to...
+ * include/freetype/internal/ftdrv.h: ... this name.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_DRIVER_H):
+ Updated.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix access to uninitalized memory (#52613).
+
+ Also reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=791317
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): If increasing the
+ bitmap size needs a larger bitmap buffer, assure that the new memory
+ areas are initialized also.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix `make setup dos' (#52622).
+
+ * builds/detect.mk (dos_setup): Properly escape literal `>'
+ character.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ Fix C++ compilation.
+
+ * src/psaux/psauxmod.h: Use FT_CALLBACK_TABLE macro where necessary.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix warning.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ Fix `make multi'.
+
+ * include/freetype/internal/fttrace.h: Remove unused tracing macros.
+ s/pshalgo2/pshalgo/.
+ Add `trace_cffdecode'.
+ * src/pshinter/pshalgo.c (FT_COMPONENT): Updated.
+
+ * src/cff/cffload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/cff/cffobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H and
+ FT_SERVICE_CFF_TABLE_LOAD_H.
+
+ * src/cid/cidriver.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+
+ * src/psaux/cffdecode.c: Include FT_FREETYPE_H and
+ FT_INTERNAL_DEBUG_H.
+ (FT_COMPONENT): Define.
+ * src/psaux/cffdecode.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/psaux/psauxmod.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ Declare `cff_builder_funcs' and `ps_builder_funcs'.
+ * src/psaux/psft.c: Include `psobjs.h' and `cffdecode.h'.
+ * src/psaux/psobjs.c : Include `psauxmod.h'.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftheader.h: Some clean-up.
+
+ This commit removes documentation of deprecated macros and does some
+ minor streamlining.
+
+2017-12-06 Werner Lemberg <wl@gnu.org>
+
+ * builds/symbian/bld.inf: Updated.
+
+2017-12-06 Werner Lemberg <wl@gnu.org>
+
+ New header file `ftparams.h' that collects all parameter tags.
+
+ * include/freetype/config/ftheader.h (FT_PARAMETER_TAGS_H): New
+ macro.
+ (FT_TRUETYPE_UNPATENTED_H, FT_UNPATENTED_HINTING_H): Define it to
+ `ftparams.h'.
+
+ * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+ include/freetype/ftincrem.h, include/freetype/ftlcdfil.h,
+ include/freetype/ftsnames.h, include/freetype/ftt1drv.h: Include
+ FT_PARAMETER_TAGS_H.
+ Move FT_PARAM_TAG_XXX definitions to...
+ * include/freetype/ftparams.h: ...this new file.
+
+ * include/freetype/ttunpat.h: Remove. No longer needed.
+
+2017-12-05 Werner Lemberg <wl@gnu.org>
+
+ Improve tracing messages by using singular and plural forms.
+
+ * src/*/*.c: Implement it.
+
+2017-12-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Allow shared points in `cvar' table (#52532).
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Implement it by copying
+ and adjusting the corresponding code from
+ `TT_Vary_Apply_Glyph_Deltas'.
+
+2017-11-28 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improving tracing of composite glyphs.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph)
+ [FT_DEBUG_LEVEL_TRACE]: Show composite glyph information.
+
+2017-11-27 Werner Lemberg <wl@gnu.org>
+
+ [type1] Allow (again) `/Encoding' with >256 elements (#52464).
+
+ In version 2.6.1, this has been disallowed to better reject
+ malformed fonts; however, this restriction was too strong. This
+ time, we only take the first 256 elements into account, since
+ encoding arrays are always accessed with a 8bit integer, according
+ to the PostScript Language Reference.
+
+ * src/type1/t1load.c (parse_encoding): Implement it.
+
+2017-11-27 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ Fix last commit (#52522).
+
+ * builds/freetype.mk: Set `FT_OPTION_H' and `FTOPTION_FLAG'
+ properly if we have `ftoption.h' in `BUILD_DIR'.
+
+2017-11-24 Werner Lemberg <wl@gnu.org>
+
+ [unix] Install a massaged `ftoption.h' file (#51780).
+
+ * builds/unix/configure.raw (ftoption_set, ftoption_unset): New
+ auxiliary functions to construct...
+ (FTOPTION_H_SED): ... this new variable.
+ Apply it as a sed argument while copying `ftoption.h' to the
+ `builds/unix' directory (using `AC_CONFIG_FILES').
+ Simplify code of test that checks cpp's computation of bit length
+ (the test previously created an empty `ftoption.h' file and deleted
+ it immediately afterwards); without this change, it can happen on my
+ GNU/Linux box that `configure's execution of `config.status' doesn't
+ create `ftoption.h' (no idea why this happens).
+
+ * builds/unix/install.mk (install): Install
+ `builds/unix/ftoption.h'.
+
+ * builds/unix/unix-def.in (DISTCLEAN): Updated.
+
+ * builds/unix/.gitignore: Updated.
+
+2017-11-23 Tor Andersson <tor.andersson@artifex.com>
+
+ Silence unused function warnings (#52465).
+
+ Some static function declarations cause unused function warnings if
+ certain config options are turned off via `ftoption.h'.
+
+ * src/base/ftbase.h, src/base/ftrfork.c, src/sfnt/ttbdf.h,
+ src/truetype/ttgxvar.h: Add #ifdef guards around these sections.
+
+2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+
+ * src/psaux/psft.c (cf2_setGlyphWidth): Check format before setting.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4377
+
+2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix CFF advance widths. (#52466)
+
+ Glyph advance widths were being written to the new `PS_Decoder' but not
+ saved to the underlying format specific decoder. This caused pure CFF
+ fonts to have bad advance width.
+
+ * include/freetype/internal/psaux.h (PS_Decoder): Change `glyph_width'
+ field to pointer.
+ Remove unused fields.
+ * src/psaux/psobjs.c (ps_decoder_init): Change `glyph_width' from copy
+ to reference.
+ Remove unused.
+ * src/psaux/psft.c (cf2_setGlyphWidth): Update code.
+
+2017-11-15 Vlad Tsyrklevich <vtsyrklevich@google.com>
+
+ * include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type.
+
+2017-11-14 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Use Adobe hinting engine for `light' hinting of both CFF and Type 1.
+
+ Since Ewald Hew factored the Adobe hinting engine out of the CFF
+ driver code, we can now use it on Type 1 (and CID) font formats, as
+ both have the same hinting philosophy.
+
+ This change activates the Adobe hinter when in LIGHT mode, and
+ therefore always unless explicitly asking for the auto-hinter. This
+ makes LIGHT behavior consistent with CFF fonts. As of this commit,
+ the hinting engine table looks as follows.
+
+ LIGHT NORMAL
+ -------------------------
+ TrueType Auto v40
+ CFF Adobe Adobe
+ Type 1 Adobe Adobe
+
+2017-11-10 Yuri Levchenko <yuri_levchenko@boolat.com>
+
+ * CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option.
+
+2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Relocate condition.
+
+2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables.
+
+2017-11-03 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix PostScript interpreter rewinding in Type 1 mode. (#52251)
+
+ The interpreter in Type 1 mode rewinds the charstring after collecting
+ all hints for building the initial hintmap (commit d52dd7f). However,
+ some charstrings use `endchar' in a final subroutine call, rewinding to
+ the start of that subroutine, and only a small section of the actual
+ glyph is drawn.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdENDCHAR>:
+ Ensure we are on the top level charstring before rewinding.
+
+2017-11-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [truetype] Add more tricky fonts.
+
+ See the report by Yang Yinsen.
+ https://lists.gnu.org/archive/html/freetype-devel/2017-11/msg00000.html
+
+ * src/truetype/ttobjs.c (trick_names): Add `DFGothic-EB',
+ `DFGyoSho-Lt', `DFHSGothic-W5', `DFHSMincho-W3' and `DFHSMincho-W7'.
+ (tt_check_trickyness_sfnt_ids): Add checksums for DFGothic-EB,
+ DFGyoSho-Lt, DFHSGothic-W5, DFHSMincho-W3 and DFHSMincho-W7. Also
+ add checksums for DLCLiShu and DLCHayBold which their family names
+ were already listed but their checksums were previously unknown.
+
+2017-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Fix complex rendering at high ppem.
+
+ We used to split large glyphs into horizontal bands and continue
+ bisecting them still horizontally if that was not enough. This is
+ guaranteed to fail when a single scanline cannot fit into the
+ rendering memory pool. Now we bisect the bands vertically so that
+ the smallest unit is a column of the band height, which is guranteed
+ to fit into memory.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Implement it.
+
+2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve complex rendering at high ppem.
+
+ At large sizes almost but not exactly horizontal segments can quickly
+ drain the rendering pool. This patch at least avoids filling the pool
+ with trivial cells. Beyond this, we can only increase the pool size.
+
+ Reported, analyzed, and tested by Colin Fahey.
+
+ * src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
+
+2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Improve tracing in FT_Load_Glyph, FT_*_Size.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
+ function name, glyph index, and load flags.
+ (FT_Select_Metrics, FT_Request_Metrics): Remove all tracing.
+ (FT_Select_Size, FT_Request_Size): Improve tracing.
+
+2017-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Improve tracing in FT_Render_Glyph.
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Add total coverage
+ calculations and downgrade Netpbm dump to bitmap:7.
+
+2017-10-15 Ewald Hew <ewaldhew@gmail.com>
+
+ [cff] Fix segfault on missing `psaux' (#52218)
+
+ * src/cff/cffload.c (cff_done_blend): Add a check for possible nullptr.
+
+ * modules.cfg: Update dependency list.
+
+2017-10-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base, cff] Fix MSVC warnings.
+
+ * src/base/ftobjs.c (FT_New_Library): C4702: unreachable code.
+ (ft_glyphslot_preset_bitmap): C4244: possible loss of data.
+ * src/cff/cffload.c (cff_blend_doBlend): C4244: possible loss of data.
+ Turn `sum' into unsigned.
+
+2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Netpbm image tracing.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
+ (FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
+
+ * src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
+
+2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/ftdebug.c (FT_Message): Print to stderr.
+ * builds/wince/ftdebug.c (FT_Message): Ditto.
+
+2017-10-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [afshaper] Delay creating `hb_set' objects until needed.
+
+ In runs on Noto Naskh Arabic, this results in 89 sets created
+ instead of 340 before. Makes auto-hinter setup with HarfBuzz
+ enabled 20% to 30% faster.
+
+ * src/autofit/afshaper.c (af_shaper_get_coverage): Implement it.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ [type1, cid] Add hinting engine switch.
+
+ Implement property service in `type1' and `cid' drivers to allow
+ switching between FreeType or Adobe hinting engine when both are
+ available.
+
+ * src/cid/cidriver.c (cid_property_{set,get}, cid_services),
+ src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
+ Properties service.
+
+ * src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
+ (T1_Driver_Init): Add default property values.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
+
+ This controls whether the old Type 1 engine gets compiled into FreeType.
+ It is disabled by default.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (T1_CONFIG_OPTION_OLD_ENGINE): New macro.
+
+ * include/freetype/internal/psaux.h (PS_Decoder): Remove unused field.
+ * include/freetype/internal/psaux.h, src/cid/cidgload.c
+ (cid_load_glyph), src/psaux/psauxmod.c, src/psaux/psobjs.c
+ (ps_builder_add_point), src/psaux/t1decode.c
+ (t1_lookup_glyph_by_stdcharcode, t1_decoder_parse_glyph,
+ t1operator_seac, t1_decoder_parse_charstrings), src/psaux/t1decode.h,
+ src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Surround
+ relevant code with macro.
+ Minor code changes.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ Extract width parsing from Type 1 parser.
+
+ Duplicate the fast advance width calculations from the old parser.
+ This is to facilitate adding options for compiling out the old parser.
+
+ * src/psaux/t1decode.{c,h} (t1_decoder_parse_metrics): New function.
+ * include/freetype/internal/psaux.h (T1_Decoder_Funcs): New entry
+ `parse_metrics'.
+ * src/psaux/psauxmod.c: Set the new entry.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String),
+ src/cid/cidgload.c (cid_load_glyph): Separate
+ conditional for selecting engine.
+
+2017-10-09 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Translate): Fix integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=772775
+
+2017-10-08 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3579
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Adjust behaviour of PS font names for variation fonts.
+
+ * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Use a named instance's
+ PS name only if no variation is applied.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Adjust behaviour of named instances.
+
+ This commit completely separates the interaction between named
+ instances and variation functions. In particular, resetting the
+ variation returns to the current named instance (if set) and not to
+ the base font.
+
+ As a side effect, variation functions no longer change the named
+ instance index.
+
+ * src/cff/cffobjs.c (cff_face_init): Use MM service's `set_instance'
+ function.
+ Also apply `MVAR' table to named instances.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Add cast.
+ (tt_set_mm_blend): No longer check whether requested variation
+ coincides with a named instance.
+ (TT_Set_Var_Design): Use current named instance for default
+ coordinates.
+ * src/truetype/ttobjs.c (tt_face_init): Use `TT_Set_Named_Instance'.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_Set_Named_Instance' work.
+
+ * src/cff/cffdrivr.c (cff_set_instance): New function.
+ (cff_service_multi_masters): Register it.
+
+ * src/truetype/ttgxvar.c (TT_Set_Named_Instance): New function.
+ * src/truetype/ttgxvar.h: Updated.
+ * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Register
+ it.
+
+ * src/type1/t1load.c (T1_Reset_MM_Blend): New function.
+ * src/type1/t1load.h: Updated.
+ * src/type1/t1driver.c (t1_service_multi_masters): Register it.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_FACE_FLAG_VARIATION' work.
+
+ * include/freetype/internal/tttypes.h (TT_Face): Remove
+ `is_default_instance'; this can be replaced with a combination of
+ `FT_IS_VARIATION' and `FT_IS_INSTANCE'.
+
+ * src/cff/cffdrivr.c (cff_get_advances): Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name), src/sfnt/sfobjs.c
+ (sfnt_init_face): Updated.
+
+ * src/truetype/ttdriver.c (tt_get_advances), src/truetype/ttgload.c
+ (TT_Process_Simple_Glyph, load_truetype_glyph, IS_DEFAULT_INSTANCE),
+ src/truetype/ttgxvar.c (tt_set_mm_blend): Updated.
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
+ Handle `FT_FACE_FLAG_VARIATION'.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Handle
+ `FT_FACE_FLAG_VARIATION'.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ New function `FT_Set_Named_Instance'.
+
+ No effect yet.
+
+ * src/base/ftmm.c (FT_Set_Named_Instance): New function.
+
+ * include/freetype/ftmm.h: Updated.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Add macros for checking whether a font variation is active.
+
+ * include/freetype/freetype.h (FT_FACE_FLAG_VARIATION,
+ FT_IS_VARIATION): New macros.
+ No effect yet.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Add framework for setting named instance in MM service.
+
+ * include/freetype/internal/services/svmm.h (FT_Set_Instance_Func):
+ New function typedef.
+ (MultiMasters): Add `set_instance' member.
+ (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+
+ * src/cff/cffdrivr.c (cff_service_multi_masters),
+ src/truetype/ttdriver (tt_service_gx_multi_masters),
+ src/type1/t1driver.c (t1_service_multi_masters): Updated.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [type1] Minor code shuffling.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend): Make it a wrapper of...
+ (t1_set_mm_blend): ...this new function.
+ (T1_Set_MM_Design): Use `t1_set_mm_blend'.
+
+2017-10-05 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Fix integer
+ overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3539
+
+2017-10-05 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+
+ * src/cff/cffdrivr.c (cff_ps_get_font_extra): Avoid code that relies
+ on numeric overflow.
+ Add cast.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix variable
+ types, add cast.
+
+2017-10-04 John Tytgat <John.Tytgat@esko.com>
+
+ [cff] Add support for `FSType'.
+
+ * include/freetype/internal/cfftypes.h (CFF_FontRec): Add
+ `font_extra' entry.
+
+ * src/cff/cffdrivr.c (cff_ps_get_font_extra): New function to
+ retrieve FSType info from the embedded PostScript data.
+ (cff_service_ps_info): Register function.
+
+ * src/cff/cffload.c (cff_font_done): Free `font_extra'.
+
+2017-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Signedness fixes in bitmap presetting.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3514.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Explicitly signed height.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Explicitly unsigned
+ subtraction.
+
+2017-09-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Bitmap metrics presetting [2/2].
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Preset the bitmap metrics when
+ appropriate but `FT_Render_Glyph' is not called.
+ * include/freetype/freetype.h (FT_GlyphSlotRec): Document the change.
+
+2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth, raster] Miscellaneous cleanups.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Clean up the exit.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Reduce
+ translations and clean up the exit.
+ (ft_smooth_render_lcd, ft_smooth_render_lcd): Remove unused `error'.
+
+2017-09-28 Ben Wagner <bungeman@google.com>
+
+ [truetype] Really, really fix #52082.
+
+ * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+
+2017-09-28 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psintrp.c (cf2_doStems): Fix integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3510
+
+2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+
+ * src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489
+
+2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Bitmap metrics presetting [1/2].
+
+ This mainly just extracts the code for presetting the bitmap metrics
+ from the monochrome, grayscale, and LCD renderers into a separate
+ function.
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): New function that
+ calculates prospective bitmap metrics for the given rendering mode.
+ * include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
+ Declare it.
+
+ * src/base/ftlcdfil.c (ft_lcd_padding): New helper function that adds
+ padding to CBox taking into account pecularities of LCD rendering.
+ * include/freetype/ftlcdfil.h (ft_lcd_padding): Declare it.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Reworked to use
+ `ft_glyphslot_preset_bitmap'.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+ (ft_smooth_render_lcd, ft_smooth_render_lcd): The pixel_mode setting
+ is moved to `ft_glyphslot_preset_bitmap'.
+
+2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix compiler warning.
+
+ * src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing
+ code.
+
+2017-09-27 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
+
+2017-09-25 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix compiler warnings.
+
+ * src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant
+ test.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Add casts.
+
+ * src/psaux/psobjs.c (ps_decoder_init): Add cast.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Minor fixes.
+
+ * include/freetype/internal/psaux.h, src/psaux/psobjs.{c,h}:
+ Rearrange `ps_builder_init' arguments to conventional order.
+
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Add a check and
+ notice for `SubFont' in Type 1 mode.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Move `psdecode' into `psobjs'.
+
+ As the former only contains a single procedure, move it into
+ `psobjs' for simplicity. Also change the parameter order to the
+ conventional one.
+
+ * src/psaux/psdecode.c (ps_decoder_init): Moved to...
+ * src/psaux/psobjs.c: ...Here.
+ * src/psaux/psdecode.h, src/psaux/psobjs.h: Ditto.
+
+ * include/freetype/internal/psaux.h (PSAux_ServiceRec): Update
+ `ps_decoder_init' function signature.
+
+ * src/cff/cffgload.c, src/cid/cidgload.c, src/type1/t1gload.c:
+ Update calls.
+
+ * src/psaux/psaux.c, src/psaux/psauxmod.c: Update includes.
+
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRV_SRC):
+ Update file references.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix Type 1 hinting.
+
+ Type 1 hinting breaks sometimes when mid-charstring hints should
+ have been in the initial hintmap. This fix adds a preprocessing
+ pass that reads all hints and builds the correct initial hintmap
+ first, before proceeding to build the glyph outline.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString): New
+ `initial_map_ready' boolean flag.
+ Ignore outline commands and hint changes on first pass.
+ <cf2_cmdENDCHAR>: Add section to build hintmap and rewind.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add tracing for hints.
+
+ * src/psaux/pshints.c (cf2_hintmap_dump): New function.
+ (cf2_hintmap_insertHint): Trace incoming and inserted hints.
+ (cf2_hintmap_build): Dump hintmap before and after hint adjustment.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Minor fixes.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop
+ results.
+ s/font->decoder/decoder/ where necessary.
+ <cf2_cmdHSTEM, cf2_cmdVSTEM, cf2_escHSTEM3, cf2_escVSTEM3>: Use
+ offset parameter in `cf2_doStems' instead of doing correction for
+ left-sidebearing.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [cid] Use the new engine.
+
+ * src/cid/cidgload.c: Update includes.
+ (cid_load_glyph, cid_slot_load_glyph): Implement changes to glyph
+ loading code as with `type1' module.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [cid] Add Adobe engine configuration.
+
+ This is similar to what was done in the `type1' module.
+
+ * src/cid/cidriver.c (t1cid_driver_class): Update declaration.
+ * src/cid/cidobjs.c: Include FT_TYPE1_DRIVER_H.
+ (cid_driver_init): Update code.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Change subfont synthesis for CID fonts.
+
+ Change `t1_make_subfont' to take in the Private dict record as an
+ argument. This is because Type 1 and CID font records in FreeType
+ have this in different places.
+
+ * src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
+ `FT_Face' so that CID is also accepted.
+ Take `PS_Private' as an argument and let caller figure out where the
+ Private dict actually is.
+ Update references.
+
+ * include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
+ declaration.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
+ call.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [type1] Switch to Adobe engine.
+
+ * src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (seac).
+
+ This concludes the changes needed to add Type 1 support.
+
+ * src/psaux/psintrp.c: Update includes.
+ (cf2_interpT2CharString) <cf2_escSEAC>: Implement this similarly to
+ implied seac for CFF.
+
+ * src/psaux/t1decode.c (t1_lookup_glyph_by_stdcharcode_ps): New
+ function to look up the glyph index.
+
+ * src/psaux/psft.c (cf2_getT1SeacComponent,
+ cf2_freeT1SeacComponent): New functions to get the charstrings for
+ seac components.
+
+ * src/psaux/t1decode.h, src/psaux/psft.h: Update declarations.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (flex in callothersubr).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Fix Flex feature handling (OtherSubrs 0, 1,
+ 2).
+ <cf2_cmdRMOVETO>: Do not actually move the `glyphPath' while doing
+ flex. This is to avoid closing the current contour.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (callothersubr).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Copy code from
+ `t1_decoder_parse_charstrings' (in `t1decode.c').
+ OtherSubr 3 (change hints) should reset the hintmask, so that the
+ new hints are applied.
+ Fix function calls and stack access.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (pop).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString): Change how unhandled
+ OtherSubr results are stored. Implement the PostScript stack using
+ an array.
+ <cf2_escPOP>: Ensure that the stack is not cleared after getting
+ `OtherSubr' results.
+ Fix stack access.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (callsubr).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
+ Type 1 mode.
+
+ * src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (div, four-byte numbers).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escDIV>: Add
+ Type 1 mode. Type 1 requires large integers to be followed by
+ `div'; cf. `Adobe Type 1 Font Format', section 6.2.
+ <op == 255>: Push Type 1 four-byte numbers as `Int' always. This is
+ to ensure `div' and `callsubr' get values they can use.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (hints).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+ cf2_cmdVSTEM>: Add correction for left sidebearing in Type 1 mode.
+ Allow adding hints mid-charstring.
+ <cf2_escVSTEM3, cf2_escHSTEM3>: Translate into equivalent commands
+ for three normal stem hints. This requires some recalculation of
+ stem positions.
+ Correction for left sidebearing.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (hsbw, sbw).
+
+ * src/psaux/psintrp.c (cf2_doStems): `hsbw' or `sbw' must be the
+ first operation in a Type 1 charstring.
+ (cf2_interpT2CharString): Remove unused variables.
+ <cf2_cmdHMOVETO, cf2_cmdVMOVETO, cf2_cmdRMOVETO>: `hsbw' or `sbw'
+ must be the first operation in a Type 1 charstring.
+ <cf2_cmdHSBW, cf2_escSBW>: Fix data access and add correction for
+ left sidebearing.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (setcurrentpoint).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escSETCURRENTPT>: Fix stack access.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Extend Adobe interpreter (closepath).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <c2f_cmdCLOSEPATH>:
+ Use the right builder function. We can use the `haveWidth' boolean
+ already present, instead of implementing `parse_state'.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add Type 1 operations to Adobe CFF interpreter.
+
+ The following Type 1 specific ops have been added (copied from
+ `t1decode'):
+
+ closepath
+ vstem3
+ hstem3
+ seac
+ sbw
+ callothersubr
+ pop
+ setcurrentpoint
+ hsbw
+
+ The following require a Type 1 mode, because of differences in
+ specification:
+
+ hstem
+ vstem
+ vmoveto
+ callsubr
+ div
+ rmoveto
+ hmoveto
+ Numbers
+
+ The subsequent commits will implement these changes and adapt
+ accesses of data and objects to the new interpreter.
+
+ NOTE: Will not compile in the meantime!
+
+ * src/psaux/psintrp.c: Add opcodes to enum.
+ (cf2_interpT2CharString): Copy relevant code over from
+ `t1_decoder_parse_charstrings' (in `t1decode.c').
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [type1] Fixes for rendering.
+
+ The Type 1 advance width calculation passes null for glyph slot,
+ etc, which can cause null pointer access in the new interpreter.
+ Fall back to the old one for now.
+
+ Fix the large glyph retry code and ensure hinting and scaling flags
+ are set properly.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add a
+ check for metrics_only.
+ Set the `force_scaling' flag.
+ (T1_Parse_Glyph): Updated.
+ (T1_Load_Glyph): Add `hinting' and `scaled' flags.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add missing objects (2/2).
+
+ Synthesize a `SubFont' object for Type 1 fonts. This is used in the
+ interpreter to access Private dict data, which are stored in
+ different places for Type 1 and CFF. This allows the same data to
+ be used in either mode.
+
+ * src/psaux/psobjs.c (t1_make_subfont): New procedure to copy
+ required values to a dummy `CFF_SubFont' object. This is similar to
+ `cff_make_private_dict'.
+ * src/psaux/psobjs.h: Add the new declaration.
+
+ * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Ditto.
+ Add this to the PSAux Service for future use with CID fonts.
+
+ * src/type1/t1gload.c: Include FT_INTERNAL_CFF_TYPES_H.
+ (T1_Parse_Glyph_And_Get_Char_String): Add the call.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add missing objects for Type 1 (1/2).
+
+ Move `CF2_Font' instance to `PS_Decoder'. This is the context for
+ the interpreter and since it is currently stored in `CFF_Font', is
+ unavailable in Type 1 mode.
+
+ * include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): New
+ `cf2_instance' field.
+
+ * src/psaux/psdecode.c (ps_decoder_init): Copy `cf2_instance' to
+ `PS_Decoder'.
+
+ * src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
+
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Update accesses.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ Allow `type1' module to use the Adobe engine.
+
+ Add the callback and some conditionals to switch between the two
+ engines.
+
+ * include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Change
+ function declarations.
+ * src/psaux/psauxmod.c (T1_Decoder_FuncsRec): Register the
+ callbacks.
+
+ * src/psaux/psobjs.c (ps_builder_add_point): Add conditionals for
+ number conversion.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add code
+ to choose which renderer to use.
+
+ * src/cid/cidgload.c (cid_load_glyph): Update call.
+ * src/base/ftobjs.c, src/psaux/psobjs.c, src/type1/t1gload.c: Update
+ includes.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [type1] Add Adobe engine configuration.
+
+ Use the previously changed PS_Driver in type1 module to store
+ hinting engine configuration.
+
+ * include/freetype/ftt1drv.h: New file.
+ Duplicate and rename config options from CFF.
+ * include/freetype/config/ftheader.h (FT_TYPE1_DRIVER_H): New macro.
+
+ * src/type1/t1driver.c (t1_driver_class): Update declaration.
+ * src/type1/t1objs.c: Include FT_TYPE1_DRIVER_H.
+ (T1_Driver_Init): Update code.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [cff] Move and rename `CFF_Driver'.
+
+ This is so that we can use the same hinting engine parameters for
+ Type 1.
+
+ * include/freetype/internal/cffotypes.h (CFF_Driver): Rename and
+ move to...
+ * include/freetype/internal/psaux.h (PS_Driver): ...here.
+
+ * src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffload.c,
+ src/cff/cffobjs.c, src/cff/cffobjs.h, src/psaux/psft.c,
+ src/psaux/psobjs.c: Update references.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, type1] Reorganize object fields.
+
+ Make some fields more generic, so that we can access them the same
+ way regardless of Type 1 or CFF.
+
+ * include/freetype/internal/psaux.h (PS_Builder): Change `TT_Face'
+ to `FT_Face'.
+ Remove unused fields.
+
+ * src/psaux/psft.c: Update all accesses of `PS_Builder.face'.
+ Add some asserts to guard against casting `T1_Face' as `TT_Face'.
+
+ * src/type1/t1objs.h (T1_GlyphSlot): Reorder fields to follow
+ `CFF_GlyphSlot', so that we can pretend they are the same in the
+ interpreter.
+
+ * src/psaux/psobjs.c (ps_builder_init, ps_builder_add_point):
+ Updated with above changes.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Prepare for Type 1 mode.
+
+ Add some checks for Type 1 data passing through.
+
+ * src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
+ * src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
+ code which is not applicable for Type 1.
+
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
+ `decoder->cff' in Type 1 mode.
+ Copy `is_t1' flag to `CF2_Font'.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Use the new objects.
+
+ * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Fix
+ switching between new and old engines.
+
+ * src/cff/cffgload.c, src/cff/cffparse.c: Update calls.
+
+ * src/psaux/psblues.c, src/psaux/psfont.c, src/psaux/psfont.h,
+ src/psaux/psft.c, src/psaux/psft.h, src/psaux/psintrp.c: Update all
+ to use new objects.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Objects for new interpreter (part 2).
+
+ Make the new objects copy over values. They are essentially wrapper
+ types for the different decoders/builders.
+
+ * include/freetype/internal/psaux.h: Update declarations.
+ (PS_Builder): Add `is_t1' flag.
+ (PS_Decoder_{Get,Free}_Glyph_Callback): Renamed to...
+ (CFF_Decoder_{Get,Free}_Glyph_Callback: ... this.
+ (PS_Decoder): Updated.
+ Add `t1_parse_callback' member.
+ (PSAux_ServiceRec): Add `ps_decoder_init' member.
+
+ * src/psaux/psdecode.h, src/psaux/psobjs.h: Update declarations.
+
+ * src/psaux/psdecode.c, src/psaux/psobjs.c: Implement copy with two
+ modes.
+
+ * src/psaux/psauxmod.c: Add builder and decoder functions to `PSAux'
+ service.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add objects for new interpreter.
+
+ Introduce `PS_Decoder' and `PS_Builder' which include all fields
+ from either Type 1 or CFF decoders/builders.
+
+ * include/freetype/internal/psaux.h (PS_Builder, PS_Decoder): New
+ structs.
+
+ * src/psaux/psobjs.c, src/psaux/psobjs.h: Add `PS_Builder'
+ functions.
+
+ * src/psaux/psdecode.c, src/psaux/psdecode.h: New files to hold
+ `PS_Decoder' initialization functions.
+
+ * src/psaux/psaux.c, src/psaux/Jamfile (_sources),
+ src/psaux/rules.mk (PSAUX_DRV_SRC): Updated.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Rename files.
+
+ Replace the `cf2' file name prefix with `ps' as the Adobe engine
+ will be used for both PostScript Types 1 and 2 (CFF) instead of just
+ CFF.
+
+ s/cf2/ps/ for all following.
+
+ * src/psaux/cf2*: Rename files.
+ * src/psaux/*: Update includes.
+
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRC_SRC,
+ PSAUX_DRV_H): Update file references.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Minor fix.
+
+ Use `MultiMasters' service in `psaux' instead of a call to `cff'.
+ The project builds if CFF_CONFIG_OPTION_OLD_ENGINE is not defined.
+
+ * src/psaux/cf2ft.c: Update includes.
+ (cf2_getNormalizedVector): Use `mm->get_var_blend' instead of
+ `cff_get_var_blend'.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Move `cff_random' into `psaux' service.
+
+ NOTE: Does not compile!
+
+ Minor fix to allow both `cff' and `psaux' to use `cff_random'.
+
+ * src/cff/cffload.c (cff_random): Move to...
+ * src/psaux/psobjs.c: Here.
+ * src/cff/cffload.h: Move corresponding declaration to
+ `src/psaux/psobjs.h'.
+
+ * include/freetype/internal/psaux.h (PSAux_ServiceRec): Register the
+ function here...
+ * src/psaux/psauxmod.c: And here.
+
+ * src/cff/cffload.c, src/psaux/cf2intrp.c: Update code.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [cff] Move struct declarations to `freetype/internal'.
+
+ NOTE: Does not compile!
+
+ This is so that the CFF functions moved to `psaux' can access the
+ same structs that they need.
+
+ * src/cff/cfftypes.h: Moved to...
+ * include/freetype/internal/cfftypes.h: ...Here.
+
+ * src/cff/cffobjs.h: Moved the struct declarations to...
+ * include/freetype/internal/cffotypes.h: ... this new file.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
+ FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
+
+ * src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
+ src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
+ src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
+ include/freetype/internal/psaux.h,
+ include/freetype/internal/services/svcfftl.h: Update includes.
+
+ * src/cff/rules.mk (CFF_DRV_H): Updated.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Add new service for inter-module calls.
+
+ NOTE: Does not compile!
+
+ This is to allow CFF functions moved to `psaux' to call functions
+ declared in `src/cff/cffload.h'.
+
+ * include/freetype/internal/services/svcfftl.h: New file, setting up
+ a `CFFLoad' service.
+
+ * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC10,
+ FT_DEFINE_SERVICEDESCREC): New macros.
+ (FT_SERVICE_CFF_TABLE_LOAD_H): New macro.
+
+ * src/cff/cffdrivr.c, src/cff/cffpic.h: Register the new service.
+
+ * src/cff/cfftypes.h (CFF_FontRec), src/psaux/cf2font.h
+ (CF2_FontRec): Add service interface.
+
+ * src/cff/cffobjs.c, src/psaux/cf2font.c, src/psaux/cf2ft.c,
+ src/psaux/cf2intrp.c, src/psaux/cffdecode.c: Use the new service.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Add callbacks for inter-module calls.
+
+ NOTE: Does not compile!
+
+ * include/freetype/internal/psaux.h: Add function pointer
+ declarations.
+
+ * src/psaux/cffdecode.c (cff_decoder_init): Update to take in
+ callbacks.
+ * src/psaux/cffdecode.h: Ditto.
+
+ * src/cff/cffgload.c (cff_compute_max_advance, cff_slot_load):
+ Update calls to pass in callbacks.
+ * src/psaux/cf2ft.c, src/psaux/cffdecode.c: Use them.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Create new `PSAux' service interface entries.
+
+ NOTE: Does not compile!
+
+ * include/freetype/internal/psaux.h: Include
+ FT_INTERNAL_TRUETYPE_TYPES_H.
+ (CFF_Builder_FuncsRec, CFF_Decocer_FuncsRec): New function tables.
+ (CFF_Builder): Updated.
+ Fix for forward declaration.
+ (PSAux_ServiceRec): New field `cff_decoder_funcs'.
+
+ * src/psaux/psauxmod.c (cff_builder_funcs, cff_decoder_funcs): New
+ function tables.
+ (PSAux_Interface): Updated.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add `psaux'
+ service interface.
+
+ * src/cff/cffgload.c, src/cff/cffobjs.c, src/cff/cffparse.c: Update
+ function calls to use psaux service.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Move CFF builder components into `psaux' module.
+
+ NOTE: Does not compile!
+
+ * src/cff/cffgload.c
+ (cff_builder_{init,done,add_point,add_point1,add_contour,start_point,close_contour},
+ cff_check_points): Move to...
+ * src/psaux/psobjs.c: Here.
+
+ * src/cff/cffgload.h: Move corresponding declarations to
+ `src/psaux/psobjs.h'.
+
+ * src/cff/cffgload.h (CFF_Builder): Move struct declaration to...
+ * include/freetype/internal/psaux.h: Here.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Move CFF decoder components into `psaux' module.
+
+ NOTE: Does not compile!
+
+ * src/cff/cffgload.c (CFF_Operator,
+ CFF_COUNT_{CHECK_WIDTH,EXACT,CLEAR_STACK}, cff_argument_counts,
+ cff_operator_seac, cff_compute_bias,
+ cff_lookup_glyph_by_stdcharcode,
+ cff_decoder_{parse_charstrings,init,prepare}): Move to...
+ * src/psaux/cffdecode.c: This new file.
+
+ * src/cff/cffgload.h: Move corresponding declarations to...
+ * src/psaux/cffdecode.h: This new file.
+
+ * src/cff/cffgload.h (CFF_MAX_{OPERANDS,SUBRS_CALLS,TRANS_ELEMENTS},
+ CFF_Decoder_Zone, CFF_Decoder): Move declarations to...
+ * include/freetype/internal/psaux.h: Here.
+
+ * src/psaux/cf2ft.h: Update include.
+
+ * src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Update with
+ the new file.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Move Adobe's engine components into `psaux' module.
+
+ This is the first patch of a sequence to move the Type 2 charstring
+ processing capability from the `cff' module to the `psaux' module.
+
+ NOTE: Does not compile!
+
+ * src/cff/cf2*: Move these files to...
+ * src/psaux/cf2*: Here.
+
+ * src/cff/Jamfile (_sources), src/cff/rules.mk (CFF_DRV_SRC,
+ CFF_DRV_H), src/cff/cff.c, src/cff/cffgload.c: Remove file
+ references.
+
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk, src/psaux/psaux.c
+ (PSAUX_DRV_SRC, PSAUX_DRV_H): Add file references.
+
+2017-09-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Tweak per-face LCD filtering controls.
+
+ Thing are simpler with a NULL-function pointer.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
+ pointer to the filter function.
+ (FT_LibraryRec): Remove unused `lcd_filter'.
+ (FT_Bitmap_LcdFilterFunc, ft_lcd_filter_fir): Move from here...
+ * include/freetype/ftlcdfil.h (FT_Bitmap_LcdFilterFunc,
+ ft_lcd_filter_fir): ... to here.
+
+ * src/base/ftobjs.c (ft_open_face_internal): NULL-initialize the
+ per-face filter.
+ (FT_Face_Properties): Set it.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Simplify.
+
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, FT_Libary_SetLcdFilter):
+ Minor.
+
+2017-09-24 Jonathan Kew <jfkthame@gmail.com>
+
+ [sfnt] Fix `premultiply_data' (#52092).
+
+ * src/sfnt/pngshim.c (premultiply_data): Don't use vector extension
+ if we have less than 16 bytes of data.
+
+2017-09-24 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Fix handling of ValueRecords.
+
+ For GPOS pair positioning format 1 the description of ValueRecords
+ in the OpenType specification (1.8.2, from today) is wrong – the
+ offset has to be taken from the parent structure; in this case the
+ `PairSet' table.
+
+ * src/otvalid/otvgpos.c (otv_PairSet_validate): Set `extra3'.
+ (otv_PairPos_validate): Adjust.
+
+2017-09-23 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
+
+ * src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
+ (otv_GPOS_validate): Implement it.
+
+2017-09-23 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Update common table handling to OpenType 1.8.2.
+
+ * src/otvalid/otvcommn.c (otv_Device_validate): Handle
+ VariationIndex subtable.
+ (otv_Lookup_validate): Handle MarkFilteringSet.
+
+2017-09-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Windows-style DLL versioning.
+
+ * build/windows/ftver.rc: New VERSIONINFO resource.
+ * build/windows/vc2010/freetype.vcxproj: Further improvements.
+
+2017-09-23 Ben Wagner <bungeman@google.com>
+
+ [truetype] Really fix #52082.
+
+ * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+
+2017-09-23 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Handle `GDEF' v1.2 and v1.3 tables.
+
+ No validation of variation stuff yet.
+
+ * src/otvalid/otvgdef.c (otv_MarkGlyphSets_validate): New function.
+ (otv_GDEF_validate): Implement it.
+
+2017-09-22 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Handle `BASE' v1.1 table.
+
+ No validation of variation stuff yet.
+
+ * src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
+
+2017-09-22 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Macros for 32bit offset support.
+
+ * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
+ OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
+
+2017-09-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Simplify Visual C++ 2010 project.
+
+ * build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded
+ configurations and tweak.
+
+2017-09-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow (#52082).
+
+ * src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS.
+
+2017-09-21 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix postscript name for default instance of variation fonts.
+
+ Problem reported by Behdad.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Test
+ `is_default_instance'.
+
+2017-09-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix `mmvar' array pointers, part 2.
+
+ The previous commit was incomplete.
+
+ * src/truetype/ttgxvar.c: Properly initialize sub-array offsets for
+ `master' also.
+
+2017-09-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix `mmvar' array pointers.
+
+ Without this change, clang's AddressSanitizer reports many runtime
+ errors due to misaligned addresses.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use multiples of pointer
+ size for sub-array offsets into `mmvar'.
+
+2017-09-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflows.
+
+ Changes triggered by
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3429
+
+ * src/truetype/ttinterp.c (Ins_SHPIX, Ins_DELTAP): Use NEG_LONG.
+ (Ins_MIAP): Use SUB_LONG.
+
+2017-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Fix DLL builds in Visual C++ project.
+
+ * build/windows/vc2010/freetype.vcxproj: Use DynamicLibrary in Debug
+ and Release configurations.
+ * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+ [_DLL]: Use Visual C++ extensions.
+
+2017-09-19 John Tytgat <John.Tytgat@esko.com>
+
+ [cff] Fix family name logic of pure CFF fontdata (#52056).
+
+ 1. If `FamilyName' is present in the CFF font, use this for
+ FT_Face's `family_name'.
+ 2. Otherwise, use the face name and chop off any subset prefix.
+ 3. If at this point FT_Face's `family_name' is set, use this
+ together with the full name to determine the style.
+ 4. Otherwise, use `CIDFontName' as FT_Face's `family_name'.
+ 5. If we don't have a valid style, use "Regular".
+
+ Previously, FT_Face's `family_name' entry for pure CFF fontdata
+ nearly always was the fontname itself, instead of the `FamilyName'
+ entry in the CFF font (assuming there is one).
+
+ * src/cff/cffobjs.c (cff_face_init) [pure_cff]: Implement it.
+
+2017-09-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Declutter Visual C++ 2010-2017 project.
+
+ * build/windows/vc2010/freetype.vcxproj: Use MaxSpeed (/02)
+ optimization for Release configuration throughout the project.
+
+
+----------------------------------------------------------------------------
+
+Copyright (C) 2017-2019 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.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/freetype/Jamfile b/freetype/Jamfile
index 9078a5fe..37b4d58c 100644
--- a/freetype/Jamfile
+++ b/freetype/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 top Jamfile.
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -208,12 +208,13 @@ rule RefDoc
actions RefDoc
{
- python $(FT2_SRC)/tools/docmaker/docmaker.py
+ python -m docwriter
--prefix=ft2
- --title=FreeType-2.9.1
+ --title=FreeType-2.10.1
--output=$(DOC_DIR)
$(FT2_INCLUDE)/freetype/*.h
$(FT2_INCLUDE)/freetype/config/*.h
+ $(FT2_INCLUDE)/freetype/cache/*.h
}
RefDoc refdoc ;
diff --git a/freetype/Jamrules b/freetype/Jamrules
index bdd04bcc..aa2ef5be 100644
--- a/freetype/Jamrules
+++ b/freetype/Jamrules
@@ -1,6 +1,6 @@
# FreeType 2 JamRules.
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/Makefile b/freetype/Makefile
index 0c7ee0ee..3f6a8bec 100644
--- a/freetype/Makefile
+++ b/freetype/Makefile
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/README b/freetype/README
index c23b99e1..8f3e2bc0 100644
--- a/freetype/README
+++ b/freetype/README
@@ -1,5 +1,5 @@
- FreeType 2.9.1
- ==============
+ FreeType 2.10.1
+ ===============
Homepage: https://www.freetype.org
@@ -15,8 +15,8 @@
Read the files `docs/INSTALL*' for installation instructions; see
the file `docs/LICENSE.TXT' for the available licenses.
- The FreeType 2 API reference is located in `docs/reference'; use the
- file `ft2-toc.html' as the top entry point. Additional
+ The FreeType 2 API reference is located in `docs/reference/site';
+ use the file `index.html' as the top entry point. Additional
documentation is available as a separate package from our sites. Go
to
@@ -24,13 +24,13 @@
and download one of the following files.
- freetype-doc-2.9.1.tar.bz2
- freetype-doc-2.9.1.tar.gz
- ftdoc291.zip
+ freetype-doc-2.10.1.tar.xz
+ freetype-doc-2.10.1.tar.gz
+ ftdoc2101.zip
To view the documentation online, go to
- https://www.freetype.org/freetype2/documentation.html
+ https://www.freetype.org/freetype2/docs/
Mailing Lists
@@ -71,7 +71,7 @@
----------------------------------------------------------------------
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/README.git b/freetype/README.git
index a3d7fc0c..95f40e1b 100644
--- a/freetype/README.git
+++ b/freetype/README.git
@@ -37,7 +37,7 @@ repository.
----------------------------------------------------------------------
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/autogen.sh b/freetype/autogen.sh
index ab90e641..af6cf342 100755
--- a/freetype/autogen.sh
+++ b/freetype/autogen.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/README b/freetype/builds/amiga/README
index 29e97d66..ff5e652c 100644
--- a/freetype/builds/amiga/README
+++ b/freetype/builds/amiga/README
@@ -1,7 +1,7 @@
README for the builds/amiga subdirectory.
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
Werner Lemberg and Detlef Wrkner.
This file is part of the FreeType project, and may only be used, modified,
@@ -26,7 +26,7 @@ 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
+Amiga web site (https://os.amigaworld.de/download.php?id=3) 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
diff --git a/freetype/builds/amiga/include/config/ftconfig.h b/freetype/builds/amiga/include/config/ftconfig.h
index 0217e0ed..7c5fa02d 100644
--- a/freetype/builds/amiga/include/config/ftconfig.h
+++ b/freetype/builds/amiga/include/config/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific configuration file (specification only). */
/* */
-/* Copyright 2005-2018 by */
+/* Copyright (C) 2005-2019 by */
/* Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/amiga/include/config/ftmodule.h b/freetype/builds/amiga/include/config/ftmodule.h
index f8baab56..9dc4631c 100644
--- a/freetype/builds/amiga/include/config/ftmodule.h
+++ b/freetype/builds/amiga/include/config/ftmodule.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType module selection. */
/* */
-/* Copyright 2005-2018 by */
+/* Copyright (C) 2005-2019 by */
/* Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/amiga/makefile b/freetype/builds/amiga/makefile
index 6a7700af..92da26d8 100644
--- a/freetype/builds/amiga/makefile
+++ b/freetype/builds/amiga/makefile
@@ -5,7 +5,7 @@
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/makefile.os4 b/freetype/builds/amiga/makefile.os4
index 0d340cf1..823b9b51 100644
--- a/freetype/builds/amiga/makefile.os4
+++ b/freetype/builds/amiga/makefile.os4
@@ -4,7 +4,7 @@
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/smakefile b/freetype/builds/amiga/smakefile
index f5de3089..ded76a0c 100644
--- a/freetype/builds/amiga/smakefile
+++ b/freetype/builds/amiga/smakefile
@@ -3,7 +3,7 @@
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/src/base/ftdebug.c b/freetype/builds/amiga/src/base/ftdebug.c
index f3ba48c9..4a738d3a 100644
--- a/freetype/builds/amiga/src/base/ftdebug.c
+++ b/freetype/builds/amiga/src/base/ftdebug.c
@@ -1,67 +1,69 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for amiga (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Wrkner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ * Debugging and logging component for amiga (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Detlef Wuerkner.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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().
+ * Based on the default `ftdebug.c' file,
+ * 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;
+ extern struct Library* DOSBase;
#else
- extern struct DOSIFace *IDOS;
+ extern struct DOSIFace* IDOS;
#endif
@@ -70,7 +72,7 @@
#include FT_INTERNAL_DEBUG_H
-#if defined( FT_DEBUG_LEVEL_ERROR )
+#ifdef FT_DEBUG_LEVEL_ERROR
/* documentation is in ftdebug.h */
@@ -100,7 +102,7 @@
KVPrintF( fmt, ap );
va_end( ap );
-/* exit( EXIT_FAILURE ); */
+ /* exit( EXIT_FAILURE ); */
}
@@ -111,9 +113,19 @@
int line,
const char* file )
{
+#if 0
+ /* activating the code in this block makes FreeType very chatty */
+ fprintf( stderr,
+ "%s:%d: error 0x%02x: %s\n",
+ file,
+ line,
+ error,
+ FT_Error_String( error ) );
+#else
FT_UNUSED( error );
FT_UNUSED( line );
FT_UNUSED( file );
+#endif
return 0;
}
@@ -124,9 +136,16 @@
#ifdef FT_DEBUG_LEVEL_TRACE
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
+ /* array of trace levels, initialized to 0; */
+ /* this gets adjusted at run-time */
+ static int ft_trace_levels_enabled[trace_count];
+ /* array of trace levels, always initialized to 0 */
+ static int ft_trace_levels_disabled[trace_count];
+
+ /* a pointer to either `ft_trace_levels_enabled' */
+ /* or `ft_trace_levels_disabled' */
+ int* ft_trace_levels;
/* define array of trace toggle names */
#define FT_TRACE_DEF( x ) #x ,
@@ -164,33 +183,51 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ ft_trace_levels = ft_trace_levels_disabled;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ ft_trace_levels = ft_trace_levels_enabled;
+ }
+
+
+ /**************************************************************************
+ *
+ * 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" ); */
+ /* const char* ft2_debug = ft_getenv( "FT2_DEBUG" ); */
char buf[256];
const char* ft2_debug = &buf[0];
-/* if ( ft2_debug ) */
+ /* if ( ft2_debug ) */
if ( GetVar( "FT2_DEBUG", (STRPTR)ft2_debug, 256, LV_VAR ) > 0 )
{
const char* p = ft2_debug;
@@ -250,14 +287,16 @@
{
/* special case for `any' */
for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
+ ft_trace_levels_enabled[n] = level;
}
else
- ft_trace_levels[found] = level;
+ ft_trace_levels_enabled[found] = level;
}
}
}
}
+
+ ft_trace_levels = ft_trace_levels_enabled;
}
@@ -287,11 +326,23 @@
}
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ /* nothing */
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ /* nothing */
+ }
+
+
#endif /* !FT_DEBUG_LEVEL_TRACE */
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
+
/* END */
diff --git a/freetype/builds/amiga/src/base/ftsystem.c b/freetype/builds/amiga/src/base/ftsystem.c
index babaeeb6..7e9dcb71 100644
--- a/freetype/builds/amiga/src/base/ftsystem.c
+++ b/freetype/builds/amiga/src/base/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2018 by */
+/* Copyright (C) 1996-2019 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -235,7 +235,7 @@ Free_VecPooled( APTR poolHeader,
/* messages during execution. */
/* */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
+#define FT_COMPONENT io
/* We use the macro STREAM_FILE for convenience to extract the */
/* system-specific stream handle from a given FreeType stream object */
diff --git a/freetype/builds/ansi/ansi-def.mk b/freetype/builds/ansi/ansi-def.mk
index 1484f962..9e1f57de 100644
--- a/freetype/builds/ansi/ansi-def.mk
+++ b/freetype/builds/ansi/ansi-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,9 @@ SEP := /
BUILD_DIR := $(TOP_DIR)/builds/ansi
PLATFORM := ansi
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
# The directory where all library files are placed.
#
diff --git a/freetype/builds/ansi/ansi.mk b/freetype/builds/ansi/ansi.mk
index c06732c8..eb97df4b 100644
--- a/freetype/builds/ansi/ansi.mk
+++ b/freetype/builds/ansi/ansi.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/beos/beos-def.mk b/freetype/builds/beos/beos-def.mk
index 89c54ddd..7a9d91c4 100644
--- a/freetype/builds/beos/beos-def.mk
+++ b/freetype/builds/beos/beos-def.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -21,6 +21,9 @@ SEP := /
BUILD_DIR := $(TOP_DIR)/builds/beos
PLATFORM := beos
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
# The directory where all library files are placed.
#
diff --git a/freetype/builds/beos/beos.mk b/freetype/builds/beos/beos.mk
index 619ceaff..180be585 100644
--- a/freetype/builds/beos/beos.mk
+++ b/freetype/builds/beos/beos.mk
@@ -2,7 +2,7 @@
# FreeType 2 configuration rules for a BeOS system
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/beos/detect.mk b/freetype/builds/beos/detect.mk
index 82f62059..19205eb2 100644
--- a/freetype/builds/beos/detect.mk
+++ b/freetype/builds/beos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/cmake/iOS.cmake b/freetype/builds/cmake/iOS.cmake
index c6da70c0..3a350d27 100644
--- a/freetype/builds/cmake/iOS.cmake
+++ b/freetype/builds/cmake/iOS.cmake
@@ -1,6 +1,6 @@
# iOS.cmake
#
-# Copyright 2014-2018 by
+# Copyright (C) 2014-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written by David Wimsey <david@wimsey.us>
diff --git a/freetype/builds/cmake/testbuild.sh b/freetype/builds/cmake/testbuild.sh
index 1fa3a186..65c481f5 100755
--- a/freetype/builds/cmake/testbuild.sh
+++ b/freetype/builds/cmake/testbuild.sh
@@ -1,6 +1,6 @@
#!/bin/sh -e
-# Copyright 2015-2018 by
+# Copyright (C) 2015-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/ansi-cc.mk b/freetype/builds/compiler/ansi-cc.mk
index 99fe8cb5..3c3fd736 100644
--- a/freetype/builds/compiler/ansi-cc.mk
+++ b/freetype/builds/compiler/ansi-cc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/bcc-dev.mk b/freetype/builds/compiler/bcc-dev.mk
index 8d67fa1a..62a51c45 100644
--- a/freetype/builds/compiler/bcc-dev.mk
+++ b/freetype/builds/compiler/bcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/bcc.mk b/freetype/builds/compiler/bcc.mk
index 02d48333..5ba6798b 100644
--- a/freetype/builds/compiler/bcc.mk
+++ b/freetype/builds/compiler/bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/emx.mk b/freetype/builds/compiler/emx.mk
index 2926b117..0c2aa31f 100644
--- a/freetype/builds/compiler/emx.mk
+++ b/freetype/builds/compiler/emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/gcc-dev.mk b/freetype/builds/compiler/gcc-dev.mk
index 48d28489..46dad39f 100644
--- a/freetype/builds/compiler/gcc-dev.mk
+++ b/freetype/builds/compiler/gcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/gcc.mk b/freetype/builds/compiler/gcc.mk
index 9c772394..b1ee409a 100644
--- a/freetype/builds/compiler/gcc.mk
+++ b/freetype/builds/compiler/gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/intelc.mk b/freetype/builds/compiler/intelc.mk
index e9236d34..3a197026 100644
--- a/freetype/builds/compiler/intelc.mk
+++ b/freetype/builds/compiler/intelc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/unix-lcc.mk b/freetype/builds/compiler/unix-lcc.mk
index 09fffeb6..9fe6753d 100644
--- a/freetype/builds/compiler/unix-lcc.mk
+++ b/freetype/builds/compiler/unix-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/visualage.mk b/freetype/builds/compiler/visualage.mk
index 10299da6..26c99f75 100644
--- a/freetype/builds/compiler/visualage.mk
+++ b/freetype/builds/compiler/visualage.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/visualc.mk b/freetype/builds/compiler/visualc.mk
index 74f498b6..17c8e765 100644
--- a/freetype/builds/compiler/visualc.mk
+++ b/freetype/builds/compiler/visualc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/watcom.mk b/freetype/builds/compiler/watcom.mk
index e455922f..2ec24ef8 100644
--- a/freetype/builds/compiler/watcom.mk
+++ b/freetype/builds/compiler/watcom.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/win-lcc.mk b/freetype/builds/compiler/win-lcc.mk
index 1356c1ca..fc1f23b3 100644
--- a/freetype/builds/compiler/win-lcc.mk
+++ b/freetype/builds/compiler/win-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/detect.mk b/freetype/builds/detect.mk
index eb7f7974..93b2861d 100644
--- a/freetype/builds/detect.mk
+++ b/freetype/builds/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/detect.mk b/freetype/builds/dos/detect.mk
index 0201f7b4..53c1caa5 100644
--- a/freetype/builds/dos/detect.mk
+++ b/freetype/builds/dos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -80,36 +80,46 @@ ifeq ($(PLATFORM),dos)
ifneq ($(findstring emx,$(MAKECMDGOALS)),) # EMX gcc
CONFIG_FILE := dos-emx.mk
CC := gcc
- emx: setup
+
.PHONY: emx
+ emx: setup
+ @cd .
endif
ifneq ($(findstring turboc,$(MAKECMDGOALS)),) # Turbo C
CONFIG_FILE := dos-tcc.mk
CC := tcc
- turboc: setup
+
.PHONY: turboc
+ turboc: setup
+ @cd .
endif
ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
CONFIG_FILE := dos-wat.mk
CC := wcc386
- watcom: setup
+
.PHONY: watcom
+ watcom: setup
+ @cd .
endif
ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C/C++ 32-bit
CONFIG_FILE := dos-bcc.mk
CC := bcc32
- borlandc: setup
+
.PHONY: borlandc
+ borlandc: setup
+ @cd .
endif
ifneq ($(findstring borlandc16,$(MAKECMDGOALS)),) # Borland C/C++ 16-bit
CONFIG_FILE := dos-bcc.mk
CC := bcc
- borlandc16: setup
+
.PHONY: borlandc16
+ borlandc16: setup
+ @cd .
endif
ifneq ($(findstring bash,$(SHELL)),) # check for bash
diff --git a/freetype/builds/dos/dos-def.mk b/freetype/builds/dos/dos-def.mk
index cb1154dc..a5c56b68 100644
--- a/freetype/builds/dos/dos-def.mk
+++ b/freetype/builds/dos/dos-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,9 @@ SEP := $(strip \ )
BUILD_DIR := $(TOP_DIR)/builds/dos
PLATFORM := dos
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
# The executable file extension (for tools), *with* leading dot.
#
diff --git a/freetype/builds/dos/dos-emx.mk b/freetype/builds/dos/dos-emx.mk
index dedcc3fc..dbba33e2 100644
--- a/freetype/builds/dos/dos-emx.mk
+++ b/freetype/builds/dos/dos-emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-gcc.mk b/freetype/builds/dos/dos-gcc.mk
index 53099ab4..c2813184 100644
--- a/freetype/builds/dos/dos-gcc.mk
+++ b/freetype/builds/dos/dos-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-wat.mk b/freetype/builds/dos/dos-wat.mk
index 1bd00e73..8c5062d3 100644
--- a/freetype/builds/dos/dos-wat.mk
+++ b/freetype/builds/dos/dos-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/exports.mk b/freetype/builds/exports.mk
index 59fe31a4..9dc21e27 100644
--- a/freetype/builds/exports.mk
+++ b/freetype/builds/exports.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/freetype.mk b/freetype/builds/freetype.mk
index 6f68a0f6..2b0ffaed 100644
--- a/freetype/builds/freetype.mk
+++ b/freetype/builds/freetype.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -75,7 +75,7 @@
# 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
+.PHONY: single multi objects library refdoc refdoc-venv
# default target -- build single objects and library
#
@@ -289,18 +289,53 @@ objects: $(OBJECTS_LIST)
library: $(PROJECT_LIBRARY)
-
+# Run `docwriter' in the current Python environment.
# Option `-B' disables generation of .pyc files (available since python 2.6)
#
+
+PYTHON ?= python
+PIP ?= pip
+
refdoc:
- python -B $(SRC_DIR)/tools/docmaker/docmaker.py \
- --prefix=ft2 \
- --title=FreeType-$(version) \
- --output=$(DOC_DIR) \
- $(PUBLIC_DIR)/*.h \
- $(PUBLIC_DIR)/config/*.h \
+ @echo Running docwriter...
+ $(PYTHON) -m docwriter \
+ --prefix=ft2 \
+ --title=FreeType-$(version) \
+ --output=$(DOC_DIR) \
+ $(PUBLIC_DIR)/*.h \
+ $(PUBLIC_DIR)/config/*.h \
$(PUBLIC_DIR)/cache/*.h
-
+ @echo Building static site...
+ cd $(DOC_DIR) && mkdocs build
+ @echo Done.
+
+# Variables for running `refdoc' with Python's `virtualenv'. The
+# environment is created in `DOC_DIR/env' and is gitignored.
+#
+# We still need to cd into `DOC_DIR' to build `mkdocs' because paths in
+# `mkdocs.yml' are relative to the current working directory.
+#
+VENV_NAME := env
+VENV_DIR := $(DOC_DIR)$(SEP)$(VENV_NAME)
+ENV_PYTHON := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PYTHON)
+ENV_PIP := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PIP)
+
+refdoc-venv:
+ @echo Setting up virtualenv for Python...
+ virtualenv --python=$(PYTHON) $(VENV_DIR)
+ @echo Installing docwriter...
+ $(ENV_PIP) install docwriter
+ @echo Running docwriter...
+ $(ENV_PYTHON) -m docwriter \
+ --prefix=ft2 \
+ --title=FreeType-$(version) \
+ --output=$(DOC_DIR) \
+ $(PUBLIC_DIR)/*.h \
+ $(PUBLIC_DIR)/config/*.h \
+ $(PUBLIC_DIR)/cache/*.h
+ @echo Building static site...
+ cd $(DOC_DIR) && $(VENV_NAME)$(SEP)$(BIN)$(SEP)python -m mkdocs build
+ @echo Done.
.PHONY: clean_project_std distclean_project_std
diff --git a/freetype/builds/link_dos.mk b/freetype/builds/link_dos.mk
index 3b0e8da5..4c9076a6 100644
--- a/freetype/builds/link_dos.mk
+++ b/freetype/builds/link_dos.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/link_std.mk b/freetype/builds/link_std.mk
index 8ba5e64d..7eedf1e7 100644
--- a/freetype/builds/link_std.mk
+++ b/freetype/builds/link_std.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/mac/README b/freetype/builds/mac/README
index f58e47d4..092487a8 100644
--- a/freetype/builds/mac/README
+++ b/freetype/builds/mac/README
@@ -46,7 +46,7 @@ environment by Metrowerks. GCC for MPW and Symantec
Required files are downloadable from:
- http://developer.apple.com/tools/mpw-tools/index.html
+ http://macintoshgarden.org/apps/macintosh-programmers-workshop
Also you can find documents how to update by MPW-PR.
@@ -54,7 +54,7 @@ environment by Metrowerks. GCC for MPW and Symantec
skeletons. Python bundled to Mac OS X is enough. For
classic MacOS, MacPython is available:
- http://homepages.cwi.nl/~jack/macpython/
+ https://homepages.cwi.nl/~jack/macpython/
MPW requires all files are typed by resource fork.
ResEdit bundled to MPW is enough. In Mac OS X,
@@ -280,7 +280,7 @@ APPENDIX I
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
+ https://developer.apple.com/library/archive/technotes/tn2078/
- filename length: the max length of file
name of FSRef is 255 chars (it is limit of HFS+),
@@ -314,7 +314,7 @@ APPENDIX I
of FontManager emulation without QuickDraw is
explained in
- http://www.gyve.org/~mpsuzuki/ats_benchmark.html
+ http://gyvern.ipc.hiroshima-u.ac.jp/~mpsuzuki/ats_benchmark.html
A-3. Framework Availabilities
-----------------------------
diff --git a/freetype/builds/mac/freetype-Info.plist b/freetype/builds/mac/freetype-Info.plist
index b3d114da..4b5d79b8 100644
--- a/freetype/builds/mac/freetype-Info.plist
+++ b/freetype/builds/mac/freetype-Info.plist
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
- "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+ "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
diff --git a/freetype/builds/mac/ftmac.c b/freetype/builds/mac/ftmac.c
index c45546ce..6adf800a 100644
--- a/freetype/builds/mac/ftmac.c
+++ b/freetype/builds/mac/ftmac.c
@@ -5,7 +5,7 @@
/* Mac FOND support. Written by just@letterror.com. */
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
/* */
-/* Copyright 1996-2018 by */
+/* Copyright (C) 1996-2019 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -780,9 +780,10 @@ typedef short ResourceIndex;
style = (StyleTable*)p;
p += sizeof ( StyleTable );
string_count = EndianS16_BtoN( *(short*)(p) );
+ string_count = FT_MIN( 64, string_count );
p += sizeof ( short );
- for ( i = 0; i < string_count && i < 64; i++ )
+ for ( i = 0; i < string_count; i++ )
{
names[i] = p;
p += names[i][0];
@@ -799,7 +800,7 @@ typedef short ResourceIndex;
ps_name[ps_name_len] = 0;
}
if ( style->indexes[face_index] > 1 &&
- style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
+ style->indexes[face_index] <= string_count )
{
unsigned char* suffixes = names[style->indexes[face_index] - 1];
diff --git a/freetype/builds/modules.mk b/freetype/builds/modules.mk
index 9a7a4a0a..8886fb3c 100644
--- a/freetype/builds/modules.mk
+++ b/freetype/builds/modules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/detect.mk b/freetype/builds/os2/detect.mk
index aaf78488..8e29450b 100644
--- a/freetype/builds/os2/detect.mk
+++ b/freetype/builds/os2/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,29 +40,37 @@ ifeq ($(PLATFORM),os2)
ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
CONFIG_FILE := os2-icc.mk
CC := icc
- visualage: setup
+
.PHONY: visualage
+ visualage: setup
+ @cd .
endif
ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
CONFIG_FILE := os2-wat.mk
CC := wcc386
- watcom: setup
+
.PHONY: watcom
+ watcom: setup
+ @cd .
endif
ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C++ 32-bit
CONFIG_FILE := os2-bcc.mk
CC := bcc32
- borlandc: setup
+
.PHONY: borlandc
+ borlandc: setup
+ @cd .
endif
ifneq ($(findstring devel,$(MAKECMDGOALS)),) # development target
CONFIG_FILE := os2-dev.mk
CC := gcc
- devel: setup
+
.PHONY: devel
+ devel: setup
+ @cd .
endif
setup: std_setup
diff --git a/freetype/builds/os2/os2-def.mk b/freetype/builds/os2/os2-def.mk
index 7ad1ffba..7a1699e3 100644
--- a/freetype/builds/os2/os2-def.mk
+++ b/freetype/builds/os2/os2-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,10 @@ SEP := $(strip \ )
BUILD_DIR := $(TOP_DIR)/builds/os2
PLATFORM := os2
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
+
# The executable file extension (for tools), *with* leading dot.
#
E := .exe
diff --git a/freetype/builds/os2/os2-dev.mk b/freetype/builds/os2/os2-dev.mk
index 505a754f..1b83836a 100644
--- a/freetype/builds/os2/os2-dev.mk
+++ b/freetype/builds/os2/os2-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/os2-gcc.mk b/freetype/builds/os2/os2-gcc.mk
index 65026b10..63a3ed1b 100644
--- a/freetype/builds/os2/os2-gcc.mk
+++ b/freetype/builds/os2/os2-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/symbian/bld.inf b/freetype/builds/symbian/bld.inf
index 9c6d8dca..0fa16c3e 100644
--- a/freetype/builds/symbian/bld.inf
+++ b/freetype/builds/symbian/bld.inf
@@ -2,7 +2,7 @@
// FreeType 2 project for the symbian platform
//
-// Copyright 2008-2018 by
+// Copyright (C) 2008-2019 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/symbian/freetype.mmp b/freetype/builds/symbian/freetype.mmp
index 4e4a041e..bfbbcaf2 100644
--- a/freetype/builds/symbian/freetype.mmp
+++ b/freetype/builds/symbian/freetype.mmp
@@ -2,7 +2,7 @@
// FreeType 2 makefile for the symbian platform
//
-// Copyright 2008-2018 by
+// Copyright (C) 2008-2019 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/toplevel.mk b/freetype/builds/toplevel.mk
index 7ce0ed8d..333b775c 100644
--- a/freetype/builds/toplevel.mk
+++ b/freetype/builds/toplevel.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -191,13 +191,13 @@ work := $(word 2,$(work))
patch := $(subst |,$(space),$(work))
patch := $(firstword $(patch))
-ifneq ($(findstring x0x,x$(patch)x),)
- version := $(major).$(minor)
- winversion := $(major)$(minor)
-else
+# ifneq ($(findstring x0x,x$(patch)x),)
+# version := $(major).$(minor)
+# winversion := $(major)$(minor)
+# else
version := $(major).$(minor).$(patch)
winversion := $(major)$(minor)$(patch)
-endif
+# endif
# This target builds the tarballs.
@@ -208,7 +208,7 @@ endif
dist:
-rm -rf tmp
rm -f freetype-$(version).tar.gz
- rm -f freetype-$(version).tar.bz2
+ rm -f freetype-$(version).tar.xz
rm -f ft$(winversion).zip
for d in `find . -wholename '*/.git' -prune \
@@ -226,23 +226,16 @@ dist:
ln -s $$currdir/$$f tmp/$$f ; \
done
- @# Prevent generation of .pyc files. Python follows (soft) links if
- @# the link's directory is write protected, so we have temporarily
- @# disable write access here too.
- chmod -w src/tools/docmaker
-
cd tmp ; \
$(MAKE) devel ; \
$(MAKE) do-dist
- chmod +w src/tools/docmaker
-
mv tmp freetype-$(version)
tar -H ustar -chf - freetype-$(version) \
| gzip -9 -c > freetype-$(version).tar.gz
tar -H ustar -chf - freetype-$(version) \
- | bzip2 -c > freetype-$(version).tar.bz2
+ | xz -c > freetype-$(version).tar.xz
@# Use CR/LF for zip files.
zip -lr9 ft$(winversion).zip freetype-$(version)
@@ -274,4 +267,8 @@ do-dist: distclean refdoc
cp $(CONFIG_GUESS) builds/unix
cp $(CONFIG_SUB) builds/unix
+ @# Remove intermediate files created by the `refdoc' target.
+ rm -rf docs/reference/markdown
+ rm -f docs/reference/mkdocs.yml
+
# EOF
diff --git a/freetype/builds/unix/aclocal.m4 b/freetype/builds/unix/aclocal.m4
index eb7517a9..12b4b994 100644
--- a/freetype/builds/unix/aclocal.m4
+++ b/freetype/builds/unix/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -736,7 +736,6 @@ _LT_CONFIG_SAVE_COMMANDS([
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $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.
# Provide generalized library-building support services.
diff --git a/freetype/builds/unix/configure b/freetype/builds/unix/configure
deleted file mode 100755
index 2d05de2a..00000000
--- a/freetype/builds/unix/configure
+++ /dev/null
@@ -1,17204 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for FreeType 2.9.1.
-#
-# Report bugs to <freetype@nongnu.org>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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
-
-
-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
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (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
-
-
-# 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.
-as_myself=
-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
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="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_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-
- test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
- ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- PATH=/empty FPATH=/empty; export PATH FPATH
- test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
- || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: freetype@nongnu.org about your system, including any
-$0: error possibly output before this message. Then install
-$0: a modern shell, or manually run the script under such a
-$0: shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- 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_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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'`
-
-# 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_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # 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; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-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 -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-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='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/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=
-
-# Identity of this package.
-PACKAGE_NAME='FreeType'
-PACKAGE_TARNAME='freetype'
-PACKAGE_VERSION='2.9.1'
-PACKAGE_STRING='FreeType 2.9.1'
-PACKAGE_BUGREPORT='freetype@nongnu.org'
-PACKAGE_URL=''
-
-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_header_list=
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-build_libtool_libs
-wl
-hardcode_libdir_flag_spec
-LIBSSTATIC_CONFIG
-LIBS_PRIVATE
-REQUIRES_PRIVATE
-ftmac_c
-LIB_CLOCK_GETTIME
-HARFBUZZ_LIBS
-HARFBUZZ_CFLAGS
-LIBPNG_LIBS
-LIBPNG_CFLAGS
-BZIP2_LIBS
-BZIP2_CFLAGS
-ZLIB_LIBS
-ZLIB_CFLAGS
-XX_ANSIFLAGS
-XX_CFLAGS
-FTSYS_SRC
-INSTALL_FT2_CONFIG
-MKDIR_P
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-EXEEXT_BUILD
-CC_BUILD
-RC
-LT_SYS_LIBRARY_PATH
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-MANIFEST_TOOL
-AWK
-RANLIB
-STRIP
-ac_ct_AR
-AR
-LN_S
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LD
-FGREP
-EGREP
-GREP
-SED
-LIBTOOL
-OBJDUMP
-DLLTOOL
-AS
-PKG_CONFIG_LIBDIR
-PKG_CONFIG_PATH
-PKG_CONFIG
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-ft_version
-version_info
-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_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_aix_soname
-with_gnu_ld
-with_sysroot
-enable_libtool_lock
-enable_biarch_config
-enable_freetype_config
-enable_largefile
-enable_mmap
-with_zlib
-with_bzip2
-with_png
-with_harfbuzz
-with_old_mac_fonts
-with_fsspec
-with_fsref
-with_quickdraw_toolbox
-with_quickdraw_carbon
-with_ats
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-PKG_CONFIG
-PKG_CONFIG_PATH
-PKG_CONFIG_LIBDIR
-LT_SYS_LIBRARY_PATH
-ZLIB_CFLAGS
-ZLIB_LIBS
-BZIP2_CFLAGS
-BZIP2_LIBS
-LIBPNG_CFLAGS
-LIBPNG_LIBS
-HARFBUZZ_CFLAGS
-HARFBUZZ_LIBS'
-
-
-# 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= ;;
- *) 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_fn_error $? "invalid feature name: $ac_useropt"
- 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_fn_error $? "invalid feature name: $ac_useropt"
- 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_fn_error $? "invalid package name: $ac_useropt"
- 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_fn_error $? "invalid package name: $ac_useropt"
- 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_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- 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_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $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_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- 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.9.1 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]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of FreeType 2.9.1:";;
- 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)
- --enable-biarch-config install biarch ftconfig.h to support multiple
- architectures by single file
- --enable-freetype-config
- install freetype-config
- --disable-largefile omit support for large files
- --disable-mmap do not check mmap() and do not use
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
- both]
- --with-aix-soname=aix|svr4|both
- shared library versioning (aka "SONAME") variant to
- provide on AIX, [default=aix].
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
- compiler's sysroot if not specified).
- --with-zlib=[yes|no|auto]
- use system zlib instead of internal library
- [default=auto]
- --with-bzip2=[yes|no|auto]
- support bzip2 compressed fonts [default=auto]
- --with-png=[yes|no|auto]
- support png compressed OpenType embedded bitmaps
- [default=auto]
- --with-harfbuzz=[yes|no|auto]
- improve auto-hinting of OpenType fonts
- [default=auto]
- --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)
-
-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 (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
- PKG_CONFIG path to pkg-config utility
- PKG_CONFIG_PATH
- directories to add to pkg-config's search path
- PKG_CONFIG_LIBDIR
- path overriding pkg-config's built-in search path
- LT_SYS_LIBRARY_PATH
- User-defined run-time library search path.
- ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
- ZLIB_LIBS linker flags for ZLIB, overriding pkg-config
- BZIP2_CFLAGS
- C compiler flags for BZIP2, overriding pkg-config
- BZIP2_LIBS linker flags for BZIP2, overriding pkg-config
- LIBPNG_CFLAGS
- C compiler flags for LIBPNG, overriding pkg-config
- LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config
- HARFBUZZ_CFLAGS
- C compiler flags for HARFBUZZ, overriding pkg-config
- HARFBUZZ_LIBS
- linker flags for HARFBUZZ, overriding pkg-config
-
-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.9.1
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-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
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); 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 $2
-
-/* 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 $2 ();
-/* 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_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ---------------------------------- ##
-## Report this to freetype@nongnu.org ##
-## ---------------------------------- ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=0 ac_mid=0
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid; break
-else
- as_fn_arith $ac_mid + 1 && ac_lo=$as_val
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=-1 ac_mid=-1
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=$ac_mid; break
-else
- as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- 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
- as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid
-else
- as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
- else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (($2) < 0)
- {
- long int i = longval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ($2))
- 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
-if ac_fn_c_try_run "$LINENO"; then :
- echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
- ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
- fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- as_decl_name=`echo $2|sed 's/ *(.*//'`
- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
- (void) $as_decl_use;
-#else
- (void) $as_decl_name;
-#endif
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-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.9.1, which was
-generated by GNU Autoconf 2.69. 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) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- 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:${as_lineno-$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= ;; #(
- *) { eval $ac_var=; 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
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- 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
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- 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
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- 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'; as_fn_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
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_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
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-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 /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$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" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-as_fn_append ac_header_list " stdlib.h"
-as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_header_list " sys/param.h"
-# 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$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_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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/VERSIONS.TXT'!
-
-version_info='22:1:16'
-
-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_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-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_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; 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_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-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:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; 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_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-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
-
-
-
-
-# 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- 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:${as_lineno-$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:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-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:${as_lineno-$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:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-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:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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=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:${as_lineno-$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 ${ac_cv_prog_CPP+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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 "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
- ac_pt_PKG_CONFIG=$PKG_CONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_pt_PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_pt_PKG_CONFIG" = x; then
- PKG_CONFIG=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- PKG_CONFIG=$ac_pt_PKG_CONFIG
- fi
-else
- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=0.24
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- PKG_CONFIG=""
- fi
-fi
-
-case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:${as_lineno-$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.4.6'
-macro_revision='2.4.6'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain=$ac_aux_dir/ltmain.sh
-
-# Backslashify 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'
-
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='printf %s\n'
-else
- # Use this function as a fallback that always works.
- func_fallback_echo ()
- {
- eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
- }
- ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
- $ECHO ""
-}
-
-case $ECHO in
- printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
- print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
- *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_path_SED+:} false; 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
- { ac_script=; unset 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
- fi
-else
- ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 ${ac_cv_path_GREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_FGREP=$FGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$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 no = "$withval" || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test yes = "$GCC"; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:${as_lineno-$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 yes = "$with_gnu_ld"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${lt_cv_path_LD+:} false; 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 no != "$with_gnu_ld" && break
- ;;
- *)
- test yes != "$with_gnu_ld" && 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:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; 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:${as_lineno-$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:${as_lineno-$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 ${lt_cv_path_NM+:} false; 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
- # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
- case $build_os in
- mingw*) lt_bad_file=conftest.nm/nofile ;;
- *) lt_bad_file=/dev/null ;;
- esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
- *$lt_bad_file* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break 2
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break 2
- ;;
- *)
- 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:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test no != "$lt_cv_path_NM"; then
- NM=$lt_cv_path_NM
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- if test -n "$DUMPBIN"; then :
- # Let the user override the test.
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in dumpbin "link -dump"
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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 "link -dump"
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- DUMPBIN=$ac_ct_DUMPBIN
- fi
-fi
-
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
- *COFF*)
- DUMPBIN="$DUMPBIN -symbols -headers"
- ;;
- *)
- DUMPBIN=:
- ;;
- esac
- fi
-
- if test : != "$DUMPBIN"; then
- NM=$DUMPBIN
- fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; 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:$LINENO: $ac_compile\"" >&5)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: 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:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; 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* | cegcc*)
- # 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;
- ;;
-
- mint*)
- # On MiNT this can take a long time and run out of memory.
- 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;
- ;;
-
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
- # 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
- ;;
-
- os2*)
- # The test takes a long time on OS/2.
- lt_cv_sys_max_cmd_len=8192
- ;;
-
- 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" && \
- test undefined != "$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`env echo "$teststring$teststring" 2>/dev/null` \
- = "X$teststring$teststring"; } >/dev/null 2>&1 &&
- test 17 != "$i" # 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:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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"}
-
-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:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
- ;;
- esac
- ;;
- *-*-cygwin* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
- ;;
- esac
- ;;
- * ) # unhandled hosts (and "normal" native builds)
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
-esac
-
-fi
-
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- #assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
- ;;
- esac
- ;;
-esac
-
-fi
-
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$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
- cygwin* | mingw* | pw32* | cegcc*)
- if test yes != "$GCC"; then
- reload_cmds=false
- fi
- ;;
- darwin*)
- if test yes = "$GCC"; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; 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
-# that 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
- # Keep this pattern in sync with the one in func_win32_libid.
- lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-cegcc*)
- # use the weaker test based on 'objdump'. See mingw*.
- lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-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
- ;;
-
-haiku*)
- 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])(-bit)?( [LM]SB)? 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 glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | 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* | bitrig*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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
- ;;
-os2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
- case $host_os in
- mingw* | pw32*)
- if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
- want_nocaseglob=yes
- else
- file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
- fi
- ;;
- esac
-fi
-
-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}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
- # two different shell functions defined in ltmain.sh;
- # decide which one to use based on capabilities of $DLLTOOL
- case `$DLLTOOL --help 2>&1` in
- *--identify-strict*)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
- ;;
- *)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
- ;;
- esac
- ;;
-*)
- # fallback: assume linklib IS sharedlib
- lt_cv_sharedlib_from_linklib_cmd=$ECHO
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- for ac_prog in ar
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AR" && break
- done
-fi
-if test -z "$AR"; then
- ac_ct_AR=$AR
- for ac_prog in ar
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_AR" && break
-done
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- AR=$ac_ct_AR
- fi
-fi
-
-: ${AR=ar}
-: ${AR_FLAGS=cru}
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ar_at_file=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- echo conftest.$ac_objext > conftest.lst
- lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -eq "$ac_status"; then
- # Ensure the archiver fails upon bogus file names.
- rm -f conftest.$ac_objext libconftest.a
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -ne "$ac_status"; then
- lt_cv_ar_at_file=@
- fi
- fi
- rm -f conftest.* libconftest.a
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
-
-if test no = "$lt_cv_ar_at_file"; then
- archiver_list_spec=
-else
- archiver_list_spec=$lt_cv_ar_at_file
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
-
-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
- bitrig* | openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
- darwin*)
- lock_old_archive_extraction=yes ;;
- *)
- lock_old_archive_extraction=no ;;
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 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:${as_lineno-$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 ${lt_cv_sys_global_symbol_pipe+:} false; 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* | cegcc*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*)
- if test ia64 = "$host_cpu"; 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
-
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
- # Adjust the below global symbol transforms to fixup imported variables.
- lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
- lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
- lt_c_name_lib_hook="\
- -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
- -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
-else
- # Disable hooks by default.
- lt_cv_sys_global_symbol_to_import=
- lt_cdecl_hook=
- lt_c_name_hook=
- lt_c_name_lib_hook=
-fi
-
-# 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"\
-$lt_cdecl_hook\
-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
-" -e 's/^$symcode$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"\
-$lt_c_name_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
-
-# Transform an extracted symbol line into symbol name with lib prefix and
-# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
-$lt_c_name_lib_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/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,
- # D for any global variable and I for any imported 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};"\
-" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
-" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
-" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
-" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
-" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print f,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
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # 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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { { eval echo "\"\$as_me\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
-/* DATA imports from DLLs on WIN32 can't be const, because runtime
- relocations are performed -- see ld's documentation on pseudo-relocs. */
-# define LT_DLSYM_CONST
-#elif defined __osf__
-/* This system does not cope well with relocations in const data. */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#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. */
-LT_DLSYM_CONST struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$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_globsym_save_LIBS=$LIBS
- lt_globsym_save_CFLAGS=$CFLAGS
- LIBS=conftstm.$ac_objext
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest$ac_exeext; then
- pipe_works=yes
- fi
- LIBS=$lt_globsym_save_LIBS
- CFLAGS=$lt_globsym_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 yes = "$pipe_works"; 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:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
- nm_file_list_spec='@'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
-
-# Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
- withval=$with_sysroot;
-else
- with_sysroot=no
-fi
-
-
-lt_sysroot=
-case $with_sysroot in #(
- yes)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
- fi
- ;; #(
- /*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
- ;; #(
- no|'')
- ;; #(
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
- as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
- ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-: ${lt_DD:=$DD}
-if test -z "$lt_DD"; then
- ac_path_lt_DD_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 dd; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_lt_DD" || continue
-if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
-fi
- $ac_path_lt_DD_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_lt_DD"; then
- :
- fi
-else
- ac_cv_path_lt_DD=$lt_DD
-fi
-
-rm -f conftest.i conftest2.i conftest.out
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-lt_cv_truncate_bin=
-if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
-fi
-rm -f conftest.i conftest2.i conftest.out
-test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
-
-
-
-
-
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
- enableval=$enable_libtool_lock;
-fi
-
-test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test yes = "$lt_cv_prog_gnu_ld"; 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*
- ;;
-
-mips64*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- emul="${emul}32"
- ;;
- *64-bit*)
- emul="${emul}64"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *MSB*)
- emul="${emul}btsmip"
- ;;
- *LSB*)
- emul="${emul}ltsmip"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *N32*)
- emul="${emul}n32"
- ;;
- esac
- LD="${LD-ld} -m $emul"
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly. Note that the listed cases only cover the
- # situations where additional linker options are needed (such as when
- # doing 32-bit compilation for a host where ld defaults to 64-bit, or
- # vice versa); the common cases where no linker options are needed do
- # not appear in the list.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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*)
- case `/usr/bin/file conftest.o` in
- *x86-64*)
- LD="${LD-ld} -m elf32_x86_64"
- ;;
- *)
- LD="${LD-ld} -m elf_i386"
- ;;
- esac
- ;;
- powerpc64le-*linux*)
- LD="${LD-ld} -m elf32lppclinux"
- ;;
- 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"
- ;;
- powerpcle-*linux*)
- LD="${LD-ld} -m elf64lppc"
- ;;
- 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:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_cc_needs_belf=yes
-else
- lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- 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:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test yes != "$lt_cv_cc_needs_belf"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS=$SAVE_CFLAGS
- fi
- ;;
-*-*solaris*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*)
- case $host in
- i?86-*-solaris*|x86_64-*-solaris*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- sparc*-*-solaris*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
- if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
- LD=${LD-ld}_sol2
- fi
- ;;
- *)
- 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
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MANIFEST_TOOL"; then
- ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-if test -n "$MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
- ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
- # Extract the first word of "mt", so it can be a program name with args.
-set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_MANIFEST_TOOL"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-if test -n "$ac_ct_MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_MANIFEST_TOOL" = x; then
- MANIFEST_TOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
- fi
-else
- MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-fi
-
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_path_mainfest_tool=no
- echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
- $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
- cat conftest.err >&5
- if $GREP 'Manifest Tool' conftest.out > /dev/null; then
- lt_cv_path_mainfest_tool=yes
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test yes != "$lt_cv_path_mainfest_tool"; then
- MANIFEST_TOOL=:
-fi
-
-
-
-
-
-
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LIPO="lipo"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL="otool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL64="otool64"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- OTOOL64=$ac_ct_OTOOL64
- fi
-else
- OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; 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 there is a non-empty error log, and "single_module"
- # appears in it, assume the flag caused a linker warning
- if test -s conftest.err && $GREP single_module conftest.err; then
- cat conftest.err >&5
- # Otherwise, if the output was created with a 0 exit code from
- # the compiler, it worked.
- elif test -f libconftest.dylib && test 0 = "$_lt_result"; 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:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_ld_exported_symbols_list=yes
-else
- lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_force_load=no
- cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
- echo "$RANLIB libconftest.a" >&5
- $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
- _lt_result=$?
- if test -s conftest.err && $GREP force_load conftest.err; then
- cat conftest.err >&5
- elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
- lt_cv_ld_force_load=yes
- else
- cat conftest.err >&5
- fi
- rm -f conftest.err libconftest.a conftest conftest.c
- rm -rf conftest.dSYM
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&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 yes = "$lt_cv_apple_cc_single_mod"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test yes = "$lt_cv_ld_exported_symbols_list"; 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" && test no = "$lt_cv_ld_force_load"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-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`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in dlfcn.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-# Set options
-enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AS="${ac_tool_prefix}as"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AS="as"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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; lt_p=${PACKAGE-default}
- case $withval in
- yes|no) pic_mode=$withval ;;
- *)
- pic_mode=default
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for lt_pkg in $withval; do
- IFS=$lt_save_ifs
- if test "X$lt_pkg" = "X$lt_p"; then
- pic_mode=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- pic_mode=default
-fi
-
-
-
-
-
-
-
-
- # 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
-
-
-
-
-
-
-
-
- shared_archive_member_spec=
-case $host,$enable_shared in
-power*-*-aix[5-9]*,yes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
-$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
-
-# Check whether --with-aix-soname was given.
-if test "${with_aix_soname+set}" = set; then :
- withval=$with_aix_soname; case $withval in
- aix|svr4|both)
- ;;
- *)
- as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
- ;;
- esac
- lt_cv_with_aix_soname=$with_aix_soname
-else
- if ${lt_cv_with_aix_soname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_with_aix_soname=aix
-fi
-
- with_aix_soname=$lt_cv_with_aix_soname
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
-$as_echo "$with_aix_soname" >&6; }
- if test aix != "$with_aix_soname"; then
- # For the AIX way of multilib, we name the shared archive member
- # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
- # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
- # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
- # the AIX toolchain works better with OBJECT_MODE set (default 32).
- if test 64 = "${OBJECT_MODE-32}"; then
- shared_archive_member_spec=shr_64
- else
- shared_archive_member_spec=shr
- fi
- fi
- ;;
-*)
- with_aix_soname=aix
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-# 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:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; 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:${as_lineno-$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 set != "${COLLECT_NAMES+set}"; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# 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
-
-func_cc_basename $compiler
-cc_basename=$func_cc_basename_result
-
-
-# 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:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; 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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; 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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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 yes = "$GCC"; then
- case $cc_basename in
- nvcc*)
- lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
- *)
- lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
- esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; 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" ## exclude from sc_useless_quotes_in_assignment
- # 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; 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=
-
-
- if test yes = "$GCC"; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- lt_prog_compiler_pic='-fPIC'
- ;;
-
- 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* | cegcc*)
- # 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'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- haiku*)
- # PIC is the default for Haiku.
- # The "-static" flag exists, but is broken.
- lt_prog_compiler_static=
- ;;
-
- hpux*)
- # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
- # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
- # sets the default TLS model and affects inlining.
- case $host_cpu in
- hppa*64*)
- # +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
-
- case $cc_basename in
- nvcc*) # Cuda Compiler Driver 2.2
- lt_prog_compiler_wl='-Xlinker '
- if test -n "$lt_prog_compiler_pic"; then
- lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
- fi
- ;;
- 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 ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- case $cc_basename in
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # 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'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- 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 | kopensolaris*-gnu | gnu*)
- case $cc_basename in
- # old Intel for x86_64, which still supported -KPIC.
- ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- # icc used to be incompatible with GCC.
- # ICC 10 doesn't accept -KPIC any more.
- icc* | ifort*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- # Lahey Fortran 8.1.
- lf95*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # 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* | bgxl* | bgf* | mpixl*)
- # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-qpic'
- lt_prog_compiler_static='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
- # 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=''
- ;;
- *Sun\ F* | *Sun*Fortran*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Qoption ld '
- ;;
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Intel*\ [CF]*Compiler*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- *Portland\ Group*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- 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* | sunf77* | sunf90* | sunf95*)
- 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 that 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:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_pic_works+:} false; 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" ## exclude from sc_useless_quotes_in_assignment
- # 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_pic_works"; 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:${as_lineno-$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 ${lt_cv_prog_compiler_static_works+:} false; 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 "$_lt_linker_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_static_works"; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links=nottested
-if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test no = "$hard_links"; then
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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_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* | cegcc*)
- # 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 yes != "$GCC"; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd* | bitrig*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
-
- # On some targets, GNU ld is compatible enough with the native linker
- # that we're better off using the native interface for both.
- lt_use_gnu_ld_interface=no
- if test yes = "$with_gnu_ld"; then
- case $host_os in
- aix*)
- # The AIX port of GNU ld has always aspired to compatibility
- # with the native linker. However, as the warning in the GNU ld
- # block says, versions before 2.19.5* couldn't really create working
- # shared libraries, regardless of the interface used.
- case `$LD -v 2>&1` in
- *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
- *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
- *\ \(GNU\ Binutils\)\ [3-9]*) ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- fi
-
- if test yes = "$lt_use_gnu_ld_interface"; 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 | $SED -e 's/(^)\+)\s\+//' 2>&1` in
- *GNU\ gold*) supports_anon_versioning=yes ;;
- *\ [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 ia64 != "$host_cpu"; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, 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 install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_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* | cegcc*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- export_dynamic_flag_spec='$wl--export-all-symbols'
- 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/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
- exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- 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, use it as
- # is; otherwise, prepend EXPORTS...
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; 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
- ;;
-
- haiku*)
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- link_all_deplibs=yes
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- ;;
-
- 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 | kopensolaris*-gnu)
- tmp_diet=no
- if test linux-dietlibc = "$host_os"; 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 no = "$tmp_diet"
- then
- tmp_addflag=' $pic_flag'
- 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; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95* | pgfortran*)
- # 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; func_echo_all \"$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' ;;
- lf95*) # Lahey Fortran 8.1
- whole_archive_flag_spec=
- tmp_sharedflag='--shared' ;;
- nagfor*) # NAGFOR 5.3
- tmp_sharedflag='-Wl,-shared' ;;
- xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- nvcc*) # Cuda Compiler Driver 2.2
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- ;;
- 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; func_echo_all \"$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 yes = "$supports_anon_versioning"; 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
- tcc*)
- export_dynamic_flag_spec='-rdynamic'
- ;;
- xlf* | bgf* | bgxlf* | mpixlf*)
- # 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='$wl-rpath $wl$libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test yes = "$supports_anon_versioning"; 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 $linker_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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 cannot
-*** 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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 no = "$ld_shlibs"; 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 yes = "$GCC" && 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 ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm.
- # Without the "-l" option, or with the "-B" option, AIX nm treats
- # weak defined symbols like other global defined symbols, whereas
- # GNU nm marks them as "W".
- # While the 'weak' keyword is ignored in the Export File, we need
- # it in the Import File for the 'aix-soname' feature, so we have
- # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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
- # have runtime linking enabled, and use it for executables.
- # For shared libraries, we enable/disable runtime linking
- # depending on the kind of the shared library created -
- # when "with_aix_soname,aix_use_runtimelinking" is:
- # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
- # "aix,yes" lib.so shared, rtl:yes, for executables
- # lib.a static archive
- # "both,no" lib.so.V(shr.o) shared, rtl:yes
- # lib.a(lib.so.V) shared, rtl:no, for executables
- # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a(lib.so.V) shared, rtl:no
- # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a static archive
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
- # With aix-soname=svr4, we create the lib.so.V shared archives only,
- # so we don't have lib.a shared libs to link our executables.
- # We have to force runtime linking in this case.
- aix_use_runtimelinking=yes
- LDFLAGS="$LDFLAGS -Wl,-brtl"
- fi
- ;;
- 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,'
- case $with_aix_soname,$aix_use_runtimelinking in
- aix,*) ;; # traditional, no import file
- svr4,* | *,yes) # use import file
- # The Import File defines what to hardcode.
- hardcode_direct=no
- hardcode_direct_absolute=no
- ;;
- esac
-
- if test yes = "$GCC"; 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 yes = "$aix_use_runtimelinking"; then
- shared_flag="$shared_flag "'$wl-G'
- fi
- # Need to ensure runtime linking is disabled for the traditional
- # shared library, or the linker may eventually find shared libraries
- # /with/ Import File - we do not want to mix them.
- shared_flag_aix='-shared'
- shared_flag_svr4='-shared $wl-G'
- else
- # not using gcc
- if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then
- shared_flag='$wl-G'
- else
- shared_flag='$wl-bM:SRE'
- fi
- shared_flag_aix='$wl-bM:SRE'
- shared_flag_svr4='$wl-G'
- fi
- fi
-
- export_dynamic_flag_spec='$wl-bexpall'
- # 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,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_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 "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
- else
- if test ia64 = "$host_cpu"; 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.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_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 "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-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'
- if test yes = "$with_gnu_ld"; then
- # We only use this code for GNU lds that support --whole-archive.
- whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
- else
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- fi
- archive_cmds_need_lc=yes
- archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
- # -brtl affects multiple linker settings, -berok does not and is overridden later
- compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
- if test svr4 != "$with_aix_soname"; then
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
- fi
- if test aix != "$with_aix_soname"; then
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
- else
- # used by -dlpreopen to get the symbols
- archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
- fi
- archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
- 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* | cegcc*)
- # 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.
- case $cc_basename in
- cl*)
- # Native MSVC
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- file_list_spec='@'
- # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp "$export_symbols" "$output_objdir/$soname.def";
- echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
- else
- $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
- fi~
- $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
- linknames='
- # The linker will not automatically build a static lib if we build a DLL.
- # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
- enable_shared_with_static_runtimes=yes
- exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
- # Don't use ranlib
- old_postinstall_cmds='chmod 644 $oldlib'
- postlink_cmds='lt_outputfile="@OUTPUT@"~
- lt_tool_outputfile="@TOOL_OUTPUT@"~
- case $lt_outputfile in
- *.exe|*.EXE) ;;
- *)
- lt_outputfile=$lt_outputfile.exe
- lt_tool_outputfile=$lt_tool_outputfile.exe
- ;;
- esac~
- if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
- $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
- $RM "$lt_outputfile.manifest";
- fi'
- ;;
- *)
- # Assume MSVC wrapper
- 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 `func_echo_all "$deplibs" | $SED '\''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'
- enable_shared_with_static_runtimes=yes
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
-
-
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- if test yes = "$lt_cv_ld_force_load"; then
- whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-
- else
- whole_archive_flag_spec=''
- fi
- link_all_deplibs=yes
- allow_undefined_flag=$_lt_dar_allow_undefined
- case $cc_basename in
- ifort*|nagfor*) _lt_dar_can_shared=yes ;;
- *) _lt_dar_can_shared=$GCC ;;
- esac
- if test yes = "$_lt_dar_can_shared"; then
- output_verbose_link_cmd=func_echo_all
- 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
- ;;
-
- # 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 $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test yes = "$GCC"; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$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 yes,no = "$GCC,$with_gnu_ld"; then
- archive_cmds='$CC -shared $pic_flag $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 no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$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 yes,no = "$GCC,$with_gnu_ld"; 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 $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag $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'
- ;;
- *)
-
- # Older versions of the 11.00 compiler do not understand -b yet
- # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler__b=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -b"
- 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 "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler__b=yes
- fi
- else
- lt_cv_prog_compiler__b=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
-
-if test yes = "$lt_cv_prog_compiler__b"; then
- archive_cmds='$CC -b $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
-
- ;;
- esac
- fi
- if test no = "$with_gnu_ld"; 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 yes = "$GCC"; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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.
- # This should be the same for all languages, so no per-tag cache variable.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo (void) { return 0; }
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_irix_exported_symbol=yes
-else
- lt_cv_irix_exported_symbol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
- if test yes = "$lt_cv_irix_exported_symbol"; then
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
- fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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
- ;;
-
- linux*)
- case $cc_basename in
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- ld_shlibs=yes
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
-
- 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* | bitrig*)
- 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__`"; 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
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- ;;
-
- osf3*)
- if test yes = "$GCC"; 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" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -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 yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-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; 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 "-set_version $verstring"` -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 yes = "$GCC"; then
- wlarc='$wl'
- archive_cmds='$CC -shared $pic_flag $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 $pic_flag $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 yes = "$GCC"; 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 sequent = "$host_vendor"; 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 yes = "$GCC"; 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 CANNOT 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 yes = "$GCC"; 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 sni = "$host_vendor"; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- export_dynamic_flag_spec='$wl-Blargedynsym'
- ;;
- esac
- fi
- fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test no = "$ld_shlibs" && 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 yes,yes = "$GCC,$enable_shared"; 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:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } 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\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
- lt_cv_archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
- archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test yes = "$GCC"; then
- case $host_os in
- darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
- *) lt_awk_arg='/^libraries:/' ;;
- esac
- case $host_os in
- mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
- *) lt_sed_strip_eq='s|=/|/|g' ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
- case $lt_search_path_spec in
- *\;*)
- # 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 's/;/ /g'`
- ;;
- *)
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
- ;;
- esac
- # 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`
- # ...but if some path component already ends with the multilib dir we assume
- # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
- case "$lt_multi_os_dir; $lt_search_path_spec " in
- "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
- lt_multi_os_dir=
- ;;
- esac
- 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"
- elif test -n "$lt_multi_os_dir"; then
- 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; }
-}'`
- # AWK program above erroneously prepends '/' to C:/dos/paths
- # for these hosts.
- case $host_os in
- mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
- $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
- esac
- sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-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 # correct to gnu/linux during the next big refactor
- 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 # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test ia64 = "$host_cpu"; 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
- # Using Import Files as archive members, it is possible to support
- # filename-based versioning of shared library archives on AIX. While
- # this would work for both with and without runtime linking, it will
- # prevent static linking of such archives. So we do filename-based
- # shared library versioning with .so extension only, which is used
- # when both runtime linking and shared linking is enabled.
- # Unfortunately, runtime linking may impact performance, so we do
- # not want this to be the default eventually. Also, we use the
- # versioned .so libs for executables only if there is the -brtl
- # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
- # To allow for filename-based versioning support, we need to create
- # libNAME.so.V as an archive file, containing:
- # *) an Import File, referring to the versioned filename of the
- # archive as well as the shared archive member, telling the
- # bitwidth (32 or 64) of that shared object, and providing the
- # list of exported symbols of that shared object, eventually
- # decorated with the 'weak' keyword
- # *) the shared object with the F_LOADONLY flag set, to really avoid
- # it being seen by the linker.
- # At run time we better use the real file rather than another symlink,
- # but for link time we create the symlink libNAME.so -> libNAME.so.V
-
- case $with_aix_soname,$aix_use_runtimelinking in
- # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- aix,yes) # traditional libtool
- dynamic_linker='AIX unversionable lib.so'
- # 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'
- ;;
- aix,no) # traditional AIX only
- dynamic_linker='AIX lib.a(lib.so.V)'
- # 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'
- ;;
- svr4,*) # full svr4 only
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,yes) # both, prefer svr4
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # unpreferred sharedlib libNAME.a needs extra handling
- postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
- postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,no) # both, prefer aix
- dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release.a $libname.a'
- soname_spec='$libname$release$shared_ext$major'
- # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
- postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
- postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
- ;;
- esac
- 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=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $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 # correct to gnu/linux during the next big refactor
- 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* | cegcc*)
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$cc_basename in
- yes,*)
- # gcc
- 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="$sys_lib_search_path_spec /usr/lib/w32api"
- ;;
- mingw* | cegcc*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- 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
- dynamic_linker='Win32 ld.exe'
- ;;
-
- *,cl*)
- # Native MSVC
- libname_spec='$name'
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- library_names_spec='$libname.dll.lib'
-
- case $build_os in
- mingw*)
- sys_lib_search_path_spec=
- lt_save_ifs=$IFS
- IFS=';'
- for lt_path in $LIB
- do
- IFS=$lt_save_ifs
- # Let DOS variable expansion print the short 8.3 style file name.
- lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
- sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
- done
- IFS=$lt_save_ifs
- # Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
- ;;
- cygwin*)
- # Convert to unix form, then to dos form, then back to unix form
- # but this time dos style (no spaces!) so that the unix form looks
- # like /cygdrive/c/PROGRA~1:/cygdr...
- sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
- sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
- sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- ;;
- *)
- sys_lib_search_path_spec=$LIB
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH.
- 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
- # FIXME: find the short name or the path components, as spaces are
- # common. (e.g. "Program Files" -> "PROGRA~1")
- ;;
- esac
-
- # 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'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
- dynamic_linker='Win32 link.exe'
- ;;
-
- *)
- # Assume MSVC wrapper
- library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
- dynamic_linker='Win32 ld.exe'
- ;;
- esac
- # 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 # correct to gnu/linux during the next big refactor
- 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
- ;;
-
-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[23].*) 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$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- 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
- ;;
-
-haiku*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- dynamic_linker="$host_os runtime_loader"
- 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=LIBRARY_PATH
- shlibpath_overrides_runpath=no
- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- 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 32 = "$HPUX_IA64_MODE"; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux32
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux64
- fi
- ;;
- 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'
- # or fails outright, so override atomically:
- install_override_mode=555
- ;;
-
-interix[3-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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 yes = "$lt_cv_prog_gnu_ld"; then
- version_type=linux # correct to gnu/linux during the next big refactor
- 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
- ;;
-
-linux*android*)
- version_type=none # Android doesn't support versioned libraries.
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext'
- soname_spec='$libname$release$shared_ext'
- finish_cmds=
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-
- # 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
-
- dynamic_linker='Android linker'
- # Don't embed -rpath directories since the linker doesn't support them.
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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
- if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_shlibpath_overrides_runpath=no
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- lt_cv_shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
-fi
-
- shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
- # 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
-
- # Ideally, we could use ldconfig to report *all* directores which are
- # searched for libraries, however this is still not possible. Aside from not
- # being certain /sbin/ldconfig is available, command
- # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
- # even though it is searched at run-time. Try to do the best guess by
- # appending ld.so.conf contents (and includes) 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;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 # correct to gnu/linux during the next big refactor
- 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* | bitrig*)
- version_type=sunos
- sys_lib_dlsearch_path_spec=/usr/lib
- need_lib_prefix=no
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- need_version=no
- else
- need_version=yes
- fi
- 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
- shlibpath_overrides_runpath=yes
- ;;
-
-os2*)
- libname_spec='$name'
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
- # OS/2 can only load a DLL with a base name of 8 characters or less.
- soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
- v=$($ECHO $release$versuffix | tr -d .-);
- n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
- $ECHO $n$v`$shared_ext'
- library_names_spec='${libname}_dll.$libext'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=BEGINLIBPATH
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- 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'
- ;;
-
-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 # correct to gnu/linux during the next big refactor
- 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 yes = "$with_gnu_ld"; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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 # correct to gnu/linux during the next big refactor
- 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=sco
- 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 yes = "$with_gnu_ld"; 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 # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_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 # correct to gnu/linux during the next big refactor
- 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:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test no = "$dynamic_linker" && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test yes = "$GCC"; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
- sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
-fi
-
-if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
- sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
-fi
-
-# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
-configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
-
-# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
-func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
-
-# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
-configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 yes = "$hardcode_automatic"; then
-
- # We can hardcode non-existent directories.
- if test no != "$hardcode_direct" &&
- # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
- test no != "$hardcode_minus_L"; 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:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test relink = "$hardcode_action" ||
- test yes = "$inherit_rpath"; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test yes = "$shlibpath_overrides_runpath" ||
- test no = "$enable_shared"; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-
-
-
-
- if test yes != "$enable_dlopen"; 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* | cegcc*)
- 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:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; 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
-
- ;;
-
- tpf*)
- # Don't try to run any link tests for TPF. We know it's impossible
- # because TPF is a cross-compiler, and we know how we open DSOs.
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=no
- ;;
-
- *)
- ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_shl_load=yes
-else
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
- ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_svld_dlopen=yes
-else
- ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_dld_link=yes
-else
- ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
- lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test no = "$lt_cv_dlopen"; then
- enable_dlopen=no
- else
- enable_dlopen=yes
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS=$CPPFLAGS
- test yes = "$ac_cv_header_dlfcn_h" && 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:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; 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 $LINENO "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
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 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;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test yes = "$lt_cv_dlopen_self"; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_dlopen_self_static+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; 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 $LINENO "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
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 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;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
- # Report what library types will actually be built
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
- test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 != "$host_cpu"; then
- case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
- yes,aix,yes) ;; # shared object as lib.so file only
- yes,svr4,*) ;; # shared object as lib.so archive member only
- yes,*) enable_static=no ;; # shared object in lib.a archive as well
- esac
- fi
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$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 yes = "$enable_shared" || enable_static=yes
- { $as_echo "$as_me:${as_lineno-$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:
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RC"; then
- ac_cv_prog_RC="$RC" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RC="${ac_tool_prefix}windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RC=$ac_cv_prog_RC
-if test -n "$RC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5
-$as_echo "$RC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RC"; then
- ac_ct_RC=$RC
- # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RC"; then
- ac_cv_prog_ac_ct_RC="$ac_ct_RC" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RC="windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RC=$ac_cv_prog_ac_ct_RC
-if test -n "$ac_ct_RC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5
-$as_echo "$ac_ct_RC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RC" = x; then
- RC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- RC=$ac_ct_RC
- fi
-else
- RC="$ac_cv_prog_RC"
-fi
-
-
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-objext_RC=$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.
-
-
-
-
-
-
-# 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_CFLAGS=$CFLAGS
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-CFLAGS=
-compiler=$CC
-compiler_RC=$CC
-func_cc_basename $compiler
-cc_basename=$func_cc_basename_result
-
-lt_cv_prog_compiler_c_o_RC=yes
-
-if test -n "$compiler"; then
- :
-
-
-
-fi
-
-GCC=$lt_save_GCC
-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
-CFLAGS=$lt_save_CFLAGS
-
-
-
-# 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC_BUILD+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC_BUILD="${build}-gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC_BUILD+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC_BUILD="gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC_BUILD+:} false; 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 as_fn_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_BUILD="cc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -z "${CC_BUILD}" && as_fn_error $? "cannot find native C compiler" "$LINENO" 5
-
- { $as_echo "$as_me:${as_lineno-$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_fn_error $? "native C compiler is not working" "$LINENO" 5
- rm -f conftest.c
- if test -x a.out -o -x b.out -o -x conftest; then
- EXEEXT_BUILD=""
- elif test -x a_out.exe -o -x conftest.exe; then
- EXEEXT_BUILD=".exe"
- elif test -x conftest.*; then
- EXEEXT_BUILD=`echo conftest.* | sed -n '1s/^.*\././'`
- fi
- rm -f a.* b.* a_out.exe conftest.*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXEEXT_BUILD" >&5
-$as_echo "$EXEEXT_BUILD" >&6; }
-else
- CC_BUILD=${CC}
- EXEEXT_BUILD=${EXEEXT}
-fi
-
-
-
-
-
-# Since these files will be eventually called from another directory (namely
-# from the top level) we make the path of the scripts absolute.
-#
-# This small code snippet has been taken from automake's `ylwrap' script.
-
-# 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:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; 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 as_fn_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
- 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:${as_lineno-$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
-
-{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_path_mkdir+:} false; 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
- as_fn_executable_p "$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
-
- test -d ./--version && rmdir ./--version
- 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.
- MKDIR_P="$ac_install_sh -d"
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-case "$MKDIR_P" in
-[\\/]* | ?:[\\/]*)
- ;;
-*[\\/]*)
- MKDIR_P="`pwd`/$MKDIR_P"
- ;;
-esac
-
-
-# checks for header files
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-for ac_header in fcntl.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"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:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* 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 sort of thing. */
- char tx;
- char *t = &tx;
- 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 sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; 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
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-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:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$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
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_type_unsigned_long_long_int=yes
- if test "x${ac_cv_prog_cc_c99-no}" = xno; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- /* For now, do not test the preprocessor; as of 2007 there are too many
- implementations with broken preprocessors. Perhaps this can
- be revisited in 2012. In the meantime, code should not expect
- #if to work with literals wider than 32 bits. */
- /* Test literals. */
- long long int ll = 9223372036854775807ll;
- long long int nll = -9223372036854775807LL;
- unsigned long long int ull = 18446744073709551615ULL;
- /* Test constant expressions. */
- typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
- typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
- int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division. */
- long long int llmax = 9223372036854775807ll;
- unsigned long long int ullmax = 18446744073709551615ull;
- return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
- ac_cv_type_unsigned_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
- if test $ac_cv_type_unsigned_long_long_int = yes; then
-
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
-
- fi
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_type_long_long_int=yes
- if test "x${ac_cv_prog_cc_c99-no}" = xno; then
- ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
- if test $ac_cv_type_long_long_int = yes; then
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
- #ifndef LLONG_MAX
- # define HALF \
- (1LL << (sizeof (long long int) * CHAR_BIT - 2))
- # define LLONG_MAX (HALF - 1 + HALF)
- #endif
-int
-main ()
-{
-long long int n = 1;
- int i;
- for (i = 0; ; i++)
- {
- long long int m = n << i;
- if (m >> i != n)
- return 1;
- if (LLONG_MAX / 2 < m)
- break;
- }
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_type_long_long_int=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
- if test $ac_cv_type_long_long_int = yes; then
-
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
-
- fi
-
-
-
-# check whether cpp computation of size of int and long in ftconfig.in works
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cpp computation of bit length in ftconfig.in works" >&5
-$as_echo_n "checking whether cpp computation of bit length in ftconfig.in works... " >&6; }
-orig_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="-I${srcdir} -I. -I${srcdir}/../../include/freetype/config ${CPPFLAGS}"
-
-ac_clean_files=
-if test ! -f ft2build.h; then
- ac_clean_files=ft2build.h
- touch ft2build.h
-fi
-
-cat > conftest.c <<\_ACEOF
-#include <limits.h>
-#define FT_CONFIG_OPTIONS_H "ftoption.h"
-#define FT_CONFIG_STANDARD_LIBRARY_H "ftstdlib.h"
-#define FT_UINT_MAX UINT_MAX
-#define FT_ULONG_MAX ULONG_MAX
-#include "ftconfig.in"
-_ACEOF
-echo >> conftest.c "#if FT_SIZEOF_INT == "${ac_cv_sizeof_int}
-echo >> conftest.c "ac_cpp_ft_sizeof_int="${ac_cv_sizeof_int}
-echo >> conftest.c "#endif"
-echo >> conftest.c "#if FT_SIZEOF_LONG == "${ac_cv_sizeof_long}
-echo >> conftest.c "ac_cpp_ft_sizeof_long="${ac_cv_sizeof_long}
-echo >> conftest.c "#endif"
-
-${CPP} ${CPPFLAGS} conftest.c | ${GREP} ac_cpp_ft > conftest.sh
-eval `cat conftest.sh`
-rm -f conftest.* $ac_clean_files
-
-if test x != "x${ac_cpp_ft_sizeof_int}" \
- -a x != x"${ac_cpp_ft_sizeof_long}"; then
- unset ft_use_autoconf_sizeof_types
-else
- ft_use_autoconf_sizeof_types=yes
-fi
-
-# Check whether --enable-biarch-config was given.
-if test "${enable_biarch_config+set}" = set; then :
- enableval=$enable_biarch_config;
-fi
-
-
-case :${ft_use_autoconf_sizeof_types}:${enable_biarch_config}: in
- :yes:yes:)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: broken but use it" >&5
-$as_echo "broken but use it" >&6; }
- unset ft_use_autoconf_sizeof_types
- ;;
- ::no:)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: works but ignore it" >&5
-$as_echo "works but ignore it" >&6; }
- ft_use_autoconf_sizeof_types=yes
- ;;
- ::yes: | :::)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- unset ft_use_autoconf_sizeof_types
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ft_use_autoconf_sizeof_types=yes
- ;;
-esac
-
-if test x"${ft_use_autoconf_sizeof_types}" = xyes; then
-
-$as_echo "#define FT_USE_AUTOCONF_SIZEOF_TYPES /**/" >>confdefs.h
-
-fi
-
-CPPFLAGS="${orig_CPPFLAGS}"
-
-# Check whether --enable-freetype-config was given.
-if test "${enable_freetype_config+set}" = set; then :
- enableval=$enable_freetype_config; case "${enableval}" in
- yes) enable_freetype_config="TRUE" ;;
- no) enable_freetype_config="FALSE" ;;
- *) as_fn_error $? "unknown value '${enableval}' passed with --enable-freetype-config" "$LINENO" 5 ;;
- esac
-else
- enable_freetype_config="FALSE"
-fi
-
-
-INSTALL_FT2_CONFIG=$enable_freetype_config
-
-
-# checks for library functions
-
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
- enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_sys_largefile_CC=no
- if test "$GCC" != yes; then
- ac_save_CC=$CC
- while :; do
- # IRIX 6.2 and later do not support large files by default,
- # so use the C compiler's -n32 option if that helps.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
- if ac_fn_c_try_compile "$LINENO"; then :
- break
-fi
-rm -f core conftest.err conftest.$ac_objext
- CC="$CC -n32"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_largefile_CC=' -n32'; break
-fi
-rm -f core conftest.err conftest.$ac_objext
- break
- done
- CC=$ac_save_CC
- rm -f conftest.$ac_ext
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
- if test "$ac_cv_sys_largefile_CC" != no; then
- CC=$CC$ac_cv_sys_largefile_CC
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_file_offset_bits=unknown
- break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_large_files=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_large_files=1; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_large_files=unknown
- break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -rf conftest*
- fi
-
-
-fi
-
-
-# Here we check whether we can use our mmap file component.
-
-# Check whether --enable-mmap was given.
-if test "${enable_mmap+set}" = set; then :
- enableval=$enable_mmap; enable_mmap="no"
-else
- enable_mmap="yes"
-fi
-
-if test "x${enable_mmap}" != "xno"; then
-
-
-
- for ac_header in $ac_header_list
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"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 :
- ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_mmap_fixed_mapped=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-# 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;
- const char *cdata2;
- int i, pagesize;
- int fd, fd2;
-
- 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 2;
- if (write (fd, data, pagesize) != pagesize)
- return 3;
- close (fd);
-
- /* Next, check that the tail of a page is zero-filled. File must have
- non-zero length, otherwise we risk SIGBUS for entire page. */
- fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
- if (fd2 < 0)
- return 4;
- cdata2 = "";
- if (write (fd2, cdata2, 1) != 1)
- return 5;
- data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
- if (data2 == MAP_FAILED)
- return 6;
- for (i = 0; i < pagesize; ++i)
- if (*(data2 + i))
- return 7;
- close (fd2);
- if (munmap (data2, pagesize))
- return 8;
-
- /* 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 9;
- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_FIXED, fd, 0L))
- return 10;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- return 11;
-
- /* 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 12;
- if (read (fd, data3, pagesize) != pagesize)
- return 13;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- return 14;
- close (fd);
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_mmap_fixed_mapped=yes
-else
- ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$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
-
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
-
-fi
-rm -f conftest.mmap conftest.txt
-
-fi
-if test "x${enable_mmap}" = "xno" \
- -o "$ac_cv_func_mmap_fixed_mapped" != "yes"; then
- FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
-else
- FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
-
- ac_fn_c_check_decl "$LINENO" "munmap" "ac_cv_have_decl_munmap" "
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/mman.h>
-
-
-"
-if test "x$ac_cv_have_decl_munmap" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MUNMAP $ac_have_decl
-_ACEOF
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for munmap's first parameter type" >&5
-$as_echo_n "checking for munmap's first parameter type... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#include <unistd.h>
-#include <sys/mman.h>
-int munmap(void *, size_t);
-
-
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: void *" >&5
-$as_echo "void *" >&6; }
-
-$as_echo "#define MUNMAP_USES_VOIDP /**/" >>confdefs.h
-
-else
- { $as_echo "$as_me:${as_lineno-$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`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-# get compiler flags right
-#
-# We try to make the compiler work for C89-strict source. Even if the
-# C compiler is gcc and C89 flags are available, some system headers
-# (e.g., Android Bionic libc) are broken in C89 mode. We have to check
-# whether the compilation finishes successfully.
-#
-# Due to bugs in mingwrt 4.0.3 we don't use `-ansi' for MinGW.
-#
-# To avoid zillions of
-#
-# ISO C90 does not support 'long long'
-#
-# warnings, we disable `-pedantic' for gcc version < 4.6.
-#
-if test "x$GCC" = xyes; then
- XX_CFLAGS="-Wall"
- case "$host" in
- *-*-mingw*)
- XX_ANSIFLAGS="-pedantic"
- ;;
- *-*-aix*)
- XX_ANSIFLAGS="-pedantic"
- ;;
- *)
- GCC_VERSION=`$CC -dumpversion`
- GCC_MAJOR=`echo "$GCC_VERSION" | sed 's/\([^.][^.]*\).*/\1/'`
- GCC_MINOR=`echo "$GCC_VERSION" | sed 's/[^.][^.]*.\([^.][^.]*\).*/\1/'`
-
- XX_PEDANTIC=-pedantic
- if test $GCC_MAJOR -lt 4; then
- XX_PEDANTIC=
- else
- if test $GCC_MAJOR -eq 4 -a $GCC_MINOR -lt 6; then
- XX_PEDANTIC=
- fi
- fi
-
- XX_ANSIFLAGS=""
- for a in $XX_PEDANTIC -ansi
- do
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking gcc compiler flag ${a} to assure ANSI C works correctly" >&5
-$as_echo_n "checking gcc compiler flag ${a} to assure ANSI C works correctly... " >&6; }
- orig_CFLAGS="${CFLAGS}"
- CFLAGS="${CFLAGS} ${XX_ANSIFLAGS} ${a}"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#include <stdio.h>
-
-
-int
-main ()
-{
-
-
- {
- puts( "" );
- return 0;
- }
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok, adding to XX_ANSIFLAGS" >&5
-$as_echo "ok, adding to XX_ANSIFLAGS" >&6; }
- XX_ANSIFLAGS="${XX_ANSIFLAGS} ${a}"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS="${orig_CFLAGS}"
- done
- ;;
- esac
-else
- case "$host" in
- *-dec-osf*)
- CFLAGS=
- XX_CFLAGS="-std1 -g3"
- XX_ANSIFLAGS=
- ;;
- *)
- XX_CFLAGS=
- XX_ANSIFLAGS=
- ;;
- esac
-fi
-
-
-
-
-# It is recommended that shared libraries hide symbols except those with
-# explicit __attribute__((visibility("default"))).
-#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5
-$as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; }
-orig_CFLAGS="${CFLAGS}"
-CFLAGS="${CFLAGS} -fvisibility=hidden"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- CFLAGS="${orig_CFLAGS}"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-# All library tests below try `pkg-config' first. If that fails, a function
-# from the library is tested in the traditional autoconf way (zlib, bzip2),
-# or a config script is called (libpng).
-#
-# The `xxx_reqpriv' variables are for the `Requires.private' field in
-# `freetype2.pc'. The `xxx_libspriv' variables are for the `Libs.private'
-# field in `freetype2.pc' if pkg-config doesn't find a proper .pc file.
-#
-# The `xxx_libsstaticconf' variables are for the `freetype-config' script.
-#
-# Note that a call to PKG_CHECK_MODULES(XXX, ...) sets and creates the
-# output variables `XXX_CFLAGS' and `XXX_LIBS'. In case one or both are set
-# for a library by the user, no entry for this library is added to
-# `Requires.private'. Instead, it gets added to `Libs.private'
-
-
-# check for system zlib
-
-
-# Check whether --with-zlib was given.
-if test "${with_zlib+set}" = set; then :
- withval=$with_zlib;
-else
- with_zlib=auto
-fi
-
-
-have_zlib=no
-if test x"$with_zlib" = xyes -o x"$with_zlib" = xauto; then
- zlib_pkg="zlib"
- have_zlib_pkg=no
-
- if test x"$ZLIB_CFLAGS" = x -a x"$ZLIB_LIBS" = x; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$zlib_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$zlib_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- have_zlib_pkg=yes
-fi
- fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZLIB" >&5
-$as_echo_n "checking for ZLIB... " >&6; }
-
-if test -n "$ZLIB_CFLAGS"; then
- pkg_cv_ZLIB_CFLAGS="$ZLIB_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$zlib_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$zlib_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_ZLIB_CFLAGS=`$PKG_CONFIG --cflags "$zlib_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$ZLIB_LIBS"; then
- pkg_cv_ZLIB_LIBS="$ZLIB_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$zlib_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$zlib_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_ZLIB_LIBS=`$PKG_CONFIG --libs "$zlib_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- ZLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$zlib_pkg" 2>&1`
- else
- ZLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$zlib_pkg" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$ZLIB_PKG_ERRORS" >&5
-
- :
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- :
-else
- ZLIB_CFLAGS=$pkg_cv_ZLIB_CFLAGS
- ZLIB_LIBS=$pkg_cv_ZLIB_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_zlib="yes (pkg-config)"
-fi
-
- if test $have_zlib_pkg = yes; then
- # we have zlib.pc
- zlib_reqpriv="$zlib_pkg"
- zlib_libspriv=
- zlib_libsstaticconf=`$PKG_CONFIG --static --libs "$zlib_pkg"`
- else
- zlib_reqpriv=
-
- if test "$have_zlib" != no; then
- # ZLIB_CFLAGS and ZLIB_LIBS are set by the user
- zlib_libspriv="$ZLIB_LIBS"
- zlib_libsstaticconf="$ZLIB_LIBS"
- have_zlib="yes (ZLIB_CFLAGS and ZLIB_LIBS)"
- else
- # fall back to standard autoconf test
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzsetparams in -lz" >&5
-$as_echo_n "checking for gzsetparams in -lz... " >&6; }
-if ${ac_cv_lib_z_gzsetparams+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_z_gzsetparams=yes
-else
- ac_cv_lib_z_gzsetparams=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzsetparams" >&5
-$as_echo "$ac_cv_lib_z_gzsetparams" >&6; }
-if test "x$ac_cv_lib_z_gzsetparams" = xyes; then :
- ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes; then :
- have_zlib="yes (autoconf test)"
- zlib_libspriv="-lz"
- zlib_libsstaticconf="$zlib_libspriv"
- ZLIB_LIBS="$zlib_libspriv"
-fi
-
-
-fi
-
- fi
- fi
-fi
-
-if test x"$with_zlib" = xyes -a "$have_zlib" = no; then
- as_fn_error $? "external zlib support requested but library not found" "$LINENO" 5
-fi
-
-
-# check for system libbz2
-
-
-# Check whether --with-bzip2 was given.
-if test "${with_bzip2+set}" = set; then :
- withval=$with_bzip2;
-else
- with_bzip2=auto
-fi
-
-
-have_bzip2=no
-if test x"$with_bzip2" = xyes -o x"$with_bzip2" = xauto; then
- bzip2_pkg="bzip2"
- have_bzip2_pkg=no
-
- if test x"$BZIP2_CFLAGS" = x -a x"$BZIP2_LIBS" = x; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$bzip2_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$bzip2_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- have_bzip2_pkg=yes
-fi
- fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZIP2" >&5
-$as_echo_n "checking for BZIP2... " >&6; }
-
-if test -n "$BZIP2_CFLAGS"; then
- pkg_cv_BZIP2_CFLAGS="$BZIP2_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$bzip2_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$bzip2_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_BZIP2_CFLAGS=`$PKG_CONFIG --cflags "$bzip2_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$BZIP2_LIBS"; then
- pkg_cv_BZIP2_LIBS="$BZIP2_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$bzip2_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$bzip2_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_BZIP2_LIBS=`$PKG_CONFIG --libs "$bzip2_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- BZIP2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$bzip2_pkg" 2>&1`
- else
- BZIP2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$bzip2_pkg" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$BZIP2_PKG_ERRORS" >&5
-
- :
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- :
-else
- BZIP2_CFLAGS=$pkg_cv_BZIP2_CFLAGS
- BZIP2_LIBS=$pkg_cv_BZIP2_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_bzip2="yes (pkg-config)"
-fi
-
- if test $have_bzip2_pkg = yes; then
- # we have bzip2.pc
- bzip2_reqpriv="$bzip2_pkg"
- bzip2_libspriv=
- bzip2_libsstaticconf=`$PKG_CONFIG --static --libs "$bzip2_pkg"`
- else
- bzip2_reqpriv=
-
- if test "$have_bzip2" != no; then
- # BZIP2_CFLAGS and BZIP2_LIBS are set by the user
- bzip2_libspriv="$BZIP2_LIBS"
- bzip2_libsstaticconf="$BZIP2_LIBS"
- have_bzip2="yes (BZIP2_CFLAGS and BZIP2_LIBS)"
- else
- # fall back to standard autoconf test
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzDecompress in -lbz2" >&5
-$as_echo_n "checking for BZ2_bzDecompress in -lbz2... " >&6; }
-if ${ac_cv_lib_bz2_BZ2_bzDecompress+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbz2 $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 BZ2_bzDecompress ();
-int
-main ()
-{
-return BZ2_bzDecompress ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_bz2_BZ2_bzDecompress=yes
-else
- ac_cv_lib_bz2_BZ2_bzDecompress=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzDecompress" >&5
-$as_echo "$ac_cv_lib_bz2_BZ2_bzDecompress" >&6; }
-if test "x$ac_cv_lib_bz2_BZ2_bzDecompress" = xyes; then :
- ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_bzlib_h" = xyes; then :
- have_bzip2="yes (autoconf test)"
- bzip2_libspriv="-lbz2"
- bzip2_libsstaticconf="$bzip2_libspriv"
- BZIP2_LIBS="$bzip2_libspriv"
-fi
-
-
-fi
-
- fi
- fi
-fi
-
-if test x"$with_bzip2" = xyes -a "$have_bzip2" = no; then
- as_fn_error $? "bzip2 support requested but library not found" "$LINENO" 5
-fi
-
-
-# check for system libpng
-
-
-# Check whether --with-png was given.
-if test "${with_png+set}" = set; then :
- withval=$with_png;
-else
- with_png=auto
-fi
-
-
-have_libpng=no
-if test x"$with_png" = xyes -o x"$with_png" = xauto; then
- libpng_pkg="libpng"
- have_libpng_pkg=no
-
- if test x"$LIBPNG_CFLAGS" = x -a x"$LIBPNG_LIBS" = x; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpng_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$libpng_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- have_libpng_pkg=yes
-fi
- fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPNG" >&5
-$as_echo_n "checking for LIBPNG... " >&6; }
-
-if test -n "$LIBPNG_CFLAGS"; then
- pkg_cv_LIBPNG_CFLAGS="$LIBPNG_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpng_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$libpng_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "$libpng_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$LIBPNG_LIBS"; then
- pkg_cv_LIBPNG_LIBS="$LIBPNG_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpng_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$libpng_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBPNG_LIBS=`$PKG_CONFIG --libs "$libpng_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- LIBPNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$libpng_pkg" 2>&1`
- else
- LIBPNG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$libpng_pkg" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$LIBPNG_PKG_ERRORS" >&5
-
- :
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- :
-else
- LIBPNG_CFLAGS=$pkg_cv_LIBPNG_CFLAGS
- LIBPNG_LIBS=$pkg_cv_LIBPNG_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_libpng="yes (pkg-config)"
-fi
-
- if test $have_libpng_pkg = yes; then
- # we have libpng.pc
- libpng_reqpriv="$libpng_pkg"
- libpng_libspriv=
- libpng_libsstaticconf=`$PKG_CONFIG --static --libs "$libpng_pkg"`
- else
- libpng_reqpriv=
-
- if test "$have_libpng" != no; then
- # LIBPNG_CFLAGS and LIBPNG_LIBS are set by the user
- libpng_libspriv="$LIBPNG_LIBS"
- libpng_libsstaticconf="$LIBPNG_LIBS"
- have_libpng="yes (LIBPNG_CFLAGS and LIBPNG_LIBS)"
- else
- # fall back to config script.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libpng-config" >&5
-$as_echo_n "checking for libpng-config... " >&6; }
- if which libpng-config > /dev/null 2>&1; then
- LIBPNG_CFLAGS=`libpng-config --cflags`
- LIBPNG_LIBS=`libpng-config --ldflags`
- libpng_libspriv=`libpng-config --static --ldflags`
- libpng_libsstaticconf="$libpng_libspriv"
- have_libpng="yes (libpng-config)"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- fi
- fi
-fi
-
-if test x"$with_png" = xyes -a "$have_libpng" = no; then
- as_fn_error $? "libpng support requested but library not found" "$LINENO" 5
-fi
-
-
-# check for system libharfbuzz
-
-
-# Check whether --with-harfbuzz was given.
-if test "${with_harfbuzz+set}" = set; then :
- withval=$with_harfbuzz;
-else
- with_harfbuzz=auto
-fi
-
-
-have_harfbuzz=no
-if test x"$with_harfbuzz" = xyes -o x"$with_harfbuzz" = xauto; then
- harfbuzz_pkg="harfbuzz >= 1.3.0"
- have_harfbuzz_pkg=no
-
- if test x"$HARFBUZZ_CFLAGS" = x -a x"$HARFBUZZ_LIBS" = x; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$harfbuzz_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$harfbuzz_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- have_harfbuzz_pkg=yes
-fi
- fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for HARFBUZZ" >&5
-$as_echo_n "checking for HARFBUZZ... " >&6; }
-
-if test -n "$HARFBUZZ_CFLAGS"; then
- pkg_cv_HARFBUZZ_CFLAGS="$HARFBUZZ_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$harfbuzz_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$harfbuzz_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_HARFBUZZ_CFLAGS=`$PKG_CONFIG --cflags "$harfbuzz_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$HARFBUZZ_LIBS"; then
- pkg_cv_HARFBUZZ_LIBS="$HARFBUZZ_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$harfbuzz_pkg\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$harfbuzz_pkg") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_HARFBUZZ_LIBS=`$PKG_CONFIG --libs "$harfbuzz_pkg" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- HARFBUZZ_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$harfbuzz_pkg" 2>&1`
- else
- HARFBUZZ_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$harfbuzz_pkg" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$HARFBUZZ_PKG_ERRORS" >&5
-
- :
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- :
-else
- HARFBUZZ_CFLAGS=$pkg_cv_HARFBUZZ_CFLAGS
- HARFBUZZ_LIBS=$pkg_cv_HARFBUZZ_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_harfbuzz="yes (pkg-config)"
-fi
-
- if test $have_harfbuzz_pkg = yes; then
- # we have harfbuzz.pc
- harfbuzz_reqpriv="$harfbuzz_pkg"
- harfbuzz_libspriv=
- harfbuzz_libsstaticconf=`$PKG_CONFIG --static --libs "$harfbuzz_pkg"`
- else
- harfbuzz_reqpriv=
-
- if test "$have_harfbuzz" != no; then
- # HARFBUZZ_CFLAGS and HARFBUZZ_LIBS are set by the user
- harfbuzz_libspriv="$HARFBUZZ_LIBS"
- harfbuzz_libsstaticconf="$HARFBUZZ_LIBS"
- have_harfbuzz="yes (HARFBUZZ_CFLAGS and HARFBUZZ_LIBS)"
- else
- # since HarfBuzz is quite a new library we don't fall back to a
- # different test; additionally, it has too many dependencies
- :
- fi
- fi
-fi
-
-if test x"$with_harfbuzz" = xyes -a "$have_harfbuzz" = no; then
- as_fn_error $? "harfbuzz support requested but library not found" "$LINENO" 5
-fi
-
-
-# check for librt
-#
-# We need `clock_gettime' for the `ftbench' demo program.
-#
-# The code is modeled after gnulib's file `clock_time.m4', ignoring
-# very old Solaris systems.
-
-LIB_CLOCK_GETTIME=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
-$as_echo_n "checking for library containing clock_gettime... " >&6; }
-if ${ac_cv_search_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 clock_gettime ();
-int
-main ()
-{
-return clock_gettime ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' rt; 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
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_clock_gettime=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_clock_gettime+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_clock_gettime+:} false; then :
-
-else
- ac_cv_search_clock_gettime=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
-$as_echo "$ac_cv_search_clock_gettime" >&6; }
-ac_res=$ac_cv_search_clock_gettime
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- test "$ac_cv_search_clock_gettime" = "none required" \
- || LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime
-fi
-
-
-
-
-# Some options handling SDKs/archs in CFLAGS should be copied
-# to LDFLAGS. Apple TechNote 2137 recommends to include these
-# options in CFLAGS but not in LDFLAGS.
-
-save_config_args=$*
-set dummy ${CFLAGS}
-i=1
-while test $i -le $#
-do
- c=$1
-
- case "${c}" in
- -isysroot|-arch) # options taking 1 argument
- a=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CFLAGS and LDFLAGS share ${c} ${a}" >&5
-$as_echo_n "checking whether CFLAGS and LDFLAGS share ${c} ${a}... " >&6; }
- if expr " ${LDFLAGS} " : ".* ${c} *${a}.*" > /dev/null
- then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, copy to LDFLAGS" >&5
-$as_echo "no, copy to LDFLAGS" >&6; }
- LDFLAGS="${LDFLAGS} ${c} ${a}"
- fi
- shift 1
- ;;
- -m32|-m64|-march=*|-mcpu=*) # options taking no argument
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CFLAGS and LDFLAGS share ${c}" >&5
-$as_echo_n "checking whether CFLAGS and LDFLAGS share ${c}... " >&6; }
- if expr " ${LDFLAGS} " : ".* ${c} *${a}.*" > /dev/null
- then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, copy to LDFLAGS" >&5
-$as_echo "no, copy to LDFLAGS" >&6; }
- LDFLAGS="${LDFLAGS} ${c}"
- fi
- ;;
- # *)
- # AC_MSG_RESULT([${c} is not copied to LDFLAGS])
- # ;;
- esac
-
- shift 1
-done
-set ${save_config_args}
-
-
-# Whether to use Mac OS resource-based fonts.
-
-ftmac_c="" # src/base/ftmac.c should not be included in makefiles by default
-
-
-# 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- short res = 0;
-
-
- UseResFile( res );
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- ftmac_c='ftmac.c'
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OS_INLINE macro is ANSI compatible" >&5
-$as_echo_n "checking whether OS_INLINE macro is ANSI compatible... " >&6; }
- orig_CFLAGS="$CFLAGS -DFT_MACINTOSH"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.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
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
-
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking type ResourceIndex" >&5
-$as_echo_n "checking type ResourceIndex... " >&6; }
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-# include <Resources.h>
-#endif
-
-
-int
-main ()
-{
-
-
- ResourceIndex i = 0;
- return i;
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=1"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=0"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- ft2_extra_libs=""
- LDFLAGS="${orig_LDFLAGS}"
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-else
- case x$host_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:${as_lineno-$LINENO}: checking FSSpec-based FileManager" >&5
-$as_echo_n "checking FSSpec-based FileManager... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.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
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- 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:${as_lineno-$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:${as_lineno-$LINENO}: checking FSRef-based FileManager" >&5
-$as_echo_n "checking FSRef-based FileManager... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.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
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSREF=1"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- 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:${as_lineno-$LINENO}: checking QuickDraw FontManager functions in ToolBox" >&5
-$as_echo_n "checking QuickDraw FontManager functions in ToolBox... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.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
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- 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:${as_lineno-$LINENO}: checking QuickDraw FontManager functions in Carbon" >&5
-$as_echo_n "checking QuickDraw FontManager functions in Carbon... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.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
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-# Whether to use AppleTypeService since Mac OS X.
-
-
-# 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:${as_lineno-$LINENO}: checking AppleTypeService functions" >&5
-$as_echo_n "checking AppleTypeService functions... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- FSSpec* pathSpec;
-
-
- ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
-#if HAVE_FSSPEC
- ATSFontGetFileSpecification( 0, pathSpec );
-#endif
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_ATS=1"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_ATS=0"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-case "$CFLAGS" in
- *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
- { $as_echo "$as_me:${as_lineno-$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
-
-
-# entries in Requires.private are separated by commas;
-REQUIRES_PRIVATE="$zlib_reqpriv, \
- $bzip2_reqpriv, \
- $libpng_reqpriv, \
- $harfbuzz_reqpriv"
-# beautify
-REQUIRES_PRIVATE=`echo "$REQUIRES_PRIVATE" \
- | sed -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/, */,/g' \
- -e 's/,,*/,/g' \
- -e 's/^,*//' \
- -e 's/,*$//' \
- -e 's/,/, /g'`
-
-LIBS_PRIVATE="$zlib_libspriv \
- $bzip2_libspriv \
- $libpng_libspriv \
- $harfbuzz_libspriv \
- $ft2_extra_libs"
-# beautify
-LIBS_PRIVATE=`echo "$LIBS_PRIVATE" \
- | sed -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/ */ /g'`
-
-LIBSSTATIC_CONFIG="-lfreetype \
- $zlib_libsstaticconf \
- $bzip2_libsstaticconf \
- $libpng_libsstaticconf \
- $harfbuzz_libsstaticconf \
- $ft2_extra_libs"
-# remove -L/usr/lib and -L/usr/lib64 since `freetype-config' adds them later
-# on if necessary; also beautify
-LIBSSTATIC_CONFIG=`echo "$LIBSSTATIC_CONFIG" \
- | sed -e 's|-L */usr/lib64/* | |g' \
- -e 's|-L */usr/lib/* | |g' \
- -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/ */ /g'`
-
-
-
-
-
-
-
-
-
-
-
-
-# changing LDFLAGS value should only be done after
-# lt_cv_prog_compiler_static_works test
-
-ftoption_set()
-{
- regexp="-e \\\"s|.*#.*def.*$1.*|#define $1|\\\""
- FTOPTION_H_SED="$FTOPTION_H_SED $regexp"
-}
-
-ftoption_unset()
-{
- regexp="-e \\\"s|.*#.*def.*$1.*|/* #undef $1 */|\\\""
- FTOPTION_H_SED="$FTOPTION_H_SED $regexp"
-}
-
-if test "$have_zlib" != no; then
- CFLAGS="$CFLAGS $ZLIB_CFLAGS"
- LDFLAGS="$LDFLAGS $ZLIB_LIBS"
- ftoption_set FT_CONFIG_OPTION_SYSTEM_ZLIB
-else
- ftoption_unset FT_CONFIG_OPTION_SYSTEM_ZLIB
-fi
-if test "$have_bzip2" != no; then
- CFLAGS="$CFLAGS $BZIP2_CFLAGS"
- LDFLAGS="$LDFLAGS $BZIP2_LIBS"
- ftoption_set FT_CONFIG_OPTION_USE_BZIP2
-else
- ftoption_unset FT_CONFIG_OPTION_USE_BZIP2
-fi
-if test "$have_libpng" != no; then
- CFLAGS="$CFLAGS $LIBPNG_CFLAGS"
- LDFLAGS="$LDFLAGS $LIBPNG_LIBS"
- ftoption_set FT_CONFIG_OPTION_USE_PNG
-else
- ftoption_unset FT_CONFIG_OPTION_USE_PNG
-fi
-if test "$have_harfbuzz" != no; then
- CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
- LDFLAGS="$LDFLAGS $HARFBUZZ_LIBS"
- ftoption_set FT_CONFIG_OPTION_USE_HARFBUZZ
-else
- ftoption_unset FT_CONFIG_OPTION_USE_HARFBUZZ
-fi
-
-
-
-
-# We don't want to use a template file for `ftoption.h', since compilation
-# should work without calling a configure script also. For this reason, we
-# copy the `include/freetype/config/ftoption.h' file to the `unix/builds'
-# directory (using a dummy `AC_CONFIG_FILES' call) and apply the just
-# constructed $FTOPTION_H_SED regexp (using the post-action of
-# `AC_CONFIG_FILES'); this is also the version that gets installed later on.
-#
-ac_config_files="$ac_config_files ftoption.h:${srcdir}/../../include/freetype/config/ftoption.h"
-
-
-# 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"
-
-
-# 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:${as_lineno-$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= ;; #(
- *) { eval $ac_var=; 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
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$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=
-U=
-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.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append 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:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_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
-
-
-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
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (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
-
-
-# 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.
-as_myself=
-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
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-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 -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- 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_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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.9.1, which was
-generated by GNU Autoconf 2.69. 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"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, 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
-
-Configuration commands:
-$config_commands
-
-Report bugs to <freetype@nongnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-FreeType config.status 2.9.1
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 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
-_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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- 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 ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; 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"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append 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
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --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_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append 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 "$macro_version" | $SED "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
-AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
-enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
-shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
-SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
-ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
-PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
-host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
-host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
-host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
-build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
-build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
-build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
-SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
-Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
-GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
-EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
-FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
-LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
-NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
-LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
-exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
-AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
-STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
-lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
-CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
-compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
-GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
-nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
-lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
-objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
-need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
-LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
-libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
-version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
-install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
-configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
-striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
-LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`'
-reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`'
-reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`'
-old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`'
-compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`'
-GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`'
-archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
-whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
-compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`'
-archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`'
-archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`'
-module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`'
-module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`'
-with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`'
-allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`'
-no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`'
-inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`'
-link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`'
-always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`'
-export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`'
-exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`'
-include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`'
-prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`'
-postlink_cmds_RC='`$ECHO "$postlink_cmds_RC" | $SED "$delay_single_quote_subst"`'
-file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`'
-hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
-
-# Quote evaled strings.
-for var in AS \
-DLLTOOL \
-OBJDUMP \
-SHELL \
-ECHO \
-PATH_SEPARATOR \
-SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-deplibs_check_method \
-file_magic_cmd \
-file_magic_glob \
-want_nocaseglob \
-sharedlib_from_linklib_cmd \
-AR \
-AR_FLAGS \
-archiver_list_spec \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_import \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-lt_cv_nm_interface \
-nm_file_list_spec \
-lt_cv_truncate_bin \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_pic \
-lt_prog_compiler_wl \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-MANIFEST_TOOL \
-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_separator \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-install_override_mode \
-finish_eval \
-old_striplib \
-striplib \
-LD_RC \
-reload_flag_RC \
-compiler_RC \
-lt_prog_compiler_no_builtin_flag_RC \
-lt_prog_compiler_pic_RC \
-lt_prog_compiler_wl_RC \
-lt_prog_compiler_static_RC \
-lt_cv_prog_compiler_c_o_RC \
-export_dynamic_flag_spec_RC \
-whole_archive_flag_spec_RC \
-compiler_needs_object_RC \
-with_gnu_ld_RC \
-allow_undefined_flag_RC \
-no_undefined_flag_RC \
-hardcode_libdir_flag_spec_RC \
-hardcode_libdir_separator_RC \
-exclude_expsyms_RC \
-include_expsyms_RC \
-file_list_spec_RC; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- 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 \
-postlink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-configure_time_dlsearch_path \
-configure_time_lt_sys_library_path \
-reload_cmds_RC \
-old_archive_cmds_RC \
-old_archive_from_new_cmds_RC \
-old_archive_from_expsyms_cmds_RC \
-archive_cmds_RC \
-archive_expsym_cmds_RC \
-module_cmds_RC \
-module_expsym_cmds_RC \
-export_symbols_cmds_RC \
-prelink_cmds_RC \
-postlink_cmds_RC; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-ac_aux_dir='$ac_aux_dir'
-
-# See if we are running on zsh, and set the options that 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'
- RM='$RM'
- ofile='$ofile'
-
-
-
-
-
-FTOPTION_H_SED="$FTOPTION_H_SED"
-
-_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" ;;
- "ftoption.h") CONFIG_FILES="$CONFIG_FILES ftoption.h:${srcdir}/../../include/freetype/config/ftoption.h" ;;
- "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" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# 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=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-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 {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- 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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- 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 >>"\$ac_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 >>"\$ac_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 < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-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 >"$ac_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_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- 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_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-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_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[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="$ac_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_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append 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:${as_lineno-$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 >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- 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"; as_fn_mkdir_p
- 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
- 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
-# 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:${as_lineno-$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
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$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 "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
- :C) { $as_echo "$as_me:${as_lineno-$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 that 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
-# Generated automatically by $as_me ($PACKAGE) $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.
-
-# Provide generalized library-building support services.
-# Written by Gordon Matzigkeit, 1996
-
-# Copyright (C) 2014 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 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags='RC '
-
-# Configured defaults for sys_lib_dlsearch_path munging.
-: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Assembler program.
-AS=$lt_AS
-
-# DLL creation program.
-DLLTOOL=$lt_DLLTOOL
-
-# Object dumper program.
-OBJDUMP=$lt_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
-
-# Shared archive member basename,for filename based shared library versioning on AIX.
-shared_archive_member_spec=$shared_archive_member_spec
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that protects backslashes.
-ECHO=$lt_ECHO
-
-# The PATH separator for the build system.
-PATH_SEPARATOR=$lt_PATH_SEPARATOR
-
-# 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
-
-# convert \$build file names to \$host format.
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-
-# convert \$build files to toolchain format.
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-
-# 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
-
-# How to find potential files when deplibs_check_method = "file_magic".
-file_magic_glob=$lt_file_magic_glob
-
-# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-want_nocaseglob=$lt_want_nocaseglob
-
-# Command to associate shared and link libraries.
-sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-
-# The archiver.
-AR=$lt_AR
-
-# Flags to create an archive.
-AR_FLAGS=$lt_AR_FLAGS
-
-# How to feed a file listing to the archiver.
-archiver_list_spec=$lt_archiver_list_spec
-
-# 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
-
-# Whether to use a lock for old archive extraction.
-lock_old_archive_extraction=$lock_old_archive_extraction
-
-# 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 into a list of symbols to manually relocate.
-global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
-
-# 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 lister interface.
-nm_interface=$lt_lt_cv_nm_interface
-
-# Specify filename containing input files for \$NM.
-nm_file_list_spec=$lt_nm_file_list_spec
-
-# The root where to search for dependent libraries,and where our libraries should be installed.
-lt_sysroot=$lt_sysroot
-
-# Command to truncate a binary pipe.
-lt_truncate_bin=$lt_lt_cv_truncate_bin
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# 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
-
-# Manifest tool.
-MANIFEST_TOOL=$lt_MANIFEST_TOOL
-
-# 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
-
-# Permission mode override for installation of shared libraries.
-install_override_mode=$lt_install_override_mode
-
-# 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
-
-# Detected run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
-
-# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
-configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
-
-# 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
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# 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
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# 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
-
-# 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
-
-# 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
-
-# Commands necessary for finishing linking programs.
-postlink_cmds=$lt_postlink_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
-
- cat <<'_LT_EOF' >> "$cfgfile"
-
-# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-
-# ### END FUNCTIONS SHARED WITH CONFIGURE
-
-_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 set != "${COLLECT_NAMES+set}"; 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 '$q' "$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"
-
-# ### BEGIN LIBTOOL TAG CONFIG: RC
-
-# The linker used to build libraries.
-LD=$lt_LD_RC
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag_RC
-reload_cmds=$lt_reload_cmds_RC
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds_RC
-
-# A language specific compiler.
-CC=$lt_compiler_RC
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC_RC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_RC
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_RC
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_RC
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_RC
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object_RC
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds_RC
-archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds_RC
-module_expsym_cmds=$lt_module_expsym_cmds_RC
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld_RC
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_RC
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_RC
-
-# 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_RC
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-
-# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct_RC
-
-# 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_RC
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L_RC
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-
-# 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_RC
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath_RC
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_RC
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols_RC
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_RC
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_RC
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_RC
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds_RC
-
-# Commands necessary for finishing linking programs.
-postlink_cmds=$lt_postlink_cmds_RC
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec_RC
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_RC
-
-# ### END LIBTOOL TAG CONFIG: RC
-_LT_EOF
-
- ;;
- "ftoption.h":F) mv ftoption.h ftoption.tmp
- eval "sed $FTOPTION_H_SED < ftoption.tmp > ftoption.h"
- rm ftoption.tmp ;;
- "ftconfig.h":H) mv ftconfig.h ftconfig.tmp
- sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
- rm ftconfig.tmp ;;
-
- esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}:
-
-Library configuration:
- external zlib: $have_zlib
- bzip2: $have_bzip2
- libpng: $have_libpng
- harfbuzz: $have_harfbuzz
-" >&5
-$as_echo "$as_me:
-
-Library configuration:
- external zlib: $have_zlib
- bzip2: $have_bzip2
- libpng: $have_libpng
- harfbuzz: $have_harfbuzz
-" >&6;}
-
-# end of configure.raw
diff --git a/freetype/builds/unix/configure.ac b/freetype/builds/unix/configure.ac
index b306821f..d374088a 100644
--- a/freetype/builds/unix/configure.ac
+++ b/freetype/builds/unix/configure.ac
@@ -2,7 +2,7 @@
#
# Process this file with autoconf to produce a configure script.
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -11,13 +11,13 @@
# indicate that you have read the license and understand and accept it
# fully.
-AC_INIT([FreeType], [2.9.1], [freetype@nongnu.org], [freetype])
+AC_INIT([FreeType], [2.10.1], [freetype@nongnu.org], [freetype])
AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update `docs/VERSIONS.TXT'!
-version_info='22:1:16'
+version_info='23:1:17'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])
@@ -37,7 +37,7 @@ AC_SUBST(EXEEXT)
PKG_PROG_PKG_CONFIG([0.24])
LT_INIT(win32-dll)
-LT_PROG_RC
+AC_CHECK_HEADER([windows.h], [LT_PROG_RC])
# checks for native programs to generate building tool
@@ -196,7 +196,7 @@ AC_SYS_LARGEFILE
AC_ARG_ENABLE([mmap],
AS_HELP_STRING([--disable-mmap],
[do not check mmap() and do not use]),
- [enable_mmap="no"],[enable_mmap="yes"])
+ [enable_mmap="no"], [enable_mmap="yes"])
if test "x${enable_mmap}" != "xno"; then
AC_FUNC_MMAP
fi
@@ -311,14 +311,26 @@ AC_SUBST([XX_ANSIFLAGS])
# It is recommended that shared libraries hide symbols except those with
# explicit __attribute__((visibility("default"))).
#
+found_visibility_flag=no
AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
orig_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} -fvisibility=hidden"
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
- AC_MSG_RESULT(yes),
- CFLAGS="${orig_CFLAGS}"
- AC_MSG_RESULT(no))
-
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [found_visibility_flag=yes
+ AC_MSG_RESULT(yes)],
+ [CFLAGS="${orig_CFLAGS}"
+ AC_MSG_RESULT(no)])
+
+if test "${found_visibility_flag}" = "no"; then
+ AC_MSG_CHECKING([for -xldscope=hidden compiler flag])
+ orig_CFLAGS="${CFLAGS}"
+ CFLAGS="${CFLAGS} -xldscope=hidden"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [found_visibility_flag=yes
+ AC_MSG_RESULT(yes)],
+ [CFLAGS="${orig_CFLAGS}"
+ AC_MSG_RESULT(no)])
+fi
# All library tests below try `pkg-config' first. If that fails, a function
# from the library is tested in the traditional autoconf way (zlib, bzip2),
@@ -956,6 +968,25 @@ case "$CFLAGS" in
;;
esac
+# Check for python and docwriter
+
+AC_CHECK_PROGS([PYTHON], [python3 python2 python], [missing])
+have_docwriter=no
+if test "x$PYTHON" != "xmissing"; then
+ AC_CHECK_PROGS([PIP], [pip3 pip2 pip], [missing])
+
+ if test "x$PIP" != "xmissing"; then
+ AC_MSG_CHECKING([for \`docwriter' Python module])
+ $PIP show -q docwriter
+ if test "x$?" = "x0"; then
+ have_docwriter=yes
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+fi
+
# entries in Requires.private are separated by commas;
REQUIRES_PRIVATE="$zlib_reqpriv, \
@@ -1100,4 +1131,15 @@ Library configuration:
harfbuzz: $have_harfbuzz
])
+# Warn if docwriter is not installed
+
+if test $have_docwriter = no; then
+ AC_MSG_NOTICE([
+ Warning: \`make refdoc' will fail since pip package \`docwriter' is not
+ installed. To install, run \`$PIP install docwriter', or to use a python
+ virtual environment, run \`make refdoc-venv' (requires pip package
+ \`virtualenv').
+ ])
+fi
+
# end of configure.raw
diff --git a/freetype/builds/unix/configure.raw b/freetype/builds/unix/configure.raw
index baab79dc..a1a6dbeb 100644
--- a/freetype/builds/unix/configure.raw
+++ b/freetype/builds/unix/configure.raw
@@ -2,7 +2,7 @@
#
# Process this file with autoconf to produce a configure script.
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,7 +17,7 @@ AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update `docs/VERSIONS.TXT'!
-version_info='22:1:16'
+version_info='23:1:17'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])
@@ -37,7 +37,7 @@ AC_SUBST(EXEEXT)
PKG_PROG_PKG_CONFIG([0.24])
LT_INIT(win32-dll)
-LT_PROG_RC
+AC_CHECK_HEADER([windows.h], [LT_PROG_RC])
# checks for native programs to generate building tool
@@ -196,7 +196,7 @@ AC_SYS_LARGEFILE
AC_ARG_ENABLE([mmap],
AS_HELP_STRING([--disable-mmap],
[do not check mmap() and do not use]),
- [enable_mmap="no"],[enable_mmap="yes"])
+ [enable_mmap="no"], [enable_mmap="yes"])
if test "x${enable_mmap}" != "xno"; then
AC_FUNC_MMAP
fi
@@ -311,14 +311,26 @@ AC_SUBST([XX_ANSIFLAGS])
# It is recommended that shared libraries hide symbols except those with
# explicit __attribute__((visibility("default"))).
#
+found_visibility_flag=no
AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
orig_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} -fvisibility=hidden"
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
- AC_MSG_RESULT(yes),
- CFLAGS="${orig_CFLAGS}"
- AC_MSG_RESULT(no))
-
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [found_visibility_flag=yes
+ AC_MSG_RESULT(yes)],
+ [CFLAGS="${orig_CFLAGS}"
+ AC_MSG_RESULT(no)])
+
+if test "${found_visibility_flag}" = "no"; then
+ AC_MSG_CHECKING([for -xldscope=hidden compiler flag])
+ orig_CFLAGS="${CFLAGS}"
+ CFLAGS="${CFLAGS} -xldscope=hidden"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [found_visibility_flag=yes
+ AC_MSG_RESULT(yes)],
+ [CFLAGS="${orig_CFLAGS}"
+ AC_MSG_RESULT(no)])
+fi
# All library tests below try `pkg-config' first. If that fails, a function
# from the library is tested in the traditional autoconf way (zlib, bzip2),
@@ -956,6 +968,25 @@ case "$CFLAGS" in
;;
esac
+# Check for python and docwriter
+
+AC_CHECK_PROGS([PYTHON], [python3 python2 python], [missing])
+have_docwriter=no
+if test "x$PYTHON" != "xmissing"; then
+ AC_CHECK_PROGS([PIP], [pip3 pip2 pip], [missing])
+
+ if test "x$PIP" != "xmissing"; then
+ AC_MSG_CHECKING([for \`docwriter' Python module])
+ $PIP show -q docwriter
+ if test "x$?" = "x0"; then
+ have_docwriter=yes
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+fi
+
# entries in Requires.private are separated by commas;
REQUIRES_PRIVATE="$zlib_reqpriv, \
@@ -1100,4 +1131,15 @@ Library configuration:
harfbuzz: $have_harfbuzz
])
+# Warn if docwriter is not installed
+
+if test $have_docwriter = no; then
+ AC_MSG_NOTICE([
+ Warning: \`make refdoc' will fail since pip package \`docwriter' is not
+ installed. To install, run \`$PIP install docwriter', or to use a python
+ virtual environment, run \`make refdoc-venv' (requires pip package
+ \`virtualenv').
+ ])
+fi
+
# end of configure.raw
diff --git a/freetype/builds/unix/detect.mk b/freetype/builds/unix/detect.mk
index 54daa078..7ce7d8ac 100644
--- a/freetype/builds/unix/detect.mk
+++ b/freetype/builds/unix/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,8 +40,10 @@ ifeq ($(PLATFORM),unix)
ifneq ($(findstring devel,$(MAKECMDGOALS)),)
CONFIG_FILE := unix-dev.mk
CC := gcc
- devel: setup
+
.PHONY: devel
+ devel: setup
+ @:
else
# If `lcc' is the requested target, we use a special configuration
@@ -50,8 +52,10 @@ ifeq ($(PLATFORM),unix)
ifneq ($(findstring lcc,$(MAKECMDGOALS)),)
CONFIG_FILE := unix-lcc.mk
CC := lcc
- lcc: setup
+
.PHONY: lcc
+ lcc: setup
+ @:
else
# If a Unix platform is detected, the configure script is called and
@@ -68,9 +72,11 @@ ifeq ($(PLATFORM),unix)
# platform).
#
CONFIG_FILE := unix.mk
- unix: setup
must_configure := 1
+
.PHONY: unix
+ unix: setup
+ @:
endif
endif
diff --git a/freetype/builds/unix/freetype-config.in b/freetype/builds/unix/freetype-config.in
index 2d5b90dc..9e8d3c2b 100644
--- a/freetype/builds/unix/freetype-config.in
+++ b/freetype/builds/unix/freetype-config.in
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# Copyright 2000-2018 by
+# Copyright (C) 2000-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/freetype2.m4 b/freetype/builds/unix/freetype2.m4
index af2e6590..d68d15e5 100644
--- a/freetype/builds/unix/freetype2.m4
+++ b/freetype/builds/unix/freetype2.m4
@@ -1,7 +1,7 @@
# Configure paths for FreeType2
# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ft-munmap.m4 b/freetype/builds/unix/ft-munmap.m4
index 00eda492..4384013f 100644
--- a/freetype/builds/unix/ft-munmap.m4
+++ b/freetype/builds/unix/ft-munmap.m4
@@ -1,6 +1,6 @@
## FreeType specific autoconf tests
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ftconfig.in b/freetype/builds/unix/ftconfig.in
index b9c21da2..019793e7 100644
--- a/freetype/builds/unix/ftconfig.in
+++ b/freetype/builds/unix/ftconfig.in
@@ -1,38 +1,36 @@
-/***************************************************************************/
-/* */
-/* ftconfig.in */
-/* */
-/* UNIX-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /*************************************************************************/
-
+/****************************************************************************
+ *
+ * ftconfig.in
+ *
+ * UNIX-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This header file contains a number of macro definitions that are used by
+ * the rest of the engine. Most of the macros here are automatically
+ * determined at compile time, and you should not need to change it to port
+ * FreeType, except to compile the library with a non-ANSI compiler.
+ *
+ * Note however that if some specific modifications are needed, we advise
+ * you to place a modified copy in your build directory.
+ *
+ * The build directory is usually `builds/<system>`, and contains
+ * system-specific files that are always included first when building the
+ * library.
+ *
+ */
#ifndef FTCONFIG_H_
#define FTCONFIG_H_
@@ -45,30 +43,28 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
+ /**************************************************************************
+ *
+ * PLATFORM-SPECIFIC CONFIGURATION MACROS
+ *
+ * These macros can be toggled to suit a specific system. The current ones
+ * are defaults used to compile FreeType in an ANSI C environment (16bit
+ * compilers are also supported). Copy this file to your own
+ * `builds/<system>` directory, and edit it to port the engine.
+ *
+ */
#undef HAVE_UNISTD_H
#undef HAVE_FCNTL_H
#undef HAVE_STDINT_H
-
- /* There are systems (like the Texas Instruments 'C54x) where a `char' */
- /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
- /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
- /* `char' type. */
+ /* 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
@@ -85,67 +81,66 @@ FT_BEGIN_HEADER
#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
- /* Following cpp computation of the bit length of int and long */
- /* is copied from default include/freetype/config/ftconfig.h. */
- /* If any improvement is required for this file, it should be */
- /* applied to the original header file for the builders that */
- /* do not use configure script. */
+ /* Following cpp computation of the bit length of `int` and `long` */
+ /* is copied from default `include/freetype/config/ftconfig.h`. */
+ /* If any improvement is required for this file, it should be */
+ /* applied to the original header file for the builders that do */
+ /* not use configure script. */
- /* The size of an `int' type. */
+ /* The size of an `int` type. */
#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT )
#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
+#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)
+#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 */
+ /* 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)
+#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)
+#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)
+#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT )
#else
#error "Unsupported size of `long' type!"
#endif
#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
+ /* `FT_UNUSED` indicates 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. */
- /* */
+ /**************************************************************************
+ *
+ * AUTOMATIC CONFIGURATION MACROS
+ *
+ * These macros are computed from the ones defined above. Don't touch
+ * their definition, unless you know precisely what you are doing. No
+ * porter should need to mess with them.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * Mac support
+ *
+ * This is the only necessary change, so it is defined here instead
+ * providing a new configuration file.
+ */
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
+ /* No Carbon frameworks for 64bit 10.4.x. */
+ /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */
+ /* so guess the system version by maximum errno before inclusion. */
#include <errno.h>
#ifdef ECANCELED /* defined since 10.2 */
#include "AvailabilityMacros.h"
@@ -165,7 +160,7 @@ FT_BEGIN_HEADER
#endif
- /* Fix compiler warning with sgi compiler */
+ /* Fix compiler warning with sgi compiler. */
#if defined( __sgi ) && !defined( __GNUC__ )
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
#pragma set woff 3505
@@ -173,33 +168,33 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt16
+ *
+ * @description:
+ * A typedef for a 16bit unsigned integer type.
+ */
typedef unsigned short FT_UInt16;
/* */
@@ -208,50 +203,50 @@ FT_BEGIN_HEADER
/* 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt32
+ *
+ * A typedef for a 32bit unsigned integer type. The size depends on the
+ * configuration.
+ */
typedef unsigned XXX FT_UInt32;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int64
+ *
+ * A typedef for a 64bit signed integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef signed XXX FT_Int64;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt64
+ *
+ * A typedef for a 64bit unsigned integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef unsigned XXX FT_UInt64;
/* */
@@ -273,7 +268,7 @@ FT_BEGIN_HEADER
#endif
- /* look up an integer type that is at least 32 bits */
+ /* look up an integer type that is at least 32~bits */
#if FT_SIZEOF_INT >= 4
typedef int FT_Fast;
@@ -287,17 +282,17 @@ FT_BEGIN_HEADER
#endif
- /* determine whether we have a 64-bit int type */
- /* (mostly for environments without `autoconf') */
+ /* 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 */
+ /* `FT_LONG64` must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
/* we handle the LLP64 scheme separately for GCC and clang, */
- /* suppressing the `long long' warning */
+ /* suppressing the `long long` warning */
#elif ( FT_SIZEOF_LONG == 4 ) && \
defined( HAVE_LONG_LONG_INT ) && \
defined( __GNUC__ )
@@ -306,13 +301,13 @@ FT_BEGIN_HEADER
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
+ /**************************************************************************
+ *
+ * A 64-bit data type may create compilation problems if you compile in
+ * strict ANSI mode. To avoid them, we disable other 64-bit data types if
+ * `__STDC__` is defined. You can however ignore this rule by defining the
+ * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+ */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
@@ -321,19 +316,19 @@ FT_BEGIN_HEADER
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
#elif defined( __BORLANDC__ ) /* Borland C++ */
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
+ /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+ /* to test the compiler version. */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
@@ -350,7 +345,7 @@ FT_BEGIN_HEADER
#elif defined( __GNUC__ )
- /* GCC provides the `long long' type */
+ /* GCC provides the `long long` type */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
@@ -374,11 +369,11 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * miscellaneous
+ *
+ */
#define FT_BEGIN_STMNT do {
@@ -386,7 +381,7 @@ FT_BEGIN_HEADER
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
- /* typeof condition taken from gnulib's `intprops.h' header file */
+ /* `typeof` condition taken from gnulib's `intprops.h` header file */
#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
defined( __IBM__TYPEOF__ ) ) || \
@@ -397,14 +392,14 @@ FT_BEGIN_HEADER
#endif
- /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
- /* a function that gets used only within the scope of a module. */
- /* Normally, both the header and source code files for such a */
- /* function are within a single module directory. */
- /* */
- /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
- /* FT_LOCAL_ARRAY_DEF. */
- /* */
+ /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, */
+ /* respectively, a function that gets used only within the scope of a */
+ /* module. Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and */
+ /* `FT_LOCAL_ARRAY_DEF`. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -426,12 +421,12 @@ FT_BEGIN_HEADER
#define FT_LOCAL_ARRAY_DEF( x ) const x
- /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
- /* functions that are used in more than a single module. In the */
- /* current setup this implies that the declaration is in a header */
- /* file in the `include/freetype/internal' directory, and the */
- /* function body is in a file in `src/base'. */
- /* */
+ /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header file */
+ /* in the `include/freetype/internal` directory, and the function body */
+ /* is in a file in `src/base`. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -454,45 +449,50 @@ FT_BEGIN_HEADER
#endif /* !FT_BASE_DEF */
- /* When compiling FreeType as a DLL or DSO with hidden visibility */
- /* some systems/compilers need a special attribute 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. */
- /* */
- /* To export a variable, use FT_EXPORT_VAR. */
- /* */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute 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. */
+ /* */
+ /* To export a variable, use `FT_EXPORT_VAR`. */
+ /* */
#ifndef FT_EXPORT
#ifdef FT2_BUILD_LIBRARY
-#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#if defined( _WIN32 ) && defined( DLL_EXPORT )
#define FT_EXPORT( x ) __declspec( dllexport ) x
#elif defined( __GNUC__ ) && __GNUC__ >= 4
#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
+#define FT_EXPORT( x ) __global x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
@@ -501,7 +501,7 @@ FT_BEGIN_HEADER
#else
-#if defined( FT2_DLLIMPORT )
+#if defined( _WIN32 ) && defined( DLL_IMPORT )
#define FT_EXPORT( x ) __declspec( dllimport ) x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
@@ -535,11 +535,12 @@ FT_BEGIN_HEADER
#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 */
+ /* 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 */
@@ -562,7 +563,7 @@ FT_BEGIN_HEADER
/* */
/* */
/* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* the infamous `_cdecl` or `__fastcall` declarations. */
/* */
#ifndef FT_CALLBACK_DEF
#ifdef __cplusplus
diff --git a/freetype/builds/unix/ftsystem.c b/freetype/builds/unix/ftsystem.c
index 8fdbeb0f..826713f9 100644
--- a/freetype/builds/unix/ftsystem.c
+++ b/freetype/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Unix-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2018 by */
+/* Copyright (C) 1996-2019 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -173,7 +173,7 @@
/* messages during execution. */
/* */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
+#define FT_COMPONENT io
/* We use the macro STREAM_FILE for convenience to extract the */
/* system-specific stream handle from a given FreeType stream object */
diff --git a/freetype/builds/unix/install.mk b/freetype/builds/unix/install.mk
index c08c3b75..2287dfc4 100644
--- a/freetype/builds/unix/install.mk
+++ b/freetype/builds/unix/install.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ltmain.sh b/freetype/builds/unix/ltmain.sh
index 0f0a2da3..0f0a2da3 100644..100755
--- a/freetype/builds/unix/ltmain.sh
+++ b/freetype/builds/unix/ltmain.sh
diff --git a/freetype/builds/unix/unix-cc.in b/freetype/builds/unix/unix-cc.in
index 5675866e..ed51fde3 100644
--- a/freetype/builds/unix/unix-cc.in
+++ b/freetype/builds/unix/unix-cc.in
@@ -2,7 +2,7 @@
# FreeType 2 template for Unix-specific compiler definitions
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix-def.in b/freetype/builds/unix/unix-def.in
index 6957053a..e74844d2 100644
--- a/freetype/builds/unix/unix-def.in
+++ b/freetype/builds/unix/unix-def.in
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -21,6 +21,12 @@ DELDIR := rm -rf
CAT := cat
SEP := /
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+PYTHON := @PYTHON@
+PIP := @PIP@
+BIN := bin
+
# this is used for `make distclean' and `make install'
OBJ_BUILD ?= $(BUILD_DIR)
diff --git a/freetype/builds/unix/unix-dev.mk b/freetype/builds/unix/unix-dev.mk
index 5a516ad2..3cb171a3 100644
--- a/freetype/builds/unix/unix-dev.mk
+++ b/freetype/builds/unix/unix-dev.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix-lcc.mk b/freetype/builds/unix/unix-lcc.mk
index 73a02d43..e632e9a3 100644
--- a/freetype/builds/unix/unix-lcc.mk
+++ b/freetype/builds/unix/unix-lcc.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix.mk b/freetype/builds/unix/unix.mk
index acd54d3d..2d04eefc 100644
--- a/freetype/builds/unix/unix.mk
+++ b/freetype/builds/unix/unix.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unixddef.mk b/freetype/builds/unix/unixddef.mk
index a8da63a0..9aad35c6 100644
--- a/freetype/builds/unix/unixddef.mk
+++ b/freetype/builds/unix/unixddef.mk
@@ -4,7 +4,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -23,6 +23,10 @@ DELETE := rm -f
CAT := cat
SEP := /
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
+
# we use a special devel ftoption.h
DEVEL_DIR := $(TOP_DIR)/devel
diff --git a/freetype/builds/vms/LIBS.OPT_IA64 b/freetype/builds/vms/LIBS.OPT_IA64
new file mode 100644
index 00000000..6768c766
--- /dev/null
+++ b/freetype/builds/vms/LIBS.OPT_IA64
Binary files differ
diff --git a/freetype/builds/vms/_LINK.OPT_IA64 b/freetype/builds/vms/_LINK.OPT_IA64
new file mode 100644
index 00000000..b8cbd1bc
--- /dev/null
+++ b/freetype/builds/vms/_LINK.OPT_IA64
Binary files differ
diff --git a/freetype/builds/vms/ftconfig.h b/freetype/builds/vms/ftconfig.h
index 021e2c65..7825db0f 100644
--- a/freetype/builds/vms/ftconfig.h
+++ b/freetype/builds/vms/ftconfig.h
@@ -1,38 +1,36 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* VMS-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /*************************************************************************/
-
+/****************************************************************************
+ *
+ * ftconfig.h
+ *
+ * VMS-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This header file contains a number of macro definitions that are used by
+ * the rest of the engine. Most of the macros here are automatically
+ * determined at compile time, and you should not need to change it to port
+ * FreeType, except to compile the library with a non-ANSI compiler.
+ *
+ * Note however that if some specific modifications are needed, we advise
+ * you to place a modified copy in your build directory.
+ *
+ * The build directory is usually `builds/<system>`, and contains
+ * system-specific files that are always included first when building the
+ * library.
+ *
+ */
#ifndef FTCONFIG_H_
#define FTCONFIG_H_
@@ -45,17 +43,16 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
+ /**************************************************************************
+ *
+ * PLATFORM-SPECIFIC CONFIGURATION MACROS
+ *
+ * These macros can be toggled to suit a specific system. The current ones
+ * are defaults used to compile FreeType in an ANSI C environment (16bit
+ * compilers are also supported). Copy this file to your own
+ * `builds/<system>` directory, and edit it to port the engine.
+ *
+ */
#define HAVE_UNISTD_H 1
#define HAVE_FCNTL_H 1
@@ -66,38 +63,36 @@ FT_BEGIN_HEADER
#define FT_SIZEOF_INT 4
#define FT_SIZEOF_LONG 4
-#define FT_CHAR_BIT 8
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
+ /* `FT_UNUSED` indicates 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. */
- /* */
+ /**************************************************************************
+ *
+ * AUTOMATIC CONFIGURATION MACROS
+ *
+ * These macros are computed from the ones defined above. Don't touch
+ * their definition, unless you know precisely what you are doing. No
+ * porter should need to mess with them.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * Mac support
+ *
+ * This is the only necessary change, so it is defined here instead
+ * providing a new configuration file.
+ */
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
+ /* No Carbon frameworks for 64bit 10.4.x. */
+ /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */
+ /* so guess the system version by maximum errno before inclusion. */
#include <errno.h>
#ifdef ECANCELED /* defined since 10.2 */
#include "AvailabilityMacros.h"
@@ -117,7 +112,7 @@ FT_BEGIN_HEADER
#endif
- /* Fix compiler warning with sgi compiler */
+ /* Fix compiler warning with sgi compiler. */
#if defined( __sgi ) && !defined( __GNUC__ )
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
#pragma set woff 3505
@@ -125,33 +120,33 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt16
+ *
+ * @description:
+ * A typedef for a 16bit unsigned integer type.
+ */
typedef unsigned short FT_UInt16;
/* */
@@ -160,50 +155,50 @@ FT_BEGIN_HEADER
/* 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt32
+ *
+ * A typedef for a 32bit unsigned integer type. The size depends on the
+ * configuration.
+ */
typedef unsigned XXX FT_UInt32;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int64
+ *
+ * A typedef for a 64bit signed integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef signed XXX FT_Int64;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt64
+ *
+ * A typedef for a 64bit unsigned integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef unsigned XXX FT_UInt64;
/* */
@@ -225,7 +220,7 @@ FT_BEGIN_HEADER
#endif
- /* look up an integer type that is at least 32 bits */
+ /* look up an integer type that is at least 32~bits */
#if FT_SIZEOF_INT >= 4
typedef int FT_Fast;
@@ -239,17 +234,17 @@ FT_BEGIN_HEADER
#endif
- /* determine whether we have a 64-bit int type */
- /* (mostly for environments without `autoconf') */
+ /* 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 */
+ /* `FT_LONG64` must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
/* we handle the LLP64 scheme separately for GCC and clang, */
- /* suppressing the `long long' warning */
+ /* suppressing the `long long` warning */
#elif ( FT_SIZEOF_LONG == 4 ) && \
defined( HAVE_LONG_LONG_INT ) && \
defined( __GNUC__ )
@@ -258,13 +253,13 @@ FT_BEGIN_HEADER
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
+ /**************************************************************************
+ *
+ * A 64-bit data type may create compilation problems if you compile in
+ * strict ANSI mode. To avoid them, we disable other 64-bit data types if
+ * `__STDC__` is defined. You can however ignore this rule by defining the
+ * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+ */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
@@ -273,19 +268,19 @@ FT_BEGIN_HEADER
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
#elif defined( __BORLANDC__ ) /* Borland C++ */
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
+ /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+ /* to test the compiler version. */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
@@ -302,7 +297,7 @@ FT_BEGIN_HEADER
#elif defined( __GNUC__ )
- /* GCC provides the `long long' type */
+ /* GCC provides the `long long` type */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
@@ -326,11 +321,11 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * miscellaneous
+ *
+ */
#define FT_BEGIN_STMNT do {
@@ -338,7 +333,7 @@ FT_BEGIN_HEADER
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
- /* typeof condition taken from gnulib's `intprops.h' header file */
+ /* `typeof` condition taken from gnulib's `intprops.h` header file */
#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
defined( __IBM__TYPEOF__ ) ) || \
@@ -349,14 +344,14 @@ FT_BEGIN_HEADER
#endif
- /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
- /* a function that gets used only within the scope of a module. */
- /* Normally, both the header and source code files for such a */
- /* function are within a single module directory. */
- /* */
- /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
- /* FT_LOCAL_ARRAY_DEF. */
- /* */
+ /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, */
+ /* respectively, a function that gets used only within the scope of a */
+ /* module. Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and */
+ /* `FT_LOCAL_ARRAY_DEF`. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -378,12 +373,12 @@ FT_BEGIN_HEADER
#define FT_LOCAL_ARRAY_DEF( x ) const x
- /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
- /* functions that are used in more than a single module. In the */
- /* current setup this implies that the declaration is in a header */
- /* file in the `include/freetype/internal' directory, and the */
- /* function body is in a file in `src/base'. */
- /* */
+ /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header file */
+ /* in the `include/freetype/internal` directory, and the function body */
+ /* is in a file in `src/base`. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -406,45 +401,50 @@ FT_BEGIN_HEADER
#endif /* !FT_BASE_DEF */
- /* When compiling FreeType as a DLL or DSO with hidden visibility */
- /* some systems/compilers need a special attribute 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. */
- /* */
- /* To export a variable, use FT_EXPORT_VAR. */
- /* */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute 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. */
+ /* */
+ /* To export a variable, use `FT_EXPORT_VAR`. */
+ /* */
#ifndef FT_EXPORT
#ifdef FT2_BUILD_LIBRARY
-#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#if defined( _WIN32 ) && defined( DLL_EXPORT )
#define FT_EXPORT( x ) __declspec( dllexport ) x
#elif defined( __GNUC__ ) && __GNUC__ >= 4
#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
+#define FT_EXPORT( x ) __global x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
@@ -453,7 +453,7 @@ FT_BEGIN_HEADER
#else
-#if defined( FT2_DLLIMPORT )
+#if defined( _WIN32 ) && defined( DLL_IMPORT )
#define FT_EXPORT( x ) __declspec( dllimport ) x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
@@ -487,11 +487,12 @@ FT_BEGIN_HEADER
#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 */
+ /* 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 */
@@ -514,7 +515,7 @@ FT_BEGIN_HEADER
/* */
/* */
/* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* the infamous `_cdecl` or `__fastcall` declarations. */
/* */
#ifndef FT_CALLBACK_DEF
#ifdef __cplusplus
diff --git a/freetype/builds/vms/ftsystem.c b/freetype/builds/vms/ftsystem.c
index 7d79f9a3..af6fe461 100644
--- a/freetype/builds/vms/ftsystem.c
+++ b/freetype/builds/vms/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* VMS-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2018 by */
+/* Copyright (C) 1996-2019 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -172,7 +172,7 @@
/* messages during execution. */
/* */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
+#define FT_COMPONENT io
/* We use the macro STREAM_FILE for convenience to extract the */
/* system-specific stream handle from a given FreeType stream object */
diff --git a/freetype/builds/vms/vmslib.dat b/freetype/builds/vms/vmslib.dat
new file mode 100644
index 00000000..4c817da4
--- /dev/null
+++ b/freetype/builds/vms/vmslib.dat
@@ -0,0 +1,28 @@
+!
+! This is a simple driver file with information used by 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
+! 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://www.decus.de:8080/www/vms/sw/zlib.htmlx
+!
+BZ2LIB # sys$library:libbz2.olb # decc$user_include: # bzlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
+PNGLIB # sys$library:libpng.olb # sys$library: # png.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
+ZLIB # sys$library:libz.olb # sys$library: # zlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
diff --git a/freetype/builds/wince/ftdebug.c b/freetype/builds/wince/ftdebug.c
index 83c5f447..d0ca999c 100644
--- a/freetype/builds/wince/ftdebug.c
+++ b/freetype/builds/wince/ftdebug.c
@@ -1,53 +1,53 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for WinCE (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ * Debugging and logging component for WinCE (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This component contains various macros and functions used to ease the
+ * debugging of the FreeType engine. Its main purpose is in assertion
+ * checking, tracing, and error detection.
+ *
+ * There are now three debugging modes:
+ *
+ * - trace mode
+ *
+ * Error and trace messages are sent to the log file (which can be the
+ * standard error output).
+ *
+ * - error mode
+ *
+ * Only error messages are generated.
+ *
+ * - release mode:
+ *
+ * No error message is sent or generated. The code is free from any
+ * debugging parts.
+ *
+ */
#include <ft2build.h>
+#include FT_FREETYPE_H
#include FT_INTERNAL_DEBUG_H
#ifdef FT_DEBUG_LEVEL_ERROR
-
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
@@ -55,14 +55,15 @@
#include <windows.h>
- void
+ static void
OutputDebugStringEx( const char* str )
{
static WCHAR buf[8192];
+ int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
+ sizeof ( buf ) / sizeof ( *buf ) );
+
- int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
- sizeof ( buf ) / sizeof ( *buf ) );
if ( !sz )
lstrcpyW( buf, L"OutputDebugStringEx: MultiByteToWideChar failed" );
@@ -70,6 +71,8 @@
}
+ /* documentation is in ftdebug.h */
+
FT_BASE_DEF( void )
FT_Message( const char* fmt,
... )
@@ -87,6 +90,8 @@
}
+ /* documentation is in ftdebug.h */
+
FT_BASE_DEF( void )
FT_Panic( const char* fmt,
... )
@@ -111,18 +116,38 @@
int line,
const char* file )
{
+#if 0
+ /* activating the code in this block makes FreeType very chatty */
+ fprintf( stderr,
+ "%s:%d: error 0x%02x: %s\n",
+ file,
+ line,
+ error,
+ FT_Error_String( error ) );
+#else
FT_UNUSED( error );
FT_UNUSED( line );
FT_UNUSED( file );
+#endif
return 0;
}
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
#ifdef FT_DEBUG_LEVEL_TRACE
+ /* array of trace levels, initialized to 0; */
+ /* this gets adjusted at run-time */
+ static int ft_trace_levels_enabled[trace_count];
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
+ /* array of trace levels, always initialized to 0 */
+ static int ft_trace_levels_disabled[trace_count];
+
+ /* a pointer to either `ft_trace_levels_enabled' */
+ /* or `ft_trace_levels_disabled' */
+ int* ft_trace_levels;
/* define array of trace toggle names */
#define FT_TRACE_DEF( x ) #x ,
@@ -136,24 +161,66 @@
#undef FT_TRACE_DEF
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the "FT2_DEBUG" environment variable. It must be a list of */
- /* toggles, separated by spaces, `;' or `,'. Example: */
- /* */
- /* "any:3 memory:6 stream:5" */
- /* */
- /* This will request that all levels be set to 3, except the trace level */
- /* for the memory and stream components which are set to 6 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of the */
- /* available toggle names. */
- /* */
- /* The level must be between 0 and 6; 0 means quiet (except for serious */
- /* runtime errors), and 6 means _very_ verbose. */
- /* */
+ /* 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;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ ft_trace_levels = ft_trace_levels_disabled;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ ft_trace_levels = ft_trace_levels_enabled;
+ }
+
+
+ /**************************************************************************
+ *
+ * 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 )
{
@@ -189,8 +256,8 @@
if ( *p == ':' && p > q )
{
- int n, i, len = (int)( p - q );
- int level = -1, found = -1;
+ FT_Int n, i, len = (FT_Int)( p - q );
+ FT_Int level = -1, found = -1;
for ( n = 0; n < trace_count; n++ )
@@ -224,16 +291,18 @@
{
if ( found == trace_any )
{
- /* special case for "any" */
+ /* special case for `any' */
for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
+ ft_trace_levels_enabled[n] = level;
}
else
- ft_trace_levels[found] = level;
+ ft_trace_levels_enabled[found] = level;
}
}
}
}
+
+ ft_trace_levels = ft_trace_levels_enabled;
}
@@ -247,9 +316,39 @@
}
-#endif /* !FT_DEBUG_LEVEL_TRACE */
+ FT_BASE_DEF( FT_Int )
+ FT_Trace_Get_Count( void )
+ {
+ return 0;
+ }
-#endif /* FT_DEBUG_LEVEL_ERROR */
+
+ FT_BASE_DEF( const char * )
+ FT_Trace_Get_Name( FT_Int idx )
+ {
+ FT_UNUSED( idx );
+
+ return NULL;
+ }
+
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ /* nothing */
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ /* nothing */
+ }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
/* END */
diff --git a/freetype/builds/wince/vc2005-ce/freetype.vcproj b/freetype/builds/wince/vc2005-ce/freetype.vcproj
index 30334af6..4442d00b 100644
--- a/freetype/builds/wince/vc2005-ce/freetype.vcproj
+++ b/freetype/builds/wince/vc2005-ce/freetype.vcproj
@@ -21,7 +21,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -41,7 +41,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -61,7 +61,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -81,7 +81,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -121,7 +121,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -141,7 +141,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -161,7 +161,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -181,7 +181,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -201,7 +201,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -221,7 +221,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -241,7 +241,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -261,7 +261,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -281,7 +281,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -301,7 +301,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -321,7 +321,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -341,7 +341,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -361,7 +361,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -381,7 +381,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -401,7 +401,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -421,7 +421,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -441,7 +441,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -461,7 +461,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -481,7 +481,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -501,7 +501,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -521,7 +521,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -541,7 +541,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -561,7 +561,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -581,7 +581,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -601,7 +601,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -621,7 +621,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -641,7 +641,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -661,7 +661,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -681,7 +681,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -701,7 +701,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -721,7 +721,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -741,7 +741,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -758,7 +758,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
diff --git a/freetype/builds/wince/vc2005-ce/index.html b/freetype/builds/wince/vc2005-ce/index.html
index 02a1caf8..16a10625 100644
--- a/freetype/builds/wince/vc2005-ce/index.html
+++ b/freetype/builds/wince/vc2005-ce/index.html
@@ -21,21 +21,21 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
<ul>
<pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
+ freetype2101.lib - release build; single threaded
+ freetype2101_D.lib - debug build; single threaded
+ freetype2101MT.lib - release build; multi-threaded
+ freetype2101MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/freetype/builds/wince/vc2008-ce/freetype.vcproj b/freetype/builds/wince/vc2008-ce/freetype.vcproj
index 9b8651f6..bbb9f3c1 100644
--- a/freetype/builds/wince/vc2008-ce/freetype.vcproj
+++ b/freetype/builds/wince/vc2008-ce/freetype.vcproj
@@ -88,7 +88,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -177,7 +177,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -266,7 +266,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -355,7 +355,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -444,7 +444,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -533,7 +533,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -621,7 +621,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -709,7 +709,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -797,7 +797,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -885,7 +885,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -973,7 +973,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1061,7 +1061,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1149,7 +1149,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1236,7 +1236,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1323,7 +1323,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1410,7 +1410,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1497,7 +1497,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1584,7 +1584,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1668,7 +1668,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1753,7 +1753,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1838,7 +1838,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1923,7 +1923,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2008,7 +2008,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2093,7 +2093,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2178,7 +2178,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2263,7 +2263,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2348,7 +2348,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2433,7 +2433,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2518,7 +2518,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2603,7 +2603,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2689,7 +2689,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2775,7 +2775,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2861,7 +2861,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2947,7 +2947,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3033,7 +3033,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3119,7 +3119,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3205,7 +3205,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3279,7 +3279,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
diff --git a/freetype/builds/wince/vc2008-ce/index.html b/freetype/builds/wince/vc2008-ce/index.html
index f7a35837..9d71b09d 100644
--- a/freetype/builds/wince/vc2008-ce/index.html
+++ b/freetype/builds/wince/vc2008-ce/index.html
@@ -21,21 +21,21 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
<ul>
<pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
+ freetype2101.lib - release build; single threaded
+ freetype2101_D.lib - debug build; single threaded
+ freetype2101MT.lib - release build; multi-threaded
+ freetype2101MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/freetype/builds/windows/detect.mk b/freetype/builds/windows/detect.mk
index dd5669ca..351e256d 100644
--- a/freetype/builds/windows/detect.mk
+++ b/freetype/builds/windows/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -118,64 +118,82 @@ ifeq ($(PLATFORM),windows)
ifneq ($(findstring visualc,$(MAKECMDGOALS)),) # Visual C/C++
CONFIG_FILE := w32-vcc.mk
CC := cl
- visualc: setup
+
.PHONY: visualc
+ visualc: setup
+ @cd .
endif
ifneq ($(findstring intelc,$(MAKECMDGOALS)),) # Intel C/C++
CONFIG_FILE := w32-intl.mk
CC := cl
- visualc: setup
+
.PHONY: intelc
+ visualc: setup
+ @cd .
endif
ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
CONFIG_FILE := w32-wat.mk
CC := wcc386
- watcom: setup
+
.PHONY: watcom
+ watcom: setup
+ @cd .
endif
ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
CONFIG_FILE := w32-icc.mk
CC := icc
- visualage: setup
+
.PHONY: visualage
+ visualage: setup
+ @cd .
endif
ifneq ($(findstring lcc,$(MAKECMDGOALS)),) # LCC-Win32
CONFIG_FILE := w32-lcc.mk
CC := lcc
- lcc: setup
+
.PHONY: lcc
+ lcc: setup
+ @cd .
endif
ifneq ($(findstring mingw32,$(MAKECMDGOALS)),) # mingw32
CONFIG_FILE := w32-mingw32.mk
CC := gcc
- mingw32: setup
+
.PHONY: mingw32
+ mingw32: setup
+ @cd .
endif
ifneq ($(findstring bcc32,$(MAKECMDGOALS)),) # Borland C++
CONFIG_FILE := w32-bcc.mk
CC := bcc32
- bcc32: setup
+
.PHONY: bcc32
+ bcc32: setup
+ @cd .
endif
ifneq ($(findstring devel-bcc,$(MAKECMDGOALS)),) # development target
CONFIG_FILE := w32-bccd.mk
CC := bcc32
- devel-bcc: setup
+
.PHONY: devel-bcc
+ devel-bcc: setup
+ @cd .
endif
ifneq ($(findstring devel-gcc,$(MAKECMDGOALS)),) # development target
CONFIG_FILE := w32-dev.mk
CC := gcc
- devel-gcc: setup
+
.PHONY: devel-gcc
+ devel-gcc: setup
+ @cd .
endif
endif # test PLATFORM windows
diff --git a/freetype/builds/windows/ftdebug.c b/freetype/builds/windows/ftdebug.c
index ec70a0e8..7c47fb5f 100644
--- a/freetype/builds/windows/ftdebug.c
+++ b/freetype/builds/windows/ftdebug.c
@@ -1,47 +1,48 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for Win32 (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ * Debugging and logging component for Win32 (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -99,19 +100,38 @@
int line,
const char* file )
{
+#if 0
+ /* activating the code in this block makes FreeType very chatty */
+ fprintf( stderr,
+ "%s:%d: error 0x%02x: %s\n",
+ file,
+ line,
+ error,
+ FT_Error_String( error ) );
+#else
FT_UNUSED( error );
FT_UNUSED( line );
FT_UNUSED( file );
+#endif
return 0;
}
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
#ifdef FT_DEBUG_LEVEL_TRACE
+ /* array of trace levels, initialized to 0; */
+ /* this gets adjusted at run-time */
+ static int ft_trace_levels_enabled[trace_count];
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
+ /* array of trace levels, always initialized to 0 */
+ static int ft_trace_levels_disabled[trace_count];
+
+ /* a pointer to either `ft_trace_levels_enabled' */
+ /* or `ft_trace_levels_disabled' */
+ int* ft_trace_levels;
/* define array of trace toggle names */
#define FT_TRACE_DEF( x ) #x ,
@@ -125,24 +145,66 @@
#undef FT_TRACE_DEF
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the "FT2_DEBUG" environment variable. It must be a list of */
- /* toggles, separated by spaces, `;' or `,'. Example: */
- /* */
- /* "any:3 memory:6 stream:5" */
- /* */
- /* This will request that all levels be set to 3, except the trace level */
- /* for the memory and stream components which are set to 6 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of the */
- /* available toggle names. */
- /* */
- /* The level must be between 0 and 6; 0 means quiet (except for serious */
- /* runtime errors), and 6 means _very_ verbose. */
- /* */
+ /* 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;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ ft_trace_levels = ft_trace_levels_disabled;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ ft_trace_levels = ft_trace_levels_enabled;
+ }
+
+
+ /**************************************************************************
+ *
+ * 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 )
{
@@ -171,8 +233,8 @@
if ( *p == ':' && p > q )
{
- int n, i, len = (int)( p - q );
- int level = -1, found = -1;
+ FT_Int n, i, len = (FT_Int)( p - q );
+ FT_Int level = -1, found = -1;
for ( n = 0; n < trace_count; n++ )
@@ -206,16 +268,18 @@
{
if ( found == trace_any )
{
- /* special case for "any" */
+ /* special case for `any' */
for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
+ ft_trace_levels_enabled[n] = level;
}
else
- ft_trace_levels[found] = level;
+ ft_trace_levels_enabled[found] = level;
}
}
}
}
+
+ ft_trace_levels = ft_trace_levels_enabled;
}
@@ -229,9 +293,39 @@
}
-#endif /* !FT_DEBUG_LEVEL_TRACE */
+ FT_BASE_DEF( FT_Int )
+ FT_Trace_Get_Count( void )
+ {
+ return 0;
+ }
-#endif /* FT_DEBUG_LEVEL_ERROR */
+
+ FT_BASE_DEF( const char * )
+ FT_Trace_Get_Name( FT_Int idx )
+ {
+ FT_UNUSED( idx );
+
+ return NULL;
+ }
+
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ /* nothing */
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ /* nothing */
+ }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
/* END */
diff --git a/freetype/builds/windows/vc2005/freetype.sln b/freetype/builds/windows/vc2005/freetype.sln
deleted file mode 100644
index b90da27b..00000000
--- a/freetype/builds/windows/vc2005/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32
- LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32
- LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32
- LIB Release|Win32 = LIB Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/freetype/builds/windows/vc2005/freetype.vcproj b/freetype/builds/windows/vc2005/freetype.vcproj
deleted file mode 100644
index 4852e466..00000000
--- a/freetype/builds/windows/vc2005/freetype.vcproj
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject ProjectType="Visual C++" Version="8.00" Name="freetype" ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}" TargetFrameworkVersion="131072">
- <Platforms>
- <Platform Name="Win32" />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration Name="Release|Win32" OutputDirectory=".\..\..\..\objs\release" IntermediateDirectory=".\..\..\..\objs\release" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Release Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\release_mt" IntermediateDirectory=".\..\..\..\objs\release_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\release_st" IntermediateDirectory=".\..\..\..\objs\release_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug|Win32" OutputDirectory=".\..\..\..\objs\debug" IntermediateDirectory=".\..\..\..\objs\debug" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="3" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_st" IntermediateDirectory=".\..\..\..\objs\debug_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_mt" IntermediateDirectory=".\..\..\..\objs\debug_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT_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">
- </File>
- <File RelativePath="..\..\..\src\cff\cff.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftbase.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftbitmap.c">
- </File>
- <File RelativePath="..\..\..\src\cache\ftcache.c">
- </File>
- <File RelativePath="..\ftdebug.c">
- <FileConfiguration>
- <Tool Name="VCCLCompilerTool" DisableLanguageExtensions="false" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftfstype.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgasp.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftglyph.c">
- </File>
- <File RelativePath="..\..\..\src\gzip\ftgzip.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftinit.c">
- </File>
- <File RelativePath="..\..\..\src\lzw\ftlzw.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftstroke.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsystem.c">
- </File>
- <File RelativePath="..\..\..\src\smooth\smooth.c">
- </File>
- <Filter Name="FT_MODULES">
- <File RelativePath="..\..\..\src\base\ftbdf.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftbbox.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftcid.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftmm.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftpfr.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsynth.c">
- </File>
- <File RelativePath="..\..\..\src\base\fttype1.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftwinfnt.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgxval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftotval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftpatent.c">
- </File>
- <File RelativePath="..\..\..\src\pcf\pcf.c">
- </File>
- <File RelativePath="..\..\..\src\pfr\pfr.c">
- </File>
- <File RelativePath="..\..\..\src\psaux\psaux.c">
- </File>
- <File RelativePath="..\..\..\src\pshinter\pshinter.c">
- </File>
- <File RelativePath="..\..\..\src\psnames\psmodule.c">
- </File>
- <File RelativePath="..\..\..\src\raster\raster.c">
- </File>
- <File RelativePath="..\..\..\src\sfnt\sfnt.c">
- </File>
- <File RelativePath="..\..\..\src\truetype\truetype.c">
- </File>
- <File RelativePath="..\..\..\src\type1\type1.c">
- </File>
- <File RelativePath="..\..\..\src\cid\type1cid.c">
- </File>
- <File RelativePath="..\..\..\src\type42\type42.c">
- </File>
- <File RelativePath="..\..\..\src\winfonts\winfnt.c">
- </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/freetype/builds/windows/vc2005/index.html b/freetype/builds/windows/vc2005/index.html
deleted file mode 100644
index c5e182ef..00000000
--- a/freetype/builds/windows/vc2005/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.9.1 sources:</p>
-
-<ul>
- <pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/freetype/builds/windows/vc2008/freetype.sln b/freetype/builds/windows/vc2008/freetype.sln
deleted file mode 100644
index 0995f806..00000000
--- a/freetype/builds/windows/vc2008/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32
- LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32
- LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32
- LIB Release|Win32 = LIB Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/freetype/builds/windows/vc2008/freetype.vcproj b/freetype/builds/windows/vc2008/freetype.vcproj
deleted file mode 100644
index 9d05265c..00000000
--- a/freetype/builds/windows/vc2008/freetype.vcproj
+++ /dev/null
@@ -1,668 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="freetype"
- ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\..\..\..\objs\release"
- IntermediateDirectory=".\..\..\..\objs\release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_mt"
- IntermediateDirectory=".\..\..\..\objs\release_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_st"
- IntermediateDirectory=".\..\..\..\objs\release_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\..\..\..\objs\debug"
- IntermediateDirectory=".\..\..\..\objs\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_st"
- IntermediateDirectory=".\..\..\..\objs\debug_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype291MT_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"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cff\cff.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbase.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbitmap.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cache\ftcache.c"
- >
- </File>
- <File
- RelativePath="..\ftdebug.c"
- >
- <FileConfiguration>
- <Tool
- Name="VCCLCompilerTool"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftglyph.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\gzip\ftgzip.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftinit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\lzw\ftlzw.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftstroke.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsystem.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\smooth\smooth.c"
- >
- </File>
- <Filter
- Name="FT_MODULES"
- >
- <File
- RelativePath="..\..\..\src\base\ftbbox.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbdf.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftcid.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftmm.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsynth.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\fttype1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgxval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftotval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpatent.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pcf\pcf.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pfr\pfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\psaux\psaux.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pshinter\pshinter.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\psnames\psmodule.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\raster\raster.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\sfnt\sfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\truetype\truetype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\type1\type1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cid\type1cid.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\type42\type42.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\winfonts\winfnt.c"
- >
- </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/freetype/builds/windows/vc2008/index.html b/freetype/builds/windows/vc2008/index.html
deleted file mode 100644
index 25c6f9b1..00000000
--- a/freetype/builds/windows/vc2008/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.9.1 sources:</p>
-
-<ul>
- <pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/freetype/builds/windows/vc2010/freetype.vcxproj b/freetype/builds/windows/vc2010/freetype.vcxproj
index cb786816..f249e5af 100644
--- a/freetype/builds/windows/vc2010/freetype.vcxproj
+++ b/freetype/builds/windows/vc2010/freetype.vcxproj
@@ -34,75 +34,44 @@
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
- <!--
- Switch the PlatformToolset based on the Visual Studio Version
--->
-<PropertyGroup>
- <!-- Assume Visual Studio 2010 / 4.0 as the default -->
- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">4.0</VisualStudioVersion>
-</PropertyGroup>
-<!-- Visual Studio 2010 (4.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '4.0'">
- <PlatformToolset>v100</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2013 (12.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'">
- <PlatformToolset>v120</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2015 (14.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">
- <PlatformToolset>v140</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2017 (15.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '15.0'">
- <PlatformToolset>v141</PlatformToolset>
-</PropertyGroup>
-<!--
- End of: Switch the PlatformToolset based on the Visual Studio Version
--->
<PropertyGroup Label="Globals">
- <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
- <RootNamespace>FreeType</RootNamespace>
+ <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
+ <RootNamespace>FreeType</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="PlatformToolset">
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
+ </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -121,7 +90,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -130,16 +99,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_DEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
@@ -149,7 +116,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -158,16 +125,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_DEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
@@ -186,7 +151,6 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
@@ -195,7 +159,6 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
@@ -214,7 +177,6 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
@@ -223,7 +185,6 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
@@ -234,8 +195,7 @@
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -243,26 +203,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NDEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -274,8 +222,7 @@
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -283,26 +230,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NDEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
<TargetMachine>MachineX64</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -315,7 +250,6 @@
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -323,27 +257,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <RuntimeTypeInfo>false</RuntimeTypeInfo>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -356,7 +277,6 @@
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -364,27 +284,14 @@
<CompileAs>Default</CompileAs>
<DisableSpecificWarnings>4001</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <RuntimeTypeInfo>false</RuntimeTypeInfo>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
<TargetMachine>MachineX64</TargetMachine>
<AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
diff --git a/freetype/builds/windows/vc2010/freetype.vcxproj.filters b/freetype/builds/windows/vc2010/freetype.vcxproj.filters
index 0c2a9b07..edfeacfe 100644
--- a/freetype/builds/windows/vc2010/freetype.vcxproj.filters
+++ b/freetype/builds/windows/vc2010/freetype.vcxproj.filters
@@ -133,23 +133,8 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\..\include\ft2build.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftconfig.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftheader.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftmodule.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftoption.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftstdlib.h">
- <Filter>Header Files</Filter>
- </ClInclude>
+ <ResourceCompile Include="..\..\..\src\base\ftver.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/freetype/builds/windows/vc2010/index.html b/freetype/builds/windows/vc2010/index.html
index c3e60403..eed4dd33 100644
--- a/freetype/builds/windows/vc2010/index.html
+++ b/freetype/builds/windows/vc2010/index.html
@@ -12,7 +12,7 @@
<p>This directory contains solution and project files for
Visual&nbsp;C++&nbsp;2010 or newer, named <tt>freetype.sln</tt>,
and <tt>freetype.vcxproj</tt>. It compiles the following libraries
-from the FreeType 2.9.1 sources:</p>
+from the FreeType 2.10.1 sources:</p>
<ul>
<li>freetype.dll using 'Release' or 'Debug' configurations</li>
@@ -30,10 +30,10 @@ include directory in <tt>freetype.users.props</tt>.</p>
<p>To configure library dependencies like <em>zlib</em> and <em>libpng</em>,
edit the <tt>freetype.users.props</tt> file in this directory. It also
simplifies automated (command-line) builds using <a
-href="http://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
+href="https://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
<p>To link your executable with FreeType DLL, you may want to define
-FT2_DLLIMPORT so that the imported functions are appropriately
+DLL_IMPORT so that the imported functions are appropriately
attributed with <tt>dllimport<tt>.</p>
</body>
diff --git a/freetype/builds/windows/visualc/freetype.dsp b/freetype/builds/windows/visualc/freetype.dsp
index 0efc576f..36e9fc3b 100644
--- a/freetype/builds/windows/visualc/freetype.dsp
+++ b/freetype/builds/windows/visualc/freetype.dsp
@@ -2,9 +2,10 @@
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=freetype - Win32 Debug Singlethreaded
+CFG=freetype - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,24 +14,20 @@ CFG=freetype - Win32 Debug Singlethreaded
!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 NMAKE /f "freetype.mak" CFG="freetype - Win32 Release"
!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 "freetype - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "freetype - Win32 Release Static" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug Static" (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"
@@ -41,20 +38,27 @@ RSC=rc.exe
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release"
-# PROP Intermediate_Dir "..\..\..\objs\release"
+# PROP Output_Dir "..\..\..\objs\Win32\Release"
+# PROP Intermediate_Dir "..\..\..\objs\Win32\Release"
+# PROP Ignore_Export_Lib 0
# 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
+CPP=cl.exe
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# SUBTRACT BASE CPP /YX /Yc /Yu
+# ADD CPP /nologo /Za /MD /W3 /O2 /Oi /D "WIN32" /I "..\..\..\include" /D "_CRT_SECURE_NO_WARNINGS" /D "NDEBUG" /D "FT2_BUILD_LIBRARY" /D "DLL_EXPORT" /FD /c
+# SUBTRACT CPP /YX /Yc /Yu
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG" /d "DLL_EXPORT"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
+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 /nologo /dll /machine:I386 /out:"$(OutDir)\freetype.dll"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -65,120 +69,81 @@ LIB32=link.exe -lib
# 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\freetype291_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 Output_Dir "..\..\..\objs\Win32\Debug"
+# PROP Intermediate_Dir "..\..\..\objs\Win32\Debug"
+# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c
-# SUBTRACT BASE CPP /X
-# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
+CPP=cl.exe
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# SUBTRACT BASE CPP /YX /Yc /Yu
+# ADD CPP /nologo /Za /MDd /W3 /Gm /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_CRT_SECURE_NO_WARNINGS" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "FT2_BUILD_LIBRARY" /D "DLL_EXPORT" /FR /FD /GZ /c
+# SUBTRACT CPP /YX /Yc /Yu
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG" /d "DLL_EXPORT"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"
+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 /nologo /dll /debug /machine:I386 /out:"$(OutDir)\freetype.dll" /pdbtype:sept
-!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
+!ELSEIF "$(CFG)" == "freetype - Win32 Release Static"
# 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 Output_Dir "Release Static"
+# PROP BASE Intermediate_Dir "Release Static"
# 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 Output_Dir "..\..\..\objs\Win32\Release Static"
+# PROP Intermediate_Dir "..\..\..\objs\Win32\Release Static"
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c
-# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.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
+CPP=cl.exe
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# SUBTRACT BASE CPP /YX /Yc /Yu
+# ADD CPP /nologo /Za /MD /W3 /O2 /Oi /D "WIN32" /I "..\..\..\include" /D "_CRT_SECURE_NO_WARNINGS" /D "NDEBUG" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /YX /Yc /Yu
+RSC=rc.exe
# 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\freetype291.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"
-# SUBTRACT LIB32 /nologo
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"$(OutDir)\freetype.lib"
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug Static"
# 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 Output_Dir "Debug Static"
+# PROP BASE Intermediate_Dir "Debug Static"
# 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 Output_Dir "..\..\..\objs\Win32\Debug Static"
+# PROP Intermediate_Dir "..\..\..\objs\Win32\Debug Static"
# 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
+CPP=cl.exe
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# SUBTRACT BASE CPP /YX /Yc /Yu
+# ADD CPP /nologo /Za /MDd /W3 /Gm /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_CRT_SECURE_NO_WARNINGS" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "FT2_BUILD_LIBRARY" /FR /FD /GZ /c
+# SUBTRACT CPP /YX /Yc /Yu
+RSC=rc.exe
# 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\freetype291_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"$(OutDir)\freetype.lib"
!ENDIF
@@ -186,10 +151,8 @@ LIB32=link.exe -lib
# 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"
+# Name "freetype - Win32 Release Static"
+# Name "freetype - Win32 Debug Static"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
@@ -379,5 +342,13 @@ SOURCE=..\..\..\include\freetype\config\ftoption.h
SOURCE=..\..\..\include\freetype\config\ftstdlib.h
# End Source File
# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftver.rc
+# End Source File
+# End Group
# End Target
# End Project
diff --git a/freetype/builds/windows/visualc/freetype.sln b/freetype/builds/windows/visualc/freetype.sln
index 470d4fa3..d9660721 100644
--- a/freetype/builds/windows/visualc/freetype.sln
+++ b/freetype/builds/windows/visualc/freetype.sln
@@ -1,27 +1,21 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+Microsoft Visual Studio Solution File, Format Version 7.00
+# Visual C++ 2002-2008
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 Static|Win32 = Debug Static|Win32
Debug|Win32 = Debug|Win32
- Release Multithreaded|Win32 = Release Multithreaded|Win32
- Release Singlethreaded|Win32 = Release Singlethreaded|Win32
+ Release Static|Win32 = Release Static|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 Static|Win32.ActiveCfg = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|Win32.Build.0 = Debug Static|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 Static|Win32.ActiveCfg = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|Win32.Build.0 = Release Static|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
diff --git a/freetype/builds/windows/visualc/freetype.vcproj b/freetype/builds/windows/visualc/freetype.vcproj
index e87fe9e4..9ff82a5b 100644
--- a/freetype/builds/windows/visualc/freetype.vcproj
+++ b/freetype/builds/windows/visualc/freetype.vcproj
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
Name="freetype"
ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
>
@@ -15,13 +14,12 @@
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\..\..\..\objs\release"
- IntermediateDirectory=".\..\..\..\objs\release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -42,113 +40,37 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT"
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"
+ DisableSpecificWarnings="4001"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
+ PreprocessorDefinitions="NDEBUG;DLL_EXPORT"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
- SuppressStartupBanner="true"
+ Name="VCLinkerTool"
/>
<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\freetype291MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
+ Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
@@ -160,18 +82,20 @@
Name="VCFxCopTool"
/>
<Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Release Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_st"
- IntermediateDirectory=".\..\..\..\objs\release_st"
+ Name="Release Static|Win32"
+ OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -192,19 +116,17 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
WarningLevel="4"
DebugInformationFormat="0"
CompileAs="0"
+ DisableSpecificWarnings="4001"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -219,7 +141,6 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -239,13 +160,12 @@
</Configuration>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\..\..\..\objs\debug"
- IntermediateDirectory=".\..\..\..\objs\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -266,109 +186,34 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;DLL_EXPORT"
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"
+ DisableSpecificWarnings="4001"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
+ PreprocessorDefinitions="_DEBUG;DLL_EXPORT"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
- SuppressStartupBanner="true"
+ Name="VCLinkerTool"
/>
<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\freetype291ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
+ Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
@@ -380,18 +225,20 @@
Name="VCFxCopTool"
/>
<Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
+ Name="Debug Static|Win32"
+ OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
+ IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"
ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -412,18 +259,14 @@
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"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
WarningLevel="4"
DebugInformationFormat="3"
CompileAs="0"
+ DisableSpecificWarnings="4001"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -438,8 +281,6 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
- SuppressStartupBanner="true"
/>
<Tool
Name="VCALinkTool"
@@ -486,26 +327,52 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\cache\ftcache.c"
>
</File>
<File
RelativePath="..\ftdebug.c"
>
- <FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
<Tool
Name="VCCLCompilerTool"
DisableLanguageExtensions="false"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release Static|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Static|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftfstype.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftgasp.c"
+ >
</File>
<File
RelativePath="..\..\..\src\base\ftglyph.c"
@@ -551,35 +418,35 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftmm.c"
+ RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftpfr.c"
+ RelativePath="..\..\..\src\base\ftmm.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftsynth.c"
+ RelativePath="..\..\..\src\base\ftotval.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\fttype1.c"
+ RelativePath="..\..\..\src\base\ftpatent.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
+ RelativePath="..\..\..\src\base\ftpfr.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftgxval.c"
+ RelativePath="..\..\..\src\base\ftsynth.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftotval.c"
+ RelativePath="..\..\..\src\base\fttype1.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftpatent.c"
+ RelativePath="..\..\..\src\base\ftwinfnt.c"
>
</File>
<File
@@ -661,6 +528,15 @@
>
</File>
</Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ >
+ <File
+ RelativePath="..\..\..\src\base\ftver.rc"
+ >
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/freetype/builds/windows/visualc/index.html b/freetype/builds/windows/visualc/index.html
index c0611d2f..423244ad 100644
--- a/freetype/builds/windows/visualc/index.html
+++ b/freetype/builds/windows/visualc/index.html
@@ -1,31 +1,32 @@
<html>
<header>
<title>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ 6.0 and 2002-2008
</title>
<body>
<h1>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ 6.0 and 2002-2008
</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.9.1 sources:</p>
+<p>This directory contains project files <tt>freetype.dsp</tt> for
+Visual C++ 6.0, and <tt>freetype.vcproj</tt> for Visual C++ 2002
+through 2008, which you might need to upgrade automatically.
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
<ul>
- <pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
+ <li>freetype.dll using 'Release' or 'Debug' configurations</li>
+ <li>freetype.lib using 'Release Static' or 'Debug Static' configurations</li>
</ul>
+<p>Build directories and target files are placed in the top-level
+<tt>objs</tt> directory.</p>
+
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/freetype/builds/windows/visualce/freetype.dsp b/freetype/builds/windows/visualce/freetype.dsp
index 19a6ba1b..cb7566b5 100644
--- a/freetype/builds/windows/visualce/freetype.dsp
+++ b/freetype/builds/windows/visualce/freetype.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -78,7 +78,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@@ -102,8 +102,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype2101_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@@ -126,8 +126,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype2101.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@@ -151,8 +151,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2101.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype2101ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -177,8 +177,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2101_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101ST_D.lib"
!ENDIF
diff --git a/freetype/builds/windows/visualce/freetype.vcproj b/freetype/builds/windows/visualce/freetype.vcproj
index c9e14e0b..3ac9d73e 100644
--- a/freetype/builds/windows/visualce/freetype.vcproj
+++ b/freetype/builds/windows/visualce/freetype.vcproj
@@ -87,7 +87,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -162,7 +162,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -237,7 +237,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -309,7 +309,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -382,7 +382,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -456,7 +456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -534,7 +534,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -619,7 +619,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -704,7 +704,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -785,7 +785,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -867,7 +867,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -950,7 +950,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1036,7 +1036,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1121,7 +1121,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1206,7 +1206,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1287,7 +1287,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1369,7 +1369,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1452,7 +1452,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1538,7 +1538,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1623,7 +1623,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1708,7 +1708,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1789,7 +1789,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1871,7 +1871,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1954,7 +1954,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2040,7 +2040,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2125,7 +2125,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2210,7 +2210,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2291,7 +2291,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2373,7 +2373,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2456,7 +2456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2542,7 +2542,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2627,7 +2627,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2712,7 +2712,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2793,7 +2793,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2875,7 +2875,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2958,7 +2958,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3044,7 +3044,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291.lib"
+ OutputFile="..\..\..\objs\freetype2101.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3129,7 +3129,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT.lib"
+ OutputFile="..\..\..\objs\freetype2101MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3214,7 +3214,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST.lib"
+ OutputFile="..\..\..\objs\freetype2101ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -3295,7 +3295,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291_D.lib"
+ OutputFile="..\..\..\objs\freetype2101_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3377,7 +3377,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291ST_D.lib"
+ OutputFile="..\..\..\objs\freetype2101ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3460,7 +3460,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype291MT_D.lib"
+ OutputFile="..\..\..\objs\freetype2101MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
diff --git a/freetype/builds/windows/visualce/index.html b/freetype/builds/windows/visualce/index.html
index d5a3ca3e..95e61fcf 100644
--- a/freetype/builds/windows/visualce/index.html
+++ b/freetype/builds/windows/visualce/index.html
@@ -21,21 +21,21 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
<ul>
<pre>
- freetype291.lib - release build; single threaded
- freetype291_D.lib - debug build; single threaded
- freetype291MT.lib - release build; multi-threaded
- freetype291MT_D.lib - debug build; multi-threaded</pre>
+ freetype2101.lib - release build; single threaded
+ freetype2101_D.lib - debug build; single threaded
+ freetype2101MT.lib - release build; multi-threaded
+ freetype2101MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/freetype/builds/windows/w32-bcc.mk b/freetype/builds/windows/w32-bcc.mk
index 01aab1ce..39262ff0 100644
--- a/freetype/builds/windows/w32-bcc.mk
+++ b/freetype/builds/windows/w32-bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-bccd.mk b/freetype/builds/windows/w32-bccd.mk
index 2c14d6c8..20e272fb 100644
--- a/freetype/builds/windows/w32-bccd.mk
+++ b/freetype/builds/windows/w32-bccd.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-dev.mk b/freetype/builds/windows/w32-dev.mk
index 279d5f9a..30c5a8fd 100644
--- a/freetype/builds/windows/w32-dev.mk
+++ b/freetype/builds/windows/w32-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-gcc.mk b/freetype/builds/windows/w32-gcc.mk
index 9e3476b9..4a07bb03 100644
--- a/freetype/builds/windows/w32-gcc.mk
+++ b/freetype/builds/windows/w32-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-icc.mk b/freetype/builds/windows/w32-icc.mk
index e695c121..fb1fc1a0 100644
--- a/freetype/builds/windows/w32-icc.mk
+++ b/freetype/builds/windows/w32-icc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-intl.mk b/freetype/builds/windows/w32-intl.mk
index 1e36662d..252eae2f 100644
--- a/freetype/builds/windows/w32-intl.mk
+++ b/freetype/builds/windows/w32-intl.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-lcc.mk b/freetype/builds/windows/w32-lcc.mk
index 5729d36c..aa40e568 100644
--- a/freetype/builds/windows/w32-lcc.mk
+++ b/freetype/builds/windows/w32-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-mingw32.mk b/freetype/builds/windows/w32-mingw32.mk
index b3a210df..3913dacc 100644
--- a/freetype/builds/windows/w32-mingw32.mk
+++ b/freetype/builds/windows/w32-mingw32.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-vcc.mk b/freetype/builds/windows/w32-vcc.mk
index 342c8aa6..cc38a45a 100644
--- a/freetype/builds/windows/w32-vcc.mk
+++ b/freetype/builds/windows/w32-vcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-wat.mk b/freetype/builds/windows/w32-wat.mk
index 37ecc888..842fbce7 100644
--- a/freetype/builds/windows/w32-wat.mk
+++ b/freetype/builds/windows/w32-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/win32-def.mk b/freetype/builds/windows/win32-def.mk
index f83d444f..23ba80a9 100644
--- a/freetype/builds/windows/win32-def.mk
+++ b/freetype/builds/windows/win32-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,10 @@ SEP := $(strip \ )
BUILD_DIR := $(TOP_DIR)/builds/windows
PLATFORM := windows
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
+
# The executable file extension (for tools). NOTE: WE INCLUDE THE DOT HERE !!
#
E := .exe
diff --git a/freetype/configure b/freetype/configure
deleted file mode 100755
index f9d21866..00000000
--- a/freetype/configure
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2002-2018 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-#
-# Call the `configure' script located in `builds/unix'.
-#
-
-rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
-
-# respect GNUMAKE environment variable for backward compatibility
-if test "x$GNUMAKE" = x; then
- if test "x$MAKE" = x; then
- if test "x`make -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
- MAKE=gmake
- else
- MAKE=make
- fi
- fi
-else
- MAKE=$GNUMAKE
-fi
-
-if test "x`$MAKE -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
- echo "GNU make (>= 3.81) or makepp (>= 2.0) is required to build FreeType2." >&2
- echo "Please try" >&2
- echo >&2
- echo " MAKE=<GNU make command name> $0" >&2
- echo >&2
- echo "or" >&2
- echo >&2
- echo " MAKE=\"makepp --norc-substitution\" $0" >&2
- exit 1
-fi
-
-# Get `dirname' functionality. This is taken and adapted from autoconf's
-# m4sh.m4 (_AS_EXPR_PREPARE, AS_DIRNAME_EXPR, and AS_DIRNAME_SED).
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- ft_expr=expr
-else
- ft_expr=false
-fi
-
-ft2_dir=`(dirname "$0") 2>/dev/null ||
- $ft_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
- echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-abs_curr_dir=`pwd`
-abs_ft2_dir=`cd "$ft2_dir" && pwd`
-
-# `--srcdir=' option can override abs_ft2_dir
-
-if test $# -gt 0; then
- for x in "$@"; do
- case x"$x" in
- x--srcdir=*)
- abs_ft2_dir=`echo $x | sed 's/^--srcdir=//'` ;;
- esac
- done
-fi
-
-# build a dummy Makefile if we are not building in the source tree;
-# we use inodes to avoid issues with symbolic links
-inode_src=`ls -id $abs_ft2_dir | awk '{print $1}'`
-inode_dst=`ls -id $abs_curr_dir | awk '{print $1}'`
-
-if test $inode_src -ne $inode_dst; then
- if test ! -d reference; then
- mkdir reference
- fi
- if test ! -r $abs_curr_dir/modules.cfg; then
- echo "Copying \`modules.cfg'"
- cp $abs_ft2_dir/modules.cfg $abs_curr_dir
- fi
- echo "Generating \`Makefile'"
- echo "TOP_DIR := $abs_ft2_dir" > Makefile
- echo "OBJ_DIR := $abs_curr_dir" >> Makefile
- echo "OBJ_BUILD := \$(OBJ_DIR)" >> Makefile
- echo "DOC_DIR := \$(OBJ_DIR)/reference" >> Makefile
- echo "FT_LIBTOOL_DIR := \$(OBJ_DIR)" >> Makefile
- echo "ifndef FT2DEMOS" >> Makefile
- echo " include \$(TOP_DIR)/Makefile" >> Makefile
- echo "else" >> Makefile
- echo " TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
- echo " PROJECT := freetype" >> Makefile
- echo " CONFIG_MK := \$(OBJ_DIR)/config.mk" >> Makefile
- echo " include \$(TOP_DIR_2)/Makefile" >> Makefile
- echo "endif" >> Makefile
-fi
-
-# call make
-
-CFG=
-# work around zsh bug which doesn't like `${1+"$@"}'
-case $# in
-0) ;;
-*) for x in "$@"; do
- case x"$x" in
- x--srcdir=* ) CFG="$CFG '$x'/builds/unix" ;;
- *) CFG="$CFG '$x'" ;;
- esac
- done ;;
-esac
-CFG=$CFG $MAKE setup unix
-
-# eof
diff --git a/freetype/devel/ft2build.h b/freetype/devel/ft2build.h
index 1d17141b..42fd39f4 100644
--- a/freetype/devel/ft2build.h
+++ b/freetype/devel/ft2build.h
@@ -1,29 +1,29 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros (development version). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ft2build.h
+ *
+ * FreeType 2 build and setup macros (development version).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/*
- * This is a development version of <ft2build.h> to build the library in
- * debug mode. Its only difference to the default version is that it
- * includes a local `ftoption.h' header file with different settings for
- * many configuration macros.
+ * This is a development version of <ft2build.h> to build the library in
+ * debug mode. Its only difference to the default version is that it
+ * includes a local `ftoption.h' header file with different settings for
+ * many configuration macros.
*
- * To use it, simply ensure that the directory containing this file is
- * scanned by the compiler before the default FreeType header directory.
+ * To use it, simply ensure that the directory containing this file is
+ * scanned by the compiler before the default FreeType header directory.
*
*/
diff --git a/freetype/devel/ftoption.h b/freetype/devel/ftoption.h
index 1b4619eb..16cf4e12 100644
--- a/freetype/devel/ftoption.h
+++ b/freetype/devel/ftoption.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftoption.h (for development) */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftoption.h (for development)
+ *
+ * User-selectable configuration macros (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -25,45 +25,47 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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.
+ *
+ */
/*************************************************************************/
@@ -75,425 +77,433 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* If you enable this configuration option, FreeType recognizes an */
- /* environment variable called `FREETYPE_PROPERTIES', which can be used */
- /* to control the various font drivers and modules. The controllable */
- /* properties are listed in the section `Controlling FreeType Modules' */
- /* in the reference's table of contents; currently there are properties */
- /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
- /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
- /* multiple lines for better readability). */
- /* */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* */
- /* Example: */
- /* */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* */
+ /*#************************************************************************
+ *
+ * If you enable this configuration option, FreeType recognizes an
+ * environment variable called `FREETYPE_PROPERTIES`, which can be used to
+ * control the various font drivers and modules. The controllable
+ * properties are listed in the section @properties.
+ *
+ * You have to undefine this configuration option on platforms that lack
+ * the concept of environment variables (and thus don't have the `getenv`
+ * function), for example Windows CE.
+ *
+ * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
+ * multiple lines for better readability).
+ *
+ * ```
+ * <optional whitespace>
+ * <module-name1> ':'
+ * <property-name1> '=' <property-value1>
+ * <whitespace>
+ * <module-name2> ':'
+ * <property-name2> '=' <property-value2>
+ * ...
+ * ```
+ *
+ * Example:
+ *
+ * ```
+ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ * cff:no-stem-darkening=1 \
+ * autofitter:warping=1
+ * ```
+ *
+ */
#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- /*************************************************************************/
- /* */
- /* Uncomment the line below if you want to activate LCD rendering */
- /* technology similar to ClearType in this build of the library. This */
- /* technology triples the resolution in the direction color subpixels. */
- /* To mitigate color fringes inherent to this technology, you also need */
- /* to explicitly set up LCD filtering. */
- /* */
- /* Note that this feature is covered by several Microsoft patents */
- /* and should not be activated in any default build of the library. */
- /* When this macro is not defined, FreeType offers alternative LCD */
- /* rendering technology that produces excellent output without LCD */
- /* filtering. */
- /* */
+ /**************************************************************************
+ *
+ * Uncomment the line below if you want to activate LCD rendering
+ * technology similar to ClearType in this build of the library. This
+ * technology triples the resolution in the direction color subpixels. To
+ * mitigate color fringes inherent to this technology, you also need to
+ * explicitly set up LCD filtering.
+ *
+ * Note that this feature is covered by several Microsoft patents and
+ * should not be activated in any default build of the library. When this
+ * macro is not defined, FreeType offers alternative LCD rendering
+ * technology that produces excellent output without LCD filtering.
+ */
/* #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. */
- /* */
+ /**************************************************************************
+ *
+ * Many compilers provide a non-ANSI 64-bit data type that can be used by
+ * FreeType to speed up some computations. However, this will create some
+ * problems when compiling the library in strict ANSI mode.
+ *
+ * For this reason, the use of 64-bit integers is normally disabled when
+ * the `__STDC__` macro is defined. You can however disable this by
+ * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here.
+ *
+ * For most compilers, this will only create compilation warnings when
+ * building the library.
+ *
+ * ObNote: The compiler-specific 64-bit integers are detected in the
+ * file `ftconfig.h` either statically or through the `configure`
+ * script on supported platforms.
+ */
#undef FT_CONFIG_OPTION_FORCE_INT64
- /*************************************************************************/
- /* */
- /* If this macro is defined, do not try to use an assembler version of */
- /* performance-critical functions (e.g. FT_MulFix). You should only do */
- /* that to verify that the assembler function works properly, or to */
- /* execute benchmark tests of the various implementations. */
+ /**************************************************************************
+ *
+ * If this macro is defined, do not try to use an assembler version of
+ * performance-critical functions (e.g., @FT_MulFix). You should only do
+ * that to verify that the assembler function works properly, or to execute
+ * benchmark tests of the various implementations.
+ */
/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
- /*************************************************************************/
- /* */
- /* If this macro is defined, try to use an inlined assembler version of */
- /* the `FT_MulFix' function, which is a `hotspot' when loading and */
- /* hinting glyphs, and which should be executed as fast as possible. */
- /* */
- /* Note that if your compiler or CPU is not supported, this will default */
- /* to the standard and portable implementation found in `ftcalc.c'. */
- /* */
+ /**************************************************************************
+ *
+ * If this macro is defined, try to use an inlined assembler version of the
+ * @FT_MulFix function, which is a 'hotspot' when loading and hinting
+ * glyphs, and which should be executed as fast as possible.
+ *
+ * Note that if your compiler or CPU is not supported, this will default to
+ * the standard and portable implementation found in `ftcalc.c`.
+ */
#define FT_CONFIG_OPTION_INLINE_MULFIX
- /*************************************************************************/
- /* */
- /* LZW-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `compress' program. This is mostly used to parse many of the PCF */
- /* files that come with various X11 distributions. The implementation */
- /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
- /* (see src/lzw/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
- /*************************************************************************/
- /* */
- /* Bzip2-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `bzip2' program. This is mostly used to parse many of the PCF */
- /* files that come with XFree86. The implementation uses `libbz2' to */
- /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
- /* Contrary to gzip, bzip2 currently is not included and need to use */
- /* the system available bzip2 implementation. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
+ /**************************************************************************
+ *
+ * Bzip2-compressed file support.
+ *
+ * FreeType now handles font files that have been compressed with the
+ * `bzip2` program. This is mostly used to parse many of the PCF files
+ * that come with XFree86. The implementation uses `libbz2` to partially
+ * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary
+ * to gzip, bzip2 currently is not included and need to use the system
+ * available bzip2 implementation.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
#define FT_CONFIG_OPTION_USE_BZIP2
- /*************************************************************************/
- /* */
- /* Define to disable the use of file stream functions and types, FILE, */
- /* fopen() etc. Enables the use of smaller system libraries on embedded */
- /* systems that have multiple system libraries, some with or without */
- /* file stream support, in the cases where file stream support is not */
- /* necessary such as memory loading of font files. */
- /* */
+ /**************************************************************************
+ *
+ * Define to disable the use of file stream functions and types, `FILE`,
+ * `fopen`, etc. Enables the use of smaller system libraries on embedded
+ * systems that have multiple system libraries, some with or without file
+ * stream support, in the cases where file stream support is not necessary
+ * such as memory loading of font files.
+ */
/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
- /*************************************************************************/
- /* */
- /* PNG bitmap support. */
- /* */
- /* FreeType now handles loading color bitmap glyphs in the PNG format. */
- /* This requires help from the external libpng library. Uncompressed */
- /* color bitmaps do not need any external libraries and will be */
- /* supported regardless of this configuration. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
+ /**************************************************************************
+ *
+ * PNG bitmap support.
+ *
+ * FreeType now handles loading color bitmap glyphs in the PNG format.
+ * This requires help from the external libpng library. Uncompressed
+ * color bitmaps do not need any external libraries and will be supported
+ * regardless of this configuration.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
#define FT_CONFIG_OPTION_USE_PNG
- /*************************************************************************/
- /* */
- /* HarfBuzz support. */
- /* */
- /* FreeType uses the HarfBuzz library to improve auto-hinting of */
- /* OpenType fonts. If available, many glyphs not directly addressable */
- /* by a font's character map will be hinted also. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
+ /**************************************************************************
+ *
+ * HarfBuzz support.
+ *
+ * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType
+ * fonts. If available, many glyphs not directly addressable by a font's
+ * character map will be hinted also.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
#define FT_CONFIG_OPTION_USE_HARFBUZZ
- /*************************************************************************/
- /* */
- /* 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, but will not synthesize a missing Unicode charmap. */
- /* */
- /* - The Type 1 driver will not be able to synthesize a Unicode */
- /* charmap out of the glyphs found in the fonts. */
- /* */
- /* You would normally undefine this configuration macro when building */
- /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
- /* */
+ /**************************************************************************
+ *
+ * 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,
+ * but will not synthesize a missing Unicode charmap.
+ *
+ * - The Type~1 driver will not be able to synthesize a Unicode charmap
+ * out of the glyphs found in the fonts.
+ *
+ * You would normally undefine this configuration macro when building a
+ * version of FreeType that doesn't contain a Type~1 or CFF driver.
+ */
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- /*************************************************************************/
- /* */
- /* Postscript Names to Unicode Values support */
- /* */
- /* By default, FreeType 2 is built with the `PSNames' module compiled */
- /* in. Among other things, the module is used to convert a glyph name */
- /* into a Unicode value. This is especially useful in order to */
- /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
- /* through a big table named the `Adobe Glyph List' (AGL). */
- /* */
- /* Undefine this macro if you do not want the Adobe Glyph List */
- /* compiled in your `PSNames' module. The Type 1 driver will not be */
- /* able to synthesize a Unicode charmap out of the glyphs found in the */
- /* fonts. */
- /* */
+ /**************************************************************************
+ *
+ * Postscript Names to Unicode Values support
+ *
+ * By default, FreeType~2 is built with the 'psnames' module compiled in.
+ * Among other things, the module is used to convert a glyph name into a
+ * Unicode value. This is especially useful in order to synthesize on
+ * the fly a Unicode charmap from the CFF/Type~1 driver through a big
+ * table named the 'Adobe Glyph List' (AGL).
+ *
+ * Undefine this macro if you do not want the Adobe Glyph List compiled
+ * in your 'psnames' module. The Type~1 driver will not be able to
+ * synthesize a Unicode charmap out of the glyphs found in the fonts.
+ */
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
- /*************************************************************************/
- /* */
- /* Support for Mac fonts */
- /* */
- /* Define this macro if you want support for outline fonts in Mac */
- /* format (mac dfont, mac resource, macbinary containing a mac */
- /* resource) on non-Mac platforms. */
- /* */
- /* Note that the `FOND' resource isn't checked. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Guessing methods to access embedded resource forks
+ *
+ * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux).
+ *
+ * Resource forks which include fonts data are stored sometimes in
+ * locations which users or developers don't expected. In some cases,
+ * resource forks start with some offset from the head of a file. In
+ * other cases, the actual resource fork is stored in file different from
+ * what the user specifies. If this option is activated, FreeType tries
+ * to guess whether such offsets or different file names must be used.
+ *
+ * Note that normal, direct access of resource forks is controlled via
+ * the `FT_CONFIG_OPTION_MAC_FONTS` option.
+ */
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#endif
- /*************************************************************************/
- /* */
- /* Allow the use of FT_Incremental_Interface to load typefaces that */
- /* contain no glyph data, but supply it via a callback function. */
- /* This is required by clients supporting document formats which */
- /* supply font data incrementally as the document is parsed, such */
- /* as the Ghostscript interpreter for the PostScript language. */
- /* */
+ /**************************************************************************
+ *
+ * Allow the use of `FT_Incremental_Interface` to load typefaces that
+ * contain no glyph data, but supply it via a callback function. This is
+ * required by clients supporting document formats which supply font data
+ * incrementally as the document is parsed, such as the Ghostscript
+ * interpreter for the PostScript language.
+ */
#define FT_CONFIG_OPTION_INCREMENTAL
- /*************************************************************************/
- /* */
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
- /* */
+ /**************************************************************************
+ *
+ * The size in bytes of the render pool used by the scan-line converter to
+ * do all of its work.
+ */
#define FT_RENDER_POOL_SIZE 16384L
- /*************************************************************************/
- /* */
- /* FT_MAX_MODULES */
- /* */
- /* The maximum number of modules that can be registered in a single */
- /* FreeType library object. 32 is the default. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Debug level
+ *
+ * FreeType can be compiled in debug or trace mode. In debug mode,
+ * errors are reported through the 'ftdebug' component. In trace mode,
+ * additional messages are sent to the standard output during execution.
+ *
+ * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode.
+ * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode.
+ *
+ * Don't define any of these macros to compile in 'release' mode!
+ *
+ * Do not `#undef` these macros here since the build system might define
+ * them for certain configurations only.
+ */
#define FT_DEBUG_LEVEL_ERROR
#define FT_DEBUG_LEVEL_TRACE
- /*************************************************************************/
- /* */
- /* Autofitter debugging */
- /* */
- /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
- /* control the autofitter behaviour for debugging purposes with global */
- /* boolean variables (consequently, you should *never* enable this */
- /* while compiling in `release' mode): */
- /* */
- /* _af_debug_disable_horz_hints */
- /* _af_debug_disable_vert_hints */
- /* _af_debug_disable_blue_hints */
- /* */
- /* Additionally, the following functions provide dumps of various */
- /* internal autofit structures to stdout (using `printf'): */
- /* */
- /* af_glyph_hints_dump_points */
- /* af_glyph_hints_dump_segments */
- /* af_glyph_hints_dump_edges */
- /* af_glyph_hints_get_num_segments */
- /* af_glyph_hints_get_segment_offset */
- /* */
- /* As an argument, they use another global variable: */
- /* */
- /* _af_debug_hints */
- /* */
- /* Please have a look at the `ftgrid' demo program to see how those */
- /* variables and macros should be used. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * Autofitter debugging
+ *
+ * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to
+ * control the autofitter behaviour for debugging purposes with global
+ * boolean variables (consequently, you should **never** enable this
+ * while compiling in 'release' mode):
+ *
+ * ```
+ * _af_debug_disable_horz_hints
+ * _af_debug_disable_vert_hints
+ * _af_debug_disable_blue_hints
+ * ```
+ *
+ * Additionally, the following functions provide dumps of various
+ * internal autofit structures to stdout (using `printf`):
+ *
+ * ```
+ * af_glyph_hints_dump_points
+ * af_glyph_hints_dump_segments
+ * af_glyph_hints_dump_edges
+ * af_glyph_hints_get_num_segments
+ * af_glyph_hints_get_segment_offset
+ * ```
+ *
+ * As an argument, they use another global variable:
+ *
+ * ```
+ * _af_debug_hints
+ * ```
+ *
+ * Please have a look at the `ftgrid` demo program to see how those
+ * variables and macros should be used.
+ *
+ * Do not `#undef` these macros here since the build system might define
+ * them for certain configurations only.
+ */
#define FT_DEBUG_AUTOFIT
- /*************************************************************************/
- /* */
- /* Memory Debugging */
- /* */
- /* FreeType now comes with an integrated memory debugger that is */
- /* capable of detecting simple errors like memory leaks or double */
- /* deletes. To compile it within your build of the library, you */
- /* should define FT_DEBUG_MEMORY here. */
- /* */
- /* Note that the memory debugger is only activated at runtime when */
- /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Module errors
+ *
+ * If this macro is set (which is _not_ the default), the higher byte of
+ * an error code gives the module in which the error has occurred, while
+ * the lower byte is the real error code.
+ *
+ * Setting this macro makes sense for debugging purposes only, since it
+ * would break source compatibility of certain programs that use
+ * FreeType~2.
+ *
+ * More details can be found in the files `ftmoderr.h` and `fterrors.h`.
+ */
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
- /*************************************************************************/
- /* */
- /* Position Independent Code */
- /* */
- /* If this macro is set (which is _not_ the default), FreeType2 will */
- /* avoid creating constants that require address fixups. Instead the */
- /* constants will be moved into a struct and additional intialization */
- /* code will be used. */
- /* */
- /* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. [Note that standard compilers like gcc or */
- /* clang handle PIC generation automatically; you don't have to set */
- /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
- /* compilers.] */
- /* */
- /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
- /* modules (see `modules.cfg' for a complete list). For building with */
- /* FT_CONFIG_OPTION_PIC support, do the following. */
- /* */
- /* 0. Clone the repository. */
- /* 1. Define FT_CONFIG_OPTION_PIC. */
- /* 2. Remove all subdirectories in `src' that don't have */
- /* FT_CONFIG_OPTION_PIC support. */
- /* 3. Comment out the corresponding modules in `modules.cfg'. */
- /* 4. Compile. */
- /* */
-/* #define FT_CONFIG_OPTION_PIC */
+ /**************************************************************************
+ *
+ * Error Strings
+ *
+ * If this macro is set, `FT_Error_String` will return meaningful
+ * descriptions. This is not enabled by default to reduce the overall
+ * size of FreeType.
+ *
+ * More details can be found in the file `fterrors.h`.
+ */
+/* #define FT_CONFIG_OPTION_ERROR_STRINGS */
/*************************************************************************/
@@ -505,50 +515,60 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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` 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_COLOR_LAYERS` if you want to support coloured
+ * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
+ * module (namely TrueType~& OpenType).
+ */
+#define TT_CONFIG_OPTION_COLOR_LAYERS
+
+
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
+ * load and enumerate the glyph Postscript names in a TrueType or OpenType
+ * file.
+ *
+ * Note that when you do not compile the 'psnames' module by undefining the
+ * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
+ * contain additional code used to read the PS Names table from a font.
+ *
+ * (By default, the module uses 'psnames' to extract glyph names.)
+ */
#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
- /* access the internal name table in a SFNT-based format like TrueType */
- /* or OpenType. The name table contains various strings used to */
- /* describe the font, like family name, copyright, version, etc. It */
- /* does not contain any glyph name though. */
- /* */
- /* Accessing SFNT names is done through the functions declared in */
- /* `ftsnames.h'. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access
+ * the internal name table in a SFNT-based format like TrueType or
+ * OpenType. The name table contains various strings used to describe the
+ * font, like family name, copyright, version, etc. It does not contain
+ * any glyph name though.
+ *
+ * Accessing SFNT names is done through the functions declared in
+ * `ftsnames.h`.
+ */
#define TT_CONFIG_OPTION_SFNT_NAMES
- /*************************************************************************/
- /* */
- /* TrueType CMap support */
- /* */
- /* Here you can fine-tune which TrueType CMap table format shall be */
- /* supported. */
+ /**************************************************************************
+ *
+ * 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
@@ -568,122 +588,130 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
- /* a bytecode interpreter in the TrueType driver. */
- /* */
- /* By undefining this, you will only compile the code necessary to load */
- /* TrueType glyphs without hinting. */
- /* */
- /* Do not #undef this macro here, since the build system might */
- /* define it for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a
+ * bytecode interpreter in the TrueType driver.
+ *
+ * By undefining this, you will only compile the code necessary to load
+ * TrueType glyphs without hinting.
+ *
+ * Do not `#undef` this macro here, since the build system might define it
+ * for certain configurations only.
+ */
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* subpixel hinting support into the TrueType driver. This modifies the */
- /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
- /* requested. */
- /* */
- /* In particular, it modifies the bytecode interpreter to interpret (or */
- /* not) instructions in a certain way so that all TrueType fonts look */
- /* like they do in a Windows ClearType (DirectWrite) environment. See */
- /* [1] for a technical overview on what this means. See `ttinterp.h' */
- /* for more details on the LEAN option. */
- /* */
- /* There are three options. */
- /* */
- /* 1. This option is associated with the `Infinality' moniker. */
- /* Contributed by an individual nicknamed Infinality with the goal of */
- /* making TrueType fonts render better than on Windows. A high */
- /* amount of configurability and flexibility, down to rules for */
- /* single glyphs in fonts, but also very slow. Its experimental and */
- /* slow nature and the original developer losing interest meant that */
- /* this option was never enabled in default builds. */
- /* */
- /* 2. The new default mode for the TrueType driver. The Infinality code */
- /* base was stripped to the bare minimum and all configurability */
- /* removed in the name of speed and simplicity. The configurability */
- /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
- /* Courier. Legacy fonts are fonts that modify vertical stems to */
- /* achieve clean black-and-white bitmaps. The new mode focuses on */
- /* applying a minimal set of rules to all fonts indiscriminately so */
- /* that modern and web fonts render well while legacy fonts render */
- /* okay. */
- /* */
- /* 3. Compile both. */
- /* */
- /* By undefining these, you get rendering behavior like on Windows */
- /* without ClearType, i.e., Windows XP without ClearType enabled and */
- /* Win9x (interpreter version v35). Or not, depending on how much */
- /* hinting blood and testing tears the font designer put into a given */
- /* font. If you define one or both subpixel hinting options, you can */
- /* switch between between v35 and the ones you define. */
- /* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
- /* */
- /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile
+ * subpixel hinting support into the TrueType driver. This modifies the
+ * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is
+ * requested.
+ *
+ * In particular, it modifies the bytecode interpreter to interpret (or
+ * not) instructions in a certain way so that all TrueType fonts look like
+ * they do in a Windows ClearType (DirectWrite) environment. See [1] for a
+ * technical overview on what this means. See `ttinterp.h` for more
+ * details on the LEAN option.
+ *
+ * There are three possible values.
+ *
+ * Value 1:
+ * This value is associated with the 'Infinality' moniker, contributed by
+ * an individual nicknamed Infinality with the goal of making TrueType
+ * fonts render better than on Windows. A high amount of configurability
+ * and flexibility, down to rules for single glyphs in fonts, but also
+ * very slow. Its experimental and slow nature and the original
+ * developer losing interest meant that this option was never enabled in
+ * default builds.
+ *
+ * The corresponding interpreter version is v38.
+ *
+ * Value 2:
+ * The new default mode for the TrueType driver. The Infinality code
+ * base was stripped to the bare minimum and all configurability removed
+ * in the name of speed and simplicity. The configurability was mainly
+ * aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
+ * Legacy fonts are fonts that modify vertical stems to achieve clean
+ * black-and-white bitmaps. The new mode focuses on applying a minimal
+ * set of rules to all fonts indiscriminately so that modern and web
+ * fonts render well while legacy fonts render okay.
+ *
+ * The corresponding interpreter version is v40.
+ *
+ * Value 3:
+ * Compile both, making both v38 and v40 available (the latter is the
+ * default).
+ *
+ * By undefining these, you get rendering behavior like on Windows without
+ * ClearType, i.e., Windows XP without ClearType enabled and Win9x
+ * (interpreter version v35). Or not, depending on how much hinting blood
+ * and testing tears the font designer put into a given font. If you
+ * define one or both subpixel hinting options, you can switch between
+ * between v35 and the ones you define (using `FT_Property_Set`).
+ *
+ * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be
+ * defined.
+ *
+ * [1]
+ * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+ */
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */
#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 )
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
- /* TrueType glyph loader to use Apple's definition of how to handle */
- /* component offsets in composite glyphs. */
- /* */
- /* Apple and MS disagree on the default behavior of component offsets */
- /* in composites. Apple says that they should be scaled by the scaling */
- /* factors in the transformation matrix (roughly, it's more complex) */
- /* while MS says they should not. OpenType defines two bits in the */
- /* composite flags array which can be used to disambiguate, but old */
- /* fonts will not have them. */
- /* */
- /* https://www.microsoft.com/typography/otspec/glyf.htm */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
- /* */
+ /**************************************************************************
+ *
+ * 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.
+ *
+ * https://www.microsoft.com/typography/otspec/glyf.htm
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
+ */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
- /* support for Apple's distortable font technology (fvar, gvar, cvar, */
- /* and avar tables). This has many similarities to Type 1 Multiple */
- /* Masters support. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support
+ * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and
+ * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType
+ * also. 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` if you want to include support for an
+ * embedded 'BDF~' table within SFNT-based bitmap formats.
+ */
#define TT_CONFIG_OPTION_BDF
- /*************************************************************************/
- /* */
- /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
- /* number of bytecode instructions executed for a single run of the */
- /* bytecode interpreter, needed to prevent infinite loops. You don't */
- /* want to change this except for very special situations (e.g., making */
- /* a library fuzzer spend less time to handle broken fonts). */
- /* */
- /* It is not expected that this value is ever modified by a configuring */
- /* script; instead, it gets surrounded with #ifndef ... #endif so that */
- /* the value can be set as a preprocessor option on the compiler's */
- /* command line. */
- /* */
+ /**************************************************************************
+ *
+ * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum
+ * number of bytecode instructions executed for a single run of the
+ * bytecode interpreter, needed to prevent infinite loops. You don't want
+ * to change this except for very special situations (e.g., making a
+ * library fuzzer spend less time to handle broken fonts).
+ *
+ * It is not expected that this value is ever modified by a configuring
+ * script; instead, it gets surrounded with `#ifndef ... #endif` so that
+ * the value can be set as a preprocessor option on the compiler's command
+ * line.
+ */
#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
#endif
@@ -698,59 +726,58 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
- /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
- /* required. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays
+ * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required.
+ */
#define T1_MAX_DICT_DEPTH 5
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
+ /**************************************************************************
+ *
+ * `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. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A
+ * minimum of~16 is required.
+ *
+ * The Chinese font 'MingTiEG-Medium' (covering the 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. */
- /* */
+ /**************************************************************************
+ *
+ * Define this configuration macro if you want to prevent the compilation
+ * of the 't1afm' module, which is in charge of reading Type~1 AFM files
+ * into an existing face. Note that if set, the Type~1 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
- /*************************************************************************/
- /* */
- /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1 */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the type1 driver module. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1
+ * engine gets compiled into FreeType. If defined, it is possible to
+ * switch between the two engines using the `hinting-engine` property of
+ * the 'type1' driver module.
+ */
#define T1_CONFIG_OPTION_OLD_ENGINE
@@ -763,17 +790,16 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */
- /* possible to set up the default values of the four control points that */
- /* define the stem darkening behaviour of the (new) CFF engine. For */
- /* more details please read the documentation of the */
- /* `darkening-parameters' property of the cff driver module (file */
- /* `ftcffdrv.h'), which allows the control at run-time. */
- /* */
- /* Do *not* undefine these macros! */
- /* */
+ /**************************************************************************
+ *
+ * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is
+ * possible to set up the default values of the four control points that
+ * define the stem darkening behaviour of the (new) CFF engine. For more
+ * details please read the documentation of the `darkening-parameters`
+ * property (file `ftdriver.h`), which allows the control at run-time.
+ *
+ * Do **not** undefine these macros!
+ */
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400
@@ -787,13 +813,13 @@ FT_BEGIN_HEADER
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0
- /*************************************************************************/
- /* */
- /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the cff driver module. */
- /* */
+ /**************************************************************************
+ *
+ * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine
+ * gets compiled into FreeType. If defined, it is possible to switch
+ * between the two engines using the `hinting-engine` property of the 'cff'
+ * driver module.
+ */
#define CFF_CONFIG_OPTION_OLD_ENGINE
@@ -806,21 +832,21 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* There are many PCF fonts just called `Fixed' which look completely */
- /* different, and which have nothing to do with each other. When */
- /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
- /* random, the style changes often if one changes the size and one */
- /* cannot select some fonts at all. This option makes the PCF module */
- /* prepend the foundry name (plus a space) to the family name. */
- /* */
- /* We also check whether we have `wide' characters; all put together, we */
- /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
- /* */
- /* If this option is activated, it can be controlled with the */
- /* `no-long-family-names' property of the pcf driver module. */
- /* */
+ /**************************************************************************
+ *
+ * There are many PCF fonts just called 'Fixed' which look completely
+ * different, and which have nothing to do with each other. When selecting
+ * 'Fixed' in KDE or Gnome one gets results that appear rather random, the
+ * style changes often if one changes the size and one cannot select some
+ * fonts at all. This option makes the 'pcf' module prepend the foundry
+ * name (plus a space) to the family name.
+ *
+ * We also check whether we have 'wide' characters; all put together, we
+ * get family names like 'Sony Fixed' or 'Misc Fixed Wide'.
+ *
+ * If this option is activated, it can be controlled with the
+ * `no-long-family-names` property of the 'pcf' driver module.
+ */
#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
@@ -833,47 +859,76 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
- /* support. */
- /* */
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script
+ * support.
+ */
#define AF_CONFIG_OPTION_CJK
- /*************************************************************************/
- /* */
- /* Compile autofit module with Indic script support. */
- /* */
+
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with fallback Indic script support, covering
+ * some scripts that the 'latin' submodule of the 'autofit' module doesn't
+ * (yet) handle.
+ */
#define AF_CONFIG_OPTION_INDIC
- /*************************************************************************/
- /* */
- /* Compile autofit module with warp hinting. The idea of the warping */
- /* code is to slightly scale and shift a glyph within a single dimension */
- /* so that as much of its segments are aligned (more or less) on the */
- /* grid. To find out the optimal scaling and shifting value, various */
- /* parameter combinations are tried and scored. */
- /* */
- /* This experimental option is active only if the rendering mode is */
- /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
- /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
- /* information; by default it is switched off). */
- /* */
+
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with warp hinting. The idea of the warping
+ * code is to slightly scale and shift a glyph within a single dimension so
+ * that as much of its segments are aligned (more or less) on the grid. To
+ * find out the optimal scaling and shifting value, various parameter
+ * combinations are tried and scored.
+ *
+ * You can switch warping on and off with the `warping` property of the
+ * auto-hinter (see file `ftdriver.h` for more information; by default it
+ * is switched off).
+ *
+ * This experimental option is not active if the rendering mode is
+ * `FT_RENDER_MODE_LIGHT`.
+ */
#define AF_CONFIG_OPTION_USE_WARPER
+
+ /**************************************************************************
+ *
+ * Use TrueType-like size metrics for 'light' auto-hinting.
+ *
+ * It is strongly recommended to avoid this option, which exists only to
+ * help some legacy applications retain its appearance and behaviour with
+ * respect to auto-hinted TrueType fonts.
+ *
+ * The very reason this option exists at all are GNU/Linux distributions
+ * like Fedora that did not un-patch the following change (which was
+ * present in FreeType between versions 2.4.6 and 2.7.1, inclusive).
+ *
+ * ```
+ * 2011-07-16 Steven Chu <steven.f.chu@gmail.com>
+ *
+ * [truetype] Fix metrics on size request for scalable fonts.
+ * ```
+ *
+ * This problematic commit is now reverted (more or less).
+ */
+/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
+
/* */
/*
- * This macro is obsolete. Support has been removed in FreeType
- * version 2.5.
+ * This macro is obsolete. Support has been removed in FreeType version
+ * 2.5.
*/
/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
/*
- * This macro is defined if native TrueType hinting is requested by the
- * definitions above.
+ * The next three macros are defined if native TrueType hinting is
+ * requested by the definitions above. Don't change this.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
@@ -892,7 +947,7 @@ FT_BEGIN_HEADER
/*
* Check CFF darkening parameters. The checks are the same as in function
- * `cff_property_set' in file `cffdrivr.c'.
+ * `cff_property_set` in file `cffdrivr.c`.
*/
#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \
diff --git a/freetype/docs/CHANGES b/freetype/docs/CHANGES
index a6d088af..f36cb19b 100644
--- a/freetype/docs/CHANGES
+++ b/freetype/docs/CHANGES
@@ -1,3 +1,184 @@
+
+CHANGES BETWEEN 2.10.0 and 2.10.1
+
+ I. IMPORTANT BUG FIXES
+
+ - The bytecode hinting of OpenType variation fonts was flawed, since
+ the data in the `CVAR' table wasn't correctly applied.
+
+
+ II. MISCELLANEOUS
+
+ - Auto-hinter support for Mongolian.
+
+ - For distribution, `.tar.bz2' packages are replaced with `.tar.xz'
+ bundles.
+
+ - The handling of the default character in PCF fonts as introduced
+ in version 2.10.0 was partially broken, causing premature abortion
+ of charmap iteration for many fonts.
+
+ - If `FT_Set_Named_Instance' was called with the same arguments
+ twice in a row, the function returned an incorrect error code the
+ second time.
+
+ - Direct rendering using FT_RASTER_FLAG_DIRECT crashed (bug
+ introduced in version 2.10.0).
+
+ - Increased precision while computing OpenType font variation
+ instances.
+
+ - The flattening algorithm of cubic Bezier curves was slightly
+ changed to make it faster. This can cause very subtle rendering
+ changes, which aren't noticeable by the eye, however.
+
+ - The auto-hinter now disables hinting if there are blue zones
+ defined for a `style' (i.e., a certain combination of a script and
+ its related typographic features) but the font doesn't contain any
+ characters needed to set up at least one blue zone.
+
+ - The `ftmulti' demo program now supports multiple hidden axes with
+ the same name tag.
+
+ - `ftview', `ftstring', and `ftgrid' got a `-k' command line option
+ to emulate a sequence of keystrokes at start-up.
+
+ - `ftview', `ftstring', and `ftgrid' now support screen dumping to a
+ PNG file.
+
+ - The bytecode debugger, `ttdebug', now supports variation TrueType
+ fonts; a variation font instance can be selected with the new `-d'
+ command line option.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.9.1 and 2.10.0
+
+ I. IMPORTANT CHANGES
+
+ - A bunch of new functions has been added to access and process
+ COLR/CPAL data of OpenType fonts with color-layered glyphs.
+
+ FT_Palette_Data_Get
+ Retrieve color palette data.
+ FT_Palette_Select
+ Select and activate a color palette for color-layered
+ glyphs.
+ FT_Palette_Set_Foreground_Color
+ Set text foreground color for palette index 0xFFFF.
+
+ FT_Get_Color_Glyph_Layer
+ Get color layers for a given glyph (using an interator
+ object).
+
+ FT_Bitmap_Blend
+ Blend one bitmap onto another with a given color.
+
+ - An experimental feature is the new behaviour of the
+ `FT_LOAD_COLOR' load flag for color-layered glyphs: Internally
+ it sets a flag so that if `FT_Render_Glyph' is called with
+ `FT_RENDER_MODE_NORMAL' (or `FT_Load_Glyph' with
+ `FT_LOAD_RENDER'), a default blending of the color glyph layers
+ will happen automatically for convenience.
+
+ - As a GSoC 2018 project, Nikhil Ramakrishnan completely
+ overhauled and modernized the API reference.
+
+
+ II. MISCELLANEOUS
+
+ - The logic for computing the global ascender, descender, and
+ height of OpenType fonts has been slightly adjusted for
+ consistency.
+
+ . If the `useTypoMetrics' flag (i.e., bit 7 in the `fsSelection'
+ field) in the `OS/2' table is set, use the `sTypo' fields in
+ `OS/2' unconditionally.
+ . Otherwise use the metrics data from the `hhea' table (if not
+ zero).
+ . Otherwise use the `sTypo' fields from the `OS/2' table (if not
+ zero).
+ . Otherwise use the `usWin' data from the `OS/2' table as a last
+ resort.
+
+ Variable fonts will apply the `MVAR' deltas to whichever metrics
+ were picked.
+
+ - `TT_Set_MM_Blend' could fail if call repeatedly with the same
+ arguments.
+
+ - The precision of handling deltas in Variation Fonts has been
+ increased. The problem did only show up with multidimensional
+ designspaces.
+
+ - New function `FT_Library_SetLcdGeometry' to set up the geometry
+ of LCD subpixels.
+
+ - FreeType now uses the `defaultChar' property of PCF fonts to set
+ the glyph for the undefined character at glyph index 0 (as
+ FreeType already does for all other supported font formats). As
+ a consequence, the order of glyphs of a PCF font if accessed
+ with FreeType can be different now compared to previous
+ versions.
+
+ This change doesn't affect PCF font access with cmaps.
+
+ - `FT_Select_Charmap' has been changed to allow parameter value
+ `FT_ENCODING_NONE', which is valid for BDF, PCF, and Windows FNT
+ formats to access built-in cmaps that don't have a predefined
+ `FT_Encoding' value.
+
+ - A previously reserved field in the `FT_GlyphSlotRec' structure
+ now holds the glyph index.
+
+ - On Win32 platforms, the use of `_DLL' to build the library has
+ been replaced with `DLL_EXPORT' and `DLL_IMPORT'.
+
+ - The usual round of fuzzer bug fixes to better reject malformed
+ fonts.
+
+ - `FT_Outline_New_Internal' and `FT_Outline_Done_Internal' have
+ been removed. These two functions were public by oversight only
+ and were never documented.
+
+ - A new function `FT_Error_String' returns descriptions of error
+ codes if configuration macro FT_CONFIG_OPTION_ERROR_STRINGS is
+ defined.
+
+ - `FT_Set_MM_WeightVector' and `FT_Get_MM_WeightVector' are new
+ functions limited to Adobe MultiMaster fonts to directly set and
+ get the weight vector.
+
+ - Support for Position Independent Code as needed by systems that
+ prohibit automatic address fixups, such as BREW, has been
+ removed. [Compilation with modern compilers that use flags like
+ `-fPIC' or `-fPIE' is not affected.]
+
+ - The `ftdump' demo program has new options `-c' and `-C' to
+ display charmaps in compact and detailed format, respectively.
+ Option `-V' has been removed.
+
+ - The `ftview', `ftstring', and `ftgrid' demo programs use a new
+ command line option `-d' to specify the program window's width,
+ height, and color depth.
+
+ - The `ftview' demo program now displays red boxes for zero-width
+ glyphs.
+
+ - `ftglyph' has limited support to display fonts with
+ color-layered glyphs. This will be improved later on.
+
+ - `ftgrid' can now display bitmap fonts also.
+
+ - The `ttdebug' demo program has a new option `-f' to select a
+ member of a TrueType collection (TTC).
+
+ - Other various improvements to the demo programs.
+
+
+======================================================================
+
CHANGES BETWEEN 2.9 and 2.9.1
I. IMPORTANT BUG FIXES
@@ -8,7 +189,7 @@ CHANGES BETWEEN 2.9 and 2.9.1
- CVE-2018-6942: Older FreeType versions can crash with certain
malformed variation fonts.
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
II. MISCELLANEOUS
@@ -232,7 +413,7 @@ CHANGES BETWEEN 2.7.1 and 2.8
following properties can be handled: stem darkening, LCD filter
weights, and the random seed for the `random' CFF operator.
- - The PCF change to show more `colourful' family names (introduced
+ - The PCF change to show more `colorful' family names (introduced
in version 2.7.1) was too radical; it can now be configured with
PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If
activated, it can be switched off at run time with the new pcf
@@ -383,7 +564,7 @@ CHANGES BETWEEN 2.7 and 2.7.1
and the number of CVT entries. Please report if you encounter a
font where the selected values are not adequate.
- - PCF family names are made more `colourful'; they now include the
+ - PCF family names are made more `colorful'; they now include the
foundry and information whether they contain wide characters.
For example, you no longer get `Fixed' but rather `Sony Fixed'
or `Misc Fixed Wide'.
@@ -667,8 +848,8 @@ CHANGES BETWEEN 2.6.1 and 2.6.2
- The `ftstring' demo program now supports subpixel rendering; use
key `l' to cycle through the LCD modes.
- - The `ftstring' demo program now supports colour rendering; use
- the `space' key to cycle through various colour combinations.
+ - The `ftstring' demo program now supports color rendering; use
+ the `space' key to cycle through various color combinations.
- The graphical demo programs now use a default gamma value of 1.8
(instead of 1.2).
@@ -1325,7 +1506,7 @@ CHANGES BETWEEN 2.4.10 and 2.4.11
Originally, it was a separate patch available from
- http://www.infinality.net/blog/
+ https://web.archive.org/web/20150710073951/http://www.infinality.net:80/blog/
and which has been integrated.
@@ -4047,7 +4228,7 @@ CHANGES BETWEEN beta8 and 2.0
untested for now.
- Updated `docs/docmaker.py', a draft API reference is available at
- http://www.freetype.org/ft2api.html.
+ https://web.archive.org/web/20001215173400/http://www.freetype.org:80/ft2api.html.
- Changed `type1' to use `psaux'.
@@ -5017,7 +5198,7 @@ Extensions support:
------------------------------------------------------------------------
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/CUSTOMIZE b/freetype/docs/CUSTOMIZE
index 916be327..f3f9f8ed 100644
--- a/freetype/docs/CUSTOMIZE
+++ b/freetype/docs/CUSTOMIZE
@@ -139,7 +139,7 @@ IV. Overriding default configuration and module headers
----------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/DEBUG b/freetype/docs/DEBUG
index 751eaf02..828f2943 100644
--- a/freetype/docs/DEBUG
+++ b/freetype/docs/DEBUG
@@ -88,14 +88,13 @@ debugging its code:
for example as in
#undef FT_COMPONENT
- #define FT_COMPONENT trace_io
-
- The value of the FT_COMPONENT macro is an enumeration named
- `trace_XXXX' where `XXXX' is one of the component names defined in
- the internal file `internal/fttrace.h'. If you modify FreeType
- source and insert new `trace_XXXX' macro, you must register it in
- `fttrace.h'. If you insert or remove many trace macros, you can
- check the undefined or the unused trace macro by
+ #define FT_COMPONENT io
+
+ The value of the FT_COMPONENT macro is one of the component
+ names defined in the internal file `internal/fttrace.h'. If you
+ modify FreeType source and insert new FT_COMPONENT macro, you must
+ register it in `fttrace.h'. If you insert or remove many trace
+ macros, you can check the undefined or the unused trace macro by
`src/tools/chktrcmp.py'.
Each such component is assigned a `debug level', ranging from 0 to
@@ -138,8 +137,8 @@ behaviour of FreeType at runtime.
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.
+ in `fttrace.h'. `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
@@ -191,7 +190,7 @@ behaviour of FreeType at runtime.
------------------------------------------------------------------------
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/DOCGUIDE b/freetype/docs/DOCGUIDE
new file mode 100644
index 00000000..da76c88f
--- /dev/null
+++ b/freetype/docs/DOCGUIDE
@@ -0,0 +1,298 @@
+Introduction
+------------
+
+Documentation is an extremely important part of any project, and it
+helps a lot if it uses consistent syntax and layout.
+
+The documentation for the FreeType library is maintained in header
+files in the `include/` directory in the form of code comments. These
+comments are extracted and organized by 'docwriter' (previously
+'docmaker'). The generated docs can be viewed in the
+`docs/reference/site/` directory after running `make refdoc`.
+
+Documentation comments follow a specific structure and format as
+described below.
+
+
+Documentation Structure
+-----------------------
+
+The documentation is divided into multiple chapters, which contain
+sections relevant to it. The chapter details and sections contained
+in them are listed in `include/freetype/ftchapters.h`. Any unlisted
+section is added to the 'Miscellaneous' chapter.
+
+Sections may contain sub-sections which consist of properties,
+enumerations, and other data types.
+
+
+Comment Blocks
+--------------
+
+Documentation blocks follow a specific format:
+
+ /***************************** (should end on column 77)
+ *
+ * (1 asterisk, 1 space, then content)
+ *
+ */ (end of block)
+
+To make 'docwriter' recognize a comment block, there must be at least
+two asterisks in the first line. As a consequence, you should change
+the second asterisk to something else if you want to prevent a comment
+block being handled by 'docwriter' (for example, change `/****/` to
+`/*#**/`).
+
+
+Markup Tags
+-----------
+
+Markup tags are used to indicate what comes next. The syntax for a
+tag is:
+
+ @foo:
+
+An `@`, followed by the tag, and then `:`.
+
+
+Reserved Tags
+-------------
+
+There are some keywords that have a special meaning to docwriter.
+As a convention, all keywords are written in lowercase.
+
+* `chapter`: Defines a chapter. Usually the title with underscores.
+* `sections`: List of sections in the chapter, in order.
+* `section`: Defines the start or continuation of a section.
+* `title`: Title for a chapter or section. May contain spaces.
+* `abstract`: The abstract for a section, visible in the Table of
+ Contents (TOC).
+* `description`: Detailed description of a tag (except chapters),
+ shown as synopsis.
+* `values`: A list of 'values' for the tag. These values are used for
+ cross-referencing.
+
+
+Other Tags
+----------
+
+Except the ones given above, any other tags will be added as a part of
+a subsection. All tags are lowercase by convention.
+
+
+Public Header Definitions
+-------------------------
+
+The public headers for FreeType have their names defined in
+`include/freetype/config/ftheader.h`. Any new public header file must
+be defined in this file, in the following format:
+
+ #define FT_NEWNAME_H <freetype/newname.h>
+
+Where `newname` is the name of the header file.
+
+This macro is combined with the file location of a sub-section and
+printed with the object.
+
+
+Note on code blocks captured after comments
+-------------------------------------------
+
+All non-documentation lines after a documentation comment block are
+captured to be displayed as the code for the sub-section. To stop
+collection, a line with `/* */` should be added.
+
+
+General Formatting Conventions
+------------------------------
+
+* Use two spaces after a full stop ending a sentence.
+* Use appropriate uppercasing in titles. Refer
+
+ https://english.stackexchange.com/a/34
+
+ for more information.
+* Do not add trailing parentheses when citing a C function.
+
+
+Markdown Usage
+--------------
+
+All tags, except the ones that define the name and title for a block
+support markdown in them. Docwriter uses a markdown parser that
+follows rules given in John Gruber's markdown guide:
+
+ https://daringfireball.net/projects/markdown/syntax
+
+with a few exceptions and extensions, detailed below. This may also
+be referred to as the **FreeType Flavored Markdown**.
+
+
+Headers
+-------
+
+Markdown headers should not be used directly, because these are added
+based on section titles, sub-section names, and tags. However, if a
+header needs to be added, note the following correspondence to HTML tags:
+
+* Section title on top of the page is `H1`.
+* Sub-section titles are `H2`.
+* Parts of sub-sections are `H4`.
+* Any header added will be visible in the Table of Contents (TOC) of
+ the page.
+
+
+Emphasis
+--------
+
+* Use `_underscores_` for italics.
+* Use `**double asterisks**` for bold.
+
+Although the other notations (double underscore for bold, single
+asterisk for italics) are supported, it is recommended to use the
+above for consistency.
+
+Note that there may be cases where having two asterisks or underscores
+in a line may lead to text being picked up as italics or bold.
+Although unintentional, this is correct markdown behavior.
+
+For inline code, wrap the sequence with backticks (see below). This
+renders symbols correctly without modifications. If a symbol is
+absolutely required outside of an inline code block or code sequence,
+escape it with a backslash (like `\*` or `\_`).
+
+
+Lists
+-----
+
+Unordered lists can be created with asterisks:
+
+ * Unordered list items can use asterisks.
+ * Another list item.
+
+Ordered lists start with numbers:
+
+ 1. This is an ordered list item.
+ 2. Brackets after numbers won't work.
+
+To continue a list over multiple paragraphs, indent them with at least
+four spaces. For example:
+
+ 1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+
+ Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+
+ 2. This is the second list item.
+
+ This paragraph is not a part of the list.
+
+More information on lists in markdown is available at
+
+ https://daringfireball.net/projects/markdown/syntax#list
+
+
+Cross-references
+----------------
+
+Other sub-sections can be linked with the `@` symbol:
+
+ @description:
+ While FreeType's CFF driver doesn't expose API functions by
+ itself, it is possible to control its behaviour with
+ @FT_Property_Set and @FT_Property_Get.
+
+If a field in the `values` table of another sub-section is linked, the
+link leads to its parent sub-section.
+
+
+Links and Images
+----------------
+
+All URLs are converted to links in the HTML documentation.
+
+Markdown syntax for links and images are fully supported.
+
+
+Inline Code
+-----------
+
+To indicate a span of code, wrap it with backtick quotes (`` ` ``):
+
+ Use the `printf()` function.
+
+Cross-references, markdown, and html styling do not work in inline code
+sequences.
+
+
+Code and Syntax Highlighting
+----------------------------
+
+Blocks of code are fenced by lines with three back-ticks `` ``` ``
+followed by the language name, if any (used for syntax highlighting),
+as demonstrated in the following example.
+
+ ```c
+ x = y + z;
+ if ( zookoo == 2 )
+ {
+ foobar();
+ }
+ ```
+
+Note that the indentation of the opening line and the closing line
+must be exactly the same. The code sequence itself should have a
+larger indentation than the surrounding back-ticks.
+
+Like inline code, markdown and html styling is *not* supported inside
+code blocks.
+
+
+Tables
+------
+
+Tables are used to list values, input, and other fields. The FreeType
+Flavored Markdown adopts a simple approach to tables with two columns,
+or field definition tables.
+
+Field definition names may contain alphanumeric, underscore, and the
+`.` characters. This is followed by `::`. The following lines are
+the second column of the table. A field definition ends with the
+start of another field definition, or a markup tag.
+
+ @Input:
+ pathname ::
+ A path to the font file.
+
+ face_index ::
+ See @FT_Open_Face for a detailed description of this
+ parameter.
+
+
+Non-breaking Space
+------------------
+
+A tilde can be used to create a non-breaking space. The example
+
+ The encoding value~0 is reserved.
+
+is converted to
+
+ The encoding value&nbsp;0 is reserved.
+
+
+----------------------------------------------------------------------
+
+Copyright (C) 2018-2019 by
+Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.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 DOCGUIDE ---
diff --git a/freetype/docs/INSTALL b/freetype/docs/INSTALL
index 71d4a055..61050252 100644
--- a/freetype/docs/INSTALL
+++ b/freetype/docs/INSTALL
@@ -70,14 +70,14 @@ II. Custom builds of the library
[1] make++, a make tool written in Perl, has sufficient support of GNU
make extensions to build FreeType. See
- http://makepp.sourceforge.net
+ https://makepp.sourceforge.net
for more information; you need version 2.0 or newer, and you must
pass option `--norc-substitution'.
----------------------------------------------------------------------
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.ANY b/freetype/docs/INSTALL.ANY
index fddac9ad..4d5fd8da 100644
--- a/freetype/docs/INSTALL.ANY
+++ b/freetype/docs/INSTALL.ANY
@@ -141,7 +141,7 @@ II. Support for flat-directory compilation
----------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.CROSS b/freetype/docs/INSTALL.CROSS
index 239e1a9b..8f4cf6e4 100644
--- a/freetype/docs/INSTALL.CROSS
+++ b/freetype/docs/INSTALL.CROSS
@@ -163,7 +163,7 @@ procedure.
----------------------------------------------------------------------
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/freetype/docs/INSTALL.GNU b/freetype/docs/INSTALL.GNU
index e314ecfd..6f37a0fd 100644
--- a/freetype/docs/INSTALL.GNU
+++ b/freetype/docs/INSTALL.GNU
@@ -23,7 +23,7 @@ instructions in the file `INSTALL.UNIX' instead.
Note that make++, a make tool written in Perl, supports enough
features of GNU make to compile FreeType. See
- http://makepp.sourceforge.net
+ https://makepp.sourceforge.net
for more information; you need version 2.0 or newer, and you must
pass option `--norc-substitution'.
@@ -148,7 +148,7 @@ instructions in the file `INSTALL.UNIX' instead.
----------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.UNIX b/freetype/docs/INSTALL.UNIX
index f92d828e..602744d3 100644
--- a/freetype/docs/INSTALL.UNIX
+++ b/freetype/docs/INSTALL.UNIX
@@ -105,7 +105,7 @@ or MSys on Win32:
----------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.VMS b/freetype/docs/INSTALL.VMS
index c1d30e06..54fa2f8d 100644
--- a/freetype/docs/INSTALL.VMS
+++ b/freetype/docs/INSTALL.VMS
@@ -49,7 +49,7 @@ V7.2-1.
------------------------------------------------------------------------
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/MAKEPP b/freetype/docs/MAKEPP
index a4d44b78..4450e477 100644
--- a/freetype/docs/MAKEPP
+++ b/freetype/docs/MAKEPP
@@ -1,5 +1,5 @@
As a special exception, FreeType can also be built with the 'makepp'
-build tool, available from http://makepp.sourceforge.net.
+build tool, available from https://makepp.sourceforge.net.
Note, however, that you will need at least version 2.0 and pass the
option --norc-substitution to have it work correctly.
diff --git a/freetype/docs/TODO b/freetype/docs/TODO
index 1a443a2e..1efccc68 100644
--- a/freetype/docs/TODO
+++ b/freetype/docs/TODO
@@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType.
------------------------------------------------------------------------
-Copyright 2001-2018 by
+Copyright (C) 2001-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/VERSIONS.TXT b/freetype/docs/VERSIONS.TXT
index 37741570..5cdf3785 100644
--- a/freetype/docs/VERSIONS.TXT
+++ b/freetype/docs/VERSIONS.TXT
@@ -52,6 +52,8 @@ on _most_ systems, but not all of them:
release libtool so
-------------------------------
+ 2.10.1 23.1.17 6.17.1
+ 2.10.0 23.0.17 6.17.0
2.9.1 22.1.16 6.16.1
2.9.0 22.0.16 6.16.0
2.8.1 21.0.15 6.15.0
@@ -114,7 +116,7 @@ other release numbers.
------------------------------------------------------------------------
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/formats.txt b/freetype/docs/formats.txt
index 75aba92e..5ec5442c 100644
--- a/freetype/docs/formats.txt
+++ b/freetype/docs/formats.txt
@@ -165,8 +165,8 @@ which isn't supported yet please send a mail too.
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
+ https://www.etsi.org/
+ https://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
[3] Support is rudimentary currently; some tables or data are not
loaded yet.
@@ -191,7 +191,7 @@ which isn't supported yet please send a mail too.
------------------------------------------------------------------------
-Copyright 2004-2018 by
+Copyright (C) 2004-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/freetype-config.1 b/freetype/docs/freetype-config.1
index 164b8ffa..96ff0f28 100644
--- a/freetype/docs/freetype-config.1
+++ b/freetype/docs/freetype-config.1
@@ -1,4 +1,4 @@
-.TH FREETYPE-CONFIG 1 "May 2018" "FreeType 2.9.1"
+.TH FREETYPE-CONFIG 1 "July 2019" "FreeType 2.10.1"
.
.
.SH NAME
diff --git a/freetype/docs/raster.txt b/freetype/docs/raster.txt
index 8ef466ef..3aa38220 100644
--- a/freetype/docs/raster.txt
+++ b/freetype/docs/raster.txt
@@ -618,7 +618,7 @@ II. Rendering Technology
------------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/reference/README b/freetype/docs/reference/README
index 51b04d6f..3ffcfc08 100644
--- a/freetype/docs/reference/README
+++ b/freetype/docs/reference/README
@@ -1,5 +1,35 @@
-After saying `make refdoc' this directory contains the FreeType API
-reference. You need python to make this target.
+After saying `make refdoc' or `make refdoc-venv' the `site/' directory
+contains the FreeType API reference. You need python and pip to make this
+target.
+
+There are two ways to generate the documentation:
+
+1. Using `make refdoc':
+
+ - Ensure `python' and `pip' are available.
+ - Install pip package `docwriter' with `pip install --user docwriter'.
+ - Make target with `make refdoc'.
+ - This target can be run offline once required packages are installed.
+
+2. Using `make refdoc-venv' (requires internet access):
+
+ - Ensure `python', `pip' and python package `virtualenv' are available.
+ - Make target with `make refdoc-venv'.
+ - This may or may not require internet access every time depending on
+ pip and system caching.
This also works with Jam: Just type `jam refdoc' in the main directory.
+Some troubleshooting tips:
+
+* Regularly run `pip install --upgrade docwriter' to check for updates which
+may include bug fixes.
+
+* Ensure that `docwriter' is installed in the same python target that
+`make refdoc' uses (python3/python2/python).
+
+* `pip' and `python' may point to different versions of Python. Check using
+`python --version' and `pip --version'.
+
+* If none of this works, send a mail to `freetype-devel@nongnu.org' or file
+an issue at `https://github.com/freetype/docwriter/issues'.
diff --git a/freetype/docs/reference/ft2-auto_hinter.html b/freetype/docs/reference/ft2-auto_hinter.html
deleted file mode 100644
index 884d87ad..00000000
--- a/freetype/docs/reference/ft2-auto_hinter.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="auto_hinter">The auto-hinter</h1>
-
-<p>While FreeType's auto-hinter doesn't expose API functions by itself, it is possible to control its behaviour with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>. The following lists the available properties together with the necessary macros and structures.</p>
-<p>Note that the auto-hinter's module name is &lsquo;autofitter&rsquo; for historical reasons.</p>
-<p>Available properties are <a href="ft2-properties.html#increase-x-height">increase-x-height</a>, <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a> (experimental), <a href="ft2-properties.html#darkening-parameters">darkening-parameters</a> (experimental), <a href="ft2-properties.html#warping">warping</a> (experimental), <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a> (experimental), <a href="ft2-properties.html#fallback-script">fallback-script</a> (experimental), and <a href="ft2-properties.html#default-script">default-script</a> (experimental), as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-base_interface.html b/freetype/docs/reference/ft2-base_interface.html
deleted file mode 100644
index 3cedbcc9..00000000
--- a/freetype/docs/reference/ft2-base_interface.html
+++ /dev/null
@@ -1,3229 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="base_interface">Base Interface</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Library">FT_Library</a></td><td><a href="#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td><a href="#FT_LOAD_NO_AUTOHINT">FT_LOAD_NO_AUTOHINT</a></td></tr>
-<tr><td><a href="#FT_Face">FT_Face</a></td><td><a href="#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td><a href="#FT_LOAD_COLOR">FT_LOAD_COLOR</a></td></tr>
-<tr><td><a href="#FT_Size">FT_Size</a></td><td><a href="#FT_SubGlyph">FT_SubGlyph</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_GlyphSlot">FT_GlyphSlot</a></td><td>&nbsp;</td><td><a href="#FT_LOAD_VERTICAL_LAYOUT">FT_LOAD_VERTICAL_LAYOUT</a></td></tr>
-<tr><td><a href="#FT_CharMap">FT_CharMap</a></td><td><a href="#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="#FT_LOAD_IGNORE_TRANSFORM">FT_LOAD_IGNORE_TRANSFORM</a></td></tr>
-<tr><td><a href="#FT_Encoding">FT_Encoding</a></td><td>&nbsp;</td><td><a href="#FT_LOAD_FORCE_AUTOHINT">FT_LOAD_FORCE_AUTOHINT</a></td></tr>
-<tr><td><a href="#FT_ENC_TAG">FT_ENC_TAG</a></td><td><a href="#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="#FT_LOAD_NO_RECURSE">FT_LOAD_NO_RECURSE</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="#FT_LOAD_PEDANTIC">FT_LOAD_PEDANTIC</a></td></tr>
-<tr><td><a href="#FT_FaceRec">FT_FaceRec</a></td><td>&nbsp;</td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_New_Face">FT_New_Face</a></td><td><a href="#FT_LOAD_TARGET_NORMAL">FT_LOAD_TARGET_NORMAL</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_SCALABLE">FT_FACE_FLAG_SCALABLE</a></td><td><a href="#FT_Done_Face">FT_Done_Face</a></td><td><a href="#FT_LOAD_TARGET_LIGHT">FT_LOAD_TARGET_LIGHT</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_FIXED_SIZES">FT_FACE_FLAG_FIXED_SIZES</a></td><td><a href="#FT_Reference_Face">FT_Reference_Face</a></td><td><a href="#FT_LOAD_TARGET_MONO">FT_LOAD_TARGET_MONO</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_FIXED_WIDTH">FT_FACE_FLAG_FIXED_WIDTH</a></td><td><a href="#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="#FT_LOAD_TARGET_LCD">FT_LOAD_TARGET_LCD</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_HORIZONTAL">FT_FACE_FLAG_HORIZONTAL</a></td><td><a href="#FT_Face_Properties">FT_Face_Properties</a></td><td><a href="#FT_LOAD_TARGET_LCD_V">FT_LOAD_TARGET_LCD_V</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_VERTICAL">FT_FACE_FLAG_VERTICAL</a></td><td><a href="#FT_Open_Face">FT_Open_Face</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_FACE_FLAG_COLOR">FT_FACE_FLAG_COLOR</a></td><td><a href="#FT_Open_Args">FT_Open_Args</a></td><td><a href="#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_SFNT">FT_FACE_FLAG_SFNT</a></td><td><a href="#FT_Parameter">FT_Parameter</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_FACE_FLAG_CID_KEYED">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="#FT_Attach_File">FT_Attach_File</a></td><td><a href="#FT_Render_Glyph">FT_Render_Glyph</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_TRICKY">FT_FACE_FLAG_TRICKY</a></td><td><a href="#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="#FT_Render_Mode">FT_Render_Mode</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_KERNING">FT_FACE_FLAG_KERNING</a></td><td>&nbsp;</td><td><a href="#FT_Get_Kerning">FT_Get_Kerning</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_MULTIPLE_MASTERS">FT_FACE_FLAG_MULTIPLE_MASTERS</a></td><td><a href="#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="#FT_Kerning_Mode">FT_Kerning_Mode</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_VARIATION">FT_FACE_FLAG_VARIATION</a></td><td><a href="#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_GLYPH_NAMES">FT_FACE_FLAG_GLYPH_NAMES</a></td><td><a href="#FT_Request_Size">FT_Request_Size</a></td><td><a href="#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_EXTERNAL_STREAM">FT_FACE_FLAG_EXTERNAL_STREAM</a></td><td><a href="#FT_Select_Size">FT_Select_Size</a></td><td><a href="#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td></tr>
-<tr><td><a href="#FT_FACE_FLAG_HINTER">FT_FACE_FLAG_HINTER</a></td><td><a href="#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td><a href="#FT_CharMapRec">FT_CharMapRec</a></td></tr>
-<tr><td><a href="#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="#FT_Size_Request">FT_Size_Request</a></td><td><a href="#FT_Select_Charmap">FT_Select_Charmap</a></td></tr>
-<tr><td><a href="#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td><a href="#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="#FT_Set_Charmap">FT_Set_Charmap</a></td></tr>
-<tr><td><a href="#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td><a href="#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td></tr>
-<tr><td><a href="#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td><a href="#FT_Get_Char_Index">FT_Get_Char_Index</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td><a href="#FT_Get_First_Char">FT_Get_First_Char</a></td><td><a href="#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a></td></tr>
-<tr><td><a href="#FT_HAS_COLOR">FT_HAS_COLOR</a></td><td><a href="#FT_Get_Next_Char">FT_Get_Next_Char</a></td><td><a href="#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td></tr>
-<tr><td><a href="#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td><a href="#FT_Get_Name_Index">FT_Get_Name_Index</a></td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Load_Char">FT_Load_Char</a></td><td><a href="#FT_Face_Internal">FT_Face_Internal</a></td></tr>
-<tr><td><a href="#FT_IS_SFNT">FT_IS_SFNT</a></td><td>&nbsp;</td><td><a href="#FT_Size_Internal">FT_Size_Internal</a></td></tr>
-<tr><td><a href="#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="#FT_OPEN_MEMORY">FT_OPEN_MEMORY</a></td><td><a href="#FT_Slot_Internal">FT_Slot_Internal</a></td></tr>
-<tr><td><a href="#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td><a href="#FT_OPEN_STREAM">FT_OPEN_STREAM</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td><a href="#FT_OPEN_PATHNAME">FT_OPEN_PATHNAME</a></td><td><a href="#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td></tr>
-<tr><td><a href="#FT_IS_TRICKY">FT_IS_TRICKY</a></td><td><a href="#FT_OPEN_DRIVER">FT_OPEN_DRIVER</a></td><td><a href="#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td></tr>
-<tr><td><a href="#FT_IS_NAMED_INSTANCE">FT_IS_NAMED_INSTANCE</a></td><td><a href="#FT_OPEN_PARAMS">FT_OPEN_PARAMS</a></td><td><a href="#FT_OPEN_XXX">FT_OPEN_XXX</a></td></tr>
-<tr><td><a href="#FT_IS_VARIATION">FT_IS_VARIATION</a></td><td>&nbsp;</td><td><a href="#FT_LOAD_XXX">FT_LOAD_XXX</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_LOAD_DEFAULT">FT_LOAD_DEFAULT</a></td><td><a href="#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td></tr>
-<tr><td><a href="#FT_STYLE_FLAG_BOLD">FT_STYLE_FLAG_BOLD</a></td><td><a href="#FT_LOAD_RENDER">FT_LOAD_RENDER</a></td><td><a href="#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td></tr>
-<tr><td><a href="#FT_STYLE_FLAG_ITALIC">FT_STYLE_FLAG_ITALIC</a></td><td><a href="#FT_LOAD_MONOCHROME">FT_LOAD_MONOCHROME</a></td><td><a href="#FT_FSTYPE_XXX">FT_FSTYPE_XXX</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_LOAD_LINEAR_DESIGN">FT_LOAD_LINEAR_DESIGN</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_SizeRec">FT_SizeRec</a></td><td><a href="#FT_LOAD_NO_SCALE">FT_LOAD_NO_SCALE</a></td><td><a href="#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td></tr>
-<tr><td><a href="#FT_Size_Metrics">FT_Size_Metrics</a></td><td><a href="#FT_LOAD_NO_HINTING">FT_LOAD_NO_HINTING</a></td><td></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_LOAD_NO_BITMAP">FT_LOAD_NO_BITMAP</a></td><td></td></tr>
-</table>
-
-
-<p>This section describes the most important public high-level API functions of FreeType&nbsp;2.</p>
-
-<div class="section">
-<h3 id="FT_Library">FT_Library</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_LibraryRec_ *<b>FT_Library</b>;
-</pre>
-
-<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>In multi-threaded applications it is easiest to use one &lsquo;FT_Library&rsquo; object per thread. In case this is too cumbersome, a single &lsquo;FT_Library&rsquo; object across threads is possible also (since FreeType version 2.5.6), as long as a mutex lock is used around <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> and <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-
-<h4>note</h4>
-<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>. If you need reference-counting (cf. <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>), use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> and <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face">FT_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_* <b>FT_Face</b>;
-</pre>
-
-<p>A handle to a typographic face object. A face object models a given typeface, in a given style.</p>
-
-<h4>note</h4>
-<p>A 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 filepath 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>
-<p>An &lsquo;FT_Face&rsquo; object can only be safely used from one thread at a time. Similarly, creation and destruction of &lsquo;FT_Face&rsquo; with the same <a href="ft2-base_interface.html#FT_Library">FT_Library</a> object can only be done from one thread at a time. On the other hand, functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> and its siblings are thread-safe and do not need the lock to be held as long as the same &lsquo;FT_Face&rsquo; object is not used from multiple threads at the same time.</p>
-
-<h4>also</h4>
-<p>See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the publicly accessible fields of a given face object.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size">FT_Size</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_* <b>FT_Size</b>;
-</pre>
-
-<p>A handle to an object that models a face scaled to a given character size.</p>
-
-<h4>note</h4>
-<p>An <a href="ft2-base_interface.html#FT_Face">FT_Face</a> has one <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 that in turn 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>
-
-<h4>also</h4>
-<p>See <a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a> for the publicly accessible fields of a given size object.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GlyphSlot">FT_GlyphSlot</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_* <b>FT_GlyphSlot</b>;
-</pre>
-
-<p>A handle to a given &lsquo;glyph slot&rsquo;. A slot is a container that can hold any 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>
-
-<h4>also</h4>
-<p>See <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> for the publicly accessible glyph fields.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CharMap">FT_CharMap</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_* <b>FT_CharMap</b>;
-</pre>
-
-<p>A handle to a character map (usually abbreviated to &lsquo;charmap&rsquo;). 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;, providing the data 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>
-
-<h4>note</h4>
-<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. If there is no Unicode charmap, FreeType doesn't set an &lsquo;active&rsquo; charmap.</p>
-
-<h4>also</h4>
-<p>See <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> for the publicly accessible fields of a given character map.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Encoding">FT_Encoding</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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_NONE">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_MS_SYMBOL">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_UNICODE">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_SJIS">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_PRC">FT_ENCODING_PRC</a>, 'g', 'b', ' ', ' ' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_ENCODING_BIG5">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_WANSUNG">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_JOHAB">FT_ENCODING_JOHAB</a>, 'j', 'o', 'h', 'a' ),
-
- /* for backward compatibility */
- FT_ENCODING_GB2312 = <a href="ft2-base_interface.html#FT_ENCODING_PRC">FT_ENCODING_PRC</a>,
- <a href="ft2-base_interface.html#FT_ENCODING_MS_SJIS">FT_ENCODING_MS_SJIS</a> = <a href="ft2-base_interface.html#FT_ENCODING_SJIS">FT_ENCODING_SJIS</a>,
- <a href="ft2-base_interface.html#FT_ENCODING_MS_GB2312">FT_ENCODING_MS_GB2312</a> = <a href="ft2-base_interface.html#FT_ENCODING_PRC">FT_ENCODING_PRC</a>,
- <a href="ft2-base_interface.html#FT_ENCODING_MS_BIG5">FT_ENCODING_MS_BIG5</a> = <a href="ft2-base_interface.html#FT_ENCODING_BIG5">FT_ENCODING_BIG5</a>,
- <a href="ft2-base_interface.html#FT_ENCODING_MS_WANSUNG">FT_ENCODING_MS_WANSUNG</a> = <a href="ft2-base_interface.html#FT_ENCODING_WANSUNG">FT_ENCODING_WANSUNG</a>,
- <a href="ft2-base_interface.html#FT_ENCODING_MS_JOHAB">FT_ENCODING_MS_JOHAB</a> = <a href="ft2-base_interface.html#FT_ENCODING_JOHAB">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_ADOBE_STANDARD">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_ADOBE_EXPERT">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_ADOBE_CUSTOM">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_ADOBE_LATIN_1">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_OLD_LATIN_2">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_APPLE_ROMAN">FT_ENCODING_APPLE_ROMAN</a>, 'a', 'r', 'm', 'n' )
-
- } <b>FT_Encoding</b>;
-
-
- /* these constants are deprecated; use the corresponding `<b>FT_Encoding</b>' */
- /* values instead */
-#define ft_encoding_none <a href="ft2-base_interface.html#FT_ENCODING_NONE">FT_ENCODING_NONE</a>
-#define ft_encoding_unicode <a href="ft2-base_interface.html#FT_ENCODING_UNICODE">FT_ENCODING_UNICODE</a>
-#define ft_encoding_symbol <a href="ft2-base_interface.html#FT_ENCODING_MS_SYMBOL">FT_ENCODING_MS_SYMBOL</a>
-#define ft_encoding_latin_1 <a href="ft2-base_interface.html#FT_ENCODING_ADOBE_LATIN_1">FT_ENCODING_ADOBE_LATIN_1</a>
-#define ft_encoding_latin_2 <a href="ft2-base_interface.html#FT_ENCODING_OLD_LATIN_2">FT_ENCODING_OLD_LATIN_2</a>
-#define ft_encoding_sjis <a href="ft2-base_interface.html#FT_ENCODING_SJIS">FT_ENCODING_SJIS</a>
-#define ft_encoding_gb2312 <a href="ft2-base_interface.html#FT_ENCODING_PRC">FT_ENCODING_PRC</a>
-#define ft_encoding_big5 <a href="ft2-base_interface.html#FT_ENCODING_BIG5">FT_ENCODING_BIG5</a>
-#define ft_encoding_wansung <a href="ft2-base_interface.html#FT_ENCODING_WANSUNG">FT_ENCODING_WANSUNG</a>
-#define ft_encoding_johab <a href="ft2-base_interface.html#FT_ENCODING_JOHAB">FT_ENCODING_JOHAB</a>
-
-#define ft_encoding_adobe_standard <a href="ft2-base_interface.html#FT_ENCODING_ADOBE_STANDARD">FT_ENCODING_ADOBE_STANDARD</a>
-#define ft_encoding_adobe_expert <a href="ft2-base_interface.html#FT_ENCODING_ADOBE_EXPERT">FT_ENCODING_ADOBE_EXPERT</a>
-#define ft_encoding_adobe_custom <a href="ft2-base_interface.html#FT_ENCODING_ADOBE_CUSTOM">FT_ENCODING_ADOBE_CUSTOM</a>
-#define ft_encoding_apple_roman <a href="ft2-base_interface.html#FT_ENCODING_APPLE_ROMAN">FT_ENCODING_APPLE_ROMAN</a>
-</pre>
-
-<p>An enumeration 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>
-
-<h4>note</h4>
-<p>Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, etc.).</p>
-<p>Other encodings might be defined in the future.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_ENCODING_NONE">FT_ENCODING_NONE</td><td class="desc">
-<p>The encoding value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_UNICODE">FT_ENCODING_UNICODE</td><td class="desc">
-<p>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>
-<p>For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_SYMBOL">FT_ENCODING_MS_SYMBOL</td><td class="desc">
-<p>Microsoft Symbol encoding, used to encode mathematical symbols and wingdings. For more information, see &lsquo;<a href="https://www.microsoft.com/typography/otspec/recom.htm">https://www.microsoft.com/typography/otspec/recom.htm</a>&rsquo;, &lsquo;<a href="http://www.kostis.net/charsets/symbol.htm">http://www.kostis.net/charsets/symbol.htm</a>&rsquo;, and &lsquo;<a href="http://www.kostis.net/charsets/wingding.htm">http://www.kostis.net/charsets/wingding.htm</a>&rsquo;.</p>
-<p>This encoding uses character codes from the PUA (Private Unicode Area) in the range U+F020-U+F0FF.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_SJIS">FT_ENCODING_SJIS</td><td class="desc">
-<p>Shift JIS encoding for Japanese. More info at &lsquo;<a href="https://en.wikipedia.org/wiki/Shift_JIS">https://en.wikipedia.org/wiki/Shift_JIS</a>&rsquo;. See note on multi-byte encodings below.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_PRC">FT_ENCODING_PRC</td><td class="desc">
-<p>Corresponds to encoding systems mainly for Simplified Chinese as used in People's Republic of China (PRC). The encoding layout is based on GB&nbsp;2312 and its supersets GBK and GB&nbsp;18030.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_BIG5">FT_ENCODING_BIG5</td><td class="desc">
-<p>Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_WANSUNG">FT_ENCODING_WANSUNG</td><td class="desc">
-<p>Corresponds to the Korean encoding system known as Extended Wansung (MS Windows code page 949). For more information see &lsquo;<a href="https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt">https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt</a>&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_JOHAB">FT_ENCODING_JOHAB</td><td class="desc">
-<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 Hangul character combinations.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_ADOBE_LATIN_1">FT_ENCODING_ADOBE_LATIN_1</td><td class="desc">
-<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><td class="val" id="FT_ENCODING_ADOBE_STANDARD">FT_ENCODING_ADOBE_STANDARD</td><td class="desc">
-<p>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><td class="val" id="FT_ENCODING_ADOBE_EXPERT">FT_ENCODING_ADOBE_EXPERT</td><td class="desc">
-<p>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><td class="val" id="FT_ENCODING_ADOBE_CUSTOM">FT_ENCODING_ADOBE_CUSTOM</td><td class="desc">
-<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><td class="val" id="FT_ENCODING_APPLE_ROMAN">FT_ENCODING_APPLE_ROMAN</td><td class="desc">
-<p>Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this 8-bit encoding, since older versions of Mac OS are able to use it.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_OLD_LATIN_2">FT_ENCODING_OLD_LATIN_2</td><td class="desc">
-<p>This value is deprecated and was neither used nor reported by FreeType. Don't use or test for it.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_SJIS">FT_ENCODING_MS_SJIS</td><td class="desc">
-<p>Same as FT_ENCODING_SJIS. Deprecated.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_GB2312">FT_ENCODING_MS_GB2312</td><td class="desc">
-<p>Same as FT_ENCODING_PRC. Deprecated.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_BIG5">FT_ENCODING_MS_BIG5</td><td class="desc">
-<p>Same as FT_ENCODING_BIG5. Deprecated.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_WANSUNG">FT_ENCODING_MS_WANSUNG</td><td class="desc">
-<p>Same as FT_ENCODING_WANSUNG. Deprecated.</p>
-</td></tr>
-<tr><td class="val" id="FT_ENCODING_MS_JOHAB">FT_ENCODING_MS_JOHAB</td><td class="desc">
-<p>Same as FT_ENCODING_JOHAB. Deprecated.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>By default, FreeType enables a Unicode charmap and tags it with FT_ENCODING_UNICODE when it is either provided or can be generated from PostScript glyph name dictionaries in the font file. All other encodings are considered legacy and tagged only if explicitly defined in the font file. Otherwise, FT_ENCODING_NONE is used.</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 &lsquo;TT_MAC_ID_ROMAN&rsquo; (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 that may be needed to be able to distinguish Apple encoding variants. See</p>
-<p><a href="https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt">https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt</a></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 &lsquo;TT_MAC_ID_ROMAN&rsquo; and the language ID (minus&nbsp;1) is &lsquo;TT_MAC_LANGID_GREEK&rsquo;, it is the Greek encoding, not Roman. &lsquo;TT_MAC_ID_ARABIC&rsquo; with &lsquo;TT_MAC_LANGID_FARSI&rsquo; means the Farsi variant the Arabic encoding.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ENC_TAG">FT_ENC_TAG</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FaceRec">FT_FaceRec</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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-module_management.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; /* face-specific auto-hinter data */
- <span class="keyword">void</span>* extensions; /* unused */
-
- <a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a> internal;
-
- /*@private end */
-
- } <b>FT_FaceRec</b>;
-</pre>
-
-<p>FreeType root face class structure. A face object models a typeface in a font file.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="num_faces">num_faces</td><td class="desc">
-<p>The number of faces in the font file. Some font formats can have multiple faces in a single font file.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value&nbsp;0). They are set to&nbsp;0 if there is only one face in the font file.</p>
-<p>[Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, holding the named instance index for the current face index (starting with value&nbsp;1; value&nbsp;0 indicates font access without a named instance). For non-variation fonts, bits 16-30 are ignored. If we have the third named instance of face&nbsp;4, say, &lsquo;face_index&rsquo; is set to 0x00030004.</p>
-<p>Bit 31 is always zero (this is, &lsquo;face_index&rsquo; is always a positive value).</p>
-<p>[Since 2.9] Changing the design coordinates with <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> or <a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a> does not influence the named instance index value (only <a href="ft2-multiple_masters.html#FT_Set_Named_Instance">FT_Set_Named_Instance</a> does that).</p>
-</td></tr>
-<tr><td class="val" id="face_flags">face_flags</td><td class="desc">
-<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><td class="val" id="style_flags">style_flags</td><td class="desc">
-<p>The lower 16&nbsp;bits contain 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>
-<p>[Since 2.6.1] Bits 16-30 hold the number of named instances available for the current face if we have a GX or OpenType variation (sub)font. Bit 31 is always zero (this is, &lsquo;style_flags&rsquo; is always a positive value). Note that a variation font has always at least one named instance, namely the default instance.</p>
-</td></tr>
-<tr><td class="val" id="num_glyphs">num_glyphs</td><td class="desc">
-<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 (not in an SFNT wrapper) this value gives the highest CID used in the font.</p>
-</td></tr>
-<tr><td class="val" id="family_name">family_name</td><td class="desc">
-<p>The face's family name. This is an ASCII string, usually in English, that 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>
-<p>In case the font doesn't provide a specific family name entry, FreeType tries to synthesize one, deriving it from other name entries.</p>
-</td></tr>
-<tr><td class="val" id="style_name">style_name</td><td class="desc">
-<p>The face's style name. This is an ASCII string, usually in English, that 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><td class="val" id="num_fixed_sizes">num_fixed_sizes</td><td class="desc">
-<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><td class="val" id="available_sizes">available_sizes</td><td class="desc">
-<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>
-<p>Note that FreeType tries to sanitize the strike data since they are sometimes sloppy or incorrect, but this can easily fail.</p>
-</td></tr>
-<tr><td class="val" id="num_charmaps">num_charmaps</td><td class="desc">
-<p>The number of charmaps in the face.</p>
-</td></tr>
-<tr><td class="val" id="charmaps">charmaps</td><td class="desc">
-<p>An array of the charmaps of the face.</p>
-</td></tr>
-<tr><td class="val" id="generic">generic</td><td class="desc">
-<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><td class="val" id="bbox">bbox</td><td class="desc">
-<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;maximum ascender&rsquo;, and &lsquo;bbox.yMin&rsquo; as the &lsquo;minimum 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><td class="val" id="units_per_EM">units_per_EM</td><td class="desc">
-<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><td class="val" id="ascender">ascender</td><td class="desc">
-<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><td class="val" id="descender">descender</td><td class="desc">
-<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 negative for values below the baseline. Only relevant for scalable formats.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>This value is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats.</p>
-<p>If you want the global glyph height, use &lsquo;ascender - descender&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="max_advance_width">max_advance_width</td><td class="desc">
-<p>The maximum advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats.</p>
-</td></tr>
-<tr><td class="val" id="max_advance_height">max_advance_height</td><td class="desc">
-<p>The maximum 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><td class="val" id="underline_position">underline_position</td><td class="desc">
-<p>The position, in font units, of the underline line for this face. It is the center of the underlining stem. Only relevant for scalable formats.</p>
-</td></tr>
-<tr><td class="val" id="underline_thickness">underline_thickness</td><td class="desc">
-<p>The thickness, in font units, of the underline for this face. Only relevant for scalable formats.</p>
-</td></tr>
-<tr><td class="val" id="glyph">glyph</td><td class="desc">
-<p>The face's associated glyph slot(s).</p>
-</td></tr>
-<tr><td class="val" id="size">size</td><td class="desc">
-<p>The current active size for this face.</p>
-</td></tr>
-<tr><td class="val" id="charmap">charmap</td><td class="desc">
-<p>The current active charmap for this face.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-<p>For an OpenType variation font, the values of the following fields can change after a call to <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: &lsquo;ascender&rsquo;, &lsquo;descender&rsquo;, &lsquo;height&rsquo;, &lsquo;underline_position&rsquo;, and &lsquo;underline_thickness&rsquo;.</p>
-<p>Especially for TrueType fonts see also the documentation for <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_HORIZONTAL</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_HORIZONTAL">FT_FACE_FLAG_HORIZONTAL</a> )
-</pre>
-
-<p>A macro that returns true whenever a face object contains horizontal metrics (this is true for all font formats though).</p>
-
-<h4>also</h4>
-<p><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a> can be used to check for vertical metrics.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_VERTICAL">FT_HAS_VERTICAL</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_VERTICAL</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_VERTICAL">FT_FACE_FLAG_VERTICAL</a> )
-</pre>
-
-<p>A macro that returns true whenever a face object contains real vertical metrics (and not only synthesized ones).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_KERNING">FT_HAS_KERNING</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_KERNING</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_KERNING">FT_FACE_FLAG_KERNING</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_FIXED_SIZES</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_FIXED_SIZES">FT_FACE_FLAG_FIXED_SIZES</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_GLYPH_NAMES</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_GLYPH_NAMES">FT_FACE_FLAG_GLYPH_NAMES</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_COLOR">FT_HAS_COLOR</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_COLOR</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_COLOR">FT_FACE_FLAG_COLOR</a> )
-</pre>
-
-<p>A macro that returns true whenever a face object contains tables for color glyphs.</p>
-
-<h4>since</h4>
-<p>2.5.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_MULTIPLE_MASTERS</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_MULTIPLE_MASTERS">FT_FACE_FLAG_MULTIPLE_MASTERS</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_SFNT">FT_IS_SFNT</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_SFNT</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_SFNT">FT_FACE_FLAG_SFNT</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_SCALABLE">FT_IS_SCALABLE</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_SCALABLE</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_SCALABLE">FT_FACE_FLAG_SCALABLE</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_FIXED_WIDTH</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_FIXED_WIDTH">FT_FACE_FLAG_FIXED_WIDTH</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_CID_KEYED">FT_IS_CID_KEYED</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_CID_KEYED</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_CID_KEYED">FT_FACE_FLAG_CID_KEYED</a> )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_TRICKY">FT_IS_TRICKY</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_TRICKY</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_TRICKY">FT_FACE_FLAG_TRICKY</a> )
-</pre>
-
-<p>A macro that returns true whenever a face represents a &lsquo;tricky&rsquo; font. See the discussion of <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_TRICKY</a> for more details.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_NAMED_INSTANCE">FT_IS_NAMED_INSTANCE</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_NAMED_INSTANCE</b>( face ) \
- ( (face)-&gt;face_index &amp; 0x7FFF0000L )
-</pre>
-
-<p>A macro that returns true whenever a face object is a named instance of a GX or OpenType variation font.</p>
-<p>[Since 2.9] Changing the design coordinates with <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> or <a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a> does not influence the return value of this macro (only <a href="ft2-multiple_masters.html#FT_Set_Named_Instance">FT_Set_Named_Instance</a> does that).</p>
-
-<h4>since</h4>
-<p>2.7</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IS_VARIATION">FT_IS_VARIATION</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_IS_VARIATION</b>( face ) \
- ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_VARIATION">FT_FACE_FLAG_VARIATION</a> )
-</pre>
-
-<p>A macro that returns true whenever a face object has been altered by <a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a>, <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a>, or <a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a>.</p>
-
-<h4>since</h4>
-<p>2.9</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SizeRec">FT_SizeRec</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>FreeType root size class structure. A size object models a face object at a given size.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>Handle to the parent face object.</p>
-</td></tr>
-<tr><td class="val" id="generic">generic</td><td class="desc">
-<p>A typeless pointer, unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each size object.</p>
-</td></tr>
-<tr><td class="val" id="metrics">metrics</td><td class="desc">
-<p>Metrics for this size object. This field is read-only.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size_Metrics">FT_Size_Metrics</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>The size metrics structure gives the metrics of a size object.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="x_ppem">x_ppem</td><td class="desc">
-<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><td class="val" id="y_ppem">y_ppem</td><td class="desc">
-<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><td class="val" id="x_scale">x_scale</td><td class="desc">
-<p>A 16.16 fractional scaling value to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
-</td></tr>
-<tr><td class="val" id="y_scale">y_scale</td><td class="desc">
-<p>A 16.16 fractional scaling value to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
-</td></tr>
-<tr><td class="val" id="ascender">ascender</td><td class="desc">
-<p>The ascender in 26.6 fractional pixels, rounded up to an integer value. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr><td class="val" id="descender">descender</td><td class="desc">
-<p>The descender in 26.6 fractional pixels, rounded down to an integer value. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The height in 26.6 fractional pixels, rounded to an integer value. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr><td class="val" id="max_advance">max_advance</td><td class="desc">
-<p>The maximum advance width in 26.6 fractional pixels, rounded to an integer value. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>. Some values like ascender or descender are rounded for historical reasons; more precise values (for outline fonts) can be derived by scaling the corresponding <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> values manually, with code similar to the following.</p>
-<pre class="colored">
- scaled_ascender = FT_MulFix( face-&gt;ascender,
- size_metrics-&gt;y_scale );
-</pre>
-<p>Note that due to glyph hinting and the selected rendering mode these values are usually not exact; consequently, they must be treated as unreliable with an error margin of at least one pixel!</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 &lsquo;FT_Size_Metrics&rsquo; structure is valid for bitmap fonts also.</p>
-<p><b>TrueType</b> <b>fonts</b> <b>with</b> <b>native</b> <b>bytecode</b> <b>hinting</b></p>
-<p>All applications that handle TrueType fonts with native hinting must be aware that TTFs expect different rounding of vertical font dimensions. The application has to cater for this, especially if it wants to rely on a TTF's vertical data (for example, to properly align box characters vertically).</p>
-<p>Only the application knows <i>in</i> <i>advance</i> that it is going to use native hinting for TTFs! FreeType, on the other hand, selects the hinting mode not at the time of creating an <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object but much later, namely while calling <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-<p>Here is some pseudo code that illustrates a possible solution.</p>
-<pre class="colored">
- font_format = FT_Get_Font_Format( face );
-
- if ( !strcmp( font_format, "TrueType" ) &amp;&amp;
- do_native_bytecode_hinting )
- {
- ascender = ROUND( FT_MulFix( face-&gt;ascender,
- size_metrics-&gt;y_scale ) );
- descender = ROUND( FT_MulFix( face-&gt;descender,
- size_metrics-&gt;y_scale ) );
- }
- else
- {
- ascender = size_metrics-&gt;ascender;
- descender = size_metrics-&gt;descender;
- }
-
- height = size_metrics-&gt;height;
- max_advance = size_metrics-&gt;max_advance;
-</pre>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GlyphSlotRec">FT_GlyphSlotRec</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the FreeType library instance this slot belongs to.</p>
-</td></tr>
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the parent face object.</p>
-</td></tr>
-<tr><td class="val" id="next">next</td><td class="desc">
-<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><td class="val" id="generic">generic</td><td class="desc">
-<p>A typeless pointer unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object.</p>
-</td></tr>
-<tr><td class="val" id="metrics">metrics</td><td class="desc">
-<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><td class="val" id="linearHoriAdvance">linearHoriAdvance</td><td class="desc">
-<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><td class="val" id="linearVertAdvance">linearVertAdvance</td><td class="desc">
-<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><td class="val" id="advance">advance</td><td class="desc">
-<p>This shorthand is, depending on <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a>, the transformed (hinted) advance width for the glyph, in 26.6 fractional pixel format. As specified with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a>, it uses either the &lsquo;horiAdvance&rsquo; or the &lsquo;vertAdvance&rsquo; value of &lsquo;metrics&rsquo; field.</p>
-</td></tr>
-<tr><td class="val" id="format">format</td><td class="desc">
-<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 other values are possible.</p>
-</td></tr>
-<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
-<p>This field is used as a bitmap descriptor. 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><td class="val" id="bitmap_left">bitmap_left</td><td class="desc">
-<p>The bitmap's left bearing expressed in integer pixels.</p>
-</td></tr>
-<tr><td class="val" id="bitmap_top">bitmap_top</td><td class="desc">
-<p>The bitmap's top bearing expressed in integer pixels. 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><td class="val" id="outline">outline</td><td class="desc">
-<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, emboldened, etc. However, it must not be freed.</p>
-</td></tr>
-<tr><td class="val" id="num_subglyphs">num_subglyphs</td><td class="desc">
-<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.</p>
-</td></tr>
-<tr><td class="val" id="subglyphs">subglyphs</td><td class="desc">
-<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><td class="val" id="control_data">control_data</td><td class="desc">
-<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; it is currently internal to FreeType.</p>
-</td></tr>
-<tr><td class="val" id="control_len">control_len</td><td class="desc">
-<p>This is the length in bytes of the control data. Currently internal to FreeType.</p>
-</td></tr>
-<tr><td class="val" id="other">other</td><td class="desc">
-<p>Reserved.</p>
-</td></tr>
-<tr><td class="val" id="lsb_delta">lsb_delta</td><td class="desc">
-<p>The difference between hinted and unhinted left side bearing while auto-hinting is active. Zero otherwise.</p>
-</td></tr>
-<tr><td class="val" id="rsb_delta">rsb_delta</td><td class="desc">
-<p>The difference between hinted and unhinted right side bearing while auto-hinting is active. Zero otherwise.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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). [Since 2.9] The prospective bitmap metrics are calculated according to <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> and other flags even for the outline glyph, even if <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> is not set.</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 searches 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 converting 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>
-<p>Here is a small pseudo code fragment that shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo; to do fractional positioning of glyphs:</p>
-<pre class="colored">
- FT_GlyphSlot slot = face-&gt;glyph;
- FT_Pos origin_x = 0;
-
-
- for all glyphs do
- &lt;load glyph with `FT_Load_Glyph'&gt;
-
- FT_Outline_Translate( slot-&gt;outline, origin_x &amp; 63, 0 );
-
- &lt;save glyph image, or render glyph, or ...&gt;
-
- &lt;compute kern between current and next glyph
- and add it to `origin_x'&gt;
-
- origin_x += slot-&gt;advance.x;
- origin_x += slot-&gt;rsb_delta - slot-&gt;lsb_delta;
- endfor
-</pre>
-<p>Here is another small pseudo code fragment that shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo; to improve integer positioning of glyphs:</p>
-<pre class="colored">
- FT_GlyphSlot slot = face-&gt;glyph;
- 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 - slot-&gt;lsb_delta &gt; 32 )
- origin_x -= 64;
- else if ( prev_rsb_delta - slot-&gt;lsb_delta &lt; -31 )
- origin_x += 64;
-
- prev_rsb_delta = slot-&gt;rsb_delta;
-
- &lt;save glyph image, or render glyph, or ...&gt;
-
- origin_x += slot-&gt;advance.x;
- endfor
-</pre>
-<p>If you use strong auto-hinting, you <b>must</b> apply these delta values! Otherwise you will experience far too large inter-glyph spacing at small rendering sizes in most cases. Note that it doesn't harm to use the above code for other hinting modes also, since the delta values are zero then.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Metrics">FT_Glyph_Metrics</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>A structure 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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The glyph's width.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The glyph's height.</p>
-</td></tr>
-<tr><td class="val" id="horiBearingX">horiBearingX</td><td class="desc">
-<p>Left side bearing for horizontal layout.</p>
-</td></tr>
-<tr><td class="val" id="horiBearingY">horiBearingY</td><td class="desc">
-<p>Top side bearing for horizontal layout.</p>
-</td></tr>
-<tr><td class="val" id="horiAdvance">horiAdvance</td><td class="desc">
-<p>Advance width for horizontal layout.</p>
-</td></tr>
-<tr><td class="val" id="vertBearingX">vertBearingX</td><td class="desc">
-<p>Left side bearing for vertical layout.</p>
-</td></tr>
-<tr><td class="val" id="vertBearingY">vertBearingY</td><td class="desc">
-<p>Top side bearing for vertical layout. Larger positive values mean further below the vertical glyph origin.</p>
-</td></tr>
-<tr><td class="val" id="vertAdvance">vertAdvance</td><td class="desc">
-<p>Advance height for vertical layout. Positive values mean the glyph has a positive advance downward.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>If not disabled with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a>, the values represent dimensions of the hinted glyph (in case hinting is applicable).</p>
-<p>Stroking a glyph with an outside border does not increase &lsquo;horiAdvance&rsquo; or &lsquo;vertAdvance&rsquo;; you have to manually adjust these values to account for the added width and height.</p>
-<p>FreeType doesn't use the &lsquo;VORG&rsquo; table data for CFF fonts because it doesn't have an interface to quickly retrieve the glyph height. The y&nbsp;coordinate of the vertical origin can be simply computed as &lsquo;vertBearingY + height&rsquo; after loading a glyph.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SubGlyph">FT_SubGlyph</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SubGlyphRec_* <b>FT_SubGlyph</b>;
-</pre>
-
-<p>The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites).</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap_Size">FT_Bitmap_Size</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The vertical distance, in pixels, between two consecutive baselines. It is always positive.</p>
-</td></tr>
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The average width, in pixels, of all glyphs in the strike.</p>
-</td></tr>
-<tr><td class="val" id="size">size</td><td class="desc">
-<p>The nominal size of the strike in 26.6 fractional points. This field is not very useful.</p>
-</td></tr>
-<tr><td class="val" id="x_ppem">x_ppem</td><td class="desc">
-<p>The horizontal ppem (nominal width) in 26.6 fractional pixels.</p>
-</td></tr>
-<tr><td class="val" id="y_ppem">y_ppem</td><td class="desc">
-<p>The vertical ppem (nominal height) in 26.6 fractional pixels.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>Windows FNT: The nominal size given in a FNT font is not reliable. If the driver finds it incorrect, it sets &lsquo;size&rsquo; to some calculated values, and &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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Init_FreeType">FT_Init_FreeType</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.</p>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="alibrary">alibrary</td><td class="desc">
-<p>A handle to a new library object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>In case you want to provide your own memory allocating routines, use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> instead, followed by a call to <a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a> (or a series of calls to <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>) and <a href="ft2-module_management.html#FT_Set_Default_Properties">FT_Set_Default_Properties</a>.</p>
-<p>See the documentation of <a href="ft2-base_interface.html#FT_Library">FT_Library</a> and <a href="ft2-base_interface.html#FT_Face">FT_Face</a> for multi-threading issues.</p>
-<p>If you need reference-counting (cf. <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>), use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> and <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a>.</p>
-<p>If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is set, this function reads the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable to control driver properties. See section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; for more.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_FreeType">FT_Done_FreeType</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Destroy a given FreeType library object and all of its children, including resources, drivers, faces, sizes, etc.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the target library object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_New_Face">FT_New_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Call <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font by its pathname.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="pathname">pathname</td><td class="desc">
-<p>A path to the font file.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for a detailed description of this parameter.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<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.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Use <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> to destroy the created <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object (along with its slot and sizes).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_Face">FT_Done_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Discard a given face object, as well as all of its child slots and sizes.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>See the discussion of reference counters in the description of <a href="ft2-base_interface.html#FT_Reference_Face">FT_Reference_Face</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Reference_Face">FT_Reference_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Reference_Face</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-</pre>
-
-<p>A counter gets initialized to&nbsp;1 at the time an <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure is created. This function increments the counter. <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> then only destroys a face if the counter is&nbsp;1, otherwise it simply decrements the counter.</p>
-<p>This function helps in managing life-cycles of structures that reference <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>since</h4>
-<p>2.4.2</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_New_Memory_Face">FT_New_Memory_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Call <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font that has been loaded into memory.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="file_base">file_base</td><td class="desc">
-<p>A pointer to the beginning of the font data.</p>
-</td></tr>
-<tr><td class="val" id="file_size">file_size</td><td class="desc">
-<p>The size of the memory chunk used by the font data.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for a detailed description of this parameter.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<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.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>You must not deallocate the memory before calling <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_Properties">FT_Face_Properties</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Face_Properties</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_properties,
- <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a>* properties );
-</pre>
-
-<p>Set or override certain (library or module-wide) properties on a face-by-face basis. Useful for finer-grained control and avoiding locks on shared structures (threads can modify their own faces as they see fit).</p>
-<p>Contrary to <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a>, this function uses <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> so that you can pass multiple properties to the target face in one call. Note that only a subset of the available properties can be controlled.</p>
-<p>* <a href="ft2-parameter_tags.html#FT_PARAM_TAG_STEM_DARKENING">FT_PARAM_TAG_STEM_DARKENING</a> (stem darkening, corresponding to the property &lsquo;no-stem-darkening&rsquo; provided by the &lsquo;autofit&rsquo;, &lsquo;cff&rsquo;, &lsquo;type1&rsquo;, and &lsquo;t1cid&rsquo; modules; see <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a>).</p>
-<p>* <a href="ft2-parameter_tags.html#FT_PARAM_TAG_LCD_FILTER_WEIGHTS">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a> (LCD filter weights, corresponding to function <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a>).</p>
-<p>* <a href="ft2-parameter_tags.html#FT_PARAM_TAG_RANDOM_SEED">FT_PARAM_TAG_RANDOM_SEED</a> (seed value for the CFF, Type&nbsp;1, and CID &lsquo;random&rsquo; operator, corresponding to the &lsquo;random-seed&rsquo; property provided by the &lsquo;cff&rsquo;, &lsquo;type1&rsquo;, and &lsquo;t1cid&rsquo; modules; see <a href="ft2-properties.html#random-seed">random-seed</a>).</p>
-<p>Pass NULL as &lsquo;data&rsquo; in <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> for a given tag to reset the option and use the library or module default again.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="num_properties">num_properties</td><td class="desc">
-<p>The number of properties that follow.</p>
-</td></tr>
-<tr><td class="val" id="properties">properties</td><td class="desc">
-<p>A handle to an <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> array with &lsquo;num_properties&rsquo; elements.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Here an example that sets three properties. You must define FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples work.</p>
-<pre class="colored">
- FT_Parameter property1;
- FT_Bool darken_stems = 1;
-
- FT_Parameter property2;
- FT_LcdFiveTapFilter custom_weight =
- { 0x11, 0x44, 0x56, 0x44, 0x11 };
-
- FT_Parameter property3;
- FT_Int32 random_seed = 314159265;
-
- FT_Parameter properties[3] = { property1,
- property2,
- property3 };
-
-
- property1.tag = FT_PARAM_TAG_STEM_DARKENING;
- property1.data = &amp;darken_stems;
-
- property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
- property2.data = custom_weight;
-
- property3.tag = FT_PARAM_TAG_RANDOM_SEED;
- property3.data = &amp;random_seed;
-
- FT_Face_Properties( face, 3, properties );
-</pre>
-<p>The next example resets a single property to its default value.</p>
-<pre class="colored">
- FT_Parameter property;
-
-
- property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
- property.data = NULL;
-
- FT_Face_Properties( face, 1, &amp;property );
-</pre>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Open_Face">FT_Open_Face</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="args">args</td><td class="desc">
-<p>A pointer to an &lsquo;FT_Open_Args&rsquo; structure that must be filled by the caller.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value&nbsp;0). Set it to&nbsp;0 if there is only one face in the font file.</p>
-<p>[Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, specifying the named instance index for the current face index (starting with value&nbsp;1; value&nbsp;0 makes FreeType ignore named instances). For non-variation fonts, bits 16-30 are ignored. Assuming that you want to access the third named instance in face&nbsp;4, &lsquo;face_index&rsquo; should be set to 0x00030004. If you want to access face&nbsp;4 without variation handling, simply set &lsquo;face_index&rsquo; to value&nbsp;4.</p>
-<p>&lsquo;FT_Open_Face&rsquo; and its siblings can be used to quickly check whether the font format of a given font resource is supported by FreeType. In general, if the &lsquo;face_index&rsquo; argument is negative, the function's return value is&nbsp;0 if the font format is recognized, or non-zero otherwise. The function allocates a more or less empty face handle in &lsquo;*aface&rsquo; (if &lsquo;aface&rsquo; isn't NULL); the only two useful fields in this special case are &lsquo;face-&gt;num_faces&rsquo; and &lsquo;face-&gt;style_flags&rsquo;. For any negative value of &lsquo;face_index&rsquo;, &lsquo;face-&gt;num_faces&rsquo; gives the number of faces within the font file. For the negative value &lsquo;-(N+1)&rsquo; (with &lsquo;N&rsquo; a non-negative 16-bit value), bits 16-30 in &lsquo;face-&gt;style_flags&rsquo; give the number of named instances in face &lsquo;N&rsquo; if we have a variation font (or zero otherwise). 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>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<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.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object that can be accessed directly through &lsquo;face-&gt;glyph&rsquo;.</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>
-<p>One <a href="ft2-base_interface.html#FT_Library">FT_Library</a> instance can have multiple face objects, this is, <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> and its siblings can be called multiple times using the same &lsquo;library&rsquo; argument.</p>
-<p>See the discussion of reference counters in the description of <a href="ft2-base_interface.html#FT_Reference_Face">FT_Reference_Face</a>.</p>
-<p>To loop over all faces, use code similar to the following snippet (omitting the error handling).</p>
-<pre class="colored">
- ...
- FT_Face face;
- FT_Long i, num_faces;
-
-
- error = FT_Open_Face( library, args, -1, &amp;face );
- if ( error ) { ... }
-
- num_faces = face-&gt;num_faces;
- FT_Done_Face( face );
-
- for ( i = 0; i &lt; num_faces; i++ )
- {
- ...
- error = FT_Open_Face( library, args, i, &amp;face );
- ...
- FT_Done_Face( face );
- ...
- }
-</pre>
-<p>To loop over all valid values for &lsquo;face_index&rsquo;, use something similar to the following snippet, again without error handling. The code accesses all faces immediately (thus only a single call of &lsquo;FT_Open_Face&rsquo; within the do-loop), with and without named instances.</p>
-<pre class="colored">
- ...
- FT_Face face;
-
- FT_Long num_faces = 0;
- FT_Long num_instances = 0;
-
- FT_Long face_idx = 0;
- FT_Long instance_idx = 0;
-
-
- do
- {
- FT_Long id = ( instance_idx &lt;&lt; 16 ) + face_idx;
-
-
- error = FT_Open_Face( library, args, id, &amp;face );
- if ( error ) { ... }
-
- num_faces = face-&gt;num_faces;
- num_instances = face-&gt;style_flags &gt;&gt; 16;
-
- ...
-
- FT_Done_Face( face );
-
- if ( instance_idx &lt; num_instances )
- instance_idx++;
- else
- {
- face_idx++;
- instance_idx = 0;
- }
-
- } while ( face_idx &lt; num_faces )
-</pre>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Open_Args">FT_Open_Args</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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-module_management.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>
-
-<p>A structure to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions <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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="flags">flags</td><td class="desc">
-<p>A set of bit flags indicating how to use the structure.</p>
-</td></tr>
-<tr><td class="val" id="memory_base">memory_base</td><td class="desc">
-<p>The first byte of the file in memory.</p>
-</td></tr>
-<tr><td class="val" id="memory_size">memory_size</td><td class="desc">
-<p>The size in bytes of the file in memory.</p>
-</td></tr>
-<tr><td class="val" id="pathname">pathname</td><td class="desc">
-<p>A pointer to an 8-bit file pathname.</p>
-</td></tr>
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>A handle to a source stream object.</p>
-</td></tr>
-<tr><td class="val" id="driver">driver</td><td class="desc">
-<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 for opening the face. If set to NULL, FreeType tries to load the face with each one of the drivers in its list.</p>
-</td></tr>
-<tr><td class="val" id="num_params">num_params</td><td class="desc">
-<p>The number of extra parameters.</p>
-</td></tr>
-<tr><td class="val" id="params">params</td><td class="desc">
-<p>Extra parameters passed to the font driver when opening a new face.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The stream type is determined by the contents of &lsquo;flags&rsquo; that are tested in the following order by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>:</p>
-<p>If the <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> 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 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 <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> bit is set, assume that a custom input stream &lsquo;stream&rsquo; is used.</p>
-<p>Otherwise, if the <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> bit is set, assume that this is a normal file and use &lsquo;pathname&rsquo; to open it.</p>
-<p>If the <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> 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 <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> 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 backward compatibility. In other words, applications should treat them as read-only.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Parameter">FT_Parameter</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>A simple structure to pass more or less generic parameters to <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> and <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a>.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="tag">tag</td><td class="desc">
-<p>A four-byte identification tag.</p>
-</td></tr>
-<tr><td class="val" id="data">data</td><td class="desc">
-<p>A pointer to the parameter data.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The ID and function of parameters are driver-specific. See section &lsquo;<a href="ft2-parameter_tags.html#parameter_tags">Parameter Tags</a>&rsquo; for more information.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Attach_File">FT_Attach_File</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Call <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a> to attach a file.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>The target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="filepathname">filepathname</td><td class="desc">
-<p>The pathname.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Attach_Stream">FT_Attach_Stream</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>The target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="parameters">parameters</td><td class="desc">
-<p>A pointer to <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a> that must be filled by the caller.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 or stream attachments.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Char_Size">FT_Set_Char_Size</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Call <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in points).</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="char_width">char_width</td><td class="desc">
-<p>The nominal width, in 26.6 fractional points.</p>
-</td></tr>
-<tr><td class="val" id="char_height">char_height</td><td class="desc">
-<p>The nominal height, in 26.6 fractional points.</p>
-</td></tr>
-<tr><td class="val" id="horz_resolution">horz_resolution</td><td class="desc">
-<p>The horizontal resolution in dpi.</p>
-</td></tr>
-<tr><td class="val" id="vert_resolution">vert_resolution</td><td class="desc">
-<p>The vertical resolution in dpi.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>While this function allows fractional points as input values, the resulting ppem value for the given resolution is always rounded to the nearest integer.</p>
-<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>
-<p>Don't use this function if you are using the FreeType cache API.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Call <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in pixels).</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="pixel_width">pixel_width</td><td class="desc">
-<p>The nominal width, in pixels.</p>
-</td></tr>
-<tr><td class="val" id="pixel_height">pixel_height</td><td class="desc">
-<p>The nominal height, in pixels.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>You should not rely on the resulting glyphs matching or being constrained to this pixel size. Refer to <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to understand how requested sizes relate to actual sizes.</p>
-<p>Don't use this function if you are using the FreeType cache API.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Request_Size">FT_Request_Size</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Resize the scale of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object in a face.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="req">req</td><td class="desc">
-<p>A pointer to a <a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a>.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>The relation between the requested size and the resulting glyph size is dependent entirely on how the size is defined in the source face. The font designer chooses the final size of each glyph relative to this size. For more information refer to &lsquo;<a href="https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html">https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html</a>&rsquo;.</p>
-<p>Contrary to <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, this function doesn't have special code to normalize zero-valued widths, heights, or resolutions (which lead to errors in most cases).</p>
-<p>Don't use this function if you are using the FreeType cache API.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Select_Size">FT_Select_Size</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Select a bitmap strike. To be more precise, this function sets the scaling factors of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object in a face so that bitmaps from this particular strike are taken by <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> and friends.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="strike_index">strike_index</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>For bitmaps embedded in outline fonts it is common that only a subset of the available glyphs at a given ppem value is available. FreeType silently uses outlines if there is no bitmap for a given glyph index.</p>
-<p>For GX and OpenType variation fonts, a bitmap strike makes sense only if the default instance is active (this is, no glyph variation takes place); otherwise, FreeType simply ignores bitmap strikes. The same is true for all named instances that are different from the default instance.</p>
-<p>Don't use this function if you are using the FreeType cache API.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size_Request_Type">FT_Size_Request_Type</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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_NOMINAL">FT_SIZE_REQUEST_TYPE_NOMINAL</a>,
- <a href="ft2-base_interface.html#FT_SIZE_REQUEST_TYPE_REAL_DIM">FT_SIZE_REQUEST_TYPE_REAL_DIM</a>,
- <a href="ft2-base_interface.html#FT_SIZE_REQUEST_TYPE_BBOX">FT_SIZE_REQUEST_TYPE_BBOX</a>,
- <a href="ft2-base_interface.html#FT_SIZE_REQUEST_TYPE_CELL">FT_SIZE_REQUEST_TYPE_CELL</a>,
- <a href="ft2-base_interface.html#FT_SIZE_REQUEST_TYPE_SCALES">FT_SIZE_REQUEST_TYPE_SCALES</a>,
-
- FT_SIZE_REQUEST_TYPE_MAX
-
- } <b>FT_Size_Request_Type</b>;
-</pre>
-
-<p>An enumeration type that lists the supported size request types, i.e., what input size (in font units) maps to the requested output size (in pixels, as computed from the arguments of <a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a>).</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_SIZE_REQUEST_TYPE_NOMINAL">FT_SIZE_REQUEST_TYPE_NOMINAL</td><td class="desc">
-<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>
-<p>This is the standard scaling found in most applications. In particular, use this size request type for TrueType fonts if they provide optical scaling or something similar. Note, however, that &lsquo;units_per_EM&rsquo; is a rather abstract value which bears no relation to the actual size of the glyphs in a font.</p>
-</td></tr>
-<tr><td class="val" id="FT_SIZE_REQUEST_TYPE_REAL_DIM">FT_SIZE_REQUEST_TYPE_REAL_DIM</td><td class="desc">
-<p>The real dimension. The sum of the &lsquo;ascender&rsquo; and (minus of) the &lsquo;descender&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> is used to determine both scaling values.</p>
-</td></tr>
-<tr><td class="val" id="FT_SIZE_REQUEST_TYPE_BBOX">FT_SIZE_REQUEST_TYPE_BBOX</td><td class="desc">
-<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><td class="val" id="FT_SIZE_REQUEST_TYPE_CELL">FT_SIZE_REQUEST_TYPE_CELL</td><td class="desc">
-<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><td class="val" id="FT_SIZE_REQUEST_TYPE_SCALES">FT_SIZE_REQUEST_TYPE_SCALES</td><td class="desc">
-<p>Specify the scaling values directly.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size_RequestRec">FT_Size_RequestRec</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>A structure to model a size request.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="type">type</td><td class="desc">
-<p>See <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a>.</p>
-</td></tr>
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The desired width, given as a 26.6 fractional point value (with 72pt = 1in).</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The desired height, given as a 26.6 fractional point value (with 72pt = 1in).</p>
-</td></tr>
-<tr><td class="val" id="horiResolution">horiResolution</td><td class="desc">
-<p>The horizontal resolution (dpi, i.e., pixels per inch). If set to zero, &lsquo;width&rsquo; is treated as a 26.6 fractional <b>pixel</b> value, which gets internally rounded to an integer.</p>
-</td></tr>
-<tr><td class="val" id="vertResolution">vertResolution</td><td class="desc">
-<p>The vertical resolution (dpi, i.e., pixels per inch). If set to zero, &lsquo;height&rsquo; is treated as a 26.6 fractional <b>pixel</b> value, which gets internally rounded to an integer.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>If &lsquo;width&rsquo; is zero, the horizontal scaling value is set equal to the vertical scaling value, and vice versa.</p>
-<p>If &lsquo;type&rsquo; is FT_SIZE_REQUEST_TYPE_SCALES, &lsquo;width&rsquo; and &lsquo;height&rsquo; are interpreted directly as 16.16 fractional scaling values, without any further modification, and both &lsquo;horiResolution&rsquo; and &lsquo;vertResolution&rsquo; are ignored.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size_Request">FT_Size_Request</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_ *<b>FT_Size_Request</b>;
-</pre>
-
-<p>A handle to a size request structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Transform">FT_Set_Transform</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="matrix">matrix</td><td class="desc">
-<p>A pointer to the transformation's 2x2 matrix. Use NULL for the identity matrix.</p>
-</td></tr>
-<tr><td class="val" id="delta">delta</td><td class="desc">
-<p>A pointer to the translation vector. Use NULL for the null vector.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Load_Glyph">FT_Load_Glyph</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Load a glyph into the glyph slot of a face object.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the target face object where the glyph is loaded.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
-<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><td class="val" id="load_flags">load_flags</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 that 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>
-<p>If you receive &lsquo;FT_Err_Glyph_Too_Big&rsquo;, try getting the glyph outline at EM size, then scale it manually and fill it as a graphics operation.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Char_Index">FT_Get_Char_Index</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the glyph index of a given character code. This function uses the currently selected charmap to do the mapping.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="charcode">charcode</td><td class="desc">
-<p>The character code.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
-
-<h4>note</h4>
-<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;. If the first glyph is not named &lsquo;.notdef&rsquo;, then for Type&nbsp;1 and Type&nbsp;42 fonts, &lsquo;.notdef&rsquo; will be moved into the glyph ID&nbsp;0 position, and whatever was there will be moved to the position &lsquo;.notdef&rsquo; had. For Type&nbsp;1 fonts, if there is no &lsquo;.notdef&rsquo; glyph at all, then one will be created at index&nbsp;0 and whatever was there will be moved to the last index -- Type&nbsp;42 fonts are considered invalid under this condition.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_First_Char">FT_Get_First_Char</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the first character code in the current charmap of a given face, together with its corresponding glyph index.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="agindex">agindex</td><td class="desc">
-<p>Glyph index of first character code. 0&nbsp;if charmap is empty.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The charmap's first character code.</p>
-
-<h4>note</h4>
-<p>You should use this function together with <a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a> 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>Be aware that character codes can have values up to 0xFFFFFFFF; this might happen for non-Unicode or malformed cmaps. However, even with regular Unicode encoding, so-called &lsquo;last resort fonts&rsquo; (using SFNT cmap format 13, see function <a href="ft2-truetype_tables.html#FT_Get_CMap_Format">FT_Get_CMap_Format</a>) normally have entries for all Unicode characters up to 0x1FFFFF, which can cause *a lot* of iterations.</p>
-<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 if the value&nbsp;0 is the first valid character code.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Next_Char">FT_Get_Next_Char</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="char_code">char_code</td><td class="desc">
-<p>The starting character code.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="agindex">agindex</td><td class="desc">
-<p>Glyph index of next character code. 0&nbsp;if charmap is empty.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The charmap's next character code.</p>
-
-<h4>note</h4>
-<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 that 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Name_Index">FT_Get_Name_Index</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the glyph index of a given glyph name.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="glyph_name">glyph_name</td><td class="desc">
-<p>The glyph name.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Load_Char">FT_Load_Char</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Load a glyph into the glyph slot of a face object, accessed by its character code.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a target face object where the glyph is loaded.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="char_code">char_code</td><td class="desc">
-<p>The glyph's character code, according to the current charmap used in the face.</p>
-</td></tr>
-<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>Many fonts contain glyphs that can't be loaded by this function since its glyph indices are not listed in any of the font's charmaps.</p>
-<p>If no active cmap is set up (i.e., &lsquo;face-&gt;charmap&rsquo; is zero), the call to <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a> is omitted, and the function behaves identically to <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Render_Glyph">FT_Render_Glyph</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="slot">slot</td><td class="desc">
-<p>A handle to the glyph slot containing the image to convert.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="render_mode">render_mode</td><td class="desc">
-<p>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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>To get meaningful results, font scaling values must be set with functions like <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> before calling &lsquo;FT_Render_Glyph&rsquo;.</p>
-<p>When FreeType outputs a bitmap of a glyph, it really outputs an alpha coverage map. If a pixel is completely covered by a filled-in outline, the bitmap contains 0xFF at that pixel, meaning that 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% black (or 0% bright). If a pixel is only 50% covered (value 0x80), the pixel is made 50% black (50% bright or a middle shade of grey). 0% covered means 0% black (100% bright or white).</p>
-<p>On high-DPI screens like on smartphones and tablets, the pixels are so small that their chance of being completely covered and therefore completely black are fairly good. On the low-DPI screens, however, the situation is different. The pixels are too large for most of the details of a glyph and shades of gray are the norm rather than the exception.</p>
-<p>This is relevant because all our screens have a second problem: they are not linear. 1&nbsp;+&nbsp;1 is not&nbsp;2. Twice the value does not result in twice the brightness. When a pixel is only 50% covered, the coverage map says 50% black, and this translates to a pixel value of 128 when you use 8&nbsp;bits per channel (0-255). However, this does not translate to 50% brightness for that pixel on our sRGB and gamma&nbsp;2.2 screens. Due to their non-linearity, they dwell longer in the darks and only a pixel value of about 186 results in 50% brightness -- 128 ends up too dark on both bright and dark backgrounds. The net result is that dark text looks burnt-out, pixely and blotchy on bright background, bright text too frail on dark backgrounds, and colored text on colored background (for example, red on green) seems to have dark halos or &lsquo;dirt&rsquo; around it. The situation is especially ugly for diagonal stems like in &lsquo;w&rsquo; glyph shapes where the quality of FreeType's anti-aliasing depends on the correct display of grays. On high-DPI screens where smaller, fully black pixels reign supreme, this doesn't matter, but on our low-DPI screens with all the gray shades, it does. 0% and 100% brightness are the same things in linear and non-linear space, just all the shades in-between aren't.</p>
-<p>The blending function for placing text over a background is</p>
-<pre class="colored">
- dst = alpha * src + (1 - alpha) * dst ,
-</pre>
-<p>which is known as the OVER operator.</p>
-<p>To correctly composite an antialiased pixel of a glyph onto a surface,</p>
-<p>1. take the foreground and background colors (e.g., in sRGB space) and apply gamma to get them in a linear space,</p>
-<p>2. use OVER to blend the two linear colors using the glyph pixel as the alpha value (remember, the glyph bitmap is an alpha coverage bitmap), and</p>
-<p>3. apply inverse gamma to the blended pixel and write it back to the image.</p>
-<p>Internal testing at Adobe found that a target inverse gamma of&nbsp;1.8 for step&nbsp;3 gives good results across a wide range of displays with an sRGB gamma curve or a similar one.</p>
-<p>This process can cost performance. There is an approximation that does not need to know about the background color; see <a href="https://bel.fi/alankila/lcd/">https://bel.fi/alankila/lcd/</a> and <a href="https://bel.fi/alankila/lcd/alpcor.html">https://bel.fi/alankila/lcd/alpcor.html</a> for details.</p>
-<p><b>ATTENTION</b>: Linear blending is even more important when dealing with subpixel-rendered glyphs to prevent color-fringing! A subpixel-rendered glyph must first be filtered with a filter that gives equal weight to the three color primaries and does not exceed a sum of 0x100, see section &lsquo;<a href="ft2-lcd_filtering.html#lcd_filtering">LCD Filtering</a>&rsquo;. Then the only difference to gray linear blending is that subpixel-rendered linear blending is done 3&nbsp;times per pixel: red foreground subpixel to red background subpixel and so on for green and blue.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Render_Mode">FT_Render_Mode</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Render_Mode_
- {
- <a href="ft2-base_interface.html#FT_RENDER_MODE_NORMAL">FT_RENDER_MODE_NORMAL</a> = 0,
- <a href="ft2-base_interface.html#FT_RENDER_MODE_LIGHT">FT_RENDER_MODE_LIGHT</a>,
- <a href="ft2-base_interface.html#FT_RENDER_MODE_MONO">FT_RENDER_MODE_MONO</a>,
- <a href="ft2-base_interface.html#FT_RENDER_MODE_LCD">FT_RENDER_MODE_LCD</a>,
- <a href="ft2-base_interface.html#FT_RENDER_MODE_LCD_V">FT_RENDER_MODE_LCD_V</a>,
-
- FT_RENDER_MODE_MAX
-
- } <b>FT_Render_Mode</b>;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_Render_Mode</b>' values instead */
-#define ft_render_mode_normal <a href="ft2-base_interface.html#FT_RENDER_MODE_NORMAL">FT_RENDER_MODE_NORMAL</a>
-#define ft_render_mode_mono <a href="ft2-base_interface.html#FT_RENDER_MODE_MONO">FT_RENDER_MODE_MONO</a>
-</pre>
-
-<p>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 and embedded bitmaps 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, indicating pixel coverage. Use linear alpha blending and gamma correction to correctly render non-monochrome glyph bitmaps onto a surface; see <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_RENDER_MODE_NORMAL">FT_RENDER_MODE_NORMAL</td><td class="desc">
-<p>Default render mode; it corresponds to 8-bit anti-aliased bitmaps.</p>
-</td></tr>
-<tr><td class="val" id="FT_RENDER_MODE_LIGHT">FT_RENDER_MODE_LIGHT</td><td class="desc">
-<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><td class="val" id="FT_RENDER_MODE_MONO">FT_RENDER_MODE_MONO</td><td class="desc">
-<p>This mode corresponds to 1-bit bitmaps (with 2&nbsp;levels of opacity).</p>
-</td></tr>
-<tr><td class="val" id="FT_RENDER_MODE_LCD">FT_RENDER_MODE_LCD</td><td class="desc">
-<p>This mode corresponds to horizontal RGB and BGR subpixel 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><td class="val" id="FT_RENDER_MODE_LCD_V">FT_RENDER_MODE_LCD_V</td><td class="desc">
-<p>This mode corresponds to vertical RGB and BGR subpixel 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>
-
-<h4>note</h4>
-<p>Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your &lsquo;ftoption.h&rsquo;, which enables patented ClearType-style rendering, the LCD-optimized glyph bitmaps should be filtered to reduce color fringes inherent to this technology. You can either set up LCD filtering with <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> or <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a>, or do the filtering yourself. The default FreeType LCD rendering technology does not require filtering.</p>
-<p>The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel mode like <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>. You can use <a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a> to transform them into 8-bit pixmaps.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Kerning">FT_Get_Kerning</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the kerning vector between two glyphs of the same face.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr><td class="val" id="left_glyph">left_glyph</td><td class="desc">
-<p>The index of the left glyph in the kern pair.</p>
-</td></tr>
-<tr><td class="val" id="right_glyph">right_glyph</td><td class="desc">
-<p>The index of the right glyph in the kern pair.</p>
-</td></tr>
-<tr><td class="val" id="kern_mode">kern_mode</td><td class="desc">
-<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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="akerning">akerning</td><td class="desc">
-<p>The kerning vector. This is either in font units, fractional pixels (26.6 format), or pixels for scalable formats, and in pixels for fixed-sizes formats.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>Kerning for OpenType fonts implemented in a &lsquo;GPOS&rsquo; table is not supported; use <a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</a> to find out whether a font has data that can be extracted with &lsquo;FT_Get_Kerning&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Kerning_Mode">FT_Kerning_Mode</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Kerning_Mode_
- {
- <a href="ft2-base_interface.html#FT_KERNING_DEFAULT">FT_KERNING_DEFAULT</a> = 0,
- <a href="ft2-base_interface.html#FT_KERNING_UNFITTED">FT_KERNING_UNFITTED</a>,
- <a href="ft2-base_interface.html#FT_KERNING_UNSCALED">FT_KERNING_UNSCALED</a>
-
- } <b>FT_Kerning_Mode</b>;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_Kerning_Mode</b>' values instead */
-#define ft_kerning_default <a href="ft2-base_interface.html#FT_KERNING_DEFAULT">FT_KERNING_DEFAULT</a>
-#define ft_kerning_unfitted <a href="ft2-base_interface.html#FT_KERNING_UNFITTED">FT_KERNING_UNFITTED</a>
-#define ft_kerning_unscaled <a href="ft2-base_interface.html#FT_KERNING_UNSCALED">FT_KERNING_UNSCALED</a>
-</pre>
-
-<p>An enumeration to specify the format of kerning values returned by <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_KERNING_DEFAULT">FT_KERNING_DEFAULT</td><td class="desc">
-<p>Return grid-fitted kerning distances in 26.6 fractional pixels.</p>
-</td></tr>
-<tr><td class="val" id="FT_KERNING_UNFITTED">FT_KERNING_UNFITTED</td><td class="desc">
-<p>Return un-grid-fitted kerning distances in 26.6 fractional pixels.</p>
-</td></tr>
-<tr><td class="val" id="FT_KERNING_UNSCALED">FT_KERNING_UNSCALED</td><td class="desc">
-<p>Return the kerning vector in original font units.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>FT_KERNING_DEFAULT returns full pixel values; it also makes FreeType heuristically scale down kerning distances at small ppem values so that they don't become too big.</p>
-<p>Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current horizontal scaling factor (as set e.g. with <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>) to convert font units to pixels.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Track_Kerning">FT_Get_Track_Kerning</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the track kerning for a given face object at a given size.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr><td class="val" id="point_size">point_size</td><td class="desc">
-<p>The point size in 16.16 fractional points.</p>
-</td></tr>
-<tr><td class="val" id="degree">degree</td><td class="desc">
-<p>The degree of tightness. Increasingly negative values represent tighter track kerning, while increasingly positive values represent looser track kerning. Value zero means no track kerning.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="akerning">akerning</td><td class="desc">
-<p>The kerning in 16.16 fractional points, to be uniformly applied between all glyphs.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Currently, only the Type&nbsp;1 font driver supports track kerning, using data from AFM files (if attached with <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>
-<p>Only very few AFM files come with track kerning data; please refer to Adobe's AFM specification for more details.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Glyph_Name">FT_Get_Glyph_Name</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
-<p>The glyph index.</p>
-</td></tr>
-<tr><td class="val" id="buffer_max">buffer_max</td><td class="desc">
-<p>The maximum number of bytes available in the buffer.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="buffer">buffer</td><td class="desc">
-<p>A pointer to a target buffer where the name is copied to.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>Be aware that FreeType reorders glyph indices internally so that glyph index&nbsp;0 always corresponds to the &lsquo;missing glyph&rsquo; (called &lsquo;.notdef&rsquo;).</p>
-<p>This function always returns an error if the config macro &lsquo;FT_CONFIG_OPTION_NO_GLYPH_NAMES&rsquo; is not defined in &lsquo;ftoption.h&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Postscript_Name">FT_Get_Postscript_Name</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript, TrueType, and OpenType fonts.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A pointer to the face's PostScript name. NULL if unavailable.</p>
-
-<h4>note</h4>
-<p>The returned pointer is owned by the face and is destroyed with it.</p>
-<p>For variation fonts, this string changes if you select a different instance, and you have to call &lsquo;FT_Get_PostScript_Name&rsquo; again to retrieve it. FreeType follows Adobe TechNote #5902, &lsquo;Generating PostScript Names for Fonts Using OpenType Font Variations&rsquo;.</p>
-<p><a href="https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html">https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html</a></p>
-<p>[Since 2.9] Special PostScript names for named instances are only returned if the named instance is set with <a href="ft2-multiple_masters.html#FT_Set_Named_Instance">FT_Set_Named_Instance</a> (and the font has corresponding entries in its &lsquo;fvar&rsquo; table). If <a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a> returns true, the algorithmically derived PostScript name is provided, not looking up special entries for named instances.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CharMapRec">FT_CharMapRec</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>The base charmap structure.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the parent face object.</p>
-</td></tr>
-<tr><td class="val" id="encoding">encoding</td><td class="desc">
-<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><td class="val" id="platform_id">platform_id</td><td class="desc">
-<p>An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and gets emulated for other formats.</p>
-</td></tr>
-<tr><td class="val" id="encoding_id">encoding_id</td><td class="desc">
-<p>A platform specific encoding number. This also comes from the TrueType specification and gets emulated similarly.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Select_Charmap">FT_Select_Charmap</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Select a given charmap by its encoding tag (as listed in &lsquo;freetype.h&rsquo;).</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="encoding">encoding</td><td class="desc">
-<p>A handle to the selected encoding.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 that 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Charmap">FT_Set_Charmap</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Select a given charmap for character code to glyph index mapping.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="charmap">charmap</td><td class="desc">
-<p>A handle to the selected charmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 an OpenType type&nbsp;14 charmap is selected (which doesn't map character codes to glyph indices at all).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Charmap_Index">FT_Get_Charmap_Index</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Retrieve index of a given charmap.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="charmap">charmap</td><td class="desc">
-<p>A handle to a charmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The index into the array of character maps within the face to which &lsquo;charmap&rsquo; belongs. If an error occurs, -1 is returned.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_FSType_Flags">FT_Get_FSType_Flags</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> )
- <b>FT_Get_FSType_Flags</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-</pre>
-
-<p>Return the &lsquo;fsType&rsquo; flags for a font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The &lsquo;fsType&rsquo; flags, see <a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_XXX</a>.</p>
-
-<h4>note</h4>
-<p>Use this function rather than directly reading the &lsquo;fs_type&rsquo; field in the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure, which is only guaranteed to return the correct results for Type&nbsp;1 fonts.</p>
-
-<h4>since</h4>
-<p>2.3.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>; an error is returned otherwise.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="glyph">glyph</td><td class="desc">
-<p>The source glyph slot.</p>
-</td></tr>
-<tr><td class="val" id="sub_index">sub_index</td><td class="desc">
-<p>The index of the subglyph. Must be less than &lsquo;glyph-&gt;num_subglyphs&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="p_index">p_index</td><td class="desc">
-<p>The glyph index of the subglyph.</p>
-</td></tr>
-<tr><td class="val" id="p_flags">p_flags</td><td class="desc">
-<p>The subglyph flags, see <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a>.</p>
-</td></tr>
-<tr><td class="val" id="p_arg1">p_arg1</td><td class="desc">
-<p>The subglyph's first argument (if any).</p>
-</td></tr>
-<tr><td class="val" id="p_arg2">p_arg2</td><td class="desc">
-<p>The subglyph's second argument (if any).</p>
-</td></tr>
-<tr><td class="val" id="p_transform">p_transform</td><td class="desc">
-<p>The subglyph transformation (if any).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 OpenType specification for details.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_Internal">FT_Face_Internal</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Face_InternalRec_* <b>FT_Face_Internal</b>;
-</pre>
-
-<p>An opaque handle to an &lsquo;FT_Face_InternalRec&rsquo; structure that models the 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Size_Internal">FT_Size_Internal</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_InternalRec_* <b>FT_Size_Internal</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Slot_Internal">FT_Slot_Internal</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Slot_InternalRec_* <b>FT_Slot_Internal</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_SCALABLE">FT_FACE_FLAG_SCALABLE</a> ( 1L &lt;&lt; 0 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_FIXED_SIZES">FT_FACE_FLAG_FIXED_SIZES</a> ( 1L &lt;&lt; 1 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_FIXED_WIDTH">FT_FACE_FLAG_FIXED_WIDTH</a> ( 1L &lt;&lt; 2 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_SFNT">FT_FACE_FLAG_SFNT</a> ( 1L &lt;&lt; 3 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_HORIZONTAL">FT_FACE_FLAG_HORIZONTAL</a> ( 1L &lt;&lt; 4 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_VERTICAL">FT_FACE_FLAG_VERTICAL</a> ( 1L &lt;&lt; 5 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_KERNING">FT_FACE_FLAG_KERNING</a> ( 1L &lt;&lt; 6 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_FAST_GLYPHS">FT_FACE_FLAG_FAST_GLYPHS</a> ( 1L &lt;&lt; 7 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_MULTIPLE_MASTERS">FT_FACE_FLAG_MULTIPLE_MASTERS</a> ( 1L &lt;&lt; 8 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_GLYPH_NAMES">FT_FACE_FLAG_GLYPH_NAMES</a> ( 1L &lt;&lt; 9 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_EXTERNAL_STREAM">FT_FACE_FLAG_EXTERNAL_STREAM</a> ( 1L &lt;&lt; 10 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_HINTER">FT_FACE_FLAG_HINTER</a> ( 1L &lt;&lt; 11 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_CID_KEYED">FT_FACE_FLAG_CID_KEYED</a> ( 1L &lt;&lt; 12 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_TRICKY">FT_FACE_FLAG_TRICKY</a> ( 1L &lt;&lt; 13 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_COLOR">FT_FACE_FLAG_COLOR</a> ( 1L &lt;&lt; 14 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_VARIATION">FT_FACE_FLAG_VARIATION</a> ( 1L &lt;&lt; 15 )
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_FACE_FLAG_SCALABLE">FT_FACE_FLAG_SCALABLE</td><td class="desc">
-<p>The face contains outline glyphs. Note that a face can contain bitmap strikes also, i.e., a face can have both this flag and <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> set.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_FIXED_SIZES">FT_FACE_FLAG_FIXED_SIZES</td><td class="desc">
-<p>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><td class="val" id="FT_FACE_FLAG_FIXED_WIDTH">FT_FACE_FLAG_FIXED_WIDTH</td><td class="desc">
-<p>The face contains fixed-width characters (like Courier, Lucida, MonoType, etc.).</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_SFNT">FT_FACE_FLAG_SFNT</td><td class="desc">
-<p>The face uses the SFNT storage scheme. For now, this means TrueType and OpenType.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_HORIZONTAL">FT_FACE_FLAG_HORIZONTAL</td><td class="desc">
-<p>The face contains horizontal glyph metrics. This should be set for all common formats.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_VERTICAL">FT_FACE_FLAG_VERTICAL</td><td class="desc">
-<p>The face contains vertical glyph metrics. This is only available in some formats, not all of them.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_KERNING">FT_FACE_FLAG_KERNING</td><td class="desc">
-<p>The face contains kerning information. If set, the kerning distance can be retrieved using 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 SFNT &lsquo;GPOS&rsquo; table (as present in many OpenType fonts).</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_FAST_GLYPHS">FT_FACE_FLAG_FAST_GLYPHS</td><td class="desc">
-<p>THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_MULTIPLE_MASTERS">FT_FACE_FLAG_MULTIPLE_MASTERS</td><td class="desc">
-<p>The face contains multiple masters and is capable of interpolating between them. Supported formats are Adobe MM, TrueType GX, and OpenType variation fonts.</p>
-<p>See section &lsquo;<a href="ft2-multiple_masters.html#multiple_masters">Multiple Masters</a>&rsquo; for API details.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_GLYPH_NAMES">FT_FACE_FLAG_GLYPH_NAMES</td><td class="desc">
-<p>The face contains glyph names, which can be retrieved using <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><td class="val" id="FT_FACE_FLAG_EXTERNAL_STREAM">FT_FACE_FLAG_EXTERNAL_STREAM</td><td class="desc">
-<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><td class="val" id="FT_FACE_FLAG_HINTER">FT_FACE_FLAG_HINTER</td><td class="desc">
-<p>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><td class="val" id="FT_FACE_FLAG_CID_KEYED">FT_FACE_FLAG_CID_KEYED</td><td class="desc">
-<p>The face is CID-keyed. In that case, the face is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>. Only the CID values for which corresponding glyphs in the subsetted font exist make &lsquo;FT_Load_Glyph&rsquo; return successfully; in all other cases you get an &lsquo;FT_Err_Invalid_Argument&rsquo; error.</p>
-<p>Note that CID-keyed fonts that are in an SFNT wrapper (this is, all OpenType/CFF fonts) don't have this flag set since the glyphs are accessed in the normal way (using contiguous indices); the &lsquo;CID-ness&rsquo; isn't visible to the application.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_TRICKY">FT_FACE_FLAG_TRICKY</td><td class="desc">
-<p>The face is &lsquo;tricky&rsquo;, this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the old Chinese font &lsquo;mingli.ttf&rsquo; (but not &lsquo;mingliu.ttc&rsquo;) that uses TrueType bytecode instructions to move and scale all of its subglyphs.</p>
-<p>It is not possible to auto-hint such fonts using <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>; it will also ignore <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a>. You have to set both <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_AUTOHINT</a> to really disable hinting; however, you probably never want this except for demonstration purposes.</p>
-<p>Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file &lsquo;ttobjs.c&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_COLOR">FT_FACE_FLAG_COLOR</td><td class="desc">
-<p>[Since 2.5.1] The face has color glyph tables. To access color glyphs use <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_COLOR</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_FACE_FLAG_VARIATION">FT_FACE_FLAG_VARIATION</td><td class="desc">
-<p>[Since 2.9] Set if the current face (or named instance) has been altered with <a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a>, <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a>, or <a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a>. This flag is unset by a call to <a href="ft2-multiple_masters.html#FT_Set_Named_Instance">FT_Set_Named_Instance</a>.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_ITALIC">FT_STYLE_FLAG_ITALIC</a> ( 1 &lt;&lt; 0 )
-#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_BOLD">FT_STYLE_FLAG_BOLD</a> ( 1 &lt;&lt; 1 )
-</pre>
-
-<p>A list of bit flags 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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_STYLE_FLAG_ITALIC">FT_STYLE_FLAG_ITALIC</td><td class="desc">
-<p>The face style is italic or oblique.</p>
-</td></tr>
-<tr><td class="val" id="FT_STYLE_FLAG_BOLD">FT_STYLE_FLAG_BOLD</td><td class="desc">
-<p>The face is bold.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OPEN_XXX">FT_OPEN_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_OPEN_MEMORY">FT_OPEN_MEMORY</a> 0x1
-#define <a href="ft2-base_interface.html#FT_OPEN_STREAM">FT_OPEN_STREAM</a> 0x2
-#define <a href="ft2-base_interface.html#FT_OPEN_PATHNAME">FT_OPEN_PATHNAME</a> 0x4
-#define <a href="ft2-base_interface.html#FT_OPEN_DRIVER">FT_OPEN_DRIVER</a> 0x8
-#define <a href="ft2-base_interface.html#FT_OPEN_PARAMS">FT_OPEN_PARAMS</a> 0x10
-
-
- /* these constants are deprecated; use the corresponding `<b>FT_OPEN_XXX</b>' */
- /* values instead */
-#define ft_open_memory <a href="ft2-base_interface.html#FT_OPEN_MEMORY">FT_OPEN_MEMORY</a>
-#define ft_open_stream <a href="ft2-base_interface.html#FT_OPEN_STREAM">FT_OPEN_STREAM</a>
-#define ft_open_pathname <a href="ft2-base_interface.html#FT_OPEN_PATHNAME">FT_OPEN_PATHNAME</a>
-#define ft_open_driver <a href="ft2-base_interface.html#FT_OPEN_DRIVER">FT_OPEN_DRIVER</a>
-#define ft_open_params <a href="ft2-base_interface.html#FT_OPEN_PARAMS">FT_OPEN_PARAMS</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_OPEN_MEMORY">FT_OPEN_MEMORY</td><td class="desc">
-<p>This is a memory-based stream.</p>
-</td></tr>
-<tr><td class="val" id="FT_OPEN_STREAM">FT_OPEN_STREAM</td><td class="desc">
-<p>Copy the stream from the &lsquo;stream&rsquo; field.</p>
-</td></tr>
-<tr><td class="val" id="FT_OPEN_PATHNAME">FT_OPEN_PATHNAME</td><td class="desc">
-<p>Create a new input stream from a C&nbsp;path name.</p>
-</td></tr>
-<tr><td class="val" id="FT_OPEN_DRIVER">FT_OPEN_DRIVER</td><td class="desc">
-<p>Use the &lsquo;driver&rsquo; field.</p>
-</td></tr>
-<tr><td class="val" id="FT_OPEN_PARAMS">FT_OPEN_PARAMS</td><td class="desc">
-<p>Use the &lsquo;num_params&rsquo; and &lsquo;params&rsquo; fields.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The &lsquo;FT_OPEN_MEMORY&rsquo;, &lsquo;FT_OPEN_STREAM&rsquo;, and &lsquo;FT_OPEN_PATHNAME&rsquo; flags are mutually exclusive.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LOAD_XXX">FT_LOAD_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_LOAD_DEFAULT">FT_LOAD_DEFAULT</a> 0x0
-#define <a href="ft2-base_interface.html#FT_LOAD_NO_SCALE">FT_LOAD_NO_SCALE</a> ( 1L &lt;&lt; 0 )
-#define <a href="ft2-base_interface.html#FT_LOAD_NO_HINTING">FT_LOAD_NO_HINTING</a> ( 1L &lt;&lt; 1 )
-#define <a href="ft2-base_interface.html#FT_LOAD_RENDER">FT_LOAD_RENDER</a> ( 1L &lt;&lt; 2 )
-#define <a href="ft2-base_interface.html#FT_LOAD_NO_BITMAP">FT_LOAD_NO_BITMAP</a> ( 1L &lt;&lt; 3 )
-#define <a href="ft2-base_interface.html#FT_LOAD_VERTICAL_LAYOUT">FT_LOAD_VERTICAL_LAYOUT</a> ( 1L &lt;&lt; 4 )
-#define <a href="ft2-base_interface.html#FT_LOAD_FORCE_AUTOHINT">FT_LOAD_FORCE_AUTOHINT</a> ( 1L &lt;&lt; 5 )
-#define <a href="ft2-base_interface.html#FT_LOAD_CROP_BITMAP">FT_LOAD_CROP_BITMAP</a> ( 1L &lt;&lt; 6 )
-#define <a href="ft2-base_interface.html#FT_LOAD_PEDANTIC">FT_LOAD_PEDANTIC</a> ( 1L &lt;&lt; 7 )
-#define <a href="ft2-base_interface.html#FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a> ( 1L &lt;&lt; 9 )
-#define <a href="ft2-base_interface.html#FT_LOAD_NO_RECURSE">FT_LOAD_NO_RECURSE</a> ( 1L &lt;&lt; 10 )
-#define <a href="ft2-base_interface.html#FT_LOAD_IGNORE_TRANSFORM">FT_LOAD_IGNORE_TRANSFORM</a> ( 1L &lt;&lt; 11 )
-#define <a href="ft2-base_interface.html#FT_LOAD_MONOCHROME">FT_LOAD_MONOCHROME</a> ( 1L &lt;&lt; 12 )
-#define <a href="ft2-base_interface.html#FT_LOAD_LINEAR_DESIGN">FT_LOAD_LINEAR_DESIGN</a> ( 1L &lt;&lt; 13 )
-#define <a href="ft2-base_interface.html#FT_LOAD_NO_AUTOHINT">FT_LOAD_NO_AUTOHINT</a> ( 1L &lt;&lt; 15 )
- /* Bits 16-19 are used by `FT_LOAD_TARGET_' */
-#define <a href="ft2-base_interface.html#FT_LOAD_COLOR">FT_LOAD_COLOR</a> ( 1L &lt;&lt; 20 )
-#define <a href="ft2-base_interface.html#FT_LOAD_COMPUTE_METRICS">FT_LOAD_COMPUTE_METRICS</a> ( 1L &lt;&lt; 21 )
-#define <a href="ft2-base_interface.html#FT_LOAD_BITMAP_METRICS_ONLY">FT_LOAD_BITMAP_METRICS_ONLY</a> ( 1L &lt;&lt; 22 )
-</pre>
-
-<p>A list of bit field constants for <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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_LOAD_DEFAULT">FT_LOAD_DEFAULT</td><td class="desc">
-<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 for or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then &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><td class="val" id="FT_LOAD_NO_SCALE">FT_LOAD_NO_SCALE</td><td class="desc">
-<p>Don't scale the loaded outline glyph 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>
-<p>If the font is &lsquo;tricky&rsquo; (see <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_TRICKY</a> for more), using FT_LOAD_NO_SCALE usually yields meaningless outlines because the subglyphs must be scaled and positioned with hinting instructions. This can be solved by loading the font without FT_LOAD_NO_SCALE and setting the character size to &lsquo;font-&gt;units_per_EM&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_NO_HINTING">FT_LOAD_NO_HINTING</td><td class="desc">
-<p>Disable hinting. This generally generates &lsquo;blurrier&rsquo; bitmap glyphs when the glyph are 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><td class="val" id="FT_LOAD_RENDER">FT_LOAD_RENDER</td><td class="desc">
-<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><td class="val" id="FT_LOAD_NO_BITMAP">FT_LOAD_NO_BITMAP</td><td class="desc">
-<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><td class="val" id="FT_LOAD_VERTICAL_LAYOUT">FT_LOAD_VERTICAL_LAYOUT</td><td class="desc">
-<p>Load the glyph for vertical text layout. In particular, the &lsquo;advance&rsquo; value in the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure is set to the &lsquo;vertAdvance&rsquo; value of the &lsquo;metrics&rsquo; field.</p>
-<p>In case <a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a> doesn't return true, you shouldn't use this flag currently. Reason is that in this case vertical metrics get synthesized, and those values are not always consistent across various font formats.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_FORCE_AUTOHINT">FT_LOAD_FORCE_AUTOHINT</td><td class="desc">
-<p>Prefer the auto-hinter over the font's native hinter. See also the note below.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_PEDANTIC">FT_LOAD_PEDANTIC</td><td class="desc">
-<p>Make the font driver perform pedantic verifications during glyph loading. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also.</p>
-<p>In particular, errors from the TrueType bytecode engine are not passed to the application if this flag is not set; this might result in partially hinted or distorted glyphs in case a glyph's bytecode is buggy.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_NO_RECURSE">FT_LOAD_NO_RECURSE</td><td class="desc">
-<p>Don't load composite glyphs recursively. Instead, the font driver 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>. The description of subglyphs can then be accessed with <a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a>.</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><td class="val" id="FT_LOAD_IGNORE_TRANSFORM">FT_LOAD_IGNORE_TRANSFORM</td><td class="desc">
-<p>Ignore the transform matrix set by <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_MONOCHROME">FT_LOAD_MONOCHROME</td><td class="desc">
-<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 rather use <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> so that the monochrome-optimized hinting algorithm is used.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_LINEAR_DESIGN">FT_LOAD_LINEAR_DESIGN</td><td class="desc">
-<p>Keep &lsquo;linearHoriAdvance&rsquo; and &lsquo;linearVertAdvance&rsquo; fields of <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> in font units. See <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> for details.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_NO_AUTOHINT">FT_LOAD_NO_AUTOHINT</td><td class="desc">
-<p>Disable the auto-hinter. See also the note below.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_COLOR">FT_LOAD_COLOR</td><td class="desc">
-<p>[Since 2.5] Load embedded color bitmap images. The resulting color bitmaps, if available, will have the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_BGRA</a> format. If the flag is not set and color bitmaps are found, they are converted to 256-level gray bitmaps transparently, using the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a> format.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_COMPUTE_METRICS">FT_LOAD_COMPUTE_METRICS</td><td class="desc">
-<p>[Since 2.6.1] Compute glyph metrics from the glyph data, without the use of bundled metrics tables (for example, the &lsquo;hdmx&rsquo; table in TrueType fonts). This flag is mainly used by font validating or font editing applications, which need to ignore, verify, or edit those tables.</p>
-<p>Currently, this flag is only implemented for TrueType fonts.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_BITMAP_METRICS_ONLY">FT_LOAD_BITMAP_METRICS_ONLY</td><td class="desc">
-<p>[Since 2.7.1] Request loading of the metrics and bitmap image information of a (possibly embedded) bitmap glyph without allocating or copying the bitmap image data itself. No effect if the target glyph is not a bitmap image.</p>
-<p>This flag unsets <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_CROP_BITMAP">FT_LOAD_CROP_BITMAP</td><td class="desc">
-<p>Ignored. Deprecated.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</td><td class="desc">
-<p>Ignored. Deprecated.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>See the description of <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_TRICKY</a> for a special exception (affecting only a handful of Asian fonts).</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>
-<p>Note that the auto-hinter needs a valid Unicode cmap (either a native one or synthesized by FreeType) for producing correct results. If a font provides an incorrect mapping (for example, assigning the character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a mathematical integral sign), the auto-hinter might produce useless results.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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_NORMAL">FT_LOAD_TARGET_NORMAL</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_RENDER_MODE_NORMAL">FT_RENDER_MODE_NORMAL</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_LIGHT">FT_LOAD_TARGET_LIGHT</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_RENDER_MODE_LIGHT">FT_RENDER_MODE_LIGHT</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_MONO">FT_LOAD_TARGET_MONO</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_RENDER_MODE_MONO">FT_RENDER_MODE_MONO</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_LCD">FT_LOAD_TARGET_LCD</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_RENDER_MODE_LCD">FT_RENDER_MODE_LCD</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_LCD_V">FT_LOAD_TARGET_LCD_V</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_RENDER_MODE_LCD_V">FT_RENDER_MODE_LCD_V</a> )
-</pre>
-
-<p>A list of values to select a specific hinting algorithm for 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 a 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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_LOAD_TARGET_NORMAL">FT_LOAD_TARGET_NORMAL</td><td class="desc">
-<p>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><td class="val" id="FT_LOAD_TARGET_LIGHT">FT_LOAD_TARGET_LIGHT</td><td class="desc">
-<p>A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by FreeType's new CFF engine or Microsoft's ClearType font renderer. This preserves inter-glyph spacing in horizontal text. The snapping is done either by the native font driver, if the driver itself and the font support it, or by the auto-hinter.</p>
-<p>Advance widths are rounded to integer values; however, using the &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo; fields of <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a>, it is possible to get fractional advance widths for subpixel positioning (which is recommended to use).</p>
-<p>If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active, TrueType-like metrics are used to make this mode behave similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 (inclusive).</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_TARGET_MONO">FT_LOAD_TARGET_MONO</td><td class="desc">
-<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><td class="val" id="FT_LOAD_TARGET_LCD">FT_LOAD_TARGET_LCD</td><td class="desc">
-<p>A variant of <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a> optimized for horizontally decimated LCD displays.</p>
-</td></tr>
-<tr><td class="val" id="FT_LOAD_TARGET_LCD_V">FT_LOAD_TARGET_LCD_V</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<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 that matches the used algorithm best). An exception is FT_LOAD_TARGET_MONO since it implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a>.</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>
-<p>In general, you should stick with one rendering mode. For example, switching between <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> and <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> enforces a lot of recomputation for TrueType fonts, which is slow. Another reason is caching: Selecting a different mode usually causes changes in both the outlines and the rasterized bitmaps; it is thus necessary to empty the cache after a mode switch to avoid false hits.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a> 1
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a> 2
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a> 4
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_SCALE">FT_SUBGLYPH_FLAG_SCALE</a> 8
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XY_SCALE">FT_SUBGLYPH_FLAG_XY_SCALE</a> 0x40
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_2X2">FT_SUBGLYPH_FLAG_2X2</a> 0x80
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_USE_MY_METRICS">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a> 0x200
-</pre>
-
-<p>A list of constants describing subglyphs. Please refer to the &lsquo;glyf&rsquo; table description in the OpenType specification for the meaning of the various flags (which get synthesized for non-OpenType subglyphs).</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_SCALE">FT_SUBGLYPH_FLAG_SCALE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_XY_SCALE">FT_SUBGLYPH_FLAG_XY_SCALE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_2X2">FT_SUBGLYPH_FLAG_2X2</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_SUBGLYPH_FLAG_USE_MY_METRICS">FT_SUBGLYPH_FLAG_USE_MY_METRICS</td><td class="desc">
-<p></p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FSTYPE_XXX">FT_FSTYPE_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-base_interface.html#FT_FSTYPE_INSTALLABLE_EMBEDDING">FT_FSTYPE_INSTALLABLE_EMBEDDING</a> 0x0000
-#define <a href="ft2-base_interface.html#FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a> 0x0002
-#define <a href="ft2-base_interface.html#FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a> 0x0004
-#define <a href="ft2-base_interface.html#FT_FSTYPE_EDITABLE_EMBEDDING">FT_FSTYPE_EDITABLE_EMBEDDING</a> 0x0008
-#define <a href="ft2-base_interface.html#FT_FSTYPE_NO_SUBSETTING">FT_FSTYPE_NO_SUBSETTING</a> 0x0100
-#define <a href="ft2-base_interface.html#FT_FSTYPE_BITMAP_EMBEDDING_ONLY">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a> 0x0200
-</pre>
-
-<p>A list of bit flags used in the &lsquo;fsType&rsquo; field of the OS/2 table in a TrueType or OpenType font and the &lsquo;FSType&rsquo; entry in a PostScript font. These bit flags are returned by <a href="ft2-base_interface.html#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a>; they inform client applications of embedding and subsetting restrictions associated with a font.</p>
-<p>See <a href="https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf">https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf</a> for more details.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_FSTYPE_INSTALLABLE_EMBEDDING">FT_FSTYPE_INSTALLABLE_EMBEDDING</td><td class="desc">
-<p>Fonts with no fsType bit set may be embedded and permanently installed on the remote system by an application.</p>
-</td></tr>
-<tr><td class="val" id="FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</td><td class="desc">
-<p>Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the font software copyright owner.</p>
-</td></tr>
-<tr><td class="val" id="FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</td><td class="desc">
-<p>The font may be embedded and temporarily loaded on the remote system. Documents containing Preview &amp; Print fonts must be opened &lsquo;read-only&rsquo;; no edits can be applied to the document.</p>
-</td></tr>
-<tr><td class="val" id="FT_FSTYPE_EDITABLE_EMBEDDING">FT_FSTYPE_EDITABLE_EMBEDDING</td><td class="desc">
-<p>The font may be embedded but must only be installed temporarily on other systems. In contrast to Preview &amp; Print fonts, documents containing editable fonts may be opened for reading, editing is permitted, and changes may be saved.</p>
-</td></tr>
-<tr><td class="val" id="FT_FSTYPE_NO_SUBSETTING">FT_FSTYPE_NO_SUBSETTING</td><td class="desc">
-<p>The font may not be subsetted prior to embedding.</p>
-</td></tr>
-<tr><td class="val" id="FT_FSTYPE_BITMAP_EMBEDDING_ONLY">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</td><td class="desc">
-<p>Only bitmaps contained in the font may be embedded; no outline data may be embedded. If there are no bitmaps available in the font, then the font is unembeddable.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The flags are ORed together, thus more than a single value can be returned.</p>
-<p>While the &lsquo;fsType&rsquo; flags can indicate that a font may be embedded, a license with the font vendor may be separately required to use the font in this way.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <b>FT_HAS_FAST_GLYPHS</b>( face ) 0
-</pre>
-
-<p>Deprecated.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-basic_types.html b/freetype/docs/reference/ft2-basic_types.html
deleted file mode 100644
index 0e622397..00000000
--- a/freetype/docs/reference/ft2-basic_types.html
+++ /dev/null
@@ -1,866 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="basic_types">Basic Data Types</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Byte">FT_Byte</a></td><td><a href="#FT_Bool">FT_Bool</a></td><td><a href="#FT_UnitVector">FT_UnitVector</a></td></tr>
-<tr><td><a href="#FT_Bytes">FT_Bytes</a></td><td><a href="#FT_Offset">FT_Offset</a></td><td><a href="#FT_F26Dot6">FT_F26Dot6</a></td></tr>
-<tr><td><a href="#FT_Char">FT_Char</a></td><td><a href="#FT_PtrDist">FT_PtrDist</a></td><td><a href="#FT_Data">FT_Data</a></td></tr>
-<tr><td><a href="#FT_Int">FT_Int</a></td><td><a href="#FT_String">FT_String</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_UInt">FT_UInt</a></td><td><a href="#FT_Tag">FT_Tag</a></td><td><a href="#FT_MAKE_TAG">FT_MAKE_TAG</a></td></tr>
-<tr><td><a href="#FT_Int16">FT_Int16</a></td><td><a href="#FT_Error">FT_Error</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_UInt16">FT_UInt16</a></td><td><a href="#FT_Fixed">FT_Fixed</a></td><td><a href="#FT_Generic">FT_Generic</a></td></tr>
-<tr><td><a href="#FT_Int32">FT_Int32</a></td><td><a href="#FT_Pointer">FT_Pointer</a></td><td><a href="#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td></tr>
-<tr><td><a href="#FT_UInt32">FT_UInt32</a></td><td><a href="#FT_Pos">FT_Pos</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Int64">FT_Int64</a></td><td><a href="#FT_Vector">FT_Vector</a></td><td><a href="#FT_Bitmap">FT_Bitmap</a></td></tr>
-<tr><td><a href="#FT_UInt64">FT_UInt64</a></td><td><a href="#FT_BBox">FT_BBox</a></td><td><a href="#FT_Pixel_Mode">FT_Pixel_Mode</a></td></tr>
-<tr><td><a href="#FT_Short">FT_Short</a></td><td><a href="#FT_Matrix">FT_Matrix</a></td><td><a href="#FT_Palette_Mode">FT_Palette_Mode</a></td></tr>
-<tr><td><a href="#FT_UShort">FT_UShort</a></td><td><a href="#FT_FWord">FT_FWord</a></td><td><a href="#FT_Glyph_Format">FT_Glyph_Format</a></td></tr>
-<tr><td><a href="#FT_Long">FT_Long</a></td><td><a href="#FT_UFWord">FT_UFWord</a></td><td><a href="#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td></tr>
-<tr><td><a href="#FT_ULong">FT_ULong</a></td><td><a href="#FT_F2Dot14">FT_F2Dot14</a></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Byte">FT_Byte</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Byte</b>;
-</pre>
-
-<p>A simple typedef for the <i>unsigned</i> char type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bytes">FT_Bytes</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>A typedef for constant memory areas.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Char">FT_Char</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">char</span> <b>FT_Char</b>;
-</pre>
-
-<p>A simple typedef for the <i>signed</i> char type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Int">FT_Int</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">int</span> <b>FT_Int</b>;
-</pre>
-
-<p>A typedef for the int type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UInt">FT_UInt</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <b>FT_UInt</b>;
-</pre>
-
-<p>A typedef for the unsigned int type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Int16">FT_Int16</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Int16</b>;
-</pre>
-
-<p>A typedef for a 16bit signed integer type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UInt16">FT_UInt16</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UInt16</b>;
-</pre>
-
-<p>A typedef for a 16bit unsigned integer type.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Int32">FT_Int32</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int32</b>;
-</pre>
-
-<p>A typedef for a 32bit signed integer type. The size depends on the configuration.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UInt32">FT_UInt32</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt32</b>;
-</pre>
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Int64">FT_Int64</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int64</b>;
-</pre>
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UInt64">FT_UInt64</h3>
-<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt64</b>;
-</pre>
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Short">FT_Short</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Short</b>;
-</pre>
-
-<p>A typedef for signed short.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UShort">FT_UShort</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UShort</b>;
-</pre>
-
-<p>A typedef for unsigned short.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Long">FT_Long</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Long</b>;
-</pre>
-
-<p>A typedef for signed long.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ULong">FT_ULong</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span> <b>FT_ULong</b>;
-</pre>
-
-<p>A typedef for unsigned long.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bool">FT_Bool</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Bool</b>;
-</pre>
-
-<p>A typedef of unsigned char, used for simple booleans. As usual, values 1 and&nbsp;0 represent true and false, respectively.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Offset">FT_Offset</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> size_t <b>FT_Offset</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PtrDist">FT_PtrDist</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> ft_ptrdiff_t <b>FT_PtrDist</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_String">FT_String</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">char</span> <b>FT_String</b>;
-</pre>
-
-<p>A simple typedef for the char type, usually used for strings.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Tag">FT_Tag</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> <b>FT_Tag</b>;
-</pre>
-
-<p>A typedef for 32-bit tags (as used in the SFNT format).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Error">FT_Error</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">int</span> <b>FT_Error</b>;
-</pre>
-
-<p>The FreeType error code type. A value of&nbsp;0 is always interpreted as a successful operation.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Fixed">FT_Fixed</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Fixed</b>;
-</pre>
-
-<p>This type is used to store 16.16 fixed-point values, like scaling values or matrix coefficients.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Pointer">FT_Pointer</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">void</span>* <b>FT_Pointer</b>;
-</pre>
-
-<p>A simple typedef for a typeless pointer.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Pos">FT_Pos</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Pos</b>;
-</pre>
-
-<p>The type FT_Pos is used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16.16, or 26.6 fixed-point pixel coordinates.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector">FT_Vector</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A simple structure used to store a 2D vector; coordinates are of the FT_Pos type.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="x">x</td><td class="desc">
-<p>The horizontal coordinate.</p>
-</td></tr>
-<tr><td class="val" id="y">y</td><td class="desc">
-<p>The vertical coordinate.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BBox">FT_BBox</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="xMin">xMin</td><td class="desc">
-<p>The horizontal minimum (left-most).</p>
-</td></tr>
-<tr><td class="val" id="yMin">yMin</td><td class="desc">
-<p>The vertical minimum (bottom-most).</p>
-</td></tr>
-<tr><td class="val" id="xMax">xMax</td><td class="desc">
-<p>The horizontal maximum (right-most).</p>
-</td></tr>
-<tr><td class="val" id="yMax">yMax</td><td class="desc">
-<p>The vertical maximum (top-most).</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The bounding box is specified with the coordinates of the lower left and the upper right corner. In PostScript, those values are often called (llx,lly) and (urx,ury), respectively.</p>
-<p>If &lsquo;yMin&rsquo; is negative, this value gives the glyph's descender. Otherwise, the glyph doesn't descend below the baseline. Similarly, if &lsquo;ymax&rsquo; is positive, this value gives the glyph's ascender.</p>
-<p>&lsquo;xMin&rsquo; gives the horizontal distance from the glyph's origin to the left edge of the glyph's bounding box. If &lsquo;xMin&rsquo; is negative, the glyph extends to the left of the origin.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Matrix">FT_Matrix</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed-point format. The computation performed is:</p>
-<pre class="colored">
- x' = x*xx + y*xy
- y' = x*yx + y*yy
-</pre>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="xx">xx</td><td class="desc">
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr><td class="val" id="xy">xy</td><td class="desc">
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr><td class="val" id="yx">yx</td><td class="desc">
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr><td class="val" id="yy">yy</td><td class="desc">
-<p>Matrix coefficient.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FWord">FT_FWord</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_FWord</b>; /* distance in FUnits */
-</pre>
-
-<p>A signed 16-bit integer used to store a distance in original font units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UFWord">FT_UFWord</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>An unsigned 16-bit integer used to store a distance in original font units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_F2Dot14">FT_F2Dot14</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_F2Dot14</b>;
-</pre>
-
-<p>A signed 2.14 fixed-point type used for unit vectors.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_UnitVector">FT_UnitVector</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="x">x</td><td class="desc">
-<p>Horizontal coordinate.</p>
-</td></tr>
-<tr><td class="val" id="y">y</td><td class="desc">
-<p>Vertical coordinate.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_F26Dot6">FT_F26Dot6</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_F26Dot6</b>;
-</pre>
-
-<p>A signed 26.6 fixed-point type used for vectorial pixel coordinates.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Data">FT_Data</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>Read-only binary data represented as a pointer and a length.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="pointer">pointer</td><td class="desc">
-<p>The data.</p>
-</td></tr>
-<tr><td class="val" id="length">length</td><td class="desc">
-<p>The length of the data in bytes.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MAKE_TAG">FT_MAKE_TAG</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
-#define <b>FT_MAKE_TAG</b>( _x1, _x2, _x3, _x4 ) \
- (<a href="ft2-basic_types.html#FT_Tag">FT_Tag</a>) \
- ( ( (<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>
-
-<p>This macro converts four-letter tags that are used to label TrueType tables into an unsigned long, to be used within FreeType.</p>
-
-<h4>note</h4>
-<p>The produced values <b>must</b> be 32-bit integers. Don't redefine this macro.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Generic">FT_Generic</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<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>Some 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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="data">data</td><td class="desc">
-<p>A typeless pointer to any client-specified data. This field is completely ignored by the FreeType library.</p>
-</td></tr>
-<tr><td class="val" id="finalizer">finalizer</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Generic_Finalizer">FT_Generic_Finalizer</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">void</span> (*<b>FT_Generic_Finalizer</b>)( <span class="keyword">void</span>* object );
-</pre>
-
-<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>
-
-<h4>input</h4>
-<p>The address of the FreeType object that is under finalization. Its client data is accessed through its &lsquo;generic&rsquo; field.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap">FT_Bitmap</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_
- {
- <span class="keyword">unsigned</span> <span class="keyword">int</span> rows;
- <span class="keyword">unsigned</span> <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">unsigned</span> <span class="keyword">short</span> num_grays;
- <span class="keyword">unsigned</span> <span class="keyword">char</span> pixel_mode;
- <span class="keyword">unsigned</span> <span class="keyword">char</span> palette_mode;
- <span class="keyword">void</span>* palette;
-
- } <b>FT_Bitmap</b>;
-</pre>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="rows">rows</td><td class="desc">
-<p>The number of bitmap rows.</p>
-</td></tr>
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The number of pixels in bitmap row.</p>
-</td></tr>
-<tr><td class="val" id="pitch">pitch</td><td class="desc">
-<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>
-<p>Note that &lsquo;padding&rsquo; means the alignment of a bitmap to a byte border, and FreeType functions normally align to the smallest possible integer value.</p>
-<p>For the B/W rasterizer, &lsquo;pitch&rsquo; is always an even number.</p>
-<p>To change the pitch of a bitmap (say, to make it a multiple of 4), use <a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a>. Alternatively, you might use callback functions to directly render to the application's surface; see the file &lsquo;example2.cpp&rsquo; in the tutorial for a demonstration.</p>
-</td></tr>
-<tr><td class="val" id="buffer">buffer</td><td class="desc">
-<p>A typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases.</p>
-</td></tr>
-<tr><td class="val" id="num_grays">num_grays</td><td class="desc">
-<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><td class="val" id="pixel_mode">pixel_mode</td><td class="desc">
-<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><td class="val" id="palette_mode">palette_mode</td><td class="desc">
-<p>This field is intended for paletted pixel modes; it indicates how the palette is stored. Not used currently.</p>
-</td></tr>
-<tr><td class="val" id="palette">palette</td><td class="desc">
-<p>A typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Not used currently.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Pixel_Mode">FT_Pixel_Mode</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Pixel_Mode_
- {
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_NONE">FT_PIXEL_MODE_NONE</a> = 0,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_MONO">FT_PIXEL_MODE_MONO</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY">FT_PIXEL_MODE_GRAY</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY2">FT_PIXEL_MODE_GRAY2</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY4">FT_PIXEL_MODE_GRAY4</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_LCD">FT_PIXEL_MODE_LCD</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_LCD_V">FT_PIXEL_MODE_LCD_V</a>,
- <a href="ft2-basic_types.html#FT_PIXEL_MODE_BGRA">FT_PIXEL_MODE_BGRA</a>,
-
- FT_PIXEL_MODE_MAX /* do not remove */
-
- } <b>FT_Pixel_Mode</b>;
-
-
- /* these constants are deprecated; use the corresponding `<b>FT_Pixel_Mode</b>' */
- /* values instead. */
-#define ft_pixel_mode_none <a href="ft2-basic_types.html#FT_PIXEL_MODE_NONE">FT_PIXEL_MODE_NONE</a>
-#define ft_pixel_mode_mono <a href="ft2-basic_types.html#FT_PIXEL_MODE_MONO">FT_PIXEL_MODE_MONO</a>
-#define ft_pixel_mode_grays <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY">FT_PIXEL_MODE_GRAY</a>
-#define ft_pixel_mode_pal2 <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY2">FT_PIXEL_MODE_GRAY2</a>
-#define ft_pixel_mode_pal4 <a href="ft2-basic_types.html#FT_PIXEL_MODE_GRAY4">FT_PIXEL_MODE_GRAY4</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_PIXEL_MODE_NONE">FT_PIXEL_MODE_NONE</td><td class="desc">
-<p>Value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr><td class="val" id="FT_PIXEL_MODE_MONO">FT_PIXEL_MODE_MONO</td><td class="desc">
-<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><td class="val" id="FT_PIXEL_MODE_GRAY">FT_PIXEL_MODE_GRAY</td><td class="desc">
-<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 &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><td class="val" id="FT_PIXEL_MODE_GRAY2">FT_PIXEL_MODE_GRAY2</td><td class="desc">
-<p>A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
-</td></tr>
-<tr><td class="val" id="FT_PIXEL_MODE_GRAY4">FT_PIXEL_MODE_GRAY4</td><td class="desc">
-<p>A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
-</td></tr>
-<tr><td class="val" id="FT_PIXEL_MODE_LCD">FT_PIXEL_MODE_LCD</td><td class="desc">
-<p>An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_PIXEL_MODE_LCD_V">FT_PIXEL_MODE_LCD_V</td><td class="desc">
-<p>An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>.</p>
-</td></tr>
-<tr><td class="val" id="FT_PIXEL_MODE_BGRA">FT_PIXEL_MODE_BGRA</td><td class="desc">
-<p>[Since 2.5] An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity will be represented as &lsquo;00,00,80,80&rsquo;, not &lsquo;00,00,FF,80&rsquo;. See also <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_COLOR</a>.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Format">FT_Glyph_Format</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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_NONE">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_COMPOSITE">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_BITMAP">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_OUTLINE">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_PLOTTER">FT_GLYPH_FORMAT_PLOTTER</a>, 'p', 'l', 'o', 't' )
-
- } <b>FT_Glyph_Format</b>;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_Glyph_Format</b>' values instead. */
-#define ft_glyph_format_none <a href="ft2-basic_types.html#FT_GLYPH_FORMAT_NONE">FT_GLYPH_FORMAT_NONE</a>
-#define ft_glyph_format_composite <a href="ft2-basic_types.html#FT_GLYPH_FORMAT_COMPOSITE">FT_GLYPH_FORMAT_COMPOSITE</a>
-#define ft_glyph_format_bitmap <a href="ft2-basic_types.html#FT_GLYPH_FORMAT_BITMAP">FT_GLYPH_FORMAT_BITMAP</a>
-#define ft_glyph_format_outline <a href="ft2-basic_types.html#FT_GLYPH_FORMAT_OUTLINE">FT_GLYPH_FORMAT_OUTLINE</a>
-#define ft_glyph_format_plotter <a href="ft2-basic_types.html#FT_GLYPH_FORMAT_PLOTTER">FT_GLYPH_FORMAT_PLOTTER</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_GLYPH_FORMAT_NONE">FT_GLYPH_FORMAT_NONE</td><td class="desc">
-<p>The value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr><td class="val" id="FT_GLYPH_FORMAT_COMPOSITE">FT_GLYPH_FORMAT_COMPOSITE</td><td class="desc">
-<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><td class="val" id="FT_GLYPH_FORMAT_BITMAP">FT_GLYPH_FORMAT_BITMAP</td><td class="desc">
-<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><td class="val" id="FT_GLYPH_FORMAT_OUTLINE">FT_GLYPH_FORMAT_OUTLINE</td><td class="desc">
-<p>The glyph image is a vectorial outline made of line segments and Bezier 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><td class="val" id="FT_GLYPH_FORMAT_PLOTTER">FT_GLYPH_FORMAT_PLOTTER</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IMAGE_TAG">FT_IMAGE_TAG</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>This macro converts four-letter tags to an unsigned long type.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-bdf_fonts.html b/freetype/docs/reference/ft2-bdf_fonts.html
deleted file mode 100644
index f11cb21c..00000000
--- a/freetype/docs/reference/ft2-bdf_fonts.html
+++ /dev/null
@@ -1,280 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="bdf_fonts">BDF and PCF Files</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#BDF_PropertyType">BDF_PropertyType</a></td><td><a href="#BDF_PropertyRec">BDF_PropertyRec</a></td><td><a href="#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td></tr>
-<tr><td><a href="#BDF_Property">BDF_Property</a></td><td><a href="#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of functions specific to BDF and PCF fonts.</p>
-
-<div class="section">
-<h3 id="BDF_PropertyType">BDF_PropertyType</h3>
-<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> BDF_PropertyType_
- {
- <a href="ft2-bdf_fonts.html#BDF_PROPERTY_TYPE_NONE">BDF_PROPERTY_TYPE_NONE</a> = 0,
- <a href="ft2-bdf_fonts.html#BDF_PROPERTY_TYPE_ATOM">BDF_PROPERTY_TYPE_ATOM</a> = 1,
- <a href="ft2-bdf_fonts.html#BDF_PROPERTY_TYPE_INTEGER">BDF_PROPERTY_TYPE_INTEGER</a> = 2,
- <a href="ft2-bdf_fonts.html#BDF_PROPERTY_TYPE_CARDINAL">BDF_PROPERTY_TYPE_CARDINAL</a> = 3
-
- } <b>BDF_PropertyType</b>;
-</pre>
-
-<p>A list of BDF property types.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="BDF_PROPERTY_TYPE_NONE">BDF_PROPERTY_TYPE_NONE</td><td class="desc">
-<p>Value&nbsp;0 is used to indicate a missing property.</p>
-</td></tr>
-<tr><td class="val" id="BDF_PROPERTY_TYPE_ATOM">BDF_PROPERTY_TYPE_ATOM</td><td class="desc">
-<p>Property is a string atom.</p>
-</td></tr>
-<tr><td class="val" id="BDF_PROPERTY_TYPE_INTEGER">BDF_PROPERTY_TYPE_INTEGER</td><td class="desc">
-<p>Property is a 32-bit signed integer.</p>
-</td></tr>
-<tr><td class="val" id="BDF_PROPERTY_TYPE_CARDINAL">BDF_PROPERTY_TYPE_CARDINAL</td><td class="desc">
-<p>Property is a 32-bit unsigned integer.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="BDF_Property">BDF_Property</h3>
-<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_* <b>BDF_Property</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="BDF_PropertyRec">BDF_PropertyRec</h3>
-<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_
- {
- <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PropertyType</a> 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>
-
-<p>This structure models a given BDF/PCF property.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="type">type</td><td class="desc">
-<p>The property type.</p>
-</td></tr>
-<tr><td class="val" id="u.atom">u.atom</td><td class="desc">
-<p>The atom string, if type is <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_ATOM</a>. May be NULL, indicating an empty string.</p>
-</td></tr>
-<tr><td class="val" id="u.integer">u.integer</td><td class="desc">
-<p>A signed integer, if type is <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a>.</p>
-</td></tr>
-<tr><td class="val" id="u.cardinal">u.cardinal</td><td class="desc">
-<p>An unsigned integer, if type is <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a>.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</h3>
-<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
-<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>
-
-<p>Retrieve a BDF font character set identity, according to the BDF specification.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acharset_encoding">acharset_encoding</td><td class="desc">
-<p>Charset encoding, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr><td class="val" id="acharset_registry">acharset_registry</td><td class="desc">
-<p>Charset registry, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function only works with BDF faces, returning an error otherwise.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_BDF_Property">FT_Get_BDF_Property</h3>
-<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
-<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>
-
-<p>Retrieve a BDF property from a BDF or PCF font file.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="name">name</td><td class="desc">
-<p>The property name.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aproperty">aproperty</td><td class="desc">
-<p>The property.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>A &lsquo;property&rsquo; is a either key-value pair within the STARTPROPERTIES ... ENDPROPERTIES block of a BDF font or a key-value pair from the &lsquo;info-&gt;props&rsquo; array within a &lsquo;FontRec&rsquo; structure of a PCF font.</p>
-<p>Integer properties are always stored as &lsquo;signed&rsquo; within PCF fonts; consequently, <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a> is a possible return value for BDF fonts only.</p>
-<p>In case of error, &lsquo;aproperty-&gt;type&rsquo; is always set to <a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_NONE</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-bitmap_handling.html b/freetype/docs/reference/ft2-bitmap_handling.html
deleted file mode 100644
index d80acc47..00000000
--- a/freetype/docs/reference/ft2-bitmap_handling.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="bitmap_handling">Bitmap Handling</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Bitmap_Init">FT_Bitmap_Init</a></td><td><a href="#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a></td></tr>
-<tr><td><a href="#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="#FT_Bitmap_Done">FT_Bitmap_Done</a></td></tr>
-</table>
-
-
-<p>This section contains functions for handling <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> objects. Note that none of the functions changes the bitmap's &lsquo;flow&rsquo; (as indicated by the sign of the &lsquo;pitch&rsquo; field in &lsquo;FT_Bitmap&rsquo;).</p>
-
-<div class="section">
-<h3 id="FT_Bitmap_Init">FT_Bitmap_Init</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<pre>
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Bitmap_Init</b>( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
-
-
- /* deprecated */
- FT_EXPORT( <span class="keyword">void</span> )
- FT_Bitmap_New( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
-</pre>
-
-<p>Initialize a pointer to an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="abitmap">abitmap</td><td class="desc">
-<p>A pointer to the bitmap structure.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>A deprecated name for the same function is &lsquo;FT_Bitmap_New&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap_Copy">FT_Bitmap_Copy</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<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>
-
-<p>Copy a bitmap into another one.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a library object.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>A handle to the source bitmap.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="target">target</td><td class="desc">
-<p>A handle to the target bitmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap_Embolden">FT_Bitmap_Embolden</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a library object.</p>
-</td></tr>
-<tr><td class="val" id="xStrength">xStrength</td><td class="desc">
-<p>How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format.</p>
-</td></tr>
-<tr><td class="val" id="yStrength">yStrength</td><td class="desc">
-<p>How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
-<p>A handle to the target bitmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 <a href="ft2-bitmap_handling.html#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a> on the slot first.</p>
-<p>Bitmaps in <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a> and <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>@ format are converted to <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a> format (i.e., 8bpp).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap_Convert">FT_Bitmap_Convert</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<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>
-
-<p>Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to a bitmap object with depth 8bpp, making the number of used bytes line (a.k.a. the &lsquo;pitch&rsquo;) a multiple of &lsquo;alignment&rsquo;.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a library object.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>The source bitmap.</p>
-</td></tr>
-<tr><td class="val" id="alignment">alignment</td><td class="desc">
-<p>The pitch of the bitmap is a multiple of this parameter. Common values are 1, 2, or 4.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="target">target</td><td class="desc">
-<p>The target bitmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_GlyphSlot_Own_Bitmap</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> slot );
-</pre>
-
-<p>Make sure that a glyph slot owns &lsquo;slot-&gt;bitmap&rsquo;.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="slot">slot</td><td class="desc">
-<p>The glyph slot.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function is to be used in combination with <a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Bitmap_Done">FT_Bitmap_Done</h3>
-<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
-<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>
-
-<p>Destroy a bitmap object initialized with <a href="ft2-bitmap_handling.html#FT_Bitmap_Init">FT_Bitmap_Init</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a library object.</p>
-</td></tr>
-<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
-<p>The bitmap object to be freed.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The &lsquo;library&rsquo; argument is taken to have access to FreeType's memory handling functions.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-bzip2.html b/freetype/docs/reference/ft2-bzip2.html
deleted file mode 100644
index bb787cff..00000000
--- a/freetype/docs/reference/ft2-bzip2.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="bzip2">BZIP2 Streams</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Stream_OpenBzip2">FT_Stream_OpenBzip2</a></td><td></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of Bzip2-specific functions.</p>
-
-<div class="section">
-<h3 id="FT_Stream_OpenBzip2">FT_Stream_OpenBzip2</h3>
-<p>Defined in FT_BZIP2_H (freetype/ftbzip2.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stream_OpenBzip2</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>
-
-<p>Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed &lsquo;*.pcf.bz2&rsquo; fonts that come with XFree86.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>The target embedding stream.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>The source stream.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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, bzip2 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 bzip2 compressed 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 bzip2 support.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-cache_subsystem.html b/freetype/docs/reference/ft2-cache_subsystem.html
deleted file mode 100644
index d2d60697..00000000
--- a/freetype/docs/reference/ft2-cache_subsystem.html
+++ /dev/null
@@ -1,1010 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="cache_subsystem">Cache Sub-System</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FTC_Manager">FTC_Manager</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FTC_FaceID">FTC_FaceID</a></td><td><a href="#FTC_SBit">FTC_SBit</a></td></tr>
-<tr><td><a href="#FTC_Face_Requester">FTC_Face_Requester</a></td><td><a href="#FTC_SBitCache">FTC_SBitCache</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
-<tr><td><a href="#FTC_Manager_New">FTC_Manager_New</a></td><td><a href="#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
-<tr><td><a href="#FTC_Manager_Reset">FTC_Manager_Reset</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FTC_Manager_Done">FTC_Manager_Done</a></td><td><a href="#FTC_CMapCache">FTC_CMapCache</a></td></tr>
-<tr><td><a href="#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td><td><a href="#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
-<tr><td><a href="#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td><td><a href="#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
-<tr><td><a href="#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FTC_ScalerRec">FTC_ScalerRec</a></td></tr>
-<tr><td><a href="#FTC_Node">FTC_Node</a></td><td><a href="#FTC_Scaler">FTC_Scaler</a></td></tr>
-<tr><td><a href="#FTC_Node_Unref">FTC_Node_Unref</a></td><td><a href="#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FTC_ImageType">FTC_ImageType</a></td></tr>
-<tr><td><a href="#FTC_ImageCache">FTC_ImageCache</a></td><td><a href="#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
-<tr><td><a href="#FTC_ImageCache_New">FTC_ImageCache_New</a></td><td><a href="#FTC_SBitRec">FTC_SBitRec</a></td></tr>
-<tr><td><a href="#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td><td><a href="#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
-</table>
-
-
-<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 an <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>. To monitor termination of face objects, the finalizer callback in the &lsquo;generic&rsquo; field of the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object can be used, which might also be used to store the <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> of the face.</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>
-
-<div class="section">
-<h3 id="FTC_Manager">FTC_Manager</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ManagerRec_* <b>FTC_Manager</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_FaceID">FTC_FaceID</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> <b>FTC_FaceID</b>;
-</pre>
-
-<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>
-
-<h4>note</h4>
-<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 that 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Face_Requester">FTC_Face_Requester</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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> req_data,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a>* aface );
-</pre>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The face ID to resolve.</p>
-</td></tr>
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr><td class="val" id="req_data">req_data</td><td class="desc">
-<p>Application-provided request data (see note below).</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<p>A new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_New">FTC_Manager_New</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Create a new cache manager.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>The parent FreeType library handle to use.</p>
-</td></tr>
-<tr><td class="val" id="max_faces">max_faces</td><td class="desc">
-<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><td class="val" id="max_sizes">max_sizes</td><td class="desc">
-<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><td class="val" id="max_bytes">max_bytes</td><td class="desc">
-<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><td class="val" id="requester">requester</td><td class="desc">
-<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><td class="val" id="req_data">req_data</td><td class="desc">
-<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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="amanager">amanager</td><td class="desc">
-<p>A handle to a new manager object. 0&nbsp;in case of failure.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_Reset">FTC_Manager_Reset</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the manager.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_Done">FTC_Manager_Done</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Destroy a given manager after emptying it.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the target cache manager object.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_LookupFace">FTC_Manager_LookupFace</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the cache manager.</p>
-</td></tr>
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The ID of the face object.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<p>A handle to the face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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&nbsp;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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_LookupSize">FTC_Manager_LookupSize</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the cache manager.</p>
-</td></tr>
-<tr><td class="val" id="scaler">scaler</td><td class="desc">
-<p>A scaler handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="asize">asize</td><td class="desc">
-<p>A handle to the size object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>The cache manager handle.</p>
-</td></tr>
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> to be removed.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Node">FTC_Node</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_NodeRec_* <b>FTC_Node</b>;
-</pre>
-
-<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 look up 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Node_Unref">FTC_Node_Unref</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The cache node handle.</p>
-</td></tr>
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>The cache manager handle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageCache">FTC_ImageCache</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageCacheRec_* <b>FTC_ImageCache</b>;
-</pre>
-
-<p>A handle to a glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageCache_New">FTC_ImageCache_New</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Create a new glyph image cache.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>The parent manager for the image cache.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acache">acache</td><td class="desc">
-<p>A handle to the new glyph image cache object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Retrieve a given glyph image from a glyph image cache.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="cache">cache</td><td class="desc">
-<p>A handle to the source glyph image cache.</p>
-</td></tr>
-<tr><td class="val" id="type">type</td><td class="desc">
-<p>A pointer to a glyph image type descriptor.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index to retrieve.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
-<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><td class="val" id="anode">anode</td><td class="desc">
-<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBit">FTC_SBit</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_* <b>FTC_SBit</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBitCache">FTC_SBitCache</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitCacheRec_* <b>FTC_SBitCache</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBitCache_New">FTC_SBitCache_New</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Create a new cache to store small glyph bitmaps.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the source cache manager.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acache">acache</td><td class="desc">
-<p>A handle to the new sbit cache. NULL in case of error.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="cache">cache</td><td class="desc">
-<p>A handle to the source sbit cache.</p>
-</td></tr>
-<tr><td class="val" id="type">type</td><td class="desc">
-<p>A pointer to the glyph image type descriptor.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="sbit">sbit</td><td class="desc">
-<p>A handle to a small bitmap descriptor.</p>
-</td></tr>
-<tr><td class="val" id="anode">anode</td><td class="desc">
-<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_CMapCache">FTC_CMapCache</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_CMapCacheRec_* <b>FTC_CMapCache</b>;
-</pre>
-
-<p>An opaque handle used to model a charmap cache. This cache is to hold character codes -&gt; glyph indices mappings.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_CMapCache_New">FTC_CMapCache_New</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Create a new charmap cache.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="manager">manager</td><td class="desc">
-<p>A handle to the cache manager.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acache">acache</td><td class="desc">
-<p>A new cache handle. NULL in case of error.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Like all other caches, this one will be destroyed with the cache manager.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>Translate a character code into a glyph index, using the charmap cache.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="cache">cache</td><td class="desc">
-<p>A charmap cache handle.</p>
-</td></tr>
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The source face ID.</p>
-</td></tr>
-<tr><td class="val" id="cmap_index">cmap_index</td><td class="desc">
-<p>The index of the charmap in the source face. Any negative value means to use the cache <a href="ft2-base_interface.html#FT_Face">FT_Face</a>'s default charmap.</p>
-</td></tr>
-<tr><td class="val" id="char_code">char_code</td><td class="desc">
-<p>The character code (in the corresponding charmap).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Glyph index. 0&nbsp;means &lsquo;no glyph&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ScalerRec">FTC_ScalerRec</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The source face ID.</p>
-</td></tr>
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The character width.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The character height.</p>
-</td></tr>
-<tr><td class="val" id="pixel">pixel</td><td class="desc">
-<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><td class="val" id="x_res">x_res</td><td class="desc">
-<p>Only used when &lsquo;pixel&rsquo; is value&nbsp;0 to indicate the horizontal resolution in dpi.</p>
-</td></tr>
-<tr><td class="val" id="y_res">y_res</td><td class="desc">
-<p>Only used when &lsquo;pixel&rsquo; is value&nbsp;0 to indicate the vertical resolution in dpi.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_Scaler">FTC_Scaler</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_* <b>FTC_Scaler</b>;
-</pre>
-
-<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageTypeRec">FTC_ImageTypeRec</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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_UInt">FT_UInt</a> width;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> height;
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> flags;
-
- } <b>FTC_ImageTypeRec</b>;
-</pre>
-
-<p>A structure used to model the type of images in a glyph cache.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="face_id">face_id</td><td class="desc">
-<p>The face ID.</p>
-</td></tr>
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The width in pixels.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The height in pixels.</p>
-</td></tr>
-<tr><td class="val" id="flags">flags</td><td class="desc">
-<p>The load flags, as in <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageType">FTC_ImageType</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_* <b>FTC_ImageType</b>;
-</pre>
-
-<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="cache">cache</td><td class="desc">
-<p>A handle to the source glyph image cache.</p>
-</td></tr>
-<tr><td class="val" id="scaler">scaler</td><td class="desc">
-<p>A pointer to a scaler descriptor.</p>
-</td></tr>
-<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
-<p>The corresponding load flags.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index to retrieve.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
-<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><td class="val" id="anode">anode</td><td class="desc">
-<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>Calls to <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> and friends have no effect on cached glyphs; you should always use the FreeType cache API instead.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBitRec">FTC_SBitRec</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<p>A very compact structure used to describe a small glyph bitmap.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="width">width</td><td class="desc">
-<p>The bitmap width in pixels.</p>
-</td></tr>
-<tr><td class="val" id="height">height</td><td class="desc">
-<p>The bitmap height in pixels.</p>
-</td></tr>
-<tr><td class="val" id="left">left</td><td class="desc">
-<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><td class="val" id="top">top</td><td class="desc">
-<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><td class="val" id="format">format</td><td class="desc">
-<p>The format of the glyph bitmap (monochrome or gray).</p>
-</td></tr>
-<tr><td class="val" id="max_grays">max_grays</td><td class="desc">
-<p>Maximum gray level value (in the range 1 to&nbsp;255).</p>
-</td></tr>
-<tr><td class="val" id="pitch">pitch</td><td class="desc">
-<p>The number of bytes per bitmap line. May be positive or negative.</p>
-</td></tr>
-<tr><td class="val" id="xadvance">xadvance</td><td class="desc">
-<p>The horizontal advance width in pixels.</p>
-</td></tr>
-<tr><td class="val" id="yadvance">yadvance</td><td class="desc">
-<p>The vertical advance height in pixels.</p>
-</td></tr>
-<tr><td class="val" id="buffer">buffer</td><td class="desc">
-<p>A pointer to the bitmap pixels.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</h3>
-<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="cache">cache</td><td class="desc">
-<p>A handle to the source sbit cache.</p>
-</td></tr>
-<tr><td class="val" id="scaler">scaler</td><td class="desc">
-<p>A pointer to the scaler descriptor.</p>
-</td></tr>
-<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
-<p>The corresponding load flags.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="sbit">sbit</td><td class="desc">
-<p>A handle to a small bitmap descriptor.</p>
-</td></tr>
-<tr><td class="val" id="anode">anode</td><td class="desc">
-<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-cff_driver.html b/freetype/docs/reference/ft2-cff_driver.html
deleted file mode 100644
index 6e7c1d96..00000000
--- a/freetype/docs/reference/ft2-cff_driver.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="cff_driver">The CFF driver</h1>
-
-<p>While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>.</p>
-<p>The CFF driver's module name is &lsquo;cff&rsquo;.</p>
-<p>Available properties are <a href="ft2-properties.html#hinting-engine">hinting-engine</a>, <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a>, <a href="ft2-properties.html#darkening-parameters">darkening-parameters</a>, and <a href="ft2-properties.html#random-seed">random-seed</a>, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
-<p><b>Hinting</b> <b>and</b> <b>antialiasing</b> <b>principles</b> <b>of</b> <b>the</b> <b>new</b> <b>engine</b></p>
-<p>The rasterizer is positioning horizontal features (e.g., ascender height &amp; x-height, or crossbars) on the pixel grid and minimizing the amount of antialiasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, &lsquo;antialiasing&rsquo; means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance.</p>
-<p>There are two principles behind this approach.</p>
-<p>1) No hinting in the horizontal direction: Unlike &lsquo;superhinted&rsquo; TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is &lsquo;faithful to the design&rsquo; in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied.</p>
-<p>One of the reasons to not hint horizontally is antialiasing for LCD screens: The pixel geometry of modern displays supplies three vertical subpixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the subpixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale antialiasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would.</p>
-<p>2) Alignment in the vertical direction: Weights and spacing along the y&nbsp;axis are less critical; what is much more important is the visual alignment of related features (like cap-height and x-height). The sense of alignment for these is enhanced by the sharpness of grid-fit edges, while the cruder vertical resolution (full pixels instead of 1/3 pixels) is less of a problem.</p>
-<p>On the technical side, horizontal alignment zones for ascender, x-height, and other important height values (traditionally called &lsquo;blue zones&rsquo;) as defined in the font are positioned independently, each being rounded to the nearest pixel edge, taking care of overshoot suppression at small sizes, stem darkening, and scaling.</p>
-<p>Hstems (this is, hint values defined in the font to help align horizontal features) that fall within a blue zone are said to be &lsquo;captured&rsquo; and are aligned to that zone. Uncaptured stems are moved in one of four ways, top edge up or down, bottom edge up or down. Unless there are conflicting hstems, the smallest movement is taken to minimize distortion.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-cid_fonts.html b/freetype/docs/reference/ft2-cid_fonts.html
deleted file mode 100644
index 9dcab71b..00000000
--- a/freetype/docs/reference/ft2-cid_fonts.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="cid_fonts">CID Fonts</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td></tr>
-<tr><td><a href="#FT_Get_CID_Is_Internally_CID_Keyed">FT_Get_CID_Is_Internally_CID_Keyed</a></td></tr>
-<tr><td><a href="#FT_Get_CID_From_Glyph_Index">FT_Get_CID_From_Glyph_Index</a></td></tr>
-</table>
-
-
-<p>This section contains the declaration of CID-keyed font specific functions.</p>
-
-<div class="section">
-<h3 id="FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</h3>
-<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
-<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>
-
-<p>Retrieve the Registry/Ordering/Supplement triple (also known as the "R/O/S") from a CID-keyed font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="registry">registry</td><td class="desc">
-<p>The registry, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr><td class="val" id="ordering">ordering</td><td class="desc">
-<p>The ordering, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr><td class="val" id="supplement">supplement</td><td class="desc">
-<p>The supplement.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function only works with CID faces, returning an error otherwise.</p>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_CID_Is_Internally_CID_Keyed">FT_Get_CID_Is_Internally_CID_Keyed</h3>
-<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_CID_Is_Internally_CID_Keyed</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> *is_cid );
-</pre>
-
-<p>Retrieve the type of the input face, CID keyed or not. In contrast to the <a href="ft2-base_interface.html#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a> macro this function returns successfully also for CID-keyed fonts in an SFNT wrapper.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="is_cid">is_cid</td><td class="desc">
-<p>The type of the face as an <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a>.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function only works with CID faces and OpenType fonts, returning an error otherwise.</p>
-
-<h4>since</h4>
-<p>2.3.9</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_CID_From_Glyph_Index">FT_Get_CID_From_Glyph_Index</h3>
-<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_CID_From_Glyph_Index</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_UInt">FT_UInt</a> *cid );
-</pre>
-
-<p>Retrieve the CID of the input glyph index.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
-<p>The input glyph index.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="cid">cid</td><td class="desc">
-<p>The CID as an <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a>.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function only works with CID faces and OpenType fonts, returning an error otherwise.</p>
-
-<h4>since</h4>
-<p>2.3.9</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-computations.html b/freetype/docs/reference/ft2-computations.html
deleted file mode 100644
index d615dcfa..00000000
--- a/freetype/docs/reference/ft2-computations.html
+++ /dev/null
@@ -1,707 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="computations">Computations</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_MulDiv">FT_MulDiv</a></td><td>&nbsp;</td><td><a href="#FT_Atan2">FT_Atan2</a></td></tr>
-<tr><td><a href="#FT_MulFix">FT_MulFix</a></td><td><a href="#FT_Angle">FT_Angle</a></td><td><a href="#FT_Angle_Diff">FT_Angle_Diff</a></td></tr>
-<tr><td><a href="#FT_DivFix">FT_DivFix</a></td><td><a href="#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
-<tr><td><a href="#FT_RoundFix">FT_RoundFix</a></td><td><a href="#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
-<tr><td><a href="#FT_CeilFix">FT_CeilFix</a></td><td><a href="#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="#FT_Vector_Length">FT_Vector_Length</a></td></tr>
-<tr><td><a href="#FT_FloorFix">FT_FloorFix</a></td><td><a href="#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td><a href="#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
-<tr><td><a href="#FT_Vector_Transform">FT_Vector_Transform</a></td><td><a href="#FT_Sin">FT_Sin</a></td><td><a href="#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
-<tr><td><a href="#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td><a href="#FT_Cos">FT_Cos</a></td><td></td></tr>
-<tr><td><a href="#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td><a href="#FT_Tan">FT_Tan</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors.</p>
-
-<div class="section">
-<h3 id="FT_MulDiv">FT_MulDiv</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Compute &lsquo;(a*b)/c&rsquo; with maximum accuracy, using 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The first multiplier.</p>
-</td></tr>
-<tr><td class="val" id="b">b</td><td class="desc">
-<p>The second multiplier.</p>
-</td></tr>
-<tr><td class="val" id="c">c</td><td class="desc">
-<p>The divisor.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MulFix">FT_MulFix</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Compute &lsquo;(a*b)/0x10000&rsquo; with maximum accuracy. Its main use is to multiply a given value by a 16.16 fixed-point factor.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The first multiplier.</p>
-</td></tr>
-<tr><td class="val" id="b">b</td><td class="desc">
-<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The result of &lsquo;(a*b)/0x10000&rsquo;.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_DivFix">FT_DivFix</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Compute &lsquo;(a*0x10000)/b&rsquo; with maximum accuracy. Its main use is to divide a given value by a 16.16 fixed-point factor.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The numerator.</p>
-</td></tr>
-<tr><td class="val" id="b">b</td><td class="desc">
-<p>The denominator. Use a 16.16 factor here.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The result of &lsquo;(a*0x10000)/b&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_RoundFix">FT_RoundFix</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Round a 16.16 fixed number.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The number to be rounded.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>&lsquo;a&rsquo; rounded to the nearest 16.16 fixed integer, halfway cases away from zero.</p>
-
-<h4>note</h4>
-<p>The function uses wrap-around arithmetic.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CeilFix">FT_CeilFix</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Compute the smallest following integer of a 16.16 fixed number.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The number for which the ceiling function is to be computed.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>&lsquo;a&rsquo; rounded towards plus infinity.</p>
-
-<h4>note</h4>
-<p>The function uses wrap-around arithmetic.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FloorFix">FT_FloorFix</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Compute the largest previous integer of a 16.16 fixed number.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>The number for which the floor function is to be computed.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>&lsquo;a&rsquo; rounded towards minus infinity.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_Transform">FT_Vector_Transform</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Transform a single vector through a 2x2 matrix.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="vector">vector</td><td class="desc">
-<p>The target vector to transform.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="matrix">matrix</td><td class="desc">
-<p>A pointer to the source 2x2 matrix.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The result is undefined if either &lsquo;vector&rsquo; or &lsquo;matrix&rsquo; is invalid.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Matrix_Multiply">FT_Matrix_Multiply</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Perform the matrix operation &lsquo;b = a*b&rsquo;.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="a">a</td><td class="desc">
-<p>A pointer to matrix &lsquo;a&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="b">b</td><td class="desc">
-<p>A pointer to matrix &lsquo;b&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The result is undefined if either &lsquo;a&rsquo; or &lsquo;b&rsquo; is zero.</p>
-<p>Since the function uses wrap-around arithmetic, results become meaningless if the arguments are very large.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Matrix_Invert">FT_Matrix_Invert</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Invert a 2x2 matrix. Return an error if it can't be inverted.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="matrix">matrix</td><td class="desc">
-<p>A pointer to the target matrix. Remains untouched in case of error.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Angle">FT_Angle</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> <b>FT_Angle</b>;
-</pre>
-
-<p>This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed-point value expressed in degrees.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ANGLE_PI">FT_ANGLE_PI</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<pre>
-#define <b>FT_ANGLE_PI</b> ( 180L &lt;&lt; 16 )
-</pre>
-
-<p>The angle pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ANGLE_2PI">FT_ANGLE_2PI</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<pre>
-#define <b>FT_ANGLE_2PI</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> * 2 )
-</pre>
-
-<p>The angle 2*pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ANGLE_PI2">FT_ANGLE_PI2</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<pre>
-#define <b>FT_ANGLE_PI2</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 2 )
-</pre>
-
-<p>The angle pi/2 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ANGLE_PI4">FT_ANGLE_PI4</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<pre>
-#define <b>FT_ANGLE_PI4</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 4 )
-</pre>
-
-<p>The angle pi/4 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Sin">FT_Sin</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the sinus of a given angle in fixed-point format.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The input angle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The sinus value.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Cos">FT_Cos</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the cosinus of a given angle in fixed-point format.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The input angle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The cosinus value.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Tan">FT_Tan</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the tangent of a given angle in fixed-point format.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The input angle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The tangent value.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Atan2">FT_Atan2</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="x">x</td><td class="desc">
-<p>The horizontal vector coordinate.</p>
-</td></tr>
-<tr><td class="val" id="y">y</td><td class="desc">
-<p>The vertical vector coordinate.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The arc-tangent value (i.e. angle).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Angle_Diff">FT_Angle_Diff</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the difference between two angles. The result is always constrained to the ]-PI..PI] interval.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle1">angle1</td><td class="desc">
-<p>First angle.</p>
-</td></tr>
-<tr><td class="val" id="angle2">angle2</td><td class="desc">
-<p>Second angle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Constrained value of &lsquo;value2-value1&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_Unit">FT_Vector_Unit</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the unit vector corresponding to a given angle. After the call, the value of &lsquo;vec.x&rsquo; will be &lsquo;cos(angle)&rsquo;, and the value of &lsquo;vec.y&rsquo; will be &lsquo;sin(angle)&rsquo;.</p>
-<p>This function is useful to retrieve both the sinus and cosinus of a given angle quickly.</p>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="vec">vec</td><td class="desc">
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The input angle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_Rotate">FT_Vector_Rotate</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Rotate a vector by a given angle.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="vec">vec</td><td class="desc">
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The input angle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_Length">FT_Vector_Length</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Return the length of a given vector.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="vec">vec</td><td class="desc">
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The vector length, expressed in the same units that the original vector coordinates.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_Polarize">FT_Vector_Polarize</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Compute both the length and angle of a given vector.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="vec">vec</td><td class="desc">
-<p>The address of source vector.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="length">length</td><td class="desc">
-<p>The vector length.</p>
-</td></tr>
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The vector angle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Vector_From_Polar">FT_Vector_From_Polar</h3>
-<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
-<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>
-
-<p>Compute vector coordinates from a length and angle.</p>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="vec">vec</td><td class="desc">
-<p>The address of source vector.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="length">length</td><td class="desc">
-<p>The vector length.</p>
-</td></tr>
-<tr><td class="val" id="angle">angle</td><td class="desc">
-<p>The vector angle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-error_code_values.html b/freetype/docs/reference/ft2-error_code_values.html
deleted file mode 100644
index f53f6cd3..00000000
--- a/freetype/docs/reference/ft2-error_code_values.html
+++ /dev/null
@@ -1,343 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="error_code_values">Error Code Values</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Err_XXX">FT_Err_XXX</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
-</table>
-
-
-<p>The list below is taken verbatim from the file &lsquo;fterrdef.h&rsquo; (loaded automatically by including &lsquo;FT_FREETYPE_H&rsquo;). The first argument of the &lsquo;FT_ERROR_DEF_&rsquo; macro is the error label; by default, the prefix &lsquo;FT_Err_&rsquo; gets added so that you get error names like &lsquo;FT_Err_Cannot_Open_Resource&rsquo;. The second argument is the error code, and the last argument an error string, which is not used by FreeType.</p>
-<p>Within your application you should <b>only</b> use error names and <b>never</b> its numeric values! The latter might (and actually do) change in forthcoming FreeType versions.</p>
-<p>Macro &lsquo;FT_NOERRORDEF_&rsquo; defines &lsquo;FT_Err_Ok&rsquo;, which is always zero. See the &lsquo;Error Enumerations&rsquo; subsection how to automatically generate a list of error strings.</p>
-
-<div class="section">
-<h3 id="FT_Err_XXX">FT_Err_XXX</h3>
-<pre>
- /* generic errors */
-
- FT_NOERRORDEF_( Ok, 0x00,
- "no error" )
-
- FT_ERRORDEF_( Cannot_Open_Resource, 0x01,
- "cannot open resource" )
- FT_ERRORDEF_( Unknown_File_Format, 0x02,
- "unknown file format" )
- FT_ERRORDEF_( Invalid_File_Format, 0x03,
- "broken file" )
- FT_ERRORDEF_( Invalid_Version, 0x04,
- "invalid FreeType version" )
- FT_ERRORDEF_( Lower_Module_Version, 0x05,
- "module version is too low" )
- FT_ERRORDEF_( Invalid_Argument, 0x06,
- "invalid argument" )
- FT_ERRORDEF_( Unimplemented_Feature, 0x07,
- "unimplemented feature" )
- FT_ERRORDEF_( Invalid_Table, 0x08,
- "broken table" )
- FT_ERRORDEF_( Invalid_Offset, 0x09,
- "broken offset within table" )
- FT_ERRORDEF_( Array_Too_Large, 0x0A,
- "array allocation size too large" )
- FT_ERRORDEF_( Missing_Module, 0x0B,
- "missing module" )
- FT_ERRORDEF_( Missing_Property, 0x0C,
- "missing property" )
-
- /* glyph/character errors */
-
- FT_ERRORDEF_( Invalid_Glyph_Index, 0x10,
- "invalid glyph index" )
- FT_ERRORDEF_( Invalid_Character_Code, 0x11,
- "invalid character code" )
- FT_ERRORDEF_( Invalid_Glyph_Format, 0x12,
- "unsupported glyph image format" )
- FT_ERRORDEF_( Cannot_Render_Glyph, 0x13,
- "cannot render this glyph format" )
- FT_ERRORDEF_( Invalid_Outline, 0x14,
- "invalid outline" )
- FT_ERRORDEF_( Invalid_Composite, 0x15,
- "invalid composite glyph" )
- FT_ERRORDEF_( Too_Many_Hints, 0x16,
- "too many hints" )
- FT_ERRORDEF_( Invalid_Pixel_Size, 0x17,
- "invalid pixel size" )
-
- /* handle errors */
-
- FT_ERRORDEF_( Invalid_Handle, 0x20,
- "invalid object handle" )
- FT_ERRORDEF_( Invalid_Library_Handle, 0x21,
- "invalid library handle" )
- FT_ERRORDEF_( Invalid_Driver_Handle, 0x22,
- "invalid module handle" )
- FT_ERRORDEF_( Invalid_Face_Handle, 0x23,
- "invalid face handle" )
- FT_ERRORDEF_( Invalid_Size_Handle, 0x24,
- "invalid size handle" )
- FT_ERRORDEF_( Invalid_Slot_Handle, 0x25,
- "invalid glyph slot handle" )
- FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26,
- "invalid charmap handle" )
- FT_ERRORDEF_( Invalid_Cache_Handle, 0x27,
- "invalid cache manager handle" )
- FT_ERRORDEF_( Invalid_Stream_Handle, 0x28,
- "invalid stream handle" )
-
- /* driver errors */
-
- FT_ERRORDEF_( Too_Many_Drivers, 0x30,
- "too many modules" )
- FT_ERRORDEF_( Too_Many_Extensions, 0x31,
- "too many extensions" )
-
- /* memory errors */
-
- FT_ERRORDEF_( Out_Of_Memory, 0x40,
- "out of memory" )
- FT_ERRORDEF_( Unlisted_Object, 0x41,
- "unlisted object" )
-
- /* stream errors */
-
- FT_ERRORDEF_( Cannot_Open_Stream, 0x51,
- "cannot open stream" )
- FT_ERRORDEF_( Invalid_Stream_Seek, 0x52,
- "invalid stream seek" )
- FT_ERRORDEF_( Invalid_Stream_Skip, 0x53,
- "invalid stream skip" )
- FT_ERRORDEF_( Invalid_Stream_Read, 0x54,
- "invalid stream read" )
- FT_ERRORDEF_( Invalid_Stream_Operation, 0x55,
- "invalid stream operation" )
- FT_ERRORDEF_( Invalid_Frame_Operation, 0x56,
- "invalid frame operation" )
- FT_ERRORDEF_( Nested_Frame_Access, 0x57,
- "nested frame access" )
- FT_ERRORDEF_( Invalid_Frame_Read, 0x58,
- "invalid frame read" )
-
- /* raster errors */
-
- FT_ERRORDEF_( Raster_Uninitialized, 0x60,
- "raster uninitialized" )
- FT_ERRORDEF_( Raster_Corrupted, 0x61,
- "raster corrupted" )
- FT_ERRORDEF_( Raster_Overflow, 0x62,
- "raster overflow" )
- FT_ERRORDEF_( Raster_Negative_Height, 0x63,
- "negative height while rastering" )
-
- /* cache errors */
-
- FT_ERRORDEF_( Too_Many_Caches, 0x70,
- "too many registered caches" )
-
- /* TrueType and SFNT errors */
-
- FT_ERRORDEF_( Invalid_Opcode, 0x80,
- "invalid opcode" )
- FT_ERRORDEF_( Too_Few_Arguments, 0x81,
- "too few arguments" )
- FT_ERRORDEF_( Stack_Overflow, 0x82,
- "stack overflow" )
- FT_ERRORDEF_( Code_Overflow, 0x83,
- "code overflow" )
- FT_ERRORDEF_( Bad_Argument, 0x84,
- "bad argument" )
- FT_ERRORDEF_( Divide_By_Zero, 0x85,
- "division by zero" )
- FT_ERRORDEF_( Invalid_Reference, 0x86,
- "invalid reference" )
- FT_ERRORDEF_( Debug_OpCode, 0x87,
- "found debug opcode" )
- FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88,
- "found ENDF opcode in execution stream" )
- FT_ERRORDEF_( Nested_DEFS, 0x89,
- "nested DEFS" )
- FT_ERRORDEF_( Invalid_CodeRange, 0x8A,
- "invalid code range" )
- FT_ERRORDEF_( Execution_Too_Long, 0x8B,
- "execution context too <span class="keyword">long</span>" )
- FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C,
- "too many function definitions" )
- FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D,
- "too many instruction definitions" )
- FT_ERRORDEF_( Table_Missing, 0x8E,
- "SFNT font table missing" )
- FT_ERRORDEF_( Horiz_Header_Missing, 0x8F,
- "horizontal header (hhea) table missing" )
- FT_ERRORDEF_( Locations_Missing, 0x90,
- "locations (loca) table missing" )
- FT_ERRORDEF_( Name_Table_Missing, 0x91,
- "name table missing" )
- FT_ERRORDEF_( CMap_Table_Missing, 0x92,
- "character map (cmap) table missing" )
- FT_ERRORDEF_( Hmtx_Table_Missing, 0x93,
- "horizontal metrics (hmtx) table missing" )
- FT_ERRORDEF_( Post_Table_Missing, 0x94,
- "PostScript (post) table missing" )
- FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95,
- "invalid horizontal metrics" )
- FT_ERRORDEF_( Invalid_CharMap_Format, 0x96,
- "invalid character map (cmap) format" )
- FT_ERRORDEF_( Invalid_PPem, 0x97,
- "invalid ppem value" )
- FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98,
- "invalid vertical metrics" )
- FT_ERRORDEF_( Could_Not_Find_Context, 0x99,
- "could not find context" )
- FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A,
- "invalid PostScript (post) table format" )
- FT_ERRORDEF_( Invalid_Post_Table, 0x9B,
- "invalid PostScript (post) table" )
- FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C,
- "found FDEF or IDEF opcode in glyf bytecode" )
- FT_ERRORDEF_( Missing_Bitmap, 0x9D,
- "missing bitmap in strike" )
-
- /* CFF, CID, and Type 1 errors */
-
- FT_ERRORDEF_( Syntax_Error, 0xA0,
- "opcode syntax error" )
- FT_ERRORDEF_( Stack_Underflow, 0xA1,
- "argument stack underflow" )
- FT_ERRORDEF_( Ignore, 0xA2,
- "ignore" )
- FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3,
- "no Unicode glyph name found" )
- FT_ERRORDEF_( Glyph_Too_Big, 0xA4,
- "glyph too big for hinting" )
-
- /* BDF errors */
-
- FT_ERRORDEF_( Missing_Startfont_Field, 0xB0,
- "`STARTFONT' field missing" )
- FT_ERRORDEF_( Missing_Font_Field, 0xB1,
- "`FONT' field missing" )
- FT_ERRORDEF_( Missing_Size_Field, 0xB2,
- "`SIZE' field missing" )
- FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3,
- "`FONTBOUNDINGBOX' field missing" )
- FT_ERRORDEF_( Missing_Chars_Field, 0xB4,
- "`CHARS' field missing" )
- FT_ERRORDEF_( Missing_Startchar_Field, 0xB5,
- "`STARTCHAR' field missing" )
- FT_ERRORDEF_( Missing_Encoding_Field, 0xB6,
- "`ENCODING' field missing" )
- FT_ERRORDEF_( Missing_Bbx_Field, 0xB7,
- "`BBX' field missing" )
- FT_ERRORDEF_( Bbx_Too_Big, 0xB8,
- "`BBX' too big" )
- FT_ERRORDEF_( Corrupted_Font_Header, 0xB9,
- "Font header corrupted or missing fields" )
- FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA,
- "Font glyphs corrupted or missing fields" )
-</pre>
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-error_enumerations.html b/freetype/docs/reference/ft2-error_enumerations.html
deleted file mode 100644
index 91698023..00000000
--- a/freetype/docs/reference/ft2-error_enumerations.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="error_enumerations">Error Enumerations</h1>
-
-<p>The header file &lsquo;fterrors.h&rsquo; (which is automatically included by &lsquo;freetype.h&rsquo; defines the handling of FreeType's enumeration constants. It can also be used to generate error message strings with a small macro trick explained below.</p>
-<p><b>Error</b> <b>Formats</b></p>
-<p>The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be defined in &lsquo;ftoption.h&rsquo; in order to make the higher byte indicate the module where the error has happened (this is not compatible with standard builds of FreeType&nbsp;2, however). See the file &lsquo;ftmoderr.h&rsquo; for more details.</p>
-<p><b>Error</b> <b>Message</b> <b>Strings</b></p>
-<p>Error definitions are set up with special macros that allow client applications to build a table of error message strings. The strings are not included in a normal build of FreeType&nbsp;2 to save space (most client applications do not use them).</p>
-<p>To do so, you have to define the following macros before including this file.</p>
-<pre class="colored">
- FT_ERROR_START_LIST
-</pre>
-<p>This macro is called before anything else to define the start of the error list. It is followed by several FT_ERROR_DEF calls.</p>
-<pre class="colored">
- FT_ERROR_DEF( e, v, s )
-</pre>
-<p>This macro is called to define one single error. &lsquo;e&rsquo; is the error code identifier (e.g., &lsquo;Invalid_Argument&rsquo;), &lsquo;v&rsquo; is the error's numerical value, and &lsquo;s&rsquo; is the corresponding error string.</p>
-<pre class="colored">
- FT_ERROR_END_LIST
-</pre>
-<p>This macro ends the list.</p>
-<p>Additionally, you have to undefine &lsquo;FTERRORS_H_&rsquo; before #including this file.</p>
-<p>Here is a simple example.</p>
-<pre class="colored">
- #undef FTERRORS_H_
- #define FT_ERRORDEF( e, v, s ) { e, s },
- #define FT_ERROR_START_LIST {
- #define FT_ERROR_END_LIST { 0, NULL } };
-
- const struct
- {
- int err_code;
- const char* err_msg;
- } ft_errors[] =
-
- #include FT_ERRORS_H
-</pre>
-<p>Note that &lsquo;FT_Err_Ok&rsquo; is <i>not</i> defined with &lsquo;FT_ERRORDEF&rsquo; but with &lsquo;FT_NOERRORDEF&rsquo;; it is always zero.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-font_formats.html b/freetype/docs/reference/ft2-font_formats.html
deleted file mode 100644
index 54c4adfd..00000000
--- a/freetype/docs/reference/ft2-font_formats.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="font_formats">Font Formats</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Get_Font_Format">FT_Get_Font_Format</a></td><td></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Get_Font_Format">FT_Get_Font_Format</h3>
-<p>Defined in FT_FONT_FORMATS_H (freetype/ftfntfmt.h).</p>
-<pre>
- FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
- <b>FT_Get_Font_Format</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-
- /* deprecated */
- FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
- FT_Get_X11_Font_Format( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-</pre>
-
-<p>Return a string describing the format of a given face. 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>
-<p>The return value is suitable to be used as an X11 FONT_PROPERTY.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>Input face handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Font format string. NULL in case of error.</p>
-
-<h4>note</h4>
-<p>A deprecated name for the same function is &lsquo;FT_Get_X11_Font_Format&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-gasp_table.html b/freetype/docs/reference/ft2-gasp_table.html
deleted file mode 100644
index 3bb22ee3..00000000
--- a/freetype/docs/reference/ft2-gasp_table.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="gasp_table">Gasp Table</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_GASP_XXX">FT_GASP_XXX</a></td><td><a href="#FT_Get_Gasp">FT_Get_Gasp</a></td><td></td><td></td><td></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_GASP_XXX">FT_GASP_XXX</h3>
-<p>Defined in FT_GASP_H (freetype/ftgasp.h).</p>
-<pre>
-#define <a href="ft2-gasp_table.html#FT_GASP_NO_TABLE">FT_GASP_NO_TABLE</a> -1
-#define <a href="ft2-gasp_table.html#FT_GASP_DO_GRIDFIT">FT_GASP_DO_GRIDFIT</a> 0x01
-#define <a href="ft2-gasp_table.html#FT_GASP_DO_GRAY">FT_GASP_DO_GRAY</a> 0x02
-#define <a href="ft2-gasp_table.html#FT_GASP_SYMMETRIC_GRIDFIT">FT_GASP_SYMMETRIC_GRIDFIT</a> 0x04
-#define <a href="ft2-gasp_table.html#FT_GASP_SYMMETRIC_SMOOTHING">FT_GASP_SYMMETRIC_SMOOTHING</a> 0x08
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_GASP_NO_TABLE">FT_GASP_NO_TABLE</td><td class="desc">
-<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><td class="val" id="FT_GASP_DO_GRIDFIT">FT_GASP_DO_GRIDFIT</td><td class="desc">
-<p>Grid-fitting and hinting should be performed at the specified ppem. This <b>really</b> means TrueType bytecode interpretation. If this bit is not set, no hinting gets applied.</p>
-</td></tr>
-<tr><td class="val" id="FT_GASP_DO_GRAY">FT_GASP_DO_GRAY</td><td class="desc">
-<p>Anti-aliased rendering should be performed at the specified ppem. If not set, do monochrome rendering.</p>
-</td></tr>
-<tr><td class="val" id="FT_GASP_SYMMETRIC_SMOOTHING">FT_GASP_SYMMETRIC_SMOOTHING</td><td class="desc">
-<p>If set, smoothing along multiple axes must be used with ClearType.</p>
-</td></tr>
-<tr><td class="val" id="FT_GASP_SYMMETRIC_GRIDFIT">FT_GASP_SYMMETRIC_GRIDFIT</td><td class="desc">
-<p>Grid-fitting must be used with ClearType's symmetric smoothing.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The bit-flags &lsquo;FT_GASP_DO_GRIDFIT&rsquo; and &lsquo;FT_GASP_DO_GRAY&rsquo; are to be used for standard font rasterization only. Independently of that, &lsquo;FT_GASP_SYMMETRIC_SMOOTHING&rsquo; and &lsquo;FT_GASP_SYMMETRIC_GRIDFIT&rsquo; are to be used if ClearType is enabled (and &lsquo;FT_GASP_DO_GRIDFIT&rsquo; and &lsquo;FT_GASP_DO_GRAY&rsquo; are consequently ignored).</p>
-<p>&lsquo;ClearType&rsquo; is Microsoft's implementation of LCD rendering, partly protected by patents.</p>
-
-<h4>since</h4>
-<p>2.3.0</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Gasp">FT_Get_Gasp</h3>
-<p>Defined in FT_GASP_H (freetype/ftgasp.h).</p>
-<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>
-
-<p>For a TrueType or OpenType font file, return the rasterizer behaviour flags from the font's &lsquo;gasp&rsquo; table corresponding to a given character pixel size.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>The source face handle.</p>
-</td></tr>
-<tr><td class="val" id="ppem">ppem</td><td class="desc">
-<p>The vertical character pixel size.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<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>
-
-<h4>note</h4>
-<p>If you want to use the MM functionality of OpenType variation fonts (i.e., using <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> and friends), call this function <b>after</b> setting an instance since the return values can change.</p>
-
-<h4>since</h4>
-<p>2.3.0</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-glyph_management.html b/freetype/docs/reference/ft2-glyph_management.html
deleted file mode 100644
index 00ef43ab..00000000
--- a/freetype/docs/reference/ft2-glyph_management.html
+++ /dev/null
@@ -1,597 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="glyph_management">Glyph Management</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Glyph">FT_Glyph</a></td><td><a href="#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td></tr>
-<tr><td><a href="#FT_GlyphRec">FT_GlyphRec</a></td><td><a href="#FT_Get_Glyph">FT_Get_Glyph</a></td><td><a href="#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td></tr>
-<tr><td><a href="#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="#FT_Done_Glyph">FT_Done_Glyph</a></td></tr>
-<tr><td><a href="#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td><a href="#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td></td></tr>
-<tr><td><a href="#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Glyph">FT_Glyph</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_* <b>FT_Glyph</b>;
-</pre>
-
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GlyphRec">FT_GlyphRec</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed-point format.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the FreeType library object.</p>
-</td></tr>
-<tr><td class="val" id="clazz">clazz</td><td class="desc">
-<p>A pointer to the glyph's class. Private.</p>
-</td></tr>
-<tr><td class="val" id="format">format</td><td class="desc">
-<p>The format of the glyph's image.</p>
-</td></tr>
-<tr><td class="val" id="advance">advance</td><td class="desc">
-<p>A 16.16 vector that gives the glyph's advance width.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BitmapGlyph">FT_BitmapGlyph</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_* <b>FT_BitmapGlyph</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BitmapGlyphRec">FT_BitmapGlyphRec</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="root">root</td><td class="desc">
-<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
-</td></tr>
-<tr><td class="val" id="left">left</td><td class="desc">
-<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><td class="val" id="top">top</td><td class="desc">
-<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><td class="val" id="bitmap">bitmap</td><td class="desc">
-<p>A descriptor for the bitmap.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OutlineGlyph">FT_OutlineGlyph</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_* <b>FT_OutlineGlyph</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OutlineGlyphRec">FT_OutlineGlyphRec</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="root">root</td><td class="desc">
-<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A descriptor for the outline.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>You can typecast an <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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Glyph">FT_Get_Glyph</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>A function used to extract a glyph image from a slot. 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="slot">slot</td><td class="desc">
-<p>A handle to the source glyph slot.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
-<p>A handle to the glyph object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>Because &lsquo;*aglyph-&gt;advance.x&rsquo; and '*aglyph-&gt;advance.y' are 16.16 fixed-point numbers, &lsquo;slot-&gt;advance.x&rsquo; and &lsquo;slot-&gt;advance.y&rsquo; (which are in 26.6 fixed-point format) must be in the range ]-32768;32768[.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Copy">FT_Glyph_Copy</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>A handle to the source glyph object.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="target">target</td><td class="desc">
-<p>A handle to the target glyph object. 0&nbsp;in case of error.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Transform">FT_Glyph_Transform</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Transform a glyph image if its format is scalable.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="glyph">glyph</td><td class="desc">
-<p>A handle to the target glyph object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="matrix">matrix</td><td class="desc">
-<p>A pointer to a 2x2 matrix to apply.</p>
-</td></tr>
-<tr><td class="val" id="delta">delta</td><td class="desc">
-<p>A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code (if not 0, the glyph format is not scalable).</p>
-
-<h4>note</h4>
-<p>The 2x2 transformation matrix is also applied to the glyph's advance vector.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_BBox_Mode_
- {
- <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_UNSCALED">FT_GLYPH_BBOX_UNSCALED</a> = 0,
- <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_SUBPIXELS">FT_GLYPH_BBOX_SUBPIXELS</a> = 0,
- <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_GRIDFIT">FT_GLYPH_BBOX_GRIDFIT</a> = 1,
- <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_TRUNCATE">FT_GLYPH_BBOX_TRUNCATE</a> = 2,
- <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_PIXELS">FT_GLYPH_BBOX_PIXELS</a> = 3
-
- } <b>FT_Glyph_BBox_Mode</b>;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_Glyph_BBox_Mode</b>' values instead */
-#define ft_glyph_bbox_unscaled <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_UNSCALED">FT_GLYPH_BBOX_UNSCALED</a>
-#define ft_glyph_bbox_subpixels <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_SUBPIXELS">FT_GLYPH_BBOX_SUBPIXELS</a>
-#define ft_glyph_bbox_gridfit <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_GRIDFIT">FT_GLYPH_BBOX_GRIDFIT</a>
-#define ft_glyph_bbox_truncate <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_TRUNCATE">FT_GLYPH_BBOX_TRUNCATE</a>
-#define ft_glyph_bbox_pixels <a href="ft2-glyph_management.html#FT_GLYPH_BBOX_PIXELS">FT_GLYPH_BBOX_PIXELS</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_GLYPH_BBOX_UNSCALED">FT_GLYPH_BBOX_UNSCALED</td><td class="desc">
-<p>Return unscaled font units.</p>
-</td></tr>
-<tr><td class="val" id="FT_GLYPH_BBOX_SUBPIXELS">FT_GLYPH_BBOX_SUBPIXELS</td><td class="desc">
-<p>Return unfitted 26.6 coordinates.</p>
-</td></tr>
-<tr><td class="val" id="FT_GLYPH_BBOX_GRIDFIT">FT_GLYPH_BBOX_GRIDFIT</td><td class="desc">
-<p>Return grid-fitted 26.6 coordinates.</p>
-</td></tr>
-<tr><td class="val" id="FT_GLYPH_BBOX_TRUNCATE">FT_GLYPH_BBOX_TRUNCATE</td><td class="desc">
-<p>Return coordinates in integer pixels.</p>
-</td></tr>
-<tr><td class="val" id="FT_GLYPH_BBOX_PIXELS">FT_GLYPH_BBOX_PIXELS</td><td class="desc">
-<p>Return grid-fitted pixel coordinates.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Return a glyph's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="glyph">glyph</td><td class="desc">
-<p>A handle to the source glyph object.</p>
-</td></tr>
-<tr><td class="val" id="mode">mode</td><td class="desc">
-<p>The mode that indicates how to interpret the returned bounding box values.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acbox">acbox</td><td class="desc">
-<p>The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>If the font is tricky and the glyph has been loaded with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>, the resulting CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the CBox, which can be eventually converted back to font units.</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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Convert a given glyph object to a bitmap glyph object.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="the_glyph">the_glyph</td><td class="desc">
-<p>A pointer to a handle to the target glyph.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="render_mode">render_mode</td><td class="desc">
-<p>An enumeration that describes how the data is rendered.</p>
-</td></tr>
-<tr><td class="val" id="origin">origin</td><td class="desc">
-<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><td class="val" id="destroy">destroy</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function does nothing if the glyph format isn't scalable.</p>
-<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 <i>replaced</i> by this function (with newly allocated data). 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_DEFAULT );
-
- // extract glyph image
- error = FT_Get_Glyph( face-&gt;glyph, &amp;glyph );
-
- // convert to a bitmap (default render mode + destroying old)
- if ( glyph-&gt;format != FT_GLYPH_FORMAT_BITMAP )
- {
- error = FT_Glyph_To_Bitmap( &amp;glyph, FT_RENDER_MODE_NORMAL,
- 0, 1 );
- if ( error ) // `glyph' unchanged
- ...
- }
-
- // access bitmap content by typecasting
- glyph_bitmap = (FT_BitmapGlyph)glyph;
-
- // do funny stuff with it, like blitting/drawing
- ...
-
- // discard glyph image (bitmap or not)
- FT_Done_Glyph( glyph );
-</pre>
-<p></p>
-<p>Here another example, again without error handling:</p>
-<p></p>
-<pre class="colored">
- FT_Glyph glyphs[MAX_GLYPHS]
-
-
- ...
-
- for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
- error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
- FT_Get_Glyph ( face-&gt;glyph, &amp;glyph[idx] );
-
- ...
-
- for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
- {
- FT_Glyph bitmap = glyphs[idx];
-
-
- ...
-
- // after this call, `bitmap' no longer points into
- // the `glyphs' array (and the old value isn't destroyed)
- FT_Glyph_To_Bitmap( &amp;bitmap, FT_RENDER_MODE_MONO, 0, 0 );
-
- ...
-
- FT_Done_Glyph( bitmap );
- }
-
- ...
-
- for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
- FT_Done_Glyph( glyphs[idx] );
-</pre>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_Glyph">FT_Done_Glyph</h3>
-<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
-<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>
-
-<p>Destroy a given glyph.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="glyph">glyph</td><td class="desc">
-<p>A handle to the target glyph object.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-glyph_stroker.html b/freetype/docs/reference/ft2-glyph_stroker.html
deleted file mode 100644
index b1398107..00000000
--- a/freetype/docs/reference/ft2-glyph_stroker.html
+++ /dev/null
@@ -1,819 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="glyph_stroker">Glyph Stroker</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Stroker">FT_Stroker</a></td><td><a href="#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Stroker_Done">FT_Stroker_Done</a></td></tr>
-<tr><td><a href="#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td><a href="#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td></tr>
-<tr><td><a href="#FT_StrokerBorder">FT_StrokerBorder</a></td><td><a href="#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td></tr>
-<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td><a href="#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td></tr>
-<tr><td><a href="#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td><a href="#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td></tr>
-<tr><td><a href="#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td></tr>
-<tr><td><a href="#FT_Stroker_New">FT_Stroker_New</a></td><td><a href="#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td></tr>
-<tr><td><a href="#FT_Stroker_Set">FT_Stroker_Set</a></td><td><a href="#FT_Stroker_Export">FT_Stroker_Export</a></td></tr>
-<tr><td><a href="#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Stroker">FT_Stroker</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StrokerRec_* <b>FT_Stroker</b>;
-</pre>
-
-<p>Opaque handle to a path stroker object.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_LineJoin">FT_Stroker_LineJoin</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineJoin_
- {
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_ROUND">FT_STROKER_LINEJOIN_ROUND</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_BEVEL">FT_STROKER_LINEJOIN_BEVEL</a> = 1,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_MITER_VARIABLE">FT_STROKER_LINEJOIN_MITER_VARIABLE</a> = 2,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_MITER">FT_STROKER_LINEJOIN_MITER</a> = <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_MITER_VARIABLE">FT_STROKER_LINEJOIN_MITER_VARIABLE</a>,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINEJOIN_MITER_FIXED">FT_STROKER_LINEJOIN_MITER_FIXED</a> = 3
-
- } <b>FT_Stroker_LineJoin</b>;
-</pre>
-
-<p>These values determine how two joining lines are rendered in a stroker.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_STROKER_LINEJOIN_ROUND">FT_STROKER_LINEJOIN_ROUND</td><td class="desc">
-<p>Used to render rounded line joins. Circular arcs are used to join two lines smoothly.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINEJOIN_BEVEL">FT_STROKER_LINEJOIN_BEVEL</td><td class="desc">
-<p>Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINEJOIN_MITER_FIXED">FT_STROKER_LINEJOIN_MITER_FIXED</td><td class="desc">
-<p>Used to render mitered line joins, with fixed bevels if the miter limit is exceeded. The outer edges of the strokes for the two segments are extended until they meet at an angle. If the segments meet at too sharp an angle (such that the miter would extend from the intersection of the segments a distance greater than the product of the miter limit value and the border radius), then a bevel join (see above) is used instead. This prevents long spikes being created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter line join as used in PostScript and PDF.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINEJOIN_MITER_VARIABLE">FT_STROKER_LINEJOIN_MITER_VARIABLE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINEJOIN_MITER">FT_STROKER_LINEJOIN_MITER</td><td class="desc">
-<p>Used to render mitered line joins, with variable bevels if the miter limit is exceeded. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created. FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for backward compatibility.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_LineCap">FT_Stroker_LineCap</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineCap_
- {
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINECAP_BUTT">FT_STROKER_LINECAP_BUTT</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINECAP_ROUND">FT_STROKER_LINECAP_ROUND</a>,
- <a href="ft2-glyph_stroker.html#FT_STROKER_LINECAP_SQUARE">FT_STROKER_LINECAP_SQUARE</a>
-
- } <b>FT_Stroker_LineCap</b>;
-</pre>
-
-<p>These values determine how the end of opened sub-paths are rendered in a stroke.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_STROKER_LINECAP_BUTT">FT_STROKER_LINECAP_BUTT</td><td class="desc">
-<p>The end of lines is rendered as a full stop on the last point itself.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINECAP_ROUND">FT_STROKER_LINECAP_ROUND</td><td class="desc">
-<p>The end of lines is rendered as a half-circle around the last point.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_LINECAP_SQUARE">FT_STROKER_LINECAP_SQUARE</td><td class="desc">
-<p>The end of lines is rendered as a square around the last point.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_StrokerBorder">FT_StrokerBorder</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_StrokerBorder_
- {
- <a href="ft2-glyph_stroker.html#FT_STROKER_BORDER_LEFT">FT_STROKER_BORDER_LEFT</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_STROKER_BORDER_RIGHT">FT_STROKER_BORDER_RIGHT</a>
-
- } <b>FT_StrokerBorder</b>;
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_STROKER_BORDER_LEFT">FT_STROKER_BORDER_LEFT</td><td class="desc">
-<p>Select the left border, relative to the drawing direction.</p>
-</td></tr>
-<tr><td class="val" id="FT_STROKER_BORDER_RIGHT">FT_STROKER_BORDER_RIGHT</td><td class="desc">
-<p>Select the right border, relative to the drawing direction.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>The source outline handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a> for empty or invalid outlines.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>The source outline handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> for empty or invalid outlines.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_Stroke">FT_Glyph_Stroke</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Stroke a given outline glyph object with a given stroker.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="pglyph">pglyph</td><td class="desc">
-<p>Source glyph handle on input, new glyph handle on output.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>A stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="destroy">destroy</td><td class="desc">
-<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The source glyph is untouched in case of error.</p>
-<p>Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="pglyph">pglyph</td><td class="desc">
-<p>Source glyph handle on input, new glyph handle on output.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>A stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="inside">inside</td><td class="desc">
-<p>A Boolean. If&nbsp;1, return the inside border, otherwise the outside border.</p>
-</td></tr>
-<tr><td class="val" id="destroy">destroy</td><td class="desc">
-<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The source glyph is untouched in case of error.</p>
-<p>Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_New">FT_Stroker_New</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Create a new stroker object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>FreeType library handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="astroker">astroker</td><td class="desc">
-<p>A new stroker object handle. NULL in case of error.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_Set">FT_Stroker_Set</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Reset a stroker object's attributes.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="radius">radius</td><td class="desc">
-<p>The border radius.</p>
-</td></tr>
-<tr><td class="val" id="line_cap">line_cap</td><td class="desc">
-<p>The line cap style.</p>
-</td></tr>
-<tr><td class="val" id="line_join">line_join</td><td class="desc">
-<p>The line join style.</p>
-</td></tr>
-<tr><td class="val" id="miter_limit">miter_limit</td><td class="desc">
-<p>The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles, expressed as 16.16 fixed-point value.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The radius is expressed in the same units as the outline coordinates.</p>
-<p>This function calls <a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a> automatically.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_Rewind">FT_Stroker_Rewind</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>The source outline.</p>
-</td></tr>
-<tr><td class="val" id="opened">opened</td><td class="desc">
-<p>A boolean. If&nbsp;1, the outline is treated as an open path instead of a closed one.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>If &lsquo;opened&rsquo; is&nbsp;0 (the default), the outline is treated as a closed path, and the stroker generates 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 generates 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_Done">FT_Stroker_Done</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Destroy a stroker object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>A stroker handle. Can be NULL.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Start a new sub-path in the stroker.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the start vector.</p>
-</td></tr>
-<tr><td class="val" id="open">open</td><td class="desc">
-<p>A boolean. If&nbsp;1, the sub-path is treated as an open one.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Close the current sub-path in the stroker.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 &lsquo;draws&rsquo; a single line segment to the start position when needed.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_LineTo">FT_Stroker_LineTo</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>&lsquo;Draw&rsquo; a single line segment in the stroker's current sub-path, from the last position.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_ConicTo">FT_Stroker_ConicTo</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>&lsquo;Draw&rsquo; a single quadratic Bezier in the stroker's current sub-path, from the last position.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="control">control</td><td class="desc">
-<p>A pointer to a Bezier control point.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_CubicTo">FT_Stroker_CubicTo</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>&lsquo;Draw&rsquo; a single cubic Bezier in the stroker's current sub-path, from the last position.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="control1">control1</td><td class="desc">
-<p>A pointer to the first Bezier control point.</p>
-</td></tr>
-<tr><td class="val" id="control2">control2</td><td class="desc">
-<p>A pointer to second Bezier control point.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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 one of the &lsquo;border&rsquo; or &lsquo;stroke&rsquo; outlines generated by the stroker.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="border">border</td><td class="desc">
-<p>The border index.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="anum_points">anum_points</td><td class="desc">
-<p>The number of points.</p>
-</td></tr>
-<tr><td class="val" id="anum_contours">anum_contours</td><td class="desc">
-<p>The number of contours.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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 appends the border points and contours to your outline, but does not try to resize its arrays.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="border">border</td><td class="desc">
-<p>The border index.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>The target outline handle.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_GetCounts">FT_Stroker_GetCounts</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="anum_points">anum_points</td><td class="desc">
-<p>The number of points.</p>
-</td></tr>
-<tr><td class="val" id="anum_contours">anum_contours</td><td class="desc">
-<p>The number of contours.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stroker_Export">FT_Stroker_Export</h3>
-<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
-<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>
-
-<p>Call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to export all borders to your own <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> structure.</p>
-<p>Note that this function appends the border points and contours to your outline, but does not try to resize its arrays.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stroker">stroker</td><td class="desc">
-<p>The target stroker handle.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>The target outline handle.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-glyph_variants.html b/freetype/docs/reference/ft2-glyph_variants.html
deleted file mode 100644
index b74b5b08..00000000
--- a/freetype/docs/reference/ft2-glyph_variants.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="glyph_variants">Unicode Variation Sequences</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td><a href="#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td></tr>
-<tr><td><a href="#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td><a href="#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td></tr>
-<tr><td><a href="#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td></td></tr>
-</table>
-
-
-<p>Many characters, especially for CJK scripts, have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Variation Sequences (VS), consisting of a Unicode base character and a variation selector instead of further extending the already huge number of characters.</p>
-<p>Unicode maintains two different sets, namely &lsquo;Standardized Variation Sequences&rsquo; and registered &lsquo;Ideographic Variation Sequences&rsquo; (IVS), collected in the &lsquo;Ideographic Variation Database&rsquo; (IVD).</p>
-<p><a href="https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt">https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt</a> <a href="https://unicode.org/reports/tr37/">https://unicode.org/reports/tr37/</a> <a href="https://unicode.org/ivd/">https://unicode.org/ivd/</a></p>
-<p>To date (January 2017), the character with the most ideographic variations is U+9089, having 32 such IVS.</p>
-<p>Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation Selectors from the range U+E0100-U+E01EF only.</p>
-<p>A VS consists of the base character value followed by a single Variation Selector. For example, to get the first variation of U+9089, you have to write the character sequence &lsquo;U+9089 U+E0100&rsquo;.</p>
-<p>Adobe and MS decided to support both standardized and ideographic VS 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 variations supported by the font.</p>
-<p>A variation may be either &lsquo;default&rsquo; or &lsquo;non-default&rsquo; for a given font. A default variation is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variation is a different glyph.</p>
-
-<div class="section">
-<h3 id="FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return the glyph index of a given character code as modified by the variation selector.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="charcode">charcode</td><td class="desc">
-<p>The character code point in Unicode.</p>
-</td></tr>
-<tr><td class="val" id="variantSelector">variantSelector</td><td class="desc">
-<p>The Unicode code point of the variation selector.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<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>
-
-<h4>note</h4>
-<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>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Check whether this variation of this Unicode character is the one to be found in the &lsquo;cmap&rsquo;.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="charcode">charcode</td><td class="desc">
-<p>The character codepoint in Unicode.</p>
-</td></tr>
-<tr><td class="val" id="variantSelector">variantSelector</td><td class="desc">
-<p>The Unicode codepoint of the variation selector.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<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 variation.</p>
-
-<h4>note</h4>
-<p>This function is only meaningful if the font has a variation selector cmap subtable.</p>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return a zero-terminated list of Unicode variation selectors found in the font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A pointer to an array of selector code points, or NULL if there is no valid variation selector cmap subtable.</p>
-
-<h4>note</h4>
-<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>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return a zero-terminated list of Unicode variation selectors found for the specified character code.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="charcode">charcode</td><td class="desc">
-<p>The character codepoint in Unicode.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A pointer to an array of variation selector code points that are active for the given character, or NULL if the corresponding list is empty.</p>
-
-<h4>note</h4>
-<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>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Return a zero-terminated list of Unicode character codes found for the specified variation selector.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr><td class="val" id="variantSelector">variantSelector</td><td class="desc">
-<p>The variation selector code point in Unicode.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A list of all the code points that are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variation selector is invalid.</p>
-
-<h4>note</h4>
-<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>
-
-<h4>since</h4>
-<p>2.3.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-gx_validation.html b/freetype/docs/reference/ft2-gx_validation.html
deleted file mode 100644
index 81ad8be3..00000000
--- a/freetype/docs/reference/ft2-gx_validation.html
+++ /dev/null
@@ -1,362 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="gx_validation">TrueTypeGX/AAT Validation</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td><td><a href="#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td></tr>
-<tr><td><a href="#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td><td><a href="#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td><td><a href="#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td></tr>
-<tr><td>&nbsp;</td><td>&nbsp;</td><td><a href="#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td></tr>
-</table>
-
-
-<p>This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).</p>
-
-<div class="section">
-<h3 id="FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<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>
-
-<p>Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
-<p>A bit field that 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><td class="val" id="table_length">table_length</td><td class="desc">
-<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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="tables">tables</td><td class="desc">
-<p>The array where all validated sfnt tables are stored. The array itself must be allocated by a client.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<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>
-
-<p>Free the buffer allocated by TrueTypeGX validator.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="table">table</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ClassicKern_Validate">FT_ClassicKern_Validate</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<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>
-
-<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 that 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
-<p>A bit field that 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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="ckern_table">ckern_table</td><td class="desc">
-<p>A pointer to the kern table.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ClassicKern_Free">FT_ClassicKern_Free</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<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>
-
-<p>Free the buffer allocated by classic Kern validator.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="table">table</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<pre>
-#define <b>FT_VALIDATE_GX_LENGTH</b> ( FT_VALIDATE_GX_LAST_INDEX + 1 )
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<pre>
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_feat">FT_VALIDATE_feat</a> FT_VALIDATE_GX_BITFIELD( feat )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_mort">FT_VALIDATE_mort</a> FT_VALIDATE_GX_BITFIELD( mort )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_morx">FT_VALIDATE_morx</a> FT_VALIDATE_GX_BITFIELD( morx )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_bsln">FT_VALIDATE_bsln</a> FT_VALIDATE_GX_BITFIELD( bsln )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_just">FT_VALIDATE_just</a> FT_VALIDATE_GX_BITFIELD( just )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_kern">FT_VALIDATE_kern</a> FT_VALIDATE_GX_BITFIELD( kern )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_opbd">FT_VALIDATE_opbd</a> FT_VALIDATE_GX_BITFIELD( opbd )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_trak">FT_VALIDATE_trak</a> FT_VALIDATE_GX_BITFIELD( trak )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_prop">FT_VALIDATE_prop</a> FT_VALIDATE_GX_BITFIELD( prop )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_lcar">FT_VALIDATE_lcar</a> FT_VALIDATE_GX_BITFIELD( lcar )
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GX">FT_VALIDATE_GX</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_feat">FT_VALIDATE_feat</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_mort">FT_VALIDATE_mort</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_morx">FT_VALIDATE_morx</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_bsln">FT_VALIDATE_bsln</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_just">FT_VALIDATE_just</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_kern">FT_VALIDATE_kern</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_opbd">FT_VALIDATE_opbd</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_trak">FT_VALIDATE_trak</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_prop">FT_VALIDATE_prop</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_lcar">FT_VALIDATE_lcar</a> )
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_VALIDATE_feat">FT_VALIDATE_feat</td><td class="desc">
-<p>Validate &lsquo;feat&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_mort">FT_VALIDATE_mort</td><td class="desc">
-<p>Validate &lsquo;mort&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_morx">FT_VALIDATE_morx</td><td class="desc">
-<p>Validate &lsquo;morx&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_bsln">FT_VALIDATE_bsln</td><td class="desc">
-<p>Validate &lsquo;bsln&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_just">FT_VALIDATE_just</td><td class="desc">
-<p>Validate &lsquo;just&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_kern">FT_VALIDATE_kern</td><td class="desc">
-<p>Validate &lsquo;kern&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_opbd">FT_VALIDATE_opbd</td><td class="desc">
-<p>Validate &lsquo;opbd&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_trak">FT_VALIDATE_trak</td><td class="desc">
-<p>Validate &lsquo;trak&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_prop">FT_VALIDATE_prop</td><td class="desc">
-<p>Validate &lsquo;prop&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_lcar">FT_VALIDATE_lcar</td><td class="desc">
-<p>Validate &lsquo;lcar&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_GX">FT_VALIDATE_GX</td><td class="desc">
-<p>Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop and lcar).</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</h3>
-<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
-<pre>
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_MS">FT_VALIDATE_MS</a> ( FT_VALIDATE_GX_START &lt;&lt; 0 )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_APPLE">FT_VALIDATE_APPLE</a> ( FT_VALIDATE_GX_START &lt;&lt; 1 )
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERN">FT_VALIDATE_CKERN</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_MS">FT_VALIDATE_MS</a> | <a href="ft2-gx_validation.html#FT_VALIDATE_APPLE">FT_VALIDATE_APPLE</a> )
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_VALIDATE_MS">FT_VALIDATE_MS</td><td class="desc">
-<p>Handle the &lsquo;kern&rsquo; table as a classic Microsoft kern table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_APPLE">FT_VALIDATE_APPLE</td><td class="desc">
-<p>Handle the &lsquo;kern&rsquo; table as a classic Apple kern table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_CKERN">FT_VALIDATE_CKERN</td><td class="desc">
-<p>Handle the &lsquo;kern&rsquo; as either classic Apple or Microsoft kern table.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-gzip.html b/freetype/docs/reference/ft2-gzip.html
deleted file mode 100644
index 51a9d29f..00000000
--- a/freetype/docs/reference/ft2-gzip.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="gzip">GZIP Streams</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="#FT_Gzip_Uncompress">FT_Gzip_Uncompress</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of Gzip-specific functions.</p>
-
-<div class="section">
-<h3 id="FT_Stream_OpenGzip">FT_Stream_OpenGzip</h3>
-<p>Defined in FT_GZIP_H (freetype/ftgzip.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>The target embedding stream.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>The source stream.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Gzip_Uncompress">FT_Gzip_Uncompress</h3>
-<p>Defined in FT_GZIP_H (freetype/ftgzip.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Gzip_Uncompress</b>( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* output,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>* output_len,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* input,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> input_len );
-</pre>
-
-<p>Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's &lsquo;uncompress&rsquo; function.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A FreeType memory handle.</p>
-</td></tr>
-<tr><td class="val" id="input">input</td><td class="desc">
-<p>The input buffer.</p>
-</td></tr>
-<tr><td class="val" id="input_len">input_len</td><td class="desc">
-<p>The length of the input buffer.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="output">output</td><td class="desc">
-<p>The output buffer.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="output_len">output_len</td><td class="desc">
-<p>Before calling the function, this is the total size of the output buffer, which must be large enough to hold the entire uncompressed data (so the size of the uncompressed data must be known in advance). After calling the function, &lsquo;output_len&rsquo; is the size of the used data in &lsquo;output&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function may return &lsquo;FT_Err_Unimplemented_Feature&rsquo; if your build of FreeType was not compiled with zlib support.</p>
-
-<h4>since</h4>
-<p>2.5.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-header_file_macros.html b/freetype/docs/reference/ft2-header_file_macros.html
deleted file mode 100644
index 88cb179d..00000000
--- a/freetype/docs/reference/ft2-header_file_macros.html
+++ /dev/null
@@ -1,694 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="header_file_macros">Header File Macros</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td><a href="#FT_BDF_H">FT_BDF_H</a></td></tr>
-<tr><td><a href="#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td><a href="#FT_CID_H">FT_CID_H</a></td></tr>
-<tr><td><a href="#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td><a href="#FT_GZIP_H">FT_GZIP_H</a></td></tr>
-<tr><td><a href="#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td><a href="#FT_LZW_H">FT_LZW_H</a></td></tr>
-<tr><td><a href="#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="#FT_BZIP2_H">FT_BZIP2_H</a></td></tr>
-<tr><td><a href="#FT_ERRORS_H">FT_ERRORS_H</a></td><td><a href="#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
-<tr><td><a href="#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td><a href="#FT_GLYPH_H">FT_GLYPH_H</a></td></tr>
-<tr><td><a href="#FT_SYSTEM_H">FT_SYSTEM_H</a></td><td><a href="#FT_BITMAP_H">FT_BITMAP_H</a></td></tr>
-<tr><td><a href="#FT_IMAGE_H">FT_IMAGE_H</a></td><td><a href="#FT_BBOX_H">FT_BBOX_H</a></td></tr>
-<tr><td><a href="#FT_TYPES_H">FT_TYPES_H</a></td><td><a href="#FT_CACHE_H">FT_CACHE_H</a></td></tr>
-<tr><td><a href="#FT_LIST_H">FT_LIST_H</a></td><td><a href="#FT_MAC_H">FT_MAC_H</a></td></tr>
-<tr><td><a href="#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td><a href="#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td></tr>
-<tr><td><a href="#FT_SIZES_H">FT_SIZES_H</a></td><td><a href="#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td></tr>
-<tr><td><a href="#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td></tr>
-<tr><td><a href="#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td></tr>
-<tr><td><a href="#FT_DRIVER_H">FT_DRIVER_H</a></td><td><a href="#FT_PFR_H">FT_PFR_H</a></td></tr>
-<tr><td><a href="#FT_AUTOHINTER_H">FT_AUTOHINTER_H</a></td><td><a href="#FT_STROKER_H">FT_STROKER_H</a></td></tr>
-<tr><td><a href="#FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</a></td><td><a href="#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
-<tr><td><a href="#FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</a></td><td><a href="#FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</a></td></tr>
-<tr><td><a href="#FT_PCF_DRIVER_H">FT_PCF_DRIVER_H</a></td><td><a href="#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
-<tr><td><a href="#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td><td><a href="#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td></tr>
-<tr><td><a href="#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td><td><a href="#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td></tr>
-<tr><td><a href="#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td><td><a href="#FT_GASP_H">FT_GASP_H</a></td></tr>
-<tr><td><a href="#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td><td><a href="#FT_ADVANCES_H">FT_ADVANCES_H</a></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</h3>
-<pre>
-#ifndef <b>FT_CONFIG_CONFIG_H</b>
-#define <b>FT_CONFIG_CONFIG_H</b> &lt;freetype/config/ftconfig.h&gt;
-#endif
-</pre>
-
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 configuration data.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</h3>
-<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>
-
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 interface to the standard C library functions.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</h3>
-<pre>
-#ifndef <b>FT_CONFIG_OPTIONS_H</b>
-#define <b>FT_CONFIG_OPTIONS_H</b> &lt;freetype/config/ftoption.h&gt;
-#endif
-</pre>
-
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 project-specific configuration options.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</h3>
-<pre>
-#ifndef <b>FT_CONFIG_MODULES_H</b>
-#define <b>FT_CONFIG_MODULES_H</b> &lt;freetype/config/ftmodule.h&gt;
-#endif
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FREETYPE_H">FT_FREETYPE_H</h3>
-<pre>
-#define <b>FT_FREETYPE_H</b> &lt;freetype/freetype.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the base FreeType&nbsp;2 API.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ERRORS_H">FT_ERRORS_H</h3>
-<pre>
-#define <b>FT_ERRORS_H</b> &lt;freetype/fterrors.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</h3>
-<pre>
-#define <b>FT_MODULE_ERRORS_H</b> &lt;freetype/ftmoderr.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the list of FreeType&nbsp;2 module error offsets (and messages).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SYSTEM_H">FT_SYSTEM_H</h3>
-<pre>
-#define <b>FT_SYSTEM_H</b> &lt;freetype/ftsystem.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_IMAGE_H">FT_IMAGE_H</h3>
-<pre>
-#define <b>FT_IMAGE_H</b> &lt;freetype/ftimage.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TYPES_H">FT_TYPES_H</h3>
-<pre>
-#define <b>FT_TYPES_H</b> &lt;freetype/fttypes.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LIST_H">FT_LIST_H</h3>
-<pre>
-#define <b>FT_LIST_H</b> &lt;freetype/ftlist.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OUTLINE_H">FT_OUTLINE_H</h3>
-<pre>
-#define <b>FT_OUTLINE_H</b> &lt;freetype/ftoutln.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the scalable outline management API of FreeType&nbsp;2.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SIZES_H">FT_SIZES_H</h3>
-<pre>
-#define <b>FT_SIZES_H</b> &lt;freetype/ftsizes.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MODULE_H">FT_MODULE_H</h3>
-<pre>
-#define <b>FT_MODULE_H</b> &lt;freetype/ftmodapi.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the module management API of FreeType&nbsp;2.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_RENDER_H">FT_RENDER_H</h3>
-<pre>
-#define <b>FT_RENDER_H</b> &lt;freetype/ftrender.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the renderer module management API of FreeType&nbsp;2.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_DRIVER_H">FT_DRIVER_H</h3>
-<pre>
-#define <b>FT_DRIVER_H</b> &lt;freetype/ftdriver.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing structures and macros related to the driver modules.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_AUTOHINTER_H">FT_AUTOHINTER_H</h3>
-<pre>
-#define <b>FT_AUTOHINTER_H</b> <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a>
-</pre>
-
-<p>A macro used in #include statements to name the file containing structures and macros related to the auto-hinting module.</p>
-<p>Deprecated since version 2.9; use <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a> instead.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</h3>
-<pre>
-#define <b>FT_CFF_DRIVER_H</b> <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a>
-</pre>
-
-<p>A macro used in #include statements to name the file containing structures and macros related to the CFF driver module.</p>
-<p>Deprecated since version 2.9; use <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a> instead.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</h3>
-<pre>
-#define <b>FT_TRUETYPE_DRIVER_H</b> <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a>
-</pre>
-
-<p>A macro used in #include statements to name the file containing structures and macros related to the TrueType driver module.</p>
-<p>Deprecated since version 2.9; use <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a> instead.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PCF_DRIVER_H">FT_PCF_DRIVER_H</h3>
-<pre>
-#define <b>FT_PCF_DRIVER_H</b> <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a>
-</pre>
-
-<p>A macro used in #include statements to name the file containing structures and macros related to the PCF driver module.</p>
-<p>Deprecated since version 2.9; use <a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a> instead.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</h3>
-<pre>
-#define <b>FT_TYPE1_TABLES_H</b> &lt;freetype/t1tables.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the types and API specific to the Type&nbsp;1 format.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</h3>
-<pre>
-#define <b>FT_TRUETYPE_IDS_H</b> &lt;freetype/ttnameid.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</h3>
-<pre>
-#define <b>FT_TRUETYPE_TABLES_H</b> &lt;freetype/tttables.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</h3>
-<pre>
-#define <b>FT_TRUETYPE_TAGS_H</b> &lt;freetype/tttags.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BDF_H">FT_BDF_H</h3>
-<pre>
-#define <b>FT_BDF_H</b> &lt;freetype/ftbdf.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CID_H">FT_CID_H</h3>
-<pre>
-#define <b>FT_CID_H</b> &lt;freetype/ftcid.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GZIP_H">FT_GZIP_H</h3>
-<pre>
-#define <b>FT_GZIP_H</b> &lt;freetype/ftgzip.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LZW_H">FT_LZW_H</h3>
-<pre>
-#define <b>FT_LZW_H</b> &lt;freetype/ftlzw.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BZIP2_H">FT_BZIP2_H</h3>
-<pre>
-#define <b>FT_BZIP2_H</b> &lt;freetype/ftbzip2.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports bzip2-compressed files.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_WINFONTS_H">FT_WINFONTS_H</h3>
-<pre>
-#define <b>FT_WINFONTS_H</b> &lt;freetype/ftwinfnt.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GLYPH_H">FT_GLYPH_H</h3>
-<pre>
-#define <b>FT_GLYPH_H</b> &lt;freetype/ftglyph.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the API of the optional glyph management component.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BITMAP_H">FT_BITMAP_H</h3>
-<pre>
-#define <b>FT_BITMAP_H</b> &lt;freetype/ftbitmap.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the API of the optional bitmap conversion component.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_BBOX_H">FT_BBOX_H</h3>
-<pre>
-#define <b>FT_BBOX_H</b> &lt;freetype/ftbbox.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_CACHE_H">FT_CACHE_H</h3>
-<pre>
-#define <b>FT_CACHE_H</b> &lt;freetype/ftcache.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the API of the optional FreeType&nbsp;2 cache sub-system.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MAC_H">FT_MAC_H</h3>
-<pre>
-#define <b>FT_MAC_H</b> &lt;freetype/ftmac.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</h3>
-<pre>
-#define <b>FT_MULTIPLE_MASTERS_H</b> &lt;freetype/ftmm.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType&nbsp;2.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</h3>
-<pre>
-#define <b>FT_SFNT_NAMES_H</b> &lt;freetype/ftsnames.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</h3>
-<pre>
-#define <b>FT_OPENTYPE_VALIDATE_H</b> &lt;freetype/ftotval.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</h3>
-<pre>
-#define <b>FT_GX_VALIDATE_H</b> &lt;freetype/ftgxval.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PFR_H">FT_PFR_H</h3>
-<pre>
-#define <b>FT_PFR_H</b> &lt;freetype/ftpfr.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which accesses PFR-specific data.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_STROKER_H">FT_STROKER_H</h3>
-<pre>
-#define <b>FT_STROKER_H</b> &lt;freetype/ftstroke.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SYNTHESIS_H">FT_SYNTHESIS_H</h3>
-<pre>
-#define <b>FT_SYNTHESIS_H</b> &lt;freetype/ftsynth.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs artificial obliquing and emboldening.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</h3>
-<pre>
-#define <b>FT_FONT_FORMATS_H</b> &lt;freetype/ftfntfmt.h&gt;
-
- /* deprecated */
-#define FT_XFREE86_H <b>FT_FONT_FORMATS_H</b>
-</pre>
-
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which provides functions specific to font formats.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</h3>
-<pre>
-#define <b>FT_TRIGONOMETRY_H</b> &lt;freetype/fttrigon.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_LCD_FILTER_H">FT_LCD_FILTER_H</h3>
-<pre>
-#define <b>FT_LCD_FILTER_H</b> &lt;freetype/ftlcdfil.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_INCREMENTAL_H">FT_INCREMENTAL_H</h3>
-<pre>
-#define <b>FT_INCREMENTAL_H</b> &lt;freetype/ftincrem.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs incremental glyph loading.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GASP_H">FT_GASP_H</h3>
-<pre>
-#define <b>FT_GASP_H</b> &lt;freetype/ftgasp.h&gt;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ADVANCES_H">FT_ADVANCES_H</h3>
-<pre>
-#define <b>FT_ADVANCES_H</b> &lt;freetype/ftadvanc.h&gt;
-</pre>
-
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which returns individual and ranged glyph advances.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-header_inclusion.html b/freetype/docs/reference/ft2-header_inclusion.html
deleted file mode 100644
index 107ac5c8..00000000
--- a/freetype/docs/reference/ft2-header_inclusion.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="header_inclusion">FreeType's header inclusion scheme</h1>
-
-<p>To be as flexible as possible (and for historical reasons), FreeType uses a very special inclusion scheme to load header files, for example</p>
-<pre class="colored">
- #include &lt;ft2build.h&gt;
-
- #include FT_FREETYPE_H
- #include FT_OUTLINE_H
-</pre>
-<p>A compiler and its preprocessor only needs an include path to find the file &lsquo;ft2build.h&rsquo;; the exact locations and names of the other FreeType header files are hidden by preprocessor macro names, loaded by &lsquo;ft2build.h&rsquo;. The API documentation always gives the header macro name needed for a particular function.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-incremental.html b/freetype/docs/reference/ft2-incremental.html
deleted file mode 100644
index 22572829..00000000
--- a/freetype/docs/reference/ft2-incremental.html
+++ /dev/null
@@ -1,375 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="incremental">Incremental Loading</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Incremental">FT_Incremental</a></td><td><a href="#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td></tr>
-<tr><td><a href="#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td><a href="#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td></tr>
-<tr><td><a href="#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td><a href="#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td></tr>
-<tr><td><a href="#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="#FT_Incremental_Interface">FT_Incremental_Interface</a></td></tr>
-<tr><td><a href="#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td></td></tr>
-</table>
-
-
-<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-parameter_tags.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>
-
-<div class="section">
-<h3 id="FT_Incremental">FT_Incremental</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_IncrementalRec_* <b>FT_Incremental</b>;
-</pre>
-
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> advance_v; /* since 2.3.12 */
-
- } <b>FT_Incremental_MetricsRec</b>;
-</pre>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="bearing_x">bearing_x</td><td class="desc">
-<p>Left bearing, in font units.</p>
-</td></tr>
-<tr><td class="val" id="bearing_y">bearing_y</td><td class="desc">
-<p>Top bearing, in font units.</p>
-</td></tr>
-<tr><td class="val" id="advance">advance</td><td class="desc">
-<p>Horizontal component of glyph advance, in font units.</p>
-</td></tr>
-<tr><td class="val" id="advance_v">advance_v</td><td class="desc">
-<p>Vertical component of glyph advance, in font units.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_Metrics">FT_Incremental_Metrics</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_* <b>FT_Incremental_Metrics</b>;
-</pre>
-
-<p>A handle to an <a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="incremental">incremental</td><td class="desc">
-<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><td class="val" id="glyph_index">glyph_index</td><td class="desc">
-<p>Index of relevant glyph.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="adata">adata</td><td class="desc">
-<p>A structure describing the returned glyph data bytes (which will be accessed as a read-only byte block).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="incremental">incremental</td><td class="desc">
-<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><td class="val" id="data">data</td><td class="desc">
-<p>A structure describing the glyph data bytes (which will be accessed as a read-only byte block).</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="incremental">incremental</td><td class="desc">
-<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><td class="val" id="glyph_index">glyph_index</td><td class="desc">
-<p>Index of relevant glyph.</p>
-</td></tr>
-<tr><td class="val" id="vertical">vertical</td><td class="desc">
-<p>If true, return vertical metrics.</p>
-</td></tr>
-<tr><td class="val" id="ametrics">ametrics</td><td class="desc">
-<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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="ametrics">ametrics</td><td class="desc">
-<p>The replacement glyph metrics in font units.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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>
-
-<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>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="get_glyph_data">get_glyph_data</td><td class="desc">
-<p>The function to get glyph data. Must not be null.</p>
-</td></tr>
-<tr><td class="val" id="free_glyph_data">free_glyph_data</td><td class="desc">
-<p>The function to release glyph data. Must not be null.</p>
-</td></tr>
-<tr><td class="val" id="get_glyph_metrics">get_glyph_metrics</td><td class="desc">
-<p>The function to get glyph metrics. May be null if the font does not provide overriding glyph metrics.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<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>
-
-<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-parameter_tags.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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Incremental_Interface">FT_Incremental_Interface</h3>
-<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a>* <b>FT_Incremental_Interface</b>;
-</pre>
-
-<p>A pointer to an <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-index.html b/freetype/docs/reference/ft2-index.html
deleted file mode 100644
index ee99e2ff..00000000
--- a/freetype/docs/reference/ft2-index.html
+++ /dev/null
@@ -1,379 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<table class="index">
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_ATOM</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_NONE</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_Property">BDF_Property</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a></td><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></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PropertyType</a></td><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY1</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a></td><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_New">FT_Stroker_New</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a></td><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_ParseOutline">FT_Stroker_ParseOutline</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FontDict">CID_FontDict</a></td><td><a href="ft2-base_interface.html#FT_Library">FT_Library</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_Info">CID_Info</a></td><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Set">FT_Stroker_Set</a></td></tr>
-<tr><td><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a></td><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a></td></tr>
-<tr><td><a href="ft2-properties.html#default-script">default-script</a></td><td><a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a></td><td><a href="ft2-list_processing.html#FT_List">FT_List</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a></td><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_ARGS_ARE_XY_VALUES</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a></td><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_ROUND_XY_TO_GRID</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_XXX</a></td><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_SCALE</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</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_USE_MY_METRICS</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</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_XXX</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_ADVANCES_H">FT_ADVANCES_H</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_XY_SCALE</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-list_processing.html#FT_List_Iterator">FT_List_Iterator</a></td><td><a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a></td><td><a href="ft2-list_processing.html#FT_List_Remove">FT_List_Remove</a></td><td><a href="ft2-header_file_macros.html#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="ft2-list_processing.html#FT_List_Up">FT_List_Up</a></td><td><a href="ft2-header_file_macros.html#FT_SYSTEM_H">FT_SYSTEM_H</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a></td><td><a href="ft2-basic_types.html#FT_Tag">FT_Tag</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="ft2-list_processing.html#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="ft2-computations.html#FT_Tan">FT_Tan</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a></td><td><a href="ft2-header_file_macros.html#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_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_BITMAP_METRICS_ONLY</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</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_XXX">FT_LOAD_COLOR</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</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_XXX">FT_LOAD_COMPUTE_METRICS</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</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_XXX">FT_LOAD_CROP_BITMAP</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</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_XXX">FT_LOAD_DEFAULT</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-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</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-header_file_macros.html#FT_AUTOHINTER_H">FT_AUTOHINTER_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</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-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_CJK</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_TrueTypeEngineType</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_INDIC</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_LATIN</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_NONE</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_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a></td><td><a href="ft2-header_file_macros.html#FT_TYPES_H">FT_TYPES_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_XXX">FT_LOAD_NO_HINTING</a></td><td><a href="ft2-basic_types.html#FT_UFWord">FT_UFWord</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_XXX">FT_LOAD_NO_RECURSE</a></td><td><a href="ft2-basic_types.html#FT_UInt">FT_UInt</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_NO_SCALE</a></td><td><a href="ft2-basic_types.html#FT_UInt16">FT_UInt16</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_PEDANTIC</a></td><td><a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</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_XXX">FT_LOAD_RENDER</a></td><td><a href="ft2-basic_types.html#FT_UInt64">FT_UInt64</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_TARGET_XXX">FT_LOAD_TARGET_LCD</a></td><td><a href="ft2-basic_types.html#FT_ULong">FT_ULong</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Copy">FT_Bitmap_Copy</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_UnitVector">FT_UnitVector</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</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_UShort">FT_UShort</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Init">FT_Bitmap_Init</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</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_CKERNXXX</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bool">FT_Bool</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Byte">FT_Byte</a></td><td><a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a></td><td><a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BZIP2_H">FT_BZIP2_H</a></td><td><a href="ft2-truetype_tables.html#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</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_GX</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_CeilFix">FT_CeilFix</a></td><td><a href="ft2-header_file_macros.html#FT_LZW_H">FT_LZW_H</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-header_file_macros.html#FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</a></td><td><a href="ft2-header_file_macros.html#FT_MAC_H">FT_MAC_H</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_Char">FT_Char</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_JSTF</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</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_just</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</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_GXXXX">FT_VALIDATE_kern</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</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_lcar</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</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_MATH</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</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-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</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_MM_Var">FT_MM_Var</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</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-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_OT</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-header_file_macros.html#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Cos">FT_Cos</a></td><td><a href="ft2-module_management.html#FT_Module">FT_Module</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Data">FT_Data</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_prop</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_DivFix">FT_DivFix</a></td><td><a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a></td><td><a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="ft2-multiple_masters.html#FT_VAR_AXIS_FLAG_XXX">FT_VAR_AXIS_FLAG_HIDDEN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="ft2-multiple_masters.html#FT_VAR_AXIS_FLAG_XXX">FT_VAR_AXIS_FLAG_XXX</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a></td><td><a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a></td><td><a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</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-multiple_masters.html#FT_Done_MM_Var">FT_Done_MM_Var</a></td><td><a href="ft2-computations.html#FT_MulFix">FT_MulFix</a></td><td><a href="ft2-basic_types.html#FT_Vector">FT_Vector</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a></td><td><a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="ft2-computations.html#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_DRIVER_H">FT_DRIVER_H</a></td><td><a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a></td><td><a href="ft2-computations.html#FT_Vector_Length">FT_Vector_Length</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Driver">FT_Driver</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_Polarize">FT_Vector_Polarize</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</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_Rotate">FT_Vector_Rotate</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</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_Transform">FT_Vector_Transform</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</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_Unit">FT_Vector_Unit</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a></td><td><a href="ft2-base_interface.html#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="ft2-header_file_macros.html#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a></td><td><a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_Header">FT_WinFNT_Header</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a></td><td><a href="ft2-basic_types.html#FT_Offset">FT_Offset</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_Encoding">FT_ENCODING_BIG5</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_ID_XXX">FT_WinFNT_ID_CP1250</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</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_ID_XXX">FT_WinFNT_ID_CP1251</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</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_CP1252</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</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_CP1253</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</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_CP1254</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</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_CP1255</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</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_CP1256</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</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_CP1257</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</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_CP1258</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</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_CP1361</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_PRC</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_CP874</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_Orientation">FT_ORIENTATION_FILL_LEFT</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_UNICODE</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_CP936</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_Orientation">FT_ORIENTATION_NONE</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</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_CP950</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_Orientation">FT_ORIENTATION_TRUETYPE</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-error_code_values.html#FT_Err_XXX">FT_Err_XXX</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_MAC</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_XXX">FT_OUTLINE_EVEN_ODD_FILL</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-basic_types.html#FT_F26Dot6">FT_F26Dot6</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_SYMBOL</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_XXX">FT_OUTLINE_HIGH_PRECISION</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_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_COLOR</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_INCLUDE_STUBS</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</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_XXX">FT_OUTLINE_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</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_XXX">FT_OUTLINE_OWNER</a></td><td><a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</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_XXX">FT_OUTLINE_REVERSE_FILL</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_FIXED_WIDTH</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SINGLE_PASS</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_GLYPH_NAMES</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SMART_DROPOUTS</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_HINTER</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_XXX</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_HORIZONTAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline">FT_Outline</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_KERNING</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_ImageType">FTC_ImageType</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_ConicToFunc">FT_Outline_ConicToFunc</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_SCALABLE</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_Manager">FTC_Manager</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_CubicToFunc">FT_Outline_CubicToFunc</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_TRICKY</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_Manager_LookupFace">FTC_Manager_LookupFace</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VARIATION</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_LookupSize">FTC_Manager_LookupSize</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_Embolden">FT_Outline_Embolden</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_XXX</a></td><td><a href="ft2-outline_processing.html#FT_Outline_EmboldenXY">FT_Outline_EmboldenXY</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">FT_Face</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_Reset">FTC_Manager_Reset</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_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</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_Get_Bitmap">FT_Outline_Get_Bitmap</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</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_Get_CBox">FT_Outline_Get_CBox</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_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</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_SBitCache">FTC_SBitCache</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</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_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</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_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</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_LineToFunc">FT_Outline_LineToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</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_SBitRec">FTC_SBitRec</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</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_Scaler">FTC_Scaler</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</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_ScalerRec">FTC_ScalerRec</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td><a href="ft2-properties.html#fallback-script">fallback-script</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_FloorFix">FT_FloorFix</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="ft2-properties.html#hinting-engine">hinting-engine</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="ft2-properties.html#increase-x-height">increase-x-height</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="ft2-properties.html#interpreter-version">interpreter-version</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</a></td><td><a href="ft2-properties.html#no-long-family-names">no-long-family-names</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_EDITABLE_EMBEDDING</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</a></td><td><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_INSTALLABLE_EMBEDDING</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_FUZZ</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_NO_SUBSETTING</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_LCD_FILTER_WEIGHTS">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SCALE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_RANDOM_SEED">FT_PARAM_TAG_RANDOM_SEED</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SHIFT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_STEM_DARKENING">FT_PARAM_TAG_STEM_DARKENING</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_VALUE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_XXX</a></td><td><a href="ft2-parameter_tags.html#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_FWord">FT_FWord</a></td><td><a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING_KEY</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a></td><td><a href="ft2-header_file_macros.html#FT_PCF_DRIVER_H">FT_PCF_DRIVER_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_ENTRY</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a></td><td><a href="ft2-header_file_macros.html#FT_PFR_H">FT_PFR_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_TYPE</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_BGRA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_BLUE</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_GRAY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_NAME</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_GRAY2</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_OTHER_BLUE</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_GRAY4</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_BBOX</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_LCD</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_MATRIX</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_LCD_V</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_NAME</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_Pixel_Mode">FT_PIXEL_MODE_MONO</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_TYPE</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_Get_Advance">FT_Get_Advance</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FORCE_BOLD</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_Get_Advances">FT_Get_Advances</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FS_TYPE</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_Pointer">FT_Pointer</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FULL_NAME</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-basic_types.html#FT_Pos">FT_Pos</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_IS_FIXED_PITCH</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-properties.html#FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ITALIC_ANGLE</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-properties.html#FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LANGUAGE_GROUP</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_From_Glyph_Index">FT_Get_CID_From_Glyph_Index</a></td><td><a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LEN_IV</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Is_Internally_CID_Keyed">FT_Get_CID_Is_Internally_CID_Keyed</a></td><td><a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_MIN_FEATURE</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-basic_types.html#FT_PtrDist">FT_PtrDist</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NOTICE</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_AA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_BLUE_VALUES</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_CLIP</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_CHAR_STRINGS</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_DEFAULT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_BLUES</a></td></tr>
-<tr><td><a href="ft2-font_formats.html#FT_Get_Font_Format">FT_Get_Font_Format</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_OTHER_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_OTHER_BLUES</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-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_H</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-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_V</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-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_SUBRS</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-type1_tables.html#PS_Dict_Keys">PS_DICT_OTHER_BLUE</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_MM_Blend_Coordinates">FT_Get_MM_Blend_Coordinates</a></td><td><a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PAINT_TYPE</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_NewFunc">FT_Raster_NewFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PASSWORD</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_Params">FT_Raster_Params</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_RND_STEM_UP</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_RenderFunc">FT_Raster_RenderFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_HW</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_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_VW</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_SetModeFunc">FT_Raster_SetModeFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_H</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-header_file_macros.html#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_V</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-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_SUBR</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_V</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_POSITION</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_LIGHT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_THICKNESS</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_MONO</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNIQUE_ID</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_NORMAL</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_VERSION</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</a></td><td><a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_WEIGHT</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_Reference_Face">FT_Reference_Face</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_Dict_Keys</a></td></tr>
-<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_LangTag">FT_Get_Sfnt_LangTag</a></td><td><a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a></td><td><a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</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-module_management.html#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</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-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a></td><td><a href="ft2-type1_tables.html#PS_Private">PS_Private</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_Mode">FT_Render_Mode</a></td><td><a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</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-module_management.html#FT_Renderer">FT_Renderer</a></td><td><a href="ft2-properties.html#random-seed">random-seed</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-module_management.html#FT_Renderer_Class">FT_Renderer_Class</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SCALE</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-base_interface.html#FT_Request_Size">FT_Request_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SHIFT</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_Var_Axis_Flags">FT_Get_Var_Axis_Flags</a></td><td><a href="ft2-computations.html#FT_RoundFix">FT_RoundFix</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_VALUES</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_Var_Blend_Coordinates">FT_Get_Var_Blend_Coordinates</a></td><td><a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_BLUES</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_Var_Design_Coordinates">FT_Get_Var_Design_Coordinates</a></td><td><a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_OTHER_BLUES</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_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FORCE_BOLD</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_Set_Charmap">FT_Set_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_ITALIC_ANGLE</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-module_management.html#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_OTHER_BLUES</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-module_management.html#FT_Set_Default_Properties">FT_Set_Default_Properties</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_HEIGHT</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-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_WIDTH</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-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_HEIGHTS</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_Named_Instance">FT_Set_Named_Instance</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_WIDTHS</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-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_POSITION</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-module_management.html#FT_Set_Renderer">FT_Set_Renderer</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_THICKNESS</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a></td><td><a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_Blend_Flags</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</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-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ARRAY</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_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_EXPERT</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HEAD</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ISOLATIN1</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HHEA</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_NONE</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_Tag">FT_SFNT_MAXP</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_STANDARD</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a></td><td><a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_EncodingType</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-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_OS2</a></td><td><a href="ft2-type1_tables.html#T1_FontInfo">T1_FontInfo</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_PCLT</a></td><td><a href="ft2-type1_tables.html#T1_Private">T1_Private</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_POST</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-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_VHEA</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-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</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_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_Stroke">FT_Glyph_Stroke</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_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="ft2-sfnt_names.html#FT_SfntLangTag">FT_SfntLangTag</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_To_Bitmap">FT_Glyph_To_Bitmap</a></td><td><a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</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_Transform">FT_Glyph_Transform</a></td><td><a href="ft2-basic_types.html#FT_Short">FT_Short</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_FULL_UNICODE</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_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</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-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</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_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</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_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</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_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</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-header_file_macros.html#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</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_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GZIP_H">FT_GZIP_H</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_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-gzip.html#FT_Gzip_Uncompress">FT_Gzip_Uncompress</a></td><td><a href="ft2-computations.html#FT_Sin">FT_Sin</a></td><td><a href="ft2-truetype_tables.html#TT_Header">TT_Header</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_COLOR">FT_HAS_COLOR</a></td><td><a href="ft2-base_interface.html#FT_Size">FT_Size</a></td><td><a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</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_Internal">FT_Size_Internal</a></td><td><a href="ft2-properties.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_35</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_Size_Metrics">FT_Size_Metrics</a></td><td><a href="ft2-properties.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_38</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_Size_Request">FT_Size_Request</a></td><td><a href="ft2-properties.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_40</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td><a href="ft2-properties.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</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_ISO_ID_XXX">TT_ISO_ID_10646</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-base_interface.html#FT_SizeRec">FT_SizeRec</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-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</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_ISO_ID_XXX">TT_ISO_ID_8859_1</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-raster.html#FT_Span">FT_Span</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-properties.html#FT_HINTING_XXX">FT_HINTING_ADOBE</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_XXX</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_HINTING_XXX">FT_HINTING_FREETYPE</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_LANGID_XXX">TT_MAC_LANGID_XXX</a></td></tr>
-<tr><td><a href="ft2-properties.html#FT_HINTING_XXX">FT_HINTING_XXX</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_MaxProfile">TT_MaxProfile</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_IMAGE_H">FT_IMAGE_H</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_MS_ID_XXX">TT_MS_ID_BIG_5</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_BUTT</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-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_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_PRC</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_LineCap">FT_STROKER_LINECAP_SQUARE</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-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</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_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</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_MITER</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-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_FIXED</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-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_VARIABLE</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-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</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_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</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_MS_LANGID_XXX">TT_MS_LANGID_XXX</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_Metrics">FT_Incremental_Metrics</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_NAME_ID_XXX">TT_NAME_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</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_OS2">TT_OS2</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="ft2-system_interface.html#FT_Stream">FT_Stream</a></td><td><a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int">FT_Int</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_PLATFORM_XXX">TT_PLATFORM_ADOBE</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_Stream_IoFunc">FT_Stream_IoFunc</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int32">FT_Int32</a></td><td><a href="ft2-bzip2.html#FT_Stream_OpenBzip2">FT_Stream_OpenBzip2</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int64">FT_Int64</a></td><td><a href="ft2-gzip.html#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</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-lzw.html#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</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-system_interface.html#FT_StreamDesc">FT_StreamDesc</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_NAMED_INSTANCE">FT_IS_NAMED_INSTANCE</a></td><td><a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="ft2-basic_types.html#FT_String">FT_String</a></td><td><a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</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">FT_Stroker</a></td><td><a href="ft2-truetype_tables.html#TT_UCR_XXX">TT_UCR_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_TRICKY">FT_IS_TRICKY</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_VertHeader">TT_VertHeader</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td><td><a href="ft2-properties.html#warping">warping</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></td></tr>
-</table>
-<hr>
-<table class="index-toc-link"><tr><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-
-<div class="timestamp">generated on Tue May 1 23:34:43 2018</div></body>
-</html>
diff --git a/freetype/docs/reference/ft2-lcd_filtering.html b/freetype/docs/reference/ft2-lcd_filtering.html
deleted file mode 100644
index 1e5d5ed7..00000000
--- a/freetype/docs/reference/ft2-lcd_filtering.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="lcd_filtering">LCD Filtering</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a></td></tr>
-<tr><td><a href="#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td></td></tr>
-</table>
-
-
-<p>Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your &lsquo;ftoption.h&rsquo;, which enables patented ClearType-style rendering, the LCD-optimized glyph bitmaps should be filtered to reduce color fringes inherent to this technology. The default FreeType LCD rendering uses different technology, and API described below, although available, does nothing.</p>
-<p>ClearType-style LCD rendering exploits the color-striped structure of LCD pixels, increasing the available resolution in the direction of the stripe (usually horizontal RGB) by a factor of&nbsp;3. Since these subpixels are color pixels, using them unfiltered creates severe color fringes. Use the <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> API to specify a low-pass filter, which is then applied to subpixel-rendered bitmaps generated through <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. The filter sacrifices some of the higher resolution to reduce color fringes, making the glyph image slightly blurrier. Positional improvements will remain.</p>
-<p>A filter should have two properties:</p>
-<p>1) It should be normalized, meaning the sum of the 5&nbsp;components should be 256 (0x100). It is possible to go above or under this target sum, however: going under means tossing out contrast, going over means invoking clamping and thereby non-linearities that increase contrast somewhat at the expense of greater distortion and color-fringing. Contrast is better enhanced through stem darkening.</p>
-<p>2) It should be color-balanced, meaning a filter &lsquo;{&nbsp;a, b, c, b, a&nbsp;}&rsquo; where a&nbsp;+ b&nbsp;=&nbsp;c. It distributes the computed coverage for one subpixel to all subpixels equally, sacrificing some won resolution but drastically reducing color-fringing. Positioning improvements remain! Note that color-fringing can only really be minimized when using a color-balanced filter and alpha-blending the glyph onto a surface in linear space; see <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>.</p>
-<p>Regarding the form, a filter can be a &lsquo;boxy&rsquo; filter or a &lsquo;beveled&rsquo; filter. Boxy filters are sharper but are less forgiving of non-ideal gamma curves of a screen (viewing angles!), beveled filters are fuzzier but more tolerant.</p>
-<p>Examples:</p>
-<p>- [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor normalized.</p>
-<p>- [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not normalized.</p>
-<p>- [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not balanced.</p>
-<p>- [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not balanced.</p>
-<p>- [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost balanced.</p>
-<p>- [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost balanced.</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-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, and <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>. 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 wider or taller than the dimensions of the corresponding outline with regard to the pixel grid. For example, for <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>, the filter adds 3&nbsp;subpixels to the left, and 3&nbsp;subpixels to the right. The bitmap offset values are adjusted accordingly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter.</p>
-<p>It is important to understand that linear alpha blending and gamma correction is critical for correctly rendering glyphs onto surfaces without artifacts and even more critical when subpixel rendering is involved.</p>
-<p>Each of the 3&nbsp;alpha values (subpixels) is independently used to blend one color channel. That is, red alpha blends the red channel of the text color with the red channel of the background pixel. The distribution of density values by the color-balanced filter assumes alpha blending is done in linear space; only then color artifacts cancel out.</p>
-
-<div class="section">
-<h3 id="FT_LcdFilter">FT_LcdFilter</h3>
-<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_LcdFilter_
- {
- <a href="ft2-lcd_filtering.html#FT_LCD_FILTER_NONE">FT_LCD_FILTER_NONE</a> = 0,
- <a href="ft2-lcd_filtering.html#FT_LCD_FILTER_DEFAULT">FT_LCD_FILTER_DEFAULT</a> = 1,
- <a href="ft2-lcd_filtering.html#FT_LCD_FILTER_LIGHT">FT_LCD_FILTER_LIGHT</a> = 2,
- <a href="ft2-lcd_filtering.html#FT_LCD_FILTER_LEGACY1">FT_LCD_FILTER_LEGACY1</a> = 3,
- <a href="ft2-lcd_filtering.html#FT_LCD_FILTER_LEGACY">FT_LCD_FILTER_LEGACY</a> = 16,
-
- FT_LCD_FILTER_MAX /* do not remove */
-
- } <b>FT_LcdFilter</b>;
-</pre>
-
-<p>A list of values to identify various types of LCD filters.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_LCD_FILTER_NONE">FT_LCD_FILTER_NONE</td><td class="desc">
-<p>Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color fringes.</p>
-</td></tr>
-<tr><td class="val" id="FT_LCD_FILTER_DEFAULT">FT_LCD_FILTER_DEFAULT</td><td class="desc">
-<p>The default filter reduces color fringes considerably, at the cost of a slight blurriness in the output.</p>
-<p>It is a beveled, normalized, and color-balanced five-tap filter that is more forgiving to screens with non-ideal gamma curves and viewing angles. Note that while color-fringing is reduced, it can only be minimized by using linear alpha blending and gamma correction to render glyphs onto surfaces. The default filter weights are [0x08 0x4D 0x56 0x4D 0x08].</p>
-</td></tr>
-<tr><td class="val" id="FT_LCD_FILTER_LIGHT">FT_LCD_FILTER_LIGHT</td><td class="desc">
-<p>The light filter is a variant that is sharper at the cost of slightly more color fringes than the default one.</p>
-<p>It is a boxy, normalized, and color-balanced three-tap filter that is less forgiving to screens with non-ideal gamma curves and viewing angles. This filter works best when the rendering system uses linear alpha blending and gamma correction to render glyphs onto surfaces. The light filter weights are [0x00 0x55 0x56 0x55 0x00].</p>
-</td></tr>
-<tr><td class="val" id="FT_LCD_FILTER_LEGACY">FT_LCD_FILTER_LEGACY</td><td class="desc">
-<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>
-<tr><td class="val" id="FT_LCD_FILTER_LEGACY1">FT_LCD_FILTER_LEGACY1</td><td class="desc">
-<p>For historical reasons, the FontConfig library returns a different enumeration value for legacy LCD filtering. To make code work that (incorrectly) forwards FontConfig's enumeration value to <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> without proper mapping, it is thus easiest to have another enumeration value, which is completely equal to &lsquo;FT_LCD_FILTER_LEGACY&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.3.0 (&lsquo;FT_LCD_FILTER_LEGACY1&rsquo; since 2.6.2)</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</h3>
-<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the target library instance.</p>
-</td></tr>
-<tr><td class="val" id="filter">filter</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<h4>since</h4>
-<p>2.3.0</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</h3>
-<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Library_SetLcdFilterWeights</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">unsigned</span> <span class="keyword">char</span> *weights );
-
-
- /*
- * @type:
- * FT_LcdFiveTapFilter
- *
- * @description:
- * A <span class="keyword">typedef</span> for passing the five LCD filter weights to
- * @<a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a> within an @<a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structure.
- *
- * @since:
- * 2.8
- *
- */
-#define FT_LCD_FILTER_FIVE_TAPS 5
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS];
-</pre>
-
-<p>This function can be used to enable LCD filter with custom weights, instead of using presets in <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the target library instance.</p>
-</td></tr>
-<tr><td class="val" id="weights">weights</td><td class="desc">
-<p>A pointer to an array; the function copies the first five bytes and uses them to specify the filter weights.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>LCD filter weights can also be set per face using <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a> with <a href="ft2-parameter_tags.html#FT_PARAM_TAG_LCD_FILTER_WEIGHTS">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a>.</p>
-
-<h4>since</h4>
-<p>2.4.0</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-list_processing.html b/freetype/docs/reference/ft2-list_processing.html
deleted file mode 100644
index bc4beae8..00000000
--- a/freetype/docs/reference/ft2-list_processing.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="list_processing">List Processing</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_List">FT_List</a></td><td><a href="#FT_List_Add">FT_List_Add</a></td><td><a href="#FT_List_Iterate">FT_List_Iterate</a></td></tr>
-<tr><td><a href="#FT_ListNode">FT_ListNode</a></td><td><a href="#FT_List_Insert">FT_List_Insert</a></td><td><a href="#FT_List_Iterator">FT_List_Iterator</a></td></tr>
-<tr><td><a href="#FT_ListRec">FT_ListRec</a></td><td><a href="#FT_List_Find">FT_List_Find</a></td><td><a href="#FT_List_Finalize">FT_List_Finalize</a></td></tr>
-<tr><td><a href="#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="#FT_List_Remove">FT_List_Remove</a></td><td><a href="#FT_List_Destructor">FT_List_Destructor</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_List_Up">FT_List_Up</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains various definitions related to list processing using doubly-linked nodes.</p>
-
-<div class="section">
-<h3 id="FT_List">FT_List</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_* <b>FT_List</b>;
-</pre>
-
-<p>A handle to a list record (see <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a>).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ListNode">FT_ListNode</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_* <b>FT_ListNode</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ListRec">FT_ListRec</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="head">head</td><td class="desc">
-<p>The head (first element) of doubly-linked list.</p>
-</td></tr>
-<tr><td class="val" id="tail">tail</td><td class="desc">
-<p>The tail (last element) of doubly-linked list.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ListNodeRec">FT_ListNodeRec</h3>
-<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
-<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>
-
-<p>A structure used to hold a single list element.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="prev">prev</td><td class="desc">
-<p>The previous element in the list. NULL if first.</p>
-</td></tr>
-<tr><td class="val" id="next">next</td><td class="desc">
-<p>The next element in the list. NULL if last.</p>
-</td></tr>
-<tr><td class="val" id="data">data</td><td class="desc">
-<p>A typeless pointer to the listed object.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Add">FT_List_Add</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Append an element to the end of a list.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The node to append.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Insert">FT_List_Insert</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Insert an element at the head of a list.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A pointer to parent list.</p>
-</td></tr>
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The node to insert.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Find">FT_List_Find</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Find the list node for a given listed object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr><td class="val" id="data">data</td><td class="desc">
-<p>The address of the listed object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>List node. NULL if it wasn't found.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Remove">FT_List_Remove</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Remove a node from a list. This function doesn't check whether the node is in the list!</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The node to remove.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A pointer to the parent list.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Up">FT_List_Up</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Move a node to the head/top of a list. Used to maintain LRU lists.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The node to move.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Iterate">FT_List_Iterate</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A handle to the list.</p>
-</td></tr>
-<tr><td class="val" id="iterator">iterator</td><td class="desc">
-<p>An iterator function, called on each node of the list.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A user-supplied field that is passed as the second argument to the iterator.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The result (a FreeType error code) of the last iterator call.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Iterator">FT_List_Iterator</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>An FT_List iterator function that is called during a list parse by <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="node">node</td><td class="desc">
-<p>The current iteration list node.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Finalize">FT_List_Finalize</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>Destroy all elements in the list as well as the list itself.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="list">list</td><td class="desc">
-<p>A handle to the list.</p>
-</td></tr>
-<tr><td class="val" id="destroy">destroy</td><td class="desc">
-<p>A list destructor that will be applied to each element of the list. Set this to NULL if not needed.</p>
-</td></tr>
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>The current memory object that handles deallocation.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A user-supplied field that is passed as the last argument to the destructor.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>This function expects that all nodes added by <a href="ft2-list_processing.html#FT_List_Add">FT_List_Add</a> or <a href="ft2-list_processing.html#FT_List_Insert">FT_List_Insert</a> have been dynamically allocated.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_List_Destructor">FT_List_Destructor</h3>
-<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
-<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>
-
-<p>An <a href="ft2-list_processing.html#FT_List">FT_List</a> iterator function that 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="system">system</td><td class="desc">
-<p>The current system object.</p>
-</td></tr>
-<tr><td class="val" id="data">data</td><td class="desc">
-<p>The current object to destroy.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-lzw.html b/freetype/docs/reference/ft2-lzw.html
deleted file mode 100644
index 2e24b933..00000000
--- a/freetype/docs/reference/ft2-lzw.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="lzw">LZW Streams</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td></td><td></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of LZW-specific functions.</p>
-
-<div class="section">
-<h3 id="FT_Stream_OpenLZW">FT_Stream_OpenLZW</h3>
-<p>Defined in FT_LZW_H (freetype/ftlzw.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>The target embedding stream.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>The source stream.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-mac_specific.html b/freetype/docs/reference/ft2-mac_specific.html
deleted file mode 100644
index 46ee03ba..00000000
--- a/freetype/docs/reference/ft2-mac_specific.html
+++ /dev/null
@@ -1,374 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="mac_specific">Mac Specific Interface</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td><a href="#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td></tr>
-<tr><td><a href="#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td><a href="#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td></tr>
-<tr><td><a href="#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td><a href="#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td></tr>
-</table>
-
-
-<p>The following definitions are only available if FreeType is compiled on a Macintosh.</p>
-
-<div class="section">
-<h3 id="FT_New_Face_From_FOND">FT_New_Face_From_FOND</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Create a new face object from a FOND resource.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="fond">fond</td><td class="desc">
-<p>A FOND resource.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>Only supported for the -1 &lsquo;sanity check&rsquo; special case.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>notes</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Return an FSSpec for the disk file containing the named font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="fontName">fontName</td><td class="desc">
-<p>Mac OS name of the font (e.g., Times New Roman Bold).</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="pathSpec">pathSpec</td><td class="desc">
-<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><td class="val" id="face_index">face_index</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Return an FSSpec for the disk file containing the named font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="fontName">fontName</td><td class="desc">
-<p>Mac OS name of the font in ATS framework.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="pathSpec">pathSpec</td><td class="desc">
-<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><td class="val" id="face_index">face_index</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Return a pathname of the disk file and face index for given font name that is handled by ATS framework.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="fontName">fontName</td><td class="desc">
-<p>Mac OS name of the font in ATS framework.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="path">path</td><td class="desc">
-<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><td class="val" id="maxPathSize">maxPathSize</td><td class="desc">
-<p>Lengths of the buffer &lsquo;path&rsquo; that client allocated.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Create a new face object from a given resource and typeface index using an FSSpec to the font file.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="spec">spec</td><td class="desc">
-<p>FSSpec to the font file.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</h3>
-<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
-<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>
-
-<p>Create a new face object from a given resource and typeface index using an FSRef to the font file.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="spec">spec</td><td class="desc">
-<p>FSRef to the font file.</p>
-</td></tr>
-<tr><td class="val" id="face_index">face_index</td><td class="desc">
-<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aface">aface</td><td class="desc">
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-module_management.html b/freetype/docs/reference/ft2-module_management.html
deleted file mode 100644
index b14dae4c..00000000
--- a/freetype/docs/reference/ft2-module_management.html
+++ /dev/null
@@ -1,824 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="module_management">Module Management</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Module">FT_Module</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="#FT_New_Library">FT_New_Library</a></td></tr>
-<tr><td><a href="#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="#FT_Done_Library">FT_Done_Library</a></td></tr>
-<tr><td><a href="#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="#FT_Reference_Library">FT_Reference_Library</a></td></tr>
-<tr><td><a href="#FT_Module_Class">FT_Module_Class</a></td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Renderer">FT_Renderer</a></td></tr>
-<tr><td><a href="#FT_Add_Module">FT_Add_Module</a></td><td><a href="#FT_Renderer_Class">FT_Renderer_Class</a></td></tr>
-<tr><td><a href="#FT_Get_Module">FT_Get_Module</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="#FT_Get_Renderer">FT_Get_Renderer</a></td></tr>
-<tr><td><a href="#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td><td><a href="#FT_Set_Renderer">FT_Set_Renderer</a></td></tr>
-<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Property_Set">FT_Property_Set</a></td><td><a href="#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td></tr>
-<tr><td><a href="#FT_Property_Get">FT_Property_Get</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Set_Default_Properties">FT_Set_Default_Properties</a></td><td><a href="#FT_Driver">FT_Driver</a></td></tr>
-</table>
-
-
-<p>The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime. Additionally, some module properties can be controlled also.</p>
-<p>Here is a list of possible values of the &lsquo;module_name&rsquo; field in the <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> structure.</p>
-<pre class="colored">
- autofitter
- bdf
- cff
- gxvalid
- otvalid
- pcf
- pfr
- psaux
- pshinter
- psnames
- raster1
- sfnt
- smooth, smooth-lcd, smooth-lcdv
- truetype
- type1
- type42
- t1cid
- winfonts
-</pre>
-<p>Note that the FreeType Cache sub-system is not a FreeType module.</p>
-
-<div class="section">
-<h3 id="FT_Module">FT_Module</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ModuleRec_* <b>FT_Module</b>;
-</pre>
-
-<p>A handle to a given FreeType module object. A module can be a font driver, a renderer, or anything else that provides services to the former.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Module_Constructor">FT_Module_Constructor</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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-module_management.html#FT_Module">FT_Module</a> module );
-</pre>
-
-<p>A function used to initialize (not create) a new module object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="module">module</td><td class="desc">
-<p>The module to initialize.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Module_Destructor">FT_Module_Destructor</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Module_Destructor</b>)( <a href="ft2-module_management.html#FT_Module">FT_Module</a> module );
-</pre>
-
-<p>A function used to finalize (not destroy) a given module object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="module">module</td><td class="desc">
-<p>The module to finalize.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Module_Requester">FT_Module_Requester</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- <span class="keyword">typedef</span> FT_Module_Interface
- (*<b>FT_Module_Requester</b>)( <a href="ft2-module_management.html#FT_Module">FT_Module</a> module,
- <span class="keyword">const</span> <span class="keyword">char</span>* name );
-</pre>
-
-<p>A function used to query a given module for a specific interface.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="module">module</td><td class="desc">
-<p>The module to be searched.</p>
-</td></tr>
-<tr><td class="val" id="name">name</td><td class="desc">
-<p>The name of the interface in the module.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Module_Class">FT_Module_Class</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<p>The module class descriptor.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="module_flags">module_flags</td><td class="desc">
-<p>Bit flags describing the module.</p>
-</td></tr>
-<tr><td class="val" id="module_size">module_size</td><td class="desc">
-<p>The size of one module object/instance in bytes.</p>
-</td></tr>
-<tr><td class="val" id="module_name">module_name</td><td class="desc">
-<p>The name of the module.</p>
-</td></tr>
-<tr><td class="val" id="module_version">module_version</td><td class="desc">
-<p>The version, as a 16.16 fixed number (major.minor).</p>
-</td></tr>
-<tr><td class="val" id="module_requires">module_requires</td><td class="desc">
-<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><td class="val" id="module_init">module_init</td><td class="desc">
-<p>The initializing function.</p>
-</td></tr>
-<tr><td class="val" id="module_done">module_done</td><td class="desc">
-<p>The finalizing function.</p>
-</td></tr>
-<tr><td class="val" id="get_interface">get_interface</td><td class="desc">
-<p>The interface requesting function.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Add_Module">FT_Add_Module</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<p>Add a new module to a given library instance.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="clazz">clazz</td><td class="desc">
-<p>A pointer to class descriptor for the module.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Module">FT_Get_Module</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-module_management.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>
-
-<p>Find a module by its name.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library object.</p>
-</td></tr>
-<tr><td class="val" id="module_name">module_name</td><td class="desc">
-<p>The module's name (as an ASCII string).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A module handle. 0&nbsp;if none was found.</p>
-
-<h4>note</h4>
-<p>FreeType's internal modules aren't documented very well, and you should look up the source code for details.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Remove_Module">FT_Remove_Module</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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-module_management.html#FT_Module">FT_Module</a> module );
-</pre>
-
-<p>Remove a given module from a library instance.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a library object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="module">module</td><td class="desc">
-<p>A handle to a module object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The module object is destroyed by the function in case of success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Add_Default_Modules">FT_Add_Default_Modules</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a new library object.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Property_Set">FT_Property_Set</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Property_Set</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_String">FT_String</a>* module_name,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_String">FT_String</a>* property_name,
- <span class="keyword">const</span> <span class="keyword">void</span>* value );
-</pre>
-
-<p>Set a property for a given module.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library the module is part of.</p>
-</td></tr>
-<tr><td class="val" id="module_name">module_name</td><td class="desc">
-<p>The module name.</p>
-</td></tr>
-<tr><td class="val" id="property_name">property_name</td><td class="desc">
-<p>The property name. Properties are described in section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
-<p>Note that only a few modules have properties.</p>
-</td></tr>
-<tr><td class="val" id="value">value</td><td class="desc">
-<p>A generic pointer to a variable or structure that gives the new value of the property. The exact definition of &lsquo;value&rsquo; is dependent on the property; see section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>If &lsquo;module_name&rsquo; isn't a valid module name, or &lsquo;property_name&rsquo; doesn't specify a valid property, or if &lsquo;value&rsquo; doesn't represent a valid value for the given property, an error is returned.</p>
-<p>The following example sets property &lsquo;bar&rsquo; (a simple integer) in module &lsquo;foo&rsquo; to value&nbsp;1.</p>
-<pre class="colored">
- FT_UInt bar;
-
-
- bar = 1;
- FT_Property_Set( library, "foo", "bar", &amp;bar );
-</pre>
-<p>Note that the FreeType Cache sub-system doesn't recognize module property changes. To avoid glyph lookup confusion within the cache you should call <a href="ft2-cache_subsystem.html#FTC_Manager_Reset">FTC_Manager_Reset</a> to completely flush the cache if a module property gets changed after <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a> has been called.</p>
-<p>It is not possible to set properties of the FreeType Cache sub-system itself with FT_Property_Set; use ?FTC_Property_Set? instead.</p>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Property_Get">FT_Property_Get</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Property_Get</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_String">FT_String</a>* module_name,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_String">FT_String</a>* property_name,
- <span class="keyword">void</span>* value );
-</pre>
-
-<p>Get a module's property value.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library the module is part of.</p>
-</td></tr>
-<tr><td class="val" id="module_name">module_name</td><td class="desc">
-<p>The module name.</p>
-</td></tr>
-<tr><td class="val" id="property_name">property_name</td><td class="desc">
-<p>The property name. Properties are described in section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="value">value</td><td class="desc">
-<p>A generic pointer to a variable or structure that gives the value of the property. The exact definition of &lsquo;value&rsquo; is dependent on the property; see section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>If &lsquo;module_name&rsquo; isn't a valid module name, or &lsquo;property_name&rsquo; doesn't specify a valid property, or if &lsquo;value&rsquo; doesn't represent a valid value for the given property, an error is returned.</p>
-<p>The following example gets property &lsquo;baz&rsquo; (a range) in module &lsquo;foo&rsquo;.</p>
-<pre class="colored">
- typedef range_
- {
- FT_Int32 min;
- FT_Int32 max;
-
- } range;
-
- range baz;
-
-
- FT_Property_Get( library, "foo", "baz", &amp;baz );
-</pre>
-<p>It is not possible to retrieve properties of the FreeType Cache sub-system with FT_Property_Get; use ?FTC_Property_Get? instead.</p>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Default_Properties">FT_Set_Default_Properties</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Set_Default_Properties</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-</pre>
-
-<p>If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is set, this function reads the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable to control driver properties. See section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; for more.</p>
-<p>If the compilation option is not set, this function does nothing.</p>
-<p>&lsquo;FREETYPE_PROPERTIES&rsquo; has the following syntax form (broken here into multiple lines for better readability).</p>
-<pre class="colored">
- &lt;optional whitespace&gt;
- &lt;module-name1&gt; ':'
- &lt;property-name1&gt; '=' &lt;property-value1&gt;
- &lt;whitespace&gt;
- &lt;module-name2&gt; ':'
- &lt;property-name2&gt; '=' &lt;property-value2&gt;
- ...
-</pre>
-<p>Example:</p>
-<pre class="colored">
- FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
- cff:no-stem-darkening=1 \
- autofitter:warping=1
-</pre>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a new library object.</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_New_Library">FT_New_Library</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<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. Note, however, that the used <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> structure is expected to remain valid for the life of the <a href="ft2-base_interface.html#FT_Library">FT_Library</a> object.</p>
-<p>Normally, you would call this function (followed by a call to <a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a> or a series of calls to <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>, and a call to <a href="ft2-module_management.html#FT_Set_Default_Properties">FT_Set_Default_Properties</a>) instead of <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a> to initialize the FreeType library.</p>
-<p>Don't use <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a> but <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a> to destroy a library instance.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A handle to the original memory object.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="alibrary">alibrary</td><td class="desc">
-<p>A pointer to handle of a new library object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>See the discussion of reference counters in the description of <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_Library">FT_Done_Library</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<p>Discard a given library object. This closes all drivers and discards all resource objects.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the target library.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>See the discussion of reference counters in the description of <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Reference_Library">FT_Reference_Library</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Reference_Library</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-</pre>
-
-<p>A counter gets initialized to&nbsp;1 at the time an <a href="ft2-base_interface.html#FT_Library">FT_Library</a> structure is created. This function increments the counter. <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a> then only destroys a library if the counter is&nbsp;1, otherwise it simply decrements the counter.</p>
-<p>This function helps in managing life-cycles of structures that reference <a href="ft2-base_interface.html#FT_Library">FT_Library</a> objects.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a target library object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>since</h4>
-<p>2.4.2</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Renderer">FT_Renderer</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RendererRec_* <b>FT_Renderer</b>;
-</pre>
-
-<p>A handle to a given FreeType renderer. A renderer is a module in charge of converting a glyph's outline image to a bitmap. It supports a single glyph image format, and one or more target surface depths.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Renderer_Class">FT_Renderer_Class</h3>
-<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
-<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>
-
-<p>The renderer module class descriptor.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="root">root</td><td class="desc">
-<p>The root <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> fields.</p>
-</td></tr>
-<tr><td class="val" id="glyph_format">glyph_format</td><td class="desc">
-<p>The glyph image format this renderer handles.</p>
-</td></tr>
-<tr><td class="val" id="render_glyph">render_glyph</td><td class="desc">
-<p>A method used to render the image that is in a given glyph slot into a bitmap.</p>
-</td></tr>
-<tr><td class="val" id="transform_glyph">transform_glyph</td><td class="desc">
-<p>A method used to transform the image that is in a given glyph slot.</p>
-</td></tr>
-<tr><td class="val" id="get_glyph_cbox">get_glyph_cbox</td><td class="desc">
-<p>A method used to access the glyph's cbox.</p>
-</td></tr>
-<tr><td class="val" id="set_mode">set_mode</td><td class="desc">
-<p>A method used to pass additional parameters.</p>
-</td></tr>
-<tr><td class="val" id="raster_class">raster_class</td><td class="desc">
-<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>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Renderer">FT_Get_Renderer</h3>
-<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-module_management.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>
-
-<p>Retrieve the current renderer for a given glyph format.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library object.</p>
-</td></tr>
-<tr><td class="val" id="format">format</td><td class="desc">
-<p>The glyph format.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A renderer handle. 0&nbsp;if none found.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Renderer">FT_Set_Renderer</h3>
-<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
-<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-module_management.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>
-
-<p>Set the current renderer to use, and set additional mode.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="renderer">renderer</td><td class="desc">
-<p>A handle to the renderer object.</p>
-</td></tr>
-<tr><td class="val" id="num_params">num_params</td><td class="desc">
-<p>The number of additional parameters.</p>
-</td></tr>
-<tr><td class="val" id="parameters">parameters</td><td class="desc">
-<p>Additional parameters.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>Currently, no FreeType renderer module uses &lsquo;parameters&rsquo;; you should thus always pass NULL as the value.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Debug_Hook">FT_Set_Debug_Hook</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<p>Set a debug hook function for debugging the interpreter of a font format.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="hook_index">hook_index</td><td class="desc">
-<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><td class="val" id="debug_hook">debug_hook</td><td class="desc">
-<p>The function used to debug the interpreter.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Driver">FT_Driver</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_DriverRec_* <b>FT_Driver</b>;
-</pre>
-
-<p>A handle to a given FreeType font driver object. A font driver is a module capable of creating faces from font files.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-multiple_masters.html b/freetype/docs/reference/ft2-multiple_masters.html
deleted file mode 100644
index 669dc0ab..00000000
--- a/freetype/docs/reference/ft2-multiple_masters.html
+++ /dev/null
@@ -1,723 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="multiple_masters">Multiple Masters</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td></tr>
-<tr><td><a href="#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="#FT_Get_Var_Design_Coordinates">FT_Get_Var_Design_Coordinates</a></td></tr>
-<tr><td><a href="#FT_Var_Axis">FT_Var_Axis</a></td><td><a href="#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td></tr>
-<tr><td><a href="#FT_Var_Named_Style">FT_Var_Named_Style</a></td><td><a href="#FT_Get_MM_Blend_Coordinates">FT_Get_MM_Blend_Coordinates</a></td></tr>
-<tr><td><a href="#FT_MM_Var">FT_MM_Var</a></td><td><a href="#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td></tr>
-<tr><td><a href="#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td><a href="#FT_Get_Var_Blend_Coordinates">FT_Get_Var_Blend_Coordinates</a></td></tr>
-<tr><td><a href="#FT_Get_MM_Var">FT_Get_MM_Var</a></td><td><a href="#FT_VAR_AXIS_FLAG_XXX">FT_VAR_AXIS_FLAG_XXX</a></td></tr>
-<tr><td><a href="#FT_Done_MM_Var">FT_Done_MM_Var</a></td><td><a href="#FT_Get_Var_Axis_Flags">FT_Get_Var_Axis_Flags</a></td></tr>
-<tr><td><a href="#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="#FT_Set_Named_Instance">FT_Set_Named_Instance</a></td></tr>
-</table>
-
-
-<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>Besides Adobe MM fonts, the interface supports Apple's TrueType GX and OpenType variation fonts. Some of the routines only work with Adobe MM fonts, others will work with all three types. They are similar enough that a consistent interface makes sense.</p>
-
-<div class="section">
-<h3 id="FT_MM_Axis">FT_MM_Axis</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>A structure to model a given axis in design space for Multiple Masters fonts.</p>
-<p>This structure can't be used for TrueType GX or OpenType variation fonts.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="name">name</td><td class="desc">
-<p>The axis's name.</p>
-</td></tr>
-<tr><td class="val" id="minimum">minimum</td><td class="desc">
-<p>The axis's minimum design coordinate.</p>
-</td></tr>
-<tr><td class="val" id="maximum">maximum</td><td class="desc">
-<p>The axis's maximum design coordinate.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Multi_Master">FT_Multi_Master</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>A structure to model the axes and space of a Multiple Masters font.</p>
-<p>This structure can't be used for TrueType GX or OpenType variation fonts.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="num_axis">num_axis</td><td class="desc">
-<p>Number of axes. Cannot exceed&nbsp;4.</p>
-</td></tr>
-<tr><td class="val" id="num_designs">num_designs</td><td class="desc">
-<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><td class="val" id="axis">axis</td><td class="desc">
-<p>A table of axis descriptors.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Var_Axis">FT_Var_Axis</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>A structure to model a given axis in design space for Multiple Masters, TrueType GX, and OpenType variation fonts.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="name">name</td><td class="desc">
-<p>The axis's name. Not always meaningful for TrueType GX or OpenType variation fonts.</p>
-</td></tr>
-<tr><td class="val" id="minimum">minimum</td><td class="desc">
-<p>The axis's minimum design coordinate.</p>
-</td></tr>
-<tr><td class="val" id="def">def</td><td class="desc">
-<p>The axis's default design coordinate. FreeType computes meaningful default values for Adobe MM fonts.</p>
-</td></tr>
-<tr><td class="val" id="maximum">maximum</td><td class="desc">
-<p>The axis's maximum design coordinate.</p>
-</td></tr>
-<tr><td class="val" id="tag">tag</td><td class="desc">
-<p>The axis's tag (the equivalent to &lsquo;name&rsquo; for TrueType GX and OpenType variation fonts). FreeType provides default values for Adobe MM fonts if possible.</p>
-</td></tr>
-<tr><td class="val" id="strid">strid</td><td class="desc">
-<p>The axis name entry in the font's &lsquo;name&rsquo; table. This is another (and often better) version of the &lsquo;name&rsquo; field for TrueType GX or OpenType variation fonts. Not meaningful for Adobe MM fonts.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The fields &lsquo;minimum&rsquo;, &lsquo;def&rsquo;, and &lsquo;maximum&rsquo; are 16.16 fractional values for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the values are integers.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Var_Named_Style">FT_Var_Named_Style</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> psid; /* since 2.7.1 */
-
- } <b>FT_Var_Named_Style</b>;
-</pre>
-
-<p>A structure to model a named instance in a TrueType GX or OpenType variation font.</p>
-<p>This structure can't be used for Adobe MM fonts.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>The design coordinates for this instance. This is an array with one entry for each axis.</p>
-</td></tr>
-<tr><td class="val" id="strid">strid</td><td class="desc">
-<p>The entry in &lsquo;name&rsquo; table identifying this instance.</p>
-</td></tr>
-<tr><td class="val" id="psid">psid</td><td class="desc">
-<p>The entry in &lsquo;name&rsquo; table identifying a PostScript name for this instance. Value 0xFFFF indicates a missing entry.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MM_Var">FT_MM_Var</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>A structure to model the axes and space of an Adobe MM, TrueType GX, or OpenType variation font.</p>
-<p>Some fields are specific to one format and not to the others.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="num_axis">num_axis</td><td class="desc">
-<p>The number of axes. The maximum value is&nbsp;4 for Adobe MM fonts; no limit in TrueType GX or OpenType variation fonts.</p>
-</td></tr>
-<tr><td class="val" id="num_designs">num_designs</td><td class="desc">
-<p>The number of designs; should be normally 2^num_axis for Adobe MM fonts. Not meaningful for TrueType GX or OpenType variation fonts (where every glyph could have a different number of designs).</p>
-</td></tr>
-<tr><td class="val" id="num_namedstyles">num_namedstyles</td><td class="desc">
-<p>The number of named styles; a &lsquo;named style&rsquo; is a tuple of design coordinates that has a string ID (in the &lsquo;name&rsquo; table) associated with it. The font can tell the user that, for example, [Weight=1.5,Width=1.1] is &lsquo;Bold&rsquo;. Another name for &lsquo;named style&rsquo; is &lsquo;named instance&rsquo;.</p>
-<p>For Adobe Multiple Masters fonts, this value is always zero because the format does not support named styles.</p>
-</td></tr>
-<tr><td class="val" id="axis">axis</td><td class="desc">
-<p>An axis descriptor table. TrueType GX and OpenType variation fonts contain slightly more data than Adobe MM fonts. Memory management of this pointer is done internally by FreeType.</p>
-</td></tr>
-<tr><td class="val" id="namedstyle">namedstyle</td><td class="desc">
-<p>A named style (instance) table. Only meaningful for TrueType GX and OpenType variation fonts. Memory management of this pointer is done internally by FreeType.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Multi_Master">FT_Get_Multi_Master</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>Retrieve a variation descriptor of a given Adobe MM font.</p>
-<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="amaster">amaster</td><td class="desc">
-<p>The Multiple Masters descriptor.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_MM_Var">FT_Get_MM_Var</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>Retrieve a variation descriptor for a given font.</p>
-<p>This function works with all supported variation formats.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="amaster">amaster</td><td class="desc">
-<p>The variation descriptor. Allocates a data structure, which the user must deallocate with a call to <a href="ft2-multiple_masters.html#FT_Done_MM_Var">FT_Done_MM_Var</a> after use.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_MM_Var">FT_Done_MM_Var</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Done_MM_Var</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a> *amaster );
-</pre>
-
-<p>Free the memory allocated by <a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle of the face's parent library object that was used in the call to <a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a> to create &lsquo;amaster&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>For Adobe MM fonts, choose an interpolated font design through design coordinates.</p>
-<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
-</td></tr>
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>An array of design coordinates.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>[Since 2.8.1] To reset all axes to the default values, call the function with &lsquo;num_coords&rsquo; set to zero and &lsquo;coords&rsquo; set to NULL.</p>
-<p>[Since 2.9] If &lsquo;num_coords&rsquo; is larger than zero, this function sets the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VARIATION</a> bit in <a href="ft2-base_interface.html#FT_Face">FT_Face</a>'s &lsquo;face_flags&rsquo; field (i.e., <a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a> will return true). If &lsquo;num_coords&rsquo; is zero, this bit flag gets unset.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>Choose an interpolated font design through design coordinates.</p>
-<p>This function works with all supported variation formats.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
-</td></tr>
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>An array of design coordinates.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>[Since 2.8.1] To reset all axes to the default values, call the function with &lsquo;num_coords&rsquo; set to zero and &lsquo;coords&rsquo; set to NULL. [Since 2.9] &lsquo;Default values&rsquo; means the currently selected named instance (or the base font if no named instance is selected).</p>
-<p>[Since 2.9] If &lsquo;num_coords&rsquo; is larger than zero, this function sets the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VARIATION</a> bit in <a href="ft2-base_interface.html#FT_Face">FT_Face</a>'s &lsquo;face_flags&rsquo; field (i.e., <a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a> will return true). If &lsquo;num_coords&rsquo; is zero, this bit flag gets unset.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Var_Design_Coordinates">FT_Get_Var_Design_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_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>
-
-<p>Get the design coordinates of the currently selected interpolated font.</p>
-<p>This function works with all supported variation formats.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of design coordinates to retrieve. If it is larger than the number of axes, set the excess values to&nbsp;0.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>The design coordinates array.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>since</h4>
-<p>2.7.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>Choose an interpolated font design through normalized blend coordinates.</p>
-<p>This function works with all supported variation formats.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
-</td></tr>
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>The design coordinates array (each element must be between 0 and 1.0 for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and OpenType variation fonts).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>[Since 2.8.1] To reset all axes to the default values, call the function with &lsquo;num_coords&rsquo; set to zero and &lsquo;coords&rsquo; set to NULL. [Since 2.9] &lsquo;Default values&rsquo; means the currently selected named instance (or the base font if no named instance is selected).</p>
-<p>[Since 2.9] If &lsquo;num_coords&rsquo; is larger than zero, this function sets the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VARIATION</a> bit in <a href="ft2-base_interface.html#FT_Face">FT_Face</a>'s &lsquo;face_flags&rsquo; field (i.e., <a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a> will return true). If &lsquo;num_coords&rsquo; is zero, this bit flag gets unset.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_MM_Blend_Coordinates">FT_Get_MM_Blend_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_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>
-
-<p>Get the normalized blend coordinates of the currently selected interpolated font.</p>
-<p>This function works with all supported variation formats.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of normalized blend coordinates to retrieve. If it is larger than the number of axes, set the excess values to&nbsp;0.5 for Adobe MM fonts, and to&nbsp;0 for TrueType GX and OpenType variation fonts.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="coords">coords</td><td class="desc">
-<p>The normalized blend coordinates array.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>since</h4>
-<p>2.7.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<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>
-
-<p>This is another name of <a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Var_Blend_Coordinates">FT_Get_Var_Blend_Coordinates</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_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>
-
-<p>This is another name of <a href="ft2-multiple_masters.html#FT_Get_MM_Blend_Coordinates">FT_Get_MM_Blend_Coordinates</a>.</p>
-
-<h4>since</h4>
-<p>2.7.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_VAR_AXIS_FLAG_XXX">FT_VAR_AXIS_FLAG_XXX</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
-#define <a href="ft2-multiple_masters.html#FT_VAR_AXIS_FLAG_HIDDEN">FT_VAR_AXIS_FLAG_HIDDEN</a> 1
-</pre>
-
-<p>A list of bit flags used in the return value of <a href="ft2-multiple_masters.html#FT_Get_Var_Axis_Flags">FT_Get_Var_Axis_Flags</a>.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_VAR_AXIS_FLAG_HIDDEN">FT_VAR_AXIS_FLAG_HIDDEN</td><td class="desc">
-<p>The variation axis should not be exposed to user interfaces.</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.8.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Var_Axis_Flags">FT_Get_Var_Axis_Flags</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Var_Axis_Flags</b>( <a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a>* master,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> axis_index,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a>* flags );
-</pre>
-
-<p>Get the &lsquo;flags&rsquo; field of an OpenType Variation Axis Record.</p>
-<p>Not meaningful for Adobe MM fonts (&lsquo;*flags&rsquo; is always zero).</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="master">master</td><td class="desc">
-<p>The variation descriptor.</p>
-</td></tr>
-<tr><td class="val" id="axis_index">axis_index</td><td class="desc">
-<p>The index of the requested variation axis.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="flags">flags</td><td class="desc">
-<p>The &lsquo;flags&rsquo; field. See <a href="ft2-multiple_masters.html#FT_VAR_AXIS_FLAG_XXX">FT_VAR_AXIS_FLAG_XXX</a> for possible values.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>since</h4>
-<p>2.8.1</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Set_Named_Instance">FT_Set_Named_Instance</h3>
-<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Named_Instance</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> instance_index );
-</pre>
-
-<p>Set or change the current named instance.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="instance_index">instance_index</td><td class="desc">
-<p>The index of the requested instance, starting with value 1. If set to value 0, FreeType switches to font access without a named instance.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The function uses the value of &lsquo;instance_index&rsquo; to set bits 16-30 of the face's &lsquo;face_index&rsquo; field. It also resets any variation applied to the font, and the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VARIATION</a> bit of the face's &lsquo;face_flags&rsquo; field gets reset to zero (i.e., <a href="ft2-base_interface.html#FT_IS_VARIATION">FT_IS_VARIATION</a> will return false).</p>
-<p>For Adobe MM fonts (which don't have named instances) this function simply resets the current face to the default instance.</p>
-
-<h4>since</h4>
-<p>2.9</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-ot_validation.html b/freetype/docs/reference/ft2-ot_validation.html
deleted file mode 100644
index 27bd40a1..00000000
--- a/freetype/docs/reference/ft2-ot_validation.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="ot_validation">OpenType Validation</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td>&nbsp;</td><td></td></tr>
-<tr><td><a href="#FT_OpenType_Free">FT_OpenType_Free</a></td><td><a href="#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
-
-<div class="section">
-<h3 id="FT_OpenType_Validate">FT_OpenType_Validate</h3>
-<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
-<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>
-
-<p>Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
-<p>A bit field that 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>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="BASE_table">BASE_table</td><td class="desc">
-<p>A pointer to the BASE table.</p>
-</td></tr>
-<tr><td class="val" id="GDEF_table">GDEF_table</td><td class="desc">
-<p>A pointer to the GDEF table.</p>
-</td></tr>
-<tr><td class="val" id="GPOS_table">GPOS_table</td><td class="desc">
-<p>A pointer to the GPOS table.</p>
-</td></tr>
-<tr><td class="val" id="GSUB_table">GSUB_table</td><td class="desc">
-<p>A pointer to the GSUB table.</p>
-</td></tr>
-<tr><td class="val" id="JSTF_table">JSTF_table</td><td class="desc">
-<p>A pointer to the JSTF table.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OpenType_Free">FT_OpenType_Free</h3>
-<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
-<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>
-
-<p>Free the buffer allocated by OpenType validator.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="table">table</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</h3>
-<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
-<pre>
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_BASE">FT_VALIDATE_BASE</a> 0x0100
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_GDEF">FT_VALIDATE_GDEF</a> 0x0200
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_GPOS">FT_VALIDATE_GPOS</a> 0x0400
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_GSUB">FT_VALIDATE_GSUB</a> 0x0800
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_JSTF">FT_VALIDATE_JSTF</a> 0x1000
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_MATH">FT_VALIDATE_MATH</a> 0x2000
-
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OT">FT_VALIDATE_OT</a> ( <a href="ft2-ot_validation.html#FT_VALIDATE_BASE">FT_VALIDATE_BASE</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_GDEF">FT_VALIDATE_GDEF</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_GPOS">FT_VALIDATE_GPOS</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_GSUB">FT_VALIDATE_GSUB</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_JSTF">FT_VALIDATE_JSTF</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_MATH">FT_VALIDATE_MATH</a> )
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_VALIDATE_BASE">FT_VALIDATE_BASE</td><td class="desc">
-<p>Validate BASE table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_GDEF">FT_VALIDATE_GDEF</td><td class="desc">
-<p>Validate GDEF table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_GPOS">FT_VALIDATE_GPOS</td><td class="desc">
-<p>Validate GPOS table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_GSUB">FT_VALIDATE_GSUB</td><td class="desc">
-<p>Validate GSUB table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_JSTF">FT_VALIDATE_JSTF</td><td class="desc">
-<p>Validate JSTF table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_MATH">FT_VALIDATE_MATH</td><td class="desc">
-<p>Validate MATH table.</p>
-</td></tr>
-<tr><td class="val" id="FT_VALIDATE_OT">FT_VALIDATE_OT</td><td class="desc">
-<p>Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-outline_processing.html b/freetype/docs/reference/ft2-outline_processing.html
deleted file mode 100644
index 3b12f93b..00000000
--- a/freetype/docs/reference/ft2-outline_processing.html
+++ /dev/null
@@ -1,970 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="outline_processing">Outline Processing</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Outline">FT_Outline</a></td><td><a href="#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td></tr>
-<tr><td><a href="#FT_Outline_New">FT_Outline_New</a></td><td><a href="#FT_Outline_Render">FT_Outline_Render</a></td></tr>
-<tr><td><a href="#FT_Outline_Done">FT_Outline_Done</a></td><td><a href="#FT_Outline_Decompose">FT_Outline_Decompose</a></td></tr>
-<tr><td><a href="#FT_Outline_Copy">FT_Outline_Copy</a></td><td><a href="#FT_Outline_Funcs">FT_Outline_Funcs</a></td></tr>
-<tr><td><a href="#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td></tr>
-<tr><td><a href="#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td></tr>
-<tr><td><a href="#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td><a href="#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td></tr>
-<tr><td><a href="#FT_Outline_EmboldenXY">FT_Outline_EmboldenXY</a></td><td><a href="#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td></tr>
-<tr><td><a href="#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Outline_Check">FT_Outline_Check</a></td><td><a href="#FT_Orientation">FT_Orientation</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td></tr>
-<tr><td><a href="#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="#FT_OUTLINE_XXX">FT_OUTLINE_XXX</a></td></tr>
-<tr><td>&nbsp;</td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Outline">FT_Outline</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>This structure is used to describe an outline to the scan-line converter.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="n_contours">n_contours</td><td class="desc">
-<p>The number of contours in the outline.</p>
-</td></tr>
-<tr><td class="val" id="n_points">n_points</td><td class="desc">
-<p>The number of points in the outline.</p>
-</td></tr>
-<tr><td class="val" id="points">points</td><td class="desc">
-<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><td class="val" id="tags">tags</td><td class="desc">
-<p>A pointer to an array of &lsquo;n_points&rsquo; chars, giving each outline point's type.</p>
-<p>If bit&nbsp;0 is unset, the point is &lsquo;off&rsquo; the curve, i.e., a Bezier control point, while it is &lsquo;on&rsquo; if set.</p>
-<p>Bit&nbsp;1 is meaningful for &lsquo;off&rsquo; points only. If set, it indicates a third-order Bezier arc control point; and a second-order control point if unset.</p>
-<p>If bit&nbsp;2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is the same as the argument to the SCANMODE instruction).</p>
-<p>Bits 3 and&nbsp;4 are reserved for internal purposes.</p>
-</td></tr>
-<tr><td class="val" id="contours">contours</td><td class="desc">
-<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><td class="val" id="flags">flags</td><td class="desc">
-<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_XXX">FT_OUTLINE_XXX</a>.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>The B/W rasterizer only checks bit&nbsp;2 in the &lsquo;tags&rsquo; array for the first point of each contour. The drop-out mode as given with <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a>, <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SMART_DROPOUTS</a>, and <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_INCLUDE_STUBS</a> in &lsquo;flags&rsquo; is then overridden.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_New">FT_Outline_New</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Create a new outline of a given size.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<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><td class="val" id="numPoints">numPoints</td><td class="desc">
-<p>The maximum number of points within the outline. Must be smaller than or equal to 0xFFFF (65535).</p>
-</td></tr>
-<tr><td class="val" id="numContours">numContours</td><td class="desc">
-<p>The maximum number of contours within the outline. This value must be in the range 0 to &lsquo;numPoints&rsquo;.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="anoutline">anoutline</td><td class="desc">
-<p>A handle to the new outline.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The reason why this function takes a &lsquo;library&rsquo; parameter is simply to use the library's memory allocator.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Done">FT_Outline_Done</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Destroy an outline created with <a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle of the library object used to allocate the outline.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the outline object to be discarded.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>If the outline's &lsquo;owner&rsquo; field is not set, only the outline descriptor will be released.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Copy">FT_Outline_Copy</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="source">source</td><td class="desc">
-<p>A handle to the source outline.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="target">target</td><td class="desc">
-<p>A handle to the target outline.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Translate">FT_Outline_Translate</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Apply a simple translation to the points of an outline.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="xOffset">xOffset</td><td class="desc">
-<p>The horizontal offset.</p>
-</td></tr>
-<tr><td class="val" id="yOffset">yOffset</td><td class="desc">
-<p>The vertical offset.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Transform">FT_Outline_Transform</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="matrix">matrix</td><td class="desc">
-<p>A pointer to the transformation matrix.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Embolden">FT_Outline_Embolden</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<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>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A handle to the target outline.</p>
-</td></tr>
-</table>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="strength">strength</td><td class="desc">
-<p>How strong the glyph is emboldened. Expressed in 26.6 pixel format.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>If you need &lsquo;better&rsquo; metrics values you should call <a href="ft2-outline_processing.html#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a> or <a href="ft2-outline_processing.html#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a>.</p>
-<p>Example call:</p>
-<pre class="colored">
- FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
- if ( face-&gt;glyph-&gt;format == FT_GLYPH_FORMAT_OUTLINE )
- FT_Outline_Embolden( &amp;face-&gt;glyph-&gt;outline, strength );
-</pre>
-<p>To get meaningful results, font scaling values must be set with functions like <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> before calling FT_Render_Glyph.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_EmboldenXY">FT_Outline_EmboldenXY</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_EmboldenXY</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <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>
-
-<p>Embolden an outline. The new outline will be &lsquo;xstrength&rsquo; pixels wider and &lsquo;ystrength&rsquo; pixels higher. Otherwise, it is similar to <a href="ft2-outline_processing.html#FT_Outline_Embolden">FT_Outline_Embolden</a>, which uses the same strength in both directions.</p>
-
-<h4>since</h4>
-<p>2.4.10</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Reverse">FT_Outline_Reverse</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs.</p>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>This function toggles the bit flag <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Check">FT_Outline_Check</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Check the contents of an outline descriptor.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A handle to a source outline.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>An empty outline, or an outline with a single point only is also valid.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Get_CBox">FT_Outline_Get_CBox</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Return an outline's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="acbox">acbox</td><td class="desc">
-<p>The outline's control box.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a> for a discussion of tricky fonts.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Get_BBox">FT_Outline_Get_BBox</h3>
-<p>Defined in FT_BBOX_H (freetype/ftbbox.h).</p>
-<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>
-
-<p>Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm that returns <i>very</i> quickly when the two boxes coincide. Otherwise, the outline Bezier arcs are traversed to extract their extrema.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the source outline.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="abbox">abbox</td><td class="desc">
-<p>The outline's exact bounding box.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>If the font is tricky and the glyph has been loaded with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>, the resulting BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the BBox, which can be eventually converted back to font units.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="abitmap">abitmap</td><td class="desc">
-<p>A pointer to the target bitmap descriptor.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Render">FT_Outline_Render</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Render an outline within a bitmap using the current scan-convert. This function 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="params">params</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Decompose">FT_Outline_Decompose</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<p>Walk over an outline's structure to decompose it into individual segments and Bezier arcs. This function also emits &lsquo;move to&rsquo; operations to indicate the start of new contours in the outline.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A pointer to the source target.</p>
-</td></tr>
-<tr><td class="val" id="func_interface">func_interface</td><td class="desc">
-<p>A table of &lsquo;emitters&rsquo;, i.e., function pointers called during decomposition to indicate path operations.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A typeless pointer that is passed to each emitter during the decomposition. It can be used to store the state during the decomposition.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>A contour that contains a single point only is represented by a &lsquo;move to&rsquo; operation followed by &lsquo;line to&rsquo; to the same point. In most cases, it is best to filter this out before using the outline for stroking purposes (otherwise it would result in a visible dot when round caps are used).</p>
-<p>Similarly, the function returns success for an empty outline also (doing nothing, this is, not calling any emitter); if necessary, you should filter this out, too.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Funcs">FT_Outline_Funcs</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Beziers.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="move_to">move_to</td><td class="desc">
-<p>The &lsquo;move to&rsquo; emitter.</p>
-</td></tr>
-<tr><td class="val" id="line_to">line_to</td><td class="desc">
-<p>The segment emitter.</p>
-</td></tr>
-<tr><td class="val" id="conic_to">conic_to</td><td class="desc">
-<p>The second-order Bezier arc emitter.</p>
-</td></tr>
-<tr><td class="val" id="cubic_to">cubic_to</td><td class="desc">
-<p>The third-order Bezier arc emitter.</p>
-</td></tr>
-<tr><td class="val" id="shift">shift</td><td class="desc">
-<p>The shift that is applied to coordinates before they are sent to the emitter.</p>
-</td></tr>
-<tr><td class="val" id="delta">delta</td><td class="desc">
-<p>The delta that is applied to coordinates before they are sent to the emitter, but after the shift.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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' = (y &lt;&lt; shift) - delta
-</pre>
-<p>Set the values of &lsquo;shift&rsquo; and &lsquo;delta&rsquo; to&nbsp;0 to get the original point coordinates.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the target point of the &lsquo;move to&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_LineToFunc">FT_Outline_LineToFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the target point of the &lsquo;line to&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A function pointer type used to describe the signature of a &lsquo;conic to&rsquo; function during outline walking or decomposition.</p>
-<p>A &lsquo;conic to&rsquo; is emitted to indicate a second-order Bezier arc in the outline.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="control">control</td><td class="desc">
-<p>An intermediate control point between the last position and the new target in &lsquo;to&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the target end point of the conic arc.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A function pointer type used to describe the signature of a &lsquo;cubic to&rsquo; function during outline walking or decomposition.</p>
-<p>A &lsquo;cubic to&rsquo; is emitted to indicate a third-order Bezier arc.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="control1">control1</td><td class="desc">
-<p>A pointer to the first Bezier control point.</p>
-</td></tr>
-<tr><td class="val" id="control2">control2</td><td class="desc">
-<p>A pointer to the second Bezier control point.</p>
-</td></tr>
-<tr><td class="val" id="to">to</td><td class="desc">
-<p>A pointer to the target end point.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Orientation">FT_Orientation</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Orientation_
- {
- <a href="ft2-outline_processing.html#FT_ORIENTATION_TRUETYPE">FT_ORIENTATION_TRUETYPE</a> = 0,
- <a href="ft2-outline_processing.html#FT_ORIENTATION_POSTSCRIPT">FT_ORIENTATION_POSTSCRIPT</a> = 1,
- <a href="ft2-outline_processing.html#FT_ORIENTATION_FILL_RIGHT">FT_ORIENTATION_FILL_RIGHT</a> = <a href="ft2-outline_processing.html#FT_ORIENTATION_TRUETYPE">FT_ORIENTATION_TRUETYPE</a>,
- <a href="ft2-outline_processing.html#FT_ORIENTATION_FILL_LEFT">FT_ORIENTATION_FILL_LEFT</a> = <a href="ft2-outline_processing.html#FT_ORIENTATION_POSTSCRIPT">FT_ORIENTATION_POSTSCRIPT</a>,
- <a href="ft2-outline_processing.html#FT_ORIENTATION_NONE">FT_ORIENTATION_NONE</a>
-
- } <b>FT_Orientation</b>;
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_ORIENTATION_TRUETYPE">FT_ORIENTATION_TRUETYPE</td><td class="desc">
-<p>According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must be unfilled.</p>
-</td></tr>
-<tr><td class="val" id="FT_ORIENTATION_POSTSCRIPT">FT_ORIENTATION_POSTSCRIPT</td><td class="desc">
-<p>According to the PostScript specification, counter-clockwise contours must be filled, and clockwise ones must be unfilled.</p>
-</td></tr>
-<tr><td class="val" id="FT_ORIENTATION_FILL_RIGHT">FT_ORIENTATION_FILL_RIGHT</td><td class="desc">
-<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><td class="val" id="FT_ORIENTATION_FILL_LEFT">FT_ORIENTATION_FILL_LEFT</td><td class="desc">
-<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><td class="val" id="FT_ORIENTATION_NONE">FT_ORIENTATION_NONE</td><td class="desc">
-<p>The orientation cannot be determined. That is, different parts of the glyph have different orientation.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</h3>
-<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
-<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>
-
-<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 integrating the total area covered by the outline. The positive integral corresponds to the clockwise orientation and <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a> is returned. The negative integral corresponds to the counter-clockwise orientation and <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> is returned.</p>
-<p>Note that this will return <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> for empty outlines.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="outline">outline</td><td class="desc">
-<p>A handle to the source outline.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The orientation.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_OUTLINE_XXX">FT_OUTLINE_XXX</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_NONE">FT_OUTLINE_NONE</a> 0x0
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_OWNER">FT_OUTLINE_OWNER</a> 0x1
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_EVEN_ODD_FILL">FT_OUTLINE_EVEN_ODD_FILL</a> 0x2
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_REVERSE_FILL">FT_OUTLINE_REVERSE_FILL</a> 0x4
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_IGNORE_DROPOUTS">FT_OUTLINE_IGNORE_DROPOUTS</a> 0x8
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_SMART_DROPOUTS">FT_OUTLINE_SMART_DROPOUTS</a> 0x10
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_INCLUDE_STUBS">FT_OUTLINE_INCLUDE_STUBS</a> 0x20
-
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_HIGH_PRECISION">FT_OUTLINE_HIGH_PRECISION</a> 0x100
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_SINGLE_PASS">FT_OUTLINE_SINGLE_PASS</a> 0x200
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_OUTLINE_XXX</b>' values instead */
-#define ft_outline_none <a href="ft2-outline_processing.html#FT_OUTLINE_NONE">FT_OUTLINE_NONE</a>
-#define ft_outline_owner <a href="ft2-outline_processing.html#FT_OUTLINE_OWNER">FT_OUTLINE_OWNER</a>
-#define ft_outline_even_odd_fill <a href="ft2-outline_processing.html#FT_OUTLINE_EVEN_ODD_FILL">FT_OUTLINE_EVEN_ODD_FILL</a>
-#define ft_outline_reverse_fill <a href="ft2-outline_processing.html#FT_OUTLINE_REVERSE_FILL">FT_OUTLINE_REVERSE_FILL</a>
-#define ft_outline_ignore_dropouts <a href="ft2-outline_processing.html#FT_OUTLINE_IGNORE_DROPOUTS">FT_OUTLINE_IGNORE_DROPOUTS</a>
-#define ft_outline_high_precision <a href="ft2-outline_processing.html#FT_OUTLINE_HIGH_PRECISION">FT_OUTLINE_HIGH_PRECISION</a>
-#define ft_outline_single_pass <a href="ft2-outline_processing.html#FT_OUTLINE_SINGLE_PASS">FT_OUTLINE_SINGLE_PASS</a>
-</pre>
-
-<p>A list of bit-field constants use for the flags in an outline's &lsquo;flags&rsquo; field.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_OUTLINE_NONE">FT_OUTLINE_NONE</td><td class="desc">
-<p>Value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr><td class="val" id="FT_OUTLINE_OWNER">FT_OUTLINE_OWNER</td><td class="desc">
-<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><td class="val" id="FT_OUTLINE_EVEN_ODD_FILL">FT_OUTLINE_EVEN_ODD_FILL</td><td class="desc">
-<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 rasterizer).</p>
-</td></tr>
-<tr><td class="val" id="FT_OUTLINE_REVERSE_FILL">FT_OUTLINE_REVERSE_FILL</td><td class="desc">
-<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><td class="val" id="FT_OUTLINE_IGNORE_DROPOUTS">FT_OUTLINE_IGNORE_DROPOUTS</td><td class="desc">
-<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. See below for more information.</p>
-</td></tr>
-<tr><td class="val" id="FT_OUTLINE_SMART_DROPOUTS">FT_OUTLINE_SMART_DROPOUTS</td><td class="desc">
-<p>Select smart dropout control. If unset, use simple dropout control. Ignored if <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a> is set. See below for more information.</p>
-</td></tr>
-<tr><td class="val" id="FT_OUTLINE_INCLUDE_STUBS">FT_OUTLINE_INCLUDE_STUBS</td><td class="desc">
-<p>If set, turn pixels on for &lsquo;stubs&rsquo;, otherwise exclude them. Ignored if <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a> is set. See below for more information.</p>
-</td></tr>
-<tr><td class="val" id="FT_OUTLINE_HIGH_PRECISION">FT_OUTLINE_HIGH_PRECISION</td><td class="desc">
-<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><td class="val" id="FT_OUTLINE_SINGLE_PASS">FT_OUTLINE_SINGLE_PASS</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<p>The flags <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a>, <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SMART_DROPOUTS</a>, and <a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_INCLUDE_STUBS</a> are ignored by the smooth rasterizer.</p>
-<p>There exists a second mechanism to pass the drop-out mode to the B/W rasterizer; see the &lsquo;tags&rsquo; field in <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>.</p>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-parameter_tags.html b/freetype/docs/reference/ft2-parameter_tags.html
deleted file mode 100644
index b1d1e642..00000000
--- a/freetype/docs/reference/ft2-parameter_tags.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="parameter_tags">Parameter Tags</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_LCD_FILTER_WEIGHTS">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_RANDOM_SEED">FT_PARAM_TAG_RANDOM_SEED</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_STEM_DARKENING">FT_PARAM_TAG_STEM_DARKENING</a></td></tr>
-<tr><td><a href="#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td></tr>
-</table>
-
-
-<p>This section contains macros for the <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structure that are used with various functions to activate some special functionality or different behaviour of various components of FreeType.</p>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</h3>
-<pre>
-#define <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</b> \
- <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'i', 'g', 'p', 'f' )
-
-
- /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \
- <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</b>
-</pre>
-
-<p>A tag for <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> to make <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> ignore typographic family names in the &lsquo;name&rsquo; table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</h3>
-<pre>
-#define <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</b> \
- <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'i', 'g', 'p', 's' )
-
-
- /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \
- <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</b>
-</pre>
-
-<p>A tag for <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> to make <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> ignore typographic subfamily names in the &lsquo;name&rsquo; table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</h3>
-<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>
-
-<p>An <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> tag to be used with <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to indicate incremental glyph loading.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_LCD_FILTER_WEIGHTS">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</h3>
-<pre>
-#define <b>FT_PARAM_TAG_LCD_FILTER_WEIGHTS</b> \
- <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'l', 'c', 'd', 'f' )
-</pre>
-
-<p>An <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> tag to be used with <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a>. The corresponding argument specifies the five LCD filter weights for a given face (if using <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a>, for example), overriding the global default values or the values set up with <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a>.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_RANDOM_SEED">FT_PARAM_TAG_RANDOM_SEED</h3>
-<pre>
-#define <b>FT_PARAM_TAG_RANDOM_SEED</b> \
- <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 's', 'e', 'e', 'd' )
-</pre>
-
-<p>An <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> tag to be used with <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a>. The corresponding 32bit signed integer argument overrides the font driver's random seed value with a face-specific one; see <a href="ft2-properties.html#random-seed">random-seed</a>.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_STEM_DARKENING">FT_PARAM_TAG_STEM_DARKENING</h3>
-<pre>
-#define <b>FT_PARAM_TAG_STEM_DARKENING</b> \
- <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'd', 'a', 'r', 'k' )
-</pre>
-
-<p>An <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> tag to be used with <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a>. The corresponding Boolean argument specifies whether to apply stem darkening, overriding the global default values or the values set up with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> (see <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a>).</p>
-<p>This is a passive setting that only takes effect if the font driver or autohinter honors it, which the CFF, Type&nbsp;1, and CID drivers always do, but the autohinter only in &lsquo;light&rsquo; hinting mode (as of version 2.9).</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</h3>
-<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>
-
-<p>Deprecated, no effect.</p>
-<p>Previously: 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-pcf_driver.html b/freetype/docs/reference/ft2-pcf_driver.html
deleted file mode 100644
index 2bc4c966..00000000
--- a/freetype/docs/reference/ft2-pcf_driver.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="pcf_driver">The PCF driver</h1>
-
-<p>While FreeType's PCF driver doesn't expose API functions by itself, it is possible to control its behaviour with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>. Right now, there is a single property <a href="ft2-properties.html#no-long-family-names">no-long-family-names</a> available if FreeType is compiled with PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.</p>
-<p>The PCF driver's module name is &lsquo;pcf&rsquo;.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-pfr_fonts.html b/freetype/docs/reference/ft2-pfr_fonts.html
deleted file mode 100644
index 18c97c60..00000000
--- a/freetype/docs/reference/ft2-pfr_fonts.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="pfr_fonts">PFR Fonts</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td><a href="#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td><a href="#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td></tr>
-</table>
-
-
-<p>This section contains the declaration of PFR-specific functions.</p>
-
-<div class="section">
-<h3 id="FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</h3>
-<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
-<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>
-
-<p>Return the outline and metrics resolutions of a given PFR face.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>Handle to the input face. It can be a non-PFR face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aoutline_resolution">aoutline_resolution</td><td class="desc">
-<p>Outline resolution. This is equivalent to &lsquo;face-&gt;units_per_EM&rsquo; for non-PFR fonts. Optional (parameter can be NULL).</p>
-</td></tr>
-<tr><td class="val" id="ametrics_resolution">ametrics_resolution</td><td class="desc">
-<p>Metrics resolution. This is equivalent to &lsquo;outline_resolution&rsquo; for non-PFR fonts. Optional (parameter can be NULL).</p>
-</td></tr>
-<tr><td class="val" id="ametrics_x_scale">ametrics_x_scale</td><td class="desc">
-<p>A 16.16 fixed-point number used to scale distance expressed in metrics units to device subpixels. 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><td class="val" id="ametrics_y_scale">ametrics_y_scale</td><td class="desc">
-<p>Same as &lsquo;ametrics_x_scale&rsquo; but for the vertical direction. optional (parameter can be NULL).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</h3>
-<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="left">left</td><td class="desc">
-<p>Index of the left glyph.</p>
-</td></tr>
-<tr><td class="val" id="right">right</td><td class="desc">
-<p>Index of the right glyph.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="avector">avector</td><td class="desc">
-<p>A kerning vector.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 subpixels.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_PFR_Advance">FT_Get_PFR_Advance</h3>
-<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
-<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>
-
-<p>Return a given glyph advance, expressed in original metrics units, from a PFR font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aadvance">aadvance</td><td class="desc">
-<p>The glyph advance in metrics units.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 subpixels (i.e., 1/64th of pixels).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-properties.html b/freetype/docs/reference/ft2-properties.html
deleted file mode 100644
index 60f067a1..00000000
--- a/freetype/docs/reference/ft2-properties.html
+++ /dev/null
@@ -1,704 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="properties">Driver properties</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_HINTING_XXX">FT_HINTING_XXX</a></td><td><a href="#glyph-to-script-map">glyph-to-script-map</a></td></tr>
-<tr><td><a href="#hinting-engine">hinting-engine</a></td><td><a href="#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a></td></tr>
-<tr><td><a href="#no-stem-darkening">no-stem-darkening</a></td><td><a href="#FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</a></td></tr>
-<tr><td><a href="#darkening-parameters">darkening-parameters</a></td><td><a href="#fallback-script">fallback-script</a></td></tr>
-<tr><td><a href="#random-seed">random-seed</a></td><td><a href="#default-script">default-script</a></td></tr>
-<tr><td><a href="#no-long-family-names">no-long-family-names</a></td><td><a href="#increase-x-height">increase-x-height</a></td></tr>
-<tr><td><a href="#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_XXX</a></td><td><a href="#FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</a></td></tr>
-<tr><td><a href="#interpreter-version">interpreter-version</a></td><td><a href="#warping">warping</a></td></tr>
-</table>
-
-
-<p>Driver modules can be controlled by setting and unsetting properties, using the functions <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>. This section documents the available properties, together with auxiliary macros and structures.</p>
-
-<div class="section">
-<h3 id="FT_HINTING_XXX">FT_HINTING_XXX</h3>
-<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
-<pre>
-#define <a href="ft2-properties.html#FT_HINTING_FREETYPE">FT_HINTING_FREETYPE</a> 0
-#define <a href="ft2-properties.html#FT_HINTING_ADOBE">FT_HINTING_ADOBE</a> 1
-
- /* these constants (introduced in 2.4.12) are deprecated */
-#define FT_CFF_HINTING_FREETYPE <a href="ft2-properties.html#FT_HINTING_FREETYPE">FT_HINTING_FREETYPE</a>
-#define FT_CFF_HINTING_ADOBE <a href="ft2-properties.html#FT_HINTING_ADOBE">FT_HINTING_ADOBE</a>
-</pre>
-
-<p>A list of constants used for the <a href="ft2-properties.html#hinting-engine">hinting-engine</a> property to select the hinting engine for CFF, Type&nbsp;1, and CID fonts.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_HINTING_FREETYPE">FT_HINTING_FREETYPE</td><td class="desc">
-<p>Use the old FreeType hinting engine.</p>
-</td></tr>
-<tr><td class="val" id="FT_HINTING_ADOBE">FT_HINTING_ADOBE</td><td class="desc">
-<p>Use the hinting engine contributed by Adobe.</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.9</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="hinting-engine">hinting-engine</h3>
-
-<p>Thanks to Adobe, which contributed a new hinting (and parsing) engine, an application can select between &lsquo;freetype&rsquo; and &lsquo;adobe&rsquo; if compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration macro isn't defined, &lsquo;hinting-engine&rsquo; does nothing.</p>
-<p>The same holds for the Type&nbsp;1 and CID modules if compiled with T1_CONFIG_OPTION_OLD_ENGINE.</p>
-<p>For the &lsquo;cff&rsquo; module, the default engine is &lsquo;freetype&rsquo; if CFF_CONFIG_OPTION_OLD_ENGINE is defined, and &lsquo;adobe&rsquo; otherwise.</p>
-<p>For both the &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules, the default engine is &lsquo;freetype&rsquo; if T1_CONFIG_OPTION_OLD_ENGINE is defined, and &lsquo;adobe&rsquo; otherwise.</p>
-<p>The following example code demonstrates how to select Adobe's hinting engine for the &lsquo;cff&rsquo; module (omitting the error handling).</p>
-<pre class="colored">
- FT_Library library;
- FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "cff",
- "hinting-engine", &amp;hinting_engine );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable (using values &lsquo;adobe&rsquo; or &lsquo;freetype&rsquo;).</p>
-
-<h4>since</h4>
-<p>2.4.12 (for &lsquo;cff&rsquo; module)</p>
-<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="no-stem-darkening">no-stem-darkening</h3>
-
-<p>All glyphs that pass through the auto-hinter will be emboldened unless this property is set to TRUE. The same is true for the CFF, Type&nbsp;1, and CID font modules if the &lsquo;Adobe&rsquo; engine is selected (which is the default).</p>
-<p>Stem darkening emboldens glyphs at smaller sizes to make them more readable on common low-DPI screens when using linear alpha blending and gamma correction, see <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. When not using linear alpha blending and gamma correction, glyphs will appear heavy and fuzzy!</p>
-<p>Gamma correction essentially lightens fonts since shades of grey are shifted to higher pixel values (=&nbsp;higher brightness) to match the original intention to the reality of our screens. The side-effect is that glyphs &lsquo;thin out&rsquo;. Mac OS&nbsp;X and Adobe's proprietary font rendering library implement a counter-measure: stem darkening at smaller sizes where shades of gray dominate. By emboldening a glyph slightly in relation to its pixel size, individual pixels get higher coverage of filled-in outlines and are therefore &lsquo;blacker&rsquo;. This counteracts the &lsquo;thinning out&rsquo; of glyphs, making text remain readable at smaller sizes.</p>
-<p>By default, the Adobe engines for CFF, Type&nbsp;1, and CID fonts darken stems at smaller sizes, regardless of hinting, to enhance contrast. Setting this property, stem darkening gets switched off.</p>
-<p>For the auto-hinter, stem-darkening is experimental currently and thus switched off by default (this is, &lsquo;no-stem-darkening&rsquo; is set to TRUE by default). Total consistency with the CFF driver is not achieved right now because the emboldening method differs and glyphs must be scaled down on the Y-axis to keep outline points inside their precomputed blue zones. The smaller the size (especially 9ppem and down), the higher the loss of emboldening versus the CFF driver.</p>
-<p>Note that stem darkening is never applied if <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> is set.</p>
-<pre class="colored">
- FT_Library library;
- FT_Bool no_stem_darkening = TRUE;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "cff",
- "no-stem-darkening", &amp;no_stem_darkening );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively). It can also be set per face using <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a> with <a href="ft2-parameter_tags.html#FT_PARAM_TAG_STEM_DARKENING">FT_PARAM_TAG_STEM_DARKENING</a>.</p>
-
-<h4>since</h4>
-<p>2.4.12 (for &lsquo;cff&rsquo; module)</p>
-<p>2.6.2 (for &lsquo;autofitter&rsquo; module)</p>
-<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="darkening-parameters">darkening-parameters</h3>
-
-<p>By default, the Adobe hinting engine, as used by the CFF, Type&nbsp;1, and CID font drivers, darkens stems as follows (if the &lsquo;no-stem-darkening&rsquo; property isn't set):</p>
-<pre class="colored">
- stem width &lt;= 0.5px: darkening amount = 0.4px
- stem width = 1px: darkening amount = 0.275px
- stem width = 1.667px: darkening amount = 0.275px
- stem width &gt;= 2.333px: darkening amount = 0px
-</pre>
-<p>and piecewise linear in-between. At configuration time, these four control points can be set with the macro &lsquo;CFF_CONFIG_OPTION_DARKENING_PARAMETERS&rsquo;; the CFF, Type&nbsp;1, and CID drivers share these values. At runtime, the control points can be changed using the &lsquo;darkening-parameters&rsquo; property, as the following example demonstrates for the Type&nbsp;1 driver.</p>
-<pre class="colored">
- FT_Library library;
- FT_Int darken_params[8] = { 500, 300, // x1, y1
- 1000, 200, // x2, y2
- 1500, 100, // x3, y3
- 2000, 0 }; // x4, y4
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "type1",
- "darkening-parameters", darken_params );
-</pre>
-<p>The x&nbsp;values give the stem width, and the y&nbsp;values the darkening amount. The unit is 1000th of pixels. All coordinate values must be positive; the x&nbsp;values must be monotonically increasing; the y&nbsp;values must be monotonically decreasing and smaller than or equal to 500 (corresponding to half a pixel); the slope of each linear piece must be shallower than -1 (e.g., -.4).</p>
-<p>The auto-hinter provides this property, too, as an experimental feature. See <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a> for more.</p>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable, using eight comma-separated integers without spaces. Here the above example, using &lsquo;\&rsquo; to break the line for readability.</p>
-<pre class="colored">
- FREETYPE_PROPERTIES=\
- type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
-</pre>
-
-<h4>since</h4>
-<p>2.5.1 (for &lsquo;cff&rsquo; module)</p>
-<p>2.6.2 (for &lsquo;autofitter&rsquo; module)</p>
-<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="random-seed">random-seed</h3>
-
-<p>By default, the seed value for the CFF &lsquo;random&rsquo; operator and the similar &lsquo;0 28 callothersubr pop&rsquo; command for the Type&nbsp;1 and CID drivers is set to a random value. However, mainly for debugging purposes, it is often necessary to use a known value as a seed so that the pseudo-random number sequences generated by &lsquo;random&rsquo; are repeatable.</p>
-<p>The &lsquo;random-seed&rsquo; property does that. Its argument is a signed 32bit integer; if the value is zero or negative, the seed given by the &lsquo;intitialRandomSeed&rsquo; private DICT operator in a CFF file gets used (or a default value if there is no such operator). If the value is positive, use it instead of &lsquo;initialRandomSeed&rsquo;, which is consequently ignored.</p>
-
-<h4>note</h4>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable. It can also be set per face using <a href="ft2-base_interface.html#FT_Face_Properties">FT_Face_Properties</a> with <a href="ft2-parameter_tags.html#FT_PARAM_TAG_RANDOM_SEED">FT_PARAM_TAG_RANDOM_SEED</a>.</p>
-
-<h4>since</h4>
-<p>2.8 (for &lsquo;cff&rsquo; module)</p>
-<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="no-long-family-names">no-long-family-names</h3>
-
-<p>If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling FreeType, the PCF driver constructs long family names.</p>
-<p>There are many PCF fonts just called &lsquo;Fixed&rsquo; which look completely different, and which have nothing to do with each other. When selecting &lsquo;Fixed&rsquo; in KDE or Gnome one gets results that appear rather random, the style changes often if one changes the size and one cannot select some fonts at all. The improve this situation, the PCF module prepends the foundry name (plus a space) to the family name. It also checks whether there are &lsquo;wide&rsquo; characters; all put together, family names like &lsquo;Sony Fixed&rsquo; or &lsquo;Misc Fixed Wide&rsquo; are constructed.</p>
-<p>If &lsquo;no-long-family-names&rsquo; is set, this feature gets switched off.</p>
-<pre class="colored">
- FT_Library library;
- FT_Bool no_long_family_names = TRUE;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "pcf",
- "no-long-family-names",
- &amp;no_long_family_names );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively).</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_XXX</h3>
-<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
-<pre>
-#define <a href="ft2-properties.html#TT_INTERPRETER_VERSION_35">TT_INTERPRETER_VERSION_35</a> 35
-#define <a href="ft2-properties.html#TT_INTERPRETER_VERSION_38">TT_INTERPRETER_VERSION_38</a> 38
-#define <a href="ft2-properties.html#TT_INTERPRETER_VERSION_40">TT_INTERPRETER_VERSION_40</a> 40
-</pre>
-
-<p>A list of constants used for the <a href="ft2-properties.html#interpreter-version">interpreter-version</a> property to select the hinting engine for Truetype fonts.</p>
-<p>The numeric value in the constant names represents the version number as returned by the &lsquo;GETINFO&rsquo; bytecode instruction.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_INTERPRETER_VERSION_35">TT_INTERPRETER_VERSION_35</td><td class="desc">
-<p>Version&nbsp;35 corresponds to MS rasterizer v.1.7 as used e.g. in Windows&nbsp;98; only grayscale and B/W rasterizing is supported.</p>
-</td></tr>
-<tr><td class="val" id="TT_INTERPRETER_VERSION_38">TT_INTERPRETER_VERSION_38</td><td class="desc">
-<p>Version&nbsp;38 corresponds to MS rasterizer v.1.9; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in the Internet Explorer&nbsp;9 running on Windows&nbsp;7). It is used in FreeType to select the &lsquo;Infinality&rsquo; subpixel hinting code. The code may be removed in a future version.</p>
-</td></tr>
-<tr><td class="val" id="TT_INTERPRETER_VERSION_40">TT_INTERPRETER_VERSION_40</td><td class="desc">
-<p>Version&nbsp;40 corresponds to MS rasterizer v.2.1; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in Microsoft's Edge Browser on Windows&nbsp;10). It is used in FreeType to select the &lsquo;minimal&rsquo; subpixel hinting code, a stripped-down and higher performance version of the &lsquo;Infinality&rsquo; code.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>This property controls the behaviour of the bytecode interpreter and thus how outlines get hinted. It does <b>not</b> control how glyph get rasterized! In particular, it does not control subpixel color filtering.</p>
-<p>If FreeType has not been compiled with the configuration option TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version&nbsp;38 or&nbsp;40 causes an &lsquo;FT_Err_Unimplemented_Feature&rsquo; error.</p>
-<p>Depending on the graphics framework, Microsoft uses different bytecode and rendering engines. As a consequence, the version numbers returned by a call to the &lsquo;GETINFO&rsquo; bytecode instruction are more convoluted than desired.</p>
-<p>Here are two tables that try to shed some light on the possible values for the MS rasterizer engine, together with the additional features introduced by it.</p>
-<pre class="colored">
- GETINFO framework version feature
- -------------------------------------------------------------------
- 3 GDI (Win 3.1), v1.0 16-bit, first version
- TrueImage
- 33 GDI (Win NT 3.1), v1.5 32-bit
- HP Laserjet
- 34 GDI (Win 95) v1.6 font smoothing,
- new SCANTYPE opcode
- 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
- bits in composite glyphs
- 36 MGDI (Win CE 2) v1.6+ classic ClearType
- 37 GDI (XP and later), v1.8 ClearType
- GDI+ old (before Vista)
- 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
- WPF Y-direction ClearType,
- additional error checking
- 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
- in GETINFO opcode,
- bug fixes
- 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
- DWrite (Win 8) in GETINFO opcode,
- Gray ClearType
-</pre>
-<p>The &lsquo;version&rsquo; field gives a rough orientation only, since some applications provided certain features much earlier (as an example, Microsoft Reader used subpixel and Y-direction ClearType already in Windows 2000). Similarly, updates to a given framework might include improved hinting support.</p>
-<pre class="colored">
- version sampling rendering comment
- x y x y
- --------------------------------------------------------------
- v1.0 normal normal B/W B/W bi-level
- v1.6 high high gray gray grayscale
- v1.8 high normal color-filter B/W (GDI) ClearType
- v1.9 high high color-filter gray Color ClearType
- v2.1 high normal gray B/W Gray ClearType
- v2.1 high high gray gray Gray ClearType
-</pre>
-<p>Color and Gray ClearType are the two available variants of &lsquo;Y-direction ClearType&rsquo;, meaning grayscale rasterization along the Y-direction; the name used in the TrueType specification for this feature is &lsquo;symmetric smoothing&rsquo;. &lsquo;Classic ClearType&rsquo; is the original algorithm used before introducing a modified version in Win&nbsp;XP. Another name for v1.6's grayscale rendering is &lsquo;font smoothing&rsquo;, and &lsquo;Color ClearType&rsquo; is sometimes also called &lsquo;DWrite ClearType&rsquo;. To differentiate between today's Color ClearType and the earlier ClearType variant with B/W rendering along the vertical axis, the latter is sometimes called &lsquo;GDI ClearType&rsquo;.</p>
-<p>&lsquo;Normal&rsquo; and &lsquo;high&rsquo; sampling describe the (virtual) resolution to access the rasterized outline after the hinting process. &lsquo;Normal&rsquo; means 1 sample per grid line (i.e., B/W). In the current Microsoft implementation, &lsquo;high&rsquo; means an extra virtual resolution of 16x16 (or 16x1) grid lines per pixel for bytecode instructions like &lsquo;MIRP&rsquo;. After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid lines for color filtering if Color ClearType is activated.</p>
-<p>Note that &lsquo;Gray ClearType&rsquo; is essentially the same as v1.6's grayscale rendering. However, the GETINFO instruction handles it differently: v1.6 returns bit&nbsp;12 (hinting for grayscale), while v2.1 returns bits&nbsp;13 (hinting for ClearType), 18 (symmetrical smoothing), and&nbsp;19 (Gray ClearType). Also, this mode respects bits 2 and&nbsp;3 for the version&nbsp;1 gasp table exclusively (like Color ClearType), while v1.6 only respects the values of version&nbsp;0 (bits 0 and&nbsp;1).</p>
-<p>Keep in mind that the features of the above interpreter versions might not map exactly to FreeType features or behavior because it is a fundamentally different library with different internals.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="interpreter-version">interpreter-version</h3>
-
-<p>Currently, three versions are available, two representing the bytecode interpreter with subpixel hinting support (old &lsquo;Infinality&rsquo; code and new stripped-down and higher performance &lsquo;minimal&rsquo; code) and one without, respectively. The default is subpixel support if TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support otherwise (since it isn't available then).</p>
-<p>If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering (except if &lsquo;native ClearType&rsquo; is selected by the font). Microsoft's main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) tweaks in Microsoft's interpreter.</p>
-<p>Details on subpixel hinting and some of the necessary tweaks can be found in Greg Hitchcock's whitepaper at &lsquo;<a href="https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx">https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx</a>&rsquo;. Note that FreeType currently doesn't really &lsquo;subpixel hint&rsquo; (6x1, 6x2, or 6x5 supersampling) like discussed in the paper. Depending on the chosen interpreter, it simply ignores instructions on vertical stems to arrive at very similar results.</p>
-<p>The following example code demonstrates how to deactivate subpixel hinting (omitting the error handling).</p>
-<pre class="colored">
- FT_Library library;
- FT_Face face;
- FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "truetype",
- "interpreter-version",
- &amp;interpreter_version );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable (using values &lsquo;35&rsquo;, &lsquo;38&rsquo;, or &lsquo;40&rsquo;).</p>
-
-<h4>since</h4>
-<p>2.5</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="glyph-to-script-map">glyph-to-script-map</h3>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>The auto-hinter provides various script modules to hint glyphs. Examples of supported scripts are Latin or CJK. Before a glyph is auto-hinted, the Unicode character map of the font gets examined, and the script is then determined based on Unicode character ranges, see below.</p>
-<p>OpenType fonts, however, often provide much more glyphs than character codes (small caps, superscripts, ligatures, swashes, etc.), to be controlled by so-called &lsquo;features&rsquo;. Handling OpenType features can be quite complicated and thus needs a separate library on top of FreeType.</p>
-<p>The mapping between glyph indices and scripts (in the auto-hinter sense, see the <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a> values) is stored as an array with &lsquo;num_glyphs&rsquo; elements, as found in the font's <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure. The &lsquo;glyph-to-script-map&rsquo; property returns a pointer to this array, which can be modified as needed. Note that the modification should happen before the first glyph gets processed by the auto-hinter so that the global analysis of the font shapes actually uses the modified mapping.</p>
-<p>The following example code demonstrates how to access it (omitting the error handling).</p>
-<pre class="colored">
- FT_Library library;
- FT_Face face;
- FT_Prop_GlyphToScriptMap prop;
-
-
- FT_Init_FreeType( &amp;library );
- FT_New_Face( library, "foo.ttf", 0, &amp;face );
-
- prop.face = face;
-
- FT_Property_Get( library, "autofitter",
- "glyph-to-script-map", &amp;prop );
-
- // adjust `prop.map' as needed right here
-
- FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
-</pre>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</h3>
-<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
-<pre>
-#define <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_NONE">FT_AUTOHINTER_SCRIPT_NONE</a> 0
-#define <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_LATIN">FT_AUTOHINTER_SCRIPT_LATIN</a> 1
-#define <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_CJK">FT_AUTOHINTER_SCRIPT_CJK</a> 2
-#define <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_INDIC">FT_AUTOHINTER_SCRIPT_INDIC</a> 3
-</pre>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>A list of constants used for the <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a> property to specify the script submodule the auto-hinter should use for hinting a particular glyph.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_AUTOHINTER_SCRIPT_NONE">FT_AUTOHINTER_SCRIPT_NONE</td><td class="desc">
-<p>Don't auto-hint this glyph.</p>
-</td></tr>
-<tr><td class="val" id="FT_AUTOHINTER_SCRIPT_LATIN">FT_AUTOHINTER_SCRIPT_LATIN</td><td class="desc">
-<p>Apply the latin auto-hinter. For the auto-hinter, &lsquo;latin&rsquo; is a very broad term, including Cyrillic and Greek also since characters from those scripts share the same design constraints.</p>
-<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
-<pre class="colored">
- U+0020 - U+007F // Basic Latin (no control characters)
- U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
- U+0100 - U+017F // Latin Extended-A
- U+0180 - U+024F // Latin Extended-B
- U+0250 - U+02AF // IPA Extensions
- U+02B0 - U+02FF // Spacing Modifier Letters
- U+0300 - U+036F // Combining Diacritical Marks
- U+0370 - U+03FF // Greek and Coptic
- U+0400 - U+04FF // Cyrillic
- U+0500 - U+052F // Cyrillic Supplement
- U+1D00 - U+1D7F // Phonetic Extensions
- U+1D80 - U+1DBF // Phonetic Extensions Supplement
- U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
- U+1E00 - U+1EFF // Latin Extended Additional
- U+1F00 - U+1FFF // Greek Extended
- U+2000 - U+206F // General Punctuation
- U+2070 - U+209F // Superscripts and Subscripts
- U+20A0 - U+20CF // Currency Symbols
- U+2150 - U+218F // Number Forms
- U+2460 - U+24FF // Enclosed Alphanumerics
- U+2C60 - U+2C7F // Latin Extended-C
- U+2DE0 - U+2DFF // Cyrillic Extended-A
- U+2E00 - U+2E7F // Supplemental Punctuation
- U+A640 - U+A69F // Cyrillic Extended-B
- U+A720 - U+A7FF // Latin Extended-D
- U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
- U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
- U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
-</pre>
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_AUTOHINTER_SCRIPT_CJK">FT_AUTOHINTER_SCRIPT_CJK</td><td class="desc">
-<p>Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old Vietnamese, and some other scripts.</p>
-<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
-<pre class="colored">
- U+1100 - U+11FF // Hangul Jamo
- U+2E80 - U+2EFF // CJK Radicals Supplement
- U+2F00 - U+2FDF // Kangxi Radicals
- U+2FF0 - U+2FFF // Ideographic Description Characters
- U+3000 - U+303F // CJK Symbols and Punctuation
- U+3040 - U+309F // Hiragana
- U+30A0 - U+30FF // Katakana
- U+3100 - U+312F // Bopomofo
- U+3130 - U+318F // Hangul Compatibility Jamo
- U+3190 - U+319F // Kanbun
- U+31A0 - U+31BF // Bopomofo Extended
- U+31C0 - U+31EF // CJK Strokes
- U+31F0 - U+31FF // Katakana Phonetic Extensions
- U+3200 - U+32FF // Enclosed CJK Letters and Months
- U+3300 - U+33FF // CJK Compatibility
- U+3400 - U+4DBF // CJK Unified Ideographs Extension A
- U+4DC0 - U+4DFF // Yijing Hexagram Symbols
- U+4E00 - U+9FFF // CJK Unified Ideographs
- U+A960 - U+A97F // Hangul Jamo Extended-A
- U+AC00 - U+D7AF // Hangul Syllables
- U+D7B0 - U+D7FF // Hangul Jamo Extended-B
- U+F900 - U+FAFF // CJK Compatibility Ideographs
- U+FE10 - U+FE1F // Vertical forms
- U+FE30 - U+FE4F // CJK Compatibility Forms
- U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
- U+1B000 - U+1B0FF // Kana Supplement
- U+1D300 - U+1D35F // Tai Xuan Hing Symbols
- U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
- U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
- U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
- U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
- U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
-</pre>
-<p></p>
-</td></tr>
-<tr><td class="val" id="FT_AUTOHINTER_SCRIPT_INDIC">FT_AUTOHINTER_SCRIPT_INDIC</td><td class="desc">
-<p>Apply the indic auto-hinter, covering all major scripts from the Indian sub-continent and some other related scripts like Thai, Lao, or Tibetan.</p>
-<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
-<pre class="colored">
- U+0900 - U+0DFF // Indic Range
- U+0F00 - U+0FFF // Tibetan
- U+1900 - U+194F // Limbu
- U+1B80 - U+1BBF // Sundanese
- U+A800 - U+A82F // Syloti Nagri
- U+ABC0 - U+ABFF // Meetei Mayek
- U+11800 - U+118DF // Sharada
-</pre>
-<p>Note that currently Indic support is rudimentary only, missing blue zone support.</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</h3>
-<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Prop_GlyphToScriptMap_
- {
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a>* map;
-
- } <b>FT_Prop_GlyphToScriptMap</b>;
-</pre>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>The data exchange structure for the <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a> property.</p>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="fallback-script">fallback-script</h3>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>If no auto-hinter script module can be assigned to a glyph, a fallback script gets assigned to it (see also the <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a> property). By default, this is <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_CJK</a>. Using the &lsquo;fallback-script&rsquo; property, this fallback value can be changed.</p>
-<pre class="colored">
- FT_Library library;
- FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "autofitter",
- "fallback-script", &amp;fallback_script );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the fallback script value gets triggered either by setting or reading a face-specific property like <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a>, or by auto-hinting any glyph from that face. In particular, if you have already created an <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure but not loaded any glyph (using the auto-hinter), a change of the fallback script will affect this face.</p>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="default-script">default-script</h3>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a &lsquo;dlig&rsquo; feature, containing the combination of the characters &lsquo;T&rsquo;, &lsquo;E&rsquo;, and &lsquo;L&rsquo; to form a &lsquo;TEL&rsquo; ligature.</p>
-<p>By default, this is <a href="ft2-properties.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_LATIN</a>. Using the &lsquo;default-script&rsquo; property, this default value can be changed.</p>
-<pre class="colored">
- FT_Library library;
- FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "autofitter",
- "default-script", &amp;default_script );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the default script value gets triggered either by setting or reading a face-specific property like <a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a>, or by auto-hinting any glyph from that face. In particular, if you have already created an <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure but not loaded any glyph (using the auto-hinter), a change of the default script will affect this face.</p>
-
-<h4>since</h4>
-<p>2.5.3</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="increase-x-height">increase-x-height</h3>
-
-<p>For ppem values in the range 6&nbsp;&lt;= ppem &lt;= &lsquo;increase-x-height&rsquo;, round up the font's x&nbsp;height much more often than normally. If the value is set to&nbsp;0, which is the default, this feature is switched off. Use this property to improve the legibility of small font sizes if necessary.</p>
-<pre class="colored">
- FT_Library library;
- FT_Face face;
- FT_Prop_IncreaseXHeight prop;
-
-
- FT_Init_FreeType( &amp;library );
- FT_New_Face( library, "foo.ttf", 0, &amp;face );
- FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
-
- prop.face = face;
- prop.limit = 14;
-
- FT_Property_Set( library, "autofitter",
- "increase-x-height", &amp;prop );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>Set this value right after calling <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, but before loading any glyph (using the auto-hinter).</p>
-
-<h4>since</h4>
-<p>2.4.11</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</h3>
-<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Prop_IncreaseXHeight_
- {
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> limit;
-
- } <b>FT_Prop_IncreaseXHeight</b>;
-</pre>
-
-<p>The data exchange structure for the <a href="ft2-properties.html#increase-x-height">increase-x-height</a> property.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="warping">warping</h3>
-
-<p><b>Experimental</b> <b>only</b></p>
-<p>If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to activate the warp hinting code in the auto-hinter, this property switches warping on and off.</p>
-<p>Warping only works in &lsquo;normal&rsquo; auto-hinting mode replacing it. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored.</p>
-<p>By default, warping is off. The example below shows how to switch on warping (omitting the error handling).</p>
-<pre class="colored">
- FT_Library library;
- FT_Bool warping = 1;
-
-
- FT_Init_FreeType( &amp;library );
-
- FT_Property_Set( library, "autofitter",
- "warping", &amp;warping );
-</pre>
-
-<h4>note</h4>
-<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
-<p>This property can be set via the &lsquo;FREETYPE_PROPERTIES&rsquo; environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively).</p>
-<p>The warping code can also change advance widths. Have a look at the &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo; fields in the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure for details on improving inter-glyph distances while rendering.</p>
-<p>Since warping is a global property of the auto-hinter it is best to change its value before rendering any face. Otherwise, you should reload all faces that get auto-hinted in &lsquo;normal&rsquo; hinting mode.</p>
-
-<h4>since</h4>
-<p>2.6</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-quick_advance.html b/freetype/docs/reference/ft2-quick_advance.html
deleted file mode 100644
index dafefcf5..00000000
--- a/freetype/docs/reference/ft2-quick_advance.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="quick_advance">Quick retrieval of advance values</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Get_Advance">FT_Get_Advance</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_Get_Advances">FT_Get_Advances</a></td><td><a href="#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</a></td></tr>
-</table>
-
-
-<p>This section contains functions to quickly extract advance values without handling glyph outlines, if possible.</p>
-
-<div class="section">
-<h3 id="FT_Get_Advance">FT_Get_Advance</h3>
-<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_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_Int32">FT_Int32</a> load_flags,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *padvance );
-</pre>
-
-<p>Retrieve the advance value of a given glyph outline in an <a href="ft2-base_interface.html#FT_Face">FT_Face</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>The source <a href="ft2-base_interface.html#FT_Face">FT_Face</a> handle.</p>
-</td></tr>
-<tr><td class="val" id="gindex">gindex</td><td class="desc">
-<p>The glyph index.</p>
-</td></tr>
-<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
-<p>A set of bit flags similar to those used when calling <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, used to determine what kind of advances you need.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="padvance">padvance</td><td class="desc">
-<p>The advance value. If scaling is performed (based on the value of &lsquo;load_flags&rsquo;), the advance value is in 16.16 format. Otherwise, it is in font units.</p>
-<p>If <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a> is set, this is the vertical advance corresponding to a vertical layout. Otherwise, it is the horizontal advance in a horizontal layout.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0 means success.</p>
-
-<h4>note</h4>
-<p>This function may fail if you use <a href="ft2-quick_advance.html#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</a> and if the corresponding font backend doesn't have a quick way to retrieve the advances.</p>
-<p>A scaled advance is returned in 16.16 format but isn't transformed by the affine transformation specified by <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Advances">FT_Get_Advances</h3>
-<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Advances</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> start,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> count,
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> load_flags,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *padvances );
-</pre>
-
-<p>Retrieve the advance values of several glyph outlines in an <a href="ft2-base_interface.html#FT_Face">FT_Face</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>The source <a href="ft2-base_interface.html#FT_Face">FT_Face</a> handle.</p>
-</td></tr>
-<tr><td class="val" id="start">start</td><td class="desc">
-<p>The first glyph index.</p>
-</td></tr>
-<tr><td class="val" id="count">count</td><td class="desc">
-<p>The number of advance values you want to retrieve.</p>
-</td></tr>
-<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
-<p>A set of bit flags similar to those used when calling <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="padvance">padvance</td><td class="desc">
-<p>The advance values. This array, to be provided by the caller, must contain at least &lsquo;count&rsquo; elements.</p>
-<p>If scaling is performed (based on the value of &lsquo;load_flags&rsquo;), the advance values are in 16.16 format. Otherwise, they are in font units.</p>
-<p>If <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a> is set, these are the vertical advances corresponding to a vertical layout. Otherwise, they are the horizontal advances in a horizontal layout.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0 means success.</p>
-
-<h4>note</h4>
-<p>This function may fail if you use <a href="ft2-quick_advance.html#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</a> and if the corresponding font backend doesn't have a quick way to retrieve the advances.</p>
-<p>Scaled advances are returned in 16.16 format but aren't transformed by the affine transformation specified by <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</h3>
-<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
-<pre>
-#define <b>FT_ADVANCE_FLAG_FAST_ONLY</b> 0x20000000L
-</pre>
-
-<p>A bit-flag to be OR-ed with the &lsquo;flags&rsquo; parameter of the <a href="ft2-quick_advance.html#FT_Get_Advance">FT_Get_Advance</a> and <a href="ft2-quick_advance.html#FT_Get_Advances">FT_Get_Advances</a> functions.</p>
-<p>If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver doesn't allow for very quick advance computation.</p>
-<p>Typically, glyphs that are either unscaled, unhinted, bitmapped, or light-hinted can have their advance width computed very quickly.</p>
-<p>Normal and bytecode hinted modes that require loading, scaling, and hinting of the glyph outline, are extremely slow by comparison.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-raster.html b/freetype/docs/reference/ft2-raster.html
deleted file mode 100644
index db8e8a39..00000000
--- a/freetype/docs/reference/ft2-raster.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="raster">Scanline Converter</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Raster">FT_Raster</a></td><td>&nbsp;</td><td><a href="#FT_Raster_Funcs">FT_Raster_Funcs</a></td></tr>
-<tr><td><a href="#FT_Span">FT_Span</a></td><td><a href="#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FT_SpanFunc">FT_SpanFunc</a></td><td><a href="#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td><a href="#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td></tr>
-<tr><td><a href="#FT_Raster_Params">FT_Raster_Params</a></td><td><a href="#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td><td></td></tr>
-<tr><td><a href="#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains technical definitions.</p>
-
-<div class="section">
-<h3 id="FT_Raster">FT_Raster</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RasterRec_* <b>FT_Raster</b>;
-</pre>
-
-<p>An opaque handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Span">FT_Span</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A structure used to model a single span of gray pixels when rendering an anti-aliased bitmap.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="x">x</td><td class="desc">
-<p>The span's horizontal start position.</p>
-</td></tr>
-<tr><td class="val" id="len">len</td><td class="desc">
-<p>The span's length in pixels.</p>
-</td></tr>
-<tr><td class="val" id="coverage">coverage</td><td class="desc">
-<p>The span color/coverage, ranging from 0 (background) to 255 (foreground).</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>This structure is used by the span drawing callback type named <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> that takes the y&nbsp;coordinate of the span as 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SpanFunc">FT_SpanFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="y">y</td><td class="desc">
-<p>The scanline's y&nbsp;coordinate.</p>
-</td></tr>
-<tr><td class="val" id="count">count</td><td class="desc">
-<p>The number of spans to draw on this scanline.</p>
-</td></tr>
-<tr><td class="val" id="spans">spans</td><td class="desc">
-<p>A table of &lsquo;count&rsquo; spans to draw on the scanline.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>User-supplied data that is passed to the callback.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_Params">FT_Raster_Params</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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; /* unused */
- <a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a> bit_test; /* unused */
- <a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a> bit_set; /* unused */
- <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>
-
-<p>A structure to hold the arguments used by a raster's render function.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="target">target</td><td class="desc">
-<p>The target bitmap.</p>
-</td></tr>
-<tr><td class="val" id="source">source</td><td class="desc">
-<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><td class="val" id="flags">flags</td><td class="desc">
-<p>The rendering flags.</p>
-</td></tr>
-<tr><td class="val" id="gray_spans">gray_spans</td><td class="desc">
-<p>The gray span drawing callback.</p>
-</td></tr>
-<tr><td class="val" id="black_spans">black_spans</td><td class="desc">
-<p>Unused.</p>
-</td></tr>
-<tr><td class="val" id="bit_test">bit_test</td><td class="desc">
-<p>Unused.</p>
-</td></tr>
-<tr><td class="val" id="bit_set">bit_set</td><td class="desc">
-<p>Unused.</p>
-</td></tr>
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>User-supplied data that is passed to each drawing callback.</p>
-</td></tr>
-<tr><td class="val" id="clip_box">clip_box</td><td class="desc">
-<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>
-
-<h4>note</h4>
-<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. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing and composition. Not supported by the monochrome rasterizer.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<pre>
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_DEFAULT">FT_RASTER_FLAG_DEFAULT</a> 0x0
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_AA">FT_RASTER_FLAG_AA</a> 0x1
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_DIRECT">FT_RASTER_FLAG_DIRECT</a> 0x2
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_CLIP">FT_RASTER_FLAG_CLIP</a> 0x4
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>FT_RASTER_FLAG_XXX</b>' values instead */
-#define ft_raster_flag_default <a href="ft2-raster.html#FT_RASTER_FLAG_DEFAULT">FT_RASTER_FLAG_DEFAULT</a>
-#define ft_raster_flag_aa <a href="ft2-raster.html#FT_RASTER_FLAG_AA">FT_RASTER_FLAG_AA</a>
-#define ft_raster_flag_direct <a href="ft2-raster.html#FT_RASTER_FLAG_DIRECT">FT_RASTER_FLAG_DIRECT</a>
-#define ft_raster_flag_clip <a href="ft2-raster.html#FT_RASTER_FLAG_CLIP">FT_RASTER_FLAG_CLIP</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_RASTER_FLAG_DEFAULT">FT_RASTER_FLAG_DEFAULT</td><td class="desc">
-<p>This value is 0.</p>
-</td></tr>
-<tr><td class="val" id="FT_RASTER_FLAG_AA">FT_RASTER_FLAG_AA</td><td class="desc">
-<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><td class="val" id="FT_RASTER_FLAG_DIRECT">FT_RASTER_FLAG_DIRECT</td><td class="desc">
-<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>Direct rendering is only possible with anti-aliased glyphs.</p>
-</td></tr>
-<tr><td class="val" id="FT_RASTER_FLAG_CLIP">FT_RASTER_FLAG_CLIP</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_NewFunc">FT_Raster_NewFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A function used to create a new raster object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A handle to the memory allocator.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="raster">raster</td><td class="desc">
-<p>A handle to the new raster object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_DoneFunc">FT_Raster_DoneFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A function used to destroy a given raster object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="raster">raster</td><td class="desc">
-<p>A handle to the raster object.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_ResetFunc">FT_Raster_ResetFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>FreeType used to provide an area of memory called the &lsquo;render pool&rsquo; available to all registered rasterizers. This was not thread safe, however, and now FreeType never allocates this pool.</p>
-<p>This function is called after a new raster object is created.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="raster">raster</td><td class="desc">
-<p>A handle to the new raster object.</p>
-</td></tr>
-<tr><td class="val" id="pool_base">pool_base</td><td class="desc">
-<p>Previously, the address in memory of the render pool. Set this to NULL.</p>
-</td></tr>
-<tr><td class="val" id="pool_size">pool_size</td><td class="desc">
-<p>Previously, the size in bytes of the render pool. Set this to 0.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>Rasterizers should rely on dynamic or stack allocation if they want to (a handle to the memory allocator is passed to the rasterizer constructor).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="raster">raster</td><td class="desc">
-<p>A handle to the new raster object.</p>
-</td></tr>
-<tr><td class="val" id="mode">mode</td><td class="desc">
-<p>A 4-byte tag used to name the mode or property.</p>
-</td></tr>
-<tr><td class="val" id="args">args</td><td class="desc">
-<p>A pointer to the new mode/property to use.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_RenderFunc">FT_Raster_RenderFunc</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>Invoke a given raster to scan-convert a given glyph image into a target bitmap.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="raster">raster</td><td class="desc">
-<p>A handle to the raster object.</p>
-</td></tr>
-<tr><td class="val" id="params">params</td><td class="desc">
-<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>
-
-<h4>return</h4>
-<p>Error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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 that support direct composition).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_Funcs">FT_Raster_Funcs</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>A structure used to describe a given raster class to the library.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="glyph_format">glyph_format</td><td class="desc">
-<p>The supported glyph format for this raster.</p>
-</td></tr>
-<tr><td class="val" id="raster_new">raster_new</td><td class="desc">
-<p>The raster constructor.</p>
-</td></tr>
-<tr><td class="val" id="raster_reset">raster_reset</td><td class="desc">
-<p>Used to reset the render pool within the raster.</p>
-</td></tr>
-<tr><td class="val" id="raster_render">raster_render</td><td class="desc">
-<p>A function to render a glyph into a given bitmap.</p>
-</td></tr>
-<tr><td class="val" id="raster_done">raster_done</td><td class="desc">
-<p>The raster destructor.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>Deprecated, unimplemented.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</h3>
-<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
-<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>
-
-<p>Deprecated, unimplemented.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-sfnt_names.html b/freetype/docs/reference/ft2-sfnt_names.html
deleted file mode 100644
index 2d3d5533..00000000
--- a/freetype/docs/reference/ft2-sfnt_names.html
+++ /dev/null
@@ -1,304 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="sfnt_names">SFNT Names</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_SfntName">FT_SfntName</a></td><td><a href="#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td><td><a href="#FT_Get_Sfnt_LangTag">FT_Get_Sfnt_LangTag</a></td></tr>
-<tr><td><a href="#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td><a href="#FT_SfntLangTag">FT_SfntLangTag</a></td><td></td></tr>
-</table>
-
-
-<p>The TrueType and OpenType specifications allow the inclusion of a special names table (&lsquo;name&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>
-
-<div class="section">
-<h3 id="FT_SfntName">FT_SfntName</h3>
-<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
-<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>
-
-<p>A structure used to model an SFNT &lsquo;name&rsquo; table entry.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="platform_id">platform_id</td><td class="desc">
-<p>The platform ID for &lsquo;string&rsquo;. See <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a> for possible values.</p>
-</td></tr>
-<tr><td class="val" id="encoding_id">encoding_id</td><td class="desc">
-<p>The encoding ID for &lsquo;string&rsquo;. See <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>, <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a>, and <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a> for possible values.</p>
-</td></tr>
-<tr><td class="val" id="language_id">language_id</td><td class="desc">
-<p>The language ID for &lsquo;string&rsquo;. See <a href="ft2-truetype_tables.html#TT_MAC_LANGID_XXX">TT_MAC_LANGID_XXX</a> and <a href="ft2-truetype_tables.html#TT_MS_LANGID_XXX">TT_MS_LANGID_XXX</a> for possible values.</p>
-<p>Registered OpenType values for &lsquo;language_id&rsquo; are always smaller than 0x8000; values equal or larger than 0x8000 usually indicate a language tag string (introduced in OpenType version 1.6). Use function <a href="ft2-sfnt_names.html#FT_Get_Sfnt_LangTag">FT_Get_Sfnt_LangTag</a> with &lsquo;language_id&rsquo; as its argument to retrieve the associated language tag.</p>
-</td></tr>
-<tr><td class="val" id="name_id">name_id</td><td class="desc">
-<p>An identifier for &lsquo;string&rsquo;. See <a href="ft2-truetype_tables.html#TT_NAME_ID_XXX">TT_NAME_ID_XXX</a> for possible values.</p>
-</td></tr>
-<tr><td class="val" id="string">string</td><td class="desc">
-<p>The &lsquo;name&rsquo; string. Note that its format differs depending on the (platform,encoding) pair, being either a string of bytes (without a terminating NULL byte) or containing UTF-16BE entities.</p>
-</td></tr>
-<tr><td class="val" id="string_len">string_len</td><td class="desc">
-<p>The length of &lsquo;string&rsquo; in bytes.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>Please refer to the TrueType or OpenType specification for more details.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</h3>
-<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
-<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>
-
-<p>Retrieve the number of name strings in the SFNT &lsquo;name&rsquo; table.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The number of strings in the &lsquo;name&rsquo; table.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</h3>
-<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
-<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>
-
-<p>Retrieve a string of the SFNT &lsquo;name&rsquo; table for a given index.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="idx">idx</td><td class="desc">
-<p>The index of the &lsquo;name&rsquo; string.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aname">aname</td><td class="desc">
-<p>The indexed <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> structure.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The &lsquo;string&rsquo; array returned in the &lsquo;aname&rsquo; structure is not null-terminated. Note that you don't have to deallocate &lsquo;string&rsquo; by yourself; FreeType takes care of it if you call <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</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>
-<p>&lsquo;name&rsquo; table format&nbsp;1 entries can use language tags also, see <a href="ft2-sfnt_names.html#FT_Get_Sfnt_LangTag">FT_Get_Sfnt_LangTag</a>.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_SfntLangTag">FT_SfntLangTag</h3>
-<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SfntLangTag_
- {
- <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_SfntLangTag</b>;
-</pre>
-
-<p>A structure to model a language tag entry from an SFNT &lsquo;name&rsquo; table.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="string">string</td><td class="desc">
-<p>The language tag string, encoded in UTF-16BE (without trailing NULL bytes).</p>
-</td></tr>
-<tr><td class="val" id="string_len">string_len</td><td class="desc">
-<p>The length of &lsquo;string&rsquo; in <b>bytes</b>.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>Please refer to the TrueType or OpenType specification for more details.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Sfnt_LangTag">FT_Get_Sfnt_LangTag</h3>
-<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Sfnt_LangTag</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> langID,
- <a href="ft2-sfnt_names.html#FT_SfntLangTag">FT_SfntLangTag</a> *alangTag );
-</pre>
-
-<p>Retrieve the language tag associated with a language ID of an SFNT &lsquo;name&rsquo; table entry.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="langID">langID</td><td class="desc">
-<p>The language ID, as returned by <a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a>. This is always a value larger than 0x8000.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="alangTag">alangTag</td><td class="desc">
-<p>The language tag associated with the &lsquo;name&rsquo; table entry's language ID.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The &lsquo;string&rsquo; array returned in the &lsquo;alangTag&rsquo; structure is not null-terminated. Note that you don't have to deallocate &lsquo;string&rsquo; by yourself; FreeType takes care of it if you call <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-<p>Only &lsquo;name&rsquo; table format&nbsp;1 supports language tags. For format&nbsp;0 tables, this function always returns FT_Err_Invalid_Table. For invalid format&nbsp;1 language ID values, FT_Err_Invalid_Argument is returned.</p>
-
-<h4>since</h4>
-<p>2.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-sizes_management.html b/freetype/docs/reference/ft2-sizes_management.html
deleted file mode 100644
index 1e4daf9e..00000000
--- a/freetype/docs/reference/ft2-sizes_management.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="sizes_management">Size Management</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_New_Size">FT_New_Size</a></td><td><a href="#FT_Done_Size">FT_Done_Size</a></td><td><a href="#FT_Activate_Size">FT_Activate_Size</a></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_New_Size">FT_New_Size</h3>
-<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
-<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>
-
-<p>Create a new size object from a given face object.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to a parent face object.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="asize">asize</td><td class="desc">
-<p>A handle to a new size object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Done_Size">FT_Done_Size</h3>
-<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="size">size</td><td class="desc">
-<p>A handle to a target size object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Activate_Size">FT_Activate_Size</h3>
-<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
-<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>
-
-<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 one that has been activated last 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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="size">size</td><td class="desc">
-<p>A handle to a target size object.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-system_interface.html b/freetype/docs/reference/ft2-system_interface.html
deleted file mode 100644
index b9162306..00000000
--- a/freetype/docs/reference/ft2-system_interface.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="system_interface">System Interface</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Memory">FT_Memory</a></td><td><a href="#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td></tr>
-<tr><td><a href="#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="#FT_Stream">FT_Stream</a></td><td><a href="#FT_StreamRec">FT_StreamRec</a></td></tr>
-<tr><td><a href="#FT_Free_Func">FT_Free_Func</a></td><td><a href="#FT_StreamDesc">FT_StreamDesc</a></td><td></td></tr>
-<tr><td><a href="#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Memory">FT_Memory</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MemoryRec_* <b>FT_Memory</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Alloc_Func">FT_Alloc_Func</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A function used to allocate &lsquo;size&rsquo; bytes from &lsquo;memory&rsquo;.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr><td class="val" id="size">size</td><td class="desc">
-<p>The size in bytes to allocate.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Address of new memory block. 0&nbsp;in case of failure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Free_Func">FT_Free_Func</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A function used to release a given block of memory.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr><td class="val" id="block">block</td><td class="desc">
-<p>The address of the target memory block.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Realloc_Func">FT_Realloc_Func</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A function used to re-allocate a given block of memory.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr><td class="val" id="cur_size">cur_size</td><td class="desc">
-<p>The block's current size in bytes.</p>
-</td></tr>
-<tr><td class="val" id="new_size">new_size</td><td class="desc">
-<p>The block's requested new size.</p>
-</td></tr>
-<tr><td class="val" id="block">block</td><td class="desc">
-<p>The block's current address.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>New block address. 0&nbsp;in case of memory shortage.</p>
-
-<h4>note</h4>
-<p>In case of error, the old block must still be available.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_MemoryRec">FT_MemoryRec</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A structure used to describe a given memory manager to FreeType&nbsp;2.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="user">user</td><td class="desc">
-<p>A generic typeless pointer for user data.</p>
-</td></tr>
-<tr><td class="val" id="alloc">alloc</td><td class="desc">
-<p>A pointer type to an allocation function.</p>
-</td></tr>
-<tr><td class="val" id="free">free</td><td class="desc">
-<p>A pointer type to an memory freeing function.</p>
-</td></tr>
-<tr><td class="val" id="realloc">realloc</td><td class="desc">
-<p>A pointer type to a reallocation function.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stream">FT_Stream</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_* <b>FT_Stream</b>;
-</pre>
-
-<p>A handle to an input stream.</p>
-
-<h4>also</h4>
-<p>See <a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a> for the publicly accessible fields of a given stream object.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_StreamDesc">FT_StreamDesc</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stream_IoFunc">FT_Stream_IoFunc</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A function used to seek and read data from a given input stream.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>A handle to the source stream.</p>
-</td></tr>
-<tr><td class="val" id="offset">offset</td><td class="desc">
-<p>The offset of read in stream (always from start).</p>
-</td></tr>
-<tr><td class="val" id="buffer">buffer</td><td class="desc">
-<p>The address of the read buffer.</p>
-</td></tr>
-<tr><td class="val" id="count">count</td><td class="desc">
-<p>The number of bytes to read from the stream.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The number of bytes effectively read by the stream.</p>
-
-<h4>note</h4>
-<p>This function might be called to perform a seek or skip operation with a &lsquo;count&rsquo; of&nbsp;0. A non-zero return value then indicates an error.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Stream_CloseFunc">FT_Stream_CloseFunc</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A function used to close a given input stream.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="stream">stream</td><td class="desc">
-<p>A handle to the target stream.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_StreamRec">FT_StreamRec</h3>
-<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
-<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>
-
-<p>A structure used to describe an input stream.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="base">base</td><td class="desc">
-<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><td class="val" id="size">size</td><td class="desc">
-<p>The stream size in bytes.</p>
-<p>In case of compressed streams where the size is unknown before actually doing the decompression, the value is set to 0x7FFFFFFF. (Note that this size value can occur for normal streams also; it is thus just a hint.)</p>
-</td></tr>
-<tr><td class="val" id="pos">pos</td><td class="desc">
-<p>The current position within the stream.</p>
-</td></tr>
-<tr><td class="val" id="descriptor">descriptor</td><td class="desc">
-<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><td class="val" id="pathname">pathname</td><td class="desc">
-<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><td class="val" id="read">read</td><td class="desc">
-<p>The stream's input function.</p>
-</td></tr>
-<tr><td class="val" id="close">close</td><td class="desc">
-<p>The stream's close function.</p>
-</td></tr>
-<tr><td class="val" id="memory">memory</td><td class="desc">
-<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><td class="val" id="cursor">cursor</td><td class="desc">
-<p>This field is set and used internally by FreeType when parsing frames.</p>
-</td></tr>
-<tr><td class="val" id="limit">limit</td><td class="desc">
-<p>This field is set and used internally by FreeType when parsing frames.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-t1_cid_driver.html b/freetype/docs/reference/ft2-t1_cid_driver.html
deleted file mode 100644
index a255eeb4..00000000
--- a/freetype/docs/reference/ft2-t1_cid_driver.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="t1_cid_driver">The Type 1 and CID drivers</h1>
-
-<p>It is possible to control the behaviour of FreeType's Type&nbsp;1 and Type&nbsp;1 CID drivers with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>.</p>
-<p>Behind the scenes, both drivers use the Adobe CFF engine for hinting; however, the used properties must be specified separately.</p>
-<p>The Type&nbsp;1 driver's module name is &lsquo;type1&rsquo;; the CID driver's module name is &lsquo;t1cid&rsquo;.</p>
-<p>Available properties are <a href="ft2-properties.html#hinting-engine">hinting-engine</a>, <a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a>, <a href="ft2-properties.html#darkening-parameters">darkening-parameters</a>, and <a href="ft2-properties.html#random-seed">random-seed</a>, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
-<p>Please see the &lsquo;<a href="ft2-cff_driver.html#cff_driver">The CFF driver</a>&rsquo; section for more details on the new hinting engine.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-toc.html b/freetype/docs/reference/ft2-toc.html
deleted file mode 100644
index c803ca1d..00000000
--- a/freetype/docs/reference/ft2-toc.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1>Table of Contents</h1>
-<div class="section">
-<h2>General Remarks</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-header_inclusion.html">FreeType's header inclusion scheme</a></td><td class="desc">
-<p>How client applications should include FreeType header files.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-user_allocation.html">User allocation</a></td><td class="desc">
-<p>How client applications should allocate FreeType data structures.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Core API</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-version.html">FreeType Version</a></td><td class="desc">
-<p>Functions and macros related to FreeType versions.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-basic_types.html">Basic Data Types</a></td><td class="desc">
-<p>The basic data types defined by the library.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-base_interface.html">Base Interface</a></td><td class="desc">
-<p>The FreeType&nbsp;2 base font interface.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-glyph_variants.html">Unicode Variation Sequences</a></td><td class="desc">
-<p>The FreeType&nbsp;2 interface to Unicode Variation Sequences (UVS), using the SFNT cmap format&nbsp;14.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-glyph_management.html">Glyph Management</a></td><td class="desc">
-<p>Generic interface to manage individual glyph data.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-mac_specific.html">Mac Specific Interface</a></td><td class="desc">
-<p>Only available on the Macintosh.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-sizes_management.html">Size Management</a></td><td class="desc">
-<p>Managing multiple sizes per face.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-header_file_macros.html">Header File Macros</a></td><td class="desc">
-<p>Macro definitions used to #include specific header files.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Format-Specific API</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-multiple_masters.html">Multiple Masters</a></td><td class="desc">
-<p>How to manage Multiple Masters fonts.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-truetype_tables.html">TrueType Tables</a></td><td class="desc">
-<p>TrueType specific table types and functions.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-type1_tables.html">Type 1 Tables</a></td><td class="desc">
-<p>Type&nbsp;1 (PostScript) specific font tables.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-sfnt_names.html">SFNT Names</a></td><td class="desc">
-<p>Access the names embedded in TrueType and OpenType files.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-bdf_fonts.html">BDF and PCF Files</a></td><td class="desc">
-<p>BDF and PCF specific API.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-cid_fonts.html">CID Fonts</a></td><td class="desc">
-<p>CID-keyed font specific API.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-pfr_fonts.html">PFR Fonts</a></td><td class="desc">
-<p>PFR/TrueDoc specific API.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-winfnt_fonts.html">Window FNT Files</a></td><td class="desc">
-<p>Windows FNT specific API.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-font_formats.html">Font Formats</a></td><td class="desc">
-<p>Getting the font format.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-gasp_table.html">Gasp Table</a></td><td class="desc">
-<p>Retrieving TrueType &lsquo;gasp&rsquo; table entries.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Controlling FreeType Modules</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-auto_hinter.html">The auto-hinter</a></td><td class="desc">
-<p>Controlling the auto-hinting module.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-cff_driver.html">The CFF driver</a></td><td class="desc">
-<p>Controlling the CFF driver module.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-t1_cid_driver.html">The Type 1 and CID drivers</a></td><td class="desc">
-<p>Controlling the Type&nbsp;1 and CID driver modules.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-tt_driver.html">The TrueType driver</a></td><td class="desc">
-<p>Controlling the TrueType driver module.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-pcf_driver.html">The PCF driver</a></td><td class="desc">
-<p>Controlling the PCF driver module.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-properties.html">Driver properties</a></td><td class="desc">
-<p>Controlling driver modules.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-parameter_tags.html">Parameter Tags</a></td><td class="desc">
-<p>Macros for driver property and font loading parameter tags.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Cache Sub-System</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-cache_subsystem.html">Cache Sub-System</a></td><td class="desc">
-<p>How to cache face, size, and glyph data with FreeType&nbsp;2.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Support API</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-computations.html">Computations</a></td><td class="desc">
-<p>Crunching fixed numbers and vectors.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-list_processing.html">List Processing</a></td><td class="desc">
-<p>Simple management of lists.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-outline_processing.html">Outline Processing</a></td><td class="desc">
-<p>Functions to create, transform, and render vectorial glyph images.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-quick_advance.html">Quick retrieval of advance values</a></td><td class="desc">
-<p>Retrieve horizontal and vertical advance values without processing glyph outlines, if possible.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-bitmap_handling.html">Bitmap Handling</a></td><td class="desc">
-<p>Handling FT_Bitmap objects.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-raster.html">Scanline Converter</a></td><td class="desc">
-<p>How vectorial outlines are converted into bitmaps and pixmaps.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-glyph_stroker.html">Glyph Stroker</a></td><td class="desc">
-<p>Generating bordered and stroked glyphs.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-system_interface.html">System Interface</a></td><td class="desc">
-<p>How FreeType manages memory and i/o.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-module_management.html">Module Management</a></td><td class="desc">
-<p>How to add, upgrade, remove, and control modules from FreeType.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-gzip.html">GZIP Streams</a></td><td class="desc">
-<p>Using gzip-compressed font files.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-lzw.html">LZW Streams</a></td><td class="desc">
-<p>Using LZW-compressed font files.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-bzip2.html">BZIP2 Streams</a></td><td class="desc">
-<p>Using bzip2-compressed font files.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-lcd_filtering.html">LCD Filtering</a></td><td class="desc">
-<p>Reduce color fringes of subpixel-rendered bitmaps.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Error Codes</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-error_enumerations.html">Error Enumerations</a></td><td class="desc">
-<p>How to handle errors and error strings.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-error_code_values.html">Error Code Values</a></td><td class="desc">
-<p>All possible error codes returned by FreeType functions.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2>Miscellaneous</h2>
-<table class="toc">
-<tr><td class="link"><a href="ft2-ot_validation.html">OpenType Validation</a></td><td class="desc">
-<p>An API to validate OpenType tables.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-incremental.html">Incremental Loading</a></td><td class="desc">
-<p>Custom Glyph Loading.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-truetype_engine.html">The TrueType Engine</a></td><td class="desc">
-<p>TrueType bytecode support.</p>
-</td></tr>
-<tr><td class="link"><a href="ft2-gx_validation.html">TrueTypeGX/AAT Validation</a></td><td class="desc">
-<p>An API to validate TrueTypeGX/AAT tables.</p>
-</td></tr>
-</table>
-</div>
-<div class="section">
-<h2><a href="ft2-index.html">Global Index</a></h2></div>
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td></tr></table>
-
-<div class="timestamp">generated on Tue May 1 23:34:43 2018</div></body>
-</html>
diff --git a/freetype/docs/reference/ft2-truetype_engine.html b/freetype/docs/reference/ft2-truetype_engine.html
deleted file mode 100644
index 4ad43f45..00000000
--- a/freetype/docs/reference/ft2-truetype_engine.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="truetype_engine">The TrueType Engine</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td><td><a href="#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td></tr>
-</table>
-
-
-<p>This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.</p>
-
-<div class="section">
-<h3 id="FT_TrueTypeEngineType">FT_TrueTypeEngineType</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_TrueTypeEngineType_
- {
- <a href="ft2-truetype_engine.html#FT_TRUETYPE_ENGINE_TYPE_NONE">FT_TRUETYPE_ENGINE_TYPE_NONE</a> = 0,
- <a href="ft2-truetype_engine.html#FT_TRUETYPE_ENGINE_TYPE_UNPATENTED">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a>,
- <a href="ft2-truetype_engine.html#FT_TRUETYPE_ENGINE_TYPE_PATENTED">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a>
-
- } <b>FT_TrueTypeEngineType</b>;
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_TRUETYPE_ENGINE_TYPE_NONE">FT_TRUETYPE_ENGINE_TYPE_NONE</td><td class="desc">
-<p>The library doesn't implement any kind of bytecode interpreter.</p>
-</td></tr>
-<tr><td class="val" id="FT_TRUETYPE_ENGINE_TYPE_UNPATENTED">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</td><td class="desc">
-<p>Deprecated and removed.</p>
-</td></tr>
-<tr><td class="val" id="FT_TRUETYPE_ENGINE_TYPE_PATENTED">FT_TRUETYPE_ENGINE_TYPE_PATENTED</td><td class="desc">
-<p>The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine (this was governed by patents until May 2010, hence the name).</p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.2</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</h3>
-<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
-<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>
-
-<p>Return an <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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A library instance.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A value indicating which level is supported.</p>
-
-<h4>since</h4>
-<p>2.2</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-truetype_tables.html b/freetype/docs/reference/ft2-truetype_tables.html
deleted file mode 100644
index 9cddc35c..00000000
--- a/freetype/docs/reference/ft2-truetype_tables.html
+++ /dev/null
@@ -1,1869 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="truetype_tables">TrueType Tables</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#TT_Header">TT_Header</a></td><td><a href="#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td></tr>
-<tr><td><a href="#TT_HoriHeader">TT_HoriHeader</a></td><td><a href="#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td><td><a href="#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td></tr>
-<tr><td><a href="#TT_VertHeader">TT_VertHeader</a></td><td>&nbsp;</td><td><a href="#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
-<tr><td><a href="#TT_OS2">TT_OS2</a></td><td><a href="#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td><td><a href="#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td></tr>
-<tr><td><a href="#TT_Postscript">TT_Postscript</a></td><td><a href="#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td><td><a href="#TT_MAC_LANGID_XXX">TT_MAC_LANGID_XXX</a></td></tr>
-<tr><td><a href="#TT_PCLT">TT_PCLT</a></td><td>&nbsp;</td><td><a href="#TT_MS_LANGID_XXX">TT_MS_LANGID_XXX</a></td></tr>
-<tr><td><a href="#TT_MaxProfile">TT_MaxProfile</a></td><td><a href="#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="#TT_NAME_ID_XXX">TT_NAME_ID_XXX</a></td></tr>
-<tr><td>&nbsp;</td><td>&nbsp;</td><td><a href="#TT_UCR_XXX">TT_UCR_XXX</a></td></tr>
-<tr><td><a href="#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td><td><a href="#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td><td></td></tr>
-<tr><td><a href="#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td><td><a href="#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains definitions of some basic tables specific to TrueType and OpenType as well as some routines used to access and process them.</p>
-
-<div class="section">
-<h3 id="TT_Header">TT_Header</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>A structure to model a TrueType font header table. All fields follow the OpenType specification.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_HoriHeader">TT_HoriHeader</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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 OpenType 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>
-
-<p>A structure to model a TrueType horizontal header, the &lsquo;hhea&rsquo; table, as well as the corresponding horizontal metrics table, &lsquo;hmtx&rsquo;.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="Version">Version</td><td class="desc">
-<p>The table version.</p>
-</td></tr>
-<tr><td class="val" id="Ascender">Ascender</td><td class="desc">
-<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 &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
-</td></tr>
-<tr><td class="val" id="Descender">Descender</td><td class="desc">
-<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 &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
-</td></tr>
-<tr><td class="val" id="Line_Gap">Line_Gap</td><td class="desc">
-<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><td class="val" id="advance_Width_Max">advance_Width_Max</td><td class="desc">
-<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><td class="val" id="min_Left_Side_Bearing">min_Left_Side_Bearing</td><td class="desc">
-<p>The minimum left side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr><td class="val" id="min_Right_Side_Bearing">min_Right_Side_Bearing</td><td class="desc">
-<p>The minimum right side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr><td class="val" id="xMax_Extent">xMax_Extent</td><td class="desc">
-<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><td class="val" id="caret_Slope_Rise">caret_Slope_Rise</td><td class="desc">
-<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
-</td></tr>
-<tr><td class="val" id="caret_Slope_Run">caret_Slope_Run</td><td class="desc">
-<p>The run coefficient of the cursor's slope.</p>
-</td></tr>
-<tr><td class="val" id="caret_Offset">caret_Offset</td><td class="desc">
-<p>The cursor's offset for slanted fonts.</p>
-</td></tr>
-<tr><td class="val" id="Reserved">Reserved</td><td class="desc">
-<p>8&nbsp;reserved bytes.</p>
-</td></tr>
-<tr><td class="val" id="metric_Data_Format">metric_Data_Format</td><td class="desc">
-<p>Always&nbsp;0.</p>
-</td></tr>
-<tr><td class="val" id="number_Of_HMetrics">number_Of_HMetrics</td><td class="desc">
-<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><td class="val" id="long_metrics">long_metrics</td><td class="desc">
-<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="short_metrics">short_metrics</td><td class="desc">
-<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>For an OpenType variation font, the values of the following fields can change after a call to <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: &lsquo;caret_Slope_Rise&rsquo;, &lsquo;caret_Slope_Run&rsquo;, and &lsquo;caret_Offset&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_VertHeader">TT_VertHeader</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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 top-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Bottom_Side_Bearing; /* minimum bottom-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMax_Extent; /* 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 OpenType specification */
- /* but they are used to connect the metrics header to the relevant */
- /* `vmtx' table. */
-
- <span class="keyword">void</span>* long_metrics;
- <span class="keyword">void</span>* short_metrics;
-
- } <b>TT_VertHeader</b>;
-</pre>
-
-<p>A structure used to model a TrueType vertical header, the &lsquo;vhea&rsquo; table, as well as the corresponding vertical metrics table, &lsquo;vmtx&rsquo;.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="Version">Version</td><td class="desc">
-<p>The table version.</p>
-</td></tr>
-<tr><td class="val" id="Ascender">Ascender</td><td class="desc">
-<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 &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
-</td></tr>
-<tr><td class="val" id="Descender">Descender</td><td class="desc">
-<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 &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
-</td></tr>
-<tr><td class="val" id="Line_Gap">Line_Gap</td><td class="desc">
-<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><td class="val" id="advance_Height_Max">advance_Height_Max</td><td class="desc">
-<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><td class="val" id="min_Top_Side_Bearing">min_Top_Side_Bearing</td><td class="desc">
-<p>The minimum top side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr><td class="val" id="min_Bottom_Side_Bearing">min_Bottom_Side_Bearing</td><td class="desc">
-<p>The minimum bottom side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr><td class="val" id="yMax_Extent">yMax_Extent</td><td class="desc">
-<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><td class="val" id="caret_Slope_Rise">caret_Slope_Rise</td><td class="desc">
-<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
-</td></tr>
-<tr><td class="val" id="caret_Slope_Run">caret_Slope_Run</td><td class="desc">
-<p>The run coefficient of the cursor's slope.</p>
-</td></tr>
-<tr><td class="val" id="caret_Offset">caret_Offset</td><td class="desc">
-<p>The cursor's offset for slanted fonts.</p>
-</td></tr>
-<tr><td class="val" id="Reserved">Reserved</td><td class="desc">
-<p>8&nbsp;reserved bytes.</p>
-</td></tr>
-<tr><td class="val" id="metric_Data_Format">metric_Data_Format</td><td class="desc">
-<p>Always&nbsp;0.</p>
-</td></tr>
-<tr><td class="val" id="number_Of_VMetrics">number_Of_VMetrics</td><td class="desc">
-<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><td class="val" id="long_metrics">long_metrics</td><td class="desc">
-<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
-</td></tr>
-<tr><td class="val" id="short_metrics">short_metrics</td><td class="desc">
-<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>For an OpenType variation font, the values of the following fields can change after a call to <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: &lsquo;Ascender&rsquo;, &lsquo;Descender&rsquo;, &lsquo;Line_Gap&rsquo;, &lsquo;caret_Slope_Rise&rsquo;, &lsquo;caret_Slope_Run&rsquo;, and &lsquo;caret_Offset&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_OS2">TT_OS2</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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_UShort">FT_UShort</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 and higher: */
-
- <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 and higher: */
-
- <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;
-
- /* only version 5 and higher: */
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usLowerOpticalPointSize; /* in twips (1/20th points) */
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usUpperOpticalPointSize; /* in twips (1/20th points) */
-
- } <b>TT_OS2</b>;
-</pre>
-
-<p>A structure to model a TrueType &lsquo;OS/2&rsquo; table. All fields comply to the OpenType specification.</p>
-<p>Note that we now support old Mac fonts that do not include an &lsquo;OS/2&rsquo; table. In this case, the &lsquo;version&rsquo; field is always set to 0xFFFF.</p>
-
-<h4>note</h4>
-<p>For an OpenType variation font, the values of the following fields can change after a call to <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: &lsquo;sCapHeight&rsquo;, &lsquo;sTypoAscender&rsquo;, &lsquo;sTypoDescender&rsquo;, &lsquo;sTypoLineGap&rsquo;, &lsquo;sxHeight&rsquo;, &lsquo;usWinAscent&rsquo;, &lsquo;usWinDescent&rsquo;, &lsquo;yStrikeoutPosition&rsquo;, &lsquo;yStrikeoutSize&rsquo;, &lsquo;ySubscriptXOffset&rsquo;, &lsquo;ySubScriptXSize&rsquo;, &lsquo;ySubscriptYOffset&rsquo;, &lsquo;ySubscriptYSize&rsquo;, &lsquo;ySuperscriptXOffset&rsquo;, &lsquo;ySuperscriptXSize&rsquo;, &lsquo;ySuperscriptYOffset&rsquo;, and &lsquo;ySuperscriptYSize&rsquo;.</p>
-<p>Possible values for bits in the &lsquo;ulUnicodeRangeX&rsquo; fields are given by the <a href="ft2-truetype_tables.html#TT_UCR_XXX">TT_UCR_XXX</a> macros.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_Postscript">TT_Postscript</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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 `post' table, but we don't */
- /* load them by default. */
-
- } <b>TT_Postscript</b>;
-</pre>
-
-<p>A structure to model a TrueType &lsquo;post&rsquo; table. All fields comply to the OpenType specification. This structure does not reference a font's PostScript glyph names; use <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a> to retrieve them.</p>
-
-<h4>note</h4>
-<p>For an OpenType variation font, the values of the following fields can change after a call to <a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: &lsquo;underlinePosition&rsquo; and &lsquo;underlineThickness&rsquo;.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_PCLT">TT_PCLT</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>A structure to model a TrueType &lsquo;PCLT&rsquo; table. All fields comply to the OpenType specification.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_MaxProfile">TT_MaxProfile</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>The maximum profile (&lsquo;maxp&rsquo;) table contains many max values, which can be used to pre-allocate arrays for speeding up glyph loading and hinting.</p>
-
-<h4>fields</h4>
-<table class="fields">
-<tr><td class="val" id="version">version</td><td class="desc">
-<p>The version number.</p>
-</td></tr>
-<tr><td class="val" id="numGlyphs">numGlyphs</td><td class="desc">
-<p>The number of glyphs in this TrueType font.</p>
-</td></tr>
-<tr><td class="val" id="maxPoints">maxPoints</td><td class="desc">
-<p>The maximum number of points in a non-composite TrueType glyph. See also &lsquo;maxCompositePoints&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="maxContours">maxContours</td><td class="desc">
-<p>The maximum number of contours in a non-composite TrueType glyph. See also &lsquo;maxCompositeContours&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="maxCompositePoints">maxCompositePoints</td><td class="desc">
-<p>The maximum number of points in a composite TrueType glyph. See also &lsquo;maxPoints&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="maxCompositeContours">maxCompositeContours</td><td class="desc">
-<p>The maximum number of contours in a composite TrueType glyph. See also &lsquo;maxContours&rsquo;.</p>
-</td></tr>
-<tr><td class="val" id="maxZones">maxZones</td><td class="desc">
-<p>The maximum number of zones used for glyph hinting.</p>
-</td></tr>
-<tr><td class="val" id="maxTwilightPoints">maxTwilightPoints</td><td class="desc">
-<p>The maximum number of points in the twilight zone used for glyph hinting.</p>
-</td></tr>
-<tr><td class="val" id="maxStorage">maxStorage</td><td class="desc">
-<p>The maximum number of elements in the storage area used for glyph hinting.</p>
-</td></tr>
-<tr><td class="val" id="maxFunctionDefs">maxFunctionDefs</td><td class="desc">
-<p>The maximum number of function definitions in the TrueType bytecode for this font.</p>
-</td></tr>
-<tr><td class="val" id="maxInstructionDefs">maxInstructionDefs</td><td class="desc">
-<p>The maximum number of instruction definitions in the TrueType bytecode for this font.</p>
-</td></tr>
-<tr><td class="val" id="maxStackElements">maxStackElements</td><td class="desc">
-<p>The maximum number of stack elements used during bytecode interpretation.</p>
-</td></tr>
-<tr><td class="val" id="maxSizeOfInstructions">maxSizeOfInstructions</td><td class="desc">
-<p>The maximum number of TrueType opcodes used for glyph hinting.</p>
-</td></tr>
-<tr><td class="val" id="maxComponentElements">maxComponentElements</td><td class="desc">
-<p>The maximum number of simple (i.e., non- composite) glyphs in a composite glyph.</p>
-</td></tr>
-<tr><td class="val" id="maxComponentDepth">maxComponentDepth</td><td class="desc">
-<p>The maximum nesting depth of composite glyphs.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<p>This structure is only used during font loading.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Sfnt_Tag">FT_Sfnt_Tag</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Sfnt_Tag_
- {
- <a href="ft2-truetype_tables.html#FT_SFNT_HEAD">FT_SFNT_HEAD</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_MAXP">FT_SFNT_MAXP</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_OS2">FT_SFNT_OS2</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_HHEA">FT_SFNT_HHEA</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_VHEA">FT_SFNT_VHEA</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_POST">FT_SFNT_POST</a>,
- <a href="ft2-truetype_tables.html#FT_SFNT_PCLT">FT_SFNT_PCLT</a>,
-
- FT_SFNT_MAX
-
- } <b>FT_Sfnt_Tag</b>;
-
- /* these constants are deprecated; use the corresponding `<b>FT_Sfnt_Tag</b>' */
- /* values instead */
-#define ft_sfnt_head <a href="ft2-truetype_tables.html#FT_SFNT_HEAD">FT_SFNT_HEAD</a>
-#define ft_sfnt_maxp <a href="ft2-truetype_tables.html#FT_SFNT_MAXP">FT_SFNT_MAXP</a>
-#define ft_sfnt_os2 <a href="ft2-truetype_tables.html#FT_SFNT_OS2">FT_SFNT_OS2</a>
-#define ft_sfnt_hhea <a href="ft2-truetype_tables.html#FT_SFNT_HHEA">FT_SFNT_HHEA</a>
-#define ft_sfnt_vhea <a href="ft2-truetype_tables.html#FT_SFNT_VHEA">FT_SFNT_VHEA</a>
-#define ft_sfnt_post <a href="ft2-truetype_tables.html#FT_SFNT_POST">FT_SFNT_POST</a>
-#define ft_sfnt_pclt <a href="ft2-truetype_tables.html#FT_SFNT_PCLT">FT_SFNT_PCLT</a>
-</pre>
-
-<p>An enumeration to specify indices of SFNT tables loaded and parsed by FreeType during initialization of an SFNT font. Used in the <a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a> API function.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_SFNT_HEAD">FT_SFNT_HEAD</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_Header">TT_Header</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_MAXP">FT_SFNT_MAXP</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_MaxProfile">TT_MaxProfile</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_OS2">FT_SFNT_OS2</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_HHEA">FT_SFNT_HHEA</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_VHEA">FT_SFNT_VHEA</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_VertHeader">TT_VertHeader</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_POST">FT_SFNT_POST</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</a> structure.</p>
-</td></tr>
-<tr><td class="val" id="FT_SFNT_PCLT">FT_SFNT_PCLT</td><td class="desc">
-<p>To access the font's <a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a> structure.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>Return a pointer to a given SFNT table stored within a face.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source.</p>
-</td></tr>
-<tr><td class="val" id="tag">tag</td><td class="desc">
-<p>The index of the SFNT table.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>A type-less pointer to the table. This will be NULL in case of error, or if the corresponding table was not found <b>OR</b> loaded from the file.</p>
-<p>Use a typecast according to &lsquo;tag&rsquo; to access the structure elements.</p>
-
-<h4>note</h4>
-<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>
-<p>Here an example how to access the &lsquo;vhea&rsquo; table:</p>
-<pre class="colored">
- TT_VertHeader* vert_header;
-
-
- vert_header =
- (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA );
-</pre>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>Load any SFNT font table into client memory.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="tag">tag</td><td class="desc">
-<p>The four-byte tag of the table to load. Use 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><td class="val" id="offset">offset</td><td class="desc">
-<p>The starting offset in the table (or file if tag&nbsp;==&nbsp;0).</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="buffer">buffer</td><td class="desc">
-<p>The target buffer address. The client must ensure that the memory array is big enough to hold the data.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="length">length</td><td class="desc">
-<p>If the &lsquo;length&rsquo; parameter is NULL, 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>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<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>
-<p>Note that structures like <a href="ft2-truetype_tables.html#TT_Header">TT_Header</a> or <a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a> can't be used with this function; they are limited to <a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a>. Reason is that those structures depend on the processor architecture, with varying size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>Return information on an SFNT table.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the source face.</p>
-</td></tr>
-<tr><td class="val" id="table_index">table_index</td><td class="desc">
-<p>The index of an SFNT table. The function returns FT_Err_Table_Missing for an invalid value.</p>
-</td></tr>
-</table>
-
-<h4>inout</h4>
-<table class="fields">
-<tr><td class="val" id="tag">tag</td><td class="desc">
-<p>The name tag of the SFNT table. If the value is NULL, &lsquo;table_index&rsquo; is ignored, and &lsquo;length&rsquo; returns the number of SFNT tables in the font.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="length">length</td><td class="desc">
-<p>The length of the SFNT table (or the number of SFNT tables, depending on &lsquo;tag&rsquo;).</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>While parsing fonts, FreeType handles SFNT tables with length zero as missing.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>Return cmap language ID as specified in the OpenType standard. Definitions of language ID values are in file <a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a>.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="charmap">charmap</td><td class="desc">
-<p>The target charmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The language ID of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to an SFNT face, just return&nbsp;0 as the default value.</p>
-<p>For a format&nbsp;14 cmap (to access Unicode IVS), the return value is 0xFFFFFFFF.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_CMap_Format">FT_Get_CMap_Format</h3>
-<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
-<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>
-
-<p>Return the format of an SFNT &lsquo;cmap&rsquo; table.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="charmap">charmap</td><td class="desc">
-<p>The target charmap.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The format of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to an SFNT face, return -1.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</h3>
-<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>
-
-<p>Deprecated, no effect.</p>
-<p>Previously: 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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_PLATFORM_XXX">TT_PLATFORM_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_APPLE_UNICODE">TT_PLATFORM_APPLE_UNICODE</a> 0
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_MACINTOSH">TT_PLATFORM_MACINTOSH</a> 1
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_ISO">TT_PLATFORM_ISO</a> 2 /* deprecated */
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_MICROSOFT">TT_PLATFORM_MICROSOFT</a> 3
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_CUSTOM">TT_PLATFORM_CUSTOM</a> 4
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_ADOBE">TT_PLATFORM_ADOBE</a> 7 /* artificial */
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_PLATFORM_APPLE_UNICODE">TT_PLATFORM_APPLE_UNICODE</td><td class="desc">
-<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><td class="val" id="TT_PLATFORM_MACINTOSH">TT_PLATFORM_MACINTOSH</td><td class="desc">
-<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><td class="val" id="TT_PLATFORM_ISO">TT_PLATFORM_ISO</td><td class="desc">
-<p>This value was used to specify ISO/IEC 10646 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><td class="val" id="TT_PLATFORM_MICROSOFT">TT_PLATFORM_MICROSOFT</td><td class="desc">
-<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><td class="val" id="TT_PLATFORM_CUSTOM">TT_PLATFORM_CUSTOM</td><td class="desc">
-<p>Used to indicate application-specific charmaps.</p>
-</td></tr>
-<tr><td class="val" id="TT_PLATFORM_ADOBE">TT_PLATFORM_ADOBE</td><td class="desc">
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_DEFAULT">TT_APPLE_ID_DEFAULT</a> 0 /* Unicode 1.0 */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_UNICODE_1_1">TT_APPLE_ID_UNICODE_1_1</a> 1 /* specify Hangul at U+34xx */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_ISO_10646">TT_APPLE_ID_ISO_10646</a> 2 /* deprecated */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_UNICODE_2_0">TT_APPLE_ID_UNICODE_2_0</a> 3 /* or later */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_UNICODE_32">TT_APPLE_ID_UNICODE_32</a> 4 /* 2.0 or later, full repertoire */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_VARIANT_SELECTOR">TT_APPLE_ID_VARIANT_SELECTOR</a> 5 /* variation selector data */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_FULL_UNICODE">TT_APPLE_ID_FULL_UNICODE</a> 6 /* used with type 13 cmaps */
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_APPLE_ID_DEFAULT">TT_APPLE_ID_DEFAULT</td><td class="desc">
-<p>Unicode version 1.0.</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_UNICODE_1_1">TT_APPLE_ID_UNICODE_1_1</td><td class="desc">
-<p>Unicode 1.1; specifies Hangul characters starting at U+34xx.</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_ISO_10646">TT_APPLE_ID_ISO_10646</td><td class="desc">
-<p>Deprecated (identical to preceding).</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_UNICODE_2_0">TT_APPLE_ID_UNICODE_2_0</td><td class="desc">
-<p>Unicode 2.0 and beyond (UTF-16 BMP only).</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_UNICODE_32">TT_APPLE_ID_UNICODE_32</td><td class="desc">
-<p>Unicode 3.1 and beyond, using UTF-32.</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_VARIANT_SELECTOR">TT_APPLE_ID_VARIANT_SELECTOR</td><td class="desc">
-<p>From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap.</p>
-</td></tr>
-<tr><td class="val" id="TT_APPLE_ID_FULL_UNICODE">TT_APPLE_ID_FULL_UNICODE</td><td class="desc">
-<p>Used for fallback fonts that provide complete Unicode coverage with a type&nbsp;13 cmap.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_MAC_ID_XXX">TT_MAC_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#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
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_ISO_ID_XXX">TT_ISO_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_7BIT_ASCII">TT_ISO_ID_7BIT_ASCII</a> 0
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_10646">TT_ISO_ID_10646</a> 1
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_8859_1">TT_ISO_ID_8859_1</a> 2
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_ISO_ID_7BIT_ASCII">TT_ISO_ID_7BIT_ASCII</td><td class="desc">
-<p>ASCII.</p>
-</td></tr>
-<tr><td class="val" id="TT_ISO_ID_10646">TT_ISO_ID_10646</td><td class="desc">
-<p>ISO/10646.</p>
-</td></tr>
-<tr><td class="val" id="TT_ISO_ID_8859_1">TT_ISO_ID_8859_1</td><td class="desc">
-<p>Also known as Latin-1.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_MS_ID_XXX">TT_MS_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_SYMBOL_CS">TT_MS_ID_SYMBOL_CS</a> 0
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_UNICODE_CS">TT_MS_ID_UNICODE_CS</a> 1
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_SJIS">TT_MS_ID_SJIS</a> 2
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_PRC">TT_MS_ID_PRC</a> 3
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_BIG_5">TT_MS_ID_BIG_5</a> 4
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_WANSUNG">TT_MS_ID_WANSUNG</a> 5
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_JOHAB">TT_MS_ID_JOHAB</a> 6
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_UCS_4">TT_MS_ID_UCS_4</a> 10
-
- /* this value is deprecated */
-#define TT_MS_ID_GB2312 <a href="ft2-truetype_tables.html#TT_MS_ID_PRC">TT_MS_ID_PRC</a>
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_MS_ID_SYMBOL_CS">TT_MS_ID_SYMBOL_CS</td><td class="desc">
-<p>Microsoft symbol encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_UNICODE_CS">TT_MS_ID_UNICODE_CS</td><td class="desc">
-<p>Microsoft WGL4 charmap, matching Unicode. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_SJIS">TT_MS_ID_SJIS</td><td class="desc">
-<p>Shift JIS Japanese encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_PRC">TT_MS_ID_PRC</td><td class="desc">
-<p>Chinese encodings as used in the People's Republic of China (PRC). This means the encodings GB&nbsp;2312 and its supersets GBK and GB&nbsp;18030. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_PRC</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_BIG_5">TT_MS_ID_BIG_5</td><td class="desc">
-<p>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><td class="val" id="TT_MS_ID_WANSUNG">TT_MS_ID_WANSUNG</td><td class="desc">
-<p>Korean Extended Wansung encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_JOHAB">TT_MS_ID_JOHAB</td><td class="desc">
-<p>Korean Johab encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>.</p>
-</td></tr>
-<tr><td class="val" id="TT_MS_ID_UCS_4">TT_MS_ID_UCS_4</td><td class="desc">
-<p>UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001).</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_STANDARD">TT_ADOBE_ID_STANDARD</a> 0
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_EXPERT">TT_ADOBE_ID_EXPERT</a> 1
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_CUSTOM">TT_ADOBE_ID_CUSTOM</a> 2
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_LATIN_1">TT_ADOBE_ID_LATIN_1</a> 3
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="TT_ADOBE_ID_STANDARD">TT_ADOBE_ID_STANDARD</td><td class="desc">
-<p>Adobe standard encoding.</p>
-</td></tr>
-<tr><td class="val" id="TT_ADOBE_ID_EXPERT">TT_ADOBE_ID_EXPERT</td><td class="desc">
-<p>Adobe expert encoding.</p>
-</td></tr>
-<tr><td class="val" id="TT_ADOBE_ID_CUSTOM">TT_ADOBE_ID_CUSTOM</td><td class="desc">
-<p>Adobe custom encoding.</p>
-</td></tr>
-<tr><td class="val" id="TT_ADOBE_ID_LATIN_1">TT_ADOBE_ID_LATIN_1</td><td class="desc">
-<p>Adobe Latin&nbsp;1 encoding.</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_MAC_LANGID_XXX">TT_MAC_LANGID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define TT_MAC_LANGID_ENGLISH 0
-#define TT_MAC_LANGID_FRENCH 1
-#define TT_MAC_LANGID_GERMAN 2
-#define TT_MAC_LANGID_ITALIAN 3
-#define TT_MAC_LANGID_DUTCH 4
-#define TT_MAC_LANGID_SWEDISH 5
-#define TT_MAC_LANGID_SPANISH 6
-#define TT_MAC_LANGID_DANISH 7
-#define TT_MAC_LANGID_PORTUGUESE 8
-#define TT_MAC_LANGID_NORWEGIAN 9
-#define TT_MAC_LANGID_HEBREW 10
-#define TT_MAC_LANGID_JAPANESE 11
-#define TT_MAC_LANGID_ARABIC 12
-#define TT_MAC_LANGID_FINNISH 13
-#define TT_MAC_LANGID_GREEK 14
-#define TT_MAC_LANGID_ICELANDIC 15
-#define TT_MAC_LANGID_MALTESE 16
-#define TT_MAC_LANGID_TURKISH 17
-#define TT_MAC_LANGID_CROATIAN 18
-#define TT_MAC_LANGID_CHINESE_TRADITIONAL 19
-#define TT_MAC_LANGID_URDU 20
-#define TT_MAC_LANGID_HINDI 21
-#define TT_MAC_LANGID_THAI 22
-#define TT_MAC_LANGID_KOREAN 23
-#define TT_MAC_LANGID_LITHUANIAN 24
-#define TT_MAC_LANGID_POLISH 25
-#define TT_MAC_LANGID_HUNGARIAN 26
-#define TT_MAC_LANGID_ESTONIAN 27
-#define TT_MAC_LANGID_LETTISH 28
-#define TT_MAC_LANGID_SAAMISK 29
-#define TT_MAC_LANGID_FAEROESE 30
-#define TT_MAC_LANGID_FARSI 31
-#define TT_MAC_LANGID_RUSSIAN 32
-#define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33
-#define TT_MAC_LANGID_FLEMISH 34
-#define TT_MAC_LANGID_IRISH 35
-#define TT_MAC_LANGID_ALBANIAN 36
-#define TT_MAC_LANGID_ROMANIAN 37
-#define TT_MAC_LANGID_CZECH 38
-#define TT_MAC_LANGID_SLOVAK 39
-#define TT_MAC_LANGID_SLOVENIAN 40
-#define TT_MAC_LANGID_YIDDISH 41
-#define TT_MAC_LANGID_SERBIAN 42
-#define TT_MAC_LANGID_MACEDONIAN 43
-#define TT_MAC_LANGID_BULGARIAN 44
-#define TT_MAC_LANGID_UKRAINIAN 45
-#define TT_MAC_LANGID_BYELORUSSIAN 46
-#define TT_MAC_LANGID_UZBEK 47
-#define TT_MAC_LANGID_KAZAKH 48
-#define TT_MAC_LANGID_AZERBAIJANI 49
-#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49
-#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50
-#define TT_MAC_LANGID_ARMENIAN 51
-#define TT_MAC_LANGID_GEORGIAN 52
-#define TT_MAC_LANGID_MOLDAVIAN 53
-#define TT_MAC_LANGID_KIRGHIZ 54
-#define TT_MAC_LANGID_TAJIKI 55
-#define TT_MAC_LANGID_TURKMEN 56
-#define TT_MAC_LANGID_MONGOLIAN 57
-#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57
-#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58
-#define TT_MAC_LANGID_PASHTO 59
-#define TT_MAC_LANGID_KURDISH 60
-#define TT_MAC_LANGID_KASHMIRI 61
-#define TT_MAC_LANGID_SINDHI 62
-#define TT_MAC_LANGID_TIBETAN 63
-#define TT_MAC_LANGID_NEPALI 64
-#define TT_MAC_LANGID_SANSKRIT 65
-#define TT_MAC_LANGID_MARATHI 66
-#define TT_MAC_LANGID_BENGALI 67
-#define TT_MAC_LANGID_ASSAMESE 68
-#define TT_MAC_LANGID_GUJARATI 69
-#define TT_MAC_LANGID_PUNJABI 70
-#define TT_MAC_LANGID_ORIYA 71
-#define TT_MAC_LANGID_MALAYALAM 72
-#define TT_MAC_LANGID_KANNADA 73
-#define TT_MAC_LANGID_TAMIL 74
-#define TT_MAC_LANGID_TELUGU 75
-#define TT_MAC_LANGID_SINHALESE 76
-#define TT_MAC_LANGID_BURMESE 77
-#define TT_MAC_LANGID_KHMER 78
-#define TT_MAC_LANGID_LAO 79
-#define TT_MAC_LANGID_VIETNAMESE 80
-#define TT_MAC_LANGID_INDONESIAN 81
-#define TT_MAC_LANGID_TAGALOG 82
-#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83
-#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84
-#define TT_MAC_LANGID_AMHARIC 85
-#define TT_MAC_LANGID_TIGRINYA 86
-#define TT_MAC_LANGID_GALLA 87
-#define TT_MAC_LANGID_SOMALI 88
-#define TT_MAC_LANGID_SWAHILI 89
-#define TT_MAC_LANGID_RUANDA 90
-#define TT_MAC_LANGID_RUNDI 91
-#define TT_MAC_LANGID_CHEWA 92
-#define TT_MAC_LANGID_MALAGASY 93
-#define TT_MAC_LANGID_ESPERANTO 94
-#define TT_MAC_LANGID_WELSH 128
-#define TT_MAC_LANGID_BASQUE 129
-#define TT_MAC_LANGID_CATALAN 130
-#define TT_MAC_LANGID_LATIN 131
-#define TT_MAC_LANGID_QUECHUA 132
-#define TT_MAC_LANGID_GUARANI 133
-#define TT_MAC_LANGID_AYMARA 134
-#define TT_MAC_LANGID_TATAR 135
-#define TT_MAC_LANGID_UIGHUR 136
-#define TT_MAC_LANGID_DZONGKHA 137
-#define TT_MAC_LANGID_JAVANESE 138
-#define TT_MAC_LANGID_SUNDANESE 139
-
- /* The following codes are new as of 2000-03-10 */
-#define TT_MAC_LANGID_GALICIAN 140
-#define TT_MAC_LANGID_AFRIKAANS 141
-#define TT_MAC_LANGID_BRETON 142
-#define TT_MAC_LANGID_INUKTITUT 143
-#define TT_MAC_LANGID_SCOTTISH_GAELIC 144
-#define TT_MAC_LANGID_MANX_GAELIC 145
-#define TT_MAC_LANGID_IRISH_GAELIC 146
-#define TT_MAC_LANGID_TONGAN 147
-#define TT_MAC_LANGID_GREEK_POLYTONIC 148
-#define TT_MAC_LANGID_GREELANDIC 149
-#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150
-</pre>
-
-<p>Possible values of the language identifier field in the name records of the SFNT &lsquo;name&rsquo; table if the &lsquo;platform&rsquo; identifier code is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a>. These values are also used as return values for function <a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a>.</p>
-<p>The canonical source for Apple's IDs is</p>
-<p><a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html">https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html</a></p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_MS_LANGID_XXX">TT_MS_LANGID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401
-#define TT_MS_LANGID_ARABIC_IRAQ 0x0801
-#define TT_MS_LANGID_ARABIC_EGYPT 0x0C01
-#define TT_MS_LANGID_ARABIC_LIBYA 0x1001
-#define TT_MS_LANGID_ARABIC_ALGERIA 0x1401
-#define TT_MS_LANGID_ARABIC_MOROCCO 0x1801
-#define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01
-#define TT_MS_LANGID_ARABIC_OMAN 0x2001
-#define TT_MS_LANGID_ARABIC_YEMEN 0x2401
-#define TT_MS_LANGID_ARABIC_SYRIA 0x2801
-#define TT_MS_LANGID_ARABIC_JORDAN 0x2C01
-#define TT_MS_LANGID_ARABIC_LEBANON 0x3001
-#define TT_MS_LANGID_ARABIC_KUWAIT 0x3401
-#define TT_MS_LANGID_ARABIC_UAE 0x3801
-#define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01
-#define TT_MS_LANGID_ARABIC_QATAR 0x4001
-#define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402
-#define TT_MS_LANGID_CATALAN_CATALAN 0x0403
-#define TT_MS_LANGID_CHINESE_TAIWAN 0x0404
-#define TT_MS_LANGID_CHINESE_PRC 0x0804
-#define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04
-#define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004
-#define TT_MS_LANGID_CHINESE_MACAO 0x1404
-#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405
-#define TT_MS_LANGID_DANISH_DENMARK 0x0406
-#define TT_MS_LANGID_GERMAN_GERMANY 0x0407
-#define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807
-#define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07
-#define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407
-#define TT_MS_LANGID_GREEK_GREECE 0x0408
-#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409
-#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809
-#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09
-#define TT_MS_LANGID_ENGLISH_CANADA 0x1009
-#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409
-#define TT_MS_LANGID_ENGLISH_IRELAND 0x1809
-#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09
-#define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009
-#define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409
-#define TT_MS_LANGID_ENGLISH_BELIZE 0x2809
-#define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09
-#define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009
-#define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409
-#define TT_MS_LANGID_ENGLISH_INDIA 0x4009
-#define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409
-#define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809
-#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A
-#define TT_MS_LANGID_SPANISH_MEXICO 0x080A
-#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A
-#define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A
-#define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A
-#define TT_MS_LANGID_SPANISH_PANAMA 0x180A
-#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A
-#define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A
-#define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A
-#define TT_MS_LANGID_SPANISH_PERU 0x280A
-#define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A
-#define TT_MS_LANGID_SPANISH_ECUADOR 0x300A
-#define TT_MS_LANGID_SPANISH_CHILE 0x340A
-#define TT_MS_LANGID_SPANISH_URUGUAY 0x380A
-#define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A
-#define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A
-#define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A
-#define TT_MS_LANGID_SPANISH_HONDURAS 0x480A
-#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A
-#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A
-#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A
-#define TT_MS_LANGID_FINNISH_FINLAND 0x040B
-#define TT_MS_LANGID_FRENCH_FRANCE 0x040C
-#define TT_MS_LANGID_FRENCH_BELGIUM 0x080C
-#define TT_MS_LANGID_FRENCH_CANADA 0x0C0C
-#define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C
-#define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C
-#define TT_MS_LANGID_FRENCH_MONACO 0x180C
-#define TT_MS_LANGID_HEBREW_ISRAEL 0x040D
-#define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E
-#define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F
-#define TT_MS_LANGID_ITALIAN_ITALY 0x0410
-#define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810
-#define TT_MS_LANGID_JAPANESE_JAPAN 0x0411
-#define TT_MS_LANGID_KOREAN_KOREA 0x0412
-#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413
-#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814
-#define TT_MS_LANGID_POLISH_POLAND 0x0415
-#define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416
-#define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816
-#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417
-#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
-#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
-#define TT_MS_LANGID_CROATIAN_CROATIA 0x041A
-#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A
-#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A
-#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A
-#define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B
-#define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C
-#define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D
-#define TT_MS_LANGID_SWEDISH_FINLAND 0x081D
-#define TT_MS_LANGID_THAI_THAILAND 0x041E
-#define TT_MS_LANGID_TURKISH_TURKEY 0x041F
-#define TT_MS_LANGID_URDU_PAKISTAN 0x0420
-#define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421
-#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422
-#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423
-#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424
-#define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425
-#define TT_MS_LANGID_LATVIAN_LATVIA 0x0426
-#define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427
-#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428
-#define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A
-#define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C
-#define TT_MS_LANGID_BASQUE_BASQUE 0x042D
-#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E
-#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E
-#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F
-#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432
-#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434
-#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435
-#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436
-#define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437
-#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438
-#define TT_MS_LANGID_HINDI_INDIA 0x0439
-#define TT_MS_LANGID_MALTESE_MALTA 0x043A
-#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B
-#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B
-#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B
-#define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B
-#define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B
-#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B
-#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B
-#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B
-#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B
-#define TT_MS_LANGID_IRISH_IRELAND 0x083C
-#define TT_MS_LANGID_MALAY_MALAYSIA 0x043E
-#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E
-#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F
-#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440
-#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441
-#define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843
-#define TT_MS_LANGID_TATAR_RUSSIA 0x0444
-#define TT_MS_LANGID_BENGALI_INDIA 0x0445
-#define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845
-#define TT_MS_LANGID_PUNJABI_INDIA 0x0446
-#define TT_MS_LANGID_GUJARATI_INDIA 0x0447
-#define TT_MS_LANGID_ODIA_INDIA 0x0448
-#define TT_MS_LANGID_TAMIL_INDIA 0x0449
-#define TT_MS_LANGID_TELUGU_INDIA 0x044A
-#define TT_MS_LANGID_KANNADA_INDIA 0x044B
-#define TT_MS_LANGID_MALAYALAM_INDIA 0x044C
-#define TT_MS_LANGID_ASSAMESE_INDIA 0x044D
-#define TT_MS_LANGID_MARATHI_INDIA 0x044E
-#define TT_MS_LANGID_SANSKRIT_INDIA 0x044F
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
-#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850
-#define TT_MS_LANGID_TIBETAN_PRC 0x0451
-#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452
-#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453
-#define TT_MS_LANGID_LAO_LAOS 0x0454
-#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456
-#define TT_MS_LANGID_KONKANI_INDIA 0x0457
-#define TT_MS_LANGID_SYRIAC_SYRIA 0x045A
-#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B
-#define TT_MS_LANGID_INUKTITUT_CANADA 0x045D
-#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D
-#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E
-#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F
-#define TT_MS_LANGID_NEPALI_NEPAL 0x0461
-#define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462
-#define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463
-#define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464
-#define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465
-#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468
-#define TT_MS_LANGID_YORUBA_NIGERIA 0x046A
-#define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B
-#define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B
-#define TT_MS_LANGID_QUECHUA_PERU 0x0C6B
-#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C
-#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D
-#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E
-#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F
-#define TT_MS_LANGID_IGBO_NIGERIA 0x0470
-#define TT_MS_LANGID_YI_PRC 0x0478
-#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A
-#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C
-#define TT_MS_LANGID_BRETON_FRANCE 0x047E
-#define TT_MS_LANGID_UIGHUR_PRC 0x0480
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
-#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482
-#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483
-#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484
-#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485
-#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486
-#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487
-#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488
-#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C
-</pre>
-
-<p>Possible values of the language identifier field in the name records of the SFNT &lsquo;name&rsquo; table if the &lsquo;platform&rsquo; identifier code is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a>. These values are also used as return values for function <a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a>.</p>
-<p>The canonical source for Microsoft's IDs is</p>
-<p><a href="https://www.microsoft.com/globaldev/reference/lcid-all.mspx">https://www.microsoft.com/globaldev/reference/lcid-all.mspx</a> ,</p>
-<p>however, we only provide macros for language identifiers present in the OpenType specification: Microsoft has abandoned the concept of LCIDs (language code identifiers), and format&nbsp;1 of the &lsquo;name&rsquo; table provides a better mechanism for languages not covered here.</p>
-<p>More legacy values not listed in the reference can be found in the <a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a> header file.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_NAME_ID_XXX">TT_NAME_ID_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
-#define TT_NAME_ID_COPYRIGHT 0
-#define TT_NAME_ID_FONT_FAMILY 1
-#define TT_NAME_ID_FONT_SUBFAMILY 2
-#define TT_NAME_ID_UNIQUE_ID 3
-#define TT_NAME_ID_FULL_NAME 4
-#define TT_NAME_ID_VERSION_STRING 5
-#define TT_NAME_ID_PS_NAME 6
-#define TT_NAME_ID_TRADEMARK 7
-
- /* the following values are from the OpenType spec */
-#define TT_NAME_ID_MANUFACTURER 8
-#define TT_NAME_ID_DESIGNER 9
-#define TT_NAME_ID_DESCRIPTION 10
-#define TT_NAME_ID_VENDOR_URL 11
-#define TT_NAME_ID_DESIGNER_URL 12
-#define TT_NAME_ID_LICENSE 13
-#define TT_NAME_ID_LICENSE_URL 14
- /* number 15 is reserved */
-#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16
-#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17
-#define TT_NAME_ID_MAC_FULL_NAME 18
-
- /* The following code is new as of 2000-01-21 */
-#define TT_NAME_ID_SAMPLE_TEXT 19
-
- /* This is new in OpenType 1.3 */
-#define TT_NAME_ID_CID_FINDFONT_NAME 20
-
- /* This is new in OpenType 1.5 */
-#define TT_NAME_ID_WWS_FAMILY 21
-#define TT_NAME_ID_WWS_SUBFAMILY 22
-
- /* This is new in OpenType 1.7 */
-#define TT_NAME_ID_LIGHT_BACKGROUND 23
-#define TT_NAME_ID_DARK_BACKGROUND 24
-
- /* This is new in OpenType 1.8 */
-#define TT_NAME_ID_VARIATIONS_PREFIX 25
-
- /* these two values are deprecated */
-#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY
-#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
-</pre>
-
-<p>Possible values of the &lsquo;name&rsquo; identifier field in the name records of an SFNT &lsquo;name&rsquo; table. These values are platform independent.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="TT_UCR_XXX">TT_UCR_XXX</h3>
-<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
-<pre>
- /* ulUnicodeRange1 */
- /* --------------- */
-
- /* Bit 0 Basic Latin */
-#define TT_UCR_BASIC_LATIN (1L &lt;&lt; 0) /* U+0020-U+007E */
- /* Bit 1 C1 Controls and Latin-1 Supplement */
-#define TT_UCR_LATIN1_SUPPLEMENT (1L &lt;&lt; 1) /* U+0080-U+00FF */
- /* Bit 2 Latin Extended-A */
-#define TT_UCR_LATIN_EXTENDED_A (1L &lt;&lt; 2) /* U+0100-U+017F */
- /* Bit 3 Latin Extended-B */
-#define TT_UCR_LATIN_EXTENDED_B (1L &lt;&lt; 3) /* U+0180-U+024F */
- /* Bit 4 IPA Extensions */
- /* Phonetic Extensions */
- /* Phonetic Extensions Supplement */
-#define TT_UCR_IPA_EXTENSIONS (1L &lt;&lt; 4) /* U+0250-U+02AF */
- /* U+1D00-U+1D7F */
- /* U+1D80-U+1DBF */
- /* Bit 5 Spacing Modifier Letters */
- /* Modifier Tone Letters */
-#define TT_UCR_SPACING_MODIFIER (1L &lt;&lt; 5) /* U+02B0-U+02FF */
- /* U+A700-U+A71F */
- /* Bit 6 Combining Diacritical Marks */
- /* Combining Diacritical Marks Supplement */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L &lt;&lt; 6) /* U+0300-U+036F */
- /* U+1DC0-U+1DFF */
- /* Bit 7 Greek and Coptic */
-#define TT_UCR_GREEK (1L &lt;&lt; 7) /* U+0370-U+03FF */
- /* Bit 8 Coptic */
-#define TT_UCR_COPTIC (1L &lt;&lt; 8) /* U+2C80-U+2CFF */
- /* Bit 9 Cyrillic */
- /* Cyrillic Supplement */
- /* Cyrillic Extended-A */
- /* Cyrillic Extended-B */
-#define TT_UCR_CYRILLIC (1L &lt;&lt; 9) /* U+0400-U+04FF */
- /* U+0500-U+052F */
- /* U+2DE0-U+2DFF */
- /* U+A640-U+A69F */
- /* Bit 10 Armenian */
-#define TT_UCR_ARMENIAN (1L &lt;&lt; 10) /* U+0530-U+058F */
- /* Bit 11 Hebrew */
-#define TT_UCR_HEBREW (1L &lt;&lt; 11) /* U+0590-U+05FF */
- /* Bit 12 Vai */
-#define TT_UCR_VAI (1L &lt;&lt; 12) /* U+A500-U+A63F */
- /* Bit 13 Arabic */
- /* Arabic Supplement */
-#define TT_UCR_ARABIC (1L &lt;&lt; 13) /* U+0600-U+06FF */
- /* U+0750-U+077F */
- /* Bit 14 NKo */
-#define TT_UCR_NKO (1L &lt;&lt; 14) /* U+07C0-U+07FF */
- /* Bit 15 Devanagari */
-#define TT_UCR_DEVANAGARI (1L &lt;&lt; 15) /* U+0900-U+097F */
- /* Bit 16 Bengali */
-#define TT_UCR_BENGALI (1L &lt;&lt; 16) /* U+0980-U+09FF */
- /* Bit 17 Gurmukhi */
-#define TT_UCR_GURMUKHI (1L &lt;&lt; 17) /* U+0A00-U+0A7F */
- /* Bit 18 Gujarati */
-#define TT_UCR_GUJARATI (1L &lt;&lt; 18) /* U+0A80-U+0AFF */
- /* Bit 19 Oriya */
-#define TT_UCR_ORIYA (1L &lt;&lt; 19) /* U+0B00-U+0B7F */
- /* Bit 20 Tamil */
-#define TT_UCR_TAMIL (1L &lt;&lt; 20) /* U+0B80-U+0BFF */
- /* Bit 21 Telugu */
-#define TT_UCR_TELUGU (1L &lt;&lt; 21) /* U+0C00-U+0C7F */
- /* Bit 22 Kannada */
-#define TT_UCR_KANNADA (1L &lt;&lt; 22) /* U+0C80-U+0CFF */
- /* Bit 23 Malayalam */
-#define TT_UCR_MALAYALAM (1L &lt;&lt; 23) /* U+0D00-U+0D7F */
- /* Bit 24 Thai */
-#define TT_UCR_THAI (1L &lt;&lt; 24) /* U+0E00-U+0E7F */
- /* Bit 25 Lao */
-#define TT_UCR_LAO (1L &lt;&lt; 25) /* U+0E80-U+0EFF */
- /* Bit 26 Georgian */
- /* Georgian Supplement */
-#define TT_UCR_GEORGIAN (1L &lt;&lt; 26) /* U+10A0-U+10FF */
- /* U+2D00-U+2D2F */
- /* Bit 27 Balinese */
-#define TT_UCR_BALINESE (1L &lt;&lt; 27) /* U+1B00-U+1B7F */
- /* Bit 28 Hangul Jamo */
-#define TT_UCR_HANGUL_JAMO (1L &lt;&lt; 28) /* U+1100-U+11FF */
- /* Bit 29 Latin Extended Additional */
- /* Latin Extended-C */
- /* Latin Extended-D */
-#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L &lt;&lt; 29) /* U+1E00-U+1EFF */
- /* U+2C60-U+2C7F */
- /* U+A720-U+A7FF */
- /* Bit 30 Greek Extended */
-#define TT_UCR_GREEK_EXTENDED (1L &lt;&lt; 30) /* U+1F00-U+1FFF */
- /* Bit 31 General Punctuation */
- /* Supplemental Punctuation */
-#define TT_UCR_GENERAL_PUNCTUATION (1L &lt;&lt; 31) /* U+2000-U+206F */
- /* U+2E00-U+2E7F */
-
- /* ulUnicodeRange2 */
- /* --------------- */
-
- /* Bit 32 Superscripts And Subscripts */
-#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L &lt;&lt; 0) /* U+2070-U+209F */
- /* Bit 33 Currency Symbols */
-#define TT_UCR_CURRENCY_SYMBOLS (1L &lt;&lt; 1) /* U+20A0-U+20CF */
- /* Bit 34 Combining Diacritical Marks For Symbols */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
- (1L &lt;&lt; 2) /* U+20D0-U+20FF */
- /* Bit 35 Letterlike Symbols */
-#define TT_UCR_LETTERLIKE_SYMBOLS (1L &lt;&lt; 3) /* U+2100-U+214F */
- /* Bit 36 Number Forms */
-#define TT_UCR_NUMBER_FORMS (1L &lt;&lt; 4) /* U+2150-U+218F */
- /* Bit 37 Arrows */
- /* Supplemental Arrows-A */
- /* Supplemental Arrows-B */
- /* Miscellaneous Symbols and Arrows */
-#define TT_UCR_ARROWS (1L &lt;&lt; 5) /* U+2190-U+21FF */
- /* U+27F0-U+27FF */
- /* U+2900-U+297F */
- /* U+2B00-U+2BFF */
- /* Bit 38 Mathematical Operators */
- /* Supplemental Mathematical Operators */
- /* Miscellaneous Mathematical Symbols-A */
- /* Miscellaneous Mathematical Symbols-B */
-#define TT_UCR_MATHEMATICAL_OPERATORS (1L &lt;&lt; 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 &lt;&lt; 7) /* U+2300-U+23FF */
- /* Bit 40 Control Pictures */
-#define TT_UCR_CONTROL_PICTURES (1L &lt;&lt; 8) /* U+2400-U+243F */
- /* Bit 41 Optical Character Recognition */
-#define TT_UCR_OCR (1L &lt;&lt; 9) /* U+2440-U+245F */
- /* Bit 42 Enclosed Alphanumerics */
-#define TT_UCR_ENCLOSED_ALPHANUMERICS (1L &lt;&lt; 10) /* U+2460-U+24FF */
- /* Bit 43 Box Drawing */
-#define TT_UCR_BOX_DRAWING (1L &lt;&lt; 11) /* U+2500-U+257F */
- /* Bit 44 Block Elements */
-#define TT_UCR_BLOCK_ELEMENTS (1L &lt;&lt; 12) /* U+2580-U+259F */
- /* Bit 45 Geometric Shapes */
-#define TT_UCR_GEOMETRIC_SHAPES (1L &lt;&lt; 13) /* U+25A0-U+25FF */
- /* Bit 46 Miscellaneous Symbols */
-#define TT_UCR_MISCELLANEOUS_SYMBOLS (1L &lt;&lt; 14) /* U+2600-U+26FF */
- /* Bit 47 Dingbats */
-#define TT_UCR_DINGBATS (1L &lt;&lt; 15) /* U+2700-U+27BF */
- /* Bit 48 CJK Symbols and Punctuation */
-#define TT_UCR_CJK_SYMBOLS (1L &lt;&lt; 16) /* U+3000-U+303F */
- /* Bit 49 Hiragana */
-#define TT_UCR_HIRAGANA (1L &lt;&lt; 17) /* U+3040-U+309F */
- /* Bit 50 Katakana */
- /* Katakana Phonetic Extensions */
-#define TT_UCR_KATAKANA (1L &lt;&lt; 18) /* U+30A0-U+30FF */
- /* U+31F0-U+31FF */
- /* Bit 51 Bopomofo */
- /* Bopomofo Extended */
-#define TT_UCR_BOPOMOFO (1L &lt;&lt; 19) /* U+3100-U+312F */
- /* U+31A0-U+31BF */
- /* Bit 52 Hangul Compatibility Jamo */
-#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L &lt;&lt; 20) /* U+3130-U+318F */
- /* Bit 53 Phags-Pa */
-#define TT_UCR_CJK_MISC (1L &lt;&lt; 21) /* U+A840-U+A87F */
-#define TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */
-#define TT_UCR_PHAGSPA
- /* Bit 54 Enclosed CJK Letters and Months */
-#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L &lt;&lt; 22) /* U+3200-U+32FF */
- /* Bit 55 CJK Compatibility */
-#define TT_UCR_CJK_COMPATIBILITY (1L &lt;&lt; 23) /* U+3300-U+33FF */
- /* Bit 56 Hangul Syllables */
-#define TT_UCR_HANGUL (1L &lt;&lt; 24) /* U+AC00-U+D7A3 */
- /* Bit 57 High Surrogates */
- /* High Private Use Surrogates */
- /* Low Surrogates */
-
- /* According to OpenType specs v.1.3+, */
- /* setting bit 57 implies that there is */
- /* at least one codepoint beyond the */
- /* Basic Multilingual Plane that is */
- /* supported by this font. So it really */
- /* means &gt;= U+10000. */
-#define TT_UCR_SURROGATES (1L &lt;&lt; 25) /* U+D800-U+DB7F */
- /* U+DB80-U+DBFF */
- /* U+DC00-U+DFFF */
-#define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES
- /* Bit 58 Phoenician */
-#define TT_UCR_PHOENICIAN (1L &lt;&lt; 26) /*U+10900-U+1091F*/
- /* Bit 59 CJK Unified Ideographs */
- /* CJK Radicals Supplement */
- /* Kangxi Radicals */
- /* Ideographic Description Characters */
- /* CJK Unified Ideographs Extension A */
- /* CJK Unified Ideographs Extension B */
- /* Kanbun */
-#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L &lt;&lt; 27) /* U+4E00-U+9FFF */
- /* U+2E80-U+2EFF */
- /* U+2F00-U+2FDF */
- /* U+2FF0-U+2FFF */
- /* U+3400-U+4DB5 */
- /*U+20000-U+2A6DF*/
- /* U+3190-U+319F */
- /* Bit 60 Private Use */
-#define TT_UCR_PRIVATE_USE (1L &lt;&lt; 28) /* U+E000-U+F8FF */
- /* Bit 61 CJK Strokes */
- /* CJK Compatibility Ideographs */
- /* CJK Compatibility Ideographs Supplement */
-#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L &lt;&lt; 29) /* U+31C0-U+31EF */
- /* U+F900-U+FAFF */
- /*U+2F800-U+2FA1F*/
- /* Bit 62 Alphabetic Presentation Forms */
-#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L &lt;&lt; 30) /* U+FB00-U+FB4F */
- /* Bit 63 Arabic Presentation Forms-A */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L &lt;&lt; 31) /* U+FB50-U+FDFF */
-
- /* ulUnicodeRange3 */
- /* --------------- */
-
- /* Bit 64 Combining Half Marks */
-#define TT_UCR_COMBINING_HALF_MARKS (1L &lt;&lt; 0) /* U+FE20-U+FE2F */
- /* Bit 65 Vertical forms */
- /* CJK Compatibility Forms */
-#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L &lt;&lt; 1) /* U+FE10-U+FE1F */
- /* U+FE30-U+FE4F */
- /* Bit 66 Small Form Variants */
-#define TT_UCR_SMALL_FORM_VARIANTS (1L &lt;&lt; 2) /* U+FE50-U+FE6F */
- /* Bit 67 Arabic Presentation Forms-B */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L &lt;&lt; 3) /* U+FE70-U+FEFE */
- /* Bit 68 Halfwidth and Fullwidth Forms */
-#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L &lt;&lt; 4) /* U+FF00-U+FFEF */
- /* Bit 69 Specials */
-#define TT_UCR_SPECIALS (1L &lt;&lt; 5) /* U+FFF0-U+FFFD */
- /* Bit 70 Tibetan */
-#define TT_UCR_TIBETAN (1L &lt;&lt; 6) /* U+0F00-U+0FFF */
- /* Bit 71 Syriac */
-#define TT_UCR_SYRIAC (1L &lt;&lt; 7) /* U+0700-U+074F */
- /* Bit 72 Thaana */
-#define TT_UCR_THAANA (1L &lt;&lt; 8) /* U+0780-U+07BF */
- /* Bit 73 Sinhala */
-#define TT_UCR_SINHALA (1L &lt;&lt; 9) /* U+0D80-U+0DFF */
- /* Bit 74 Myanmar */
-#define TT_UCR_MYANMAR (1L &lt;&lt; 10) /* U+1000-U+109F */
- /* Bit 75 Ethiopic */
- /* Ethiopic Supplement */
- /* Ethiopic Extended */
-#define TT_UCR_ETHIOPIC (1L &lt;&lt; 11) /* U+1200-U+137F */
- /* U+1380-U+139F */
- /* U+2D80-U+2DDF */
- /* Bit 76 Cherokee */
-#define TT_UCR_CHEROKEE (1L &lt;&lt; 12) /* U+13A0-U+13FF */
- /* Bit 77 Unified Canadian Aboriginal Syllabics */
-#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L &lt;&lt; 13) /* U+1400-U+167F */
- /* Bit 78 Ogham */
-#define TT_UCR_OGHAM (1L &lt;&lt; 14) /* U+1680-U+169F */
- /* Bit 79 Runic */
-#define TT_UCR_RUNIC (1L &lt;&lt; 15) /* U+16A0-U+16FF */
- /* Bit 80 Khmer */
- /* Khmer Symbols */
-#define TT_UCR_KHMER (1L &lt;&lt; 16) /* U+1780-U+17FF */
- /* U+19E0-U+19FF */
- /* Bit 81 Mongolian */
-#define TT_UCR_MONGOLIAN (1L &lt;&lt; 17) /* U+1800-U+18AF */
- /* Bit 82 Braille Patterns */
-#define TT_UCR_BRAILLE (1L &lt;&lt; 18) /* U+2800-U+28FF */
- /* Bit 83 Yi Syllables */
- /* Yi Radicals */
-#define TT_UCR_YI (1L &lt;&lt; 19) /* U+A000-U+A48F */
- /* U+A490-U+A4CF */
- /* Bit 84 Tagalog */
- /* Hanunoo */
- /* Buhid */
- /* Tagbanwa */
-#define TT_UCR_PHILIPPINE (1L &lt;&lt; 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 &lt;&lt; 21) /*U+10300-U+1032F*/
- /* Bit 86 Gothic */
-#define TT_UCR_GOTHIC (1L &lt;&lt; 22) /*U+10330-U+1034F*/
- /* Bit 87 Deseret */
-#define TT_UCR_DESERET (1L &lt;&lt; 23) /*U+10400-U+1044F*/
- /* Bit 88 Byzantine Musical Symbols */
- /* Musical Symbols */
- /* Ancient Greek Musical Notation */
-#define TT_UCR_MUSICAL_SYMBOLS (1L &lt;&lt; 24) /*U+1D000-U+1D0FF*/
- /*U+1D100-U+1D1FF*/
- /*U+1D200-U+1D24F*/
- /* Bit 89 Mathematical Alphanumeric Symbols */
-#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L &lt;&lt; 25) /*U+1D400-U+1D7FF*/
- /* Bit 90 Private Use (plane 15) */
- /* Private Use (plane 16) */
-#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L &lt;&lt; 26) /*U+F0000-U+FFFFD*/
- /*U+100000-U+10FFFD*/
- /* Bit 91 Variation Selectors */
- /* Variation Selectors Supplement */
-#define TT_UCR_VARIATION_SELECTORS (1L &lt;&lt; 27) /* U+FE00-U+FE0F */
- /*U+E0100-U+E01EF*/
- /* Bit 92 Tags */
-#define TT_UCR_TAGS (1L &lt;&lt; 28) /*U+E0000-U+E007F*/
- /* Bit 93 Limbu */
-#define TT_UCR_LIMBU (1L &lt;&lt; 29) /* U+1900-U+194F */
- /* Bit 94 Tai Le */
-#define TT_UCR_TAI_LE (1L &lt;&lt; 30) /* U+1950-U+197F */
- /* Bit 95 New Tai Lue */
-#define TT_UCR_NEW_TAI_LUE (1L &lt;&lt; 31) /* U+1980-U+19DF */
-
- /* ulUnicodeRange4 */
- /* --------------- */
-
- /* Bit 96 Buginese */
-#define TT_UCR_BUGINESE (1L &lt;&lt; 0) /* U+1A00-U+1A1F */
- /* Bit 97 Glagolitic */
-#define TT_UCR_GLAGOLITIC (1L &lt;&lt; 1) /* U+2C00-U+2C5F */
- /* Bit 98 Tifinagh */
-#define TT_UCR_TIFINAGH (1L &lt;&lt; 2) /* U+2D30-U+2D7F */
- /* Bit 99 Yijing Hexagram Symbols */
-#define TT_UCR_YIJING (1L &lt;&lt; 3) /* U+4DC0-U+4DFF */
- /* Bit 100 Syloti Nagri */
-#define TT_UCR_SYLOTI_NAGRI (1L &lt;&lt; 4) /* U+A800-U+A82F */
- /* Bit 101 Linear B Syllabary */
- /* Linear B Ideograms */
- /* Aegean Numbers */
-#define TT_UCR_LINEAR_B (1L &lt;&lt; 5) /*U+10000-U+1007F*/
- /*U+10080-U+100FF*/
- /*U+10100-U+1013F*/
- /* Bit 102 Ancient Greek Numbers */
-#define TT_UCR_ANCIENT_GREEK_NUMBERS (1L &lt;&lt; 6) /*U+10140-U+1018F*/
- /* Bit 103 Ugaritic */
-#define TT_UCR_UGARITIC (1L &lt;&lt; 7) /*U+10380-U+1039F*/
- /* Bit 104 Old Persian */
-#define TT_UCR_OLD_PERSIAN (1L &lt;&lt; 8) /*U+103A0-U+103DF*/
- /* Bit 105 Shavian */
-#define TT_UCR_SHAVIAN (1L &lt;&lt; 9) /*U+10450-U+1047F*/
- /* Bit 106 Osmanya */
-#define TT_UCR_OSMANYA (1L &lt;&lt; 10) /*U+10480-U+104AF*/
- /* Bit 107 Cypriot Syllabary */
-#define TT_UCR_CYPRIOT_SYLLABARY (1L &lt;&lt; 11) /*U+10800-U+1083F*/
- /* Bit 108 Kharoshthi */
-#define TT_UCR_KHAROSHTHI (1L &lt;&lt; 12) /*U+10A00-U+10A5F*/
- /* Bit 109 Tai Xuan Jing Symbols */
-#define TT_UCR_TAI_XUAN_JING (1L &lt;&lt; 13) /*U+1D300-U+1D35F*/
- /* Bit 110 Cuneiform */
- /* Cuneiform Numbers and Punctuation */
-#define TT_UCR_CUNEIFORM (1L &lt;&lt; 14) /*U+12000-U+123FF*/
- /*U+12400-U+1247F*/
- /* Bit 111 Counting Rod Numerals */
-#define TT_UCR_COUNTING_ROD_NUMERALS (1L &lt;&lt; 15) /*U+1D360-U+1D37F*/
- /* Bit 112 Sundanese */
-#define TT_UCR_SUNDANESE (1L &lt;&lt; 16) /* U+1B80-U+1BBF */
- /* Bit 113 Lepcha */
-#define TT_UCR_LEPCHA (1L &lt;&lt; 17) /* U+1C00-U+1C4F */
- /* Bit 114 Ol Chiki */
-#define TT_UCR_OL_CHIKI (1L &lt;&lt; 18) /* U+1C50-U+1C7F */
- /* Bit 115 Saurashtra */
-#define TT_UCR_SAURASHTRA (1L &lt;&lt; 19) /* U+A880-U+A8DF */
- /* Bit 116 Kayah Li */
-#define TT_UCR_KAYAH_LI (1L &lt;&lt; 20) /* U+A900-U+A92F */
- /* Bit 117 Rejang */
-#define TT_UCR_REJANG (1L &lt;&lt; 21) /* U+A930-U+A95F */
- /* Bit 118 Cham */
-#define TT_UCR_CHAM (1L &lt;&lt; 22) /* U+AA00-U+AA5F */
- /* Bit 119 Ancient Symbols */
-#define TT_UCR_ANCIENT_SYMBOLS (1L &lt;&lt; 23) /*U+10190-U+101CF*/
- /* Bit 120 Phaistos Disc */
-#define TT_UCR_PHAISTOS_DISC (1L &lt;&lt; 24) /*U+101D0-U+101FF*/
- /* Bit 121 Carian */
- /* Lycian */
- /* Lydian */
-#define TT_UCR_OLD_ANATOLIAN (1L &lt;&lt; 25) /*U+102A0-U+102DF*/
- /*U+10280-U+1029F*/
- /*U+10920-U+1093F*/
- /* Bit 122 Domino Tiles */
- /* Mahjong Tiles */
-#define TT_UCR_GAME_TILES (1L &lt;&lt; 26) /*U+1F030-U+1F09F*/
- /*U+1F000-U+1F02F*/
- /* Bit 123-127 Reserved for process-internal usage */
-</pre>
-
-<p>Possible bit mask values for the &lsquo;ulUnicodeRangeX&rsquo; fields in an SFNT &lsquo;OS/2&rsquo; table.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-tt_driver.html b/freetype/docs/reference/ft2-tt_driver.html
deleted file mode 100644
index cc8008dd..00000000
--- a/freetype/docs/reference/ft2-tt_driver.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="tt_driver">The TrueType driver</h1>
-
-<p>While FreeType's TrueType driver doesn't expose API functions by itself, it is possible to control its behaviour with <a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a> and <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a>. The following lists the available properties together with the necessary macros and structures.</p>
-<p>The TrueType driver's module name is &lsquo;truetype&rsquo;.</p>
-<p>A single property <a href="ft2-properties.html#interpreter-version">interpreter-version</a> is available, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
-<p>We start with a list of definitions, kindly provided by Greg Hitchcock.</p>
-<p><i>Bi-Level</i> <i>Rendering</i></p>
-<p>Monochromatic rendering, exclusively used in the early days of TrueType by both Apple and Microsoft. Microsoft's GDI interface supported hinting of the right-side bearing point, such that the advance width could be non-linear. Most often this was done to achieve some level of glyph symmetry. To enable reasonable performance (e.g., not having to run hinting on all glyphs just to get the widths) there was a bit in the head table indicating if the side bearing was hinted, and additional tables, &lsquo;hdmx&rsquo; and &lsquo;LTSH&rsquo;, to cache hinting widths across multiple sizes and device aspect ratios.</p>
-<p><i>Font</i> <i>Smoothing</i></p>
-<p>Microsoft's GDI implementation of anti-aliasing. Not traditional anti-aliasing as the outlines were hinted before the sampling. The widths matched the bi-level rendering.</p>
-<p><i>ClearType</i> <i>Rendering</i></p>
-<p>Technique that uses physical subpixels to improve rendering on LCD (and other) displays. Because of the higher resolution, many methods of improving symmetry in glyphs through hinting the right-side bearing were no longer necessary. This lead to what GDI calls &lsquo;natural widths&rsquo; ClearType, see <a href="http://www.beatstamm.com/typography/RTRCh4.htm#Sec21">http://www.beatstamm.com/typography/RTRCh4.htm#Sec21</a>. Since hinting has extra resolution, most non-linearity went away, but it is still possible for hints to change the advance widths in this mode.</p>
-<p><i>ClearType</i> <i>Compatible</i> <i>Widths</i></p>
-<p>One of the earliest challenges with ClearType was allowing the implementation in GDI to be selected without requiring all UI and documents to reflow. To address this, a compatible method of rendering ClearType was added where the font hints are executed once to determine the width in bi-level rendering, and then re-run in ClearType, with the difference in widths being absorbed in the font hints for ClearType (mostly in the white space of hints); see <a href="http://www.beatstamm.com/typography/RTRCh4.htm#Sec20">http://www.beatstamm.com/typography/RTRCh4.htm#Sec20</a>. Somewhat by definition, compatible width ClearType allows for non-linear widths, but only when the bi-level version has non-linear widths.</p>
-<p><i>ClearType</i> <i>Subpixel</i> <i>Positioning</i></p>
-<p>One of the nice benefits of ClearType is the ability to more crisply display fractional widths; unfortunately, the GDI model of integer bitmaps did not support this. However, the WPF and Direct Write frameworks do support fractional widths. DWrite calls this &lsquo;natural mode&rsquo;, not to be confused with GDI's &lsquo;natural widths&rsquo;. Subpixel positioning, in the current implementation of Direct Write, unfortunately does not support hinted advance widths, see <a href="http://www.beatstamm.com/typography/RTRCh4.htm#Sec22">http://www.beatstamm.com/typography/RTRCh4.htm#Sec22</a>. Note that the TrueType interpreter fully allows the advance width to be adjusted in this mode, just the DWrite client will ignore those changes.</p>
-<p><i>ClearType</i> <i>Backward</i> <i>Compatibility</i></p>
-<p>This is a set of exceptions made in the TrueType interpreter to minimize hinting techniques that were problematic with the extra resolution of ClearType; see <a href="http://www.beatstamm.com/typography/RTRCh4.htm#Sec1">http://www.beatstamm.com/typography/RTRCh4.htm#Sec1</a> and <a href="https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx">https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx</a>. This technique is not to be confused with ClearType compatible widths. ClearType backward compatibility has no direct impact on changing advance widths, but there might be an indirect impact on disabling some deltas. This could be worked around in backward compatibility mode.</p>
-<p><i>Native</i> <i>ClearType</i> <i>Mode</i></p>
-<p>(Not to be confused with &lsquo;natural widths&rsquo;.) This mode removes all the exceptions in the TrueType interpreter when running with ClearType. Any issues on widths would still apply, though.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-type1_tables.html b/freetype/docs/reference/ft2-type1_tables.html
deleted file mode 100644
index b5c9c418..00000000
--- a/freetype/docs/reference/ft2-type1_tables.html
+++ /dev/null
@@ -1,867 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="type1_tables">Type 1 Tables</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#PS_FontInfoRec">PS_FontInfoRec</a></td><td><a href="#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="#T1_EncodingType">T1_EncodingType</a></td></tr>
-<tr><td><a href="#PS_FontInfo">PS_FontInfo</a></td><td>&nbsp;</td><td><a href="#PS_Dict_Keys">PS_Dict_Keys</a></td></tr>
-<tr><td><a href="#PS_PrivateRec">PS_PrivateRec</a></td><td><a href="#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#PS_Private">PS_Private</a></td><td><a href="#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td><td><a href="#T1_FontInfo">T1_FontInfo</a></td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td><td><a href="#T1_Private">T1_Private</a></td></tr>
-<tr><td><a href="#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="#FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</a></td><td><a href="#CID_FontDict">CID_FontDict</a></td></tr>
-<tr><td><a href="#CID_FaceDict">CID_FaceDict</a></td><td>&nbsp;</td><td><a href="#CID_Info">CID_Info</a></td></tr>
-<tr><td><a href="#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td><a href="#T1_Blend_Flags">T1_Blend_Flags</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats.</p>
-
-<div class="section">
-<h3 id="PS_FontInfoRec">PS_FontInfoRec</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="PS_FontInfo">PS_FontInfo</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_* <b>PS_FontInfo</b>;
-</pre>
-
-<p>A handle to a <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="PS_PrivateRec">PS_PrivateRec</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="PS_Private">PS_Private</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_* <b>PS_Private</b>;
-</pre>
-
-<p>A handle to a <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_FaceDictRec">CID_FaceDictRec</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<p>A structure used to represent data in a CID top-level dictionary.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_FaceDict">CID_FaceDict</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_* <b>CID_FaceDict</b>;
-</pre>
-
-<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_FaceInfoRec">CID_FaceInfoRec</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<p>A structure used to represent CID Face information.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_FaceInfo">CID_FaceInfo</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_* <b>CID_FaceInfo</b>;
-</pre>
-
-<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>face handle</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Boolean. True if glyph names are reliable.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<p>Retrieve the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure corresponding to a given PostScript font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>PostScript face handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="afont_info">afont_info</td><td class="desc">
-<p>Output font info structure pointer.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>String pointers within the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure are owned by the face and don't need to be freed by the caller. Missing entries in the font's FontInfo dictionary are represented by NULL pointers.</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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<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>
-
-<p>Retrieve the <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure corresponding to a given PostScript font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>PostScript face handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="afont_private">afont_private</td><td class="desc">
-<p>Output private dictionary structure pointer.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>The string pointers within the <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> 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 returns the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
- <b>FT_Get_PS_Font_Value</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-type1_tables.html#PS_Dict_Keys">PS_Dict_Keys</a> key,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> idx,
- <span class="keyword">void</span> *value,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> value_len );
-</pre>
-
-<p>Retrieve the value for the supplied key from a PostScript font.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>PostScript face handle.</p>
-</td></tr>
-<tr><td class="val" id="key">key</td><td class="desc">
-<p>An enumeration value representing the dictionary key to retrieve.</p>
-</td></tr>
-<tr><td class="val" id="idx">idx</td><td class="desc">
-<p>For array values, this specifies the index to be returned.</p>
-</td></tr>
-<tr><td class="val" id="value">value</td><td class="desc">
-<p>A pointer to memory into which to write the value.</p>
-</td></tr>
-<tr><td class="val" id="valen_len">valen_len</td><td class="desc">
-<p>The size, in bytes, of the memory supplied for the value.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="value">value</td><td class="desc">
-<p>The value matching the above key, if it exists.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>The amount of memory (in bytes) required to hold the requested value (if it exists, -1 otherwise).</p>
-
-<h4>note</h4>
-<p>The values returned are not pointers into the internal structures of the face, but are &lsquo;fresh&rsquo; copies, so that the memory containing them belongs to the calling application. This also enforces the &lsquo;read-only&rsquo; nature of these values, i.e., this function cannot be used to manipulate the face.</p>
-<p>&lsquo;value&rsquo; is a void pointer because the values returned can be of various types.</p>
-<p>If either &lsquo;value&rsquo; is NULL or &lsquo;value_len&rsquo; is too small, just the required memory size for the requested entry is returned.</p>
-<p>The &lsquo;idx&rsquo; parameter is used, not only to retrieve elements of, for example, the FontMatrix or FontBBox, but also to retrieve name keys from the CharStrings dictionary, and the charstrings themselves. It is ignored for atomic values.</p>
-<p>PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To get the value as in the font stream, you need to divide by 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).</p>
-<p>IMPORTANT: Only key/value pairs read by the FreeType interpreter can be retrieved. So, for example, PostScript procedures such as NP, ND, and RD are not available. Arbitrary keys are, obviously, not be available either.</p>
-<p>If the font's format is not PostScript-based, this function returns the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
-
-<h4>since</h4>
-<p>2.4.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="T1_Blend_Flags">T1_Blend_Flags</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> T1_Blend_Flags_
- {
- /* required fields in a FontInfo blend dictionary */
- <a href="ft2-type1_tables.html#T1_BLEND_UNDERLINE_POSITION">T1_BLEND_UNDERLINE_POSITION</a> = 0,
- <a href="ft2-type1_tables.html#T1_BLEND_UNDERLINE_THICKNESS">T1_BLEND_UNDERLINE_THICKNESS</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_ITALIC_ANGLE">T1_BLEND_ITALIC_ANGLE</a>,
-
- /* required fields in a Private blend dictionary */
- <a href="ft2-type1_tables.html#T1_BLEND_BLUE_VALUES">T1_BLEND_BLUE_VALUES</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_OTHER_BLUES">T1_BLEND_OTHER_BLUES</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_STANDARD_WIDTH">T1_BLEND_STANDARD_WIDTH</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_STANDARD_HEIGHT">T1_BLEND_STANDARD_HEIGHT</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_STEM_SNAP_WIDTHS">T1_BLEND_STEM_SNAP_WIDTHS</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_STEM_SNAP_HEIGHTS">T1_BLEND_STEM_SNAP_HEIGHTS</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_BLUE_SCALE">T1_BLEND_BLUE_SCALE</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_BLUE_SHIFT">T1_BLEND_BLUE_SHIFT</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_FAMILY_BLUES">T1_BLEND_FAMILY_BLUES</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_FAMILY_OTHER_BLUES">T1_BLEND_FAMILY_OTHER_BLUES</a>,
- <a href="ft2-type1_tables.html#T1_BLEND_FORCE_BOLD">T1_BLEND_FORCE_BOLD</a>,
-
- T1_BLEND_MAX /* do not remove */
-
- } <b>T1_Blend_Flags</b>;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `<b>T1_Blend_Flags</b>' values instead */
-#define t1_blend_underline_position <a href="ft2-type1_tables.html#T1_BLEND_UNDERLINE_POSITION">T1_BLEND_UNDERLINE_POSITION</a>
-#define t1_blend_underline_thickness <a href="ft2-type1_tables.html#T1_BLEND_UNDERLINE_THICKNESS">T1_BLEND_UNDERLINE_THICKNESS</a>
-#define t1_blend_italic_angle <a href="ft2-type1_tables.html#T1_BLEND_ITALIC_ANGLE">T1_BLEND_ITALIC_ANGLE</a>
-#define t1_blend_blue_values <a href="ft2-type1_tables.html#T1_BLEND_BLUE_VALUES">T1_BLEND_BLUE_VALUES</a>
-#define t1_blend_other_blues <a href="ft2-type1_tables.html#T1_BLEND_OTHER_BLUES">T1_BLEND_OTHER_BLUES</a>
-#define t1_blend_standard_widths <a href="ft2-type1_tables.html#T1_BLEND_STANDARD_WIDTH">T1_BLEND_STANDARD_WIDTH</a>
-#define t1_blend_standard_height <a href="ft2-type1_tables.html#T1_BLEND_STANDARD_HEIGHT">T1_BLEND_STANDARD_HEIGHT</a>
-#define t1_blend_stem_snap_widths <a href="ft2-type1_tables.html#T1_BLEND_STEM_SNAP_WIDTHS">T1_BLEND_STEM_SNAP_WIDTHS</a>
-#define t1_blend_stem_snap_heights <a href="ft2-type1_tables.html#T1_BLEND_STEM_SNAP_HEIGHTS">T1_BLEND_STEM_SNAP_HEIGHTS</a>
-#define t1_blend_blue_scale <a href="ft2-type1_tables.html#T1_BLEND_BLUE_SCALE">T1_BLEND_BLUE_SCALE</a>
-#define t1_blend_blue_shift <a href="ft2-type1_tables.html#T1_BLEND_BLUE_SHIFT">T1_BLEND_BLUE_SHIFT</a>
-#define t1_blend_family_blues <a href="ft2-type1_tables.html#T1_BLEND_FAMILY_BLUES">T1_BLEND_FAMILY_BLUES</a>
-#define t1_blend_family_other_blues <a href="ft2-type1_tables.html#T1_BLEND_FAMILY_OTHER_BLUES">T1_BLEND_FAMILY_OTHER_BLUES</a>
-#define t1_blend_force_bold <a href="ft2-type1_tables.html#T1_BLEND_FORCE_BOLD">T1_BLEND_FORCE_BOLD</a>
-#define t1_blend_max T1_BLEND_MAX
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="T1_BLEND_UNDERLINE_POSITION">T1_BLEND_UNDERLINE_POSITION</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_UNDERLINE_THICKNESS">T1_BLEND_UNDERLINE_THICKNESS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_ITALIC_ANGLE">T1_BLEND_ITALIC_ANGLE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_BLUE_VALUES">T1_BLEND_BLUE_VALUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_OTHER_BLUES">T1_BLEND_OTHER_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_STANDARD_WIDTH">T1_BLEND_STANDARD_WIDTH</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_STANDARD_HEIGHT">T1_BLEND_STANDARD_HEIGHT</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_STEM_SNAP_WIDTHS">T1_BLEND_STEM_SNAP_WIDTHS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_STEM_SNAP_HEIGHTS">T1_BLEND_STEM_SNAP_HEIGHTS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_BLUE_SCALE">T1_BLEND_BLUE_SCALE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_BLUE_SHIFT">T1_BLEND_BLUE_SHIFT</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_FAMILY_BLUES">T1_BLEND_FAMILY_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_FAMILY_OTHER_BLUES">T1_BLEND_FAMILY_OTHER_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_BLEND_FORCE_BOLD">T1_BLEND_FORCE_BOLD</td><td class="desc">
-<p></p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="T1_EncodingType">T1_EncodingType</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> T1_EncodingType_
- {
- <a href="ft2-type1_tables.html#T1_ENCODING_TYPE_NONE">T1_ENCODING_TYPE_NONE</a> = 0,
- <a href="ft2-type1_tables.html#T1_ENCODING_TYPE_ARRAY">T1_ENCODING_TYPE_ARRAY</a>,
- <a href="ft2-type1_tables.html#T1_ENCODING_TYPE_STANDARD">T1_ENCODING_TYPE_STANDARD</a>,
- <a href="ft2-type1_tables.html#T1_ENCODING_TYPE_ISOLATIN1">T1_ENCODING_TYPE_ISOLATIN1</a>,
- <a href="ft2-type1_tables.html#T1_ENCODING_TYPE_EXPERT">T1_ENCODING_TYPE_EXPERT</a>
-
- } <b>T1_EncodingType</b>;
-</pre>
-
-<p>An enumeration describing the &lsquo;Encoding&rsquo; entry in a Type 1 dictionary.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="T1_ENCODING_TYPE_NONE">T1_ENCODING_TYPE_NONE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_ENCODING_TYPE_ARRAY">T1_ENCODING_TYPE_ARRAY</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_ENCODING_TYPE_STANDARD">T1_ENCODING_TYPE_STANDARD</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_ENCODING_TYPE_ISOLATIN1">T1_ENCODING_TYPE_ISOLATIN1</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="T1_ENCODING_TYPE_EXPERT">T1_ENCODING_TYPE_EXPERT</td><td class="desc">
-<p></p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.4.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="PS_Dict_Keys">PS_Dict_Keys</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">enum</span> PS_Dict_Keys_
- {
- /* conventionally in the font dictionary */
- <a href="ft2-type1_tables.html#PS_DICT_FONT_TYPE">PS_DICT_FONT_TYPE</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FONT_MATRIX">PS_DICT_FONT_MATRIX</a>, /* <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FONT_BBOX">PS_DICT_FONT_BBOX</a>, /* <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> */
- <a href="ft2-type1_tables.html#PS_DICT_PAINT_TYPE">PS_DICT_PAINT_TYPE</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FONT_NAME">PS_DICT_FONT_NAME</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_UNIQUE_ID">PS_DICT_UNIQUE_ID</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_CHAR_STRINGS">PS_DICT_NUM_CHAR_STRINGS</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_CHAR_STRING_KEY">PS_DICT_CHAR_STRING_KEY</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_CHAR_STRING">PS_DICT_CHAR_STRING</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_ENCODING_TYPE">PS_DICT_ENCODING_TYPE</a>, /* <a href="ft2-type1_tables.html#T1_EncodingType">T1_EncodingType</a> */
- <a href="ft2-type1_tables.html#PS_DICT_ENCODING_ENTRY">PS_DICT_ENCODING_ENTRY</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
-
- /* conventionally in the font Private dictionary */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_SUBRS">PS_DICT_NUM_SUBRS</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_SUBR">PS_DICT_SUBR</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_STD_HW">PS_DICT_STD_HW</a>, /* <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> */
- <a href="ft2-type1_tables.html#PS_DICT_STD_VW">PS_DICT_STD_VW</a>, /* <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_BLUE_VALUES">PS_DICT_NUM_BLUE_VALUES</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_BLUE_VALUE">PS_DICT_BLUE_VALUE</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_BLUE_FUZZ">PS_DICT_BLUE_FUZZ</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_OTHER_BLUES">PS_DICT_NUM_OTHER_BLUES</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_OTHER_BLUE">PS_DICT_OTHER_BLUE</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_FAMILY_BLUES">PS_DICT_NUM_FAMILY_BLUES</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FAMILY_BLUE">PS_DICT_FAMILY_BLUE</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_FAMILY_OTHER_BLUES">PS_DICT_NUM_FAMILY_OTHER_BLUES</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FAMILY_OTHER_BLUE">PS_DICT_FAMILY_OTHER_BLUE</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_BLUE_SCALE">PS_DICT_BLUE_SCALE</a>, /* <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> */
- <a href="ft2-type1_tables.html#PS_DICT_BLUE_SHIFT">PS_DICT_BLUE_SHIFT</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_STEM_SNAP_H">PS_DICT_NUM_STEM_SNAP_H</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_STEM_SNAP_H">PS_DICT_STEM_SNAP_H</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_NUM_STEM_SNAP_V">PS_DICT_NUM_STEM_SNAP_V</a>, /* <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> */
- <a href="ft2-type1_tables.html#PS_DICT_STEM_SNAP_V">PS_DICT_STEM_SNAP_V</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FORCE_BOLD">PS_DICT_FORCE_BOLD</a>, /* <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> */
- <a href="ft2-type1_tables.html#PS_DICT_RND_STEM_UP">PS_DICT_RND_STEM_UP</a>, /* <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> */
- <a href="ft2-type1_tables.html#PS_DICT_MIN_FEATURE">PS_DICT_MIN_FEATURE</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_LEN_IV">PS_DICT_LEN_IV</a>, /* <a href="ft2-basic_types.html#FT_Int">FT_Int</a> */
- <a href="ft2-type1_tables.html#PS_DICT_PASSWORD">PS_DICT_PASSWORD</a>, /* <a href="ft2-basic_types.html#FT_Long">FT_Long</a> */
- <a href="ft2-type1_tables.html#PS_DICT_LANGUAGE_GROUP">PS_DICT_LANGUAGE_GROUP</a>, /* <a href="ft2-basic_types.html#FT_Long">FT_Long</a> */
-
- /* conventionally in the font FontInfo dictionary */
- <a href="ft2-type1_tables.html#PS_DICT_VERSION">PS_DICT_VERSION</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_NOTICE">PS_DICT_NOTICE</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_FULL_NAME">PS_DICT_FULL_NAME</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_FAMILY_NAME">PS_DICT_FAMILY_NAME</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_WEIGHT">PS_DICT_WEIGHT</a>, /* <a href="ft2-basic_types.html#FT_String">FT_String</a>* */
- <a href="ft2-type1_tables.html#PS_DICT_IS_FIXED_PITCH">PS_DICT_IS_FIXED_PITCH</a>, /* <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> */
- <a href="ft2-type1_tables.html#PS_DICT_UNDERLINE_POSITION">PS_DICT_UNDERLINE_POSITION</a>, /* <a href="ft2-basic_types.html#FT_Short">FT_Short</a> */
- <a href="ft2-type1_tables.html#PS_DICT_UNDERLINE_THICKNESS">PS_DICT_UNDERLINE_THICKNESS</a>, /* <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> */
- <a href="ft2-type1_tables.html#PS_DICT_FS_TYPE">PS_DICT_FS_TYPE</a>, /* <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> */
- <a href="ft2-type1_tables.html#PS_DICT_ITALIC_ANGLE">PS_DICT_ITALIC_ANGLE</a>, /* <a href="ft2-basic_types.html#FT_Long">FT_Long</a> */
-
- PS_DICT_MAX = <a href="ft2-type1_tables.html#PS_DICT_ITALIC_ANGLE">PS_DICT_ITALIC_ANGLE</a>
-
- } <b>PS_Dict_Keys</b>;
-</pre>
-
-<p>An enumeration used in calls to <a href="ft2-type1_tables.html#FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</a> to identify the Type&nbsp;1 dictionary entry to retrieve.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="PS_DICT_FONT_TYPE">PS_DICT_FONT_TYPE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FONT_MATRIX">PS_DICT_FONT_MATRIX</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FONT_BBOX">PS_DICT_FONT_BBOX</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_PAINT_TYPE">PS_DICT_PAINT_TYPE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FONT_NAME">PS_DICT_FONT_NAME</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_UNIQUE_ID">PS_DICT_UNIQUE_ID</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_CHAR_STRINGS">PS_DICT_NUM_CHAR_STRINGS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_CHAR_STRING_KEY">PS_DICT_CHAR_STRING_KEY</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_CHAR_STRING">PS_DICT_CHAR_STRING</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_ENCODING_TYPE">PS_DICT_ENCODING_TYPE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_ENCODING_ENTRY">PS_DICT_ENCODING_ENTRY</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_SUBRS">PS_DICT_NUM_SUBRS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_SUBR">PS_DICT_SUBR</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_STD_HW">PS_DICT_STD_HW</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_STD_VW">PS_DICT_STD_VW</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_BLUE_VALUES">PS_DICT_NUM_BLUE_VALUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_BLUE_VALUE">PS_DICT_BLUE_VALUE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_BLUE_FUZZ">PS_DICT_BLUE_FUZZ</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_OTHER_BLUES">PS_DICT_NUM_OTHER_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_OTHER_BLUE">PS_DICT_OTHER_BLUE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_FAMILY_BLUES">PS_DICT_NUM_FAMILY_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FAMILY_BLUE">PS_DICT_FAMILY_BLUE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_FAMILY_OTHER_BLUES">PS_DICT_NUM_FAMILY_OTHER_BLUES</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FAMILY_OTHER_BLUE">PS_DICT_FAMILY_OTHER_BLUE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_BLUE_SCALE">PS_DICT_BLUE_SCALE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_BLUE_SHIFT">PS_DICT_BLUE_SHIFT</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_STEM_SNAP_H">PS_DICT_NUM_STEM_SNAP_H</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_STEM_SNAP_H">PS_DICT_STEM_SNAP_H</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NUM_STEM_SNAP_V">PS_DICT_NUM_STEM_SNAP_V</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_STEM_SNAP_V">PS_DICT_STEM_SNAP_V</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FORCE_BOLD">PS_DICT_FORCE_BOLD</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_RND_STEM_UP">PS_DICT_RND_STEM_UP</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_MIN_FEATURE">PS_DICT_MIN_FEATURE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_LEN_IV">PS_DICT_LEN_IV</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_PASSWORD">PS_DICT_PASSWORD</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_LANGUAGE_GROUP">PS_DICT_LANGUAGE_GROUP</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_VERSION">PS_DICT_VERSION</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_NOTICE">PS_DICT_NOTICE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FULL_NAME">PS_DICT_FULL_NAME</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FAMILY_NAME">PS_DICT_FAMILY_NAME</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_WEIGHT">PS_DICT_WEIGHT</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_IS_FIXED_PITCH">PS_DICT_IS_FIXED_PITCH</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_UNDERLINE_POSITION">PS_DICT_UNDERLINE_POSITION</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_UNDERLINE_THICKNESS">PS_DICT_UNDERLINE_THICKNESS</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_FS_TYPE">PS_DICT_FS_TYPE</td><td class="desc">
-<p></p>
-</td></tr>
-<tr><td class="val" id="PS_DICT_ITALIC_ANGLE">PS_DICT_ITALIC_ANGLE</td><td class="desc">
-<p></p>
-</td></tr>
-</table>
-
-<h4>since</h4>
-<p>2.4.8</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="T1_FontInfo">T1_FontInfo</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> <b>T1_FontInfo</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="T1_Private">T1_Private</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> <b>T1_Private</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_FontDict">CID_FontDict</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a> <b>CID_FontDict</b>;
-</pre>
-
-<p>This type is equivalent to <a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="CID_Info">CID_Info</h3>
-<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
-<pre>
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> <b>CID_Info</b>;
-</pre>
-
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-user_allocation.html b/freetype/docs/reference/ft2-user_allocation.html
deleted file mode 100644
index 449bc0b3..00000000
--- a/freetype/docs/reference/ft2-user_allocation.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="user_allocation">User allocation</h1>
-
-<p>FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. In other words, it is recommended to use &lsquo;calloc&rsquo; (or variants of it) instead of &lsquo;malloc&rsquo; for allocation.</p>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-version.html b/freetype/docs/reference/ft2-version.html
deleted file mode 100644
index a3ab9a7c..00000000
--- a/freetype/docs/reference/ft2-version.html
+++ /dev/null
@@ -1,251 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="version">FreeType Version</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_Library_Version">FT_Library_Version</a></td><td>&nbsp;</td></tr>
-<tr><td>&nbsp;</td><td><a href="#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td></tr>
-<tr><td><a href="#FREETYPE_MAJOR">FREETYPE_MAJOR</a></td><td><a href="#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td></tr>
-<tr><td><a href="#FREETYPE_MINOR">FREETYPE_MINOR</a></td><td>&nbsp;</td></tr>
-<tr><td><a href="#FREETYPE_PATCH">FREETYPE_PATCH</a></td><td><a href="#FREETYPE_XXX">FREETYPE_XXX</a></td></tr>
-</table>
-
-
-<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>
-
-<div class="section">
-<h3 id="FT_Library_Version">FT_Library_Version</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<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>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="library">library</td><td class="desc">
-<p>A source library handle.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="amajor">amajor</td><td class="desc">
-<p>The major version number.</p>
-</td></tr>
-<tr><td class="val" id="aminor">aminor</td><td class="desc">
-<p>The minor version number.</p>
-</td></tr>
-<tr><td class="val" id="apatch">apatch</td><td class="desc">
-<p>The patch version number.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Deprecated, does nothing.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A face handle.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Always returns false.</p>
-
-<h4>note</h4>
-<p>Since May 2010, TrueType hinting is no longer patented.</p>
-
-<h4>since</h4>
-<p>2.3.5</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<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>
-
-<p>Deprecated, does nothing.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A face handle.</p>
-</td></tr>
-<tr><td class="val" id="value">value</td><td class="desc">
-<p>New boolean setting.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>Always returns false.</p>
-
-<h4>note</h4>
-<p>Since May 2010, TrueType hinting is no longer patented.</p>
-
-<h4>since</h4>
-<p>2.3.5</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FREETYPE_XXX">FREETYPE_XXX</h3>
-<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
-<pre>
-#define <a href="ft2-version.html#FREETYPE_MAJOR">FREETYPE_MAJOR</a> 2
-#define <a href="ft2-version.html#FREETYPE_MINOR">FREETYPE_MINOR</a> 9
-#define <a href="ft2-version.html#FREETYPE_PATCH">FREETYPE_PATCH</a> 1
-</pre>
-
-<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>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FREETYPE_MAJOR">FREETYPE_MAJOR</td><td class="desc">
-<p>The major version number.</p>
-</td></tr>
-<tr><td class="val" id="FREETYPE_MINOR">FREETYPE_MINOR</td><td class="desc">
-<p>The minor version number.</p>
-</td></tr>
-<tr><td class="val" id="FREETYPE_PATCH">FREETYPE_PATCH</td><td class="desc">
-<p>The patch level.</p>
-</td></tr>
-</table>
-
-<h4>note</h4>
-<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>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/ft2-winfnt_fonts.html b/freetype/docs/reference/ft2-winfnt_fonts.html
deleted file mode 100644
index 26ffb1cf..00000000
--- a/freetype/docs/reference/ft2-winfnt_fonts.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.9.1 API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.9.1 API Reference</h1>
-
-<h1 id="winfnt_fonts">Window FNT Files</h1>
-<h2>Synopsis</h2>
-<table class="synopsis">
-<tr><td><a href="#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td><td><a href="#FT_WinFNT_Header">FT_WinFNT_Header</a></td><td></td></tr>
-<tr><td><a href="#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td><td><a href="#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td></td></tr>
-</table>
-
-
-<p>This section contains the declaration of Windows FNT specific functions.</p>
-
-<div class="section">
-<h3 id="FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</h3>
-<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
-<pre>
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1252">FT_WinFNT_ID_CP1252</a> 0
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_DEFAULT">FT_WinFNT_ID_DEFAULT</a> 1
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_SYMBOL">FT_WinFNT_ID_SYMBOL</a> 2
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_MAC">FT_WinFNT_ID_MAC</a> 77
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP932">FT_WinFNT_ID_CP932</a> 128
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP949">FT_WinFNT_ID_CP949</a> 129
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1361">FT_WinFNT_ID_CP1361</a> 130
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP936">FT_WinFNT_ID_CP936</a> 134
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP950">FT_WinFNT_ID_CP950</a> 136
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1253">FT_WinFNT_ID_CP1253</a> 161
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1254">FT_WinFNT_ID_CP1254</a> 162
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1258">FT_WinFNT_ID_CP1258</a> 163
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1255">FT_WinFNT_ID_CP1255</a> 177
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1256">FT_WinFNT_ID_CP1256</a> 178
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1257">FT_WinFNT_ID_CP1257</a> 186
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1251">FT_WinFNT_ID_CP1251</a> 204
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP874">FT_WinFNT_ID_CP874</a> 222
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_CP1250">FT_WinFNT_ID_CP1250</a> 238
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_OEM">FT_WinFNT_ID_OEM</a> 255
-</pre>
-
-<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 <a href="ftp://ftp.unicode.org/Public">ftp://ftp.unicode.org/Public</a> in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.</p>
-
-<h4>values</h4>
-<table class="fields">
-<tr><td class="val" id="FT_WinFNT_ID_DEFAULT">FT_WinFNT_ID_DEFAULT</td><td class="desc">
-<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><td class="val" id="FT_WinFNT_ID_SYMBOL">FT_WinFNT_ID_SYMBOL</td><td class="desc">
-<p>There is no known mapping table available.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_MAC">FT_WinFNT_ID_MAC</td><td class="desc">
-<p>Mac Roman encoding.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_OEM">FT_WinFNT_ID_OEM</td><td class="desc">
-<p>From Michael Poettgen &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><a href="https://msdn.microsoft.com/en-us/goglobal/bb964655">https://msdn.microsoft.com/en-us/goglobal/bb964655</a>,</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><td class="val" id="FT_WinFNT_ID_CP874">FT_WinFNT_ID_CP874</td><td class="desc">
-<p>A superset of Thai TIS 620 and ISO 8859-11.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP932">FT_WinFNT_ID_CP932</td><td class="desc">
-<p>A superset of Japanese Shift-JIS (with minor deviations).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP936">FT_WinFNT_ID_CP936</td><td class="desc">
-<p>A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP949">FT_WinFNT_ID_CP949</td><td class="desc">
-<p>A superset of Korean Hangul KS&nbsp;C 5601-1987 (with different ordering and minor deviations).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP950">FT_WinFNT_ID_CP950</td><td class="desc">
-<p>A superset of traditional Chinese Big&nbsp;5 ETen (with different ordering and minor deviations).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1250">FT_WinFNT_ID_CP1250</td><td class="desc">
-<p>A superset of East European ISO 8859-2 (with slightly different ordering).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1251">FT_WinFNT_ID_CP1251</td><td class="desc">
-<p>A superset of Russian ISO 8859-5 (with different ordering).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1252">FT_WinFNT_ID_CP1252</td><td class="desc">
-<p>ANSI encoding. A superset of ISO 8859-1.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1253">FT_WinFNT_ID_CP1253</td><td class="desc">
-<p>A superset of Greek ISO 8859-7 (with minor modifications).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1254">FT_WinFNT_ID_CP1254</td><td class="desc">
-<p>A superset of Turkish ISO 8859-9.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1255">FT_WinFNT_ID_CP1255</td><td class="desc">
-<p>A superset of Hebrew ISO 8859-8 (with some modifications).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1256">FT_WinFNT_ID_CP1256</td><td class="desc">
-<p>A superset of Arabic ISO 8859-6 (with different ordering).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1257">FT_WinFNT_ID_CP1257</td><td class="desc">
-<p>A superset of Baltic ISO 8859-13 (with some deviations).</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1258">FT_WinFNT_ID_CP1258</td><td class="desc">
-<p>For Vietnamese. This encoding doesn't cover all necessary characters.</p>
-</td></tr>
-<tr><td class="val" id="FT_WinFNT_ID_CP1361">FT_WinFNT_ID_CP1361</td><td class="desc">
-<p>Korean (Johab).</p>
-</td></tr>
-</table>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</h3>
-<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
-<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>
-
-<p>Windows FNT Header info.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_WinFNT_Header">FT_WinFNT_Header</h3>
-<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
-<pre>
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_* <b>FT_WinFNT_Header</b>;
-</pre>
-
-<p>A handle to an <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> structure.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-<div class="section">
-<h3 id="FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</h3>
-<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
-<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>
-
-<p>Retrieve a Windows FNT font info header.</p>
-
-<h4>input</h4>
-<table class="fields">
-<tr><td class="val" id="face">face</td><td class="desc">
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-
-<h4>output</h4>
-<table class="fields">
-<tr><td class="val" id="aheader">aheader</td><td class="desc">
-<p>The WinFNT header.</p>
-</td></tr>
-</table>
-
-<h4>return</h4>
-<p>FreeType error code. 0&nbsp;means success.</p>
-
-<h4>note</h4>
-<p>This function only works with Windows FNT faces, returning an error otherwise.</p>
-
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
-
-</body>
-</html>
diff --git a/freetype/docs/reference/site/404.html b/freetype/docs/reference/site/404.html
new file mode 100644
index 00000000..4f0f50e9
--- /dev/null
+++ b/freetype/docs/reference/site/404.html
@@ -0,0 +1,1034 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="/images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="/assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="/assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="/assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="/assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="/stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="/index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="/images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="/index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="/images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+ <h1>404 - Not found</h1>
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="/assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"/"}})</script>
+
+ <script src="/javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/fonts/font-awesome.css b/freetype/docs/reference/site/assets/fonts/font-awesome.css
new file mode 100644
index 00000000..b476b53e
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/font-awesome.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url("specimen/FontAwesome.woff2") format("woff2"),url("specimen/FontAwesome.woff") format("woff"),url("specimen/FontAwesome.ttf") format("truetype")}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/fonts/material-icons.css b/freetype/docs/reference/site/assets/fonts/material-icons.css
new file mode 100644
index 00000000..d23d365e
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/material-icons.css
@@ -0,0 +1,13 @@
+/*!
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE
+ * DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ * SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND
+ * LIMITATIONS UNDER THE LICENSE.
+ */@font-face{font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.ttf b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.ttf
new file mode 100644
index 00000000..35acda2f
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.ttf
Binary files differ
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff
new file mode 100644
index 00000000..400014a4
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff
Binary files differ
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff2 b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff2
new file mode 100644
index 00000000..4d13fc60
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/FontAwesome.woff2
Binary files differ
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.ttf b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.ttf
new file mode 100644
index 00000000..7015564a
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.ttf
Binary files differ
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff
new file mode 100644
index 00000000..b648a3ee
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff
Binary files differ
diff --git a/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff2 b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff2
new file mode 100644
index 00000000..9fa21125
--- /dev/null
+++ b/freetype/docs/reference/site/assets/fonts/specimen/MaterialIcons-Regular.woff2
Binary files differ
diff --git a/freetype/docs/reference/site/assets/images/favicon.png b/freetype/docs/reference/site/assets/images/favicon.png
new file mode 100644
index 00000000..76d17f57
--- /dev/null
+++ b/freetype/docs/reference/site/assets/images/favicon.png
Binary files differ
diff --git a/freetype/docs/reference/site/assets/images/icons/bitbucket.1b09e088.svg b/freetype/docs/reference/site/assets/images/icons/bitbucket.1b09e088.svg
new file mode 100644
index 00000000..a25435af
--- /dev/null
+++ b/freetype/docs/reference/site/assets/images/icons/bitbucket.1b09e088.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="352" height="448"
+ viewBox="0 0 352 448" id="__bitbucket">
+ <path fill="currentColor" d="M203.75 214.75q2 15.75-12.625 25.25t-27.875
+ 1.5q-9.75-4.25-13.375-14.5t-0.125-20.5 13-14.5q9-4.5 18.125-3t16 8.875
+ 6.875 16.875zM231.5 209.5q-3.5-26.75-28.25-41t-49.25-3.25q-15.75
+ 7-25.125 22.125t-8.625 32.375q1 22.75 19.375 38.75t41.375 14q22.75-2
+ 38-21t12.5-42zM291.25
+ 74q-5-6.75-14-11.125t-14.5-5.5-17.75-3.125q-72.75-11.75-141.5 0.5-10.75
+ 1.75-16.5 3t-13.75 5.5-12.5 10.75q7.5 7 19 11.375t18.375 5.5 21.875
+ 2.875q57 7.25 112 0.25 15.75-2 22.375-3t18.125-5.375 18.75-11.625zM305.5
+ 332.75q-2 6.5-3.875 19.125t-3.5 21-7.125 17.5-14.5 14.125q-21.5
+ 12-47.375 17.875t-50.5 5.5-50.375-4.625q-11.5-2-20.375-4.5t-19.125-6.75-18.25-10.875-13-15.375q-6.25-24-14.25-73l1.5-4
+ 4.5-2.25q55.75 37 126.625 37t126.875-37q5.25 1.5 6 5.75t-1.25 11.25-2
+ 9.25zM350.75 92.5q-6.5 41.75-27.75 163.75-1.25 7.5-6.75 14t-10.875
+ 10-13.625 7.75q-63 31.5-152.5
+ 22-62-6.75-98.5-34.75-3.75-3-6.375-6.625t-4.25-8.75-2.25-8.5-1.5-9.875-1.375-8.75q-2.25-12.5-6.625-37.5t-7-40.375-5.875-36.875-5.5-39.5q0.75-6.5
+ 4.375-12.125t7.875-9.375 11.25-7.5 11.5-5.625 12-4.625q31.25-11.5
+ 78.25-16 94.75-9.25 169 12.5 38.75 11.5 53.75 30.5 4 5 4.125
+ 12.75t-1.375 13.5z" />
+</svg>
diff --git a/freetype/docs/reference/site/assets/images/icons/github.f0b8504a.svg b/freetype/docs/reference/site/assets/images/icons/github.f0b8504a.svg
new file mode 100644
index 00000000..c009420a
--- /dev/null
+++ b/freetype/docs/reference/site/assets/images/icons/github.f0b8504a.svg
@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
+ viewBox="0 0 416 448" id="__github">
+ <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
+ 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
+ 18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
+ 19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
+ 18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
+ 304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
+ 2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
+ 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
+ 37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
+ 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
+ 1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
+ 0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
+ 30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
+ 46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
+ 99.5z" />
+</svg>
diff --git a/freetype/docs/reference/site/assets/images/icons/gitlab.6dd19c00.svg b/freetype/docs/reference/site/assets/images/icons/gitlab.6dd19c00.svg
new file mode 100644
index 00000000..9e3d6f05
--- /dev/null
+++ b/freetype/docs/reference/site/assets/images/icons/gitlab.6dd19c00.svg
@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500"
+ viewBox="0 0 500 500" id="__gitlab">
+ <g transform="translate(156.197863, 1.160267)">
+ <path fill="currentColor"
+ d="M93.667,473.347L93.667,473.347l90.684-279.097H2.983L93.667,
+ 473.347L93.667,473.347z" />
+ </g>
+ <g transform="translate(28.531199, 1.160800)" opacity="0.7">
+ <path fill="currentColor"
+ d="M221.333,473.345L130.649,194.25H3.557L221.333,473.345L221.333,
+ 473.345z" />
+ </g>
+ <g transform="translate(0.088533, 0.255867)" opacity="0.5">
+ <path fill="currentColor"
+ d="M32,195.155L32,195.155L4.441,279.97c-2.513,7.735,0.24,16.21,6.821,
+ 20.99l238.514,173.29 L32,195.155L32,195.155z" />
+ </g>
+ <g transform="translate(29.421866, 280.255593)">
+ <path fill="currentColor"
+ d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856,
+ 0L2.667-84.844 L2.667-84.844z" />
+ </g>
+ <g transform="translate(247.197860, 1.160800)" opacity="0.7">
+ <path fill="currentColor"
+ d="M2.667,473.345L93.351,194.25h127.092L2.667,473.345L2.667,
+ 473.345z" />
+ </g>
+ <g transform="translate(246.307061, 0.255867)" opacity="0.5">
+ <path fill="currentColor"
+ d="M221.334,195.155L221.334,195.155l27.559,84.815c2.514,7.735-0.24,
+ 16.21-6.821,20.99 L3.557,474.25L221.334,195.155L221.334,195.155z" />
+ </g>
+ <g transform="translate(336.973725, 280.255593)">
+ <path fill="currentColor"
+ d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649,15.047-8.649,
+ 17.856,0L130.667-84.844 L130.667-84.844z" />
+ </g>
+</svg>
diff --git a/freetype/docs/reference/site/assets/javascripts/application.d9aa80ab.js b/freetype/docs/reference/site/assets/javascripts/application.d9aa80ab.js
new file mode 100644
index 00000000..cd404eb2
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/application.d9aa80ab.js
@@ -0,0 +1,6 @@
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(n){var r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=n,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=14)}([function(e,t,n){"use strict";var r={Listener:function(){function e(e,t,n){var r=this;this.els_=Array.prototype.slice.call("string"==typeof e?document.querySelectorAll(e):[].concat(e)),this.handler_="function"==typeof n?{update:n}:n,this.events_=[].concat(t),this.update_=function(e){return r.handler_.update(e)}}var t=e.prototype;return t.listen=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.addEventListener(e,n.update_,!1)})}),"function"==typeof this.handler_.setup&&this.handler_.setup()},t.unlisten=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.removeEventListener(e,n.update_)})}),"function"==typeof this.handler_.reset&&this.handler_.reset()},e}(),MatchMedia:function(e,t){this.handler_=function(e){e.matches?t.listen():t.unlisten()};var n=window.matchMedia(e);n.addListener(this.handler_),this.handler_(n)}},i={Shadow:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement&&n.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=n.parentNode,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLElement))throw new ReferenceError;this.header_=n,this.height_=0,this.active_=!1}var t=e.prototype;return t.setup=function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()},t.update=function(e){if(!e||"resize"!==e.type&&"orientationchange"!==e.type){var t=window.pageYOffset>=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},t.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}(),Title:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=n,this.active_=!1}var t=e.prototype;return t.setup=function(){var t=this;Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}()},o={Blur:function(){function e(e){this.els_="string"==typeof e?document.querySelectorAll(e):e,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){var n=decodeURIComponent(t.hash);return e.concat(document.getElementById(n.substring(1))||[])},[])}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;n<this.els_.length&&this.anchors_[n].offsetTop-80<=e;n++)0<n&&(this.els_[n-1].dataset.mdState="blur"),this.index_=n;else for(var r=this.index_;0<=r;r--){if(!(this.anchors_[r].offsetTop-80>e)){this.index_=r;break}0<r&&(this.els_[r-1].dataset.mdState="")}this.offset_=e,this.dir_=t}},t.reset=function(){Array.prototype.forEach.call(this.els_,function(e){e.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset},e}(),Collapse:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}var t=e.prototype;return t.setup=function(){var e=this.el_.getBoundingClientRect().height;this.el_.style.display=e?"block":"none",this.el_.style.overflow=e?"visible":"hidden"},t.update=function(){var e=this,t=this.el_.getBoundingClientRect().height;this.el_.style.display="block",this.el_.style.overflow="";var r=this.el_.previousElementSibling.previousElementSibling.checked;if(r)this.el_.style.maxHeight=t+"px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight="0px"});else{this.el_.setAttribute("data-md-state","expand"),this.el_.style.maxHeight="";var n=this.el_.getBoundingClientRect().height;this.el_.removeAttribute("data-md-state"),this.el_.style.maxHeight="0px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight=n+"px"})}this.el_.addEventListener("transitionend",function e(t){var n=t.target;if(!(n instanceof HTMLElement))throw new ReferenceError;n.removeAttribute("data-md-state"),n.style.maxHeight="",n.style.display=r?"none":"block",n.style.overflow=r?"hidden":"visible",n.removeEventListener("transitionend",e)},!1)},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.maxHeight="",this.el_.style.display="",this.el_.style.overflow=""},e}(),Scrolling:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}var t=e.prototype;return t.setup=function(){this.el_.children[this.el_.children.length-1].style.webkitOverflowScrolling="touch";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling="touch"}})},t.update=function(e){var t=e.target;if(!(t instanceof HTMLElement))throw new ReferenceError;var n=t.nextElementSibling;if(!(n instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==n.tagName&&n.nextElementSibling;)n=n.nextElementSibling;if(!(t.parentNode instanceof HTMLElement&&t.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var r=t.parentNode.parentNode,i=n.children[n.children.length-1];if(r.style.webkitOverflowScrolling="",i.style.webkitOverflowScrolling="",!t.checked){n.addEventListener("transitionend",function e(){n instanceof HTMLElement&&(r.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))},!1)}if(t.checked){n.addEventListener("transitionend",function e(){n instanceof HTMLElement&&(i.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))},!1)}},t.reset=function(){this.el_.children[1].style.webkitOverflowScrolling="";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling=""}})},e}()},a={Lock:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLInputElement))throw new ReferenceError;if(this.el_=t,!document.body)throw new ReferenceError;this.lock_=document.body}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=this;this.el_.checked?(this.offset_=window.pageYOffset,setTimeout(function(){window.scrollTo(0,0),e.el_.checked&&(e.lock_.dataset.mdState="lock")},400)):(this.lock_.dataset.mdState="",setTimeout(function(){void 0!==e.offset_&&window.scrollTo(0,e.offset_)},100))},t.reset=function(){"lock"===this.lock_.dataset.mdState&&window.scrollTo(0,this.offset_),this.lock_.dataset.mdState=""},e}(),Result:n(9).a},s={Position:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement&&n.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,this.parent_=n.parentNode,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLElement))throw new ReferenceError;this.header_=n,this.height_=0,this.pad_="fixed"===window.getComputedStyle(this.header_).position}var t=e.prototype;return t.setup=function(){var e=Array.prototype.reduce.call(this.parent_.children,function(e,t){return Math.max(e,t.offsetTop)},0);this.offset_=e-(this.pad_?this.header_.offsetHeight:0),this.update()},t.update=function(e){var t=window.pageYOffset,n=window.innerHeight;e&&"resize"===e.type&&this.setup();var r=this.pad_?this.header_.offsetHeight:0,i=this.parent_.offsetTop+this.parent_.offsetHeight,o=n-r-Math.max(0,this.offset_-t)-Math.max(0,t+n-i);o!==this.height_&&(this.el_.style.height=(this.height_=o)+"px"),t>=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}()},c=n(6),l=n.n(c);var u={Adapter:{GitHub:function(o){var e,t;function n(e){var t;t=o.call(this,e)||this;var n=/^.+github\.com\/([^/]+)\/?([^/]+)?.*$/.exec(t.base_);if(n&&3===n.length){var r=n[1],i=n[2];t.base_="https://api.github.com/users/"+r+"/repos",t.name_=i}return t}return t=o,(e=n).prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t,n.prototype.fetch_=function(){var i=this;return function n(r){return void 0===r&&(r=0),fetch(i.base_+"?per_page=30&page="+r).then(function(e){return e.json()}).then(function(e){if(!(e instanceof Array))throw new TypeError;if(i.name_){var t=e.find(function(e){return e.name===i.name_});return t||30!==e.length?t?[i.format_(t.stargazers_count)+" Stars",i.format_(t.forks_count)+" Forks"]:[]:n(r+1)}return[e.length+" Repositories"]})}()},n}(function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=t,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}var t=e.prototype;return t.fetch=function(){var n=this;return new Promise(function(t){var e=l.a.getJSON(n.salt_+".cache-source");void 0!==e?t(e):n.fetch_().then(function(e){l.a.set(n.salt_+".cache-source",e,{expires:1/96}),t(e)})})},t.fetch_=function(){throw new Error("fetch_(): Not implemented")},t.format_=function(e){return 1e4<e?(e/1e3).toFixed(0)+"k":1e3<e?(e/1e3).toFixed(1)+"k":""+e},t.hash_=function(e){var t=0;if(0===e.length)return t;for(var n=0,r=e.length;n<r;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t},e}())},Repository:n(11).a},f={Toggle:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof Node))throw new ReferenceError;this.el_=t,this.active_=!1}var t=e.prototype;return t.update=function(){var e=window.pageYOffset>=this.el_.children[0].offsetTop+-43;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},t.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}()};t.a={Event:r,Header:i,Nav:o,Search:a,Sidebar:s,Source:u,Tabs:f}},function(t,e,n){(function(e){t.exports=e.lunr=n(25)}).call(this,n(4))},function(e,f,d){"use strict";(function(t){var e=d(8),n=setTimeout;function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],u(e,this)}function i(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,o._immediateFn(function(){var e=1===n._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(n._value)}catch(e){return void s(r.promise,e)}a(r.promise,t)}else(1===n._state?a:s)(r.promise,n._value)})):n._deferreds.push(r)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void u((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,c(t)}catch(e){s(t,e)}var r,i}function s(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)i(e,e._deferreds[t]);e._deferreds=null}function l(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function u(e,t){var n=!1;try{e(function(e){n||(n=!0,a(t,e))},function(e){n||(n=!0,s(t,e))})}catch(e){if(n)return;n=!0,s(t,e)}}o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var n=new this.constructor(r);return i(this,new l(e,t,n)),n},o.prototype.finally=e.a,o.all=function(t){return new o(function(r,i){if(!t||void 0===t.length)throw new TypeError("Promise.all accepts an array");var o=Array.prototype.slice.call(t);if(0===o.length)return r([]);var a=o.length;function s(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){s(t,e)},i)}o[t]=e,0==--a&&r(o)}catch(e){i(e)}}for(var e=0;e<o.length;e++)s(e,o[e])})},o.resolve=function(t){return t&&"object"==typeof t&&t.constructor===o?t:new o(function(e){e(t)})},o.reject=function(n){return new o(function(e,t){t(n)})},o.race=function(i){return new o(function(e,t){for(var n=0,r=i.length;n<r;n++)i[n].then(e,t)})},o._immediateFn="function"==typeof t&&function(e){t(e)}||function(e){n(e,0)},o._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},f.a=o}).call(this,d(22).setImmediate)},function(e,t,n){"use strict";function r(e,t){var n=document.createElement(e);t&&Array.prototype.forEach.call(Object.keys(t),function(e){n.setAttribute(e,t[e])});for(var r=arguments.length,i=new Array(2<r?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];return function t(e){Array.prototype.forEach.call(e,function(e){"string"==typeof e||"number"==typeof e?n.textContent+=e:Array.isArray(e)?t(e):void 0!==e.__html?n.innerHTML+=e.__html:e instanceof Node&&n.appendChild(e)})}(i),n}n.r(t),n.d(t,"createElement",function(){return r})},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r;r=function(){return function(n){var r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=n,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=r(n(1)),s=r(n(3)),c=r(n(4));function r(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function r(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return n.resolveOptions(t),n.listenClick(e),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,s.default),o(r,[{key:"resolveOptions",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===i(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,c.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return u("action",e)}},{key:"defaultTarget",value:function(e){var t=u("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return u("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),r}();function u(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=l},function(e,t,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=n(2),s=(r=a)&&r.__esModule?r:{default:r};var c=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),t}();e.exports=c},function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function i(){r.off(e,i),t.apply(n,arguments)}return i._=t,this.on(e,i,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],i=[];if(r&&t)for(var o=0,a=r.length;o<a;o++)r[o].fn!==t&&r[o].fn._!==t&&i.push(r[o]);return i.length?n[e]=i:delete n[e],this}},e.exports=n},function(e,t,n){var d=n(5),h=n(6);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!d.string(t))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(e))return u=t,f=n,(l=e).addEventListener(u,f),{destroy:function(){l.removeEventListener(u,f)}};if(d.nodeList(e))return a=e,s=t,c=n,Array.prototype.forEach.call(a,function(e){e.addEventListener(s,c)}),{destroy:function(){Array.prototype.forEach.call(a,function(e){e.removeEventListener(s,c)})}};if(d.string(e))return r=e,i=t,o=n,h(document.body,r,i,o);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var r,i,o,a,s,c,l,u,f}},function(e,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t,n){var a=n(7);function o(e,t,n,r,i){var o=function(t,n,e,r){return function(e){e.delegateTarget=a(e.target,n),e.delegateTarget&&r.call(t,e)}}.apply(this,arguments);return e.addEventListener(n,o,i),{destroy:function(){e.removeEventListener(n,o,i)}}}e.exports=function(e,t,n,r,i){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return o(e,t,n,r,i)}))}},function(e,t){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}}])},e.exports=r()},function(r,i,o){var a,s;!function(e){if(void 0===(s="function"==typeof(a=e)?a.call(i,o,i,r):a)||(r.exports=s),!0,r.exports=e(),!!0){var t=window.Cookies,n=window.Cookies=e();n.noConflict=function(){return window.Cookies=t,n}}}(function(){function m(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}return function e(h){function p(e,t,n){var r;if("undefined"!=typeof document){if(1<arguments.length){if("number"==typeof(n=m({path:"/"},p.defaults,n)).expires){var i=new Date;i.setMilliseconds(i.getMilliseconds()+864e5*n.expires),n.expires=i}n.expires=n.expires?n.expires.toUTCString():"";try{r=JSON.stringify(t),/^[\{\[]/.test(r)&&(t=r)}catch(e){}t=h.write?h.write(t,e):encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=(e=(e=encodeURIComponent(String(e))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var o="";for(var a in n)n[a]&&(o+="; "+a,!0!==n[a]&&(o+="="+n[a]));return document.cookie=e+"="+t+o}e||(r={});for(var s=document.cookie?document.cookie.split("; "):[],c=/(%[0-9A-Z]{2})+/g,l=0;l<s.length;l++){var u=s[l].split("="),f=u.slice(1).join("=");this.json||'"'!==f.charAt(0)||(f=f.slice(1,-1));try{var d=u[0].replace(c,decodeURIComponent);if(f=h.read?h.read(f,d):h(f,d)||f.replace(c,decodeURIComponent),this.json)try{f=JSON.parse(f)}catch(e){}if(e===d){r=f;break}e||(r[d]=f)}catch(e){}}return r}}return(p.set=p).get=function(e){return p.call(p,e)},p.getJSON=function(){return p.apply({json:!0},[].slice.call(arguments))},p.defaults={},p.remove=function(e,t){p(e,"",m(t,{expires:-1}))},p.withConverter=e,p}(function(){})})},function(e,t,n){"use strict";n.r(t);var r="function"==typeof fetch?fetch.bind():function(i,o){return o=o||{},new Promise(function(e,t){var n=new XMLHttpRequest;for(var r in n.open(o.method||"get",i,!0),o.headers)n.setRequestHeader(r,o.headers[r]);function s(){var r,i=[],o=[],a={};return n.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(e,t,n){i.push(t=t.toLowerCase()),o.push([t,n]),r=a[t],a[t]=r?r+","+n:n}),{ok:2==(n.status/100|0),status:n.status,statusText:n.statusText,url:n.responseURL,clone:s,text:function(){return Promise.resolve(n.responseText)},json:function(){return Promise.resolve(n.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([n.response]))},headers:{keys:function(){return i},entries:function(){return o},get:function(e){return a[e.toLowerCase()]},has:function(e){return e.toLowerCase()in a}}}}n.withCredentials="include"==o.credentials,n.onload=function(){e(s())},n.onerror=t,n.send(o.body||null)})};t.default=r},function(e,t,n){"use strict";t.a=function(t){var n=this.constructor;return this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){return n.reject(e)})})}},function(e,r,i){"use strict";(function(u){i.d(r,"a",function(){return n});var e=i(10),f=i.n(e),t=i(1),d=i.n(t),h=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},n=function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n;var r=Array.prototype.slice.call(this.el_.children),i=r[0],o=r[1];this.data_=t,this.meta_=i,this.list_=o,this.message_={placeholder:this.meta_.textContent,none:h("search.result.none"),one:h("search.result.one"),other:h("search.result.other")};var a=h("search.tokenizer");a.length&&(d.a.tokenizer.separator=a),this.lang_=h("search.language").split(",").filter(Boolean).map(function(e){return e.trim()})}return e.prototype.update=function(e){var a=this;if("focus"!==e.type||this.index_){if("focus"===e.type||"keyup"===e.type){var t=e.target;if(!(t instanceof HTMLInputElement))throw new ReferenceError;if(!this.index_||t.value===this.value_)return;for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);if(this.value_=t.value,0===this.value_.length)return void(this.meta_.textContent=this.message_.placeholder);var n=this.index_.query(function(t){a.value_.toLowerCase().split(" ").filter(Boolean).forEach(function(e){t.term(e,{wildcard:d.a.Query.wildcard.TRAILING})})}).reduce(function(e,t){var n=a.docs_.get(t.ref);if(n.parent){var r=n.parent.location;e.set(r,(e.get(r)||[]).concat(t))}else{var i=n.location;e.set(i,e.get(i)||[])}return e},new Map),r=f()(this.value_.trim()).replace(new RegExp(d.a.tokenizer.separator,"img"),"|"),s=new RegExp("(^|"+d.a.tokenizer.separator+")("+r+")","img"),c=function(e,t,n){return t+"<em>"+n+"</em>"};this.stack_=[],n.forEach(function(e,t){var n,r=a.docs_.get(t),i=u.createElement("li",{class:"md-search-result__item"},u.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article md-search-result__article--document"},u.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,c)}),r.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:r.text.replace(s,c)}):{}))),o=e.map(function(t){return function(){var e=a.docs_.get(t.ref);i.appendChild(u.createElement("a",{href:e.location,title:e.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article"},u.createElement("h1",{class:"md-search-result__title"},{__html:e.title.replace(s,c)}),e.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&0<--n;);return e.substring(0,n)+"..."}return e}(e.text.replace(s,c),400)}):{})))}});(n=a.stack_).push.apply(n,[function(){return a.list_.appendChild(i)}].concat(o))});var i=this.el_.parentNode;if(!(i instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&i.offsetHeight>=i.scrollHeight-16;)this.stack_.shift()();var o=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(o,function(r){["click","keydown"].forEach(function(n){r.addEventListener(n,function(e){if("keydown"!==n||13===e.keyCode){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.checked&&(t.checked=!1,t.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=r.href},100)}})})}),n.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",n.size)}}}else{var l=function(e){a.docs_=e.reduce(function(e,t){var n,r,i,o=t.location.split("#"),a=o[0],s=o[1];return t.text=(n=t.text,r=document.createTextNode(n),(i=document.createElement("p")).appendChild(r),i.innerHTML),s&&(t.parent=e.get(a),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var i=a.docs_,o=a.lang_;a.stack_=[],a.index_=d()(function(){var e,t=this,n={"search.pipeline.trimmer":d.a.trimmer,"search.pipeline.stopwords":d.a.stopWordFilter},r=Object.keys(n).reduce(function(e,t){return h(t).match(/^false$/i)||e.push(n[t]),e},[]);this.pipeline.reset(),r&&(e=this.pipeline).add.apply(e,r),1===o.length&&"en"!==o[0]&&d.a[o[0]]?this.use(d.a[o[0]]):1<o.length&&this.use(d.a.multiLanguage.apply(d.a,o)),this.field("title",{boost:10}),this.field("text"),this.ref("location"),i.forEach(function(e){return t.add(e)})});var t=a.el_.parentNode;if(!(t instanceof HTMLElement))throw new ReferenceError;t.addEventListener("scroll",function(){for(;a.stack_.length&&t.scrollTop+t.offsetHeight>=t.scrollHeight-16;)a.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof a.data_?a.data_().then(l):l(a.data_)},250)}},e}()}).call(this,i(3))},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,n,r){"use strict";(function(t){r.d(n,"a",function(){return e});var e=function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}return e.prototype.initialize=function(e){e.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(t.createElement("ul",{class:"md-source__facts"},e.map(function(e){return t.createElement("li",{class:"md-source__fact"},e)}))),this.el_.dataset.mdState="done"},e}()}).call(this,r(3))},,,function(e,n,c){"use strict";c.r(n),function(o){c.d(n,"app",function(){return t});c(15),c(16),c(17),c(18),c(19),c(20),c(21);var r=c(2),e=c(5),a=c.n(e),i=c(0);window.Promise=window.Promise||r.a;var s=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content};var t={initialize:function(t){new i.a.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var e=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(e,function(e){var t=o.createElement("div",{class:"md-typeset__scrollwrap"},o.createElement("div",{class:"md-typeset__table"}));e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.children[0].appendChild(e)}),a.a.isSupported()){var t=document.querySelectorAll(".codehilite > pre, pre > code");Array.prototype.forEach.call(t,function(e,t){var n="__code_"+t,r=o.createElement("button",{class:"md-clipboard",title:s("clipboard.copy"),"data-clipboard-target":"#"+n+" pre, #"+n+" code"},o.createElement("span",{class:"md-clipboard__message"})),i=e.parentNode;i.id=n,i.insertBefore(r,e)}),new a.a(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=s("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var n=document.querySelectorAll("details > summary");Array.prototype.forEach.call(n,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var r=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",r),r(),Modernizr.ios){var i=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(i,function(t){t.addEventListener("touchstart",function(){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)})})}}).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=tabs]")).listen(),new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,"scroll",new i.a.Nav.Blur("[data-md-component=toc] .md-nav__link")));var e=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(e,function(e){new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(e.previousElementSibling,"click",new i.a.Nav.Collapse(e)))}),new i.a.Event.MatchMedia("(max-width: 1219px)",new i.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new i.a.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-toggle=search]","change",new i.a.Search.Lock("[data-md-toggle=search]"))),new i.a.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new i.a.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/search/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new i.a.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new i.a.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new i.a.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!e.metaKey&&!e.ctrlKey)if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else document.activeElement&&!document.activeElement.form&&(70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault()))}).listen(),new i.a.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new i.a.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new i.a.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return r.a.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new i.a.Source.Adapter.GitHub(e).fetch();default:return r.a.resolve([])}}().then(function(t){var e=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(e,function(e){new i.a.Source.Repository(e).initialize(t)})});var n=function(){var e=document.querySelectorAll("details");Array.prototype.forEach.call(e,function(e){e.setAttribute("open","")})};new i.a.Event.MatchMedia("print",{listen:n,unlisten:function(){}}),window.onbeforeprint=n}}}.call(this,c(3))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application.982221ab.css"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application-palette.224b79ff.css"},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(7).default||n(7))},function(e,i,o){(function(e){var t=void 0!==e&&e||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}i.setTimeout=function(){return new r(n.call(setTimeout,t,arguments),clearTimeout)},i.setInterval=function(){return new r(n.call(setInterval,t,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(t,this._id)},i.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},i.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},i._unrefActive=i.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},o(23),i.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,i.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,o(4))},function(e,t,n){(function(e,p){!function(n,r){"use strict";if(!n.setImmediate){var i,o,t,a,e,s=1,c={},l=!1,u=n.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(n);f=f&&f.setTimeout?f:n,i="[object process]"==={}.toString.call(n.process)?function(e){p.nextTick(function(){h(e)})}:function(){if(n.postMessage&&!n.importScripts){var e=!0,t=n.onmessage;return n.onmessage=function(){e=!1},n.postMessage("","*"),n.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",e=function(e){e.source===n&&"string"==typeof e.data&&0===e.data.indexOf(a)&&h(+e.data.slice(a.length))},n.addEventListener?n.addEventListener("message",e,!1):n.attachEvent("onmessage",e),function(e){n.postMessage(a+e,"*")}):n.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){h(e.data)},function(e){t.port2.postMessage(e)}):u&&"onreadystatechange"in u.createElement("script")?(o=u.documentElement,function(e){var t=u.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):function(e){setTimeout(h,0,e)},f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var r={callback:e,args:t};return c[s]=r,i(s),s++},f.clearImmediate=d}function d(e){delete c[e]}function h(e){if(l)setTimeout(h,0,e);else{var t=c[e];if(t){l=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(r,n)}}(t)}finally{d(e),l=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(24))},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&h())}function h(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++f<t;)c&&c[f].run();f=-1,t=l.length}c=null,u=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||u||s(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(i,o,a){var s,c;
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.6
+ * Copyright (C) 2019 Oliver Nightingale
+ * @license MIT
+ */!function(){var t,l,u,e,n,f,d,h,p,m,y,v,g,w,_,E,x,b,k,S,T,L,R,O,C,r,D=function(e){var t=new D.Builder;return t.pipeline.add(D.trimmer,D.stopWordFilter,D.stemmer),t.searchPipeline.add(D.stemmer),e.call(t,t),t.build()};D.version="2.3.6",D.utils={},D.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),D.utils.asString=function(e){return null==e?"":e.toString()},D.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],o=e[i];if(Array.isArray(o))t[i]=o.slice();else{if("string"!=typeof o&&"number"!=typeof o&&"boolean"!=typeof o)throw new TypeError("clone is not deep and does not support nested objects");t[i]=o}}return t},D.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},D.FieldRef.joiner="/",D.FieldRef.fromString=function(e){var t=e.indexOf(D.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new D.FieldRef(r,n,e)},D.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+D.FieldRef.joiner+this.docRef),this._stringValue},D.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},D.Set.complete={intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},D.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},D.Set.prototype.contains=function(e){return!!this.elements[e]},D.Set.prototype.intersect=function(e){var t,n,r,i=[];if(e===D.Set.complete)return this;if(e===D.Set.empty)return e;n=this.length<e.length?(t=this,e):(t=e,this),r=Object.keys(t.elements);for(var o=0;o<r.length;o++){var a=r[o];a in n.elements&&i.push(a)}return new D.Set(i)},D.Set.prototype.union=function(e){return e===D.Set.complete?D.Set.complete:e===D.Set.empty?this:new D.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},D.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var i=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(i))},D.Token=function(e,t){this.str=e||"",this.metadata=t||{}},D.Token.prototype.toString=function(){return this.str},D.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},D.Token.prototype.clone=function(e){return e=e||function(e){return e},new D.Token(e(this.str,this.metadata),this.metadata)},D.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return new D.Token(D.utils.asString(e).toLowerCase(),D.utils.clone(t))});for(var n=e.toString().trim().toLowerCase(),r=n.length,i=[],o=0,a=0;o<=r;o++){var s=o-a;if(n.charAt(o).match(D.tokenizer.separator)||o==r){if(0<s){var c=D.utils.clone(t)||{};c.position=[a,s],c.index=i.length,i.push(new D.Token(n.slice(a,o),c))}a=o+1}}return i},D.tokenizer.separator=/[\s\-]+/,D.Pipeline=function(){this._stack=[]},D.Pipeline.registeredFunctions=Object.create(null),D.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&D.utils.warn("Overwriting existing registered function: "+t),e.label=t,D.Pipeline.registeredFunctions[e.label]=e},D.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},D.Pipeline.load=function(e){var n=new D.Pipeline;return e.forEach(function(e){var t=D.Pipeline.registeredFunctions[e];if(!t)throw new Error("Cannot load unregistered function: "+e);n.add(t)}),n},D.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){D.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},D.Pipeline.prototype.after=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},D.Pipeline.prototype.before=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},D.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},D.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],i=[],o=0;o<e.length;o++){var a=r(e[o],o,e);if(void 0!==a&&""!==a)if(Array.isArray(a))for(var s=0;s<a.length;s++)i.push(a[s]);else i.push(a)}e=i}return e},D.Pipeline.prototype.runString=function(e,t){var n=new D.Token(e,t);return this.run([n]).map(function(e){return e.toString()})},D.Pipeline.prototype.reset=function(){this._stack=[]},D.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return D.Pipeline.warnIfFunctionNotRegistered(e),e.label})},D.Vector=function(e){this._magnitude=0,this.elements=e||[]},D.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,i=Math.floor(r/2),o=this.elements[2*i];1<r&&(o<e&&(t=i),e<o&&(n=i),o!=e);)r=n-t,i=t+Math.floor(r/2),o=this.elements[2*i];return o==e?2*i:e<o?2*i:o<e?2*(i+1):void 0},D.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},D.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},D.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},D.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,i=n.length,o=r.length,a=0,s=0,c=0,l=0;c<i&&l<o;)(a=n[c])<(s=r[l])?c+=2:s<a?l+=2:a==s&&(t+=n[c+1]*r[l+1],c+=2,l+=2);return t},D.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},D.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},D.Vector.prototype.toJSON=function(){return this.elements},D.stemmer=(l={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},u={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",n="[^aeiou][^aeiouy]*",f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),m=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,w=/.$/,_=/(at|bl|iz)$/,E=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+n+e+"[^aeiouwxy]$"),b=/^(.+?[^aeiou])y$/,k=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,S=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,L=/^(.+?)(s|t)(ion)$/,R=/^(.+?)e$/,O=/ll$/,C=new RegExp("^"+n+e+"[^aeiouwxy]$"),r=function(e){var t,n,r,i,o,a,s;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),o=y,(i=m).test(e)?e=e.replace(i,"$1$2"):o.test(e)&&(e=e.replace(o,"$1$2")),o=g,(i=v).test(e)){var c=i.exec(e);(i=f).test(c[1])&&(i=w,e=e.replace(i,""))}else if(o.test(e)){t=(c=o.exec(e))[1],(o=p).test(t)&&(a=E,s=x,(o=_).test(e=t)?e+="e":a.test(e)?(i=w,e=e.replace(i,"")):s.test(e)&&(e+="e"))}(i=b).test(e)&&(e=(t=(c=i.exec(e))[1])+"i");(i=k).test(e)&&(t=(c=i.exec(e))[1],n=c[2],(i=f).test(t)&&(e=t+l[n]));(i=S).test(e)&&(t=(c=i.exec(e))[1],n=c[2],(i=f).test(t)&&(e=t+u[n]));if(o=L,(i=T).test(e))t=(c=i.exec(e))[1],(i=d).test(t)&&(e=t);else if(o.test(e)){t=(c=o.exec(e))[1]+c[2],(o=d).test(t)&&(e=t)}(i=R).test(e)&&(t=(c=i.exec(e))[1],o=h,a=C,((i=d).test(t)||o.test(t)&&!a.test(t))&&(e=t));return o=d,(i=O).test(e)&&o.test(e)&&(i=w,e=e.replace(i,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(r)}),D.Pipeline.registerFunction(D.stemmer,"stemmer"),D.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},D.stopWordFilter=D.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),D.Pipeline.registerFunction(D.stopWordFilter,"stopWordFilter"),D.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},D.Pipeline.registerFunction(D.trimmer,"trimmer"),D.TokenSet=function(){this.final=!1,this.edges={},this.id=D.TokenSet._nextId,D.TokenSet._nextId+=1},D.TokenSet._nextId=1,D.TokenSet.fromArray=function(e){for(var t=new D.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},D.TokenSet.fromClause=function(e){return"editDistance"in e?D.TokenSet.fromFuzzyString(e.term,e.editDistance):D.TokenSet.fromString(e.term)},D.TokenSet.fromFuzzyString=function(e,t){for(var n=new D.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var i=r.pop();if(0<i.str.length){var o,a=i.str.charAt(0);a in i.node.edges?o=i.node.edges[a]:(o=new D.TokenSet,i.node.edges[a]=o),1==i.str.length&&(o.final=!0),r.push({node:o,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(0!=i.editsRemaining){if("*"in i.node.edges)var s=i.node.edges["*"];else{s=new D.TokenSet;i.node.edges["*"]=s}if(0==i.str.length&&(s.final=!0),r.push({node:s,editsRemaining:i.editsRemaining-1,str:i.str}),1<i.str.length&&r.push({node:i.node,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)}),1==i.str.length&&(i.node.final=!0),1<=i.str.length){if("*"in i.node.edges)var c=i.node.edges["*"];else{c=new D.TokenSet;i.node.edges["*"]=c}1==i.str.length&&(c.final=!0),r.push({node:c,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(1<i.str.length){var l,u=i.str.charAt(0),f=i.str.charAt(1);f in i.node.edges?l=i.node.edges[f]:(l=new D.TokenSet,i.node.edges[f]=l),1==i.str.length&&(l.final=!0),r.push({node:l,editsRemaining:i.editsRemaining-1,str:u+i.str.slice(2)})}}}return n},D.TokenSet.fromString=function(e){for(var t=new D.TokenSet,n=t,r=0,i=e.length;r<i;r++){var o=e[r],a=r==i-1;if("*"==o)(t.edges[o]=t).final=a;else{var s=new D.TokenSet;s.final=a,t.edges[o]=s,t=s}}return n},D.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),i=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<i;o++){var a=r[o];t.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},D.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var i=t[r];e=e+i+this.edges[i].id}return e},D.TokenSet.prototype.intersect=function(e){for(var t=new D.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var i=Object.keys(n.qNode.edges),o=i.length,a=Object.keys(n.node.edges),s=a.length,c=0;c<o;c++)for(var l=i[c],u=0;u<s;u++){var f=a[u];if(f==l||"*"==l){var d=n.node.edges[f],h=n.qNode.edges[l],p=d.final&&h.final,m=void 0;f in n.output.edges?(m=n.output.edges[f]).final=m.final||p:((m=new D.TokenSet).final=p,n.output.edges[f]=m),r.push({qNode:h,output:m,node:d})}}}return t},D.TokenSet.Builder=function(){this.previousWord="",this.root=new D.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},D.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var i=new D.TokenSet,o=e[r];t.edges[o]=i,this.uncheckedNodes.push({parent:t,char:o,child:i}),t=i}t.final=!0,this.previousWord=e},D.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},D.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;e<=t;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},D.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},D.Index.prototype.search=function(t){return this.query(function(e){new D.QueryParser(t,e).parse()})},D.Index.prototype.query=function(e){for(var t=new D.Query(this.fields),n=Object.create(null),r=Object.create(null),i=Object.create(null),o=Object.create(null),a=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new D.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var c=t.clauses[s],l=null,u=D.Set.complete;l=c.usePipeline?this.pipeline.runString(c.term,{fields:c.fields}):[c.term];for(var f=0;f<l.length;f++){var d=l[f];c.term=d;var h=D.TokenSet.fromClause(c),p=this.tokenSet.intersect(h).toArray();if(0===p.length&&c.presence===D.Query.presence.REQUIRED){for(var m=0;m<c.fields.length;m++){o[Q=c.fields[m]]=D.Set.empty}break}for(var y=0;y<p.length;y++){var v=p[y],g=this.invertedIndex[v],w=g._index;for(m=0;m<c.fields.length;m++){var _=g[Q=c.fields[m]],E=Object.keys(_),x=v+"/"+Q,b=new D.Set(E);if(c.presence==D.Query.presence.REQUIRED&&(u=u.union(b),void 0===o[Q]&&(o[Q]=D.Set.complete)),c.presence!=D.Query.presence.PROHIBITED){if(r[Q].upsert(w,c.boost,function(e,t){return e+t}),!i[x]){for(var k=0;k<E.length;k++){var S,T=E[k],L=new D.FieldRef(T,Q),R=_[T];void 0===(S=n[L])?n[L]=new D.MatchData(v,Q,R):S.add(v,Q,R)}i[x]=!0}}else void 0===a[Q]&&(a[Q]=D.Set.empty),a[Q]=a[Q].union(b)}}}if(c.presence===D.Query.presence.REQUIRED)for(m=0;m<c.fields.length;m++){o[Q=c.fields[m]]=o[Q].intersect(u)}}var O=D.Set.complete,C=D.Set.empty;for(s=0;s<this.fields.length;s++){var Q;o[Q=this.fields[s]]&&(O=O.intersect(o[Q])),a[Q]&&(C=C.union(a[Q]))}var P=Object.keys(n),I=[],A=Object.create(null);if(t.isNegated()){P=Object.keys(this.fieldVectors);for(s=0;s<P.length;s++){L=P[s];var M=D.FieldRef.fromString(L);n[L]=new D.MatchData}}for(s=0;s<P.length;s++){var N=(M=D.FieldRef.fromString(P[s])).docRef;if(O.contains(N)&&!C.contains(N)){var j,F=this.fieldVectors[M],H=r[M.fieldName].similarity(F);if(void 0!==(j=A[N]))j.score+=H,j.matchData.combine(n[M]);else{var q={ref:N,score:H,matchData:n[M]};A[N]=q,I.push(q)}}}return I.sort(function(e,t){return t.score-e.score})},D.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:D.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},D.Index.load=function(e){var t={},n={},r=e.fieldVectors,i=Object.create(null),o=e.invertedIndex,a=new D.TokenSet.Builder,s=D.Pipeline.load(e.pipeline);e.version!=D.version&&D.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+D.version+"' does not match serialized index '"+e.version+"'");for(var c=0;c<r.length;c++){var l=(f=r[c])[0],u=f[1];n[l]=new D.Vector(u)}for(c=0;c<o.length;c++){var f,d=(f=o[c])[0],h=f[1];a.insert(d),i[d]=h}return a.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=i,t.tokenSet=a.root,t.pipeline=s,new D.Index(t)},D.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=D.tokenizer,this.pipeline=new D.Pipeline,this.searchPipeline=new D.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},D.Builder.prototype.ref=function(e){this._ref=e},D.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},D.Builder.prototype.b=function(e){this._b=e<0?0:1<e?1:e},D.Builder.prototype.k1=function(e){this._k1=e},D.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var i=0;i<r.length;i++){var o=r[i],a=this._fields[o].extractor,s=a?a(e):e[o],c=this.tokenizer(s,{fields:[o]}),l=this.pipeline.run(c),u=new D.FieldRef(n,o),f=Object.create(null);this.fieldTermFrequencies[u]=f,this.fieldLengths[u]=0,this.fieldLengths[u]+=l.length;for(var d=0;d<l.length;d++){var h=l[d];if(null==f[h]&&(f[h]=0),f[h]+=1,null==this.invertedIndex[h]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)p[r[m]]=Object.create(null);this.invertedIndex[h]=p}null==this.invertedIndex[h][o][n]&&(this.invertedIndex[h][o][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var v=this.metadataWhitelist[y],g=h.metadata[v];null==this.invertedIndex[h][o][n][v]&&(this.invertedIndex[h][o][n][v]=[]),this.invertedIndex[h][o][n][v].push(g)}}}},D.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},i=0;i<t;i++){var o=D.FieldRef.fromString(e[i]),a=o.fieldName;r[a]||(r[a]=0),r[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}var s=Object.keys(this._fields);for(i=0;i<s.length;i++){var c=s[i];n[c]=n[c]/r[c]}this.averageFieldLength=n},D.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),i=0;i<n;i++){for(var o=D.FieldRef.fromString(t[i]),a=o.fieldName,s=this.fieldLengths[o],c=new D.Vector,l=this.fieldTermFrequencies[o],u=Object.keys(l),f=u.length,d=this._fields[a].boost||1,h=this._documents[o.docRef].boost||1,p=0;p<f;p++){var m,y,v,g=u[p],w=l[g],_=this.invertedIndex[g]._index;void 0===r[g]?(m=D.idf(this.invertedIndex[g],this.documentCount),r[g]=m):m=r[g],y=m*((this._k1+1)*w)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[a]))+w),y*=d,y*=h,v=Math.round(1e3*y)/1e3,c.insert(_,v)}e[o]=c}this.fieldVectors=e},D.Builder.prototype.createTokenSet=function(){this.tokenSet=D.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},D.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new D.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},D.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},D.MatchData=function(e,t,n){for(var r=Object.create(null),i=Object.keys(n||{}),o=0;o<i.length;o++){var a=i[o];r[a]=n[a].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},D.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],i=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var o=0;o<i.length;o++){var a=i[o],s=Object.keys(e.metadata[r][a]);null==this.metadata[r][a]&&(this.metadata[r][a]=Object.create(null));for(var c=0;c<s.length;c++){var l=s[c];null==this.metadata[r][a][l]?this.metadata[r][a][l]=e.metadata[r][a][l]:this.metadata[r][a][l]=this.metadata[r][a][l].concat(e.metadata[r][a][l])}}}},D.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),i=0;i<r.length;i++){var o=r[i];o in this.metadata[e][t]?this.metadata[e][t][o]=this.metadata[e][t][o].concat(n[o]):this.metadata[e][t][o]=n[o]}else this.metadata[e][t]=n},D.Query=function(e){this.clauses=[],this.allFields=e},D.Query.wildcard=new String("*"),D.Query.wildcard.NONE=0,D.Query.wildcard.LEADING=1,D.Query.wildcard.TRAILING=2,D.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},D.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=D.Query.wildcard.NONE),e.wildcard&D.Query.wildcard.LEADING&&e.term.charAt(0)!=D.Query.wildcard&&(e.term="*"+e.term),e.wildcard&D.Query.wildcard.TRAILING&&e.term.slice(-1)!=D.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=D.Query.presence.OPTIONAL),this.clauses.push(e),this},D.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=D.Query.presence.PROHIBITED)return!1;return!0},D.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,D.utils.clone(t))},this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},D.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},D.QueryParseError.prototype=new Error,D.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},D.QueryLexer.prototype.run=function(){for(var e=D.QueryLexer.lexText;e;)e=e(this)},D.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},D.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},D.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},D.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos<this.length},D.QueryLexer.EOS="EOS",D.QueryLexer.FIELD="FIELD",D.QueryLexer.TERM="TERM",D.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",D.QueryLexer.BOOST="BOOST",D.QueryLexer.PRESENCE="PRESENCE",D.QueryLexer.lexField=function(e){return e.backup(),e.emit(D.QueryLexer.FIELD),e.ignore(),D.QueryLexer.lexText},D.QueryLexer.lexTerm=function(e){if(1<e.width()&&(e.backup(),e.emit(D.QueryLexer.TERM)),e.ignore(),e.more())return D.QueryLexer.lexText},D.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.EDIT_DISTANCE),D.QueryLexer.lexText},D.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.BOOST),D.QueryLexer.lexText},D.QueryLexer.lexEOS=function(e){0<e.width()&&e.emit(D.QueryLexer.TERM)},D.QueryLexer.termSeparator=D.tokenizer.separator,D.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==D.QueryLexer.EOS)return D.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return D.QueryLexer.lexField;if("~"==t)return e.backup(),0<e.width()&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),0<e.width()&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if(t.match(D.QueryLexer.termSeparator))return D.QueryLexer.lexTerm}else e.escapeCharacter()}},D.QueryParser=function(e,t){this.lexer=new D.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},D.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=D.QueryParser.parseClause;e;)e=e(this);return this.query},D.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},D.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},D.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},D.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case D.QueryLexer.PRESENCE:return D.QueryParser.parsePresence;case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw 1<=t.str.length&&(n+=" with value '"+t.str+"'"),new D.QueryParseError(n,t.start,t.end)}},D.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=D.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=D.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new D.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new D.QueryParseError(n,t.start,t.end)}switch(r.type){case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new D.QueryParseError(n,r.start,r.end)}}},D.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){r="expecting term, found nothing";throw new D.QueryParseError(r,t.start,t.end)}switch(i.type){case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:r="expecting term, found '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}}},D.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new D.QueryParseError(r,n.start,n.end)}else e.nextClause()}},D.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var i=e.peekLexeme();if(null!=i)switch(i.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}else e.nextClause()}},D.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var i=e.peekLexeme();if(null!=i)switch(i.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}else e.nextClause()}},void 0===(c="function"==typeof(s=function(){return D})?s.call(o,a,o,i):s)||(i.exports=c)}()}])); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.da.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.da.js
new file mode 100644
index 00000000..34910dfe
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.da.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,m,i;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,m=e.stemmerSupport.SnowballProgram,i=new function(){var i,t,n,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new m;function l(){var e,r=c.limit-c.cursor;c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r=c.cursor;return function(){var e,r=c.cursor+3;if(t=c.limit,0<=r&&r<=c.limit){for(i=r;;){if(e=c.cursor,c.in_grouping(d,97,248)){c.cursor=e;break}if((c.cursor=e)>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(t=c.cursor)<i&&(t=i)}}(),c.limit_backward=r,c.cursor=c.limit,function(){var e,r;if(c.cursor>=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,n=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-n,c.cursor>=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,n=c.slice_to(n),c.limit_backward=e,c.eq_v_b(n)&&c.slice_del()):c.limit_backward=e),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.de.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.de.js
new file mode 100644
index 00000000..1529892c
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.de.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var _,p,r;e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=(_=e.stemmerSupport.Among,p=e.stemmerSupport.SnowballProgram,r=new function(){var r,n,i,s=[new _("",-1,6),new _("U",0,2),new _("Y",0,1),new _("ä",0,3),new _("ö",0,4),new _("ü",0,5)],o=[new _("e",-1,2),new _("em",-1,1),new _("en",-1,2),new _("ern",-1,1),new _("er",-1,1),new _("s",-1,3),new _("es",5,2)],c=[new _("en",-1,1),new _("er",-1,1),new _("st",-1,2),new _("est",2,1)],u=[new _("ig",-1,1),new _("lich",-1,1)],a=[new _("end",-1,1),new _("ig",-1,2),new _("ung",-1,1),new _("lich",-1,3),new _("isch",-1,2),new _("ik",-1,2),new _("heit",-1,3),new _("keit",-1,4)],t=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],d=[117,30,5],l=[117,30,4],m=new p;function h(e,r,n){return!(!m.eq_s(1,e)||(m.ket=m.cursor,!m.in_grouping(t,97,252)))&&(m.slice_from(r),m.cursor=n,!0)}function w(){for(;!m.in_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}for(;!m.out_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}return!1}function f(){return i<=m.cursor}function b(){return n<=m.cursor}this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e=m.cursor;return function(){for(var e,r,n,i,s=m.cursor;;)if(e=m.cursor,m.bra=e,m.eq_s(1,"ß"))m.ket=m.cursor,m.slice_from("ss");else{if(e>=m.limit)break;m.cursor=e+1}for(m.cursor=s;;)for(r=m.cursor;;){if(n=m.cursor,m.in_grouping(t,97,252)){if(i=m.cursor,m.bra=i,h("u","U",n))break;if(m.cursor=i,h("y","Y",n))break}if(n>=m.limit)return m.cursor=r;m.cursor=n+1}}(),m.cursor=e,function(){i=m.limit,n=i;var e=m.cursor+3;0<=e&&e<=m.limit&&(r=e,w()||((i=m.cursor)<r&&(i=r),w()||(n=m.cursor)))}(),m.limit_backward=e,m.cursor=m.limit,function(){var e,r,n,i,s=m.limit-m.cursor;if(m.ket=m.cursor,(e=m.find_among_b(o,7))&&(m.bra=m.cursor,f()))switch(e){case 1:m.slice_del();break;case 2:m.slice_del(),m.ket=m.cursor,m.eq_s_b(1,"s")&&(m.bra=m.cursor,m.eq_s_b(3,"nis")&&m.slice_del());break;case 3:m.in_grouping_b(d,98,116)&&m.slice_del()}if(m.cursor=m.limit-s,m.ket=m.cursor,(e=m.find_among_b(c,4))&&(m.bra=m.cursor,f()))switch(e){case 1:m.slice_del();break;case 2:if(m.in_grouping_b(l,98,116)){var t=m.cursor-3;m.limit_backward<=t&&t<=m.limit&&(m.cursor=t,m.slice_del())}}if(m.cursor=m.limit-s,m.ket=m.cursor,(e=m.find_among_b(a,8))&&(m.bra=m.cursor,b()))switch(e){case 1:m.slice_del(),m.ket=m.cursor,m.eq_s_b(2,"ig")&&(m.bra=m.cursor,r=m.limit-m.cursor,m.eq_s_b(1,"e")||(m.cursor=m.limit-r,b()&&m.slice_del()));break;case 2:n=m.limit-m.cursor,m.eq_s_b(1,"e")||(m.cursor=m.limit-n,m.slice_del());break;case 3:if(m.slice_del(),m.ket=m.cursor,i=m.limit-m.cursor,!m.eq_s_b(2,"er")&&(m.cursor=m.limit-i,!m.eq_s_b(2,"en")))break;m.bra=m.cursor,f()&&m.slice_del();break;case 4:m.slice_del(),m.ket=m.cursor,(e=m.find_among_b(u,2))&&(m.bra=m.cursor,b()&&1==e&&m.slice_del())}}(),m.cursor=m.limit_backward,function(){for(var e,r;;){if(r=m.cursor,m.bra=r,!(e=m.find_among(s,6)))return;switch(m.ket=m.cursor,e){case 1:m.slice_from("y");break;case 2:case 5:m.slice_from("u");break;case 3:m.slice_from("a");break;case 4:m.slice_from("o");break;case 6:if(m.cursor>=m.limit)return;m.cursor++}}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.du.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.du.js
new file mode 100644
index 00000000..52632004
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.du.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,r;console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=(v=e.stemmerSupport.Among,q=e.stemmerSupport.SnowballProgram,r=new function(){var r,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(e){return(_.cursor=e)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return r<=_.cursor}function g(){var e=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-e,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var e;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.slice_del(),u=!0,g())))}function k(){var e;b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.eq_s_b(3,"gem")||(_.cursor=_.limit-e,_.slice_del(),g())))}this.setCurrent=function(e){_.setCurrent(e)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var e=_.cursor;return function(){for(var e,r,i,n=_.cursor;;){if(_.bra=_.cursor,e=_.find_among(o,11))switch(_.ket=_.cursor,e){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(r=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=r);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=r;else if(s(r))break}else if(s(r))break}(),_.cursor=e,i=_.limit,r=i,w()||((i=_.cursor)<3&&(i=3),w()||(r=_.cursor)),_.limit_backward=e,_.cursor=_.limit,function(){var e,r,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,e=_.find_among_b(c,5))switch(_.bra=_.cursor,e){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(r=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-r,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,e=_.find_among_b(a,6))switch(_.bra=_.cursor,e){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var e;;)if(_.bra=_.cursor,e=_.find_among(n,3))switch(_.ket=_.cursor,e){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.es.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.es.js
new file mode 100644
index 00000000..9de6c09c
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.es.js
@@ -0,0 +1 @@
+!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var C,P,s;e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=(C=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,s=new function(){var r,n,i,a=[new C("",-1,6),new C("á",0,1),new C("é",0,2),new C("í",0,3),new C("ó",0,4),new C("ú",0,5)],t=[new C("la",-1,-1),new C("sela",0,-1),new C("le",-1,-1),new C("me",-1,-1),new C("se",-1,-1),new C("lo",-1,-1),new C("selo",5,-1),new C("las",-1,-1),new C("selas",7,-1),new C("les",-1,-1),new C("los",-1,-1),new C("selos",10,-1),new C("nos",-1,-1)],o=[new C("ando",-1,6),new C("iendo",-1,6),new C("yendo",-1,7),new C("ándo",-1,2),new C("iéndo",-1,1),new C("ar",-1,6),new C("er",-1,6),new C("ir",-1,6),new C("ár",-1,3),new C("ér",-1,4),new C("ír",-1,5)],s=[new C("ic",-1,-1),new C("ad",-1,-1),new C("os",-1,-1),new C("iv",-1,1)],u=[new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,1)],w=[new C("ic",-1,1),new C("abil",-1,1),new C("iv",-1,1)],c=[new C("ica",-1,1),new C("ancia",-1,2),new C("encia",-1,5),new C("adora",-1,2),new C("osa",-1,1),new C("ista",-1,1),new C("iva",-1,9),new C("anza",-1,1),new C("logía",-1,3),new C("idad",-1,8),new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,2),new C("mente",-1,7),new C("amente",13,6),new C("ación",-1,2),new C("ución",-1,4),new C("ico",-1,1),new C("ismo",-1,1),new C("oso",-1,1),new C("amiento",-1,1),new C("imiento",-1,1),new C("ivo",-1,9),new C("ador",-1,2),new C("icas",-1,1),new C("ancias",-1,2),new C("encias",-1,5),new C("adoras",-1,2),new C("osas",-1,1),new C("istas",-1,1),new C("ivas",-1,9),new C("anzas",-1,1),new C("logías",-1,3),new C("idades",-1,8),new C("ables",-1,1),new C("ibles",-1,1),new C("aciones",-1,2),new C("uciones",-1,4),new C("adores",-1,2),new C("antes",-1,2),new C("icos",-1,1),new C("ismos",-1,1),new C("osos",-1,1),new C("amientos",-1,1),new C("imientos",-1,1),new C("ivos",-1,9)],m=[new C("ya",-1,1),new C("ye",-1,1),new C("yan",-1,1),new C("yen",-1,1),new C("yeron",-1,1),new C("yendo",-1,1),new C("yo",-1,1),new C("yas",-1,1),new C("yes",-1,1),new C("yais",-1,1),new C("yamos",-1,1),new C("yó",-1,1)],l=[new C("aba",-1,2),new C("ada",-1,2),new C("ida",-1,2),new C("ara",-1,2),new C("iera",-1,2),new C("ía",-1,2),new C("aría",5,2),new C("ería",5,2),new C("iría",5,2),new C("ad",-1,2),new C("ed",-1,2),new C("id",-1,2),new C("ase",-1,2),new C("iese",-1,2),new C("aste",-1,2),new C("iste",-1,2),new C("an",-1,2),new C("aban",16,2),new C("aran",16,2),new C("ieran",16,2),new C("ían",16,2),new C("arían",20,2),new C("erían",20,2),new C("irían",20,2),new C("en",-1,1),new C("asen",24,2),new C("iesen",24,2),new C("aron",-1,2),new C("ieron",-1,2),new C("arán",-1,2),new C("erán",-1,2),new C("irán",-1,2),new C("ado",-1,2),new C("ido",-1,2),new C("ando",-1,2),new C("iendo",-1,2),new C("ar",-1,2),new C("er",-1,2),new C("ir",-1,2),new C("as",-1,2),new C("abas",39,2),new C("adas",39,2),new C("idas",39,2),new C("aras",39,2),new C("ieras",39,2),new C("ías",39,2),new C("arías",45,2),new C("erías",45,2),new C("irías",45,2),new C("es",-1,1),new C("ases",49,2),new C("ieses",49,2),new C("abais",-1,2),new C("arais",-1,2),new C("ierais",-1,2),new C("íais",-1,2),new C("aríais",55,2),new C("eríais",55,2),new C("iríais",55,2),new C("aseis",-1,2),new C("ieseis",-1,2),new C("asteis",-1,2),new C("isteis",-1,2),new C("áis",-1,2),new C("éis",-1,1),new C("aréis",64,2),new C("eréis",64,2),new C("iréis",64,2),new C("ados",-1,2),new C("idos",-1,2),new C("amos",-1,2),new C("ábamos",70,2),new C("áramos",70,2),new C("iéramos",70,2),new C("íamos",70,2),new C("aríamos",74,2),new C("eríamos",74,2),new C("iríamos",74,2),new C("emos",-1,1),new C("aremos",78,2),new C("eremos",78,2),new C("iremos",78,2),new C("ásemos",78,2),new C("iésemos",78,2),new C("imos",-1,2),new C("arás",-1,2),new C("erás",-1,2),new C("irás",-1,2),new C("ís",-1,2),new C("ará",-1,2),new C("erá",-1,2),new C("irá",-1,2),new C("aré",-1,2),new C("eré",-1,2),new C("iré",-1,2),new C("ió",-1,2)],d=[new C("a",-1,1),new C("e",-1,2),new C("o",-1,1),new C("os",-1,1),new C("á",-1,1),new C("é",-1,2),new C("í",-1,1),new C("ó",-1,1)],b=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],f=new P;function _(){if(f.out_grouping(b,97,252)){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}return!1}return!0}function h(){var e,s=f.cursor;if(function(){if(f.in_grouping(b,97,252)){var e=f.cursor;if(_()){if(f.cursor=e,!f.in_grouping(b,97,252))return!0;for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}}return!1}return!0}()){if(f.cursor=s,!f.out_grouping(b,97,252))return;if(e=f.cursor,_()){if(f.cursor=e,!f.in_grouping(b,97,252)||f.cursor>=f.limit)return;f.cursor++}}i=f.cursor}function v(){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}return!0}function p(){return i<=f.cursor}function g(){return r<=f.cursor}function k(e,s){if(!g())return!0;f.slice_del(),f.ket=f.cursor;var r=f.find_among_b(e,s);return r&&(f.bra=f.cursor,1==r&&g()&&f.slice_del()),!1}function y(e){return!g()||(f.slice_del(),f.ket=f.cursor,f.eq_s_b(2,e)&&(f.bra=f.cursor,g()&&f.slice_del()),!1)}function q(){var e;if(f.ket=f.cursor,e=f.find_among_b(c,46)){switch(f.bra=f.cursor,e){case 1:if(!g())return!1;f.slice_del();break;case 2:if(y("ic"))return!1;break;case 3:if(!g())return!1;f.slice_from("log");break;case 4:if(!g())return!1;f.slice_from("u");break;case 5:if(!g())return!1;f.slice_from("ente");break;case 6:if(!(n<=f.cursor))return!1;f.slice_del(),f.ket=f.cursor,(e=f.find_among_b(s,4))&&(f.bra=f.cursor,g()&&(f.slice_del(),1==e&&(f.ket=f.cursor,f.eq_s_b(2,"at")&&(f.bra=f.cursor,g()&&f.slice_del()))));break;case 7:if(k(u,3))return!1;break;case 8:if(k(w,3))return!1;break;case 9:if(y("at"))return!1}return!0}return!1}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e,s=f.cursor;return e=f.cursor,i=f.limit,r=n=i,h(),f.cursor=e,v()&&(n=f.cursor,v()&&(r=f.cursor)),f.limit_backward=s,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,f.find_among_b(t,13)&&(f.bra=f.cursor,(e=f.find_among_b(o,11))&&p()))switch(e){case 1:f.bra=f.cursor,f.slice_from("iendo");break;case 2:f.bra=f.cursor,f.slice_from("ando");break;case 3:f.bra=f.cursor,f.slice_from("ar");break;case 4:f.bra=f.cursor,f.slice_from("er");break;case 5:f.bra=f.cursor,f.slice_from("ir");break;case 6:f.slice_del();break;case 7:f.eq_s_b(1,"u")&&f.slice_del()}}(),f.cursor=f.limit,q()||(f.cursor=f.limit,function(){var e,s;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(m,12),f.limit_backward=s,e)){if(f.bra=f.cursor,1==e){if(!f.eq_s_b(1,"u"))return!1;f.slice_del()}return!0}return!1}()||(f.cursor=f.limit,function(){var e,s,r,n;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(l,96),f.limit_backward=s,e))switch(f.bra=f.cursor,e){case 1:r=f.limit-f.cursor,f.eq_s_b(1,"u")?(n=f.limit-f.cursor,f.eq_s_b(1,"g")?f.cursor=f.limit-n:f.cursor=f.limit-r):f.cursor=f.limit-r,f.bra=f.cursor;case 2:f.slice_del()}}())),f.cursor=f.limit,function(){var e,s;if(f.ket=f.cursor,e=f.find_among_b(d,8))switch(f.bra=f.cursor,e){case 1:p()&&f.slice_del();break;case 2:p()&&(f.slice_del(),f.ket=f.cursor,f.eq_s_b(1,"u")&&(f.bra=f.cursor,s=f.limit-f.cursor,f.eq_s_b(1,"g")&&(f.cursor=f.limit-s,p()&&f.slice_del())))}}(),f.cursor=f.limit_backward,function(){for(var e;;){if(f.bra=f.cursor,e=f.find_among(a,6))switch(f.ket=f.cursor,e){case 1:f.slice_from("a");continue;case 2:f.slice_from("e");continue;case 3:f.slice_from("i");continue;case 4:f.slice_from("o");continue;case 5:f.slice_from("u");continue;case 6:if(f.cursor>=f.limit)break;f.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fi.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fi.js
new file mode 100644
index 00000000..2f9bf5ae
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fi.js
@@ -0,0 +1 @@
+!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,C,e;i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=(v=i.stemmerSupport.Among,C=i.stemmerSupport.SnowballProgram,e=new function(){var n,t,l,o,r=[new v("pa",-1,1),new v("sti",-1,2),new v("kaan",-1,1),new v("han",-1,1),new v("kin",-1,1),new v("hän",-1,1),new v("kään",-1,1),new v("ko",-1,1),new v("pä",-1,1),new v("kö",-1,1)],s=[new v("lla",-1,-1),new v("na",-1,-1),new v("ssa",-1,-1),new v("ta",-1,-1),new v("lta",3,-1),new v("sta",3,-1)],a=[new v("llä",-1,-1),new v("nä",-1,-1),new v("ssä",-1,-1),new v("tä",-1,-1),new v("ltä",3,-1),new v("stä",3,-1)],u=[new v("lle",-1,-1),new v("ine",-1,-1)],c=[new v("nsa",-1,3),new v("mme",-1,3),new v("nne",-1,3),new v("ni",-1,2),new v("si",-1,1),new v("an",-1,4),new v("en",-1,6),new v("än",-1,5),new v("nsä",-1,3)],i=[new v("aa",-1,-1),new v("ee",-1,-1),new v("ii",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1),new v("ää",-1,-1),new v("öö",-1,-1)],m=[new v("a",-1,8),new v("lla",0,-1),new v("na",0,-1),new v("ssa",0,-1),new v("ta",0,-1),new v("lta",4,-1),new v("sta",4,-1),new v("tta",4,9),new v("lle",-1,-1),new v("ine",-1,-1),new v("ksi",-1,-1),new v("n",-1,7),new v("han",11,1),new v("den",11,-1,q),new v("seen",11,-1,j),new v("hen",11,2),new v("tten",11,-1,q),new v("hin",11,3),new v("siin",11,-1,q),new v("hon",11,4),new v("hän",11,5),new v("hön",11,6),new v("ä",-1,8),new v("llä",22,-1),new v("nä",22,-1),new v("ssä",22,-1),new v("tä",22,-1),new v("ltä",26,-1),new v("stä",26,-1),new v("ttä",26,9)],w=[new v("eja",-1,-1),new v("mma",-1,1),new v("imma",1,-1),new v("mpa",-1,1),new v("impa",3,-1),new v("mmi",-1,1),new v("immi",5,-1),new v("mpi",-1,1),new v("impi",7,-1),new v("ejä",-1,-1),new v("mmä",-1,1),new v("immä",10,-1),new v("mpä",-1,1),new v("impä",12,-1)],_=[new v("i",-1,-1),new v("j",-1,-1)],k=[new v("mma",-1,1),new v("imma",0,-1)],b=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],e=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],f=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],h=new C;function p(){for(var i;i=h.cursor,!h.in_grouping(d,97,246);){if((h.cursor=i)>=h.limit)return!0;h.cursor++}for(h.cursor=i;!h.out_grouping(d,97,246);){if(h.cursor>=h.limit)return!0;h.cursor++}return!1}function g(){var i,e;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(r,10)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.in_grouping_b(f,97,246))return;break;case 2:if(!(l<=h.cursor))return}h.slice_del()}else h.limit_backward=e}function j(){return h.find_among_b(i,7)}function q(){return h.eq_s_b(1,"i")&&h.in_grouping_b(e,97,246)}this.setCurrent=function(i){h.setCurrent(i)},this.getCurrent=function(){return h.getCurrent()},this.stem=function(){var i,e=h.cursor;return o=h.limit,l=o,p()||(o=h.cursor,p()||(l=h.cursor)),n=!1,h.limit_backward=e,h.cursor=h.limit,g(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(c,9))switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:r=h.limit-h.cursor,h.eq_s_b(1,"k")||(h.cursor=h.limit-r,h.slice_del());break;case 2:h.slice_del(),h.ket=h.cursor,h.eq_s_b(3,"kse")&&(h.bra=h.cursor,h.slice_from("ksi"));break;case 3:h.slice_del();break;case 4:h.find_among_b(s,6)&&h.slice_del();break;case 5:h.find_among_b(a,6)&&h.slice_del();break;case 6:h.find_among_b(u,2)&&h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(m,30)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.eq_s_b(1,"a"))return;break;case 2:case 9:if(!h.eq_s_b(1,"e"))return;break;case 3:if(!h.eq_s_b(1,"i"))return;break;case 4:if(!h.eq_s_b(1,"o"))return;break;case 5:if(!h.eq_s_b(1,"ä"))return;break;case 6:if(!h.eq_s_b(1,"ö"))return;break;case 7:if(r=h.limit-h.cursor,!j()&&(h.cursor=h.limit-r,!h.eq_s_b(2,"ie"))){h.cursor=h.limit-r;break}if(h.cursor=h.limit-r,h.cursor<=h.limit_backward){h.cursor=h.limit-r;break}h.cursor--,h.bra=h.cursor;break;case 8:if(!h.in_grouping_b(d,97,246)||!h.out_grouping_b(d,97,246))return}h.slice_del(),n=!0}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=l)if(e=h.limit_backward,h.limit_backward=l,h.ket=h.cursor,i=h.find_among_b(w,14)){if(h.bra=h.cursor,h.limit_backward=e,1==i){if(r=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-r}h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,h.cursor=(n?h.cursor>=o&&(i=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.find_among_b(_,2)?(h.bra=h.cursor,h.limit_backward=i,h.slice_del()):h.limit_backward=i):(h.cursor=h.limit,function(){var i,e,r,n,t,s;if(h.cursor>=o){if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.eq_s_b(1,"t")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.in_grouping_b(d,97,246)&&(h.cursor=h.limit-r,h.slice_del(),h.limit_backward=e,n=h.limit-h.cursor,h.cursor>=l&&(h.cursor=l,t=h.limit_backward,h.limit_backward=h.cursor,h.cursor=h.limit-n,h.ket=h.cursor,i=h.find_among_b(k,2))))){if(h.bra=h.cursor,h.limit_backward=t,1==i){if(s=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-s}return h.slice_del()}h.limit_backward=e}}()),h.limit),function(){var i,e,r,n;if(h.cursor>=o){for(i=h.limit_backward,h.limit_backward=o,e=h.limit-h.cursor,j()&&(h.cursor=h.limit-e,h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.in_grouping_b(b,97,228)&&(h.bra=h.cursor,h.out_grouping_b(d,97,246)&&h.slice_del()),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"j")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.eq_s_b(1,"o")?h.slice_del():(h.cursor=h.limit-r,h.eq_s_b(1,"u")&&h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"o")&&(h.bra=h.cursor,h.eq_s_b(1,"j")&&h.slice_del()),h.cursor=h.limit-e,h.limit_backward=i;;){if(n=h.limit-h.cursor,h.out_grouping_b(d,97,246)){h.cursor=h.limit-n;break}if(h.cursor=h.limit-n,h.cursor<=h.limit_backward)return;h.cursor--}h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,t=h.slice_to(),h.eq_v_b(t)&&h.slice_del())}}(),!0}},function(i){return"function"==typeof i.update?i.update(function(i){return e.setCurrent(i),e.stem(),e.getCurrent()}):(e.setCurrent(i),e.stem(),e.getCurrent())}),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fr.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fr.js
new file mode 100644
index 00000000..078d0cab
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.fr.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,y,s;e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=(r=e.stemmerSupport.Among,y=e.stemmerSupport.SnowballProgram,s=new function(){var s,i,t,n=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],u=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],o=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],c=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],a=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],l=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],w=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],f=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],m=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],_=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],b=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],d=new y;function k(e,r,s){return!(!d.eq_s(1,e)||(d.ket=d.cursor,!d.in_grouping(_,97,251)))&&(d.slice_from(r),d.cursor=s,!0)}function p(e,r,s){return!!d.eq_s(1,e)&&(d.ket=d.cursor,d.slice_from(r),d.cursor=s,!0)}function g(){for(;!d.in_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}for(;!d.out_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}function q(){return t<=d.cursor}function v(){return i<=d.cursor}function h(){return s<=d.cursor}function z(){if(!function(){var e,r;if(d.ket=d.cursor,e=d.find_among_b(a,43)){switch(d.bra=d.cursor,e){case 1:if(!h())return!1;d.slice_del();break;case 2:if(!h())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU"));break;case 3:if(!h())return!1;d.slice_from("log");break;case 4:if(!h())return!1;d.slice_from("u");break;case 5:if(!h())return!1;d.slice_from("ent");break;case 6:if(!q())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(o,6))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&d.slice_del()));break;case 2:h()?d.slice_del():v()&&d.slice_from("eux");break;case 3:h()&&d.slice_del();break;case 4:q()&&d.slice_from("i")}break;case 7:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(c,3))switch(d.bra=d.cursor,e){case 1:h()?d.slice_del():d.slice_from("abl");break;case 2:h()?d.slice_del():d.slice_from("iqU");break;case 3:h()&&d.slice_del()}break;case 8:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")))){d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU");break}break;case 9:d.slice_from("eau");break;case 10:if(!v())return!1;d.slice_from("al");break;case 11:if(h())d.slice_del();else{if(!v())return!1;d.slice_from("eux")}break;case 12:if(!v()||!d.out_grouping_b(_,97,251))return!1;d.slice_del();break;case 13:return q()&&d.slice_from("ant"),!1;case 14:return q()&&d.slice_from("ent"),!1;case 15:return r=d.limit-d.cursor,d.in_grouping_b(_,97,251)&&q()&&(d.cursor=d.limit-r,d.slice_del()),!1}return!0}return!1}()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor<t)return!1;if(r=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,!(e=d.find_among_b(l,35)))return d.limit_backward=r,!1;if(d.bra=d.cursor,1==e){if(!d.out_grouping_b(_,97,251))return d.limit_backward=r,!1;d.slice_del()}return d.limit_backward=r,!0}()&&(d.cursor=d.limit,!function(){var e,r,s;if(d.cursor<t)return!1;if(r=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,!(e=d.find_among_b(w,38)))return d.limit_backward=r,!1;switch(d.bra=d.cursor,e){case 1:if(!h())return d.limit_backward=r,!1;d.slice_del();break;case 2:d.slice_del();break;case 3:d.slice_del(),s=d.limit-d.cursor,d.ket=d.cursor,d.eq_s_b(1,"e")?(d.bra=d.cursor,d.slice_del()):d.cursor=d.limit-s}return d.limit_backward=r,!0}())))return d.cursor=d.limit,void function(){var e,r,s,i,n=d.limit-d.cursor;if(d.ket=d.cursor,d.eq_s_b(1,"s")?(d.bra=d.cursor,r=d.limit-d.cursor,d.out_grouping_b(b,97,232)?(d.cursor=d.limit-r,d.slice_del()):d.cursor=d.limit-n):d.cursor=d.limit-n,d.cursor>=t){if(s=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,e=d.find_among_b(f,7))switch(d.bra=d.cursor,e){case 1:if(h()){if(i=d.limit-d.cursor,!d.eq_s_b(1,"s")&&(d.cursor=d.limit-i,!d.eq_s_b(1,"t")))break;d.slice_del()}break;case 2:d.slice_from("i");break;case 3:d.slice_del();break;case 4:d.eq_s_b(2,"gu")&&d.slice_del()}d.limit_backward=s}}();d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"Y")?(d.bra=d.cursor,d.slice_from("i")):(d.cursor=d.limit,d.eq_s_b(1,"ç")&&(d.bra=d.cursor,d.slice_from("c")))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e,r;;){if(e=d.cursor,d.in_grouping(_,97,251)){if(d.bra=d.cursor,r=d.cursor,k("u","U",e))continue;if(d.cursor=r,k("i","I",e))continue;if(d.cursor=r,p("y","Y",e))continue}if(d.cursor=e,!k("y","Y",d.bra=e)){if(d.cursor=e,d.eq_s(1,"q")&&(d.bra=d.cursor,p("u","U",e)))continue;if((d.cursor=e)>=d.limit)return;d.cursor++}}}(),d.cursor=r,function(){var e=d.cursor;if(t=d.limit,s=i=t,d.in_grouping(_,97,251)&&d.in_grouping(_,97,251)&&d.cursor<d.limit)d.cursor++;else if(d.cursor=e,!d.find_among(n,3)){d.cursor=e;do{if(d.cursor>=d.limit){d.cursor=t;break}d.cursor++}while(!d.in_grouping(_,97,251))}t=d.cursor,d.cursor=e,g()||(i=d.cursor,g()||(s=d.cursor))}(),d.limit_backward=r,d.cursor=d.limit,z(),d.cursor=d.limit,e=d.limit-d.cursor,d.find_among_b(m,5)&&(d.cursor=d.limit-e,d.ket=d.cursor,d.cursor>d.limit_backward&&(d.cursor--,d.bra=d.cursor,d.slice_del())),d.cursor=d.limit,function(){for(var e,r=1;d.out_grouping_b(_,97,251);)r--;if(r<=0){if(d.ket=d.cursor,e=d.limit-d.cursor,!d.eq_s_b(1,"é")&&(d.cursor=d.limit-e,!d.eq_s_b(1,"è")))return;d.bra=d.cursor,d.slice_from("e")}}(),d.cursor=d.limit_backward,function(){for(var e,r;r=d.cursor,d.bra=r,e=d.find_among(u,4);)switch(d.ket=d.cursor,e){case 1:d.slice_from("i");break;case 2:d.slice_from("u");break;case 3:d.slice_from("y");break;case 4:if(d.cursor>=d.limit)return;d.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.hu.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.hu.js
new file mode 100644
index 00000000..56a4b0dc
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.hu.js
@@ -0,0 +1 @@
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var p,_,n;e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=(p=e.stemmerSupport.Among,_=e.stemmerSupport.SnowballProgram,n=new function(){var r,i=[new p("cs",-1,-1),new p("dzs",-1,-1),new p("gy",-1,-1),new p("ly",-1,-1),new p("ny",-1,-1),new p("sz",-1,-1),new p("ty",-1,-1),new p("zs",-1,-1)],n=[new p("á",-1,1),new p("é",-1,2)],a=[new p("bb",-1,-1),new p("cc",-1,-1),new p("dd",-1,-1),new p("ff",-1,-1),new p("gg",-1,-1),new p("jj",-1,-1),new p("kk",-1,-1),new p("ll",-1,-1),new p("mm",-1,-1),new p("nn",-1,-1),new p("pp",-1,-1),new p("rr",-1,-1),new p("ccs",-1,-1),new p("ss",-1,-1),new p("zzs",-1,-1),new p("tt",-1,-1),new p("vv",-1,-1),new p("ggy",-1,-1),new p("lly",-1,-1),new p("nny",-1,-1),new p("tty",-1,-1),new p("ssz",-1,-1),new p("zz",-1,-1)],t=[new p("al",-1,1),new p("el",-1,2)],e=[new p("ba",-1,-1),new p("ra",-1,-1),new p("be",-1,-1),new p("re",-1,-1),new p("ig",-1,-1),new p("nak",-1,-1),new p("nek",-1,-1),new p("val",-1,-1),new p("vel",-1,-1),new p("ul",-1,-1),new p("nál",-1,-1),new p("nél",-1,-1),new p("ból",-1,-1),new p("ról",-1,-1),new p("tól",-1,-1),new p("bõl",-1,-1),new p("rõl",-1,-1),new p("tõl",-1,-1),new p("ül",-1,-1),new p("n",-1,-1),new p("an",19,-1),new p("ban",20,-1),new p("en",19,-1),new p("ben",22,-1),new p("képpen",22,-1),new p("on",19,-1),new p("ön",19,-1),new p("képp",-1,-1),new p("kor",-1,-1),new p("t",-1,-1),new p("at",29,-1),new p("et",29,-1),new p("ként",29,-1),new p("anként",32,-1),new p("enként",32,-1),new p("onként",32,-1),new p("ot",29,-1),new p("ért",29,-1),new p("öt",29,-1),new p("hez",-1,-1),new p("hoz",-1,-1),new p("höz",-1,-1),new p("vá",-1,-1),new p("vé",-1,-1)],s=[new p("án",-1,2),new p("én",-1,1),new p("ánként",-1,3)],c=[new p("stul",-1,2),new p("astul",0,1),new p("ástul",0,3),new p("stül",-1,2),new p("estül",3,1),new p("éstül",3,4)],w=[new p("á",-1,1),new p("é",-1,2)],o=[new p("k",-1,7),new p("ak",0,4),new p("ek",0,6),new p("ok",0,5),new p("ák",0,1),new p("ék",0,2),new p("ök",0,3)],l=[new p("éi",-1,7),new p("áéi",0,6),new p("ééi",0,5),new p("é",-1,9),new p("ké",3,4),new p("aké",4,1),new p("eké",4,1),new p("oké",4,1),new p("áké",4,3),new p("éké",4,2),new p("öké",4,1),new p("éé",3,8)],u=[new p("a",-1,18),new p("ja",0,17),new p("d",-1,16),new p("ad",2,13),new p("ed",2,13),new p("od",2,13),new p("ád",2,14),new p("éd",2,15),new p("öd",2,13),new p("e",-1,18),new p("je",9,17),new p("nk",-1,4),new p("unk",11,1),new p("ánk",11,2),new p("énk",11,3),new p("ünk",11,1),new p("uk",-1,8),new p("juk",16,7),new p("ájuk",17,5),new p("ük",-1,8),new p("jük",19,7),new p("éjük",20,6),new p("m",-1,12),new p("am",22,9),new p("em",22,9),new p("om",22,9),new p("ám",22,10),new p("ém",22,11),new p("o",-1,18),new p("á",-1,19),new p("é",-1,20)],m=[new p("id",-1,10),new p("aid",0,9),new p("jaid",1,6),new p("eid",0,9),new p("jeid",3,6),new p("áid",0,7),new p("éid",0,8),new p("i",-1,15),new p("ai",7,14),new p("jai",8,11),new p("ei",7,14),new p("jei",10,11),new p("ái",7,12),new p("éi",7,13),new p("itek",-1,24),new p("eitek",14,21),new p("jeitek",15,20),new p("éitek",14,23),new p("ik",-1,29),new p("aik",18,26),new p("jaik",19,25),new p("eik",18,26),new p("jeik",21,25),new p("áik",18,27),new p("éik",18,28),new p("ink",-1,20),new p("aink",25,17),new p("jaink",26,16),new p("eink",25,17),new p("jeink",28,16),new p("áink",25,18),new p("éink",25,19),new p("aitok",-1,21),new p("jaitok",32,20),new p("áitok",-1,22),new p("im",-1,5),new p("aim",35,4),new p("jaim",36,1),new p("eim",35,4),new p("jeim",38,1),new p("áim",35,2),new p("éim",35,3)],k=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],f=new _;function b(){return r<=f.cursor}function d(){var e=f.limit-f.cursor;return!!f.find_among_b(a,23)&&(f.cursor=f.limit-e,!0)}function g(){if(f.cursor>f.limit_backward){f.cursor--,f.ket=f.cursor;var e=f.cursor-1;f.limit_backward<=e&&e<=f.limit&&(f.cursor=e,f.bra=e,f.slice_del())}}function h(){f.ket=f.cursor,f.find_among_b(e,44)&&(f.bra=f.cursor,b()&&(f.slice_del(),function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(n,2))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e")}}()))}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e=f.cursor;return function(){var e,n=f.cursor;if(r=f.limit,f.in_grouping(k,97,252))for(;;){if(e=f.cursor,f.out_grouping(k,97,252))return f.cursor=e,f.find_among(i,8)||(f.cursor=e)<f.limit&&f.cursor++,r=f.cursor;if((f.cursor=e)>=f.limit)return r=e;f.cursor++}if(f.cursor=n,f.out_grouping(k,97,252)){for(;!f.in_grouping(k,97,252);){if(f.cursor>=f.limit)return;f.cursor++}r=f.cursor}}(),f.limit_backward=e,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(t,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,h(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(s,3))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("e");break;case 2:case 3:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(c,6))&&(f.bra=f.cursor,b()))switch(e){case 1:case 2:f.slice_del();break;case 3:f.slice_from("a");break;case 4:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(w,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(l,12))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 9:f.slice_del();break;case 2:case 5:case 8:f.slice_from("e");break;case 3:case 6:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(u,31))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:f.slice_del();break;case 2:case 5:case 10:case 14:case 19:f.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(m,42))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:f.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:f.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(o,7))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:f.slice_del()}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.it.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.it.js
new file mode 100644
index 00000000..50dddaa0
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.it.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var z,P,r;e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=(z=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,r=new function(){var o,t,s,a=[new z("",-1,7),new z("qu",0,6),new z("á",0,1),new z("é",0,2),new z("í",0,3),new z("ó",0,4),new z("ú",0,5)],u=[new z("",-1,3),new z("I",0,1),new z("U",0,2)],c=[new z("la",-1,-1),new z("cela",0,-1),new z("gliela",0,-1),new z("mela",0,-1),new z("tela",0,-1),new z("vela",0,-1),new z("le",-1,-1),new z("cele",6,-1),new z("gliele",6,-1),new z("mele",6,-1),new z("tele",6,-1),new z("vele",6,-1),new z("ne",-1,-1),new z("cene",12,-1),new z("gliene",12,-1),new z("mene",12,-1),new z("sene",12,-1),new z("tene",12,-1),new z("vene",12,-1),new z("ci",-1,-1),new z("li",-1,-1),new z("celi",20,-1),new z("glieli",20,-1),new z("meli",20,-1),new z("teli",20,-1),new z("veli",20,-1),new z("gli",20,-1),new z("mi",-1,-1),new z("si",-1,-1),new z("ti",-1,-1),new z("vi",-1,-1),new z("lo",-1,-1),new z("celo",31,-1),new z("glielo",31,-1),new z("melo",31,-1),new z("telo",31,-1),new z("velo",31,-1)],w=[new z("ando",-1,1),new z("endo",-1,1),new z("ar",-1,2),new z("er",-1,2),new z("ir",-1,2)],r=[new z("ic",-1,-1),new z("abil",-1,-1),new z("os",-1,-1),new z("iv",-1,1)],n=[new z("ic",-1,1),new z("abil",-1,1),new z("iv",-1,1)],i=[new z("ica",-1,1),new z("logia",-1,3),new z("osa",-1,1),new z("ista",-1,1),new z("iva",-1,9),new z("anza",-1,1),new z("enza",-1,5),new z("ice",-1,1),new z("atrice",7,1),new z("iche",-1,1),new z("logie",-1,3),new z("abile",-1,1),new z("ibile",-1,1),new z("usione",-1,4),new z("azione",-1,2),new z("uzione",-1,4),new z("atore",-1,2),new z("ose",-1,1),new z("ante",-1,1),new z("mente",-1,1),new z("amente",19,7),new z("iste",-1,1),new z("ive",-1,9),new z("anze",-1,1),new z("enze",-1,5),new z("ici",-1,1),new z("atrici",25,1),new z("ichi",-1,1),new z("abili",-1,1),new z("ibili",-1,1),new z("ismi",-1,1),new z("usioni",-1,4),new z("azioni",-1,2),new z("uzioni",-1,4),new z("atori",-1,2),new z("osi",-1,1),new z("anti",-1,1),new z("amenti",-1,6),new z("imenti",-1,6),new z("isti",-1,1),new z("ivi",-1,9),new z("ico",-1,1),new z("ismo",-1,1),new z("oso",-1,1),new z("amento",-1,6),new z("imento",-1,6),new z("ivo",-1,9),new z("ità",-1,8),new z("istà",-1,1),new z("istè",-1,1),new z("istì",-1,1)],l=[new z("isca",-1,1),new z("enda",-1,1),new z("ata",-1,1),new z("ita",-1,1),new z("uta",-1,1),new z("ava",-1,1),new z("eva",-1,1),new z("iva",-1,1),new z("erebbe",-1,1),new z("irebbe",-1,1),new z("isce",-1,1),new z("ende",-1,1),new z("are",-1,1),new z("ere",-1,1),new z("ire",-1,1),new z("asse",-1,1),new z("ate",-1,1),new z("avate",16,1),new z("evate",16,1),new z("ivate",16,1),new z("ete",-1,1),new z("erete",20,1),new z("irete",20,1),new z("ite",-1,1),new z("ereste",-1,1),new z("ireste",-1,1),new z("ute",-1,1),new z("erai",-1,1),new z("irai",-1,1),new z("isci",-1,1),new z("endi",-1,1),new z("erei",-1,1),new z("irei",-1,1),new z("assi",-1,1),new z("ati",-1,1),new z("iti",-1,1),new z("eresti",-1,1),new z("iresti",-1,1),new z("uti",-1,1),new z("avi",-1,1),new z("evi",-1,1),new z("ivi",-1,1),new z("isco",-1,1),new z("ando",-1,1),new z("endo",-1,1),new z("Yamo",-1,1),new z("iamo",-1,1),new z("avamo",-1,1),new z("evamo",-1,1),new z("ivamo",-1,1),new z("eremo",-1,1),new z("iremo",-1,1),new z("assimo",-1,1),new z("ammo",-1,1),new z("emmo",-1,1),new z("eremmo",54,1),new z("iremmo",54,1),new z("immo",-1,1),new z("ano",-1,1),new z("iscano",58,1),new z("avano",58,1),new z("evano",58,1),new z("ivano",58,1),new z("eranno",-1,1),new z("iranno",-1,1),new z("ono",-1,1),new z("iscono",65,1),new z("arono",65,1),new z("erono",65,1),new z("irono",65,1),new z("erebbero",-1,1),new z("irebbero",-1,1),new z("assero",-1,1),new z("essero",-1,1),new z("issero",-1,1),new z("ato",-1,1),new z("ito",-1,1),new z("uto",-1,1),new z("avo",-1,1),new z("evo",-1,1),new z("ivo",-1,1),new z("ar",-1,1),new z("ir",-1,1),new z("erà",-1,1),new z("irà",-1,1),new z("erò",-1,1),new z("irò",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],f=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],v=[17],b=new P;function d(e,r,n){return!(!b.eq_s(1,e)||(b.ket=b.cursor,!b.in_grouping(m,97,249)))&&(b.slice_from(r),b.cursor=n,!0)}function _(e){if(b.cursor=e,!b.in_grouping(m,97,249))return!1;for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function g(){var e,r=b.cursor;if(!function(){if(b.in_grouping(m,97,249)){var e=b.cursor;if(b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return _(e);b.cursor++}return!0}return _(e)}return!1}()){if(b.cursor=r,!b.out_grouping(m,97,249))return;if(e=b.cursor,b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return b.cursor=e,void(b.in_grouping(m,97,249)&&b.cursor<b.limit&&b.cursor++);b.cursor++}return void(s=b.cursor)}if(b.cursor=e,!b.in_grouping(m,97,249)||b.cursor>=b.limit)return;b.cursor++}s=b.cursor}function p(){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function k(){return s<=b.cursor}function h(){return o<=b.cursor}function q(){var e;if(b.ket=b.cursor,!(e=b.find_among_b(i,51)))return!1;switch(b.bra=b.cursor,e){case 1:if(!h())return!1;b.slice_del();break;case 2:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del());break;case 3:if(!h())return!1;b.slice_from("log");break;case 4:if(!h())return!1;b.slice_from("u");break;case 5:if(!h())return!1;b.slice_from("ente");break;case 6:if(!k())return!1;b.slice_del();break;case 7:if(!(t<=b.cursor))return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(r,4))&&(b.bra=b.cursor,h()&&(b.slice_del(),1==e&&(b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&b.slice_del()))));break;case 8:if(!h())return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(n,3))&&(b.bra=b.cursor,1==e&&h()&&b.slice_del());break;case 9:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del())))}return!0}function C(){var e;e=b.limit-b.cursor,b.ket=b.cursor,b.in_grouping_b(f,97,242)&&(b.bra=b.cursor,k()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(1,"i")&&(b.bra=b.cursor,k())))?b.slice_del():b.cursor=b.limit-e,b.ket=b.cursor,b.eq_s_b(1,"h")&&(b.bra=b.cursor,b.in_grouping_b(v,99,103)&&k()&&b.slice_del())}this.setCurrent=function(e){b.setCurrent(e)},this.getCurrent=function(){return b.getCurrent()},this.stem=function(){var e,r,n,i=b.cursor;return function(){for(var e,r,n,i,o=b.cursor;;){if(b.bra=b.cursor,e=b.find_among(a,7))switch(b.ket=b.cursor,e){case 1:b.slice_from("à");continue;case 2:b.slice_from("è");continue;case 3:b.slice_from("ì");continue;case 4:b.slice_from("ò");continue;case 5:b.slice_from("ù");continue;case 6:b.slice_from("qU");continue;case 7:if(b.cursor>=b.limit)break;b.cursor++;continue}break}for(b.cursor=o;;)for(r=b.cursor;;){if(n=b.cursor,b.in_grouping(m,97,249)){if(b.bra=b.cursor,i=b.cursor,d("u","U",n))break;if(b.cursor=i,d("i","I",n))break}if(b.cursor=n,b.cursor>=b.limit)return b.cursor=r;b.cursor++}}(),b.cursor=i,e=b.cursor,s=b.limit,o=t=s,g(),b.cursor=e,p()&&(t=b.cursor,p()&&(o=b.cursor)),b.limit_backward=i,b.cursor=b.limit,function(){var e;if(b.ket=b.cursor,b.find_among_b(c,37)&&(b.bra=b.cursor,(e=b.find_among_b(w,5))&&k()))switch(e){case 1:b.slice_del();break;case 2:b.slice_from("e")}}(),b.cursor=b.limit,q()||(b.cursor=b.limit,b.cursor>=s&&(n=b.limit_backward,b.limit_backward=s,b.ket=b.cursor,(r=b.find_among_b(l,87))&&(b.bra=b.cursor,1==r&&b.slice_del()),b.limit_backward=n)),b.cursor=b.limit,C(),b.cursor=b.limit_backward,function(){for(var e;b.bra=b.cursor,e=b.find_among(u,3);)switch(b.ket=b.cursor,e){case 1:b.slice_from("i");break;case 2:b.slice_from("u");break;case 3:if(b.cursor>=b.limit)return;b.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ja.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ja.js
new file mode 100644
index 00000000..69f62025
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ja.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(m){if(void 0===m)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===m.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var l="2"==m.version[0];m.ja=function(){this.pipeline.reset(),this.pipeline.add(m.ja.trimmer,m.ja.stopWordFilter,m.ja.stemmer),l?this.tokenizer=m.ja.tokenizer:(m.tokenizer&&(m.tokenizer=m.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=m.ja.tokenizer))};var j=new m.TinySegmenter;m.ja.tokenizer=function(e){var r,t,i,n,o,s,p,a,u;if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return l?new m.Token(e.toLowerCase()):e.toLowerCase()});for(r=(t=e.toString().toLowerCase().replace(/^\s+/,"")).length-1;0<=r;r--)if(/\S/.test(t.charAt(r))){t=t.substring(0,r+1);break}for(o=[],i=t.length,p=a=0;a<=i;a++)if(s=a-p,t.charAt(a).match(/\s/)||a==i){if(0<s)for(n=j.segment(t.slice(p,a)).filter(function(e){return!!e}),u=p,r=0;r<n.length;r++)l?o.push(new m.Token(n[r],{position:[u,n[r].length],index:o.length})):o.push(n[r]),u+=n[r].length;p=a+1}return o},m.ja.stemmer=function(e){return e},m.Pipeline.registerFunction(m.ja.stemmer,"stemmer-ja"),m.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",m.ja.trimmer=m.trimmerSupport.generateTrimmer(m.ja.wordCharacters),m.Pipeline.registerFunction(m.ja.trimmer,"trimmer-ja"),m.ja.stopWordFilter=m.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),m.Pipeline.registerFunction(m.ja.stopWordFilter,"stopWordFilter-ja"),m.jp=m.ja,m.Pipeline.registerFunction(m.jp.stemmer,"stemmer-jp"),m.Pipeline.registerFunction(m.jp.trimmer,"trimmer-jp"),m.Pipeline.registerFunction(m.jp.stopWordFilter,"stopWordFilter-jp")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.jp.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.jp.js
new file mode 100644
index 00000000..c055ebaf
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.jp.js
@@ -0,0 +1 @@
+module.exports=require("./lunr.ja"); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.multi.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.multi.js
new file mode 100644
index 00000000..8a145c91
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.multi.js
@@ -0,0 +1 @@
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(o){o.multiLanguage=function(){for(var e=Array.prototype.slice.call(arguments),i=e.join("-"),t="",r=[],n=[],s=0;s<e.length;++s)"en"==e[s]?(t+="\\w",r.unshift(o.stopWordFilter),r.push(o.stemmer),n.push(o.stemmer)):(t+=o[e[s]].wordCharacters,r.unshift(o[e[s]].stopWordFilter),r.push(o[e[s]].stemmer),n.push(o[e[s]].stemmer));var p=o.trimmerSupport.generateTrimmer(t);return o.Pipeline.registerFunction(p,"lunr-multi-trimmer-"+i),r.unshift(p),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,r),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,n))}}}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.nl.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.nl.js
new file mode 100644
index 00000000..273f4ad0
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.nl.js
@@ -0,0 +1 @@
+!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,e;r.nl=function(){this.pipeline.reset(),this.pipeline.add(r.nl.trimmer,r.nl.stopWordFilter,r.nl.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.nl.stemmer))},r.nl.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.nl.trimmer=r.trimmerSupport.generateTrimmer(r.nl.wordCharacters),r.Pipeline.registerFunction(r.nl.trimmer,"trimmer-nl"),r.nl.stemmer=(v=r.stemmerSupport.Among,q=r.stemmerSupport.SnowballProgram,e=new function(){var e,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(r){return(_.cursor=r)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return e<=_.cursor}function g(){var r=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var r;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),u=!0,g())))}function k(){var r;b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),g())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var r=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(o,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(s(e))break}else if(s(e))break}(),_.cursor=r,i=_.limit,e=i,w()||((i=_.cursor)<3&&(i=3),w()||(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var r,e,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(n,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.no.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.no.js
new file mode 100644
index 00000000..3d156b9c
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.no.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var o,s,a=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],m=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],u=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],d=[119,125,149,1],c=new n;this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r,n,i,t=c.cursor;return function(){var e,r=c.cursor+3;if(s=c.limit,0<=r||r<=c.limit){for(o=r;;){if(e=c.cursor,c.in_grouping(u,97,248)){c.cursor=e;break}if(e>=c.limit)return;c.cursor=e+1}for(;!c.out_grouping(u,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(s=c.cursor)<o&&(s=o)}}(),c.limit_backward=t,c.cursor=c.limit,function(){var e,r,n;if(c.cursor>=s&&(r=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,e=c.find_among_b(a,29),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:n=c.limit-c.cursor,c.in_grouping_b(d,98,122)?c.slice_del():(c.cursor=c.limit-n,c.eq_s_b(1,"k")&&c.out_grouping_b(u,97,248)&&c.slice_del());break;case 3:c.slice_from("er")}}(),c.cursor=c.limit,r=c.limit-c.cursor,c.cursor>=s&&(e=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,c.find_among_b(m,2)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e),c.cursor=c.limit,c.cursor>=s&&(i=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,(n=c.find_among_b(l,11))?(c.bra=c.cursor,c.limit_backward=i,1==n&&c.slice_del()):c.limit_backward=i),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.pt.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.pt.js
new file mode 100644
index 00000000..f50fc9fa
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.pt.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var j,C,r;e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=(j=e.stemmerSupport.Among,C=e.stemmerSupport.SnowballProgram,r=new function(){var s,n,i,o=[new j("",-1,3),new j("ã",0,1),new j("õ",0,2)],a=[new j("",-1,3),new j("a~",0,1),new j("o~",0,2)],r=[new j("ic",-1,-1),new j("ad",-1,-1),new j("os",-1,-1),new j("iv",-1,1)],t=[new j("ante",-1,1),new j("avel",-1,1),new j("ível",-1,1)],u=[new j("ic",-1,1),new j("abil",-1,1),new j("iv",-1,1)],w=[new j("ica",-1,1),new j("ância",-1,1),new j("ência",-1,4),new j("ira",-1,9),new j("adora",-1,1),new j("osa",-1,1),new j("ista",-1,1),new j("iva",-1,8),new j("eza",-1,1),new j("logía",-1,2),new j("idade",-1,7),new j("ante",-1,1),new j("mente",-1,6),new j("amente",12,5),new j("ável",-1,1),new j("ível",-1,1),new j("ución",-1,3),new j("ico",-1,1),new j("ismo",-1,1),new j("oso",-1,1),new j("amento",-1,1),new j("imento",-1,1),new j("ivo",-1,8),new j("aça~o",-1,1),new j("ador",-1,1),new j("icas",-1,1),new j("ências",-1,4),new j("iras",-1,9),new j("adoras",-1,1),new j("osas",-1,1),new j("istas",-1,1),new j("ivas",-1,8),new j("ezas",-1,1),new j("logías",-1,2),new j("idades",-1,7),new j("uciones",-1,3),new j("adores",-1,1),new j("antes",-1,1),new j("aço~es",-1,1),new j("icos",-1,1),new j("ismos",-1,1),new j("osos",-1,1),new j("amentos",-1,1),new j("imentos",-1,1),new j("ivos",-1,8)],m=[new j("ada",-1,1),new j("ida",-1,1),new j("ia",-1,1),new j("aria",2,1),new j("eria",2,1),new j("iria",2,1),new j("ara",-1,1),new j("era",-1,1),new j("ira",-1,1),new j("ava",-1,1),new j("asse",-1,1),new j("esse",-1,1),new j("isse",-1,1),new j("aste",-1,1),new j("este",-1,1),new j("iste",-1,1),new j("ei",-1,1),new j("arei",16,1),new j("erei",16,1),new j("irei",16,1),new j("am",-1,1),new j("iam",20,1),new j("ariam",21,1),new j("eriam",21,1),new j("iriam",21,1),new j("aram",20,1),new j("eram",20,1),new j("iram",20,1),new j("avam",20,1),new j("em",-1,1),new j("arem",29,1),new j("erem",29,1),new j("irem",29,1),new j("assem",29,1),new j("essem",29,1),new j("issem",29,1),new j("ado",-1,1),new j("ido",-1,1),new j("ando",-1,1),new j("endo",-1,1),new j("indo",-1,1),new j("ara~o",-1,1),new j("era~o",-1,1),new j("ira~o",-1,1),new j("ar",-1,1),new j("er",-1,1),new j("ir",-1,1),new j("as",-1,1),new j("adas",47,1),new j("idas",47,1),new j("ias",47,1),new j("arias",50,1),new j("erias",50,1),new j("irias",50,1),new j("aras",47,1),new j("eras",47,1),new j("iras",47,1),new j("avas",47,1),new j("es",-1,1),new j("ardes",58,1),new j("erdes",58,1),new j("irdes",58,1),new j("ares",58,1),new j("eres",58,1),new j("ires",58,1),new j("asses",58,1),new j("esses",58,1),new j("isses",58,1),new j("astes",58,1),new j("estes",58,1),new j("istes",58,1),new j("is",-1,1),new j("ais",71,1),new j("eis",71,1),new j("areis",73,1),new j("ereis",73,1),new j("ireis",73,1),new j("áreis",73,1),new j("éreis",73,1),new j("íreis",73,1),new j("ásseis",73,1),new j("ésseis",73,1),new j("ísseis",73,1),new j("áveis",73,1),new j("íeis",73,1),new j("aríeis",84,1),new j("eríeis",84,1),new j("iríeis",84,1),new j("ados",-1,1),new j("idos",-1,1),new j("amos",-1,1),new j("áramos",90,1),new j("éramos",90,1),new j("íramos",90,1),new j("ávamos",90,1),new j("íamos",90,1),new j("aríamos",95,1),new j("eríamos",95,1),new j("iríamos",95,1),new j("emos",-1,1),new j("aremos",99,1),new j("eremos",99,1),new j("iremos",99,1),new j("ássemos",99,1),new j("êssemos",99,1),new j("íssemos",99,1),new j("imos",-1,1),new j("armos",-1,1),new j("ermos",-1,1),new j("irmos",-1,1),new j("ámos",-1,1),new j("arás",-1,1),new j("erás",-1,1),new j("irás",-1,1),new j("eu",-1,1),new j("iu",-1,1),new j("ou",-1,1),new j("ará",-1,1),new j("erá",-1,1),new j("irá",-1,1)],c=[new j("a",-1,1),new j("i",-1,1),new j("o",-1,1),new j("os",-1,1),new j("á",-1,1),new j("í",-1,1),new j("ó",-1,1)],l=[new j("e",-1,1),new j("ç",-1,2),new j("é",-1,1),new j("ê",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],d=new C;function v(){if(d.out_grouping(f,97,250)){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}return!0}function p(){var e,r,s=d.cursor;if(d.in_grouping(f,97,250))if(e=d.cursor,v()){if(d.cursor=e,function(){if(d.in_grouping(f,97,250))for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return i=d.cursor,!0}())return}else i=d.cursor;if(d.cursor=s,d.out_grouping(f,97,250)){if(r=d.cursor,v()){if(d.cursor=r,!d.in_grouping(f,97,250)||d.cursor>=d.limit)return;d.cursor++}i=d.cursor}}function _(){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return!0}function h(){return i<=d.cursor}function b(){return s<=d.cursor}function g(){var e;if(d.ket=d.cursor,!(e=d.find_among_b(w,45)))return!1;switch(d.bra=d.cursor,e){case 1:if(!b())return!1;d.slice_del();break;case 2:if(!b())return!1;d.slice_from("log");break;case 3:if(!b())return!1;d.slice_from("u");break;case 4:if(!b())return!1;d.slice_from("ente");break;case 5:if(!(n<=d.cursor))return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(r,4))&&(d.bra=d.cursor,b()&&(d.slice_del(),1==e&&(d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del()))));break;case 6:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(t,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 7:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(u,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 8:if(!b())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del());break;case 9:if(!h()||!d.eq_s_b(1,"e"))return!1;d.slice_from("ir")}return!0}function k(e,r){if(d.eq_s_b(1,e)){d.bra=d.cursor;var s=d.limit-d.cursor;if(d.eq_s_b(1,r))return d.cursor=d.limit-s,h()&&d.slice_del(),!1}return!0}function q(){if(!g()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor>=i){if(r=d.limit_backward,d.limit_backward=i,d.ket=d.cursor,e=d.find_among_b(m,120))return d.bra=d.cursor,1==e&&d.slice_del(),d.limit_backward=r,!0;d.limit_backward=r}return!1}()))return d.cursor=d.limit,d.ket=d.cursor,void((e=d.find_among_b(c,7))&&(d.bra=d.cursor,1==e&&h()&&d.slice_del()));var e;d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"i")&&(d.bra=d.cursor,d.eq_s_b(1,"c")&&(d.cursor=d.limit,h()&&d.slice_del()))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(o,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("a~");continue;case 2:d.slice_from("o~");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),d.cursor=r,e=d.cursor,i=d.limit,s=n=i,p(),d.cursor=e,_()&&(n=d.cursor,_()&&(s=d.cursor)),d.limit_backward=r,d.cursor=d.limit,q(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,e=d.find_among_b(l,4))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.limit,d.cursor,k("u","g")&&k("i","c"));break;case 2:d.slice_from("c")}}(),d.cursor=d.limit_backward,function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(a,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("ã");continue;case 2:d.slice_from("õ");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ro.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ro.js
new file mode 100644
index 00000000..b19627e1
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ro.js
@@ -0,0 +1 @@
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,z,i;e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=(h=e.stemmerSupport.Among,z=e.stemmerSupport.SnowballProgram,i=new function(){var r,n,t,a,o=[new h("",-1,3),new h("I",0,1),new h("U",0,2)],s=[new h("ea",-1,3),new h("aţia",-1,7),new h("aua",-1,2),new h("iua",-1,4),new h("aţie",-1,7),new h("ele",-1,3),new h("ile",-1,5),new h("iile",6,4),new h("iei",-1,4),new h("atei",-1,6),new h("ii",-1,4),new h("ului",-1,1),new h("ul",-1,1),new h("elor",-1,3),new h("ilor",-1,4),new h("iilor",14,4)],c=[new h("icala",-1,4),new h("iciva",-1,4),new h("ativa",-1,5),new h("itiva",-1,6),new h("icale",-1,4),new h("aţiune",-1,5),new h("iţiune",-1,6),new h("atoare",-1,5),new h("itoare",-1,6),new h("ătoare",-1,5),new h("icitate",-1,4),new h("abilitate",-1,1),new h("ibilitate",-1,2),new h("ivitate",-1,3),new h("icive",-1,4),new h("ative",-1,5),new h("itive",-1,6),new h("icali",-1,4),new h("atori",-1,5),new h("icatori",18,4),new h("itori",-1,6),new h("ători",-1,5),new h("icitati",-1,4),new h("abilitati",-1,1),new h("ivitati",-1,3),new h("icivi",-1,4),new h("ativi",-1,5),new h("itivi",-1,6),new h("icităi",-1,4),new h("abilităi",-1,1),new h("ivităi",-1,3),new h("icităţi",-1,4),new h("abilităţi",-1,1),new h("ivităţi",-1,3),new h("ical",-1,4),new h("ator",-1,5),new h("icator",35,4),new h("itor",-1,6),new h("ător",-1,5),new h("iciv",-1,4),new h("ativ",-1,5),new h("itiv",-1,6),new h("icală",-1,4),new h("icivă",-1,4),new h("ativă",-1,5),new h("itivă",-1,6)],u=[new h("ica",-1,1),new h("abila",-1,1),new h("ibila",-1,1),new h("oasa",-1,1),new h("ata",-1,1),new h("ita",-1,1),new h("anta",-1,1),new h("ista",-1,3),new h("uta",-1,1),new h("iva",-1,1),new h("ic",-1,1),new h("ice",-1,1),new h("abile",-1,1),new h("ibile",-1,1),new h("isme",-1,3),new h("iune",-1,2),new h("oase",-1,1),new h("ate",-1,1),new h("itate",17,1),new h("ite",-1,1),new h("ante",-1,1),new h("iste",-1,3),new h("ute",-1,1),new h("ive",-1,1),new h("ici",-1,1),new h("abili",-1,1),new h("ibili",-1,1),new h("iuni",-1,2),new h("atori",-1,1),new h("osi",-1,1),new h("ati",-1,1),new h("itati",30,1),new h("iti",-1,1),new h("anti",-1,1),new h("isti",-1,3),new h("uti",-1,1),new h("işti",-1,3),new h("ivi",-1,1),new h("ităi",-1,1),new h("oşi",-1,1),new h("ităţi",-1,1),new h("abil",-1,1),new h("ibil",-1,1),new h("ism",-1,3),new h("ator",-1,1),new h("os",-1,1),new h("at",-1,1),new h("it",-1,1),new h("ant",-1,1),new h("ist",-1,3),new h("ut",-1,1),new h("iv",-1,1),new h("ică",-1,1),new h("abilă",-1,1),new h("ibilă",-1,1),new h("oasă",-1,1),new h("ată",-1,1),new h("ită",-1,1),new h("antă",-1,1),new h("istă",-1,3),new h("ută",-1,1),new h("ivă",-1,1)],w=[new h("ea",-1,1),new h("ia",-1,1),new h("esc",-1,1),new h("ăsc",-1,1),new h("ind",-1,1),new h("ând",-1,1),new h("are",-1,1),new h("ere",-1,1),new h("ire",-1,1),new h("âre",-1,1),new h("se",-1,2),new h("ase",10,1),new h("sese",10,2),new h("ise",10,1),new h("use",10,1),new h("âse",10,1),new h("eşte",-1,1),new h("ăşte",-1,1),new h("eze",-1,1),new h("ai",-1,1),new h("eai",19,1),new h("iai",19,1),new h("sei",-1,2),new h("eşti",-1,1),new h("ăşti",-1,1),new h("ui",-1,1),new h("ezi",-1,1),new h("âi",-1,1),new h("aşi",-1,1),new h("seşi",-1,2),new h("aseşi",29,1),new h("seseşi",29,2),new h("iseşi",29,1),new h("useşi",29,1),new h("âseşi",29,1),new h("işi",-1,1),new h("uşi",-1,1),new h("âşi",-1,1),new h("aţi",-1,2),new h("eaţi",38,1),new h("iaţi",38,1),new h("eţi",-1,2),new h("iţi",-1,2),new h("âţi",-1,2),new h("arăţi",-1,1),new h("serăţi",-1,2),new h("aserăţi",45,1),new h("seserăţi",45,2),new h("iserăţi",45,1),new h("userăţi",45,1),new h("âserăţi",45,1),new h("irăţi",-1,1),new h("urăţi",-1,1),new h("ârăţi",-1,1),new h("am",-1,1),new h("eam",54,1),new h("iam",54,1),new h("em",-1,2),new h("asem",57,1),new h("sesem",57,2),new h("isem",57,1),new h("usem",57,1),new h("âsem",57,1),new h("im",-1,2),new h("âm",-1,2),new h("ăm",-1,2),new h("arăm",65,1),new h("serăm",65,2),new h("aserăm",67,1),new h("seserăm",67,2),new h("iserăm",67,1),new h("userăm",67,1),new h("âserăm",67,1),new h("irăm",65,1),new h("urăm",65,1),new h("ârăm",65,1),new h("au",-1,1),new h("eau",76,1),new h("iau",76,1),new h("indu",-1,1),new h("ându",-1,1),new h("ez",-1,1),new h("ească",-1,1),new h("ară",-1,1),new h("seră",-1,2),new h("aseră",84,1),new h("seseră",84,2),new h("iseră",84,1),new h("useră",84,1),new h("âseră",84,1),new h("iră",-1,1),new h("ură",-1,1),new h("âră",-1,1),new h("ează",-1,1)],i=[new h("a",-1,1),new h("e",-1,1),new h("ie",1,1),new h("i",-1,1),new h("ă",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],l=new z;function f(e,i){l.eq_s(1,e)&&(l.ket=l.cursor,l.in_grouping(m,97,259)&&l.slice_from(i))}function p(){if(l.out_grouping(m,97,259)){for(;!l.in_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}return!0}function d(){var e,i,r=l.cursor;if(l.in_grouping(m,97,259)){if(e=l.cursor,!p())return void(a=l.cursor);if(l.cursor=e,!function(){if(l.in_grouping(m,97,259))for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}())return void(a=l.cursor)}l.cursor=r,l.out_grouping(m,97,259)&&(i=l.cursor,p()&&(l.cursor=i,l.in_grouping(m,97,259)&&l.cursor<l.limit&&l.cursor++),a=l.cursor)}function b(){for(;!l.in_grouping(m,97,259);){if(l.cursor>=l.limit)return!1;l.cursor++}for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function v(){return t<=l.cursor}function _(){var e,i=l.limit-l.cursor;if(l.ket=l.cursor,(e=l.find_among_b(c,46))&&(l.bra=l.cursor,v())){switch(e){case 1:l.slice_from("abil");break;case 2:l.slice_from("ibil");break;case 3:l.slice_from("iv");break;case 4:l.slice_from("ic");break;case 5:l.slice_from("at");break;case 6:l.slice_from("it")}return r=!0,l.cursor=l.limit-i,!0}return!1}function g(){var e,i;for(r=!1;;)if(i=l.limit-l.cursor,!_()){l.cursor=l.limit-i;break}if(l.ket=l.cursor,(e=l.find_among_b(u,62))&&(l.bra=l.cursor,n<=l.cursor)){switch(e){case 1:l.slice_del();break;case 2:l.eq_s_b(1,"ţ")&&(l.bra=l.cursor,l.slice_from("t"));break;case 3:l.slice_from("ist")}r=!0}}function k(){var e;l.ket=l.cursor,(e=l.find_among_b(i,5))&&(l.bra=l.cursor,a<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var e,i=l.cursor;return function(){for(var e,i;e=l.cursor,l.in_grouping(m,97,259)&&(i=l.cursor,l.bra=i,f("u","U"),l.cursor=i,f("i","I")),l.cursor=e,!(l.cursor>=l.limit);)l.cursor++}(),l.cursor=i,e=l.cursor,a=l.limit,n=t=a,d(),l.cursor=e,b()&&(t=l.cursor,b()&&(n=l.cursor)),l.limit_backward=i,l.cursor=l.limit,function(){var e,i;if(l.ket=l.cursor,(e=l.find_among_b(s,16))&&(l.bra=l.cursor,v()))switch(e){case 1:l.slice_del();break;case 2:l.slice_from("a");break;case 3:l.slice_from("e");break;case 4:l.slice_from("i");break;case 5:i=l.limit-l.cursor,l.eq_s_b(2,"ab")||(l.cursor=l.limit-i,l.slice_from("i"));break;case 6:l.slice_from("at");break;case 7:l.slice_from("aţi")}}(),l.cursor=l.limit,g(),l.cursor=l.limit,r||(l.cursor=l.limit,function(){var e,i,r;if(l.cursor>=a){if(i=l.limit_backward,l.limit_backward=a,l.ket=l.cursor,e=l.find_among_b(w,94))switch(l.bra=l.cursor,e){case 1:if(r=l.limit-l.cursor,!l.out_grouping_b(m,97,259)&&(l.cursor=l.limit-r,!l.eq_s_b(1,"u")))break;case 2:l.slice_del()}l.limit_backward=i}}(),l.cursor=l.limit),k(),l.cursor=l.limit_backward,function(){for(var e;;){if(l.bra=l.cursor,e=l.find_among(o,3))switch(l.ket=l.cursor,e){case 1:l.slice_from("i");continue;case 2:l.slice_from("u");continue;case 3:if(l.cursor>=l.limit)break;l.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ru.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ru.js
new file mode 100644
index 00000000..ac992480
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.ru.js
@@ -0,0 +1 @@
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,g,n;e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=(h=e.stemmerSupport.Among,g=e.stemmerSupport.SnowballProgram,n=new function(){var n,e,r=[new h("в",-1,1),new h("ив",0,2),new h("ыв",0,2),new h("вши",-1,1),new h("ивши",3,2),new h("ывши",3,2),new h("вшись",-1,1),new h("ившись",6,2),new h("ывшись",6,2)],t=[new h("ее",-1,1),new h("ие",-1,1),new h("ое",-1,1),new h("ые",-1,1),new h("ими",-1,1),new h("ыми",-1,1),new h("ей",-1,1),new h("ий",-1,1),new h("ой",-1,1),new h("ый",-1,1),new h("ем",-1,1),new h("им",-1,1),new h("ом",-1,1),new h("ым",-1,1),new h("его",-1,1),new h("ого",-1,1),new h("ему",-1,1),new h("ому",-1,1),new h("их",-1,1),new h("ых",-1,1),new h("ею",-1,1),new h("ою",-1,1),new h("ую",-1,1),new h("юю",-1,1),new h("ая",-1,1),new h("яя",-1,1)],w=[new h("ем",-1,1),new h("нн",-1,1),new h("вш",-1,1),new h("ивш",2,2),new h("ывш",2,2),new h("щ",-1,1),new h("ющ",5,1),new h("ующ",6,2)],i=[new h("сь",-1,1),new h("ся",-1,1)],u=[new h("ла",-1,1),new h("ила",0,2),new h("ыла",0,2),new h("на",-1,1),new h("ена",3,2),new h("ете",-1,1),new h("ите",-1,2),new h("йте",-1,1),new h("ейте",7,2),new h("уйте",7,2),new h("ли",-1,1),new h("или",10,2),new h("ыли",10,2),new h("й",-1,1),new h("ей",13,2),new h("уй",13,2),new h("л",-1,1),new h("ил",16,2),new h("ыл",16,2),new h("ем",-1,1),new h("им",-1,2),new h("ым",-1,2),new h("н",-1,1),new h("ен",22,2),new h("ло",-1,1),new h("ило",24,2),new h("ыло",24,2),new h("но",-1,1),new h("ено",27,2),new h("нно",27,1),new h("ет",-1,1),new h("ует",30,2),new h("ит",-1,2),new h("ыт",-1,2),new h("ют",-1,1),new h("уют",34,2),new h("ят",-1,2),new h("ны",-1,1),new h("ены",37,2),new h("ть",-1,1),new h("ить",39,2),new h("ыть",39,2),new h("ешь",-1,1),new h("ишь",-1,2),new h("ю",-1,2),new h("ую",44,2)],s=[new h("а",-1,1),new h("ев",-1,1),new h("ов",-1,1),new h("е",-1,1),new h("ие",3,1),new h("ье",3,1),new h("и",-1,1),new h("еи",6,1),new h("ии",6,1),new h("ами",6,1),new h("ями",6,1),new h("иями",10,1),new h("й",-1,1),new h("ей",12,1),new h("ией",13,1),new h("ий",12,1),new h("ой",12,1),new h("ам",-1,1),new h("ем",-1,1),new h("ием",18,1),new h("ом",-1,1),new h("ям",-1,1),new h("иям",21,1),new h("о",-1,1),new h("у",-1,1),new h("ах",-1,1),new h("ях",-1,1),new h("иях",26,1),new h("ы",-1,1),new h("ь",-1,1),new h("ю",-1,1),new h("ию",30,1),new h("ью",30,1),new h("я",-1,1),new h("ия",33,1),new h("ья",33,1)],o=[new h("ост",-1,1),new h("ость",-1,1)],c=[new h("ейше",-1,1),new h("н",-1,2),new h("ейш",-1,1),new h("ь",-1,3)],m=[33,65,8,232],l=new g;function f(){for(;!l.in_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function a(){for(;!l.out_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function p(e,n){var r,t;if(l.ket=l.cursor,r=l.find_among_b(e,n)){switch(l.bra=l.cursor,r){case 1:if(t=l.limit-l.cursor,!l.eq_s_b(1,"а")&&(l.cursor=l.limit-t,!l.eq_s_b(1,"я")))return!1;case 2:l.slice_del()}return!0}return!1}function d(e,n){var r;return l.ket=l.cursor,!!(r=l.find_among_b(e,n))&&(l.bra=l.cursor,1==r&&l.slice_del(),!0)}function _(){return!!d(t,26)&&(p(w,8),!0)}function b(){var e;l.ket=l.cursor,(e=l.find_among_b(o,2))&&(l.bra=l.cursor,n<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){return e=l.limit,n=e,f()&&(e=l.cursor,a()&&f()&&a()&&(n=l.cursor)),l.cursor=l.limit,!(l.cursor<e)&&(l.limit_backward=e,p(r,9)||(l.cursor=l.limit,d(i,2)||(l.cursor=l.limit),_()||(l.cursor=l.limit,p(u,46)||(l.cursor=l.limit,d(s,36)))),l.cursor=l.limit,l.ket=l.cursor,l.eq_s_b(1,"и")?(l.bra=l.cursor,l.slice_del()):l.cursor=l.limit,b(),l.cursor=l.limit,function(){var e;if(l.ket=l.cursor,e=l.find_among_b(c,4))switch(l.bra=l.cursor,e){case 1:if(l.slice_del(),l.ket=l.cursor,!l.eq_s_b(1,"н"))break;l.bra=l.cursor;case 2:if(!l.eq_s_b(1,"н"))break;case 3:l.slice_del()}}(),!0)}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.ru.stemmer,"stemmer-ru"),e.ru.stopWordFilter=e.generateStopWordFilter("алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я \ufeffа".split(" ")),e.Pipeline.registerFunction(e.ru.stopWordFilter,"stopWordFilter-ru")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.stemmer.support.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.stemmer.support.js
new file mode 100644
index 00000000..55fd4172
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.stemmer.support.js
@@ -0,0 +1 @@
+!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var b;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(r){b=r,this.cursor=0,this.limit=r.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var r=b;return b=null,r},in_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor++,!0}return!1},in_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor--,!0}return!1},out_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(i<s||s<t)return this.cursor++,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor++,!0}return!1},out_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(i<s||s<t)return this.cursor--,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor--,!0}return!1},eq_s:function(r,t){if(this.limit-this.cursor<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor+i)!=t.charCodeAt(i))return!1;return this.cursor+=r,!0},eq_s_b:function(r,t){if(this.cursor-this.limit_backward<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor-r+i)!=t.charCodeAt(i))return!1;return this.cursor-=r,!0},find_among:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),a=0,f=u<o?u:o,l=r[c],_=f;_<l.s_size;_++){if(e+f==n){a=-1;break}if(a=b.charCodeAt(e+f)-l.s[_])break;f++}if(a<0?(s=c,o=f):(i=c,u=f),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){if(u>=(l=r[i]).s_size){if(this.cursor=e+l.s_size,!l.method)return l.result;var m=l.method();if(this.cursor=e+l.s_size,m)return l.result}if((i=l.substring_i)<0)return 0}},find_among_b:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit_backward,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),a=0,f=u<o?u:o,l=(_=r[c]).s_size-1-f;0<=l;l--){if(e-f==n){a=-1;break}if(a=b.charCodeAt(e-1-f)-_.s[l])break;f++}if(a<0?(s=c,o=f):(i=c,u=f),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){var _;if(u>=(_=r[i]).s_size){if(this.cursor=e-_.s_size,!_.method)return _.result;var m=_.method();if(this.cursor=e-_.s_size,m)return _.result}if((i=_.substring_i)<0)return 0}},replace_s:function(r,t,i){var s=i.length-(t-r);return b=b.substring(0,r)+i+b.substring(t),this.limit+=s,this.cursor>=t?this.cursor+=s:this.cursor>r&&(this.cursor=r),s},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>b.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),b.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.sv.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.sv.js
new file mode 100644
index 00000000..6daf5f9d
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.sv.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,l,n;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,l=e.stemmerSupport.SnowballProgram,n=new function(){var n,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new l;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e,r=m.cursor;return function(){var e,r=m.cursor+3;if(t=m.limit,0<=r||r<=m.limit){for(n=r;;){if(e=m.cursor,m.in_grouping(o,97,246)){m.cursor=e;break}if(m.cursor=e,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<n&&(t=n)}}(),m.limit_backward=r,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,e=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=e),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.th.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.th.js
new file mode 100644
index 00000000..ee8ef373
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.th.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(t){if(void 0===t)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===t.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==t.version[0];t.th=function(){this.pipeline.reset(),this.pipeline.add(t.th.trimmer),i?this.tokenizer=t.th.tokenizer:(t.tokenizer&&(t.tokenizer=t.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=t.th.tokenizer))},t.th.wordCharacters="[฀-๿]",t.th.trimmer=t.trimmerSupport.generateTrimmer(t.th.wordCharacters),t.Pipeline.registerFunction(t.th.trimmer,"trimmer-th");var n=t.wordcut;n.init(),t.th.tokenizer=function(e){if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return i?new t.Token(e):e});var r=e.toString().replace(/^\s+/,"");return n.cut(r).split("|")}}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/lunr.tr.js b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.tr.js
new file mode 100644
index 00000000..e8fb5a7d
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/lunr.tr.js
@@ -0,0 +1 @@
+!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var mr,dr,i;r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=(mr=r.stemmerSupport.Among,dr=r.stemmerSupport.SnowballProgram,i=new function(){var t,r=[new mr("m",-1,-1),new mr("n",-1,-1),new mr("miz",-1,-1),new mr("niz",-1,-1),new mr("muz",-1,-1),new mr("nuz",-1,-1),new mr("müz",-1,-1),new mr("nüz",-1,-1),new mr("mız",-1,-1),new mr("nız",-1,-1)],i=[new mr("leri",-1,-1),new mr("ları",-1,-1)],e=[new mr("ni",-1,-1),new mr("nu",-1,-1),new mr("nü",-1,-1),new mr("nı",-1,-1)],n=[new mr("in",-1,-1),new mr("un",-1,-1),new mr("ün",-1,-1),new mr("ın",-1,-1)],u=[new mr("a",-1,-1),new mr("e",-1,-1)],o=[new mr("na",-1,-1),new mr("ne",-1,-1)],s=[new mr("da",-1,-1),new mr("ta",-1,-1),new mr("de",-1,-1),new mr("te",-1,-1)],c=[new mr("nda",-1,-1),new mr("nde",-1,-1)],l=[new mr("dan",-1,-1),new mr("tan",-1,-1),new mr("den",-1,-1),new mr("ten",-1,-1)],a=[new mr("ndan",-1,-1),new mr("nden",-1,-1)],m=[new mr("la",-1,-1),new mr("le",-1,-1)],d=[new mr("ca",-1,-1),new mr("ce",-1,-1)],f=[new mr("im",-1,-1),new mr("um",-1,-1),new mr("üm",-1,-1),new mr("ım",-1,-1)],b=[new mr("sin",-1,-1),new mr("sun",-1,-1),new mr("sün",-1,-1),new mr("sın",-1,-1)],w=[new mr("iz",-1,-1),new mr("uz",-1,-1),new mr("üz",-1,-1),new mr("ız",-1,-1)],_=[new mr("siniz",-1,-1),new mr("sunuz",-1,-1),new mr("sünüz",-1,-1),new mr("sınız",-1,-1)],k=[new mr("lar",-1,-1),new mr("ler",-1,-1)],p=[new mr("niz",-1,-1),new mr("nuz",-1,-1),new mr("nüz",-1,-1),new mr("nız",-1,-1)],g=[new mr("dir",-1,-1),new mr("tir",-1,-1),new mr("dur",-1,-1),new mr("tur",-1,-1),new mr("dür",-1,-1),new mr("tür",-1,-1),new mr("dır",-1,-1),new mr("tır",-1,-1)],y=[new mr("casına",-1,-1),new mr("cesine",-1,-1)],z=[new mr("di",-1,-1),new mr("ti",-1,-1),new mr("dik",-1,-1),new mr("tik",-1,-1),new mr("duk",-1,-1),new mr("tuk",-1,-1),new mr("dük",-1,-1),new mr("tük",-1,-1),new mr("dık",-1,-1),new mr("tık",-1,-1),new mr("dim",-1,-1),new mr("tim",-1,-1),new mr("dum",-1,-1),new mr("tum",-1,-1),new mr("düm",-1,-1),new mr("tüm",-1,-1),new mr("dım",-1,-1),new mr("tım",-1,-1),new mr("din",-1,-1),new mr("tin",-1,-1),new mr("dun",-1,-1),new mr("tun",-1,-1),new mr("dün",-1,-1),new mr("tün",-1,-1),new mr("dın",-1,-1),new mr("tın",-1,-1),new mr("du",-1,-1),new mr("tu",-1,-1),new mr("dü",-1,-1),new mr("tü",-1,-1),new mr("dı",-1,-1),new mr("tı",-1,-1)],h=[new mr("sa",-1,-1),new mr("se",-1,-1),new mr("sak",-1,-1),new mr("sek",-1,-1),new mr("sam",-1,-1),new mr("sem",-1,-1),new mr("san",-1,-1),new mr("sen",-1,-1)],v=[new mr("miş",-1,-1),new mr("muş",-1,-1),new mr("müş",-1,-1),new mr("mış",-1,-1)],q=[new mr("b",-1,1),new mr("c",-1,2),new mr("d",-1,3),new mr("ğ",-1,4)],C=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],P=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],F=[65],S=[65],W=[["a",[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["e",[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],101,252],["ı",[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,1],97,305],["i",[17],101,105],["o",F,111,117],["ö",S,246,252],["u",F,111,117]],L=new dr;function x(r,i,e){for(;;){var n=L.limit-L.cursor;if(L.in_grouping_b(r,i,e)){L.cursor=L.limit-n;break}if(L.cursor=L.limit-n,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}function A(){var r,i;r=L.limit-L.cursor,x(C,97,305);for(var e=0;e<W.length;e++){i=L.limit-L.cursor;var n=W[e];if(L.eq_s_b(1,n[0])&&x(n[1],n[2],n[3]))return L.cursor=L.limit-r,!0;L.cursor=L.limit-i}return L.cursor=L.limit-i,!(!L.eq_s_b(1,"ü")||!x(S,246,252))&&(L.cursor=L.limit-r,!0)}function E(r,i){var e,n=L.limit-L.cursor;return r()&&(L.cursor=L.limit-n,L.cursor>L.limit_backward&&(L.cursor--,e=L.limit-L.cursor,i()))?(L.cursor=L.limit-e,!0):(L.cursor=L.limit-n,r()?(L.cursor=L.limit-n,!1):(L.cursor=L.limit-n,!(L.cursor<=L.limit_backward)&&(L.cursor--,!!i()&&(L.cursor=L.limit-n,!0))))}function j(r){return E(r,function(){return L.in_grouping_b(C,97,305)})}function T(){return j(function(){return L.eq_s_b(1,"n")})}function Z(){return j(function(){return L.eq_s_b(1,"y")})}function B(){return L.find_among_b(r,10)&&E(function(){return L.in_grouping_b(P,105,305)},function(){return L.out_grouping_b(C,97,305)})}function D(){return A()&&L.in_grouping_b(P,105,305)&&j(function(){return L.eq_s_b(1,"s")})}function G(){return L.find_among_b(i,2)}function H(){return A()&&L.find_among_b(n,4)&&T()}function I(){return A()&&L.find_among_b(s,4)}function J(){return A()&&L.find_among_b(c,2)}function K(){return A()&&L.find_among_b(f,4)&&Z()}function M(){return A()&&L.find_among_b(b,4)}function N(){return A()&&L.find_among_b(w,4)&&Z()}function O(){return L.find_among_b(_,4)}function Q(){return A()&&L.find_among_b(k,2)}function R(){return A()&&L.find_among_b(g,8)}function U(){return A()&&L.find_among_b(z,32)&&Z()}function V(){return L.find_among_b(h,8)&&Z()}function X(){return A()&&L.find_among_b(v,4)&&Z()}function Y(){var r=L.limit-L.cursor;return!(X()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,L.eq_s_b(3,"ken")&&Z()))))}function $(){if(L.find_among_b(y,2)){var r=L.limit-L.cursor;if(O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X())return!1}return!0}function rr(){if(!A()||!L.find_among_b(p,4))return!0;var r=L.limit-L.cursor;return!U()&&(L.cursor=L.limit-r,!V())}function ir(){var r,i,e,n=L.limit-L.cursor;if(L.ket=L.cursor,t=!0,Y()&&(L.cursor=L.limit-n,$()&&(L.cursor=L.limit-n,function(){if(Q()){L.bra=L.cursor,L.slice_del();var r=L.limit-L.cursor;return L.ket=L.cursor,R()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,X()||(L.cursor=L.limit-r)))),t=!1}return!0}()&&(L.cursor=L.limit-n,rr()&&(L.cursor=L.limit-n,e=L.limit-L.cursor,!(O()||(L.cursor=L.limit-e,N()||(L.cursor=L.limit-e,M()||(L.cursor=L.limit-e,K()))))||(L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,X()||(L.cursor=L.limit-i),0)))))){if(L.cursor=L.limit-n,!R())return;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X()||(L.cursor=L.limit-r)}L.bra=L.cursor,L.slice_del()}function er(){var r,i,e,n;if(L.ket=L.cursor,L.eq_s_b(2,"ki")){if(r=L.limit-L.cursor,I())return L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()?(L.bra=L.cursor,L.slice_del(),er()):(L.cursor=L.limit-i,B()&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))),!0;if(L.cursor=L.limit-r,H()){if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,e=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-e,L.ket=L.cursor,!B()&&(L.cursor=L.limit-e,!D()&&(L.cursor=L.limit-e,!er())))return!0;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}return!0}if(L.cursor=L.limit-r,J()){if(n=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-n,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-n,!er())return!1;return!0}}return!1}function nr(r){if(L.ket=L.cursor,!J()&&(L.cursor=L.limit-r,!A()||!L.find_among_b(o,2)))return!1;var i=L.limit-L.cursor;if(G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-i,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-i,!er())return!1;return!0}function tr(r){if(L.ket=L.cursor,!(A()&&L.find_among_b(a,2)||(L.cursor=L.limit-r,A()&&L.find_among_b(e,4))))return!1;var i=L.limit-L.cursor;return!(!D()&&(L.cursor=L.limit-i,!G()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()),!0)}function ur(){var r,i=L.limit-L.cursor;return L.ket=L.cursor,!!(H()||(L.cursor=L.limit-i,A()&&L.find_among_b(m,2)&&Z()))&&(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,!(!Q()||(L.bra=L.cursor,L.slice_del(),!er()))||(L.cursor=L.limit-r,L.ket=L.cursor,(B()||(L.cursor=L.limit-r,D()||(L.cursor=L.limit-r,er())))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())),!0))}function or(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,!(I()||(L.cursor=L.limit-e,A()&&L.in_grouping_b(P,105,305)&&Z()||(L.cursor=L.limit-e,A()&&L.find_among_b(u,2)&&Z()))))return!1;if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,B())L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()||(L.cursor=L.limit-i);else if(L.cursor=L.limit-r,!Q())return!0;return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,er(),!0}function sr(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,Q())return L.bra=L.cursor,L.slice_del(),void er();if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(d,2)&&T())if(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-r,L.ket=L.cursor,!B()&&(L.cursor=L.limit-r,!D())){if(L.cursor=L.limit-r,L.ket=L.cursor,!Q())return;if(L.bra=L.cursor,L.slice_del(),!er())return}L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}else if(L.cursor=L.limit-e,!nr(e)&&(L.cursor=L.limit-e,!tr(e))){if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(l,4))return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,i=L.limit-L.cursor,void(B()?(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())):(L.cursor=L.limit-i,Q()?(L.bra=L.cursor,L.slice_del()):L.cursor=L.limit-i,er()));if(L.cursor=L.limit-e,!ur()){if(L.cursor=L.limit-e,G())return L.bra=L.cursor,void L.slice_del();L.cursor=L.limit-e,er()||(L.cursor=L.limit-e,or()||(L.cursor=L.limit-e,L.ket=L.cursor,(B()||(L.cursor=L.limit-e,D()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))))}}}function cr(r,i,e){if(L.cursor=L.limit-r,function(){for(;;){var r=L.limit-L.cursor;if(L.in_grouping_b(C,97,305)){L.cursor=L.limit-r;break}if(L.cursor=L.limit-r,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}()){var n=L.limit-L.cursor;if(!L.eq_s_b(1,i)&&(L.cursor=L.limit-n,!L.eq_s_b(1,e)))return!0;L.cursor=L.limit-r;var t=L.cursor;return L.insert(L.cursor,L.cursor,e),L.cursor=t,!1}return!0}function lr(r,i,e){for(;!L.eq_s(i,e);){if(L.cursor>=L.limit)return!0;L.cursor++}return i!=L.limit||(L.cursor=r,!1)}function ar(){var r,i,e=L.cursor;return!(!lr(r=L.cursor,2,"ad")||!lr(L.cursor=r,5,"soyad"))&&(L.limit_backward=e,L.cursor=L.limit,i=L.limit-L.cursor,(L.eq_s_b(1,"d")||(L.cursor=L.limit-i,L.eq_s_b(1,"g")))&&cr(i,"a","ı")&&cr(i,"e","i")&&cr(i,"o","u")&&cr(i,"ö","ü"),L.cursor=L.limit,function(){var r;if(L.ket=L.cursor,r=L.find_among_b(q,4))switch(L.bra=L.cursor,r){case 1:L.slice_from("p");break;case 2:L.slice_from("ç");break;case 3:L.slice_from("t");break;case 4:L.slice_from("k")}}(),!0)}this.setCurrent=function(r){L.setCurrent(r)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){return!!(function(){for(var r,i=L.cursor,e=2;;){for(r=L.cursor;!L.in_grouping(C,97,305);){if(L.cursor>=L.limit)return L.cursor=r,!(0<e||(L.cursor=i,0));L.cursor++}e--}}()&&(L.limit_backward=L.cursor,L.cursor=L.limit,ir(),L.cursor=L.limit,t&&(sr(),L.cursor=L.limit_backward,ar())))}},function(r){return"function"==typeof r.update?r.update(function(r){return i.setCurrent(r),i.stem(),i.getCurrent()}):(i.setCurrent(r),i.stem(),i.getCurrent())}),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/tinyseg.js b/freetype/docs/reference/site/assets/javascripts/lunr/tinyseg.js
new file mode 100644
index 00000000..45bffe09
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/tinyseg.js
@@ -0,0 +1 @@
+!function(_,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(_.lunr)}(this,function(){return function(_){function t(){var _={"[一二三四五六七八九十百千万億兆]":"M","[一-龠々〆ヵヶ]":"H","[ぁ-ん]":"I","[ァ-ヴーア-ン゙ー]":"K","[a-zA-Za-zA-Z]":"A","[0-90-9]":"N"};for(var t in this.chartype_=[],_){var H=new RegExp;H.compile(t),this.chartype_.push([H,_[t]])}return this.BIAS__=-332,this.BC1__={HH:6,II:2461,KH:406,OH:-1378},this.BC2__={AA:-3267,AI:2744,AN:-878,HH:-4070,HM:-1711,HN:4012,HO:3761,IA:1327,IH:-1184,II:-1332,IK:1721,IO:5492,KI:3831,KK:-8741,MH:-3132,MK:3334,OO:-2920},this.BC3__={HH:996,HI:626,HK:-721,HN:-1307,HO:-836,IH:-301,KK:2762,MK:1079,MM:4034,OA:-1652,OH:266},this.BP1__={BB:295,OB:304,OO:-125,UB:352},this.BP2__={BO:60,OO:-1762},this.BQ1__={BHH:1150,BHM:1521,BII:-1158,BIM:886,BMH:1208,BNH:449,BOH:-91,BOO:-2597,OHI:451,OIH:-296,OKA:1851,OKH:-1020,OKK:904,OOO:2965},this.BQ2__={BHH:118,BHI:-1159,BHM:466,BIH:-919,BKK:-1720,BKO:864,OHH:-1139,OHM:-181,OIH:153,UHI:-1146},this.BQ3__={BHH:-792,BHI:2664,BII:-299,BKI:419,BMH:937,BMM:8335,BNN:998,BOH:775,OHH:2174,OHM:439,OII:280,OKH:1798,OKI:-793,OKO:-2242,OMH:-2402,OOO:11699},this.BQ4__={BHH:-3895,BIH:3761,BII:-4654,BIK:1348,BKK:-1806,BMI:-3385,BOO:-12396,OAH:926,OHH:266,OHK:-2036,ONN:-973},this.BW1__={",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682},this.BW2__={"..":-11822,11:-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669},this.BW3__={"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1e3,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990},this.TC1__={AAA:1093,HHH:1029,HHM:580,HII:998,HOH:-390,HOM:-331,IHI:1169,IOH:-142,IOI:-1015,IOM:467,MMH:187,OOI:-1832},this.TC2__={HHO:2088,HII:-1023,HMM:-1154,IHI:-1965,KKH:703,OII:-2649},this.TC3__={AAA:-294,HHH:346,HHI:-341,HII:-1088,HIK:731,HOH:-1486,IHH:128,IHI:-3041,IHO:-1935,IIH:-825,IIM:-1035,IOI:-542,KHH:-1216,KKA:491,KKH:-1217,KOK:-1009,MHH:-2694,MHM:-457,MHO:123,MMH:-471,NNH:-1689,NNO:662,OHO:-3393},this.TC4__={HHH:-203,HHI:1344,HHK:365,HHM:-122,HHN:182,HHO:669,HIH:804,HII:679,HOH:446,IHH:695,IHO:-2324,IIH:321,III:1497,IIO:656,IOO:54,KAK:4845,KKA:3386,KKK:3065,MHH:-405,MHI:201,MMH:-241,MMM:661,MOM:841},this.TQ1__={BHHH:-227,BHHI:316,BHIH:-132,BIHH:60,BIII:1595,BNHH:-744,BOHH:225,BOOO:-908,OAKK:482,OHHH:281,OHIH:249,OIHI:200,OIIH:-68},this.TQ2__={BIHH:-1401,BIII:-1033,BKAK:-543,BOOO:-5591},this.TQ3__={BHHH:478,BHHM:-1073,BHIH:222,BHII:-504,BIIH:-116,BIII:-105,BMHI:-863,BMHM:-464,BOMH:620,OHHH:346,OHHI:1729,OHII:997,OHMH:481,OIHH:623,OIIH:1344,OKAK:2792,OKHH:587,OKKA:679,OOHH:110,OOII:-685},this.TQ4__={BHHH:-721,BHHM:-3604,BHII:-966,BIIH:-607,BIII:-2181,OAAA:-2763,OAKK:180,OHHH:-294,OHHI:2446,OHHO:480,OHIH:-1573,OIHH:1935,OIHI:-493,OIIH:626,OIII:-4007,OKAK:-8156},this.TW1__={"につい":-4681,"東京都":2026},this.TW2__={"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216},this.TW3__={"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287},this.TW4__={"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865},this.UC1__={A:484,K:93,M:645,O:-505},this.UC2__={A:819,H:1059,I:409,M:3987,N:5775,O:646},this.UC3__={A:-1370,I:2311},this.UC4__={A:-2643,H:1809,I:-1032,K:-3450,M:3565,N:3876,O:6646},this.UC5__={H:313,I:-1238,K:-799,M:539,O:-831},this.UC6__={H:-506,I:-253,K:87,M:247,O:-387},this.UP1__={O:-214},this.UP2__={B:69,O:935},this.UP3__={B:189},this.UQ1__={BH:21,BI:-12,BK:-99,BN:142,BO:-56,OH:-95,OI:477,OK:410,OO:-2422},this.UQ2__={BH:216,BI:113,OK:1759},this.UQ3__={BA:-479,BH:42,BI:1913,BK:-7198,BM:3160,BN:6427,BO:14761,OI:-827,ON:-3212},this.UW1__={",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135},this.UW2__={",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568},this.UW3__={",":4889,1:-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278},this.UW4__={",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1e3,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637},this.UW5__={",":465,".":-299,1:-514,E2:-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343},this.UW6__={",":227,".":808,1:-270,E1:306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496},this}t.prototype.ctype_=function(_){for(var t in this.chartype_)if(_.match(this.chartype_[t][0]))return this.chartype_[t][1];return"O"},t.prototype.ts_=function(_){return _||0},t.prototype.segment=function(_){if(null==_||null==_||""==_)return[];var t=[],H=["B3","B2","B1"],s=["O","O","O"],h=_.split("");for(K=0;K<h.length;++K)H.push(h[K]),s.push(this.ctype_(h[K]));H.push("E1"),H.push("E2"),H.push("E3"),s.push("O"),s.push("O"),s.push("O");for(var i=H[3],I="U",O="U",B="U",K=4;K<H.length-3;++K){var M=this.BIAS__,e=H[K-3],U=H[K-2],r=H[K-1],n=H[K],A=H[K+1],p=H[K+2],u=s[K-3],C=s[K-2],W=s[K-1],o=s[K],T=s[K+1],Q=s[K+2];M+=this.ts_(this.UP1__[I]),M+=this.ts_(this.UP2__[O]),M+=this.ts_(this.UP3__[B]),M+=this.ts_(this.BP1__[I+O]),M+=this.ts_(this.BP2__[O+B]),M+=this.ts_(this.UW1__[e]),M+=this.ts_(this.UW2__[U]),M+=this.ts_(this.UW3__[r]),M+=this.ts_(this.UW4__[n]),M+=this.ts_(this.UW5__[A]),M+=this.ts_(this.UW6__[p]),M+=this.ts_(this.BW1__[U+r]),M+=this.ts_(this.BW2__[r+n]),M+=this.ts_(this.BW3__[n+A]),M+=this.ts_(this.TW1__[e+U+r]),M+=this.ts_(this.TW2__[U+r+n]),M+=this.ts_(this.TW3__[r+n+A]),M+=this.ts_(this.TW4__[n+A+p]),M+=this.ts_(this.UC1__[u]),M+=this.ts_(this.UC2__[C]),M+=this.ts_(this.UC3__[W]),M+=this.ts_(this.UC4__[o]),M+=this.ts_(this.UC5__[T]),M+=this.ts_(this.UC6__[Q]),M+=this.ts_(this.BC1__[C+W]),M+=this.ts_(this.BC2__[W+o]),M+=this.ts_(this.BC3__[o+T]),M+=this.ts_(this.TC1__[u+C+W]),M+=this.ts_(this.TC2__[C+W+o]),M+=this.ts_(this.TC3__[W+o+T]),M+=this.ts_(this.TC4__[o+T+Q]),M+=this.ts_(this.UQ1__[I+u]),M+=this.ts_(this.UQ2__[O+C]),M+=this.ts_(this.UQ3__[B+W]),M+=this.ts_(this.BQ1__[O+C+W]),M+=this.ts_(this.BQ2__[O+W+o]),M+=this.ts_(this.BQ3__[B+C+W]),M+=this.ts_(this.BQ4__[B+W+o]),M+=this.ts_(this.TQ1__[O+u+C+W]),M+=this.ts_(this.TQ2__[O+C+W+o]),M+=this.ts_(this.TQ3__[B+u+C+W]);var N="O";0<(M+=this.ts_(this.TQ4__[B+C+W+o]))&&(t.push(i),i="",N="B"),I=O,O=B,B=N,i+=H[K]}return t.push(i),t},_.TinySegmenter=t}}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/lunr/wordcut.js b/freetype/docs/reference/site/assets/javascripts/lunr/wordcut.js
new file mode 100644
index 00000000..179792ab
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/lunr/wordcut.js
@@ -0,0 +1 @@
+!function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t;((t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).lunr||(t.lunr={})).wordcut=n()}}(function(){return function o(s,a,c){function u(e,n){if(!a[e]){if(!s[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(l)return l(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[e]={exports:{}};s[e][0].call(i.exports,function(n){var t=s[e][1][n];return u(t||n)},i,i.exports,o,s,a,c)}return a[e].exports}for(var l="function"==typeof require&&require,n=0;n<c.length;n++)u(c[n]);return u}({1:[function(n,t,e){var r=n("underscore"),i={creators:null,current:null,tag:null,init:function(){this.creators=[],this.current=[],this.tag={}},reset:function(){this.current=[],this.tag={}},transit:function(n){var e=this;e.creators.forEach(function(n){var t=n.createAcceptor(e.tag);t&&e.current.push(t)});var t=[];e.tag={};for(var r=0;r<e.current.length;r++){var i=e.current[r].transit(n);i.isError||(t.push(i),e.tag[i.tag]=i)}e.current=t},getFinalAcceptors:function(){return this.current.filter(function(n){return n.isFinal})}};t.exports=function(){var n=r.clone(i);return n.init(),n}},{underscore:25}],2:[function(t,e,n){(function(o){var s=t("path"),n=(t("glob"),{init:function(n,t,e){t=t||!1,defaultDict=s.normalize(o+"/..")+"/data/tdict-*.txt",this.dict=[];var r=void 0!==n,i=t||!r?[defaultDict]:[];n=n||defaultDict;r&&(Array.isArray(n)?i.concat.apply(i,n):i.push(n)),this.addFiles(i,!1),void 0!==e&&this.addWords(e,!1),this.finalizeDict()},addWords:function(n,t){t=void 0===t||t,this.dict.push.apply(this.dict,n),t&&this.finalizeDict()},finalizeDict:function(){this.dict=this.sortuniq(this.dict)},addFiles:function(n,t){t=void 0===t||t;for(var e=0;e<1;e++)words="ก.ก.\nก.ก.น.\nก.ข.ค.\nก.ค.\nก.จ.\nก.ช.น.\nก.ฌ.\nก.ต.\nก.ต.ง.\nก.ต.ช.\nก.ตร.\nก.ท.\nก.น.ช.\nก.บช.\nก.บถ.\nก.ป.ส.\nก.พ.\nก.ม.\nก.ย.\nก.ร.\nก.ล.ต.\nก.ว.\nก.ศ.ว.\nก.ส.ท.\nก.ส.ธ.\nก.ส.อ.\nก.อ.\nกก.ตชด.\nกก.ตร.น.\nกก.ภ.จว.\nกก.รสช.\nกกบ.ขส.ทบ.\nกกล.รพน.\nกง.กห.\nกง.ทบ.\nกง.ทร.\nกซข.ป.\nกซม.ป.\nกทม.กรุงเทพมหานคร\nกบ.ทบ.\nกป.สป.\nกพ.ทบ.\nกพ.ทร.\nกพ.ทหาร\nกร.ทบ.\nกรป.กลาง\nกรอ.พอ.\nกศ.ด.\nกศ.บ.\nกศ.บป.\nกศ.ม.\nกษ.ด.\nกษ.บ.\nกษ.ม.\nกส.ด.\nกส.ทบ.\nกส.บ.\nกส.ม.\nกอ.ปค.\nกอ.รพน.\nกอ.รมน.\nกอ.รสต.\nข.ต.ว.\nขว.ทบ.\nขว.ทร.\nขว.ทหาร\nขส.ทบ.\nขส.ทร.\nขส.ทอ.\nค.ด.\nค.บ.\nค.พ.ศ.\nค.ม.\nค.ร.น.\nค.ร.ฟ.\nค.ร.ม.\nค.ศ.\nค.อ.ด.\nค.อ.บ.\nค.อ.ม.\nคศ.ด.\nคศ.บ.\nคศ.ม.\nง.ด.\nจ.จ.\nจ.จ.จ.\nจ.ช.\nจ.ต.\nจ.ท.\nจ.ป.ร.\nจ.ม.\nจ.ศ.\nจ.ส.ต.\nจ.ส.ท.\nจ.ส.อ.\nจ.อ.\nจ.อ.ร.\nจ.๑๘\nจก.ธน.\nจก.สน.\nช.ค.\nช.ค.บ.\nช.พ.ค.\nช.ส.\nช.ส.ค.\nฌ.ป.ค.\nฌ.ศ.ร.\nฌ.ส.อ.\nฐท.สห.\nด.ช.\nด.ญ.\nด.ต.\nด.ศ.ค.\nด.ศ.ร.\nดย.ทร.\nต.ก.\nต.ค.\nต.จ.\nต.จ.ว.\nต.ช.\nต.ต.\nต.บ.\nต.ม.\nต.ร.\nต.ศ.ร.\nต.ห.\nต.อ.\nต.อ.จ.\nตร.กม.\nตร.ซม.\nตร.ต.\nตร.ทล.\nตร.น.\nตร.ปม.\nตร.ภ.\nตร.ม.\nตร.รฟ.\nตร.ว.\nตร.ส.\nตร.สข.\nท.จ.\nท.จ.ว.\nท.ช.\nท.ญ.\nท.ด.\nท.ท.ท.\nท.ทบ.\nท.บ.\nท.พ.\nท.ม.\nท.ศ.\nทก.ด.\nทก.บ.\nทก.ม.\nทส.ปช.\nทส.รมว.กห.\nทุ.ส.นิ.ม.\nธ.ก.ส.\nธ.ค.\nธ.ญ\nธ.บ.\nน.ช.\nน.ญ.\nน.ด.\nน.ต.\nน.ท.\nน.น.\nน.บ.\nน.บ.ท.\nน.ป.ท.\nน.พ.\nน.ม.\nน.ร.\nน.ว.\nน.ศ.\nน.ส.\nน.ส.พ.\nน.ส.๓\nน.สพ.\nน.อ.\nนปพ.ภ.\nนศ.ด.\nนศ.บ.\nนศ.ม.\nบ.ก.\nบ.ข.ส.\nบ.ช.\nบ.ด.ท.\nบ.ตร.\nบ.ภ.\nบ.ม.\nบก.จร.\nบก.ตชด.\nบก.ตม.\nบก.ทล.\nบก.น.\nบก.ป.\nบก.ปค.\nบก.ปม.\nบก.ภ.เขต\nบก.รน.\nบก.รฟ.\nบก.ร้อย.ตชด.\nบก.ส.\nบกข.ป.\nบจพ.ป.\nบช.ก.\nบช.ด.\nบช.ตชด.\nบช.น.\nบช.บ.\nบช.ปส.\nบช.ภ.\nบช.ม.\nบชท.ป.\nบชน.ป.\nบชส.ป.\nบธ.ด.\nบธ.บ.\nบธ.ม.\nบนท.ป.\nบนอ.ป.\nบปช.ป.\nป.กท.\nป.กศ.\nป.กศ.สูง\nป.จ.\nป.จ.ว.\nป.ช.\nป.ธ.\nป.ป.\nป.ป.ก.\nป.ป.ช.\nป.ป.ป.\nป.ป.ร.\nป.ป.ส.\nป.พ.\nป.พ.พ.\nป.พย.\nป.ม.\nป.ม.ก.\nป.ม.ช.\nป.ม.ธ.\nป.ม.ศ.\nป.ม.อ.\nป.ร.ร.๔\nป.ร.ร.๕\nป.ร.ร.๖\nป.ล.\nป.ว.พ.\nป.วิ.อ.\nป.ส.ส.\nป.อ.\nป.อ.ร.ส.\nป.๑\nปม.วส.\nปอ.พ.\nผกก.ภ.\nผช.ผอ.\nผต.มท.\nผบ.ตร.\nผบ.ทบ.\nผบ.ทร.\nผบ.ทสส.\nผบ.ทอ.\nผบก.น.\nผบก.ป.\nผบก.ปค.\nผบก.ปม.\nผบก.ภ.\nผบช.ก.\nผบช.ตชด.\nผบช.น.\nผบช.ภ.\nผว.กทม.\nผอ.ปจ.\nพ.ก.ง.\nพ.กศ.\nพ.ข.ต.\nพ.ค.\nพ.ค.ช.\nพ.ค.ว.\nพ.ค.ศ.\nพ.จ.ต.\nพ.จ.ท.\nพ.จ.อ.\nพ.ช.\nพ.ช.ค.\nพ.ด.\nพ.ต.\nพ.ต.ต.\nพ.ต.ท.\nพ.ต.อ.\nพ.ต.อ.พิเศษ\nพ.ท.\nพ.บ.\nพ.ป.\nพ.ภ.ม.\nพ.ม.\nพ.ม.ช.\nพ.ย.\nพ.ร.ก.\nพ.ร.ฎ.\nพ.ร.ต.\nพ.ร.ธ.\nพ.ร.บ.\nพ.ศ.\nพ.ศ.บ.\nพ.ส.ร.\nพ.ส.ล.\nพ.อ.\nพ.อ.ต.\nพ.อ.ท.\nพ.อ.พิเศษ\nพ.อ.อ.\nพณ.ด.\nพณ.บ.\nพณ.ม.\nพธ.ด.\nพธ.บ.\nพธ.ม.\nพบ.ด.\nพบ.บ.\nพบ.ม.\nพย.ด.\nพย.บ.\nพย.ม.\nพล.จ.\nพล.ต.\nพล.ต.จ.\nพล.ต.ต.\nพล.ต.ท.\nพล.ต.อ.\nพล.ท.\nพล.ปตอ.\nพล.ม.\nพล.ม.๒\nพล.ร.จ.\nพล.ร.ต.\nพล.ร.ท.\nพล.ร.อ.\nพล.อ.\nพล.อ.จ.\nพล.อ.ต.\nพล.อ.ท.\nพล.อ.อ.\nพลา.ทร.\nพศ.ด.\nพศ.บ.\nพศ.ม.\nพอ.สว.\nภ.ง.ด.\nภ.ง.ด.๙\nภ.ด.\nภ.บ.\nภ.บ.ท.๕\nภ.ป.ร.\nภ.พ.\nภ.ม.\nภ.สถ.บ.\nม.ค.\nม.จ.\nม.ป.ท.\nม.ป.ป.\nม.ป.พ.\nม.ร.ว.\nม.ศ.\nม.อ.\nม.อ.ปัตตานี\nมิ.ย.\nมี.ค.\nยศ.ทบ.\nยศ.ทร.\nยศ.ทอ.\nร.ง.\nร.ด.\nร.ต.\nร.ต.ต.\nร.ต.ท.\nร.ต.อ.\nร.ท.\nร.น.\nร.บ.\nร.พ.\nร.ฟ.ล.\nร.ย.ล.\nร.ย.ส.ท.\nร.ล.\nร.ศ.\nร.ส.พ.\nร.อ.\nรป.ม.\nรร.จปร.\nรร.จอ.\nรร.ชท.\nรร.ตท.\nรร.นร.\nรร.นรต.\nรร.นอ.\nล.ญ.\nล.ว.\nลส.ชบ.\nว.ค.\nว.ฉ.\nว.ช.\nว.ด.ป.\nว.ป.ถ.\nวท.บ.\nศ.บ.\nศ.ป.ก.\nศ.ศ.ป.\nศฝร.ภ.\nศศ.บ.\nศษ.บ.\nศส.บ.\nส.ก.\nส.ก.ศ.ท.\nส.ค.\nส.ค.1\nส.ค.ร.\nส.ค.ส.\nส.ต.\nส.ต.ต.\nส.ต.ท.\nส.ต.อ.\nส.ท.\nส.ทร.\nส.ป.ช.\nส.ป.ส.ท.\nส.ป.อ.\nส.ร.\nส.ล.น.\nส.ว.\nส.ว.ท.\nส.ว.ส.ท.\nส.ส.\nส.ส.ท.\nส.ส.ร.\nส.ห.\nส.อ.\nสถ.บ.\nสนง.สสอ.\nสพ.ญ.\nสพ.บ.\nสว.จร.\nสว.ธร.\nสว.ส.\nสว.สป.\nสว.สส.\nสว.อก.\nสส.บ.\nสุ.จิ.ปุ.ลิ.\nห.ร.ม.\nอ.ก.ค.\nอ.ก.จ.\nอ.จ.\nอ.ช.พ.\nอ.ตร.\nอ.บ.\nอ.ส.ท.\nอ.ส.ม.ท.\nอ.ส.ย.\nอ.อ.ป.\nอส.รด.\nอุ.อา.ก.ส.\nฮ.จ.\nฮ.ท.\nฮ.ฝ.\nฮ.ล.\nฮ.ศ.\nเม.ย.\n\nกรีนิช\nกลันตัน\nกัลกัตตา\nกัวลาลัมเปอร์\nกัศมีร์\nกาฐมาณฑุ\nโกลกาตา\nควิเบก\nคอนเนตทิคัต\nคาบูล\nคุชราต\nคุนหมิง\nเคนตักกี\nเคนทักกี\nเคมบริดจ์\nแคชเมียร์\nแคนซัส\nแคนเบอร์รา\nแคโรไลนา\nแคลิฟอร์เนีย\nโคเปนเฮเกน\nโคลัมโบ\nโคโลราโด\nไครสต์เชิร์ช\nไคโร\nจาการ์ตา\nจำปาศักดิ์\nเจนไน\nเจนีวา\nเจ้อเจียง\nฉงชิ่ง\nเฉิงตู\nชานตง\nชิคาโก\nเชนไน\nเชอร์โนบิล\nซัปโปโร\nซานมารีโน\nซาบาห์\nซาราเยโว\nซาราวัก\nซิดนีย์\nซีอาน\nซีแอตเทิล\nซูริก\nซูริค\nเซเชลส์\nเซนได\nเซี่ยงไฮ้\nโซเฟีย\nโซล\nโซโลมอน\nไซ่ง่อน\nไซบีเรีย\nดัลลัส\nดาโคตา\nดานัง\nดีทรอยต์\nดูไบ\nเดนเวอร์\nเดลาแวร์\nเดียนเบียนฟู\nโดเวอร์\nโดฮา\nไดฟุกุ\nไดฟูกุ\nตรังกานู\nตริโปลี\nตูวาลู\nเตหะราน\nโตเกียว\nโตรอนโต\nทมิฬนาฑู\nทริโปลี\nทิเบต\nเทกซัส\nเท็กซัส\nเทนเนสซี\nเทลอาวีฟ\nแทสเมเนีย\nโทรอนโต\nไทเป\nธากา\nนางาซากิ\nนาริตะ\nนิวเจอร์ซีย์\nนิวเดลี\nนิวยอร์ก\nนิวยอร์ค\nนิวแฮมป์เชียร์\nเนบราสกา\nเนแบรสกา\nเนวาดา\nบรัสเซลส์\nบราซิเลีย\nบอมเบย์\nบอสตัน\nบังกาลอร์\nบังคาลอร์\nบูคาเรสต์\nบูดาเปสต์\nเบงกาซี\nเบนกาซี\nเบรุต\nเบลเกรด\nเบอร์ลิน\nแบกแดด\nปอยเปต\nปะลิส\nปะหัง\nปักกิ่ง\nปัญจาบ\nปัฏนา\nปารีส\nปีนัง\nเประ\nเปียงยาง\nพนมเปญ\nพระตะบอง\nพะโค\nพะสิม\nพาราณสี\nพิหารี\nเพนซิลวาเนีย\nเพนซิลเวเนีย\nฟรานซ์\nฟลอริดา\nฟิลาเดลเฟีย\nฟุกุชิมะ\nฟุกุชิมา\nฟุกุโอกะ\nฟูกูโอกะ\nแฟรงก์เฟิร์ต\nมอสโก\nมะนิลา\nมะละแหม่ง\nมัณฑะเลย์\nมัทราส\nมาดริด\nมิชิแกน\nมินนิโซตา\nมิยางิ\nมิลาน\nมิวนิก\nมิสซูรี\nมุมไบ\nเมน\nเมลเบิร์น\nเมาะตะมะ\nเมาะลำเลิง\nแมนจูเรีย\nแมนเชสเตอร์\nแมนฮัตตัน\nแมริแลนด์\nแมรีแลนด์\nแมสซาชูเซตส์\nยะไข่\nย่างกุ้ง\nยูทาห์\nยูนนาน\nเยรูซาเล็ม\nโยโกฮามา\nริยาด\nรีโอเดจาเนโร\nโรดไอแลนด์\nลอนดอน\nลอสแองเจลิส\nลาปาซ\nลาสเวกัส\nลิสบอน\nลุยเซียนา\nโลซาน\nโลซานน์\nวอชิงตัน\nวอร์ซอ\nวิสคอนซิน\nเวนิส\nเวลส์\nเวอร์จิเนีย\nเวอร์มอนต์\nเวียงจันทน์\nเวียนนา\nแวนคูเวอร์\nไวโอมิง\nสกอตแลนด์\nสก็อตแลนด์\nสตอกโฮล์ม\nสลังงอร์\nเสฉวน\nเสียมราฐ\nเสียมเรียบ\nหงสา\nหงสาวดี\nหนานไห่\nหลวงพระบาง\nหูเป่ย\nหูเป่ย์\nหูหนาน\nเหอเป่ย\nเหอเป่ย์\nเหอหนาน\nอชันตา\nอลาสกา\nอวันตี\nออริกอน\nออสโล\nอะแลสกา\nอัตตะปือ\nอัมมาน\nอัมสเตอร์ดัม\nอัสสัม\nอาบูดาบี\nอาร์คันซอ\nอินเดียนา\nอิบารากิ\nอิลลินอยส์\nอิสตันบูล\nอิสลามาบัด\nอุรุมชี\nอูลานบาตอร์\nเอดินบะระ\nเอเธนส์\nแอตแลนตา\nแอริโซนา\nแอลเจียร์\nโอคลาโฮมา\nโอค็อตสค์\nโอกินาวา\nโอซากา\nโอริสสา\nโอเรกอน\nโอไฮโอ\nไอดาโฮ\nไอโอวา\nฮอนโนลูลู\nฮานอย\nฮาเนดะ\nฮาราเร\nฮาวาย\nฮิโรชิมา\nฮุสตัน\nเฮลซิงกิ\n\nมกรา\nกุมภา\nมีนา\nเมษา\nพฤษภา\nมิถุนา\nกรกฎา\nสิงหา\nกันยา\nตุลา\nพฤศจิกา\nธันวา\nเอ\nบี\nซี\nดี\nอี\nเอฟ\nจี\nเอช\nไอ\nเจ\nเค\nแอล\nเอ็ม\nเอ็น\nโอ\nพี\nคิว\nอาร์\nเอส\nที\nยู\nวี\nดับเบิล\nดับบลิว\nเอ็กซ์\nเอ๊กซ์\nวาย\nแซด\nแอลฟา\nแอลฟ่า\nเบตา\nเบต้า\nแกมมา\nแกมม่า\nเดลตา\nเดลต้า\nโอเมกา\nโอเมก้า\nเมกะ\nกิกะ\nนาโน\nไมโคร\n\nกรรมาชน\nกรอบรูป\nกระดี๊กระด๊า\nกระบับ\nกราวนด์\nกรีน\nกรุ๊ป\nกฤษณ์\nกลาส\nก๊วน\nกษัตริยา\nกษัตริยาธิราช\nก่อนหน้า\nกะบับ\nกับดัก\nกัมมันตะ\nก๊าก\nก๋ากั่น\nกาญจน์\nกาญจนาภิเษก\nกามิกาเซ่\nการันตี\nกาหลิบ\nกิฟท์\nกิมจิ\nกีวี\nกึ๊ก\nกึ๋ย\nกุนซือ\nกุมภาพันธ์\nกู๋\nเกจิ\nเกมส์\nเกย์\nเกรด\nเกรย์\nเกสต์เฮาส์\nเก๊ะ\nเก๋ากี้\nเกิร์ล\nแกงค์\nแกรนด์\nแกสโซฮอล์\nแก๊สโซฮอล์\nโกเต็กซ์\nโกลด์\nโกะ\nโก๊ะ\nไกด์\nขั้นตอน\nเขวี้ยง\nคณาญาติ\nครัวซอง\nครัวซองต์\nคร่ำครวญ\nครีเอทีฟ\nครูเสด\nคลับ\nคลาสสิก\nคลิตอริส\nคลิป\nความหมาย\nควิก\nควีน\nคองเกรส\nคอนซูเมอร์\nคอนเซปต์\nคอนเซ็ปต์\nคอนโด\nคอนโดมิเนียม\nคอนเทนเนอร์\nคอนแทค\nคอนแท็ค\nคอนโทรล\nคอนเฟิร์ม\nคอปเตอร์\nคอมพ์\nคอมเพล็กซ์\nคอมมอนส์\nคอมเมนท์\nคอมเมนต์\nคอร์ป\nคอร์ปอเรชั่น\nคอร์รัปชัน\nคอร์รัปชั่น\nคอรัปชัน\nคอรัปชั่น\nคอร์ส\nคอลเล็กชั่น\nคอลัมน์\nคอลัมนิสต์\nคัตเอาต์\nคันคาก\nคันถธุระ\nคันธาระ\nคันยิ\nคัสตาร์ด\nคาราโอเกะ\nคีตกวี\nคีตปฏิภาณ\nคีตราชัน\nคาปูชิโน\nคามิคาเซ่\nคาเฟ่\nคาร์\nคาร์โก้\nคาราเมล\nคาแรกเตอร์\nคาแร็กเตอร์\nคาแรคเตอร์\nคาแร็คเตอร์\nคาวบอย\nคาสิโน\nคิกขุ\nคิวบิก\nคูลเลอร์\nเคบับ\nเครป\nเคลม\nเคลียร์\nเคลื่อนย้าย\nเคส\nเคอร์ฟิว\nแคชเชียร์\nแคทวอล์ค\nแคนดิเดต\nแคนตาลูป\nแคนยอน\nแคนู\nแคป\nแคมป์\nแคมปัส\nแคมเปญ\nแคร์\nแครกเกอร์\nแคร็กเกอร์\nแครอท\nแคสต์\nแคสติง\nแคสติ้ง\nโค้ก\nโค้ช\nโคโยตี\nโคโยตี้\nโครนา\nโคอะล่า\nโคอาลา\nโคอาล่า\nไคลแมกซ์\nไคลแม็กซ์\nงั้น\nง่าว\nงี้\nเง็ง\nโง่เขลา\nไง\nจตุคาม\nจ๊อกกี้\nจอหงวน\nจังโก้\nจัมโบ้\nจ๊าบ\nจารกรรม\nจารชน\nจิ๊ก\nจิ๊กโก๋\nจิ๊กซอว์\nจิตพิสัย\nจิตเภท\nจีดีพี\nจึ๊ก\nจุ๊ย\nจูน\nจูเนียร์\nเจ๊\nเจได\nเจ็ต\nเจล\nเจ๊าะแจ๊ะ\nเจี๊ยว\nแจ็กเก็ต\nแจ๊กเก็ต\nแจ็กพอต\nแจ็กพ็อต\nแจ๊กพอต\nแจ๊กพ็อต\nแจม\nแจ๊ส\nโจ๋\nฉลุย\nเฉิ่ม\nชนะเลิศ\nช็อค\nช็อต\nช็อป\nช็อปปิ้ง\nช็อปเปอร์\nชะโนด\nชัตเตอร์\nชัวร์\nชาร์จ\nชาร์ต\nชาร์ป\nชินบัญชร\nชิฟฟอน\nชีส\nชีอะห์\nเช็ก\nเช็งเม้ง\nเชฟ\nเชลียร์\nเชอร์รี่\nแชเชือน\nแช่แข็ง\nแชมป์\nแชมปิยอง\nแชมเปญ\nแชมเปี้ยน\nแชมพู\nโชว์รูม\nโชห่วย\nใช้งาน\nไชน่า\nซ้อ\nซอมบี้\nซะ\nซังเต\nซันตาคลอส\nซัพพลาย\nซัพพลายเออร์\nซัมเมอร์\nซากุระ\nซาดิสต์\nซาดิสม์\nซาตาน\nซานตาคลอส\nซาฟารี\nซาบะ\nซามูไร\nซาร์\nซาร์ดีน\nซาเล้ง\nซิง\nซิ่ง\nซิงเกิล\nซิตี\nซิตี้\nซินโดรม\nซิม\nซิ้ม\nซิมโฟนี\nซิมโฟนี่\nซิลเวอร์\nซี้\nซี้ซั้ว\nซีดาน\nซีน\nซีนีเพล็กซ์\nซีเนียร์\nซีร็อกซ์\nซีรีส์\nซีเรียส\nซีอีโอ\nซื่อบื้อ\nซุนหนี่\nซุปเปอร์\nซูชิ\nซูเปอร์\nซูม\nซูโม่\nซูเอี๋ย\nซูฮก\nเซ็กซ์\nเซ็กซี่\nเซ็กส์\nเซนเซอร์\nเซ็นเซอร์\nเซนเตอร์\nเซ็นเตอร์\nเซ็นทรัล\nเซนส์\nเซ่นไหว้\nเซฟตี้\nเซรามิก\nเซลส์\nเซลส์แมน\nเซอร์\nเซอร์ไพรส์\nเซอร์วิส\nเซาท์\nเซี้ยว\nแซ็ก\nแซกโซโฟน\nแซ็กโซโฟน\nแซนด์วิช\nแซมบ้า\nแซลมอน\nแซว\nโซเชียล\nโซน\nโซนี่\nโซลาร์\nโซโล\nโซโล่\nญาณทัสสนะ\nดยุก\nดยุค\nดร็อป\nดรัมเมเยอร์\nดรามา\nดราม่า\nดอกเตอร์\nด็อกเตอร์\nดัมพ์\nดั๊มพ์\nดาวน์\nดิกชันนารี\nดิสเครดิต\nดีกรี\nดีเจ\nดีไซน์\nดีไซน์เนอร์\nดีไซเนอร์\nดีเบต\nดีพาร์ตเมนต์\nดีพาร์ตเมนท์\nดีพาร์ทเมนต์\nดีพาร์ทเมนท์\nดีมานด์\nดีล\nดีลเลอร์\nดีเลย์\nเดชานุภาพ\nเดบิต\nเดโม\nเดย์\nเด้อ\nเดอะ\nเด๊ะ\nเดี้ยง\nเดี๊ยะ\nแดนซ์\nแดนเซอร์\nแดรี่\nโดนัท\nโดมิโน\nโดรายากิ\nไดเอ็ต\nตถตา\nตนเอง\nตรวจทาน\nตรวจสอบ\nตอกย้ำ\nต๊อง\nต่อยอด\nต่อรอง\nตะหงิด\nตังค์\nตันเถียน\nตัวตน\nตัวเอง\nตาปรือ\nต้าอ่วย\nติงต๊อง\nติ๋ม\nติ่มซำ\nติว\nติวเตอร์\nตี๋\nตื้บ\nตุ๊ก\nตุ๊กตุ๊ก\nตุ๊ด\nตุ๋ย\nตู้เซฟ\nเต๊ะ\nเตี๊ยม\nแตงกวา\nแตงโม\nแต๋ว\nโต๋เต๋\nโต๊ะจีน\nไตรมาส\nถ่ายทำ\nถูกต้อง\nทงคัตสึ\nทริป\nทรู\nทอม\nท็อป\nทอร์นาโด\nทอล์ค\nทักซิโด\nทันตกรรม\nทันตแพทยศาสตร์\nทับซ้อน\nทัวร์\nทัวร์นาเมนต์\nทัวร์นาเมนท์\nทัวริสต์\nทาเลนต์\nทาวน์\nทาวน์เฮาส์\nทำงาน\nทิป\nทิพยสมบัติ\nทิวลิป\nทีรามิสุ\nทีวี\nทูน่า\nเท็กซ์\nเทค\nเทคโน\nเทคโนแครต\nเทควันโด\nเทป\nเทรด\nเทรนด์\nเทรนเนอร์\nเทรลเลอร์\nเทรลเล่อร์\nเทเลกราฟ\nเทวบัญชา\nเทวบุตร\nเทวา\nเทวาธิราช\nเทโวโรหนะ\nเทอร์โบ\nเที่ยงคืน\nเที่ยงวัน\nเทียมทาน\nแทกติค\nแทคติค\nแทงกั๊ก\nแทงโก้\nโทมาฮอก\nโทมาฮอว์ก\nโทมาฮอว์ค\nโทร\nโทรโข่ง\nไทม์\nไทยแลนด์\nไทเฮา\nธรรมา\nธรรมาภิบาล\nธัมโม\nธีม\nธุรกรรม\nธุหร่ำ\nเธค\nนพมาศ\nนรีแพทย์\nน็อก\nน็อค\nน้องใหม่\nนอมินี\nนอร์ท\nน่ะ\nนางแบบ\nนาฏยศาลา\nนายแบบ\nนายพราน\nนินจา\nนิรันดร์\nนิว\nนิวส์\nนู้ด\nเนอะ\nเนิร์สเซอรี\nเนิร์สเซอรี่\nเนี้ยบ\nโนติส\nไนท์\nไนน์\nบรรพชน\nบร็อกโคลี\nบร็อคโคลี\nบรา\nบริกร\nบริวเวอรี่ส์\nบลอนด์\nบลูเบอร์รี\nบลูเบอร์รี่\nบ๊วย\nบอกซ์\nบ็อกซ์\nบ๊อกซ์\nบอดี้\nบอนด์\nบ๊อบ\nบอมบ์\nบ๋อย\nบอยคอต\nบอยคอตต์\nบอร์ด\nบังเกอร์\nบัตเตอร์\nบัลลาสต์\nบัส\nบาบูน\nบาร์บีคิว\nบาร์บี้\nบาลานซ์\nบิ๊ก\nบิล\nบึม\nบึ้ม\nบุญคุณ\nบุ๋น\nบุปผา\nบู๊\nบูชิโด\nบูติก\nบูติค\nบูม\nเบเกอรี่\nเบญจมบพิตร\nเบตาดีน\nเบนโตะ\nเบนโล\nเบบี้\nเบลอ\nเบอร์เกอร์\nเบอร์รี\nเบิร์ด\nเบิร์น\nแบ็กโฮ\nแบคโฮ\nแบด\nแบต\nแบนเนอร์\nแบรนด์\nแบล็ก\nแบล็ค\nไบโอ\nโบกี้\nโบตั๋น\nโบ้ย\nโบรกเกอร์\nโบรชัวร์\nโบว์\nโบว์ลิ่ง\nไบเบิล\nปฏิสัมพันธ์\nป๊อก\nปอดแหก\nป๊อป\nป๋อหลอ\nปักขคณนา\nปัจเจกชน\nปัจฉิมนิเทศ\nป๊า\nป๋า\nป่าไม้\nปาร์ตี้\nปาสกาล\nปาสคาล\nปาสเตอร์\nปิกอัพ\nปิ๊ง\nปิโตรเคมี\nปิยมิตร\nปึ้ก\nปูอัด\nเปโซ\nเป็นไง\nเปปเปอร์มินต์\nเปเปอร์\nเปราะบาง\nเป๊ะ\nเป่ายิงฉุบ\nเป่ายิ้งฉุบ\nเปียโน\nแป้ก\nแป๋ว\nแป๊ะเจี๊ยะ\nโปร\nโปรเจกต์\nโปรเจ็กต์\nโปรเจกเตอร์\nโปรเจ็กเตอร์\nโปรเจคท์\nโปรเจ็คท์\nโปรดักชั่น\nโปรดิวเซอร์\nโปรโมชั่น\nโปรโมต\nโปรโมเตอร์\nโปรโมท\nโปลิศ\nโปสเตอร์\nผลไม้\nผลักดัน\nผ้าห่ม\nผิดพลาด\nผู้นำ\nแผดเผา\nเฝอ\nพงษ์\nพริตตี้\nพรีเซนต์\nพรีเซ็นเตอร์\nพรีเมียม\nพรีเมียร์\nพฤหัส\nพล็อต\nพลาซ่า\nพลานุภาพ\nพ่อค้า\nพอเพียง\nพะเรอ\nพันธกิจ\nพันธุวิศวกรรม\nพาร์\nพาร์ตเนอร์\nพาร์ทเนอร์\nพาวเวอร์\nพาสเจอร์ไรส์\nพาสตา\nพาสต้า\nพาสปอร์ต\nพาเหรด\nพิซซ่า\nพีเรียด\nพุดดิ้ง\nพุทธภูมิ\nพุทธศตวรรษ\nพุทโธ\nพูล\nเพทนาการ\nเพนกวิน\nเพนตากอน\nเพรส\nเพรียวบาง\nเพลซ\nเพลท\nเพลย์บอย\nเพียบแปร้\nเพียว\nเพาเวอร์\nแพกเกจ\nแพ็ค\nแพตเทิร์น\nแพทเทิร์น\nแพทยสภา\nแพนงเชิญ\nแพนดา\nแพนด้า\nแพลน\nโพลล์\nโพลารอยด์\nโพสต์\nไพลิน\nฟยอร์ด\nฟรังก์\nฟรุต\nฟลอร์\nฟลุก\nฟลุค\nฟลุต\nฟลุท\nฟอยล์\nฟอร์ม\nฟันด์\nฟาวล์\nฟาสต์ฟู้ด\nฟินิกซ์\nฟิวเจอร์\nฟีด\nฟีเวอร์\nฟุตบาท\nเฟรช\nเฟรชชี่\nเฟรม\nเฟมินิสต์\nเฟส\nเฟอร์นิเจอร์\nเฟอร์รี่\nเฟิร์ม\nเฟี้ยวฟ้าว\nแฟกซ์\nแฟ็กซ์\nแฟนซี\nแฟนตาซี\nแฟ้บ\nแฟร์\nแฟรนไชส์\nแฟรี\nแฟรี่\nแฟลช\nแฟล็ต\nโฟน\nโฟม\nโฟล์ค\nไฟต์\nไฟแนนซ์\nไฟลต์\nไฟลท์\nภควัทคีตา\nภควัมบดี\nภควัมปติ\nภคันทลาพาธ\nภววิสัย\nภารตะ\nภูมิทัศน์\nม้ง\nมวลชน\nมยุราภิรมย์\nมลภาวะ\nมหภาค\nมหาอุปราชา\nมอคคา\nมอคค่า\nมอนสเตอร์\nม็อบ\nมอบตัว\nมอยส์เจอไรเซอร์\nมอลล์\nมะกัน\nมั้ง\nมัฟฟิน\nมั้ย\nม้านั่ง\nมาเฟีย\nมาม่า\nมายองเนส\nมายาคติ\nมาร์ก\nมาร์เก็ต\nมาร์เก็ตติ้ง\nมาร์ค\nมาร์จิน\nมาร์ช\nมาร์ต\nมาร์ท\nมาราธอน\nม้าหินอ่อน\nมินต์\nมินท์\nมินิ\nมิลค์\nมิวสิค\nมิสซัง\nมิสไซล์\nมิสเตอร์\nมือถือ\nมุมมอง\nเมคอัพ\nเมจิก\nเมจิค\nเมทัล\nเมเปิล\nเมาท์\nเมี่ยงคำ\nแมกกาซีน\nแม็กกาซีน\nแมคเคอเรล\nแม่ค้า\nแมชชีน\nแมชีน\nแมนชั่น\nแมมบ้า\nแมมโบ้\nโมจิ\nโมเดล\nโมเดิร์น\nโมเต็ล\nโมโนเรล\nโมหจริต\nไมค์\nไมเกรน\nยนตรกรรม\nยอมรับ\nยะเยือก\nยังไง\nยากูซ่า\nยาวี\nยิม\nยิว\nยุวทูต\nยูโทเปีย\nยูโร\nยูวี\nเยน\nเยลลี่\nเย้ว\nเยอบีรา\nเยอบีร่า\nเยอร์บีรา\nเยอร์บีร่า\nแยมโรล\nโยเกิร์ต\nโยโย่\nรวมมิตร\nร็อค\nร็อคเก็ต\nรองรับ\nรอมฎอน\nรอยัลตี้\nระโงก\nรันเวย์\nรัม\nรากหญ้า\nราชบัณฑิตยสถาน\nราชานุญาต\nราชานุสาวรีย์\nรามเทพ\nรามาธิบดี\nรามายณะ\nราเม็ง\nราเมน\nรายชื่อ\nราสเบอร์รี\nริกเตอร์\nริคเตอร์\nรีไซเคิล\nรีดไถ\nรีทัช\nรีเทิร์น\nรีไทร์\nรีแบรนด์\nรีพอร์ท\nรีโมต\nรีโมท\nรีวิว\nรีสอร์ต\nรีสอร์ท\nรีเสิร์ช\nรุมบ้า\nรุสโซ\nรูบิก\nรูบิค\nเรซิน\nเรซิ่น\nเรดิโอ\nเรต\nเรตติ้ง\nแรงใจ\nแรงดูด\nแรงผลัก\nแรลลี\nแรลลี่\nโรดแมป\nโรเนียว\nโรแมนติก\nโรแมนติค\nโรล\nโรลออน\nไรเฟิล\nล็อกเกอร์\nลอจิสติกส์\nล็อต\nล็อบบี้\nลอร์ด\nล้มเหลว\nละติน\nละอ่อน\nลาซานญ่า\nลาติน\nลาเต้\nลานีญา\nลามะ\nลิมิต\nลิมูซีน\nลิสต์\nลีก\nลีด\nลีดเดอร์\nลีเมอร์\nลีลาวดี\nลุค\nลูกชาย\nลูกสาว\nเลกเชอร์\nเลคเชอร์\nเลดี้\nเลสเบี้ยน\nเลิฟ\nแลนด์\nแล็บ\nโลโก้\nโลชั่น\nไลท์\nไลน์\nไลฟ์\nวนาราม\nวราราม\nวโรกาส\nว้อดก้า\nวอเตอร์\nวอฟเฟิล\nว้อย\nวอร์ม\nวอร์มอัพ\nวอร์รูม\nวอล์ก\nวอล์ค\nวอลซ์\nวอลนัต\nวอลนัท\nวอลล์\nว่ะ\nวันเวย์\nวัสสา\nวาซาบิ\nวาทกรรม\nวาทะ\nวานิลลา\nวานิลา\nวาฟเฟิล\nวาริชศาสตร์\nว้าว\nวัคค์\nวัจนะ\nวาไรตี้\nวิก\nวิดีโอ\nวิทย์\nวิน\nวิป\nวิปปิ้ง\nวิภัชภาค\nวิว\nวิลล์\nวิลเลจ\nวีเจ\nวีซ่า\nวีดิทัศน์\nวีน\nวีไอพี\nวืด\nเวณิกา\nเวเฟอร์\nเวสต์\nเวอร์\nเวิร์ก\nเวิร์กช็อป\nเวิร์ค\nเวิร์ลด์\nเวิลด์\nแวมไพร์\nไวกิ้ง\nไวเบรเตอร์\nไวอะกร้า\nไวอากร้า\nศากยบุตร\nศิรินทร์\nศิลปวัฒนธรรม\nศิลปากร\nศิวิไลซ์\nศึกษาศาสตร์\nสกรัม\nสกาย\nสกู๊ป\nสเกตช์\nสเก็ตช์\nสคริปต์\nสแควร์\nสงบสุข\nสจ๊วต\nสตรอเบอร์รี\nสตรอเบอรี\nสตรอว์เบอร์รี\nสตริง\nสต็อก\nสต๊อก\nสต็อค\nสต๊อค\nสตอรี\nสตาร์\nสตาร์ท\nสติกเกอร์\nสติ๊กเกอร์\nสตีล\nสตูดิโอ\nสเตชัน\nสเตชั่น\nสเตเดียม\nสเตนเลส\nสเต็ป\nสเตย์\nสเตริโอ\nสเตอริโอ\nสแตนดาร์ด\nสแตนเลส\nสโตน\nสโตร์\nสไตรค์\nสไตล์\nสถาปัตย์\nสไนเปอร์\nสปอต\nสป็อต\nสปอนเซอร์\nสปอร์ต\nสปา\nสปาย\nสปิริต\nสเปก\nสเปค\nสไปเดอร์\nสมณพราหมณ์\nสมาพันธ์\nสมิติเวช\nสโรชา\nสลัม\nสแล็ก\nสโลแกน\nสโลว์\nสไลด์\nสวีท\nสหรัฐ\nสหัชญาณ\nสหัสวรรษ\nสะกอม\nสะเด่า\nสะบึม\nสะบึมส์\nสะออน\nสังโฆ\nสะโหลสะเหล\nสันทนาการ\nสัมนา\nสามช่า\nสามแยก\nสารขัณฑ์\nสี่แยก\nสึนามิ\nสุนทรีย์\nสุริยยาตร\nสุริยยาตร์\nสุหนี่\nเสกสรรค์\nเสพติด\nเสือโคร่ง\nหงวน\nหน่อมแน้ม\nหมวย\nหมั่นโถว\nหม่านโถว\nหมายปอง\nหมิง\nหยวน\nหลวงตา\nหลวงปู่\nหลวงพี่\nหล่อฮังก้วย\nหลินจือ\nห่วย\nเห็นด้วย\nเหมย\nเห่ย\nเหี่ยวย่น\nแหม็บ\nแหวว\nโหงว\nโหงวเฮ้ง\nโหลน\nโหลยโท่ย\nไหง\nไหร่\nอพาร์ตเมนต์\nอพาร์ตเมนท์\nอพาร์ทเมนต์\nอพาร์ทเมนท์\nอมาตยาธิปไตย\nอยุติธรรม\nอริยสงฆ์\nอ่วม\nอวอร์ด\nออกแบบ\nออดิชั่น\nออดิทอเรียม\nออเดอร์\nออโต้\nออทิสติก\nอ่อนด้อย\nออฟ\nออยล์\nออร์แกน\nออร์แกนิก\nออร์แกนิค\nออร์เดอร์\nออรัล\nออสซี่\nอะ\nอัตลักษณ์\nอัตวิสัย\nอันเดอร์\nอันตรกิริยา\nอัลตรา\nอัลไซเมอร์\nอัลบัม\nอัลบั้ม\nอัลมอนด์\nอาข่า\nอาโนเนะ\nอาฟเตอร์\nอาร์ติสต์\nอาร์พีจี\nอาว์\nอาสวะ\nอิกัวนา\nอินดอร์\nอินดัสตรีส์\nอินเตอร์\nอิ่มแปร้\nอิมพีเรียล\nอิเล็กทริก\nอิเล็กทริค\nอิเลียด\nอิสรชน\nอิเหนา\nอิออน\nอีแต๋น\nอีโรติก\nอีเวนท์\nอีสต์\nอีสเตอร์\nอึ๊บ\nอึ้ม\nอึ๋ม\nอึมครึม\nอุด้ง\nอุตสาหการ\nอุเทน\nอุปการคุณ\nอุปทาน\nอุปนายก\nอุปนายิกา\nอุปสงค์\nอุปัทวเหตุ\nอุรังคธาตุ\nอูคูเลเล่\nอู้ฟู่\nเอ๋\nเอ็กซ์โป\nเอ็กซ์เพรส\nเอ็กโซเซต์\nเอ็กโซเซ่ต์\nเอเซีย\nเอ็นจีโอ\nเอ็นเตอร์เทน\nเอนทรานซ์\nเอ็นทรานซ์\nเอฟเฟ็กต์\nเอเยนต์\nเอลนีโญ\nเอสเปรสโซ\nเอสเพรสโซ\nเอ๋อ\nเอาต์\nเอาท์\nเอาท์ดอร์\nเอ๊าะ\nแอ็กชั่น\nแอ็คชั่น\nแอคทีฟ\nแอดมิชชั่น\nแอดมิสชัน\nแอนด์\nแอ๊บแบ๊ว\nแอปเปิล\nแอปเปิ้ล\nแอปพริคอท\nแอพพริคอท\nแอพริคอต\nแอร์\nแอโรบิก\nแอโรบิค\nแอลมอนด์\nแอสเตอร์\nโอเค\nโอเปอเรเตอร์\nโอเปร่า\nโอเพ่น\nโอ้ย\nโอยัวะ\nโอรสาธิราช\nโอเลี้ยง\nโอวัลติน\nโอเวอร์\nไอซ์\nไอซียู\nไอดอล\nไอเดีย\nไอติม\nฮวงจุ้ย\nฮ่องเต้\nฮองเฮา\nฮอต\nฮ็อต\nฮอตดอก\nฮ็อตด็อก\nฮันนีมูน\nฮัม\nฮัลโลวีน\nฮัลโหล\nฮากกา\nฮาร์ด\nฮาราคีรี\nฮาลาล\nฮาโลวีน\nฮิ\nฮิต\nฮิบรู\nฮิปโป\nฮิปฮอป\nฮีโร่\nฮูลาฮูป\nฮูล่าฮูป\nเฮฟวี\nเฮฟวี่\nเฮอร์ริเคน\nเฮีย\nแฮนด์\nแฮปปี้\nแฮมเบอร์เกอร์\nโฮป\nโฮม\nโฮลดิงส์\nโฮลวีต\nโฮสเตส\nไฮกุ\nไฮแจ็ค\nไฮโซ\nไฮเทค\nไฮบริด\nไฮเปอร์\nไฮไลต์\nไฮไลท์\nไฮเวย์\nไฮสคูล\nไฮเอนด์\n\nกรีซ\nกัมพูชา\nกัวเตมาลา\nกาตาร์\nกานา\nกาบอง\nกายอานา\nกินี\nเกรนาดีนส์\nเกรเนดา\nเกาหลี\nแกมเบีย\nโกตดิวัวร์\nคองโก\nคอโมโรส\nคอสตาริกา\nคาซัคสถาน\nคิตส์\nคิริบาตี\nคิริบาส\nคิวบา\nคีร์กีซสถาน\nคูเวต\nเคนยา\nเคปเวิร์ด\nเคย์แมน\nแคนาดา\nแคเมอรูน\nโครเอเชีย\nโคลอมเบีย\nจอร์เจีย\nจอร์แดน\nจาเมกา\nจิบูตี\nจีน\nชาด\nชิลี\nเช็ก\nซามัว\nซาอุ\nซิมบับเว\nซีเรีย\nซูดาน\nซูรินาเม\nเซนต์\nเซเนกัล\nเซอร์เบีย\nเซาตูเม\nเซียร์รา\nแซมเบีย\nโซมาเลีย\nโซเวียต\nไซปรัส\nญี่ปุ่น\nดารุสซาลาม\nเดนมาร์ก\nโดมินิกัน\nโดมินิกา\nตรินิแดด\nตองกา\nติมอร์\nตุรกี\nตูนิเซีย\nเติร์กเมนิสถาน\nโตโก\nโตเบโก\nไต้หวัน\nทาจิกิสถาน\nแทนซาเนีย\nนอร์เวย์\nนามิเบีย\nนาอูรู\nนิการากัว\nนิวซีแลนด์\nเนเธอร์แลนด์\nเนปาล\nเนวิส\nไนจีเรีย\nไนเจอร์\nบราซิล\nบริติช\nบริเตน\nบรูไน\nบอตสวานา\nบอสเนีย\nบังกลาเทศ\nบังคลาเทศ\nบัลแกเรีย\nบาร์บูดา\nบาร์เบโดส\nบาห์เรน\nบาฮามาส\nบิสเซา\nบุรุนดี\nบูร์กินาฟาโซ\nเบนิน\nเบลเยียม\nเบลารุส\nเบลีซ\nเบอร์มิวดา\nโบลิเวีย\nปรินซิปี\nปากีสถาน\nปานามา\nปาปัวนิวกินี\nปารากวัย\nปาเลสไตน์\nปาเลา\nเปรู\nเปอร์เซีย\nเปอร์โตริโก\nโปรตุเกส\nโปแลนด์\nฝรั่งเศส\nพม่า\nฟิจิ\nฟินแลนด์\nฟิลิปปินส์\nเฟรนช์\nภูฏาน\nภูฐาน\nมองโกเลีย\nมอนเตเนโกร\nมอนแทนา\nมอริเชียส\nมอริเตเนีย\nมอลโดวา\nมอลตา\nมัลดีฟส์\nมาเก๊า\nมาซิโดเนีย\nมาดากัสการ์\nมาร์แชลล์\nมาลาวี\nมาลี\nมาเลเซีย\nเม็กซิโก\nเมียนมาร์\nโมซัมบิก\nโมนาโก\nโมนาโค\nโมร็อกโก\nไมโครนีเซีย\nยูกันดา\nยูโกสลาเวีย\nยูเครน\nเยเมน\nเยอรมนี\nรวันดา\nรัสเซีย\nโรมาเนีย\nลักเซมเบิร์ก\nลัตเวีย\nลาว\nลิกเตนสไตน์\nลิทัวเนีย\nลิเบีย\nลีโอน\nลูเซีย\nเลโซโท\nเลบานอน\nเลสเต\nไลบีเรีย\nวาติกัน\nวานูอาตู\nวินเซนต์\nเวเนซุเอลา\nเวียดนาม\nศรีลังกา\nสเปน\nสโลวะเกีย\nสโลวัก\nสโลวีเนีย\nสวาซิแลนด์\nสวิตเซอร์แลนด์\nสวีเดน\nสหรัฐ\nสหราชอาณาจักร\nสิกขิม\nสิงคโปร์\nอเมริกา\nออสเตรเลีย\nออสเตรีย\nอันดอร์รา\nอัฟกานิสถาน\nอาเซอร์ไบจาน\nอาร์เจนตินา\nอาร์เมเนีย\nอาระเบีย\nอิเควทอเรียล\nอิตาลี\nอินเดีย\nอินโดนีเซีย\nอิรัก\nอิสราเอล\nอิหร่าน\nอียิปต์\nอุซเบกิสถาน\nอุรุกวัย\nเอกวาดอร์\nเอธิโอเปีย\nเอมิเรตส์\nเอริเทรีย\nเอลซัลวาดอร์\nเอสโตเนีย\nแองโกลา\nแอนติกา\nแอลจีเรีย\nแอลเบเนีย\nโอมาน\nไอซ์แลนด์\nไอร์แลนด์\nฮ่องกง\nฮอนดูรัส\nฮังการี\nเฮติ\nเฮอร์เซโกวีนา\n\nกระบี่\nกรุงเทพ\nกาญจนบุรี\nกาฬสินธุ์\nกำแพงเพชร\nขอนแก่น\nจันทบุรี\nฉะเชิงเทรา\nชลบุรี\nชัยนาท\nชัยภูมิ\nชุมพร\nเชียงราย\nเชียงใหม่\nตรัง\nตราด\nตาก\nนครนายก\nนครปฐม\nนครพนม\nนครราชสีมา\nนครศรีธรรมราช\nนครสวรรค์\nนนทบุรี\nนราธิวาส\nน่าน\nบึงกาฬ\nบุรีรัมย์\nปทุมธานี\nประจวบคีรีขันธ์\nปราจีนบุรี\nปัตตานี\nพะเยา\nพังงา\nพัทลุง\nพิจิตร\nพิษณุโลก\nเพชรบุรี\nเพชรบูรณ์\nแพร่\nภูเก็ต\nมหาสารคาม\nมุกดาหาร\nแม่ฮ่องสอน\nยโสธร\nยะลา\nร้อยเอ็ด\nระนอง\nระยอง\nราชบุรี\nลพบุรี\nลำปาง\nลำพูน\nเลย\nศรีสะเกษ\nสกลนคร\nสงขลา\nสตูล\nสมุทรปราการ\nสมุทรสงคราม\nสมุทรสาคร\nสระแก้ว\nสระบุรี\nสิงห์บุรี\nสุโขทัย\nสุพรรณบุรี\nสุราษฎร์\nสุราษฎร์ธานี\nสุรินทร์\nหนองคาย\nหนองบัวลำภู\nอยุธยา\nอ่างทอง\nอำนาจเจริญ\nอุดรธานี\nอุตรดิตถ์\nอุทัยธานี\nอุบลราชธานี\nกันทรลักษ์\nจตุจักร\nไชยา\nซีคอน\nดอนเมือง\nถลาง\nไทรโยค\nธนบุรี\nธัญบุรี\nบางกอก\nบางปะกง\nบางระจัน\nปะทิว\nปาย\nพญาไท\nพัฒน์พงษ์\nพัทยา\nพารากอน\nภูมิซรอล\nรัตนาธิเบศร์\nรังสิต\nลันตา\nลาดพร้าว\nวโรรส\nวิภาวดี\nสตึก\nสมุย\nสัตหีบ\nสิมิลัน\nสุขุมวิท\nสุไหง\nเสลภูมิ\nอังรีดูนังต์\nอ่างขาง\nอินทนนท์\nเอ็มโพเรียม\n\nคิวชู\nแคริบเบียน\nแคสเปียน\nดานูบ\nตะนาวศรี\nนอร์วีเจียน\nนิโคบาร์\nเนรัญชรา\nไนล์\nบอร์เนียว\nบอลติก\nเบงกอล\nปิง\nแปซิฟิก\nมะละกา\nมินดาเนา\nมิสซิสซิปปี\nเมดิเตอร์เรเนียน\nเมโสโปเตเมีย\nยมุนา\nยุโรป\nยูเรเชีย\nยูเรเซีย\nแยงซี\nแยงซีเกียง\nสแกนดิเนเวีย\nสะโตง\nสาละวิน\nสุมาตรา\nสุเอซ\nอะเมซอน\nอันดามัน\nอัลไต\nอาร์กติก\nอาหรับ\nอินโดจีน\nอิรวดี\nอิระวดี\nอีเจียน\nอุษาคเณย์\nอูราล\nเอเชีย\nเอเดรียติก\nเอเวอเรสต์\nแอตแลนติก\nแอนตาร์กติก\nแอนตาร์กติกา\nแอฟริกา\nโอลิมปัส\nไอโอเนียน\nฮวงโห\nฮอกไกโด\nฮอนชู\n\nกบิลพัสดุ์\nกุสินารา\nโกลิยะ\nโกสัมพี\nโคตรบอง\nโคตรบูรณ์\nตองอู\nทรอย\nทวารวดี\nทวาราวดี\nเทวทหะ\nไทรบุรี\nนาลันทา\nไบแซนไทน์\nปรัสเซีย\nปัลลวะ\nปาฏลีบุตร\nพุทธคยา\nมถุรา\nมายัน\nมิถิลา\nราชคฤห์\nล้านช้าง\nล้านนา\nลุมพินี\nวัชชี\nเวสาลี\nสารนาถ\nสาวัตถี\nหริภุญชัย\nอโยธยา\nออตโตมัน\nอังวะ\nอินทปัตถ์\nอุชเชนี\n\nกราฟิก\nกราฟิกส์\nกราฟิค\nกริด\nกิกะไบต์\nกูเกิล\nกูเกิ้ล\nเกตเวย์\nโกลบอล\nคลัสเตอร์\nคลาส\nคลิก\nคลิปอาร์ต\nคอนโซล\nคอนเทนต์\nคอมพิวติ้ง\nคอมไพล์\nคอมไพเลอร์\nคอมมูนิเคชั่น\nคอร์\nคีย์\nคีย์บอร์ด\nเครือข่าย\nเคอร์เซอร์\nเคอร์เนล\nแคช\nแคมฟรอก\nแคมฟร็อก\nแคร็ก\nโค้ด\nจาวา\nจีพีเอส\nชิป\nชิพ\nเชลล์\nแช็ต\nแชนเนล\nแชนแนล\nซ็อกเก็ต\nซอฟต์แวร์\nซอฟท์แวร์\nซอร์ส\nซัพพอร์ต\nซัพพอร์ท\nซีดี\nซีดีรอม\nซีเนอร์\nเซิร์ฟเวอร์\nโซลูชัน\nโซลูชั่น\nไซต์\nไซเบอร์\nทรานแซกชัน\nทรานแซกชั่น\nทรานแซ็กชัน\nทรานแซ็กชั่น\nทรานแซคชัน\nทรานแซคชั่น\nทรานแซ็คชัน\nทรานแซ็คชั่น\nทวิตเตอร์\nทวีต\nทัชแพด\nเทมเพลต\nเทอร์มินัล\nแท็ก\nแท็บ\nแทบเล็ต\nโทรจัน\nเน็ต\nเน็ตบุ๊ก\nเน็ตบุค\nเน็ตบุ๊ค\nเน็ตเวิร์ก\nเน็ตเวิร์ค\nโน้ตบุ๊ก\nโน้ตบุค\nโน้ตบุ๊ค\nดอส\nดาวน์เกรด\nดาวน์โหลด\nดิจิตอล\nดิจิทัล\nดีบั๊ก\nดีวีดี\nดีไวซ์\nเดเบียน\nเดลไฟ\nเดสก์ท็อป\nโดเมน\nไดรว์\nไดรเวอร์\nไดเรกทอรี\nไดโอด\nเทเลคอม\nบล็อกเกอร์\nบรอดแบนด์\nบราวเซอร์\nบลูทูท\nบลูทูธ\nบลูเรย์\nบั๊ก\nบัฟเฟอร์\nบิต\nบิท\nบูต\nเบราว์เซอร์\nแบนด์วิดท์\nไบต์\nไบนารี\nโปรแกรมเมอร์\nโปรเซส\nโปรเซสเซอร์\nโปรโตคอล\nพร็อกซี\nพอร์ต\nพอร์ท\nพาเนล\nพาร์ทิชัน\nพารามิเตอร์\nพาสเวิร์ด\nพิกเซล\nเพจ\nเพจเจอร์\nแพกเก็ต\nแพตช์\nแพลตฟอร์ม\nโพรเซส\nโพรเซสเซอร์\nโพรโทคอล\nไพธอน\nฟล็อปส์\nฟอนต์\nฟอร์แมต\nฟอร์เวิร์ด\nฟอรัม\nฟีเจอร์\nเฟซบุ๊ก\nเฟิร์มแวร์\nแฟล็ก\nโฟลเดอร์\nไฟร์ฟอกซ์\nไฟร์วอลล์\nไฟล์\nมอดูล\nมอนิเตอร์\nมัลติ\nมัลติทัช\nมัลติเพล็กซ์\nมัลแวร์\nมาสเตอร์\nมีเดีย\nเมนู\nเมมโมรี\nเมล\nเมาส์\nแมค\nโมดูล\nโมเด็ม\nโมบาย\nโมบายล์\nโมไบล์\nไมโครซอฟท์\nยูนิกซ์\nยูนิโคด\nยูนิโค้ด\nริงโทน\nรีเฟรช\nรีเลย์\nเราเตอร์\nเรียลไทม์\nลิงก์\nลินุกซ์\nลีนุกซ์\nลูป\nเลเยอร์\nแล็ปท็อป\nไลเซนส์\nไลบรารี\nวิกิ\nวิกิพีเดีย\nวินโดวส์\nวินโดว์ส\nเว็บ\nเวอร์ชวล\nเวอร์ชัน\nเวอร์ชั่น\nเวิร์กสเตชัน\nเวิร์กสเตชั่น\nเวิร์คสเตชัน\nเวิร์คสเตชั่น\nเวิร์ด\nเวิร์ม\nไวแมกซ์\nสกรีน\nสแกน\nสแกนเนอร์\nสแต็ก\nสนิฟเฟอร์\nสปายแวร์\nสเปซ\nสแปม\nสมาร์ท\nสล็อต\nเสิร์ช\nโหลด\nออนไลน์\nออปติก\nออปติคอล\nออปติคัล\nออฟไลน์\nออราเคิล\nอัพเกรด\nอัพเดต\nอัพโหลด\nอัปเกรด\nอัปเดต\nอัปโหลด\nอัลกอริทึม\nอาร์กิวเมนต์\nอินเตอร์เน็ต\nอินทิเกรเตอร์\nอินเทอร์เน็ต\nอินเทอร์เฟซ\nอินเทล\nอินพุต\nอินพุท\nอีเมล\nอีเมล์\nอูบุนตู\nอูบันตู\nเอนจิน\nเอ็นจิน\nเอาต์พุต\nเอาต์พุท\nเอาท์พุต\nเอาท์พุท\nแอนะล็อก\nแอนิเมชัน\nแอนิเมชั่น\nแอปพลิเคชัน\nแอปพลิเคชั่น\nแอพพลิเคชัน\nแอพพลิเคชั่น\nแอสเซมบลี\nแอสเซมเบลอร์\nโอเพน\nไอคอน\nไอซี\nไอพอด\nไอพ็อด\nไอแพด\nไอโฟน\nฮับ\nฮาร์ดดิสก์\nฮาร์ดแวร์\nแฮกเกอร์\nแฮ็กเกอร์\nแฮนด์เฮลด์\nโฮสต์\n\nกรีก\nกัณณาฑ\nกัศมีรี\nคันจิ\nคาตาคานะ\nคุชราตี\nคุรุมุขี\nซีริลลิก\nซูลู\nเซลติก\nเซิร์บ\nตากาล็อก\nเตลุคู\nเติร์ก\nทราวิฑ\nเบงกาลี\nปัญจาบี\nพินอิน\nมลยาฬัม\nมองโกล\nมาราฐี\nมาเลย์\nเม็กซิกัน\nแมนจู\nแมนดาริน\nไมถิลี\nเยอรมัน\nรัสเซียน\nสวาฮิลี\nสวิส\nสินธี\nอูรดู\nอัสสมี\nอารบิก\nอิตาเลียน\nอุยกูร์\nแอฟริกัน\nโอริยา\nไอริช\nฮันกึล\nฮินดี\nฮิรางานะ\nฮีบรู\n\nกรีนพีซ\nกรือเซะ\nกวนอิม\nกวนอู\nกัดดาฟี\nกัลยาณวัตร\nกัสสปะ\nกาลิเลโอ\nกินเนส\nกุมภกรรณ\nกูเตนเบิร์ก\nเกตส์\nเกษมณี\nโกณฑัญญะ\nขงเบ้ง\nคริสโตเฟอร์\nคองคอร์ด\nคอลเกต\nคานธี\nคาเบรียล\nคาร์ฟูร์\nคาร์สัน\nคาราบาว\nคาสิโอ\nคิริน\nคุนลุ้น\nคูโบต้า\nเครมลิน\nแคทรีนา\nโคตมะ\nโคตมี\nโคลัมบัส\nไคฟง\nไครสเลอร์\nง้อไบ๊\nจตุพร\nจ็อบส์\nจอห์น\nจิ้น\nจิม\nจิ๋ม\nจิว\nจุฬาภรณ์\nจุฬาลงกรณ์\nเจมส์\nแจ็กสัน\nโจเซฟ\nโจว\nชมัยมรุเชฐ\nชมัยมรุเชษฐ์\nชเวดากอง\nชาร์ลส์\nชินราช\nชินวัตร\nชุนชิว\nเช็ง\nเชตวัน\nเชฟรอน\nเชฟโรเลต\nเชลซี\nไชยานุชิต\nซ่ง\nซังฮี้\nซัดดัม\nซันซิล\nซัมซุง\nซัวเจ๋ง\nซินหัว\nซีซาร์\nซีแพค\nซูซาน\nซูซูกิ\nซูบารุ\nเซ็นทารา\nเซเวน\nเซเว่น\nโซฟิเทล\nโซยุซ\nโซยูซ\nณัฐวุฒิ\nดาร์ลี่\nดาวโจนส์\nดิสนีย์\nดีแทค\nดูปองท์\nเดโมแครต\nเดลล์\nเดลินิวส์\nเดวิด\nแดวู\nโดนัลด์\nโดราเอมอน\nโดเรมอน\nต๋อง\nตั๊กม้อ\nตากสิน\nตาเมือน\nตาลีบัน\nตูน\nเตมีย์\nโต๋\nโตชิบา\nโตโยต้า\nถังซัมจั๋ง\nถังซำจั๋ง\nทรพา\nทราเวล\nทรูมูฟ\nทีปังกร\nเทปโก\nเทพรัตน\nเทวทัต\nเทสโก้\nโทมัส\nไททานิก\nไททานิค\nไทยรัฐ\nธีออส\nนครินทรา\nนโปเลียน\nนพดล\nนราดูร\nนเรนทร\nนอสตราดามุส\nนาซา\nนาซ่า\nนาซี\nนาโต\nนาโต้\nนาลแก\nนิคอน\nนิโคลัส\nนิด้า\nนินเทนโด\nนิปปอน\nนิวตัน\nนิสสัน\nเนคเทค\nเนชั่น\nเนชันแนล\nเนชั่นแนล\nเนวิน\nเนสเล่\nเนสาด\nแนท\nแนสแดค\nโนเกีย\nโนเบล\nโนเวลล์\nโนโวเทล\nไนเม็กซ์\nบรอดเวย์\nบรัดเลย์\nบรู๊ซ\nบัลเมอร์\nบารัก\nบารัค\nบู๊ตึ๊ง\nเบญกาย\nเบนซ์\nเบ็นซ์\nเบนจามิน\nโบตัน\nไบโอเทค\nประชาธิปัตย์\nปวีณา\nปอเต็กตึ๊ง\nปอเต๊กตึ๊ง\nป่อเต็กตึ๊ง\nปัตตะโชติ\nปารุสก์\nปีเตอร์\nปูติน\nเป๊ปซี่\nเป้ย\nเปอร์โยต์\nเปาบุ้นจิ้น\nโปเกมอน\nโป๊ยก่าย\nพรหมทัต\nพลาโต\nพอลล่า\nพานาโซนิค\nพานาโซนิก\nพิทยานุกูล\nพิมพิสาร\nเพนแทกซ์\nเพลโต\nไพโอเนียร์\nฟรอยด์\nฟรังซิส\nฟรานซิส\nฟลอเรนซ์\nฟอร์ด\nฟิลิปส์\nฟูจิ\nแฟซ่า\nโฟร์โมสต์\nภูมิพล\nภูริทัต\nมงฟอร์ต\nมณโฑ\nมติชน\nมหิตลาธิเบศร\nมโหสถ\nมัจฉานุ\nมาร์กาเร็ต\nมาร์ติน\nมาสด้า\nมิตซูบิชิ\nมิราเคิล\nมุสโสลินี\nเม้ง\nเมจิ\nเมอร์ซีเดส\nเมอร์เซเดส\nแมกซ์เวลล์\nแมกไซไซ\nแมคอินทอช\nแมชีนเนอรี่\nโมคคัลลานะ\nโมโตโรลา\nโมโตโรล่า\nโมเนีย\nไมเคิล\nไมยราพณ์\nยโสธรา\nยะโฮวา\nยะโฮวาห์\nยามาฮ่า\nยาเวห์\nยาฮู\nยูนิเซฟ\nยูเนสโก\nยูไล\nเยโฮวาห์\nรอยเตอร์\nรอยัล\nรัชดา\nรัสปูติน\nราฟาเอล\nรามาวตาร\nราเมศวร\nราหุล\nริชาร์ด\nรีพับลิกัน\nรูนีย์\nเรนโบว์\nแรมโบ้\nโรตารี\nโรนัลโด\nโรนัลโด้\nโรบินสัน\nโรเบิร์ต\nล็อกซเล่ย์\nลิงคอล์น\nลิจฉวี\nลิไท\nลิไทย\nลินคอล์น\nลิเวอร์พูล\nเลโนโว\nเลียดก๊ก\nโลตัส\nวชิราลงกรณ์\nวลาดิเมียร์\nวอลล์สตรีท\nวาเลนไทน์\nวิกตอเรีย\nวิทยานุสรณ์\nวิทยายน\nวิมเบิลดัน\nวิลเลียม\nวีระ\nวุฒิชัย\nเวียดกง\nไวตามิลค์\nศกุนตลา\nศรีวิชัย\nศิริพงษ์\nศิริราช\nศุภชลาศัย\nสดกก๊อกธม\nสดายุ\nสตาลิน\nสตีฟ\nสแตนฟอร์ด\nสวรินทิรา\nสังกัจจายน์\nสาทิตย์\nสารีบุตร\nสิริกิติ์\nสิรินธร\nสิหิงค์\nสีวลี\nสีหนุ\nสีหมุนี\nสีหโมนี\nสุครีพ\nสุทโธทนะ\nสุเทพ\nสุนทราภรณ์\nสุนีย์\nสุรนารี\nสุรยุทธ์\nสุริยาสน์\nเส้าหลิน\nโสกราตีส\nโสภิต\nหนุมาน\nหลินฮุ่ย\nหลุยส์\nเห้งเจีย\nไหหม่า\nองคต\nองคุลิมาล\nอชาตศัตรู\nอดุลยเดช\nอพอลโล\nอริสโตเติล\nอริสมันต์\nอลิซาเบธ\nอ๋อม\nออร์คิด\nออสการ์\nอะพอลโล\nอับราฮัม\nอั้ม\nอัลกออิดะห์\nอัลคาเทล\nอัลจาซีราห์\nอัลเฟรด\nอัลเลาะห์\nอัสซุส\nอัสสชิ\nอัสสัมชัญ\nอาเซม\nอาเซ็ม\nอาเซียน\nอาฟต้า\nอาร์เซนอล\nอินทรชิต\nอินทราทิตย์\nอีซูซุ\nอีเลฟเวน\nอีเลฟเว่น\nอุณรุท\nอุบลรัตน์\nอุบาลี\nอุ๋ย\nเอกทัศน์\nเอเซอร์\nเอ็ดเวิร์ด\nเอดิสัน\nเอแบค\nเอลิซาเบธ\nเอสพลานาด\nเอสพลานาร์ด\nแอคคอร์\nแอคคอร์ด\nแองเจลิน่า\nแอตแลนติส\nแอน\nแอ๋ม\nแอมบาสซาเดอร์\nแอมบาสเดอร์\nแอมเวย์\nแอ๋ว\nโอดีสซีย์\nโอเดียน\nโอบามา\nโอรสาราม\nโอลิมเปีย\nโออิชิ\nไอน์สไตน์\nฮอนด้า\nฮอปกินส์\nฮอลลีวูด\nฮอลลีวู้ด\nฮานามิ\nฮามาส\nฮิตเลอร์\nฮิตาชิ\nฮุนเซน\nฮุนเซ็น\nฮุนได\nฮุสเซ็น\nเฮนรี\nเฮนรี่\nเฮเลน\nโฮจิมินห์\nโฮปเวลล์\nโฮเมอร์\n\nกลีเซอรีน\nกำทอน\nแกนีมีด\nครอส\nคริสตัล\nคลอโรพลาสต์\nคลอไรด์\nควอนตัม\nคอนดักเตอร์\nคอปเปอร์\nคอลลาเจน\nคอเลสเตอรอล\nคอสมิก\nคูลอมบ์\nเคอราติน\nแคโรทีน\nแคสสินี\nโครมาโทกราฟี\nไคโตซาน\nจีโนม\nจุลชีววิทยา\nชิคุนกุนยา\nซัลฟิวริก\nซัลเฟต\nซัลไฟด์\nซิงค์\nซิริอุส\nซิลิกา\nซิลิเกต\nซิลิโคน\nซีเทน\nซีเวิร์ต\nเซ็กเตอร์\nเซ็กเมนต์\nเซมิ\nโซนาร์\nไซบอร์ก\nดอปเปลอร์\nดอปเพลอร์\nไดนามิก\nไดนามิกส์\nไดนามิค\nไดนามิคส์\nไดออกไซด์\nทรานส์\nทามิฟลู\nเทฟลอน\nเทสโทสเตอโรน\nเทอร์โม\nแทนนิน\nไททัน\nไทฟอยด์\nไทรอยด์\nธาลัสซีเมีย\nเนกาตีฟ\nโนวา\nบอแรกซ์\nโบทอกซ์\nโบท็อกซ์\nไบโอติน\nปฏิยานุพันธ์\nโปรเจสเตอโรน\nพอลิเมอร์\nพันธุศาสตร์\nพัลซาร์\nพาร์กินสัน\nพาราเซตามอล\nพาราโบลา\nเพอร์ออกไซด์\nโพรเจสเทอโรน\nโพลาไรซ์\nโพลิเมอร์\nโพลีเอทิลีน\nไพรเมต\nฟลาโวนอยด์\nฟลูออเรสเซนซ์\nฟลูออไรด์\nฟอสซิล\nฟิชชัน\nฟิวชัน\nฟีโรโมน\nไฟเบอร์\nมอนอกไซด์\nมิราจ\nเมตริกซ์\nเมทริกซ์\nเมลานิน\nเมลามีน\nโมเมนตัม\nไมโตคอนเดรีย\nไมโทคอนเดรีย\nยีสต์\nยูริก\nยูเรีย\nรูมาตอยด์\nวีก้า\nเวกเตอร์\nเวก้า\nเวสิเคิล\nโวลต์\nสเกล\nสเกลาร์\nสเต็ม\nสเตียรอยด์\nสปีชีส์\nสเปิร์ม\nสัมพัทธภาพ\nสุริยจักรวาล\nออกเทน\nออโรรา\nออโรร่า\nอะคริลิก\nอะครีลิก\nอะซีติก\nอะซีโตน\nอะมิโน\nอะลูมินา\nอันโดรเมดา\nอัลคาไลน์\nอัลตราซาวด์\nอัลตราซาวนด์\nอัลลอยด์\nอินทิกรัล\nอินทิเกรต\nอีโบลา\nอีโบล่า\nเอ็กซ์โพเนนเชียล\nเอทานอล\nเอทิลีน\nเอนโทรปี\nเอสเตอร์\nเอสโตรเจน\nเอสโทรเจน\nแอนดรอยด์\nแอนแทร็กซ์\nแอมพลิจูด\nแอมโมเนียม\nแอลกอฮอลิซึม\nแอสพาร์แตม\nโอเซลทามิเวียร์\nฮับเบิล\nฮิวมัส\nไฮดรอกไซด์\nไฮดรอลิก\nไฮโดรลิก\nไฮเพอร์โบลา\n\nกงเต็ก\nกฎุมพี\nกฏ\nกฏหมาย\nกบฎ\nกราไฟต์\nก๊อปปี้\nกะทะ\nกังวาล\nกุฎฐัง\nกุฏุมพี\nฃวด\nคฑา\nคลินิค\nคลีนิก\nคลีนิค\nคาทอลิค\nคึ่นฉ่าย\nแคตตาล็อก\nโควต้า\nฅน\nจุมพฎ\nช็อคโกแลต\nแซ่ด\nดัทช์\nทนง\nทรมาณ\nทราก\nทะแยง\nทิฏฐิ\nบล็อค\nบ๊องแบ๊ว\nบัลเล่ต์\nเบรค\nแบงค์\nปรากฎ\nปัคคหะ\nปาฏิโมกข์\nปิติ\nปิรามิด\nโปรเตสแตนท์\nพนิช\nพยักเพยิด\nพริ้ว\nพลูโตเนียม\nพากษ์\nเฟิร์น\nยากี้\nเยภุยยสิกา\nรุสเซีย\nฤาษี\nล็อค\nล็อคเกอร์\nวันทยาหัตถ์\nวานิช\nวิญญาน\nวิศิษฐ์\nศรีษะ\nสเปกโทรสโคป\nสฤษฎ์\nสลิ่ม\nสัตตสดก\nสาราณียากร\nสุกี้\nสุกี้ยากี้\nสูญญากาศ\nหยอมแหยม\nหยอย\nหล่ะ\nอะดรีนาลีน\nอะหลั่ย\nอัตคัต\nอัฟริกา\nอานิสงค์\nอาฟริกา\nอิริยาบท\nอิเลคโทรนิคส์\nอีรุงตุงนัง\nอุตรายัน\nอุลตรา\nอุลตร้า\nโอกาศ\n\nกกหู\nกงการ\nกงจักร\nกฎเกณฑ์\nกฎบัตร\nกฎหมาย\nกฎหมู่\nกดขี่\nกดดัน\nก้นกบ\nก้นบึ้ง\nก้นปล่อง\nกนิษฐภคินี\nกนิษฐภาดา\nกรงเล็บ\nกรมการ\nกรมท่า\nกรมธรรม์\nกรมนา\nกรมวัง\nกรรมกร\nกรรมการ\nกรรมฐาน\nกรรมบถ\nกรรมพันธุ์\nกรรมวิธี\nกรรมสิทธิ์\nกระจกเงา\nกระจกตา\nกระจกนูน\nกระจกเว้า\nกระจอกชวา\nกระจอกเทศ\nกระจ้อยร่อย\nกระจับบก\nกระจับปิ้ง\nกระจับปี่\nกระโชกโฮกฮาก\nกระดานดำ\nกระดานหก\nกระดาษแก้ว\nกระดาษไข\nกระดาษทราย\nกระดาษสา\nกระดูกงู\nกระทาชาย\nกระเท่เร่\nกระบวนการ\nกระบองเพชร\nกระผีกริ้น\nกระยาทิพย์\nกระยาสารท\nกระยาหาร\nกระสอบทราย\nกระสุนปืน\nกระแสจิต\nกระแสน้ำ\nกระแสลม\nกรับคู่\nกรับพวง\nกรับเสภา\nกราดเกรี้ยว\nกราวรูด\nกริ่งเกรง\nกรีฑาสถาน\nกรีดกราย\nกรี๊ดกร๊าด\nกลไก\nกลบท\nกลเม็ด\nกลยุทธ์\nกลวิธี\nกลศาสตร์\nกลอักษร\nกลบเกลื่อน\nกลมกล่อม\nกลมกลืน\nกลมเกลียว\nกล้วยแขก\nกล้วยไม้\nกล่องเสียง\nกล่อมเกลา\nกล่อมเกลี้ยง\nกลัดกลุ้ม\nกลัดมัน\nกลั่นกรอง\nกลั่นแกล้ง\nกลับกลอก\nกลางคน\nกลางคัน\nกลางค่ำ\nกลางคืน\nกลางแจ้ง\nกลางแปลง\nกลางวัน\nกลาดเกลื่อน\nกล่าวขวัญ\nกล่าวโทษ\nกล่าวหา\nกล้ำกราย\nกล้ำกลืน\nกลิ้งกลอก\nกลิ้งเกลือก\nกลิ่นอาย\nกลียุค\nกวดขัน\nกวัดแกว่ง\nกวัดไกว\nกวีนิพนธ์\nก่อกวน\nก่อการ\nก่อตั้ง\nก่อสร้าง\nก่อหวอด\nก้อร่อก้อติก\nกองกลาง\nกองเกิน\nกองโจร\nกองทัพ\nกองทุน\nกองพล\nกองพัน\nกองฟอน\nกองร้อย\nกองหนุน\nกอบโกย\nกะเกณฑ์\nกะบังลม\nกักกัน\nกักขัง\nกักตัว\nกักตุน\nกัณฑ์เทศน์\nกัดฟัน\nกันชน\nกันท่า\nกันสาด\nกันเอง\nกับแกล้ม\nกับข้าว\nกับระเบิด\nกากเพชร\nกากหมู\nกาชาด\nกาญจนาภิเษก\nก้านคอ\nกาฝาก\nก้ามกราม\nกามกิจ\nกามคุณ\nกามเทพ\nกามโรค\nก้ามปู\nกายกรรม\nกายบริหาร\nกายภาพ\nกายวิภาค\nกายสิทธิ์\nก่ายกอง\nการคลัง\nการเงิน\nการบ้าน\nการเปรียญ\nการเมือง\nการเรือน\nการละเล่น\nกาลกิริยา\nกาลเทศะ\nก้าวก่าย\nก้าวร้าว\nก้าวหน้า\nกาสาวพัสตร์\nกาฬพฤกษ์\nกาฬโรค\nกำปั้น\nกำมือ\nกำแพงขาว\nกำลังใจ\nกำลังม้า\nกี่งอำเภอ\nกิจกรรม\nกิจการ\nกิจวัตร\nกิจจะลักษณะ\nกิตติคุณ\nกิตติศัพท์\nกินขาด\nกินใจ\nกินดอง\nกินโต๊ะ\nกินแบ่ง\nกินเปล่า\nกินเลี้ยง\nกินเส้น\nกินแหนง\nกิโลกรัม\nกิโลเมตร\nกิโลลิตร\nกิโลเฮิรตซ์\nกีดกัน\nกีดกั้น\nกีดขวาง\nกึกก้อง\nกึกกัก\nกึกกือ\nกึ่งกลาง\nกุกกัก\nกุ๊กกิ๊ก\nกุ้งฝอย\nกุ้งมังกร\nกุ้งแห้ง\nกุ้งเต้น\nกุ้งยิง\nกุญแจผี\nกุญแจมือ\nกุญแจเลื่อน\nกุญแจเสียง\nกุลธิดา\nกุลบุตร\nกุลสตรี\nกู้ยืม\nเก้งก้าง\nเก็บกวาด\nเก็บเกี่ยว\nเก็บงำ\nเก็บตก\nเกรงกลัว\nเกรงใจ\nเกรงขาม\nเกรียงไกร\nเกรียมกรม\nเกรี้ยวกราด\nเกล็ดเลือด\nเกลี้ยกล่อม\nเกลี้ยงเกลา\nเกลือกกลั้ว\nเกลือกกลิ้ง\nเกลื่อนกล่น\nเกลื่อนกลาด\nเกศธาตุ\nเกษตรกร\nเกษตรกรรม\nเกษตรศาสตร์\nเกษมสันต์\nเกษียรสมุทร\nเก้อเขิน\nเกาะแกะ\nเกี่ยงงอน\nเกียจคร้าน\nเกียรติคุณ\nเกียรตินิยม\nเกียรติประวัติ\nเกียรติภูมิ\nเกียรติยศ\nเกียรติศักดิ์\nเกียรติมุข\nเกี่ยวข้อง\nเกี่ยวดอง\nเกี่ยวพัน\nเกี่ยวโยง\nเกี้ยวพาน\nเกี้ยวพาราสี\nแก่แดด\nแก้ขัด\nแก้ไข\nแก้ตัว\nแก้เผ็ด\nแก้ลำ\nแกงคั่ว\nแกงจืด\nแกงบวด\nแกงป่า\nแกงเผ็ด\nแกงส้ม\nแก่งแย่ง\nแก่นแก้ว\nแก่นสาร\nแก้วตา\nแก้วหู\nแกว่งกวัด\nแกว่งไกว\nแกะรอย\nโก้เก๋\nโกรธเกรี้ยว\nโกรธขึ้ง\nไก่เขี่ย\nไก่ชน\nไก่บ้าน\nไก่ป่า\nไก่ฟ้า\nไกล่เกลี่ย\nขจัดขจาย\nขนเพชร\nขนสัตว์\nขนหนู\nขนส่ง\nขนมจีน\nขบขัน\nขบวนการ\nข่มขี่\nข่มขู่\nข่มขืน\nข่มเหง\nขมหิน\nขมิ้นชัน\nขมุบขมิบ\nขยะแขยง\nขยักขย่อน\nขยักขย้อน\nขยับขยาย\nขยับเขยื้อน\nขวดโหล\nขวยเขิน\nขวัญใจ\nขวัญตา\nขวัญอ่อน\nขวากหนาม\nขวางโลก\nของ้าว\nขอสับ\nขอขมา\nขอทาน\nขอโทษ\nขอร้อง\nขออภัย\nข้อเขียน\nข้อความ\nข้อเท็จจริง\nของกลาง\nของขวัญ\nของแข็ง\nของชำ\nของลับ\nของเล่น\nของว่าง\nของเหลว\nของไหล\nของไหว้\nข้องใจ\nข้องแวะ\nขอบข่าย\nขอบเขต\nขอบคุณ\nขอบใจ\nขอบพระคุณ\nข้อมูล\nข้อแม้\nข้อหา\nข้อสังเกต\nขัดข้อง\nขัดขืน\nขัดเขิน\nขัดจังหวะ\nขัดดอก\nขัดแตะ\nขัดยอก\nขัดแย้ง\nขัดสมาธิ\nขันหมาก\nขันอาสา\nขับขี่\nขับเคี่ยว\nขั้วโลก\nขาจร\nขาประจำ\nข้าราชการ\nข้าศึก\nข้าหลวง\nขาดแคลน\nขาดใจ\nขาดตอน\nขาดตัว\nขาดทุน\nขาดเหลือ\nขายหน้า\nข่าวกรอง\nข่าวคราว\nข่าวล่า\nข่าวลือ\nข่าวสาร\nข้าวเกรียบ\nข้าวแกง\nข้าวของ\nข้าวจี่\nข้าวเจ้า\nข้าวซอย\nข้าวต้ม\nข้าวตอก\nข้าวตัง\nข้าวแตน\nข้าวทิพย์\nข้าวบิณฑ์\nข้าวเปลือก\nข้าวโพด\nข้าวฟ่าง\nข้าวเม่า\nข้าวสวย\nข้าวสาร\nข้าวเหนียว\nข้าวหมาก\nข้าวหลาม\nขี้เกียจ\nขี้ข้า\nขี้ครอก\nขี้คร้าน\nขี้คุก\nขี้ไคล\nขี้เซา\nขีดขั้น\nขีดคร่อม\nขีดคั่น\nขีดฆ่า\nขี้ตา\nขี้ตืด\nขี้เถ้า\nขี้ทูด\nขี้ปะติ๋ว\nขี้ผึ้ง\nขี้มูก\nขี้ยา\nขี้แย\nขี้ริ้ว\nขี้เรื้อน\nขี้เล็บ\nขี้หู\nขี้หน้า\nขี้เหนียว\nขี้เหล็ก\nขี้เหร่\nขึงขัง\nขึงพืด\nขึ้งโกรธ\nขึ้นใจ\nขึ้นชื่อ\nขึ้นมือ\nขืนใจ\nขื่นขม\nขุดคุ้ย\nขุนทอง\nขุนนาง\nขุนพล\nขุนศึก\nขุนหลวง\nขูดรีด\nเข็มกลัด\nเข็มขัด\nเข้มข้น\nเข้มแข็ง\nเข้มงวด\nเข็มทิศ\nเข็มหมุด\nเข้าขา\nเข้าเค้า\nเข้าใจ\nเข้าชื่อ\nเข้าตัว\nเข้าถึง\nเข้าทรง\nเข้าท่า\nเข้าที\nเข้าเนื้อ\nเข้าเล่ม\nเขียวเสวย\nเขียวหวาน\nแขกเต้า\nแข็งกร้าว\nแข็งกล้า\nแข็งแกร่ง\nแข็งข้อ\nแข็งขัน\nแข่งขัน\nแข็งใจ\nแข็งตัว\nแข็งเมือง\nแข็งแรง\nแขวนลอย\nโขกสับ\nโขยกเขยก\nไขข้อ\nไขควง\nไขมัน\nไข่มุก\nไขว่ห้าง\nไขสันหลัง\nไขสือ\nไข่เค็ม\nไข่เยี่ยวม้า\nไข่หงส์\nไข่เหี้ย\nคงกระพัน\nคงตัว\nคงทน\nคงที่\nคชลักษณ์\nคชสาร\nคชสีห์\nคชราช\nคณิตศาสตร์\nคดเคี้ยว\nคติธรรม\nคติพจน์\nคนกลาง\nคนไข้\nคนใช้\nคนทรง\nคบไฟ\nคบเพลิง\nคบค้า\nคบคิด\nคบหา\nคมคาย\nครบครัน\nครบถ้วน\nครอบครอง\nครอบคลุม\nครอบครัว\nครอบงำ\nครอบจักรวาล\nคริสตกาล\nคริสตจักร\nคริสต์มาส\nคริสต์ศตวรรษ\nคริสต์ศักราช\nคริสตัง\nคริสเตียน\nครุกรรม\nครุภัณฑ์\nครุศาสตร์\nครุฑพ่าห์\nครุ่นคิด\nคลอเคลีย\nคล่องแคล่ว\nคล่องตัว\nคล่องมือ\nคลั่งไคล้\nคลาคล่ำ\nคลาไคล\nคลาดเคลื่อน\nคลาดแคล้ว\nคลี่คลาย\nคลึงเคล้น\nคลึงเคล้า\nคลื่นไส้\nคลื่นเหียน\nคลุกคลี\nคลุกคลาน\nคลุมเครือ\nคลุมโปง\nคลุ้มคลั่ง\nควงสว่าน\nควบคุม\nควบคู่\nควบแน่น\nควันหลง\nความคิด\nความหลัง\nความเห็น\nคอหอย\nคอห่าน\nคอแห้ง\nค่อนขอด\nค่อนแคะ\nค้อนควัก\nคั่งค้าง\nคั่งแค้น\nคัดค้าน\nคัดง้าง\nคัดท้าย\nคัดเลือก\nคันจาม\nคันฉ่อง\nคันฉาย\nคันชัก\nคันชั่ง\nคันไถ\nคันนา\nคันเร่ง\nคับขัน\nคับคั่ง\nคับแค้น\nคับแคบ\nคางทูม\nคางหมู\nค้างคืน\nค้างปี\nคาดคั้น\nคาดเชือก\nคาดโทษ\nคาดหมาย\nคานหาม\nคาบเกี่ยว\nคาบศิลา\nคาบสมุทร\nคำขาด\nคำนำ\nคิดค้น\nคืนดี\nคืนตัว\nคุกเข่า\nคุณค่า\nคุณชาย\nคุณธรรม\nคุณนาย\nคุณภาพ\nคุณลักษณะ\nคุณวุฒิ\nคุณศัพท์\nคุณสมบัติ\nคุณหญิง\nคุณากร\nคุณูปการ\nคุโณปการ\nคุมเชิง\nคุ้มกัน\nคุยเขื่อง\nคุยโต\nคุ้ยเขี่ย\nคุ้มครอง\nคู่กรณี\nคู่กัด\nคู่ขา\nคู่แข่ง\nคู่ครอง\nคู่ควร\nคู่คิด\nคู่คี่\nคู่ใจ\nคู่ชีพ\nคู่ชีวิต\nคู่บารมี\nคู่บุญ\nคู่ปรปักษ์\nคู่ปรับ\nคู่ผสม\nคู่มือ\nคู่รัก\nคู่ลำดับ\nคู่สาย\nคู่หมั้น\nคู่หู\nคู่อริ\nคู่อาฆาต\nเคมีภัณฑ์\nเคยตัว\nเคร่งขรึม\nเคร่งครัด\nเคร่งเครียด\nเครดิตฟองซิเอร์\nเครื่องกล\nเครื่องกัณฑ์\nเครื่องแกง\nเครื่องเขิน\nเครื่องครัว\nเครื่องเคียง\nเครื่องเงิน\nเครื่องจักร\nเครื่องเซ่น\nเครื่องดนตรี\nเครื่องต้น\nเครื่องทุ่นแรง\nเครื่องเทศ\nเครื่องใน\nเครื่องบิน\nเครื่องบูชา\nเครื่องแบบ\nเครื่องประดับ\nเครื่องปรุง\nเครื่องปรุงรส\nเครื่องมือ\nเครื่องยนต์\nเครื่องร่อน\nเครื่องราง\nเครื่องเรือน\nเครื่องล่าง\nเครื่องเล่น\nเครื่องสาย\nเครื่องสำอาง\nเครื่องสุกำศพ\nเครื่องหมาย\nเครือรัฐ\nเคลียคลอ\nเคลื่อนที่\nเคลื่อนไหว\nเคลือบแคลง\nเคลือบแฝง\nเคลือบฟัน\nเคว้งคว้าง\nเคหสถาน\nเค้าโครง\nเคียดแค้น\nเคี่ยวเข็ญ\nเคี้ยวเอื้อง\nเคืองขุ่น\nโคนม\nโคบาล\nโคมูตร\nโคมลอย\nโครงการ\nโครงเรื่อง\nโครงงาน\nโครงสร้าง\nโครมคราม\nโคลงเคลง\nฆ้องกระแต\nฆ้องชัย\nฆ้องวง\nฆ้องหุ่ย\nฆ้องเหม่ง\nฆ้องโหม่ง\nฆาตกร\nฆาตกรรม\nฆานประสาท\nงงงวย\nงงงัน\nงดเว้น\nงบดุล\nงบประมาณ\nงมโข่ง\nงมงาย\nง่วงงุน\nง่วงเหงา\nงอหาย\nง้องอน\nงอนง้อ\nงอมแงม\nงาช้าง\nง่าเงย\nงานการ\nง่ายดาย\nงึมงำ\nเงินเดือน\nเงินตรา\nเงินยวง\nเงียบกริบ\nเงียบเชียบ\nเงียบเหงา\nเงื่องหงอย\nเงื่อนไข\nเงื่อนงำ\nเงื่อนเวลา\nเงื้อมมือ\nแง่งอน\nจงใจ\nจงรัก\nจดจ่อ\nจดจำ\nจดหมาย\nจดหมายเหตุ\nจรจัด\nจรรยาบรรณ\nจริงจัง\nจริงใจ\nจอมขวัญ\nจอมใจ\nจอมทัพ\nจอมปลวก\nจอมพล\nจ๊ะเอ๋\nจักสาน\nจักรพรรดิ\nจักรภพ\nจักรยาน\nจักรยานยนต์\nจักรราศี\nจักรวรรดิ\nจักรวรรดินิยม\nจักรวาล\nจังหนับ\nจัดการ\nจัดจ้าน\nจัดเจน\nจัดแจง\nจัดตั้ง\nจัดสรร\nจับกุม\nจับจด\nจับเจ่า\nจ่าหน้า\nจาตุทสี\nจาตุมหาราช\nจาตุมหาราชิก\nจาตุมหาราชิกา\nจาตุรงคสันนิบาต\nจาตุรราชการ\nจานเชิง\nจานบิน\nจานผี\nจานเสียง\nจาบจ้วง\nจำเป็น\nจำพรรษา\nจำวัด\nจ้ำจี้จ้ำไช\nจำเลาะตา\nจิงโจ้น้ำ\nจิตใจ\nจิตตภาวนา\nจิตตัง\nจิตตานุปัสสนา\nจิตนิยม\nจิตบำบัด\nจิตแพทย์\nจิตวิสัย\nจิตรกร\nจิตรกรรม\nจิตรลดา\nจิตวิทยา\nจิตเวช\nจิตเวชศาสตร์\nจินตกวี\nจินตนา\nจินตนาการ\nจินตภาพ\nจุฑามณี\nจุฑามาศ\nจุฑารัตน์\nจุนเจือ\nจุ้นจ้าน\nจุลชีพ\nจุลชีวัน\nจุลชีวิน\nจุลทรรศน์\nจุลภาค\nจุลวรรค\nจุลศักราช\nจุลสาร\nจุลินทรีย์\nจุฬามณี\nจุฬาลักษณ์\nเจตคติ\nเจตจำนง\nเจตนารมณ์\nเจตภูต\nเจริญพร\nเจ้ากรม\nเจ้ากรรม\nเจ้าของ\nเจ้าขา\nเจ้าข้า\nเจ้าคณะ\nเจ้าค่ะ\nเจ้าจอม\nเจ้าชู้\nเจ้าตัว\nเจ้าถิ่น\nเจ้าท่า\nเจ้าที่\nเจ้าทุกข์\nเจ้านาย\nเจ้าเนื้อ\nเจ้าบ้าน\nเจ้าบ่าว\nเจ้าประคุณ\nเจ้าประคู้น\nเจ้าพนักงาน\nเจ้าพระคุณ\nเจ้าพระยา\nเจ้าพ่อ\nเจ้าพายุ\nเจ้าฟ้า\nเจ้าภาพ\nเจ้ามือ\nเจ้าแม่\nเจ้าเรือน\nเจ้าสังกัด\nเจ้าสัว\nเจ้าสาว\nเจ้าหน้าที่\nเจ้าหนี้\nเจ้าอาวาส\nเจาะจง\nเจือจาง\nเจือจาน\nเจือปน\nเจื้อยแจ้ว\nแจกจ่าย\nแจ่มแจ้ง\nแจ่มใส\nโจงกระเบน\nโจมตี\nโจรกรรม\nโจรสลัด\nใจความ\nใจคอ\nฉกฉวย\nฉกชิง\nฉลองได\nฉ้อฉล\nฉัตรมงคล\nฉันทลักษณ์\nฉายาลักษณ์\nฉิบหาย\nฉุกเฉิน\nฉุกละหุก\nฉุนเฉียว\nฉุปศาสตร์\nเฉไฉ\nเฉยเมย\nเฉาโฉด\nเฉิดฉัน\nเฉิดฉาย\nเฉิดฉิน\nเฉียบขาด\nเฉียบพลัน\nเฉียบแหลม\nเฉื่อยชา\nแฉะแบะ\nโฉดเฉา\nโฉมงาม\nโฉมฉาย\nโฉมเฉลา\nโฉมตรู\nโฉมยง\nโฉมศรี\nโฉมหน้า\nชดช้อย\nชดเชย\nชดใช้\nชนบท\nชนินทร์\nชนกกรรม\nชนมพรรษา\nชนมายุ\nชมเชย\nชมพูทวีป\nชมพูนท\nชมพูนุท\nชราธรรม\nชราภาพ\nชลจร\nชลธาร\nชลธี\nชลนัยน์\nชลนา\nชลเนตร\nชลประทาน\nชลมารค\nชลาธาร\nชลาลัย\nชลาศัย\nชลาสินธุ์\nชโลทร\nช่วงชิง\nช่วงใช้\nชวนชม\nชวนหัว\nช่วยเหลือ\nช่อฟ้า\nช่อม่วง\nชอกช้ำ\nช่องเขา\nช่องแคบ\nช่องไฟ\nช่องว่าง\nช้องนาง\nชอบกล\nชอบใจ\nชอบธรรม\nชอบพอ\nชักโครก\nชักเงา\nชักจูง\nชักชวน\nชักนำ\nชักเนื้อ\nชักพระ\nชักเย่อ\nชักใย\nชั่งใจ\nชังฆวิหาร\nชัดเจน\nชั้นเชิง\nชั่วคน\nชั่วคราว\nชั่วช้า\nชั่วโมง\nชั่วแล่น\nชาเย็น\nช้านาน\nช่างเครื่อง\nช่างฝีมือ\nช่างฟิต\nช่างไฟ\nช้างน้ำ\nช้างเผือก\nช้างพลาย\nช้างพัง\nช้างสาร\nช้างสีดอ\nชาติธรรม\nชาตินิยม\nชาติพันธุ์\nชาติพันธุ์วิทยา\nชาติภูมิ\nชานชาลา\nชายชาตรี\nชายคา\nชายฝั่ง\nชายทะเล\nชาวเล\nชาววัง\nช้ำใจ\nช้ำชอก\nชิงชัง\nชิงพลบ\nชินชา\nชินบุตร\nชิ้นเอก\nชิมลาง\nชีเปลือย\nชี้ขาด\nชี้แจง\nชี้นำ\nชี้แนะ\nชี้ฟ้า\nชีพจร\nชีพิตักษัย\nชื่นชม\nชื่นบาน\nชื่นมื่น\nชื่อย่อ\nชื่อรอง\nชื่อเล่น\nชื่อเสียง\nชุกชุม\nชุติมา\nชุบตัว\nชุบเลี้ยง\nชุมชน\nชุมทาง\nชุมสาย\nชุ่มใจ\nชุ่มชื่น\nชุ่มชื้น\nชุมนุมชน\nชูชีพ\nชูโรง\nชู้สาว\nเชยชม\nเชลยศักดิ์\nเชลยศึก\nเช่าซื้อ\nเช้าตรู่\nเช้ามืด\nเชิงกราน\nเชิงกล\nเชิงชั้น\nเชิงชาย\nเชิงซ้อน\nเชิงเดียว\nเชิงเดี่ยว\nเชิงตะกอน\nเชิงเทิน\nเชิงมุม\nเชิดชู\nเชิงอรรถ\nเชี่ยนหมาก\nเชี่ยวชาญ\nเชื่องช้า\nเชื่อใจ\nเชื่อถือ\nเชื่อฟัง\nเชื่อมือ\nเชื้อชาติ\nเชื้อเพลิง\nเชื้อไฟ\nเชื้อโรค\nเชื้อสาย\nเชื้อเชิญ\nเชื่องช้า\nเชือนแช\nเชื่อวัน\nแช่เย็น\nแช่อิ่ม\nแช่มช้อย\nแช่มชื่น\nโชกโชน\nโชติช่วง\nโชติรส\nใช้สอย\nซบเซา\nซมซาน\nซวนเซ\nซอกซอน\nซอกแซก\nซ่องสุม\nซ่องเสพ\nซ่องแซ่ง\nซ่อนรูป\nซ่อนเร้น\nซ่อนหา\nซ่อนกลิ่น\nซ่อนทราย\nซ่อมแซม\nซักค้าน\nซักซ้อม\nซักไซ้\nซักฟอก\nซักแห้ง\nซังกะตาย\nซังตาย\nซัดเซ\nซัดทอด\nซับซ้อน\nซับใน\nซับพระพักตร์\nซากศพ\nซ่านเซ็น\nซ้ำซ้อน\nซ้ำซาก\nซ้ำเติม\nซ้ำร้าย\nซี่โครง\nซีดเซียว\nซึมกะทือ\nซึมซาบ\nซึมเซา\nซึมทราบ\nซึมเศร้า\nซื่อตรง\nซื่อสัตย์\nซื้อขาย\nซุกซน\nซุกซ่อน\nซุบซิบ\nซู่ซ่า\nเซซัง\nเซ่อซ่า\nแซ่ซ้อง\nโซดาไฟ\nญาณทัสนะ\nญาณวิทยา\nญาณศาสตร์\nญาติกา\nฐานราก\nดกดื่น\nดงดิบ\nดลใจ\nดลบันดาล\nดวงแก้ว\nดวงใจ\nดวงเดือน\nดวงตรา\nดวงตา\nดวงสมร\nดอกจัน\nดอกจิก\nดอกบัว\nดอกเบี้ย\nดอกฟ้า\nดอกไม้\nดอกยาง\nดอกเล็บ\nดอกทอง\nดอกสร้อย\nดองยา\nดักคอ\nดักฟัง\nดังนั้น\nดังนี้\nดังหนึ่ง\nดั้งเดิม\nดัดจริต\nดัดแปลง\nดันทุรัง\nดับขันธ์\nดับจิต\nดับชีพ\nด่าทอ\nด่างทับทิม\nด่างพร้อย\nดาดฟ้า\nดาราศาสตร์\nดาลเดือด\nดาวกระจาย\nดาวเคราะห์\nดาวตก\nดาวเทียม\nดาวรุ่ง\nดาวเรือง\nดาวฤกษ์\nดาวหาง\nดาวเหนือ\nดาษดื่น\nดินขาว\nดินดาน\nดินดำ\nดินประสิว\nดินปืน\nดินระเบิด\nดินสอ\nดินสอพอง\nดิ้นรน\nดิบดี\nดีเกลือ\nดีใจ\nดีซ่าน\nดีดัก\nดีเดือด\nดีฝ่อ\nดีดดิ้น\nดึกดำบรรพ์\nดึกดื่น\nดึงดัน\nดึงดูด\nดื่มด่ำ\nดื้อด้าน\nดื้อดึง\nดื้อแพ่ง\nดื้อยา\nดื้อรั้น\nดุดัน\nดุเดือด\nดุร้าย\nดุลการค้า\nดุลพินิจ\nดุลภาค\nดุลยพินิจ\nดุลยภาพ\nดุษฎีนิพนธ์\nดุษฎีบัณฑิต\nดุษณีภาพ\nดูแคลน\nดูถูก\nดูดาย\nดูเบา\nดูแล\nดูหมิ่น\nดูเหมือน\nดูดดื่ม\nเด็ดขาด\nเด็ดดวง\nเด็ดเดี่ยว\nเดนตาย\nเดาสวด\nเดาสุ่ม\nเดินทาง\nเดินสะพัด\nเดินสาย\nเดินเหิน\nเดิมพัน\nเดียงสา\nเดียดฉันท์\nเดียวกัน\nเดียวดาย\nเดี๋ยวเดียว\nเดี๋ยวนี้\nเดือดดาล\nเดือดร้อน\nเดือนมืด\nเดือนหงาย\nแดดาล\nแดดิ้น\nแดกดัน\nโด่เด่\nโด่งดัง\nโดดเดี่ยว\nโดยสาร\nได้การ\nได้แก่\nได้ใจ\nได้ที\nได้ยิน\nได้เสีย\nตกเขียว\nตกค้าง\nตกใจ\nตกต่ำ\nตกแต่ง\nตกทอด\nตกฟาก\nตกมัน\nตกยาก\nตกลง\nตกหล่น\nต้นขั้ว\nต้นคิด\nต้นฉบับ\nต้นตอ\nต้นตำรับ\nต้นทุน\nต้นแบบ\nต้นเพลิง\nต้นมือ\nต้นไม้\nต้นร่าง\nต้นเรื่อง\nต้นสังกัด\nต้นหน\nต้นเหตุ\nตบตา\nตบแต่ง\nตบแผละ\nตบมือ\nต้มข่า\nต้มโคล้ง\nต้มยำ\nต้มส้ม\nตรมตรอม\nตรรกวิทยา\nตรรกศาสตร์\nตรวจการ\nตรวจการณ์\nตรวจตรา\nตระบัดสัตย์\nตรัสรู้\nตราตั้ง\nตราบาป\nตรายาง\nตราสาร\nตริตรอง\nตรีกฏุก\nตรีกาย\nตรีโกณ\nตรีโกณมิติ\nตรีคูณ\nตรีทูต\nตรีปิฎก\nตรีภพ\nตรีมูรติ\nตรึกตรอง\nตรึงตรา\nตรุษจีน\nตฤณชาติ\nตฤณมัย\nตลกบาตร\nตลบตะแลง\nตลบหลัง\nตลาดนัด\nตลาดน้ำ\nตลาดมืด\nตลาดสด\nต่อตี\nต่อเติม\nต่อว่า\nต่อสู้\nต่อกร\nต่อต้าน\nต่อแย้ง\nต้องการ\nต้องโทษ\nต้องหา\nต้อนรับ\nตอบโต้\nตอบแทน\nต่อยหอย\nตะพาบน้ำ\nตักตวง\nตักบาตร\nตั้งเข็ม\nตั้งไข่\nตั้งเค้า\nตั้งแง่\nตั้งใจ\nตั้งต้น\nตั้งแต่\nตั้งท้อง\nตัดขาด\nตัดใจ\nตัดเชือก\nตัดตอน\nตัดทอน\nตัดบท\nตัดพ้อ\nตัดรอน\nตัดสิน\nตับเต่า\nตับแลบ\nตับอ่อน\nตัวกลาง\nตัวการ\nตัวเก็ง\nตัวดี\nตัวตั้ง\nตัวเต็ง\nตัวถัง\nตัวแทน\nตัวประกอบ\nตัวประกัน\nตัวแปร\nตัวผู้\nตัวพิมพ์\nตัวเมีย\nตัวยืน\nตัวเลข\nตัวอย่าง\nตั๋วเงิน\nตั๋วแลกเงิน\nตากล้อง\nตาไก่\nตาข่าย\nตาชั่ง\nตาตุ่ม\nตาทวด\nตาปลา\nตาราง\nต่างหาก\nต้านทาน\nตามใจ\nตายใจ\nตายซาก\nตายด้าน\nตายตัว\nตายทั้งกลม\nตายห่า\nตายโหง\nตาลปัตร\nต่ำช้า\nต่ำต้อย\nตำส้ม\nติเตียน\nติณชาติ\nติดขัด\nติดใจ\nติดต่อ\nติดตั้ง\nติดตาม\nติดตื้น\nติดพัน\nติดลม\nติดอ่าง\nตีเกลียว\nตีขลุม\nตีความ\nตีคู่\nตีจาก\nตีตื้น\nตีแผ่\nตีรวน\nตีลังกา\nตีวง\nตีเสมอ\nตีนกา\nตีนคู้\nตีนจก\nตีนตะขาบ\nตีนผี\nตีนเหยียด\nตึกแถว\nตึกระฟ้า\nตึงเครียด\nตึงตัง\nตื้นตัน\nตื่นตัว\nตื่นตูม\nตื่นเต้น\nตุ๊ต๊ะ\nตุ้บตั้บ\nตุ้มหู\nตุลาการ\nตุลาคม\nตู้นิรภัย\nตูมตาม\nตู้เสบียง\nเตโชธาตุ\nเตร็ดเตร่\nเต้นรำ\nเตาแก๊ส\nเตาผิง\nเตาฟู่\nเตาไฟ\nเตารีด\nเตาสูบ\nเต่าทอง\nเต้ารับ\nเต้าส่วน\nเต้าเสียบ\nเต้าหู้ยี้\nแต่ละ\nแตกคอ\nแตกคอก\nแตกฉาน\nแตกดับ\nแตกตื่น\nแตกพาน\nแตกแยก\nแตกร้าว\nแตกหัก\nแต่งงาน\nแต่งตั้ง\nแต้มคู\nแต้มต่อ\nแตรงอน\nแตรเดี่ยว\nแตรฝรั่ง\nแตรฟันฟาร์\nแตรวง\nโต้ตอบ\nโต้เถียง\nโต้แย้ง\nโต๊ะหมู่\nโต๊ะอิหม่าม\nใต้ถุน\nไต้ก๋ง\nไต่คู้\nไต่เต้า\nไต่ถาม\nไต้ฝุ่น\nไตรจักร\nไตรจีวร\nไตรตรึงษ์\nไตรทวาร\nไตรปิฎก\nไตรเพท\nไตรภพ\nไตรภูมิ\nไตรภาคี\nไตรยางศ์\nไตรรงค์\nไตรรัตน์\nไตรลักษณ์\nไตรโลก\nไตรสรณคมน์\nไตรสิกขา\nไต่สวน\nถกเถียง\nถดถอย\nถนัดถนี่\nถนิมสร้อย\nถมถืด\nถมเถ\nถมไป\nถลากไถล\nถ้วนถี่\nถ้วยฟู\nถ่องแท้\nถอดถอน\nถ้อยคำ\nถ้อยแถลง\nถากถาง\nถ่านไฟฉาย\nถ่านหิน\nถามไถ่\nถ่ายทอด\nถ่ายทุกข์\nถ่ายเท\nถาวรวัตถุ\nถ้ำมอง\nถี่ถ้วน\nถึงใจ\nถูกใจ\nถูกชะตา\nเถรวาท\nเถ้าแก่\nเถ้าแก่เนี้ย\nแถมพก\nแถลงการณ์\nไถ่ถอน\nไถ่ถาม\nทดแทน\nทดรอง\nทดลอง\nทดสอบ\nทนทาน\nทนายความ\nทบทวน\nทแยงมุม\nทรงกลด\nทรงเครื่อง\nทรงเจ้า\nทรัพย์สิน\nทรามชม\nทรามเชย\nทรามวัย\nทรามสงวน\nทรามสวาท\nทรุดโทรม\nทฤษฎีบท\nท้วงติง\nท่วมท้น\nทวาทศ\nทวาทศมาส\nทวาบรยุค\nทวารบาล\nทวิบถ\nทวิบท\nทวิบาท\nทวิภาค\nทวิภาคี\nทวีคูณ\nทศกัณฐ์\nทศชาติ\nทศทิศ\nทศนิยม\nทศพร\nทศพล\nทศพิธราชธรรม\nทศมาส\nทศวรรษ\nท่อไอเสีย\nท้อถอย\nท้อแท้\nทองขาว\nทองคำ\nทองคำขาว\nทองคำเปลว\nทองเค\nทองแดง\nทองบรอนซ์\nทองม้วน\nทองย้อย\nทองสัมฤทธิ์\nทองหยอด\nทองหยิบ\nทองเหลือง\nทองเอก\nท่องเที่ยว\nท้องตรา\nท้องถิ่น\nท้องที่\nท้องน้อย\nท้องร่อง\nท้องเรื่อง\nทอดมัน\nทอดทิ้ง\nทอดน่อง\nทอดยอด\nทอดหุ่ย\nทอยกอง\nทะเบียนบ้าน\nทะเลทราย\nทะเลสาบ\nทะเลหลวง\nทักขิณาวัฏ\nทักท้วง\nทักทาย\nทักษิณาวรรต\nทักษิณาทาน\nทักษิณานุประทาน\nทั้งกลม\nทั้งคน\nทั้งดุ้น\nทั้งที\nทั้งนั้น\nทั้งนี้\nทั้งปวง\nทั้งผอง\nทั้งเพ\nทั้งมวล\nทั้งสิ้น\nทั้งหมด\nทั้งหลาย\nทัณฑ์บน\nทัดทาน\nทัดเทียม\nทันควัน\nทันใจ\nทันใด\nทันตา\nทันสมัย\nทันที\nทับถม\nทับทรวง\nทับศัพท์\nทั่วถึง\nทั่วไป\nท่าทาง\nท่าที\nท้าทาย\nทางการ\nทางข้าม\nทางด่วน\nทางเท้า\nทางโท\nทางใน\nทางผ่าน\nทางม้าลาย\nทางหลวง\nทางออก\nทางเอก\nทานกัณฑ์\nทานตะวัน\nท่านชาย\nทานบารมี\nท่านผู้หญิง\nท่านหญิง\nทาบทาม\nท้ายทอย\nทารุณกรรม\nทำคลอด\nทำใจ\nทำซ้ำ\nทำท่า\nทำที\nทำแท้ง\nทำโทษ\nทำบาป\nทำบุญ\nทำพิษ\nทำฟัน\nทำร้าย\nทำวัตร\nทำสาว\nทำเสน่ห์\nทำหมัน\nทำให้\nทิ้งขว้าง\nทิ้งทวน\nทิ้งท้าย\nทินกร\nทิพจักขุ\nทิพโสต\nทิพยจักษุ\nทิพยญาณ\nทิพยเนตร\nทิพยรส\nทิพากร\nทิ่มตำ\nทิ่มแทง\nทิวากร\nทิวากาล\nทิศทาง\nทีเด็ด\nทีท่า\nทีนี้\nทีหลัง\nทีฆนิกาย\nทีฆสระ\nที่ดิน\nที่นอน\nที่นั่ง\nที่ปรึกษา\nที่พึ่ง\nที่มั่น\nที่ราบ\nที่ว่าการ\nที่สุด\nที่หมาย\nที่ไหน\nทุกที\nทุกเมื่อ\nทุกข์สุข\nทุนทรัพย์\nทุนนิยม\nทุนรอน\nทุนสำรอง\nทุ่มเถียง\nทุ่มเท\nทูนหัว\nทูลกระหม่อม\nเทกระจาด\nเทครัว\nเทพเจ้า\nเทพดา\nเทพธิดา\nเทพนม\nเทพนิยม\nเทพนิยาย\nเทพบุตร\nเทพสังหรณ์\nเทศกาล\nเทศนาโวหาร\nเทศบัญญัติ\nเทศบาล\nเทศมนตรี\nเทห์ฟากฟ้า\nเท่ากับ\nเท่าใด\nเท่าตัว\nเท่าทัน\nเท่าทุน\nเท่าเทียม\nเท่านั้น\nเท่าไร\nเท้าช้าง\nเทิดทูน\nเที่ยงตรง\nเที่ยงแท้\nเที่ยงธรรม\nเทียนชนวน\nเทียนพรรษา\nเทียบเคียง\nเทียบเท่า\nเทือกเขา\nเทือกเถา\nแท็งก์น้ำ\nแท่นพิมพ์\nแท่นมณฑล\nแท่นหมึก\nแทรกซอน\nแทรกซ้อน\nแทรกซึม\nแทรกแซง\nแทะโลม\nไทยดำ\nไทยทาน\nไทยธรรม\nไทยน้อย\nไทยใหญ่\nธงชัย\nธงชาติ\nธงทิว\nธรณีวิทยา\nธรณีสงฆ์\nธรรมกาย\nธรรมการ\nธรรมเกษตร\nธรรมขันธ์\nธรรมคุณ\nธรรมจรรยา\nธรรมจริยา\nธรรมจักร\nธรรมจักษุ\nธรรมจาคะ\nธรรมจารี\nธรรมชาติ\nธรรมดา\nธรรมเนียม\nธรรมราชา\nธรรมศาสตร์\nธรรมสภา\nธรรมสังเวช\nธัญพืช\nธารพระกร\nธีรภาพ\nธีรราช\nนกเขา\nนกต่อ\nนกยูง\nนกรู้\nนกหวีด\nนครบาล\nนครรัฐ\nนงคราญ\nนงนุช\nนงพะงา\nนงเยาว์\nนงราม\nนงลักษณ์\nนบนอบ\nนพเก้า\nนพคุณ\nนพเคราะห์\nนพปฎล\nนพพล\nนพรัตน์\nนพศก\nนพศูล\nนมข้น\nนมผง\nนมไม้\nนมนาน\nนมหนู\nนมแมว\nนรีเวช\nนรีเวชวิทยา\nนวดฟั้น\nนวยนาด\nนวลระหง\nนวลลออ\nนวลละออง\nนวลจันทร์\nนอกครู\nนอกคอก\nนอกจาก\nนอกใจ\nนอกชาน\nนอกรีต\nนอกเหนือ\nนองเนือง\nนองเลือด\nนอนก้น\nนอนใจ\nนอบนบ\nนอนเล่น\nนอบน้อม\nน้อมนำ\nน้อยใจ\nน้อยหน้า\nนักการ\nนักการเมือง\nนักกีฬา\nนักข่าว\nนักท่องเที่ยว\nนักเทศน์\nนักโทษ\nนักธรรม\nนักบวช\nนักบิน\nนักบุญ\nนักปราชญ์\nนักพรต\nนักรบ\nนักเรียน\nนักเลง\nนักวิชาการ\nนักศึกษา\nนักสิทธิ์\nนักสืบ\nนักหนา\nนั่งเทียน\nนั่งร้าน\nนัดแนะ\nนัดหมาย\nนั่นแหละ\nนั่นเอง\nนับถือ\nนับประสา\nนัยน์ตา\nนาดำ\nนาปรัง\nนาปี\nนาสวน\nนาหว่าน\nนาคบาศ\nนาคปรก\nนาคราช\nนางกวัก\nนางกำนัล\nนางงาม\nนางใน\nนางบำเรอ\nนางแบบ\nนางพญา\nนางฟ้า\nนางไม้\nนางโลม\nนางสาว\nนางห้าม\nนางเอก\nนาฏกรรม\nนาฏดนตรี\nนาฏศิลป์\nนานนม\nน่านน้ำ\nน่านฟ้า\nนามกร\nนามธรรม\nนามไธย\nนามบัตร\nนามปากกา\nนามแฝง\nนามสกุล\nนามสงเคราะห์\nนามสมญา\nนายทะเบียน\nนายท่า\nนายท้าย\nนายทุน\nนายประกัน\nนายหน้า\nนายอำเภอ\nนารายณ์หัตถ์\nนารีผล\nนาวิกโยธิน\nนำจับ\nนำพา\nนำทาง\nนำร่อง\nนำสืบ\nนำแสดง\nน้ำกรด\nน้ำกาม\nน้ำเกลือ\nน้ำข้าว\nน้ำแข็ง\nน้ำแข็งไส\nน้ำแข็งแห้ง\nน้ำครำ\nน้ำคร่ำ\nน้ำค้าง\nน้ำค้างแข็ง\nน้ำคาวปลา\nน้ำคำ\nน้ำเค็ม\nน้ำเคย\nน้ำเงิน\nน้ำเงี้ยว\nน้ำจัณฑ์\nน้ำจิ้ม\nน้ำใจ\nน้ำเชื้อ\nน้ำเชื่อม\nน้ำซาวข้าว\nน้ำดอกไม้\nน้ำดี\nน้ำตก\nน้ำตา\nน้ำตาล\nน้ำท่า\nน้ำนม\nน้ำนวล\nน้ำบาดาล\nน้ำประสานทอง\nน้ำประปา\nน้ำปลา\nน้ำป่า\nน้ำผึ้ง\nน้ำพริก\nน้ำพริกเผา\nน้ำพี้\nน้ำพุ\nน้ำมนต์\nน้ำมนตร์\nน้ำมัน\nน้ำมือ\nน้ำมูก\nน้ำเมา\nน้ำย่อย\nน้ำยา\nน้ำรัก\nน้ำแร่\nน้ำลาย\nน้ำเลี้ยง\nน้ำสต๊อก\nน้ำส้ม\nน้ำส้มสายชู\nน้ำสังข์\nน้ำสาบาน\nน้ำเสียง\nน้ำหนวก\nน้ำหนอง\nน้ำหนัก\nน้ำหน้า\nน้ำหนึ่ง\nน้ำหมึก\nน้ำหอม\nน้ำเหลือง\nน้ำอบ\nน้ำอ้อย\nน้ำอัดลม\nนิ่งเฉย\nนิจศีล\nนิดเดียว\nนิดหน่อย\nนิติกร\nนิติกรรม\nนิติธรรม\nนิตินัย\nนิติบัญญัติ\nนิติบุคคล\nนิติภาวะ\nนิติวิทยาศาสตร์\nนิติเวช\nนิติเวชศาสตร์\nนิติศาสตร์\nนิเทศศาสตร์\nนิ่มนวล\nนิรุกติศาสตร์\nนิเวศวิทยา\nนิศากร\nนิศากาล\nนิศาชล\nนิศารัตน์\nนี่แน่ะ\nนี่แหละ\nนี่เอง\nนึกคิด\nนุงถุง\nนุ่งห่ม\nนุ่มนวล\nนุ่มนิ่ม\nเนตรนารี\nเนติบัณฑิต\nเนยเทียม\nเนยใส\nเนิ่นนาน\nเนิบนาบ\nเนื้อความ\nเนื้อคู่\nเนื้อเค็ม\nเนื้องอก\nเนื้อตัว\nเนื้อตาย\nเนื้อที่\nเนื้อแท้\nเนื้อเปื่อย\nเนื้อผ้า\nเนื้อเพลง\nเนื้อไม้\nเนื้อเยื่อ\nเนื้อร้อง\nเนื้อร้าย\nเนื้อเรื่อง\nเนื้อหา\nเนืองนอง\nเนืองนิตย์\nเนืองแน่น\nแน่ใจ\nแน่ชัด\nแน่แท้\nแน่นอน\nแน่นิ่ง\nแน่แน่ว\nแน่นแฟ้น\nแน่นหนา\nแนบเนียน\nแนบแน่น\nแนวคิด\nแนวทาง\nแนวโน้ม\nแนวป่า\nแนวรบ\nแนวร่วม\nแนวหน้า\nแนวหลัง\nแน่วแน่\nแนะนำ\nแนะแนว\nโน้มน้าว\nในหลวง\nบกพร่อง\nบงกช\nบงการ\nบดบัง\nบทกลอน\nบทกวี\nบทความ\nบทคัดย่อ\nบทเฉพาะกาล\nบทนำ\nบทบัญญัติ\nบทบาท\nบทประพันธ์\nบทเพลง\nบทร้อง\nบทเรียน\nบทลงโทษ\nบทสนทนา\nบทอัศจรรย์\nบทจร\nบทบงสุ์\nบทมาลย์\nบทรัช\nบทเรศ\nบทวลัญช์\nบนบาน\nบรมครู\nบรมธาตุ\nบรมบพิตร\nบรมวงศานุวงศ์\nบรมอัฐิ\nบรรณพิภพ\nบรรณศาลา\nบรรณาการ\nบรรณาธิการ\nบรรณานุกรม\nบรรณารักษ์\nบรรณารักษศาสตร์\nบรรดามี\nบรรดาศักดิ์\nบรรทัดฐาน\nบรรพบุรุษ\nบรรลัยกัลป์\nบรรลัยจักร\nบริคณห์สนธิ\nบวงสรวง\nบ่วงบาศ\nบ้วนพระโอษฐ์\nบ่อเกิด\nบอกกล่าว\nบอกบท\nบอกบุญ\nบอกใบ้\nบอกปัด\nบ้องกัญชา\nบ้องตื้น\nบ้องไฟ\nบ้องหู\nบอดสี\nบ่อนทำลาย\nบอบช้ำ\nบอบบาง\nบอบแบบ\nบังโกลน\nบังโคลน\nบังใบ\nบั้งไฟ\nบังคับการ\nบังคับบัญชา\nบัญชาการ\nบัณฑุกัมพล\nบัดดล\nบัดเดี๋ยว\nบัดนั้น\nบัดนี้\nบัดสีบัดเถลิง\nบัตรเครดิต\nบัตรพลี\nบัตรสนเท่ห์\nบัตรสินเชื่อ\nบั่นทอน\nบั้นท้าย\nบั้นปลาย\nบั้นพระองค์\nบั้นเอว\nบันไดลิง\nบันไดเลื่อน\nบันเทิงคดี\nบัวลอย\nบัวบก\nบ้าจี้\nบ้าดีเดือด\nบ้าน้ำลาย\nบ้าบิ่น\nบ้าระห่ำ\nบ้าเลือด\nบ้าหอบฟาง\nบากบั่น\nบากหน้า\nบางตา\nบางเบา\nบางที\nบาดเจ็บ\nบาดแผล\nบาดหมาง\nบาตรใหญ่\nบาทบงกช\nบาทบงสุ์\nบาทบริจาริกา\nบาทวิถี\nบานเกล็ด\nบานตะเกียง\nบานตะไท\nบานเบอะ\nบานปลาย\nบานแผละ\nบานพับ\nบ้านจัดสรร\nบ้านช่อง\nบ้านนอก\nบ้านพัก\nบ้านเมือง\nบ้านรับรอง\nบ้านเรือน\nบาปกรรม\nบายศรี\nบ่ายเบี่ยง\nบ่ายหน้า\nบ่าวไพร่\nบิดเบี้ยว\nบิดเบือน\nบิดพลิ้ว\nบี้แบน\nบีบคั้น\nบีบรัด\nบึ้งตึง\nบึ้งบูด\nบุกบั่น\nบุกเบิก\nบุกรุก\nบุคลิกภาพ\nบุคลิกลักษณะ\nบุญธรรม\nบุญนิธิ\nบุญฤทธิ์\nบุบสลาย\nบุ้ยใบ้\nบุรุษเพศ\nบุหงารำไป\nบู้บี้\nบูชายัญ\nบูดบึ้ง\nบูดเบี้ยว\nเบาความ\nเบาใจ\nเบาบาง\nเบาปัญญา\nเบามือ\nเบาแรง\nเบาสมอง\nเบาหวาน\nเบาโหวง\nเบ้าตา\nเบาะแส\nเบิกความ\nเบิกบาน\nเบี้ยล่าง\nเบี้ยเลี้ยง\nเบี้ยหวัด\nเบี่ยงบ่าย\nเบียดบัง\nเบียดเบียน\nเบียดเสียด\nเบื้องต้น\nเบื้องบน\nเบื้องหน้า\nเบื้องหลัง\nแบกะดิน\nแบเบาะ\nแบ่งเบา\nแบ่งปัน\nแบ่งแยก\nแบบฉบับ\nแบบแปลน\nแบบแผน\nแบบฝึกหัด\nแบบพิมพ์\nแบบสอบถาม\nแบบอย่าง\nแบะแฉะ\nแบะท่า\nโบแดง\nโบราณคดี\nโบราณวัตถุ\nโบราณสถาน\nใบขับขี่\nใบจอง\nใบตอง\nใบแทรก\nใบบอก\nใบบุญ\nใบเบิกทาง\nใบปลิว\nใบพัด\nใบโพ\nใบไม้\nใบระกา\nใบรับรอง\nใบลา\nใบเลี้ยง\nใบสั่ง\nใบสำคัญ\nใบสุทธิ\nใบเสร็จ\nใบหน้า\nใบอนุญาต\nใบระกา\nปกครอง\nปกคลุม\nปกป้อง\nปกปิด\nปฏิบัติการ\nปฏิบัติบูชา\nปฐพีวิทยา\nปฐมฌาน\nปฐมทัศน์\nปฐมเทศนา\nปฐมนิเทศ\nปฐมพยาบาล\nปฐมยาม\nปฐมฤกษ์\nปฐมวัย\nปฐมสมโพธิ\nปนเป\nป่นปี้\nปมเขื่อง\nปมเด่น\nปมด้อย\nปรนเปรอ\nปรบไก่\nปรบมือ\nปรสิตวิทยา\nประโปรย\nประพรม\nประกันชีวิต\nประกันภัย\nประจักษ์พยาน\nประจัญบาน\nประจันหน้า\nประจำการ\nประจำเดือน\nประจำเมือง\nประจำยาม\nประชดประชัน\nประชากร\nประชากรศาสตร์\nประชาคม\nประชาชน\nประชาราษฎร์\nประชาชาติ\nประชาชี\nประชาทัณฑ์\nประชาบาล\nประชาพิจารณ์\nประชาภิบาล\nประชามติ\nประชาสงเคราะห์\nประชาสัมพันธ์\nประดับประดา\nประดามี\nประดาน้ำ\nประเดี๋ยวเดียว\nประเดี๋ยวนี้\nประทับใจ\nประทุษร้าย\nประเทศราช\nประพาสต้น\nประเพณีนิยม\nประลัยกัลป์\nประวัติการณ์\nประวัติศาสตร์\nประสบการณ์\nประสบการณ์นิยม\nประสาทการ\nประสูติการ\nประสูติกาล\nประเส\nปรับทุกข์\nปรับโทษ\nปรับปรุง\nปรากฏการณ์\nปราดเปรียว\nปราดเปรื่อง\nปราบปราม\nปริญญาบัตร\nปรัยัติธรรม\nปรุโปร่ง\nปลงใจ\nปลงตก\nปลดทุกข์\nปลดปลง\nปลดปล่อย\nปลดเปลื้อง\nปลดระวาง\nปลดแอก\nปล้นสะดม\nปลอกกระสุน\nปลอกคอ\nปลอดโปร่ง\nปลอดภัย\nปลอมปน\nปลอมแปลง\nปลอบโยน\nปล่อยใจ\nปล่อยตัว\nปล่อยปละ\nปลั๊กไฟ\nปลากริม\nปลาเค็ม\nปลาจ่อม\nปลาเจ่า\nปลาแดก\nปลาตู้\nปลาทอง\nปลาร้า\nปลาส้ม\nปลาดาว\nปลาบิน\nปลาฝา\nปลาวาฬ\nปลาหมึก\nปลาบปลื้ม\nปลายข้าว\nปลายแถว\nปลายทาง\nปลิ้นปลอก\nปลิ้นปล้อน\nปลีกตัว\nปลีกย่อย\nปลุกใจ\nปลุกปล้ำ\nปลุกปั่น\nปลุกระดม\nปลุกเสก\nปลูกฝัง\nปลูกสร้าง\nปวดถ่วง\nปวดมวน\nปวดร้าว\nป่วนปั่น\nป่วยการ\nปอกลอก\nป้องกัน\nปักใจ\nปักดำ\nปักหลัก\nปัจเจกบุคคล\nปัจเจกพุทธะ\nปัจเจกโพธิ\nปัจฉิมชน\nปัจฉิมทิศ\nปัจฉิมภาค\nปัจฉิมยาม\nปัจฉิมลิขิต\nปัจฉิมวัย\nปัจฉิมวาจา\nปัญญาชน\nปัญญาวิมุติ\nปัญญาอ่อน\nปัดเป่า\nปันส่วน\nปั่นป่วน\nปั่นแปะ\nปั่นหัว\nปั้นจิ้ม\nปั้นเจ๋อ\nปั้นปึ่ง\nปั้นสิบ\nปั๊มน้ำมัน\nป่าช้า\nป่าชายเลน\nป่าดง\nป่าดงดิบ\nป่าดิบ\nป่าเถื่อน\nป่าเบญจพรรณ\nป่าละเมาะ\nปากกา\nปากขอ\nปากแข็ง\nปากคอ\nปากคำ\nปากคีบ\nปากจัด\nปากน้ำ\nปากเปล่า\nปากเสียง\nปานกลาง\nป่านนี้\nป้านลม\nป้ายสี\nป่าวร้อง\nปิดฉาก\nปิดบัง\nปิตุฆาต\nปิตุภูมิ\nปีมะโว้\nปีแสง\nปี่กลาง\nปี่ไฉน\nปี่ชวา\nปี่นอก\nปี่ใน\nปี่พาทย์\nปี่อ้อ\nปีกกา\nปีนเกลียว\nปีนป่าย\nปึกแผ่น\nปึงปัง\nปืนกล\nปืนครก\nปืนพก\nปืนยา\nปืนยาว\nปืนลม\nปืนเล็ก\nปืนเล็กยาว\nปืนสั้น\nปืนใหญ่\nปุบปับ\nปุ๊บปั๊บ\nปุ่มเปือก\nปุยฝ้าย\nปุ๋ยคอก\nปุ๋ยเคมี\nปุ๋ยวิทยาศาสตร์\nปุ๋ยหมัก\nปุ๋ยอินทรีย์\nปูจ๋า\nปูเสฉวน\nปู่เจ้า\nปู่ทวด\nปูนขาว\nปูนซีเมนต์\nปูนดิบ\nปูนแดง\nปูนปลาสเตอร์\nปูนปั้น\nเป็ดเทศ\nเป็ดน้ำ\nเป็นกลาง\nเป็นใจ\nเป็นต้น\nเป็นต่อ\nเป็นรอง\nเป็นไร\nเป็นลม\nเป็นห่วง\nเป็นอยู่\nเปรมปรีดิ์\nเปรอะเปื้อน\nเปรียบเทียบ\nเปรียบเปรย\nเปรี้ยวปาก\nเปรี้ยวหวาน\nเปรื่องปราด\nเปลญวน\nเปล่งปลั่ง\nเปล่าดาย\nเปล่าเปลี่ยว\nเปลี่ยนใจ\nเปลี่ยนตัว\nเปลี่ยนแปลง\nเปลี่ยนมือ\nเปลี่ยนหน้า\nเป๋อเหลอ\nเปะปะ\nเป่ากบ\nเป้านิ่ง\nเป้าหมาย\nเปิดฉาก\nเปิดเปิง\nเปิดโปง\nเปิดผนึก\nเปิดเผย\nเปียกปูน\nแป้งสาลี\nแป้งนวล\nแป้งเปียก\nแป้งมัน\nแป้งฝุ่น\nแป้งร่ำ\nแป้งสิงคโปร์\nแป้งหมี่\nแปดปน\nแปดเปื้อน\nแปรปรวน\nแปรผัน\nแปรพักตร์\nแปรรูป\nแปรอักษร\nแปลกปลอม\nแปะโป้ง\nโป้ปด\nโปร่งแสง\nโปร่งใส\nโปรดปราน\nโปรยทาน\nโปรยปราย\nโปโลน้ำ\nผกผัน\nผกากรอง\nผงขาว\nผงชูรส\nผงซักฟอก\nผงฟู\nผดุงครรภ์\nผมไฟ\nผลพลอยได้\nผลลัพธ์\nผลัดเปลี่ยน\nผลิตผล\nผลิตภัณฑ์\nผลุบโผล่\nผสมเทียม\nผสมผสาน\nผสมผเส\nผสมพันธุ์\nผสมโรง\nผสมเสร็จ\nผ่องแผ้ว\nผ่องใส\nผ่อนคลาย\nผ่อนชำระ\nผ่อนปรน\nผ่อนผัน\nผ่อนส่ง\nผอมโซ\nผอมแห้ง\nผักชี\nผักตบชวา\nผักบุ้ง\nผังเมือง\nผัดผ่อน\nผันแปร\nผันผวน\nผ่าตัด\nผ่าเผย\nผ่าหมาก\nผ่าเหล่า\nผ้าขนหนู\nผ้าขาวม้า\nผ้าขี้ริ้ว\nผ้าเช็ดตัว\nผ้าเช็ดปาก\nผ้าเช็ดมือ\nผ้าเช็ดหน้า\nผ้าดิบ\nผ้าต่วน\nผ้าไตร\nผ้าถุง\nผ้าแถบ\nผ้านวม\nผ้านุ่ง\nผ้าใบ\nผ้าป่า\nผ้าป่าน\nผ้าผ่อน\nผ้าพันคอ\nผ้าพันแผล\nผ้าแพร\nผ้าโพกหัว\nผ้ามัดหมี่\nผ้ายาง\nผ้าลูกไม้\nผ้าเหลือง\nผ้าอนามัย\nผ้าอ้อม\nผาดโผน\nผาติกรรม\nผิดหวัง\nผิวเผิน\nผิวพรรณ\nผิวหนัง\nผีกระสือ\nผีกระหัง\nผีกองกอย\nผีโขมด\nผีดิบ\nผีตองเหลือง\nผีถ้วยแก้ว\nผีแถน\nผีทะเล\nผีบุญ\nผีปอบ\nผีพุ่งไต้\nผีฟ้า\nผีเรือน\nผีสาง\nผีเสื้อ\nผีห่า\nผึ่งผาย\nผุดผ่อง\nผุดผาด\nผู้คน\nผู้คุม\nผู้จัดการ\nผู้ชาย\nผู้เชี่ยวชาญ\nผู้ดี\nผู้โดยสาร\nผู้ต้องขัง\nผู้ต้องหา\nผู้แทน\nผู้น้อย\nผู้บริโภค\nผู้บังคับบัญชา\nผู้ปกครอง\nผู้ประกอบการ\nผู้ป่วย\nผู้พิพากษา\nผู้เยาว์\nผู้ร้าย\nผู้วิเศษ\nผู้สื่อข่าว\nผู้เสียหาย\nผู้หญิง\nผู้ใหญ่\nผู้ใหญ่บ้าน\nผูกขวัญ\nผูกขาด\nผูกพัน\nผูกมัด\nเผชิญหน้า\nเผด็จการ\nเผด็จศึก\nเผยแผ่\nเผยแพร่\nเผละผละ\nเผ่าพันธุ์\nเผื่อแผ่\nแผงลอย\nแผนการ\nแผนงาน\nแผนที่\nแผนผัง\nแผนภาพ\nแผนภูมิ\nแผ่นดิน\nแผ่นเสียง\nแผ้วพาน\nโผงผาง\nฝนทอง\nฝอยทอง\nฝักแค\nฝักบัว\nฝักฝ่าย\nฝักใฝ่\nฝังใจ\nฝังหัว\nฝาชี\nฝาแฝด\nฝาละมี\nฝ่าพระบาท\nฝ่าฝืน\nฝ่าฟัน\nฝ้าฟาง\nฝากตัว\nฝากฝัง\nฝีดาษ\nฝีมะม่วง\nฝีจักร\nฝีเท้า\nฝีปาก\nฝีพาย\nฝีมือ\nฝีเย็บ\nฝึกงาน\nฝึกปรือ\nฝึกฝน\nฝึกสอน\nฝึกหัด\nฝืดเคือง\nใฝ่ฝัน\nพงพี\nพงศ์พันธุ์\nพญาโศก\nพญาไฟ\nพบปะ\nพบพาน\nพรสวรรค์\nพรมคด\nพรมแดน\nพรมมิ\nพรรคพวก\nพรรณราย\nพรวดพราด\nพรหมชาติ\nพรหมลิขิต\nพรหมโลก\nพรหมวิหาร\nพร้อมใจ\nพร้อมพรั่ง\nพร้อมเพรียง\nพร้อมมูล\nพร้อมสรรพ\nพร้อมหน้า\nพระครู\nพระคุณ\nพระเคราะห์\nพระเครื่อง\nพระเจ้า\nพระเจ้าอยู่หัว\nพระชายา\nพระทัย\nพระนาง\nพระนางเจ้า\nพระเป็นเจ้า\nพระผู้เป็นเจ้า\nพระพิมพ์\nพระพุทธเจ้า\nพระพุทธองค์\nพระภูมิ\nพระยา\nพระรอง\nพระสนม\nพระสนมเอก\nพระองค์\nพระองค์เจ้า\nพระเอก\nพรั่งพร้อม\nพรั่งพรู\nพรั่นพรึง\nพร่างพราว\nพรายน้ำ\nพรายแพรว\nพราวแพรว\nพร่ำพลอด\nพร่ำเพรื่อ\nพร่ำเพ้อ\nพริกไทย\nพริ้งพราย\nพริ้งเพรา\nพริ้งเพริศ\nพริบตา\nพริ้มพราย\nพริ้มเพรา\nพรุ่งนี้\nพฤติกรรม\nพฤติการณ์\nพฤตินัย\nพลการ\nพลขับ\nพลความ\nพลเมือง\nพลรบ\nพลร่ม\nพลเรือน\nพลโลก\nพลศึกษา\nพลบค่ำ\nพลอดรัก\nพลังงาน\nพลังเงียบ\nพลังจิต\nพลั้งปาก\nพลั้งเผลอ\nพลั้งพลาด\nพลัดถิ่น\nพลัดพราก\nพลาดท่า\nพลาดพลั้ง\nพลิกแพลง\nพลีกรรม\nพลุ่งพล่าน\nพวกพ้อง\nพวงมาลัย\nพวงมาลา\nพวงหรีด\nพวงคราม\nพวงชมพู\nพวงแสด\nพ่วงพี\nพวยน้ำ\nพวยพุ่ง\nพสกนิกร\nพหุคูณ\nพหุภาคี\nพหูพจน์\nพหูสูต\nพอควร\nพอใจ\nพอใช้\nพอใช้ได้\nพอดี\nพอตัว\nพอทำเนา\nพอประมาณ\nพอเพียง\nพอแรง\nพอสมควร\nพอเหมาะ\nพ่อขุน\nพ่อครัว\nพ่อตา\nพ่อบ้าน\nพ่อพันธุ์\nพ่อม่าย\nพ่อเมือง\nพ่อเลี้ยง\nพ่อสื่อ\nพอกพูน\nพ้องพาน\nพักผ่อน\nพักพิง\nพักฟื้น\nพักร้อน\nพักแรม\nพัดยศ\nพัดลม\nพันพัว\nพับฐาน\nพับเพียบ\nพัวพัน\nพาซื่อ\nพาดพิง\nพิณพาทย์\nพิธีกร\nพิธีกรรม\nพิธีการ\nพิธีรีตอง\nพิธีสาร\nพินัยกรรม\nพิมพ์เขียว\nพิมพ์ใจ\nพิมพ์ดีด\nพิษสง\nพี่น้อง\nพี่เบิ้ม\nพี่เลี้ยง\nพึงใจ\nพึงพอใจ\nพึ่งพา\nพึ่งพิง\nพืชพันธุ์\nพืชมงคล\nพื้นฐาน\nพื้นที่\nพื้นบ้าน\nพื้นเพ\nพื้นเมือง\nพื้นเสีย\nพุพอง\nพุทธกาล\nพุทธคุณ\nพุทธจักร\nพุทธเจดีย์\nพุทธฎีกา\nพุทธปฏิมา\nพุทธปฏิมากร\nพุทธมามกะ\nพุทธศักราช\nพุทธศาสนิกชน\nพุทธองค์\nพุทธชาด\nพุทธรักษา\nพุ่มพวง\nพุ่มไม้\nพู่กัน\nพูดจา\nเพ่งเล็ง\nเพดานบิน\nเพดานปาก\nเพริศพราย\nเพริศพริ้ง\nเพริศแพร้ว\nเพรียกพร้อง\nเพรียวลม\nเพลงเชิด\nเพลงยาว\nเพลิงกัลป์\nเพลินใจ\nเพลินตา\nเพลี่ยงพล้ำ\nเพ้อฝัน\nเพาะกาย\nเพาะชำ\nเพาะปลูก\nเพิกถอน\nเพิกเฉย\nเพิ่มเติม\nเพิ่มพูน\nเพียงตา\nเพียงพอ\nเพียบแประ\nเพียบพร้อม\nเพื่อนเกลอ\nเพื่อนตาย\nเพื่อนบ้าน\nเพื่อนฝูง\nเพื่อนยาก\nแพ้ท้อง\nแพร่หลาย\nแพร่งพราย\nแพรวพราว\nโพธิญาณ\nโพธิบัลลังก์\nโพธิสมภาร\nโพธิสัตว์\nโพ้นทะเล\nโพยภัย\nไพ่ตาย\nไพ่ป๊อก\nไพรวัน\nไพรสณฑ์\nไพรสัณฑ์\nไพร่พล\nไพร่ฟ้า\nไพร่สม\nไพร่ส่วย\nไพร่หลวง\nฟกช้ำ\nฟองเต้าหู้\nฟองน้ำ\nฟองมัน\nฟ้องกลับ\nฟ้องร้อง\nฟอนเฟะ\nฟักทอง\nฟัดเฟียด\nฟันดาบ\nฟันฝ่า\nฟันแท้\nฟันน้ำนม\nฟันปลา\nฟันฟาง\nฟันเฟือง\nฟันม้า\nฟันเลื่อย\nฟันหนู\nฟั่นเฝือ\nฟั่นเฟือน\nฟื้นตัว\nฟื้นฝอย\nฟื้นฟู\nฟุ้งซ่าน\nฟุ้งเฟ้อ\nฟุ้งเฟื่อง\nฟุตบอล\nฟูฟ่อง\nฟูเฟื่อง\nฟูมฟัก\nฟูมฟาย\nเฟะฟะ\nเฟื่องฟ้า\nเฟื่องฟุ้ง\nเฟื่องฟู\nไฟฉาย\nไฟแช็ก\nไฟธาตุ\nไฟฟ้า\nภัตกิจ\nภาคทัณฑ์\nภาคพื้น\nภาคเรียน\nภาคภูมิ\nภาพถ่าย\nภาพนิ่ง\nภาพประกอบ\nภาพพจน์\nภาพยนตร์\nภาพลวงตา\nภาพลักษณ์\nภายนอก\nภายใน\nภายหน้า\nภายหลัง\nภารกิจ\nภารธุระ\nภารโรง\nภารตวิทยา\nภาษาศาสตร์\nภาสกร\nภิญโญภาพ\nภินชาติ\nภูธร\nภูธเรศ\nภูบาล\nภูเบศ\nภูเบศวร์\nภูเขา\nภูเขาไฟ\nภูผา\nภูตคาม\nภูตบดี\nภูตรูป\nภูเตศวร\nภูมินทร์\nภูมิบาล\nภูมิประเทศ\nภูมิภาค\nภูมิรัฐศาสตร์\nภูมิลำเนา\nภูมิศาสตร์\nภูมิอากาศ\nภูมิธรรม\nภูมิปัญญา\nภูมิรู้\nภูมิใจ\nภูมิฐาน\nภูมิคุ้มกัน\nภูมิแพ้\nภูษาโยง\nเภทภัย\nเภสัชกร\nเภสัชกรรม\nเภสัชวิทยา\nเภสัชศาสตร์\nโภคทรัพย์\nโภคภัณฑ์\nโภชนากร\nโภชนาการ\nมกุฎราชกุมาร\nมงคลแฝด\nมงคลสูตร\nมงคลหัตถี\nมณเฑียรบาล\nมดดำ\nมดแดง\nมดเท็จ\nมดยอบ\nมดลูก\nมธุปายาส\nมธุรส\nมนเทียรบาล\nมนุษย์กบ\nมโนกรรม\nมโนคติ\nมโนทุจริต\nมโนธรรม\nมโนภาพ\nมโนมัย\nมโนรถ\nมโนรมย์\nมโนสุจริต\nมรรคนายก\nมรรคผล\nมฤคชาติ\nมฤคทายวัน\nมฤคราช\nมลทิน\nมลพิษ\nมลสาร\nมวกเหล็ก\nม้วนหน้า\nมวยไทย\nมวยปล้ำ\nมวยล้ม\nมวยวัด\nมวยสากล\nมวยหมู่\nมวลสาร\nมอคราม\nมอซอ\nมอหมึก\nมองเมียง\nมอบตัว\nมอบหมาย\nมอมเมา\nมะขามเทศ\nมะขามป้อม\nมะขามเปียก\nมะเขือเทศ\nมะเขือพวง\nมะพร้าวแก้ว\nมักคุ้น\nมักจี่\nมักง่าย\nมักน้อย\nมักมาก\nมักใหญ่\nมั่งคั่ง\nมั่งมี\nมัจจุราช\nมัชฌิมนิกาย\nมัชฌิมประเทศ\nมัชฌิมยาม\nมัชฌิมวัย\nมัดจำ\nมัดหมี่\nมัธยมกาล\nมัธยมศึกษา\nมันแกว\nมันเทศ\nมันฝรั่ง\nมันเปลว\nมันสมอง\nมั่นคง\nมั่นใจ\nมั่นหมาย\nมั่นเหมาะ\nมัวเมา\nมัวหมอง\nมั่วสุม\nม้าเทศ\nม้าน้ำ\nม้ามืด\nม้าเร็ว\nม้าล่อ\nม้าลาย\nมากมาย\nมาตรการ\nมาตรฐาน\nมาตราส่วน\nมาตุคาม\nมาตุฆาต\nมาตุภูมิ\nม่านตา\nม่านบังตา\nมายากร\nมายากล\nมายาการ\nมายาวี\nมารผจญ\nมารวิชัย\nมารสังคม\nมารหัวขน\nมาลาการ\nมิ่งขวัญ\nมิ่งมิตร\nมิจฉาจาร\nมิจฉาชีพ\nมิดชิด\nมิดเมี้ยน\nมิดหมี\nมิตรจิต\nมิตรภาพ\nมิตรสหาย\nมิน่า\nมีหน้า\nมีดโกน\nมีดดาบ\nมีดโต้\nมีดพก\nมีดพับ\nมีดสั้น\nมึนงง\nมึนชา\nมึนตึง\nมึนเมา\nมืดครึ้ม\nมืดมน\nมืดมัว\nมือจับ\nมือดี\nมือเติบ\nมือปืน\nมือเปล่า\nมือมืด\nมือสอง\nมือเสือ\nมือหนึ่ง\nมือใหม่\nมุกตลก\nมุขปาฐะ\nมุขมนตรี\nมุ่งมั่น\nมุ่งมาด\nมุ่งหน้า\nมุ่งหมาย\nมุ่งหวัง\nมุ้งลวด\nมุ้งสายบัว\nมุมก้ม\nมุมกลับ\nมุมเงย\nมุมฉาก\nมุมตรง\nมุมป้าน\nมุมมืด\nมุมแย้ง\nมุมสะท้อน\nมุมหักเห\nมุมแหลม\nมุสาวาท\nมูกเลือด\nมูกมัน\nมูกหลวง\nมูนดิน\nมูลฐาน\nมูลนาย\nมูลนิธิ\nมูลเหตุ\nมูลค่า\nมูลฝอย\nเม็ดเงิน\nเม็ดเลือด\nเม็ดโลหิต\nเม่นทะเล\nเมรุมาศ\nเมรุราช\nเมล์อากาศ\nเมาดิบ\nเมามัน\nเมามัว\nเมามาย\nเมินเฉย\nเมียน้อย\nเมียหลวง\nเมียงมอง\nเมี่ยงลาว\nเมี่ยงส้ม\nเมื่อกี้\nเมื่อตะกี้\nเมื่อใด\nเมื่อไร\nเมื่อไหร่\nเมื่อนั้น\nเมืองขึ้น\nเมืองท่า\nเมืองนอก\nเมืองหลวง\nเมื่อยขบ\nเมื่อยล้า\nแม่กอง\nแม่กุญแจ\nแม่คุณ\nแม่งาน\nแม่เจ้า\nแม่ชี\nแม่ทัพ\nแม่นม\nแม่น้ำ\nแม่บท\nแม่บ้าน\nแม่เบี้ย\nแม่พระ\nแม่พิมพ์\nแม่เพลง\nแม่มด\nแม่ม่าย\nแม่ไม้\nแม่ยก\nแม่ยาย\nแม่ร้าง\nแม่เรือน\nแม่แรง\nแม่เล้า\nแม่เลี้ยง\nแม่สี\nแม่สื่อ\nแม่เหล็ก\nแมงมุม\nแม่นยำ\nแมลงช้าง\nแมลงวัน\nแมลงปอ\nแมลงภู่\nแมลงเม่า\nแมวเซา\nแมวน้ำ\nแมวป่า\nแมวมอง\nไม้กลัด\nไม้กวาด\nไม้กางเขน\nไม้เกาหลัง\nไม้ขีดไฟ\nไม้จิ้มฟัน\nไม้เด็ด\nไม้ตาย\nไม้ตีพริก\nไม้ที\nไม้เท้า\nไม้บรรทัด\nไม้เมตร\nไม้ระแนง\nไม้เรียว\nไม้หมอน\nไม้อัด\nไม้จัตวา\nไม้ตรี\nไม้ไต่คู้\nไม้โท\nไม้ผัด\nไม้มลาย\nไม้ม้วน\nไม้ยมก\nไม้หน้า\nไม้หันอากาศ\nไม้เอก\nยกกลีบ\nยกครู\nยกเครื่อง\nยกเค้า\nยกทรง\nยกฟ้อง\nยกเมฆ\nยกยอ\nยกย่อง\nยกเลิก\nยกเว้น\nย่นย่อ\nยมทูต\nยมบาล\nยมราช\nยมโลก\nยวดยิ่ง\nยวดยาน\nยวนยี\nยวบยาบ\nย่อท้อ\nย่อส่วน\nย่อหน้า\nย่อหย่อน\nยอกย้อน\nยองใย\nย่องเบา\nย่องแย่ง\nยอดเยี่ยม\nยอดอก\nย้อนยอก\nย้อนรอย\nย้อนศร\nย้อนแสง\nย้อนหลัง\nยอบแยบ\nยอมความ\nย่อมเยา\nย่อยยับ\nยักยอก\nยักย้าย\nยักเยื้อง\nยัญกรรม\nยัญพิธี\nยัดเยียด\nยับเยิน\nยับยั้ง\nยั่วยวน\nยั่วยุ\nยั่วเย้า\nยากวาด\nยากันยุง\nยาเขียว\nยาใจ\nยาฉุน\nยาชา\nยาซัด\nยาดอง\nยาแดง\nยาถ่าย\nยาธาตุ\nยานัตถุ์\nยาเบื่อ\nยาโป๊\nยาแฝด\nยาพิษ\nยาระบาย\nยาสลบ\nยาสั่ง\nยาสีฟัน\nยาสูบ\nยาเส้น\nยาเสพติด\nยาหม่อง\nยาเหลือง\nย่าทวด\nย่านาง\nยากแค้น\nยากจน\nยากเย็น\nยากไร้\nยางนอก\nยางใน\nยางมะตอย\nยางมะตูม\nยางลบ\nยางสน\nยางอาย\nย่างกราย\nย่างเยื้อง\nย่างสด\nย่างสามขุม\nย่างเหยียบ\nยานเกราะ\nยานพาหนะ\nยานอวกาศ\nยานคาง\nยายทวด\nยาวเฟื้อย\nยาวยืด\nยาวเหยียด\nยำทวาย\nยำใหญ่\nยำเกรง\nยำเยง\nย่ำต๊อก\nย่ำยี\nย่ำแย่\nยิงเป้า\nยิ่งนัก\nยิ่งยวด\nยิ่งใหญ่\nยินดี\nยินยอม\nยินร้าย\nยิ้มกริ่ม\nยิ้มแฉ่ง\nยิ้มแต้\nยิ้มแป้น\nยิ้มเผล่\nยิ้มเยาะ\nยิ้มแย้ม\nยียวน\nยึดครอง\nยึดถือ\nยึดมั่น\nยึดเหนี่ยว\nยืดยาด\nยืดยาว\nยืดเยื้อ\nยืดหยุ่น\nยืดอก\nยืนกราน\nยืนต้น\nยืนพื้น\nยืนยง\nยืนยัน\nยืนหยัด\nยื้อยุด\nยุยง\nยุแยง\nยุแหย่\nยุคลบาท\nยุคเข็ญ\nยุคทอง\nยุคมืด\nยุ่งขิง\nยุ่งยาก\nยุ่งเหยิง\nยุติธรรม\nยุทธการ\nยุทธนาวี\nยุทธปัจจัย\nยุทธภัณฑ์\nยุทธภูมิ\nยุทธวิธี\nยุทธศาสตร์\nยุทธหัตถี\nยุทธนาการ\nยุทธนาธิการ\nยุบยับ\nยุบยิบ\nยุพราช\nยู่ยี่\nเย็นเจี๊ยบ\nเย็นใจ\nเย็นฉ่ำ\nเย็นเฉียบ\nเย็นชา\nเย็นชืด\nเย็นตา\nเย็นเยียบ\nเย็นเยือก\nเย็นวาบ\nเย็นวูบ\nเย็บกี่\nเย็บจักร\nเย็บด้าย\nเย้ยหยัน\nเย้าหยอก\nเยาะเย้ย\nเยี่ยมกราย\nเยี่ยมเยียน\nเยี่ยมเยือน\nเยี่ยมยอด\nเยื่อเคย\nเยื่อใย\nเยือกเย็น\nเยื้องกราย\nเยื้องยัก\nเยื้องย่าง\nแยกย้าย\nแยกแยะ\nแย่งชิง\nแยบคาย\nแยบยล\nแย้มพราย\nแย้มยิ้ม\nแย้มสรวล\nโยเย\nโย้เย้\nโยกโคลง\nโยกย้าย\nโยกโย้\nโยนกลอง\nใยหิน\nรกชัฏ\nรกร้าง\nรกเรี้ยว\nรกเรื้อ\nรกราก\nรงควัตถุ\nรชนีกร\nรถกระบะ\nรถเก๋ง\nรถเข็น\nรถแข่ง\nรถจักร\nรถจี๊ป\nรถตู้\nรถทัวร์\nรถบรรทุก\nรถพ่วง\nรถพยาบาล\nรถไฟ\nรถไฟฟ้า\nรถม้า\nรถเมล์\nรถยนต์\nรถราง\nรถลาก\nรถสปอร์ต\nรถสิบล้อ\nรบกวน\nรบรา\nรบเร้า\nรมดำ\nร่มเกล้า\nร่มชูชีพ\nร่มเย็น\nร่มรื่น\nร่วงโรย\nรวงผึ้ง\nรวงรัง\nรวดเร็ว\nรวนเร\nรวบยอด\nรวบรวม\nรวบรัด\nรวมพล\nรวมหัว\nร่วมใจ\nร่วมเพศ\nร่วมมือ\nร่วมรัก\nร่วมสมัย\nรวยริน\nรวยรื่น\nรสชาติ\nรสนิยม\nรองท้อง\nรองเท้า\nรองพื้น\nร่องน้ำ\nร่องรอย\nร้องขอ\nร้องทุกข์\nร้องเรียน\nร้องห่ม\nร้องไห้\nรองช้ำ\nรองทรง\nรอดชีวิต\nรอดตัว\nรอดตาย\nรอนแรม\nร่อนเร่\nร้อนใจ\nร้อนตัว\nร้อนรน\nร้อนรุ่ม\nร้อนวิชา\nร้อนอาสน์\nรอบจัด\nรอบเดือน\nรอบรู้\nรอยร้าว\nร่อยหรอ\nร้อยละ\nร้อยกรอง\nร้อยแก้ว\nร้อยหวาย\nระนาดทุ้ม\nระนาดเอก\nระเบิดขวด\nระเบิดมือ\nระเบียบการ\nรักใคร่\nรักษาการ\nรักษาการณ์\nรังไข่\nรังแตน\nรังนก\nรังผึ้ง\nรังเพลิง\nรังมด\nรังสรรค์\nรังสฤษฏ์\nรั้งรอ\nรังสีแพทย์\nรังสีวิทยา\nรัชกาล\nรัชทายาท\nรัชนีกร\nรัฐธรรมนูญ\nรัฐบาล\nรัฐบุรุษ\nรัฐประศาสน์\nรัฐประหาร\nรัฐพิธี\nรัฐมนตรี\nรัฐวิสาหกิจ\nรัฐศาสตร์\nรัฐสภา\nรัดกุม\nรัดเกล้า\nรัดตัว\nรัดประคด\nรัดรึง\nรัดรูป\nรัตติกาล\nรับขวัญ\nรับจ้าง\nรับช่วง\nรับใช้\nรับซื้อ\nรับทราบ\nรับประกัน\nรับประทาน\nรับปาก\nรับผิด\nรับผิดชอบ\nรับฟ้อง\nรับฟัง\nรับมือ\nรับรอง\nรับรู้\nรับสมัคร\nรับสั่ง\nรับหน้า\nรับเหมา\nรั่วไหล\nรามือ\nร่าเริง\nรากแก้ว\nรากขวัญ\nรากฐาน\nรากฟัน\nรากศัพท์\nรากเหง้า\nร่างกาย\nร่างแห\nร้างรา\nราชกรณียกิจ\nราชการ\nราชกิจ\nราชครู\nราชฐาน\nราชทัณฑ์\nราชทินนาม\nราชทูต\nราชธานี\nราชนาวี\nราชบัณฑิต\nราชบัลลังก์\nราชบาตร\nราชบุตร\nราชปะแตน\nราชภัฏ\nราชมัล\nราชยาน\nราชรถ\nราชลัญจกร\nราชเลขาธิการ\nราชเลขานุการ\nราชวงศ์\nราชวัติ\nราชสกุล\nราชสมบัติ\nราชสาส์น\nราชหัตถเลขา\nราชองครักษ์\nราชโองการ\nราชาคณะ\nราชาศัพท์\nราชินีนาถ\nร้านชำ\nร้านรวง\nราบคาบ\nราบรื่น\nราบเรียบ\nรายการ\nรายงาน\nรายจ่าย\nรายได้\nรายทาง\nรายรับ\nรายล้อม\nรายละเอียด\nรายวิชา\nร่ายยาว\nร่ายรำ\nร้ายกาจ\nร้ายแรง\nราวนม\nราวป่า\nร้าวฉาน\nร้าวราน\nรำพัด\nรำแพน\nรำวง\nร่ำไป\nร่ำร้อง\nร่ำเรียน\nร่ำไร\nร่ำลา\nร่ำไห้\nริเริ่ม\nริอ่าน\nริมฝีปาก\nริ้วรอย\nรีบร้อน\nรีบรุด\nรีบเร่ง\nรื่นรมย์\nรื่นเริง\nรื้อถอน\nรื้อฟื้น\nรุกฆาต\nรุกราน\nรุกล้ำ\nรุกไล่\nรุ่งขึ้น\nรุ่งแจ้ง\nรุ่งเช้า\nรุ่งเรือง\nรุ่งโรจน์\nรุ่งสว่าง\nรุ่งสาง\nรุ่งอรุณ\nรุจิเรข\nรุดหน้า\nรุนแรง\nรุมเร้า\nรุมล้อม\nรุ่มรวย\nรุ่มร้อน\nรุ่ยร่าย\nรู้แกว\nรู้ความ\nรู้คุณ\nรู้งาน\nรู้จัก\nรู้แจ้ง\nรู้ใจ\nรู้เชิง\nรู้ตัว\nรู้ทัน\nรู้เท่า\nรู้เรื่อง\nรู้สำนึก\nรู้สึก\nรู้เห็น\nรูปการณ์\nรูปโฉม\nรูปฌาน\nรูปถ่าย\nรูปทรง\nรูปธรรม\nรูปแบบ\nรูปพรรณ\nรูปพรหม\nรูปภพ\nรูปภาพ\nรูปร่าง\nรูปสมบัติ\nเร่ร่อน\nเร่งด่วน\nเร่งมือ\nเร่งรัด\nเร่งรีบ\nเร่งเร้า\nเร้นลับ\nเร่อร่า\nเร่าร้อน\nเราะราย\nเราะร้าย\nเริงใจ\nเริงรมย์\nเริดร้าง\nเริ่มต้น\nเริ่มแรก\nเรี่ยราด\nเรี่ยไร\nเรียกคืน\nเรียกตัว\nเรียกร้อง\nเรียกหา\nเรียบร้อย\nเรียงความ\nเรียงตัว\nเรียงเบอร์\nเรียงพิมพ์\nเรียงเม็ด\nเรียงราย\nเรียนรู้\nเรียบร้อย\nเรียบเรียง\nเรียบวุธ\nเรี่ยมเร้\nเรี่ยวแรง\nเรือกลไฟ\nเรือกอและ\nเรือกำปั่น\nเรือจ้าง\nเรือดำน้ำ\nเรือโดยสาร\nเรือตรวจการณ์\nเรือตังเก\nเรือธง\nเรือนำร่อง\nเรือบด\nเรือบิน\nเรือใบ\nเรือประมง\nเรือพ่วง\nเรือพิฆาต\nเรือยนต์\nเรือยาว\nเรือโยง\nเรือรบ\nเรือลากจูง\nเรือสำปั้น\nเรือสำเภา\nเรือหลวง\nเรือหางยาว\nเรืออีโปง\nเรือเอี้ยมจุ๊น\nเรื้อรัง\nเรือกสวน\nเรืองนาม\nเรืองรอง\nเรืองแสง\nเรื่องราว\nเรื่องสั้น\nเรือนแก้ว\nเรือนจำ\nเรือนเบี้ย\nเรือนแพ\nเรือนหอ\nเรื่อยเจื้อย\nเรื่อยเฉื่อย\nเรื่อยเปื่อย\nแรเงา\nแรกนา\nแรกนาขวัญ\nแรงงาน\nแรงดึงดูด\nแรงเทียน\nแรงม้า\nแรงเหวี่ยง\nแรมรอน\nแรมรา\nแรมโรย\nโรคจิต\nโรงครัว\nโรงงาน\nโรงเจ\nโรงเตี๊ยม\nโรงทาน\nโรงนา\nโรงพยาบาล\nโรงพัก\nโรงพิมพ์\nโรงเรียน\nโรงเรือน\nโรงแรม\nโรงเลี้ยง\nโรงเลื่อย\nโรงสี\nโรงสีข้าว\nโรงอาหาร\nโรมรัน\nโรยรา\nฤชากร\nฤดูกาล\nลงขัน\nลงแขก\nลงคอ\nลงตัว\nลงท้าย\nลงทุน\nลงโทษ\nลงพุง\nลงมือ\nลงรัก\nลงรอย\nลงแรง\nลงโรง\nลงเอย\nลดตัว\nลดละ\nลดเลี้ยว\nลดหย่อน\nลดหลั่น\nลนลาน\nล้นพ้น\nล้นหลาม\nล้นเหลือ\nลบล้าง\nลบเลือน\nลบหลู่\nลมกรด\nลมค้า\nลมงวง\nลมแดด\nลมทะเล\nลมบก\nลมบน\nลมบ้าหมู\nลมปราณ\nลมปาก\nลมพิษ\nลมว่าว\nลมเสีย\nลมหนาว\nลมหายใจ\nล่มจม\nล่มสลาย\nล้มละลาย\nล้มลุก\nล้มเลิก\nล่วงเกิน\nล่วงรู้\nล่วงละเมิด\nล่วงลับ\nล่วงล้ำ\nล่วงเลย\nล่วงหน้า\nลวดลาย\nลวดสปริง\nลวดหนาม\nล้วนแล้ว\nลหุโทษ\nล่อลวง\nล่อหลอก\nล่อแหลม\nล้อต๊อก\nล้อเลื่อน\nล้อเล่น\nล้อเลียน\nล้อหลอก\nลองเชิง\nลองดี\nลองภูมิ\nล่องหน\nลอดช่อง\nล่อนจ้อน\nลอบกัด\nล้อมวง\nลอยแก้ว\nลอยชาย\nลอยตัว\nลอยนวล\nลอยแพ\nลอยลำ\nละทิ้ง\nละเลย\nละเว้น\nละครนอก\nละครใน\nละครเพลง\nละครร้อง\nละครรำ\nละครลิง\nละครสัตว์\nละเอียดอ่อน\nลักไก่\nลักพา\nลักเพศ\nลักยิ้ม\nลักลอบ\nลักลั่น\nลักหลับ\nลัดเลาะ\nลับตา\nลับแล\nลับหลัง\nลาออก\nล่าช้า\nล่าทัพ\nล้าสมัย\nล้าหลัง\nลากข้าง\nล้างบาง\nล้างผลาญ\nลาดเขา\nลาดตระเวน\nลาดเท\nลาดยาง\nลานบิน\nลาภปาก\nลาภลอย\nลามปาม\nลามเลีย\nลายคราม\nลายเซ็น\nลายแทง\nลายน้ำ\nลายพร้อย\nลายมือ\nลายลักษณ์\nลายเส้น\nลำกล้อง\nลำแข้ง\nลำธาร\nลำแสง\nลำไส้\nลำตัด\nลำนำ\nล่ำสัน\nล้ำยุค\nล้ำสมัย\nล้ำลึก\nล้ำเลิศ\nล้ำเส้น\nล้ำหน้า\nลิงจุ่น\nลิงลม\nลิงโลด\nลิดรอน\nลิ้นไก่\nลิ้นชัก\nลิ้นปี่\nลิ้นควาย\nลิ้นงูเห่า\nลิ้นหมา\nลิบลับ\nลิบลิ่ว\nลิ่มเลือด\nลี้ภัย\nลี้ลับ\nลึกซึ้ง\nลึกลับ\nลึกล้ำ\nลืมตน\nลืมต้น\nลืมตัว\nลืมตา\nลืมเลือน\nลือชา\nลือชื่อ\nลือลั่น\nลุล่วง\nลุกลน\nลุกลาม\nลุกลี้ลุกลน\nลุกฮือ\nลุ่มน้ำ\nลุ่มลึก\nลุ่มหลง\nลุ่ทาง\nลูกกรง\nลูกกรอก\nลูกกรุง\nลูกกลอน\nลูกกลิ้ง\nลูกกวาด\nลูกกะจ๊อก\nลูกกุญแจ\nลูกเกด\nลูกแก้ว\nลูกขนไก่\nลูกข่าง\nลูกขุน\nลูกเขย\nลูกครึ่ง\nลูกคลื่น\nลูกความ\nลูกคอ\nลูกค้า\nลูกคิด\nลูกคู่\nลูกจ้าง\nลูกช้าง\nลูกชิด\nลูกชิ้น\nลูกชุบ\nลูกซอง\nลูกโซ่\nลูกดอก\nลูกดิ่ง\nลูกตะกั่ว\nลูกตุ้ม\nลูกเต้า\nลูกเต๋า\nลูกถ้วย\nลูกทุ่ง\nลูกเธอ\nลูกน้อง\nลูกน้ำ\nลูกนิมิต\nลูกบอล\nลูกบ้าน\nลูกบาศก์\nลูกบิด\nลูกเบี้ยว\nลูกประคบ\nลูกประคำ\nลูกปัด\nลูกปืน\nลูกโป่ง\nลูกผสม\nลูกผู้ชาย\nลูกผู้หญิง\nลูกพรรค\nลูกพี่\nลูกฟูก\nลูกไฟ\nลูกมือ\nลูกโม่\nลูกไม้\nลูกยาเธอ\nลูกรอก\nลูกรัง\nลูกเรือ\nลูกล้อ\nลูกลอย\nลูกเล่น\nลูกเลี้ยง\nลูกโลก\nลูกวัด\nลูกศร\nลูกศิษย์\nลูกสมุน\nลูกสะใภ้\nลูกสูบ\nลูกเสือ\nลูกหนัง\nลูกหนี้\nลูกหนู\nลูกหมาก\nลูกหลง\nลูกหลาน\nลูกหาบ\nลูกหิน\nลูกเห็บ\nลูกเหม็น\nลูกแหง่\nลูกอม\nลูกหม้อ\nลูบคม\nลูบคลำ\nลูบไล้\nเล็กน้อย\nเลขคณิต\nเลขผา\nเลขหมาย\nเล็ดลอด\nเล่นงาน\nเล่นแง่\nเล่นชู้\nเล่นตัว\nเล่นลิ้น\nเล่นหัว\nเลนส์นูน\nเลนส์เว้า\nเล็บครุฑ\nเลยเถิด\nเลศนัย\nเล่ห์กล\nเล่ห์เหลี่ยม\nเลอโฉม\nเลอมาน\nเลอเลิศ\nเลอสรวง\nเล่อล่า\nเลอะเลือน\nเล่าเรียน\nเล่าลือ\nเลาะลัด\nเลิกรา\nเลิกร้าง\nเลิกล้ม\nเลิศเลอ\nเลี้ยงชีพ\nเลี้ยงดู\nเลี้ยงต้อย\nเลียบเคียง\nเลี้ยวลด\nเลือกตั้ง\nเลือกเฟ้น\nเลือกสรร\nเลื่องลือ\nเลือดกำเดา\nเลือดเนื้อ\nเลือดฝาด\nเลือดเย็น\nเลือดร้อน\nเลือดหมู\nเลือดอุ่น\nเลือนราง\nเลื่อนเปื้อน\nเลื่อนลอย\nเลื่อมพราย\nเลื่อมใส\nเลื่อยฉลุ\nเลื่อยลันดา\nเลื่อยวงเดือน\nเลื้อยคลาน\nแลเหลียว\nแลกเปลี่ยน\nแล้วกัน\nและเล็ม\nโล่งใจ\nโล่งโถง\nโล่งอก\nโลดเต้น\nโลดโผน\nโลดลิ่ว\nโลดแล่น\nไล่ที่\nไล่เบี้ย\nไล่เลี่ย\nไล่เลียง\nไล่หลัง\nไล่ออก\nวกวน\nวงกบ\nวงกลม\nวงการ\nวงแขน\nวงเงิน\nวงจร\nวงนอก\nวงใน\nวงรี\nวงเล็บ\nวงเวียน\nวงแหวน\nวงศ์วาน\nวจีกรรม\nวจีเภท\nวจีภาค\nวนเวียน\nวอดวาย\nว็อบแว็บ\nวังวน\nวังหน้า\nวังหลวง\nวังหลัง\nวัดราษฎร์\nวัดวา\nวัดหลวง\nวัดผล\nวัดพื้น\nวัตถุนิยม\nวัตถุประสงค์\nวัตรปฏิบัติ\nวันโกน\nวันพระ\nวันเพ็ญ\nวัยรุ่น\nวัยวุฒิ\nว่ากล่าว\nว่าจ้าง\nว่าด้วย\nว่าที่\nวางก้าม\nวางใจ\nวางตัว\nวางตา\nวางโต\nวางท่า\nวางมวย\nวางมาด\nวางมือ\nวางวาย\nว่างเปล่า\nว่างเว้น\nวาดเขียน\nว่านเครือ\nวาบหวาม\nวายชนม์\nวายปราณ\nวายวาง\nวายวอด\nวายร้าย\nวายุภักษ์\nวาววับ\nวาววาม\nวาวแวว\nวาวแสง\nวิกฤตการณ์\nวิกฤติการณ์\nวิกฤตกาล\nวิกฤติกาล\nวิกลจริต\nวิงเวียน\nวิ่งเต้น\nวิ่งผลัด\nวิ่งรอก\nวิ่งราว\nวิจิตรศิลป์\nวิชาการ\nวิชาชีพ\nวิชาธร\nวิญญูชน\nวิดพื้น\nวิตกจริต\nวิถีทาง\nวิทยากร\nวิทยากล\nวิทยาการ\nวิทยาเขต\nวิทยาทาน\nวิทยาธร\nวิทยานิพนธ์\nวิทยาศาสตร์\nวิเทศสัมพันธ์\nวิธีการ\nวินัยธร\nวินัยปิฎก\nวินาศกรรม\nวินาศภัย\nวินาศสันตะโร\nวิภัชพยากรณ์\nวิภัชวาที\nวิไลวรรณ\nวิสัญญีแพทย์\nวิสัญญีภาพ\nวิสัญญีวิทยา\nวุฒิบัตร\nวุฒิสภา\nวุฒิสมาชิก\nวุ่นวาย\nวุ้นเส้น\nวูบวาบ\nเวจกุฎี\nเวจมรรค\nเวชกรรม\nเวชภัณฑ์\nเวชศาสตร์\nเวทมนตร์\nเวนคืน\nเวรกรรม\nเวฬุการ\nเวฬุวัน\nเว้าวอน\nเวิ้งว้าง\nเวียงวัง\nเวียนเทียน\nแว้งกัด\nแวดล้อม\nแวดวง\nแว่นขยาย\nแว่นแคว้น\nแว่นตา\nแวบวับ\nแววตา\nแวววาม\nแวววาว\nแวะเวียน\nโวยวาย\nไวไฟ\nไว้ใจ\nไว้ชื่อ\nไว้ตัว\nไว้ทุกข์\nไว้ลาย\nไว้หน้า\nไว้อาลัย\nศนิวาร\nศอกกลับ\nศอกกำ\nศอกกำมา\nศักดิ์ศรี\nศักดิ์สิทธิ์\nศารทวิษุวัติ\nศาลแขวง\nศาลจังหวัด\nศาลชั้นต้น\nศาลฎีกา\nศาลเตี้ย\nศาลทหาร\nศาลปกครอง\nศาลพระภูมิ\nศาลเพียงตา\nศาลแพ่ง\nศาลรัฐธรรมนูญ\nศาลแรงงาน\nศาลล้มละลาย\nศาลโลก\nศาลสูง\nศาลสูงสุด\nศาลอาญา\nศาลอุทธรณ์\nศาลากลาง\nศาลาดิน\nศาลาราย\nศาลาวัด\nศิลาฤกษ์\nศิลาแลง\nศิษย์เก่า\nศิษย์เอก\nศีลจุ่ม\nศีลธรรม\nศีลวัต\nศีลอด\nศูนย์กลาง\nศูนย์การค้า\nศูนย์ถ่วง\nศูนย์สูตร\nศูนย์หน้า\nเศร้าใจ\nเศร้าโศก\nเศร้าสร้อย\nเศร้าสลด\nเศร้าหมอง\nเศวตฉัตร\nเศษเกิน\nเศษซ้อน\nเศษวรรค\nเศษส่วน\nเศษเหล็ก\nโศกนาฏกรรม\nโศกศัลย์\nโศกเศร้า\nโศกสลด\nสกลโลก\nส่งเดช\nส่งท้าย\nส่งเสริม\nส่งเสีย\nส่งเสียง\nสงบเงียบ\nสงบเสงี่ยม\nสง่างาม\nสง่าราศี\nสดชื่น\nสดใส\nสตรีเพศ\nสติปัญญา\nสถลมารค\nสถานกงสุล\nสถานที่\nสถานทูต\nสถานการณ์\nสถานภาพ\nสถิติศาสตร์\nสนตะพาย\nสนใจ\nส้นตีน\nสนธิสัญญา\nสนนราคา\nสนับแข้ง\nสนับเพลา\nสนับมือ\nสนามบิน\nสนามเพลาะ\nสนิทสนม\nสนิมขุม\nสนิมสร้อย\nสนุกสนาน\nสบประมาท\nสบายใจ\nสภาพธรรม\nสมควร\nสมจริง\nสมใจ\nสมนัย\nสมน้ำหน้า\nสมประกอบ\nสมส่วน\nสมหวัง\nสมคบ\nสมทบ\nสมยอม\nสมรัก\nสมรู้\nสมสู่\nส้มฉุน\nส้มตำ\nส้มลิ้ม\nส้มกุ้ง\nส้มเช้า\nสมญานาม\nสมมติฐาน\nสมมุติฐาน\nสมมติเทพ\nสมรภูมิ\nสมัครใจ\nสมัยนิยม\nสมุทรศาสตร์\nสมุทรเสนา\nสยดสยอง\nสยองขวัญ\nสยามรัฐ\nสรรหา\nสรวมชีพ\nสรวลเส\nสร้อยเศร้า\nสร้างสรรค์\nสร้างเสริม\nสลดใจ\nสลบไสล\nสละสลวย\nสลาเหิน\nสลากภัต\nสวนครัว\nสวนป่า\nสวนสนุก\nสวนหย่อม\nส่วนกลาง\nส่วนเกิน\nส่วนตัว\nส่วนบุญ\nส่วนแบ่ง\nส่วนประกอบ\nส่วนพระองค์\nส่วนผสม\nส่วนรวม\nส่วนร่วม\nส่วนลด\nส่วนสัด\nสวมกอด\nสวมเขา\nสวมรอย\nสวยมภู\nสว่างไสว\nสวามิภักดิ์\nสวิงสวาย\nสสารนิยม\nส่อเสียด\nสอดคล้อง\nสอดแทรก\nสอดแนม\nสอบถาม\nสอบทาน\nสอบไล่\nสอบสวน\nส้อมเสียง\nสะสวย\nสะแกวัลย์\nสะแกแสง\nสะใจ\nสะเด็ดยาด\nสะเทือนใจ\nสะบัดช่อ\nสั่งสม\nสั่งสอน\nสั่งเสีย\nสังเกตการณ์\nสังคมนิยม\nสังคมวิทยา\nสังคมศาสตร์\nสังคมศึกษา\nสังคมสงเคราะห์\nสัญญาบัตร\nสัดส่วน\nสัตการ\nสัตบุรุษ\nสัตบริภัณฑ์\nสัตภัณฑ์\nสัตมหาสถาน\nสัตโลหะ\nสันเขา\nสันดอน\nสันหลัง\nสั่นเทา\nสั่นเทิ้ม\nสันติบาล\nสันติภาพ\nสันติวิธี\nสันติสุข\nสับเปลี่ยน\nสับสน\nสับหลีก\nสับหว่าง\nสัมมาคารวะ\nสัมมาชีพ\nส่าเหล้า\nสากกะเบือ\nสาทิสลักษณ์\nสาธุการ\nสาธุชน\nสาบเสือ\nสาปสรร\nสาปแช่ง\nสาปส่ง\nสามง่าม\nสามล้อ\nสามเหลี่ยม\nสามเวท\nสามัญชน\nสามัญสำนึก\nสายดิ่ง\nสายดิน\nสายตรวจ\nสายน้ำ\nสายบัว\nสายพาน\nสายฟ้า\nสายยาง\nสายยู\nสายใย\nสายรก\nสายรุ้ง\nสายล่อฟ้า\nสายลับ\nสายเลือด\nสายโลหิต\nสายวัด\nสายส่ง\nสายสวาท\nสายสะดือ\nสายสะพาย\nสายสัมพันธ์\nสายสิญจน์\nสายสืบ\nสายไหม\nสายอากาศ\nสายตา\nสายหยุด\nสารตรา\nสารประกอบ\nสารละลาย\nสารส้ม\nสารหนู\nสารทฤดู\nสาวใช้\nสาวน้อย\nสาวใหญ่\nสำนักงาน\nสำนักพิมพ์\nสำนักสงฆ์\nสำมะโนครัว\nสำเร็จรูป\nสิกขาบท\nสิงสถิต\nสิงสู่\nสิ่งก่อสร้าง\nสิ่งของ\nสิ่งปฏิกูล\nสิ่งพิมพ์\nสิ่งแวดล้อม\nสิ่งศักดิ์สิทธิ์\nสิทธิกร\nสิทธิ์ขาด\nสิทธิชัย\nสิทธิโชค\nสิทธิบัตร\nสินค้า\nสินจ้าง\nสินเชื่อ\nสินไถ่\nสินทรัพย์\nสินน้ำใจ\nสินบน\nสินแร่\nสินสมรส\nสินสอด\nสินไหม\nสิ้นเชิง\nสิ้นสุด\nสีผึ้ง\nสีลม\nสีชอล์ก\nสีถ่าน\nสีเทียน\nสีน้ำ\nสีน้ำมัน\nสีโปสเตอร์\nสีฝุ่น\nสี่เหลี่ยม\nสีหน้า\nสึกหรอ\nสืบทอด\nสืบค้น\nสืบสวน\nสืบสาว\nสืบเสาะ\nสื่อผสม\nสื่อมวลชน\nสื่อสาร\nสุกงอม\nสุกดิบ\nสุกปลั่ง\nสุกใส\nสุขนาฏกรรม\nสุขภัณฑ์\nสุขภาพ\nสุขลักษณะ\nสุขวิทยา\nสุขศาลา\nสุขศึกษา\nสุดท้าย\nสุตกวี\nสุนทรพจน์\nสุภาพชน\nสู่ขอ\nสู่รู้\nสู่สม\nสูงส่ง\nสูญเปล่า\nสูญสิ้น\nสูญเสีย\nสูญหาย\nเสสรวล\nเสแสร้ง\nเสกสรร\nเสถียรภาพ\nเส้นชัย\nเส้นตรง\nเส้นตาย\nเส้นทาง\nเส้นใย\nเส้นรุ้ง\nเส้นเลือด\nเส้นแวง\nเส้นสาย\nเส้นเสียง\nเส้นหมี่\nเส้นเอ็น\nเสบียงกรัง\nเสมอภาค\nเสมอหน้า\nเสมอเหมือน\nเสมียนตรา\nเสร็จสรรพ\nเสร็จสิ้น\nเสริมส่ง\nเสริมสร้าง\nเสริมสวย\nเสรีไทย\nเสรีธรรม\nเสรีนิยม\nเสรีภาพ\nเสาเข็ม\nเสาธง\nเสียใจ\nเสียเชิง\nเสียดาย\nเสียที\nเสียเที่ยว\nเสียเปรียบ\nเสียเปล่า\nเสียรู้\nเสียแรง\nเสียสละ\nเสียหลัก\nเสียหาย\nเสี่ยงทาย\nเสียดแทง\nเสียดแทรก\nเสียดสี\nเสี้ยนศึก\nเสี้ยนหนาม\nเสี้ยมสอน\nเสียวซ่าน\nเสียวไส้\nเสือดาว\nเสือดำ\nเสือปลา\nเสือป่า\nเสือไฟ\nเสื่อกก\nเสื่อกระจูด\nเสื่อน้ำมัน\nเสื่อลำแพน\nเสื้อกล้าม\nเสื้อกั๊ก\nเสื้อเกราะ\nเสื้อครุย\nเสื้อแสง\nเสื้อเมือง\nเสือกคลาน\nเสือกสน\nเสือกไส\nเสื่อมคลาย\nเสื่อมถอย\nเสื่อมทราม\nเสื่อมโทรม\nเสื่อมสลาย\nเสื่อมสูญ\nเสื่อมเสีย\nเสือหมอบ\nแสกหน้า\nแสดงออก\nแสเถา\nแสนกล\nแสนรู้\nแสร้งว่า\nใส่ความ\nใส่ไคล้\nใส่ใจ\nใส่ไฟ\nไส้กรอก\nไส้ไก่\nไส้ติ่ง\nไส้ศึก\nไส้อั่ว\nไส้เดือน\nไส้ตัน\nไสยเวท\nไสยศาสตร์\nหกล้ม\nหงส์หยก\nหงอนไก่\nหงอยก๋อย\nหงอยเหงา\nหงายท้อง\nหงายหลัง\nหงำเหงอะ\nหงำเหงือก\nหดหาย\nหดหู่\nหนทาง\nหนวกหู\nหน่วงเหนี่ยว\nหน่วยก้าน\nหน่อไม้\nหนองใน\nหนองแซง\nหนักข้อ\nหนักใจ\nหนักแน่น\nหนักหน่วง\nหนักหนา\nหนังกลับ\nหนังตะลุง\nหนังเรียด\nหนังสด\nหนังใหญ่\nหนังสือพิมพ์\nหนาแน่น\nหน้ากระดาน\nหน้ากาก\nหน้ากาฬ\nหน้าแข้ง\nหน้าจั่ว\nหน้าฉาน\nหน้าตัก\nหน้าตา\nหน้าต่าง\nหน้าท้อง\nหน้าทับ\nหน้าที่\nหน้าที่นั่ง\nหน้าบัน\nหน้าปัด\nหน้าผา\nหน้าผาก\nหน้าม้า\nหน้ามุข\nหน้าไม้\nหน้าเลือด\nหน้าอก\nหนามเตย\nหน่ายหนี\nหน่ายแหนง\nหนาวเหน็บ\nหนำใจ\nหนี้สิน\nหนี้สูญ\nหนุนเนื่อง\nหนุนหลัง\nหมกมุ่น\nหมดจด\nหมอขวัญ\nหมอความ\nหมอแคน\nหมองู\nหมอดู\nหมอตำแย\nหมอทำขวัญ\nหมอนวด\nหมอผี\nหมอยา\nหมอลำ\nหมอเสน่ห์\nหม้อแกง\nหม้อตาล\nหม้อน้ำ\nหม้อแปลง\nหมองใจ\nหมองมัว\nหมองหม่น\nหมองหมาง\nหมอนขวาน\nหมอนข้าง\nหมอนทอง\nหม่อมเจ้า\nหม่อมฉัน\nหม่อมราชวงศ์\nหม่อมหลวง\nหม่อมห้าม\nหมั่นไส้\nหมาป่า\nหมาหมู่\nหมากฝรั่ง\nหมากสง\nหมากหอม\nหมากเก็บ\nหมากรุก\nหมากเม่า\nหมางใจ\nหมางเมิน\nหมาไม้\nหมายเกณฑ์\nหมายขัง\nหมายค้น\nหมายความ\nหมายจับ\nหมายใจ\nหมายตา\nหมายปล่อย\nหมายมั่น\nหมายเรียก\nหมายเลข\nหมายเหตุ\nหมิ่นเหม่\nหมึกจีน\nหมุนเวียน\nหมูแดง\nหมูป่า\nหมูแผ่น\nหมูยอ\nหมูหย็อง\nหมูหัน\nหมูแฮม\nหมู่บ้าน\nหยดย้อย\nหยอกเย้า\nหยักรั้ง\nหยักศก\nหยั่งทราบ\nหยั่งรู้\nหยั่งเสียง\nหยาบคาย\nหยาบช้า\nหยาบโลน\nหยาบหยาม\nหยิบมือ\nหยิบยก\nหยิบยืม\nหยิบหย่ง\nหยิบโหย่ง\nหริรักษ์\nหริวงศ์\nหลงผิด\nหลบฉาก\nหลบมุม\nหลวงจีน\nหลวงพ่อ\nหลวมตัว\nหล่อลื่น\nหล่อเลี้ยง\nหล่อหลอม\nหลอกลวง\nหลอกล่อ\nหลอกล้อ\nหลอดลม\nหลอดเลือด\nหลอดอาหาร\nหลอมตัว\nหลอมเหลว\nหลักการ\nหลักเกณฑ์\nหลักชัย\nหลักฐาน\nหลักทรัพย์\nหลักเมือง\nหลักลอย\nหลักสูตร\nหลักแหล่ง\nหลักแหลม\nหลังคา\nหลังเต่า\nหลั่งไหล\nหลับนก\nหลับใน\nหลากใจ\nหลากหลาย\nหลาบจำ\nหลายหลาก\nหลายแหล่\nหลุดพ้น\nหลุดลอย\nหลุดลุ่ย\nหลุมโจน\nหลุมพราง\nหวงก้าง\nหวงห้าม\nหวงแหน\nห่วงใย\nห้วงน้ำ\nหวังใจ\nหวังดี\nหวั่นกลัว\nหวั่นเกรง\nหวั่นใจ\nหวั่นวิตก\nหวั่นหวาด\nหวั่นไหว\nหวาดกลัว\nหวาดเกรง\nหวาดผวา\nหวาดเสียว\nหวาดหวั่น\nหวาดไหว\nหวานเย็น\nหว่านล้อม\nหอคอย\nหอคำ\nหอฉัน\nหอไตร\nหอประชุม\nหอพัก\nห่อหมก\nห่อเหี่ยว\nหอกซัด\nห้องเครื่อง\nห้องชุด\nห้องแถว\nห้องโถง\nห้องน้ำ\nห้องสมุด\nหอสมุด\nหอมหวน\nห้อมล้อม\nห้อยโหน\nหักล้าง\nหักหาญ\nหักห้าม\nหักเห\nหักโหม\nหักมุก\nหันเห\nหับเผย\nหัวขโมย\nหัวข้อ\nหัวขั้ว\nหัวเข่า\nหัวโขน\nหัวคะแนน\nหัวค่ำ\nหัวคิด\nหัวจุก\nหัวโจก\nหัวใจ\nหัวเทียน\nหัวนม\nหัวนอน\nหัวป่า\nหัวมุม\nหัวเรื่อง\nหัวแร้ง\nหัวใส\nหัวหน้า\nหัวหน่าว\nหัวหอก\nหัวเห็ด\nหัวไหล่\nหัวอก\nหัสดนตรี\nหัสนาฏกรรม\nหัสนิยาย\nหัสดีลิงค์\nหางเครื่อง\nหางแถว\nหางเลข\nหางว่าว\nหางเสียง\nหางเสือ\nห่างเหิน\nหาบเร่\nห้ามปราม\nห้ามล้อ\nหายตัว\nหาวนอน\nห้าวหาญ\nห้ำหั่น\nหินงอก\nหินทราย\nหินปูน\nหินย้อย\nหินอ่อน\nหินชาติ\nหินยาน\nหีบเพลง\nหีบห่อ\nหุ่นกระบอก\nหุ่นยนต์\nหุ้นลม\nหุ้นส่วน\nหุบเขา\nหุบผา\nหุบเหว\nหูกระต่าย\nหูช้าง\nหูรูด\nหูกวาง\nเหงาหงอย\nเหงื่อกาฬ\nเหตุการณ์\nเหตุผล\nเห็นแก่\nเห็นใจ\nเหน็บแนม\nเหน็บชา\nเหนียวแน่น\nเหนี่ยวนำ\nเหนี่ยวรั้ง\nเหนื่อยหน่าย\nเหมาะเจาะ\nเหมาะสม\nเหมาะเหม็ง\nเหยเก\nเหยียดหยาม\nเหล็กกล้า\nเหล็กจาร\nเหล็กใน\nเหล็กส่ง\nเหล็กเส้น\nเหล็กหล่อ\nเหล็กไหล\nเหลวแหลก\nเหลวไหล\nเหลอหลา\nเหล่ากอ\nเหลียวแล\nเหลือเกิน\nเหลือขอ\nเหลือใจ\nเหลือเชื่อ\nเหลือเฟือ\nเหลือร้าย\nเหลือล้น\nเหลือหลาย\nเหลือแหล่\nเหลือแสน\nเหลือหลอ\nเหลื่อมล้ำ\nเห่อเหิม\nเหินห่าง\nเหิมเกริม\nเหิมหาญ\nเหี้ยมเกรียม\nเหี้ยมหาญ\nเหี้ยมโหด\nเหี่ยวแห้ง\nเหือดหาย\nเหือดแห้ง\nแห่แหน\nแหนงหน่าย\nแหลกลาญ\nแหลกเหลว\nแหวกแนว\nแหวกว่าย\nโหงพราย\nโหดร้าย\nโหดเหี้ยม\nโหยหวน\nโหวงเหวง\nให้การ\nให้ท่า\nให้ท้าย\nให้ร้าย\nให้หลัง\nไหมพรม\nไหวพริบ\nอกไก่\nอกร่อง\nองค์กร\nองค์การ\nอดกลั้น\nอดทน\nอดสู\nอดอยาก\nอดออม\nอดีตกาล\nอดีตชาติ\nอดีตภพ\nอติชาตบุตร\nอธิการบดี\nอนาคตกาล\nอนิจกรรม\nอนุชาตบุตร\nอเนกประสงค์\nอบรม\nอบอวล\nอบอ้าว\nอบอุ่น\nอบายภูมิ\nอบายมุข\nอภัพบุคคล\nอภัยทาน\nอภัยโทษ\nอภิชาตบุตร\nอมยิ้ม\nอมรรัตน์\nอมฤตบท\nอมฤตรส\nอย่างไร\nอรรถกร\nอรรถกวี\nอรรถคดี\nอรรถประโยชน์\nอรรถรส\nอรรธนิศา\nอรรธภาค\nอรรธสระ\nอรสุมพล\nอรูปฌาน\nอรูปพรหม\nอรูปภพ\nอรูปภูมิ\nอวชาตบุตร\nอวดดี\nอวดอ้าง\nอ้วนท้วน\nอ้วนพี\nอวบอั๋น\nอวยชัย\nอวยพร\nอสุภกรรมฐาน\nอสุภสัญญา\nอโหสิกรรม\nออเจ้า\nออกแขก\nออกตัว\nออกโรง\nออกฤทธิ์\nออกลาย\nออกหาก\nออดอ้อน\nออดแอด\nอ่อนข้อ\nอ่อนใจ\nอ่อนช้อย\nอ่อนน้อม\nอ่อนเปลี้ย\nอ่อนเพลีย\nอ่อนโยน\nอ่อนหวาน\nอ่อนหัด\nอ่อนไหว\nอ่อนแอ\nอ้อนวอน\nอ้อนออด\nอ้อมค้อม\nอักษรศาสตร์\nอักษรสาส์น\nอัคคีภัย\nอัญชนะศักราช\nอัดฉีด\nอัดอั้น\nอัตราส่วน\nอันโตชน\nอันโตนาที\nอับจน\nอับเฉา\nอับอาย\nอัสสุชล\nอัสสุธารา\nอากัปกิริยา\nอาการนาม\nอากาศธาตุ\nอากาศยาน\nอาคารชุด\nอ่างเก็บน้ำ\nอ้างอิง\nอาจหาญ\nอาจอง\nอาชญากร\nอาชญากรรม\nอาชญาบัตร\nอาชญาสิทธิ์\nอาญาสิทธิ์\nอาณาเขต\nอาณาจักร\nอาณานิคม\nอาณาประโยชน์\nอาโปกสิณ\nอาโปธาตุ\nอาภากร\nอายุขัย\nอายุวัฒนะ\nอาโลกกสิณ\nอาหารว่าง\nอำพราง\nอิดโรย\nอิดออด\nอิดเอื้อน\nอิตถีลิงค์\nอิทธิปาฏิหาริย์\nอิทธิพล\nอิทธิฤทธิ์\nอินังขังขอบ\nอิ่มตัว\nอิ่มหนำ\nอิ่มเอม\nอิ่มเอิบ\nอีฉัน\nอีตัว\nอึงคะนึง\nอึงมี่\nอึงอล\nอึ่งยาง\nอึ่งอ่าง\nอึดใจ\nอึดอัด\nอืดอาด\nอื้อฉาว\nอื้อซ่า\nอื้ออึง\nอุกฉกรรจ์\nอุกอาจ\nอุดอู้\nอุ่นเครื่อง\nอุ่นใจ\nอุบอิบ\nอุบัติภัย\nอุบัติเหตุ\nอุโบสถกรรม\nอุโบสถหัตถี\nอุปมาโวหาร\nอุ้มชู\nอุ้มสม\nอุ้ยอ้าย\nอู้อี้\nเอกจิต\nเอกฉันท์\nเอกชน\nเอกเทศ\nเอกนัย\nเอกบุคคล\nเอกบุรุษ\nเอกพจน์\nเอกภพ\nเอกภาพ\nเอกมัย\nเอกราช\nเอกรูป\nเอกลักษณ์\nเอกศก\nเอกสาร\nเอกสิทธิ์\nเอกอุ\nเอ็ดอึง\nเอนเอียง\nเอมอร\nเอออวย\nเออออ\nเอาการ\nเอางาน\nเอาจริง\nเอาใจ\nเอาเปรียบ\nเอาเยี่ยง\nเอิบอาบ\nเอียงอาย\nเอียงเอน\nเอื้อเฟื้อ\nโอ่โถง\nโอ้โถง\nโอ่อวด\nโอ้อวด\nโอ่อ่า\nโอ้โลม\nโอดครวญ\nโอดโอย\nโอนอ่อน\nโอนเอน\nโอบอ้อม\nโอบอุ้ม\nโอสถกรรม\nไอเสีย\nไอกรน\nฮวบฮาบ\nฮาป่า\nฮึกหาญ\nฮึกห้าว\nฮึกเหิม\nฮึกโหม\nฮึกฮัก\nเฮงซวย\nโฮกฮือ\nโฮกฮาก\n\nก็\nกก\nก๊ก\nกกุธภัณฑ์\nกง\nก่ง\nก้ง\nก๊ง\nก๋ง\nกงกอน\nกงไฉ่\nกงเต๊ก\nกงสี\nกงสุล\nกช\nกฎ\nกฏุก\nกฐิน\nกณิกนันต์\nกณิการ์\nกด\nกตเวทิตา\nกตเวที\nกตัญชลี\nกตัญญุตา\nกตัญญู\nกตาธิการ\nกตาภินิหาร\nกติกา\nกถา\nกถิกาจารย์\nกทลี\nกน\nก่น\nก้น\nกนก\nกนิษฐ์\nกนิษฐา\nกบ\nกบฏ\nกบดาน\nกบทู\nกบาล\nกบินทร์\nกบิล\nกบี่\nกบูร\nกเบนทร์\nกม\nก้ม\nกมณฑลาภิเษก\nกมณฑโลทก\nกมล\nกมลา\nกมลาศ\nกมลาสน์\nกมเลศ\nกมัณฑลุ\nกมุท\nกร\nกรกฎ\nกรกฎาคม\nกรกฏ\nกรง\nกรชกาย\nกรณฑ์\nกรณิการ์\nกรณี\nกรณีย์\nกรณียกิจ\nกรณียะ\nกรด\nกรน\nกรบ\nกรบูร\nกรพินธุ์\nกรม\nกรรกฎ\nกรรกศ\nกรรเกด\nกรรไกร\nกรรเจียก\nกรรชิง\nกรรเชียง\nกรรโชก\nกรรฐ์\nกรรฐา\nกรรณ\nกรรณา\nกรรณิกา\nกรรณิการ์\nกรรดิ\nกรรดิก\nกรรดึก\nกรรตุ\nกรรไตร\nกรรทบ\nกรรแทก\nกรรบิด\nกรรบูร\nกรรภิรมย์\nกรรม\nกรรม์\nกรรม์ภิรมย์\nกรรมชวาต\nกรรมัชวาต\nกรรมาชีพ\nกรรมาธิการ\nกรรมาร\nกรรษก\nกรรสะ\nกรรแสง\nกรวด\nกรวบ\nกรวม\nกร้วม\nกรวย\nกรวิก\nกรสาปน์\nกรสุทธิ์\nกรอ\nกร้อ\nกรอก\nกร็อกกร๋อย\nกรอกแกรก\nกรอง\nกรองกรอย\nกรอด\nกร่อน\nกรอบ\nกรอม\nกร่อย\nกระ\nกระกร\nกระกรุ่น\nกระกลับกลอก\nกระกี้\nกระเกรอก\nกระเกริก\nกระเกริ่น\nกระคน\nกระคาย\nกระงกกระเงิ่น\nกระง่องกระแง่ง\nกระง่อนกระแง่น\nกระเง้ากระงอด\nกระโงก\nกระจก\nกระจง\nกระจร\nกระจอก\nกระจองหง่อง\nกระจ๋องหง่อง\nกระจองอแง\nกระจ้อน\nกระจอนหู\nกระจ้อย\nกระจ๋อหวอ\nกระจะ\nกระจัก\nกระจัง\nกระจัด\nกระจับ\nกระจ่า\nกระจ่าง\nกระจาด\nกระจาน\nกระจาบ\nกระจาม\nกระจาย\nกระจาว\nกระจิก\nกระจิ๋ง\nกระจิด\nกระจิบ\nกระจิ๋ม\nกระจิริด\nกระจิ๋ว\nกระจี้\nกระจี๋\nกระจุก\nกระจุ๋งกระจิ๋ง\nกระจุบ\nกระจุ๊บ\nกระจุ๋มกระจิ๋ม\nกระจุย\nกระจู้\nกระจู๋กระจี๋\nกระจูด\nกระเจอะกระเจิง\nกระเจา\nกระเจ่า\nกระเจ้า\nกระเจาะ\nกระเจิง\nกระเจิดกระเจิง\nกระเจี้ยง\nกระเจี๊ยบ\nกระเจียว\nกระเจี๊ยว\nกระแจะ\nกระโจน\nกระโจม\nกระฉอก\nกระฉ่อน\nกระฉับกระเฉง\nกระฉิ่ง\nกระฉีก\nกระฉูด\nกระเฉก\nกระเฉด\nกระแฉก\nกระโฉกกระเฉก\nกระโฉม\nกระชดกระช้อย\nกระชอน\nกระชอมดอก\nกระช้อย\nกระชัง\nกระชั้น\nกระชับ\nกระชาก\nกระชาย\nกระชิง\nกระชิด\nกระชุ\nกระชุก\nกระชุ่มกระชวย\nกระเชอ\nกระเชา\nกระเช้า\nกระเชียง\nกระแชง\nกระแชะ\nกระโชก\nกระซ่องกระแซ่ง\nกระซับ\nกระซาบ\nกระซิก\nกระซิบ\nกระซี้\nกระซุง\nกระซุบกระซิบ\nกระซุ้ม\nกระซู่\nกระเซ็น\nกระเซอ\nกระเซอะกระเซอ\nกระเซอะกระเซิง\nกระเซ้า\nกระเซิง\nกระแซ\nกระแซะ\nกระโซกระเซ\nกระฎี\nกระฎุมพี\nกระดก\nกระด้ง\nกระดนโด่\nกระดวง\nกระดวน\nกระด้วมกระเดี้ยม\nกระดอ\nกระดอง\nกระดองหาย\nกระดอน\nกระดอม\nกระดักกระเดี้ย\nกระดังงัว\nกระดังงา\nกระดาก\nกระด้าง\nกระดางลาง\nกระดาด\nกระดาดขาว\nกระดาน\nกระดานพน\nกระดาษ\nกระดำกระด่าง\nกระดิก\nกระดิ่ง\nกระดิ้ง\nกระดิบ\nกระดี่\nกระดี้กระเดียม\nกระดึง\nกระดืบ\nกระดุ\nกระดุกกระดิก\nกระดุ้งกระดิ้ง\nกระดุบ\nกระดุบกระดิบ\nกระดุม\nกระดูก\nกระเดก\nกระเด้ง\nกระเด็น\nกระเด้า\nกระเดาะ\nกระเดิด\nกระเดี้ย\nกระเดียด\nกระเดือก\nกระเดื่อง\nกระแด็ก\nกระแด้ง\nกระแด้แร่\nกระแด่ว\nกระแดะ\nกระโดก\nกระโดง\nกระโดด\nกระโดน\nกระได\nกระตรับ\nกระตราก\nกระตรุด\nกระตรุม\nกระต้วมกระเตี้ยม\nกระต้อ\nกระต่องกระแต่ง\nกระต๊อบ\nกระต้อยตีวิด\nกระตัก\nกระตั้ว\nกระต่าย\nกระติก\nกระติ๊ด\nกระติบ\nกระตือรือร้น\nกระตุก\nกระตุ้งกระติ้ง\nกระตุ่น\nกระตุ้น\nกระตูบ\nกระเตง\nกระเต็น\nกระเตอะ\nกระเตาะ\nกระเตาะกระแตะ\nกระเตื้อง\nกระแต\nกระแตแต้แว้ด\nกระโตกกระตาก\nกระโตน\nกระถด\nกระถอบ\nกระถั่ว\nกระถาง\nกระถิก\nกระถิน\nกระเถิบ\nกระโถน\nกระทก\nกระทง\nกระทบ\nกระทรวง\nกระทอก\nกระท้อน\nกระท่อนกระแท่น\nกระท่อม\nกระท้อมกระแท้ม\nกระทะ\nกระทั่ง\nกระทั้น\nกระทา\nกระทาย\nกระทาสี\nกระทาหอง\nกระทำ\nกระทิกกระทวย\nกระทิง\nกระทึง\nกระทืบ\nกระทุ\nกระทุง\nกระทุ้ง\nกระทุ่ม\nกระทู้\nกระเท่\nกระเทียบ\nกระเทียม\nกระเทือน\nกระเทื้อม\nกระแทก\nกระแท่น\nกระแทะ\nกระไทชาย\nกระน่อง\nกระนั้น\nกระนี้\nกระแนะกระแหน\nกระโน้น\nกระไน\nกระบก\nกระบม\nกระบวน\nกระบวย\nกระบวร\nกระบอก\nกระบอง\nกระบะ\nกระบัด\nกระบั้วกระเบี้ย\nกระบ่า\nกระบ้า\nกระบาก\nกระบาย\nกระบาล\nกระบิ\nกระบิ้ง\nกระบิด\nกระบิล\nกระบี่\nกระบือ\nกระบุง\nกระบุ่มกระบ่าม\nกระบู้กระบี้\nกระบูน\nกระบูร\nกระเบง\nกระเบญ\nกระเบ็ดกระบวน\nกระเบน\nกระเบา\nกระเบิก\nกระเบียด\nกระเบียน\nกระเบื้อง\nกระแบก\nกระแบะ\nกระโบม\nกระปมกระปำ\nกระปมกระเปา\nกระปรอก\nกระปรอกว่าว\nกระปรี้กระเปร่า\nกระปอก\nกระป้อกระแป้\nกระป่อง\nกระป๋อง\nกระปอดกระแปด\nกระป๋อหลอ\nกระปั้วกระเปี้ย\nกระป่ำ\nกระปุก\nกระปุ๊กลุก\nกระปุ่ม\nกระปุ่มกระป่ำ\nกระปุ่มกระปิ่ม\nกระเป๋า\nกระเปาะ\nกระโปก\nกระโปรง\nกระผม\nกระผลีกระผลาม\nกระผาน\nกระผีก\nกระพรวน\nกระพริ้ม\nกระพอก\nกระพอง\nกระพ้อม\nกระพัก\nกระพัง\nกระพังเหิร\nกระพังโหม\nกระพัด\nกระพัตร\nกระพัน\nกระพั่น\nกระพา\nกระพาก\nกระพี้\nกระพือ\nกระพุ้ง\nกระพุ่ม\nกระเพาะ\nกระเพิง\nกระเพื่อม\nกระแพ้ง\nกระฟัดกระเฟียด\nกระฟูมกระฟาย\nกระมล\nกระมอบ\nกระมอมกระแมม\nกระมัง\nกระมัน\nกระมิดกระเมี้ยน\nกระมุท\nกระเมาะ\nกระย่อง\nกระย่องกระแย่ง\nกระย่อน\nกระย่อม\nกระยา\nกระยาง\nกระยาจก\nกระยาหงัน\nกระยิก\nกระยิ้มกระย่อง\nกระยึกกระยือ\nกระยืดกระยาด\nกระเย้อกระแหย่ง\nกระรอก\nกระเรียน\nกระโรกน้ำข้าว\nกระโรกใหญ่\nกระไร\nกระลด\nกระลบ\nกระลอก\nกระลอม\nกระละหล่ำ\nกระลัด\nกระลับ\nกระลัมพร\nกระลา\nกระลำ\nกระลำพัก\nกระลำพุก\nกระลิง\nกระลี\nกระลุมพาง\nกระลุมพุก\nกระลุมพู\nกระลูน\nกระลู่น์\nกระเล็น\nกระเลียด\nกระเลือก\nกระโลง\nกระวน\nกระวัด\nกระวาด\nกระวาน\nกระวาย\nกระวิน\nกระวี\nกระวีกระวาด\nกระวูดกระวาด\nกระเวน\nกระเวยกระวาย\nกระแวน\nกระโวยกระวาย\nกระษัย\nกระษาปณ์\nกระสง\nกระสบ\nกระสม\nกระสรวล\nกระสร้อย\nกระสวน\nกระสวย\nกระสอบ\nกระสะ\nกระสัง\nกระสัน\nกระสับกระส่าย\nกระสา\nกระสานติ์\nกระสาบ\nกระสาย\nกระสือ\nกระสุงกระสิง\nกระสุน\nกระสูทธิ์\nกระสูบ\nกระเสด\nกระเส็นกระสาย\nกระเส่า\nกระเสาะกระแสะ\nกระเสียน\nกระเสียร\nกระเสือกกระสน\nกระแส\nกระแสง\nกระแสะ\nกระโสง\nกระไส\nกระหนก\nกระหนาก\nกระหนาบ\nกระหน่ำ\nกระหมวด\nกระหมอบ\nกระหม่อม\nกระหมั่ง\nกระหมิบ\nกระหมุดกระหมิด\nกระหมุบ\nกระหย่ง\nกระหย่อม\nกระหยัง\nกระหยับ\nกระหยิ่ม\nกระหรอด\nกระหริ่ง\nกระหวน\nกระหวัด\nกระหอง\nกระหัง\nกระหัด\nกระหาง\nกระหาย\nกระหึม\nกระหึ่ม\nกระหืดกระหอบ\nกระเห็น\nกระเหนียด\nกระเหม็ดกระเหมียด\nกระเหม็ดกระแหม่\nกระเหม่น\nกระเหม่า\nกระเหว่า\nกระเห่อ\nกระเหิม\nกระเหี้ยนกระหือรือ\nกระแห\nกระแหทอง\nกระแหนบ\nกระแหนะ\nกระแหมบ\nกระแหม่ว\nกระแหย่ง\nกระแหร่ม\nกระแหล่ง\nกระโห้\nกระโหนด\nกระโหม\nกระโหย\nกระโหย่ง\nกระอวล\nกระอ้อกระแอ้\nกระออดกระแอด\nกระออบ\nกระออม\nกระอ้อมกระแอ้ม\nกระอัก\nกระอักกระอ่วน\nกระอั้วแทงควาย\nกระอ้า\nกระอาน\nกระอิด\nกระอิดกระเอื้อน\nกระอึก\nกระอืด\nกระอุ\nกระอุก\nกระเอา\nกระเอิก\nกระเอิบ\nกระแอก\nกระแอบ\nกระแอม\nกระไอ\nกรัก\nกรักขี\nกรัง\nกรัชกาย\nกรัณฑ์\nกรัณย์\nกรัน\nกรับ\nกรัม\nกราก\nกราง\nกร่าง\nกราด\nกราดวง\nกราน\nกร้าน\nกราบ\nกราฟ\nกราม\nกราย\nกร่าย\nกราว\nกร้าว\nกรำ\nกร่ำ\nกริก\nกริ๊ก\nกริกกริว\nกริกกรี\nกริ่ง\nกริ๊ง\nกริงกริว\nกริ้งกริ้ว\nกริช\nกริณี\nกริน\nกรินทร์\nกรินี\nกริบ\nกริม\nกริ่ม\nกริยา\nกริยานุเคราะห์\nกริว\nกริ้ว\nกรี\nกรีฑา\nกรีด\nกรี๊ด\nกรีธา\nกรีษ\nกรีส\nกรึ๊บ\nกรุ\nกรุง\nกรุ้งกริ่ง\nกรุณ\nกรุณา\nกรุณาธิคุณ\nกรุ่น\nกรุบ\nกรุ่ม\nกรุ้มกริ่ม\nกรุย\nกรุยเกรียว\nกรู\nกรูด\nกรูม\nกเรณุ\nกเรนทร\nกเรนทร์\nกฤช\nกฤดาภินิหาร\nกฤตติกา\nกฤษฎา\nกฤษฎาธาร\nกฤษฎาภินิหาร\nกฤษฎีกา\nกฤษณา\nกล\nกลด\nกล่น\nกลบ\nกลม\nกลละ\nกลวง\nกล้วย\nกลศ\nกล้อ\nกลอก\nกลอง\nกล่อง\nกล้อง\nกล้องแกล้ง\nกลอน\nกล่อน\nกล้อน\nกล่อม\nกล้อมแกล้ม\nกลอย\nกลัก\nกลัด\nกลั่น\nกลั้น\nกลันทก์\nกลันทะ\nกลับ\nกลัมพร\nกลัมพัก\nกลัว\nกลั้ว\nกลา\nกล้า\nกลาก\nกลากลาด\nกลาง\nกลาด\nกลาบาต\nกลาป\nกล้าม\nกลาย\nกล้าย\nกลายกลอก\nกล่าว\nกลาโหม\nกล่ำ\nกล้ำ\nกลิ้ง\nกลิงค์\nกลิ่น\nกลี\nกลีบ\nกลึง\nกลึงค์\nกลืน\nกลุ่ม\nกลุ้ม\nกลูโคส\nกเลวระ\nกวด\nกวน\nกวม\nกวย\nกวยจั๊บ\nกวยจี๊\nก๋วยเตี๋ยว\nกวัก\nกวัด\nกวา\nกว่า\nกวาง\nกว่าง\nกว้าง\nกว่างโซ้ง\nกวางตุ้ง\nกวาด\nกว้าน\nกว๊าน\nกว้าว\nกวาวเครือ\nกวี\nกษณะ\nกษมา\nกษัตร\nกษัตรา\nกษัตริย์\nกษัตรี\nกษัตรีย์\nกษัย\nกษาปณ์\nกษิดิ\nกษีร\nกษีรธารา\nกษีระ\nกสานติ์\nกสิกร\nกสิกรรม\nกสิณ\nกหังปายา\nกหาปณะ\nกเฬวราก\nกอ\nก่อ\nก้อ\nก๊อ\nกอก\nก๊อก\nกอแก\nกอง\nก่อง\nก้อง\nกองกอย\nก๊อซ\nกอด\nก่อน\nก้อน\nกอบ\nกอบนาง\nก๊อบปี้\nกอปร\nก้อม\nกอมก้อ\nก่อมก้อ\nกอย\nก้อย\nก๋อย\nกอริลลา\nกอล์ฟ\nกอและ\nกอเอี๊ยะ\nกะ\nกะกัง\nกะง้องกะแง้ง\nกะจัง\nกะแจะ\nกะชะ\nกะชัง\nกะชามาศ\nกะชิง\nกะชึ่กกะชั่ก\nกะแช่\nกะซวก\nกะซ้าหอย\nกะซี่\nกะโซ่\nกะโซ้\nกะดก\nกะดง\nกะดวน\nกะดอก\nกะดะ\nกะดังบาย\nกะดัด\nกะด้าง\nกะดำกะด่าง\nกะดี\nกะดี่\nกะดุ้ง\nกะเด้\nกะเดก\nกะเดี๋ยว\nกะตรุด\nกะตอก\nกะต่อย\nกะตัก\nกะตั้ก\nกะตัง\nกะตังกะติ้ว\nกะต๊าก\nกะต้ำ\nกะติ๊กริก\nกะติงกะแตง\nกะตีบ\nกะตึงกะแตง\nกะตุ๊ก\nกะตุด\nกะตูก\nกะเตง\nกะโต๊ก\nกะโตงกะเตง\nกะโต้งโห่ง\nกะถัว\nกะทกรก\nกะทอ\nกะทัง\nกะทังหัน\nกะทัดรัด\nกะทันหัน\nกะทับ\nกะทิ\nกะทือ\nกะทุน\nกะเทย\nกะเทาะ\nกะแท้\nกะแท่ง\nกะแทน\nกะนวล\nกะนัด\nกะบ่อนกะแบ่น\nกะบัง\nกะบั้ง\nกะบิ้ง\nกะบิล\nกะบึงกะบอน\nกะบุด\nกะเบ้อ\nกะเบียน\nกะเบือ\nกะปริดกะปรอย\nกะปริบ\nกะปริบกะปรอย\nกะปลกกะเปลี้ย\nกะปวกกะเปียก\nกะปอม\nกะปอมขาง\nกะปะ\nกะป้ำกะเป๋อ\nกะปิ\nกะปู\nกะปูด\nกะปูดหลูด\nกะเปะ\nกะเปิ๊บกะป๊าบ\nกะเปียด\nกะแป้น\nกะแปะ\nกะโปรง\nกะโปโล\nกะผลุบกะโผล่\nกะเผ่น\nกะเผลก\nกะโผลกกะเผลก\nกะพง\nกะพรวดกะพราด\nกะพร่องกะแพร่ง\nกะพริบ\nกะพรุน\nกะพรูดกะพราด\nกะพล้อ\nกะพ้อ\nกะเพรา\nกะเพียด\nกะเม็ง\nกะร่องกะแร่ง\nกะระตะ\nกะระหนะ\nกะรัง\nกะรัต\nกะราง\nกะริง\nกะรุงกะรัง\nกะรุ่งกะริ่ง\nกะรุน\nกะเร\nกะเรกะร่อน\nกะเร่กะร่อน\nกะเร่อ\nกะเรี่ยกะราด\nกะโรกะเร\nกะลวย\nกะลอ\nกะล่อกะแล่\nกะลอจี๊\nกะล่อน\nกะล่อมกะแล่ม\nกะล่อยกะหลิบ\nกะละปังหา\nกะละมัง\nกะละแม\nกะละออม\nกะลังตังไก่\nกะลัน\nกะลันทา\nกะลา\nกะลาง\nกะลาสี\nกะลำพอ\nกะลิง\nกะลิงปลิง\nกะลิ้มกะเหลี่ย\nกะลิอ่อง\nกะลุมพี\nกะเล็ง\nกะเล่อกะล่า\nกะเลิด\nกะเลียว\nกะแล\nกะโล่\nกะโลง\nกะวอกกะแวก\nกะวะ\nกะส้มชื่น\nกะสัง\nกะส้าหอย\nกะหนอกะแหน\nกะหน็องกะแหน็ง\nกะหนะ\nกะหนุงกะหนิง\nกะหร่อง\nกะหรอด\nกะหร็อมกะแหร็ม\nกะหราน\nกะหรี่\nกะหรี่ปั๊บ\nกะหลาป๋า\nกะหล่ำ\nกะหลี่\nกะหลีกะหลอ\nกะหลุกกะหลิก\nกะหำ\nกะหำแพะ\nกะหือ\nกะหูด\nกะเหรี่ยง\nกะเหลาะเปาะ\nกะแหยก\nกะแหะ\nกะโหลก\nกะโหล้ง\nกะไหล่\nกะอวม\nกะออม\nกะอาน\nกะอาม\nกะอูบ\nกัก\nกั๊ก\nกักกรา\nกักการุ\nกักขฬะ\nกัง\nกั้ง\nกังก้า\nกังเกียง\nกังขา\nกังฉิน\nกังฟู\nกังวล\nกังวาน\nกังสดาล\nกังไส\nกังหัน\nกัจฉปะ\nกัจฉะ\nกัจฉา\nกัญ\nกัญจุก\nกัญจุการา\nกัญชา\nกัญญา\nกัฐ\nกัณฏกะ\nกัณฐกะ\nกัณฐชะ\nกัณฐัศ\nกัณฐัศว์\nกัณฐา\nกัณฐี\nกัณฑ์\nกัณณ์\nกัณหา\nกัด\nกัตติกมาส\nกัตติกา\nกัตติเกยา\nกัตรา\nกัทลี\nกัน\nกั่น\nกั้น\nกันเกรา\nกันไกร\nกันชิง\nกันเชอ\nกันดาร\nกันดาล\nกันได\nกันต์\nกันตัง\nกันไตร\nกันทร\nกันทรากร\nกันภิรมย์\nกันเมียง\nกันย์\nกันยา\nกันยายน\nกันลง\nกันลอง\nกันแสง\nกั้นหยั่น\nกับ\nกับแก้\nกัป\nกัปตัน\nกัปปาสิก\nกัปปิยภัณฑ์\nกัปปิยะ\nกัมปนาท\nกัมประโด\nกัมปี\nกัมพล\nกัมพุช\nกัมพู\nกัมพูชา\nกัมโพช\nกัมมัชวาต\nกัมมัฏฐาน\nกัมมันตภาพรังสี\nกัมมันตรังสี\nกัมมาร\nกัมลาศ\nกัยวิกัย\nกัลชาญ\nกัลบก\nกัลป์\nกัลปนา\nกัลปพฤกษ์\nกัลปังหา\nกัลปาวสาน\nกัลปิต\nกัลเม็ด\nกัลยา\nกัลยาณมิตร\nกัลยาณี\nกัลออม\nกัศยป\nกัษณ\nกา\nก๋า\nกาก\nกากบาท\nกากะทิง\nกากะเยีย\nกากี\nกาง\nก้าง\nกางเกง\nกางเขน\nก๊าซ\nกาซะลอง\nกาญจนา\nกาฐ\nกาด\nก๊าด\nกาน\nก่าน\nก้าน\nก๊าน\nกานดา\nกานต์\nกานน\nก้านพร้าว\nกานพลู\nกาน้า\nกาบ\nก้าบ\nกาบู\nกาพย์\nกาเฟอีน\nกาแฟ\nกาม\nก้าม\nกามารมณ์\nกามินี\nกาเมสุมิจฉาจาร\nกาย\nก่าย\nกาเยน\nการ\nการณ์\nการ์ด\nการ์ตูน\nการบูร\nการย์\nการวิก\nการเวก\nการะเกด\nการะบุหนิง\nการัณย์\nการันต์\nการางหัวขวาน\nการิตการก\nการิตวาจก\nการุญ\nการุณย์\nกาเรการ่อน\nกาล\nกาลกรรณี\nกาลกิณี\nกาลจักร\nกาลัญญุตา\nกาลัญญู\nกาลัด\nกาลานุกาล\nกาลิก\nกาลี\nกาแล\nกาแล็กซี\nกาแล็กโทส\nกาว\nก้าว\nกาววาว\nกาวาง\nกาแวน\nกาศิก\nกาษฐะ\nกาษา\nกาสร\nกาสะ\nกาสา\nกาสาร\nกาสาวะ\nกาสิโน\nกาหล\nกาหลง\nกาหลา\nกาเหว่า\nกาไหล่\nกาฬ\nกาฬาวก\nกาฮัง\nกำ\nก่ำ\nกำกวม\nกำกัด\nกำกับ\nก้ำกึ่ง\nกำกูน\nก้ำเกิน\nกำเกียง\nกำคูน\nกำจร\nกำจัด\nกำจาย\nกำชับ\nกำชำ\nกำซาบ\nกำซำ\nกำด้น\nกำดัด\nกำดาล\nกำเดา\nกำธร\nกำนล\nกำนัน\nกำนัล\nกำเนิด\nกำบัง\nก่ำบึ้ง\nกำเบ้อ\nกำปอ\nกำปั่น\nกำผลา\nกำพง\nกำพด\nกำพต\nกำพร้า\nกำพราก\nกำพวด\nกำพอง\nกำพืด\nกำพุด\nกำพู\nกำเพลิง\nกำแพง\nกำภู\nกำมลาศน์\nกำมเลศ\nกำมะถัน\nกำมะลอ\nกำมะหยี่\nกำมะหริด\nกำมังละการ\nกำมังวิลิต\nกำมัชพล\nกำยาน\nกำยำ\nกำรอ\nกำราบ\nกำราล\nกำเริบ\nกำไร\nกำลัง\nกำลุง\nกำเลา\nกำไล\nกำสรด\nกำสรวล\nกำหนด\nกำหนัด\nกำเหน็จ\nกำแหง\nกิก\nกิ๊ก\nกิ่ง\nกิ้งก่า\nกิ้งกือ\nกิ้งโครง\nกิจ\nกิจจะ\nกิจจา\nกิดาการ\nกิดาหยัน\nกิตติ\nกิตติมศักดิ์\nกิน\nกินนร\nกินปลี\nกินเปี้ยว\nกินริน\nกินรี\nกิ๊บ\nกิมตึ๋ง\nกิมิชาติ\nกิมิวิทยา\nกิโมโน\nกิโยตีน\nกิระ\nกิริณี\nกิรินท\nกิริเนศวร\nกิริยา\nกิเลน\nกิเลส\nกิโล\nกิโลมกะ\nกิ่ว\nกิ๋ว\nกี\nกี่\nกี้\nกี๊\nกี๋\nกีฏวิทยา\nกีด\nกีตาร์\nกีบ\nกีรติ\nกีฬา\nกึก\nกึง\nกึ่ง\nกึ๋น\nกุ\nกุก\nกุ๊ก\nกุกกุฏ\nกุกกุร\nกุกรรม\nกุ้ง\nกุงอน\nกุงาน\nกุโงก\nกุจี\nกุญแจ\nกุญชร\nกุฎ\nกุฎา\nกุฎี\nกุฎุมพี\nกุฏฐัง\nกุฏิ\nกุณฑ์\nกุณฑล\nกุณฑี\nกุณโฑ\nกุณาล\nกุณี\nกุด\nกุดัง\nกุดั่น\nกุดา\nกุทัณฑ์\nกุน\nกุ๊น\nกุนเชียง\nกุนที\nกุโนกามอ\nกุบ\nกุบกับ\nกุม\nกุ่ม\nกุมฝอย\nกุมภ์\nกุมภนิยา\nกุมภัณฑ์\nกุมภา\nกุมภิล\nกุมภีล์\nกุมเหง\nกุมาร\nกุมารา\nกุมารี\nกุมุท\nกุย\nกุ๊ย\nกุ๋ย\nกุยช่าย\nกุยเฮง\nกุรระ\nกุรุพินท์\nกุเรา\nกุล\nกุลา\nกุลาหล\nกุลี\nกุลีกุจอ\nกุเลา\nกุแล\nกุเวร\nกุศราช\nกุศล\nกุศโลบาย\nกุสุม\nกุสุมภ์\nกุสุมา\nกุสุมาลย์\nกุสุมิตลดาเวลลิตา\nกุหนี\nกุหนุง\nกุหร่า\nกุหล่า\nกุหลาบ\nกุแหละ\nกู\nกู่\nกู้\nกู๊ก\nกูฏ\nกูฏา\nกูณฑ์\nกูด\nกูบ\nกูปรี\nกูรมะ\nกูรมาวตาร\nเก\nเก้\nเก๊\nเก๋\nเกก\nเก๊ก\nเกกมะเหรก\nเก๊กฮวย\nเก้กัง\nเก็ง\nเก่ง\nเก้ง\nเก๋ง\nเกงกอย\nเก่งกาจ\nเกงเขง\nเก๋งเคง\nเก็จ\nเกจิอาจารย์\nเกชา\nเกณฑ์\nเกด\nเก็ด\nเกตุ\nเกน\nเก็บ\nเกม\nเกย\nเกยูร\nเกรง\nเกร็ง\nเกร็ด\nเกรน\nเกร่อ\nเกรอะ\nเกราะ\nเกริก\nเกริน\nเกริ่น\nเกรียก\nเกรียง\nเกรียด\nเกรียน\nเกรียบ\nเกรียม\nเกรียว\nเกรี้ยว\nเกเร\nเกล็ด\nเกลศ\nเกลอ\nเกลา\nเกล้า\nเกลาะ\nเกลี่ย\nเกลี้ย\nเกลียง\nเกลี้ยง\nเกลียด\nเกลียว\nเกลือ\nเกลื้อ\nเกลือก\nเกลื่อน\nเกลื้อน\nเกวัฏ\nเกวียน\nเกศ\nเกศว\nเกศวะ\nเกศา\nเกศินี\nเกศี\nเกษตร\nเกษม\nเกษียณ\nเกษียน\nเกษียร\nเกส\nเกสร\nเกสรี\nเกสา\nเกสี\nเก้อ\nเกอิชา\nเกะ\nเกะกะ\nเกา\nเก่า\nเก้า\nเก๋า\nเกาต์\nเกาทัณฑ์\nเกาบิล\nเกาลัด\nเกาลิน\nเกาไศย\nเกาหลี\nเกาเหลา\nเกาเหลียง\nเก้าอี้\nเกาะ\nเกิ้ง\nเกิด\nเกิน\nเกิบ\nเกีย\nเกียกกาย\nเกียง\nเกี่ยง\nเกี๋ยง\nเกียจ\nเกียด\nเกียน\nเกี้ยมไฉ่\nเกี้ยมอี๋\nเกียร์\nเกียรติ\nเกียรติ์\nเกี่ยว\nเกี้ยว\nเกี๊ยว\nเกี๊ยะ\nเกื้อ\nเกือก\nเกื้อกูล\nเกือบ\nแก\nแก่\nแก้\nแกง\nแก่ง\nแก้ง\nแก๊ง\nแกงได\nแกงแนง\nแกโดลิเนียม\nแกน\nแก่น\nแก๊ป\nแกม\nแก้ม\nแกมมา\nแกรก\nแกร่ง\nแกร็น\nแกรนิต\nแกรไฟต์\nแกร่ว\nแกระ\nแกล\nแกล้ง\nแกลน\nแกลบ\nแกล้ม\nแกลลอน\nแกลเลียม\nแกล้ว\nแกละ\nแกแล\nแกว\nแก้ว\nแกว่ง\nแก๊ส\nแกะ\nโก\nโก่\nโก้\nโก๋\nโกก\nโกกนุท\nโกกิลา\nโกโก้\nโกง\nโก่ง\nโกงกาง\nโก้งเก้ง\nโกงโก้\nโก้งโค้ง\nโกเชาว์\nโกญจนาท\nโกญจา\nโกฏิ\nโกฐ\nโกฐาส\nโกณะ\nโกดัง\nโกทัณฑ์\nโกน\nโก่น\nโก๋น\nโกมล\nโกมุท\nโกเมน\nโกเมศ\nโกย\nโกรก\nโกรกกราก\nโกรง\nโกร่ง\nโกร่งกร่าง\nโกรงเกรง\nโกร๋งเกร๋ง\nโกรญจ\nโกรต๋น\nโกรธ\nโกรธา\nโกร๋น\nโกรม\nโกรย\nโกรศ\nโกโรโกเต\nโกโรโกโรก\nโกโรโกโส\nโกลน\nโกลาหล\nโกไล\nโกวิท\nโกศ\nโกศล\nโกษม\nโกสน\nโกสัช\nโกสินทร์\nโกสีย์\nโกสุม\nโกไสย\nโกหก\nใกล้\nไก\nไก่\nไก๊\nไก๋\nไก่กอม\nไกพัล\nไกร\nไกรพ\nไกรลาส\nไกรศร\nไกรศรี\nไกรสร\nไกรสรี\nไกรสิทธิ\nไกล\nไกล่\nไกลาส\nไกว\nไกวัล\nขงจื๊อ\nขจร\nขจรจบ\nขจัด\nขจ่าง\nขจาย\nขจาว\nขจิต\nขจี\nขจุย\nขเจา\nขณะ\nขด\nขน\nข้น\nขนง\nขนด\nขนบ\nขนม\nขนอง\nขนอน\nขนอบ\nขนัด\nขนัน\nขนาก\nขนาง\nขนาด\nขนาน\nขนาบ\nขนาย\nขนำ\nขนิษฐ\nขนิษฐา\nขนุน\nขนุนนก\nขบ\nขบถ\nขบวน\nขบวร\nขม\nข่ม\nขมงโกรย\nขมวด\nขมวน\nขมอง\nขม่อม\nขมัง\nขมับ\nขมา\nขม้ำ\nขมิ้น\nขมิบ\nขมีขมัน\nขมึง\nขมึงทึง\nขมุ\nขมุกขมัว\nขมุบ\nขโมย\nขยด\nขยม\nขย่ม\nขยอก\nขยอง\nขย่อน\nขย้อน\nขยะ\nขยัก\nขยัน\nขยั้น\nขยับ\nขยาด\nขยาย\nขยำ\nขย้ำ\nขยิก\nขยิบ\nขยิ่ม\nขยี้\nขยุกขยิก\nขยุกขยุย\nขยุบ\nขยุบขยิบ\nขยุม\nขยุ้ม\nขยุย\nขรม\nขรรค์\nขรัว\nขริบ\nขรี\nขรึม\nขรุขระ\nขลบ\nขล้อ\nขลัง\nขลับ\nขลาด\nขลาย\nขลิบ\nขลุก\nขลุกขลัก\nขลุกขลิก\nขลุบ\nขลุม\nขลุ่ย\nขลู\nขลู่\nขวง\nข่วง\nขวด\nข่วน\nขวนขวาย\nขวบ\nขวย\nขวักไขว่\nขวัญ\nขวั้น\nขวับ\nขวับเขวียว\nขวา\nขวาก\nขวาง\nขว้าง\nขวาด\nขวาน\nขวายขวน\nขวาว\nขว้าว\nขวิด\nขอ\nข่อ\nข้อ\nของ\nข้อง\nขอด\nขอน\nข้อน\nขอบ\nขอม\nข่อย\nข้อย\nข่อยหยอง\nขะแจะ\nขะเน็ด\nขะมอมขะแมม\nขะมักเขม้น\nขะมุกขะมอม\nขะยิก\nขะยุก\nขะเย้อแขย่ง\nขัค\nขัง\nขังขอก\nขัช\nขัณฑสกร\nขัณฑสีมา\nขัด\nขัดมอน\nขัตติยมานะ\nขัน\nขั้น\nขันติ\nขันตี\nขันโตก\nขันที\nขันธ์\nขันธาวาร\nขับ\nขัว\nขั้ว\nขา\nข่า\nข้า\nขาก\nขาก๊วย\nขาง\nข่าง\nข้าง\nขาณุ\nขาด\nขาทนียะ\nขาน\nขาบ\nข้าพเจ้า\nขาม\nข่าม\nข้าม\nขาย\nข่าย\nขาล\nขาว\nข่าว\nข้าว\nข้าวอังกุลี\nขำ\nขิก\nขิง\nขิงแกลง\nขิงแครง\nขิด\nขิปสัทโท\nขิม\nขี่\nขี้\nขี้เข็บ\nขีณาสพ\nขีด\nขี้ตังนี\nขีปนาวุธ\nขี้ยอก\nขีระ\nขึง\nขึ้ง\nขึ้น\nขึ้นฉ่าย\nขืน\nขื่น\nขื่อ\nขุก\nขุด\nขุน\nขุ่น\nขุนเพ็ด\nขุม\nขุย\nขู่\nขูด\nเข\nเข้\nเขก\nเข็ง\nเข่ง\nเขจร\nเข็ญ\nเข็ด\nเขดา\nเขต\nเขน\nเข็น\nเข่น\nเขนง\nเขน็ด\nเขนย\nเขบ็จขบวน\nเขบ็ต\nเขม\nเข็ม\nเข้ม\nเข้มขาบ\nเขม็ง\nเขม็ดแขม่\nเขม่น\nเขม้น\nเขม้นขะมัก\nเขมร\nเขมา\nเขม่า\nเขมือบ\nเขย\nเขยก\nเขย่ง\nเขย้อแขย่ง\nเขย่า\nเขยิน\nเขยิบ\nเขยื้อน\nเขรอะ\nเขลง\nเขลอะ\nเขละ\nเขลา\nเขลาะ\nเขว\nเขษม\nเขฬะ\nเขะขะ\nเขา\nเข่า\nเข้า\nเขิง\nเขิน\nเขิบ\nเขี่ย\nเขียง\nเขียด\nเขียดตะปาด\nเขียน\nเขี่ยน\nเขียม\nเขียว\nเขี้ยว\nเขียะ\nเขือ\nเขือง\nเขื่อง\nเขื่อน\nเขือม\nแข\nแข้\nแขก\nแข็ง\nแข่ง\nแข้ง\nแขน\nแข่น\nแข้น\nแขนง\nแขม\nแขม็บ\nแขม่ว\nแขยง\nแขย่ง\nแขวก\nแขวง\nแขวน\nแขวะ\nโข\nโขก\nโขง\nโข่ง\nโขด\nโขดง\nโขน\nโขนง\nโขม\nโขมง\nโขมด\nโขยก\nโขยง\nโขย่ง\nโขยด\nโขลก\nโขลง\nโขลน\nโขษม\nไข\nไข่\nไข้\nไขว่\nไขว้\nคคนะ\nคคนัมพร\nคคนางค์\nคคนานต์\nคง\nคงคา\nคงไคย\nคช\nคชาชาติ\nคชาชีพ\nคชาธาร\nคชาภรณ์\nคณนา\nคณบดี\nคณะ\nคณาจารย์\nคณาธิการ\nคณาธิปไตย\nคณานับ\nคณิกา\nคณิต\nคเณศ\nคด\nคดี\nคติ\nคทา\nคน\nค้น\nคนทา\nคนทิสอ\nคนที\nคนโท\nคนธ์\nคันธ์\nคนธรรพ์\nคเนจร\nคบ\nคม\nคมน์\nคมนาการ\nคมนาคม\nคมิกภัต\nครก\nครบ\nครรชิต\nครรภ\nครรภ์\nครรลอง\nครรโลง\nครรไล\nครวญ\nครวี\nครหา\nครอก\nครอง\nครองแครง\nคร่อเงาะ\nคร่อเทียน\nครอบ\nคร่อม\nคระเมิม\nคระแลง\nคระไล\nคระแวง\nคระหน\nคระหวน\nคระหาย\nคระโหย\nครั่ง\nครั้ง\nครัดเคร่ง\nครัน\nครั่น\nครั้น\nครับ\nครัว\nครา\nคร่า\nคราก\nคราง\nคราญ\nคราด\nคร้าน\nคราบ\nคราม\nคร้าม\nครามครัน\nคราว\nคร่าว\nคราส\nครำ\nคร่ำ\nคร่ำเคร่ง\nคริปทอน\nคริสต์\nครีบ\nครีม\nครีษมายัน\nครึ\nครึกครื้น\nครึกโครม\nครึ่ง\nครึ่ด\nครึน\nครึ้ม\nครืด\nครืน\nครื้น\nครืนครั่น\nครื้นครั่น\nครื้นครึก\nครื้นเครง\nครือ\nครุ\nครุคระ\nครุฑ\nครุ่น\nครุมเครือ\nครุย\nครุวนา\nครู\nครู่\nครูด\nคฤโฆษ\nคฤนถ์\nคฤหบดี\nคฤหัสถ์\nคฤหาสน์\nคลวง\nคลอ\nคล้อ\nคลอก\nคลอง\nคล่อง\nคล้อง\nคลอด\nคลอน\nคล้อย\nคลอรีน\nคลอโรฟอร์ม\nคลอโรฟีลล์\nคละ\nคละคลุ้ง\nคลัก\nคลั่ก\nคลัง\nคลั่ง\nคลัตช์\nคลับคล้าย\nคลับคลา\nคลา\nคล้า\nคลางแคลง\nคลาด\nคลาน\nคลาย\nคล้าย\nคล้ายคลึง\nคล่าว\nคลำ\nคล่ำ\nคล้ำ\nคลิ้งโคลง\nคลิด\nคลินิก\nคลี\nคลี่\nคลึง\nคลื่น\nคลุก\nคลุ้ง\nคลุบ\nคลุม\nคลุ่ม\nคลุ้ม\nควง\nควณ\nควน\nควบ\nควย\nควร\nควัก\nควั่ก\nควั่งคว้าง\nควัน\nควั่น\nคว้า\nควาก\nคว้าง\nควาญ\nควาน\nคว้าน\nความ\nควาย\nคว่าว\nคว่ำ\nควินิน\nควิวคว่าง\nคหกรรม\nคหกรรมศาสตร์\nคหบดี\nคหัฐ\nคอ\nค้อ\nคอก\nค็อกคัส\nค็อกเทล\nคอเคซอยด์\nค่องอ้อย\nคอด\nคอแดง\nคอน\nค่อน\nค้อน\nคอนกรีต\nคอนเดนเซอร์\nคอนแวนต์\nคอนเสิร์ต\nคอม\nค่อม\nค้อม\nคอมพิวเตอร์\nคอมมานโด\nคอมมิวนิสต์\nคอย\nค่อย\nค้อย\nคอยล์\nคอร์ด\nคอแลน\nคอสติกโซดา\nคะ\nค่ะ\nคะไขว่\nคะค้อย\nคะคาน\nคะนน\nคะนอง\nคะน้า\nคะนึง\nคะเน\nคะเนงร้าย\nคะเน็ด\nคะแนน\nคะมำ\nคะยั้นคะยอ\nคะเยอ\nคัก\nคั่ก\nคัคนะ\nคัคนัมพร\nคัคนางค์\nคัคนานต์\nคั่ง\nคังไคย\nคัจฉ\nคัณฑมาลา\nคัณฑสูตร\nคัด\nคัดเค้า\nคัดมอน\nคัดเม็ง\nคัทลียา\nคัน\nคั่น\nคั้น\nคันถรจนาจารย์\nคันธกุฎี\nคันธมาทน์\nคันธารราษฎร์\nคับ\nคับค้อน\nคับคา\nคับแค\nคัพภ์\nคัมภีร์\nคัมภีรภาพ\nคัล\nคั่ว\nคา\nค่า\nค้า\nค่าคบ\nคาง\nค่าง\nค้าง\nคางคก\nค้างคาว\nคาด\nคาถา\nคาทอลิก\nคาน\nค้าน\nคาบ\nคาพยุต\nคาม\nคามวาสี\nคามณีย์\nคามภีร์\nคาย\nค่าย\nคาร์บอน\nคาร์บอเนต\nคาร์บอลิก\nคาร์บูเรเตอร์\nคาร์โบรันดัม\nคาร์โบไฮเดรต\nคารม\nคารวะ\nคาราเต้\nคาราวาน\nคาว\nค่าว\nค้าว\nคาวตอง\nคาวี\nคาวุต\nคาส\nคำ\nค่ำ\nค้ำ\nคำนวณ\nคำนวร\nคำนับ\nคำนัล\nคำนึง\nคำนูณ\nคำฝอย\nคำเพลิง\nคำรน\nคำรบ\nคำราม\nคำแสด\nคำแหง\nคำโอง\nคิก\nคิง\nคิด\nคิมหันต์\nคิรี\nคิลาน\nคิลานะ\nคิว\nคิ้ว\nคี่\nคีต\nคีบ\nคีม\nคีรี\nคีรีบูน\nคึก\nคึ่ก\nคึกคัก\nคืน\nคืบ\nคือ\nคุ\nคุก\nคุกกี้\nคุกคาม\nคุกพาทย์\nคุ้ง\nคุณ\nคุด\nคุดทะราด\nคุต\nคุตติ\nคุ่น\nคุ้น\nคุป\nคุปต์\nคุปติ\nคุม\nคุ่ม\nคุ้ม\nคุย\nคุ้ย\nคุยหฐาน\nคุยหประเทศ\nคุรุ\nคุลา\nคุลิก่า\nคุลีการ\nคุหา\nคู\nคู่\nคู้\nคูณ\nคูถ\nคูน\nคูปอง\nคูเรียม\nคูหา\nเค้ก\nเค้เก้\nเค้ง\nเคณฑะ\nเคด\nเค็ด\nเคน\nเค้น\nเคเบิล\nเค็ม\nเคมี\nเคย\nเครง\nเคร่ง\nเครงครา\nเครงครำ\nเครดิต\nเครน\nเครา\nเคร่า\nเคราหณี\nเคราะห์\nเครียด\nเครียว\nเครือ\nเครื่อง\nเคล้ง\nเคล็ด\nเคล้น\nเคล้า\nเคล่าคล่อง\nเคลิบเคลิ้ม\nเคลิ้ม\nเคลีย\nเคลื่อน\nเคลือบ\nเคว้ง\nเคหะ\nเคหา\nเคอะ\nเค้า\nเคาน์เตอร์\nเคารพ\nเคาะ\nเคาะแคะ\nเคียง\nเคียด\nเคียน\nเคียม\nเคี่ยม\nเคียร\nเคียว\nเคี่ยว\nเคี้ยว\nเคือง\nแค\nแค่\nแค้\nแคแล\nแคดเมียม\nแค็ตตาล็อก\nแคแตร\nแคโทด\nแคน\nแค่น\nแค้น\nแคบ\nแคบหมู\nแคปซูล\nแคม\nแคร่\nแครก\nแครง\nแคระ\nแคลคูลัส\nแคลง\nแคลเซียม\nแคลน\nแคล้ว\nแคล่วคล่อง\nแคลอรี\nแคลิฟอร์เนียม\nแคว\nแควก\nแคว้น\nแคแสด\nแคะ\nโค\nโคก\nโคเคน\nโค่ง\nโค้ง\nโคจร\nโคเซแคนต์\nโคไซน์\nโคตร\nโคแทนเจนต์\nโคธา\nโคน\nโค่น\nโคบอลต์\nโคปผกะ\nโคม\nโคม่า\nโครก\nโครกคราก\nโครง\nโคร่ง\nโคร่งคร่าง\nโครม\nโครเมียม\nโครโมโซม\nโคราช\nโครำ\nโคล\nโคลง\nโคลน\nโควตา\nโคออร์ดิเนต\nใคร\nใคร่\nใคร่ครวญ\nไค\nไค้\nไคร้\nไคร้เครือ\nไคล\nไคล้\nฆนะ\nฆราวาส\nฆ้อง\nฆ่า\nฆาต\nฆาน\nฆานินทรีย์\nเฆี่ยน\nโฆรวิส\nโฆษก\nโฆษณา\nโฆษะ\nโฆษิต\nงก\nงง\nงด\nงดงาม\nงบ\nงม\nงวง\nง่วง\nงวด\nง่วน\nง้วน\nงวยงง\nงอ\nง้อ\nงอก\nงอกแงก\nง่อกแง่ก\nง่อง\nง่องแง่ง\nงอแง\nงอด\nงอดแงด\nงอน\nง่อน\nง่อนแง่น\nงอนหง่อ\nงอบ\nงอม\nง้อม\nงอย\nง่อย\nงัก\nงั่ก\nงั่ง\nงัด\nงัน\nงันงก\nงับ\nงัว\nงั่ว\nงัวเงีย\nงา\nง่า\nง้าง\nงาน\nง่าน\nงาบ\nงาม\nง่าม\nงาย\nง่าย\nง้าว\nงำ\nง่ำ\nง้ำ\nงิ้ว\nงี่เง่า\nงีบ\nงึก\nงึน\nงึม\nงุด\nงุนงง\nงุ่นง่าน\nงุบ\nงุบงิบ\nงุ้ม\nงุ่มง่าม\nงุย\nงู\nงูบ\nงูสวัด\nเงก\nเงย\nเงอะ\nเงอะงะ\nเงา\nเง่า\nเง้า\nเงาะ\nเงิน\nเงี่ยง\nเงี่ยน\nเงียบ\nเงี้ยว\nเงี่ยหู\nเงื้อ\nเงือก\nเงื่อง\nเงือด\nเงื่อน\nเงือบ\nเงื้อม\nแง\nแง่\nแง่ง\nแง่น\nแง้ม\nแงะ\nโง\nโง่\nโงก\nโงกเงก\nโงง\nโง่ง\nโง้ง\nโงงเงง\nโง่งเง่ง\nโงเง\nโงน\nโงนเงน\nไง้\nจก\nจง\nจ่ง\nจงกรม\nจงกล\nจงกลนี\nจงโคร่ง\nโจงโคร่ง\nจงอร\nจงอาง\nจด\nจดุรงค์\nจตุปัจจัย\nจตุลังคบาท\nจตุโลกบาล\nจตุสดมภ์\nจตุตถ\nจตุตถี\nจตุร\nจตุรงค์\nจตุรพักตร์\nจตุรพิธ\nจตุรพิธพร\nจน\nจบ\nจม\nจ่ม\nจมร\nจมรี\nจมูก\nจยุติ\nจร\nจรณะ\nจรด\nจรรจา\nจรรโจษ\nจรรม\nจรรยา\nจรรโลง\nจรลี\nจรวจ\nจรวด\nจรส\nจรอก\nจระเข้\nจระนำ\nจระบี\nจรัล\nจรัส\nจราจร\nจราญ\nจริก\nจริง\nจริต\nจริม\nจริยธรรม\nจริยวัตร\nจริยาวัตร\nจริยศาสตร์\nจริยศึกษา\nจริยา\nจรุง\nจรูง\nจรูญ\nจเร\nจล\nจลนพลศาสตร์\nจลนศาสตร์\nจลนี\nจลาจล\nจวก\nจ๊วก\nจวง\nจ้วง\nจ๋วง\nจวด\nจวน\nจวบ\nจวัก\nจอ\nจ่อ\nจ้อ\nจ๋อ\nจอก\nจ้อก\nจ๊อก\nจ้อกแจ้ก\nจอง\nจ้อง\nจ๋อง\nจ้องเต\nจองเปรียง\nจ้องหน่อง\nจองหอง\nจอแจ\nจ๋อแจ๋\nจอด\nจอน\nจ้อน\nจอนจ่อ\nจอบ\nจอม\nจ่อม\nจอมสุรางค์\nจ่อย\nจ้อย\nจ๋อย\nจอแส\nจะ\nจ้ะ\nจ๊ะ\nจ๋ะ\nจะกละ\nจะกลาม\nจะกูด\nจะขาบ\nจะเข้\nจะเข็บ\nจะงอย\nจะจะ\nจ๊ะจ๋า\nจะแจ้ง\nจะแจ่ม\nจะละเม็ด\nจะละหวั่น\nจัก\nจั้ก\nจักกาย\nจั๊กกิ้ม\nจักขุ\nจักจั่น\nจักจี้\nจั๊กจี้\nจั๊กเดียม\nจักร\nจักรพาก\nจักรวาก\nจักริน\nจักรี\nจั๊กเล้อ\nจักษุ\nจักแหล่น\nจัง\nจั้ง\nจั๋ง\nจังกวด\nจังกอบ\nจังก้า\nจังกูด\nจังโกฏก์\nจังงัง\nจั้งมั่ง\nจังไร\nจังหนับ\nจังหรีด\nจังหวะ\nจังหวัด\nจังหัน\nจัญไร\nจัณฑ์\nจัณฑาล\nจัด\nจัตตาฬีสะ\nจัตวา\nจัตุ\nจัตุรงค์\nจัตุรัส\nจัตุลังคบาท\nจัตุโลกบาล\nจัตุสดมภ์\nจัน\nจั่น\nจันโจษ\nจั่นดิน\nจันท์\nจันทน์\nจันทร์\nจันทรคติ\nจันทรคราส\nจันทรุปราคา\nจันทรเม็ด\nจันทวาร\nจันทัน\nจันอับ\nจับ\nจับกัง\nจับฉ่าย\nจับเดิม\nจับปิ้ง\nจับยี่กี\nจัมบก\nจัมปกะ\nจัมปา\nจัมมะ\nจัว\nจั่ว\nจั๊วะ\nจา\nจ่า\nจ้า\nจ๋า\nจาก\nจากพาก\nจาคะ\nจาคี\nจาง\nจ่าง\nจ้าง\nจางปาง\nจางวาง\nจาด\nจาตุรงค์\nจาตุรนต์\nจาตุรันต์\nจาน\nจ้าน\nจาบ\nจาบัล\nจาบัลย์\nจาป\nจาม\nจ่ามงกุฎ\nจามจุรี\nจามร\nจามรี\nจามีกร\nจ่าย\nจาร\nจ่ารง\nจารวาก\nจาระไน\nจาระบี\nจาริก\nจารึก\nจารี\nจารีต\nจารุ\nจ้าละหวั่น\nจาว\nจ้าว\nจ่าหวัก\nจำ\nจ้ำ\nจำกัด\nจำงาย\nจ้ำจี้\nจำเจ\nจำเดิม\nจำทวย\nจำนง\nจำนน\nจำนรรจ์\nจำนรรจา\nจำนวน\nจำนอง\nจำนัล\nจำนำ\nจำเนียน\nจำเนียม\nจำเนียร\nจำแนก\nจำบ่ม\nจำบัง\nจ้ำเบ้า\nจำปา\nจำปาดะ\nจำปี\nจำปูน\nจำพวก\nจำเพาะ\nจ้ำม่ำ\nจำรัส\nจำราญ\nจำรูญ\nจำเริญ\nจำเรียง\nจำลอง\nจำเลย\nจำเลาะ\nจำแลง\nจำแล่น\nจำหนับ\nจ๋ำหนับ\nจำหน่าย\nจำหระ\nจำหล่อ\nจำหลัก\nจำเหียง\nจำอวด\nจิ\nจิก\nจิ้งโกร่ง\nจิ้งจก\nจิงจ้อ\nจิ้งจอก\nจิงจัง\nจิ้งจัง\nจิงโจ้\nจิ้งหรีด\nจิ้งเหลน\nจิต\nจิตกาธาน\nจิตต์\nจิตร\nจิตรจุล\nจิตระ\nจิตรา\nจินเจา\nจินดา\nจินดาหนา\nจินดาหรา\nจินต์\nจิบ\nจิปาถะ\nจิ่ม\nจิ้ม\nจิ้มก้อง\nจิ้มลิ้ม\nจิรกาล\nจิ๋ว\nจี\nจี่\nจี้\nจี๋\nจี๋จ้อ\nจีแจ๊บ\nจี๊ด\nจีน\nจีนแส\nจีบ\nจีโบ\nจีม\nจีวร\nจึง\nจึ่ง\nจึ้ง\nจืด\nจุ\nจุก\nจุ๊กกรู๊\nจุกจิก\nจุกชี\nจุกผาม\nจุกโรหินี\nจุ่ง\nจุ๋งจิ๋ง\nจุฑา\nจุณ\nจุณณียบท\nจุด\nจุติ\nจุตูปปาตญาณ\nจุทส\nจุน\nจุ่น\nจุ้น\nจุนจู๋\nจุ้นจู๊\nจุนทการ\nจุนสี\nจุบ\nจุ๊บ\nจุบจิบ\nจุ๊บแจง\nจุ่ม\nจุ้ม\nจุ๋มจิ๋ม\nจุมพฏ\nจุมพรวด\nจุมพล\nจุมพิต\nจุมโพล่\nจุ้ย\nจุรณ\nจูรณ\nจุรี\nจุไร\nจุล\nจุลจอมเกล้า\nจุลวงศ์\nจุฬา\nจุฬาราชมนตรี\nจุฬาลัมพา\nจุฬาลำพา\nจู\nจู่\nจู้\nจู๋\nจูง\nจู้จี้\nจู๋จี๋\nจู๊ด\nจูบ\nเจ\nเจ๊ก\nเจ่ง\nเจ้ง\nเจ๊ง\nเจ๋ง\nเจ็ด\nเจ็ดตะคลี\nเจดีย์\nเจดียสถาน\nเจต\nเจตนา\nเจตพังคี\nเจตมูลเพลิง\nเจตสิก\nเจโตวิมุติ\nเจน\nเจ็บ\nเจรจา\nเจริญ\nเจริด\nเจรียง\nเจลียง\nเจว็ด\nเจษฎา\nเจ๊สัว\nเจอ\nเจ่อ\nเจ๋อ\nเจ๋อเจ๊อะ\nเจอร์เมเนียม\nเจอะ\nเจา\nเจ่า\nเจ้า\nเจ๊า\nเจาะ\nเจิ่ง\nเจิด\nเจิ่น\nเจิม\nเจีย\nเจียง\nเจียด\nเจียน\nเจี๋ยน\nเจี๊ยบ\nเจียม\nเจี๋ยมเจี้ยม\nเจียร\nเจียระไน\nเจียระบาด\nเจียว\nเจี๊ยวจ๊าว\nเจือ\nเจื่อน\nเจื้อย\nเจือสม\nแจ\nแจ้\nแจ๋\nแจก\nแจกัน\nแจง\nแจ่ง\nแจ้ง\nแจงลอน\nแจ๊ด\nแจ๊ดแจ๋\nแจตร\nแจ้น\nแจบ\nแจ่ม\nแจรง\nแจว\nแจ่ว\nแจ้ว\nแจ๋ว\nแจะ\nโจก\nโจ๊ก\nโจง\nโจ่งครึ่ม\nโจ๋งครึ่ม\nโจ่งครุ่ม\nโจ๋งเจ๋ง\nโจ่งแจ้ง\nโจท\nโจทก์\nโจทนา\nโจทย์\nโจน\nโจม\nโจร\nโจล\nโจษ\nโจษจัน\nใจ\nไจ\nไจ้\nฉก\nฉกรรจ์\nฉกษัตริย์\nฉกาจ\nฉกามาพจร\nฉกามาวจร\nฉง\nฉงน\nฉงาย\nฉทึง\nฉนวน\nฉนัง\nฉนาก\nฉนำ\nฉบัง\nฉบัด\nฉบับ\nฉบำ\nฉม\nฉมบ\nฉมวก\nฉมวย\nฉม่อง\nฉมัง\nฉมัน\nฉมา\nฉมำ\nฉล\nฉลวย\nฉลอง\nฉลอม\nฉลัก\nฉลับ\nฉลาก\nฉลาง\nฉลาด\nฉลาม\nฉลาย\nฉลิว\nฉลีก\nฉลุ\nฉลู\nฉวย\nฉวะ\nฉวัดเฉวียน\nฉวาง\nฉวี\nฉศก\nฉ้อ\nฉอก\nฉ่อง\nฉอด\nฉ่อย\nฉอเลาะ\nฉะ\nฉะฉาด\nฉะฉาน\nฉะฉ่ำ\nฉะฉี่\nฉะเฉื่อย\nฉะนั้น\nฉะนี้\nฉะอ้อน\nฉักกะ\nฉัฐ\nฉัด\nฉัตร\nฉัททันต์\nฉัน\nฉันท\nฉันท์\nฉันทะ\nฉันทา\nฉันทาคติ\nฉันทานุมัติ\nฉับ\nฉัพพรรณรังสี\nฉัยยา\nฉ่า\nฉาก\nฉาง\nฉ่าง\nฉ่าฉาว\nฉาด\nฉาดฉาน\nฉาตกภัย\nฉาน\nฉาบ\nฉาบฉวย\nฉาย\nฉายา\nฉาว\nฉ่ำ\nฉำฉา\nฉำแฉะ\nฉิ่ง\nฉิน\nฉินท์\nฉินทฤกษ์\nฉิบ\nฉิมพลี\nฉิว\nฉี่\nฉีก\nฉีด\nฉุ\nฉุก\nฉุด\nฉุน\nฉุป\nฉุป\nฉุย\nฉุยฉาย\nฉู่\nฉู่ฉี่\nฉูด\nฉูดฉาด\nเฉ\nเฉก\nเฉโก\nเฉ่ง\nเฉด\nเฉท\nเฉนียน\nเฉพาะ\nเฉย\nเฉลย\nเฉลว\nเฉลา\nเฉลิม\nเฉลี่ย\nเฉลียง\nเฉลี่ยง\nเฉลียบ\nเฉลียว\nเฉวียง\nเฉวียน\nเฉอะแฉะ\nเฉา\nเฉาก๊วย\nเฉาฮื้อ\nเฉาะ\nเฉิด\nเฉิบ\nเฉียง\nเฉียงพร้านางแอ\nเฉียด\nเฉียบ\nเฉียว\nเฉี่ยว\nเฉือน\nเฉื่อย\nแฉ\nแฉ่\nแฉก\nแฉง\nแฉ่ง\nแฉลบ\nแฉล้ม\nแฉะ\nโฉ\nโฉ่\nโฉเก\nโฉ่งฉ่าง\nโฉงเฉง\nโฉด\nโฉนด\nโฉบ\nโฉเบ๊\nโฉม\nโฉลก\nไฉน\nไฉไล\nชก\nชคัตตรัย\nชง\nชงโค\nชงฆ์\nชงฆา\nชงโลง\nชฎา\nชฎามังษี\nชฎามังสี\nชฎิล\nชด\nชน\nชนก\nชนนี\nชนม์\nชนวน\nชนะ\nชนัก\nชนา\nชนาง\nชนิด\nชเนตตี\nชบา\nชม\nชมดชม้อย\nชมนาด\nชมพู\nชมพู่\nชมรม\nชม้อย\nชม้าย\nชไม\nชยา\nชโย\nชรทึง\nชรริน\nชรอุ่ม\nชระล้ำ\nชระลุ\nชระอาบ\nชระเอม\nชรัด\nชรา\nชล\nชโลง\nชโลม\nช่วง\nชวด\nชวน\nชวย\nช่วย\nชวร\nชวลิต\nชวา\nชวาล\nชวาลา\nช่อ\nชอก\nช็อก\nช็อกโกเลต\nช็อกโกแลต\nชอง\nช่อง\nช้อง\nชองระอา\nชอน\nช่อน\nช้อน\nชอบ\nชอม\nช้อย\nชอล์ก\nชอ่ำ\nชอุ่ม\nชะ\nชะคราม\nชะงอก\nชะง่อน\nชะงัก\nชะงัด\nชะง้ำ\nชะงุ้ม\nชะเง้อ\nชะเงื้อม\nชะแง้\nชะโงก\nชะฉ่า\nชะช่อง\nชะชะ\nชะช้า\nชะโด\nชะตา\nชะต้า\nชะนี\nชะเนาะ\nชะเนียง\nชะพลู\nชะเพลิง\nชะมด\nชะมบ\nชะมวง\nชะมัง\nชะมัด\nชะแม่\nชะรอย\nชะลอ\nชะลอม\nชะล่า\nชะลาน\nชะลิน\nชะลูด\nชะเลง\nชะเลย\nชะแล็ก\nชะแลง\nชะวาก\nชะวาด\nชะเวิกชะวาก\nชะแวง\nชะอม\nชะอ้อน\nชะเอม\nชะโอน\nชัก\nชักคราม\nชักช้า\nชัง\nชั่ง\nชังคา\nชังฆ\nชัชวาล\nชัฏ\nชัด\nชัดช้า\nชัน\nชั้น\nชันกาด\nชันชี\nชันตุ\nชันนะตุ\nชันนุ\nชันโรง\nชันษา\nชันสูตร\nชัปนะ\nชัพ\nชัมพูนท\nชัย\nชัยพฤกษ์\nชัยภูมิ\nชัลลุกา\nชั่ว\nชั้ว\nชัวชม\nชา\nช้า\nชาคระ\nชาคริต\nชาคริยานุโยค\nช่าง\nช้าง\nช้าช่อน\nชาญ\nชาด\nชาดก\nชาต\nชาตบุษย์\nชาตรี\nชาตะ\nชาตา\nชาติ\nชาน\nชานุ\nช้าปี่\nชาปีไหน\nช้าแป้น\nช้าพลู\nชาม\nชามพูนท\nชามาดร\nชามาดา\nชามาตุ\nชาย\nชายา\nชาล\nชาลา\nชาลินี\nช้าเลือด\nชาว\nชาวี\nชำ\nช่ำ\nช้ำ\nชำงัด\nชำงาย\nช่ำชอง\nชำนะ\nชำนัญ\nชำนัน\nชำนาญ\nชำนิ\nชำเนียร\nชำมะนาด\nชำมะเลียง\nชำร่วย\nชำระ\nช้ำรั่ว\nชำรุด\nชำเรา\nชำเราะ\nชำแรก\nชำแระ\nชำเลือง\nชำแหละ\nชิ\nชิง\nชิ่ง\nชิงชัน\nชิงช้า\nชิงช้าชาลี\nชิงชี่\nชิงฮื้อ\nชิชะ\nชิชิ\nชิณณะ\nชิด\nชิเดนทรีย์\nชิต\nชิตินทรีย์\nชิน\nชิ้น\nชินโต\nชิโนรส\nชิม\nชิมแปนซี\nชิยา\nชิรณะ\nชิระ\nชิวหา\nชิสา\nชี\nชี่\nชี้\nชีปะขาว\nชีผะขาว\nชีผ้าขาว\nชีพ\nชีฟอง\nชีรณ\nชีระ\nชีวเคมี\nชีวประวัติ\nชีวภาพ\nชีววิทยา\nชีวะ\nชีวัน\nชีวา\nชีวาตม์\nชีวาลัย\nชีวิต\nชีวิตักษัย\nชีวิน\nชีวี\nชืด\nชื่น\nชื้น\nชื่อ\nชุก\nชุกชี\nชุ้ง\nชุณห\nชุด\nชุติ\nชุน\nชุบ\nชุม\nชุ่ม\nชุมนุม\nชุมพร\nชุมพา\nชุมแพรก\nชุมรุม\nชุมแสง\nชุมเห็ด\nชุ่ย\nชุลมุน\nชุลี\nชุษณะ\nชู\nชู้\nเช็ค\nเช้ง\nเช้งวับ\nเชงเลง\nเช็ด\nเชน\nเช่น\nเชย\nเชลง\nเชลย\nเชลแล็ก\nเชลียง\nเชวง\nเชษฐะ\nเชษฐา\nเชอ\nเช่า\nเช้า\nเชาว์\nเชาวน์\nเชิง\nเชิญ\nเชิด\nเชิ้ต\nเชียง\nเชี่ยน\nเชียบ\nเชี่ยม\nเชียร\nเชียร์\nเชียว\nเชี่ยว\nเชื่อ\nเชื้อ\nเชือก\nเชื่อง\nเชือด\nเชือน\nเชื่อม\nแช\nแช่\nแช่ง\nแชงมา\nแชบ๊วย\nแช่ม\nแชร์\nแชล่ม\nแชสซี\nแชะ\nโชก\nโชค\nโชงโลง\nโชดก\nโชดึก\nโชต\nโชตก\nโชติ\nโชติก\nโชน\nโชมโรม\nโชย\nโชยงการ\nโชยชาย\nโชยติส\nโชว์\nใช่\nใช้\nไช\nไชนะ\nไชย\nไชโย\nซก\nซ่ก\nซงดำ\nซ่งฮื้อ\nซด\nซน\nซ้น\nซบ\nซม\nซวดเซ\nซวน\nซวย\nซอ\nซอก\nซอง\nซ่อง\nซ้อง\nซองแมว\nซ้องแมว\nซอน\nซ่อน\nซ้อน\nซอม\nซ่อม\nซ้อม\nซอมซ่อ\nซอย\nซอส\nซัก\nซักส้าว\nซัง\nซั้ง\nซัด\nซับ\nซัลฟา\nซั้ว\nซา\nซ่า\nซาก\nซาง\nซ่าง\nซาด\nซาน\nซ่าน\nซาบซ่าน\nซาบซึ้ง\nซ่าโบะ\nซาแมเรียม\nซ้าย\nซาลาเปา\nซาว\nซ่าหริ่ม\nซำ\nซ้ำ\nซิ\nซี\nซิก\nซิกข์\nซิกซี้\nซิกแซ็ก\nซิการ์\nซิงโคนา\nซิ่น\nซินนามิก\nซินแส\nซิบ\nซิป\nซิฟิลิส\nซิลิคอน\nซิว\nซี่\nซีก\nซีเซียม\nซีด\nซี้ด\nซีนอน\nซีป่าย\nซีเมนต์\nซีเรียม\nซีลีเนียม\nซีอิ๊ว\nซึก\nซึง\nซึ่ง\nซึ้ง\nซึม\nซื่อ\nซื้อ\nซุก\nซุง\nซุน\nซุบ\nซุป\nซุ่ม\nซุ้ม\nซุ่มซ่าม\nซุย\nซู่\nซูโครส\nซูด\nซู้ด\nซูดซาด\nซูบ\nเซ\nเซ็ก\nเซแคนต์\nเซ็ง\nเซ่ง\nเซ้ง\nเซ็งแซ่\nเซต\nเซน\nเซ็น\nเซ่น\nเซนติกรัม\nเซนติเกรด\nเซนติเมตร\nเซนติลิตร\nเซปักตะกร้อ\nเซราะ\nเซรุ่ม\nเซลเซียส\nเซลล์\nเซลลูลอยด์\nเซลลูโลส\nเซ่อ\nเซอร์โคเนียม\nเซอะ\nเซา\nเซ้าซี้\nเซาะ\nเซิง\nเซิ้ง\nเซียน\nเซียบ\nเซียมซี\nเซียว\nเซี่ยว\nเซี่ยวกาง\nเซื่อง\nแซ\nแซ่\nแซ็กคาริน\nแซง\nแซงแซว\nแซด\nแซบ\nแซม\nแซยิด\nแซ่ว\nแซะ\nโซ\nโซ่\nโซก\nโซ่ง\nโซงโขดง\nโซเซ\nโซดา\nโซเดียม\nโซม\nโซรม\nโซลา\nไซ\nไซ้\nไซเกิล\nไซโคลน\nไซน์\nไซยาไนด์\nไซร้\nไซเรน\nไซโล\nฌาน\nฌาปน\nฌาปนกิจ\nฌาปนสถาน\nเฌอ\nเฌอเอม\nญวน\nญัตติ\nญาณ\nญาติ\nญานาซะฮ์\nญิบ\nญี่ปุ่น\nเญยธรรม\nไญยธรรม\nฎีกา\nฐกัด\nฐากูร\nฐาน\nฐานะ\nฐานันดร\nฐานานุกรม\nฐานานุรูป\nฐานานุศักดิ์\nฐานียะ\nฐาปน\nฐาปนา\nฐายี\nฐิต\nฐิติ\nฑาหก\nฑาหะ\nเฒ่า\nณรงค์\nเณร\nดก\nดง\nด้ง\nด้น\nดนโด่\nดนตรี\nดนัย\nดนุ\nดนู\nดบัสวิน\nดบัสวี\nดม\nดรงค์\nดรณี\nดรรชนี\nดราฟต์\nดรุณ\nดรุณี\nดล\nดวง\nด้วง\nดวด\nด่วน\nด้วน\nด้วย\nดอก\nดอง\nด่อง\nด้อง\nดองฉาย\nดองดึง\nดอด\nดอน\nด่อน\nดอม\nด้อม\nดอย\nด้อย\nดอลลาร์\nดะ\nดะโต๊ะ\nดะหมัง\nดัก\nดักดาน\nดักแด้\nดัง\nดั่ง\nดั้ง\nดัชนี\nดัด\nดัตช์\nดัน\nดั้น\nดับ\nดัมพ์\nดั้วเดี้ย\nดัสกร\nดา\nด่า\nดาก\nด่าง\nด้าง\nดาด\nดาน\nด่าน\nด้าน\nดาบ\nดาบส\nดาม\nด้าม\nด้ามจิ้ว\nดามพ์\nดาย\nด้าย\nดารกะ\nดารณี\nดารดาษ\nดาระ\nดารา\nดาล\nดาลัด\nดาว\nด่าว\nด้าว\nดาวดึงส์\nดาวบส\nดาษ\nดาษดา\nดำ\nด่ำ\nด้ำ\nดำกล\nดำเกิง\nดำแคง\nดำดง\nดำนาณ\nดำเนิน\nดำบล\nดำรง\nดำรวจ\nดำรัส\nดำริ\nดำรี\nดำรู\nดำฤษณา\nดำเลิง\nดิก\nดิ่ง\nดิฉัน\nดิฐ\nดิตถ์\nดิถี\nดิน\nดิ้น\nดิบ\nดิรัจฉาน\nดิลก\nดิ่ว\nดิ้ว\nดิ้วเดี้ยว\nดิษฐ์\nดิสโพรเซียม\nดี\nดีเซล\nดีด\nดีดีที\nดีบุก\nดีปลี\nดีเปรสชัน\nดีหมี\nดีหลี\nดึก\nดึง\nดึ่ง\nดึ่ม\nดื่น\nดื่ม\nดือ\nดื้อ\nดุ\nดุก\nดุกดิก\nดุกทะเล\nดุ้ง\nดุ้งดิ้ง\nดุจ\nดุด\nดุน\nดุ้น\nดุบ\nดุม\nดุ่ม\nดุ่ย\nดุรงค์\nดุริยะ\nดุริยางค์\nดุริยางคศาสตร์\nดุริยางคศิลป์\nดุล\nดุษฎี\nดุษณี\nดุษณีภาพ\nดุษิต\nดุสิต\nดุเหว่า\nดู\nดูกค่าง\nดูกร\nดูด\nดูรา\nดูแล\nเด\nเด่\nเดก\nเด็ก\nเดกซ์โทรส\nเดคากรัม\nเดคาเมตร\nเดคาลิตร\nเด้ง\nเด็จ\nเดช\nเดชน์\nเดชนะ\nเดชะ\nเดโช\nเดซิกรัม\nเดซิเมตร\nเดซิลิตร\nเด็ด\nเดน\nเด่น\nเดนมาร์ก\nเดรัจฉาน\nเด๋อ\nเด๋อด๋า\nเดา\nเด้า\nเดาะ\nเดิน\nเดิ่น\nเดิม\nเดียง\nเดียด\nเดียรดาษ\nเดียรถีย์\nเดียรัจฉาน\nเดียว\nเดี่ยว\nเดี๋ยว\nเดียะ\nเดื่อ\nเดือก\nเดื่อง\nเดือด\nเดือน\nเดือย\nแด\nแด่\nแดก\nแด็ก\nแดกงา\nแดกแด้\nแดง\nแดด\nแดน\nแด่น\nแด่ว\nแดะ\nแดะแด๋\nโด\nโด่\nโดกเดก\nโด่ง\nโดด\nโดน\nโดม\nโดมร\nโดย\nโดรณ\nใด\nได\nได้\nไดแซ็กคาไรด์\nไดนาโม\nไดนาไมต์\nไดโนเสาร์\nไดเรกตริกซ์\nตก\nต๊กโต\nตง\nต๋ง\nตงฉิน\nตงิด\nตงุ่น\nตด\nตติย\nตถาคต\nตน\nต้น\nตนัย\nตนุ\nตบ\nตบะ\nตปนียะ\nตม\nต้ม\nตมูก\nตยาคี\nตรง\nตรณี\nตรม\nตรรก\nตรรกะ\nตรลบ\nตรลอด\nตรลาด\nตรวจ\nตรวน\nตรอก\nตรอง\nตรอมใจ\nตรอมตรม\nตระ\nตระกล\nตระกวน\nตระกอง\nตระการ\nตระกูล\nตระคัร\nตระเตรียม\nตระนาว\nตระบก\nตระบอก\nตระบอง\nตระบัด\nตระบัน\nตระเบ็ง\nตระแบก\nตระแบง\nตระโบม\nตระพอง\nตระพัง\nตระลาการ\nตระวัน\nตระเว็ด\nตระเวน\nตระสัก\nตระหง่าน\nตระหนก\nตระหนัก\nตระหน่ำ\nตระหนี่\nตรัง\nตรังค์\nตรับ\nตรับฟัง\nตรัย\nตรัยตรึงศ์\nตรัส\nตรัสสา\nตรา\nตรากตรำ\nตราชู\nตราบ\nตราสัง\nตรำ\nตริ\nตริว\nตรี\nตรีปวาย\nตรีพิธพรรณ\nตรียัมปวาย\nตรึก\nตรึง\nตรุ\nตรุณ\nตรุณะ\nตรุษ\nตรู\nตรู่\nตฤณ\nตฤตีย\nตฤษณา\nตลก\nตลบ\nตลอด\nตลับ\nตลาด\nตลิ่ง\nตลึง\nตวง\nต่วน\nต้วมเตี้ยม\nตวัก\nตวัด\nตวาด\nตอ\nตอม่อ\nต่อ\nต้อ\nตอก\nต๊อก\nต๊อกต๋อย\nตอง\nต้อง\nตองกราย\nต้องเต\nตองแตก\nต่องแต่ง\nตองเหลือง\nตอด\nตอน\nต้อน\nตอบ\nตอเบา\nตอม\nต่อม\nต๋อม\nต่อย\nต้อย\nต้อยตริ่ง\nต้อยติ่ง\nต้อยตีวิด\nตอแย\nตอร์ปิโด\nต่อไส้\nตอแหล\nตะ\nตะกรน\nตะกร้อ\nตะกรัน\nตะกรับ\nตะกร้า\nตะกราม\nตะกรุด\nตะกรุม\nตะกรุมตะกราม\nตะกละ\nตะกลาม\nตะกวด\nตะกอ\nตะกอน\nตะกัง\nตะกั่ว\nตะกาง\nตะกาด\nตะกาย\nตะกาว\nตะกุกตะกัก\nตะกุย\nตะกู\nตะกูด\nตะเกียกตะกาย\nตะเกียง\nตะเกียบ\nตะแก\nตะแก่\nตะแกรง\nตะโก\nตะโก้\nตะโกก\nตะโกน\nตะโกรง\nตะโกรม\nตะไกร\nตะขบ\nตะขอ\nตะขาบ\nตะขิดตะขวง\nตะเข้\nตะเข็บ\nตะโขง\nตะคร้อ\nตะครอง\nตะครั่นตะครอ\nตะคร้ำ\nตะคริว\nตะคิว\nตะครุบ\nตะคอก\nตะคัน\nตะค้า\nตะคาก\nตะค้าน\nตะคุ่ม\nตะเครียว\nตะเคียว\nตะเคียน\nตะแคง\nตะไคร่\nตะไคร้\nตะเฆ่\nตะนอย\nตะนาว\nตะบม\nตะบอง\nตะบอย\nตะบัน\nตะบิ้ง\nตะบิด\nตะบิดตะบอย\nตะบี้ตะบัน\nตะบึง\nตะบูน\nตะเบ็ง\nตะเบ็งมาน\nตะเบ๊ะ\nตะแบก\nตะแบง\nตะโบม\nตะไบ\nตะปบ\nตะปลิง\nตะปิ้ง\nตะปุ่มตะป่ำ\nตะปู\nตะพง\nตะพด\nตะพอง\nตะพัก\nตะพัง\nตะพัด\nตะพั้น\nตะพาก\nตะพาน\nตะพาบ\nตะพาย\nตะพึด\nตะพึดตะพือ\nตะพุ่น\nตะเพรา\nตะเพิง\nตะเพิด\nตะเพียน\nตะโพก\nตะโพง\nตะโพน\nตะเภา\nตะใภ้\nตะม่อ\nตะมอย\nตะรังกะนู\nตะรังตังกวาง\nตะรังตังช้าง\nตะราง\nตะลอง\nตะลอน\nตะล่อม\nตะละ\nตะลาน\nตะลิงปลิง\nตะลิบ\nตะลีตะลาน\nตะลึง\nตะลึงพรึงเพริด\nตะลุง\nตะลุ่ม\nตะลุ่มนก\nตะลุมบอน\nตะลุ่มโปง\nตะลุมพอ\nตะลุมพุก\nตะลุย\nตะเลง\nตะแลงแกง\nตะไล\nตะวัน\nตะเวน\nตะหลิว\nตะหลุก\nตะหลุง\nตะแหง่ว\nตะแหมะแขะ\nตะโหงก\nตัก\nตักกะ\nตักเตือน\nตั๊กแตน\nตักษัย\nตัง\nตั่ง\nตั้ง\nตังเก\nตังฉ่าย\nตังเม\nตังวาย\nตังโอ๋\nตัจฉก\nตัจฉนี\nตัณฑุล\nตัณหา\nตัด\nตัน\nตันตระ\nตันติ\nตันหยง\nตับ\nตับปิ้ง\nตัว\nตั๋ว\nตัวจี๊ด\nตัวตืด\nตั้วโผ\nตั้วเหี่ย\nตา\nตาก\nตากวาง\nต่าง\nตาด\nตาน\nต่าน\nต้าน\nตานนกกด\nตานี\nตาบ\nตาม\nตามะแน\nตามิน\nตาย\nตาราไต\nตาล\nตาลุ\nต๋าว\nตาเสือ\nตาหนู\nตาฬ\nตำ\nต่ำ\nตำนาน\nตำบล\nตำแบ\nตำแย\nตำรวจ\nตำรับ\nตำรา\nตำรุ\nตำลึง\nตำเสา\nตำหนัก\nตำหนิ\nตำแหน่ง\nติ\nติก\nติ๊ก\nติกะ\nติกาหรัง\nติง\nติ่ง\nติ๋ง\nติ่งตั่ง\nติ๋งต่าง\nติงส\nติงสติ\nติณ\nติด\nติตติกะ\nติตติร\nติตถ\nติตถะ\nติถี\nติมิงคละ\nติรัจฉาน\nติลก\nติละ\nติ้ว\nตี\nตี่\nตีน\nตีบ\nตีรถะ\nตีระ\nตึ\nตึก\nตึ้ก\nตึ้กตั้ก\nตึง\nตึดตื๋อ\nตึ๊ดตื๋อ\nตืด\nตื่น\nตื้น\nตื้อ\nตื๊อ\nตื๋อ\nตุ\nตุ๊\nตุ๊กแก\nตุ๊กตา\nตุ๊กต่ำ\nตุกติก\nตุ๊กติ๊ก\nตุ๊กตุ่น\nตุ๊กตุ๋ย\nตุง\nตุ้งก่า\nตุ้งติ้ง\nตุ๊ดตู่\nตุน\nตุ่น\nตุ๋น\nตุนาหงัน\nตุบ\nตุ้บ\nตุ๊บป่อง\nตุปัดตุป่อง\nตุปัดตุเป๋\nตุ่ม\nตุ้ม\nตุ๋ม\nตุ้มกว้าว\nตุมกา\nตุ้มแซะ\nตุมตัง\nตุ้มเต๋น\nตุ้มปี่\nตุมพะ\nตุ่ย\nตุ้ย\nตุ๊ย\nตุ๋ยตุ่ย\nตุรคะ\nตุรงค์\nตุล\nตุลา\nตุหรัดตุเหร่\nตู\nตู่\nตู้\nตูก\nตูด\nตูบ\nตูม\nเต๊ก\nเต็ง\nเต่ง\nเตช\nเตโช\nเต้น\nเต็นท์\nเต็ม\nเตย\nเตร่\nเตร็ด\nเตรตา\nเตรียม\nเตรียมตรม\nเตละ\nเตลิด\nเตว็ด\nเต่อ\nเตอะ\nเตะ\nเตา\nเต่า\nเต้า\nเต๋า\nเต่าเกียด\nเต้าเจี้ยว\nเต้าทึง\nเต้าหู้\nเต้าฮวย\nเต๊าะ\nเตาะแตะ\nเติ่ง\nเติบ\nเติม\nเตี้ย\nเตียง\nเตียน\nเตียบ\nเตี๋ยม\nเตียรถ์\nเตียว\nเตี่ยว\nเตือน\nแต่\nแต้\nแตก\nแตง\nแต่ง\nแตงเม\nแต้จิ๋ว\nแตด\nแต๊ดแต๋\nแตน\nแต้ม\nแตร\nแตระ\nแต้ว\nแต้วแร้ว\nแต้วแล้ว\nแต่ว่า\nแต้แว้ด\nแตะ\nโต\nโต้\nโตก\nโต่ง\nโต้ง\nโตงเตง\nโตฎก\nโต๊ด\nโตน\nโตนด\nโต้โผ\nโตมร\nโตย\nโตรก\nโต๊ะ\nใต้\nไต\nไต่\nไต้\nไต๋\nไตร\nไตรกิศยา\nไตรดายุค\nไตร่ตรอง\nไตรย\nไต้หวัน\nถก\nถกล\nถงาด\nถด\nถนน\nถนอม\nถนัด\nถนัน\nถนำ\nถนิม\nถม\nถ่ม\nถมอ\nถมึงทึง\nถลก\nถลกบาตร\nถลน\nถล่ม\nถลอก\nถลัน\nถลา\nถลาก\nถลาย\nถลำ\nถลึงตา\nถลุง\nถ่วง\nถ้วน\nถ้วย\nถวัล\nถวัลย์\nถวาย\nถวิน\nถวิล\nถ่อ\nถ้อ\nถอก\nถอง\nถ่อง\nถ้อง\nถอด\nถอน\nถอบ\nถอบแถบ\nถ่อม\nถอย\nถ่อย\nถ้อย\nถะ\nถะถั่น\nถะมัดถะแมง\nถัก\nถัง\nถั่ง\nถัด\nถัทธ\nถัน\nถั่น\nถับ\nถัมภ์\nถัว\nถั่ว\nถา\nถ้า\nถาก\nถาง\nถ่าง\nถาด\nถาน\nถ่าน\nถาบ\nถาม\nถามะ\nถ่าย\nถ่าว\nถาวร\nถาวรธิรา\nถ้ำ\nถิ่น\nถี่\nถีบ\nถึก\nถึง\nถือ\nถุง\nถุน\nถุย\nถู\nถูก\nเถกิง\nเถน\nเถร\nเถระ\nเถรานุเถระ\nเถรี\nเถลไถล\nเถลิง\nเถลือกถลน\nเถ่อ\nเถอะ\nเถา\nเถ้า\nเถาวัลย์\nเถาะ\nเถิก\nเถิง\nเถิด\nเถิดเทิง\nเถิน\nเถียง\nเถียร\nเถือ\nเถือก\nเถื่อน\nแถ\nแถก\nแถง\nแถน\nแถบ\nแถม\nแถลง\nแถลบ\nแถว\nโถ\nโถง\nโถงเถง\nโถบ\nโถม\nโถมนาการ\nไถ\nไถ่\nไถ้\nไถง\nไถล\nทกล้า\nทแกล้ว\nท่ง\nทด\nทน\nท้น\nทนต์\nทนโท่\nทนาย\nทบ\nทบวง\nทมอ\nทมะ\nทมิฬ\nทโมน\nทยอย\nทแยง\nทรกรรม\nทรชน\nทรชาติ\nทรพิษ\nทรยศ\nทรราช\nทรลักษณ์\nทรง\nทรพี\nทรมาทรกรรม\nทรมาน\nทรรทึง\nทรรป\nทรรปณ์\nทรรปณะ\nทรรศนะ\nทรรศนาการ\nทรรศนีย์\nทรวง\nทรวดทรง\nทรวาร\nทรหด\nทรหวล\nทรหึง\nทรอมโบน\nทระนง\nทรัพย์\nทรัพยากร\nทรัมเป็ต\nทรานซิสเตอร์\nทราบ\nทราม\nทราย\nทรุด\nทฤษฎี\nทลาย\nทลิท\nทลิททก\nทวง\nท้วง\nท่วงท่า\nท่วงทำนอง\nท่วงที\nทวด\nทวน\nท้วน\nท่วม\nท้วม\nทวย\nท่วย\nท้วย\nทวอย\nทวัตดึงส์\nทวัย\nทวา\nทวาบร\nทว่า\nทวาย\nทวาร\nทวิ\nทวิช\nทวิตีย์\nทวิตียา\nทวี\nทวีธาภิเษก\nทวีป\nทศ\nทศมี\nทศางค์\nทหระ\nทหาร\nทอ\nท่อ\nท้อ\nทอก\nทอง\nท่อง\nท้อง\nทองกวาว\nทองภู\nทองลิน\nทองหลาง\nทองโหลง\nทองอุไร\nทอด\nทอน\nท่อน\nทอนซิล\nทอฟฟี่\nท่อม\nทอย\nทอเรียม\nทะ\nทะงัน\nทะนง\nทะนน\nทะนาน\nทะนุ\nทะเบียน\nทะมัดทะแมง\nทะมึน\nทะมื่น\nทะแม่ง\nทะยาน\nทะเยอทะยาน\nทะแย\nทะร่อทะแร่\nทะลวง\nทะลอก\nทะลัก\nทะลาย\nทะลึ่ง\nทะลุ\nทะลุดทะลาด\nทะเล\nทะเล้น\nทะเล่อทะล่า\nทะเลาะ\nทะเลิ่กทะลั่ก\nทะวาย\nทัก\nทักข์\nทักขิญ\nทักขิณ\nทักขิณา\nทักขิณาวัฏ\nทักขิโณทก\nทักขิไณยบุคคล\nทักทิน\nทักษะ\nทักษา\nทักษิณ\nทักษิณา\nทักษิโณทก\nทัง\nทั่ง\nทั้ง\nทังวล\nทังวี้ทังวล\nทังสเตน\nทัณฑ์\nทัณฑกรรม\nทัณฑฆาต\nทัณฑสถาน\nทัณฑะ\nทัณฑิกา\nทัณฑิมา\nทัณฑีบท\nทัด\nทัดทา\nทัต\nทัน\nทันต์\nทันตชะ\nทันตแพทย์\nทันติน\nทันตี\nทันธ์\nทับ\nทับทิม\nทับสมิงคลา\nทัพ\nทัพพะ\nทัพพี\nทั่ว\nทัศ\nทัศน์\nทัศนะ\nทัศนา\nทัศนคติ\nทัศนวิสัย\nทัศนศาสตร์\nทัศนศิลป์\nทัศนศึกษา\nทัศนาการ\nทัศนาจร\nทัศนีย์\nทัศนียภาพ\nทัศนูปกรณ์\nทัศไนย\nทัสนานุตริยะ\nทัฬหะ\nทัฬหิ\nทัฬหี\nทา\nท่า\nท้า\nทาก\nทาง\nท้าง\nทาฐะ\nทาฐิกะ\nทาฒะ\nทาฒิกะ\nทาน\nท่าน\nทานต์\nทานพ\nทาบ\nทาม\nท่ามกลาง\nทาย\nท้าย\nทายก\nทายัช\nทายาด\nทายาท\nทายิกา\nทารก\nทารพี\nทาริกา\nทารุณ\nทาว\nท่าว\nท้าว\nทาส\nทาสี\nทำ\nทำนบ\nทำนอง\nทำนาย\nทำนุ\nทำนูล\nทำเนา\nทำเนียบ\nทำไม\nทำลาย\nทำเล\nทิคัมพร\nทิฆัมพร\nทิ้ง\nทิงเจอร์\nทิ้งถ่อน\nทิ้งทูด\nทิชะ\nทิชากร\nทิชาชาติ\nทิฏฐะ\nทิฏฐานุคติ\nทิฏฐุชุกรรม\nทิฐธรรม\nทิฐิ\nทิด\nทิต\nทิน\nทิพ\nทิพย์\nทิพา\nทิม\nทิ่ม\nทิมทอง\nทิว\nทิวงคต\nทิวทัศน์\nทิวา\nทิศ\nทิศา\nทิศานุทิศ\nที\nที่\nทีฆชาติ\nทีฆนิกาย\nทีฆสระ\nทีฆายุ\nทีป\nทีม\nทีเอ็นที\nทึก\nทึกทัก\nทึ่ง\nทึ้ง\nทึดทือ\nทึนทึก\nทึบ\nทึม\nทึ่ม\nทื่อ\nทุ\nทุก\nทุกข์\nทุกขลาภ\nทุกขเวทนา\nทุกขารมณ์\nทุกฏ\nทุกรกิริยา\nทุกะ\nทุกัง\nทุกูล\nทุคตะ\nทุคติ\nทุ่ง\nทุ้ง\nทุงงะ\nทุจริต\nทุด\nทุทรรศนนิยม\nทุนิยม\nทุน\nทุ่น\nทุนนิมิต\nทุบ\nทุบทู\nทุปปัญญา\nทุพพรรณ\nทุพพล\nทุพพลภาพ\nทุพภิกขภัย\nทุม\nทุ่ม\nทุ้ม\nทุย\nทุ้ย\nทุรกันดาร\nทุรชน\nทุรชาติ\nทุรพล\nทุรลักษณ์\nทุรน\nทุรนทุราย\nทุรัศ\nทุราคม\nทุราจาร\nทุเรศ\nทุเรียน\nทุลักทุเล\nทุเลา\nทุศีล\nทุสสะ\nทุสสีล\nทู\nทูโม่ง\nทู่\nทู้\nทูกัง\nทู่ซี้\nทูต\nทูตานุทูต\nทูน\nทูบ\nทูม\nทูล\nทูเลียม\nเท\nเท่\nเทคนิค\nเทคนีเชียม\nเทคโนโลยี\nเท้ง\nเท้งเต้ง\nเท็จ\nเทนนิส\nเทพ\nเทพา\nเทพารักษ์\nเทพยเจ้า\nเทพยดา\nเทพยุดา\nเทพิน\nเทพินทร์\nเทพี\nเทเพนทร์\nเทโพ\nเทริด\nเทลลูเรียม\nเทวทัณฑ์\nเทวดา\nเทวทูต\nเทวธรรม\nเทวนาครี\nเทวนิยม\nเทวรูป\nเทวโลก\nเทววิทยา\nเทวสถาน\nเทวศ\nเทวษ\nเทวัญ\nเทวัน\nเทวาลัย\nเทวินทร์\nเทวี\nเทเวศ\nเทเวศร์\nเทเวศวร์\nเทศ\nเทศะ\nเทศาภิบาล\nเทศน์\nเทศนา\nเทห์\nเท่ห์\nเทห์ฟากฟ้า\nเทหวัตถุ\nเท่อ\nเท้อ\nเทอญ\nเทอม\nเทอร์เบียม\nเทอร์โมมิเตอร์\nเทอะทะ\nเทา\nเท่า\nเท้า\nเท้ายายม่อม\nเท่ารึง\nเทิ่ง\nเทิด\nเทิน\nเทิบ\nเทิบทาบ\nเทิ้ม\nเที่ยง\nเทียด\nเทียน\nเที้ยน\nเทียบ\nเทียม\nเทียร\nเที้ยร\nเทียว\nเที่ยว\nเทือ\nเทื่อ\nเทื้อ\nเทือก\nแท้\nแท็กซี่\nแทง\nแท่ง\nแท้ง\nแท็งก์\nแทงทวย\nแทงวิสัย\nแทตย์\nแทน\nแท่น\nแทนเจนต์\nแทนทาลัม\nแทบ\nแทรก\nแทรกเตอร์\nแทลเลียม\nแทะ\nโท\nโท่\nโทกเทก\nโทง\nโทงเทง\nโทณะ\nโทน\nโทนโท่\nโทมนัส\nโทรคมนาคม\nโทรทรรศน์\nโทรทัศน์\nโทรพิมพ์\nโทรภาพ\nโทรเลข\nโทรศัพท์\nโทรสาร\nโทรม\nโทษ\nโทษา\nโทษานุโทษ\nโทสะ\nโทสาคติ\nโทโส\nโทหฬินี\nไท\nไท้\nไทเทเนียม\nไทเทรต\nไทย\nไทร\nไทวะ\nธง\nธงก์\nธชะ\nธชี\nธตรฐ\nธนบัตร\nธนสมบัติ\nธนสาร\nธนะ\nธนา\nธนาคม\nธนาคาร\nธนาณัติ\nธเนศ\nธโนปจัย\nธไนศวรรย์\nธนิต\nธนิษฐะ\nธนิษฐา\nธนุ\nธนุรวิทยา\nธนุรเวท\nธนู\nธม\nธมกรก\nธรณะ\nธรณิน\nธรณินทร์\nธรณิศ\nธรณิศร\nธรณิศวร์\nธรณี\nธรมาน\nธรรม\nธรรมนูญ\nธรรมยุต\nธรรมยุติกนิกาย\nธรรมะ\nธรรมาทิตย์\nธรรมาธรรม\nธรรมาธิปไตย\nธรรมาธิษฐาน\nธรรมานุสาร\nธรรมาภิมุข\nธรรมาภิสมัย\nธรรมายตนะ\nธรรมารมณ์\nธรรมาสน์\nธรรมิก\nธรา\nธราดล\nธราธร\nธราธาร\nธราธิบดี\nธราธิป\nธริษตรี\nธเรษตรี\nธเรศ\nธวัช\nธัช\nธัญ\nธัญญาหาร\nธันยา\nธันยาวาท\nธันวาคม\nธัมมะ\nธาดา\nธาตรี\nธาตวากร\nธาตุ\nธาตุโขภ\nธาตุมมิสสา\nธานิน\nธานินทร์\nธานี\nธาร\nธารกำนัล\nธารคำนัล\nธารณะ\nธารณา\nธารา\nธาษตรี\nธำมรงค์\nธำรง\nธิดา\nธิติ\nธีระ\nธุช\nธุดงค์\nธุดงควัตร\nธุต\nธุตตะ\nธุมเกตุ\nธุมา\nธุรการ\nธุรกิจ\nธุระ\nธุรำ\nธุลี\nธุวดารา\nธุวภาค\nธุวมณฑล\nธูป\nเธนุ\nเธอ\nเธียร\nโธ่\nโธวนะ\nนก\nนกุล\nนขลิขิต\nนขะ\nนขา\nนเคนทร์\nนโคทร\nนคร\nนครินทร์\nนคเรศ\nนง\nนงคุฐ\nนที\nนนตรา\nนนท์\nนันทน์\nนนทรี\nนนทลี\nนนทิ\nนบ\nนปุงสกลิงค์\nนปุงสกลึงค์\nนพ\nนพนิต\nนภจร\nนภดล\nนภศูล\nนภา\nนภาลัย\nนม\nนมตำเรีย\nนมตำเลีย\nนมะ\nนมัสการ\nนมาซ\nนยนะ\nนยนา\nนโยบาย\nนรชาติ\nนรเทพ\nนรนาถ\nนรบดี\nนรบาล\nนรสิงห์\nนรสีห์\nนรา\nนรากร\nนราธิป\nนรินทร์\nนริศ\nนริศร\nนริศวร\nนเรศ\nนเรศวร\nนเรศวร์\nนโรดม\nนรก\nนรกานต์\nนรการ\nนรี\nนฤเทพ\nนฤบดี\nนฤบาล\nนฤเบศ\nนฤปเวศม์\nนฤปัตนี\nนฤคหิต\nนฤนาท\nนฤมล\nนฤตย์\nนฤตยสถาน\nนฤพาน\nนฤมาณ\nนฤมิต\nนลาฏ\nนลิน\nนลินี\nนวกรรม\nนวการ\nนวกิจ\nนวนิยาย\nนวปฎล\nนวรัตน์\nนวโลหะ\nนวกะ\nนวโกวาท\nนวด\nนวม\nน่วม\nนวมี\nนวย\nนวล\nนวัตกรรม\nนวาระ\nนหารุ\nนหุต\nนฬการ\nนอ\nนอก\nนอง\nน่อง\nน้อง\nน่องแน่ง\nนอต\nนอน\nนอบ\nน้อม\nน้อย\nน้อยหน่า\nน้อยโหน่ง\nนะ\nนะแน่ง\nนัก\nนักขัต\nนักขัตฤกษ์\nนักษัตร\nนักสราช\nนัข\nนั่ง\nนังคัล\nนัจ\nนัฑ\nนัด\nนัดดา\nนัตถุ์\nนั่น\nนั้น\nนันททายี\nนันทนาการ\nนันทวัน\nนันทิ\nนับ\nนัย\nนัยน์\nนัยนา\nนัว\nนัวเนีย\nนา\nน่า\nน้า\nนาก\nนากบุด\nนากาสาหรี\nนาค\nนาคร\nนาคา\nนาคาวโลก\nนาคินทร์\nนาคี\nนาเคนทร์\nนาเคศวร\nนาง\nนางเกล็ด\nนางนวล\nนางนูน\nนางรม\nนางรำ\nนางล้อม\nนางเล็ด\nนางเลิ้ง\nนางหงส์\nนางอาย\nนางแอ่น\nนาฏ\nนาฏกะ\nนาด\nนาถ\nนาท\nนาที\nนาน\nน่าน\nนานัครส\nนานัปการ\nนานา\nนาเนก\nนาบ\nนาภี\nนาม\nนามานุกรม\nนามาภิไธย\nนาย\nน่าย\nนายก\nนายิกา\nนารา\nนารายณ์\nนารี\nนาเรศ\nนาลิวัน\nนาว\nน้าว\nนาวา\nนาวิก\nนาวิน\nนาวี\nนาเวศ\nนาศ\nนาสา\nนาสิก\nนาฬิกา\nนาฬิเก\nนาฬี\nนำ\nน้ำ\nน้ำละว้า\nน้ำว้า\nนิ\nนิกเกิล\nนิกขะ\nนิกร\nนิกรอยด์\nนิกาย\nนิคม\nนิครนถ์\nนิคหกรรม\nนิคหะ\nนิคหิต\nนิคาลัย\nนิเคราะห์\nนิโคติน\nนิโครธ\nนิโครม\nนิ่ง\nนิจ\nนิด\nนิตย์\nนิตยทาน\nนิตยภัต\nนิตยสาร\nนิติ\nนิทร\nนิทรรศการ\nนิทรา\nนิทรารมณ์\nนิทัศน์\nนิทาน\nนิเทศ\nนิธาน\nนิธิ\nนินทา\nนินนาท\nนินาท\nนิบาต\nนิปริยาย\nนิปัจการ\nนิพจน์\nนิพนธ์\nนิพพาน\nนิพพิทา\nนิพัทธ์\nนิพันธ์\nนิพิท\nนิเพท\nนิภา\nนิ่ม\nนิ้ม\nนิมนต์\nนิมมาน\nนิมมานรดี\nนิมิต\nนิยต\nนิยม\nนิยัตินิยม\nนิยาม\nนิยาย\nนิยุต\nนิรคุณ\nนิรชร\nนิรชรา\nนิรทุกข์\nนิรเทศ\nนิรโทษ\nนิรโทษกรรม\nนิรนัย\nนิรนาม\nนิรภัย\nนิรมล\nนิรมาน\nนิรัตศัย\nนิรันดร\nนิราพาธ\nนิรามัย\nนิรามิษ\nนิราศรัย\nนิรินธน์\nนิรมาณ\nนิรมิต\nนิรยบาล\nนิรัพพุท\nนิรา\nนิราศ\nนิรุกติ\nนิรุตติ\nนิรุทธ์\nนิโรธ\nนิล\nนิลุบล\nนิโลบล\nนิ่ว\nนิ้ว\nนิวคลิอิก\nนิวเคลียร์\nนิวเคลียส\nนิวตรอน\nนิวรณ์\nนิวัต\nนิวัตน์\nนิวาต\nนิวาส\nนิเวศ\nนิเวศน์\nนิศา\nนิษาท\nนิสัช\nนิสัชชาการ\nนิสัย\nนิสาท\nนิสิต\nนิสีทนสันถัต\nนิสีทนะ\nนิสีทนาการ\nนิเสธ\nนี่\nนี้\nนี่นัน\nนีรนาท\nนีออน\nนีโอดิเมียม\nนึก\nนึง\nนึ่ง\nนุง\nนุ่ง\nนุงนัง\nนุช\nนุต\nนุ่น\nนุ่ม\nนุ้ย\nนูน\nนู่น\nนู้น\nเนกขัม\nเนตบอล\nเนตร\nเนติ\nเน้น\nเนบิวลา\nเนปจูน\nเนปทูเนียม\nเนมิ\nเนย\nเนรกัณฐี\nเนรคุณ\nเนรเทศ\nเนรนาด\nเนรมิต\nเนระพูสี\nเนอ\nเน้อ\nเนา\nเน่า\nเนาวนิต\nเนาวรัตน์\nเนิน\nเนิ่น\nเนิบ\nเนียง\nเนียน\nเนียม\nเนียร\nเนียรทุกข์\nเนียรเทศ\nเนียรนาท\nเนื้อ\nเนือง\nเนื่อง\nเนือย\nแน่\nแน่ง\nแน่น\nแนบ\nแน่บ\nแนม\nแนว\nแน่ว\nแนะ\nแน่ะ\nแนะแหน\nโน\nโน้ต\nโนน\nโน่น\nโน้น\nโนเบเลียม\nโน้ม\nโนมพรรณ\nโนรา\nโนรี\nใน\nไน\nไนต์คลับ\nไนโตรเจน\nไนลอน\nไนโอเบียม\nบ่\nบก\nบง\nบ่ง\nบงก์\nบ๊งเบ๊ง\nบงสุ์\nบด\nบดินทร์\nบดี\nบถ\nบท\nบน\nบ่น\nบพิตร\nบพิธ\nบ่ม\nบรม\nบรมัตถ์\nบรรจง\nบรรจถรณ์\nบรรจบ\nบรรจวบ\nบรรจุ\nบรรเจิด\nบรรณ\nบรรดา\nบรรตานึก\nบรรถร\nบรรทม\nบรรทัด\nบรรทาน\nบรรทุก\nบรรเทา\nบรรเทือง\nบรรพ\nบรรพ์\nบรรพชา\nบรรพชิต\nบรรพต\nบรรยง\nบรรยงก์\nบรรยเวกษก์\nบรรยากาศ\nบรรยาย\nบรรลัย\nบรรลาย\nบรรลุ\nบรรเลง\nบรรโลม\nบรรษัท\nบรรสบ\nบรรสพ\nบรรสม\nบรรสาน\nบรรสาร\nบรรหาน\nบรรหาร\nบรอนซ์\nบรั่นดี\nบรัศว์\nบราลี\nบริกรรม\nบริการ\nบริขาร\nบริขารโจล\nบริคณห์\nบริจาค\nบริจาริกา\nบริเฉท\nบริชน\nบริดจ์\nบริบท\nบริบาล\nบริบูรณ์\nบริพนธ์\nบริพัตร\nบริพันธ์\nบริพาชก\nบริพาร\nบริภัณฑ์\nบริภาษ\nบริโภค\nบริมาส\nบริยาย\nบริรม\nบริรักษ์\nบริราช\nบริวรรต\nบริวาร\nบริวาส\nบริเวณ\nบริษัท\nบริสชน\nบริสุทธิ์\nบริหาร\nบล็อก\nบวก\nบวง\nบ่วง\nบวช\nบวน\nบ้วน\nบวบ\nบวม\nบ๊วย\nบวร\nบหลิ่ม\nบอ\nบ่อ\nบ้อ\nบอก\nบอง\nบ่อง\nบ้อง\nบ๊อง\nบ้องแบ๊ว\nบองหลา\nบอด\nบอน\nบ่อน\nบอบ\nบ้อม\nบ๋อม\nบ่อย\nบอระเพ็ด\nบอล\nบอลลูน\nบ้อหุ้น\nบ๊ะ\nบ๊ะจ่าง\nบะหมี่\nบัก\nบักโกรก\nบัคเตรี\nบัง\nบั้ง\nบังกะโล\nบังเกิด\nบังคน\nบังคม\nบังคล\nบังควร\nบังคับ\nบังคัล\nบังแทรก\nบังวาย\nบังเวียน\nบังสุกุล\nบังสุกูลิก\nบังสูรย์\nบังหวน\nบังเหตุ\nบังเหียน\nบังอร\nบังอวจ\nบังอาจ\nบังเอิญ\nบัญจก\nบัญชร\nบัญชา\nบัญชี\nบัญญัติ\nบัญหา\nบัฏ\nบัณฑร\nบัณฑิต\nบัณฑิตย์\nบัณฑุ\nบัณฑูร\nบัณเฑาะก์\nบัณเฑาะว์\nบัณณาส\nบัณรส\nบัณรสี\nบัด\nบัดกรี\nบัดซบ\nบัดสี\nบัตร\nบัทม์\nบัน\nบั่น\nบั้น\nบันจวบ\nบันดล\nบันดาล\nบันได\nบันทึก\nบันทึง\nบันเทิง\nบันยะบันยัง\nบันลือ\nบัปผาสะ\nบัพ\nบัพชา\nบัพพาชนียกรรม\nบัล\nบัลลพ\nบัลลังก์\nบัลลูน\nบัลเลต์\nบัว\nบา\nบ่า\nบ้า\nบาก\nบาง\nบ่าง\nบ้าง\nบาจรีย์\nบาซิลลัส\nบาด\nบาดทะจิต\nบาดทะพิษ\nบาดทะยัก\nบาดาล\nบาตร\nบาท\nบาทสกุณี\nบาทหลวง\nบาทาธึก\nบาทุกา\nบาน\nบ้าน\nบานชื่น\nบานเช้า\nบานบุรี\nบานไม่รู้โรย\nบานเย็น\nบ้าบ๋า\nบาป\nบาย\nบ่าย\nบ้าย\nบาร์\nบารนี\nบารมี\nบาร์เรล\nบาร์เลย์\nบารอมิเตอร์\nบ้าระบุ่น\nบาเรียน\nบาเรียม\nบาล\nบาลี\nบ่าว\nบ่าวขุน\nบาศ\nบาศก์\nบาสเกตบอล\nบาหลี\nบ๋ำ\nบำเทิง\nบำนาญ\nบำบวง\nบำบัด\nบำเพ็ญ\nบำราบ\nบำราศ\nบำรุง\nบำรู\nบำเรอ\nบำหยัด\nบำเหน็จ\nบิ\nบิฐ\nบิณฑบาต\nบิด\nบิดร\nบิดหล่า\nบิดา\nบิตุ\nบิตุจฉา\nบิตุรงค์\nบิตุเรศ\nบิตุลา\nบิน\nบิ่น\nบินยา\nบิลเลียด\nบิวเรตต์\nบิสมัท\nบี้\nบีฑา\nบีตา\nบีบ\nบีเยศ\nบึก\nบึกบึน\nบึง\nบึ่ง\nบึ้ง\nบุ\nบุก\nบุคคล\nบุคลากร\nบุคลาธิษฐาน\nบุคลิก\nบุง\nบุ่ง\nบุ้ง\nบุ้งกี๋\nบุญ\nบุญญาธิการ\nบุญญานุภาพ\nบุญญาภินิหาร\nบุญญาภิสังขาร\nบุณฑริก\nบุณมี\nบุณย์\nบุตร\nบุตรี\nบุถุชน\nบุทคล\nบุนนาค\nบุบ\nบุบบิบ\nบุปผชาติ\nบุพกรรม\nบุพการี\nบุพกิจ\nบุพชาติ\nบุพทักษิณ\nบุพนิมิต\nบุพบท\nบุพพาจารย์\nบุพเพสันนิวาส\nบุพโพ\nบุ๋ม\nบุ่มบ่าม\nบุ้ย\nบุรณะ\nบุรพทิศ\nบุรพบท\nบุรพาจารย์\nบูรพาจารย์\nบุระ\nบุราณ\nบุรินทร์\nบุริมทิศ\nบุริมพรรษา\nบุริมสิทธิ\nบุรี\nบุรุษ\nบุโรทั่ง\nบุษกร\nบุษบก\nบุษบง\nบุษบัน\nบุษบา\nบุษบามินตรา\nบุษปราค\nบุษปะ\nบุษย์\nบุษย์น้ำทอง\nบุษยมาส\nบุษยะ\nบุษราคัม\nบุหงัน\nบุหงา\nบุหรง\nบุหรี่\nบุหลัน\nบู่\nบู้\nบูชนียสถาน\nบูชา\nบูชิต\nบูด\nบูดู\nบูร\nบูรณ์\nบูรณภาพ\nบูรณมี\nบูรณะ\nบูรณาการ\nบูรพ์\nบูรพะ\nบูรพา\nเบ้\nเบ่ง\nเบ๊จี๋\nเบญกานี\nเบญจกัลยาณี\nเบญจกามคุณ\nเบญจขันธ์\nเบญจดุริยางค์\nเบญจธรรม\nเบญจบรรพต\nเบญจพรรณ\nเบญจเพส\nเบญจมาศ\nเบญจรงค์\nเบญจศก\nเบญจศีล\nเบญจะ\nเบญจา\nเบญจางค์\nเบญจางคประดิษฐ์\nเบญญา\nเบญพาด\nเบ็ด\nเบ็ดเตล็ด\nเบ็ดเสร็จ\nเบน\nเบนซิน\nเบรก\nเบริลเลียม\nเบส\nเบ้อ\nเบอร์\nเบอร์คีเลียม\nเบ้อเร่อ\nเบ้อเร่อเท่อ\nเบ้อเริ่ม\nเบ้อเริ่มเทิ่ม\nเบอะ\nเบอะบะ\nเบะ\nเบา\nเบ้า\nเบาราณ\nเบาะ\nเบิก\nเบิ่ง\nเบี้ย\nเบี่ยง\nเบียด\nเบียน\nเบียร์\nเบี้ยว\nเบือ\nเบื่อ\nเบื้อ\nเบื้อง\nเบือน\nแบ\nแบ้\nแบก\nแบคทีเรีย\nแบ่ง\nแบงก์\nแบดมินตัน\nแบตเตอรี่\nแบน\nแบนโจ\nแบบ\nแบ็บ\nแบเรียม\nแบหลา\nแบะ\nโบ\nโบ้\nโบ๋\nโบก\nโบกขรณี\nโบกขรพรรษ\nโบชุก\nโบต\nโบนัส\nโบ๊เบ๊\nโบย\nโบรมีน\nโบรอน\nโบราณ\nโบสถ์\nใบ\nใบ้\nไบ่\nปก\nปกติ\nปกรณ์\nปกรณัม\nปกิณกะ\nปกีรณัม\nปโกฏิ\nปง\nป่ง\nปงช้าง\nปฎล\nปฏัก\nปฏิกรณ์\nปฏิกรรม\nปฏิการะ\nปฏิกิริยา\nปฏิกูล\nปฏิคม\nปฏิคหิต\nปฏิคาหก\nปฏิฆะ\nปฏิชีวนะ\nปฏิญญา\nปฏิญาณ\nปฏิทิน\nปฏิบถ\nปฏิบัติ\nปฏิปทา\nปฏิปักษ์\nปฏิปัน\nปฏิปุจฉาพยากรณ์\nปฏิปุจฉาวาที\nปฏิพัทธ์\nปฏิพากย์\nปฏิภาค\nปฏิภาณ\nปฏิมา\nปฏิมากร\nปฏิยุทธ์\nปฏิรพ\nปฏิรูป\nปฏิโลม\nปฏิวัติ\nปฏิวาต\nปฏิวาท\nปฏิเวธ\nปฏิสนธิ\nปฏิสวะ\nปฏิสังขรณ์\nปฏิสันถาร\nปฏิสัมภิทา\nปฏิเสธ\nปฐพี\nปฐม\nปฐวี\nปณต\nปณาม\nปณิธาน\nปณิธิ\nปณีต\nปด\nปดิวรัดา\nปติ\nปถพี\nปถมัง\nปถวี\nปทัฏฐาน\nปทัสถาน\nปทานุกรม\nปทีป\nปทุม\nปน\nป่น\nปนัดดา\nปปัญจะ\nปม\nปรนัย\nปรปักษ์\nปรโลก\nปรวาที\nปรก\nปรกติ\nปรง\nปรตยักษ์\nปรน\nปรนนิบัติ\nปรนิมมิตวสวัตดี\nปรบ\nปรปักษ์\nปรมัตถ์\nปรมาจารย์\nปรมาณู\nปรมาภิไธย\nปรมาภิเษก\nปรมินทร์\nบรเมนทร์\nปรเมศวร์\nปรเมษฐ์\nปรวด\nปรวนแปร\nปรศุ\nปรสิต\nปร๋อ\nปรองดอง\nปรอด\nปรอท\nปรอย\nประ\nประกบ\nประกฤต\nประกฤติ\nประกล\nประกวด\nประกวดประขัน\nประกอบ\nประกัน\nประกับ\nประกาย\nประกายพรึก\nประการ\nประกาศ\nประกาศนียบัตร\nประกาศิต\nประกำ\nประกิด\nประกิต\nประคด\nประคนธรรพ\nประคนธรรพ์\nประคบ\nประคบประหงม\nประคอง\nประคับประคอง\nประคัลภ์\nประคำ\nประคิ่น\nประคุณ\nประเคน\nประเคราะห์\nประโคน\nประโคนธรรพ\nประโคนธรรพ์\nประโคม\nประจง\nประจญ\nประจบ\nประจบประแจง\nประจวบ\nประจ๋อประแจ๋\nประจักษ์\nประจักษนิยม\nประจัญ\nประจัน\nประจาก\nประจาค\nประจาน\nประจำ\nประจิม\nประจิ้มประเจ๋อ\nประจุ\nประจุคมน์\nประจุบัน\nประเจก\nประเจิด\nประเจิดประเจ้อ\nประเจียด\nประแจ\nประชด\nประชน\nประชวม\nประชวร\nประชัน\nประชา\nประชาธิปไตย\nประชิด\nประชี\nประชุม\nประเชิญ\nประณต\nประณม\nประณาม\nประณิธาน\nประณิธิ\nประณีต\nประณุท\nประดง\nประดน\nประดวน\nประดอน\nประดอย\nประดัก\nประดักประเดิด\nประดัง\nประดับ\nประดา\nประดาก\nประดาป\nประดาษ\nประดิชญา\nประดิดประดอย\nประดิทิน\nประดิษฐ์\nประดิษฐกรรม\nประดิษฐาน\nประดุง\nประดุจ\nประดู่\nประเด\nประเด็น\nประเดิม\nประเดียง\nประเดี๋ยว\nประเดี๋ยวประด๋าว\nประแดง\nประแดะ\nประโดง\nประโดย\nประตง\nประตัก\nประตาป\nประติชญา\nประติญาณ\nประติทิน\nประติมากร\nประติมากรรม\nประติรพ\nประตู\nประถม\nประถมจินดา\nประทม\nประท้วง\nประทวน\nประทักษ์\nประทักษิณ\nประทัง\nประทัด\nประทับ\nประทาน\nประทาย\nประทาศี\nประทิน\nประทิ่น\nประทีป\nประทุฐ\nประทุน\nประทุษ\nประทุษฐ์\nประเทศ\nประเทา\nประเทียด\nประเทียบ\nประเทือง\nประธาน\nประธานาธิบดี\nประนม\nประนอ\nประนอม\nประนัง\nประนัปดา\nประนีประนอม\nประปราน\nประปราย\nประปา\nประเปรี้ยง\nประเปรียว\nประพจน์\nประพนธ์\nประพรม\nประพฤติ\nประพฤทธิ์\nประพัด\nประพัทธ์\nประพันธ์\nประพาต\nประพาส\nประพาสมหรณพ\nประพาฬ\nประพิณ\nประพิมพ์ประพาย\nประพุทธ์\nประเพณี\nประโพธ\nประไพ\nประไพร\nประภพ\nประภัสสร\nประภา\nประภาคาร\nประภาพ\nประภาษ\nประภาส\nประเภท\nประมง\nประมวล\nประมาณ\nประมาท\nประมุข\nประมุท\nประมูล\nประเมิน\nประโมง\nประโมทย์\nประยงค์\nประยุกต์\nประยุทธ์\nประยุร\nประยูร\nประโยค\nประโยชน์\nประโรหิต\nประลมพ์\nประลอง\nประลัย\nประลาต\nประลาย\nประลุ\nประเล่ห์\nประเล้าประโลม\nประโลม\nประวรรต\nประวรรตน์\nประวัติ\nประวาล\nประวาลปัทม์\nประวาส\nประวิง\nประวิช\nประวิตร\nประวิน\nประวีณ\nประเวณี\nประเวศ\nประเวศน์\nประศม\nประศาสน์\nประศุ\nประสก\nประสงค์\nประสบ\nประสพ\nประสม\nประสะ\nประสัก\nประสันนาการ\nประสัยห์\nประสา\nประสาท\nประสาธน์\nประสาน\nประสาร\nประสิทธิ์\nประสิทธิผล\nประสิทธิภาพ\nประสีประสา\nประสูต\nประสูติ\nประเสบัน\nประเสบันอากง\nประเสริฐ\nประหนึ่ง\nประหม่า\nประหยัด\nประหลาด\nประหล่ำ\nประหวัด\nประหวั่น\nประหัตประหาร\nประหาณ\nประหาร\nประเหล\nประเหส\nประไหมสุหรี\nประอบ\nประอร\nปรัก\nปรักปรำ\nปรักมะ\nปรัง\nปรัชญา\nปรัตถจริยา\nปรัตยุบัน\nปรัน\nปรับ\nปรัมปรา\nปรัศจิม\nปรัศนา\nปรัศนี\nปรัศว์\nปรัสสบท\nปร่า\nปรากฏ\nปรากรม\nปรากฤต\nปราการ\nปราง\nปรางค์\nปราจีน\nปราชญ์\nปราชญา\nปราชัย\nปราณ\nปราณี\nปราด\nปราน\nปรานี\nปราบ\nปราบดาภิเษก\nปราปต์\nปราม\nปรามาส\nปราโมช\nปราโมทย์\nปราย\nปรารถนา\nปรารภ\nปรารมภ์\nปราศ\nปราศจาก\nปราศรัย\nปราษณี\nปราษาณ\nปราสัย\nปราสาท\nปรำ\nปริ\nปริก\nปริกขาร\nปริกรรม\nปริกัป\nปริคณห์\nปริจาค\nปริจาริกา\nปริเฉท\nปริชน\nปริซึม\nปริญญา\nปริณาม\nปริณายก\nปริต\nปริตตะ\nปริตโตทก\nปริตร\nปริทรรศน์\nปริทัยหัคคี\nปริทัศน์\nปริเทพ\nปริเทวะ\nปรินิพพาน\nปริบ\nปริบท\nปริปันถ์\nปริพนธ์\nปริพัตร\nปริพันธ์\nปริพาชก\nปริภัณฑ์\nปริภาษ\nปริภูมิ\nปริโภค\nปริ่ม\nปริมณฑล\nปริมาณ\nปริมาตร\nปริยัติ\nปริยานุช\nปริยาย\nปริเยศ\nปริโยสาน\nปริวรรต\nปริวัตร\nปริวาร\nปริวาส\nปริวิตก\nปริเวณ\nปริศนา\nปริษัท\nปริสัญญู\nปริสุทธิ\nปริหาน\nปริหาร\nปรี่\nปรีชญา\nปรีชา\nปรี๊ด\nปรีดา\nปรีดิ\nปรีดิ์\nปรีดี\nปรีติ\nปรียะ\nปรียา\nปรึก\nปรึกษา\nปรึง\nปรือ\nปรื๋อ\nปรุ\nปรุง\nปรู\nปรู๋\nปรูด\nปรู๊ด\nปรู๊ดปร๊าด\nปรู๊ฟ\nปฤงคพ\nปฤจฉา\nปฤษฎางค์\nปฤษฐ\nปลก\nปลกเปลี้ย\nปลง\nปล่ง\nปลด\nปล้น\nปลวก\nปลอก\nปล่อง\nปล้อง\nปลอด\nปล้อน\nปลอบ\nปลอม\nปล่อย\nปละ\nปลัก\nปลั๊ก\nปลัง\nปลั่ง\nปลัด\nปลัดขิก\nปลา\nปลาต\nปลาบ\nปลาย\nปลาสเตอร์\nปลาสนาการ\nปล้ำ\nปลิง\nปลิด\nปลิ้น\nปลิโพธ\nปลิม\nปลิ่ม\nปลิว\nปลี\nปลีก\nปลื้ม\nปลุก\nปลูก\nปวกเปียก\nปวง\nป่วง\nปวด\nป่วน\nป้วน\nป้วนเปี้ยน\nป่วย\nปวัตน์\nปวารณา\nปวาล\nปวาส\nปวาฬ\nปวิช\nปวิตร\nปวิธ\nปวิเวก\nปวีณ\nปวุติ\nปเวณี\nปเวส\nปเวสน์\nปศุ\nปสันนะ\nปสันนาการ\nปสาท\nปสาน\nปสาสน์\nปสุ\nปสุต\nปสูติ\nปหังสนะ\nปหาน\nปหาร\nปหาส\nปอ\nป้อ\nป๋อ\nปอก\nปอง\nป่อง\nป้อง\nปอด\nปอน\nป้อน\nปอนด์\nปอเนาะ\nปอบ\nป้อแป้\nปอม\nป้อม\nป๋อม\nปอย\nป้อย\nป้อยอ\nปะ\nปะกน\nปะกัง\nปะการัง\nปะกำ\nปะขาว\nปะงาบ\nปะตาปา\nปะตาระกาหลา\nปะติดปะต่อ\nปะติยาน\nปะทะ\nปะทะปะทัง\nปะทุ\nปะทุน\nปะปน\nปะมง\nปะราลี\nปะรำ\nปะไร\nปะลอม\nปะเลง\nปะแล่ม\nปะโลง\nปะวะหล่ำ\nปะหงับ\nปะหนัน\nปะหัง\nปะเหลาะ\nปัก\nปักข์\nปักเป้า\nปักษ์\nปักษา\nปักษิน\nปักษี\nปัง\nปั๋ง\nปังสุ์\nปังสุกุล\nปัจจัตตะ\nปัจจันต์\nปัจจันตคาม\nปัจจันตชนบท\nปัจจันตประเทศ\nปัจจัย\nปัจจามิตร\nปัจจุคมน์\nปัจจุทธรณ์\nปัจจุบัน\nปัจจุสมัย\nปัจเจก\nปัจโจปการกิจ\nปัจฉา\nปัจฉิม\nปัจถรณ์\nปัจนึก\nปัจยาการ\nปัจเวกขณ์\nปัชชุน\nปัญจนที\nปัญจวัคคีย์\nปัญจก\nปัญจกะ\nปัญจมี\nปัญจวีสติ\nปัญญัติ\nปัญญา\nปัญหา\nปัฏ\nปัฏนะ\nปัฐยาวัต\nปัณฑรหัตถี\nปัณณะ\nปัณณาส\nปัณณาสก์\nปัณรสี\nปัณหิ\nปัด\nปัตคาด\nปัตตะ\nปัตตานึก\nปัตตานุโมทนา\nปัตตาเวีย\nปัตติ\nปัตติก\nปัตถร\nปัตถะ\nปัตนิ\nปัตนี\nปัตหล่า\nปัถพี\nปัถวี\nปัทม์\nปัทมะ\nปัทมาสน์\nปัน\nปั่น\nปั้น\nปั้นจั่น\nปันจุเหร็จ\nปั้นลม\nปั้นหยา\nปั้นเหน่ง\nปับ\nปั๊บ\nปัปผาสะ\nปัพพาชนียกรรม\nปัพภาระ\nปั๊ม\nปัยกา\nปัยยิกา\nปัวเปีย\nปัศจิม\nปัศตัน\nปัสสาวะ\nปัสสาสะ\nปา\nป่า\nป้า\nปาก\nปาง\nป้าง\nปาจรีย์\nปาจิตตีย์\nปาจีน\nปาฏลิ\nปาฏิบท\nปาฏิบุคลิก\nปาฏิโภค\nปาฏิหาริย์\nปาฐก\nปาฐกถา\nปาฐะ\nปาณกชาติ\nปาณะ\nปาณาติบาต\nปาณิ\nปาณี\nปาด\nปาติโมกข์\nปาตี\nปาเต๊ะ\nปาท่องโก๋\nปาทังกา\nปาทาน\nปาทุกา\nปาน\nป่าน\nป้าน\nปานะ\nปานียะ\nป้าบ\nป๊าบ\nปาพจน์\nปาม\nปาโมกข์\nป่าย\nป้าย\nปายาส\nปาร์เกต์\nปารมี\nปารเมศ\nปาราชิก\nปาริฉัตร\nปาริชาต\nปารุสกวัน\nปาล\nปาล์ม\nปาลิไลยก์\nปาลี\nปาว\nป่าว\nป๊าว\nปาวาร\nปาษาณ\nปาส\nปาสาณ\nปาสาทิกะ\nปาหนัน\nปาหี่\nปำ\nป้ำ\nป้ำเป๋อ\nปิกนิก\nปิ้ง\nปิงคละ\nปิงปอง\nปิฎก\nปิฏฐะ\nปิฐิ\nปิณฑะ\nปิด\nปิตตะ\nปิตา\nปิตามหัยกา\nปิตามหัยยิกา\nปิตุ\nปิตุจฉา\nปิตุภูมิ\nปิตุลา\nปิโตรเลียม\nปิ่น\nปิ่นแก้ว\nปิ่นโต\nปิปผลี\nปิ่ม\nปิ้ม\nปิยะ\nปิยังคุ\nปิโยรส\nปิลันธน์\nปิ๋ว\nปิศาจ\nปิหกะ\nปี\nปี่\nปี้\nปี๋\nปีก\nปีฐะ\nปี๊ด\nปีติ\nปีน\nปีบ\nปี๊บ\nปีศาจ\nปีฬกะ\nปึก\nปึง\nปึ่ง\nปึ๋ง\nปึ้ด\nปึมปื้อ\nปืน\nปื้น\nปือ\nปื้อ\nปื๋อ\nปุ\nปุ๊\nปุก\nปุกปุย\nปุคละ\nปุ้งกี๋\nปุงควะ\nปุงลิงค์\nปุงลึงค์\nปุจฉา\nปุฏะ\nปุณฑริก\nปุด\nปุตตะ\nปุถุชน\nปุนนาค\nปุนภพ\nปุนัพสุ\nปุบ\nปุ๊บ\nปุปผะ\nปุปะ\nปุพพะ\nปุ่ม\nปุ่มป่ำ\nปุ้ม\nปุ๋ม\nปุย\nปุ้ย\nปุ๋ย\nปุรณะ\nปุระ\nปุราณ\nปุราณะ\nปุริมพรรษา\nปุเรจาริก\nปุโรหิต\nปุลลิงค์\nปุลลึงค์\nปุลินท์\nปุโลปุเล\nปุษยะ\nปุสสะ\nปู\nปู่\nปูชกะ\nปูชนียบุคคล\nปูชนียวัตถุ\nปูชนียะ\nปูชา\nปูชิต\nปูด\nปูน\nปูม\nปู้ยี่ปู้ยำ\nปูระ\nปูลู\nเป้\nเป๋\nเปก\nเป๊ก\nเป่ง\nเป้ง\nเป๋ง\nเป็ด\nเปตพลี\nเปตอง\nเป็น\nเปยยาล\nเปร็ง\nเปรต\nเปรม\nเปรย\nเปรอ\nเปรอะ\nเปราะ\nเปรียง\nเปรี้ยง\nเปรี้ยงปร้าง\nเปรียญ\nเปรียบ\nเปรี่ยม\nเปรียว\nเปรี้ยว\nเปรียะ\nเปรี๊ยะ\nเปรื่อง\nเปรื้อย\nเปล\nเปล่ง\nเปลว\nเปลา\nเปล่า\nเปล้า\nเปลาะ\nเปลี้ย\nเปลี่ยน\nเปลี่ยม\nเปลี่ยว\nเปลือก\nเปลือง\nเปลื้อง\nเปลือย\nเปศะ\nเปศัส\nเปสการ\nเปสละ\nเปสุญวาท\nเป๋อ\nเป้อเย้อ\nเปอร์\nเปอร์เซ็นต์\nเปะ\nเปา\nเป่า\nเป้า\nเป๊า\nเป๋า\nเป๋าฮื้อ\nเปาะ\nเป๊าะ\nเปาะเปี๊ยะ\nเปาะแปะ\nเปิก\nเปิง\nเปิงมาง\nเปิด\nเปิ่น\nเปิบ\nเปิ๊บ\nเปีย\nเปียก\nเปี๊ยก\nเปี๊ยบ\nเปี่ยม\nเปี้ยว\nเปี๊ยว\nเปียะ\nเปี๊ยะ\nเปือก\nเปื้อน\nเปื่อย\nแป\nแป้ง\nแป๋ง\nแปด\nแป๊ด\nแปทู\nแป้น\nแป๊น\nแปบ\nแป๊บ\nแปม\nแปร\nแปร๋\nแปรก\nแปรง\nแปร่ง\nแปร๊ด\nแปร้น\nแปร๋น\nแปรปรวน\nแประ\nแปล\nแปล้\nแปลก\nแปลง\nแปลน\nแปลบ\nแปล๊บ\nแป้ว\nแป๊ว\nแปะ\nแป๊ะ\nแป๊ะซะ\nโป\nโป่\nโป้\nโป๊\nโปก\nโป๊ก\nโป๊กเกอร์\nโปกขรณี\nโปกขรพรรษ\nโปเก\nโปง\nโป่ง\nโป้ง\nโป่งข่าม\nโปงลาง\nโป่งวิด\nโปฐบท\nโปฐปทมาส\nโปดก\nโปตถกะ\nโปน\nโป๊ป\nโป๊ยเซียน\nโปรแกรม\nโปรง\nโปร่ง\nโปรด\nโปรตอน\nโปรตีน\nโปรเตสแตนต์\nโปรแทรกเตอร์\nโปรย\nโปล่ง\nโปลิโอ\nโปโล\nโปสก\nโปสต์การ์ด\nโปะ\nโป๊ะ\nโป๊ะจ้าย\nไป\nไป่\nไป๋\nไปยาล\nไปรษณีย์\nไปรษณียบัตร\nไปรษณียภัณฑ์\nไปรษณียากร\nไปล่\nไปศาจ\nผก\nผกา\nผกาย\nผคม\nผง\nผงก\nผงม\nผงะ\nผงาด\nผง่าน\nผจง\nผจญ\nผจัญ\nผจาน\nผชุม\nผณิน\nผณินทร\nผณิศวร\nผด\nผดุง\nผเดิน\nผทม\nผนวก\nผนวช\nผนัง\nผนิด\nผนึก\nผม\nผยอง\nผรณาปีติ\nผรสุ\nผริต\nผรุสวาท\nผล\nผลคุน\nผลคุนี\nผล็อย\nผละ\nผลัก\nผลัด\nผลับ\nผลัวะ\nผลา\nผลาญ\nผลานิสงส์\nผลาผล\nผลาหาร\nผลิ\nผลิกะ\nผลิต\nผลิน\nผลี\nผลีผลาม\nผลึก\nผลึ่ง\nผลือ\nผลุ\nผลุง\nผลุด\nผลุน\nผลุนผลัน\nผลุบ\nผลุบผลับ\nผลุย\nผลู\nผวน\nผวย\nผวา\nผสม\nผสาน\nผอง\nผ่อง\nผ่อน\nผอบ\nผอม\nผ็อย\nผอูน\nผะ\nผะดา\nผะสา\nผัก\nผัคคุณ\nผัคคุณี\nผัง\nผัด\nผัน\nผับ\nผัว\nผัวะ\nผัสสะ\nผัสสาหาร\nผา\nผ่า\nผ้า\nผาก\nผาง\nผ่าง\nผาณิต\nผาด\nผาติ\nผ่าน\nผาม\nผาย\nผ่ายผอม\nผาล\nผาลคุน\nผาลา\nผ่าว\nผาสุก\nผ้าฮาด\nผำ\nผ้ำ\nผิ\nผิง\nผิด\nผิตะ\nผิน\nผิว\nผี\nผี้ว์\nผึง\nผึ่ง\nผึ้ง\nผึ้งรวง\nผืน\nผื่น\nผุ\nผุด\nผุยผง\nผุสราคา\nผู้\nผูก\nเผ\nเผง\nเผชิญ\nเผ็ด\nเผด็จ\nเผดิม\nเผดียง\nเผ่น\nเผนิก\nเผย\nเผยอ\nเผยิบ\nเผยิบผยาบ\nเผล\nเผล่\nเผล็ด\nเผลอ\nเผลอไผล\nเผละ\nเผลาะ\nเผลาะแผละ\nเผลียง\nเผอเรอ\nเผอิญ\nเผอิล\nเผะ\nเผา\nเผ่า\nเผ้า\nเผาะ\nเผิ้ง\nเผิน\nเผียน\nเผือ\nเผื่อ\nเผือก\nเผือด\nเผือน\nเผื่อน\nแผ่\nแผก\nแผง\nแผด\nแผน\nแผ่น\nแผนก\nแผล\nแผลง\nแผล็บ\nแผล็ว\nแผละ\nแผ่ว\nแผ้ว\nโผ\nโผง\nโผฏฐัพพะ\nโผน\nโผเผ\nโผย\nโผล่\nโผลกเผลก\nโผละ\nโผอน\nโผะ\nไผ\nไผ่\nไผท\nฝน\nฝรั่ง\nฝรั่งเศส\nฝ่อ\nฝอย\nฝัก\nฝัง\nฝั่ง\nฝัด\nฝัน\nฝา\nฝ่า\nฝ้า\nฝาก\nฝาง\nฝาด\nฝาน\nฝาย\nฝ่าย\nฝ้าย\nฝิ่น\nฝี\nฝี่\nฝีก\nฝึก\nฝืด\nฝืน\nฝุ่น\nฝูง\nเฝ้า\nเฝือ\nเฝือก\nเฝือง\nเฝื่อน\nแฝก\nแฝง\nแฝด\nใฝ่\nไฝ\nพก\nพกุล\nพง\nพงศ์\nพงศกร\nพงศธร\nพงศา\nพงศาวดาร\nพจน์\nพจนา\nพจนานุกรม\nพจนารถ\nพจนีย์\nพจมาน\nพจี\nพชระ\nพญา\nพญาลอ\nพณิช\nพณิชย์\nพดด้วง\nพธู\nพนันดร\nพนาดร\nพนาดอน\nพนาราม\nพนาลัย\nพนาลี\nพนาวาส\nพนาเวศ\nพนาศรม\nพนาสณฑ์\nพนาสัณฑ์\nพเนจร\nพ่น\nพ้น\nพนม\nพนอง\nพนอม\nพนัก\nพนักงาน\nพนัง\nพนัน\nพนัส\nพนา\nพนาย\nพนิดา\nพนิต\nพบ\nพม่า\nพยนต์\nพยศ\nพยัก\nพยักพเยิด\nพยัคฆ์\nพยัคฆา\nพยัคฆิน\nพยัคฆี\nพยัชน์\nพยัญชนะ\nพยัต\nพยับ\nพยากรณ์\nพยาฆร์\nพยางค์\nพยาธิ\nพยาน\nพยาบาท\nพยาบาล\nพยาม\nพยามะ\nพยายาม\nพยุ\nพยุง\nพยุหยาตรา\nพยุหโยธา\nพยุหเสนา\nพยุหะ\nพยู่ห์\nพเยีย\nพร\nพรต\nพรม\nพรรค\nพรรค์\nพรรคานต์\nพรรณ\nพรรณนา\nพรรดึก\nพรรลาย\nพรรษ\nพรรษา\nพรรเอิญ\nพรวด\nพรวน\nพรหม\nพรหมจรรย์\nพรหมจาริณี\nพรหมจารี\nพรหมา\nพรหมาสตร์\nพรหมินทร์\nพรอก\nพร่อง\nพร้อง\nพรอด\nพร้อม\nพร้อมพรัก\nพร่อย\nพร้อย\nพระ\nพระนอม\nพระนาด\nพระฮาม\nพรักพร้อม\nพรั่ง\nพรัด\nพรั่น\nพรับ\nพร่า\nพร้า\nพราก\nพราง\nพร่าง\nพราด\nพราน\nพราย\nพราว\nพราหมณ์\nพราหมณะ\nพราหมณี\nพราหมี\nพรำ\nพร่ำ\nพริก\nพริ้ง\nพริบ\nพริ้ม\nพรึง\nพรึน\nพรึบ\nพรึ่บ\nพรืด\nพรุ\nพรุ่ง\nพรุน\nพรู\nพรูด\nพฤกษ์\nพฤกษชาติ\nพฤกษเทวดา\nพฤกษราช\nพฤกษศาสตร์\nพฤกษา\nพฤฒ\nพฤฒา\nพฤฒาจารย์\nพฤฒิ\nพฤต\nพฤติ\nพฤทธ์\nพฤทธิ์\nพฤนต์\nพฤนท์\nพฤศจิก\nพฤศจิกายน\nพฤษภ\nพฤษภาคม\nพฤหัสบดี\nพล\nพละ\nพลากร\nพลาดิศัย\nพลาธิการ\nพลานามัย\nพลบ\nพลวก\nพลวง\nพลวัต\nพลศาสตร์\nพลอ\nพล้อ\nพลอง\nพลอด\nพลอน\nพลอมแพลม\nพลอย\nพล่อย\nพลั่ก\nพลัง\nพลั่ง\nพลั้ง\nพลัด\nพลัน\nพลับ\nพลับพลา\nพลับพลึง\nพลั่ว\nพล่า\nพลาง\nพลาญ\nพลาด\nพล่าน\nพลาม\nพล่าม\nพลาย\nพลาสติก\nพลาสมา\nพลาหก\nพลำ\nพล้ำ\nพลำภัง\nพลิก\nพลิพัท\nพลิ้ว\nพลี\nพลุ\nพลุก\nพลุ่ก\nพลุกพล่าน\nพลุ่ง\nพลุ้ย\nพลู\nพลูโต\nพลูโทเนียม\nพวก\nพวง\nพ่วง\nพวน\nพวย\nพสก\nพสุ\nพสุธา\nพสุสงกรานต์\nพหล\nพหุ\nพหุล\nพหู\nพอ\nพ่อ\nพ้อ\nพอก\nพอง\nพ้อง\nพอน\nพ้อม\nพอโลเนียม\nพะ\nพะงา\nพะงาบ\nพะจง\nพะทำมะรง\nพะนอ\nพะเน้าพะนอ\nพะเนิน\nพะเนียง\nพะแนง\nพะพาน\nพะพิง\nพะเพิง\nพะยอม\nพ่ะย่ะค่ะ\nพะยูง\nพะยูน\nพะเยิบ\nพะเยิบพะยาบ\nพะรุงพะรัง\nพะโล้\nพะไล\nพะวง\nพะวักพะวน\nพะวา\nพะว้าพะวัง\nพะอง\nพะอากพะอำ\nพะอืดพะอม\nพัก\nพักตร์\nพักตรา\nพักร\nพัง\nพังกา\nพังงา\nพังผืด\nพังพวย\nพังพอน\nพังพาน\nพังพาบ\nพังเพย\nพัช\nพัชนี\nพัชระ\nพัญจน์\nพัฒนะ\nพัฒนา\nพัฒนากร\nพัฒนาการ\nพัด\nพัดชา\nพัดดึงส์\nพัตร\nพัทธ์\nพัทธยา\nพัทธสีมา\nพัทร\nพัน\nพันตู\nพันทาง\nพันธ์\nพันธะ\nพันธกรณี\nพันธบัตร\nพันธมิตร\nพันธนะ\nพันธนาคาร\nพันธนาการ\nพันธุ์\nพันธุกรรม\nพันลึก\nพันลือ\nพันเลิศ\nพันเอิญ\nพับ\nพัลลภ\nพัลวัน\nพัว\nพัวะ\nพัศดี\nพัสดุ\nพัสตร์\nพัสถาน\nพา\nพาก\nพากเพียร\nพากย์\nพาง\nพ่าง\nพาชี\nพาณิช\nพาณิชย์\nพาณิชยกรรม\nพาณิชยการ\nพาณิชยศาสตร์\nพาณิชยศิลป์\nพาณินี\nพาณี\nพาณีนี\nพาด\nพาท\nพาทย์\nพาธ\nพาธา\nพาน\nพ่าน\nพานร\nพานรินทร์\nพาม\nพาย\nพ่าย\nพายม้า\nพายัพ\nพายุ\nพาร์เซก\nพารณ\nพารา\nพาราฟิน\nพาล\nพาลา\nพาลี\nพาลุก\nพาโล\nพาไล\nพาส\nพาสน์\nพาสนา\nพาสุกรี\nพ่าห์\nพาหนะ\nพาหะ\nพาหา\nพาหิรกะ\nพาหิระ\nพาหุ\nพาหุรัด\nพาหุสัจจะ\nพาเหียร\nพาฬ\nพำ\nพำนัก\nพำพึม\nพำลา\nพิกล\nพิกสิต\nพิกัด\nพิกัติ\nพิกัน\nพิการ\nพิกุล\nพิเคราะห์\nพิฆน์\nพิฆเนศ\nพิฆเนศวร\nพิฆาต\nพิง\nพิจัย\nพิจาร\nพิจารณ์\nพิจารณา\nพิจิก\nพิจิต\nพิจิตร\nพิชญ์\nพิชัย\nพิชาน\nพิชิต\nพิเชฐ\nพิเชียร\nพิฑูรย์\nพิณ\nพิดทูล\nพิดาน\nพิโดร\nพิตร\nพิถี\nพิถีพิถัน\nพิทย\nพิทย์\nพิทยา\nพิทยาคม\nพิทยาคาร\nพิทยาธร\nพิทยาลัย\nพิทักษ์\nพิทูร\nพิเทศ\nพิธาน\nพิธี\nพิธุ\nพินทุ\nพินอบพิเทา\nพินัย\nพินาศ\nพินิจ\nพินิต\nพินิศ\nพินิศจัย\nพิเนต\nพิบัติ\nพิบุล\nพิบูล\nพิปริต\nพิปลาส\nพิพรรธ\nพิพรรธน์\nพิพักพิพ่วน\nพิพัฒ\nพิพัฒน์\nพิพากษ์\nพิพากษา\nพิพาท\nพิพิธ\nพิพิธภัณฑ์\nพิพิธภัณฑสถาน\nพิภพ\nพิภัช\nพิภาค\nพิภูษณะ\nพิเภก\nพิมปะการัง\nพิมพ์\nพิมพการัง\nพิมพา\nพิมพาภรณ์\nพิมล\nพิมเสน\nพิมาน\nพิมุข\nพิโมกข์\nพิโมกษ์\nพิโยกพิเกน\nพิโยค\nพิรอด\nพิระ\nพิรากล\nพิราบ\nพิราม\nพิราลัย\nพิริยะ\nพิรี้พิไร\nพิรุณ\nพิรุธ\nพิรุฬห์\nพิเรนทร์\nพิเราะ\nพิโรธ\nพิไร\nพิลังกาสา\nพิลาป\nพิลาส\nพิลิปดา\nพิลึก\nพิลึกกึกกือ\nพิลึกพิลั่น\nพิโลน\nพิไล\nพิศ\nพิศวง\nพิศวาส\nพิศาล\nพิศุทธ์\nพิศุทธิ์\nพิเศษ\nพิษ\nพิษฐาน\nพิษนาศน์\nพิสดาร\nพิสมร\nพิสมัย\nพิสัง\nพิสัช\nพิสัย\nพิสิฐ\nพิสุทธิ์\nพิสูจน์\nพิหค\nพิหาร\nพิฬาร\nพี\nพี่\nพี้\nพีชคณิต\nพีระมิด\nพึง\nพึ่ง\nพึ่บ\nพึ่บพั่บ\nพึม\nพึมพำ\nพืช\nพืด\nพื้น\nพุ\nพุก\nพุกาม\nพุง\nพุ่ง\nพุงดอ\nพุฒ\nพุฒิ\nพุด\nพุดตาน\nพุทธ\nพุทธะ\nพุทธังกูร\nพุทธางกูร\nพุทธันดร\nพุทธาภิเษก\nพุทธาวาส\nพุทธิ\nพุทโธ่\nพุทรา\nพุธ\nพุ่ม\nพุมเรียง\nพุ้ย\nพู\nพูพอน\nพู่\nพูด\nพูน\nพู้น\nพู่ระหง\nเพ\nเพ็ก\nเพกา\nเพคะ\nเพ็ง\nเพ่ง\nเพ็จ\nเพชฉลูกรรม\nเพชฌฆาต\nเพชร\nเพชรดา\nเพชรปาณี\nเพชรฤกษ์\nเพชรายุธ\nเพชรกลับ\nเพชรสังฆาต\nเพชรหลีก\nเพชรหึง\nเพ็ญ\nเพฑูริย์\nเพณี\nเพ็ดทูล\nเพดาน\nเพท\nเพทนา\nเพทาย\nเพทุบาย\nเพโทบาย\nเพ่นพ่าน\nเพนียด\nเพไนย\nเพ้ย\nเพรง\nเพรซีโอดิเมียม\nเพรา\nเพราะ\nเพริด\nเพริศ\nเพรียก\nเพรียง\nเพรียบ\nเพรี้ยม\nเพรียว\nเพรื่อ\nเพรือง\nเพล\nเพลง\nเพล็ด\nเพล้โพล้\nเพลา\nเพลาะ\nเพลิง\nเพลิดเพลิน\nเพลิน\nเพลีย\nเพลี้ย\nเพลี่ยง\nเพศ\nเพส\nเพสลาด\nเพ่อ\nเพ้อ\nเพ้อเจ้อ\nเพอิญ\nเพะ\nเพา\nเพาะ\nเพิก\nเพิง\nเพิ่ง\nเพิดเพ้ย\nเพิ่ม\nเพี้ย\nเพียง\nเพี้ยง\nเพียงออ\nเพี้ยน\nเพียบ\nเพียร\nเพื่อ\nเพื่อน\nแพ\nแพ้\nแพง\nแพ่ง\nแพงพวย\nแพทย์\nแพทยศาสตร์\nแพน\nแพ่น\nแพนก\nแพนงเชิง\nแพร\nแพร่\nแพรก\nแพร่ง\nแพรว\nแพร้ว\nแพลง\nแพลทินัม\nแพล็บ\nแพลม\nแพลเลเดียม\nแพละ\nแพละโลม\nแพว\nแพ้ว\nแพศย์\nแพศยา\nแพะ\nโพ\nโพก\nโพกพาย\nโพง\nโพงพาง\nโพชฌงค์\nโพซิตรอน\nโพด\nโพทะเล\nโพแทสเซียม\nโพธ\nโพธิ\nโพธิ์\nโพน\nโพ้น\nโพนทะนา\nโพบาย\nโพย\nโพยก๊วน\nโพยม\nโพรก\nโพรง\nโพรโทแอกทิเนียม\nโพรมีเทียม\nโพระดก\nโพล่\nโพลง\nโพล่ง\nโพล้ง\nโพลน\nโพล้เพล้\nโพละ\nโพสพ\nไพ\nไพ่\nไพจิตร\nไพชน\nไพชยนต์\nไพฑูรย์\nไพที\nไพบูลย์\nไพพรรณ\nไพร\nไพร่\nไพรจิตร\nไพรชน\nไพรชยนต์\nไพรฑูรย์\nไพรที\nไพรบูลย์\nไพรเราะ\nไพรัช\nไพรำ\nไพริน\nไพรินทร์\nไพรี\nไพเราะ\nไพโรจน์\nไพล\nไพล่\nไพศาขะ\nไพศาล\nไพเศษ\nไพสพ\nไพสิฐ\nไพหาร\nฟก\nฟ้ง\nฟรักโทส\nฟรี\nฟลูออรีน\nฟ่อ\nฟ้อ\nฟอก\nฟอง\nฟ่อง\nฟ้อง\nฟอด\nฟอน\nฟ่อน\nฟ้อน\nฟ้อแฟ้\nฟอร์มาลดีไฮด์\nฟอร์มาลิน\nฟอสฟอรัส\nฟอสเฟต\nฟัก\nฟักฟุ้น\nฟัง\nฟังก์ชัน\nฟัด\nฟัน\nฟั่น\nฟั้น\nฟ้า\nฟาก\nฟาง\nฟ่าง\nฟาด\nฟาทอม\nฟาน\nฟ่าม\nฟาย\nฟาร์ม\nฟาสซิสต์\nฟิด\nฟิต\nฟิบ\nฟิล์ม\nฟิวส์\nฟิสิกส์\nฟี่\nฟี้\nฟืดฟาด\nฟืน\nฟื้น\nฟืม\nฟุ\nฟุ้ง\nฟุต\nฟุน\nฟุบ\nฟุ่บ\nฟุ่มเฟือย\nฟุลสแก๊ป\nฟู\nฟู่\nฟูก\nฟูด\nฟูม\nเฟ็ด\nเฟ้น\nเฟลด์สปาร์\nเฟ้อ\nเฟอร์เมียม\nเฟอะ\nเฟอะฟะ\nเฟะ\nเฟะฟะ\nเฟิน\nเฟี้ยม\nเฟี้ยว\nเฟือ\nเฟื้อ\nเฟือง\nเฟื่อง\nเฟื้อง\nเฟือน\nเฟือย\nเฟื้อย\nแฟ่\nแฟง\nแฟชั่น\nแฟน\nแฟบ\nแฟ้ม\nแฟรนเซียม\nแฟลกซ์\nแฟลต\nแฟะ\nโฟกัส\nไฟ\nภควดี\nภควัต\nภควันต์\nภควัม\nภควา\nภควาน\nภคะ\nภคันทลา\nภคินี\nภณะ\nภณิดา\nภพ\nภมร\nภมริน\nภมรี\nภมุกา\nภยันตราย\nภยาคติ\nภระ\nภรณี\nภรต\nภรรดร\nภรรดา\nภรรยา\nภระมร\nภระมรี\nภราดร\nภราดรภาพ\nภราดา\nภริยา\nภฤศ\nภวะ\nภวตัณหา\nภวนะ\nภวังค์\nภวังคจิต\nภักดี\nภักตะ\nภักติ\nภักษ์\nภักษา\nภักษาหาร\nภัค\nภัคน์\nภังคะ\nภังคี\nภัจ\nภัณฑ์\nภัณฑาคาร\nภัณฑาคาริก\nภัณฑารักษ์\nภัณฑนะ\nภัณฑู\nภัต\nภัตตาคาร\nภัตตาหาร\nภัตร\nภัทระ\nภัทรกัป\nภัพ\nภัย\nภัสดา\nภัสตรา\nภัสมะ\nภัสสร\nภา\nภาค\nภาคย์\nภาคยานุวัติ\nภาคินี\nภาคิไนย\nภาคี\nภาคียะ\nภาชนะ\nภาชี\nภาณ\nภาณวาร\nภาณกะ\nภาณี\nภาณุ\nภาดร\nภาดา\nภาตระ\nภาตา\nภาตุ\nภาติกะ\nภาติยะ\nภาพ\nภาพย์\nภาม\nภาย\nภาร\nภาระ\nภารดี\nภารต\nภารตี\nภารยทรัพย์\nภารยา\nภารา\nภาวนา\nภาวะ\nภาษ\nภาษณ์\nภาษา\nภาษิต\nภาษี\nภาส\nภาสน์\nภาสวร\nภาสา\nภาสุระ\nภิกขา\nภิกขาจาร\nภิกขุ\nภิกขุนี\nภิกษา\nภิกษาจาร\nภิกษาหาร\nภิกษุ\nภิกษุณี\nภิงคาร\nภิญโญ\nภิตติ\nภินท์\nภินทนาการ\nภิยโย\nภิรมย์\nภิรมย์สุรางค์\nภิษัช\nภิสัก\nภีตะ\nภีมะ\nภีรุ\nภุกต์\nภุขัน\nภุช\nภุชงค์\nภุต\nภุมมะ\nภุมรัตน์\nภุมวาร\nภุมรา\nภุมริน\nภุมรี\nภุมเรศ\nภู\nภู่\nภูต\nภูติ\nภูม\nภูมิ\nภูมี\nภูริ\nภูรี\nภูวดล\nภูวนาถ\nภูวเนตร\nภูวไนย\nภูษา\nภูษิต\nเภกะ\nเภตรา\nเภท\nเภทุบาย\nเภรี\nเภสัช\nโภค\nโภคะ\nโภคิน\nโภคี\nโภไคย\nโภไคศวรรย์\nโภช\nโภชย์\nโภชก\nโภชนะ\nโภชนา\nโภชนาหาร\nโภชนียะ\nไภริน\nไภรี\nไภษัชคุรุ\nไภษัชย์\nมกร\nมกราคม\nมกุฎ\nมคธ\nมฆวัน\nมฆะ\nมฆา\nม่ง\nมงกุฎ\nมงโกรย\nมงคล\nมงคลวาร\nมณฑ์\nมณฑก\nมณฑนะ\nมณฑป\nมณฑล\nมณฑา\nมณฑารพ\nมณฑิระ\nมณเฑียร\nมณี\nมด\nมตะ\nมตกภัต\nมติ\nมทนะ\nมทะ\nมธุ\nมธุกร\nมธุการี\nมธุลีห์\nมธุระ\nมธุรพจน์\nมน\nมนินทรีย์\nม่น\nมนต์\nมนตร์\nมนตรี\nมนท์\nมนทิราลัย\nมนเทียร\nมนสิการ\nมนัส\nมนัสวี\nมนินทรีย์\nมนิมนา\nมนิลา\nมนุญ\nมนุษย์\nมนุษยชาติ\nมนุษยธรรม\nมนุษย์มนา\nมนุษยโลก\nมนุษยศาสตร์\nมนุษยสัมพันธ์\nมนุสาร\nมนู\nมนูสาร\nมโน\nมโนช\nมโนชญ์\nมโนราห์\nมโนสาเร่\nมโนห์รา\nมมังการ\nมยุรฉัตร\nมยุระ\nมยุรา\nมยุรี\nมยุเรศ\nมยูร\nมรกต\nมรคา\nมรฑป\nมรณ์\nมรณะ\nมรณกรรม\nมรณบัตร\nมรณภัย\nมรณภาพ\nมรดก\nมรรค\nมรรคา\nมรรตัย\nมรรยาท\nมรรษ\nมรสุม\nมริจ\nมริยาท\nมรีจิ\nมรุต\nมฤค\nมฤคย์\nมฤคศิระ\nมฤคศิรมาส\nมฤคเศียร\nมฤคินทร์\nมฤเคนทร์\nมฤดก\nมฤต\nมฤตยู\nมฤทุ\nมล\nมละ\nมลัก\nมลังเมลือง\nมล้าง\nมลาย\nมลายู\nมวก\nม่วง\nมวน\nม่วน\nม้วน\nม้วนต้วน\nมวย\nม้วย\nมวล\nมหกรรม\nมหรณพ\nมหรรณพ\nมหรสพ\nมหัจฉริยะ\nมหัต\nมหัทธนะ\nมหันต์\nมหันตโทษ\nมหัพภาค\nมหัศจรรย์\nมหา\nมหากฐิน\nมหากาฬ\nมหาขันธกะ\nมหาจักร\nมหาชน\nมหาชัย\nมหาชาติ\nมหาโชตรัต\nมหาดไทย\nมหาดเล็ก\nมหาตมะ\nมหาไถ่\nมหาเทพ\nมหาเทพี\nมหาเทวี\nมหาธาตุ\nมหานิกาย\nมหานิล\nมหาบพิตร\nมหาบัณฑิต\nมหาพน\nมหาพรหม\nมหาภารตะ\nมหาภิเนษกรมณ์\nมหาภูต\nมหาเมฆ\nมหายาน\nมหายุค\nมหาราช\nมหาฤกษ์\nมหาละลวย\nมหาละลาย\nมหาวงศ์\nมหาวรรค\nมหาวิทยาลัย\nมหาศักราช\nมหาศาล\nมหาสงกรานต์\nมหาสดมภ์\nมหาสดำ\nมหาสมุทร\nมหาสาวก\nมหาหงส์\nมหาหิงคุ์\nมหาอำนาจ\nมหาอุจ\nมหาอุด\nมหาอุปรากร\nมหาอุปราช\nมหิ\nมหิดล\nมหิธร\nมหิป\nมหิงส์\nมหิทธิ\nมหินท์\nมหิมา\nมหิศร\nมหิศวร\nมหิษ\nมหิษี\nมหึมา\nมเหยงค์\nมเหศ\nมเหศวร\nมเหศักดิ์\nมเหสักข์\nมเหสิ\nมเหสี\nมเหาฬาร\nมโหรสพ\nมโหระทึก\nมโหรี\nมโหฬาร\nมไหศวรรย์\nมอ\nมอง\nมองโกลอยด์\nมองโกเลีย\nมองคร่อ\nมอญ\nมอด\nม่อต้อ\nมอเตอร์\nมอเตอร์ไซค์\nมอน\nม่อน\nมอบ\nมอม\nมอมแมม\nม่อย\nมอร์ฟีน\nมอระกู่\nมอลโทส\nม่อลอกม่อแลก\nม่อห้อม\nม่อฮ่อม\nมะ\nมะกรูด\nมะกล่ำ\nมะกอก\nมะก่อง\nมะกะโรนี\nมะกา\nมะเกลือ\nมะเกี๋ยง\nมะข่วง\nมะขวิด\nมะขาม\nมะเขือ\nมะแข่น\nมะคังแดง\nมะค่า\nมะคำไก่\nมะคำดีควาย\nมะงั่ว\nมะงุมมะงาหรา\nมะซัก\nมะซาง\nมะดัน\nมะดีหวี\nมะดูก\nมะเดหวี\nมะเดื่อ\nมะต้อง\nมะตะบะ\nมะตาด\nมะตาหะรี\nมะตึ่ง\nมะตื๋น\nมะตูม\nมะแตก\nมะโต\nมะนาว\nมะปราง\nมะปริง\nมะฝ่อ\nมะพร้าว\nมะพลับ\nมะพูด\nมะแพน\nมะแพร้ว\nมะเฟือง\nมะแฟน\nมะไฟ\nมะม่วง\nมะม่าว\nมะมี่\nมะมื่น\nมะมุด\nมะเมอ\nมะเมีย\nมะเมื่อย\nมะแม\nมะยง\nมะยม\nมะระ\nมะริด\nมะรืน\nมะรุม\nมะรุมมะตุ้ม\nมะเร็ง\nมะเรื่อง\nมะโรง\nมะลอกมะแลก\nมะละกอ\nมะลิ\nมะลื่น\nมะลืมดำ\nมะลุลี\nมะแว้ง\nมะสัง\nมะเส็ง\nมะหวด\nมะหะหมัด\nมะหาด\nมะหิ่ง\nมะเหงก\nมะอึก\nมะฮอกกานี\nมัก\nมักกะโรนี\nมักกะลีผล\nมักกะสัน\nมักขะ\nมั่กขั้ก\nมักขิกา\nมัค\nมัคคะ\nมัคคุเทศก์\nมัคนายก\nมัฆวาน\nมั่ง\nมังกง\nมังกร\nมังกุ\nมังคละ\nมังค่า\nมังคุด\nมังตาน\nมังสวิรัติ\nมังสะ\nมังสี\nมัจจะ\nมัจจุ\nมัจฉริยะ\nมัจฉรี\nมัจฉะ\nมัจฉา\nมัชชะ\nมัชวิรัติ\nมัชชาระ\nมัชฌันติกสมัย\nมัชฌิม\nมัชฌิมา\nมัญจา\nมัญชิษฐา\nมัญชุ\nมัญชุสา\nมัญชูสา\nมัญเชฏฐะ\nมัฏฐะ\nมัณฑนศิลป์\nมัณฑนา\nมัด\nมัตตะ\nมัตตัญญู\nมัตตา\nมัตติกา\nมัตถกะ\nมัตถลุงค์\nมัตสยะ\nมัตสยา\nมัตสระ\nมัตสริน\nมัททวะ\nมัทนะ\nมัทยะ\nมัธยฐาน\nมัธยม\nมัธยันห์\nมัธยัสถ์\nมัน\nมั่น\nมันตา\nมันถะ\nมันทิระ\nมันทิราลัย\nมับ\nมั้ม\nมัมมี่\nมัย\nมัลละ\nมัลลิกา\nมัว\nมัวซัว\nมั่ว\nมัศยา\nมัสตุ\nมัสตาร์ด\nมัสมั่น\nมัสยิด\nมัสรู่\nมัสลิน\nมัสสุ\nมา\nม้า\nมาก\nมาคสิระ\nมาฆบูชา\nมาฆะ\nม้าง\nมางสะ\nมาณพ\nมาณวิกา\nมาด\nมาดา\nมาตงค์\nมาตร\nมาตรา\nมาตฤ\nมาตังคะ\nมาตา\nมาตามหัยกะ\nมาตามหัยกา\nมาตามหัยยิกา\nมาติกะ\nมาติกา\nมาตุ\nมาตุจฉา\nมาตุรงค์\nมาตุเรศ\nมาตุละ\nมาตุลา\nมาตุลานี\nมาทะ\nมาธยมิก\nมาธยมิกะ\nมาธุระ\nมาธุสร\nมาธูระ\nมาน\nม่าน\nม้าน\nมานพ\nมานะ\nมานัต\nมานัส\nมานิต\nมานี\nมานุษ\nมานุษยวิทยา\nมาโนชญ์\nมาบ\nมาภา\nม้าม\nม่าย\nมายา\nมาร\nมาราธิราช\nมารค\nมารดร\nมารดา\nมารยา\nมารยาท\nมารศรี\nมารษา\nมาริต\nมารุต\nมาลย์\nมาลัย\nมาลา\nมาลาตี\nมาลาเรีย\nมาลินี\nมาลี\nมาลุต\nมาศ\nมาส\nมาสก\nมาห์\nม่าห์\nมาหิส\nม่าเหมี่ยว\nมาฬก\nมิ\nมิค\nมิคสัญญี\nมิ่ง\nมิจฉา\nมิด\nมิตร\nมิติ\nมิเตอร์\nมิถยา\nมิถุน\nมิถุนายน\nมิทธะ\nมินตรา\nมินตา\nมินหม้อ\nมิ่ม\nมิ้ม\nมิไย\nมิรันตี\nมิลลิกรัม\nมิลลิบาร์\nมิลลิเมตร\nมิลลิลิตร\nมิลักขะ\nมิลักขู\nมิส\nมิสกรี\nมิสกวัน\nมิสซา\nมี\nมี่\nมีด\nมีเทน\nมีน\nมีนาคม\nมี่สั้ว\nมึง\nมึน\nมืด\nมืน\nมื่น\nมือ\nมื้อ\nมุ\nมุก\nมุกดา\nมุกดาหาร\nมุกุระ\nมุข\nมุขเด็จ\nมุขยประโยค\nมุโขโลกนะ\nมุคคะ\nมุง\nมุ่ง\nมุ้ง\nมุจฉา\nมุจนะ\nมุจลินท์\nมุญจนะ\nมุญชะ\nมุฐิ\nมุณฑกะ\nมุณฑะ\nมุด\nมุตกิด\nมุตฆาต\nมุตตะ\nมุตตา\nมุตติ\nมุตะ\nมุติ\nมุททา\nมุทธชะ\nมุทธา\nมุทธาภิเษก\nมุทรา\nมุทริกา\nมุทะลุ\nมุทา\nมุทิกา\nมุทิงค์\nมุทิตา\nมุทุ\nมุทุตา\nมุ่น\nมุนิ\nมุนินทร์\nมุนี\nมุบ\nมุบมิบ\nมุม\nมุ้ม\nมุ่ย\nมุรธา\nมุรธาภิเษก\nมุสละ\nมุสลิม\nมุสา\nมุสิก\nมุหงิด\nมุหน่าย\nมุหุต\nมุฮัมมัด\nมูก\nมูเซอ\nมูตร\nมู่ทู่\nมูน\nมูมมาม\nมูรติ\nมูรธา\nมูรธาภิเษก\nมูล\nมูละ\nมูลา\nมูลิกากร\nมู่ลี่\nมู่เล่\nมูสัง\nมูสิก\nมูสิกะ\nมูสิกทันต์\nเม\nเม็ก\nเมกะเฮิรตซ์\nเมขลา\nเมฆ\nเมฆา\nเมฆินทร์\nเมฆี\nเม็ง\nเม็ด\nเมตตา\nเมตไตรย\nเมตร\nเมตริก\nเมตริกตัน\nเมถุน\nเมท\nเมโท\nเมทนี\nเมทินี\nเมทนีดล\nเมทานอล\nเมทิลแอลกอฮอล์\nเมธ\nเมธา\nเมธาวี\nเมธี\nเมน\nเม่น\nเม้น\nเมนเดลีเวียม\nเมนทอล\nเม้ม\nเมรัย\nเมริเดียน\nเมรุ\nเมล์\nเมล็ด\nเมลือง\nเมษ\nเมษายน\nเมห์\nเมหนะ\nเมหะ\nเมะ\nเมา\nเม่า\nเม้า\nเมารี\nเมาลี\nเมาฬี\nเมาะ\nเมิง\nเมิน\nเมิล\nเมีย\nเมียง\nเมี่ยง\nเมี้ยน\nเมือ\nเมื้อ\nเมื่อ\nเมือก\nเมือง\nเมือบ\nเมื่อย\nแม่\nแม้\nแมก\nแมกนีเซียม\nแมง\nแมงกะพรุน\nแมงกานิน\nแมงกานีส\nแมงคา\nแมงคาเรือง\nแมงช้าง\nแมงดา\nแมงลัก\nแม่ตะงาว\nแมน\nแม่น\nแม้น\nแมลง\nแมลบ\nแมว\nแม้ว\nแมะ\nโม\nโม่\nโม้\nโมก\nโมกข์\nโมกษะ\nโมฆกรรม\nโมฆสัญญา\nโมฆะ\nโมฆียกรรม\nโมฆียะ\nโมง\nโม่ง\nโมงครุ่ม\nโมทนา\nโมโนแซ็กคาไรด์\nโมไนย\nโมเม\nโมเมนต์\nโมเย\nโมรา\nโมรี\nโมเรส\nโมลิบดีนัม\nโมลี\nโมเลกุล\nโมเสก\nโมเสส\nโม่ห์\nโมหะ\nโมหันธ์\nโมหาคติ\nโมโห\nไม่\nไม้\nไมกา\nไมครอน\nไมโครกรัม\nไมโครฟิล์ม\nไมโครโฟน\nไมโครมิเตอร์\nไมโครเมตร\nไมโครลิตร\nไมโครเวฟ\nไมตรี\nไมยราบ\nไมล์\nยก\nยกกระบัตร\nยกนะ\nยง\nยงโย่\nยชุรเวท\nยติ\nยติภังค์\nยถากรรม\nยถาภูตญาณ\nย่น\nยนต์\nยนตร์\nยม\nยมก\nยมโดย\nยมนา\nยมล\nยมะ\nยรรยง\nยล\nยวง\nยวด\nยวน\nยวบ\nย้วย\nยวรยาตร\nยศ\nยโส\nยอ\nย่อ\nยอก\nย็อกแย็ก\nยอง\nย่อง\nย้อง\nยอด\nยอน\nย้อน\nยอบ\nยอม\nย่อม\nย้อม\nย่อย\nย้อย\nย้อแย้\nยะ\nย่ะ\nยะยอบ\nยะยับ\nยัก\nยักข์\nยักขินี\nยักษ์\nยักษา\nยักษิณี\nยักษี\nยัง\nยั้ง\nยั่งยืน\nยัชโญปวีต\nยัญ\nยัญญะ\nยัด\nยัติภังค์\nยัน\nยั่น\nยันต์\nยันตร\nยันตร์\nยันตรกรรม\nยั่นตะนี\nยับ\nยั่ว\nยั้ว\nยั้วเยี้ย\nยัวรยาตร\nยัวะ\nยัษฏิ\nยา\nย่า\nยาก\nยาคุ\nยาคู\nยาง\nย่าง\nยางพารา\nยาจก\nยาจนา\nยาไฉน\nยาด\nยาดา\nยาตร\nยาตรา\nยาน\nย่าน\nย่านพาโหม\nยานมาศ\nยานุมาศ\nยานี\nยาม\nย่าม\nยามะ\nยามักการ\nยามา\nยาย\nย้าย\nยายี\nยาว\nย้าว\nยาวกาลิก\nยาวชีวิก\nยาสูบ\nย่าหยา\nยาหยี\nยำ\nย่ำ\nย้ำ\nยำเยีย\nยิก\nยิง\nยิ่ง\nยิฏฐะ\nยิน\nยิบ\nยิบหยี\nยิปซัม\nยิปซี\nยิ้ม\nยิมนาสติก\nยิหวา\nยี\nยี่\nยี้\nยี่ก่า\nยี่เก\nยี่เข่ง\nยี่โถ\nยีน\nยี่โป้\nยี่ภู่\nยีราฟ\nยี่สก\nยี่สง\nยี่สน\nยี่สาน\nยี่สุ่น\nยี่หระ\nยี่หร่า\nยี่ห้อ\nยี่หุบ\nยึกยัก\nยึกยือ\nยึด\nยืด\nยืน\nยื่น\nยืม\nยื้อ\nยุ\nยุกกระบัตร\nยุกดิ\nยุกติ\nยุกติธรรม\nยุกต์\nยุค\nยุคนธร\nยุคล\nยุคันต์\nยุคันธร\nยุคุนธร\nยุง\nยุ่ง\nยุ้ง\nยุด\nยุต\nยุติ\nยุทธ\nยุทธ์\nยุทธนา\nยุทโธปกรณ์\nยุบ\nยุ่บ\nยุ่บยั่บ\nยุบล\nยุพดี\nยุพเรศ\nยุพา\nยุพาน\nยุพาพาล\nยุพาพิน\nยุ่มย่าม\nยุ่ย\nยุ้ย\nยุรยาตร\nยูรยาตร\nยุวชน\nยุวดี\nยุวราช\nยุวา\nยุวาน\nยู\nยู่\nยูง\nยูโด\nยูถะ\nยูถิกา\nยูริก\nยูเรนัส\nยูเรเนียม\nยูโรเพียม\nเย\nเย้\nเยง\nเยซู\nเย็ด\nเย็น\nเย็นตาโฟ\nเย็นเตาโฟ\nเย็บ\nเย้ย\nเยอ\nเย่อ\nเยอรมัน\nเยอว\nเย่อหยิ่ง\nเยอะ\nเยอะแยะ\nเยา\nเย้า\nเยาว์\nเยาวชน\nเยาวมาลย์\nเยาวยอด\nเยาวราช\nเยาวเรศ\nเยาวลักษณ์\nเยาวพา\nเยาวพาณี\nเยาวพาน\nเยาะ\nเยิง\nเยิน\nเยิ่น\nเยิ่นเย้อ\nเยินยอ\nเยิบ\nเยิบยาบ\nเยิ้ม\nเยีย\nเยี่ยง\nเยี่ยงอย่าง\nเยียงผา\nเยียดยัด\nเยียน\nเยียบ\nเยี่ยม\nเยียรบับ\nเยียรยง\nเยียว\nเยี่ยว\nเยียวยา\nเยือ\nเยื่อ\nเยื้อ\nเยือก\nเยือง\nเยื่อง\nเยื้อง\nเยือน\nเยื้อน\nแย่\nแย้\nแยก\nแยง\nแย่ง\nแย้ง\nแยงแย่\nแยงแย้\nแยบ\nแย็บ\nแยม\nแย้ม\nแยแส\nแยะ\nโย\nโย้\nโยก\nโยกเยก\nโยคาพจร\nโยคาวจร\nโยคเกณฑ์\nโยคยะ\nโยคะ\nโยคิน\nโยคี\nโยง\nโย่ง\nโย่งเย่ง\nโยงโย่\nโยชน์\nโยชนา\nโยถิกะ\nโยทะกา\nโยธวาทิต\nโยธา\nโยธิน\nโยน\nโยนก\nโยนิโส\nโยนี\nโยม\nโยโส\nใย\nไย\nไย่\nไยดี\nไยไพ\nรก\nรง\nรงค์\nรงควัตถุ\nรงรอง\nรจนา\nรจเรข\nรจเลข\nรจิต\nรชตะ\nรชนิ\nรชนี\nรชะ\nรณรงค์\nรด\nรดี\nรตนะ\nรตะ\nรติ\nรถ\nรน\nร่น\nรบ\nรบาญ\nรพี\nรม\nร่ม\nรมณี\nรมณีย์\nรมณียสถาน\nรมย์\nรมเยศ\nรยางค์\nรวก\nรวง\nร่วง\nรวด\nรวน\nรวนเร\nร่วน\nรวบ\nรวม\nร่วม\nรวย\nรวิ\nรวิวาร\nรวี\nรศนา\nรส\nรสนา\nรสสุคนธ์\nรสายนเวท\nรสิก\nรหัท\nรหัส\nรโห\nรโหฐาน\nรอ\nร่อ\nรอก\nรอง\nร่อง\nร้อง\nรองเง็ง\nร่องแร่ง\nรอด\nรอน\nร่อน\nร้อน\nรอบ\nรอบคอบ\nรอม\nรอมชอม\nรอมร่อ\nรอย\nร่อย\nร้อย\nร่อแร่\nระ\nระกะ\nระกา\nระกำ\nระเกะระกะ\nระคน\nระคาง\nระคาย\nระแคะ\nระฆัง\nระงม\nระงับ\nระแง้\nระโงกหิน\nระชวย\nระดม\nระดะ\nระดับ\nระดา\nระด่าว\nระดู\nระเด่น\nระเดียง\nระแด\nระตู\nระทก\nระทด\nระทม\nระทวย\nระทา\nระทึก\nระแทะ\nระนาด\nระนาบ\nระนาม\nระนาว\nระเนน\nระเนระนาด\nระเนียด\nระแนง\nระแนะ\nระบบ\nระบม\nระบอบ\nระบัด\nระบับ\nระบาด\nระบาย\nระบำ\nระบิล\nระบือ\nระบุ\nระเบง\nระเบ็ง\nระเบิด\nระเบียง\nระเบียน\nระเบียบ\nระแบบ\nระมัดระวัง\nระมาด\nระเมียร\nระย่อ\nระย่อม\nระยะ\nระยั้ง\nระยับ\nระย้า\nระยาบ\nระยำ\nระยิบระยับ\nระโยง\nระโยงระยาง\nระรวย\nระรอง\nระร่อน\nระรัว\nระราน\nระร่าย\nระริก\nระรี่\nระรึง\nระรื่น\nระรื้น\nระเร้ง\nระเริง\nระเรียง\nระเรื่อย\nระแรง\nระลวง\nระลอก\nระลึก\nระวัง\nระวาง\nระวาย\nระวิง\nระแวง\nระแวดระวัง\nระไว\nระส่ำระสาย\nระหกระเหิน\nระหง\nระหวย\nระหว่าง\nระหองระแหง\nระหัด\nระหาย\nระเห็จ\nระเหย\nระเหระหน\nระเหหน\nระเหิด\nระเหินระหก\nระแหง\nระโหย\nระอา\nระอิดระอา\nระอุ\nรัก\nรักข์\nรักขิต\nรักตะ\nรักบี้\nรักเร่\nรักแร้\nรักษ์\nรักษา\nรัง\nรั้ง\nรังเกียจ\nรังแก\nรังค์\nรังควาน\nรังแค\nรังรอง\nรังวัด\nรังสิ\nรังสี\nรังสิมันตุ์\nรังสิมา\nรัจฉา\nรัช\nรัชชูปการ\nรัชมังคลาภิเษก\nรัชชุ\nรัชฎาภิเษก\nรัชดาภิเษก\nรัชนะ\nรัชนี\nรัญจวน\nรัฏฐาภิปาลโนบาย\nรัฐ\nรัฐประศาสโนบาย\nรัฐประศาสนศาสตร์\nรัด\nรัต\nรัตกัมพล\nรัตมณี\nรัตคน\nรัตจันทน์\nรัตตัญญู\nรัตติ\nรัตน์\nรัตนะ\nรัตนโกสินทร์\nรัตนโกสินทรศก\nรัตนชาติ\nรัตนตรัย\nรัตนบัลลังก์\nรัตนวราภรณ์\nรัตนสิงหาสน์\nรัตนา\nรัตนากร\nรัตนาภรณ์\nรัตนาวลี\nรัตมา\nรัถ\nรัถยา\nรัทเทอร์ฟอร์เดียม\nรัน\nรั้น\nรันทด\nรันทวย\nรับ\nรัมณียสถาน\nรัมภา\nรัมมี่\nรัมย์\nรัย\nรัว\nรั่ว\nรั้ว\nรัศมิมัต\nรัศมิมาน\nรัศมี\nรัษฎากร\nรัสเซีย\nรัสสะ\nรัสสระ\nรา\nร่า\nร้า\nราก\nรากษส\nรากสาด\nราคะ\nราคจริต\nราคา\nราคิน\nราคี\nราง\nร่าง\nร้าง\nรางจืด\nรางชาง\nรางวัล\nราช\nราชกิจจานุเบกษา\nราชนิกุล\nราชวโรงการ\nราชญี\nราชดัด\nราชพฤกษ์\nราชมาณพ\nราชมาษ\nราชมาส\nราชย์\nราชสีห์\nราชะ\nราชัน\nราชันย์\nราชัย\nราชา\nราชาธิปไตย\nราชาธิราช\nราชาภิเษก\nราชายตนะ\nราชาวดี\nราชี\nราชินิกุล\nราชินีกุล\nราชินี\nราชินูปถัมภ์\nราชูปถัมภ์\nราชูปโภค\nราเชน\nราเชนทร์\nราเชนทรยาน\nราโชวาท\nราไชศวรรย์\nราญ\nราญรอน\nราด\nราต\nราตร\nราตรี\nราน\nร่าน\nร้าน\nราบ\nราพณ์\nราพณาสูร\nราม\nรามเกียรติ์\nรามสูร\nรามัญ\nรามา\nราย\nร่าย\nร้าย\nราว\nร้าว\nราวี\nราศี\nราษฎร\nราษฎร์\nราษตรี\nราษราตรี\nราหุ\nราหู\nรำ\nร่ำ\nรำคาญ\nรำงับ\nรำจวน\nรำบาญ\nรำพัน\nรำพาย\nรำพึง\nรำเพย\nรำไพ\nรำมะนา\nรำมะนาด\nรำมะร่อ\nร่ำรวย\nร่ำร่ำ\nรำไร\nรำลึก\nรำหัด\nรำหัส\nริ\nริก\nริดสีดวง\nริน\nริ้น\nริบ\nริบบิ้น\nริบรี่\nริบหรี่\nริปุ\nริปู\nริม\nริ้ว\nริษยา\nรี\nรี่\nรี้พล\nรีด\nรีดักชัน\nรีต\nรีเนียม\nรีบ\nรีม\nรีรอ\nรี้ริก\nรึง\nรึ้ง\nรื่น\nรื้น\nรื้อ\nรุ\nรุก\nรุกข์\nรุกขชาติ\nรุกขเทวดา\nรุกขมูล\nรุกขา\nรุกรุย\nรุ่ง\nรุ้ง\nรุงรัง\nรุ่งริ่ง\nรุจ\nรุจา\nรุจนะ\nรุจิ\nรุจี\nรุจิระ\nรุจิรา\nรุด\nรุต\nรุทธ์\nรุทระ\nรุธิร\nรุธิระ\nรุเธียร\nรุน\nรุ่น\nรุบรู่\nรุม\nรุ่ม\nรุ่มร่าม\nรุย\nรุ่ย\nรุรุ\nรุหะ\nรู\nรู่\nรู้\nรูจี\nรูด\nรูทีเนียม\nรูบิเดียม\nรูป\nรูปิยะ\nรูปี\nรูเล็ตต์\nเร่\nเรข\nเรขา\nเรขาคณิต\nเร็ง\nเร่ง\nเร้ง\nเรณุ\nเรณู\nเรดอน\nเรดาร์\nเรเดียม\nเร้น\nเรรวน\nเรไร\nเร็ว\nเร่ว\nเรวดี\nเรอ\nเร่อ\nเรา\nเร่า\nเร้า\nเราะ\nเริง\nเริด\nเริม\nเริ่ม\nเริ้ม\nเริศร้าง\nเรี่ย\nเรี้ย\nเรียก\nเรียง\nเรียด\nเรียน\nเรียบ\nเรียม\nเรี่ยม\nเรียว\nเรี่ยว\nเรี้ยวรก\nเรือ\nเรื่อ\nเรื้อ\nเรือก\nเรือง\nเรื่อง\nเรื้อง\nเรืองรอง\nเรือด\nเรือน\nเรื้อน\nเรื่อย\nแร\nแร่\nแรก\nแร็กเกต\nแรง\nแร่ง\nแร้ง\nแรด\nแร้นแค้น\nแรม\nแร้ว\nแระ\nโร\nโร่\nโรค\nโรคา\nโรคาพาธ\nโรง\nโรจ\nโรจน์\nโรเดียม\nโรตี\nโรท\nโรธ\nโรม\nโรมัน\nโรเมอร์\nโรย\nโรเร\nโรหิณี\nโรหิต\nไร\nไร่\nไร้\nไรย์\nฤกษ์\nฤกษณะ\nฤคเวท\nฤชา\nฤชุ\nฤณ\nฤดี\nฤดียา\nฤดู\nฤต\nฤติยา\nฤตุ\nฤทธา\nฤทธิ์\nฤทัย\nฤษภ\nฤษยา\nฤษี\nฤๅ\nฤๅดี\nฤๅทัย\nฤๅษี\nฤๅสาย\nลก\nล่ก\nลฆุ\nลง\nล่ง\nลงกา\nล้งเล้ง\nลด\nลดา\nลดาวัลย์\nลน\nล้น\nลบ\nลบอง\nลพ\nลพุช\nลม\nล่ม\nล้ม\nลมาด\nลรรลุง\nลลนา\nลลิต\nลวก\nลวง\nล่วง\nล้วง\nลวณะ\nลวด\nล้วน\nลวนลาม\nลวนะ\nล่วม\nลวะ\nลวิตร\nลหุ\nลหุกาบัติ\nล่อ\nล้อ\nลอก\nล็อก\nล็อกเกต\nลอกแลก\nลอการิทึม\nลอง\nล่อง\nลองกอง\nลองจิจูด\nลองไน\nลอด\nลอตเตอรี่\nลอน\nล่อน\nลอบ\nลอม\nล้อม\nลอมชอม\nลอมพอก\nลอย\nล่อย\nล่อแล่\nลอว์เรนเซียม\nลออ\nละ\nล่ะ\nละคร\nละติจูด\nละบม\nละบอง\nละบือ\nละเบ็ง\nละโบม\nละม่อม\nละมั่ง\nละมาน\nละม้าย\nละมุ\nละมุด\nละมุน\nละเมอ\nละเมาะ\nละเมิด\nละเมียด\nละแมะ\nละโมก\nละโมบ\nละไม\nละลวย\nละลอก\nละล้า\nละล้าละลัง\nละลาน\nละลาบละล้วง\nละลาย\nละล้าว\nละล่ำละลัก\nละลิบ\nละลุม\nละเลง\nละเล้า\nละเลาะ\nละเลิง\nละเลียด\nละเลียบ\nละไล้\nละว้า\nละวาด\nละเวง\nละแวก\nละโว้\nละหมาด\nละห้อย\nละหาน\nละหาร\nละหุ่ง\nละเหย\nละเหี่ย\nละอง\nละออง\nละอาย\nละเอียด\nละแอน\nลัก\nลักขณะ\nลักขณา\nลักขะ\nลักขี\nลักจั่น\nลักปิดลักเปิด\nลักษณ์\nลักษณนาม\nลักษณะ\nลักษณาการ\nลักษมณ์\nลักษมาณา\nลักษมี\nลักษะ\nลัคคะ\nลัคน์\nลัคนา\nลัง\nลั่ง\nลังกา\nลังคี\nลังถึง\nลังลอง\nลังเล\nลังสาด\nลัชชา\nลัชชี\nลัญจ์\nลัญจกร\nลัญฉกร\nลัญฉน์\nลัฐิ\nลัฐิกา\nลัด\nลัดา\nลัทธ์\nลัทธิ\nลัน\nลั่น\nลันเต\nลันเตา\nลันไต\nลั่นทม\nลันโทม\nลับ\nลัพธ์\nลัพธิ\nลัภ\nลัภนะ\nลัภย์\nลัมพ์\nลัย\nลา\nล่า\nล้า\nลาก\nลาง\nล่าง\nล้าง\nลางลิง\nลางสาด\nลาช\nลาชะ\nลาชา\nลาญ\nลาด\nลาดเลา\nล้าต้า\nล่าเตียง\nลาน\nล่าน\nล้าน\nลาบ\nลาพอน\nลาภ\nลาม\nล่าม\nลามก\nลาย\nล้าย\nลายสือ\nลาลา\nลาว\nลาวัณย์\nลาวา\nลำ\nล่ำ\nล้ำ\nลำเข็ญ\nลำแข\nลำเค็ญ\nลำเจียก\nลำดวน\nลำดับ\nลำเนา\nลำบอง\nลำบาก\nลำปำ\nลำพวน\nลำพอง\nลำพัง\nลำพู\nลำเพ็ญ\nลำเพา\nลำแพน\nลำโพง\nลำไพ่\nลำภุขัน\nลำมะลอก\nลำยอง\nลำไย\nลำลอง\nล่ำลา\nลำลาบ\nลำลึก\nลำเลาะ\nลำเลิก\nลำเลียง\nลำเวียง\nลำเอียก\nลำเอียง\nลิ\nลิกขา\nลิกไนต์\nลิกู\nลิเก\nลิขนะ\nลิขสิทธิ์\nลิขิต\nลิง\nลิงค์\nลิด\nลิต\nลิตมัส\nลิตร\nลิเทียม\nลิ่น\nลิ้น\nลินจง\nลิ้นจี่\nลินลา\nลินสีด\nลิ่นฮื้อ\nลินิน\nลิบ\nลิปดา\nลิปสติก\nลิปิ\nลิฟต์\nลิเภา\nลิ่ม\nลิ้ม\nลิมป์\nลิมปนะ\nลิลิต\nลิว\nลิ่ว\nลิสง\nลี\nลี่\nลี้\nลีซอ\nลีบ\nลีลา\nลีลาศ\nลีฬหา\nลึก\nลึงค์\nลืด\nลื่น\nลื้น\nลืบ\nลืม\nลือ\nลื่อ\nลื้อ\nลุ\nลุก\nลุง\nลุ้ง\nลุ่น\nลุ้น\nลุพธ์\nลุ่ม\nลุมพี\nลุมพู\nลุย\nลุ่ย\nลุ้ย\nลู่\nลูก\nลูกระมาศ\nลูกเอ็น\nลูขะ\nลูทีเชียม\nลูบ\nเลก\nเล็ก\nเลข\nเลขา\nเลขาธิการ\nเลขานุการ\nเล็ง\nเล้ง\nเล่งฮื้อ\nเลเซอร์\nเลฑฑุ\nเลณฑุ\nเลณะ\nเล็ด\nเลน\nเล็น\nเล่น\nเลนส์\nเล็บ\nเลบง\nเลปกร\nเลปน์\nเลเป\nเลเพ\nเล็ม\nเล่ม\nเลย\nเลว\nเลวง\nเลวูโลส\nเลศ\nเลษฏุ\nเล่ห์\nเล่ห์กระเท่ห์\nเลหลัง\nเลหะ\nเลอ\nเล่อ\nเลอะ\nเลอะเทอะ\nเละ\nเละเทะ\nเลา\nเล่า\nเล้า\nเลากัย\nเล้าโลม\nเลาะ\nเลิก\nเลิ่กลั่ก\nเลิง\nเลิ้ง\nเลินเล่อ\nเลิศ\nเลีย\nเลียง\nเลี่ยง\nเลี้ยง\nเลียงผา\nเลียงฝ้าย\nเลียงมัน\nเลียน\nเลี่ยน\nเลียนไฟ\nเลียบ\nเลี่ยม\nเลียว\nเลี้ยว\nเลือก\nเลือง\nเลื่อง\nเลือด\nเลือน\nเลื่อน\nเลื่อม\nเลื่อย\nเลื้อย\nเลื่อยล้า\nแล\nแล่\nแล้\nแลก\nแล็กเกอร์\nแล็กโทส\nแลง\nแล่ง\nแล้ง\nแลน\nแล่น\nแลนทานัม\nแลบ\nแล้ว\nและ\nโล่\nโล้\nโลก\nโลกเชษฐ์\nโลกธรรม\nโลกธาตุ\nโลกนาถ\nโลกบาล\nโลกย์\nโลกัย\nโลกวัชชะ\nโลกวิทู\nโลกัตถจริยา\nโลกันตร์\nโลกา\nโลกาธิบดี\nโลกาธิปไตย\nโลกานุวัตร\nโลกาภิวัตน์\nโลกามิส\nโลกายัต\nโลกาวินาศ\nโลกิยะ\nโลกีย์\nโลกียวัตร\nโลกียวิสัย\nโลกียสุข\nโลกุตระ\nโลกุตรธรรม\nโลกุตรภูมิ\nโลง\nโล่ง\nโล้ง\nโล่งโจ้ง\nโล่งโต้ง\nโล้งโต้ง\nโลจนะ\nโลณะ\nโลด\nโล่ติ๊น\nโลโต\nโลท\nโลน\nโล้น\nโลภ\nโลม\nโลมเล้า\nโลมะ\nโลมา\nโลลุป\nโลเล\nโลโล\nโลโล้\nโลหะ\nโลหกุมภี\nโลหัช\nโลหิต\nไล่\nไล้\nไลย\nไลลา\nไล่เลี่ย\nฦๅ\nฦๅชา\nฦๅสาย\nวก\nวง\nวงก์\nวงกต\nวงศ์\nวงศกร\nวงศา\nวงษ์\nวจนะ\nวจี\nวชิระ\nวชิรปาณี\nวชิรหัตถ์\nวชิราวุธ\nวฏะ\nวฏาการ\nวณิช\nวณิชชา\nวณิชย์\nวณิชยา\nวณิพก\nวดี\nวทนะ\nวทัญญุตา\nวทัญญู\nวธุกา\nวธู\nวน\nวนศาสตร์\nวนสณฑ์\nวนสัณฑ์\nวนอุทยาน\nวนัส\nวนัสบดี\nวนา\nวนาดร\nวนาดอน\nวนานต์\nวนาลัย\nวนาลี\nวนาวาส\nวนาศรม\nวนาสณฑ์\nวนาสัณฑ์\nวนิดา\nวนิพก\nวเนจร\nวโนทยาน\nวยัคฆ์\nวยากรณ์\nวรดนู\nวรทาน\nวรมหาวิหาร\nวรงค์\nวรณะ\nวรรค\nวรรคย์\nวรรช\nวรรชย์\nวรรณะ\nวรรณกรรม\nวรรณคดี\nวรรณยุกต์\nวรรณยุต\nวรรณศิลป์\nวรรณนา\nวรรณพฤติ\nวรรณึก\nวรรธกะ\nวรรธนะ\nวรรษ\nวรรษา\nวรวิหาร\nวรัญญู\nวรางคณา\nวรางคนา\nวราห์\nวราหะ\nวรุณ\nวโรดม\nวฤก\nวลัช\nวลัญช์\nวลัญชน์\nวลัย\nวลาหก\nวลี\nวศค\nวศะ\nวศิน\nวสนะ\nวสภะ\nวสละ\nวสวัดดี\nวสวัตตี\nวสะ\nวสันต์\nวสันตดิลก\nวสันตฤดู\nวสันตวิษุวัต\nวสา\nวสี\nวสุ\nวสุธา\nวสุนธรา\nวสุมดี\nวหะ\nวอ\nวอก\nวอกแวก\nว่องไว\nวอด\nวอน\nว่อน\nว็อบ\nวอมแวม\nวอลเลย์บอล\nวอแว\nวะ\nวัก\nวักกะ\nวัคคีย์\nวัคคุ\nวัคซีน\nวัง\nวังก์\nวังชา\nวังเวง\nวังศะ\nวังสะ\nวัจจะ\nวัจกุฎี\nวัจฉละ\nวัจน์\nวัช\nวัชชะ\nวัชพืช\nวัชฌ์\nวัชระ\nวัชรปาณี\nวัชรยาน\nวัชรอาสน์\nวัชราสน์\nวัชรินทร์\nวัชรี\nวัชเรนทร์\nวัฏ\nวัฏฏะ\nวัฏจักร\nวัฏทุกข์\nวัฏสงสาร\nวัฏกะ\nวัฏฏิ\nวัฒกะ\nวัฒกี\nวัฒนธรรม\nวัฒนะ\nวัฒนา\nวัณ\nวัณโรค\nวัณฏ์\nวัณณะ\nวัณนา\nวัด\nวัต\nวัตต์\nวัตตา\nวัตถ์\nวัตถาภรณ์\nวัตถาลังการ\nวัตถุ\nวัตนะ\nวัตร\nวัตสดร\nวัตสะ\nวัติ\nวัทน์\nวัน\nวันต์\nวันทนา\nวันทนาการ\nวันทนีย์\nวันทยหัตถ์\nวันทยาวุธ\nวันทา\nวันทิ\nวับ\nวับวาบ\nวับวาม\nวับแวบ\nวับแวม\nวัปปะ\nวัมมิกะ\nวัย\nวัลก์\nวัลคุ\nวัลย์\nวัลลภ\nวัลลี\nวัว\nวัสสะ\nวัสโสทก\nวัสดุ\nวัสตร์\nวัสน์\nวัสนะ\nวัสสานะ\nวัสสานฤดู\nวา\nว่า\nว้า\nว้าเหว่\nวาก\nว้าก\nวากยสัมพันธ์\nวากยะ\nวาง\nว่าง\nว้าง\nวาจก\nวาจา\nวาจาไปยะ\nวาจาล\nวาชเปยะ\nวาณิช\nวาณิชกะ\nวาณิชย์\nวาณี\nวาด\nวาต\nวาตะ\nวาตภัย\nวาท\nวาทศาสตร์\nวาทศิลป์\nวาทกะ\nวาทนะ\nวาทย์\nวาทยกร\nวาทิต\nวาทิน\nวาที\nวาน\nวานซืน\nว่าน\nวานร\nวานรินทร์\nวาเนเดียม\nวาบ\nวาปี\nวาม\nวามน\nวามนาวตาร\nวามะ\nวาย\nว่าย\nว้าย\nวายะ\nวาโย\nวายามะ\nวายุ\nวายุกูล\nวาร\nวาระ\nวารสาร\nวารสารศาสตร์\nวาริ\nวารี\nวาริช\nวารีช\nวาริท\nวาริธร\nวารุณ\nวารุณี\nวาล\nวาลวีชนี\nวาล์ว\nวาลิกา\nวาลุกา\nวาว\nว่าว\nว้าว่อน\nว้าวุ่น\nวาสนะ\nวาสนา\nวาสพ\nวาสะ\nวาสิน\nวาสี\nวาสุกรี\nวาสุกี\nวาสุเทพ\nวาหนะ\nวาหะ\nวาหินี\nวาฬ\nวิกขัมภ์\nวิกขัมภนะ\nวิกเขป\nวิกรม\nวิกรัย\nวิกรานต์\nวิกฤต\nวิกฤติ\nวิกล\nวิกสิต\nวิกัต\nวิกัติ\nวิกัติการก\nวิกัป\nวิกัย\nวิการ\nวิกาล\nวิกาลโภชน์\nวิคหะ\nวิเคราะห์\nวิฆเนศ\nวิฆเนศวร\nวิฆาต\nวิง\nวิ่ง\nวิ่งเปี้ยว\nวิงวอน\nวิจฉิกะ\nวิจล\nวิจักขณ์\nวิจักษ์\nวิจักษณ์\nวิจัย\nวิจาร\nวิจารณ์\nวิจารณญาณ\nวิจิ\nวิจิกิจฉา\nวิจิต\nวิจิตร\nวิจิน\nวิจุณ\nวิจุรณ\nวิชชา\nวิชชุ\nวิชชุดา\nวิชชุตา\nวิชชุลดา\nวิชญะ\nวิชน\nวิชนี\nวิชย\nวิชัย\nวิชา\nวิชานนะ\nวิชิต\nวิเชียร\nวิญญัตติ\nวิญญาณ\nวิญญาณกทรัพย์\nวิญญู\nวิฑูรย์\nวิด\nวิตก\nวิตถาร\nวิตามิน\nวิถี\nวิทธะ\nวิทยฐานะ\nวิทยา\nวิทยาคม\nวิทยาคาร\nวิทยาลัย\nวิทยุ\nวิทยุต\nวิทวัส\nวิทัตถิ\nวิทัศน์\nวิทารณ์\nวิทิต\nวิทู\nวิทูร\nวิเทศ\nวิเทโศบาย\nวิธ\nวิธวา\nวิธาน\nวิธี\nวิธุระ\nวิธู\nวิธูปนะ\nวิ่น\nวินตกะ\nวินัย\nวินาที\nวินายก\nวินาศ\nวินิจ\nวินิจฉัย\nวินิต\nวินิบาต\nวินิปาติก\nวิเนต\nวิบัติ\nวิบาก\nวิบุล\nวิบุลย์\nวิบูล\nวิบูลย์\nวิปการ\nวิปฏิสาร\nวิปโยค\nวิประโยค\nวิปริต\nวิปลาส\nวิปวาส\nวิปักษ์\nวิปัสสก\nวิปัสสนา\nวิปัสสนายานิก\nวิพากษ์\nวิพิธทัศนา\nวิพุธ\nวิภว\nวิภวตัณหา\nวิภังค์\nวิภัช\nวิภัตติ\nวิภา\nวิภาค\nวิภาช\nวิภาดา\nวิภาวี\nวิภาษ\nวิภาส\nวิภู\nวิภูษณะ\nวิภูษา\nวิภูษิต\nวิมน\nวิมล\nวิมลัก\nวิมังสา\nวิมัติ\nวิมาน\nวิมุข\nวิมุต\nวิมุตติ\nวิเมลือง\nวิโมกข์\nวิโยค\nวิระ\nวิรงรอง\nวิรังรอง\nวิรัช\nวิรัต\nวิรัติ\nวิราคะ\nวิราม\nวิริยภาพ\nวิริยะ\nวิรุธ\nวิรุฬห์\nวิรุฬหก\nวิรูป\nวิรูปักษ์\nวิเรนทร์\nวิโรจ\nวิโรจน์\nวิโรฒ\nวิโรธ\nวิลันดา\nวิลัย\nวิลาด\nวิลาศ\nวิลาป\nวิลาวัณย์\nวิลาส\nวิลาสินี\nวิลิปดา\nวิลิศมาหรา\nวิเลป\nวิเลปนะ\nวิโลกนะ\nวิโลม\nวิไล\nวิไลวรรณ\nวิวรณ์\nวิวรรธน์\nวิวัฏ\nวิวัฒน์\nวิวัฒนาการ\nวิวัน\nวิวาท\nวิวาห์\nวิวาหมงคล\nวิวาหะ\nวิวิต\nวิวิธ\nวิเวก\nวิศรุต\nวิศว\nวิศวกร\nวิศวกรรม\nวิศวกรรมศาสตร์\nวิศัลย์\nวิศาขบูชา\nวิศาขา\nวิศาล\nวิศิษฏ์\nวิศุทธ์\nวิศุทธิ์\nวิเศษ\nวิเศษณ์\nวิษณุ\nวิษณุกรรม\nวิษธร\nวิษัย\nวิษาณ\nวิษุวัต\nวิสกี้\nวิสรรชนีย์\nวิสฤต\nวิสสุกรรม\nวิสัชนา\nวิสัญญี\nวิสัย\nวิสัยทัศน์\nวิสาขบูชา\nวิสาขะ\nวิสาขา\nวิสามัญ\nวิสามานยนาม\nวิสาร\nวิสารทะ\nวิสาล\nวิสาสะ\nวิสาหกิจ\nวิสิฐ\nวิสุงคามสีมา\nวิสุทธ์\nวิสุทธิ์\nวิสูตร\nวิเสท\nวิหค\nวิหลั่น\nวิหาร\nวิหิงสา\nวิเหสา\nวิฬาร\nวิฬาร์\nวี\nวีจิ\nวีชนี\nวีณา\nวี้ด\nวีรกรรม\nวีรชน\nวีรบุรุษ\nวีรสตรี\nวี่วัน\nวี่แวว\nวีสะ\nวุ้ง\nวุฐิ\nวุฒ\nวุฒิ\nวุด\nวุ่น\nวุ้น\nวุบ\nวุ้ย\nวุลแฟรม\nวู้\nวูดวาด\nวูบ\nวู่วาม\nเว้\nเวค\nเวคิน\nเวคี\nเวจ\nเวช\nเวชยันต์\nเวฐน์\nเวณิ\nเวณิก\nเวณุ\nเวตน์\nเวตร\nเวตาล\nเวท\nเวทคู\nเวทนา\nเวทย์\nเวทัลละ\nเวทางค์\nเวทางคศาสตร์\nเวทานต์\nเวทานตะ\nเวทิ\nเวที\nเวธะ\nเวน\nเว้น\nเวนไตย\nเวไนย\nเวมัต\nเว้ย\nเวยยากรณะ\nเวร\nเวรมณี\nเวรี\nเวโรจน์\nเวลา\nเวเลนซี\nเวศม์\nเวศย์\nเวศยา\nเวสน์\nเวสภู\nเวสม์\nเวสวัณ\nเวสสะ\nเวสสันดร\nเวสสุกรรม\nเวสสุวัณ\nเวสารัช\nเวสิยา\nเวหน\nเวหะ\nเวหา\nเวหาส\nเวฬุ\nเวฬุริยะ\nเว่อ\nเว้า\nเวิก\nเวิ้ง\nเวี่ย\nเวียง\nเวียด\nเวียดนาม\nเวียน\nเวียร\nเวี่ยว\nแว้\nแวง\nแว้ง\nแวด\nแว้ด\nแวน\nแว่น\nแวนดา\nแวบ\nแว็บ\nแวม\nแว็ม\nแวว\nแว่ว\nแวะ\nโว\nโว่\nโวการ\nโว่ง\nโวทาน\nโวย\nโว้ย\nโว้เว้\nโวหาร\nไว\nไว้\nไวกูณฐ์\nไวฑูรย์\nไวทย์\nไวน์\nไวพจน์\nไวยากรณ์\nไวยาวัจกร\nไวยาวัจมัย\nไวรัส\nไววรรณ\nไวษณพ\nไวโอลิน\nศก\nศกุน\nศกุนต์\nศกุนิ\nศกุนี\nศจี\nศตะ\nศตภิษัช\nศตวรรษ\nศตพรรษ\nศตกะ\nศนิ\nศพ\nศมนะ\nศมะ\nศยาม\nศยามล\nศร\nศรายุธ\nศราวรณ์\nศรรกรา\nศรวณะ\nศรวณีย์\nศรวิษฐา\nศรัณย์\nศรัณยู\nศรัท\nศรัทธา\nศรัย\nศราทธ์\nศราทธพรต\nศราพก\nศราวก\nศราวณะ\nศรี\nศรีตรัง\nศรุติ\nศฤคาล\nศฤงค์\nศฤงคาร\nศฤงคาริน\nศฤงคารี\nศลิษฏ์\nศลิษา\nศวะ\nศวัส\nศวา\nศวาน\nศศะ\nศศธร\nศศพินทุ์\nศศลักษณ์\nศศิ\nศศิน\nศศี\nศศิขัณฑ์\nศศิธร\nศศิมณฑล\nศศิวิมล\nศอ\nศอก\nศักดา\nศักดิ\nศักดิ์\nศักดินา\nศักติ\nศักย\nศักยภาพ\nศักย์\nศักยะ\nศักร\nศักรินทร์\nศักเรนทร์\nศักราช\nศังกร\nศัตรู\nศันสนะ\nศันสนีย์\nศัพท์\nศัยยา\nศัล\nศัลย์\nศัลยกรรม\nศัลยแพทย์\nศัลยศาสตร์\nศัสดร\nศัสตร\nศัสตรศาสตร์\nศัสตรา\nศัสตราวุธ\nศากตะ\nศากย\nศากยะ\nศากยพุทธ\nศากยมุนี\nศาฎก\nศาณ\nศานต์\nศานติ\nศาป\nศารท\nศารทูล\nศาริกา\nศาล\nศาลา\nศาศวัต\nศาสดา\nศาสตร์\nศาสตรา\nศาสตราจารย์\nศาสนา\nศาสนกิจ\nศาสนจักร\nศาสนธรรม\nศาสนบุคคล\nศาสนพิธี\nศาสนวัตถุ\nศาสนศาสตร์\nศาสนสถาน\nศาสนสมบัติ\nศาสนิกชน\nศาสนีย์\nศาสนูปถัมภก\nศาสน์\nศิกษก\nศิการ\nศิขร\nศิขริน\nศิขรี\nศิขัณฑ์\nศิคาล\nศิงขร\nศิงขริน\nศิตะ\nศิถี\nศิพิระ\nศิระ\nศิรประภา\nศิราภรณ์\nศิโรรัตน์\nศิโรเวฐน์\nศิรา\nศิรามพุช\nศิโรราบ\nศิลป\nศิลป์\nศิลปะ\nศิลปกร\nศิลปกรรม\nศิลปกิจ\nศิลปวัตถุ\nศิลปวิทยา\nศิลปศาสตร์\nศิลปศึกษา\nศิลปหัตถกรรม\nศิลปิน\nศิลปี\nศิลา\nศิวะ\nศิวโมกข์\nศิวลึงค์\nศิวเวท\nศิวาลัย\nศิศีระ\nศิษฎิ\nศิษฏ์\nศิษย์\nศิษยานุศิษย์\nศีขร\nศีต\nศีตกาล\nศีรษะ\nศีล\nศึก\nศึกษา\nศึกษาธิการ\nศึกษานิเทศก์\nศุกร์\nศุกรวรรณ\nศุกรวาร\nศุกระ\nศุกล\nศุกลปักษ์\nศุจิ\nศุทธะ\nศุทธิ\nศุนะ\nศุนิ\nศุภกร\nศุภเคราะห์\nศุภนิมิต\nศุภมัสดุ\nศุภมาตรา\nศุภมาส\nศุภอักษร\nศุภางค์\nศูกร\nศุลกากร\nศุลการักษ์\nศุลี\nศุษิร\nศูทร\nศูนย์\nศูนยวาท\nศูละ\nศูลิน\nเศรณี\nเศรษฐ\nเศรษฐ์\nเศรษฐกิจ\nเศรษฐศาสตร์\nเศรษฐี\nเศร้า\nเศลษ\nเศวต\nเศวตร\nเศวตัมพร\nเศษ\nเศาจ\nเศาร์\nเศารยะ\nเศิก\nเศียร\nโศก\nโศกา\nโศกาดูร\nโศกาลัย\nโศกี\nโศจิ\nโศธนะ\nโศภน\nโศภะ\nโศภา\nโศภิต\nโศภิน\nโศภิษฐ์\nโศภี\nโศรดา\nโศรตร\nโศลก\nไศล\nไศวะ\nษมา\nษัฏ\nษัฑ\nษัณ\nษัษ\nษัษฐะ\nษัษฐี\nโษฑศัน\nสก\nสกวาที\nสกฏะ\nสกทาคามิผล\nสกิทาคามิผล\nสกทาคามิมรรค\nสกิทาคามิมรรค\nสกทาคามี\nสกิทาคามี\nสกนธ์\nสกปรก\nสกรณีย์\nสกรรจ์\nสกรรมกริยา\nสกล\nสกลมหาสังฆปริณายก\nสกัด\nสกา\nสกาว\nสกี\nสกุณ\nสกุณา\nสกุณี\nสกุน\nสกุนต์\nสกุล\nสเกต\nสแกนเดียม\nสขะ\nสง\nส่ง\nสงกร\nสงกรานต์\nสงกา\nสงค์\nสงคร\nสงคราม\nสงเคราะห์\nสงฆ์\nสงบ\nสงวน\nส่งสการ\nสงสัย\nสงสาร\nสงสารวัฏ\nสงัด\nสง่า\nสฐะ\nสณฑ์\nสด\nสดมภ์\nสดับ\nสดับปกรณ์\nสดำ\nสดุดี\nสตะ\nสตน\nสตภิสชะ\nสตรอนเชียม\nสตริกนิน\nสตรี\nสตัฟฟ์\nสตัมภ์\nสตางค์\nสติ\nสติปัฏฐาน\nสตี\nสตู\nสตูป\nสเต๊ก\nสถบดี\nสถล\nสถวีระ\nสถาน\nสถานะ\nสถานี\nสถาบัน\nสถาปนา\nสถาปนิก\nสถาปัตยกรรม\nสถาปัตยกรรมศาสตร์\nสถาปัตยเรขา\nสถาปัตยเวท\nสถาพร\nสถาวร\nสถิต\nสถิตยศาสตร์\nสถิติ\nสถิร\nสถีรวาท\nสถุล\nสถูป\nสทิง\nสทึง\nสทุม\nสธนะ\nสาธุสะ\nสน\nส้น\nสนทนา\nสนทรรศ\nสนทรรศน์\nสนเทศ\nสนเท่ห์\nสนธยา\nสนธิ\nสนน\nสนม\nสนวน\nสนอง\nสนอบ\nสนอม\nสนะ\nสนัด\nสนั่น\nสนับ\nสนับทึบ\nสนับสนุน\nสนาน\nสนาม\nสนายุ\nสนิกะ\nสนิท\nสนิธ\nสนิม\nสนุก\nสนุกเกอร์\nสนุข\nสนุต\nสนุ่น\nสบ\nสบง\nสบถ\nสบัน\nสบาย\nสบู่\nสไบ\nสปริง\nสปอร์\nสปาเกตตี\nสเปกตรัม\nสเปกโทรสโกป\nสไปริลลัม\nสพาบ\nสภา\nสภาพ\nสภาวการณ์\nสภาวะ\nสม\nสมการ\nสมจารี\nสมดุล\nสมมูล\nส้ม\nสมญา\nสมณะ\nสมณบริขาร\nสมณศักดิ์\nสมณสารูป\nสมเด็จ\nสมถะ\nสมถยานิก\nสมถวิปัสสนา\nสมนาคุณ\nสมบัติ\nสมบุกสมบัน\nสมบูรณ์\nสมบูรณาญาสิทธิราชย์\nสมประดี\nสมปฤดี\nสมปฤๅดี\nส้มป่อย\nสมปัก\nสมผุส\nสมพง\nสมพงศ์\nสมพล\nสมพัตสร\nสมพาส\nสมเพช\nสมโพธน์\nสมโพธิ\nสมภพ\nสมภาร\nสมโภค\nสมโภช\nสมมต\nสมมติ\nสมมุติ\nสมมาตร\nส้มมือ\nสมโมท\nสมโยค\nสมร\nสมรด\nสมรรถ\nสมรรถนะ\nสมรรถภาพ\nสมรส\nสมฤดี\nสมฤติ\nสมวายะ\nสมเสร็จ\nสมอ\nสมอง\nสมะ\nสมัคร\nสมังคี\nสมัช\nสมัชชา\nสมัญญา\nสมัต\nสมัน\nสมันต์\nสมัย\nสมา\nสมาคม\nสมาจาร\nสมาชิก\nสมาทาน\nสมาธิ\nสมาน\nสมานฉันท์\nสมาบัติ\nสมาพันธรัฐ\nสมาส\nสม่ำเสมอ\nสมิง\nสมิต\nสมิติ\nสมิทธ์\nสมิทธิ\nสมี\nสมุก\nสมุจจัย\nสมุจเฉท\nสมุฏฐาน\nสมุด\nสมุทร\nสมุทรโคดม\nสมุทัย\nสมุน\nสมุนไพร\nสมุลแว้ง\nสมุห\nสมุห์\nสมุหกลาโหม\nสมุหเทศาภิบาล\nสมุหนาม\nสมุหนายก\nสโมธาน\nสโมสร\nสยด\nสยนะ\nสยบ\nสยมพร\nสยมภู\nสยอง\nสยอน\nสยัมวรา\nสยาม\nสยามานุสติ\nสยามินทร์\nสยาย\nสยิว\nสยิ้ว\nสยุมพร\nสยุมภู\nสร\nสรง\nสร่ง\nสรณะ\nสรณคมน์\nสรณาคมน์\nสรณตรัย\nสรตะ\nสรทะ\nสรนุก\nสรเนาะ\nสรไน\nสรเพชญ\nสรภะ\nสรภัญญะ\nสรภู\nสรม\nสรร\nสรรค์\nสรรพ\nสรรพคุณ\nสรรพนาม\nสรรพสามิต\nสรรพัชญ\nสรรพากร\nสรรพางค์\nสรรเพชญ\nสรรเพชุดา\nสรรเสริญ\nสรลอน\nสรเลข\nสรวง\nสรวม\nสรวล\nสรเสริญ\nสร้อย\nสระ\nสระกอ\nสระท้อน\nสระพรั่ง\nสระอาด\nสรั่ง\nสรัสวดี\nสร่าง\nสร้าง\nสราญ\nสรี้\nสรีระ\nสรีรกิจ\nสรีรธาตุ\nสรีรวิทยา\nสรีรศาสตร์\nสรีรังคาร\nสรีรางคาร\nสรุป\nสโรช\nสโรชะ\nสฤก\nสฤต\nสฤษฎิ\nสฤษฎี\nสฤษฏ์\nสฤษดิ์\nสลด\nสลบ\nสลวน\nสลวย\nสลอด\nสลอน\nสลอย\nสละ\nสลัก\nสลัด\nสลัดได\nสลับ\nสลัว\nสลา\nสลาก\nสลาง\nสล้าง\nสลาด\nสลาตัน\nสลาบ\nสลาย\nสลิด\nสลิล\nสลึก\nสลึง\nสลุต\nสลุบ\nสลุมพร\nสแลง\nสวการย์\nสวภาพ\nสวราชย์\nสวก\nส้วง\nสวด\nสวน\nสวนะ\nสวนาการ\nส่วน\nสวนิต\nสวบ\nสวม\nส้วม\nสวย\nส่วย\nส้วย\nสวยม\nสวรรค\nสวรรค์\nสวรรคต\nสวรรคาลัย\nสวรรยา\nสวระ\nสวะ\nสวัสดิ\nสวัสดิ์\nสวัสดิการ\nสวัสดิภาพ\nสวัสดิมงคล\nสวัสดี\nสวัสติ\nสวาตี\nสวัสติกะ\nสวา\nสวาปาม\nสวาคตะ\nสวาง\nสว่าง\nสวาด\nสวาดิ\nสวาท\nสว่าน\nสว้าน\nสวาบ\nสวามิ\nสวามี\nสวามินี\nสวาย\nสวาสดิ์\nสวาหะ\nสวิง\nสวิญญาณกทรัพย์\nสวิตช์\nสสาร\nสสุระ\nสสุรี\nสหกรณ์\nสหการ\nสหจร\nสหชาต\nสหชาติ\nสหธรรม\nสหธรรมิก\nสหประชาชาติ\nสหพันธ์\nสหพันธรัฐ\nสหภาพ\nสหศึกษา\nสหัช\nสหัมบดี\nสหัส\nสหัสสะ\nสหัสธารา\nสหัสนัยน์\nสหัสเนตร\nสหัสรังสี\nสหัสา\nสหาย\nสอ\nส่อ\nสอง\nส่อง\nส้อง\nสอด\nสอน\nส่อน\nสอบ\nสอพลอ\nส้อม\nสอย\nสะ\nสะกด\nสะกอ\nสะกาง\nสะการะ\nสะกิด\nสะกิดสะเกา\nสะเก็ด\nสะแก\nสะคร้อ\nสะคราญ\nสะค้าน\nสะเงาะสะแงะ\nสะดม\nสะดวก\nสะดิ้ง\nสะดึง\nสะดือ\nสะดุ้ง\nสะดุด\nสะเด็ด\nสะเดา\nสะเดาะ\nสะตอ\nสะตาหมัน\nสะตึ\nสะตือ\nสะตุ\nสะเต๊ะ\nสะโตก\nสะทก\nสะท้อน\nสะท้าน\nสะทึก\nสะเทิน\nสะเทิ้น\nสะเทือน\nสะเทื้อน\nสะบะ\nสะบัก\nสะบักสะบอม\nสะบัด\nสะบัดสะบิ้ง\nสะบั้น\nสะบันงา\nสะบ้า\nสะบู\nสะแบง\nสะเปะสะปะ\nสะพรั่ง\nสะพรึงกลัว\nสะพรึบ\nสะพรึ่บ\nสะพัก\nสะพัง\nสะพัด\nสะพั้น\nสะพาน\nสะพาย\nสะเพร่า\nสะโพก\nสะเภา\nสะใภ้\nสะโมง\nสะระตะ\nสะระแหน่\nสะลาง\nสะลาบ\nสะลึมสะลือ\nสะวี้ดสะว้าด\nสะสม\nสะสวย\nสะสาง\nสะเหล่อ\nสะอาง\nสะอาด\nสะอ้าน\nสะอิ้ง\nสะอิดสะเอียน\nสะอึก\nสะอื้น\nสะเอ้ง\nสะเอว\nสะเออะ\nสะโอดสะอง\nสะไอ\nสัก\nสักกะ\nสักยะ\nสักกัจจะ\nสักกายทิฐิ\nสักการ\nสักการะ\nสักขี\nสักวา\nสักหลาด\nสัค\nสัคคะ\nสั่ง\nสังกร\nสังกรณี\nสังกรประโยค\nสังกะตัง\nสังกะวัง\nสังกะวาด\nสังกะสี\nสังกัด\nสังกัปปะ\nสังกา\nสังการ\nสังกาศ\nสังกิเลส\nสังเกต\nสังข์\nสังขกร\nสังขตธรรม\nสังขตะ\nสังขยา\nสังขลิก\nสังขลิกา\nสังขาร\nสังขารา\nสังเขป\nสังค์\nสังคญาติ\nสังคม\nสังคหะ\nสังคัง\nสังคายนา\nสังคายนาย\nสังคีต\nสังคีติ\nสังเค็ด\nสังเคราะห์\nสังฆกรรม\nสังฆการี\nสังฆเถระ\nสังฆทาน\nสังฆนายก\nสังฆปาโมกข์\nสังฆภัต\nสังฆเภท\nสังฆมณฑล\nสังฆมนตรี\nสังฆราช\nสังฆสภา\nสังฆาณัติ\nสังฆาฏิ\nสังฆาทิเสส\nสังฆาธิการ\nสังฆานุสติ\nสังฆาวาส\nสังยุตนิกาย\nสังโยค\nสังโยชน์\nสังวร\nสังวัจฉระ\nสังวัธยาย\nสังวาล\nสังวาส\nสังเวคะ\nสังเวช\nสังเวชนียสถาน\nสังเวย\nสังเวียน\nสังสกฤต\nสังสการ\nสังสนทนา\nสั่งสนทนา\nสังสรรค์\nสังสารวัฏ\nสังสิทธิ\nสังสุทธ์\nสังสุทธิ\nสังหร\nสังหรณ์\nสังหาร\nสังหาริมทรัพย์\nสังหาริมะ\nสังหิต\nสัจ\nสัจกิริยา\nสัจจะ\nสัจญาณ\nสัจธรรม\nสัจนิยม\nสัจพจน์\nสัชฌะ\nสัชฌุ\nสัญจร\nสัญเจตนา\nสัญชาตญาณ\nสัญชาติ\nสัญฌา\nสัญญา\nสัญญาณ\nสัญญี\nสัญโญชน์\nสัญนิยม\nสัญประกาศ\nสัญลักษณ์\nสัฐิ\nสัณฐาน\nสัณฐิติ\nสัณฑ์\nสัณห์\nสัด\nสัดจอง\nสัต\nสัตตะ\nสัตตาหกรณียะ\nสัตตาหกาลิก\nสัตมวาร\nสัตสดก\nสัตตบงกช\nสัตตบรรณ\nสัตตบุษย์\nสัตตู\nสัตถันดร\nสัตถา\nสัตถิ\nสัตถุ\nสัตถุศาสนา\nสัตบรรณ\nสัตย์\nสัตยพรต\nสัตยวาที\nสัตยาเคราะห์\nสัตยาธิษฐาน\nสัตยาบัน\nสัตว์\nสัตวชาติ\nสัตวบาล\nสัตวแพทย์\nสัตววิทยา\nสัตวา\nสัทธรรม\nสัทธา\nสัทธาจริต\nสัทธาธิกะ\nสัทธินทรีย์\nสัทธิงวิหาริก\nสัทธิวิหาริก\nสัทวิทยา\nสัทศาสตร์\nสัทอักษร\nสัน\nสั่น\nสั้น\nสันดาน\nสันดาป\nสันโดษ\nสันต์\nสันตติ\nสันตะปาปา\nสันตะวา\nสันติ\nสันตุฏฐี\nสันถวไมตรี\nสันถวะ\nสันถัต\nสันถาร\nสันทนะ\nสันทะ\nสันทัด\nสันทัสนะ\nสันทาน\nสันทิฐิก\nสันทิส\nสันเทหะ\nสันธาน\nสันนิธิ\nสันนิบาต\nสันนิวาส\nสันนิษฐาน\nสันสกฤต\nสับ\nสับปลับ\nสับปลี้\nสับปะรด\nสัปคับ\nสัปดาห์\nสัปดาหะ\nสัปดน\nสัปตศก\nสัปทน\nสัปปะ\nสัปปิ\nสัปปุริส\nสัปปุรุษ\nสัประยุทธ์\nสัปหงก\nสัปเหร่อ\nสัพ\nสัพพะ\nสัพพัญญู\nสัพเพเหระ\nสัพยอก\nสัมบูรณ์\nสัมปชัญญะ\nสัมปทา\nสัมปทาน\nสัมปยุต\nสัมปโยค\nสัมประสิทธิ์\nสัมประหาร\nสัมปรายภพ\nสัมปรายิกภพ\nสัมปัตติ\nสัมผัปลาป\nสัมผัปลาปะ\nสัมผัส\nสัมพล\nสัมพหุลา\nสัมพัจฉรฉินท์\nสัมพัตสร\nสัมพัทธ์\nสัมพันธ์\nสัมพันธน์\nสัมพันธภาพ\nสัมพันธมิตร\nสัมพันธไมตรี\nสัมพาหะ\nสัมพุทธ\nสัมพุทธะ\nสัมโพธิ\nสัมภวะ\nสัมภเวสี\nสัมภัต\nสัมภัตตะ\nสัมภาระ\nสัมภาษณ์\nสัมโภคกาย\nสัมมนา\nสัมมัปธาน\nสัมมา\nสัมโมทนียกถา\nสัมฤทธิ\nสัมฤทธิ์\nสัมฤทธิศก\nสัยน์\nสัลเลข\nสัสดี\nสัสตทิฐิ\nสัสสะ\nสัสสุ\nสัสสู\nสา\nส่า\nสาก\nสากรรจ์\nสากล\nสากัจฉา\nสากัลย์\nสากิยะ\nสาเก\nสาขา\nสาคร\nสาคเรศ\nสาคู\nสาง\nส้าง\nสาชล\nสาฎก\nสาฏิก\nสาณี\nสาด\nสาไถย\nสาทร\nสาทิส\nสาทุ\nสาโท\nสาธก\nสาธยะ\nสาธยาย\nสาธารณะ\nสาธารณชน\nสาธารณประโยชน์\nสาธารณภัย\nสาธารณรัฐ\nสาธารณสถาน\nสาธารณสมบัติ\nสาธารณสุข\nสาธารณูปการ\nสาธารณูปโภค\nสาธารณ์\nสาธิต\nสาธุ\nสาน\nส่าน\nสานุ\nสานู\nสานุศิษย์\nสาบ\nสาบสูญ\nสาบาน\nสาป\nสาปไตย\nสาม\nสามชุก\nสามเณร\nสามเณรี\nสามนต์\nสามนตราช\nสามยทรัพย์\nสามล\nสามหาว\nสามะ\nสามัคคี\nสามัญ\nสามัตถิยะ\nสามานย์\nสามานยนาม\nสามารถ\nสามิต\nสามินี\nสามิภักดิ์\nสามี\nสามีจิกรรม\nสาย\nส่าย\nส้าย\nสายชู\nสายัณห์\nสายาห์\nสาร\nสารคดี\nสารธรรม\nสารนิเทศ\nสารบบ\nสารบรรณ\nสารบัญ\nสารบาญ\nสารบาญชี\nสารประโยชน์\nสารสนเทศ\nสารทุกข์\nสารถี\nสารท\nสารพัด\nสารพัน\nสารพางค์\nสารภาพ\nสารภี\nสารวัตร\nสาระ\nสาระแน\nสาระพา\nสาระยำ\nสาระวารี\nสาระสะมา\nสารัตถประโยชน์\nสารัตถศึกษา\nสารัตถะ\nสารัทธ์\nสารัมภ์\nสาราณียกร\nสาราณียธรรม\nสาราณียะ\nสารานุกรม\nสารีริกธาตุ\nสารูป\nสาโรช\nสาละ\nสาละวน\nสาลิ\nสาลิกา\nสาลินี\nสาลี\nสาลี่\nสาลู\nสาโลหิต\nสาว\nสาวก\nสาวิกา\nสาวิตร\nสาวิตรี\nสาสน\nสาสน์\nสาส์น\nสาสนา\nสาสม\nสาหร่าย\nสาหรี\nส่าหรี\nสาหัส\nสาเหตุ\nสาแหรก\nสำ\nสำส่อน\nส่ำ\nสำคัญ\nสำซ่าง\nสำแดง\nสำทับ\nสำนวน\nสำนอง\nสำนัก\nสำนาน\nสำนึก\nสำนึง\nสำเนา\nสำเนียง\nสำบัด\nสำปะลอ\nสำปะหลัง\nสำปั้น\nสำปันนี\nสำเภา\nสำมะงา\nสำมะโน\nสำมะลอ\nสำมะเลเทเมา\nสำมะหา\nสำรด\nสำรวจ\nสำรวม\nสำรวย\nสำรวล\nสำรอก\nสำรอง\nสำรับ\nสำราก\nสำราญ\nสำริด\nสำเร็จ\nสำเรา\nสำเริง\nสำโรง\nสำลัก\nสำลาน\nสำลี\nสำแลง\nสำหรวด\nสำหรับ\nสำหา\nสำเหนียก\nสำเหร่\nสำออย\nสำอาง\nสิ\nสิกข์\nสิข\nสิกขมานา\nสิกขา\nสิขร\nสิขรี\nสิขเรศ\nสิขา\nสิขานล\nสิขี\nสิคาล\nสิง\nสิ่ง\nสิงขร\nสิงค์\nสิงคลิ้ง\nสิงคลี\nสิงคาร\nสิงคาล\nสิงคี\nสิงโต\nสิงห์\nสิงหนาท\nสิงหบัญชร\nสิงหรา\nสิงหราช\nสิงหาคม\nสิงหาสน์\nสิงหล\nสิญจน์\nสิตะ\nสิตางศุ์\nสิถิล\nสิทธ์\nสิทธัตถะ\nสิทธา\nสิทธาจารย์\nสิทธารถ\nสิทธิ\nสิทธิ์\nสิทธิการิยะ\nสิธยะ\nสิน\nสิ้น\nสินเทา\nสินธพ\nสินธุ\nสินธุ์\nสินธุระ\nสินธู\nสินเธาว์\nสินาด\nสินิทธ์\nสินี\nสิเนรุ\nสิเนหก\nสิเนหะ\nสิเนหา\nสิเน่หา\nสิบ\nสิปปะ\nสิมพลี\nสิระ\nสิโรดม\nสิโรตม์\nสิริ\nสิรี\nสิลา\nสิว\nสิ่ว\nสิวะ\nสิวาลัย\nสิวิกา\nสี\nสี่\nสี้\nสีกา\nสีกุน\nสีข้าง\nสีด\nสีดอ\nสีดา\nสีตลรัศมี\nสีตโลทก\nสีโตทก\nสีทันดร\nสีมันต์\nสีมา\nสีละมัน\nสีวิกา\nสีสอ\nสีสะ\nสีสา\nสีสุก\nสีเสียด\nสีห์\nสีหนาท\nสีหบัญชร\nสีหราช\nสีหไสยา\nสีหไสยาสน์\nสีหะ\nสึก\nสึง\nสืบ\nสื่อ\nสุ\nสุก\nสุกข์\nสุกร\nสุกรม\nสุกำศพ\nสุกียากี้\nสุข\nสุขา\nสุขาภิบาล\nสุขารมณ์\nสุขาวดี\nสุขิน\nสุขี\nสุขุม\nสุขุมาล\nสุโข\nสุคต\nสุคติ\nสุคนธ\nสุคนธ์\nสุคนธชาติ\nสุคนธรส\nสุคันธ์\nสุคันธรส\nสุงกะ\nสุงกากร\nสุงสิง\nสุงสุมาร\nสุจริต\nสุจหนี่\nสุจิ\nสุจิต\nสุจิตร\nสุชน\nสุชัมบดี\nสุชา\nสุชาดา\nสุญ\nสุญญากาศ\nสุญตา\nสุญนิยม\nสุณ\nสุณิสา\nสุด\nสุดา\nสุต\nสุตตนิบาต\nสุตตะ\nสุตตันตปิฎก\nสุตตันตะ\nสุติ\nสุทธ\nสุทธ์\nสุทธาวาส\nสุทธิ\nสุทรรศน์\nสุทัศน์\nสุธา\nสุธาโภชน์\nสุธารส\nสุธาสินี\nสุธาสี\nสุธี\nสุนทร\nสุนทรี\nสุนทรียภาพ\nสุนทรียศาสตร์\nสุนทรียะ\nสุนัข\nสุนันท์\nสุโนก\nสุบดี\nสุบรรณ\nสุบิน\nสุปรีดิ์\nสุปรีย์\nสุปาณี\nสุพพัต\nสุพรรณ\nสุพรรณบัฏ\nสุพรรณภาชน์\nสุพรรณราช\nสุพรรณศรี\nสุพรรณถัน\nสุพรรณิการ์\nสุภร\nสุภัค\nสุภา\nสุภาพ\nสุภาษิต\nสุม\nสุ่ม\nสุมทุม\nสุมน\nสุมนะ\nสุมนัส\nสุมนา\nสุ้มเสียง\nสุมะ\nสุมาลี\nสุเมธ\nสุเมรุ\nสุรคต\nสุรเชษฐ์\nสุรบดี\nสุรภาพ\nสุรโลก\nสุรสีหนาท\nสุรเสียง\nสุรงค์\nสุรังค์\nสุรภี\nสุรัติ\nสุรัสวดี\nสุรา\nสุรางค์จำเรียง\nสุรางคนา\nสุรางคนางค์\nสุรารักษ์\nสุราลัย\nสุรินทร์\nสุรินทราหู\nสุริยะ\nสุริยกันต์\nสุริยกานต์\nสุริยการ\nสุริยกาล\nสุริยคติ\nสุริยคราส\nสุริยมณฑล\nสุริยวงศ์\nสุริยง\nสุริยา\nสุริเยนทร์\nสุริเยศ\nสุริโย\nสุริยน\nสุริยัน\nสุริยุปราคา\nสุรีย์\nสุรุ่ยสุร่าย\nสุลต่าน\nสุวคนธ์\nสุวภาพ\nสุวรรณ\nสุวรรณภูมิ\nสุวะ\nสุวาน\nสุวินัย\nสุวิมล\nสุษิระ\nสุสาน\nสุหนัต\nสุหร่ง\nสุหร่าย\nสุหฤท\nสุหัท\nสุเหร่า\nสู\nสู่\nสู้\nสูง\nสูจิ\nสูจิบัตร\nสูญ\nสูด\nสูต\nสูตร\nสูติ\nสูติกรรม\nสูตินรีเวช\nสูติบัตร\nสูติแพทย์\nสูติศาสตร์\nสูท\nสูทกรรม\nสูทศาสตร์\nสูบ\nสูปะ\nสูร\nสูรย์\nสูรยกานต์\nสูริ\nสูสี\nเส\nเสก\nเสกขบุคคล\nเสกขะ\nเสขบุคคล\nเสขะ\nเส็ง\nเส้ง\nเส็งเคร็ง\nเสงี่ยม\nเสฏฐี\nเสณี\nเสด\nเสด็จ\nเสตุ\nเสถียร\nเสทะ\nเสโท\nเสน\nเส้น\nเสนง\nเสน่ง\nเสน่ห์\nเสนหา\nเสน่หา\nเสนอ\nเสนะ\nเสนา\nเสนาธิการ\nเสนาบดี\nเสน่า\nเสนากุฎ\nเสนางค์\nเสนางคนิกร\nเสนานี\nเสนาสนะ\nเสนาะ\nเสนี\nเสนีย์\nเสนียะ\nเสนียด\nเสบย\nเสบียง\nเสพ\nเสพย์\nเสเพล\nเสภา\nเสม็ด\nเสมหะ\nเสมอ\nเสมา\nเสมียน\nเสมือน\nเสย\nเสร็จ\nเสริด\nเสริม\nเสรี\nเสลด\nเสลบรรพต\nเสลา\nเสลี่ยง\nเสลือกสลน\nเสโล\nเสวก\nเสวกามาตย์\nเสวนะ\nเสวนา\nเสวย\nเสวียน\nเสสรวง\nเสสรวล\nเสา\nเส้า\nเสาร์\nเสารภย์\nเสารี\nเสาวคนธ์\nเสาวธาร\nเสาวภา\nเสาวภาคย์\nเสาวภาพ\nเสาวรภย์\nเสาวรส\nเสาวลักษณ์\nเสาวณิต\nเสาวนะ\nเสาวนา\nเสาวนีย์\nเสาหฤท\nเสาะ\nเสาะแสะ\nเสิร์จ\nเสิร์ฟ\nเสีย\nเสียง\nเสี่ยง\nเสียด\nเสี้ยน\nเสียบ\nเสียม\nเสี่ยม\nเสี้ยม\nเสียว\nเสี่ยว\nเสี้ยว\nเสือ\nเสื่อ\nเสื้อ\nเสือก\nเสื่อม\nแส\nแส่\nแส้\nแสก\nแสง\nแสด\nแสดง\nแสตมป์\nแสน\nแสนย์\nแสนยากร\nแสนยานุภาพ\nแสบ\nแสม\nแสยก\nแสยง\nแสยะ\nแสรก\nแสร้ง\nแสลง\nแสล้ม\nแสวง\nแสะ\nโสก\nโสกโดก\nโสกันต์\nโสโครก\nโสณฑ์\nโสณิ\nโสณี\nโสด\nโสดก\nโสดม\nโสดา\nโสดาบัน\nโสดาปัตติผล\nโสดาปัตติมรรค\nโสต\nโสตทัศนวัสดุ\nโสตทัศนอุปกรณ์\nโสตทัศนูปกรณ์\nโสตินทรีย์\nโสตถิ\nโสทก\nโสทร\nโสธก\nโสธนะ\nโสน\nโสภณ\nโสภา\nโสภี\nโสภิณี\nโสเภณี\nโสม\nโสมนัส\nโสมม\nโสมย์\nโสร่ง\nโสรจ\nโสรวาร\nโสโร\nโสวรรณ\nโสหุ้ย\nโสฬส\nใส\nใส่\nไส\nไส้\nไสย\nไสยา\nไสยาสน์\nไสร้\nไสว\nหก\nหกคะเมน\nหง\nหงก\nหงส์\nหงสบาท\nหงสรถ\nหงอ\nหงอก\nหง่อง\nหงองแหงง\nหงอด\nหงอน\nหง่อม\nหงอย\nหง่อย\nหงัก\nหงับ\nหง่าง\nหงาย\nหง่าว\nหงำ\nหงิก\nหงิง\nหงิม\nหงึก\nหงุงหงิง\nหงุดหงิด\nหงุบ\nหงุ่ย\nหญ้า\nหญ้าฝรั่น\nหญ้ายายเภา\nหญิง\nหญิบ\nหด\nหตะ\nหทัย\nหน\nหนวก\nหน่วง\nหนวด\nหน่วย\nหน่วยกิต\nหนอ\nหน่อ\nหนอก\nหนอง\nหนอน\nหนอนตายหยาก\nหน่อย\nหน็อยแน่\nหนัก\nหนัง\nหนังสติ๊ก\nหนังสือ\nหนั่น\nหนับ\nหนา\nหน้า\nหน่าง\nหนาด\nหนาน\nหนาม\nหน่าย\nหนาว\nหนำ\nหนำเลี้ยบ\nหนี\nหนี้\nหนีบ\nหนึก\nหนึ่ง\nหนึบ\nหนืด\nหนุ\nหนุน\nหนุบ\nหนุ่ม\nหนุ่ย\nหนู\nห่ม\nหมก\nหมด\nหม่น\nหมวก\nหมวด\nหมวน\nหมอ\nหม่อ\nหม้อ\nหมอก\nหมอง\nหม่อง\nหมอน\nหม่อน\nหมอบ\nหม่อม\nหมอย\nหม้อห้อม\nหมัก\nหมักหมม\nหมัด\nหมัน\nหมั่น\nหมั้น\nหมับ\nหมา\nหม่า\nหมาก\nหมากฮอส\nหมาง\nหมาด\nหมามุ่ย\nหมามุ้ย\nหมาย\nหม้าย\nหมาร่า\nหม่ำ\nหม้ำ\nหมิ่น\nหมี\nหมี่\nหมึก\nหมืน\nหมื่น\nหมุด\nหมุน\nหมุบ\nหมุบหมับ\nหมุบหมิบ\nหมุ่ย\nหมุยขาว\nหมู\nหมู่\nหมูหริ่ง\nหยก\nหย่ง\nหยด\nหยวก\nหยวบ\nหยอก\nหยอกเอิน\nหย็อกหย็อย\nหยอง\nหย็อง\nหย่อง\nหย็องกรอด\nหย็องแหย็ง\nหยอด\nหยอน\nหย่อน\nหย่อม\nหย็อมแหย็ม\nหย็อย\nหย่อย\nหยัก\nหยักไย่\nหยักเหยา\nหยัง\nหยั่ง\nหยังหยัง\nหยัด\nหยัน\nหยับ\nหยั่วเมือง\nหย่า\nหยากเยื่อ\nหยากไย่\nหยาด\nหยาบ\nหยาม\nหยาว\nหย้าว\nหยำเป\nหยำเหยอะ\nหยำแหยะ\nหยิก\nหยิ่ง\nหยิบ\nหยิม\nหยี\nหยี่\nหยุกหยิก\nหยุด\nหยุ่น\nหยุบ\nหยุมหยิม\nหยูกยา\nหโยดม\nหรคุณ\nหรณะ\nหรดาล\nหรดี\nหรรษ์\nหรรษา\nหรอ\nหรอก\nหร็อมแหร็ม\nหรอย\nหระ\nหรับ\nหรา\nหริ\nหริ่ง\nหริณะ\nหริต\nหริตกี\nหรีตกี\nหรี่\nหรีด\nหรือ\nหรุบ\nหรุบรู่\nหรุบหรู่\nหรุ่ม\nหรู\nหรูหรา\nหฤทัย\nหฤทย์\nหฤษฎ์\nหฤษฎี\nหฤหรรษ์\nหฤโหด\nหลง\nหลงใหล\nหลงจู๊\nหลด\nหลน\nหล่น\nหลบ\nหล่ม\nหลวง\nหลวม\nหลอ\nหล่อ\nหลอก\nหลอด\nหลอน\nหล็อน\nหล่อน\nหลอม\nหละ\nหละหลวม\nหลัก\nหลัง\nหลั่ง\nหลัด\nหลั่น\nหลับ\nหลัว\nหลา\nหล้า\nหลาก\nหลาน\nหลาบ\nหลาม\nหลาย\nหลาว\nหลิ่ง\nหลิท\nหลิน\nหลิม\nหลิว\nหลิ่ว\nหลี\nหลีก\nหลีโก\nหลีบ\nหลีฮื้อ\nหลืบ\nหลุกหลิก\nหลุด\nหลุน\nหลุบ\nหลุม\nหลุมพอ\nหลุมพี\nหลู่\nหวง\nห่วง\nห้วง\nหวด\nหวน\nห้วน\nหวย\nห้วย\nหวอ\nหวอด\nหวะ\nหวัง\nหวัด\nหวั่น\nหวันยิหวา\nหวัว\nหวัวร่อ\nหวัวเราะ\nหวา\nหว่า\nหว้า\nหวาก\nหว่าง\nหวาด\nหวาน\nหว่าน\nหวาม\nหวาย\nหวำ\nหวิด\nหวิว\nหวี\nหวี่\nหวีด\nหวือ\nหวุดหวิด\nหวูด\nหอ\nห่อ\nห้อ\nหอก\nหอง\nห้อง\nหอน\nห่อน\nหอบ\nหอม\nห้อม\nหอย\nห้อย\nหะ\nหะยี\nหะหาย\nหัก\nหัจญ์\nหัจญี\nหัช\nหัฏฐะ\nหัด\nหัต\nหัตถ์\nหัตถกรรม\nหัตถการ\nหัตถกิจ\nหัตถบาส\nหัตถพันธ์\nหัตถาภรณ์\nหัตถศาสตร์\nหัตถศิลป์\nหัตถศึกษา\nหัตถาจารย์\nหัตถินี\nหัตถี\nหัน\nหั่น\nหั้น\nหันตรา\nหับ\nหัย\nหัว\nหัวร่อ\nหัวเราะ\nหัส\nหัสดิน\nหัสดี\nหัสต์\nหัสตะ\nหา\nห่า\nห้า\nหาก\nหาง\nห่าง\nห้าง\nหาญ\nหาด\nห่าน\nหาบ\nหาม\nห่าม\nห้าม\nหาย\nหายใจ\nหายนะ\nหาร\nหารือ\nหาว\nห้าว\nหาสะ\nหำ\nห้ำ\nหิ้ง\nหิงคุ\nหิงสา\nหิงห้อย\nหิ่งห้อย\nหิ่งหาย\nหิด\nหิต\nหิตานุหิตประโยชน์\nหิน\nหิมพาน\nหิมพานต์\nหิมวัต\nหิมวันต์\nหิมวา\nหิมะ\nหิมาลัย\nหิรัญ\nหิรัญญิการ์\nหิรัญบัฏ\nหิรัณย์\nหิรัณยรัศมี\nหิริ\nหิว\nหิ้ว\nหี\nหีด\nหีนยาน\nหีบ\nหึ\nหึง\nหึ่ง\nหึงสา\nหืด\nหืน\nหื่น\nหือ\nหื้อ\nหุง\nหุน\nหุ่น\nหุ้น\nหุนหัน\nหุบ\nหุ้ม\nหุยฮา\nหู\nหู่\nหูก\nหูด\nเห\nเห่\nเหง\nเหง่ง\nเหงา\nเหง้า\nเหงื่อ\nเหงือก\nเห็จ\nเห็ด\nเหติ\nเหตุ\nเห็น\nเหน่ง\nเหนงนายพราน\nเหน็ดเหนื่อย\nเหน็บ\nเหน่อ\nเห็นอ้ม\nเหนอะ\nเหนอะหนะ\nเหน้า\nเหนาะ\nเหนียง\nเหนี่ยง\nเหนี่ยน\nเหนียม\nเหนียว\nเหนี่ยว\nเหนือ\nเหนื่อย\nเห็บ\nเหม\nเหม่\nเหม็ง\nเหม่ง\nเหม็น\nเหมวดี\nเหม่อ\nเหมันต์\nเหมันตฤดู\nเหมา\nเหมายัน\nเหมาะ\nเหมียว\nเหมี่ยว\nเหมือง\nเหมือด\nเหมือน\nเหมื่อย\nเหย\nเหยง\nเหย่อย\nเหยา\nเหย่า\nเหย้า\nเหยาะ\nเหยาะแหยะ\nเหยิง\nเหยิบ\nเหยียด\nเหยียบ\nเหยี่ยว\nเหยื่อ\nเหยือก\nเหรอ\nเหรอะ\nเหรัญญิก\nเหรา\nเหราะ\nเหรียญ\nเหล่\nเหล็ก\nเหลน\nเหลว\nเหลอ\nเหลา\nเหล่า\nเหล้า\nเหลาะแหละ\nเหลิง\nเหลิงเจิ้ง\nเหลียน\nเหลี่ยม\nเหลียว\nเหลือ\nเหลือก\nเหลือง\nเหลือบ\nเหลือม\nเหลื่อม\nเหว\nเหว่\nเหวง\nเหวย\nเหวอะ\nเหวอะหวะ\nเหวี่ยง\nเห่อ\nเหอะ\nเหะ\nเหะหะ\nเหา\nเห่า\nเหาะ\nเหิน\nเหิม\nเหี้ย\nเหียง\nเหียน\nเหี้ยน\nเหี้ยม\nเหี่ยว\nเหื่อ\nเหือด\nแห\nแห่\nแห้\nแหก\nแหง\nแหง่\nแห่ง\nแห้ง\nแหงแก๋\nแหง่ง\nแหงน\nแหน\nแห้น\nแหนง\nแหนบ\nแหนม\nแหบ\nแหม\nแหม่\nแหม่ม\nแหมะ\nแหย\nแหย่\nแหยง\nแหย่ง\nแหยม\nแหย็ม\nแหยะ\nแหล่\nแหลก\nแหล่ง\nแหลน\nแหลม\nแหละ\nแหว\nแห้ว\nแหวก\nแหว่ง\nแหวด\nแหวน\nแหวะ\nแหะ\nโห่\nโหง\nโหด\nโหน\nโหนก\nโหน่ง\nโหม\nโหม่ง\nโหมด\nโหย\nโหยกเหยก\nโหยง\nโหย่ง\nโหร\nโหรง\nโหรงเหรง\nโหรดาจารย์\nโหระพา\nโหรา\nโหราจารย์\nโหราศาสตร์\nโหล\nโหล่\nโหลงโจ้ง\nโหว\nโหว่\nโหว้\nโหวกเหวก\nโหวง\nโหวด\nโหวต\nให้\nใหญ่\nใหม่\nไห\nไห่\nไห้\nไหน\nไหม\nไหม้\nไหรณย์\nไหล\nไหล่\nไหว\nไหว้\nไหหลำ\nอก\nอกตเวทิตา\nอกตเวที\nอกตัญญุตา\nอกตัญญู\nอกนิษฐ์\nอกรณีย์\nอกรรมกริยา\nอกัปปิยวัตถุ\nอกัปปิยะ\nอกุศล\nอคติ\nอคาธ\nอโฆษะ\nองก์\nองค์\nองคชาต\nองคมนตรี\nองครักษ์\nองคาพยพ\nองคุลี\nองศ์\nองศา\nองอาจ\nองุ่น\nอจลา\nอจินตา\nอจินไตย\nอจิระ\nอเจลก\nอเจละ\nอชะ\nอชิน\nอชินี\nอชิระ\nอฏวี\nอณิ\nอณู\nอโณทัย\nอด\nอดิถี\nอดิเทพ\nอดิเรก\nอดิศร\nอดิศวร\nอดิศัย\nอดีต\nอดุล\nอดุลย์\nอติ\nอติชาต\nอติมานะ\nอติราช\nอติเรก\nอติสาร\nอถรรพเวท\nอาถรรพเวท\nอทระ\nอทินนาทาน\nอธรรม\nอธิ\nอธิกมาส\nอธิกรณ์\nอธิกวาร\nอธิกสุรทิน\nอธิการ\nอธิคม\nอธิฏฐาน\nอธิบดี\nอธิบาย\nอธิป\nอธิปไตย\nอธิมาตร\nอธิมุตติ\nอธิโมกข์\nอธิราช\nอธิวาส\nอธิวาสนะ\nอธิศีล\nอธิษฐาน\nอธึก\nอ้น\nอนงค์\nอนงคณะ\nอนงคเลขา\nอนธการ\nอนนต์\nอนยะ\nอนรรฆ\nอนรรถ\nอนล\nอนวัช\nอนัญ\nอนัตตา\nอนันต์\nอนันตริยกรรม\nอนัม\nอนาคต\nอนาคามิผล\nอนาคามิมรรค\nอนาคามี\nอนาจาร\nอนาถ\nอนาถา\nอนาทร\nอนาธิปไตย\nอนามัย\nอนามิกา\nอนารยชน\nอนารยธรรม\nอนารยะ\nอนาลัย\nอนำ\nอนิจ\nอนิจจัง\nอนิจจา\nอนิฏฐารมณ์\nอนิยต\nอนิยม\nอนิล\nอนิวรรต\nอนิวรรตน์\nอนีกะ\nอนีจะ\nอนึก\nอนึ่ง\nอนุ\nอนุกร\nอนุกรม\nอนุกรรมการ\nอนุกระเบียด\nอนุกาชาด\nอนุการ\nอนุกูล\nอนุคามิก\nอนุเคราะห์\nอนุจร\nอนุช\nอนุชน\nอนุชา\nอนุชาต\nอนุชิต\nอนุญาต\nอนุญาโตตุลาการ\nอนุตร\nอนุเถระ\nอนุทิน\nอนุบท\nอนุบาล\nอนุประโยค\nอนุปริญญา\nอนุปสัมบัน\nอนุปัสนา\nอนุพงศ์\nอนุพัทธ์\nอนุพันธ์\nอนุโพธ\nอนุภรรยา\nอนุภริยา\nอนุภาค\nอนุภาษ\nอนุมัติ\nอนุมาตรา\nอนุมาน\nอนุมูล\nอนุโมทนา\nอนุโยค\nอนุรักษ์\nอนุรักษนิยม\nอนุราช\nอนุราธ\nอนุราธะ\nอนุราธา\nอนุรูป\nอนุโลม\nอนุวงศ์\nอนุวรรตน์\nอนุวัต\nอนุวัตน์\nอนุวัตร\nอนุวัติ\nอนุวาต\nอนุศาสก\nอนุศาสน์\nอนุศาสนาจารย์\nอนุศิษฏ์\nอนุสติ\nอนุสนธิ\nอนุสร\nอนุสรณ์\nอนุสัญญา\nอนุสัย\nอนุสาวรีย์\nอนุสาสนี\nอเนก\nอเนกคุณ\nอเนกรรถประโยค\nอเนจอนาถ\nอโนชา\nอโนดาต\nอบ\nอบเชย\nอบาย\nอปจายนธรรม\nอปจายนมัย\nอปมงคล\nอปยศ\nอประไมย\nอปรัณณชาติ\nอปรา\nอปราชัย\nอปราชิต\nอปริมาณ\nอปลักษณ์\nอปโลกน์\nอปวาท\nอเปหิ\nอพพะ\nอพยพ\nอภัพ\nอภัย\nอภิ\nอภิฆาต\nอภิชฌา\nอภิชน\nอภิชนาธิปไตย\nอภิชัย\nอภิชาต\nอภิชิต\nอภิญญา\nอภิญญาณ\nอภิธรรม\nอภิธาน\nอภิไธย\nอภินันท์\nอภินันทนาการ\nอภินัย\nอภินิหาร\nอภิเนษกรมณ์\nอภิบาล\nอภิปรัชญา\nอภิปราย\nอภิมหาอำนาจ\nอภิมานะ\nอภิมุข\nอภิรดี\nอภิรติ\nอภิรมย์\nอภิรักษ์\nอภิราม\nอภิรุต\nอภิรุม\nอภิรูป\nอภิลักขิต\nอภิลักขิตสมัย\nอภิเลปน์\nอภิวันท์\nอภิวาท\nอภิวาทน์\nอภิเษก\nอภิสมโพธิ\nอภิสมัย\nอภิสมาจาร\nอภิสัมโพธิ\nอภิสัมโพธิญาณ\nอภิสิต\nอภิสิทธิ์\nอภูตะ\nอม\nอมพะนำ\nอ้ม\nอมตธรรม\nอมตบท\nอมตะ\nอมนุษย์\nอมร\nอมรา\nอมราวดี\nอมรินทร์\nอมเรนทร์\nอมเรศ\nอมฤต\nอมัตร\nอมาตย์\nอมาวสี\nอมาวสุ\nอมาวาสี\nอมิตร\nอเมริกัน\nอย่า\nอยาก\nอย่าง\nอยุทธ์\nอยู่\nอร\nอรชร\nอรชุน\nอรดี\nอรติ\nอรทัย\nอรไท\nอรนุช\nอรพินท์\nอรพิม\nอรรค\nอรรฆ\nอรรฆย์\nอรรจน์\nอรรณพ\nอรรถ\nอรรถกถา\nอรรถกถาจารย์\nอรรถาธิบาย\nอรรธ\nอรสุม\nอรหะ\nอรหัง\nอรหัต\nอรหัตผล\nอรหัตมรรค\nอรหัน\nอรหันต์\nอรหันตฆาต\nอร่อย\nอรัญ\nอรัญญิก\nอรัญวาส\nอรัญวาสี\nอรัณย์\nอราดี\nอร่าม\nอริ\nอรินทร์\nอริน\nอริยกะ\nอริยทรัพย์\nอริยบุคคล\nอริยผล\nอริยมรรค\nอริยสัจ\nอริยะ\nอรุณ\nอรุโณทัย\nอรุ่ม\nอรูป\nอลงกต\nอลงกรณ์\nอลงการ\nอลวน\nอลเวง\nอลหม่าน\nอล่องฉ่อง\nอลักเอลื่อ\nอลังการ\nอลัชชี\nอล่างฉ่าง\nอลิงค์\nอลึงค์\nอลึ่งฉึ่ง\nอโลหะ\nอ้วก\nอวกาศ\nอวจร\nอวชัย\nอวชาต\nอวด\nอวตาร\nอวน\nอ้วน\nอวบ\nอวมงคล\nอวย\nอวยวะ\nอวรรค\nอวรุทธ์\nอวรุทธก\nอวล\nอวสาน\nอวหาร\nอวัยวะ\nอวัสดา\nอวาจี\nอวิจี\nอวิชชา\nอวิญญาณกทรัพย์\nอวิญญู\nอวิรุทธ์\nอวิโรธน์\nอวิโรธนะ\nอวิหิงสา\nอวีจิ\nอเวจี\nอโศก\nอสงไขย\nอสนี\nอัสนี\nอสนีบาต\nอสภะ\nอสมการ\nอสมมาตร\nอสรพิษ\nอสังหาริมทรัพย์\nอสังหาริมะ\nอสัญกรรม\nอสัญญี\nอสัญแดหวา\nอสัตถพฤกษ์\nอัสสัตถพฤกษ์\nอสัตย์\nอสัมภิน\nอสัมภินพงศ์\nอสัมภินวงศ์\nอสิ\nอสิธารา\nอสิต\nอสิเลสะ\nอสีตยานุพยัญชนะ\nอสีติ\nอสุ\nอสุจิ\nอสุนีบาต\nอสุภ\nอสุรกาย\nอสุรา\nอสุรี\nอสุเรศ\nอสูร\nอเสกขบุคคล\nอเสกขะ\nอเสขบุคคล\nอเสขะ\nอหังการ\nอหิ\nอหิงสา\nอหิวาต์\nอหิวาตกโรค\nอหึงสา\nอเหตุกทิฐิ\nอโหสิ\nออ\nอ้อ\nอ๋อ\nออก\nออกซิเจน\nออกซิเดชัน\nออกไซด์\nออกญา\nอ่อง\nอ๋อง\nอ้องแอ้ง\nออเซาะ\nออด\nอ๊อด\nอ๊อดแอ๊ด\nอ่อน\nอ้อน\nออนซ์\nออนซอน\nอ้อนแอ้น\nออฟฟิศ\nออม\nอ่อม\nอ้อม\nออมชอม\nออมซอม\nอ้อมแอ้ม\nอ่อย\nอ้อย\nอ๋อย\nอ้อยส้อย\nอ้อยอิ่ง\nออสเมียม\nอ้อแอ้\nอ๊ะ\nอะคร้าว\nอะเคื้อ\nอะแจ\nอะเซทิลีน\nอะดรีนาลิน\nอะดุง\nอะตอม\nอะมีบา\nอะเมริเซียม\nอะร้าอร่าม\nอะไร\nอะลุ่มอล่วย\nอะลุ้มอล่วย\nอะลูมิเนียม\nอะหม\nอะไหล่\nอัก\nอั้ก\nอั๊ก\nอักกะ\nอักโกธะ\nอักขรวิธี\nอักขรวิบัติ\nอักขรสมัย\nอักขระ\nอักขรานุกรม\nอักขะ\nอักโข\nอักโขภิณี\nอักโขเภณี\nอักษร\nอักษะ\nอักเษาหิณี\nอักเสบ\nอักอ่วน\nอัคคะ\nอัคคิ\nอัคคี\nอัคนิ\nอัคนี\nอัคร\nอัครชายา\nอัครมเหสี\nอัครราชทูต\nอัครสมณทูต\nอัง\nอังก์\nอังกนะ\nอังกฤษ\nอังกะลุง\nอังกา\nอังกาบ\nอังกุระ\nอังกุศ\nอังกูร\nอังคณะ\nอังคณา\nอังคาร\nอังคาส\nอังคีรส\nอังคุฐ\nอังคุตรนิกาย\nอังฆาต\nอังแพลม\nอั้งยี่\nอั้งโล่\nอังศุ\nอังศุก\nอังศุธร\nอังศุมาลี\nอังสกุฏ\nอังสตรอม\nอังสนา\nอังสภาระ\nอังสะ\nอังสา\nอัจกลับ\nอัจจิ\nอัจจิมา\nอัจจุตะ\nอัจฉรา\nอัจฉริยบุคคล\nอัจฉริยภาพ\nอัจฉริยลักษณ์\nอัจฉริยลักษณะ\nอัจฉริยะ\nอัจนา\nอัชฌัตติก\nอัชฌา\nอัชฌาจาร\nอัชฌาศัย\nอัชฌาสัย\nอัญเดียรถีย์\nอัญมณี\nอัญขยม\nอัญชนะ\nอัญชลี\nอัญชัน\nอัญชุลี\nอัญเชิญ\nอัญญะ\nอัญดิตถีย์\nอัญเดียรถีย์\nอัญประกาศ\nอัญรูป\nอัฏ\nอัฏฐบาน\nอัฏฐะ\nอัฏฐังคิกมรรค\nอัฏนา\nอัฐ\nอัฐฬส\nอัฐเคราะห์\nอัฐทิศ\nอัฐบริขาร\nอัฐบาน\nอัฐม\nอัฐมี\nอัฐศก\nอัฐิ\nอัฒจันทร์\nอัฒภาค\nอัฒมาส\nอัฒรัตติ\nอัณฑโกส\nอัณฑชะ\nอัณฑะ\nอัณณพ\nอัด\nอัดแจ\nอัต\nอัตชีวประวัติ\nอัตนัย\nอัตภาพ\nอัตวินิบาตกรรม\nอัตคัด\nอัตตโนบท\nอัตตา\nอัตตาธิปไตย\nอัตถ์\nอัตถะ\nอัตโนมัติ\nอัตรชะ\nอัตรา\nอัตลัด\nอัททา\nอัทธ์\nอัทธา\nอัทธาน\nอัทธายุ\nอัธยาตมวิทยา\nอัธยาย\nอัธยาศัย\nอัน\nอั้น\nอั๋น\nอันดร\nอันดับ\nอันตกะ\nอันตกาล\nอันตะ\nอันตคุณ\nอันตรภาค\nอันตรวาสก\nอันตรธาน\nอันตรา\nอันตราย\nอันตรายิกธรรม\nอันติกะ\nอันติมสัจ\nอันติมะ\nอันเต\nอันโต\nอันเตปุริก\nอันเตวาสิก\nอันแถ้ง\nอันโทล\nอันธการ\nอันธพาล\nอันธิกา\nอันเวส\nอับ\nอับปาง\nอัปปะ\nอัปเปหิ\nอัปภาคย์\nอัปมงคล\nอัปยศ\nอัประมาณ\nอัประไมย\nอัปราชัย\nอัปรีย์\nอัปลักษณ์\nอัปสร\nอัพพุท\nอัพโพหาริก\nอัพภันดร\nอัพภาน\nอัพภาส\nอัพภูตธรรม\nอัพยากฤต\nอัมพฤกษ์\nอัมพาต\nอัมพวัน\nอัมพวา\nอัมพร\nอัมพา\nอัมพิละ\nอัมพุ\nอัมพุช\nอัมพุชินี\nอัมพุท\nอัยกา\nอัยการ\nอัยกี\nอัยยะ\nอัยยิกา\nอัลกุรอาน\nอัลตราไวโอเลต\nอั่ว\nอัศจรรย์\nอัศเจรีย์\nอัศว\nอัศวเมธ\nอัศวยุช\nอัศวานึก\nอัศวิน\nอัศวินี\nอัษฎมงคล\nอัษฏมงคล\nอัษฎางคิกมรรค\nอัษฎายุธ\nอัษฎาวุธ\nอัสสะ\nอัสดร\nอัสกัณ\nอัสดง\nอัสดงคต\nอัสมิมานะ\nอัสสนี\nอัสสานึก\nอัสสาสะ\nอัสสุ\nอา\nอ่า\nอ้า\nอ๋า\nอากร\nอากังขา\nอากัป\nอาการ\nอากาศ\nอากูล\nอาเกียรณ์\nอาขยาต\nอาขยาน\nอาคเนย์\nอาคม\nอาครหายณี\nอาคันตุกะ\nอาคันตุกภัต\nอาคันตุกวัตร\nอาคาร\nอาฆาต\nอ่าง\nอ้าง\nอางขนาง\nอ้างว้าง\nอาจ\nอาจม\nอาจริยวัตร\nอาจริยวาท\nอาจาด\nอาจาร\nอาจารย์\nอาจารี\nอาจิณ\nอาเจียน\nอาชญา\nอาชวะ\nอาชา\nอาชาไนย\nอาชีพ\nอาชีวศึกษา\nอาชีวะ\nอาชีวก\nอาญา\nอาฏานา\nอาณัติ\nอาณา\nอาด\nอาดูร\nอาดุลย์\nอาดูลย์\nอาเด๊ะ\nอาตมภาพ\nอาตมัน\nอาตมา\nอาถรรพ์\nอาถรรพณ์\nอาทร\nอาทิ\nอาทิจจวาร\nอาทิตย์\nอาทิตยมณฑล\nอาทิตยวาร\nอาทีนพ\nอาทีนวะ\nอาทึก\nอาเทศ\nอาเทสนา\nอาธรรม\nอาธรรม์\nอาธาน\nอาธาร\nอาน\nอ่าน\nอานน\nอานนท์\nอานันท์\nอานันทนะ\nอานัม\nอานาปานะ\nอานาปานัสสติ\nอานิสงส์\nอานุภาพ\nอานุภาวะ\nอาบ\nอาบัติ\nอาบัน\nอาปณกะ\nอาปณะ\nอาปะ\nอาโป\nอาปานะ\nอาพัทธ์\nอาพันธ์\nอาพันธนะ\nอาพาธ\nอาเพศ\nอาภรณ์\nอาภัพ\nอาภัสระ\nอาภา\nอาภาส\nอามลกะ\nอามัย\nอามิษ\nอามิส\nอาย\nอ้าย\nอายตนะ\nอายตะ\nอายน\nอายัด\nอายัต\nอายัน\nอายาจนะ\nอายานะ\nอายุ\nอายุตกะ\nอายุธ\nอายุรกรรม\nอายุรแพทย์\nอายุรเวช\nอายุรเวท\nอายุศาสตร์\nอายุษ\nอาร์กอน\nอารดี\nอารติ\nอาร์ต\nอารทรา\nอาร์ม\nอารมณ์\nอารยชน\nอารยชาติ\nอารยธรรม\nอารยประเทศ\nอารยะ\nอารยัน\nอาระ\nอารักขา\nอารักษ์\nอารัญ\nอารัณย์\nอารัญญิก\nอารัณยกะ\nอารัติ\nอารัมภ์\nอารัมภกถา\nอารัมภบท\nอารัมภะ\nอาราธน์\nอาราธนา\nอาราม\nอารามิก\nอารี\nอารุม\nอาลปนะ\nอาละวาด\nอาลักษณ์\nอาลัย\nอาลัว\nอาลี\nอาโลก\nอาว\nอ่าว\nอ้าว\nอาวรณ์\nอาวัชนาการ\nอาวัล\nอาวาส\nอาวาสิก\nอาวาหมงคล\nอาวาหะ\nอาวุต\nอาวุธ\nอาวุโส\nอาเวค\nอาศรม\nอาศรมบท\nอาศเลษา\nอาศัย\nอาศิรพจน์\nอาศิรพาท\nอาศิรวาท\nอาศุ\nอาเศียรพจน์\nอาเศียรพาท\nอาเศียรวาท\nอาษาฒ\nอาสน\nอาสน์\nอาสนะ\nอาสนศาลา\nอาสัญ\nอาสัตย์\nอาสา\nอาสาฬห์\nอาสาฬหบูชา\nอาสาฬหะ\nอาสิญจ์\nอาสิน\nอาหม\nอาหรับ\nอาหาร\nอาฬหก\nอำ\nอ่ำ\nอ้ำ\nอำแดง\nอำนนต์\nอำนรรฆ\nอำนวย\nอำนาจ\nอำนาถ\nอำนิฐ\nอำนิษฐ์\nอำปลัง\nอำพน\nอำพล\nอำพะนำ\nอำพัน\nอำไพ\nอำเภอ\nอำมร\nอำมฤคโชค\nอำมฤต\nอำมหิต\nอำมาตย์\nอำมาตยาธิปไตย\nอำยวน\nอำรุง\nอำลา\nอำอวม\nอ้ำอึ้ง\nอิก\nอิง\nอิงค์\nอิงอร\nอิจฉา\nอิฉัน\nอิชยา\nอิฏฐารมณ์\nอิฐ\nอิฐผล\nอิด\nอิตถี\nอิตเทรียม\nอิตเทอร์เบียม\nอิติวุตตกะ\nอิทธิ\nอิน\nอินซูลิน\nอินเดีย\nอินเดียนแดง\nอินเดียม\nอินท์\nอินทขีล\nอินทนิล\nอินทผลัม\nอินทร์\nอินทรธนู\nอินทรวงศ์\nอินทรวิเชียร\nอินทรศักดิ์\nอินทราณี\nอินทราภิเษก\nอินทรายุธ\nอินทรี\nอินทรีย์\nอินทรียสังวร\nอินทีวร\nอินทุ\nอินฟราเรด\nอินัง\nอิ่ม\nอิมัลชัน\nอิริเดียม\nอิริยา\nอิริยาบถ\nอิรุพเพท\nอิเล็กตรอน\nอิเล็กทรอนิกส์\nอิเล็กโทน\nอิศร\nอิศวร\nอิษฏ์\nอิษฏี\nอิส\nอิสตรี\nอิสัตรี\nอิสรภาพ\nอิสระ\nอิสริยยศ\nอิสริยะ\nอิสริยาภรณ์\nอิสลาม\nอิสสา\nอิสิ\nอิสี\nอิหม่าม\nอิหลักอิเหลื่อ\nอี\nอี่\nอี้\nอี๊\nอี๋\nอี๋อ๋อ\nอีก\nอีก้อ\nอีก๋อย\nอีโก้ง\nอีจู้\nอี๊ด\nอีเต้อ\nอีโต้\nอีทุบ\nอีเทอร์\nอีนุงตุงนัง\nอีนูน\nอีโน\nอีแปะ\nอีโปง\nอีเพา\nอีมู\nอีรม\nอีลุ้ม\nอีลุ่ยฉุยแฉก\nอีเลิ้ง\nอีศ\nอีศวร\nอีส\nอีสาน\nอีสุกอีใส\nอีหรอบ\nอีหลักอีเหลื่อ\nอีหลี\nอีหลุกขลุกขลัก\nอีหลุกขลุกขลุ่ย\nอีเห็น\nอีเหน็บ\nอีเหนียว\nอีเหละเขละขละ\nอีเหละเขะขะ\nอีโหน่อีเหน่\nอีโหลกโขลกเขลก\nอีแอ่น\nอึ\nอึก\nอึ้ก\nอึ๊ก\nอึกทึก\nอึกอัก\nอึง\nอึ่ง\nอึ้ง\nอึด\nอึดตะปือ\nอึ้ดทึ่ด\nอึน\nอืด\nอื่น\nอื้น\nอือ\nอื้อ\nอื้อฮือ\nอุ\nอุก\nอุกกา\nอุกกาบาต\nอุกฤษฏ์\nอุกลาบาต\nอุค\nอุคระ\nอุคหนิมิต\nอุโฆษ\nอุ้ง\nอุจ\nอุจจาระ\nอุจฉุ\nอุจเฉท\nอุจเฉททิฐิ\nอุจาด\nอุชุ\nอุฏฐาการ\nอุณหภูมิ\nอุณหะ\nอุณหาหาร\nอุณหิส\nอุณา\nอุณาโลม\nอุด\nอุดเตา\nอุดม\nอุดมการณ์\nอุดมคติ\nอุดมศึกษา\nอุดร\nอุดหนุน\nอุตดม\nอุตตมะ\nอุตมภาพ\nอุตมางค์\nอุตดร\nอุตรกุรุทวีป\nอุตตรายัน\nอุตรนิกาย\nอุตรผลคุนี\nอุตตรผลคุนี\nอุตรภัทรบท\nอุตตรภัทรบท\nอุตตรภัททะ\nอุตราภิมุข\nอุตราวรรต\nอุตราวัฏ\nอุตราษาฒ\nอุตตราสาฬหะ\nอุตราสงค์\nอุตตานภาพ\nอุตพิด\nอุตรา\nอุตริ\nอุตริมนุสธรรม\nอุตลุด\nอุตส่าห์\nอุตสาหกรรม\nอุตสาหะ\nอุตุ\nอุตุนิยม\nอุตุนิยมวิทยา\nอุทก\nอุทกธาร\nอุทกธารา\nอุทกภัย\nอุทกวิทยา\nอุทกศาสตร์\nอุทธรณ์\nอุทธัจ\nอุทยาน\nอุทร\nอุทริยะ\nอุทลุม\nอุทัช\nอุทัย\nอุทาน\nอุทาร\nอุทาหรณ์\nอุทิศ\nอุทุมพร\nอุเทศ\nอุเทสิกเจดีย์\nอุธัจ\nอุ่น\nอุบ\nอุบล\nอุบะ\nอุบ๊ะ\nอุบัติ\nอุบาท\nอุบาทว์\nอุบาย\nอุบาสก\nอุบาสิกา\nอุเบกขา\nอุโบสถ\nอุปกรณ์\nอุปกรม\nอุปการ\nอุปการะ\nอุปการี\nอุปกิเลส\nอุปจาร\nอุปถัมภ์\nอุปถัมภก\nอุปทม\nอุปทูต\nอุปเทศ\nอุปเท่ห์\nอุปธิ\nอุปนัย\nอุปนิกขิต\nอุปนิษัท\nอุปนิสัย\nอุปบัติ\nอุปปาติกะ\nอุปพัทธ์\nอุปพันธ์\nอุปโภค\nอุปมา\nอุปมาน\nอุปไมย\nอุปยุวราช\nอุปรากร\nอุปราคา\nอุปราช\nอุปริ\nอุปริมปริยาย\nอุปโลกน์\nอุปเวท\nอุปสมบท\nอุปสมบัน\nอุปสัมบัน\nอุปสรรค\nอุปสัมปทา\nอุปฮาด\nอุปัชฌาย์\nอุปัชฌายวัตร\nอุปัชฌายะ\nอุปัฏฐาก\nอุปัฏฐานะ\nอุปัทวะ\nอุปัทวันตราย\nอุปาทาน\nอุปาหนา\nอุภัย\nอุ้ม\nอุมงค์\nอุโมงค์\nอุย\nอุ่ย\nอุ้ย\nอุ๊ย\nอุยยาน\nอุยยาม\nอุรณะ\nอุรพี\nอุระ\nอุรังอุตัง\nอุรัจฉัท\nอุรัจฉทะ\nอุรา\nอุรุ\nอุไร\nอุลกมณี\nอุลโลจ\nอุลามก\nอุลิด\nอุโลก\nอุแว้\nอุษณกร\nอุษณกาล\nอุษณรัศมี\nอุษณรุจี\nอุษณาการ\nอุษณีษ์\nอุษมะ\nอุษมัน\nอุษา\nอุษาโยค\nอุสภ\nอุสส่าห์\nอุสสาหะ\nอุสา\nอุสุ\nอุสุภ\nอุสุภราช\nอุสุม\nอุหรับ\nอุหลบ\nอุเหม่\nอุฬาร\nอู\nอู่\nอู้\nอูฐ\nอูด\nอูม\nอูย\nอูรุ\nอู๋อี๋\nเอ\nเอ้\nเอ๊\nเอก\nเอกเขนก\nเอกซเรย์\nเอกรรถประโยค\nเอกัคตา\nเอกังสพยากรณ์\nเอกังสวาที\nเอกา\nเอ้กา\nเอกาธิปไตย\nเอเคอร์\nเอง\nเอ็ง\nเอ๋ง\nเอ็ด\nเอ็ดตะโร\nเอดส์\nเอตทัคคะ\nเอ้เต\nเอทิล\nเอน\nเอ็น\nเอนไซม์\nเอ็นดู\nเอ็นอ่อน\nเอม\nเอ็มบริโอ\nเอย\nเอ่ย\nเอ๊ย\nเอ๋ย\nเอร็ดอร่อย\nเอราวัณ\nเอว\nเอ๊ว\nเอวัง\nเอฬกะ\nเอฬา\nเออ\nเอ่อ\nเออร์เบียม\nเอ้อระเหย\nเอ้อเร้อ\nเอ้อเฮอ\nเอ๊ะ\nเอะใจ\nเอะอะ\nเอะอะมะเทิ่ง\nเอา\nเอาทาร\nเอาทารย์\nเอารส\nเอาฬาร\nเอาะลาย\nเอิก\nเอิกเกริก\nเอิ้น\nเอิบ\nเอียง\nเอี้ยง\nเอียด\nเอี๊ยด\nเอียน\nเอี่ยน\nเอี่ยม\nเอี๊ยม\nเอี้ยมจุ๊น\nเอี้ยมเฟี้ยม\nเอี่ยว\nเอี้ยว\nเอื้อ\nเอื๊อก\nเอื้อง\nเอือด\nเอือน\nเอื้อน\nเอือม\nเอื้อม\nเอื่อย\nเอื้อย\nแอ\nแอ้\nแอ๋\nแอก\nแอกทิเนียม\nแอ่ง\nแอ้งแม้ง\nแอด\nแอ้ด\nแอ๊ด\nแอ่น\nแอนติเจน\nแอนติบอดี\nแอนติอิเล็กตรอน\nแอโนด\nแอบ\nแอม\nแอ้ม\nแอมแปร์\nแอมมิเตอร์\nแอมโมเนีย\nแอร่ม\nแอลกอฮอล์\nแอลฟา\nแอว\nแอ่ว\nแอ้วแซ่ว\nแอสทาทีน\nแอสไพริน\nแอสฟัลต์\nแอหนัง\nแออัด\nโอ\nโอ่\nโอ้\nโอ๋\nโอก\nโอ้ก\nโอ้กอ้าก\nโอ๊ก\nโอกาส\nโอฆชล\nโอฆสงสาร\nโอฆะ\nโอ่ง\nโองการ\nโองโขดง\nโอชะ\nโอชา\nโอโซน\nโอฐ\nโอด\nโอ๊ต\nโอตตัปปะ\nโอทนะ\nโอน\nโอบ\nโอปปาติกะ\nโอภา\nโอภาส\nโอม\nโอย\nโอ๊ย\nโอรส\nโอละพ่อ\nโอลิมปิก\nโอวาท\nโอษฐ์\nโอษฐชะ\nโอษฐภัย\nโอสถ\nโอห์ม\nโอหัง\nโอฬาร\nโอฬาริก\nโอฬารึก\nโอ้เอ้\nโอเอซิส\nโอ้โฮ\nไอ\nไอ้\nไอโซโทป\nไอน์สไตเนียม\nไอยรา\nไอยเรศ\nไอราพต\nไอราวัณ\nไอราวัต\nไอศกรีม\nไอศวรรย์\nไอศุริยสมบัติ\nไอศูรย์\nไอออน\nไอโอดีน\nฮกเกี้ยน\nฮด\nฮวงซุ้ย\nฮวน\nฮ้วนหมู\nฮวบ\nฮ่อ\nฮ้อ\nฮอกกี้\nฮอด\nฮ่อม\nฮ่อยจ๊อ\nฮอร์โมน\nฮอลแลนด์\nฮอลันดา\nฮะ\nฮะเบส\nฮะเรีย\nฮัก\nฮังเล\nฮัจญ์\nฮัจญะฮ์\nฮัจญี\nฮั่น\nฮั้ว\nฮา\nฮ้า\nฮ่างหลวง\nฮาจญ์\nฮาม\nฮาเร็ม\nฮาห์เนียม\nฮิจเราะห์\nฮินดู\nฮิปโปโปเตมัส\nฮิสทีเรีย\nฮีเลียม\nฮึ\nฮึก\nฮึด\nฮึดฮัด\nฮึ่ม\nฮึย\nฮึ่ย\nฮืดฮาด\nฮือ\nฮื่อ\nฮื้อ\nฮื้อฉี่\nฮุด\nฮุบ\nฮุยเลฮุย\nฮู้\nฮูก\nฮูม\nเฮ\nเฮฮา\nเฮกตาร์\nเฮกโตกรัม\nเฮกโตเมตร\nเฮกโตลิตร\nเฮง\nเฮ็ด\nเฮโมโกลบิน\nเฮย\nเฮ่ย\nเฮ้ย\nเฮโรอีน\nเฮลิคอปเตอร์\nเฮโล\nเฮละโล\nเฮ้ว\nเฮอ\nเฮ่อ\nเฮ้อ\nเฮอริเคน\nเฮิรตซ์\nเฮี้ยน\nเฮี้ยบ\nเฮี้ยว\nเฮือก\nเฮือน\nแฮ\nแฮ่\nแฮก\nแฮ่กึ๊น\nแฮนด์บอล\nแฮฟเนียม\nแฮม\nแฮะ\nโฮ\nโฮก\nโฮ่ง\nโฮ้ง\nโฮเต็ล\nโฮลเมียม\nโฮะ\nไฮ้\nไฮโกรมิเตอร์\nไฮดรา\nไฮโดร\nไฮโดรคาร์บอน\nไฮโดรเจน\nไฮโดรมิเตอร์\nไฮไฟ\nไฮโล\nไฮฮี\n".split(/[\r\n]+/).filter(function(n){return 1<n.length}),this.addWords(words,!1);t&&this.finalizeDict()},dictSeek:function(n,t,e,r,i){for(var o=null;n<=t;){var s=Math.floor((n+t)/2),a=this.dict[s];if(a.length<=r)n=s+1;else{var c=a[r];c<e?n=s+1:e<c?t=s-1:(o=s,0==i?t=s-1:n=s+1)}}return o},isFinal:function(n){return this.dict[n.l].length==n.strOffset},createAcceptor:function(){return{l:0,r:this.dict.length-1,strOffset:0,isFinal:!1,dict:this,transit:function(n){return this.dict.transit(this,n)},isError:!1,tag:"DICT",w:1,type:"DICT"}},transit:function(n,t){var e=this.dictSeek(n.l,n.r,t,n.strOffset,0);if(null!==e){var r=this.dictSeek(e,n.r,t,n.strOffset,1);n.l=e,n.r=r,n.strOffset++,n.isFinal=this.isFinal(n)}else n.isError=!0;return n},sortuniq:function(n){return n.sort().filter(function(n,t,e){return!t||n!=e[t-1]})},flatten:function(n){return[].concat.apply([],n)}});e.exports=n}).call(this,"/dist/tmp")},{glob:16,path:22}],3:[function(n,t,e){var r={tag:"SPACE_RULE",createAcceptor:function(n){return n.SPACE_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){return" "==n||"\t"==n||"\r"==n||"\n"==n||" "==n||" "==n?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:r.tag,w:1,type:"SPACE_RULE"}}},i=[{createAcceptor:function(n){return n.WORD_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){var t=n.toLowerCase();return"a"<=t&&t<="z"?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"WORD_RULE",type:"WORD_RULE",w:1}}},r,{tag:"SINSYM",createAcceptor:function(n){return{strOffset:0,isFinal:!1,transit:function(n){return 0==this.strOffset&&n.match(/^[\@\(\)\/\,\-\."`]$/)?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"SINSYM",w:1,type:"SINSYM"}}},{createAcceptor:function(n){return n.NUMBER_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){return"0"<=n&&n<="9"?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"NUMBER_RULE",type:"NUMBER_RULE",w:1}}}];t.exports=i},{}],4:[function(n,t,e){var r=n("underscore"),i=(n("./wordcut_core"),{buildByAcceptors:function(o,n,s){return n.map(function(n){var t=s-n.strOffset+1,e=o[t],r={p:t,mw:e.mw+(void 0===n.mw?0:n.mw),w:n.w+e.w,unk:(n.unk?n.unk:0)+e.unk,type:n.type};if("PART"==n.type){for(var i=t+1;i<=s;i++)o[i].merge=t;r.merge=t}return r}).filter(function(n){return n})},fallback:function(n,t,e,r){var i=n[t];return e[r].match(/[\u0E48-\u0E4E]/)?(0!=t&&(t=n[t].p),{p:t,mw:0,w:1+i.w,unk:1+i.unk,type:"UNK"}):{p:t,mw:i.mw,w:1+i.w,unk:1+i.unk,type:"UNK"}},build:function(n,t,e,r,i){var o=this.buildByAcceptors(n,t,e);return 0<o.length?o:[this.fallback(n,r,i,e)]}});t.exports=function(){return r.clone(i)}},{"./wordcut_core":8,underscore:25}],5:[function(n,t,e){var r=n("underscore"),i={selectPath:function(n){return n.reduce(function(n,t){if(null==n)return t;if(t.unk<n.unk)return t;if(t.unk==n.unk){if(t.mw<n.mw)return t;if(t.mw==n.mw&&t.w<n.w)return t}return n},null)},createPath:function(){return[{p:null,w:0,unk:0,type:"INIT",mw:0}]}};t.exports=function(){return r.clone(i)}},{underscore:25}],6:[function(n,t,e){function i(n,t,e){if(n.length<=t)return!1;var r=n[t];return r==e||r.match(/[กข]/)&&e.match(/[ก-ฮ]/)||r.match(/[มบ]/)&&e.match(/[ก-ฮ]/)||r.match(/\u0E49/)&&e.match(/[\u0E48-\u0E4B]/)}var r={pat:"เหก็ม",createAcceptor:function(n){return{strOffset:0,isFinal:!1,transit:function(n){return i(r.pat,this.strOffset,n)?(this.isFinal=this.strOffset+1==r.pat.length,this.strOffset++):this.isError=!0,this},isError:!1,tag:"THAI_RULE",type:"THAI_RULE",w:1}}},o=[r,{createAcceptor:function(n){return{strOffset:0,patterns:["แก","เก","ก้","กก์","กา","กี","กิ","กืก"],isFinal:!1,transit:function(t){var e=this.strOffset;if(this.patterns=this.patterns.filter(function(n){return i(n,e,t)}),0<this.patterns.length){var r=1+e;this.isFinal=this.patterns.some(function(n){return n.length==r}),this.strOffset++}else this.isError=!0;return this},isError:!1,tag:"PART",type:"PART",unk:1,w:1}}}];t.exports=o},{}],7:[function(n,t,e){n("sys");var r=n("./dict"),i=n("./wordcut_core"),o=n("./path_info_builder"),s=n("./path_selector"),a=n("./acceptors"),c=n("./latin_rules"),u=n("./thai_rules"),l=n("underscore"),f=Object.create(i);f.defaultPathInfoBuilder=o,f.defaultPathSelector=s,f.defaultAcceptors=a,f.defaultLatinRules=c,f.defaultThaiRules=u,f.defaultDict=r,f.initNoDict=function(n){var t=this;t.pathInfoBuilder=new t.defaultPathInfoBuilder,t.pathSelector=new t.defaultPathSelector,t.acceptors=new t.defaultAcceptors,t.defaultLatinRules.forEach(function(n){t.acceptors.creators.push(n)}),t.defaultThaiRules.forEach(function(n){t.acceptors.creators.push(n)})},f.init=function(n,t,e){t=t||!1,this.initNoDict();var r=l.clone(this.defaultDict);r.init(n,t,e),this.acceptors.creators.push(r)},t.exports=f},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,sys:28,underscore:25}],8:[function(n,t,e){var r={buildPath:function(n){var t=this,e=t.pathSelector.createPath(),r=0;t.acceptors.reset();for(var i=0;i<n.length;i++){var o=n[i];t.acceptors.transit(o);var s=t.pathInfoBuilder.build(e,t.acceptors.getFinalAcceptors(),i,r,n),a=t.pathSelector.selectPath(s);e.push(a),"UNK"!==a.type&&(r=i)}return e},pathToRanges:function(n){for(var t=n.length-1,e=[];0<t;){var r=n[t],i=r.p;if(void 0!==r.merge&&0<e.length){var o=e[e.length-1];o.s=r.merge,i=o.s}else e.push({s:i,e:t});t=i}return e.reverse()},rangesToText:function(t,n,e){return n.map(function(n){return t.substring(n.s,n.e)}).join(e)},cut:function(n,t){var e=this.buildPath(n),r=this.pathToRanges(e);return this.rangesToText(n,r,void 0===t?"|":t)},cutIntoRanges:function(t,n){var e=this.buildPath(t),r=this.pathToRanges(e);return n||r.forEach(function(n){n.text=t.substring(n.s,n.e)}),r},cutIntoArray:function(t){var n=this.buildPath(t);return this.pathToRanges(n).map(function(n){return t.substring(n.s,n.e)})}};t.exports=r},{}],9:[function(n,t,e){var c=n("util/"),u=Array.prototype.slice,r=Object.prototype.hasOwnProperty,o=t.exports=i;function l(n,t){return c.isUndefined(t)?""+t:c.isNumber(t)&&!isFinite(t)?t.toString():c.isFunction(t)||c.isRegExp(t)?t.toString():t}function f(n,t){return c.isString(n)?n.length<t?n:n.slice(0,t):n}function h(n,t,e,r,i){throw new o.AssertionError({message:e,actual:n,expected:t,operator:r,stackStartFunction:i})}function i(n,t){n||h(n,!0,t,"==",o.ok)}function p(n,t){if(n===t)return!0;if(c.isBuffer(n)&&c.isBuffer(t)){if(n.length!=t.length)return!1;for(var e=0;e<n.length;e++)if(n[e]!==t[e])return!1;return!0}return c.isDate(n)&&c.isDate(t)?n.getTime()===t.getTime():c.isRegExp(n)&&c.isRegExp(t)?n.source===t.source&&n.global===t.global&&n.multiline===t.multiline&&n.lastIndex===t.lastIndex&&n.ignoreCase===t.ignoreCase:c.isObject(n)||c.isObject(t)?function(n,t){if(c.isNullOrUndefined(n)||c.isNullOrUndefined(t))return!1;if(n.prototype!==t.prototype)return!1;if(c.isPrimitive(n)||c.isPrimitive(t))return n===t;var e=d(n),r=d(t);if(e&&!r||!e&&r)return!1;if(e)return n=u.call(n),t=u.call(t),p(n,t);var i,o,s=v(n),a=v(t);if(s.length!=a.length)return!1;for(s.sort(),a.sort(),o=s.length-1;0<=o;o--)if(s[o]!=a[o])return!1;for(o=s.length-1;0<=o;o--)if(i=s[o],!p(n[i],t[i]))return!1;return!0}(n,t):n==t}function d(n){return"[object Arguments]"==Object.prototype.toString.call(n)}function s(n,t){return!(!n||!t)&&("[object RegExp]"==Object.prototype.toString.call(t)?t.test(n):n instanceof t||!0===t.call({},n))}function a(n,t,e,r){var i;c.isString(e)&&(r=e,e=null);try{t()}catch(n){i=n}if(r=(e&&e.name?" ("+e.name+").":".")+(r?" "+r:"."),n&&!i&&h(i,e,"Missing expected exception"+r),!n&&s(i,e)&&h(i,e,"Got unwanted exception"+r),n&&i&&e&&!s(i,e)||!n&&i)throw i}o.AssertionError=function(n){var t;this.name="AssertionError",this.actual=n.actual,this.expected=n.expected,this.operator=n.operator,n.message?(this.message=n.message,this.generatedMessage=!1):(this.message=(t=this,f(JSON.stringify(t.actual,l),128)+" "+t.operator+" "+f(JSON.stringify(t.expected,l),128)),this.generatedMessage=!0);var e=n.stackStartFunction||h;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var i=r.stack,o=e.name,s=i.indexOf("\n"+o);if(0<=s){var a=i.indexOf("\n",s+1);i=i.substring(a+1)}this.stack=i}}},c.inherits(o.AssertionError,Error),o.fail=h,o.ok=i,o.equal=function(n,t,e){n!=t&&h(n,t,e,"==",o.equal)},o.notEqual=function(n,t,e){n==t&&h(n,t,e,"!=",o.notEqual)},o.deepEqual=function(n,t,e){p(n,t)||h(n,t,e,"deepEqual",o.deepEqual)},o.notDeepEqual=function(n,t,e){p(n,t)&&h(n,t,e,"notDeepEqual",o.notDeepEqual)},o.strictEqual=function(n,t,e){n!==t&&h(n,t,e,"===",o.strictEqual)},o.notStrictEqual=function(n,t,e){n===t&&h(n,t,e,"!==",o.notStrictEqual)},o.throws=function(n,t,e){a.apply(this,[!0].concat(u.call(arguments)))},o.doesNotThrow=function(n,t){a.apply(this,[!1].concat(u.call(arguments)))},o.ifError=function(n){if(n)throw n};var v=Object.keys||function(n){var t=[];for(var e in n)r.call(n,e)&&t.push(e);return t}},{"util/":28}],10:[function(n,t,e){"use strict";function r(n,t,e){n instanceof RegExp&&(n=i(n,e)),t instanceof RegExp&&(t=i(t,e));var r=o(n,t,e);return r&&{start:r[0],end:r[1],pre:e.slice(0,r[0]),body:e.slice(r[0]+n.length,r[1]),post:e.slice(r[1]+t.length)}}function i(n,t){var e=t.match(n);return e?e[0]:null}function o(n,t,e){var r,i,o,s,a,c=e.indexOf(n),u=e.indexOf(t,c+1),l=c;if(0<=c&&0<u){for(r=[],o=e.length;0<=l&&!a;)l==c?(r.push(l),c=e.indexOf(n,l+1)):1==r.length?a=[r.pop(),u]:((i=r.pop())<o&&(o=i,s=u),u=e.indexOf(t,l+1)),l=c<u&&0<=c?c:u;r.length&&(a=[o,s])}return a}(t.exports=r).range=o},{}],11:[function(n,t,e){var k=n("concat-map"),S=n("balanced-match");t.exports=function(n){if(!n)return[];"{}"===n.substr(0,2)&&(n="\\{\\}"+n.substr(2));return function t(n,e){var r=[];var i=S("{","}",n);if(!i||/\$$/.test(i.pre))return[n];var o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body);var s=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body);var a=o||s;var c=0<=i.body.indexOf(",");if(!a&&!c)return i.post.match(/,.*\}/)?(n=i.pre+"{"+i.body+R+i.post,t(n)):[n];var u;if(a)u=i.body.split(/\.\./);else if(1===(u=T(i.body)).length&&1===(u=t(u[0],!1).map(I)).length){var l=i.post.length?t(i.post,!1):[""];return l.map(function(n){return i.pre+u[0]+n})}var f=i.pre;var l=i.post.length?t(i.post,!1):[""];var h;if(a){var p=L(u[0]),d=L(u[1]),v=Math.max(u[0].length,u[1].length),g=3==u.length?Math.abs(L(u[2])):1,m=D,y=d<p;y&&(g*=-1,m=F);var b=u.some(N);h=[];for(var _=p;m(_,d);_+=g){var w;if(s)"\\"===(w=String.fromCharCode(_))&&(w="");else if(w=String(_),b){var E=v-w.length;if(0<E){var O=new Array(E+1).join("0");w=_<0?"-"+O+w.slice(1):O+w}}h.push(w)}}else h=k(u,function(n){return t(n,!1)});for(var A=0;A<h.length;A++)for(var x=0;x<l.length;x++){var j=f+h[A]+l[x];(!e||a||j)&&r.push(j)}return r}((t=n,t.split("\\\\").join(r).split("\\{").join(i).split("\\}").join(R).split("\\,").join(o).split("\\.").join(s)),!0).map(a);var t};var r="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",R="\0CLOSE"+Math.random()+"\0",o="\0COMMA"+Math.random()+"\0",s="\0PERIOD"+Math.random()+"\0";function L(n){return parseInt(n,10)==n?parseInt(n,10):n.charCodeAt(0)}function a(n){return n.split(r).join("\\").split(i).join("{").split(R).join("}").split(o).join(",").split(s).join(".")}function T(n){if(!n)return[""];var t=[],e=S("{","}",n);if(!e)return n.split(",");var r=e.pre,i=e.body,o=e.post,s=r.split(",");s[s.length-1]+="{"+i+"}";var a=T(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),t.push.apply(t,s),t}function I(n){return"{"+n+"}"}function N(n){return/^-?0\d/.test(n)}function D(n,t){return n<=t}function F(n,t){return t<=n}},{"balanced-match":10,"concat-map":13}],12:[function(n,t,e){},{}],13:[function(n,t,e){t.exports=function(n,t){for(var e=[],r=0;r<n.length;r++){var i=t(n[r],r);o(i)?e.push.apply(e,i):e.push(i)}return e};var o=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)}},{}],14:[function(n,t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function a(n){return"function"==typeof n}function c(n){return"object"==typeof n&&null!==n}function u(n){return void 0===n}((t.exports=r).EventEmitter=r).prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(n){if("number"!=typeof n||n<0||isNaN(n))throw TypeError("n must be a positive number");return this._maxListeners=n,this},r.prototype.emit=function(n){var t,e,r,i,o,s;if(this._events||(this._events={}),"error"===n&&(!this._events.error||c(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;throw TypeError('Uncaught, unspecified "error" event.')}if(u(e=this._events[n]))return!1;if(a(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:for(r=arguments.length,i=new Array(r-1),o=1;o<r;o++)i[o-1]=arguments[o];e.apply(this,i)}else if(c(e)){for(r=arguments.length,i=new Array(r-1),o=1;o<r;o++)i[o-1]=arguments[o];for(r=(s=e.slice()).length,o=0;o<r;o++)s[o].apply(this,i)}return!0},r.prototype.on=r.prototype.addListener=function(n,t){var e;if(!a(t))throw TypeError("listener must be a function");(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",n,a(t.listener)?t.listener:t),this._events[n]?c(this._events[n])?this._events[n].push(t):this._events[n]=[this._events[n],t]:this._events[n]=t,c(this._events[n])&&!this._events[n].warned)&&((e=u(this._maxListeners)?r.defaultMaxListeners:this._maxListeners)&&0<e&&this._events[n].length>e&&(this._events[n].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[n].length),"function"==typeof console.trace&&console.trace()));return this},r.prototype.once=function(n,t){if(!a(t))throw TypeError("listener must be a function");var e=!1;function r(){this.removeListener(n,r),e||(e=!0,t.apply(this,arguments))}return r.listener=t,this.on(n,r),this},r.prototype.removeListener=function(n,t){var e,r,i,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[n])return this;if(i=(e=this._events[n]).length,r=-1,e===t||a(e.listener)&&e.listener===t)delete this._events[n],this._events.removeListener&&this.emit("removeListener",n,t);else if(c(e)){for(o=i;0<o--;)if(e[o]===t||e[o].listener&&e[o].listener===t){r=o;break}if(r<0)return this;1===e.length?(e.length=0,delete this._events[n]):e.splice(r,1),this._events.removeListener&&this.emit("removeListener",n,t)}return this},r.prototype.removeAllListeners=function(n){var t,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[n]&&delete this._events[n],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(a(e=this._events[n]))this.removeListener(n,e);else for(;e.length;)this.removeListener(n,e[e.length-1]);return delete this._events[n],this},r.prototype.listeners=function(n){return this._events&&this._events[n]?a(this._events[n])?[this._events[n]]:this._events[n].slice():[]},r.listenerCount=function(n,t){return n._events&&n._events[t]?a(n._events[t])?1:n._events[t].length:0}},{}],15:[function(t,n,p){(function(i){function o(n,t){return Object.prototype.hasOwnProperty.call(n,t)}p.alphasort=u,p.alphasorti=c,p.setopts=function(n,t,e){e||(e={});if(e.matchBase&&-1===t.indexOf("/")){if(e.noglobstar)throw new Error("base matching requires globstar");t="**/"+t}n.silent=!!e.silent,n.pattern=t,n.strict=!1!==e.strict,n.realpath=!!e.realpath,n.realpathCache=e.realpathCache||Object.create(null),n.follow=!!e.follow,n.dot=!!e.dot,n.mark=!!e.mark,n.nodir=!!e.nodir,n.nodir&&(n.mark=!0);n.sync=!!e.sync,n.nounique=!!e.nounique,n.nonull=!!e.nonull,n.nosort=!!e.nosort,n.nocase=!!e.nocase,n.stat=!!e.stat,n.noprocess=!!e.noprocess,n.maxLength=e.maxLength||1/0,n.cache=e.cache||Object.create(null),n.statCache=e.statCache||Object.create(null),n.symlinks=e.symlinks||Object.create(null),function(n,t){n.ignore=t.ignore||[],Array.isArray(n.ignore)||(n.ignore=[n.ignore]);n.ignore.length&&(n.ignore=n.ignore.map(l))}(n,e),n.changedCwd=!1;var r=i.cwd();o(e,"cwd")?(n.cwd=e.cwd,n.changedCwd=s.resolve(e.cwd)!==r):n.cwd=r;n.root=e.root||s.resolve(n.cwd,"/"),n.root=s.resolve(n.root),"win32"===i.platform&&(n.root=n.root.replace(/\\/g,"/"));n.nomount=!!e.nomount,e.nonegate=!1!==e.nonegate,e.nocomment=!1!==e.nocomment,function(n){if(!(n.nonegate&&n.nocomment||!0===i.noDeprecation||p.deprecationWarned)){var t="glob WARNING: comments and negation will be disabled in v6";if(i.throwDeprecation)throw new Error(t);i.traceDeprecation?console.trace(t):console.error(t),p.deprecationWarned=!0}}(e),n.minimatch=new a(t,e),n.options=n.minimatch.options},p.ownProp=o,p.makeAbs=f,p.finish=function(t){for(var n=t.nounique,e=n?[]:Object.create(null),r=0,i=t.matches.length;r<i;r++){var o=t.matches[r];if(o&&0!==Object.keys(o).length){var s=Object.keys(o);n?e.push.apply(e,s):s.forEach(function(n){e[n]=!0})}else if(t.nonull){var a=t.minimatch.globSet[r];n?e.push(a):e[a]=!0}}n||(e=Object.keys(e));t.nosort||(e=e.sort(t.nocase?c:u));if(t.mark){for(var r=0;r<e.length;r++)e[r]=t._mark(e[r]);t.nodir&&(e=e.filter(function(n){return!/\/$/.test(n)}))}t.ignore.length&&(e=e.filter(function(n){return!h(t,n)}));t.found=e},p.mark=function(n,t){var e=f(n,t),r=n.cache[e],i=t;if(r){var o="DIR"===r||Array.isArray(r),s="/"===t.slice(-1);if(o&&!s?i+="/":!o&&s&&(i=i.slice(0,-1)),i!==t){var a=f(n,i);n.statCache[a]=n.statCache[e],n.cache[a]=n.cache[e]}}return i},p.isIgnored=h,p.childrenIgnored=function(n,t){return!!n.ignore.length&&n.ignore.some(function(n){return!(!n.gmatcher||!n.gmatcher.match(t))})};var s=t("path"),n=t("minimatch"),e=t("path-is-absolute"),a=n.Minimatch;function c(n,t){return n.toLowerCase().localeCompare(t.toLowerCase())}function u(n,t){return n.localeCompare(t)}function l(n){var t=null;if("/**"===n.slice(-3)){var e=n.replace(/(\/\*\*)+$/,"");t=new a(e)}return{matcher:new a(n),gmatcher:t}}function f(n,t){return"/"===t.charAt(0)?s.join(n.root,t):e(t)||""===t?t:n.changedCwd?s.resolve(n.cwd,t):s.resolve(t)}function h(n,t){return!!n.ignore.length&&n.ignore.some(function(n){return n.matcher.match(t)||!(!n.gmatcher||!n.gmatcher.match(t))})}p.deprecationWarned}).call(this,t("_process"))},{_process:24,minimatch:20,path:22,"path-is-absolute":23}],16:[function(_,w,n){(function(s){w.exports=i;var u=_("fs"),l=_("minimatch"),n=(l.Minimatch,_("inherits")),t=_("events").EventEmitter,g=_("path"),f=_("assert"),h=_("path-is-absolute"),r=_("./sync.js"),e=_("./common.js"),a=(e.alphasort,e.alphasorti,e.setopts),p=e.ownProp,d=_("inflight"),o=_("util"),v=e.childrenIgnored,c=e.isIgnored,m=_("once");function i(n,t,e){if("function"==typeof t&&(e=t,t={}),t||(t={}),t.sync){if(e)throw new TypeError("callback provided to sync glob");return r(n,t)}return new b(n,t,e)}i.sync=r;var y=i.GlobSync=r.GlobSync;function b(n,t,e){if("function"==typeof t&&(e=t,t=null),t&&t.sync){if(e)throw new TypeError("callback provided to sync glob");return new y(n,t)}if(!(this instanceof b))return new b(n,t,e);a(this,n,t),this._didRealPath=!1;var r=this.minimatch.set.length;this.matches=new Array(r),"function"==typeof e&&(e=m(e),this.on("error",e),this.on("end",function(n){e(null,n)}));var i=this;r=this.minimatch.set.length;if(this._processing=0,this.matches=new Array(r),this._emitQueue=[],this._processQueue=[],this.paused=!1,this.noprocess)return this;if(0===r)return s();for(var o=0;o<r;o++)this._process(this.minimatch.set[o],o,!1,s);function s(){--i._processing,i._processing<=0&&i._finish()}}(i.glob=i).hasMagic=function(n,t){var e=o._extend({},t);e.noprocess=!0;var r=new b(n,e).minimatch.set;if(1<r.length)return!0;for(var i=0;i<r[0].length;i++)if("string"!=typeof r[0][i])return!0;return!1},n(i.Glob=b,t),b.prototype._finish=function(){if(f(this instanceof b),!this.aborted){if(this.realpath&&!this._didRealpath)return this._realpath();e.finish(this),this.emit("end",this.found)}},b.prototype._realpath=function(){if(!this._didRealpath){this._didRealpath=!0;var n=this.matches.length;if(0===n)return this._finish();for(var t=this,e=0;e<this.matches.length;e++)this._realpathSet(e,r)}function r(){0==--n&&t._finish()}},b.prototype._realpathSet=function(r,i){var n=this.matches[r];if(!n)return i();var t=Object.keys(n),o=this,s=t.length;if(0===s)return i();var a=this.matches[r]=Object.create(null);t.forEach(function(e,n){e=o._makeAbs(e),u.realpath(e,o.realpathCache,function(n,t){n?"stat"===n.syscall?a[e]=!0:o.emit("error",n):a[t]=!0,0==--s&&(o.matches[r]=a,i())})})},b.prototype._mark=function(n){return e.mark(this,n)},b.prototype._makeAbs=function(n){return e.makeAbs(this,n)},b.prototype.abort=function(){this.aborted=!0,this.emit("abort")},b.prototype.pause=function(){this.paused||(this.paused=!0,this.emit("pause"))},b.prototype.resume=function(){if(this.paused){if(this.emit("resume"),this.paused=!1,this._emitQueue.length)for(var n=this._emitQueue.slice(0),t=this._emitQueue.length=0;t<n.length;t++){var e=n[t];this._emitMatch(e[0],e[1])}if(this._processQueue.length){var r=this._processQueue.slice(0);for(t=this._processQueue.length=0;t<r.length;t++){var i=r[t];this._processing--,this._process(i[0],i[1],i[2],i[3])}}}},b.prototype._process=function(n,t,e,r){if(f(this instanceof b),f("function"==typeof r),!this.aborted)if(this._processing++,this.paused)this._processQueue.push([n,t,e,r]);else{for(var i,o=0;"string"==typeof n[o];)o++;switch(o){case n.length:return void this._processSimple(n.join("/"),t,r);case 0:i=null;break;default:i=n.slice(0,o).join("/")}var s,a=n.slice(o);s=null===i?".":((h(i)||h(n.join("/")))&&(i&&h(i)||(i="/"+i)),i);var c=this._makeAbs(s);if(v(this,s))return r();a[0]===l.GLOBSTAR?this._processGlobStar(i,s,c,a,t,e,r):this._processReaddir(i,s,c,a,t,e,r)}},b.prototype._processReaddir=function(e,r,i,o,s,a,c){var u=this;this._readdir(i,a,function(n,t){return u._processReaddir2(e,r,i,o,s,a,t,c)})},b.prototype._processReaddir2=function(n,t,e,r,i,o,s,a){if(!s)return a();for(var c=r[0],u=!!this.minimatch.negate,l=c._glob,f=this.dot||"."===l.charAt(0),h=[],p=0;p<s.length;p++){if("."!==(v=s[p]).charAt(0)||f)(u&&!n?!v.match(c):v.match(c))&&h.push(v)}var d=h.length;if(0===d)return a();if(1===r.length&&!this.mark&&!this.stat){this.matches[i]||(this.matches[i]=Object.create(null));for(p=0;p<d;p++){var v=h[p];n&&(v="/"!==n?n+"/"+v:n+v),"/"!==v.charAt(0)||this.nomount||(v=g.join(this.root,v)),this._emitMatch(i,v)}return a()}r.shift();for(p=0;p<d;p++){v=h[p];n&&(v="/"!==n?n+"/"+v:n+v),this._process([v].concat(r),i,o,a)}a()},b.prototype._emitMatch=function(n,t){if(!this.aborted&&!this.matches[n][t]&&!c(this,t))if(this.paused)this._emitQueue.push([n,t]);else{var e=this._makeAbs(t);if(this.nodir){var r=this.cache[e];if("DIR"===r||Array.isArray(r))return}this.mark&&(t=this._mark(t)),this.matches[n][t]=!0;var i=this.statCache[e];i&&this.emit("stat",t,i),this.emit("match",t)}},b.prototype._readdirInGlobStar=function(r,i){if(!this.aborted){if(this.follow)return this._readdir(r,!1,i);var o=this,n=d("lstat\0"+r,function(n,t){if(n)return i();var e=t.isSymbolicLink();(o.symlinks[r]=e)||t.isDirectory()?o._readdir(r,!1,i):(o.cache[r]="FILE",i())});n&&u.lstat(r,n)}},b.prototype._readdir=function(n,t,e){if(!this.aborted&&(e=d("readdir\0"+n+"\0"+t,e))){if(t&&!p(this.symlinks,n))return this._readdirInGlobStar(n,e);if(p(this.cache,n)){var r=this.cache[n];if(!r||"FILE"===r)return e();if(Array.isArray(r))return e(null,r)}var i,o,s;u.readdir(n,(i=this,o=n,s=e,function(n,t){n?i._readdirError(o,n,s):i._readdirEntries(o,t,s)}))}},b.prototype._readdirEntries=function(n,t,e){if(!this.aborted){if(!this.mark&&!this.stat)for(var r=0;r<t.length;r++){var i=t[r];i="/"===n?n+i:n+"/"+i,this.cache[i]=!0}return e(null,this.cache[n]=t)}},b.prototype._readdirError=function(n,t,e){if(!this.aborted){switch(t.code){case"ENOTSUP":case"ENOTDIR":this.cache[this._makeAbs(n)]="FILE";break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(n)]=!1;break;default:this.cache[this._makeAbs(n)]=!1,this.strict&&(this.emit("error",t),this.abort()),this.silent||console.error("glob error",t)}return e()}},b.prototype._processGlobStar=function(e,r,i,o,s,a,c){var u=this;this._readdir(i,a,function(n,t){u._processGlobStar2(e,r,i,o,s,a,t,c)})},b.prototype._processGlobStar2=function(n,t,e,r,i,o,s,a){if(!s)return a();var c=r.slice(1),u=n?[n]:[],l=u.concat(c);this._process(l,i,!1,a);var f=this.symlinks[e],h=s.length;if(f&&o)return a();for(var p=0;p<h;p++){if("."!==s[p].charAt(0)||this.dot){var d=u.concat(s[p],c);this._process(d,i,!0,a);var v=u.concat(s[p],r);this._process(v,i,!0,a)}}a()},b.prototype._processSimple=function(e,r,i){var o=this;this._stat(e,function(n,t){o._processSimple2(e,r,n,t,i)})},b.prototype._processSimple2=function(n,t,e,r,i){if(this.matches[t]||(this.matches[t]=Object.create(null)),!r)return i();if(n&&h(n)&&!this.nomount){var o=/[\/\\]$/.test(n);"/"===n.charAt(0)?n=g.join(this.root,n):(n=g.resolve(this.root,n),o&&(n+="/"))}"win32"===s.platform&&(n=n.replace(/\\/g,"/")),this._emitMatch(t,n),i()},b.prototype._stat=function(r,i){var o=this._makeAbs(r),n="/"===r.slice(-1);if(r.length>this.maxLength)return i();if(!this.stat&&p(this.cache,o)){var t=this.cache[o];if(Array.isArray(t)&&(t="DIR"),!n||"DIR"===t)return i(null,t);if(n&&"FILE"===t)return i()}var e=this.statCache[o];if(void 0!==e){if(!1===e)return i(null,e);var s=e.isDirectory()?"DIR":"FILE";return n&&"FILE"===s?i():i(null,s,e)}var a=this,c=d("stat\0"+o,function(n,e){{if(e&&e.isSymbolicLink())return u.stat(o,function(n,t){n?a._stat2(r,o,null,e,i):a._stat2(r,o,n,t,i)});a._stat2(r,o,n,e,i)}});c&&u.lstat(o,c)},b.prototype._stat2=function(n,t,e,r,i){if(e)return this.statCache[t]=!1,i();var o="/"===n.slice(-1);if(this.statCache[t]=r,"/"===t.slice(-1)&&!r.isDirectory())return i(null,!1,r);var s=r.isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||s,o&&"DIR"!==s?i():i(null,s,r)}}).call(this,_("_process"))},{"./common.js":15,"./sync.js":17,_process:24,assert:9,events:14,fs:12,inflight:18,inherits:19,minimatch:20,once:21,path:22,"path-is-absolute":23,util:28}],17:[function(e,r,n){(function(i){(r.exports=n).GlobSync=h;var s=e("fs"),c=e("minimatch"),g=(c.Minimatch,e("./glob.js").Glob,e("util"),e("path")),u=e("assert"),l=e("path-is-absolute"),t=e("./common.js"),o=(t.alphasort,t.alphasorti,t.setopts),a=t.ownProp,f=t.childrenIgnored;function n(n,t){if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");return new h(n,t).found}function h(n,t){if(!n)throw new Error("must provide pattern");if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");if(!(this instanceof h))return new h(n,t);if(o(this,n,t),this.noprocess)return this;var e=this.minimatch.set.length;this.matches=new Array(e);for(var r=0;r<e;r++)this._process(this.minimatch.set[r],r,!1);this._finish()}h.prototype._finish=function(){if(u(this instanceof h),this.realpath){var i=this;this.matches.forEach(function(n,t){var e=i.matches[t]=Object.create(null);for(var r in n)try{r=i._makeAbs(r),e[s.realpathSync(r,i.realpathCache)]=!0}catch(n){if("stat"!==n.syscall)throw n;e[i._makeAbs(r)]=!0}})}t.finish(this)},h.prototype._process=function(n,t,e){u(this instanceof h);for(var r,i=0;"string"==typeof n[i];)i++;switch(i){case n.length:return void this._processSimple(n.join("/"),t);case 0:r=null;break;default:r=n.slice(0,i).join("/")}var o,s=n.slice(i);o=null===r?".":((l(r)||l(n.join("/")))&&(r&&l(r)||(r="/"+r)),r);var a=this._makeAbs(o);f(this,o)||(s[0]===c.GLOBSTAR?this._processGlobStar(r,o,a,s,t,e):this._processReaddir(r,o,a,s,t,e))},h.prototype._processReaddir=function(n,t,e,r,i,o){var s=this._readdir(e,o);if(s){for(var a=r[0],c=!!this.minimatch.negate,u=a._glob,l=this.dot||"."===u.charAt(0),f=[],h=0;h<s.length;h++){if("."!==(v=s[h]).charAt(0)||l)(c&&!n?!v.match(a):v.match(a))&&f.push(v)}var p=f.length;if(0!==p)if(1!==r.length||this.mark||this.stat){r.shift();for(h=0;h<p;h++){var d;v=f[h];d=n?[n,v]:[v],this._process(d.concat(r),i,o)}}else{this.matches[i]||(this.matches[i]=Object.create(null));for(var h=0;h<p;h++){var v=f[h];n&&(v="/"!==n.slice(-1)?n+"/"+v:n+v),"/"!==v.charAt(0)||this.nomount||(v=g.join(this.root,v)),this.matches[i][v]=!0}}}},h.prototype._emitMatch=function(n,t){this._makeAbs(t);if(this.mark&&(t=this._mark(t)),!this.matches[n][t]){if(this.nodir){var e=this.cache[this._makeAbs(t)];if("DIR"===e||Array.isArray(e))return}this.matches[n][t]=!0,this.stat&&this._stat(t)}},h.prototype._readdirInGlobStar=function(n){if(this.follow)return this._readdir(n,!1);var t,e;try{e=s.lstatSync(n)}catch(n){return null}var r=e.isSymbolicLink();return(this.symlinks[n]=r)||e.isDirectory()?t=this._readdir(n,!1):this.cache[n]="FILE",t},h.prototype._readdir=function(t,n){if(n&&!a(this.symlinks,t))return this._readdirInGlobStar(t);if(a(this.cache,t)){var e=this.cache[t];if(!e||"FILE"===e)return null;if(Array.isArray(e))return e}try{return this._readdirEntries(t,s.readdirSync(t))}catch(n){return this._readdirError(t,n),null}},h.prototype._readdirEntries=function(n,t){if(!this.mark&&!this.stat)for(var e=0;e<t.length;e++){var r=t[e];r="/"===n?n+r:n+"/"+r,this.cache[r]=!0}return this.cache[n]=t},h.prototype._readdirError=function(n,t){switch(t.code){case"ENOTSUP":case"ENOTDIR":this.cache[this._makeAbs(n)]="FILE";break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(n)]=!1;break;default:if(this.cache[this._makeAbs(n)]=!1,this.strict)throw t;this.silent||console.error("glob error",t)}},h.prototype._processGlobStar=function(n,t,e,r,i,o){var s=this._readdir(e,o);if(s){var a=r.slice(1),c=n?[n]:[],u=c.concat(a);this._process(u,i,!1);var l=s.length;if(!this.symlinks[e]||!o)for(var f=0;f<l;f++){if("."!==s[f].charAt(0)||this.dot){var h=c.concat(s[f],a);this._process(h,i,!0);var p=c.concat(s[f],r);this._process(p,i,!0)}}}},h.prototype._processSimple=function(n,t){var e=this._stat(n);if(this.matches[t]||(this.matches[t]=Object.create(null)),e){if(n&&l(n)&&!this.nomount){var r=/[\/\\]$/.test(n);"/"===n.charAt(0)?n=g.join(this.root,n):(n=g.resolve(this.root,n),r&&(n+="/"))}"win32"===i.platform&&(n=n.replace(/\\/g,"/")),this.matches[t][n]=!0}},h.prototype._stat=function(n){var t=this._makeAbs(n),e="/"===n.slice(-1);if(n.length>this.maxLength)return!1;if(!this.stat&&a(this.cache,t)){var r=this.cache[t];if(Array.isArray(r)&&(r="DIR"),!e||"DIR"===r)return r;if(e&&"FILE"===r)return!1}var i=this.statCache[t];if(!i){var o;try{o=s.lstatSync(t)}catch(n){return!1}if(o.isSymbolicLink())try{i=s.statSync(t)}catch(n){i=o}else i=o}r=(this.statCache[t]=i).isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||r,(!e||"DIR"===r)&&r},h.prototype._mark=function(n){return t.mark(this,n)},h.prototype._makeAbs=function(n){return t.makeAbs(this,n)}}).call(this,e("_process"))},{"./common.js":15,"./glob.js":16,_process:24,assert:9,fs:12,minimatch:20,path:22,"path-is-absolute":23,util:28}],18:[function(t,r,n){(function(s){var n=t("wrappy"),a=Object.create(null),e=t("once");r.exports=n(function(n,t){return a[n]?(a[n].push(t),null):(a[n]=[t],o=n,e(function n(){var t=a[o],e=t.length,r=function(n){for(var t=n.length,e=[],r=0;r<t;r++)e[r]=n[r];return e}(arguments);try{for(var i=0;i<e;i++)t[i].apply(null,r)}finally{t.length>e?(t.splice(0,e),s.nextTick(function(){n.apply(null,r)})):delete a[o]}}));var o})}).call(this,t("_process"))},{_process:24,once:21,wrappy:29}],19:[function(n,t,e){"function"==typeof Object.create?t.exports=function(n,t){n.super_=t,n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(n,t){n.super_=t;var e=function(){};e.prototype=t.prototype,n.prototype=new e,n.prototype.constructor=n}},{}],20:[function(n,t,e){(t.exports=s).Minimatch=i;var u={sep:"/"};try{u=n("path")}catch(n){}var M=s.GLOBSTAR=i.GLOBSTAR={},r=n("brace-expansion"),C={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},P="[^/]",z=P+"*?",B="().*{}+?[]^$\\!".split("").reduce(function(n,t){return n[t]=!0,n},{});var l=/\/+/;function o(t,e){t=t||{},e=e||{};var r={};return Object.keys(e).forEach(function(n){r[n]=e[n]}),Object.keys(t).forEach(function(n){r[n]=t[n]}),r}function s(n,t,e){if("string"!=typeof t)throw new TypeError("glob pattern string required");return e||(e={}),!(!e.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===n:new i(t,e).match(n))}function i(n,t){if(!(this instanceof i))return new i(n,t);if("string"!=typeof n)throw new TypeError("glob pattern string required");t||(t={}),n=n.trim(),"/"!==u.sep&&(n=n.split(u.sep).join("/")),this.options=t,this.set=[],this.pattern=n,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function a(n,t){if(t||(t=this instanceof i?this.options:{}),void 0===(n=void 0===n?this.pattern:n))throw new TypeError("undefined pattern");return t.nobrace||!n.match(/\{.*\}/)?[n]:r(n)}s.filter=function(r,i){return i=i||{},function(n,t,e){return s(n,r,i)}},s.defaults=function(r){if(!r||!Object.keys(r).length)return s;var i=s,n=function(n,t,e){return i.minimatch(n,t,o(r,e))};return n.Minimatch=function(n,t){return new i.Minimatch(n,o(r,t))},n},i.defaults=function(n){return n&&Object.keys(n).length?s.defaults(n).Minimatch:i},i.prototype.debug=function(){},i.prototype.make=function(){if(this._made)return;var n=this.pattern,t=this.options;if(!t.nocomment&&"#"===n.charAt(0))return void(this.comment=!0);if(!n)return void(this.empty=!0);this.parseNegate();var e=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,e),e=this.globParts=e.map(function(n){return n.split(l)}),this.debug(this.pattern,e),e=e.map(function(n,t,e){return n.map(this.parse,this)},this),this.debug(this.pattern,e),e=e.filter(function(n){return-1===n.indexOf(!1)}),this.debug(this.pattern,e),this.set=e},i.prototype.parseNegate=function(){var n=this.pattern,t=!1,e=this.options,r=0;if(e.nonegate)return;for(var i=0,o=n.length;i<o&&"!"===n.charAt(i);i++)t=!t,r++;r&&(this.pattern=n.substr(r));this.negate=t},s.braceExpand=function(n,t){return a(n,t)},i.prototype.braceExpand=a,i.prototype.parse=function(n,t){if(65536<n.length)throw new TypeError("pattern is too long");var e=this.options;if(!e.noglobstar&&"**"===n)return M;if(""===n)return"";var r,i="",o=!!e.nocase,s=!1,a=[],c=[],u=!1,l=-1,f=-1,h="."===n.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",p=this;function d(){if(r){switch(r){case"*":i+=z,o=!0;break;case"?":i+=P,o=!0;break;default:i+="\\"+r}p.debug("clearStateChar %j %j",r,i),r=!1}}for(var v,g=0,m=n.length;g<m&&(v=n.charAt(g));g++)if(this.debug("%s\t%s %s %j",n,g,i,v),s&&B[v])i+="\\"+v,s=!1;else switch(v){case"/":return!1;case"\\":d(),s=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",n,g,i,v),u){this.debug(" in class"),"!"===v&&g===f+1&&(v="^"),i+=v;continue}p.debug("call clearStateChar %j",r),d(),r=v,e.noext&&d();continue;case"(":if(u){i+="(";continue}if(!r){i+="\\(";continue}a.push({type:r,start:g-1,reStart:i.length,open:C[r].open,close:C[r].close}),i+="!"===r?"(?:(?!(?:":"(?:",this.debug("plType %j %j",r,i),r=!1;continue;case")":if(u||!a.length){i+="\\)";continue}d(),o=!0;var y=a.pop();i+=y.close,"!"===y.type&&c.push(y),y.reEnd=i.length;continue;case"|":if(u||!a.length||s){i+="\\|",s=!1;continue}d(),i+="|";continue;case"[":if(d(),u){i+="\\"+v;continue}u=!0,f=g,l=i.length,i+=v;continue;case"]":if(g===f+1||!u){i+="\\"+v,s=!1;continue}if(u){var b=n.substring(f+1,g);try{RegExp("["+b+"]")}catch(n){var _=this.parse(b,U);i=i.substr(0,l)+"\\["+_[0]+"\\]",o=o||_[1],u=!1;continue}}u=!(o=!0),i+=v;continue;default:d(),s?s=!1:!B[v]||"^"===v&&u||(i+="\\"),i+=v}u&&(b=n.substr(f+1),_=this.parse(b,U),i=i.substr(0,l)+"\\["+_[0],o=o||_[1]);for(y=a.pop();y;y=a.pop()){var w=i.slice(y.reStart+y.open.length);this.debug("setting tail",i,y),w=w.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(n,t,e){return e||(e="\\"),t+t+e+"|"}),this.debug("tail=%j\n %s",w,w,y,i);var E="*"===y.type?z:"?"===y.type?P:"\\"+y.type;o=!0,i=i.slice(0,y.reStart)+E+"\\("+w}d(),s&&(i+="\\\\");var O=!1;switch(i.charAt(0)){case".":case"[":case"(":O=!0}for(var A=c.length-1;-1<A;A--){var x=c[A],j=i.slice(0,x.reStart),k=i.slice(x.reStart,x.reEnd-8),S=i.slice(x.reEnd-8,x.reEnd),R=i.slice(x.reEnd);S+=R;var L=j.split("(").length-1,T=R;for(g=0;g<L;g++)T=T.replace(/\)[+*?]?/,"");var I="";""===(R=T)&&t!==U&&(I="$");var N=j+k+R+I+S;i=N}""!==i&&o&&(i="(?=.)"+i);O&&(i=h+i);if(t===U)return[i,o];if(!o)return n.replace(/\\(.)/g,"$1");var D=e.nocase?"i":"";try{var F=new RegExp("^"+i+"$",D)}catch(n){return new RegExp("$.")}return F._glob=n,F._src=i,F};var U={};s.makeRe=function(n,t){return new i(n,t||{}).makeRe()},i.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var n=this.set;if(!n.length)return this.regexp=!1,this.regexp;var t=this.options,e=t.noglobstar?z:t.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=t.nocase?"i":"",i=n.map(function(n){return n.map(function(n){return n===M?e:"string"==typeof n?n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):n._src}).join("\\/")}).join("|");i="^(?:"+i+")$",this.negate&&(i="^(?!"+i+").*$");try{this.regexp=new RegExp(i,r)}catch(n){this.regexp=!1}return this.regexp},s.match=function(n,t,e){var r=new i(t,e=e||{});return n=n.filter(function(n){return r.match(n)}),r.options.nonull&&!n.length&&n.push(t),n},i.prototype.match=function(n,t){if(this.debug("match",n,this.pattern),this.comment)return!1;if(this.empty)return""===n;if("/"===n&&t)return!0;var e=this.options;"/"!==u.sep&&(n=n.split(u.sep).join("/"));n=n.split(l),this.debug(this.pattern,"split",n);var r,i,o=this.set;for(this.debug(this.pattern,"set",o),i=n.length-1;0<=i&&!(r=n[i]);i--);for(i=0;i<o.length;i++){var s=o[i],a=n;e.matchBase&&1===s.length&&(a=[r]);var c=this.matchOne(a,s,t);if(c)return!!e.flipNegate||!this.negate}return!e.flipNegate&&this.negate},i.prototype.matchOne=function(n,t,e){var r=this.options;this.debug("matchOne",{this:this,file:n,pattern:t}),this.debug("matchOne",n.length,t.length);for(var i=0,o=0,s=n.length,a=t.length;i<s&&o<a;i++,o++){this.debug("matchOne loop");var c,u=t[o],l=n[i];if(this.debug(t,u,l),!1===u)return!1;if(u===M){this.debug("GLOBSTAR",[t,u,l]);var f=i,h=o+1;if(h===a){for(this.debug("** at the end");i<s;i++)if("."===n[i]||".."===n[i]||!r.dot&&"."===n[i].charAt(0))return!1;return!0}for(;f<s;){var p=n[f];if(this.debug("\nglobstar while",n,f,t,h,p),this.matchOne(n.slice(f),t.slice(h),e))return this.debug("globstar found match!",f,s,p),!0;if("."===p||".."===p||!r.dot&&"."===p.charAt(0)){this.debug("dot detected!",n,f,t,h);break}this.debug("globstar swallow a segment, and continue"),f++}return!(!e||(this.debug("\n>>> no match, partial?",n,f,t,h),f!==s))}if("string"==typeof u?(c=r.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,c)):(c=l.match(u),this.debug("pattern match",u,l,c)),!c)return!1}if(i===s&&o===a)return!0;if(i===s)return e;if(o===a)return i===s-1&&""===n[i];throw new Error("wtf?")}},{"brace-expansion":11,path:22}],21:[function(n,t,e){var r=n("wrappy");function i(n){var t=function(){return t.called?t.value:(t.called=!0,t.value=n.apply(this,arguments))};return t.called=!1,t}function o(n){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=n.apply(this,arguments)},e=n.name||"Function wrapped with `once`";return t.onceError=e+" shouldn't be called more than once",t.called=!1,t}t.exports=r(i),t.exports.strict=r(o),i.proto=i(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return i(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return o(this)},configurable:!0})})},{wrappy:29}],22:[function(n,t,u){(function(i){function o(n,t){for(var e=0,r=n.length-1;0<=r;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(n){return t.exec(n).slice(1)};function a(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r<n.length;r++)t(n[r],r,n)&&e.push(n[r]);return e}u.resolve=function(){for(var n="",t=!1,e=arguments.length-1;-1<=e&&!t;e--){var r=0<=e?arguments[e]:i.cwd();if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(n=r+"/"+n,t="/"===r.charAt(0))}return(t?"/":"")+(n=o(a(n.split("/"),function(n){return!!n}),!t).join("/"))||"."},u.normalize=function(n){var t=u.isAbsolute(n),e="/"===r(n,-1);return(n=o(a(n.split("/"),function(n){return!!n}),!t).join("/"))||t||(n="."),n&&e&&(n+="/"),(t?"/":"")+n},u.isAbsolute=function(n){return"/"===n.charAt(0)},u.join=function(){var n=Array.prototype.slice.call(arguments,0);return u.normalize(a(n,function(n,t){if("string"!=typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},u.relative=function(n,t){function e(n){for(var t=0;t<n.length&&""===n[t];t++);for(var e=n.length-1;0<=e&&""===n[e];e--);return e<t?[]:n.slice(t,e-t+1)}n=u.resolve(n).substr(1),t=u.resolve(t).substr(1);for(var r=e(n.split("/")),i=e(t.split("/")),o=Math.min(r.length,i.length),s=o,a=0;a<o;a++)if(r[a]!==i[a]){s=a;break}var c=[];for(a=s;a<r.length;a++)c.push("..");return(c=c.concat(i.slice(s))).join("/")},u.sep="/",u.delimiter=":",u.dirname=function(n){var t=s(n),e=t[0],r=t[1];return e||r?(r&&(r=r.substr(0,r.length-1)),e+r):"."},u.basename=function(n,t){var e=s(n)[2];return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},u.extname=function(n){return s(n)[3]};var r="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,n("_process"))},{_process:24}],23:[function(n,r,t){(function(n){"use strict";function t(n){return"/"===n.charAt(0)}function e(n){var t=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(n),e=t[1]||"",r=Boolean(e&&":"!==e.charAt(1));return Boolean(t[2]||r)}r.exports="win32"===n.platform?e:t,r.exports.posix=t,r.exports.win32=e}).call(this,n("_process"))},{_process:24}],24:[function(n,t,e){var r,i,o=t.exports={};function s(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function c(t){if(r===setTimeout)return setTimeout(t,0);if((r===s||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(n){try{return r.call(null,t,0)}catch(n){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:s}catch(n){r=s}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(n){i=a}}();var u,l=[],f=!1,h=-1;function p(){f&&u&&(f=!1,u.length?l=u.concat(l):h=-1,l.length&&d())}function d(){if(!f){var n=c(p);f=!0;for(var t=l.length;t;){for(u=l,l=[];++h<t;)u&&u[h].run();h=-1,t=l.length}u=null,f=!1,function(t){if(i===clearTimeout)return clearTimeout(t);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{i(t)}catch(n){try{return i.call(null,t)}catch(n){return i.call(this,t)}}}(n)}}function v(n,t){this.fun=n,this.array=t}function g(){}o.nextTick=function(n){var t=new Array(arguments.length-1);if(1<arguments.length)for(var e=1;e<arguments.length;e++)t[e-1]=arguments[e];l.push(new v(n,t)),1!==l.length||f||c(d)},v.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=g,o.addListener=g,o.once=g,o.off=g,o.removeListener=g,o.removeAllListeners=g,o.emit=g,o.prependListener=g,o.prependOnceListener=g,o.listeners=function(n){return[]},o.binding=function(n){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(n){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},{}],25:[function(n,q,$){(function(){var n=this,t=n._,r=Array.prototype,s=Object.prototype,e=Function.prototype,i=r.push,c=r.slice,f=s.toString,o=s.hasOwnProperty,a=Array.isArray,u=Object.keys,l=e.bind,h=Object.create,p=function(){},d=function(n){return n instanceof d?n:this instanceof d?void(this._wrapped=n):new d(n)};void 0!==$?(void 0!==q&&q.exports&&($=q.exports=d),$._=d):n._=d,d.VERSION="1.8.3";var v=function(i,o,n){if(void 0===o)return i;switch(null==n?3:n){case 1:return function(n){return i.call(o,n)};case 2:return function(n,t){return i.call(o,n,t)};case 3:return function(n,t,e){return i.call(o,n,t,e)};case 4:return function(n,t,e,r){return i.call(o,n,t,e,r)}}return function(){return i.apply(o,arguments)}},g=function(n,t,e){return null==n?d.identity:d.isFunction(n)?v(n,t,e):d.isObject(n)?d.matcher(n):d.property(n)};d.iteratee=function(n,t){return g(n,t,1/0)};var m=function(c,u){return function(n){var t=arguments.length;if(t<2||null==n)return n;for(var e=1;e<t;e++)for(var r=arguments[e],i=c(r),o=i.length,s=0;s<o;s++){var a=i[s];u&&void 0!==n[a]||(n[a]=r[a])}return n}},y=function(n){if(!d.isObject(n))return{};if(h)return h(n);p.prototype=n;var t=new p;return p.prototype=null,t},b=function(t){return function(n){return null==n?void 0:n[t]}},_=Math.pow(2,53)-1,w=b("length"),E=function(n){var t=w(n);return"number"==typeof t&&0<=t&&t<=_};function O(a){return function(n,t,e,r){t=v(t,r,4);var i=!E(n)&&d.keys(n),o=(i||n).length,s=0<a?0:o-1;return arguments.length<3&&(e=n[i?i[s]:s],s+=a),function(n,t,e,r,i,o){for(;0<=i&&i<o;i+=a){var s=r?r[i]:i;e=t(e,n[s],s,n)}return e}(n,t,e,i,s,o)}}d.each=d.forEach=function(n,t,e){var r,i;if(t=v(t,e),E(n))for(r=0,i=n.length;r<i;r++)t(n[r],r,n);else{var o=d.keys(n);for(r=0,i=o.length;r<i;r++)t(n[o[r]],o[r],n)}return n},d.map=d.collect=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=Array(i),s=0;s<i;s++){var a=r?r[s]:s;o[s]=t(n[a],a,n)}return o},d.reduce=d.foldl=d.inject=O(1),d.reduceRight=d.foldr=O(-1),d.find=d.detect=function(n,t,e){var r;if(void 0!==(r=E(n)?d.findIndex(n,t,e):d.findKey(n,t,e))&&-1!==r)return n[r]},d.filter=d.select=function(n,r,t){var i=[];return r=g(r,t),d.each(n,function(n,t,e){r(n,t,e)&&i.push(n)}),i},d.reject=function(n,t,e){return d.filter(n,d.negate(g(t)),e)},d.every=d.all=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=0;o<i;o++){var s=r?r[o]:o;if(!t(n[s],s,n))return!1}return!0},d.some=d.any=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=0;o<i;o++){var s=r?r[o]:o;if(t(n[s],s,n))return!0}return!1},d.contains=d.includes=d.include=function(n,t,e,r){return E(n)||(n=d.values(n)),("number"!=typeof e||r)&&(e=0),0<=d.indexOf(n,t,e)},d.invoke=function(n,e){var r=c.call(arguments,2),i=d.isFunction(e);return d.map(n,function(n){var t=i?e:n[e];return null==t?t:t.apply(n,r)})},d.pluck=function(n,t){return d.map(n,d.property(t))},d.where=function(n,t){return d.filter(n,d.matcher(t))},d.findWhere=function(n,t){return d.find(n,d.matcher(t))},d.max=function(n,r,t){var e,i,o=-1/0,s=-1/0;if(null==r&&null!=n)for(var a=0,c=(n=E(n)?n:d.values(n)).length;a<c;a++)e=n[a],o<e&&(o=e);else r=g(r,t),d.each(n,function(n,t,e){i=r(n,t,e),(s<i||i===-1/0&&o===-1/0)&&(o=n,s=i)});return o},d.min=function(n,r,t){var e,i,o=1/0,s=1/0;if(null==r&&null!=n)for(var a=0,c=(n=E(n)?n:d.values(n)).length;a<c;a++)(e=n[a])<o&&(o=e);else r=g(r,t),d.each(n,function(n,t,e){((i=r(n,t,e))<s||i===1/0&&o===1/0)&&(o=n,s=i)});return o},d.shuffle=function(n){for(var t,e=E(n)?n:d.values(n),r=e.length,i=Array(r),o=0;o<r;o++)(t=d.random(0,o))!==o&&(i[o]=i[t]),i[t]=e[o];return i},d.sample=function(n,t,e){return null==t||e?(E(n)||(n=d.values(n)),n[d.random(n.length-1)]):d.shuffle(n).slice(0,Math.max(0,t))},d.sortBy=function(n,r,t){return r=g(r,t),d.pluck(d.map(n,function(n,t,e){return{value:n,index:t,criteria:r(n,t,e)}}).sort(function(n,t){var e=n.criteria,r=t.criteria;if(e!==r){if(r<e||void 0===e)return 1;if(e<r||void 0===r)return-1}return n.index-t.index}),"value")};var A=function(s){return function(r,i,n){var o={};return i=g(i,n),d.each(r,function(n,t){var e=i(n,t,r);s(o,n,e)}),o}};d.groupBy=A(function(n,t,e){d.has(n,e)?n[e].push(t):n[e]=[t]}),d.indexBy=A(function(n,t,e){n[e]=t}),d.countBy=A(function(n,t,e){d.has(n,e)?n[e]++:n[e]=1}),d.toArray=function(n){return n?d.isArray(n)?c.call(n):E(n)?d.map(n,d.identity):d.values(n):[]},d.size=function(n){return null==n?0:E(n)?n.length:d.keys(n).length},d.partition=function(n,r,t){r=g(r,t);var i=[],o=[];return d.each(n,function(n,t,e){(r(n,t,e)?i:o).push(n)}),[i,o]},d.first=d.head=d.take=function(n,t,e){if(null!=n)return null==t||e?n[0]:d.initial(n,n.length-t)},d.initial=function(n,t,e){return c.call(n,0,Math.max(0,n.length-(null==t||e?1:t)))},d.last=function(n,t,e){if(null!=n)return null==t||e?n[n.length-1]:d.rest(n,Math.max(0,n.length-t))},d.rest=d.tail=d.drop=function(n,t,e){return c.call(n,null==t||e?1:t)},d.compact=function(n){return d.filter(n,d.identity)};var x=function(n,t,e,r){for(var i=[],o=0,s=r||0,a=w(n);s<a;s++){var c=n[s];if(E(c)&&(d.isArray(c)||d.isArguments(c))){t||(c=x(c,t,e));var u=0,l=c.length;for(i.length+=l;u<l;)i[o++]=c[u++]}else e||(i[o++]=c)}return i};function j(o){return function(n,t,e){t=g(t,e);for(var r=w(n),i=0<o?0:r-1;0<=i&&i<r;i+=o)if(t(n[i],i,n))return i;return-1}}function k(o,s,a){return function(n,t,e){var r=0,i=w(n);if("number"==typeof e)0<o?r=0<=e?e:Math.max(e+i,r):i=0<=e?Math.min(e+1,i):e+i+1;else if(a&&e&&i)return n[e=a(n,t)]===t?e:-1;if(t!=t)return 0<=(e=s(c.call(n,r,i),d.isNaN))?e+r:-1;for(e=0<o?r:i-1;0<=e&&e<i;e+=o)if(n[e]===t)return e;return-1}}d.flatten=function(n,t){return x(n,t,!1)},d.without=function(n){return d.difference(n,c.call(arguments,1))},d.uniq=d.unique=function(n,t,e,r){d.isBoolean(t)||(r=e,e=t,t=!1),null!=e&&(e=g(e,r));for(var i=[],o=[],s=0,a=w(n);s<a;s++){var c=n[s],u=e?e(c,s,n):c;t?(s&&o===u||i.push(c),o=u):e?d.contains(o,u)||(o.push(u),i.push(c)):d.contains(i,c)||i.push(c)}return i},d.union=function(){return d.uniq(x(arguments,!0,!0))},d.intersection=function(n){for(var t=[],e=arguments.length,r=0,i=w(n);r<i;r++){var o=n[r];if(!d.contains(t,o)){for(var s=1;s<e&&d.contains(arguments[s],o);s++);s===e&&t.push(o)}}return t},d.difference=function(n){var t=x(arguments,!0,!0,1);return d.filter(n,function(n){return!d.contains(t,n)})},d.zip=function(){return d.unzip(arguments)},d.unzip=function(n){for(var t=n&&d.max(n,w).length||0,e=Array(t),r=0;r<t;r++)e[r]=d.pluck(n,r);return e},d.object=function(n,t){for(var e={},r=0,i=w(n);r<i;r++)t?e[n[r]]=t[r]:e[n[r][0]]=n[r][1];return e},d.findIndex=j(1),d.findLastIndex=j(-1),d.sortedIndex=function(n,t,e,r){for(var i=(e=g(e,r,1))(t),o=0,s=w(n);o<s;){var a=Math.floor((o+s)/2);e(n[a])<i?o=a+1:s=a}return o},d.indexOf=k(1,d.findIndex,d.sortedIndex),d.lastIndexOf=k(-1,d.findLastIndex),d.range=function(n,t,e){null==t&&(t=n||0,n=0),e=e||1;for(var r=Math.max(Math.ceil((t-n)/e),0),i=Array(r),o=0;o<r;o++,n+=e)i[o]=n;return i};var S=function(n,t,e,r,i){if(!(r instanceof t))return n.apply(e,i);var o=y(n.prototype),s=n.apply(o,i);return d.isObject(s)?s:o};d.bind=function(n,t){if(l&&n.bind===l)return l.apply(n,c.call(arguments,1));if(!d.isFunction(n))throw new TypeError("Bind must be called on a function");var e=c.call(arguments,2),r=function(){return S(n,r,t,this,e.concat(c.call(arguments)))};return r},d.partial=function(i){var o=c.call(arguments,1),s=function(){for(var n=0,t=o.length,e=Array(t),r=0;r<t;r++)e[r]=o[r]===d?arguments[n++]:o[r];for(;n<arguments.length;)e.push(arguments[n++]);return S(i,s,this,this,e)};return s},d.bindAll=function(n){var t,e,r=arguments.length;if(r<=1)throw new Error("bindAll must be passed function names");for(t=1;t<r;t++)n[e=arguments[t]]=d.bind(n[e],n);return n},d.memoize=function(r,i){var o=function(n){var t=o.cache,e=""+(i?i.apply(this,arguments):n);return d.has(t,e)||(t[e]=r.apply(this,arguments)),t[e]};return o.cache={},o},d.delay=function(n,t){var e=c.call(arguments,2);return setTimeout(function(){return n.apply(null,e)},t)},d.defer=d.partial(d.delay,d,1),d.throttle=function(e,r,i){var o,s,a,c=null,u=0;i||(i={});var l=function(){u=!1===i.leading?0:d.now(),c=null,a=e.apply(o,s),c||(o=s=null)};return function(){var n=d.now();u||!1!==i.leading||(u=n);var t=r-(n-u);return o=this,s=arguments,t<=0||r<t?(c&&(clearTimeout(c),c=null),u=n,a=e.apply(o,s),c||(o=s=null)):c||!1===i.trailing||(c=setTimeout(l,t)),a}},d.debounce=function(t,e,r){var i,o,s,a,c,u=function(){var n=d.now()-a;n<e&&0<=n?i=setTimeout(u,e-n):(i=null,r||(c=t.apply(s,o),i||(s=o=null)))};return function(){s=this,o=arguments,a=d.now();var n=r&&!i;return i||(i=setTimeout(u,e)),n&&(c=t.apply(s,o),s=o=null),c}},d.wrap=function(n,t){return d.partial(t,n)},d.negate=function(n){return function(){return!n.apply(this,arguments)}},d.compose=function(){var e=arguments,r=e.length-1;return function(){for(var n=r,t=e[r].apply(this,arguments);n--;)t=e[n].call(this,t);return t}},d.after=function(n,t){return function(){if(--n<1)return t.apply(this,arguments)}},d.before=function(n,t){var e;return function(){return 0<--n&&(e=t.apply(this,arguments)),n<=1&&(t=null),e}},d.once=d.partial(d.before,2);var R=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function T(n,t){var e=L.length,r=n.constructor,i=d.isFunction(r)&&r.prototype||s,o="constructor";for(d.has(n,o)&&!d.contains(t,o)&&t.push(o);e--;)(o=L[e])in n&&n[o]!==i[o]&&!d.contains(t,o)&&t.push(o)}d.keys=function(n){if(!d.isObject(n))return[];if(u)return u(n);var t=[];for(var e in n)d.has(n,e)&&t.push(e);return R&&T(n,t),t},d.allKeys=function(n){if(!d.isObject(n))return[];var t=[];for(var e in n)t.push(e);return R&&T(n,t),t},d.values=function(n){for(var t=d.keys(n),e=t.length,r=Array(e),i=0;i<e;i++)r[i]=n[t[i]];return r},d.mapObject=function(n,t,e){t=g(t,e);for(var r,i=d.keys(n),o=i.length,s={},a=0;a<o;a++)s[r=i[a]]=t(n[r],r,n);return s},d.pairs=function(n){for(var t=d.keys(n),e=t.length,r=Array(e),i=0;i<e;i++)r[i]=[t[i],n[t[i]]];return r},d.invert=function(n){for(var t={},e=d.keys(n),r=0,i=e.length;r<i;r++)t[n[e[r]]]=e[r];return t},d.functions=d.methods=function(n){var t=[];for(var e in n)d.isFunction(n[e])&&t.push(e);return t.sort()},d.extend=m(d.allKeys),d.extendOwn=d.assign=m(d.keys),d.findKey=function(n,t,e){t=g(t,e);for(var r,i=d.keys(n),o=0,s=i.length;o<s;o++)if(t(n[r=i[o]],r,n))return r},d.pick=function(n,t,e){var r,i,o={},s=n;if(null==s)return o;d.isFunction(t)?(i=d.allKeys(s),r=v(t,e)):(i=x(arguments,!1,!1,1),r=function(n,t,e){return t in e},s=Object(s));for(var a=0,c=i.length;a<c;a++){var u=i[a],l=s[u];r(l,u,s)&&(o[u]=l)}return o},d.omit=function(n,t,e){if(d.isFunction(t))t=d.negate(t);else{var r=d.map(x(arguments,!1,!1,1),String);t=function(n,t){return!d.contains(r,t)}}return d.pick(n,t,e)},d.defaults=m(d.allKeys,!0),d.create=function(n,t){var e=y(n);return t&&d.extendOwn(e,t),e},d.clone=function(n){return d.isObject(n)?d.isArray(n)?n.slice():d.extend({},n):n},d.tap=function(n,t){return t(n),n},d.isMatch=function(n,t){var e=d.keys(t),r=e.length;if(null==n)return!r;for(var i=Object(n),o=0;o<r;o++){var s=e[o];if(t[s]!==i[s]||!(s in i))return!1}return!0};var I=function(n,t,e,r){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof d&&(n=n._wrapped),t instanceof d&&(t=t._wrapped);var i=f.call(n);if(i!==f.call(t))return!1;switch(i){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!=+n?+t!=+t:0==+n?1/+n==1/t:+n==+t;case"[object Date]":case"[object Boolean]":return+n==+t}var o="[object Array]"===i;if(!o){if("object"!=typeof n||"object"!=typeof t)return!1;var s=n.constructor,a=t.constructor;if(s!==a&&!(d.isFunction(s)&&s instanceof s&&d.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[];for(var c=(e=e||[]).length;c--;)if(e[c]===n)return r[c]===t;if(e.push(n),r.push(t),o){if((c=n.length)!==t.length)return!1;for(;c--;)if(!I(n[c],t[c],e,r))return!1}else{var u,l=d.keys(n);if(c=l.length,d.keys(t).length!==c)return!1;for(;c--;)if(u=l[c],!d.has(t,u)||!I(n[u],t[u],e,r))return!1}return e.pop(),r.pop(),!0};d.isEqual=function(n,t){return I(n,t)},d.isEmpty=function(n){return null==n||(E(n)&&(d.isArray(n)||d.isString(n)||d.isArguments(n))?0===n.length:0===d.keys(n).length)},d.isElement=function(n){return!(!n||1!==n.nodeType)},d.isArray=a||function(n){return"[object Array]"===f.call(n)},d.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},d.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(t){d["is"+t]=function(n){return f.call(n)==="[object "+t+"]"}}),d.isArguments(arguments)||(d.isArguments=function(n){return d.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(d.isFunction=function(n){return"function"==typeof n||!1}),d.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},d.isNaN=function(n){return d.isNumber(n)&&n!==+n},d.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===f.call(n)},d.isNull=function(n){return null===n},d.isUndefined=function(n){return void 0===n},d.has=function(n,t){return null!=n&&o.call(n,t)},d.noConflict=function(){return n._=t,this},d.identity=function(n){return n},d.constant=function(n){return function(){return n}},d.noop=function(){},d.property=b,d.propertyOf=function(t){return null==t?function(){}:function(n){return t[n]}},d.matcher=d.matches=function(t){return t=d.extendOwn({},t),function(n){return d.isMatch(n,t)}},d.times=function(n,t,e){var r=Array(Math.max(0,n));t=v(t,e,1);for(var i=0;i<n;i++)r[i]=t(i);return r},d.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},d.now=Date.now||function(){return(new Date).getTime()};var N={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},D=d.invert(N),F=function(t){var e=function(n){return t[n]},n="(?:"+d.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(n){return n=null==n?"":""+n,r.test(n)?n.replace(i,e):n}};d.escape=F(N),d.unescape=F(D),d.result=function(n,t,e){var r=null==n?void 0:n[t];return void 0===r&&(r=e),d.isFunction(r)?r.call(n):r};var M=0;d.uniqueId=function(n){var t=++M+"";return n?n+t:t},d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var C=/(.)^/,P={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},z=/\\|'|\r|\n|\u2028|\u2029/g,B=function(n){return"\\"+P[n]};d.template=function(o,n,t){!n&&t&&(n=t),n=d.defaults({},n,d.templateSettings);var e=RegExp([(n.escape||C).source,(n.interpolate||C).source,(n.evaluate||C).source].join("|")+"|$","g"),s=0,a="__p+='";o.replace(e,function(n,t,e,r,i){return a+=o.slice(s,i).replace(z,B),s=i+n.length,t?a+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?a+="'+\n((__t=("+e+"))==null?'':__t)+\n'":r&&(a+="';\n"+r+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{var r=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var i=function(n){return r.call(this,n,d)},c=n.variable||"obj";return i.source="function("+c+"){\n"+a+"}",i},d.chain=function(n){var t=d(n);return t._chain=!0,t};var U=function(n,t){return n._chain?d(t).chain():t};d.mixin=function(e){d.each(d.functions(e),function(n){var t=d[n]=e[n];d.prototype[n]=function(){var n=[this._wrapped];return i.apply(n,arguments),U(this,t.apply(d,n))}})},d.mixin(d),d.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=r[t];d.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),d.each(["concat","join","slice"],function(n){var t=r[n];d.prototype[n]=function(){return U(this,t.apply(this._wrapped,arguments))}}),d.prototype.value=function(){return this._wrapped},d.prototype.valueOf=d.prototype.toJSON=d.prototype.value,d.prototype.toString=function(){return""+this._wrapped}}).call(this)},{}],26:[function(n,t,e){arguments[4][19][0].apply(e,arguments)},{dup:19}],27:[function(n,t,e){t.exports=function(n){return n&&"object"==typeof n&&"function"==typeof n.copy&&"function"==typeof n.fill&&"function"==typeof n.readUInt8}},{}],28:[function(h,n,k){(function(r,i){var a=/%[sdj%]/g;k.format=function(n){if(!_(n)){for(var t=[],e=0;e<arguments.length;e++)t.push(c(arguments[e]));return t.join(" ")}e=1;for(var r=arguments,i=r.length,o=String(n).replace(a,function(n){if("%%"===n)return"%";if(i<=e)return n;switch(n){case"%s":return String(r[e++]);case"%d":return Number(r[e++]);case"%j":try{return JSON.stringify(r[e++])}catch(n){return"[Circular]"}default:return n}}),s=r[e];e<i;s=r[++e])y(s)||!l(s)?o+=" "+s:o+=" "+c(s);return o},k.deprecate=function(n,t){if(w(i.process))return function(){return k.deprecate(n,t).apply(this,arguments)};if(!0===r.noDeprecation)return n;var e=!1;return function(){if(!e){if(r.throwDeprecation)throw new Error(t);r.traceDeprecation?console.trace(t):console.error(t),e=!0}return n.apply(this,arguments)}};var n,o={};function c(n,t){var e={seen:[],stylize:u};return 3<=arguments.length&&(e.depth=arguments[2]),4<=arguments.length&&(e.colors=arguments[3]),m(t)?e.showHidden=t:t&&k._extend(e,t),w(e.showHidden)&&(e.showHidden=!1),w(e.depth)&&(e.depth=2),w(e.colors)&&(e.colors=!1),w(e.customInspect)&&(e.customInspect=!0),e.colors&&(e.stylize=s),p(e,n,e.depth)}function s(n,t){var e=c.styles[t];return e?"["+c.colors[e][0]+"m"+n+"["+c.colors[e][1]+"m":n}function u(n,t){return n}function p(t,e,r){if(t.customInspect&&e&&x(e.inspect)&&e.inspect!==k.inspect&&(!e.constructor||e.constructor.prototype!==e)){var n=e.inspect(r,t);return _(n)||(n=p(t,n,r)),n}var i=function(n,t){if(w(t))return n.stylize("undefined","undefined");if(_(t)){var e="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return n.stylize(e,"string")}if(b(t))return n.stylize(""+t,"number");if(m(t))return n.stylize(""+t,"boolean");if(y(t))return n.stylize("null","null")}(t,e);if(i)return i;var o,s=Object.keys(e),a=(o={},s.forEach(function(n,t){o[n]=!0}),o);if(t.showHidden&&(s=Object.getOwnPropertyNames(e)),A(e)&&(0<=s.indexOf("message")||0<=s.indexOf("description")))return d(e);if(0===s.length){if(x(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(E(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(O(e))return t.stylize(Date.prototype.toString.call(e),"date");if(A(e))return d(e)}var u,l="",f=!1,h=["{","}"];(g(e)&&(f=!0,h=["[","]"]),x(e))&&(l=" [Function"+(e.name?": "+e.name:"")+"]");return E(e)&&(l=" "+RegExp.prototype.toString.call(e)),O(e)&&(l=" "+Date.prototype.toUTCString.call(e)),A(e)&&(l=" "+d(e)),0!==s.length||f&&0!=e.length?r<0?E(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),u=f?function(t,e,r,i,n){for(var o=[],s=0,a=e.length;s<a;++s)j(e,String(s))?o.push(v(t,e,r,i,String(s),!0)):o.push("");return n.forEach(function(n){n.match(/^\d+$/)||o.push(v(t,e,r,i,n,!0))}),o}(t,e,r,a,s):s.map(function(n){return v(t,e,r,a,n,f)}),t.seen.pop(),function(n,t,e){if(60<n.reduce(function(n,t){return 0,0<=t.indexOf("\n")&&0,n+t.replace(/\u001b\[\d\d?m/g,"").length+1},0))return e[0]+(""===t?"":t+"\n ")+" "+n.join(",\n ")+" "+e[1];return e[0]+t+" "+n.join(", ")+" "+e[1]}(u,l,h)):h[0]+l+h[1]}function d(n){return"["+Error.prototype.toString.call(n)+"]"}function v(n,t,e,r,i,o){var s,a,c;if((c=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=c.set?n.stylize("[Getter/Setter]","special"):n.stylize("[Getter]","special"):c.set&&(a=n.stylize("[Setter]","special")),j(r,i)||(s="["+i+"]"),a||(n.seen.indexOf(c.value)<0?-1<(a=y(e)?p(n,c.value,null):p(n,c.value,e-1)).indexOf("\n")&&(a=o?a.split("\n").map(function(n){return" "+n}).join("\n").substr(2):"\n"+a.split("\n").map(function(n){return" "+n}).join("\n")):a=n.stylize("[Circular]","special")),w(s)){if(o&&i.match(/^\d+$/))return a;s=(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),n.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),n.stylize(s,"string"))}return s+": "+a}function g(n){return Array.isArray(n)}function m(n){return"boolean"==typeof n}function y(n){return null===n}function b(n){return"number"==typeof n}function _(n){return"string"==typeof n}function w(n){return void 0===n}function E(n){return l(n)&&"[object RegExp]"===t(n)}function l(n){return"object"==typeof n&&null!==n}function O(n){return l(n)&&"[object Date]"===t(n)}function A(n){return l(n)&&("[object Error]"===t(n)||n instanceof Error)}function x(n){return"function"==typeof n}function t(n){return Object.prototype.toString.call(n)}function e(n){return n<10?"0"+n.toString(10):n.toString(10)}k.debuglog=function(t){if(w(n)&&(n=r.env.NODE_DEBUG||""),t=t.toUpperCase(),!o[t])if(new RegExp("\\b"+t+"\\b","i").test(n)){var e=r.pid;o[t]=function(){var n=k.format.apply(k,arguments);console.error("%s %d: %s",t,e,n)}}else o[t]=function(){};return o[t]},(k.inspect=c).colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},c.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},k.isArray=g,k.isBoolean=m,k.isNull=y,k.isNullOrUndefined=function(n){return null==n},k.isNumber=b,k.isString=_,k.isSymbol=function(n){return"symbol"==typeof n},k.isUndefined=w,k.isRegExp=E,k.isObject=l,k.isDate=O,k.isError=A,k.isFunction=x,k.isPrimitive=function(n){return null===n||"boolean"==typeof n||"number"==typeof n||"string"==typeof n||"symbol"==typeof n||void 0===n},k.isBuffer=h("./support/isBuffer");var f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function j(n,t){return Object.prototype.hasOwnProperty.call(n,t)}k.log=function(){var n,t;console.log("%s - %s",(n=new Date,t=[e(n.getHours()),e(n.getMinutes()),e(n.getSeconds())].join(":"),[n.getDate(),f[n.getMonth()],t].join(" ")),k.format.apply(k,arguments))},k.inherits=h("inherits"),k._extend=function(n,t){if(!t||!l(t))return n;for(var e=Object.keys(t),r=e.length;r--;)n[e[r]]=t[e[r]];return n}}).call(this,h("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":27,_process:24,inherits:26}],29:[function(n,t,e){t.exports=function n(i,t){if(i&&t)return n(i)(t);if("function"!=typeof i)throw new TypeError("need wrapper function");Object.keys(i).forEach(function(n){e[n]=i[n]});return e;function e(){for(var n=new Array(arguments.length),t=0;t<n.length;t++)n[t]=arguments[t];var e=i.apply(this,n),r=n[n.length-1];return"function"==typeof e&&e!==r&&Object.keys(r).forEach(function(n){e[n]=r[n]}),e}}},{}]},{},[7])(7)}); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/javascripts/modernizr.1f0bcf2b.js b/freetype/docs/reference/site/assets/javascripts/modernizr.1f0bcf2b.js
new file mode 100644
index 00000000..cd5a11bf
--- /dev/null
+++ b/freetype/docs/reference/site/assets/javascripts/modernizr.1f0bcf2b.js
@@ -0,0 +1 @@
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=12)}({12:function(e,t,n){"use strict";n.r(t);n(13)},13:function(e,t){var n;(function(i,d,p){function y(e,t){return typeof e===t}function s(e){var t=S.className,n=c._config.classPrefix||"";if(b&&(t=t.baseVal),c._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}c._config.enableClasses&&(t+=" "+n+e.join(" "+n),b?S.className.baseVal=t:S.className=t)}function a(e,t){if("object"==typeof e)for(var n in e)v(e,n)&&a(n,e[n]);else{var r=(e=e.toLowerCase()).split("."),o=c[r[0]];if(2==r.length&&(o=o[r[1]]),void 0!==o)return c;t="function"==typeof t?t():t,1==r.length?c[r[0]]=t:(!c[r[0]]||c[r[0]]instanceof Boolean||(c[r[0]]=new Boolean(c[r[0]])),c[r[0]][r[1]]=t),s([(t&&0!=t?"":"no-")+r.join("-")]),c._trigger(e,t)}return c}function m(){return"function"!=typeof d.createElement?d.createElement(arguments[0]):b?d.createElementNS.call(d,"http://www.w3.org/2000/svg",arguments[0]):d.createElement.apply(d,arguments)}function o(e,t,n,r){var o,i,s,a,l,u="modernizr",f=m("div"),c=((l=d.body)||((l=m(b?"svg":"body")).fake=!0),l);if(parseInt(n,10))for(;n--;)(s=m("div")).id=r?r[n]:u+(n+1),f.appendChild(s);return(o=m("style")).type="text/css",o.id="s"+u,(c.fake?c:f).appendChild(o),c.appendChild(f),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(d.createTextNode(e)),f.id=u,c.fake&&(c.style.background="",c.style.overflow="hidden",a=S.style.overflow,S.style.overflow="hidden",S.appendChild(c)),i=t(f,e),c.fake?(c.parentNode.removeChild(c),S.style.overflow=a,S.offsetHeight):f.parentNode.removeChild(f),!!i}function l(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function h(e,t){var n=e.length;if("CSS"in i&&"supports"in i.CSS){for(;n--;)if(i.CSS.supports(l(e[n]),t))return!0;return!1}if("CSSSupportsRule"in i){for(var r=[];n--;)r.push("("+l(e[n])+":"+t+")");return o("@supports ("+(r=r.join(" or "))+") { #modernizr { position: absolute; } }",function(e){return"absolute"==function(e,t,n){var r;if("getComputedStyle"in i){r=getComputedStyle.call(i,e,t);var o=i.console;null!==r?n&&(r=r.getPropertyValue(n)):o&&o[o.error?"error":"log"].call(o,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}else r=!t&&e.currentStyle&&e.currentStyle[n];return r}(e,null,"position")})}return p}function u(e,t){return function(){return e.apply(t,arguments)}}function r(e,t,n,r,o){var i=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+w.join(i+" ")+i).split(" ");return y(t,"string")||y(t,"undefined")?function(e,t,n,r){function o(){s&&(delete T.style,delete T.modElem)}if(r=!y(r,"undefined")&&r,!y(n,"undefined")){var i=h(e,n);if(!y(i,"undefined"))return i}for(var s,a,l,u,f,c=["modernizr","tspan","samp"];!T.style&&c.length;)s=!0,T.modElem=m(c.shift()),T.style=T.modElem.style;for(l=e.length,a=0;a<l;a++)if(u=e[a],f=T.style[u],!!~(""+u).indexOf("-")&&(u=u.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")),T.style[u]!==p){if(r||y(n,"undefined"))return o(),"pfx"!=t||u;try{T.style[u]=n}catch(e){}if(T.style[u]!=f)return o(),"pfx"!=t||u}return o(),!1}(s,t,r,o):function(e,t,n){var r;for(var o in e)if(e[o]in t)return!1===n?e[o]:y(r=t[e[o]],"function")?u(r,n||t):r;return!1}(s=(e+" "+P.join(i+" ")+i).split(" "),t,n)}function e(e,t,n){return r(e,p,p,t,n)}var f=[],t={_version:"3.6.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){f.push({name:e,fn:t,options:n})},addAsyncTest:function(e){f.push({name:null,fn:e})}},c=function(){};c.prototype=t,c=new c;var v,n,g=[],S=d.documentElement,b="svg"===S.nodeName.toLowerCase();v=y(n={}.hasOwnProperty,"undefined")||y(n.call,"undefined")?function(e,t){return t in e&&y(e.constructor.prototype[t],"undefined")}:function(e,t){return n.call(e,t)},t._l={},t.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),c.hasOwnProperty(e)&&setTimeout(function(){c._trigger(e,c[e])},0)},t._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e;for(e=0;e<n.length;e++)(0,n[e])(t)},0),delete this._l[e]}},c._q.push(function(){t.addTest=a}),c.addTest("json","JSON"in i&&"parse"in JSON&&"stringify"in JSON),c.addTest("svg",!!d.createElementNS&&!!d.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect);var C=t.testStyles=o;c.addTest("checked",function(){return C("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=m("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),c.addTest("target",function(){var e=i.document;if(!("querySelectorAll"in e))return!1;try{return e.querySelectorAll(":target"),!0}catch(e){return!1}}),c.addTest("dataset",function(){var e=m("div");return e.setAttribute("data-a-b","c"),!(!e.dataset||"c"!==e.dataset.aB)}),c.addTest("details",function(){var t,n=m("details");return"open"in n&&(C("#modernizr details{display:block}",function(e){e.appendChild(n),n.innerHTML="<summary>a</summary>b",t=n.offsetHeight,n.open=!0,t=t!=n.offsetHeight}),t)}),c.addTest("fetch","fetch"in i);var _="Moz O ms Webkit",w=t._config.usePrefixes?_.split(" "):[];t._cssomPrefixes=w;var x={elem:m("modernizr")};c._q.push(function(){delete x.elem});var T={style:x.elem.style};c._q.unshift(function(){delete T.style});var P=t._config.usePrefixes?_.toLowerCase().split(" "):[];t._domPrefixes=P,t.testAllProps=r,t.testAllProps=e;var j="CSS"in i&&"supports"in i.CSS,O="supportsCSS"in i;c.addTest("supports",j||O),c.addTest("csstransforms3d",function(){return!!e("perspective","1px",!0)}),function(){var e,t,n,r,o,i;for(var s in f)if(f.hasOwnProperty(s)){if(e=[],(t=f[s]).name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n<t.options.aliases.length;n++)e.push(t.options.aliases[n].toLowerCase());for(r=y(t.fn,"function")?t.fn():t.fn,o=0;o<e.length;o++)1===(i=e[o].split(".")).length?c[i[0]]=r:(!c[i[0]]||c[i[0]]instanceof Boolean||(c[i[0]]=new Boolean(c[i[0]])),c[i[0]][i[1]]=r),g.push((r?"":"no-")+i.join("-"))}}(),s(g),delete t.addTest,delete t.addAsyncTest;for(var z=0;z<c._q.length;z++)c._q[z]();i.Modernizr=c})(n=window,document),e.exports=n.Modernizr}})); \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/stylesheets/application-palette.224b79ff.css b/freetype/docs/reference/site/assets/stylesheets/application-palette.224b79ff.css
new file mode 100644
index 00000000..cbbb2593
--- /dev/null
+++ b/freetype/docs/reference/site/assets/stylesheets/application-palette.224b79ff.css
@@ -0,0 +1 @@
+button[data-md-color-accent],button[data-md-color-primary]{width:6.5rem;margin-bottom:.2rem;padding:1.2rem .4rem .2rem;transition:background-color .25s,opacity .25s;border-radius:.1rem;color:#fff;font-size:.64rem;text-align:left;cursor:pointer}button[data-md-color-accent]:hover,button[data-md-color-primary]:hover{opacity:.75}button[data-md-color-primary=red]{background-color:#ef5350}[data-md-color-primary=red] .md-typeset a{color:#ef5350}[data-md-color-primary=red] .md-header{background-color:#ef5350}[data-md-color-primary=red] .md-hero{background-color:#ef5350}[data-md-color-primary=red] .md-nav__link--active,[data-md-color-primary=red] .md-nav__link:active{color:#ef5350}[data-md-color-primary=red] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=pink]{background-color:#e91e63}[data-md-color-primary=pink] .md-typeset a{color:#e91e63}[data-md-color-primary=pink] .md-header{background-color:#e91e63}[data-md-color-primary=pink] .md-hero{background-color:#e91e63}[data-md-color-primary=pink] .md-nav__link--active,[data-md-color-primary=pink] .md-nav__link:active{color:#e91e63}[data-md-color-primary=pink] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=purple]{background-color:#ab47bc}[data-md-color-primary=purple] .md-typeset a{color:#ab47bc}[data-md-color-primary=purple] .md-header{background-color:#ab47bc}[data-md-color-primary=purple] .md-hero{background-color:#ab47bc}[data-md-color-primary=purple] .md-nav__link--active,[data-md-color-primary=purple] .md-nav__link:active{color:#ab47bc}[data-md-color-primary=purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-purple]{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-typeset a{color:#7e57c2}[data-md-color-primary=deep-purple] .md-header{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-hero{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__link--active,[data-md-color-primary=deep-purple] .md-nav__link:active{color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=indigo]{background-color:#3f51b5}[data-md-color-primary=indigo] .md-typeset a{color:#3f51b5}[data-md-color-primary=indigo] .md-header{background-color:#3f51b5}[data-md-color-primary=indigo] .md-hero{background-color:#3f51b5}[data-md-color-primary=indigo] .md-nav__link--active,[data-md-color-primary=indigo] .md-nav__link:active{color:#3f51b5}[data-md-color-primary=indigo] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue]{background-color:#2196f3}[data-md-color-primary=blue] .md-typeset a{color:#2196f3}[data-md-color-primary=blue] .md-header{background-color:#2196f3}[data-md-color-primary=blue] .md-hero{background-color:#2196f3}[data-md-color-primary=blue] .md-nav__link--active,[data-md-color-primary=blue] .md-nav__link:active{color:#2196f3}[data-md-color-primary=blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-blue]{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-typeset a{color:#03a9f4}[data-md-color-primary=light-blue] .md-header{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-hero{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__link--active,[data-md-color-primary=light-blue] .md-nav__link:active{color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=cyan]{background-color:#00bcd4}[data-md-color-primary=cyan] .md-typeset a{color:#00bcd4}[data-md-color-primary=cyan] .md-header{background-color:#00bcd4}[data-md-color-primary=cyan] .md-hero{background-color:#00bcd4}[data-md-color-primary=cyan] .md-nav__link--active,[data-md-color-primary=cyan] .md-nav__link:active{color:#00bcd4}[data-md-color-primary=cyan] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=teal]{background-color:#009688}[data-md-color-primary=teal] .md-typeset a{color:#009688}[data-md-color-primary=teal] .md-header{background-color:#009688}[data-md-color-primary=teal] .md-hero{background-color:#009688}[data-md-color-primary=teal] .md-nav__link--active,[data-md-color-primary=teal] .md-nav__link:active{color:#009688}[data-md-color-primary=teal] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=green]{background-color:#4caf50}[data-md-color-primary=green] .md-typeset a{color:#4caf50}[data-md-color-primary=green] .md-header{background-color:#4caf50}[data-md-color-primary=green] .md-hero{background-color:#4caf50}[data-md-color-primary=green] .md-nav__link--active,[data-md-color-primary=green] .md-nav__link:active{color:#4caf50}[data-md-color-primary=green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-green]{background-color:#7cb342}[data-md-color-primary=light-green] .md-typeset a{color:#7cb342}[data-md-color-primary=light-green] .md-header{background-color:#7cb342}[data-md-color-primary=light-green] .md-hero{background-color:#7cb342}[data-md-color-primary=light-green] .md-nav__link--active,[data-md-color-primary=light-green] .md-nav__link:active{color:#7cb342}[data-md-color-primary=light-green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=lime]{background-color:#c0ca33}[data-md-color-primary=lime] .md-typeset a{color:#c0ca33}[data-md-color-primary=lime] .md-header{background-color:#c0ca33}[data-md-color-primary=lime] .md-hero{background-color:#c0ca33}[data-md-color-primary=lime] .md-nav__link--active,[data-md-color-primary=lime] .md-nav__link:active{color:#c0ca33}[data-md-color-primary=lime] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=yellow]{background-color:#f9a825}[data-md-color-primary=yellow] .md-typeset a{color:#f9a825}[data-md-color-primary=yellow] .md-header{background-color:#f9a825}[data-md-color-primary=yellow] .md-hero{background-color:#f9a825}[data-md-color-primary=yellow] .md-nav__link--active,[data-md-color-primary=yellow] .md-nav__link:active{color:#f9a825}[data-md-color-primary=yellow] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=amber]{background-color:#ffa000}[data-md-color-primary=amber] .md-typeset a{color:#ffa000}[data-md-color-primary=amber] .md-header{background-color:#ffa000}[data-md-color-primary=amber] .md-hero{background-color:#ffa000}[data-md-color-primary=amber] .md-nav__link--active,[data-md-color-primary=amber] .md-nav__link:active{color:#ffa000}[data-md-color-primary=amber] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=orange]{background-color:#fb8c00}[data-md-color-primary=orange] .md-typeset a{color:#fb8c00}[data-md-color-primary=orange] .md-header{background-color:#fb8c00}[data-md-color-primary=orange] .md-hero{background-color:#fb8c00}[data-md-color-primary=orange] .md-nav__link--active,[data-md-color-primary=orange] .md-nav__link:active{color:#fb8c00}[data-md-color-primary=orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-orange]{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-typeset a{color:#ff7043}[data-md-color-primary=deep-orange] .md-header{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-hero{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__link--active,[data-md-color-primary=deep-orange] .md-nav__link:active{color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=brown]{background-color:#795548}[data-md-color-primary=brown] .md-typeset a{color:#795548}[data-md-color-primary=brown] .md-header{background-color:#795548}[data-md-color-primary=brown] .md-hero{background-color:#795548}[data-md-color-primary=brown] .md-nav__link--active,[data-md-color-primary=brown] .md-nav__link:active{color:#795548}[data-md-color-primary=brown] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=grey]{background-color:#757575}[data-md-color-primary=grey] .md-typeset a{color:#757575}[data-md-color-primary=grey] .md-header{background-color:#757575}[data-md-color-primary=grey] .md-hero{background-color:#757575}[data-md-color-primary=grey] .md-nav__link--active,[data-md-color-primary=grey] .md-nav__link:active{color:#757575}[data-md-color-primary=grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue-grey]{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-typeset a{color:#546e7a}[data-md-color-primary=blue-grey] .md-header{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-hero{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__link--active,[data-md-color-primary=blue-grey] .md-nav__link:active{color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=white]{background-color:#fff;color:rgba(0,0,0,.87);box-shadow:inset 0 0 .05rem rgba(0,0,0,.54)}[data-md-color-primary=white] .md-header{background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=white] .md-hero{background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=white] .md-hero--expand{border-bottom:.05rem solid rgba(0,0,0,.07)}button[data-md-color-accent=red]{background-color:#ff1744}[data-md-color-accent=red] .md-typeset a:active,[data-md-color-accent=red] .md-typeset a:hover{color:#ff1744}[data-md-color-accent=red] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=red] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-typeset .md-clipboard:active:before,[data-md-color-accent=red] .md-typeset .md-clipboard:hover:before{color:#ff1744}[data-md-color-accent=red] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=red] .md-typeset .footnote li:target .footnote-backref{color:#ff1744}[data-md-color-accent=red] .md-typeset [id] .headerlink:focus,[data-md-color-accent=red] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=red] .md-typeset [id]:target .headerlink{color:#ff1744}[data-md-color-accent=red] .md-nav__link:focus,[data-md-color-accent=red] .md-nav__link:hover{color:#ff1744}[data-md-color-accent=red] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-search-result__link:hover,[data-md-color-accent=red] .md-search-result__link[data-md-state=active]{background-color:rgba(255,23,68,.1)}[data-md-color-accent=red] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-source-file:hover:before{background-color:#ff1744}button[data-md-color-accent=pink]{background-color:#f50057}[data-md-color-accent=pink] .md-typeset a:active,[data-md-color-accent=pink] .md-typeset a:hover{color:#f50057}[data-md-color-accent=pink] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=pink] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-typeset .md-clipboard:active:before,[data-md-color-accent=pink] .md-typeset .md-clipboard:hover:before{color:#f50057}[data-md-color-accent=pink] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=pink] .md-typeset .footnote li:target .footnote-backref{color:#f50057}[data-md-color-accent=pink] .md-typeset [id] .headerlink:focus,[data-md-color-accent=pink] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=pink] .md-typeset [id]:target .headerlink{color:#f50057}[data-md-color-accent=pink] .md-nav__link:focus,[data-md-color-accent=pink] .md-nav__link:hover{color:#f50057}[data-md-color-accent=pink] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-search-result__link:hover,[data-md-color-accent=pink] .md-search-result__link[data-md-state=active]{background-color:rgba(245,0,87,.1)}[data-md-color-accent=pink] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-source-file:hover:before{background-color:#f50057}button[data-md-color-accent=purple]{background-color:#e040fb}[data-md-color-accent=purple] .md-typeset a:active,[data-md-color-accent=purple] .md-typeset a:hover{color:#e040fb}[data-md-color-accent=purple] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=purple] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-typeset .md-clipboard:active:before,[data-md-color-accent=purple] .md-typeset .md-clipboard:hover:before{color:#e040fb}[data-md-color-accent=purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=purple] .md-typeset .footnote li:target .footnote-backref{color:#e040fb}[data-md-color-accent=purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=purple] .md-typeset [id]:target .headerlink{color:#e040fb}[data-md-color-accent=purple] .md-nav__link:focus,[data-md-color-accent=purple] .md-nav__link:hover{color:#e040fb}[data-md-color-accent=purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-search-result__link:hover,[data-md-color-accent=purple] .md-search-result__link[data-md-state=active]{background-color:rgba(224,64,251,.1)}[data-md-color-accent=purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-source-file:hover:before{background-color:#e040fb}button[data-md-color-accent=deep-purple]{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset a:active,[data-md-color-accent=deep-purple] .md-typeset a:hover{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-purple] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .md-clipboard:active:before,[data-md-color-accent=deep-purple] .md-typeset .md-clipboard:hover:before{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:target .footnote-backref{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-purple] .md-typeset [id]:target .headerlink{color:#7c4dff}[data-md-color-accent=deep-purple] .md-nav__link:focus,[data-md-color-accent=deep-purple] .md-nav__link:hover{color:#7c4dff}[data-md-color-accent=deep-purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-search-result__link:hover,[data-md-color-accent=deep-purple] .md-search-result__link[data-md-state=active]{background-color:rgba(124,77,255,.1)}[data-md-color-accent=deep-purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-source-file:hover:before{background-color:#7c4dff}button[data-md-color-accent=indigo]{background-color:#536dfe}[data-md-color-accent=indigo] .md-typeset a:active,[data-md-color-accent=indigo] .md-typeset a:hover{color:#536dfe}[data-md-color-accent=indigo] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=indigo] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-typeset .md-clipboard:active:before,[data-md-color-accent=indigo] .md-typeset .md-clipboard:hover:before{color:#536dfe}[data-md-color-accent=indigo] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:target .footnote-backref{color:#536dfe}[data-md-color-accent=indigo] .md-typeset [id] .headerlink:focus,[data-md-color-accent=indigo] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=indigo] .md-typeset [id]:target .headerlink{color:#536dfe}[data-md-color-accent=indigo] .md-nav__link:focus,[data-md-color-accent=indigo] .md-nav__link:hover{color:#536dfe}[data-md-color-accent=indigo] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-search-result__link:hover,[data-md-color-accent=indigo] .md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}[data-md-color-accent=indigo] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-source-file:hover:before{background-color:#536dfe}button[data-md-color-accent=blue]{background-color:#448aff}[data-md-color-accent=blue] .md-typeset a:active,[data-md-color-accent=blue] .md-typeset a:hover{color:#448aff}[data-md-color-accent=blue] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=blue] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-typeset .md-clipboard:active:before,[data-md-color-accent=blue] .md-typeset .md-clipboard:hover:before{color:#448aff}[data-md-color-accent=blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=blue] .md-typeset .footnote li:target .footnote-backref{color:#448aff}[data-md-color-accent=blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=blue] .md-typeset [id]:target .headerlink{color:#448aff}[data-md-color-accent=blue] .md-nav__link:focus,[data-md-color-accent=blue] .md-nav__link:hover{color:#448aff}[data-md-color-accent=blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-search-result__link:hover,[data-md-color-accent=blue] .md-search-result__link[data-md-state=active]{background-color:rgba(68,138,255,.1)}[data-md-color-accent=blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-source-file:hover:before{background-color:#448aff}button[data-md-color-accent=light-blue]{background-color:#0091ea}[data-md-color-accent=light-blue] .md-typeset a:active,[data-md-color-accent=light-blue] .md-typeset a:hover{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-blue] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .md-clipboard:active:before,[data-md-color-accent=light-blue] .md-typeset .md-clipboard:hover:before{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:target .footnote-backref{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-blue] .md-typeset [id]:target .headerlink{color:#0091ea}[data-md-color-accent=light-blue] .md-nav__link:focus,[data-md-color-accent=light-blue] .md-nav__link:hover{color:#0091ea}[data-md-color-accent=light-blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-search-result__link:hover,[data-md-color-accent=light-blue] .md-search-result__link[data-md-state=active]{background-color:rgba(0,145,234,.1)}[data-md-color-accent=light-blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-source-file:hover:before{background-color:#0091ea}button[data-md-color-accent=cyan]{background-color:#00b8d4}[data-md-color-accent=cyan] .md-typeset a:active,[data-md-color-accent=cyan] .md-typeset a:hover{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=cyan] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .md-clipboard:active:before,[data-md-color-accent=cyan] .md-typeset .md-clipboard:hover:before{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:target .footnote-backref{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset [id] .headerlink:focus,[data-md-color-accent=cyan] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=cyan] .md-typeset [id]:target .headerlink{color:#00b8d4}[data-md-color-accent=cyan] .md-nav__link:focus,[data-md-color-accent=cyan] .md-nav__link:hover{color:#00b8d4}[data-md-color-accent=cyan] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-search-result__link:hover,[data-md-color-accent=cyan] .md-search-result__link[data-md-state=active]{background-color:rgba(0,184,212,.1)}[data-md-color-accent=cyan] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-source-file:hover:before{background-color:#00b8d4}button[data-md-color-accent=teal]{background-color:#00bfa5}[data-md-color-accent=teal] .md-typeset a:active,[data-md-color-accent=teal] .md-typeset a:hover{color:#00bfa5}[data-md-color-accent=teal] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=teal] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-typeset .md-clipboard:active:before,[data-md-color-accent=teal] .md-typeset .md-clipboard:hover:before{color:#00bfa5}[data-md-color-accent=teal] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=teal] .md-typeset .footnote li:target .footnote-backref{color:#00bfa5}[data-md-color-accent=teal] .md-typeset [id] .headerlink:focus,[data-md-color-accent=teal] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=teal] .md-typeset [id]:target .headerlink{color:#00bfa5}[data-md-color-accent=teal] .md-nav__link:focus,[data-md-color-accent=teal] .md-nav__link:hover{color:#00bfa5}[data-md-color-accent=teal] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-search-result__link:hover,[data-md-color-accent=teal] .md-search-result__link[data-md-state=active]{background-color:rgba(0,191,165,.1)}[data-md-color-accent=teal] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-source-file:hover:before{background-color:#00bfa5}button[data-md-color-accent=green]{background-color:#00c853}[data-md-color-accent=green] .md-typeset a:active,[data-md-color-accent=green] .md-typeset a:hover{color:#00c853}[data-md-color-accent=green] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=green] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-typeset .md-clipboard:active:before,[data-md-color-accent=green] .md-typeset .md-clipboard:hover:before{color:#00c853}[data-md-color-accent=green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=green] .md-typeset .footnote li:target .footnote-backref{color:#00c853}[data-md-color-accent=green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=green] .md-typeset [id]:target .headerlink{color:#00c853}[data-md-color-accent=green] .md-nav__link:focus,[data-md-color-accent=green] .md-nav__link:hover{color:#00c853}[data-md-color-accent=green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-search-result__link:hover,[data-md-color-accent=green] .md-search-result__link[data-md-state=active]{background-color:rgba(0,200,83,.1)}[data-md-color-accent=green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-source-file:hover:before{background-color:#00c853}button[data-md-color-accent=light-green]{background-color:#64dd17}[data-md-color-accent=light-green] .md-typeset a:active,[data-md-color-accent=light-green] .md-typeset a:hover{color:#64dd17}[data-md-color-accent=light-green] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-green] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-typeset .md-clipboard:active:before,[data-md-color-accent=light-green] .md-typeset .md-clipboard:hover:before{color:#64dd17}[data-md-color-accent=light-green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:target .footnote-backref{color:#64dd17}[data-md-color-accent=light-green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-green] .md-typeset [id]:target .headerlink{color:#64dd17}[data-md-color-accent=light-green] .md-nav__link:focus,[data-md-color-accent=light-green] .md-nav__link:hover{color:#64dd17}[data-md-color-accent=light-green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-search-result__link:hover,[data-md-color-accent=light-green] .md-search-result__link[data-md-state=active]{background-color:rgba(100,221,23,.1)}[data-md-color-accent=light-green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-source-file:hover:before{background-color:#64dd17}button[data-md-color-accent=lime]{background-color:#aeea00}[data-md-color-accent=lime] .md-typeset a:active,[data-md-color-accent=lime] .md-typeset a:hover{color:#aeea00}[data-md-color-accent=lime] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=lime] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-typeset .md-clipboard:active:before,[data-md-color-accent=lime] .md-typeset .md-clipboard:hover:before{color:#aeea00}[data-md-color-accent=lime] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=lime] .md-typeset .footnote li:target .footnote-backref{color:#aeea00}[data-md-color-accent=lime] .md-typeset [id] .headerlink:focus,[data-md-color-accent=lime] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=lime] .md-typeset [id]:target .headerlink{color:#aeea00}[data-md-color-accent=lime] .md-nav__link:focus,[data-md-color-accent=lime] .md-nav__link:hover{color:#aeea00}[data-md-color-accent=lime] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-search-result__link:hover,[data-md-color-accent=lime] .md-search-result__link[data-md-state=active]{background-color:rgba(174,234,0,.1)}[data-md-color-accent=lime] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-source-file:hover:before{background-color:#aeea00}button[data-md-color-accent=yellow]{background-color:#ffd600}[data-md-color-accent=yellow] .md-typeset a:active,[data-md-color-accent=yellow] .md-typeset a:hover{color:#ffd600}[data-md-color-accent=yellow] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=yellow] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-typeset .md-clipboard:active:before,[data-md-color-accent=yellow] .md-typeset .md-clipboard:hover:before{color:#ffd600}[data-md-color-accent=yellow] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:target .footnote-backref{color:#ffd600}[data-md-color-accent=yellow] .md-typeset [id] .headerlink:focus,[data-md-color-accent=yellow] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=yellow] .md-typeset [id]:target .headerlink{color:#ffd600}[data-md-color-accent=yellow] .md-nav__link:focus,[data-md-color-accent=yellow] .md-nav__link:hover{color:#ffd600}[data-md-color-accent=yellow] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-search-result__link:hover,[data-md-color-accent=yellow] .md-search-result__link[data-md-state=active]{background-color:rgba(255,214,0,.1)}[data-md-color-accent=yellow] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-source-file:hover:before{background-color:#ffd600}button[data-md-color-accent=amber]{background-color:#ffab00}[data-md-color-accent=amber] .md-typeset a:active,[data-md-color-accent=amber] .md-typeset a:hover{color:#ffab00}[data-md-color-accent=amber] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=amber] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-typeset .md-clipboard:active:before,[data-md-color-accent=amber] .md-typeset .md-clipboard:hover:before{color:#ffab00}[data-md-color-accent=amber] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=amber] .md-typeset .footnote li:target .footnote-backref{color:#ffab00}[data-md-color-accent=amber] .md-typeset [id] .headerlink:focus,[data-md-color-accent=amber] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=amber] .md-typeset [id]:target .headerlink{color:#ffab00}[data-md-color-accent=amber] .md-nav__link:focus,[data-md-color-accent=amber] .md-nav__link:hover{color:#ffab00}[data-md-color-accent=amber] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-search-result__link:hover,[data-md-color-accent=amber] .md-search-result__link[data-md-state=active]{background-color:rgba(255,171,0,.1)}[data-md-color-accent=amber] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-source-file:hover:before{background-color:#ffab00}button[data-md-color-accent=orange]{background-color:#ff9100}[data-md-color-accent=orange] .md-typeset a:active,[data-md-color-accent=orange] .md-typeset a:hover{color:#ff9100}[data-md-color-accent=orange] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=orange] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-typeset .md-clipboard:active:before,[data-md-color-accent=orange] .md-typeset .md-clipboard:hover:before{color:#ff9100}[data-md-color-accent=orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=orange] .md-typeset .footnote li:target .footnote-backref{color:#ff9100}[data-md-color-accent=orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=orange] .md-typeset [id]:target .headerlink{color:#ff9100}[data-md-color-accent=orange] .md-nav__link:focus,[data-md-color-accent=orange] .md-nav__link:hover{color:#ff9100}[data-md-color-accent=orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-search-result__link:hover,[data-md-color-accent=orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,145,0,.1)}[data-md-color-accent=orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-source-file:hover:before{background-color:#ff9100}button[data-md-color-accent=deep-orange]{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset a:active,[data-md-color-accent=deep-orange] .md-typeset a:hover{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-orange] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .md-clipboard:active:before,[data-md-color-accent=deep-orange] .md-typeset .md-clipboard:hover:before{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:target .footnote-backref{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-orange] .md-typeset [id]:target .headerlink{color:#ff6e40}[data-md-color-accent=deep-orange] .md-nav__link:focus,[data-md-color-accent=deep-orange] .md-nav__link:hover{color:#ff6e40}[data-md-color-accent=deep-orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-search-result__link:hover,[data-md-color-accent=deep-orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,110,64,.1)}[data-md-color-accent=deep-orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-source-file:hover:before{background-color:#ff6e40}@media only screen and (max-width:59.9375em){[data-md-color-primary=red] .md-nav__source{background-color:rgba(190,66,64,.9675)}[data-md-color-primary=pink] .md-nav__source{background-color:rgba(185,24,79,.9675)}[data-md-color-primary=purple] .md-nav__source{background-color:rgba(136,57,150,.9675)}[data-md-color-primary=deep-purple] .md-nav__source{background-color:rgba(100,69,154,.9675)}[data-md-color-primary=indigo] .md-nav__source{background-color:rgba(50,64,144,.9675)}[data-md-color-primary=blue] .md-nav__source{background-color:rgba(26,119,193,.9675)}[data-md-color-primary=light-blue] .md-nav__source{background-color:rgba(2,134,194,.9675)}[data-md-color-primary=cyan] .md-nav__source{background-color:rgba(0,150,169,.9675)}[data-md-color-primary=teal] .md-nav__source{background-color:rgba(0,119,108,.9675)}[data-md-color-primary=green] .md-nav__source{background-color:rgba(60,139,64,.9675)}[data-md-color-primary=light-green] .md-nav__source{background-color:rgba(99,142,53,.9675)}[data-md-color-primary=lime] .md-nav__source{background-color:rgba(153,161,41,.9675)}[data-md-color-primary=yellow] .md-nav__source{background-color:rgba(198,134,29,.9675)}[data-md-color-primary=amber] .md-nav__source{background-color:rgba(203,127,0,.9675)}[data-md-color-primary=orange] .md-nav__source{background-color:rgba(200,111,0,.9675)}[data-md-color-primary=deep-orange] .md-nav__source{background-color:rgba(203,89,53,.9675)}[data-md-color-primary=brown] .md-nav__source{background-color:rgba(96,68,57,.9675)}[data-md-color-primary=grey] .md-nav__source{background-color:rgba(93,93,93,.9675)}[data-md-color-primary=blue-grey] .md-nav__source{background-color:rgba(67,88,97,.9675)}[data-md-color-primary=white] .md-nav__source{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.87)}}@media only screen and (max-width:76.1875em){html [data-md-color-primary=red] .md-nav--primary .md-nav__title--site{background-color:#ef5350}html [data-md-color-primary=pink] .md-nav--primary .md-nav__title--site{background-color:#e91e63}html [data-md-color-primary=purple] .md-nav--primary .md-nav__title--site{background-color:#ab47bc}html [data-md-color-primary=deep-purple] .md-nav--primary .md-nav__title--site{background-color:#7e57c2}html [data-md-color-primary=indigo] .md-nav--primary .md-nav__title--site{background-color:#3f51b5}html [data-md-color-primary=blue] .md-nav--primary .md-nav__title--site{background-color:#2196f3}html [data-md-color-primary=light-blue] .md-nav--primary .md-nav__title--site{background-color:#03a9f4}html [data-md-color-primary=cyan] .md-nav--primary .md-nav__title--site{background-color:#00bcd4}html [data-md-color-primary=teal] .md-nav--primary .md-nav__title--site{background-color:#009688}html [data-md-color-primary=green] .md-nav--primary .md-nav__title--site{background-color:#4caf50}html [data-md-color-primary=light-green] .md-nav--primary .md-nav__title--site{background-color:#7cb342}html [data-md-color-primary=lime] .md-nav--primary .md-nav__title--site{background-color:#c0ca33}html [data-md-color-primary=yellow] .md-nav--primary .md-nav__title--site{background-color:#f9a825}html [data-md-color-primary=amber] .md-nav--primary .md-nav__title--site{background-color:#ffa000}html [data-md-color-primary=orange] .md-nav--primary .md-nav__title--site{background-color:#fb8c00}html [data-md-color-primary=deep-orange] .md-nav--primary .md-nav__title--site{background-color:#ff7043}html [data-md-color-primary=brown] .md-nav--primary .md-nav__title--site{background-color:#795548}html [data-md-color-primary=grey] .md-nav--primary .md-nav__title--site{background-color:#757575}html [data-md-color-primary=blue-grey] .md-nav--primary .md-nav__title--site{background-color:#546e7a}html [data-md-color-primary=white] .md-nav--primary .md-nav__title--site{background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=white] .md-hero{border-bottom:.05rem solid rgba(0,0,0,.07)}}@media only screen and (min-width:76.25em){[data-md-color-primary=red] .md-tabs{background-color:#ef5350}[data-md-color-primary=pink] .md-tabs{background-color:#e91e63}[data-md-color-primary=purple] .md-tabs{background-color:#ab47bc}[data-md-color-primary=deep-purple] .md-tabs{background-color:#7e57c2}[data-md-color-primary=indigo] .md-tabs{background-color:#3f51b5}[data-md-color-primary=blue] .md-tabs{background-color:#2196f3}[data-md-color-primary=light-blue] .md-tabs{background-color:#03a9f4}[data-md-color-primary=cyan] .md-tabs{background-color:#00bcd4}[data-md-color-primary=teal] .md-tabs{background-color:#009688}[data-md-color-primary=green] .md-tabs{background-color:#4caf50}[data-md-color-primary=light-green] .md-tabs{background-color:#7cb342}[data-md-color-primary=lime] .md-tabs{background-color:#c0ca33}[data-md-color-primary=yellow] .md-tabs{background-color:#f9a825}[data-md-color-primary=amber] .md-tabs{background-color:#ffa000}[data-md-color-primary=orange] .md-tabs{background-color:#fb8c00}[data-md-color-primary=deep-orange] .md-tabs{background-color:#ff7043}[data-md-color-primary=brown] .md-tabs{background-color:#795548}[data-md-color-primary=grey] .md-tabs{background-color:#757575}[data-md-color-primary=blue-grey] .md-tabs{background-color:#546e7a}[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07);background-color:#fff;color:rgba(0,0,0,.87)}}@media only screen and (min-width:60em){[data-md-color-primary=white] .md-search__input{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input::placeholder{color:rgba(0,0,0,.54)}} \ No newline at end of file
diff --git a/freetype/docs/reference/site/assets/stylesheets/application.982221ab.css b/freetype/docs/reference/site/assets/stylesheets/application.982221ab.css
new file mode 100644
index 00000000..a3762caf
--- /dev/null
+++ b/freetype/docs/reference/site/assets/stylesheets/application.982221ab.css
@@ -0,0 +1 @@
+@charset "UTF-8";html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small,sub,sup{font-size:80%}sub,sup{position:relative;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{margin:0;padding:0;border:0;outline-style:none;background:transparent;font-size:inherit}input{border:0;outline:0}.md-clipboard:before,.md-icon,.md-nav__button,.md-nav__link:after,.md-nav__title:before,.md-search-result__article--document:before,.md-source-file:before,.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before,.md-typeset summary:after{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__icon,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before,.md-search-result__article--document:before{display:inline-block;margin:.2rem;padding:.4rem;font-size:1.2rem;cursor:pointer}.md-icon--arrow-back:before{content:""}.md-icon--arrow-forward:before{content:""}.md-icon--menu:before{content:""}.md-icon--search:before{content:""}[dir=rtl] .md-icon--arrow-back:before{content:""}[dir=rtl] .md-icon--arrow-forward:before{content:""}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code,kbd,pre{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:Courier New,Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:rgba(0,0,0,.54);font-size:1.5625rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{font-size:.8rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:.8rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,92.5%,.5);color:#37474f;font-size:85%;direction:ltr}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.1rem;box-shadow:.29412em 0 0 hsla(0,0%,92.5%,.5),-.29412em 0 0 hsla(0,0%,92.5%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:none;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:none;box-decoration-break:none;overflow:auto}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset kbd{padding:0 .29412em;border-radius:.15rem;border:.05rem solid #c9c9c9;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .05rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted rgba(0,0,0,.54);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.07812em;margin-left:0}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:0;border-right:.2rem solid rgba(0,0,0,.26);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em;margin-left:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em;margin-left:0}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em;margin-left:0}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:0}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:inline-block;max-width:100%;border-radius:.1rem;font-size:.64rem;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color .125s}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 0 .05rem 0 #fff}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{font-size:125%;overflow-x:hidden}body,html{height:100%}body{position:relative;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;padding-top:2.4rem;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:3}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-skip{position:fixed;width:.05rem;height:.05rem;margin:.5rem;padding:.3rem .5rem;clip:rect(.05rem);-webkit-transform:translateY(.4rem);transform:translateY(.4rem);border-radius:.1rem;background-color:rgba(0,0,0,.87);color:#fff;font-size:.64rem;opacity:0;overflow:hidden}.md-skip:focus{width:auto;height:auto;clip:auto;-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;z-index:10}@page{margin:25mm}.md-clipboard{position:absolute;top:.3rem;right:.3rem;width:1.4rem;height:1.4rem;border-radius:.1rem;font-size:.8rem;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard:before{transition:color .25s,opacity .25s;color:rgba(0,0,0,.07);content:"\E14D"}.codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before{color:rgba(0,0,0,.54)}.md-clipboard:focus:before,.md-clipboard:hover:before{color:#536dfe}.md-clipboard__message{display:block;position:absolute;top:0;right:1.7rem;padding:.3rem .5rem;-webkit-transform:translateX(.4rem);transform:translateX(.4rem);transition:opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s;transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);border-radius:.1rem;background-color:rgba(0,0,0,.54);color:#fff;font-size:.64rem;white-space:nowrap;opacity:0;pointer-events:none}.md-clipboard__message--active{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;pointer-events:auto}.md-clipboard__message:before{content:attr(aria-label)}.md-clipboard__message:after{display:block;position:absolute;top:50%;right:-.2rem;width:0;margin-top:-.2rem;border-color:transparent rgba(0,0,0,.54);border-style:solid;border-width:.2rem 0 .2rem .2rem;content:""}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner:before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__icon{position:relative;margin:.4rem 0;padding:0;float:right}.md-typeset .md-content__icon{color:rgba(0,0,0,.26)}.md-header{position:fixed;top:0;right:0;left:0;height:2.4rem;transition:background-color .25s,color .25s;background-color:#3f51b5;color:#fff;box-shadow:none;z-index:2;-webkit-backface-visibility:hidden;backface-visibility:hidden}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color .25s,color .25s,box-shadow .25s;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{padding:0 .2rem}.md-header-nav__button{position:relative;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo *{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__topic{display:block;position:absolute;transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:static}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:1;z-index:0;pointer-events:auto}.md-header-nav__source{display:none}.md-hero{transition:background .25s;background-color:#3f51b5;color:#fff;font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition-delay:.1s}[data-md-state=hidden] .md-hero__inner{pointer-events:none;-webkit-transform:translateY(.625rem);transform:translateY(.625rem);transition:opacity .1s 0s,-webkit-transform 0s .4s;transition:transform 0s .4s,opacity .1s 0s;transition:transform 0s .4s,opacity .1s 0s,-webkit-transform 0s .4s;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{padding-top:1.4rem;padding-bottom:.4rem;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}.md-footer-nav__button{transition:background .25s}.md-footer-nav__title{position:relative;padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:hsla(0,0%,100%,.7);font-size:.75rem}.md-footer-meta{background-color:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:#fff}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:hsla(0,0%,100%,.3);font-size:.64rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;font-size:.8rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"\E5C4"}[dir=rtl] .md-nav__title:before{content:"\E5C8"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;margin-top:.625em;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"\E313"}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}html .md-nav__link[for=__toc]+.md-nav__link:after{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input:-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-webkit-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input:-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;font-size:1.2rem;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:auto}.md-search__icon[for=__search]:before{content:"\E8B6"}.md-search__icon[type=reset]{top:.3rem;right:.5rem;-webkit-transform:scale(.125);transform:scale(.125);transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);opacity:0}[dir=rtl] .md-search__icon[type=reset]{right:auto;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{-webkit-transform:scale(1);transform:scale(1);opacity:1}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result{color:rgba(0,0,0,.87);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.8rem}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.05rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;transition:background .25s;outline:0;overflow:hidden}.md-search-result__link:hover,.md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}.md-search-result__link:hover .md-search-result__article:before,.md-search-result__link[data-md-state=active] .md-search-result__article:before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document:before{position:absolute;left:0;margin:.1rem;transition:opacity .25s;color:rgba(0,0,0,.54);content:"\E880"}[dir=rtl] .md-search-result__article--document:before{right:0;left:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;padding-right:.6rem;transition:opacity .25s;font-size:.65rem;line-height:1.2;white-space:nowrap}[dir=rtl] .md-source{padding-right:0;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source:after{display:inline-block;height:2.4rem;content:"";vertical-align:middle}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;content:"";vertical-align:middle}.md-source__icon svg{width:1.2rem;height:1.2rem;margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:0}.md-source__icon+.md-source__repository{margin-left:-2.2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2.2rem;margin-left:0;padding-right:2rem;padding-left:0}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done .25s ease-in;animation:md-source__facts--done .25s ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done .4s ease-out;animation:md-source__fact--done .4s ease-out}.md-source__fact:before{margin:0 .1rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.md-source-file{display:inline-block;margin:1em .5em 1em 0;padding-right:.25rem;border-radius:.1rem;background-color:rgba(0,0,0,.07);font-size:.64rem;list-style-type:none;cursor:pointer;overflow:hidden}.md-source-file:before{display:inline-block;margin-right:.25rem;padding:.25rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:.8rem;content:"\E86F";vertical-align:middle}html .md-source-file{transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1)}html .md-source-file:before{transition:inherit}html body .md-typeset .md-source-file{color:rgba(0,0,0,.54)}.md-source-file:hover{box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36)}.md-source-file:hover:before{background-color:#536dfe}.md-tabs{width:100%;transition:background .25s;background-color:#3f51b5;color:#fff;overflow:auto}.md-tabs__list{margin:0 0 0 .2rem;padding:0;list-style:none;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);font-size:.7rem;opacity:.7}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:.02s}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:.04s}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:.06s}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:.08s}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{-webkit-transform:translateY(50%);transform:translateY(50%);transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,transform 0s .4s,opacity .1s;transition:color .25s,transform 0s .4s,opacity .1s,-webkit-transform 0s .4s;opacity:0}.md-typeset .admonition,.md-typeset details{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin:1em 0}.md-typeset .admonition>.admonition-title,.md-typeset .admonition>summary,.md-typeset details>.admonition-title,.md-typeset details>summary{margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;border-bottom:.05rem solid rgba(68,138,255,.1);background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition>.admonition-title,[dir=rtl] .md-typeset .admonition>summary,[dir=rtl] .md-typeset details>.admonition-title,[dir=rtl] .md-typeset details>summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition>.admonition-title:last-child,.md-typeset .admonition>summary:last-child,.md-typeset details>.admonition-title:last-child,.md-typeset details>summary:last-child{margin-bottom:0}.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before{position:absolute;left:.6rem;color:#448aff;font-size:1rem;content:"\E3C9"}[dir=rtl] .md-typeset .admonition>.admonition-title:before,[dir=rtl] .md-typeset .admonition>summary:before,[dir=rtl] .md-typeset details>.admonition-title:before,[dir=rtl] .md-typeset details>summary:before{right:.6rem;left:auto}.md-typeset .admonition.abstract,.md-typeset .admonition.summary,.md-typeset .admonition.tldr,.md-typeset details.abstract,.md-typeset details.summary,.md-typeset details.tldr{border-left-color:#00b0ff}[dir=rtl] .md-typeset .admonition.abstract,[dir=rtl] .md-typeset .admonition.summary,[dir=rtl] .md-typeset .admonition.tldr,[dir=rtl] .md-typeset details.abstract,[dir=rtl] .md-typeset details.summary,[dir=rtl] .md-typeset details.tldr{border-right-color:#00b0ff}.md-typeset .admonition.abstract>.admonition-title,.md-typeset .admonition.abstract>summary,.md-typeset .admonition.summary>.admonition-title,.md-typeset .admonition.summary>summary,.md-typeset .admonition.tldr>.admonition-title,.md-typeset .admonition.tldr>summary,.md-typeset details.abstract>.admonition-title,.md-typeset details.abstract>summary,.md-typeset details.summary>.admonition-title,.md-typeset details.summary>summary,.md-typeset details.tldr>.admonition-title,.md-typeset details.tldr>summary{border-bottom-color:.05rem solid rgba(0,176,255,.1);background-color:rgba(0,176,255,.1)}.md-typeset .admonition.abstract>.admonition-title:before,.md-typeset .admonition.abstract>summary:before,.md-typeset .admonition.summary>.admonition-title:before,.md-typeset .admonition.summary>summary:before,.md-typeset .admonition.tldr>.admonition-title:before,.md-typeset .admonition.tldr>summary:before,.md-typeset details.abstract>.admonition-title:before,.md-typeset details.abstract>summary:before,.md-typeset details.summary>.admonition-title:before,.md-typeset details.summary>summary:before,.md-typeset details.tldr>.admonition-title:before,.md-typeset details.tldr>summary:before{color:#00b0ff;content:""}.md-typeset .admonition.info,.md-typeset .admonition.todo,.md-typeset details.info,.md-typeset details.todo{border-left-color:#00b8d4}[dir=rtl] .md-typeset .admonition.info,[dir=rtl] .md-typeset .admonition.todo,[dir=rtl] .md-typeset details.info,[dir=rtl] .md-typeset details.todo{border-right-color:#00b8d4}.md-typeset .admonition.info>.admonition-title,.md-typeset .admonition.info>summary,.md-typeset .admonition.todo>.admonition-title,.md-typeset .admonition.todo>summary,.md-typeset details.info>.admonition-title,.md-typeset details.info>summary,.md-typeset details.todo>.admonition-title,.md-typeset details.todo>summary{border-bottom-color:.05rem solid rgba(0,184,212,.1);background-color:rgba(0,184,212,.1)}.md-typeset .admonition.info>.admonition-title:before,.md-typeset .admonition.info>summary:before,.md-typeset .admonition.todo>.admonition-title:before,.md-typeset .admonition.todo>summary:before,.md-typeset details.info>.admonition-title:before,.md-typeset details.info>summary:before,.md-typeset details.todo>.admonition-title:before,.md-typeset details.todo>summary:before{color:#00b8d4;content:""}.md-typeset .admonition.hint,.md-typeset .admonition.important,.md-typeset .admonition.tip,.md-typeset details.hint,.md-typeset details.important,.md-typeset details.tip{border-left-color:#00bfa5}[dir=rtl] .md-typeset .admonition.hint,[dir=rtl] .md-typeset .admonition.important,[dir=rtl] .md-typeset .admonition.tip,[dir=rtl] .md-typeset details.hint,[dir=rtl] .md-typeset details.important,[dir=rtl] .md-typeset details.tip{border-right-color:#00bfa5}.md-typeset .admonition.hint>.admonition-title,.md-typeset .admonition.hint>summary,.md-typeset .admonition.important>.admonition-title,.md-typeset .admonition.important>summary,.md-typeset .admonition.tip>.admonition-title,.md-typeset .admonition.tip>summary,.md-typeset details.hint>.admonition-title,.md-typeset details.hint>summary,.md-typeset details.important>.admonition-title,.md-typeset details.important>summary,.md-typeset details.tip>.admonition-title,.md-typeset details.tip>summary{border-bottom-color:.05rem solid rgba(0,191,165,.1);background-color:rgba(0,191,165,.1)}.md-typeset .admonition.hint>.admonition-title:before,.md-typeset .admonition.hint>summary:before,.md-typeset .admonition.important>.admonition-title:before,.md-typeset .admonition.important>summary:before,.md-typeset .admonition.tip>.admonition-title:before,.md-typeset .admonition.tip>summary:before,.md-typeset details.hint>.admonition-title:before,.md-typeset details.hint>summary:before,.md-typeset details.important>.admonition-title:before,.md-typeset details.important>summary:before,.md-typeset details.tip>.admonition-title:before,.md-typeset details.tip>summary:before{color:#00bfa5;content:""}.md-typeset .admonition.check,.md-typeset .admonition.done,.md-typeset .admonition.success,.md-typeset details.check,.md-typeset details.done,.md-typeset details.success{border-left-color:#00c853}[dir=rtl] .md-typeset .admonition.check,[dir=rtl] .md-typeset .admonition.done,[dir=rtl] .md-typeset .admonition.success,[dir=rtl] .md-typeset details.check,[dir=rtl] .md-typeset details.done,[dir=rtl] .md-typeset details.success{border-right-color:#00c853}.md-typeset .admonition.check>.admonition-title,.md-typeset .admonition.check>summary,.md-typeset .admonition.done>.admonition-title,.md-typeset .admonition.done>summary,.md-typeset .admonition.success>.admonition-title,.md-typeset .admonition.success>summary,.md-typeset details.check>.admonition-title,.md-typeset details.check>summary,.md-typeset details.done>.admonition-title,.md-typeset details.done>summary,.md-typeset details.success>.admonition-title,.md-typeset details.success>summary{border-bottom-color:.05rem solid rgba(0,200,83,.1);background-color:rgba(0,200,83,.1)}.md-typeset .admonition.check>.admonition-title:before,.md-typeset .admonition.check>summary:before,.md-typeset .admonition.done>.admonition-title:before,.md-typeset .admonition.done>summary:before,.md-typeset .admonition.success>.admonition-title:before,.md-typeset .admonition.success>summary:before,.md-typeset details.check>.admonition-title:before,.md-typeset details.check>summary:before,.md-typeset details.done>.admonition-title:before,.md-typeset details.done>summary:before,.md-typeset details.success>.admonition-title:before,.md-typeset details.success>summary:before{color:#00c853;content:""}.md-typeset .admonition.faq,.md-typeset .admonition.help,.md-typeset .admonition.question,.md-typeset details.faq,.md-typeset details.help,.md-typeset details.question{border-left-color:#64dd17}[dir=rtl] .md-typeset .admonition.faq,[dir=rtl] .md-typeset .admonition.help,[dir=rtl] .md-typeset .admonition.question,[dir=rtl] .md-typeset details.faq,[dir=rtl] .md-typeset details.help,[dir=rtl] .md-typeset details.question{border-right-color:#64dd17}.md-typeset .admonition.faq>.admonition-title,.md-typeset .admonition.faq>summary,.md-typeset .admonition.help>.admonition-title,.md-typeset .admonition.help>summary,.md-typeset .admonition.question>.admonition-title,.md-typeset .admonition.question>summary,.md-typeset details.faq>.admonition-title,.md-typeset details.faq>summary,.md-typeset details.help>.admonition-title,.md-typeset details.help>summary,.md-typeset details.question>.admonition-title,.md-typeset details.question>summary{border-bottom-color:.05rem solid rgba(100,221,23,.1);background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>.admonition-title:before,.md-typeset .admonition.faq>summary:before,.md-typeset .admonition.help>.admonition-title:before,.md-typeset .admonition.help>summary:before,.md-typeset .admonition.question>.admonition-title:before,.md-typeset .admonition.question>summary:before,.md-typeset details.faq>.admonition-title:before,.md-typeset details.faq>summary:before,.md-typeset details.help>.admonition-title:before,.md-typeset details.help>summary:before,.md-typeset details.question>.admonition-title:before,.md-typeset details.question>summary:before{color:#64dd17;content:""}.md-typeset .admonition.attention,.md-typeset .admonition.caution,.md-typeset .admonition.warning,.md-typeset details.attention,.md-typeset details.caution,.md-typeset details.warning{border-left-color:#ff9100}[dir=rtl] .md-typeset .admonition.attention,[dir=rtl] .md-typeset .admonition.caution,[dir=rtl] .md-typeset .admonition.warning,[dir=rtl] .md-typeset details.attention,[dir=rtl] .md-typeset details.caution,[dir=rtl] .md-typeset details.warning{border-right-color:#ff9100}.md-typeset .admonition.attention>.admonition-title,.md-typeset .admonition.attention>summary,.md-typeset .admonition.caution>.admonition-title,.md-typeset .admonition.caution>summary,.md-typeset .admonition.warning>.admonition-title,.md-typeset .admonition.warning>summary,.md-typeset details.attention>.admonition-title,.md-typeset details.attention>summary,.md-typeset details.caution>.admonition-title,.md-typeset details.caution>summary,.md-typeset details.warning>.admonition-title,.md-typeset details.warning>summary{border-bottom-color:.05rem solid rgba(255,145,0,.1);background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>.admonition-title:before,.md-typeset .admonition.attention>summary:before,.md-typeset .admonition.caution>.admonition-title:before,.md-typeset .admonition.caution>summary:before,.md-typeset .admonition.warning>.admonition-title:before,.md-typeset .admonition.warning>summary:before,.md-typeset details.attention>.admonition-title:before,.md-typeset details.attention>summary:before,.md-typeset details.caution>.admonition-title:before,.md-typeset details.caution>summary:before,.md-typeset details.warning>.admonition-title:before,.md-typeset details.warning>summary:before{color:#ff9100;content:""}.md-typeset .admonition.fail,.md-typeset .admonition.failure,.md-typeset .admonition.missing,.md-typeset details.fail,.md-typeset details.failure,.md-typeset details.missing{border-left-color:#ff5252}[dir=rtl] .md-typeset .admonition.fail,[dir=rtl] .md-typeset .admonition.failure,[dir=rtl] .md-typeset .admonition.missing,[dir=rtl] .md-typeset details.fail,[dir=rtl] .md-typeset details.failure,[dir=rtl] .md-typeset details.missing{border-right-color:#ff5252}.md-typeset .admonition.fail>.admonition-title,.md-typeset .admonition.fail>summary,.md-typeset .admonition.failure>.admonition-title,.md-typeset .admonition.failure>summary,.md-typeset .admonition.missing>.admonition-title,.md-typeset .admonition.missing>summary,.md-typeset details.fail>.admonition-title,.md-typeset details.fail>summary,.md-typeset details.failure>.admonition-title,.md-typeset details.failure>summary,.md-typeset details.missing>.admonition-title,.md-typeset details.missing>summary{border-bottom-color:.05rem solid rgba(255,82,82,.1);background-color:rgba(255,82,82,.1)}.md-typeset .admonition.fail>.admonition-title:before,.md-typeset .admonition.fail>summary:before,.md-typeset .admonition.failure>.admonition-title:before,.md-typeset .admonition.failure>summary:before,.md-typeset .admonition.missing>.admonition-title:before,.md-typeset .admonition.missing>summary:before,.md-typeset details.fail>.admonition-title:before,.md-typeset details.fail>summary:before,.md-typeset details.failure>.admonition-title:before,.md-typeset details.failure>summary:before,.md-typeset details.missing>.admonition-title:before,.md-typeset details.missing>summary:before{color:#ff5252;content:""}.md-typeset .admonition.danger,.md-typeset .admonition.error,.md-typeset details.danger,.md-typeset details.error{border-left-color:#ff1744}[dir=rtl] .md-typeset .admonition.danger,[dir=rtl] .md-typeset .admonition.error,[dir=rtl] .md-typeset details.danger,[dir=rtl] .md-typeset details.error{border-right-color:#ff1744}.md-typeset .admonition.danger>.admonition-title,.md-typeset .admonition.danger>summary,.md-typeset .admonition.error>.admonition-title,.md-typeset .admonition.error>summary,.md-typeset details.danger>.admonition-title,.md-typeset details.danger>summary,.md-typeset details.error>.admonition-title,.md-typeset details.error>summary{border-bottom-color:.05rem solid rgba(255,23,68,.1);background-color:rgba(255,23,68,.1)}.md-typeset .admonition.danger>.admonition-title:before,.md-typeset .admonition.danger>summary:before,.md-typeset .admonition.error>.admonition-title:before,.md-typeset .admonition.error>summary:before,.md-typeset details.danger>.admonition-title:before,.md-typeset details.danger>summary:before,.md-typeset details.error>.admonition-title:before,.md-typeset details.error>summary:before{color:#ff1744;content:""}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}[dir=rtl] .md-typeset .admonition.bug,[dir=rtl] .md-typeset details.bug{border-right-color:#f50057}.md-typeset .admonition.bug>.admonition-title,.md-typeset .admonition.bug>summary,.md-typeset details.bug>.admonition-title,.md-typeset details.bug>summary{border-bottom-color:.05rem solid rgba(245,0,87,.1);background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>.admonition-title:before,.md-typeset .admonition.bug>summary:before,.md-typeset details.bug>.admonition-title:before,.md-typeset details.bug>summary:before{color:#f50057;content:""}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}[dir=rtl] .md-typeset .admonition.example,[dir=rtl] .md-typeset details.example{border-right-color:#651fff}.md-typeset .admonition.example>.admonition-title,.md-typeset .admonition.example>summary,.md-typeset details.example>.admonition-title,.md-typeset details.example>summary{border-bottom-color:.05rem solid rgba(101,31,255,.1);background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>.admonition-title:before,.md-typeset .admonition.example>summary:before,.md-typeset details.example>.admonition-title:before,.md-typeset details.example>summary:before{color:#651fff;content:""}.md-typeset .admonition.cite,.md-typeset .admonition.quote,.md-typeset details.cite,.md-typeset details.quote{border-left-color:#9e9e9e}[dir=rtl] .md-typeset .admonition.cite,[dir=rtl] .md-typeset .admonition.quote,[dir=rtl] .md-typeset details.cite,[dir=rtl] .md-typeset details.quote{border-right-color:#9e9e9e}.md-typeset .admonition.cite>.admonition-title,.md-typeset .admonition.cite>summary,.md-typeset .admonition.quote>.admonition-title,.md-typeset .admonition.quote>summary,.md-typeset details.cite>.admonition-title,.md-typeset details.cite>summary,.md-typeset details.quote>.admonition-title,.md-typeset details.quote>summary{border-bottom-color:.05rem solid hsla(0,0%,62%,.1);background-color:hsla(0,0%,62%,.1)}.md-typeset .admonition.cite>.admonition-title:before,.md-typeset .admonition.cite>summary:before,.md-typeset .admonition.quote>.admonition-title:before,.md-typeset .admonition.quote>summary:before,.md-typeset details.cite>.admonition-title:before,.md-typeset details.cite>summary:before,.md-typeset details.quote>.admonition-title:before,.md-typeset details.quote>summary:before{color:#9e9e9e;content:""}.codehilite .o,.codehilite .ow,.md-typeset .highlight .o,.md-typeset .highlight .ow{color:inherit}.codehilite .ge,.md-typeset .highlight .ge{color:#000}.codehilite .gr,.md-typeset .highlight .gr{color:#a00}.codehilite .gh,.md-typeset .highlight .gh{color:#999}.codehilite .go,.md-typeset .highlight .go{color:#888}.codehilite .gp,.md-typeset .highlight .gp{color:#555}.codehilite .gs,.md-typeset .highlight .gs{color:inherit}.codehilite .gu,.md-typeset .highlight .gu{color:#aaa}.codehilite .gt,.md-typeset .highlight .gt{color:#a00}.codehilite .gd,.md-typeset .highlight .gd{background-color:#fdd}.codehilite .gi,.md-typeset .highlight .gi{background-color:#dfd}.codehilite .k,.md-typeset .highlight .k{color:#3b78e7}.codehilite .kc,.md-typeset .highlight .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn,.md-typeset .highlight .kd,.md-typeset .highlight .kn{color:#3b78e7}.codehilite .kp,.md-typeset .highlight .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt,.md-typeset .highlight .kr,.md-typeset .highlight .kt{color:#3e61a2}.codehilite .c,.codehilite .cm,.md-typeset .highlight .c,.md-typeset .highlight .cm{color:#999}.codehilite .cp,.md-typeset .highlight .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs,.md-typeset .highlight .c1,.md-typeset .highlight .ch,.md-typeset .highlight .cs{color:#999}.codehilite .na,.codehilite .nb,.md-typeset .highlight .na,.md-typeset .highlight .nb{color:#c2185b}.codehilite .bp,.md-typeset .highlight .bp{color:#3e61a2}.codehilite .nc,.md-typeset .highlight .nc{color:#c2185b}.codehilite .no,.md-typeset .highlight .no{color:#3e61a2}.codehilite .nd,.codehilite .ni,.md-typeset .highlight .nd,.md-typeset .highlight .ni{color:#666}.codehilite .ne,.codehilite .nf,.md-typeset .highlight .ne,.md-typeset .highlight .nf{color:#c2185b}.codehilite .nl,.md-typeset .highlight .nl{color:#3b5179}.codehilite .nn,.md-typeset .highlight .nn{color:#ec407a}.codehilite .nt,.md-typeset .highlight .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi,.md-typeset .highlight .nv,.md-typeset .highlight .vc,.md-typeset .highlight .vg,.md-typeset .highlight .vi{color:#3e61a2}.codehilite .nx,.md-typeset .highlight .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo,.md-typeset .highlight .il,.md-typeset .highlight .m,.md-typeset .highlight .mf,.md-typeset .highlight .mh,.md-typeset .highlight .mi,.md-typeset .highlight .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc,.md-typeset .highlight .s,.md-typeset .highlight .sb,.md-typeset .highlight .sc{color:#0d904f}.codehilite .sd,.md-typeset .highlight .sd{color:#999}.codehilite .s2,.md-typeset .highlight .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx,.md-typeset .highlight .se,.md-typeset .highlight .sh,.md-typeset .highlight .si,.md-typeset .highlight .sx{color:#183691}.codehilite .sr,.md-typeset .highlight .sr{color:#009926}.codehilite .s1,.codehilite .ss,.md-typeset .highlight .s1,.md-typeset .highlight .ss{color:#0d904f}.codehilite .err,.md-typeset .highlight .err{color:#a61717}.codehilite .w,.md-typeset .highlight .w{color:transparent}.codehilite .hll,.md-typeset .highlight .hll{display:block;margin:0 -.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite,.md-typeset .highlight{position:relative;margin:1em 0;padding:0;border-radius:.1rem;background-color:hsla(0,0%,92.5%,.5);color:#37474f;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset .codehilite code,.md-typeset .codehilite pre,.md-typeset .highlight code,.md-typeset .highlight pre{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;overflow:auto;vertical-align:top}.md-typeset .codehilite code::-webkit-scrollbar,.md-typeset .codehilite pre::-webkit-scrollbar,.md-typeset .highlight code::-webkit-scrollbar,.md-typeset .highlight pre::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset .codehilite code::-webkit-scrollbar-thumb,.md-typeset .codehilite pre::-webkit-scrollbar-thumb,.md-typeset .highlight code::-webkit-scrollbar-thumb,.md-typeset .highlight pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite code::-webkit-scrollbar-thumb:hover,.md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,.md-typeset .highlight code::-webkit-scrollbar-thumb:hover,.md-typeset .highlight pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre.codehilite,.md-typeset pre.highlight{overflow:visible}.md-typeset pre.codehilite code,.md-typeset pre.highlight code{display:block;padding:.525rem .6rem;overflow:auto}.md-typeset .codehilitetable,.md-typeset .highlighttable{display:block;margin:1em 0;border-radius:.2em;font-size:.8rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td,.md-typeset .highlighttable tbody,.md-typeset .highlighttable td{display:block;padding:0}.md-typeset .codehilitetable tr,.md-typeset .highlighttable tr{display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .highlight,.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .codehilite,.md-typeset .highlighttable .highlight,.md-typeset .highlighttable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .linenodiv{padding:.525rem .6rem}.md-typeset .codehilitetable .linenos,.md-typeset .highlighttable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre,.md-typeset .highlighttable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code,.md-typeset .highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{box-shadow:none}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]:before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target:before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color .25s}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-ref{display:inline-block;pointer-events:auto}.md-typeset .footnote-ref:before{display:inline;margin:0 .2em;border-left:.05rem solid rgba(0,0,0,.26);font-size:1.25em;content:"";vertical-align:-.25rem}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.25rem);transform:translateX(.25rem);transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{-webkit-transform:translateX(-.25rem);transform:translateX(-.25rem)}.md-typeset .footnote-backref:before{display:inline-block;font-size:.8rem;content:"\E31B"}[dir=rtl] .md-typeset .footnote-backref:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;-webkit-transform:translateY(.25rem);transform:translateY(.25rem);transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset h1[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h1[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink,.md-typeset h1[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink:hover,.md-typeset h1[id]:target .headerlink{color:#536dfe}.md-typeset h2[id]:before{display:block;margin-top:-8px;padding-top:8px;content:""}.md-typeset h2[id]:target:before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink,.md-typeset h2[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink:hover,.md-typeset h2[id]:target .headerlink{color:#536dfe}.md-typeset h3[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h3[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink,.md-typeset h3[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink:hover,.md-typeset h3[id]:target .headerlink{color:#536dfe}.md-typeset h4[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h4[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink,.md-typeset h4[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink:hover,.md-typeset h4[id]:target .headerlink{color:#536dfe}.md-typeset h5[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h5[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink,.md-typeset h5[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink:hover,.md-typeset h5[id]:target .headerlink{color:#536dfe}.md-typeset h6[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h6[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink,.md-typeset h6[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink:hover,.md-typeset h6[id]:target .headerlink{color:#536dfe}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .critic.comment,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,92.5%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,92.5%,.5),-.25em 0 0 hsla(0,0%,92.5%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"\E0B7";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.no-details .md-typeset details:not([open])>*{display:none}.no-details .md-typeset details:not([open]) summary{display:block}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary:after{position:absolute;top:.4rem;right:.6rem;color:rgba(0,0,0,.26);font-size:1rem;content:"\E313"}[dir=rtl] .md-typeset summary:after{right:auto;left:.6rem}.md-typeset .emojione{width:1rem;vertical-align:text-top}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .29412em;padding:.07353em 0}.md-typeset .superfences-content{display:none;order:99;width:100%;background-color:#fff}.md-typeset .superfences-content>*{margin:0;border-radius:0}.md-typeset .superfences-tabs{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid rgba(0,0,0,.07);border-radius:.2em}.md-typeset .superfences-tabs>input{display:none}.md-typeset .superfences-tabs>input:checked+label{font-weight:700}.md-typeset .superfences-tabs>input:checked+label+.superfences-content{display:block}.md-typeset .superfences-tabs>label{width:auto;padding:.6rem;transition:color .125s;font-size:.64rem;cursor:pointer}html .md-typeset .superfences-tabs>label:hover{color:#536dfe}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:auto}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.15em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.25em;content:"\E835";vertical-align:-.25em}[dir=rtl] .md-typeset .task-list-control .task-list-indicator:before{right:-1.25em;left:auto}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"\E834"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre{white-space:pre-wrap}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-clipboard,.md-content__icon,.md-footer,.md-header,.md-sidebar,.md-tabs,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -.8rem;border-radius:0}.md-typeset pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.md-typeset .highlight .hll{margin:0 -.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre,.md-typeset>.highlight code,.md-typeset>.highlight pre{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilitetable .codehilite>code,.md-typeset>.codehilitetable .codehilite>pre,.md-typeset>.codehilitetable .highlight>code,.md-typeset>.codehilitetable .highlight>pre,.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .codehilite>code,.md-typeset>.highlighttable .codehilite>pre,.md-typeset>.highlighttable .highlight>code,.md-typeset>.highlighttable .highlight>pre,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -.8rem;padding:.25em .8rem}.md-typeset>.superfences-tabs{margin:1em -.8rem;border:0;border-top:.05rem solid rgba(0,0,0,.07);border-radius:0}.md-typeset>.superfences-tabs code,.md-typeset>.superfences-tabs pre{padding:.525rem .8rem}}@media only screen and (min-width:100em){html{font-size:137.5%}}@media only screen and (min-width:125em){html{font-size:150%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]:after{color:inherit;content:"\E8DE"}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{position:absolute;top:.2rem;left:.2rem;width:1.8rem;height:1.8rem;-webkit-transform-origin:center;transform-origin:center;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:1rem;background-color:#fff;overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:.2rem;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);transition:right 0s .3s,left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);transition:right 0s 0s,left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:auto}html [dir=rtl] .md-search__inner{right:100%;left:auto;-webkit-transform:translateX(-5%);transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}.md-search__icon[for=__search][for=__search]:before{content:"\E5C4"}[dir=rtl] .md-search__icon[for=__search][for=__search]:before{content:"\E5C8"}.md-search__icon[type=reset]{top:.6rem;right:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__article--document:before{display:none}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:#fff}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}html .md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.2rem;left:.2rem;width:2rem;height:2rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;font-size:2.4rem}html .md-nav--primary .md-nav__title--site:before{display:none}html [dir=rtl] .md-nav--primary .md-nav__title:before{right:.2rem;left:auto}html [dir=rtl] .md-nav--primary .md-nav__title--site .md-nav__button{right:.2rem;left:auto}.md-nav--primary .md-nav__list{flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid rgba(0,0,0,.07)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E315"}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E314"}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:.6rem;margin-top:-.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link:after{right:auto;left:.6rem}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:0}.md-nav__toggle~.md-nav{display:flex;-webkit-transform:translateX(100%);transform:translateX(100%);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.no-csstransforms3d .md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.no-csstransforms3d .md-nav__toggle:checked~.md-nav{display:flex}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:auto}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(12.1rem);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{-webkit-transform:translateX(-12.1rem);transform:translateX(-12.1rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;margin:0}.md-tabs{display:none}}@media only screen and (min-width:60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:0;margin-left:12.1rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:11.5rem;max-width:11.5rem;margin-left:1.4rem;padding-right:.6rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem;margin-left:0;padding-right:0;padding-left:.6rem}.md-search{padding:.2rem}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-search__inner{position:relative;width:11.5rem;padding:.1rem 0;float:right;transition:width .25s cubic-bezier(.1,.7,.1,1)}[dir=rtl] .md-search__inner{float:left}.md-search__form,.md-search__input{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);background-color:rgba(0,0,0,.26);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:inherit}.md-search__input::-webkit-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:none}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{top:1.9rem;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:0}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}[dir=rtl] .md-sidebar--secondary{margin-right:100%;margin-left:0;-webkit-transform:translate(100%);transform:translate(100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.no-js .md-nav__toggle~.md-nav{display:none}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.no-js .md-nav[data-md-state=expand],.no-js .md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:61rem}[dir=rtl] .md-sidebar--secondary{margin-right:61rem;margin-left:0}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary .md-nav__title--site{display:none}.no-js .md-tabs--active~.md-main .md-nav--primary .md-nav{display:block}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none;font-size:.7rem;overflow:auto;visibility:visible}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block}.md-tabs--active~.md-main .md-nav[data-md-level="1"]{max-height:none;overflow:visible}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:0}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media only screen and (min-width:45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media only screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}} \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-auto_hinter.html b/freetype/docs/reference/site/ft2-auto_hinter.html
new file mode 100644
index 00000000..3b3844f5
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-auto_hinter.html
@@ -0,0 +1,1155 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The auto-hinter - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-auto-hinter" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The auto-hinter
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The auto-hinter
+ </label>
+
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link md-nav__link--active">
+ The auto-hinter
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The auto-hinter</p>
+<hr />
+<h1 id="the-auto-hinter">The auto-hinter<a class="headerlink" href="#the-auto-hinter" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>While FreeType's auto-hinter doesn't expose API functions by itself, it is possible to control its behaviour with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>. The following lists the available properties together with the necessary macros and structures.</p>
+<p>Note that the auto-hinter's module name is &lsquo;autofitter&rsquo; for historical reasons.</p>
+<p>Available properties are <code><a href="ft2-properties.html#increase-x-height">increase-x-height</a></code>, <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code> (experimental), <code><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a></code> (experimental), <code><a href="ft2-properties.html#warping">warping</a></code> (experimental), <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code> (experimental), <code><a href="ft2-properties.html#fallback-script">fallback-script</a></code> (experimental), and <code><a href="ft2-properties.html#default-script">default-script</a></code> (experimental), as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Gasp Table
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The CFF driver
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-base_interface.html b/freetype/docs/reference/site/ft2-base_interface.html
new file mode 100644
index 00000000..b0fc2e03
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-base_interface.html
@@ -0,0 +1,5342 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Base Interface - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#base-interface" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Base Interface
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Base Interface
+ </label>
+
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link md-nav__link--active">
+ Base Interface
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library" title="FT_Library" class="md-nav__link">
+ FT_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face" title="FT_Face" class="md-nav__link">
+ FT_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size" title="FT_Size" class="md-nav__link">
+ FT_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslot" title="FT_GlyphSlot" class="md-nav__link">
+ FT_GlyphSlot
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_charmap" title="FT_CharMap" class="md-nav__link">
+ FT_CharMap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_encoding" title="FT_Encoding" class="md-nav__link">
+ FT_Encoding
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_enc_tag" title="FT_ENC_TAG" class="md-nav__link">
+ FT_ENC_TAG
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_facerec" title="FT_FaceRec" class="md-nav__link">
+ FT_FaceRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_horizontal" title="FT_HAS_HORIZONTAL" class="md-nav__link">
+ FT_HAS_HORIZONTAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_vertical" title="FT_HAS_VERTICAL" class="md-nav__link">
+ FT_HAS_VERTICAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_kerning" title="FT_HAS_KERNING" class="md-nav__link">
+ FT_HAS_KERNING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_fixed_sizes" title="FT_HAS_FIXED_SIZES" class="md-nav__link">
+ FT_HAS_FIXED_SIZES
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_glyph_names" title="FT_HAS_GLYPH_NAMES" class="md-nav__link">
+ FT_HAS_GLYPH_NAMES
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_color" title="FT_HAS_COLOR" class="md-nav__link">
+ FT_HAS_COLOR
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_multiple_masters" title="FT_HAS_MULTIPLE_MASTERS" class="md-nav__link">
+ FT_HAS_MULTIPLE_MASTERS
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_sfnt" title="FT_IS_SFNT" class="md-nav__link">
+ FT_IS_SFNT
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_scalable" title="FT_IS_SCALABLE" class="md-nav__link">
+ FT_IS_SCALABLE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_fixed_width" title="FT_IS_FIXED_WIDTH" class="md-nav__link">
+ FT_IS_FIXED_WIDTH
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_cid_keyed" title="FT_IS_CID_KEYED" class="md-nav__link">
+ FT_IS_CID_KEYED
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_tricky" title="FT_IS_TRICKY" class="md-nav__link">
+ FT_IS_TRICKY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_named_instance" title="FT_IS_NAMED_INSTANCE" class="md-nav__link">
+ FT_IS_NAMED_INSTANCE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_variation" title="FT_IS_VARIATION" class="md-nav__link">
+ FT_IS_VARIATION
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sizerec" title="FT_SizeRec" class="md-nav__link">
+ FT_SizeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_metrics" title="FT_Size_Metrics" class="md-nav__link">
+ FT_Size_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslotrec" title="FT_GlyphSlotRec" class="md-nav__link">
+ FT_GlyphSlotRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_metrics" title="FT_Glyph_Metrics" class="md-nav__link">
+ FT_Glyph_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_subglyph" title="FT_SubGlyph" class="md-nav__link">
+ FT_SubGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_size" title="FT_Bitmap_Size" class="md-nav__link">
+ FT_Bitmap_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_init_freetype" title="FT_Init_FreeType" class="md-nav__link">
+ FT_Init_FreeType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_freetype" title="FT_Done_FreeType" class="md-nav__link">
+ FT_Done_FreeType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face" title="FT_New_Face" class="md-nav__link">
+ FT_New_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_face" title="FT_Done_Face" class="md-nav__link">
+ FT_Done_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_reference_face" title="FT_Reference_Face" class="md-nav__link">
+ FT_Reference_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_memory_face" title="FT_New_Memory_Face" class="md-nav__link">
+ FT_New_Memory_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_properties" title="FT_Face_Properties" class="md-nav__link">
+ FT_Face_Properties
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_face" title="FT_Open_Face" class="md-nav__link">
+ FT_Open_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_args" title="FT_Open_Args" class="md-nav__link">
+ FT_Open_Args
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_parameter" title="FT_Parameter" class="md-nav__link">
+ FT_Parameter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_attach_file" title="FT_Attach_File" class="md-nav__link">
+ FT_Attach_File
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_attach_stream" title="FT_Attach_Stream" class="md-nav__link">
+ FT_Attach_Stream
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_char_size" title="FT_Set_Char_Size" class="md-nav__link">
+ FT_Set_Char_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_pixel_sizes" title="FT_Set_Pixel_Sizes" class="md-nav__link">
+ FT_Set_Pixel_Sizes
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_request_size" title="FT_Request_Size" class="md-nav__link">
+ FT_Request_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_select_size" title="FT_Select_Size" class="md-nav__link">
+ FT_Select_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_request_type" title="FT_Size_Request_Type" class="md-nav__link">
+ FT_Size_Request_Type
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_requestrec" title="FT_Size_RequestRec" class="md-nav__link">
+ FT_Size_RequestRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_request" title="FT_Size_Request" class="md-nav__link">
+ FT_Size_Request
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_transform" title="FT_Set_Transform" class="md-nav__link">
+ FT_Set_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_glyph" title="FT_Load_Glyph" class="md-nav__link">
+ FT_Load_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_char_index" title="FT_Get_Char_Index" class="md-nav__link">
+ FT_Get_Char_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_first_char" title="FT_Get_First_Char" class="md-nav__link">
+ FT_Get_First_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_next_char" title="FT_Get_Next_Char" class="md-nav__link">
+ FT_Get_Next_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_name_index" title="FT_Get_Name_Index" class="md-nav__link">
+ FT_Get_Name_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_char" title="FT_Load_Char" class="md-nav__link">
+ FT_Load_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_target_mode" title="FT_LOAD_TARGET_MODE" class="md-nav__link">
+ FT_LOAD_TARGET_MODE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_glyph" title="FT_Render_Glyph" class="md-nav__link">
+ FT_Render_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_mode" title="FT_Render_Mode" class="md-nav__link">
+ FT_Render_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_kerning" title="FT_Get_Kerning" class="md-nav__link">
+ FT_Get_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_kerning_mode" title="FT_Kerning_Mode" class="md-nav__link">
+ FT_Kerning_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_track_kerning" title="FT_Get_Track_Kerning" class="md-nav__link">
+ FT_Get_Track_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_glyph_name" title="FT_Get_Glyph_Name" class="md-nav__link">
+ FT_Get_Glyph_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_postscript_name" title="FT_Get_Postscript_Name" class="md-nav__link">
+ FT_Get_Postscript_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_charmaprec" title="FT_CharMapRec" class="md-nav__link">
+ FT_CharMapRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_select_charmap" title="FT_Select_Charmap" class="md-nav__link">
+ FT_Select_Charmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_charmap" title="FT_Set_Charmap" class="md-nav__link">
+ FT_Set_Charmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_charmap_index" title="FT_Get_Charmap_Index" class="md-nav__link">
+ FT_Get_Charmap_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_fstype_flags" title="FT_Get_FSType_Flags" class="md-nav__link">
+ FT_Get_FSType_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_subglyph_info" title="FT_Get_SubGlyph_Info" class="md-nav__link">
+ FT_Get_SubGlyph_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_internal" title="FT_Face_Internal" class="md-nav__link">
+ FT_Face_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_internal" title="FT_Size_Internal" class="md-nav__link">
+ FT_Size_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_slot_internal" title="FT_Slot_Internal" class="md-nav__link">
+ FT_Slot_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_flag_xxx" title="FT_FACE_FLAG_XXX" class="md-nav__link">
+ FT_FACE_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_style_flag_xxx" title="FT_STYLE_FLAG_XXX" class="md-nav__link">
+ FT_STYLE_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_xxx" title="FT_OPEN_XXX" class="md-nav__link">
+ FT_OPEN_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_xxx" title="FT_LOAD_XXX" class="md-nav__link">
+ FT_LOAD_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_target_xxx" title="FT_LOAD_TARGET_XXX" class="md-nav__link">
+ FT_LOAD_TARGET_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_subglyph_flag_xxx" title="FT_SUBGLYPH_FLAG_XXX" class="md-nav__link">
+ FT_SUBGLYPH_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fstype_xxx" title="FT_FSTYPE_XXX" class="md-nav__link">
+ FT_FSTYPE_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_fast_glyphs" title="FT_HAS_FAST_GLYPHS" class="md-nav__link">
+ FT_HAS_FAST_GLYPHS
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library" title="FT_Library" class="md-nav__link">
+ FT_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face" title="FT_Face" class="md-nav__link">
+ FT_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size" title="FT_Size" class="md-nav__link">
+ FT_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslot" title="FT_GlyphSlot" class="md-nav__link">
+ FT_GlyphSlot
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_charmap" title="FT_CharMap" class="md-nav__link">
+ FT_CharMap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_encoding" title="FT_Encoding" class="md-nav__link">
+ FT_Encoding
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_enc_tag" title="FT_ENC_TAG" class="md-nav__link">
+ FT_ENC_TAG
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_facerec" title="FT_FaceRec" class="md-nav__link">
+ FT_FaceRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_horizontal" title="FT_HAS_HORIZONTAL" class="md-nav__link">
+ FT_HAS_HORIZONTAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_vertical" title="FT_HAS_VERTICAL" class="md-nav__link">
+ FT_HAS_VERTICAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_kerning" title="FT_HAS_KERNING" class="md-nav__link">
+ FT_HAS_KERNING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_fixed_sizes" title="FT_HAS_FIXED_SIZES" class="md-nav__link">
+ FT_HAS_FIXED_SIZES
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_glyph_names" title="FT_HAS_GLYPH_NAMES" class="md-nav__link">
+ FT_HAS_GLYPH_NAMES
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_color" title="FT_HAS_COLOR" class="md-nav__link">
+ FT_HAS_COLOR
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_multiple_masters" title="FT_HAS_MULTIPLE_MASTERS" class="md-nav__link">
+ FT_HAS_MULTIPLE_MASTERS
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_sfnt" title="FT_IS_SFNT" class="md-nav__link">
+ FT_IS_SFNT
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_scalable" title="FT_IS_SCALABLE" class="md-nav__link">
+ FT_IS_SCALABLE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_fixed_width" title="FT_IS_FIXED_WIDTH" class="md-nav__link">
+ FT_IS_FIXED_WIDTH
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_cid_keyed" title="FT_IS_CID_KEYED" class="md-nav__link">
+ FT_IS_CID_KEYED
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_tricky" title="FT_IS_TRICKY" class="md-nav__link">
+ FT_IS_TRICKY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_named_instance" title="FT_IS_NAMED_INSTANCE" class="md-nav__link">
+ FT_IS_NAMED_INSTANCE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_is_variation" title="FT_IS_VARIATION" class="md-nav__link">
+ FT_IS_VARIATION
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sizerec" title="FT_SizeRec" class="md-nav__link">
+ FT_SizeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_metrics" title="FT_Size_Metrics" class="md-nav__link">
+ FT_Size_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslotrec" title="FT_GlyphSlotRec" class="md-nav__link">
+ FT_GlyphSlotRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_metrics" title="FT_Glyph_Metrics" class="md-nav__link">
+ FT_Glyph_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_subglyph" title="FT_SubGlyph" class="md-nav__link">
+ FT_SubGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_size" title="FT_Bitmap_Size" class="md-nav__link">
+ FT_Bitmap_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_init_freetype" title="FT_Init_FreeType" class="md-nav__link">
+ FT_Init_FreeType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_freetype" title="FT_Done_FreeType" class="md-nav__link">
+ FT_Done_FreeType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face" title="FT_New_Face" class="md-nav__link">
+ FT_New_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_face" title="FT_Done_Face" class="md-nav__link">
+ FT_Done_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_reference_face" title="FT_Reference_Face" class="md-nav__link">
+ FT_Reference_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_memory_face" title="FT_New_Memory_Face" class="md-nav__link">
+ FT_New_Memory_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_properties" title="FT_Face_Properties" class="md-nav__link">
+ FT_Face_Properties
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_face" title="FT_Open_Face" class="md-nav__link">
+ FT_Open_Face
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_args" title="FT_Open_Args" class="md-nav__link">
+ FT_Open_Args
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_parameter" title="FT_Parameter" class="md-nav__link">
+ FT_Parameter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_attach_file" title="FT_Attach_File" class="md-nav__link">
+ FT_Attach_File
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_attach_stream" title="FT_Attach_Stream" class="md-nav__link">
+ FT_Attach_Stream
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_char_size" title="FT_Set_Char_Size" class="md-nav__link">
+ FT_Set_Char_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_pixel_sizes" title="FT_Set_Pixel_Sizes" class="md-nav__link">
+ FT_Set_Pixel_Sizes
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_request_size" title="FT_Request_Size" class="md-nav__link">
+ FT_Request_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_select_size" title="FT_Select_Size" class="md-nav__link">
+ FT_Select_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_request_type" title="FT_Size_Request_Type" class="md-nav__link">
+ FT_Size_Request_Type
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_requestrec" title="FT_Size_RequestRec" class="md-nav__link">
+ FT_Size_RequestRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_request" title="FT_Size_Request" class="md-nav__link">
+ FT_Size_Request
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_transform" title="FT_Set_Transform" class="md-nav__link">
+ FT_Set_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_glyph" title="FT_Load_Glyph" class="md-nav__link">
+ FT_Load_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_char_index" title="FT_Get_Char_Index" class="md-nav__link">
+ FT_Get_Char_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_first_char" title="FT_Get_First_Char" class="md-nav__link">
+ FT_Get_First_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_next_char" title="FT_Get_Next_Char" class="md-nav__link">
+ FT_Get_Next_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_name_index" title="FT_Get_Name_Index" class="md-nav__link">
+ FT_Get_Name_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_char" title="FT_Load_Char" class="md-nav__link">
+ FT_Load_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_target_mode" title="FT_LOAD_TARGET_MODE" class="md-nav__link">
+ FT_LOAD_TARGET_MODE
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_glyph" title="FT_Render_Glyph" class="md-nav__link">
+ FT_Render_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_mode" title="FT_Render_Mode" class="md-nav__link">
+ FT_Render_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_kerning" title="FT_Get_Kerning" class="md-nav__link">
+ FT_Get_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_kerning_mode" title="FT_Kerning_Mode" class="md-nav__link">
+ FT_Kerning_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_track_kerning" title="FT_Get_Track_Kerning" class="md-nav__link">
+ FT_Get_Track_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_glyph_name" title="FT_Get_Glyph_Name" class="md-nav__link">
+ FT_Get_Glyph_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_postscript_name" title="FT_Get_Postscript_Name" class="md-nav__link">
+ FT_Get_Postscript_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_charmaprec" title="FT_CharMapRec" class="md-nav__link">
+ FT_CharMapRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_select_charmap" title="FT_Select_Charmap" class="md-nav__link">
+ FT_Select_Charmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_charmap" title="FT_Set_Charmap" class="md-nav__link">
+ FT_Set_Charmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_charmap_index" title="FT_Get_Charmap_Index" class="md-nav__link">
+ FT_Get_Charmap_Index
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_fstype_flags" title="FT_Get_FSType_Flags" class="md-nav__link">
+ FT_Get_FSType_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_subglyph_info" title="FT_Get_SubGlyph_Info" class="md-nav__link">
+ FT_Get_SubGlyph_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_internal" title="FT_Face_Internal" class="md-nav__link">
+ FT_Face_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_size_internal" title="FT_Size_Internal" class="md-nav__link">
+ FT_Size_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_slot_internal" title="FT_Slot_Internal" class="md-nav__link">
+ FT_Slot_Internal
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_flag_xxx" title="FT_FACE_FLAG_XXX" class="md-nav__link">
+ FT_FACE_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_style_flag_xxx" title="FT_STYLE_FLAG_XXX" class="md-nav__link">
+ FT_STYLE_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_open_xxx" title="FT_OPEN_XXX" class="md-nav__link">
+ FT_OPEN_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_xxx" title="FT_LOAD_XXX" class="md-nav__link">
+ FT_LOAD_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_target_xxx" title="FT_LOAD_TARGET_XXX" class="md-nav__link">
+ FT_LOAD_TARGET_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_subglyph_flag_xxx" title="FT_SUBGLYPH_FLAG_XXX" class="md-nav__link">
+ FT_SUBGLYPH_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fstype_xxx" title="FT_FSTYPE_XXX" class="md-nav__link">
+ FT_FSTYPE_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_fast_glyphs" title="FT_HAS_FAST_GLYPHS" class="md-nav__link">
+ FT_HAS_FAST_GLYPHS
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Base Interface</p>
+<hr />
+<h1 id="base-interface">Base Interface<a class="headerlink" href="#base-interface" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section describes the most important public high-level API functions of FreeType&nbsp;2.</p>
+<h2 id="ft_library">FT_Library<a class="headerlink" href="#ft_library" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_LibraryRec_ *<b>FT_Library</b>;
+</pre>
+</div>
+
+<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 <code><a href="ft2-system_interface.html#ft_memory">FT_Memory</a></code>), as well as a scan-line converter object (see <code><a href="ft2-raster.html#ft_raster">FT_Raster</a></code>).</p>
+<p>[Since 2.5.6] In multi-threaded applications it is easiest to use one <code>FT_Library</code> object per thread. In case this is too cumbersome, a single <code>FT_Library</code> object across threads is possible also, as long as a mutex lock is used around <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> and <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+<h4>note</h4>
+
+<p>Library objects are normally created by <code><a href="ft2-base_interface.html#ft_init_freetype">FT_Init_FreeType</a></code>, and destroyed with <code><a href="ft2-base_interface.html#ft_done_freetype">FT_Done_FreeType</a></code>. If you need reference-counting (cf. <code><a href="ft2-module_management.html#ft_reference_library">FT_Reference_Library</a></code>), use <code><a href="ft2-module_management.html#ft_new_library">FT_New_Library</a></code> and <code><a href="ft2-module_management.html#ft_done_library">FT_Done_Library</a></code>.</p>
+<hr>
+
+<h2 id="ft_face">FT_Face<a class="headerlink" href="#ft_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_* <b>FT_Face</b>;
+</pre>
+</div>
+
+<p>A handle to a typographic face object. A face object models a given typeface, in a given style.</p>
+<h4>note</h4>
+
+<p>A face object also owns a single <code><a href="ft2-base_interface.html#ft_glyphslot">FT_GlyphSlot</a></code> object, as well as one or more <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects.</p>
+<p>Use <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> or <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> to create a new face object from a given filepath or a custom input stream.</p>
+<p>Use <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code> to destroy it (along with its slot and sizes).</p>
+<p>An <code>FT_Face</code> object can only be safely used from one thread at a time. Similarly, creation and destruction of <code>FT_Face</code> with the same <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> object can only be done from one thread at a time. On the other hand, functions like <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> and its siblings are thread-safe and do not need the lock to be held as long as the same <code>FT_Face</code> object is not used from multiple threads at the same time.</p>
+<h4>also</h4>
+
+<p>See <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> for the publicly accessible fields of a given face object.</p>
+<hr>
+
+<h2 id="ft_size">FT_Size<a class="headerlink" href="#ft_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_* <b>FT_Size</b>;
+</pre>
+</div>
+
+<p>A handle to an object that models a face scaled to a given character size.</p>
+<h4>note</h4>
+
+<p>An <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> has one <em>active</em> <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object that is used by functions like <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> to determine the scaling transformation that in turn is used to load and hint glyphs and metrics.</p>
+<p>You can use <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code>, <code><a href="ft2-base_interface.html#ft_set_pixel_sizes">FT_Set_Pixel_Sizes</a></code>, <code><a href="ft2-base_interface.html#ft_request_size">FT_Request_Size</a></code> or even <code><a href="ft2-base_interface.html#ft_select_size">FT_Select_Size</a></code> to change the content (i.e., the scaling values) of the active <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code>.</p>
+<p>You can use <code><a href="ft2-sizes_management.html#ft_new_size">FT_New_Size</a></code> to create additional size objects for a given <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>, but they won't be used by other functions until you activate it through <code><a href="ft2-sizes_management.html#ft_activate_size">FT_Activate_Size</a></code>. Only one size can be activated at any given time per face.</p>
+<h4>also</h4>
+
+<p>See <code><a href="ft2-base_interface.html#ft_sizerec">FT_SizeRec</a></code> for the publicly accessible fields of a given size object.</p>
+<hr>
+
+<h2 id="ft_glyphslot">FT_GlyphSlot<a class="headerlink" href="#ft_glyphslot" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_* <b>FT_GlyphSlot</b>;
+</pre>
+</div>
+
+<p>A handle to a given &lsquo;glyph slot&rsquo;. A slot is a container that can hold any of the glyphs contained in its parent face.</p>
+<p>In other words, each time you call <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> or <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code>, 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>
+<h4>also</h4>
+
+<p>See <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> for the publicly accessible glyph fields.</p>
+<hr>
+
+<h2 id="ft_charmap">FT_CharMap<a class="headerlink" href="#ft_charmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_* <b>FT_CharMap</b>;
+</pre>
+</div>
+
+<p>A handle to a character map (usually abbreviated to &lsquo;charmap&rsquo;). 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;, providing the data used by <code><a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a></code> or <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code>.</p>
+<p>The list of available charmaps in a face is available through the <code>face-&gt;num_charmaps</code> and <code>face-&gt;charmaps</code> fields of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code>.</p>
+<p>The currently active charmap is available as <code>face-&gt;charmap</code>. You should call <code><a href="ft2-base_interface.html#ft_set_charmap">FT_Set_Charmap</a></code> to change it.</p>
+<h4>note</h4>
+
+<p>When a new face is created (either through <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> or <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>), the library looks for a Unicode charmap within the list and automatically activates it. If there is no Unicode charmap, FreeType doesn't set an &lsquo;active&rsquo; charmap.</p>
+<h4>also</h4>
+
+<p>See <code><a href="ft2-base_interface.html#ft_charmaprec">FT_CharMapRec</a></code> for the publicly accessible fields of a given character map.</p>
+<hr>
+
+<h2 id="ft_encoding">FT_Encoding<a class="headerlink" href="#ft_encoding" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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_none">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_ms_symbol">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_unicode">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_sjis">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_prc">FT_ENCODING_PRC</a>, 'g', 'b', ' ', ' ' ),
+ <a href="ft2-base_interface.html#ft_enc_tag">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#ft_encoding_big5">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_wansung">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_johab">FT_ENCODING_JOHAB</a>, 'j', 'o', 'h', 'a' ),
+
+ /* for backward compatibility */
+ FT_ENCODING_GB2312 = <a href="ft2-base_interface.html#ft_encoding_prc">FT_ENCODING_PRC</a>,
+ <a href="ft2-base_interface.html#ft_encoding_ms_sjis">FT_ENCODING_MS_SJIS</a> = <a href="ft2-base_interface.html#ft_encoding_sjis">FT_ENCODING_SJIS</a>,
+ <a href="ft2-base_interface.html#ft_encoding_ms_gb2312">FT_ENCODING_MS_GB2312</a> = <a href="ft2-base_interface.html#ft_encoding_prc">FT_ENCODING_PRC</a>,
+ <a href="ft2-base_interface.html#ft_encoding_ms_big5">FT_ENCODING_MS_BIG5</a> = <a href="ft2-base_interface.html#ft_encoding_big5">FT_ENCODING_BIG5</a>,
+ <a href="ft2-base_interface.html#ft_encoding_ms_wansung">FT_ENCODING_MS_WANSUNG</a> = <a href="ft2-base_interface.html#ft_encoding_wansung">FT_ENCODING_WANSUNG</a>,
+ <a href="ft2-base_interface.html#ft_encoding_ms_johab">FT_ENCODING_MS_JOHAB</a> = <a href="ft2-base_interface.html#ft_encoding_johab">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_adobe_standard">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_adobe_expert">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_adobe_custom">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_adobe_latin_1">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_old_latin_2">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_apple_roman">FT_ENCODING_APPLE_ROMAN</a>, 'a', 'r', 'm', 'n' )
+
+ } <b>FT_Encoding</b>;
+
+
+ /* these constants are deprecated; use the corresponding `<b>FT_Encoding</b>` */
+ /* values instead */
+#<span class="keyword">define</span> ft_encoding_none <a href="ft2-base_interface.html#ft_encoding_none">FT_ENCODING_NONE</a>
+#<span class="keyword">define</span> ft_encoding_unicode <a href="ft2-base_interface.html#ft_encoding_unicode">FT_ENCODING_UNICODE</a>
+#<span class="keyword">define</span> ft_encoding_symbol <a href="ft2-base_interface.html#ft_encoding_ms_symbol">FT_ENCODING_MS_SYMBOL</a>
+#<span class="keyword">define</span> ft_encoding_latin_1 <a href="ft2-base_interface.html#ft_encoding_adobe_latin_1">FT_ENCODING_ADOBE_LATIN_1</a>
+#<span class="keyword">define</span> ft_encoding_latin_2 <a href="ft2-base_interface.html#ft_encoding_old_latin_2">FT_ENCODING_OLD_LATIN_2</a>
+#<span class="keyword">define</span> ft_encoding_sjis <a href="ft2-base_interface.html#ft_encoding_sjis">FT_ENCODING_SJIS</a>
+#<span class="keyword">define</span> ft_encoding_gb2312 <a href="ft2-base_interface.html#ft_encoding_prc">FT_ENCODING_PRC</a>
+#<span class="keyword">define</span> ft_encoding_big5 <a href="ft2-base_interface.html#ft_encoding_big5">FT_ENCODING_BIG5</a>
+#<span class="keyword">define</span> ft_encoding_wansung <a href="ft2-base_interface.html#ft_encoding_wansung">FT_ENCODING_WANSUNG</a>
+#<span class="keyword">define</span> ft_encoding_johab <a href="ft2-base_interface.html#ft_encoding_johab">FT_ENCODING_JOHAB</a>
+
+#<span class="keyword">define</span> ft_encoding_adobe_standard <a href="ft2-base_interface.html#ft_encoding_adobe_standard">FT_ENCODING_ADOBE_STANDARD</a>
+#<span class="keyword">define</span> ft_encoding_adobe_expert <a href="ft2-base_interface.html#ft_encoding_adobe_expert">FT_ENCODING_ADOBE_EXPERT</a>
+#<span class="keyword">define</span> ft_encoding_adobe_custom <a href="ft2-base_interface.html#ft_encoding_adobe_custom">FT_ENCODING_ADOBE_CUSTOM</a>
+#<span class="keyword">define</span> ft_encoding_apple_roman <a href="ft2-base_interface.html#ft_encoding_apple_roman">FT_ENCODING_APPLE_ROMAN</a>
+</pre>
+</div>
+
+<p>An enumeration to specify character sets supported by charmaps. Used in the <code><a href="ft2-base_interface.html#ft_select_charmap">FT_Select_Charmap</a></code> API function.</p>
+<h4>note</h4>
+
+<p>Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, etc.).</p>
+<p>Other encodings might be defined in the future.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_encoding_none">FT_ENCODING_NONE</td><td class="desc">
+<p>The encoding value&nbsp;0 is reserved for all formats except BDF, PCF, and Windows FNT; see below for more information.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_unicode">FT_ENCODING_UNICODE</td><td class="desc">
+<p>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>
+<p>For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for <code><a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_symbol">FT_ENCODING_MS_SYMBOL</td><td class="desc">
+<p>Microsoft Symbol encoding, used to encode mathematical symbols and wingdings. For more information, see &lsquo;<a href="https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts">https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts</a>&rsquo;, &lsquo;<a href="http://www.kostis.net/charsets/symbol.htm">http://www.kostis.net/charsets/symbol.htm</a>&rsquo;, and &lsquo;<a href="http://www.kostis.net/charsets/wingding.htm">http://www.kostis.net/charsets/wingding.htm</a>&rsquo;.</p>
+<p>This encoding uses character codes from the PUA (Private Unicode Area) in the range U+F020-U+F0FF.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_sjis">FT_ENCODING_SJIS</td><td class="desc">
+<p>Shift JIS encoding for Japanese. More info at &lsquo;<a href="https://en.wikipedia.org/wiki/Shift_JIS">https://en.wikipedia.org/wiki/Shift_JIS</a>&rsquo;. See note on multi-byte encodings below.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_prc">FT_ENCODING_PRC</td><td class="desc">
+<p>Corresponds to encoding systems mainly for Simplified Chinese as used in People's Republic of China (PRC). The encoding layout is based on GB&nbsp;2312 and its supersets GBK and GB&nbsp;18030.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_big5">FT_ENCODING_BIG5</td><td class="desc">
+<p>Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_wansung">FT_ENCODING_WANSUNG</td><td class="desc">
+<p>Corresponds to the Korean encoding system known as Extended Wansung (MS Windows code page 949). For more information see &lsquo;<a href="https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt">https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt</a>&rsquo;.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_johab">FT_ENCODING_JOHAB</td><td class="desc">
+<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 Hangul character combinations.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_adobe_latin_1">FT_ENCODING_ADOBE_LATIN_1</td><td class="desc">
+<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><td class="val" id="ft_encoding_adobe_standard">FT_ENCODING_ADOBE_STANDARD</td><td class="desc">
+<p>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><td class="val" id="ft_encoding_adobe_expert">FT_ENCODING_ADOBE_EXPERT</td><td class="desc">
+<p>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><td class="val" id="ft_encoding_adobe_custom">FT_ENCODING_ADOBE_CUSTOM</td><td class="desc">
+<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><td class="val" id="ft_encoding_apple_roman">FT_ENCODING_APPLE_ROMAN</td><td class="desc">
+<p>Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this 8-bit encoding, since older versions of Mac OS are able to use it.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_old_latin_2">FT_ENCODING_OLD_LATIN_2</td><td class="desc">
+<p>This value is deprecated and was neither used nor reported by FreeType. Don't use or test for it.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_sjis">FT_ENCODING_MS_SJIS</td><td class="desc">
+<p>Same as FT_ENCODING_SJIS. Deprecated.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_gb2312">FT_ENCODING_MS_GB2312</td><td class="desc">
+<p>Same as FT_ENCODING_PRC. Deprecated.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_big5">FT_ENCODING_MS_BIG5</td><td class="desc">
+<p>Same as FT_ENCODING_BIG5. Deprecated.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_wansung">FT_ENCODING_MS_WANSUNG</td><td class="desc">
+<p>Same as FT_ENCODING_WANSUNG. Deprecated.</p>
+</td></tr>
+<tr><td class="val" id="ft_encoding_ms_johab">FT_ENCODING_MS_JOHAB</td><td class="desc">
+<p>Same as FT_ENCODING_JOHAB. Deprecated.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>By default, FreeType enables a Unicode charmap and tags it with <code>FT_ENCODING_UNICODE</code> when it is either provided or can be generated from PostScript glyph name dictionaries in the font file. All other encodings are considered legacy and tagged only if explicitly defined in the font file. Otherwise, <code>FT_ENCODING_NONE</code> is used.</p>
+<p><code>FT_ENCODING_NONE</code> is set by the BDF and PCF drivers if the charmap is neither Unicode nor ISO-8859-1 (otherwise it is set to <code>FT_ENCODING_UNICODE</code>). Use <code><a href="ft2-bdf_fonts.html#ft_get_bdf_charset_id">FT_Get_BDF_Charset_ID</a></code> to find out which encoding is really present. If, for example, the <code>cs_registry</code> field is &lsquo;KOI8&rsquo; and the <code>cs_encoding</code> field is &lsquo;R&rsquo;, the font is encoded in KOI8-R.</p>
+<p><code>FT_ENCODING_NONE</code> is always set (with a single exception) by the winfonts driver. Use <code><a href="ft2-winfnt_fonts.html#ft_get_winfnt_header">FT_Get_WinFNT_Header</a></code> and examine the <code>charset</code> field of the <code><a href="ft2-winfnt_fonts.html#ft_winfnt_headerrec">FT_WinFNT_HeaderRec</a></code> structure to find out which encoding is really present. For example, <code><a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1251</a></code> (204) means Windows code page 1251 (for Russian).</p>
+<p><code>FT_ENCODING_NONE</code> is set if <code>platform_id</code> is <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MACINTOSH</a></code> and <code>encoding_id</code> is not <code>TT_MAC_ID_ROMAN</code> (otherwise it is set to <code>FT_ENCODING_APPLE_ROMAN</code>).</p>
+<p>If <code>platform_id</code> is <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MACINTOSH</a></code>, use the function <code><a href="ft2-truetype_tables.html#ft_get_cmap_language_id">FT_Get_CMap_Language_ID</a></code> to query the Mac language ID that may be needed to be able to distinguish Apple encoding variants. See</p>
+<p><a href="https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt">https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt</a></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 <code>encoding_id</code>. If, for example, <code>encoding_id</code> is <code>TT_MAC_ID_ROMAN</code> and the language ID (minus&nbsp;1) is <code>TT_MAC_LANGID_GREEK</code>, it is the Greek encoding, not Roman. <code>TT_MAC_ID_ARABIC</code> with <code>TT_MAC_LANGID_FARSI</code> means the Farsi variant the Arabic encoding.</p>
+<hr>
+
+<h2 id="ft_enc_tag">FT_ENC_TAG<a class="headerlink" href="#ft_enc_tag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_ENC_TAG</b>
+#<span class="keyword">define</span> <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) )
+
+#<span class="keyword">endif</span> /* <b>FT_ENC_TAG</b> */
+</pre>
+</div>
+
+<p>This macro converts four-letter tags into an unsigned long. It is used to define &lsquo;encoding&rsquo; identifiers (see <code><a href="ft2-base_interface.html#ft_encoding">FT_Encoding</a></code>).</p>
+<h4>note</h4>
+
+<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:
+<div class="codehilite"><pre><span></span> #define FT_ENC_TAG( value, a, b, c, d ) value
+</pre></div></p>
+<p>to get a simple enumeration without assigning special numbers.</p>
+<hr>
+
+<h2 id="ft_facerec">FT_FaceRec<a class="headerlink" href="#ft_facerec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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-module_management.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; /* face-specific auto-hinter data */
+ <span class="keyword">void</span>* extensions; /* unused */
+
+ <a href="ft2-base_interface.html#ft_face_internal">FT_Face_Internal</a> internal;
+
+ /*@private end */
+
+ } <b>FT_FaceRec</b>;
+</pre>
+</div>
+
+<p>FreeType root face class structure. A face object models a typeface in a font file.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_faces">num_faces</td><td class="desc">
+<p>The number of faces in the font file. Some font formats can have multiple faces in a single font file.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value&nbsp;0). They are set to&nbsp;0 if there is only one face in the font file.</p>
+<p>[Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, holding the named instance index for the current face index (starting with value&nbsp;1; value&nbsp;0 indicates font access without a named instance). For non-variation fonts, bits 16-30 are ignored. If we have the third named instance of face&nbsp;4, say, <code>face_index</code> is set to 0x00030004.</p>
+<p>Bit 31 is always zero (this is, <code>face_index</code> is always a positive value).</p>
+<p>[Since 2.9] Changing the design coordinates with <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> or <code><a href="ft2-multiple_masters.html#ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates</a></code> does not influence the named instance index value (only <code><a href="ft2-multiple_masters.html#ft_set_named_instance">FT_Set_Named_Instance</a></code> does that).</p>
+</td></tr>
+<tr><td class="val" id="face_flags">face_flags</td><td class="desc">
+<p>A set of bit flags that give important information about the face; see <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_XXX</a></code> for the details.</p>
+</td></tr>
+<tr><td class="val" id="style_flags">style_flags</td><td class="desc">
+<p>The lower 16&nbsp;bits contain a set of bit flags indicating the style of the face; see <code><a href="ft2-base_interface.html#ft_style_flag_xxx">FT_STYLE_FLAG_XXX</a></code> for the details.</p>
+<p>[Since 2.6.1] Bits 16-30 hold the number of named instances available for the current face if we have a GX or OpenType variation (sub)font. Bit 31 is always zero (this is, <code>style_flags</code> is always a positive value). Note that a variation font has always at least one named instance, namely the default instance.</p>
+</td></tr>
+<tr><td class="val" id="num_glyphs">num_glyphs</td><td class="desc">
+<p>The number of glyphs in the face. If the face is scalable and has sbits (see <code>num_fixed_sizes</code>), it is set to the number of outline glyphs.</p>
+<p>For CID-keyed fonts (not in an SFNT wrapper) this value gives the highest CID used in the font.</p>
+</td></tr>
+<tr><td class="val" id="family_name">family_name</td><td class="desc">
+<p>The face's family name. This is an ASCII string, usually in English, that 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 <code>NULL</code> (e.g., in fonts embedded in a PDF file).</p>
+<p>In case the font doesn't provide a specific family name entry, FreeType tries to synthesize one, deriving it from other name entries.</p>
+</td></tr>
+<tr><td class="val" id="style_name">style_name</td><td class="desc">
+<p>The face's style name. This is an ASCII string, usually in English, that 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 <code>NULL</code>. As for <code>family_name</code>, some formats provide localized and Unicode versions of this string. Applications should use the format-specific interface to access them.</p>
+</td></tr>
+<tr><td class="val" id="num_fixed_sizes">num_fixed_sizes</td><td class="desc">
+<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><td class="val" id="available_sizes">available_sizes</td><td class="desc">
+<p>An array of <code><a href="ft2-base_interface.html#ft_bitmap_size">FT_Bitmap_Size</a></code> for all bitmap strikes in the face. It is set to <code>NULL</code> if there is no bitmap strike.</p>
+<p>Note that FreeType tries to sanitize the strike data since they are sometimes sloppy or incorrect, but this can easily fail.</p>
+</td></tr>
+<tr><td class="val" id="num_charmaps">num_charmaps</td><td class="desc">
+<p>The number of charmaps in the face.</p>
+</td></tr>
+<tr><td class="val" id="charmaps">charmaps</td><td class="desc">
+<p>An array of the charmaps of the face.</p>
+</td></tr>
+<tr><td class="val" id="generic">generic</td><td class="desc">
+<p>A field reserved for client uses. See the <code><a href="ft2-basic_types.html#ft_generic">FT_Generic</a></code> type description.</p>
+</td></tr>
+<tr><td class="val" id="bbox">bbox</td><td class="desc">
+<p>The font bounding box. Coordinates are expressed in font units (see <code>units_per_EM</code>). The box is large enough to contain any glyph from the font. Thus, <code>bbox.yMax</code> can be seen as the &lsquo;maximum ascender&rsquo;, and <code>bbox.yMin</code> as the &lsquo;minimum 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 <code><a href="ft2-base_interface.html#ft_size_metrics">FT_Size_Metrics</a></code> for further discussion.</p>
+</td></tr>
+<tr><td class="val" id="units_per_em">units_per_EM</td><td class="desc">
+<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><td class="val" id="ascender">ascender</td><td class="desc">
+<p>The typographic ascender of the face, expressed in font units. For font formats not having this information, it is set to <code>bbox.yMax</code>. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="descender">descender</td><td class="desc">
+<p>The typographic descender of the face, expressed in font units. For font formats not having this information, it is set to <code>bbox.yMin</code>. Note that this field is negative for values below the baseline. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>This value is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats.</p>
+<p>If you want the global glyph height, use <code>ascender - descender</code>.</p>
+</td></tr>
+<tr><td class="val" id="max_advance_width">max_advance_width</td><td class="desc">
+<p>The maximum advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="max_advance_height">max_advance_height</td><td class="desc">
+<p>The maximum advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to <code>height</code> for fonts that do not provide vertical metrics. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="underline_position">underline_position</td><td class="desc">
+<p>The position, in font units, of the underline line for this face. It is the center of the underlining stem. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="underline_thickness">underline_thickness</td><td class="desc">
+<p>The thickness, in font units, of the underline for this face. Only relevant for scalable formats.</p>
+</td></tr>
+<tr><td class="val" id="glyph">glyph</td><td class="desc">
+<p>The face's associated glyph slot(s).</p>
+</td></tr>
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>The current active size for this face.</p>
+</td></tr>
+<tr><td class="val" id="charmap">charmap</td><td class="desc">
+<p>The current active charmap for this face.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Fields may be changed after a call to <code><a href="ft2-base_interface.html#ft_attach_file">FT_Attach_File</a></code> or <code><a href="ft2-base_interface.html#ft_attach_stream">FT_Attach_Stream</a></code>.</p>
+<p>For an OpenType variation font, the values of the following fields can change after a call to <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: <code>ascender</code>, <code>descender</code>, <code>height</code>, <code>underline_position</code>, and <code>underline_thickness</code>.</p>
+<p>Especially for TrueType fonts see also the documentation for <code><a href="ft2-base_interface.html#ft_size_metrics">FT_Size_Metrics</a></code>.</p>
+<hr>
+
+<h2 id="ft_has_horizontal">FT_HAS_HORIZONTAL<a class="headerlink" href="#ft_has_horizontal" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_HORIZONTAL</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_horizontal">FT_FACE_FLAG_HORIZONTAL</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains horizontal metrics (this is true for all font formats though).</p>
+<h4>also</h4>
+
+<p><code><a href="ft2-base_interface.html#ft_has_vertical">FT_HAS_VERTICAL</a></code> can be used to check for vertical metrics.</p>
+<hr>
+
+<h2 id="ft_has_vertical">FT_HAS_VERTICAL<a class="headerlink" href="#ft_has_vertical" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_VERTICAL</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_vertical">FT_FACE_FLAG_VERTICAL</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains real vertical metrics (and not only synthesized ones).</p>
+<hr>
+
+<h2 id="ft_has_kerning">FT_HAS_KERNING<a class="headerlink" href="#ft_has_kerning" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_KERNING</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_kerning">FT_FACE_FLAG_KERNING</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains kerning data that can be accessed with <code><a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a></code>.</p>
+<hr>
+
+<h2 id="ft_has_fixed_sizes">FT_HAS_FIXED_SIZES<a class="headerlink" href="#ft_has_fixed_sizes" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_FIXED_SIZES</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_fixed_sizes">FT_FACE_FLAG_FIXED_SIZES</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains some embedded bitmaps. See the <code>available_sizes</code> field of the <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ft_has_glyph_names">FT_HAS_GLYPH_NAMES<a class="headerlink" href="#ft_has_glyph_names" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_GLYPH_NAMES</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_glyph_names">FT_FACE_FLAG_GLYPH_NAMES</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains some glyph names that can be accessed through <code><a href="ft2-base_interface.html#ft_get_glyph_name">FT_Get_Glyph_Name</a></code>.</p>
+<hr>
+
+<h2 id="ft_has_color">FT_HAS_COLOR<a class="headerlink" href="#ft_has_color" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_COLOR</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_color">FT_FACE_FLAG_COLOR</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains tables for color glyphs.</p>
+<h4>since</h4>
+
+<p>2.5.1</p>
+<hr>
+
+<h2 id="ft_has_multiple_masters">FT_HAS_MULTIPLE_MASTERS<a class="headerlink" href="#ft_has_multiple_masters" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_MULTIPLE_MASTERS</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_multiple_masters">FT_FACE_FLAG_MULTIPLE_MASTERS</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains some multiple masters. The functions provided by <code><a href="ft2-header_file_macros.html#ft_multiple_masters_h">FT_MULTIPLE_MASTERS_H</a></code> are then available to choose the exact design you want.</p>
+<hr>
+
+<h2 id="ft_is_sfnt">FT_IS_SFNT<a class="headerlink" href="#ft_is_sfnt" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_SFNT</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_sfnt">FT_FACE_FLAG_SFNT</a> )
+</pre>
+</div>
+
+<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 <code><a href="ft2-header_file_macros.html#ft_sfnt_names_h">FT_SFNT_NAMES_H</a></code> and <code><a href="ft2-header_file_macros.html#ft_truetype_tables_h">FT_TRUETYPE_TABLES_H</a></code> are available.</p>
+<hr>
+
+<h2 id="ft_is_scalable">FT_IS_SCALABLE<a class="headerlink" href="#ft_is_scalable" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_SCALABLE</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_scalable">FT_FACE_FLAG_SCALABLE</a> )
+</pre>
+</div>
+
+<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>
+<hr>
+
+<h2 id="ft_is_fixed_width">FT_IS_FIXED_WIDTH<a class="headerlink" href="#ft_is_fixed_width" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_FIXED_WIDTH</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_fixed_width">FT_FACE_FLAG_FIXED_WIDTH</a> )
+</pre>
+</div>
+
+<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>
+<hr>
+
+<h2 id="ft_is_cid_keyed">FT_IS_CID_KEYED<a class="headerlink" href="#ft_is_cid_keyed" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_CID_KEYED</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_cid_keyed">FT_FACE_FLAG_CID_KEYED</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object contains a CID-keyed font. See the discussion of <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_CID_KEYED</a></code> for more details.</p>
+<p>If this macro is true, all functions defined in <code><a href="ft2-header_file_macros.html#ft_cid_h">FT_CID_H</a></code> are available.</p>
+<hr>
+
+<h2 id="ft_is_tricky">FT_IS_TRICKY<a class="headerlink" href="#ft_is_tricky" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_TRICKY</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_tricky">FT_FACE_FLAG_TRICKY</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face represents a &lsquo;tricky&rsquo; font. See the discussion of <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_TRICKY</a></code> for more details.</p>
+<hr>
+
+<h2 id="ft_is_named_instance">FT_IS_NAMED_INSTANCE<a class="headerlink" href="#ft_is_named_instance" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_NAMED_INSTANCE</b>( face ) \
+ ( (face)-&gt;face_index &amp; 0x7FFF0000L )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object is a named instance of a GX or OpenType variation font.</p>
+<p>[Since 2.9] Changing the design coordinates with <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> or <code><a href="ft2-multiple_masters.html#ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates</a></code> does not influence the return value of this macro (only <code><a href="ft2-multiple_masters.html#ft_set_named_instance">FT_Set_Named_Instance</a></code> does that).</p>
+<h4>since</h4>
+
+<p>2.7</p>
+<hr>
+
+<h2 id="ft_is_variation">FT_IS_VARIATION<a class="headerlink" href="#ft_is_variation" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IS_VARIATION</b>( face ) \
+ ( (face)-&gt;face_flags &amp; <a href="ft2-base_interface.html#ft_face_flag_variation">FT_FACE_FLAG_VARIATION</a> )
+</pre>
+</div>
+
+<p>A macro that returns true whenever a face object has been altered by <code><a href="ft2-multiple_masters.html#ft_set_mm_design_coordinates">FT_Set_MM_Design_Coordinates</a></code>, <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code>, or <code><a href="ft2-multiple_masters.html#ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates</a></code>.</p>
+<h4>since</h4>
+
+<p>2.9</p>
+<hr>
+
+<h2 id="ft_sizerec">FT_SizeRec<a class="headerlink" href="#ft_sizerec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>FreeType root size class structure. A size object models a face object at a given size.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>Handle to the parent face object.</p>
+</td></tr>
+<tr><td class="val" id="generic">generic</td><td class="desc">
+<p>A typeless pointer, unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each size object.</p>
+</td></tr>
+<tr><td class="val" id="metrics">metrics</td><td class="desc">
+<p>Metrics for this size object. This field is read-only.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_size_metrics">FT_Size_Metrics<a class="headerlink" href="#ft_size_metrics" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The size metrics structure gives the metrics of a size object.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="x_ppem">x_ppem</td><td class="desc">
+<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><td class="val" id="y_ppem">y_ppem</td><td class="desc">
+<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><td class="val" id="x_scale">x_scale</td><td class="desc">
+<p>A 16.16 fractional scaling value to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
+</td></tr>
+<tr><td class="val" id="y_scale">y_scale</td><td class="desc">
+<p>A 16.16 fractional scaling value to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
+</td></tr>
+<tr><td class="val" id="ascender">ascender</td><td class="desc">
+<p>The ascender in 26.6 fractional pixels, rounded up to an integer value. See <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> for the details.</p>
+</td></tr>
+<tr><td class="val" id="descender">descender</td><td class="desc">
+<p>The descender in 26.6 fractional pixels, rounded down to an integer value. See <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> for the details.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The height in 26.6 fractional pixels, rounded to an integer value. See <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> for the details.</p>
+</td></tr>
+<tr><td class="val" id="max_advance">max_advance</td><td class="desc">
+<p>The maximum advance width in 26.6 fractional pixels, rounded to an integer value. See <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> for the details.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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 <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code>. Some values like ascender or descender are rounded for historical reasons; more precise values (for outline fonts) can be derived by scaling the corresponding <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> values manually, with code similar to the following.
+<div class="codehilite"><pre><span></span> scaled_ascender = FT_MulFix( face-&gt;ascender,
+ size_metrics-&gt;y_scale );
+</pre></div></p>
+<p>Note that due to glyph hinting and the selected rendering mode these values are usually not exact; consequently, they must be treated as unreliable with an error margin of at least one pixel!</p>
+<p>Indeed, the only way to get the exact metrics is to render <em>all</em> glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations.</p>
+<p>The <code>FT_Size_Metrics</code> structure is valid for bitmap fonts also.</p>
+<p><strong>TrueType fonts with native bytecode hinting</strong></p>
+<p>All applications that handle TrueType fonts with native hinting must be aware that TTFs expect different rounding of vertical font dimensions. The application has to cater for this, especially if it wants to rely on a TTF's vertical data (for example, to properly align box characters vertically).</p>
+<p>Only the application knows <em>in advance</em> that it is going to use native hinting for TTFs! FreeType, on the other hand, selects the hinting mode not at the time of creating an <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object but much later, namely while calling <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+<p>Here is some pseudo code that illustrates a possible solution.
+<div class="codehilite"><pre><span></span> font_format = FT_Get_Font_Format( face );
+
+ if ( !strcmp( font_format, &quot;TrueType&quot; ) &amp;&amp;
+ do_native_bytecode_hinting )
+ {
+ ascender = ROUND( FT_MulFix( face-&gt;ascender,
+ size_metrics-&gt;y_scale ) );
+ descender = ROUND( FT_MulFix( face-&gt;descender,
+ size_metrics-&gt;y_scale ) );
+ }
+ else
+ {
+ ascender = size_metrics-&gt;ascender;
+ descender = size_metrics-&gt;descender;
+ }
+
+ height = size_metrics-&gt;height;
+ max_advance = size_metrics-&gt;max_advance;
+</pre></div></p>
+<hr>
+
+<h2 id="ft_glyphslotrec">FT_GlyphSlotRec<a class="headerlink" href="#ft_glyphslotrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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> glyph_index; /* new in 2.10; was reserved previously */
+ <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>
+</div>
+
+<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>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the FreeType library instance this slot belongs to.</p>
+</td></tr>
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the parent face object.</p>
+</td></tr>
+<tr><td class="val" id="next">next</td><td class="desc">
+<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 <code>next</code> field.</p>
+</td></tr>
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<p>[Since 2.10] The glyph index passed as an argument to <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> while initializing the glyph slot.</p>
+</td></tr>
+<tr><td class="val" id="generic">generic</td><td class="desc">
+<p>A typeless pointer unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object.</p>
+</td></tr>
+<tr><td class="val" id="metrics">metrics</td><td class="desc">
+<p>The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> 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><td class="val" id="linearhoriadvance">linearHoriAdvance</td><td class="desc">
+<p>The advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_LINEAR_DESIGN</a></code> 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><td class="val" id="linearvertadvance">linearVertAdvance</td><td class="desc">
+<p>The advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_LINEAR_DESIGN</a></code> 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><td class="val" id="advance">advance</td><td class="desc">
+<p>This shorthand is, depending on <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_IGNORE_TRANSFORM</a></code>, the transformed (hinted) advance width for the glyph, in 26.6 fractional pixel format. As specified with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_VERTICAL_LAYOUT</a></code>, it uses either the <code>horiAdvance</code> or the <code>vertAdvance</code> value of <code>metrics</code> field.</p>
+</td></tr>
+<tr><td class="val" id="format">format</td><td class="desc">
+<p>This field indicates the format of the image contained in the glyph slot. Typically <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_BITMAP</a></code>, <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_OUTLINE</a></code>, or <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_COMPOSITE</a></code>, but other values are possible.</p>
+</td></tr>
+<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
+<p>This field is used as a bitmap descriptor. Note that the address and content of the bitmap buffer can change between calls of <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> and a few other functions.</p>
+</td></tr>
+<tr><td class="val" id="bitmap_left">bitmap_left</td><td class="desc">
+<p>The bitmap's left bearing expressed in integer pixels.</p>
+</td></tr>
+<tr><td class="val" id="bitmap_top">bitmap_top</td><td class="desc">
+<p>The bitmap's top bearing expressed in integer pixels. This is the distance from the baseline to the top-most glyph scanline, upwards y&nbsp;coordinates being <strong>positive</strong>.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The outline descriptor for the current glyph image if its format is <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_OUTLINE</a></code>. Once a glyph is loaded, <code>outline</code> can be transformed, distorted, emboldened, etc. However, it must not be freed.</p>
+<p>[Since 2.10.1] If <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> is set, outline coordinates of OpenType variation fonts for a selected instance are internally handled as 26.6 fractional font units but returned as (rounded) integers, as expected. To get unrounded font units, don't use <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> but load the glyph with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code> and scale it, using the font's <code>units_per_EM</code> value as the ppem.</p>
+</td></tr>
+<tr><td class="val" id="num_subglyphs">num_subglyphs</td><td class="desc">
+<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 <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_RECURSE</a></code> flag.</p>
+</td></tr>
+<tr><td class="val" id="subglyphs">subglyphs</td><td class="desc">
+<p>An array of subglyph descriptors for composite glyphs. There are <code>num_subglyphs</code> elements in there. Currently internal to FreeType.</p>
+</td></tr>
+<tr><td class="val" id="control_data">control_data</td><td class="desc">
+<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; it is currently internal to FreeType.</p>
+</td></tr>
+<tr><td class="val" id="control_len">control_len</td><td class="desc">
+<p>This is the length in bytes of the control data. Currently internal to FreeType.</p>
+</td></tr>
+<tr><td class="val" id="other">other</td><td class="desc">
+<p>Reserved.</p>
+</td></tr>
+<tr><td class="val" id="lsb_delta">lsb_delta</td><td class="desc">
+<p>The difference between hinted and unhinted left side bearing while auto-hinting is active. Zero otherwise.</p>
+</td></tr>
+<tr><td class="val" id="rsb_delta">rsb_delta</td><td class="desc">
+<p>The difference between hinted and unhinted right side bearing while auto-hinting is active. Zero otherwise.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>If <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> is called with default flags (see <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_DEFAULT</a></code>) 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). [Since 2.9] The prospective bitmap metrics are calculated according to <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a></code> and other flags even for the outline glyph, even if <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a></code> is not set.</p>
+<p>This image can later be converted into a bitmap by calling <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code>. This function searches 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 converting it into a bitmap that is returned in <code>slot-&gt;bitmap</code>.</p>
+<p>Note that <code>slot-&gt;bitmap_left</code> and <code>slot-&gt;bitmap_top</code> 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, <code>slot-&gt;format</code> is also changed to <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_BITMAP</a></code>.</p>
+<p>Here is a small pseudo code fragment that shows how to use <code>lsb_delta</code> and <code>rsb_delta</code> to do fractional positioning of glyphs:
+<div class="codehilite"><pre><span></span> FT_GlyphSlot slot = face-&gt;glyph;
+ FT_Pos origin_x = 0;
+
+
+ for all glyphs do
+ &lt;load glyph with `FT_Load_Glyph&#39;&gt;
+
+ FT_Outline_Translate( slot-&gt;outline, origin_x &amp; 63, 0 );
+
+ &lt;save glyph image, or render glyph, or ...&gt;
+
+ &lt;compute kern between current and next glyph
+ and add it to `origin_x&#39;&gt;
+
+ origin_x += slot-&gt;advance.x;
+ origin_x += slot-&gt;lsb_delta - slot-&gt;rsb_delta;
+ endfor
+</pre></div></p>
+<p>Here is another small pseudo code fragment that shows how to use <code>lsb_delta</code> and <code>rsb_delta</code> to improve integer positioning of glyphs:
+<div class="codehilite"><pre><span></span> FT_GlyphSlot slot = face-&gt;glyph;
+ 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&#39;&gt;
+
+ &lt;load glyph with `FT_Load_Glyph&#39;&gt;
+
+ if ( prev_rsb_delta - slot-&gt;lsb_delta &gt; 32 )
+ origin_x -= 64;
+ else if ( prev_rsb_delta - slot-&gt;lsb_delta &lt; -31 )
+ origin_x += 64;
+
+ prev_rsb_delta = slot-&gt;rsb_delta;
+
+ &lt;save glyph image, or render glyph, or ...&gt;
+
+ origin_x += slot-&gt;advance.x;
+ endfor
+</pre></div></p>
+<p>If you use strong auto-hinting, you <strong>must</strong> apply these delta values! Otherwise you will experience far too large inter-glyph spacing at small rendering sizes in most cases. Note that it doesn't harm to use the above code for other hinting modes also, since the delta values are zero then.</p>
+<hr>
+
+<h2 id="ft_glyph_metrics">FT_Glyph_Metrics<a class="headerlink" href="#ft_glyph_metrics" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> has been used while loading the glyph, values are expressed in font units instead.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The glyph's width.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The glyph's height.</p>
+</td></tr>
+<tr><td class="val" id="horibearingx">horiBearingX</td><td class="desc">
+<p>Left side bearing for horizontal layout.</p>
+</td></tr>
+<tr><td class="val" id="horibearingy">horiBearingY</td><td class="desc">
+<p>Top side bearing for horizontal layout.</p>
+</td></tr>
+<tr><td class="val" id="horiadvance">horiAdvance</td><td class="desc">
+<p>Advance width for horizontal layout.</p>
+</td></tr>
+<tr><td class="val" id="vertbearingx">vertBearingX</td><td class="desc">
+<p>Left side bearing for vertical layout.</p>
+</td></tr>
+<tr><td class="val" id="vertbearingy">vertBearingY</td><td class="desc">
+<p>Top side bearing for vertical layout. Larger positive values mean further below the vertical glyph origin.</p>
+</td></tr>
+<tr><td class="val" id="vertadvance">vertAdvance</td><td class="desc">
+<p>Advance height for vertical layout. Positive values mean the glyph has a positive advance downward.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>If not disabled with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code>, the values represent dimensions of the hinted glyph (in case hinting is applicable).</p>
+<p>Stroking a glyph with an outside border does not increase <code>horiAdvance</code> or <code>vertAdvance</code>; you have to manually adjust these values to account for the added width and height.</p>
+<p>FreeType doesn't use the &lsquo;VORG&rsquo; table data for CFF fonts because it doesn't have an interface to quickly retrieve the glyph height. The y&nbsp;coordinate of the vertical origin can be simply computed as <code>vertBearingY + height</code> after loading a glyph.</p>
+<hr>
+
+<h2 id="ft_subglyph">FT_SubGlyph<a class="headerlink" href="#ft_subglyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SubGlyphRec_* <b>FT_SubGlyph</b>;
+</pre>
+</div>
+
+<p>The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites).</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-base_interface.html#ft_get_subglyph_info">FT_Get_SubGlyph_Info</a></code>.</p>
+<hr>
+
+<h2 id="ft_bitmap_size">FT_Bitmap_Size<a class="headerlink" href="#ft_bitmap_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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 <code>available_sizes</code> field of <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The vertical distance, in pixels, between two consecutive baselines. It is always positive.</p>
+</td></tr>
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The average width, in pixels, of all glyphs in the strike.</p>
+</td></tr>
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>The nominal size of the strike in 26.6 fractional points. This field is not very useful.</p>
+</td></tr>
+<tr><td class="val" id="x_ppem">x_ppem</td><td class="desc">
+<p>The horizontal ppem (nominal width) in 26.6 fractional pixels.</p>
+</td></tr>
+<tr><td class="val" id="y_ppem">y_ppem</td><td class="desc">
+<p>The vertical ppem (nominal height) in 26.6 fractional pixels.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Windows FNT: The nominal size given in a FNT font is not reliable. If the driver finds it incorrect, it sets <code>size</code> to some calculated values, and <code>x_ppem</code> and <code>y_ppem</code> to the pixel width and height given in the font, respectively.</p>
+<p>TrueType embedded bitmaps: <code>size</code>, <code>width</code>, and <code>height</code> values are not contained in the bitmap strike itself. They are computed from the global font parameters.</p>
+<hr>
+
+<h2 id="ft_init_freetype">FT_Init_FreeType<a class="headerlink" href="#ft_init_freetype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.</p>
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="alibrary">alibrary</td><td class="desc">
+<p>A handle to a new library object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>In case you want to provide your own memory allocating routines, use <code><a href="ft2-module_management.html#ft_new_library">FT_New_Library</a></code> instead, followed by a call to <code><a href="ft2-module_management.html#ft_add_default_modules">FT_Add_Default_Modules</a></code> (or a series of calls to <code><a href="ft2-module_management.html#ft_add_module">FT_Add_Module</a></code>) and <code><a href="ft2-module_management.html#ft_set_default_properties">FT_Set_Default_Properties</a></code>.</p>
+<p>See the documentation of <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> and <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> for multi-threading issues.</p>
+<p>If you need reference-counting (cf. <code><a href="ft2-module_management.html#ft_reference_library">FT_Reference_Library</a></code>), use <code><a href="ft2-module_management.html#ft_new_library">FT_New_Library</a></code> and <code><a href="ft2-module_management.html#ft_done_library">FT_Done_Library</a></code>.</p>
+<p>If compilation option <code>FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES</code> is set, this function reads the <code>FREETYPE_PROPERTIES</code> environment variable to control driver properties. See section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; for more.</p>
+<hr>
+
+<h2 id="ft_done_freetype">FT_Done_FreeType<a class="headerlink" href="#ft_done_freetype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy a given FreeType library object and all of its children, including resources, drivers, faces, sizes, etc.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the target library object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_new_face">FT_New_Face<a class="headerlink" href="#ft_new_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> to open a font by its pathname.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="pathname">pathname</td><td class="desc">
+<p>A path to the font file.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>See <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> for a detailed description of this parameter.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object. If <code>face_index</code> is greater than or equal to zero, it must be non-<code>NULL</code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Use <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code> to destroy the created <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object (along with its slot and sizes).</p>
+<hr>
+
+<h2 id="ft_done_face">FT_Done_Face<a class="headerlink" href="#ft_done_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Discard a given face object, as well as all of its child slots and sizes.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>See the discussion of reference counters in the description of <code><a href="ft2-base_interface.html#ft_reference_face">FT_Reference_Face</a></code>.</p>
+<hr>
+
+<h2 id="ft_reference_face">FT_Reference_Face<a class="headerlink" href="#ft_reference_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Reference_Face</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face );
+</pre>
+</div>
+
+<p>A counter gets initialized to&nbsp;1 at the time an <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> structure is created. This function increments the counter. <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code> then only destroys a face if the counter is&nbsp;1, otherwise it simply decrements the counter.</p>
+<p>This function helps in managing life-cycles of structures that reference <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> objects.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.4.2</p>
+<hr>
+
+<h2 id="ft_new_memory_face">FT_New_Memory_Face<a class="headerlink" href="#ft_new_memory_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> to open a font that has been loaded into memory.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="file_base">file_base</td><td class="desc">
+<p>A pointer to the beginning of the font data.</p>
+</td></tr>
+<tr><td class="val" id="file_size">file_size</td><td class="desc">
+<p>The size of the memory chunk used by the font data.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>See <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> for a detailed description of this parameter.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object. If <code>face_index</code> is greater than or equal to zero, it must be non-<code>NULL</code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You must not deallocate the memory before calling <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+<hr>
+
+<h2 id="ft_face_properties">FT_Face_Properties<a class="headerlink" href="#ft_face_properties" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Face_Properties</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_properties,
+ <a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a>* properties );
+</pre>
+</div>
+
+<p>Set or override certain (library or module-wide) properties on a face-by-face basis. Useful for finer-grained control and avoiding locks on shared structures (threads can modify their own faces as they see fit).</p>
+<p>Contrary to <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code>, this function uses <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> so that you can pass multiple properties to the target face in one call. Note that only a subset of the available properties can be controlled.</p>
+<ul>
+<li>
+<p><code><a href="ft2-parameter_tags.html#ft_param_tag_stem_darkening">FT_PARAM_TAG_STEM_DARKENING</a></code> (stem darkening, corresponding to the property <code>no-stem-darkening</code> provided by the &lsquo;autofit&rsquo;, &lsquo;cff&rsquo;, &lsquo;type1&rsquo;, and &lsquo;t1cid&rsquo; modules; see <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code>).</p>
+</li>
+<li>
+<p><code><a href="ft2-parameter_tags.html#ft_param_tag_lcd_filter_weights">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a></code> (LCD filter weights, corresponding to function <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilterweights">FT_Library_SetLcdFilterWeights</a></code>).</p>
+</li>
+<li>
+<p><code><a href="ft2-parameter_tags.html#ft_param_tag_random_seed">FT_PARAM_TAG_RANDOM_SEED</a></code> (seed value for the CFF, Type&nbsp;1, and CID &lsquo;random&rsquo; operator, corresponding to the <code>random-seed</code> property provided by the &lsquo;cff&rsquo;, &lsquo;type1&rsquo;, and &lsquo;t1cid&rsquo; modules; see <code><a href="ft2-properties.html#random-seed">random-seed</a></code>).</p>
+</li>
+</ul>
+<p>Pass <code>NULL</code> as <code>data</code> in <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> for a given tag to reset the option and use the library or module default again.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="num_properties">num_properties</td><td class="desc">
+<p>The number of properties that follow.</p>
+</td></tr>
+<tr><td class="val" id="properties">properties</td><td class="desc">
+<p>A handle to an <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> array with <code>num_properties</code> elements.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>example</h4>
+
+<p>Here is an example that sets three properties. You must define <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> to make the LCD filter examples work.
+<div class="codehilite"><pre><span></span> FT_Parameter property1;
+ FT_Bool darken_stems = 1;
+
+ FT_Parameter property2;
+ FT_LcdFiveTapFilter custom_weight =
+ { 0x11, 0x44, 0x56, 0x44, 0x11 };
+
+ FT_Parameter property3;
+ FT_Int32 random_seed = 314159265;
+
+ FT_Parameter properties[3] = { property1,
+ property2,
+ property3 };
+
+
+ property1.tag = FT_PARAM_TAG_STEM_DARKENING;
+ property1.data = &amp;darken_stems;
+
+ property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
+ property2.data = custom_weight;
+
+ property3.tag = FT_PARAM_TAG_RANDOM_SEED;
+ property3.data = &amp;random_seed;
+
+ FT_Face_Properties( face, 3, properties );
+</pre></div></p>
+<p>The next example resets a single property to its default value.
+<div class="codehilite"><pre><span></span> FT_Parameter property;
+
+
+ property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
+ property.data = NULL;
+
+ FT_Face_Properties( face, 1, &amp;property );
+</pre></div></p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_open_face">FT_Open_Face<a class="headerlink" href="#ft_open_face" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a face object from a given resource described by <code><a href="ft2-base_interface.html#ft_open_args">FT_Open_Args</a></code>.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="args">args</td><td class="desc">
+<p>A pointer to an <code>FT_Open_Args</code> structure that must be filled by the caller.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value&nbsp;0). Set it to&nbsp;0 if there is only one face in the font file.</p>
+<p>[Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, specifying the named instance index for the current face index (starting with value&nbsp;1; value&nbsp;0 makes FreeType ignore named instances). For non-variation fonts, bits 16-30 are ignored. Assuming that you want to access the third named instance in face&nbsp;4, <code>face_index</code> should be set to 0x00030004. If you want to access face&nbsp;4 without variation handling, simply set <code>face_index</code> to value&nbsp;4.</p>
+<p><code>FT_Open_Face</code> and its siblings can be used to quickly check whether the font format of a given font resource is supported by FreeType. In general, if the <code>face_index</code> argument is negative, the function's return value is&nbsp;0 if the font format is recognized, or non-zero otherwise. The function allocates a more or less empty face handle in <code>*aface</code> (if <code>aface</code> isn't <code>NULL</code>); the only two useful fields in this special case are <code>face-&gt;num_faces</code> and <code>face-&gt;style_flags</code>. For any negative value of <code>face_index</code>, <code>face-&gt;num_faces</code> gives the number of faces within the font file. For the negative value &lsquo;-(N+1)&rsquo; (with &lsquo;N&rsquo; a non-negative 16-bit value), bits 16-30 in <code>face-&gt;style_flags</code> give the number of named instances in face &lsquo;N&rsquo; if we have a variation font (or zero otherwise). After examination, the returned <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> structure should be deallocated with a call to <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object. If <code>face_index</code> is greater than or equal to zero, it must be non-<code>NULL</code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object that can be accessed directly through <code>face-&gt;glyph</code>.</p>
+<p>Each new face object created with this function also owns a default <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object, accessible as <code>face-&gt;size</code>.</p>
+<p>One <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> instance can have multiple face objects, this is, <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> and its siblings can be called multiple times using the same <code>library</code> argument.</p>
+<p>See the discussion of reference counters in the description of <code><a href="ft2-base_interface.html#ft_reference_face">FT_Reference_Face</a></code>.</p>
+<h4>example</h4>
+
+<p>To loop over all faces, use code similar to the following snippet (omitting the error handling).
+<div class="codehilite"><pre><span></span> ...
+ FT_Face face;
+ FT_Long i, num_faces;
+
+
+ error = FT_Open_Face( library, args, -1, &amp;face );
+ if ( error ) { ... }
+
+ num_faces = face-&gt;num_faces;
+ FT_Done_Face( face );
+
+ for ( i = 0; i &lt; num_faces; i++ )
+ {
+ ...
+ error = FT_Open_Face( library, args, i, &amp;face );
+ ...
+ FT_Done_Face( face );
+ ...
+ }
+</pre></div></p>
+<p>To loop over all valid values for <code>face_index</code>, use something similar to the following snippet, again without error handling. The code accesses all faces immediately (thus only a single call of <code>FT_Open_Face</code> within the do-loop), with and without named instances.
+<div class="codehilite"><pre><span></span> ...
+ FT_Face face;
+
+ FT_Long num_faces = 0;
+ FT_Long num_instances = 0;
+
+ FT_Long face_idx = 0;
+ FT_Long instance_idx = 0;
+
+
+ do
+ {
+ FT_Long id = ( instance_idx &lt;&lt; 16 ) + face_idx;
+
+
+ error = FT_Open_Face( library, args, id, &amp;face );
+ if ( error ) { ... }
+
+ num_faces = face-&gt;num_faces;
+ num_instances = face-&gt;style_flags &gt;&gt; 16;
+
+ ...
+
+ FT_Done_Face( face );
+
+ if ( instance_idx &lt; num_instances )
+ instance_idx++;
+ else
+ {
+ face_idx++;
+ instance_idx = 0;
+ }
+
+ } while ( face_idx &lt; num_faces )
+</pre></div></p>
+<hr>
+
+<h2 id="ft_open_args">FT_Open_Args<a class="headerlink" href="#ft_open_args" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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-module_management.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>
+</div>
+
+<p>A structure to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> and <code><a href="ft2-base_interface.html#ft_attach_stream">FT_Attach_Stream</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="flags">flags</td><td class="desc">
+<p>A set of bit flags indicating how to use the structure.</p>
+</td></tr>
+<tr><td class="val" id="memory_base">memory_base</td><td class="desc">
+<p>The first byte of the file in memory.</p>
+</td></tr>
+<tr><td class="val" id="memory_size">memory_size</td><td class="desc">
+<p>The size in bytes of the file in memory.</p>
+</td></tr>
+<tr><td class="val" id="pathname">pathname</td><td class="desc">
+<p>A pointer to an 8-bit file pathname.</p>
+</td></tr>
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>A handle to a source stream object.</p>
+</td></tr>
+<tr><td class="val" id="driver">driver</td><td class="desc">
+<p>This field is exclusively used by <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>; it simply specifies the font driver to use for opening the face. If set to <code>NULL</code>, FreeType tries to load the face with each one of the drivers in its list.</p>
+</td></tr>
+<tr><td class="val" id="num_params">num_params</td><td class="desc">
+<p>The number of extra parameters.</p>
+</td></tr>
+<tr><td class="val" id="params">params</td><td class="desc">
+<p>Extra parameters passed to the font driver when opening a new face.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The stream type is determined by the contents of <code>flags</code> that are tested in the following order by <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>:</p>
+<p>If the <code><a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_MEMORY</a></code> bit is set, assume that this is a memory file of <code>memory_size</code> bytes, located at <code>memory_address</code>. The data are not copied, and the client is responsible for releasing and destroying them <em>after</em> the corresponding call to <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+<p>Otherwise, if the <code><a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_STREAM</a></code> bit is set, assume that a custom input stream <code>stream</code> is used.</p>
+<p>Otherwise, if the <code><a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_PATHNAME</a></code> bit is set, assume that this is a normal file and use <code>pathname</code> to open it.</p>
+<p>If the <code><a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_DRIVER</a></code> bit is set, <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> only tries to open the file with the driver whose handler is in <code>driver</code>.</p>
+<p>If the <code><a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_PARAMS</a></code> bit is set, the parameters given by <code>num_params</code> and <code>params</code> is used. They are ignored otherwise.</p>
+<p>Ideally, both the <code>pathname</code> and <code>params</code> fields should be tagged as &lsquo;const&rsquo;; this is missing for API backward compatibility. In other words, applications should treat them as read-only.</p>
+<hr>
+
+<h2 id="ft_parameter">FT_Parameter<a class="headerlink" href="#ft_parameter" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A simple structure to pass more or less generic parameters to <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> and <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="tag">tag</td><td class="desc">
+<p>A four-byte identification tag.</p>
+</td></tr>
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>A pointer to the parameter data.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The ID and function of parameters are driver-specific. See section &lsquo;<a href="ft2-parameter_tags.html#parameter_tags">Parameter Tags</a>&rsquo; for more information.</p>
+<hr>
+
+<h2 id="ft_attach_file">FT_Attach_File<a class="headerlink" href="#ft_attach_file" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call <code><a href="ft2-base_interface.html#ft_attach_stream">FT_Attach_Stream</a></code> to attach a file.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="filepathname">filepathname</td><td class="desc">
+<p>The pathname.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_attach_stream">FT_Attach_Stream<a class="headerlink" href="#ft_attach_stream" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="parameters">parameters</td><td class="desc">
+<p>A pointer to <code><a href="ft2-base_interface.html#ft_open_args">FT_Open_Args</a></code> that must be filled by the caller.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 or stream attachments.</p>
+<hr>
+
+<h2 id="ft_set_char_size">FT_Set_Char_Size<a class="headerlink" href="#ft_set_char_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call <code><a href="ft2-base_interface.html#ft_request_size">FT_Request_Size</a></code> to request the nominal size (in points).</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="char_width">char_width</td><td class="desc">
+<p>The nominal width, in 26.6 fractional points.</p>
+</td></tr>
+<tr><td class="val" id="char_height">char_height</td><td class="desc">
+<p>The nominal height, in 26.6 fractional points.</p>
+</td></tr>
+<tr><td class="val" id="horz_resolution">horz_resolution</td><td class="desc">
+<p>The horizontal resolution in dpi.</p>
+</td></tr>
+<tr><td class="val" id="vert_resolution">vert_resolution</td><td class="desc">
+<p>The vertical resolution in dpi.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>While this function allows fractional points as input values, the resulting ppem value for the given resolution is always rounded to the nearest integer.</p>
+<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>
+<p>Don't use this function if you are using the FreeType cache API.</p>
+<hr>
+
+<h2 id="ft_set_pixel_sizes">FT_Set_Pixel_Sizes<a class="headerlink" href="#ft_set_pixel_sizes" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call <code><a href="ft2-base_interface.html#ft_request_size">FT_Request_Size</a></code> to request the nominal size (in pixels).</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="pixel_width">pixel_width</td><td class="desc">
+<p>The nominal width, in pixels.</p>
+</td></tr>
+<tr><td class="val" id="pixel_height">pixel_height</td><td class="desc">
+<p>The nominal height, in pixels.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You should not rely on the resulting glyphs matching or being constrained to this pixel size. Refer to <code><a href="ft2-base_interface.html#ft_request_size">FT_Request_Size</a></code> to understand how requested sizes relate to actual sizes.</p>
+<p>Don't use this function if you are using the FreeType cache API.</p>
+<hr>
+
+<h2 id="ft_request_size">FT_Request_Size<a class="headerlink" href="#ft_request_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Resize the scale of the active <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object in a face.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="req">req</td><td class="desc">
+<p>A pointer to a <code><a href="ft2-base_interface.html#ft_size_requestrec">FT_Size_RequestRec</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-base_interface.html#ft_select_size">FT_Select_Size</a></code> instead in that case.</p>
+<p>The relation between the requested size and the resulting glyph size is dependent entirely on how the size is defined in the source face. The font designer chooses the final size of each glyph relative to this size. For more information refer to &lsquo;<a href="https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html">https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html</a>&rsquo;.</p>
+<p>Contrary to <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code>, this function doesn't have special code to normalize zero-valued widths, heights, or resolutions (which lead to errors in most cases).</p>
+<p>Don't use this function if you are using the FreeType cache API.</p>
+<hr>
+
+<h2 id="ft_select_size">FT_Select_Size<a class="headerlink" href="#ft_select_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Select a bitmap strike. To be more precise, this function sets the scaling factors of the active <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object in a face so that bitmaps from this particular strike are taken by <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> and friends.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="strike_index">strike_index</td><td class="desc">
+<p>The index of the bitmap strike in the <code>available_sizes</code> field of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> structure.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>For bitmaps embedded in outline fonts it is common that only a subset of the available glyphs at a given ppem value is available. FreeType silently uses outlines if there is no bitmap for a given glyph index.</p>
+<p>For GX and OpenType variation fonts, a bitmap strike makes sense only if the default instance is active (this is, no glyph variation takes place); otherwise, FreeType simply ignores bitmap strikes. The same is true for all named instances that are different from the default instance.</p>
+<p>Don't use this function if you are using the FreeType cache API.</p>
+<hr>
+
+<h2 id="ft_size_request_type">FT_Size_Request_Type<a class="headerlink" href="#ft_size_request_type" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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_nominal">FT_SIZE_REQUEST_TYPE_NOMINAL</a>,
+ <a href="ft2-base_interface.html#ft_size_request_type_real_dim">FT_SIZE_REQUEST_TYPE_REAL_DIM</a>,
+ <a href="ft2-base_interface.html#ft_size_request_type_bbox">FT_SIZE_REQUEST_TYPE_BBOX</a>,
+ <a href="ft2-base_interface.html#ft_size_request_type_cell">FT_SIZE_REQUEST_TYPE_CELL</a>,
+ <a href="ft2-base_interface.html#ft_size_request_type_scales">FT_SIZE_REQUEST_TYPE_SCALES</a>,
+
+ FT_SIZE_REQUEST_TYPE_MAX
+
+ } <b>FT_Size_Request_Type</b>;
+</pre>
+</div>
+
+<p>An enumeration type that lists the supported size request types, i.e., what input size (in font units) maps to the requested output size (in pixels, as computed from the arguments of <code><a href="ft2-base_interface.html#ft_size_request">FT_Size_Request</a></code>).</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_size_request_type_nominal">FT_SIZE_REQUEST_TYPE_NOMINAL</td><td class="desc">
+<p>The nominal size. The <code>units_per_EM</code> field of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> is used to determine both scaling values.</p>
+<p>This is the standard scaling found in most applications. In particular, use this size request type for TrueType fonts if they provide optical scaling or something similar. Note, however, that <code>units_per_EM</code> is a rather abstract value which bears no relation to the actual size of the glyphs in a font.</p>
+</td></tr>
+<tr><td class="val" id="ft_size_request_type_real_dim">FT_SIZE_REQUEST_TYPE_REAL_DIM</td><td class="desc">
+<p>The real dimension. The sum of the <code>ascender</code> and (minus of) the <code>descender</code> fields of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> is used to determine both scaling values.</p>
+</td></tr>
+<tr><td class="val" id="ft_size_request_type_bbox">FT_SIZE_REQUEST_TYPE_BBOX</td><td class="desc">
+<p>The font bounding box. The width and height of the <code>bbox</code> field of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> are used to determine the horizontal and vertical scaling value, respectively.</p>
+</td></tr>
+<tr><td class="val" id="ft_size_request_type_cell">FT_SIZE_REQUEST_TYPE_CELL</td><td class="desc">
+<p>The <code>max_advance_width</code> field of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as <code><a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a></code> 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><td class="val" id="ft_size_request_type_scales">FT_SIZE_REQUEST_TYPE_SCALES</td><td class="desc">
+<p>Specify the scaling values directly.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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 <code><a href="ft2-base_interface.html#ft_size_metrics">FT_Size_Metrics</a></code> if you wonder how size requesting relates to scaling values.</p>
+<hr>
+
+<h2 id="ft_size_requestrec">FT_Size_RequestRec<a class="headerlink" href="#ft_size_requestrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model a size request.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="type">type</td><td class="desc">
+<p>See <code><a href="ft2-base_interface.html#ft_size_request_type">FT_Size_Request_Type</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The desired width, given as a 26.6 fractional point value (with 72pt = 1in).</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The desired height, given as a 26.6 fractional point value (with 72pt = 1in).</p>
+</td></tr>
+<tr><td class="val" id="horiresolution">horiResolution</td><td class="desc">
+<p>The horizontal resolution (dpi, i.e., pixels per inch). If set to zero, <code>width</code> is treated as a 26.6 fractional <strong>pixel</strong> value, which gets internally rounded to an integer.</p>
+</td></tr>
+<tr><td class="val" id="vertresolution">vertResolution</td><td class="desc">
+<p>The vertical resolution (dpi, i.e., pixels per inch). If set to zero, <code>height</code> is treated as a 26.6 fractional <strong>pixel</strong> value, which gets internally rounded to an integer.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>If <code>width</code> is zero, the horizontal scaling value is set equal to the vertical scaling value, and vice versa.</p>
+<p>If <code>type</code> is <code>FT_SIZE_REQUEST_TYPE_SCALES</code>, <code>width</code> and <code>height</code> are interpreted directly as 16.16 fractional scaling values, without any further modification, and both <code>horiResolution</code> and <code>vertResolution</code> are ignored.</p>
+<hr>
+
+<h2 id="ft_size_request">FT_Size_Request<a class="headerlink" href="#ft_size_request" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_ *<b>FT_Size_Request</b>;
+</pre>
+</div>
+
+<p>A handle to a size request structure.</p>
+<hr>
+
+<h2 id="ft_set_transform">FT_Set_Transform<a class="headerlink" href="#ft_set_transform" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Set the transformation that is applied to glyph images when they are loaded into a glyph slot through <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="matrix">matrix</td><td class="desc">
+<p>A pointer to the transformation's 2x2 matrix. Use <code>NULL</code> for the identity matrix.</p>
+</td></tr>
+<tr><td class="val" id="delta">delta</td><td class="desc">
+<p>A pointer to the translation vector. Use <code>NULL</code> for the null vector.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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 <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code> or <code><a href="ft2-base_interface.html#ft_set_pixel_sizes">FT_Set_Pixel_Sizes</a></code>.</p>
+<p>Note that this also transforms the <code>face.glyph.advance</code> field, but <strong>not</strong> the values in <code>face.glyph.metrics</code>.</p>
+<hr>
+
+<h2 id="ft_load_glyph">FT_Load_Glyph<a class="headerlink" href="#ft_load_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Load a glyph into the glyph slot of a face object.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the target face object where the glyph is loaded.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<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><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>A flag indicating what to load for this glyph. The <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_XXX</a></code> 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>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The loaded glyph may be transformed. See <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code> for the details.</p>
+<p>For subsetted CID-keyed fonts, <code>FT_Err_Invalid_Argument</code> is returned for invalid CID values (this is, for CID values that don't have a corresponding glyph in the font). See the discussion of the <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_CID_KEYED</a></code> flag for more details.</p>
+<p>If you receive <code>FT_Err_Glyph_Too_Big</code>, try getting the glyph outline at EM size, then scale it manually and fill it as a graphics operation.</p>
+<hr>
+
+<h2 id="ft_get_char_index">FT_Get_Char_Index<a class="headerlink" href="#ft_get_char_index" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the glyph index of a given character code. This function uses the currently selected charmap to do the mapping.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="charcode">charcode</td><td class="desc">
+<p>The character code.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
+<h4>note</h4>
+
+<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;. If the first glyph is not named &lsquo;.notdef&rsquo;, then for Type&nbsp;1 and Type&nbsp;42 fonts, &lsquo;.notdef&rsquo; will be moved into the glyph ID&nbsp;0 position, and whatever was there will be moved to the position &lsquo;.notdef&rsquo; had. For Type&nbsp;1 fonts, if there is no &lsquo;.notdef&rsquo; glyph at all, then one will be created at index&nbsp;0 and whatever was there will be moved to the last index -- Type&nbsp;42 fonts are considered invalid under this condition.</p>
+<hr>
+
+<h2 id="ft_get_first_char">FT_Get_First_Char<a class="headerlink" href="#ft_get_first_char" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the first character code in the current charmap of a given face, together with its corresponding glyph index.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="agindex">agindex</td><td class="desc">
+<p>Glyph index of first character code. 0&nbsp;if charmap is empty.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The charmap's first character code.</p>
+<h4>note</h4>
+
+<p>You should use this function together with <code><a href="ft2-base_interface.html#ft_get_next_char">FT_Get_Next_Char</a></code> to parse all character codes available in a given charmap. The code should look like this:
+<div class="codehilite"><pre><span></span> 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></div></p>
+<p>Be aware that character codes can have values up to 0xFFFFFFFF; this might happen for non-Unicode or malformed cmaps. However, even with regular Unicode encoding, so-called &lsquo;last resort fonts&rsquo; (using SFNT cmap format 13, see function <code><a href="ft2-truetype_tables.html#ft_get_cmap_format">FT_Get_CMap_Format</a></code>) normally have entries for all Unicode characters up to 0x1FFFFF, which can cause <em>a lot</em> of iterations.</p>
+<p>Note that <code>*agindex</code> 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 if the value&nbsp;0 is the first valid character code.</p>
+<hr>
+
+<h2 id="ft_get_next_char">FT_Get_Next_Char<a class="headerlink" href="#ft_get_next_char" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the next character code in the current charmap of a given face following the value <code>char_code</code>, as well as the corresponding glyph index.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="char_code">char_code</td><td class="desc">
+<p>The starting character code.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="agindex">agindex</td><td class="desc">
+<p>Glyph index of next character code. 0&nbsp;if charmap is empty.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The charmap's next character code.</p>
+<h4>note</h4>
+
+<p>You should use this function with <code><a href="ft2-base_interface.html#ft_get_first_char">FT_Get_First_Char</a></code> to walk over all character codes available in a given charmap. See the note for that function for a simple code example.</p>
+<p>Note that <code>*agindex</code> is set to&nbsp;0 when there are no more codes in the charmap.</p>
+<hr>
+
+<h2 id="ft_get_name_index">FT_Get_Name_Index<a class="headerlink" href="#ft_get_name_index" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_string">FT_String</a>* glyph_name );
+</pre>
+</div>
+
+<p>Return the glyph index of a given glyph name.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="glyph_name">glyph_name</td><td class="desc">
+<p>The glyph name.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
+<hr>
+
+<h2 id="ft_load_char">FT_Load_Char<a class="headerlink" href="#ft_load_char" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Load a glyph into the glyph slot of a face object, accessed by its character code.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a target face object where the glyph is loaded.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="char_code">char_code</td><td class="desc">
+<p>The glyph's character code, according to the current charmap used in the face.</p>
+</td></tr>
+<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>A flag indicating what to load for this glyph. The <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_XXX</a></code> 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>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function simply calls <code><a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a></code> and <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+<p>Many fonts contain glyphs that can't be loaded by this function since its glyph indices are not listed in any of the font's charmaps.</p>
+<p>If no active cmap is set up (i.e., <code>face-&gt;charmap</code> is zero), the call to <code><a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a></code> is omitted, and the function behaves identically to <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+<hr>
+
+<h2 id="ft_load_target_mode">FT_LOAD_TARGET_MODE<a class="headerlink" href="#ft_load_target_mode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <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>
+</div>
+
+<p>Return the <code><a href="ft2-base_interface.html#ft_render_mode">FT_Render_Mode</a></code> corresponding to a given <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a></code> value.</p>
+<hr>
+
+<h2 id="ft_render_glyph">FT_Render_Glyph<a class="headerlink" href="#ft_render_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="slot">slot</td><td class="desc">
+<p>A handle to the glyph slot containing the image to convert.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="render_mode">render_mode</td><td class="desc">
+<p>The render mode used to render the glyph image into a bitmap. See <code><a href="ft2-base_interface.html#ft_render_mode">FT_Render_Mode</a></code> for a list of possible values.</p>
+<p>If <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_NORMAL</a></code> is used, a previous call of <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> with flag <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code> makes FT_Render_Glyph provide a default blending of colored glyph layers associated with the current glyph slot (provided the font contains such layers) instead of rendering the glyph slot's outline. This is an experimental feature; see <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code> for more information.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>To get meaningful results, font scaling values must be set with functions like <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code> before calling <code>FT_Render_Glyph</code>.</p>
+<p>When FreeType outputs a bitmap of a glyph, it really outputs an alpha coverage map. If a pixel is completely covered by a filled-in outline, the bitmap contains 0xFF at that pixel, meaning that 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% black (or 0% bright). If a pixel is only 50% covered (value 0x80), the pixel is made 50% black (50% bright or a middle shade of grey). 0% covered means 0% black (100% bright or white).</p>
+<p>On high-DPI screens like on smartphones and tablets, the pixels are so small that their chance of being completely covered and therefore completely black are fairly good. On the low-DPI screens, however, the situation is different. The pixels are too large for most of the details of a glyph and shades of gray are the norm rather than the exception.</p>
+<p>This is relevant because all our screens have a second problem: they are not linear. 1&nbsp;+&nbsp;1 is not&nbsp;2. Twice the value does not result in twice the brightness. When a pixel is only 50% covered, the coverage map says 50% black, and this translates to a pixel value of 128 when you use 8&nbsp;bits per channel (0-255). However, this does not translate to 50% brightness for that pixel on our sRGB and gamma&nbsp;2.2 screens. Due to their non-linearity, they dwell longer in the darks and only a pixel value of about 186 results in 50% brightness -- 128 ends up too dark on both bright and dark backgrounds. The net result is that dark text looks burnt-out, pixely and blotchy on bright background, bright text too frail on dark backgrounds, and colored text on colored background (for example, red on green) seems to have dark halos or &lsquo;dirt&rsquo; around it. The situation is especially ugly for diagonal stems like in &lsquo;w&rsquo; glyph shapes where the quality of FreeType's anti-aliasing depends on the correct display of grays. On high-DPI screens where smaller, fully black pixels reign supreme, this doesn't matter, but on our low-DPI screens with all the gray shades, it does. 0% and 100% brightness are the same things in linear and non-linear space, just all the shades in-between aren't.</p>
+<p>The blending function for placing text over a background is
+<div class="codehilite"><pre><span></span> dst = alpha * src + (1 - alpha) * dst ,
+</pre></div></p>
+<p>which is known as the OVER operator.</p>
+<p>To correctly composite an antialiased pixel of a glyph onto a surface,</p>
+<ol>
+<li>
+<p>take the foreground and background colors (e.g., in sRGB space) and apply gamma to get them in a linear space,</p>
+</li>
+<li>
+<p>use OVER to blend the two linear colors using the glyph pixel as the alpha value (remember, the glyph bitmap is an alpha coverage bitmap), and</p>
+</li>
+<li>
+<p>apply inverse gamma to the blended pixel and write it back to the image.</p>
+</li>
+</ol>
+<p>Internal testing at Adobe found that a target inverse gamma of&nbsp;1.8 for step&nbsp;3 gives good results across a wide range of displays with an sRGB gamma curve or a similar one.</p>
+<p>This process can cost performance. There is an approximation that does not need to know about the background color; see <a href="https://bel.fi/alankila/lcd/">https://bel.fi/alankila/lcd/</a> and <a href="https://bel.fi/alankila/lcd/alpcor.html">https://bel.fi/alankila/lcd/alpcor.html</a> for details.</p>
+<p><strong>ATTENTION</strong>: Linear blending is even more important when dealing with subpixel-rendered glyphs to prevent color-fringing! A subpixel-rendered glyph must first be filtered with a filter that gives equal weight to the three color primaries and does not exceed a sum of 0x100, see section &lsquo;<a href="ft2-lcd_rendering.html#lcd_rendering">Subpixel Rendering</a>&rsquo;. Then the only difference to gray linear blending is that subpixel-rendered linear blending is done 3&nbsp;times per pixel: red foreground subpixel to red background subpixel and so on for green and blue.</p>
+<hr>
+
+<h2 id="ft_render_mode">FT_Render_Mode<a class="headerlink" href="#ft_render_mode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Render_Mode_
+ {
+ <a href="ft2-base_interface.html#ft_render_mode_normal">FT_RENDER_MODE_NORMAL</a> = 0,
+ <a href="ft2-base_interface.html#ft_render_mode_light">FT_RENDER_MODE_LIGHT</a>,
+ <a href="ft2-base_interface.html#ft_render_mode_mono">FT_RENDER_MODE_MONO</a>,
+ <a href="ft2-base_interface.html#ft_render_mode_lcd">FT_RENDER_MODE_LCD</a>,
+ <a href="ft2-base_interface.html#ft_render_mode_lcd_v">FT_RENDER_MODE_LCD_V</a>,
+
+ FT_RENDER_MODE_MAX
+
+ } <b>FT_Render_Mode</b>;
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_Render_Mode</b>` values instead */
+#<span class="keyword">define</span> ft_render_mode_normal <a href="ft2-base_interface.html#ft_render_mode_normal">FT_RENDER_MODE_NORMAL</a>
+#<span class="keyword">define</span> ft_render_mode_mono <a href="ft2-base_interface.html#ft_render_mode_mono">FT_RENDER_MODE_MONO</a>
+</pre>
+</div>
+
+<p>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 and embedded bitmaps the <code>bitmap-&gt;pixel_mode</code> field in the <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> structure gives the format of the returned bitmap.</p>
+<p>All modes except <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_MONO</a></code> use 256 levels of opacity, indicating pixel coverage. Use linear alpha blending and gamma correction to correctly render non-monochrome glyph bitmaps onto a surface; see <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_render_mode_normal">FT_RENDER_MODE_NORMAL</td><td class="desc">
+<p>Default render mode; it corresponds to 8-bit anti-aliased bitmaps.</p>
+</td></tr>
+<tr><td class="val" id="ft_render_mode_light">FT_RENDER_MODE_LIGHT</td><td class="desc">
+<p>This is equivalent to <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_NORMAL</a></code>. It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. See <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a></code> for details.</p>
+</td></tr>
+<tr><td class="val" id="ft_render_mode_mono">FT_RENDER_MODE_MONO</td><td class="desc">
+<p>This mode corresponds to 1-bit bitmaps (with 2&nbsp;levels of opacity).</p>
+</td></tr>
+<tr><td class="val" id="ft_render_mode_lcd">FT_RENDER_MODE_LCD</td><td class="desc">
+<p>This mode corresponds to horizontal RGB and BGR subpixel 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 <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD</a></code> mode.</p>
+</td></tr>
+<tr><td class="val" id="ft_render_mode_lcd_v">FT_RENDER_MODE_LCD_V</td><td class="desc">
+<p>This mode corresponds to vertical RGB and BGR subpixel 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 <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD_V</a></code> mode.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Should you define <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> in your <code>ftoption.h</code>, which enables patented ClearType-style rendering, the LCD-optimized glyph bitmaps should be filtered to reduce color fringes inherent to this technology. You can either set up LCD filtering with <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilter">FT_Library_SetLcdFilter</a></code> or <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code>, or do the filtering yourself. The default FreeType LCD rendering technology does not require filtering.</p>
+<p>The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel mode like <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_MONO</a></code>. You can use <code><a href="ft2-bitmap_handling.html#ft_bitmap_convert">FT_Bitmap_Convert</a></code> to transform them into 8-bit pixmaps.</p>
+<hr>
+
+<h2 id="ft_get_kerning">FT_Get_Kerning<a class="headerlink" href="#ft_get_kerning" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the kerning vector between two glyphs of the same face.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr><td class="val" id="left_glyph">left_glyph</td><td class="desc">
+<p>The index of the left glyph in the kern pair.</p>
+</td></tr>
+<tr><td class="val" id="right_glyph">right_glyph</td><td class="desc">
+<p>The index of the right glyph in the kern pair.</p>
+</td></tr>
+<tr><td class="val" id="kern_mode">kern_mode</td><td class="desc">
+<p>See <code><a href="ft2-base_interface.html#ft_kerning_mode">FT_Kerning_Mode</a></code> for more information. Determines the scale and dimension of the returned kerning vector.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="akerning">akerning</td><td class="desc">
+<p>The kerning vector. This is either in font units, fractional pixels (26.6 format), or pixels for scalable formats, and in pixels for fixed-sizes formats.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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>
+<p>Kerning for OpenType fonts implemented in a &lsquo;GPOS&rsquo; table is not supported; use <code><a href="ft2-base_interface.html#ft_has_kerning">FT_HAS_KERNING</a></code> to find out whether a font has data that can be extracted with <code>FT_Get_Kerning</code>.</p>
+<hr>
+
+<h2 id="ft_kerning_mode">FT_Kerning_Mode<a class="headerlink" href="#ft_kerning_mode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Kerning_Mode_
+ {
+ <a href="ft2-base_interface.html#ft_kerning_default">FT_KERNING_DEFAULT</a> = 0,
+ <a href="ft2-base_interface.html#ft_kerning_unfitted">FT_KERNING_UNFITTED</a>,
+ <a href="ft2-base_interface.html#ft_kerning_unscaled">FT_KERNING_UNSCALED</a>
+
+ } <b>FT_Kerning_Mode</b>;
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_Kerning_Mode</b>` values instead */
+#<span class="keyword">define</span> ft_kerning_default <a href="ft2-base_interface.html#ft_kerning_default">FT_KERNING_DEFAULT</a>
+#<span class="keyword">define</span> ft_kerning_unfitted <a href="ft2-base_interface.html#ft_kerning_unfitted">FT_KERNING_UNFITTED</a>
+#<span class="keyword">define</span> ft_kerning_unscaled <a href="ft2-base_interface.html#ft_kerning_unscaled">FT_KERNING_UNSCALED</a>
+</pre>
+</div>
+
+<p>An enumeration to specify the format of kerning values returned by <code><a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a></code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_kerning_default">FT_KERNING_DEFAULT</td><td class="desc">
+<p>Return grid-fitted kerning distances in 26.6 fractional pixels.</p>
+</td></tr>
+<tr><td class="val" id="ft_kerning_unfitted">FT_KERNING_UNFITTED</td><td class="desc">
+<p>Return un-grid-fitted kerning distances in 26.6 fractional pixels.</p>
+</td></tr>
+<tr><td class="val" id="ft_kerning_unscaled">FT_KERNING_UNSCALED</td><td class="desc">
+<p>Return the kerning vector in original font units.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p><code>FT_KERNING_DEFAULT</code> returns full pixel values; it also makes FreeType heuristically scale down kerning distances at small ppem values so that they don't become too big.</p>
+<p>Both <code>FT_KERNING_DEFAULT</code> and <code>FT_KERNING_UNFITTED</code> use the current horizontal scaling factor (as set e.g. with <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code>) to convert font units to pixels.</p>
+<hr>
+
+<h2 id="ft_get_track_kerning">FT_Get_Track_Kerning<a class="headerlink" href="#ft_get_track_kerning" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the track kerning for a given face object at a given size.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr><td class="val" id="point_size">point_size</td><td class="desc">
+<p>The point size in 16.16 fractional points.</p>
+</td></tr>
+<tr><td class="val" id="degree">degree</td><td class="desc">
+<p>The degree of tightness. Increasingly negative values represent tighter track kerning, while increasingly positive values represent looser track kerning. Value zero means no track kerning.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="akerning">akerning</td><td class="desc">
+<p>The kerning in 16.16 fractional points, to be uniformly applied between all glyphs.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Currently, only the Type&nbsp;1 font driver supports track kerning, using data from AFM files (if attached with <code><a href="ft2-base_interface.html#ft_attach_file">FT_Attach_File</a></code> or <code><a href="ft2-base_interface.html#ft_attach_stream">FT_Attach_Stream</a></code>).</p>
+<p>Only very few AFM files come with track kerning data; please refer to Adobe's AFM specification for more details.</p>
+<hr>
+
+<h2 id="ft_get_glyph_name">FT_Get_Glyph_Name<a class="headerlink" href="#ft_get_glyph_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the ASCII name of a given glyph in a face. This only works for those faces where <code><a href="ft2-base_interface.html#ft_has_glyph_names">FT_HAS_GLYPH_NAMES</a></code>(face) returns&nbsp;1.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<p>The glyph index.</p>
+</td></tr>
+<tr><td class="val" id="buffer_max">buffer_max</td><td class="desc">
+<p>The maximum number of bytes available in the buffer.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="buffer">buffer</td><td class="desc">
+<p>A pointer to a target buffer where the name is copied to.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code>buffer</code> 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>Be aware that FreeType reorders glyph indices internally so that glyph index&nbsp;0 always corresponds to the &lsquo;missing glyph&rsquo; (called &lsquo;.notdef&rsquo;).</p>
+<p>This function always returns an error if the config macro <code>FT_CONFIG_OPTION_NO_GLYPH_NAMES</code> is not defined in <code>ftoption.h</code>.</p>
+<hr>
+
+<h2 id="ft_get_postscript_name">FT_Get_Postscript_Name<a class="headerlink" href="#ft_get_postscript_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript, TrueType, and OpenType fonts.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A pointer to the face's PostScript name. <code>NULL</code> if unavailable.</p>
+<h4>note</h4>
+
+<p>The returned pointer is owned by the face and is destroyed with it.</p>
+<p>For variation fonts, this string changes if you select a different instance, and you have to call <code>FT_Get_PostScript_Name</code> again to retrieve it. FreeType follows Adobe TechNote #5902, &lsquo;Generating PostScript Names for Fonts Using OpenType Font Variations&rsquo;.</p>
+<p><a href="https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html">https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html</a></p>
+<p>[Since 2.9] Special PostScript names for named instances are only returned if the named instance is set with <code><a href="ft2-multiple_masters.html#ft_set_named_instance">FT_Set_Named_Instance</a></code> (and the font has corresponding entries in its &lsquo;fvar&rsquo; table). If <code><a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a></code> returns true, the algorithmically derived PostScript name is provided, not looking up special entries for named instances.</p>
+<hr>
+
+<h2 id="ft_charmaprec">FT_CharMapRec<a class="headerlink" href="#ft_charmaprec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The base charmap structure.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the parent face object.</p>
+</td></tr>
+<tr><td class="val" id="encoding">encoding</td><td class="desc">
+<p>An <code><a href="ft2-base_interface.html#ft_encoding">FT_Encoding</a></code> tag identifying the charmap. Use this with <code><a href="ft2-base_interface.html#ft_select_charmap">FT_Select_Charmap</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="platform_id">platform_id</td><td class="desc">
+<p>An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and gets emulated for other formats.</p>
+</td></tr>
+<tr><td class="val" id="encoding_id">encoding_id</td><td class="desc">
+<p>A platform-specific encoding number. This also comes from the TrueType specification and gets emulated similarly.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_select_charmap">FT_Select_Charmap<a class="headerlink" href="#ft_select_charmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Select a given charmap by its encoding tag (as listed in <code>freetype.h</code>).</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="encoding">encoding</td><td class="desc">
+<p>A handle to the selected encoding.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 that 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 <code><a href="ft2-base_interface.html#ft_set_charmap">FT_Set_Charmap</a></code> in this case.</p>
+<hr>
+
+<h2 id="ft_set_charmap">FT_Set_Charmap<a class="headerlink" href="#ft_set_charmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Select a given charmap for character code to glyph index mapping.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="charmap">charmap</td><td class="desc">
+<p>A handle to the selected charmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the <code>face-&gt;charmaps</code> table).</p>
+<p>It also fails if an OpenType type&nbsp;14 charmap is selected (which doesn't map character codes to glyph indices at all).</p>
+<hr>
+
+<h2 id="ft_get_charmap_index">FT_Get_Charmap_Index<a class="headerlink" href="#ft_get_charmap_index" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve index of a given charmap.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="charmap">charmap</td><td class="desc">
+<p>A handle to a charmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The index into the array of character maps within the face to which <code>charmap</code> belongs. If an error occurs, -1 is returned.</p>
+<hr>
+
+<h2 id="ft_get_fstype_flags">FT_Get_FSType_Flags<a class="headerlink" href="#ft_get_fstype_flags" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> )
+ <b>FT_Get_FSType_Flags</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face );
+</pre>
+</div>
+
+<p>Return the <code>fsType</code> flags for a font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The <code>fsType</code> flags, see <code><a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_XXX</a></code>.</p>
+<h4>note</h4>
+
+<p>Use this function rather than directly reading the <code>fs_type</code> field in the <code><a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a></code> structure, which is only guaranteed to return the correct results for Type&nbsp;1 fonts.</p>
+<h4>since</h4>
+
+<p>2.3.8</p>
+<hr>
+
+<h2 id="ft_get_subglyph_info">FT_Get_SubGlyph_Info<a class="headerlink" href="#ft_get_subglyph_info" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a description of a given subglyph. Only use it if <code>glyph-&gt;format</code> is <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_COMPOSITE</a></code>; an error is returned otherwise.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph">glyph</td><td class="desc">
+<p>The source glyph slot.</p>
+</td></tr>
+<tr><td class="val" id="sub_index">sub_index</td><td class="desc">
+<p>The index of the subglyph. Must be less than <code>glyph-&gt;num_subglyphs</code>.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="p_index">p_index</td><td class="desc">
+<p>The glyph index of the subglyph.</p>
+</td></tr>
+<tr><td class="val" id="p_flags">p_flags</td><td class="desc">
+<p>The subglyph flags, see <code><a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_XXX</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="p_arg1">p_arg1</td><td class="desc">
+<p>The subglyph's first argument (if any).</p>
+</td></tr>
+<tr><td class="val" id="p_arg2">p_arg2</td><td class="desc">
+<p>The subglyph's second argument (if any).</p>
+</td></tr>
+<tr><td class="val" id="p_transform">p_transform</td><td class="desc">
+<p>The subglyph transformation (if any).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The values of <code>*p_arg1</code>, <code>*p_arg2</code>, and <code>*p_transform</code> must be interpreted depending on the flags returned in <code>*p_flags</code>. See the OpenType specification for details.</p>
+<p><a href="https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description">https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description</a></p>
+<hr>
+
+<h2 id="ft_face_internal">FT_Face_Internal<a class="headerlink" href="#ft_face_internal" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Face_InternalRec_* <b>FT_Face_Internal</b>;
+</pre>
+</div>
+
+<p>An opaque handle to an <code>FT_Face_InternalRec</code> structure that models the private data of a given <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object.</p>
+<p>This structure might change between releases of FreeType&nbsp;2 and is not generally available to client applications.</p>
+<hr>
+
+<h2 id="ft_size_internal">FT_Size_Internal<a class="headerlink" href="#ft_size_internal" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_InternalRec_* <b>FT_Size_Internal</b>;
+</pre>
+</div>
+
+<p>An opaque handle to an <code>FT_Size_InternalRec</code> structure, used to model private data of a given <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object.</p>
+<hr>
+
+<h2 id="ft_slot_internal">FT_Slot_Internal<a class="headerlink" href="#ft_slot_internal" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Slot_InternalRec_* <b>FT_Slot_Internal</b>;
+</pre>
+</div>
+
+<p>An opaque handle to an <code>FT_Slot_InternalRec</code> structure, used to model private data of a given <code><a href="ft2-base_interface.html#ft_glyphslot">FT_GlyphSlot</a></code> object.</p>
+<hr>
+
+<h2 id="ft_face_flag_xxx">FT_FACE_FLAG_XXX<a class="headerlink" href="#ft_face_flag_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_scalable">FT_FACE_FLAG_SCALABLE</a> ( 1L &lt;&lt; 0 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_fixed_sizes">FT_FACE_FLAG_FIXED_SIZES</a> ( 1L &lt;&lt; 1 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_fixed_width">FT_FACE_FLAG_FIXED_WIDTH</a> ( 1L &lt;&lt; 2 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_sfnt">FT_FACE_FLAG_SFNT</a> ( 1L &lt;&lt; 3 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_horizontal">FT_FACE_FLAG_HORIZONTAL</a> ( 1L &lt;&lt; 4 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_vertical">FT_FACE_FLAG_VERTICAL</a> ( 1L &lt;&lt; 5 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_kerning">FT_FACE_FLAG_KERNING</a> ( 1L &lt;&lt; 6 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_fast_glyphs">FT_FACE_FLAG_FAST_GLYPHS</a> ( 1L &lt;&lt; 7 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_multiple_masters">FT_FACE_FLAG_MULTIPLE_MASTERS</a> ( 1L &lt;&lt; 8 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_glyph_names">FT_FACE_FLAG_GLYPH_NAMES</a> ( 1L &lt;&lt; 9 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_external_stream">FT_FACE_FLAG_EXTERNAL_STREAM</a> ( 1L &lt;&lt; 10 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_hinter">FT_FACE_FLAG_HINTER</a> ( 1L &lt;&lt; 11 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_cid_keyed">FT_FACE_FLAG_CID_KEYED</a> ( 1L &lt;&lt; 12 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_tricky">FT_FACE_FLAG_TRICKY</a> ( 1L &lt;&lt; 13 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_color">FT_FACE_FLAG_COLOR</a> ( 1L &lt;&lt; 14 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_face_flag_variation">FT_FACE_FLAG_VARIATION</a> ( 1L &lt;&lt; 15 )
+</pre>
+</div>
+
+<p>A list of bit flags used in the <code>face_flags</code> field of the <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code> structure. They inform client applications of properties of the corresponding face.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_face_flag_scalable">FT_FACE_FLAG_SCALABLE</td><td class="desc">
+<p>The face contains outline glyphs. Note that a face can contain bitmap strikes also, i.e., a face can have both this flag and <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_FIXED_SIZES</a></code> set.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_fixed_sizes">FT_FACE_FLAG_FIXED_SIZES</td><td class="desc">
+<p>The face contains bitmap strikes. See also the <code>num_fixed_sizes</code> and <code>available_sizes</code> fields of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_fixed_width">FT_FACE_FLAG_FIXED_WIDTH</td><td class="desc">
+<p>The face contains fixed-width characters (like Courier, Lucida, MonoType, etc.).</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_sfnt">FT_FACE_FLAG_SFNT</td><td class="desc">
+<p>The face uses the SFNT storage scheme. For now, this means TrueType and OpenType.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_horizontal">FT_FACE_FLAG_HORIZONTAL</td><td class="desc">
+<p>The face contains horizontal glyph metrics. This should be set for all common formats.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_vertical">FT_FACE_FLAG_VERTICAL</td><td class="desc">
+<p>The face contains vertical glyph metrics. This is only available in some formats, not all of them.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_kerning">FT_FACE_FLAG_KERNING</td><td class="desc">
+<p>The face contains kerning information. If set, the kerning distance can be retrieved using the function <code><a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a></code>. Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the SFNT &lsquo;GPOS&rsquo; table (as present in many OpenType fonts).</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_fast_glyphs">FT_FACE_FLAG_FAST_GLYPHS</td><td class="desc">
+<p>THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_multiple_masters">FT_FACE_FLAG_MULTIPLE_MASTERS</td><td class="desc">
+<p>The face contains multiple masters and is capable of interpolating between them. Supported formats are Adobe MM, TrueType GX, and OpenType variation fonts.</p>
+<p>See section &lsquo;<a href="ft2-multiple_masters.html#multiple_masters">Multiple Masters</a>&rsquo; for API details.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_glyph_names">FT_FACE_FLAG_GLYPH_NAMES</td><td class="desc">
+<p>The face contains glyph names, which can be retrieved using <code><a href="ft2-base_interface.html#ft_get_glyph_name">FT_Get_Glyph_Name</a></code>. Note that some TrueType fonts contain broken glyph name tables. Use the function <code><a href="ft2-type1_tables.html#ft_has_ps_glyph_names">FT_Has_PS_Glyph_Names</a></code> when needed.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_external_stream">FT_FACE_FLAG_EXTERNAL_STREAM</td><td class="desc">
+<p>Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code> is called. Don't read or test this flag.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_hinter">FT_FACE_FLAG_HINTER</td><td class="desc">
+<p>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><td class="val" id="ft_face_flag_cid_keyed">FT_FACE_FLAG_CID_KEYED</td><td class="desc">
+<p>The face is CID-keyed. In that case, the face is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>. Only the CID values for which corresponding glyphs in the subsetted font exist make <code>FT_Load_Glyph</code> return successfully; in all other cases you get an <code>FT_Err_Invalid_Argument</code> error.</p>
+<p>Note that CID-keyed fonts that are in an SFNT wrapper (this is, all OpenType/CFF fonts) don't have this flag set since the glyphs are accessed in the normal way (using contiguous indices); the &lsquo;CID-ness&rsquo; isn't visible to the application.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_tricky">FT_FACE_FLAG_TRICKY</td><td class="desc">
+<p>The face is &lsquo;tricky&rsquo;, this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the old Chinese font <code>mingli.ttf</code> (but not <code>mingliu.ttc</code>) that uses TrueType bytecode instructions to move and scale all of its subglyphs.</p>
+<p>It is not possible to auto-hint such fonts using <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_FORCE_AUTOHINT</a></code>; it will also ignore <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code>. You have to set both <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code> and <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_AUTOHINT</a></code> to really disable hinting; however, you probably never want this except for demonstration purposes.</p>
+<p>Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file <code>ttobjs.c</code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_color">FT_FACE_FLAG_COLOR</td><td class="desc">
+<p>[Since 2.5.1] The face has color glyph tables. See <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code> for more information.</p>
+</td></tr>
+<tr><td class="val" id="ft_face_flag_variation">FT_FACE_FLAG_VARIATION</td><td class="desc">
+<p>[Since 2.9] Set if the current face (or named instance) has been altered with <code><a href="ft2-multiple_masters.html#ft_set_mm_design_coordinates">FT_Set_MM_Design_Coordinates</a></code>, <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code>, or <code><a href="ft2-multiple_masters.html#ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates</a></code>. This flag is unset by a call to <code><a href="ft2-multiple_masters.html#ft_set_named_instance">FT_Set_Named_Instance</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_style_flag_xxx">FT_STYLE_FLAG_XXX<a class="headerlink" href="#ft_style_flag_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_style_flag_italic">FT_STYLE_FLAG_ITALIC</a> ( 1 &lt;&lt; 0 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_style_flag_bold">FT_STYLE_FLAG_BOLD</a> ( 1 &lt;&lt; 1 )
+</pre>
+</div>
+
+<p>A list of bit flags to indicate the style of a given face. These are used in the <code>style_flags</code> field of <code><a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a></code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_style_flag_italic">FT_STYLE_FLAG_ITALIC</td><td class="desc">
+<p>The face style is italic or oblique.</p>
+</td></tr>
+<tr><td class="val" id="ft_style_flag_bold">FT_STYLE_FLAG_BOLD</td><td class="desc">
+<p>The face is bold.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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>
+<hr>
+
+<h2 id="ft_open_xxx">FT_OPEN_XXX<a class="headerlink" href="#ft_open_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_open_memory">FT_OPEN_MEMORY</a> 0x1
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_open_stream">FT_OPEN_STREAM</a> 0x2
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_open_pathname">FT_OPEN_PATHNAME</a> 0x4
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_open_driver">FT_OPEN_DRIVER</a> 0x8
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_open_params">FT_OPEN_PARAMS</a> 0x10
+
+ /* these constants are deprecated; use the corresponding `<b>FT_OPEN_XXX</b>` */
+ /* values instead */
+#<span class="keyword">define</span> ft_open_memory <a href="ft2-base_interface.html#ft_open_memory">FT_OPEN_MEMORY</a>
+#<span class="keyword">define</span> ft_open_stream <a href="ft2-base_interface.html#ft_open_stream">FT_OPEN_STREAM</a>
+#<span class="keyword">define</span> ft_open_pathname <a href="ft2-base_interface.html#ft_open_pathname">FT_OPEN_PATHNAME</a>
+#<span class="keyword">define</span> ft_open_driver <a href="ft2-base_interface.html#ft_open_driver">FT_OPEN_DRIVER</a>
+#<span class="keyword">define</span> ft_open_params <a href="ft2-base_interface.html#ft_open_params">FT_OPEN_PARAMS</a>
+</pre>
+</div>
+
+<p>A list of bit field constants used within the <code>flags</code> field of the <code><a href="ft2-base_interface.html#ft_open_args">FT_Open_Args</a></code> structure.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_open_memory">FT_OPEN_MEMORY</td><td class="desc">
+<p>This is a memory-based stream.</p>
+</td></tr>
+<tr><td class="val" id="ft_open_stream">FT_OPEN_STREAM</td><td class="desc">
+<p>Copy the stream from the <code>stream</code> field.</p>
+</td></tr>
+<tr><td class="val" id="ft_open_pathname">FT_OPEN_PATHNAME</td><td class="desc">
+<p>Create a new input stream from a C&nbsp;path name.</p>
+</td></tr>
+<tr><td class="val" id="ft_open_driver">FT_OPEN_DRIVER</td><td class="desc">
+<p>Use the <code>driver</code> field.</p>
+</td></tr>
+<tr><td class="val" id="ft_open_params">FT_OPEN_PARAMS</td><td class="desc">
+<p>Use the <code>num_params</code> and <code>params</code> fields.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The <code>FT_OPEN_MEMORY</code>, <code>FT_OPEN_STREAM</code>, and <code>FT_OPEN_PATHNAME</code> flags are mutually exclusive.</p>
+<hr>
+
+<h2 id="ft_load_xxx">FT_LOAD_XXX<a class="headerlink" href="#ft_load_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_default">FT_LOAD_DEFAULT</a> 0x0
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_no_scale">FT_LOAD_NO_SCALE</a> ( 1L &lt;&lt; 0 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_no_hinting">FT_LOAD_NO_HINTING</a> ( 1L &lt;&lt; 1 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_render">FT_LOAD_RENDER</a> ( 1L &lt;&lt; 2 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_no_bitmap">FT_LOAD_NO_BITMAP</a> ( 1L &lt;&lt; 3 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_vertical_layout">FT_LOAD_VERTICAL_LAYOUT</a> ( 1L &lt;&lt; 4 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_force_autohint">FT_LOAD_FORCE_AUTOHINT</a> ( 1L &lt;&lt; 5 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_crop_bitmap">FT_LOAD_CROP_BITMAP</a> ( 1L &lt;&lt; 6 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_pedantic">FT_LOAD_PEDANTIC</a> ( 1L &lt;&lt; 7 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_ignore_global_advance_width">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a> ( 1L &lt;&lt; 9 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_no_recurse">FT_LOAD_NO_RECURSE</a> ( 1L &lt;&lt; 10 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_ignore_transform">FT_LOAD_IGNORE_TRANSFORM</a> ( 1L &lt;&lt; 11 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_monochrome">FT_LOAD_MONOCHROME</a> ( 1L &lt;&lt; 12 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_linear_design">FT_LOAD_LINEAR_DESIGN</a> ( 1L &lt;&lt; 13 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_no_autohint">FT_LOAD_NO_AUTOHINT</a> ( 1L &lt;&lt; 15 )
+ /* Bits 16-19 are used by `FT_LOAD_TARGET_` */
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_color">FT_LOAD_COLOR</a> ( 1L &lt;&lt; 20 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_compute_metrics">FT_LOAD_COMPUTE_METRICS</a> ( 1L &lt;&lt; 21 )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_bitmap_metrics_only">FT_LOAD_BITMAP_METRICS_ONLY</a> ( 1L &lt;&lt; 22 )
+</pre>
+</div>
+
+<p>A list of bit field constants for <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> to indicate what kind of operations to perform during glyph loading.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_load_default">FT_LOAD_DEFAULT</td><td class="desc">
+<p>Corresponding to&nbsp;0, this value is used as the default glyph load operation. In this case, the following happens:</p>
+<ol>
+<li><p>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>
+</li>
+<li><p>If no embedded bitmap is searched for or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then &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>
+</li>
+</ol>
+<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><td class="val" id="ft_load_no_scale">FT_LOAD_NO_SCALE</td><td class="desc">
+<p>Don't scale the loaded outline glyph but keep it in font units.</p>
+<p>This flag implies <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code> and <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_BITMAP</a></code>, and unsets <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a></code>.</p>
+<p>If the font is &lsquo;tricky&rsquo; (see <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_TRICKY</a></code> for more), using <code>FT_LOAD_NO_SCALE</code> usually yields meaningless outlines because the subglyphs must be scaled and positioned with hinting instructions. This can be solved by loading the font without <code>FT_LOAD_NO_SCALE</code> and setting the character size to <code>font-&gt;units_per_EM</code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_no_hinting">FT_LOAD_NO_HINTING</td><td class="desc">
+<p>Disable hinting. This generally generates &lsquo;blurrier&rsquo; bitmap glyphs when the glyph are rendered in any of the anti-aliased modes. See also the note below.</p>
+<p>This flag is implied by <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_render">FT_LOAD_RENDER</td><td class="desc">
+<p>Call <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code> after the glyph is loaded. By default, the glyph is rendered in <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_NORMAL</a></code> mode. This can be overridden by <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a></code> or <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_MONOCHROME</a></code>.</p>
+<p>This flag is unset by <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_no_bitmap">FT_LOAD_NO_BITMAP</td><td class="desc">
+<p>Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag.</p>
+<p><code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> always sets this flag.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_vertical_layout">FT_LOAD_VERTICAL_LAYOUT</td><td class="desc">
+<p>Load the glyph for vertical text layout. In particular, the <code>advance</code> value in the <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> structure is set to the <code>vertAdvance</code> value of the <code>metrics</code> field.</p>
+<p>In case <code><a href="ft2-base_interface.html#ft_has_vertical">FT_HAS_VERTICAL</a></code> doesn't return true, you shouldn't use this flag currently. Reason is that in this case vertical metrics get synthesized, and those values are not always consistent across various font formats.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_force_autohint">FT_LOAD_FORCE_AUTOHINT</td><td class="desc">
+<p>Prefer the auto-hinter over the font's native hinter. See also the note below.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_pedantic">FT_LOAD_PEDANTIC</td><td class="desc">
+<p>Make the font driver perform pedantic verifications during glyph loading and hinting. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also.</p>
+<p>In particular, errors from the TrueType bytecode engine are not passed to the application if this flag is not set; this might result in partially hinted or distorted glyphs in case a glyph's bytecode is buggy.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_no_recurse">FT_LOAD_NO_RECURSE</td><td class="desc">
+<p>Don't load composite glyphs recursively. Instead, the font driver fills the <code>num_subglyph</code> and <code>subglyphs</code> values of the glyph slot; it also sets <code>glyph-&gt;format</code> to <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_COMPOSITE</a></code>. The description of subglyphs can then be accessed with <code><a href="ft2-base_interface.html#ft_get_subglyph_info">FT_Get_SubGlyph_Info</a></code>.</p>
+<p>Don't use this flag for retrieving metrics information since some font drivers only return rudimentary data.</p>
+<p>This flag implies <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> and <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_IGNORE_TRANSFORM</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_ignore_transform">FT_LOAD_IGNORE_TRANSFORM</td><td class="desc">
+<p>Ignore the transform matrix set by <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_monochrome">FT_LOAD_MONOCHROME</td><td class="desc">
+<p>This flag is used with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a></code> 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 rather use <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_MONO</a></code> so that the monochrome-optimized hinting algorithm is used.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_linear_design">FT_LOAD_LINEAR_DESIGN</td><td class="desc">
+<p>Keep <code>linearHoriAdvance</code> and <code>linearVertAdvance</code> fields of <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> in font units. See <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> for details.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_no_autohint">FT_LOAD_NO_AUTOHINT</td><td class="desc">
+<p>Disable the auto-hinter. See also the note below.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_color">FT_LOAD_COLOR</td><td class="desc">
+<p>Load colored glyphs. There are slight differences depending on the font format.</p>
+<p>[Since 2.5] Load embedded color bitmap images. The resulting color bitmaps, if available, will have the <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_BGRA</a></code> format, with pre-multiplied color channels. If the flag is not set and color bitmaps are found, they are converted to 256-level gray bitmaps, using the <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY</a></code> format.</p>
+<p>[Since 2.10, experimental] If the glyph index contains an entry in the face's &lsquo;COLR&rsquo; table with a &lsquo;CPAL&rsquo; palette table (as defined in the OpenType specification), make <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code> provide a default blending of the color glyph layers associated with the glyph index, using the same bitmap format as embedded color bitmap images. This is mainly for convenience; for full control of color layers use <code><a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a></code> and FreeType's color functions like <code><a href="ft2-color_management.html#ft_palette_select">FT_Palette_Select</a></code> instead of setting <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code> for rendering so that the client application can handle blending by itself.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_compute_metrics">FT_LOAD_COMPUTE_METRICS</td><td class="desc">
+<p>[Since 2.6.1] Compute glyph metrics from the glyph data, without the use of bundled metrics tables (for example, the &lsquo;hdmx&rsquo; table in TrueType fonts). This flag is mainly used by font validating or font editing applications, which need to ignore, verify, or edit those tables.</p>
+<p>Currently, this flag is only implemented for TrueType fonts.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_bitmap_metrics_only">FT_LOAD_BITMAP_METRICS_ONLY</td><td class="desc">
+<p>[Since 2.7.1] Request loading of the metrics and bitmap image information of a (possibly embedded) bitmap glyph without allocating or copying the bitmap image data itself. No effect if the target glyph is not a bitmap image.</p>
+<p>This flag unsets <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_crop_bitmap">FT_LOAD_CROP_BITMAP</td><td class="desc">
+<p>Ignored. Deprecated.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_ignore_global_advance_width">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</td><td class="desc">
+<p>Ignored. Deprecated.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>By default, hinting is enabled and the font's native hinter (see <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_HINTER</a></code>) is preferred over the auto-hinter. You can disable hinting by setting <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a></code> or change the precedence by setting <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_FORCE_AUTOHINT</a></code>. You can also set <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_AUTOHINT</a></code> in case you don't want the auto-hinter to be used at all.</p>
+<p>See the description of <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_TRICKY</a></code> for a special exception (affecting only a handful of Asian fonts).</p>
+<p>Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a></code> for details.</p>
+<p>Note that the auto-hinter needs a valid Unicode cmap (either a native one or synthesized by FreeType) for producing correct results. If a font provides an incorrect mapping (for example, assigning the character code U+005A, LATIN CAPITAL LETTER&nbsp;Z, to a glyph depicting a mathematical integral sign), the auto-hinter might produce useless results.</p>
+<hr>
+
+<h2 id="ft_load_target_xxx">FT_LOAD_TARGET_XXX<a class="headerlink" href="#ft_load_target_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> FT_LOAD_TARGET_( x ) ( (<a href="ft2-basic_types.html#ft_int32">FT_Int32</a>)( (x) &amp; 15 ) &lt;&lt; 16 )
+
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_target_normal">FT_LOAD_TARGET_NORMAL</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#ft_render_mode_normal">FT_RENDER_MODE_NORMAL</a> )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_target_light">FT_LOAD_TARGET_LIGHT</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#ft_render_mode_light">FT_RENDER_MODE_LIGHT</a> )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_target_mono">FT_LOAD_TARGET_MONO</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#ft_render_mode_mono">FT_RENDER_MODE_MONO</a> )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_target_lcd">FT_LOAD_TARGET_LCD</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#ft_render_mode_lcd">FT_RENDER_MODE_LCD</a> )
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_load_target_lcd_v">FT_LOAD_TARGET_LCD_V</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#ft_render_mode_lcd_v">FT_RENDER_MODE_LCD_V</a> )
+</pre>
+</div>
+
+<p>A list of values to select a specific hinting algorithm for the hinter. You should OR one of these values to your <code>load_flags</code> when calling <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+<p>Note that a font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_FORCE_AUTOHINT</a></code> to ensure that the auto-hinter is used.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_load_target_normal">FT_LOAD_TARGET_NORMAL</td><td class="desc">
+<p>The default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_MONO</a></code> instead.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_target_light">FT_LOAD_TARGET_LIGHT</td><td class="desc">
+<p>A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by FreeType's new CFF engine or Microsoft's ClearType font renderer. This preserves inter-glyph spacing in horizontal text. The snapping is done either by the native font driver, if the driver itself and the font support it, or by the auto-hinter.</p>
+<p>Advance widths are rounded to integer values; however, using the <code>lsb_delta</code> and <code>rsb_delta</code> fields of <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code>, it is possible to get fractional advance widths for subpixel positioning (which is recommended to use).</p>
+<p>If configuration option <code>AF_CONFIG_OPTION_TT_SIZE_METRICS</code> is active, TrueType-like metrics are used to make this mode behave similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 (inclusive).</p>
+</td></tr>
+<tr><td class="val" id="ft_load_target_mono">FT_LOAD_TARGET_MONO</td><td class="desc">
+<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>
+<p>Note that for outline fonts only the TrueType font driver has proper monochrome hinting support, provided the TTFs contain hints for B/W rendering (which most fonts no longer provide). If these conditions are not met it is very likely that you get ugly results at smaller sizes.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_target_lcd">FT_LOAD_TARGET_LCD</td><td class="desc">
+<p>A variant of <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_LIGHT</a></code> optimized for horizontally decimated LCD displays.</p>
+</td></tr>
+<tr><td class="val" id="ft_load_target_lcd_v">FT_LOAD_TARGET_LCD_V</td><td class="desc">
+<p>A variant of <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_NORMAL</a></code> optimized for vertically decimated LCD displays.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>You should use only <em>one</em> of the <code>FT_LOAD_TARGET_XXX</code> values in your <code>load_flags</code>. They can't be ORed.</p>
+<p>If <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a></code> is also set, the glyph is rendered in the corresponding mode (i.e., the mode that matches the used algorithm best). An exception is <code>FT_LOAD_TARGET_MONO</code> since it implies <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_MONOCHROME</a></code>.</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
+<div class="codehilite"><pre><span></span> FT_Load_Glyph( face, glyph_index,
+ load_flags | FT_LOAD_TARGET_LIGHT );
+
+ FT_Render_Glyph( face-&gt;glyph, FT_RENDER_MODE_LCD );
+</pre></div></p>
+<p>In general, you should stick with one rendering mode. For example, switching between <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_NORMAL</a></code> and <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_MONO</a></code> enforces a lot of recomputation for TrueType fonts, which is slow. Another reason is caching: Selecting a different mode usually causes changes in both the outlines and the rasterized bitmaps; it is thus necessary to empty the cache after a mode switch to avoid false hits.</p>
+<hr>
+
+<h2 id="ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_XXX<a class="headerlink" href="#ft_subglyph_flag_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_args_are_words">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a> 1
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_args_are_xy_values">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a> 2
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_round_xy_to_grid">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a> 4
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_scale">FT_SUBGLYPH_FLAG_SCALE</a> 8
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_xy_scale">FT_SUBGLYPH_FLAG_XY_SCALE</a> 0x40
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_2x2">FT_SUBGLYPH_FLAG_2X2</a> 0x80
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_subglyph_flag_use_my_metrics">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a> 0x200
+</pre>
+</div>
+
+<p>A list of constants describing subglyphs. Please refer to the &lsquo;glyf&rsquo; table description in the OpenType specification for the meaning of the various flags (which get synthesized for non-OpenType subglyphs).</p>
+<p><a href="https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description">https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description</a></p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_subglyph_flag_args_are_words">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_args_are_xy_values">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_round_xy_to_grid">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_scale">FT_SUBGLYPH_FLAG_SCALE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_xy_scale">FT_SUBGLYPH_FLAG_XY_SCALE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_2x2">FT_SUBGLYPH_FLAG_2X2</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_subglyph_flag_use_my_metrics">FT_SUBGLYPH_FLAG_USE_MY_METRICS</td><td class="desc">
+
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_fstype_xxx">FT_FSTYPE_XXX<a class="headerlink" href="#ft_fstype_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_installable_embedding">FT_FSTYPE_INSTALLABLE_EMBEDDING</a> 0x0000
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_restricted_license_embedding">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a> 0x0002
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_preview_and_print_embedding">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a> 0x0004
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_editable_embedding">FT_FSTYPE_EDITABLE_EMBEDDING</a> 0x0008
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_no_subsetting">FT_FSTYPE_NO_SUBSETTING</a> 0x0100
+#<span class="keyword">define</span> <a href="ft2-base_interface.html#ft_fstype_bitmap_embedding_only">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a> 0x0200
+</pre>
+</div>
+
+<p>A list of bit flags used in the <code>fsType</code> field of the OS/2 table in a TrueType or OpenType font and the <code>FSType</code> entry in a PostScript font. These bit flags are returned by <code><a href="ft2-base_interface.html#ft_get_fstype_flags">FT_Get_FSType_Flags</a></code>; they inform client applications of embedding and subsetting restrictions associated with a font.</p>
+<p>See <a href="https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf">https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf</a> for more details.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_fstype_installable_embedding">FT_FSTYPE_INSTALLABLE_EMBEDDING</td><td class="desc">
+<p>Fonts with no fsType bit set may be embedded and permanently installed on the remote system by an application.</p>
+</td></tr>
+<tr><td class="val" id="ft_fstype_restricted_license_embedding">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</td><td class="desc">
+<p>Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the font software copyright owner.</p>
+</td></tr>
+<tr><td class="val" id="ft_fstype_preview_and_print_embedding">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</td><td class="desc">
+<p>The font may be embedded and temporarily loaded on the remote system. Documents containing Preview &amp; Print fonts must be opened &lsquo;read-only&rsquo;; no edits can be applied to the document.</p>
+</td></tr>
+<tr><td class="val" id="ft_fstype_editable_embedding">FT_FSTYPE_EDITABLE_EMBEDDING</td><td class="desc">
+<p>The font may be embedded but must only be installed temporarily on other systems. In contrast to Preview &amp; Print fonts, documents containing editable fonts may be opened for reading, editing is permitted, and changes may be saved.</p>
+</td></tr>
+<tr><td class="val" id="ft_fstype_no_subsetting">FT_FSTYPE_NO_SUBSETTING</td><td class="desc">
+<p>The font may not be subsetted prior to embedding.</p>
+</td></tr>
+<tr><td class="val" id="ft_fstype_bitmap_embedding_only">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</td><td class="desc">
+<p>Only bitmaps contained in the font may be embedded; no outline data may be embedded. If there are no bitmaps available in the font, then the font is unembeddable.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The flags are ORed together, thus more than a single value can be returned.</p>
+<p>While the <code>fsType</code> flags can indicate that a font may be embedded, a license with the font vendor may be separately required to use the font in this way.</p>
+<hr>
+
+<h2 id="ft_has_fast_glyphs">FT_HAS_FAST_GLYPHS<a class="headerlink" href="#ft_has_fast_glyphs" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_HAS_FAST_GLYPHS</b>( face ) 0
+</pre>
+</div>
+
+<p>Deprecated.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Basic Data Types
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Unicode Variation Sequences
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-basic_types.html b/freetype/docs/reference/site/ft2-basic_types.html
new file mode 100644
index 00000000..478a4d37
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-basic_types.html
@@ -0,0 +1,2422 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Basic Data Types - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#basic-data-types" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Basic Data Types
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Basic Data Types
+ </label>
+
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link md-nav__link--active">
+ Basic Data Types
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_byte" title="FT_Byte" class="md-nav__link">
+ FT_Byte
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bytes" title="FT_Bytes" class="md-nav__link">
+ FT_Bytes
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_char" title="FT_Char" class="md-nav__link">
+ FT_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int" title="FT_Int" class="md-nav__link">
+ FT_Int
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint" title="FT_UInt" class="md-nav__link">
+ FT_UInt
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int16" title="FT_Int16" class="md-nav__link">
+ FT_Int16
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint16" title="FT_UInt16" class="md-nav__link">
+ FT_UInt16
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int32" title="FT_Int32" class="md-nav__link">
+ FT_Int32
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint32" title="FT_UInt32" class="md-nav__link">
+ FT_UInt32
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int64" title="FT_Int64" class="md-nav__link">
+ FT_Int64
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint64" title="FT_UInt64" class="md-nav__link">
+ FT_UInt64
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_short" title="FT_Short" class="md-nav__link">
+ FT_Short
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ushort" title="FT_UShort" class="md-nav__link">
+ FT_UShort
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_long" title="FT_Long" class="md-nav__link">
+ FT_Long
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ulong" title="FT_ULong" class="md-nav__link">
+ FT_ULong
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bool" title="FT_Bool" class="md-nav__link">
+ FT_Bool
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_offset" title="FT_Offset" class="md-nav__link">
+ FT_Offset
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ptrdist" title="FT_PtrDist" class="md-nav__link">
+ FT_PtrDist
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_string" title="FT_String" class="md-nav__link">
+ FT_String
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_tag" title="FT_Tag" class="md-nav__link">
+ FT_Tag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_error" title="FT_Error" class="md-nav__link">
+ FT_Error
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fixed" title="FT_Fixed" class="md-nav__link">
+ FT_Fixed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pointer" title="FT_Pointer" class="md-nav__link">
+ FT_Pointer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pos" title="FT_Pos" class="md-nav__link">
+ FT_Pos
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector" title="FT_Vector" class="md-nav__link">
+ FT_Vector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bbox" title="FT_BBox" class="md-nav__link">
+ FT_BBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix" title="FT_Matrix" class="md-nav__link">
+ FT_Matrix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fword" title="FT_FWord" class="md-nav__link">
+ FT_FWord
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ufword" title="FT_UFWord" class="md-nav__link">
+ FT_UFWord
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_f2dot14" title="FT_F2Dot14" class="md-nav__link">
+ FT_F2Dot14
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_unitvector" title="FT_UnitVector" class="md-nav__link">
+ FT_UnitVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_f26dot6" title="FT_F26Dot6" class="md-nav__link">
+ FT_F26Dot6
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_data" title="FT_Data" class="md-nav__link">
+ FT_Data
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_make_tag" title="FT_MAKE_TAG" class="md-nav__link">
+ FT_MAKE_TAG
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_generic" title="FT_Generic" class="md-nav__link">
+ FT_Generic
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_generic_finalizer" title="FT_Generic_Finalizer" class="md-nav__link">
+ FT_Generic_Finalizer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap" title="FT_Bitmap" class="md-nav__link">
+ FT_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pixel_mode" title="FT_Pixel_Mode" class="md-nav__link">
+ FT_Pixel_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_format" title="FT_Glyph_Format" class="md-nav__link">
+ FT_Glyph_Format
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_image_tag" title="FT_IMAGE_TAG" class="md-nav__link">
+ FT_IMAGE_TAG
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_byte" title="FT_Byte" class="md-nav__link">
+ FT_Byte
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bytes" title="FT_Bytes" class="md-nav__link">
+ FT_Bytes
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_char" title="FT_Char" class="md-nav__link">
+ FT_Char
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int" title="FT_Int" class="md-nav__link">
+ FT_Int
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint" title="FT_UInt" class="md-nav__link">
+ FT_UInt
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int16" title="FT_Int16" class="md-nav__link">
+ FT_Int16
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint16" title="FT_UInt16" class="md-nav__link">
+ FT_UInt16
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int32" title="FT_Int32" class="md-nav__link">
+ FT_Int32
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint32" title="FT_UInt32" class="md-nav__link">
+ FT_UInt32
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_int64" title="FT_Int64" class="md-nav__link">
+ FT_Int64
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_uint64" title="FT_UInt64" class="md-nav__link">
+ FT_UInt64
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_short" title="FT_Short" class="md-nav__link">
+ FT_Short
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ushort" title="FT_UShort" class="md-nav__link">
+ FT_UShort
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_long" title="FT_Long" class="md-nav__link">
+ FT_Long
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ulong" title="FT_ULong" class="md-nav__link">
+ FT_ULong
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bool" title="FT_Bool" class="md-nav__link">
+ FT_Bool
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_offset" title="FT_Offset" class="md-nav__link">
+ FT_Offset
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ptrdist" title="FT_PtrDist" class="md-nav__link">
+ FT_PtrDist
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_string" title="FT_String" class="md-nav__link">
+ FT_String
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_tag" title="FT_Tag" class="md-nav__link">
+ FT_Tag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_error" title="FT_Error" class="md-nav__link">
+ FT_Error
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fixed" title="FT_Fixed" class="md-nav__link">
+ FT_Fixed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pointer" title="FT_Pointer" class="md-nav__link">
+ FT_Pointer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pos" title="FT_Pos" class="md-nav__link">
+ FT_Pos
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector" title="FT_Vector" class="md-nav__link">
+ FT_Vector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bbox" title="FT_BBox" class="md-nav__link">
+ FT_BBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix" title="FT_Matrix" class="md-nav__link">
+ FT_Matrix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_fword" title="FT_FWord" class="md-nav__link">
+ FT_FWord
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ufword" title="FT_UFWord" class="md-nav__link">
+ FT_UFWord
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_f2dot14" title="FT_F2Dot14" class="md-nav__link">
+ FT_F2Dot14
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_unitvector" title="FT_UnitVector" class="md-nav__link">
+ FT_UnitVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_f26dot6" title="FT_F26Dot6" class="md-nav__link">
+ FT_F26Dot6
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_data" title="FT_Data" class="md-nav__link">
+ FT_Data
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_make_tag" title="FT_MAKE_TAG" class="md-nav__link">
+ FT_MAKE_TAG
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_generic" title="FT_Generic" class="md-nav__link">
+ FT_Generic
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_generic_finalizer" title="FT_Generic_Finalizer" class="md-nav__link">
+ FT_Generic_Finalizer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap" title="FT_Bitmap" class="md-nav__link">
+ FT_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pixel_mode" title="FT_Pixel_Mode" class="md-nav__link">
+ FT_Pixel_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_format" title="FT_Glyph_Format" class="md-nav__link">
+ FT_Glyph_Format
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_image_tag" title="FT_IMAGE_TAG" class="md-nav__link">
+ FT_IMAGE_TAG
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Basic Data Types</p>
+<hr />
+<h1 id="basic-data-types">Basic Data Types<a class="headerlink" href="#basic-data-types" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_byte">FT_Byte<a class="headerlink" href="#ft_byte" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Byte</b>;
+</pre>
+</div>
+
+<p>A simple typedef for the <em>unsigned</em> char type.</p>
+<hr>
+
+<h2 id="ft_bytes">FT_Bytes<a class="headerlink" href="#ft_bytes" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A typedef for constant memory areas.</p>
+<hr>
+
+<h2 id="ft_char">FT_Char<a class="headerlink" href="#ft_char" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">char</span> <b>FT_Char</b>;
+</pre>
+</div>
+
+<p>A simple typedef for the <em>signed</em> char type.</p>
+<hr>
+
+<h2 id="ft_int">FT_Int<a class="headerlink" href="#ft_int" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">int</span> <b>FT_Int</b>;
+</pre>
+</div>
+
+<p>A typedef for the int type.</p>
+<hr>
+
+<h2 id="ft_uint">FT_UInt<a class="headerlink" href="#ft_uint" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <b>FT_UInt</b>;
+</pre>
+</div>
+
+<p>A typedef for the unsigned int type.</p>
+<hr>
+
+<h2 id="ft_int16">FT_Int16<a class="headerlink" href="#ft_int16" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Int16</b>;
+</pre>
+</div>
+
+<p>A typedef for a 16bit signed integer type.</p>
+<hr>
+
+<h2 id="ft_uint16">FT_UInt16<a class="headerlink" href="#ft_uint16" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UInt16</b>;
+</pre>
+</div>
+
+<p>A typedef for a 16bit unsigned integer type.</p>
+<hr>
+
+<h2 id="ft_int32">FT_Int32<a class="headerlink" href="#ft_int32" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int32</b>;
+</pre>
+</div>
+
+<p>A typedef for a 32bit signed integer type. The size depends on the configuration.</p>
+<hr>
+
+<h2 id="ft_uint32">FT_UInt32<a class="headerlink" href="#ft_uint32" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt32</b>;
+</pre>
+</div>
+
+<hr>
+
+<h2 id="ft_int64">FT_Int64<a class="headerlink" href="#ft_int64" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int64</b>;
+</pre>
+</div>
+
+<hr>
+
+<h2 id="ft_uint64">FT_UInt64<a class="headerlink" href="#ft_uint64" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt64</b>;
+</pre>
+</div>
+
+<hr>
+
+<h2 id="ft_short">FT_Short<a class="headerlink" href="#ft_short" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Short</b>;
+</pre>
+</div>
+
+<p>A typedef for signed short.</p>
+<hr>
+
+<h2 id="ft_ushort">FT_UShort<a class="headerlink" href="#ft_ushort" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UShort</b>;
+</pre>
+</div>
+
+<p>A typedef for unsigned short.</p>
+<hr>
+
+<h2 id="ft_long">FT_Long<a class="headerlink" href="#ft_long" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Long</b>;
+</pre>
+</div>
+
+<p>A typedef for signed long.</p>
+<hr>
+
+<h2 id="ft_ulong">FT_ULong<a class="headerlink" href="#ft_ulong" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span> <b>FT_ULong</b>;
+</pre>
+</div>
+
+<p>A typedef for unsigned long.</p>
+<hr>
+
+<h2 id="ft_bool">FT_Bool<a class="headerlink" href="#ft_bool" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Bool</b>;
+</pre>
+</div>
+
+<p>A typedef of unsigned char, used for simple booleans. As usual, values 1 and&nbsp;0 represent true and false, respectively.</p>
+<hr>
+
+<h2 id="ft_offset">FT_Offset<a class="headerlink" href="#ft_offset" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> size_t <b>FT_Offset</b>;
+</pre>
+</div>
+
+<p>This is equivalent to the ANSI&nbsp;C <code>size_t</code> type, i.e., the largest <em>unsigned</em> integer type used to express a file size or position, or a memory block size.</p>
+<hr>
+
+<h2 id="ft_ptrdist">FT_PtrDist<a class="headerlink" href="#ft_ptrdist" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> ft_ptrdiff_t <b>FT_PtrDist</b>;
+</pre>
+</div>
+
+<p>This is equivalent to the ANSI&nbsp;C <code>ptrdiff_t</code> type, i.e., the largest <em>signed</em> integer type used to express the distance between two pointers.</p>
+<hr>
+
+<h2 id="ft_string">FT_String<a class="headerlink" href="#ft_string" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">char</span> <b>FT_String</b>;
+</pre>
+</div>
+
+<p>A simple typedef for the char type, usually used for strings.</p>
+<hr>
+
+<h2 id="ft_tag">FT_Tag<a class="headerlink" href="#ft_tag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#ft_uint32">FT_UInt32</a> <b>FT_Tag</b>;
+</pre>
+</div>
+
+<p>A typedef for 32-bit tags (as used in the SFNT format).</p>
+<hr>
+
+<h2 id="ft_error">FT_Error<a class="headerlink" href="#ft_error" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">int</span> <b>FT_Error</b>;
+</pre>
+</div>
+
+<p>The FreeType error code type. A value of&nbsp;0 is always interpreted as a successful operation.</p>
+<hr>
+
+<h2 id="ft_fixed">FT_Fixed<a class="headerlink" href="#ft_fixed" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Fixed</b>;
+</pre>
+</div>
+
+<p>This type is used to store 16.16 fixed-point values, like scaling values or matrix coefficients.</p>
+<hr>
+
+<h2 id="ft_pointer">FT_Pointer<a class="headerlink" href="#ft_pointer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">void</span>* <b>FT_Pointer</b>;
+</pre>
+</div>
+
+<p>A simple typedef for a typeless pointer.</p>
+<hr>
+
+<h2 id="ft_pos">FT_Pos<a class="headerlink" href="#ft_pos" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Pos</b>;
+</pre>
+</div>
+
+<p>The type FT_Pos is used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16.16, or 26.6 fixed-point pixel coordinates.</p>
+<hr>
+
+<h2 id="ft_vector">FT_Vector<a class="headerlink" href="#ft_vector" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A simple structure used to store a 2D vector; coordinates are of the FT_Pos type.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="x">x</td><td class="desc">
+<p>The horizontal coordinate.</p>
+</td></tr>
+<tr><td class="val" id="y">y</td><td class="desc">
+<p>The vertical coordinate.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_bbox">FT_BBox<a class="headerlink" href="#ft_bbox" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="xmin">xMin</td><td class="desc">
+<p>The horizontal minimum (left-most).</p>
+</td></tr>
+<tr><td class="val" id="ymin">yMin</td><td class="desc">
+<p>The vertical minimum (bottom-most).</p>
+</td></tr>
+<tr><td class="val" id="xmax">xMax</td><td class="desc">
+<p>The horizontal maximum (right-most).</p>
+</td></tr>
+<tr><td class="val" id="ymax">yMax</td><td class="desc">
+<p>The vertical maximum (top-most).</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The bounding box is specified with the coordinates of the lower left and the upper right corner. In PostScript, those values are often called (llx,lly) and (urx,ury), respectively.</p>
+<p>If <code>yMin</code> is negative, this value gives the glyph's descender. Otherwise, the glyph doesn't descend below the baseline. Similarly, if <code>ymax</code> is positive, this value gives the glyph's ascender.</p>
+<p><code>xMin</code> gives the horizontal distance from the glyph's origin to the left edge of the glyph's bounding box. If <code>xMin</code> is negative, the glyph extends to the left of the origin.</p>
+<hr>
+
+<h2 id="ft_matrix">FT_Matrix<a class="headerlink" href="#ft_matrix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed-point format. The computation performed is:
+<div class="codehilite"><pre><span></span> x&#39; = x*xx + y*xy
+ y&#39; = x*yx + y*yy
+</pre></div></p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="xx">xx</td><td class="desc">
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr><td class="val" id="xy">xy</td><td class="desc">
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr><td class="val" id="yx">yx</td><td class="desc">
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr><td class="val" id="yy">yy</td><td class="desc">
+<p>Matrix coefficient.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_fword">FT_FWord<a class="headerlink" href="#ft_fword" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_FWord</b>; /* distance in FUnits */
+</pre>
+</div>
+
+<p>A signed 16-bit integer used to store a distance in original font units.</p>
+<hr>
+
+<h2 id="ft_ufword">FT_UFWord<a class="headerlink" href="#ft_ufword" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>An unsigned 16-bit integer used to store a distance in original font units.</p>
+<hr>
+
+<h2 id="ft_f2dot14">FT_F2Dot14<a class="headerlink" href="#ft_f2dot14" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_F2Dot14</b>;
+</pre>
+</div>
+
+<p>A signed 2.14 fixed-point type used for unit vectors.</p>
+<hr>
+
+<h2 id="ft_unitvector">FT_UnitVector<a class="headerlink" href="#ft_unitvector" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="x">x</td><td class="desc">
+<p>Horizontal coordinate.</p>
+</td></tr>
+<tr><td class="val" id="y">y</td><td class="desc">
+<p>Vertical coordinate.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_f26dot6">FT_F26Dot6<a class="headerlink" href="#ft_f26dot6" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_F26Dot6</b>;
+</pre>
+</div>
+
+<p>A signed 26.6 fixed-point type used for vectorial pixel coordinates.</p>
+<hr>
+
+<h2 id="ft_data">FT_Data<a class="headerlink" href="#ft_data" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Read-only binary data represented as a pointer and a length.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="pointer">pointer</td><td class="desc">
+<p>The data.</p>
+</td></tr>
+<tr><td class="val" id="length">length</td><td class="desc">
+<p>The length of the data in bytes.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_make_tag">FT_MAKE_TAG<a class="headerlink" href="#ft_make_tag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_MAKE_TAG</b>( _x1, _x2, _x3, _x4 ) \
+ (<a href="ft2-basic_types.html#ft_tag">FT_Tag</a>) \
+ ( ( (<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>
+</div>
+
+<p>This macro converts four-letter tags that are used to label TrueType tables into an unsigned long, to be used within FreeType.</p>
+<h4>note</h4>
+
+<p>The produced values <strong>must</strong> be 32-bit integers. Don't redefine this macro.</p>
+<hr>
+
+<h2 id="ft_generic">FT_Generic<a class="headerlink" href="#ft_generic" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>Some FreeType object contains a <code>generic</code> field, of type <code>FT_Generic</code>, 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 <code>finalizer</code> field).</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>A typeless pointer to any client-specified data. This field is completely ignored by the FreeType library.</p>
+</td></tr>
+<tr><td class="val" id="finalizer">finalizer</td><td class="desc">
+<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 <code>NULL</code>, no code will be called.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_generic_finalizer">FT_Generic_Finalizer<a class="headerlink" href="#ft_generic_finalizer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> (*<b>FT_Generic_Finalizer</b>)( <span class="keyword">void</span>* object );
+</pre>
+</div>
+
+<p>Describe a function used to destroy the &lsquo;client&rsquo; data of any FreeType object. See the description of the <code><a href="ft2-basic_types.html#ft_generic">FT_Generic</a></code> type for details of usage.</p>
+<h4>input</h4>
+
+<p>The address of the FreeType object that is under finalization. Its client data is accessed through its <code>generic</code> field.</p>
+<hr>
+
+<h2 id="ft_bitmap">FT_Bitmap<a class="headerlink" href="#ft_bitmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_
+ {
+ <span class="keyword">unsigned</span> <span class="keyword">int</span> rows;
+ <span class="keyword">unsigned</span> <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">unsigned</span> <span class="keyword">short</span> num_grays;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span> pixel_mode;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span> palette_mode;
+ <span class="keyword">void</span>* palette;
+
+ } <b>FT_Bitmap</b>;
+</pre>
+</div>
+
+<p>A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various depths through the <code>pixel_mode</code> field.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="rows">rows</td><td class="desc">
+<p>The number of bitmap rows.</p>
+</td></tr>
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The number of pixels in bitmap row.</p>
+</td></tr>
+<tr><td class="val" id="pitch">pitch</td><td class="desc">
+<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>
+<p>Note that &lsquo;padding&rsquo; means the alignment of a bitmap to a byte border, and FreeType functions normally align to the smallest possible integer value.</p>
+<p>For the B/W rasterizer, <code>pitch</code> is always an even number.</p>
+<p>To change the pitch of a bitmap (say, to make it a multiple of 4), use <code><a href="ft2-bitmap_handling.html#ft_bitmap_convert">FT_Bitmap_Convert</a></code>. Alternatively, you might use callback functions to directly render to the application's surface; see the file <code>example2.cpp</code> in the tutorial for a demonstration.</p>
+</td></tr>
+<tr><td class="val" id="buffer">buffer</td><td class="desc">
+<p>A typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases.</p>
+</td></tr>
+<tr><td class="val" id="num_grays">num_grays</td><td class="desc">
+<p>This field is only used with <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY</a></code>; it gives the number of gray levels used in the bitmap.</p>
+</td></tr>
+<tr><td class="val" id="pixel_mode">pixel_mode</td><td class="desc">
+<p>The pixel mode, i.e., how pixel bits are stored. See <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_Pixel_Mode</a></code> for possible values.</p>
+</td></tr>
+<tr><td class="val" id="palette_mode">palette_mode</td><td class="desc">
+<p>This field is intended for paletted pixel modes; it indicates how the palette is stored. Not used currently.</p>
+</td></tr>
+<tr><td class="val" id="palette">palette</td><td class="desc">
+<p>A typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Not used currently.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_pixel_mode">FT_Pixel_Mode<a class="headerlink" href="#ft_pixel_mode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Pixel_Mode_
+ {
+ <a href="ft2-basic_types.html#ft_pixel_mode_none">FT_PIXEL_MODE_NONE</a> = 0,
+ <a href="ft2-basic_types.html#ft_pixel_mode_mono">FT_PIXEL_MODE_MONO</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_gray">FT_PIXEL_MODE_GRAY</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_gray2">FT_PIXEL_MODE_GRAY2</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_gray4">FT_PIXEL_MODE_GRAY4</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_lcd">FT_PIXEL_MODE_LCD</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_lcd_v">FT_PIXEL_MODE_LCD_V</a>,
+ <a href="ft2-basic_types.html#ft_pixel_mode_bgra">FT_PIXEL_MODE_BGRA</a>,
+
+ FT_PIXEL_MODE_MAX /* do not remove */
+
+ } <b>FT_Pixel_Mode</b>;
+
+
+ /* these constants are deprecated; use the corresponding `<b>FT_Pixel_Mode</b>` */
+ /* values instead. */
+#<span class="keyword">define</span> ft_pixel_mode_none <a href="ft2-basic_types.html#ft_pixel_mode_none">FT_PIXEL_MODE_NONE</a>
+#<span class="keyword">define</span> ft_pixel_mode_mono <a href="ft2-basic_types.html#ft_pixel_mode_mono">FT_PIXEL_MODE_MONO</a>
+#<span class="keyword">define</span> ft_pixel_mode_grays <a href="ft2-basic_types.html#ft_pixel_mode_gray">FT_PIXEL_MODE_GRAY</a>
+#<span class="keyword">define</span> ft_pixel_mode_pal2 <a href="ft2-basic_types.html#ft_pixel_mode_gray2">FT_PIXEL_MODE_GRAY2</a>
+#<span class="keyword">define</span> ft_pixel_mode_pal4 <a href="ft2-basic_types.html#ft_pixel_mode_gray4">FT_PIXEL_MODE_GRAY4</a>
+</pre>
+</div>
+
+<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>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_pixel_mode_none">FT_PIXEL_MODE_NONE</td><td class="desc">
+<p>Value&nbsp;0 is reserved.</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_mono">FT_PIXEL_MODE_MONO</td><td class="desc">
+<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><td class="val" id="ft_pixel_mode_gray">FT_PIXEL_MODE_GRAY</td><td class="desc">
+<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 &lsquo;gray&rsquo; levels is stored in the <code>num_grays</code> field of the <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code> structure (it generally is 256).</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_gray2">FT_PIXEL_MODE_GRAY2</td><td class="desc">
+<p>A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_gray4">FT_PIXEL_MODE_GRAY4</td><td class="desc">
+<p>A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_lcd">FT_PIXEL_MODE_LCD</td><td class="desc">
+<p>An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_lcd_v">FT_PIXEL_MODE_LCD_V</td><td class="desc">
+<p>An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD_V</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="ft_pixel_mode_bgra">FT_PIXEL_MODE_BGRA</td><td class="desc">
+<p>[Since 2.5] An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity will be represented as &lsquo;00,00,80,80&rsquo;, not &lsquo;00,00,FF,80&rsquo;. See also <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_glyph_format">FT_Glyph_Format<a class="headerlink" href="#ft_glyph_format" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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_none">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_composite">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_bitmap">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_outline">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_plotter">FT_GLYPH_FORMAT_PLOTTER</a>, 'p', 'l', 'o', 't' )
+
+ } <b>FT_Glyph_Format</b>;
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_Glyph_Format</b>` values instead. */
+#<span class="keyword">define</span> ft_glyph_format_none <a href="ft2-basic_types.html#ft_glyph_format_none">FT_GLYPH_FORMAT_NONE</a>
+#<span class="keyword">define</span> ft_glyph_format_composite <a href="ft2-basic_types.html#ft_glyph_format_composite">FT_GLYPH_FORMAT_COMPOSITE</a>
+#<span class="keyword">define</span> ft_glyph_format_bitmap <a href="ft2-basic_types.html#ft_glyph_format_bitmap">FT_GLYPH_FORMAT_BITMAP</a>
+#<span class="keyword">define</span> ft_glyph_format_outline <a href="ft2-basic_types.html#ft_glyph_format_outline">FT_GLYPH_FORMAT_OUTLINE</a>
+#<span class="keyword">define</span> ft_glyph_format_plotter <a href="ft2-basic_types.html#ft_glyph_format_plotter">FT_GLYPH_FORMAT_PLOTTER</a>
+</pre>
+</div>
+
+<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>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_glyph_format_none">FT_GLYPH_FORMAT_NONE</td><td class="desc">
+<p>The value&nbsp;0 is reserved.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_format_composite">FT_GLYPH_FORMAT_COMPOSITE</td><td class="desc">
+<p>The glyph image is a composite of several other images. This format is <em>only</em> used with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_RECURSE</a></code>, and is used to report compound glyphs (like accented characters).</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_format_bitmap">FT_GLYPH_FORMAT_BITMAP</td><td class="desc">
+<p>The glyph image is a bitmap, and can be described as an <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code>. You generally need to access the <code>bitmap</code> field of the <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> structure to read it.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_format_outline">FT_GLYPH_FORMAT_OUTLINE</td><td class="desc">
+<p>The glyph image is a vectorial outline made of line segments and Bezier arcs; it can be described as an <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code>; you generally want to access the <code>outline</code> field of the <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> structure to read it.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_format_plotter">FT_GLYPH_FORMAT_PLOTTER</td><td class="desc">
+<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 <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code>, but FreeType isn't currently capable of rendering them correctly.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_image_tag">FT_IMAGE_TAG<a class="headerlink" href="#ft_image_tag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_IMAGE_TAG</b>
+#<span class="keyword">define</span> <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 )
+#<span class="keyword">endif</span> /* <b>FT_IMAGE_TAG</b> */
+</pre>
+</div>
+
+<p>This macro converts four-letter tags to an unsigned long type.</p>
+<h4>note</h4>
+
+<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:
+<div class="codehilite"><pre><span></span> #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
+</pre></div></p>
+<p>to get a simple enumeration without assigning special numbers.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-version.html" title="FreeType Version" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ FreeType Version
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Base Interface
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-bdf_fonts.html b/freetype/docs/reference/site/ft2-bdf_fonts.html
new file mode 100644
index 00000000..5ac44a59
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-bdf_fonts.html
@@ -0,0 +1,1387 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>BDF and PCF Files - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#bdf-and-pcf-files" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ BDF and PCF Files
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ BDF and PCF Files
+ </label>
+
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link md-nav__link--active">
+ BDF and PCF Files
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_propertytype" title="BDF_PropertyType" class="md-nav__link">
+ BDF_PropertyType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_property" title="BDF_Property" class="md-nav__link">
+ BDF_Property
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_propertyrec" title="BDF_PropertyRec" class="md-nav__link">
+ BDF_PropertyRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_bdf_charset_id" title="FT_Get_BDF_Charset_ID" class="md-nav__link">
+ FT_Get_BDF_Charset_ID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_bdf_property" title="FT_Get_BDF_Property" class="md-nav__link">
+ FT_Get_BDF_Property
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_propertytype" title="BDF_PropertyType" class="md-nav__link">
+ BDF_PropertyType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_property" title="BDF_Property" class="md-nav__link">
+ BDF_Property
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#bdf_propertyrec" title="BDF_PropertyRec" class="md-nav__link">
+ BDF_PropertyRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_bdf_charset_id" title="FT_Get_BDF_Charset_ID" class="md-nav__link">
+ FT_Get_BDF_Charset_ID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_bdf_property" title="FT_Get_BDF_Property" class="md-nav__link">
+ FT_Get_BDF_Property
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; BDF and PCF Files</p>
+<hr />
+<h1 id="bdf-and-pcf-files">BDF and PCF Files<a class="headerlink" href="#bdf-and-pcf-files" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of functions specific to BDF and PCF fonts.</p>
+<h2 id="bdf_propertytype">BDF_PropertyType<a class="headerlink" href="#bdf_propertytype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> BDF_PropertyType_
+ {
+ <a href="ft2-bdf_fonts.html#bdf_property_type_none">BDF_PROPERTY_TYPE_NONE</a> = 0,
+ <a href="ft2-bdf_fonts.html#bdf_property_type_atom">BDF_PROPERTY_TYPE_ATOM</a> = 1,
+ <a href="ft2-bdf_fonts.html#bdf_property_type_integer">BDF_PROPERTY_TYPE_INTEGER</a> = 2,
+ <a href="ft2-bdf_fonts.html#bdf_property_type_cardinal">BDF_PROPERTY_TYPE_CARDINAL</a> = 3
+
+ } <b>BDF_PropertyType</b>;
+</pre>
+</div>
+
+<p>A list of BDF property types.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="bdf_property_type_none">BDF_PROPERTY_TYPE_NONE</td><td class="desc">
+<p>Value&nbsp;0 is used to indicate a missing property.</p>
+</td></tr>
+<tr><td class="val" id="bdf_property_type_atom">BDF_PROPERTY_TYPE_ATOM</td><td class="desc">
+<p>Property is a string atom.</p>
+</td></tr>
+<tr><td class="val" id="bdf_property_type_integer">BDF_PROPERTY_TYPE_INTEGER</td><td class="desc">
+<p>Property is a 32-bit signed integer.</p>
+</td></tr>
+<tr><td class="val" id="bdf_property_type_cardinal">BDF_PROPERTY_TYPE_CARDINAL</td><td class="desc">
+<p>Property is a 32-bit unsigned integer.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="bdf_property">BDF_Property<a class="headerlink" href="#bdf_property" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_* <b>BDF_Property</b>;
+</pre>
+</div>
+
+<p>A handle to a <code><a href="ft2-bdf_fonts.html#bdf_propertyrec">BDF_PropertyRec</a></code> structure to model a given BDF/PCF property.</p>
+<hr>
+
+<h2 id="bdf_propertyrec">BDF_PropertyRec<a class="headerlink" href="#bdf_propertyrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_
+ {
+ <a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PropertyType</a> 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>
+</div>
+
+<p>This structure models a given BDF/PCF property.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="type">type</td><td class="desc">
+<p>The property type.</p>
+</td></tr>
+<tr><td class="val" id="u.atom">u.atom</td><td class="desc">
+<p>The atom string, if type is <code><a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_ATOM</a></code>. May be <code>NULL</code>, indicating an empty string.</p>
+</td></tr>
+<tr><td class="val" id="u.integer">u.integer</td><td class="desc">
+<p>A signed integer, if type is <code><a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_INTEGER</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="u.cardinal">u.cardinal</td><td class="desc">
+<p>An unsigned integer, if type is <code><a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_CARDINAL</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_get_bdf_charset_id">FT_Get_BDF_Charset_ID<a class="headerlink" href="#ft_get_bdf_charset_id" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a BDF font character set identity, according to the BDF specification.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acharset_encoding">acharset_encoding</td><td class="desc">
+<p>Charset encoding, as a C&nbsp;string, owned by the face.</p>
+</td></tr>
+<tr><td class="val" id="acharset_registry">acharset_registry</td><td class="desc">
+<p>Charset registry, as a C&nbsp;string, owned by the face.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with BDF faces, returning an error otherwise.</p>
+<hr>
+
+<h2 id="ft_get_bdf_property">FT_Get_BDF_Property<a class="headerlink" href="#ft_get_bdf_property" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BDF_H (freetype/ftbdf.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a BDF property from a BDF or PCF font file.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="name">name</td><td class="desc">
+<p>The property name.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aproperty">aproperty</td><td class="desc">
+<p>The property.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function works with BDF <em>and</em> PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font.</p>
+<p>A &lsquo;property&rsquo; is a either key-value pair within the STARTPROPERTIES ... ENDPROPERTIES block of a BDF font or a key-value pair from the <code>info-&gt;props</code> array within a <code>FontRec</code> structure of a PCF font.</p>
+<p>Integer properties are always stored as &lsquo;signed&rsquo; within PCF fonts; consequently, <code><a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_CARDINAL</a></code> is a possible return value for BDF fonts only.</p>
+<p>In case of error, <code>aproperty-&gt;type</code> is always set to <code><a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_NONE</a></code>.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ SFNT Names
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ CID Fonts
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-bitmap_handling.html b/freetype/docs/reference/site/ft2-bitmap_handling.html
new file mode 100644
index 00000000..6b851280
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-bitmap_handling.html
@@ -0,0 +1,1522 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Bitmap Handling - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#bitmap-handling" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Bitmap Handling
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Bitmap Handling
+ </label>
+
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link md-nav__link--active">
+ Bitmap Handling
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_init" title="FT_Bitmap_Init" class="md-nav__link">
+ FT_Bitmap_Init
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_copy" title="FT_Bitmap_Copy" class="md-nav__link">
+ FT_Bitmap_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_embolden" title="FT_Bitmap_Embolden" class="md-nav__link">
+ FT_Bitmap_Embolden
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_convert" title="FT_Bitmap_Convert" class="md-nav__link">
+ FT_Bitmap_Convert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_blend" title="FT_Bitmap_Blend" class="md-nav__link">
+ FT_Bitmap_Blend
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslot_own_bitmap" title="FT_GlyphSlot_Own_Bitmap" class="md-nav__link">
+ FT_GlyphSlot_Own_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_done" title="FT_Bitmap_Done" class="md-nav__link">
+ FT_Bitmap_Done
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_init" title="FT_Bitmap_Init" class="md-nav__link">
+ FT_Bitmap_Init
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_copy" title="FT_Bitmap_Copy" class="md-nav__link">
+ FT_Bitmap_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_embolden" title="FT_Bitmap_Embolden" class="md-nav__link">
+ FT_Bitmap_Embolden
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_convert" title="FT_Bitmap_Convert" class="md-nav__link">
+ FT_Bitmap_Convert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_blend" title="FT_Bitmap_Blend" class="md-nav__link">
+ FT_Bitmap_Blend
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphslot_own_bitmap" title="FT_GlyphSlot_Own_Bitmap" class="md-nav__link">
+ FT_GlyphSlot_Own_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_done" title="FT_Bitmap_Done" class="md-nav__link">
+ FT_Bitmap_Done
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Bitmap Handling</p>
+<hr />
+<h1 id="bitmap-handling">Bitmap Handling<a class="headerlink" href="#bitmap-handling" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains functions for handling <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code> objects, automatically adjusting the target's bitmap buffer size as needed.</p>
+<p>Note that none of the functions changes the bitmap's &lsquo;flow&rsquo; (as indicated by the sign of the <code>pitch</code> field in <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code>).</p>
+<p>To set the flow, assign an appropriate positive or negative value to the <code>pitch</code> field of the target <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code> object after calling <code><a href="ft2-bitmap_handling.html#ft_bitmap_init">FT_Bitmap_Init</a></code> but before calling any of the other functions described here.</p>
+<h2 id="ft_bitmap_init">FT_Bitmap_Init<a class="headerlink" href="#ft_bitmap_init" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Bitmap_Init</b>( <a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a> *abitmap );
+
+ /* deprecated */
+ FT_EXPORT( <span class="keyword">void</span> )
+ FT_Bitmap_New( <a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a> *abitmap );
+</pre>
+</div>
+
+<p>Initialize a pointer to an <code><a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a></code> structure.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="abitmap">abitmap</td><td class="desc">
+<p>A pointer to the bitmap structure.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>A deprecated name for the same function is <code>FT_Bitmap_New</code>.</p>
+<hr>
+
+<h2 id="ft_bitmap_copy">FT_Bitmap_Copy<a class="headerlink" href="#ft_bitmap_copy" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Copy a bitmap into another one.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>A handle to the source bitmap.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>A handle to the target bitmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p><code>source-&gt;buffer</code> and <code>target-&gt;buffer</code> must neither be equal nor overlap.</p>
+<hr>
+
+<h2 id="ft_bitmap_embolden">FT_Bitmap_Embolden<a class="headerlink" href="#ft_bitmap_embolden" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Embolden a bitmap. The new bitmap will be about <code>xStrength</code> pixels wider and <code>yStrength</code> pixels higher. The left and bottom borders are kept unchanged.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+<tr><td class="val" id="xstrength">xStrength</td><td class="desc">
+<p>How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format.</p>
+</td></tr>
+<tr><td class="val" id="ystrength">yStrength</td><td class="desc">
+<p>How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
+<p>A handle to the target bitmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The current implementation restricts <code>xStrength</code> to be less than or equal to&nbsp;8 if bitmap is of pixel_mode <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_MONO</a></code>.</p>
+<p>If you want to embolden the bitmap owned by a <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code>, you should call <code><a href="ft2-bitmap_handling.html#ft_glyphslot_own_bitmap">FT_GlyphSlot_Own_Bitmap</a></code> on the slot first.</p>
+<p>Bitmaps in <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY2</a></code> and <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY</a></code>@ format are converted to <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY</a></code> format (i.e., 8bpp).</p>
+<hr>
+
+<h2 id="ft_bitmap_convert">FT_Bitmap_Convert<a class="headerlink" href="#ft_bitmap_convert" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to a bitmap object with depth 8bpp, making the number of used bytes per line (a.k.a. the &lsquo;pitch&rsquo;) a multiple of <code>alignment</code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>The source bitmap.</p>
+</td></tr>
+<tr><td class="val" id="alignment">alignment</td><td class="desc">
+<p>The pitch of the bitmap is a multiple of this argument. Common values are 1, 2, or 4.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>The target bitmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>It is possible to call <code><a href="ft2-bitmap_handling.html#ft_bitmap_convert">FT_Bitmap_Convert</a></code> multiple times without calling <code><a href="ft2-bitmap_handling.html#ft_bitmap_done">FT_Bitmap_Done</a></code> (the memory is simply reallocated).</p>
+<p>Use <code><a href="ft2-bitmap_handling.html#ft_bitmap_done">FT_Bitmap_Done</a></code> to finally remove the bitmap object.</p>
+<p>The <code>library</code> argument is taken to have access to FreeType's memory handling functions.</p>
+<p><code>source-&gt;buffer</code> and <code>target-&gt;buffer</code> must neither be equal nor overlap.</p>
+<hr>
+
+<h2 id="ft_bitmap_blend">FT_Bitmap_Blend<a class="headerlink" href="#ft_bitmap_blend" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Bitmap_Blend</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,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_vector">FT_Vector</a> source_offset,
+ <a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a>* target,
+ <a href="ft2-basic_types.html#ft_vector">FT_Vector</a> *atarget_offset,
+ <a href="ft2-color_management.html#ft_color">FT_Color</a> color );
+</pre>
+</div>
+
+<p>Blend a bitmap onto another bitmap, using a given color.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>The source bitmap, which can have any <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_Pixel_Mode</a></code> format.</p>
+</td></tr>
+<tr><td class="val" id="source_offset">source_offset</td><td class="desc">
+<p>The offset vector to the upper left corner of the source bitmap in 26.6 pixel format. It should represent an integer offset; the function will set the lowest six bits to zero to enforce that.</p>
+</td></tr>
+<tr><td class="val" id="color">color</td><td class="desc">
+<p>The color used to draw <code>source</code> onto <code>target</code>.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>A handle to an <code>FT_Bitmap</code> object. It should be either initialized as empty with a call to <code><a href="ft2-bitmap_handling.html#ft_bitmap_init">FT_Bitmap_Init</a></code>, or it should be of type <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_BGRA</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="atarget_offset">atarget_offset</td><td class="desc">
+<p>The offset vector to the upper left corner of the target bitmap in 26.6 pixel format. It should represent an integer offset; the function will set the lowest six bits to zero to enforce that.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function doesn't perform clipping.</p>
+<p>The bitmap in <code>target</code> gets allocated or reallocated as needed; the vector <code>atarget_offset</code> is updated accordingly.</p>
+<p>In case of allocation or reallocation, the bitmap's pitch is set to <code>4 * width</code>. Both <code>source</code> and <code>target</code> must have the same bitmap flow (as indicated by the sign of the <code>pitch</code> field).</p>
+<p><code>source-&gt;buffer</code> and <code>target-&gt;buffer</code> must neither be equal nor overlap.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_glyphslot_own_bitmap">FT_GlyphSlot_Own_Bitmap<a class="headerlink" href="#ft_glyphslot_own_bitmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_GlyphSlot_Own_Bitmap</b>( <a href="ft2-base_interface.html#ft_glyphslot">FT_GlyphSlot</a> slot );
+</pre>
+</div>
+
+<p>Make sure that a glyph slot owns <code>slot-&gt;bitmap</code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="slot">slot</td><td class="desc">
+<p>The glyph slot.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function is to be used in combination with <code><a href="ft2-bitmap_handling.html#ft_bitmap_embolden">FT_Bitmap_Embolden</a></code>.</p>
+<hr>
+
+<h2 id="ft_bitmap_done">FT_Bitmap_Done<a class="headerlink" href="#ft_bitmap_done" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BITMAP_H (freetype/ftbitmap.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy a bitmap object initialized with <code><a href="ft2-bitmap_handling.html#ft_bitmap_init">FT_Bitmap_Init</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+<tr><td class="val" id="bitmap">bitmap</td><td class="desc">
+<p>The bitmap object to be freed.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The <code>library</code> argument is taken to have access to FreeType's memory handling functions.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Quick retrieval of advance values
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Scanline Converter
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-bzip2.html b/freetype/docs/reference/site/ft2-bzip2.html
new file mode 100644
index 00000000..9cb1c493
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-bzip2.html
@@ -0,0 +1,1200 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>BZIP2 Streams - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#bzip2-streams" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ BZIP2 Streams
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ BZIP2 Streams
+ </label>
+
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link md-nav__link--active">
+ BZIP2 Streams
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_openbzip2" title="FT_Stream_OpenBzip2" class="md-nav__link">
+ FT_Stream_OpenBzip2
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_openbzip2" title="FT_Stream_OpenBzip2" class="md-nav__link">
+ FT_Stream_OpenBzip2
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; BZIP2 Streams</p>
+<hr />
+<h1 id="bzip2-streams">BZIP2 Streams<a class="headerlink" href="#bzip2-streams" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of Bzip2-specific functions.</p>
+<h2 id="ft_stream_openbzip2">FT_Stream_OpenBzip2<a class="headerlink" href="#ft_stream_openbzip2" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BZIP2_H (freetype/ftbzip2.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Stream_OpenBzip2</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>
+</div>
+
+<p>Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed <code>*.pcf.bz2</code> fonts that come with XFree86.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>The target embedding stream.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>The source stream.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The source stream must be opened <em>before</em> calling this function.</p>
+<p>Calling the internal function <code>FT_Stream_Close</code> on the new stream will <strong>not</strong> call <code>FT_Stream_Close</code> 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, bzip2 compression recognition is automatically handled when calling <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> or <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>. This means that if no font driver is capable of handling the raw compressed file, the library will try to open a bzip2 compressed stream from it and re-open the face with it.</p>
+<p>This function may return <code>FT_Err_Unimplemented_Feature</code> if your build of FreeType was not compiled with bzip2 support.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ LZW Streams
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Error Enumerations
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-cache_subsystem.html b/freetype/docs/reference/site/ft2-cache_subsystem.html
new file mode 100644
index 00000000..040447a6
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-cache_subsystem.html
@@ -0,0 +1,2425 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Cache Sub-System - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#cache-sub-system" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Cache Sub-System
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7" checked>
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Cache Sub-System
+ </label>
+
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link md-nav__link--active">
+ Cache Sub-System
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager" title="FTC_Manager" class="md-nav__link">
+ FTC_Manager
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_faceid" title="FTC_FaceID" class="md-nav__link">
+ FTC_FaceID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_face_requester" title="FTC_Face_Requester" class="md-nav__link">
+ FTC_Face_Requester
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_new" title="FTC_Manager_New" class="md-nav__link">
+ FTC_Manager_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_reset" title="FTC_Manager_Reset" class="md-nav__link">
+ FTC_Manager_Reset
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_done" title="FTC_Manager_Done" class="md-nav__link">
+ FTC_Manager_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_lookupface" title="FTC_Manager_LookupFace" class="md-nav__link">
+ FTC_Manager_LookupFace
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_lookupsize" title="FTC_Manager_LookupSize" class="md-nav__link">
+ FTC_Manager_LookupSize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_removefaceid" title="FTC_Manager_RemoveFaceID" class="md-nav__link">
+ FTC_Manager_RemoveFaceID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_node" title="FTC_Node" class="md-nav__link">
+ FTC_Node
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_node_unref" title="FTC_Node_Unref" class="md-nav__link">
+ FTC_Node_Unref
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache" title="FTC_ImageCache" class="md-nav__link">
+ FTC_ImageCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_new" title="FTC_ImageCache_New" class="md-nav__link">
+ FTC_ImageCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_lookup" title="FTC_ImageCache_Lookup" class="md-nav__link">
+ FTC_ImageCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbit" title="FTC_SBit" class="md-nav__link">
+ FTC_SBit
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache" title="FTC_SBitCache" class="md-nav__link">
+ FTC_SBitCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_new" title="FTC_SBitCache_New" class="md-nav__link">
+ FTC_SBitCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_lookup" title="FTC_SBitCache_Lookup" class="md-nav__link">
+ FTC_SBitCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache" title="FTC_CMapCache" class="md-nav__link">
+ FTC_CMapCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache_new" title="FTC_CMapCache_New" class="md-nav__link">
+ FTC_CMapCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache_lookup" title="FTC_CMapCache_Lookup" class="md-nav__link">
+ FTC_CMapCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_scalerrec" title="FTC_ScalerRec" class="md-nav__link">
+ FTC_ScalerRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_scaler" title="FTC_Scaler" class="md-nav__link">
+ FTC_Scaler
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagetyperec" title="FTC_ImageTypeRec" class="md-nav__link">
+ FTC_ImageTypeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagetype" title="FTC_ImageType" class="md-nav__link">
+ FTC_ImageType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_lookupscaler" title="FTC_ImageCache_LookupScaler" class="md-nav__link">
+ FTC_ImageCache_LookupScaler
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitrec" title="FTC_SBitRec" class="md-nav__link">
+ FTC_SBitRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_lookupscaler" title="FTC_SBitCache_LookupScaler" class="md-nav__link">
+ FTC_SBitCache_LookupScaler
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager" title="FTC_Manager" class="md-nav__link">
+ FTC_Manager
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_faceid" title="FTC_FaceID" class="md-nav__link">
+ FTC_FaceID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_face_requester" title="FTC_Face_Requester" class="md-nav__link">
+ FTC_Face_Requester
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_new" title="FTC_Manager_New" class="md-nav__link">
+ FTC_Manager_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_reset" title="FTC_Manager_Reset" class="md-nav__link">
+ FTC_Manager_Reset
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_done" title="FTC_Manager_Done" class="md-nav__link">
+ FTC_Manager_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_lookupface" title="FTC_Manager_LookupFace" class="md-nav__link">
+ FTC_Manager_LookupFace
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_lookupsize" title="FTC_Manager_LookupSize" class="md-nav__link">
+ FTC_Manager_LookupSize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_manager_removefaceid" title="FTC_Manager_RemoveFaceID" class="md-nav__link">
+ FTC_Manager_RemoveFaceID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_node" title="FTC_Node" class="md-nav__link">
+ FTC_Node
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_node_unref" title="FTC_Node_Unref" class="md-nav__link">
+ FTC_Node_Unref
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache" title="FTC_ImageCache" class="md-nav__link">
+ FTC_ImageCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_new" title="FTC_ImageCache_New" class="md-nav__link">
+ FTC_ImageCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_lookup" title="FTC_ImageCache_Lookup" class="md-nav__link">
+ FTC_ImageCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbit" title="FTC_SBit" class="md-nav__link">
+ FTC_SBit
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache" title="FTC_SBitCache" class="md-nav__link">
+ FTC_SBitCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_new" title="FTC_SBitCache_New" class="md-nav__link">
+ FTC_SBitCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_lookup" title="FTC_SBitCache_Lookup" class="md-nav__link">
+ FTC_SBitCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache" title="FTC_CMapCache" class="md-nav__link">
+ FTC_CMapCache
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache_new" title="FTC_CMapCache_New" class="md-nav__link">
+ FTC_CMapCache_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_cmapcache_lookup" title="FTC_CMapCache_Lookup" class="md-nav__link">
+ FTC_CMapCache_Lookup
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_scalerrec" title="FTC_ScalerRec" class="md-nav__link">
+ FTC_ScalerRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_scaler" title="FTC_Scaler" class="md-nav__link">
+ FTC_Scaler
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagetyperec" title="FTC_ImageTypeRec" class="md-nav__link">
+ FTC_ImageTypeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagetype" title="FTC_ImageType" class="md-nav__link">
+ FTC_ImageType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_imagecache_lookupscaler" title="FTC_ImageCache_LookupScaler" class="md-nav__link">
+ FTC_ImageCache_LookupScaler
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitrec" title="FTC_SBitRec" class="md-nav__link">
+ FTC_SBitRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ftc_sbitcache_lookupscaler" title="FTC_SBitCache_LookupScaler" class="md-nav__link">
+ FTC_SBitCache_LookupScaler
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#cache-sub-system">Cache Sub-System</a> &raquo; Cache Sub-System</p>
+<hr />
+<h1 id="cache-sub-system">Cache Sub-System<a class="headerlink" href="#cache-sub-system" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section describes the FreeType&nbsp;2 cache sub-system, which is used to limit the number of concurrently opened <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> and <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> 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 <code>FTC_</code> 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 <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> 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 an <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> into a new <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object. The latter is then completely managed by the cache, including its termination through <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>. To monitor termination of face objects, the finalizer callback in the <code>generic</code> field of the <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object can be used, which might also be used to store the <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> of the face.</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 <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code>. However, more complex schemes are also possible.</p>
+<p>Note that for the cache to work correctly, the face ID values must be <strong>persistent</strong>, 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 <code><a href="ft2-cache_subsystem.html#ftc_manager_removefaceid">FTC_Manager_RemoveFaceID</a></code> as soon as possible, to let the cache get rid of any references to the old <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> 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 <code><a href="ft2-cache_subsystem.html#ftc_manager_new">FTC_Manager_New</a></code> to create a new <code><a href="ft2-cache_subsystem.html#ftc_manager">FTC_Manager</a></code> object, which models a single cache instance. You can then look up <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> and <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects with <code><a href="ft2-cache_subsystem.html#ftc_manager_lookupface">FTC_Manager_LookupFace</a></code> and <code><a href="ft2-cache_subsystem.html#ftc_manager_lookupsize">FTC_Manager_LookupSize</a></code>, respectively.</p>
+<p>If you want to use the charmap caching, call <code><a href="ft2-cache_subsystem.html#ftc_cmapcache_new">FTC_CMapCache_New</a></code>, then later use <code><a href="ft2-cache_subsystem.html#ftc_cmapcache_lookup">FTC_CMapCache_Lookup</a></code> to perform the equivalent of <code><a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a></code>, only much faster.</p>
+<p>If you want to use the <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> caching, call <code><a href="ft2-cache_subsystem.html#ftc_imagecache">FTC_ImageCache</a></code>, then later use <code><a href="ft2-cache_subsystem.html#ftc_imagecache_lookup">FTC_ImageCache_Lookup</a></code> to retrieve the corresponding <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> objects from the cache.</p>
+<p>If you need lots of small bitmaps, it is much more memory efficient to call <code><a href="ft2-cache_subsystem.html#ftc_sbitcache_new">FTC_SBitCache_New</a></code> followed by <code><a href="ft2-cache_subsystem.html#ftc_sbitcache_lookup">FTC_SBitCache_Lookup</a></code>. This returns <code><a href="ft2-cache_subsystem.html#ftc_sbitrec">FTC_SBitRec</a></code> 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>
+<h2 id="ftc_manager">FTC_Manager<a class="headerlink" href="#ftc_manager" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ManagerRec_* <b>FTC_Manager</b>;
+</pre>
+</div>
+
+<p>This object corresponds to one instance of the cache-subsystem. It is used to cache one or more <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> objects, along with corresponding <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects.</p>
+<p>The manager intentionally limits the total number of opened <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> and <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects to control memory usage. See the <code>max_faces</code> and <code>max_sizes</code> parameters of <code><a href="ft2-cache_subsystem.html#ftc_manager_new">FTC_Manager_New</a></code>.</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>
+<hr>
+
+<h2 id="ftc_faceid">FTC_FaceID<a class="headerlink" href="#ftc_faceid" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#ft_pointer">FT_Pointer</a> <b>FTC_FaceID</b>;
+</pre>
+</div>
+
+<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>
+<h4>note</h4>
+
+<p>Never use <code>NULL</code> as a valid <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code>.</p>
+<p>Face IDs are passed by the client to the cache manager that calls, when needed, the <code><a href="ft2-cache_subsystem.html#ftc_face_requester">FTC_Face_Requester</a></code> to translate them into new <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> 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 <code><a href="ft2-cache_subsystem.html#ftc_manager_removefaceid">FTC_Manager_RemoveFaceID</a></code> before any other cache function.</p>
+<p>Failure to do so will result in incorrect behaviour or even memory leaks and crashes.</p>
+<hr>
+
+<h2 id="ftc_face_requester">FTC_Face_Requester<a class="headerlink" href="#ftc_face_requester" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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> req_data,
+ <a href="ft2-base_interface.html#ft_face">FT_Face</a>* aface );
+</pre>
+</div>
+
+<p>A callback function provided by client applications. It is used by the cache manager to translate a given <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> into a new valid <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object, on demand.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The face ID to resolve.</p>
+</td></tr>
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr><td class="val" id="req_data">req_data</td><td class="desc">
+<p>Application-provided request data (see note below).</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A new <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The third parameter <code>req_data</code> is the same as the one passed by the client when <code><a href="ft2-cache_subsystem.html#ftc_manager_new">FTC_Manager_New</a></code> is called.</p>
+<p>The face requester should not perform funny things on the returned face object, like creating a new <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> for it, or setting a transformation through <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code>!</p>
+<hr>
+
+<h2 id="ftc_manager_new">FTC_Manager_New<a class="headerlink" href="#ftc_manager_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new cache manager.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>The parent FreeType library handle to use.</p>
+</td></tr>
+<tr><td class="val" id="max_faces">max_faces</td><td class="desc">
+<p>Maximum number of opened <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> objects managed by this cache instance. Use&nbsp;0 for defaults.</p>
+</td></tr>
+<tr><td class="val" id="max_sizes">max_sizes</td><td class="desc">
+<p>Maximum number of opened <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects managed by this cache instance. Use&nbsp;0 for defaults.</p>
+</td></tr>
+<tr><td class="val" id="max_bytes">max_bytes</td><td class="desc">
+<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 <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> and <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects.</p>
+</td></tr>
+<tr><td class="val" id="requester">requester</td><td class="desc">
+<p>An application-provided callback used to translate face IDs into real <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> objects.</p>
+</td></tr>
+<tr><td class="val" id="req_data">req_data</td><td class="desc">
+<p>A generic pointer that is passed to the requester each time it is called (see <code><a href="ft2-cache_subsystem.html#ftc_face_requester">FTC_Face_Requester</a></code>).</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="amanager">amanager</td><td class="desc">
+<p>A handle to a new manager object. 0&nbsp;in case of failure.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ftc_manager_reset">FTC_Manager_Reset<a class="headerlink" href="#ftc_manager_reset" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Empty a given cache manager. This simply gets rid of all the currently cached <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> and <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects within the manager.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the manager.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ftc_manager_done">FTC_Manager_Done<a class="headerlink" href="#ftc_manager_done" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy a given manager after emptying it.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the target cache manager object.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ftc_manager_lookupface">FTC_Manager_LookupFace<a class="headerlink" href="#ftc_manager_lookupface" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object that corresponds to a given face ID through a cache manager.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the cache manager.</p>
+</td></tr>
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The ID of the face object.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to the face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The returned <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object is always owned by the manager. You should never try to discard it yourself.</p>
+<p>The <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object doesn't necessarily have a current size object (i.e., face-&gt;size can be&nbsp;0). If you need a specific &lsquo;font size&rsquo;, use <code><a href="ft2-cache_subsystem.html#ftc_manager_lookupsize">FTC_Manager_LookupSize</a></code> instead.</p>
+<p>Never change the face's transformation matrix (i.e., never call the <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code> 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 <em>within</em> 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 <code>FT_Err_Out_Of_Memory</code> the cache has already been completely flushed, and still no memory was available for the operation.</p>
+<hr>
+
+<h2 id="ftc_manager_lookupsize">FTC_Manager_LookupSize<a class="headerlink" href="#ftc_manager_lookupsize" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object that corresponds to a given <code><a href="ft2-cache_subsystem.html#ftc_scalerrec">FTC_ScalerRec</a></code> pointer through a cache manager.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the cache manager.</p>
+</td></tr>
+<tr><td class="val" id="scaler">scaler</td><td class="desc">
+<p>A scaler handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="asize">asize</td><td class="desc">
+<p>A handle to the size object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The returned <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object is always owned by the manager. You should never try to discard it by yourself.</p>
+<p>You can access the parent <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object simply as <code>size-&gt;face</code> if you need it. Note that this object is also owned by the manager.</p>
+<h4>note</h4>
+
+<p>When you perform a lookup, out-of-memory errors are detected <em>within</em> 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 <code>FT_Err_Out_Of_Memory</code> the cache has already been completely flushed, and still no memory is available for the operation.</p>
+<hr>
+
+<h2 id="ftc_manager_removefaceid">FTC_Manager_RemoveFaceID<a class="headerlink" href="#ftc_manager_removefaceid" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A special function used to indicate to the cache manager that a given <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> is no longer valid, either because its content changed, or because it was deallocated or uninstalled.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>The cache manager handle.</p>
+</td></tr>
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The <code><a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a></code> to be removed.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function flushes all nodes from the cache corresponding to this <code>face_id</code>, 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 <code>face_id</code> value, and to be immediately destroyed when released by all their users.</p>
+<hr>
+
+<h2 id="ftc_node">FTC_Node<a class="headerlink" href="#ftc_node" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_NodeRec_* <b>FTC_Node</b>;
+</pre>
+</div>
+
+<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 look up 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 <code><a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a></code>).</p>
+<p>See also <code><a href="ft2-cache_subsystem.html#ftc_sbitcache_lookup">FTC_SBitCache_Lookup</a></code> and <code><a href="ft2-cache_subsystem.html#ftc_imagecache_lookup">FTC_ImageCache_Lookup</a></code>.</p>
+<hr>
+
+<h2 id="ftc_node_unref">FTC_Node_Unref<a class="headerlink" href="#ftc_node_unref" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The cache node handle.</p>
+</td></tr>
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>The cache manager handle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ftc_imagecache">FTC_ImageCache<a class="headerlink" href="#ftc_imagecache" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageCacheRec_* <b>FTC_ImageCache</b>;
+</pre>
+</div>
+
+<p>A handle to a glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.</p>
+<hr>
+
+<h2 id="ftc_imagecache_new">FTC_ImageCache_New<a class="headerlink" href="#ftc_imagecache_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new glyph image cache.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>The parent manager for the image cache.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acache">acache</td><td class="desc">
+<p>A handle to the new glyph image cache object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ftc_imagecache_lookup">FTC_ImageCache_Lookup<a class="headerlink" href="#ftc_imagecache_lookup" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a given glyph image from a glyph image cache.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="cache">cache</td><td class="desc">
+<p>A handle to the source glyph image cache.</p>
+</td></tr>
+<tr><td class="val" id="type">type</td><td class="desc">
+<p>A pointer to a glyph image type descriptor.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index to retrieve.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
+<p>The corresponding <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> object. 0&nbsp;in case of failure.</p>
+</td></tr>
+<tr><td class="val" id="anode">anode</td><td class="desc">
+<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-glyph_management.html#ft_glyph_copy">FT_Glyph_Copy</a></code> and modify the new one.</p>
+<p>If <code>anode</code> is <em>not</em> <code>NULL</code>, 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 <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code>) will always be kept in the cache until you call <code><a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a></code> to &lsquo;release&rsquo; it.</p>
+<p>If <code>anode</code> is <code>NULL</code>, the cache node is left unchanged, which means that the <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> 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>
+<hr>
+
+<h2 id="ftc_sbit">FTC_SBit<a class="headerlink" href="#ftc_sbit" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_* <b>FTC_SBit</b>;
+</pre>
+</div>
+
+<p>A handle to a small bitmap descriptor. See the <code><a href="ft2-cache_subsystem.html#ftc_sbitrec">FTC_SBitRec</a></code> structure for details.</p>
+<hr>
+
+<h2 id="ftc_sbitcache">FTC_SBitCache<a class="headerlink" href="#ftc_sbitcache" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitCacheRec_* <b>FTC_SBitCache</b>;
+</pre>
+</div>
+
+<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 <code><a href="ft2-cache_subsystem.html#ftc_imagecache">FTC_ImageCache</a></code>.</p>
+<hr>
+
+<h2 id="ftc_sbitcache_new">FTC_SBitCache_New<a class="headerlink" href="#ftc_sbitcache_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new cache to store small glyph bitmaps.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the source cache manager.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acache">acache</td><td class="desc">
+<p>A handle to the new sbit cache. <code>NULL</code> in case of error.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ftc_sbitcache_lookup">FTC_SBitCache_Lookup<a class="headerlink" href="#ftc_sbitcache_lookup" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="cache">cache</td><td class="desc">
+<p>A handle to the source sbit cache.</p>
+</td></tr>
+<tr><td class="val" id="type">type</td><td class="desc">
+<p>A pointer to the glyph image type descriptor.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="sbit">sbit</td><td class="desc">
+<p>A handle to a small bitmap descriptor.</p>
+</td></tr>
+<tr><td class="val" id="anode">anode</td><td class="desc">
+<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code>buffer</code> field is set to&nbsp;0 to indicate a missing glyph bitmap.</p>
+<p>If <code>anode</code> is <em>not</em> <code>NULL</code>, 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 <code><a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a></code> to &lsquo;release&rsquo; it.</p>
+<p>If <code>anode</code> is <code>NULL</code>, 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>
+<hr>
+
+<h2 id="ftc_cmapcache">FTC_CMapCache<a class="headerlink" href="#ftc_cmapcache" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_CMapCacheRec_* <b>FTC_CMapCache</b>;
+</pre>
+</div>
+
+<p>An opaque handle used to model a charmap cache. This cache is to hold character codes -&gt; glyph indices mappings.</p>
+<hr>
+
+<h2 id="ftc_cmapcache_new">FTC_CMapCache_New<a class="headerlink" href="#ftc_cmapcache_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new charmap cache.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="manager">manager</td><td class="desc">
+<p>A handle to the cache manager.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acache">acache</td><td class="desc">
+<p>A new cache handle. <code>NULL</code> in case of error.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Like all other caches, this one will be destroyed with the cache manager.</p>
+<hr>
+
+<h2 id="ftc_cmapcache_lookup">FTC_CMapCache_Lookup<a class="headerlink" href="#ftc_cmapcache_lookup" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Translate a character code into a glyph index, using the charmap cache.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="cache">cache</td><td class="desc">
+<p>A charmap cache handle.</p>
+</td></tr>
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The source face ID.</p>
+</td></tr>
+<tr><td class="val" id="cmap_index">cmap_index</td><td class="desc">
+<p>The index of the charmap in the source face. Any negative value means to use the cache <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>'s default charmap.</p>
+</td></tr>
+<tr><td class="val" id="char_code">char_code</td><td class="desc">
+<p>The character code (in the corresponding charmap).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Glyph index. 0&nbsp;means &lsquo;no glyph&rsquo;.</p>
+<hr>
+
+<h2 id="ftc_scalerrec">FTC_ScalerRec<a class="headerlink" href="#ftc_scalerrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to describe a given character size in either pixels or points to the cache manager. See <code><a href="ft2-cache_subsystem.html#ftc_manager_lookupsize">FTC_Manager_LookupSize</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The source face ID.</p>
+</td></tr>
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The character width.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The character height.</p>
+</td></tr>
+<tr><td class="val" id="pixel">pixel</td><td class="desc">
+<p>A Boolean. If 1, the <code>width</code> and <code>height</code> fields are interpreted as integer pixel character sizes. Otherwise, they are expressed as 1/64th of points.</p>
+</td></tr>
+<tr><td class="val" id="x_res">x_res</td><td class="desc">
+<p>Only used when <code>pixel</code> is value&nbsp;0 to indicate the horizontal resolution in dpi.</p>
+</td></tr>
+<tr><td class="val" id="y_res">y_res</td><td class="desc">
+<p>Only used when <code>pixel</code> is value&nbsp;0 to indicate the vertical resolution in dpi.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This type is mainly used to retrieve <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects through the cache manager.</p>
+<hr>
+
+<h2 id="ftc_scaler">FTC_Scaler<a class="headerlink" href="#ftc_scaler" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_* <b>FTC_Scaler</b>;
+</pre>
+</div>
+
+<p>A handle to an <code><a href="ft2-cache_subsystem.html#ftc_scalerrec">FTC_ScalerRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ftc_imagetyperec">FTC_ImageTypeRec<a class="headerlink" href="#ftc_imagetyperec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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_uint">FT_UInt</a> width;
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> height;
+ <a href="ft2-basic_types.html#ft_int32">FT_Int32</a> flags;
+
+ } <b>FTC_ImageTypeRec</b>;
+</pre>
+</div>
+
+<p>A structure used to model the type of images in a glyph cache.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="face_id">face_id</td><td class="desc">
+<p>The face ID.</p>
+</td></tr>
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The width in pixels.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The height in pixels.</p>
+</td></tr>
+<tr><td class="val" id="flags">flags</td><td class="desc">
+<p>The load flags, as in <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ftc_imagetype">FTC_ImageType<a class="headerlink" href="#ftc_imagetype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_* <b>FTC_ImageType</b>;
+</pre>
+</div>
+
+<p>A handle to an <code><a href="ft2-cache_subsystem.html#ftc_imagetyperec">FTC_ImageTypeRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ftc_imagecache_lookupscaler">FTC_ImageCache_LookupScaler<a class="headerlink" href="#ftc_imagecache_lookupscaler" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A variant of <code><a href="ft2-cache_subsystem.html#ftc_imagecache_lookup">FTC_ImageCache_Lookup</a></code> that uses an <code><a href="ft2-cache_subsystem.html#ftc_scalerrec">FTC_ScalerRec</a></code> to specify the face ID and its size.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="cache">cache</td><td class="desc">
+<p>A handle to the source glyph image cache.</p>
+</td></tr>
+<tr><td class="val" id="scaler">scaler</td><td class="desc">
+<p>A pointer to a scaler descriptor.</p>
+</td></tr>
+<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>The corresponding load flags.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index to retrieve.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
+<p>The corresponding <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> object. 0&nbsp;in case of failure.</p>
+</td></tr>
+<tr><td class="val" id="anode">anode</td><td class="desc">
+<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-glyph_management.html#ft_glyph_copy">FT_Glyph_Copy</a></code> and modify the new one.</p>
+<p>If <code>anode</code> is <em>not</em> <code>NULL</code>, 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 <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code>) will always be kept in the cache until you call <code><a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a></code> to &lsquo;release&rsquo; it.</p>
+<p>If <code>anode</code> is <code>NULL</code>, the cache node is left unchanged, which means that the <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> 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>
+<p>Calls to <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code> and friends have no effect on cached glyphs; you should always use the FreeType cache API instead.</p>
+<hr>
+
+<h2 id="ftc_sbitrec">FTC_SBitRec<a class="headerlink" href="#ftc_sbitrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A very compact structure used to describe a small glyph bitmap.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="width">width</td><td class="desc">
+<p>The bitmap width in pixels.</p>
+</td></tr>
+<tr><td class="val" id="height">height</td><td class="desc">
+<p>The bitmap height in pixels.</p>
+</td></tr>
+<tr><td class="val" id="left">left</td><td class="desc">
+<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><td class="val" id="top">top</td><td class="desc">
+<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><td class="val" id="format">format</td><td class="desc">
+<p>The format of the glyph bitmap (monochrome or gray).</p>
+</td></tr>
+<tr><td class="val" id="max_grays">max_grays</td><td class="desc">
+<p>Maximum gray level value (in the range 1 to&nbsp;255).</p>
+</td></tr>
+<tr><td class="val" id="pitch">pitch</td><td class="desc">
+<p>The number of bytes per bitmap line. May be positive or negative.</p>
+</td></tr>
+<tr><td class="val" id="xadvance">xadvance</td><td class="desc">
+<p>The horizontal advance width in pixels.</p>
+</td></tr>
+<tr><td class="val" id="yadvance">yadvance</td><td class="desc">
+<p>The vertical advance height in pixels.</p>
+</td></tr>
+<tr><td class="val" id="buffer">buffer</td><td class="desc">
+<p>A pointer to the bitmap pixels.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ftc_sbitcache_lookupscaler">FTC_SBitCache_LookupScaler<a class="headerlink" href="#ftc_sbitcache_lookupscaler" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CACHE_H (freetype/ftcache.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A variant of <code><a href="ft2-cache_subsystem.html#ftc_sbitcache_lookup">FTC_SBitCache_Lookup</a></code> that uses an <code><a href="ft2-cache_subsystem.html#ftc_scalerrec">FTC_ScalerRec</a></code> to specify the face ID and its size.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="cache">cache</td><td class="desc">
+<p>A handle to the source sbit cache.</p>
+</td></tr>
+<tr><td class="val" id="scaler">scaler</td><td class="desc">
+<p>A pointer to the scaler descriptor.</p>
+</td></tr>
+<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>The corresponding load flags.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="sbit">sbit</td><td class="desc">
+<p>A handle to a small bitmap descriptor.</p>
+</td></tr>
+<tr><td class="val" id="anode">anode</td><td class="desc">
+<p>Used to return the address of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code>buffer</code> field is set to&nbsp;0 to indicate a missing glyph bitmap.</p>
+<p>If <code>anode</code> is <em>not</em> <code>NULL</code>, 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 <code><a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a></code> to &lsquo;release&rsquo; it.</p>
+<p>If <code>anode</code> is <code>NULL</code>, 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>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Subpixel Rendering
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-computations.html" title="Computations" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Computations
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-cff_driver.html b/freetype/docs/reference/site/ft2-cff_driver.html
new file mode 100644
index 00000000..01c3548d
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-cff_driver.html
@@ -0,0 +1,1163 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The CFF driver - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-cff-driver" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The CFF driver
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The CFF driver
+ </label>
+
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link md-nav__link--active">
+ The CFF driver
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The CFF driver</p>
+<hr />
+<h1 id="the-cff-driver">The CFF driver<a class="headerlink" href="#the-cff-driver" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>.</p>
+<p>The CFF driver's module name is &lsquo;cff&rsquo;.</p>
+<p>Available properties are <code><a href="ft2-properties.html#hinting-engine">hinting-engine</a></code>, <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code>, <code><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a></code>, and <code><a href="ft2-properties.html#random-seed">random-seed</a></code>, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
+<p><strong>Hinting and antialiasing principles of the new engine</strong></p>
+<p>The rasterizer is positioning horizontal features (e.g., ascender height &amp; x-height, or crossbars) on the pixel grid and minimizing the amount of antialiasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, &lsquo;antialiasing&rsquo; means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance.</p>
+<p>There are two principles behind this approach.</p>
+<p>1) No hinting in the horizontal direction: Unlike &lsquo;superhinted&rsquo; TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is &lsquo;faithful to the design&rsquo; in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied.</p>
+<p>One of the reasons to not hint horizontally is antialiasing for LCD screens: The pixel geometry of modern displays supplies three vertical subpixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the subpixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale antialiasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would.</p>
+<p>2) Alignment in the vertical direction: Weights and spacing along the y&nbsp;axis are less critical; what is much more important is the visual alignment of related features (like cap-height and x-height). The sense of alignment for these is enhanced by the sharpness of grid-fit edges, while the cruder vertical resolution (full pixels instead of &#8531; pixels) is less of a problem.</p>
+<p>On the technical side, horizontal alignment zones for ascender, x-height, and other important height values (traditionally called &lsquo;blue zones&rsquo;) as defined in the font are positioned independently, each being rounded to the nearest pixel edge, taking care of overshoot suppression at small sizes, stem darkening, and scaling.</p>
+<p>Hstems (this is, hint values defined in the font to help align horizontal features) that fall within a blue zone are said to be &lsquo;captured&rsquo; and are aligned to that zone. Uncaptured stems are moved in one of four ways, top edge up or down, bottom edge up or down. Unless there are conflicting hstems, the smallest movement is taken to minimize distortion.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The auto-hinter
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The Type 1 and CID drivers
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-cid_fonts.html b/freetype/docs/reference/site/ft2-cid_fonts.html
new file mode 100644
index 00000000..6673c2ea
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-cid_fonts.html
@@ -0,0 +1,1320 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>CID Fonts - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#cid-fonts" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ CID Fonts
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ CID Fonts
+ </label>
+
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link md-nav__link--active">
+ CID Fonts
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_registry_ordering_supplement" title="FT_Get_CID_Registry_Ordering_Supplement" class="md-nav__link">
+ FT_Get_CID_Registry_Ordering_Supplement
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_is_internally_cid_keyed" title="FT_Get_CID_Is_Internally_CID_Keyed" class="md-nav__link">
+ FT_Get_CID_Is_Internally_CID_Keyed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_from_glyph_index" title="FT_Get_CID_From_Glyph_Index" class="md-nav__link">
+ FT_Get_CID_From_Glyph_Index
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_registry_ordering_supplement" title="FT_Get_CID_Registry_Ordering_Supplement" class="md-nav__link">
+ FT_Get_CID_Registry_Ordering_Supplement
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_is_internally_cid_keyed" title="FT_Get_CID_Is_Internally_CID_Keyed" class="md-nav__link">
+ FT_Get_CID_Is_Internally_CID_Keyed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cid_from_glyph_index" title="FT_Get_CID_From_Glyph_Index" class="md-nav__link">
+ FT_Get_CID_From_Glyph_Index
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; CID Fonts</p>
+<hr />
+<h1 id="cid-fonts">CID Fonts<a class="headerlink" href="#cid-fonts" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of CID-keyed font-specific functions.</p>
+<h2 id="ft_get_cid_registry_ordering_supplement">FT_Get_CID_Registry_Ordering_Supplement<a class="headerlink" href="#ft_get_cid_registry_ordering_supplement" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the Registry/Ordering/Supplement triple (also known as the "R/O/S") from a CID-keyed font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="registry">registry</td><td class="desc">
+<p>The registry, as a C&nbsp;string, owned by the face.</p>
+</td></tr>
+<tr><td class="val" id="ordering">ordering</td><td class="desc">
+<p>The ordering, as a C&nbsp;string, owned by the face.</p>
+</td></tr>
+<tr><td class="val" id="supplement">supplement</td><td class="desc">
+<p>The supplement.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with CID faces, returning an error otherwise.</p>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+<h2 id="ft_get_cid_is_internally_cid_keyed">FT_Get_CID_Is_Internally_CID_Keyed<a class="headerlink" href="#ft_get_cid_is_internally_cid_keyed" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_CID_Is_Internally_CID_Keyed</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_bool">FT_Bool</a> *is_cid );
+</pre>
+</div>
+
+<p>Retrieve the type of the input face, CID keyed or not. In contrast to the <code><a href="ft2-base_interface.html#ft_is_cid_keyed">FT_IS_CID_KEYED</a></code> macro this function returns successfully also for CID-keyed fonts in an SFNT wrapper.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="is_cid">is_cid</td><td class="desc">
+<p>The type of the face as an <code><a href="ft2-basic_types.html#ft_bool">FT_Bool</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with CID faces and OpenType fonts, returning an error otherwise.</p>
+<h4>since</h4>
+
+<p>2.3.9</p>
+<hr>
+
+<h2 id="ft_get_cid_from_glyph_index">FT_Get_CID_From_Glyph_Index<a class="headerlink" href="#ft_get_cid_from_glyph_index" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_CID_H (freetype/ftcid.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_CID_From_Glyph_Index</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_uint">FT_UInt</a> *cid );
+</pre>
+</div>
+
+<p>Retrieve the CID of the input glyph index.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<p>The input glyph index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="cid">cid</td><td class="desc">
+<p>The CID as an <code><a href="ft2-basic_types.html#ft_uint">FT_UInt</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with CID faces and OpenType fonts, returning an error otherwise.</p>
+<h4>since</h4>
+
+<p>2.3.9</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ BDF and PCF Files
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ PFR Fonts
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-color_management.html b/freetype/docs/reference/site/ft2-color_management.html
new file mode 100644
index 00000000..b219456a
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-color_management.html
@@ -0,0 +1,1471 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Glyph Color Management - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#glyph-color-management" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Glyph Color Management
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Glyph Color Management
+ </label>
+
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link md-nav__link--active">
+ Glyph Color Management
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_color" title="FT_Color" class="md-nav__link">
+ FT_Color
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_xxx" title="FT_PALETTE_XXX" class="md-nav__link">
+ FT_PALETTE_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_data" title="FT_Palette_Data" class="md-nav__link">
+ FT_Palette_Data
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_data_get" title="FT_Palette_Data_Get" class="md-nav__link">
+ FT_Palette_Data_Get
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_select" title="FT_Palette_Select" class="md-nav__link">
+ FT_Palette_Select
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_set_foreground_color" title="FT_Palette_Set_Foreground_Color" class="md-nav__link">
+ FT_Palette_Set_Foreground_Color
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_color" title="FT_Color" class="md-nav__link">
+ FT_Color
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_xxx" title="FT_PALETTE_XXX" class="md-nav__link">
+ FT_PALETTE_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_data" title="FT_Palette_Data" class="md-nav__link">
+ FT_Palette_Data
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_data_get" title="FT_Palette_Data_Get" class="md-nav__link">
+ FT_Palette_Data_Get
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_select" title="FT_Palette_Select" class="md-nav__link">
+ FT_Palette_Select
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_palette_set_foreground_color" title="FT_Palette_Set_Foreground_Color" class="md-nav__link">
+ FT_Palette_Set_Foreground_Color
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Glyph Color Management</p>
+<hr />
+<h1 id="glyph-color-management">Glyph Color Management<a class="headerlink" href="#glyph-color-management" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The functions described here allow access and manipulation of color palette entries in OpenType's &lsquo;CPAL&rsquo; tables.</p>
+<h2 id="ft_color">FT_Color<a class="headerlink" href="#ft_color" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Color_
+ {
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> blue;
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> green;
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> red;
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> alpha;
+
+ } <b>FT_Color</b>;
+</pre>
+</div>
+
+<p>This structure models a BGRA color value of a &lsquo;CPAL&rsquo; palette entry.</p>
+<p>The used color space is sRGB; the colors are not pre-multiplied, and alpha values must be explicitly set.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="blue">blue</td><td class="desc">
+<p>Blue value.</p>
+</td></tr>
+<tr><td class="val" id="green">green</td><td class="desc">
+<p>Green value.</p>
+</td></tr>
+<tr><td class="val" id="red">red</td><td class="desc">
+<p>Red value.</p>
+</td></tr>
+<tr><td class="val" id="alpha">alpha</td><td class="desc">
+<p>Alpha value, giving the red, green, and blue color's opacity.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_palette_xxx">FT_PALETTE_XXX<a class="headerlink" href="#ft_palette_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-color_management.html#ft_palette_for_light_background">FT_PALETTE_FOR_LIGHT_BACKGROUND</a> 0x01
+#<span class="keyword">define</span> <a href="ft2-color_management.html#ft_palette_for_dark_background">FT_PALETTE_FOR_DARK_BACKGROUND</a> 0x02
+</pre>
+</div>
+
+<p>A list of bit field constants used in the <code>palette_flags</code> array of the <code><a href="ft2-color_management.html#ft_palette_data">FT_Palette_Data</a></code> structure to indicate for which background a palette with a given index is usable.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_palette_for_light_background">FT_PALETTE_FOR_LIGHT_BACKGROUND</td><td class="desc">
+<p>The palette is appropriate to use when displaying the font on a light background such as white.</p>
+</td></tr>
+<tr><td class="val" id="ft_palette_for_dark_background">FT_PALETTE_FOR_DARK_BACKGROUND</td><td class="desc">
+<p>The palette is appropriate to use when displaying the font on a dark background such as black.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_palette_data">FT_Palette_Data<a class="headerlink" href="#ft_palette_data" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Palette_Data_ {
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> num_palettes;
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a>* palette_name_ids;
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a>* palette_flags;
+
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> num_palette_entries;
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a>* palette_entry_name_ids;
+
+ } <b>FT_Palette_Data</b>;
+</pre>
+</div>
+
+<p>This structure holds the data of the &lsquo;CPAL&rsquo; table.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_palettes">num_palettes</td><td class="desc">
+<p>The number of palettes.</p>
+</td></tr>
+<tr><td class="val" id="palette_name_ids">palette_name_ids</td><td class="desc">
+<p>A read-only array of palette name IDs with <code>num_palettes</code> elements, corresponding to entries like &lsquo;dark&rsquo; or &lsquo;light&rsquo; in the font's &lsquo;name&rsquo; table.</p>
+<p>An empty name ID in the &lsquo;CPAL&rsquo; table gets represented as value 0xFFFF.</p>
+<p><code>NULL</code> if the font's &lsquo;CPAL&rsquo; table doesn't contain appropriate data.</p>
+</td></tr>
+<tr><td class="val" id="palette_flags">palette_flags</td><td class="desc">
+<p>A read-only array of palette flags with <code>num_palettes</code> elements. Possible values are an ORed combination of <code><a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_FOR_LIGHT_BACKGROUND</a></code> and <code><a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_FOR_DARK_BACKGROUND</a></code>.</p>
+<p><code>NULL</code> if the font's &lsquo;CPAL&rsquo; table doesn't contain appropriate data.</p>
+</td></tr>
+<tr><td class="val" id="num_palette_entries">num_palette_entries</td><td class="desc">
+<p>The number of entries in a single palette. All palettes have the same size.</p>
+</td></tr>
+<tr><td class="val" id="palette_entry_name_ids">palette_entry_name_ids</td><td class="desc">
+<p>A read-only array of palette entry name IDs with <code>num_palette_entries</code>. In each palette, entries with the same index have the same function. For example, index&nbsp;0 might correspond to string &lsquo;outline&rsquo; in the font's &lsquo;name&rsquo; table to indicate that this palette entry is used for outlines, index&nbsp;1 might correspond to &lsquo;fill&rsquo; to indicate the filling color palette entry, etc.</p>
+<p>An empty entry name ID in the &lsquo;CPAL&rsquo; table gets represented as value 0xFFFF.</p>
+<p><code>NULL</code> if the font's &lsquo;CPAL&rsquo; table doesn't contain appropriate data.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Use function <code><a href="ft2-sfnt_names.html#ft_get_sfnt_name">FT_Get_Sfnt_Name</a></code> to map name IDs and entry name IDs to name strings.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_palette_data_get">FT_Palette_Data_Get<a class="headerlink" href="#ft_palette_data_get" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Palette_Data_Get</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-color_management.html#ft_palette_data">FT_Palette_Data</a> *apalette );
+</pre>
+</div>
+
+<p>Retrieve the face's color palette data.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source face handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="apalette">apalette</td><td class="desc">
+<p>A pointer to an <code><a href="ft2-color_management.html#ft_palette_data">FT_Palette_Data</a></code> structure.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>All arrays in the returned <code><a href="ft2-color_management.html#ft_palette_data">FT_Palette_Data</a></code> structure are read-only.</p>
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_COLOR_LAYERS</code> is not defined in <code>ftoption.h</code>.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_palette_select">FT_Palette_Select<a class="headerlink" href="#ft_palette_select" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Palette_Select</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> palette_index,
+ <a href="ft2-color_management.html#ft_color">FT_Color</a>* *apalette );
+</pre>
+</div>
+
+<p>This function has two purposes.</p>
+<p>(1) It activates a palette for rendering color glyphs, and</p>
+<p>(2) it retrieves all (unmodified) color entries of this palette. This function returns a read-write array, which means that a calling application can modify the palette entries on demand.</p>
+<p>A corollary of (2) is that calling the function, then modifying some values, then calling the function again with the same arguments resets all color entries to the original &lsquo;CPAL&rsquo; values; all user modifications are lost.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source face handle.</p>
+</td></tr>
+<tr><td class="val" id="palette_index">palette_index</td><td class="desc">
+<p>The palette index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="apalette">apalette</td><td class="desc">
+<p>An array of color entries for a palette with index <code>palette_index</code>, having <code>num_palette_entries</code> elements (as found in the <code>FT_Palette_Data</code> structure). If <code>apalette</code> is set to <code>NULL</code>, no array gets returned (and no color entries can be modified).</p>
+<p>In case the font doesn't support color palettes, <code>NULL</code> is returned.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The array pointed to by <code>apalette_entries</code> is owned and managed by FreeType.</p>
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_COLOR_LAYERS</code> is not defined in <code>ftoption.h</code>.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_palette_set_foreground_color">FT_Palette_Set_Foreground_Color<a class="headerlink" href="#ft_palette_set_foreground_color" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_COLOR_H (freetype/ftcolor.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Palette_Set_Foreground_Color</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-color_management.html#ft_color">FT_Color</a> foreground_color );
+</pre>
+</div>
+
+<p>&lsquo;COLR&rsquo; uses palette index 0xFFFF to indicate a &lsquo;text foreground color&rsquo;. This function sets this value.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source face handle.</p>
+</td></tr>
+<tr><td class="val" id="foreground_color">foreground_color</td><td class="desc">
+<p>An <code>FT_Color</code> structure to define the text foreground color.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If this function isn't called, the text foreground color is set to white opaque (BGRA value 0xFFFFFFFF) if <code><a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_FOR_DARK_BACKGROUND</a></code> is present for the current palette, and black opaque (BGRA value 0x000000FF) otherwise, including the case that no palette types are available in the &lsquo;CPAL&rsquo; table.</p>
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_COLOR_LAYERS</code> is not defined in <code>ftoption.h</code>.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Unicode Variation Sequences
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Glyph Layer Management
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-computations.html b/freetype/docs/reference/site/ft2-computations.html
new file mode 100644
index 00000000..e499955b
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-computations.html
@@ -0,0 +1,2074 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Computations - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#computations" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Computations
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Computations
+ </label>
+
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link md-nav__link--active">
+ Computations
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_muldiv" title="FT_MulDiv" class="md-nav__link">
+ FT_MulDiv
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mulfix" title="FT_MulFix" class="md-nav__link">
+ FT_MulFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_divfix" title="FT_DivFix" class="md-nav__link">
+ FT_DivFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_roundfix" title="FT_RoundFix" class="md-nav__link">
+ FT_RoundFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ceilfix" title="FT_CeilFix" class="md-nav__link">
+ FT_CeilFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_floorfix" title="FT_FloorFix" class="md-nav__link">
+ FT_FloorFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_transform" title="FT_Vector_Transform" class="md-nav__link">
+ FT_Vector_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix_multiply" title="FT_Matrix_Multiply" class="md-nav__link">
+ FT_Matrix_Multiply
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix_invert" title="FT_Matrix_Invert" class="md-nav__link">
+ FT_Matrix_Invert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle" title="FT_Angle" class="md-nav__link">
+ FT_Angle
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi" title="FT_ANGLE_PI" class="md-nav__link">
+ FT_ANGLE_PI
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_2pi" title="FT_ANGLE_2PI" class="md-nav__link">
+ FT_ANGLE_2PI
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi2" title="FT_ANGLE_PI2" class="md-nav__link">
+ FT_ANGLE_PI2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi4" title="FT_ANGLE_PI4" class="md-nav__link">
+ FT_ANGLE_PI4
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sin" title="FT_Sin" class="md-nav__link">
+ FT_Sin
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cos" title="FT_Cos" class="md-nav__link">
+ FT_Cos
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_tan" title="FT_Tan" class="md-nav__link">
+ FT_Tan
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_atan2" title="FT_Atan2" class="md-nav__link">
+ FT_Atan2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_diff" title="FT_Angle_Diff" class="md-nav__link">
+ FT_Angle_Diff
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_unit" title="FT_Vector_Unit" class="md-nav__link">
+ FT_Vector_Unit
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_rotate" title="FT_Vector_Rotate" class="md-nav__link">
+ FT_Vector_Rotate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_length" title="FT_Vector_Length" class="md-nav__link">
+ FT_Vector_Length
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_polarize" title="FT_Vector_Polarize" class="md-nav__link">
+ FT_Vector_Polarize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_from_polar" title="FT_Vector_From_Polar" class="md-nav__link">
+ FT_Vector_From_Polar
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_muldiv" title="FT_MulDiv" class="md-nav__link">
+ FT_MulDiv
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mulfix" title="FT_MulFix" class="md-nav__link">
+ FT_MulFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_divfix" title="FT_DivFix" class="md-nav__link">
+ FT_DivFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_roundfix" title="FT_RoundFix" class="md-nav__link">
+ FT_RoundFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_ceilfix" title="FT_CeilFix" class="md-nav__link">
+ FT_CeilFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_floorfix" title="FT_FloorFix" class="md-nav__link">
+ FT_FloorFix
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_transform" title="FT_Vector_Transform" class="md-nav__link">
+ FT_Vector_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix_multiply" title="FT_Matrix_Multiply" class="md-nav__link">
+ FT_Matrix_Multiply
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_matrix_invert" title="FT_Matrix_Invert" class="md-nav__link">
+ FT_Matrix_Invert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle" title="FT_Angle" class="md-nav__link">
+ FT_Angle
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi" title="FT_ANGLE_PI" class="md-nav__link">
+ FT_ANGLE_PI
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_2pi" title="FT_ANGLE_2PI" class="md-nav__link">
+ FT_ANGLE_2PI
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi2" title="FT_ANGLE_PI2" class="md-nav__link">
+ FT_ANGLE_PI2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_pi4" title="FT_ANGLE_PI4" class="md-nav__link">
+ FT_ANGLE_PI4
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sin" title="FT_Sin" class="md-nav__link">
+ FT_Sin
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cos" title="FT_Cos" class="md-nav__link">
+ FT_Cos
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_tan" title="FT_Tan" class="md-nav__link">
+ FT_Tan
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_atan2" title="FT_Atan2" class="md-nav__link">
+ FT_Atan2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_angle_diff" title="FT_Angle_Diff" class="md-nav__link">
+ FT_Angle_Diff
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_unit" title="FT_Vector_Unit" class="md-nav__link">
+ FT_Vector_Unit
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_rotate" title="FT_Vector_Rotate" class="md-nav__link">
+ FT_Vector_Rotate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_length" title="FT_Vector_Length" class="md-nav__link">
+ FT_Vector_Length
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_polarize" title="FT_Vector_Polarize" class="md-nav__link">
+ FT_Vector_Polarize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_vector_from_polar" title="FT_Vector_From_Polar" class="md-nav__link">
+ FT_Vector_From_Polar
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Computations</p>
+<hr />
+<h1 id="computations">Computations<a class="headerlink" href="#computations" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors.</p>
+<p><strong>Attention</strong>: Most arithmetic functions take <code>FT_Long</code> as arguments. For historical reasons, FreeType was designed under the assumption that <code>FT_Long</code> is a 32-bit integer; results can thus be undefined if the arguments don't fit into 32 bits.</p>
+<h2 id="ft_muldiv">FT_MulDiv<a class="headerlink" href="#ft_muldiv" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute <code>(a*b)/c</code> with maximum accuracy, using 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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The first multiplier.</p>
+</td></tr>
+<tr><td class="val" id="b">b</td><td class="desc">
+<p>The second multiplier.</p>
+</td></tr>
+<tr><td class="val" id="c">c</td><td class="desc">
+<p>The divisor.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The result of <code>(a*b)/c</code>. 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 <code>a</code> and <code>b</code>.</p>
+<hr>
+
+<h2 id="ft_mulfix">FT_MulFix<a class="headerlink" href="#ft_mulfix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute <code>(a*b)/0x10000</code> with maximum accuracy. Its main use is to multiply a given value by a 16.16 fixed-point factor.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The first multiplier.</p>
+</td></tr>
+<tr><td class="val" id="b">b</td><td class="desc">
+<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The result of <code>(a*b)/0x10000</code>.</p>
+<h4>note</h4>
+
+<p>This function has been optimized for the case where the absolute value of <code>a</code> is less than 2048, and <code>b</code> 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 <em>second</em> argument of this function; this can make a great difference.</p>
+<hr>
+
+<h2 id="ft_divfix">FT_DivFix<a class="headerlink" href="#ft_divfix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute <code>(a*0x10000)/b</code> with maximum accuracy. Its main use is to divide a given value by a 16.16 fixed-point factor.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The numerator.</p>
+</td></tr>
+<tr><td class="val" id="b">b</td><td class="desc">
+<p>The denominator. Use a 16.16 factor here.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The result of <code>(a*0x10000)/b</code>.</p>
+<hr>
+
+<h2 id="ft_roundfix">FT_RoundFix<a class="headerlink" href="#ft_roundfix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Round a 16.16 fixed number.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The number to be rounded.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p><code>a</code> rounded to the nearest 16.16 fixed integer, halfway cases away from zero.</p>
+<h4>note</h4>
+
+<p>The function uses wrap-around arithmetic.</p>
+<hr>
+
+<h2 id="ft_ceilfix">FT_CeilFix<a class="headerlink" href="#ft_ceilfix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute the smallest following integer of a 16.16 fixed number.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The number for which the ceiling function is to be computed.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p><code>a</code> rounded towards plus infinity.</p>
+<h4>note</h4>
+
+<p>The function uses wrap-around arithmetic.</p>
+<hr>
+
+<h2 id="ft_floorfix">FT_FloorFix<a class="headerlink" href="#ft_floorfix" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute the largest previous integer of a 16.16 fixed number.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>The number for which the floor function is to be computed.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p><code>a</code> rounded towards minus infinity.</p>
+<hr>
+
+<h2 id="ft_vector_transform">FT_Vector_Transform<a class="headerlink" href="#ft_vector_transform" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_Transform</b>( <a href="ft2-basic_types.html#ft_vector">FT_Vector</a>* vector,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_matrix">FT_Matrix</a>* matrix );
+</pre>
+</div>
+
+<p>Transform a single vector through a 2x2 matrix.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="vector">vector</td><td class="desc">
+<p>The target vector to transform.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="matrix">matrix</td><td class="desc">
+<p>A pointer to the source 2x2 matrix.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The result is undefined if either <code>vector</code> or <code>matrix</code> is invalid.</p>
+<hr>
+
+<h2 id="ft_matrix_multiply">FT_Matrix_Multiply<a class="headerlink" href="#ft_matrix_multiply" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Perform the matrix operation <code>b = a*b</code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="a">a</td><td class="desc">
+<p>A pointer to matrix <code>a</code>.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="b">b</td><td class="desc">
+<p>A pointer to matrix <code>b</code>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The result is undefined if either <code>a</code> or <code>b</code> is zero.</p>
+<p>Since the function uses wrap-around arithmetic, results become meaningless if the arguments are very large.</p>
+<hr>
+
+<h2 id="ft_matrix_invert">FT_Matrix_Invert<a class="headerlink" href="#ft_matrix_invert" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Invert a 2x2 matrix. Return an error if it can't be inverted.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="matrix">matrix</td><td class="desc">
+<p>A pointer to the target matrix. Remains untouched in case of error.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_angle">FT_Angle<a class="headerlink" href="#ft_angle" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> <b>FT_Angle</b>;
+</pre>
+</div>
+
+<p>This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed-point value expressed in degrees.</p>
+<hr>
+
+<h2 id="ft_angle_pi">FT_ANGLE_PI<a class="headerlink" href="#ft_angle_pi" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ANGLE_PI</b> ( 180L &lt;&lt; 16 )
+</pre>
+</div>
+
+<p>The angle pi expressed in <code><a href="ft2-computations.html#ft_angle">FT_Angle</a></code> units.</p>
+<hr>
+
+<h2 id="ft_angle_2pi">FT_ANGLE_2PI<a class="headerlink" href="#ft_angle_2pi" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ANGLE_2PI</b> ( <a href="ft2-computations.html#ft_angle_pi">FT_ANGLE_PI</a> * 2 )
+</pre>
+</div>
+
+<p>The angle 2*pi expressed in <code><a href="ft2-computations.html#ft_angle">FT_Angle</a></code> units.</p>
+<hr>
+
+<h2 id="ft_angle_pi2">FT_ANGLE_PI2<a class="headerlink" href="#ft_angle_pi2" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ANGLE_PI2</b> ( <a href="ft2-computations.html#ft_angle_pi">FT_ANGLE_PI</a> / 2 )
+</pre>
+</div>
+
+<p>The angle pi/2 expressed in <code><a href="ft2-computations.html#ft_angle">FT_Angle</a></code> units.</p>
+<hr>
+
+<h2 id="ft_angle_pi4">FT_ANGLE_PI4<a class="headerlink" href="#ft_angle_pi4" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ANGLE_PI4</b> ( <a href="ft2-computations.html#ft_angle_pi">FT_ANGLE_PI</a> / 4 )
+</pre>
+</div>
+
+<p>The angle pi/4 expressed in <code><a href="ft2-computations.html#ft_angle">FT_Angle</a></code> units.</p>
+<hr>
+
+<h2 id="ft_sin">FT_Sin<a class="headerlink" href="#ft_sin" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the sinus of a given angle in fixed-point format.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The input angle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The sinus value.</p>
+<h4>note</h4>
+
+<p>If you need both the sinus and cosinus for a given angle, use the function <code><a href="ft2-computations.html#ft_vector_unit">FT_Vector_Unit</a></code>.</p>
+<hr>
+
+<h2 id="ft_cos">FT_Cos<a class="headerlink" href="#ft_cos" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the cosinus of a given angle in fixed-point format.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The input angle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The cosinus value.</p>
+<h4>note</h4>
+
+<p>If you need both the sinus and cosinus for a given angle, use the function <code><a href="ft2-computations.html#ft_vector_unit">FT_Vector_Unit</a></code>.</p>
+<hr>
+
+<h2 id="ft_tan">FT_Tan<a class="headerlink" href="#ft_tan" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the tangent of a given angle in fixed-point format.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The input angle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The tangent value.</p>
+<hr>
+
+<h2 id="ft_atan2">FT_Atan2<a class="headerlink" href="#ft_atan2" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="x">x</td><td class="desc">
+<p>The horizontal vector coordinate.</p>
+</td></tr>
+<tr><td class="val" id="y">y</td><td class="desc">
+<p>The vertical vector coordinate.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The arc-tangent value (i.e. angle).</p>
+<hr>
+
+<h2 id="ft_angle_diff">FT_Angle_Diff<a class="headerlink" href="#ft_angle_diff" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the difference between two angles. The result is always constrained to the ]-PI..PI] interval.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle1">angle1</td><td class="desc">
+<p>First angle.</p>
+</td></tr>
+<tr><td class="val" id="angle2">angle2</td><td class="desc">
+<p>Second angle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Constrained value of <code>angle2-angle1</code>.</p>
+<hr>
+
+<h2 id="ft_vector_unit">FT_Vector_Unit<a class="headerlink" href="#ft_vector_unit" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the unit vector corresponding to a given angle. After the call, the value of <code>vec.x</code> will be <code>cos(angle)</code>, and the value of <code>vec.y</code> will be <code>sin(angle)</code>.</p>
+<p>This function is useful to retrieve both the sinus and cosinus of a given angle quickly.</p>
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="vec">vec</td><td class="desc">
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The input angle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_vector_rotate">FT_Vector_Rotate<a class="headerlink" href="#ft_vector_rotate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Rotate a vector by a given angle.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="vec">vec</td><td class="desc">
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The input angle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_vector_length">FT_Vector_Length<a class="headerlink" href="#ft_vector_length" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the length of a given vector.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="vec">vec</td><td class="desc">
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The vector length, expressed in the same units that the original vector coordinates.</p>
+<hr>
+
+<h2 id="ft_vector_polarize">FT_Vector_Polarize<a class="headerlink" href="#ft_vector_polarize" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute both the length and angle of a given vector.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="vec">vec</td><td class="desc">
+<p>The address of source vector.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="length">length</td><td class="desc">
+<p>The vector length.</p>
+</td></tr>
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The vector angle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_vector_from_polar">FT_Vector_From_Polar<a class="headerlink" href="#ft_vector_from_polar" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute vector coordinates from a length and angle.</p>
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="vec">vec</td><td class="desc">
+<p>The address of source vector.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="length">length</td><td class="desc">
+<p>The vector length.</p>
+</td></tr>
+<tr><td class="val" id="angle">angle</td><td class="desc">
+<p>The vector angle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Cache Sub-System
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-list_processing.html" title="List Processing" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ List Processing
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-error_code_values.html b/freetype/docs/reference/site/ft2-error_code_values.html
new file mode 100644
index 00000000..a9535e44
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-error_code_values.html
@@ -0,0 +1,1395 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Error Code Values - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#error-code-values" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Error Code Values
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9" checked>
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Error Code Values
+ </label>
+
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link md-nav__link--active">
+ Error Code Values
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_err_xxx" title="FT_Err_XXX" class="md-nav__link">
+ FT_Err_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_err_xxx" title="FT_Err_XXX" class="md-nav__link">
+ FT_Err_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#error-codes">Error Codes</a> &raquo; Error Code Values</p>
+<hr />
+<h1 id="error-code-values">Error Code Values<a class="headerlink" href="#error-code-values" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The list below is taken verbatim from the file <code>fterrdef.h</code> (loaded automatically by including <code>FT_FREETYPE_H</code>). The first argument of the <code>FT_ERROR_DEF_</code> macro is the error label; by default, the prefix <code>FT_Err_</code> gets added so that you get error names like <code>FT_Err_Cannot_Open_Resource</code>. The second argument is the error code, and the last argument an error string, which is not used by FreeType.</p>
+<p>Within your application you should <strong>only</strong> use error names and <strong>never</strong> its numeric values! The latter might (and actually do) change in forthcoming FreeType versions.</p>
+<p>Macro <code>FT_NOERRORDEF_</code> defines <code>FT_Err_Ok</code>, which is always zero. See the &lsquo;Error Enumerations&rsquo; subsection how to automatically generate a list of error strings.</p>
+<h2 id="ft_err_xxx">FT_Err_XXX<a class="headerlink" href="#ft_err_xxx" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+ /* generic errors */
+
+ FT_NOERRORDEF_( Ok, 0x00,
+ "no error" )
+
+ FT_ERRORDEF_( Cannot_Open_Resource, 0x01,
+ "cannot open resource" )
+ FT_ERRORDEF_( Unknown_File_Format, 0x02,
+ "unknown file format" )
+ FT_ERRORDEF_( Invalid_File_Format, 0x03,
+ "broken file" )
+ FT_ERRORDEF_( Invalid_Version, 0x04,
+ "invalid FreeType version" )
+ FT_ERRORDEF_( Lower_Module_Version, 0x05,
+ "module version is too low" )
+ FT_ERRORDEF_( Invalid_Argument, 0x06,
+ "invalid argument" )
+ FT_ERRORDEF_( Unimplemented_Feature, 0x07,
+ "unimplemented feature" )
+ FT_ERRORDEF_( Invalid_Table, 0x08,
+ "broken table" )
+ FT_ERRORDEF_( Invalid_Offset, 0x09,
+ "broken offset within table" )
+ FT_ERRORDEF_( Array_Too_Large, 0x0A,
+ "array allocation size too large" )
+ FT_ERRORDEF_( Missing_Module, 0x0B,
+ "missing module" )
+ FT_ERRORDEF_( Missing_Property, 0x0C,
+ "missing property" )
+
+ /* glyph/character errors */
+
+ FT_ERRORDEF_( Invalid_Glyph_Index, 0x10,
+ "invalid glyph index" )
+ FT_ERRORDEF_( Invalid_Character_Code, 0x11,
+ "invalid character code" )
+ FT_ERRORDEF_( Invalid_Glyph_Format, 0x12,
+ "unsupported glyph image format" )
+ FT_ERRORDEF_( Cannot_Render_Glyph, 0x13,
+ "cannot render this glyph format" )
+ FT_ERRORDEF_( Invalid_Outline, 0x14,
+ "invalid outline" )
+ FT_ERRORDEF_( Invalid_Composite, 0x15,
+ "invalid composite glyph" )
+ FT_ERRORDEF_( Too_Many_Hints, 0x16,
+ "too many hints" )
+ FT_ERRORDEF_( Invalid_Pixel_Size, 0x17,
+ "invalid pixel size" )
+
+ /* handle errors */
+
+ FT_ERRORDEF_( Invalid_Handle, 0x20,
+ "invalid object handle" )
+ FT_ERRORDEF_( Invalid_Library_Handle, 0x21,
+ "invalid library handle" )
+ FT_ERRORDEF_( Invalid_Driver_Handle, 0x22,
+ "invalid module handle" )
+ FT_ERRORDEF_( Invalid_Face_Handle, 0x23,
+ "invalid face handle" )
+ FT_ERRORDEF_( Invalid_Size_Handle, 0x24,
+ "invalid size handle" )
+ FT_ERRORDEF_( Invalid_Slot_Handle, 0x25,
+ "invalid glyph slot handle" )
+ FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26,
+ "invalid charmap handle" )
+ FT_ERRORDEF_( Invalid_Cache_Handle, 0x27,
+ "invalid cache manager handle" )
+ FT_ERRORDEF_( Invalid_Stream_Handle, 0x28,
+ "invalid stream handle" )
+
+ /* driver errors */
+
+ FT_ERRORDEF_( Too_Many_Drivers, 0x30,
+ "too many modules" )
+ FT_ERRORDEF_( Too_Many_Extensions, 0x31,
+ "too many extensions" )
+
+ /* memory errors */
+
+ FT_ERRORDEF_( Out_Of_Memory, 0x40,
+ "out of memory" )
+ FT_ERRORDEF_( Unlisted_Object, 0x41,
+ "unlisted object" )
+
+ /* stream errors */
+
+ FT_ERRORDEF_( Cannot_Open_Stream, 0x51,
+ "cannot open stream" )
+ FT_ERRORDEF_( Invalid_Stream_Seek, 0x52,
+ "invalid stream seek" )
+ FT_ERRORDEF_( Invalid_Stream_Skip, 0x53,
+ "invalid stream skip" )
+ FT_ERRORDEF_( Invalid_Stream_Read, 0x54,
+ "invalid stream read" )
+ FT_ERRORDEF_( Invalid_Stream_Operation, 0x55,
+ "invalid stream operation" )
+ FT_ERRORDEF_( Invalid_Frame_Operation, 0x56,
+ "invalid frame operation" )
+ FT_ERRORDEF_( Nested_Frame_Access, 0x57,
+ "nested frame access" )
+ FT_ERRORDEF_( Invalid_Frame_Read, 0x58,
+ "invalid frame read" )
+
+ /* raster errors */
+
+ FT_ERRORDEF_( Raster_Uninitialized, 0x60,
+ "raster uninitialized" )
+ FT_ERRORDEF_( Raster_Corrupted, 0x61,
+ "raster corrupted" )
+ FT_ERRORDEF_( Raster_Overflow, 0x62,
+ "raster overflow" )
+ FT_ERRORDEF_( Raster_Negative_Height, 0x63,
+ "negative height while rastering" )
+
+ /* cache errors */
+
+ FT_ERRORDEF_( Too_Many_Caches, 0x70,
+ "too many registered caches" )
+
+ /* TrueType and SFNT errors */
+
+ FT_ERRORDEF_( Invalid_Opcode, 0x80,
+ "invalid opcode" )
+ FT_ERRORDEF_( Too_Few_Arguments, 0x81,
+ "too few arguments" )
+ FT_ERRORDEF_( Stack_Overflow, 0x82,
+ "stack overflow" )
+ FT_ERRORDEF_( Code_Overflow, 0x83,
+ "code overflow" )
+ FT_ERRORDEF_( Bad_Argument, 0x84,
+ "bad argument" )
+ FT_ERRORDEF_( Divide_By_Zero, 0x85,
+ "division by zero" )
+ FT_ERRORDEF_( Invalid_Reference, 0x86,
+ "invalid reference" )
+ FT_ERRORDEF_( Debug_OpCode, 0x87,
+ "found debug opcode" )
+ FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88,
+ "found ENDF opcode in execution stream" )
+ FT_ERRORDEF_( Nested_DEFS, 0x89,
+ "nested DEFS" )
+ FT_ERRORDEF_( Invalid_CodeRange, 0x8A,
+ "invalid code range" )
+ FT_ERRORDEF_( Execution_Too_Long, 0x8B,
+ "execution context too <span class="keyword">long</span>" )
+ FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C,
+ "too many function definitions" )
+ FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D,
+ "too many instruction definitions" )
+ FT_ERRORDEF_( Table_Missing, 0x8E,
+ "SFNT font table missing" )
+ FT_ERRORDEF_( Horiz_Header_Missing, 0x8F,
+ "horizontal header (hhea) table missing" )
+ FT_ERRORDEF_( Locations_Missing, 0x90,
+ "locations (loca) table missing" )
+ FT_ERRORDEF_( Name_Table_Missing, 0x91,
+ "name table missing" )
+ FT_ERRORDEF_( CMap_Table_Missing, 0x92,
+ "character map (cmap) table missing" )
+ FT_ERRORDEF_( Hmtx_Table_Missing, 0x93,
+ "horizontal metrics (hmtx) table missing" )
+ FT_ERRORDEF_( Post_Table_Missing, 0x94,
+ "PostScript (post) table missing" )
+ FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95,
+ "invalid horizontal metrics" )
+ FT_ERRORDEF_( Invalid_CharMap_Format, 0x96,
+ "invalid character map (cmap) format" )
+ FT_ERRORDEF_( Invalid_PPem, 0x97,
+ "invalid ppem value" )
+ FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98,
+ "invalid vertical metrics" )
+ FT_ERRORDEF_( Could_Not_Find_Context, 0x99,
+ "could not find context" )
+ FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A,
+ "invalid PostScript (post) table format" )
+ FT_ERRORDEF_( Invalid_Post_Table, 0x9B,
+ "invalid PostScript (post) table" )
+ FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C,
+ "found FDEF or IDEF opcode in glyf bytecode" )
+ FT_ERRORDEF_( Missing_Bitmap, 0x9D,
+ "missing bitmap in strike" )
+
+ /* CFF, CID, and Type 1 errors */
+
+ FT_ERRORDEF_( Syntax_Error, 0xA0,
+ "opcode syntax error" )
+ FT_ERRORDEF_( Stack_Underflow, 0xA1,
+ "argument stack underflow" )
+ FT_ERRORDEF_( Ignore, 0xA2,
+ "ignore" )
+ FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3,
+ "no Unicode glyph name found" )
+ FT_ERRORDEF_( Glyph_Too_Big, 0xA4,
+ "glyph too big for hinting" )
+
+ /* BDF errors */
+
+ FT_ERRORDEF_( Missing_Startfont_Field, 0xB0,
+ "`STARTFONT' field missing" )
+ FT_ERRORDEF_( Missing_Font_Field, 0xB1,
+ "`FONT' field missing" )
+ FT_ERRORDEF_( Missing_Size_Field, 0xB2,
+ "`SIZE' field missing" )
+ FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3,
+ "`FONTBOUNDINGBOX' field missing" )
+ FT_ERRORDEF_( Missing_Chars_Field, 0xB4,
+ "`CHARS' field missing" )
+ FT_ERRORDEF_( Missing_Startchar_Field, 0xB5,
+ "`STARTCHAR' field missing" )
+ FT_ERRORDEF_( Missing_Encoding_Field, 0xB6,
+ "`ENCODING' field missing" )
+ FT_ERRORDEF_( Missing_Bbx_Field, 0xB7,
+ "`BBX' field missing" )
+ FT_ERRORDEF_( Bbx_Too_Big, 0xB8,
+ "`BBX' too big" )
+ FT_ERRORDEF_( Corrupted_Font_Header, 0xB9,
+ "Font header corrupted or missing fields" )
+ FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA,
+ "Font glyphs corrupted or missing fields" )
+</pre>
+</div>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Error Enumerations
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ OpenType Validation
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-error_enumerations.html b/freetype/docs/reference/site/ft2-error_enumerations.html
new file mode 100644
index 00000000..fdb024a0
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-error_enumerations.html
@@ -0,0 +1,1244 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Error Enumerations - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#error-enumerations" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Error Enumerations
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9" checked>
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Error Enumerations
+ </label>
+
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link md-nav__link--active">
+ Error Enumerations
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_error_string" title="FT_Error_String" class="md-nav__link">
+ FT_Error_String
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_error_string" title="FT_Error_String" class="md-nav__link">
+ FT_Error_String
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#error-codes">Error Codes</a> &raquo; Error Enumerations</p>
+<hr />
+<h1 id="error-enumerations">Error Enumerations<a class="headerlink" href="#error-enumerations" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The header file <code>fterrors.h</code> (which is automatically included by <code>freetype.h</code> defines the handling of FreeType's enumeration constants. It can also be used to generate error message strings with a small macro trick explained below.</p>
+<p><strong>Error Formats</strong></p>
+<p>The configuration macro <code>FT_CONFIG_OPTION_USE_MODULE_ERRORS</code> can be defined in <code>ftoption.h</code> in order to make the higher byte indicate the module where the error has happened (this is not compatible with standard builds of FreeType&nbsp;2, however). See the file <code>ftmoderr.h</code> for more details.</p>
+<p><strong>Error Message Strings</strong></p>
+<p>Error definitions are set up with special macros that allow client applications to build a table of error message strings. The strings are not included in a normal build of FreeType&nbsp;2 to save space (most client applications do not use them).</p>
+<p>To do so, you have to define the following macros before including this file.
+<div class="codehilite"><pre><span></span> FT_ERROR_START_LIST
+</pre></div></p>
+<p>This macro is called before anything else to define the start of the error list. It is followed by several <code>FT_ERROR_DEF</code> calls.
+<div class="codehilite"><pre><span></span> FT_ERROR_DEF( e, v, s )
+</pre></div></p>
+<p>This macro is called to define one single error. &lsquo;e&rsquo; is the error code identifier (e.g., <code>Invalid_Argument</code>), &lsquo;v&rsquo; is the error's numerical value, and &lsquo;s&rsquo; is the corresponding error string.
+<div class="codehilite"><pre><span></span> FT_ERROR_END_LIST
+</pre></div></p>
+<p>This macro ends the list.</p>
+<p>Additionally, you have to undefine <code>FTERRORS_H_</code> before #including this file.</p>
+<p>Here is a simple example.
+<div class="codehilite"><pre><span></span> #undef FTERRORS_H_
+ #define FT_ERRORDEF( e, v, s ) { e, s },
+ #define FT_ERROR_START_LIST {
+ #define FT_ERROR_END_LIST { 0, NULL } };
+
+ const struct
+ {
+ int err_code;
+ const char* err_msg;
+ } ft_errors[] =
+
+ #include FT_ERRORS_H
+</pre></div></p>
+<p>An alternative to using an array is a switch statement.
+<div class="codehilite"><pre><span></span> #undef FTERRORS_H_
+ #define FT_ERROR_START_LIST switch ( error_code ) {
+ #define FT_ERRORDEF( e, v, s ) case v: return s;
+ #define FT_ERROR_END_LIST }
+</pre></div></p>
+<p>If you use <code>FT_CONFIG_OPTION_USE_MODULE_ERRORS</code>, <code>error_code</code> should be replaced with <code>FT_ERROR_BASE(error_code)</code> in the last example.</p>
+<h2 id="ft_error_string">FT_Error_String<a class="headerlink" href="#ft_error_string" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_ERRORS_H (freetype/fterrors.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ <b>FT_Error_String</b>( <a href="ft2-basic_types.html#ft_error">FT_Error</a> error_code );
+
+FT_END_HEADER
+
+
+#<span class="keyword">endif</span> /* FT_ERR_PROTOS_DEFINED */
+
+#<span class="keyword">endif</span> /* FT_INCLUDE_ERR_PROTOS */
+
+#<span class="keyword">endif</span> /* !(FTERRORS_H_ &amp;&amp; __FTERRORS_H__) */
+
+
+/* END */
+</pre>
+</div>
+
+<p>Retrieve the description of a valid FreeType error code.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="error_code">error_code</td><td class="desc">
+<p>A valid FreeType error code.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A C&nbsp;string or <code>NULL</code>, if any error occurred.</p>
+<h4>note</h4>
+
+<p>FreeType has to be compiled with <code>FT_CONFIG_OPTION_ERROR_STRINGS</code> or <code>FT_DEBUG_LEVEL_ERROR</code> to get meaningful descriptions. &lsquo;error_string&rsquo; will be <code>NULL</code> otherwise.</p>
+<p>Module identification will be ignored:
+<div class="codehilite"><pre><span></span> <span class="n">strcmp</span><span class="p">(</span> <span class="n">FT_Error_String</span><span class="p">(</span> <span class="n">FT_Err_Unknown_File_Format</span> <span class="p">),</span>
+ <span class="n">FT_Error_String</span><span class="p">(</span> <span class="n">BDF_Err_Unknown_File_Format</span> <span class="p">)</span> <span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">;</span>
+</pre></div></p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ BZIP2 Streams
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Error Code Values
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-font_formats.html b/freetype/docs/reference/site/ft2-font_formats.html
new file mode 100644
index 00000000..2ac6bc78
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-font_formats.html
@@ -0,0 +1,1197 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Font Formats - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#font-formats" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Font Formats
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Font Formats
+ </label>
+
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link md-nav__link--active">
+ Font Formats
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_font_format" title="FT_Get_Font_Format" class="md-nav__link">
+ FT_Get_Font_Format
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_font_format" title="FT_Get_Font_Format" class="md-nav__link">
+ FT_Get_Font_Format
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; Font Formats</p>
+<hr />
+<h1 id="font-formats">Font Formats<a class="headerlink" href="#font-formats" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_get_font_format">FT_Get_Font_Format<a class="headerlink" href="#ft_get_font_format" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FONT_FORMATS_H (freetype/ftfntfmt.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ <b>FT_Get_Font_Format</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face );
+
+ /* deprecated */
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ FT_Get_X11_Font_Format( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face );
+</pre>
+</div>
+
+<p>Return a string describing the format of a given face. 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>
+<p>The return value is suitable to be used as an X11 FONT_PROPERTY.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>Input face handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Font format string. <code>NULL</code> in case of error.</p>
+<h4>note</h4>
+
+<p>A deprecated name for the same function is <code>FT_Get_X11_Font_Format</code>.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Window FNT Files
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Gasp Table
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-gasp_table.html b/freetype/docs/reference/site/ft2-gasp_table.html
new file mode 100644
index 00000000..8f483c77
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-gasp_table.html
@@ -0,0 +1,1255 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Gasp Table - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#gasp-table" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Gasp Table
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Gasp Table
+ </label>
+
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link md-nav__link--active">
+ Gasp Table
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gasp_xxx" title="FT_GASP_XXX" class="md-nav__link">
+ FT_GASP_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_gasp" title="FT_Get_Gasp" class="md-nav__link">
+ FT_Get_Gasp
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gasp_xxx" title="FT_GASP_XXX" class="md-nav__link">
+ FT_GASP_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_gasp" title="FT_Get_Gasp" class="md-nav__link">
+ FT_Get_Gasp
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; Gasp Table</p>
+<hr />
+<h1 id="gasp-table">Gasp Table<a class="headerlink" href="#gasp-table" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The function <code><a href="ft2-gasp_table.html#ft_get_gasp">FT_Get_Gasp</a></code> 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>
+<h2 id="ft_gasp_xxx">FT_GASP_XXX<a class="headerlink" href="#ft_gasp_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GASP_H (freetype/ftgasp.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-gasp_table.html#ft_gasp_no_table">FT_GASP_NO_TABLE</a> -1
+#<span class="keyword">define</span> <a href="ft2-gasp_table.html#ft_gasp_do_gridfit">FT_GASP_DO_GRIDFIT</a> 0x01
+#<span class="keyword">define</span> <a href="ft2-gasp_table.html#ft_gasp_do_gray">FT_GASP_DO_GRAY</a> 0x02
+#<span class="keyword">define</span> <a href="ft2-gasp_table.html#ft_gasp_symmetric_gridfit">FT_GASP_SYMMETRIC_GRIDFIT</a> 0x04
+#<span class="keyword">define</span> <a href="ft2-gasp_table.html#ft_gasp_symmetric_smoothing">FT_GASP_SYMMETRIC_SMOOTHING</a> 0x08
+</pre>
+</div>
+
+<p>A list of values and/or bit-flags returned by the <code><a href="ft2-gasp_table.html#ft_get_gasp">FT_Get_Gasp</a></code> function.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_gasp_no_table">FT_GASP_NO_TABLE</td><td class="desc">
+<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><td class="val" id="ft_gasp_do_gridfit">FT_GASP_DO_GRIDFIT</td><td class="desc">
+<p>Grid-fitting and hinting should be performed at the specified ppem. This <strong>really</strong> means TrueType bytecode interpretation. If this bit is not set, no hinting gets applied.</p>
+</td></tr>
+<tr><td class="val" id="ft_gasp_do_gray">FT_GASP_DO_GRAY</td><td class="desc">
+<p>Anti-aliased rendering should be performed at the specified ppem. If not set, do monochrome rendering.</p>
+</td></tr>
+<tr><td class="val" id="ft_gasp_symmetric_smoothing">FT_GASP_SYMMETRIC_SMOOTHING</td><td class="desc">
+<p>If set, smoothing along multiple axes must be used with ClearType.</p>
+</td></tr>
+<tr><td class="val" id="ft_gasp_symmetric_gridfit">FT_GASP_SYMMETRIC_GRIDFIT</td><td class="desc">
+<p>Grid-fitting must be used with ClearType's symmetric smoothing.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The bit-flags <code>FT_GASP_DO_GRIDFIT</code> and <code>FT_GASP_DO_GRAY</code> are to be used for standard font rasterization only. Independently of that, <code>FT_GASP_SYMMETRIC_SMOOTHING</code> and <code>FT_GASP_SYMMETRIC_GRIDFIT</code> are to be used if ClearType is enabled (and <code>FT_GASP_DO_GRIDFIT</code> and <code>FT_GASP_DO_GRAY</code> are consequently ignored).</p>
+<p>&lsquo;ClearType&rsquo; is Microsoft's implementation of LCD rendering, partly protected by patents.</p>
+<h4>since</h4>
+
+<p>2.3.0</p>
+<hr>
+
+<h2 id="ft_get_gasp">FT_Get_Gasp<a class="headerlink" href="#ft_get_gasp" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GASP_H (freetype/ftgasp.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>For a TrueType or OpenType font file, return the rasterizer behaviour flags from the font's &lsquo;gasp&rsquo; table corresponding to a given character pixel size.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source face handle.</p>
+</td></tr>
+<tr><td class="val" id="ppem">ppem</td><td class="desc">
+<p>The vertical character pixel size.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Bit flags (see <code><a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_XXX</a></code>), or <code><a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_NO_TABLE</a></code> if there is no &lsquo;gasp&rsquo; table in the face.</p>
+<h4>note</h4>
+
+<p>If you want to use the MM functionality of OpenType variation fonts (i.e., using <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> and friends), call this function <strong>after</strong> setting an instance since the return values can change.</p>
+<h4>since</h4>
+
+<p>2.3.0</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Font Formats
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The auto-hinter
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-glyph_management.html b/freetype/docs/reference/site/ft2-glyph_management.html
new file mode 100644
index 00000000..1342f206
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-glyph_management.html
@@ -0,0 +1,1860 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Glyph Management - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#glyph-management" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Glyph Management
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Glyph Management
+ </label>
+
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link md-nav__link--active">
+ Glyph Management
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph" title="FT_Glyph" class="md-nav__link">
+ FT_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphrec" title="FT_GlyphRec" class="md-nav__link">
+ FT_GlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmapglyph" title="FT_BitmapGlyph" class="md-nav__link">
+ FT_BitmapGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmapglyphrec" title="FT_BitmapGlyphRec" class="md-nav__link">
+ FT_BitmapGlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outlineglyph" title="FT_OutlineGlyph" class="md-nav__link">
+ FT_OutlineGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outlineglyphrec" title="FT_OutlineGlyphRec" class="md-nav__link">
+ FT_OutlineGlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_glyph" title="FT_New_Glyph" class="md-nav__link">
+ FT_New_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_glyph" title="FT_Get_Glyph" class="md-nav__link">
+ FT_Get_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_copy" title="FT_Glyph_Copy" class="md-nav__link">
+ FT_Glyph_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_transform" title="FT_Glyph_Transform" class="md-nav__link">
+ FT_Glyph_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_bbox_mode" title="FT_Glyph_BBox_Mode" class="md-nav__link">
+ FT_Glyph_BBox_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_get_cbox" title="FT_Glyph_Get_CBox" class="md-nav__link">
+ FT_Glyph_Get_CBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_to_bitmap" title="FT_Glyph_To_Bitmap" class="md-nav__link">
+ FT_Glyph_To_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_glyph" title="FT_Done_Glyph" class="md-nav__link">
+ FT_Done_Glyph
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph" title="FT_Glyph" class="md-nav__link">
+ FT_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyphrec" title="FT_GlyphRec" class="md-nav__link">
+ FT_GlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmapglyph" title="FT_BitmapGlyph" class="md-nav__link">
+ FT_BitmapGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmapglyphrec" title="FT_BitmapGlyphRec" class="md-nav__link">
+ FT_BitmapGlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outlineglyph" title="FT_OutlineGlyph" class="md-nav__link">
+ FT_OutlineGlyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outlineglyphrec" title="FT_OutlineGlyphRec" class="md-nav__link">
+ FT_OutlineGlyphRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_glyph" title="FT_New_Glyph" class="md-nav__link">
+ FT_New_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_glyph" title="FT_Get_Glyph" class="md-nav__link">
+ FT_Get_Glyph
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_copy" title="FT_Glyph_Copy" class="md-nav__link">
+ FT_Glyph_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_transform" title="FT_Glyph_Transform" class="md-nav__link">
+ FT_Glyph_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_bbox_mode" title="FT_Glyph_BBox_Mode" class="md-nav__link">
+ FT_Glyph_BBox_Mode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_get_cbox" title="FT_Glyph_Get_CBox" class="md-nav__link">
+ FT_Glyph_Get_CBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_to_bitmap" title="FT_Glyph_To_Bitmap" class="md-nav__link">
+ FT_Glyph_To_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_glyph" title="FT_Done_Glyph" class="md-nav__link">
+ FT_Done_Glyph
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Glyph Management</p>
+<hr />
+<h1 id="glyph-management">Glyph Management<a class="headerlink" href="#glyph-management" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains definitions used to manage glyph data through generic <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> objects. Each of them can contain a bitmap, a vector outline, or even images in other formats. These objects are detached from <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>, contrary to <code><a href="ft2-base_interface.html#ft_glyphslot">FT_GlyphSlot</a></code>.</p>
+<h2 id="ft_glyph">FT_Glyph<a class="headerlink" href="#ft_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_* <b>FT_Glyph</b>;
+</pre>
+</div>
+
+<p>Handle to an object used to model generic glyph images. It is a pointer to the <code><a href="ft2-glyph_management.html#ft_glyphrec">FT_GlyphRec</a></code> structure and can contain a glyph bitmap or pointer.</p>
+<h4>note</h4>
+
+<p>Glyph objects are not owned by the library. You must thus release them manually (through <code><a href="ft2-glyph_management.html#ft_done_glyph">FT_Done_Glyph</a></code>) <em>before</em> calling <code><a href="ft2-base_interface.html#ft_done_freetype">FT_Done_FreeType</a></code>.</p>
+<hr>
+
+<h2 id="ft_glyphrec">FT_GlyphRec<a class="headerlink" href="#ft_glyphrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed-point format.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the FreeType library object.</p>
+</td></tr>
+<tr><td class="val" id="clazz">clazz</td><td class="desc">
+<p>A pointer to the glyph's class. Private.</p>
+</td></tr>
+<tr><td class="val" id="format">format</td><td class="desc">
+<p>The format of the glyph's image.</p>
+</td></tr>
+<tr><td class="val" id="advance">advance</td><td class="desc">
+<p>A 16.16 vector that gives the glyph's advance width.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_bitmapglyph">FT_BitmapGlyph<a class="headerlink" href="#ft_bitmapglyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_* <b>FT_BitmapGlyph</b>;
+</pre>
+</div>
+
+<p>A handle to an object used to model a bitmap glyph image. This is a sub-class of <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code>, and a pointer to <code><a href="ft2-glyph_management.html#ft_bitmapglyphrec">FT_BitmapGlyphRec</a></code>.</p>
+<hr>
+
+<h2 id="ft_bitmapglyphrec">FT_BitmapGlyphRec<a class="headerlink" href="#ft_bitmapglyphrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used for bitmap glyph images. This really is a &lsquo;sub-class&rsquo; of <code><a href="ft2-glyph_management.html#ft_glyphrec">FT_GlyphRec</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="root">root</td><td class="desc">
+<p>The root <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> fields.</p>
+</td></tr>
+<tr><td class="val" id="left">left</td><td class="desc">
+<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><td class="val" id="top">top</td><td class="desc">
+<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><td class="val" id="bitmap">bitmap</td><td class="desc">
+<p>A descriptor for the bitmap.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>You can typecast an <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> to <code><a href="ft2-glyph_management.html#ft_bitmapglyph">FT_BitmapGlyph</a></code> if you have <code>glyph-&gt;format == FT_GLYPH_FORMAT_BITMAP</code>. This lets you access the bitmap's contents easily.</p>
+<p>The corresponding pixel buffer is always owned by <code><a href="ft2-glyph_management.html#ft_bitmapglyph">FT_BitmapGlyph</a></code> and is thus created and destroyed with it.</p>
+<hr>
+
+<h2 id="ft_outlineglyph">FT_OutlineGlyph<a class="headerlink" href="#ft_outlineglyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_* <b>FT_OutlineGlyph</b>;
+</pre>
+</div>
+
+<p>A handle to an object used to model an outline glyph image. This is a sub-class of <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code>, and a pointer to <code><a href="ft2-glyph_management.html#ft_outlineglyphrec">FT_OutlineGlyphRec</a></code>.</p>
+<hr>
+
+<h2 id="ft_outlineglyphrec">FT_OutlineGlyphRec<a class="headerlink" href="#ft_outlineglyphrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used for outline (vectorial) glyph images. This really is a &lsquo;sub-class&rsquo; of <code><a href="ft2-glyph_management.html#ft_glyphrec">FT_GlyphRec</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="root">root</td><td class="desc">
+<p>The root <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> fields.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A descriptor for the outline.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>You can typecast an <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> to <code><a href="ft2-glyph_management.html#ft_outlineglyph">FT_OutlineGlyph</a></code> if you have <code>glyph-&gt;format == FT_GLYPH_FORMAT_OUTLINE</code>. 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 <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> was used in <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> or <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code>.</p>
+<p>The outline's tables are always owned by the object and are destroyed with it.</p>
+<hr>
+
+<h2 id="ft_new_glyph">FT_New_Glyph<a class="headerlink" href="#ft_new_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_New_Glyph</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,
+ <a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a> *aglyph );
+</pre>
+</div>
+
+<p>A function used to create a new empty glyph image. Note that the created <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> object must be released with <code><a href="ft2-glyph_management.html#ft_done_glyph">FT_Done_Glyph</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the FreeType library object.</p>
+</td></tr>
+<tr><td class="val" id="format">format</td><td class="desc">
+<p>The format of the glyph's image.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
+<p>A handle to the glyph object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_get_glyph">FT_Get_Glyph<a class="headerlink" href="#ft_get_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to extract a glyph image from a slot. Note that the created <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> object must be released with <code><a href="ft2-glyph_management.html#ft_done_glyph">FT_Done_Glyph</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="slot">slot</td><td class="desc">
+<p>A handle to the source glyph slot.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aglyph">aglyph</td><td class="desc">
+<p>A handle to the glyph object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Because <code>*aglyph-&gt;advance.x</code> and <code>*aglyph-&gt;advance.y</code> are 16.16 fixed-point numbers, <code>slot-&gt;advance.x</code> and <code>slot-&gt;advance.y</code> (which are in 26.6 fixed-point format) must be in the range ]-32768;32768[.</p>
+<hr>
+
+<h2 id="ft_glyph_copy">FT_Glyph_Copy<a class="headerlink" href="#ft_glyph_copy" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to copy a glyph image. Note that the created <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> object must be released with <code><a href="ft2-glyph_management.html#ft_done_glyph">FT_Done_Glyph</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>A handle to the source glyph object.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>A handle to the target glyph object. 0&nbsp;in case of error.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_glyph_transform">FT_Glyph_Transform<a class="headerlink" href="#ft_glyph_transform" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Transform a glyph image if its format is scalable.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph">glyph</td><td class="desc">
+<p>A handle to the target glyph object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="matrix">matrix</td><td class="desc">
+<p>A pointer to a 2x2 matrix to apply.</p>
+</td></tr>
+<tr><td class="val" id="delta">delta</td><td class="desc">
+<p>A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code (if not 0, the glyph format is not scalable).</p>
+<h4>note</h4>
+
+<p>The 2x2 transformation matrix is also applied to the glyph's advance vector.</p>
+<hr>
+
+<h2 id="ft_glyph_bbox_mode">FT_Glyph_BBox_Mode<a class="headerlink" href="#ft_glyph_bbox_mode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_BBox_Mode_
+ {
+ <a href="ft2-glyph_management.html#ft_glyph_bbox_unscaled">FT_GLYPH_BBOX_UNSCALED</a> = 0,
+ <a href="ft2-glyph_management.html#ft_glyph_bbox_subpixels">FT_GLYPH_BBOX_SUBPIXELS</a> = 0,
+ <a href="ft2-glyph_management.html#ft_glyph_bbox_gridfit">FT_GLYPH_BBOX_GRIDFIT</a> = 1,
+ <a href="ft2-glyph_management.html#ft_glyph_bbox_truncate">FT_GLYPH_BBOX_TRUNCATE</a> = 2,
+ <a href="ft2-glyph_management.html#ft_glyph_bbox_pixels">FT_GLYPH_BBOX_PIXELS</a> = 3
+
+ } <b>FT_Glyph_BBox_Mode</b>;
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_Glyph_BBox_Mode</b>` values instead */
+#<span class="keyword">define</span> ft_glyph_bbox_unscaled <a href="ft2-glyph_management.html#ft_glyph_bbox_unscaled">FT_GLYPH_BBOX_UNSCALED</a>
+#<span class="keyword">define</span> ft_glyph_bbox_subpixels <a href="ft2-glyph_management.html#ft_glyph_bbox_subpixels">FT_GLYPH_BBOX_SUBPIXELS</a>
+#<span class="keyword">define</span> ft_glyph_bbox_gridfit <a href="ft2-glyph_management.html#ft_glyph_bbox_gridfit">FT_GLYPH_BBOX_GRIDFIT</a>
+#<span class="keyword">define</span> ft_glyph_bbox_truncate <a href="ft2-glyph_management.html#ft_glyph_bbox_truncate">FT_GLYPH_BBOX_TRUNCATE</a>
+#<span class="keyword">define</span> ft_glyph_bbox_pixels <a href="ft2-glyph_management.html#ft_glyph_bbox_pixels">FT_GLYPH_BBOX_PIXELS</a>
+</pre>
+</div>
+
+<p>The mode how the values of <code><a href="ft2-glyph_management.html#ft_glyph_get_cbox">FT_Glyph_Get_CBox</a></code> are returned.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_glyph_bbox_unscaled">FT_GLYPH_BBOX_UNSCALED</td><td class="desc">
+<p>Return unscaled font units.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_bbox_subpixels">FT_GLYPH_BBOX_SUBPIXELS</td><td class="desc">
+<p>Return unfitted 26.6 coordinates.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_bbox_gridfit">FT_GLYPH_BBOX_GRIDFIT</td><td class="desc">
+<p>Return grid-fitted 26.6 coordinates.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_bbox_truncate">FT_GLYPH_BBOX_TRUNCATE</td><td class="desc">
+<p>Return coordinates in integer pixels.</p>
+</td></tr>
+<tr><td class="val" id="ft_glyph_bbox_pixels">FT_GLYPH_BBOX_PIXELS</td><td class="desc">
+<p>Return grid-fitted pixel coordinates.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_glyph_get_cbox">FT_Glyph_Get_CBox<a class="headerlink" href="#ft_glyph_get_cbox" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a glyph's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph">glyph</td><td class="desc">
+<p>A handle to the source glyph object.</p>
+</td></tr>
+<tr><td class="val" id="mode">mode</td><td class="desc">
+<p>The mode that indicates how to interpret the returned bounding box values.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acbox">acbox</td><td class="desc">
+<p>The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Coordinates are relative to the glyph origin, using the y&nbsp;upwards convention.</p>
+<p>If the glyph has been loaded with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code>, <code>bbox_mode</code> must be set to <code><a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_UNSCALED</a></code> to get unscaled font units in 26.6 pixel format. The value <code><a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_SUBPIXELS</a></code> is another name for this constant.</p>
+<p>If the font is tricky and the glyph has been loaded with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code>, the resulting CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the CBox, which can be eventually converted back to font units.</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:
+<div class="codehilite"><pre><span></span> width = bbox.xMax - bbox.xMin;
+ height = bbox.yMax - bbox.yMin;
+</pre></div></p>
+<p>Note also that for 26.6 coordinates, if <code>bbox_mode</code> is set to <code><a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_GRIDFIT</a></code>, the coordinates will also be grid-fitted, which corresponds to:
+<div class="codehilite"><pre><span></span> bbox.xMin = FLOOR(bbox.xMin);
+ bbox.yMin = FLOOR(bbox.yMin);
+ bbox.xMax = CEILING(bbox.xMax);
+ bbox.yMax = CEILING(bbox.yMax);
+</pre></div></p>
+<p>To get the bbox in pixel coordinates, set <code>bbox_mode</code> to <code><a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_TRUNCATE</a></code>.</p>
+<p>To get the bbox in grid-fitted pixel coordinates, set <code>bbox_mode</code> to <code><a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_PIXELS</a></code>.</p>
+<hr>
+
+<h2 id="ft_glyph_to_bitmap">FT_Glyph_To_Bitmap<a class="headerlink" href="#ft_glyph_to_bitmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Convert a given glyph object to a bitmap glyph object.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="the_glyph">the_glyph</td><td class="desc">
+<p>A pointer to a handle to the target glyph.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="render_mode">render_mode</td><td class="desc">
+<p>An enumeration that describes how the data is rendered.</p>
+</td></tr>
+<tr><td class="val" id="origin">origin</td><td class="desc">
+<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><td class="val" id="destroy">destroy</td><td class="desc">
+<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>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function does nothing if the glyph format isn't scalable.</p>
+<p>The glyph image is translated with the <code>origin</code> vector before rendering.</p>
+<p>The first parameter is a pointer to an <code><a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a></code> handle, that will be <em>replaced</em> by this function (with newly allocated data). Typically, you would use (omitting error handling):
+<div class="codehilite"><pre><span></span> FT_Glyph glyph;
+ FT_BitmapGlyph glyph_bitmap;
+
+
+ // load glyph
+ error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT );
+
+ // extract glyph image
+ error = FT_Get_Glyph( face-&gt;glyph, &amp;glyph );
+
+ // convert to a bitmap (default render mode + destroying old)
+ if ( glyph-&gt;format != FT_GLYPH_FORMAT_BITMAP )
+ {
+ error = FT_Glyph_To_Bitmap( &amp;glyph, FT_RENDER_MODE_NORMAL,
+ 0, 1 );
+ if ( error ) // `glyph&#39; 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></div></p>
+<p>Here is another example, again without error handling:
+<div class="codehilite"><pre><span></span> FT_Glyph glyphs[MAX_GLYPHS]
+
+
+ ...
+
+ for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
+ error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
+ FT_Get_Glyph ( face-&gt;glyph, &amp;glyphs[idx] );
+
+ ...
+
+ for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
+ {
+ FT_Glyph bitmap = glyphs[idx];
+
+
+ ...
+
+ // after this call, `bitmap&#39; no longer points into
+ // the `glyphs&#39; array (and the old value isn&#39;t destroyed)
+ FT_Glyph_To_Bitmap( &amp;bitmap, FT_RENDER_MODE_MONO, 0, 0 );
+
+ ...
+
+ FT_Done_Glyph( bitmap );
+ }
+
+ ...
+
+ for ( idx = 0; i &lt; MAX_GLYPHS; i++ )
+ FT_Done_Glyph( glyphs[idx] );
+</pre></div></p>
+<hr>
+
+<h2 id="ft_done_glyph">FT_Done_Glyph<a class="headerlink" href="#ft_done_glyph" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GLYPH_H (freetype/ftglyph.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy a given glyph.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph">glyph</td><td class="desc">
+<p>A handle to the target glyph object.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Glyph Layer Management
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Mac Specific Interface
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-glyph_stroker.html b/freetype/docs/reference/site/ft2-glyph_stroker.html
new file mode 100644
index 00000000..907d56c4
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-glyph_stroker.html
@@ -0,0 +1,2154 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Glyph Stroker - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#glyph-stroker" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Glyph Stroker
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Glyph Stroker
+ </label>
+
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link md-nav__link--active">
+ Glyph Stroker
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker" title="FT_Stroker" class="md-nav__link">
+ FT_Stroker
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_linejoin" title="FT_Stroker_LineJoin" class="md-nav__link">
+ FT_Stroker_LineJoin
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_linecap" title="FT_Stroker_LineCap" class="md-nav__link">
+ FT_Stroker_LineCap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_strokerborder" title="FT_StrokerBorder" class="md-nav__link">
+ FT_StrokerBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_getinsideborder" title="FT_Outline_GetInsideBorder" class="md-nav__link">
+ FT_Outline_GetInsideBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_getoutsideborder" title="FT_Outline_GetOutsideBorder" class="md-nav__link">
+ FT_Outline_GetOutsideBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_stroke" title="FT_Glyph_Stroke" class="md-nav__link">
+ FT_Glyph_Stroke
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_strokeborder" title="FT_Glyph_StrokeBorder" class="md-nav__link">
+ FT_Glyph_StrokeBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_new" title="FT_Stroker_New" class="md-nav__link">
+ FT_Stroker_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_set" title="FT_Stroker_Set" class="md-nav__link">
+ FT_Stroker_Set
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_rewind" title="FT_Stroker_Rewind" class="md-nav__link">
+ FT_Stroker_Rewind
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_parseoutline" title="FT_Stroker_ParseOutline" class="md-nav__link">
+ FT_Stroker_ParseOutline
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_done" title="FT_Stroker_Done" class="md-nav__link">
+ FT_Stroker_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_beginsubpath" title="FT_Stroker_BeginSubPath" class="md-nav__link">
+ FT_Stroker_BeginSubPath
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_endsubpath" title="FT_Stroker_EndSubPath" class="md-nav__link">
+ FT_Stroker_EndSubPath
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_lineto" title="FT_Stroker_LineTo" class="md-nav__link">
+ FT_Stroker_LineTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_conicto" title="FT_Stroker_ConicTo" class="md-nav__link">
+ FT_Stroker_ConicTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_cubicto" title="FT_Stroker_CubicTo" class="md-nav__link">
+ FT_Stroker_CubicTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_getbordercounts" title="FT_Stroker_GetBorderCounts" class="md-nav__link">
+ FT_Stroker_GetBorderCounts
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_exportborder" title="FT_Stroker_ExportBorder" class="md-nav__link">
+ FT_Stroker_ExportBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_getcounts" title="FT_Stroker_GetCounts" class="md-nav__link">
+ FT_Stroker_GetCounts
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_export" title="FT_Stroker_Export" class="md-nav__link">
+ FT_Stroker_Export
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker" title="FT_Stroker" class="md-nav__link">
+ FT_Stroker
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_linejoin" title="FT_Stroker_LineJoin" class="md-nav__link">
+ FT_Stroker_LineJoin
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_linecap" title="FT_Stroker_LineCap" class="md-nav__link">
+ FT_Stroker_LineCap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_strokerborder" title="FT_StrokerBorder" class="md-nav__link">
+ FT_StrokerBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_getinsideborder" title="FT_Outline_GetInsideBorder" class="md-nav__link">
+ FT_Outline_GetInsideBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_getoutsideborder" title="FT_Outline_GetOutsideBorder" class="md-nav__link">
+ FT_Outline_GetOutsideBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_stroke" title="FT_Glyph_Stroke" class="md-nav__link">
+ FT_Glyph_Stroke
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_strokeborder" title="FT_Glyph_StrokeBorder" class="md-nav__link">
+ FT_Glyph_StrokeBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_new" title="FT_Stroker_New" class="md-nav__link">
+ FT_Stroker_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_set" title="FT_Stroker_Set" class="md-nav__link">
+ FT_Stroker_Set
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_rewind" title="FT_Stroker_Rewind" class="md-nav__link">
+ FT_Stroker_Rewind
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_parseoutline" title="FT_Stroker_ParseOutline" class="md-nav__link">
+ FT_Stroker_ParseOutline
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_done" title="FT_Stroker_Done" class="md-nav__link">
+ FT_Stroker_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_beginsubpath" title="FT_Stroker_BeginSubPath" class="md-nav__link">
+ FT_Stroker_BeginSubPath
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_endsubpath" title="FT_Stroker_EndSubPath" class="md-nav__link">
+ FT_Stroker_EndSubPath
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_lineto" title="FT_Stroker_LineTo" class="md-nav__link">
+ FT_Stroker_LineTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_conicto" title="FT_Stroker_ConicTo" class="md-nav__link">
+ FT_Stroker_ConicTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_cubicto" title="FT_Stroker_CubicTo" class="md-nav__link">
+ FT_Stroker_CubicTo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_getbordercounts" title="FT_Stroker_GetBorderCounts" class="md-nav__link">
+ FT_Stroker_GetBorderCounts
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_exportborder" title="FT_Stroker_ExportBorder" class="md-nav__link">
+ FT_Stroker_ExportBorder
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_getcounts" title="FT_Stroker_GetCounts" class="md-nav__link">
+ FT_Stroker_GetCounts
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_export" title="FT_Stroker_Export" class="md-nav__link">
+ FT_Stroker_Export
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Glyph Stroker</p>
+<hr />
+<h1 id="glyph-stroker">Glyph Stroker<a class="headerlink" href="#glyph-stroker" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_stroker">FT_Stroker<a class="headerlink" href="#ft_stroker" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StrokerRec_* <b>FT_Stroker</b>;
+</pre>
+</div>
+
+<p>Opaque handle to a path stroker object.</p>
+<hr>
+
+<h2 id="ft_stroker_linejoin">FT_Stroker_LineJoin<a class="headerlink" href="#ft_stroker_linejoin" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineJoin_
+ {
+ <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_round">FT_STROKER_LINEJOIN_ROUND</a> = 0,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_bevel">FT_STROKER_LINEJOIN_BEVEL</a> = 1,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_miter_variable">FT_STROKER_LINEJOIN_MITER_VARIABLE</a> = 2,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_miter">FT_STROKER_LINEJOIN_MITER</a> = <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_miter_variable">FT_STROKER_LINEJOIN_MITER_VARIABLE</a>,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linejoin_miter_fixed">FT_STROKER_LINEJOIN_MITER_FIXED</a> = 3
+
+ } <b>FT_Stroker_LineJoin</b>;
+</pre>
+</div>
+
+<p>These values determine how two joining lines are rendered in a stroker.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_stroker_linejoin_round">FT_STROKER_LINEJOIN_ROUND</td><td class="desc">
+<p>Used to render rounded line joins. Circular arcs are used to join two lines smoothly.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_linejoin_bevel">FT_STROKER_LINEJOIN_BEVEL</td><td class="desc">
+<p>Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_linejoin_miter_fixed">FT_STROKER_LINEJOIN_MITER_FIXED</td><td class="desc">
+<p>Used to render mitered line joins, with fixed bevels if the miter limit is exceeded. The outer edges of the strokes for the two segments are extended until they meet at an angle. If the segments meet at too sharp an angle (such that the miter would extend from the intersection of the segments a distance greater than the product of the miter limit value and the border radius), then a bevel join (see above) is used instead. This prevents long spikes being created. <code>FT_STROKER_LINEJOIN_MITER_FIXED</code> generates a miter line join as used in PostScript and PDF.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_linejoin_miter_variable">FT_STROKER_LINEJOIN_MITER_VARIABLE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_stroker_linejoin_miter">FT_STROKER_LINEJOIN_MITER</td><td class="desc">
+<p>Used to render mitered line joins, with variable bevels if the miter limit is exceeded. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created. <code>FT_STROKER_LINEJOIN_MITER_VARIABLE</code> generates a mitered line join as used in XPS. <code>FT_STROKER_LINEJOIN_MITER</code> is an alias for <code>FT_STROKER_LINEJOIN_MITER_VARIABLE</code>, retained for backward compatibility.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_stroker_linecap">FT_Stroker_LineCap<a class="headerlink" href="#ft_stroker_linecap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineCap_
+ {
+ <a href="ft2-glyph_stroker.html#ft_stroker_linecap_butt">FT_STROKER_LINECAP_BUTT</a> = 0,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linecap_round">FT_STROKER_LINECAP_ROUND</a>,
+ <a href="ft2-glyph_stroker.html#ft_stroker_linecap_square">FT_STROKER_LINECAP_SQUARE</a>
+
+ } <b>FT_Stroker_LineCap</b>;
+</pre>
+</div>
+
+<p>These values determine how the end of opened sub-paths are rendered in a stroke.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_stroker_linecap_butt">FT_STROKER_LINECAP_BUTT</td><td class="desc">
+<p>The end of lines is rendered as a full stop on the last point itself.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_linecap_round">FT_STROKER_LINECAP_ROUND</td><td class="desc">
+<p>The end of lines is rendered as a half-circle around the last point.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_linecap_square">FT_STROKER_LINECAP_SQUARE</td><td class="desc">
+<p>The end of lines is rendered as a square around the last point.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_strokerborder">FT_StrokerBorder<a class="headerlink" href="#ft_strokerborder" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_StrokerBorder_
+ {
+ <a href="ft2-glyph_stroker.html#ft_stroker_border_left">FT_STROKER_BORDER_LEFT</a> = 0,
+ <a href="ft2-glyph_stroker.html#ft_stroker_border_right">FT_STROKER_BORDER_RIGHT</a>
+
+ } <b>FT_StrokerBorder</b>;
+</pre>
+</div>
+
+<p>These values are used to select a given stroke border in <code><a href="ft2-glyph_stroker.html#ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts</a></code> and <code><a href="ft2-glyph_stroker.html#ft_stroker_exportborder">FT_Stroker_ExportBorder</a></code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_stroker_border_left">FT_STROKER_BORDER_LEFT</td><td class="desc">
+<p>Select the left border, relative to the drawing direction.</p>
+</td></tr>
+<tr><td class="val" id="ft_stroker_border_right">FT_STROKER_BORDER_RIGHT</td><td class="desc">
+<p>Select the right border, relative to the drawing direction.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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 <code><a href="ft2-glyph_stroker.html#ft_outline_getinsideborder">FT_Outline_GetInsideBorder</a></code> and <code><a href="ft2-glyph_stroker.html#ft_outline_getoutsideborder">FT_Outline_GetOutsideBorder</a></code> to get these.</p>
+<hr>
+
+<h2 id="ft_outline_getinsideborder">FT_Outline_GetInsideBorder<a class="headerlink" href="#ft_outline_getinsideborder" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-glyph_stroker.html#ft_strokerborder">FT_StrokerBorder</a></code> value corresponding to the &lsquo;inside&rsquo; borders of a given outline.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The source outline handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The border index. <code><a href="ft2-glyph_stroker.html#ft_strokerborder">FT_STROKER_BORDER_RIGHT</a></code> for empty or invalid outlines.</p>
+<hr>
+
+<h2 id="ft_outline_getoutsideborder">FT_Outline_GetOutsideBorder<a class="headerlink" href="#ft_outline_getoutsideborder" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-glyph_stroker.html#ft_strokerborder">FT_StrokerBorder</a></code> value corresponding to the &lsquo;outside&rsquo; borders of a given outline.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The source outline handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The border index. <code><a href="ft2-glyph_stroker.html#ft_strokerborder">FT_STROKER_BORDER_LEFT</a></code> for empty or invalid outlines.</p>
+<hr>
+
+<h2 id="ft_glyph_stroke">FT_Glyph_Stroke<a class="headerlink" href="#ft_glyph_stroke" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Stroke a given outline glyph object with a given stroker.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="pglyph">pglyph</td><td class="desc">
+<p>Source glyph handle on input, new glyph handle on output.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>A stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="destroy">destroy</td><td class="desc">
+<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The source glyph is untouched in case of error.</p>
+<p>Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size.</p>
+<hr>
+
+<h2 id="ft_glyph_strokeborder">FT_Glyph_StrokeBorder<a class="headerlink" href="#ft_glyph_strokeborder" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="pglyph">pglyph</td><td class="desc">
+<p>Source glyph handle on input, new glyph handle on output.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>A stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="inside">inside</td><td class="desc">
+<p>A Boolean. If&nbsp;1, return the inside border, otherwise the outside border.</p>
+</td></tr>
+<tr><td class="val" id="destroy">destroy</td><td class="desc">
+<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The source glyph is untouched in case of error.</p>
+<p>Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size.</p>
+<hr>
+
+<h2 id="ft_stroker_new">FT_Stroker_New<a class="headerlink" href="#ft_stroker_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new stroker object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>FreeType library handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="astroker">astroker</td><td class="desc">
+<p>A new stroker object handle. <code>NULL</code> in case of error.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_stroker_set">FT_Stroker_Set<a class="headerlink" href="#ft_stroker_set" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Reset a stroker object's attributes.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="radius">radius</td><td class="desc">
+<p>The border radius.</p>
+</td></tr>
+<tr><td class="val" id="line_cap">line_cap</td><td class="desc">
+<p>The line cap style.</p>
+</td></tr>
+<tr><td class="val" id="line_join">line_join</td><td class="desc">
+<p>The line join style.</p>
+</td></tr>
+<tr><td class="val" id="miter_limit">miter_limit</td><td class="desc">
+<p>The miter limit for the <code>FT_STROKER_LINEJOIN_MITER_FIXED</code> and <code>FT_STROKER_LINEJOIN_MITER_VARIABLE</code> line join styles, expressed as 16.16 fixed-point value.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The radius is expressed in the same units as the outline coordinates.</p>
+<p>This function calls <code><a href="ft2-glyph_stroker.html#ft_stroker_rewind">FT_Stroker_Rewind</a></code> automatically.</p>
+<hr>
+
+<h2 id="ft_stroker_rewind">FT_Stroker_Rewind<a class="headerlink" href="#ft_stroker_rewind" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Reset a stroker object without changing its attributes. You should call this function before beginning a new series of calls to <code><a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a></code> or <code><a href="ft2-glyph_stroker.html#ft_stroker_endsubpath">FT_Stroker_EndSubPath</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_stroker_parseoutline">FT_Stroker_ParseOutline<a class="headerlink" href="#ft_stroker_parseoutline" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be retrieved later by functions like <code><a href="ft2-glyph_stroker.html#ft_stroker_getcounts">FT_Stroker_GetCounts</a></code> and <code><a href="ft2-glyph_stroker.html#ft_stroker_export">FT_Stroker_Export</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The source outline.</p>
+</td></tr>
+<tr><td class="val" id="opened">opened</td><td class="desc">
+<p>A boolean. If&nbsp;1, the outline is treated as an open path instead of a closed one.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If <code>opened</code> is&nbsp;0 (the default), the outline is treated as a closed path, and the stroker generates two distinct &lsquo;border&rsquo; outlines.</p>
+<p>If <code>opened</code> is&nbsp;1, the outline is processed as an open path, and the stroker generates a single &lsquo;stroke&rsquo; outline.</p>
+<p>This function calls <code><a href="ft2-glyph_stroker.html#ft_stroker_rewind">FT_Stroker_Rewind</a></code> automatically.</p>
+<hr>
+
+<h2 id="ft_stroker_done">FT_Stroker_Done<a class="headerlink" href="#ft_stroker_done" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy a stroker object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>A stroker handle. Can be <code>NULL</code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_stroker_beginsubpath">FT_Stroker_BeginSubPath<a class="headerlink" href="#ft_stroker_beginsubpath" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Start a new sub-path in the stroker.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the start vector.</p>
+</td></tr>
+<tr><td class="val" id="open">open</td><td class="desc">
+<p>A boolean. If&nbsp;1, the sub-path is treated as an open one.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function is useful when you need to stroke a path that is not stored as an <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code> object.</p>
+<hr>
+
+<h2 id="ft_stroker_endsubpath">FT_Stroker_EndSubPath<a class="headerlink" href="#ft_stroker_endsubpath" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Close the current sub-path in the stroker.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You should call this function after <code><a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a></code>. If the subpath was not &lsquo;opened&rsquo;, this function &lsquo;draws&rsquo; a single line segment to the start position when needed.</p>
+<hr>
+
+<h2 id="ft_stroker_lineto">FT_Stroker_LineTo<a class="headerlink" href="#ft_stroker_lineto" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>&lsquo;Draw&rsquo; a single line segment in the stroker's current sub-path, from the last position.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You should call this function between <code><a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a></code> and <code><a href="ft2-glyph_stroker.html#ft_stroker_endsubpath">FT_Stroker_EndSubPath</a></code>.</p>
+<hr>
+
+<h2 id="ft_stroker_conicto">FT_Stroker_ConicTo<a class="headerlink" href="#ft_stroker_conicto" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>&lsquo;Draw&rsquo; a single quadratic Bezier in the stroker's current sub-path, from the last position.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="control">control</td><td class="desc">
+<p>A pointer to a Bezier control point.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You should call this function between <code><a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a></code> and <code><a href="ft2-glyph_stroker.html#ft_stroker_endsubpath">FT_Stroker_EndSubPath</a></code>.</p>
+<hr>
+
+<h2 id="ft_stroker_cubicto">FT_Stroker_CubicTo<a class="headerlink" href="#ft_stroker_cubicto" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>&lsquo;Draw&rsquo; a single cubic Bezier in the stroker's current sub-path, from the last position.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="control1">control1</td><td class="desc">
+<p>A pointer to the first Bezier control point.</p>
+</td></tr>
+<tr><td class="val" id="control2">control2</td><td class="desc">
+<p>A pointer to second Bezier control point.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You should call this function between <code><a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a></code> and <code><a href="ft2-glyph_stroker.html#ft_stroker_endsubpath">FT_Stroker_EndSubPath</a></code>.</p>
+<hr>
+
+<h2 id="ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts<a class="headerlink" href="#ft_stroker_getbordercounts" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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 one of the &lsquo;border&rsquo; or &lsquo;stroke&rsquo; outlines generated by the stroker.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="border">border</td><td class="desc">
+<p>The border index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="anum_points">anum_points</td><td class="desc">
+<p>The number of points.</p>
+</td></tr>
+<tr><td class="val" id="anum_contours">anum_contours</td><td class="desc">
+<p>The number of contours.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-glyph_stroker.html#ft_stroker_getcounts">FT_Stroker_GetCounts</a></code> instead if you want to retrieve the counts associated to both borders.</p>
+<hr>
+
+<h2 id="ft_stroker_exportborder">FT_Stroker_ExportBorder<a class="headerlink" href="#ft_stroker_exportborder" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call this function after <code><a href="ft2-glyph_stroker.html#ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts</a></code> to export the corresponding border to your own <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code> structure.</p>
+<p>Note that this function appends the border points and contours to your outline, but does not try to resize its arrays.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="border">border</td><td class="desc">
+<p>The border index.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The target outline handle.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Always call this function after <code><a href="ft2-glyph_stroker.html#ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts</a></code> to get sure that there is enough room in your <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code> 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 <code><a href="ft2-glyph_stroker.html#ft_stroker_export">FT_Stroker_Export</a></code> instead if you want to retrieve all borders at once.</p>
+<hr>
+
+<h2 id="ft_stroker_getcounts">FT_Stroker_GetCounts<a class="headerlink" href="#ft_stroker_getcounts" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="anum_points">anum_points</td><td class="desc">
+<p>The number of points.</p>
+</td></tr>
+<tr><td class="val" id="anum_contours">anum_contours</td><td class="desc">
+<p>The number of contours.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_stroker_export">FT_Stroker_Export<a class="headerlink" href="#ft_stroker_export" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_STROKER_H (freetype/ftstroke.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Call this function after <code><a href="ft2-glyph_stroker.html#ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts</a></code> to export all borders to your own <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code> structure.</p>
+<p>Note that this function appends the border points and contours to your outline, but does not try to resize its arrays.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stroker">stroker</td><td class="desc">
+<p>The target stroker handle.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>The target outline handle.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Scanline Converter
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-system_interface.html" title="System Interface" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ System Interface
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-glyph_variants.html b/freetype/docs/reference/site/ft2-glyph_variants.html
new file mode 100644
index 00000000..9e3d67e1
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-glyph_variants.html
@@ -0,0 +1,1399 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Unicode Variation Sequences - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#unicode-variation-sequences" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Unicode Variation Sequences
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Unicode Variation Sequences
+ </label>
+
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link md-nav__link--active">
+ Unicode Variation Sequences
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharvariantindex" title="FT_Face_GetCharVariantIndex" class="md-nav__link">
+ FT_Face_GetCharVariantIndex
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharvariantisdefault" title="FT_Face_GetCharVariantIsDefault" class="md-nav__link">
+ FT_Face_GetCharVariantIsDefault
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getvariantselectors" title="FT_Face_GetVariantSelectors" class="md-nav__link">
+ FT_Face_GetVariantSelectors
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getvariantsofchar" title="FT_Face_GetVariantsOfChar" class="md-nav__link">
+ FT_Face_GetVariantsOfChar
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharsofvariant" title="FT_Face_GetCharsOfVariant" class="md-nav__link">
+ FT_Face_GetCharsOfVariant
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharvariantindex" title="FT_Face_GetCharVariantIndex" class="md-nav__link">
+ FT_Face_GetCharVariantIndex
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharvariantisdefault" title="FT_Face_GetCharVariantIsDefault" class="md-nav__link">
+ FT_Face_GetCharVariantIsDefault
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getvariantselectors" title="FT_Face_GetVariantSelectors" class="md-nav__link">
+ FT_Face_GetVariantSelectors
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getvariantsofchar" title="FT_Face_GetVariantsOfChar" class="md-nav__link">
+ FT_Face_GetVariantsOfChar
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_getcharsofvariant" title="FT_Face_GetCharsOfVariant" class="md-nav__link">
+ FT_Face_GetCharsOfVariant
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Unicode Variation Sequences</p>
+<hr />
+<h1 id="unicode-variation-sequences">Unicode Variation Sequences<a class="headerlink" href="#unicode-variation-sequences" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>Many characters, especially for CJK scripts, have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Variation Sequences (VS), consisting of a Unicode base character and a variation selector instead of further extending the already huge number of characters.</p>
+<p>Unicode maintains two different sets, namely &lsquo;Standardized Variation Sequences&rsquo; and registered &lsquo;Ideographic Variation Sequences&rsquo; (IVS), collected in the &lsquo;Ideographic Variation Database&rsquo; (IVD).</p>
+<p><a href="https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt">https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt</a> <a href="https://unicode.org/reports/tr37/">https://unicode.org/reports/tr37/</a> <a href="https://unicode.org/ivd/">https://unicode.org/ivd/</a></p>
+<p>To date (January 2017), the character with the most ideographic variations is U+9089, having 32 such IVS.</p>
+<p>Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation Selectors from the range U+E0100-U+E01EF only.</p>
+<p>A VS consists of the base character value followed by a single Variation Selector. For example, to get the first variation of U+9089, you have to write the character sequence <code>U+9089 U+E0100</code>.</p>
+<p>Adobe and MS decided to support both standardized and ideographic VS 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 variations supported by the font.</p>
+<p>A variation may be either &lsquo;default&rsquo; or &lsquo;non-default&rsquo; for a given font. A default variation is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variation is a different glyph.</p>
+<h2 id="ft_face_getcharvariantindex">FT_Face_GetCharVariantIndex<a class="headerlink" href="#ft_face_getcharvariantindex" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the glyph index of a given character code as modified by the variation selector.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="charcode">charcode</td><td class="desc">
+<p>The character code point in Unicode.</p>
+</td></tr>
+<tr><td class="val" id="variantselector">variantSelector</td><td class="desc">
+<p>The Unicode code point of the variation selector.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<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>
+<h4>note</h4>
+
+<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>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+<h2 id="ft_face_getcharvariantisdefault">FT_Face_GetCharVariantIsDefault<a class="headerlink" href="#ft_face_getcharvariantisdefault" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Check whether this variation of this Unicode character is the one to be found in the charmap.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="charcode">charcode</td><td class="desc">
+<p>The character codepoint in Unicode.</p>
+</td></tr>
+<tr><td class="val" id="variantselector">variantSelector</td><td class="desc">
+<p>The Unicode codepoint of the variation selector.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<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 variation.</p>
+<h4>note</h4>
+
+<p>This function is only meaningful if the font has a variation selector cmap subtable.</p>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+<h2 id="ft_face_getvariantselectors">FT_Face_GetVariantSelectors<a class="headerlink" href="#ft_face_getvariantselectors" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a zero-terminated list of Unicode variation selectors found in the font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A pointer to an array of selector code points, or <code>NULL</code> if there is no valid variation selector cmap subtable.</p>
+<h4>note</h4>
+
+<p>The last item in the array is&nbsp;0; the array is owned by the <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object but can be overwritten or released on the next call to a FreeType function.</p>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+<h2 id="ft_face_getvariantsofchar">FT_Face_GetVariantsOfChar<a class="headerlink" href="#ft_face_getvariantsofchar" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a zero-terminated list of Unicode variation selectors found for the specified character code.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="charcode">charcode</td><td class="desc">
+<p>The character codepoint in Unicode.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A pointer to an array of variation selector code points that are active for the given character, or <code>NULL</code> if the corresponding list is empty.</p>
+<h4>note</h4>
+
+<p>The last item in the array is&nbsp;0; the array is owned by the <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object but can be overwritten or released on the next call to a FreeType function.</p>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+<h2 id="ft_face_getcharsofvariant">FT_Face_GetCharsOfVariant<a class="headerlink" href="#ft_face_getcharsofvariant" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a zero-terminated list of Unicode character codes found for the specified variation selector.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr><td class="val" id="variantselector">variantSelector</td><td class="desc">
+<p>The variation selector code point in Unicode.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A list of all the code points that are specified by this selector (both default and non-default codes are returned) or <code>NULL</code> if there is no valid cmap or the variation selector is invalid.</p>
+<h4>note</h4>
+
+<p>The last item in the array is&nbsp;0; the array is owned by the <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> object but can be overwritten or released on the next call to a FreeType function.</p>
+<h4>since</h4>
+
+<p>2.3.6</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Base Interface
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Glyph Color Management
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-gx_validation.html b/freetype/docs/reference/site/ft2-gx_validation.html
new file mode 100644
index 00000000..32cba840
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-gx_validation.html
@@ -0,0 +1,1482 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>TrueTypeGX/AAT Validation - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#truetypegxaat-validation" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ TrueTypeGX/AAT Validation
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10" checked>
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ TrueTypeGX/AAT Validation
+ </label>
+
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link md-nav__link--active">
+ TrueTypeGX/AAT Validation
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypegx_validate" title="FT_TrueTypeGX_Validate" class="md-nav__link">
+ FT_TrueTypeGX_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypegx_free" title="FT_TrueTypeGX_Free" class="md-nav__link">
+ FT_TrueTypeGX_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_classickern_validate" title="FT_ClassicKern_Validate" class="md-nav__link">
+ FT_ClassicKern_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_classickern_free" title="FT_ClassicKern_Free" class="md-nav__link">
+ FT_ClassicKern_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_gx_length" title="FT_VALIDATE_GX_LENGTH" class="md-nav__link">
+ FT_VALIDATE_GX_LENGTH
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_gxxxx" title="FT_VALIDATE_GXXXX" class="md-nav__link">
+ FT_VALIDATE_GXXXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_ckernxxx" title="FT_VALIDATE_CKERNXXX" class="md-nav__link">
+ FT_VALIDATE_CKERNXXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypegx_validate" title="FT_TrueTypeGX_Validate" class="md-nav__link">
+ FT_TrueTypeGX_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypegx_free" title="FT_TrueTypeGX_Free" class="md-nav__link">
+ FT_TrueTypeGX_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_classickern_validate" title="FT_ClassicKern_Validate" class="md-nav__link">
+ FT_ClassicKern_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_classickern_free" title="FT_ClassicKern_Free" class="md-nav__link">
+ FT_ClassicKern_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_gx_length" title="FT_VALIDATE_GX_LENGTH" class="md-nav__link">
+ FT_VALIDATE_GX_LENGTH
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_gxxxx" title="FT_VALIDATE_GXXXX" class="md-nav__link">
+ FT_VALIDATE_GXXXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_ckernxxx" title="FT_VALIDATE_CKERNXXX" class="md-nav__link">
+ FT_VALIDATE_CKERNXXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#miscellaneous">Miscellaneous</a> &raquo; TrueTypeGX/AAT Validation</p>
+<hr />
+<h1 id="truetypegxaat-validation">TrueTypeGX/AAT Validation<a class="headerlink" href="#truetypegxaat-validation" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).</p>
+<h2 id="ft_truetypegx_validate">FT_TrueTypeGX_Validate<a class="headerlink" href="#ft_truetypegx_validate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
+<p>A bit field that specifies the tables to be validated. See <code><a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_GXXXX</a></code> for possible values.</p>
+</td></tr>
+<tr><td class="val" id="table_length">table_length</td><td class="desc">
+<p>The size of the <code>tables</code> array. Normally, <code><a href="ft2-gx_validation.html#ft_validate_gx_length">FT_VALIDATE_GX_LENGTH</a></code> should be passed.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="tables">tables</td><td class="desc">
+<p>The array where all validated sfnt tables are stored. The array itself must be allocated by a client.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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 <code>tables</code> element, by calling <code><a href="ft2-gx_validation.html#ft_truetypegx_free">FT_TrueTypeGX_Free</a></code>. A <code>NULL</code> 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>
+<hr>
+
+<h2 id="ft_truetypegx_free">FT_TrueTypeGX_Free<a class="headerlink" href="#ft_truetypegx_free" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Free the buffer allocated by TrueTypeGX validator.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="table">table</td><td class="desc">
+<p>The pointer to the buffer allocated by <code><a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function must be used to free the buffer allocated by <code><a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a></code> only.</p>
+<hr>
+
+<h2 id="ft_classickern_validate">FT_ClassicKern_Validate<a class="headerlink" href="#ft_classickern_validate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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 that 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 <code><a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a></code> 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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
+<p>A bit field that specifies the dialect to be validated. See <code><a href="ft2-gx_validation.html#ft_validate_ckernxxx">FT_VALIDATE_CKERNXXX</a></code> for possible values.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="ckern_table">ckern_table</td><td class="desc">
+<p>A pointer to the kern table.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>After use, the application should deallocate the buffers pointed to by <code>ckern_table</code>, by calling <code><a href="ft2-gx_validation.html#ft_classickern_free">FT_ClassicKern_Free</a></code>. A <code>NULL</code> value indicates that the table doesn't exist in the font.</p>
+<hr>
+
+<h2 id="ft_classickern_free">FT_ClassicKern_Free<a class="headerlink" href="#ft_classickern_free" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Free the buffer allocated by classic Kern validator.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="table">table</td><td class="desc">
+<p>The pointer to the buffer that is allocated by <code><a href="ft2-gx_validation.html#ft_classickern_validate">FT_ClassicKern_Validate</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function must be used to free the buffer allocated by <code><a href="ft2-gx_validation.html#ft_classickern_validate">FT_ClassicKern_Validate</a></code> only.</p>
+<hr>
+
+<h2 id="ft_validate_gx_length">FT_VALIDATE_GX_LENGTH<a class="headerlink" href="#ft_validate_gx_length" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_VALIDATE_GX_LENGTH</b> ( FT_VALIDATE_GX_LAST_INDEX + 1 )
+</pre>
+</div>
+
+<p>The number of tables checked in this module. Use it as a parameter for the <code>table-length</code> argument of function <code><a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a></code>.</p>
+<hr>
+
+<h2 id="ft_validate_gxxxx">FT_VALIDATE_GXXXX<a class="headerlink" href="#ft_validate_gxxxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_feat">FT_VALIDATE_feat</a> FT_VALIDATE_GX_BITFIELD( feat )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_mort">FT_VALIDATE_mort</a> FT_VALIDATE_GX_BITFIELD( mort )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_morx">FT_VALIDATE_morx</a> FT_VALIDATE_GX_BITFIELD( morx )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_bsln">FT_VALIDATE_bsln</a> FT_VALIDATE_GX_BITFIELD( bsln )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_just">FT_VALIDATE_just</a> FT_VALIDATE_GX_BITFIELD( just )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_kern">FT_VALIDATE_kern</a> FT_VALIDATE_GX_BITFIELD( kern )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_opbd">FT_VALIDATE_opbd</a> FT_VALIDATE_GX_BITFIELD( opbd )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_trak">FT_VALIDATE_trak</a> FT_VALIDATE_GX_BITFIELD( trak )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_prop">FT_VALIDATE_prop</a> FT_VALIDATE_GX_BITFIELD( prop )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_lcar">FT_VALIDATE_lcar</a> FT_VALIDATE_GX_BITFIELD( lcar )
+
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_gx">FT_VALIDATE_GX</a> ( <a href="ft2-gx_validation.html#ft_validate_feat">FT_VALIDATE_feat</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_mort">FT_VALIDATE_mort</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_morx">FT_VALIDATE_morx</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_bsln">FT_VALIDATE_bsln</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_just">FT_VALIDATE_just</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_kern">FT_VALIDATE_kern</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_opbd">FT_VALIDATE_opbd</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_trak">FT_VALIDATE_trak</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_prop">FT_VALIDATE_prop</a> | \
+ <a href="ft2-gx_validation.html#ft_validate_lcar">FT_VALIDATE_lcar</a> )
+</pre>
+</div>
+
+<p>A list of bit-field constants used with <code><a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a></code> to indicate which TrueTypeGX/AAT Type tables should be validated.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_validate_feat">FT_VALIDATE_feat</td><td class="desc">
+<p>Validate &lsquo;feat&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_mort">FT_VALIDATE_mort</td><td class="desc">
+<p>Validate &lsquo;mort&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_morx">FT_VALIDATE_morx</td><td class="desc">
+<p>Validate &lsquo;morx&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_bsln">FT_VALIDATE_bsln</td><td class="desc">
+<p>Validate &lsquo;bsln&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_just">FT_VALIDATE_just</td><td class="desc">
+<p>Validate &lsquo;just&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_kern">FT_VALIDATE_kern</td><td class="desc">
+<p>Validate &lsquo;kern&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_opbd">FT_VALIDATE_opbd</td><td class="desc">
+<p>Validate &lsquo;opbd&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_trak">FT_VALIDATE_trak</td><td class="desc">
+<p>Validate &lsquo;trak&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_prop">FT_VALIDATE_prop</td><td class="desc">
+<p>Validate &lsquo;prop&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_lcar">FT_VALIDATE_lcar</td><td class="desc">
+<p>Validate &lsquo;lcar&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_gx">FT_VALIDATE_GX</td><td class="desc">
+<p>Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop and lcar).</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_validate_ckernxxx">FT_VALIDATE_CKERNXXX<a class="headerlink" href="#ft_validate_ckernxxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_ms">FT_VALIDATE_MS</a> ( FT_VALIDATE_GX_START &lt;&lt; 0 )
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_apple">FT_VALIDATE_APPLE</a> ( FT_VALIDATE_GX_START &lt;&lt; 1 )
+
+#<span class="keyword">define</span> <a href="ft2-gx_validation.html#ft_validate_ckern">FT_VALIDATE_CKERN</a> ( <a href="ft2-gx_validation.html#ft_validate_ms">FT_VALIDATE_MS</a> | <a href="ft2-gx_validation.html#ft_validate_apple">FT_VALIDATE_APPLE</a> )
+</pre>
+</div>
+
+<p>A list of bit-field constants used with <code><a href="ft2-gx_validation.html#ft_classickern_validate">FT_ClassicKern_Validate</a></code> to indicate the classic kern dialect or dialects. If the selected type doesn't fit, <code><a href="ft2-gx_validation.html#ft_classickern_validate">FT_ClassicKern_Validate</a></code> regards the table as invalid.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_validate_ms">FT_VALIDATE_MS</td><td class="desc">
+<p>Handle the &lsquo;kern&rsquo; table as a classic Microsoft kern table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_apple">FT_VALIDATE_APPLE</td><td class="desc">
+<p>Handle the &lsquo;kern&rsquo; table as a classic Apple kern table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_ckern">FT_VALIDATE_CKERN</td><td class="desc">
+<p>Handle the &lsquo;kern&rsquo; as either classic Apple or Microsoft kern table.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The TrueType Engine
+ </span>
+ </div>
+ </a>
+
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-gzip.html b/freetype/docs/reference/site/ft2-gzip.html
new file mode 100644
index 00000000..5782d9a6
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-gzip.html
@@ -0,0 +1,1269 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>GZIP Streams - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#gzip-streams" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ GZIP Streams
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ GZIP Streams
+ </label>
+
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link md-nav__link--active">
+ GZIP Streams
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_opengzip" title="FT_Stream_OpenGzip" class="md-nav__link">
+ FT_Stream_OpenGzip
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gzip_uncompress" title="FT_Gzip_Uncompress" class="md-nav__link">
+ FT_Gzip_Uncompress
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_opengzip" title="FT_Stream_OpenGzip" class="md-nav__link">
+ FT_Stream_OpenGzip
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gzip_uncompress" title="FT_Gzip_Uncompress" class="md-nav__link">
+ FT_Gzip_Uncompress
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; GZIP Streams</p>
+<hr />
+<h1 id="gzip-streams">GZIP Streams<a class="headerlink" href="#gzip-streams" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of Gzip-specific functions.</p>
+<h2 id="ft_stream_opengzip">FT_Stream_OpenGzip<a class="headerlink" href="#ft_stream_opengzip" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GZIP_H (freetype/ftgzip.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Open a new stream to parse gzip-compressed font files. This is mainly used to support the compressed <code>*.pcf.gz</code> fonts that come with XFree86.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>The target embedding stream.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>The source stream.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The source stream must be opened <em>before</em> calling this function.</p>
+<p>Calling the internal function <code>FT_Stream_Close</code> on the new stream will <strong>not</strong> call <code>FT_Stream_Close</code> 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 <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> or <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>. 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 <code>FT_Err_Unimplemented_Feature</code> if your build of FreeType was not compiled with zlib support.</p>
+<hr>
+
+<h2 id="ft_gzip_uncompress">FT_Gzip_Uncompress<a class="headerlink" href="#ft_gzip_uncompress" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_GZIP_H (freetype/ftgzip.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Gzip_Uncompress</b>( <a href="ft2-system_interface.html#ft_memory">FT_Memory</a> memory,
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a>* output,
+ <a href="ft2-basic_types.html#ft_ulong">FT_ULong</a>* output_len,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_byte">FT_Byte</a>* input,
+ <a href="ft2-basic_types.html#ft_ulong">FT_ULong</a> input_len );
+</pre>
+</div>
+
+<p>Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's <code>uncompress</code> function.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A FreeType memory handle.</p>
+</td></tr>
+<tr><td class="val" id="input">input</td><td class="desc">
+<p>The input buffer.</p>
+</td></tr>
+<tr><td class="val" id="input_len">input_len</td><td class="desc">
+<p>The length of the input buffer.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="output">output</td><td class="desc">
+<p>The output buffer.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="output_len">output_len</td><td class="desc">
+<p>Before calling the function, this is the total size of the output buffer, which must be large enough to hold the entire uncompressed data (so the size of the uncompressed data must be known in advance). After calling the function, <code>output_len</code> is the size of the used data in <code>output</code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function may return <code>FT_Err_Unimplemented_Feature</code> if your build of FreeType was not compiled with zlib support.</p>
+<h4>since</h4>
+
+<p>2.5.1</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-module_management.html" title="Module Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Module Management
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ LZW Streams
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-header_file_macros.html b/freetype/docs/reference/site/ft2-header_file_macros.html
new file mode 100644
index 00000000..9667487f
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-header_file_macros.html
@@ -0,0 +1,2355 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Header File Macros - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#header-file-macros" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Header File Macros
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Header File Macros
+ </label>
+
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link md-nav__link--active">
+ Header File Macros
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_config_h" title="FT_CONFIG_CONFIG_H" class="md-nav__link">
+ FT_CONFIG_CONFIG_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_standard_library_h" title="FT_CONFIG_STANDARD_LIBRARY_H" class="md-nav__link">
+ FT_CONFIG_STANDARD_LIBRARY_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_options_h" title="FT_CONFIG_OPTIONS_H" class="md-nav__link">
+ FT_CONFIG_OPTIONS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_modules_h" title="FT_CONFIG_MODULES_H" class="md-nav__link">
+ FT_CONFIG_MODULES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_freetype_h" title="FT_FREETYPE_H" class="md-nav__link">
+ FT_FREETYPE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_errors_h" title="FT_ERRORS_H" class="md-nav__link">
+ FT_ERRORS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_errors_h" title="FT_MODULE_ERRORS_H" class="md-nav__link">
+ FT_MODULE_ERRORS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_system_h" title="FT_SYSTEM_H" class="md-nav__link">
+ FT_SYSTEM_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_image_h" title="FT_IMAGE_H" class="md-nav__link">
+ FT_IMAGE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_types_h" title="FT_TYPES_H" class="md-nav__link">
+ FT_TYPES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_h" title="FT_LIST_H" class="md-nav__link">
+ FT_LIST_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_h" title="FT_OUTLINE_H" class="md-nav__link">
+ FT_OUTLINE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sizes_h" title="FT_SIZES_H" class="md-nav__link">
+ FT_SIZES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_h" title="FT_MODULE_H" class="md-nav__link">
+ FT_MODULE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_h" title="FT_RENDER_H" class="md-nav__link">
+ FT_RENDER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_driver_h" title="FT_DRIVER_H" class="md-nav__link">
+ FT_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_autohinter_h" title="FT_AUTOHINTER_H" class="md-nav__link">
+ FT_AUTOHINTER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cff_driver_h" title="FT_CFF_DRIVER_H" class="md-nav__link">
+ FT_CFF_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_driver_h" title="FT_TRUETYPE_DRIVER_H" class="md-nav__link">
+ FT_TRUETYPE_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pcf_driver_h" title="FT_PCF_DRIVER_H" class="md-nav__link">
+ FT_PCF_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_type1_tables_h" title="FT_TYPE1_TABLES_H" class="md-nav__link">
+ FT_TYPE1_TABLES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_ids_h" title="FT_TRUETYPE_IDS_H" class="md-nav__link">
+ FT_TRUETYPE_IDS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_tables_h" title="FT_TRUETYPE_TABLES_H" class="md-nav__link">
+ FT_TRUETYPE_TABLES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_tags_h" title="FT_TRUETYPE_TAGS_H" class="md-nav__link">
+ FT_TRUETYPE_TAGS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bdf_h" title="FT_BDF_H" class="md-nav__link">
+ FT_BDF_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cid_h" title="FT_CID_H" class="md-nav__link">
+ FT_CID_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gzip_h" title="FT_GZIP_H" class="md-nav__link">
+ FT_GZIP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lzw_h" title="FT_LZW_H" class="md-nav__link">
+ FT_LZW_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bzip2_h" title="FT_BZIP2_H" class="md-nav__link">
+ FT_BZIP2_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfonts_h" title="FT_WINFONTS_H" class="md-nav__link">
+ FT_WINFONTS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_h" title="FT_GLYPH_H" class="md-nav__link">
+ FT_GLYPH_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_h" title="FT_BITMAP_H" class="md-nav__link">
+ FT_BITMAP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bbox_h" title="FT_BBOX_H" class="md-nav__link">
+ FT_BBOX_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cache_h" title="FT_CACHE_H" class="md-nav__link">
+ FT_CACHE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mac_h" title="FT_MAC_H" class="md-nav__link">
+ FT_MAC_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_multiple_masters_h" title="FT_MULTIPLE_MASTERS_H" class="md-nav__link">
+ FT_MULTIPLE_MASTERS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_names_h" title="FT_SFNT_NAMES_H" class="md-nav__link">
+ FT_SFNT_NAMES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_validate_h" title="FT_OPENTYPE_VALIDATE_H" class="md-nav__link">
+ FT_OPENTYPE_VALIDATE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gx_validate_h" title="FT_GX_VALIDATE_H" class="md-nav__link">
+ FT_GX_VALIDATE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pfr_h" title="FT_PFR_H" class="md-nav__link">
+ FT_PFR_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_h" title="FT_STROKER_H" class="md-nav__link">
+ FT_STROKER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_synthesis_h" title="FT_SYNTHESIS_H" class="md-nav__link">
+ FT_SYNTHESIS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_font_formats_h" title="FT_FONT_FORMATS_H" class="md-nav__link">
+ FT_FONT_FORMATS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_trigonometry_h" title="FT_TRIGONOMETRY_H" class="md-nav__link">
+ FT_TRIGONOMETRY_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcd_filter_h" title="FT_LCD_FILTER_H" class="md-nav__link">
+ FT_LCD_FILTER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_h" title="FT_INCREMENTAL_H" class="md-nav__link">
+ FT_INCREMENTAL_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gasp_h" title="FT_GASP_H" class="md-nav__link">
+ FT_GASP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_advances_h" title="FT_ADVANCES_H" class="md-nav__link">
+ FT_ADVANCES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_color_h" title="FT_COLOR_H" class="md-nav__link">
+ FT_COLOR_H
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_config_h" title="FT_CONFIG_CONFIG_H" class="md-nav__link">
+ FT_CONFIG_CONFIG_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_standard_library_h" title="FT_CONFIG_STANDARD_LIBRARY_H" class="md-nav__link">
+ FT_CONFIG_STANDARD_LIBRARY_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_options_h" title="FT_CONFIG_OPTIONS_H" class="md-nav__link">
+ FT_CONFIG_OPTIONS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_config_modules_h" title="FT_CONFIG_MODULES_H" class="md-nav__link">
+ FT_CONFIG_MODULES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_freetype_h" title="FT_FREETYPE_H" class="md-nav__link">
+ FT_FREETYPE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_errors_h" title="FT_ERRORS_H" class="md-nav__link">
+ FT_ERRORS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_errors_h" title="FT_MODULE_ERRORS_H" class="md-nav__link">
+ FT_MODULE_ERRORS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_system_h" title="FT_SYSTEM_H" class="md-nav__link">
+ FT_SYSTEM_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_image_h" title="FT_IMAGE_H" class="md-nav__link">
+ FT_IMAGE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_types_h" title="FT_TYPES_H" class="md-nav__link">
+ FT_TYPES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_h" title="FT_LIST_H" class="md-nav__link">
+ FT_LIST_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_h" title="FT_OUTLINE_H" class="md-nav__link">
+ FT_OUTLINE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sizes_h" title="FT_SIZES_H" class="md-nav__link">
+ FT_SIZES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_h" title="FT_MODULE_H" class="md-nav__link">
+ FT_MODULE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_render_h" title="FT_RENDER_H" class="md-nav__link">
+ FT_RENDER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_driver_h" title="FT_DRIVER_H" class="md-nav__link">
+ FT_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_autohinter_h" title="FT_AUTOHINTER_H" class="md-nav__link">
+ FT_AUTOHINTER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cff_driver_h" title="FT_CFF_DRIVER_H" class="md-nav__link">
+ FT_CFF_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_driver_h" title="FT_TRUETYPE_DRIVER_H" class="md-nav__link">
+ FT_TRUETYPE_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pcf_driver_h" title="FT_PCF_DRIVER_H" class="md-nav__link">
+ FT_PCF_DRIVER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_type1_tables_h" title="FT_TYPE1_TABLES_H" class="md-nav__link">
+ FT_TYPE1_TABLES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_ids_h" title="FT_TRUETYPE_IDS_H" class="md-nav__link">
+ FT_TRUETYPE_IDS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_tables_h" title="FT_TRUETYPE_TABLES_H" class="md-nav__link">
+ FT_TRUETYPE_TABLES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetype_tags_h" title="FT_TRUETYPE_TAGS_H" class="md-nav__link">
+ FT_TRUETYPE_TAGS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bdf_h" title="FT_BDF_H" class="md-nav__link">
+ FT_BDF_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cid_h" title="FT_CID_H" class="md-nav__link">
+ FT_CID_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gzip_h" title="FT_GZIP_H" class="md-nav__link">
+ FT_GZIP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lzw_h" title="FT_LZW_H" class="md-nav__link">
+ FT_LZW_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bzip2_h" title="FT_BZIP2_H" class="md-nav__link">
+ FT_BZIP2_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfonts_h" title="FT_WINFONTS_H" class="md-nav__link">
+ FT_WINFONTS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_glyph_h" title="FT_GLYPH_H" class="md-nav__link">
+ FT_GLYPH_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bitmap_h" title="FT_BITMAP_H" class="md-nav__link">
+ FT_BITMAP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_bbox_h" title="FT_BBOX_H" class="md-nav__link">
+ FT_BBOX_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_cache_h" title="FT_CACHE_H" class="md-nav__link">
+ FT_CACHE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mac_h" title="FT_MAC_H" class="md-nav__link">
+ FT_MAC_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_multiple_masters_h" title="FT_MULTIPLE_MASTERS_H" class="md-nav__link">
+ FT_MULTIPLE_MASTERS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_names_h" title="FT_SFNT_NAMES_H" class="md-nav__link">
+ FT_SFNT_NAMES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_validate_h" title="FT_OPENTYPE_VALIDATE_H" class="md-nav__link">
+ FT_OPENTYPE_VALIDATE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gx_validate_h" title="FT_GX_VALIDATE_H" class="md-nav__link">
+ FT_GX_VALIDATE_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_pfr_h" title="FT_PFR_H" class="md-nav__link">
+ FT_PFR_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stroker_h" title="FT_STROKER_H" class="md-nav__link">
+ FT_STROKER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_synthesis_h" title="FT_SYNTHESIS_H" class="md-nav__link">
+ FT_SYNTHESIS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_font_formats_h" title="FT_FONT_FORMATS_H" class="md-nav__link">
+ FT_FONT_FORMATS_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_trigonometry_h" title="FT_TRIGONOMETRY_H" class="md-nav__link">
+ FT_TRIGONOMETRY_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcd_filter_h" title="FT_LCD_FILTER_H" class="md-nav__link">
+ FT_LCD_FILTER_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_h" title="FT_INCREMENTAL_H" class="md-nav__link">
+ FT_INCREMENTAL_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_gasp_h" title="FT_GASP_H" class="md-nav__link">
+ FT_GASP_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_advances_h" title="FT_ADVANCES_H" class="md-nav__link">
+ FT_ADVANCES_H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_color_h" title="FT_COLOR_H" class="md-nav__link">
+ FT_COLOR_H
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Header File Macros</p>
+<hr />
+<h1 id="header-file-macros">Header File Macros<a class="headerlink" href="#header-file-macros" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The following macros are defined to the name of specific FreeType&nbsp;2 header files. They can be used directly in <code>#include</code> statements as in:
+<div class="codehilite"><pre><span></span> #include FT_FREETYPE_H
+ #include FT_MULTIPLE_MASTERS_H
+ #include FT_GLYPH_H
+</pre></div></p>
+<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 <code>FT_MULTIPLE_MASTERS_H</code> is a lot more meaningful than <code>ftmm.h</code>).</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>
+<h2 id="ft_config_config_h">FT_CONFIG_CONFIG_H<a class="headerlink" href="#ft_config_config_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_CONFIG_CONFIG_H</b>
+#<span class="keyword">define</span> <b>FT_CONFIG_CONFIG_H</b> &lt;freetype/config/ftconfig.h&gt;
+#<span class="keyword">endif</span>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing FreeType&nbsp;2 configuration data.</p>
+<hr>
+
+<h2 id="ft_config_standard_library_h">FT_CONFIG_STANDARD_LIBRARY_H<a class="headerlink" href="#ft_config_standard_library_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_CONFIG_STANDARD_LIBRARY_H</b>
+#<span class="keyword">define</span> <b>FT_CONFIG_STANDARD_LIBRARY_H</b> &lt;freetype/config/ftstdlib.h&gt;
+#<span class="keyword">endif</span>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing FreeType&nbsp;2 interface to the standard C library functions.</p>
+<hr>
+
+<h2 id="ft_config_options_h">FT_CONFIG_OPTIONS_H<a class="headerlink" href="#ft_config_options_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_CONFIG_OPTIONS_H</b>
+#<span class="keyword">define</span> <b>FT_CONFIG_OPTIONS_H</b> &lt;freetype/config/ftoption.h&gt;
+#<span class="keyword">endif</span>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing FreeType&nbsp;2 project-specific configuration options.</p>
+<hr>
+
+<h2 id="ft_config_modules_h">FT_CONFIG_MODULES_H<a class="headerlink" href="#ft_config_modules_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">ifndef</span> <b>FT_CONFIG_MODULES_H</b>
+#<span class="keyword">define</span> <b>FT_CONFIG_MODULES_H</b> &lt;freetype/config/ftmodule.h&gt;
+#<span class="keyword">endif</span>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the list of FreeType&nbsp;2 modules that are statically linked to new library instances in <code><a href="ft2-base_interface.html#ft_init_freetype">FT_Init_FreeType</a></code>.</p>
+<hr>
+
+<h2 id="ft_freetype_h">FT_FREETYPE_H<a class="headerlink" href="#ft_freetype_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_FREETYPE_H</b> &lt;freetype/freetype.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the base FreeType&nbsp;2 API.</p>
+<hr>
+
+<h2 id="ft_errors_h">FT_ERRORS_H<a class="headerlink" href="#ft_errors_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ERRORS_H</b> &lt;freetype/fterrors.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the list of FreeType&nbsp;2 error codes (and messages).</p>
+<p>It is included by <code><a href="ft2-header_file_macros.html#ft_freetype_h">FT_FREETYPE_H</a></code>.</p>
+<hr>
+
+<h2 id="ft_module_errors_h">FT_MODULE_ERRORS_H<a class="headerlink" href="#ft_module_errors_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_MODULE_ERRORS_H</b> &lt;freetype/ftmoderr.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the list of FreeType&nbsp;2 module error offsets (and messages).</p>
+<hr>
+
+<h2 id="ft_system_h">FT_SYSTEM_H<a class="headerlink" href="#ft_system_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_SYSTEM_H</b> &lt;freetype/ftsystem.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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 <code><a href="ft2-header_file_macros.html#ft_freetype_h">FT_FREETYPE_H</a></code>.</p>
+<hr>
+
+<h2 id="ft_image_h">FT_IMAGE_H<a class="headerlink" href="#ft_image_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_IMAGE_H</b> &lt;freetype/ftimage.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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 <code><a href="ft2-header_file_macros.html#ft_freetype_h">FT_FREETYPE_H</a></code>.</p>
+<hr>
+
+<h2 id="ft_types_h">FT_TYPES_H<a class="headerlink" href="#ft_types_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TYPES_H</b> &lt;freetype/fttypes.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the basic data types defined by FreeType&nbsp;2.</p>
+<p>It is included by <code><a href="ft2-header_file_macros.html#ft_freetype_h">FT_FREETYPE_H</a></code>.</p>
+<hr>
+
+<h2 id="ft_list_h">FT_LIST_H<a class="headerlink" href="#ft_list_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_LIST_H</b> &lt;freetype/ftlist.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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>
+<hr>
+
+<h2 id="ft_outline_h">FT_OUTLINE_H<a class="headerlink" href="#ft_outline_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_OUTLINE_H</b> &lt;freetype/ftoutln.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the scalable outline management API of FreeType&nbsp;2.</p>
+<hr>
+
+<h2 id="ft_sizes_h">FT_SIZES_H<a class="headerlink" href="#ft_sizes_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_SIZES_H</b> &lt;freetype/ftsizes.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the API which manages multiple <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> objects per face.</p>
+<hr>
+
+<h2 id="ft_module_h">FT_MODULE_H<a class="headerlink" href="#ft_module_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_MODULE_H</b> &lt;freetype/ftmodapi.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the module management API of FreeType&nbsp;2.</p>
+<hr>
+
+<h2 id="ft_render_h">FT_RENDER_H<a class="headerlink" href="#ft_render_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_RENDER_H</b> &lt;freetype/ftrender.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the renderer module management API of FreeType&nbsp;2.</p>
+<hr>
+
+<h2 id="ft_driver_h">FT_DRIVER_H<a class="headerlink" href="#ft_driver_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_DRIVER_H</b> &lt;freetype/ftdriver.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing structures and macros related to the driver modules.</p>
+<hr>
+
+<h2 id="ft_autohinter_h">FT_AUTOHINTER_H<a class="headerlink" href="#ft_autohinter_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_AUTOHINTER_H</b> <a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing structures and macros related to the auto-hinting module.</p>
+<p>Deprecated since version&nbsp;2.9; use <code><a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a></code> instead.</p>
+<hr>
+
+<h2 id="ft_cff_driver_h">FT_CFF_DRIVER_H<a class="headerlink" href="#ft_cff_driver_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_CFF_DRIVER_H</b> <a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing structures and macros related to the CFF driver module.</p>
+<p>Deprecated since version&nbsp;2.9; use <code><a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a></code> instead.</p>
+<hr>
+
+<h2 id="ft_truetype_driver_h">FT_TRUETYPE_DRIVER_H<a class="headerlink" href="#ft_truetype_driver_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TRUETYPE_DRIVER_H</b> <a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing structures and macros related to the TrueType driver module.</p>
+<p>Deprecated since version&nbsp;2.9; use <code><a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a></code> instead.</p>
+<hr>
+
+<h2 id="ft_pcf_driver_h">FT_PCF_DRIVER_H<a class="headerlink" href="#ft_pcf_driver_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PCF_DRIVER_H</b> <a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing structures and macros related to the PCF driver module.</p>
+<p>Deprecated since version&nbsp;2.9; use <code><a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a></code> instead.</p>
+<hr>
+
+<h2 id="ft_type1_tables_h">FT_TYPE1_TABLES_H<a class="headerlink" href="#ft_type1_tables_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TYPE1_TABLES_H</b> &lt;freetype/t1tables.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the types and API specific to the Type&nbsp;1 format.</p>
+<hr>
+
+<h2 id="ft_truetype_ids_h">FT_TRUETYPE_IDS_H<a class="headerlink" href="#ft_truetype_ids_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TRUETYPE_IDS_H</b> &lt;freetype/ttnameid.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the enumeration values which identify name strings, languages, encodings, etc. This file really contains a <em>large</em> set of constant macro definitions, taken from the TrueType and OpenType specifications.</p>
+<hr>
+
+<h2 id="ft_truetype_tables_h">FT_TRUETYPE_TABLES_H<a class="headerlink" href="#ft_truetype_tables_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TRUETYPE_TABLES_H</b> &lt;freetype/tttables.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format.</p>
+<hr>
+
+<h2 id="ft_truetype_tags_h">FT_TRUETYPE_TAGS_H<a class="headerlink" href="#ft_truetype_tags_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TRUETYPE_TAGS_H</b> &lt;freetype/tttags.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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>
+<hr>
+
+<h2 id="ft_bdf_h">FT_BDF_H<a class="headerlink" href="#ft_bdf_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_BDF_H</b> &lt;freetype/ftbdf.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face.</p>
+<hr>
+
+<h2 id="ft_cid_h">FT_CID_H<a class="headerlink" href="#ft_cid_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_CID_H</b> &lt;freetype/ftcid.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which access CID font information from a face.</p>
+<hr>
+
+<h2 id="ft_gzip_h">FT_GZIP_H<a class="headerlink" href="#ft_gzip_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_GZIP_H</b> &lt;freetype/ftgzip.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which supports gzip-compressed files.</p>
+<hr>
+
+<h2 id="ft_lzw_h">FT_LZW_H<a class="headerlink" href="#ft_lzw_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_LZW_H</b> &lt;freetype/ftlzw.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which supports LZW-compressed files.</p>
+<hr>
+
+<h2 id="ft_bzip2_h">FT_BZIP2_H<a class="headerlink" href="#ft_bzip2_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_BZIP2_H</b> &lt;freetype/ftbzip2.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which supports bzip2-compressed files.</p>
+<hr>
+
+<h2 id="ft_winfonts_h">FT_WINFONTS_H<a class="headerlink" href="#ft_winfonts_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_WINFONTS_H</b> &lt;freetype/ftwinfnt.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the definitions of an API which supports Windows FNT files.</p>
+<hr>
+
+<h2 id="ft_glyph_h">FT_GLYPH_H<a class="headerlink" href="#ft_glyph_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_GLYPH_H</b> &lt;freetype/ftglyph.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the API of the optional glyph management component.</p>
+<hr>
+
+<h2 id="ft_bitmap_h">FT_BITMAP_H<a class="headerlink" href="#ft_bitmap_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_BITMAP_H</b> &lt;freetype/ftbitmap.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the API of the optional bitmap conversion component.</p>
+<hr>
+
+<h2 id="ft_bbox_h">FT_BBOX_H<a class="headerlink" href="#ft_bbox_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_BBOX_H</b> &lt;freetype/ftbbox.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the API of the optional exact bounding box computation routines.</p>
+<hr>
+
+<h2 id="ft_cache_h">FT_CACHE_H<a class="headerlink" href="#ft_cache_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_CACHE_H</b> &lt;freetype/ftcache.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the API of the optional FreeType&nbsp;2 cache sub-system.</p>
+<hr>
+
+<h2 id="ft_mac_h">FT_MAC_H<a class="headerlink" href="#ft_mac_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_MAC_H</b> &lt;freetype/ftmac.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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>
+<hr>
+
+<h2 id="ft_multiple_masters_h">FT_MULTIPLE_MASTERS_H<a class="headerlink" href="#ft_multiple_masters_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_MULTIPLE_MASTERS_H</b> &lt;freetype/ftmm.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the optional multiple-masters management API of FreeType&nbsp;2.</p>
+<hr>
+
+<h2 id="ft_sfnt_names_h">FT_SFNT_NAMES_H<a class="headerlink" href="#ft_sfnt_names_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_SFNT_NAMES_H</b> &lt;freetype/ftsnames.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> 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>
+<hr>
+
+<h2 id="ft_opentype_validate_h">FT_OPENTYPE_VALIDATE_H<a class="headerlink" href="#ft_opentype_validate_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_OPENTYPE_VALIDATE_H</b> &lt;freetype/ftotval.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the optional FreeType&nbsp;2 API which validates OpenType tables (&lsquo;BASE&rsquo;, &lsquo;GDEF&rsquo;, &lsquo;GPOS&rsquo;, &lsquo;GSUB&rsquo;, &lsquo;JSTF&rsquo;).</p>
+<hr>
+
+<h2 id="ft_gx_validate_h">FT_GX_VALIDATE_H<a class="headerlink" href="#ft_gx_validate_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_GX_VALIDATE_H</b> &lt;freetype/ftgxval.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the optional FreeType&nbsp;2 API which validates TrueTypeGX/AAT tables (&lsquo;feat&rsquo;, &lsquo;mort&rsquo;, &lsquo;morx&rsquo;, &lsquo;bsln&rsquo;, &lsquo;just&rsquo;, &lsquo;kern&rsquo;, &lsquo;opbd&rsquo;, &lsquo;trak&rsquo;, &lsquo;prop&rsquo;).</p>
+<hr>
+
+<h2 id="ft_pfr_h">FT_PFR_H<a class="headerlink" href="#ft_pfr_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PFR_H</b> &lt;freetype/ftpfr.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which accesses PFR-specific data.</p>
+<hr>
+
+<h2 id="ft_stroker_h">FT_STROKER_H<a class="headerlink" href="#ft_stroker_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_STROKER_H</b> &lt;freetype/ftstroke.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which provides functions to stroke outline paths.</p>
+<hr>
+
+<h2 id="ft_synthesis_h">FT_SYNTHESIS_H<a class="headerlink" href="#ft_synthesis_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_SYNTHESIS_H</b> &lt;freetype/ftsynth.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which performs artificial obliquing and emboldening.</p>
+<hr>
+
+<h2 id="ft_font_formats_h">FT_FONT_FORMATS_H<a class="headerlink" href="#ft_font_formats_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_FONT_FORMATS_H</b> &lt;freetype/ftfntfmt.h&gt;
+
+ /* deprecated */
+#<span class="keyword">define</span> FT_XFREE86_H <b>FT_FONT_FORMATS_H</b>
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which provides functions specific to font formats.</p>
+<hr>
+
+<h2 id="ft_trigonometry_h">FT_TRIGONOMETRY_H<a class="headerlink" href="#ft_trigonometry_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_TRIGONOMETRY_H</b> &lt;freetype/fttrigon.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which performs trigonometric computations (e.g., cosines and arc tangents).</p>
+<hr>
+
+<h2 id="ft_lcd_filter_h">FT_LCD_FILTER_H<a class="headerlink" href="#ft_lcd_filter_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_LCD_FILTER_H</b> &lt;freetype/ftlcdfil.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which performs color filtering for subpixel rendering.</p>
+<hr>
+
+<h2 id="ft_incremental_h">FT_INCREMENTAL_H<a class="headerlink" href="#ft_incremental_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_INCREMENTAL_H</b> &lt;freetype/ftincrem.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which performs incremental glyph loading.</p>
+<hr>
+
+<h2 id="ft_gasp_h">FT_GASP_H<a class="headerlink" href="#ft_gasp_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_GASP_H</b> &lt;freetype/ftgasp.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which returns entries from the TrueType GASP table.</p>
+<hr>
+
+<h2 id="ft_advances_h">FT_ADVANCES_H<a class="headerlink" href="#ft_advances_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ADVANCES_H</b> &lt;freetype/ftadvanc.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which returns individual and ranged glyph advances.</p>
+<hr>
+
+<h2 id="ft_color_h">FT_COLOR_H<a class="headerlink" href="#ft_color_h" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_COLOR_H</b> &lt;freetype/ftcolor.h&gt;
+</pre>
+</div>
+
+<p>A macro used in <code>#include</code> statements to name the file containing the FreeType&nbsp;2 API which handles the OpenType &lsquo;CPAL&rsquo; table.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Size Management
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Multiple Masters
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-header_inclusion.html b/freetype/docs/reference/site/ft2-header_inclusion.html
new file mode 100644
index 00000000..44a4caf3
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-header_inclusion.html
@@ -0,0 +1,1159 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>FreeType's header inclusion scheme - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#freetypes-header-inclusion-scheme" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ FreeType's header inclusion scheme
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3" checked>
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ FreeType's header inclusion scheme
+ </label>
+
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link md-nav__link--active">
+ FreeType's header inclusion scheme
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#general-remarks">General Remarks</a> &raquo; FreeType's header inclusion scheme</p>
+<hr />
+<h1 id="freetypes-header-inclusion-scheme">FreeType's header inclusion scheme<a class="headerlink" href="#freetypes-header-inclusion-scheme" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>To be as flexible as possible (and for historical reasons), FreeType uses a very special inclusion scheme to load header files, for example
+<div class="codehilite"><pre><span></span> #include &lt;ft2build.h&gt;
+
+ #include FT_FREETYPE_H
+ #include FT_OUTLINE_H
+</pre></div></p>
+<p>A compiler and its preprocessor only needs an include path to find the file <code>ft2build.h</code>; the exact locations and names of the other FreeType header files are hidden by &lsquo;<a href="ft2-header_file_macros.html#header_file_macros">Header File Macros</a>&rsquo;, loaded by <code>ft2build.h</code>. The API documentation always gives the header macro name needed for a particular function.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-index.html" title="Index" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Index
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ User allocation
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-incremental.html b/freetype/docs/reference/site/ft2-incremental.html
new file mode 100644
index 00000000..c7beef84
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-incremental.html
@@ -0,0 +1,1531 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Incremental Loading - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#incremental-loading" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Incremental Loading
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10" checked>
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Incremental Loading
+ </label>
+
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link md-nav__link--active">
+ Incremental Loading
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental" title="FT_Incremental" class="md-nav__link">
+ FT_Incremental
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_metricsrec" title="FT_Incremental_MetricsRec" class="md-nav__link">
+ FT_Incremental_MetricsRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_metrics" title="FT_Incremental_Metrics" class="md-nav__link">
+ FT_Incremental_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_getglyphdatafunc" title="FT_Incremental_GetGlyphDataFunc" class="md-nav__link">
+ FT_Incremental_GetGlyphDataFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_freeglyphdatafunc" title="FT_Incremental_FreeGlyphDataFunc" class="md-nav__link">
+ FT_Incremental_FreeGlyphDataFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_getglyphmetricsfunc" title="FT_Incremental_GetGlyphMetricsFunc" class="md-nav__link">
+ FT_Incremental_GetGlyphMetricsFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_funcsrec" title="FT_Incremental_FuncsRec" class="md-nav__link">
+ FT_Incremental_FuncsRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_interfacerec" title="FT_Incremental_InterfaceRec" class="md-nav__link">
+ FT_Incremental_InterfaceRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_interface" title="FT_Incremental_Interface" class="md-nav__link">
+ FT_Incremental_Interface
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental" title="FT_Incremental" class="md-nav__link">
+ FT_Incremental
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_metricsrec" title="FT_Incremental_MetricsRec" class="md-nav__link">
+ FT_Incremental_MetricsRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_metrics" title="FT_Incremental_Metrics" class="md-nav__link">
+ FT_Incremental_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_getglyphdatafunc" title="FT_Incremental_GetGlyphDataFunc" class="md-nav__link">
+ FT_Incremental_GetGlyphDataFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_freeglyphdatafunc" title="FT_Incremental_FreeGlyphDataFunc" class="md-nav__link">
+ FT_Incremental_FreeGlyphDataFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_getglyphmetricsfunc" title="FT_Incremental_GetGlyphMetricsFunc" class="md-nav__link">
+ FT_Incremental_GetGlyphMetricsFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_funcsrec" title="FT_Incremental_FuncsRec" class="md-nav__link">
+ FT_Incremental_FuncsRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_interfacerec" title="FT_Incremental_InterfaceRec" class="md-nav__link">
+ FT_Incremental_InterfaceRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_incremental_interface" title="FT_Incremental_Interface" class="md-nav__link">
+ FT_Incremental_Interface
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#miscellaneous">Miscellaneous</a> &raquo; Incremental Loading</p>
+<hr />
+<h1 id="incremental-loading">Incremental Loading<a class="headerlink" href="#incremental-loading" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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 <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> 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 <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>, passing an <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> with the <code><a href="ft2-parameter_tags.html#ft_param_tag_incremental">FT_PARAM_TAG_INCREMENTAL</a></code> tag and an <code><a href="ft2-incremental.html#ft_incremental_interface">FT_Incremental_Interface</a></code> value. See the comments for <code><a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a></code> for an example.</p>
+<h2 id="ft_incremental">FT_Incremental<a class="headerlink" href="#ft_incremental" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_IncrementalRec_* <b>FT_Incremental</b>;
+</pre>
+</div>
+
+<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>
+<h4>note</h4>
+
+<p>It is up to client applications to create and implement <code><a href="ft2-incremental.html#ft_incremental">FT_Incremental</a></code> objects, as long as they provide implementations for the methods <code><a href="ft2-incremental.html#ft_incremental_getglyphdatafunc">FT_Incremental_GetGlyphDataFunc</a></code>, <code><a href="ft2-incremental.html#ft_incremental_freeglyphdatafunc">FT_Incremental_FreeGlyphDataFunc</a></code> and <code><a href="ft2-incremental.html#ft_incremental_getglyphmetricsfunc">FT_Incremental_GetGlyphMetricsFunc</a></code>.</p>
+<p>See the description of <code><a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a></code> to understand how to use incremental objects with FreeType.</p>
+<hr>
+
+<h2 id="ft_incremental_metricsrec">FT_Incremental_MetricsRec<a class="headerlink" href="#ft_incremental_metricsrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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;
+ <a href="ft2-basic_types.html#ft_long">FT_Long</a> advance_v; /* since 2.3.12 */
+
+ } <b>FT_Incremental_MetricsRec</b>;
+</pre>
+</div>
+
+<p>A small structure used to contain the basic glyph metrics returned by the <code><a href="ft2-incremental.html#ft_incremental_getglyphmetricsfunc">FT_Incremental_GetGlyphMetricsFunc</a></code> method.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="bearing_x">bearing_x</td><td class="desc">
+<p>Left bearing, in font units.</p>
+</td></tr>
+<tr><td class="val" id="bearing_y">bearing_y</td><td class="desc">
+<p>Top bearing, in font units.</p>
+</td></tr>
+<tr><td class="val" id="advance">advance</td><td class="desc">
+<p>Horizontal component of glyph advance, in font units.</p>
+</td></tr>
+<tr><td class="val" id="advance_v">advance_v</td><td class="desc">
+<p>Vertical component of glyph advance, in font units.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>These correspond to horizontal or vertical metrics depending on the value of the <code>vertical</code> argument to the function <code><a href="ft2-incremental.html#ft_incremental_getglyphmetricsfunc">FT_Incremental_GetGlyphMetricsFunc</a></code>.</p>
+<hr>
+
+<h2 id="ft_incremental_metrics">FT_Incremental_Metrics<a class="headerlink" href="#ft_incremental_metrics" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_* <b>FT_Incremental_Metrics</b>;
+</pre>
+</div>
+
+<p>A handle to an <code><a href="ft2-incremental.html#ft_incremental_metricsrec">FT_Incremental_MetricsRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ft_incremental_getglyphdatafunc">FT_Incremental_GetGlyphDataFunc<a class="headerlink" href="#ft_incremental_getglyphdatafunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function called by FreeType to access a given glyph's data bytes during <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> or <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code> 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 <strong>unencrypted</strong> charstring bytes, without any <code>lenIV</code> header. It is undefined for any other format.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="incremental">incremental</td><td class="desc">
+<p>Handle to an opaque <code><a href="ft2-incremental.html#ft_incremental">FT_Incremental</a></code> handle provided by the client application.</p>
+</td></tr>
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<p>Index of relevant glyph.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="adata">adata</td><td class="desc">
+<p>A structure describing the returned glyph data bytes (which will be accessed as a read-only byte block).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If this function returns successfully the method <code><a href="ft2-incremental.html#ft_incremental_freeglyphdatafunc">FT_Incremental_FreeGlyphDataFunc</a></code> will be called later to release the data bytes.</p>
+<p>Nested calls to <code><a href="ft2-incremental.html#ft_incremental_getglyphdatafunc">FT_Incremental_GetGlyphDataFunc</a></code> can happen for compound glyphs.</p>
+<hr>
+
+<h2 id="ft_incremental_freeglyphdatafunc">FT_Incremental_FreeGlyphDataFunc<a class="headerlink" href="#ft_incremental_freeglyphdatafunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to release the glyph data bytes returned by a successful call to <code><a href="ft2-incremental.html#ft_incremental_getglyphdatafunc">FT_Incremental_GetGlyphDataFunc</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="incremental">incremental</td><td class="desc">
+<p>A handle to an opaque <code><a href="ft2-incremental.html#ft_incremental">FT_Incremental</a></code> handle provided by the client application.</p>
+</td></tr>
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>A structure describing the glyph data bytes (which will be accessed as a read-only byte block).</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_incremental_getglyphmetricsfunc">FT_Incremental_GetGlyphMetricsFunc<a class="headerlink" href="#ft_incremental_getglyphmetricsfunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="incremental">incremental</td><td class="desc">
+<p>A handle to an opaque <code><a href="ft2-incremental.html#ft_incremental">FT_Incremental</a></code> handle provided by the client application.</p>
+</td></tr>
+<tr><td class="val" id="glyph_index">glyph_index</td><td class="desc">
+<p>Index of relevant glyph.</p>
+</td></tr>
+<tr><td class="val" id="vertical">vertical</td><td class="desc">
+<p>If true, return vertical metrics.</p>
+</td></tr>
+<tr><td class="val" id="ametrics">ametrics</td><td class="desc">
+<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>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="ametrics">ametrics</td><td class="desc">
+<p>The replacement glyph metrics in font units.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_incremental_funcsrec">FT_Incremental_FuncsRec<a class="headerlink" href="#ft_incremental_funcsrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A table of functions for accessing fonts that load data incrementally. Used in <code><a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="get_glyph_data">get_glyph_data</td><td class="desc">
+<p>The function to get glyph data. Must not be null.</p>
+</td></tr>
+<tr><td class="val" id="free_glyph_data">free_glyph_data</td><td class="desc">
+<p>The function to release glyph data. Must not be null.</p>
+</td></tr>
+<tr><td class="val" id="get_glyph_metrics">get_glyph_metrics</td><td class="desc">
+<p>The function to get glyph metrics. May be null if the font does not provide overriding glyph metrics.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_incremental_interfacerec">FT_Incremental_InterfaceRec<a class="headerlink" href="#ft_incremental_interfacerec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to be used with <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> to indicate that the user wants to support incremental glyph loading. You should use it with <code><a href="ft2-parameter_tags.html#ft_param_tag_incremental">FT_PARAM_TAG_INCREMENTAL</a></code> as in the following example:
+<div class="codehilite"><pre><span></span> 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></div></p>
+<hr>
+
+<h2 id="ft_incremental_interface">FT_Incremental_Interface<a class="headerlink" href="#ft_incremental_interface" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a>* <b>FT_Incremental_Interface</b>;
+</pre>
+</div>
+
+<p>A pointer to an <code><a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a></code> structure.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ OpenType Validation
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The TrueType Engine
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-index.html b/freetype/docs/reference/site/ft2-index.html
new file mode 100644
index 00000000..ebd0f062
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-index.html
@@ -0,0 +1,2141 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Index - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#freetype-2101-api-reference" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Index
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Index
+ </label>
+
+ <a href="ft2-index.html" title="Index" class="md-nav__link md-nav__link--active">
+ Index
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#b" title="B" class="md-nav__link">
+ B
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#c" title="C" class="md-nav__link">
+ C
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#d" title="D" class="md-nav__link">
+ D
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#f" title="F" class="md-nav__link">
+ F
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#g" title="G" class="md-nav__link">
+ G
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#h" title="H" class="md-nav__link">
+ H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#i" title="I" class="md-nav__link">
+ I
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#n" title="N" class="md-nav__link">
+ N
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#p" title="P" class="md-nav__link">
+ P
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#r" title="R" class="md-nav__link">
+ R
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t" title="T" class="md-nav__link">
+ T
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#w" title="W" class="md-nav__link">
+ W
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#b" title="B" class="md-nav__link">
+ B
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#c" title="C" class="md-nav__link">
+ C
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#d" title="D" class="md-nav__link">
+ D
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#f" title="F" class="md-nav__link">
+ F
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#g" title="G" class="md-nav__link">
+ G
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#h" title="H" class="md-nav__link">
+ H
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#i" title="I" class="md-nav__link">
+ I
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#n" title="N" class="md-nav__link">
+ N
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#p" title="P" class="md-nav__link">
+ P
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#r" title="R" class="md-nav__link">
+ R
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t" title="T" class="md-nav__link">
+ T
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#w" title="W" class="md-nav__link">
+ W
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; Global Index</p>
+<hr />
+<h1 id="freetype-2101-api-reference">FreeType-2.10.1 API Reference<a class="headerlink" href="#freetype-2101-api-reference" title="Permanent link">&para;</a></h1>
+<h3 id="b">B<a class="headerlink" href="#b" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-bdf_fonts.html#bdf_property">BDF_Property</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_ATOM</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_CARDINAL</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_INTEGER</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PROPERTY_TYPE_NONE</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertyrec">BDF_PropertyRec</a><br />
+<a href="ft2-bdf_fonts.html#bdf_propertytype">BDF_PropertyType</a> </p>
+<h3 id="c">C<a class="headerlink" href="#c" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-type1_tables.html#cid_facedict">CID_FaceDict</a><br />
+<a href="ft2-type1_tables.html#cid_facedictrec">CID_FaceDictRec</a><br />
+<a href="ft2-type1_tables.html#cid_faceinfo">CID_FaceInfo</a><br />
+<a href="ft2-type1_tables.html#cid_faceinforec">CID_FaceInfoRec</a><br />
+<a href="ft2-type1_tables.html#cid_fontdict">CID_FontDict</a><br />
+<a href="ft2-type1_tables.html#cid_info">CID_Info</a> </p>
+<h3 id="d">D<a class="headerlink" href="#d" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a><br />
+<a href="ft2-properties.html#default-script">default-script</a> </p>
+<h3 id="f">F<a class="headerlink" href="#f" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#fallback-script">fallback-script</a><br />
+<a href="ft2-version.html#freetype_xxx">FREETYPE_MAJOR</a><br />
+<a href="ft2-version.html#freetype_xxx">FREETYPE_MINOR</a><br />
+<a href="ft2-version.html#freetype_xxx">FREETYPE_PATCH</a><br />
+<a href="ft2-version.html#freetype_xxx">FREETYPE_XXX</a><br />
+<a href="ft2-sizes_management.html#ft_activate_size">FT_Activate_Size</a><br />
+<a href="ft2-module_management.html#ft_add_default_modules">FT_Add_Default_Modules</a><br />
+<a href="ft2-module_management.html#ft_add_module">FT_Add_Module</a><br />
+<a href="ft2-quick_advance.html#ft_advance_flag_fast_only">FT_ADVANCE_FLAG_FAST_ONLY</a><br />
+<a href="ft2-header_file_macros.html#ft_advances_h">FT_ADVANCES_H</a><br />
+<a href="ft2-system_interface.html#ft_alloc_func">FT_Alloc_Func</a><br />
+<a href="ft2-computations.html#ft_angle">FT_Angle</a><br />
+<a href="ft2-computations.html#ft_angle_2pi">FT_ANGLE_2PI</a><br />
+<a href="ft2-computations.html#ft_angle_diff">FT_Angle_Diff</a><br />
+<a href="ft2-computations.html#ft_angle_pi">FT_ANGLE_PI</a><br />
+<a href="ft2-computations.html#ft_angle_pi2">FT_ANGLE_PI2</a><br />
+<a href="ft2-computations.html#ft_angle_pi4">FT_ANGLE_PI4</a><br />
+<a href="ft2-computations.html#ft_atan2">FT_Atan2</a><br />
+<a href="ft2-base_interface.html#ft_attach_file">FT_Attach_File</a><br />
+<a href="ft2-base_interface.html#ft_attach_stream">FT_Attach_Stream</a><br />
+<a href="ft2-header_file_macros.html#ft_autohinter_h">FT_AUTOHINTER_H</a><br />
+<a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_CJK</a><br />
+<a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_INDIC</a><br />
+<a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_LATIN</a><br />
+<a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_NONE</a><br />
+<a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_XXX</a><br />
+<a href="ft2-basic_types.html#ft_bbox">FT_BBox</a><br />
+<a href="ft2-header_file_macros.html#ft_bbox_h">FT_BBOX_H</a><br />
+<a href="ft2-header_file_macros.html#ft_bdf_h">FT_BDF_H</a><br />
+<a href="ft2-basic_types.html#ft_bitmap">FT_Bitmap</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_blend">FT_Bitmap_Blend</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_convert">FT_Bitmap_Convert</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_copy">FT_Bitmap_Copy</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_done">FT_Bitmap_Done</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_embolden">FT_Bitmap_Embolden</a><br />
+<a href="ft2-header_file_macros.html#ft_bitmap_h">FT_BITMAP_H</a><br />
+<a href="ft2-bitmap_handling.html#ft_bitmap_init">FT_Bitmap_Init</a><br />
+<a href="ft2-base_interface.html#ft_bitmap_size">FT_Bitmap_Size</a><br />
+<a href="ft2-glyph_management.html#ft_bitmapglyph">FT_BitmapGlyph</a><br />
+<a href="ft2-glyph_management.html#ft_bitmapglyphrec">FT_BitmapGlyphRec</a><br />
+<a href="ft2-basic_types.html#ft_bool">FT_Bool</a><br />
+<a href="ft2-basic_types.html#ft_byte">FT_Byte</a><br />
+<a href="ft2-basic_types.html#ft_bytes">FT_Bytes</a><br />
+<a href="ft2-header_file_macros.html#ft_bzip2_h">FT_BZIP2_H</a><br />
+<a href="ft2-header_file_macros.html#ft_cache_h">FT_CACHE_H</a><br />
+<a href="ft2-computations.html#ft_ceilfix">FT_CeilFix</a><br />
+<a href="ft2-header_file_macros.html#ft_cff_driver_h">FT_CFF_DRIVER_H</a><br />
+<a href="ft2-basic_types.html#ft_char">FT_Char</a><br />
+<a href="ft2-base_interface.html#ft_charmap">FT_CharMap</a><br />
+<a href="ft2-base_interface.html#ft_charmaprec">FT_CharMapRec</a><br />
+<a href="ft2-header_file_macros.html#ft_cid_h">FT_CID_H</a><br />
+<a href="ft2-gx_validation.html#ft_classickern_free">FT_ClassicKern_Free</a><br />
+<a href="ft2-gx_validation.html#ft_classickern_validate">FT_ClassicKern_Validate</a><br />
+<a href="ft2-color_management.html#ft_color">FT_Color</a><br />
+<a href="ft2-header_file_macros.html#ft_color_h">FT_COLOR_H</a><br />
+<a href="ft2-header_file_macros.html#ft_config_config_h">FT_CONFIG_CONFIG_H</a><br />
+<a href="ft2-header_file_macros.html#ft_config_modules_h">FT_CONFIG_MODULES_H</a><br />
+<a href="ft2-header_file_macros.html#ft_config_options_h">FT_CONFIG_OPTIONS_H</a><br />
+<a href="ft2-header_file_macros.html#ft_config_standard_library_h">FT_CONFIG_STANDARD_LIBRARY_H</a><br />
+<a href="ft2-computations.html#ft_cos">FT_Cos</a><br />
+<a href="ft2-basic_types.html#ft_data">FT_Data</a><br />
+<a href="ft2-module_management.html#ft_debug_hook_xxx">FT_DEBUG_HOOK_TRUETYPE</a><br />
+<a href="ft2-module_management.html#ft_debug_hook_xxx">FT_DEBUG_HOOK_XXX</a><br />
+<a href="ft2-module_management.html#ft_debughook_func">FT_DebugHook_Func</a><br />
+<a href="ft2-computations.html#ft_divfix">FT_DivFix</a><br />
+<a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a><br />
+<a href="ft2-base_interface.html#ft_done_freetype">FT_Done_FreeType</a><br />
+<a href="ft2-glyph_management.html#ft_done_glyph">FT_Done_Glyph</a><br />
+<a href="ft2-module_management.html#ft_done_library">FT_Done_Library</a><br />
+<a href="ft2-multiple_masters.html#ft_done_mm_var">FT_Done_MM_Var</a><br />
+<a href="ft2-sizes_management.html#ft_done_size">FT_Done_Size</a><br />
+<a href="ft2-module_management.html#ft_driver">FT_Driver</a><br />
+<a href="ft2-header_file_macros.html#ft_driver_h">FT_DRIVER_H</a><br />
+<a href="ft2-base_interface.html#ft_enc_tag">FT_ENC_TAG</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_Encoding</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_ADOBE_CUSTOM</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_ADOBE_EXPERT</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_ADOBE_LATIN_1</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_ADOBE_STANDARD</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_APPLE_ROMAN</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_BIG5</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_JOHAB</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_BIG5</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_GB2312</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_JOHAB</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_SJIS</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_SYMBOL</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_WANSUNG</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_NONE</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_OLD_LATIN_2</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_PRC</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_SJIS</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_UNICODE</a><br />
+<a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_WANSUNG</a><br />
+<a href="ft2-error_code_values.html#ft_err_xxx">FT_Err_XXX</a><br />
+<a href="ft2-basic_types.html#ft_error">FT_Error</a><br />
+<a href="ft2-error_enumerations.html#ft_error_string">FT_Error_String</a><br />
+<a href="ft2-header_file_macros.html#ft_errors_h">FT_ERRORS_H</a><br />
+<a href="ft2-basic_types.html#ft_f26dot6">FT_F26Dot6</a><br />
+<a href="ft2-basic_types.html#ft_f2dot14">FT_F2Dot14</a><br />
+<a href="ft2-base_interface.html#ft_face">FT_Face</a><br />
+<a href="ft2-version.html#ft_face_checktruetypepatents">FT_Face_CheckTrueTypePatents</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_CID_KEYED</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_COLOR</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_EXTERNAL_STREAM</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_FAST_GLYPHS</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_FIXED_SIZES</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_FIXED_WIDTH</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_GLYPH_NAMES</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_HINTER</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_HORIZONTAL</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_KERNING</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_MULTIPLE_MASTERS</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_SCALABLE</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_SFNT</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_TRICKY</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VARIATION</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VERTICAL</a><br />
+<a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_XXX</a><br />
+<a href="ft2-glyph_variants.html#ft_face_getcharsofvariant">FT_Face_GetCharsOfVariant</a><br />
+<a href="ft2-glyph_variants.html#ft_face_getcharvariantindex">FT_Face_GetCharVariantIndex</a><br />
+<a href="ft2-glyph_variants.html#ft_face_getcharvariantisdefault">FT_Face_GetCharVariantIsDefault</a><br />
+<a href="ft2-glyph_variants.html#ft_face_getvariantselectors">FT_Face_GetVariantSelectors</a><br />
+<a href="ft2-glyph_variants.html#ft_face_getvariantsofchar">FT_Face_GetVariantsOfChar</a><br />
+<a href="ft2-base_interface.html#ft_face_internal">FT_Face_Internal</a><br />
+<a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a><br />
+<a href="ft2-version.html#ft_face_setunpatentedhinting">FT_Face_SetUnpatentedHinting</a><br />
+<a href="ft2-base_interface.html#ft_facerec">FT_FaceRec</a><br />
+<a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a><br />
+<a href="ft2-computations.html#ft_floorfix">FT_FloorFix</a><br />
+<a href="ft2-header_file_macros.html#ft_font_formats_h">FT_FONT_FORMATS_H</a><br />
+<a href="ft2-system_interface.html#ft_free_func">FT_Free_Func</a><br />
+<a href="ft2-header_file_macros.html#ft_freetype_h">FT_FREETYPE_H</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_EDITABLE_EMBEDDING</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_INSTALLABLE_EMBEDDING</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_NO_SUBSETTING</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a><br />
+<a href="ft2-base_interface.html#ft_fstype_xxx">FT_FSTYPE_XXX</a><br />
+<a href="ft2-basic_types.html#ft_fword">FT_FWord</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_DO_GRAY</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_DO_GRIDFIT</a><br />
+<a href="ft2-header_file_macros.html#ft_gasp_h">FT_GASP_H</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_NO_TABLE</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_SYMMETRIC_GRIDFIT</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_SYMMETRIC_SMOOTHING</a><br />
+<a href="ft2-gasp_table.html#ft_gasp_xxx">FT_GASP_XXX</a><br />
+<a href="ft2-basic_types.html#ft_generic">FT_Generic</a><br />
+<a href="ft2-basic_types.html#ft_generic_finalizer">FT_Generic_Finalizer</a><br />
+<a href="ft2-quick_advance.html#ft_get_advance">FT_Get_Advance</a><br />
+<a href="ft2-quick_advance.html#ft_get_advances">FT_Get_Advances</a><br />
+<a href="ft2-bdf_fonts.html#ft_get_bdf_charset_id">FT_Get_BDF_Charset_ID</a><br />
+<a href="ft2-bdf_fonts.html#ft_get_bdf_property">FT_Get_BDF_Property</a><br />
+<a href="ft2-base_interface.html#ft_get_char_index">FT_Get_Char_Index</a><br />
+<a href="ft2-base_interface.html#ft_get_charmap_index">FT_Get_Charmap_Index</a><br />
+<a href="ft2-cid_fonts.html#ft_get_cid_from_glyph_index">FT_Get_CID_From_Glyph_Index</a><br />
+<a href="ft2-cid_fonts.html#ft_get_cid_is_internally_cid_keyed">FT_Get_CID_Is_Internally_CID_Keyed</a><br />
+<a href="ft2-cid_fonts.html#ft_get_cid_registry_ordering_supplement">FT_Get_CID_Registry_Ordering_Supplement</a><br />
+<a href="ft2-truetype_tables.html#ft_get_cmap_format">FT_Get_CMap_Format</a><br />
+<a href="ft2-truetype_tables.html#ft_get_cmap_language_id">FT_Get_CMap_Language_ID</a><br />
+<a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a><br />
+<a href="ft2-base_interface.html#ft_get_first_char">FT_Get_First_Char</a><br />
+<a href="ft2-font_formats.html#ft_get_font_format">FT_Get_Font_Format</a><br />
+<a href="ft2-base_interface.html#ft_get_fstype_flags">FT_Get_FSType_Flags</a><br />
+<a href="ft2-gasp_table.html#ft_get_gasp">FT_Get_Gasp</a><br />
+<a href="ft2-glyph_management.html#ft_get_glyph">FT_Get_Glyph</a><br />
+<a href="ft2-base_interface.html#ft_get_glyph_name">FT_Get_Glyph_Name</a><br />
+<a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a><br />
+<a href="ft2-multiple_masters.html#ft_get_mm_blend_coordinates">FT_Get_MM_Blend_Coordinates</a><br />
+<a href="ft2-multiple_masters.html#ft_get_mm_var">FT_Get_MM_Var</a><br />
+<a href="ft2-multiple_masters.html#ft_get_mm_weightvector">FT_Get_MM_WeightVector</a><br />
+<a href="ft2-module_management.html#ft_get_module">FT_Get_Module</a><br />
+<a href="ft2-multiple_masters.html#ft_get_multi_master">FT_Get_Multi_Master</a><br />
+<a href="ft2-base_interface.html#ft_get_name_index">FT_Get_Name_Index</a><br />
+<a href="ft2-base_interface.html#ft_get_next_char">FT_Get_Next_Char</a><br />
+<a href="ft2-pfr_fonts.html#ft_get_pfr_advance">FT_Get_PFR_Advance</a><br />
+<a href="ft2-pfr_fonts.html#ft_get_pfr_kerning">FT_Get_PFR_Kerning</a><br />
+<a href="ft2-pfr_fonts.html#ft_get_pfr_metrics">FT_Get_PFR_Metrics</a><br />
+<a href="ft2-base_interface.html#ft_get_postscript_name">FT_Get_Postscript_Name</a><br />
+<a href="ft2-type1_tables.html#ft_get_ps_font_info">FT_Get_PS_Font_Info</a><br />
+<a href="ft2-type1_tables.html#ft_get_ps_font_private">FT_Get_PS_Font_Private</a><br />
+<a href="ft2-type1_tables.html#ft_get_ps_font_value">FT_Get_PS_Font_Value</a><br />
+<a href="ft2-module_management.html#ft_get_renderer">FT_Get_Renderer</a><br />
+<a href="ft2-sfnt_names.html#ft_get_sfnt_langtag">FT_Get_Sfnt_LangTag</a><br />
+<a href="ft2-sfnt_names.html#ft_get_sfnt_name">FT_Get_Sfnt_Name</a><br />
+<a href="ft2-sfnt_names.html#ft_get_sfnt_name_count">FT_Get_Sfnt_Name_Count</a><br />
+<a href="ft2-truetype_tables.html#ft_get_sfnt_table">FT_Get_Sfnt_Table</a><br />
+<a href="ft2-base_interface.html#ft_get_subglyph_info">FT_Get_SubGlyph_Info</a><br />
+<a href="ft2-base_interface.html#ft_get_track_kerning">FT_Get_Track_Kerning</a><br />
+<a href="ft2-truetype_engine.html#ft_get_truetype_engine_type">FT_Get_TrueType_Engine_Type</a><br />
+<a href="ft2-multiple_masters.html#ft_get_var_axis_flags">FT_Get_Var_Axis_Flags</a><br />
+<a href="ft2-multiple_masters.html#ft_get_var_blend_coordinates">FT_Get_Var_Blend_Coordinates</a><br />
+<a href="ft2-multiple_masters.html#ft_get_var_design_coordinates">FT_Get_Var_Design_Coordinates</a><br />
+<a href="ft2-winfnt_fonts.html#ft_get_winfnt_header">FT_Get_WinFNT_Header</a><br />
+<a href="ft2-mac_specific.html#ft_getfile_from_mac_ats_name">FT_GetFile_From_Mac_ATS_Name</a><br />
+<a href="ft2-mac_specific.html#ft_getfile_from_mac_name">FT_GetFile_From_Mac_Name</a><br />
+<a href="ft2-mac_specific.html#ft_getfilepath_from_mac_ats_name">FT_GetFilePath_From_Mac_ATS_Name</a><br />
+<a href="ft2-glyph_management.html#ft_glyph">FT_Glyph</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_GRIDFIT</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_Glyph_BBox_Mode</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_PIXELS</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_SUBPIXELS</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_TRUNCATE</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_bbox_mode">FT_GLYPH_BBOX_UNSCALED</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_copy">FT_Glyph_Copy</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_Glyph_Format</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_BITMAP</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_COMPOSITE</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_NONE</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_OUTLINE</a><br />
+<a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_PLOTTER</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_get_cbox">FT_Glyph_Get_CBox</a><br />
+<a href="ft2-header_file_macros.html#ft_glyph_h">FT_GLYPH_H</a><br />
+<a href="ft2-base_interface.html#ft_glyph_metrics">FT_Glyph_Metrics</a><br />
+<a href="ft2-glyph_stroker.html#ft_glyph_stroke">FT_Glyph_Stroke</a><br />
+<a href="ft2-glyph_stroker.html#ft_glyph_strokeborder">FT_Glyph_StrokeBorder</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_to_bitmap">FT_Glyph_To_Bitmap</a><br />
+<a href="ft2-glyph_management.html#ft_glyph_transform">FT_Glyph_Transform</a><br />
+<a href="ft2-glyph_management.html#ft_glyphrec">FT_GlyphRec</a><br />
+<a href="ft2-base_interface.html#ft_glyphslot">FT_GlyphSlot</a><br />
+<a href="ft2-bitmap_handling.html#ft_glyphslot_own_bitmap">FT_GlyphSlot_Own_Bitmap</a><br />
+<a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a><br />
+<a href="ft2-header_file_macros.html#ft_gx_validate_h">FT_GX_VALIDATE_H</a><br />
+<a href="ft2-header_file_macros.html#ft_gzip_h">FT_GZIP_H</a><br />
+<a href="ft2-gzip.html#ft_gzip_uncompress">FT_Gzip_Uncompress</a><br />
+<a href="ft2-base_interface.html#ft_has_color">FT_HAS_COLOR</a><br />
+<a href="ft2-base_interface.html#ft_has_fast_glyphs">FT_HAS_FAST_GLYPHS</a><br />
+<a href="ft2-base_interface.html#ft_has_fixed_sizes">FT_HAS_FIXED_SIZES</a><br />
+<a href="ft2-base_interface.html#ft_has_glyph_names">FT_HAS_GLYPH_NAMES</a><br />
+<a href="ft2-base_interface.html#ft_has_horizontal">FT_HAS_HORIZONTAL</a><br />
+<a href="ft2-base_interface.html#ft_has_kerning">FT_HAS_KERNING</a><br />
+<a href="ft2-base_interface.html#ft_has_multiple_masters">FT_HAS_MULTIPLE_MASTERS</a><br />
+<a href="ft2-type1_tables.html#ft_has_ps_glyph_names">FT_Has_PS_Glyph_Names</a><br />
+<a href="ft2-base_interface.html#ft_has_vertical">FT_HAS_VERTICAL</a><br />
+<a href="ft2-properties.html#ft_hinting_xxx">FT_HINTING_ADOBE</a><br />
+<a href="ft2-properties.html#ft_hinting_xxx">FT_HINTING_FREETYPE</a><br />
+<a href="ft2-properties.html#ft_hinting_xxx">FT_HINTING_XXX</a><br />
+<a href="ft2-header_file_macros.html#ft_image_h">FT_IMAGE_H</a><br />
+<a href="ft2-basic_types.html#ft_image_tag">FT_IMAGE_TAG</a><br />
+<a href="ft2-incremental.html#ft_incremental">FT_Incremental</a><br />
+<a href="ft2-incremental.html#ft_incremental_freeglyphdatafunc">FT_Incremental_FreeGlyphDataFunc</a><br />
+<a href="ft2-incremental.html#ft_incremental_funcsrec">FT_Incremental_FuncsRec</a><br />
+<a href="ft2-incremental.html#ft_incremental_getglyphdatafunc">FT_Incremental_GetGlyphDataFunc</a><br />
+<a href="ft2-incremental.html#ft_incremental_getglyphmetricsfunc">FT_Incremental_GetGlyphMetricsFunc</a><br />
+<a href="ft2-header_file_macros.html#ft_incremental_h">FT_INCREMENTAL_H</a><br />
+<a href="ft2-incremental.html#ft_incremental_interface">FT_Incremental_Interface</a><br />
+<a href="ft2-incremental.html#ft_incremental_interfacerec">FT_Incremental_InterfaceRec</a><br />
+<a href="ft2-incremental.html#ft_incremental_metrics">FT_Incremental_Metrics</a><br />
+<a href="ft2-incremental.html#ft_incremental_metricsrec">FT_Incremental_MetricsRec</a><br />
+<a href="ft2-base_interface.html#ft_init_freetype">FT_Init_FreeType</a><br />
+<a href="ft2-basic_types.html#ft_int">FT_Int</a><br />
+<a href="ft2-basic_types.html#ft_int16">FT_Int16</a><br />
+<a href="ft2-basic_types.html#ft_int32">FT_Int32</a><br />
+<a href="ft2-basic_types.html#ft_int64">FT_Int64</a><br />
+<a href="ft2-base_interface.html#ft_is_cid_keyed">FT_IS_CID_KEYED</a><br />
+<a href="ft2-base_interface.html#ft_is_fixed_width">FT_IS_FIXED_WIDTH</a><br />
+<a href="ft2-base_interface.html#ft_is_named_instance">FT_IS_NAMED_INSTANCE</a><br />
+<a href="ft2-base_interface.html#ft_is_scalable">FT_IS_SCALABLE</a><br />
+<a href="ft2-base_interface.html#ft_is_sfnt">FT_IS_SFNT</a><br />
+<a href="ft2-base_interface.html#ft_is_tricky">FT_IS_TRICKY</a><br />
+<a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a><br />
+<a href="ft2-base_interface.html#ft_kerning_mode">FT_KERNING_DEFAULT</a><br />
+<a href="ft2-base_interface.html#ft_kerning_mode">FT_Kerning_Mode</a><br />
+<a href="ft2-base_interface.html#ft_kerning_mode">FT_KERNING_UNFITTED</a><br />
+<a href="ft2-base_interface.html#ft_kerning_mode">FT_KERNING_UNSCALED</a><br />
+<a href="ft2-layer_management.html#ft_layeriterator">FT_LayerIterator</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_DEFAULT</a><br />
+<a href="ft2-header_file_macros.html#ft_lcd_filter_h">FT_LCD_FILTER_H</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_LEGACY</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_LEGACY1</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_LIGHT</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_NONE</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LcdFilter</a><br />
+<a href="ft2-lcd_rendering.html#ft_lcdfivetapfilter">FT_LcdFiveTapFilter</a><br />
+<a href="ft2-base_interface.html#ft_library">FT_Library</a><br />
+<a href="ft2-lcd_rendering.html#ft_library_setlcdfilter">FT_Library_SetLcdFilter</a><br />
+<a href="ft2-lcd_rendering.html#ft_library_setlcdfilterweights">FT_Library_SetLcdFilterWeights</a><br />
+<a href="ft2-lcd_rendering.html#ft_library_setlcdgeometry">FT_Library_SetLcdGeometry</a><br />
+<a href="ft2-version.html#ft_library_version">FT_Library_Version</a><br />
+<a href="ft2-list_processing.html#ft_list">FT_List</a><br />
+<a href="ft2-list_processing.html#ft_list_add">FT_List_Add</a><br />
+<a href="ft2-list_processing.html#ft_list_destructor">FT_List_Destructor</a><br />
+<a href="ft2-list_processing.html#ft_list_finalize">FT_List_Finalize</a><br />
+<a href="ft2-list_processing.html#ft_list_find">FT_List_Find</a><br />
+<a href="ft2-header_file_macros.html#ft_list_h">FT_LIST_H</a><br />
+<a href="ft2-list_processing.html#ft_list_insert">FT_List_Insert</a><br />
+<a href="ft2-list_processing.html#ft_list_iterate">FT_List_Iterate</a><br />
+<a href="ft2-list_processing.html#ft_list_iterator">FT_List_Iterator</a><br />
+<a href="ft2-list_processing.html#ft_list_remove">FT_List_Remove</a><br />
+<a href="ft2-list_processing.html#ft_list_up">FT_List_Up</a><br />
+<a href="ft2-list_processing.html#ft_listnode">FT_ListNode</a><br />
+<a href="ft2-list_processing.html#ft_listnoderec">FT_ListNodeRec</a><br />
+<a href="ft2-list_processing.html#ft_listrec">FT_ListRec</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_BITMAP_METRICS_ONLY</a><br />
+<a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COMPUTE_METRICS</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_CROP_BITMAP</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_DEFAULT</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_FORCE_AUTOHINT</a><br />
+<a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_IGNORE_TRANSFORM</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_LINEAR_DESIGN</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_MONOCHROME</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_AUTOHINT</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_BITMAP</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_HINTING</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_RECURSE</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_PEDANTIC</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_RENDER</a><br />
+<a href="ft2-truetype_tables.html#ft_load_sfnt_table">FT_Load_Sfnt_Table</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_LCD</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_LCD_V</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_LIGHT</a><br />
+<a href="ft2-base_interface.html#ft_load_target_mode">FT_LOAD_TARGET_MODE</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_MONO</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_NORMAL</a><br />
+<a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_XXX</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_VERTICAL_LAYOUT</a><br />
+<a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_XXX</a><br />
+<a href="ft2-basic_types.html#ft_long">FT_Long</a><br />
+<a href="ft2-header_file_macros.html#ft_lzw_h">FT_LZW_H</a><br />
+<a href="ft2-header_file_macros.html#ft_mac_h">FT_MAC_H</a><br />
+<a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a><br />
+<a href="ft2-basic_types.html#ft_matrix">FT_Matrix</a><br />
+<a href="ft2-computations.html#ft_matrix_invert">FT_Matrix_Invert</a><br />
+<a href="ft2-computations.html#ft_matrix_multiply">FT_Matrix_Multiply</a><br />
+<a href="ft2-system_interface.html#ft_memory">FT_Memory</a><br />
+<a href="ft2-system_interface.html#ft_memoryrec">FT_MemoryRec</a><br />
+<a href="ft2-multiple_masters.html#ft_mm_axis">FT_MM_Axis</a><br />
+<a href="ft2-multiple_masters.html#ft_mm_var">FT_MM_Var</a><br />
+<a href="ft2-module_management.html#ft_module">FT_Module</a><br />
+<a href="ft2-module_management.html#ft_module_class">FT_Module_Class</a><br />
+<a href="ft2-module_management.html#ft_module_constructor">FT_Module_Constructor</a><br />
+<a href="ft2-module_management.html#ft_module_destructor">FT_Module_Destructor</a><br />
+<a href="ft2-header_file_macros.html#ft_module_errors_h">FT_MODULE_ERRORS_H</a><br />
+<a href="ft2-header_file_macros.html#ft_module_h">FT_MODULE_H</a><br />
+<a href="ft2-module_management.html#ft_module_requester">FT_Module_Requester</a><br />
+<a href="ft2-computations.html#ft_muldiv">FT_MulDiv</a><br />
+<a href="ft2-computations.html#ft_mulfix">FT_MulFix</a><br />
+<a href="ft2-multiple_masters.html#ft_multi_master">FT_Multi_Master</a><br />
+<a href="ft2-header_file_macros.html#ft_multiple_masters_h">FT_MULTIPLE_MASTERS_H</a><br />
+<a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a><br />
+<a href="ft2-mac_specific.html#ft_new_face_from_fond">FT_New_Face_From_FOND</a><br />
+<a href="ft2-mac_specific.html#ft_new_face_from_fsref">FT_New_Face_From_FSRef</a><br />
+<a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a><br />
+<a href="ft2-glyph_management.html#ft_new_glyph">FT_New_Glyph</a><br />
+<a href="ft2-module_management.html#ft_new_library">FT_New_Library</a><br />
+<a href="ft2-base_interface.html#ft_new_memory_face">FT_New_Memory_Face</a><br />
+<a href="ft2-sizes_management.html#ft_new_size">FT_New_Size</a><br />
+<a href="ft2-basic_types.html#ft_offset">FT_Offset</a><br />
+<a href="ft2-base_interface.html#ft_open_args">FT_Open_Args</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_DRIVER</a><br />
+<a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_MEMORY</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_PARAMS</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_PATHNAME</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_STREAM</a><br />
+<a href="ft2-base_interface.html#ft_open_xxx">FT_OPEN_XXX</a><br />
+<a href="ft2-ot_validation.html#ft_opentype_free">FT_OpenType_Free</a><br />
+<a href="ft2-ot_validation.html#ft_opentype_validate">FT_OpenType_Validate</a><br />
+<a href="ft2-header_file_macros.html#ft_opentype_validate_h">FT_OPENTYPE_VALIDATE_H</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_Orientation</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_FILL_LEFT</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_FILL_RIGHT</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_NONE</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_POSTSCRIPT</a><br />
+<a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_TRUETYPE</a><br />
+<a href="ft2-outline_processing.html#ft_outline">FT_Outline</a><br />
+<a href="ft2-outline_processing.html#ft_outline_check">FT_Outline_Check</a><br />
+<a href="ft2-outline_processing.html#ft_outline_conictofunc">FT_Outline_ConicToFunc</a><br />
+<a href="ft2-outline_processing.html#ft_outline_copy">FT_Outline_Copy</a><br />
+<a href="ft2-outline_processing.html#ft_outline_cubictofunc">FT_Outline_CubicToFunc</a><br />
+<a href="ft2-outline_processing.html#ft_outline_decompose">FT_Outline_Decompose</a><br />
+<a href="ft2-outline_processing.html#ft_outline_done">FT_Outline_Done</a><br />
+<a href="ft2-outline_processing.html#ft_outline_embolden">FT_Outline_Embolden</a><br />
+<a href="ft2-outline_processing.html#ft_outline_emboldenxy">FT_Outline_EmboldenXY</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_EVEN_ODD_FILL</a><br />
+<a href="ft2-outline_processing.html#ft_outline_funcs">FT_Outline_Funcs</a><br />
+<a href="ft2-outline_processing.html#ft_outline_get_bbox">FT_Outline_Get_BBox</a><br />
+<a href="ft2-outline_processing.html#ft_outline_get_bitmap">FT_Outline_Get_Bitmap</a><br />
+<a href="ft2-outline_processing.html#ft_outline_get_cbox">FT_Outline_Get_CBox</a><br />
+<a href="ft2-outline_processing.html#ft_outline_get_orientation">FT_Outline_Get_Orientation</a><br />
+<a href="ft2-glyph_stroker.html#ft_outline_getinsideborder">FT_Outline_GetInsideBorder</a><br />
+<a href="ft2-glyph_stroker.html#ft_outline_getoutsideborder">FT_Outline_GetOutsideBorder</a><br />
+<a href="ft2-header_file_macros.html#ft_outline_h">FT_OUTLINE_H</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_HIGH_PRECISION</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_IGNORE_DROPOUTS</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_INCLUDE_STUBS</a><br />
+<a href="ft2-outline_processing.html#ft_outline_linetofunc">FT_Outline_LineToFunc</a><br />
+<a href="ft2-outline_processing.html#ft_outline_movetofunc">FT_Outline_MoveToFunc</a><br />
+<a href="ft2-outline_processing.html#ft_outline_new">FT_Outline_New</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_NONE</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_OWNER</a><br />
+<a href="ft2-outline_processing.html#ft_outline_render">FT_Outline_Render</a><br />
+<a href="ft2-outline_processing.html#ft_outline_reverse">FT_Outline_Reverse</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_REVERSE_FILL</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_SINGLE_PASS</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_SMART_DROPOUTS</a><br />
+<a href="ft2-outline_processing.html#ft_outline_transform">FT_Outline_Transform</a><br />
+<a href="ft2-outline_processing.html#ft_outline_translate">FT_Outline_Translate</a><br />
+<a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_XXX</a><br />
+<a href="ft2-glyph_management.html#ft_outlineglyph">FT_OutlineGlyph</a><br />
+<a href="ft2-glyph_management.html#ft_outlineglyphrec">FT_OutlineGlyphRec</a><br />
+<a href="ft2-color_management.html#ft_palette_data">FT_Palette_Data</a><br />
+<a href="ft2-color_management.html#ft_palette_data_get">FT_Palette_Data_Get</a><br />
+<a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_FOR_DARK_BACKGROUND</a><br />
+<a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_FOR_LIGHT_BACKGROUND</a><br />
+<a href="ft2-color_management.html#ft_palette_select">FT_Palette_Select</a><br />
+<a href="ft2-color_management.html#ft_palette_set_foreground_color">FT_Palette_Set_Foreground_Color</a><br />
+<a href="ft2-color_management.html#ft_palette_xxx">FT_PALETTE_XXX</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_ignore_typographic_family">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_ignore_typographic_subfamily">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_incremental">FT_PARAM_TAG_INCREMENTAL</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_lcd_filter_weights">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_random_seed">FT_PARAM_TAG_RANDOM_SEED</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_stem_darkening">FT_PARAM_TAG_STEM_DARKENING</a><br />
+<a href="ft2-parameter_tags.html#ft_param_tag_unpatented_hinting">FT_PARAM_TAG_UNPATENTED_HINTING</a><br />
+<a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a><br />
+<a href="ft2-header_file_macros.html#ft_pcf_driver_h">FT_PCF_DRIVER_H</a><br />
+<a href="ft2-header_file_macros.html#ft_pfr_h">FT_PFR_H</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_Pixel_Mode</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_BGRA</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY2</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_GRAY4</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD_V</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_MONO</a><br />
+<a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_NONE</a><br />
+<a href="ft2-basic_types.html#ft_pointer">FT_Pointer</a><br />
+<a href="ft2-basic_types.html#ft_pos">FT_Pos</a><br />
+<a href="ft2-properties.html#ft_prop_glyphtoscriptmap">FT_Prop_GlyphToScriptMap</a><br />
+<a href="ft2-properties.html#ft_prop_increasexheight">FT_Prop_IncreaseXHeight</a><br />
+<a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a><br />
+<a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a><br />
+<a href="ft2-basic_types.html#ft_ptrdist">FT_PtrDist</a><br />
+<a href="ft2-raster.html#ft_raster">FT_Raster</a><br />
+<a href="ft2-raster.html#ft_raster_bitset_func">FT_Raster_BitSet_Func</a><br />
+<a href="ft2-raster.html#ft_raster_bittest_func">FT_Raster_BitTest_Func</a><br />
+<a href="ft2-raster.html#ft_raster_donefunc">FT_Raster_DoneFunc</a><br />
+<a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_AA</a><br />
+<a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_CLIP</a><br />
+<a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_DEFAULT</a><br />
+<a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_DIRECT</a><br />
+<a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_XXX</a><br />
+<a href="ft2-raster.html#ft_raster_funcs">FT_Raster_Funcs</a><br />
+<a href="ft2-raster.html#ft_raster_newfunc">FT_Raster_NewFunc</a><br />
+<a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a><br />
+<a href="ft2-raster.html#ft_raster_renderfunc">FT_Raster_RenderFunc</a><br />
+<a href="ft2-raster.html#ft_raster_resetfunc">FT_Raster_ResetFunc</a><br />
+<a href="ft2-raster.html#ft_raster_setmodefunc">FT_Raster_SetModeFunc</a><br />
+<a href="ft2-system_interface.html#ft_realloc_func">FT_Realloc_Func</a><br />
+<a href="ft2-base_interface.html#ft_reference_face">FT_Reference_Face</a><br />
+<a href="ft2-module_management.html#ft_reference_library">FT_Reference_Library</a><br />
+<a href="ft2-module_management.html#ft_remove_module">FT_Remove_Module</a><br />
+<a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a><br />
+<a href="ft2-header_file_macros.html#ft_render_h">FT_RENDER_H</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_Render_Mode</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD_V</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LIGHT</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_MONO</a><br />
+<a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_NORMAL</a><br />
+<a href="ft2-module_management.html#ft_renderer">FT_Renderer</a><br />
+<a href="ft2-module_management.html#ft_renderer_class">FT_Renderer_Class</a><br />
+<a href="ft2-base_interface.html#ft_request_size">FT_Request_Size</a><br />
+<a href="ft2-computations.html#ft_roundfix">FT_RoundFix</a><br />
+<a href="ft2-base_interface.html#ft_select_charmap">FT_Select_Charmap</a><br />
+<a href="ft2-base_interface.html#ft_select_size">FT_Select_Size</a><br />
+<a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a><br />
+<a href="ft2-base_interface.html#ft_set_charmap">FT_Set_Charmap</a><br />
+<a href="ft2-module_management.html#ft_set_debug_hook">FT_Set_Debug_Hook</a><br />
+<a href="ft2-module_management.html#ft_set_default_properties">FT_Set_Default_Properties</a><br />
+<a href="ft2-multiple_masters.html#ft_set_mm_blend_coordinates">FT_Set_MM_Blend_Coordinates</a><br />
+<a href="ft2-multiple_masters.html#ft_set_mm_design_coordinates">FT_Set_MM_Design_Coordinates</a><br />
+<a href="ft2-multiple_masters.html#ft_set_mm_weightvector">FT_Set_MM_WeightVector</a><br />
+<a href="ft2-multiple_masters.html#ft_set_named_instance">FT_Set_Named_Instance</a><br />
+<a href="ft2-base_interface.html#ft_set_pixel_sizes">FT_Set_Pixel_Sizes</a><br />
+<a href="ft2-module_management.html#ft_set_renderer">FT_Set_Renderer</a><br />
+<a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a><br />
+<a href="ft2-multiple_masters.html#ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates</a><br />
+<a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_HEAD</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_HHEA</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_MAXP</a><br />
+<a href="ft2-header_file_macros.html#ft_sfnt_names_h">FT_SFNT_NAMES_H</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_OS2</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_PCLT</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_POST</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_table_info">FT_Sfnt_Table_Info</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_Sfnt_Tag</a><br />
+<a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_SFNT_VHEA</a><br />
+<a href="ft2-sfnt_names.html#ft_sfntlangtag">FT_SfntLangTag</a><br />
+<a href="ft2-sfnt_names.html#ft_sfntname">FT_SfntName</a><br />
+<a href="ft2-basic_types.html#ft_short">FT_Short</a><br />
+<a href="ft2-computations.html#ft_sin">FT_Sin</a><br />
+<a href="ft2-base_interface.html#ft_size">FT_Size</a><br />
+<a href="ft2-base_interface.html#ft_size_internal">FT_Size_Internal</a><br />
+<a href="ft2-base_interface.html#ft_size_metrics">FT_Size_Metrics</a><br />
+<a href="ft2-base_interface.html#ft_size_request">FT_Size_Request</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_Size_Request_Type</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_BBOX</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_CELL</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_NOMINAL</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a><br />
+<a href="ft2-base_interface.html#ft_size_request_type">FT_SIZE_REQUEST_TYPE_SCALES</a><br />
+<a href="ft2-base_interface.html#ft_size_requestrec">FT_Size_RequestRec</a><br />
+<a href="ft2-base_interface.html#ft_sizerec">FT_SizeRec</a><br />
+<a href="ft2-header_file_macros.html#ft_sizes_h">FT_SIZES_H</a><br />
+<a href="ft2-base_interface.html#ft_slot_internal">FT_Slot_Internal</a><br />
+<a href="ft2-raster.html#ft_span">FT_Span</a><br />
+<a href="ft2-raster.html#ft_spanfunc">FT_SpanFunc</a><br />
+<a href="ft2-system_interface.html#ft_stream">FT_Stream</a><br />
+<a href="ft2-system_interface.html#ft_stream_closefunc">FT_Stream_CloseFunc</a><br />
+<a href="ft2-system_interface.html#ft_stream_iofunc">FT_Stream_IoFunc</a><br />
+<a href="ft2-bzip2.html#ft_stream_openbzip2">FT_Stream_OpenBzip2</a><br />
+<a href="ft2-gzip.html#ft_stream_opengzip">FT_Stream_OpenGzip</a><br />
+<a href="ft2-lzw.html#ft_stream_openlzw">FT_Stream_OpenLZW</a><br />
+<a href="ft2-system_interface.html#ft_streamdesc">FT_StreamDesc</a><br />
+<a href="ft2-system_interface.html#ft_streamrec">FT_StreamRec</a><br />
+<a href="ft2-basic_types.html#ft_string">FT_String</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker">FT_Stroker</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_beginsubpath">FT_Stroker_BeginSubPath</a><br />
+<a href="ft2-glyph_stroker.html#ft_strokerborder">FT_STROKER_BORDER_LEFT</a><br />
+<a href="ft2-glyph_stroker.html#ft_strokerborder">FT_STROKER_BORDER_RIGHT</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_conicto">FT_Stroker_ConicTo</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_cubicto">FT_Stroker_CubicTo</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_done">FT_Stroker_Done</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_endsubpath">FT_Stroker_EndSubPath</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_export">FT_Stroker_Export</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_exportborder">FT_Stroker_ExportBorder</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_getbordercounts">FT_Stroker_GetBorderCounts</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_getcounts">FT_Stroker_GetCounts</a><br />
+<a href="ft2-header_file_macros.html#ft_stroker_h">FT_STROKER_H</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linecap">FT_Stroker_LineCap</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linecap">FT_STROKER_LINECAP_BUTT</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linecap">FT_STROKER_LINECAP_ROUND</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linecap">FT_STROKER_LINECAP_SQUARE</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_Stroker_LineJoin</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_STROKER_LINEJOIN_BEVEL</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_STROKER_LINEJOIN_MITER</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_STROKER_LINEJOIN_MITER_FIXED</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_STROKER_LINEJOIN_MITER_VARIABLE</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_linejoin">FT_STROKER_LINEJOIN_ROUND</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_lineto">FT_Stroker_LineTo</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_new">FT_Stroker_New</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_parseoutline">FT_Stroker_ParseOutline</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_rewind">FT_Stroker_Rewind</a><br />
+<a href="ft2-glyph_stroker.html#ft_stroker_set">FT_Stroker_Set</a><br />
+<a href="ft2-glyph_stroker.html#ft_strokerborder">FT_StrokerBorder</a><br />
+<a href="ft2-base_interface.html#ft_style_flag_xxx">FT_STYLE_FLAG_BOLD</a><br />
+<a href="ft2-base_interface.html#ft_style_flag_xxx">FT_STYLE_FLAG_ITALIC</a><br />
+<a href="ft2-base_interface.html#ft_style_flag_xxx">FT_STYLE_FLAG_XXX</a><br />
+<a href="ft2-base_interface.html#ft_subglyph">FT_SubGlyph</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_2X2</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_SCALE</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_XXX</a><br />
+<a href="ft2-base_interface.html#ft_subglyph_flag_xxx">FT_SUBGLYPH_FLAG_XY_SCALE</a><br />
+<a href="ft2-header_file_macros.html#ft_synthesis_h">FT_SYNTHESIS_H</a><br />
+<a href="ft2-header_file_macros.html#ft_system_h">FT_SYSTEM_H</a><br />
+<a href="ft2-basic_types.html#ft_tag">FT_Tag</a><br />
+<a href="ft2-computations.html#ft_tan">FT_Tan</a><br />
+<a href="ft2-header_file_macros.html#ft_trigonometry_h">FT_TRIGONOMETRY_H</a><br />
+<a href="ft2-header_file_macros.html#ft_truetype_driver_h">FT_TRUETYPE_DRIVER_H</a><br />
+<a href="ft2-truetype_engine.html#ft_truetypeenginetype">FT_TRUETYPE_ENGINE_TYPE_NONE</a><br />
+<a href="ft2-truetype_engine.html#ft_truetypeenginetype">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a><br />
+<a href="ft2-truetype_engine.html#ft_truetypeenginetype">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a><br />
+<a href="ft2-header_file_macros.html#ft_truetype_ids_h">FT_TRUETYPE_IDS_H</a><br />
+<a href="ft2-header_file_macros.html#ft_truetype_tables_h">FT_TRUETYPE_TABLES_H</a><br />
+<a href="ft2-header_file_macros.html#ft_truetype_tags_h">FT_TRUETYPE_TAGS_H</a><br />
+<a href="ft2-truetype_engine.html#ft_truetypeenginetype">FT_TrueTypeEngineType</a><br />
+<a href="ft2-gx_validation.html#ft_truetypegx_free">FT_TrueTypeGX_Free</a><br />
+<a href="ft2-gx_validation.html#ft_truetypegx_validate">FT_TrueTypeGX_Validate</a><br />
+<a href="ft2-header_file_macros.html#ft_type1_tables_h">FT_TYPE1_TABLES_H</a><br />
+<a href="ft2-header_file_macros.html#ft_types_h">FT_TYPES_H</a><br />
+<a href="ft2-basic_types.html#ft_ufword">FT_UFWord</a><br />
+<a href="ft2-basic_types.html#ft_uint">FT_UInt</a><br />
+<a href="ft2-basic_types.html#ft_uint16">FT_UInt16</a><br />
+<a href="ft2-basic_types.html#ft_uint32">FT_UInt32</a><br />
+<a href="ft2-basic_types.html#ft_uint64">FT_UInt64</a><br />
+<a href="ft2-basic_types.html#ft_ulong">FT_ULong</a><br />
+<a href="ft2-basic_types.html#ft_unitvector">FT_UnitVector</a><br />
+<a href="ft2-basic_types.html#ft_ushort">FT_UShort</a><br />
+<a href="ft2-gx_validation.html#ft_validate_ckernxxx">FT_VALIDATE_APPLE</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_BASE</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_bsln</a><br />
+<a href="ft2-gx_validation.html#ft_validate_ckernxxx">FT_VALIDATE_CKERN</a><br />
+<a href="ft2-gx_validation.html#ft_validate_ckernxxx">FT_VALIDATE_CKERNXXX</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_feat</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_GDEF</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_GPOS</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_GSUB</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_GX</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gx_length">FT_VALIDATE_GX_LENGTH</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_GXXXX</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_JSTF</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_just</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_kern</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_lcar</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_MATH</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_mort</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_morx</a><br />
+<a href="ft2-gx_validation.html#ft_validate_ckernxxx">FT_VALIDATE_MS</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_opbd</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_OT</a><br />
+<a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_OTXXX</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_prop</a><br />
+<a href="ft2-gx_validation.html#ft_validate_gxxxx">FT_VALIDATE_trak</a><br />
+<a href="ft2-multiple_masters.html#ft_var_axis">FT_Var_Axis</a><br />
+<a href="ft2-multiple_masters.html#ft_var_axis_flag_xxx">FT_VAR_AXIS_FLAG_HIDDEN</a><br />
+<a href="ft2-multiple_masters.html#ft_var_axis_flag_xxx">FT_VAR_AXIS_FLAG_XXX</a><br />
+<a href="ft2-multiple_masters.html#ft_var_named_style">FT_Var_Named_Style</a><br />
+<a href="ft2-basic_types.html#ft_vector">FT_Vector</a><br />
+<a href="ft2-computations.html#ft_vector_from_polar">FT_Vector_From_Polar</a><br />
+<a href="ft2-computations.html#ft_vector_length">FT_Vector_Length</a><br />
+<a href="ft2-computations.html#ft_vector_polarize">FT_Vector_Polarize</a><br />
+<a href="ft2-computations.html#ft_vector_rotate">FT_Vector_Rotate</a><br />
+<a href="ft2-computations.html#ft_vector_transform">FT_Vector_Transform</a><br />
+<a href="ft2-computations.html#ft_vector_unit">FT_Vector_Unit</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_header">FT_WinFNT_Header</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_headerrec">FT_WinFNT_HeaderRec</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1250</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1251</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1252</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1253</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1254</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1255</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1256</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1257</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1258</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP1361</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP874</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP932</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP936</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP949</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_CP950</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_DEFAULT</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_MAC</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_OEM</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_SYMBOL</a><br />
+<a href="ft2-winfnt_fonts.html#ft_winfnt_id_xxx">FT_WinFNT_ID_XXX</a><br />
+<a href="ft2-header_file_macros.html#ft_winfonts_h">FT_WINFONTS_H</a><br />
+<a href="ft2-cache_subsystem.html#ftc_cmapcache">FTC_CMapCache</a><br />
+<a href="ft2-cache_subsystem.html#ftc_cmapcache_lookup">FTC_CMapCache_Lookup</a><br />
+<a href="ft2-cache_subsystem.html#ftc_cmapcache_new">FTC_CMapCache_New</a><br />
+<a href="ft2-cache_subsystem.html#ftc_face_requester">FTC_Face_Requester</a><br />
+<a href="ft2-cache_subsystem.html#ftc_faceid">FTC_FaceID</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagecache">FTC_ImageCache</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagecache_lookup">FTC_ImageCache_Lookup</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagecache_lookupscaler">FTC_ImageCache_LookupScaler</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagecache_new">FTC_ImageCache_New</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagetype">FTC_ImageType</a><br />
+<a href="ft2-cache_subsystem.html#ftc_imagetyperec">FTC_ImageTypeRec</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager">FTC_Manager</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_done">FTC_Manager_Done</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_lookupface">FTC_Manager_LookupFace</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_lookupsize">FTC_Manager_LookupSize</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_new">FTC_Manager_New</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_removefaceid">FTC_Manager_RemoveFaceID</a><br />
+<a href="ft2-cache_subsystem.html#ftc_manager_reset">FTC_Manager_Reset</a><br />
+<a href="ft2-cache_subsystem.html#ftc_node">FTC_Node</a><br />
+<a href="ft2-cache_subsystem.html#ftc_node_unref">FTC_Node_Unref</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbit">FTC_SBit</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbitcache">FTC_SBitCache</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbitcache_lookup">FTC_SBitCache_Lookup</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbitcache_lookupscaler">FTC_SBitCache_LookupScaler</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbitcache_new">FTC_SBitCache_New</a><br />
+<a href="ft2-cache_subsystem.html#ftc_sbitrec">FTC_SBitRec</a><br />
+<a href="ft2-cache_subsystem.html#ftc_scaler">FTC_Scaler</a><br />
+<a href="ft2-cache_subsystem.html#ftc_scalerrec">FTC_ScalerRec</a> </p>
+<h3 id="g">G<a class="headerlink" href="#g" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a> </p>
+<h3 id="h">H<a class="headerlink" href="#h" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#hinting-engine">hinting-engine</a> </p>
+<h3 id="i">I<a class="headerlink" href="#i" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#increase-x-height">increase-x-height</a><br />
+<a href="ft2-properties.html#interpreter-version">interpreter-version</a> </p>
+<h3 id="n">N<a class="headerlink" href="#n" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#no-long-family-names">no-long-family-names</a><br />
+<a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a> </p>
+<h3 id="p">P<a class="headerlink" href="#p" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_BLUE_FUZZ</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_BLUE_SCALE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_BLUE_SHIFT</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_BLUE_VALUE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_CHAR_STRING</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_CHAR_STRING_KEY</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_ENCODING_ENTRY</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_ENCODING_TYPE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FAMILY_BLUE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FAMILY_NAME</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FAMILY_OTHER_BLUE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FONT_BBOX</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FONT_MATRIX</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FONT_NAME</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FONT_TYPE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FORCE_BOLD</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FS_TYPE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_FULL_NAME</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_IS_FIXED_PITCH</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_ITALIC_ANGLE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_Dict_Keys</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_LANGUAGE_GROUP</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_LEN_IV</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_MIN_FEATURE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NOTICE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_BLUE_VALUES</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_CHAR_STRINGS</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_FAMILY_BLUES</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_FAMILY_OTHER_BLUES</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_OTHER_BLUES</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_STEM_SNAP_H</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_STEM_SNAP_V</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_NUM_SUBRS</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_OTHER_BLUE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_PAINT_TYPE</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_PASSWORD</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_RND_STEM_UP</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_STD_HW</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_STD_VW</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_STEM_SNAP_H</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_STEM_SNAP_V</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_SUBR</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_UNDERLINE_POSITION</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_UNDERLINE_THICKNESS</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_UNIQUE_ID</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_VERSION</a><br />
+<a href="ft2-type1_tables.html#ps_dict_keys">PS_DICT_WEIGHT</a><br />
+<a href="ft2-type1_tables.html#ps_fontinfo">PS_FontInfo</a><br />
+<a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a><br />
+<a href="ft2-type1_tables.html#ps_private">PS_Private</a><br />
+<a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a> </p>
+<h3 id="r">R<a class="headerlink" href="#r" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#random-seed">random-seed</a> </p>
+<h3 id="t">T<a class="headerlink" href="#t" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_BLUE_SCALE</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_BLUE_SHIFT</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_BLUE_VALUES</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_FAMILY_BLUES</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_FAMILY_OTHER_BLUES</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_Blend_Flags</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_FORCE_BOLD</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_ITALIC_ANGLE</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_OTHER_BLUES</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_STANDARD_HEIGHT</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_STANDARD_WIDTH</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_STEM_SNAP_HEIGHTS</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_STEM_SNAP_WIDTHS</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_UNDERLINE_POSITION</a><br />
+<a href="ft2-type1_tables.html#t1_blend_flags">T1_BLEND_UNDERLINE_THICKNESS</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_ENCODING_TYPE_ARRAY</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_ENCODING_TYPE_EXPERT</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_ENCODING_TYPE_ISOLATIN1</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_ENCODING_TYPE_NONE</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_ENCODING_TYPE_STANDARD</a><br />
+<a href="ft2-type1_tables.html#t1_encodingtype">T1_EncodingType</a><br />
+<a href="ft2-type1_tables.html#t1_fontinfo">T1_FontInfo</a><br />
+<a href="ft2-type1_tables.html#t1_private">T1_Private</a><br />
+<a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_CUSTOM</a><br />
+<a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_EXPERT</a><br />
+<a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_LATIN_1</a><br />
+<a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_STANDARD</a><br />
+<a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_DEFAULT</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_FULL_UNICODE</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_ISO_10646</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_UNICODE_1_1</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_UNICODE_2_0</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_UNICODE_32</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_VARIANT_SELECTOR</a><br />
+<a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_header">TT_Header</a><br />
+<a href="ft2-truetype_tables.html#tt_horiheader">TT_HoriHeader</a><br />
+<a href="ft2-properties.html#tt_interpreter_version_xxx">TT_INTERPRETER_VERSION_35</a><br />
+<a href="ft2-properties.html#tt_interpreter_version_xxx">TT_INTERPRETER_VERSION_38</a><br />
+<a href="ft2-properties.html#tt_interpreter_version_xxx">TT_INTERPRETER_VERSION_40</a><br />
+<a href="ft2-properties.html#tt_interpreter_version_xxx">TT_INTERPRETER_VERSION_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_10646</a><br />
+<a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_7BIT_ASCII</a><br />
+<a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_8859_1</a><br />
+<a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_mac_id_xxx">TT_MAC_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_mac_langid_xxx">TT_MAC_LANGID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_maxprofile">TT_MaxProfile</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_BIG_5</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_JOHAB</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_PRC</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_SJIS</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_SYMBOL_CS</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_UCS_4</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_UNICODE_CS</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_WANSUNG</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_ms_langid_xxx">TT_MS_LANGID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_name_id_xxx">TT_NAME_ID_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_os2">TT_OS2</a><br />
+<a href="ft2-truetype_tables.html#tt_pclt">TT_PCLT</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_ADOBE</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_APPLE_UNICODE</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_CUSTOM</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_ISO</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MACINTOSH</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MICROSOFT</a><br />
+<a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_postscript">TT_Postscript</a><br />
+<a href="ft2-truetype_tables.html#tt_ucr_xxx">TT_UCR_XXX</a><br />
+<a href="ft2-truetype_tables.html#tt_vertheader">TT_VertHeader</a> </p>
+<h3 id="w">W<a class="headerlink" href="#w" title="Permanent link">&para;</a></h3>
+<p><a href="ft2-properties.html#warping">warping</a> </p>
+<hr />
+<div class="timestamp">generated on Mon Jul 1 15:55:30 2019 UTC</div>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="index.html" title="TOC" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ TOC
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ FreeType's header inclusion scheme
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-layer_management.html b/freetype/docs/reference/site/ft2-layer_management.html
new file mode 100644
index 00000000..cfba13ef
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-layer_management.html
@@ -0,0 +1,1313 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Glyph Layer Management - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#glyph-layer-management" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Glyph Layer Management
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Glyph Layer Management
+ </label>
+
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link md-nav__link--active">
+ Glyph Layer Management
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_layeriterator" title="FT_LayerIterator" class="md-nav__link">
+ FT_LayerIterator
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_color_glyph_layer" title="FT_Get_Color_Glyph_Layer" class="md-nav__link">
+ FT_Get_Color_Glyph_Layer
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_layeriterator" title="FT_LayerIterator" class="md-nav__link">
+ FT_LayerIterator
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_color_glyph_layer" title="FT_Get_Color_Glyph_Layer" class="md-nav__link">
+ FT_Get_Color_Glyph_Layer
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Glyph Layer Management</p>
+<hr />
+<h1 id="glyph-layer-management">Glyph Layer Management<a class="headerlink" href="#glyph-layer-management" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The functions described here allow access of colored glyph layer data in OpenType's &lsquo;COLR&rsquo; tables.</p>
+<h2 id="ft_layeriterator">FT_LayerIterator<a class="headerlink" href="#ft_layeriterator" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_LayerIterator_
+ {
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> num_layers;
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> layer;
+ <a href="ft2-basic_types.html#ft_byte">FT_Byte</a>* p;
+
+ } <b>FT_LayerIterator</b>;
+</pre>
+</div>
+
+<p>This iterator object is needed for <code><a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_layers">num_layers</td><td class="desc">
+<p>The number of glyph layers for the requested glyph index. Will be set by <code><a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="layer">layer</td><td class="desc">
+<p>The current layer. Will be set by <code><a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="p">p</td><td class="desc">
+<p>An opaque pointer into &lsquo;COLR&rsquo; table data. The caller must set this to <code>NULL</code> before the first call of <code><a href="ft2-layer_management.html#ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_get_color_glyph_layer">FT_Get_Color_Glyph_Layer<a class="headerlink" href="#ft_get_color_glyph_layer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_bool">FT_Bool</a> )
+ <b>FT_Get_Color_Glyph_Layer</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> base_glyph,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> *aglyph_index,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> *acolor_index,
+ <a href="ft2-layer_management.html#ft_layeriterator">FT_LayerIterator</a>* iterator );
+</pre>
+</div>
+
+<p>This is an interface to the &lsquo;COLR&rsquo; table in OpenType fonts to iteratively retrieve the colored glyph layers associated with the current glyph slot.</p>
+<p><a href="https://docs.microsoft.com/en-us/typography/opentype/spec/colr">https://docs.microsoft.com/en-us/typography/opentype/spec/colr</a></p>
+<p>The glyph layer data for a given glyph index, if present, provides an alternative, multi-colour glyph representation: Instead of rendering the outline or bitmap with the given glyph index, glyphs with the indices and colors returned by this function are rendered layer by layer.</p>
+<p>The returned elements are ordered in the z&nbsp;direction from bottom to top; the 'n'th element should be rendered with the associated palette color and blended on top of the already rendered layers (elements 0, 1, ..., n-1).</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the parent face object.</p>
+</td></tr>
+<tr><td class="val" id="base_glyph">base_glyph</td><td class="desc">
+<p>The glyph index the colored glyph layers are associated with.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="iterator">iterator</td><td class="desc">
+<p>An <code><a href="ft2-layer_management.html#ft_layeriterator">FT_LayerIterator</a></code> object. For the first call you should set <code>iterator-&gt;p</code> to <code>NULL</code>. For all following calls, simply use the same object again.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aglyph_index">aglyph_index</td><td class="desc">
+<p>The glyph index of the current layer.</p>
+</td></tr>
+<tr><td class="val" id="acolor_index">acolor_index</td><td class="desc">
+<p>The color index into the font face's color palette of the current layer. The value 0xFFFF is special; it doesn't reference a palette entry but indicates that the text foreground color should be used instead (to be set up by the application outside of FreeType).</p>
+<p>The color palette can be retrieved with <code><a href="ft2-color_management.html#ft_palette_select">FT_Palette_Select</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Value&nbsp;1 if everything is OK. If there are no more layers (or if there are no layers at all), value&nbsp;0 gets returned. In case of an error, value&nbsp;0 is returned also.</p>
+<h4>note</h4>
+
+<p>This function is necessary if you want to handle glyph layers by yourself. In particular, functions that operate with <code><a href="ft2-glyph_management.html#ft_glyphrec">FT_GlyphRec</a></code> objects (like <code><a href="ft2-glyph_management.html#ft_get_glyph">FT_Get_Glyph</a></code> or <code><a href="ft2-glyph_management.html#ft_glyph_to_bitmap">FT_Glyph_To_Bitmap</a></code>) don't have access to this information.</p>
+<p>Note that <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code> is able to handle colored glyph layers automatically if the <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_COLOR</a></code> flag is passed to a previous call to <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>. [This is an experimental feature.]</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Color* palette;
+ FT_LayerIterator iterator;
+
+ FT_Bool have_layers;
+ FT_UInt layer_glyph_index;
+ FT_UInt layer_color_index;
+
+
+ error = FT_Palette_Select( face, palette_index, &amp;palette );
+ if ( error )
+ palette = NULL;
+
+ iterator.p = NULL;
+ have_layers = FT_Get_Color_Glyph_Layer( face,
+ glyph_index,
+ &amp;layer_glyph_index,
+ &amp;layer_color_index,
+ &amp;iterator );
+
+ if ( palette &amp;&amp; have_layers )
+ {
+ do
+ {
+ FT_Color layer_color;
+
+
+ if ( layer_color_index == 0xFFFF )
+ layer_color = text_foreground_color;
+ else
+ layer_color = palette[layer_color_index];
+
+ // Load and render glyph `layer_glyph_index&#39;, then
+ // blend resulting pixmap (using color `layer_color&#39;)
+ // with previously created pixmaps.
+
+ } while ( FT_Get_Color_Glyph_Layer( face,
+ glyph_index,
+ &amp;layer_glyph_index,
+ &amp;layer_color_index,
+ &amp;iterator ) );
+ }
+</pre></div>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Glyph Color Management
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Glyph Management
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-lcd_rendering.html b/freetype/docs/reference/site/ft2-lcd_rendering.html
new file mode 100644
index 00000000..6eb75f32
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-lcd_rendering.html
@@ -0,0 +1,1420 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Subpixel Rendering - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#subpixel-rendering" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Subpixel Rendering
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Subpixel Rendering
+ </label>
+
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link md-nav__link--active">
+ Subpixel Rendering
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcdfilter" title="FT_LcdFilter" class="md-nav__link">
+ FT_LcdFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdfilter" title="FT_Library_SetLcdFilter" class="md-nav__link">
+ FT_Library_SetLcdFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdfilterweights" title="FT_Library_SetLcdFilterWeights" class="md-nav__link">
+ FT_Library_SetLcdFilterWeights
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcdfivetapfilter" title="FT_LcdFiveTapFilter" class="md-nav__link">
+ FT_LcdFiveTapFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdgeometry" title="FT_Library_SetLcdGeometry" class="md-nav__link">
+ FT_Library_SetLcdGeometry
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcdfilter" title="FT_LcdFilter" class="md-nav__link">
+ FT_LcdFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdfilter" title="FT_Library_SetLcdFilter" class="md-nav__link">
+ FT_Library_SetLcdFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdfilterweights" title="FT_Library_SetLcdFilterWeights" class="md-nav__link">
+ FT_Library_SetLcdFilterWeights
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_lcdfivetapfilter" title="FT_LcdFiveTapFilter" class="md-nav__link">
+ FT_LcdFiveTapFilter
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_setlcdgeometry" title="FT_Library_SetLcdGeometry" class="md-nav__link">
+ FT_Library_SetLcdGeometry
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; Subpixel Rendering</p>
+<hr />
+<h1 id="subpixel-rendering">Subpixel Rendering<a class="headerlink" href="#subpixel-rendering" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>FreeType provides two alternative subpixel rendering technologies. Should you define <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> in your <code>ftoption.h</code> file, this enables patented ClearType-style rendering. Otherwise, Harmony LCD rendering is enabled. These technologies are controlled differently and API described below, although always available, performs its function when appropriate method is enabled and does nothing otherwise.</p>
+<p>ClearType-style LCD rendering exploits the color-striped structure of LCD pixels, increasing the available resolution in the direction of the stripe (usually horizontal RGB) by a factor of&nbsp;3. Using the subpixels coverages unfiltered can create severe color fringes especially when rendering thin features. Indeed, to produce black-on-white text, the nearby color subpixels must be dimmed equally.</p>
+<p>A good 5-tap FIR filter should be applied to subpixel coverages regardless of pixel boundaries and should have these properties:</p>
+<ol>
+<li>
+<p>It should be symmetrical, like {&nbsp;a, b, c, b, a&nbsp;}, to avoid any shifts in appearance.</p>
+</li>
+<li>
+<p>It should be color-balanced, meaning a&nbsp;+ b&nbsp;=&nbsp;c, to reduce color fringes by distributing the computed coverage for one subpixel to all subpixels equally.</p>
+</li>
+<li>
+<p>It should be normalized, meaning 2a&nbsp;+ 2b&nbsp;+ c&nbsp;=&nbsp;1.0 to maintain overall brightness.</p>
+</li>
+</ol>
+<p>Boxy 3-tap filter {0, &#8531;, &#8531;, &#8531;, 0} is sharper but is less forgiving of non-ideal gamma curves of a screen (and viewing angles), beveled filters are fuzzier but more tolerant.</p>
+<p>Use the <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilter">FT_Library_SetLcdFilter</a></code> or <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilterweights">FT_Library_SetLcdFilterWeights</a></code> API to specify a low-pass filter, which is then applied to subpixel-rendered bitmaps generated through <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code>.</p>
+<p>Harmony LCD rendering is suitable to panels with any regular subpixel structure, not just monitors with 3 color striped subpixels, as long as the color subpixels have fixed positions relative to the pixel center. In this case, each color channel is then rendered separately after shifting the outline opposite to the subpixel shift so that the coverage maps are aligned. This method is immune to color fringes because the shifts do not change integral coverage.</p>
+<p>The subpixel geometry must be specified by xy-coordinates for each subpixel. By convention they may come in the RGB order: {{-&#8531;, 0}, {0, 0}, {&#8531;, 0}} for standard RGB striped panel or {{-&#8537;, &frac14;}, {-&#8537;, -&frac14;}, {&#8531;, 0}} for a certain PenTile panel.</p>
+<p>Use the <code><a href="ft2-lcd_rendering.html#ft_library_setlcdgeometry">FT_Library_SetLcdGeometry</a></code> API to specify subpixel positions. If one follows the RGB order convention, the same order applies to the resulting <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD</a></code> and <code><a href="ft2-basic_types.html#ft_pixel_mode">FT_PIXEL_MODE_LCD_V</a></code> bitmaps. Note, however, that the coordinate frame for the latter must be rotated clockwise. Harmony with default LCD geometry is equivalent to ClearType with light filter.</p>
+<p>As a result of ClearType filtering or Harmony rendering, the dimensions of LCD bitmaps can be either wider or taller than the dimensions of the corresponding outline with regard to the pixel grid. For example, for <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD</a></code>, the filter adds 2&nbsp;subpixels to the left, and 2&nbsp;subpixels to the right. The bitmap offset values are adjusted accordingly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter.</p>
+<p>The ClearType and Harmony rendering is applicable to glyph bitmaps rendered through <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code>, <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>, <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code>, and <code><a href="ft2-glyph_management.html#ft_glyph_to_bitmap">FT_Glyph_To_Bitmap</a></code>, when <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD</a></code> or <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD_V</a></code> is specified. This API does not control <code><a href="ft2-outline_processing.html#ft_outline_render">FT_Outline_Render</a></code> and <code><a href="ft2-outline_processing.html#ft_outline_get_bitmap">FT_Outline_Get_Bitmap</a></code>.</p>
+<p>The described algorithms can completely remove color artefacts when combined with gamma-corrected alpha blending in linear space. Each of the 3&nbsp;alpha values (subpixels) must by independently used to blend one color channel. That is, red alpha blends the red channel of the text color with the red channel of the background pixel.</p>
+<h2 id="ft_lcdfilter">FT_LcdFilter<a class="headerlink" href="#ft_lcdfilter" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_LcdFilter_
+ {
+ <a href="ft2-lcd_rendering.html#ft_lcd_filter_none">FT_LCD_FILTER_NONE</a> = 0,
+ <a href="ft2-lcd_rendering.html#ft_lcd_filter_default">FT_LCD_FILTER_DEFAULT</a> = 1,
+ <a href="ft2-lcd_rendering.html#ft_lcd_filter_light">FT_LCD_FILTER_LIGHT</a> = 2,
+ <a href="ft2-lcd_rendering.html#ft_lcd_filter_legacy1">FT_LCD_FILTER_LEGACY1</a> = 3,
+ <a href="ft2-lcd_rendering.html#ft_lcd_filter_legacy">FT_LCD_FILTER_LEGACY</a> = 16,
+
+ FT_LCD_FILTER_MAX /* do not remove */
+
+ } <b>FT_LcdFilter</b>;
+</pre>
+</div>
+
+<p>A list of values to identify various types of LCD filters.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_lcd_filter_none">FT_LCD_FILTER_NONE</td><td class="desc">
+<p>Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color fringes.</p>
+</td></tr>
+<tr><td class="val" id="ft_lcd_filter_default">FT_LCD_FILTER_DEFAULT</td><td class="desc">
+<p>This is a beveled, normalized, and color-balanced five-tap filter with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units.</p>
+</td></tr>
+<tr><td class="val" id="ft_lcd_filter_light">FT_LCD_FILTER_LIGHT</td><td class="desc">
+<p>this is a boxy, normalized, and color-balanced three-tap filter with weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units.</p>
+</td></tr>
+<tr><td class="val" id="ft_lcd_filter_legacy">FT_LCD_FILTER_LEGACY</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ft_lcd_filter_legacy1">FT_LCD_FILTER_LEGACY1</td><td class="desc">
+<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. This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the future. The second value is provided for compatibility with FontConfig, which historically used different enumeration, sometimes incorrectly forwarded to FreeType.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.3.0 (<code>FT_LCD_FILTER_LEGACY1</code> since 2.6.2)</p>
+<hr>
+
+<h2 id="ft_library_setlcdfilter">FT_Library_SetLcdFilter<a class="headerlink" href="#ft_library_setlcdfilter" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
+<div class = "codehilite">
+<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_rendering.html#ft_lcdfilter">FT_LcdFilter</a> filter );
+</pre>
+</div>
+
+<p>This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code> with <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD</a></code> or <code><a href="ft2-base_interface.html#ft_render_mode">FT_RENDER_MODE_LCD_V</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the target library instance.</p>
+</td></tr>
+<tr><td class="val" id="filter">filter</td><td class="desc">
+<p>The filter type.</p>
+<p>You can use <code><a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_NONE</a></code> here to disable this feature, or <code><a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_DEFAULT</a></code> to use a default filter that should work well on most LCD screens.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This feature is always disabled by default. Clients must make an explicit call to this function with a <code>filter</code> value other than <code><a href="ft2-lcd_rendering.html#ft_lcdfilter">FT_LCD_FILTER_NONE</a></code> in order to enable it.</p>
+<p>Due to <strong>PATENTS</strong> covering subpixel rendering, this function doesn't do anything except returning <code>FT_Err_Unimplemented_Feature</code> if the configuration macro <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> is not defined in your build of the library, which should correspond to all default builds of FreeType.</p>
+<h4>since</h4>
+
+<p>2.3.0</p>
+<hr>
+
+<h2 id="ft_library_setlcdfilterweights">FT_Library_SetLcdFilterWeights<a class="headerlink" href="#ft_library_setlcdfilterweights" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Library_SetLcdFilterWeights</b>( <a href="ft2-base_interface.html#ft_library">FT_Library</a> library,
+ <span class="keyword">unsigned</span> <span class="keyword">char</span> *weights );
+</pre>
+</div>
+
+<p>This function can be used to enable LCD filter with custom weights, instead of using presets in <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilter">FT_Library_SetLcdFilter</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the target library instance.</p>
+</td></tr>
+<tr><td class="val" id="weights">weights</td><td class="desc">
+<p>A pointer to an array; the function copies the first five bytes and uses them to specify the filter weights in 1/256th units.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Due to <strong>PATENTS</strong> covering subpixel rendering, this function doesn't do anything except returning <code>FT_Err_Unimplemented_Feature</code> if the configuration macro <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> is not defined in your build of the library, which should correspond to all default builds of FreeType.</p>
+<p>LCD filter weights can also be set per face using <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code> with <code><a href="ft2-parameter_tags.html#ft_param_tag_lcd_filter_weights">FT_PARAM_TAG_LCD_FILTER_WEIGHTS</a></code>.</p>
+<h4>since</h4>
+
+<p>2.4.0</p>
+<hr>
+
+<h2 id="ft_lcdfivetapfilter">FT_LcdFiveTapFilter<a class="headerlink" href="#ft_lcdfivetapfilter" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> FT_LCD_FILTER_FIVE_TAPS 5
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> <b>FT_LcdFiveTapFilter</b>[FT_LCD_FILTER_FIVE_TAPS];
+</pre>
+</div>
+
+<p>A typedef for passing the five LCD filter weights to <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code> within an <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> structure.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_library_setlcdgeometry">FT_Library_SetLcdGeometry<a class="headerlink" href="#ft_library_setlcdgeometry" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Library_SetLcdGeometry</b>( <a href="ft2-base_interface.html#ft_library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#ft_vector">FT_Vector</a> sub[3] );
+</pre>
+</div>
+
+<p>This function can be used to modify default positions of color subpixels, which controls Harmony LCD rendering.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the target library instance.</p>
+</td></tr>
+<tr><td class="val" id="sub">sub</td><td class="desc">
+<p>A pointer to an array of 3 vectors in 26.6 fractional pixel format; the function modifies the default values, see the note below.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Subpixel geometry examples:</p>
+<ul>
+<li>
+<p>{{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color stripes shifted by a third of a pixel. This could be an RGB panel.</p>
+</li>
+<li>
+<p>{{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can specify a BGR panel instead, while keeping the bitmap in the same RGB888 format.</p>
+</li>
+<li>
+<p>{{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap stays RGB888 as a result.</p>
+</li>
+<li>
+<p>{{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement.</p>
+</li>
+</ul>
+<p>This function does nothing and returns <code>FT_Err_Unimplemented_Feature</code> in the context of ClearType-style subpixel rendering when <code>FT_CONFIG_OPTION_SUBPIXEL_RENDERING</code> is defined in your build of the library.</p>
+<h4>since</h4>
+
+<p>2.10.0</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Parameter Tags
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Cache Sub-System
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-list_processing.html b/freetype/docs/reference/site/ft2-list_processing.html
new file mode 100644
index 00000000..5262bdb2
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-list_processing.html
@@ -0,0 +1,1660 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>List Processing - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#list-processing" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ List Processing
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ List Processing
+ </label>
+
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link md-nav__link--active">
+ List Processing
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list" title="FT_List" class="md-nav__link">
+ FT_List
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listnode" title="FT_ListNode" class="md-nav__link">
+ FT_ListNode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listrec" title="FT_ListRec" class="md-nav__link">
+ FT_ListRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listnoderec" title="FT_ListNodeRec" class="md-nav__link">
+ FT_ListNodeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_add" title="FT_List_Add" class="md-nav__link">
+ FT_List_Add
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_insert" title="FT_List_Insert" class="md-nav__link">
+ FT_List_Insert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_find" title="FT_List_Find" class="md-nav__link">
+ FT_List_Find
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_remove" title="FT_List_Remove" class="md-nav__link">
+ FT_List_Remove
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_up" title="FT_List_Up" class="md-nav__link">
+ FT_List_Up
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_iterate" title="FT_List_Iterate" class="md-nav__link">
+ FT_List_Iterate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_iterator" title="FT_List_Iterator" class="md-nav__link">
+ FT_List_Iterator
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_finalize" title="FT_List_Finalize" class="md-nav__link">
+ FT_List_Finalize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_destructor" title="FT_List_Destructor" class="md-nav__link">
+ FT_List_Destructor
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list" title="FT_List" class="md-nav__link">
+ FT_List
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listnode" title="FT_ListNode" class="md-nav__link">
+ FT_ListNode
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listrec" title="FT_ListRec" class="md-nav__link">
+ FT_ListRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_listnoderec" title="FT_ListNodeRec" class="md-nav__link">
+ FT_ListNodeRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_add" title="FT_List_Add" class="md-nav__link">
+ FT_List_Add
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_insert" title="FT_List_Insert" class="md-nav__link">
+ FT_List_Insert
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_find" title="FT_List_Find" class="md-nav__link">
+ FT_List_Find
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_remove" title="FT_List_Remove" class="md-nav__link">
+ FT_List_Remove
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_up" title="FT_List_Up" class="md-nav__link">
+ FT_List_Up
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_iterate" title="FT_List_Iterate" class="md-nav__link">
+ FT_List_Iterate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_iterator" title="FT_List_Iterator" class="md-nav__link">
+ FT_List_Iterator
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_finalize" title="FT_List_Finalize" class="md-nav__link">
+ FT_List_Finalize
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_list_destructor" title="FT_List_Destructor" class="md-nav__link">
+ FT_List_Destructor
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; List Processing</p>
+<hr />
+<h1 id="list-processing">List Processing<a class="headerlink" href="#list-processing" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains various definitions related to list processing using doubly-linked nodes.</p>
+<h2 id="ft_list">FT_List<a class="headerlink" href="#ft_list" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_* <b>FT_List</b>;
+</pre>
+</div>
+
+<p>A handle to a list record (see <code><a href="ft2-list_processing.html#ft_listrec">FT_ListRec</a></code>).</p>
+<hr>
+
+<h2 id="ft_listnode">FT_ListNode<a class="headerlink" href="#ft_listnode" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_* <b>FT_ListNode</b>;
+</pre>
+</div>
+
+<p>Many elements and objects in FreeType are listed through an <code><a href="ft2-list_processing.html#ft_list">FT_List</a></code> record (see <code><a href="ft2-list_processing.html#ft_listrec">FT_ListRec</a></code>). As its name suggests, an FT_ListNode is a handle to a single list element.</p>
+<hr>
+
+<h2 id="ft_listrec">FT_ListRec<a class="headerlink" href="#ft_listrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="head">head</td><td class="desc">
+<p>The head (first element) of doubly-linked list.</p>
+</td></tr>
+<tr><td class="val" id="tail">tail</td><td class="desc">
+<p>The tail (last element) of doubly-linked list.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_listnoderec">FT_ListNodeRec<a class="headerlink" href="#ft_listnoderec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPES_H (freetype/fttypes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to hold a single list element.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="prev">prev</td><td class="desc">
+<p>The previous element in the list. <code>NULL</code> if first.</p>
+</td></tr>
+<tr><td class="val" id="next">next</td><td class="desc">
+<p>The next element in the list. <code>NULL</code> if last.</p>
+</td></tr>
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>A typeless pointer to the listed object.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_add">FT_List_Add<a class="headerlink" href="#ft_list_add" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Append an element to the end of a list.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The node to append.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_insert">FT_List_Insert<a class="headerlink" href="#ft_list_insert" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Insert an element at the head of a list.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A pointer to parent list.</p>
+</td></tr>
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The node to insert.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_find">FT_List_Find<a class="headerlink" href="#ft_list_find" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Find the list node for a given listed object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>The address of the listed object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>List node. <code>NULL</code> if it wasn't found.</p>
+<hr>
+
+<h2 id="ft_list_remove">FT_List_Remove<a class="headerlink" href="#ft_list_remove" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Remove a node from a list. This function doesn't check whether the node is in the list!</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The node to remove.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A pointer to the parent list.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_up">FT_List_Up<a class="headerlink" href="#ft_list_up" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Move a node to the head/top of a list. Used to maintain LRU lists.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The node to move.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_iterate">FT_List_Iterate<a class="headerlink" href="#ft_list_iterate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A handle to the list.</p>
+</td></tr>
+<tr><td class="val" id="iterator">iterator</td><td class="desc">
+<p>An iterator function, called on each node of the list.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A user-supplied field that is passed as the second argument to the iterator.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The result (a FreeType error code) of the last iterator call.</p>
+<hr>
+
+<h2 id="ft_list_iterator">FT_List_Iterator<a class="headerlink" href="#ft_list_iterator" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>An FT_List iterator function that is called during a list parse by <code><a href="ft2-list_processing.html#ft_list_iterate">FT_List_Iterate</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="node">node</td><td class="desc">
+<p>The current iteration list node.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer passed to <code><a href="ft2-list_processing.html#ft_list_iterate">FT_List_Iterate</a></code>. Can be used to point to the iteration's state.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_list_finalize">FT_List_Finalize<a class="headerlink" href="#ft_list_finalize" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Destroy all elements in the list as well as the list itself.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="list">list</td><td class="desc">
+<p>A handle to the list.</p>
+</td></tr>
+<tr><td class="val" id="destroy">destroy</td><td class="desc">
+<p>A list destructor that will be applied to each element of the list. Set this to <code>NULL</code> if not needed.</p>
+</td></tr>
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>The current memory object that handles deallocation.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A user-supplied field that is passed as the last argument to the destructor.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function expects that all nodes added by <code><a href="ft2-list_processing.html#ft_list_add">FT_List_Add</a></code> or <code><a href="ft2-list_processing.html#ft_list_insert">FT_List_Insert</a></code> have been dynamically allocated.</p>
+<hr>
+
+<h2 id="ft_list_destructor">FT_List_Destructor<a class="headerlink" href="#ft_list_destructor" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LIST_H (freetype/ftlist.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>An <code><a href="ft2-list_processing.html#ft_list">FT_List</a></code> iterator function that is called during a list finalization by <code><a href="ft2-list_processing.html#ft_list_finalize">FT_List_Finalize</a></code> to destroy all elements in a given list.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="system">system</td><td class="desc">
+<p>The current system object.</p>
+</td></tr>
+<tr><td class="val" id="data">data</td><td class="desc">
+<p>The current object to destroy.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer passed to <code><a href="ft2-list_processing.html#ft_list_iterate">FT_List_Iterate</a></code>. It can be used to point to the iteration's state.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-computations.html" title="Computations" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Computations
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Outline Processing
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-lzw.html b/freetype/docs/reference/site/ft2-lzw.html
new file mode 100644
index 00000000..0bce31c0
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-lzw.html
@@ -0,0 +1,1200 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>LZW Streams - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#lzw-streams" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ LZW Streams
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ LZW Streams
+ </label>
+
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link md-nav__link--active">
+ LZW Streams
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_openlzw" title="FT_Stream_OpenLZW" class="md-nav__link">
+ FT_Stream_OpenLZW
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_openlzw" title="FT_Stream_OpenLZW" class="md-nav__link">
+ FT_Stream_OpenLZW
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; LZW Streams</p>
+<hr />
+<h1 id="lzw-streams">LZW Streams<a class="headerlink" href="#lzw-streams" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of LZW-specific functions.</p>
+<h2 id="ft_stream_openlzw">FT_Stream_OpenLZW<a class="headerlink" href="#ft_stream_openlzw" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_LZW_H (freetype/ftlzw.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Open a new stream to parse LZW-compressed font files. This is mainly used to support the compressed <code>*.pcf.Z</code> fonts that come with XFree86.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>The target embedding stream.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>The source stream.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The source stream must be opened <em>before</em> calling this function.</p>
+<p>Calling the internal function <code>FT_Stream_Close</code> on the new stream will <strong>not</strong> call <code>FT_Stream_Close</code> 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 <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> or <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>. 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 <code>FT_Err_Unimplemented_Feature</code> if your build of FreeType was not compiled with LZW support.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ GZIP Streams
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ BZIP2 Streams
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-mac_specific.html b/freetype/docs/reference/site/ft2-mac_specific.html
new file mode 100644
index 00000000..86f25b35
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-mac_specific.html
@@ -0,0 +1,1501 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Mac Specific Interface - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#mac-specific-interface" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Mac Specific Interface
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Mac Specific Interface
+ </label>
+
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link md-nav__link--active">
+ Mac Specific Interface
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fond" title="FT_New_Face_From_FOND" class="md-nav__link">
+ FT_New_Face_From_FOND
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfile_from_mac_name" title="FT_GetFile_From_Mac_Name" class="md-nav__link">
+ FT_GetFile_From_Mac_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfile_from_mac_ats_name" title="FT_GetFile_From_Mac_ATS_Name" class="md-nav__link">
+ FT_GetFile_From_Mac_ATS_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfilepath_from_mac_ats_name" title="FT_GetFilePath_From_Mac_ATS_Name" class="md-nav__link">
+ FT_GetFilePath_From_Mac_ATS_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fsspec" title="FT_New_Face_From_FSSpec" class="md-nav__link">
+ FT_New_Face_From_FSSpec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fsref" title="FT_New_Face_From_FSRef" class="md-nav__link">
+ FT_New_Face_From_FSRef
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fond" title="FT_New_Face_From_FOND" class="md-nav__link">
+ FT_New_Face_From_FOND
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfile_from_mac_name" title="FT_GetFile_From_Mac_Name" class="md-nav__link">
+ FT_GetFile_From_Mac_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfile_from_mac_ats_name" title="FT_GetFile_From_Mac_ATS_Name" class="md-nav__link">
+ FT_GetFile_From_Mac_ATS_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_getfilepath_from_mac_ats_name" title="FT_GetFilePath_From_Mac_ATS_Name" class="md-nav__link">
+ FT_GetFilePath_From_Mac_ATS_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fsspec" title="FT_New_Face_From_FSSpec" class="md-nav__link">
+ FT_New_Face_From_FSSpec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_face_from_fsref" title="FT_New_Face_From_FSRef" class="md-nav__link">
+ FT_New_Face_From_FSRef
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Mac Specific Interface</p>
+<hr />
+<h1 id="mac-specific-interface">Mac Specific Interface<a class="headerlink" href="#mac-specific-interface" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The following definitions are only available if FreeType is compiled on a Macintosh.</p>
+<h2 id="ft_new_face_from_fond">FT_New_Face_From_FOND<a class="headerlink" href="#ft_new_face_from_fond" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new face object from a FOND resource.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="fond">fond</td><td class="desc">
+<p>A FOND resource.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>Only supported for the -1 &lsquo;sanity check&rsquo; special case.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>example</h4>
+
+<p>This function can be used to create <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> objects from fonts that are installed in the system as follows.
+<div class="codehilite"><pre><span></span> fond = GetResource( &#39;FOND&#39;, fontName );
+ error = FT_New_Face_From_FOND( library, fond, 0, &amp;face );
+</pre></div></p>
+<hr>
+
+<h2 id="ft_getfile_from_mac_name">FT_GetFile_From_Mac_Name<a class="headerlink" href="#ft_getfile_from_mac_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return an FSSpec for the disk file containing the named font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="fontname">fontName</td><td class="desc">
+<p>Mac OS name of the font (e.g., Times New Roman Bold).</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="pathspec">pathSpec</td><td class="desc">
+<p>FSSpec to the file. For passing to <code><a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>Index of the face. For passing to <code><a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_getfile_from_mac_ats_name">FT_GetFile_From_Mac_ATS_Name<a class="headerlink" href="#ft_getfile_from_mac_ats_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return an FSSpec for the disk file containing the named font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="fontname">fontName</td><td class="desc">
+<p>Mac OS name of the font in ATS framework.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="pathspec">pathSpec</td><td class="desc">
+<p>FSSpec to the file. For passing to <code><a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>Index of the face. For passing to <code><a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_getfilepath_from_mac_ats_name">FT_GetFilePath_From_Mac_ATS_Name<a class="headerlink" href="#ft_getfilepath_from_mac_ats_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a pathname of the disk file and face index for given font name that is handled by ATS framework.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="fontname">fontName</td><td class="desc">
+<p>Mac OS name of the font in ATS framework.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="path">path</td><td class="desc">
+<p>Buffer to store pathname of the file. For passing to <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code>. The client must allocate this buffer before calling this function.</p>
+</td></tr>
+<tr><td class="val" id="maxpathsize">maxPathSize</td><td class="desc">
+<p>Lengths of the buffer <code>path</code> that client allocated.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>Index of the face. For passing to <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_new_face_from_fsspec">FT_New_Face_From_FSSpec<a class="headerlink" href="#ft_new_face_from_fsspec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new face object from a given resource and typeface index using an FSSpec to the font file.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="spec">spec</td><td class="desc">
+<p>FSSpec to the font file.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p><code><a href="ft2-mac_specific.html#ft_new_face_from_fsspec">FT_New_Face_From_FSSpec</a></code> is identical to <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> except it accepts an FSSpec instead of a path.</p>
+<hr>
+
+<h2 id="ft_new_face_from_fsref">FT_New_Face_From_FSRef<a class="headerlink" href="#ft_new_face_from_fsref" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MAC_H (freetype/ftmac.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new face object from a given resource and typeface index using an FSRef to the font file.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="spec">spec</td><td class="desc">
+<p>FSRef to the font file.</p>
+</td></tr>
+<tr><td class="val" id="face_index">face_index</td><td class="desc">
+<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aface">aface</td><td class="desc">
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p><code><a href="ft2-mac_specific.html#ft_new_face_from_fsref">FT_New_Face_From_FSRef</a></code> is identical to <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code> except it accepts an FSRef instead of a path.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Glyph Management
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Size Management
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-module_management.html b/freetype/docs/reference/site/ft2-module_management.html
new file mode 100644
index 00000000..a16364b9
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-module_management.html
@@ -0,0 +1,2225 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Module Management - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#module-management" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Module Management
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Module Management
+ </label>
+
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link md-nav__link--active">
+ Module Management
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module" title="FT_Module" class="md-nav__link">
+ FT_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_constructor" title="FT_Module_Constructor" class="md-nav__link">
+ FT_Module_Constructor
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_destructor" title="FT_Module_Destructor" class="md-nav__link">
+ FT_Module_Destructor
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_requester" title="FT_Module_Requester" class="md-nav__link">
+ FT_Module_Requester
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_class" title="FT_Module_Class" class="md-nav__link">
+ FT_Module_Class
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_add_module" title="FT_Add_Module" class="md-nav__link">
+ FT_Add_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_module" title="FT_Get_Module" class="md-nav__link">
+ FT_Get_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_remove_module" title="FT_Remove_Module" class="md-nav__link">
+ FT_Remove_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_add_default_modules" title="FT_Add_Default_Modules" class="md-nav__link">
+ FT_Add_Default_Modules
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_property_set" title="FT_Property_Set" class="md-nav__link">
+ FT_Property_Set
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_property_get" title="FT_Property_Get" class="md-nav__link">
+ FT_Property_Get
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_default_properties" title="FT_Set_Default_Properties" class="md-nav__link">
+ FT_Set_Default_Properties
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_library" title="FT_New_Library" class="md-nav__link">
+ FT_New_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_library" title="FT_Done_Library" class="md-nav__link">
+ FT_Done_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_reference_library" title="FT_Reference_Library" class="md-nav__link">
+ FT_Reference_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_renderer" title="FT_Renderer" class="md-nav__link">
+ FT_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_renderer_class" title="FT_Renderer_Class" class="md-nav__link">
+ FT_Renderer_Class
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_renderer" title="FT_Get_Renderer" class="md-nav__link">
+ FT_Get_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_renderer" title="FT_Set_Renderer" class="md-nav__link">
+ FT_Set_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_debug_hook" title="FT_Set_Debug_Hook" class="md-nav__link">
+ FT_Set_Debug_Hook
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_driver" title="FT_Driver" class="md-nav__link">
+ FT_Driver
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_debughook_func" title="FT_DebugHook_Func" class="md-nav__link">
+ FT_DebugHook_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_debug_hook_xxx" title="FT_DEBUG_HOOK_XXX" class="md-nav__link">
+ FT_DEBUG_HOOK_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module" title="FT_Module" class="md-nav__link">
+ FT_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_constructor" title="FT_Module_Constructor" class="md-nav__link">
+ FT_Module_Constructor
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_destructor" title="FT_Module_Destructor" class="md-nav__link">
+ FT_Module_Destructor
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_requester" title="FT_Module_Requester" class="md-nav__link">
+ FT_Module_Requester
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_module_class" title="FT_Module_Class" class="md-nav__link">
+ FT_Module_Class
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_add_module" title="FT_Add_Module" class="md-nav__link">
+ FT_Add_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_module" title="FT_Get_Module" class="md-nav__link">
+ FT_Get_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_remove_module" title="FT_Remove_Module" class="md-nav__link">
+ FT_Remove_Module
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_add_default_modules" title="FT_Add_Default_Modules" class="md-nav__link">
+ FT_Add_Default_Modules
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_property_set" title="FT_Property_Set" class="md-nav__link">
+ FT_Property_Set
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_property_get" title="FT_Property_Get" class="md-nav__link">
+ FT_Property_Get
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_default_properties" title="FT_Set_Default_Properties" class="md-nav__link">
+ FT_Set_Default_Properties
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_library" title="FT_New_Library" class="md-nav__link">
+ FT_New_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_library" title="FT_Done_Library" class="md-nav__link">
+ FT_Done_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_reference_library" title="FT_Reference_Library" class="md-nav__link">
+ FT_Reference_Library
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_renderer" title="FT_Renderer" class="md-nav__link">
+ FT_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_renderer_class" title="FT_Renderer_Class" class="md-nav__link">
+ FT_Renderer_Class
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_renderer" title="FT_Get_Renderer" class="md-nav__link">
+ FT_Get_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_renderer" title="FT_Set_Renderer" class="md-nav__link">
+ FT_Set_Renderer
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_debug_hook" title="FT_Set_Debug_Hook" class="md-nav__link">
+ FT_Set_Debug_Hook
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_driver" title="FT_Driver" class="md-nav__link">
+ FT_Driver
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_debughook_func" title="FT_DebugHook_Func" class="md-nav__link">
+ FT_DebugHook_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_debug_hook_xxx" title="FT_DEBUG_HOOK_XXX" class="md-nav__link">
+ FT_DEBUG_HOOK_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Module Management</p>
+<hr />
+<h1 id="module-management">Module Management<a class="headerlink" href="#module-management" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime. Additionally, some module properties can be controlled also.</p>
+<p>Here is a list of possible values of the <code>module_name</code> field in the <code><a href="ft2-module_management.html#ft_module_class">FT_Module_Class</a></code> structure.
+<div class="codehilite"><pre><span></span> autofitter
+ bdf
+ cff
+ gxvalid
+ otvalid
+ pcf
+ pfr
+ psaux
+ pshinter
+ psnames
+ raster1
+ sfnt
+ smooth, smooth-lcd, smooth-lcdv
+ truetype
+ type1
+ type42
+ t1cid
+ winfonts
+</pre></div></p>
+<p>Note that the FreeType Cache sub-system is not a FreeType module.</p>
+<h2 id="ft_module">FT_Module<a class="headerlink" href="#ft_module" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ModuleRec_* <b>FT_Module</b>;
+</pre>
+</div>
+
+<p>A handle to a given FreeType module object. A module can be a font driver, a renderer, or anything else that provides services to the former.</p>
+<hr>
+
+<h2 id="ft_module_constructor">FT_Module_Constructor<a class="headerlink" href="#ft_module_constructor" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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-module_management.html#ft_module">FT_Module</a> module );
+</pre>
+</div>
+
+<p>A function used to initialize (not create) a new module object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="module">module</td><td class="desc">
+<p>The module to initialize.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_module_destructor">FT_Module_Destructor<a class="headerlink" href="#ft_module_destructor" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Module_Destructor</b>)( <a href="ft2-module_management.html#ft_module">FT_Module</a> module );
+</pre>
+</div>
+
+<p>A function used to finalize (not destroy) a given module object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="module">module</td><td class="desc">
+<p>The module to finalize.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_module_requester">FT_Module_Requester<a class="headerlink" href="#ft_module_requester" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> FT_Module_Interface
+ (*<b>FT_Module_Requester</b>)( <a href="ft2-module_management.html#ft_module">FT_Module</a> module,
+ <span class="keyword">const</span> <span class="keyword">char</span>* name );
+</pre>
+</div>
+
+<p>A function used to query a given module for a specific interface.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="module">module</td><td class="desc">
+<p>The module to be searched.</p>
+</td></tr>
+<tr><td class="val" id="name">name</td><td class="desc">
+<p>The name of the interface in the module.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_module_class">FT_Module_Class<a class="headerlink" href="#ft_module_class" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The module class descriptor. While being a public structure necessary for FreeType's module bookkeeping, most of the fields are essentially internal, not to be used directly by an application.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="module_flags">module_flags</td><td class="desc">
+<p>Bit flags describing the module.</p>
+</td></tr>
+<tr><td class="val" id="module_size">module_size</td><td class="desc">
+<p>The size of one module object/instance in bytes.</p>
+</td></tr>
+<tr><td class="val" id="module_name">module_name</td><td class="desc">
+<p>The name of the module.</p>
+</td></tr>
+<tr><td class="val" id="module_version">module_version</td><td class="desc">
+<p>The version, as a 16.16 fixed number (major.minor).</p>
+</td></tr>
+<tr><td class="val" id="module_requires">module_requires</td><td class="desc">
+<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><td class="val" id="module_interface">module_interface</td><td class="desc">
+<p>A typeless pointer to a structure (which varies between different modules) that holds the module's interface functions. This is essentially what <code>get_interface</code> returns.</p>
+</td></tr>
+<tr><td class="val" id="module_init">module_init</td><td class="desc">
+<p>The initializing function.</p>
+</td></tr>
+<tr><td class="val" id="module_done">module_done</td><td class="desc">
+<p>The finalizing function.</p>
+</td></tr>
+<tr><td class="val" id="get_interface">get_interface</td><td class="desc">
+<p>The interface requesting function.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_add_module">FT_Add_Module<a class="headerlink" href="#ft_add_module" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Add a new module to a given library instance.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="clazz">clazz</td><td class="desc">
+<p>A pointer to class descriptor for the module.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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>
+<hr>
+
+<h2 id="ft_get_module">FT_Get_Module<a class="headerlink" href="#ft_get_module" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-module_management.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>
+</div>
+
+<p>Find a module by its name.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object.</p>
+</td></tr>
+<tr><td class="val" id="module_name">module_name</td><td class="desc">
+<p>The module's name (as an ASCII string).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A module handle. 0&nbsp;if none was found.</p>
+<h4>note</h4>
+
+<p>FreeType's internal modules aren't documented very well, and you should look up the source code for details.</p>
+<hr>
+
+<h2 id="ft_remove_module">FT_Remove_Module<a class="headerlink" href="#ft_remove_module" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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-module_management.html#ft_module">FT_Module</a> module );
+</pre>
+</div>
+
+<p>Remove a given module from a library instance.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a library object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="module">module</td><td class="desc">
+<p>A handle to a module object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The module object is destroyed by the function in case of success.</p>
+<hr>
+
+<h2 id="ft_add_default_modules">FT_Add_Default_Modules<a class="headerlink" href="#ft_add_default_modules" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Add the set of default drivers to a given library object. This is only useful when you create a library object with <code><a href="ft2-module_management.html#ft_new_library">FT_New_Library</a></code> (usually to plug a custom memory manager).</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a new library object.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_property_set">FT_Property_Set<a class="headerlink" href="#ft_property_set" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Property_Set</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_string">FT_String</a>* module_name,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_string">FT_String</a>* property_name,
+ <span class="keyword">const</span> <span class="keyword">void</span>* value );
+</pre>
+</div>
+
+<p>Set a property for a given module.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library the module is part of.</p>
+</td></tr>
+<tr><td class="val" id="module_name">module_name</td><td class="desc">
+<p>The module name.</p>
+</td></tr>
+<tr><td class="val" id="property_name">property_name</td><td class="desc">
+<p>The property name. Properties are described in section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
+<p>Note that only a few modules have properties.</p>
+</td></tr>
+<tr><td class="val" id="value">value</td><td class="desc">
+<p>A generic pointer to a variable or structure that gives the new value of the property. The exact definition of <code>value</code> is dependent on the property; see section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If <code>module_name</code> isn't a valid module name, or <code>property_name</code> doesn't specify a valid property, or if <code>value</code> doesn't represent a valid value for the given property, an error is returned.</p>
+<p>The following example sets property &lsquo;bar&rsquo; (a simple integer) in module &lsquo;foo&rsquo; to value&nbsp;1.
+<div class="codehilite"><pre><span></span> FT_UInt bar;
+
+
+ bar = 1;
+ FT_Property_Set( library, &quot;foo&quot;, &quot;bar&quot;, &amp;bar );
+</pre></div></p>
+<p>Note that the FreeType Cache sub-system doesn't recognize module property changes. To avoid glyph lookup confusion within the cache you should call <code><a href="ft2-cache_subsystem.html#ftc_manager_reset">FTC_Manager_Reset</a></code> to completely flush the cache if a module property gets changed after <code><a href="ft2-cache_subsystem.html#ftc_manager_new">FTC_Manager_New</a></code> has been called.</p>
+<p>It is not possible to set properties of the FreeType Cache sub-system itself with FT_Property_Set; use ?FTC_Property_Set? instead.</p>
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="ft_property_get">FT_Property_Get<a class="headerlink" href="#ft_property_get" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Property_Get</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_string">FT_String</a>* module_name,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#ft_string">FT_String</a>* property_name,
+ <span class="keyword">void</span>* value );
+</pre>
+</div>
+
+<p>Get a module's property value.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library the module is part of.</p>
+</td></tr>
+<tr><td class="val" id="module_name">module_name</td><td class="desc">
+<p>The module name.</p>
+</td></tr>
+<tr><td class="val" id="property_name">property_name</td><td class="desc">
+<p>The property name. Properties are described in section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="value">value</td><td class="desc">
+<p>A generic pointer to a variable or structure that gives the value of the property. The exact definition of <code>value</code> is dependent on the property; see section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo;.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If <code>module_name</code> isn't a valid module name, or <code>property_name</code> doesn't specify a valid property, or if <code>value</code> doesn't represent a valid value for the given property, an error is returned.</p>
+<p>The following example gets property &lsquo;baz&rsquo; (a range) in module &lsquo;foo&rsquo;.
+<div class="codehilite"><pre><span></span> typedef range_
+ {
+ FT_Int32 min;
+ FT_Int32 max;
+
+ } range;
+
+ range baz;
+
+
+ FT_Property_Get( library, &quot;foo&quot;, &quot;baz&quot;, &amp;baz );
+</pre></div></p>
+<p>It is not possible to retrieve properties of the FreeType Cache sub-system with FT_Property_Get; use ?FTC_Property_Get? instead.</p>
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="ft_set_default_properties">FT_Set_Default_Properties<a class="headerlink" href="#ft_set_default_properties" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Set_Default_Properties</b>( <a href="ft2-base_interface.html#ft_library">FT_Library</a> library );
+</pre>
+</div>
+
+<p>If compilation option <code>FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES</code> is set, this function reads the <code>FREETYPE_PROPERTIES</code> environment variable to control driver properties. See section &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; for more.</p>
+<p>If the compilation option is not set, this function does nothing.</p>
+<p><code>FREETYPE_PROPERTIES</code> has the following syntax form (broken here into multiple lines for better readability).
+<div class="codehilite"><pre><span></span> &lt;optional whitespace&gt;
+ &lt;module-name1&gt; &#39;:&#39;
+ &lt;property-name1&gt; &#39;=&#39; &lt;property-value1&gt;
+ &lt;whitespace&gt;
+ &lt;module-name2&gt; &#39;:&#39;
+ &lt;property-name2&gt; &#39;=&#39; &lt;property-value2&gt;
+ ...
+</pre></div></p>
+<p>Example:
+<div class="codehilite"><pre><span></span> FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ cff:no-stem-darkening=1 \
+ autofitter:warping=1
+</pre></div></p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a new library object.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_new_library">FT_New_Library<a class="headerlink" href="#ft_new_library" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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. Note, however, that the used <code><a href="ft2-system_interface.html#ft_memory">FT_Memory</a></code> structure is expected to remain valid for the life of the <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> object.</p>
+<p>Normally, you would call this function (followed by a call to <code><a href="ft2-module_management.html#ft_add_default_modules">FT_Add_Default_Modules</a></code> or a series of calls to <code><a href="ft2-module_management.html#ft_add_module">FT_Add_Module</a></code>, and a call to <code><a href="ft2-module_management.html#ft_set_default_properties">FT_Set_Default_Properties</a></code>) instead of <code><a href="ft2-base_interface.html#ft_init_freetype">FT_Init_FreeType</a></code> to initialize the FreeType library.</p>
+<p>Don't use <code><a href="ft2-base_interface.html#ft_done_freetype">FT_Done_FreeType</a></code> but <code><a href="ft2-module_management.html#ft_done_library">FT_Done_Library</a></code> to destroy a library instance.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A handle to the original memory object.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="alibrary">alibrary</td><td class="desc">
+<p>A pointer to handle of a new library object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>See the discussion of reference counters in the description of <code><a href="ft2-module_management.html#ft_reference_library">FT_Reference_Library</a></code>.</p>
+<hr>
+
+<h2 id="ft_done_library">FT_Done_Library<a class="headerlink" href="#ft_done_library" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Discard a given library object. This closes all drivers and discards all resource objects.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the target library.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>See the discussion of reference counters in the description of <code><a href="ft2-module_management.html#ft_reference_library">FT_Reference_Library</a></code>.</p>
+<hr>
+
+<h2 id="ft_reference_library">FT_Reference_Library<a class="headerlink" href="#ft_reference_library" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Reference_Library</b>( <a href="ft2-base_interface.html#ft_library">FT_Library</a> library );
+</pre>
+</div>
+
+<p>A counter gets initialized to&nbsp;1 at the time an <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> structure is created. This function increments the counter. <code><a href="ft2-module_management.html#ft_done_library">FT_Done_Library</a></code> then only destroys a library if the counter is&nbsp;1, otherwise it simply decrements the counter.</p>
+<p>This function helps in managing life-cycles of structures that reference <code><a href="ft2-base_interface.html#ft_library">FT_Library</a></code> objects.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a target library object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.4.2</p>
+<hr>
+
+<h2 id="ft_renderer">FT_Renderer<a class="headerlink" href="#ft_renderer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RendererRec_* <b>FT_Renderer</b>;
+</pre>
+</div>
+
+<p>A handle to a given FreeType renderer. A renderer is a module in charge of converting a glyph's outline image to a bitmap. It supports a single glyph image format, and one or more target surface depths.</p>
+<hr>
+
+<h2 id="ft_renderer_class">FT_Renderer_Class<a class="headerlink" href="#ft_renderer_class" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The renderer module class descriptor.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="root">root</td><td class="desc">
+<p>The root <code><a href="ft2-module_management.html#ft_module_class">FT_Module_Class</a></code> fields.</p>
+</td></tr>
+<tr><td class="val" id="glyph_format">glyph_format</td><td class="desc">
+<p>The glyph image format this renderer handles.</p>
+</td></tr>
+<tr><td class="val" id="render_glyph">render_glyph</td><td class="desc">
+<p>A method used to render the image that is in a given glyph slot into a bitmap.</p>
+</td></tr>
+<tr><td class="val" id="transform_glyph">transform_glyph</td><td class="desc">
+<p>A method used to transform the image that is in a given glyph slot.</p>
+</td></tr>
+<tr><td class="val" id="get_glyph_cbox">get_glyph_cbox</td><td class="desc">
+<p>A method used to access the glyph's cbox.</p>
+</td></tr>
+<tr><td class="val" id="set_mode">set_mode</td><td class="desc">
+<p>A method used to pass additional parameters.</p>
+</td></tr>
+<tr><td class="val" id="raster_class">raster_class</td><td class="desc">
+<p>For <code><a href="ft2-basic_types.html#ft_glyph_format">FT_GLYPH_FORMAT_OUTLINE</a></code> renderers only. This is a pointer to its raster's class.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_get_renderer">FT_Get_Renderer<a class="headerlink" href="#ft_get_renderer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-module_management.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>
+</div>
+
+<p>Retrieve the current renderer for a given glyph format.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object.</p>
+</td></tr>
+<tr><td class="val" id="format">format</td><td class="desc">
+<p>The glyph format.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A renderer handle. 0&nbsp;if none found.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-module_management.html#ft_add_module">FT_Add_Module</a></code>. To retrieve a renderer by its name, use <code><a href="ft2-module_management.html#ft_get_module">FT_Get_Module</a></code>.</p>
+<hr>
+
+<h2 id="ft_set_renderer">FT_Set_Renderer<a class="headerlink" href="#ft_set_renderer" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_RENDER_H (freetype/ftrender.h).</p>
+<div class = "codehilite">
+<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-module_management.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>
+</div>
+
+<p>Set the current renderer to use, and set additional mode.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="renderer">renderer</td><td class="desc">
+<p>A handle to the renderer object.</p>
+</td></tr>
+<tr><td class="val" id="num_params">num_params</td><td class="desc">
+<p>The number of additional parameters.</p>
+</td></tr>
+<tr><td class="val" id="parameters">parameters</td><td class="desc">
+<p>Additional parameters.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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>
+<p>Currently, no FreeType renderer module uses <code>parameters</code>; you should thus always pass <code>NULL</code> as the value.</p>
+<hr>
+
+<h2 id="ft_set_debug_hook">FT_Set_Debug_Hook<a class="headerlink" href="#ft_set_debug_hook" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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,
+ <a href="ft2-module_management.html#ft_debughook_func">FT_DebugHook_Func</a> debug_hook );
+</pre>
+</div>
+
+<p>Set a debug hook function for debugging the interpreter of a font format.</p>
+<p>While this is a public API function, an application needs access to FreeType's internal header files to do something useful.</p>
+<p>Have a look at the source code of the <code>ttdebug</code> FreeType demo program for an example of its usage.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="hook_index">hook_index</td><td class="desc">
+<p>The index of the debug hook. You should use defined enumeration macros like <code><a href="ft2-module_management.html#ft_debug_hook_xxx">FT_DEBUG_HOOK_TRUETYPE</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="debug_hook">debug_hook</td><td class="desc">
+<p>The function used to debug the interpreter.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Currently, four debug hook slots are available, but only one (for the TrueType interpreter) is defined.</p>
+<hr>
+
+<h2 id="ft_driver">FT_Driver<a class="headerlink" href="#ft_driver" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_DriverRec_* <b>FT_Driver</b>;
+</pre>
+</div>
+
+<p>A handle to a given FreeType font driver object. A font driver is a module capable of creating faces from font files.</p>
+<hr>
+
+<h2 id="ft_debughook_func">FT_DebugHook_Func<a class="headerlink" href="#ft_debughook_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#ft_error">FT_Error</a>
+ (*<b>FT_DebugHook_Func</b>)( <span class="keyword">void</span>* arg );
+</pre>
+</div>
+
+<p>A drop-in replacement (or rather a wrapper) for the bytecode or charstring interpreter's main loop function.</p>
+<p>Its job is essentially</p>
+<ul>
+<li>
+<p>to activate debug mode to enforce single-stepping,</p>
+</li>
+<li>
+<p>to call the main loop function to interpret the next opcode, and</p>
+</li>
+<li>
+<p>to show the changed context to the user.</p>
+</li>
+</ul>
+<p>An example for such a main loop function is <code>TT_RunIns</code> (declared in FreeType's internal header file <code>src/truetype/ttinterp.h</code>).</p>
+<p>Have a look at the source code of the <code>ttdebug</code> FreeType demo program for an example of a drop-in replacement.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="arg">arg</td><td class="desc">
+<p>A typeless pointer, to be cast to the main loop function's data structure (which depends on the font module). For TrueType fonts it is bytecode interpreter's execution context, <code>TT_ExecContext</code>, which is declared in FreeType's internal header file <code>tttypes.h</code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_debug_hook_xxx">FT_DEBUG_HOOK_XXX<a class="headerlink" href="#ft_debug_hook_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-module_management.html#ft_debug_hook_truetype">FT_DEBUG_HOOK_TRUETYPE</a> 0
+</pre>
+</div>
+
+<p>A list of named debug hook indices.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_debug_hook_truetype">FT_DEBUG_HOOK_TRUETYPE</td><td class="desc">
+<p>This hook index identifies the TrueType bytecode debugger.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-system_interface.html" title="System Interface" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ System Interface
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ GZIP Streams
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-multiple_masters.html b/freetype/docs/reference/site/ft2-multiple_masters.html
new file mode 100644
index 00000000..f02e0c9d
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-multiple_masters.html
@@ -0,0 +1,2126 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Multiple Masters - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#multiple-masters" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Multiple Masters
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Multiple Masters
+ </label>
+
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link md-nav__link--active">
+ Multiple Masters
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mm_axis" title="FT_MM_Axis" class="md-nav__link">
+ FT_MM_Axis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_multi_master" title="FT_Multi_Master" class="md-nav__link">
+ FT_Multi_Master
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_axis" title="FT_Var_Axis" class="md-nav__link">
+ FT_Var_Axis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_named_style" title="FT_Var_Named_Style" class="md-nav__link">
+ FT_Var_Named_Style
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mm_var" title="FT_MM_Var" class="md-nav__link">
+ FT_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_multi_master" title="FT_Get_Multi_Master" class="md-nav__link">
+ FT_Get_Multi_Master
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_var" title="FT_Get_MM_Var" class="md-nav__link">
+ FT_Get_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_mm_var" title="FT_Done_MM_Var" class="md-nav__link">
+ FT_Done_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_design_coordinates" title="FT_Set_MM_Design_Coordinates" class="md-nav__link">
+ FT_Set_MM_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_var_design_coordinates" title="FT_Set_Var_Design_Coordinates" class="md-nav__link">
+ FT_Set_Var_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_design_coordinates" title="FT_Get_Var_Design_Coordinates" class="md-nav__link">
+ FT_Get_Var_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_blend_coordinates" title="FT_Set_MM_Blend_Coordinates" class="md-nav__link">
+ FT_Set_MM_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_blend_coordinates" title="FT_Get_MM_Blend_Coordinates" class="md-nav__link">
+ FT_Get_MM_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_var_blend_coordinates" title="FT_Set_Var_Blend_Coordinates" class="md-nav__link">
+ FT_Set_Var_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_blend_coordinates" title="FT_Get_Var_Blend_Coordinates" class="md-nav__link">
+ FT_Get_Var_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_weightvector" title="FT_Set_MM_WeightVector" class="md-nav__link">
+ FT_Set_MM_WeightVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_weightvector" title="FT_Get_MM_WeightVector" class="md-nav__link">
+ FT_Get_MM_WeightVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_axis_flag_xxx" title="FT_VAR_AXIS_FLAG_XXX" class="md-nav__link">
+ FT_VAR_AXIS_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_axis_flags" title="FT_Get_Var_Axis_Flags" class="md-nav__link">
+ FT_Get_Var_Axis_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_named_instance" title="FT_Set_Named_Instance" class="md-nav__link">
+ FT_Set_Named_Instance
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mm_axis" title="FT_MM_Axis" class="md-nav__link">
+ FT_MM_Axis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_multi_master" title="FT_Multi_Master" class="md-nav__link">
+ FT_Multi_Master
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_axis" title="FT_Var_Axis" class="md-nav__link">
+ FT_Var_Axis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_named_style" title="FT_Var_Named_Style" class="md-nav__link">
+ FT_Var_Named_Style
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_mm_var" title="FT_MM_Var" class="md-nav__link">
+ FT_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_multi_master" title="FT_Get_Multi_Master" class="md-nav__link">
+ FT_Get_Multi_Master
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_var" title="FT_Get_MM_Var" class="md-nav__link">
+ FT_Get_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_mm_var" title="FT_Done_MM_Var" class="md-nav__link">
+ FT_Done_MM_Var
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_design_coordinates" title="FT_Set_MM_Design_Coordinates" class="md-nav__link">
+ FT_Set_MM_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_var_design_coordinates" title="FT_Set_Var_Design_Coordinates" class="md-nav__link">
+ FT_Set_Var_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_design_coordinates" title="FT_Get_Var_Design_Coordinates" class="md-nav__link">
+ FT_Get_Var_Design_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_blend_coordinates" title="FT_Set_MM_Blend_Coordinates" class="md-nav__link">
+ FT_Set_MM_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_blend_coordinates" title="FT_Get_MM_Blend_Coordinates" class="md-nav__link">
+ FT_Get_MM_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_var_blend_coordinates" title="FT_Set_Var_Blend_Coordinates" class="md-nav__link">
+ FT_Set_Var_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_blend_coordinates" title="FT_Get_Var_Blend_Coordinates" class="md-nav__link">
+ FT_Get_Var_Blend_Coordinates
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_mm_weightvector" title="FT_Set_MM_WeightVector" class="md-nav__link">
+ FT_Set_MM_WeightVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_mm_weightvector" title="FT_Get_MM_WeightVector" class="md-nav__link">
+ FT_Get_MM_WeightVector
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_var_axis_flag_xxx" title="FT_VAR_AXIS_FLAG_XXX" class="md-nav__link">
+ FT_VAR_AXIS_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_var_axis_flags" title="FT_Get_Var_Axis_Flags" class="md-nav__link">
+ FT_Get_Var_Axis_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_set_named_instance" title="FT_Set_Named_Instance" class="md-nav__link">
+ FT_Set_Named_Instance
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; Multiple Masters</p>
+<hr />
+<h1 id="multiple-masters">Multiple Masters<a class="headerlink" href="#multiple-masters" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>Besides Adobe MM fonts, the interface supports Apple's TrueType GX and OpenType variation fonts. Some of the routines only work with Adobe MM fonts, others will work with all three types. They are similar enough that a consistent interface makes sense.</p>
+<h2 id="ft_mm_axis">FT_MM_Axis<a class="headerlink" href="#ft_mm_axis" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model a given axis in design space for Multiple Masters fonts.</p>
+<p>This structure can't be used for TrueType GX or OpenType variation fonts.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="name">name</td><td class="desc">
+<p>The axis's name.</p>
+</td></tr>
+<tr><td class="val" id="minimum">minimum</td><td class="desc">
+<p>The axis's minimum design coordinate.</p>
+</td></tr>
+<tr><td class="val" id="maximum">maximum</td><td class="desc">
+<p>The axis's maximum design coordinate.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_multi_master">FT_Multi_Master<a class="headerlink" href="#ft_multi_master" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model the axes and space of a Multiple Masters font.</p>
+<p>This structure can't be used for TrueType GX or OpenType variation fonts.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_axis">num_axis</td><td class="desc">
+<p>Number of axes. Cannot exceed&nbsp;4.</p>
+</td></tr>
+<tr><td class="val" id="num_designs">num_designs</td><td class="desc">
+<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><td class="val" id="axis">axis</td><td class="desc">
+<p>A table of axis descriptors.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_var_axis">FT_Var_Axis<a class="headerlink" href="#ft_var_axis" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model a given axis in design space for Multiple Masters, TrueType GX, and OpenType variation fonts.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="name">name</td><td class="desc">
+<p>The axis's name. Not always meaningful for TrueType GX or OpenType variation fonts.</p>
+</td></tr>
+<tr><td class="val" id="minimum">minimum</td><td class="desc">
+<p>The axis's minimum design coordinate.</p>
+</td></tr>
+<tr><td class="val" id="def">def</td><td class="desc">
+<p>The axis's default design coordinate. FreeType computes meaningful default values for Adobe MM fonts.</p>
+</td></tr>
+<tr><td class="val" id="maximum">maximum</td><td class="desc">
+<p>The axis's maximum design coordinate.</p>
+</td></tr>
+<tr><td class="val" id="tag">tag</td><td class="desc">
+<p>The axis's tag (the equivalent to &lsquo;name&rsquo; for TrueType GX and OpenType variation fonts). FreeType provides default values for Adobe MM fonts if possible.</p>
+</td></tr>
+<tr><td class="val" id="strid">strid</td><td class="desc">
+<p>The axis name entry in the font's &lsquo;name&rsquo; table. This is another (and often better) version of the &lsquo;name&rsquo; field for TrueType GX or OpenType variation fonts. Not meaningful for Adobe MM fonts.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The fields <code>minimum</code>, <code>def</code>, and <code>maximum</code> are 16.16 fractional values for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the values are integers.</p>
+<hr>
+
+<h2 id="ft_var_named_style">FT_Var_Named_Style<a class="headerlink" href="#ft_var_named_style" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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;
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> psid; /* since 2.7.1 */
+
+ } <b>FT_Var_Named_Style</b>;
+</pre>
+</div>
+
+<p>A structure to model a named instance in a TrueType GX or OpenType variation font.</p>
+<p>This structure can't be used for Adobe MM fonts.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>The design coordinates for this instance. This is an array with one entry for each axis.</p>
+</td></tr>
+<tr><td class="val" id="strid">strid</td><td class="desc">
+<p>The entry in &lsquo;name&rsquo; table identifying this instance.</p>
+</td></tr>
+<tr><td class="val" id="psid">psid</td><td class="desc">
+<p>The entry in &lsquo;name&rsquo; table identifying a PostScript name for this instance. Value 0xFFFF indicates a missing entry.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_mm_var">FT_MM_Var<a class="headerlink" href="#ft_mm_var" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model the axes and space of an Adobe MM, TrueType GX, or OpenType variation font.</p>
+<p>Some fields are specific to one format and not to the others.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_axis">num_axis</td><td class="desc">
+<p>The number of axes. The maximum value is&nbsp;4 for Adobe MM fonts; no limit in TrueType GX or OpenType variation fonts.</p>
+</td></tr>
+<tr><td class="val" id="num_designs">num_designs</td><td class="desc">
+<p>The number of designs; should be normally 2^num_axis for Adobe MM fonts. Not meaningful for TrueType GX or OpenType variation fonts (where every glyph could have a different number of designs).</p>
+</td></tr>
+<tr><td class="val" id="num_namedstyles">num_namedstyles</td><td class="desc">
+<p>The number of named styles; a &lsquo;named style&rsquo; is a tuple of design coordinates that has a string ID (in the &lsquo;name&rsquo; table) associated with it. The font can tell the user that, for example, [Weight=1.5,Width=1.1] is &lsquo;Bold&rsquo;. Another name for &lsquo;named style&rsquo; is &lsquo;named instance&rsquo;.</p>
+<p>For Adobe Multiple Masters fonts, this value is always zero because the format does not support named styles.</p>
+</td></tr>
+<tr><td class="val" id="axis">axis</td><td class="desc">
+<p>An axis descriptor table. TrueType GX and OpenType variation fonts contain slightly more data than Adobe MM fonts. Memory management of this pointer is done internally by FreeType.</p>
+</td></tr>
+<tr><td class="val" id="namedstyle">namedstyle</td><td class="desc">
+<p>A named style (instance) table. Only meaningful for TrueType GX and OpenType variation fonts. Memory management of this pointer is done internally by FreeType.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_get_multi_master">FT_Get_Multi_Master<a class="headerlink" href="#ft_get_multi_master" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a variation descriptor of a given Adobe MM font.</p>
+<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="amaster">amaster</td><td class="desc">
+<p>The Multiple Masters descriptor.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_get_mm_var">FT_Get_MM_Var<a class="headerlink" href="#ft_get_mm_var" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a variation descriptor for a given font.</p>
+<p>This function works with all supported variation formats.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="amaster">amaster</td><td class="desc">
+<p>The variation descriptor. Allocates a data structure, which the user must deallocate with a call to <code><a href="ft2-multiple_masters.html#ft_done_mm_var">FT_Done_MM_Var</a></code> after use.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_done_mm_var">FT_Done_MM_Var<a class="headerlink" href="#ft_done_mm_var" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Done_MM_Var</b>( <a href="ft2-base_interface.html#ft_library">FT_Library</a> library,
+ <a href="ft2-multiple_masters.html#ft_mm_var">FT_MM_Var</a> *amaster );
+</pre>
+</div>
+
+<p>Free the memory allocated by <code><a href="ft2-multiple_masters.html#ft_get_mm_var">FT_Get_MM_Var</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle of the face's parent library object that was used in the call to <code><a href="ft2-multiple_masters.html#ft_get_mm_var">FT_Get_MM_Var</a></code> to create <code>amaster</code>.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_set_mm_design_coordinates">FT_Set_MM_Design_Coordinates<a class="headerlink" href="#ft_set_mm_design_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>For Adobe MM fonts, choose an interpolated font design through design coordinates.</p>
+<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
+</td></tr>
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>An array of design coordinates.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>[Since 2.8.1] To reset all axes to the default values, call the function with <code>num_coords</code> set to zero and <code>coords</code> set to <code>NULL</code>.</p>
+<p>[Since 2.9] If <code>num_coords</code> is larger than zero, this function sets the <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VARIATION</a></code> bit in <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>'s <code>face_flags</code> field (i.e., <code><a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a></code> will return true). If <code>num_coords</code> is zero, this bit flag gets unset.</p>
+<hr>
+
+<h2 id="ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates<a class="headerlink" href="#ft_set_var_design_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Choose an interpolated font design through design coordinates.</p>
+<p>This function works with all supported variation formats.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
+</td></tr>
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>An array of design coordinates.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>[Since 2.8.1] To reset all axes to the default values, call the function with <code>num_coords</code> set to zero and <code>coords</code> set to <code>NULL</code>. [Since 2.9] &lsquo;Default values&rsquo; means the currently selected named instance (or the base font if no named instance is selected).</p>
+<p>[Since 2.9] If <code>num_coords</code> is larger than zero, this function sets the <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VARIATION</a></code> bit in <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>'s <code>face_flags</code> field (i.e., <code><a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a></code> will return true). If <code>num_coords</code> is zero, this bit flag gets unset.</p>
+<hr>
+
+<h2 id="ft_get_var_design_coordinates">FT_Get_Var_Design_Coordinates<a class="headerlink" href="#ft_get_var_design_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_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>
+</div>
+
+<p>Get the design coordinates of the currently selected interpolated font.</p>
+<p>This function works with all supported variation formats.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
+<p>The number of design coordinates to retrieve. If it is larger than the number of axes, set the excess values to&nbsp;0.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>The design coordinates array.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.7.1</p>
+<hr>
+
+<h2 id="ft_set_mm_blend_coordinates">FT_Set_MM_Blend_Coordinates<a class="headerlink" href="#ft_set_mm_blend_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Choose an interpolated font design through normalized blend coordinates.</p>
+<p>This function works with all supported variation formats.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
+</td></tr>
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>The design coordinates array (each element must be between 0 and 1.0 for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and OpenType variation fonts).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>[Since 2.8.1] To reset all axes to the default values, call the function with <code>num_coords</code> set to zero and <code>coords</code> set to <code>NULL</code>. [Since 2.9] &lsquo;Default values&rsquo; means the currently selected named instance (or the base font if no named instance is selected).</p>
+<p>[Since 2.9] If <code>num_coords</code> is larger than zero, this function sets the <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VARIATION</a></code> bit in <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>'s <code>face_flags</code> field (i.e., <code><a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a></code> will return true). If <code>num_coords</code> is zero, this bit flag gets unset.</p>
+<hr>
+
+<h2 id="ft_get_mm_blend_coordinates">FT_Get_MM_Blend_Coordinates<a class="headerlink" href="#ft_get_mm_blend_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_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>
+</div>
+
+<p>Get the normalized blend coordinates of the currently selected interpolated font.</p>
+<p>This function works with all supported variation formats.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
+<p>The number of normalized blend coordinates to retrieve. If it is larger than the number of axes, set the excess values to&nbsp;0.5 for Adobe MM fonts, and to&nbsp;0 for TrueType GX and OpenType variation fonts.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="coords">coords</td><td class="desc">
+<p>The normalized blend coordinates array.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.7.1</p>
+<hr>
+
+<h2 id="ft_set_var_blend_coordinates">FT_Set_Var_Blend_Coordinates<a class="headerlink" href="#ft_set_var_blend_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>This is another name of <code><a href="ft2-multiple_masters.html#ft_set_mm_blend_coordinates">FT_Set_MM_Blend_Coordinates</a></code>.</p>
+<hr>
+
+<h2 id="ft_get_var_blend_coordinates">FT_Get_Var_Blend_Coordinates<a class="headerlink" href="#ft_get_var_blend_coordinates" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_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>
+</div>
+
+<p>This is another name of <code><a href="ft2-multiple_masters.html#ft_get_mm_blend_coordinates">FT_Get_MM_Blend_Coordinates</a></code>.</p>
+<h4>since</h4>
+
+<p>2.7.1</p>
+<hr>
+
+<h2 id="ft_set_mm_weightvector">FT_Set_MM_WeightVector<a class="headerlink" href="#ft_set_mm_weightvector" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Set_MM_WeightVector</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> len,
+ <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a>* weightvector );
+</pre>
+</div>
+
+<p>For Adobe MM fonts, choose an interpolated font design by directly setting the weight vector.</p>
+<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="len">len</td><td class="desc">
+<p>The length of the weight vector array. If it is larger than the number of designs, the extra values are ignored. If it is less than the number of designs, the remaining values are set to zero.</p>
+</td></tr>
+<tr><td class="val" id="weightvector">weightvector</td><td class="desc">
+<p>An array representing the weight vector.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Adobe Multiple Master fonts limit the number of designs, and thus the length of the weight vector to&nbsp;16.</p>
+<p>If <code>len</code> is zero and <code>weightvector</code> is <code>NULL</code>, the weight vector array is reset to the default values.</p>
+<p>The Adobe documentation also states that the values in the WeightVector array must total 1.0 &plusmn;&nbsp;0.001. In practice this does not seem to be enforced, so is not enforced here, either.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_get_mm_weightvector">FT_Get_MM_WeightVector<a class="headerlink" href="#ft_get_mm_weightvector" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_MM_WeightVector</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a>* len,
+ <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a>* weightvector );
+</pre>
+</div>
+
+<p>For Adobe MM fonts, retrieve the current weight vector of the font.</p>
+<p>This function can't be used with TrueType GX or OpenType variation fonts.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="len">len</td><td class="desc">
+<p>A pointer to the size of the array to be filled. If the size of the array is less than the number of designs, <code>FT_Err_Invalid_Argument</code> is returned, and <code>len</code> is set to the required size (the number of designs). If the size of the array is greater than the number of designs, the remaining entries are set to&nbsp;0. On successful completion, <code>len</code> is set to the number of designs (i.e., the number of values written to the array).</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="weightvector">weightvector</td><td class="desc">
+<p>An array to be filled.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>Adobe Multiple Master fonts limit the number of designs, and thus the length of the WeightVector to&nbsp;16.</p>
+<h4>since</h4>
+
+<p>2.10</p>
+<hr>
+
+<h2 id="ft_var_axis_flag_xxx">FT_VAR_AXIS_FLAG_XXX<a class="headerlink" href="#ft_var_axis_flag_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-multiple_masters.html#ft_var_axis_flag_hidden">FT_VAR_AXIS_FLAG_HIDDEN</a> 1
+</pre>
+</div>
+
+<p>A list of bit flags used in the return value of <code><a href="ft2-multiple_masters.html#ft_get_var_axis_flags">FT_Get_Var_Axis_Flags</a></code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_var_axis_flag_hidden">FT_VAR_AXIS_FLAG_HIDDEN</td><td class="desc">
+<p>The variation axis should not be exposed to user interfaces.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.8.1</p>
+<hr>
+
+<h2 id="ft_get_var_axis_flags">FT_Get_Var_Axis_Flags<a class="headerlink" href="#ft_get_var_axis_flags" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_Var_Axis_Flags</b>( <a href="ft2-multiple_masters.html#ft_mm_var">FT_MM_Var</a>* master,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> axis_index,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a>* flags );
+</pre>
+</div>
+
+<p>Get the &lsquo;flags&rsquo; field of an OpenType Variation Axis Record.</p>
+<p>Not meaningful for Adobe MM fonts (<code>*flags</code> is always zero).</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="master">master</td><td class="desc">
+<p>The variation descriptor.</p>
+</td></tr>
+<tr><td class="val" id="axis_index">axis_index</td><td class="desc">
+<p>The index of the requested variation axis.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="flags">flags</td><td class="desc">
+<p>The &lsquo;flags&rsquo; field. See <code><a href="ft2-multiple_masters.html#ft_var_axis_flag_xxx">FT_VAR_AXIS_FLAG_XXX</a></code> for possible values.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>since</h4>
+
+<p>2.8.1</p>
+<hr>
+
+<h2 id="ft_set_named_instance">FT_Set_Named_Instance<a class="headerlink" href="#ft_set_named_instance" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Set_Named_Instance</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> instance_index );
+</pre>
+</div>
+
+<p>Set or change the current named instance.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="instance_index">instance_index</td><td class="desc">
+<p>The index of the requested instance, starting with value 1. If set to value 0, FreeType switches to font access without a named instance.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The function uses the value of <code>instance_index</code> to set bits 16-30 of the face's <code>face_index</code> field. It also resets any variation applied to the font, and the <code><a href="ft2-base_interface.html#ft_face_flag_xxx">FT_FACE_FLAG_VARIATION</a></code> bit of the face's <code>face_flags</code> field gets reset to zero (i.e., <code><a href="ft2-base_interface.html#ft_is_variation">FT_IS_VARIATION</a></code> will return false).</p>
+<p>For Adobe MM fonts (which don't have named instances) this function simply resets the current face to the default instance.</p>
+<h4>since</h4>
+
+<p>2.9</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Header File Macros
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ TrueType Tables
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-ot_validation.html b/freetype/docs/reference/site/ft2-ot_validation.html
new file mode 100644
index 00000000..3fd64994
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-ot_validation.html
@@ -0,0 +1,1326 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>OpenType Validation - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#opentype-validation" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ OpenType Validation
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10" checked>
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ OpenType Validation
+ </label>
+
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link md-nav__link--active">
+ OpenType Validation
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_validate" title="FT_OpenType_Validate" class="md-nav__link">
+ FT_OpenType_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_free" title="FT_OpenType_Free" class="md-nav__link">
+ FT_OpenType_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_otxxx" title="FT_VALIDATE_OTXXX" class="md-nav__link">
+ FT_VALIDATE_OTXXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_validate" title="FT_OpenType_Validate" class="md-nav__link">
+ FT_OpenType_Validate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_opentype_free" title="FT_OpenType_Free" class="md-nav__link">
+ FT_OpenType_Free
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_validate_otxxx" title="FT_VALIDATE_OTXXX" class="md-nav__link">
+ FT_VALIDATE_OTXXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#miscellaneous">Miscellaneous</a> &raquo; OpenType Validation</p>
+<hr />
+<h1 id="opentype-validation">OpenType Validation<a class="headerlink" href="#opentype-validation" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
+<h2 id="ft_opentype_validate">FT_OpenType_Validate<a class="headerlink" href="#ft_opentype_validate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="validation_flags">validation_flags</td><td class="desc">
+<p>A bit field that specifies the tables to be validated. See <code><a href="ft2-ot_validation.html#ft_validate_otxxx">FT_VALIDATE_OTXXX</a></code> for possible values.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="base_table">BASE_table</td><td class="desc">
+<p>A pointer to the BASE table.</p>
+</td></tr>
+<tr><td class="val" id="gdef_table">GDEF_table</td><td class="desc">
+<p>A pointer to the GDEF table.</p>
+</td></tr>
+<tr><td class="val" id="gpos_table">GPOS_table</td><td class="desc">
+<p>A pointer to the GPOS table.</p>
+</td></tr>
+<tr><td class="val" id="gsub_table">GSUB_table</td><td class="desc">
+<p>A pointer to the GSUB table.</p>
+</td></tr>
+<tr><td class="val" id="jstf_table">JSTF_table</td><td class="desc">
+<p>A pointer to the JSTF table.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with OpenType fonts, returning an error otherwise.</p>
+<p>After use, the application should deallocate the five tables with <code><a href="ft2-ot_validation.html#ft_opentype_free">FT_OpenType_Free</a></code>. A <code>NULL</code> value indicates that the table either doesn't exist in the font, or the application hasn't asked for validation.</p>
+<hr>
+
+<h2 id="ft_opentype_free">FT_OpenType_Free<a class="headerlink" href="#ft_opentype_free" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Free the buffer allocated by OpenType validator.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="table">table</td><td class="desc">
+<p>The pointer to the buffer that is allocated by <code><a href="ft2-ot_validation.html#ft_opentype_validate">FT_OpenType_Validate</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function must be used to free the buffer allocated by <code><a href="ft2-ot_validation.html#ft_opentype_validate">FT_OpenType_Validate</a></code> only.</p>
+<hr>
+
+<h2 id="ft_validate_otxxx">FT_VALIDATE_OTXXX<a class="headerlink" href="#ft_validate_otxxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_base">FT_VALIDATE_BASE</a> 0x0100
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_gdef">FT_VALIDATE_GDEF</a> 0x0200
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_gpos">FT_VALIDATE_GPOS</a> 0x0400
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_gsub">FT_VALIDATE_GSUB</a> 0x0800
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_jstf">FT_VALIDATE_JSTF</a> 0x1000
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_math">FT_VALIDATE_MATH</a> 0x2000
+
+#<span class="keyword">define</span> <a href="ft2-ot_validation.html#ft_validate_ot">FT_VALIDATE_OT</a> ( <a href="ft2-ot_validation.html#ft_validate_base">FT_VALIDATE_BASE</a> | \
+ <a href="ft2-ot_validation.html#ft_validate_gdef">FT_VALIDATE_GDEF</a> | \
+ <a href="ft2-ot_validation.html#ft_validate_gpos">FT_VALIDATE_GPOS</a> | \
+ <a href="ft2-ot_validation.html#ft_validate_gsub">FT_VALIDATE_GSUB</a> | \
+ <a href="ft2-ot_validation.html#ft_validate_jstf">FT_VALIDATE_JSTF</a> | \
+ <a href="ft2-ot_validation.html#ft_validate_math">FT_VALIDATE_MATH</a> )
+</pre>
+</div>
+
+<p>A list of bit-field constants used with <code><a href="ft2-ot_validation.html#ft_opentype_validate">FT_OpenType_Validate</a></code> to indicate which OpenType tables should be validated.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_validate_base">FT_VALIDATE_BASE</td><td class="desc">
+<p>Validate BASE table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_gdef">FT_VALIDATE_GDEF</td><td class="desc">
+<p>Validate GDEF table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_gpos">FT_VALIDATE_GPOS</td><td class="desc">
+<p>Validate GPOS table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_gsub">FT_VALIDATE_GSUB</td><td class="desc">
+<p>Validate GSUB table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_jstf">FT_VALIDATE_JSTF</td><td class="desc">
+<p>Validate JSTF table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_math">FT_VALIDATE_MATH</td><td class="desc">
+<p>Validate MATH table.</p>
+</td></tr>
+<tr><td class="val" id="ft_validate_ot">FT_VALIDATE_OT</td><td class="desc">
+<p>Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Error Code Values
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Incremental Loading
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-outline_processing.html b/freetype/docs/reference/site/ft2-outline_processing.html
new file mode 100644
index 00000000..9ad8482f
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-outline_processing.html
@@ -0,0 +1,2314 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Outline Processing - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#outline-processing" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Outline Processing
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Outline Processing
+ </label>
+
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link md-nav__link--active">
+ Outline Processing
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline" title="FT_Outline" class="md-nav__link">
+ FT_Outline
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_new" title="FT_Outline_New" class="md-nav__link">
+ FT_Outline_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_done" title="FT_Outline_Done" class="md-nav__link">
+ FT_Outline_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_copy" title="FT_Outline_Copy" class="md-nav__link">
+ FT_Outline_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_translate" title="FT_Outline_Translate" class="md-nav__link">
+ FT_Outline_Translate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_transform" title="FT_Outline_Transform" class="md-nav__link">
+ FT_Outline_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_embolden" title="FT_Outline_Embolden" class="md-nav__link">
+ FT_Outline_Embolden
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_emboldenxy" title="FT_Outline_EmboldenXY" class="md-nav__link">
+ FT_Outline_EmboldenXY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_reverse" title="FT_Outline_Reverse" class="md-nav__link">
+ FT_Outline_Reverse
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_check" title="FT_Outline_Check" class="md-nav__link">
+ FT_Outline_Check
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_cbox" title="FT_Outline_Get_CBox" class="md-nav__link">
+ FT_Outline_Get_CBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_bbox" title="FT_Outline_Get_BBox" class="md-nav__link">
+ FT_Outline_Get_BBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_bitmap" title="FT_Outline_Get_Bitmap" class="md-nav__link">
+ FT_Outline_Get_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_render" title="FT_Outline_Render" class="md-nav__link">
+ FT_Outline_Render
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_decompose" title="FT_Outline_Decompose" class="md-nav__link">
+ FT_Outline_Decompose
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_funcs" title="FT_Outline_Funcs" class="md-nav__link">
+ FT_Outline_Funcs
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_movetofunc" title="FT_Outline_MoveToFunc" class="md-nav__link">
+ FT_Outline_MoveToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_linetofunc" title="FT_Outline_LineToFunc" class="md-nav__link">
+ FT_Outline_LineToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_conictofunc" title="FT_Outline_ConicToFunc" class="md-nav__link">
+ FT_Outline_ConicToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_cubictofunc" title="FT_Outline_CubicToFunc" class="md-nav__link">
+ FT_Outline_CubicToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_orientation" title="FT_Orientation" class="md-nav__link">
+ FT_Orientation
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_orientation" title="FT_Outline_Get_Orientation" class="md-nav__link">
+ FT_Outline_Get_Orientation
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_xxx" title="FT_OUTLINE_XXX" class="md-nav__link">
+ FT_OUTLINE_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline" title="FT_Outline" class="md-nav__link">
+ FT_Outline
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_new" title="FT_Outline_New" class="md-nav__link">
+ FT_Outline_New
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_done" title="FT_Outline_Done" class="md-nav__link">
+ FT_Outline_Done
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_copy" title="FT_Outline_Copy" class="md-nav__link">
+ FT_Outline_Copy
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_translate" title="FT_Outline_Translate" class="md-nav__link">
+ FT_Outline_Translate
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_transform" title="FT_Outline_Transform" class="md-nav__link">
+ FT_Outline_Transform
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_embolden" title="FT_Outline_Embolden" class="md-nav__link">
+ FT_Outline_Embolden
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_emboldenxy" title="FT_Outline_EmboldenXY" class="md-nav__link">
+ FT_Outline_EmboldenXY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_reverse" title="FT_Outline_Reverse" class="md-nav__link">
+ FT_Outline_Reverse
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_check" title="FT_Outline_Check" class="md-nav__link">
+ FT_Outline_Check
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_cbox" title="FT_Outline_Get_CBox" class="md-nav__link">
+ FT_Outline_Get_CBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_bbox" title="FT_Outline_Get_BBox" class="md-nav__link">
+ FT_Outline_Get_BBox
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_bitmap" title="FT_Outline_Get_Bitmap" class="md-nav__link">
+ FT_Outline_Get_Bitmap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_render" title="FT_Outline_Render" class="md-nav__link">
+ FT_Outline_Render
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_decompose" title="FT_Outline_Decompose" class="md-nav__link">
+ FT_Outline_Decompose
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_funcs" title="FT_Outline_Funcs" class="md-nav__link">
+ FT_Outline_Funcs
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_movetofunc" title="FT_Outline_MoveToFunc" class="md-nav__link">
+ FT_Outline_MoveToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_linetofunc" title="FT_Outline_LineToFunc" class="md-nav__link">
+ FT_Outline_LineToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_conictofunc" title="FT_Outline_ConicToFunc" class="md-nav__link">
+ FT_Outline_ConicToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_cubictofunc" title="FT_Outline_CubicToFunc" class="md-nav__link">
+ FT_Outline_CubicToFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_orientation" title="FT_Orientation" class="md-nav__link">
+ FT_Orientation
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_get_orientation" title="FT_Outline_Get_Orientation" class="md-nav__link">
+ FT_Outline_Get_Orientation
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_outline_xxx" title="FT_OUTLINE_XXX" class="md-nav__link">
+ FT_OUTLINE_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Outline Processing</p>
+<hr />
+<h1 id="outline-processing">Outline Processing<a class="headerlink" href="#outline-processing" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_outline">FT_Outline<a class="headerlink" href="#ft_outline" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>This structure is used to describe an outline to the scan-line converter.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="n_contours">n_contours</td><td class="desc">
+<p>The number of contours in the outline.</p>
+</td></tr>
+<tr><td class="val" id="n_points">n_points</td><td class="desc">
+<p>The number of points in the outline.</p>
+</td></tr>
+<tr><td class="val" id="points">points</td><td class="desc">
+<p>A pointer to an array of <code>n_points</code> <code><a href="ft2-basic_types.html#ft_vector">FT_Vector</a></code> elements, giving the outline's point coordinates.</p>
+</td></tr>
+<tr><td class="val" id="tags">tags</td><td class="desc">
+<p>A pointer to an array of <code>n_points</code> chars, giving each outline point's type.</p>
+<p>If bit&nbsp;0 is unset, the point is &lsquo;off&rsquo; the curve, i.e., a Bezier control point, while it is &lsquo;on&rsquo; if set.</p>
+<p>Bit&nbsp;1 is meaningful for &lsquo;off&rsquo; points only. If set, it indicates a third-order Bezier arc control point; and a second-order control point if unset.</p>
+<p>If bit&nbsp;2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is the same as the argument to the &lsquo;SCANMODE&rsquo; instruction).</p>
+<p>Bits 3 and&nbsp;4 are reserved for internal purposes.</p>
+</td></tr>
+<tr><td class="val" id="contours">contours</td><td class="desc">
+<p>An array of <code>n_contours</code> 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 <code>contours[0]</code>, the second one is defined by the points <code>contours[0]+1</code> to <code>contours[1]</code>, etc.</p>
+</td></tr>
+<tr><td class="val" id="flags">flags</td><td class="desc">
+<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 <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_XXX</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The B/W rasterizer only checks bit&nbsp;2 in the <code>tags</code> array for the first point of each contour. The drop-out mode as given with <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_IGNORE_DROPOUTS</a></code>, <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_SMART_DROPOUTS</a></code>, and <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_INCLUDE_STUBS</a></code> in <code>flags</code> is then overridden.</p>
+<hr>
+
+<h2 id="ft_outline_new">FT_Outline_New<a class="headerlink" href="#ft_outline_new" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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 );
+</pre>
+</div>
+
+<p>Create a new outline of a given size.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to the library object from where the outline is allocated. Note however that the new outline will <strong>not</strong> necessarily be <strong>freed</strong>, when destroying the library, by <code><a href="ft2-base_interface.html#ft_done_freetype">FT_Done_FreeType</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="numpoints">numPoints</td><td class="desc">
+<p>The maximum number of points within the outline. Must be smaller than or equal to 0xFFFF (65535).</p>
+</td></tr>
+<tr><td class="val" id="numcontours">numContours</td><td class="desc">
+<p>The maximum number of contours within the outline. This value must be in the range 0 to <code>numPoints</code>.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="anoutline">anoutline</td><td class="desc">
+<p>A handle to the new outline.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The reason why this function takes a <code>library</code> parameter is simply to use the library's memory allocator.</p>
+<hr>
+
+<h2 id="ft_outline_done">FT_Outline_Done<a class="headerlink" href="#ft_outline_done" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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 );
+</pre>
+</div>
+
+<p>Destroy an outline created with <code><a href="ft2-outline_processing.html#ft_outline_new">FT_Outline_New</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle of the library object used to allocate the outline.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the outline object to be discarded.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If the outline's &lsquo;owner&rsquo; field is not set, only the outline descriptor will be released.</p>
+<hr>
+
+<h2 id="ft_outline_copy">FT_Outline_Copy<a class="headerlink" href="#ft_outline_copy" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>A handle to the source outline.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>A handle to the target outline.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_outline_translate">FT_Outline_Translate<a class="headerlink" href="#ft_outline_translate" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Apply a simple translation to the points of an outline.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="xoffset">xOffset</td><td class="desc">
+<p>The horizontal offset.</p>
+</td></tr>
+<tr><td class="val" id="yoffset">yOffset</td><td class="desc">
+<p>The vertical offset.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_outline_transform">FT_Outline_Transform<a class="headerlink" href="#ft_outline_transform" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="matrix">matrix</td><td class="desc">
+<p>A pointer to the transformation matrix.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>You can use <code><a href="ft2-outline_processing.html#ft_outline_translate">FT_Outline_Translate</a></code> if you need to translate the outline's points.</p>
+<hr>
+
+<h2 id="ft_outline_embolden">FT_Outline_Embolden<a class="headerlink" href="#ft_outline_embolden" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Embolden an outline. The new outline will be at most 4&nbsp;times <code>strength</code> pixels wider and higher. You may think of the left and bottom borders as unchanged.</p>
+<p>Negative <code>strength</code> values to reduce the outline thickness are possible also.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A handle to the target outline.</p>
+</td></tr>
+</table>
+
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="strength">strength</td><td class="desc">
+<p>How strong the glyph is emboldened. Expressed in 26.6 pixel format.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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>If you need &lsquo;better&rsquo; metrics values you should call <code><a href="ft2-outline_processing.html#ft_outline_get_cbox">FT_Outline_Get_CBox</a></code> or <code><a href="ft2-outline_processing.html#ft_outline_get_bbox">FT_Outline_Get_BBox</a></code>.</p>
+<p>To get meaningful results, font scaling values must be set with functions like <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code> before calling FT_Render_Glyph.</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
+
+ if ( face-&gt;glyph-&gt;format == FT_GLYPH_FORMAT_OUTLINE )
+ FT_Outline_Embolden( &amp;face-&gt;glyph-&gt;outline, strength );
+</pre></div>
+
+<hr>
+
+<h2 id="ft_outline_emboldenxy">FT_Outline_EmboldenXY<a class="headerlink" href="#ft_outline_emboldenxy" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Outline_EmboldenXY</b>( <a href="ft2-outline_processing.html#ft_outline">FT_Outline</a>* outline,
+ <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>
+</div>
+
+<p>Embolden an outline. The new outline will be <code>xstrength</code> pixels wider and <code>ystrength</code> pixels higher. Otherwise, it is similar to <code><a href="ft2-outline_processing.html#ft_outline_embolden">FT_Outline_Embolden</a></code>, which uses the same strength in both directions.</p>
+<h4>since</h4>
+
+<p>2.4.10</p>
+<hr>
+
+<h2 id="ft_outline_reverse">FT_Outline_Reverse<a class="headerlink" href="#ft_outline_reverse" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs.</p>
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This function toggles the bit flag <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_REVERSE_FILL</a></code> in the outline's <code>flags</code> field.</p>
+<p>It shouldn't be used by a normal client application, unless it knows what it is doing.</p>
+<hr>
+
+<h2 id="ft_outline_check">FT_Outline_Check<a class="headerlink" href="#ft_outline_check" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Check the contents of an outline descriptor.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A handle to a source outline.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>An empty outline, or an outline with a single point only is also valid.</p>
+<hr>
+
+<h2 id="ft_outline_get_cbox">FT_Outline_Get_CBox<a class="headerlink" href="#ft_outline_get_cbox" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return an outline's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="acbox">acbox</td><td class="desc">
+<p>The outline's control box.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>See <code><a href="ft2-glyph_management.html#ft_glyph_get_cbox">FT_Glyph_Get_CBox</a></code> for a discussion of tricky fonts.</p>
+<hr>
+
+<h2 id="ft_outline_get_bbox">FT_Outline_Get_BBox<a class="headerlink" href="#ft_outline_get_bbox" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_BBOX_H (freetype/ftbbox.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm that returns <em>very</em> quickly when the two boxes coincide. Otherwise, the outline Bezier arcs are traversed to extract their extrema.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the source outline.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="abbox">abbox</td><td class="desc">
+<p>The outline's exact bounding box.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If the font is tricky and the glyph has been loaded with <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code>, the resulting BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the BBox, which can be eventually converted back to font units.</p>
+<hr>
+
+<h2 id="ft_outline_get_bitmap">FT_Outline_Get_Bitmap<a class="headerlink" href="#ft_outline_get_bitmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="abitmap">abitmap</td><td class="desc">
+<p>A pointer to the target bitmap descriptor.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function does <strong>not create</strong> the bitmap, it only renders an outline image within the one you pass to it! Consequently, the various fields in <code>abitmap</code> should be set accordingly.</p>
+<p>It will use the raster corresponding to the default glyph format.</p>
+<p>The value of the <code>num_grays</code> field in <code>abitmap</code> is ignored. If you select the gray-level rasterizer, and you want less than 256 gray levels, you have to use <code><a href="ft2-outline_processing.html#ft_outline_render">FT_Outline_Render</a></code> directly.</p>
+<hr>
+
+<h2 id="ft_outline_render">FT_Outline_Render<a class="headerlink" href="#ft_outline_render" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Render an outline within a bitmap using the current scan-convert.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="params">params</td><td class="desc">
+<p>A pointer to an <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> structure used to describe the rendering operation.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This advanced function uses <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> as an argument, allowing FreeType rasterizer to be used for direct composition, translucency, etc. You should know how to set up <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> for this function to work.</p>
+<p>The field <code>params.source</code> will be set to <code>outline</code> 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 <code><a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_DIRECT</a></code> value of the <code>flags</code> field in the <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> structure for more details.</p>
+<hr>
+
+<h2 id="ft_outline_decompose">FT_Outline_Decompose<a class="headerlink" href="#ft_outline_decompose" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Walk over an outline's structure to decompose it into individual segments and Bezier arcs. This function also emits &lsquo;move to&rsquo; operations to indicate the start of new contours in the outline.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A pointer to the source target.</p>
+</td></tr>
+<tr><td class="val" id="func_interface">func_interface</td><td class="desc">
+<p>A table of &lsquo;emitters&rsquo;, i.e., function pointers called during decomposition to indicate path operations.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer that is passed to each emitter during the decomposition. It can be used to store the state during the decomposition.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>A contour that contains a single point only is represented by a &lsquo;move to&rsquo; operation followed by &lsquo;line to&rsquo; to the same point. In most cases, it is best to filter this out before using the outline for stroking purposes (otherwise it would result in a visible dot when round caps are used).</p>
+<p>Similarly, the function returns success for an empty outline also (doing nothing, this is, not calling any emitter); if necessary, you should filter this out, too.</p>
+<hr>
+
+<h2 id="ft_outline_funcs">FT_Outline_Funcs<a class="headerlink" href="#ft_outline_funcs" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Beziers.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="move_to">move_to</td><td class="desc">
+<p>The &lsquo;move to&rsquo; emitter.</p>
+</td></tr>
+<tr><td class="val" id="line_to">line_to</td><td class="desc">
+<p>The segment emitter.</p>
+</td></tr>
+<tr><td class="val" id="conic_to">conic_to</td><td class="desc">
+<p>The second-order Bezier arc emitter.</p>
+</td></tr>
+<tr><td class="val" id="cubic_to">cubic_to</td><td class="desc">
+<p>The third-order Bezier arc emitter.</p>
+</td></tr>
+<tr><td class="val" id="shift">shift</td><td class="desc">
+<p>The shift that is applied to coordinates before they are sent to the emitter.</p>
+</td></tr>
+<tr><td class="val" id="delta">delta</td><td class="desc">
+<p>The delta that is applied to coordinates before they are sent to the emitter, but after the shift.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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:
+<div class="codehilite"><pre><span></span> x&#39; = (x &lt;&lt; shift) - delta
+ y&#39; = (y &lt;&lt; shift) - delta
+</pre></div></p>
+<p>Set the values of <code>shift</code> and <code>delta</code> to&nbsp;0 to get the original point coordinates.</p>
+<hr>
+
+<h2 id="ft_outline_movetofunc">FT_Outline_MoveToFunc<a class="headerlink" href="#ft_outline_movetofunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Outline_MoveTo_Func <b>FT_Outline_MoveToFunc</b>
+</pre>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the target point of the &lsquo;move to&rsquo;.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_outline_linetofunc">FT_Outline_LineToFunc<a class="headerlink" href="#ft_outline_linetofunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Outline_LineTo_Func <b>FT_Outline_LineToFunc</b>
+</pre>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the target point of the &lsquo;line to&rsquo;.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_outline_conictofunc">FT_Outline_ConicToFunc<a class="headerlink" href="#ft_outline_conictofunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Outline_ConicTo_Func <b>FT_Outline_ConicToFunc</b>
+</pre>
+</div>
+
+<p>A function pointer type used to describe the signature of a &lsquo;conic to&rsquo; function during outline walking or decomposition.</p>
+<p>A &lsquo;conic to&rsquo; is emitted to indicate a second-order Bezier arc in the outline.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="control">control</td><td class="desc">
+<p>An intermediate control point between the last position and the new target in <code>to</code>.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the target end point of the conic arc.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_outline_cubictofunc">FT_Outline_CubicToFunc<a class="headerlink" href="#ft_outline_cubictofunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Outline_CubicTo_Func <b>FT_Outline_CubicToFunc</b>
+</pre>
+</div>
+
+<p>A function pointer type used to describe the signature of a &lsquo;cubic to&rsquo; function during outline walking or decomposition.</p>
+<p>A &lsquo;cubic to&rsquo; is emitted to indicate a third-order Bezier arc.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="control1">control1</td><td class="desc">
+<p>A pointer to the first Bezier control point.</p>
+</td></tr>
+<tr><td class="val" id="control2">control2</td><td class="desc">
+<p>A pointer to the second Bezier control point.</p>
+</td></tr>
+<tr><td class="val" id="to">to</td><td class="desc">
+<p>A pointer to the target end point.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A typeless pointer, which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_orientation">FT_Orientation<a class="headerlink" href="#ft_orientation" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Orientation_
+ {
+ <a href="ft2-outline_processing.html#ft_orientation_truetype">FT_ORIENTATION_TRUETYPE</a> = 0,
+ <a href="ft2-outline_processing.html#ft_orientation_postscript">FT_ORIENTATION_POSTSCRIPT</a> = 1,
+ <a href="ft2-outline_processing.html#ft_orientation_fill_right">FT_ORIENTATION_FILL_RIGHT</a> = <a href="ft2-outline_processing.html#ft_orientation_truetype">FT_ORIENTATION_TRUETYPE</a>,
+ <a href="ft2-outline_processing.html#ft_orientation_fill_left">FT_ORIENTATION_FILL_LEFT</a> = <a href="ft2-outline_processing.html#ft_orientation_postscript">FT_ORIENTATION_POSTSCRIPT</a>,
+ <a href="ft2-outline_processing.html#ft_orientation_none">FT_ORIENTATION_NONE</a>
+
+ } <b>FT_Orientation</b>;
+</pre>
+</div>
+
+<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>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_orientation_truetype">FT_ORIENTATION_TRUETYPE</td><td class="desc">
+<p>According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must be unfilled.</p>
+</td></tr>
+<tr><td class="val" id="ft_orientation_postscript">FT_ORIENTATION_POSTSCRIPT</td><td class="desc">
+<p>According to the PostScript specification, counter-clockwise contours must be filled, and clockwise ones must be unfilled.</p>
+</td></tr>
+<tr><td class="val" id="ft_orientation_fill_right">FT_ORIENTATION_FILL_RIGHT</td><td class="desc">
+<p>This is identical to <code><a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_TRUETYPE</a></code>, 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><td class="val" id="ft_orientation_fill_left">FT_ORIENTATION_FILL_LEFT</td><td class="desc">
+<p>This is identical to <code><a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_POSTSCRIPT</a></code>, 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><td class="val" id="ft_orientation_none">FT_ORIENTATION_NONE</td><td class="desc">
+<p>The orientation cannot be determined. That is, different parts of the glyph have different orientation.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_outline_get_orientation">FT_Outline_Get_Orientation<a class="headerlink" href="#ft_outline_get_orientation" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_OUTLINE_H (freetype/ftoutln.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>This function analyzes a glyph outline and tries to compute its fill orientation (see <code><a href="ft2-outline_processing.html#ft_orientation">FT_Orientation</a></code>). This is done by integrating the total area covered by the outline. The positive integral corresponds to the clockwise orientation and <code><a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_POSTSCRIPT</a></code> is returned. The negative integral corresponds to the counter-clockwise orientation and <code><a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_TRUETYPE</a></code> is returned.</p>
+<p>Note that this will return <code><a href="ft2-outline_processing.html#ft_orientation">FT_ORIENTATION_TRUETYPE</a></code> for empty outlines.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="outline">outline</td><td class="desc">
+<p>A handle to the source outline.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The orientation.</p>
+<hr>
+
+<h2 id="ft_outline_xxx">FT_OUTLINE_XXX<a class="headerlink" href="#ft_outline_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_none">FT_OUTLINE_NONE</a> 0x0
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_owner">FT_OUTLINE_OWNER</a> 0x1
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_even_odd_fill">FT_OUTLINE_EVEN_ODD_FILL</a> 0x2
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_reverse_fill">FT_OUTLINE_REVERSE_FILL</a> 0x4
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_ignore_dropouts">FT_OUTLINE_IGNORE_DROPOUTS</a> 0x8
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_smart_dropouts">FT_OUTLINE_SMART_DROPOUTS</a> 0x10
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_include_stubs">FT_OUTLINE_INCLUDE_STUBS</a> 0x20
+
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_high_precision">FT_OUTLINE_HIGH_PRECISION</a> 0x100
+#<span class="keyword">define</span> <a href="ft2-outline_processing.html#ft_outline_single_pass">FT_OUTLINE_SINGLE_PASS</a> 0x200
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_OUTLINE_XXX</b>` values instead */
+#<span class="keyword">define</span> ft_outline_none <a href="ft2-outline_processing.html#ft_outline_none">FT_OUTLINE_NONE</a>
+#<span class="keyword">define</span> ft_outline_owner <a href="ft2-outline_processing.html#ft_outline_owner">FT_OUTLINE_OWNER</a>
+#<span class="keyword">define</span> ft_outline_even_odd_fill <a href="ft2-outline_processing.html#ft_outline_even_odd_fill">FT_OUTLINE_EVEN_ODD_FILL</a>
+#<span class="keyword">define</span> ft_outline_reverse_fill <a href="ft2-outline_processing.html#ft_outline_reverse_fill">FT_OUTLINE_REVERSE_FILL</a>
+#<span class="keyword">define</span> ft_outline_ignore_dropouts <a href="ft2-outline_processing.html#ft_outline_ignore_dropouts">FT_OUTLINE_IGNORE_DROPOUTS</a>
+#<span class="keyword">define</span> ft_outline_high_precision <a href="ft2-outline_processing.html#ft_outline_high_precision">FT_OUTLINE_HIGH_PRECISION</a>
+#<span class="keyword">define</span> ft_outline_single_pass <a href="ft2-outline_processing.html#ft_outline_single_pass">FT_OUTLINE_SINGLE_PASS</a>
+</pre>
+</div>
+
+<p>A list of bit-field constants used for the flags in an outline's <code>flags</code> field.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_outline_none">FT_OUTLINE_NONE</td><td class="desc">
+<p>Value&nbsp;0 is reserved.</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_owner">FT_OUTLINE_OWNER</td><td class="desc">
+<p>If set, this flag indicates that the outline's field arrays (i.e., <code>points</code>, <code>flags</code>, and <code>contours</code>) are &lsquo;owned&rsquo; by the outline object, and should thus be freed when it is destroyed.</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_even_odd_fill">FT_OUTLINE_EVEN_ODD_FILL</td><td class="desc">
+<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 rasterizer).</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_reverse_fill">FT_OUTLINE_REVERSE_FILL</td><td class="desc">
+<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><td class="val" id="ft_outline_ignore_dropouts">FT_OUTLINE_IGNORE_DROPOUTS</td><td class="desc">
+<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. See below for more information.</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_smart_dropouts">FT_OUTLINE_SMART_DROPOUTS</td><td class="desc">
+<p>Select smart dropout control. If unset, use simple dropout control. Ignored if <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_IGNORE_DROPOUTS</a></code> is set. See below for more information.</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_include_stubs">FT_OUTLINE_INCLUDE_STUBS</td><td class="desc">
+<p>If set, turn pixels on for &lsquo;stubs&rsquo;, otherwise exclude them. Ignored if <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_IGNORE_DROPOUTS</a></code> is set. See below for more information.</p>
+</td></tr>
+<tr><td class="val" id="ft_outline_high_precision">FT_OUTLINE_HIGH_PRECISION</td><td class="desc">
+<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><td class="val" id="ft_outline_single_pass">FT_OUTLINE_SINGLE_PASS</td><td class="desc">
+<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>
+
+<h4>note</h4>
+
+<p>The flags <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_IGNORE_DROPOUTS</a></code>, <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_SMART_DROPOUTS</a></code>, and <code><a href="ft2-outline_processing.html#ft_outline_xxx">FT_OUTLINE_INCLUDE_STUBS</a></code> are ignored by the smooth rasterizer.</p>
+<p>There exists a second mechanism to pass the drop-out mode to the B/W rasterizer; see the <code>tags</code> field in <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code>.</p>
+<p>Please refer to the description of the &lsquo;SCANTYPE&rsquo; instruction in the OpenType specification (in file <code>ttinst1.doc</code>) how simple drop-outs, smart drop-outs, and stubs are defined.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-list_processing.html" title="List Processing" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ List Processing
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Quick retrieval of advance values
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-parameter_tags.html b/freetype/docs/reference/site/ft2-parameter_tags.html
new file mode 100644
index 00000000..1fb94a54
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-parameter_tags.html
@@ -0,0 +1,1352 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Parameter Tags - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#parameter-tags" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Parameter Tags
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Parameter Tags
+ </label>
+
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link md-nav__link--active">
+ Parameter Tags
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_ignore_typographic_family" title="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY" class="md-nav__link">
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_ignore_typographic_subfamily" title="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY" class="md-nav__link">
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_incremental" title="FT_PARAM_TAG_INCREMENTAL" class="md-nav__link">
+ FT_PARAM_TAG_INCREMENTAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_lcd_filter_weights" title="FT_PARAM_TAG_LCD_FILTER_WEIGHTS" class="md-nav__link">
+ FT_PARAM_TAG_LCD_FILTER_WEIGHTS
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_random_seed" title="FT_PARAM_TAG_RANDOM_SEED" class="md-nav__link">
+ FT_PARAM_TAG_RANDOM_SEED
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_stem_darkening" title="FT_PARAM_TAG_STEM_DARKENING" class="md-nav__link">
+ FT_PARAM_TAG_STEM_DARKENING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_unpatented_hinting" title="FT_PARAM_TAG_UNPATENTED_HINTING" class="md-nav__link">
+ FT_PARAM_TAG_UNPATENTED_HINTING
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_ignore_typographic_family" title="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY" class="md-nav__link">
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_ignore_typographic_subfamily" title="FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY" class="md-nav__link">
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_incremental" title="FT_PARAM_TAG_INCREMENTAL" class="md-nav__link">
+ FT_PARAM_TAG_INCREMENTAL
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_lcd_filter_weights" title="FT_PARAM_TAG_LCD_FILTER_WEIGHTS" class="md-nav__link">
+ FT_PARAM_TAG_LCD_FILTER_WEIGHTS
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_random_seed" title="FT_PARAM_TAG_RANDOM_SEED" class="md-nav__link">
+ FT_PARAM_TAG_RANDOM_SEED
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_stem_darkening" title="FT_PARAM_TAG_STEM_DARKENING" class="md-nav__link">
+ FT_PARAM_TAG_STEM_DARKENING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_unpatented_hinting" title="FT_PARAM_TAG_UNPATENTED_HINTING" class="md-nav__link">
+ FT_PARAM_TAG_UNPATENTED_HINTING
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; Parameter Tags</p>
+<hr />
+<h1 id="parameter-tags">Parameter Tags<a class="headerlink" href="#parameter-tags" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains macros for the <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> structure that are used with various functions to activate some special functionality or different behaviour of various components of FreeType.</p>
+<h2 id="ft_param_tag_ignore_typographic_family">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY<a class="headerlink" href="#ft_param_tag_ignore_typographic_family" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 'i', 'g', 'p', 'f' )
+
+ /* this constant is deprecated */
+#<span class="keyword">define</span> FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \
+ <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY</b>
+</pre>
+</div>
+
+<p>A tag for <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> to make <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> ignore typographic family names in the &lsquo;name&rsquo; table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_param_tag_ignore_typographic_subfamily">FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY<a class="headerlink" href="#ft_param_tag_ignore_typographic_subfamily" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 'i', 'g', 'p', 's' )
+
+ /* this constant is deprecated */
+#<span class="keyword">define</span> FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \
+ <b>FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY</b>
+</pre>
+</div>
+
+<p>A tag for <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> to make <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> ignore typographic subfamily names in the &lsquo;name&rsquo; table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_param_tag_incremental">FT_PARAM_TAG_INCREMENTAL<a class="headerlink" href="#ft_param_tag_incremental" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_INCREMENTAL</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 'i', 'n', 'c', 'r' )
+</pre>
+</div>
+
+<p>An <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> tag to be used with <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code> to indicate incremental glyph loading.</p>
+<hr>
+
+<h2 id="ft_param_tag_lcd_filter_weights">FT_PARAM_TAG_LCD_FILTER_WEIGHTS<a class="headerlink" href="#ft_param_tag_lcd_filter_weights" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_LCD_FILTER_WEIGHTS</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 'l', 'c', 'd', 'f' )
+</pre>
+</div>
+
+<p>An <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> tag to be used with <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code>. The corresponding argument specifies the five LCD filter weights for a given face (if using <code><a href="ft2-base_interface.html#ft_load_target_xxx">FT_LOAD_TARGET_LCD</a></code>, for example), overriding the global default values or the values set up with <code><a href="ft2-lcd_rendering.html#ft_library_setlcdfilterweights">FT_Library_SetLcdFilterWeights</a></code>.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_param_tag_random_seed">FT_PARAM_TAG_RANDOM_SEED<a class="headerlink" href="#ft_param_tag_random_seed" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_RANDOM_SEED</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 's', 'e', 'e', 'd' )
+</pre>
+</div>
+
+<p>An <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> tag to be used with <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code>. The corresponding 32bit signed integer argument overrides the font driver's random seed value with a face-specific one; see <code><a href="ft2-properties.html#random-seed">random-seed</a></code>.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_param_tag_stem_darkening">FT_PARAM_TAG_STEM_DARKENING<a class="headerlink" href="#ft_param_tag_stem_darkening" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_PARAM_TAG_STEM_DARKENING</b> \
+ <a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a>( 'd', 'a', 'r', 'k' )
+</pre>
+</div>
+
+<p>An <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> tag to be used with <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code>. The corresponding Boolean argument specifies whether to apply stem darkening, overriding the global default values or the values set up with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> (see <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code>).</p>
+<p>This is a passive setting that only takes effect if the font driver or autohinter honors it, which the CFF, Type&nbsp;1, and CID drivers always do, but the autohinter only in &lsquo;light&rsquo; hinting mode (as of version 2.9).</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_param_tag_unpatented_hinting">FT_PARAM_TAG_UNPATENTED_HINTING<a class="headerlink" href="#ft_param_tag_unpatented_hinting" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <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>
+</div>
+
+<p>Deprecated, no effect.</p>
+<p>Previously: A constant used as the tag of an <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-properties.html" title="Driver properties" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Driver properties
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Subpixel Rendering
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-pcf_driver.html b/freetype/docs/reference/site/ft2-pcf_driver.html
new file mode 100644
index 00000000..75a32f96
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-pcf_driver.html
@@ -0,0 +1,1154 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The PCF driver - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-pcf-driver" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The PCF driver
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The PCF driver
+ </label>
+
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link md-nav__link--active">
+ The PCF driver
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The PCF driver</p>
+<hr />
+<h1 id="the-pcf-driver">The PCF driver<a class="headerlink" href="#the-pcf-driver" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>While FreeType's PCF driver doesn't expose API functions by itself, it is possible to control its behaviour with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>. Right now, there is a single property <code><a href="ft2-properties.html#no-long-family-names">no-long-family-names</a></code> available if FreeType is compiled with PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.</p>
+<p>The PCF driver's module name is &lsquo;pcf&rsquo;.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The TrueType driver
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-properties.html" title="Driver properties" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Driver properties
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-pfr_fonts.html b/freetype/docs/reference/site/ft2-pfr_fonts.html
new file mode 100644
index 00000000..19e3dd4c
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-pfr_fonts.html
@@ -0,0 +1,1324 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>PFR Fonts - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#pfr-fonts" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ PFR Fonts
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ PFR Fonts
+ </label>
+
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link md-nav__link--active">
+ PFR Fonts
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_metrics" title="FT_Get_PFR_Metrics" class="md-nav__link">
+ FT_Get_PFR_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_kerning" title="FT_Get_PFR_Kerning" class="md-nav__link">
+ FT_Get_PFR_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_advance" title="FT_Get_PFR_Advance" class="md-nav__link">
+ FT_Get_PFR_Advance
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_metrics" title="FT_Get_PFR_Metrics" class="md-nav__link">
+ FT_Get_PFR_Metrics
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_kerning" title="FT_Get_PFR_Kerning" class="md-nav__link">
+ FT_Get_PFR_Kerning
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_pfr_advance" title="FT_Get_PFR_Advance" class="md-nav__link">
+ FT_Get_PFR_Advance
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; PFR Fonts</p>
+<hr />
+<h1 id="pfr-fonts">PFR Fonts<a class="headerlink" href="#pfr-fonts" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of PFR-specific functions.</p>
+<h2 id="ft_get_pfr_metrics">FT_Get_PFR_Metrics<a class="headerlink" href="#ft_get_pfr_metrics" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the outline and metrics resolutions of a given PFR face.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>Handle to the input face. It can be a non-PFR face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aoutline_resolution">aoutline_resolution</td><td class="desc">
+<p>Outline resolution. This is equivalent to <code>face-&gt;units_per_EM</code> for non-PFR fonts. Optional (parameter can be <code>NULL</code>).</p>
+</td></tr>
+<tr><td class="val" id="ametrics_resolution">ametrics_resolution</td><td class="desc">
+<p>Metrics resolution. This is equivalent to <code>outline_resolution</code> for non-PFR fonts. Optional (parameter can be <code>NULL</code>).</p>
+</td></tr>
+<tr><td class="val" id="ametrics_x_scale">ametrics_x_scale</td><td class="desc">
+<p>A 16.16 fixed-point number used to scale distance expressed in metrics units to device subpixels. This is equivalent to <code>face-&gt;size-&gt;x_scale</code>, but for metrics only. Optional (parameter can be <code>NULL</code>).</p>
+</td></tr>
+<tr><td class="val" id="ametrics_y_scale">ametrics_y_scale</td><td class="desc">
+<p>Same as <code>ametrics_x_scale</code> but for the vertical direction. optional (parameter can be <code>NULL</code>).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<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>
+<hr>
+
+<h2 id="ft_get_pfr_kerning">FT_Get_PFR_Kerning<a class="headerlink" href="#ft_get_pfr_kerning" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the kerning pair corresponding to two glyphs in a PFR face. The distance is expressed in metrics units, unlike the result of <code><a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="left">left</td><td class="desc">
+<p>Index of the left glyph.</p>
+</td></tr>
+<tr><td class="val" id="right">right</td><td class="desc">
+<p>Index of the right glyph.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="avector">avector</td><td class="desc">
+<p>A kerning vector.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function always return distances in original PFR metrics units. This is unlike <code><a href="ft2-base_interface.html#ft_get_kerning">FT_Get_Kerning</a></code> with the <code><a href="ft2-base_interface.html#ft_kerning_mode">FT_KERNING_UNSCALED</a></code> mode, which always returns distances converted to outline units.</p>
+<p>You can use the value of the <code>x_scale</code> and <code>y_scale</code> parameters returned by <code><a href="ft2-pfr_fonts.html#ft_get_pfr_metrics">FT_Get_PFR_Metrics</a></code> to scale these to device subpixels.</p>
+<hr>
+
+<h2 id="ft_get_pfr_advance">FT_Get_PFR_Advance<a class="headerlink" href="#ft_get_pfr_advance" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_PFR_H (freetype/ftpfr.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a given glyph advance, expressed in original metrics units, from a PFR font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aadvance">aadvance</td><td class="desc">
+<p>The glyph advance in metrics units.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You can use the <code>x_scale</code> or <code>y_scale</code> results of <code><a href="ft2-pfr_fonts.html#ft_get_pfr_metrics">FT_Get_PFR_Metrics</a></code> to convert the advance to device subpixels (i.e., 1/64<sup>th</sup> of pixels).</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ CID Fonts
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Window FNT Files
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-properties.html b/freetype/docs/reference/site/ft2-properties.html
new file mode 100644
index 00000000..8b0f7554
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-properties.html
@@ -0,0 +1,1919 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Driver properties - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#driver-properties" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Driver properties
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Driver properties
+ </label>
+
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link md-nav__link--active">
+ Driver properties
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_hinting_xxx" title="FT_HINTING_XXX" class="md-nav__link">
+ FT_HINTING_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#hinting-engine" title="hinting-engine" class="md-nav__link">
+ hinting-engine
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#no-stem-darkening" title="no-stem-darkening" class="md-nav__link">
+ no-stem-darkening
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#darkening-parameters" title="darkening-parameters" class="md-nav__link">
+ darkening-parameters
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#random-seed" title="random-seed" class="md-nav__link">
+ random-seed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#no-long-family-names" title="no-long-family-names" class="md-nav__link">
+ no-long-family-names
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_interpreter_version_xxx" title="TT_INTERPRETER_VERSION_XXX" class="md-nav__link">
+ TT_INTERPRETER_VERSION_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#interpreter-version" title="interpreter-version" class="md-nav__link">
+ interpreter-version
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#glyph-to-script-map" title="glyph-to-script-map" class="md-nav__link">
+ glyph-to-script-map
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_autohinter_script_xxx" title="FT_AUTOHINTER_SCRIPT_XXX" class="md-nav__link">
+ FT_AUTOHINTER_SCRIPT_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_prop_glyphtoscriptmap" title="FT_Prop_GlyphToScriptMap" class="md-nav__link">
+ FT_Prop_GlyphToScriptMap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#fallback-script" title="fallback-script" class="md-nav__link">
+ fallback-script
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#default-script" title="default-script" class="md-nav__link">
+ default-script
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#increase-x-height" title="increase-x-height" class="md-nav__link">
+ increase-x-height
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_prop_increasexheight" title="FT_Prop_IncreaseXHeight" class="md-nav__link">
+ FT_Prop_IncreaseXHeight
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#warping" title="warping" class="md-nav__link">
+ warping
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_hinting_xxx" title="FT_HINTING_XXX" class="md-nav__link">
+ FT_HINTING_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#hinting-engine" title="hinting-engine" class="md-nav__link">
+ hinting-engine
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#no-stem-darkening" title="no-stem-darkening" class="md-nav__link">
+ no-stem-darkening
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#darkening-parameters" title="darkening-parameters" class="md-nav__link">
+ darkening-parameters
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#random-seed" title="random-seed" class="md-nav__link">
+ random-seed
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#no-long-family-names" title="no-long-family-names" class="md-nav__link">
+ no-long-family-names
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_interpreter_version_xxx" title="TT_INTERPRETER_VERSION_XXX" class="md-nav__link">
+ TT_INTERPRETER_VERSION_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#interpreter-version" title="interpreter-version" class="md-nav__link">
+ interpreter-version
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#glyph-to-script-map" title="glyph-to-script-map" class="md-nav__link">
+ glyph-to-script-map
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_autohinter_script_xxx" title="FT_AUTOHINTER_SCRIPT_XXX" class="md-nav__link">
+ FT_AUTOHINTER_SCRIPT_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_prop_glyphtoscriptmap" title="FT_Prop_GlyphToScriptMap" class="md-nav__link">
+ FT_Prop_GlyphToScriptMap
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#fallback-script" title="fallback-script" class="md-nav__link">
+ fallback-script
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#default-script" title="default-script" class="md-nav__link">
+ default-script
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#increase-x-height" title="increase-x-height" class="md-nav__link">
+ increase-x-height
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_prop_increasexheight" title="FT_Prop_IncreaseXHeight" class="md-nav__link">
+ FT_Prop_IncreaseXHeight
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#warping" title="warping" class="md-nav__link">
+ warping
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; Driver properties</p>
+<hr />
+<h1 id="driver-properties">Driver properties<a class="headerlink" href="#driver-properties" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>Driver modules can be controlled by setting and unsetting properties, using the functions <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>. This section documents the available properties, together with auxiliary macros and structures.</p>
+<h2 id="ft_hinting_xxx">FT_HINTING_XXX<a class="headerlink" href="#ft_hinting_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_hinting_freetype">FT_HINTING_FREETYPE</a> 0
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_hinting_adobe">FT_HINTING_ADOBE</a> 1
+
+ /* these constants (introduced in 2.4.12) are deprecated */
+#<span class="keyword">define</span> FT_CFF_HINTING_FREETYPE <a href="ft2-properties.html#ft_hinting_freetype">FT_HINTING_FREETYPE</a>
+#<span class="keyword">define</span> FT_CFF_HINTING_ADOBE <a href="ft2-properties.html#ft_hinting_adobe">FT_HINTING_ADOBE</a>
+</pre>
+</div>
+
+<p>A list of constants used for the <code><a href="ft2-properties.html#hinting-engine">hinting-engine</a></code> property to select the hinting engine for CFF, Type&nbsp;1, and CID fonts.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_hinting_freetype">FT_HINTING_FREETYPE</td><td class="desc">
+<p>Use the old FreeType hinting engine.</p>
+</td></tr>
+<tr><td class="val" id="ft_hinting_adobe">FT_HINTING_ADOBE</td><td class="desc">
+<p>Use the hinting engine contributed by Adobe.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.9</p>
+<hr>
+
+<h2 id="hinting-engine">hinting-engine<a class="headerlink" href="#hinting-engine" title="Permanent link">&para;</a></h2>
+<p>Thanks to Adobe, which contributed a new hinting (and parsing) engine, an application can select between &lsquo;freetype&rsquo; and &lsquo;adobe&rsquo; if compiled with <code>CFF_CONFIG_OPTION_OLD_ENGINE</code>. If this configuration macro isn't defined, &lsquo;hinting-engine&rsquo; does nothing.</p>
+<p>The same holds for the Type&nbsp;1 and CID modules if compiled with <code>T1_CONFIG_OPTION_OLD_ENGINE</code>.</p>
+<p>For the &lsquo;cff&rsquo; module, the default engine is &lsquo;freetype&rsquo; if <code>CFF_CONFIG_OPTION_OLD_ENGINE</code> is defined, and &lsquo;adobe&rsquo; otherwise.</p>
+<p>For both the &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules, the default engine is &lsquo;freetype&rsquo; if <code>T1_CONFIG_OPTION_OLD_ENGINE</code> is defined, and &lsquo;adobe&rsquo; otherwise.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable (using values &lsquo;adobe&rsquo; or &lsquo;freetype&rsquo;).</p>
+<h4>example</h4>
+
+<p>The following example code demonstrates how to select Adobe's hinting engine for the &lsquo;cff&rsquo; module (omitting the error handling).
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_UInt hinting_engine = FT_HINTING_ADOBE;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;cff&quot;,
+ &quot;hinting-engine&quot;, &amp;hinting_engine );
+</pre></div></p>
+<h4>since</h4>
+
+<p>2.4.12 (for &lsquo;cff&rsquo; module)</p>
+<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
+<hr>
+
+<h2 id="no-stem-darkening">no-stem-darkening<a class="headerlink" href="#no-stem-darkening" title="Permanent link">&para;</a></h2>
+<p>All glyphs that pass through the auto-hinter will be emboldened unless this property is set to TRUE. The same is true for the CFF, Type&nbsp;1, and CID font modules if the &lsquo;Adobe&rsquo; engine is selected (which is the default).</p>
+<p>Stem darkening emboldens glyphs at smaller sizes to make them more readable on common low-DPI screens when using linear alpha blending and gamma correction, see <code><a href="ft2-base_interface.html#ft_render_glyph">FT_Render_Glyph</a></code>. When not using linear alpha blending and gamma correction, glyphs will appear heavy and fuzzy!</p>
+<p>Gamma correction essentially lightens fonts since shades of grey are shifted to higher pixel values (=&nbsp;higher brightness) to match the original intention to the reality of our screens. The side-effect is that glyphs &lsquo;thin out&rsquo;. Mac OS&nbsp;X and Adobe's proprietary font rendering library implement a counter-measure: stem darkening at smaller sizes where shades of gray dominate. By emboldening a glyph slightly in relation to its pixel size, individual pixels get higher coverage of filled-in outlines and are therefore &lsquo;blacker&rsquo;. This counteracts the &lsquo;thinning out&rsquo; of glyphs, making text remain readable at smaller sizes.</p>
+<p>By default, the Adobe engines for CFF, Type&nbsp;1, and CID fonts darken stems at smaller sizes, regardless of hinting, to enhance contrast. Setting this property, stem darkening gets switched off.</p>
+<p>For the auto-hinter, stem-darkening is experimental currently and thus switched off by default (this is, <code>no-stem-darkening</code> is set to TRUE by default). Total consistency with the CFF driver is not achieved right now because the emboldening method differs and glyphs must be scaled down on the Y-axis to keep outline points inside their precomputed blue zones. The smaller the size (especially 9ppem and down), the higher the loss of emboldening versus the CFF driver.</p>
+<p>Note that stem darkening is never applied if <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_NO_SCALE</a></code> is set.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively). It can also be set per face using <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code> with <code><a href="ft2-parameter_tags.html#ft_param_tag_stem_darkening">FT_PARAM_TAG_STEM_DARKENING</a></code>.</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Bool no_stem_darkening = TRUE;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;cff&quot;,
+ &quot;no-stem-darkening&quot;, &amp;no_stem_darkening );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.4.12 (for &lsquo;cff&rsquo; module)</p>
+<p>2.6.2 (for &lsquo;autofitter&rsquo; module)</p>
+<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
+<hr>
+
+<h2 id="darkening-parameters">darkening-parameters<a class="headerlink" href="#darkening-parameters" title="Permanent link">&para;</a></h2>
+<p>By default, the Adobe hinting engine, as used by the CFF, Type&nbsp;1, and CID font drivers, darkens stems as follows (if the <code>no-stem-darkening</code> property isn't set):
+<div class="codehilite"><pre><span></span> stem width &lt;= 0.5px: darkening amount = 0.4px
+ stem width = 1px: darkening amount = 0.275px
+ stem width = 1.667px: darkening amount = 0.275px
+ stem width &gt;= 2.333px: darkening amount = 0px
+</pre></div></p>
+<p>and piecewise linear in-between. At configuration time, these four control points can be set with the macro <code>CFF_CONFIG_OPTION_DARKENING_PARAMETERS</code>; the CFF, Type&nbsp;1, and CID drivers share these values. At runtime, the control points can be changed using the <code>darkening-parameters</code> property (see the example below that demonstrates this for the Type&nbsp;1 driver).</p>
+<p>The x&nbsp;values give the stem width, and the y&nbsp;values the darkening amount. The unit is 1000<sup>th</sup> of pixels. All coordinate values must be positive; the x&nbsp;values must be monotonically increasing; the y&nbsp;values must be monotonically decreasing and smaller than or equal to 500 (corresponding to half a pixel); the slope of each linear piece must be shallower than -1 (e.g., -.4).</p>
+<p>The auto-hinter provides this property, too, as an experimental feature. See <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code> for more.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable, using eight comma-separated integers without spaces. Here the above example, using <code>\</code> to break the line for readability.
+<div class="codehilite"><pre><span></span> FREETYPE_PROPERTIES=\
+ type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
+</pre></div></p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Int darken_params[8] = { 500, 300, // x1, y1
+ 1000, 200, // x2, y2
+ 1500, 100, // x3, y3
+ 2000, 0 }; // x4, y4
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;type1&quot;,
+ &quot;darkening-parameters&quot;, darken_params );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.5.1 (for &lsquo;cff&rsquo; module)</p>
+<p>2.6.2 (for &lsquo;autofitter&rsquo; module)</p>
+<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
+<hr>
+
+<h2 id="random-seed">random-seed<a class="headerlink" href="#random-seed" title="Permanent link">&para;</a></h2>
+<p>By default, the seed value for the CFF &lsquo;random&rsquo; operator and the similar &lsquo;0 28 callothersubr pop&rsquo; command for the Type&nbsp;1 and CID drivers is set to a random value. However, mainly for debugging purposes, it is often necessary to use a known value as a seed so that the pseudo-random number sequences generated by &lsquo;random&rsquo; are repeatable.</p>
+<p>The <code>random-seed</code> property does that. Its argument is a signed 32bit integer; if the value is zero or negative, the seed given by the <code>intitialRandomSeed</code> private DICT operator in a CFF file gets used (or a default value if there is no such operator). If the value is positive, use it instead of <code>initialRandomSeed</code>, which is consequently ignored.</p>
+<h4>note</h4>
+
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable. It can also be set per face using <code><a href="ft2-base_interface.html#ft_face_properties">FT_Face_Properties</a></code> with <code><a href="ft2-parameter_tags.html#ft_param_tag_random_seed">FT_PARAM_TAG_RANDOM_SEED</a></code>.</p>
+<h4>since</h4>
+
+<p>2.8 (for &lsquo;cff&rsquo; module)</p>
+<p>2.9 (for &lsquo;type1&rsquo; and &lsquo;t1cid&rsquo; modules)</p>
+<hr>
+
+<h2 id="no-long-family-names">no-long-family-names<a class="headerlink" href="#no-long-family-names" title="Permanent link">&para;</a></h2>
+<p>If <code>PCF_CONFIG_OPTION_LONG_FAMILY_NAMES</code> is active while compiling FreeType, the PCF driver constructs long family names.</p>
+<p>There are many PCF fonts just called &lsquo;Fixed&rsquo; which look completely different, and which have nothing to do with each other. When selecting &lsquo;Fixed&rsquo; in KDE or Gnome one gets results that appear rather random, the style changes often if one changes the size and one cannot select some fonts at all. The improve this situation, the PCF module prepends the foundry name (plus a space) to the family name. It also checks whether there are &lsquo;wide&rsquo; characters; all put together, family names like &lsquo;Sony Fixed&rsquo; or &lsquo;Misc Fixed Wide&rsquo; are constructed.</p>
+<p>If <code>no-long-family-names</code> is set, this feature gets switched off.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively).</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Bool no_long_family_names = TRUE;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;pcf&quot;,
+ &quot;no-long-family-names&quot;,
+ &amp;no_long_family_names );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="tt_interpreter_version_xxx">TT_INTERPRETER_VERSION_XXX<a class="headerlink" href="#tt_interpreter_version_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-properties.html#tt_interpreter_version_35">TT_INTERPRETER_VERSION_35</a> 35
+#<span class="keyword">define</span> <a href="ft2-properties.html#tt_interpreter_version_38">TT_INTERPRETER_VERSION_38</a> 38
+#<span class="keyword">define</span> <a href="ft2-properties.html#tt_interpreter_version_40">TT_INTERPRETER_VERSION_40</a> 40
+</pre>
+</div>
+
+<p>A list of constants used for the <code><a href="ft2-properties.html#interpreter-version">interpreter-version</a></code> property to select the hinting engine for Truetype fonts.</p>
+<p>The numeric value in the constant names represents the version number as returned by the &lsquo;GETINFO&rsquo; bytecode instruction.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="tt_interpreter_version_35">TT_INTERPRETER_VERSION_35</td><td class="desc">
+<p>Version&nbsp;35 corresponds to MS rasterizer v.1.7 as used e.g. in Windows&nbsp;98; only grayscale and B/W rasterizing is supported.</p>
+</td></tr>
+<tr><td class="val" id="tt_interpreter_version_38">TT_INTERPRETER_VERSION_38</td><td class="desc">
+<p>Version&nbsp;38 corresponds to MS rasterizer v.1.9; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in the Internet Explorer&nbsp;9 running on Windows&nbsp;7). It is used in FreeType to select the &lsquo;Infinality&rsquo; subpixel hinting code. The code may be removed in a future version.</p>
+</td></tr>
+<tr><td class="val" id="tt_interpreter_version_40">TT_INTERPRETER_VERSION_40</td><td class="desc">
+<p>Version&nbsp;40 corresponds to MS rasterizer v.2.1; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in Microsoft's Edge Browser on Windows&nbsp;10). It is used in FreeType to select the &lsquo;minimal&rsquo; subpixel hinting code, a stripped-down and higher performance version of the &lsquo;Infinality&rsquo; code.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This property controls the behaviour of the bytecode interpreter and thus how outlines get hinted. It does <strong>not</strong> control how glyph get rasterized! In particular, it does not control subpixel color filtering.</p>
+<p>If FreeType has not been compiled with the configuration option <code>TT_CONFIG_OPTION_SUBPIXEL_HINTING</code>, selecting version&nbsp;38 or&nbsp;40 causes an <code>FT_Err_Unimplemented_Feature</code> error.</p>
+<p>Depending on the graphics framework, Microsoft uses different bytecode and rendering engines. As a consequence, the version numbers returned by a call to the &lsquo;GETINFO&rsquo; bytecode instruction are more convoluted than desired.</p>
+<p>Here are two tables that try to shed some light on the possible values for the MS rasterizer engine, together with the additional features introduced by it.
+<div class="codehilite"><pre><span></span> GETINFO framework version feature
+ -------------------------------------------------------------------
+ 3 GDI (Win 3.1), v1.0 16-bit, first version
+ TrueImage
+ 33 GDI (Win NT 3.1), v1.5 32-bit
+ HP Laserjet
+ 34 GDI (Win 95) v1.6 font smoothing,
+ new SCANTYPE opcode
+ 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
+ bits in composite glyphs
+ 36 MGDI (Win CE 2) v1.6+ classic ClearType
+ 37 GDI (XP and later), v1.8 ClearType
+ GDI+ old (before Vista)
+ 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
+ WPF Y-direction ClearType,
+ additional error checking
+ 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
+ in GETINFO opcode,
+ bug fixes
+ 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
+ DWrite (Win 8) in GETINFO opcode,
+ Gray ClearType
+</pre></div></p>
+<p>The &lsquo;version&rsquo; field gives a rough orientation only, since some applications provided certain features much earlier (as an example, Microsoft Reader used subpixel and Y-direction ClearType already in Windows 2000). Similarly, updates to a given framework might include improved hinting support.
+<div class="codehilite"><pre><span></span> version sampling rendering comment
+ x y x y
+ --------------------------------------------------------------
+ v1.0 normal normal B/W B/W bi-level
+ v1.6 high high gray gray grayscale
+ v1.8 high normal color-filter B/W (GDI) ClearType
+ v1.9 high high color-filter gray Color ClearType
+ v2.1 high normal gray B/W Gray ClearType
+ v2.1 high high gray gray Gray ClearType
+</pre></div></p>
+<p>Color and Gray ClearType are the two available variants of &lsquo;Y-direction ClearType&rsquo;, meaning grayscale rasterization along the Y-direction; the name used in the TrueType specification for this feature is &lsquo;symmetric smoothing&rsquo;. &lsquo;Classic ClearType&rsquo; is the original algorithm used before introducing a modified version in Win&nbsp;XP. Another name for v1.6's grayscale rendering is &lsquo;font smoothing&rsquo;, and &lsquo;Color ClearType&rsquo; is sometimes also called &lsquo;DWrite ClearType&rsquo;. To differentiate between today's Color ClearType and the earlier ClearType variant with B/W rendering along the vertical axis, the latter is sometimes called &lsquo;GDI ClearType&rsquo;.</p>
+<p>&lsquo;Normal&rsquo; and &lsquo;high&rsquo; sampling describe the (virtual) resolution to access the rasterized outline after the hinting process. &lsquo;Normal&rsquo; means 1 sample per grid line (i.e., B/W). In the current Microsoft implementation, &lsquo;high&rsquo; means an extra virtual resolution of 16x16 (or 16x1) grid lines per pixel for bytecode instructions like &lsquo;MIRP&rsquo;. After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid lines for color filtering if Color ClearType is activated.</p>
+<p>Note that &lsquo;Gray ClearType&rsquo; is essentially the same as v1.6's grayscale rendering. However, the GETINFO instruction handles it differently: v1.6 returns bit&nbsp;12 (hinting for grayscale), while v2.1 returns bits&nbsp;13 (hinting for ClearType), 18 (symmetrical smoothing), and&nbsp;19 (Gray ClearType). Also, this mode respects bits 2 and&nbsp;3 for the version&nbsp;1 gasp table exclusively (like Color ClearType), while v1.6 only respects the values of version&nbsp;0 (bits 0 and&nbsp;1).</p>
+<p>Keep in mind that the features of the above interpreter versions might not map exactly to FreeType features or behavior because it is a fundamentally different library with different internals.</p>
+<hr>
+
+<h2 id="interpreter-version">interpreter-version<a class="headerlink" href="#interpreter-version" title="Permanent link">&para;</a></h2>
+<p>Currently, three versions are available, two representing the bytecode interpreter with subpixel hinting support (old &lsquo;Infinality&rsquo; code and new stripped-down and higher performance &lsquo;minimal&rsquo; code) and one without, respectively. The default is subpixel support if <code>TT_CONFIG_OPTION_SUBPIXEL_HINTING</code> is defined, and no subpixel support otherwise (since it isn't available then).</p>
+<p>If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering (except if &lsquo;native ClearType&rsquo; is selected by the font). Microsoft's main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) tweaks in Microsoft's interpreter.</p>
+<p>Details on subpixel hinting and some of the necessary tweaks can be found in Greg Hitchcock's whitepaper at &lsquo;<a href="https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx">https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx</a>&rsquo;. Note that FreeType currently doesn't really &lsquo;subpixel hint&rsquo; (6x1, 6x2, or 6x5 supersampling) like discussed in the paper. Depending on the chosen interpreter, it simply ignores instructions on vertical stems to arrive at very similar results.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable (using values &lsquo;35&rsquo;, &lsquo;38&rsquo;, or &lsquo;40&rsquo;).</p>
+<h4>example</h4>
+
+<p>The following example code demonstrates how to deactivate subpixel hinting (omitting the error handling).
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Face face;
+ FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;truetype&quot;,
+ &quot;interpreter-version&quot;,
+ &amp;interpreter_version );
+</pre></div></p>
+<h4>since</h4>
+
+<p>2.5</p>
+<hr>
+
+<h2 id="glyph-to-script-map">glyph-to-script-map<a class="headerlink" href="#glyph-to-script-map" title="Permanent link">&para;</a></h2>
+<p><strong>Experimental only</strong></p>
+<p>The auto-hinter provides various script modules to hint glyphs. Examples of supported scripts are Latin or CJK. Before a glyph is auto-hinted, the Unicode character map of the font gets examined, and the script is then determined based on Unicode character ranges, see below.</p>
+<p>OpenType fonts, however, often provide much more glyphs than character codes (small caps, superscripts, ligatures, swashes, etc.), to be controlled by so-called &lsquo;features&rsquo;. Handling OpenType features can be quite complicated and thus needs a separate library on top of FreeType.</p>
+<p>The mapping between glyph indices and scripts (in the auto-hinter sense, see the <code><a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_XXX</a></code> values) is stored as an array with <code>num_glyphs</code> elements, as found in the font's <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> structure. The <code>glyph-to-script-map</code> property returns a pointer to this array, which can be modified as needed. Note that the modification should happen before the first glyph gets processed by the auto-hinter so that the global analysis of the font shapes actually uses the modified mapping.</p>
+<h4>example</h4>
+
+<p>The following example code demonstrates how to access it (omitting the error handling).
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Face face;
+ FT_Prop_GlyphToScriptMap prop;
+
+
+ FT_Init_FreeType( &amp;library );
+ FT_New_Face( library, &quot;foo.ttf&quot;, 0, &amp;face );
+
+ prop.face = face;
+
+ FT_Property_Get( library, &quot;autofitter&quot;,
+ &quot;glyph-to-script-map&quot;, &amp;prop );
+
+ // adjust `prop.map&#39; as needed right here
+
+ FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
+</pre></div></p>
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_XXX<a class="headerlink" href="#ft_autohinter_script_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_autohinter_script_none">FT_AUTOHINTER_SCRIPT_NONE</a> 0
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_autohinter_script_latin">FT_AUTOHINTER_SCRIPT_LATIN</a> 1
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_autohinter_script_cjk">FT_AUTOHINTER_SCRIPT_CJK</a> 2
+#<span class="keyword">define</span> <a href="ft2-properties.html#ft_autohinter_script_indic">FT_AUTOHINTER_SCRIPT_INDIC</a> 3
+</pre>
+</div>
+
+<p><strong>Experimental only</strong></p>
+<p>A list of constants used for the <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code> property to specify the script submodule the auto-hinter should use for hinting a particular glyph.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_autohinter_script_none">FT_AUTOHINTER_SCRIPT_NONE</td><td class="desc">
+<p>Don't auto-hint this glyph.</p>
+</td></tr>
+<tr><td class="val" id="ft_autohinter_script_latin">FT_AUTOHINTER_SCRIPT_LATIN</td><td class="desc">
+<p>Apply the latin auto-hinter. For the auto-hinter, &lsquo;latin&rsquo; is a very broad term, including Cyrillic and Greek also since characters from those scripts share the same design constraints.</p>
+<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
+<pre><code> U+0020 - U+007F // Basic Latin (no control characters)
+ U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
+ U+0100 - U+017F // Latin Extended-A
+ U+0180 - U+024F // Latin Extended-B
+ U+0250 - U+02AF // IPA Extensions
+ U+02B0 - U+02FF // Spacing Modifier Letters
+ U+0300 - U+036F // Combining Diacritical Marks
+ U+0370 - U+03FF // Greek and Coptic
+ U+0400 - U+04FF // Cyrillic
+ U+0500 - U+052F // Cyrillic Supplement
+ U+1D00 - U+1D7F // Phonetic Extensions
+ U+1D80 - U+1DBF // Phonetic Extensions Supplement
+ U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
+ U+1E00 - U+1EFF // Latin Extended Additional
+ U+1F00 - U+1FFF // Greek Extended
+ U+2000 - U+206F // General Punctuation
+ U+2070 - U+209F // Superscripts and Subscripts
+ U+20A0 - U+20CF // Currency Symbols
+ U+2150 - U+218F // Number Forms
+ U+2460 - U+24FF // Enclosed Alphanumerics
+ U+2C60 - U+2C7F // Latin Extended-C
+ U+2DE0 - U+2DFF // Cyrillic Extended-A
+ U+2E00 - U+2E7F // Supplemental Punctuation
+ U+A640 - U+A69F // Cyrillic Extended-B
+ U+A720 - U+A7FF // Latin Extended-D
+ U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
+ U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
+ U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
+</code></pre>
+</td></tr>
+<tr><td class="val" id="ft_autohinter_script_cjk">FT_AUTOHINTER_SCRIPT_CJK</td><td class="desc">
+<p>Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old Vietnamese, and some other scripts.</p>
+<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
+<pre><code> U+1100 - U+11FF // Hangul Jamo
+ U+2E80 - U+2EFF // CJK Radicals Supplement
+ U+2F00 - U+2FDF // Kangxi Radicals
+ U+2FF0 - U+2FFF // Ideographic Description Characters
+ U+3000 - U+303F // CJK Symbols and Punctuation
+ U+3040 - U+309F // Hiragana
+ U+30A0 - U+30FF // Katakana
+ U+3100 - U+312F // Bopomofo
+ U+3130 - U+318F // Hangul Compatibility Jamo
+ U+3190 - U+319F // Kanbun
+ U+31A0 - U+31BF // Bopomofo Extended
+ U+31C0 - U+31EF // CJK Strokes
+ U+31F0 - U+31FF // Katakana Phonetic Extensions
+ U+3200 - U+32FF // Enclosed CJK Letters and Months
+ U+3300 - U+33FF // CJK Compatibility
+ U+3400 - U+4DBF // CJK Unified Ideographs Extension A
+ U+4DC0 - U+4DFF // Yijing Hexagram Symbols
+ U+4E00 - U+9FFF // CJK Unified Ideographs
+ U+A960 - U+A97F // Hangul Jamo Extended-A
+ U+AC00 - U+D7AF // Hangul Syllables
+ U+D7B0 - U+D7FF // Hangul Jamo Extended-B
+ U+F900 - U+FAFF // CJK Compatibility Ideographs
+ U+FE10 - U+FE1F // Vertical forms
+ U+FE30 - U+FE4F // CJK Compatibility Forms
+ U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
+ U+1B000 - U+1B0FF // Kana Supplement
+ U+1D300 - U+1D35F // Tai Xuan Hing Symbols
+ U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
+ U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
+ U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
+ U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
+ U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
+</code></pre>
+</td></tr>
+<tr><td class="val" id="ft_autohinter_script_indic">FT_AUTOHINTER_SCRIPT_INDIC</td><td class="desc">
+<p>Apply the indic auto-hinter, covering all major scripts from the Indian sub-continent and some other related scripts like Thai, Lao, or Tibetan.</p>
+<p>By default, characters from the following Unicode ranges are assigned to this submodule.</p>
+<pre><code> U+0900 - U+0DFF // Indic Range
+ U+0F00 - U+0FFF // Tibetan
+ U+1900 - U+194F // Limbu
+ U+1B80 - U+1BBF // Sundanese
+ U+A800 - U+A82F // Syloti Nagri
+ U+ABC0 - U+ABFF // Meetei Mayek
+ U+11800 - U+118DF // Sharada
+</code></pre>
+<p>Note that currently Indic support is rudimentary only, missing blue zone support.</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="ft_prop_glyphtoscriptmap">FT_Prop_GlyphToScriptMap<a class="headerlink" href="#ft_prop_glyphtoscriptmap" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Prop_GlyphToScriptMap_
+ {
+ <a href="ft2-base_interface.html#ft_face">FT_Face</a> face;
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a>* map;
+
+ } <b>FT_Prop_GlyphToScriptMap</b>;
+</pre>
+</div>
+
+<p><strong>Experimental only</strong></p>
+<p>The data exchange structure for the <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code> property.</p>
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="fallback-script">fallback-script<a class="headerlink" href="#fallback-script" title="Permanent link">&para;</a></h2>
+<p><strong>Experimental only</strong></p>
+<p>If no auto-hinter script module can be assigned to a glyph, a fallback script gets assigned to it (see also the <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code> property). By default, this is <code><a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_CJK</a></code>. Using the <code>fallback-script</code> property, this fallback value can be changed.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the fallback script value gets triggered either by setting or reading a face-specific property like <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code>, or by auto-hinting any glyph from that face. In particular, if you have already created an <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> structure but not loaded any glyph (using the auto-hinter), a change of the fallback script will affect this face.</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;autofitter&quot;,
+ &quot;fallback-script&quot;, &amp;fallback_script );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="default-script">default-script<a class="headerlink" href="#default-script" title="Permanent link">&para;</a></h2>
+<p><strong>Experimental only</strong></p>
+<p>If FreeType gets compiled with <code>FT_CONFIG_OPTION_USE_HARFBUZZ</code> to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a &lsquo;dlig&rsquo; feature, containing the combination of the characters &lsquo;T&rsquo;, &lsquo;E&rsquo;, and &lsquo;L&rsquo; to form a &lsquo;TEL&rsquo; ligature.</p>
+<p>By default, this is <code><a href="ft2-properties.html#ft_autohinter_script_xxx">FT_AUTOHINTER_SCRIPT_LATIN</a></code>. Using the <code>default-script</code> property, this default value can be changed.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the default script value gets triggered either by setting or reading a face-specific property like <code><a href="ft2-properties.html#glyph-to-script-map">glyph-to-script-map</a></code>, or by auto-hinting any glyph from that face. In particular, if you have already created an <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> structure but not loaded any glyph (using the auto-hinter), a change of the default script will affect this face.</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;autofitter&quot;,
+ &quot;default-script&quot;, &amp;default_script );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.5.3</p>
+<hr>
+
+<h2 id="increase-x-height">increase-x-height<a class="headerlink" href="#increase-x-height" title="Permanent link">&para;</a></h2>
+<p>For ppem values in the range 6&nbsp;&lt;= ppem &lt;= <code>increase-x-height</code>, round up the font's x&nbsp;height much more often than normally. If the value is set to&nbsp;0, which is the default, this feature is switched off. Use this property to improve the legibility of small font sizes if necessary.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>Set this value right after calling <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code>, but before loading any glyph (using the auto-hinter).</p>
+<h4>example</h4>
+
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Face face;
+ FT_Prop_IncreaseXHeight prop;
+
+
+ FT_Init_FreeType( &amp;library );
+ FT_New_Face( library, &quot;foo.ttf&quot;, 0, &amp;face );
+ FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
+
+ prop.face = face;
+ prop.limit = 14;
+
+ FT_Property_Set( library, &quot;autofitter&quot;,
+ &quot;increase-x-height&quot;, &amp;prop );
+</pre></div>
+
+<h4>since</h4>
+
+<p>2.4.11</p>
+<hr>
+
+<h2 id="ft_prop_increasexheight">FT_Prop_IncreaseXHeight<a class="headerlink" href="#ft_prop_increasexheight" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_DRIVER_H (freetype/ftdriver.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Prop_IncreaseXHeight_
+ {
+ <a href="ft2-base_interface.html#ft_face">FT_Face</a> face;
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> limit;
+
+ } <b>FT_Prop_IncreaseXHeight</b>;
+</pre>
+</div>
+
+<p>The data exchange structure for the <code><a href="ft2-properties.html#increase-x-height">increase-x-height</a></code> property.</p>
+<hr>
+
+<h2 id="warping">warping<a class="headerlink" href="#warping" title="Permanent link">&para;</a></h2>
+<p><strong>Experimental only</strong></p>
+<p>If FreeType gets compiled with option <code>AF_CONFIG_OPTION_USE_WARPER</code> to activate the warp hinting code in the auto-hinter, this property switches warping on and off.</p>
+<p>Warping only works in &lsquo;normal&rsquo; auto-hinting mode replacing it. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored.</p>
+<p>By default, warping is off.</p>
+<h4>note</h4>
+
+<p>This property can be used with <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code> also.</p>
+<p>This property can be set via the <code>FREETYPE_PROPERTIES</code> environment variable (using values 1 and 0 for &lsquo;on&rsquo; and &lsquo;off&rsquo;, respectively).</p>
+<p>The warping code can also change advance widths. Have a look at the <code>lsb_delta</code> and <code>rsb_delta</code> fields in the <code><a href="ft2-base_interface.html#ft_glyphslotrec">FT_GlyphSlotRec</a></code> structure for details on improving inter-glyph distances while rendering.</p>
+<p>Since warping is a global property of the auto-hinter it is best to change its value before rendering any face. Otherwise, you should reload all faces that get auto-hinted in &lsquo;normal&rsquo; hinting mode.</p>
+<h4>example</h4>
+
+<p>This example shows how to switch on warping (omitting the error handling).
+<div class="codehilite"><pre><span></span> FT_Library library;
+ FT_Bool warping = 1;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, &quot;autofitter&quot;, &quot;warping&quot;, &amp;warping );
+</pre></div></p>
+<h4>since</h4>
+
+<p>2.6</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The PCF driver
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Parameter Tags
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-quick_advance.html b/freetype/docs/reference/site/ft2-quick_advance.html
new file mode 100644
index 00000000..3c033653
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-quick_advance.html
@@ -0,0 +1,1303 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Quick retrieval of advance values - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#quick-retrieval-of-advance-values" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Quick retrieval of advance values
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Quick retrieval of advance values
+ </label>
+
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link md-nav__link--active">
+ Quick retrieval of advance values
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_advance" title="FT_Get_Advance" class="md-nav__link">
+ FT_Get_Advance
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_advances" title="FT_Get_Advances" class="md-nav__link">
+ FT_Get_Advances
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_advance_flag_fast_only" title="FT_ADVANCE_FLAG_FAST_ONLY" class="md-nav__link">
+ FT_ADVANCE_FLAG_FAST_ONLY
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_advance" title="FT_Get_Advance" class="md-nav__link">
+ FT_Get_Advance
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_advances" title="FT_Get_Advances" class="md-nav__link">
+ FT_Get_Advances
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_advance_flag_fast_only" title="FT_ADVANCE_FLAG_FAST_ONLY" class="md-nav__link">
+ FT_ADVANCE_FLAG_FAST_ONLY
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Quick retrieval of advance values</p>
+<hr />
+<h1 id="quick-retrieval-of-advance-values">Quick retrieval of advance values<a class="headerlink" href="#quick-retrieval-of-advance-values" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains functions to quickly extract advance values without handling glyph outlines, if possible.</p>
+<h2 id="ft_get_advance">FT_Get_Advance<a class="headerlink" href="#ft_get_advance" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_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_int32">FT_Int32</a> load_flags,
+ <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> *padvance );
+</pre>
+</div>
+
+<p>Retrieve the advance value of a given glyph outline in an <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> handle.</p>
+</td></tr>
+<tr><td class="val" id="gindex">gindex</td><td class="desc">
+<p>The glyph index.</p>
+</td></tr>
+<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>A set of bit flags similar to those used when calling <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>, used to determine what kind of advances you need.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="padvance">padvance</td><td class="desc">
+<p>The advance value. If scaling is performed (based on the value of <code>load_flags</code>), the advance value is in 16.16 format. Otherwise, it is in font units.</p>
+<p>If <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_VERTICAL_LAYOUT</a></code> is set, this is the vertical advance corresponding to a vertical layout. Otherwise, it is the horizontal advance in a horizontal layout.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0 means success.</p>
+<h4>note</h4>
+
+<p>This function may fail if you use <code><a href="ft2-quick_advance.html#ft_advance_flag_fast_only">FT_ADVANCE_FLAG_FAST_ONLY</a></code> and if the corresponding font backend doesn't have a quick way to retrieve the advances.</p>
+<p>A scaled advance is returned in 16.16 format but isn't transformed by the affine transformation specified by <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code>.</p>
+<hr>
+
+<h2 id="ft_get_advances">FT_Get_Advances<a class="headerlink" href="#ft_get_advances" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_Advances</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> start,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> count,
+ <a href="ft2-basic_types.html#ft_int32">FT_Int32</a> load_flags,
+ <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> *padvances );
+</pre>
+</div>
+
+<p>Retrieve the advance values of several glyph outlines in an <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>The source <code><a href="ft2-base_interface.html#ft_face">FT_Face</a></code> handle.</p>
+</td></tr>
+<tr><td class="val" id="start">start</td><td class="desc">
+<p>The first glyph index.</p>
+</td></tr>
+<tr><td class="val" id="count">count</td><td class="desc">
+<p>The number of advance values you want to retrieve.</p>
+</td></tr>
+<tr><td class="val" id="load_flags">load_flags</td><td class="desc">
+<p>A set of bit flags similar to those used when calling <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="padvance">padvance</td><td class="desc">
+<p>The advance values. This array, to be provided by the caller, must contain at least <code>count</code> elements.</p>
+<p>If scaling is performed (based on the value of <code>load_flags</code>), the advance values are in 16.16 format. Otherwise, they are in font units.</p>
+<p>If <code><a href="ft2-base_interface.html#ft_load_xxx">FT_LOAD_VERTICAL_LAYOUT</a></code> is set, these are the vertical advances corresponding to a vertical layout. Otherwise, they are the horizontal advances in a horizontal layout.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0 means success.</p>
+<h4>note</h4>
+
+<p>This function may fail if you use <code><a href="ft2-quick_advance.html#ft_advance_flag_fast_only">FT_ADVANCE_FLAG_FAST_ONLY</a></code> and if the corresponding font backend doesn't have a quick way to retrieve the advances.</p>
+<p>Scaled advances are returned in 16.16 format but aren't transformed by the affine transformation specified by <code><a href="ft2-base_interface.html#ft_set_transform">FT_Set_Transform</a></code>.</p>
+<hr>
+
+<h2 id="ft_advance_flag_fast_only">FT_ADVANCE_FLAG_FAST_ONLY<a class="headerlink" href="#ft_advance_flag_fast_only" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_ADVANCES_H (freetype/ftadvanc.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <b>FT_ADVANCE_FLAG_FAST_ONLY</b> 0x20000000L
+</pre>
+</div>
+
+<p>A bit-flag to be OR-ed with the <code>flags</code> parameter of the <code><a href="ft2-quick_advance.html#ft_get_advance">FT_Get_Advance</a></code> and <code><a href="ft2-quick_advance.html#ft_get_advances">FT_Get_Advances</a></code> functions.</p>
+<p>If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver doesn't allow for very quick advance computation.</p>
+<p>Typically, glyphs that are either unscaled, unhinted, bitmapped, or light-hinted can have their advance width computed very quickly.</p>
+<p>Normal and bytecode hinted modes that require loading, scaling, and hinting of the glyph outline, are extremely slow by comparison.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Outline Processing
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Bitmap Handling
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-raster.html b/freetype/docs/reference/site/ft2-raster.html
new file mode 100644
index 00000000..674e8eaa
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-raster.html
@@ -0,0 +1,1741 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Scanline Converter - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#scanline-converter" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Scanline Converter
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Scanline Converter
+ </label>
+
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link md-nav__link--active">
+ Scanline Converter
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster" title="FT_Raster" class="md-nav__link">
+ FT_Raster
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_span" title="FT_Span" class="md-nav__link">
+ FT_Span
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_spanfunc" title="FT_SpanFunc" class="md-nav__link">
+ FT_SpanFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_params" title="FT_Raster_Params" class="md-nav__link">
+ FT_Raster_Params
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_flag_xxx" title="FT_RASTER_FLAG_XXX" class="md-nav__link">
+ FT_RASTER_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_newfunc" title="FT_Raster_NewFunc" class="md-nav__link">
+ FT_Raster_NewFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_donefunc" title="FT_Raster_DoneFunc" class="md-nav__link">
+ FT_Raster_DoneFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_resetfunc" title="FT_Raster_ResetFunc" class="md-nav__link">
+ FT_Raster_ResetFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_setmodefunc" title="FT_Raster_SetModeFunc" class="md-nav__link">
+ FT_Raster_SetModeFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_renderfunc" title="FT_Raster_RenderFunc" class="md-nav__link">
+ FT_Raster_RenderFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_funcs" title="FT_Raster_Funcs" class="md-nav__link">
+ FT_Raster_Funcs
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_bittest_func" title="FT_Raster_BitTest_Func" class="md-nav__link">
+ FT_Raster_BitTest_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_bitset_func" title="FT_Raster_BitSet_Func" class="md-nav__link">
+ FT_Raster_BitSet_Func
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster" title="FT_Raster" class="md-nav__link">
+ FT_Raster
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_span" title="FT_Span" class="md-nav__link">
+ FT_Span
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_spanfunc" title="FT_SpanFunc" class="md-nav__link">
+ FT_SpanFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_params" title="FT_Raster_Params" class="md-nav__link">
+ FT_Raster_Params
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_flag_xxx" title="FT_RASTER_FLAG_XXX" class="md-nav__link">
+ FT_RASTER_FLAG_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_newfunc" title="FT_Raster_NewFunc" class="md-nav__link">
+ FT_Raster_NewFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_donefunc" title="FT_Raster_DoneFunc" class="md-nav__link">
+ FT_Raster_DoneFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_resetfunc" title="FT_Raster_ResetFunc" class="md-nav__link">
+ FT_Raster_ResetFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_setmodefunc" title="FT_Raster_SetModeFunc" class="md-nav__link">
+ FT_Raster_SetModeFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_renderfunc" title="FT_Raster_RenderFunc" class="md-nav__link">
+ FT_Raster_RenderFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_funcs" title="FT_Raster_Funcs" class="md-nav__link">
+ FT_Raster_Funcs
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_bittest_func" title="FT_Raster_BitTest_Func" class="md-nav__link">
+ FT_Raster_BitTest_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_raster_bitset_func" title="FT_Raster_BitSet_Func" class="md-nav__link">
+ FT_Raster_BitSet_Func
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; Scanline Converter</p>
+<hr />
+<h1 id="scanline-converter">Scanline Converter<a class="headerlink" href="#scanline-converter" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains technical definitions.</p>
+<h2 id="ft_raster">FT_Raster<a class="headerlink" href="#ft_raster" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RasterRec_* <b>FT_Raster</b>;
+</pre>
+</div>
+
+<p>An opaque handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.</p>
+<hr>
+
+<h2 id="ft_span">FT_Span<a class="headerlink" href="#ft_span" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to model a single span of gray pixels when rendering an anti-aliased bitmap.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="x">x</td><td class="desc">
+<p>The span's horizontal start position.</p>
+</td></tr>
+<tr><td class="val" id="len">len</td><td class="desc">
+<p>The span's length in pixels.</p>
+</td></tr>
+<tr><td class="val" id="coverage">coverage</td><td class="desc">
+<p>The span color/coverage, ranging from 0 (background) to 255 (foreground).</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This structure is used by the span drawing callback type named <code><a href="ft2-raster.html#ft_spanfunc">FT_SpanFunc</a></code> that takes the y&nbsp;coordinate of the span as 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>
+<hr>
+
+<h2 id="ft_spanfunc">FT_SpanFunc<a class="headerlink" href="#ft_spanfunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_Span_Func <b>FT_SpanFunc</b>
+</pre>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="y">y</td><td class="desc">
+<p>The scanline's upward y&nbsp;coordinate.</p>
+</td></tr>
+<tr><td class="val" id="count">count</td><td class="desc">
+<p>The number of spans to draw on this scanline.</p>
+</td></tr>
+<tr><td class="val" id="spans">spans</td><td class="desc">
+<p>A table of <code>count</code> spans to draw on the scanline.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>User-supplied data that is passed to the callback.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<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>
+<hr>
+
+<h2 id="ft_raster_params">FT_Raster_Params<a class="headerlink" href="#ft_raster_params" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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; /* unused */
+ <a href="ft2-raster.html#ft_raster_bittest_func">FT_Raster_BitTest_Func</a> bit_test; /* unused */
+ <a href="ft2-raster.html#ft_raster_bitset_func">FT_Raster_BitSet_Func</a> bit_set; /* unused */
+ <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>
+</div>
+
+<p>A structure to hold the parameters used by a raster's render function, passed as an argument to <code><a href="ft2-outline_processing.html#ft_outline_render">FT_Outline_Render</a></code>.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="target">target</td><td class="desc">
+<p>The target bitmap.</p>
+</td></tr>
+<tr><td class="val" id="source">source</td><td class="desc">
+<p>A pointer to the source glyph image (e.g., an <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code>).</p>
+</td></tr>
+<tr><td class="val" id="flags">flags</td><td class="desc">
+<p>The rendering flags.</p>
+</td></tr>
+<tr><td class="val" id="gray_spans">gray_spans</td><td class="desc">
+<p>The gray span drawing callback.</p>
+</td></tr>
+<tr><td class="val" id="black_spans">black_spans</td><td class="desc">
+<p>Unused.</p>
+</td></tr>
+<tr><td class="val" id="bit_test">bit_test</td><td class="desc">
+<p>Unused.</p>
+</td></tr>
+<tr><td class="val" id="bit_set">bit_set</td><td class="desc">
+<p>Unused.</p>
+</td></tr>
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>User-supplied data that is passed to each drawing callback.</p>
+</td></tr>
+<tr><td class="val" id="clip_box">clip_box</td><td class="desc">
+<p>An optional clipping box. It is only used in direct rendering mode. Note that coordinates here should be expressed in <em>integer</em> pixels (and not in 26.6 fixed-point units).</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>An anti-aliased glyph bitmap is drawn if the <code><a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_AA</a></code> bit flag is set in the <code>flags</code> field, otherwise a monochrome bitmap is generated.</p>
+<p>If the <code><a href="ft2-raster.html#ft_raster_flag_xxx">FT_RASTER_FLAG_DIRECT</a></code> bit flag is set in <code>flags</code>, the raster will call the <code>gray_spans</code> callback to draw gray pixel spans. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing and composition. Not supported by the monochrome rasterizer.</p>
+<hr>
+
+<h2 id="ft_raster_flag_xxx">FT_RASTER_FLAG_XXX<a class="headerlink" href="#ft_raster_flag_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-raster.html#ft_raster_flag_default">FT_RASTER_FLAG_DEFAULT</a> 0x0
+#<span class="keyword">define</span> <a href="ft2-raster.html#ft_raster_flag_aa">FT_RASTER_FLAG_AA</a> 0x1
+#<span class="keyword">define</span> <a href="ft2-raster.html#ft_raster_flag_direct">FT_RASTER_FLAG_DIRECT</a> 0x2
+#<span class="keyword">define</span> <a href="ft2-raster.html#ft_raster_flag_clip">FT_RASTER_FLAG_CLIP</a> 0x4
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>FT_RASTER_FLAG_XXX</b>` values instead */
+#<span class="keyword">define</span> ft_raster_flag_default <a href="ft2-raster.html#ft_raster_flag_default">FT_RASTER_FLAG_DEFAULT</a>
+#<span class="keyword">define</span> ft_raster_flag_aa <a href="ft2-raster.html#ft_raster_flag_aa">FT_RASTER_FLAG_AA</a>
+#<span class="keyword">define</span> ft_raster_flag_direct <a href="ft2-raster.html#ft_raster_flag_direct">FT_RASTER_FLAG_DIRECT</a>
+#<span class="keyword">define</span> ft_raster_flag_clip <a href="ft2-raster.html#ft_raster_flag_clip">FT_RASTER_FLAG_CLIP</a>
+</pre>
+</div>
+
+<p>A list of bit flag constants as used in the <code>flags</code> field of a <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> structure.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_raster_flag_default">FT_RASTER_FLAG_DEFAULT</td><td class="desc">
+<p>This value is 0.</p>
+</td></tr>
+<tr><td class="val" id="ft_raster_flag_aa">FT_RASTER_FLAG_AA</td><td class="desc">
+<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><td class="val" id="ft_raster_flag_direct">FT_RASTER_FLAG_DIRECT</td><td class="desc">
+<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 <em>not</em> set, the target pixmap's buffer <em>must</em> be zeroed before rendering and the output will be clipped to its size.</p>
+<p>Direct rendering is only possible with anti-aliased glyphs.</p>
+</td></tr>
+<tr><td class="val" id="ft_raster_flag_clip">FT_RASTER_FLAG_CLIP</td><td class="desc">
+<p>This flag is only used in direct rendering mode. If set, the output will be clipped to a box specified in the <code>clip_box</code> field of the <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> structure. Otherwise, the <code>clip_box</code> is effectively set to the bounding box and all spans are generated.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_raster_newfunc">FT_Raster_NewFunc<a class="headerlink" href="#ft_raster_newfunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_New_Func <b>FT_Raster_NewFunc</b>
+</pre>
+</div>
+
+<p>A function used to create a new raster object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A handle to the memory allocator.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="raster">raster</td><td class="desc">
+<p>A handle to the new raster object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The <code>memory</code> parameter is a typeless pointer in order to avoid un-wanted dependencies on the rest of the FreeType code. In practice, it is an <code><a href="ft2-system_interface.html#ft_memory">FT_Memory</a></code> object, i.e., a handle to the standard FreeType memory allocator. However, this field can be completely ignored by a given raster implementation.</p>
+<hr>
+
+<h2 id="ft_raster_donefunc">FT_Raster_DoneFunc<a class="headerlink" href="#ft_raster_donefunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_Done_Func <b>FT_Raster_DoneFunc</b>
+</pre>
+</div>
+
+<p>A function used to destroy a given raster object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="raster">raster</td><td class="desc">
+<p>A handle to the raster object.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_raster_resetfunc">FT_Raster_ResetFunc<a class="headerlink" href="#ft_raster_resetfunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_Reset_Func <b>FT_Raster_ResetFunc</b>
+</pre>
+</div>
+
+<p>FreeType used to provide an area of memory called the &lsquo;render pool&rsquo; available to all registered rasterizers. This was not thread safe, however, and now FreeType never allocates this pool.</p>
+<p>This function is called after a new raster object is created.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="raster">raster</td><td class="desc">
+<p>A handle to the new raster object.</p>
+</td></tr>
+<tr><td class="val" id="pool_base">pool_base</td><td class="desc">
+<p>Previously, the address in memory of the render pool. Set this to <code>NULL</code>.</p>
+</td></tr>
+<tr><td class="val" id="pool_size">pool_size</td><td class="desc">
+<p>Previously, the size in bytes of the render pool. Set this to 0.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Rasterizers should rely on dynamic or stack allocation if they want to (a handle to the memory allocator is passed to the rasterizer constructor).</p>
+<hr>
+
+<h2 id="ft_raster_setmodefunc">FT_Raster_SetModeFunc<a class="headerlink" href="#ft_raster_setmodefunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_Set_Mode_Func <b>FT_Raster_SetModeFunc</b>
+</pre>
+</div>
+
+<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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="raster">raster</td><td class="desc">
+<p>A handle to the new raster object.</p>
+</td></tr>
+<tr><td class="val" id="mode">mode</td><td class="desc">
+<p>A 4-byte tag used to name the mode or property.</p>
+</td></tr>
+<tr><td class="val" id="args">args</td><td class="desc">
+<p>A pointer to the new mode/property to use.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_raster_renderfunc">FT_Raster_RenderFunc<a class="headerlink" href="#ft_raster_renderfunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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 );
+
+#<span class="keyword">define</span> FT_Raster_Render_Func <b>FT_Raster_RenderFunc</b>
+</pre>
+</div>
+
+<p>Invoke a given raster to scan-convert a given glyph image into a target bitmap.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="raster">raster</td><td class="desc">
+<p>A handle to the raster object.</p>
+</td></tr>
+<tr><td class="val" id="params">params</td><td class="desc">
+<p>A pointer to an <code><a href="ft2-raster.html#ft_raster_params">FT_Raster_Params</a></code> structure used to store the rendering parameters.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The exact format of the source image depends on the raster's glyph format defined in its <code><a href="ft2-raster.html#ft_raster_funcs">FT_Raster_Funcs</a></code> structure. It can be an <code><a href="ft2-outline_processing.html#ft_outline">FT_Outline</a></code> 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 <code>FT_Err_Unimplemented_Feature</code> error code if the raster used does not support direct composition.</p>
+<hr>
+
+<h2 id="ft_raster_funcs">FT_Raster_Funcs<a class="headerlink" href="#ft_raster_funcs" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to describe a given raster class to the library.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="glyph_format">glyph_format</td><td class="desc">
+<p>The supported glyph format for this raster.</p>
+</td></tr>
+<tr><td class="val" id="raster_new">raster_new</td><td class="desc">
+<p>The raster constructor.</p>
+</td></tr>
+<tr><td class="val" id="raster_reset">raster_reset</td><td class="desc">
+<p>Used to reset the render pool within the raster.</p>
+</td></tr>
+<tr><td class="val" id="raster_render">raster_render</td><td class="desc">
+<p>A function to render a glyph into a given bitmap.</p>
+</td></tr>
+<tr><td class="val" id="raster_done">raster_done</td><td class="desc">
+<p>The raster destructor.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_raster_bittest_func">FT_Raster_BitTest_Func<a class="headerlink" href="#ft_raster_bittest_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Deprecated, unimplemented.</p>
+<hr>
+
+<h2 id="ft_raster_bitset_func">FT_Raster_BitSet_Func<a class="headerlink" href="#ft_raster_bitset_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_IMAGE_H (freetype/ftimage.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Deprecated, unimplemented.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Bitmap Handling
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Glyph Stroker
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-sfnt_names.html b/freetype/docs/reference/site/ft2-sfnt_names.html
new file mode 100644
index 00000000..34a78ee6
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-sfnt_names.html
@@ -0,0 +1,1417 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>SFNT Names - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#sfnt-names" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ SFNT Names
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ SFNT Names
+ </label>
+
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link md-nav__link--active">
+ SFNT Names
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfntname" title="FT_SfntName" class="md-nav__link">
+ FT_SfntName
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_name_count" title="FT_Get_Sfnt_Name_Count" class="md-nav__link">
+ FT_Get_Sfnt_Name_Count
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_name" title="FT_Get_Sfnt_Name" class="md-nav__link">
+ FT_Get_Sfnt_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfntlangtag" title="FT_SfntLangTag" class="md-nav__link">
+ FT_SfntLangTag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_langtag" title="FT_Get_Sfnt_LangTag" class="md-nav__link">
+ FT_Get_Sfnt_LangTag
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfntname" title="FT_SfntName" class="md-nav__link">
+ FT_SfntName
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_name_count" title="FT_Get_Sfnt_Name_Count" class="md-nav__link">
+ FT_Get_Sfnt_Name_Count
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_name" title="FT_Get_Sfnt_Name" class="md-nav__link">
+ FT_Get_Sfnt_Name
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfntlangtag" title="FT_SfntLangTag" class="md-nav__link">
+ FT_SfntLangTag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_langtag" title="FT_Get_Sfnt_LangTag" class="md-nav__link">
+ FT_Get_Sfnt_LangTag
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; SFNT Names</p>
+<hr />
+<h1 id="sfnt-names">SFNT Names<a class="headerlink" href="#sfnt-names" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>The TrueType and OpenType specifications allow the inclusion of a special names table (&lsquo;name&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>
+<h2 id="ft_sfntname">FT_SfntName<a class="headerlink" href="#ft_sfntname" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to model an SFNT &lsquo;name&rsquo; table entry.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="platform_id">platform_id</td><td class="desc">
+<p>The platform ID for <code>string</code>. See <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_XXX</a></code> for possible values.</p>
+</td></tr>
+<tr><td class="val" id="encoding_id">encoding_id</td><td class="desc">
+<p>The encoding ID for <code>string</code>. See <code><a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_XXX</a></code>, <code><a href="ft2-truetype_tables.html#tt_mac_id_xxx">TT_MAC_ID_XXX</a></code>, <code><a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_XXX</a></code>, <code><a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_XXX</a></code>, and <code><a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_XXX</a></code> for possible values.</p>
+</td></tr>
+<tr><td class="val" id="language_id">language_id</td><td class="desc">
+<p>The language ID for <code>string</code>. See <code><a href="ft2-truetype_tables.html#tt_mac_langid_xxx">TT_MAC_LANGID_XXX</a></code> and <code><a href="ft2-truetype_tables.html#tt_ms_langid_xxx">TT_MS_LANGID_XXX</a></code> for possible values.</p>
+<p>Registered OpenType values for <code>language_id</code> are always smaller than 0x8000; values equal or larger than 0x8000 usually indicate a language tag string (introduced in OpenType version 1.6). Use function <code><a href="ft2-sfnt_names.html#ft_get_sfnt_langtag">FT_Get_Sfnt_LangTag</a></code> with <code>language_id</code> as its argument to retrieve the associated language tag.</p>
+</td></tr>
+<tr><td class="val" id="name_id">name_id</td><td class="desc">
+<p>An identifier for <code>string</code>. See <code><a href="ft2-truetype_tables.html#tt_name_id_xxx">TT_NAME_ID_XXX</a></code> for possible values.</p>
+</td></tr>
+<tr><td class="val" id="string">string</td><td class="desc">
+<p>The &lsquo;name&rsquo; string. Note that its format differs depending on the (platform,encoding) pair, being either a string of bytes (without a terminating <code>NULL</code> byte) or containing UTF-16BE entities.</p>
+</td></tr>
+<tr><td class="val" id="string_len">string_len</td><td class="desc">
+<p>The length of <code>string</code> in bytes.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Please refer to the TrueType or OpenType specification for more details.</p>
+<hr>
+
+<h2 id="ft_get_sfnt_name_count">FT_Get_Sfnt_Name_Count<a class="headerlink" href="#ft_get_sfnt_name_count" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the number of name strings in the SFNT &lsquo;name&rsquo; table.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The number of strings in the &lsquo;name&rsquo; table.</p>
+<h4>note</h4>
+
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_SFNT_NAMES</code> is not defined in <code>ftoption.h</code>.</p>
+<hr>
+
+<h2 id="ft_get_sfnt_name">FT_Get_Sfnt_Name<a class="headerlink" href="#ft_get_sfnt_name" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a string of the SFNT &lsquo;name&rsquo; table for a given index.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="idx">idx</td><td class="desc">
+<p>The index of the &lsquo;name&rsquo; string.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aname">aname</td><td class="desc">
+<p>The indexed <code><a href="ft2-sfnt_names.html#ft_sfntname">FT_SfntName</a></code> structure.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The <code>string</code> array returned in the <code>aname</code> structure is not null-terminated. Note that you don't have to deallocate <code>string</code> by yourself; FreeType takes care of it if you call <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+<p>Use <code><a href="ft2-sfnt_names.html#ft_get_sfnt_name_count">FT_Get_Sfnt_Name_Count</a></code> 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>
+<p>&lsquo;name&rsquo; table format&nbsp;1 entries can use language tags also, see <code><a href="ft2-sfnt_names.html#ft_get_sfnt_langtag">FT_Get_Sfnt_LangTag</a></code>.</p>
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_SFNT_NAMES</code> is not defined in <code>ftoption.h</code>.</p>
+<hr>
+
+<h2 id="ft_sfntlangtag">FT_SfntLangTag<a class="headerlink" href="#ft_sfntlangtag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SfntLangTag_
+ {
+ <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_SfntLangTag</b>;
+</pre>
+</div>
+
+<p>A structure to model a language tag entry from an SFNT &lsquo;name&rsquo; table.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="string">string</td><td class="desc">
+<p>The language tag string, encoded in UTF-16BE (without trailing <code>NULL</code> bytes).</p>
+</td></tr>
+<tr><td class="val" id="string_len">string_len</td><td class="desc">
+<p>The length of <code>string</code> in <strong>bytes</strong>.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>Please refer to the TrueType or OpenType specification for more details.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+<h2 id="ft_get_sfnt_langtag">FT_Get_Sfnt_LangTag<a class="headerlink" href="#ft_get_sfnt_langtag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_error">FT_Error</a> )
+ <b>FT_Get_Sfnt_LangTag</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> langID,
+ <a href="ft2-sfnt_names.html#ft_sfntlangtag">FT_SfntLangTag</a> *alangTag );
+</pre>
+</div>
+
+<p>Retrieve the language tag associated with a language ID of an SFNT &lsquo;name&rsquo; table entry.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="langid">langID</td><td class="desc">
+<p>The language ID, as returned by <code><a href="ft2-sfnt_names.html#ft_get_sfnt_name">FT_Get_Sfnt_Name</a></code>. This is always a value larger than 0x8000.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="alangtag">alangTag</td><td class="desc">
+<p>The language tag associated with the &lsquo;name&rsquo; table entry's language ID.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The <code>string</code> array returned in the <code>alangTag</code> structure is not null-terminated. Note that you don't have to deallocate <code>string</code> by yourself; FreeType takes care of it if you call <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code>.</p>
+<p>Only &lsquo;name&rsquo; table format&nbsp;1 supports language tags. For format&nbsp;0 tables, this function always returns FT_Err_Invalid_Table. For invalid format&nbsp;1 language ID values, FT_Err_Invalid_Argument is returned.</p>
+<p>This function always returns an error if the config macro <code>TT_CONFIG_OPTION_SFNT_NAMES</code> is not defined in <code>ftoption.h</code>.</p>
+<h4>since</h4>
+
+<p>2.8</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Type 1 Tables
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ BDF and PCF Files
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-sizes_management.html b/freetype/docs/reference/site/ft2-sizes_management.html
new file mode 100644
index 00000000..afb7026a
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-sizes_management.html
@@ -0,0 +1,1282 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Size Management - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#size-management" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Size Management
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Size Management
+ </label>
+
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link md-nav__link--active">
+ Size Management
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_size" title="FT_New_Size" class="md-nav__link">
+ FT_New_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_size" title="FT_Done_Size" class="md-nav__link">
+ FT_Done_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_activate_size" title="FT_Activate_Size" class="md-nav__link">
+ FT_Activate_Size
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_new_size" title="FT_New_Size" class="md-nav__link">
+ FT_New_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_done_size" title="FT_Done_Size" class="md-nav__link">
+ FT_Done_Size
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_activate_size" title="FT_Activate_Size" class="md-nav__link">
+ FT_Activate_Size
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; Size Management</p>
+<hr />
+<h1 id="size-management">Size Management<a class="headerlink" href="#size-management" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>When creating a new face object (e.g., with <code><a href="ft2-base_interface.html#ft_new_face">FT_New_Face</a></code>), an <code><a href="ft2-base_interface.html#ft_size">FT_Size</a></code> object is automatically created and used to store all pixel-size dependent information, available in the <code>face-&gt;size</code> 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 <code><a href="ft2-sizes_management.html#ft_new_size">FT_New_Size</a></code> and <code><a href="ft2-sizes_management.html#ft_done_size">FT_Done_Size</a></code>.</p>
+<p>Note that <code><a href="ft2-base_interface.html#ft_set_pixel_sizes">FT_Set_Pixel_Sizes</a></code> and <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code> only modify the contents of the current &lsquo;active&rsquo; size; you thus need to use <code><a href="ft2-sizes_management.html#ft_activate_size">FT_Activate_Size</a></code> 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>
+<h2 id="ft_new_size">FT_New_Size<a class="headerlink" href="#ft_new_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Create a new size object from a given face object.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to a parent face object.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="asize">asize</td><td class="desc">
+<p>A handle to a new size object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>You need to call <code><a href="ft2-sizes_management.html#ft_activate_size">FT_Activate_Size</a></code> in order to select the new size for upcoming calls to <code><a href="ft2-base_interface.html#ft_set_pixel_sizes">FT_Set_Pixel_Sizes</a></code>, <code><a href="ft2-base_interface.html#ft_set_char_size">FT_Set_Char_Size</a></code>, <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code>, <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code>, etc.</p>
+<hr>
+
+<h2 id="ft_done_size">FT_Done_Size<a class="headerlink" href="#ft_done_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Discard a given size object. Note that <code><a href="ft2-base_interface.html#ft_done_face">FT_Done_Face</a></code> automatically discards all size objects allocated with <code><a href="ft2-sizes_management.html#ft_new_size">FT_New_Size</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>A handle to a target size object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<hr>
+
+<h2 id="ft_activate_size">FT_Activate_Size<a class="headerlink" href="#ft_activate_size" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SIZES_H (freetype/ftsizes.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Even though it is possible to create several size objects for a given face (see <code><a href="ft2-sizes_management.html#ft_new_size">FT_New_Size</a></code> for details), functions like <code><a href="ft2-base_interface.html#ft_load_glyph">FT_Load_Glyph</a></code> or <code><a href="ft2-base_interface.html#ft_load_char">FT_Load_Char</a></code> only use the one that has been activated last 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>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>A handle to a target size object.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If <code>face</code> is the size's parent face object, this function changes the value of <code>face-&gt;size</code> to the input size handle.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Mac Specific Interface
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Header File Macros
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-system_interface.html b/freetype/docs/reference/site/ft2-system_interface.html
new file mode 100644
index 00000000..6f659866
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-system_interface.html
@@ -0,0 +1,1576 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>System Interface - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#system-interface" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ System Interface
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" checked>
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ System Interface
+ </label>
+
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link md-nav__link--active">
+ System Interface
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_memory" title="FT_Memory" class="md-nav__link">
+ FT_Memory
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_alloc_func" title="FT_Alloc_Func" class="md-nav__link">
+ FT_Alloc_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_free_func" title="FT_Free_Func" class="md-nav__link">
+ FT_Free_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_realloc_func" title="FT_Realloc_Func" class="md-nav__link">
+ FT_Realloc_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_memoryrec" title="FT_MemoryRec" class="md-nav__link">
+ FT_MemoryRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream" title="FT_Stream" class="md-nav__link">
+ FT_Stream
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_streamdesc" title="FT_StreamDesc" class="md-nav__link">
+ FT_StreamDesc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_iofunc" title="FT_Stream_IoFunc" class="md-nav__link">
+ FT_Stream_IoFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_closefunc" title="FT_Stream_CloseFunc" class="md-nav__link">
+ FT_Stream_CloseFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_streamrec" title="FT_StreamRec" class="md-nav__link">
+ FT_StreamRec
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_memory" title="FT_Memory" class="md-nav__link">
+ FT_Memory
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_alloc_func" title="FT_Alloc_Func" class="md-nav__link">
+ FT_Alloc_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_free_func" title="FT_Free_Func" class="md-nav__link">
+ FT_Free_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_realloc_func" title="FT_Realloc_Func" class="md-nav__link">
+ FT_Realloc_Func
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_memoryrec" title="FT_MemoryRec" class="md-nav__link">
+ FT_MemoryRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream" title="FT_Stream" class="md-nav__link">
+ FT_Stream
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_streamdesc" title="FT_StreamDesc" class="md-nav__link">
+ FT_StreamDesc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_iofunc" title="FT_Stream_IoFunc" class="md-nav__link">
+ FT_Stream_IoFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_stream_closefunc" title="FT_Stream_CloseFunc" class="md-nav__link">
+ FT_Stream_CloseFunc
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_streamrec" title="FT_StreamRec" class="md-nav__link">
+ FT_StreamRec
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#support-api">Support API</a> &raquo; System Interface</p>
+<hr />
+<h1 id="system-interface">System Interface<a class="headerlink" href="#system-interface" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_memory">FT_Memory<a class="headerlink" href="#ft_memory" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MemoryRec_* <b>FT_Memory</b>;
+</pre>
+</div>
+
+<p>A handle to a given memory manager object, defined with an <code><a href="ft2-system_interface.html#ft_memoryrec">FT_MemoryRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ft_alloc_func">FT_Alloc_Func<a class="headerlink" href="#ft_alloc_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to allocate <code>size</code> bytes from <code>memory</code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>The size in bytes to allocate.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Address of new memory block. 0&nbsp;in case of failure.</p>
+<hr>
+
+<h2 id="ft_free_func">FT_Free_Func<a class="headerlink" href="#ft_free_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to release a given block of memory.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr><td class="val" id="block">block</td><td class="desc">
+<p>The address of the target memory block.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_realloc_func">FT_Realloc_Func<a class="headerlink" href="#ft_realloc_func" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to re-allocate a given block of memory.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr><td class="val" id="cur_size">cur_size</td><td class="desc">
+<p>The block's current size in bytes.</p>
+</td></tr>
+<tr><td class="val" id="new_size">new_size</td><td class="desc">
+<p>The block's requested new size.</p>
+</td></tr>
+<tr><td class="val" id="block">block</td><td class="desc">
+<p>The block's current address.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>New block address. 0&nbsp;in case of memory shortage.</p>
+<h4>note</h4>
+
+<p>In case of error, the old block must still be available.</p>
+<hr>
+
+<h2 id="ft_memoryrec">FT_MemoryRec<a class="headerlink" href="#ft_memoryrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to describe a given memory manager to FreeType&nbsp;2.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="user">user</td><td class="desc">
+<p>A generic typeless pointer for user data.</p>
+</td></tr>
+<tr><td class="val" id="alloc">alloc</td><td class="desc">
+<p>A pointer type to an allocation function.</p>
+</td></tr>
+<tr><td class="val" id="free">free</td><td class="desc">
+<p>A pointer type to an memory freeing function.</p>
+</td></tr>
+<tr><td class="val" id="realloc">realloc</td><td class="desc">
+<p>A pointer type to a reallocation function.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_stream">FT_Stream<a class="headerlink" href="#ft_stream" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_* <b>FT_Stream</b>;
+</pre>
+</div>
+
+<p>A handle to an input stream.</p>
+<h4>also</h4>
+
+<p>See <code><a href="ft2-system_interface.html#ft_streamrec">FT_StreamRec</a></code> for the publicly accessible fields of a given stream object.</p>
+<hr>
+
+<h2 id="ft_streamdesc">FT_StreamDesc<a class="headerlink" href="#ft_streamdesc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A union type used to store either a long or a pointer. This is used to store a file descriptor or a <code>FILE*</code> in an input stream.</p>
+<hr>
+
+<h2 id="ft_stream_iofunc">FT_Stream_IoFunc<a class="headerlink" href="#ft_stream_iofunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to seek and read data from a given input stream.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>A handle to the source stream.</p>
+</td></tr>
+<tr><td class="val" id="offset">offset</td><td class="desc">
+<p>The offset of read in stream (always from start).</p>
+</td></tr>
+<tr><td class="val" id="buffer">buffer</td><td class="desc">
+<p>The address of the read buffer.</p>
+</td></tr>
+<tr><td class="val" id="count">count</td><td class="desc">
+<p>The number of bytes to read from the stream.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The number of bytes effectively read by the stream.</p>
+<h4>note</h4>
+
+<p>This function might be called to perform a seek or skip operation with a <code>count</code> of&nbsp;0. A non-zero return value then indicates an error.</p>
+<hr>
+
+<h2 id="ft_stream_closefunc">FT_Stream_CloseFunc<a class="headerlink" href="#ft_stream_closefunc" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A function used to close a given input stream.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="stream">stream</td><td class="desc">
+<p>A handle to the target stream.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_streamrec">FT_StreamRec<a class="headerlink" href="#ft_streamrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_SYSTEM_H (freetype/ftsystem.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to describe an input stream.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="base">base</td><td class="desc">
+<p>For memory-based streams, this is the address of the first stream byte in memory. This field should always be set to <code>NULL</code> for disk-based streams.</p>
+</td></tr>
+<tr><td class="val" id="size">size</td><td class="desc">
+<p>The stream size in bytes.</p>
+<p>In case of compressed streams where the size is unknown before actually doing the decompression, the value is set to 0x7FFFFFFF. (Note that this size value can occur for normal streams also; it is thus just a hint.)</p>
+</td></tr>
+<tr><td class="val" id="pos">pos</td><td class="desc">
+<p>The current position within the stream.</p>
+</td></tr>
+<tr><td class="val" id="descriptor">descriptor</td><td class="desc">
+<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 <code>FILE*</code> pointers.</p>
+</td></tr>
+<tr><td class="val" id="pathname">pathname</td><td class="desc">
+<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><td class="val" id="read">read</td><td class="desc">
+<p>The stream's input function.</p>
+</td></tr>
+<tr><td class="val" id="close">close</td><td class="desc">
+<p>The stream's close function.</p>
+</td></tr>
+<tr><td class="val" id="memory">memory</td><td class="desc">
+<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><td class="val" id="cursor">cursor</td><td class="desc">
+<p>This field is set and used internally by FreeType when parsing frames. In particular, the <code>FT_GET_XXX</code> macros use this instead of the <code>pos</code> field.</p>
+</td></tr>
+<tr><td class="val" id="limit">limit</td><td class="desc">
+<p>This field is set and used internally by FreeType when parsing frames.</p>
+</td></tr>
+</table>
+
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Glyph Stroker
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-module_management.html" title="Module Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Module Management
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-t1_cid_driver.html b/freetype/docs/reference/site/ft2-t1_cid_driver.html
new file mode 100644
index 00000000..6f8a9b90
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-t1_cid_driver.html
@@ -0,0 +1,1157 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The Type 1 and CID drivers - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-type-1-and-cid-drivers" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The Type 1 and CID drivers
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The Type 1 and CID drivers
+ </label>
+
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link md-nav__link--active">
+ The Type 1 and CID drivers
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The Type 1 and CID drivers</p>
+<hr />
+<h1 id="the-type-1-and-cid-drivers">The Type 1 and CID drivers<a class="headerlink" href="#the-type-1-and-cid-drivers" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>It is possible to control the behaviour of FreeType's Type&nbsp;1 and Type&nbsp;1 CID drivers with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>.</p>
+<p>Behind the scenes, both drivers use the Adobe CFF engine for hinting; however, the used properties must be specified separately.</p>
+<p>The Type&nbsp;1 driver's module name is &lsquo;type1&rsquo;; the CID driver's module name is &lsquo;t1cid&rsquo;.</p>
+<p>Available properties are <code><a href="ft2-properties.html#hinting-engine">hinting-engine</a></code>, <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code>, <code><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a></code>, and <code><a href="ft2-properties.html#random-seed">random-seed</a></code>, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
+<p>Please see the &lsquo;<a href="ft2-cff_driver.html#cff_driver">The CFF driver</a>&rsquo; section for more details on the new hinting engine.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The CFF driver
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The TrueType driver
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-truetype_engine.html b/freetype/docs/reference/site/ft2-truetype_engine.html
new file mode 100644
index 00000000..770178d7
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-truetype_engine.html
@@ -0,0 +1,1240 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The TrueType Engine - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-truetype-engine" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The TrueType Engine
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10" checked>
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The TrueType Engine
+ </label>
+
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link md-nav__link--active">
+ The TrueType Engine
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypeenginetype" title="FT_TrueTypeEngineType" class="md-nav__link">
+ FT_TrueTypeEngineType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_truetype_engine_type" title="FT_Get_TrueType_Engine_Type" class="md-nav__link">
+ FT_Get_TrueType_Engine_Type
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_truetypeenginetype" title="FT_TrueTypeEngineType" class="md-nav__link">
+ FT_TrueTypeEngineType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_truetype_engine_type" title="FT_Get_TrueType_Engine_Type" class="md-nav__link">
+ FT_Get_TrueType_Engine_Type
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#miscellaneous">Miscellaneous</a> &raquo; The TrueType Engine</p>
+<hr />
+<h1 id="the-truetype-engine">The TrueType Engine<a class="headerlink" href="#the-truetype-engine" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.</p>
+<h2 id="ft_truetypeenginetype">FT_TrueTypeEngineType<a class="headerlink" href="#ft_truetypeenginetype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_TrueTypeEngineType_
+ {
+ <a href="ft2-truetype_engine.html#ft_truetype_engine_type_none">FT_TRUETYPE_ENGINE_TYPE_NONE</a> = 0,
+ <a href="ft2-truetype_engine.html#ft_truetype_engine_type_unpatented">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a>,
+ <a href="ft2-truetype_engine.html#ft_truetype_engine_type_patented">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a>
+
+ } <b>FT_TrueTypeEngineType</b>;
+</pre>
+</div>
+
+<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 <code><a href="ft2-truetype_engine.html#ft_get_truetype_engine_type">FT_Get_TrueType_Engine_Type</a></code> function.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ft_truetype_engine_type_none">FT_TRUETYPE_ENGINE_TYPE_NONE</td><td class="desc">
+<p>The library doesn't implement any kind of bytecode interpreter.</p>
+</td></tr>
+<tr><td class="val" id="ft_truetype_engine_type_unpatented">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</td><td class="desc">
+<p>Deprecated and removed.</p>
+</td></tr>
+<tr><td class="val" id="ft_truetype_engine_type_patented">FT_TRUETYPE_ENGINE_TYPE_PATENTED</td><td class="desc">
+<p>The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine (this was governed by patents until May 2010, hence the name).</p>
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.2</p>
+<hr>
+
+<h2 id="ft_get_truetype_engine_type">FT_Get_TrueType_Engine_Type<a class="headerlink" href="#ft_get_truetype_engine_type" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_MODULE_H (freetype/ftmodapi.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return an <code><a href="ft2-truetype_engine.html#ft_truetypeenginetype">FT_TrueTypeEngineType</a></code> value to indicate which level of the TrueType virtual machine a given library instance supports.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A library instance.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A value indicating which level is supported.</p>
+<h4>since</h4>
+
+<p>2.2</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Incremental Loading
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ TrueTypeGX/AAT Validation
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-truetype_tables.html b/freetype/docs/reference/site/ft2-truetype_tables.html
new file mode 100644
index 00000000..adced455
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-truetype_tables.html
@@ -0,0 +1,3227 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>TrueType Tables - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#truetype-tables" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ TrueType Tables
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ TrueType Tables
+ </label>
+
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link md-nav__link--active">
+ TrueType Tables
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_header" title="TT_Header" class="md-nav__link">
+ TT_Header
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_horiheader" title="TT_HoriHeader" class="md-nav__link">
+ TT_HoriHeader
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_vertheader" title="TT_VertHeader" class="md-nav__link">
+ TT_VertHeader
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_os2" title="TT_OS2" class="md-nav__link">
+ TT_OS2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_postscript" title="TT_Postscript" class="md-nav__link">
+ TT_Postscript
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_pclt" title="TT_PCLT" class="md-nav__link">
+ TT_PCLT
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_maxprofile" title="TT_MaxProfile" class="md-nav__link">
+ TT_MaxProfile
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_tag" title="FT_Sfnt_Tag" class="md-nav__link">
+ FT_Sfnt_Tag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_table" title="FT_Get_Sfnt_Table" class="md-nav__link">
+ FT_Get_Sfnt_Table
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_sfnt_table" title="FT_Load_Sfnt_Table" class="md-nav__link">
+ FT_Load_Sfnt_Table
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_table_info" title="FT_Sfnt_Table_Info" class="md-nav__link">
+ FT_Sfnt_Table_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cmap_language_id" title="FT_Get_CMap_Language_ID" class="md-nav__link">
+ FT_Get_CMap_Language_ID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cmap_format" title="FT_Get_CMap_Format" class="md-nav__link">
+ FT_Get_CMap_Format
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_unpatented_hinting" title="FT_PARAM_TAG_UNPATENTED_HINTING" class="md-nav__link">
+ FT_PARAM_TAG_UNPATENTED_HINTING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_platform_xxx" title="TT_PLATFORM_XXX" class="md-nav__link">
+ TT_PLATFORM_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_apple_id_xxx" title="TT_APPLE_ID_XXX" class="md-nav__link">
+ TT_APPLE_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_mac_id_xxx" title="TT_MAC_ID_XXX" class="md-nav__link">
+ TT_MAC_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_iso_id_xxx" title="TT_ISO_ID_XXX" class="md-nav__link">
+ TT_ISO_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ms_id_xxx" title="TT_MS_ID_XXX" class="md-nav__link">
+ TT_MS_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_adobe_id_xxx" title="TT_ADOBE_ID_XXX" class="md-nav__link">
+ TT_ADOBE_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_mac_langid_xxx" title="TT_MAC_LANGID_XXX" class="md-nav__link">
+ TT_MAC_LANGID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ms_langid_xxx" title="TT_MS_LANGID_XXX" class="md-nav__link">
+ TT_MS_LANGID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_name_id_xxx" title="TT_NAME_ID_XXX" class="md-nav__link">
+ TT_NAME_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ucr_xxx" title="TT_UCR_XXX" class="md-nav__link">
+ TT_UCR_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_header" title="TT_Header" class="md-nav__link">
+ TT_Header
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_horiheader" title="TT_HoriHeader" class="md-nav__link">
+ TT_HoriHeader
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_vertheader" title="TT_VertHeader" class="md-nav__link">
+ TT_VertHeader
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_os2" title="TT_OS2" class="md-nav__link">
+ TT_OS2
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_postscript" title="TT_Postscript" class="md-nav__link">
+ TT_Postscript
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_pclt" title="TT_PCLT" class="md-nav__link">
+ TT_PCLT
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_maxprofile" title="TT_MaxProfile" class="md-nav__link">
+ TT_MaxProfile
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_tag" title="FT_Sfnt_Tag" class="md-nav__link">
+ FT_Sfnt_Tag
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_sfnt_table" title="FT_Get_Sfnt_Table" class="md-nav__link">
+ FT_Get_Sfnt_Table
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_load_sfnt_table" title="FT_Load_Sfnt_Table" class="md-nav__link">
+ FT_Load_Sfnt_Table
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_sfnt_table_info" title="FT_Sfnt_Table_Info" class="md-nav__link">
+ FT_Sfnt_Table_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cmap_language_id" title="FT_Get_CMap_Language_ID" class="md-nav__link">
+ FT_Get_CMap_Language_ID
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_cmap_format" title="FT_Get_CMap_Format" class="md-nav__link">
+ FT_Get_CMap_Format
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_param_tag_unpatented_hinting" title="FT_PARAM_TAG_UNPATENTED_HINTING" class="md-nav__link">
+ FT_PARAM_TAG_UNPATENTED_HINTING
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_platform_xxx" title="TT_PLATFORM_XXX" class="md-nav__link">
+ TT_PLATFORM_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_apple_id_xxx" title="TT_APPLE_ID_XXX" class="md-nav__link">
+ TT_APPLE_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_mac_id_xxx" title="TT_MAC_ID_XXX" class="md-nav__link">
+ TT_MAC_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_iso_id_xxx" title="TT_ISO_ID_XXX" class="md-nav__link">
+ TT_ISO_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ms_id_xxx" title="TT_MS_ID_XXX" class="md-nav__link">
+ TT_MS_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_adobe_id_xxx" title="TT_ADOBE_ID_XXX" class="md-nav__link">
+ TT_ADOBE_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_mac_langid_xxx" title="TT_MAC_LANGID_XXX" class="md-nav__link">
+ TT_MAC_LANGID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ms_langid_xxx" title="TT_MS_LANGID_XXX" class="md-nav__link">
+ TT_MS_LANGID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_name_id_xxx" title="TT_NAME_ID_XXX" class="md-nav__link">
+ TT_NAME_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#tt_ucr_xxx" title="TT_UCR_XXX" class="md-nav__link">
+ TT_UCR_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; TrueType Tables</p>
+<hr />
+<h1 id="truetype-tables">TrueType Tables<a class="headerlink" href="#truetype-tables" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains definitions of some basic tables specific to TrueType and OpenType as well as some routines used to access and process them.</p>
+<h2 id="tt_header">TT_Header<a class="headerlink" href="#tt_header" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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_ulong">FT_ULong</a> Created [2];
+ <a href="ft2-basic_types.html#ft_ulong">FT_ULong</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>
+</div>
+
+<p>A structure to model a TrueType font header table. All fields follow the OpenType specification. The 64-bit timestamps are stored in two-element arrays <code>Created</code> and <code>Modified</code>, first the upper then the lower 32&nbsp;bits.</p>
+<hr>
+
+<h2 id="tt_horiheader">TT_HoriHeader<a class="headerlink" href="#tt_horiheader" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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 OpenType 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>
+</div>
+
+<p>A structure to model a TrueType horizontal header, the &lsquo;hhea&rsquo; table, as well as the corresponding horizontal metrics table, &lsquo;hmtx&rsquo;.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="version">Version</td><td class="desc">
+<p>The table version.</p>
+</td></tr>
+<tr><td class="val" id="ascender">Ascender</td><td class="desc">
+<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 <code>sTypoAscender</code> field of the &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
+</td></tr>
+<tr><td class="val" id="descender">Descender</td><td class="desc">
+<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 <code>sTypoDescender</code> field of the &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
+</td></tr>
+<tr><td class="val" id="line_gap">Line_Gap</td><td class="desc">
+<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><td class="val" id="advance_width_max">advance_Width_Max</td><td class="desc">
+<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><td class="val" id="min_left_side_bearing">min_Left_Side_Bearing</td><td class="desc">
+<p>The minimum left side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr><td class="val" id="min_right_side_bearing">min_Right_Side_Bearing</td><td class="desc">
+<p>The minimum right side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr><td class="val" id="xmax_extent">xMax_Extent</td><td class="desc">
+<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><td class="val" id="caret_slope_rise">caret_Slope_Rise</td><td class="desc">
+<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
+</td></tr>
+<tr><td class="val" id="caret_slope_run">caret_Slope_Run</td><td class="desc">
+<p>The run coefficient of the cursor's slope.</p>
+</td></tr>
+<tr><td class="val" id="caret_offset">caret_Offset</td><td class="desc">
+<p>The cursor's offset for slanted fonts.</p>
+</td></tr>
+<tr><td class="val" id="reserved">Reserved</td><td class="desc">
+<p>8&nbsp;reserved bytes.</p>
+</td></tr>
+<tr><td class="val" id="metric_data_format">metric_Data_Format</td><td class="desc">
+<p>Always&nbsp;0.</p>
+</td></tr>
+<tr><td class="val" id="number_of_hmetrics">number_Of_HMetrics</td><td class="desc">
+<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><td class="val" id="long_metrics">long_metrics</td><td class="desc">
+<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="short_metrics">short_metrics</td><td class="desc">
+<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>For an OpenType variation font, the values of the following fields can change after a call to <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: <code>caret_Slope_Rise</code>, <code>caret_Slope_Run</code>, and <code>caret_Offset</code>.</p>
+<hr>
+
+<h2 id="tt_vertheader">TT_VertHeader<a class="headerlink" href="#tt_vertheader" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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 top-sb */
+ <a href="ft2-basic_types.html#ft_short">FT_Short</a> min_Bottom_Side_Bearing; /* minimum bottom-sb */
+ <a href="ft2-basic_types.html#ft_short">FT_Short</a> yMax_Extent; /* 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 OpenType specification */
+ /* but they are used to connect the metrics header to the relevant */
+ /* 'vmtx' table. */
+
+ <span class="keyword">void</span>* long_metrics;
+ <span class="keyword">void</span>* short_metrics;
+
+ } <b>TT_VertHeader</b>;
+</pre>
+</div>
+
+<p>A structure used to model a TrueType vertical header, the &lsquo;vhea&rsquo; table, as well as the corresponding vertical metrics table, &lsquo;vmtx&rsquo;.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="version">Version</td><td class="desc">
+<p>The table version.</p>
+</td></tr>
+<tr><td class="val" id="ascender">Ascender</td><td class="desc">
+<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 <code>sTypoAscender</code> field of the &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
+</td></tr>
+<tr><td class="val" id="descender">Descender</td><td class="desc">
+<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 <code>sTypoDescender</code> field of the &lsquo;OS/2&rsquo; table instead if you want the correct one.</p>
+</td></tr>
+<tr><td class="val" id="line_gap">Line_Gap</td><td class="desc">
+<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><td class="val" id="advance_height_max">advance_Height_Max</td><td class="desc">
+<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><td class="val" id="min_top_side_bearing">min_Top_Side_Bearing</td><td class="desc">
+<p>The minimum top side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr><td class="val" id="min_bottom_side_bearing">min_Bottom_Side_Bearing</td><td class="desc">
+<p>The minimum bottom side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr><td class="val" id="ymax_extent">yMax_Extent</td><td class="desc">
+<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><td class="val" id="caret_slope_rise">caret_Slope_Rise</td><td class="desc">
+<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
+</td></tr>
+<tr><td class="val" id="caret_slope_run">caret_Slope_Run</td><td class="desc">
+<p>The run coefficient of the cursor's slope.</p>
+</td></tr>
+<tr><td class="val" id="caret_offset">caret_Offset</td><td class="desc">
+<p>The cursor's offset for slanted fonts.</p>
+</td></tr>
+<tr><td class="val" id="reserved">Reserved</td><td class="desc">
+<p>8&nbsp;reserved bytes.</p>
+</td></tr>
+<tr><td class="val" id="metric_data_format">metric_Data_Format</td><td class="desc">
+<p>Always&nbsp;0.</p>
+</td></tr>
+<tr><td class="val" id="number_of_vmetrics">number_Of_VMetrics</td><td class="desc">
+<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><td class="val" id="long_metrics">long_metrics</td><td class="desc">
+<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
+</td></tr>
+<tr><td class="val" id="short_metrics">short_metrics</td><td class="desc">
+<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>For an OpenType variation font, the values of the following fields can change after a call to <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: <code>Ascender</code>, <code>Descender</code>, <code>Line_Gap</code>, <code>caret_Slope_Rise</code>, <code>caret_Slope_Run</code>, and <code>caret_Offset</code>.</p>
+<hr>
+
+<h2 id="tt_os2">TT_OS2<a class="headerlink" href="#tt_os2" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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_ushort">FT_UShort</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 and higher: */
+
+ <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 and higher: */
+
+ <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;
+
+ /* only version 5 and higher: */
+
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> usLowerOpticalPointSize; /* in twips (1/20th points) */
+ <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> usUpperOpticalPointSize; /* in twips (1/20th points) */
+
+ } <b>TT_OS2</b>;
+</pre>
+</div>
+
+<p>A structure to model a TrueType &lsquo;OS/2&rsquo; table. All fields comply to the OpenType specification.</p>
+<p>Note that we now support old Mac fonts that do not include an &lsquo;OS/2&rsquo; table. In this case, the <code>version</code> field is always set to 0xFFFF.</p>
+<h4>note</h4>
+
+<p>For an OpenType variation font, the values of the following fields can change after a call to <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: <code>sCapHeight</code>, <code>sTypoAscender</code>, <code>sTypoDescender</code>, <code>sTypoLineGap</code>, <code>sxHeight</code>, <code>usWinAscent</code>, <code>usWinDescent</code>, <code>yStrikeoutPosition</code>, <code>yStrikeoutSize</code>, <code>ySubscriptXOffset</code>, <code>ySubScriptXSize</code>, <code>ySubscriptYOffset</code>, <code>ySubscriptYSize</code>, <code>ySuperscriptXOffset</code>, <code>ySuperscriptXSize</code>, <code>ySuperscriptYOffset</code>, and <code>ySuperscriptYSize</code>.</p>
+<p>Possible values for bits in the <code>ulUnicodeRangeX</code> fields are given by the <code><a href="ft2-truetype_tables.html#tt_ucr_xxx">TT_UCR_XXX</a></code> macros.</p>
+<hr>
+
+<h2 id="tt_postscript">TT_Postscript<a class="headerlink" href="#tt_postscript" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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 'post' table, but we don't */
+ /* load them by default. */
+
+ } <b>TT_Postscript</b>;
+</pre>
+</div>
+
+<p>A structure to model a TrueType &lsquo;post&rsquo; table. All fields comply to the OpenType specification. This structure does not reference a font's PostScript glyph names; use <code><a href="ft2-base_interface.html#ft_get_glyph_name">FT_Get_Glyph_Name</a></code> to retrieve them.</p>
+<h4>note</h4>
+
+<p>For an OpenType variation font, the values of the following fields can change after a call to <code><a href="ft2-multiple_masters.html#ft_set_var_design_coordinates">FT_Set_Var_Design_Coordinates</a></code> (and friends) if the font contains an &lsquo;MVAR&rsquo; table: <code>underlinePosition</code> and <code>underlineThickness</code>.</p>
+<hr>
+
+<h2 id="tt_pclt">TT_PCLT<a class="headerlink" href="#tt_pclt" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure to model a TrueType &lsquo;PCLT&rsquo; table. All fields comply to the OpenType specification.</p>
+<hr>
+
+<h2 id="tt_maxprofile">TT_MaxProfile<a class="headerlink" href="#tt_maxprofile" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>The maximum profile (&lsquo;maxp&rsquo;) table contains many max values, which can be used to pre-allocate arrays for speeding up glyph loading and hinting.</p>
+<h4>fields</h4>
+
+<table class="fields">
+<tr><td class="val" id="version">version</td><td class="desc">
+<p>The version number.</p>
+</td></tr>
+<tr><td class="val" id="numglyphs">numGlyphs</td><td class="desc">
+<p>The number of glyphs in this TrueType font.</p>
+</td></tr>
+<tr><td class="val" id="maxpoints">maxPoints</td><td class="desc">
+<p>The maximum number of points in a non-composite TrueType glyph. See also <code>maxCompositePoints</code>.</p>
+</td></tr>
+<tr><td class="val" id="maxcontours">maxContours</td><td class="desc">
+<p>The maximum number of contours in a non-composite TrueType glyph. See also <code>maxCompositeContours</code>.</p>
+</td></tr>
+<tr><td class="val" id="maxcompositepoints">maxCompositePoints</td><td class="desc">
+<p>The maximum number of points in a composite TrueType glyph. See also <code>maxPoints</code>.</p>
+</td></tr>
+<tr><td class="val" id="maxcompositecontours">maxCompositeContours</td><td class="desc">
+<p>The maximum number of contours in a composite TrueType glyph. See also <code>maxContours</code>.</p>
+</td></tr>
+<tr><td class="val" id="maxzones">maxZones</td><td class="desc">
+<p>The maximum number of zones used for glyph hinting.</p>
+</td></tr>
+<tr><td class="val" id="maxtwilightpoints">maxTwilightPoints</td><td class="desc">
+<p>The maximum number of points in the twilight zone used for glyph hinting.</p>
+</td></tr>
+<tr><td class="val" id="maxstorage">maxStorage</td><td class="desc">
+<p>The maximum number of elements in the storage area used for glyph hinting.</p>
+</td></tr>
+<tr><td class="val" id="maxfunctiondefs">maxFunctionDefs</td><td class="desc">
+<p>The maximum number of function definitions in the TrueType bytecode for this font.</p>
+</td></tr>
+<tr><td class="val" id="maxinstructiondefs">maxInstructionDefs</td><td class="desc">
+<p>The maximum number of instruction definitions in the TrueType bytecode for this font.</p>
+</td></tr>
+<tr><td class="val" id="maxstackelements">maxStackElements</td><td class="desc">
+<p>The maximum number of stack elements used during bytecode interpretation.</p>
+</td></tr>
+<tr><td class="val" id="maxsizeofinstructions">maxSizeOfInstructions</td><td class="desc">
+<p>The maximum number of TrueType opcodes used for glyph hinting.</p>
+</td></tr>
+<tr><td class="val" id="maxcomponentelements">maxComponentElements</td><td class="desc">
+<p>The maximum number of simple (i.e., non-composite) glyphs in a composite glyph.</p>
+</td></tr>
+<tr><td class="val" id="maxcomponentdepth">maxComponentDepth</td><td class="desc">
+<p>The maximum nesting depth of composite glyphs.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>This structure is only used during font loading.</p>
+<hr>
+
+<h2 id="ft_sfnt_tag">FT_Sfnt_Tag<a class="headerlink" href="#ft_sfnt_tag" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Sfnt_Tag_
+ {
+ <a href="ft2-truetype_tables.html#ft_sfnt_head">FT_SFNT_HEAD</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_maxp">FT_SFNT_MAXP</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_os2">FT_SFNT_OS2</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_hhea">FT_SFNT_HHEA</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_vhea">FT_SFNT_VHEA</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_post">FT_SFNT_POST</a>,
+ <a href="ft2-truetype_tables.html#ft_sfnt_pclt">FT_SFNT_PCLT</a>,
+
+ FT_SFNT_MAX
+
+ } <b>FT_Sfnt_Tag</b>;
+
+ /* these constants are deprecated; use the corresponding `<b>FT_Sfnt_Tag</b>` */
+ /* values instead */
+#<span class="keyword">define</span> ft_sfnt_head <a href="ft2-truetype_tables.html#ft_sfnt_head">FT_SFNT_HEAD</a>
+#<span class="keyword">define</span> ft_sfnt_maxp <a href="ft2-truetype_tables.html#ft_sfnt_maxp">FT_SFNT_MAXP</a>
+#<span class="keyword">define</span> ft_sfnt_os2 <a href="ft2-truetype_tables.html#ft_sfnt_os2">FT_SFNT_OS2</a>
+#<span class="keyword">define</span> ft_sfnt_hhea <a href="ft2-truetype_tables.html#ft_sfnt_hhea">FT_SFNT_HHEA</a>
+#<span class="keyword">define</span> ft_sfnt_vhea <a href="ft2-truetype_tables.html#ft_sfnt_vhea">FT_SFNT_VHEA</a>
+#<span class="keyword">define</span> ft_sfnt_post <a href="ft2-truetype_tables.html#ft_sfnt_post">FT_SFNT_POST</a>
+#<span class="keyword">define</span> ft_sfnt_pclt <a href="ft2-truetype_tables.html#ft_sfnt_pclt">FT_SFNT_PCLT</a>
+</pre>
+</div>
+
+<p>An enumeration to specify indices of SFNT tables loaded and parsed by FreeType during initialization of an SFNT font. Used in the <code><a href="ft2-truetype_tables.html#ft_get_sfnt_table">FT_Get_Sfnt_Table</a></code> API function.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_sfnt_head">FT_SFNT_HEAD</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_header">TT_Header</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_maxp">FT_SFNT_MAXP</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_maxprofile">TT_MaxProfile</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_os2">FT_SFNT_OS2</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_os2">TT_OS2</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_hhea">FT_SFNT_HHEA</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_horiheader">TT_HoriHeader</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_vhea">FT_SFNT_VHEA</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_vertheader">TT_VertHeader</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_post">FT_SFNT_POST</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_postscript">TT_Postscript</a></code> structure.</p>
+</td></tr>
+<tr><td class="val" id="ft_sfnt_pclt">FT_SFNT_PCLT</td><td class="desc">
+<p>To access the font's <code><a href="ft2-truetype_tables.html#tt_pclt">TT_PCLT</a></code> structure.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_get_sfnt_table">FT_Get_Sfnt_Table<a class="headerlink" href="#ft_get_sfnt_table" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return a pointer to a given SFNT table stored within a face.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source.</p>
+</td></tr>
+<tr><td class="val" id="tag">tag</td><td class="desc">
+<p>The index of the SFNT table.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>A type-less pointer to the table. This will be <code>NULL</code> in case of error, or if the corresponding table was not found <strong>OR</strong> loaded from the file.</p>
+<p>Use a typecast according to <code>tag</code> to access the structure elements.</p>
+<h4>note</h4>
+
+<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 <code><a href="ft2-truetype_tables.html#ft_sfnt_tag">FT_Sfnt_Tag</a></code> for a list.</p>
+<h4>example</h4>
+
+<p>Here is an example demonstrating access to the &lsquo;vhea&rsquo; table.
+<div class="codehilite"><pre><span></span> TT_VertHeader* vert_header;
+
+
+ vert_header =
+ (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA );
+</pre></div></p>
+<hr>
+
+<h2 id="ft_load_sfnt_table">FT_Load_Sfnt_Table<a class="headerlink" href="#ft_load_sfnt_table" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Load any SFNT font table into client memory.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="tag">tag</td><td class="desc">
+<p>The four-byte tag of the table to load. Use value&nbsp;0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the <code><a href="ft2-header_file_macros.html#ft_truetype_tags_h">FT_TRUETYPE_TAGS_H</a></code> file, or forge a new one with <code><a href="ft2-basic_types.html#ft_make_tag">FT_MAKE_TAG</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="offset">offset</td><td class="desc">
+<p>The starting offset in the table (or file if tag&nbsp;==&nbsp;0).</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="buffer">buffer</td><td class="desc">
+<p>The target buffer address. The client must ensure that the memory array is big enough to hold the data.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="length">length</td><td class="desc">
+<p>If the <code>length</code> parameter is <code>NULL</code>, try to load the whole table. Return an error code if it fails.</p>
+<p>Else, if <code>*length</code> 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>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>If you need to determine the table's length you should first call this function with <code>*length</code> set to&nbsp;0, as in the following example:
+<div class="codehilite"><pre><span></span> 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></div></p>
+<p>Note that structures like <code><a href="ft2-truetype_tables.html#tt_header">TT_Header</a></code> or <code><a href="ft2-truetype_tables.html#tt_os2">TT_OS2</a></code> can't be used with this function; they are limited to <code><a href="ft2-truetype_tables.html#ft_get_sfnt_table">FT_Get_Sfnt_Table</a></code>. Reason is that those structures depend on the processor architecture, with varying size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).</p>
+<hr>
+
+<h2 id="ft_sfnt_table_info">FT_Sfnt_Table_Info<a class="headerlink" href="#ft_sfnt_table_info" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return information on an SFNT table.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the source face.</p>
+</td></tr>
+<tr><td class="val" id="table_index">table_index</td><td class="desc">
+<p>The index of an SFNT table. The function returns FT_Err_Table_Missing for an invalid value.</p>
+</td></tr>
+</table>
+
+<h4>inout</h4>
+
+<table class="fields">
+<tr><td class="val" id="tag">tag</td><td class="desc">
+<p>The name tag of the SFNT table. If the value is <code>NULL</code>, <code>table_index</code> is ignored, and <code>length</code> returns the number of SFNT tables in the font.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="length">length</td><td class="desc">
+<p>The length of the SFNT table (or the number of SFNT tables, depending on <code>tag</code>).</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>While parsing fonts, FreeType handles SFNT tables with length zero as missing.</p>
+<hr>
+
+<h2 id="ft_get_cmap_language_id">FT_Get_CMap_Language_ID<a class="headerlink" href="#ft_get_cmap_language_id" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return cmap language ID as specified in the OpenType standard. Definitions of language ID values are in file <code><a href="ft2-header_file_macros.html#ft_truetype_ids_h">FT_TRUETYPE_IDS_H</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="charmap">charmap</td><td class="desc">
+<p>The target charmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The language ID of <code>charmap</code>. If <code>charmap</code> doesn't belong to an SFNT face, just return&nbsp;0 as the default value.</p>
+<p>For a format&nbsp;14 cmap (to access Unicode IVS), the return value is 0xFFFFFFFF.</p>
+<hr>
+
+<h2 id="ft_get_cmap_format">FT_Get_CMap_Format<a class="headerlink" href="#ft_get_cmap_format" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return the format of an SFNT &lsquo;cmap&rsquo; table.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="charmap">charmap</td><td class="desc">
+<p>The target charmap.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The format of <code>charmap</code>. If <code>charmap</code> doesn't belong to an SFNT face, return -1.</p>
+<hr>
+
+<h2 id="ft_param_tag_unpatented_hinting">FT_PARAM_TAG_UNPATENTED_HINTING<a class="headerlink" href="#ft_param_tag_unpatented_hinting" title="Permanent link">&para;</a></h2>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <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>
+</div>
+
+<p>Deprecated, no effect.</p>
+<p>Previously: A constant used as the tag of an <code><a href="ft2-base_interface.html#ft_parameter">FT_Parameter</a></code> structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by <code><a href="ft2-base_interface.html#ft_open_face">FT_Open_Face</a></code>.</p>
+<hr>
+
+<h2 id="tt_platform_xxx">TT_PLATFORM_XXX<a class="headerlink" href="#tt_platform_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_apple_unicode">TT_PLATFORM_APPLE_UNICODE</a> 0
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_macintosh">TT_PLATFORM_MACINTOSH</a> 1
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_iso">TT_PLATFORM_ISO</a> 2 /* deprecated */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_microsoft">TT_PLATFORM_MICROSOFT</a> 3
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_custom">TT_PLATFORM_CUSTOM</a> 4
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_platform_adobe">TT_PLATFORM_ADOBE</a> 7 /* artificial */
+</pre>
+</div>
+
+<p>A list of valid values for the <code>platform_id</code> identifier code in <code><a href="ft2-base_interface.html#ft_charmaprec">FT_CharMapRec</a></code> and <code><a href="ft2-sfnt_names.html#ft_sfntname">FT_SfntName</a></code> structures.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="tt_platform_apple_unicode">TT_PLATFORM_APPLE_UNICODE</td><td class="desc">
+<p>Used by Apple to indicate a Unicode character map and/or name entry. See <code><a href="ft2-truetype_tables.html#tt_apple_id_xxx">TT_APPLE_ID_XXX</a></code> for corresponding <code>encoding_id</code> values. Note that name entries in this format are coded as big-endian UCS-2 character codes <em>only</em>.</p>
+</td></tr>
+<tr><td class="val" id="tt_platform_macintosh">TT_PLATFORM_MACINTOSH</td><td class="desc">
+<p>Used by Apple to indicate a MacOS-specific charmap and/or name entry. See <code><a href="ft2-truetype_tables.html#tt_mac_id_xxx">TT_MAC_ID_XXX</a></code> for corresponding <code>encoding_id</code> 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><td class="val" id="tt_platform_iso">TT_PLATFORM_ISO</td><td class="desc">
+<p>This value was used to specify ISO/IEC 10646 charmaps. It is however now deprecated. See <code><a href="ft2-truetype_tables.html#tt_iso_id_xxx">TT_ISO_ID_XXX</a></code> for a list of corresponding <code>encoding_id</code> values.</p>
+</td></tr>
+<tr><td class="val" id="tt_platform_microsoft">TT_PLATFORM_MICROSOFT</td><td class="desc">
+<p>Used by Microsoft to indicate Windows-specific charmaps. See <code><a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_XXX</a></code> for a list of corresponding <code>encoding_id</code> values. Note that most fonts contain a Unicode charmap using (<code>TT_PLATFORM_MICROSOFT</code>, <code><a href="ft2-truetype_tables.html#tt_ms_id_xxx">TT_MS_ID_UNICODE_CS</a></code>).</p>
+</td></tr>
+<tr><td class="val" id="tt_platform_custom">TT_PLATFORM_CUSTOM</td><td class="desc">
+<p>Used to indicate application-specific charmaps.</p>
+</td></tr>
+<tr><td class="val" id="tt_platform_adobe">TT_PLATFORM_ADOBE</td><td class="desc">
+<p>This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific charmaps in an <code><a href="ft2-base_interface.html#ft_charmaprec">FT_CharMapRec</a></code> structure. See <code><a href="ft2-truetype_tables.html#tt_adobe_id_xxx">TT_ADOBE_ID_XXX</a></code>.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="tt_apple_id_xxx">TT_APPLE_ID_XXX<a class="headerlink" href="#tt_apple_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_default">TT_APPLE_ID_DEFAULT</a> 0 /* Unicode 1.0 */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_unicode_1_1">TT_APPLE_ID_UNICODE_1_1</a> 1 /* specify Hangul at U+34xx */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_iso_10646">TT_APPLE_ID_ISO_10646</a> 2 /* deprecated */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_unicode_2_0">TT_APPLE_ID_UNICODE_2_0</a> 3 /* or later */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_unicode_32">TT_APPLE_ID_UNICODE_32</a> 4 /* 2.0 or later, full repertoire */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_variant_selector">TT_APPLE_ID_VARIANT_SELECTOR</a> 5 /* variation selector data */
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_apple_id_full_unicode">TT_APPLE_ID_FULL_UNICODE</a> 6 /* used with type 13 cmaps */
+</pre>
+</div>
+
+<p>A list of valid values for the <code>encoding_id</code> for <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_APPLE_UNICODE</a></code> charmaps and name entries.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="tt_apple_id_default">TT_APPLE_ID_DEFAULT</td><td class="desc">
+<p>Unicode version 1.0.</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_unicode_1_1">TT_APPLE_ID_UNICODE_1_1</td><td class="desc">
+<p>Unicode 1.1; specifies Hangul characters starting at U+34xx.</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_iso_10646">TT_APPLE_ID_ISO_10646</td><td class="desc">
+<p>Deprecated (identical to preceding).</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_unicode_2_0">TT_APPLE_ID_UNICODE_2_0</td><td class="desc">
+<p>Unicode 2.0 and beyond (UTF-16 BMP only).</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_unicode_32">TT_APPLE_ID_UNICODE_32</td><td class="desc">
+<p>Unicode 3.1 and beyond, using UTF-32.</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_variant_selector">TT_APPLE_ID_VARIANT_SELECTOR</td><td class="desc">
+<p>From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap.</p>
+</td></tr>
+<tr><td class="val" id="tt_apple_id_full_unicode">TT_APPLE_ID_FULL_UNICODE</td><td class="desc">
+<p>Used for fallback fonts that provide complete Unicode coverage with a type&nbsp;13 cmap.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="tt_mac_id_xxx">TT_MAC_ID_XXX<a class="headerlink" href="#tt_mac_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> TT_MAC_ID_ROMAN 0
+#<span class="keyword">define</span> TT_MAC_ID_JAPANESE 1
+#<span class="keyword">define</span> TT_MAC_ID_TRADITIONAL_CHINESE 2
+#<span class="keyword">define</span> TT_MAC_ID_KOREAN 3
+#<span class="keyword">define</span> TT_MAC_ID_ARABIC 4
+#<span class="keyword">define</span> TT_MAC_ID_HEBREW 5
+#<span class="keyword">define</span> TT_MAC_ID_GREEK 6
+#<span class="keyword">define</span> TT_MAC_ID_RUSSIAN 7
+#<span class="keyword">define</span> TT_MAC_ID_RSYMBOL 8
+#<span class="keyword">define</span> TT_MAC_ID_DEVANAGARI 9
+#<span class="keyword">define</span> TT_MAC_ID_GURMUKHI 10
+#<span class="keyword">define</span> TT_MAC_ID_GUJARATI 11
+#<span class="keyword">define</span> TT_MAC_ID_ORIYA 12
+#<span class="keyword">define</span> TT_MAC_ID_BENGALI 13
+#<span class="keyword">define</span> TT_MAC_ID_TAMIL 14
+#<span class="keyword">define</span> TT_MAC_ID_TELUGU 15
+#<span class="keyword">define</span> TT_MAC_ID_KANNADA 16
+#<span class="keyword">define</span> TT_MAC_ID_MALAYALAM 17
+#<span class="keyword">define</span> TT_MAC_ID_SINHALESE 18
+#<span class="keyword">define</span> TT_MAC_ID_BURMESE 19
+#<span class="keyword">define</span> TT_MAC_ID_KHMER 20
+#<span class="keyword">define</span> TT_MAC_ID_THAI 21
+#<span class="keyword">define</span> TT_MAC_ID_LAOTIAN 22
+#<span class="keyword">define</span> TT_MAC_ID_GEORGIAN 23
+#<span class="keyword">define</span> TT_MAC_ID_ARMENIAN 24
+#<span class="keyword">define</span> TT_MAC_ID_MALDIVIAN 25
+#<span class="keyword">define</span> TT_MAC_ID_SIMPLIFIED_CHINESE 25
+#<span class="keyword">define</span> TT_MAC_ID_TIBETAN 26
+#<span class="keyword">define</span> TT_MAC_ID_MONGOLIAN 27
+#<span class="keyword">define</span> TT_MAC_ID_GEEZ 28
+#<span class="keyword">define</span> TT_MAC_ID_SLAVIC 29
+#<span class="keyword">define</span> TT_MAC_ID_VIETNAMESE 30
+#<span class="keyword">define</span> TT_MAC_ID_SINDHI 31
+#<span class="keyword">define</span> TT_MAC_ID_UNINTERP 32
+</pre>
+</div>
+
+<p>A list of valid values for the <code>encoding_id</code> for <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MACINTOSH</a></code> charmaps and name entries.</p>
+<hr>
+
+<h2 id="tt_iso_id_xxx">TT_ISO_ID_XXX<a class="headerlink" href="#tt_iso_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_iso_id_7bit_ascii">TT_ISO_ID_7BIT_ASCII</a> 0
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_iso_id_10646">TT_ISO_ID_10646</a> 1
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_iso_id_8859_1">TT_ISO_ID_8859_1</a> 2
+</pre>
+</div>
+
+<p>A list of valid values for the <code>encoding_id</code> for <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_ISO</a></code> charmaps and name entries.</p>
+<p>Their use is now deprecated.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="tt_iso_id_7bit_ascii">TT_ISO_ID_7BIT_ASCII</td><td class="desc">
+<p>ASCII.</p>
+</td></tr>
+<tr><td class="val" id="tt_iso_id_10646">TT_ISO_ID_10646</td><td class="desc">
+<p>ISO/10646.</p>
+</td></tr>
+<tr><td class="val" id="tt_iso_id_8859_1">TT_ISO_ID_8859_1</td><td class="desc">
+<p>Also known as Latin-1.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="tt_ms_id_xxx">TT_MS_ID_XXX<a class="headerlink" href="#tt_ms_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_symbol_cs">TT_MS_ID_SYMBOL_CS</a> 0
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_unicode_cs">TT_MS_ID_UNICODE_CS</a> 1
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_sjis">TT_MS_ID_SJIS</a> 2
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_prc">TT_MS_ID_PRC</a> 3
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_big_5">TT_MS_ID_BIG_5</a> 4
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_wansung">TT_MS_ID_WANSUNG</a> 5
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_johab">TT_MS_ID_JOHAB</a> 6
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_ms_id_ucs_4">TT_MS_ID_UCS_4</a> 10
+
+ /* this value is deprecated */
+#<span class="keyword">define</span> TT_MS_ID_GB2312 <a href="ft2-truetype_tables.html#tt_ms_id_prc">TT_MS_ID_PRC</a>
+</pre>
+</div>
+
+<p>A list of valid values for the <code>encoding_id</code> for <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MICROSOFT</a></code> charmaps and name entries.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="tt_ms_id_symbol_cs">TT_MS_ID_SYMBOL_CS</td><td class="desc">
+<p>Microsoft symbol encoding. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_MS_SYMBOL</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_unicode_cs">TT_MS_ID_UNICODE_CS</td><td class="desc">
+<p>Microsoft WGL4 charmap, matching Unicode. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_UNICODE</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_sjis">TT_MS_ID_SJIS</td><td class="desc">
+<p>Shift JIS Japanese encoding. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_SJIS</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_prc">TT_MS_ID_PRC</td><td class="desc">
+<p>Chinese encodings as used in the People's Republic of China (PRC). This means the encodings GB&nbsp;2312 and its supersets GBK and GB&nbsp;18030. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_PRC</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_big_5">TT_MS_ID_BIG_5</td><td class="desc">
+<p>Traditional Chinese as used in Taiwan and Hong Kong. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_BIG5</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_wansung">TT_MS_ID_WANSUNG</td><td class="desc">
+<p>Korean Extended Wansung encoding. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_WANSUNG</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_johab">TT_MS_ID_JOHAB</td><td class="desc">
+<p>Korean Johab encoding. See <code><a href="ft2-base_interface.html#ft_encoding">FT_ENCODING_JOHAB</a></code>.</p>
+</td></tr>
+<tr><td class="val" id="tt_ms_id_ucs_4">TT_MS_ID_UCS_4</td><td class="desc">
+<p>UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001).</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="tt_adobe_id_xxx">TT_ADOBE_ID_XXX<a class="headerlink" href="#tt_adobe_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_adobe_id_standard">TT_ADOBE_ID_STANDARD</a> 0
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_adobe_id_expert">TT_ADOBE_ID_EXPERT</a> 1
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_adobe_id_custom">TT_ADOBE_ID_CUSTOM</a> 2
+#<span class="keyword">define</span> <a href="ft2-truetype_tables.html#tt_adobe_id_latin_1">TT_ADOBE_ID_LATIN_1</a> 3
+</pre>
+</div>
+
+<p>A list of valid values for the <code>encoding_id</code> for <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_ADOBE</a></code> charmaps. This is a FreeType-specific extension!</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="tt_adobe_id_standard">TT_ADOBE_ID_STANDARD</td><td class="desc">
+<p>Adobe standard encoding.</p>
+</td></tr>
+<tr><td class="val" id="tt_adobe_id_expert">TT_ADOBE_ID_EXPERT</td><td class="desc">
+<p>Adobe expert encoding.</p>
+</td></tr>
+<tr><td class="val" id="tt_adobe_id_custom">TT_ADOBE_ID_CUSTOM</td><td class="desc">
+<p>Adobe custom encoding.</p>
+</td></tr>
+<tr><td class="val" id="tt_adobe_id_latin_1">TT_ADOBE_ID_LATIN_1</td><td class="desc">
+<p>Adobe Latin&nbsp;1 encoding.</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="tt_mac_langid_xxx">TT_MAC_LANGID_XXX<a class="headerlink" href="#tt_mac_langid_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> TT_MAC_LANGID_ENGLISH 0
+#<span class="keyword">define</span> TT_MAC_LANGID_FRENCH 1
+#<span class="keyword">define</span> TT_MAC_LANGID_GERMAN 2
+#<span class="keyword">define</span> TT_MAC_LANGID_ITALIAN 3
+#<span class="keyword">define</span> TT_MAC_LANGID_DUTCH 4
+#<span class="keyword">define</span> TT_MAC_LANGID_SWEDISH 5
+#<span class="keyword">define</span> TT_MAC_LANGID_SPANISH 6
+#<span class="keyword">define</span> TT_MAC_LANGID_DANISH 7
+#<span class="keyword">define</span> TT_MAC_LANGID_PORTUGUESE 8
+#<span class="keyword">define</span> TT_MAC_LANGID_NORWEGIAN 9
+#<span class="keyword">define</span> TT_MAC_LANGID_HEBREW 10
+#<span class="keyword">define</span> TT_MAC_LANGID_JAPANESE 11
+#<span class="keyword">define</span> TT_MAC_LANGID_ARABIC 12
+#<span class="keyword">define</span> TT_MAC_LANGID_FINNISH 13
+#<span class="keyword">define</span> TT_MAC_LANGID_GREEK 14
+#<span class="keyword">define</span> TT_MAC_LANGID_ICELANDIC 15
+#<span class="keyword">define</span> TT_MAC_LANGID_MALTESE 16
+#<span class="keyword">define</span> TT_MAC_LANGID_TURKISH 17
+#<span class="keyword">define</span> TT_MAC_LANGID_CROATIAN 18
+#<span class="keyword">define</span> TT_MAC_LANGID_CHINESE_TRADITIONAL 19
+#<span class="keyword">define</span> TT_MAC_LANGID_URDU 20
+#<span class="keyword">define</span> TT_MAC_LANGID_HINDI 21
+#<span class="keyword">define</span> TT_MAC_LANGID_THAI 22
+#<span class="keyword">define</span> TT_MAC_LANGID_KOREAN 23
+#<span class="keyword">define</span> TT_MAC_LANGID_LITHUANIAN 24
+#<span class="keyword">define</span> TT_MAC_LANGID_POLISH 25
+#<span class="keyword">define</span> TT_MAC_LANGID_HUNGARIAN 26
+#<span class="keyword">define</span> TT_MAC_LANGID_ESTONIAN 27
+#<span class="keyword">define</span> TT_MAC_LANGID_LETTISH 28
+#<span class="keyword">define</span> TT_MAC_LANGID_SAAMISK 29
+#<span class="keyword">define</span> TT_MAC_LANGID_FAEROESE 30
+#<span class="keyword">define</span> TT_MAC_LANGID_FARSI 31
+#<span class="keyword">define</span> TT_MAC_LANGID_RUSSIAN 32
+#<span class="keyword">define</span> TT_MAC_LANGID_CHINESE_SIMPLIFIED 33
+#<span class="keyword">define</span> TT_MAC_LANGID_FLEMISH 34
+#<span class="keyword">define</span> TT_MAC_LANGID_IRISH 35
+#<span class="keyword">define</span> TT_MAC_LANGID_ALBANIAN 36
+#<span class="keyword">define</span> TT_MAC_LANGID_ROMANIAN 37
+#<span class="keyword">define</span> TT_MAC_LANGID_CZECH 38
+#<span class="keyword">define</span> TT_MAC_LANGID_SLOVAK 39
+#<span class="keyword">define</span> TT_MAC_LANGID_SLOVENIAN 40
+#<span class="keyword">define</span> TT_MAC_LANGID_YIDDISH 41
+#<span class="keyword">define</span> TT_MAC_LANGID_SERBIAN 42
+#<span class="keyword">define</span> TT_MAC_LANGID_MACEDONIAN 43
+#<span class="keyword">define</span> TT_MAC_LANGID_BULGARIAN 44
+#<span class="keyword">define</span> TT_MAC_LANGID_UKRAINIAN 45
+#<span class="keyword">define</span> TT_MAC_LANGID_BYELORUSSIAN 46
+#<span class="keyword">define</span> TT_MAC_LANGID_UZBEK 47
+#<span class="keyword">define</span> TT_MAC_LANGID_KAZAKH 48
+#<span class="keyword">define</span> TT_MAC_LANGID_AZERBAIJANI 49
+#<span class="keyword">define</span> TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49
+#<span class="keyword">define</span> TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50
+#<span class="keyword">define</span> TT_MAC_LANGID_ARMENIAN 51
+#<span class="keyword">define</span> TT_MAC_LANGID_GEORGIAN 52
+#<span class="keyword">define</span> TT_MAC_LANGID_MOLDAVIAN 53
+#<span class="keyword">define</span> TT_MAC_LANGID_KIRGHIZ 54
+#<span class="keyword">define</span> TT_MAC_LANGID_TAJIKI 55
+#<span class="keyword">define</span> TT_MAC_LANGID_TURKMEN 56
+#<span class="keyword">define</span> TT_MAC_LANGID_MONGOLIAN 57
+#<span class="keyword">define</span> TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57
+#<span class="keyword">define</span> TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58
+#<span class="keyword">define</span> TT_MAC_LANGID_PASHTO 59
+#<span class="keyword">define</span> TT_MAC_LANGID_KURDISH 60
+#<span class="keyword">define</span> TT_MAC_LANGID_KASHMIRI 61
+#<span class="keyword">define</span> TT_MAC_LANGID_SINDHI 62
+#<span class="keyword">define</span> TT_MAC_LANGID_TIBETAN 63
+#<span class="keyword">define</span> TT_MAC_LANGID_NEPALI 64
+#<span class="keyword">define</span> TT_MAC_LANGID_SANSKRIT 65
+#<span class="keyword">define</span> TT_MAC_LANGID_MARATHI 66
+#<span class="keyword">define</span> TT_MAC_LANGID_BENGALI 67
+#<span class="keyword">define</span> TT_MAC_LANGID_ASSAMESE 68
+#<span class="keyword">define</span> TT_MAC_LANGID_GUJARATI 69
+#<span class="keyword">define</span> TT_MAC_LANGID_PUNJABI 70
+#<span class="keyword">define</span> TT_MAC_LANGID_ORIYA 71
+#<span class="keyword">define</span> TT_MAC_LANGID_MALAYALAM 72
+#<span class="keyword">define</span> TT_MAC_LANGID_KANNADA 73
+#<span class="keyword">define</span> TT_MAC_LANGID_TAMIL 74
+#<span class="keyword">define</span> TT_MAC_LANGID_TELUGU 75
+#<span class="keyword">define</span> TT_MAC_LANGID_SINHALESE 76
+#<span class="keyword">define</span> TT_MAC_LANGID_BURMESE 77
+#<span class="keyword">define</span> TT_MAC_LANGID_KHMER 78
+#<span class="keyword">define</span> TT_MAC_LANGID_LAO 79
+#<span class="keyword">define</span> TT_MAC_LANGID_VIETNAMESE 80
+#<span class="keyword">define</span> TT_MAC_LANGID_INDONESIAN 81
+#<span class="keyword">define</span> TT_MAC_LANGID_TAGALOG 82
+#<span class="keyword">define</span> TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83
+#<span class="keyword">define</span> TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84
+#<span class="keyword">define</span> TT_MAC_LANGID_AMHARIC 85
+#<span class="keyword">define</span> TT_MAC_LANGID_TIGRINYA 86
+#<span class="keyword">define</span> TT_MAC_LANGID_GALLA 87
+#<span class="keyword">define</span> TT_MAC_LANGID_SOMALI 88
+#<span class="keyword">define</span> TT_MAC_LANGID_SWAHILI 89
+#<span class="keyword">define</span> TT_MAC_LANGID_RUANDA 90
+#<span class="keyword">define</span> TT_MAC_LANGID_RUNDI 91
+#<span class="keyword">define</span> TT_MAC_LANGID_CHEWA 92
+#<span class="keyword">define</span> TT_MAC_LANGID_MALAGASY 93
+#<span class="keyword">define</span> TT_MAC_LANGID_ESPERANTO 94
+#<span class="keyword">define</span> TT_MAC_LANGID_WELSH 128
+#<span class="keyword">define</span> TT_MAC_LANGID_BASQUE 129
+#<span class="keyword">define</span> TT_MAC_LANGID_CATALAN 130
+#<span class="keyword">define</span> TT_MAC_LANGID_LATIN 131
+#<span class="keyword">define</span> TT_MAC_LANGID_QUECHUA 132
+#<span class="keyword">define</span> TT_MAC_LANGID_GUARANI 133
+#<span class="keyword">define</span> TT_MAC_LANGID_AYMARA 134
+#<span class="keyword">define</span> TT_MAC_LANGID_TATAR 135
+#<span class="keyword">define</span> TT_MAC_LANGID_UIGHUR 136
+#<span class="keyword">define</span> TT_MAC_LANGID_DZONGKHA 137
+#<span class="keyword">define</span> TT_MAC_LANGID_JAVANESE 138
+#<span class="keyword">define</span> TT_MAC_LANGID_SUNDANESE 139
+
+ /* The following codes are new as of 2000-03-10 */
+#<span class="keyword">define</span> TT_MAC_LANGID_GALICIAN 140
+#<span class="keyword">define</span> TT_MAC_LANGID_AFRIKAANS 141
+#<span class="keyword">define</span> TT_MAC_LANGID_BRETON 142
+#<span class="keyword">define</span> TT_MAC_LANGID_INUKTITUT 143
+#<span class="keyword">define</span> TT_MAC_LANGID_SCOTTISH_GAELIC 144
+#<span class="keyword">define</span> TT_MAC_LANGID_MANX_GAELIC 145
+#<span class="keyword">define</span> TT_MAC_LANGID_IRISH_GAELIC 146
+#<span class="keyword">define</span> TT_MAC_LANGID_TONGAN 147
+#<span class="keyword">define</span> TT_MAC_LANGID_GREEK_POLYTONIC 148
+#<span class="keyword">define</span> TT_MAC_LANGID_GREELANDIC 149
+#<span class="keyword">define</span> TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150
+</pre>
+</div>
+
+<p>Possible values of the language identifier field in the name records of the SFNT &lsquo;name&rsquo; table if the &lsquo;platform&rsquo; identifier code is <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MACINTOSH</a></code>. These values are also used as return values for function <code><a href="ft2-truetype_tables.html#ft_get_cmap_language_id">FT_Get_CMap_Language_ID</a></code>.</p>
+<p>The canonical source for Apple's IDs is</p>
+<p><a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html">https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html</a></p>
+<hr>
+
+<h2 id="tt_ms_langid_xxx">TT_MS_LANGID_XXX<a class="headerlink" href="#tt_ms_langid_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_IRAQ 0x0801
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_EGYPT 0x0C01
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_LIBYA 0x1001
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_ALGERIA 0x1401
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_MOROCCO 0x1801
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_TUNISIA 0x1C01
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_OMAN 0x2001
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_YEMEN 0x2401
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_SYRIA 0x2801
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_JORDAN 0x2C01
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_LEBANON 0x3001
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_KUWAIT 0x3401
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_UAE 0x3801
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01
+#<span class="keyword">define</span> TT_MS_LANGID_ARABIC_QATAR 0x4001
+#<span class="keyword">define</span> TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402
+#<span class="keyword">define</span> TT_MS_LANGID_CATALAN_CATALAN 0x0403
+#<span class="keyword">define</span> TT_MS_LANGID_CHINESE_TAIWAN 0x0404
+#<span class="keyword">define</span> TT_MS_LANGID_CHINESE_PRC 0x0804
+#<span class="keyword">define</span> TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04
+#<span class="keyword">define</span> TT_MS_LANGID_CHINESE_SINGAPORE 0x1004
+#<span class="keyword">define</span> TT_MS_LANGID_CHINESE_MACAO 0x1404
+#<span class="keyword">define</span> TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405
+#<span class="keyword">define</span> TT_MS_LANGID_DANISH_DENMARK 0x0406
+#<span class="keyword">define</span> TT_MS_LANGID_GERMAN_GERMANY 0x0407
+#<span class="keyword">define</span> TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807
+#<span class="keyword">define</span> TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07
+#<span class="keyword">define</span> TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007
+#<span class="keyword">define</span> TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407
+#<span class="keyword">define</span> TT_MS_LANGID_GREEK_GREECE 0x0408
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_CANADA 0x1009
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_IRELAND 0x1809
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_JAMAICA 0x2009
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_BELIZE 0x2809
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_INDIA 0x4009
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409
+#<span class="keyword">define</span> TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_MEXICO 0x080A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_GUATEMALA 0x100A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_PANAMA 0x180A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_VENEZUELA 0x200A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_COLOMBIA 0x240A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_PERU 0x280A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_ECUADOR 0x300A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_CHILE 0x340A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_URUGUAY 0x380A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_BOLIVIA 0x400A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_HONDURAS 0x480A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A
+#<span class="keyword">define</span> TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A
+#<span class="keyword">define</span> TT_MS_LANGID_FINNISH_FINLAND 0x040B
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_FRANCE 0x040C
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_BELGIUM 0x080C
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_CANADA 0x0C0C
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C
+#<span class="keyword">define</span> TT_MS_LANGID_FRENCH_MONACO 0x180C
+#<span class="keyword">define</span> TT_MS_LANGID_HEBREW_ISRAEL 0x040D
+#<span class="keyword">define</span> TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E
+#<span class="keyword">define</span> TT_MS_LANGID_ICELANDIC_ICELAND 0x040F
+#<span class="keyword">define</span> TT_MS_LANGID_ITALIAN_ITALY 0x0410
+#<span class="keyword">define</span> TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810
+#<span class="keyword">define</span> TT_MS_LANGID_JAPANESE_JAPAN 0x0411
+#<span class="keyword">define</span> TT_MS_LANGID_KOREAN_KOREA 0x0412
+#<span class="keyword">define</span> TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413
+#<span class="keyword">define</span> TT_MS_LANGID_DUTCH_BELGIUM 0x0813
+#<span class="keyword">define</span> TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414
+#<span class="keyword">define</span> TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814
+#<span class="keyword">define</span> TT_MS_LANGID_POLISH_POLAND 0x0415
+#<span class="keyword">define</span> TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416
+#<span class="keyword">define</span> TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816
+#<span class="keyword">define</span> TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417
+#<span class="keyword">define</span> TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
+#<span class="keyword">define</span> TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
+#<span class="keyword">define</span> TT_MS_LANGID_CROATIAN_CROATIA 0x041A
+#<span class="keyword">define</span> TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A
+#<span class="keyword">define</span> TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A
+#<span class="keyword">define</span> TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A
+#<span class="keyword">define</span> TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A
+#<span class="keyword">define</span> TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A
+#<span class="keyword">define</span> TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A
+#<span class="keyword">define</span> TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A
+#<span class="keyword">define</span> TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B
+#<span class="keyword">define</span> TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C
+#<span class="keyword">define</span> TT_MS_LANGID_SWEDISH_SWEDEN 0x041D
+#<span class="keyword">define</span> TT_MS_LANGID_SWEDISH_FINLAND 0x081D
+#<span class="keyword">define</span> TT_MS_LANGID_THAI_THAILAND 0x041E
+#<span class="keyword">define</span> TT_MS_LANGID_TURKISH_TURKEY 0x041F
+#<span class="keyword">define</span> TT_MS_LANGID_URDU_PAKISTAN 0x0420
+#<span class="keyword">define</span> TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421
+#<span class="keyword">define</span> TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422
+#<span class="keyword">define</span> TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423
+#<span class="keyword">define</span> TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424
+#<span class="keyword">define</span> TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425
+#<span class="keyword">define</span> TT_MS_LANGID_LATVIAN_LATVIA 0x0426
+#<span class="keyword">define</span> TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427
+#<span class="keyword">define</span> TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428
+#<span class="keyword">define</span> TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A
+#<span class="keyword">define</span> TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B
+#<span class="keyword">define</span> TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C
+#<span class="keyword">define</span> TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C
+#<span class="keyword">define</span> TT_MS_LANGID_BASQUE_BASQUE 0x042D
+#<span class="keyword">define</span> TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E
+#<span class="keyword">define</span> TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E
+#<span class="keyword">define</span> TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F
+#<span class="keyword">define</span> TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432
+#<span class="keyword">define</span> TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434
+#<span class="keyword">define</span> TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435
+#<span class="keyword">define</span> TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436
+#<span class="keyword">define</span> TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437
+#<span class="keyword">define</span> TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438
+#<span class="keyword">define</span> TT_MS_LANGID_HINDI_INDIA 0x0439
+#<span class="keyword">define</span> TT_MS_LANGID_MALTESE_MALTA 0x043A
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B
+#<span class="keyword">define</span> TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B
+#<span class="keyword">define</span> TT_MS_LANGID_IRISH_IRELAND 0x083C
+#<span class="keyword">define</span> TT_MS_LANGID_MALAY_MALAYSIA 0x043E
+#<span class="keyword">define</span> TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E
+#<span class="keyword">define</span> TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F
+#<span class="keyword">define</span> TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440
+#<span class="keyword">define</span> TT_MS_LANGID_KISWAHILI_KENYA 0x0441
+#<span class="keyword">define</span> TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442
+#<span class="keyword">define</span> TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443
+#<span class="keyword">define</span> TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843
+#<span class="keyword">define</span> TT_MS_LANGID_TATAR_RUSSIA 0x0444
+#<span class="keyword">define</span> TT_MS_LANGID_BENGALI_INDIA 0x0445
+#<span class="keyword">define</span> TT_MS_LANGID_BENGALI_BANGLADESH 0x0845
+#<span class="keyword">define</span> TT_MS_LANGID_PUNJABI_INDIA 0x0446
+#<span class="keyword">define</span> TT_MS_LANGID_GUJARATI_INDIA 0x0447
+#<span class="keyword">define</span> TT_MS_LANGID_ODIA_INDIA 0x0448
+#<span class="keyword">define</span> TT_MS_LANGID_TAMIL_INDIA 0x0449
+#<span class="keyword">define</span> TT_MS_LANGID_TELUGU_INDIA 0x044A
+#<span class="keyword">define</span> TT_MS_LANGID_KANNADA_INDIA 0x044B
+#<span class="keyword">define</span> TT_MS_LANGID_MALAYALAM_INDIA 0x044C
+#<span class="keyword">define</span> TT_MS_LANGID_ASSAMESE_INDIA 0x044D
+#<span class="keyword">define</span> TT_MS_LANGID_MARATHI_INDIA 0x044E
+#<span class="keyword">define</span> TT_MS_LANGID_SANSKRIT_INDIA 0x044F
+#<span class="keyword">define</span> TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
+#<span class="keyword">define</span> TT_MS_LANGID_MONGOLIAN_PRC 0x0850
+#<span class="keyword">define</span> TT_MS_LANGID_TIBETAN_PRC 0x0451
+#<span class="keyword">define</span> TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452
+#<span class="keyword">define</span> TT_MS_LANGID_KHMER_CAMBODIA 0x0453
+#<span class="keyword">define</span> TT_MS_LANGID_LAO_LAOS 0x0454
+#<span class="keyword">define</span> TT_MS_LANGID_GALICIAN_GALICIAN 0x0456
+#<span class="keyword">define</span> TT_MS_LANGID_KONKANI_INDIA 0x0457
+#<span class="keyword">define</span> TT_MS_LANGID_SYRIAC_SYRIA 0x045A
+#<span class="keyword">define</span> TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B
+#<span class="keyword">define</span> TT_MS_LANGID_INUKTITUT_CANADA 0x045D
+#<span class="keyword">define</span> TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D
+#<span class="keyword">define</span> TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E
+#<span class="keyword">define</span> TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F
+#<span class="keyword">define</span> TT_MS_LANGID_NEPALI_NEPAL 0x0461
+#<span class="keyword">define</span> TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462
+#<span class="keyword">define</span> TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463
+#<span class="keyword">define</span> TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464
+#<span class="keyword">define</span> TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465
+#<span class="keyword">define</span> TT_MS_LANGID_HAUSA_NIGERIA 0x0468
+#<span class="keyword">define</span> TT_MS_LANGID_YORUBA_NIGERIA 0x046A
+#<span class="keyword">define</span> TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B
+#<span class="keyword">define</span> TT_MS_LANGID_QUECHUA_ECUADOR 0x086B
+#<span class="keyword">define</span> TT_MS_LANGID_QUECHUA_PERU 0x0C6B
+#<span class="keyword">define</span> TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C
+#<span class="keyword">define</span> TT_MS_LANGID_BASHKIR_RUSSIA 0x046D
+#<span class="keyword">define</span> TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E
+#<span class="keyword">define</span> TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F
+#<span class="keyword">define</span> TT_MS_LANGID_IGBO_NIGERIA 0x0470
+#<span class="keyword">define</span> TT_MS_LANGID_YI_PRC 0x0478
+#<span class="keyword">define</span> TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A
+#<span class="keyword">define</span> TT_MS_LANGID_MOHAWK_MOHAWK 0x047C
+#<span class="keyword">define</span> TT_MS_LANGID_BRETON_FRANCE 0x047E
+#<span class="keyword">define</span> TT_MS_LANGID_UIGHUR_PRC 0x0480
+#<span class="keyword">define</span> TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
+#<span class="keyword">define</span> TT_MS_LANGID_OCCITAN_FRANCE 0x0482
+#<span class="keyword">define</span> TT_MS_LANGID_CORSICAN_FRANCE 0x0483
+#<span class="keyword">define</span> TT_MS_LANGID_ALSATIAN_FRANCE 0x0484
+#<span class="keyword">define</span> TT_MS_LANGID_YAKUT_RUSSIA 0x0485
+#<span class="keyword">define</span> TT_MS_LANGID_KICHE_GUATEMALA 0x0486
+#<span class="keyword">define</span> TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487
+#<span class="keyword">define</span> TT_MS_LANGID_WOLOF_SENEGAL 0x0488
+#<span class="keyword">define</span> TT_MS_LANGID_DARI_AFGHANISTAN 0x048C
+</pre>
+</div>
+
+<p>Possible values of the language identifier field in the name records of the SFNT &lsquo;name&rsquo; table if the &lsquo;platform&rsquo; identifier code is <code><a href="ft2-truetype_tables.html#tt_platform_xxx">TT_PLATFORM_MICROSOFT</a></code>. These values are also used as return values for function <code><a href="ft2-truetype_tables.html#ft_get_cmap_language_id">FT_Get_CMap_Language_ID</a></code>.</p>
+<p>The canonical source for Microsoft's IDs is</p>
+<p><a href="https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings">https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings</a> ,</p>
+<p>however, we only provide macros for language identifiers present in the OpenType specification: Microsoft has abandoned the concept of LCIDs (language code identifiers), and format&nbsp;1 of the &lsquo;name&rsquo; table provides a better mechanism for languages not covered here.</p>
+<p>More legacy values not listed in the reference can be found in the <code><a href="ft2-header_file_macros.html#ft_truetype_ids_h">FT_TRUETYPE_IDS_H</a></code> header file.</p>
+<hr>
+
+<h2 id="tt_name_id_xxx">TT_NAME_ID_XXX<a class="headerlink" href="#tt_name_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> TT_NAME_ID_COPYRIGHT 0
+#<span class="keyword">define</span> TT_NAME_ID_FONT_FAMILY 1
+#<span class="keyword">define</span> TT_NAME_ID_FONT_SUBFAMILY 2
+#<span class="keyword">define</span> TT_NAME_ID_UNIQUE_ID 3
+#<span class="keyword">define</span> TT_NAME_ID_FULL_NAME 4
+#<span class="keyword">define</span> TT_NAME_ID_VERSION_STRING 5
+#<span class="keyword">define</span> TT_NAME_ID_PS_NAME 6
+#<span class="keyword">define</span> TT_NAME_ID_TRADEMARK 7
+
+ /* the following values are from the OpenType spec */
+#<span class="keyword">define</span> TT_NAME_ID_MANUFACTURER 8
+#<span class="keyword">define</span> TT_NAME_ID_DESIGNER 9
+#<span class="keyword">define</span> TT_NAME_ID_DESCRIPTION 10
+#<span class="keyword">define</span> TT_NAME_ID_VENDOR_URL 11
+#<span class="keyword">define</span> TT_NAME_ID_DESIGNER_URL 12
+#<span class="keyword">define</span> TT_NAME_ID_LICENSE 13
+#<span class="keyword">define</span> TT_NAME_ID_LICENSE_URL 14
+ /* number 15 is reserved */
+#<span class="keyword">define</span> TT_NAME_ID_TYPOGRAPHIC_FAMILY 16
+#<span class="keyword">define</span> TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17
+#<span class="keyword">define</span> TT_NAME_ID_MAC_FULL_NAME 18
+
+ /* The following code is new as of 2000-01-21 */
+#<span class="keyword">define</span> TT_NAME_ID_SAMPLE_TEXT 19
+
+ /* This is new in OpenType 1.3 */
+#<span class="keyword">define</span> TT_NAME_ID_CID_FINDFONT_NAME 20
+
+ /* This is new in OpenType 1.5 */
+#<span class="keyword">define</span> TT_NAME_ID_WWS_FAMILY 21
+#<span class="keyword">define</span> TT_NAME_ID_WWS_SUBFAMILY 22
+
+ /* This is new in OpenType 1.7 */
+#<span class="keyword">define</span> TT_NAME_ID_LIGHT_BACKGROUND 23
+#<span class="keyword">define</span> TT_NAME_ID_DARK_BACKGROUND 24
+
+ /* This is new in OpenType 1.8 */
+#<span class="keyword">define</span> TT_NAME_ID_VARIATIONS_PREFIX 25
+
+ /* these two values are deprecated */
+#<span class="keyword">define</span> TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY
+#<span class="keyword">define</span> TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
+</pre>
+</div>
+
+<p>Possible values of the &lsquo;name&rsquo; identifier field in the name records of an SFNT &lsquo;name&rsquo; table. These values are platform independent.</p>
+<hr>
+
+<h2 id="tt_ucr_xxx">TT_UCR_XXX<a class="headerlink" href="#tt_ucr_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).</p>
+<div class = "codehilite">
+<pre>
+ /* ulUnicodeRange1 */
+ /* --------------- */
+
+ /* Bit 0 Basic Latin */
+#<span class="keyword">define</span> TT_UCR_BASIC_LATIN (1L &lt;&lt; 0) /* U+0020-U+007E */
+ /* Bit 1 C1 Controls and Latin-1 Supplement */
+#<span class="keyword">define</span> TT_UCR_LATIN1_SUPPLEMENT (1L &lt;&lt; 1) /* U+0080-U+00FF */
+ /* Bit 2 Latin Extended-A */
+#<span class="keyword">define</span> TT_UCR_LATIN_EXTENDED_A (1L &lt;&lt; 2) /* U+0100-U+017F */
+ /* Bit 3 Latin Extended-B */
+#<span class="keyword">define</span> TT_UCR_LATIN_EXTENDED_B (1L &lt;&lt; 3) /* U+0180-U+024F */
+ /* Bit 4 IPA Extensions */
+ /* Phonetic Extensions */
+ /* Phonetic Extensions Supplement */
+#<span class="keyword">define</span> TT_UCR_IPA_EXTENSIONS (1L &lt;&lt; 4) /* U+0250-U+02AF */
+ /* U+1D00-U+1D7F */
+ /* U+1D80-U+1DBF */
+ /* Bit 5 Spacing Modifier Letters */
+ /* Modifier Tone Letters */
+#<span class="keyword">define</span> TT_UCR_SPACING_MODIFIER (1L &lt;&lt; 5) /* U+02B0-U+02FF */
+ /* U+A700-U+A71F */
+ /* Bit 6 Combining Diacritical Marks */
+ /* Combining Diacritical Marks Supplement */
+#<span class="keyword">define</span> TT_UCR_COMBINING_DIACRITICAL_MARKS (1L &lt;&lt; 6) /* U+0300-U+036F */
+ /* U+1DC0-U+1DFF */
+ /* Bit 7 Greek and Coptic */
+#<span class="keyword">define</span> TT_UCR_GREEK (1L &lt;&lt; 7) /* U+0370-U+03FF */
+ /* Bit 8 Coptic */
+#<span class="keyword">define</span> TT_UCR_COPTIC (1L &lt;&lt; 8) /* U+2C80-U+2CFF */
+ /* Bit 9 Cyrillic */
+ /* Cyrillic Supplement */
+ /* Cyrillic Extended-A */
+ /* Cyrillic Extended-B */
+#<span class="keyword">define</span> TT_UCR_CYRILLIC (1L &lt;&lt; 9) /* U+0400-U+04FF */
+ /* U+0500-U+052F */
+ /* U+2DE0-U+2DFF */
+ /* U+A640-U+A69F */
+ /* Bit 10 Armenian */
+#<span class="keyword">define</span> TT_UCR_ARMENIAN (1L &lt;&lt; 10) /* U+0530-U+058F */
+ /* Bit 11 Hebrew */
+#<span class="keyword">define</span> TT_UCR_HEBREW (1L &lt;&lt; 11) /* U+0590-U+05FF */
+ /* Bit 12 Vai */
+#<span class="keyword">define</span> TT_UCR_VAI (1L &lt;&lt; 12) /* U+A500-U+A63F */
+ /* Bit 13 Arabic */
+ /* Arabic Supplement */
+#<span class="keyword">define</span> TT_UCR_ARABIC (1L &lt;&lt; 13) /* U+0600-U+06FF */
+ /* U+0750-U+077F */
+ /* Bit 14 NKo */
+#<span class="keyword">define</span> TT_UCR_NKO (1L &lt;&lt; 14) /* U+07C0-U+07FF */
+ /* Bit 15 Devanagari */
+#<span class="keyword">define</span> TT_UCR_DEVANAGARI (1L &lt;&lt; 15) /* U+0900-U+097F */
+ /* Bit 16 Bengali */
+#<span class="keyword">define</span> TT_UCR_BENGALI (1L &lt;&lt; 16) /* U+0980-U+09FF */
+ /* Bit 17 Gurmukhi */
+#<span class="keyword">define</span> TT_UCR_GURMUKHI (1L &lt;&lt; 17) /* U+0A00-U+0A7F */
+ /* Bit 18 Gujarati */
+#<span class="keyword">define</span> TT_UCR_GUJARATI (1L &lt;&lt; 18) /* U+0A80-U+0AFF */
+ /* Bit 19 Oriya */
+#<span class="keyword">define</span> TT_UCR_ORIYA (1L &lt;&lt; 19) /* U+0B00-U+0B7F */
+ /* Bit 20 Tamil */
+#<span class="keyword">define</span> TT_UCR_TAMIL (1L &lt;&lt; 20) /* U+0B80-U+0BFF */
+ /* Bit 21 Telugu */
+#<span class="keyword">define</span> TT_UCR_TELUGU (1L &lt;&lt; 21) /* U+0C00-U+0C7F */
+ /* Bit 22 Kannada */
+#<span class="keyword">define</span> TT_UCR_KANNADA (1L &lt;&lt; 22) /* U+0C80-U+0CFF */
+ /* Bit 23 Malayalam */
+#<span class="keyword">define</span> TT_UCR_MALAYALAM (1L &lt;&lt; 23) /* U+0D00-U+0D7F */
+ /* Bit 24 Thai */
+#<span class="keyword">define</span> TT_UCR_THAI (1L &lt;&lt; 24) /* U+0E00-U+0E7F */
+ /* Bit 25 Lao */
+#<span class="keyword">define</span> TT_UCR_LAO (1L &lt;&lt; 25) /* U+0E80-U+0EFF */
+ /* Bit 26 Georgian */
+ /* Georgian Supplement */
+#<span class="keyword">define</span> TT_UCR_GEORGIAN (1L &lt;&lt; 26) /* U+10A0-U+10FF */
+ /* U+2D00-U+2D2F */
+ /* Bit 27 Balinese */
+#<span class="keyword">define</span> TT_UCR_BALINESE (1L &lt;&lt; 27) /* U+1B00-U+1B7F */
+ /* Bit 28 Hangul Jamo */
+#<span class="keyword">define</span> TT_UCR_HANGUL_JAMO (1L &lt;&lt; 28) /* U+1100-U+11FF */
+ /* Bit 29 Latin Extended Additional */
+ /* Latin Extended-C */
+ /* Latin Extended-D */
+#<span class="keyword">define</span> TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L &lt;&lt; 29) /* U+1E00-U+1EFF */
+ /* U+2C60-U+2C7F */
+ /* U+A720-U+A7FF */
+ /* Bit 30 Greek Extended */
+#<span class="keyword">define</span> TT_UCR_GREEK_EXTENDED (1L &lt;&lt; 30) /* U+1F00-U+1FFF */
+ /* Bit 31 General Punctuation */
+ /* Supplemental Punctuation */
+#<span class="keyword">define</span> TT_UCR_GENERAL_PUNCTUATION (1L &lt;&lt; 31) /* U+2000-U+206F */
+ /* U+2E00-U+2E7F */
+
+ /* ulUnicodeRange2 */
+ /* --------------- */
+
+ /* Bit 32 Superscripts And Subscripts */
+#<span class="keyword">define</span> TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L &lt;&lt; 0) /* U+2070-U+209F */
+ /* Bit 33 Currency Symbols */
+#<span class="keyword">define</span> TT_UCR_CURRENCY_SYMBOLS (1L &lt;&lt; 1) /* U+20A0-U+20CF */
+ /* Bit 34 Combining Diacritical Marks For Symbols */
+#<span class="keyword">define</span> TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
+ (1L &lt;&lt; 2) /* U+20D0-U+20FF */
+ /* Bit 35 Letterlike Symbols */
+#<span class="keyword">define</span> TT_UCR_LETTERLIKE_SYMBOLS (1L &lt;&lt; 3) /* U+2100-U+214F */
+ /* Bit 36 Number Forms */
+#<span class="keyword">define</span> TT_UCR_NUMBER_FORMS (1L &lt;&lt; 4) /* U+2150-U+218F */
+ /* Bit 37 Arrows */
+ /* Supplemental Arrows-A */
+ /* Supplemental Arrows-B */
+ /* Miscellaneous Symbols and Arrows */
+#<span class="keyword">define</span> TT_UCR_ARROWS (1L &lt;&lt; 5) /* U+2190-U+21FF */
+ /* U+27F0-U+27FF */
+ /* U+2900-U+297F */
+ /* U+2B00-U+2BFF */
+ /* Bit 38 Mathematical Operators */
+ /* Supplemental Mathematical Operators */
+ /* Miscellaneous Mathematical Symbols-A */
+ /* Miscellaneous Mathematical Symbols-B */
+#<span class="keyword">define</span> TT_UCR_MATHEMATICAL_OPERATORS (1L &lt;&lt; 6) /* U+2200-U+22FF */
+ /* U+2A00-U+2AFF */
+ /* U+27C0-U+27EF */
+ /* U+2980-U+29FF */
+ /* Bit 39 Miscellaneous Technical */
+#<span class="keyword">define</span> TT_UCR_MISCELLANEOUS_TECHNICAL (1L &lt;&lt; 7) /* U+2300-U+23FF */
+ /* Bit 40 Control Pictures */
+#<span class="keyword">define</span> TT_UCR_CONTROL_PICTURES (1L &lt;&lt; 8) /* U+2400-U+243F */
+ /* Bit 41 Optical Character Recognition */
+#<span class="keyword">define</span> TT_UCR_OCR (1L &lt;&lt; 9) /* U+2440-U+245F */
+ /* Bit 42 Enclosed Alphanumerics */
+#<span class="keyword">define</span> TT_UCR_ENCLOSED_ALPHANUMERICS (1L &lt;&lt; 10) /* U+2460-U+24FF */
+ /* Bit 43 Box Drawing */
+#<span class="keyword">define</span> TT_UCR_BOX_DRAWING (1L &lt;&lt; 11) /* U+2500-U+257F */
+ /* Bit 44 Block Elements */
+#<span class="keyword">define</span> TT_UCR_BLOCK_ELEMENTS (1L &lt;&lt; 12) /* U+2580-U+259F */
+ /* Bit 45 Geometric Shapes */
+#<span class="keyword">define</span> TT_UCR_GEOMETRIC_SHAPES (1L &lt;&lt; 13) /* U+25A0-U+25FF */
+ /* Bit 46 Miscellaneous Symbols */
+#<span class="keyword">define</span> TT_UCR_MISCELLANEOUS_SYMBOLS (1L &lt;&lt; 14) /* U+2600-U+26FF */
+ /* Bit 47 Dingbats */
+#<span class="keyword">define</span> TT_UCR_DINGBATS (1L &lt;&lt; 15) /* U+2700-U+27BF */
+ /* Bit 48 CJK Symbols and Punctuation */
+#<span class="keyword">define</span> TT_UCR_CJK_SYMBOLS (1L &lt;&lt; 16) /* U+3000-U+303F */
+ /* Bit 49 Hiragana */
+#<span class="keyword">define</span> TT_UCR_HIRAGANA (1L &lt;&lt; 17) /* U+3040-U+309F */
+ /* Bit 50 Katakana */
+ /* Katakana Phonetic Extensions */
+#<span class="keyword">define</span> TT_UCR_KATAKANA (1L &lt;&lt; 18) /* U+30A0-U+30FF */
+ /* U+31F0-U+31FF */
+ /* Bit 51 Bopomofo */
+ /* Bopomofo Extended */
+#<span class="keyword">define</span> TT_UCR_BOPOMOFO (1L &lt;&lt; 19) /* U+3100-U+312F */
+ /* U+31A0-U+31BF */
+ /* Bit 52 Hangul Compatibility Jamo */
+#<span class="keyword">define</span> TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L &lt;&lt; 20) /* U+3130-U+318F */
+ /* Bit 53 Phags-Pa */
+#<span class="keyword">define</span> TT_UCR_CJK_MISC (1L &lt;&lt; 21) /* U+A840-U+A87F */
+#<span class="keyword">define</span> TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */
+#<span class="keyword">define</span> TT_UCR_PHAGSPA
+ /* Bit 54 Enclosed CJK Letters and Months */
+#<span class="keyword">define</span> TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L &lt;&lt; 22) /* U+3200-U+32FF */
+ /* Bit 55 CJK Compatibility */
+#<span class="keyword">define</span> TT_UCR_CJK_COMPATIBILITY (1L &lt;&lt; 23) /* U+3300-U+33FF */
+ /* Bit 56 Hangul Syllables */
+#<span class="keyword">define</span> TT_UCR_HANGUL (1L &lt;&lt; 24) /* U+AC00-U+D7A3 */
+ /* Bit 57 High Surrogates */
+ /* High Private Use Surrogates */
+ /* Low Surrogates */
+
+ /* According to OpenType specs v.1.3+, */
+ /* setting bit 57 implies that there is */
+ /* at least one codepoint beyond the */
+ /* Basic Multilingual Plane that is */
+ /* supported by this font. So it really */
+ /* means &gt;= U+10000. */
+#<span class="keyword">define</span> TT_UCR_SURROGATES (1L &lt;&lt; 25) /* U+D800-U+DB7F */
+ /* U+DB80-U+DBFF */
+ /* U+DC00-U+DFFF */
+#<span class="keyword">define</span> TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES
+ /* Bit 58 Phoenician */
+#<span class="keyword">define</span> TT_UCR_PHOENICIAN (1L &lt;&lt; 26) /*U+10900-U+1091F*/
+ /* Bit 59 CJK Unified Ideographs */
+ /* CJK Radicals Supplement */
+ /* Kangxi Radicals */
+ /* Ideographic Description Characters */
+ /* CJK Unified Ideographs Extension A */
+ /* CJK Unified Ideographs Extension B */
+ /* Kanbun */
+#<span class="keyword">define</span> TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L &lt;&lt; 27) /* U+4E00-U+9FFF */
+ /* U+2E80-U+2EFF */
+ /* U+2F00-U+2FDF */
+ /* U+2FF0-U+2FFF */
+ /* U+3400-U+4DB5 */
+ /*U+20000-U+2A6DF*/
+ /* U+3190-U+319F */
+ /* Bit 60 Private Use */
+#<span class="keyword">define</span> TT_UCR_PRIVATE_USE (1L &lt;&lt; 28) /* U+E000-U+F8FF */
+ /* Bit 61 CJK Strokes */
+ /* CJK Compatibility Ideographs */
+ /* CJK Compatibility Ideographs Supplement */
+#<span class="keyword">define</span> TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L &lt;&lt; 29) /* U+31C0-U+31EF */
+ /* U+F900-U+FAFF */
+ /*U+2F800-U+2FA1F*/
+ /* Bit 62 Alphabetic Presentation Forms */
+#<span class="keyword">define</span> TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L &lt;&lt; 30) /* U+FB00-U+FB4F */
+ /* Bit 63 Arabic Presentation Forms-A */
+#<span class="keyword">define</span> TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L &lt;&lt; 31) /* U+FB50-U+FDFF */
+
+ /* ulUnicodeRange3 */
+ /* --------------- */
+
+ /* Bit 64 Combining Half Marks */
+#<span class="keyword">define</span> TT_UCR_COMBINING_HALF_MARKS (1L &lt;&lt; 0) /* U+FE20-U+FE2F */
+ /* Bit 65 Vertical forms */
+ /* CJK Compatibility Forms */
+#<span class="keyword">define</span> TT_UCR_CJK_COMPATIBILITY_FORMS (1L &lt;&lt; 1) /* U+FE10-U+FE1F */
+ /* U+FE30-U+FE4F */
+ /* Bit 66 Small Form Variants */
+#<span class="keyword">define</span> TT_UCR_SMALL_FORM_VARIANTS (1L &lt;&lt; 2) /* U+FE50-U+FE6F */
+ /* Bit 67 Arabic Presentation Forms-B */
+#<span class="keyword">define</span> TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L &lt;&lt; 3) /* U+FE70-U+FEFE */
+ /* Bit 68 Halfwidth and Fullwidth Forms */
+#<span class="keyword">define</span> TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L &lt;&lt; 4) /* U+FF00-U+FFEF */
+ /* Bit 69 Specials */
+#<span class="keyword">define</span> TT_UCR_SPECIALS (1L &lt;&lt; 5) /* U+FFF0-U+FFFD */
+ /* Bit 70 Tibetan */
+#<span class="keyword">define</span> TT_UCR_TIBETAN (1L &lt;&lt; 6) /* U+0F00-U+0FFF */
+ /* Bit 71 Syriac */
+#<span class="keyword">define</span> TT_UCR_SYRIAC (1L &lt;&lt; 7) /* U+0700-U+074F */
+ /* Bit 72 Thaana */
+#<span class="keyword">define</span> TT_UCR_THAANA (1L &lt;&lt; 8) /* U+0780-U+07BF */
+ /* Bit 73 Sinhala */
+#<span class="keyword">define</span> TT_UCR_SINHALA (1L &lt;&lt; 9) /* U+0D80-U+0DFF */
+ /* Bit 74 Myanmar */
+#<span class="keyword">define</span> TT_UCR_MYANMAR (1L &lt;&lt; 10) /* U+1000-U+109F */
+ /* Bit 75 Ethiopic */
+ /* Ethiopic Supplement */
+ /* Ethiopic Extended */
+#<span class="keyword">define</span> TT_UCR_ETHIOPIC (1L &lt;&lt; 11) /* U+1200-U+137F */
+ /* U+1380-U+139F */
+ /* U+2D80-U+2DDF */
+ /* Bit 76 Cherokee */
+#<span class="keyword">define</span> TT_UCR_CHEROKEE (1L &lt;&lt; 12) /* U+13A0-U+13FF */
+ /* Bit 77 Unified Canadian Aboriginal Syllabics */
+#<span class="keyword">define</span> TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L &lt;&lt; 13) /* U+1400-U+167F */
+ /* Bit 78 Ogham */
+#<span class="keyword">define</span> TT_UCR_OGHAM (1L &lt;&lt; 14) /* U+1680-U+169F */
+ /* Bit 79 Runic */
+#<span class="keyword">define</span> TT_UCR_RUNIC (1L &lt;&lt; 15) /* U+16A0-U+16FF */
+ /* Bit 80 Khmer */
+ /* Khmer Symbols */
+#<span class="keyword">define</span> TT_UCR_KHMER (1L &lt;&lt; 16) /* U+1780-U+17FF */
+ /* U+19E0-U+19FF */
+ /* Bit 81 Mongolian */
+#<span class="keyword">define</span> TT_UCR_MONGOLIAN (1L &lt;&lt; 17) /* U+1800-U+18AF */
+ /* Bit 82 Braille Patterns */
+#<span class="keyword">define</span> TT_UCR_BRAILLE (1L &lt;&lt; 18) /* U+2800-U+28FF */
+ /* Bit 83 Yi Syllables */
+ /* Yi Radicals */
+#<span class="keyword">define</span> TT_UCR_YI (1L &lt;&lt; 19) /* U+A000-U+A48F */
+ /* U+A490-U+A4CF */
+ /* Bit 84 Tagalog */
+ /* Hanunoo */
+ /* Buhid */
+ /* Tagbanwa */
+#<span class="keyword">define</span> TT_UCR_PHILIPPINE (1L &lt;&lt; 20) /* U+1700-U+171F */
+ /* U+1720-U+173F */
+ /* U+1740-U+175F */
+ /* U+1760-U+177F */
+ /* Bit 85 Old Italic */
+#<span class="keyword">define</span> TT_UCR_OLD_ITALIC (1L &lt;&lt; 21) /*U+10300-U+1032F*/
+ /* Bit 86 Gothic */
+#<span class="keyword">define</span> TT_UCR_GOTHIC (1L &lt;&lt; 22) /*U+10330-U+1034F*/
+ /* Bit 87 Deseret */
+#<span class="keyword">define</span> TT_UCR_DESERET (1L &lt;&lt; 23) /*U+10400-U+1044F*/
+ /* Bit 88 Byzantine Musical Symbols */
+ /* Musical Symbols */
+ /* Ancient Greek Musical Notation */
+#<span class="keyword">define</span> TT_UCR_MUSICAL_SYMBOLS (1L &lt;&lt; 24) /*U+1D000-U+1D0FF*/
+ /*U+1D100-U+1D1FF*/
+ /*U+1D200-U+1D24F*/
+ /* Bit 89 Mathematical Alphanumeric Symbols */
+#<span class="keyword">define</span> TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L &lt;&lt; 25) /*U+1D400-U+1D7FF*/
+ /* Bit 90 Private Use (plane 15) */
+ /* Private Use (plane 16) */
+#<span class="keyword">define</span> TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L &lt;&lt; 26) /*U+F0000-U+FFFFD*/
+ /*U+100000-U+10FFFD*/
+ /* Bit 91 Variation Selectors */
+ /* Variation Selectors Supplement */
+#<span class="keyword">define</span> TT_UCR_VARIATION_SELECTORS (1L &lt;&lt; 27) /* U+FE00-U+FE0F */
+ /*U+E0100-U+E01EF*/
+ /* Bit 92 Tags */
+#<span class="keyword">define</span> TT_UCR_TAGS (1L &lt;&lt; 28) /*U+E0000-U+E007F*/
+ /* Bit 93 Limbu */
+#<span class="keyword">define</span> TT_UCR_LIMBU (1L &lt;&lt; 29) /* U+1900-U+194F */
+ /* Bit 94 Tai Le */
+#<span class="keyword">define</span> TT_UCR_TAI_LE (1L &lt;&lt; 30) /* U+1950-U+197F */
+ /* Bit 95 New Tai Lue */
+#<span class="keyword">define</span> TT_UCR_NEW_TAI_LUE (1L &lt;&lt; 31) /* U+1980-U+19DF */
+
+ /* ulUnicodeRange4 */
+ /* --------------- */
+
+ /* Bit 96 Buginese */
+#<span class="keyword">define</span> TT_UCR_BUGINESE (1L &lt;&lt; 0) /* U+1A00-U+1A1F */
+ /* Bit 97 Glagolitic */
+#<span class="keyword">define</span> TT_UCR_GLAGOLITIC (1L &lt;&lt; 1) /* U+2C00-U+2C5F */
+ /* Bit 98 Tifinagh */
+#<span class="keyword">define</span> TT_UCR_TIFINAGH (1L &lt;&lt; 2) /* U+2D30-U+2D7F */
+ /* Bit 99 Yijing Hexagram Symbols */
+#<span class="keyword">define</span> TT_UCR_YIJING (1L &lt;&lt; 3) /* U+4DC0-U+4DFF */
+ /* Bit 100 Syloti Nagri */
+#<span class="keyword">define</span> TT_UCR_SYLOTI_NAGRI (1L &lt;&lt; 4) /* U+A800-U+A82F */
+ /* Bit 101 Linear B Syllabary */
+ /* Linear B Ideograms */
+ /* Aegean Numbers */
+#<span class="keyword">define</span> TT_UCR_LINEAR_B (1L &lt;&lt; 5) /*U+10000-U+1007F*/
+ /*U+10080-U+100FF*/
+ /*U+10100-U+1013F*/
+ /* Bit 102 Ancient Greek Numbers */
+#<span class="keyword">define</span> TT_UCR_ANCIENT_GREEK_NUMBERS (1L &lt;&lt; 6) /*U+10140-U+1018F*/
+ /* Bit 103 Ugaritic */
+#<span class="keyword">define</span> TT_UCR_UGARITIC (1L &lt;&lt; 7) /*U+10380-U+1039F*/
+ /* Bit 104 Old Persian */
+#<span class="keyword">define</span> TT_UCR_OLD_PERSIAN (1L &lt;&lt; 8) /*U+103A0-U+103DF*/
+ /* Bit 105 Shavian */
+#<span class="keyword">define</span> TT_UCR_SHAVIAN (1L &lt;&lt; 9) /*U+10450-U+1047F*/
+ /* Bit 106 Osmanya */
+#<span class="keyword">define</span> TT_UCR_OSMANYA (1L &lt;&lt; 10) /*U+10480-U+104AF*/
+ /* Bit 107 Cypriot Syllabary */
+#<span class="keyword">define</span> TT_UCR_CYPRIOT_SYLLABARY (1L &lt;&lt; 11) /*U+10800-U+1083F*/
+ /* Bit 108 Kharoshthi */
+#<span class="keyword">define</span> TT_UCR_KHAROSHTHI (1L &lt;&lt; 12) /*U+10A00-U+10A5F*/
+ /* Bit 109 Tai Xuan Jing Symbols */
+#<span class="keyword">define</span> TT_UCR_TAI_XUAN_JING (1L &lt;&lt; 13) /*U+1D300-U+1D35F*/
+ /* Bit 110 Cuneiform */
+ /* Cuneiform Numbers and Punctuation */
+#<span class="keyword">define</span> TT_UCR_CUNEIFORM (1L &lt;&lt; 14) /*U+12000-U+123FF*/
+ /*U+12400-U+1247F*/
+ /* Bit 111 Counting Rod Numerals */
+#<span class="keyword">define</span> TT_UCR_COUNTING_ROD_NUMERALS (1L &lt;&lt; 15) /*U+1D360-U+1D37F*/
+ /* Bit 112 Sundanese */
+#<span class="keyword">define</span> TT_UCR_SUNDANESE (1L &lt;&lt; 16) /* U+1B80-U+1BBF */
+ /* Bit 113 Lepcha */
+#<span class="keyword">define</span> TT_UCR_LEPCHA (1L &lt;&lt; 17) /* U+1C00-U+1C4F */
+ /* Bit 114 Ol Chiki */
+#<span class="keyword">define</span> TT_UCR_OL_CHIKI (1L &lt;&lt; 18) /* U+1C50-U+1C7F */
+ /* Bit 115 Saurashtra */
+#<span class="keyword">define</span> TT_UCR_SAURASHTRA (1L &lt;&lt; 19) /* U+A880-U+A8DF */
+ /* Bit 116 Kayah Li */
+#<span class="keyword">define</span> TT_UCR_KAYAH_LI (1L &lt;&lt; 20) /* U+A900-U+A92F */
+ /* Bit 117 Rejang */
+#<span class="keyword">define</span> TT_UCR_REJANG (1L &lt;&lt; 21) /* U+A930-U+A95F */
+ /* Bit 118 Cham */
+#<span class="keyword">define</span> TT_UCR_CHAM (1L &lt;&lt; 22) /* U+AA00-U+AA5F */
+ /* Bit 119 Ancient Symbols */
+#<span class="keyword">define</span> TT_UCR_ANCIENT_SYMBOLS (1L &lt;&lt; 23) /*U+10190-U+101CF*/
+ /* Bit 120 Phaistos Disc */
+#<span class="keyword">define</span> TT_UCR_PHAISTOS_DISC (1L &lt;&lt; 24) /*U+101D0-U+101FF*/
+ /* Bit 121 Carian */
+ /* Lycian */
+ /* Lydian */
+#<span class="keyword">define</span> TT_UCR_OLD_ANATOLIAN (1L &lt;&lt; 25) /*U+102A0-U+102DF*/
+ /*U+10280-U+1029F*/
+ /*U+10920-U+1093F*/
+ /* Bit 122 Domino Tiles */
+ /* Mahjong Tiles */
+#<span class="keyword">define</span> TT_UCR_GAME_TILES (1L &lt;&lt; 26) /*U+1F030-U+1F09F*/
+ /*U+1F000-U+1F02F*/
+ /* Bit 123-127 Reserved for process-internal usage */
+</pre>
+</div>
+
+<p>Possible bit mask values for the <code>ulUnicodeRangeX</code> fields in an SFNT &lsquo;OS/2&rsquo; table.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ Multiple Masters
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Type 1 Tables
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-tt_driver.html b/freetype/docs/reference/site/ft2-tt_driver.html
new file mode 100644
index 00000000..5a9611e1
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-tt_driver.html
@@ -0,0 +1,1170 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>The TrueType driver - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#the-truetype-driver" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ The TrueType driver
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ The TrueType driver
+ </label>
+
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link md-nav__link--active">
+ The TrueType driver
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The TrueType driver</p>
+<hr />
+<h1 id="the-truetype-driver">The TrueType driver<a class="headerlink" href="#the-truetype-driver" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>While FreeType's TrueType driver doesn't expose API functions by itself, it is possible to control its behaviour with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>. The following lists the available properties together with the necessary macros and structures.</p>
+<p>The TrueType driver's module name is &lsquo;truetype&rsquo;.</p>
+<p>A single property <code><a href="ft2-properties.html#interpreter-version">interpreter-version</a></code> is available, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
+<p>We start with a list of definitions, kindly provided by Greg Hitchcock.</p>
+<p><em>Bi-Level Rendering</em></p>
+<p>Monochromatic rendering, exclusively used in the early days of TrueType by both Apple and Microsoft. Microsoft's GDI interface supported hinting of the right-side bearing point, such that the advance width could be non-linear. Most often this was done to achieve some level of glyph symmetry. To enable reasonable performance (e.g., not having to run hinting on all glyphs just to get the widths) there was a bit in the head table indicating if the side bearing was hinted, and additional tables, &lsquo;hdmx&rsquo; and &lsquo;LTSH&rsquo;, to cache hinting widths across multiple sizes and device aspect ratios.</p>
+<p><em>Font Smoothing</em></p>
+<p>Microsoft's GDI implementation of anti-aliasing. Not traditional anti-aliasing as the outlines were hinted before the sampling. The widths matched the bi-level rendering.</p>
+<p><em>ClearType Rendering</em></p>
+<p>Technique that uses physical subpixels to improve rendering on LCD (and other) displays. Because of the higher resolution, many methods of improving symmetry in glyphs through hinting the right-side bearing were no longer necessary. This lead to what GDI calls &lsquo;natural widths&rsquo; ClearType, see <a href="http://rastertragedy.com/RTRCh4.htm#Sec21">http://rastertragedy.com/RTRCh4.htm#Sec21</a>. Since hinting has extra resolution, most non-linearity went away, but it is still possible for hints to change the advance widths in this mode.</p>
+<p><em>ClearType Compatible Widths</em></p>
+<p>One of the earliest challenges with ClearType was allowing the implementation in GDI to be selected without requiring all UI and documents to reflow. To address this, a compatible method of rendering ClearType was added where the font hints are executed once to determine the width in bi-level rendering, and then re-run in ClearType, with the difference in widths being absorbed in the font hints for ClearType (mostly in the white space of hints); see <a href="http://rastertragedy.com/RTRCh4.htm#Sec20">http://rastertragedy.com/RTRCh4.htm#Sec20</a>. Somewhat by definition, compatible width ClearType allows for non-linear widths, but only when the bi-level version has non-linear widths.</p>
+<p><em>ClearType Subpixel Positioning</em></p>
+<p>One of the nice benefits of ClearType is the ability to more crisply display fractional widths; unfortunately, the GDI model of integer bitmaps did not support this. However, the WPF and Direct Write frameworks do support fractional widths. DWrite calls this &lsquo;natural mode&rsquo;, not to be confused with GDI's &lsquo;natural widths&rsquo;. Subpixel positioning, in the current implementation of Direct Write, unfortunately does not support hinted advance widths, see <a href="http://rastertragedy.com/RTRCh4.htm#Sec22">http://rastertragedy.com/RTRCh4.htm#Sec22</a>. Note that the TrueType interpreter fully allows the advance width to be adjusted in this mode, just the DWrite client will ignore those changes.</p>
+<p><em>ClearType Backward Compatibility</em></p>
+<p>This is a set of exceptions made in the TrueType interpreter to minimize hinting techniques that were problematic with the extra resolution of ClearType; see <a href="http://rastertragedy.com/RTRCh4.htm#Sec1">http://rastertragedy.com/RTRCh4.htm#Sec1</a> and <a href="https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx">https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx</a>. This technique is not to be confused with ClearType compatible widths. ClearType backward compatibility has no direct impact on changing advance widths, but there might be an indirect impact on disabling some deltas. This could be worked around in backward compatibility mode.</p>
+<p><em>Native ClearType Mode</em></p>
+<p>(Not to be confused with &lsquo;natural widths&rsquo;.) This mode removes all the exceptions in the TrueType interpreter when running with ClearType. Any issues on widths would still apply, though.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ The Type 1 and CID drivers
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ The PCF driver
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-type1_tables.html b/freetype/docs/reference/site/ft2-type1_tables.html
new file mode 100644
index 00000000..4166da3f
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-type1_tables.html
@@ -0,0 +1,2155 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Type 1 Tables - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#type-1-tables" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Type 1 Tables
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Type 1 Tables
+ </label>
+
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link md-nav__link--active">
+ Type 1 Tables
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_fontinforec" title="PS_FontInfoRec" class="md-nav__link">
+ PS_FontInfoRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_fontinfo" title="PS_FontInfo" class="md-nav__link">
+ PS_FontInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_privaterec" title="PS_PrivateRec" class="md-nav__link">
+ PS_PrivateRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_private" title="PS_Private" class="md-nav__link">
+ PS_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_facedictrec" title="CID_FaceDictRec" class="md-nav__link">
+ CID_FaceDictRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_facedict" title="CID_FaceDict" class="md-nav__link">
+ CID_FaceDict
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_faceinforec" title="CID_FaceInfoRec" class="md-nav__link">
+ CID_FaceInfoRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_faceinfo" title="CID_FaceInfo" class="md-nav__link">
+ CID_FaceInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_ps_glyph_names" title="FT_Has_PS_Glyph_Names" class="md-nav__link">
+ FT_Has_PS_Glyph_Names
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_info" title="FT_Get_PS_Font_Info" class="md-nav__link">
+ FT_Get_PS_Font_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_private" title="FT_Get_PS_Font_Private" class="md-nav__link">
+ FT_Get_PS_Font_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_value" title="FT_Get_PS_Font_Value" class="md-nav__link">
+ FT_Get_PS_Font_Value
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_blend_flags" title="T1_Blend_Flags" class="md-nav__link">
+ T1_Blend_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_encodingtype" title="T1_EncodingType" class="md-nav__link">
+ T1_EncodingType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_dict_keys" title="PS_Dict_Keys" class="md-nav__link">
+ PS_Dict_Keys
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_fontinfo" title="T1_FontInfo" class="md-nav__link">
+ T1_FontInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_private" title="T1_Private" class="md-nav__link">
+ T1_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_fontdict" title="CID_FontDict" class="md-nav__link">
+ CID_FontDict
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_info" title="CID_Info" class="md-nav__link">
+ CID_Info
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_fontinforec" title="PS_FontInfoRec" class="md-nav__link">
+ PS_FontInfoRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_fontinfo" title="PS_FontInfo" class="md-nav__link">
+ PS_FontInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_privaterec" title="PS_PrivateRec" class="md-nav__link">
+ PS_PrivateRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_private" title="PS_Private" class="md-nav__link">
+ PS_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_facedictrec" title="CID_FaceDictRec" class="md-nav__link">
+ CID_FaceDictRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_facedict" title="CID_FaceDict" class="md-nav__link">
+ CID_FaceDict
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_faceinforec" title="CID_FaceInfoRec" class="md-nav__link">
+ CID_FaceInfoRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_faceinfo" title="CID_FaceInfo" class="md-nav__link">
+ CID_FaceInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_has_ps_glyph_names" title="FT_Has_PS_Glyph_Names" class="md-nav__link">
+ FT_Has_PS_Glyph_Names
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_info" title="FT_Get_PS_Font_Info" class="md-nav__link">
+ FT_Get_PS_Font_Info
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_private" title="FT_Get_PS_Font_Private" class="md-nav__link">
+ FT_Get_PS_Font_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_ps_font_value" title="FT_Get_PS_Font_Value" class="md-nav__link">
+ FT_Get_PS_Font_Value
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_blend_flags" title="T1_Blend_Flags" class="md-nav__link">
+ T1_Blend_Flags
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_encodingtype" title="T1_EncodingType" class="md-nav__link">
+ T1_EncodingType
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ps_dict_keys" title="PS_Dict_Keys" class="md-nav__link">
+ PS_Dict_Keys
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_fontinfo" title="T1_FontInfo" class="md-nav__link">
+ T1_FontInfo
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#t1_private" title="T1_Private" class="md-nav__link">
+ T1_Private
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_fontdict" title="CID_FontDict" class="md-nav__link">
+ CID_FontDict
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#cid_info" title="CID_Info" class="md-nav__link">
+ CID_Info
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; Type 1 Tables</p>
+<hr />
+<h1 id="type-1-tables">Type 1 Tables<a class="headerlink" href="#type-1-tables" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the definition of Type&nbsp;1-specific tables, including structures related to other PostScript font formats.</p>
+<h2 id="ps_fontinforec">PS_FontInfoRec<a class="headerlink" href="#ps_fontinforec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<hr>
+
+<h2 id="ps_fontinfo">PS_FontInfo<a class="headerlink" href="#ps_fontinfo" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_* <b>PS_FontInfo</b>;
+</pre>
+</div>
+
+<p>A handle to a <code><a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ps_privaterec">PS_PrivateRec<a class="headerlink" href="#ps_privaterec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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>
+<hr>
+
+<h2 id="ps_private">PS_Private<a class="headerlink" href="#ps_private" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_* <b>PS_Private</b>;
+</pre>
+</div>
+
+<p>A handle to a <code><a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a></code> structure.</p>
+<hr>
+
+<h2 id="cid_facedictrec">CID_FaceDictRec<a class="headerlink" href="#cid_facedictrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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; /* this is a duplicate of */
+ /* `private_dict-&gt;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>
+</div>
+
+<p>A structure used to represent data in a CID top-level dictionary. In most cases, they are part of the font's &lsquo;/FDArray&rsquo; array. Within a CID font file, such (internal) subfont dictionaries are enclosed by &lsquo;%ADOBeginFontDict&rsquo; and &lsquo;%ADOEndFontDict&rsquo; comments.</p>
+<p>Note that <code>CID_FaceDictRec</code> misses a field for the &lsquo;/FontName&rsquo; keyword, specifying the subfont's name (the top-level font name is given by the &lsquo;/CIDFontName&rsquo; keyword). This is an oversight, but it doesn't limit the &lsquo;cid&rsquo; font module's functionality because FreeType neither needs this entry nor gives access to CID subfonts.</p>
+<hr>
+
+<h2 id="cid_facedict">CID_FaceDict<a class="headerlink" href="#cid_facedict" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_* <b>CID_FaceDict</b>;
+</pre>
+</div>
+
+<p>A handle to a <code><a href="ft2-type1_tables.html#cid_facedictrec">CID_FaceDictRec</a></code> structure.</p>
+<hr>
+
+<h2 id="cid_faceinforec">CID_FaceInfoRec<a class="headerlink" href="#cid_faceinforec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>A structure used to represent CID Face information.</p>
+<hr>
+
+<h2 id="cid_faceinfo">CID_FaceInfo<a class="headerlink" href="#cid_faceinfo" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_* <b>CID_FaceInfo</b>;
+</pre>
+</div>
+
+<p>A handle to a <code><a href="ft2-type1_tables.html#cid_faceinforec">CID_FaceInfoRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ft_has_ps_glyph_names">FT_Has_PS_Glyph_Names<a class="headerlink" href="#ft_has_ps_glyph_names" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Return true if a given face provides reliable PostScript glyph names. This is similar to using the <code><a href="ft2-base_interface.html#ft_has_glyph_names">FT_HAS_GLYPH_NAMES</a></code> 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 <code><a href="ft2-base_interface.html#ft_get_glyph_name">FT_Get_Glyph_Name</a></code> are reliable.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>face handle</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Boolean. True if glyph names are reliable.</p>
+<hr>
+
+<h2 id="ft_get_ps_font_info">FT_Get_PS_Font_Info<a class="headerlink" href="#ft_get_ps_font_info" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a></code> structure corresponding to a given PostScript font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>PostScript face handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="afont_info">afont_info</td><td class="desc">
+<p>Output font info structure pointer.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>String pointers within the <code><a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a></code> structure are owned by the face and don't need to be freed by the caller. Missing entries in the font's FontInfo dictionary are represented by <code>NULL</code> pointers.</p>
+<p>If the font's format is not PostScript-based, this function will return the <code>FT_Err_Invalid_Argument</code> error code.</p>
+<hr>
+
+<h2 id="ft_get_ps_font_private">FT_Get_PS_Font_Private<a class="headerlink" href="#ft_get_ps_font_private" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve the <code><a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a></code> structure corresponding to a given PostScript font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>PostScript face handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="afont_private">afont_private</td><td class="desc">
+<p>Output private dictionary structure pointer.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>The string pointers within the <code><a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a></code> 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 returns the <code>FT_Err_Invalid_Argument</code> error code.</p>
+<hr>
+
+<h2 id="ft_get_ps_font_value">FT_Get_PS_Font_Value<a class="headerlink" href="#ft_get_ps_font_value" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ FT_EXPORT( <a href="ft2-basic_types.html#ft_long">FT_Long</a> )
+ <b>FT_Get_PS_Font_Value</b>( <a href="ft2-base_interface.html#ft_face">FT_Face</a> face,
+ <a href="ft2-type1_tables.html#ps_dict_keys">PS_Dict_Keys</a> key,
+ <a href="ft2-basic_types.html#ft_uint">FT_UInt</a> idx,
+ <span class="keyword">void</span> *value,
+ <a href="ft2-basic_types.html#ft_long">FT_Long</a> value_len );
+</pre>
+</div>
+
+<p>Retrieve the value for the supplied key from a PostScript font.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>PostScript face handle.</p>
+</td></tr>
+<tr><td class="val" id="key">key</td><td class="desc">
+<p>An enumeration value representing the dictionary key to retrieve.</p>
+</td></tr>
+<tr><td class="val" id="idx">idx</td><td class="desc">
+<p>For array values, this specifies the index to be returned.</p>
+</td></tr>
+<tr><td class="val" id="value">value</td><td class="desc">
+<p>A pointer to memory into which to write the value.</p>
+</td></tr>
+<tr><td class="val" id="valen_len">valen_len</td><td class="desc">
+<p>The size, in bytes, of the memory supplied for the value.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="value">value</td><td class="desc">
+<p>The value matching the above key, if it exists.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>The amount of memory (in bytes) required to hold the requested value (if it exists, -1 otherwise).</p>
+<h4>note</h4>
+
+<p>The values returned are not pointers into the internal structures of the face, but are &lsquo;fresh&rsquo; copies, so that the memory containing them belongs to the calling application. This also enforces the &lsquo;read-only&rsquo; nature of these values, i.e., this function cannot be used to manipulate the face.</p>
+<p><code>value</code> is a void pointer because the values returned can be of various types.</p>
+<p>If either <code>value</code> is <code>NULL</code> or <code>value_len</code> is too small, just the required memory size for the requested entry is returned.</p>
+<p>The <code>idx</code> parameter is used, not only to retrieve elements of, for example, the FontMatrix or FontBBox, but also to retrieve name keys from the CharStrings dictionary, and the charstrings themselves. It is ignored for atomic values.</p>
+<p><code>PS_DICT_BLUE_SCALE</code> returns a value that is scaled up by 1000. To get the value as in the font stream, you need to divide by 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).</p>
+<p>IMPORTANT: Only key/value pairs read by the FreeType interpreter can be retrieved. So, for example, PostScript procedures such as NP, ND, and RD are not available. Arbitrary keys are, obviously, not be available either.</p>
+<p>If the font's format is not PostScript-based, this function returns the <code>FT_Err_Invalid_Argument</code> error code.</p>
+<h4>since</h4>
+
+<p>2.4.8</p>
+<hr>
+
+<h2 id="t1_blend_flags">T1_Blend_Flags<a class="headerlink" href="#t1_blend_flags" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> T1_Blend_Flags_
+ {
+ /* required fields in a FontInfo blend dictionary */
+ <a href="ft2-type1_tables.html#t1_blend_underline_position">T1_BLEND_UNDERLINE_POSITION</a> = 0,
+ <a href="ft2-type1_tables.html#t1_blend_underline_thickness">T1_BLEND_UNDERLINE_THICKNESS</a>,
+ <a href="ft2-type1_tables.html#t1_blend_italic_angle">T1_BLEND_ITALIC_ANGLE</a>,
+
+ /* required fields in a Private blend dictionary */
+ <a href="ft2-type1_tables.html#t1_blend_blue_values">T1_BLEND_BLUE_VALUES</a>,
+ <a href="ft2-type1_tables.html#t1_blend_other_blues">T1_BLEND_OTHER_BLUES</a>,
+ <a href="ft2-type1_tables.html#t1_blend_standard_width">T1_BLEND_STANDARD_WIDTH</a>,
+ <a href="ft2-type1_tables.html#t1_blend_standard_height">T1_BLEND_STANDARD_HEIGHT</a>,
+ <a href="ft2-type1_tables.html#t1_blend_stem_snap_widths">T1_BLEND_STEM_SNAP_WIDTHS</a>,
+ <a href="ft2-type1_tables.html#t1_blend_stem_snap_heights">T1_BLEND_STEM_SNAP_HEIGHTS</a>,
+ <a href="ft2-type1_tables.html#t1_blend_blue_scale">T1_BLEND_BLUE_SCALE</a>,
+ <a href="ft2-type1_tables.html#t1_blend_blue_shift">T1_BLEND_BLUE_SHIFT</a>,
+ <a href="ft2-type1_tables.html#t1_blend_family_blues">T1_BLEND_FAMILY_BLUES</a>,
+ <a href="ft2-type1_tables.html#t1_blend_family_other_blues">T1_BLEND_FAMILY_OTHER_BLUES</a>,
+ <a href="ft2-type1_tables.html#t1_blend_force_bold">T1_BLEND_FORCE_BOLD</a>,
+
+ T1_BLEND_MAX /* do not remove */
+
+ } <b>T1_Blend_Flags</b>;
+
+
+ /* these constants are deprecated; use the corresponding */
+ /* `<b>T1_Blend_Flags</b>` values instead */
+#<span class="keyword">define</span> t1_blend_underline_position <a href="ft2-type1_tables.html#t1_blend_underline_position">T1_BLEND_UNDERLINE_POSITION</a>
+#<span class="keyword">define</span> t1_blend_underline_thickness <a href="ft2-type1_tables.html#t1_blend_underline_thickness">T1_BLEND_UNDERLINE_THICKNESS</a>
+#<span class="keyword">define</span> t1_blend_italic_angle <a href="ft2-type1_tables.html#t1_blend_italic_angle">T1_BLEND_ITALIC_ANGLE</a>
+#<span class="keyword">define</span> t1_blend_blue_values <a href="ft2-type1_tables.html#t1_blend_blue_values">T1_BLEND_BLUE_VALUES</a>
+#<span class="keyword">define</span> t1_blend_other_blues <a href="ft2-type1_tables.html#t1_blend_other_blues">T1_BLEND_OTHER_BLUES</a>
+#<span class="keyword">define</span> t1_blend_standard_widths <a href="ft2-type1_tables.html#t1_blend_standard_width">T1_BLEND_STANDARD_WIDTH</a>
+#<span class="keyword">define</span> t1_blend_standard_height <a href="ft2-type1_tables.html#t1_blend_standard_height">T1_BLEND_STANDARD_HEIGHT</a>
+#<span class="keyword">define</span> t1_blend_stem_snap_widths <a href="ft2-type1_tables.html#t1_blend_stem_snap_widths">T1_BLEND_STEM_SNAP_WIDTHS</a>
+#<span class="keyword">define</span> t1_blend_stem_snap_heights <a href="ft2-type1_tables.html#t1_blend_stem_snap_heights">T1_BLEND_STEM_SNAP_HEIGHTS</a>
+#<span class="keyword">define</span> t1_blend_blue_scale <a href="ft2-type1_tables.html#t1_blend_blue_scale">T1_BLEND_BLUE_SCALE</a>
+#<span class="keyword">define</span> t1_blend_blue_shift <a href="ft2-type1_tables.html#t1_blend_blue_shift">T1_BLEND_BLUE_SHIFT</a>
+#<span class="keyword">define</span> t1_blend_family_blues <a href="ft2-type1_tables.html#t1_blend_family_blues">T1_BLEND_FAMILY_BLUES</a>
+#<span class="keyword">define</span> t1_blend_family_other_blues <a href="ft2-type1_tables.html#t1_blend_family_other_blues">T1_BLEND_FAMILY_OTHER_BLUES</a>
+#<span class="keyword">define</span> t1_blend_force_bold <a href="ft2-type1_tables.html#t1_blend_force_bold">T1_BLEND_FORCE_BOLD</a>
+#<span class="keyword">define</span> t1_blend_max T1_BLEND_MAX
+</pre>
+</div>
+
+<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>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="t1_blend_underline_position">T1_BLEND_UNDERLINE_POSITION</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_underline_thickness">T1_BLEND_UNDERLINE_THICKNESS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_italic_angle">T1_BLEND_ITALIC_ANGLE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_blue_values">T1_BLEND_BLUE_VALUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_other_blues">T1_BLEND_OTHER_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_standard_width">T1_BLEND_STANDARD_WIDTH</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_standard_height">T1_BLEND_STANDARD_HEIGHT</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_stem_snap_widths">T1_BLEND_STEM_SNAP_WIDTHS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_stem_snap_heights">T1_BLEND_STEM_SNAP_HEIGHTS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_blue_scale">T1_BLEND_BLUE_SCALE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_blue_shift">T1_BLEND_BLUE_SHIFT</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_family_blues">T1_BLEND_FAMILY_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_family_other_blues">T1_BLEND_FAMILY_OTHER_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_blend_force_bold">T1_BLEND_FORCE_BOLD</td><td class="desc">
+
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="t1_encodingtype">T1_EncodingType<a class="headerlink" href="#t1_encodingtype" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> T1_EncodingType_
+ {
+ <a href="ft2-type1_tables.html#t1_encoding_type_none">T1_ENCODING_TYPE_NONE</a> = 0,
+ <a href="ft2-type1_tables.html#t1_encoding_type_array">T1_ENCODING_TYPE_ARRAY</a>,
+ <a href="ft2-type1_tables.html#t1_encoding_type_standard">T1_ENCODING_TYPE_STANDARD</a>,
+ <a href="ft2-type1_tables.html#t1_encoding_type_isolatin1">T1_ENCODING_TYPE_ISOLATIN1</a>,
+ <a href="ft2-type1_tables.html#t1_encoding_type_expert">T1_ENCODING_TYPE_EXPERT</a>
+
+ } <b>T1_EncodingType</b>;
+</pre>
+</div>
+
+<p>An enumeration describing the &lsquo;Encoding&rsquo; entry in a Type 1 dictionary.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="t1_encoding_type_none">T1_ENCODING_TYPE_NONE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_encoding_type_array">T1_ENCODING_TYPE_ARRAY</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_encoding_type_standard">T1_ENCODING_TYPE_STANDARD</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_encoding_type_isolatin1">T1_ENCODING_TYPE_ISOLATIN1</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="t1_encoding_type_expert">T1_ENCODING_TYPE_EXPERT</td><td class="desc">
+
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.4.8</p>
+<hr>
+
+<h2 id="ps_dict_keys">PS_Dict_Keys<a class="headerlink" href="#ps_dict_keys" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> PS_Dict_Keys_
+ {
+ /* conventionally in the font dictionary */
+ <a href="ft2-type1_tables.html#ps_dict_font_type">PS_DICT_FONT_TYPE</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_font_matrix">PS_DICT_FONT_MATRIX</a>, /* <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> */
+ <a href="ft2-type1_tables.html#ps_dict_font_bbox">PS_DICT_FONT_BBOX</a>, /* <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> */
+ <a href="ft2-type1_tables.html#ps_dict_paint_type">PS_DICT_PAINT_TYPE</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_font_name">PS_DICT_FONT_NAME</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_unique_id">PS_DICT_UNIQUE_ID</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_char_strings">PS_DICT_NUM_CHAR_STRINGS</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_char_string_key">PS_DICT_CHAR_STRING_KEY</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_char_string">PS_DICT_CHAR_STRING</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_encoding_type">PS_DICT_ENCODING_TYPE</a>, /* <a href="ft2-type1_tables.html#t1_encodingtype">T1_EncodingType</a> */
+ <a href="ft2-type1_tables.html#ps_dict_encoding_entry">PS_DICT_ENCODING_ENTRY</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+
+ /* conventionally in the font Private dictionary */
+ <a href="ft2-type1_tables.html#ps_dict_num_subrs">PS_DICT_NUM_SUBRS</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_subr">PS_DICT_SUBR</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_std_hw">PS_DICT_STD_HW</a>, /* <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> */
+ <a href="ft2-type1_tables.html#ps_dict_std_vw">PS_DICT_STD_VW</a>, /* <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_blue_values">PS_DICT_NUM_BLUE_VALUES</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_blue_value">PS_DICT_BLUE_VALUE</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_blue_fuzz">PS_DICT_BLUE_FUZZ</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_other_blues">PS_DICT_NUM_OTHER_BLUES</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_other_blue">PS_DICT_OTHER_BLUE</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_family_blues">PS_DICT_NUM_FAMILY_BLUES</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_family_blue">PS_DICT_FAMILY_BLUE</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_family_other_blues">PS_DICT_NUM_FAMILY_OTHER_BLUES</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_family_other_blue">PS_DICT_FAMILY_OTHER_BLUE</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_blue_scale">PS_DICT_BLUE_SCALE</a>, /* <a href="ft2-basic_types.html#ft_fixed">FT_Fixed</a> */
+ <a href="ft2-type1_tables.html#ps_dict_blue_shift">PS_DICT_BLUE_SHIFT</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_stem_snap_h">PS_DICT_NUM_STEM_SNAP_H</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_stem_snap_h">PS_DICT_STEM_SNAP_H</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_num_stem_snap_v">PS_DICT_NUM_STEM_SNAP_V</a>, /* <a href="ft2-basic_types.html#ft_byte">FT_Byte</a> */
+ <a href="ft2-type1_tables.html#ps_dict_stem_snap_v">PS_DICT_STEM_SNAP_V</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_force_bold">PS_DICT_FORCE_BOLD</a>, /* <a href="ft2-basic_types.html#ft_bool">FT_Bool</a> */
+ <a href="ft2-type1_tables.html#ps_dict_rnd_stem_up">PS_DICT_RND_STEM_UP</a>, /* <a href="ft2-basic_types.html#ft_bool">FT_Bool</a> */
+ <a href="ft2-type1_tables.html#ps_dict_min_feature">PS_DICT_MIN_FEATURE</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_len_iv">PS_DICT_LEN_IV</a>, /* <a href="ft2-basic_types.html#ft_int">FT_Int</a> */
+ <a href="ft2-type1_tables.html#ps_dict_password">PS_DICT_PASSWORD</a>, /* <a href="ft2-basic_types.html#ft_long">FT_Long</a> */
+ <a href="ft2-type1_tables.html#ps_dict_language_group">PS_DICT_LANGUAGE_GROUP</a>, /* <a href="ft2-basic_types.html#ft_long">FT_Long</a> */
+
+ /* conventionally in the font FontInfo dictionary */
+ <a href="ft2-type1_tables.html#ps_dict_version">PS_DICT_VERSION</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_notice">PS_DICT_NOTICE</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_full_name">PS_DICT_FULL_NAME</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_family_name">PS_DICT_FAMILY_NAME</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_weight">PS_DICT_WEIGHT</a>, /* <a href="ft2-basic_types.html#ft_string">FT_String</a>* */
+ <a href="ft2-type1_tables.html#ps_dict_is_fixed_pitch">PS_DICT_IS_FIXED_PITCH</a>, /* <a href="ft2-basic_types.html#ft_bool">FT_Bool</a> */
+ <a href="ft2-type1_tables.html#ps_dict_underline_position">PS_DICT_UNDERLINE_POSITION</a>, /* <a href="ft2-basic_types.html#ft_short">FT_Short</a> */
+ <a href="ft2-type1_tables.html#ps_dict_underline_thickness">PS_DICT_UNDERLINE_THICKNESS</a>, /* <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> */
+ <a href="ft2-type1_tables.html#ps_dict_fs_type">PS_DICT_FS_TYPE</a>, /* <a href="ft2-basic_types.html#ft_ushort">FT_UShort</a> */
+ <a href="ft2-type1_tables.html#ps_dict_italic_angle">PS_DICT_ITALIC_ANGLE</a>, /* <a href="ft2-basic_types.html#ft_long">FT_Long</a> */
+
+ PS_DICT_MAX = <a href="ft2-type1_tables.html#ps_dict_italic_angle">PS_DICT_ITALIC_ANGLE</a>
+
+ } <b>PS_Dict_Keys</b>;
+</pre>
+</div>
+
+<p>An enumeration used in calls to <code><a href="ft2-type1_tables.html#ft_get_ps_font_value">FT_Get_PS_Font_Value</a></code> to identify the Type&nbsp;1 dictionary entry to retrieve.</p>
+<h4>values</h4>
+
+<table class="fields long">
+<tr><td class="val" id="ps_dict_font_type">PS_DICT_FONT_TYPE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_font_matrix">PS_DICT_FONT_MATRIX</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_font_bbox">PS_DICT_FONT_BBOX</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_paint_type">PS_DICT_PAINT_TYPE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_font_name">PS_DICT_FONT_NAME</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_unique_id">PS_DICT_UNIQUE_ID</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_char_strings">PS_DICT_NUM_CHAR_STRINGS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_char_string_key">PS_DICT_CHAR_STRING_KEY</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_char_string">PS_DICT_CHAR_STRING</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_encoding_type">PS_DICT_ENCODING_TYPE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_encoding_entry">PS_DICT_ENCODING_ENTRY</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_subrs">PS_DICT_NUM_SUBRS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_subr">PS_DICT_SUBR</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_std_hw">PS_DICT_STD_HW</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_std_vw">PS_DICT_STD_VW</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_blue_values">PS_DICT_NUM_BLUE_VALUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_blue_value">PS_DICT_BLUE_VALUE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_blue_fuzz">PS_DICT_BLUE_FUZZ</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_other_blues">PS_DICT_NUM_OTHER_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_other_blue">PS_DICT_OTHER_BLUE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_family_blues">PS_DICT_NUM_FAMILY_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_family_blue">PS_DICT_FAMILY_BLUE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_family_other_blues">PS_DICT_NUM_FAMILY_OTHER_BLUES</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_family_other_blue">PS_DICT_FAMILY_OTHER_BLUE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_blue_scale">PS_DICT_BLUE_SCALE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_blue_shift">PS_DICT_BLUE_SHIFT</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_stem_snap_h">PS_DICT_NUM_STEM_SNAP_H</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_stem_snap_h">PS_DICT_STEM_SNAP_H</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_num_stem_snap_v">PS_DICT_NUM_STEM_SNAP_V</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_stem_snap_v">PS_DICT_STEM_SNAP_V</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_force_bold">PS_DICT_FORCE_BOLD</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_rnd_stem_up">PS_DICT_RND_STEM_UP</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_min_feature">PS_DICT_MIN_FEATURE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_len_iv">PS_DICT_LEN_IV</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_password">PS_DICT_PASSWORD</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_language_group">PS_DICT_LANGUAGE_GROUP</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_version">PS_DICT_VERSION</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_notice">PS_DICT_NOTICE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_full_name">PS_DICT_FULL_NAME</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_family_name">PS_DICT_FAMILY_NAME</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_weight">PS_DICT_WEIGHT</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_is_fixed_pitch">PS_DICT_IS_FIXED_PITCH</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_underline_position">PS_DICT_UNDERLINE_POSITION</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_underline_thickness">PS_DICT_UNDERLINE_THICKNESS</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_fs_type">PS_DICT_FS_TYPE</td><td class="desc">
+
+</td></tr>
+<tr><td class="val" id="ps_dict_italic_angle">PS_DICT_ITALIC_ANGLE</td><td class="desc">
+
+</td></tr>
+</table>
+
+<h4>since</h4>
+
+<p>2.4.8</p>
+<hr>
+
+<h2 id="t1_fontinfo">T1_FontInfo<a class="headerlink" href="#t1_fontinfo" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a> <b>T1_FontInfo</b>;
+</pre>
+</div>
+
+<p>This type is equivalent to <code><a href="ft2-type1_tables.html#ps_fontinforec">PS_FontInfoRec</a></code>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+<hr>
+
+<h2 id="t1_private">T1_Private<a class="headerlink" href="#t1_private" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a> <b>T1_Private</b>;
+</pre>
+</div>
+
+<p>This type is equivalent to <code><a href="ft2-type1_tables.html#ps_privaterec">PS_PrivateRec</a></code>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+<hr>
+
+<h2 id="cid_fontdict">CID_FontDict<a class="headerlink" href="#cid_fontdict" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#cid_facedictrec">CID_FaceDictRec</a> <b>CID_FontDict</b>;
+</pre>
+</div>
+
+<p>This type is equivalent to <code><a href="ft2-type1_tables.html#cid_facedictrec">CID_FaceDictRec</a></code>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+<hr>
+
+<h2 id="cid_info">CID_Info<a class="headerlink" href="#cid_info" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#cid_faceinforec">CID_FaceInfoRec</a> <b>CID_Info</b>;
+</pre>
+</div>
+
+<p>This type is equivalent to <code><a href="ft2-type1_tables.html#cid_faceinforec">CID_FaceInfoRec</a></code>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ TrueType Tables
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ SFNT Names
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-user_allocation.html b/freetype/docs/reference/site/ft2-user_allocation.html
new file mode 100644
index 00000000..7a71678e
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-user_allocation.html
@@ -0,0 +1,1153 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>User allocation - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#user-allocation" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ User allocation
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3" checked>
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ User allocation
+ </label>
+
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link md-nav__link--active">
+ User allocation
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#general-remarks">General Remarks</a> &raquo; User allocation</p>
+<hr />
+<h1 id="user-allocation">User allocation<a class="headerlink" href="#user-allocation" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. In other words, it is recommended to use <code>calloc</code> (or variants of it) instead of <code>malloc</code> for allocation.</p>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ FreeType's header inclusion scheme
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-version.html" title="FreeType Version" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ FreeType Version
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-version.html b/freetype/docs/reference/site/ft2-version.html
new file mode 100644
index 00000000..f4b291b4
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-version.html
@@ -0,0 +1,1341 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>FreeType Version - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#freetype-version" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ FreeType Version
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ FreeType Version
+ </label>
+
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link md-nav__link--active">
+ FreeType Version
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_version" title="FT_Library_Version" class="md-nav__link">
+ FT_Library_Version
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_checktruetypepatents" title="FT_Face_CheckTrueTypePatents" class="md-nav__link">
+ FT_Face_CheckTrueTypePatents
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_setunpatentedhinting" title="FT_Face_SetUnpatentedHinting" class="md-nav__link">
+ FT_Face_SetUnpatentedHinting
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#freetype_xxx" title="FREETYPE_XXX" class="md-nav__link">
+ FREETYPE_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_library_version" title="FT_Library_Version" class="md-nav__link">
+ FT_Library_Version
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_checktruetypepatents" title="FT_Face_CheckTrueTypePatents" class="md-nav__link">
+ FT_Face_CheckTrueTypePatents
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_face_setunpatentedhinting" title="FT_Face_SetUnpatentedHinting" class="md-nav__link">
+ FT_Face_SetUnpatentedHinting
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#freetype_xxx" title="FREETYPE_XXX" class="md-nav__link">
+ FREETYPE_XXX
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#core-api">Core API</a> &raquo; FreeType Version</p>
+<hr />
+<h1 id="freetype-version">FreeType Version<a class="headerlink" href="#freetype-version" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<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>
+<h2 id="ft_library_version">FT_Library_Version<a class="headerlink" href="#ft_library_version" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<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 <code><a href="ft2-version.html#freetype_xxx">FREETYPE_MAJOR</a></code>, <code><a href="ft2-version.html#freetype_xxx">FREETYPE_MINOR</a></code>, and <code><a href="ft2-version.html#freetype_xxx">FREETYPE_PATCH</a></code>.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="library">library</td><td class="desc">
+<p>A source library handle.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="amajor">amajor</td><td class="desc">
+<p>The major version number.</p>
+</td></tr>
+<tr><td class="val" id="aminor">aminor</td><td class="desc">
+<p>The minor version number.</p>
+</td></tr>
+<tr><td class="val" id="apatch">apatch</td><td class="desc">
+<p>The patch version number.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The reason why this function takes a <code>library</code> argument is because certain programs implement library initialization in a custom way that doesn't use <code><a href="ft2-base_interface.html#ft_init_freetype">FT_Init_FreeType</a></code>.</p>
+<p>In such cases, the library version might not be available before the library object has been created.</p>
+<hr>
+
+<h2 id="ft_face_checktruetypepatents">FT_Face_CheckTrueTypePatents<a class="headerlink" href="#ft_face_checktruetypepatents" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Deprecated, does nothing.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A face handle.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Always returns false.</p>
+<h4>note</h4>
+
+<p>Since May 2010, TrueType hinting is no longer patented.</p>
+<h4>since</h4>
+
+<p>2.3.5</p>
+<hr>
+
+<h2 id="ft_face_setunpatentedhinting">FT_Face_SetUnpatentedHinting<a class="headerlink" href="#ft_face_setunpatentedhinting" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Deprecated, does nothing.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A face handle.</p>
+</td></tr>
+<tr><td class="val" id="value">value</td><td class="desc">
+<p>New boolean setting.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>Always returns false.</p>
+<h4>note</h4>
+
+<p>Since May 2010, TrueType hinting is no longer patented.</p>
+<h4>since</h4>
+
+<p>2.3.5</p>
+<hr>
+
+<h2 id="freetype_xxx">FREETYPE_XXX<a class="headerlink" href="#freetype_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_FREETYPE_H (freetype/freetype.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-version.html#freetype_major">FREETYPE_MAJOR</a> 2
+#<span class="keyword">define</span> <a href="ft2-version.html#freetype_minor">FREETYPE_MINOR</a> 10
+#<span class="keyword">define</span> <a href="ft2-version.html#freetype_patch">FREETYPE_PATCH</a> 1
+</pre>
+</div>
+
+<p>These three macros identify the FreeType source code version. Use <code><a href="ft2-version.html#ft_library_version">FT_Library_Version</a></code> to access them at runtime.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="freetype_major">FREETYPE_MAJOR</td><td class="desc">
+<p>The major version number.</p>
+</td></tr>
+<tr><td class="val" id="freetype_minor">FREETYPE_MINOR</td><td class="desc">
+<p>The minor version number.</p>
+</td></tr>
+<tr><td class="val" id="freetype_patch">FREETYPE_PATCH</td><td class="desc">
+<p>The patch level.</p>
+</td></tr>
+</table>
+
+<h4>note</h4>
+
+<p>The version number of FreeType if built as a dynamic link library with the &lsquo;libtool&rsquo; package is <em>not</em> controlled by these three macros.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ User allocation
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Basic Data Types
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/ft2-winfnt_fonts.html b/freetype/docs/reference/site/ft2-winfnt_fonts.html
new file mode 100644
index 00000000..ff81b5b1
--- /dev/null
+++ b/freetype/docs/reference/site/ft2-winfnt_fonts.html
@@ -0,0 +1,1401 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>Window FNT Files - FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#window-fnt-files" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ Window FNT Files
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="index.html" title="TOC" class="md-nav__link">
+ TOC
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" checked>
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ Window FNT Files
+ </label>
+
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link md-nav__link--active">
+ Window FNT Files
+ </a>
+
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_id_xxx" title="FT_WinFNT_ID_XXX" class="md-nav__link">
+ FT_WinFNT_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_headerrec" title="FT_WinFNT_HeaderRec" class="md-nav__link">
+ FT_WinFNT_HeaderRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_header" title="FT_WinFNT_Header" class="md-nav__link">
+ FT_WinFNT_Header
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_winfnt_header" title="FT_Get_WinFNT_Header" class="md-nav__link">
+ FT_Get_WinFNT_Header
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">Table of contents</label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#synopsis" title="Synopsis" class="md-nav__link">
+ Synopsis
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_id_xxx" title="FT_WinFNT_ID_XXX" class="md-nav__link">
+ FT_WinFNT_ID_XXX
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_headerrec" title="FT_WinFNT_HeaderRec" class="md-nav__link">
+ FT_WinFNT_HeaderRec
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_winfnt_header" title="FT_WinFNT_Header" class="md-nav__link">
+ FT_WinFNT_Header
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#ft_get_winfnt_header" title="FT_Get_WinFNT_Header" class="md-nav__link">
+ FT_Get_WinFNT_Header
+ </a>
+
+</li>
+
+
+
+
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#format-specific-api">Format-Specific API</a> &raquo; Window FNT Files</p>
+<hr />
+<h1 id="window-fnt-files">Window FNT Files<a class="headerlink" href="#window-fnt-files" title="Permanent link">&para;</a></h1>
+<h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
+<p>This section contains the declaration of Windows FNT-specific functions.</p>
+<h2 id="ft_winfnt_id_xxx">FT_WinFNT_ID_XXX<a class="headerlink" href="#ft_winfnt_id_xxx" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
+<div class = "codehilite">
+<pre>
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1252">FT_WinFNT_ID_CP1252</a> 0
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_default">FT_WinFNT_ID_DEFAULT</a> 1
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_symbol">FT_WinFNT_ID_SYMBOL</a> 2
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_mac">FT_WinFNT_ID_MAC</a> 77
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp932">FT_WinFNT_ID_CP932</a> 128
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp949">FT_WinFNT_ID_CP949</a> 129
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1361">FT_WinFNT_ID_CP1361</a> 130
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp936">FT_WinFNT_ID_CP936</a> 134
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp950">FT_WinFNT_ID_CP950</a> 136
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1253">FT_WinFNT_ID_CP1253</a> 161
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1254">FT_WinFNT_ID_CP1254</a> 162
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1258">FT_WinFNT_ID_CP1258</a> 163
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1255">FT_WinFNT_ID_CP1255</a> 177
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1256">FT_WinFNT_ID_CP1256</a> 178
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1257">FT_WinFNT_ID_CP1257</a> 186
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1251">FT_WinFNT_ID_CP1251</a> 204
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp874">FT_WinFNT_ID_CP874</a> 222
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_cp1250">FT_WinFNT_ID_CP1250</a> 238
+#<span class="keyword">define</span> <a href="ft2-winfnt_fonts.html#ft_winfnt_id_oem">FT_WinFNT_ID_OEM</a> 255
+</pre>
+</div>
+
+<p>A list of valid values for the <code>charset</code> byte in <code><a href="ft2-winfnt_fonts.html#ft_winfnt_headerrec">FT_WinFNT_HeaderRec</a></code>. Exact mapping tables for the various &lsquo;cpXXXX&rsquo; encodings (except for &lsquo;cp1361&rsquo;) can be found at &lsquo;<a href="ftp://ftp.unicode.org/Public/">ftp://ftp.unicode.org/Public/</a>&rsquo; in the <code>MAPPINGS/VENDORS/MICSFT/WINDOWS</code> subdirectory. &lsquo;cp1361&rsquo; is roughly a superset of <code>MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT</code>.</p>
+<h4>values</h4>
+
+<table class="fields">
+<tr><td class="val" id="ft_winfnt_id_default">FT_WinFNT_ID_DEFAULT</td><td class="desc">
+<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><td class="val" id="ft_winfnt_id_symbol">FT_WinFNT_ID_SYMBOL</td><td class="desc">
+<p>There is no known mapping table available.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_mac">FT_WinFNT_ID_MAC</td><td class="desc">
+<p>Mac Roman encoding.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_oem">FT_WinFNT_ID_OEM</td><td class="desc">
+<p>From Michael Poettgen &lt;michael@poettgen.de&gt;:</p>
+<p>The &lsquo;Windows Font Mapping&rsquo; article says that <code>FT_WinFNT_ID_OEM</code> is used for the charset of vector fonts, like <code>modern.fon</code>, <code>roman.fon</code>, and <code>script.fon</code> on Windows.</p>
+<p>The &lsquo;CreateFont&rsquo; documentation says: The <code>FT_WinFNT_ID_OEM</code> 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., &lsquo;cp1252&rsquo;), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from</p>
+<p><a href="https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers">https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers</a> ,</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><td class="val" id="ft_winfnt_id_cp874">FT_WinFNT_ID_CP874</td><td class="desc">
+<p>A superset of Thai TIS 620 and ISO 8859-11.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp932">FT_WinFNT_ID_CP932</td><td class="desc">
+<p>A superset of Japanese Shift-JIS (with minor deviations).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp936">FT_WinFNT_ID_CP936</td><td class="desc">
+<p>A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp949">FT_WinFNT_ID_CP949</td><td class="desc">
+<p>A superset of Korean Hangul KS&nbsp;C 5601-1987 (with different ordering and minor deviations).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp950">FT_WinFNT_ID_CP950</td><td class="desc">
+<p>A superset of traditional Chinese Big&nbsp;5 ETen (with different ordering and minor deviations).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1250">FT_WinFNT_ID_CP1250</td><td class="desc">
+<p>A superset of East European ISO 8859-2 (with slightly different ordering).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1251">FT_WinFNT_ID_CP1251</td><td class="desc">
+<p>A superset of Russian ISO 8859-5 (with different ordering).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1252">FT_WinFNT_ID_CP1252</td><td class="desc">
+<p>ANSI encoding. A superset of ISO 8859-1.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1253">FT_WinFNT_ID_CP1253</td><td class="desc">
+<p>A superset of Greek ISO 8859-7 (with minor modifications).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1254">FT_WinFNT_ID_CP1254</td><td class="desc">
+<p>A superset of Turkish ISO 8859-9.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1255">FT_WinFNT_ID_CP1255</td><td class="desc">
+<p>A superset of Hebrew ISO 8859-8 (with some modifications).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1256">FT_WinFNT_ID_CP1256</td><td class="desc">
+<p>A superset of Arabic ISO 8859-6 (with different ordering).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1257">FT_WinFNT_ID_CP1257</td><td class="desc">
+<p>A superset of Baltic ISO 8859-13 (with some deviations).</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1258">FT_WinFNT_ID_CP1258</td><td class="desc">
+<p>For Vietnamese. This encoding doesn't cover all necessary characters.</p>
+</td></tr>
+<tr><td class="val" id="ft_winfnt_id_cp1361">FT_WinFNT_ID_CP1361</td><td class="desc">
+<p>Korean (Johab).</p>
+</td></tr>
+</table>
+
+<hr>
+
+<h2 id="ft_winfnt_headerrec">FT_WinFNT_HeaderRec<a class="headerlink" href="#ft_winfnt_headerrec" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Windows FNT Header info.</p>
+<hr>
+
+<h2 id="ft_winfnt_header">FT_WinFNT_Header<a class="headerlink" href="#ft_winfnt_header" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
+<div class = "codehilite">
+<pre>
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_* <b>FT_WinFNT_Header</b>;
+</pre>
+</div>
+
+<p>A handle to an <code><a href="ft2-winfnt_fonts.html#ft_winfnt_headerrec">FT_WinFNT_HeaderRec</a></code> structure.</p>
+<hr>
+
+<h2 id="ft_get_winfnt_header">FT_Get_WinFNT_Header<a class="headerlink" href="#ft_get_winfnt_header" title="Permanent link">&para;</a></h2>
+<p>Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).</p>
+<div class = "codehilite">
+<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>
+</div>
+
+<p>Retrieve a Windows FNT font info header.</p>
+<h4>input</h4>
+
+<table class="fields">
+<tr><td class="val" id="face">face</td><td class="desc">
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+
+<h4>output</h4>
+
+<table class="fields">
+<tr><td class="val" id="aheader">aheader</td><td class="desc">
+<p>The WinFNT header.</p>
+</td></tr>
+</table>
+
+<h4>return</h4>
+
+<p>FreeType error code. 0&nbsp;means success.</p>
+<h4>note</h4>
+
+<p>This function only works with Windows FNT faces, returning an error otherwise.</p>
+<hr>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Previous
+ </span>
+ PFR Fonts
+ </span>
+ </div>
+ </a>
+
+
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Font Formats
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/images/favico.ico b/freetype/docs/reference/site/images/favico.ico
new file mode 100644
index 00000000..a1a22ed4
--- /dev/null
+++ b/freetype/docs/reference/site/images/favico.ico
Binary files differ
diff --git a/freetype/docs/reference/site/index.html b/freetype/docs/reference/site/index.html
new file mode 100644
index 00000000..021146fc
--- /dev/null
+++ b/freetype/docs/reference/site/index.html
@@ -0,0 +1,1273 @@
+
+
+
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+ <meta name="description" content="API Reference Documentation for FreeType-2.10.1">
+
+
+
+ <meta name="author" content="FreeType Contributors">
+
+
+ <meta name="lang:clipboard.copy" content="Copy to clipboard">
+
+ <meta name="lang:clipboard.copied" content="Copied to clipboard">
+
+ <meta name="lang:search.language" content="en">
+
+ <meta name="lang:search.pipeline.stopwords" content="True">
+
+ <meta name="lang:search.pipeline.trimmer" content="True">
+
+ <meta name="lang:search.result.none" content="No matching documents">
+
+ <meta name="lang:search.result.one" content="1 matching document">
+
+ <meta name="lang:search.result.other" content="# matching documents">
+
+ <meta name="lang:search.tokenizer" content="[\s\-]+">
+
+ <link rel="shortcut icon" href="images/favico.ico">
+ <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.0.2">
+
+
+
+ <title>FreeType-2.10.1 API Reference</title>
+
+
+
+ <link rel="stylesheet" href="assets/stylesheets/application.982221ab.css">
+
+ <link rel="stylesheet" href="assets/stylesheets/application-palette.224b79ff.css">
+
+
+
+
+ <meta name="theme-color" content="#4caf50">
+
+
+
+ <script src="assets/javascripts/modernizr.1f0bcf2b.js"></script>
+
+
+
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700|Roboto+Mono">
+ <style>body,input{font-family:"Noto Serif","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
+
+
+ <link rel="stylesheet" href="assets/fonts/material-icons.css">
+
+
+ <link rel="stylesheet" href="stylesheets/extra.css">
+
+
+
+
+
+ </head>
+
+
+
+ <body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
+
+ <svg class="md-svg">
+ <defs>
+
+
+ </defs>
+ </svg>
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+
+ <a href="#freetype-2101-api-reference" tabindex="1" class="md-skip">
+ Skip to content
+ </a>
+
+
+ <header class="md-header" data-md-component="header">
+ <nav class="md-header-nav md-grid">
+ <div class="md-flex">
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-header-nav__button md-logo">
+
+ <img src="images/favico.ico" width="24" height="24">
+
+ </a>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+ </div>
+ <div class="md-flex__cell md-flex__cell--stretch">
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+
+ <span class="md-header-nav__topic">
+ FreeType-2.10.1 API Reference
+ </span>
+ <span class="md-header-nav__topic">
+ TOC
+ </span>
+
+ </div>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+
+<div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+ <label class="md-icon md-search__icon" for="__search"></label>
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
+ &#xE5CD;
+ </button>
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="result">
+ <div class="md-search-result__meta">
+ Type to start searching
+ </div>
+ <ol class="md-search-result__list"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+ </div>
+
+ </div>
+ </nav>
+</header>
+
+ <div class="md-container">
+
+
+
+
+ <main class="md-main">
+ <div class="md-main__inner md-grid" data-md-component="container">
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+ <nav class="md-nav md-nav--primary" data-md-level="0">
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
+ <a href="index.html" title="FreeType-2.10.1 API Reference" class="md-nav__button md-logo">
+
+ <img src="images/favico.ico" width="48" height="48">
+
+ </a>
+ FreeType-2.10.1 API Reference
+ </label>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--active">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+
+
+
+
+ <a href="index.html" title="TOC" class="md-nav__link md-nav__link--active">
+ TOC
+ </a>
+
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-index.html" title="Index" class="md-nav__link">
+ Index
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
+
+ <label class="md-nav__link" for="nav-3">
+ General Remarks
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-3">
+ General Remarks
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_inclusion.html" title="FreeType's header inclusion scheme" class="md-nav__link">
+ FreeType's header inclusion scheme
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-user_allocation.html" title="User allocation" class="md-nav__link">
+ User allocation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
+
+ <label class="md-nav__link" for="nav-4">
+ Core API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-4">
+ Core API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-version.html" title="FreeType Version" class="md-nav__link">
+ FreeType Version
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-basic_types.html" title="Basic Data Types" class="md-nav__link">
+ Basic Data Types
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-base_interface.html" title="Base Interface" class="md-nav__link">
+ Base Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_variants.html" title="Unicode Variation Sequences" class="md-nav__link">
+ Unicode Variation Sequences
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-color_management.html" title="Glyph Color Management" class="md-nav__link">
+ Glyph Color Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-layer_management.html" title="Glyph Layer Management" class="md-nav__link">
+ Glyph Layer Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_management.html" title="Glyph Management" class="md-nav__link">
+ Glyph Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-mac_specific.html" title="Mac Specific Interface" class="md-nav__link">
+ Mac Specific Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sizes_management.html" title="Size Management" class="md-nav__link">
+ Size Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-header_file_macros.html" title="Header File Macros" class="md-nav__link">
+ Header File Macros
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
+
+ <label class="md-nav__link" for="nav-5">
+ Format-Specific API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-5">
+ Format-Specific API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-multiple_masters.html" title="Multiple Masters" class="md-nav__link">
+ Multiple Masters
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_tables.html" title="TrueType Tables" class="md-nav__link">
+ TrueType Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-type1_tables.html" title="Type 1 Tables" class="md-nav__link">
+ Type 1 Tables
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-sfnt_names.html" title="SFNT Names" class="md-nav__link">
+ SFNT Names
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bdf_fonts.html" title="BDF and PCF Files" class="md-nav__link">
+ BDF and PCF Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cid_fonts.html" title="CID Fonts" class="md-nav__link">
+ CID Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pfr_fonts.html" title="PFR Fonts" class="md-nav__link">
+ PFR Fonts
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-winfnt_fonts.html" title="Window FNT Files" class="md-nav__link">
+ Window FNT Files
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-font_formats.html" title="Font Formats" class="md-nav__link">
+ Font Formats
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gasp_table.html" title="Gasp Table" class="md-nav__link">
+ Gasp Table
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
+
+ <label class="md-nav__link" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-6">
+ Controlling FreeType Modules
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-auto_hinter.html" title="The auto-hinter" class="md-nav__link">
+ The auto-hinter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cff_driver.html" title="The CFF driver" class="md-nav__link">
+ The CFF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-t1_cid_driver.html" title="The Type 1 and CID drivers" class="md-nav__link">
+ The Type 1 and CID drivers
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-tt_driver.html" title="The TrueType driver" class="md-nav__link">
+ The TrueType driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-pcf_driver.html" title="The PCF driver" class="md-nav__link">
+ The PCF driver
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-properties.html" title="Driver properties" class="md-nav__link">
+ Driver properties
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-parameter_tags.html" title="Parameter Tags" class="md-nav__link">
+ Parameter Tags
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lcd_rendering.html" title="Subpixel Rendering" class="md-nav__link">
+ Subpixel Rendering
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
+
+ <label class="md-nav__link" for="nav-7">
+ Cache Sub-System
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-7">
+ Cache Sub-System
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-cache_subsystem.html" title="Cache Sub-System" class="md-nav__link">
+ Cache Sub-System
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
+
+ <label class="md-nav__link" for="nav-8">
+ Support API
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-8">
+ Support API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-computations.html" title="Computations" class="md-nav__link">
+ Computations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-list_processing.html" title="List Processing" class="md-nav__link">
+ List Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-outline_processing.html" title="Outline Processing" class="md-nav__link">
+ Outline Processing
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-quick_advance.html" title="Quick retrieval of advance values" class="md-nav__link">
+ Quick retrieval of advance values
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bitmap_handling.html" title="Bitmap Handling" class="md-nav__link">
+ Bitmap Handling
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-raster.html" title="Scanline Converter" class="md-nav__link">
+ Scanline Converter
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-glyph_stroker.html" title="Glyph Stroker" class="md-nav__link">
+ Glyph Stroker
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-system_interface.html" title="System Interface" class="md-nav__link">
+ System Interface
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-module_management.html" title="Module Management" class="md-nav__link">
+ Module Management
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gzip.html" title="GZIP Streams" class="md-nav__link">
+ GZIP Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-lzw.html" title="LZW Streams" class="md-nav__link">
+ LZW Streams
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-bzip2.html" title="BZIP2 Streams" class="md-nav__link">
+ BZIP2 Streams
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
+
+ <label class="md-nav__link" for="nav-9">
+ Error Codes
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-9">
+ Error Codes
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_enumerations.html" title="Error Enumerations" class="md-nav__link">
+ Error Enumerations
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-error_code_values.html" title="Error Code Values" class="md-nav__link">
+ Error Code Values
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10">
+
+ <label class="md-nav__link" for="nav-10">
+ Miscellaneous
+ </label>
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
+ <label class="md-nav__title" for="nav-10">
+ Miscellaneous
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-ot_validation.html" title="OpenType Validation" class="md-nav__link">
+ OpenType Validation
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-incremental.html" title="Incremental Loading" class="md-nav__link">
+ Incremental Loading
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-truetype_engine.html" title="The TrueType Engine" class="md-nav__link">
+ The TrueType Engine
+ </a>
+ </li>
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="ft2-gx_validation.html" title="TrueTypeGX/AAT Validation" class="md-nav__link">
+ TrueTypeGX/AAT Validation
+ </a>
+ </li>
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+<nav class="md-nav md-nav--secondary">
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="md-content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; Table of Contents</p>
+<hr />
+<h1 id="freetype-2101-api-reference">FreeType-2.10.1 API Reference<a class="headerlink" href="#freetype-2101-api-reference" title="Permanent link">&para;</a></h1>
+<h1 id="table-of-contents">Table of Contents<a class="headerlink" href="#table-of-contents" title="Permanent link">&para;</a></h1>
+<h2 id="general-remarks">General Remarks<a class="headerlink" href="#general-remarks" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-header_inclusion.html">FreeType's header inclusion scheme</a></td><td class="desc">
+<p>How client applications should include FreeType header files.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-user_allocation.html">User allocation</a></td><td class="desc">
+<p>How client applications should allocate FreeType data structures.</p>
+</td></tr>
+</table>
+
+<h2 id="core-api">Core API<a class="headerlink" href="#core-api" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-version.html">FreeType Version</a></td><td class="desc">
+<p>Functions and macros related to FreeType versions.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-basic_types.html">Basic Data Types</a></td><td class="desc">
+<p>The basic data types defined by the library.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-base_interface.html">Base Interface</a></td><td class="desc">
+<p>The FreeType&nbsp;2 base font interface.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-glyph_variants.html">Unicode Variation Sequences</a></td><td class="desc">
+<p>The FreeType&nbsp;2 interface to Unicode Variation Sequences (UVS), using the SFNT cmap format&nbsp;14.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-color_management.html">Glyph Color Management</a></td><td class="desc">
+<p>Retrieving and manipulating OpenType's &lsquo;CPAL&rsquo; table data.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-layer_management.html">Glyph Layer Management</a></td><td class="desc">
+<p>Retrieving and manipulating OpenType's &lsquo;COLR&rsquo; table data.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-glyph_management.html">Glyph Management</a></td><td class="desc">
+<p>Generic interface to manage individual glyph data.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-mac_specific.html">Mac Specific Interface</a></td><td class="desc">
+<p>Only available on the Macintosh.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-sizes_management.html">Size Management</a></td><td class="desc">
+<p>Managing multiple sizes per face.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-header_file_macros.html">Header File Macros</a></td><td class="desc">
+<p>Macro definitions used to <code>#include</code> specific header files.</p>
+</td></tr>
+</table>
+
+<h2 id="format-specific-api">Format-Specific API<a class="headerlink" href="#format-specific-api" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-multiple_masters.html">Multiple Masters</a></td><td class="desc">
+<p>How to manage Multiple Masters fonts.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-truetype_tables.html">TrueType Tables</a></td><td class="desc">
+<p>TrueType-specific table types and functions.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-type1_tables.html">Type 1 Tables</a></td><td class="desc">
+<p>Type&nbsp;1-specific font tables.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-sfnt_names.html">SFNT Names</a></td><td class="desc">
+<p>Access the names embedded in TrueType and OpenType files.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-bdf_fonts.html">BDF and PCF Files</a></td><td class="desc">
+<p>BDF and PCF specific API.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-cid_fonts.html">CID Fonts</a></td><td class="desc">
+<p>CID-keyed font-specific API.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-pfr_fonts.html">PFR Fonts</a></td><td class="desc">
+<p>PFR/TrueDoc-specific API.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-winfnt_fonts.html">Window FNT Files</a></td><td class="desc">
+<p>Windows FNT-specific API.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-font_formats.html">Font Formats</a></td><td class="desc">
+<p>Getting the font format.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-gasp_table.html">Gasp Table</a></td><td class="desc">
+<p>Retrieving TrueType &lsquo;gasp&rsquo; table entries.</p>
+</td></tr>
+</table>
+
+<h2 id="controlling-freetype-modules">Controlling FreeType Modules<a class="headerlink" href="#controlling-freetype-modules" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-auto_hinter.html">The auto-hinter</a></td><td class="desc">
+<p>Controlling the auto-hinting module.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-cff_driver.html">The CFF driver</a></td><td class="desc">
+<p>Controlling the CFF driver module.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-t1_cid_driver.html">The Type 1 and CID drivers</a></td><td class="desc">
+<p>Controlling the Type&nbsp;1 and CID driver modules.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-tt_driver.html">The TrueType driver</a></td><td class="desc">
+<p>Controlling the TrueType driver module.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-pcf_driver.html">The PCF driver</a></td><td class="desc">
+<p>Controlling the PCF driver module.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-properties.html">Driver properties</a></td><td class="desc">
+<p>Controlling driver modules.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-parameter_tags.html">Parameter Tags</a></td><td class="desc">
+<p>Macros for driver property and font loading parameter tags.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-lcd_rendering.html">Subpixel Rendering</a></td><td class="desc">
+<p>API to control subpixel rendering.</p>
+</td></tr>
+</table>
+
+<h2 id="cache-sub-system">Cache Sub-System<a class="headerlink" href="#cache-sub-system" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-cache_subsystem.html">Cache Sub-System</a></td><td class="desc">
+<p>How to cache face, size, and glyph data with FreeType&nbsp;2.</p>
+</td></tr>
+</table>
+
+<h2 id="support-api">Support API<a class="headerlink" href="#support-api" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-computations.html">Computations</a></td><td class="desc">
+<p>Crunching fixed numbers and vectors.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-list_processing.html">List Processing</a></td><td class="desc">
+<p>Simple management of lists.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-outline_processing.html">Outline Processing</a></td><td class="desc">
+<p>Functions to create, transform, and render vectorial glyph images.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-quick_advance.html">Quick retrieval of advance values</a></td><td class="desc">
+<p>Retrieve horizontal and vertical advance values without processing glyph outlines, if possible.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-bitmap_handling.html">Bitmap Handling</a></td><td class="desc">
+<p>Handling FT_Bitmap objects.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-raster.html">Scanline Converter</a></td><td class="desc">
+<p>How vectorial outlines are converted into bitmaps and pixmaps.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-glyph_stroker.html">Glyph Stroker</a></td><td class="desc">
+<p>Generating bordered and stroked glyphs.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-system_interface.html">System Interface</a></td><td class="desc">
+<p>How FreeType manages memory and i/o.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-module_management.html">Module Management</a></td><td class="desc">
+<p>How to add, upgrade, remove, and control modules from FreeType.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-gzip.html">GZIP Streams</a></td><td class="desc">
+<p>Using gzip-compressed font files.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-lzw.html">LZW Streams</a></td><td class="desc">
+<p>Using LZW-compressed font files.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-bzip2.html">BZIP2 Streams</a></td><td class="desc">
+<p>Using bzip2-compressed font files.</p>
+</td></tr>
+</table>
+
+<h2 id="error-codes">Error Codes<a class="headerlink" href="#error-codes" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-error_enumerations.html">Error Enumerations</a></td><td class="desc">
+<p>How to handle errors and error strings.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-error_code_values.html">Error Code Values</a></td><td class="desc">
+<p>All possible error codes returned by FreeType functions.</p>
+</td></tr>
+</table>
+
+<h2 id="miscellaneous">Miscellaneous<a class="headerlink" href="#miscellaneous" title="Permanent link">&para;</a></h2>
+<table class="toc">
+<tr><td class="link"><a href="ft2-ot_validation.html">OpenType Validation</a></td><td class="desc">
+<p>An API to validate OpenType tables.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-incremental.html">Incremental Loading</a></td><td class="desc">
+<p>Custom Glyph Loading.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-truetype_engine.html">The TrueType Engine</a></td><td class="desc">
+<p>TrueType bytecode support.</p>
+</td></tr>
+<tr><td class="link"><a href="ft2-gx_validation.html">TrueTypeGX/AAT Validation</a></td><td class="desc">
+<p>An API to validate TrueTypeGX/AAT tables.</p>
+</td></tr>
+</table>
+
+<h2 id="global-index"><a href="ft2-index.html">Global Index</a><a class="headerlink" href="#global-index" title="Permanent link">&para;</a></h2>
+<hr />
+<div class="timestamp">generated on Mon Jul 1 15:55:30 2019 UTC</div>
+
+
+
+
+
+
+
+
+
+ </article>
+ </div>
+ </div>
+ </main>
+
+
+<footer class="md-footer">
+
+ <div class="md-footer-nav">
+ <nav class="md-footer-nav__inner md-grid">
+
+
+ <a href="ft2-index.html" title="Index" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+ <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+ <span class="md-flex__ellipsis">
+ <span class="md-footer-nav__direction">
+ Next
+ </span>
+ Index
+ </span>
+ </div>
+ <div class="md-flex__cell md-flex__cell--shrink">
+ <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+ </div>
+ </a>
+
+ </nav>
+ </div>
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-footer-copyright">
+
+ <div class="md-footer-copyright__highlight">
+ Copyright 2019 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
+ </div>
+
+ powered by
+ <a href="https://www.mkdocs.org">MkDocs</a>
+ and
+ <a href="https://squidfunk.github.io/mkdocs-material/">
+ Material for MkDocs</a>
+ </div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+
+ <script src="assets/javascripts/application.d9aa80ab.js"></script>
+
+ <script>app.initialize({version:"1.0.4",url:{base:"."}})</script>
+
+ <script src="javascripts/extra.js"></script>
+
+
+ </body>
+</html> \ No newline at end of file
diff --git a/freetype/docs/reference/site/javascripts/extra.js b/freetype/docs/reference/site/javascripts/extra.js
new file mode 100644
index 00000000..00f16708
--- /dev/null
+++ b/freetype/docs/reference/site/javascripts/extra.js
@@ -0,0 +1,54 @@
+/*
+Internal link topbar offest adjust Javascript
+Code provided by @makshh on GitHub
+
+Bug report on material-mkdocs
+ https://github.com/squidfunk/mkdocs-material/issues/791
+*/
+
+// Offset top helper
+function offsetY(elem) {
+ if(!elem) elem = this;
+ var y = elem.offsetTop;
+ while (elem = elem.offsetParent) {
+ y += elem.offsetTop;
+ }
+ return y;
+}
+
+// If a link on the same page is clicked, calculate the
+// correct offset and scroll to that part of the page.
+//
+var links = document.getElementsByTagName('a');
+for(var i = 0; i < links.length; i++) {
+ links[i].onclick = function (event) {
+ if (this.pathname == window.location.pathname &&
+ this.protocol == window.location.protocol &&
+ this.host == window.location.host) {
+ event.preventDefault();
+ if(this.hash.substr(1)){
+ var o = document.getElementById(this.hash.substr(1));
+ var sT = offsetY(o) - document.getElementsByClassName('md-header')[0].clientHeight;
+ window.location.hash = this.hash;
+ window.scrollTo(0, sT);
+ }
+ }
+ }
+}
+
+// Slugify supplied text
+function slugify(text){
+ text = text.toLowerCase();
+ text = text.replace(" ", "-");
+ return text;
+}
+
+// If there is a hash in the url, slugify it
+// and replace
+if(window.location.hash) {
+ // Fragment exists
+ slug = slugify(window.location.hash);
+ history.replaceState(undefined, undefined, slug)
+ //window.location.hash = slug;
+ document.location.replace(window.location.href);
+}
diff --git a/freetype/docs/reference/site/search/search_index.json b/freetype/docs/reference/site/search/search_index.json
new file mode 100644
index 00000000..0a6c9fe2
--- /dev/null
+++ b/freetype/docs/reference/site/search/search_index.json
@@ -0,0 +1 @@
+{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"FreeType Docs Table of Contents FreeType-2.10.1 API Reference Table of Contents General Remarks FreeType's header inclusion scheme How client applications should include FreeType header files. User allocation How client applications should allocate FreeType data structures. Core API FreeType Version Functions and macros related to FreeType versions. Basic Data Types The basic data types defined by the library. Base Interface The FreeType 2 base font interface. Unicode Variation Sequences The FreeType 2 interface to Unicode Variation Sequences (UVS), using the SFNT cmap format 14. Glyph Color Management Retrieving and manipulating OpenType's CPAL table data. Glyph Layer Management Retrieving and manipulating OpenType's COLR table data. Glyph Management Generic interface to manage individual glyph data. Mac Specific Interface Only available on the Macintosh. Size Management Managing multiple sizes per face. Header File Macros Macro definitions used to #include specific header files. Format-Specific API Multiple Masters How to manage Multiple Masters fonts. TrueType Tables TrueType-specific table types and functions. Type 1 Tables Type 1-specific font tables. SFNT Names Access the names embedded in TrueType and OpenType files. BDF and PCF Files BDF and PCF specific API. CID Fonts CID-keyed font-specific API. PFR Fonts PFR/TrueDoc-specific API. Window FNT Files Windows FNT-specific API. Font Formats Getting the font format. Gasp Table Retrieving TrueType gasp table entries. Controlling FreeType Modules The auto-hinter Controlling the auto-hinting module. The CFF driver Controlling the CFF driver module. The Type 1 and CID drivers Controlling the Type 1 and CID driver modules. The TrueType driver Controlling the TrueType driver module. The PCF driver Controlling the PCF driver module. Driver properties Controlling driver modules. Parameter Tags Macros for driver property and font loading parameter tags. Subpixel Rendering API to control subpixel rendering. Cache Sub-System Cache Sub-System How to cache face, size, and glyph data with FreeType 2. Support API Computations Crunching fixed numbers and vectors. List Processing Simple management of lists. Outline Processing Functions to create, transform, and render vectorial glyph images. Quick retrieval of advance values Retrieve horizontal and vertical advance values without processing glyph outlines, if possible. Bitmap Handling Handling FT_Bitmap objects. Scanline Converter How vectorial outlines are converted into bitmaps and pixmaps. Glyph Stroker Generating bordered and stroked glyphs. System Interface How FreeType manages memory and i/o. Module Management How to add, upgrade, remove, and control modules from FreeType. GZIP Streams Using gzip-compressed font files. LZW Streams Using LZW-compressed font files. BZIP2 Streams Using bzip2-compressed font files. Error Codes Error Enumerations How to handle errors and error strings. Error Code Values All possible error codes returned by FreeType functions. Miscellaneous OpenType Validation An API to validate OpenType tables. Incremental Loading Custom Glyph Loading. The TrueType Engine TrueType bytecode support. TrueTypeGX/AAT Validation An API to validate TrueTypeGX/AAT tables. Global Index generated on Mon Jul 1 15:55:30 2019 UTC","title":"TOC"},{"location":"index.html#freetype-2101-api-reference","text":"","title":"FreeType-2.10.1 API Reference"},{"location":"index.html#table-of-contents","text":"","title":"Table of Contents"},{"location":"index.html#general-remarks","text":"FreeType's header inclusion scheme How client applications should include FreeType header files. User allocation How client applications should allocate FreeType data structures.","title":"General Remarks"},{"location":"index.html#core-api","text":"FreeType Version Functions and macros related to FreeType versions. Basic Data Types The basic data types defined by the library. Base Interface The FreeType 2 base font interface. Unicode Variation Sequences The FreeType 2 interface to Unicode Variation Sequences (UVS), using the SFNT cmap format 14. Glyph Color Management Retrieving and manipulating OpenType's CPAL table data. Glyph Layer Management Retrieving and manipulating OpenType's COLR table data. Glyph Management Generic interface to manage individual glyph data. Mac Specific Interface Only available on the Macintosh. Size Management Managing multiple sizes per face. Header File Macros Macro definitions used to #include specific header files.","title":"Core API"},{"location":"index.html#format-specific-api","text":"Multiple Masters How to manage Multiple Masters fonts. TrueType Tables TrueType-specific table types and functions. Type 1 Tables Type 1-specific font tables. SFNT Names Access the names embedded in TrueType and OpenType files. BDF and PCF Files BDF and PCF specific API. CID Fonts CID-keyed font-specific API. PFR Fonts PFR/TrueDoc-specific API. Window FNT Files Windows FNT-specific API. Font Formats Getting the font format. Gasp Table Retrieving TrueType gasp table entries.","title":"Format-Specific API"},{"location":"index.html#controlling-freetype-modules","text":"The auto-hinter Controlling the auto-hinting module. The CFF driver Controlling the CFF driver module. The Type 1 and CID drivers Controlling the Type 1 and CID driver modules. The TrueType driver Controlling the TrueType driver module. The PCF driver Controlling the PCF driver module. Driver properties Controlling driver modules. Parameter Tags Macros for driver property and font loading parameter tags. Subpixel Rendering API to control subpixel rendering.","title":"Controlling FreeType Modules"},{"location":"index.html#cache-sub-system","text":"Cache Sub-System How to cache face, size, and glyph data with FreeType 2.","title":"Cache Sub-System"},{"location":"index.html#support-api","text":"Computations Crunching fixed numbers and vectors. List Processing Simple management of lists. Outline Processing Functions to create, transform, and render vectorial glyph images. Quick retrieval of advance values Retrieve horizontal and vertical advance values without processing glyph outlines, if possible. Bitmap Handling Handling FT_Bitmap objects. Scanline Converter How vectorial outlines are converted into bitmaps and pixmaps. Glyph Stroker Generating bordered and stroked glyphs. System Interface How FreeType manages memory and i/o. Module Management How to add, upgrade, remove, and control modules from FreeType. GZIP Streams Using gzip-compressed font files. LZW Streams Using LZW-compressed font files. BZIP2 Streams Using bzip2-compressed font files.","title":"Support API"},{"location":"index.html#error-codes","text":"Error Enumerations How to handle errors and error strings. Error Code Values All possible error codes returned by FreeType functions.","title":"Error Codes"},{"location":"index.html#miscellaneous","text":"OpenType Validation An API to validate OpenType tables. Incremental Loading Custom Glyph Loading. The TrueType Engine TrueType bytecode support. TrueTypeGX/AAT Validation An API to validate TrueTypeGX/AAT tables.","title":"Miscellaneous"},{"location":"index.html#global-index","text":"generated on Mon Jul 1 15:55:30 2019 UTC","title":"Global Index"},{"location":"ft2-auto_hinter.html","text":"FreeType Docs Controlling FreeType Modules The auto-hinter The auto-hinter Synopsis While FreeType's auto-hinter doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The following lists the available properties together with the necessary macros and structures. Note that the auto-hinter's module name is autofitter for historical reasons. Available properties are increase-x-height , no-stem-darkening (experimental), darkening-parameters (experimental), warping (experimental), glyph-to-script-map (experimental), fallback-script (experimental), and default-script (experimental), as documented in the Driver properties section.","title":"The auto-hinter"},{"location":"ft2-auto_hinter.html#the-auto-hinter","text":"","title":"The auto-hinter"},{"location":"ft2-auto_hinter.html#synopsis","text":"While FreeType's auto-hinter doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The following lists the available properties together with the necessary macros and structures. Note that the auto-hinter's module name is autofitter for historical reasons. Available properties are increase-x-height , no-stem-darkening (experimental), darkening-parameters (experimental), warping (experimental), glyph-to-script-map (experimental), fallback-script (experimental), and default-script (experimental), as documented in the Driver properties section.","title":"Synopsis"},{"location":"ft2-base_interface.html","text":"FreeType Docs Core API Base Interface Base Interface Synopsis This section describes the most important public high-level API functions of FreeType 2. FT_Library Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_LibraryRec_ * FT_Library ; 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 ). [Since 2.5.6] In multi-threaded applications it is easiest to use one FT_Library object per thread. In case this is too cumbersome, a single FT_Library object across threads is possible also, as long as a mutex lock is used around FT_New_Face and FT_Done_Face . note Library objects are normally created by FT_Init_FreeType , and destroyed with FT_Done_FreeType . If you need reference-counting (cf. FT_Reference_Library ), use FT_New_Library and FT_Done_Library . FT_Face Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_FaceRec_* FT_Face ; A handle to a typographic face object. A face object models a given typeface, in a given style. note A face object also owns a single FT_GlyphSlot object, as well as one or more FT_Size objects. Use FT_New_Face or FT_Open_Face to create a new face object from a given filepath or a custom input stream. Use FT_Done_Face to destroy it (along with its slot and sizes). An FT_Face object can only be safely used from one thread at a time. Similarly, creation and destruction of FT_Face with the same FT_Library object can only be done from one thread at a time. On the other hand, functions like FT_Load_Glyph and its siblings are thread-safe and do not need the lock to be held as long as the same FT_Face object is not used from multiple threads at the same time. also See FT_FaceRec for the publicly accessible fields of a given face object. FT_Size Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_SizeRec_* FT_Size ; A handle to an object that models a face scaled to a given character size. note An FT_Face has one active FT_Size object that is used by functions like FT_Load_Glyph to determine the scaling transformation that in turn is used to load and hint glyphs and metrics. You can use FT_Set_Char_Size , FT_Set_Pixel_Sizes , FT_Request_Size or even FT_Select_Size to change the content (i.e., the scaling values) of the active FT_Size . You can use FT_New_Size to create additional size objects for a given FT_Face , but they won't be used by other functions until you activate it through FT_Activate_Size . Only one size can be activated at any given time per face. also See FT_SizeRec for the publicly accessible fields of a given size object. FT_GlyphSlot Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_GlyphSlotRec_* FT_GlyphSlot ; A handle to a given glyph slot . A slot is a container that can hold any of the glyphs contained in its parent face. In other words, each time you call FT_Load_Glyph or FT_Load_Char , the slot's content is erased by the new glyph data, i.e., the glyph's metrics, its image (bitmap or outline), and other control information. also See FT_GlyphSlotRec for the publicly accessible glyph fields. FT_CharMap Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_CharMapRec_* FT_CharMap ; A handle to a character map (usually abbreviated to charmap ). A charmap is used to translate character codes in a given encoding into glyph indexes for its parent's face. Some font formats may provide several charmaps per font. Each face object owns zero or more charmaps, but only one of them can be active , providing the data used by FT_Get_Char_Index or FT_Load_Char . The list of available charmaps in a face is available through the face- num_charmaps and face- charmaps fields of FT_FaceRec . The currently active charmap is available as face- charmap . You should call FT_Set_Charmap to change it. note When a new face is created (either through FT_New_Face or FT_Open_Face ), the library looks for a Unicode charmap within the list and automatically activates it. If there is no Unicode charmap, FreeType doesn't set an active charmap. also See FT_CharMapRec for the publicly accessible fields of a given character map. FT_Encoding Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Encoding_ { FT_ENC_TAG ( FT_ENCODING_NONE , 0, 0, 0, 0 ), FT_ENC_TAG ( FT_ENCODING_MS_SYMBOL , 's', 'y', 'm', 'b' ), FT_ENC_TAG ( FT_ENCODING_UNICODE , 'u', 'n', 'i', 'c' ), FT_ENC_TAG ( FT_ENCODING_SJIS , 's', 'j', 'i', 's' ), FT_ENC_TAG ( FT_ENCODING_PRC , 'g', 'b', ' ', ' ' ), FT_ENC_TAG ( FT_ENCODING_BIG5 , 'b', 'i', 'g', '5' ), FT_ENC_TAG ( FT_ENCODING_WANSUNG , 'w', 'a', 'n', 's' ), FT_ENC_TAG ( FT_ENCODING_JOHAB , 'j', 'o', 'h', 'a' ), /* for backward compatibility */ FT_ENCODING_GB2312 = FT_ENCODING_PRC , FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS , FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC , FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5 , FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG , FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB , FT_ENC_TAG ( FT_ENCODING_ADOBE_STANDARD , 'A', 'D', 'O', 'B' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_EXPERT , 'A', 'D', 'B', 'E' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_CUSTOM , 'A', 'D', 'B', 'C' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_LATIN_1 , 'l', 'a', 't', '1' ), FT_ENC_TAG ( FT_ENCODING_OLD_LATIN_2 , 'l', 'a', 't', '2' ), FT_ENC_TAG ( FT_ENCODING_APPLE_ROMAN , 'a', 'r', 'm', 'n' ) } FT_Encoding ; /* these constants are deprecated; use the corresponding ` FT_Encoding ` */ /* values instead */ # define ft_encoding_none FT_ENCODING_NONE # define ft_encoding_unicode FT_ENCODING_UNICODE # define ft_encoding_symbol FT_ENCODING_MS_SYMBOL # define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 # define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 # define ft_encoding_sjis FT_ENCODING_SJIS # define ft_encoding_gb2312 FT_ENCODING_PRC # define ft_encoding_big5 FT_ENCODING_BIG5 # define ft_encoding_wansung FT_ENCODING_WANSUNG # define ft_encoding_johab FT_ENCODING_JOHAB # define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD # define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT # define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM # define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN An enumeration to specify character sets supported by charmaps. Used in the FT_Select_Charmap API function. note Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, etc.). Other encodings might be defined in the future. values FT_ENCODING_NONE The encoding value 0 is reserved for all formats except BDF, PCF, and Windows FNT; see below for more information. FT_ENCODING_UNICODE The Unicode character set. This value covers all versions of the Unicode repertoire, including ASCII and Latin-1. Most fonts include a Unicode charmap, but not all of them. For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for FT_Get_Char_Index . FT_ENCODING_MS_SYMBOL Microsoft Symbol encoding, used to encode mathematical symbols and wingdings. For more information, see https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts , http://www.kostis.net/charsets/symbol.htm , and http://www.kostis.net/charsets/wingding.htm . This encoding uses character codes from the PUA (Private Unicode Area) in the range U+F020-U+F0FF. FT_ENCODING_SJIS Shift JIS encoding for Japanese. More info at https://en.wikipedia.org/wiki/Shift_JIS . See note on multi-byte encodings below. FT_ENCODING_PRC Corresponds to encoding systems mainly for Simplified Chinese as used in People's Republic of China (PRC). The encoding layout is based on GB 2312 and its supersets GBK and GB 18030. FT_ENCODING_BIG5 Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong. FT_ENCODING_WANSUNG Corresponds to the Korean encoding system known as Extended Wansung (MS Windows code page 949). For more information see https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt . FT_ENCODING_JOHAB The Korean standard character set (KS C 5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangul character combinations. FT_ENCODING_ADOBE_LATIN_1 Corresponds to a Latin-1 encoding as defined in a Type 1 PostScript font. It is limited to 256 character codes. FT_ENCODING_ADOBE_STANDARD Adobe Standard encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. FT_ENCODING_ADOBE_EXPERT Adobe Expert encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. FT_ENCODING_ADOBE_CUSTOM Corresponds to a custom encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. FT_ENCODING_APPLE_ROMAN Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this 8-bit encoding, since older versions of Mac OS are able to use it. FT_ENCODING_OLD_LATIN_2 This value is deprecated and was neither used nor reported by FreeType. Don't use or test for it. FT_ENCODING_MS_SJIS Same as FT_ENCODING_SJIS. Deprecated. FT_ENCODING_MS_GB2312 Same as FT_ENCODING_PRC. Deprecated. FT_ENCODING_MS_BIG5 Same as FT_ENCODING_BIG5. Deprecated. FT_ENCODING_MS_WANSUNG Same as FT_ENCODING_WANSUNG. Deprecated. FT_ENCODING_MS_JOHAB Same as FT_ENCODING_JOHAB. Deprecated. note By default, FreeType enables a Unicode charmap and tags it with FT_ENCODING_UNICODE when it is either provided or can be generated from PostScript glyph name dictionaries in the font file. All other encodings are considered legacy and tagged only if explicitly defined in the font file. Otherwise, FT_ENCODING_NONE is used. FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap is neither Unicode nor ISO-8859-1 (otherwise it is set to FT_ENCODING_UNICODE ). Use FT_Get_BDF_Charset_ID to find out which encoding is really present. If, for example, the cs_registry field is KOI8 and the cs_encoding field is R , the font is encoded in KOI8-R. FT_ENCODING_NONE is always set (with a single exception) by the winfonts driver. Use FT_Get_WinFNT_Header and examine the charset field of the FT_WinFNT_HeaderRec structure to find out which encoding is really present. For example, FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for Russian). FT_ENCODING_NONE is set if platform_id is TT_PLATFORM_MACINTOSH and encoding_id is not TT_MAC_ID_ROMAN (otherwise it is set to FT_ENCODING_APPLE_ROMAN ). If platform_id is TT_PLATFORM_MACINTOSH , use the function FT_Get_CMap_Language_ID to query the Mac language ID that may be needed to be able to distinguish Apple encoding variants. See https://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. FT_ENC_TAG Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 */ 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. FT_FaceRec Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_FaceRec_ { FT_Long num_faces; FT_Long face_index; FT_Long face_flags; FT_Long style_flags; FT_Long num_glyphs; FT_String * family_name; FT_String * style_name; FT_Int num_fixed_sizes; FT_Bitmap_Size * available_sizes; FT_Int num_charmaps; FT_CharMap * charmaps; FT_Generic generic; /*# The following member variables (down to `underline_thickness`) */ /*# are only relevant to scalable outlines; cf. @ FT_Bitmap_Size */ /*# for bitmap fonts. */ FT_BBox bbox; FT_UShort units_per_EM; FT_Short ascender; FT_Short descender; FT_Short height; FT_Short max_advance_width; FT_Short max_advance_height; FT_Short underline_position; FT_Short underline_thickness; FT_GlyphSlot glyph; FT_Size size; FT_CharMap charmap; /*@private begin */ FT_Driver driver; FT_Memory memory; FT_Stream stream; FT_ListRec sizes_list; FT_Generic autohint; /* face-specific auto-hinter data */ void * extensions; /* unused */ FT_Face_Internal internal; /*@private end */ } FT_FaceRec ; FreeType root face class structure. A face object models a typeface in a font file. fields num_faces The number of faces in the font file. Some font formats can have multiple faces in a single font file. face_index This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value 0). They are set to 0 if there is only one face in the font file. [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, holding the named instance index for the current face index (starting with value 1; value 0 indicates font access without a named instance). For non-variation fonts, bits 16-30 are ignored. If we have the third named instance of face 4, say, face_index is set to 0x00030004. Bit 31 is always zero (this is, face_index is always a positive value). [Since 2.9] Changing the design coordinates with FT_Set_Var_Design_Coordinates or FT_Set_Var_Blend_Coordinates does not influence the named instance index value (only FT_Set_Named_Instance does that). face_flags A set of bit flags that give important information about the face; see FT_FACE_FLAG_XXX for the details. style_flags The lower 16 bits contain a set of bit flags indicating the style of the face; see FT_STYLE_FLAG_XXX for the details. [Since 2.6.1] Bits 16-30 hold the number of named instances available for the current face if we have a GX or OpenType variation (sub)font. Bit 31 is always zero (this is, style_flags is always a positive value). Note that a variation font has always at least one named instance, namely the default instance. num_glyphs The number of glyphs in the face. If the face is scalable and has sbits (see num_fixed_sizes ), it is set to the number of outline glyphs. For CID-keyed fonts (not in an SFNT wrapper) this value gives the highest CID used in the font. family_name The face's family name. This is an ASCII string, usually in English, that describes the typeface's family (like Times New Roman , Bodoni , Garamond , etc). This is a least common denominator used to list fonts. Some formats (TrueType OpenType) provide localized and Unicode versions of this string. Applications should use the format-specific interface to access them. Can be NULL (e.g., in fonts embedded in a PDF file). In case the font doesn't provide a specific family name entry, FreeType tries to synthesize one, deriving it from other name entries. style_name The face's style name. This is an ASCII string, usually in English, that describes the typeface's style (like Italic , Bold , Condensed , etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL . As for family_name , some formats provide localized and Unicode versions of this string. Applications should use the format-specific interface to access them. num_fixed_sizes The number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap strikes, which are called sbits in that case. available_sizes An array of FT_Bitmap_Size for all bitmap strikes in the face. It is set to NULL if there is no bitmap strike. Note that FreeType tries to sanitize the strike data since they are sometimes sloppy or incorrect, but this can easily fail. num_charmaps The number of charmaps in the face. charmaps An array of the charmaps of the face. generic A field reserved for client uses. See the FT_Generic type description. bbox The font bounding box. Coordinates are expressed in font units (see units_per_EM ). The box is large enough to contain any glyph from the font. Thus, bbox.yMax can be seen as the maximum ascender , and bbox.yMin as the minimum descender . Only relevant for scalable formats. Note that the bounding box might be off by (at least) one pixel for hinted fonts. See FT_Size_Metrics for further discussion. units_per_EM The number of font units per EM square for this face. This is typically 2048 for TrueType fonts, and 1000 for Type 1 fonts. Only relevant for scalable formats. ascender The typographic ascender of the face, expressed in font units. For font formats not having this information, it is set to bbox.yMax . Only relevant for scalable formats. descender The typographic descender of the face, expressed in font units. For font formats not having this information, it is set to bbox.yMin . Note that this field is negative for values below the baseline. Only relevant for scalable formats. height This value is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats. If you want the global glyph height, use ascender - descender . max_advance_width The maximum advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats. max_advance_height The maximum advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to height for fonts that do not provide vertical metrics. Only relevant for scalable formats. underline_position The position, in font units, of the underline line for this face. It is the center of the underlining stem. Only relevant for scalable formats. underline_thickness The thickness, in font units, of the underline for this face. Only relevant for scalable formats. glyph The face's associated glyph slot(s). size The current active size for this face. charmap The current active charmap for this face. note Fields may be changed after a call to FT_Attach_File or FT_Attach_Stream . For an OpenType variation font, the values of the following fields can change after a call to FT_Set_Var_Design_Coordinates (and friends) if the font contains an MVAR table: ascender , descender , height , underline_position , and underline_thickness . Especially for TrueType fonts see also the documentation for FT_Size_Metrics . FT_HAS_HORIZONTAL Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_HORIZONTAL ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_HORIZONTAL ) 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. FT_HAS_VERTICAL Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_VERTICAL ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_VERTICAL ) A macro that returns true whenever a face object contains real vertical metrics (and not only synthesized ones). FT_HAS_KERNING Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_KERNING ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_KERNING ) A macro that returns true whenever a face object contains kerning data that can be accessed with FT_Get_Kerning . FT_HAS_FIXED_SIZES Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_FIXED_SIZES ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_FIXED_SIZES ) A macro that returns true whenever a face object contains some embedded bitmaps. See the available_sizes field of the FT_FaceRec structure. FT_HAS_GLYPH_NAMES Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_GLYPH_NAMES ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_GLYPH_NAMES ) A macro that returns true whenever a face object contains some glyph names that can be accessed through FT_Get_Glyph_Name . FT_HAS_COLOR Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_COLOR ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_COLOR ) A macro that returns true whenever a face object contains tables for color glyphs. since 2.5.1 FT_HAS_MULTIPLE_MASTERS Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_MULTIPLE_MASTERS ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_MULTIPLE_MASTERS ) 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. FT_IS_SFNT Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_SFNT ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_SFNT ) 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. FT_IS_SCALABLE Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_SCALABLE ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_SCALABLE ) 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). FT_IS_FIXED_WIDTH Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_FIXED_WIDTH ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_FIXED_WIDTH ) A macro that returns true whenever a face object contains a font face that contains fixed-width (or monospace , fixed-pitch , etc.) glyphs. FT_IS_CID_KEYED Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_CID_KEYED ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_CID_KEYED ) 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. FT_IS_TRICKY Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_TRICKY ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_TRICKY ) A macro that returns true whenever a face represents a tricky font. See the discussion of FT_FACE_FLAG_TRICKY for more details. FT_IS_NAMED_INSTANCE Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_NAMED_INSTANCE ( face ) \\ ( (face)- face_index 0x7FFF0000L ) A macro that returns true whenever a face object is a named instance of a GX or OpenType variation font. [Since 2.9] Changing the design coordinates with FT_Set_Var_Design_Coordinates or FT_Set_Var_Blend_Coordinates does not influence the return value of this macro (only FT_Set_Named_Instance does that). since 2.7 FT_IS_VARIATION Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_VARIATION ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_VARIATION ) A macro that returns true whenever a face object has been altered by FT_Set_MM_Design_Coordinates , FT_Set_Var_Design_Coordinates , or FT_Set_Var_Blend_Coordinates . since 2.9 FT_SizeRec Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; FreeType root size class structure. A size object models a face object at a given size. fields face Handle to the parent face object. generic A typeless pointer, unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each size object. metrics Metrics for this size object. This field is read-only. FT_Size_Metrics Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; The size metrics structure gives the metrics of a size object. fields x_ppem The width of the scaled EM square in pixels, hence the term ppem (pixels per EM). It is also referred to as nominal width . y_ppem The height of the scaled EM square in pixels, hence the term ppem (pixels per EM). It is also referred to as nominal height . x_scale A 16.16 fractional scaling value to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats. y_scale A 16.16 fractional scaling value to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats. ascender The ascender in 26.6 fractional pixels, rounded up to an integer value. See FT_FaceRec for the details. descender The descender in 26.6 fractional pixels, rounded down to an integer value. See FT_FaceRec for the details. height The height in 26.6 fractional pixels, rounded to an integer value. See FT_FaceRec for the details. max_advance The maximum advance width in 26.6 fractional pixels, rounded to an integer value. See FT_FaceRec for the details. note The scaling values, if relevant, are determined first during a size changing operation. The remaining fields are then set by the driver. For scalable formats, they are usually set to scaled values of the corresponding fields in FT_FaceRec . Some values like ascender or descender are rounded for historical reasons; more precise values (for outline fonts) can be derived by scaling the corresponding FT_FaceRec values manually, with code similar to the following. scaled_ascender = FT_MulFix( face- ascender, size_metrics- y_scale ); Note that due to glyph hinting and the selected rendering mode these values are usually not exact; consequently, they must be treated as unreliable with an error margin of at least one pixel! Indeed, the only way to get the exact metrics is to render all glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations. The FT_Size_Metrics structure is valid for bitmap fonts also. TrueType fonts with native bytecode hinting All applications that handle TrueType fonts with native hinting must be aware that TTFs expect different rounding of vertical font dimensions. The application has to cater for this, especially if it wants to rely on a TTF's vertical data (for example, to properly align box characters vertically). Only the application knows in advance that it is going to use native hinting for TTFs! FreeType, on the other hand, selects the hinting mode not at the time of creating an FT_Size object but much later, namely while calling FT_Load_Glyph . Here is some pseudo code that illustrates a possible solution. font_format = FT_Get_Font_Format( face ); if ( !strcmp( font_format, TrueType ) do_native_bytecode_hinting ) { ascender = ROUND( FT_MulFix( face- ascender, size_metrics- y_scale ) ); descender = ROUND( FT_MulFix( face- descender, size_metrics- y_scale ) ); } else { ascender = size_metrics- ascender; descender = size_metrics- descender; } height = size_metrics- height; max_advance = size_metrics- max_advance; FT_GlyphSlotRec Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_GlyphSlotRec_ { FT_Library library; FT_Face face; FT_GlyphSlot next; FT_UInt glyph_index; /* new in 2.10; was reserved previously */ 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 ; 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. glyph_index [Since 2.10] The glyph index passed as an argument to FT_Load_Glyph while initializing the glyph slot. generic A typeless pointer unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object. metrics The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the FT_Load_Glyph API function) and can be expressed either in 26.6 fractional pixels or font units. Note that even when the glyph image is transformed, the metrics are not. linearHoriAdvance The advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless FT_LOAD_LINEAR_DESIGN is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs. linearVertAdvance The advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless FT_LOAD_LINEAR_DESIGN is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs. advance This shorthand is, depending on FT_LOAD_IGNORE_TRANSFORM , the transformed (hinted) advance width for the glyph, in 26.6 fractional pixel format. As specified with FT_LOAD_VERTICAL_LAYOUT , it uses either the horiAdvance or the vertAdvance value of metrics field. format This field indicates the format of the image contained in the glyph slot. Typically FT_GLYPH_FORMAT_BITMAP , FT_GLYPH_FORMAT_OUTLINE , or FT_GLYPH_FORMAT_COMPOSITE , but other values are possible. bitmap This field is used as a bitmap descriptor. Note that the address and content of the bitmap buffer can change between calls of FT_Load_Glyph and a few other functions. bitmap_left The bitmap's left bearing expressed in integer pixels. bitmap_top The bitmap's top bearing expressed in integer pixels. This is the distance from the baseline to the top-most glyph scanline, upwards y coordinates being positive . outline The outline descriptor for the current glyph image if its format is FT_GLYPH_FORMAT_OUTLINE . Once a glyph is loaded, outline can be transformed, distorted, emboldened, etc. However, it must not be freed. [Since 2.10.1] If FT_LOAD_NO_SCALE is set, outline coordinates of OpenType variation fonts for a selected instance are internally handled as 26.6 fractional font units but returned as (rounded) integers, as expected. To get unrounded font units, don't use FT_LOAD_NO_SCALE but load the glyph with FT_LOAD_NO_HINTING and scale it, using the font's units_per_EM value as the ppem. num_subglyphs The number of subglyphs in a composite glyph. This field is only valid for the composite glyph format that should normally only be loaded with the FT_LOAD_NO_RECURSE flag. subglyphs An array of subglyph descriptors for composite glyphs. There are num_subglyphs elements in there. Currently internal to FreeType. control_data Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data; it is currently internal to FreeType. control_len This is the length in bytes of the control data. Currently internal to FreeType. other Reserved. lsb_delta The difference between hinted and unhinted left side bearing while auto-hinting is active. Zero otherwise. rsb_delta The difference between hinted and unhinted right side bearing while auto-hinting is active. Zero otherwise. note If FT_Load_Glyph is called with default flags (see FT_LOAD_DEFAULT ) the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type 1 formats). [Since 2.9] The prospective bitmap metrics are calculated according to FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even if FT_LOAD_RENDER is not set. This image can later be converted into a bitmap by calling FT_Render_Glyph . This function searches the current renderer for the native image's format, then invokes it. The renderer is in charge of transforming the native image through the slot's face transformation fields, then converting it into a bitmap that is returned in slot- bitmap . Note that slot- bitmap_left and slot- bitmap_top are also used to specify the position of the bitmap relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, slot- format is also changed to FT_GLYPH_FORMAT_BITMAP . Here is a small pseudo code fragment that shows how to use lsb_delta and rsb_delta to do fractional positioning of glyphs: FT_GlyphSlot slot = face- glyph; FT_Pos origin_x = 0; for all glyphs do load glyph with `FT_Load_Glyph FT_Outline_Translate( slot- outline, origin_x 63, 0 ); save glyph image, or render glyph, or ... compute kern between current and next glyph and add it to `origin_x origin_x += slot- advance.x; origin_x += slot- lsb_delta - slot- rsb_delta; endfor Here is another small pseudo code fragment that shows how to use lsb_delta and rsb_delta to improve integer positioning of glyphs: FT_GlyphSlot slot = face- glyph; FT_Pos origin_x = 0; FT_Pos prev_rsb_delta = 0; for all glyphs do compute kern between current and previous glyph and add it to `origin_x load glyph with `FT_Load_Glyph if ( prev_rsb_delta - slot- lsb_delta 32 ) origin_x -= 64; else if ( prev_rsb_delta - slot- lsb_delta -31 ) origin_x += 64; prev_rsb_delta = slot- rsb_delta; save glyph image, or render glyph, or ... origin_x += slot- advance.x; endfor If you use strong auto-hinting, you must apply these delta values! Otherwise you will experience far too large inter-glyph spacing at small rendering sizes in most cases. Note that it doesn't harm to use the above code for other hinting modes also, since the delta values are zero then. FT_Glyph_Metrics Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag FT_LOAD_NO_SCALE has been used while loading the glyph, values are expressed in font units instead. fields width The glyph's width. height The glyph's height. horiBearingX Left side bearing for horizontal layout. horiBearingY Top side bearing for horizontal layout. horiAdvance Advance width for horizontal layout. vertBearingX Left side bearing for vertical layout. vertBearingY Top side bearing for vertical layout. Larger positive values mean further below the vertical glyph origin. vertAdvance Advance height for vertical layout. Positive values mean the glyph has a positive advance downward. note If not disabled with FT_LOAD_NO_HINTING , the values represent dimensions of the hinted glyph (in case hinting is applicable). Stroking a glyph with an outside border does not increase horiAdvance or vertAdvance ; you have to manually adjust these values to account for the added width and height. FreeType doesn't use the VORG table data for CFF fonts because it doesn't have an interface to quickly retrieve the glyph height. The y coordinate of the vertical origin can be simply computed as vertBearingY + height after loading a glyph. FT_SubGlyph Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_SubGlyphRec_* FT_SubGlyph ; 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 . FT_Bitmap_Size Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; This structure models the metrics of a bitmap strike (i.e., a set of glyphs for a given point size and resolution) in a bitmap font. It is used for the available_sizes field of FT_Face . fields height The vertical distance, in pixels, between two consecutive baselines. It is always positive. width The average width, in pixels, of all glyphs in the strike. size The nominal size of the strike in 26.6 fractional points. This field is not very useful. x_ppem The horizontal ppem (nominal width) in 26.6 fractional pixels. y_ppem The vertical ppem (nominal height) in 26.6 fractional pixels. note Windows FNT: The nominal size given in a FNT font is not reliable. If the driver finds it incorrect, it sets size to some calculated values, and x_ppem and y_ppem to the pixel width and height given in the font, respectively. TrueType embedded bitmaps: size , width , and height values are not contained in the bitmap strike itself. They are computed from the global font parameters. FT_Init_FreeType Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Init_FreeType ( FT_Library *alibrary ); Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time. output alibrary A handle to a new library object. return FreeType error code. 0 means success. note In case you want to provide your own memory allocating routines, use FT_New_Library instead, followed by a call to FT_Add_Default_Modules (or a series of calls to FT_Add_Module ) and FT_Set_Default_Properties . See the documentation of FT_Library and FT_Face for multi-threading issues. If you need reference-counting (cf. FT_Reference_Library ), use FT_New_Library and FT_Done_Library . If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is set, this function reads the FREETYPE_PROPERTIES environment variable to control driver properties. See section Driver properties for more. FT_Done_FreeType Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Done_FreeType ( FT_Library library ); 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_New_Face Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_New_Face ( FT_Library library, const char * filepathname, FT_Long face_index, FT_Face *aface ); Call FT_Open_Face to open a font by its pathname. inout library A handle to the library resource. input pathname A path to the font file. face_index See FT_Open_Face for a detailed description of this parameter. output aface A handle to a new face object. If face_index is greater than or equal to zero, it must be non- NULL . return FreeType error code. 0 means success. note Use FT_Done_Face to destroy the created FT_Face object (along with its slot and sizes). FT_Done_Face Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Done_Face ( FT_Face face ); Discard a given face object, as well as all of its child slots and sizes. input face A handle to a target face object. return FreeType error code. 0 means success. note See the discussion of reference counters in the description of FT_Reference_Face . FT_Reference_Face Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Reference_Face ( FT_Face face ); A counter gets initialized to 1 at the time an FT_Face structure is created. This function increments the counter. FT_Done_Face then only destroys a face if the counter is 1, otherwise it simply decrements the counter. This function helps in managing life-cycles of structures that reference FT_Face objects. input face A handle to a target face object. return FreeType error code. 0 means success. since 2.4.2 FT_New_Memory_Face Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Call FT_Open_Face to open a font that has been loaded into memory. inout library A handle to the library resource. input file_base A pointer to the beginning of the font data. file_size The size of the memory chunk used by the font data. face_index See FT_Open_Face for a detailed description of this parameter. output aface A handle to a new face object. If face_index is greater than or equal to zero, it must be non- NULL . return FreeType error code. 0 means success. note You must not deallocate the memory before calling FT_Done_Face . FT_Face_Properties Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Face_Properties ( FT_Face face, FT_UInt num_properties, FT_Parameter * properties ); Set or override certain (library or module-wide) properties on a face-by-face basis. Useful for finer-grained control and avoiding locks on shared structures (threads can modify their own faces as they see fit). Contrary to FT_Property_Set , this function uses FT_Parameter so that you can pass multiple properties to the target face in one call. Note that only a subset of the available properties can be controlled. FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the property no-stem-darkening provided by the autofit , cff , type1 , and t1cid modules; see no-stem-darkening ). FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding to function FT_Library_SetLcdFilterWeights ). FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type 1, and CID random operator, corresponding to the random-seed property provided by the cff , type1 , and t1cid modules; see random-seed ). Pass NULL as data in FT_Parameter for a given tag to reset the option and use the library or module default again. input face A handle to the source face object. num_properties The number of properties that follow. properties A handle to an FT_Parameter array with num_properties elements. return FreeType error code. 0 means success. example Here is an example that sets three properties. You must define FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples work. FT_Parameter property1; FT_Bool darken_stems = 1; FT_Parameter property2; FT_LcdFiveTapFilter custom_weight = { 0x11, 0x44, 0x56, 0x44, 0x11 }; FT_Parameter property3; FT_Int32 random_seed = 314159265; FT_Parameter properties[3] = { property1, property2, property3 }; property1.tag = FT_PARAM_TAG_STEM_DARKENING; property1.data = darken_stems; property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; property2.data = custom_weight; property3.tag = FT_PARAM_TAG_RANDOM_SEED; property3.data = random_seed; FT_Face_Properties( face, 3, properties ); The next example resets a single property to its default value. FT_Parameter property; property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; property.data = NULL; FT_Face_Properties( face, 1, property ); since 2.8 FT_Open_Face Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Open_Face ( FT_Library library, const FT_Open_Args * args, FT_Long face_index, FT_Face *aface ); Create a face object from a given resource described by FT_Open_Args . inout library A handle to the library resource. input args A pointer to an FT_Open_Args structure that must be filled by the caller. face_index This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value 0). Set it to 0 if there is only one face in the font file. [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation fonts only, specifying the named instance index for the current face index (starting with value 1; value 0 makes FreeType ignore named instances). For non-variation fonts, bits 16-30 are ignored. Assuming that you want to access the third named instance in face 4, face_index should be set to 0x00030004. If you want to access face 4 without variation handling, simply set face_index to value 4. FT_Open_Face and its siblings can be used to quickly check whether the font format of a given font resource is supported by FreeType. In general, if the face_index argument is negative, the function's return value is 0 if the font format is recognized, or non-zero otherwise. The function allocates a more or less empty face handle in *aface (if aface isn't NULL ); the only two useful fields in this special case are face- num_faces and face- style_flags . For any negative value of face_index , face- num_faces gives the number of faces within the font file. For the negative value -(N+1) (with N a non-negative 16-bit value), bits 16-30 in face- style_flags give the number of named instances in face N if we have a variation font (or zero otherwise). After examination, the returned FT_Face structure should be deallocated with a call to FT_Done_Face . output aface A handle to a new face object. If face_index is greater than or equal to zero, it must be non- NULL . return FreeType error code. 0 means success. note Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object that can be accessed directly through face- glyph . Each new face object created with this function also owns a default FT_Size object, accessible as face- size . One FT_Library instance can have multiple face objects, this is, FT_Open_Face and its siblings can be called multiple times using the same library argument. See the discussion of reference counters in the description of FT_Reference_Face . example To loop over all faces, use code similar to the following snippet (omitting the error handling). ... FT_Face face; FT_Long i, num_faces; error = FT_Open_Face( library, args, -1, face ); if ( error ) { ... } num_faces = face- num_faces; FT_Done_Face( face ); for ( i = 0; i num_faces; i++ ) { ... error = FT_Open_Face( library, args, i, face ); ... FT_Done_Face( face ); ... } To loop over all valid values for face_index , use something similar to the following snippet, again without error handling. The code accesses all faces immediately (thus only a single call of FT_Open_Face within the do-loop), with and without named instances. ... FT_Face face; FT_Long num_faces = 0; FT_Long num_instances = 0; FT_Long face_idx = 0; FT_Long instance_idx = 0; do { FT_Long id = ( instance_idx 16 ) + face_idx; error = FT_Open_Face( library, args, id, face ); if ( error ) { ... } num_faces = face- num_faces; num_instances = face- style_flags 16; ... FT_Done_Face( face ); if ( instance_idx num_instances ) instance_idx++; else { face_idx++; instance_idx = 0; } } while ( face_idx num_faces ) FT_Open_Args Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions FT_Open_Face and FT_Attach_Stream . fields flags A set of bit flags indicating how to use the structure. memory_base The first byte of the file in memory. memory_size The size in bytes of the file in memory. pathname A pointer to an 8-bit file pathname. stream A handle to a source stream object. driver This field is exclusively used by FT_Open_Face ; it simply specifies the font driver to use for opening the face. If set to NULL , FreeType tries to load the face with each one of the drivers in its list. num_params The number of extra parameters. params Extra parameters passed to the font driver when opening a new face. note The stream type is determined by the contents of flags that are tested in the following order by FT_Open_Face : If the FT_OPEN_MEMORY bit is set, assume that this is a memory file of memory_size bytes, located at memory_address . The data are not copied, and the client is responsible for releasing and destroying them after the corresponding call to FT_Done_Face . Otherwise, if the FT_OPEN_STREAM bit is set, assume that a custom input stream stream is used. Otherwise, if the FT_OPEN_PATHNAME bit is set, assume that this is a normal file and use pathname to open it. If the FT_OPEN_DRIVER bit is set, FT_Open_Face only tries to open the file with the driver whose handler is in driver . If the FT_OPEN_PARAMS bit is set, the parameters given by num_params and params is used. They are ignored otherwise. Ideally, both the pathname and params fields should be tagged as const ; this is missing for API backward compatibility. In other words, applications should treat them as read-only. FT_Parameter Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Parameter_ { FT_ULong tag; FT_Pointer data; } FT_Parameter ; A simple structure to pass more or less generic parameters to FT_Open_Face and FT_Face_Properties . fields tag A four-byte identification tag. data A pointer to the parameter data. note The ID and function of parameters are driver-specific. See section Parameter Tags for more information. FT_Attach_File Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Attach_File ( FT_Face face, const char * filepathname ); Call FT_Attach_Stream to attach a file. inout face The target face object. input filepathname The pathname. return FreeType error code. 0 means success. FT_Attach_Stream Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Attach_Stream ( FT_Face face, FT_Open_Args * parameters ); Attach data to a face object. Normally, this is used to read additional information for the face object. For example, you can attach an AFM file that comes with a Type 1 font to get the kerning values and other metrics. inout face The target face object. input parameters A pointer to FT_Open_Args that must be filled by the caller. return FreeType error code. 0 means success. note The meaning of the attach (i.e., what really happens when the new file is read) is not fixed by FreeType itself. It really depends on the font format (and thus the font driver). Client applications are expected to know what they are doing when invoking this function. Most drivers simply do not implement file or stream attachments. FT_Set_Char_Size Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Call FT_Request_Size to request the nominal size (in points). inout face A handle to a target face object. input char_width The nominal width, in 26.6 fractional points. char_height The nominal height, in 26.6 fractional points. horz_resolution The horizontal resolution in dpi. vert_resolution The vertical resolution in dpi. return FreeType error code. 0 means success. note While this function allows fractional points as input values, the resulting ppem value for the given resolution is always rounded to the nearest integer. If either the character width or height is zero, it is set equal to the other value. If either the horizontal or vertical resolution is zero, it is set equal to the other value. A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are set to 72dpi. Don't use this function if you are using the FreeType cache API. FT_Set_Pixel_Sizes Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Set_Pixel_Sizes ( FT_Face face, FT_UInt pixel_width, FT_UInt pixel_height ); Call FT_Request_Size to request the nominal size (in pixels). inout face A handle to the target face object. input pixel_width The nominal width, in pixels. pixel_height The nominal height, in pixels. return FreeType error code. 0 means success. note You should not rely on the resulting glyphs matching or being constrained to this pixel size. Refer to FT_Request_Size to understand how requested sizes relate to actual sizes. Don't use this function if you are using the FreeType cache API. FT_Request_Size Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Request_Size ( FT_Face face, FT_Size_Request req ); Resize the scale of the active FT_Size object in a face. inout face A handle to a target face object. input req A pointer to a FT_Size_RequestRec . return FreeType error code. 0 means success. note Although drivers may select the bitmap strike matching the request, you should not rely on this if you intend to select a particular bitmap strike. Use FT_Select_Size instead in that case. The relation between the requested size and the resulting glyph size is dependent entirely on how the size is defined in the source face. The font designer chooses the final size of each glyph relative to this size. For more information refer to https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html . Contrary to FT_Set_Char_Size , this function doesn't have special code to normalize zero-valued widths, heights, or resolutions (which lead to errors in most cases). Don't use this function if you are using the FreeType cache API. FT_Select_Size Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Select_Size ( FT_Face face, FT_Int strike_index ); Select a bitmap strike. To be more precise, this function sets the scaling factors of the active FT_Size object in a face so that bitmaps from this particular strike are taken by FT_Load_Glyph and friends. inout face A handle to a target face object. input strike_index The index of the bitmap strike in the available_sizes field of FT_FaceRec structure. return FreeType error code. 0 means success. note For bitmaps embedded in outline fonts it is common that only a subset of the available glyphs at a given ppem value is available. FreeType silently uses outlines if there is no bitmap for a given glyph index. For GX and OpenType variation fonts, a bitmap strike makes sense only if the default instance is active (this is, no glyph variation takes place); otherwise, FreeType simply ignores bitmap strikes. The same is true for all named instances that are different from the default instance. Don't use this function if you are using the FreeType cache API. FT_Size_Request_Type Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; An enumeration type that lists the supported size request types, i.e., what input size (in font units) maps to the requested output size (in pixels, as computed from the arguments of FT_Size_Request ). values FT_SIZE_REQUEST_TYPE_NOMINAL The nominal size. The units_per_EM field of FT_FaceRec is used to determine both scaling values. This is the standard scaling found in most applications. In particular, use this size request type for TrueType fonts if they provide optical scaling or something similar. Note, however, that units_per_EM is a rather abstract value which bears no relation to the actual size of the glyphs in a font. FT_SIZE_REQUEST_TYPE_REAL_DIM The real dimension. The sum of the ascender and (minus of) the descender fields of FT_FaceRec is used to determine both scaling values. FT_SIZE_REQUEST_TYPE_BBOX The font bounding box. The width and height of the bbox field of FT_FaceRec are used to determine the horizontal and vertical scaling value, respectively. FT_SIZE_REQUEST_TYPE_CELL The max_advance_width field of FT_FaceRec is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling values are set to the smaller one. This type is useful if you want to specify the font size for, say, a window of a given dimension and 80x24 cells. FT_SIZE_REQUEST_TYPE_SCALES Specify the scaling values directly. note The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver. See the note section of FT_Size_Metrics if you wonder how size requesting relates to scaling values. FT_Size_RequestRec Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to model a size request. fields type See FT_Size_Request_Type . width The desired width, given as a 26.6 fractional point value (with 72pt = 1in). height The desired height, given as a 26.6 fractional point value (with 72pt = 1in). horiResolution The horizontal resolution (dpi, i.e., pixels per inch). If set to zero, width is treated as a 26.6 fractional pixel value, which gets internally rounded to an integer. vertResolution The vertical resolution (dpi, i.e., pixels per inch). If set to zero, height is treated as a 26.6 fractional pixel value, which gets internally rounded to an integer. note If width is zero, the horizontal scaling value is set equal to the vertical scaling value, and vice versa. If type is FT_SIZE_REQUEST_TYPE_SCALES , width and height are interpreted directly as 16.16 fractional scaling values, without any further modification, and both horiResolution and vertResolution are ignored. FT_Size_Request Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Size_RequestRec_ * FT_Size_Request ; A handle to a size request structure. FT_Set_Transform Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Set_Transform ( FT_Face face, FT_Matrix * matrix, FT_Vector * delta ); Set the transformation that is applied to glyph images when they are loaded into a glyph slot through FT_Load_Glyph . inout face A handle to the source face object. input matrix A pointer to the transformation's 2x2 matrix. Use NULL for the identity matrix. delta A pointer to the translation vector. Use NULL for the null vector. note The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to FT_Set_Char_Size or FT_Set_Pixel_Sizes . Note that this also transforms the face.glyph.advance field, but not the values in face.glyph.metrics . FT_Load_Glyph Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Load_Glyph ( FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags ); Load a glyph into the glyph slot of a face object. inout face A handle to the target face object where the glyph is loaded. input glyph_index The index of the glyph in the font file. For CID-keyed fonts (either in PS or in CFF format) this argument specifies the CID value. load_flags A flag indicating what to load for this glyph. The FT_LOAD_XXX constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc). return FreeType error code. 0 means success. note The loaded glyph may be transformed. See FT_Set_Transform for the details. For subsetted CID-keyed fonts, FT_Err_Invalid_Argument is returned for invalid CID values (this is, for CID values that don't have a corresponding glyph in the font). See the discussion of the FT_FACE_FLAG_CID_KEYED flag for more details. If you receive FT_Err_Glyph_Too_Big , try getting the glyph outline at EM size, then scale it manually and fill it as a graphics operation. FT_Get_Char_Index Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Get_Char_Index ( FT_Face face, FT_ULong charcode ); Return the glyph index of a given character code. This function uses the currently selected charmap to do the mapping. input face A handle to the source face object. charcode The character code. return The glyph index. 0 means undefined character code . note If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the missing glyph . If the first glyph is not named .notdef , then for Type 1 and Type 42 fonts, .notdef will be moved into the glyph ID 0 position, and whatever was there will be moved to the position .notdef had. For Type 1 fonts, if there is no .notdef glyph at all, then one will be created at index 0 and whatever was there will be moved to the last index -- Type 42 fonts are considered invalid under this condition. FT_Get_First_Char Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_ULong ) FT_Get_First_Char ( FT_Face face, FT_UInt *agindex ); Return the first character code in the current charmap of a given face, together with its corresponding glyph index. input face A handle to the source face object. output agindex Glyph index of first character code. 0 if charmap is empty. return The charmap's first character code. note You should use this function together with FT_Get_Next_Char to parse all character codes available in a given charmap. The code should look like this: FT_ULong charcode; FT_UInt gindex; charcode = FT_Get_First_Char( face, gindex ); while ( gindex != 0 ) { ... do something with (charcode,gindex) pair ... charcode = FT_Get_Next_Char( face, charcode, gindex ); } Be aware that character codes can have values up to 0xFFFFFFFF; this might happen for non-Unicode or malformed cmaps. However, even with regular Unicode encoding, so-called last resort fonts (using SFNT cmap format 13, see function FT_Get_CMap_Format ) normally have entries for all Unicode characters up to 0x1FFFFF, which can cause a lot of iterations. Note that *agindex is set to 0 if the charmap is empty. The result itself can be 0 in two cases: if the charmap is empty or if the value 0 is the first valid character code. FT_Get_Next_Char Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_ULong ) FT_Get_Next_Char ( FT_Face face, FT_ULong char_code, FT_UInt *agindex ); Return the next character code in the current charmap of a given face following the value char_code , as well as the corresponding glyph index. input face A handle to the source face object. char_code The starting character code. output agindex Glyph index of next character code. 0 if charmap is empty. return The charmap's next character code. note You should use this function with FT_Get_First_Char to walk over all character codes available in a given charmap. See the note for that function for a simple code example. Note that *agindex is set to 0 when there are no more codes in the charmap. FT_Get_Name_Index Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Get_Name_Index ( FT_Face face, const FT_String * glyph_name ); Return the glyph index of a given glyph name. input face A handle to the source face object. glyph_name The glyph name. return The glyph index. 0 means undefined character code . FT_Load_Char Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Load_Char ( FT_Face face, FT_ULong char_code, FT_Int32 load_flags ); Load a glyph into the glyph slot of a face object, accessed by its character code. inout face A handle to a target face object where the glyph is loaded. input char_code The glyph's character code, according to the current charmap used in the face. load_flags A flag indicating what to load for this glyph. The FT_LOAD_XXX constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc). return FreeType error code. 0 means success. note This function simply calls FT_Get_Char_Index and FT_Load_Glyph . Many fonts contain glyphs that can't be loaded by this function since its glyph indices are not listed in any of the font's charmaps. If no active cmap is set up (i.e., face- charmap is zero), the call to FT_Get_Char_Index is omitted, and the function behaves identically to FT_Load_Glyph . FT_LOAD_TARGET_MODE Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_LOAD_TARGET_MODE ( x ) ( ( FT_Render_Mode )( ( (x) 16 ) 15 ) ) Return the FT_Render_Mode corresponding to a given FT_LOAD_TARGET_XXX value. FT_Render_Glyph Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Render_Glyph ( FT_GlyphSlot slot, FT_Render_Mode render_mode ); Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the relevant renderer, and invoking it. inout slot A handle to the glyph slot containing the image to convert. input render_mode The render mode used to render the glyph image into a bitmap. See FT_Render_Mode for a list of possible values. If FT_RENDER_MODE_NORMAL is used, a previous call of FT_Load_Glyph with flag FT_LOAD_COLOR makes FT_Render_Glyph provide a default blending of colored glyph layers associated with the current glyph slot (provided the font contains such layers) instead of rendering the glyph slot's outline. This is an experimental feature; see FT_LOAD_COLOR for more information. return FreeType error code. 0 means success. note To get meaningful results, font scaling values must be set with functions like FT_Set_Char_Size before calling FT_Render_Glyph . When FreeType outputs a bitmap of a glyph, it really outputs an alpha coverage map. If a pixel is completely covered by a filled-in outline, the bitmap contains 0xFF at that pixel, meaning that 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% black (or 0% bright). If a pixel is only 50% covered (value 0x80), the pixel is made 50% black (50% bright or a middle shade of grey). 0% covered means 0% black (100% bright or white). On high-DPI screens like on smartphones and tablets, the pixels are so small that their chance of being completely covered and therefore completely black are fairly good. On the low-DPI screens, however, the situation is different. The pixels are too large for most of the details of a glyph and shades of gray are the norm rather than the exception. This is relevant because all our screens have a second problem: they are not linear. 1 + 1 is not 2. Twice the value does not result in twice the brightness. When a pixel is only 50% covered, the coverage map says 50% black, and this translates to a pixel value of 128 when you use 8 bits per channel (0-255). However, this does not translate to 50% brightness for that pixel on our sRGB and gamma 2.2 screens. Due to their non-linearity, they dwell longer in the darks and only a pixel value of about 186 results in 50% brightness -- 128 ends up too dark on both bright and dark backgrounds. The net result is that dark text looks burnt-out, pixely and blotchy on bright background, bright text too frail on dark backgrounds, and colored text on colored background (for example, red on green) seems to have dark halos or dirt around it. The situation is especially ugly for diagonal stems like in w glyph shapes where the quality of FreeType's anti-aliasing depends on the correct display of grays. On high-DPI screens where smaller, fully black pixels reign supreme, this doesn't matter, but on our low-DPI screens with all the gray shades, it does. 0% and 100% brightness are the same things in linear and non-linear space, just all the shades in-between aren't. The blending function for placing text over a background is dst = alpha * src + (1 - alpha) * dst , which is known as the OVER operator. To correctly composite an antialiased pixel of a glyph onto a surface, take the foreground and background colors (e.g., in sRGB space) and apply gamma to get them in a linear space, use OVER to blend the two linear colors using the glyph pixel as the alpha value (remember, the glyph bitmap is an alpha coverage bitmap), and apply inverse gamma to the blended pixel and write it back to the image. Internal testing at Adobe found that a target inverse gamma of 1.8 for step 3 gives good results across a wide range of displays with an sRGB gamma curve or a similar one. This process can cost performance. There is an approximation that does not need to know about the background color; see https://bel.fi/alankila/lcd/ and https://bel.fi/alankila/lcd/alpcor.html for details. ATTENTION : Linear blending is even more important when dealing with subpixel-rendered glyphs to prevent color-fringing! A subpixel-rendered glyph must first be filtered with a filter that gives equal weight to the three color primaries and does not exceed a sum of 0x100, see section Subpixel Rendering . Then the only difference to gray linear blending is that subpixel-rendered linear blending is done 3 times per pixel: red foreground subpixel to red background subpixel and so on for green and blue. FT_Render_Mode Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Render_Mode_ { FT_RENDER_MODE_NORMAL = 0, FT_RENDER_MODE_LIGHT , FT_RENDER_MODE_MONO , FT_RENDER_MODE_LCD , FT_RENDER_MODE_LCD_V , FT_RENDER_MODE_MAX } FT_Render_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Render_Mode ` values instead */ # define ft_render_mode_normal FT_RENDER_MODE_NORMAL # define ft_render_mode_mono FT_RENDER_MODE_MONO Render modes supported by FreeType 2. Each mode corresponds to a specific type of scanline conversion performed on the outline. For bitmap fonts and embedded bitmaps the bitmap- pixel_mode field in the FT_GlyphSlotRec structure gives the format of the returned bitmap. All modes except FT_RENDER_MODE_MONO use 256 levels of opacity, indicating pixel coverage. Use linear alpha blending and gamma correction to correctly render non-monochrome glyph bitmaps onto a surface; see FT_Render_Glyph . values FT_RENDER_MODE_NORMAL Default render mode; it corresponds to 8-bit anti-aliased bitmaps. FT_RENDER_MODE_LIGHT This is equivalent to FT_RENDER_MODE_NORMAL . It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. See FT_LOAD_TARGET_XXX for details. FT_RENDER_MODE_MONO This mode corresponds to 1-bit bitmaps (with 2 levels of opacity). FT_RENDER_MODE_LCD This mode corresponds to horizontal RGB and BGR subpixel 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 subpixel 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 Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your ftoption.h , which enables patented ClearType-style rendering, the LCD-optimized glyph bitmaps should be filtered to reduce color fringes inherent to this technology. You can either set up LCD filtering with FT_Library_SetLcdFilter or FT_Face_Properties , or do the filtering yourself. The default FreeType LCD rendering technology does not require filtering. The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel mode like FT_PIXEL_MODE_MONO . You can use FT_Bitmap_Convert to transform them into 8-bit pixmaps. FT_Get_Kerning Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Return the kerning vector between two glyphs of the same face. input face A handle to a source face object. left_glyph The index of the left glyph in the kern pair. right_glyph The index of the right glyph in the kern pair. kern_mode See FT_Kerning_Mode for more information. Determines the scale and dimension of the returned kerning vector. output akerning The kerning vector. This is either in font units, fractional pixels (26.6 format), or pixels for scalable formats, and in pixels for fixed-sizes formats. return FreeType error code. 0 means success. note Only horizontal layouts (left-to-right right-to-left) are supported by this method. Other layouts, or more sophisticated kernings, are out of the scope of this API function -- they can be implemented through format-specific interfaces. Kerning for OpenType fonts implemented in a GPOS table is not supported; use FT_HAS_KERNING to find out whether a font has data that can be extracted with FT_Get_Kerning . FT_Kerning_Mode Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Kerning_Mode_ { FT_KERNING_DEFAULT = 0, FT_KERNING_UNFITTED , FT_KERNING_UNSCALED } FT_Kerning_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Kerning_Mode ` values instead */ # define ft_kerning_default FT_KERNING_DEFAULT # define ft_kerning_unfitted FT_KERNING_UNFITTED # define ft_kerning_unscaled FT_KERNING_UNSCALED An enumeration to specify the format of kerning values returned by FT_Get_Kerning . values FT_KERNING_DEFAULT Return grid-fitted kerning distances in 26.6 fractional pixels. FT_KERNING_UNFITTED Return un-grid-fitted kerning distances in 26.6 fractional pixels. FT_KERNING_UNSCALED Return the kerning vector in original font units. note FT_KERNING_DEFAULT returns full pixel values; it also makes FreeType heuristically scale down kerning distances at small ppem values so that they don't become too big. Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current horizontal scaling factor (as set e.g. with FT_Set_Char_Size ) to convert font units to pixels. FT_Get_Track_Kerning Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Get_Track_Kerning ( FT_Face face, FT_Fixed point_size, FT_Int degree, FT_Fixed * akerning ); Return the track kerning for a given face object at a given size. input face A handle to a source face object. point_size The point size in 16.16 fractional points. degree The degree of tightness. Increasingly negative values represent tighter track kerning, while increasingly positive values represent looser track kerning. Value zero means no track kerning. output akerning The kerning in 16.16 fractional points, to be uniformly applied between all glyphs. return FreeType error code. 0 means success. note Currently, only the Type 1 font driver supports track kerning, using data from AFM files (if attached with FT_Attach_File or FT_Attach_Stream ). Only very few AFM files come with track kerning data; please refer to Adobe's AFM specification for more details. FT_Get_Glyph_Name Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Get_Glyph_Name ( FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max ); Retrieve the ASCII name of a given glyph in a face. This only works for those faces where FT_HAS_GLYPH_NAMES (face) returns 1. input face A handle to a source face object. glyph_index The glyph index. buffer_max The maximum number of bytes available in the buffer. output buffer A pointer to a target buffer where the name is copied to. return FreeType error code. 0 means success. note An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases of failure, the first byte of buffer is set to 0 to indicate an empty name. The glyph name is truncated to fit within the buffer if it is too long. The returned string is always zero-terminated. Be aware that FreeType reorders glyph indices internally so that glyph index 0 always corresponds to the missing glyph (called .notdef ). This function always returns an error if the config macro FT_CONFIG_OPTION_NO_GLYPH_NAMES is not defined in ftoption.h . FT_Get_Postscript_Name Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( const char * ) FT_Get_Postscript_Name ( FT_Face face ); Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript, TrueType, and OpenType fonts. input face A handle to the source face object. return A pointer to the face's PostScript name. NULL if unavailable. note The returned pointer is owned by the face and is destroyed with it. For variation fonts, this string changes if you select a different instance, and you have to call FT_Get_PostScript_Name again to retrieve it. FreeType follows Adobe TechNote #5902, Generating PostScript Names for Fonts Using OpenType Font Variations . https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html [Since 2.9] Special PostScript names for named instances are only returned if the named instance is set with FT_Set_Named_Instance (and the font has corresponding entries in its fvar table). If FT_IS_VARIATION returns true, the algorithmically derived PostScript name is provided, not looking up special entries for named instances. FT_CharMapRec Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_CharMapRec_ { FT_Face face; FT_Encoding encoding; FT_UShort platform_id; FT_UShort encoding_id; } FT_CharMapRec ; The base charmap structure. fields face A handle to the parent face object. encoding An FT_Encoding tag identifying the charmap. Use this with FT_Select_Charmap . platform_id An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and gets emulated for other formats. encoding_id A platform-specific encoding number. This also comes from the TrueType specification and gets emulated similarly. FT_Select_Charmap Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Select_Charmap ( FT_Face face, FT_Encoding encoding ); Select a given charmap by its encoding tag (as listed in freetype.h ). inout face A handle to the source face object. input encoding A handle to the selected encoding. return FreeType error code. 0 means success. note This function returns an error if no charmap in the face corresponds to the encoding queried here. Because many fonts contain more than a single cmap for Unicode encoding, this function has some special code to select the one that covers Unicode best ( best in the sense that a UCS-4 cmap is preferred to a UCS-2 cmap). It is thus preferable to FT_Set_Charmap in this case. FT_Set_Charmap Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Set_Charmap ( FT_Face face, FT_CharMap charmap ); Select a given charmap for character code to glyph index mapping. inout face A handle to the source face object. input charmap A handle to the selected charmap. return FreeType error code. 0 means success. note This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the face- charmaps table). It also fails if an OpenType type 14 charmap is selected (which doesn't map character codes to glyph indices at all). FT_Get_Charmap_Index Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Int ) FT_Get_Charmap_Index ( FT_CharMap charmap ); Retrieve index of a given charmap. input charmap A handle to a charmap. return The index into the array of character maps within the face to which charmap belongs. If an error occurs, -1 is returned. FT_Get_FSType_Flags Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UShort ) FT_Get_FSType_Flags ( FT_Face face ); Return the fsType flags for a font. input face A handle to the source face object. return The fsType flags, see FT_FSTYPE_XXX . note Use this function rather than directly reading the fs_type field in the PS_FontInfoRec structure, which is only guaranteed to return the correct results for Type 1 fonts. since 2.3.8 FT_Get_SubGlyph_Info Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Retrieve a description of a given subglyph. Only use it if glyph- format is FT_GLYPH_FORMAT_COMPOSITE ; an error is returned otherwise. input glyph The source glyph slot. sub_index The index of the subglyph. Must be less than glyph- num_subglyphs . output p_index The glyph index of the subglyph. p_flags The subglyph flags, see FT_SUBGLYPH_FLAG_XXX . p_arg1 The subglyph's first argument (if any). p_arg2 The subglyph's second argument (if any). p_transform The subglyph transformation (if any). return FreeType error code. 0 means success. note The values of *p_arg1 , *p_arg2 , and *p_transform must be interpreted depending on the flags returned in *p_flags . See the OpenType specification for details. https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description FT_Face_Internal Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Face_InternalRec_* FT_Face_Internal ; An opaque handle to an FT_Face_InternalRec structure that models the private data of a given FT_Face object. This structure might change between releases of FreeType 2 and is not generally available to client applications. FT_Size_Internal Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Size_InternalRec_* FT_Size_Internal ; An opaque handle to an FT_Size_InternalRec structure, used to model private data of a given FT_Size object. FT_Slot_Internal Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Slot_InternalRec_* FT_Slot_Internal ; An opaque handle to an FT_Slot_InternalRec structure, used to model private data of a given FT_GlyphSlot object. FT_FACE_FLAG_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_FACE_FLAG_SCALABLE ( 1L 0 ) # define FT_FACE_FLAG_FIXED_SIZES ( 1L 1 ) # define FT_FACE_FLAG_FIXED_WIDTH ( 1L 2 ) # define FT_FACE_FLAG_SFNT ( 1L 3 ) # define FT_FACE_FLAG_HORIZONTAL ( 1L 4 ) # define FT_FACE_FLAG_VERTICAL ( 1L 5 ) # define FT_FACE_FLAG_KERNING ( 1L 6 ) # define FT_FACE_FLAG_FAST_GLYPHS ( 1L 7 ) # define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L 8 ) # define FT_FACE_FLAG_GLYPH_NAMES ( 1L 9 ) # define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L 10 ) # define FT_FACE_FLAG_HINTER ( 1L 11 ) # define FT_FACE_FLAG_CID_KEYED ( 1L 12 ) # define FT_FACE_FLAG_TRICKY ( 1L 13 ) # define FT_FACE_FLAG_COLOR ( 1L 14 ) # define FT_FACE_FLAG_VARIATION ( 1L 15 ) A list of bit flags used in the face_flags field of the FT_FaceRec structure. They inform client applications of properties of the corresponding face. values FT_FACE_FLAG_SCALABLE The face contains outline glyphs. Note that a face can contain bitmap strikes also, i.e., a face can have both this flag and FT_FACE_FLAG_FIXED_SIZES set. FT_FACE_FLAG_FIXED_SIZES The face contains bitmap strikes. See also the num_fixed_sizes and available_sizes fields of FT_FaceRec . FT_FACE_FLAG_FIXED_WIDTH The face contains fixed-width characters (like Courier, Lucida, MonoType, etc.). FT_FACE_FLAG_SFNT The face uses the SFNT storage scheme. For now, this means TrueType and OpenType. FT_FACE_FLAG_HORIZONTAL The face contains horizontal glyph metrics. This should be set for all common formats. FT_FACE_FLAG_VERTICAL The face contains vertical glyph metrics. This is only available in some formats, not all of them. FT_FACE_FLAG_KERNING The face contains kerning information. If set, the kerning distance can be retrieved using the function FT_Get_Kerning . Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the SFNT GPOS table (as present in many OpenType fonts). FT_FACE_FLAG_FAST_GLYPHS THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. FT_FACE_FLAG_MULTIPLE_MASTERS The face contains multiple masters and is capable of interpolating between them. Supported formats are Adobe MM, TrueType GX, and OpenType variation fonts. See section Multiple Masters for API details. FT_FACE_FLAG_GLYPH_NAMES The face contains glyph names, which can be retrieved using FT_Get_Glyph_Name . Note that some TrueType fonts contain broken glyph name tables. Use the function FT_Has_PS_Glyph_Names when needed. FT_FACE_FLAG_EXTERNAL_STREAM Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when FT_Done_Face is called. Don't read or test this flag. FT_FACE_FLAG_HINTER The font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense to use data from the SFNT gasp table only if the native TrueType hinting engine (with the bytecode interpreter) is available and active. FT_FACE_FLAG_CID_KEYED The face is CID-keyed. In that case, the face is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to FT_Load_Glyph . Only the CID values for which corresponding glyphs in the subsetted font exist make FT_Load_Glyph return successfully; in all other cases you get an FT_Err_Invalid_Argument error. Note that CID-keyed fonts that are in an SFNT wrapper (this is, all OpenType/CFF fonts) don't have this flag set since the glyphs are accessed in the normal way (using contiguous indices); the CID-ness isn't visible to the application. FT_FACE_FLAG_TRICKY The face is tricky , this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the old Chinese font mingli.ttf (but not mingliu.ttc ) that uses TrueType bytecode instructions to move and scale all of its subglyphs. It is not possible to auto-hint such fonts using FT_LOAD_FORCE_AUTOHINT ; it will also ignore FT_LOAD_NO_HINTING . You have to set both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT to really disable hinting; however, you probably never want this except for demonstration purposes. Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file ttobjs.c . FT_FACE_FLAG_COLOR [Since 2.5.1] The face has color glyph tables. See FT_LOAD_COLOR for more information. FT_FACE_FLAG_VARIATION [Since 2.9] Set if the current face (or named instance) has been altered with FT_Set_MM_Design_Coordinates , FT_Set_Var_Design_Coordinates , or FT_Set_Var_Blend_Coordinates . This flag is unset by a call to FT_Set_Named_Instance . FT_STYLE_FLAG_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_STYLE_FLAG_ITALIC ( 1 0 ) # define FT_STYLE_FLAG_BOLD ( 1 1 ) A list of bit flags to indicate the style of a given face. These are used in the style_flags field of FT_FaceRec . values FT_STYLE_FLAG_ITALIC The face style is italic or oblique. FT_STYLE_FLAG_BOLD The face is bold. note The style information as provided by FreeType is very basic. More details are beyond the scope and should be done on a higher level (for example, by analyzing various fields of the OS/2 table in SFNT based fonts). FT_OPEN_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_OPEN_MEMORY 0x1 # define FT_OPEN_STREAM 0x2 # define FT_OPEN_PATHNAME 0x4 # define FT_OPEN_DRIVER 0x8 # define FT_OPEN_PARAMS 0x10 /* these constants are deprecated; use the corresponding ` FT_OPEN_XXX ` */ /* values instead */ # define ft_open_memory FT_OPEN_MEMORY # define ft_open_stream FT_OPEN_STREAM # define ft_open_pathname FT_OPEN_PATHNAME # define ft_open_driver FT_OPEN_DRIVER # define ft_open_params FT_OPEN_PARAMS A list of bit field constants used within the flags field of the FT_Open_Args structure. values FT_OPEN_MEMORY This is a memory-based stream. FT_OPEN_STREAM Copy the stream from the stream field. FT_OPEN_PATHNAME Create a new input stream from a C path name. FT_OPEN_DRIVER Use the driver field. FT_OPEN_PARAMS Use the num_params and params fields. note The FT_OPEN_MEMORY , FT_OPEN_STREAM , and FT_OPEN_PATHNAME flags are mutually exclusive. FT_LOAD_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_LOAD_DEFAULT 0x0 # define FT_LOAD_NO_SCALE ( 1L 0 ) # define FT_LOAD_NO_HINTING ( 1L 1 ) # define FT_LOAD_RENDER ( 1L 2 ) # define FT_LOAD_NO_BITMAP ( 1L 3 ) # define FT_LOAD_VERTICAL_LAYOUT ( 1L 4 ) # define FT_LOAD_FORCE_AUTOHINT ( 1L 5 ) # define FT_LOAD_CROP_BITMAP ( 1L 6 ) # define FT_LOAD_PEDANTIC ( 1L 7 ) # define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L 9 ) # define FT_LOAD_NO_RECURSE ( 1L 10 ) # define FT_LOAD_IGNORE_TRANSFORM ( 1L 11 ) # define FT_LOAD_MONOCHROME ( 1L 12 ) # define FT_LOAD_LINEAR_DESIGN ( 1L 13 ) # define FT_LOAD_NO_AUTOHINT ( 1L 15 ) /* Bits 16-19 are used by `FT_LOAD_TARGET_` */ # define FT_LOAD_COLOR ( 1L 20 ) # define FT_LOAD_COMPUTE_METRICS ( 1L 21 ) # define FT_LOAD_BITMAP_METRICS_ONLY ( 1L 22 ) A list of bit field constants for FT_Load_Glyph to indicate what kind of operations to perform during glyph loading. values FT_LOAD_DEFAULT Corresponding to 0, this value is used as the default glyph load operation. In this case, the following happens: 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). If no embedded bitmap is searched for or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then hinted to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below). Note that by default the glyph loader doesn't render outlines into bitmaps. The following flags are used to modify this default behaviour to more specific and useful cases. FT_LOAD_NO_SCALE Don't scale the loaded outline glyph but keep it in font units. This flag implies FT_LOAD_NO_HINTING and FT_LOAD_NO_BITMAP , and unsets FT_LOAD_RENDER . If the font is tricky (see FT_FACE_FLAG_TRICKY for more), using FT_LOAD_NO_SCALE usually yields meaningless outlines because the subglyphs must be scaled and positioned with hinting instructions. This can be solved by loading the font without FT_LOAD_NO_SCALE and setting the character size to font- units_per_EM . FT_LOAD_NO_HINTING Disable hinting. This generally generates blurrier bitmap glyphs when the glyph are rendered in any of the anti-aliased modes. See also the note below. This flag is implied by FT_LOAD_NO_SCALE . FT_LOAD_RENDER Call FT_Render_Glyph after the glyph is loaded. By default, the glyph is rendered in FT_RENDER_MODE_NORMAL mode. This can be overridden by FT_LOAD_TARGET_XXX or FT_LOAD_MONOCHROME . This flag is unset by FT_LOAD_NO_SCALE . FT_LOAD_NO_BITMAP Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag. FT_LOAD_NO_SCALE always sets this flag. FT_LOAD_VERTICAL_LAYOUT Load the glyph for vertical text layout. In particular, the advance value in the FT_GlyphSlotRec structure is set to the vertAdvance value of the metrics field. In case FT_HAS_VERTICAL doesn't return true, you shouldn't use this flag currently. Reason is that in this case vertical metrics get synthesized, and those values are not always consistent across various font formats. FT_LOAD_FORCE_AUTOHINT Prefer the auto-hinter over the font's native hinter. See also the note below. FT_LOAD_PEDANTIC Make the font driver perform pedantic verifications during glyph loading and hinting. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also. In particular, errors from the TrueType bytecode engine are not passed to the application if this flag is not set; this might result in partially hinted or distorted glyphs in case a glyph's bytecode is buggy. FT_LOAD_NO_RECURSE Don't load composite glyphs recursively. Instead, the font driver fills the num_subglyph and subglyphs values of the glyph slot; it also sets glyph- format to FT_GLYPH_FORMAT_COMPOSITE . The description of subglyphs can then be accessed with FT_Get_SubGlyph_Info . Don't use this flag for retrieving metrics information since some font drivers only return rudimentary data. This flag implies FT_LOAD_NO_SCALE and FT_LOAD_IGNORE_TRANSFORM . FT_LOAD_IGNORE_TRANSFORM Ignore the transform matrix set by FT_Set_Transform . FT_LOAD_MONOCHROME This flag is used with FT_LOAD_RENDER to indicate that you want to render an outline glyph to a 1-bit monochrome bitmap glyph, with 8 pixels packed into each byte of the bitmap data. Note that this has no effect on the hinting algorithm used. You should rather use FT_LOAD_TARGET_MONO so that the monochrome-optimized hinting algorithm is used. FT_LOAD_LINEAR_DESIGN Keep linearHoriAdvance and linearVertAdvance fields of FT_GlyphSlotRec in font units. See FT_GlyphSlotRec for details. FT_LOAD_NO_AUTOHINT Disable the auto-hinter. See also the note below. FT_LOAD_COLOR Load colored glyphs. There are slight differences depending on the font format. [Since 2.5] Load embedded color bitmap images. The resulting color bitmaps, if available, will have the FT_PIXEL_MODE_BGRA format, with pre-multiplied color channels. If the flag is not set and color bitmaps are found, they are converted to 256-level gray bitmaps, using the FT_PIXEL_MODE_GRAY format. [Since 2.10, experimental] If the glyph index contains an entry in the face's COLR table with a CPAL palette table (as defined in the OpenType specification), make FT_Render_Glyph provide a default blending of the color glyph layers associated with the glyph index, using the same bitmap format as embedded color bitmap images. This is mainly for convenience; for full control of color layers use FT_Get_Color_Glyph_Layer and FreeType's color functions like FT_Palette_Select instead of setting FT_LOAD_COLOR for rendering so that the client application can handle blending by itself. FT_LOAD_COMPUTE_METRICS [Since 2.6.1] Compute glyph metrics from the glyph data, without the use of bundled metrics tables (for example, the hdmx table in TrueType fonts). This flag is mainly used by font validating or font editing applications, which need to ignore, verify, or edit those tables. Currently, this flag is only implemented for TrueType fonts. FT_LOAD_BITMAP_METRICS_ONLY [Since 2.7.1] Request loading of the metrics and bitmap image information of a (possibly embedded) bitmap glyph without allocating or copying the bitmap image data itself. No effect if the target glyph is not a bitmap image. This flag unsets FT_LOAD_RENDER . FT_LOAD_CROP_BITMAP Ignored. Deprecated. FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH Ignored. Deprecated. note By default, hinting is enabled and the font's native hinter (see FT_FACE_FLAG_HINTER ) is preferred over the auto-hinter. You can disable hinting by setting FT_LOAD_NO_HINTING or change the precedence by setting FT_LOAD_FORCE_AUTOHINT . You can also set FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used at all. See the description of FT_FACE_FLAG_TRICKY for a special exception (affecting only a handful of Asian fonts). Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See FT_LOAD_TARGET_XXX for details. Note that the auto-hinter needs a valid Unicode cmap (either a native one or synthesized by FreeType) for producing correct results. If a font provides an incorrect mapping (for example, assigning the character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a mathematical integral sign), the auto-hinter might produce useless results. FT_LOAD_TARGET_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 ) A list of values to select a specific hinting algorithm for the hinter. You should OR one of these values to your load_flags when calling FT_Load_Glyph . Note that a font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. values FT_LOAD_TARGET_NORMAL The default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use FT_LOAD_TARGET_MONO instead. FT_LOAD_TARGET_LIGHT A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by FreeType's new CFF engine or Microsoft's ClearType font renderer. This preserves inter-glyph spacing in horizontal text. The snapping is done either by the native font driver, if the driver itself and the font support it, or by the auto-hinter. Advance widths are rounded to integer values; however, using the lsb_delta and rsb_delta fields of FT_GlyphSlotRec , it is possible to get fractional advance widths for subpixel positioning (which is recommended to use). If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active, TrueType-like metrics are used to make this mode behave similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 (inclusive). FT_LOAD_TARGET_MONO Strong hinting algorithm that should only be used for monochrome output. The result is probably unpleasant if the glyph is rendered in non-monochrome modes. Note that for outline fonts only the TrueType font driver has proper monochrome hinting support, provided the TTFs contain hints for B/W rendering (which most fonts no longer provide). If these conditions are not met it is very likely that you get ugly results at smaller sizes. FT_LOAD_TARGET_LCD A variant of FT_LOAD_TARGET_LIGHT optimized for horizontally decimated LCD displays. FT_LOAD_TARGET_LCD_V A variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays. note You should use only one of the FT_LOAD_TARGET_XXX values in your load_flags . They can't be ORed. If FT_LOAD_RENDER is also set, the glyph is rendered in the corresponding mode (i.e., the mode that matches the used algorithm best). An exception is FT_LOAD_TARGET_MONO since it implies FT_LOAD_MONOCHROME . You can use a hinting algorithm that doesn't correspond to the same rendering mode. As an example, it is possible to use the light hinting algorithm and have the results rendered in horizontal LCD pixel mode, with code like FT_Load_Glyph( face, glyph_index, load_flags | FT_LOAD_TARGET_LIGHT ); FT_Render_Glyph( face- glyph, FT_RENDER_MODE_LCD ); In general, you should stick with one rendering mode. For example, switching between FT_LOAD_TARGET_NORMAL and FT_LOAD_TARGET_MONO enforces a lot of recomputation for TrueType fonts, which is slow. Another reason is caching: Selecting a different mode usually causes changes in both the outlines and the rasterized bitmaps; it is thus necessary to empty the cache after a mode switch to avoid false hits. FT_SUBGLYPH_FLAG_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 A list of constants describing subglyphs. Please refer to the glyf table description in the OpenType specification for the meaning of the various flags (which get synthesized for non-OpenType subglyphs). https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description 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 FT_FSTYPE_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 # define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 # define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 # define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008 # define FT_FSTYPE_NO_SUBSETTING 0x0100 # define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 A list of bit flags used in the fsType field of the OS/2 table in a TrueType or OpenType font and the FSType entry in a PostScript font. These bit flags are returned by FT_Get_FSType_Flags ; they inform client applications of embedding and subsetting restrictions associated with a font. See https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf for more details. values FT_FSTYPE_INSTALLABLE_EMBEDDING Fonts with no fsType bit set may be embedded and permanently installed on the remote system by an application. FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the font software copyright owner. FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING The font may be embedded and temporarily loaded on the remote system. Documents containing Preview Print fonts must be opened read-only ; no edits can be applied to the document. FT_FSTYPE_EDITABLE_EMBEDDING The font may be embedded but must only be installed temporarily on other systems. In contrast to Preview Print fonts, documents containing editable fonts may be opened for reading, editing is permitted, and changes may be saved. FT_FSTYPE_NO_SUBSETTING The font may not be subsetted prior to embedding. FT_FSTYPE_BITMAP_EMBEDDING_ONLY Only bitmaps contained in the font may be embedded; no outline data may be embedded. If there are no bitmaps available in the font, then the font is unembeddable. note The flags are ORed together, thus more than a single value can be returned. While the fsType flags can indicate that a font may be embedded, a license with the font vendor may be separately required to use the font in this way. FT_HAS_FAST_GLYPHS Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_FAST_GLYPHS ( face ) 0 Deprecated.","title":"Base Interface"},{"location":"ft2-base_interface.html#base-interface","text":"","title":"Base Interface"},{"location":"ft2-base_interface.html#synopsis","text":"This section describes the most important public high-level API functions of FreeType 2.","title":"Synopsis"},{"location":"ft2-base_interface.html#ft_library","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_LibraryRec_ * FT_Library ; 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 ). [Since 2.5.6] In multi-threaded applications it is easiest to use one FT_Library object per thread. In case this is too cumbersome, a single FT_Library object across threads is possible also, as long as a mutex lock is used around FT_New_Face and FT_Done_Face .","title":"FT_Library"},{"location":"ft2-base_interface.html#ft_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_FaceRec_* FT_Face ; A handle to a typographic face object. A face object models a given typeface, in a given style.","title":"FT_Face"},{"location":"ft2-base_interface.html#ft_size","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_SizeRec_* FT_Size ; A handle to an object that models a face scaled to a given character size.","title":"FT_Size"},{"location":"ft2-base_interface.html#ft_glyphslot","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_GlyphSlotRec_* FT_GlyphSlot ; A handle to a given glyph slot . A slot is a container that can hold any of the glyphs contained in its parent face. In other words, each time you call FT_Load_Glyph or FT_Load_Char , the slot's content is erased by the new glyph data, i.e., the glyph's metrics, its image (bitmap or outline), and other control information.","title":"FT_GlyphSlot"},{"location":"ft2-base_interface.html#ft_charmap","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_CharMapRec_* FT_CharMap ; A handle to a character map (usually abbreviated to charmap ). A charmap is used to translate character codes in a given encoding into glyph indexes for its parent's face. Some font formats may provide several charmaps per font. Each face object owns zero or more charmaps, but only one of them can be active , providing the data used by FT_Get_Char_Index or FT_Load_Char . The list of available charmaps in a face is available through the face- num_charmaps and face- charmaps fields of FT_FaceRec . The currently active charmap is available as face- charmap . You should call FT_Set_Charmap to change it.","title":"FT_CharMap"},{"location":"ft2-base_interface.html#ft_encoding","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Encoding_ { FT_ENC_TAG ( FT_ENCODING_NONE , 0, 0, 0, 0 ), FT_ENC_TAG ( FT_ENCODING_MS_SYMBOL , 's', 'y', 'm', 'b' ), FT_ENC_TAG ( FT_ENCODING_UNICODE , 'u', 'n', 'i', 'c' ), FT_ENC_TAG ( FT_ENCODING_SJIS , 's', 'j', 'i', 's' ), FT_ENC_TAG ( FT_ENCODING_PRC , 'g', 'b', ' ', ' ' ), FT_ENC_TAG ( FT_ENCODING_BIG5 , 'b', 'i', 'g', '5' ), FT_ENC_TAG ( FT_ENCODING_WANSUNG , 'w', 'a', 'n', 's' ), FT_ENC_TAG ( FT_ENCODING_JOHAB , 'j', 'o', 'h', 'a' ), /* for backward compatibility */ FT_ENCODING_GB2312 = FT_ENCODING_PRC , FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS , FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC , FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5 , FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG , FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB , FT_ENC_TAG ( FT_ENCODING_ADOBE_STANDARD , 'A', 'D', 'O', 'B' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_EXPERT , 'A', 'D', 'B', 'E' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_CUSTOM , 'A', 'D', 'B', 'C' ), FT_ENC_TAG ( FT_ENCODING_ADOBE_LATIN_1 , 'l', 'a', 't', '1' ), FT_ENC_TAG ( FT_ENCODING_OLD_LATIN_2 , 'l', 'a', 't', '2' ), FT_ENC_TAG ( FT_ENCODING_APPLE_ROMAN , 'a', 'r', 'm', 'n' ) } FT_Encoding ; /* these constants are deprecated; use the corresponding ` FT_Encoding ` */ /* values instead */ # define ft_encoding_none FT_ENCODING_NONE # define ft_encoding_unicode FT_ENCODING_UNICODE # define ft_encoding_symbol FT_ENCODING_MS_SYMBOL # define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 # define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 # define ft_encoding_sjis FT_ENCODING_SJIS # define ft_encoding_gb2312 FT_ENCODING_PRC # define ft_encoding_big5 FT_ENCODING_BIG5 # define ft_encoding_wansung FT_ENCODING_WANSUNG # define ft_encoding_johab FT_ENCODING_JOHAB # define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD # define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT # define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM # define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN An enumeration to specify character sets supported by charmaps. Used in the FT_Select_Charmap API function.","title":"FT_Encoding"},{"location":"ft2-base_interface.html#ft_enc_tag","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 */ This macro converts four-letter tags into an unsigned long. It is used to define encoding identifiers (see FT_Encoding ).","title":"FT_ENC_TAG"},{"location":"ft2-base_interface.html#ft_facerec","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_FaceRec_ { FT_Long num_faces; FT_Long face_index; FT_Long face_flags; FT_Long style_flags; FT_Long num_glyphs; FT_String * family_name; FT_String * style_name; FT_Int num_fixed_sizes; FT_Bitmap_Size * available_sizes; FT_Int num_charmaps; FT_CharMap * charmaps; FT_Generic generic; /*# The following member variables (down to `underline_thickness`) */ /*# are only relevant to scalable outlines; cf. @ FT_Bitmap_Size */ /*# for bitmap fonts. */ FT_BBox bbox; FT_UShort units_per_EM; FT_Short ascender; FT_Short descender; FT_Short height; FT_Short max_advance_width; FT_Short max_advance_height; FT_Short underline_position; FT_Short underline_thickness; FT_GlyphSlot glyph; FT_Size size; FT_CharMap charmap; /*@private begin */ FT_Driver driver; FT_Memory memory; FT_Stream stream; FT_ListRec sizes_list; FT_Generic autohint; /* face-specific auto-hinter data */ void * extensions; /* unused */ FT_Face_Internal internal; /*@private end */ } FT_FaceRec ; FreeType root face class structure. A face object models a typeface in a font file.","title":"FT_FaceRec"},{"location":"ft2-base_interface.html#ft_has_horizontal","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_HORIZONTAL ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_HORIZONTAL ) A macro that returns true whenever a face object contains horizontal metrics (this is true for all font formats though).","title":"FT_HAS_HORIZONTAL"},{"location":"ft2-base_interface.html#ft_has_vertical","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_VERTICAL ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_VERTICAL ) A macro that returns true whenever a face object contains real vertical metrics (and not only synthesized ones).","title":"FT_HAS_VERTICAL"},{"location":"ft2-base_interface.html#ft_has_kerning","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_KERNING ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_KERNING ) A macro that returns true whenever a face object contains kerning data that can be accessed with FT_Get_Kerning .","title":"FT_HAS_KERNING"},{"location":"ft2-base_interface.html#ft_has_fixed_sizes","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_FIXED_SIZES ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_FIXED_SIZES ) A macro that returns true whenever a face object contains some embedded bitmaps. See the available_sizes field of the FT_FaceRec structure.","title":"FT_HAS_FIXED_SIZES"},{"location":"ft2-base_interface.html#ft_has_glyph_names","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_GLYPH_NAMES ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_GLYPH_NAMES ) A macro that returns true whenever a face object contains some glyph names that can be accessed through FT_Get_Glyph_Name .","title":"FT_HAS_GLYPH_NAMES"},{"location":"ft2-base_interface.html#ft_has_color","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_COLOR ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_COLOR ) A macro that returns true whenever a face object contains tables for color glyphs.","title":"FT_HAS_COLOR"},{"location":"ft2-base_interface.html#ft_has_multiple_masters","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_MULTIPLE_MASTERS ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_MULTIPLE_MASTERS ) 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.","title":"FT_HAS_MULTIPLE_MASTERS"},{"location":"ft2-base_interface.html#ft_is_sfnt","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_SFNT ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_SFNT ) 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.","title":"FT_IS_SFNT"},{"location":"ft2-base_interface.html#ft_is_scalable","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_SCALABLE ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_SCALABLE ) 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).","title":"FT_IS_SCALABLE"},{"location":"ft2-base_interface.html#ft_is_fixed_width","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_FIXED_WIDTH ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_FIXED_WIDTH ) A macro that returns true whenever a face object contains a font face that contains fixed-width (or monospace , fixed-pitch , etc.) glyphs.","title":"FT_IS_FIXED_WIDTH"},{"location":"ft2-base_interface.html#ft_is_cid_keyed","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_CID_KEYED ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_CID_KEYED ) 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.","title":"FT_IS_CID_KEYED"},{"location":"ft2-base_interface.html#ft_is_tricky","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_TRICKY ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_TRICKY ) A macro that returns true whenever a face represents a tricky font. See the discussion of FT_FACE_FLAG_TRICKY for more details.","title":"FT_IS_TRICKY"},{"location":"ft2-base_interface.html#ft_is_named_instance","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_NAMED_INSTANCE ( face ) \\ ( (face)- face_index 0x7FFF0000L ) A macro that returns true whenever a face object is a named instance of a GX or OpenType variation font. [Since 2.9] Changing the design coordinates with FT_Set_Var_Design_Coordinates or FT_Set_Var_Blend_Coordinates does not influence the return value of this macro (only FT_Set_Named_Instance does that).","title":"FT_IS_NAMED_INSTANCE"},{"location":"ft2-base_interface.html#ft_is_variation","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_IS_VARIATION ( face ) \\ ( (face)- face_flags FT_FACE_FLAG_VARIATION ) A macro that returns true whenever a face object has been altered by FT_Set_MM_Design_Coordinates , FT_Set_Var_Design_Coordinates , or FT_Set_Var_Blend_Coordinates .","title":"FT_IS_VARIATION"},{"location":"ft2-base_interface.html#ft_sizerec","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; FreeType root size class structure. A size object models a face object at a given size.","title":"FT_SizeRec"},{"location":"ft2-base_interface.html#ft_size_metrics","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; The size metrics structure gives the metrics of a size object.","title":"FT_Size_Metrics"},{"location":"ft2-base_interface.html#ft_glyphslotrec","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_GlyphSlotRec_ { FT_Library library; FT_Face face; FT_GlyphSlot next; FT_UInt glyph_index; /* new in 2.10; was reserved previously */ 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 ; 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.","title":"FT_GlyphSlotRec"},{"location":"ft2-base_interface.html#ft_glyph_metrics","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag FT_LOAD_NO_SCALE has been used while loading the glyph, values are expressed in font units instead.","title":"FT_Glyph_Metrics"},{"location":"ft2-base_interface.html#ft_subglyph","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_SubGlyphRec_* FT_SubGlyph ; The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites).","title":"FT_SubGlyph"},{"location":"ft2-base_interface.html#ft_bitmap_size","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; 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 .","title":"FT_Bitmap_Size"},{"location":"ft2-base_interface.html#ft_init_freetype","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Init_FreeType ( FT_Library *alibrary ); Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.","title":"FT_Init_FreeType"},{"location":"ft2-base_interface.html#ft_done_freetype","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Done_FreeType ( FT_Library library ); Destroy a given FreeType library object and all of its children, including resources, drivers, faces, sizes, etc.","title":"FT_Done_FreeType"},{"location":"ft2-base_interface.html#ft_new_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_New_Face ( FT_Library library, const char * filepathname, FT_Long face_index, FT_Face *aface ); Call FT_Open_Face to open a font by its pathname.","title":"FT_New_Face"},{"location":"ft2-base_interface.html#ft_done_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Done_Face ( FT_Face face ); Discard a given face object, as well as all of its child slots and sizes.","title":"FT_Done_Face"},{"location":"ft2-base_interface.html#ft_reference_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Reference_Face ( FT_Face face ); A counter gets initialized to 1 at the time an FT_Face structure is created. This function increments the counter. FT_Done_Face then only destroys a face if the counter is 1, otherwise it simply decrements the counter. This function helps in managing life-cycles of structures that reference FT_Face objects.","title":"FT_Reference_Face"},{"location":"ft2-base_interface.html#ft_new_memory_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Call FT_Open_Face to open a font that has been loaded into memory.","title":"FT_New_Memory_Face"},{"location":"ft2-base_interface.html#ft_face_properties","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Face_Properties ( FT_Face face, FT_UInt num_properties, FT_Parameter * properties ); Set or override certain (library or module-wide) properties on a face-by-face basis. Useful for finer-grained control and avoiding locks on shared structures (threads can modify their own faces as they see fit). Contrary to FT_Property_Set , this function uses FT_Parameter so that you can pass multiple properties to the target face in one call. Note that only a subset of the available properties can be controlled. FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the property no-stem-darkening provided by the autofit , cff , type1 , and t1cid modules; see no-stem-darkening ). FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding to function FT_Library_SetLcdFilterWeights ). FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type 1, and CID random operator, corresponding to the random-seed property provided by the cff , type1 , and t1cid modules; see random-seed ). Pass NULL as data in FT_Parameter for a given tag to reset the option and use the library or module default again.","title":"FT_Face_Properties"},{"location":"ft2-base_interface.html#ft_open_face","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Open_Face ( FT_Library library, const FT_Open_Args * args, FT_Long face_index, FT_Face *aface ); Create a face object from a given resource described by FT_Open_Args .","title":"FT_Open_Face"},{"location":"ft2-base_interface.html#ft_open_args","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions FT_Open_Face and FT_Attach_Stream .","title":"FT_Open_Args"},{"location":"ft2-base_interface.html#ft_parameter","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Parameter_ { FT_ULong tag; FT_Pointer data; } FT_Parameter ; A simple structure to pass more or less generic parameters to FT_Open_Face and FT_Face_Properties .","title":"FT_Parameter"},{"location":"ft2-base_interface.html#ft_attach_file","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Attach_File ( FT_Face face, const char * filepathname ); Call FT_Attach_Stream to attach a file.","title":"FT_Attach_File"},{"location":"ft2-base_interface.html#ft_attach_stream","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Attach_Stream ( FT_Face face, FT_Open_Args * parameters ); 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.","title":"FT_Attach_Stream"},{"location":"ft2-base_interface.html#ft_set_char_size","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Call FT_Request_Size to request the nominal size (in points).","title":"FT_Set_Char_Size"},{"location":"ft2-base_interface.html#ft_set_pixel_sizes","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Set_Pixel_Sizes ( FT_Face face, FT_UInt pixel_width, FT_UInt pixel_height ); Call FT_Request_Size to request the nominal size (in pixels).","title":"FT_Set_Pixel_Sizes"},{"location":"ft2-base_interface.html#ft_request_size","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Request_Size ( FT_Face face, FT_Size_Request req ); Resize the scale of the active FT_Size object in a face.","title":"FT_Request_Size"},{"location":"ft2-base_interface.html#ft_select_size","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Select_Size ( FT_Face face, FT_Int strike_index ); Select a bitmap strike. To be more precise, this function sets the scaling factors of the active FT_Size object in a face so that bitmaps from this particular strike are taken by FT_Load_Glyph and friends.","title":"FT_Select_Size"},{"location":"ft2-base_interface.html#ft_size_request_type","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; An enumeration type that lists the supported size request types, i.e., what input size (in font units) maps to the requested output size (in pixels, as computed from the arguments of FT_Size_Request ).","title":"FT_Size_Request_Type"},{"location":"ft2-base_interface.html#ft_size_requestrec","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ; A structure to model a size request.","title":"FT_Size_RequestRec"},{"location":"ft2-base_interface.html#ft_size_request","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Size_RequestRec_ * FT_Size_Request ; A handle to a size request structure.","title":"FT_Size_Request"},{"location":"ft2-base_interface.html#ft_set_transform","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Set_Transform ( FT_Face face, FT_Matrix * matrix, FT_Vector * delta ); Set the transformation that is applied to glyph images when they are loaded into a glyph slot through FT_Load_Glyph .","title":"FT_Set_Transform"},{"location":"ft2-base_interface.html#ft_load_glyph","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Load_Glyph ( FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags ); Load a glyph into the glyph slot of a face object.","title":"FT_Load_Glyph"},{"location":"ft2-base_interface.html#ft_get_char_index","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Get_Char_Index ( FT_Face face, FT_ULong charcode ); Return the glyph index of a given character code. This function uses the currently selected charmap to do the mapping.","title":"FT_Get_Char_Index"},{"location":"ft2-base_interface.html#ft_get_first_char","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_ULong ) FT_Get_First_Char ( FT_Face face, FT_UInt *agindex ); Return the first character code in the current charmap of a given face, together with its corresponding glyph index.","title":"FT_Get_First_Char"},{"location":"ft2-base_interface.html#ft_get_next_char","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_ULong ) FT_Get_Next_Char ( FT_Face face, FT_ULong char_code, FT_UInt *agindex ); 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.","title":"FT_Get_Next_Char"},{"location":"ft2-base_interface.html#ft_get_name_index","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Get_Name_Index ( FT_Face face, const FT_String * glyph_name ); Return the glyph index of a given glyph name.","title":"FT_Get_Name_Index"},{"location":"ft2-base_interface.html#ft_load_char","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Load_Char ( FT_Face face, FT_ULong char_code, FT_Int32 load_flags ); Load a glyph into the glyph slot of a face object, accessed by its character code.","title":"FT_Load_Char"},{"location":"ft2-base_interface.html#ft_load_target_mode","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_LOAD_TARGET_MODE ( x ) ( ( FT_Render_Mode )( ( (x) 16 ) 15 ) ) Return the FT_Render_Mode corresponding to a given FT_LOAD_TARGET_XXX value.","title":"FT_LOAD_TARGET_MODE"},{"location":"ft2-base_interface.html#ft_render_glyph","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Render_Glyph ( FT_GlyphSlot slot, FT_Render_Mode render_mode ); Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the relevant renderer, and invoking it.","title":"FT_Render_Glyph"},{"location":"ft2-base_interface.html#ft_render_mode","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Render_Mode_ { FT_RENDER_MODE_NORMAL = 0, FT_RENDER_MODE_LIGHT , FT_RENDER_MODE_MONO , FT_RENDER_MODE_LCD , FT_RENDER_MODE_LCD_V , FT_RENDER_MODE_MAX } FT_Render_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Render_Mode ` values instead */ # define ft_render_mode_normal FT_RENDER_MODE_NORMAL # define ft_render_mode_mono FT_RENDER_MODE_MONO Render modes supported by FreeType 2. Each mode corresponds to a specific type of scanline conversion performed on the outline. For bitmap fonts and embedded bitmaps the bitmap- pixel_mode field in the FT_GlyphSlotRec structure gives the format of the returned bitmap. All modes except FT_RENDER_MODE_MONO use 256 levels of opacity, indicating pixel coverage. Use linear alpha blending and gamma correction to correctly render non-monochrome glyph bitmaps onto a surface; see FT_Render_Glyph .","title":"FT_Render_Mode"},{"location":"ft2-base_interface.html#ft_get_kerning","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Return the kerning vector between two glyphs of the same face.","title":"FT_Get_Kerning"},{"location":"ft2-base_interface.html#ft_kerning_mode","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef enum FT_Kerning_Mode_ { FT_KERNING_DEFAULT = 0, FT_KERNING_UNFITTED , FT_KERNING_UNSCALED } FT_Kerning_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Kerning_Mode ` values instead */ # define ft_kerning_default FT_KERNING_DEFAULT # define ft_kerning_unfitted FT_KERNING_UNFITTED # define ft_kerning_unscaled FT_KERNING_UNSCALED An enumeration to specify the format of kerning values returned by FT_Get_Kerning .","title":"FT_Kerning_Mode"},{"location":"ft2-base_interface.html#ft_get_track_kerning","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Get_Track_Kerning ( FT_Face face, FT_Fixed point_size, FT_Int degree, FT_Fixed * akerning ); Return the track kerning for a given face object at a given size.","title":"FT_Get_Track_Kerning"},{"location":"ft2-base_interface.html#ft_get_glyph_name","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Get_Glyph_Name ( FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max ); 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.","title":"FT_Get_Glyph_Name"},{"location":"ft2-base_interface.html#ft_get_postscript_name","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( const char * ) FT_Get_Postscript_Name ( FT_Face face ); Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript, TrueType, and OpenType fonts.","title":"FT_Get_Postscript_Name"},{"location":"ft2-base_interface.html#ft_charmaprec","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_CharMapRec_ { FT_Face face; FT_Encoding encoding; FT_UShort platform_id; FT_UShort encoding_id; } FT_CharMapRec ; The base charmap structure.","title":"FT_CharMapRec"},{"location":"ft2-base_interface.html#ft_select_charmap","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Select_Charmap ( FT_Face face, FT_Encoding encoding ); Select a given charmap by its encoding tag (as listed in freetype.h ).","title":"FT_Select_Charmap"},{"location":"ft2-base_interface.html#ft_set_charmap","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Error ) FT_Set_Charmap ( FT_Face face, FT_CharMap charmap ); Select a given charmap for character code to glyph index mapping.","title":"FT_Set_Charmap"},{"location":"ft2-base_interface.html#ft_get_charmap_index","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Int ) FT_Get_Charmap_Index ( FT_CharMap charmap ); Retrieve index of a given charmap.","title":"FT_Get_Charmap_Index"},{"location":"ft2-base_interface.html#ft_get_fstype_flags","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UShort ) FT_Get_FSType_Flags ( FT_Face face ); Return the fsType flags for a font.","title":"FT_Get_FSType_Flags"},{"location":"ft2-base_interface.html#ft_get_subglyph_info","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). 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 ); Retrieve a description of a given subglyph. Only use it if glyph- format is FT_GLYPH_FORMAT_COMPOSITE ; an error is returned otherwise.","title":"FT_Get_SubGlyph_Info"},{"location":"ft2-base_interface.html#ft_face_internal","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Face_InternalRec_* FT_Face_Internal ; An opaque handle to an FT_Face_InternalRec structure that models the private data of a given FT_Face object. This structure might change between releases of FreeType 2 and is not generally available to client applications.","title":"FT_Face_Internal"},{"location":"ft2-base_interface.html#ft_size_internal","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Size_InternalRec_* FT_Size_Internal ; An opaque handle to an FT_Size_InternalRec structure, used to model private data of a given FT_Size object.","title":"FT_Size_Internal"},{"location":"ft2-base_interface.html#ft_slot_internal","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_Slot_InternalRec_* FT_Slot_Internal ; An opaque handle to an FT_Slot_InternalRec structure, used to model private data of a given FT_GlyphSlot object.","title":"FT_Slot_Internal"},{"location":"ft2-base_interface.html#ft_face_flag_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_FACE_FLAG_SCALABLE ( 1L 0 ) # define FT_FACE_FLAG_FIXED_SIZES ( 1L 1 ) # define FT_FACE_FLAG_FIXED_WIDTH ( 1L 2 ) # define FT_FACE_FLAG_SFNT ( 1L 3 ) # define FT_FACE_FLAG_HORIZONTAL ( 1L 4 ) # define FT_FACE_FLAG_VERTICAL ( 1L 5 ) # define FT_FACE_FLAG_KERNING ( 1L 6 ) # define FT_FACE_FLAG_FAST_GLYPHS ( 1L 7 ) # define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L 8 ) # define FT_FACE_FLAG_GLYPH_NAMES ( 1L 9 ) # define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L 10 ) # define FT_FACE_FLAG_HINTER ( 1L 11 ) # define FT_FACE_FLAG_CID_KEYED ( 1L 12 ) # define FT_FACE_FLAG_TRICKY ( 1L 13 ) # define FT_FACE_FLAG_COLOR ( 1L 14 ) # define FT_FACE_FLAG_VARIATION ( 1L 15 ) 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.","title":"FT_FACE_FLAG_XXX"},{"location":"ft2-base_interface.html#ft_style_flag_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_STYLE_FLAG_ITALIC ( 1 0 ) # define FT_STYLE_FLAG_BOLD ( 1 1 ) A list of bit flags to indicate the style of a given face. These are used in the style_flags field of FT_FaceRec .","title":"FT_STYLE_FLAG_XXX"},{"location":"ft2-base_interface.html#ft_open_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_OPEN_MEMORY 0x1 # define FT_OPEN_STREAM 0x2 # define FT_OPEN_PATHNAME 0x4 # define FT_OPEN_DRIVER 0x8 # define FT_OPEN_PARAMS 0x10 /* these constants are deprecated; use the corresponding ` FT_OPEN_XXX ` */ /* values instead */ # define ft_open_memory FT_OPEN_MEMORY # define ft_open_stream FT_OPEN_STREAM # define ft_open_pathname FT_OPEN_PATHNAME # define ft_open_driver FT_OPEN_DRIVER # define ft_open_params FT_OPEN_PARAMS A list of bit field constants used within the flags field of the FT_Open_Args structure.","title":"FT_OPEN_XXX"},{"location":"ft2-base_interface.html#ft_load_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_LOAD_DEFAULT 0x0 # define FT_LOAD_NO_SCALE ( 1L 0 ) # define FT_LOAD_NO_HINTING ( 1L 1 ) # define FT_LOAD_RENDER ( 1L 2 ) # define FT_LOAD_NO_BITMAP ( 1L 3 ) # define FT_LOAD_VERTICAL_LAYOUT ( 1L 4 ) # define FT_LOAD_FORCE_AUTOHINT ( 1L 5 ) # define FT_LOAD_CROP_BITMAP ( 1L 6 ) # define FT_LOAD_PEDANTIC ( 1L 7 ) # define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L 9 ) # define FT_LOAD_NO_RECURSE ( 1L 10 ) # define FT_LOAD_IGNORE_TRANSFORM ( 1L 11 ) # define FT_LOAD_MONOCHROME ( 1L 12 ) # define FT_LOAD_LINEAR_DESIGN ( 1L 13 ) # define FT_LOAD_NO_AUTOHINT ( 1L 15 ) /* Bits 16-19 are used by `FT_LOAD_TARGET_` */ # define FT_LOAD_COLOR ( 1L 20 ) # define FT_LOAD_COMPUTE_METRICS ( 1L 21 ) # define FT_LOAD_BITMAP_METRICS_ONLY ( 1L 22 ) A list of bit field constants for FT_Load_Glyph to indicate what kind of operations to perform during glyph loading.","title":"FT_LOAD_XXX"},{"location":"ft2-base_interface.html#ft_load_target_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 ) A list of values to select a specific hinting algorithm for the hinter. You should OR one of these values to your load_flags when calling FT_Load_Glyph . Note that a font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.","title":"FT_LOAD_TARGET_XXX"},{"location":"ft2-base_interface.html#ft_subglyph_flag_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # 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 A list of constants describing subglyphs. Please refer to the glyf table description in the OpenType specification for the meaning of the various flags (which get synthesized for non-OpenType subglyphs). https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description","title":"FT_SUBGLYPH_FLAG_XXX"},{"location":"ft2-base_interface.html#ft_fstype_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 # define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 # define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 # define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008 # define FT_FSTYPE_NO_SUBSETTING 0x0100 # define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 A list of bit flags used in the fsType field of the OS/2 table in a TrueType or OpenType font and the FSType entry in a PostScript font. These bit flags are returned by FT_Get_FSType_Flags ; they inform client applications of embedding and subsetting restrictions associated with a font. See https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf for more details.","title":"FT_FSTYPE_XXX"},{"location":"ft2-base_interface.html#ft_has_fast_glyphs","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FT_HAS_FAST_GLYPHS ( face ) 0 Deprecated.","title":"FT_HAS_FAST_GLYPHS"},{"location":"ft2-basic_types.html","text":"FreeType Docs Core API Basic Data Types Basic Data Types Synopsis 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. FT_Byte Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned char FT_Byte ; A simple typedef for the unsigned char type. FT_Bytes Defined in FT_TYPES_H (freetype/fttypes.h). typedef const FT_Byte * FT_Bytes ; A typedef for constant memory areas. FT_Char Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed char FT_Char ; A simple typedef for the signed char type. FT_Int Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed int FT_Int ; A typedef for the int type. FT_UInt Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned int FT_UInt ; A typedef for the unsigned int type. FT_Int16 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed short FT_Int16 ; A typedef for a 16bit signed integer type. FT_UInt16 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned short FT_UInt16 ; A typedef for a 16bit unsigned integer type. FT_Int32 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed XXX FT_Int32 ; A typedef for a 32bit signed integer type. The size depends on the configuration. FT_UInt32 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned XXX FT_UInt32 ; FT_Int64 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed XXX FT_Int64 ; FT_UInt64 Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned XXX FT_UInt64 ; FT_Short Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_Short ; A typedef for signed short. FT_UShort Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned short FT_UShort ; A typedef for unsigned short. FT_Long Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_Long ; A typedef for signed long. FT_ULong Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned long FT_ULong ; A typedef for unsigned long. FT_Bool Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned char FT_Bool ; A typedef of unsigned char, used for simple booleans. As usual, values 1 and 0 represent true and false, respectively. FT_Offset Defined in FT_TYPES_H (freetype/fttypes.h). typedef size_t FT_Offset ; 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. FT_PtrDist Defined in FT_TYPES_H (freetype/fttypes.h). typedef ft_ptrdiff_t FT_PtrDist ; 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. FT_String Defined in FT_TYPES_H (freetype/fttypes.h). typedef char FT_String ; A simple typedef for the char type, usually used for strings. FT_Tag Defined in FT_TYPES_H (freetype/fttypes.h). typedef FT_UInt32 FT_Tag ; A typedef for 32-bit tags (as used in the SFNT format). FT_Error Defined in FT_TYPES_H (freetype/fttypes.h). typedef int FT_Error ; The FreeType error code type. A value of 0 is always interpreted as a successful operation. FT_Fixed Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_Fixed ; This type is used to store 16.16 fixed-point values, like scaling values or matrix coefficients. FT_Pointer Defined in FT_TYPES_H (freetype/fttypes.h). typedef void * FT_Pointer ; A simple typedef for a typeless pointer. FT_Pos Defined in FT_IMAGE_H (freetype/ftimage.h). typedef signed long FT_Pos ; The type FT_Pos is used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16.16, or 26.6 fixed-point pixel coordinates. FT_Vector Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Vector_ { FT_Pos x; FT_Pos y; } FT_Vector ; 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. FT_BBox Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_BBox_ { FT_Pos xMin, yMin; FT_Pos xMax, yMax; } FT_BBox ; A structure used to hold an outline's bounding box, i.e., the coordinates of its extrema in the horizontal and vertical directions. fields xMin The horizontal minimum (left-most). yMin The vertical minimum (bottom-most). xMax The horizontal maximum (right-most). yMax The vertical maximum (top-most). note The bounding box is specified with the coordinates of the lower left and the upper right corner. In PostScript, those values are often called (llx,lly) and (urx,ury), respectively. If yMin is negative, this value gives the glyph's descender. Otherwise, the glyph doesn't descend below the baseline. Similarly, if ymax is positive, this value gives the glyph's ascender. xMin gives the horizontal distance from the glyph's origin to the left edge of the glyph's bounding box. If xMin is negative, the glyph extends to the left of the origin. FT_Matrix Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Matrix_ { FT_Fixed xx, xy; FT_Fixed yx, yy; } FT_Matrix ; A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed-point format. The computation performed is: x = x*xx + y*xy y = x*yx + y*yy fields xx Matrix coefficient. xy Matrix coefficient. yx Matrix coefficient. yy Matrix coefficient. FT_FWord Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_FWord ; /* distance in FUnits */ A signed 16-bit integer used to store a distance in original font units. FT_UFWord Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned short FT_UFWord ; /* unsigned distance */ An unsigned 16-bit integer used to store a distance in original font units. FT_F2Dot14 Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_F2Dot14 ; A signed 2.14 fixed-point type used for unit vectors. FT_UnitVector Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_UnitVector_ { FT_F2Dot14 x; FT_F2Dot14 y; } FT_UnitVector ; A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types. fields x Horizontal coordinate. y Vertical coordinate. FT_F26Dot6 Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_F26Dot6 ; A signed 26.6 fixed-point type used for vectorial pixel coordinates. FT_Data Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Data_ { const FT_Byte * pointer; FT_Int length; } FT_Data ; Read-only binary data represented as a pointer and a length. fields pointer The data. length The length of the data in bytes. FT_MAKE_TAG Defined in FT_TYPES_H (freetype/fttypes.h). # define FT_MAKE_TAG ( _x1, _x2, _x3, _x4 ) \\ ( FT_Tag ) \\ ( ( ( FT_ULong )_x1 24 ) | \\ ( ( FT_ULong )_x2 16 ) | \\ ( ( FT_ULong )_x3 8 ) | \\ ( FT_ULong )_x4 ) This macro converts four-letter tags that are used to label TrueType tables into an unsigned long, to be used within FreeType. note The produced values must be 32-bit integers. Don't redefine this macro. FT_Generic Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Generic_ { void * data; FT_Generic_Finalizer finalizer; } FT_Generic ; Client applications often need to associate their own data to a variety of FreeType core objects. For example, a text layout API might want to associate a glyph cache to a given size object. Some FreeType object contains a generic field, of type FT_Generic , which usage is left to client applications and font servers. It can be used to store a pointer to client-specific data, as well as the address of a finalizer function, which will be called by FreeType when the object is destroyed (for example, the previous client example would put the address of the glyph cache destructor in the finalizer field). fields data A typeless pointer to any client-specified data. This field is completely ignored by the FreeType library. finalizer A pointer to a generic finalizer function, which will be called when the object is destroyed. If this field is set to NULL , no code will be called. FT_Generic_Finalizer Defined in FT_TYPES_H (freetype/fttypes.h). typedef void (* FT_Generic_Finalizer )( void * object ); Describe a function used to destroy the client data of any FreeType object. See the description of the FT_Generic type for details of usage. input The address of the FreeType object that is under finalization. Its client data is accessed through its generic field. FT_Bitmap Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Bitmap_ { unsigned int rows; unsigned int width; int pitch; unsigned char * buffer; unsigned short num_grays; unsigned char pixel_mode; unsigned char palette_mode; void * palette; } FT_Bitmap ; A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various depths through the pixel_mode field. fields rows The number of bitmap rows. width The number of pixels in bitmap row. pitch The pitch's absolute value is the number of bytes taken by one bitmap row, including padding. However, the pitch is positive when the bitmap has a down flow, and negative when it has an up flow. In all cases, the pitch is an offset to add to a bitmap pointer in order to go down one row. Note that padding means the alignment of a bitmap to a byte border, and FreeType functions normally align to the smallest possible integer value. For the B/W rasterizer, pitch is always an even number. To change the pitch of a bitmap (say, to make it a multiple of 4), use FT_Bitmap_Convert . Alternatively, you might use callback functions to directly render to the application's surface; see the file example2.cpp in the tutorial for a demonstration. buffer A typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases. num_grays This field is only used with FT_PIXEL_MODE_GRAY ; it gives the number of gray levels used in the bitmap. pixel_mode The pixel mode, i.e., how pixel bits are stored. See FT_Pixel_Mode for possible values. palette_mode This field is intended for paletted pixel modes; it indicates how the palette is stored. Not used currently. palette A typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Not used currently. FT_Pixel_Mode Defined in FT_IMAGE_H (freetype/ftimage.h). typedef enum FT_Pixel_Mode_ { FT_PIXEL_MODE_NONE = 0, FT_PIXEL_MODE_MONO , FT_PIXEL_MODE_GRAY , FT_PIXEL_MODE_GRAY2 , FT_PIXEL_MODE_GRAY4 , FT_PIXEL_MODE_LCD , FT_PIXEL_MODE_LCD_V , FT_PIXEL_MODE_BGRA , FT_PIXEL_MODE_MAX /* do not remove */ } FT_Pixel_Mode ; /* these constants are deprecated; use the corresponding ` FT_Pixel_Mode ` */ /* values instead. */ # define ft_pixel_mode_none FT_PIXEL_MODE_NONE # define ft_pixel_mode_mono FT_PIXEL_MODE_MONO # define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY # define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 # define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future. values FT_PIXEL_MODE_NONE Value 0 is reserved. FT_PIXEL_MODE_MONO A monochrome bitmap, using 1 bit per pixel. Note that pixels are stored in most-significant order (MSB), which means that the left-most pixel in a byte has value 128. FT_PIXEL_MODE_GRAY An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte. Note that the number of gray levels is stored in the num_grays field of the FT_Bitmap structure (it generally is 256). FT_PIXEL_MODE_GRAY2 A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however. FT_PIXEL_MODE_GRAY4 A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however. FT_PIXEL_MODE_LCD An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also FT_RENDER_MODE_LCD . FT_PIXEL_MODE_LCD_V An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also FT_RENDER_MODE_LCD_V . FT_PIXEL_MODE_BGRA [Since 2.5] An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity will be represented as 00,00,80,80 , not 00,00,FF,80 . See also FT_LOAD_COLOR . FT_Glyph_Format Defined in FT_IMAGE_H (freetype/ftimage.h). typedef enum FT_Glyph_Format_ { FT_IMAGE_TAG ( FT_GLYPH_FORMAT_NONE , 0, 0, 0, 0 ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_COMPOSITE , 'c', 'o', 'm', 'p' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_BITMAP , 'b', 'i', 't', 's' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_OUTLINE , 'o', 'u', 't', 'l' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_PLOTTER , 'p', 'l', 'o', 't' ) } FT_Glyph_Format ; /* these constants are deprecated; use the corresponding */ /* ` FT_Glyph_Format ` values instead. */ # define ft_glyph_format_none FT_GLYPH_FORMAT_NONE # define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE # define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP # define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE # define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER 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 Bezier 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. FT_IMAGE_TAG Defined in FT_IMAGE_H (freetype/ftimage.h). # 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 */ 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.","title":"Basic Data Types"},{"location":"ft2-basic_types.html#basic-data-types","text":"","title":"Basic Data Types"},{"location":"ft2-basic_types.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-basic_types.html#ft_byte","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned char FT_Byte ; A simple typedef for the unsigned char type.","title":"FT_Byte"},{"location":"ft2-basic_types.html#ft_bytes","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef const FT_Byte * FT_Bytes ; A typedef for constant memory areas.","title":"FT_Bytes"},{"location":"ft2-basic_types.html#ft_char","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed char FT_Char ; A simple typedef for the signed char type.","title":"FT_Char"},{"location":"ft2-basic_types.html#ft_int","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed int FT_Int ; A typedef for the int type.","title":"FT_Int"},{"location":"ft2-basic_types.html#ft_uint","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned int FT_UInt ; A typedef for the unsigned int type.","title":"FT_UInt"},{"location":"ft2-basic_types.html#ft_int16","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed short FT_Int16 ; A typedef for a 16bit signed integer type.","title":"FT_Int16"},{"location":"ft2-basic_types.html#ft_uint16","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned short FT_UInt16 ; A typedef for a 16bit unsigned integer type.","title":"FT_UInt16"},{"location":"ft2-basic_types.html#ft_int32","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed XXX FT_Int32 ; A typedef for a 32bit signed integer type. The size depends on the configuration.","title":"FT_Int32"},{"location":"ft2-basic_types.html#ft_uint32","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned XXX FT_UInt32 ;","title":"FT_UInt32"},{"location":"ft2-basic_types.html#ft_int64","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef signed XXX FT_Int64 ;","title":"FT_Int64"},{"location":"ft2-basic_types.html#ft_uint64","text":"Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h). typedef unsigned XXX FT_UInt64 ;","title":"FT_UInt64"},{"location":"ft2-basic_types.html#ft_short","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_Short ; A typedef for signed short.","title":"FT_Short"},{"location":"ft2-basic_types.html#ft_ushort","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned short FT_UShort ; A typedef for unsigned short.","title":"FT_UShort"},{"location":"ft2-basic_types.html#ft_long","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_Long ; A typedef for signed long.","title":"FT_Long"},{"location":"ft2-basic_types.html#ft_ulong","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned long FT_ULong ; A typedef for unsigned long.","title":"FT_ULong"},{"location":"ft2-basic_types.html#ft_bool","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned char FT_Bool ; A typedef of unsigned char, used for simple booleans. As usual, values 1 and 0 represent true and false, respectively.","title":"FT_Bool"},{"location":"ft2-basic_types.html#ft_offset","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef size_t FT_Offset ; 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.","title":"FT_Offset"},{"location":"ft2-basic_types.html#ft_ptrdist","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef ft_ptrdiff_t FT_PtrDist ; 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.","title":"FT_PtrDist"},{"location":"ft2-basic_types.html#ft_string","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef char FT_String ; A simple typedef for the char type, usually used for strings.","title":"FT_String"},{"location":"ft2-basic_types.html#ft_tag","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef FT_UInt32 FT_Tag ; A typedef for 32-bit tags (as used in the SFNT format).","title":"FT_Tag"},{"location":"ft2-basic_types.html#ft_error","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef int FT_Error ; The FreeType error code type. A value of 0 is always interpreted as a successful operation.","title":"FT_Error"},{"location":"ft2-basic_types.html#ft_fixed","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_Fixed ; This type is used to store 16.16 fixed-point values, like scaling values or matrix coefficients.","title":"FT_Fixed"},{"location":"ft2-basic_types.html#ft_pointer","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef void * FT_Pointer ; A simple typedef for a typeless pointer.","title":"FT_Pointer"},{"location":"ft2-basic_types.html#ft_pos","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef signed long FT_Pos ; The type FT_Pos is used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16.16, or 26.6 fixed-point pixel coordinates.","title":"FT_Pos"},{"location":"ft2-basic_types.html#ft_vector","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Vector_ { FT_Pos x; FT_Pos y; } FT_Vector ; A simple structure used to store a 2D vector; coordinates are of the FT_Pos type.","title":"FT_Vector"},{"location":"ft2-basic_types.html#ft_bbox","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_BBox_ { FT_Pos xMin, yMin; FT_Pos xMax, yMax; } FT_BBox ; A structure used to hold an outline's bounding box, i.e., the coordinates of its extrema in the horizontal and vertical directions.","title":"FT_BBox"},{"location":"ft2-basic_types.html#ft_matrix","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Matrix_ { FT_Fixed xx, xy; FT_Fixed yx, yy; } FT_Matrix ; A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed-point format. The computation performed is: x = x*xx + y*xy y = x*yx + y*yy","title":"FT_Matrix"},{"location":"ft2-basic_types.html#ft_fword","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_FWord ; /* distance in FUnits */ A signed 16-bit integer used to store a distance in original font units.","title":"FT_FWord"},{"location":"ft2-basic_types.html#ft_ufword","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef unsigned short FT_UFWord ; /* unsigned distance */ An unsigned 16-bit integer used to store a distance in original font units.","title":"FT_UFWord"},{"location":"ft2-basic_types.html#ft_f2dot14","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed short FT_F2Dot14 ; A signed 2.14 fixed-point type used for unit vectors.","title":"FT_F2Dot14"},{"location":"ft2-basic_types.html#ft_unitvector","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_UnitVector_ { FT_F2Dot14 x; FT_F2Dot14 y; } FT_UnitVector ; A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.","title":"FT_UnitVector"},{"location":"ft2-basic_types.html#ft_f26dot6","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef signed long FT_F26Dot6 ; A signed 26.6 fixed-point type used for vectorial pixel coordinates.","title":"FT_F26Dot6"},{"location":"ft2-basic_types.html#ft_data","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Data_ { const FT_Byte * pointer; FT_Int length; } FT_Data ; Read-only binary data represented as a pointer and a length.","title":"FT_Data"},{"location":"ft2-basic_types.html#ft_make_tag","text":"Defined in FT_TYPES_H (freetype/fttypes.h). # define FT_MAKE_TAG ( _x1, _x2, _x3, _x4 ) \\ ( FT_Tag ) \\ ( ( ( FT_ULong )_x1 24 ) | \\ ( ( FT_ULong )_x2 16 ) | \\ ( ( FT_ULong )_x3 8 ) | \\ ( FT_ULong )_x4 ) This macro converts four-letter tags that are used to label TrueType tables into an unsigned long, to be used within FreeType.","title":"FT_MAKE_TAG"},{"location":"ft2-basic_types.html#ft_generic","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_Generic_ { void * data; FT_Generic_Finalizer finalizer; } FT_Generic ; Client applications often need to associate their own data to a variety of FreeType core objects. For example, a text layout API might want to associate a glyph cache to a given size object. Some FreeType object contains a generic field, of type FT_Generic , which usage is left to client applications and font servers. It can be used to store a pointer to client-specific data, as well as the address of a finalizer function, which will be called by FreeType when the object is destroyed (for example, the previous client example would put the address of the glyph cache destructor in the finalizer field).","title":"FT_Generic"},{"location":"ft2-basic_types.html#ft_generic_finalizer","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef void (* FT_Generic_Finalizer )( void * object ); 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.","title":"FT_Generic_Finalizer"},{"location":"ft2-basic_types.html#ft_bitmap","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Bitmap_ { unsigned int rows; unsigned int width; int pitch; unsigned char * buffer; unsigned short num_grays; unsigned char pixel_mode; unsigned char palette_mode; void * palette; } FT_Bitmap ; 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.","title":"FT_Bitmap"},{"location":"ft2-basic_types.html#ft_pixel_mode","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef enum FT_Pixel_Mode_ { FT_PIXEL_MODE_NONE = 0, FT_PIXEL_MODE_MONO , FT_PIXEL_MODE_GRAY , FT_PIXEL_MODE_GRAY2 , FT_PIXEL_MODE_GRAY4 , FT_PIXEL_MODE_LCD , FT_PIXEL_MODE_LCD_V , FT_PIXEL_MODE_BGRA , FT_PIXEL_MODE_MAX /* do not remove */ } FT_Pixel_Mode ; /* these constants are deprecated; use the corresponding ` FT_Pixel_Mode ` */ /* values instead. */ # define ft_pixel_mode_none FT_PIXEL_MODE_NONE # define ft_pixel_mode_mono FT_PIXEL_MODE_MONO # define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY # define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 # define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future.","title":"FT_Pixel_Mode"},{"location":"ft2-basic_types.html#ft_glyph_format","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef enum FT_Glyph_Format_ { FT_IMAGE_TAG ( FT_GLYPH_FORMAT_NONE , 0, 0, 0, 0 ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_COMPOSITE , 'c', 'o', 'm', 'p' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_BITMAP , 'b', 'i', 't', 's' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_OUTLINE , 'o', 'u', 't', 'l' ), FT_IMAGE_TAG ( FT_GLYPH_FORMAT_PLOTTER , 'p', 'l', 'o', 't' ) } FT_Glyph_Format ; /* these constants are deprecated; use the corresponding */ /* ` FT_Glyph_Format ` values instead. */ # define ft_glyph_format_none FT_GLYPH_FORMAT_NONE # define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE # define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP # define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE # define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER 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.","title":"FT_Glyph_Format"},{"location":"ft2-basic_types.html#ft_image_tag","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). # 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 */ This macro converts four-letter tags to an unsigned long type.","title":"FT_IMAGE_TAG"},{"location":"ft2-bdf_fonts.html","text":"FreeType Docs Format-Specific API BDF and PCF Files BDF and PCF Files Synopsis This section contains the declaration of functions specific to BDF and PCF fonts. BDF_PropertyType Defined in FT_BDF_H (freetype/ftbdf.h). 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 ; 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. BDF_Property Defined in FT_BDF_H (freetype/ftbdf.h). typedef struct BDF_PropertyRec_* BDF_Property ; A handle to a BDF_PropertyRec structure to model a given BDF/PCF property. BDF_PropertyRec Defined in FT_BDF_H (freetype/ftbdf.h). typedef struct BDF_PropertyRec_ { BDF_PropertyType type; union { const char * atom; FT_Int32 integer; FT_UInt32 cardinal; } u; } BDF_PropertyRec ; This structure models a given BDF/PCF property. fields type The property type. u.atom The atom string, if type is BDF_PROPERTY_TYPE_ATOM . May be NULL , indicating an empty string. u.integer A signed integer, if type is BDF_PROPERTY_TYPE_INTEGER . u.cardinal An unsigned integer, if type is BDF_PROPERTY_TYPE_CARDINAL . FT_Get_BDF_Charset_ID Defined in FT_BDF_H (freetype/ftbdf.h). FT_EXPORT( FT_Error ) FT_Get_BDF_Charset_ID ( FT_Face face, const char * *acharset_encoding, const char * *acharset_registry ); 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_Get_BDF_Property Defined in FT_BDF_H (freetype/ftbdf.h). FT_EXPORT( FT_Error ) FT_Get_BDF_Property ( FT_Face face, const char * prop_name, BDF_PropertyRec *aproperty ); Retrieve a BDF property from a BDF or PCF font file. input face A handle to the input face. name The property name. output aproperty The property. return FreeType error code. 0 means success. note This function works with BDF and PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font. A property is a either key-value pair within the STARTPROPERTIES ... ENDPROPERTIES block of a BDF font or a key-value pair from the info- props array within a FontRec structure of a PCF font. Integer properties are always stored as signed within PCF fonts; consequently, BDF_PROPERTY_TYPE_CARDINAL is a possible return value for BDF fonts only. In case of error, aproperty- type is always set to BDF_PROPERTY_TYPE_NONE .","title":"BDF and PCF Files"},{"location":"ft2-bdf_fonts.html#bdf-and-pcf-files","text":"","title":"BDF and PCF Files"},{"location":"ft2-bdf_fonts.html#synopsis","text":"This section contains the declaration of functions specific to BDF and PCF fonts.","title":"Synopsis"},{"location":"ft2-bdf_fonts.html#bdf_propertytype","text":"Defined in FT_BDF_H (freetype/ftbdf.h). 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 ; A list of BDF property types.","title":"BDF_PropertyType"},{"location":"ft2-bdf_fonts.html#bdf_property","text":"Defined in FT_BDF_H (freetype/ftbdf.h). typedef struct BDF_PropertyRec_* BDF_Property ; A handle to a BDF_PropertyRec structure to model a given BDF/PCF property.","title":"BDF_Property"},{"location":"ft2-bdf_fonts.html#bdf_propertyrec","text":"Defined in FT_BDF_H (freetype/ftbdf.h). typedef struct BDF_PropertyRec_ { BDF_PropertyType type; union { const char * atom; FT_Int32 integer; FT_UInt32 cardinal; } u; } BDF_PropertyRec ; This structure models a given BDF/PCF property.","title":"BDF_PropertyRec"},{"location":"ft2-bdf_fonts.html#ft_get_bdf_charset_id","text":"Defined in FT_BDF_H (freetype/ftbdf.h). FT_EXPORT( FT_Error ) FT_Get_BDF_Charset_ID ( FT_Face face, const char * *acharset_encoding, const char * *acharset_registry ); Retrieve a BDF font character set identity, according to the BDF specification.","title":"FT_Get_BDF_Charset_ID"},{"location":"ft2-bdf_fonts.html#ft_get_bdf_property","text":"Defined in FT_BDF_H (freetype/ftbdf.h). FT_EXPORT( FT_Error ) FT_Get_BDF_Property ( FT_Face face, const char * prop_name, BDF_PropertyRec *aproperty ); Retrieve a BDF property from a BDF or PCF font file.","title":"FT_Get_BDF_Property"},{"location":"ft2-bitmap_handling.html","text":"FreeType Docs Support API Bitmap Handling Bitmap Handling Synopsis This section contains functions for handling FT_Bitmap objects, automatically adjusting the target's bitmap buffer size as needed. Note that none of the functions changes the bitmap's flow (as indicated by the sign of the pitch field in FT_Bitmap ). To set the flow, assign an appropriate positive or negative value to the pitch field of the target FT_Bitmap object after calling FT_Bitmap_Init but before calling any of the other functions described here. FT_Bitmap_Init Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( void ) FT_Bitmap_Init ( FT_Bitmap *abitmap ); /* deprecated */ FT_EXPORT( void ) FT_Bitmap_New( FT_Bitmap *abitmap ); Initialize a pointer to an FT_Bitmap structure. inout abitmap A pointer to the bitmap structure. note A deprecated name for the same function is FT_Bitmap_New . FT_Bitmap_Copy Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Copy ( FT_Library library, const FT_Bitmap *source, FT_Bitmap *target ); 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. note source- buffer and target- buffer must neither be equal nor overlap. FT_Bitmap_Embolden Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Embolden ( FT_Library library, FT_Bitmap * bitmap, FT_Pos xStrength, FT_Pos yStrength ); Embolden a bitmap. The new bitmap will be about xStrength pixels wider and yStrength pixels higher. The left and bottom borders are kept unchanged. input library A handle to a library object. xStrength How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format. yStrength How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format. inout bitmap A handle to the target bitmap. return FreeType error code. 0 means success. note The current implementation restricts xStrength to be less than or equal to 8 if bitmap is of pixel_mode FT_PIXEL_MODE_MONO . If you want to embolden the bitmap owned by a FT_GlyphSlotRec , you should call FT_GlyphSlot_Own_Bitmap on the slot first. Bitmaps in FT_PIXEL_MODE_GRAY2 and FT_PIXEL_MODE_GRAY @ format are converted to FT_PIXEL_MODE_GRAY format (i.e., 8bpp). FT_Bitmap_Convert Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Convert ( FT_Library library, const FT_Bitmap *source, FT_Bitmap *target, FT_Int alignment ); Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to a bitmap object with depth 8bpp, making the number of used bytes 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 argument. 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. source- buffer and target- buffer must neither be equal nor overlap. FT_Bitmap_Blend Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Blend ( FT_Library library, const FT_Bitmap * source, const FT_Vector source_offset, FT_Bitmap * target, FT_Vector *atarget_offset, FT_Color color ); Blend a bitmap onto another bitmap, using a given color. input library A handle to a library object. source The source bitmap, which can have any FT_Pixel_Mode format. source_offset The offset vector to the upper left corner of the source bitmap in 26.6 pixel format. It should represent an integer offset; the function will set the lowest six bits to zero to enforce that. color The color used to draw source onto target . inout target A handle to an FT_Bitmap object. It should be either initialized as empty with a call to FT_Bitmap_Init , or it should be of type FT_PIXEL_MODE_BGRA . atarget_offset The offset vector to the upper left corner of the target bitmap in 26.6 pixel format. It should represent an integer offset; the function will set the lowest six bits to zero to enforce that. return FreeType error code. 0 means success. note This function doesn't perform clipping. The bitmap in target gets allocated or reallocated as needed; the vector atarget_offset is updated accordingly. In case of allocation or reallocation, the bitmap's pitch is set to 4 * width . Both source and target must have the same bitmap flow (as indicated by the sign of the pitch field). source- buffer and target- buffer must neither be equal nor overlap. since 2.10 FT_GlyphSlot_Own_Bitmap Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_GlyphSlot_Own_Bitmap ( FT_GlyphSlot slot ); Make sure that a glyph slot owns slot- bitmap . input slot The glyph slot. return FreeType error code. 0 means success. note This function is to be used in combination with FT_Bitmap_Embolden . FT_Bitmap_Done Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Done ( FT_Library library, FT_Bitmap *bitmap ); Destroy a bitmap object initialized with FT_Bitmap_Init . input library A handle to a library object. bitmap The bitmap object to be freed. return FreeType error code. 0 means success. note The library argument is taken to have access to FreeType's memory handling functions.","title":"Bitmap Handling"},{"location":"ft2-bitmap_handling.html#bitmap-handling","text":"","title":"Bitmap Handling"},{"location":"ft2-bitmap_handling.html#synopsis","text":"This section contains functions for handling FT_Bitmap objects, automatically adjusting the target's bitmap buffer size as needed. Note that none of the functions changes the bitmap's flow (as indicated by the sign of the pitch field in FT_Bitmap ). To set the flow, assign an appropriate positive or negative value to the pitch field of the target FT_Bitmap object after calling FT_Bitmap_Init but before calling any of the other functions described here.","title":"Synopsis"},{"location":"ft2-bitmap_handling.html#ft_bitmap_init","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( void ) FT_Bitmap_Init ( FT_Bitmap *abitmap ); /* deprecated */ FT_EXPORT( void ) FT_Bitmap_New( FT_Bitmap *abitmap ); Initialize a pointer to an FT_Bitmap structure.","title":"FT_Bitmap_Init"},{"location":"ft2-bitmap_handling.html#ft_bitmap_copy","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Copy ( FT_Library library, const FT_Bitmap *source, FT_Bitmap *target ); Copy a bitmap into another one.","title":"FT_Bitmap_Copy"},{"location":"ft2-bitmap_handling.html#ft_bitmap_embolden","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Embolden ( FT_Library library, FT_Bitmap * bitmap, FT_Pos xStrength, FT_Pos yStrength ); Embolden a bitmap. The new bitmap will be about xStrength pixels wider and yStrength pixels higher. The left and bottom borders are kept unchanged.","title":"FT_Bitmap_Embolden"},{"location":"ft2-bitmap_handling.html#ft_bitmap_convert","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Convert ( FT_Library library, const FT_Bitmap *source, FT_Bitmap *target, FT_Int alignment ); Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to a bitmap object with depth 8bpp, making the number of used bytes per line (a.k.a. the pitch ) a multiple of alignment .","title":"FT_Bitmap_Convert"},{"location":"ft2-bitmap_handling.html#ft_bitmap_blend","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Blend ( FT_Library library, const FT_Bitmap * source, const FT_Vector source_offset, FT_Bitmap * target, FT_Vector *atarget_offset, FT_Color color ); Blend a bitmap onto another bitmap, using a given color.","title":"FT_Bitmap_Blend"},{"location":"ft2-bitmap_handling.html#ft_glyphslot_own_bitmap","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_GlyphSlot_Own_Bitmap ( FT_GlyphSlot slot ); Make sure that a glyph slot owns slot- bitmap .","title":"FT_GlyphSlot_Own_Bitmap"},{"location":"ft2-bitmap_handling.html#ft_bitmap_done","text":"Defined in FT_BITMAP_H (freetype/ftbitmap.h). FT_EXPORT( FT_Error ) FT_Bitmap_Done ( FT_Library library, FT_Bitmap *bitmap ); Destroy a bitmap object initialized with FT_Bitmap_Init .","title":"FT_Bitmap_Done"},{"location":"ft2-bzip2.html","text":"FreeType Docs Support API BZIP2 Streams BZIP2 Streams Synopsis This section contains the declaration of Bzip2-specific functions. FT_Stream_OpenBzip2 Defined in FT_BZIP2_H (freetype/ftbzip2.h). FT_EXPORT( FT_Error ) FT_Stream_OpenBzip2 ( FT_Stream stream, FT_Stream source ); Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed *.pcf.bz2 fonts that come with XFree86. input stream The target embedding stream. source The source stream. return FreeType error code. 0 means success. note The source stream must be opened before calling this function. Calling the internal function FT_Stream_Close on the new stream will not call FT_Stream_Close on the source stream. None of the stream objects will be released to the heap. The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream. In certain builds of the library, bzip2 compression recognition is automatically handled when calling FT_New_Face or FT_Open_Face . This means that if no font driver is capable of handling the raw compressed file, the library will try to open a bzip2 compressed stream from it and re-open the face with it. This function may return FT_Err_Unimplemented_Feature if your build of FreeType was not compiled with bzip2 support.","title":"BZIP2 Streams"},{"location":"ft2-bzip2.html#bzip2-streams","text":"","title":"BZIP2 Streams"},{"location":"ft2-bzip2.html#synopsis","text":"This section contains the declaration of Bzip2-specific functions.","title":"Synopsis"},{"location":"ft2-bzip2.html#ft_stream_openbzip2","text":"Defined in FT_BZIP2_H (freetype/ftbzip2.h). FT_EXPORT( FT_Error ) FT_Stream_OpenBzip2 ( FT_Stream stream, FT_Stream source ); Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed *.pcf.bz2 fonts that come with XFree86.","title":"FT_Stream_OpenBzip2"},{"location":"ft2-cache_subsystem.html","text":"FreeType Docs Cache Sub-System Cache Sub-System Cache Sub-System Synopsis This section describes the FreeType 2 cache sub-system, which is used to limit the number of concurrently opened FT_Face and FT_Size objects, as well as caching information like character maps and glyph images while limiting their maximum memory usage. Note that all types and functions begin with the FTC_ prefix. The cache is highly portable and thus doesn't know anything about the fonts installed on your system, or how to access them. This implies the following scheme: First, available or installed font faces are uniquely identified by FTC_FaceID values, provided to the cache by the client. Note that the cache only stores and compares these values, and doesn't try to interpret them in any way. Second, the cache calls, only when needed, a client-provided function to convert an FTC_FaceID into a new FT_Face object. The latter is then completely managed by the cache, including its termination through FT_Done_Face . To monitor termination of face objects, the finalizer callback in the generic field of the FT_Face object can be used, which might also be used to store the FTC_FaceID of the face. Clients are free to map face IDs to anything else. The most simple usage is to associate them to a (pathname,face_index) pair that is used to call FT_New_Face . However, more complex schemes are also possible. Note that for the cache to work correctly, the face ID values must be persistent , which means that the contents they point to should not change at runtime, or that their value should not become invalid. If this is unavoidable (e.g., when a font is uninstalled at runtime), you should call FTC_Manager_RemoveFaceID as soon as possible, to let the cache get rid of any references to the old FTC_FaceID it may keep internally. Failure to do so will lead to incorrect behaviour or even crashes. To use the cache, start with calling FTC_Manager_New to create a new FTC_Manager object, which models a single cache instance. You can then look up FT_Face and FT_Size objects with FTC_Manager_LookupFace and FTC_Manager_LookupSize , respectively. If you want to use the charmap caching, call FTC_CMapCache_New , then later use FTC_CMapCache_Lookup to perform the equivalent of FT_Get_Char_Index , only much faster. If you want to use the FT_Glyph caching, call FTC_ImageCache , then later use FTC_ImageCache_Lookup to retrieve the corresponding FT_Glyph objects from the cache. If you need lots of small bitmaps, it is much more memory efficient to call FTC_SBitCache_New followed by FTC_SBitCache_Lookup . This returns FTC_SBitRec structures, which are used to store small bitmaps directly. (A small bitmap is one whose metrics and dimensions all fit into 8-bit integers). We hope to also provide a kerning cache in the near future. FTC_Manager Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ManagerRec_* FTC_Manager ; 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. FTC_FaceID Defined in FT_CACHE_H (freetype/ftcache.h). typedef FT_Pointer FTC_FaceID ; An opaque pointer type that is used to identity face objects. The contents of such objects is application-dependent. These pointers are typically used to point to a user-defined structure containing a font file path, and face index. note Never use NULL as a valid FTC_FaceID . Face IDs are passed by the client to the cache manager that calls, when needed, the FTC_Face_Requester to translate them into new FT_Face objects. If the content of a given face ID changes at runtime, or if the value becomes invalid (e.g., when uninstalling a font), you should immediately call FTC_Manager_RemoveFaceID before any other cache function. Failure to do so will result in incorrect behaviour or even memory leaks and crashes. FTC_Face_Requester Defined in FT_CACHE_H (freetype/ftcache.h). typedef FT_Error (* FTC_Face_Requester )( FTC_FaceID face_id, FT_Library library, FT_Pointer req_data, FT_Face * aface ); 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 ! FTC_Manager_New Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); 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. FTC_Manager_Reset Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_Reset ( FTC_Manager manager ); 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. FTC_Manager_Done Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_Done ( FTC_Manager manager ); Destroy a given manager after emptying it. input manager A handle to the target cache manager object. FTC_Manager_LookupFace Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_Manager_LookupFace ( FTC_Manager manager, FTC_FaceID face_id, FT_Face *aface ); 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. FTC_Manager_LookupSize Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_Manager_LookupSize ( FTC_Manager manager, FTC_Scaler scaler, FT_Size *asize ); 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. FTC_Manager_RemoveFaceID Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_RemoveFaceID ( FTC_Manager manager, FTC_FaceID face_id ); 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. FTC_Node Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_NodeRec_* FTC_Node ; An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of 0 might be flushed out of a full cache whenever a lookup request is performed. If you look up nodes, you have the ability to acquire them, i.e., to increment their reference count. This will prevent the node from being flushed out of the cache until you explicitly release it (see FTC_Node_Unref ). See also FTC_SBitCache_Lookup and FTC_ImageCache_Lookup . FTC_Node_Unref Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Node_Unref ( FTC_Node node, FTC_Manager manager ); 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. FTC_ImageCache Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageCacheRec_* FTC_ImageCache ; A handle to a glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold. FTC_ImageCache_New Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_ImageCache_New ( FTC_Manager manager, FTC_ImageCache *acache ); 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. FTC_ImageCache_Lookup Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_ImageCache_Lookup ( FTC_ImageCache cache, FTC_ImageType type, FT_UInt gindex, FT_Glyph *aglyph, FTC_Node *anode ); Retrieve a given glyph image from a glyph image cache. input cache A handle to the source glyph image cache. type A pointer to a glyph image type descriptor. gindex The glyph index to retrieve. output aglyph The corresponding FT_Glyph object. 0 in case of failure. anode Used to return the address of the corresponding cache node after incrementing its reference count (see note below). return FreeType error code. 0 means success. note The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with FT_Glyph_Copy and modify the new one. If anode is not NULL , it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the FT_Glyph ) will always be kept in the cache until you call FTC_Node_Unref to release it. If anode is NULL , the cache node is left unchanged, which means that the FT_Glyph could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! FTC_SBit Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_SBitRec_* FTC_SBit ; A handle to a small bitmap descriptor. See the FTC_SBitRec structure for details. FTC_SBitCache Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_SBitCacheRec_* FTC_SBitCache ; 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 . FTC_SBitCache_New Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_SBitCache_New ( FTC_Manager manager, FTC_SBitCache *acache ); 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. FTC_SBitCache_Lookup Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_SBitCache_Lookup ( FTC_SBitCache cache, FTC_ImageType type, FT_UInt gindex, FTC_SBit *sbit, FTC_Node *anode ); Look up a given small glyph bitmap in a given sbit cache and lock it to prevent its flushing from the cache until needed. input cache A handle to the source sbit cache. type A pointer to the glyph image type descriptor. gindex The glyph index. output sbit A handle to a small bitmap descriptor. anode Used to return the address of the corresponding cache node after incrementing its reference count (see note below). return FreeType error code. 0 means success. note The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data. The descriptor's buffer field is set to 0 to indicate a missing glyph bitmap. If anode is not NULL , it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call FTC_Node_Unref to release it. If anode is NULL , the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! FTC_CMapCache Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_CMapCacheRec_* FTC_CMapCache ; An opaque handle used to model a charmap cache. This cache is to hold character codes - glyph indices mappings. FTC_CMapCache_New Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_CMapCache_New ( FTC_Manager manager, FTC_CMapCache *acache ); 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. FTC_CMapCache_Lookup Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_UInt ) FTC_CMapCache_Lookup ( FTC_CMapCache cache, FTC_FaceID face_id, FT_Int cmap_index, FT_UInt32 char_code ); Translate a character code into a glyph index, using the charmap cache. input cache A charmap cache handle. face_id The source face ID. cmap_index The index of the charmap in the source face. Any negative value means to use the cache FT_Face 's default charmap. char_code The character code (in the corresponding charmap). return Glyph index. 0 means no glyph . FTC_ScalerRec Defined in FT_CACHE_H (freetype/ftcache.h). 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 ; 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. FTC_Scaler Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ScalerRec_* FTC_Scaler ; A handle to an FTC_ScalerRec structure. FTC_ImageTypeRec Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageTypeRec_ { FTC_FaceID face_id; FT_UInt width; FT_UInt height; FT_Int32 flags; } FTC_ImageTypeRec ; 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 . FTC_ImageType Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageTypeRec_* FTC_ImageType ; A handle to an FTC_ImageTypeRec structure. FTC_ImageCache_LookupScaler Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); A variant of FTC_ImageCache_Lookup that uses an FTC_ScalerRec to specify the face ID and its size. input cache A handle to the source glyph image cache. scaler A pointer to a scaler descriptor. load_flags The corresponding load flags. gindex The glyph index to retrieve. output aglyph The corresponding FT_Glyph object. 0 in case of failure. anode Used to return the address of the corresponding cache node after incrementing its reference count (see note below). return FreeType error code. 0 means success. note The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with FT_Glyph_Copy and modify the new one. If anode is not NULL , it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the FT_Glyph ) will always be kept in the cache until you call FTC_Node_Unref to release it. If anode is NULL , the cache node is left unchanged, which means that the FT_Glyph could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! Calls to FT_Set_Char_Size and friends have no effect on cached glyphs; you should always use the FreeType cache API instead. FTC_SBitRec Defined in FT_CACHE_H (freetype/ftcache.h). 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 ; 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. FTC_SBitCache_LookupScaler Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); A variant of FTC_SBitCache_Lookup that uses an FTC_ScalerRec to specify the face ID and its size. input cache A handle to the source sbit cache. scaler A pointer to the scaler descriptor. load_flags The corresponding load flags. gindex The glyph index. output sbit A handle to a small bitmap descriptor. anode Used to return the address of the corresponding cache node after incrementing its reference count (see note below). return FreeType error code. 0 means success. note The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data. The descriptor's buffer field is set to 0 to indicate a missing glyph bitmap. If anode is not NULL , it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call FTC_Node_Unref to release it. If anode is NULL , the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent!","title":"Cache Sub-System"},{"location":"ft2-cache_subsystem.html#cache-sub-system","text":"","title":"Cache Sub-System"},{"location":"ft2-cache_subsystem.html#synopsis","text":"This section describes the FreeType 2 cache sub-system, which is used to limit the number of concurrently opened FT_Face and FT_Size objects, as well as caching information like character maps and glyph images while limiting their maximum memory usage. Note that all types and functions begin with the FTC_ prefix. The cache is highly portable and thus doesn't know anything about the fonts installed on your system, or how to access them. This implies the following scheme: First, available or installed font faces are uniquely identified by FTC_FaceID values, provided to the cache by the client. Note that the cache only stores and compares these values, and doesn't try to interpret them in any way. Second, the cache calls, only when needed, a client-provided function to convert an FTC_FaceID into a new FT_Face object. The latter is then completely managed by the cache, including its termination through FT_Done_Face . To monitor termination of face objects, the finalizer callback in the generic field of the FT_Face object can be used, which might also be used to store the FTC_FaceID of the face. Clients are free to map face IDs to anything else. The most simple usage is to associate them to a (pathname,face_index) pair that is used to call FT_New_Face . However, more complex schemes are also possible. Note that for the cache to work correctly, the face ID values must be persistent , which means that the contents they point to should not change at runtime, or that their value should not become invalid. If this is unavoidable (e.g., when a font is uninstalled at runtime), you should call FTC_Manager_RemoveFaceID as soon as possible, to let the cache get rid of any references to the old FTC_FaceID it may keep internally. Failure to do so will lead to incorrect behaviour or even crashes. To use the cache, start with calling FTC_Manager_New to create a new FTC_Manager object, which models a single cache instance. You can then look up FT_Face and FT_Size objects with FTC_Manager_LookupFace and FTC_Manager_LookupSize , respectively. If you want to use the charmap caching, call FTC_CMapCache_New , then later use FTC_CMapCache_Lookup to perform the equivalent of FT_Get_Char_Index , only much faster. If you want to use the FT_Glyph caching, call FTC_ImageCache , then later use FTC_ImageCache_Lookup to retrieve the corresponding FT_Glyph objects from the cache. If you need lots of small bitmaps, it is much more memory efficient to call FTC_SBitCache_New followed by FTC_SBitCache_Lookup . This returns FTC_SBitRec structures, which are used to store small bitmaps directly. (A small bitmap is one whose metrics and dimensions all fit into 8-bit integers). We hope to also provide a kerning cache in the near future.","title":"Synopsis"},{"location":"ft2-cache_subsystem.html#ftc_manager","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ManagerRec_* FTC_Manager ; 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.","title":"FTC_Manager"},{"location":"ft2-cache_subsystem.html#ftc_faceid","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef FT_Pointer FTC_FaceID ; 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.","title":"FTC_FaceID"},{"location":"ft2-cache_subsystem.html#ftc_face_requester","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef FT_Error (* FTC_Face_Requester )( FTC_FaceID face_id, FT_Library library, FT_Pointer req_data, FT_Face * aface ); 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.","title":"FTC_Face_Requester"},{"location":"ft2-cache_subsystem.html#ftc_manager_new","text":"Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); Create a new cache manager.","title":"FTC_Manager_New"},{"location":"ft2-cache_subsystem.html#ftc_manager_reset","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_Reset ( FTC_Manager manager ); Empty a given cache manager. This simply gets rid of all the currently cached FT_Face and FT_Size objects within the manager.","title":"FTC_Manager_Reset"},{"location":"ft2-cache_subsystem.html#ftc_manager_done","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_Done ( FTC_Manager manager ); Destroy a given manager after emptying it.","title":"FTC_Manager_Done"},{"location":"ft2-cache_subsystem.html#ftc_manager_lookupface","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_Manager_LookupFace ( FTC_Manager manager, FTC_FaceID face_id, FT_Face *aface ); Retrieve the FT_Face object that corresponds to a given face ID through a cache manager.","title":"FTC_Manager_LookupFace"},{"location":"ft2-cache_subsystem.html#ftc_manager_lookupsize","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_Manager_LookupSize ( FTC_Manager manager, FTC_Scaler scaler, FT_Size *asize ); Retrieve the FT_Size object that corresponds to a given FTC_ScalerRec pointer through a cache manager.","title":"FTC_Manager_LookupSize"},{"location":"ft2-cache_subsystem.html#ftc_manager_removefaceid","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Manager_RemoveFaceID ( FTC_Manager manager, FTC_FaceID face_id ); 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.","title":"FTC_Manager_RemoveFaceID"},{"location":"ft2-cache_subsystem.html#ftc_node","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_NodeRec_* FTC_Node ; An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of 0 might be flushed out of a full cache whenever a lookup request is performed. If you look up nodes, you have the ability to acquire them, i.e., to increment their reference count. This will prevent the node from being flushed out of the cache until you explicitly release it (see FTC_Node_Unref ). See also FTC_SBitCache_Lookup and FTC_ImageCache_Lookup .","title":"FTC_Node"},{"location":"ft2-cache_subsystem.html#ftc_node_unref","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( void ) FTC_Node_Unref ( FTC_Node node, FTC_Manager manager ); Decrement a cache node's internal reference count. When the count reaches 0, it is not destroyed but becomes eligible for subsequent cache flushes.","title":"FTC_Node_Unref"},{"location":"ft2-cache_subsystem.html#ftc_imagecache","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageCacheRec_* FTC_ImageCache ; A handle to a glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.","title":"FTC_ImageCache"},{"location":"ft2-cache_subsystem.html#ftc_imagecache_new","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_ImageCache_New ( FTC_Manager manager, FTC_ImageCache *acache ); Create a new glyph image cache.","title":"FTC_ImageCache_New"},{"location":"ft2-cache_subsystem.html#ftc_imagecache_lookup","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_ImageCache_Lookup ( FTC_ImageCache cache, FTC_ImageType type, FT_UInt gindex, FT_Glyph *aglyph, FTC_Node *anode ); Retrieve a given glyph image from a glyph image cache.","title":"FTC_ImageCache_Lookup"},{"location":"ft2-cache_subsystem.html#ftc_sbit","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_SBitRec_* FTC_SBit ; A handle to a small bitmap descriptor. See the FTC_SBitRec structure for details.","title":"FTC_SBit"},{"location":"ft2-cache_subsystem.html#ftc_sbitcache","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_SBitCacheRec_* FTC_SBitCache ; 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 .","title":"FTC_SBitCache"},{"location":"ft2-cache_subsystem.html#ftc_sbitcache_new","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_SBitCache_New ( FTC_Manager manager, FTC_SBitCache *acache ); Create a new cache to store small glyph bitmaps.","title":"FTC_SBitCache_New"},{"location":"ft2-cache_subsystem.html#ftc_sbitcache_lookup","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_SBitCache_Lookup ( FTC_SBitCache cache, FTC_ImageType type, FT_UInt gindex, FTC_SBit *sbit, FTC_Node *anode ); Look up a given small glyph bitmap in a given sbit cache and lock it to prevent its flushing from the cache until needed.","title":"FTC_SBitCache_Lookup"},{"location":"ft2-cache_subsystem.html#ftc_cmapcache","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_CMapCacheRec_* FTC_CMapCache ; An opaque handle used to model a charmap cache. This cache is to hold character codes - glyph indices mappings.","title":"FTC_CMapCache"},{"location":"ft2-cache_subsystem.html#ftc_cmapcache_new","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_Error ) FTC_CMapCache_New ( FTC_Manager manager, FTC_CMapCache *acache ); Create a new charmap cache.","title":"FTC_CMapCache_New"},{"location":"ft2-cache_subsystem.html#ftc_cmapcache_lookup","text":"Defined in FT_CACHE_H (freetype/ftcache.h). FT_EXPORT( FT_UInt ) FTC_CMapCache_Lookup ( FTC_CMapCache cache, FTC_FaceID face_id, FT_Int cmap_index, FT_UInt32 char_code ); Translate a character code into a glyph index, using the charmap cache.","title":"FTC_CMapCache_Lookup"},{"location":"ft2-cache_subsystem.html#ftc_scalerrec","text":"Defined in FT_CACHE_H (freetype/ftcache.h). 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 ; A structure used to describe a given character size in either pixels or points to the cache manager. See FTC_Manager_LookupSize .","title":"FTC_ScalerRec"},{"location":"ft2-cache_subsystem.html#ftc_scaler","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ScalerRec_* FTC_Scaler ; A handle to an FTC_ScalerRec structure.","title":"FTC_Scaler"},{"location":"ft2-cache_subsystem.html#ftc_imagetyperec","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageTypeRec_ { FTC_FaceID face_id; FT_UInt width; FT_UInt height; FT_Int32 flags; } FTC_ImageTypeRec ; A structure used to model the type of images in a glyph cache.","title":"FTC_ImageTypeRec"},{"location":"ft2-cache_subsystem.html#ftc_imagetype","text":"Defined in FT_CACHE_H (freetype/ftcache.h). typedef struct FTC_ImageTypeRec_* FTC_ImageType ; A handle to an FTC_ImageTypeRec structure.","title":"FTC_ImageType"},{"location":"ft2-cache_subsystem.html#ftc_imagecache_lookupscaler","text":"Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); A variant of FTC_ImageCache_Lookup that uses an FTC_ScalerRec to specify the face ID and its size.","title":"FTC_ImageCache_LookupScaler"},{"location":"ft2-cache_subsystem.html#ftc_sbitrec","text":"Defined in FT_CACHE_H (freetype/ftcache.h). 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 ; A very compact structure used to describe a small glyph bitmap.","title":"FTC_SBitRec"},{"location":"ft2-cache_subsystem.html#ftc_sbitcache_lookupscaler","text":"Defined in FT_CACHE_H (freetype/ftcache.h). 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 ); A variant of FTC_SBitCache_Lookup that uses an FTC_ScalerRec to specify the face ID and its size.","title":"FTC_SBitCache_LookupScaler"},{"location":"ft2-cff_driver.html","text":"FreeType Docs Controlling FreeType Modules The CFF driver The CFF driver Synopsis While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The CFF driver's module name is cff . Available properties are hinting-engine , no-stem-darkening , darkening-parameters , and random-seed , as documented in the Driver properties section. Hinting and antialiasing principles of the new engine The rasterizer is positioning horizontal features (e.g., ascender height x-height, or crossbars) on the pixel grid and minimizing the amount of antialiasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, antialiasing means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance. There are two principles behind this approach. 1) No hinting in the horizontal direction: Unlike superhinted TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is faithful to the design in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied. One of the reasons to not hint horizontally is antialiasing for LCD screens: The pixel geometry of modern displays supplies three vertical subpixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the subpixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale antialiasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would. 2) Alignment in the vertical direction: Weights and spacing along the y axis are less critical; what is much more important is the visual alignment of related features (like cap-height and x-height). The sense of alignment for these is enhanced by the sharpness of grid-fit edges, while the cruder vertical resolution (full pixels instead of pixels) is less of a problem. On the technical side, horizontal alignment zones for ascender, x-height, and other important height values (traditionally called blue zones ) as defined in the font are positioned independently, each being rounded to the nearest pixel edge, taking care of overshoot suppression at small sizes, stem darkening, and scaling. Hstems (this is, hint values defined in the font to help align horizontal features) that fall within a blue zone are said to be captured and are aligned to that zone. Uncaptured stems are moved in one of four ways, top edge up or down, bottom edge up or down. Unless there are conflicting hstems, the smallest movement is taken to minimize distortion.","title":"The CFF driver"},{"location":"ft2-cff_driver.html#the-cff-driver","text":"","title":"The CFF driver"},{"location":"ft2-cff_driver.html#synopsis","text":"While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The CFF driver's module name is cff . Available properties are hinting-engine , no-stem-darkening , darkening-parameters , and random-seed , as documented in the Driver properties section. Hinting and antialiasing principles of the new engine The rasterizer is positioning horizontal features (e.g., ascender height x-height, or crossbars) on the pixel grid and minimizing the amount of antialiasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, antialiasing means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance. There are two principles behind this approach. 1) No hinting in the horizontal direction: Unlike superhinted TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is faithful to the design in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied. One of the reasons to not hint horizontally is antialiasing for LCD screens: The pixel geometry of modern displays supplies three vertical subpixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the subpixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale antialiasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would. 2) Alignment in the vertical direction: Weights and spacing along the y axis are less critical; what is much more important is the visual alignment of related features (like cap-height and x-height). The sense of alignment for these is enhanced by the sharpness of grid-fit edges, while the cruder vertical resolution (full pixels instead of pixels) is less of a problem. On the technical side, horizontal alignment zones for ascender, x-height, and other important height values (traditionally called blue zones ) as defined in the font are positioned independently, each being rounded to the nearest pixel edge, taking care of overshoot suppression at small sizes, stem darkening, and scaling. Hstems (this is, hint values defined in the font to help align horizontal features) that fall within a blue zone are said to be captured and are aligned to that zone. Uncaptured stems are moved in one of four ways, top edge up or down, bottom edge up or down. Unless there are conflicting hstems, the smallest movement is taken to minimize distortion.","title":"Synopsis"},{"location":"ft2-cid_fonts.html","text":"FreeType Docs Format-Specific API CID Fonts CID Fonts Synopsis This section contains the declaration of CID-keyed font-specific functions. FT_Get_CID_Registry_Ordering_Supplement Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_Registry_Ordering_Supplement ( FT_Face face, const char * *registry, const char * *ordering, FT_Int *supplement ); 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_Get_CID_Is_Internally_CID_Keyed Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_Is_Internally_CID_Keyed ( FT_Face face, FT_Bool *is_cid ); Retrieve the type of the input face, CID keyed or not. In contrast to the FT_IS_CID_KEYED macro this function returns successfully also for CID-keyed fonts in an SFNT wrapper. input face A handle to the input face. output is_cid The type of the face as an FT_Bool . return FreeType error code. 0 means success. note This function only works with CID faces and OpenType fonts, returning an error otherwise. since 2.3.9 FT_Get_CID_From_Glyph_Index Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_From_Glyph_Index ( FT_Face face, FT_UInt glyph_index, FT_UInt *cid ); Retrieve the CID of the input glyph index. input face A handle to the input face. glyph_index The input glyph index. output cid The CID as an FT_UInt . return FreeType error code. 0 means success. note This function only works with CID faces and OpenType fonts, returning an error otherwise. since 2.3.9","title":"CID Fonts"},{"location":"ft2-cid_fonts.html#cid-fonts","text":"","title":"CID Fonts"},{"location":"ft2-cid_fonts.html#synopsis","text":"This section contains the declaration of CID-keyed font-specific functions.","title":"Synopsis"},{"location":"ft2-cid_fonts.html#ft_get_cid_registry_ordering_supplement","text":"Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_Registry_Ordering_Supplement ( FT_Face face, const char * *registry, const char * *ordering, FT_Int *supplement ); Retrieve the Registry/Ordering/Supplement triple (also known as the \"R/O/S\") from a CID-keyed font.","title":"FT_Get_CID_Registry_Ordering_Supplement"},{"location":"ft2-cid_fonts.html#ft_get_cid_is_internally_cid_keyed","text":"Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_Is_Internally_CID_Keyed ( FT_Face face, FT_Bool *is_cid ); Retrieve the type of the input face, CID keyed or not. In contrast to the FT_IS_CID_KEYED macro this function returns successfully also for CID-keyed fonts in an SFNT wrapper.","title":"FT_Get_CID_Is_Internally_CID_Keyed"},{"location":"ft2-cid_fonts.html#ft_get_cid_from_glyph_index","text":"Defined in FT_CID_H (freetype/ftcid.h). FT_EXPORT( FT_Error ) FT_Get_CID_From_Glyph_Index ( FT_Face face, FT_UInt glyph_index, FT_UInt *cid ); Retrieve the CID of the input glyph index.","title":"FT_Get_CID_From_Glyph_Index"},{"location":"ft2-color_management.html","text":"FreeType Docs Core API Glyph Color Management Glyph Color Management Synopsis The functions described here allow access and manipulation of color palette entries in OpenType's CPAL tables. FT_Color Defined in FT_COLOR_H (freetype/ftcolor.h). typedef struct FT_Color_ { FT_Byte blue; FT_Byte green; FT_Byte red; FT_Byte alpha; } FT_Color ; This structure models a BGRA color value of a CPAL palette entry. The used color space is sRGB; the colors are not pre-multiplied, and alpha values must be explicitly set. fields blue Blue value. green Green value. red Red value. alpha Alpha value, giving the red, green, and blue color's opacity. since 2.10 FT_PALETTE_XXX Defined in FT_COLOR_H (freetype/ftcolor.h). # define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 # define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 A list of bit field constants used in the palette_flags array of the FT_Palette_Data structure to indicate for which background a palette with a given index is usable. values FT_PALETTE_FOR_LIGHT_BACKGROUND The palette is appropriate to use when displaying the font on a light background such as white. FT_PALETTE_FOR_DARK_BACKGROUND The palette is appropriate to use when displaying the font on a dark background such as black. since 2.10 FT_Palette_Data Defined in FT_COLOR_H (freetype/ftcolor.h). typedef struct FT_Palette_Data_ { FT_UShort num_palettes; const FT_UShort * palette_name_ids; const FT_UShort * palette_flags; FT_UShort num_palette_entries; const FT_UShort * palette_entry_name_ids; } FT_Palette_Data ; This structure holds the data of the CPAL table. fields num_palettes The number of palettes. palette_name_ids A read-only array of palette name IDs with num_palettes elements, corresponding to entries like dark or light in the font's name table. An empty name ID in the CPAL table gets represented as value 0xFFFF. NULL if the font's CPAL table doesn't contain appropriate data. palette_flags A read-only array of palette flags with num_palettes elements. Possible values are an ORed combination of FT_PALETTE_FOR_LIGHT_BACKGROUND and FT_PALETTE_FOR_DARK_BACKGROUND . NULL if the font's CPAL table doesn't contain appropriate data. num_palette_entries The number of entries in a single palette. All palettes have the same size. palette_entry_name_ids A read-only array of palette entry name IDs with num_palette_entries . In each palette, entries with the same index have the same function. For example, index 0 might correspond to string outline in the font's name table to indicate that this palette entry is used for outlines, index 1 might correspond to fill to indicate the filling color palette entry, etc. An empty entry name ID in the CPAL table gets represented as value 0xFFFF. NULL if the font's CPAL table doesn't contain appropriate data. note Use function FT_Get_Sfnt_Name to map name IDs and entry name IDs to name strings. since 2.10 FT_Palette_Data_Get Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Data_Get ( FT_Face face, FT_Palette_Data *apalette ); Retrieve the face's color palette data. input face The source face handle. output apalette A pointer to an FT_Palette_Data structure. return FreeType error code. 0 means success. note All arrays in the returned FT_Palette_Data structure are read-only. This function always returns an error if the config macro TT_CONFIG_OPTION_COLOR_LAYERS is not defined in ftoption.h . since 2.10 FT_Palette_Select Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Select ( FT_Face face, FT_UShort palette_index, FT_Color * *apalette ); This function has two purposes. (1) It activates a palette for rendering color glyphs, and (2) it retrieves all (unmodified) color entries of this palette. This function returns a read-write array, which means that a calling application can modify the palette entries on demand. A corollary of (2) is that calling the function, then modifying some values, then calling the function again with the same arguments resets all color entries to the original CPAL values; all user modifications are lost. input face The source face handle. palette_index The palette index. output apalette An array of color entries for a palette with index palette_index , having num_palette_entries elements (as found in the FT_Palette_Data structure). If apalette is set to NULL , no array gets returned (and no color entries can be modified). In case the font doesn't support color palettes, NULL is returned. return FreeType error code. 0 means success. note The array pointed to by apalette_entries is owned and managed by FreeType. This function always returns an error if the config macro TT_CONFIG_OPTION_COLOR_LAYERS is not defined in ftoption.h . since 2.10 FT_Palette_Set_Foreground_Color Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Set_Foreground_Color ( FT_Face face, FT_Color foreground_color ); COLR uses palette index 0xFFFF to indicate a text foreground color . This function sets this value. input face The source face handle. foreground_color An FT_Color structure to define the text foreground color. return FreeType error code. 0 means success. note If this function isn't called, the text foreground color is set to white opaque (BGRA value 0xFFFFFFFF) if FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette, and black opaque (BGRA value 0x000000FF) otherwise, including the case that no palette types are available in the CPAL table. This function always returns an error if the config macro TT_CONFIG_OPTION_COLOR_LAYERS is not defined in ftoption.h . since 2.10","title":"Glyph Color Management"},{"location":"ft2-color_management.html#glyph-color-management","text":"","title":"Glyph Color Management"},{"location":"ft2-color_management.html#synopsis","text":"The functions described here allow access and manipulation of color palette entries in OpenType's CPAL tables.","title":"Synopsis"},{"location":"ft2-color_management.html#ft_color","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). typedef struct FT_Color_ { FT_Byte blue; FT_Byte green; FT_Byte red; FT_Byte alpha; } FT_Color ; This structure models a BGRA color value of a CPAL palette entry. The used color space is sRGB; the colors are not pre-multiplied, and alpha values must be explicitly set.","title":"FT_Color"},{"location":"ft2-color_management.html#ft_palette_xxx","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). # define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 # define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 A list of bit field constants used in the palette_flags array of the FT_Palette_Data structure to indicate for which background a palette with a given index is usable.","title":"FT_PALETTE_XXX"},{"location":"ft2-color_management.html#ft_palette_data","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). typedef struct FT_Palette_Data_ { FT_UShort num_palettes; const FT_UShort * palette_name_ids; const FT_UShort * palette_flags; FT_UShort num_palette_entries; const FT_UShort * palette_entry_name_ids; } FT_Palette_Data ; This structure holds the data of the CPAL table.","title":"FT_Palette_Data"},{"location":"ft2-color_management.html#ft_palette_data_get","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Data_Get ( FT_Face face, FT_Palette_Data *apalette ); Retrieve the face's color palette data.","title":"FT_Palette_Data_Get"},{"location":"ft2-color_management.html#ft_palette_select","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Select ( FT_Face face, FT_UShort palette_index, FT_Color * *apalette ); This function has two purposes. (1) It activates a palette for rendering color glyphs, and (2) it retrieves all (unmodified) color entries of this palette. This function returns a read-write array, which means that a calling application can modify the palette entries on demand. A corollary of (2) is that calling the function, then modifying some values, then calling the function again with the same arguments resets all color entries to the original CPAL values; all user modifications are lost.","title":"FT_Palette_Select"},{"location":"ft2-color_management.html#ft_palette_set_foreground_color","text":"Defined in FT_COLOR_H (freetype/ftcolor.h). FT_EXPORT( FT_Error ) FT_Palette_Set_Foreground_Color ( FT_Face face, FT_Color foreground_color ); COLR uses palette index 0xFFFF to indicate a text foreground color . This function sets this value.","title":"FT_Palette_Set_Foreground_Color"},{"location":"ft2-computations.html","text":"FreeType Docs Support API Computations Computations Synopsis This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors. Attention : Most arithmetic functions take FT_Long as arguments. For historical reasons, FreeType was designed under the assumption that FT_Long is a 32-bit integer; results can thus be undefined if the arguments don't fit into 32 bits. FT_MulDiv Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_MulDiv ( FT_Long a, FT_Long b, FT_Long c ); Compute (a*b)/c with maximum accuracy, using a 64-bit intermediate integer whenever necessary. This function isn't necessarily as fast as some processor-specific operations, but is at least completely portable. input a The first multiplier. b The second multiplier. c The divisor. return The result of (a*b)/c . This function never traps when trying to divide by zero; it simply returns MaxInt or MinInt depending on the signs of a and b . FT_MulFix Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_MulFix ( FT_Long a, FT_Long b ); Compute (a*b)/0x10000 with maximum accuracy. Its main use is to multiply a given value by a 16.16 fixed-point factor. input a The first multiplier. b The second multiplier. Use a 16.16 factor here whenever possible (see note below). return The result of (a*b)/0x10000 . note This function has been optimized for the case where the absolute value of a is less than 2048, and b is a 16.16 scaling factor. As this happens mainly when scaling from notional units to fractional pixels in FreeType, it resulted in noticeable speed improvements between versions 2.x and 1.x. As a conclusion, always try to place a 16.16 factor as the second argument of this function; this can make a great difference. FT_DivFix Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_DivFix ( FT_Long a, FT_Long b ); Compute (a*0x10000)/b with maximum accuracy. Its main use is to divide a given value by a 16.16 fixed-point factor. input a The numerator. b The denominator. Use a 16.16 factor here. return The result of (a*0x10000)/b . FT_RoundFix Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_RoundFix ( FT_Fixed a ); Round a 16.16 fixed number. input a The number to be rounded. return a rounded to the nearest 16.16 fixed integer, halfway cases away from zero. note The function uses wrap-around arithmetic. FT_CeilFix Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_CeilFix ( FT_Fixed a ); Compute the smallest following integer of a 16.16 fixed number. input a The number for which the ceiling function is to be computed. return a rounded towards plus infinity. note The function uses wrap-around arithmetic. FT_FloorFix Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_FloorFix ( FT_Fixed a ); Compute the largest previous integer of a 16.16 fixed number. input a The number for which the floor function is to be computed. return a rounded towards minus infinity. FT_Vector_Transform Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Vector_Transform ( FT_Vector * vector, const FT_Matrix * matrix ); 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_Matrix_Multiply Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Matrix_Multiply ( const FT_Matrix * a, FT_Matrix * b ); Perform the matrix operation b = a*b . input a A pointer to matrix a . inout b A pointer to matrix b . note The result is undefined if either a or b is zero. Since the function uses wrap-around arithmetic, results become meaningless if the arguments are very large. FT_Matrix_Invert Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Matrix_Invert ( FT_Matrix * matrix ); 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_Angle Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). typedef FT_Fixed FT_Angle ; This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed-point value expressed in degrees. FT_ANGLE_PI Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI ( 180L 16 ) The angle pi expressed in FT_Angle units. FT_ANGLE_2PI Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) The angle 2*pi expressed in FT_Angle units. FT_ANGLE_PI2 Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) The angle pi/2 expressed in FT_Angle units. FT_ANGLE_PI4 Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) The angle pi/4 expressed in FT_Angle units. FT_Sin Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Sin ( FT_Angle angle ); 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_Cos Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Cos ( FT_Angle angle ); 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_Tan Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Tan ( FT_Angle angle ); Return the tangent of a given angle in fixed-point format. input angle The input angle. return The tangent value. FT_Atan2 Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Angle ) FT_Atan2 ( FT_Fixed x, FT_Fixed y ); 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_Angle_Diff Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Angle ) FT_Angle_Diff ( FT_Angle angle1, FT_Angle angle2 ); 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 angle2-angle1 . FT_Vector_Unit Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Unit ( FT_Vector * vec, FT_Angle angle ); Return the unit vector corresponding to a given angle. After the call, the value of vec.x will be cos(angle) , and the value of vec.y will be sin(angle) . This function is useful to retrieve both the sinus and cosinus of a given angle quickly. output vec The address of target vector. input angle The input angle. FT_Vector_Rotate Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Rotate ( FT_Vector * vec, FT_Angle angle ); Rotate a vector by a given angle. inout vec The address of target vector. input angle The input angle. FT_Vector_Length Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Vector_Length ( FT_Vector * vec ); 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_Vector_Polarize Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Polarize ( FT_Vector * vec, FT_Fixed *length, FT_Angle *angle ); 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_Vector_From_Polar Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_From_Polar ( FT_Vector * vec, FT_Fixed length, FT_Angle angle ); Compute vector coordinates from a length and angle. output vec The address of source vector. input length The vector length. angle The vector angle.","title":"Computations"},{"location":"ft2-computations.html#computations","text":"","title":"Computations"},{"location":"ft2-computations.html#synopsis","text":"This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors. Attention : Most arithmetic functions take FT_Long as arguments. For historical reasons, FreeType was designed under the assumption that FT_Long is a 32-bit integer; results can thus be undefined if the arguments don't fit into 32 bits.","title":"Synopsis"},{"location":"ft2-computations.html#ft_muldiv","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_MulDiv ( FT_Long a, FT_Long b, FT_Long c ); Compute (a*b)/c with maximum accuracy, using a 64-bit intermediate integer whenever necessary. This function isn't necessarily as fast as some processor-specific operations, but is at least completely portable.","title":"FT_MulDiv"},{"location":"ft2-computations.html#ft_mulfix","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_MulFix ( FT_Long a, FT_Long b ); Compute (a*b)/0x10000 with maximum accuracy. Its main use is to multiply a given value by a 16.16 fixed-point factor.","title":"FT_MulFix"},{"location":"ft2-computations.html#ft_divfix","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Long ) FT_DivFix ( FT_Long a, FT_Long b ); Compute (a*0x10000)/b with maximum accuracy. Its main use is to divide a given value by a 16.16 fixed-point factor.","title":"FT_DivFix"},{"location":"ft2-computations.html#ft_roundfix","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_RoundFix ( FT_Fixed a ); Round a 16.16 fixed number.","title":"FT_RoundFix"},{"location":"ft2-computations.html#ft_ceilfix","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_CeilFix ( FT_Fixed a ); Compute the smallest following integer of a 16.16 fixed number.","title":"FT_CeilFix"},{"location":"ft2-computations.html#ft_floorfix","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Fixed ) FT_FloorFix ( FT_Fixed a ); Compute the largest previous integer of a 16.16 fixed number.","title":"FT_FloorFix"},{"location":"ft2-computations.html#ft_vector_transform","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Vector_Transform ( FT_Vector * vector, const FT_Matrix * matrix ); Transform a single vector through a 2x2 matrix.","title":"FT_Vector_Transform"},{"location":"ft2-computations.html#ft_matrix_multiply","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Matrix_Multiply ( const FT_Matrix * a, FT_Matrix * b ); Perform the matrix operation b = a*b .","title":"FT_Matrix_Multiply"},{"location":"ft2-computations.html#ft_matrix_invert","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Matrix_Invert ( FT_Matrix * matrix ); Invert a 2x2 matrix. Return an error if it can't be inverted.","title":"FT_Matrix_Invert"},{"location":"ft2-computations.html#ft_angle","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). typedef FT_Fixed FT_Angle ; This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed-point value expressed in degrees.","title":"FT_Angle"},{"location":"ft2-computations.html#ft_angle_pi","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI ( 180L 16 ) The angle pi expressed in FT_Angle units.","title":"FT_ANGLE_PI"},{"location":"ft2-computations.html#ft_angle_2pi","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) The angle 2*pi expressed in FT_Angle units.","title":"FT_ANGLE_2PI"},{"location":"ft2-computations.html#ft_angle_pi2","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) The angle pi/2 expressed in FT_Angle units.","title":"FT_ANGLE_PI2"},{"location":"ft2-computations.html#ft_angle_pi4","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). # define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) The angle pi/4 expressed in FT_Angle units.","title":"FT_ANGLE_PI4"},{"location":"ft2-computations.html#ft_sin","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Sin ( FT_Angle angle ); Return the sinus of a given angle in fixed-point format.","title":"FT_Sin"},{"location":"ft2-computations.html#ft_cos","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Cos ( FT_Angle angle ); Return the cosinus of a given angle in fixed-point format.","title":"FT_Cos"},{"location":"ft2-computations.html#ft_tan","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Tan ( FT_Angle angle ); Return the tangent of a given angle in fixed-point format.","title":"FT_Tan"},{"location":"ft2-computations.html#ft_atan2","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Angle ) FT_Atan2 ( FT_Fixed x, FT_Fixed y ); Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.","title":"FT_Atan2"},{"location":"ft2-computations.html#ft_angle_diff","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Angle ) FT_Angle_Diff ( FT_Angle angle1, FT_Angle angle2 ); Return the difference between two angles. The result is always constrained to the ]-PI..PI] interval.","title":"FT_Angle_Diff"},{"location":"ft2-computations.html#ft_vector_unit","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Unit ( FT_Vector * vec, FT_Angle angle ); Return the unit vector corresponding to a given angle. After the call, the value of vec.x will be cos(angle) , and the value of vec.y will be sin(angle) . This function is useful to retrieve both the sinus and cosinus of a given angle quickly.","title":"FT_Vector_Unit"},{"location":"ft2-computations.html#ft_vector_rotate","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Rotate ( FT_Vector * vec, FT_Angle angle ); Rotate a vector by a given angle.","title":"FT_Vector_Rotate"},{"location":"ft2-computations.html#ft_vector_length","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( FT_Fixed ) FT_Vector_Length ( FT_Vector * vec ); Return the length of a given vector.","title":"FT_Vector_Length"},{"location":"ft2-computations.html#ft_vector_polarize","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_Polarize ( FT_Vector * vec, FT_Fixed *length, FT_Angle *angle ); Compute both the length and angle of a given vector.","title":"FT_Vector_Polarize"},{"location":"ft2-computations.html#ft_vector_from_polar","text":"Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h). FT_EXPORT( void ) FT_Vector_From_Polar ( FT_Vector * vec, FT_Fixed length, FT_Angle angle ); Compute vector coordinates from a length and angle.","title":"FT_Vector_From_Polar"},{"location":"ft2-error_code_values.html","text":"FreeType Docs Error Codes Error Code Values Error Code Values Synopsis The list below is taken verbatim from the file fterrdef.h (loaded automatically by including FT_FREETYPE_H ). The first argument of the FT_ERROR_DEF_ macro is the error label; by default, the prefix FT_Err_ gets added so that you get error names like FT_Err_Cannot_Open_Resource . The second argument is the error code, and the last argument an error string, which is not used by FreeType. Within your application you should only use error names and never its numeric values! The latter might (and actually do) change in forthcoming FreeType versions. Macro FT_NOERRORDEF_ defines FT_Err_Ok , which is always zero. See the Error Enumerations subsection how to automatically generate a list of error strings. FT_Err_XXX /* generic errors */ FT_NOERRORDEF_( Ok, 0x00, \"no error\" ) FT_ERRORDEF_( Cannot_Open_Resource, 0x01, \"cannot open resource\" ) FT_ERRORDEF_( Unknown_File_Format, 0x02, \"unknown file format\" ) FT_ERRORDEF_( Invalid_File_Format, 0x03, \"broken file\" ) FT_ERRORDEF_( Invalid_Version, 0x04, \"invalid FreeType version\" ) FT_ERRORDEF_( Lower_Module_Version, 0x05, \"module version is too low\" ) FT_ERRORDEF_( Invalid_Argument, 0x06, \"invalid argument\" ) FT_ERRORDEF_( Unimplemented_Feature, 0x07, \"unimplemented feature\" ) FT_ERRORDEF_( Invalid_Table, 0x08, \"broken table\" ) FT_ERRORDEF_( Invalid_Offset, 0x09, \"broken offset within table\" ) FT_ERRORDEF_( Array_Too_Large, 0x0A, \"array allocation size too large\" ) FT_ERRORDEF_( Missing_Module, 0x0B, \"missing module\" ) FT_ERRORDEF_( Missing_Property, 0x0C, \"missing property\" ) /* glyph/character errors */ FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, \"invalid glyph index\" ) FT_ERRORDEF_( Invalid_Character_Code, 0x11, \"invalid character code\" ) FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, \"unsupported glyph image format\" ) FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, \"cannot render this glyph format\" ) FT_ERRORDEF_( Invalid_Outline, 0x14, \"invalid outline\" ) FT_ERRORDEF_( Invalid_Composite, 0x15, \"invalid composite glyph\" ) FT_ERRORDEF_( Too_Many_Hints, 0x16, \"too many hints\" ) FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, \"invalid pixel size\" ) /* handle errors */ FT_ERRORDEF_( Invalid_Handle, 0x20, \"invalid object handle\" ) FT_ERRORDEF_( Invalid_Library_Handle, 0x21, \"invalid library handle\" ) FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, \"invalid module handle\" ) FT_ERRORDEF_( Invalid_Face_Handle, 0x23, \"invalid face handle\" ) FT_ERRORDEF_( Invalid_Size_Handle, 0x24, \"invalid size handle\" ) FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, \"invalid glyph slot handle\" ) FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, \"invalid charmap handle\" ) FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, \"invalid cache manager handle\" ) FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, \"invalid stream handle\" ) /* driver errors */ FT_ERRORDEF_( Too_Many_Drivers, 0x30, \"too many modules\" ) FT_ERRORDEF_( Too_Many_Extensions, 0x31, \"too many extensions\" ) /* memory errors */ FT_ERRORDEF_( Out_Of_Memory, 0x40, \"out of memory\" ) FT_ERRORDEF_( Unlisted_Object, 0x41, \"unlisted object\" ) /* stream errors */ FT_ERRORDEF_( Cannot_Open_Stream, 0x51, \"cannot open stream\" ) FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, \"invalid stream seek\" ) FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, \"invalid stream skip\" ) FT_ERRORDEF_( Invalid_Stream_Read, 0x54, \"invalid stream read\" ) FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, \"invalid stream operation\" ) FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, \"invalid frame operation\" ) FT_ERRORDEF_( Nested_Frame_Access, 0x57, \"nested frame access\" ) FT_ERRORDEF_( Invalid_Frame_Read, 0x58, \"invalid frame read\" ) /* raster errors */ FT_ERRORDEF_( Raster_Uninitialized, 0x60, \"raster uninitialized\" ) FT_ERRORDEF_( Raster_Corrupted, 0x61, \"raster corrupted\" ) FT_ERRORDEF_( Raster_Overflow, 0x62, \"raster overflow\" ) FT_ERRORDEF_( Raster_Negative_Height, 0x63, \"negative height while rastering\" ) /* cache errors */ FT_ERRORDEF_( Too_Many_Caches, 0x70, \"too many registered caches\" ) /* TrueType and SFNT errors */ FT_ERRORDEF_( Invalid_Opcode, 0x80, \"invalid opcode\" ) FT_ERRORDEF_( Too_Few_Arguments, 0x81, \"too few arguments\" ) FT_ERRORDEF_( Stack_Overflow, 0x82, \"stack overflow\" ) FT_ERRORDEF_( Code_Overflow, 0x83, \"code overflow\" ) FT_ERRORDEF_( Bad_Argument, 0x84, \"bad argument\" ) FT_ERRORDEF_( Divide_By_Zero, 0x85, \"division by zero\" ) FT_ERRORDEF_( Invalid_Reference, 0x86, \"invalid reference\" ) FT_ERRORDEF_( Debug_OpCode, 0x87, \"found debug opcode\" ) FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, \"found ENDF opcode in execution stream\" ) FT_ERRORDEF_( Nested_DEFS, 0x89, \"nested DEFS\" ) FT_ERRORDEF_( Invalid_CodeRange, 0x8A, \"invalid code range\" ) FT_ERRORDEF_( Execution_Too_Long, 0x8B, \"execution context too long \" ) FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, \"too many function definitions\" ) FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, \"too many instruction definitions\" ) FT_ERRORDEF_( Table_Missing, 0x8E, \"SFNT font table missing\" ) FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, \"horizontal header (hhea) table missing\" ) FT_ERRORDEF_( Locations_Missing, 0x90, \"locations (loca) table missing\" ) FT_ERRORDEF_( Name_Table_Missing, 0x91, \"name table missing\" ) FT_ERRORDEF_( CMap_Table_Missing, 0x92, \"character map (cmap) table missing\" ) FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, \"horizontal metrics (hmtx) table missing\" ) FT_ERRORDEF_( Post_Table_Missing, 0x94, \"PostScript (post) table missing\" ) FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, \"invalid horizontal metrics\" ) FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, \"invalid character map (cmap) format\" ) FT_ERRORDEF_( Invalid_PPem, 0x97, \"invalid ppem value\" ) FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, \"invalid vertical metrics\" ) FT_ERRORDEF_( Could_Not_Find_Context, 0x99, \"could not find context\" ) FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, \"invalid PostScript (post) table format\" ) FT_ERRORDEF_( Invalid_Post_Table, 0x9B, \"invalid PostScript (post) table\" ) FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, \"found FDEF or IDEF opcode in glyf bytecode\" ) FT_ERRORDEF_( Missing_Bitmap, 0x9D, \"missing bitmap in strike\" ) /* CFF, CID, and Type 1 errors */ FT_ERRORDEF_( Syntax_Error, 0xA0, \"opcode syntax error\" ) FT_ERRORDEF_( Stack_Underflow, 0xA1, \"argument stack underflow\" ) FT_ERRORDEF_( Ignore, 0xA2, \"ignore\" ) FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3, \"no Unicode glyph name found\" ) FT_ERRORDEF_( Glyph_Too_Big, 0xA4, \"glyph too big for hinting\" ) /* BDF errors */ FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, \"`STARTFONT' field missing\" ) FT_ERRORDEF_( Missing_Font_Field, 0xB1, \"`FONT' field missing\" ) FT_ERRORDEF_( Missing_Size_Field, 0xB2, \"`SIZE' field missing\" ) FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3, \"`FONTBOUNDINGBOX' field missing\" ) FT_ERRORDEF_( Missing_Chars_Field, 0xB4, \"`CHARS' field missing\" ) FT_ERRORDEF_( Missing_Startchar_Field, 0xB5, \"`STARTCHAR' field missing\" ) FT_ERRORDEF_( Missing_Encoding_Field, 0xB6, \"`ENCODING' field missing\" ) FT_ERRORDEF_( Missing_Bbx_Field, 0xB7, \"`BBX' field missing\" ) FT_ERRORDEF_( Bbx_Too_Big, 0xB8, \"`BBX' too big\" ) FT_ERRORDEF_( Corrupted_Font_Header, 0xB9, \"Font header corrupted or missing fields\" ) FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA, \"Font glyphs corrupted or missing fields\" )","title":"Error Code Values"},{"location":"ft2-error_code_values.html#error-code-values","text":"","title":"Error Code Values"},{"location":"ft2-error_code_values.html#synopsis","text":"The list below is taken verbatim from the file fterrdef.h (loaded automatically by including FT_FREETYPE_H ). The first argument of the FT_ERROR_DEF_ macro is the error label; by default, the prefix FT_Err_ gets added so that you get error names like FT_Err_Cannot_Open_Resource . The second argument is the error code, and the last argument an error string, which is not used by FreeType. Within your application you should only use error names and never its numeric values! The latter might (and actually do) change in forthcoming FreeType versions. Macro FT_NOERRORDEF_ defines FT_Err_Ok , which is always zero. See the Error Enumerations subsection how to automatically generate a list of error strings.","title":"Synopsis"},{"location":"ft2-error_code_values.html#ft_err_xxx","text":"/* generic errors */ FT_NOERRORDEF_( Ok, 0x00, \"no error\" ) FT_ERRORDEF_( Cannot_Open_Resource, 0x01, \"cannot open resource\" ) FT_ERRORDEF_( Unknown_File_Format, 0x02, \"unknown file format\" ) FT_ERRORDEF_( Invalid_File_Format, 0x03, \"broken file\" ) FT_ERRORDEF_( Invalid_Version, 0x04, \"invalid FreeType version\" ) FT_ERRORDEF_( Lower_Module_Version, 0x05, \"module version is too low\" ) FT_ERRORDEF_( Invalid_Argument, 0x06, \"invalid argument\" ) FT_ERRORDEF_( Unimplemented_Feature, 0x07, \"unimplemented feature\" ) FT_ERRORDEF_( Invalid_Table, 0x08, \"broken table\" ) FT_ERRORDEF_( Invalid_Offset, 0x09, \"broken offset within table\" ) FT_ERRORDEF_( Array_Too_Large, 0x0A, \"array allocation size too large\" ) FT_ERRORDEF_( Missing_Module, 0x0B, \"missing module\" ) FT_ERRORDEF_( Missing_Property, 0x0C, \"missing property\" ) /* glyph/character errors */ FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, \"invalid glyph index\" ) FT_ERRORDEF_( Invalid_Character_Code, 0x11, \"invalid character code\" ) FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, \"unsupported glyph image format\" ) FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, \"cannot render this glyph format\" ) FT_ERRORDEF_( Invalid_Outline, 0x14, \"invalid outline\" ) FT_ERRORDEF_( Invalid_Composite, 0x15, \"invalid composite glyph\" ) FT_ERRORDEF_( Too_Many_Hints, 0x16, \"too many hints\" ) FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, \"invalid pixel size\" ) /* handle errors */ FT_ERRORDEF_( Invalid_Handle, 0x20, \"invalid object handle\" ) FT_ERRORDEF_( Invalid_Library_Handle, 0x21, \"invalid library handle\" ) FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, \"invalid module handle\" ) FT_ERRORDEF_( Invalid_Face_Handle, 0x23, \"invalid face handle\" ) FT_ERRORDEF_( Invalid_Size_Handle, 0x24, \"invalid size handle\" ) FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, \"invalid glyph slot handle\" ) FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, \"invalid charmap handle\" ) FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, \"invalid cache manager handle\" ) FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, \"invalid stream handle\" ) /* driver errors */ FT_ERRORDEF_( Too_Many_Drivers, 0x30, \"too many modules\" ) FT_ERRORDEF_( Too_Many_Extensions, 0x31, \"too many extensions\" ) /* memory errors */ FT_ERRORDEF_( Out_Of_Memory, 0x40, \"out of memory\" ) FT_ERRORDEF_( Unlisted_Object, 0x41, \"unlisted object\" ) /* stream errors */ FT_ERRORDEF_( Cannot_Open_Stream, 0x51, \"cannot open stream\" ) FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, \"invalid stream seek\" ) FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, \"invalid stream skip\" ) FT_ERRORDEF_( Invalid_Stream_Read, 0x54, \"invalid stream read\" ) FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, \"invalid stream operation\" ) FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, \"invalid frame operation\" ) FT_ERRORDEF_( Nested_Frame_Access, 0x57, \"nested frame access\" ) FT_ERRORDEF_( Invalid_Frame_Read, 0x58, \"invalid frame read\" ) /* raster errors */ FT_ERRORDEF_( Raster_Uninitialized, 0x60, \"raster uninitialized\" ) FT_ERRORDEF_( Raster_Corrupted, 0x61, \"raster corrupted\" ) FT_ERRORDEF_( Raster_Overflow, 0x62, \"raster overflow\" ) FT_ERRORDEF_( Raster_Negative_Height, 0x63, \"negative height while rastering\" ) /* cache errors */ FT_ERRORDEF_( Too_Many_Caches, 0x70, \"too many registered caches\" ) /* TrueType and SFNT errors */ FT_ERRORDEF_( Invalid_Opcode, 0x80, \"invalid opcode\" ) FT_ERRORDEF_( Too_Few_Arguments, 0x81, \"too few arguments\" ) FT_ERRORDEF_( Stack_Overflow, 0x82, \"stack overflow\" ) FT_ERRORDEF_( Code_Overflow, 0x83, \"code overflow\" ) FT_ERRORDEF_( Bad_Argument, 0x84, \"bad argument\" ) FT_ERRORDEF_( Divide_By_Zero, 0x85, \"division by zero\" ) FT_ERRORDEF_( Invalid_Reference, 0x86, \"invalid reference\" ) FT_ERRORDEF_( Debug_OpCode, 0x87, \"found debug opcode\" ) FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, \"found ENDF opcode in execution stream\" ) FT_ERRORDEF_( Nested_DEFS, 0x89, \"nested DEFS\" ) FT_ERRORDEF_( Invalid_CodeRange, 0x8A, \"invalid code range\" ) FT_ERRORDEF_( Execution_Too_Long, 0x8B, \"execution context too long \" ) FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, \"too many function definitions\" ) FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, \"too many instruction definitions\" ) FT_ERRORDEF_( Table_Missing, 0x8E, \"SFNT font table missing\" ) FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, \"horizontal header (hhea) table missing\" ) FT_ERRORDEF_( Locations_Missing, 0x90, \"locations (loca) table missing\" ) FT_ERRORDEF_( Name_Table_Missing, 0x91, \"name table missing\" ) FT_ERRORDEF_( CMap_Table_Missing, 0x92, \"character map (cmap) table missing\" ) FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, \"horizontal metrics (hmtx) table missing\" ) FT_ERRORDEF_( Post_Table_Missing, 0x94, \"PostScript (post) table missing\" ) FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, \"invalid horizontal metrics\" ) FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, \"invalid character map (cmap) format\" ) FT_ERRORDEF_( Invalid_PPem, 0x97, \"invalid ppem value\" ) FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, \"invalid vertical metrics\" ) FT_ERRORDEF_( Could_Not_Find_Context, 0x99, \"could not find context\" ) FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, \"invalid PostScript (post) table format\" ) FT_ERRORDEF_( Invalid_Post_Table, 0x9B, \"invalid PostScript (post) table\" ) FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, \"found FDEF or IDEF opcode in glyf bytecode\" ) FT_ERRORDEF_( Missing_Bitmap, 0x9D, \"missing bitmap in strike\" ) /* CFF, CID, and Type 1 errors */ FT_ERRORDEF_( Syntax_Error, 0xA0, \"opcode syntax error\" ) FT_ERRORDEF_( Stack_Underflow, 0xA1, \"argument stack underflow\" ) FT_ERRORDEF_( Ignore, 0xA2, \"ignore\" ) FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3, \"no Unicode glyph name found\" ) FT_ERRORDEF_( Glyph_Too_Big, 0xA4, \"glyph too big for hinting\" ) /* BDF errors */ FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, \"`STARTFONT' field missing\" ) FT_ERRORDEF_( Missing_Font_Field, 0xB1, \"`FONT' field missing\" ) FT_ERRORDEF_( Missing_Size_Field, 0xB2, \"`SIZE' field missing\" ) FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3, \"`FONTBOUNDINGBOX' field missing\" ) FT_ERRORDEF_( Missing_Chars_Field, 0xB4, \"`CHARS' field missing\" ) FT_ERRORDEF_( Missing_Startchar_Field, 0xB5, \"`STARTCHAR' field missing\" ) FT_ERRORDEF_( Missing_Encoding_Field, 0xB6, \"`ENCODING' field missing\" ) FT_ERRORDEF_( Missing_Bbx_Field, 0xB7, \"`BBX' field missing\" ) FT_ERRORDEF_( Bbx_Too_Big, 0xB8, \"`BBX' too big\" ) FT_ERRORDEF_( Corrupted_Font_Header, 0xB9, \"Font header corrupted or missing fields\" ) FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA, \"Font glyphs corrupted or missing fields\" )","title":"FT_Err_XXX"},{"location":"ft2-error_enumerations.html","text":"FreeType Docs Error Codes Error Enumerations Error Enumerations Synopsis The header file fterrors.h (which is automatically included by freetype.h defines the handling of FreeType's enumeration constants. It can also be used to generate error message strings with a small macro trick explained below. Error Formats The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be defined in ftoption.h in order to make the higher byte indicate the module where the error has happened (this is not compatible with standard builds of FreeType 2, however). See the file ftmoderr.h for more details. Error Message Strings Error definitions are set up with special macros that allow client applications to build a table of error message strings. The strings are not included in a normal build of FreeType 2 to save space (most client applications do not use them). To do so, you have to define the following macros before including this file. FT_ERROR_START_LIST This macro is called before anything else to define the start of the error list. It is followed by several FT_ERROR_DEF calls. FT_ERROR_DEF( e, v, s ) This macro is called to define one single error. e is the error code identifier (e.g., Invalid_Argument ), v is the error's numerical value, and s is the corresponding error string. FT_ERROR_END_LIST This macro ends the list. Additionally, you have to undefine FTERRORS_H_ before #including this file. Here is a simple example. #undef FTERRORS_H_ #define FT_ERRORDEF( e, v, s ) { e, s }, #define FT_ERROR_START_LIST { #define FT_ERROR_END_LIST { 0, NULL } }; const struct { int err_code; const char* err_msg; } ft_errors[] = #include FT_ERRORS_H An alternative to using an array is a switch statement. #undef FTERRORS_H_ #define FT_ERROR_START_LIST switch ( error_code ) { #define FT_ERRORDEF( e, v, s ) case v: return s; #define FT_ERROR_END_LIST } If you use FT_CONFIG_OPTION_USE_MODULE_ERRORS , error_code should be replaced with FT_ERROR_BASE(error_code) in the last example. FT_Error_String Defined in FT_ERRORS_H (freetype/fterrors.h). FT_EXPORT( const char * ) FT_Error_String ( FT_Error error_code ); FT_END_HEADER # endif /* FT_ERR_PROTOS_DEFINED */ # endif /* FT_INCLUDE_ERR_PROTOS */ # endif /* !(FTERRORS_H_ __FTERRORS_H__) */ /* END */ Retrieve the description of a valid FreeType error code. input error_code A valid FreeType error code. return A C string or NULL , if any error occurred. note FreeType has to be compiled with FT_CONFIG_OPTION_ERROR_STRINGS or FT_DEBUG_LEVEL_ERROR to get meaningful descriptions. error_string will be NULL otherwise. Module identification will be ignored: strcmp ( FT_Error_String ( FT_Err_Unknown_File_Format ), FT_Error_String ( BDF_Err_Unknown_File_Format ) ) == 0 ;","title":"Error Enumerations"},{"location":"ft2-error_enumerations.html#error-enumerations","text":"","title":"Error Enumerations"},{"location":"ft2-error_enumerations.html#synopsis","text":"The header file fterrors.h (which is automatically included by freetype.h defines the handling of FreeType's enumeration constants. It can also be used to generate error message strings with a small macro trick explained below. Error Formats The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be defined in ftoption.h in order to make the higher byte indicate the module where the error has happened (this is not compatible with standard builds of FreeType 2, however). See the file ftmoderr.h for more details. Error Message Strings Error definitions are set up with special macros that allow client applications to build a table of error message strings. The strings are not included in a normal build of FreeType 2 to save space (most client applications do not use them). To do so, you have to define the following macros before including this file. FT_ERROR_START_LIST This macro is called before anything else to define the start of the error list. It is followed by several FT_ERROR_DEF calls. FT_ERROR_DEF( e, v, s ) This macro is called to define one single error. e is the error code identifier (e.g., Invalid_Argument ), v is the error's numerical value, and s is the corresponding error string. FT_ERROR_END_LIST This macro ends the list. Additionally, you have to undefine FTERRORS_H_ before #including this file. Here is a simple example. #undef FTERRORS_H_ #define FT_ERRORDEF( e, v, s ) { e, s }, #define FT_ERROR_START_LIST { #define FT_ERROR_END_LIST { 0, NULL } }; const struct { int err_code; const char* err_msg; } ft_errors[] = #include FT_ERRORS_H An alternative to using an array is a switch statement. #undef FTERRORS_H_ #define FT_ERROR_START_LIST switch ( error_code ) { #define FT_ERRORDEF( e, v, s ) case v: return s; #define FT_ERROR_END_LIST } If you use FT_CONFIG_OPTION_USE_MODULE_ERRORS , error_code should be replaced with FT_ERROR_BASE(error_code) in the last example.","title":"Synopsis"},{"location":"ft2-error_enumerations.html#ft_error_string","text":"Defined in FT_ERRORS_H (freetype/fterrors.h). FT_EXPORT( const char * ) FT_Error_String ( FT_Error error_code ); FT_END_HEADER # endif /* FT_ERR_PROTOS_DEFINED */ # endif /* FT_INCLUDE_ERR_PROTOS */ # endif /* !(FTERRORS_H_ __FTERRORS_H__) */ /* END */ Retrieve the description of a valid FreeType error code.","title":"FT_Error_String"},{"location":"ft2-font_formats.html","text":"FreeType Docs Format-Specific API Font Formats Font Formats Synopsis 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. FT_Get_Font_Format Defined in FT_FONT_FORMATS_H (freetype/ftfntfmt.h). FT_EXPORT( const char * ) FT_Get_Font_Format ( FT_Face face ); /* deprecated */ FT_EXPORT( const char * ) FT_Get_X11_Font_Format( FT_Face face ); Return a string describing the format of a given face. Possible values are TrueType , Type 1 , BDF , PCF , Type 42 , CID Type 1 , CFF , PFR , and Windows FNT . The return value is suitable to be used as an X11 FONT_PROPERTY. input face Input face handle. return Font format string. NULL in case of error. note A deprecated name for the same function is FT_Get_X11_Font_Format .","title":"Font Formats"},{"location":"ft2-font_formats.html#font-formats","text":"","title":"Font Formats"},{"location":"ft2-font_formats.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-font_formats.html#ft_get_font_format","text":"Defined in FT_FONT_FORMATS_H (freetype/ftfntfmt.h). FT_EXPORT( const char * ) FT_Get_Font_Format ( FT_Face face ); /* deprecated */ FT_EXPORT( const char * ) FT_Get_X11_Font_Format( FT_Face face ); Return a string describing the format of a given face. Possible values are TrueType , Type 1 , BDF , PCF , Type 42 , CID Type 1 , CFF , PFR , and Windows FNT . The return value is suitable to be used as an X11 FONT_PROPERTY.","title":"FT_Get_Font_Format"},{"location":"ft2-gasp_table.html","text":"FreeType Docs Format-Specific API Gasp Table Gasp Table Synopsis 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. FT_GASP_XXX Defined in FT_GASP_H (freetype/ftgasp.h). # define FT_GASP_NO_TABLE -1 # define FT_GASP_DO_GRIDFIT 0x01 # define FT_GASP_DO_GRAY 0x02 # define FT_GASP_SYMMETRIC_GRIDFIT 0x04 # define FT_GASP_SYMMETRIC_SMOOTHING 0x08 A list of values and/or bit-flags returned by the FT_Get_Gasp function. values FT_GASP_NO_TABLE This special value means that there is no GASP table in this face. It is up to the client to decide what to do. FT_GASP_DO_GRIDFIT Grid-fitting and hinting should be performed at the specified ppem. This really means TrueType bytecode interpretation. If this bit is not set, no hinting gets applied. FT_GASP_DO_GRAY Anti-aliased rendering should be performed at the specified ppem. If not set, do monochrome rendering. FT_GASP_SYMMETRIC_SMOOTHING If set, smoothing along multiple axes must be used with ClearType. FT_GASP_SYMMETRIC_GRIDFIT Grid-fitting must be used with ClearType's symmetric smoothing. note The bit-flags FT_GASP_DO_GRIDFIT and FT_GASP_DO_GRAY are to be used for standard font rasterization only. Independently of that, FT_GASP_SYMMETRIC_SMOOTHING and FT_GASP_SYMMETRIC_GRIDFIT are to be used if ClearType is enabled (and FT_GASP_DO_GRIDFIT and FT_GASP_DO_GRAY are consequently ignored). ClearType is Microsoft's implementation of LCD rendering, partly protected by patents. since 2.3.0 FT_Get_Gasp Defined in FT_GASP_H (freetype/ftgasp.h). FT_EXPORT( FT_Int ) FT_Get_Gasp ( FT_Face face, FT_UInt ppem ); For a TrueType or OpenType font file, return the rasterizer behaviour flags from the font's gasp table corresponding to a given character pixel size. input face The source face handle. ppem The vertical character pixel size. return Bit flags (see FT_GASP_XXX ), or FT_GASP_NO_TABLE if there is no gasp table in the face. note If you want to use the MM functionality of OpenType variation fonts (i.e., using FT_Set_Var_Design_Coordinates and friends), call this function after setting an instance since the return values can change. since 2.3.0","title":"Gasp Table"},{"location":"ft2-gasp_table.html#gasp-table","text":"","title":"Gasp Table"},{"location":"ft2-gasp_table.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-gasp_table.html#ft_gasp_xxx","text":"Defined in FT_GASP_H (freetype/ftgasp.h). # define FT_GASP_NO_TABLE -1 # define FT_GASP_DO_GRIDFIT 0x01 # define FT_GASP_DO_GRAY 0x02 # define FT_GASP_SYMMETRIC_GRIDFIT 0x04 # define FT_GASP_SYMMETRIC_SMOOTHING 0x08 A list of values and/or bit-flags returned by the FT_Get_Gasp function.","title":"FT_GASP_XXX"},{"location":"ft2-gasp_table.html#ft_get_gasp","text":"Defined in FT_GASP_H (freetype/ftgasp.h). FT_EXPORT( FT_Int ) FT_Get_Gasp ( FT_Face face, FT_UInt ppem ); For a TrueType or OpenType font file, return the rasterizer behaviour flags from the font's gasp table corresponding to a given character pixel size.","title":"FT_Get_Gasp"},{"location":"ft2-glyph_management.html","text":"FreeType Docs Core API Glyph Management Glyph Management Synopsis 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. These objects are detached from FT_Face , contrary to FT_GlyphSlot . FT_Glyph Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_GlyphRec_* FT_Glyph ; 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 . FT_GlyphRec Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_GlyphRec_ { FT_Library library; const FT_Glyph_Class* clazz; FT_Glyph_Format format; FT_Vector advance; } FT_GlyphRec ; The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed-point format. fields library A handle to the FreeType library object. clazz A pointer to the glyph's class. Private. format The format of the glyph's image. advance A 16.16 vector that gives the glyph's advance width. FT_BitmapGlyph Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph ; 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 . FT_BitmapGlyphRec Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_BitmapGlyphRec_ { FT_GlyphRec root; FT_Int left; FT_Int top; FT_Bitmap bitmap; } FT_BitmapGlyphRec ; 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. FT_OutlineGlyph Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph ; 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 . FT_OutlineGlyphRec Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_OutlineGlyphRec_ { FT_GlyphRec root; FT_Outline outline; } FT_OutlineGlyphRec ; A structure used for outline (vectorial) glyph images. This really is a sub-class of FT_GlyphRec . fields root The root FT_Glyph fields. outline A descriptor for the outline. note You can typecast an FT_Glyph to FT_OutlineGlyph if you have glyph- format == FT_GLYPH_FORMAT_OUTLINE . This lets you access the outline's content easily. As the outline is extracted from a glyph slot, its coordinates are expressed normally in 26.6 pixels, unless the flag FT_LOAD_NO_SCALE was used in FT_Load_Glyph or FT_Load_Char . The outline's tables are always owned by the object and are destroyed with it. FT_New_Glyph Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_New_Glyph ( FT_Library library, FT_Glyph_Format format, FT_Glyph *aglyph ); A function used to create a new empty glyph image. Note that the created FT_Glyph object must be released with FT_Done_Glyph . input library A handle to the FreeType library object. format The format of the glyph's image. output aglyph A handle to the glyph object. return FreeType error code. 0 means success. since 2.10 FT_Get_Glyph Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Get_Glyph ( FT_GlyphSlot slot, FT_Glyph *aglyph ); A function used to extract a glyph image from a slot. Note that the created FT_Glyph object must be released with FT_Done_Glyph . input slot A handle to the source glyph slot. output aglyph A handle to the glyph object. return FreeType error code. 0 means success. note Because *aglyph- advance.x and *aglyph- advance.y are 16.16 fixed-point numbers, slot- advance.x and slot- advance.y (which are in 26.6 fixed-point format) must be in the range ]-32768;32768[. FT_Glyph_Copy Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_Copy ( FT_Glyph source, FT_Glyph *target ); 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_Glyph_Transform Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_Transform ( FT_Glyph glyph, FT_Matrix * matrix, FT_Vector * delta ); 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_Glyph_BBox_Mode Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef enum FT_Glyph_BBox_Mode_ { FT_GLYPH_BBOX_UNSCALED = 0, FT_GLYPH_BBOX_SUBPIXELS = 0, FT_GLYPH_BBOX_GRIDFIT = 1, FT_GLYPH_BBOX_TRUNCATE = 2, FT_GLYPH_BBOX_PIXELS = 3 } FT_Glyph_BBox_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Glyph_BBox_Mode ` values instead */ # define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED # define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS # define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT # define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE # define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS 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. FT_Glyph_Get_CBox Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Glyph_Get_CBox ( FT_Glyph glyph, FT_UInt bbox_mode, FT_BBox *acbox ); Return a glyph's control box . The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier outside arcs). Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ftbbox component, which is dedicated to this single task. input glyph A handle to the source glyph object. mode The mode that indicates how to interpret the returned bounding box values. output acbox The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted. note Coordinates are relative to the glyph origin, using the y upwards convention. If the glyph has been loaded with FT_LOAD_NO_SCALE , bbox_mode must be set to FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 pixel format. The value FT_GLYPH_BBOX_SUBPIXELS is another name for this constant. If the font is tricky and the glyph has been loaded with FT_LOAD_NO_SCALE , the resulting CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the CBox, which can be eventually converted back to font units. Note that the maximum coordinates are exclusive, which means that one can compute the width and height of the glyph image (be it in integer or 26.6 pixels) as: width = bbox.xMax - bbox.xMin; height = bbox.yMax - bbox.yMin; Note also that for 26.6 coordinates, if bbox_mode is set to FT_GLYPH_BBOX_GRIDFIT , the coordinates will also be grid-fitted, which corresponds to: bbox.xMin = FLOOR(bbox.xMin); bbox.yMin = FLOOR(bbox.yMin); bbox.xMax = CEILING(bbox.xMax); bbox.yMax = CEILING(bbox.yMax); To get the bbox in pixel coordinates, set bbox_mode to FT_GLYPH_BBOX_TRUNCATE . To get the bbox in grid-fitted pixel coordinates, set bbox_mode to FT_GLYPH_BBOX_PIXELS . FT_Glyph_To_Bitmap Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_To_Bitmap ( FT_Glyph * the_glyph, FT_Render_Mode render_mode, FT_Vector * origin, FT_Bool destroy ); Convert a given glyph object to a bitmap glyph object. inout the_glyph A pointer to a handle to the target glyph. input render_mode An enumeration that describes how the data is rendered. origin A pointer to a vector used to translate the glyph image before rendering. Can be 0 (if no translation). The origin is expressed in 26.6 pixels. destroy A boolean that indicates that the original glyph image should be destroyed by this function. It is never destroyed in case of error. return FreeType error code. 0 means success. note This function does nothing if the glyph format isn't scalable. The glyph image is translated with the origin vector before rendering. The first parameter is a pointer to an FT_Glyph handle, that will be replaced by this function (with newly allocated data). Typically, you would use (omitting error handling): FT_Glyph glyph; FT_BitmapGlyph glyph_bitmap; // load glyph error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); // extract glyph image error = FT_Get_Glyph( face- glyph, glyph ); // convert to a bitmap (default render mode + destroying old) if ( glyph- format != FT_GLYPH_FORMAT_BITMAP ) { error = FT_Glyph_To_Bitmap( glyph, FT_RENDER_MODE_NORMAL, 0, 1 ); if ( error ) // `glyph unchanged ... } // access bitmap content by typecasting glyph_bitmap = (FT_BitmapGlyph)glyph; // do funny stuff with it, like blitting/drawing ... // discard glyph image (bitmap or not) FT_Done_Glyph( glyph ); Here is another example, again without error handling: FT_Glyph glyphs[MAX_GLYPHS] ... for ( idx = 0; i MAX_GLYPHS; i++ ) error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || FT_Get_Glyph ( face- glyph, glyphs[idx] ); ... for ( idx = 0; i MAX_GLYPHS; i++ ) { FT_Glyph bitmap = glyphs[idx]; ... // after this call, `bitmap no longer points into // the `glyphs array (and the old value isn t destroyed) FT_Glyph_To_Bitmap( bitmap, FT_RENDER_MODE_MONO, 0, 0 ); ... FT_Done_Glyph( bitmap ); } ... for ( idx = 0; i MAX_GLYPHS; i++ ) FT_Done_Glyph( glyphs[idx] ); FT_Done_Glyph Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Done_Glyph ( FT_Glyph glyph ); Destroy a given glyph. input glyph A handle to the target glyph object.","title":"Glyph Management"},{"location":"ft2-glyph_management.html#glyph-management","text":"","title":"Glyph Management"},{"location":"ft2-glyph_management.html#synopsis","text":"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. These objects are detached from FT_Face , contrary to FT_GlyphSlot .","title":"Synopsis"},{"location":"ft2-glyph_management.html#ft_glyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_GlyphRec_* FT_Glyph ; 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.","title":"FT_Glyph"},{"location":"ft2-glyph_management.html#ft_glyphrec","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_GlyphRec_ { FT_Library library; const FT_Glyph_Class* clazz; FT_Glyph_Format format; FT_Vector advance; } FT_GlyphRec ; The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed-point format.","title":"FT_GlyphRec"},{"location":"ft2-glyph_management.html#ft_bitmapglyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph ; 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 .","title":"FT_BitmapGlyph"},{"location":"ft2-glyph_management.html#ft_bitmapglyphrec","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_BitmapGlyphRec_ { FT_GlyphRec root; FT_Int left; FT_Int top; FT_Bitmap bitmap; } FT_BitmapGlyphRec ; A structure used for bitmap glyph images. This really is a sub-class of FT_GlyphRec .","title":"FT_BitmapGlyphRec"},{"location":"ft2-glyph_management.html#ft_outlineglyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph ; 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 .","title":"FT_OutlineGlyph"},{"location":"ft2-glyph_management.html#ft_outlineglyphrec","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef struct FT_OutlineGlyphRec_ { FT_GlyphRec root; FT_Outline outline; } FT_OutlineGlyphRec ; A structure used for outline (vectorial) glyph images. This really is a sub-class of FT_GlyphRec .","title":"FT_OutlineGlyphRec"},{"location":"ft2-glyph_management.html#ft_new_glyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_New_Glyph ( FT_Library library, FT_Glyph_Format format, FT_Glyph *aglyph ); A function used to create a new empty glyph image. Note that the created FT_Glyph object must be released with FT_Done_Glyph .","title":"FT_New_Glyph"},{"location":"ft2-glyph_management.html#ft_get_glyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Get_Glyph ( FT_GlyphSlot slot, FT_Glyph *aglyph ); A function used to extract a glyph image from a slot. Note that the created FT_Glyph object must be released with FT_Done_Glyph .","title":"FT_Get_Glyph"},{"location":"ft2-glyph_management.html#ft_glyph_copy","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_Copy ( FT_Glyph source, FT_Glyph *target ); A function used to copy a glyph image. Note that the created FT_Glyph object must be released with FT_Done_Glyph .","title":"FT_Glyph_Copy"},{"location":"ft2-glyph_management.html#ft_glyph_transform","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_Transform ( FT_Glyph glyph, FT_Matrix * matrix, FT_Vector * delta ); Transform a glyph image if its format is scalable.","title":"FT_Glyph_Transform"},{"location":"ft2-glyph_management.html#ft_glyph_bbox_mode","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). typedef enum FT_Glyph_BBox_Mode_ { FT_GLYPH_BBOX_UNSCALED = 0, FT_GLYPH_BBOX_SUBPIXELS = 0, FT_GLYPH_BBOX_GRIDFIT = 1, FT_GLYPH_BBOX_TRUNCATE = 2, FT_GLYPH_BBOX_PIXELS = 3 } FT_Glyph_BBox_Mode ; /* these constants are deprecated; use the corresponding */ /* ` FT_Glyph_BBox_Mode ` values instead */ # define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED # define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS # define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT # define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE # define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS The mode how the values of FT_Glyph_Get_CBox are returned.","title":"FT_Glyph_BBox_Mode"},{"location":"ft2-glyph_management.html#ft_glyph_get_cbox","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Glyph_Get_CBox ( FT_Glyph glyph, FT_UInt bbox_mode, FT_BBox *acbox ); Return a glyph's control box . The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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.","title":"FT_Glyph_Get_CBox"},{"location":"ft2-glyph_management.html#ft_glyph_to_bitmap","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( FT_Error ) FT_Glyph_To_Bitmap ( FT_Glyph * the_glyph, FT_Render_Mode render_mode, FT_Vector * origin, FT_Bool destroy ); Convert a given glyph object to a bitmap glyph object.","title":"FT_Glyph_To_Bitmap"},{"location":"ft2-glyph_management.html#ft_done_glyph","text":"Defined in FT_GLYPH_H (freetype/ftglyph.h). FT_EXPORT( void ) FT_Done_Glyph ( FT_Glyph glyph ); Destroy a given glyph.","title":"FT_Done_Glyph"},{"location":"ft2-glyph_stroker.html","text":"FreeType Docs Support API Glyph Stroker Glyph Stroker Synopsis 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. FT_Stroker Defined in FT_STROKER_H (freetype/ftstroke.h). typedef struct FT_StrokerRec_* FT_Stroker ; Opaque handle to a path stroker object. FT_Stroker_LineJoin Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_Stroker_LineJoin_ { FT_STROKER_LINEJOIN_ROUND = 0, FT_STROKER_LINEJOIN_BEVEL = 1, FT_STROKER_LINEJOIN_MITER_VARIABLE = 2, FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE , FT_STROKER_LINEJOIN_MITER_FIXED = 3 } FT_Stroker_LineJoin ; These values determine how two joining lines are rendered in a stroker. values FT_STROKER_LINEJOIN_ROUND Used to render rounded line joins. Circular arcs are used to join two lines smoothly. FT_STROKER_LINEJOIN_BEVEL Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke. FT_STROKER_LINEJOIN_MITER_FIXED Used to render mitered line joins, with fixed bevels if the miter limit is exceeded. The outer edges of the strokes for the two segments are extended until they meet at an angle. If the segments meet at too sharp an angle (such that the miter would extend from the intersection of the segments a distance greater than the product of the miter limit value and the border radius), then a bevel join (see above) is used instead. This prevents long spikes being created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter line join as used in PostScript and PDF. FT_STROKER_LINEJOIN_MITER_VARIABLE FT_STROKER_LINEJOIN_MITER Used to render mitered line joins, with variable bevels if the miter limit is exceeded. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created. FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias for FT_STROKER_LINEJOIN_MITER_VARIABLE , retained for backward compatibility. FT_Stroker_LineCap Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_Stroker_LineCap_ { FT_STROKER_LINECAP_BUTT = 0, FT_STROKER_LINECAP_ROUND , FT_STROKER_LINECAP_SQUARE } FT_Stroker_LineCap ; 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. FT_StrokerBorder Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_StrokerBorder_ { FT_STROKER_BORDER_LEFT = 0, FT_STROKER_BORDER_RIGHT } FT_StrokerBorder ; 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. FT_Outline_GetInsideBorder Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_StrokerBorder ) FT_Outline_GetInsideBorder ( FT_Outline * outline ); Retrieve the FT_StrokerBorder value corresponding to the inside borders of a given outline. input outline The source outline handle. return The border index. FT_STROKER_BORDER_RIGHT for empty or invalid outlines. FT_Outline_GetOutsideBorder Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_StrokerBorder ) FT_Outline_GetOutsideBorder ( FT_Outline * outline ); 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_Glyph_Stroke Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Glyph_Stroke ( FT_Glyph *pglyph, FT_Stroker stroker, FT_Bool destroy ); Stroke a given outline glyph object with a given stroker. inout pglyph Source glyph handle on input, new glyph handle on output. input stroker A stroker handle. destroy A Boolean. If 1, the source glyph object is destroyed on success. return FreeType error code. 0 means success. note The source glyph is untouched in case of error. Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size. FT_Glyph_StrokeBorder Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Glyph_StrokeBorder ( FT_Glyph *pglyph, FT_Stroker stroker, FT_Bool inside, FT_Bool destroy ); Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border. inout pglyph Source glyph handle on input, new glyph handle on output. input stroker A stroker handle. inside A Boolean. If 1, return the inside border, otherwise the outside border. destroy A Boolean. If 1, the source glyph object is destroyed on success. return FreeType error code. 0 means success. note The source glyph is untouched in case of error. Adding stroke may yield a significantly wider and taller glyph depending on how large of a radius was used to stroke the glyph. You may need to manually adjust horizontal and vertical advance amounts to account for this added size. FT_Stroker_New Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_New ( FT_Library library, FT_Stroker *astroker ); 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_Stroker_Set Defined in FT_STROKER_H (freetype/ftstroke.h). 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 ); Reset a stroker object's attributes. input stroker The target stroker handle. radius The border radius. line_cap The line cap style. line_join The line join style. miter_limit The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles, expressed as 16.16 fixed-point value. note The radius is expressed in the same units as the outline coordinates. This function calls FT_Stroker_Rewind automatically. FT_Stroker_Rewind Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Rewind ( FT_Stroker stroker ); 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_Stroker_ParseOutline Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_ParseOutline ( FT_Stroker stroker, FT_Outline * outline, FT_Bool opened ); A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be retrieved later by functions like FT_Stroker_GetCounts and FT_Stroker_Export . input stroker The target stroker handle. outline The source outline. opened A boolean. If 1, the outline is treated as an open path instead of a closed one. return FreeType error code. 0 means success. note If opened is 0 (the default), the outline is treated as a closed path, and the stroker generates two distinct border outlines. If opened is 1, the outline is processed as an open path, and the stroker generates a single stroke outline. This function calls FT_Stroker_Rewind automatically. FT_Stroker_Done Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Done ( FT_Stroker stroker ); Destroy a stroker object. input stroker A stroker handle. Can be NULL . FT_Stroker_BeginSubPath Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_BeginSubPath ( FT_Stroker stroker, FT_Vector * to, FT_Bool open ); 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_Stroker_EndSubPath Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_EndSubPath ( FT_Stroker stroker ); Close the current sub-path in the stroker. input stroker The target stroker handle. return FreeType error code. 0 means success. note You should call this function after FT_Stroker_BeginSubPath . If the subpath was not opened , this function draws a single line segment to the start position when needed. FT_Stroker_LineTo Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_LineTo ( FT_Stroker stroker, FT_Vector * to ); 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_Stroker_ConicTo Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_ConicTo ( FT_Stroker stroker, FT_Vector * control, FT_Vector * to ); Draw a single quadratic Bezier in the stroker's current sub-path, from the last position. input stroker The target stroker handle. control A pointer to a Bezier 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_Stroker_CubicTo Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_CubicTo ( FT_Stroker stroker, FT_Vector * control1, FT_Vector * control2, FT_Vector * to ); Draw a single cubic Bezier in the stroker's current sub-path, from the last position. input stroker The target stroker handle. control1 A pointer to the first Bezier control point. control2 A pointer to second Bezier 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_Stroker_GetBorderCounts Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_GetBorderCounts ( FT_Stroker stroker, FT_StrokerBorder border, FT_UInt *anum_points, FT_UInt *anum_contours ); Call this function once you have finished parsing your paths with the stroker. It returns the number of points and contours necessary to export one of the border or stroke outlines generated by the stroker. input stroker The target stroker handle. border The border index. output anum_points The number of points. anum_contours The number of contours. return FreeType error code. 0 means success. note When an outline, or a sub-path, is closed , the stroker generates two independent border outlines, named left and right . When the outline, or a sub-path, is opened , the stroker merges the border outlines with caps. The left border receives all points, while the right border becomes empty. Use the function FT_Stroker_GetCounts instead if you want to retrieve the counts associated to both borders. FT_Stroker_ExportBorder Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_ExportBorder ( FT_Stroker stroker, FT_StrokerBorder border, FT_Outline * outline ); Call this function after FT_Stroker_GetBorderCounts to export the corresponding border to your own FT_Outline structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays. input stroker The target stroker handle. border The border index. outline The target outline handle. note Always call this function after FT_Stroker_GetBorderCounts to get sure that there is enough room in your FT_Outline object to receive all new data. When an outline, or a sub-path, is closed , the stroker generates two independent border outlines, named left and right . When the outline, or a sub-path, is opened , the stroker merges the border outlines with caps. The left border receives all points, while the right border becomes empty. Use the function FT_Stroker_Export instead if you want to retrieve all borders at once. FT_Stroker_GetCounts Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_GetCounts ( FT_Stroker stroker, FT_UInt *anum_points, FT_UInt *anum_contours ); 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_Stroker_Export Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Export ( FT_Stroker stroker, FT_Outline * outline ); Call this function after FT_Stroker_GetBorderCounts to export all borders to your own FT_Outline structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays. input stroker The target stroker handle. outline The target outline handle.","title":"Glyph Stroker"},{"location":"ft2-glyph_stroker.html#glyph-stroker","text":"","title":"Glyph Stroker"},{"location":"ft2-glyph_stroker.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-glyph_stroker.html#ft_stroker","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). typedef struct FT_StrokerRec_* FT_Stroker ; Opaque handle to a path stroker object.","title":"FT_Stroker"},{"location":"ft2-glyph_stroker.html#ft_stroker_linejoin","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_Stroker_LineJoin_ { FT_STROKER_LINEJOIN_ROUND = 0, FT_STROKER_LINEJOIN_BEVEL = 1, FT_STROKER_LINEJOIN_MITER_VARIABLE = 2, FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE , FT_STROKER_LINEJOIN_MITER_FIXED = 3 } FT_Stroker_LineJoin ; These values determine how two joining lines are rendered in a stroker.","title":"FT_Stroker_LineJoin"},{"location":"ft2-glyph_stroker.html#ft_stroker_linecap","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_Stroker_LineCap_ { FT_STROKER_LINECAP_BUTT = 0, FT_STROKER_LINECAP_ROUND , FT_STROKER_LINECAP_SQUARE } FT_Stroker_LineCap ; These values determine how the end of opened sub-paths are rendered in a stroke.","title":"FT_Stroker_LineCap"},{"location":"ft2-glyph_stroker.html#ft_strokerborder","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). typedef enum FT_StrokerBorder_ { FT_STROKER_BORDER_LEFT = 0, FT_STROKER_BORDER_RIGHT } FT_StrokerBorder ; These values are used to select a given stroke border in FT_Stroker_GetBorderCounts and FT_Stroker_ExportBorder .","title":"FT_StrokerBorder"},{"location":"ft2-glyph_stroker.html#ft_outline_getinsideborder","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_StrokerBorder ) FT_Outline_GetInsideBorder ( FT_Outline * outline ); Retrieve the FT_StrokerBorder value corresponding to the inside borders of a given outline.","title":"FT_Outline_GetInsideBorder"},{"location":"ft2-glyph_stroker.html#ft_outline_getoutsideborder","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_StrokerBorder ) FT_Outline_GetOutsideBorder ( FT_Outline * outline ); Retrieve the FT_StrokerBorder value corresponding to the outside borders of a given outline.","title":"FT_Outline_GetOutsideBorder"},{"location":"ft2-glyph_stroker.html#ft_glyph_stroke","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Glyph_Stroke ( FT_Glyph *pglyph, FT_Stroker stroker, FT_Bool destroy ); Stroke a given outline glyph object with a given stroker.","title":"FT_Glyph_Stroke"},{"location":"ft2-glyph_stroker.html#ft_glyph_strokeborder","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Glyph_StrokeBorder ( FT_Glyph *pglyph, FT_Stroker stroker, FT_Bool inside, FT_Bool destroy ); Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border.","title":"FT_Glyph_StrokeBorder"},{"location":"ft2-glyph_stroker.html#ft_stroker_new","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_New ( FT_Library library, FT_Stroker *astroker ); Create a new stroker object.","title":"FT_Stroker_New"},{"location":"ft2-glyph_stroker.html#ft_stroker_set","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). 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 ); Reset a stroker object's attributes.","title":"FT_Stroker_Set"},{"location":"ft2-glyph_stroker.html#ft_stroker_rewind","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Rewind ( FT_Stroker stroker ); 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 .","title":"FT_Stroker_Rewind"},{"location":"ft2-glyph_stroker.html#ft_stroker_parseoutline","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_ParseOutline ( FT_Stroker stroker, FT_Outline * outline, FT_Bool opened ); 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 .","title":"FT_Stroker_ParseOutline"},{"location":"ft2-glyph_stroker.html#ft_stroker_done","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Done ( FT_Stroker stroker ); Destroy a stroker object.","title":"FT_Stroker_Done"},{"location":"ft2-glyph_stroker.html#ft_stroker_beginsubpath","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_BeginSubPath ( FT_Stroker stroker, FT_Vector * to, FT_Bool open ); Start a new sub-path in the stroker.","title":"FT_Stroker_BeginSubPath"},{"location":"ft2-glyph_stroker.html#ft_stroker_endsubpath","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_EndSubPath ( FT_Stroker stroker ); Close the current sub-path in the stroker.","title":"FT_Stroker_EndSubPath"},{"location":"ft2-glyph_stroker.html#ft_stroker_lineto","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_LineTo ( FT_Stroker stroker, FT_Vector * to ); Draw a single line segment in the stroker's current sub-path, from the last position.","title":"FT_Stroker_LineTo"},{"location":"ft2-glyph_stroker.html#ft_stroker_conicto","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_ConicTo ( FT_Stroker stroker, FT_Vector * control, FT_Vector * to ); Draw a single quadratic Bezier in the stroker's current sub-path, from the last position.","title":"FT_Stroker_ConicTo"},{"location":"ft2-glyph_stroker.html#ft_stroker_cubicto","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_CubicTo ( FT_Stroker stroker, FT_Vector * control1, FT_Vector * control2, FT_Vector * to ); Draw a single cubic Bezier in the stroker's current sub-path, from the last position.","title":"FT_Stroker_CubicTo"},{"location":"ft2-glyph_stroker.html#ft_stroker_getbordercounts","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_GetBorderCounts ( FT_Stroker stroker, FT_StrokerBorder border, FT_UInt *anum_points, FT_UInt *anum_contours ); Call this function once you have finished parsing your paths with the stroker. It returns the number of points and contours necessary to export one of the border or stroke outlines generated by the stroker.","title":"FT_Stroker_GetBorderCounts"},{"location":"ft2-glyph_stroker.html#ft_stroker_exportborder","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_ExportBorder ( FT_Stroker stroker, FT_StrokerBorder border, FT_Outline * outline ); Call this function after FT_Stroker_GetBorderCounts to export the corresponding border to your own FT_Outline structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays.","title":"FT_Stroker_ExportBorder"},{"location":"ft2-glyph_stroker.html#ft_stroker_getcounts","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( FT_Error ) FT_Stroker_GetCounts ( FT_Stroker stroker, FT_UInt *anum_points, FT_UInt *anum_contours ); 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.","title":"FT_Stroker_GetCounts"},{"location":"ft2-glyph_stroker.html#ft_stroker_export","text":"Defined in FT_STROKER_H (freetype/ftstroke.h). FT_EXPORT( void ) FT_Stroker_Export ( FT_Stroker stroker, FT_Outline * outline ); Call this function after FT_Stroker_GetBorderCounts to export all borders to your own FT_Outline structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays.","title":"FT_Stroker_Export"},{"location":"ft2-glyph_variants.html","text":"FreeType Docs Core API Unicode Variation Sequences Unicode Variation Sequences Synopsis Many characters, especially for CJK scripts, have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Variation Sequences (VS), consisting of a Unicode base character and a variation selector instead of further extending the already huge number of characters. Unicode maintains two different sets, namely Standardized Variation Sequences and registered Ideographic Variation Sequences (IVS), collected in the Ideographic Variation Database (IVD). https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt https://unicode.org/reports/tr37/ https://unicode.org/ivd/ To date (January 2017), the character with the most ideographic variations is U+9089, having 32 such IVS. Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation Selectors from the range U+E0100-U+E01EF only. A VS consists of the base character value followed by a single Variation Selector. For example, to get the first variation of U+9089, you have to write the character sequence U+9089 U+E0100 . Adobe and MS decided to support both standardized and ideographic VS with a new cmap subtable (format 14). It is an odd subtable because it is not a mapping of input code points to glyphs, but contains lists of all variations supported by the font. A variation may be either default or non-default for a given font. A default variation is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variation is a different glyph. FT_Face_GetCharVariantIndex Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Face_GetCharVariantIndex ( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); 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_Face_GetCharVariantIsDefault Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Int ) FT_Face_GetCharVariantIsDefault ( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); Check whether this variation of this Unicode character is the one to be found in the charmap. input face A handle to the source face object. charcode The character codepoint in Unicode. variantSelector The Unicode codepoint of the variation selector. return 1 if found in the standard (Unicode) cmap, 0 if found in the variation selector cmap, or -1 if it is not a variation. note This function is only meaningful if the font has a variation selector cmap subtable. since 2.3.6 FT_Face_GetVariantSelectors Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetVariantSelectors ( FT_Face face ); Return a zero-terminated list of Unicode variation selectors found in the font. input face A handle to the source face object. return A pointer to an array of selector code points, or NULL if there is no valid variation selector cmap subtable. note The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function. since 2.3.6 FT_Face_GetVariantsOfChar Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetVariantsOfChar ( FT_Face face, FT_ULong charcode ); Return a zero-terminated list of Unicode variation selectors found for the specified character code. input face A handle to the source face object. charcode The character codepoint in Unicode. return A pointer to an array of variation selector code points that are active for the given character, or NULL if the corresponding list is empty. note The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function. since 2.3.6 FT_Face_GetCharsOfVariant Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetCharsOfVariant ( FT_Face face, FT_ULong variantSelector ); Return a zero-terminated list of Unicode character codes found for the specified variation selector. input face A handle to the source face object. variantSelector The variation selector code point in Unicode. return A list of all the code points that are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variation selector is invalid. note The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function. since 2.3.6","title":"Unicode Variation Sequences"},{"location":"ft2-glyph_variants.html#unicode-variation-sequences","text":"","title":"Unicode Variation Sequences"},{"location":"ft2-glyph_variants.html#synopsis","text":"Many characters, especially for CJK scripts, have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Variation Sequences (VS), consisting of a Unicode base character and a variation selector instead of further extending the already huge number of characters. Unicode maintains two different sets, namely Standardized Variation Sequences and registered Ideographic Variation Sequences (IVS), collected in the Ideographic Variation Database (IVD). https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt https://unicode.org/reports/tr37/ https://unicode.org/ivd/ To date (January 2017), the character with the most ideographic variations is U+9089, having 32 such IVS. Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation Selectors from the range U+E0100-U+E01EF only. A VS consists of the base character value followed by a single Variation Selector. For example, to get the first variation of U+9089, you have to write the character sequence U+9089 U+E0100 . Adobe and MS decided to support both standardized and ideographic VS with a new cmap subtable (format 14). It is an odd subtable because it is not a mapping of input code points to glyphs, but contains lists of all variations supported by the font. A variation may be either default or non-default for a given font. A default variation is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variation is a different glyph.","title":"Synopsis"},{"location":"ft2-glyph_variants.html#ft_face_getcharvariantindex","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt ) FT_Face_GetCharVariantIndex ( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); Return the glyph index of a given character code as modified by the variation selector.","title":"FT_Face_GetCharVariantIndex"},{"location":"ft2-glyph_variants.html#ft_face_getcharvariantisdefault","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Int ) FT_Face_GetCharVariantIsDefault ( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); Check whether this variation of this Unicode character is the one to be found in the charmap.","title":"FT_Face_GetCharVariantIsDefault"},{"location":"ft2-glyph_variants.html#ft_face_getvariantselectors","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetVariantSelectors ( FT_Face face ); Return a zero-terminated list of Unicode variation selectors found in the font.","title":"FT_Face_GetVariantSelectors"},{"location":"ft2-glyph_variants.html#ft_face_getvariantsofchar","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetVariantsOfChar ( FT_Face face, FT_ULong charcode ); Return a zero-terminated list of Unicode variation selectors found for the specified character code.","title":"FT_Face_GetVariantsOfChar"},{"location":"ft2-glyph_variants.html#ft_face_getcharsofvariant","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_UInt32 * ) FT_Face_GetCharsOfVariant ( FT_Face face, FT_ULong variantSelector ); Return a zero-terminated list of Unicode character codes found for the specified variation selector.","title":"FT_Face_GetCharsOfVariant"},{"location":"ft2-gx_validation.html","text":"FreeType Docs Miscellaneous TrueTypeGX/AAT Validation TrueTypeGX/AAT Validation Synopsis This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar). FT_TrueTypeGX_Validate Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). 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 ); Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming). input face A handle to the input face. validation_flags A bit field that specifies the tables to be validated. See FT_VALIDATE_GXXXX for possible values. table_length The size of the tables array. Normally, FT_VALIDATE_GX_LENGTH should be passed. output tables The array where all validated sfnt tables are stored. The array itself must be allocated by a client. return FreeType error code. 0 means success. note This function only works with TrueTypeGX fonts, returning an error otherwise. After use, the application should deallocate the buffers pointed to by each tables element, by calling FT_TrueTypeGX_Free . A NULL value indicates that the table either doesn't exist in the font, the application hasn't asked for validation, or the validator doesn't have the ability to validate the sfnt table. FT_TrueTypeGX_Free Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( void ) FT_TrueTypeGX_Free ( FT_Face face, FT_Bytes table ); 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_ClassicKern_Validate Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( FT_Error ) FT_ClassicKern_Validate ( FT_Face face, FT_UInt validation_flags, FT_Bytes *ckern_table ); Validate classic (16-bit format) kern table to assure that the offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming). The kern table validator in FT_TrueTypeGX_Validate deals with both the new 32-bit format and the classic 16-bit format, while FT_ClassicKern_Validate only supports the classic 16-bit format. input face A handle to the input face. validation_flags A bit field that specifies the dialect to be validated. See FT_VALIDATE_CKERNXXX for possible values. output ckern_table A pointer to the kern table. return FreeType error code. 0 means success. note After use, the application should deallocate the buffers pointed to by ckern_table , by calling FT_ClassicKern_Free . A NULL value indicates that the table doesn't exist in the font. FT_ClassicKern_Free Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( void ) FT_ClassicKern_Free ( FT_Face face, FT_Bytes table ); 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_VALIDATE_GX_LENGTH Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 ) The number of tables checked in this module. Use it as a parameter for the table-length argument of function FT_TrueTypeGX_Validate . FT_VALIDATE_GXXXX Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # 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 ) 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). FT_VALIDATE_CKERNXXX Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # 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 ) 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.","title":"TrueTypeGX/AAT Validation"},{"location":"ft2-gx_validation.html#truetypegxaat-validation","text":"","title":"TrueTypeGX/AAT Validation"},{"location":"ft2-gx_validation.html#synopsis","text":"This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).","title":"Synopsis"},{"location":"ft2-gx_validation.html#ft_truetypegx_validate","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). 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 ); Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).","title":"FT_TrueTypeGX_Validate"},{"location":"ft2-gx_validation.html#ft_truetypegx_free","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( void ) FT_TrueTypeGX_Free ( FT_Face face, FT_Bytes table ); Free the buffer allocated by TrueTypeGX validator.","title":"FT_TrueTypeGX_Free"},{"location":"ft2-gx_validation.html#ft_classickern_validate","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( FT_Error ) FT_ClassicKern_Validate ( FT_Face face, FT_UInt validation_flags, FT_Bytes *ckern_table ); Validate classic (16-bit format) kern table to assure that the offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming). The kern table validator in FT_TrueTypeGX_Validate deals with both the new 32-bit format and the classic 16-bit format, while FT_ClassicKern_Validate only supports the classic 16-bit format.","title":"FT_ClassicKern_Validate"},{"location":"ft2-gx_validation.html#ft_classickern_free","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). FT_EXPORT( void ) FT_ClassicKern_Free ( FT_Face face, FT_Bytes table ); Free the buffer allocated by classic Kern validator.","title":"FT_ClassicKern_Free"},{"location":"ft2-gx_validation.html#ft_validate_gx_length","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 ) The number of tables checked in this module. Use it as a parameter for the table-length argument of function FT_TrueTypeGX_Validate .","title":"FT_VALIDATE_GX_LENGTH"},{"location":"ft2-gx_validation.html#ft_validate_gxxxx","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # 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 ) A list of bit-field constants used with FT_TrueTypeGX_Validate to indicate which TrueTypeGX/AAT Type tables should be validated.","title":"FT_VALIDATE_GXXXX"},{"location":"ft2-gx_validation.html#ft_validate_ckernxxx","text":"Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h). # 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 ) 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.","title":"FT_VALIDATE_CKERNXXX"},{"location":"ft2-gzip.html","text":"FreeType Docs Support API GZIP Streams GZIP Streams Synopsis This section contains the declaration of Gzip-specific functions. FT_Stream_OpenGzip Defined in FT_GZIP_H (freetype/ftgzip.h). FT_EXPORT( FT_Error ) FT_Stream_OpenGzip ( FT_Stream stream, FT_Stream source ); 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_Gzip_Uncompress Defined in FT_GZIP_H (freetype/ftgzip.h). FT_EXPORT( FT_Error ) FT_Gzip_Uncompress ( FT_Memory memory, FT_Byte * output, FT_ULong * output_len, const FT_Byte * input, FT_ULong input_len ); Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's uncompress function. input memory A FreeType memory handle. input The input buffer. input_len The length of the input buffer. output output The output buffer. inout output_len Before calling the function, this is the total size of the output buffer, which must be large enough to hold the entire uncompressed data (so the size of the uncompressed data must be known in advance). After calling the function, output_len is the size of the used data in output . return FreeType error code. 0 means success. note This function may return FT_Err_Unimplemented_Feature if your build of FreeType was not compiled with zlib support. since 2.5.1","title":"GZIP Streams"},{"location":"ft2-gzip.html#gzip-streams","text":"","title":"GZIP Streams"},{"location":"ft2-gzip.html#synopsis","text":"This section contains the declaration of Gzip-specific functions.","title":"Synopsis"},{"location":"ft2-gzip.html#ft_stream_opengzip","text":"Defined in FT_GZIP_H (freetype/ftgzip.h). FT_EXPORT( FT_Error ) FT_Stream_OpenGzip ( FT_Stream stream, FT_Stream source ); 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.","title":"FT_Stream_OpenGzip"},{"location":"ft2-gzip.html#ft_gzip_uncompress","text":"Defined in FT_GZIP_H (freetype/ftgzip.h). FT_EXPORT( FT_Error ) FT_Gzip_Uncompress ( FT_Memory memory, FT_Byte * output, FT_ULong * output_len, const FT_Byte * input, FT_ULong input_len ); Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's uncompress function.","title":"FT_Gzip_Uncompress"},{"location":"ft2-header_file_macros.html","text":"FreeType Docs Core API Header File Macros Header File Macros Synopsis 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. FT_CONFIG_CONFIG_H # ifndef FT_CONFIG_CONFIG_H # define FT_CONFIG_CONFIG_H freetype/config/ftconfig.h # endif A macro used in #include statements to name the file containing FreeType 2 configuration data. FT_CONFIG_STANDARD_LIBRARY_H # ifndef FT_CONFIG_STANDARD_LIBRARY_H # define FT_CONFIG_STANDARD_LIBRARY_H freetype/config/ftstdlib.h # endif A macro used in #include statements to name the file containing FreeType 2 interface to the standard C library functions. FT_CONFIG_OPTIONS_H # ifndef FT_CONFIG_OPTIONS_H # define FT_CONFIG_OPTIONS_H freetype/config/ftoption.h # endif A macro used in #include statements to name the file containing FreeType 2 project-specific configuration options. FT_CONFIG_MODULES_H # ifndef FT_CONFIG_MODULES_H # define FT_CONFIG_MODULES_H freetype/config/ftmodule.h # endif 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 . FT_FREETYPE_H # define FT_FREETYPE_H freetype/freetype.h A macro used in #include statements to name the file containing the base FreeType 2 API. FT_ERRORS_H # define FT_ERRORS_H freetype/fterrors.h 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 . FT_MODULE_ERRORS_H # define FT_MODULE_ERRORS_H freetype/ftmoderr.h A macro used in #include statements to name the file containing the list of FreeType 2 module error offsets (and messages). FT_SYSTEM_H # define FT_SYSTEM_H freetype/ftsystem.h 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 . FT_IMAGE_H # define FT_IMAGE_H freetype/ftimage.h 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 . FT_TYPES_H # define FT_TYPES_H freetype/fttypes.h 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 . FT_LIST_H # define FT_LIST_H freetype/ftlist.h 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.) FT_OUTLINE_H # define FT_OUTLINE_H freetype/ftoutln.h A macro used in #include statements to name the file containing the scalable outline management API of FreeType 2. FT_SIZES_H # define FT_SIZES_H freetype/ftsizes.h A macro used in #include statements to name the file containing the API which manages multiple FT_Size objects per face. FT_MODULE_H # define FT_MODULE_H freetype/ftmodapi.h A macro used in #include statements to name the file containing the module management API of FreeType 2. FT_RENDER_H # define FT_RENDER_H freetype/ftrender.h A macro used in #include statements to name the file containing the renderer module management API of FreeType 2. FT_DRIVER_H # define FT_DRIVER_H freetype/ftdriver.h A macro used in #include statements to name the file containing structures and macros related to the driver modules. FT_AUTOHINTER_H # define FT_AUTOHINTER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the auto-hinting module. Deprecated since version 2.9; use FT_DRIVER_H instead. FT_CFF_DRIVER_H # define FT_CFF_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the CFF driver module. Deprecated since version 2.9; use FT_DRIVER_H instead. FT_TRUETYPE_DRIVER_H # define FT_TRUETYPE_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the TrueType driver module. Deprecated since version 2.9; use FT_DRIVER_H instead. FT_PCF_DRIVER_H # define FT_PCF_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the PCF driver module. Deprecated since version 2.9; use FT_DRIVER_H instead. FT_TYPE1_TABLES_H # define FT_TYPE1_TABLES_H freetype/t1tables.h A macro used in #include statements to name the file containing the types and API specific to the Type 1 format. FT_TRUETYPE_IDS_H # define FT_TRUETYPE_IDS_H freetype/ttnameid.h 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. FT_TRUETYPE_TABLES_H # define FT_TRUETYPE_TABLES_H freetype/tttables.h A macro used in #include statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format. FT_TRUETYPE_TAGS_H # define FT_TRUETYPE_TAGS_H freetype/tttags.h 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). FT_BDF_H # define FT_BDF_H freetype/ftbdf.h A macro used in #include statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face. FT_CID_H # define FT_CID_H freetype/ftcid.h A macro used in #include statements to name the file containing the definitions of an API which access CID font information from a face. FT_GZIP_H # define FT_GZIP_H freetype/ftgzip.h A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files. FT_LZW_H # define FT_LZW_H freetype/ftlzw.h A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files. FT_BZIP2_H # define FT_BZIP2_H freetype/ftbzip2.h A macro used in #include statements to name the file containing the definitions of an API which supports bzip2-compressed files. FT_WINFONTS_H # define FT_WINFONTS_H freetype/ftwinfnt.h A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files. FT_GLYPH_H # define FT_GLYPH_H freetype/ftglyph.h A macro used in #include statements to name the file containing the API of the optional glyph management component. FT_BITMAP_H # define FT_BITMAP_H freetype/ftbitmap.h A macro used in #include statements to name the file containing the API of the optional bitmap conversion component. FT_BBOX_H # define FT_BBOX_H freetype/ftbbox.h A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines. FT_CACHE_H # define FT_CACHE_H freetype/ftcache.h A macro used in #include statements to name the file containing the API of the optional FreeType 2 cache sub-system. FT_MAC_H # define FT_MAC_H freetype/ftmac.h 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). FT_MULTIPLE_MASTERS_H # define FT_MULTIPLE_MASTERS_H freetype/ftmm.h A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType 2. FT_SFNT_NAMES_H # define FT_SFNT_NAMES_H freetype/ftsnames.h 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). FT_OPENTYPE_VALIDATE_H # define FT_OPENTYPE_VALIDATE_H freetype/ftotval.h 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 ). FT_GX_VALIDATE_H # define FT_GX_VALIDATE_H freetype/ftgxval.h 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 ). FT_PFR_H # define FT_PFR_H freetype/ftpfr.h A macro used in #include statements to name the file containing the FreeType 2 API which accesses PFR-specific data. FT_STROKER_H # define FT_STROKER_H freetype/ftstroke.h A macro used in #include statements to name the file containing the FreeType 2 API which provides functions to stroke outline paths. FT_SYNTHESIS_H # define FT_SYNTHESIS_H freetype/ftsynth.h A macro used in #include statements to name the file containing the FreeType 2 API which performs artificial obliquing and emboldening. FT_FONT_FORMATS_H # define FT_FONT_FORMATS_H freetype/ftfntfmt.h /* deprecated */ # define FT_XFREE86_H FT_FONT_FORMATS_H A macro used in #include statements to name the file containing the FreeType 2 API which provides functions specific to font formats. FT_TRIGONOMETRY_H # define FT_TRIGONOMETRY_H freetype/fttrigon.h 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). FT_LCD_FILTER_H # define FT_LCD_FILTER_H freetype/ftlcdfil.h A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering. FT_INCREMENTAL_H # define FT_INCREMENTAL_H freetype/ftincrem.h A macro used in #include statements to name the file containing the FreeType 2 API which performs incremental glyph loading. FT_GASP_H # define FT_GASP_H freetype/ftgasp.h A macro used in #include statements to name the file containing the FreeType 2 API which returns entries from the TrueType GASP table. FT_ADVANCES_H # define FT_ADVANCES_H freetype/ftadvanc.h A macro used in #include statements to name the file containing the FreeType 2 API which returns individual and ranged glyph advances. FT_COLOR_H # define FT_COLOR_H freetype/ftcolor.h A macro used in #include statements to name the file containing the FreeType 2 API which handles the OpenType CPAL table.","title":"Header File Macros"},{"location":"ft2-header_file_macros.html#header-file-macros","text":"","title":"Header File Macros"},{"location":"ft2-header_file_macros.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-header_file_macros.html#ft_config_config_h","text":"# ifndef FT_CONFIG_CONFIG_H # define FT_CONFIG_CONFIG_H freetype/config/ftconfig.h # endif A macro used in #include statements to name the file containing FreeType 2 configuration data.","title":"FT_CONFIG_CONFIG_H"},{"location":"ft2-header_file_macros.html#ft_config_standard_library_h","text":"# ifndef FT_CONFIG_STANDARD_LIBRARY_H # define FT_CONFIG_STANDARD_LIBRARY_H freetype/config/ftstdlib.h # endif A macro used in #include statements to name the file containing FreeType 2 interface to the standard C library functions.","title":"FT_CONFIG_STANDARD_LIBRARY_H"},{"location":"ft2-header_file_macros.html#ft_config_options_h","text":"# ifndef FT_CONFIG_OPTIONS_H # define FT_CONFIG_OPTIONS_H freetype/config/ftoption.h # endif A macro used in #include statements to name the file containing FreeType 2 project-specific configuration options.","title":"FT_CONFIG_OPTIONS_H"},{"location":"ft2-header_file_macros.html#ft_config_modules_h","text":"# ifndef FT_CONFIG_MODULES_H # define FT_CONFIG_MODULES_H freetype/config/ftmodule.h # endif 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 .","title":"FT_CONFIG_MODULES_H"},{"location":"ft2-header_file_macros.html#ft_freetype_h","text":"# define FT_FREETYPE_H freetype/freetype.h A macro used in #include statements to name the file containing the base FreeType 2 API.","title":"FT_FREETYPE_H"},{"location":"ft2-header_file_macros.html#ft_errors_h","text":"# define FT_ERRORS_H freetype/fterrors.h 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 .","title":"FT_ERRORS_H"},{"location":"ft2-header_file_macros.html#ft_module_errors_h","text":"# define FT_MODULE_ERRORS_H freetype/ftmoderr.h A macro used in #include statements to name the file containing the list of FreeType 2 module error offsets (and messages).","title":"FT_MODULE_ERRORS_H"},{"location":"ft2-header_file_macros.html#ft_system_h","text":"# define FT_SYSTEM_H freetype/ftsystem.h 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 .","title":"FT_SYSTEM_H"},{"location":"ft2-header_file_macros.html#ft_image_h","text":"# define FT_IMAGE_H freetype/ftimage.h 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 .","title":"FT_IMAGE_H"},{"location":"ft2-header_file_macros.html#ft_types_h","text":"# define FT_TYPES_H freetype/fttypes.h 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 .","title":"FT_TYPES_H"},{"location":"ft2-header_file_macros.html#ft_list_h","text":"# define FT_LIST_H freetype/ftlist.h 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.)","title":"FT_LIST_H"},{"location":"ft2-header_file_macros.html#ft_outline_h","text":"# define FT_OUTLINE_H freetype/ftoutln.h A macro used in #include statements to name the file containing the scalable outline management API of FreeType 2.","title":"FT_OUTLINE_H"},{"location":"ft2-header_file_macros.html#ft_sizes_h","text":"# define FT_SIZES_H freetype/ftsizes.h A macro used in #include statements to name the file containing the API which manages multiple FT_Size objects per face.","title":"FT_SIZES_H"},{"location":"ft2-header_file_macros.html#ft_module_h","text":"# define FT_MODULE_H freetype/ftmodapi.h A macro used in #include statements to name the file containing the module management API of FreeType 2.","title":"FT_MODULE_H"},{"location":"ft2-header_file_macros.html#ft_render_h","text":"# define FT_RENDER_H freetype/ftrender.h A macro used in #include statements to name the file containing the renderer module management API of FreeType 2.","title":"FT_RENDER_H"},{"location":"ft2-header_file_macros.html#ft_driver_h","text":"# define FT_DRIVER_H freetype/ftdriver.h A macro used in #include statements to name the file containing structures and macros related to the driver modules.","title":"FT_DRIVER_H"},{"location":"ft2-header_file_macros.html#ft_autohinter_h","text":"# define FT_AUTOHINTER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the auto-hinting module. Deprecated since version 2.9; use FT_DRIVER_H instead.","title":"FT_AUTOHINTER_H"},{"location":"ft2-header_file_macros.html#ft_cff_driver_h","text":"# define FT_CFF_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the CFF driver module. Deprecated since version 2.9; use FT_DRIVER_H instead.","title":"FT_CFF_DRIVER_H"},{"location":"ft2-header_file_macros.html#ft_truetype_driver_h","text":"# define FT_TRUETYPE_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the TrueType driver module. Deprecated since version 2.9; use FT_DRIVER_H instead.","title":"FT_TRUETYPE_DRIVER_H"},{"location":"ft2-header_file_macros.html#ft_pcf_driver_h","text":"# define FT_PCF_DRIVER_H FT_DRIVER_H A macro used in #include statements to name the file containing structures and macros related to the PCF driver module. Deprecated since version 2.9; use FT_DRIVER_H instead.","title":"FT_PCF_DRIVER_H"},{"location":"ft2-header_file_macros.html#ft_type1_tables_h","text":"# define FT_TYPE1_TABLES_H freetype/t1tables.h A macro used in #include statements to name the file containing the types and API specific to the Type 1 format.","title":"FT_TYPE1_TABLES_H"},{"location":"ft2-header_file_macros.html#ft_truetype_ids_h","text":"# define FT_TRUETYPE_IDS_H freetype/ttnameid.h 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.","title":"FT_TRUETYPE_IDS_H"},{"location":"ft2-header_file_macros.html#ft_truetype_tables_h","text":"# define FT_TRUETYPE_TABLES_H freetype/tttables.h A macro used in #include statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format.","title":"FT_TRUETYPE_TABLES_H"},{"location":"ft2-header_file_macros.html#ft_truetype_tags_h","text":"# define FT_TRUETYPE_TAGS_H freetype/tttags.h 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).","title":"FT_TRUETYPE_TAGS_H"},{"location":"ft2-header_file_macros.html#ft_bdf_h","text":"# define FT_BDF_H freetype/ftbdf.h A macro used in #include statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face.","title":"FT_BDF_H"},{"location":"ft2-header_file_macros.html#ft_cid_h","text":"# define FT_CID_H freetype/ftcid.h A macro used in #include statements to name the file containing the definitions of an API which access CID font information from a face.","title":"FT_CID_H"},{"location":"ft2-header_file_macros.html#ft_gzip_h","text":"# define FT_GZIP_H freetype/ftgzip.h A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files.","title":"FT_GZIP_H"},{"location":"ft2-header_file_macros.html#ft_lzw_h","text":"# define FT_LZW_H freetype/ftlzw.h A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files.","title":"FT_LZW_H"},{"location":"ft2-header_file_macros.html#ft_bzip2_h","text":"# define FT_BZIP2_H freetype/ftbzip2.h A macro used in #include statements to name the file containing the definitions of an API which supports bzip2-compressed files.","title":"FT_BZIP2_H"},{"location":"ft2-header_file_macros.html#ft_winfonts_h","text":"# define FT_WINFONTS_H freetype/ftwinfnt.h A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files.","title":"FT_WINFONTS_H"},{"location":"ft2-header_file_macros.html#ft_glyph_h","text":"# define FT_GLYPH_H freetype/ftglyph.h A macro used in #include statements to name the file containing the API of the optional glyph management component.","title":"FT_GLYPH_H"},{"location":"ft2-header_file_macros.html#ft_bitmap_h","text":"# define FT_BITMAP_H freetype/ftbitmap.h A macro used in #include statements to name the file containing the API of the optional bitmap conversion component.","title":"FT_BITMAP_H"},{"location":"ft2-header_file_macros.html#ft_bbox_h","text":"# define FT_BBOX_H freetype/ftbbox.h A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines.","title":"FT_BBOX_H"},{"location":"ft2-header_file_macros.html#ft_cache_h","text":"# define FT_CACHE_H freetype/ftcache.h A macro used in #include statements to name the file containing the API of the optional FreeType 2 cache sub-system.","title":"FT_CACHE_H"},{"location":"ft2-header_file_macros.html#ft_mac_h","text":"# define FT_MAC_H freetype/ftmac.h 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).","title":"FT_MAC_H"},{"location":"ft2-header_file_macros.html#ft_multiple_masters_h","text":"# define FT_MULTIPLE_MASTERS_H freetype/ftmm.h A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType 2.","title":"FT_MULTIPLE_MASTERS_H"},{"location":"ft2-header_file_macros.html#ft_sfnt_names_h","text":"# define FT_SFNT_NAMES_H freetype/ftsnames.h 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).","title":"FT_SFNT_NAMES_H"},{"location":"ft2-header_file_macros.html#ft_opentype_validate_h","text":"# define FT_OPENTYPE_VALIDATE_H freetype/ftotval.h 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 ).","title":"FT_OPENTYPE_VALIDATE_H"},{"location":"ft2-header_file_macros.html#ft_gx_validate_h","text":"# define FT_GX_VALIDATE_H freetype/ftgxval.h 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 ).","title":"FT_GX_VALIDATE_H"},{"location":"ft2-header_file_macros.html#ft_pfr_h","text":"# define FT_PFR_H freetype/ftpfr.h A macro used in #include statements to name the file containing the FreeType 2 API which accesses PFR-specific data.","title":"FT_PFR_H"},{"location":"ft2-header_file_macros.html#ft_stroker_h","text":"# define FT_STROKER_H freetype/ftstroke.h A macro used in #include statements to name the file containing the FreeType 2 API which provides functions to stroke outline paths.","title":"FT_STROKER_H"},{"location":"ft2-header_file_macros.html#ft_synthesis_h","text":"# define FT_SYNTHESIS_H freetype/ftsynth.h A macro used in #include statements to name the file containing the FreeType 2 API which performs artificial obliquing and emboldening.","title":"FT_SYNTHESIS_H"},{"location":"ft2-header_file_macros.html#ft_font_formats_h","text":"# define FT_FONT_FORMATS_H freetype/ftfntfmt.h /* deprecated */ # define FT_XFREE86_H FT_FONT_FORMATS_H A macro used in #include statements to name the file containing the FreeType 2 API which provides functions specific to font formats.","title":"FT_FONT_FORMATS_H"},{"location":"ft2-header_file_macros.html#ft_trigonometry_h","text":"# define FT_TRIGONOMETRY_H freetype/fttrigon.h 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).","title":"FT_TRIGONOMETRY_H"},{"location":"ft2-header_file_macros.html#ft_lcd_filter_h","text":"# define FT_LCD_FILTER_H freetype/ftlcdfil.h A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering.","title":"FT_LCD_FILTER_H"},{"location":"ft2-header_file_macros.html#ft_incremental_h","text":"# define FT_INCREMENTAL_H freetype/ftincrem.h A macro used in #include statements to name the file containing the FreeType 2 API which performs incremental glyph loading.","title":"FT_INCREMENTAL_H"},{"location":"ft2-header_file_macros.html#ft_gasp_h","text":"# define FT_GASP_H freetype/ftgasp.h A macro used in #include statements to name the file containing the FreeType 2 API which returns entries from the TrueType GASP table.","title":"FT_GASP_H"},{"location":"ft2-header_file_macros.html#ft_advances_h","text":"# define FT_ADVANCES_H freetype/ftadvanc.h A macro used in #include statements to name the file containing the FreeType 2 API which returns individual and ranged glyph advances.","title":"FT_ADVANCES_H"},{"location":"ft2-header_file_macros.html#ft_color_h","text":"# define FT_COLOR_H freetype/ftcolor.h A macro used in #include statements to name the file containing the FreeType 2 API which handles the OpenType CPAL table.","title":"FT_COLOR_H"},{"location":"ft2-header_inclusion.html","text":"FreeType Docs General Remarks FreeType's header inclusion scheme FreeType's header inclusion scheme Synopsis To be as flexible as possible (and for historical reasons), FreeType uses a very special inclusion scheme to load header files, for example #include ft2build.h #include FT_FREETYPE_H #include FT_OUTLINE_H A compiler and its preprocessor only needs an include path to find the file ft2build.h ; the exact locations and names of the other FreeType header files are hidden by Header File Macros , loaded by ft2build.h . The API documentation always gives the header macro name needed for a particular function.","title":"FreeType's header inclusion scheme"},{"location":"ft2-header_inclusion.html#freetypes-header-inclusion-scheme","text":"","title":"FreeType's header inclusion scheme"},{"location":"ft2-header_inclusion.html#synopsis","text":"To be as flexible as possible (and for historical reasons), FreeType uses a very special inclusion scheme to load header files, for example #include ft2build.h #include FT_FREETYPE_H #include FT_OUTLINE_H A compiler and its preprocessor only needs an include path to find the file ft2build.h ; the exact locations and names of the other FreeType header files are hidden by Header File Macros , loaded by ft2build.h . The API documentation always gives the header macro name needed for a particular function.","title":"Synopsis"},{"location":"ft2-incremental.html","text":"FreeType Docs Miscellaneous Incremental Loading Incremental Loading Synopsis 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. FT_Incremental Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_IncrementalRec_* FT_Incremental ; 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. FT_Incremental_MetricsRec Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_MetricsRec_ { FT_Long bearing_x; FT_Long bearing_y; FT_Long advance; FT_Long advance_v; /* since 2.3.12 */ } FT_Incremental_MetricsRec ; A small structure used to contain the basic glyph metrics returned by the FT_Incremental_GetGlyphMetricsFunc method. fields bearing_x Left bearing, in font units. bearing_y Top bearing, in font units. advance Horizontal component of glyph advance, in font units. advance_v Vertical component of glyph advance, in font units. note These correspond to horizontal or vertical metrics depending on the value of the vertical argument to the function FT_Incremental_GetGlyphMetricsFunc . FT_Incremental_Metrics Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics ; A handle to an FT_Incremental_MetricsRec structure. FT_Incremental_GetGlyphDataFunc Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Error (* FT_Incremental_GetGlyphDataFunc )( FT_Incremental incremental, FT_UInt glyph_index, FT_Data * adata ); 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. FT_Incremental_FreeGlyphDataFunc Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef void (* FT_Incremental_FreeGlyphDataFunc )( FT_Incremental incremental, FT_Data * data ); 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). FT_Incremental_GetGlyphMetricsFunc Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Error (* FT_Incremental_GetGlyphMetricsFunc ) ( FT_Incremental incremental, FT_UInt glyph_index, FT_Bool vertical, FT_Incremental_MetricsRec *ametrics ); 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. FT_Incremental_FuncsRec Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). 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 ; 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. FT_Incremental_InterfaceRec Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_InterfaceRec_ { const FT_Incremental_FuncsRec * funcs; FT_Incremental object; } FT_Incremental_InterfaceRec ; 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 ); ... FT_Incremental_Interface Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Incremental_InterfaceRec * FT_Incremental_Interface ; A pointer to an FT_Incremental_InterfaceRec structure.","title":"Incremental Loading"},{"location":"ft2-incremental.html#incremental-loading","text":"","title":"Incremental Loading"},{"location":"ft2-incremental.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-incremental.html#ft_incremental","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_IncrementalRec_* FT_Incremental ; 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.","title":"FT_Incremental"},{"location":"ft2-incremental.html#ft_incremental_metricsrec","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_MetricsRec_ { FT_Long bearing_x; FT_Long bearing_y; FT_Long advance; FT_Long advance_v; /* since 2.3.12 */ } FT_Incremental_MetricsRec ; A small structure used to contain the basic glyph metrics returned by the FT_Incremental_GetGlyphMetricsFunc method.","title":"FT_Incremental_MetricsRec"},{"location":"ft2-incremental.html#ft_incremental_metrics","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics ; A handle to an FT_Incremental_MetricsRec structure.","title":"FT_Incremental_Metrics"},{"location":"ft2-incremental.html#ft_incremental_getglyphdatafunc","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Error (* FT_Incremental_GetGlyphDataFunc )( FT_Incremental incremental, FT_UInt glyph_index, FT_Data * adata ); 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.","title":"FT_Incremental_GetGlyphDataFunc"},{"location":"ft2-incremental.html#ft_incremental_freeglyphdatafunc","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef void (* FT_Incremental_FreeGlyphDataFunc )( FT_Incremental incremental, FT_Data * data ); A function used to release the glyph data bytes returned by a successful call to FT_Incremental_GetGlyphDataFunc .","title":"FT_Incremental_FreeGlyphDataFunc"},{"location":"ft2-incremental.html#ft_incremental_getglyphmetricsfunc","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Error (* FT_Incremental_GetGlyphMetricsFunc ) ( FT_Incremental incremental, FT_UInt glyph_index, FT_Bool vertical, FT_Incremental_MetricsRec *ametrics ); 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.","title":"FT_Incremental_GetGlyphMetricsFunc"},{"location":"ft2-incremental.html#ft_incremental_funcsrec","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). 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 ; A table of functions for accessing fonts that load data incrementally. Used in FT_Incremental_InterfaceRec .","title":"FT_Incremental_FuncsRec"},{"location":"ft2-incremental.html#ft_incremental_interfacerec","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef struct FT_Incremental_InterfaceRec_ { const FT_Incremental_FuncsRec * funcs; FT_Incremental object; } FT_Incremental_InterfaceRec ; 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 ); ...","title":"FT_Incremental_InterfaceRec"},{"location":"ft2-incremental.html#ft_incremental_interface","text":"Defined in FT_INCREMENTAL_H (freetype/ftincrem.h). typedef FT_Incremental_InterfaceRec * FT_Incremental_Interface ; A pointer to an FT_Incremental_InterfaceRec structure.","title":"FT_Incremental_Interface"},{"location":"ft2-index.html","text":"FreeType Docs Global Index FreeType-2.10.1 API Reference B BDF_Property BDF_PROPERTY_TYPE_ATOM BDF_PROPERTY_TYPE_CARDINAL BDF_PROPERTY_TYPE_INTEGER BDF_PROPERTY_TYPE_NONE BDF_PropertyRec BDF_PropertyType C CID_FaceDict CID_FaceDictRec CID_FaceInfo CID_FaceInfoRec CID_FontDict CID_Info D darkening-parameters default-script F fallback-script FREETYPE_MAJOR FREETYPE_MINOR FREETYPE_PATCH FREETYPE_XXX FT_Activate_Size FT_Add_Default_Modules FT_Add_Module FT_ADVANCE_FLAG_FAST_ONLY FT_ADVANCES_H FT_Alloc_Func FT_Angle FT_ANGLE_2PI FT_Angle_Diff FT_ANGLE_PI FT_ANGLE_PI2 FT_ANGLE_PI4 FT_Atan2 FT_Attach_File FT_Attach_Stream FT_AUTOHINTER_H FT_AUTOHINTER_SCRIPT_CJK FT_AUTOHINTER_SCRIPT_INDIC FT_AUTOHINTER_SCRIPT_LATIN FT_AUTOHINTER_SCRIPT_NONE FT_AUTOHINTER_SCRIPT_XXX FT_BBox FT_BBOX_H FT_BDF_H FT_Bitmap FT_Bitmap_Blend FT_Bitmap_Convert FT_Bitmap_Copy FT_Bitmap_Done FT_Bitmap_Embolden FT_BITMAP_H FT_Bitmap_Init FT_Bitmap_Size FT_BitmapGlyph FT_BitmapGlyphRec FT_Bool FT_Byte FT_Bytes FT_BZIP2_H FT_CACHE_H FT_CeilFix FT_CFF_DRIVER_H FT_Char FT_CharMap FT_CharMapRec FT_CID_H FT_ClassicKern_Free FT_ClassicKern_Validate FT_Color FT_COLOR_H FT_CONFIG_CONFIG_H FT_CONFIG_MODULES_H FT_CONFIG_OPTIONS_H FT_CONFIG_STANDARD_LIBRARY_H FT_Cos FT_Data FT_DEBUG_HOOK_TRUETYPE FT_DEBUG_HOOK_XXX FT_DebugHook_Func FT_DivFix FT_Done_Face FT_Done_FreeType FT_Done_Glyph FT_Done_Library FT_Done_MM_Var FT_Done_Size FT_Driver FT_DRIVER_H FT_ENC_TAG FT_Encoding FT_ENCODING_ADOBE_CUSTOM FT_ENCODING_ADOBE_EXPERT FT_ENCODING_ADOBE_LATIN_1 FT_ENCODING_ADOBE_STANDARD FT_ENCODING_APPLE_ROMAN FT_ENCODING_BIG5 FT_ENCODING_JOHAB FT_ENCODING_MS_BIG5 FT_ENCODING_MS_GB2312 FT_ENCODING_MS_JOHAB FT_ENCODING_MS_SJIS FT_ENCODING_MS_SYMBOL FT_ENCODING_MS_WANSUNG FT_ENCODING_NONE FT_ENCODING_OLD_LATIN_2 FT_ENCODING_PRC FT_ENCODING_SJIS FT_ENCODING_UNICODE FT_ENCODING_WANSUNG FT_Err_XXX FT_Error FT_Error_String FT_ERRORS_H FT_F26Dot6 FT_F2Dot14 FT_Face FT_Face_CheckTrueTypePatents FT_FACE_FLAG_CID_KEYED FT_FACE_FLAG_COLOR FT_FACE_FLAG_EXTERNAL_STREAM FT_FACE_FLAG_FAST_GLYPHS FT_FACE_FLAG_FIXED_SIZES FT_FACE_FLAG_FIXED_WIDTH FT_FACE_FLAG_GLYPH_NAMES FT_FACE_FLAG_HINTER FT_FACE_FLAG_HORIZONTAL FT_FACE_FLAG_KERNING FT_FACE_FLAG_MULTIPLE_MASTERS FT_FACE_FLAG_SCALABLE FT_FACE_FLAG_SFNT FT_FACE_FLAG_TRICKY FT_FACE_FLAG_VARIATION FT_FACE_FLAG_VERTICAL FT_FACE_FLAG_XXX FT_Face_GetCharsOfVariant FT_Face_GetCharVariantIndex FT_Face_GetCharVariantIsDefault FT_Face_GetVariantSelectors FT_Face_GetVariantsOfChar FT_Face_Internal FT_Face_Properties FT_Face_SetUnpatentedHinting FT_FaceRec FT_Fixed FT_FloorFix FT_FONT_FORMATS_H FT_Free_Func FT_FREETYPE_H FT_FSTYPE_BITMAP_EMBEDDING_ONLY FT_FSTYPE_EDITABLE_EMBEDDING FT_FSTYPE_INSTALLABLE_EMBEDDING FT_FSTYPE_NO_SUBSETTING FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING FT_FSTYPE_XXX FT_FWord FT_GASP_DO_GRAY FT_GASP_DO_GRIDFIT FT_GASP_H FT_GASP_NO_TABLE FT_GASP_SYMMETRIC_GRIDFIT FT_GASP_SYMMETRIC_SMOOTHING FT_GASP_XXX FT_Generic FT_Generic_Finalizer FT_Get_Advance FT_Get_Advances FT_Get_BDF_Charset_ID FT_Get_BDF_Property FT_Get_Char_Index FT_Get_Charmap_Index FT_Get_CID_From_Glyph_Index FT_Get_CID_Is_Internally_CID_Keyed FT_Get_CID_Registry_Ordering_Supplement FT_Get_CMap_Format FT_Get_CMap_Language_ID FT_Get_Color_Glyph_Layer FT_Get_First_Char FT_Get_Font_Format FT_Get_FSType_Flags FT_Get_Gasp FT_Get_Glyph FT_Get_Glyph_Name FT_Get_Kerning FT_Get_MM_Blend_Coordinates FT_Get_MM_Var FT_Get_MM_WeightVector FT_Get_Module FT_Get_Multi_Master FT_Get_Name_Index FT_Get_Next_Char FT_Get_PFR_Advance FT_Get_PFR_Kerning FT_Get_PFR_Metrics FT_Get_Postscript_Name FT_Get_PS_Font_Info FT_Get_PS_Font_Private FT_Get_PS_Font_Value FT_Get_Renderer FT_Get_Sfnt_LangTag FT_Get_Sfnt_Name FT_Get_Sfnt_Name_Count FT_Get_Sfnt_Table FT_Get_SubGlyph_Info FT_Get_Track_Kerning FT_Get_TrueType_Engine_Type FT_Get_Var_Axis_Flags FT_Get_Var_Blend_Coordinates FT_Get_Var_Design_Coordinates FT_Get_WinFNT_Header FT_GetFile_From_Mac_ATS_Name FT_GetFile_From_Mac_Name FT_GetFilePath_From_Mac_ATS_Name FT_Glyph FT_GLYPH_BBOX_GRIDFIT FT_Glyph_BBox_Mode FT_GLYPH_BBOX_PIXELS FT_GLYPH_BBOX_SUBPIXELS FT_GLYPH_BBOX_TRUNCATE FT_GLYPH_BBOX_UNSCALED FT_Glyph_Copy FT_Glyph_Format FT_GLYPH_FORMAT_BITMAP FT_GLYPH_FORMAT_COMPOSITE FT_GLYPH_FORMAT_NONE FT_GLYPH_FORMAT_OUTLINE FT_GLYPH_FORMAT_PLOTTER FT_Glyph_Get_CBox FT_GLYPH_H FT_Glyph_Metrics FT_Glyph_Stroke FT_Glyph_StrokeBorder FT_Glyph_To_Bitmap FT_Glyph_Transform FT_GlyphRec FT_GlyphSlot FT_GlyphSlot_Own_Bitmap FT_GlyphSlotRec FT_GX_VALIDATE_H FT_GZIP_H FT_Gzip_Uncompress FT_HAS_COLOR FT_HAS_FAST_GLYPHS FT_HAS_FIXED_SIZES FT_HAS_GLYPH_NAMES FT_HAS_HORIZONTAL FT_HAS_KERNING FT_HAS_MULTIPLE_MASTERS FT_Has_PS_Glyph_Names FT_HAS_VERTICAL FT_HINTING_ADOBE FT_HINTING_FREETYPE FT_HINTING_XXX FT_IMAGE_H FT_IMAGE_TAG FT_Incremental FT_Incremental_FreeGlyphDataFunc FT_Incremental_FuncsRec FT_Incremental_GetGlyphDataFunc FT_Incremental_GetGlyphMetricsFunc FT_INCREMENTAL_H FT_Incremental_Interface FT_Incremental_InterfaceRec FT_Incremental_Metrics FT_Incremental_MetricsRec FT_Init_FreeType FT_Int FT_Int16 FT_Int32 FT_Int64 FT_IS_CID_KEYED FT_IS_FIXED_WIDTH FT_IS_NAMED_INSTANCE FT_IS_SCALABLE FT_IS_SFNT FT_IS_TRICKY FT_IS_VARIATION FT_KERNING_DEFAULT FT_Kerning_Mode FT_KERNING_UNFITTED FT_KERNING_UNSCALED FT_LayerIterator FT_LCD_FILTER_DEFAULT FT_LCD_FILTER_H FT_LCD_FILTER_LEGACY FT_LCD_FILTER_LEGACY1 FT_LCD_FILTER_LIGHT FT_LCD_FILTER_NONE FT_LcdFilter FT_LcdFiveTapFilter FT_Library FT_Library_SetLcdFilter FT_Library_SetLcdFilterWeights FT_Library_SetLcdGeometry FT_Library_Version FT_List FT_List_Add FT_List_Destructor FT_List_Finalize FT_List_Find FT_LIST_H FT_List_Insert FT_List_Iterate FT_List_Iterator FT_List_Remove FT_List_Up FT_ListNode FT_ListNodeRec FT_ListRec FT_LOAD_BITMAP_METRICS_ONLY FT_Load_Char FT_LOAD_COLOR FT_LOAD_COMPUTE_METRICS FT_LOAD_CROP_BITMAP FT_LOAD_DEFAULT FT_LOAD_FORCE_AUTOHINT FT_Load_Glyph FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH FT_LOAD_IGNORE_TRANSFORM FT_LOAD_LINEAR_DESIGN FT_LOAD_MONOCHROME FT_LOAD_NO_AUTOHINT FT_LOAD_NO_BITMAP FT_LOAD_NO_HINTING FT_LOAD_NO_RECURSE FT_LOAD_NO_SCALE FT_LOAD_PEDANTIC FT_LOAD_RENDER FT_Load_Sfnt_Table FT_LOAD_TARGET_LCD FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_MODE FT_LOAD_TARGET_MONO FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_XXX FT_LOAD_VERTICAL_LAYOUT FT_LOAD_XXX FT_Long FT_LZW_H FT_MAC_H FT_MAKE_TAG FT_Matrix FT_Matrix_Invert FT_Matrix_Multiply FT_Memory FT_MemoryRec FT_MM_Axis FT_MM_Var FT_Module FT_Module_Class FT_Module_Constructor FT_Module_Destructor FT_MODULE_ERRORS_H FT_MODULE_H FT_Module_Requester FT_MulDiv FT_MulFix FT_Multi_Master FT_MULTIPLE_MASTERS_H FT_New_Face FT_New_Face_From_FOND FT_New_Face_From_FSRef FT_New_Face_From_FSSpec FT_New_Glyph FT_New_Library FT_New_Memory_Face FT_New_Size FT_Offset FT_Open_Args FT_OPEN_DRIVER FT_Open_Face FT_OPEN_MEMORY FT_OPEN_PARAMS FT_OPEN_PATHNAME FT_OPEN_STREAM FT_OPEN_XXX FT_OpenType_Free FT_OpenType_Validate FT_OPENTYPE_VALIDATE_H FT_Orientation FT_ORIENTATION_FILL_LEFT FT_ORIENTATION_FILL_RIGHT FT_ORIENTATION_NONE FT_ORIENTATION_POSTSCRIPT FT_ORIENTATION_TRUETYPE FT_Outline FT_Outline_Check FT_Outline_ConicToFunc FT_Outline_Copy FT_Outline_CubicToFunc FT_Outline_Decompose FT_Outline_Done FT_Outline_Embolden FT_Outline_EmboldenXY FT_OUTLINE_EVEN_ODD_FILL FT_Outline_Funcs FT_Outline_Get_BBox FT_Outline_Get_Bitmap FT_Outline_Get_CBox FT_Outline_Get_Orientation FT_Outline_GetInsideBorder FT_Outline_GetOutsideBorder FT_OUTLINE_H FT_OUTLINE_HIGH_PRECISION FT_OUTLINE_IGNORE_DROPOUTS FT_OUTLINE_INCLUDE_STUBS FT_Outline_LineToFunc FT_Outline_MoveToFunc FT_Outline_New FT_OUTLINE_NONE FT_OUTLINE_OWNER FT_Outline_Render FT_Outline_Reverse FT_OUTLINE_REVERSE_FILL FT_OUTLINE_SINGLE_PASS FT_OUTLINE_SMART_DROPOUTS FT_Outline_Transform FT_Outline_Translate FT_OUTLINE_XXX FT_OutlineGlyph FT_OutlineGlyphRec FT_Palette_Data FT_Palette_Data_Get FT_PALETTE_FOR_DARK_BACKGROUND FT_PALETTE_FOR_LIGHT_BACKGROUND FT_Palette_Select FT_Palette_Set_Foreground_Color FT_PALETTE_XXX FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY FT_PARAM_TAG_INCREMENTAL FT_PARAM_TAG_LCD_FILTER_WEIGHTS FT_PARAM_TAG_RANDOM_SEED FT_PARAM_TAG_STEM_DARKENING FT_PARAM_TAG_UNPATENTED_HINTING FT_Parameter FT_PCF_DRIVER_H FT_PFR_H FT_Pixel_Mode FT_PIXEL_MODE_BGRA FT_PIXEL_MODE_GRAY FT_PIXEL_MODE_GRAY2 FT_PIXEL_MODE_GRAY4 FT_PIXEL_MODE_LCD FT_PIXEL_MODE_LCD_V FT_PIXEL_MODE_MONO FT_PIXEL_MODE_NONE FT_Pointer FT_Pos FT_Prop_GlyphToScriptMap FT_Prop_IncreaseXHeight FT_Property_Get FT_Property_Set FT_PtrDist FT_Raster FT_Raster_BitSet_Func FT_Raster_BitTest_Func FT_Raster_DoneFunc FT_RASTER_FLAG_AA FT_RASTER_FLAG_CLIP FT_RASTER_FLAG_DEFAULT FT_RASTER_FLAG_DIRECT FT_RASTER_FLAG_XXX FT_Raster_Funcs FT_Raster_NewFunc FT_Raster_Params FT_Raster_RenderFunc FT_Raster_ResetFunc FT_Raster_SetModeFunc FT_Realloc_Func FT_Reference_Face FT_Reference_Library FT_Remove_Module FT_Render_Glyph FT_RENDER_H FT_Render_Mode FT_RENDER_MODE_LCD FT_RENDER_MODE_LCD_V FT_RENDER_MODE_LIGHT FT_RENDER_MODE_MONO FT_RENDER_MODE_NORMAL FT_Renderer FT_Renderer_Class FT_Request_Size FT_RoundFix FT_Select_Charmap FT_Select_Size FT_Set_Char_Size FT_Set_Charmap FT_Set_Debug_Hook FT_Set_Default_Properties FT_Set_MM_Blend_Coordinates FT_Set_MM_Design_Coordinates FT_Set_MM_WeightVector FT_Set_Named_Instance FT_Set_Pixel_Sizes FT_Set_Renderer FT_Set_Transform FT_Set_Var_Blend_Coordinates FT_Set_Var_Design_Coordinates FT_SFNT_HEAD FT_SFNT_HHEA FT_SFNT_MAXP FT_SFNT_NAMES_H FT_SFNT_OS2 FT_SFNT_PCLT FT_SFNT_POST FT_Sfnt_Table_Info FT_Sfnt_Tag FT_SFNT_VHEA FT_SfntLangTag FT_SfntName FT_Short FT_Sin FT_Size FT_Size_Internal FT_Size_Metrics FT_Size_Request FT_Size_Request_Type FT_SIZE_REQUEST_TYPE_BBOX FT_SIZE_REQUEST_TYPE_CELL FT_SIZE_REQUEST_TYPE_NOMINAL FT_SIZE_REQUEST_TYPE_REAL_DIM FT_SIZE_REQUEST_TYPE_SCALES FT_Size_RequestRec FT_SizeRec FT_SIZES_H FT_Slot_Internal FT_Span FT_SpanFunc FT_Stream FT_Stream_CloseFunc FT_Stream_IoFunc FT_Stream_OpenBzip2 FT_Stream_OpenGzip FT_Stream_OpenLZW FT_StreamDesc FT_StreamRec FT_String FT_Stroker FT_Stroker_BeginSubPath FT_STROKER_BORDER_LEFT FT_STROKER_BORDER_RIGHT FT_Stroker_ConicTo FT_Stroker_CubicTo FT_Stroker_Done FT_Stroker_EndSubPath FT_Stroker_Export FT_Stroker_ExportBorder FT_Stroker_GetBorderCounts FT_Stroker_GetCounts FT_STROKER_H FT_Stroker_LineCap FT_STROKER_LINECAP_BUTT FT_STROKER_LINECAP_ROUND FT_STROKER_LINECAP_SQUARE FT_Stroker_LineJoin FT_STROKER_LINEJOIN_BEVEL FT_STROKER_LINEJOIN_MITER FT_STROKER_LINEJOIN_MITER_FIXED FT_STROKER_LINEJOIN_MITER_VARIABLE FT_STROKER_LINEJOIN_ROUND FT_Stroker_LineTo FT_Stroker_New FT_Stroker_ParseOutline FT_Stroker_Rewind FT_Stroker_Set FT_StrokerBorder FT_STYLE_FLAG_BOLD FT_STYLE_FLAG_ITALIC FT_STYLE_FLAG_XXX FT_SubGlyph FT_SUBGLYPH_FLAG_2X2 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_USE_MY_METRICS FT_SUBGLYPH_FLAG_XXX FT_SUBGLYPH_FLAG_XY_SCALE FT_SYNTHESIS_H FT_SYSTEM_H FT_Tag FT_Tan FT_TRIGONOMETRY_H FT_TRUETYPE_DRIVER_H FT_TRUETYPE_ENGINE_TYPE_NONE FT_TRUETYPE_ENGINE_TYPE_PATENTED FT_TRUETYPE_ENGINE_TYPE_UNPATENTED FT_TRUETYPE_IDS_H FT_TRUETYPE_TABLES_H FT_TRUETYPE_TAGS_H FT_TrueTypeEngineType FT_TrueTypeGX_Free FT_TrueTypeGX_Validate FT_TYPE1_TABLES_H FT_TYPES_H FT_UFWord FT_UInt FT_UInt16 FT_UInt32 FT_UInt64 FT_ULong FT_UnitVector FT_UShort FT_VALIDATE_APPLE FT_VALIDATE_BASE FT_VALIDATE_bsln FT_VALIDATE_CKERN FT_VALIDATE_CKERNXXX FT_VALIDATE_feat FT_VALIDATE_GDEF FT_VALIDATE_GPOS FT_VALIDATE_GSUB FT_VALIDATE_GX FT_VALIDATE_GX_LENGTH FT_VALIDATE_GXXXX FT_VALIDATE_JSTF FT_VALIDATE_just FT_VALIDATE_kern FT_VALIDATE_lcar FT_VALIDATE_MATH FT_VALIDATE_mort FT_VALIDATE_morx FT_VALIDATE_MS FT_VALIDATE_opbd FT_VALIDATE_OT FT_VALIDATE_OTXXX FT_VALIDATE_prop FT_VALIDATE_trak FT_Var_Axis FT_VAR_AXIS_FLAG_HIDDEN FT_VAR_AXIS_FLAG_XXX FT_Var_Named_Style FT_Vector FT_Vector_From_Polar FT_Vector_Length FT_Vector_Polarize FT_Vector_Rotate FT_Vector_Transform FT_Vector_Unit FT_WinFNT_Header FT_WinFNT_HeaderRec FT_WinFNT_ID_CP1250 FT_WinFNT_ID_CP1251 FT_WinFNT_ID_CP1252 FT_WinFNT_ID_CP1253 FT_WinFNT_ID_CP1254 FT_WinFNT_ID_CP1255 FT_WinFNT_ID_CP1256 FT_WinFNT_ID_CP1257 FT_WinFNT_ID_CP1258 FT_WinFNT_ID_CP1361 FT_WinFNT_ID_CP874 FT_WinFNT_ID_CP932 FT_WinFNT_ID_CP936 FT_WinFNT_ID_CP949 FT_WinFNT_ID_CP950 FT_WinFNT_ID_DEFAULT FT_WinFNT_ID_MAC FT_WinFNT_ID_OEM FT_WinFNT_ID_SYMBOL FT_WinFNT_ID_XXX FT_WINFONTS_H FTC_CMapCache FTC_CMapCache_Lookup FTC_CMapCache_New FTC_Face_Requester FTC_FaceID FTC_ImageCache FTC_ImageCache_Lookup FTC_ImageCache_LookupScaler FTC_ImageCache_New FTC_ImageType FTC_ImageTypeRec FTC_Manager FTC_Manager_Done FTC_Manager_LookupFace FTC_Manager_LookupSize FTC_Manager_New FTC_Manager_RemoveFaceID FTC_Manager_Reset FTC_Node FTC_Node_Unref FTC_SBit FTC_SBitCache FTC_SBitCache_Lookup FTC_SBitCache_LookupScaler FTC_SBitCache_New FTC_SBitRec FTC_Scaler FTC_ScalerRec G glyph-to-script-map H hinting-engine I increase-x-height interpreter-version N no-long-family-names no-stem-darkening P PS_DICT_BLUE_FUZZ PS_DICT_BLUE_SCALE PS_DICT_BLUE_SHIFT PS_DICT_BLUE_VALUE PS_DICT_CHAR_STRING PS_DICT_CHAR_STRING_KEY PS_DICT_ENCODING_ENTRY PS_DICT_ENCODING_TYPE PS_DICT_FAMILY_BLUE PS_DICT_FAMILY_NAME PS_DICT_FAMILY_OTHER_BLUE PS_DICT_FONT_BBOX PS_DICT_FONT_MATRIX PS_DICT_FONT_NAME PS_DICT_FONT_TYPE PS_DICT_FORCE_BOLD PS_DICT_FS_TYPE PS_DICT_FULL_NAME PS_DICT_IS_FIXED_PITCH PS_DICT_ITALIC_ANGLE PS_Dict_Keys PS_DICT_LANGUAGE_GROUP PS_DICT_LEN_IV PS_DICT_MIN_FEATURE PS_DICT_NOTICE PS_DICT_NUM_BLUE_VALUES PS_DICT_NUM_CHAR_STRINGS PS_DICT_NUM_FAMILY_BLUES PS_DICT_NUM_FAMILY_OTHER_BLUES PS_DICT_NUM_OTHER_BLUES PS_DICT_NUM_STEM_SNAP_H PS_DICT_NUM_STEM_SNAP_V PS_DICT_NUM_SUBRS PS_DICT_OTHER_BLUE PS_DICT_PAINT_TYPE PS_DICT_PASSWORD PS_DICT_RND_STEM_UP PS_DICT_STD_HW PS_DICT_STD_VW PS_DICT_STEM_SNAP_H PS_DICT_STEM_SNAP_V PS_DICT_SUBR PS_DICT_UNDERLINE_POSITION PS_DICT_UNDERLINE_THICKNESS PS_DICT_UNIQUE_ID PS_DICT_VERSION PS_DICT_WEIGHT PS_FontInfo PS_FontInfoRec PS_Private PS_PrivateRec R random-seed T T1_BLEND_BLUE_SCALE T1_BLEND_BLUE_SHIFT T1_BLEND_BLUE_VALUES T1_BLEND_FAMILY_BLUES T1_BLEND_FAMILY_OTHER_BLUES T1_Blend_Flags T1_BLEND_FORCE_BOLD T1_BLEND_ITALIC_ANGLE T1_BLEND_OTHER_BLUES T1_BLEND_STANDARD_HEIGHT T1_BLEND_STANDARD_WIDTH T1_BLEND_STEM_SNAP_HEIGHTS T1_BLEND_STEM_SNAP_WIDTHS T1_BLEND_UNDERLINE_POSITION T1_BLEND_UNDERLINE_THICKNESS T1_ENCODING_TYPE_ARRAY T1_ENCODING_TYPE_EXPERT T1_ENCODING_TYPE_ISOLATIN1 T1_ENCODING_TYPE_NONE T1_ENCODING_TYPE_STANDARD T1_EncodingType T1_FontInfo T1_Private TT_ADOBE_ID_CUSTOM TT_ADOBE_ID_EXPERT TT_ADOBE_ID_LATIN_1 TT_ADOBE_ID_STANDARD TT_ADOBE_ID_XXX TT_APPLE_ID_DEFAULT TT_APPLE_ID_FULL_UNICODE TT_APPLE_ID_ISO_10646 TT_APPLE_ID_UNICODE_1_1 TT_APPLE_ID_UNICODE_2_0 TT_APPLE_ID_UNICODE_32 TT_APPLE_ID_VARIANT_SELECTOR TT_APPLE_ID_XXX TT_Header TT_HoriHeader TT_INTERPRETER_VERSION_35 TT_INTERPRETER_VERSION_38 TT_INTERPRETER_VERSION_40 TT_INTERPRETER_VERSION_XXX TT_ISO_ID_10646 TT_ISO_ID_7BIT_ASCII TT_ISO_ID_8859_1 TT_ISO_ID_XXX TT_MAC_ID_XXX TT_MAC_LANGID_XXX TT_MaxProfile TT_MS_ID_BIG_5 TT_MS_ID_JOHAB TT_MS_ID_PRC TT_MS_ID_SJIS TT_MS_ID_SYMBOL_CS TT_MS_ID_UCS_4 TT_MS_ID_UNICODE_CS TT_MS_ID_WANSUNG TT_MS_ID_XXX TT_MS_LANGID_XXX TT_NAME_ID_XXX TT_OS2 TT_PCLT TT_PLATFORM_ADOBE TT_PLATFORM_APPLE_UNICODE TT_PLATFORM_CUSTOM TT_PLATFORM_ISO TT_PLATFORM_MACINTOSH TT_PLATFORM_MICROSOFT TT_PLATFORM_XXX TT_Postscript TT_UCR_XXX TT_VertHeader W warping generated on Mon Jul 1 15:55:30 2019 UTC","title":"Index"},{"location":"ft2-index.html#freetype-2101-api-reference","text":"","title":"FreeType-2.10.1 API Reference"},{"location":"ft2-index.html#b","text":"BDF_Property BDF_PROPERTY_TYPE_ATOM BDF_PROPERTY_TYPE_CARDINAL BDF_PROPERTY_TYPE_INTEGER BDF_PROPERTY_TYPE_NONE BDF_PropertyRec BDF_PropertyType","title":"B"},{"location":"ft2-index.html#c","text":"CID_FaceDict CID_FaceDictRec CID_FaceInfo CID_FaceInfoRec CID_FontDict CID_Info","title":"C"},{"location":"ft2-index.html#d","text":"darkening-parameters default-script","title":"D"},{"location":"ft2-index.html#f","text":"fallback-script FREETYPE_MAJOR FREETYPE_MINOR FREETYPE_PATCH FREETYPE_XXX FT_Activate_Size FT_Add_Default_Modules FT_Add_Module FT_ADVANCE_FLAG_FAST_ONLY FT_ADVANCES_H FT_Alloc_Func FT_Angle FT_ANGLE_2PI FT_Angle_Diff FT_ANGLE_PI FT_ANGLE_PI2 FT_ANGLE_PI4 FT_Atan2 FT_Attach_File FT_Attach_Stream FT_AUTOHINTER_H FT_AUTOHINTER_SCRIPT_CJK FT_AUTOHINTER_SCRIPT_INDIC FT_AUTOHINTER_SCRIPT_LATIN FT_AUTOHINTER_SCRIPT_NONE FT_AUTOHINTER_SCRIPT_XXX FT_BBox FT_BBOX_H FT_BDF_H FT_Bitmap FT_Bitmap_Blend FT_Bitmap_Convert FT_Bitmap_Copy FT_Bitmap_Done FT_Bitmap_Embolden FT_BITMAP_H FT_Bitmap_Init FT_Bitmap_Size FT_BitmapGlyph FT_BitmapGlyphRec FT_Bool FT_Byte FT_Bytes FT_BZIP2_H FT_CACHE_H FT_CeilFix FT_CFF_DRIVER_H FT_Char FT_CharMap FT_CharMapRec FT_CID_H FT_ClassicKern_Free FT_ClassicKern_Validate FT_Color FT_COLOR_H FT_CONFIG_CONFIG_H FT_CONFIG_MODULES_H FT_CONFIG_OPTIONS_H FT_CONFIG_STANDARD_LIBRARY_H FT_Cos FT_Data FT_DEBUG_HOOK_TRUETYPE FT_DEBUG_HOOK_XXX FT_DebugHook_Func FT_DivFix FT_Done_Face FT_Done_FreeType FT_Done_Glyph FT_Done_Library FT_Done_MM_Var FT_Done_Size FT_Driver FT_DRIVER_H FT_ENC_TAG FT_Encoding FT_ENCODING_ADOBE_CUSTOM FT_ENCODING_ADOBE_EXPERT FT_ENCODING_ADOBE_LATIN_1 FT_ENCODING_ADOBE_STANDARD FT_ENCODING_APPLE_ROMAN FT_ENCODING_BIG5 FT_ENCODING_JOHAB FT_ENCODING_MS_BIG5 FT_ENCODING_MS_GB2312 FT_ENCODING_MS_JOHAB FT_ENCODING_MS_SJIS FT_ENCODING_MS_SYMBOL FT_ENCODING_MS_WANSUNG FT_ENCODING_NONE FT_ENCODING_OLD_LATIN_2 FT_ENCODING_PRC FT_ENCODING_SJIS FT_ENCODING_UNICODE FT_ENCODING_WANSUNG FT_Err_XXX FT_Error FT_Error_String FT_ERRORS_H FT_F26Dot6 FT_F2Dot14 FT_Face FT_Face_CheckTrueTypePatents FT_FACE_FLAG_CID_KEYED FT_FACE_FLAG_COLOR FT_FACE_FLAG_EXTERNAL_STREAM FT_FACE_FLAG_FAST_GLYPHS FT_FACE_FLAG_FIXED_SIZES FT_FACE_FLAG_FIXED_WIDTH FT_FACE_FLAG_GLYPH_NAMES FT_FACE_FLAG_HINTER FT_FACE_FLAG_HORIZONTAL FT_FACE_FLAG_KERNING FT_FACE_FLAG_MULTIPLE_MASTERS FT_FACE_FLAG_SCALABLE FT_FACE_FLAG_SFNT FT_FACE_FLAG_TRICKY FT_FACE_FLAG_VARIATION FT_FACE_FLAG_VERTICAL FT_FACE_FLAG_XXX FT_Face_GetCharsOfVariant FT_Face_GetCharVariantIndex FT_Face_GetCharVariantIsDefault FT_Face_GetVariantSelectors FT_Face_GetVariantsOfChar FT_Face_Internal FT_Face_Properties FT_Face_SetUnpatentedHinting FT_FaceRec FT_Fixed FT_FloorFix FT_FONT_FORMATS_H FT_Free_Func FT_FREETYPE_H FT_FSTYPE_BITMAP_EMBEDDING_ONLY FT_FSTYPE_EDITABLE_EMBEDDING FT_FSTYPE_INSTALLABLE_EMBEDDING FT_FSTYPE_NO_SUBSETTING FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING FT_FSTYPE_XXX FT_FWord FT_GASP_DO_GRAY FT_GASP_DO_GRIDFIT FT_GASP_H FT_GASP_NO_TABLE FT_GASP_SYMMETRIC_GRIDFIT FT_GASP_SYMMETRIC_SMOOTHING FT_GASP_XXX FT_Generic FT_Generic_Finalizer FT_Get_Advance FT_Get_Advances FT_Get_BDF_Charset_ID FT_Get_BDF_Property FT_Get_Char_Index FT_Get_Charmap_Index FT_Get_CID_From_Glyph_Index FT_Get_CID_Is_Internally_CID_Keyed FT_Get_CID_Registry_Ordering_Supplement FT_Get_CMap_Format FT_Get_CMap_Language_ID FT_Get_Color_Glyph_Layer FT_Get_First_Char FT_Get_Font_Format FT_Get_FSType_Flags FT_Get_Gasp FT_Get_Glyph FT_Get_Glyph_Name FT_Get_Kerning FT_Get_MM_Blend_Coordinates FT_Get_MM_Var FT_Get_MM_WeightVector FT_Get_Module FT_Get_Multi_Master FT_Get_Name_Index FT_Get_Next_Char FT_Get_PFR_Advance FT_Get_PFR_Kerning FT_Get_PFR_Metrics FT_Get_Postscript_Name FT_Get_PS_Font_Info FT_Get_PS_Font_Private FT_Get_PS_Font_Value FT_Get_Renderer FT_Get_Sfnt_LangTag FT_Get_Sfnt_Name FT_Get_Sfnt_Name_Count FT_Get_Sfnt_Table FT_Get_SubGlyph_Info FT_Get_Track_Kerning FT_Get_TrueType_Engine_Type FT_Get_Var_Axis_Flags FT_Get_Var_Blend_Coordinates FT_Get_Var_Design_Coordinates FT_Get_WinFNT_Header FT_GetFile_From_Mac_ATS_Name FT_GetFile_From_Mac_Name FT_GetFilePath_From_Mac_ATS_Name FT_Glyph FT_GLYPH_BBOX_GRIDFIT FT_Glyph_BBox_Mode FT_GLYPH_BBOX_PIXELS FT_GLYPH_BBOX_SUBPIXELS FT_GLYPH_BBOX_TRUNCATE FT_GLYPH_BBOX_UNSCALED FT_Glyph_Copy FT_Glyph_Format FT_GLYPH_FORMAT_BITMAP FT_GLYPH_FORMAT_COMPOSITE FT_GLYPH_FORMAT_NONE FT_GLYPH_FORMAT_OUTLINE FT_GLYPH_FORMAT_PLOTTER FT_Glyph_Get_CBox FT_GLYPH_H FT_Glyph_Metrics FT_Glyph_Stroke FT_Glyph_StrokeBorder FT_Glyph_To_Bitmap FT_Glyph_Transform FT_GlyphRec FT_GlyphSlot FT_GlyphSlot_Own_Bitmap FT_GlyphSlotRec FT_GX_VALIDATE_H FT_GZIP_H FT_Gzip_Uncompress FT_HAS_COLOR FT_HAS_FAST_GLYPHS FT_HAS_FIXED_SIZES FT_HAS_GLYPH_NAMES FT_HAS_HORIZONTAL FT_HAS_KERNING FT_HAS_MULTIPLE_MASTERS FT_Has_PS_Glyph_Names FT_HAS_VERTICAL FT_HINTING_ADOBE FT_HINTING_FREETYPE FT_HINTING_XXX FT_IMAGE_H FT_IMAGE_TAG FT_Incremental FT_Incremental_FreeGlyphDataFunc FT_Incremental_FuncsRec FT_Incremental_GetGlyphDataFunc FT_Incremental_GetGlyphMetricsFunc FT_INCREMENTAL_H FT_Incremental_Interface FT_Incremental_InterfaceRec FT_Incremental_Metrics FT_Incremental_MetricsRec FT_Init_FreeType FT_Int FT_Int16 FT_Int32 FT_Int64 FT_IS_CID_KEYED FT_IS_FIXED_WIDTH FT_IS_NAMED_INSTANCE FT_IS_SCALABLE FT_IS_SFNT FT_IS_TRICKY FT_IS_VARIATION FT_KERNING_DEFAULT FT_Kerning_Mode FT_KERNING_UNFITTED FT_KERNING_UNSCALED FT_LayerIterator FT_LCD_FILTER_DEFAULT FT_LCD_FILTER_H FT_LCD_FILTER_LEGACY FT_LCD_FILTER_LEGACY1 FT_LCD_FILTER_LIGHT FT_LCD_FILTER_NONE FT_LcdFilter FT_LcdFiveTapFilter FT_Library FT_Library_SetLcdFilter FT_Library_SetLcdFilterWeights FT_Library_SetLcdGeometry FT_Library_Version FT_List FT_List_Add FT_List_Destructor FT_List_Finalize FT_List_Find FT_LIST_H FT_List_Insert FT_List_Iterate FT_List_Iterator FT_List_Remove FT_List_Up FT_ListNode FT_ListNodeRec FT_ListRec FT_LOAD_BITMAP_METRICS_ONLY FT_Load_Char FT_LOAD_COLOR FT_LOAD_COMPUTE_METRICS FT_LOAD_CROP_BITMAP FT_LOAD_DEFAULT FT_LOAD_FORCE_AUTOHINT FT_Load_Glyph FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH FT_LOAD_IGNORE_TRANSFORM FT_LOAD_LINEAR_DESIGN FT_LOAD_MONOCHROME FT_LOAD_NO_AUTOHINT FT_LOAD_NO_BITMAP FT_LOAD_NO_HINTING FT_LOAD_NO_RECURSE FT_LOAD_NO_SCALE FT_LOAD_PEDANTIC FT_LOAD_RENDER FT_Load_Sfnt_Table FT_LOAD_TARGET_LCD FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_MODE FT_LOAD_TARGET_MONO FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_XXX FT_LOAD_VERTICAL_LAYOUT FT_LOAD_XXX FT_Long FT_LZW_H FT_MAC_H FT_MAKE_TAG FT_Matrix FT_Matrix_Invert FT_Matrix_Multiply FT_Memory FT_MemoryRec FT_MM_Axis FT_MM_Var FT_Module FT_Module_Class FT_Module_Constructor FT_Module_Destructor FT_MODULE_ERRORS_H FT_MODULE_H FT_Module_Requester FT_MulDiv FT_MulFix FT_Multi_Master FT_MULTIPLE_MASTERS_H FT_New_Face FT_New_Face_From_FOND FT_New_Face_From_FSRef FT_New_Face_From_FSSpec FT_New_Glyph FT_New_Library FT_New_Memory_Face FT_New_Size FT_Offset FT_Open_Args FT_OPEN_DRIVER FT_Open_Face FT_OPEN_MEMORY FT_OPEN_PARAMS FT_OPEN_PATHNAME FT_OPEN_STREAM FT_OPEN_XXX FT_OpenType_Free FT_OpenType_Validate FT_OPENTYPE_VALIDATE_H FT_Orientation FT_ORIENTATION_FILL_LEFT FT_ORIENTATION_FILL_RIGHT FT_ORIENTATION_NONE FT_ORIENTATION_POSTSCRIPT FT_ORIENTATION_TRUETYPE FT_Outline FT_Outline_Check FT_Outline_ConicToFunc FT_Outline_Copy FT_Outline_CubicToFunc FT_Outline_Decompose FT_Outline_Done FT_Outline_Embolden FT_Outline_EmboldenXY FT_OUTLINE_EVEN_ODD_FILL FT_Outline_Funcs FT_Outline_Get_BBox FT_Outline_Get_Bitmap FT_Outline_Get_CBox FT_Outline_Get_Orientation FT_Outline_GetInsideBorder FT_Outline_GetOutsideBorder FT_OUTLINE_H FT_OUTLINE_HIGH_PRECISION FT_OUTLINE_IGNORE_DROPOUTS FT_OUTLINE_INCLUDE_STUBS FT_Outline_LineToFunc FT_Outline_MoveToFunc FT_Outline_New FT_OUTLINE_NONE FT_OUTLINE_OWNER FT_Outline_Render FT_Outline_Reverse FT_OUTLINE_REVERSE_FILL FT_OUTLINE_SINGLE_PASS FT_OUTLINE_SMART_DROPOUTS FT_Outline_Transform FT_Outline_Translate FT_OUTLINE_XXX FT_OutlineGlyph FT_OutlineGlyphRec FT_Palette_Data FT_Palette_Data_Get FT_PALETTE_FOR_DARK_BACKGROUND FT_PALETTE_FOR_LIGHT_BACKGROUND FT_Palette_Select FT_Palette_Set_Foreground_Color FT_PALETTE_XXX FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY FT_PARAM_TAG_INCREMENTAL FT_PARAM_TAG_LCD_FILTER_WEIGHTS FT_PARAM_TAG_RANDOM_SEED FT_PARAM_TAG_STEM_DARKENING FT_PARAM_TAG_UNPATENTED_HINTING FT_Parameter FT_PCF_DRIVER_H FT_PFR_H FT_Pixel_Mode FT_PIXEL_MODE_BGRA FT_PIXEL_MODE_GRAY FT_PIXEL_MODE_GRAY2 FT_PIXEL_MODE_GRAY4 FT_PIXEL_MODE_LCD FT_PIXEL_MODE_LCD_V FT_PIXEL_MODE_MONO FT_PIXEL_MODE_NONE FT_Pointer FT_Pos FT_Prop_GlyphToScriptMap FT_Prop_IncreaseXHeight FT_Property_Get FT_Property_Set FT_PtrDist FT_Raster FT_Raster_BitSet_Func FT_Raster_BitTest_Func FT_Raster_DoneFunc FT_RASTER_FLAG_AA FT_RASTER_FLAG_CLIP FT_RASTER_FLAG_DEFAULT FT_RASTER_FLAG_DIRECT FT_RASTER_FLAG_XXX FT_Raster_Funcs FT_Raster_NewFunc FT_Raster_Params FT_Raster_RenderFunc FT_Raster_ResetFunc FT_Raster_SetModeFunc FT_Realloc_Func FT_Reference_Face FT_Reference_Library FT_Remove_Module FT_Render_Glyph FT_RENDER_H FT_Render_Mode FT_RENDER_MODE_LCD FT_RENDER_MODE_LCD_V FT_RENDER_MODE_LIGHT FT_RENDER_MODE_MONO FT_RENDER_MODE_NORMAL FT_Renderer FT_Renderer_Class FT_Request_Size FT_RoundFix FT_Select_Charmap FT_Select_Size FT_Set_Char_Size FT_Set_Charmap FT_Set_Debug_Hook FT_Set_Default_Properties FT_Set_MM_Blend_Coordinates FT_Set_MM_Design_Coordinates FT_Set_MM_WeightVector FT_Set_Named_Instance FT_Set_Pixel_Sizes FT_Set_Renderer FT_Set_Transform FT_Set_Var_Blend_Coordinates FT_Set_Var_Design_Coordinates FT_SFNT_HEAD FT_SFNT_HHEA FT_SFNT_MAXP FT_SFNT_NAMES_H FT_SFNT_OS2 FT_SFNT_PCLT FT_SFNT_POST FT_Sfnt_Table_Info FT_Sfnt_Tag FT_SFNT_VHEA FT_SfntLangTag FT_SfntName FT_Short FT_Sin FT_Size FT_Size_Internal FT_Size_Metrics FT_Size_Request FT_Size_Request_Type FT_SIZE_REQUEST_TYPE_BBOX FT_SIZE_REQUEST_TYPE_CELL FT_SIZE_REQUEST_TYPE_NOMINAL FT_SIZE_REQUEST_TYPE_REAL_DIM FT_SIZE_REQUEST_TYPE_SCALES FT_Size_RequestRec FT_SizeRec FT_SIZES_H FT_Slot_Internal FT_Span FT_SpanFunc FT_Stream FT_Stream_CloseFunc FT_Stream_IoFunc FT_Stream_OpenBzip2 FT_Stream_OpenGzip FT_Stream_OpenLZW FT_StreamDesc FT_StreamRec FT_String FT_Stroker FT_Stroker_BeginSubPath FT_STROKER_BORDER_LEFT FT_STROKER_BORDER_RIGHT FT_Stroker_ConicTo FT_Stroker_CubicTo FT_Stroker_Done FT_Stroker_EndSubPath FT_Stroker_Export FT_Stroker_ExportBorder FT_Stroker_GetBorderCounts FT_Stroker_GetCounts FT_STROKER_H FT_Stroker_LineCap FT_STROKER_LINECAP_BUTT FT_STROKER_LINECAP_ROUND FT_STROKER_LINECAP_SQUARE FT_Stroker_LineJoin FT_STROKER_LINEJOIN_BEVEL FT_STROKER_LINEJOIN_MITER FT_STROKER_LINEJOIN_MITER_FIXED FT_STROKER_LINEJOIN_MITER_VARIABLE FT_STROKER_LINEJOIN_ROUND FT_Stroker_LineTo FT_Stroker_New FT_Stroker_ParseOutline FT_Stroker_Rewind FT_Stroker_Set FT_StrokerBorder FT_STYLE_FLAG_BOLD FT_STYLE_FLAG_ITALIC FT_STYLE_FLAG_XXX FT_SubGlyph FT_SUBGLYPH_FLAG_2X2 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_USE_MY_METRICS FT_SUBGLYPH_FLAG_XXX FT_SUBGLYPH_FLAG_XY_SCALE FT_SYNTHESIS_H FT_SYSTEM_H FT_Tag FT_Tan FT_TRIGONOMETRY_H FT_TRUETYPE_DRIVER_H FT_TRUETYPE_ENGINE_TYPE_NONE FT_TRUETYPE_ENGINE_TYPE_PATENTED FT_TRUETYPE_ENGINE_TYPE_UNPATENTED FT_TRUETYPE_IDS_H FT_TRUETYPE_TABLES_H FT_TRUETYPE_TAGS_H FT_TrueTypeEngineType FT_TrueTypeGX_Free FT_TrueTypeGX_Validate FT_TYPE1_TABLES_H FT_TYPES_H FT_UFWord FT_UInt FT_UInt16 FT_UInt32 FT_UInt64 FT_ULong FT_UnitVector FT_UShort FT_VALIDATE_APPLE FT_VALIDATE_BASE FT_VALIDATE_bsln FT_VALIDATE_CKERN FT_VALIDATE_CKERNXXX FT_VALIDATE_feat FT_VALIDATE_GDEF FT_VALIDATE_GPOS FT_VALIDATE_GSUB FT_VALIDATE_GX FT_VALIDATE_GX_LENGTH FT_VALIDATE_GXXXX FT_VALIDATE_JSTF FT_VALIDATE_just FT_VALIDATE_kern FT_VALIDATE_lcar FT_VALIDATE_MATH FT_VALIDATE_mort FT_VALIDATE_morx FT_VALIDATE_MS FT_VALIDATE_opbd FT_VALIDATE_OT FT_VALIDATE_OTXXX FT_VALIDATE_prop FT_VALIDATE_trak FT_Var_Axis FT_VAR_AXIS_FLAG_HIDDEN FT_VAR_AXIS_FLAG_XXX FT_Var_Named_Style FT_Vector FT_Vector_From_Polar FT_Vector_Length FT_Vector_Polarize FT_Vector_Rotate FT_Vector_Transform FT_Vector_Unit FT_WinFNT_Header FT_WinFNT_HeaderRec FT_WinFNT_ID_CP1250 FT_WinFNT_ID_CP1251 FT_WinFNT_ID_CP1252 FT_WinFNT_ID_CP1253 FT_WinFNT_ID_CP1254 FT_WinFNT_ID_CP1255 FT_WinFNT_ID_CP1256 FT_WinFNT_ID_CP1257 FT_WinFNT_ID_CP1258 FT_WinFNT_ID_CP1361 FT_WinFNT_ID_CP874 FT_WinFNT_ID_CP932 FT_WinFNT_ID_CP936 FT_WinFNT_ID_CP949 FT_WinFNT_ID_CP950 FT_WinFNT_ID_DEFAULT FT_WinFNT_ID_MAC FT_WinFNT_ID_OEM FT_WinFNT_ID_SYMBOL FT_WinFNT_ID_XXX FT_WINFONTS_H FTC_CMapCache FTC_CMapCache_Lookup FTC_CMapCache_New FTC_Face_Requester FTC_FaceID FTC_ImageCache FTC_ImageCache_Lookup FTC_ImageCache_LookupScaler FTC_ImageCache_New FTC_ImageType FTC_ImageTypeRec FTC_Manager FTC_Manager_Done FTC_Manager_LookupFace FTC_Manager_LookupSize FTC_Manager_New FTC_Manager_RemoveFaceID FTC_Manager_Reset FTC_Node FTC_Node_Unref FTC_SBit FTC_SBitCache FTC_SBitCache_Lookup FTC_SBitCache_LookupScaler FTC_SBitCache_New FTC_SBitRec FTC_Scaler FTC_ScalerRec","title":"F"},{"location":"ft2-index.html#g","text":"glyph-to-script-map","title":"G"},{"location":"ft2-index.html#h","text":"hinting-engine","title":"H"},{"location":"ft2-index.html#i","text":"increase-x-height interpreter-version","title":"I"},{"location":"ft2-index.html#n","text":"no-long-family-names no-stem-darkening","title":"N"},{"location":"ft2-index.html#p","text":"PS_DICT_BLUE_FUZZ PS_DICT_BLUE_SCALE PS_DICT_BLUE_SHIFT PS_DICT_BLUE_VALUE PS_DICT_CHAR_STRING PS_DICT_CHAR_STRING_KEY PS_DICT_ENCODING_ENTRY PS_DICT_ENCODING_TYPE PS_DICT_FAMILY_BLUE PS_DICT_FAMILY_NAME PS_DICT_FAMILY_OTHER_BLUE PS_DICT_FONT_BBOX PS_DICT_FONT_MATRIX PS_DICT_FONT_NAME PS_DICT_FONT_TYPE PS_DICT_FORCE_BOLD PS_DICT_FS_TYPE PS_DICT_FULL_NAME PS_DICT_IS_FIXED_PITCH PS_DICT_ITALIC_ANGLE PS_Dict_Keys PS_DICT_LANGUAGE_GROUP PS_DICT_LEN_IV PS_DICT_MIN_FEATURE PS_DICT_NOTICE PS_DICT_NUM_BLUE_VALUES PS_DICT_NUM_CHAR_STRINGS PS_DICT_NUM_FAMILY_BLUES PS_DICT_NUM_FAMILY_OTHER_BLUES PS_DICT_NUM_OTHER_BLUES PS_DICT_NUM_STEM_SNAP_H PS_DICT_NUM_STEM_SNAP_V PS_DICT_NUM_SUBRS PS_DICT_OTHER_BLUE PS_DICT_PAINT_TYPE PS_DICT_PASSWORD PS_DICT_RND_STEM_UP PS_DICT_STD_HW PS_DICT_STD_VW PS_DICT_STEM_SNAP_H PS_DICT_STEM_SNAP_V PS_DICT_SUBR PS_DICT_UNDERLINE_POSITION PS_DICT_UNDERLINE_THICKNESS PS_DICT_UNIQUE_ID PS_DICT_VERSION PS_DICT_WEIGHT PS_FontInfo PS_FontInfoRec PS_Private PS_PrivateRec","title":"P"},{"location":"ft2-index.html#r","text":"random-seed","title":"R"},{"location":"ft2-index.html#t","text":"T1_BLEND_BLUE_SCALE T1_BLEND_BLUE_SHIFT T1_BLEND_BLUE_VALUES T1_BLEND_FAMILY_BLUES T1_BLEND_FAMILY_OTHER_BLUES T1_Blend_Flags T1_BLEND_FORCE_BOLD T1_BLEND_ITALIC_ANGLE T1_BLEND_OTHER_BLUES T1_BLEND_STANDARD_HEIGHT T1_BLEND_STANDARD_WIDTH T1_BLEND_STEM_SNAP_HEIGHTS T1_BLEND_STEM_SNAP_WIDTHS T1_BLEND_UNDERLINE_POSITION T1_BLEND_UNDERLINE_THICKNESS T1_ENCODING_TYPE_ARRAY T1_ENCODING_TYPE_EXPERT T1_ENCODING_TYPE_ISOLATIN1 T1_ENCODING_TYPE_NONE T1_ENCODING_TYPE_STANDARD T1_EncodingType T1_FontInfo T1_Private TT_ADOBE_ID_CUSTOM TT_ADOBE_ID_EXPERT TT_ADOBE_ID_LATIN_1 TT_ADOBE_ID_STANDARD TT_ADOBE_ID_XXX TT_APPLE_ID_DEFAULT TT_APPLE_ID_FULL_UNICODE TT_APPLE_ID_ISO_10646 TT_APPLE_ID_UNICODE_1_1 TT_APPLE_ID_UNICODE_2_0 TT_APPLE_ID_UNICODE_32 TT_APPLE_ID_VARIANT_SELECTOR TT_APPLE_ID_XXX TT_Header TT_HoriHeader TT_INTERPRETER_VERSION_35 TT_INTERPRETER_VERSION_38 TT_INTERPRETER_VERSION_40 TT_INTERPRETER_VERSION_XXX TT_ISO_ID_10646 TT_ISO_ID_7BIT_ASCII TT_ISO_ID_8859_1 TT_ISO_ID_XXX TT_MAC_ID_XXX TT_MAC_LANGID_XXX TT_MaxProfile TT_MS_ID_BIG_5 TT_MS_ID_JOHAB TT_MS_ID_PRC TT_MS_ID_SJIS TT_MS_ID_SYMBOL_CS TT_MS_ID_UCS_4 TT_MS_ID_UNICODE_CS TT_MS_ID_WANSUNG TT_MS_ID_XXX TT_MS_LANGID_XXX TT_NAME_ID_XXX TT_OS2 TT_PCLT TT_PLATFORM_ADOBE TT_PLATFORM_APPLE_UNICODE TT_PLATFORM_CUSTOM TT_PLATFORM_ISO TT_PLATFORM_MACINTOSH TT_PLATFORM_MICROSOFT TT_PLATFORM_XXX TT_Postscript TT_UCR_XXX TT_VertHeader","title":"T"},{"location":"ft2-index.html#w","text":"warping generated on Mon Jul 1 15:55:30 2019 UTC","title":"W"},{"location":"ft2-layer_management.html","text":"FreeType Docs Core API Glyph Layer Management Glyph Layer Management Synopsis The functions described here allow access of colored glyph layer data in OpenType's COLR tables. FT_LayerIterator Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_LayerIterator_ { FT_UInt num_layers; FT_UInt layer; FT_Byte * p; } FT_LayerIterator ; This iterator object is needed for FT_Get_Color_Glyph_Layer . fields num_layers The number of glyph layers for the requested glyph index. Will be set by FT_Get_Color_Glyph_Layer . layer The current layer. Will be set by FT_Get_Color_Glyph_Layer . p An opaque pointer into COLR table data. The caller must set this to NULL before the first call of FT_Get_Color_Glyph_Layer . FT_Get_Color_Glyph_Layer Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Get_Color_Glyph_Layer ( FT_Face face, FT_UInt base_glyph, FT_UInt *aglyph_index, FT_UInt *acolor_index, FT_LayerIterator * iterator ); This is an interface to the COLR table in OpenType fonts to iteratively retrieve the colored glyph layers associated with the current glyph slot. https://docs.microsoft.com/en-us/typography/opentype/spec/colr The glyph layer data for a given glyph index, if present, provides an alternative, multi-colour glyph representation: Instead of rendering the outline or bitmap with the given glyph index, glyphs with the indices and colors returned by this function are rendered layer by layer. The returned elements are ordered in the z direction from bottom to top; the 'n'th element should be rendered with the associated palette color and blended on top of the already rendered layers (elements 0, 1, ..., n-1). input face A handle to the parent face object. base_glyph The glyph index the colored glyph layers are associated with. inout iterator An FT_LayerIterator object. For the first call you should set iterator- p to NULL . For all following calls, simply use the same object again. output aglyph_index The glyph index of the current layer. acolor_index The color index into the font face's color palette of the current layer. The value 0xFFFF is special; it doesn't reference a palette entry but indicates that the text foreground color should be used instead (to be set up by the application outside of FreeType). The color palette can be retrieved with FT_Palette_Select . return Value 1 if everything is OK. If there are no more layers (or if there are no layers at all), value 0 gets returned. In case of an error, value 0 is returned also. note This function is necessary if you want to handle glyph layers by yourself. In particular, functions that operate with FT_GlyphRec objects (like FT_Get_Glyph or FT_Glyph_To_Bitmap ) don't have access to this information. Note that FT_Render_Glyph is able to handle colored glyph layers automatically if the FT_LOAD_COLOR flag is passed to a previous call to FT_Load_Glyph . [This is an experimental feature.] example FT_Color* palette; FT_LayerIterator iterator; FT_Bool have_layers; FT_UInt layer_glyph_index; FT_UInt layer_color_index; error = FT_Palette_Select( face, palette_index, palette ); if ( error ) palette = NULL; iterator.p = NULL; have_layers = FT_Get_Color_Glyph_Layer( face, glyph_index, layer_glyph_index, layer_color_index, iterator ); if ( palette have_layers ) { do { FT_Color layer_color; if ( layer_color_index == 0xFFFF ) layer_color = text_foreground_color; else layer_color = palette[layer_color_index]; // Load and render glyph `layer_glyph_index , then // blend resulting pixmap (using color `layer_color ) // with previously created pixmaps. } while ( FT_Get_Color_Glyph_Layer( face, glyph_index, layer_glyph_index, layer_color_index, iterator ) ); }","title":"Glyph Layer Management"},{"location":"ft2-layer_management.html#glyph-layer-management","text":"","title":"Glyph Layer Management"},{"location":"ft2-layer_management.html#synopsis","text":"The functions described here allow access of colored glyph layer data in OpenType's COLR tables.","title":"Synopsis"},{"location":"ft2-layer_management.html#ft_layeriterator","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_LayerIterator_ { FT_UInt num_layers; FT_UInt layer; FT_Byte * p; } FT_LayerIterator ; This iterator object is needed for FT_Get_Color_Glyph_Layer .","title":"FT_LayerIterator"},{"location":"ft2-layer_management.html#ft_get_color_glyph_layer","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Get_Color_Glyph_Layer ( FT_Face face, FT_UInt base_glyph, FT_UInt *aglyph_index, FT_UInt *acolor_index, FT_LayerIterator * iterator ); This is an interface to the COLR table in OpenType fonts to iteratively retrieve the colored glyph layers associated with the current glyph slot. https://docs.microsoft.com/en-us/typography/opentype/spec/colr The glyph layer data for a given glyph index, if present, provides an alternative, multi-colour glyph representation: Instead of rendering the outline or bitmap with the given glyph index, glyphs with the indices and colors returned by this function are rendered layer by layer. The returned elements are ordered in the z direction from bottom to top; the 'n'th element should be rendered with the associated palette color and blended on top of the already rendered layers (elements 0, 1, ..., n-1).","title":"FT_Get_Color_Glyph_Layer"},{"location":"ft2-lcd_rendering.html","text":"FreeType Docs Controlling FreeType Modules Subpixel Rendering Subpixel Rendering Synopsis FreeType provides two alternative subpixel rendering technologies. Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your ftoption.h file, this enables patented ClearType-style rendering. Otherwise, Harmony LCD rendering is enabled. These technologies are controlled differently and API described below, although always available, performs its function when appropriate method is enabled and does nothing otherwise. ClearType-style LCD rendering exploits the color-striped structure of LCD pixels, increasing the available resolution in the direction of the stripe (usually horizontal RGB) by a factor of 3. Using the subpixels coverages unfiltered can create severe color fringes especially when rendering thin features. Indeed, to produce black-on-white text, the nearby color subpixels must be dimmed equally. A good 5-tap FIR filter should be applied to subpixel coverages regardless of pixel boundaries and should have these properties: It should be symmetrical, like { a, b, c, b, a }, to avoid any shifts in appearance. It should be color-balanced, meaning a + b = c, to reduce color fringes by distributing the computed coverage for one subpixel to all subpixels equally. It should be normalized, meaning 2a + 2b + c = 1.0 to maintain overall brightness. Boxy 3-tap filter {0, , , , 0} is sharper but is less forgiving of non-ideal gamma curves of a screen (and viewing angles), beveled filters are fuzzier but more tolerant. Use the FT_Library_SetLcdFilter or FT_Library_SetLcdFilterWeights API to specify a low-pass filter, which is then applied to subpixel-rendered bitmaps generated through FT_Render_Glyph . Harmony LCD rendering is suitable to panels with any regular subpixel structure, not just monitors with 3 color striped subpixels, as long as the color subpixels have fixed positions relative to the pixel center. In this case, each color channel is then rendered separately after shifting the outline opposite to the subpixel shift so that the coverage maps are aligned. This method is immune to color fringes because the shifts do not change integral coverage. The subpixel geometry must be specified by xy-coordinates for each subpixel. By convention they may come in the RGB order: {{- , 0}, {0, 0}, { , 0}} for standard RGB striped panel or {{- , }, {- , - }, { , 0}} for a certain PenTile panel. Use the FT_Library_SetLcdGeometry API to specify subpixel positions. If one follows the RGB order convention, the same order applies to the resulting FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V bitmaps. Note, however, that the coordinate frame for the latter must be rotated clockwise. Harmony with default LCD geometry is equivalent to ClearType with light filter. As a result of ClearType filtering or Harmony rendering, the dimensions of LCD bitmaps can be either wider or taller than the dimensions of the corresponding outline with regard to the pixel grid. For example, for FT_RENDER_MODE_LCD , the filter adds 2 subpixels to the left, and 2 subpixels to the right. The bitmap offset values are adjusted accordingly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter. The ClearType and Harmony rendering is applicable to glyph bitmaps rendered through FT_Render_Glyph , FT_Load_Glyph , FT_Load_Char , and FT_Glyph_To_Bitmap , when FT_RENDER_MODE_LCD or FT_RENDER_MODE_LCD_V is specified. This API does not control FT_Outline_Render and FT_Outline_Get_Bitmap . The described algorithms can completely remove color artefacts when combined with gamma-corrected alpha blending in linear space. Each of the 3 alpha values (subpixels) must by independently used to blend one color channel. That is, red alpha blends the red channel of the text color with the red channel of the background pixel. FT_LcdFilter Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). typedef enum FT_LcdFilter_ { FT_LCD_FILTER_NONE = 0, FT_LCD_FILTER_DEFAULT = 1, FT_LCD_FILTER_LIGHT = 2, FT_LCD_FILTER_LEGACY1 = 3, FT_LCD_FILTER_LEGACY = 16, FT_LCD_FILTER_MAX /* do not remove */ } FT_LcdFilter ; 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 This is a beveled, normalized, and color-balanced five-tap filter with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units. FT_LCD_FILTER_LIGHT this is a boxy, normalized, and color-balanced three-tap filter with weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units. FT_LCD_FILTER_LEGACY FT_LCD_FILTER_LEGACY1 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. This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the future. The second value is provided for compatibility with FontConfig, which historically used different enumeration, sometimes incorrectly forwarded to FreeType. since 2.3.0 ( FT_LCD_FILTER_LEGACY1 since 2.6.2) FT_Library_SetLcdFilter Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdFilter ( FT_Library library, FT_LcdFilter filter ); This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling FT_Render_Glyph with FT_RENDER_MODE_LCD or FT_RENDER_MODE_LCD_V . input library A handle to the target library instance. filter The filter type. You can use FT_LCD_FILTER_NONE here to disable this feature, or FT_LCD_FILTER_DEFAULT to use a default filter that should work well on most LCD screens. return FreeType error code. 0 means success. note This feature is always disabled by default. Clients must make an explicit call to this function with a filter value other than FT_LCD_FILTER_NONE in order to enable it. Due to PATENTS covering subpixel rendering, this function doesn't do anything except returning FT_Err_Unimplemented_Feature if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not defined in your build of the library, which should correspond to all default builds of FreeType. since 2.3.0 FT_Library_SetLcdFilterWeights Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdFilterWeights ( FT_Library library, unsigned char *weights ); This function can be used to enable LCD filter with custom weights, instead of using presets in FT_Library_SetLcdFilter . input library A handle to the target library instance. weights A pointer to an array; the function copies the first five bytes and uses them to specify the filter weights in 1/256th units. return FreeType error code. 0 means success. note Due to PATENTS covering subpixel rendering, this function doesn't do anything except returning FT_Err_Unimplemented_Feature if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not defined in your build of the library, which should correspond to all default builds of FreeType. LCD filter weights can also be set per face using FT_Face_Properties with FT_PARAM_TAG_LCD_FILTER_WEIGHTS . since 2.4.0 FT_LcdFiveTapFilter Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). # define FT_LCD_FILTER_FIVE_TAPS 5 typedef FT_Byte FT_LcdFiveTapFilter [FT_LCD_FILTER_FIVE_TAPS]; A typedef for passing the five LCD filter weights to FT_Face_Properties within an FT_Parameter structure. since 2.8 FT_Library_SetLcdGeometry Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdGeometry ( FT_Library library, FT_Vector sub[3] ); This function can be used to modify default positions of color subpixels, which controls Harmony LCD rendering. input library A handle to the target library instance. sub A pointer to an array of 3 vectors in 26.6 fractional pixel format; the function modifies the default values, see the note below. return FreeType error code. 0 means success. note Subpixel geometry examples: {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color stripes shifted by a third of a pixel. This could be an RGB panel. {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can specify a BGR panel instead, while keeping the bitmap in the same RGB888 format. {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap stays RGB888 as a result. {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement. This function does nothing and returns FT_Err_Unimplemented_Feature in the context of ClearType-style subpixel rendering when FT_CONFIG_OPTION_SUBPIXEL_RENDERING is defined in your build of the library. since 2.10.0","title":"Subpixel Rendering"},{"location":"ft2-lcd_rendering.html#subpixel-rendering","text":"","title":"Subpixel Rendering"},{"location":"ft2-lcd_rendering.html#synopsis","text":"FreeType provides two alternative subpixel rendering technologies. Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your ftoption.h file, this enables patented ClearType-style rendering. Otherwise, Harmony LCD rendering is enabled. These technologies are controlled differently and API described below, although always available, performs its function when appropriate method is enabled and does nothing otherwise. ClearType-style LCD rendering exploits the color-striped structure of LCD pixels, increasing the available resolution in the direction of the stripe (usually horizontal RGB) by a factor of 3. Using the subpixels coverages unfiltered can create severe color fringes especially when rendering thin features. Indeed, to produce black-on-white text, the nearby color subpixels must be dimmed equally. A good 5-tap FIR filter should be applied to subpixel coverages regardless of pixel boundaries and should have these properties: It should be symmetrical, like { a, b, c, b, a }, to avoid any shifts in appearance. It should be color-balanced, meaning a + b = c, to reduce color fringes by distributing the computed coverage for one subpixel to all subpixels equally. It should be normalized, meaning 2a + 2b + c = 1.0 to maintain overall brightness. Boxy 3-tap filter {0, , , , 0} is sharper but is less forgiving of non-ideal gamma curves of a screen (and viewing angles), beveled filters are fuzzier but more tolerant. Use the FT_Library_SetLcdFilter or FT_Library_SetLcdFilterWeights API to specify a low-pass filter, which is then applied to subpixel-rendered bitmaps generated through FT_Render_Glyph . Harmony LCD rendering is suitable to panels with any regular subpixel structure, not just monitors with 3 color striped subpixels, as long as the color subpixels have fixed positions relative to the pixel center. In this case, each color channel is then rendered separately after shifting the outline opposite to the subpixel shift so that the coverage maps are aligned. This method is immune to color fringes because the shifts do not change integral coverage. The subpixel geometry must be specified by xy-coordinates for each subpixel. By convention they may come in the RGB order: {{- , 0}, {0, 0}, { , 0}} for standard RGB striped panel or {{- , }, {- , - }, { , 0}} for a certain PenTile panel. Use the FT_Library_SetLcdGeometry API to specify subpixel positions. If one follows the RGB order convention, the same order applies to the resulting FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V bitmaps. Note, however, that the coordinate frame for the latter must be rotated clockwise. Harmony with default LCD geometry is equivalent to ClearType with light filter. As a result of ClearType filtering or Harmony rendering, the dimensions of LCD bitmaps can be either wider or taller than the dimensions of the corresponding outline with regard to the pixel grid. For example, for FT_RENDER_MODE_LCD , the filter adds 2 subpixels to the left, and 2 subpixels to the right. The bitmap offset values are adjusted accordingly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter. The ClearType and Harmony rendering is applicable to glyph bitmaps rendered through FT_Render_Glyph , FT_Load_Glyph , FT_Load_Char , and FT_Glyph_To_Bitmap , when FT_RENDER_MODE_LCD or FT_RENDER_MODE_LCD_V is specified. This API does not control FT_Outline_Render and FT_Outline_Get_Bitmap . The described algorithms can completely remove color artefacts when combined with gamma-corrected alpha blending in linear space. Each of the 3 alpha values (subpixels) must by independently used to blend one color channel. That is, red alpha blends the red channel of the text color with the red channel of the background pixel.","title":"Synopsis"},{"location":"ft2-lcd_rendering.html#ft_lcdfilter","text":"Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). typedef enum FT_LcdFilter_ { FT_LCD_FILTER_NONE = 0, FT_LCD_FILTER_DEFAULT = 1, FT_LCD_FILTER_LIGHT = 2, FT_LCD_FILTER_LEGACY1 = 3, FT_LCD_FILTER_LEGACY = 16, FT_LCD_FILTER_MAX /* do not remove */ } FT_LcdFilter ; A list of values to identify various types of LCD filters.","title":"FT_LcdFilter"},{"location":"ft2-lcd_rendering.html#ft_library_setlcdfilter","text":"Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdFilter ( FT_Library library, FT_LcdFilter filter ); 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 .","title":"FT_Library_SetLcdFilter"},{"location":"ft2-lcd_rendering.html#ft_library_setlcdfilterweights","text":"Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdFilterWeights ( FT_Library library, unsigned char *weights ); This function can be used to enable LCD filter with custom weights, instead of using presets in FT_Library_SetLcdFilter .","title":"FT_Library_SetLcdFilterWeights"},{"location":"ft2-lcd_rendering.html#ft_lcdfivetapfilter","text":"Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). # define FT_LCD_FILTER_FIVE_TAPS 5 typedef FT_Byte FT_LcdFiveTapFilter [FT_LCD_FILTER_FIVE_TAPS]; A typedef for passing the five LCD filter weights to FT_Face_Properties within an FT_Parameter structure.","title":"FT_LcdFiveTapFilter"},{"location":"ft2-lcd_rendering.html#ft_library_setlcdgeometry","text":"Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h). FT_EXPORT( FT_Error ) FT_Library_SetLcdGeometry ( FT_Library library, FT_Vector sub[3] ); This function can be used to modify default positions of color subpixels, which controls Harmony LCD rendering.","title":"FT_Library_SetLcdGeometry"},{"location":"ft2-list_processing.html","text":"FreeType Docs Support API List Processing List Processing Synopsis This section contains various definitions related to list processing using doubly-linked nodes. FT_List Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListRec_* FT_List ; A handle to a list record (see FT_ListRec ). FT_ListNode Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListNodeRec_* FT_ListNode ; 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. FT_ListRec Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListRec_ { FT_ListNode head; FT_ListNode tail; } FT_ListRec ; 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. FT_ListNodeRec Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListNodeRec_ { FT_ListNode prev; FT_ListNode next; void * data; } FT_ListNodeRec ; 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. FT_List_Add Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Add ( FT_List list, FT_ListNode node ); Append an element to the end of a list. inout list A pointer to the parent list. node The node to append. FT_List_Insert Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Insert ( FT_List list, FT_ListNode node ); Insert an element at the head of a list. inout list A pointer to parent list. node The node to insert. FT_List_Find Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( FT_ListNode ) FT_List_Find ( FT_List list, void * data ); 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_List_Remove Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Remove ( FT_List list, FT_ListNode node ); 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_List_Up Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Up ( FT_List list, FT_ListNode node ); 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_List_Iterate Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( FT_Error ) FT_List_Iterate ( FT_List list, FT_List_Iterator iterator, void * user ); Parse a list and calls a given iterator function on each element. Note that parsing is stopped as soon as one of the iterator calls returns a non-zero value. input list A handle to the list. iterator An iterator function, called on each node of the list. user A user-supplied field that is passed as the second argument to the iterator. return The result (a FreeType error code) of the last iterator call. FT_List_Iterator Defined in FT_LIST_H (freetype/ftlist.h). typedef FT_Error (* FT_List_Iterator )( FT_ListNode node, void * user ); An FT_List iterator function that is called during a list parse by FT_List_Iterate . input node The current iteration list node. user A typeless pointer passed to FT_List_Iterate . Can be used to point to the iteration's state. FT_List_Finalize Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Finalize ( FT_List list, FT_List_Destructor destroy, FT_Memory memory, void * user ); Destroy all elements in the list as well as the list itself. input list A handle to the list. destroy A list destructor that will be applied to each element of the list. Set this to NULL if not needed. memory The current memory object that handles deallocation. user A user-supplied field that is passed as the last argument to the destructor. note This function expects that all nodes added by FT_List_Add or FT_List_Insert have been dynamically allocated. FT_List_Destructor Defined in FT_LIST_H (freetype/ftlist.h). typedef void (* FT_List_Destructor )( FT_Memory memory, void * data, void * user ); An FT_List iterator function that is called during a list finalization by FT_List_Finalize to destroy all elements in a given list. input system The current system object. data The current object to destroy. user A typeless pointer passed to FT_List_Iterate . It can be used to point to the iteration's state.","title":"List Processing"},{"location":"ft2-list_processing.html#list-processing","text":"","title":"List Processing"},{"location":"ft2-list_processing.html#synopsis","text":"This section contains various definitions related to list processing using doubly-linked nodes.","title":"Synopsis"},{"location":"ft2-list_processing.html#ft_list","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListRec_* FT_List ; A handle to a list record (see FT_ListRec ).","title":"FT_List"},{"location":"ft2-list_processing.html#ft_listnode","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListNodeRec_* FT_ListNode ; 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.","title":"FT_ListNode"},{"location":"ft2-list_processing.html#ft_listrec","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListRec_ { FT_ListNode head; FT_ListNode tail; } FT_ListRec ; A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.","title":"FT_ListRec"},{"location":"ft2-list_processing.html#ft_listnoderec","text":"Defined in FT_TYPES_H (freetype/fttypes.h). typedef struct FT_ListNodeRec_ { FT_ListNode prev; FT_ListNode next; void * data; } FT_ListNodeRec ; A structure used to hold a single list element.","title":"FT_ListNodeRec"},{"location":"ft2-list_processing.html#ft_list_add","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Add ( FT_List list, FT_ListNode node ); Append an element to the end of a list.","title":"FT_List_Add"},{"location":"ft2-list_processing.html#ft_list_insert","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Insert ( FT_List list, FT_ListNode node ); Insert an element at the head of a list.","title":"FT_List_Insert"},{"location":"ft2-list_processing.html#ft_list_find","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( FT_ListNode ) FT_List_Find ( FT_List list, void * data ); Find the list node for a given listed object.","title":"FT_List_Find"},{"location":"ft2-list_processing.html#ft_list_remove","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Remove ( FT_List list, FT_ListNode node ); Remove a node from a list. This function doesn't check whether the node is in the list!","title":"FT_List_Remove"},{"location":"ft2-list_processing.html#ft_list_up","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Up ( FT_List list, FT_ListNode node ); Move a node to the head/top of a list. Used to maintain LRU lists.","title":"FT_List_Up"},{"location":"ft2-list_processing.html#ft_list_iterate","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( FT_Error ) FT_List_Iterate ( FT_List list, FT_List_Iterator iterator, void * user ); 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.","title":"FT_List_Iterate"},{"location":"ft2-list_processing.html#ft_list_iterator","text":"Defined in FT_LIST_H (freetype/ftlist.h). typedef FT_Error (* FT_List_Iterator )( FT_ListNode node, void * user ); An FT_List iterator function that is called during a list parse by FT_List_Iterate .","title":"FT_List_Iterator"},{"location":"ft2-list_processing.html#ft_list_finalize","text":"Defined in FT_LIST_H (freetype/ftlist.h). FT_EXPORT( void ) FT_List_Finalize ( FT_List list, FT_List_Destructor destroy, FT_Memory memory, void * user ); Destroy all elements in the list as well as the list itself.","title":"FT_List_Finalize"},{"location":"ft2-list_processing.html#ft_list_destructor","text":"Defined in FT_LIST_H (freetype/ftlist.h). typedef void (* FT_List_Destructor )( FT_Memory memory, void * data, void * user ); An FT_List iterator function that is called during a list finalization by FT_List_Finalize to destroy all elements in a given list.","title":"FT_List_Destructor"},{"location":"ft2-lzw.html","text":"FreeType Docs Support API LZW Streams LZW Streams Synopsis This section contains the declaration of LZW-specific functions. FT_Stream_OpenLZW Defined in FT_LZW_H (freetype/ftlzw.h). FT_EXPORT( FT_Error ) FT_Stream_OpenLZW ( FT_Stream stream, FT_Stream source ); 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.","title":"LZW Streams"},{"location":"ft2-lzw.html#lzw-streams","text":"","title":"LZW Streams"},{"location":"ft2-lzw.html#synopsis","text":"This section contains the declaration of LZW-specific functions.","title":"Synopsis"},{"location":"ft2-lzw.html#ft_stream_openlzw","text":"Defined in FT_LZW_H (freetype/ftlzw.h). FT_EXPORT( FT_Error ) FT_Stream_OpenLZW ( FT_Stream stream, FT_Stream source ); 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.","title":"FT_Stream_OpenLZW"},{"location":"ft2-mac_specific.html","text":"FreeType Docs Core API Mac Specific Interface Mac Specific Interface Synopsis The following definitions are only available if FreeType is compiled on a Macintosh. FT_New_Face_From_FOND Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_New_Face_From_FOND ( FT_Library library, Handle fond, FT_Long face_index, FT_Face *aface ) FT_DEPRECATED_ATTRIBUTE; 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. example 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_GetFile_From_Mac_Name Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_Name ( const char * fontName, FSSpec* pathSpec, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; 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_GetFile_From_Mac_ATS_Name Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_ATS_Name ( const char * fontName, FSSpec* pathSpec, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; 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_GetFilePath_From_Mac_ATS_Name Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFilePath_From_Mac_ATS_Name ( const char * fontName, UInt8* path, UInt32 maxPathSize, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; Return a pathname of the disk file and face index for given font name that is handled by ATS framework. input fontName Mac OS name of the font in ATS framework. output path Buffer to store pathname of the file. For passing to FT_New_Face . The client must allocate this buffer before calling this function. maxPathSize Lengths of the buffer path that client allocated. face_index Index of the face. For passing to FT_New_Face . return FreeType error code. 0 means success. FT_New_Face_From_FSSpec Defined in FT_MAC_H (freetype/ftmac.h). 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; 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_New_Face_From_FSRef Defined in FT_MAC_H (freetype/ftmac.h). 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; 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.","title":"Mac Specific Interface"},{"location":"ft2-mac_specific.html#mac-specific-interface","text":"","title":"Mac Specific Interface"},{"location":"ft2-mac_specific.html#synopsis","text":"The following definitions are only available if FreeType is compiled on a Macintosh.","title":"Synopsis"},{"location":"ft2-mac_specific.html#ft_new_face_from_fond","text":"Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_New_Face_From_FOND ( FT_Library library, Handle fond, FT_Long face_index, FT_Face *aface ) FT_DEPRECATED_ATTRIBUTE; Create a new face object from a FOND resource.","title":"FT_New_Face_From_FOND"},{"location":"ft2-mac_specific.html#ft_getfile_from_mac_name","text":"Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_Name ( const char * fontName, FSSpec* pathSpec, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; Return an FSSpec for the disk file containing the named font.","title":"FT_GetFile_From_Mac_Name"},{"location":"ft2-mac_specific.html#ft_getfile_from_mac_ats_name","text":"Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_ATS_Name ( const char * fontName, FSSpec* pathSpec, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; Return an FSSpec for the disk file containing the named font.","title":"FT_GetFile_From_Mac_ATS_Name"},{"location":"ft2-mac_specific.html#ft_getfilepath_from_mac_ats_name","text":"Defined in FT_MAC_H (freetype/ftmac.h). FT_EXPORT( FT_Error ) FT_GetFilePath_From_Mac_ATS_Name ( const char * fontName, UInt8* path, UInt32 maxPathSize, FT_Long * face_index ) FT_DEPRECATED_ATTRIBUTE; Return a pathname of the disk file and face index for given font name that is handled by ATS framework.","title":"FT_GetFilePath_From_Mac_ATS_Name"},{"location":"ft2-mac_specific.html#ft_new_face_from_fsspec","text":"Defined in FT_MAC_H (freetype/ftmac.h). 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; Create a new face object from a given resource and typeface index using an FSSpec to the font file.","title":"FT_New_Face_From_FSSpec"},{"location":"ft2-mac_specific.html#ft_new_face_from_fsref","text":"Defined in FT_MAC_H (freetype/ftmac.h). 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; Create a new face object from a given resource and typeface index using an FSRef to the font file.","title":"FT_New_Face_From_FSRef"},{"location":"ft2-module_management.html","text":"FreeType Docs Support API Module Management Module Management Synopsis The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime. Additionally, some module properties can be controlled also. Here is a list of possible values of the module_name field in the FT_Module_Class structure. autofitter bdf cff gxvalid otvalid pcf pfr psaux pshinter psnames raster1 sfnt smooth, smooth-lcd, smooth-lcdv truetype type1 type42 t1cid winfonts Note that the FreeType Cache sub-system is not a FreeType module. FT_Module Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_ModuleRec_* FT_Module ; A handle to a given FreeType module object. A module can be a font driver, a renderer, or anything else that provides services to the former. FT_Module_Constructor Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Error (* FT_Module_Constructor )( FT_Module module ); A function used to initialize (not create) a new module object. input module The module to initialize. FT_Module_Destructor Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef void (* FT_Module_Destructor )( FT_Module module ); A function used to finalize (not destroy) a given module object. input module The module to finalize. FT_Module_Requester Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Module_Interface (* FT_Module_Requester )( FT_Module module, const char * name ); A function used to query a given module for a specific interface. input module The module to be searched. name The name of the interface in the module. FT_Module_Class Defined in FT_MODULE_H (freetype/ftmodapi.h). 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 ; The module class descriptor. While being a public structure necessary for FreeType's module bookkeeping, most of the fields are essentially internal, not to be used directly by an application. 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_interface A typeless pointer to a structure (which varies between different modules) that holds the module's interface functions. This is essentially what get_interface returns. module_init The initializing function. module_done The finalizing function. get_interface The interface requesting function. FT_Add_Module Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Add_Module ( FT_Library library, const FT_Module_Class * clazz ); 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_Get_Module Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Module ) FT_Get_Module ( FT_Library library, const char * module_name ); 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_Remove_Module Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Remove_Module ( FT_Library library, FT_Module module ); 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_Add_Default_Modules Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Add_Default_Modules ( FT_Library library ); 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_Property_Set Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Property_Set ( FT_Library library, const FT_String * module_name, const FT_String * property_name, const void * value ); Set a property for a given module. input library A handle to the library the module is part of. module_name The module name. property_name The property name. Properties are described in section Driver properties . Note that only a few modules have properties. value A generic pointer to a variable or structure that gives the new value of the property. The exact definition of value is dependent on the property; see section Driver properties . return FreeType error code. 0 means success. note If module_name isn't a valid module name, or property_name doesn't specify a valid property, or if value doesn't represent a valid value for the given property, an error is returned. The following example sets property bar (a simple integer) in module foo to value 1. FT_UInt bar; bar = 1; FT_Property_Set( library, foo , bar , bar ); Note that the FreeType Cache sub-system doesn't recognize module property changes. To avoid glyph lookup confusion within the cache you should call FTC_Manager_Reset to completely flush the cache if a module property gets changed after FTC_Manager_New has been called. It is not possible to set properties of the FreeType Cache sub-system itself with FT_Property_Set; use ?FTC_Property_Set? instead. since 2.4.11 FT_Property_Get Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Property_Get ( FT_Library library, const FT_String * module_name, const FT_String * property_name, void * value ); Get a module's property value. input library A handle to the library the module is part of. module_name The module name. property_name The property name. Properties are described in section Driver properties . inout value A generic pointer to a variable or structure that gives the value of the property. The exact definition of value is dependent on the property; see section Driver properties . return FreeType error code. 0 means success. note If module_name isn't a valid module name, or property_name doesn't specify a valid property, or if value doesn't represent a valid value for the given property, an error is returned. The following example gets property baz (a range) in module foo . typedef range_ { FT_Int32 min; FT_Int32 max; } range; range baz; FT_Property_Get( library, foo , baz , baz ); It is not possible to retrieve properties of the FreeType Cache sub-system with FT_Property_Get; use ?FTC_Property_Get? instead. since 2.4.11 FT_Set_Default_Properties Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Set_Default_Properties ( FT_Library library ); If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is set, this function reads the FREETYPE_PROPERTIES environment variable to control driver properties. See section Driver properties for more. If the compilation option is not set, this function does nothing. FREETYPE_PROPERTIES has the following syntax form (broken here into multiple lines for better readability). optional whitespace module-name1 : property-name1 = property-value1 whitespace module-name2 : property-name2 = property-value2 ... Example: FREETYPE_PROPERTIES=truetype:interpreter-version=35 \\ cff:no-stem-darkening=1 \\ autofitter:warping=1 inout library A handle to a new library object. since 2.8 FT_New_Library Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_New_Library ( FT_Memory memory, FT_Library *alibrary ); This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program. Note, however, that the used FT_Memory structure is expected to remain valid for the life of the FT_Library object. Normally, you would call this function (followed by a call to FT_Add_Default_Modules or a series of calls to FT_Add_Module , and a call to FT_Set_Default_Properties ) instead of FT_Init_FreeType to initialize the FreeType library. Don't use FT_Done_FreeType but FT_Done_Library to destroy a library instance. input memory A handle to the original memory object. output alibrary A pointer to handle of a new library object. return FreeType error code. 0 means success. note See the discussion of reference counters in the description of FT_Reference_Library . FT_Done_Library Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Done_Library ( FT_Library library ); Discard a given library object. This closes all drivers and discards all resource objects. input library A handle to the target library. return FreeType error code. 0 means success. note See the discussion of reference counters in the description of FT_Reference_Library . FT_Reference_Library Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Reference_Library ( FT_Library library ); A counter gets initialized to 1 at the time an FT_Library structure is created. This function increments the counter. FT_Done_Library then only destroys a library if the counter is 1, otherwise it simply decrements the counter. This function helps in managing life-cycles of structures that reference FT_Library objects. input library A handle to a target library object. return FreeType error code. 0 means success. since 2.4.2 FT_Renderer Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_RendererRec_* FT_Renderer ; A handle to a given FreeType renderer. A renderer is a module in charge of converting a glyph's outline image to a bitmap. It supports a single glyph image format, and one or more target surface depths. FT_Renderer_Class Defined in FT_RENDER_H (freetype/ftrender.h). 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 ; 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. FT_Get_Renderer Defined in FT_RENDER_H (freetype/ftrender.h). FT_EXPORT( FT_Renderer ) FT_Get_Renderer ( FT_Library library, FT_Glyph_Format format ); 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_Set_Renderer Defined in FT_RENDER_H (freetype/ftrender.h). FT_EXPORT( FT_Error ) FT_Set_Renderer ( FT_Library library, FT_Renderer renderer, FT_UInt num_params, FT_Parameter * parameters ); Set the current renderer to use, and set additional mode. inout library A handle to the library object. input renderer A handle to the renderer object. num_params The number of additional parameters. parameters Additional parameters. return FreeType error code. 0 means success. note In case of success, the renderer will be used to convert glyph images in the renderer's known format into bitmaps. This doesn't change the current renderer for other formats. Currently, no FreeType renderer module uses parameters ; you should thus always pass NULL as the value. FT_Set_Debug_Hook Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Set_Debug_Hook ( FT_Library library, FT_UInt hook_index, FT_DebugHook_Func debug_hook ); Set a debug hook function for debugging the interpreter of a font format. While this is a public API function, an application needs access to FreeType's internal header files to do something useful. Have a look at the source code of the ttdebug FreeType demo program for an example of its usage. inout library A handle to the library object. input hook_index The index of the debug hook. You should use defined enumeration macros like FT_DEBUG_HOOK_TRUETYPE . debug_hook The function used to debug the interpreter. note Currently, four debug hook slots are available, but only one (for the TrueType interpreter) is defined. FT_Driver Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_DriverRec_* FT_Driver ; A handle to a given FreeType font driver object. A font driver is a module capable of creating faces from font files. FT_DebugHook_Func Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Error (* FT_DebugHook_Func )( void * arg ); A drop-in replacement (or rather a wrapper) for the bytecode or charstring interpreter's main loop function. Its job is essentially to activate debug mode to enforce single-stepping, to call the main loop function to interpret the next opcode, and to show the changed context to the user. An example for such a main loop function is TT_RunIns (declared in FreeType's internal header file src/truetype/ttinterp.h ). Have a look at the source code of the ttdebug FreeType demo program for an example of a drop-in replacement. inout arg A typeless pointer, to be cast to the main loop function's data structure (which depends on the font module). For TrueType fonts it is bytecode interpreter's execution context, TT_ExecContext , which is declared in FreeType's internal header file tttypes.h . FT_DEBUG_HOOK_XXX Defined in FT_MODULE_H (freetype/ftmodapi.h). # define FT_DEBUG_HOOK_TRUETYPE 0 A list of named debug hook indices. values FT_DEBUG_HOOK_TRUETYPE This hook index identifies the TrueType bytecode debugger.","title":"Module Management"},{"location":"ft2-module_management.html#module-management","text":"","title":"Module Management"},{"location":"ft2-module_management.html#synopsis","text":"The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime. Additionally, some module properties can be controlled also. Here is a list of possible values of the module_name field in the FT_Module_Class structure. autofitter bdf cff gxvalid otvalid pcf pfr psaux pshinter psnames raster1 sfnt smooth, smooth-lcd, smooth-lcdv truetype type1 type42 t1cid winfonts Note that the FreeType Cache sub-system is not a FreeType module.","title":"Synopsis"},{"location":"ft2-module_management.html#ft_module","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_ModuleRec_* FT_Module ; A handle to a given FreeType module object. A module can be a font driver, a renderer, or anything else that provides services to the former.","title":"FT_Module"},{"location":"ft2-module_management.html#ft_module_constructor","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Error (* FT_Module_Constructor )( FT_Module module ); A function used to initialize (not create) a new module object.","title":"FT_Module_Constructor"},{"location":"ft2-module_management.html#ft_module_destructor","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef void (* FT_Module_Destructor )( FT_Module module ); A function used to finalize (not destroy) a given module object.","title":"FT_Module_Destructor"},{"location":"ft2-module_management.html#ft_module_requester","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Module_Interface (* FT_Module_Requester )( FT_Module module, const char * name ); A function used to query a given module for a specific interface.","title":"FT_Module_Requester"},{"location":"ft2-module_management.html#ft_module_class","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). 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 ; The module class descriptor. While being a public structure necessary for FreeType's module bookkeeping, most of the fields are essentially internal, not to be used directly by an application.","title":"FT_Module_Class"},{"location":"ft2-module_management.html#ft_add_module","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Add_Module ( FT_Library library, const FT_Module_Class * clazz ); Add a new module to a given library instance.","title":"FT_Add_Module"},{"location":"ft2-module_management.html#ft_get_module","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Module ) FT_Get_Module ( FT_Library library, const char * module_name ); Find a module by its name.","title":"FT_Get_Module"},{"location":"ft2-module_management.html#ft_remove_module","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Remove_Module ( FT_Library library, FT_Module module ); Remove a given module from a library instance.","title":"FT_Remove_Module"},{"location":"ft2-module_management.html#ft_add_default_modules","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Add_Default_Modules ( FT_Library library ); 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).","title":"FT_Add_Default_Modules"},{"location":"ft2-module_management.html#ft_property_set","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Property_Set ( FT_Library library, const FT_String * module_name, const FT_String * property_name, const void * value ); Set a property for a given module.","title":"FT_Property_Set"},{"location":"ft2-module_management.html#ft_property_get","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Property_Get ( FT_Library library, const FT_String * module_name, const FT_String * property_name, void * value ); Get a module's property value.","title":"FT_Property_Get"},{"location":"ft2-module_management.html#ft_set_default_properties","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Set_Default_Properties ( FT_Library library ); If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is set, this function reads the FREETYPE_PROPERTIES environment variable to control driver properties. See section Driver properties for more. If the compilation option is not set, this function does nothing. FREETYPE_PROPERTIES has the following syntax form (broken here into multiple lines for better readability). optional whitespace module-name1 : property-name1 = property-value1 whitespace module-name2 : property-name2 = property-value2 ... Example: FREETYPE_PROPERTIES=truetype:interpreter-version=35 \\ cff:no-stem-darkening=1 \\ autofitter:warping=1","title":"FT_Set_Default_Properties"},{"location":"ft2-module_management.html#ft_new_library","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_New_Library ( FT_Memory memory, FT_Library *alibrary ); This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program. Note, however, that the used FT_Memory structure is expected to remain valid for the life of the FT_Library object. Normally, you would call this function (followed by a call to FT_Add_Default_Modules or a series of calls to FT_Add_Module , and a call to FT_Set_Default_Properties ) instead of FT_Init_FreeType to initialize the FreeType library. Don't use FT_Done_FreeType but FT_Done_Library to destroy a library instance.","title":"FT_New_Library"},{"location":"ft2-module_management.html#ft_done_library","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Done_Library ( FT_Library library ); Discard a given library object. This closes all drivers and discards all resource objects.","title":"FT_Done_Library"},{"location":"ft2-module_management.html#ft_reference_library","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_Error ) FT_Reference_Library ( FT_Library library ); A counter gets initialized to 1 at the time an FT_Library structure is created. This function increments the counter. FT_Done_Library then only destroys a library if the counter is 1, otherwise it simply decrements the counter. This function helps in managing life-cycles of structures that reference FT_Library objects.","title":"FT_Reference_Library"},{"location":"ft2-module_management.html#ft_renderer","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_RendererRec_* FT_Renderer ; A handle to a given FreeType renderer. A renderer is a module in charge of converting a glyph's outline image to a bitmap. It supports a single glyph image format, and one or more target surface depths.","title":"FT_Renderer"},{"location":"ft2-module_management.html#ft_renderer_class","text":"Defined in FT_RENDER_H (freetype/ftrender.h). 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 ; The renderer module class descriptor.","title":"FT_Renderer_Class"},{"location":"ft2-module_management.html#ft_get_renderer","text":"Defined in FT_RENDER_H (freetype/ftrender.h). FT_EXPORT( FT_Renderer ) FT_Get_Renderer ( FT_Library library, FT_Glyph_Format format ); Retrieve the current renderer for a given glyph format.","title":"FT_Get_Renderer"},{"location":"ft2-module_management.html#ft_set_renderer","text":"Defined in FT_RENDER_H (freetype/ftrender.h). FT_EXPORT( FT_Error ) FT_Set_Renderer ( FT_Library library, FT_Renderer renderer, FT_UInt num_params, FT_Parameter * parameters ); Set the current renderer to use, and set additional mode.","title":"FT_Set_Renderer"},{"location":"ft2-module_management.html#ft_set_debug_hook","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( void ) FT_Set_Debug_Hook ( FT_Library library, FT_UInt hook_index, FT_DebugHook_Func debug_hook ); Set a debug hook function for debugging the interpreter of a font format. While this is a public API function, an application needs access to FreeType's internal header files to do something useful. Have a look at the source code of the ttdebug FreeType demo program for an example of its usage.","title":"FT_Set_Debug_Hook"},{"location":"ft2-module_management.html#ft_driver","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). typedef struct FT_DriverRec_* FT_Driver ; A handle to a given FreeType font driver object. A font driver is a module capable of creating faces from font files.","title":"FT_Driver"},{"location":"ft2-module_management.html#ft_debughook_func","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef FT_Error (* FT_DebugHook_Func )( void * arg ); A drop-in replacement (or rather a wrapper) for the bytecode or charstring interpreter's main loop function. Its job is essentially to activate debug mode to enforce single-stepping, to call the main loop function to interpret the next opcode, and to show the changed context to the user. An example for such a main loop function is TT_RunIns (declared in FreeType's internal header file src/truetype/ttinterp.h ). Have a look at the source code of the ttdebug FreeType demo program for an example of a drop-in replacement.","title":"FT_DebugHook_Func"},{"location":"ft2-module_management.html#ft_debug_hook_xxx","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). # define FT_DEBUG_HOOK_TRUETYPE 0 A list of named debug hook indices.","title":"FT_DEBUG_HOOK_XXX"},{"location":"ft2-multiple_masters.html","text":"FreeType Docs Format-Specific API Multiple Masters Multiple Masters Synopsis The following types and functions are used to manage Multiple Master fonts, i.e., the selection of specific design instances by setting design axis coordinates. Besides Adobe MM fonts, the interface supports Apple's TrueType GX and OpenType variation fonts. Some of the routines only work with Adobe MM fonts, others will work with all three types. They are similar enough that a consistent interface makes sense. FT_MM_Axis Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_MM_Axis_ { FT_String * name; FT_Long minimum; FT_Long maximum; } FT_MM_Axis ; A structure to model a given axis in design space for Multiple Masters fonts. This structure can't be used for TrueType GX or OpenType variation fonts. fields name The axis's name. minimum The axis's minimum design coordinate. maximum The axis's maximum design coordinate. FT_Multi_Master Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_Multi_Master_ { FT_UInt num_axis; FT_UInt num_designs; FT_MM_Axis axis[T1_MAX_MM_AXIS]; } FT_Multi_Master ; A structure to model the axes and space of a Multiple Masters font. This structure can't be used for TrueType GX or OpenType variation fonts. fields num_axis Number of axes. Cannot exceed 4. num_designs Number of designs; should be normally 2^num_axis even though the Type 1 specification strangely allows for intermediate designs to be present. This number cannot exceed 16. axis A table of axis descriptors. FT_Var_Axis Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). 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 ; A structure to model a given axis in design space for Multiple Masters, TrueType GX, and OpenType variation fonts. fields name The axis's name. Not always meaningful for TrueType GX or OpenType variation fonts. minimum The axis's minimum design coordinate. def The axis's default design coordinate. FreeType computes meaningful default values for Adobe MM fonts. maximum The axis's maximum design coordinate. tag The axis's tag (the equivalent to name for TrueType GX and OpenType variation fonts). FreeType provides default values for Adobe MM fonts if possible. strid The axis name entry in the font's name table. This is another (and often better) version of the name field for TrueType GX or OpenType variation fonts. Not meaningful for Adobe MM fonts. note The fields minimum , def , and maximum are 16.16 fractional values for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the values are integers. FT_Var_Named_Style Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_Var_Named_Style_ { FT_Fixed * coords; FT_UInt strid; FT_UInt psid; /* since 2.7.1 */ } FT_Var_Named_Style ; A structure to model a named instance in a TrueType GX or OpenType variation font. This structure can't be used for Adobe MM fonts. fields coords The design coordinates for this instance. This is an array with one entry for each axis. strid The entry in name table identifying this instance. psid The entry in name table identifying a PostScript name for this instance. Value 0xFFFF indicates a missing entry. FT_MM_Var Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). 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 ; A structure to model the axes and space of an Adobe MM, TrueType GX, or OpenType variation font. Some fields are specific to one format and not to the others. fields num_axis The number of axes. The maximum value is 4 for Adobe MM fonts; no limit in TrueType GX or OpenType variation fonts. num_designs The number of designs; should be normally 2^num_axis for Adobe MM fonts. Not meaningful for TrueType GX or OpenType variation fonts (where every glyph could have a different number of designs). num_namedstyles The number of named styles; a named style is a tuple of design coordinates that has a string ID (in the name table) associated with it. The font can tell the user that, for example, [Weight=1.5,Width=1.1] is Bold . Another name for named style is named instance . For Adobe Multiple Masters fonts, this value is always zero because the format does not support named styles. axis An axis descriptor table. TrueType GX and OpenType variation fonts contain slightly more data than Adobe MM fonts. Memory management of this pointer is done internally by FreeType. namedstyle A named style (instance) table. Only meaningful for TrueType GX and OpenType variation fonts. Memory management of this pointer is done internally by FreeType. FT_Get_Multi_Master Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Multi_Master ( FT_Face face, FT_Multi_Master *amaster ); Retrieve a variation descriptor of a given Adobe MM font. This function can't be used with TrueType GX or OpenType variation fonts. input face A handle to the source face. output amaster The Multiple Masters descriptor. return FreeType error code. 0 means success. FT_Get_MM_Var Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_Var ( FT_Face face, FT_MM_Var * *amaster ); Retrieve a variation descriptor for a given font. This function works with all supported variation formats. input face A handle to the source face. output amaster The variation descriptor. Allocates a data structure, which the user must deallocate with a call to FT_Done_MM_Var after use. return FreeType error code. 0 means success. FT_Done_MM_Var Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Done_MM_Var ( FT_Library library, FT_MM_Var *amaster ); Free the memory allocated by FT_Get_MM_Var . input library A handle of the face's parent library object that was used in the call to FT_Get_MM_Var to create amaster . return FreeType error code. 0 means success. FT_Set_MM_Design_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Long * coords ); For Adobe MM fonts, choose an interpolated font design through design coordinates. This function can't be used with TrueType GX or OpenType variation fonts. inout face A handle to the source face. input num_coords The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes. coords An array of design coordinates. return FreeType error code. 0 means success. note [Since 2.8.1] To reset all axes to the default values, call the function with num_coords set to zero and coords set to NULL . [Since 2.9] If num_coords is larger than zero, this function sets the FT_FACE_FLAG_VARIATION bit in FT_Face 's face_flags field (i.e., FT_IS_VARIATION will return true). If num_coords is zero, this bit flag gets unset. FT_Set_Var_Design_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Var_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Choose an interpolated font design through design coordinates. This function works with all supported variation formats. inout face A handle to the source face. input num_coords The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes. coords An array of design coordinates. return FreeType error code. 0 means success. note [Since 2.8.1] To reset all axes to the default values, call the function with num_coords set to zero and coords set to NULL . [Since 2.9] Default values means the currently selected named instance (or the base font if no named instance is selected). [Since 2.9] If num_coords is larger than zero, this function sets the FT_FACE_FLAG_VARIATION bit in FT_Face 's face_flags field (i.e., FT_IS_VARIATION will return true). If num_coords is zero, this bit flag gets unset. FT_Get_Var_Design_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Get the design coordinates of the currently selected interpolated font. This function works with all supported variation formats. input face A handle to the source face. num_coords The number of design coordinates to retrieve. If it is larger than the number of axes, set the excess values to 0. output coords The design coordinates array. return FreeType error code. 0 means success. since 2.7.1 FT_Set_MM_Blend_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Choose an interpolated font design through normalized blend coordinates. This function works with all supported variation formats. inout face A handle to the source face. input num_coords The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes. coords The design coordinates array (each element must be between 0 and 1.0 for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and OpenType variation fonts). return FreeType error code. 0 means success. note [Since 2.8.1] To reset all axes to the default values, call the function with num_coords set to zero and coords set to NULL . [Since 2.9] Default values means the currently selected named instance (or the base font if no named instance is selected). [Since 2.9] If num_coords is larger than zero, this function sets the FT_FACE_FLAG_VARIATION bit in FT_Face 's face_flags field (i.e., FT_IS_VARIATION will return true). If num_coords is zero, this bit flag gets unset. FT_Get_MM_Blend_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Get the normalized blend coordinates of the currently selected interpolated font. This function works with all supported variation formats. input face A handle to the source face. num_coords The number of normalized blend coordinates to retrieve. If it is larger than the number of axes, set the excess values to 0.5 for Adobe MM fonts, and to 0 for TrueType GX and OpenType variation fonts. output coords The normalized blend coordinates array. return FreeType error code. 0 means success. since 2.7.1 FT_Set_Var_Blend_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Var_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); This is another name of FT_Set_MM_Blend_Coordinates . FT_Get_Var_Blend_Coordinates Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); This is another name of FT_Get_MM_Blend_Coordinates . since 2.7.1 FT_Set_MM_WeightVector Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_WeightVector ( FT_Face face, FT_UInt len, FT_Fixed * weightvector ); For Adobe MM fonts, choose an interpolated font design by directly setting the weight vector. This function can't be used with TrueType GX or OpenType variation fonts. inout face A handle to the source face. input len The length of the weight vector array. If it is larger than the number of designs, the extra values are ignored. If it is less than the number of designs, the remaining values are set to zero. weightvector An array representing the weight vector. return FreeType error code. 0 means success. note Adobe Multiple Master fonts limit the number of designs, and thus the length of the weight vector to 16. If len is zero and weightvector is NULL , the weight vector array is reset to the default values. The Adobe documentation also states that the values in the WeightVector array must total 1.0 0.001. In practice this does not seem to be enforced, so is not enforced here, either. since 2.10 FT_Get_MM_WeightVector Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_WeightVector ( FT_Face face, FT_UInt * len, FT_Fixed * weightvector ); For Adobe MM fonts, retrieve the current weight vector of the font. This function can't be used with TrueType GX or OpenType variation fonts. inout face A handle to the source face. len A pointer to the size of the array to be filled. If the size of the array is less than the number of designs, FT_Err_Invalid_Argument is returned, and len is set to the required size (the number of designs). If the size of the array is greater than the number of designs, the remaining entries are set to 0. On successful completion, len is set to the number of designs (i.e., the number of values written to the array). output weightvector An array to be filled. return FreeType error code. 0 means success. note Adobe Multiple Master fonts limit the number of designs, and thus the length of the WeightVector to 16. since 2.10 FT_VAR_AXIS_FLAG_XXX Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). # define FT_VAR_AXIS_FLAG_HIDDEN 1 A list of bit flags used in the return value of FT_Get_Var_Axis_Flags . values FT_VAR_AXIS_FLAG_HIDDEN The variation axis should not be exposed to user interfaces. since 2.8.1 FT_Get_Var_Axis_Flags Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Axis_Flags ( FT_MM_Var * master, FT_UInt axis_index, FT_UInt * flags ); Get the flags field of an OpenType Variation Axis Record. Not meaningful for Adobe MM fonts ( *flags is always zero). input master The variation descriptor. axis_index The index of the requested variation axis. output flags The flags field. See FT_VAR_AXIS_FLAG_XXX for possible values. return FreeType error code. 0 means success. since 2.8.1 FT_Set_Named_Instance Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Named_Instance ( FT_Face face, FT_UInt instance_index ); Set or change the current named instance. input face A handle to the source face. instance_index The index of the requested instance, starting with value 1. If set to value 0, FreeType switches to font access without a named instance. return FreeType error code. 0 means success. note The function uses the value of instance_index to set bits 16-30 of the face's face_index field. It also resets any variation applied to the font, and the FT_FACE_FLAG_VARIATION bit of the face's face_flags field gets reset to zero (i.e., FT_IS_VARIATION will return false). For Adobe MM fonts (which don't have named instances) this function simply resets the current face to the default instance. since 2.9","title":"Multiple Masters"},{"location":"ft2-multiple_masters.html#multiple-masters","text":"","title":"Multiple Masters"},{"location":"ft2-multiple_masters.html#synopsis","text":"The following types and functions are used to manage Multiple Master fonts, i.e., the selection of specific design instances by setting design axis coordinates. Besides Adobe MM fonts, the interface supports Apple's TrueType GX and OpenType variation fonts. Some of the routines only work with Adobe MM fonts, others will work with all three types. They are similar enough that a consistent interface makes sense.","title":"Synopsis"},{"location":"ft2-multiple_masters.html#ft_mm_axis","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_MM_Axis_ { FT_String * name; FT_Long minimum; FT_Long maximum; } FT_MM_Axis ; A structure to model a given axis in design space for Multiple Masters fonts. This structure can't be used for TrueType GX or OpenType variation fonts.","title":"FT_MM_Axis"},{"location":"ft2-multiple_masters.html#ft_multi_master","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_Multi_Master_ { FT_UInt num_axis; FT_UInt num_designs; FT_MM_Axis axis[T1_MAX_MM_AXIS]; } FT_Multi_Master ; A structure to model the axes and space of a Multiple Masters font. This structure can't be used for TrueType GX or OpenType variation fonts.","title":"FT_Multi_Master"},{"location":"ft2-multiple_masters.html#ft_var_axis","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). 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 ; A structure to model a given axis in design space for Multiple Masters, TrueType GX, and OpenType variation fonts.","title":"FT_Var_Axis"},{"location":"ft2-multiple_masters.html#ft_var_named_style","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). typedef struct FT_Var_Named_Style_ { FT_Fixed * coords; FT_UInt strid; FT_UInt psid; /* since 2.7.1 */ } FT_Var_Named_Style ; A structure to model a named instance in a TrueType GX or OpenType variation font. This structure can't be used for Adobe MM fonts.","title":"FT_Var_Named_Style"},{"location":"ft2-multiple_masters.html#ft_mm_var","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). 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 ; A structure to model the axes and space of an Adobe MM, TrueType GX, or OpenType variation font. Some fields are specific to one format and not to the others.","title":"FT_MM_Var"},{"location":"ft2-multiple_masters.html#ft_get_multi_master","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Multi_Master ( FT_Face face, FT_Multi_Master *amaster ); Retrieve a variation descriptor of a given Adobe MM font. This function can't be used with TrueType GX or OpenType variation fonts.","title":"FT_Get_Multi_Master"},{"location":"ft2-multiple_masters.html#ft_get_mm_var","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_Var ( FT_Face face, FT_MM_Var * *amaster ); Retrieve a variation descriptor for a given font. This function works with all supported variation formats.","title":"FT_Get_MM_Var"},{"location":"ft2-multiple_masters.html#ft_done_mm_var","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Done_MM_Var ( FT_Library library, FT_MM_Var *amaster ); Free the memory allocated by FT_Get_MM_Var .","title":"FT_Done_MM_Var"},{"location":"ft2-multiple_masters.html#ft_set_mm_design_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Long * coords ); For Adobe MM fonts, choose an interpolated font design through design coordinates. This function can't be used with TrueType GX or OpenType variation fonts.","title":"FT_Set_MM_Design_Coordinates"},{"location":"ft2-multiple_masters.html#ft_set_var_design_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Var_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Choose an interpolated font design through design coordinates. This function works with all supported variation formats.","title":"FT_Set_Var_Design_Coordinates"},{"location":"ft2-multiple_masters.html#ft_get_var_design_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Design_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Get the design coordinates of the currently selected interpolated font. This function works with all supported variation formats.","title":"FT_Get_Var_Design_Coordinates"},{"location":"ft2-multiple_masters.html#ft_set_mm_blend_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Choose an interpolated font design through normalized blend coordinates. This function works with all supported variation formats.","title":"FT_Set_MM_Blend_Coordinates"},{"location":"ft2-multiple_masters.html#ft_get_mm_blend_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); Get the normalized blend coordinates of the currently selected interpolated font. This function works with all supported variation formats.","title":"FT_Get_MM_Blend_Coordinates"},{"location":"ft2-multiple_masters.html#ft_set_var_blend_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Var_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); This is another name of FT_Set_MM_Blend_Coordinates .","title":"FT_Set_Var_Blend_Coordinates"},{"location":"ft2-multiple_masters.html#ft_get_var_blend_coordinates","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Blend_Coordinates ( FT_Face face, FT_UInt num_coords, FT_Fixed * coords ); This is another name of FT_Get_MM_Blend_Coordinates .","title":"FT_Get_Var_Blend_Coordinates"},{"location":"ft2-multiple_masters.html#ft_set_mm_weightvector","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_MM_WeightVector ( FT_Face face, FT_UInt len, FT_Fixed * weightvector ); For Adobe MM fonts, choose an interpolated font design by directly setting the weight vector. This function can't be used with TrueType GX or OpenType variation fonts.","title":"FT_Set_MM_WeightVector"},{"location":"ft2-multiple_masters.html#ft_get_mm_weightvector","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_MM_WeightVector ( FT_Face face, FT_UInt * len, FT_Fixed * weightvector ); For Adobe MM fonts, retrieve the current weight vector of the font. This function can't be used with TrueType GX or OpenType variation fonts.","title":"FT_Get_MM_WeightVector"},{"location":"ft2-multiple_masters.html#ft_var_axis_flag_xxx","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). # define FT_VAR_AXIS_FLAG_HIDDEN 1 A list of bit flags used in the return value of FT_Get_Var_Axis_Flags .","title":"FT_VAR_AXIS_FLAG_XXX"},{"location":"ft2-multiple_masters.html#ft_get_var_axis_flags","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Get_Var_Axis_Flags ( FT_MM_Var * master, FT_UInt axis_index, FT_UInt * flags ); Get the flags field of an OpenType Variation Axis Record. Not meaningful for Adobe MM fonts ( *flags is always zero).","title":"FT_Get_Var_Axis_Flags"},{"location":"ft2-multiple_masters.html#ft_set_named_instance","text":"Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h). FT_EXPORT( FT_Error ) FT_Set_Named_Instance ( FT_Face face, FT_UInt instance_index ); Set or change the current named instance.","title":"FT_Set_Named_Instance"},{"location":"ft2-ot_validation.html","text":"FreeType Docs Miscellaneous OpenType Validation OpenType Validation Synopsis This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). FT_OpenType_Validate Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). 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 ); Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming). input face A handle to the input face. validation_flags A bit field that specifies the tables to be validated. See FT_VALIDATE_OTXXX for possible values. output BASE_table A pointer to the BASE table. GDEF_table A pointer to the GDEF table. GPOS_table A pointer to the GPOS table. GSUB_table A pointer to the GSUB table. JSTF_table A pointer to the JSTF table. return FreeType error code. 0 means success. note This function only works with OpenType fonts, returning an error otherwise. After use, the application should deallocate the five tables with FT_OpenType_Free . A NULL value indicates that the table either doesn't exist in the font, or the application hasn't asked for validation. FT_OpenType_Free Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). FT_EXPORT( void ) FT_OpenType_Free ( FT_Face face, FT_Bytes table ); 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_VALIDATE_OTXXX Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). # 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 ) 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).","title":"OpenType Validation"},{"location":"ft2-ot_validation.html#opentype-validation","text":"","title":"OpenType Validation"},{"location":"ft2-ot_validation.html#synopsis","text":"This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).","title":"Synopsis"},{"location":"ft2-ot_validation.html#ft_opentype_validate","text":"Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). 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 ); Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library that actually does the text layout can access those tables without error checking (which can be quite time consuming).","title":"FT_OpenType_Validate"},{"location":"ft2-ot_validation.html#ft_opentype_free","text":"Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). FT_EXPORT( void ) FT_OpenType_Free ( FT_Face face, FT_Bytes table ); Free the buffer allocated by OpenType validator.","title":"FT_OpenType_Free"},{"location":"ft2-ot_validation.html#ft_validate_otxxx","text":"Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h). # 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 ) A list of bit-field constants used with FT_OpenType_Validate to indicate which OpenType tables should be validated.","title":"FT_VALIDATE_OTXXX"},{"location":"ft2-outline_processing.html","text":"FreeType Docs Support API Outline Processing Outline Processing Synopsis 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. FT_Outline Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; 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 Bezier control point, while it is on if set. Bit 1 is meaningful for off points only. If set, it indicates a third-order Bezier arc control point; and a second-order control point if unset. If bit 2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is the same as the argument to the SCANMODE instruction). Bits 3 and 4 are reserved for internal purposes. contours An array of n_contours shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points 0 to contours[0] , the second one is defined by the points contours[0]+1 to contours[1] , etc. flags A set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on how to convert/grid-fit it. See FT_OUTLINE_XXX . note The B/W rasterizer only checks bit 2 in the tags array for the first point of each contour. The drop-out mode as given with FT_OUTLINE_IGNORE_DROPOUTS , FT_OUTLINE_SMART_DROPOUTS , and FT_OUTLINE_INCLUDE_STUBS in flags is then overridden. FT_Outline_New Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_New ( FT_Library library, FT_UInt numPoints, FT_Int numContours, FT_Outline *anoutline ); Create a new outline of a given size. input library A handle to the library object from where the outline is allocated. Note however that the new outline will not necessarily be freed , when destroying the library, by FT_Done_FreeType . numPoints The maximum number of points within the outline. Must be smaller than or equal to 0xFFFF (65535). numContours The maximum number of contours within the outline. This value must be in the range 0 to numPoints . output anoutline A handle to the new outline. return FreeType error code. 0 means success. note The reason why this function takes a library parameter is simply to use the library's memory allocator. FT_Outline_Done Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Done ( FT_Library library, FT_Outline * outline ); 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. FT_Outline_Copy Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Copy ( const FT_Outline * source, FT_Outline *target ); 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_Outline_Translate Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Translate ( const FT_Outline * outline, FT_Pos xOffset, FT_Pos yOffset ); 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_Outline_Transform Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Transform ( const FT_Outline * outline, const FT_Matrix * matrix ); 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_Outline_Embolden Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Embolden ( FT_Outline * outline, FT_Pos strength ); Embolden an outline. The new outline will be at most 4 times strength pixels wider and higher. You may think of the left and bottom borders as unchanged. Negative strength values to reduce the outline thickness are possible also. inout outline A handle to the target outline. input strength How strong the glyph is emboldened. Expressed in 26.6 pixel format. return FreeType error code. 0 means success. note The used algorithm to increase or decrease the thickness of the glyph doesn't change the number of points; this means that certain situations like acute angles or intersections are sometimes handled incorrectly. If you need better metrics values you should call FT_Outline_Get_CBox or FT_Outline_Get_BBox . To get meaningful results, font scaling values must be set with functions like FT_Set_Char_Size before calling FT_Render_Glyph. example FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); if ( face- glyph- format == FT_GLYPH_FORMAT_OUTLINE ) FT_Outline_Embolden( face- glyph- outline, strength ); FT_Outline_EmboldenXY Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_EmboldenXY ( FT_Outline * outline, FT_Pos xstrength, FT_Pos ystrength ); Embolden an outline. The new outline will be xstrength pixels wider and ystrength pixels higher. Otherwise, it is similar to FT_Outline_Embolden , which uses the same strength in both directions. since 2.4.10 FT_Outline_Reverse Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Reverse ( FT_Outline * outline ); Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs. inout outline A pointer to the target outline descriptor. note This function toggles the bit flag FT_OUTLINE_REVERSE_FILL in the outline's flags field. It shouldn't be used by a normal client application, unless it knows what it is doing. FT_Outline_Check Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Check ( FT_Outline * outline ); Check the contents of an outline descriptor. input outline A handle to a source outline. return FreeType error code. 0 means success. note An empty outline, or an outline with a single point only is also valid. FT_Outline_Get_CBox Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Get_CBox ( const FT_Outline * outline, FT_BBox *acbox ); Return an outline's control box . The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier outside arcs). Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ftbbox component, which is dedicated to this single task. input outline A pointer to the source outline descriptor. output acbox The outline's control box. note See FT_Glyph_Get_CBox for a discussion of tricky fonts. FT_Outline_Get_BBox Defined in FT_BBOX_H (freetype/ftbbox.h). FT_EXPORT( FT_Error ) FT_Outline_Get_BBox ( FT_Outline * outline, FT_BBox *abbox ); Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm that returns very quickly when the two boxes coincide. Otherwise, the outline Bezier arcs are traversed to extract their extrema. input outline A pointer to the source outline. output abbox The outline's exact bounding box. return FreeType error code. 0 means success. note If the font is tricky and the glyph has been loaded with FT_LOAD_NO_SCALE , the resulting BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the BBox, which can be eventually converted back to font units. FT_Outline_Get_Bitmap Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Get_Bitmap ( FT_Library library, FT_Outline * outline, const FT_Bitmap *abitmap ); 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_Outline_Render Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Render ( FT_Library library, FT_Outline * outline, FT_Raster_Params * params ); Render an outline within a bitmap using the current scan-convert. 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 This advanced function uses FT_Raster_Params as an argument, allowing FreeType rasterizer to be used for direct composition, translucency, etc. You should know how to set up FT_Raster_Params for this function to work. 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_Outline_Decompose Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Decompose ( FT_Outline * outline, const FT_Outline_Funcs * func_interface, void * user ); Walk over an outline's structure to decompose it into individual segments and Bezier arcs. This function also emits move to operations to indicate the start of new contours in the outline. input outline A pointer to the source target. func_interface A table of emitters , i.e., function pointers called during decomposition to indicate path operations. inout user A typeless pointer that is passed to each emitter during the decomposition. It can be used to store the state during the decomposition. return FreeType error code. 0 means success. note A contour that contains a single point only is represented by a move to operation followed by line to to the same point. In most cases, it is best to filter this out before using the outline for stroking purposes (otherwise it would result in a visible dot when round caps are used). Similarly, the function returns success for an empty outline also (doing nothing, this is, not calling any emitter); if necessary, you should filter this out, too. FT_Outline_Funcs Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Beziers. fields move_to The move to emitter. line_to The segment emitter. conic_to The second-order Bezier arc emitter. cubic_to The third-order Bezier arc emitter. shift The shift that is applied to coordinates before they are sent to the emitter. delta The delta that is applied to coordinates before they are sent to the emitter, but after the shift. note The point coordinates sent to the emitters are the transformed version of the original coordinates (this is important for high accuracy during scan-conversion). The transformation is simple: x = (x shift) - delta y = (y shift) - delta Set the values of shift and delta to 0 to get the original point coordinates. FT_Outline_MoveToFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_MoveToFunc )( const FT_Vector * to, void * user ); # define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc 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. FT_Outline_LineToFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_LineToFunc )( const FT_Vector * to, void * user ); # define FT_Outline_LineTo_Func FT_Outline_LineToFunc 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. FT_Outline_ConicToFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_ConicToFunc )( const FT_Vector * control, const FT_Vector * to, void * user ); # define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc A function pointer type used to describe the signature of a conic to function during outline walking or decomposition. A conic to is emitted to indicate a second-order Bezier 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. FT_Outline_CubicToFunc Defined in FT_IMAGE_H (freetype/ftimage.h). 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 A function pointer type used to describe the signature of a cubic to function during outline walking or decomposition. A cubic to is emitted to indicate a third-order Bezier arc. input control1 A pointer to the first Bezier control point. control2 A pointer to the second Bezier 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. FT_Orientation Defined in FT_OUTLINE_H (freetype/ftoutln.h). 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 ; 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. FT_Outline_Get_Orientation Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Orientation ) FT_Outline_Get_Orientation ( FT_Outline * outline ); This function analyzes a glyph outline and tries to compute its fill orientation (see FT_Orientation ). This is done by integrating the total area covered by the outline. The positive integral corresponds to the clockwise orientation and FT_ORIENTATION_POSTSCRIPT is returned. The negative integral corresponds to the counter-clockwise orientation and FT_ORIENTATION_TRUETYPE is returned. Note that this will return FT_ORIENTATION_TRUETYPE for empty outlines. input outline A handle to the source outline. return The orientation. FT_OUTLINE_XXX Defined in FT_IMAGE_H (freetype/ftimage.h). # define FT_OUTLINE_NONE 0x0 # define FT_OUTLINE_OWNER 0x1 # define FT_OUTLINE_EVEN_ODD_FILL 0x2 # define FT_OUTLINE_REVERSE_FILL 0x4 # define FT_OUTLINE_IGNORE_DROPOUTS 0x8 # define FT_OUTLINE_SMART_DROPOUTS 0x10 # define FT_OUTLINE_INCLUDE_STUBS 0x20 # define FT_OUTLINE_HIGH_PRECISION 0x100 # define FT_OUTLINE_SINGLE_PASS 0x200 /* these constants are deprecated; use the corresponding */ /* ` FT_OUTLINE_XXX ` values instead */ # define ft_outline_none FT_OUTLINE_NONE # define ft_outline_owner FT_OUTLINE_OWNER # define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL # define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL # define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS # define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION # define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS A list of bit-field constants used for the flags in an outline's flags field. values FT_OUTLINE_NONE Value 0 is reserved. FT_OUTLINE_OWNER If set, this flag indicates that the outline's field arrays (i.e., points , flags , and contours ) are owned by the outline object, and should thus be freed when it is destroyed. FT_OUTLINE_EVEN_ODD_FILL By default, outlines are filled using the non-zero winding rule. If set to 1, the outline will be filled using the even-odd fill rule (only works with the smooth rasterizer). FT_OUTLINE_REVERSE_FILL By default, outside contours of an outline are oriented in clock-wise direction, as defined in the TrueType specification. This flag is set if the outline uses the opposite direction (typically for Type 1 fonts). This flag is ignored by the scan converter. FT_OUTLINE_IGNORE_DROPOUTS By default, the scan converter will try to detect drop-outs in an outline and correct the glyph bitmap to ensure consistent shape continuity. If set, this flag hints the scan-line converter to ignore such cases. See below for more information. FT_OUTLINE_SMART_DROPOUTS Select smart dropout control. If unset, use simple dropout control. Ignored if FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more information. FT_OUTLINE_INCLUDE_STUBS If set, turn pixels on for stubs , otherwise exclude them. Ignored if FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more information. FT_OUTLINE_HIGH_PRECISION This flag indicates that the scan-line converter should try to convert this outline to bitmaps with the highest possible quality. It is typically set for small character sizes. Note that this is only a hint that might be completely ignored by a given scan-converter. FT_OUTLINE_SINGLE_PASS This flag is set to force a given scan-converter to only use a single pass over the outline to render a bitmap glyph image. Normally, it is set for very large character sizes. It is only a hint that might be completely ignored by a given scan-converter. note The flags FT_OUTLINE_IGNORE_DROPOUTS , FT_OUTLINE_SMART_DROPOUTS , and FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer. There exists a second mechanism to pass the drop-out mode to the B/W rasterizer; see the tags field in FT_Outline . Please refer to the description of the SCANTYPE instruction in the OpenType specification (in file ttinst1.doc ) how simple drop-outs, smart drop-outs, and stubs are defined.","title":"Outline Processing"},{"location":"ft2-outline_processing.html#outline-processing","text":"","title":"Outline Processing"},{"location":"ft2-outline_processing.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-outline_processing.html#ft_outline","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; This structure is used to describe an outline to the scan-line converter.","title":"FT_Outline"},{"location":"ft2-outline_processing.html#ft_outline_new","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_New ( FT_Library library, FT_UInt numPoints, FT_Int numContours, FT_Outline *anoutline ); Create a new outline of a given size.","title":"FT_Outline_New"},{"location":"ft2-outline_processing.html#ft_outline_done","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Done ( FT_Library library, FT_Outline * outline ); Destroy an outline created with FT_Outline_New .","title":"FT_Outline_Done"},{"location":"ft2-outline_processing.html#ft_outline_copy","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Copy ( const FT_Outline * source, FT_Outline *target ); Copy an outline into another one. Both objects must have the same sizes (number of points number of contours) when this function is called.","title":"FT_Outline_Copy"},{"location":"ft2-outline_processing.html#ft_outline_translate","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Translate ( const FT_Outline * outline, FT_Pos xOffset, FT_Pos yOffset ); Apply a simple translation to the points of an outline.","title":"FT_Outline_Translate"},{"location":"ft2-outline_processing.html#ft_outline_transform","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Transform ( const FT_Outline * outline, const FT_Matrix * matrix ); Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc.","title":"FT_Outline_Transform"},{"location":"ft2-outline_processing.html#ft_outline_embolden","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Embolden ( FT_Outline * outline, FT_Pos strength ); 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.","title":"FT_Outline_Embolden"},{"location":"ft2-outline_processing.html#ft_outline_emboldenxy","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_EmboldenXY ( FT_Outline * outline, FT_Pos xstrength, FT_Pos ystrength ); Embolden an outline. The new outline will be xstrength pixels wider and ystrength pixels higher. Otherwise, it is similar to FT_Outline_Embolden , which uses the same strength in both directions.","title":"FT_Outline_EmboldenXY"},{"location":"ft2-outline_processing.html#ft_outline_reverse","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Reverse ( FT_Outline * outline ); Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs.","title":"FT_Outline_Reverse"},{"location":"ft2-outline_processing.html#ft_outline_check","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Check ( FT_Outline * outline ); Check the contents of an outline descriptor.","title":"FT_Outline_Check"},{"location":"ft2-outline_processing.html#ft_outline_get_cbox","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( void ) FT_Outline_Get_CBox ( const FT_Outline * outline, FT_BBox *acbox ); Return an outline's control box . The control box encloses all the outline's points, including Bezier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bezier 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.","title":"FT_Outline_Get_CBox"},{"location":"ft2-outline_processing.html#ft_outline_get_bbox","text":"Defined in FT_BBOX_H (freetype/ftbbox.h). FT_EXPORT( FT_Error ) FT_Outline_Get_BBox ( FT_Outline * outline, FT_BBox *abbox ); Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm that returns very quickly when the two boxes coincide. Otherwise, the outline Bezier arcs are traversed to extract their extrema.","title":"FT_Outline_Get_BBox"},{"location":"ft2-outline_processing.html#ft_outline_get_bitmap","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Get_Bitmap ( FT_Library library, FT_Outline * outline, const FT_Bitmap *abitmap ); Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.","title":"FT_Outline_Get_Bitmap"},{"location":"ft2-outline_processing.html#ft_outline_render","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Render ( FT_Library library, FT_Outline * outline, FT_Raster_Params * params ); Render an outline within a bitmap using the current scan-convert.","title":"FT_Outline_Render"},{"location":"ft2-outline_processing.html#ft_outline_decompose","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Error ) FT_Outline_Decompose ( FT_Outline * outline, const FT_Outline_Funcs * func_interface, void * user ); Walk over an outline's structure to decompose it into individual segments and Bezier arcs. This function also emits move to operations to indicate the start of new contours in the outline.","title":"FT_Outline_Decompose"},{"location":"ft2-outline_processing.html#ft_outline_funcs","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Beziers.","title":"FT_Outline_Funcs"},{"location":"ft2-outline_processing.html#ft_outline_movetofunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_MoveToFunc )( const FT_Vector * to, void * user ); # define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc 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.","title":"FT_Outline_MoveToFunc"},{"location":"ft2-outline_processing.html#ft_outline_linetofunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_LineToFunc )( const FT_Vector * to, void * user ); # define FT_Outline_LineTo_Func FT_Outline_LineToFunc 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.","title":"FT_Outline_LineToFunc"},{"location":"ft2-outline_processing.html#ft_outline_conictofunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Outline_ConicToFunc )( const FT_Vector * control, const FT_Vector * to, void * user ); # define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc A function pointer type used to describe the signature of a conic to function during outline walking or decomposition. A conic to is emitted to indicate a second-order Bezier arc in the outline.","title":"FT_Outline_ConicToFunc"},{"location":"ft2-outline_processing.html#ft_outline_cubictofunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). 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 A function pointer type used to describe the signature of a cubic to function during outline walking or decomposition. A cubic to is emitted to indicate a third-order Bezier arc.","title":"FT_Outline_CubicToFunc"},{"location":"ft2-outline_processing.html#ft_orientation","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). 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 ; 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.","title":"FT_Orientation"},{"location":"ft2-outline_processing.html#ft_outline_get_orientation","text":"Defined in FT_OUTLINE_H (freetype/ftoutln.h). FT_EXPORT( FT_Orientation ) FT_Outline_Get_Orientation ( FT_Outline * outline ); This function analyzes a glyph outline and tries to compute its fill orientation (see FT_Orientation ). This is done by integrating the total area covered by the outline. The positive integral corresponds to the clockwise orientation and FT_ORIENTATION_POSTSCRIPT is returned. The negative integral corresponds to the counter-clockwise orientation and FT_ORIENTATION_TRUETYPE is returned. Note that this will return FT_ORIENTATION_TRUETYPE for empty outlines.","title":"FT_Outline_Get_Orientation"},{"location":"ft2-outline_processing.html#ft_outline_xxx","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). # define FT_OUTLINE_NONE 0x0 # define FT_OUTLINE_OWNER 0x1 # define FT_OUTLINE_EVEN_ODD_FILL 0x2 # define FT_OUTLINE_REVERSE_FILL 0x4 # define FT_OUTLINE_IGNORE_DROPOUTS 0x8 # define FT_OUTLINE_SMART_DROPOUTS 0x10 # define FT_OUTLINE_INCLUDE_STUBS 0x20 # define FT_OUTLINE_HIGH_PRECISION 0x100 # define FT_OUTLINE_SINGLE_PASS 0x200 /* these constants are deprecated; use the corresponding */ /* ` FT_OUTLINE_XXX ` values instead */ # define ft_outline_none FT_OUTLINE_NONE # define ft_outline_owner FT_OUTLINE_OWNER # define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL # define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL # define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS # define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION # define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS A list of bit-field constants used for the flags in an outline's flags field.","title":"FT_OUTLINE_XXX"},{"location":"ft2-parameter_tags.html","text":"FreeType Docs Controlling FreeType Modules Parameter Tags Parameter Tags Synopsis This section contains macros for the FT_Parameter structure that are used with various functions to activate some special functionality or different behaviour of various components of FreeType. FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY # define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \\ FT_MAKE_TAG ( 'i', 'g', 'p', 'f' ) /* this constant is deprecated */ # define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \\ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY A tag for FT_Parameter to make FT_Open_Face ignore typographic family names in the name table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction. since 2.8 FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY # define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \\ FT_MAKE_TAG ( 'i', 'g', 'p', 's' ) /* this constant is deprecated */ # define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \\ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY A tag for FT_Parameter to make FT_Open_Face ignore typographic subfamily names in the name table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction. since 2.8 FT_PARAM_TAG_INCREMENTAL # define FT_PARAM_TAG_INCREMENTAL \\ FT_MAKE_TAG ( 'i', 'n', 'c', 'r' ) An FT_Parameter tag to be used with FT_Open_Face to indicate incremental glyph loading. FT_PARAM_TAG_LCD_FILTER_WEIGHTS # define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \\ FT_MAKE_TAG ( 'l', 'c', 'd', 'f' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding argument specifies the five LCD filter weights for a given face (if using FT_LOAD_TARGET_LCD , for example), overriding the global default values or the values set up with FT_Library_SetLcdFilterWeights . since 2.8 FT_PARAM_TAG_RANDOM_SEED # define FT_PARAM_TAG_RANDOM_SEED \\ FT_MAKE_TAG ( 's', 'e', 'e', 'd' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding 32bit signed integer argument overrides the font driver's random seed value with a face-specific one; see random-seed . since 2.8 FT_PARAM_TAG_STEM_DARKENING # define FT_PARAM_TAG_STEM_DARKENING \\ FT_MAKE_TAG ( 'd', 'a', 'r', 'k' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding Boolean argument specifies whether to apply stem darkening, overriding the global default values or the values set up with FT_Property_Set (see no-stem-darkening ). This is a passive setting that only takes effect if the font driver or autohinter honors it, which the CFF, Type 1, and CID drivers always do, but the autohinter only in light hinting mode (as of version 2.9). since 2.8 FT_PARAM_TAG_UNPATENTED_HINTING # define FT_PARAM_TAG_UNPATENTED_HINTING \\ FT_MAKE_TAG ( 'u', 'n', 'p', 'a' ) Deprecated, no effect. Previously: A constant used as the tag of an FT_Parameter structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by FT_Open_Face .","title":"Parameter Tags"},{"location":"ft2-parameter_tags.html#parameter-tags","text":"","title":"Parameter Tags"},{"location":"ft2-parameter_tags.html#synopsis","text":"This section contains macros for the FT_Parameter structure that are used with various functions to activate some special functionality or different behaviour of various components of FreeType.","title":"Synopsis"},{"location":"ft2-parameter_tags.html#ft_param_tag_ignore_typographic_family","text":"# define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \\ FT_MAKE_TAG ( 'i', 'g', 'p', 'f' ) /* this constant is deprecated */ # define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \\ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY A tag for FT_Parameter to make FT_Open_Face ignore typographic family names in the name table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.","title":"FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY"},{"location":"ft2-parameter_tags.html#ft_param_tag_ignore_typographic_subfamily","text":"# define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \\ FT_MAKE_TAG ( 'i', 'g', 'p', 's' ) /* this constant is deprecated */ # define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \\ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY A tag for FT_Parameter to make FT_Open_Face ignore typographic subfamily names in the name table (introduced in OpenType version 1.4). Use this for backward compatibility with legacy systems that have a four-faces-per-family restriction.","title":"FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY"},{"location":"ft2-parameter_tags.html#ft_param_tag_incremental","text":"# define FT_PARAM_TAG_INCREMENTAL \\ FT_MAKE_TAG ( 'i', 'n', 'c', 'r' ) An FT_Parameter tag to be used with FT_Open_Face to indicate incremental glyph loading.","title":"FT_PARAM_TAG_INCREMENTAL"},{"location":"ft2-parameter_tags.html#ft_param_tag_lcd_filter_weights","text":"# define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \\ FT_MAKE_TAG ( 'l', 'c', 'd', 'f' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding argument specifies the five LCD filter weights for a given face (if using FT_LOAD_TARGET_LCD , for example), overriding the global default values or the values set up with FT_Library_SetLcdFilterWeights .","title":"FT_PARAM_TAG_LCD_FILTER_WEIGHTS"},{"location":"ft2-parameter_tags.html#ft_param_tag_random_seed","text":"# define FT_PARAM_TAG_RANDOM_SEED \\ FT_MAKE_TAG ( 's', 'e', 'e', 'd' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding 32bit signed integer argument overrides the font driver's random seed value with a face-specific one; see random-seed .","title":"FT_PARAM_TAG_RANDOM_SEED"},{"location":"ft2-parameter_tags.html#ft_param_tag_stem_darkening","text":"# define FT_PARAM_TAG_STEM_DARKENING \\ FT_MAKE_TAG ( 'd', 'a', 'r', 'k' ) An FT_Parameter tag to be used with FT_Face_Properties . The corresponding Boolean argument specifies whether to apply stem darkening, overriding the global default values or the values set up with FT_Property_Set (see no-stem-darkening ). This is a passive setting that only takes effect if the font driver or autohinter honors it, which the CFF, Type 1, and CID drivers always do, but the autohinter only in light hinting mode (as of version 2.9).","title":"FT_PARAM_TAG_STEM_DARKENING"},{"location":"ft2-parameter_tags.html#ft_param_tag_unpatented_hinting","text":"# define FT_PARAM_TAG_UNPATENTED_HINTING \\ FT_MAKE_TAG ( 'u', 'n', 'p', 'a' ) Deprecated, no effect. Previously: A constant used as the tag of an FT_Parameter structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by FT_Open_Face .","title":"FT_PARAM_TAG_UNPATENTED_HINTING"},{"location":"ft2-pcf_driver.html","text":"FreeType Docs Controlling FreeType Modules The PCF driver The PCF driver Synopsis While FreeType's PCF driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . Right now, there is a single property no-long-family-names available if FreeType is compiled with PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. The PCF driver's module name is pcf .","title":"The PCF driver"},{"location":"ft2-pcf_driver.html#the-pcf-driver","text":"","title":"The PCF driver"},{"location":"ft2-pcf_driver.html#synopsis","text":"While FreeType's PCF driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . Right now, there is a single property no-long-family-names available if FreeType is compiled with PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. The PCF driver's module name is pcf .","title":"Synopsis"},{"location":"ft2-pfr_fonts.html","text":"FreeType Docs Format-Specific API PFR Fonts PFR Fonts Synopsis This section contains the declaration of PFR-specific functions. FT_Get_PFR_Metrics Defined in FT_PFR_H (freetype/ftpfr.h). 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 ); Return the outline and metrics resolutions of a given PFR face. input face Handle to the input face. It can be a non-PFR face. output aoutline_resolution Outline resolution. This is equivalent to face- units_per_EM for non-PFR fonts. Optional (parameter can be NULL ). ametrics_resolution Metrics resolution. This is equivalent to outline_resolution for non-PFR fonts. Optional (parameter can be NULL ). ametrics_x_scale A 16.16 fixed-point number used to scale distance expressed in metrics units to device subpixels. 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_Get_PFR_Kerning Defined in FT_PFR_H (freetype/ftpfr.h). FT_EXPORT( FT_Error ) FT_Get_PFR_Kerning ( FT_Face face, FT_UInt left, FT_UInt right, FT_Vector *avector ); 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 subpixels. FT_Get_PFR_Advance Defined in FT_PFR_H (freetype/ftpfr.h). FT_EXPORT( FT_Error ) FT_Get_PFR_Advance ( FT_Face face, FT_UInt gindex, FT_Pos *aadvance ); 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 subpixels (i.e., 1/64 th of pixels).","title":"PFR Fonts"},{"location":"ft2-pfr_fonts.html#pfr-fonts","text":"","title":"PFR Fonts"},{"location":"ft2-pfr_fonts.html#synopsis","text":"This section contains the declaration of PFR-specific functions.","title":"Synopsis"},{"location":"ft2-pfr_fonts.html#ft_get_pfr_metrics","text":"Defined in FT_PFR_H (freetype/ftpfr.h). 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 ); Return the outline and metrics resolutions of a given PFR face.","title":"FT_Get_PFR_Metrics"},{"location":"ft2-pfr_fonts.html#ft_get_pfr_kerning","text":"Defined in FT_PFR_H (freetype/ftpfr.h). FT_EXPORT( FT_Error ) FT_Get_PFR_Kerning ( FT_Face face, FT_UInt left, FT_UInt right, FT_Vector *avector ); 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 .","title":"FT_Get_PFR_Kerning"},{"location":"ft2-pfr_fonts.html#ft_get_pfr_advance","text":"Defined in FT_PFR_H (freetype/ftpfr.h). FT_EXPORT( FT_Error ) FT_Get_PFR_Advance ( FT_Face face, FT_UInt gindex, FT_Pos *aadvance ); Return a given glyph advance, expressed in original metrics units, from a PFR font.","title":"FT_Get_PFR_Advance"},{"location":"ft2-properties.html","text":"FreeType Docs Controlling FreeType Modules Driver properties Driver properties Synopsis Driver modules can be controlled by setting and unsetting properties, using the functions FT_Property_Set and FT_Property_Get . This section documents the available properties, together with auxiliary macros and structures. FT_HINTING_XXX Defined in FT_DRIVER_H (freetype/ftdriver.h). # define FT_HINTING_FREETYPE 0 # define FT_HINTING_ADOBE 1 /* these constants (introduced in 2.4.12) are deprecated */ # define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE # define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE A list of constants used for the hinting-engine property to select the hinting engine for CFF, Type 1, and CID fonts. values FT_HINTING_FREETYPE Use the old FreeType hinting engine. FT_HINTING_ADOBE Use the hinting engine contributed by Adobe. since 2.9 hinting-engine Thanks to Adobe, which contributed a new hinting (and parsing) engine, an application can select between freetype and adobe if compiled with CFF_CONFIG_OPTION_OLD_ENGINE . If this configuration macro isn't defined, hinting-engine does nothing. The same holds for the Type 1 and CID modules if compiled with T1_CONFIG_OPTION_OLD_ENGINE . For the cff module, the default engine is freetype if CFF_CONFIG_OPTION_OLD_ENGINE is defined, and adobe otherwise. For both the type1 and t1cid modules, the default engine is freetype if T1_CONFIG_OPTION_OLD_ENGINE is defined, and adobe otherwise. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable (using values adobe or freetype ). example The following example code demonstrates how to select Adobe's hinting engine for the cff module (omitting the error handling). FT_Library library; FT_UInt hinting_engine = FT_HINTING_ADOBE; FT_Init_FreeType( library ); FT_Property_Set( library, cff , hinting-engine , hinting_engine ); since 2.4.12 (for cff module) 2.9 (for type1 and t1cid modules) no-stem-darkening All glyphs that pass through the auto-hinter will be emboldened unless this property is set to TRUE. The same is true for the CFF, Type 1, and CID font modules if the Adobe engine is selected (which is the default). Stem darkening emboldens glyphs at smaller sizes to make them more readable on common low-DPI screens when using linear alpha blending and gamma correction, see FT_Render_Glyph . When not using linear alpha blending and gamma correction, glyphs will appear heavy and fuzzy! Gamma correction essentially lightens fonts since shades of grey are shifted to higher pixel values (= higher brightness) to match the original intention to the reality of our screens. The side-effect is that glyphs thin out . Mac OS X and Adobe's proprietary font rendering library implement a counter-measure: stem darkening at smaller sizes where shades of gray dominate. By emboldening a glyph slightly in relation to its pixel size, individual pixels get higher coverage of filled-in outlines and are therefore blacker . This counteracts the thinning out of glyphs, making text remain readable at smaller sizes. By default, the Adobe engines for CFF, Type 1, and CID fonts darken stems at smaller sizes, regardless of hinting, to enhance contrast. Setting this property, stem darkening gets switched off. For the auto-hinter, stem-darkening is experimental currently and thus switched off by default (this is, no-stem-darkening is set to TRUE by default). Total consistency with the CFF driver is not achieved right now because the emboldening method differs and glyphs must be scaled down on the Y-axis to keep outline points inside their precomputed blue zones. The smaller the size (especially 9ppem and down), the higher the loss of emboldening versus the CFF driver. Note that stem darkening is never applied if FT_LOAD_NO_SCALE is set. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable (using values 1 and 0 for on and off , respectively). It can also be set per face using FT_Face_Properties with FT_PARAM_TAG_STEM_DARKENING . example FT_Library library; FT_Bool no_stem_darkening = TRUE; FT_Init_FreeType( library ); FT_Property_Set( library, cff , no-stem-darkening , no_stem_darkening ); since 2.4.12 (for cff module) 2.6.2 (for autofitter module) 2.9 (for type1 and t1cid modules) darkening-parameters By default, the Adobe hinting engine, as used by the CFF, Type 1, and CID font drivers, darkens stems as follows (if the no-stem-darkening property isn't set): stem width = 0.5px: darkening amount = 0.4px stem width = 1px: darkening amount = 0.275px stem width = 1.667px: darkening amount = 0.275px stem width = 2.333px: darkening amount = 0px and piecewise linear in-between. At configuration time, these four control points can be set with the macro CFF_CONFIG_OPTION_DARKENING_PARAMETERS ; the CFF, Type 1, and CID drivers share these values. At runtime, the control points can be changed using the darkening-parameters property (see the example below that demonstrates this for the Type 1 driver). The x values give the stem width, and the y values the darkening amount. The unit is 1000 th of pixels. All coordinate values must be positive; the x values must be monotonically increasing; the y values must be monotonically decreasing and smaller than or equal to 500 (corresponding to half a pixel); the slope of each linear piece must be shallower than -1 (e.g., -.4). The auto-hinter provides this property, too, as an experimental feature. See no-stem-darkening for more. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable, using eight comma-separated integers without spaces. Here the above example, using \\ to break the line for readability. FREETYPE_PROPERTIES=\\ type1:darkening-parameters=500,300,1000,200,1500,100,2000,0 example FT_Library library; FT_Int darken_params[8] = { 500, 300, // x1, y1 1000, 200, // x2, y2 1500, 100, // x3, y3 2000, 0 }; // x4, y4 FT_Init_FreeType( library ); FT_Property_Set( library, type1 , darkening-parameters , darken_params ); since 2.5.1 (for cff module) 2.6.2 (for autofitter module) 2.9 (for type1 and t1cid modules) random-seed By default, the seed value for the CFF random operator and the similar 0 28 callothersubr pop command for the Type 1 and CID drivers is set to a random value. However, mainly for debugging purposes, it is often necessary to use a known value as a seed so that the pseudo-random number sequences generated by random are repeatable. The random-seed property does that. Its argument is a signed 32bit integer; if the value is zero or negative, the seed given by the intitialRandomSeed private DICT operator in a CFF file gets used (or a default value if there is no such operator). If the value is positive, use it instead of initialRandomSeed , which is consequently ignored. note This property can be set via the FREETYPE_PROPERTIES environment variable. It can also be set per face using FT_Face_Properties with FT_PARAM_TAG_RANDOM_SEED . since 2.8 (for cff module) 2.9 (for type1 and t1cid modules) no-long-family-names If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling FreeType, the PCF driver constructs long family names. There are many PCF fonts just called Fixed which look completely different, and which have nothing to do with each other. When selecting Fixed in KDE or Gnome one gets results that appear rather random, the style changes often if one changes the size and one cannot select some fonts at all. The improve this situation, the PCF module prepends the foundry name (plus a space) to the family name. It also checks whether there are wide characters; all put together, family names like Sony Fixed or Misc Fixed Wide are constructed. If no-long-family-names is set, this feature gets switched off. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable (using values 1 and 0 for on and off , respectively). example FT_Library library; FT_Bool no_long_family_names = TRUE; FT_Init_FreeType( library ); FT_Property_Set( library, pcf , no-long-family-names , no_long_family_names ); since 2.8 TT_INTERPRETER_VERSION_XXX Defined in FT_DRIVER_H (freetype/ftdriver.h). # define TT_INTERPRETER_VERSION_35 35 # define TT_INTERPRETER_VERSION_38 38 # define TT_INTERPRETER_VERSION_40 40 A list of constants used for the interpreter-version property to select the hinting engine for Truetype fonts. The numeric value in the constant names represents the version number as returned by the GETINFO bytecode instruction. values TT_INTERPRETER_VERSION_35 Version 35 corresponds to MS rasterizer v.1.7 as used e.g. in Windows 98; only grayscale and B/W rasterizing is supported. TT_INTERPRETER_VERSION_38 Version 38 corresponds to MS rasterizer v.1.9; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in the Internet Explorer 9 running on Windows 7). It is used in FreeType to select the Infinality subpixel hinting code. The code may be removed in a future version. TT_INTERPRETER_VERSION_40 Version 40 corresponds to MS rasterizer v.2.1; it is roughly equivalent to the hinting provided by DirectWrite ClearType (as can be found, for example, in Microsoft's Edge Browser on Windows 10). It is used in FreeType to select the minimal subpixel hinting code, a stripped-down and higher performance version of the Infinality code. note This property controls the behaviour of the bytecode interpreter and thus how outlines get hinted. It does not control how glyph get rasterized! In particular, it does not control subpixel color filtering. If FreeType has not been compiled with the configuration option TT_CONFIG_OPTION_SUBPIXEL_HINTING , selecting version 38 or 40 causes an FT_Err_Unimplemented_Feature error. Depending on the graphics framework, Microsoft uses different bytecode and rendering engines. As a consequence, the version numbers returned by a call to the GETINFO bytecode instruction are more convoluted than desired. Here are two tables that try to shed some light on the possible values for the MS rasterizer engine, together with the additional features introduced by it. GETINFO framework version feature ------------------------------------------------------------------- 3 GDI (Win 3.1), v1.0 16-bit, first version TrueImage 33 GDI (Win NT 3.1), v1.5 32-bit HP Laserjet 34 GDI (Win 95) v1.6 font smoothing, new SCANTYPE opcode 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET bits in composite glyphs 36 MGDI (Win CE 2) v1.6+ classic ClearType 37 GDI (XP and later), v1.8 ClearType GDI+ old (before Vista) 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, WPF Y-direction ClearType, additional error checking 39 DWrite (before Win 8) v2.0 subpixel ClearType flags in GETINFO opcode, bug fixes 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag DWrite (Win 8) in GETINFO opcode, Gray ClearType The version field gives a rough orientation only, since some applications provided certain features much earlier (as an example, Microsoft Reader used subpixel and Y-direction ClearType already in Windows 2000). Similarly, updates to a given framework might include improved hinting support. version sampling rendering comment x y x y -------------------------------------------------------------- v1.0 normal normal B/W B/W bi-level v1.6 high high gray gray grayscale v1.8 high normal color-filter B/W (GDI) ClearType v1.9 high high color-filter gray Color ClearType v2.1 high normal gray B/W Gray ClearType v2.1 high high gray gray Gray ClearType Color and Gray ClearType are the two available variants of Y-direction ClearType , meaning grayscale rasterization along the Y-direction; the name used in the TrueType specification for this feature is symmetric smoothing . Classic ClearType is the original algorithm used before introducing a modified version in Win XP. Another name for v1.6's grayscale rendering is font smoothing , and Color ClearType is sometimes also called DWrite ClearType . To differentiate between today's Color ClearType and the earlier ClearType variant with B/W rendering along the vertical axis, the latter is sometimes called GDI ClearType . Normal and high sampling describe the (virtual) resolution to access the rasterized outline after the hinting process. Normal means 1 sample per grid line (i.e., B/W). In the current Microsoft implementation, high means an extra virtual resolution of 16x16 (or 16x1) grid lines per pixel for bytecode instructions like MIRP . After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid lines for color filtering if Color ClearType is activated. Note that Gray ClearType is essentially the same as v1.6's grayscale rendering. However, the GETINFO instruction handles it differently: v1.6 returns bit 12 (hinting for grayscale), while v2.1 returns bits 13 (hinting for ClearType), 18 (symmetrical smoothing), and 19 (Gray ClearType). Also, this mode respects bits 2 and 3 for the version 1 gasp table exclusively (like Color ClearType), while v1.6 only respects the values of version 0 (bits 0 and 1). Keep in mind that the features of the above interpreter versions might not map exactly to FreeType features or behavior because it is a fundamentally different library with different internals. interpreter-version Currently, three versions are available, two representing the bytecode interpreter with subpixel hinting support (old Infinality code and new stripped-down and higher performance minimal code) and one without, respectively. The default is subpixel support if TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support otherwise (since it isn't available then). If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering (except if native ClearType is selected by the font). Microsoft's main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) tweaks in Microsoft's interpreter. Details on subpixel hinting and some of the necessary tweaks can be found in Greg Hitchcock's whitepaper at https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx . Note that FreeType currently doesn't really subpixel hint (6x1, 6x2, or 6x5 supersampling) like discussed in the paper. Depending on the chosen interpreter, it simply ignores instructions on vertical stems to arrive at very similar results. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable (using values 35 , 38 , or 40 ). example The following example code demonstrates how to deactivate subpixel hinting (omitting the error handling). FT_Library library; FT_Face face; FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; FT_Init_FreeType( library ); FT_Property_Set( library, truetype , interpreter-version , interpreter_version ); since 2.5 glyph-to-script-map Experimental only The auto-hinter provides various script modules to hint glyphs. Examples of supported scripts are Latin or CJK. Before a glyph is auto-hinted, the Unicode character map of the font gets examined, and the script is then determined based on Unicode character ranges, see below. OpenType fonts, however, often provide much more glyphs than character codes (small caps, superscripts, ligatures, swashes, etc.), to be controlled by so-called features . Handling OpenType features can be quite complicated and thus needs a separate library on top of FreeType. The mapping between glyph indices and scripts (in the auto-hinter sense, see the FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array with num_glyphs elements, as found in the font's FT_Face structure. The glyph-to-script-map property returns a pointer to this array, which can be modified as needed. Note that the modification should happen before the first glyph gets processed by the auto-hinter so that the global analysis of the font shapes actually uses the modified mapping. example The following example code demonstrates how to access it (omitting the error handling). FT_Library library; FT_Face face; FT_Prop_GlyphToScriptMap prop; FT_Init_FreeType( library ); FT_New_Face( library, foo.ttf , 0, face ); prop.face = face; FT_Property_Get( library, autofitter , glyph-to-script-map , prop ); // adjust `prop.map as needed right here FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); since 2.4.11 FT_AUTOHINTER_SCRIPT_XXX Defined in FT_DRIVER_H (freetype/ftdriver.h). # define FT_AUTOHINTER_SCRIPT_NONE 0 # define FT_AUTOHINTER_SCRIPT_LATIN 1 # define FT_AUTOHINTER_SCRIPT_CJK 2 # define FT_AUTOHINTER_SCRIPT_INDIC 3 Experimental only A list of constants used for the glyph-to-script-map property to specify the script submodule the auto-hinter should use for hinting a particular glyph. values FT_AUTOHINTER_SCRIPT_NONE Don't auto-hint this glyph. FT_AUTOHINTER_SCRIPT_LATIN Apply the latin auto-hinter. For the auto-hinter, latin is a very broad term, including Cyrillic and Greek also since characters from those scripts share the same design constraints. By default, characters from the following Unicode ranges are assigned to this submodule. U+0020 - U+007F // Basic Latin (no control characters) U+00A0 - U+00FF // Latin-1 Supplement (no control characters) U+0100 - U+017F // Latin Extended-A U+0180 - U+024F // Latin Extended-B U+0250 - U+02AF // IPA Extensions U+02B0 - U+02FF // Spacing Modifier Letters U+0300 - U+036F // Combining Diacritical Marks U+0370 - U+03FF // Greek and Coptic U+0400 - U+04FF // Cyrillic U+0500 - U+052F // Cyrillic Supplement U+1D00 - U+1D7F // Phonetic Extensions U+1D80 - U+1DBF // Phonetic Extensions Supplement U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement U+1E00 - U+1EFF // Latin Extended Additional U+1F00 - U+1FFF // Greek Extended U+2000 - U+206F // General Punctuation U+2070 - U+209F // Superscripts and Subscripts U+20A0 - U+20CF // Currency Symbols U+2150 - U+218F // Number Forms U+2460 - U+24FF // Enclosed Alphanumerics U+2C60 - U+2C7F // Latin Extended-C U+2DE0 - U+2DFF // Cyrillic Extended-A U+2E00 - U+2E7F // Supplemental Punctuation U+A640 - U+A69F // Cyrillic Extended-B U+A720 - U+A7FF // Latin Extended-D U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement FT_AUTOHINTER_SCRIPT_CJK Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old Vietnamese, and some other scripts. By default, characters from the following Unicode ranges are assigned to this submodule. U+1100 - U+11FF // Hangul Jamo U+2E80 - U+2EFF // CJK Radicals Supplement U+2F00 - U+2FDF // Kangxi Radicals U+2FF0 - U+2FFF // Ideographic Description Characters U+3000 - U+303F // CJK Symbols and Punctuation U+3040 - U+309F // Hiragana U+30A0 - U+30FF // Katakana U+3100 - U+312F // Bopomofo U+3130 - U+318F // Hangul Compatibility Jamo U+3190 - U+319F // Kanbun U+31A0 - U+31BF // Bopomofo Extended U+31C0 - U+31EF // CJK Strokes U+31F0 - U+31FF // Katakana Phonetic Extensions U+3200 - U+32FF // Enclosed CJK Letters and Months U+3300 - U+33FF // CJK Compatibility U+3400 - U+4DBF // CJK Unified Ideographs Extension A U+4DC0 - U+4DFF // Yijing Hexagram Symbols U+4E00 - U+9FFF // CJK Unified Ideographs U+A960 - U+A97F // Hangul Jamo Extended-A U+AC00 - U+D7AF // Hangul Syllables U+D7B0 - U+D7FF // Hangul Jamo Extended-B U+F900 - U+FAFF // CJK Compatibility Ideographs U+FE10 - U+FE1F // Vertical forms U+FE30 - U+FE4F // CJK Compatibility Forms U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms U+1B000 - U+1B0FF // Kana Supplement U+1D300 - U+1D35F // Tai Xuan Hing Symbols U+1F200 - U+1F2FF // Enclosed Ideographic Supplement U+20000 - U+2A6DF // CJK Unified Ideographs Extension B U+2A700 - U+2B73F // CJK Unified Ideographs Extension C U+2B740 - U+2B81F // CJK Unified Ideographs Extension D U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement FT_AUTOHINTER_SCRIPT_INDIC Apply the indic auto-hinter, covering all major scripts from the Indian sub-continent and some other related scripts like Thai, Lao, or Tibetan. By default, characters from the following Unicode ranges are assigned to this submodule. U+0900 - U+0DFF // Indic Range U+0F00 - U+0FFF // Tibetan U+1900 - U+194F // Limbu U+1B80 - U+1BBF // Sundanese U+A800 - U+A82F // Syloti Nagri U+ABC0 - U+ABFF // Meetei Mayek U+11800 - U+118DF // Sharada Note that currently Indic support is rudimentary only, missing blue zone support. since 2.4.11 FT_Prop_GlyphToScriptMap Defined in FT_DRIVER_H (freetype/ftdriver.h). typedef struct FT_Prop_GlyphToScriptMap_ { FT_Face face; FT_UShort * map; } FT_Prop_GlyphToScriptMap ; Experimental only The data exchange structure for the glyph-to-script-map property. since 2.4.11 fallback-script Experimental only If no auto-hinter script module can be assigned to a glyph, a fallback script gets assigned to it (see also the glyph-to-script-map property). By default, this is FT_AUTOHINTER_SCRIPT_CJK . Using the fallback-script property, this fallback value can be changed. note This property can be used with FT_Property_Get also. It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the fallback script value gets triggered either by setting or reading a face-specific property like glyph-to-script-map , or by auto-hinting any glyph from that face. In particular, if you have already created an FT_Face structure but not loaded any glyph (using the auto-hinter), a change of the fallback script will affect this face. example FT_Library library; FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; FT_Init_FreeType( library ); FT_Property_Set( library, autofitter , fallback-script , fallback_script ); since 2.4.11 default-script Experimental only If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a dlig feature, containing the combination of the characters T , E , and L to form a TEL ligature. By default, this is FT_AUTOHINTER_SCRIPT_LATIN . Using the default-script property, this default value can be changed. note This property can be used with FT_Property_Get also. It's important to use the right timing for changing this value: The creation of the glyph-to-script map that eventually uses the default script value gets triggered either by setting or reading a face-specific property like glyph-to-script-map , or by auto-hinting any glyph from that face. In particular, if you have already created an FT_Face structure but not loaded any glyph (using the auto-hinter), a change of the default script will affect this face. example FT_Library library; FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; FT_Init_FreeType( library ); FT_Property_Set( library, autofitter , default-script , default_script ); since 2.5.3 increase-x-height For ppem values in the range 6 = ppem = increase-x-height , round up the font's x height much more often than normally. If the value is set to 0, which is the default, this feature is switched off. Use this property to improve the legibility of small font sizes if necessary. note This property can be used with FT_Property_Get also. Set this value right after calling FT_Set_Char_Size , but before loading any glyph (using the auto-hinter). example FT_Library library; FT_Face face; FT_Prop_IncreaseXHeight prop; FT_Init_FreeType( library ); FT_New_Face( library, foo.ttf , 0, face ); FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); prop.face = face; prop.limit = 14; FT_Property_Set( library, autofitter , increase-x-height , prop ); since 2.4.11 FT_Prop_IncreaseXHeight Defined in FT_DRIVER_H (freetype/ftdriver.h). typedef struct FT_Prop_IncreaseXHeight_ { FT_Face face; FT_UInt limit; } FT_Prop_IncreaseXHeight ; The data exchange structure for the increase-x-height property. warping Experimental only If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to activate the warp hinting code in the auto-hinter, this property switches warping on and off. Warping only works in normal auto-hinting mode replacing it. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored. By default, warping is off. note This property can be used with FT_Property_Get also. This property can be set via the FREETYPE_PROPERTIES environment variable (using values 1 and 0 for on and off , respectively). The warping code can also change advance widths. Have a look at the lsb_delta and rsb_delta fields in the FT_GlyphSlotRec structure for details on improving inter-glyph distances while rendering. Since warping is a global property of the auto-hinter it is best to change its value before rendering any face. Otherwise, you should reload all faces that get auto-hinted in normal hinting mode. example This example shows how to switch on warping (omitting the error handling). FT_Library library; FT_Bool warping = 1; FT_Init_FreeType( library ); FT_Property_Set( library, autofitter , warping , warping ); since 2.6","title":"Driver properties"},{"location":"ft2-properties.html#driver-properties","text":"","title":"Driver properties"},{"location":"ft2-properties.html#synopsis","text":"Driver modules can be controlled by setting and unsetting properties, using the functions FT_Property_Set and FT_Property_Get . This section documents the available properties, together with auxiliary macros and structures.","title":"Synopsis"},{"location":"ft2-properties.html#ft_hinting_xxx","text":"Defined in FT_DRIVER_H (freetype/ftdriver.h). # define FT_HINTING_FREETYPE 0 # define FT_HINTING_ADOBE 1 /* these constants (introduced in 2.4.12) are deprecated */ # define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE # define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE A list of constants used for the hinting-engine property to select the hinting engine for CFF, Type 1, and CID fonts.","title":"FT_HINTING_XXX"},{"location":"ft2-properties.html#hinting-engine","text":"Thanks to Adobe, which contributed a new hinting (and parsing) engine, an application can select between freetype and adobe if compiled with CFF_CONFIG_OPTION_OLD_ENGINE . If this configuration macro isn't defined, hinting-engine does nothing. The same holds for the Type 1 and CID modules if compiled with T1_CONFIG_OPTION_OLD_ENGINE . For the cff module, the default engine is freetype if CFF_CONFIG_OPTION_OLD_ENGINE is defined, and adobe otherwise. For both the type1 and t1cid modules, the default engine is freetype if T1_CONFIG_OPTION_OLD_ENGINE is defined, and adobe otherwise.","title":"hinting-engine"},{"location":"ft2-properties.html#no-stem-darkening","text":"All glyphs that pass through the auto-hinter will be emboldened unless this property is set to TRUE. The same is true for the CFF, Type 1, and CID font modules if the Adobe engine is selected (which is the default). Stem darkening emboldens glyphs at smaller sizes to make them more readable on common low-DPI screens when using linear alpha blending and gamma correction, see FT_Render_Glyph . When not using linear alpha blending and gamma correction, glyphs will appear heavy and fuzzy! Gamma correction essentially lightens fonts since shades of grey are shifted to higher pixel values (= higher brightness) to match the original intention to the reality of our screens. The side-effect is that glyphs thin out . Mac OS X and Adobe's proprietary font rendering library implement a counter-measure: stem darkening at smaller sizes where shades of gray dominate. By emboldening a glyph slightly in relation to its pixel size, individual pixels get higher coverage of filled-in outlines and are therefore blacker . This counteracts the thinning out of glyphs, making text remain readable at smaller sizes. By default, the Adobe engines for CFF, Type 1, and CID fonts darken stems at smaller sizes, regardless of hinting, to enhance contrast. Setting this property, stem darkening gets switched off. For the auto-hinter, stem-darkening is experimental currently and thus switched off by default (this is, no-stem-darkening is set to TRUE by default). Total consistency with the CFF driver is not achieved right now because the emboldening method differs and glyphs must be scaled down on the Y-axis to keep outline points inside their precomputed blue zones. The smaller the size (especially 9ppem and down), the higher the loss of emboldening versus the CFF driver. Note that stem darkening is never applied if FT_LOAD_NO_SCALE is set.","title":"no-stem-darkening"},{"location":"ft2-properties.html#darkening-parameters","text":"By default, the Adobe hinting engine, as used by the CFF, Type 1, and CID font drivers, darkens stems as follows (if the no-stem-darkening property isn't set): stem width = 0.5px: darkening amount = 0.4px stem width = 1px: darkening amount = 0.275px stem width = 1.667px: darkening amount = 0.275px stem width = 2.333px: darkening amount = 0px and piecewise linear in-between. At configuration time, these four control points can be set with the macro CFF_CONFIG_OPTION_DARKENING_PARAMETERS ; the CFF, Type 1, and CID drivers share these values. At runtime, the control points can be changed using the darkening-parameters property (see the example below that demonstrates this for the Type 1 driver). The x values give the stem width, and the y values the darkening amount. The unit is 1000 th of pixels. All coordinate values must be positive; the x values must be monotonically increasing; the y values must be monotonically decreasing and smaller than or equal to 500 (corresponding to half a pixel); the slope of each linear piece must be shallower than -1 (e.g., -.4). The auto-hinter provides this property, too, as an experimental feature. See no-stem-darkening for more.","title":"darkening-parameters"},{"location":"ft2-properties.html#random-seed","text":"By default, the seed value for the CFF random operator and the similar 0 28 callothersubr pop command for the Type 1 and CID drivers is set to a random value. However, mainly for debugging purposes, it is often necessary to use a known value as a seed so that the pseudo-random number sequences generated by random are repeatable. The random-seed property does that. Its argument is a signed 32bit integer; if the value is zero or negative, the seed given by the intitialRandomSeed private DICT operator in a CFF file gets used (or a default value if there is no such operator). If the value is positive, use it instead of initialRandomSeed , which is consequently ignored.","title":"random-seed"},{"location":"ft2-properties.html#no-long-family-names","text":"If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling FreeType, the PCF driver constructs long family names. There are many PCF fonts just called Fixed which look completely different, and which have nothing to do with each other. When selecting Fixed in KDE or Gnome one gets results that appear rather random, the style changes often if one changes the size and one cannot select some fonts at all. The improve this situation, the PCF module prepends the foundry name (plus a space) to the family name. It also checks whether there are wide characters; all put together, family names like Sony Fixed or Misc Fixed Wide are constructed. If no-long-family-names is set, this feature gets switched off.","title":"no-long-family-names"},{"location":"ft2-properties.html#tt_interpreter_version_xxx","text":"Defined in FT_DRIVER_H (freetype/ftdriver.h). # define TT_INTERPRETER_VERSION_35 35 # define TT_INTERPRETER_VERSION_38 38 # define TT_INTERPRETER_VERSION_40 40 A list of constants used for the interpreter-version property to select the hinting engine for Truetype fonts. The numeric value in the constant names represents the version number as returned by the GETINFO bytecode instruction.","title":"TT_INTERPRETER_VERSION_XXX"},{"location":"ft2-properties.html#interpreter-version","text":"Currently, three versions are available, two representing the bytecode interpreter with subpixel hinting support (old Infinality code and new stripped-down and higher performance minimal code) and one without, respectively. The default is subpixel support if TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support otherwise (since it isn't available then). If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering (except if native ClearType is selected by the font). Microsoft's main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) tweaks in Microsoft's interpreter. Details on subpixel hinting and some of the necessary tweaks can be found in Greg Hitchcock's whitepaper at https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx . Note that FreeType currently doesn't really subpixel hint (6x1, 6x2, or 6x5 supersampling) like discussed in the paper. Depending on the chosen interpreter, it simply ignores instructions on vertical stems to arrive at very similar results.","title":"interpreter-version"},{"location":"ft2-properties.html#glyph-to-script-map","text":"Experimental only The auto-hinter provides various script modules to hint glyphs. Examples of supported scripts are Latin or CJK. Before a glyph is auto-hinted, the Unicode character map of the font gets examined, and the script is then determined based on Unicode character ranges, see below. OpenType fonts, however, often provide much more glyphs than character codes (small caps, superscripts, ligatures, swashes, etc.), to be controlled by so-called features . Handling OpenType features can be quite complicated and thus needs a separate library on top of FreeType. The mapping between glyph indices and scripts (in the auto-hinter sense, see the FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array with num_glyphs elements, as found in the font's FT_Face structure. The glyph-to-script-map property returns a pointer to this array, which can be modified as needed. Note that the modification should happen before the first glyph gets processed by the auto-hinter so that the global analysis of the font shapes actually uses the modified mapping.","title":"glyph-to-script-map"},{"location":"ft2-properties.html#ft_autohinter_script_xxx","text":"Defined in FT_DRIVER_H (freetype/ftdriver.h). # define FT_AUTOHINTER_SCRIPT_NONE 0 # define FT_AUTOHINTER_SCRIPT_LATIN 1 # define FT_AUTOHINTER_SCRIPT_CJK 2 # define FT_AUTOHINTER_SCRIPT_INDIC 3 Experimental only A list of constants used for the glyph-to-script-map property to specify the script submodule the auto-hinter should use for hinting a particular glyph.","title":"FT_AUTOHINTER_SCRIPT_XXX"},{"location":"ft2-properties.html#ft_prop_glyphtoscriptmap","text":"Defined in FT_DRIVER_H (freetype/ftdriver.h). typedef struct FT_Prop_GlyphToScriptMap_ { FT_Face face; FT_UShort * map; } FT_Prop_GlyphToScriptMap ; Experimental only The data exchange structure for the glyph-to-script-map property.","title":"FT_Prop_GlyphToScriptMap"},{"location":"ft2-properties.html#fallback-script","text":"Experimental only If no auto-hinter script module can be assigned to a glyph, a fallback script gets assigned to it (see also the glyph-to-script-map property). By default, this is FT_AUTOHINTER_SCRIPT_CJK . Using the fallback-script property, this fallback value can be changed.","title":"fallback-script"},{"location":"ft2-properties.html#default-script","text":"Experimental only If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a dlig feature, containing the combination of the characters T , E , and L to form a TEL ligature. By default, this is FT_AUTOHINTER_SCRIPT_LATIN . Using the default-script property, this default value can be changed.","title":"default-script"},{"location":"ft2-properties.html#increase-x-height","text":"For ppem values in the range 6 = ppem = increase-x-height , round up the font's x height much more often than normally. If the value is set to 0, which is the default, this feature is switched off. Use this property to improve the legibility of small font sizes if necessary.","title":"increase-x-height"},{"location":"ft2-properties.html#ft_prop_increasexheight","text":"Defined in FT_DRIVER_H (freetype/ftdriver.h). typedef struct FT_Prop_IncreaseXHeight_ { FT_Face face; FT_UInt limit; } FT_Prop_IncreaseXHeight ; The data exchange structure for the increase-x-height property.","title":"FT_Prop_IncreaseXHeight"},{"location":"ft2-properties.html#warping","text":"Experimental only If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to activate the warp hinting code in the auto-hinter, this property switches warping on and off. Warping only works in normal auto-hinting mode replacing it. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored. By default, warping is off.","title":"warping"},{"location":"ft2-quick_advance.html","text":"FreeType Docs Support API Quick retrieval of advance values Quick retrieval of advance values Synopsis This section contains functions to quickly extract advance values without handling glyph outlines, if possible. FT_Get_Advance Defined in FT_ADVANCES_H (freetype/ftadvanc.h). FT_EXPORT( FT_Error ) FT_Get_Advance ( FT_Face face, FT_UInt gindex, FT_Int32 load_flags, FT_Fixed *padvance ); Retrieve the advance value of a given glyph outline in an FT_Face . input face The source FT_Face handle. gindex The glyph index. load_flags A set of bit flags similar to those used when calling FT_Load_Glyph , used to determine what kind of advances you need. output padvance The advance value. If scaling is performed (based on the value of load_flags ), the advance value is in 16.16 format. Otherwise, it is in font units. If FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance corresponding to a vertical layout. Otherwise, it is the horizontal advance in a horizontal layout. return FreeType error code. 0 means success. note This function may fail if you use FT_ADVANCE_FLAG_FAST_ONLY and if the corresponding font backend doesn't have a quick way to retrieve the advances. A scaled advance is returned in 16.16 format but isn't transformed by the affine transformation specified by FT_Set_Transform . FT_Get_Advances Defined in FT_ADVANCES_H (freetype/ftadvanc.h). FT_EXPORT( FT_Error ) FT_Get_Advances ( FT_Face face, FT_UInt start, FT_UInt count, FT_Int32 load_flags, FT_Fixed *padvances ); Retrieve the advance values of several glyph outlines in an FT_Face . input face The source FT_Face handle. start The first glyph index. count The number of advance values you want to retrieve. load_flags A set of bit flags similar to those used when calling FT_Load_Glyph . output padvance The advance values. This array, to be provided by the caller, must contain at least count elements. If scaling is performed (based on the value of load_flags ), the advance values are in 16.16 format. Otherwise, they are in font units. If FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances corresponding to a vertical layout. Otherwise, they are the horizontal advances in a horizontal layout. return FreeType error code. 0 means success. note This function may fail if you use FT_ADVANCE_FLAG_FAST_ONLY and if the corresponding font backend doesn't have a quick way to retrieve the advances. Scaled advances are returned in 16.16 format but aren't transformed by the affine transformation specified by FT_Set_Transform . FT_ADVANCE_FLAG_FAST_ONLY Defined in FT_ADVANCES_H (freetype/ftadvanc.h). # define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L A bit-flag to be OR-ed with the flags parameter of the FT_Get_Advance and FT_Get_Advances functions. If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver doesn't allow for very quick advance computation. Typically, glyphs that are either unscaled, unhinted, bitmapped, or light-hinted can have their advance width computed very quickly. Normal and bytecode hinted modes that require loading, scaling, and hinting of the glyph outline, are extremely slow by comparison.","title":"Quick retrieval of advance values"},{"location":"ft2-quick_advance.html#quick-retrieval-of-advance-values","text":"","title":"Quick retrieval of advance values"},{"location":"ft2-quick_advance.html#synopsis","text":"This section contains functions to quickly extract advance values without handling glyph outlines, if possible.","title":"Synopsis"},{"location":"ft2-quick_advance.html#ft_get_advance","text":"Defined in FT_ADVANCES_H (freetype/ftadvanc.h). FT_EXPORT( FT_Error ) FT_Get_Advance ( FT_Face face, FT_UInt gindex, FT_Int32 load_flags, FT_Fixed *padvance ); Retrieve the advance value of a given glyph outline in an FT_Face .","title":"FT_Get_Advance"},{"location":"ft2-quick_advance.html#ft_get_advances","text":"Defined in FT_ADVANCES_H (freetype/ftadvanc.h). FT_EXPORT( FT_Error ) FT_Get_Advances ( FT_Face face, FT_UInt start, FT_UInt count, FT_Int32 load_flags, FT_Fixed *padvances ); Retrieve the advance values of several glyph outlines in an FT_Face .","title":"FT_Get_Advances"},{"location":"ft2-quick_advance.html#ft_advance_flag_fast_only","text":"Defined in FT_ADVANCES_H (freetype/ftadvanc.h). # define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L A bit-flag to be OR-ed with the flags parameter of the FT_Get_Advance and FT_Get_Advances functions. If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver doesn't allow for very quick advance computation. Typically, glyphs that are either unscaled, unhinted, bitmapped, or light-hinted can have their advance width computed very quickly. Normal and bytecode hinted modes that require loading, scaling, and hinting of the glyph outline, are extremely slow by comparison.","title":"FT_ADVANCE_FLAG_FAST_ONLY"},{"location":"ft2-raster.html","text":"FreeType Docs Support API Scanline Converter Scanline Converter Synopsis This section contains technical definitions. FT_Raster Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_RasterRec_* FT_Raster ; An opaque handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap. FT_Span Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Span_ { short x; unsigned short len; unsigned char coverage; } FT_Span ; A structure used to model a single span of gray pixels when rendering an anti-aliased bitmap. fields x The span's horizontal start position. len The span's length in pixels. coverage The span color/coverage, ranging from 0 (background) to 255 (foreground). note This structure is used by the span drawing callback type named FT_SpanFunc that takes the y coordinate of the span as a parameter. The coverage value is always between 0 and 255. If you want less gray values, the callback function has to reduce them. FT_SpanFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_SpanFunc )( int y, int count, const FT_Span * spans, void * user ); # define FT_Raster_Span_Func FT_SpanFunc 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 upward 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. FT_Raster_Params Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Raster_Params_ { const FT_Bitmap * target; const void * source; int flags; FT_SpanFunc gray_spans; FT_SpanFunc black_spans; /* unused */ FT_Raster_BitTest_Func bit_test; /* unused */ FT_Raster_BitSet_Func bit_set; /* unused */ void * user; FT_BBox clip_box; } FT_Raster_Params ; A structure to hold the parameters used by a raster's render function, passed as an argument to FT_Outline_Render . fields target The target bitmap. source A pointer to the source glyph image (e.g., an FT_Outline ). flags The rendering flags. gray_spans The gray span drawing callback. black_spans Unused. bit_test Unused. bit_set Unused. user User-supplied data that is passed to each drawing callback. clip_box An optional clipping box. It is only used in direct rendering mode. Note that coordinates here should be expressed in integer pixels (and not in 26.6 fixed-point units). note An anti-aliased glyph bitmap is drawn if the FT_RASTER_FLAG_AA bit flag is set in the flags field, otherwise a monochrome bitmap is generated. If the FT_RASTER_FLAG_DIRECT bit flag is set in flags , the raster will call the gray_spans callback to draw gray pixel spans. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing and composition. Not supported by the monochrome rasterizer. FT_RASTER_FLAG_XXX Defined in FT_IMAGE_H (freetype/ftimage.h). # define FT_RASTER_FLAG_DEFAULT 0x0 # define FT_RASTER_FLAG_AA 0x1 # define FT_RASTER_FLAG_DIRECT 0x2 # define FT_RASTER_FLAG_CLIP 0x4 /* these constants are deprecated; use the corresponding */ /* ` FT_RASTER_FLAG_XXX ` values instead */ # define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT # define ft_raster_flag_aa FT_RASTER_FLAG_AA # define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT # define ft_raster_flag_clip FT_RASTER_FLAG_CLIP 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 and the output will be clipped to its size. 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. Otherwise, the clip_box is effectively set to the bounding box and all spans are generated. FT_Raster_NewFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_NewFunc )( void * memory, FT_Raster * raster ); # define FT_Raster_New_Func FT_Raster_NewFunc 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. FT_Raster_DoneFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_DoneFunc )( FT_Raster raster ); # define FT_Raster_Done_Func FT_Raster_DoneFunc A function used to destroy a given raster object. input raster A handle to the raster object. FT_Raster_ResetFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_ResetFunc )( FT_Raster raster, unsigned char * pool_base, unsigned long pool_size ); # define FT_Raster_Reset_Func FT_Raster_ResetFunc FreeType used to provide an area of memory called the render pool available to all registered rasterizers. This was not thread safe, however, and now FreeType never allocates this pool. This function is called after a new raster object is created. input raster A handle to the new raster object. pool_base Previously, the address in memory of the render pool. Set this to NULL . pool_size Previously, the size in bytes of the render pool. Set this to 0. note Rasterizers should rely on dynamic or stack allocation if they want to (a handle to the memory allocator is passed to the rasterizer constructor). FT_Raster_SetModeFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_SetModeFunc )( FT_Raster raster, unsigned long mode, void * args ); # define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc 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. FT_Raster_RenderFunc Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_RenderFunc )( FT_Raster raster, const FT_Raster_Params * params ); # define FT_Raster_Render_Func FT_Raster_RenderFunc 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. FT_Raster_Funcs Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; 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. FT_Raster_BitTest_Func Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_BitTest_Func )( int y, int x, void * user ); Deprecated, unimplemented. FT_Raster_BitSet_Func Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_BitSet_Func )( int y, int x, void * user ); Deprecated, unimplemented.","title":"Scanline Converter"},{"location":"ft2-raster.html#scanline-converter","text":"","title":"Scanline Converter"},{"location":"ft2-raster.html#synopsis","text":"This section contains technical definitions.","title":"Synopsis"},{"location":"ft2-raster.html#ft_raster","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_RasterRec_* FT_Raster ; An opaque handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.","title":"FT_Raster"},{"location":"ft2-raster.html#ft_span","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Span_ { short x; unsigned short len; unsigned char coverage; } FT_Span ; A structure used to model a single span of gray pixels when rendering an anti-aliased bitmap.","title":"FT_Span"},{"location":"ft2-raster.html#ft_spanfunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_SpanFunc )( int y, int count, const FT_Span * spans, void * user ); # define FT_Raster_Span_Func FT_SpanFunc 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.","title":"FT_SpanFunc"},{"location":"ft2-raster.html#ft_raster_params","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef struct FT_Raster_Params_ { const FT_Bitmap * target; const void * source; int flags; FT_SpanFunc gray_spans; FT_SpanFunc black_spans; /* unused */ FT_Raster_BitTest_Func bit_test; /* unused */ FT_Raster_BitSet_Func bit_set; /* unused */ void * user; FT_BBox clip_box; } FT_Raster_Params ; A structure to hold the parameters used by a raster's render function, passed as an argument to FT_Outline_Render .","title":"FT_Raster_Params"},{"location":"ft2-raster.html#ft_raster_flag_xxx","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). # define FT_RASTER_FLAG_DEFAULT 0x0 # define FT_RASTER_FLAG_AA 0x1 # define FT_RASTER_FLAG_DIRECT 0x2 # define FT_RASTER_FLAG_CLIP 0x4 /* these constants are deprecated; use the corresponding */ /* ` FT_RASTER_FLAG_XXX ` values instead */ # define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT # define ft_raster_flag_aa FT_RASTER_FLAG_AA # define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT # define ft_raster_flag_clip FT_RASTER_FLAG_CLIP A list of bit flag constants as used in the flags field of a FT_Raster_Params structure.","title":"FT_RASTER_FLAG_XXX"},{"location":"ft2-raster.html#ft_raster_newfunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_NewFunc )( void * memory, FT_Raster * raster ); # define FT_Raster_New_Func FT_Raster_NewFunc A function used to create a new raster object.","title":"FT_Raster_NewFunc"},{"location":"ft2-raster.html#ft_raster_donefunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_DoneFunc )( FT_Raster raster ); # define FT_Raster_Done_Func FT_Raster_DoneFunc A function used to destroy a given raster object.","title":"FT_Raster_DoneFunc"},{"location":"ft2-raster.html#ft_raster_resetfunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_ResetFunc )( FT_Raster raster, unsigned char * pool_base, unsigned long pool_size ); # define FT_Raster_Reset_Func FT_Raster_ResetFunc FreeType used to provide an area of memory called the render pool available to all registered rasterizers. This was not thread safe, however, and now FreeType never allocates this pool. This function is called after a new raster object is created.","title":"FT_Raster_ResetFunc"},{"location":"ft2-raster.html#ft_raster_setmodefunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_SetModeFunc )( FT_Raster raster, unsigned long mode, void * args ); # define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc 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.","title":"FT_Raster_SetModeFunc"},{"location":"ft2-raster.html#ft_raster_renderfunc","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_RenderFunc )( FT_Raster raster, const FT_Raster_Params * params ); # define FT_Raster_Render_Func FT_Raster_RenderFunc Invoke a given raster to scan-convert a given glyph image into a target bitmap.","title":"FT_Raster_RenderFunc"},{"location":"ft2-raster.html#ft_raster_funcs","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). 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 ; A structure used to describe a given raster class to the library.","title":"FT_Raster_Funcs"},{"location":"ft2-raster.html#ft_raster_bittest_func","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef int (* FT_Raster_BitTest_Func )( int y, int x, void * user ); Deprecated, unimplemented.","title":"FT_Raster_BitTest_Func"},{"location":"ft2-raster.html#ft_raster_bitset_func","text":"Defined in FT_IMAGE_H (freetype/ftimage.h). typedef void (* FT_Raster_BitSet_Func )( int y, int x, void * user ); Deprecated, unimplemented.","title":"FT_Raster_BitSet_Func"},{"location":"ft2-sfnt_names.html","text":"FreeType Docs Format-Specific API SFNT Names SFNT Names Synopsis The TrueType and OpenType specifications allow the inclusion of a special names table ( name ) in font files. This table contains textual (and internationalized) information regarding the font, like family name, copyright, version, etc. The definitions below are used to access them if available. Note that this has nothing to do with glyph names! FT_SfntName Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). 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 ; A structure used to model an SFNT name table entry. fields platform_id The platform ID for string . See TT_PLATFORM_XXX for possible values. encoding_id The encoding ID for string . See TT_APPLE_ID_XXX , TT_MAC_ID_XXX , TT_ISO_ID_XXX , TT_MS_ID_XXX , and TT_ADOBE_ID_XXX for possible values. language_id The language ID for string . See TT_MAC_LANGID_XXX and TT_MS_LANGID_XXX for possible values. Registered OpenType values for language_id are always smaller than 0x8000; values equal or larger than 0x8000 usually indicate a language tag string (introduced in OpenType version 1.6). Use function FT_Get_Sfnt_LangTag with language_id as its argument to retrieve the associated language tag. name_id An identifier for string . See TT_NAME_ID_XXX for possible values. string The name string. Note that its format differs depending on the (platform,encoding) pair, being either a string of bytes (without a terminating NULL byte) or containing UTF-16BE entities. string_len The length of string in bytes. note Please refer to the TrueType or OpenType specification for more details. FT_Get_Sfnt_Name_Count Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_UInt ) FT_Get_Sfnt_Name_Count ( FT_Face face ); 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. note This function always returns an error if the config macro TT_CONFIG_OPTION_SFNT_NAMES is not defined in ftoption.h . FT_Get_Sfnt_Name Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_Error ) FT_Get_Sfnt_Name ( FT_Face face, FT_UInt idx, FT_SfntName *aname ); Retrieve a string of the SFNT name table for a given index. input face A handle to the source face. idx The index of the name string. output aname The indexed FT_SfntName structure. return FreeType error code. 0 means success. note The string array returned in the aname structure is not null-terminated. Note that you don't have to deallocate string by yourself; FreeType takes care of it if you call FT_Done_Face . Use FT_Get_Sfnt_Name_Count to get the total number of available name table entries, then do a loop until you get the right platform, encoding, and name ID. name table format 1 entries can use language tags also, see FT_Get_Sfnt_LangTag . This function always returns an error if the config macro TT_CONFIG_OPTION_SFNT_NAMES is not defined in ftoption.h . FT_SfntLangTag Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). typedef struct FT_SfntLangTag_ { FT_Byte * string; /* this string is *not* null-terminated! */ FT_UInt string_len; /* in bytes */ } FT_SfntLangTag ; A structure to model a language tag entry from an SFNT name table. fields string The language tag string, encoded in UTF-16BE (without trailing NULL bytes). string_len The length of string in bytes . note Please refer to the TrueType or OpenType specification for more details. since 2.8 FT_Get_Sfnt_LangTag Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_Error ) FT_Get_Sfnt_LangTag ( FT_Face face, FT_UInt langID, FT_SfntLangTag *alangTag ); Retrieve the language tag associated with a language ID of an SFNT name table entry. input face A handle to the source face. langID The language ID, as returned by FT_Get_Sfnt_Name . This is always a value larger than 0x8000. output alangTag The language tag associated with the name table entry's language ID. return FreeType error code. 0 means success. note The string array returned in the alangTag structure is not null-terminated. Note that you don't have to deallocate string by yourself; FreeType takes care of it if you call FT_Done_Face . Only name table format 1 supports language tags. For format 0 tables, this function always returns FT_Err_Invalid_Table. For invalid format 1 language ID values, FT_Err_Invalid_Argument is returned. This function always returns an error if the config macro TT_CONFIG_OPTION_SFNT_NAMES is not defined in ftoption.h . since 2.8","title":"SFNT Names"},{"location":"ft2-sfnt_names.html#sfnt-names","text":"","title":"SFNT Names"},{"location":"ft2-sfnt_names.html#synopsis","text":"The TrueType and OpenType specifications allow the inclusion of a special names table ( name ) in font files. This table contains textual (and internationalized) information regarding the font, like family name, copyright, version, etc. The definitions below are used to access them if available. Note that this has nothing to do with glyph names!","title":"Synopsis"},{"location":"ft2-sfnt_names.html#ft_sfntname","text":"Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). 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 ; A structure used to model an SFNT name table entry.","title":"FT_SfntName"},{"location":"ft2-sfnt_names.html#ft_get_sfnt_name_count","text":"Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_UInt ) FT_Get_Sfnt_Name_Count ( FT_Face face ); Retrieve the number of name strings in the SFNT name table.","title":"FT_Get_Sfnt_Name_Count"},{"location":"ft2-sfnt_names.html#ft_get_sfnt_name","text":"Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_Error ) FT_Get_Sfnt_Name ( FT_Face face, FT_UInt idx, FT_SfntName *aname ); Retrieve a string of the SFNT name table for a given index.","title":"FT_Get_Sfnt_Name"},{"location":"ft2-sfnt_names.html#ft_sfntlangtag","text":"Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). typedef struct FT_SfntLangTag_ { FT_Byte * string; /* this string is *not* null-terminated! */ FT_UInt string_len; /* in bytes */ } FT_SfntLangTag ; A structure to model a language tag entry from an SFNT name table.","title":"FT_SfntLangTag"},{"location":"ft2-sfnt_names.html#ft_get_sfnt_langtag","text":"Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h). FT_EXPORT( FT_Error ) FT_Get_Sfnt_LangTag ( FT_Face face, FT_UInt langID, FT_SfntLangTag *alangTag ); Retrieve the language tag associated with a language ID of an SFNT name table entry.","title":"FT_Get_Sfnt_LangTag"},{"location":"ft2-sizes_management.html","text":"FreeType Docs Core API Size Management Size Management Synopsis 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. FT_New_Size Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_New_Size ( FT_Face face, FT_Size * size ); 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_Done_Size Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_Done_Size ( FT_Size size ); 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_Activate_Size Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_Activate_Size ( FT_Size size ); Even though it is possible to create several size objects for a given face (see FT_New_Size for details), functions like FT_Load_Glyph or FT_Load_Char only use the one that has been activated last to determine the current character pixel size . This function can be used to activate a previously created size object. input size A handle to a target size object. return FreeType error code. 0 means success. note If face is the size's parent face object, this function changes the value of face- size to the input size handle.","title":"Size Management"},{"location":"ft2-sizes_management.html#size-management","text":"","title":"Size Management"},{"location":"ft2-sizes_management.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-sizes_management.html#ft_new_size","text":"Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_New_Size ( FT_Face face, FT_Size * size ); Create a new size object from a given face object.","title":"FT_New_Size"},{"location":"ft2-sizes_management.html#ft_done_size","text":"Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_Done_Size ( FT_Size size ); Discard a given size object. Note that FT_Done_Face automatically discards all size objects allocated with FT_New_Size .","title":"FT_Done_Size"},{"location":"ft2-sizes_management.html#ft_activate_size","text":"Defined in FT_SIZES_H (freetype/ftsizes.h). FT_EXPORT( FT_Error ) FT_Activate_Size ( FT_Size size ); Even though it is possible to create several size objects for a given face (see FT_New_Size for details), functions like FT_Load_Glyph or FT_Load_Char only use the one that has been activated last to determine the current character pixel size . This function can be used to activate a previously created size object.","title":"FT_Activate_Size"},{"location":"ft2-system_interface.html","text":"FreeType Docs Support API System Interface System Interface Synopsis 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. FT_Memory Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef struct FT_MemoryRec_* FT_Memory ; A handle to a given memory manager object, defined with an FT_MemoryRec structure. FT_Alloc_Func Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void * (* FT_Alloc_Func )( FT_Memory memory, long size ); 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. FT_Free_Func Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void (* FT_Free_Func )( FT_Memory memory, void * block ); 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. FT_Realloc_Func Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void * (* FT_Realloc_Func )( FT_Memory memory, long cur_size, long new_size, void * block ); 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. FT_MemoryRec Defined in FT_SYSTEM_H (freetype/ftsystem.h). struct FT_MemoryRec_ { void * user; FT_Alloc_Func alloc; FT_Free_Func free; FT_Realloc_Func realloc; }; 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. FT_Stream Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef struct FT_StreamRec_* FT_Stream ; A handle to an input stream. also See FT_StreamRec for the publicly accessible fields of a given stream object. FT_StreamDesc Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef union FT_StreamDesc_ { long value; void * pointer; } FT_StreamDesc ; 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. FT_Stream_IoFunc Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef unsigned long (* FT_Stream_IoFunc )( FT_Stream stream, unsigned long offset, unsigned char * buffer, unsigned long count ); A function used to seek and read data from a given input stream. input stream A handle to the source stream. offset The offset of read in stream (always from start). buffer The address of the read buffer. count The number of bytes to read from the stream. return The number of bytes effectively read by the stream. note This function might be called to perform a seek or skip operation with a count of 0. A non-zero return value then indicates an error. FT_Stream_CloseFunc Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void (* FT_Stream_CloseFunc )( FT_Stream stream ); A function used to close a given input stream. input stream A handle to the target stream. FT_StreamRec Defined in FT_SYSTEM_H (freetype/ftsystem.h). 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 ; A structure used to describe an input stream. input base For memory-based streams, this is the address of the first stream byte in memory. This field should always be set to NULL for disk-based streams. size The stream size in bytes. In case of compressed streams where the size is unknown before actually doing the decompression, the value is set to 0x7FFFFFFF. (Note that this size value can occur for normal streams also; it is thus just a hint.) pos The current position within the stream. descriptor This field is a union that can hold an integer or a pointer. It is used by stream implementations to store file descriptors or FILE* pointers. pathname This field is completely ignored by FreeType. However, it is often useful during debugging to use it to store the stream's filename (where available). read The stream's input function. close The stream's close function. memory The memory manager to use to preload frames. This is set internally by FreeType and shouldn't be touched by stream implementations. cursor This field is set and used internally by FreeType when parsing frames. In particular, the FT_GET_XXX macros use this instead of the pos field. limit This field is set and used internally by FreeType when parsing frames.","title":"System Interface"},{"location":"ft2-system_interface.html#system-interface","text":"","title":"System Interface"},{"location":"ft2-system_interface.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-system_interface.html#ft_memory","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef struct FT_MemoryRec_* FT_Memory ; A handle to a given memory manager object, defined with an FT_MemoryRec structure.","title":"FT_Memory"},{"location":"ft2-system_interface.html#ft_alloc_func","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void * (* FT_Alloc_Func )( FT_Memory memory, long size ); A function used to allocate size bytes from memory .","title":"FT_Alloc_Func"},{"location":"ft2-system_interface.html#ft_free_func","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void (* FT_Free_Func )( FT_Memory memory, void * block ); A function used to release a given block of memory.","title":"FT_Free_Func"},{"location":"ft2-system_interface.html#ft_realloc_func","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void * (* FT_Realloc_Func )( FT_Memory memory, long cur_size, long new_size, void * block ); A function used to re-allocate a given block of memory.","title":"FT_Realloc_Func"},{"location":"ft2-system_interface.html#ft_memoryrec","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). struct FT_MemoryRec_ { void * user; FT_Alloc_Func alloc; FT_Free_Func free; FT_Realloc_Func realloc; }; A structure used to describe a given memory manager to FreeType 2.","title":"FT_MemoryRec"},{"location":"ft2-system_interface.html#ft_stream","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef struct FT_StreamRec_* FT_Stream ; A handle to an input stream.","title":"FT_Stream"},{"location":"ft2-system_interface.html#ft_streamdesc","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef union FT_StreamDesc_ { long value; void * pointer; } FT_StreamDesc ; 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.","title":"FT_StreamDesc"},{"location":"ft2-system_interface.html#ft_stream_iofunc","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef unsigned long (* FT_Stream_IoFunc )( FT_Stream stream, unsigned long offset, unsigned char * buffer, unsigned long count ); A function used to seek and read data from a given input stream.","title":"FT_Stream_IoFunc"},{"location":"ft2-system_interface.html#ft_stream_closefunc","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). typedef void (* FT_Stream_CloseFunc )( FT_Stream stream ); A function used to close a given input stream.","title":"FT_Stream_CloseFunc"},{"location":"ft2-system_interface.html#ft_streamrec","text":"Defined in FT_SYSTEM_H (freetype/ftsystem.h). 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 ; A structure used to describe an input stream.","title":"FT_StreamRec"},{"location":"ft2-t1_cid_driver.html","text":"FreeType Docs Controlling FreeType Modules The Type 1 and CID drivers The Type 1 and CID drivers Synopsis It is possible to control the behaviour of FreeType's Type 1 and Type 1 CID drivers with FT_Property_Set and FT_Property_Get . Behind the scenes, both drivers use the Adobe CFF engine for hinting; however, the used properties must be specified separately. The Type 1 driver's module name is type1 ; the CID driver's module name is t1cid . Available properties are hinting-engine , no-stem-darkening , darkening-parameters , and random-seed , as documented in the Driver properties section. Please see the The CFF driver section for more details on the new hinting engine.","title":"The Type 1 and CID drivers"},{"location":"ft2-t1_cid_driver.html#the-type-1-and-cid-drivers","text":"","title":"The Type 1 and CID drivers"},{"location":"ft2-t1_cid_driver.html#synopsis","text":"It is possible to control the behaviour of FreeType's Type 1 and Type 1 CID drivers with FT_Property_Set and FT_Property_Get . Behind the scenes, both drivers use the Adobe CFF engine for hinting; however, the used properties must be specified separately. The Type 1 driver's module name is type1 ; the CID driver's module name is t1cid . Available properties are hinting-engine , no-stem-darkening , darkening-parameters , and random-seed , as documented in the Driver properties section. Please see the The CFF driver section for more details on the new hinting engine.","title":"Synopsis"},{"location":"ft2-truetype_engine.html","text":"FreeType Docs Miscellaneous The TrueType Engine The TrueType Engine Synopsis This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library. FT_TrueTypeEngineType Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef enum FT_TrueTypeEngineType_ { FT_TRUETYPE_ENGINE_TYPE_NONE = 0, FT_TRUETYPE_ENGINE_TYPE_UNPATENTED , FT_TRUETYPE_ENGINE_TYPE_PATENTED } FT_TrueTypeEngineType ; A list of values describing which kind of TrueType bytecode engine is implemented in a given FT_Library instance. It is used by the FT_Get_TrueType_Engine_Type function. values FT_TRUETYPE_ENGINE_TYPE_NONE The library doesn't implement any kind of bytecode interpreter. FT_TRUETYPE_ENGINE_TYPE_UNPATENTED Deprecated and removed. FT_TRUETYPE_ENGINE_TYPE_PATENTED The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine (this was governed by patents until May 2010, hence the name). since 2.2 FT_Get_TrueType_Engine_Type Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_TrueTypeEngineType ) FT_Get_TrueType_Engine_Type ( FT_Library library ); Return an FT_TrueTypeEngineType value to indicate which level of the TrueType virtual machine a given library instance supports. input library A library instance. return A value indicating which level is supported. since 2.2","title":"The TrueType Engine"},{"location":"ft2-truetype_engine.html#the-truetype-engine","text":"","title":"The TrueType Engine"},{"location":"ft2-truetype_engine.html#synopsis","text":"This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.","title":"Synopsis"},{"location":"ft2-truetype_engine.html#ft_truetypeenginetype","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). typedef enum FT_TrueTypeEngineType_ { FT_TRUETYPE_ENGINE_TYPE_NONE = 0, FT_TRUETYPE_ENGINE_TYPE_UNPATENTED , FT_TRUETYPE_ENGINE_TYPE_PATENTED } FT_TrueTypeEngineType ; 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.","title":"FT_TrueTypeEngineType"},{"location":"ft2-truetype_engine.html#ft_get_truetype_engine_type","text":"Defined in FT_MODULE_H (freetype/ftmodapi.h). FT_EXPORT( FT_TrueTypeEngineType ) FT_Get_TrueType_Engine_Type ( FT_Library library ); Return an FT_TrueTypeEngineType value to indicate which level of the TrueType virtual machine a given library instance supports.","title":"FT_Get_TrueType_Engine_Type"},{"location":"ft2-truetype_tables.html","text":"FreeType Docs Format-Specific API TrueType Tables TrueType Tables Synopsis This section contains definitions of some basic tables specific to TrueType and OpenType as well as some routines used to access and process them. TT_Header Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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_ULong Created [2]; FT_ULong 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 ; A structure to model a TrueType font header table. All fields follow the OpenType specification. The 64-bit timestamps are stored in two-element arrays Created and Modified , first the upper then the lower 32 bits. TT_HoriHeader Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_HoriHeader_ { FT_Fixed Version; FT_Short Ascender; FT_Short Descender; FT_Short Line_Gap; FT_UShort advance_Width_Max; /* advance width maximum */ FT_Short min_Left_Side_Bearing; /* minimum left-sb */ FT_Short min_Right_Side_Bearing; /* minimum right-sb */ FT_Short xMax_Extent; /* xmax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; FT_Short Reserved[4]; FT_Short metric_Data_Format; FT_UShort number_Of_HMetrics; /* The following fields are not defined by the OpenType specification */ /* but they are used to connect the metrics header to the relevant */ /* 'hmtx' table. */ void * long_metrics; void * short_metrics; } TT_HoriHeader ; A structure to model a TrueType horizontal header, the hhea table, as well as the corresponding horizontal metrics table, hmtx . fields Version The table version. Ascender The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the sTypoAscender field of the OS/2 table instead if you want the correct one. Descender The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the sTypoDescender field of the OS/2 table instead if you want the correct one. Line_Gap The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font. advance_Width_Max This field is the maximum of all advance widths found in the font. It can be used to compute the maximum width of an arbitrary string of text. min_Left_Side_Bearing The minimum left side bearing of all glyphs within the font. min_Right_Side_Bearing The minimum right side bearing of all glyphs within the font. xMax_Extent The maximum horizontal extent (i.e., the width of a glyph's bounding box) for all glyphs in the font. caret_Slope_Rise The rise coefficient of the cursor's slope of the cursor (slope=rise/run). caret_Slope_Run The run coefficient of the cursor's slope. caret_Offset The cursor's offset for slanted fonts. Reserved 8 reserved bytes. metric_Data_Format Always 0. number_Of_HMetrics Number of HMetrics entries in the hmtx table -- this value can be smaller than the total number of glyphs in the font. long_metrics A pointer into the hmtx table. short_metrics A pointer into the hmtx table. note For an OpenType variation font, the values of the following fields can change after a call to FT_Set_Var_Design_Coordinates (and friends) if the font contains an MVAR table: caret_Slope_Rise , caret_Slope_Run , and caret_Offset . TT_VertHeader Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_VertHeader_ { FT_Fixed Version; FT_Short Ascender; FT_Short Descender; FT_Short Line_Gap; FT_UShort advance_Height_Max; /* advance height maximum */ FT_Short min_Top_Side_Bearing; /* minimum top-sb */ FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */ FT_Short yMax_Extent; /* ymax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; FT_Short Reserved[4]; FT_Short metric_Data_Format; FT_UShort number_Of_VMetrics; /* The following fields are not defined by the OpenType specification */ /* but they are used to connect the metrics header to the relevant */ /* 'vmtx' table. */ void * long_metrics; void * short_metrics; } TT_VertHeader ; A structure used to model a TrueType vertical header, the vhea table, as well as the corresponding vertical metrics table, vmtx . fields Version The table version. Ascender The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the sTypoAscender field of the OS/2 table instead if you want the correct one. Descender The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the sTypoDescender field of the OS/2 table instead if you want the correct one. Line_Gap The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font. advance_Height_Max This field is the maximum of all advance heights found in the font. It can be used to compute the maximum height of an arbitrary string of text. min_Top_Side_Bearing The minimum top side bearing of all glyphs within the font. min_Bottom_Side_Bearing The minimum bottom side bearing of all glyphs within the font. yMax_Extent The maximum vertical extent (i.e., the height of a glyph's bounding box) for all glyphs in the font. caret_Slope_Rise The rise coefficient of the cursor's slope of the cursor (slope=rise/run). caret_Slope_Run The run coefficient of the cursor's slope. caret_Offset The cursor's offset for slanted fonts. Reserved 8 reserved bytes. metric_Data_Format Always 0. number_Of_VMetrics Number of VMetrics entries in the vmtx table -- this value can be smaller than the total number of glyphs in the font. long_metrics A pointer into the vmtx table. short_metrics A pointer into the vmtx table. note For an OpenType variation font, the values of the following fields can change after a call to FT_Set_Var_Design_Coordinates (and friends) if the font contains an MVAR table: Ascender , Descender , Line_Gap , caret_Slope_Rise , caret_Slope_Run , and caret_Offset . TT_OS2 Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_OS2_ { FT_UShort version; /* 0x0001 - more or 0xFFFF */ FT_Short xAvgCharWidth; FT_UShort usWeightClass; FT_UShort usWidthClass; FT_UShort fsType; FT_Short ySubscriptXSize; FT_Short ySubscriptYSize; FT_Short ySubscriptXOffset; FT_Short ySubscriptYOffset; FT_Short ySuperscriptXSize; FT_Short ySuperscriptYSize; FT_Short ySuperscriptXOffset; FT_Short ySuperscriptYOffset; FT_Short yStrikeoutSize; FT_Short yStrikeoutPosition; FT_Short sFamilyClass; FT_Byte panose[10]; FT_ULong ulUnicodeRange1; /* Bits 0-31 */ FT_ULong ulUnicodeRange2; /* Bits 32-63 */ FT_ULong ulUnicodeRange3; /* Bits 64-95 */ FT_ULong ulUnicodeRange4; /* Bits 96-127 */ FT_Char achVendID[4]; FT_UShort fsSelection; FT_UShort usFirstCharIndex; FT_UShort usLastCharIndex; FT_Short sTypoAscender; FT_Short sTypoDescender; FT_Short sTypoLineGap; FT_UShort usWinAscent; FT_UShort usWinDescent; /* only version 1 and higher: */ FT_ULong ulCodePageRange1; /* Bits 0-31 */ FT_ULong ulCodePageRange2; /* Bits 32-63 */ /* only version 2 and higher: */ FT_Short sxHeight; FT_Short sCapHeight; FT_UShort usDefaultChar; FT_UShort usBreakChar; FT_UShort usMaxContext; /* only version 5 and higher: */ FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ } TT_OS2 ; A structure to model a TrueType OS/2 table. All fields comply to the OpenType specification. Note that we now support old Mac fonts that do not include an OS/2 table. In this case, the version field is always set to 0xFFFF. note For an OpenType variation font, the values of the following fields can change after a call to FT_Set_Var_Design_Coordinates (and friends) if the font contains an MVAR table: sCapHeight , sTypoAscender , sTypoDescender , sTypoLineGap , sxHeight , usWinAscent , usWinDescent , yStrikeoutPosition , yStrikeoutSize , ySubscriptXOffset , ySubScriptXSize , ySubscriptYOffset , ySubscriptYSize , ySuperscriptXOffset , ySuperscriptXSize , ySuperscriptYOffset , and ySuperscriptYSize . Possible values for bits in the ulUnicodeRangeX fields are given by the TT_UCR_XXX macros. TT_Postscript Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_Postscript_ { FT_Fixed FormatType; FT_Fixed italicAngle; FT_Short underlinePosition; FT_Short underlineThickness; FT_ULong isFixedPitch; FT_ULong minMemType42; FT_ULong maxMemType42; FT_ULong minMemType1; FT_ULong maxMemType1; /* Glyph names follow in the 'post' table, but we don't */ /* load them by default. */ } TT_Postscript ; A structure to model a TrueType post table. All fields comply to the OpenType specification. This structure does not reference a font's PostScript glyph names; use FT_Get_Glyph_Name to retrieve them. note For an OpenType variation font, the values of the following fields can change after a call to FT_Set_Var_Design_Coordinates (and friends) if the font contains an MVAR table: underlinePosition and underlineThickness . TT_PCLT Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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 ; A structure to model a TrueType PCLT table. All fields comply to the OpenType specification. TT_MaxProfile Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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 ; The maximum profile ( maxp ) table contains many max values, which can be used to pre-allocate arrays for speeding up glyph loading and hinting. fields version The version number. numGlyphs The number of glyphs in this TrueType font. maxPoints The maximum number of points in a non-composite TrueType glyph. See also maxCompositePoints . maxContours The maximum number of contours in a non-composite TrueType glyph. See also maxCompositeContours . maxCompositePoints The maximum number of points in a composite TrueType glyph. See also maxPoints . maxCompositeContours The maximum number of contours in a composite TrueType glyph. See also maxContours . maxZones The maximum number of zones used for glyph hinting. maxTwilightPoints The maximum number of points in the twilight zone used for glyph hinting. maxStorage The maximum number of elements in the storage area used for glyph hinting. maxFunctionDefs The maximum number of function definitions in the TrueType bytecode for this font. maxInstructionDefs The maximum number of instruction definitions in the TrueType bytecode for this font. maxStackElements The maximum number of stack elements used during bytecode interpretation. maxSizeOfInstructions The maximum number of TrueType opcodes used for glyph hinting. maxComponentElements The maximum number of simple (i.e., non-composite) glyphs in a composite glyph. maxComponentDepth The maximum nesting depth of composite glyphs. note This structure is only used during font loading. FT_Sfnt_Tag Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef enum FT_Sfnt_Tag_ { FT_SFNT_HEAD , FT_SFNT_MAXP , FT_SFNT_OS2 , FT_SFNT_HHEA , FT_SFNT_VHEA , FT_SFNT_POST , FT_SFNT_PCLT , FT_SFNT_MAX } FT_Sfnt_Tag ; /* these constants are deprecated; use the corresponding ` FT_Sfnt_Tag ` */ /* values instead */ # define ft_sfnt_head FT_SFNT_HEAD # define ft_sfnt_maxp FT_SFNT_MAXP # define ft_sfnt_os2 FT_SFNT_OS2 # define ft_sfnt_hhea FT_SFNT_HHEA # define ft_sfnt_vhea FT_SFNT_VHEA # define ft_sfnt_post FT_SFNT_POST # define ft_sfnt_pclt FT_SFNT_PCLT An enumeration to specify indices of SFNT tables loaded and parsed by FreeType during initialization of an SFNT font. Used in the FT_Get_Sfnt_Table API function. values FT_SFNT_HEAD To access the font's TT_Header structure. FT_SFNT_MAXP To access the font's TT_MaxProfile structure. FT_SFNT_OS2 To access the font's TT_OS2 structure. FT_SFNT_HHEA To access the font's TT_HoriHeader structure. FT_SFNT_VHEA To access the font's TT_VertHeader structure. FT_SFNT_POST To access the font's TT_Postscript structure. FT_SFNT_PCLT To access the font's TT_PCLT structure. FT_Get_Sfnt_Table Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( void * ) FT_Get_Sfnt_Table ( FT_Face face, FT_Sfnt_Tag tag ); Return a pointer to a given SFNT table stored within a face. input face A handle to the source. tag The index of the SFNT table. return A type-less pointer to the table. This will be NULL in case of error, or if the corresponding table was not found OR loaded from the file. Use a typecast according to tag to access the structure elements. note The table is owned by the face object and disappears with it. This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype drivers. See FT_Sfnt_Tag for a list. example Here is an example demonstrating access to the vhea table. TT_VertHeader* vert_header; vert_header = (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); FT_Load_Sfnt_Table Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Error ) FT_Load_Sfnt_Table ( FT_Face face, FT_ULong tag, FT_Long offset, FT_Byte * buffer, FT_ULong * length ); Load any SFNT font table into client memory. input face A handle to the source face. tag The four-byte tag of the table to load. Use value 0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the FT_TRUETYPE_TAGS_H file, or forge a new one with FT_MAKE_TAG . offset The starting offset in the table (or file if tag == 0). output buffer The target buffer address. The client must ensure that the memory array is big enough to hold the data. inout length If the length parameter is NULL , try to load the whole table. Return an error code if it fails. Else, if *length is 0, exit immediately while returning the table's (or file) full size in it. Else the number of bytes to read from the table or file, from the starting offset. return FreeType error code. 0 means success. note If you need to determine the table's length you should first call this function with *length set to 0, as in the following example: FT_ULong length = 0; error = FT_Load_Sfnt_Table( face, tag, 0, NULL, length ); if ( error ) { ... table does not exist ... } buffer = malloc( length ); if ( buffer == NULL ) { ... not enough memory ... } error = FT_Load_Sfnt_Table( face, tag, 0, buffer, length ); if ( error ) { ... could not load table ... } Note that structures like TT_Header or TT_OS2 can't be used with this function; they are limited to FT_Get_Sfnt_Table . Reason is that those structures depend on the processor architecture, with varying size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). FT_Sfnt_Table_Info Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Error ) FT_Sfnt_Table_Info ( FT_Face face, FT_UInt table_index, FT_ULong *tag, FT_ULong *length ); Return information on an SFNT table. input face A handle to the source face. table_index The index of an SFNT table. The function returns FT_Err_Table_Missing for an invalid value. inout tag The name tag of the SFNT table. If the value is NULL , table_index is ignored, and length returns the number of SFNT tables in the font. output length The length of the SFNT table (or the number of SFNT tables, depending on tag ). return FreeType error code. 0 means success. note While parsing fonts, FreeType handles SFNT tables with length zero as missing. FT_Get_CMap_Language_ID Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_ULong ) FT_Get_CMap_Language_ID ( FT_CharMap charmap ); Return cmap language ID as specified in the OpenType standard. Definitions of language ID values are in file FT_TRUETYPE_IDS_H . input charmap The target charmap. return The language ID of charmap . If charmap doesn't belong to an SFNT face, just return 0 as the default value. For a format 14 cmap (to access Unicode IVS), the return value is 0xFFFFFFFF. FT_Get_CMap_Format Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Long ) FT_Get_CMap_Format ( FT_CharMap charmap ); Return the format of an SFNT cmap table. input charmap The target charmap. return The format of charmap . If charmap doesn't belong to an SFNT face, return -1. FT_PARAM_TAG_UNPATENTED_HINTING # define FT_PARAM_TAG_UNPATENTED_HINTING \\ FT_MAKE_TAG ( 'u', 'n', 'p', 'a' ) Deprecated, no effect. Previously: A constant used as the tag of an FT_Parameter structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by FT_Open_Face . TT_PLATFORM_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 */ A list of valid values for the platform_id identifier code in FT_CharMapRec and FT_SfntName structures. values TT_PLATFORM_APPLE_UNICODE Used by Apple to indicate a Unicode character map and/or name entry. See TT_APPLE_ID_XXX for corresponding encoding_id values. Note that name entries in this format are coded as big-endian UCS-2 character codes only . TT_PLATFORM_MACINTOSH Used by Apple to indicate a MacOS-specific charmap and/or name entry. See TT_MAC_ID_XXX for corresponding encoding_id values. Note that most TrueType fonts contain an Apple roman charmap to be usable on MacOS systems (even if they contain a Microsoft charmap as well). TT_PLATFORM_ISO This value was used to specify ISO/IEC 10646 charmaps. It is however now deprecated. See TT_ISO_ID_XXX for a list of corresponding encoding_id values. TT_PLATFORM_MICROSOFT Used by Microsoft to indicate Windows-specific charmaps. See TT_MS_ID_XXX for a list of corresponding encoding_id values. Note that most fonts contain a Unicode charmap using ( TT_PLATFORM_MICROSOFT , TT_MS_ID_UNICODE_CS ). TT_PLATFORM_CUSTOM Used to indicate application-specific charmaps. TT_PLATFORM_ADOBE This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific charmaps in an FT_CharMapRec structure. See TT_ADOBE_ID_XXX . TT_APPLE_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ # define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ # define TT_APPLE_ID_ISO_10646 2 /* deprecated */ # define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ # define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ # define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ # define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */ A list of valid values for the encoding_id for TT_PLATFORM_APPLE_UNICODE charmaps and name entries. values TT_APPLE_ID_DEFAULT Unicode version 1.0. TT_APPLE_ID_UNICODE_1_1 Unicode 1.1; specifies Hangul characters starting at U+34xx. TT_APPLE_ID_ISO_10646 Deprecated (identical to preceding). TT_APPLE_ID_UNICODE_2_0 Unicode 2.0 and beyond (UTF-16 BMP only). TT_APPLE_ID_UNICODE_32 Unicode 3.1 and beyond, using UTF-32. TT_APPLE_ID_VARIANT_SELECTOR From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap. TT_APPLE_ID_FULL_UNICODE Used for fallback fonts that provide complete Unicode coverage with a type 13 cmap. TT_MAC_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 A list of valid values for the encoding_id for TT_PLATFORM_MACINTOSH charmaps and name entries. TT_ISO_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_ISO_ID_7BIT_ASCII 0 # define TT_ISO_ID_10646 1 # define TT_ISO_ID_8859_1 2 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. TT_MS_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MS_ID_SYMBOL_CS 0 # define TT_MS_ID_UNICODE_CS 1 # define TT_MS_ID_SJIS 2 # define TT_MS_ID_PRC 3 # define TT_MS_ID_BIG_5 4 # define TT_MS_ID_WANSUNG 5 # define TT_MS_ID_JOHAB 6 # define TT_MS_ID_UCS_4 10 /* this value is deprecated */ # define TT_MS_ID_GB2312 TT_MS_ID_PRC A list of valid values for the encoding_id for TT_PLATFORM_MICROSOFT charmaps and name entries. values TT_MS_ID_SYMBOL_CS Microsoft symbol encoding. See FT_ENCODING_MS_SYMBOL . TT_MS_ID_UNICODE_CS Microsoft WGL4 charmap, matching Unicode. See FT_ENCODING_UNICODE . TT_MS_ID_SJIS Shift JIS Japanese encoding. See FT_ENCODING_SJIS . TT_MS_ID_PRC Chinese encodings as used in the People's Republic of China (PRC). This means the encodings GB 2312 and its supersets GBK and GB 18030. See FT_ENCODING_PRC . TT_MS_ID_BIG_5 Traditional Chinese as used in Taiwan and Hong Kong. See FT_ENCODING_BIG5 . TT_MS_ID_WANSUNG Korean Extended Wansung encoding. See FT_ENCODING_WANSUNG . TT_MS_ID_JOHAB Korean Johab encoding. See FT_ENCODING_JOHAB . TT_MS_ID_UCS_4 UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001). TT_ADOBE_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 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. TT_MAC_LANGID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MAC_LANGID_ENGLISH 0 # define TT_MAC_LANGID_FRENCH 1 # define TT_MAC_LANGID_GERMAN 2 # define TT_MAC_LANGID_ITALIAN 3 # define TT_MAC_LANGID_DUTCH 4 # define TT_MAC_LANGID_SWEDISH 5 # define TT_MAC_LANGID_SPANISH 6 # define TT_MAC_LANGID_DANISH 7 # define TT_MAC_LANGID_PORTUGUESE 8 # define TT_MAC_LANGID_NORWEGIAN 9 # define TT_MAC_LANGID_HEBREW 10 # define TT_MAC_LANGID_JAPANESE 11 # define TT_MAC_LANGID_ARABIC 12 # define TT_MAC_LANGID_FINNISH 13 # define TT_MAC_LANGID_GREEK 14 # define TT_MAC_LANGID_ICELANDIC 15 # define TT_MAC_LANGID_MALTESE 16 # define TT_MAC_LANGID_TURKISH 17 # define TT_MAC_LANGID_CROATIAN 18 # define TT_MAC_LANGID_CHINESE_TRADITIONAL 19 # define TT_MAC_LANGID_URDU 20 # define TT_MAC_LANGID_HINDI 21 # define TT_MAC_LANGID_THAI 22 # define TT_MAC_LANGID_KOREAN 23 # define TT_MAC_LANGID_LITHUANIAN 24 # define TT_MAC_LANGID_POLISH 25 # define TT_MAC_LANGID_HUNGARIAN 26 # define TT_MAC_LANGID_ESTONIAN 27 # define TT_MAC_LANGID_LETTISH 28 # define TT_MAC_LANGID_SAAMISK 29 # define TT_MAC_LANGID_FAEROESE 30 # define TT_MAC_LANGID_FARSI 31 # define TT_MAC_LANGID_RUSSIAN 32 # define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33 # define TT_MAC_LANGID_FLEMISH 34 # define TT_MAC_LANGID_IRISH 35 # define TT_MAC_LANGID_ALBANIAN 36 # define TT_MAC_LANGID_ROMANIAN 37 # define TT_MAC_LANGID_CZECH 38 # define TT_MAC_LANGID_SLOVAK 39 # define TT_MAC_LANGID_SLOVENIAN 40 # define TT_MAC_LANGID_YIDDISH 41 # define TT_MAC_LANGID_SERBIAN 42 # define TT_MAC_LANGID_MACEDONIAN 43 # define TT_MAC_LANGID_BULGARIAN 44 # define TT_MAC_LANGID_UKRAINIAN 45 # define TT_MAC_LANGID_BYELORUSSIAN 46 # define TT_MAC_LANGID_UZBEK 47 # define TT_MAC_LANGID_KAZAKH 48 # define TT_MAC_LANGID_AZERBAIJANI 49 # define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49 # define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50 # define TT_MAC_LANGID_ARMENIAN 51 # define TT_MAC_LANGID_GEORGIAN 52 # define TT_MAC_LANGID_MOLDAVIAN 53 # define TT_MAC_LANGID_KIRGHIZ 54 # define TT_MAC_LANGID_TAJIKI 55 # define TT_MAC_LANGID_TURKMEN 56 # define TT_MAC_LANGID_MONGOLIAN 57 # define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57 # define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58 # define TT_MAC_LANGID_PASHTO 59 # define TT_MAC_LANGID_KURDISH 60 # define TT_MAC_LANGID_KASHMIRI 61 # define TT_MAC_LANGID_SINDHI 62 # define TT_MAC_LANGID_TIBETAN 63 # define TT_MAC_LANGID_NEPALI 64 # define TT_MAC_LANGID_SANSKRIT 65 # define TT_MAC_LANGID_MARATHI 66 # define TT_MAC_LANGID_BENGALI 67 # define TT_MAC_LANGID_ASSAMESE 68 # define TT_MAC_LANGID_GUJARATI 69 # define TT_MAC_LANGID_PUNJABI 70 # define TT_MAC_LANGID_ORIYA 71 # define TT_MAC_LANGID_MALAYALAM 72 # define TT_MAC_LANGID_KANNADA 73 # define TT_MAC_LANGID_TAMIL 74 # define TT_MAC_LANGID_TELUGU 75 # define TT_MAC_LANGID_SINHALESE 76 # define TT_MAC_LANGID_BURMESE 77 # define TT_MAC_LANGID_KHMER 78 # define TT_MAC_LANGID_LAO 79 # define TT_MAC_LANGID_VIETNAMESE 80 # define TT_MAC_LANGID_INDONESIAN 81 # define TT_MAC_LANGID_TAGALOG 82 # define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83 # define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84 # define TT_MAC_LANGID_AMHARIC 85 # define TT_MAC_LANGID_TIGRINYA 86 # define TT_MAC_LANGID_GALLA 87 # define TT_MAC_LANGID_SOMALI 88 # define TT_MAC_LANGID_SWAHILI 89 # define TT_MAC_LANGID_RUANDA 90 # define TT_MAC_LANGID_RUNDI 91 # define TT_MAC_LANGID_CHEWA 92 # define TT_MAC_LANGID_MALAGASY 93 # define TT_MAC_LANGID_ESPERANTO 94 # define TT_MAC_LANGID_WELSH 128 # define TT_MAC_LANGID_BASQUE 129 # define TT_MAC_LANGID_CATALAN 130 # define TT_MAC_LANGID_LATIN 131 # define TT_MAC_LANGID_QUECHUA 132 # define TT_MAC_LANGID_GUARANI 133 # define TT_MAC_LANGID_AYMARA 134 # define TT_MAC_LANGID_TATAR 135 # define TT_MAC_LANGID_UIGHUR 136 # define TT_MAC_LANGID_DZONGKHA 137 # define TT_MAC_LANGID_JAVANESE 138 # define TT_MAC_LANGID_SUNDANESE 139 /* The following codes are new as of 2000-03-10 */ # define TT_MAC_LANGID_GALICIAN 140 # define TT_MAC_LANGID_AFRIKAANS 141 # define TT_MAC_LANGID_BRETON 142 # define TT_MAC_LANGID_INUKTITUT 143 # define TT_MAC_LANGID_SCOTTISH_GAELIC 144 # define TT_MAC_LANGID_MANX_GAELIC 145 # define TT_MAC_LANGID_IRISH_GAELIC 146 # define TT_MAC_LANGID_TONGAN 147 # define TT_MAC_LANGID_GREEK_POLYTONIC 148 # define TT_MAC_LANGID_GREELANDIC 149 # define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 Possible values of the language identifier field in the name records of the SFNT name table if the platform identifier code is TT_PLATFORM_MACINTOSH . These values are also used as return values for function FT_Get_CMap_Language_ID . The canonical source for Apple's IDs is https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html TT_MS_LANGID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 # define TT_MS_LANGID_ARABIC_IRAQ 0x0801 # define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 # define TT_MS_LANGID_ARABIC_LIBYA 0x1001 # define TT_MS_LANGID_ARABIC_ALGERIA 0x1401 # define TT_MS_LANGID_ARABIC_MOROCCO 0x1801 # define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01 # define TT_MS_LANGID_ARABIC_OMAN 0x2001 # define TT_MS_LANGID_ARABIC_YEMEN 0x2401 # define TT_MS_LANGID_ARABIC_SYRIA 0x2801 # define TT_MS_LANGID_ARABIC_JORDAN 0x2C01 # define TT_MS_LANGID_ARABIC_LEBANON 0x3001 # define TT_MS_LANGID_ARABIC_KUWAIT 0x3401 # define TT_MS_LANGID_ARABIC_UAE 0x3801 # define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01 # define TT_MS_LANGID_ARABIC_QATAR 0x4001 # define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 # define TT_MS_LANGID_CATALAN_CATALAN 0x0403 # define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 # define TT_MS_LANGID_CHINESE_PRC 0x0804 # define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04 # define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 # define TT_MS_LANGID_CHINESE_MACAO 0x1404 # define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 # define TT_MS_LANGID_DANISH_DENMARK 0x0406 # define TT_MS_LANGID_GERMAN_GERMANY 0x0407 # define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 # define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07 # define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 # define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407 # define TT_MS_LANGID_GREEK_GREECE 0x0408 # define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 # define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 # define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 # define TT_MS_LANGID_ENGLISH_CANADA 0x1009 # define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409 # define TT_MS_LANGID_ENGLISH_IRELAND 0x1809 # define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09 # define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009 # define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409 # define TT_MS_LANGID_ENGLISH_BELIZE 0x2809 # define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09 # define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 # define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 # define TT_MS_LANGID_ENGLISH_INDIA 0x4009 # define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 # define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 # define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A # define TT_MS_LANGID_SPANISH_MEXICO 0x080A # define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A # define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A # define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A # define TT_MS_LANGID_SPANISH_PANAMA 0x180A # define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A # define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A # define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A # define TT_MS_LANGID_SPANISH_PERU 0x280A # define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A # define TT_MS_LANGID_SPANISH_ECUADOR 0x300A # define TT_MS_LANGID_SPANISH_CHILE 0x340A # define TT_MS_LANGID_SPANISH_URUGUAY 0x380A # define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A # define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A # define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A # define TT_MS_LANGID_SPANISH_HONDURAS 0x480A # define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A # define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A # define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A # define TT_MS_LANGID_FINNISH_FINLAND 0x040B # define TT_MS_LANGID_FRENCH_FRANCE 0x040C # define TT_MS_LANGID_FRENCH_BELGIUM 0x080C # define TT_MS_LANGID_FRENCH_CANADA 0x0C0C # define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C # define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C # define TT_MS_LANGID_FRENCH_MONACO 0x180C # define TT_MS_LANGID_HEBREW_ISRAEL 0x040D # define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E # define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F # define TT_MS_LANGID_ITALIAN_ITALY 0x0410 # define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 # define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 # define TT_MS_LANGID_KOREAN_KOREA 0x0412 # define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 # define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 # define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 # define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814 # define TT_MS_LANGID_POLISH_POLAND 0x0415 # define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 # define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 # define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417 # define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 # define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 # define TT_MS_LANGID_CROATIAN_CROATIA 0x041A # define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A # define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A # define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A # define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A # define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A # define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A # define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A # define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B # define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C # define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D # define TT_MS_LANGID_SWEDISH_FINLAND 0x081D # define TT_MS_LANGID_THAI_THAILAND 0x041E # define TT_MS_LANGID_TURKISH_TURKEY 0x041F # define TT_MS_LANGID_URDU_PAKISTAN 0x0420 # define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 # define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 # define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 # define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424 # define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 # define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 # define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 # define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 # define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A # define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B # define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C # define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C # define TT_MS_LANGID_BASQUE_BASQUE 0x042D # define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E # define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E # define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F # define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432 # define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434 # define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435 # define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 # define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 # define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 # define TT_MS_LANGID_HINDI_INDIA 0x0439 # define TT_MS_LANGID_MALTESE_MALTA 0x043A # define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B # define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B # define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B # define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B # define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B # define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B # define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B # define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B # define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B # define TT_MS_LANGID_IRISH_IRELAND 0x083C # define TT_MS_LANGID_MALAY_MALAYSIA 0x043E # define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E # define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F # define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440 # define TT_MS_LANGID_KISWAHILI_KENYA 0x0441 # define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 # define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 # define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 # define TT_MS_LANGID_TATAR_RUSSIA 0x0444 # define TT_MS_LANGID_BENGALI_INDIA 0x0445 # define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 # define TT_MS_LANGID_PUNJABI_INDIA 0x0446 # define TT_MS_LANGID_GUJARATI_INDIA 0x0447 # define TT_MS_LANGID_ODIA_INDIA 0x0448 # define TT_MS_LANGID_TAMIL_INDIA 0x0449 # define TT_MS_LANGID_TELUGU_INDIA 0x044A # define TT_MS_LANGID_KANNADA_INDIA 0x044B # define TT_MS_LANGID_MALAYALAM_INDIA 0x044C # define TT_MS_LANGID_ASSAMESE_INDIA 0x044D # define TT_MS_LANGID_MARATHI_INDIA 0x044E # define TT_MS_LANGID_SANSKRIT_INDIA 0x044F # define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 # define TT_MS_LANGID_MONGOLIAN_PRC 0x0850 # define TT_MS_LANGID_TIBETAN_PRC 0x0451 # define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452 # define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 # define TT_MS_LANGID_LAO_LAOS 0x0454 # define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456 # define TT_MS_LANGID_KONKANI_INDIA 0x0457 # define TT_MS_LANGID_SYRIAC_SYRIA 0x045A # define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B # define TT_MS_LANGID_INUKTITUT_CANADA 0x045D # define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D # define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E # define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F # define TT_MS_LANGID_NEPALI_NEPAL 0x0461 # define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 # define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 # define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 # define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 # define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 # define TT_MS_LANGID_YORUBA_NIGERIA 0x046A # define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B # define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B # define TT_MS_LANGID_QUECHUA_PERU 0x0C6B # define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C # define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D # define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E # define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F # define TT_MS_LANGID_IGBO_NIGERIA 0x0470 # define TT_MS_LANGID_YI_PRC 0x0478 # define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A # define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C # define TT_MS_LANGID_BRETON_FRANCE 0x047E # define TT_MS_LANGID_UIGHUR_PRC 0x0480 # define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 # define TT_MS_LANGID_OCCITAN_FRANCE 0x0482 # define TT_MS_LANGID_CORSICAN_FRANCE 0x0483 # define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484 # define TT_MS_LANGID_YAKUT_RUSSIA 0x0485 # define TT_MS_LANGID_KICHE_GUATEMALA 0x0486 # define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487 # define TT_MS_LANGID_WOLOF_SENEGAL 0x0488 # define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C Possible values of the language identifier field in the name records of the SFNT name table if the platform identifier code is TT_PLATFORM_MICROSOFT . These values are also used as return values for function FT_Get_CMap_Language_ID . The canonical source for Microsoft's IDs is https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings , however, we only provide macros for language identifiers present in the OpenType specification: Microsoft has abandoned the concept of LCIDs (language code identifiers), and format 1 of the name table provides a better mechanism for languages not covered here. More legacy values not listed in the reference can be found in the FT_TRUETYPE_IDS_H header file. TT_NAME_ID_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_NAME_ID_COPYRIGHT 0 # define TT_NAME_ID_FONT_FAMILY 1 # define TT_NAME_ID_FONT_SUBFAMILY 2 # define TT_NAME_ID_UNIQUE_ID 3 # define TT_NAME_ID_FULL_NAME 4 # define TT_NAME_ID_VERSION_STRING 5 # define TT_NAME_ID_PS_NAME 6 # define TT_NAME_ID_TRADEMARK 7 /* the following values are from the OpenType spec */ # define TT_NAME_ID_MANUFACTURER 8 # define TT_NAME_ID_DESIGNER 9 # define TT_NAME_ID_DESCRIPTION 10 # define TT_NAME_ID_VENDOR_URL 11 # define TT_NAME_ID_DESIGNER_URL 12 # define TT_NAME_ID_LICENSE 13 # define TT_NAME_ID_LICENSE_URL 14 /* number 15 is reserved */ # define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16 # define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17 # define TT_NAME_ID_MAC_FULL_NAME 18 /* The following code is new as of 2000-01-21 */ # define TT_NAME_ID_SAMPLE_TEXT 19 /* This is new in OpenType 1.3 */ # define TT_NAME_ID_CID_FINDFONT_NAME 20 /* This is new in OpenType 1.5 */ # define TT_NAME_ID_WWS_FAMILY 21 # define TT_NAME_ID_WWS_SUBFAMILY 22 /* This is new in OpenType 1.7 */ # define TT_NAME_ID_LIGHT_BACKGROUND 23 # define TT_NAME_ID_DARK_BACKGROUND 24 /* This is new in OpenType 1.8 */ # define TT_NAME_ID_VARIATIONS_PREFIX 25 /* these two values are deprecated */ # define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY # define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY Possible values of the name identifier field in the name records of an SFNT name table. These values are platform independent. TT_UCR_XXX Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). /* ulUnicodeRange1 */ /* --------------- */ /* Bit 0 Basic Latin */ # define TT_UCR_BASIC_LATIN (1L 0) /* U+0020-U+007E */ /* Bit 1 C1 Controls and Latin-1 Supplement */ # define TT_UCR_LATIN1_SUPPLEMENT (1L 1) /* U+0080-U+00FF */ /* Bit 2 Latin Extended-A */ # define TT_UCR_LATIN_EXTENDED_A (1L 2) /* U+0100-U+017F */ /* Bit 3 Latin Extended-B */ # define TT_UCR_LATIN_EXTENDED_B (1L 3) /* U+0180-U+024F */ /* Bit 4 IPA Extensions */ /* Phonetic Extensions */ /* Phonetic Extensions Supplement */ # define TT_UCR_IPA_EXTENSIONS (1L 4) /* U+0250-U+02AF */ /* U+1D00-U+1D7F */ /* U+1D80-U+1DBF */ /* Bit 5 Spacing Modifier Letters */ /* Modifier Tone Letters */ # define TT_UCR_SPACING_MODIFIER (1L 5) /* U+02B0-U+02FF */ /* U+A700-U+A71F */ /* Bit 6 Combining Diacritical Marks */ /* Combining Diacritical Marks Supplement */ # define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L 6) /* U+0300-U+036F */ /* U+1DC0-U+1DFF */ /* Bit 7 Greek and Coptic */ # define TT_UCR_GREEK (1L 7) /* U+0370-U+03FF */ /* Bit 8 Coptic */ # define TT_UCR_COPTIC (1L 8) /* U+2C80-U+2CFF */ /* Bit 9 Cyrillic */ /* Cyrillic Supplement */ /* Cyrillic Extended-A */ /* Cyrillic Extended-B */ # define TT_UCR_CYRILLIC (1L 9) /* U+0400-U+04FF */ /* U+0500-U+052F */ /* U+2DE0-U+2DFF */ /* U+A640-U+A69F */ /* Bit 10 Armenian */ # define TT_UCR_ARMENIAN (1L 10) /* U+0530-U+058F */ /* Bit 11 Hebrew */ # define TT_UCR_HEBREW (1L 11) /* U+0590-U+05FF */ /* Bit 12 Vai */ # define TT_UCR_VAI (1L 12) /* U+A500-U+A63F */ /* Bit 13 Arabic */ /* Arabic Supplement */ # define TT_UCR_ARABIC (1L 13) /* U+0600-U+06FF */ /* U+0750-U+077F */ /* Bit 14 NKo */ # define TT_UCR_NKO (1L 14) /* U+07C0-U+07FF */ /* Bit 15 Devanagari */ # define TT_UCR_DEVANAGARI (1L 15) /* U+0900-U+097F */ /* Bit 16 Bengali */ # define TT_UCR_BENGALI (1L 16) /* U+0980-U+09FF */ /* Bit 17 Gurmukhi */ # define TT_UCR_GURMUKHI (1L 17) /* U+0A00-U+0A7F */ /* Bit 18 Gujarati */ # define TT_UCR_GUJARATI (1L 18) /* U+0A80-U+0AFF */ /* Bit 19 Oriya */ # define TT_UCR_ORIYA (1L 19) /* U+0B00-U+0B7F */ /* Bit 20 Tamil */ # define TT_UCR_TAMIL (1L 20) /* U+0B80-U+0BFF */ /* Bit 21 Telugu */ # define TT_UCR_TELUGU (1L 21) /* U+0C00-U+0C7F */ /* Bit 22 Kannada */ # define TT_UCR_KANNADA (1L 22) /* U+0C80-U+0CFF */ /* Bit 23 Malayalam */ # define TT_UCR_MALAYALAM (1L 23) /* U+0D00-U+0D7F */ /* Bit 24 Thai */ # define TT_UCR_THAI (1L 24) /* U+0E00-U+0E7F */ /* Bit 25 Lao */ # define TT_UCR_LAO (1L 25) /* U+0E80-U+0EFF */ /* Bit 26 Georgian */ /* Georgian Supplement */ # define TT_UCR_GEORGIAN (1L 26) /* U+10A0-U+10FF */ /* U+2D00-U+2D2F */ /* Bit 27 Balinese */ # define TT_UCR_BALINESE (1L 27) /* U+1B00-U+1B7F */ /* Bit 28 Hangul Jamo */ # define TT_UCR_HANGUL_JAMO (1L 28) /* U+1100-U+11FF */ /* Bit 29 Latin Extended Additional */ /* Latin Extended-C */ /* Latin Extended-D */ # define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L 29) /* U+1E00-U+1EFF */ /* U+2C60-U+2C7F */ /* U+A720-U+A7FF */ /* Bit 30 Greek Extended */ # define TT_UCR_GREEK_EXTENDED (1L 30) /* U+1F00-U+1FFF */ /* Bit 31 General Punctuation */ /* Supplemental Punctuation */ # define TT_UCR_GENERAL_PUNCTUATION (1L 31) /* U+2000-U+206F */ /* U+2E00-U+2E7F */ /* ulUnicodeRange2 */ /* --------------- */ /* Bit 32 Superscripts And Subscripts */ # define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L 0) /* U+2070-U+209F */ /* Bit 33 Currency Symbols */ # define TT_UCR_CURRENCY_SYMBOLS (1L 1) /* U+20A0-U+20CF */ /* Bit 34 Combining Diacritical Marks For Symbols */ # define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \\ (1L 2) /* U+20D0-U+20FF */ /* Bit 35 Letterlike Symbols */ # define TT_UCR_LETTERLIKE_SYMBOLS (1L 3) /* U+2100-U+214F */ /* Bit 36 Number Forms */ # define TT_UCR_NUMBER_FORMS (1L 4) /* U+2150-U+218F */ /* Bit 37 Arrows */ /* Supplemental Arrows-A */ /* Supplemental Arrows-B */ /* Miscellaneous Symbols and Arrows */ # define TT_UCR_ARROWS (1L 5) /* U+2190-U+21FF */ /* U+27F0-U+27FF */ /* U+2900-U+297F */ /* U+2B00-U+2BFF */ /* Bit 38 Mathematical Operators */ /* Supplemental Mathematical Operators */ /* Miscellaneous Mathematical Symbols-A */ /* Miscellaneous Mathematical Symbols-B */ # define TT_UCR_MATHEMATICAL_OPERATORS (1L 6) /* U+2200-U+22FF */ /* U+2A00-U+2AFF */ /* U+27C0-U+27EF */ /* U+2980-U+29FF */ /* Bit 39 Miscellaneous Technical */ # define TT_UCR_MISCELLANEOUS_TECHNICAL (1L 7) /* U+2300-U+23FF */ /* Bit 40 Control Pictures */ # define TT_UCR_CONTROL_PICTURES (1L 8) /* U+2400-U+243F */ /* Bit 41 Optical Character Recognition */ # define TT_UCR_OCR (1L 9) /* U+2440-U+245F */ /* Bit 42 Enclosed Alphanumerics */ # define TT_UCR_ENCLOSED_ALPHANUMERICS (1L 10) /* U+2460-U+24FF */ /* Bit 43 Box Drawing */ # define TT_UCR_BOX_DRAWING (1L 11) /* U+2500-U+257F */ /* Bit 44 Block Elements */ # define TT_UCR_BLOCK_ELEMENTS (1L 12) /* U+2580-U+259F */ /* Bit 45 Geometric Shapes */ # define TT_UCR_GEOMETRIC_SHAPES (1L 13) /* U+25A0-U+25FF */ /* Bit 46 Miscellaneous Symbols */ # define TT_UCR_MISCELLANEOUS_SYMBOLS (1L 14) /* U+2600-U+26FF */ /* Bit 47 Dingbats */ # define TT_UCR_DINGBATS (1L 15) /* U+2700-U+27BF */ /* Bit 48 CJK Symbols and Punctuation */ # define TT_UCR_CJK_SYMBOLS (1L 16) /* U+3000-U+303F */ /* Bit 49 Hiragana */ # define TT_UCR_HIRAGANA (1L 17) /* U+3040-U+309F */ /* Bit 50 Katakana */ /* Katakana Phonetic Extensions */ # define TT_UCR_KATAKANA (1L 18) /* U+30A0-U+30FF */ /* U+31F0-U+31FF */ /* Bit 51 Bopomofo */ /* Bopomofo Extended */ # define TT_UCR_BOPOMOFO (1L 19) /* U+3100-U+312F */ /* U+31A0-U+31BF */ /* Bit 52 Hangul Compatibility Jamo */ # define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L 20) /* U+3130-U+318F */ /* Bit 53 Phags-Pa */ # define TT_UCR_CJK_MISC (1L 21) /* U+A840-U+A87F */ # define TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */ # define TT_UCR_PHAGSPA /* Bit 54 Enclosed CJK Letters and Months */ # define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L 22) /* U+3200-U+32FF */ /* Bit 55 CJK Compatibility */ # define TT_UCR_CJK_COMPATIBILITY (1L 23) /* U+3300-U+33FF */ /* Bit 56 Hangul Syllables */ # define TT_UCR_HANGUL (1L 24) /* U+AC00-U+D7A3 */ /* Bit 57 High Surrogates */ /* High Private Use Surrogates */ /* Low Surrogates */ /* According to OpenType specs v.1.3+, */ /* setting bit 57 implies that there is */ /* at least one codepoint beyond the */ /* Basic Multilingual Plane that is */ /* supported by this font. So it really */ /* means = U+10000. */ # define TT_UCR_SURROGATES (1L 25) /* U+D800-U+DB7F */ /* U+DB80-U+DBFF */ /* U+DC00-U+DFFF */ # define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES /* Bit 58 Phoenician */ # define TT_UCR_PHOENICIAN (1L 26) /*U+10900-U+1091F*/ /* Bit 59 CJK Unified Ideographs */ /* CJK Radicals Supplement */ /* Kangxi Radicals */ /* Ideographic Description Characters */ /* CJK Unified Ideographs Extension A */ /* CJK Unified Ideographs Extension B */ /* Kanbun */ # define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L 27) /* U+4E00-U+9FFF */ /* U+2E80-U+2EFF */ /* U+2F00-U+2FDF */ /* U+2FF0-U+2FFF */ /* U+3400-U+4DB5 */ /*U+20000-U+2A6DF*/ /* U+3190-U+319F */ /* Bit 60 Private Use */ # define TT_UCR_PRIVATE_USE (1L 28) /* U+E000-U+F8FF */ /* Bit 61 CJK Strokes */ /* CJK Compatibility Ideographs */ /* CJK Compatibility Ideographs Supplement */ # define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L 29) /* U+31C0-U+31EF */ /* U+F900-U+FAFF */ /*U+2F800-U+2FA1F*/ /* Bit 62 Alphabetic Presentation Forms */ # define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L 30) /* U+FB00-U+FB4F */ /* Bit 63 Arabic Presentation Forms-A */ # define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L 31) /* U+FB50-U+FDFF */ /* ulUnicodeRange3 */ /* --------------- */ /* Bit 64 Combining Half Marks */ # define TT_UCR_COMBINING_HALF_MARKS (1L 0) /* U+FE20-U+FE2F */ /* Bit 65 Vertical forms */ /* CJK Compatibility Forms */ # define TT_UCR_CJK_COMPATIBILITY_FORMS (1L 1) /* U+FE10-U+FE1F */ /* U+FE30-U+FE4F */ /* Bit 66 Small Form Variants */ # define TT_UCR_SMALL_FORM_VARIANTS (1L 2) /* U+FE50-U+FE6F */ /* Bit 67 Arabic Presentation Forms-B */ # define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L 3) /* U+FE70-U+FEFE */ /* Bit 68 Halfwidth and Fullwidth Forms */ # define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L 4) /* U+FF00-U+FFEF */ /* Bit 69 Specials */ # define TT_UCR_SPECIALS (1L 5) /* U+FFF0-U+FFFD */ /* Bit 70 Tibetan */ # define TT_UCR_TIBETAN (1L 6) /* U+0F00-U+0FFF */ /* Bit 71 Syriac */ # define TT_UCR_SYRIAC (1L 7) /* U+0700-U+074F */ /* Bit 72 Thaana */ # define TT_UCR_THAANA (1L 8) /* U+0780-U+07BF */ /* Bit 73 Sinhala */ # define TT_UCR_SINHALA (1L 9) /* U+0D80-U+0DFF */ /* Bit 74 Myanmar */ # define TT_UCR_MYANMAR (1L 10) /* U+1000-U+109F */ /* Bit 75 Ethiopic */ /* Ethiopic Supplement */ /* Ethiopic Extended */ # define TT_UCR_ETHIOPIC (1L 11) /* U+1200-U+137F */ /* U+1380-U+139F */ /* U+2D80-U+2DDF */ /* Bit 76 Cherokee */ # define TT_UCR_CHEROKEE (1L 12) /* U+13A0-U+13FF */ /* Bit 77 Unified Canadian Aboriginal Syllabics */ # define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L 13) /* U+1400-U+167F */ /* Bit 78 Ogham */ # define TT_UCR_OGHAM (1L 14) /* U+1680-U+169F */ /* Bit 79 Runic */ # define TT_UCR_RUNIC (1L 15) /* U+16A0-U+16FF */ /* Bit 80 Khmer */ /* Khmer Symbols */ # define TT_UCR_KHMER (1L 16) /* U+1780-U+17FF */ /* U+19E0-U+19FF */ /* Bit 81 Mongolian */ # define TT_UCR_MONGOLIAN (1L 17) /* U+1800-U+18AF */ /* Bit 82 Braille Patterns */ # define TT_UCR_BRAILLE (1L 18) /* U+2800-U+28FF */ /* Bit 83 Yi Syllables */ /* Yi Radicals */ # define TT_UCR_YI (1L 19) /* U+A000-U+A48F */ /* U+A490-U+A4CF */ /* Bit 84 Tagalog */ /* Hanunoo */ /* Buhid */ /* Tagbanwa */ # define TT_UCR_PHILIPPINE (1L 20) /* U+1700-U+171F */ /* U+1720-U+173F */ /* U+1740-U+175F */ /* U+1760-U+177F */ /* Bit 85 Old Italic */ # define TT_UCR_OLD_ITALIC (1L 21) /*U+10300-U+1032F*/ /* Bit 86 Gothic */ # define TT_UCR_GOTHIC (1L 22) /*U+10330-U+1034F*/ /* Bit 87 Deseret */ # define TT_UCR_DESERET (1L 23) /*U+10400-U+1044F*/ /* Bit 88 Byzantine Musical Symbols */ /* Musical Symbols */ /* Ancient Greek Musical Notation */ # define TT_UCR_MUSICAL_SYMBOLS (1L 24) /*U+1D000-U+1D0FF*/ /*U+1D100-U+1D1FF*/ /*U+1D200-U+1D24F*/ /* Bit 89 Mathematical Alphanumeric Symbols */ # define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L 25) /*U+1D400-U+1D7FF*/ /* Bit 90 Private Use (plane 15) */ /* Private Use (plane 16) */ # define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L 26) /*U+F0000-U+FFFFD*/ /*U+100000-U+10FFFD*/ /* Bit 91 Variation Selectors */ /* Variation Selectors Supplement */ # define TT_UCR_VARIATION_SELECTORS (1L 27) /* U+FE00-U+FE0F */ /*U+E0100-U+E01EF*/ /* Bit 92 Tags */ # define TT_UCR_TAGS (1L 28) /*U+E0000-U+E007F*/ /* Bit 93 Limbu */ # define TT_UCR_LIMBU (1L 29) /* U+1900-U+194F */ /* Bit 94 Tai Le */ # define TT_UCR_TAI_LE (1L 30) /* U+1950-U+197F */ /* Bit 95 New Tai Lue */ # define TT_UCR_NEW_TAI_LUE (1L 31) /* U+1980-U+19DF */ /* ulUnicodeRange4 */ /* --------------- */ /* Bit 96 Buginese */ # define TT_UCR_BUGINESE (1L 0) /* U+1A00-U+1A1F */ /* Bit 97 Glagolitic */ # define TT_UCR_GLAGOLITIC (1L 1) /* U+2C00-U+2C5F */ /* Bit 98 Tifinagh */ # define TT_UCR_TIFINAGH (1L 2) /* U+2D30-U+2D7F */ /* Bit 99 Yijing Hexagram Symbols */ # define TT_UCR_YIJING (1L 3) /* U+4DC0-U+4DFF */ /* Bit 100 Syloti Nagri */ # define TT_UCR_SYLOTI_NAGRI (1L 4) /* U+A800-U+A82F */ /* Bit 101 Linear B Syllabary */ /* Linear B Ideograms */ /* Aegean Numbers */ # define TT_UCR_LINEAR_B (1L 5) /*U+10000-U+1007F*/ /*U+10080-U+100FF*/ /*U+10100-U+1013F*/ /* Bit 102 Ancient Greek Numbers */ # define TT_UCR_ANCIENT_GREEK_NUMBERS (1L 6) /*U+10140-U+1018F*/ /* Bit 103 Ugaritic */ # define TT_UCR_UGARITIC (1L 7) /*U+10380-U+1039F*/ /* Bit 104 Old Persian */ # define TT_UCR_OLD_PERSIAN (1L 8) /*U+103A0-U+103DF*/ /* Bit 105 Shavian */ # define TT_UCR_SHAVIAN (1L 9) /*U+10450-U+1047F*/ /* Bit 106 Osmanya */ # define TT_UCR_OSMANYA (1L 10) /*U+10480-U+104AF*/ /* Bit 107 Cypriot Syllabary */ # define TT_UCR_CYPRIOT_SYLLABARY (1L 11) /*U+10800-U+1083F*/ /* Bit 108 Kharoshthi */ # define TT_UCR_KHAROSHTHI (1L 12) /*U+10A00-U+10A5F*/ /* Bit 109 Tai Xuan Jing Symbols */ # define TT_UCR_TAI_XUAN_JING (1L 13) /*U+1D300-U+1D35F*/ /* Bit 110 Cuneiform */ /* Cuneiform Numbers and Punctuation */ # define TT_UCR_CUNEIFORM (1L 14) /*U+12000-U+123FF*/ /*U+12400-U+1247F*/ /* Bit 111 Counting Rod Numerals */ # define TT_UCR_COUNTING_ROD_NUMERALS (1L 15) /*U+1D360-U+1D37F*/ /* Bit 112 Sundanese */ # define TT_UCR_SUNDANESE (1L 16) /* U+1B80-U+1BBF */ /* Bit 113 Lepcha */ # define TT_UCR_LEPCHA (1L 17) /* U+1C00-U+1C4F */ /* Bit 114 Ol Chiki */ # define TT_UCR_OL_CHIKI (1L 18) /* U+1C50-U+1C7F */ /* Bit 115 Saurashtra */ # define TT_UCR_SAURASHTRA (1L 19) /* U+A880-U+A8DF */ /* Bit 116 Kayah Li */ # define TT_UCR_KAYAH_LI (1L 20) /* U+A900-U+A92F */ /* Bit 117 Rejang */ # define TT_UCR_REJANG (1L 21) /* U+A930-U+A95F */ /* Bit 118 Cham */ # define TT_UCR_CHAM (1L 22) /* U+AA00-U+AA5F */ /* Bit 119 Ancient Symbols */ # define TT_UCR_ANCIENT_SYMBOLS (1L 23) /*U+10190-U+101CF*/ /* Bit 120 Phaistos Disc */ # define TT_UCR_PHAISTOS_DISC (1L 24) /*U+101D0-U+101FF*/ /* Bit 121 Carian */ /* Lycian */ /* Lydian */ # define TT_UCR_OLD_ANATOLIAN (1L 25) /*U+102A0-U+102DF*/ /*U+10280-U+1029F*/ /*U+10920-U+1093F*/ /* Bit 122 Domino Tiles */ /* Mahjong Tiles */ # define TT_UCR_GAME_TILES (1L 26) /*U+1F030-U+1F09F*/ /*U+1F000-U+1F02F*/ /* Bit 123-127 Reserved for process-internal usage */ Possible bit mask values for the ulUnicodeRangeX fields in an SFNT OS/2 table.","title":"TrueType Tables"},{"location":"ft2-truetype_tables.html#truetype-tables","text":"","title":"TrueType Tables"},{"location":"ft2-truetype_tables.html#synopsis","text":"This section contains definitions of some basic tables specific to TrueType and OpenType as well as some routines used to access and process them.","title":"Synopsis"},{"location":"ft2-truetype_tables.html#tt_header","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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_ULong Created [2]; FT_ULong 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 ; A structure to model a TrueType font header table. All fields follow the OpenType specification. The 64-bit timestamps are stored in two-element arrays Created and Modified , first the upper then the lower 32 bits.","title":"TT_Header"},{"location":"ft2-truetype_tables.html#tt_horiheader","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_HoriHeader_ { FT_Fixed Version; FT_Short Ascender; FT_Short Descender; FT_Short Line_Gap; FT_UShort advance_Width_Max; /* advance width maximum */ FT_Short min_Left_Side_Bearing; /* minimum left-sb */ FT_Short min_Right_Side_Bearing; /* minimum right-sb */ FT_Short xMax_Extent; /* xmax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; FT_Short Reserved[4]; FT_Short metric_Data_Format; FT_UShort number_Of_HMetrics; /* The following fields are not defined by the OpenType specification */ /* but they are used to connect the metrics header to the relevant */ /* 'hmtx' table. */ void * long_metrics; void * short_metrics; } TT_HoriHeader ; A structure to model a TrueType horizontal header, the hhea table, as well as the corresponding horizontal metrics table, hmtx .","title":"TT_HoriHeader"},{"location":"ft2-truetype_tables.html#tt_vertheader","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_VertHeader_ { FT_Fixed Version; FT_Short Ascender; FT_Short Descender; FT_Short Line_Gap; FT_UShort advance_Height_Max; /* advance height maximum */ FT_Short min_Top_Side_Bearing; /* minimum top-sb */ FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */ FT_Short yMax_Extent; /* ymax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; FT_Short Reserved[4]; FT_Short metric_Data_Format; FT_UShort number_Of_VMetrics; /* The following fields are not defined by the OpenType specification */ /* but they are used to connect the metrics header to the relevant */ /* 'vmtx' table. */ void * long_metrics; void * short_metrics; } TT_VertHeader ; A structure used to model a TrueType vertical header, the vhea table, as well as the corresponding vertical metrics table, vmtx .","title":"TT_VertHeader"},{"location":"ft2-truetype_tables.html#tt_os2","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_OS2_ { FT_UShort version; /* 0x0001 - more or 0xFFFF */ FT_Short xAvgCharWidth; FT_UShort usWeightClass; FT_UShort usWidthClass; FT_UShort fsType; FT_Short ySubscriptXSize; FT_Short ySubscriptYSize; FT_Short ySubscriptXOffset; FT_Short ySubscriptYOffset; FT_Short ySuperscriptXSize; FT_Short ySuperscriptYSize; FT_Short ySuperscriptXOffset; FT_Short ySuperscriptYOffset; FT_Short yStrikeoutSize; FT_Short yStrikeoutPosition; FT_Short sFamilyClass; FT_Byte panose[10]; FT_ULong ulUnicodeRange1; /* Bits 0-31 */ FT_ULong ulUnicodeRange2; /* Bits 32-63 */ FT_ULong ulUnicodeRange3; /* Bits 64-95 */ FT_ULong ulUnicodeRange4; /* Bits 96-127 */ FT_Char achVendID[4]; FT_UShort fsSelection; FT_UShort usFirstCharIndex; FT_UShort usLastCharIndex; FT_Short sTypoAscender; FT_Short sTypoDescender; FT_Short sTypoLineGap; FT_UShort usWinAscent; FT_UShort usWinDescent; /* only version 1 and higher: */ FT_ULong ulCodePageRange1; /* Bits 0-31 */ FT_ULong ulCodePageRange2; /* Bits 32-63 */ /* only version 2 and higher: */ FT_Short sxHeight; FT_Short sCapHeight; FT_UShort usDefaultChar; FT_UShort usBreakChar; FT_UShort usMaxContext; /* only version 5 and higher: */ FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ } TT_OS2 ; A structure to model a TrueType OS/2 table. All fields comply to the OpenType specification. Note that we now support old Mac fonts that do not include an OS/2 table. In this case, the version field is always set to 0xFFFF.","title":"TT_OS2"},{"location":"ft2-truetype_tables.html#tt_postscript","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef struct TT_Postscript_ { FT_Fixed FormatType; FT_Fixed italicAngle; FT_Short underlinePosition; FT_Short underlineThickness; FT_ULong isFixedPitch; FT_ULong minMemType42; FT_ULong maxMemType42; FT_ULong minMemType1; FT_ULong maxMemType1; /* Glyph names follow in the 'post' table, but we don't */ /* load them by default. */ } TT_Postscript ; A structure to model a TrueType post table. All fields comply to the OpenType specification. This structure does not reference a font's PostScript glyph names; use FT_Get_Glyph_Name to retrieve them.","title":"TT_Postscript"},{"location":"ft2-truetype_tables.html#tt_pclt","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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 ; A structure to model a TrueType PCLT table. All fields comply to the OpenType specification.","title":"TT_PCLT"},{"location":"ft2-truetype_tables.html#tt_maxprofile","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). 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 ; The maximum profile ( maxp ) table contains many max values, which can be used to pre-allocate arrays for speeding up glyph loading and hinting.","title":"TT_MaxProfile"},{"location":"ft2-truetype_tables.html#ft_sfnt_tag","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). typedef enum FT_Sfnt_Tag_ { FT_SFNT_HEAD , FT_SFNT_MAXP , FT_SFNT_OS2 , FT_SFNT_HHEA , FT_SFNT_VHEA , FT_SFNT_POST , FT_SFNT_PCLT , FT_SFNT_MAX } FT_Sfnt_Tag ; /* these constants are deprecated; use the corresponding ` FT_Sfnt_Tag ` */ /* values instead */ # define ft_sfnt_head FT_SFNT_HEAD # define ft_sfnt_maxp FT_SFNT_MAXP # define ft_sfnt_os2 FT_SFNT_OS2 # define ft_sfnt_hhea FT_SFNT_HHEA # define ft_sfnt_vhea FT_SFNT_VHEA # define ft_sfnt_post FT_SFNT_POST # define ft_sfnt_pclt FT_SFNT_PCLT An enumeration to specify indices of SFNT tables loaded and parsed by FreeType during initialization of an SFNT font. Used in the FT_Get_Sfnt_Table API function.","title":"FT_Sfnt_Tag"},{"location":"ft2-truetype_tables.html#ft_get_sfnt_table","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( void * ) FT_Get_Sfnt_Table ( FT_Face face, FT_Sfnt_Tag tag ); Return a pointer to a given SFNT table stored within a face.","title":"FT_Get_Sfnt_Table"},{"location":"ft2-truetype_tables.html#ft_load_sfnt_table","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Error ) FT_Load_Sfnt_Table ( FT_Face face, FT_ULong tag, FT_Long offset, FT_Byte * buffer, FT_ULong * length ); Load any SFNT font table into client memory.","title":"FT_Load_Sfnt_Table"},{"location":"ft2-truetype_tables.html#ft_sfnt_table_info","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Error ) FT_Sfnt_Table_Info ( FT_Face face, FT_UInt table_index, FT_ULong *tag, FT_ULong *length ); Return information on an SFNT table.","title":"FT_Sfnt_Table_Info"},{"location":"ft2-truetype_tables.html#ft_get_cmap_language_id","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_ULong ) FT_Get_CMap_Language_ID ( FT_CharMap charmap ); Return cmap language ID as specified in the OpenType standard. Definitions of language ID values are in file FT_TRUETYPE_IDS_H .","title":"FT_Get_CMap_Language_ID"},{"location":"ft2-truetype_tables.html#ft_get_cmap_format","text":"Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h). FT_EXPORT( FT_Long ) FT_Get_CMap_Format ( FT_CharMap charmap ); Return the format of an SFNT cmap table.","title":"FT_Get_CMap_Format"},{"location":"ft2-truetype_tables.html#ft_param_tag_unpatented_hinting","text":"# define FT_PARAM_TAG_UNPATENTED_HINTING \\ FT_MAKE_TAG ( 'u', 'n', 'p', 'a' ) Deprecated, no effect. Previously: A constant used as the tag of an FT_Parameter structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by FT_Open_Face .","title":"FT_PARAM_TAG_UNPATENTED_HINTING"},{"location":"ft2-truetype_tables.html#tt_platform_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 */ A list of valid values for the platform_id identifier code in FT_CharMapRec and FT_SfntName structures.","title":"TT_PLATFORM_XXX"},{"location":"ft2-truetype_tables.html#tt_apple_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ # define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ # define TT_APPLE_ID_ISO_10646 2 /* deprecated */ # define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ # define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ # define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ # define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */ A list of valid values for the encoding_id for TT_PLATFORM_APPLE_UNICODE charmaps and name entries.","title":"TT_APPLE_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_mac_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 A list of valid values for the encoding_id for TT_PLATFORM_MACINTOSH charmaps and name entries.","title":"TT_MAC_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_iso_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_ISO_ID_7BIT_ASCII 0 # define TT_ISO_ID_10646 1 # define TT_ISO_ID_8859_1 2 A list of valid values for the encoding_id for TT_PLATFORM_ISO charmaps and name entries. Their use is now deprecated.","title":"TT_ISO_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_ms_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MS_ID_SYMBOL_CS 0 # define TT_MS_ID_UNICODE_CS 1 # define TT_MS_ID_SJIS 2 # define TT_MS_ID_PRC 3 # define TT_MS_ID_BIG_5 4 # define TT_MS_ID_WANSUNG 5 # define TT_MS_ID_JOHAB 6 # define TT_MS_ID_UCS_4 10 /* this value is deprecated */ # define TT_MS_ID_GB2312 TT_MS_ID_PRC A list of valid values for the encoding_id for TT_PLATFORM_MICROSOFT charmaps and name entries.","title":"TT_MS_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_adobe_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # 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 A list of valid values for the encoding_id for TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension!","title":"TT_ADOBE_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_mac_langid_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MAC_LANGID_ENGLISH 0 # define TT_MAC_LANGID_FRENCH 1 # define TT_MAC_LANGID_GERMAN 2 # define TT_MAC_LANGID_ITALIAN 3 # define TT_MAC_LANGID_DUTCH 4 # define TT_MAC_LANGID_SWEDISH 5 # define TT_MAC_LANGID_SPANISH 6 # define TT_MAC_LANGID_DANISH 7 # define TT_MAC_LANGID_PORTUGUESE 8 # define TT_MAC_LANGID_NORWEGIAN 9 # define TT_MAC_LANGID_HEBREW 10 # define TT_MAC_LANGID_JAPANESE 11 # define TT_MAC_LANGID_ARABIC 12 # define TT_MAC_LANGID_FINNISH 13 # define TT_MAC_LANGID_GREEK 14 # define TT_MAC_LANGID_ICELANDIC 15 # define TT_MAC_LANGID_MALTESE 16 # define TT_MAC_LANGID_TURKISH 17 # define TT_MAC_LANGID_CROATIAN 18 # define TT_MAC_LANGID_CHINESE_TRADITIONAL 19 # define TT_MAC_LANGID_URDU 20 # define TT_MAC_LANGID_HINDI 21 # define TT_MAC_LANGID_THAI 22 # define TT_MAC_LANGID_KOREAN 23 # define TT_MAC_LANGID_LITHUANIAN 24 # define TT_MAC_LANGID_POLISH 25 # define TT_MAC_LANGID_HUNGARIAN 26 # define TT_MAC_LANGID_ESTONIAN 27 # define TT_MAC_LANGID_LETTISH 28 # define TT_MAC_LANGID_SAAMISK 29 # define TT_MAC_LANGID_FAEROESE 30 # define TT_MAC_LANGID_FARSI 31 # define TT_MAC_LANGID_RUSSIAN 32 # define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33 # define TT_MAC_LANGID_FLEMISH 34 # define TT_MAC_LANGID_IRISH 35 # define TT_MAC_LANGID_ALBANIAN 36 # define TT_MAC_LANGID_ROMANIAN 37 # define TT_MAC_LANGID_CZECH 38 # define TT_MAC_LANGID_SLOVAK 39 # define TT_MAC_LANGID_SLOVENIAN 40 # define TT_MAC_LANGID_YIDDISH 41 # define TT_MAC_LANGID_SERBIAN 42 # define TT_MAC_LANGID_MACEDONIAN 43 # define TT_MAC_LANGID_BULGARIAN 44 # define TT_MAC_LANGID_UKRAINIAN 45 # define TT_MAC_LANGID_BYELORUSSIAN 46 # define TT_MAC_LANGID_UZBEK 47 # define TT_MAC_LANGID_KAZAKH 48 # define TT_MAC_LANGID_AZERBAIJANI 49 # define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49 # define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50 # define TT_MAC_LANGID_ARMENIAN 51 # define TT_MAC_LANGID_GEORGIAN 52 # define TT_MAC_LANGID_MOLDAVIAN 53 # define TT_MAC_LANGID_KIRGHIZ 54 # define TT_MAC_LANGID_TAJIKI 55 # define TT_MAC_LANGID_TURKMEN 56 # define TT_MAC_LANGID_MONGOLIAN 57 # define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57 # define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58 # define TT_MAC_LANGID_PASHTO 59 # define TT_MAC_LANGID_KURDISH 60 # define TT_MAC_LANGID_KASHMIRI 61 # define TT_MAC_LANGID_SINDHI 62 # define TT_MAC_LANGID_TIBETAN 63 # define TT_MAC_LANGID_NEPALI 64 # define TT_MAC_LANGID_SANSKRIT 65 # define TT_MAC_LANGID_MARATHI 66 # define TT_MAC_LANGID_BENGALI 67 # define TT_MAC_LANGID_ASSAMESE 68 # define TT_MAC_LANGID_GUJARATI 69 # define TT_MAC_LANGID_PUNJABI 70 # define TT_MAC_LANGID_ORIYA 71 # define TT_MAC_LANGID_MALAYALAM 72 # define TT_MAC_LANGID_KANNADA 73 # define TT_MAC_LANGID_TAMIL 74 # define TT_MAC_LANGID_TELUGU 75 # define TT_MAC_LANGID_SINHALESE 76 # define TT_MAC_LANGID_BURMESE 77 # define TT_MAC_LANGID_KHMER 78 # define TT_MAC_LANGID_LAO 79 # define TT_MAC_LANGID_VIETNAMESE 80 # define TT_MAC_LANGID_INDONESIAN 81 # define TT_MAC_LANGID_TAGALOG 82 # define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83 # define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84 # define TT_MAC_LANGID_AMHARIC 85 # define TT_MAC_LANGID_TIGRINYA 86 # define TT_MAC_LANGID_GALLA 87 # define TT_MAC_LANGID_SOMALI 88 # define TT_MAC_LANGID_SWAHILI 89 # define TT_MAC_LANGID_RUANDA 90 # define TT_MAC_LANGID_RUNDI 91 # define TT_MAC_LANGID_CHEWA 92 # define TT_MAC_LANGID_MALAGASY 93 # define TT_MAC_LANGID_ESPERANTO 94 # define TT_MAC_LANGID_WELSH 128 # define TT_MAC_LANGID_BASQUE 129 # define TT_MAC_LANGID_CATALAN 130 # define TT_MAC_LANGID_LATIN 131 # define TT_MAC_LANGID_QUECHUA 132 # define TT_MAC_LANGID_GUARANI 133 # define TT_MAC_LANGID_AYMARA 134 # define TT_MAC_LANGID_TATAR 135 # define TT_MAC_LANGID_UIGHUR 136 # define TT_MAC_LANGID_DZONGKHA 137 # define TT_MAC_LANGID_JAVANESE 138 # define TT_MAC_LANGID_SUNDANESE 139 /* The following codes are new as of 2000-03-10 */ # define TT_MAC_LANGID_GALICIAN 140 # define TT_MAC_LANGID_AFRIKAANS 141 # define TT_MAC_LANGID_BRETON 142 # define TT_MAC_LANGID_INUKTITUT 143 # define TT_MAC_LANGID_SCOTTISH_GAELIC 144 # define TT_MAC_LANGID_MANX_GAELIC 145 # define TT_MAC_LANGID_IRISH_GAELIC 146 # define TT_MAC_LANGID_TONGAN 147 # define TT_MAC_LANGID_GREEK_POLYTONIC 148 # define TT_MAC_LANGID_GREELANDIC 149 # define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 Possible values of the language identifier field in the name records of the SFNT name table if the platform identifier code is TT_PLATFORM_MACINTOSH . These values are also used as return values for function FT_Get_CMap_Language_ID . The canonical source for Apple's IDs is https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html","title":"TT_MAC_LANGID_XXX"},{"location":"ft2-truetype_tables.html#tt_ms_langid_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 # define TT_MS_LANGID_ARABIC_IRAQ 0x0801 # define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 # define TT_MS_LANGID_ARABIC_LIBYA 0x1001 # define TT_MS_LANGID_ARABIC_ALGERIA 0x1401 # define TT_MS_LANGID_ARABIC_MOROCCO 0x1801 # define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01 # define TT_MS_LANGID_ARABIC_OMAN 0x2001 # define TT_MS_LANGID_ARABIC_YEMEN 0x2401 # define TT_MS_LANGID_ARABIC_SYRIA 0x2801 # define TT_MS_LANGID_ARABIC_JORDAN 0x2C01 # define TT_MS_LANGID_ARABIC_LEBANON 0x3001 # define TT_MS_LANGID_ARABIC_KUWAIT 0x3401 # define TT_MS_LANGID_ARABIC_UAE 0x3801 # define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01 # define TT_MS_LANGID_ARABIC_QATAR 0x4001 # define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 # define TT_MS_LANGID_CATALAN_CATALAN 0x0403 # define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 # define TT_MS_LANGID_CHINESE_PRC 0x0804 # define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04 # define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 # define TT_MS_LANGID_CHINESE_MACAO 0x1404 # define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 # define TT_MS_LANGID_DANISH_DENMARK 0x0406 # define TT_MS_LANGID_GERMAN_GERMANY 0x0407 # define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 # define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07 # define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 # define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407 # define TT_MS_LANGID_GREEK_GREECE 0x0408 # define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 # define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 # define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 # define TT_MS_LANGID_ENGLISH_CANADA 0x1009 # define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409 # define TT_MS_LANGID_ENGLISH_IRELAND 0x1809 # define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09 # define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009 # define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409 # define TT_MS_LANGID_ENGLISH_BELIZE 0x2809 # define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09 # define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 # define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 # define TT_MS_LANGID_ENGLISH_INDIA 0x4009 # define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 # define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 # define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A # define TT_MS_LANGID_SPANISH_MEXICO 0x080A # define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A # define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A # define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A # define TT_MS_LANGID_SPANISH_PANAMA 0x180A # define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A # define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A # define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A # define TT_MS_LANGID_SPANISH_PERU 0x280A # define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A # define TT_MS_LANGID_SPANISH_ECUADOR 0x300A # define TT_MS_LANGID_SPANISH_CHILE 0x340A # define TT_MS_LANGID_SPANISH_URUGUAY 0x380A # define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A # define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A # define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A # define TT_MS_LANGID_SPANISH_HONDURAS 0x480A # define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A # define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A # define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A # define TT_MS_LANGID_FINNISH_FINLAND 0x040B # define TT_MS_LANGID_FRENCH_FRANCE 0x040C # define TT_MS_LANGID_FRENCH_BELGIUM 0x080C # define TT_MS_LANGID_FRENCH_CANADA 0x0C0C # define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C # define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C # define TT_MS_LANGID_FRENCH_MONACO 0x180C # define TT_MS_LANGID_HEBREW_ISRAEL 0x040D # define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E # define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F # define TT_MS_LANGID_ITALIAN_ITALY 0x0410 # define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 # define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 # define TT_MS_LANGID_KOREAN_KOREA 0x0412 # define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 # define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 # define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 # define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814 # define TT_MS_LANGID_POLISH_POLAND 0x0415 # define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 # define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 # define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417 # define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 # define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 # define TT_MS_LANGID_CROATIAN_CROATIA 0x041A # define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A # define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A # define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A # define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A # define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A # define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A # define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A # define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B # define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C # define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D # define TT_MS_LANGID_SWEDISH_FINLAND 0x081D # define TT_MS_LANGID_THAI_THAILAND 0x041E # define TT_MS_LANGID_TURKISH_TURKEY 0x041F # define TT_MS_LANGID_URDU_PAKISTAN 0x0420 # define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 # define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 # define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 # define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424 # define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 # define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 # define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 # define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 # define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A # define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B # define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C # define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C # define TT_MS_LANGID_BASQUE_BASQUE 0x042D # define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E # define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E # define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F # define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432 # define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434 # define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435 # define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 # define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 # define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 # define TT_MS_LANGID_HINDI_INDIA 0x0439 # define TT_MS_LANGID_MALTESE_MALTA 0x043A # define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B # define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B # define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B # define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B # define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B # define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B # define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B # define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B # define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B # define TT_MS_LANGID_IRISH_IRELAND 0x083C # define TT_MS_LANGID_MALAY_MALAYSIA 0x043E # define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E # define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F # define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440 # define TT_MS_LANGID_KISWAHILI_KENYA 0x0441 # define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 # define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 # define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 # define TT_MS_LANGID_TATAR_RUSSIA 0x0444 # define TT_MS_LANGID_BENGALI_INDIA 0x0445 # define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 # define TT_MS_LANGID_PUNJABI_INDIA 0x0446 # define TT_MS_LANGID_GUJARATI_INDIA 0x0447 # define TT_MS_LANGID_ODIA_INDIA 0x0448 # define TT_MS_LANGID_TAMIL_INDIA 0x0449 # define TT_MS_LANGID_TELUGU_INDIA 0x044A # define TT_MS_LANGID_KANNADA_INDIA 0x044B # define TT_MS_LANGID_MALAYALAM_INDIA 0x044C # define TT_MS_LANGID_ASSAMESE_INDIA 0x044D # define TT_MS_LANGID_MARATHI_INDIA 0x044E # define TT_MS_LANGID_SANSKRIT_INDIA 0x044F # define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 # define TT_MS_LANGID_MONGOLIAN_PRC 0x0850 # define TT_MS_LANGID_TIBETAN_PRC 0x0451 # define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452 # define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 # define TT_MS_LANGID_LAO_LAOS 0x0454 # define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456 # define TT_MS_LANGID_KONKANI_INDIA 0x0457 # define TT_MS_LANGID_SYRIAC_SYRIA 0x045A # define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B # define TT_MS_LANGID_INUKTITUT_CANADA 0x045D # define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D # define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E # define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F # define TT_MS_LANGID_NEPALI_NEPAL 0x0461 # define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 # define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 # define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 # define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 # define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 # define TT_MS_LANGID_YORUBA_NIGERIA 0x046A # define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B # define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B # define TT_MS_LANGID_QUECHUA_PERU 0x0C6B # define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C # define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D # define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E # define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F # define TT_MS_LANGID_IGBO_NIGERIA 0x0470 # define TT_MS_LANGID_YI_PRC 0x0478 # define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A # define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C # define TT_MS_LANGID_BRETON_FRANCE 0x047E # define TT_MS_LANGID_UIGHUR_PRC 0x0480 # define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 # define TT_MS_LANGID_OCCITAN_FRANCE 0x0482 # define TT_MS_LANGID_CORSICAN_FRANCE 0x0483 # define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484 # define TT_MS_LANGID_YAKUT_RUSSIA 0x0485 # define TT_MS_LANGID_KICHE_GUATEMALA 0x0486 # define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487 # define TT_MS_LANGID_WOLOF_SENEGAL 0x0488 # define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C Possible values of the language identifier field in the name records of the SFNT name table if the platform identifier code is TT_PLATFORM_MICROSOFT . These values are also used as return values for function FT_Get_CMap_Language_ID . The canonical source for Microsoft's IDs is https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings , however, we only provide macros for language identifiers present in the OpenType specification: Microsoft has abandoned the concept of LCIDs (language code identifiers), and format 1 of the name table provides a better mechanism for languages not covered here. More legacy values not listed in the reference can be found in the FT_TRUETYPE_IDS_H header file.","title":"TT_MS_LANGID_XXX"},{"location":"ft2-truetype_tables.html#tt_name_id_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). # define TT_NAME_ID_COPYRIGHT 0 # define TT_NAME_ID_FONT_FAMILY 1 # define TT_NAME_ID_FONT_SUBFAMILY 2 # define TT_NAME_ID_UNIQUE_ID 3 # define TT_NAME_ID_FULL_NAME 4 # define TT_NAME_ID_VERSION_STRING 5 # define TT_NAME_ID_PS_NAME 6 # define TT_NAME_ID_TRADEMARK 7 /* the following values are from the OpenType spec */ # define TT_NAME_ID_MANUFACTURER 8 # define TT_NAME_ID_DESIGNER 9 # define TT_NAME_ID_DESCRIPTION 10 # define TT_NAME_ID_VENDOR_URL 11 # define TT_NAME_ID_DESIGNER_URL 12 # define TT_NAME_ID_LICENSE 13 # define TT_NAME_ID_LICENSE_URL 14 /* number 15 is reserved */ # define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16 # define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17 # define TT_NAME_ID_MAC_FULL_NAME 18 /* The following code is new as of 2000-01-21 */ # define TT_NAME_ID_SAMPLE_TEXT 19 /* This is new in OpenType 1.3 */ # define TT_NAME_ID_CID_FINDFONT_NAME 20 /* This is new in OpenType 1.5 */ # define TT_NAME_ID_WWS_FAMILY 21 # define TT_NAME_ID_WWS_SUBFAMILY 22 /* This is new in OpenType 1.7 */ # define TT_NAME_ID_LIGHT_BACKGROUND 23 # define TT_NAME_ID_DARK_BACKGROUND 24 /* This is new in OpenType 1.8 */ # define TT_NAME_ID_VARIATIONS_PREFIX 25 /* these two values are deprecated */ # define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY # define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY Possible values of the name identifier field in the name records of an SFNT name table. These values are platform independent.","title":"TT_NAME_ID_XXX"},{"location":"ft2-truetype_tables.html#tt_ucr_xxx","text":"Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h). /* ulUnicodeRange1 */ /* --------------- */ /* Bit 0 Basic Latin */ # define TT_UCR_BASIC_LATIN (1L 0) /* U+0020-U+007E */ /* Bit 1 C1 Controls and Latin-1 Supplement */ # define TT_UCR_LATIN1_SUPPLEMENT (1L 1) /* U+0080-U+00FF */ /* Bit 2 Latin Extended-A */ # define TT_UCR_LATIN_EXTENDED_A (1L 2) /* U+0100-U+017F */ /* Bit 3 Latin Extended-B */ # define TT_UCR_LATIN_EXTENDED_B (1L 3) /* U+0180-U+024F */ /* Bit 4 IPA Extensions */ /* Phonetic Extensions */ /* Phonetic Extensions Supplement */ # define TT_UCR_IPA_EXTENSIONS (1L 4) /* U+0250-U+02AF */ /* U+1D00-U+1D7F */ /* U+1D80-U+1DBF */ /* Bit 5 Spacing Modifier Letters */ /* Modifier Tone Letters */ # define TT_UCR_SPACING_MODIFIER (1L 5) /* U+02B0-U+02FF */ /* U+A700-U+A71F */ /* Bit 6 Combining Diacritical Marks */ /* Combining Diacritical Marks Supplement */ # define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L 6) /* U+0300-U+036F */ /* U+1DC0-U+1DFF */ /* Bit 7 Greek and Coptic */ # define TT_UCR_GREEK (1L 7) /* U+0370-U+03FF */ /* Bit 8 Coptic */ # define TT_UCR_COPTIC (1L 8) /* U+2C80-U+2CFF */ /* Bit 9 Cyrillic */ /* Cyrillic Supplement */ /* Cyrillic Extended-A */ /* Cyrillic Extended-B */ # define TT_UCR_CYRILLIC (1L 9) /* U+0400-U+04FF */ /* U+0500-U+052F */ /* U+2DE0-U+2DFF */ /* U+A640-U+A69F */ /* Bit 10 Armenian */ # define TT_UCR_ARMENIAN (1L 10) /* U+0530-U+058F */ /* Bit 11 Hebrew */ # define TT_UCR_HEBREW (1L 11) /* U+0590-U+05FF */ /* Bit 12 Vai */ # define TT_UCR_VAI (1L 12) /* U+A500-U+A63F */ /* Bit 13 Arabic */ /* Arabic Supplement */ # define TT_UCR_ARABIC (1L 13) /* U+0600-U+06FF */ /* U+0750-U+077F */ /* Bit 14 NKo */ # define TT_UCR_NKO (1L 14) /* U+07C0-U+07FF */ /* Bit 15 Devanagari */ # define TT_UCR_DEVANAGARI (1L 15) /* U+0900-U+097F */ /* Bit 16 Bengali */ # define TT_UCR_BENGALI (1L 16) /* U+0980-U+09FF */ /* Bit 17 Gurmukhi */ # define TT_UCR_GURMUKHI (1L 17) /* U+0A00-U+0A7F */ /* Bit 18 Gujarati */ # define TT_UCR_GUJARATI (1L 18) /* U+0A80-U+0AFF */ /* Bit 19 Oriya */ # define TT_UCR_ORIYA (1L 19) /* U+0B00-U+0B7F */ /* Bit 20 Tamil */ # define TT_UCR_TAMIL (1L 20) /* U+0B80-U+0BFF */ /* Bit 21 Telugu */ # define TT_UCR_TELUGU (1L 21) /* U+0C00-U+0C7F */ /* Bit 22 Kannada */ # define TT_UCR_KANNADA (1L 22) /* U+0C80-U+0CFF */ /* Bit 23 Malayalam */ # define TT_UCR_MALAYALAM (1L 23) /* U+0D00-U+0D7F */ /* Bit 24 Thai */ # define TT_UCR_THAI (1L 24) /* U+0E00-U+0E7F */ /* Bit 25 Lao */ # define TT_UCR_LAO (1L 25) /* U+0E80-U+0EFF */ /* Bit 26 Georgian */ /* Georgian Supplement */ # define TT_UCR_GEORGIAN (1L 26) /* U+10A0-U+10FF */ /* U+2D00-U+2D2F */ /* Bit 27 Balinese */ # define TT_UCR_BALINESE (1L 27) /* U+1B00-U+1B7F */ /* Bit 28 Hangul Jamo */ # define TT_UCR_HANGUL_JAMO (1L 28) /* U+1100-U+11FF */ /* Bit 29 Latin Extended Additional */ /* Latin Extended-C */ /* Latin Extended-D */ # define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L 29) /* U+1E00-U+1EFF */ /* U+2C60-U+2C7F */ /* U+A720-U+A7FF */ /* Bit 30 Greek Extended */ # define TT_UCR_GREEK_EXTENDED (1L 30) /* U+1F00-U+1FFF */ /* Bit 31 General Punctuation */ /* Supplemental Punctuation */ # define TT_UCR_GENERAL_PUNCTUATION (1L 31) /* U+2000-U+206F */ /* U+2E00-U+2E7F */ /* ulUnicodeRange2 */ /* --------------- */ /* Bit 32 Superscripts And Subscripts */ # define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L 0) /* U+2070-U+209F */ /* Bit 33 Currency Symbols */ # define TT_UCR_CURRENCY_SYMBOLS (1L 1) /* U+20A0-U+20CF */ /* Bit 34 Combining Diacritical Marks For Symbols */ # define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \\ (1L 2) /* U+20D0-U+20FF */ /* Bit 35 Letterlike Symbols */ # define TT_UCR_LETTERLIKE_SYMBOLS (1L 3) /* U+2100-U+214F */ /* Bit 36 Number Forms */ # define TT_UCR_NUMBER_FORMS (1L 4) /* U+2150-U+218F */ /* Bit 37 Arrows */ /* Supplemental Arrows-A */ /* Supplemental Arrows-B */ /* Miscellaneous Symbols and Arrows */ # define TT_UCR_ARROWS (1L 5) /* U+2190-U+21FF */ /* U+27F0-U+27FF */ /* U+2900-U+297F */ /* U+2B00-U+2BFF */ /* Bit 38 Mathematical Operators */ /* Supplemental Mathematical Operators */ /* Miscellaneous Mathematical Symbols-A */ /* Miscellaneous Mathematical Symbols-B */ # define TT_UCR_MATHEMATICAL_OPERATORS (1L 6) /* U+2200-U+22FF */ /* U+2A00-U+2AFF */ /* U+27C0-U+27EF */ /* U+2980-U+29FF */ /* Bit 39 Miscellaneous Technical */ # define TT_UCR_MISCELLANEOUS_TECHNICAL (1L 7) /* U+2300-U+23FF */ /* Bit 40 Control Pictures */ # define TT_UCR_CONTROL_PICTURES (1L 8) /* U+2400-U+243F */ /* Bit 41 Optical Character Recognition */ # define TT_UCR_OCR (1L 9) /* U+2440-U+245F */ /* Bit 42 Enclosed Alphanumerics */ # define TT_UCR_ENCLOSED_ALPHANUMERICS (1L 10) /* U+2460-U+24FF */ /* Bit 43 Box Drawing */ # define TT_UCR_BOX_DRAWING (1L 11) /* U+2500-U+257F */ /* Bit 44 Block Elements */ # define TT_UCR_BLOCK_ELEMENTS (1L 12) /* U+2580-U+259F */ /* Bit 45 Geometric Shapes */ # define TT_UCR_GEOMETRIC_SHAPES (1L 13) /* U+25A0-U+25FF */ /* Bit 46 Miscellaneous Symbols */ # define TT_UCR_MISCELLANEOUS_SYMBOLS (1L 14) /* U+2600-U+26FF */ /* Bit 47 Dingbats */ # define TT_UCR_DINGBATS (1L 15) /* U+2700-U+27BF */ /* Bit 48 CJK Symbols and Punctuation */ # define TT_UCR_CJK_SYMBOLS (1L 16) /* U+3000-U+303F */ /* Bit 49 Hiragana */ # define TT_UCR_HIRAGANA (1L 17) /* U+3040-U+309F */ /* Bit 50 Katakana */ /* Katakana Phonetic Extensions */ # define TT_UCR_KATAKANA (1L 18) /* U+30A0-U+30FF */ /* U+31F0-U+31FF */ /* Bit 51 Bopomofo */ /* Bopomofo Extended */ # define TT_UCR_BOPOMOFO (1L 19) /* U+3100-U+312F */ /* U+31A0-U+31BF */ /* Bit 52 Hangul Compatibility Jamo */ # define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L 20) /* U+3130-U+318F */ /* Bit 53 Phags-Pa */ # define TT_UCR_CJK_MISC (1L 21) /* U+A840-U+A87F */ # define TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */ # define TT_UCR_PHAGSPA /* Bit 54 Enclosed CJK Letters and Months */ # define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L 22) /* U+3200-U+32FF */ /* Bit 55 CJK Compatibility */ # define TT_UCR_CJK_COMPATIBILITY (1L 23) /* U+3300-U+33FF */ /* Bit 56 Hangul Syllables */ # define TT_UCR_HANGUL (1L 24) /* U+AC00-U+D7A3 */ /* Bit 57 High Surrogates */ /* High Private Use Surrogates */ /* Low Surrogates */ /* According to OpenType specs v.1.3+, */ /* setting bit 57 implies that there is */ /* at least one codepoint beyond the */ /* Basic Multilingual Plane that is */ /* supported by this font. So it really */ /* means = U+10000. */ # define TT_UCR_SURROGATES (1L 25) /* U+D800-U+DB7F */ /* U+DB80-U+DBFF */ /* U+DC00-U+DFFF */ # define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES /* Bit 58 Phoenician */ # define TT_UCR_PHOENICIAN (1L 26) /*U+10900-U+1091F*/ /* Bit 59 CJK Unified Ideographs */ /* CJK Radicals Supplement */ /* Kangxi Radicals */ /* Ideographic Description Characters */ /* CJK Unified Ideographs Extension A */ /* CJK Unified Ideographs Extension B */ /* Kanbun */ # define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L 27) /* U+4E00-U+9FFF */ /* U+2E80-U+2EFF */ /* U+2F00-U+2FDF */ /* U+2FF0-U+2FFF */ /* U+3400-U+4DB5 */ /*U+20000-U+2A6DF*/ /* U+3190-U+319F */ /* Bit 60 Private Use */ # define TT_UCR_PRIVATE_USE (1L 28) /* U+E000-U+F8FF */ /* Bit 61 CJK Strokes */ /* CJK Compatibility Ideographs */ /* CJK Compatibility Ideographs Supplement */ # define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L 29) /* U+31C0-U+31EF */ /* U+F900-U+FAFF */ /*U+2F800-U+2FA1F*/ /* Bit 62 Alphabetic Presentation Forms */ # define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L 30) /* U+FB00-U+FB4F */ /* Bit 63 Arabic Presentation Forms-A */ # define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L 31) /* U+FB50-U+FDFF */ /* ulUnicodeRange3 */ /* --------------- */ /* Bit 64 Combining Half Marks */ # define TT_UCR_COMBINING_HALF_MARKS (1L 0) /* U+FE20-U+FE2F */ /* Bit 65 Vertical forms */ /* CJK Compatibility Forms */ # define TT_UCR_CJK_COMPATIBILITY_FORMS (1L 1) /* U+FE10-U+FE1F */ /* U+FE30-U+FE4F */ /* Bit 66 Small Form Variants */ # define TT_UCR_SMALL_FORM_VARIANTS (1L 2) /* U+FE50-U+FE6F */ /* Bit 67 Arabic Presentation Forms-B */ # define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L 3) /* U+FE70-U+FEFE */ /* Bit 68 Halfwidth and Fullwidth Forms */ # define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L 4) /* U+FF00-U+FFEF */ /* Bit 69 Specials */ # define TT_UCR_SPECIALS (1L 5) /* U+FFF0-U+FFFD */ /* Bit 70 Tibetan */ # define TT_UCR_TIBETAN (1L 6) /* U+0F00-U+0FFF */ /* Bit 71 Syriac */ # define TT_UCR_SYRIAC (1L 7) /* U+0700-U+074F */ /* Bit 72 Thaana */ # define TT_UCR_THAANA (1L 8) /* U+0780-U+07BF */ /* Bit 73 Sinhala */ # define TT_UCR_SINHALA (1L 9) /* U+0D80-U+0DFF */ /* Bit 74 Myanmar */ # define TT_UCR_MYANMAR (1L 10) /* U+1000-U+109F */ /* Bit 75 Ethiopic */ /* Ethiopic Supplement */ /* Ethiopic Extended */ # define TT_UCR_ETHIOPIC (1L 11) /* U+1200-U+137F */ /* U+1380-U+139F */ /* U+2D80-U+2DDF */ /* Bit 76 Cherokee */ # define TT_UCR_CHEROKEE (1L 12) /* U+13A0-U+13FF */ /* Bit 77 Unified Canadian Aboriginal Syllabics */ # define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L 13) /* U+1400-U+167F */ /* Bit 78 Ogham */ # define TT_UCR_OGHAM (1L 14) /* U+1680-U+169F */ /* Bit 79 Runic */ # define TT_UCR_RUNIC (1L 15) /* U+16A0-U+16FF */ /* Bit 80 Khmer */ /* Khmer Symbols */ # define TT_UCR_KHMER (1L 16) /* U+1780-U+17FF */ /* U+19E0-U+19FF */ /* Bit 81 Mongolian */ # define TT_UCR_MONGOLIAN (1L 17) /* U+1800-U+18AF */ /* Bit 82 Braille Patterns */ # define TT_UCR_BRAILLE (1L 18) /* U+2800-U+28FF */ /* Bit 83 Yi Syllables */ /* Yi Radicals */ # define TT_UCR_YI (1L 19) /* U+A000-U+A48F */ /* U+A490-U+A4CF */ /* Bit 84 Tagalog */ /* Hanunoo */ /* Buhid */ /* Tagbanwa */ # define TT_UCR_PHILIPPINE (1L 20) /* U+1700-U+171F */ /* U+1720-U+173F */ /* U+1740-U+175F */ /* U+1760-U+177F */ /* Bit 85 Old Italic */ # define TT_UCR_OLD_ITALIC (1L 21) /*U+10300-U+1032F*/ /* Bit 86 Gothic */ # define TT_UCR_GOTHIC (1L 22) /*U+10330-U+1034F*/ /* Bit 87 Deseret */ # define TT_UCR_DESERET (1L 23) /*U+10400-U+1044F*/ /* Bit 88 Byzantine Musical Symbols */ /* Musical Symbols */ /* Ancient Greek Musical Notation */ # define TT_UCR_MUSICAL_SYMBOLS (1L 24) /*U+1D000-U+1D0FF*/ /*U+1D100-U+1D1FF*/ /*U+1D200-U+1D24F*/ /* Bit 89 Mathematical Alphanumeric Symbols */ # define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L 25) /*U+1D400-U+1D7FF*/ /* Bit 90 Private Use (plane 15) */ /* Private Use (plane 16) */ # define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L 26) /*U+F0000-U+FFFFD*/ /*U+100000-U+10FFFD*/ /* Bit 91 Variation Selectors */ /* Variation Selectors Supplement */ # define TT_UCR_VARIATION_SELECTORS (1L 27) /* U+FE00-U+FE0F */ /*U+E0100-U+E01EF*/ /* Bit 92 Tags */ # define TT_UCR_TAGS (1L 28) /*U+E0000-U+E007F*/ /* Bit 93 Limbu */ # define TT_UCR_LIMBU (1L 29) /* U+1900-U+194F */ /* Bit 94 Tai Le */ # define TT_UCR_TAI_LE (1L 30) /* U+1950-U+197F */ /* Bit 95 New Tai Lue */ # define TT_UCR_NEW_TAI_LUE (1L 31) /* U+1980-U+19DF */ /* ulUnicodeRange4 */ /* --------------- */ /* Bit 96 Buginese */ # define TT_UCR_BUGINESE (1L 0) /* U+1A00-U+1A1F */ /* Bit 97 Glagolitic */ # define TT_UCR_GLAGOLITIC (1L 1) /* U+2C00-U+2C5F */ /* Bit 98 Tifinagh */ # define TT_UCR_TIFINAGH (1L 2) /* U+2D30-U+2D7F */ /* Bit 99 Yijing Hexagram Symbols */ # define TT_UCR_YIJING (1L 3) /* U+4DC0-U+4DFF */ /* Bit 100 Syloti Nagri */ # define TT_UCR_SYLOTI_NAGRI (1L 4) /* U+A800-U+A82F */ /* Bit 101 Linear B Syllabary */ /* Linear B Ideograms */ /* Aegean Numbers */ # define TT_UCR_LINEAR_B (1L 5) /*U+10000-U+1007F*/ /*U+10080-U+100FF*/ /*U+10100-U+1013F*/ /* Bit 102 Ancient Greek Numbers */ # define TT_UCR_ANCIENT_GREEK_NUMBERS (1L 6) /*U+10140-U+1018F*/ /* Bit 103 Ugaritic */ # define TT_UCR_UGARITIC (1L 7) /*U+10380-U+1039F*/ /* Bit 104 Old Persian */ # define TT_UCR_OLD_PERSIAN (1L 8) /*U+103A0-U+103DF*/ /* Bit 105 Shavian */ # define TT_UCR_SHAVIAN (1L 9) /*U+10450-U+1047F*/ /* Bit 106 Osmanya */ # define TT_UCR_OSMANYA (1L 10) /*U+10480-U+104AF*/ /* Bit 107 Cypriot Syllabary */ # define TT_UCR_CYPRIOT_SYLLABARY (1L 11) /*U+10800-U+1083F*/ /* Bit 108 Kharoshthi */ # define TT_UCR_KHAROSHTHI (1L 12) /*U+10A00-U+10A5F*/ /* Bit 109 Tai Xuan Jing Symbols */ # define TT_UCR_TAI_XUAN_JING (1L 13) /*U+1D300-U+1D35F*/ /* Bit 110 Cuneiform */ /* Cuneiform Numbers and Punctuation */ # define TT_UCR_CUNEIFORM (1L 14) /*U+12000-U+123FF*/ /*U+12400-U+1247F*/ /* Bit 111 Counting Rod Numerals */ # define TT_UCR_COUNTING_ROD_NUMERALS (1L 15) /*U+1D360-U+1D37F*/ /* Bit 112 Sundanese */ # define TT_UCR_SUNDANESE (1L 16) /* U+1B80-U+1BBF */ /* Bit 113 Lepcha */ # define TT_UCR_LEPCHA (1L 17) /* U+1C00-U+1C4F */ /* Bit 114 Ol Chiki */ # define TT_UCR_OL_CHIKI (1L 18) /* U+1C50-U+1C7F */ /* Bit 115 Saurashtra */ # define TT_UCR_SAURASHTRA (1L 19) /* U+A880-U+A8DF */ /* Bit 116 Kayah Li */ # define TT_UCR_KAYAH_LI (1L 20) /* U+A900-U+A92F */ /* Bit 117 Rejang */ # define TT_UCR_REJANG (1L 21) /* U+A930-U+A95F */ /* Bit 118 Cham */ # define TT_UCR_CHAM (1L 22) /* U+AA00-U+AA5F */ /* Bit 119 Ancient Symbols */ # define TT_UCR_ANCIENT_SYMBOLS (1L 23) /*U+10190-U+101CF*/ /* Bit 120 Phaistos Disc */ # define TT_UCR_PHAISTOS_DISC (1L 24) /*U+101D0-U+101FF*/ /* Bit 121 Carian */ /* Lycian */ /* Lydian */ # define TT_UCR_OLD_ANATOLIAN (1L 25) /*U+102A0-U+102DF*/ /*U+10280-U+1029F*/ /*U+10920-U+1093F*/ /* Bit 122 Domino Tiles */ /* Mahjong Tiles */ # define TT_UCR_GAME_TILES (1L 26) /*U+1F030-U+1F09F*/ /*U+1F000-U+1F02F*/ /* Bit 123-127 Reserved for process-internal usage */ Possible bit mask values for the ulUnicodeRangeX fields in an SFNT OS/2 table.","title":"TT_UCR_XXX"},{"location":"ft2-tt_driver.html","text":"FreeType Docs Controlling FreeType Modules The TrueType driver The TrueType driver Synopsis While FreeType's TrueType driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The following lists the available properties together with the necessary macros and structures. The TrueType driver's module name is truetype . A single property interpreter-version is available, as documented in the Driver properties section. We start with a list of definitions, kindly provided by Greg Hitchcock. Bi-Level Rendering Monochromatic rendering, exclusively used in the early days of TrueType by both Apple and Microsoft. Microsoft's GDI interface supported hinting of the right-side bearing point, such that the advance width could be non-linear. Most often this was done to achieve some level of glyph symmetry. To enable reasonable performance (e.g., not having to run hinting on all glyphs just to get the widths) there was a bit in the head table indicating if the side bearing was hinted, and additional tables, hdmx and LTSH , to cache hinting widths across multiple sizes and device aspect ratios. Font Smoothing Microsoft's GDI implementation of anti-aliasing. Not traditional anti-aliasing as the outlines were hinted before the sampling. The widths matched the bi-level rendering. ClearType Rendering Technique that uses physical subpixels to improve rendering on LCD (and other) displays. Because of the higher resolution, many methods of improving symmetry in glyphs through hinting the right-side bearing were no longer necessary. This lead to what GDI calls natural widths ClearType, see http://rastertragedy.com/RTRCh4.htm#Sec21 . Since hinting has extra resolution, most non-linearity went away, but it is still possible for hints to change the advance widths in this mode. ClearType Compatible Widths One of the earliest challenges with ClearType was allowing the implementation in GDI to be selected without requiring all UI and documents to reflow. To address this, a compatible method of rendering ClearType was added where the font hints are executed once to determine the width in bi-level rendering, and then re-run in ClearType, with the difference in widths being absorbed in the font hints for ClearType (mostly in the white space of hints); see http://rastertragedy.com/RTRCh4.htm#Sec20 . Somewhat by definition, compatible width ClearType allows for non-linear widths, but only when the bi-level version has non-linear widths. ClearType Subpixel Positioning One of the nice benefits of ClearType is the ability to more crisply display fractional widths; unfortunately, the GDI model of integer bitmaps did not support this. However, the WPF and Direct Write frameworks do support fractional widths. DWrite calls this natural mode , not to be confused with GDI's natural widths . Subpixel positioning, in the current implementation of Direct Write, unfortunately does not support hinted advance widths, see http://rastertragedy.com/RTRCh4.htm#Sec22 . Note that the TrueType interpreter fully allows the advance width to be adjusted in this mode, just the DWrite client will ignore those changes. ClearType Backward Compatibility This is a set of exceptions made in the TrueType interpreter to minimize hinting techniques that were problematic with the extra resolution of ClearType; see http://rastertragedy.com/RTRCh4.htm#Sec1 and https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx . This technique is not to be confused with ClearType compatible widths. ClearType backward compatibility has no direct impact on changing advance widths, but there might be an indirect impact on disabling some deltas. This could be worked around in backward compatibility mode. Native ClearType Mode (Not to be confused with natural widths .) This mode removes all the exceptions in the TrueType interpreter when running with ClearType. Any issues on widths would still apply, though.","title":"The TrueType driver"},{"location":"ft2-tt_driver.html#the-truetype-driver","text":"","title":"The TrueType driver"},{"location":"ft2-tt_driver.html#synopsis","text":"While FreeType's TrueType driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get . The following lists the available properties together with the necessary macros and structures. The TrueType driver's module name is truetype . A single property interpreter-version is available, as documented in the Driver properties section. We start with a list of definitions, kindly provided by Greg Hitchcock. Bi-Level Rendering Monochromatic rendering, exclusively used in the early days of TrueType by both Apple and Microsoft. Microsoft's GDI interface supported hinting of the right-side bearing point, such that the advance width could be non-linear. Most often this was done to achieve some level of glyph symmetry. To enable reasonable performance (e.g., not having to run hinting on all glyphs just to get the widths) there was a bit in the head table indicating if the side bearing was hinted, and additional tables, hdmx and LTSH , to cache hinting widths across multiple sizes and device aspect ratios. Font Smoothing Microsoft's GDI implementation of anti-aliasing. Not traditional anti-aliasing as the outlines were hinted before the sampling. The widths matched the bi-level rendering. ClearType Rendering Technique that uses physical subpixels to improve rendering on LCD (and other) displays. Because of the higher resolution, many methods of improving symmetry in glyphs through hinting the right-side bearing were no longer necessary. This lead to what GDI calls natural widths ClearType, see http://rastertragedy.com/RTRCh4.htm#Sec21 . Since hinting has extra resolution, most non-linearity went away, but it is still possible for hints to change the advance widths in this mode. ClearType Compatible Widths One of the earliest challenges with ClearType was allowing the implementation in GDI to be selected without requiring all UI and documents to reflow. To address this, a compatible method of rendering ClearType was added where the font hints are executed once to determine the width in bi-level rendering, and then re-run in ClearType, with the difference in widths being absorbed in the font hints for ClearType (mostly in the white space of hints); see http://rastertragedy.com/RTRCh4.htm#Sec20 . Somewhat by definition, compatible width ClearType allows for non-linear widths, but only when the bi-level version has non-linear widths. ClearType Subpixel Positioning One of the nice benefits of ClearType is the ability to more crisply display fractional widths; unfortunately, the GDI model of integer bitmaps did not support this. However, the WPF and Direct Write frameworks do support fractional widths. DWrite calls this natural mode , not to be confused with GDI's natural widths . Subpixel positioning, in the current implementation of Direct Write, unfortunately does not support hinted advance widths, see http://rastertragedy.com/RTRCh4.htm#Sec22 . Note that the TrueType interpreter fully allows the advance width to be adjusted in this mode, just the DWrite client will ignore those changes. ClearType Backward Compatibility This is a set of exceptions made in the TrueType interpreter to minimize hinting techniques that were problematic with the extra resolution of ClearType; see http://rastertragedy.com/RTRCh4.htm#Sec1 and https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx . This technique is not to be confused with ClearType compatible widths. ClearType backward compatibility has no direct impact on changing advance widths, but there might be an indirect impact on disabling some deltas. This could be worked around in backward compatibility mode. Native ClearType Mode (Not to be confused with natural widths .) This mode removes all the exceptions in the TrueType interpreter when running with ClearType. Any issues on widths would still apply, though.","title":"Synopsis"},{"location":"ft2-type1_tables.html","text":"FreeType Docs Format-Specific API Type 1 Tables Type 1 Tables Synopsis This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats. PS_FontInfoRec Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; 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. PS_FontInfo Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct PS_FontInfoRec_* PS_FontInfo ; A handle to a PS_FontInfoRec structure. PS_PrivateRec Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; 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. PS_Private Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct PS_PrivateRec_* PS_Private ; A handle to a PS_PrivateRec structure. CID_FaceDictRec Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceDictRec_ { PS_PrivateRec private_dict; FT_UInt len_buildchar; FT_Fixed forcebold_threshold; FT_Pos stroke_width; FT_Fixed expansion_factor; /* this is a duplicate of */ /* `private_dict- 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 ; A structure used to represent data in a CID top-level dictionary. In most cases, they are part of the font's /FDArray array. Within a CID font file, such (internal) subfont dictionaries are enclosed by %ADOBeginFontDict and %ADOEndFontDict comments. Note that CID_FaceDictRec misses a field for the /FontName keyword, specifying the subfont's name (the top-level font name is given by the /CIDFontName keyword). This is an oversight, but it doesn't limit the cid font module's functionality because FreeType neither needs this entry nor gives access to CID subfonts. CID_FaceDict Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceDictRec_* CID_FaceDict ; A handle to a CID_FaceDictRec structure. CID_FaceInfoRec Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; A structure used to represent CID Face information. CID_FaceInfo Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceInfoRec_* CID_FaceInfo ; A handle to a CID_FaceInfoRec structure. FT_Has_PS_Glyph_Names Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Int ) FT_Has_PS_Glyph_Names ( FT_Face face ); 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_Get_PS_Font_Info Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Error ) FT_Get_PS_Font_Info ( FT_Face face, PS_FontInfo afont_info ); Retrieve the PS_FontInfoRec structure corresponding to a given PostScript font. input face PostScript face handle. output afont_info Output font info structure pointer. return FreeType error code. 0 means success. note String pointers within the PS_FontInfoRec structure are owned by the face and don't need to be freed by the caller. Missing entries in the font's FontInfo dictionary are represented by NULL pointers. If the font's format is not PostScript-based, this function will return the FT_Err_Invalid_Argument error code. FT_Get_PS_Font_Private Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Error ) FT_Get_PS_Font_Private ( FT_Face face, PS_Private afont_private ); Retrieve the PS_PrivateRec structure corresponding to a given PostScript font. input face PostScript face handle. output afont_private Output private dictionary structure pointer. return FreeType error code. 0 means success. note The string pointers within the PS_PrivateRec structure are owned by the face and don't need to be freed by the caller. If the font's format is not PostScript-based, this function returns the FT_Err_Invalid_Argument error code. FT_Get_PS_Font_Value Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Long ) FT_Get_PS_Font_Value ( FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len ); Retrieve the value for the supplied key from a PostScript font. input face PostScript face handle. key An enumeration value representing the dictionary key to retrieve. idx For array values, this specifies the index to be returned. value A pointer to memory into which to write the value. valen_len The size, in bytes, of the memory supplied for the value. output value The value matching the above key, if it exists. return The amount of memory (in bytes) required to hold the requested value (if it exists, -1 otherwise). note The values returned are not pointers into the internal structures of the face, but are fresh copies, so that the memory containing them belongs to the calling application. This also enforces the read-only nature of these values, i.e., this function cannot be used to manipulate the face. value is a void pointer because the values returned can be of various types. If either value is NULL or value_len is too small, just the required memory size for the requested entry is returned. The idx parameter is used, not only to retrieve elements of, for example, the FontMatrix or FontBBox, but also to retrieve name keys from the CharStrings dictionary, and the charstrings themselves. It is ignored for atomic values. PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To get the value as in the font stream, you need to divide by 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale). IMPORTANT: Only key/value pairs read by the FreeType interpreter can be retrieved. So, for example, PostScript procedures such as NP, ND, and RD are not available. Arbitrary keys are, obviously, not be available either. If the font's format is not PostScript-based, this function returns the FT_Err_Invalid_Argument error code. since 2.4.8 T1_Blend_Flags Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef enum T1_Blend_Flags_ { /* required fields in a FontInfo blend dictionary */ T1_BLEND_UNDERLINE_POSITION = 0, T1_BLEND_UNDERLINE_THICKNESS , T1_BLEND_ITALIC_ANGLE , /* required fields in a Private blend dictionary */ T1_BLEND_BLUE_VALUES , T1_BLEND_OTHER_BLUES , T1_BLEND_STANDARD_WIDTH , T1_BLEND_STANDARD_HEIGHT , T1_BLEND_STEM_SNAP_WIDTHS , T1_BLEND_STEM_SNAP_HEIGHTS , T1_BLEND_BLUE_SCALE , T1_BLEND_BLUE_SHIFT , T1_BLEND_FAMILY_BLUES , T1_BLEND_FAMILY_OTHER_BLUES , T1_BLEND_FORCE_BOLD , T1_BLEND_MAX /* do not remove */ } T1_Blend_Flags ; /* these constants are deprecated; use the corresponding */ /* ` T1_Blend_Flags ` values instead */ # define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION # define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS # define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE # define t1_blend_blue_values T1_BLEND_BLUE_VALUES # define t1_blend_other_blues T1_BLEND_OTHER_BLUES # define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH # define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT # define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS # define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS # define t1_blend_blue_scale T1_BLEND_BLUE_SCALE # define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT # define t1_blend_family_blues T1_BLEND_FAMILY_BLUES # define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES # define t1_blend_force_bold T1_BLEND_FORCE_BOLD # define t1_blend_max T1_BLEND_MAX A set of flags used to indicate which fields are present in a given blend dictionary (font info or private). Used to support Multiple Masters fonts. values T1_BLEND_UNDERLINE_POSITION T1_BLEND_UNDERLINE_THICKNESS T1_BLEND_ITALIC_ANGLE T1_BLEND_BLUE_VALUES T1_BLEND_OTHER_BLUES T1_BLEND_STANDARD_WIDTH T1_BLEND_STANDARD_HEIGHT T1_BLEND_STEM_SNAP_WIDTHS T1_BLEND_STEM_SNAP_HEIGHTS T1_BLEND_BLUE_SCALE T1_BLEND_BLUE_SHIFT T1_BLEND_FAMILY_BLUES T1_BLEND_FAMILY_OTHER_BLUES T1_BLEND_FORCE_BOLD T1_EncodingType Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; An enumeration describing the Encoding entry in a Type 1 dictionary. values T1_ENCODING_TYPE_NONE T1_ENCODING_TYPE_ARRAY T1_ENCODING_TYPE_STANDARD T1_ENCODING_TYPE_ISOLATIN1 T1_ENCODING_TYPE_EXPERT since 2.4.8 PS_Dict_Keys Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef enum PS_Dict_Keys_ { /* conventionally in the font dictionary */ PS_DICT_FONT_TYPE , /* FT_Byte */ PS_DICT_FONT_MATRIX , /* FT_Fixed */ PS_DICT_FONT_BBOX , /* FT_Fixed */ PS_DICT_PAINT_TYPE , /* FT_Byte */ PS_DICT_FONT_NAME , /* FT_String * */ PS_DICT_UNIQUE_ID , /* FT_Int */ PS_DICT_NUM_CHAR_STRINGS , /* FT_Int */ PS_DICT_CHAR_STRING_KEY , /* FT_String * */ PS_DICT_CHAR_STRING , /* FT_String * */ PS_DICT_ENCODING_TYPE , /* T1_EncodingType */ PS_DICT_ENCODING_ENTRY , /* FT_String * */ /* conventionally in the font Private dictionary */ PS_DICT_NUM_SUBRS , /* FT_Int */ PS_DICT_SUBR , /* FT_String * */ PS_DICT_STD_HW , /* FT_UShort */ PS_DICT_STD_VW , /* FT_UShort */ PS_DICT_NUM_BLUE_VALUES , /* FT_Byte */ PS_DICT_BLUE_VALUE , /* FT_Short */ PS_DICT_BLUE_FUZZ , /* FT_Int */ PS_DICT_NUM_OTHER_BLUES , /* FT_Byte */ PS_DICT_OTHER_BLUE , /* FT_Short */ PS_DICT_NUM_FAMILY_BLUES , /* FT_Byte */ PS_DICT_FAMILY_BLUE , /* FT_Short */ PS_DICT_NUM_FAMILY_OTHER_BLUES , /* FT_Byte */ PS_DICT_FAMILY_OTHER_BLUE , /* FT_Short */ PS_DICT_BLUE_SCALE , /* FT_Fixed */ PS_DICT_BLUE_SHIFT , /* FT_Int */ PS_DICT_NUM_STEM_SNAP_H , /* FT_Byte */ PS_DICT_STEM_SNAP_H , /* FT_Short */ PS_DICT_NUM_STEM_SNAP_V , /* FT_Byte */ PS_DICT_STEM_SNAP_V , /* FT_Short */ PS_DICT_FORCE_BOLD , /* FT_Bool */ PS_DICT_RND_STEM_UP , /* FT_Bool */ PS_DICT_MIN_FEATURE , /* FT_Short */ PS_DICT_LEN_IV , /* FT_Int */ PS_DICT_PASSWORD , /* FT_Long */ PS_DICT_LANGUAGE_GROUP , /* FT_Long */ /* conventionally in the font FontInfo dictionary */ PS_DICT_VERSION , /* FT_String * */ PS_DICT_NOTICE , /* FT_String * */ PS_DICT_FULL_NAME , /* FT_String * */ PS_DICT_FAMILY_NAME , /* FT_String * */ PS_DICT_WEIGHT , /* FT_String * */ PS_DICT_IS_FIXED_PITCH , /* FT_Bool */ PS_DICT_UNDERLINE_POSITION , /* FT_Short */ PS_DICT_UNDERLINE_THICKNESS , /* FT_UShort */ PS_DICT_FS_TYPE , /* FT_UShort */ PS_DICT_ITALIC_ANGLE , /* FT_Long */ PS_DICT_MAX = PS_DICT_ITALIC_ANGLE } PS_Dict_Keys ; An enumeration used in calls to FT_Get_PS_Font_Value to identify the Type 1 dictionary entry to retrieve. values PS_DICT_FONT_TYPE PS_DICT_FONT_MATRIX PS_DICT_FONT_BBOX PS_DICT_PAINT_TYPE PS_DICT_FONT_NAME PS_DICT_UNIQUE_ID PS_DICT_NUM_CHAR_STRINGS PS_DICT_CHAR_STRING_KEY PS_DICT_CHAR_STRING PS_DICT_ENCODING_TYPE PS_DICT_ENCODING_ENTRY PS_DICT_NUM_SUBRS PS_DICT_SUBR PS_DICT_STD_HW PS_DICT_STD_VW PS_DICT_NUM_BLUE_VALUES PS_DICT_BLUE_VALUE PS_DICT_BLUE_FUZZ PS_DICT_NUM_OTHER_BLUES PS_DICT_OTHER_BLUE PS_DICT_NUM_FAMILY_BLUES PS_DICT_FAMILY_BLUE PS_DICT_NUM_FAMILY_OTHER_BLUES PS_DICT_FAMILY_OTHER_BLUE PS_DICT_BLUE_SCALE PS_DICT_BLUE_SHIFT PS_DICT_NUM_STEM_SNAP_H PS_DICT_STEM_SNAP_H PS_DICT_NUM_STEM_SNAP_V PS_DICT_STEM_SNAP_V PS_DICT_FORCE_BOLD PS_DICT_RND_STEM_UP PS_DICT_MIN_FEATURE PS_DICT_LEN_IV PS_DICT_PASSWORD PS_DICT_LANGUAGE_GROUP PS_DICT_VERSION PS_DICT_NOTICE PS_DICT_FULL_NAME PS_DICT_FAMILY_NAME PS_DICT_WEIGHT PS_DICT_IS_FIXED_PITCH PS_DICT_UNDERLINE_POSITION PS_DICT_UNDERLINE_THICKNESS PS_DICT_FS_TYPE PS_DICT_ITALIC_ANGLE since 2.4.8 T1_FontInfo Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef PS_FontInfoRec T1_FontInfo ; This type is equivalent to PS_FontInfoRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType. T1_Private Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef PS_PrivateRec T1_Private ; This type is equivalent to PS_PrivateRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType. CID_FontDict Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef CID_FaceDictRec CID_FontDict ; This type is equivalent to CID_FaceDictRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType. CID_Info Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef CID_FaceInfoRec CID_Info ; This type is equivalent to CID_FaceInfoRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType.","title":"Type 1 Tables"},{"location":"ft2-type1_tables.html#type-1-tables","text":"","title":"Type 1 Tables"},{"location":"ft2-type1_tables.html#synopsis","text":"This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats.","title":"Synopsis"},{"location":"ft2-type1_tables.html#ps_fontinforec","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; 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.","title":"PS_FontInfoRec"},{"location":"ft2-type1_tables.html#ps_fontinfo","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct PS_FontInfoRec_* PS_FontInfo ; A handle to a PS_FontInfoRec structure.","title":"PS_FontInfo"},{"location":"ft2-type1_tables.html#ps_privaterec","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; 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.","title":"PS_PrivateRec"},{"location":"ft2-type1_tables.html#ps_private","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct PS_PrivateRec_* PS_Private ; A handle to a PS_PrivateRec structure.","title":"PS_Private"},{"location":"ft2-type1_tables.html#cid_facedictrec","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceDictRec_ { PS_PrivateRec private_dict; FT_UInt len_buildchar; FT_Fixed forcebold_threshold; FT_Pos stroke_width; FT_Fixed expansion_factor; /* this is a duplicate of */ /* `private_dict- 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 ; A structure used to represent data in a CID top-level dictionary. In most cases, they are part of the font's /FDArray array. Within a CID font file, such (internal) subfont dictionaries are enclosed by %ADOBeginFontDict and %ADOEndFontDict comments. Note that CID_FaceDictRec misses a field for the /FontName keyword, specifying the subfont's name (the top-level font name is given by the /CIDFontName keyword). This is an oversight, but it doesn't limit the cid font module's functionality because FreeType neither needs this entry nor gives access to CID subfonts.","title":"CID_FaceDictRec"},{"location":"ft2-type1_tables.html#cid_facedict","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceDictRec_* CID_FaceDict ; A handle to a CID_FaceDictRec structure.","title":"CID_FaceDict"},{"location":"ft2-type1_tables.html#cid_faceinforec","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; A structure used to represent CID Face information.","title":"CID_FaceInfoRec"},{"location":"ft2-type1_tables.html#cid_faceinfo","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef struct CID_FaceInfoRec_* CID_FaceInfo ; A handle to a CID_FaceInfoRec structure.","title":"CID_FaceInfo"},{"location":"ft2-type1_tables.html#ft_has_ps_glyph_names","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Int ) FT_Has_PS_Glyph_Names ( FT_Face face ); 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.","title":"FT_Has_PS_Glyph_Names"},{"location":"ft2-type1_tables.html#ft_get_ps_font_info","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Error ) FT_Get_PS_Font_Info ( FT_Face face, PS_FontInfo afont_info ); Retrieve the PS_FontInfoRec structure corresponding to a given PostScript font.","title":"FT_Get_PS_Font_Info"},{"location":"ft2-type1_tables.html#ft_get_ps_font_private","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Error ) FT_Get_PS_Font_Private ( FT_Face face, PS_Private afont_private ); Retrieve the PS_PrivateRec structure corresponding to a given PostScript font.","title":"FT_Get_PS_Font_Private"},{"location":"ft2-type1_tables.html#ft_get_ps_font_value","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). FT_EXPORT( FT_Long ) FT_Get_PS_Font_Value ( FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len ); Retrieve the value for the supplied key from a PostScript font.","title":"FT_Get_PS_Font_Value"},{"location":"ft2-type1_tables.html#t1_blend_flags","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef enum T1_Blend_Flags_ { /* required fields in a FontInfo blend dictionary */ T1_BLEND_UNDERLINE_POSITION = 0, T1_BLEND_UNDERLINE_THICKNESS , T1_BLEND_ITALIC_ANGLE , /* required fields in a Private blend dictionary */ T1_BLEND_BLUE_VALUES , T1_BLEND_OTHER_BLUES , T1_BLEND_STANDARD_WIDTH , T1_BLEND_STANDARD_HEIGHT , T1_BLEND_STEM_SNAP_WIDTHS , T1_BLEND_STEM_SNAP_HEIGHTS , T1_BLEND_BLUE_SCALE , T1_BLEND_BLUE_SHIFT , T1_BLEND_FAMILY_BLUES , T1_BLEND_FAMILY_OTHER_BLUES , T1_BLEND_FORCE_BOLD , T1_BLEND_MAX /* do not remove */ } T1_Blend_Flags ; /* these constants are deprecated; use the corresponding */ /* ` T1_Blend_Flags ` values instead */ # define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION # define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS # define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE # define t1_blend_blue_values T1_BLEND_BLUE_VALUES # define t1_blend_other_blues T1_BLEND_OTHER_BLUES # define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH # define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT # define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS # define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS # define t1_blend_blue_scale T1_BLEND_BLUE_SCALE # define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT # define t1_blend_family_blues T1_BLEND_FAMILY_BLUES # define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES # define t1_blend_force_bold T1_BLEND_FORCE_BOLD # define t1_blend_max T1_BLEND_MAX 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.","title":"T1_Blend_Flags"},{"location":"ft2-type1_tables.html#t1_encodingtype","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). 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 ; An enumeration describing the Encoding entry in a Type 1 dictionary.","title":"T1_EncodingType"},{"location":"ft2-type1_tables.html#ps_dict_keys","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef enum PS_Dict_Keys_ { /* conventionally in the font dictionary */ PS_DICT_FONT_TYPE , /* FT_Byte */ PS_DICT_FONT_MATRIX , /* FT_Fixed */ PS_DICT_FONT_BBOX , /* FT_Fixed */ PS_DICT_PAINT_TYPE , /* FT_Byte */ PS_DICT_FONT_NAME , /* FT_String * */ PS_DICT_UNIQUE_ID , /* FT_Int */ PS_DICT_NUM_CHAR_STRINGS , /* FT_Int */ PS_DICT_CHAR_STRING_KEY , /* FT_String * */ PS_DICT_CHAR_STRING , /* FT_String * */ PS_DICT_ENCODING_TYPE , /* T1_EncodingType */ PS_DICT_ENCODING_ENTRY , /* FT_String * */ /* conventionally in the font Private dictionary */ PS_DICT_NUM_SUBRS , /* FT_Int */ PS_DICT_SUBR , /* FT_String * */ PS_DICT_STD_HW , /* FT_UShort */ PS_DICT_STD_VW , /* FT_UShort */ PS_DICT_NUM_BLUE_VALUES , /* FT_Byte */ PS_DICT_BLUE_VALUE , /* FT_Short */ PS_DICT_BLUE_FUZZ , /* FT_Int */ PS_DICT_NUM_OTHER_BLUES , /* FT_Byte */ PS_DICT_OTHER_BLUE , /* FT_Short */ PS_DICT_NUM_FAMILY_BLUES , /* FT_Byte */ PS_DICT_FAMILY_BLUE , /* FT_Short */ PS_DICT_NUM_FAMILY_OTHER_BLUES , /* FT_Byte */ PS_DICT_FAMILY_OTHER_BLUE , /* FT_Short */ PS_DICT_BLUE_SCALE , /* FT_Fixed */ PS_DICT_BLUE_SHIFT , /* FT_Int */ PS_DICT_NUM_STEM_SNAP_H , /* FT_Byte */ PS_DICT_STEM_SNAP_H , /* FT_Short */ PS_DICT_NUM_STEM_SNAP_V , /* FT_Byte */ PS_DICT_STEM_SNAP_V , /* FT_Short */ PS_DICT_FORCE_BOLD , /* FT_Bool */ PS_DICT_RND_STEM_UP , /* FT_Bool */ PS_DICT_MIN_FEATURE , /* FT_Short */ PS_DICT_LEN_IV , /* FT_Int */ PS_DICT_PASSWORD , /* FT_Long */ PS_DICT_LANGUAGE_GROUP , /* FT_Long */ /* conventionally in the font FontInfo dictionary */ PS_DICT_VERSION , /* FT_String * */ PS_DICT_NOTICE , /* FT_String * */ PS_DICT_FULL_NAME , /* FT_String * */ PS_DICT_FAMILY_NAME , /* FT_String * */ PS_DICT_WEIGHT , /* FT_String * */ PS_DICT_IS_FIXED_PITCH , /* FT_Bool */ PS_DICT_UNDERLINE_POSITION , /* FT_Short */ PS_DICT_UNDERLINE_THICKNESS , /* FT_UShort */ PS_DICT_FS_TYPE , /* FT_UShort */ PS_DICT_ITALIC_ANGLE , /* FT_Long */ PS_DICT_MAX = PS_DICT_ITALIC_ANGLE } PS_Dict_Keys ; An enumeration used in calls to FT_Get_PS_Font_Value to identify the Type 1 dictionary entry to retrieve.","title":"PS_Dict_Keys"},{"location":"ft2-type1_tables.html#t1_fontinfo","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef PS_FontInfoRec T1_FontInfo ; This type is equivalent to PS_FontInfoRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType.","title":"T1_FontInfo"},{"location":"ft2-type1_tables.html#t1_private","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef PS_PrivateRec T1_Private ; This type is equivalent to PS_PrivateRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType.","title":"T1_Private"},{"location":"ft2-type1_tables.html#cid_fontdict","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef CID_FaceDictRec CID_FontDict ; This type is equivalent to CID_FaceDictRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType.","title":"CID_FontDict"},{"location":"ft2-type1_tables.html#cid_info","text":"Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h). typedef CID_FaceInfoRec CID_Info ; This type is equivalent to CID_FaceInfoRec . It is deprecated but kept to maintain source compatibility between various versions of FreeType.","title":"CID_Info"},{"location":"ft2-user_allocation.html","text":"FreeType Docs General Remarks User allocation User allocation Synopsis FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. In other words, it is recommended to use calloc (or variants of it) instead of malloc for allocation.","title":"User allocation"},{"location":"ft2-user_allocation.html#user-allocation","text":"","title":"User allocation"},{"location":"ft2-user_allocation.html#synopsis","text":"FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. In other words, it is recommended to use calloc (or variants of it) instead of malloc for allocation.","title":"Synopsis"},{"location":"ft2-version.html","text":"FreeType Docs Core API FreeType Version FreeType Version Synopsis 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. FT_Library_Version Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Library_Version ( FT_Library library, FT_Int *amajor, FT_Int *aminor, FT_Int *apatch ); 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_Face_CheckTrueTypePatents Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Face_CheckTrueTypePatents ( FT_Face face ); Deprecated, does nothing. input face A face handle. return Always returns false. note Since May 2010, TrueType hinting is no longer patented. since 2.3.5 FT_Face_SetUnpatentedHinting Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Face_SetUnpatentedHinting ( FT_Face face, FT_Bool value ); Deprecated, does nothing. input face A face handle. value New boolean setting. return Always returns false. note Since May 2010, TrueType hinting is no longer patented. since 2.3.5 FREETYPE_XXX Defined in FT_FREETYPE_H (freetype/freetype.h). # define FREETYPE_MAJOR 2 # define FREETYPE_MINOR 10 # define FREETYPE_PATCH 1 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.","title":"FreeType Version"},{"location":"ft2-version.html#freetype-version","text":"","title":"FreeType Version"},{"location":"ft2-version.html#synopsis","text":"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.","title":"Synopsis"},{"location":"ft2-version.html#ft_library_version","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( void ) FT_Library_Version ( FT_Library library, FT_Int *amajor, FT_Int *aminor, FT_Int *apatch ); 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 .","title":"FT_Library_Version"},{"location":"ft2-version.html#ft_face_checktruetypepatents","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Face_CheckTrueTypePatents ( FT_Face face ); Deprecated, does nothing.","title":"FT_Face_CheckTrueTypePatents"},{"location":"ft2-version.html#ft_face_setunpatentedhinting","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). FT_EXPORT( FT_Bool ) FT_Face_SetUnpatentedHinting ( FT_Face face, FT_Bool value ); Deprecated, does nothing.","title":"FT_Face_SetUnpatentedHinting"},{"location":"ft2-version.html#freetype_xxx","text":"Defined in FT_FREETYPE_H (freetype/freetype.h). # define FREETYPE_MAJOR 2 # define FREETYPE_MINOR 10 # define FREETYPE_PATCH 1 These three macros identify the FreeType source code version. Use FT_Library_Version to access them at runtime.","title":"FREETYPE_XXX"},{"location":"ft2-winfnt_fonts.html","text":"FreeType Docs Format-Specific API Window FNT Files Window FNT Files Synopsis This section contains the declaration of Windows FNT-specific functions. FT_WinFNT_ID_XXX Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). # 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 A list of valid values for the charset byte in FT_WinFNT_HeaderRec . Exact mapping tables for the various cpXXXX encodings (except for cp1361 ) can be found at ftp://ftp.unicode.org/Public/ in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT . values FT_WinFNT_ID_DEFAULT This is used for font enumeration and font creation as a don't care value. Valid font files don't contain this value. When querying for information about the character set of the font that is currently selected into a specified device context, this return value (of the related Windows API) simply denotes failure. FT_WinFNT_ID_SYMBOL There is no known mapping table available. FT_WinFNT_ID_MAC Mac Roman encoding. FT_WinFNT_ID_OEM From Michael Poettgen michael@poettgen.de : The Windows Font Mapping article says that FT_WinFNT_ID_OEM is used for the charset of vector fonts, like modern.fon , roman.fon , and script.fon on Windows. The CreateFont documentation says: The FT_WinFNT_ID_OEM value specifies a character set that is operating-system dependent. The IFIMETRICS documentation from the Windows Driver Development Kit says: This font supports an OEM-specific character set. The OEM character set is system dependent. In general OEM, as opposed to ANSI (i.e., cp1252 ), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers , 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). FT_WinFNT_HeaderRec Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). 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 ; Windows FNT Header info. FT_WinFNT_Header Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header ; A handle to an FT_WinFNT_HeaderRec structure. FT_Get_WinFNT_Header Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). FT_EXPORT( FT_Error ) FT_Get_WinFNT_Header ( FT_Face face, FT_WinFNT_HeaderRec *aheader ); 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.","title":"Window FNT Files"},{"location":"ft2-winfnt_fonts.html#window-fnt-files","text":"","title":"Window FNT Files"},{"location":"ft2-winfnt_fonts.html#synopsis","text":"This section contains the declaration of Windows FNT-specific functions.","title":"Synopsis"},{"location":"ft2-winfnt_fonts.html#ft_winfnt_id_xxx","text":"Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). # 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 A list of valid values for the charset byte in FT_WinFNT_HeaderRec . Exact mapping tables for the various cpXXXX encodings (except for cp1361 ) can be found at ftp://ftp.unicode.org/Public/ in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT .","title":"FT_WinFNT_ID_XXX"},{"location":"ft2-winfnt_fonts.html#ft_winfnt_headerrec","text":"Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). 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 ; Windows FNT Header info.","title":"FT_WinFNT_HeaderRec"},{"location":"ft2-winfnt_fonts.html#ft_winfnt_header","text":"Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header ; A handle to an FT_WinFNT_HeaderRec structure.","title":"FT_WinFNT_Header"},{"location":"ft2-winfnt_fonts.html#ft_get_winfnt_header","text":"Defined in FT_WINFONTS_H (freetype/ftwinfnt.h). FT_EXPORT( FT_Error ) FT_Get_WinFNT_Header ( FT_Face face, FT_WinFNT_HeaderRec *aheader ); Retrieve a Windows FNT font info header.","title":"FT_Get_WinFNT_Header"}]} \ No newline at end of file
diff --git a/freetype/docs/reference/site/sitemap.xml b/freetype/docs/reference/site/sitemap.xml
new file mode 100644
index 00000000..4890d4eb
--- /dev/null
+++ b/freetype/docs/reference/site/sitemap.xml
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+ <url>
+ <loc>None</loc>
+ <lastmod>2019-07-01</lastmod>
+ <changefreq>daily</changefreq>
+ </url>
+</urlset> \ No newline at end of file
diff --git a/freetype/docs/reference/site/sitemap.xml.gz b/freetype/docs/reference/site/sitemap.xml.gz
new file mode 100644
index 00000000..b555669e
--- /dev/null
+++ b/freetype/docs/reference/site/sitemap.xml.gz
Binary files differ
diff --git a/freetype/docs/reference/site/stylesheets/extra.css b/freetype/docs/reference/site/stylesheets/extra.css
new file mode 100644
index 00000000..cd6a1ee7
--- /dev/null
+++ b/freetype/docs/reference/site/stylesheets/extra.css
@@ -0,0 +1,221 @@
+/* Body and page */
+.wy-nav-content {
+ max-width: 90%;
+}
+.md-grid {
+ max-width: 90%;
+}
+.md-sidebar--secondary {
+ margin-left: 90%;
+}
+p {
+ text-align: justify;
+ /* margin: 1.5ex 0 1.5ex 0;
+ */
+}
+/* .md-typeset p{
+ margin: 1em 1em 0 1em;
+}
+*/
+/* code blocks */
+pre.colored {
+ color: blue;
+}
+pre {
+ font-family: monospace;
+ background-color: #D6E8FF;
+ padding: 2ex 0 2ex 1%;
+ overflow-x:auto;
+}
+span.keyword {
+ font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: #d73a49;
+}
+.md-typeset code {
+ white-space: pre;
+}
+/* H4 Heading */
+h4 {
+ background-color: #EEEEFF;
+ font-size: medium;
+ font-style: oblique;
+ font-weight: bold;
+ /* margin: 3ex 0 1.5ex 9%;
+ */
+ padding: 0.3em 0 0.3em 1%;
+}
+/* Fields table */
+table.fields {
+ width: 90%;
+ margin: 1.5ex 0 1.5ex 10%;
+}
+table.fields td.val {
+ font-weight: bold;
+ text-align: right;
+ width: 30%;
+ vertical-align: baseline;
+ padding: 1em 1em 0 0;
+}
+table.fields td.desc {
+ vertical-align: baseline;
+ padding: 1ex 0 0 1em;
+}
+table.fields td.desc p:first-child {
+ margin: 0;
+}
+
+table.fields td.desc p {
+ margin: 1.5ex 0 0 0;
+}
+
+/* START EXPERIMENTAL CODE */
+table.long {
+ display: block;
+ width: 93%;
+}
+table.long thead,
+table.long tbody,
+table.long th,
+table.long td,
+table.long tr {
+ display: block;
+}
+/* Hide table headers (but not display: none;
+, for accessibility) */
+table.long thead tr {
+ position: absolute;
+ top: -9999px;
+ left: -9999px;
+}
+table.long tr {
+ border: 0;
+}
+table.long {
+ margin: 1.5ex 3% 1.5ex 3%;
+}
+table.long td.val {
+ text-align: left;
+}
+table.long td {
+ /* Behave like a "row" */
+ border: none;
+ border-bottom: 0;
+ position: relative;
+ padding-left: 50%;
+}
+table.long td:before {
+ /* Now like a table header */
+ position: absolute;
+ /* Top/left values mimic padding */
+ top: 6px;
+ left: 6px;
+ width: 45%;
+ padding-right: 10px;
+ white-space: nowrap;
+}
+/* END EXPERIMENTAL CODE */
+
+/* Index table */
+table.index {
+ width: 100%;
+ border-collapse: collapse;
+ border: 0;
+ border-spacing: 1em 0.3ex;
+}
+table.index tr {
+ padding: 0;
+}
+table.index td {
+ padding: 0;
+}
+table.index-toc-link {
+ width: 100%;
+ border: 0;
+ border-spacing: 0;
+ margin: 1ex 0 1ex 0;
+}
+table.index-toc-link td.left {
+ padding: 0 0.5em 0 0.5em;
+ font-size: 83%;
+ text-align: left;
+}
+table.index-toc-link td.middle {
+ padding: 0 0.5em 0 0.5em;
+ font-size: 83%;
+ text-align: center;
+}
+table.index-toc-link td.right {
+ padding: 0 0.5em 0 0.5em;
+ font-size: 83%;
+ text-align: right;
+}
+/* toc table */
+table.toc {
+ width: 95%;
+ margin: 1.5ex 0 1.5ex 5%;
+}
+table.toc td.link {
+ width: 30%;
+ text-align: right;
+ vertical-align: baseline;
+ padding: 1ex 1em 1ex 0;
+}
+table.toc td.desc {
+ vertical-align: baseline;
+ padding: 1ex 0 1ex 1em;
+ text-align: left;
+}
+table.toc td.desc p:first-child {
+ margin: 0;
+ text-align: left;
+}
+table.toc td.desc p {
+ margin: 1.5ex 0 0 0;
+ text-align: left;
+}
+div.timestamp {
+ font-size: small;
+}
+/* Max width before this PARTICULAR table gets nasty This query will take effect for any screen smaller than 760px and also iPads specifically. */
+@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) {
+ /* Force table to not be like tables anymore */
+ table, thead, tbody, th, td, tr {
+ display: block;
+ }
+ /* Hide table headers (but not display: none;
+ , for accessibility) */
+ thead tr {
+ position: absolute;
+ top: -9999px;
+ left: -9999px;
+ }
+ tr {
+ border: 0;
+ }
+ table.fields {
+ width: 93%;
+ margin: 1.5ex 3% 1.5ex 3%;
+ }
+ table.fields td.val {
+ text-align: left;
+ }
+ td {
+ /* Behave like a "row" */
+ border: none;
+ border-bottom: 0;
+ position: relative;
+ padding-left: 50%;
+ }
+ td:before {
+ /* Now like a table header */
+ position: absolute;
+ /* Top/left values mimic padding */
+ top: 6px;
+ left: 6px;
+ width: 45%;
+ padding-right: 10px;
+ white-space: nowrap;
+ }
+}
diff --git a/freetype/docs/release b/freetype/docs/release
index 44b4cb10..1b0c1eea 100644
--- a/freetype/docs/release
+++ b/freetype/docs/release
@@ -58,10 +58,10 @@ How to prepare a new release
if necessary).
. Say `make dist' in both the freetype2 and freetype2-demos modules
- to generate the .tar.gz, .tar.bz2, and .zip files.
+ to generate the .tar.gz, .tar.xz, and .zip files.
. Create the doc bundles (freetype-doc-<version>.tar.gz,
- freetype-doc-<version>.tar.bz2, ftdoc<version>.zip). This is
+ freetype-doc-<version>.tar.xz, ftdoc<version>.zip). This is
everything in
<freetype-web git repository>/freetype2/docs
@@ -87,13 +87,13 @@ How to prepare a new release
version=`echo $VERSION | sed "s/\\.//g"`
FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \
- freetype-$VERSION.tar.bz2 \
+ freetype-$VERSION.tar.xz \
ft$version.zip"
FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \
- ft2demos-$VERSION.tar.bz2 \
+ ft2demos-$VERSION.tar.xz \
ftdmo$version.zip"
FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \
- freetype-doc-$VERSION.tar.bz2 \
+ freetype-doc-$VERSION.tar.xz \
ftdoc$version.zip"
PACKAGE_LIST="$FREETYPE_PACKAGES \
@@ -171,7 +171,7 @@ How to prepare a new release
# EOF
. On SourceForge, tag the just uploaded `ftXXX.zip' and
- `freetype-XXX.tar.bz2' files as the default files to download for
+ `freetype-XXX.tar.xz' files as the default files to download for
`Windows' and `Others', respectively.
. Copy the reference files (generated by `make dist') to
@@ -189,7 +189,7 @@ How to prepare a new release
----------------------------------------------------------------------
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/include/freetype/config/ftconfig.h b/freetype/include/freetype/config/ftconfig.h
index eedebf40..94666033 100644
--- a/freetype/include/freetype/config/ftconfig.h
+++ b/freetype/include/freetype/config/ftconfig.h
@@ -1,39 +1,38 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* ANSI-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /* This ANSI version should stay in `include/config/'. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftconfig.h
+ *
+ * ANSI-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This header file contains a number of macro definitions that are used by
+ * the rest of the engine. Most of the macros here are automatically
+ * determined at compile time, and you should not need to change it to port
+ * FreeType, except to compile the library with a non-ANSI compiler.
+ *
+ * Note however that if some specific modifications are needed, we advise
+ * you to place a modified copy in your build directory.
+ *
+ * The build directory is usually `builds/<system>`, and contains
+ * system-specific files that are always included first when building the
+ * library.
+ *
+ * This ANSI version should stay in `include/config/`.
+ *
+ */
#ifndef FTCONFIG_H_
#define FTCONFIG_H_
@@ -46,32 +45,32 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * PLATFORM-SPECIFIC CONFIGURATION MACROS
+ *
+ * These macros can be toggled to suit a specific system. The current ones
+ * are defaults used to compile FreeType in an ANSI C environment (16bit
+ * compilers are also supported). Copy this file to your own
+ * `builds/<system>` directory, and edit it to port the engine.
+ *
+ */
- /* There are systems (like the Texas Instruments 'C54x) where a `char' */
- /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
- /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
- /* `char' type. */
+ /* 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. */
+ /* The size of an `int` type. */
#if FT_UINT_MAX == 0xFFFFUL
#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT )
#elif FT_UINT_MAX == 0xFFFFFFFFUL
@@ -82,7 +81,7 @@ FT_BEGIN_HEADER
#error "Unsupported size of `int' type!"
#endif
- /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
+ /* 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 )
@@ -95,35 +94,35 @@ FT_BEGIN_HEADER
#endif
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
+ /* `FT_UNUSED` indicates 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. */
- /* */
+ /**************************************************************************
+ *
+ * AUTOMATIC CONFIGURATION MACROS
+ *
+ * These macros are computed from the ones defined above. Don't touch
+ * their definition, unless you know precisely what you are doing. No
+ * porter should need to mess with them.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * Mac support
+ *
+ * This is the only necessary change, so it is defined here instead
+ * providing a new configuration file.
+ */
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
+ /* No Carbon frameworks for 64bit 10.4.x. */
+ /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */
+ /* so guess the system version by maximum errno before inclusion. */
#include <errno.h>
#ifdef ECANCELED /* defined since 10.2 */
#include "AvailabilityMacros.h"
@@ -143,7 +142,7 @@ FT_BEGIN_HEADER
#endif
- /* Fix compiler warning with sgi compiler */
+ /* Fix compiler warning with sgi compiler. */
#if defined( __sgi ) && !defined( __GNUC__ )
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
#pragma set woff 3505
@@ -151,33 +150,33 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt16
+ *
+ * @description:
+ * A typedef for a 16bit unsigned integer type.
+ */
typedef unsigned short FT_UInt16;
/* */
@@ -186,50 +185,50 @@ FT_BEGIN_HEADER
/* 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt32
+ *
+ * A typedef for a 32bit unsigned integer type. The size depends on the
+ * configuration.
+ */
typedef unsigned XXX FT_UInt32;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int64
+ *
+ * A typedef for a 64bit signed integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef signed XXX FT_Int64;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt64
+ *
+ * A typedef for a 64bit unsigned integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
typedef unsigned XXX FT_UInt64;
/* */
@@ -251,7 +250,7 @@ FT_BEGIN_HEADER
#endif
- /* look up an integer type that is at least 32 bits */
+ /* look up an integer type that is at least 32~bits */
#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
typedef int FT_Fast;
@@ -265,22 +264,22 @@ FT_BEGIN_HEADER
#endif
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
+ /* 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 */
+ /* `FT_LONG64` must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
+ /**************************************************************************
+ *
+ * A 64-bit data type may create compilation problems if you compile in
+ * strict ANSI mode. To avoid them, we disable other 64-bit data types if
+ * `__STDC__` is defined. You can however ignore this rule by defining the
+ * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+ */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
@@ -289,19 +288,19 @@ FT_BEGIN_HEADER
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
#elif defined( __BORLANDC__ ) /* Borland C++ */
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
+ /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+ /* to test the compiler version. */
- /* this compiler provides the __int64 type */
+ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
@@ -318,7 +317,7 @@ FT_BEGIN_HEADER
#elif defined( __GNUC__ )
- /* GCC provides the `long long' type */
+ /* GCC provides the `long long` type */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
@@ -342,11 +341,11 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * miscellaneous
+ *
+ */
#define FT_BEGIN_STMNT do {
@@ -354,7 +353,7 @@ FT_BEGIN_HEADER
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
- /* typeof condition taken from gnulib's `intprops.h' header file */
+ /* `typeof` condition taken from gnulib's `intprops.h` header file */
#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
defined( __IBM__TYPEOF__ ) ) || \
@@ -365,14 +364,14 @@ FT_BEGIN_HEADER
#endif
- /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
- /* a function that gets used only within the scope of a module. */
- /* Normally, both the header and source code files for such a */
- /* function are within a single module directory. */
- /* */
- /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
- /* FT_LOCAL_ARRAY_DEF. */
- /* */
+ /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, */
+ /* respectively, a function that gets used only within the scope of a */
+ /* module. Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and */
+ /* `FT_LOCAL_ARRAY_DEF`. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -394,12 +393,12 @@ FT_BEGIN_HEADER
#define FT_LOCAL_ARRAY_DEF( x ) const x
- /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
- /* functions that are used in more than a single module. In the */
- /* current setup this implies that the declaration is in a header */
- /* file in the `include/freetype/internal' directory, and the */
- /* function body is in a file in `src/base'. */
- /* */
+ /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header file */
+ /* in the `include/freetype/internal` directory, and the function body */
+ /* is in a file in `src/base`. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -422,45 +421,50 @@ FT_BEGIN_HEADER
#endif /* !FT_BASE_DEF */
- /* When compiling FreeType as a DLL or DSO with hidden visibility */
- /* some systems/compilers need a special attribute 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. */
- /* */
- /* To export a variable, use FT_EXPORT_VAR. */
- /* */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute 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. */
+ /* */
+ /* To export a variable, use `FT_EXPORT_VAR`. */
+ /* */
#ifndef FT_EXPORT
#ifdef FT2_BUILD_LIBRARY
-#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#if defined( _WIN32 ) && defined( DLL_EXPORT )
#define FT_EXPORT( x ) __declspec( dllexport ) x
#elif defined( __GNUC__ ) && __GNUC__ >= 4
#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
+#define FT_EXPORT( x ) __global x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
@@ -469,7 +473,7 @@ FT_BEGIN_HEADER
#else
-#if defined( FT2_DLLIMPORT )
+#if defined( _WIN32 ) && defined( DLL_IMPORT )
#define FT_EXPORT( x ) __declspec( dllimport ) x
#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
@@ -508,7 +512,7 @@ FT_BEGIN_HEADER
/* C++ compiler and with 16bit compilers. */
/* */
- /* This is special. Within C++, you must specify `extern "C"' for */
+ /* 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 */
@@ -531,7 +535,7 @@ FT_BEGIN_HEADER
/* */
/* */
/* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* the infamous `_cdecl` or `__fastcall` declarations. */
/* */
#ifndef FT_CALLBACK_DEF
#ifdef __cplusplus
diff --git a/freetype/include/freetype/config/ftheader.h b/freetype/include/freetype/config/ftheader.h
index 702f77cc..696d6ba9 100644
--- a/freetype/include/freetype/config/ftheader.h
+++ b/freetype/include/freetype/config/ftheader.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftheader.h */
-/* */
-/* Build macros of the FreeType 2 library. */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftheader.h
+ *
+ * Build macros of the FreeType 2 library.
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTHEADER_H_
#define FTHEADER_H_
@@ -27,7 +27,7 @@
/* <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 */
+ /* encapsulated in an `extern "C" { .. }` block when included from a */
/* C++ compiler. */
/* */
#ifdef __cplusplus
@@ -45,7 +45,7 @@
/* <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 */
+ /* encapsulated in an `extern "C" { .. }` block when included from a */
/* C++ compiler. */
/* */
#ifdef __cplusplus
@@ -55,54 +55,54 @@
#endif
- /*************************************************************************/
- /* */
- /* Aliases for the FreeType 2 public and configuration files. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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
+ * A macro used in `#include` statements to name the file containing
* FreeType~2 configuration data.
*
*/
@@ -111,13 +111,13 @@
#endif
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_CONFIG_STANDARD_LIBRARY_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* FreeType~2 interface to the standard C library functions.
*
*/
@@ -126,13 +126,13 @@
#endif
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_CONFIG_OPTIONS_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* FreeType~2 project-specific configuration options.
*
*/
@@ -141,13 +141,13 @@
#endif
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_CONFIG_MODULES_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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.
*
@@ -160,26 +160,26 @@
/* public headers */
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_FREETYPE_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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
+ * 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.
@@ -188,26 +188,26 @@
#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
+ * 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
+ * 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).
*
@@ -217,13 +217,13 @@
#define FT_SYSTEM_H <freetype/ftsystem.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_IMAGE_H
*
* @description:
- * A macro used in #include statements to name the file containing type
+ * A macro used in `#include` statements to name the file containing type
* definitions related to glyph images (i.e., bitmaps, outlines,
* scan-converter parameters).
*
@@ -233,13 +233,13 @@
#define FT_IMAGE_H <freetype/ftimage.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_TYPES_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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.
@@ -248,13 +248,13 @@
#define FT_TYPES_H <freetype/fttypes.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_LIST_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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.)
@@ -263,151 +263,151 @@
#define FT_LIST_H <freetype/ftlist.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_OUTLINE_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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
+ * 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
+ * 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
+ * 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_DRIVER_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* structures and macros related to the driver modules.
*
*/
#define FT_DRIVER_H <freetype/ftdriver.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_AUTOHINTER_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* structures and macros related to the auto-hinting module.
*
- * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ * Deprecated since version~2.9; use @FT_DRIVER_H instead.
*
*/
#define FT_AUTOHINTER_H FT_DRIVER_H
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_CFF_DRIVER_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* structures and macros related to the CFF driver module.
*
- * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ * Deprecated since version~2.9; use @FT_DRIVER_H instead.
*
*/
#define FT_CFF_DRIVER_H FT_DRIVER_H
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_TRUETYPE_DRIVER_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* structures and macros related to the TrueType driver module.
*
- * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ * Deprecated since version~2.9; use @FT_DRIVER_H instead.
*
*/
#define FT_TRUETYPE_DRIVER_H FT_DRIVER_H
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_PCF_DRIVER_H
*
* @description:
- * A macro used in #include statements to name the file containing
+ * A macro used in `#include` statements to name the file containing
* structures and macros related to the PCF driver module.
*
- * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ * Deprecated since version~2.9; use @FT_DRIVER_H instead.
*
*/
#define FT_PCF_DRIVER_H FT_DRIVER_H
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_TYPE1_TABLES_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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
+ * 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.
@@ -416,174 +416,172 @@
#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
+ * 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
+ * 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.
+ * 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.
+ * 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
+ * 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
+ * A macro used in `#include` statements to name the file containing the
* definitions of an API which supports LZW-compressed files.
*
*/
#define FT_LZW_H <freetype/ftlzw.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_BZIP2_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * A macro used in `#include` statements to name the file containing the
* definitions of an API which supports bzip2-compressed files.
*
*/
#define FT_BZIP2_H <freetype/ftbzip2.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_WINFONTS_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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
+ * 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
+ * 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
+ * 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
+ * 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_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.
+ * 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).
@@ -592,105 +590,105 @@
#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
+ * 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
+ * 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).
+ * 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).
+ * 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
+ * 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
+ * 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
+ * A macro used in `#include` statements to name the file containing the
* FreeType~2 API which performs artificial obliquing and emboldening.
*/
#define FT_SYNTHESIS_H <freetype/ftsynth.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_FONT_FORMATS_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * A macro used in `#include` statements to name the file containing the
* FreeType~2 API which provides functions specific to font formats.
*/
#define FT_FONT_FORMATS_H <freetype/ftfntfmt.h>
@@ -699,67 +697,79 @@
#define FT_XFREE86_H FT_FONT_FORMATS_H
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_TRIGONOMETRY_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * 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
+ * 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_INCREMENTAL_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * A macro used in `#include` statements to name the file containing the
* FreeType~2 API which performs incremental glyph loading.
*/
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_GASP_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * A macro used in `#include` statements to name the file containing the
* FreeType~2 API which returns entries from the TrueType GASP table.
*/
#define FT_GASP_H <freetype/ftgasp.h>
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_ADVANCES_H
*
* @description:
- * A macro used in #include statements to name the file containing the
+ * A macro used in `#include` statements to name the file containing the
* FreeType~2 API which returns individual and ranged glyph advances.
*/
#define FT_ADVANCES_H <freetype/ftadvanc.h>
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_COLOR_H
+ *
+ * @description:
+ * A macro used in `#include` statements to name the file containing the
+ * FreeType~2 API which handles the OpenType 'CPAL' table.
+ */
+#define FT_COLOR_H <freetype/ftcolor.h>
+
+
/* */
/* These header files don't need to be included by the user. */
@@ -770,14 +780,14 @@
#define FT_UNPATENTED_HINTING_H <freetype/ftparams.h>
#define FT_TRUETYPE_UNPATENTED_H <freetype/ftparams.h>
- /* FT_CACHE_H is the only header file needed for the cache subsystem. */
+ /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */
#define FT_CACHE_IMAGE_H FT_CACHE_H
#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
#define FT_CACHE_CHARMAP_H FT_CACHE_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. */
+ /* 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 FT_CACHE_H
#define FT_CACHE_INTERNAL_MRU_H FT_CACHE_H
@@ -789,8 +799,8 @@
/*
- * Include internal headers definitions from <internal/...>
- * only when building the library.
+ * Include internal headers definitions from `<internal/...>` only when
+ * building the library.
*/
#ifdef FT2_BUILD_LIBRARY
#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
diff --git a/freetype/include/freetype/config/ftmodule.h b/freetype/include/freetype/config/ftmodule.h
index 76d271a7..7c603e53 100644
--- a/freetype/include/freetype/config/ftmodule.h
+++ b/freetype/include/freetype/config/ftmodule.h
@@ -1,12 +1,12 @@
/*
- * This file registers the FreeType modules compiled into the library.
+ * 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'.
+ * 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.
+ * Please read `docs/INSTALL.ANY` and `docs/CUSTOMIZE` how to compile
+ * FreeType without GNU make.
*
*/
diff --git a/freetype/include/freetype/config/ftoption.h b/freetype/include/freetype/config/ftoption.h
index 4bcab2af..12f47a82 100644
--- a/freetype/include/freetype/config/ftoption.h
+++ b/freetype/include/freetype/config/ftoption.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftoption.h */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftoption.h
+ *
+ * User-selectable configuration macros (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -25,45 +25,47 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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.
+ *
+ */
/*************************************************************************/
@@ -75,444 +77,433 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*#***********************************************************************/
- /* */
- /* If you enable this configuration option, FreeType recognizes an */
- /* environment variable called `FREETYPE_PROPERTIES', which can be used */
- /* to control the various font drivers and modules. The controllable */
- /* properties are listed in the section @properties. */
- /* */
- /* You have to undefine this configuration option on platforms that lack */
- /* the concept of environment variables (and thus don't have the */
- /* `getenv' function), for example Windows CE. */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
- /* multiple lines for better readability). */
- /* */
- /* { */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* } */
- /* */
- /* Example: */
- /* */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* */
+ /*#************************************************************************
+ *
+ * If you enable this configuration option, FreeType recognizes an
+ * environment variable called `FREETYPE_PROPERTIES`, which can be used to
+ * control the various font drivers and modules. The controllable
+ * properties are listed in the section @properties.
+ *
+ * You have to undefine this configuration option on platforms that lack
+ * the concept of environment variables (and thus don't have the `getenv`
+ * function), for example Windows CE.
+ *
+ * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
+ * multiple lines for better readability).
+ *
+ * ```
+ * <optional whitespace>
+ * <module-name1> ':'
+ * <property-name1> '=' <property-value1>
+ * <whitespace>
+ * <module-name2> ':'
+ * <property-name2> '=' <property-value2>
+ * ...
+ * ```
+ *
+ * Example:
+ *
+ * ```
+ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ * cff:no-stem-darkening=1 \
+ * autofitter:warping=1
+ * ```
+ *
+ */
#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- /*************************************************************************/
- /* */
- /* Uncomment the line below if you want to activate LCD rendering */
- /* technology similar to ClearType in this build of the library. This */
- /* technology triples the resolution in the direction color subpixels. */
- /* To mitigate color fringes inherent to this technology, you also need */
- /* to explicitly set up LCD filtering. */
- /* */
- /* Note that this feature is covered by several Microsoft patents */
- /* and should not be activated in any default build of the library. */
- /* When this macro is not defined, FreeType offers alternative LCD */
- /* rendering technology that produces excellent output without LCD */
- /* filtering. */
- /* */
+ /**************************************************************************
+ *
+ * Uncomment the line below if you want to activate LCD rendering
+ * technology similar to ClearType in this build of the library. This
+ * technology triples the resolution in the direction color subpixels. To
+ * mitigate color fringes inherent to this technology, you also need to
+ * explicitly set up LCD filtering.
+ *
+ * Note that this feature is covered by several Microsoft patents and
+ * should not be activated in any default build of the library. When this
+ * macro is not defined, FreeType offers alternative LCD rendering
+ * technology that produces excellent output without LCD filtering.
+ */
/* #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. */
- /* */
+ /**************************************************************************
+ *
+ * Many compilers provide a non-ANSI 64-bit data type that can be used by
+ * FreeType to speed up some computations. However, this will create some
+ * problems when compiling the library in strict ANSI mode.
+ *
+ * For this reason, the use of 64-bit integers is normally disabled when
+ * the `__STDC__` macro is defined. You can however disable this by
+ * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here.
+ *
+ * For most compilers, this will only create compilation warnings when
+ * building the library.
+ *
+ * ObNote: The compiler-specific 64-bit integers are detected in the
+ * file `ftconfig.h` either statically or through the `configure`
+ * script on supported platforms.
+ */
#undef FT_CONFIG_OPTION_FORCE_INT64
- /*************************************************************************/
- /* */
- /* If this macro is defined, do not try to use an assembler version of */
- /* performance-critical functions (e.g. FT_MulFix). You should only do */
- /* that to verify that the assembler function works properly, or to */
- /* execute benchmark tests of the various implementations. */
+ /**************************************************************************
+ *
+ * If this macro is defined, do not try to use an assembler version of
+ * performance-critical functions (e.g., @FT_MulFix). You should only do
+ * that to verify that the assembler function works properly, or to execute
+ * benchmark tests of the various implementations.
+ */
/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
- /*************************************************************************/
- /* */
- /* If this macro is defined, try to use an inlined assembler version of */
- /* the `FT_MulFix' function, which is a `hotspot' when loading and */
- /* hinting glyphs, and which should be executed as fast as possible. */
- /* */
- /* Note that if your compiler or CPU is not supported, this will default */
- /* to the standard and portable implementation found in `ftcalc.c'. */
- /* */
+ /**************************************************************************
+ *
+ * If this macro is defined, try to use an inlined assembler version of the
+ * @FT_MulFix function, which is a 'hotspot' when loading and hinting
+ * glyphs, and which should be executed as fast as possible.
+ *
+ * Note that if your compiler or CPU is not supported, this will default to
+ * the standard and portable implementation found in `ftcalc.c`.
+ */
#define FT_CONFIG_OPTION_INLINE_MULFIX
- /*************************************************************************/
- /* */
- /* LZW-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `compress' program. This is mostly used to parse many of the PCF */
- /* files that come with various X11 distributions. The implementation */
- /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
- /* (see src/lzw/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
- /* If you use a build system like cmake or the `configure' script, */
- /* options set by those programs have precendence, overwriting the */
- /* value here with the configured one. */
- /* */
+ /**************************************************************************
+ *
+ * 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.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
- /*************************************************************************/
- /* */
- /* Bzip2-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `bzip2' program. This is mostly used to parse many of the PCF */
- /* files that come with XFree86. The implementation uses `libbz2' to */
- /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
- /* Contrary to gzip, bzip2 currently is not included and need to use */
- /* the system available bzip2 implementation. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
- /* If you use a build system like cmake or the `configure' script, */
- /* options set by those programs have precendence, overwriting the */
- /* value here with the configured one. */
- /* */
+ /**************************************************************************
+ *
+ * Bzip2-compressed file support.
+ *
+ * FreeType now handles font files that have been compressed with the
+ * `bzip2` program. This is mostly used to parse many of the PCF files
+ * that come with XFree86. The implementation uses `libbz2` to partially
+ * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary
+ * to gzip, bzip2 currently is not included and need to use the system
+ * available bzip2 implementation.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
/* #define FT_CONFIG_OPTION_USE_BZIP2 */
- /*************************************************************************/
- /* */
- /* Define to disable the use of file stream functions and types, FILE, */
- /* fopen() etc. Enables the use of smaller system libraries on embedded */
- /* systems that have multiple system libraries, some with or without */
- /* file stream support, in the cases where file stream support is not */
- /* necessary such as memory loading of font files. */
- /* */
+ /**************************************************************************
+ *
+ * Define to disable the use of file stream functions and types, `FILE`,
+ * `fopen`, etc. Enables the use of smaller system libraries on embedded
+ * systems that have multiple system libraries, some with or without file
+ * stream support, in the cases where file stream support is not necessary
+ * such as memory loading of font files.
+ */
/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
- /*************************************************************************/
- /* */
- /* PNG bitmap support. */
- /* */
- /* FreeType now handles loading color bitmap glyphs in the PNG format. */
- /* This requires help from the external libpng library. Uncompressed */
- /* color bitmaps do not need any external libraries and will be */
- /* supported regardless of this configuration. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
- /* If you use a build system like cmake or the `configure' script, */
- /* options set by those programs have precendence, overwriting the */
- /* value here with the configured one. */
- /* */
+ /**************************************************************************
+ *
+ * PNG bitmap support.
+ *
+ * FreeType now handles loading color bitmap glyphs in the PNG format.
+ * This requires help from the external libpng library. Uncompressed
+ * color bitmaps do not need any external libraries and will be supported
+ * regardless of this configuration.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
/* #define FT_CONFIG_OPTION_USE_PNG */
- /*************************************************************************/
- /* */
- /* HarfBuzz support. */
- /* */
- /* FreeType uses the HarfBuzz library to improve auto-hinting of */
- /* OpenType fonts. If available, many glyphs not directly addressable */
- /* by a font's character map will be hinted also. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
- /* If you use a build system like cmake or the `configure' script, */
- /* options set by those programs have precendence, overwriting the */
- /* value here with the configured one. */
- /* */
+ /**************************************************************************
+ *
+ * HarfBuzz support.
+ *
+ * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType
+ * fonts. If available, many glyphs not directly addressable by a font's
+ * character map will be hinted also.
+ *
+ * Define this macro if you want to enable this 'feature'.
+ *
+ * If you use a build system like cmake or the `configure` script,
+ * options set by those programs have precedence, overwriting the value
+ * here with the configured one.
+ */
/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
- /*************************************************************************/
- /* */
- /* 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, but will not synthesize a missing Unicode charmap. */
- /* */
- /* - The Type 1 driver will not be able to synthesize a Unicode */
- /* charmap out of the glyphs found in the fonts. */
- /* */
- /* You would normally undefine this configuration macro when building */
- /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
- /* */
+ /**************************************************************************
+ *
+ * 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,
+ * but will not synthesize a missing Unicode charmap.
+ *
+ * - The Type~1 driver will not be able to synthesize a Unicode charmap
+ * out of the glyphs found in the fonts.
+ *
+ * You would normally undefine this configuration macro when building a
+ * version of FreeType that doesn't contain a Type~1 or CFF driver.
+ */
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- /*************************************************************************/
- /* */
- /* Postscript Names to Unicode Values support */
- /* */
- /* By default, FreeType 2 is built with the `PSNames' module compiled */
- /* in. Among other things, the module is used to convert a glyph name */
- /* into a Unicode value. This is especially useful in order to */
- /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
- /* through a big table named the `Adobe Glyph List' (AGL). */
- /* */
- /* Undefine this macro if you do not want the Adobe Glyph List */
- /* compiled in your `PSNames' module. The Type 1 driver will not be */
- /* able to synthesize a Unicode charmap out of the glyphs found in the */
- /* fonts. */
- /* */
+ /**************************************************************************
+ *
+ * Postscript Names to Unicode Values support
+ *
+ * By default, FreeType~2 is built with the 'psnames' module compiled in.
+ * Among other things, the module is used to convert a glyph name into a
+ * Unicode value. This is especially useful in order to synthesize on
+ * the fly a Unicode charmap from the CFF/Type~1 driver through a big
+ * table named the 'Adobe Glyph List' (AGL).
+ *
+ * Undefine this macro if you do not want the Adobe Glyph List compiled
+ * in your 'psnames' module. The Type~1 driver will not be able to
+ * synthesize a Unicode charmap out of the glyphs found in the fonts.
+ */
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
- /*************************************************************************/
- /* */
- /* Support for Mac fonts */
- /* */
- /* Define this macro if you want support for outline fonts in Mac */
- /* format (mac dfont, mac resource, macbinary containing a mac */
- /* resource) on non-Mac platforms. */
- /* */
- /* Note that the `FOND' resource isn't checked. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Guessing methods to access embedded resource forks
+ *
+ * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux).
+ *
+ * Resource forks which include fonts data are stored sometimes in
+ * locations which users or developers don't expected. In some cases,
+ * resource forks start with some offset from the head of a file. In
+ * other cases, the actual resource fork is stored in file different from
+ * what the user specifies. If this option is activated, FreeType tries
+ * to guess whether such offsets or different file names must be used.
+ *
+ * Note that normal, direct access of resource forks is controlled via
+ * the `FT_CONFIG_OPTION_MAC_FONTS` option.
+ */
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#endif
- /*************************************************************************/
- /* */
- /* Allow the use of FT_Incremental_Interface to load typefaces that */
- /* contain no glyph data, but supply it via a callback function. */
- /* This is required by clients supporting document formats which */
- /* supply font data incrementally as the document is parsed, such */
- /* as the Ghostscript interpreter for the PostScript language. */
- /* */
+ /**************************************************************************
+ *
+ * Allow the use of `FT_Incremental_Interface` to load typefaces that
+ * contain no glyph data, but supply it via a callback function. This is
+ * required by clients supporting document formats which supply font data
+ * incrementally as the document is parsed, such as the Ghostscript
+ * interpreter for the PostScript language.
+ */
#define FT_CONFIG_OPTION_INCREMENTAL
- /*************************************************************************/
- /* */
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
- /* */
+ /**************************************************************************
+ *
+ * The size in bytes of the render pool used by the scan-line converter to
+ * do all of its work.
+ */
#define FT_RENDER_POOL_SIZE 16384L
- /*************************************************************************/
- /* */
- /* FT_MAX_MODULES */
- /* */
- /* The maximum number of modules that can be registered in a single */
- /* FreeType library object. 32 is the default. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Debug level
+ *
+ * FreeType can be compiled in debug or trace mode. In debug mode,
+ * errors are reported through the 'ftdebug' component. In trace mode,
+ * additional messages are sent to the standard output during execution.
+ *
+ * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode.
+ * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode.
+ *
+ * Don't define any of these macros to compile in 'release' mode!
+ *
+ * Do not `#undef` these macros here since the build system might define
+ * them for certain configurations only.
+ */
/* #define FT_DEBUG_LEVEL_ERROR */
/* #define FT_DEBUG_LEVEL_TRACE */
- /*************************************************************************/
- /* */
- /* Autofitter debugging */
- /* */
- /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
- /* control the autofitter behaviour for debugging purposes with global */
- /* boolean variables (consequently, you should *never* enable this */
- /* while compiling in `release' mode): */
- /* */
- /* _af_debug_disable_horz_hints */
- /* _af_debug_disable_vert_hints */
- /* _af_debug_disable_blue_hints */
- /* */
- /* Additionally, the following functions provide dumps of various */
- /* internal autofit structures to stdout (using `printf'): */
- /* */
- /* af_glyph_hints_dump_points */
- /* af_glyph_hints_dump_segments */
- /* af_glyph_hints_dump_edges */
- /* af_glyph_hints_get_num_segments */
- /* af_glyph_hints_get_segment_offset */
- /* */
- /* As an argument, they use another global variable: */
- /* */
- /* _af_debug_hints */
- /* */
- /* Please have a look at the `ftgrid' demo program to see how those */
- /* variables and macros should be used. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * Autofitter debugging
+ *
+ * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to
+ * control the autofitter behaviour for debugging purposes with global
+ * boolean variables (consequently, you should **never** enable this
+ * while compiling in 'release' mode):
+ *
+ * ```
+ * _af_debug_disable_horz_hints
+ * _af_debug_disable_vert_hints
+ * _af_debug_disable_blue_hints
+ * ```
+ *
+ * Additionally, the following functions provide dumps of various
+ * internal autofit structures to stdout (using `printf`):
+ *
+ * ```
+ * af_glyph_hints_dump_points
+ * af_glyph_hints_dump_segments
+ * af_glyph_hints_dump_edges
+ * af_glyph_hints_get_num_segments
+ * af_glyph_hints_get_segment_offset
+ * ```
+ *
+ * As an argument, they use another global variable:
+ *
+ * ```
+ * _af_debug_hints
+ * ```
+ *
+ * Please have a look at the `ftgrid` demo program to see how those
+ * variables and macros should be used.
+ *
+ * Do not `#undef` these macros here since the build system might define
+ * them for certain configurations only.
+ */
/* #define FT_DEBUG_AUTOFIT */
- /*************************************************************************/
- /* */
- /* Memory Debugging */
- /* */
- /* FreeType now comes with an integrated memory debugger that is */
- /* capable of detecting simple errors like memory leaks or double */
- /* deletes. To compile it within your build of the library, you */
- /* should define FT_DEBUG_MEMORY here. */
- /* */
- /* Note that the memory debugger is only activated at runtime when */
- /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * Module errors
+ *
+ * If this macro is set (which is _not_ the default), the higher byte of
+ * an error code gives the module in which the error has occurred, while
+ * the lower byte is the real error code.
+ *
+ * Setting this macro makes sense for debugging purposes only, since it
+ * would break source compatibility of certain programs that use
+ * FreeType~2.
+ *
+ * More details can be found in the files `ftmoderr.h` and `fterrors.h`.
+ */
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
- /*************************************************************************/
- /* */
- /* Position Independent Code */
- /* */
- /* If this macro is set (which is _not_ the default), FreeType2 will */
- /* avoid creating constants that require address fixups. Instead the */
- /* constants will be moved into a struct and additional intialization */
- /* code will be used. */
- /* */
- /* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. [Note that standard compilers like gcc or */
- /* clang handle PIC generation automatically; you don't have to set */
- /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
- /* compilers.] */
- /* */
- /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
- /* modules (see `modules.cfg' for a complete list). For building with */
- /* FT_CONFIG_OPTION_PIC support, do the following. */
- /* */
- /* 0. Clone the repository. */
- /* 1. Define FT_CONFIG_OPTION_PIC. */
- /* 2. Remove all subdirectories in `src' that don't have */
- /* FT_CONFIG_OPTION_PIC support. */
- /* 3. Comment out the corresponding modules in `modules.cfg'. */
- /* 4. Compile. */
- /* */
-/* #define FT_CONFIG_OPTION_PIC */
+ /**************************************************************************
+ *
+ * Error Strings
+ *
+ * If this macro is set, `FT_Error_String` will return meaningful
+ * descriptions. This is not enabled by default to reduce the overall
+ * size of FreeType.
+ *
+ * More details can be found in the file `fterrors.h`.
+ */
+/* #define FT_CONFIG_OPTION_ERROR_STRINGS */
/*************************************************************************/
@@ -524,50 +515,60 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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` 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_COLOR_LAYERS` if you want to support coloured
+ * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
+ * module (namely TrueType~& OpenType).
+ */
+#define TT_CONFIG_OPTION_COLOR_LAYERS
+
+
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
+ * load and enumerate the glyph Postscript names in a TrueType or OpenType
+ * file.
+ *
+ * Note that when you do not compile the 'psnames' module by undefining the
+ * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
+ * contain additional code used to read the PS Names table from a font.
+ *
+ * (By default, the module uses 'psnames' to extract glyph names.)
+ */
#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
- /* access the internal name table in a SFNT-based format like TrueType */
- /* or OpenType. The name table contains various strings used to */
- /* describe the font, like family name, copyright, version, etc. It */
- /* does not contain any glyph name though. */
- /* */
- /* Accessing SFNT names is done through the functions declared in */
- /* `ftsnames.h'. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access
+ * the internal name table in a SFNT-based format like TrueType or
+ * OpenType. The name table contains various strings used to describe the
+ * font, like family name, copyright, version, etc. It does not contain
+ * any glyph name though.
+ *
+ * Accessing SFNT names is done through the functions declared in
+ * `ftsnames.h`.
+ */
#define TT_CONFIG_OPTION_SFNT_NAMES
- /*************************************************************************/
- /* */
- /* TrueType CMap support */
- /* */
- /* Here you can fine-tune which TrueType CMap table format shall be */
- /* supported. */
+ /**************************************************************************
+ *
+ * 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
@@ -587,131 +588,130 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
- /* a bytecode interpreter in the TrueType driver. */
- /* */
- /* By undefining this, you will only compile the code necessary to load */
- /* TrueType glyphs without hinting. */
- /* */
- /* Do not #undef this macro here, since the build system might */
- /* define it for certain configurations only. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a
+ * bytecode interpreter in the TrueType driver.
+ *
+ * By undefining this, you will only compile the code necessary to load
+ * TrueType glyphs without hinting.
+ *
+ * Do not `#undef` this macro here, since the build system might define it
+ * for certain configurations only.
+ */
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* subpixel hinting support into the TrueType driver. This modifies the */
- /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
- /* requested. */
- /* */
- /* In particular, it modifies the bytecode interpreter to interpret (or */
- /* not) instructions in a certain way so that all TrueType fonts look */
- /* like they do in a Windows ClearType (DirectWrite) environment. See */
- /* [1] for a technical overview on what this means. See `ttinterp.h' */
- /* for more details on the LEAN option. */
- /* */
- /* There are three possible values. */
- /* */
- /* Value 1: */
- /* This value is associated with the `Infinality' moniker, */
- /* contributed by an individual nicknamed Infinality with the goal of */
- /* making TrueType fonts render better than on Windows. A high */
- /* amount of configurability and flexibility, down to rules for */
- /* single glyphs in fonts, but also very slow. Its experimental and */
- /* slow nature and the original developer losing interest meant that */
- /* this option was never enabled in default builds. */
- /* */
- /* The corresponding interpreter version is v38. */
- /* */
- /* Value 2: */
- /* The new default mode for the TrueType driver. The Infinality code */
- /* base was stripped to the bare minimum and all configurability */
- /* removed in the name of speed and simplicity. The configurability */
- /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
- /* Courier. Legacy fonts are fonts that modify vertical stems to */
- /* achieve clean black-and-white bitmaps. The new mode focuses on */
- /* applying a minimal set of rules to all fonts indiscriminately so */
- /* that modern and web fonts render well while legacy fonts render */
- /* okay. */
- /* */
- /* The corresponding interpreter version is v40. */
- /* */
- /* Value 3: */
- /* Compile both, making both v38 and v40 available (the latter is the */
- /* default). */
- /* */
- /* By undefining these, you get rendering behavior like on Windows */
- /* without ClearType, i.e., Windows XP without ClearType enabled and */
- /* Win9x (interpreter version v35). Or not, depending on how much */
- /* hinting blood and testing tears the font designer put into a given */
- /* font. If you define one or both subpixel hinting options, you can */
- /* switch between between v35 and the ones you define (using */
- /* `FT_Property_Set'). */
- /* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
- /* */
- /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile
+ * subpixel hinting support into the TrueType driver. This modifies the
+ * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is
+ * requested.
+ *
+ * In particular, it modifies the bytecode interpreter to interpret (or
+ * not) instructions in a certain way so that all TrueType fonts look like
+ * they do in a Windows ClearType (DirectWrite) environment. See [1] for a
+ * technical overview on what this means. See `ttinterp.h` for more
+ * details on the LEAN option.
+ *
+ * There are three possible values.
+ *
+ * Value 1:
+ * This value is associated with the 'Infinality' moniker, contributed by
+ * an individual nicknamed Infinality with the goal of making TrueType
+ * fonts render better than on Windows. A high amount of configurability
+ * and flexibility, down to rules for single glyphs in fonts, but also
+ * very slow. Its experimental and slow nature and the original
+ * developer losing interest meant that this option was never enabled in
+ * default builds.
+ *
+ * The corresponding interpreter version is v38.
+ *
+ * Value 2:
+ * The new default mode for the TrueType driver. The Infinality code
+ * base was stripped to the bare minimum and all configurability removed
+ * in the name of speed and simplicity. The configurability was mainly
+ * aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
+ * Legacy fonts are fonts that modify vertical stems to achieve clean
+ * black-and-white bitmaps. The new mode focuses on applying a minimal
+ * set of rules to all fonts indiscriminately so that modern and web
+ * fonts render well while legacy fonts render okay.
+ *
+ * The corresponding interpreter version is v40.
+ *
+ * Value 3:
+ * Compile both, making both v38 and v40 available (the latter is the
+ * default).
+ *
+ * By undefining these, you get rendering behavior like on Windows without
+ * ClearType, i.e., Windows XP without ClearType enabled and Win9x
+ * (interpreter version v35). Or not, depending on how much hinting blood
+ * and testing tears the font designer put into a given font. If you
+ * define one or both subpixel hinting options, you can switch between
+ * between v35 and the ones you define (using `FT_Property_Set`).
+ *
+ * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be
+ * defined.
+ *
+ * [1]
+ * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+ */
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
- /* TrueType glyph loader to use Apple's definition of how to handle */
- /* component offsets in composite glyphs. */
- /* */
- /* Apple and MS disagree on the default behavior of component offsets */
- /* in composites. Apple says that they should be scaled by the scaling */
- /* factors in the transformation matrix (roughly, it's more complex) */
- /* while MS says they should not. OpenType defines two bits in the */
- /* composite flags array which can be used to disambiguate, but old */
- /* fonts will not have them. */
- /* */
- /* https://www.microsoft.com/typography/otspec/glyf.htm */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
- /* */
+ /**************************************************************************
+ *
+ * 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.
+ *
+ * https://www.microsoft.com/typography/otspec/glyf.htm
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
+ */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
- /* support for Apple's distortable font technology (fvar, gvar, cvar, */
- /* and avar tables). This has many similarities to Type 1 Multiple */
- /* Masters support. */
- /* */
+ /**************************************************************************
+ *
+ * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support
+ * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and
+ * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType
+ * also. 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` if you want to include support for an
+ * embedded 'BDF~' table within SFNT-based bitmap formats.
+ */
#define TT_CONFIG_OPTION_BDF
- /*************************************************************************/
- /* */
- /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
- /* number of bytecode instructions executed for a single run of the */
- /* bytecode interpreter, needed to prevent infinite loops. You don't */
- /* want to change this except for very special situations (e.g., making */
- /* a library fuzzer spend less time to handle broken fonts). */
- /* */
- /* It is not expected that this value is ever modified by a configuring */
- /* script; instead, it gets surrounded with #ifndef ... #endif so that */
- /* the value can be set as a preprocessor option on the compiler's */
- /* command line. */
- /* */
+ /**************************************************************************
+ *
+ * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum
+ * number of bytecode instructions executed for a single run of the
+ * bytecode interpreter, needed to prevent infinite loops. You don't want
+ * to change this except for very special situations (e.g., making a
+ * library fuzzer spend less time to handle broken fonts).
+ *
+ * It is not expected that this value is ever modified by a configuring
+ * script; instead, it gets surrounded with `#ifndef ... #endif` so that
+ * the value can be set as a preprocessor option on the compiler's command
+ * line.
+ */
#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
#endif
@@ -726,59 +726,58 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
- /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
- /* required. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays
+ * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required.
+ */
#define T1_MAX_DICT_DEPTH 5
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
+ /**************************************************************************
+ *
+ * `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. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A
+ * minimum of~16 is required.
+ *
+ * The Chinese font 'MingTiEG-Medium' (covering the 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. */
- /* */
+ /**************************************************************************
+ *
+ * Define this configuration macro if you want to prevent the compilation
+ * of the 't1afm' module, which is in charge of reading Type~1 AFM files
+ * into an existing face. Note that if set, the Type~1 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
- /*************************************************************************/
- /* */
- /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1 */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the type1 driver module. */
- /* */
+ /**************************************************************************
+ *
+ * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1
+ * engine gets compiled into FreeType. If defined, it is possible to
+ * switch between the two engines using the `hinting-engine` property of
+ * the 'type1' driver module.
+ */
/* #define T1_CONFIG_OPTION_OLD_ENGINE */
@@ -791,17 +790,16 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */
- /* possible to set up the default values of the four control points that */
- /* define the stem darkening behaviour of the (new) CFF engine. For */
- /* more details please read the documentation of the */
- /* `darkening-parameters' property (file `ftdriver.h'), which allows the */
- /* control at run-time. */
- /* */
- /* Do *not* undefine these macros! */
- /* */
+ /**************************************************************************
+ *
+ * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is
+ * possible to set up the default values of the four control points that
+ * define the stem darkening behaviour of the (new) CFF engine. For more
+ * details please read the documentation of the `darkening-parameters`
+ * property (file `ftdriver.h`), which allows the control at run-time.
+ *
+ * Do **not** undefine these macros!
+ */
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400
@@ -815,13 +813,13 @@ FT_BEGIN_HEADER
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0
- /*************************************************************************/
- /* */
- /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the cff driver module. */
- /* */
+ /**************************************************************************
+ *
+ * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine
+ * gets compiled into FreeType. If defined, it is possible to switch
+ * between the two engines using the `hinting-engine` property of the 'cff'
+ * driver module.
+ */
/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
@@ -834,21 +832,21 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* There are many PCF fonts just called `Fixed' which look completely */
- /* different, and which have nothing to do with each other. When */
- /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
- /* random, the style changes often if one changes the size and one */
- /* cannot select some fonts at all. This option makes the PCF module */
- /* prepend the foundry name (plus a space) to the family name. */
- /* */
- /* We also check whether we have `wide' characters; all put together, we */
- /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
- /* */
- /* If this option is activated, it can be controlled with the */
- /* `no-long-family-names' property of the pcf driver module. */
- /* */
+ /**************************************************************************
+ *
+ * There are many PCF fonts just called 'Fixed' which look completely
+ * different, and which have nothing to do with each other. When selecting
+ * 'Fixed' in KDE or Gnome one gets results that appear rather random, the
+ * style changes often if one changes the size and one cannot select some
+ * fonts at all. This option makes the 'pcf' module prepend the foundry
+ * name (plus a space) to the family name.
+ *
+ * We also check whether we have 'wide' characters; all put together, we
+ * get family names like 'Sony Fixed' or 'Misc Fixed Wide'.
+ *
+ * If this option is activated, it can be controlled with the
+ * `no-long-family-names` property of the 'pcf' driver module.
+ */
/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
@@ -861,69 +859,76 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
- /* support. */
- /* */
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script
+ * support.
+ */
#define AF_CONFIG_OPTION_CJK
- /*************************************************************************/
- /* */
- /* Compile autofit module with fallback Indic script support, covering */
- /* some scripts that the `latin' submodule of the autofit module doesn't */
- /* (yet) handle. */
- /* */
+
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with fallback Indic script support, covering
+ * some scripts that the 'latin' submodule of the 'autofit' module doesn't
+ * (yet) handle.
+ */
#define AF_CONFIG_OPTION_INDIC
- /*************************************************************************/
- /* */
- /* Compile autofit module with warp hinting. The idea of the warping */
- /* code is to slightly scale and shift a glyph within a single dimension */
- /* so that as much of its segments are aligned (more or less) on the */
- /* grid. To find out the optimal scaling and shifting value, various */
- /* parameter combinations are tried and scored. */
- /* */
- /* This experimental option is active only if the rendering mode is */
- /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
- /* `warping' property of the auto-hinter (see file `ftdriver.h' for more */
- /* information; by default it is switched off). */
- /* */
+
+ /**************************************************************************
+ *
+ * Compile 'autofit' module with warp hinting. The idea of the warping
+ * code is to slightly scale and shift a glyph within a single dimension so
+ * that as much of its segments are aligned (more or less) on the grid. To
+ * find out the optimal scaling and shifting value, various parameter
+ * combinations are tried and scored.
+ *
+ * You can switch warping on and off with the `warping` property of the
+ * auto-hinter (see file `ftdriver.h` for more information; by default it
+ * is switched off).
+ *
+ * This experimental option is not active if the rendering mode is
+ * `FT_RENDER_MODE_LIGHT`.
+ */
#define AF_CONFIG_OPTION_USE_WARPER
- /*************************************************************************/
- /* */
- /* Use TrueType-like size metrics for `light' auto-hinting. */
- /* */
- /* It is strongly recommended to avoid this option, which exists only to */
- /* help some legacy applications retain its appearance and behaviour */
- /* with respect to auto-hinted TrueType fonts. */
- /* */
- /* The very reason this option exists at all are GNU/Linux distributions */
- /* like Fedora that did not un-patch the following change (which was */
- /* present in FreeType between versions 2.4.6 and 2.7.1, inclusive). */
- /* */
- /* 2011-07-16 Steven Chu <steven.f.chu@gmail.com> */
- /* */
- /* [truetype] Fix metrics on size request for scalable fonts. */
- /* */
- /* This problematic commit is now reverted (more or less). */
- /* */
+
+ /**************************************************************************
+ *
+ * Use TrueType-like size metrics for 'light' auto-hinting.
+ *
+ * It is strongly recommended to avoid this option, which exists only to
+ * help some legacy applications retain its appearance and behaviour with
+ * respect to auto-hinted TrueType fonts.
+ *
+ * The very reason this option exists at all are GNU/Linux distributions
+ * like Fedora that did not un-patch the following change (which was
+ * present in FreeType between versions 2.4.6 and 2.7.1, inclusive).
+ *
+ * ```
+ * 2011-07-16 Steven Chu <steven.f.chu@gmail.com>
+ *
+ * [truetype] Fix metrics on size request for scalable fonts.
+ * ```
+ *
+ * This problematic commit is now reverted (more or less).
+ */
/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
/* */
/*
- * This macro is obsolete. Support has been removed in FreeType
- * version 2.5.
+ * This macro is obsolete. Support has been removed in FreeType version
+ * 2.5.
*/
/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
/*
- * This macro is defined if native TrueType hinting is requested by the
- * definitions above.
+ * The next three macros are defined if native TrueType hinting is
+ * requested by the definitions above. Don't change this.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
@@ -942,7 +947,7 @@ FT_BEGIN_HEADER
/*
* Check CFF darkening parameters. The checks are the same as in function
- * `cff_property_set' in file `cffdrivr.c'.
+ * `cff_property_set` in file `cffdrivr.c`.
*/
#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \
diff --git a/freetype/include/freetype/config/ftstdlib.h b/freetype/include/freetype/config/ftstdlib.h
index 42f9a06e..438b6145 100644
--- a/freetype/include/freetype/config/ftstdlib.h
+++ b/freetype/include/freetype/config/ftstdlib.h
@@ -1,31 +1,31 @@
-/***************************************************************************/
-/* */
-/* ftstdlib.h */
-/* */
-/* ANSI-specific library and header configuration file (specification */
-/* only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftstdlib.h
+ *
+ * ANSI-specific library and header configuration file (specification
+ * only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -37,23 +37,23 @@
#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. */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * 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 FreeType~2 with all fonts.
+ *
+ * In these cases, `ftconfig.h` will refuse to compile anyway with a
+ * message like 'couldn't find 32-bit type' or something similar.
+ *
+ */
#include <limits.h>
@@ -68,11 +68,11 @@
#define FT_ULONG_MAX ULONG_MAX
- /**********************************************************************/
- /* */
- /* character and string processing */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * character and string processing
+ *
+ */
#include <string.h>
@@ -92,11 +92,11 @@
#define ft_strstr strstr
- /**********************************************************************/
- /* */
- /* file handling */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * file handling
+ *
+ */
#include <stdio.h>
@@ -110,11 +110,11 @@
#define ft_sprintf sprintf
- /**********************************************************************/
- /* */
- /* sorting */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * sorting
+ *
+ */
#include <stdlib.h>
@@ -122,11 +122,11 @@
#define ft_qsort qsort
- /**********************************************************************/
- /* */
- /* memory allocation */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * memory allocation
+ *
+ */
#define ft_scalloc calloc
@@ -135,36 +135,36 @@
#define ft_srealloc realloc
- /**********************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * miscellaneous
+ *
+ */
#define ft_strtol strtol
#define ft_getenv getenv
- /**********************************************************************/
- /* */
- /* execution control */
- /* */
- /**********************************************************************/
+ /**************************************************************************
+ *
+ * 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_jmp_buf jmp_buf /* note: this cannot be a typedef since */
+ /* `jmp_buf` is defined as a macro */
+ /* on certain platforms */
#define ft_longjmp longjmp
#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
- /* the following is only used for debugging purposes, i.e., if */
- /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
+ /* 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>
diff --git a/freetype/include/freetype/freetype.h b/freetype/include/freetype/freetype.h
index 96644046..a6bb667e 100644
--- a/freetype/include/freetype/freetype.h
+++ b/freetype/include/freetype/freetype.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* freetype.h */
-/* */
-/* FreeType high-level API and common types (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * freetype.h
+ *
+ * FreeType high-level API and common types (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -39,56 +39,55 @@ FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* header_inclusion */
- /* */
- /* <Title> */
- /* FreeType's header inclusion scheme */
- /* */
- /* <Abstract> */
- /* How client applications should include FreeType header files. */
- /* */
- /* <Description> */
- /* To be as flexible as possible (and for historical reasons), */
- /* FreeType uses a very special inclusion scheme to load header */
- /* files, for example */
- /* */
- /* { */
- /* #include <ft2build.h> */
- /* */
- /* #include FT_FREETYPE_H */
- /* #include FT_OUTLINE_H */
- /* } */
- /* */
- /* A compiler and its preprocessor only needs an include path to find */
- /* the file `ft2build.h'; the exact locations and names of the other */
- /* FreeType header files are hidden by preprocessor macro names, */
- /* loaded by `ft2build.h'. The API documentation always gives the */
- /* header macro name needed for a particular function. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * header_inclusion
+ *
+ * @title:
+ * FreeType's header inclusion scheme
+ *
+ * @abstract:
+ * How client applications should include FreeType header files.
+ *
+ * @description:
+ * To be as flexible as possible (and for historical reasons), FreeType
+ * uses a very special inclusion scheme to load header files, for example
+ *
+ * ```
+ * #include <ft2build.h>
+ *
+ * #include FT_FREETYPE_H
+ * #include FT_OUTLINE_H
+ * ```
+ *
+ * A compiler and its preprocessor only needs an include path to find the
+ * file `ft2build.h`; the exact locations and names of the other FreeType
+ * header files are hidden by @header_file_macros, loaded by
+ * `ft2build.h`. The API documentation always gives the header macro
+ * name needed for a particular function.
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Section> */
- /* user_allocation */
- /* */
- /* <Title> */
- /* User allocation */
- /* */
- /* <Abstract> */
- /* How client applications should allocate FreeType data structures. */
- /* */
- /* <Description> */
- /* FreeType assumes that structures allocated by the user and passed */
- /* as arguments are zeroed out except for the actual data. In other */
- /* words, it is recommended to use `calloc' (or variants of it) */
- /* instead of `malloc' for allocation. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * user_allocation
+ *
+ * @title:
+ * User allocation
+ *
+ * @abstract:
+ * How client applications should allocate FreeType data structures.
+ *
+ * @description:
+ * FreeType assumes that structures allocated by the user and passed as
+ * arguments are zeroed out except for the actual data. In other words,
+ * it is recommended to use `calloc` (or variants of it) instead of
+ * `malloc` for allocation.
+ *
+ */
@@ -101,219 +100,219 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Section> */
- /* base_interface */
- /* */
- /* <Title> */
- /* Base Interface */
- /* */
- /* <Abstract> */
- /* The FreeType~2 base font interface. */
- /* */
- /* <Description> */
- /* This section describes the most important public high-level API */
- /* functions of FreeType~2. */
- /* */
- /* <Order> */
- /* FT_Library */
- /* FT_Face */
- /* FT_Size */
- /* FT_GlyphSlot */
- /* FT_CharMap */
- /* FT_Encoding */
- /* FT_ENC_TAG */
- /* */
- /* FT_FaceRec */
- /* */
- /* FT_FACE_FLAG_SCALABLE */
- /* FT_FACE_FLAG_FIXED_SIZES */
- /* FT_FACE_FLAG_FIXED_WIDTH */
- /* FT_FACE_FLAG_HORIZONTAL */
- /* FT_FACE_FLAG_VERTICAL */
- /* FT_FACE_FLAG_COLOR */
- /* FT_FACE_FLAG_SFNT */
- /* FT_FACE_FLAG_CID_KEYED */
- /* FT_FACE_FLAG_TRICKY */
- /* FT_FACE_FLAG_KERNING */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS */
- /* FT_FACE_FLAG_VARIATION */
- /* FT_FACE_FLAG_GLYPH_NAMES */
- /* FT_FACE_FLAG_EXTERNAL_STREAM */
- /* FT_FACE_FLAG_HINTER */
- /* */
- /* FT_HAS_HORIZONTAL */
- /* FT_HAS_VERTICAL */
- /* FT_HAS_KERNING */
- /* FT_HAS_FIXED_SIZES */
- /* FT_HAS_GLYPH_NAMES */
- /* FT_HAS_COLOR */
- /* FT_HAS_MULTIPLE_MASTERS */
- /* */
- /* FT_IS_SFNT */
- /* FT_IS_SCALABLE */
- /* FT_IS_FIXED_WIDTH */
- /* FT_IS_CID_KEYED */
- /* FT_IS_TRICKY */
- /* FT_IS_NAMED_INSTANCE */
- /* FT_IS_VARIATION */
- /* */
- /* FT_STYLE_FLAG_BOLD */
- /* FT_STYLE_FLAG_ITALIC */
- /* */
- /* FT_SizeRec */
- /* FT_Size_Metrics */
- /* */
- /* FT_GlyphSlotRec */
- /* FT_Glyph_Metrics */
- /* FT_SubGlyph */
- /* */
- /* FT_Bitmap_Size */
- /* */
- /* FT_Init_FreeType */
- /* FT_Done_FreeType */
- /* */
- /* FT_New_Face */
- /* FT_Done_Face */
- /* FT_Reference_Face */
- /* FT_New_Memory_Face */
- /* FT_Face_Properties */
- /* FT_Open_Face */
- /* FT_Open_Args */
- /* FT_Parameter */
- /* FT_Attach_File */
- /* FT_Attach_Stream */
- /* */
- /* FT_Set_Char_Size */
- /* FT_Set_Pixel_Sizes */
- /* FT_Request_Size */
- /* FT_Select_Size */
- /* FT_Size_Request_Type */
- /* FT_Size_RequestRec */
- /* FT_Size_Request */
- /* FT_Set_Transform */
- /* FT_Load_Glyph */
- /* FT_Get_Char_Index */
- /* FT_Get_First_Char */
- /* FT_Get_Next_Char */
- /* FT_Get_Name_Index */
- /* FT_Load_Char */
- /* */
- /* FT_OPEN_MEMORY */
- /* FT_OPEN_STREAM */
- /* FT_OPEN_PATHNAME */
- /* FT_OPEN_DRIVER */
- /* FT_OPEN_PARAMS */
- /* */
- /* FT_LOAD_DEFAULT */
- /* FT_LOAD_RENDER */
- /* FT_LOAD_MONOCHROME */
- /* FT_LOAD_LINEAR_DESIGN */
- /* FT_LOAD_NO_SCALE */
- /* FT_LOAD_NO_HINTING */
- /* FT_LOAD_NO_BITMAP */
- /* FT_LOAD_NO_AUTOHINT */
- /* FT_LOAD_COLOR */
- /* */
- /* FT_LOAD_VERTICAL_LAYOUT */
- /* FT_LOAD_IGNORE_TRANSFORM */
- /* FT_LOAD_FORCE_AUTOHINT */
- /* FT_LOAD_NO_RECURSE */
- /* FT_LOAD_PEDANTIC */
- /* */
- /* FT_LOAD_TARGET_NORMAL */
- /* FT_LOAD_TARGET_LIGHT */
- /* FT_LOAD_TARGET_MONO */
- /* FT_LOAD_TARGET_LCD */
- /* FT_LOAD_TARGET_LCD_V */
- /* */
- /* FT_LOAD_TARGET_MODE */
- /* */
- /* FT_Render_Glyph */
- /* FT_Render_Mode */
- /* FT_Get_Kerning */
- /* FT_Kerning_Mode */
- /* FT_Get_Track_Kerning */
- /* FT_Get_Glyph_Name */
- /* FT_Get_Postscript_Name */
- /* */
- /* FT_CharMapRec */
- /* FT_Select_Charmap */
- /* FT_Set_Charmap */
- /* FT_Get_Charmap_Index */
- /* */
- /* FT_Get_FSType_Flags */
- /* FT_Get_SubGlyph_Info */
- /* */
- /* FT_Face_Internal */
- /* FT_Size_Internal */
- /* FT_Slot_Internal */
- /* */
- /* FT_FACE_FLAG_XXX */
- /* FT_STYLE_FLAG_XXX */
- /* FT_OPEN_XXX */
- /* FT_LOAD_XXX */
- /* FT_LOAD_TARGET_XXX */
- /* FT_SUBGLYPH_FLAG_XXX */
- /* FT_FSTYPE_XXX */
- /* */
- /* FT_HAS_FAST_GLYPHS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * base_interface
+ *
+ * @title:
+ * Base Interface
+ *
+ * @abstract:
+ * The FreeType~2 base font interface.
+ *
+ * @description:
+ * This section describes the most important public high-level API
+ * functions of FreeType~2.
+ *
+ * @order:
+ * FT_Library
+ * FT_Face
+ * FT_Size
+ * FT_GlyphSlot
+ * FT_CharMap
+ * FT_Encoding
+ * FT_ENC_TAG
+ *
+ * FT_FaceRec
+ *
+ * FT_FACE_FLAG_SCALABLE
+ * FT_FACE_FLAG_FIXED_SIZES
+ * FT_FACE_FLAG_FIXED_WIDTH
+ * FT_FACE_FLAG_HORIZONTAL
+ * FT_FACE_FLAG_VERTICAL
+ * FT_FACE_FLAG_COLOR
+ * FT_FACE_FLAG_SFNT
+ * FT_FACE_FLAG_CID_KEYED
+ * FT_FACE_FLAG_TRICKY
+ * FT_FACE_FLAG_KERNING
+ * FT_FACE_FLAG_MULTIPLE_MASTERS
+ * FT_FACE_FLAG_VARIATION
+ * FT_FACE_FLAG_GLYPH_NAMES
+ * FT_FACE_FLAG_EXTERNAL_STREAM
+ * FT_FACE_FLAG_HINTER
+ *
+ * FT_HAS_HORIZONTAL
+ * FT_HAS_VERTICAL
+ * FT_HAS_KERNING
+ * FT_HAS_FIXED_SIZES
+ * FT_HAS_GLYPH_NAMES
+ * FT_HAS_COLOR
+ * FT_HAS_MULTIPLE_MASTERS
+ *
+ * FT_IS_SFNT
+ * FT_IS_SCALABLE
+ * FT_IS_FIXED_WIDTH
+ * FT_IS_CID_KEYED
+ * FT_IS_TRICKY
+ * FT_IS_NAMED_INSTANCE
+ * FT_IS_VARIATION
+ *
+ * FT_STYLE_FLAG_BOLD
+ * FT_STYLE_FLAG_ITALIC
+ *
+ * FT_SizeRec
+ * FT_Size_Metrics
+ *
+ * FT_GlyphSlotRec
+ * FT_Glyph_Metrics
+ * FT_SubGlyph
+ *
+ * FT_Bitmap_Size
+ *
+ * FT_Init_FreeType
+ * FT_Done_FreeType
+ *
+ * FT_New_Face
+ * FT_Done_Face
+ * FT_Reference_Face
+ * FT_New_Memory_Face
+ * FT_Face_Properties
+ * FT_Open_Face
+ * FT_Open_Args
+ * FT_Parameter
+ * FT_Attach_File
+ * FT_Attach_Stream
+ *
+ * FT_Set_Char_Size
+ * FT_Set_Pixel_Sizes
+ * FT_Request_Size
+ * FT_Select_Size
+ * FT_Size_Request_Type
+ * FT_Size_RequestRec
+ * FT_Size_Request
+ * FT_Set_Transform
+ * FT_Load_Glyph
+ * FT_Get_Char_Index
+ * FT_Get_First_Char
+ * FT_Get_Next_Char
+ * FT_Get_Name_Index
+ * FT_Load_Char
+ *
+ * FT_OPEN_MEMORY
+ * FT_OPEN_STREAM
+ * FT_OPEN_PATHNAME
+ * FT_OPEN_DRIVER
+ * FT_OPEN_PARAMS
+ *
+ * FT_LOAD_DEFAULT
+ * FT_LOAD_RENDER
+ * FT_LOAD_MONOCHROME
+ * FT_LOAD_LINEAR_DESIGN
+ * FT_LOAD_NO_SCALE
+ * FT_LOAD_NO_HINTING
+ * FT_LOAD_NO_BITMAP
+ * FT_LOAD_NO_AUTOHINT
+ * FT_LOAD_COLOR
+ *
+ * FT_LOAD_VERTICAL_LAYOUT
+ * FT_LOAD_IGNORE_TRANSFORM
+ * FT_LOAD_FORCE_AUTOHINT
+ * FT_LOAD_NO_RECURSE
+ * FT_LOAD_PEDANTIC
+ *
+ * FT_LOAD_TARGET_NORMAL
+ * FT_LOAD_TARGET_LIGHT
+ * FT_LOAD_TARGET_MONO
+ * FT_LOAD_TARGET_LCD
+ * FT_LOAD_TARGET_LCD_V
+ *
+ * FT_LOAD_TARGET_MODE
+ *
+ * FT_Render_Glyph
+ * FT_Render_Mode
+ * FT_Get_Kerning
+ * FT_Kerning_Mode
+ * FT_Get_Track_Kerning
+ * FT_Get_Glyph_Name
+ * FT_Get_Postscript_Name
+ *
+ * FT_CharMapRec
+ * FT_Select_Charmap
+ * FT_Set_Charmap
+ * FT_Get_Charmap_Index
+ *
+ * FT_Get_FSType_Flags
+ * FT_Get_SubGlyph_Info
+ *
+ * FT_Face_Internal
+ * FT_Size_Internal
+ * FT_Slot_Internal
+ *
+ * FT_FACE_FLAG_XXX
+ * FT_STYLE_FLAG_XXX
+ * FT_OPEN_XXX
+ * FT_LOAD_XXX
+ * FT_LOAD_TARGET_XXX
+ * FT_SUBGLYPH_FLAG_XXX
+ * FT_FSTYPE_XXX
+ *
+ * FT_HAS_FAST_GLYPHS
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Glyph_Metrics */
- /* */
- /* <Description> */
- /* A structure to model the metrics of a single glyph. The values */
- /* are expressed in 26.6 fractional pixel format; if the flag */
- /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */
- /* are expressed in font units instead. */
- /* */
- /* <Fields> */
- /* width :: */
- /* The glyph's width. */
- /* */
- /* height :: */
- /* The glyph's height. */
- /* */
- /* horiBearingX :: */
- /* Left side bearing for horizontal layout. */
- /* */
- /* horiBearingY :: */
- /* Top side bearing for horizontal layout. */
- /* */
- /* horiAdvance :: */
- /* Advance width for horizontal layout. */
- /* */
- /* vertBearingX :: */
- /* Left side bearing for vertical layout. */
- /* */
- /* vertBearingY :: */
- /* Top side bearing for vertical layout. Larger positive values */
- /* mean further below the vertical glyph origin. */
- /* */
- /* vertAdvance :: */
- /* Advance height for vertical layout. Positive values mean the */
- /* glyph has a positive advance downward. */
- /* */
- /* <Note> */
- /* If not disabled with @FT_LOAD_NO_HINTING, the values represent */
- /* dimensions of the hinted glyph (in case hinting is applicable). */
- /* */
- /* Stroking a glyph with an outside border does not increase */
- /* `horiAdvance' or `vertAdvance'; you have to manually adjust these */
- /* values to account for the added width and height. */
- /* */
- /* FreeType doesn't use the `VORG' table data for CFF fonts because */
- /* it doesn't have an interface to quickly retrieve the glyph height. */
- /* The y~coordinate of the vertical origin can be simply computed as */
- /* `vertBearingY + height' after loading a glyph. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Glyph_Metrics
+ *
+ * @description:
+ * A structure to model the metrics of a single glyph. The values are
+ * expressed in 26.6 fractional pixel format; if the flag
+ * @FT_LOAD_NO_SCALE has been used while loading the glyph, values are
+ * expressed in font units instead.
+ *
+ * @fields:
+ * width ::
+ * The glyph's width.
+ *
+ * height ::
+ * The glyph's height.
+ *
+ * horiBearingX ::
+ * Left side bearing for horizontal layout.
+ *
+ * horiBearingY ::
+ * Top side bearing for horizontal layout.
+ *
+ * horiAdvance ::
+ * Advance width for horizontal layout.
+ *
+ * vertBearingX ::
+ * Left side bearing for vertical layout.
+ *
+ * vertBearingY ::
+ * Top side bearing for vertical layout. Larger positive values mean
+ * further below the vertical glyph origin.
+ *
+ * vertAdvance ::
+ * Advance height for vertical layout. Positive values mean the glyph
+ * has a positive advance downward.
+ *
+ * @note:
+ * If not disabled with @FT_LOAD_NO_HINTING, the values represent
+ * dimensions of the hinted glyph (in case hinting is applicable).
+ *
+ * Stroking a glyph with an outside border does not increase
+ * `horiAdvance` or `vertAdvance`; you have to manually adjust these
+ * values to account for the added width and height.
+ *
+ * FreeType doesn't use the 'VORG' table data for CFF fonts because it
+ * doesn't have an interface to quickly retrieve the glyph height. The
+ * y~coordinate of the vertical origin can be simply computed as
+ * `vertBearingY + height` after loading a glyph.
+ */
typedef struct FT_Glyph_Metrics_
{
FT_Pos width;
@@ -330,44 +329,45 @@ FT_BEGIN_HEADER
} FT_Glyph_Metrics;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Bitmap_Size */
- /* */
- /* <Description> */
- /* This structure models the metrics of a bitmap strike (i.e., a set */
- /* of glyphs for a given point size and resolution) in a bitmap font. */
- /* It is used for the `available_sizes' field of @FT_Face. */
- /* */
- /* <Fields> */
- /* height :: The vertical distance, in pixels, between two */
- /* consecutive baselines. It is always positive. */
- /* */
- /* width :: The average width, in pixels, of all glyphs in the */
- /* strike. */
- /* */
- /* size :: The nominal size of the strike in 26.6 fractional */
- /* points. This field is not very useful. */
- /* */
- /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */
- /* pixels. */
- /* */
- /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */
- /* pixels. */
- /* */
- /* <Note> */
- /* Windows FNT: */
- /* The nominal size given in a FNT font is not reliable. If the */
- /* driver finds it incorrect, it sets `size' to some calculated */
- /* values, and `x_ppem' and `y_ppem' to the pixel width and height */
- /* given in the font, respectively. */
- /* */
- /* TrueType embedded bitmaps: */
- /* `size', `width', and `height' values are not contained in the */
- /* bitmap strike itself. They are computed from the global font */
- /* parameters. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Bitmap_Size
+ *
+ * @description:
+ * This structure models the metrics of a bitmap strike (i.e., a set of
+ * glyphs for a given point size and resolution) in a bitmap font. It is
+ * used for the `available_sizes` field of @FT_Face.
+ *
+ * @fields:
+ * height ::
+ * The vertical distance, in pixels, between two consecutive baselines.
+ * It is always positive.
+ *
+ * width ::
+ * The average width, in pixels, of all glyphs in the strike.
+ *
+ * size ::
+ * The nominal size of the strike in 26.6 fractional points. This
+ * field is not very useful.
+ *
+ * x_ppem ::
+ * The horizontal ppem (nominal width) in 26.6 fractional pixels.
+ *
+ * y_ppem ::
+ * The vertical ppem (nominal height) in 26.6 fractional pixels.
+ *
+ * @note:
+ * Windows FNT:
+ * The nominal size given in a FNT font is not reliable. If the driver
+ * finds it incorrect, it sets `size` to some calculated values, and
+ * `x_ppem` and `y_ppem` to the pixel width and height given in the
+ * font, respectively.
+ *
+ * TrueType embedded bitmaps:
+ * `size`, `width`, and `height` values are not contained in the bitmap
+ * strike itself. They are computed from the global font parameters.
+ */
typedef struct FT_Bitmap_Size_
{
FT_Short height;
@@ -389,225 +389,218 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Library */
- /* */
- /* <Description> */
- /* A handle to a FreeType library instance. Each `library' is */
- /* completely independent from the others; it is the `root' of a set */
- /* of objects like fonts, faces, sizes, etc. */
- /* */
- /* It also embeds a memory manager (see @FT_Memory), as well as a */
- /* scan-line converter object (see @FT_Raster). */
- /* */
- /* In multi-threaded applications it is easiest to use one */
- /* `FT_Library' object per thread. In case this is too cumbersome, */
- /* a single `FT_Library' object across threads is possible also */
- /* (since FreeType version 2.5.6), as long as a mutex lock is used */
- /* around @FT_New_Face and @FT_Done_Face. */
- /* */
- /* <Note> */
- /* Library objects are normally created by @FT_Init_FreeType, and */
- /* destroyed with @FT_Done_FreeType. If you need reference-counting */
- /* (cf. @FT_Reference_Library), use @FT_New_Library and */
- /* @FT_Done_Library. */
- /* */
+ /**************************************************************************
+ *
+ * @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).
+ *
+ * [Since 2.5.6] In multi-threaded applications it is easiest to use one
+ * `FT_Library` object per thread. In case this is too cumbersome, a
+ * single `FT_Library` object across threads is possible also, as long as
+ * a mutex lock is used around @FT_New_Face and @FT_Done_Face.
+ *
+ * @note:
+ * Library objects are normally created by @FT_Init_FreeType, and
+ * destroyed with @FT_Done_FreeType. If you need reference-counting
+ * (cf. @FT_Reference_Library), use @FT_New_Library and @FT_Done_Library.
+ */
typedef struct FT_LibraryRec_ *FT_Library;
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * module_management
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Module */
- /* */
- /* <Description> */
- /* A handle to a given FreeType module object. A module can be a */
- /* font driver, a renderer, or anything else that provides services */
- /* to the former. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Module
+ *
+ * @description:
+ * A handle to a given FreeType module object. A module can be a font
+ * driver, a renderer, or anything else that provides services to the
+ * former.
+ */
typedef struct FT_ModuleRec_* FT_Module;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Driver */
- /* */
- /* <Description> */
- /* A handle to a given FreeType font driver object. A font driver */
- /* is a module capable of creating faces from font files. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Driver
+ *
+ * @description:
+ * A handle to a given FreeType font driver object. A font driver is a
+ * module capable of creating faces from font files.
+ */
typedef struct FT_DriverRec_* FT_Driver;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Renderer */
- /* */
- /* <Description> */
- /* A handle to a given FreeType renderer. A renderer is a module in */
- /* charge of converting a glyph's outline image to a bitmap. It */
- /* supports a single glyph image format, and one or more target */
- /* surface depths. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Renderer
+ *
+ * @description:
+ * A handle to a given FreeType renderer. A renderer is a module in
+ * charge of converting a glyph's outline image to a bitmap. It supports
+ * a single glyph image format, and one or more target surface depths.
+ */
typedef struct FT_RendererRec_* FT_Renderer;
- /*************************************************************************/
- /* */
- /* <Section> */
- /* base_interface */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * base_interface
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Face */
- /* */
- /* <Description> */
- /* A handle to a typographic face object. A face object models a */
- /* given typeface, in a given style. */
- /* */
- /* <Note> */
- /* A face object also owns a single @FT_GlyphSlot object, as well */
- /* as one or more @FT_Size objects. */
- /* */
- /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */
- /* a given filepath or a custom input stream. */
- /* */
- /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
- /* */
- /* An `FT_Face' object can only be safely used from one thread at a */
- /* time. Similarly, creation and destruction of `FT_Face' with the */
- /* same @FT_Library object can only be done from one thread at a */
- /* time. On the other hand, functions like @FT_Load_Glyph and its */
- /* siblings are thread-safe and do not need the lock to be held as */
- /* long as the same `FT_Face' object is not used from multiple */
- /* threads at the same time. */
- /* */
- /* <Also> */
- /* See @FT_FaceRec for the publicly accessible fields of a given face */
- /* object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Face
+ *
+ * @description:
+ * A handle to a typographic face object. A face object models a given
+ * typeface, in a given style.
+ *
+ * @note:
+ * A face object also owns a single @FT_GlyphSlot object, as well as one
+ * or more @FT_Size objects.
+ *
+ * Use @FT_New_Face or @FT_Open_Face to create a new face object from a
+ * given filepath or a custom input stream.
+ *
+ * Use @FT_Done_Face to destroy it (along with its slot and sizes).
+ *
+ * An `FT_Face` object can only be safely used from one thread at a time.
+ * Similarly, creation and destruction of `FT_Face` with the same
+ * @FT_Library object can only be done from one thread at a time. On the
+ * other hand, functions like @FT_Load_Glyph and its siblings are
+ * thread-safe and do not need the lock to be held as long as the same
+ * `FT_Face` object is not used from multiple threads at the same time.
+ *
+ * @also:
+ * See @FT_FaceRec for the publicly accessible fields of a given face
+ * object.
+ */
typedef struct FT_FaceRec_* FT_Face;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Size */
- /* */
- /* <Description> */
- /* A handle to an object that models a face scaled to a given */
- /* character size. */
- /* */
- /* <Note> */
- /* An @FT_Face has one _active_ @FT_Size object that is used by */
- /* functions like @FT_Load_Glyph to determine the scaling */
- /* transformation that in turn is used to load and hint glyphs and */
- /* metrics. */
- /* */
- /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */
- /* @FT_Request_Size or even @FT_Select_Size to change the content */
- /* (i.e., the scaling values) of the active @FT_Size. */
- /* */
- /* You can use @FT_New_Size to create additional size objects for a */
- /* given @FT_Face, but they won't be used by other functions until */
- /* you activate it through @FT_Activate_Size. Only one size can be */
- /* activated at any given time per face. */
- /* */
- /* <Also> */
- /* See @FT_SizeRec for the publicly accessible fields of a given size */
- /* object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Size
+ *
+ * @description:
+ * A handle to an object that models a face scaled to a given character
+ * size.
+ *
+ * @note:
+ * An @FT_Face has one _active_ @FT_Size object that is used by functions
+ * like @FT_Load_Glyph to determine the scaling transformation that in
+ * turn is used to load and hint glyphs and metrics.
+ *
+ * You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size
+ * or even @FT_Select_Size to change the content (i.e., the scaling
+ * values) of the active @FT_Size.
+ *
+ * You can use @FT_New_Size to create additional size objects for a given
+ * @FT_Face, but they won't be used by other functions until you activate
+ * it through @FT_Activate_Size. Only one size can be activated at any
+ * given time per face.
+ *
+ * @also:
+ * See @FT_SizeRec for the publicly accessible fields of a given size
+ * object.
+ */
typedef struct FT_SizeRec_* FT_Size;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a given `glyph slot'. A slot is a container that can */
- /* hold any of the glyphs contained in its parent face. */
- /* */
- /* In other words, each time you call @FT_Load_Glyph or */
- /* @FT_Load_Char, the slot's content is erased by the new glyph data, */
- /* i.e., the glyph's metrics, its image (bitmap or outline), and */
- /* other control information. */
- /* */
- /* <Also> */
- /* See @FT_GlyphSlotRec for the publicly accessible glyph fields. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_GlyphSlot
+ *
+ * @description:
+ * A handle to a given 'glyph slot'. A slot is a container that can hold
+ * any of the glyphs contained in its parent face.
+ *
+ * In other words, each time you call @FT_Load_Glyph or @FT_Load_Char,
+ * the slot's content is erased by the new glyph data, i.e., the glyph's
+ * metrics, its image (bitmap or outline), and other control information.
+ *
+ * @also:
+ * See @FT_GlyphSlotRec for the publicly accessible glyph fields.
+ */
typedef struct FT_GlyphSlotRec_* FT_GlyphSlot;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_CharMap */
- /* */
- /* <Description> */
- /* A handle to a character map (usually abbreviated to `charmap'). A */
- /* charmap is used to translate character codes in a given encoding */
- /* into glyph indexes for its parent's face. Some font formats may */
- /* provide several charmaps per font. */
- /* */
- /* Each face object owns zero or more charmaps, but only one of them */
- /* can be `active', providing the data used by @FT_Get_Char_Index or */
- /* @FT_Load_Char. */
- /* */
- /* The list of available charmaps in a face is available through the */
- /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */
- /* */
- /* The currently active charmap is available as `face->charmap'. */
- /* You should call @FT_Set_Charmap to change it. */
- /* */
- /* <Note> */
- /* When a new face is created (either through @FT_New_Face or */
- /* @FT_Open_Face), the library looks for a Unicode charmap within */
- /* the list and automatically activates it. If there is no Unicode */
- /* charmap, FreeType doesn't set an `active' charmap. */
- /* */
- /* <Also> */
- /* See @FT_CharMapRec for the publicly accessible fields of a given */
- /* character map. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_CharMap
+ *
+ * @description:
+ * A handle to a character map (usually abbreviated to 'charmap'). A
+ * charmap is used to translate character codes in a given encoding into
+ * glyph indexes for its parent's face. Some font formats may provide
+ * several charmaps per font.
+ *
+ * Each face object owns zero or more charmaps, but only one of them can
+ * be 'active', providing the data used by @FT_Get_Char_Index or
+ * @FT_Load_Char.
+ *
+ * The list of available charmaps in a face is available through the
+ * `face->num_charmaps` and `face->charmaps` fields of @FT_FaceRec.
+ *
+ * The currently active charmap is available as `face->charmap`. You
+ * should call @FT_Set_Charmap to change it.
+ *
+ * @note:
+ * When a new face is created (either through @FT_New_Face or
+ * @FT_Open_Face), the library looks for a Unicode charmap within the
+ * list and automatically activates it. If there is no Unicode charmap,
+ * FreeType doesn't set an 'active' charmap.
+ *
+ * @also:
+ * See @FT_CharMapRec for the publicly accessible fields of a given
+ * character map.
+ */
typedef struct FT_CharMapRec_* FT_CharMap;
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_ENC_TAG */
- /* */
- /* <Description> */
- /* This macro converts four-letter tags into an unsigned long. It is */
- /* used to define `encoding' identifiers (see @FT_Encoding). */
- /* */
- /* <Note> */
- /* Since many 16-bit compilers don't like 32-bit enumerations, you */
- /* should redefine this macro in case of problems to something like */
- /* this: */
- /* */
- /* { */
- /* #define FT_ENC_TAG( value, a, b, c, d ) value */
- /* } */
- /* */
- /* to get a simple enumeration without assigning special numbers. */
- /* */
+ /**************************************************************************
+ *
+ * @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 ) \
@@ -619,150 +612,147 @@ FT_BEGIN_HEADER
#endif /* FT_ENC_TAG */
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Encoding */
- /* */
- /* <Description> */
- /* An enumeration to specify character sets supported by charmaps. */
- /* Used in the @FT_Select_Charmap API function. */
- /* */
- /* <Note> */
- /* Despite the name, this enumeration lists specific character */
- /* repertories (i.e., charsets), and not text encoding methods (e.g., */
- /* UTF-8, UTF-16, etc.). */
- /* */
- /* Other encodings might be defined in the future. */
- /* */
- /* <Values> */
- /* FT_ENCODING_NONE :: */
- /* The encoding value~0 is reserved. */
- /* */
- /* FT_ENCODING_UNICODE :: */
- /* The Unicode character set. This value covers all versions of */
- /* the Unicode repertoire, including ASCII and Latin-1. Most fonts */
- /* include a Unicode charmap, but not all of them. */
- /* */
- /* For example, if you want to access Unicode value U+1F028 (and */
- /* the font contains it), use value 0x1F028 as the input value for */
- /* @FT_Get_Char_Index. */
- /* */
- /* FT_ENCODING_MS_SYMBOL :: */
- /* Microsoft Symbol encoding, used to encode mathematical symbols */
- /* and wingdings. For more information, see */
- /* `https://www.microsoft.com/typography/otspec/recom.htm', */
- /* `http://www.kostis.net/charsets/symbol.htm', and */
- /* `http://www.kostis.net/charsets/wingding.htm'. */
- /* */
- /* This encoding uses character codes from the PUA (Private Unicode */
- /* Area) in the range U+F020-U+F0FF. */
- /* */
- /* FT_ENCODING_SJIS :: */
- /* Shift JIS encoding for Japanese. More info at */
- /* `https://en.wikipedia.org/wiki/Shift_JIS'. See note on */
- /* multi-byte encodings below. */
- /* */
- /* FT_ENCODING_PRC :: */
- /* Corresponds to encoding systems mainly for Simplified Chinese as */
- /* used in People's Republic of China (PRC). The encoding layout */
- /* is based on GB~2312 and its supersets GBK and GB~18030. */
- /* */
- /* FT_ENCODING_BIG5 :: */
- /* Corresponds to an encoding system for Traditional Chinese as */
- /* used in Taiwan and Hong Kong. */
- /* */
- /* FT_ENCODING_WANSUNG :: */
- /* Corresponds to the Korean encoding system known as Extended */
- /* Wansung (MS Windows code page 949). */
- /* For more information see */
- /* `https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. */
- /* */
- /* FT_ENCODING_JOHAB :: */
- /* The Korean standard character set (KS~C 5601-1992), which */
- /* corresponds to MS Windows code page 1361. This character set */
- /* includes all possible Hangul character combinations. */
- /* */
- /* FT_ENCODING_ADOBE_LATIN_1 :: */
- /* Corresponds to a Latin-1 encoding as defined in a Type~1 */
- /* PostScript font. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_STANDARD :: */
- /* Adobe Standard encoding, as found in Type~1, CFF, and */
- /* OpenType/CFF fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_EXPERT :: */
- /* Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF */
- /* fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_CUSTOM :: */
- /* Corresponds to a custom encoding, as found in Type~1, CFF, and */
- /* OpenType/CFF fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_APPLE_ROMAN :: */
- /* Apple roman encoding. Many TrueType and OpenType fonts contain */
- /* a charmap for this 8-bit encoding, since older versions of Mac */
- /* OS are able to use it. */
- /* */
- /* FT_ENCODING_OLD_LATIN_2 :: */
- /* This value is deprecated and was neither used nor reported by */
- /* FreeType. Don't use or test for it. */
- /* */
- /* FT_ENCODING_MS_SJIS :: */
- /* Same as FT_ENCODING_SJIS. Deprecated. */
- /* */
- /* FT_ENCODING_MS_GB2312 :: */
- /* Same as FT_ENCODING_PRC. Deprecated. */
- /* */
- /* FT_ENCODING_MS_BIG5 :: */
- /* Same as FT_ENCODING_BIG5. Deprecated. */
- /* */
- /* FT_ENCODING_MS_WANSUNG :: */
- /* Same as FT_ENCODING_WANSUNG. Deprecated. */
- /* */
- /* FT_ENCODING_MS_JOHAB :: */
- /* Same as FT_ENCODING_JOHAB. Deprecated. */
- /* */
- /* <Note> */
- /* By default, FreeType enables a Unicode charmap and tags it with */
- /* FT_ENCODING_UNICODE when it is either provided or can be generated */
- /* from PostScript glyph name dictionaries in the font file. */
- /* All other encodings are considered legacy and tagged only if */
- /* explicitly defined in the font file. Otherwise, FT_ENCODING_NONE */
- /* is used. */
- /* */
- /* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
- /* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
- /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out */
- /* which encoding is really present. If, for example, the */
- /* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */
- /* the font is encoded in KOI8-R. */
- /* */
- /* FT_ENCODING_NONE is always set (with a single exception) by the */
- /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */
- /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */
- /* which encoding is really present. For example, */
- /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */
- /* Russian). */
- /* */
- /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
- /* and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to */
- /* FT_ENCODING_APPLE_ROMAN). */
- /* */
- /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */
- /* @FT_Get_CMap_Language_ID to query the Mac language ID that may */
- /* be needed to be able to distinguish Apple encoding variants. See */
- /* */
- /* https://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. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Encoding
+ *
+ * @description:
+ * An enumeration to specify character sets supported by charmaps. Used
+ * in the @FT_Select_Charmap API function.
+ *
+ * @note:
+ * Despite the name, this enumeration lists specific character
+ * repertories (i.e., charsets), and not text encoding methods (e.g.,
+ * UTF-8, UTF-16, etc.).
+ *
+ * Other encodings might be defined in the future.
+ *
+ * @values:
+ * FT_ENCODING_NONE ::
+ * The encoding value~0 is reserved for all formats except BDF, PCF,
+ * and Windows FNT; see below for more information.
+ *
+ * FT_ENCODING_UNICODE ::
+ * The Unicode character set. This value covers all versions of the
+ * Unicode repertoire, including ASCII and Latin-1. Most fonts include
+ * a Unicode charmap, but not all of them.
+ *
+ * For example, if you want to access Unicode value U+1F028 (and the
+ * font contains it), use value 0x1F028 as the input value for
+ * @FT_Get_Char_Index.
+ *
+ * FT_ENCODING_MS_SYMBOL ::
+ * Microsoft Symbol encoding, used to encode mathematical symbols and
+ * wingdings. For more information, see
+ * 'https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts',
+ * 'http://www.kostis.net/charsets/symbol.htm', and
+ * 'http://www.kostis.net/charsets/wingding.htm'.
+ *
+ * This encoding uses character codes from the PUA (Private Unicode
+ * Area) in the range U+F020-U+F0FF.
+ *
+ * FT_ENCODING_SJIS ::
+ * Shift JIS encoding for Japanese. More info at
+ * 'https://en.wikipedia.org/wiki/Shift_JIS'. See note on multi-byte
+ * encodings below.
+ *
+ * FT_ENCODING_PRC ::
+ * Corresponds to encoding systems mainly for Simplified Chinese as
+ * used in People's Republic of China (PRC). The encoding layout is
+ * based on GB~2312 and its supersets GBK and GB~18030.
+ *
+ * FT_ENCODING_BIG5 ::
+ * Corresponds to an encoding system for Traditional Chinese as used in
+ * Taiwan and Hong Kong.
+ *
+ * FT_ENCODING_WANSUNG ::
+ * Corresponds to the Korean encoding system known as Extended Wansung
+ * (MS Windows code page 949). For more information see
+ * 'https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'.
+ *
+ * FT_ENCODING_JOHAB ::
+ * The Korean standard character set (KS~C 5601-1992), which
+ * corresponds to MS Windows code page 1361. This character set
+ * includes all possible Hangul character combinations.
+ *
+ * FT_ENCODING_ADOBE_LATIN_1 ::
+ * Corresponds to a Latin-1 encoding as defined in a Type~1 PostScript
+ * font. It is limited to 256 character codes.
+ *
+ * FT_ENCODING_ADOBE_STANDARD ::
+ * Adobe Standard encoding, as found in Type~1, CFF, and OpenType/CFF
+ * fonts. It is limited to 256 character codes.
+ *
+ * FT_ENCODING_ADOBE_EXPERT ::
+ * Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF
+ * fonts. It is limited to 256 character codes.
+ *
+ * FT_ENCODING_ADOBE_CUSTOM ::
+ * Corresponds to a custom encoding, as found in Type~1, CFF, and
+ * OpenType/CFF fonts. It is limited to 256 character codes.
+ *
+ * FT_ENCODING_APPLE_ROMAN ::
+ * Apple roman encoding. Many TrueType and OpenType fonts contain a
+ * charmap for this 8-bit encoding, since older versions of Mac OS are
+ * able to use it.
+ *
+ * FT_ENCODING_OLD_LATIN_2 ::
+ * This value is deprecated and was neither used nor reported by
+ * FreeType. Don't use or test for it.
+ *
+ * FT_ENCODING_MS_SJIS ::
+ * Same as FT_ENCODING_SJIS. Deprecated.
+ *
+ * FT_ENCODING_MS_GB2312 ::
+ * Same as FT_ENCODING_PRC. Deprecated.
+ *
+ * FT_ENCODING_MS_BIG5 ::
+ * Same as FT_ENCODING_BIG5. Deprecated.
+ *
+ * FT_ENCODING_MS_WANSUNG ::
+ * Same as FT_ENCODING_WANSUNG. Deprecated.
+ *
+ * FT_ENCODING_MS_JOHAB ::
+ * Same as FT_ENCODING_JOHAB. Deprecated.
+ *
+ * @note:
+ * By default, FreeType enables a Unicode charmap and tags it with
+ * `FT_ENCODING_UNICODE` when it is either provided or can be generated
+ * from PostScript glyph name dictionaries in the font file. All other
+ * encodings are considered legacy and tagged only if explicitly defined
+ * in the font file. Otherwise, `FT_ENCODING_NONE` is used.
+ *
+ * `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is
+ * neither Unicode nor ISO-8859-1 (otherwise it is set to
+ * `FT_ENCODING_UNICODE`). Use @FT_Get_BDF_Charset_ID to find out which
+ * encoding is really present. If, for example, the `cs_registry` field
+ * is 'KOI8' and the `cs_encoding` field is 'R', the font is encoded in
+ * KOI8-R.
+ *
+ * `FT_ENCODING_NONE` is always set (with a single exception) by the
+ * winfonts driver. Use @FT_Get_WinFNT_Header and examine the `charset`
+ * field of the @FT_WinFNT_HeaderRec structure to find out which encoding
+ * is really present. For example, @FT_WinFNT_ID_CP1251 (204) means
+ * Windows code page 1251 (for Russian).
+ *
+ * `FT_ENCODING_NONE` is set if `platform_id` is @TT_PLATFORM_MACINTOSH
+ * and `encoding_id` is not `TT_MAC_ID_ROMAN` (otherwise it is set to
+ * `FT_ENCODING_APPLE_ROMAN`).
+ *
+ * If `platform_id` is @TT_PLATFORM_MACINTOSH, use the function
+ * @FT_Get_CMap_Language_ID to query the Mac language ID that may be
+ * needed to be able to distinguish Apple encoding variants. See
+ *
+ * https://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 ),
@@ -796,7 +786,7 @@ FT_BEGIN_HEADER
} FT_Encoding;
- /* these constants are deprecated; use the corresponding `FT_Encoding' */
+ /* these constants are deprecated; use the corresponding `FT_Encoding` */
/* values instead */
#define ft_encoding_none FT_ENCODING_NONE
#define ft_encoding_unicode FT_ENCODING_UNICODE
@@ -815,29 +805,31 @@ FT_BEGIN_HEADER
#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_CharMapRec */
- /* */
- /* <Description> */
- /* The base charmap structure. */
- /* */
- /* <Fields> */
- /* face :: A handle to the parent face object. */
- /* */
- /* encoding :: An @FT_Encoding tag identifying the charmap. Use */
- /* this with @FT_Select_Charmap. */
- /* */
- /* platform_id :: An ID number describing the platform for the */
- /* following encoding ID. This comes directly from */
- /* the TrueType specification and gets emulated for */
- /* other formats. */
- /* */
- /* encoding_id :: A platform specific encoding number. This also */
- /* comes from the TrueType specification and gets */
- /* emulated similarly. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_CharMapRec
+ *
+ * @description:
+ * The base charmap structure.
+ *
+ * @fields:
+ * face ::
+ * A handle to the parent face object.
+ *
+ * encoding ::
+ * An @FT_Encoding tag identifying the charmap. Use this with
+ * @FT_Select_Charmap.
+ *
+ * platform_id ::
+ * An ID number describing the platform for the following encoding ID.
+ * This comes directly from the TrueType specification and gets
+ * emulated for other formats.
+ *
+ * encoding_id ::
+ * A platform-specific encoding number. This also comes from the
+ * TrueType specification and gets emulated similarly.
+ */
typedef struct FT_CharMapRec_
{
FT_Face face;
@@ -857,215 +849,195 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Face_Internal */
- /* */
- /* <Description> */
- /* An opaque handle to an `FT_Face_InternalRec' structure that models */
- /* the private data of a given @FT_Face object. */
- /* */
- /* This structure might change between releases of FreeType~2 and is */
- /* not generally available to client applications. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Face_Internal
+ *
+ * @description:
+ * An opaque handle to an `FT_Face_InternalRec` structure that models the
+ * private data of a given @FT_Face object.
+ *
+ * This structure might change between releases of FreeType~2 and is not
+ * generally available to client applications.
+ */
typedef struct FT_Face_InternalRec_* FT_Face_Internal;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_FaceRec */
- /* */
- /* <Description> */
- /* FreeType root face class structure. A face object models a */
- /* typeface in a font file. */
- /* */
- /* <Fields> */
- /* num_faces :: The number of faces in the font file. Some */
- /* font formats can have multiple faces in */
- /* a single font file. */
- /* */
- /* face_index :: This field holds two different values. */
- /* Bits 0-15 are the index of the face in the */
- /* font file (starting with value~0). They */
- /* are set to~0 if there is only one face in */
- /* the font file. */
- /* */
- /* [Since 2.6.1] Bits 16-30 are relevant to GX */
- /* and OpenType variation fonts only, holding */
- /* the named instance index for the current */
- /* face index (starting with value~1; value~0 */
- /* indicates font access without a named */
- /* instance). For non-variation fonts, bits */
- /* 16-30 are ignored. If we have the third */
- /* named instance of face~4, say, `face_index' */
- /* is set to 0x00030004. */
- /* */
- /* Bit 31 is always zero (this is, */
- /* `face_index' is always a positive value). */
- /* */
- /* [Since 2.9] Changing the design coordinates */
- /* with @FT_Set_Var_Design_Coordinates or */
- /* @FT_Set_Var_Blend_Coordinates does not */
- /* influence the named instance index value */
- /* (only @FT_Set_Named_Instance does that). */
- /* */
- /* face_flags :: A set of bit flags that give important */
- /* information about the face; see */
- /* @FT_FACE_FLAG_XXX for the details. */
- /* */
- /* style_flags :: The lower 16~bits contain a set of bit */
- /* flags indicating the style of the face; see */
- /* @FT_STYLE_FLAG_XXX for the details. */
- /* */
- /* [Since 2.6.1] Bits 16-30 hold the number */
- /* of named instances available for the */
- /* current face if we have a GX or OpenType */
- /* variation (sub)font. Bit 31 is always zero */
- /* (this is, `style_flags' is always a */
- /* positive value). Note that a variation */
- /* font has always at least one named */
- /* instance, namely the default instance. */
- /* */
- /* num_glyphs :: The number of glyphs in the face. If the */
- /* face is scalable and has sbits (see */
- /* `num_fixed_sizes'), it is set to the number */
- /* of outline glyphs. */
- /* */
- /* For CID-keyed fonts (not in an SFNT */
- /* wrapper) this value gives the highest CID */
- /* used in the font. */
- /* */
- /* family_name :: The face's family name. This is an ASCII */
- /* string, usually in English, that describes */
- /* the typeface's family (like `Times New */
- /* Roman', `Bodoni', `Garamond', etc). This */
- /* is a least common denominator used to list */
- /* fonts. Some formats (TrueType & OpenType) */
- /* provide localized and Unicode versions of */
- /* this string. Applications should use the */
- /* format specific interface to access them. */
- /* Can be NULL (e.g., in fonts embedded in a */
- /* PDF file). */
- /* */
- /* In case the font doesn't provide a specific */
- /* family name entry, FreeType tries to */
- /* synthesize one, deriving it from other name */
- /* entries. */
- /* */
- /* style_name :: The face's style name. This is an ASCII */
- /* string, usually in English, that describes */
- /* the typeface's style (like `Italic', */
- /* `Bold', `Condensed', etc). Not all font */
- /* formats provide a style name, so this field */
- /* is optional, and can be set to NULL. As */
- /* for `family_name', some formats provide */
- /* localized and Unicode versions of this */
- /* string. Applications should use the format */
- /* specific interface to access them. */
- /* */
- /* num_fixed_sizes :: The number of bitmap strikes in the face. */
- /* Even if the face is scalable, there might */
- /* still be bitmap strikes, which are called */
- /* `sbits' in that case. */
- /* */
- /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */
- /* strikes in the face. It is set to NULL if */
- /* there is no bitmap strike. */
- /* */
- /* Note that FreeType tries to sanitize the */
- /* strike data since they are sometimes sloppy */
- /* or incorrect, but this can easily fail. */
- /* */
- /* num_charmaps :: The number of charmaps in the face. */
- /* */
- /* charmaps :: An array of the charmaps of the face. */
- /* */
- /* generic :: A field reserved for client uses. See the */
- /* @FT_Generic type description. */
- /* */
- /* bbox :: The font bounding box. Coordinates are */
- /* expressed in font units (see */
- /* `units_per_EM'). The box is large enough */
- /* to contain any glyph from the font. Thus, */
- /* `bbox.yMax' can be seen as the `maximum */
- /* ascender', and `bbox.yMin' as the `minimum */
- /* descender'. Only relevant for scalable */
- /* formats. */
- /* */
- /* Note that the bounding box might be off by */
- /* (at least) one pixel for hinted fonts. See */
- /* @FT_Size_Metrics for further discussion. */
- /* */
- /* units_per_EM :: The number of font units per EM square for */
- /* this face. This is typically 2048 for */
- /* TrueType fonts, and 1000 for Type~1 fonts. */
- /* Only relevant for scalable formats. */
- /* */
- /* ascender :: The typographic ascender of the face, */
- /* expressed in font units. For font formats */
- /* not having this information, it is set to */
- /* `bbox.yMax'. Only relevant for scalable */
- /* formats. */
- /* */
- /* descender :: The typographic descender of the face, */
- /* expressed in font units. For font formats */
- /* not having this information, it is set to */
- /* `bbox.yMin'. Note that this field is */
- /* negative for values below the baseline. */
- /* Only relevant for scalable formats. */
- /* */
- /* height :: This value is the vertical distance */
- /* between two consecutive baselines, */
- /* expressed in font units. It is always */
- /* positive. Only relevant for scalable */
- /* formats. */
- /* */
- /* If you want the global glyph height, use */
- /* `ascender - descender'. */
- /* */
- /* max_advance_width :: The maximum advance width, in font units, */
- /* for all glyphs in this face. This can be */
- /* used to make word wrapping computations */
- /* faster. Only relevant for scalable */
- /* formats. */
- /* */
- /* max_advance_height :: The maximum advance height, in font units, */
- /* for all glyphs in this face. This is only */
- /* relevant for vertical layouts, and is set */
- /* to `height' for fonts that do not provide */
- /* vertical metrics. Only relevant for */
- /* scalable formats. */
- /* */
- /* underline_position :: The position, in font units, of the */
- /* underline line for this face. It is the */
- /* center of the underlining stem. Only */
- /* relevant for scalable formats. */
- /* */
- /* underline_thickness :: The thickness, in font units, of the */
- /* underline for this face. Only relevant for */
- /* scalable formats. */
- /* */
- /* glyph :: The face's associated glyph slot(s). */
- /* */
- /* size :: The current active size for this face. */
- /* */
- /* charmap :: The current active charmap for this face. */
- /* */
- /* <Note> */
- /* Fields may be changed after a call to @FT_Attach_File or */
- /* @FT_Attach_Stream. */
- /* */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `ascender', */
- /* `descender', `height', `underline_position', and */
- /* `underline_thickness'. */
- /* */
- /* Especially for TrueType fonts see also the documentation for */
- /* @FT_Size_Metrics. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_FaceRec
+ *
+ * @description:
+ * FreeType root face class structure. A face object models a typeface
+ * in a font file.
+ *
+ * @fields:
+ * num_faces ::
+ * The number of faces in the font file. Some font formats can have
+ * multiple faces in a single font file.
+ *
+ * face_index ::
+ * This field holds two different values. Bits 0-15 are the index of
+ * the face in the font file (starting with value~0). They are set
+ * to~0 if there is only one face in the font file.
+ *
+ * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation
+ * fonts only, holding the named instance index for the current face
+ * index (starting with value~1; value~0 indicates font access without
+ * a named instance). For non-variation fonts, bits 16-30 are ignored.
+ * If we have the third named instance of face~4, say, `face_index` is
+ * set to 0x00030004.
+ *
+ * Bit 31 is always zero (this is, `face_index` is always a positive
+ * value).
+ *
+ * [Since 2.9] Changing the design coordinates with
+ * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does
+ * not influence the named instance index value (only
+ * @FT_Set_Named_Instance does that).
+ *
+ * face_flags ::
+ * A set of bit flags that give important information about the face;
+ * see @FT_FACE_FLAG_XXX for the details.
+ *
+ * style_flags ::
+ * The lower 16~bits contain a set of bit flags indicating the style of
+ * the face; see @FT_STYLE_FLAG_XXX for the details.
+ *
+ * [Since 2.6.1] Bits 16-30 hold the number of named instances
+ * available for the current face if we have a GX or OpenType variation
+ * (sub)font. Bit 31 is always zero (this is, `style_flags` is always
+ * a positive value). Note that a variation font has always at least
+ * one named instance, namely the default instance.
+ *
+ * num_glyphs ::
+ * The number of glyphs in the face. If the face is scalable and has
+ * sbits (see `num_fixed_sizes`), it is set to the number of outline
+ * glyphs.
+ *
+ * For CID-keyed fonts (not in an SFNT wrapper) this value gives the
+ * highest CID used in the font.
+ *
+ * family_name ::
+ * The face's family name. This is an ASCII string, usually in
+ * English, that describes the typeface's family (like 'Times New
+ * Roman', 'Bodoni', 'Garamond', etc). This is a least common
+ * denominator used to list fonts. Some formats (TrueType & OpenType)
+ * provide localized and Unicode versions of this string. Applications
+ * should use the format-specific interface to access them. Can be
+ * `NULL` (e.g., in fonts embedded in a PDF file).
+ *
+ * In case the font doesn't provide a specific family name entry,
+ * FreeType tries to synthesize one, deriving it from other name
+ * entries.
+ *
+ * style_name ::
+ * The face's style name. This is an ASCII string, usually in English,
+ * that describes the typeface's style (like 'Italic', 'Bold',
+ * 'Condensed', etc). Not all font formats provide a style name, so
+ * this field is optional, and can be set to `NULL`. As for
+ * `family_name`, some formats provide localized and Unicode versions
+ * of this string. Applications should use the format-specific
+ * interface to access them.
+ *
+ * num_fixed_sizes ::
+ * The number of bitmap strikes in the face. Even if the face is
+ * scalable, there might still be bitmap strikes, which are called
+ * 'sbits' in that case.
+ *
+ * available_sizes ::
+ * An array of @FT_Bitmap_Size for all bitmap strikes in the face. It
+ * is set to `NULL` if there is no bitmap strike.
+ *
+ * Note that FreeType tries to sanitize the strike data since they are
+ * sometimes sloppy or incorrect, but this can easily fail.
+ *
+ * num_charmaps ::
+ * The number of charmaps in the face.
+ *
+ * charmaps ::
+ * An array of the charmaps of the face.
+ *
+ * generic ::
+ * A field reserved for client uses. See the @FT_Generic type
+ * description.
+ *
+ * bbox ::
+ * The font bounding box. Coordinates are expressed in font units (see
+ * `units_per_EM`). The box is large enough to contain any glyph from
+ * the font. Thus, `bbox.yMax` can be seen as the 'maximum ascender',
+ * and `bbox.yMin` as the 'minimum descender'. Only relevant for
+ * scalable formats.
+ *
+ * Note that the bounding box might be off by (at least) one pixel for
+ * hinted fonts. See @FT_Size_Metrics for further discussion.
+ *
+ * units_per_EM ::
+ * The number of font units per EM square for this face. This is
+ * typically 2048 for TrueType fonts, and 1000 for Type~1 fonts. Only
+ * relevant for scalable formats.
+ *
+ * ascender ::
+ * The typographic ascender of the face, expressed in font units. For
+ * font formats not having this information, it is set to `bbox.yMax`.
+ * Only relevant for scalable formats.
+ *
+ * descender ::
+ * The typographic descender of the face, expressed in font units. For
+ * font formats not having this information, it is set to `bbox.yMin`.
+ * Note that this field is negative for values below the baseline.
+ * Only relevant for scalable formats.
+ *
+ * height ::
+ * This value is the vertical distance between two consecutive
+ * baselines, expressed in font units. It is always positive. Only
+ * relevant for scalable formats.
+ *
+ * If you want the global glyph height, use `ascender - descender`.
+ *
+ * max_advance_width ::
+ * The maximum advance width, in font units, for all glyphs in this
+ * face. This can be used to make word wrapping computations faster.
+ * Only relevant for scalable formats.
+ *
+ * max_advance_height ::
+ * The maximum advance height, in font units, for all glyphs in this
+ * face. This is only relevant for vertical layouts, and is set to
+ * `height` for fonts that do not provide vertical metrics. Only
+ * relevant for scalable formats.
+ *
+ * underline_position ::
+ * The position, in font units, of the underline line for this face.
+ * It is the center of the underlining stem. Only relevant for
+ * scalable formats.
+ *
+ * underline_thickness ::
+ * The thickness, in font units, of the underline for this face. Only
+ * relevant for scalable formats.
+ *
+ * glyph ::
+ * The face's associated glyph slot(s).
+ *
+ * size ::
+ * The current active size for this face.
+ *
+ * charmap ::
+ * The current active charmap for this face.
+ *
+ * @note:
+ * Fields may be changed after a call to @FT_Attach_File or
+ * @FT_Attach_Stream.
+ *
+ * For an OpenType variation font, the values of the following fields can
+ * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+ * the font contains an 'MVAR' table: `ascender`, `descender`, `height`,
+ * `underline_position`, and `underline_thickness`.
+ *
+ * Especially for TrueType fonts see also the documentation for
+ * @FT_Size_Metrics.
+ */
typedef struct FT_FaceRec_
{
FT_Long num_faces;
@@ -1087,7 +1059,7 @@ FT_BEGIN_HEADER
FT_Generic generic;
- /*# The following member variables (down to `underline_thickness') */
+ /*# The following member variables (down to `underline_thickness`) */
/*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */
/*# for bitmap fonts. */
FT_BBox bbox;
@@ -1125,117 +1097,116 @@ FT_BEGIN_HEADER
} FT_FaceRec;
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_FACE_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags used in the `face_flags' field of the */
- /* @FT_FaceRec structure. They inform client applications of */
- /* properties of the corresponding face. */
- /* */
- /* <Values> */
- /* FT_FACE_FLAG_SCALABLE :: */
- /* The face contains outline glyphs. Note that a face can contain */
- /* bitmap strikes also, i.e., a face can have both this flag and */
- /* @FT_FACE_FLAG_FIXED_SIZES set. */
- /* */
- /* FT_FACE_FLAG_FIXED_SIZES :: */
- /* The face contains bitmap strikes. See also the */
- /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
- /* */
- /* FT_FACE_FLAG_FIXED_WIDTH :: */
- /* The face contains fixed-width characters (like Courier, Lucida, */
- /* MonoType, etc.). */
- /* */
- /* FT_FACE_FLAG_SFNT :: */
- /* The face uses the SFNT storage scheme. For now, this means */
- /* TrueType and OpenType. */
- /* */
- /* FT_FACE_FLAG_HORIZONTAL :: */
- /* The face contains horizontal glyph metrics. This should be set */
- /* for all common formats. */
- /* */
- /* FT_FACE_FLAG_VERTICAL :: */
- /* The face contains vertical glyph metrics. This is only */
- /* available in some formats, not all of them. */
- /* */
- /* FT_FACE_FLAG_KERNING :: */
- /* The face contains kerning information. If set, the kerning */
- /* distance can be retrieved using the function @FT_Get_Kerning. */
- /* Otherwise the function always return the vector (0,0). Note */
- /* that FreeType doesn't handle kerning data from the SFNT `GPOS' */
- /* table (as present in many OpenType fonts). */
- /* */
- /* FT_FACE_FLAG_FAST_GLYPHS :: */
- /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
- /* */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
- /* The face contains multiple masters and is capable of */
- /* interpolating between them. Supported formats are Adobe MM, */
- /* TrueType GX, and OpenType variation fonts. */
- /* */
- /* See section @multiple_masters for API details. */
- /* */
- /* FT_FACE_FLAG_GLYPH_NAMES :: */
- /* The face contains glyph names, which can be retrieved using */
- /* @FT_Get_Glyph_Name. Note that some TrueType fonts contain */
- /* broken glyph name tables. Use the function */
- /* @FT_Has_PS_Glyph_Names when needed. */
- /* */
- /* FT_FACE_FLAG_EXTERNAL_STREAM :: */
- /* Used internally by FreeType to indicate that a face's stream was */
- /* provided by the client application and should not be destroyed */
- /* when @FT_Done_Face is called. Don't read or test this flag. */
- /* */
- /* FT_FACE_FLAG_HINTER :: */
- /* The font driver has a hinting machine of its own. For example, */
- /* with TrueType fonts, it makes sense to use data from the SFNT */
- /* `gasp' table only if the native TrueType hinting engine (with */
- /* the bytecode interpreter) is available and active. */
- /* */
- /* FT_FACE_FLAG_CID_KEYED :: */
- /* The face is CID-keyed. In that case, the face is not accessed */
- /* by glyph indices but by CID values. For subsetted CID-keyed */
- /* fonts this has the consequence that not all index values are a */
- /* valid argument to @FT_Load_Glyph. Only the CID values for which */
- /* corresponding glyphs in the subsetted font exist make */
- /* `FT_Load_Glyph' return successfully; in all other cases you get */
- /* an `FT_Err_Invalid_Argument' error. */
- /* */
- /* Note that CID-keyed fonts that are in an SFNT wrapper (this is, */
- /* all OpenType/CFF fonts) don't have this flag set since the */
- /* glyphs are accessed in the normal way (using contiguous */
- /* indices); the `CID-ness' isn't visible to the application. */
- /* */
- /* FT_FACE_FLAG_TRICKY :: */
- /* The face is `tricky', this is, it always needs the font format's */
- /* native hinting engine to get a reasonable result. A typical */
- /* example is the old Chinese font `mingli.ttf' (but not */
- /* `mingliu.ttc') that uses TrueType bytecode instructions to move */
- /* and scale all of its subglyphs. */
- /* */
- /* It is not possible to auto-hint such fonts using */
- /* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
- /* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */
- /* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */
- /* probably never want this except for demonstration purposes. */
- /* */
- /* Currently, there are about a dozen TrueType fonts in the list of */
- /* tricky fonts; they are hard-coded in file `ttobjs.c'. */
- /* */
- /* FT_FACE_FLAG_COLOR :: */
- /* [Since 2.5.1] The face has color glyph tables. To access color */
- /* glyphs use @FT_LOAD_COLOR. */
- /* */
- /* FT_FACE_FLAG_VARIATION :: */
- /* [Since 2.9] Set if the current face (or named instance) has been */
- /* altered with @FT_Set_MM_Design_Coordinates, */
- /* @FT_Set_Var_Design_Coordinates, or */
- /* @FT_Set_Var_Blend_Coordinates. This flag is unset by a call to */
- /* @FT_Set_Named_Instance. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_FACE_FLAG_XXX
+ *
+ * @description:
+ * A list of bit flags used in the `face_flags` field of the @FT_FaceRec
+ * structure. They inform client applications of properties of the
+ * corresponding face.
+ *
+ * @values:
+ * FT_FACE_FLAG_SCALABLE ::
+ * The face contains outline glyphs. Note that a face can contain
+ * bitmap strikes also, i.e., a face can have both this flag and
+ * @FT_FACE_FLAG_FIXED_SIZES set.
+ *
+ * FT_FACE_FLAG_FIXED_SIZES ::
+ * The face contains bitmap strikes. See also the `num_fixed_sizes`
+ * and `available_sizes` fields of @FT_FaceRec.
+ *
+ * FT_FACE_FLAG_FIXED_WIDTH ::
+ * The face contains fixed-width characters (like Courier, Lucida,
+ * MonoType, etc.).
+ *
+ * FT_FACE_FLAG_SFNT ::
+ * The face uses the SFNT storage scheme. For now, this means TrueType
+ * and OpenType.
+ *
+ * FT_FACE_FLAG_HORIZONTAL ::
+ * The face contains horizontal glyph metrics. This should be set for
+ * all common formats.
+ *
+ * FT_FACE_FLAG_VERTICAL ::
+ * The face contains vertical glyph metrics. This is only available in
+ * some formats, not all of them.
+ *
+ * FT_FACE_FLAG_KERNING ::
+ * The face contains kerning information. If set, the kerning distance
+ * can be retrieved using the function @FT_Get_Kerning. Otherwise the
+ * function always return the vector (0,0). Note that FreeType doesn't
+ * handle kerning data from the SFNT 'GPOS' table (as present in many
+ * OpenType fonts).
+ *
+ * FT_FACE_FLAG_FAST_GLYPHS ::
+ * THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.
+ *
+ * FT_FACE_FLAG_MULTIPLE_MASTERS ::
+ * The face contains multiple masters and is capable of interpolating
+ * between them. Supported formats are Adobe MM, TrueType GX, and
+ * OpenType variation fonts.
+ *
+ * See section @multiple_masters for API details.
+ *
+ * FT_FACE_FLAG_GLYPH_NAMES ::
+ * The face contains glyph names, which can be retrieved using
+ * @FT_Get_Glyph_Name. Note that some TrueType fonts contain broken
+ * glyph name tables. Use the function @FT_Has_PS_Glyph_Names when
+ * needed.
+ *
+ * FT_FACE_FLAG_EXTERNAL_STREAM ::
+ * Used internally by FreeType to indicate that a face's stream was
+ * provided by the client application and should not be destroyed when
+ * @FT_Done_Face is called. Don't read or test this flag.
+ *
+ * FT_FACE_FLAG_HINTER ::
+ * The font driver has a hinting machine of its own. For example, with
+ * TrueType fonts, it makes sense to use data from the SFNT 'gasp'
+ * table only if the native TrueType hinting engine (with the bytecode
+ * interpreter) is available and active.
+ *
+ * FT_FACE_FLAG_CID_KEYED ::
+ * The face is CID-keyed. In that case, the face is not accessed by
+ * glyph indices but by CID values. For subsetted CID-keyed fonts this
+ * has the consequence that not all index values are a valid argument
+ * to @FT_Load_Glyph. Only the CID values for which corresponding
+ * glyphs in the subsetted font exist make `FT_Load_Glyph` return
+ * successfully; in all other cases you get an
+ * `FT_Err_Invalid_Argument` error.
+ *
+ * Note that CID-keyed fonts that are in an SFNT wrapper (this is, all
+ * OpenType/CFF fonts) don't have this flag set since the glyphs are
+ * accessed in the normal way (using contiguous indices); the
+ * 'CID-ness' isn't visible to the application.
+ *
+ * FT_FACE_FLAG_TRICKY ::
+ * The face is 'tricky', this is, it always needs the font format's
+ * native hinting engine to get a reasonable result. A typical example
+ * is the old Chinese font `mingli.ttf` (but not `mingliu.ttc`) that
+ * uses TrueType bytecode instructions to move and scale all of its
+ * subglyphs.
+ *
+ * It is not possible to auto-hint such fonts using
+ * @FT_LOAD_FORCE_AUTOHINT; it will also ignore @FT_LOAD_NO_HINTING.
+ * You have to set both @FT_LOAD_NO_HINTING and @FT_LOAD_NO_AUTOHINT to
+ * really disable hinting; however, you probably never want this except
+ * for demonstration purposes.
+ *
+ * Currently, there are about a dozen TrueType fonts in the list of
+ * tricky fonts; they are hard-coded in file `ttobjs.c`.
+ *
+ * FT_FACE_FLAG_COLOR ::
+ * [Since 2.5.1] The face has color glyph tables. See @FT_LOAD_COLOR
+ * for more information.
+ *
+ * FT_FACE_FLAG_VARIATION ::
+ * [Since 2.9] Set if the current face (or named instance) has been
+ * altered with @FT_Set_MM_Design_Coordinates,
+ * @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates.
+ * This flag is unset by a call to @FT_Set_Named_Instance.
+ */
#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 )
@@ -1254,14 +1225,14 @@ FT_BEGIN_HEADER
#define FT_FACE_FLAG_VARIATION ( 1L << 15 )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_HORIZONTAL( face )
+ * FT_HAS_HORIZONTAL
*
* @description:
- * A macro that returns true whenever a face object contains
- * horizontal metrics (this is true for all font formats though).
+ * 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.
@@ -1271,10 +1242,10 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_VERTICAL( face )
+ * FT_HAS_VERTICAL
*
* @description:
* A macro that returns true whenever a face object contains real
@@ -1285,45 +1256,45 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_KERNING( face )
+ * FT_HAS_KERNING
*
* @description:
- * A macro that returns true whenever a face object contains kerning
- * data that can be accessed with @FT_Get_Kerning.
+ * 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 )
+ * FT_IS_SCALABLE
*
* @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).
+ * 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 )
+ * FT_IS_SFNT
*
* @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.
+ * 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.
@@ -1333,14 +1304,14 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_SFNT )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_IS_FIXED_WIDTH( face )
+ * FT_IS_FIXED_WIDTH
*
* @description:
* A macro that returns true whenever a face object contains a font face
- * that contains fixed-width (or `monospace', `fixed-pitch', etc.)
+ * that contains fixed-width (or 'monospace', 'fixed-pitch', etc.)
* glyphs.
*
*/
@@ -1348,25 +1319,25 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_FIXED_SIZES( face )
+ * FT_HAS_FIXED_SIZES
*
* @description:
* A macro that returns true whenever a face object contains some
- * embedded bitmaps. See the `available_sizes' field of the
- * @FT_FaceRec structure.
+ * 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 )
+ * FT_HAS_FAST_GLYPHS
*
* @description:
* Deprecated.
@@ -1375,10 +1346,10 @@ FT_BEGIN_HEADER
#define FT_HAS_FAST_GLYPHS( face ) 0
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_GLYPH_NAMES( face )
+ * FT_HAS_GLYPH_NAMES
*
* @description:
* A macro that returns true whenever a face object contains some glyph
@@ -1389,10 +1360,10 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_MULTIPLE_MASTERS( face )
+ * FT_HAS_MULTIPLE_MASTERS
*
* @description:
* A macro that returns true whenever a face object contains some
@@ -1404,10 +1375,10 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_IS_NAMED_INSTANCE( face )
+ * FT_IS_NAMED_INSTANCE
*
* @description:
* A macro that returns true whenever a face object is a named instance
@@ -1426,14 +1397,14 @@ FT_BEGIN_HEADER
( (face)->face_index & 0x7FFF0000L )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_IS_VARIATION( face )
+ * FT_IS_VARIATION
*
* @description:
- * A macro that returns true whenever a face object has been altered
- * by @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
+ * A macro that returns true whenever a face object has been altered by
+ * @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
* @FT_Set_Var_Blend_Coordinates.
*
* @since:
@@ -1444,15 +1415,14 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_VARIATION )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_IS_CID_KEYED( face )
+ * FT_IS_CID_KEYED
*
* @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.
+ * 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.
@@ -1462,13 +1432,13 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_IS_TRICKY( face )
+ * FT_IS_TRICKY
*
* @description:
- * A macro that returns true whenever a face represents a `tricky' font.
+ * A macro that returns true whenever a face represents a 'tricky' font.
* See the discussion of @FT_FACE_FLAG_TRICKY for more details.
*
*/
@@ -1476,14 +1446,14 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_TRICKY )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
- * FT_HAS_COLOR( face )
+ * FT_HAS_COLOR
*
* @description:
- * A macro that returns true whenever a face object contains
- * tables for color glyphs.
+ * A macro that returns true whenever a face object contains tables for
+ * color glyphs.
*
* @since:
* 2.5.1
@@ -1493,149 +1463,148 @@ FT_BEGIN_HEADER
( (face)->face_flags & FT_FACE_FLAG_COLOR )
- /*************************************************************************/
- /* */
- /* <Const> */
- /* FT_STYLE_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags to indicate the style of a given face. These */
- /* are used in the `style_flags' field of @FT_FaceRec. */
- /* */
- /* <Values> */
- /* FT_STYLE_FLAG_ITALIC :: */
- /* The face style is italic or oblique. */
- /* */
- /* FT_STYLE_FLAG_BOLD :: */
- /* The face is bold. */
- /* */
- /* <Note> */
- /* The style information as provided by FreeType is very basic. More */
- /* details are beyond the scope and should be done on a higher level */
- /* (for example, by analyzing various fields of the `OS/2' table in */
- /* SFNT based fonts). */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_STYLE_FLAG_XXX
+ *
+ * @description:
+ * A list of bit flags to indicate the style of a given face. These are
+ * used in the `style_flags` field of @FT_FaceRec.
+ *
+ * @values:
+ * FT_STYLE_FLAG_ITALIC ::
+ * The face style is italic or oblique.
+ *
+ * FT_STYLE_FLAG_BOLD ::
+ * The face is bold.
+ *
+ * @note:
+ * The style information as provided by FreeType is very basic. More
+ * details are beyond the scope and should be done on a higher level (for
+ * example, by analyzing various fields of the 'OS/2' table in SFNT based
+ * fonts).
+ */
#define FT_STYLE_FLAG_ITALIC ( 1 << 0 )
#define FT_STYLE_FLAG_BOLD ( 1 << 1 )
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Size_Internal */
- /* */
- /* <Description> */
- /* An opaque handle to an `FT_Size_InternalRec' structure, used to */
- /* model private data of a given @FT_Size object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Size_Internal
+ *
+ * @description:
+ * An opaque handle to an `FT_Size_InternalRec` structure, used to model
+ * private data of a given @FT_Size object.
+ */
typedef struct FT_Size_InternalRec_* FT_Size_Internal;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_Metrics */
- /* */
- /* <Description> */
- /* The size metrics structure gives the metrics of a size object. */
- /* */
- /* <Fields> */
- /* x_ppem :: The width of the scaled EM square in pixels, hence */
- /* the term `ppem' (pixels per EM). It is also */
- /* referred to as `nominal width'. */
- /* */
- /* y_ppem :: The height of the scaled EM square in pixels, */
- /* hence the term `ppem' (pixels per EM). It is also */
- /* referred to as `nominal height'. */
- /* */
- /* x_scale :: A 16.16 fractional scaling value to convert */
- /* horizontal metrics from font units to 26.6 */
- /* fractional pixels. Only relevant for scalable */
- /* font formats. */
- /* */
- /* y_scale :: A 16.16 fractional scaling value to convert */
- /* vertical metrics from font units to 26.6 */
- /* fractional pixels. Only relevant for scalable */
- /* font formats. */
- /* */
- /* ascender :: The ascender in 26.6 fractional pixels, rounded up */
- /* to an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* descender :: The descender in 26.6 fractional pixels, rounded */
- /* down to an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* height :: The height in 26.6 fractional pixels, rounded to */
- /* an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* max_advance :: The maximum advance width in 26.6 fractional */
- /* pixels, rounded to an integer value. See */
- /* @FT_FaceRec for the details. */
- /* */
- /* <Note> */
- /* The scaling values, if relevant, are determined first during a */
- /* size changing operation. The remaining fields are then set by the */
- /* driver. For scalable formats, they are usually set to scaled */
- /* values of the corresponding fields in @FT_FaceRec. Some values */
- /* like ascender or descender are rounded for historical reasons; */
- /* more precise values (for outline fonts) can be derived by scaling */
- /* the corresponding @FT_FaceRec values manually, with code similar */
- /* to the following. */
- /* */
- /* { */
- /* scaled_ascender = FT_MulFix( face->ascender, */
- /* size_metrics->y_scale ); */
- /* } */
- /* */
- /* Note that due to glyph hinting and the selected rendering mode */
- /* these values are usually not exact; consequently, they must be */
- /* treated as unreliable with an error margin of at least one pixel! */
- /* */
- /* Indeed, the only way to get the exact metrics is to render _all_ */
- /* glyphs. As this would be a definite performance hit, it is up to */
- /* client applications to perform such computations. */
- /* */
- /* The `FT_Size_Metrics' structure is valid for bitmap fonts also. */
- /* */
- /* */
- /* *TrueType* *fonts* *with* *native* *bytecode* *hinting* */
- /* */
- /* All applications that handle TrueType fonts with native hinting */
- /* must be aware that TTFs expect different rounding of vertical font */
- /* dimensions. The application has to cater for this, especially if */
- /* it wants to rely on a TTF's vertical data (for example, to */
- /* properly align box characters vertically). */
- /* */
- /* Only the application knows _in_ _advance_ that it is going to use */
- /* native hinting for TTFs! FreeType, on the other hand, selects the */
- /* hinting mode not at the time of creating an @FT_Size object but */
- /* much later, namely while calling @FT_Load_Glyph. */
- /* */
- /* Here is some pseudo code that illustrates a possible solution. */
- /* */
- /* { */
- /* font_format = FT_Get_Font_Format( face ); */
- /* */
- /* if ( !strcmp( font_format, "TrueType" ) && */
- /* do_native_bytecode_hinting ) */
- /* { */
- /* ascender = ROUND( FT_MulFix( face->ascender, */
- /* size_metrics->y_scale ) ); */
- /* descender = ROUND( FT_MulFix( face->descender, */
- /* size_metrics->y_scale ) ); */
- /* } */
- /* else */
- /* { */
- /* ascender = size_metrics->ascender; */
- /* descender = size_metrics->descender; */
- /* } */
- /* */
- /* height = size_metrics->height; */
- /* max_advance = size_metrics->max_advance; */
- /* } */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Size_Metrics
+ *
+ * @description:
+ * The size metrics structure gives the metrics of a size object.
+ *
+ * @fields:
+ * x_ppem ::
+ * The width of the scaled EM square in pixels, hence the term 'ppem'
+ * (pixels per EM). It is also referred to as 'nominal width'.
+ *
+ * y_ppem ::
+ * The height of the scaled EM square in pixels, hence the term 'ppem'
+ * (pixels per EM). It is also referred to as 'nominal height'.
+ *
+ * x_scale ::
+ * A 16.16 fractional scaling value to convert horizontal metrics from
+ * font units to 26.6 fractional pixels. Only relevant for scalable
+ * font formats.
+ *
+ * y_scale ::
+ * A 16.16 fractional scaling value to convert vertical metrics from
+ * font units to 26.6 fractional pixels. Only relevant for scalable
+ * font formats.
+ *
+ * ascender ::
+ * The ascender in 26.6 fractional pixels, rounded up to an integer
+ * value. See @FT_FaceRec for the details.
+ *
+ * descender ::
+ * The descender in 26.6 fractional pixels, rounded down to an integer
+ * value. See @FT_FaceRec for the details.
+ *
+ * height ::
+ * The height in 26.6 fractional pixels, rounded to an integer value.
+ * See @FT_FaceRec for the details.
+ *
+ * max_advance ::
+ * The maximum advance width in 26.6 fractional pixels, rounded to an
+ * integer value. See @FT_FaceRec for the details.
+ *
+ * @note:
+ * The scaling values, if relevant, are determined first during a size
+ * changing operation. The remaining fields are then set by the driver.
+ * For scalable formats, they are usually set to scaled values of the
+ * corresponding fields in @FT_FaceRec. Some values like ascender or
+ * descender are rounded for historical reasons; more precise values (for
+ * outline fonts) can be derived by scaling the corresponding @FT_FaceRec
+ * values manually, with code similar to the following.
+ *
+ * ```
+ * scaled_ascender = FT_MulFix( face->ascender,
+ * size_metrics->y_scale );
+ * ```
+ *
+ * Note that due to glyph hinting and the selected rendering mode these
+ * values are usually not exact; consequently, they must be treated as
+ * unreliable with an error margin of at least one pixel!
+ *
+ * Indeed, the only way to get the exact metrics is to render _all_
+ * glyphs. As this would be a definite performance hit, it is up to
+ * client applications to perform such computations.
+ *
+ * The `FT_Size_Metrics` structure is valid for bitmap fonts also.
+ *
+ *
+ * **TrueType fonts with native bytecode hinting**
+ *
+ * All applications that handle TrueType fonts with native hinting must
+ * be aware that TTFs expect different rounding of vertical font
+ * dimensions. The application has to cater for this, especially if it
+ * wants to rely on a TTF's vertical data (for example, to properly align
+ * box characters vertically).
+ *
+ * Only the application knows _in advance_ that it is going to use native
+ * hinting for TTFs! FreeType, on the other hand, selects the hinting
+ * mode not at the time of creating an @FT_Size object but much later,
+ * namely while calling @FT_Load_Glyph.
+ *
+ * Here is some pseudo code that illustrates a possible solution.
+ *
+ * ```
+ * font_format = FT_Get_Font_Format( face );
+ *
+ * if ( !strcmp( font_format, "TrueType" ) &&
+ * do_native_bytecode_hinting )
+ * {
+ * ascender = ROUND( FT_MulFix( face->ascender,
+ * size_metrics->y_scale ) );
+ * descender = ROUND( FT_MulFix( face->descender,
+ * size_metrics->y_scale ) );
+ * }
+ * else
+ * {
+ * ascender = size_metrics->ascender;
+ * descender = size_metrics->descender;
+ * }
+ *
+ * height = size_metrics->height;
+ * max_advance = size_metrics->max_advance;
+ * ```
+ */
typedef struct FT_Size_Metrics_
{
FT_UShort x_ppem; /* horizontal pixels per EM */
@@ -1652,25 +1621,27 @@ FT_BEGIN_HEADER
} FT_Size_Metrics;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SizeRec */
- /* */
- /* <Description> */
- /* FreeType root size class structure. A size object models a face */
- /* object at a given size. */
- /* */
- /* <Fields> */
- /* face :: Handle to the parent face object. */
- /* */
- /* generic :: A typeless pointer, unused by the FreeType library or */
- /* any of its drivers. It can be used by client */
- /* applications to link their own data to each size */
- /* object. */
- /* */
- /* metrics :: Metrics for this size object. This field is read-only. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_SizeRec
+ *
+ * @description:
+ * FreeType root size class structure. A size object models a face
+ * object at a given size.
+ *
+ * @fields:
+ * face ::
+ * Handle to the parent face object.
+ *
+ * generic ::
+ * A typeless pointer, unused by the FreeType library or any of its
+ * drivers. It can be used by client applications to link their own
+ * data to each size object.
+ *
+ * metrics ::
+ * Metrics for this size object. This field is read-only.
+ */
typedef struct FT_SizeRec_
{
FT_Face face; /* parent face object */
@@ -1681,237 +1652,241 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Slot_Internal
+ *
+ * @description:
+ * An opaque handle to an `FT_Slot_InternalRec` structure, used to model
+ * private data of a given @FT_GlyphSlot object.
+ */
typedef struct FT_Slot_InternalRec_* FT_Slot_Internal;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_GlyphSlotRec */
- /* */
- /* <Description> */
- /* FreeType root glyph slot class structure. A glyph slot is a */
- /* container where individual glyphs can be loaded, be they in */
- /* outline or bitmap format. */
- /* */
- /* <Fields> */
- /* library :: A handle to the FreeType library instance */
- /* this slot belongs to. */
- /* */
- /* face :: A handle to the parent face object. */
- /* */
- /* next :: In some cases (like some font tools), several */
- /* glyph slots per face object can be a good */
- /* thing. As this is rare, the glyph slots are */
- /* listed through a direct, single-linked list */
- /* using its `next' field. */
- /* */
- /* generic :: A typeless pointer unused by the FreeType */
- /* library or any of its drivers. It can be */
- /* used by client applications to link their own */
- /* data to each glyph slot object. */
- /* */
- /* metrics :: The metrics of the last loaded glyph in the */
- /* slot. The returned values depend on the last */
- /* load flags (see the @FT_Load_Glyph API */
- /* function) and can be expressed either in 26.6 */
- /* fractional pixels or font units. */
- /* */
- /* Note that even when the glyph image is */
- /* transformed, the metrics are not. */
- /* */
- /* linearHoriAdvance :: The advance width of the unhinted glyph. */
- /* Its value is expressed in 16.16 fractional */
- /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
- /* when loading the glyph. This field can be */
- /* important to perform correct WYSIWYG layout. */
- /* Only relevant for outline glyphs. */
- /* */
- /* linearVertAdvance :: The advance height of the unhinted glyph. */
- /* Its value is expressed in 16.16 fractional */
- /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
- /* when loading the glyph. This field can be */
- /* important to perform correct WYSIWYG layout. */
- /* Only relevant for outline glyphs. */
- /* */
- /* advance :: This shorthand is, depending on */
- /* @FT_LOAD_IGNORE_TRANSFORM, the transformed */
- /* (hinted) advance width for the glyph, in 26.6 */
- /* fractional pixel format. As specified with */
- /* @FT_LOAD_VERTICAL_LAYOUT, it uses either the */
- /* `horiAdvance' or the `vertAdvance' value of */
- /* `metrics' field. */
- /* */
- /* format :: This field indicates the format of the image */
- /* contained in the glyph slot. Typically */
- /* @FT_GLYPH_FORMAT_BITMAP, */
- /* @FT_GLYPH_FORMAT_OUTLINE, or */
- /* @FT_GLYPH_FORMAT_COMPOSITE, but other values */
- /* are possible. */
- /* */
- /* bitmap :: This field is used as a bitmap descriptor. */
- /* Note that the address and content of the */
- /* bitmap buffer can change between calls of */
- /* @FT_Load_Glyph and a few other functions. */
- /* */
- /* bitmap_left :: The bitmap's left bearing expressed in */
- /* integer pixels. */
- /* */
- /* bitmap_top :: The bitmap's top bearing expressed in integer */
- /* pixels. This is the distance from the */
- /* baseline to the top-most glyph scanline, */
- /* upwards y~coordinates being *positive*. */
- /* */
- /* outline :: The outline descriptor for the current glyph */
- /* image if its format is */
- /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */
- /* loaded, `outline' can be transformed, */
- /* distorted, emboldened, etc. However, it must */
- /* not be freed. */
- /* */
- /* num_subglyphs :: The number of subglyphs in a composite glyph. */
- /* This field is only valid for the composite */
- /* glyph format that should normally only be */
- /* loaded with the @FT_LOAD_NO_RECURSE flag. */
- /* */
- /* subglyphs :: An array of subglyph descriptors for */
- /* composite glyphs. There are `num_subglyphs' */
- /* elements in there. Currently internal to */
- /* FreeType. */
- /* */
- /* control_data :: Certain font drivers can also return the */
- /* control data for a given glyph image (e.g. */
- /* TrueType bytecode, Type~1 charstrings, etc.). */
- /* This field is a pointer to such data; it is */
- /* currently internal to FreeType. */
- /* */
- /* control_len :: This is the length in bytes of the control */
- /* data. Currently internal to FreeType. */
- /* */
- /* other :: Reserved. */
- /* */
- /* lsb_delta :: The difference between hinted and unhinted */
- /* left side bearing while auto-hinting is */
- /* active. Zero otherwise. */
- /* */
- /* rsb_delta :: The difference between hinted and unhinted */
- /* right side bearing while auto-hinting is */
- /* active. Zero otherwise. */
- /* */
- /* <Note> */
- /* If @FT_Load_Glyph is called with default flags (see */
- /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */
- /* its native format (e.g., an outline glyph for TrueType and Type~1 */
- /* formats). [Since 2.9] The prospective bitmap metrics are */
- /* calculated according to @FT_LOAD_TARGET_XXX and other flags even */
- /* for the outline glyph, even if @FT_LOAD_RENDER is not set. */
- /* */
- /* This image can later be converted into a bitmap by calling */
- /* @FT_Render_Glyph. This function searches the current renderer for */
- /* the native image's format, then invokes it. */
- /* */
- /* The renderer is in charge of transforming the native image through */
- /* the slot's face transformation fields, then converting it into a */
- /* bitmap that is returned in `slot->bitmap'. */
- /* */
- /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */
- /* to specify the position of the bitmap relative to the current pen */
- /* position (e.g., coordinates (0,0) on the baseline). Of course, */
- /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
- /* */
- /* Here is a small pseudo code fragment that shows how to use */
- /* `lsb_delta' and `rsb_delta' to do fractional positioning of */
- /* glyphs: */
- /* */
- /* { */
- /* FT_GlyphSlot slot = face->glyph; */
- /* FT_Pos origin_x = 0; */
- /* */
- /* */
- /* for all glyphs do */
- /* <load glyph with `FT_Load_Glyph'> */
- /* */
- /* FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); */
- /* */
- /* <save glyph image, or render glyph, or ...> */
- /* */
- /* <compute kern between current and next glyph */
- /* and add it to `origin_x'> */
- /* */
- /* origin_x += slot->advance.x; */
- /* origin_x += slot->rsb_delta - slot->lsb_delta; */
- /* endfor */
- /* } */
- /* */
- /* Here is another small pseudo code fragment that shows how to use */
- /* `lsb_delta' and `rsb_delta' to improve integer positioning of */
- /* glyphs: */
- /* */
- /* { */
- /* FT_GlyphSlot slot = face->glyph; */
- /* FT_Pos origin_x = 0; */
- /* FT_Pos prev_rsb_delta = 0; */
- /* */
- /* */
- /* for all glyphs do */
- /* <compute kern between current and previous glyph */
- /* and add it to `origin_x'> */
- /* */
- /* <load glyph with `FT_Load_Glyph'> */
- /* */
- /* if ( prev_rsb_delta - slot->lsb_delta > 32 ) */
- /* origin_x -= 64; */
- /* else if ( prev_rsb_delta - slot->lsb_delta < -31 ) */
- /* origin_x += 64; */
- /* */
- /* prev_rsb_delta = slot->rsb_delta; */
- /* */
- /* <save glyph image, or render glyph, or ...> */
- /* */
- /* origin_x += slot->advance.x; */
- /* endfor */
- /* } */
- /* */
- /* If you use strong auto-hinting, you *must* apply these delta */
- /* values! Otherwise you will experience far too large inter-glyph */
- /* spacing at small rendering sizes in most cases. Note that it */
- /* doesn't harm to use the above code for other hinting modes also, */
- /* since the delta values are zero then. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * glyph_index ::
+ * [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph
+ * while initializing the glyph slot.
+ *
+ * generic ::
+ * A typeless pointer unused by the FreeType library or any of its
+ * drivers. It can be used by client applications to link their own
+ * data to each glyph slot object.
+ *
+ * metrics ::
+ * The metrics of the last loaded glyph in the slot. The returned
+ * values depend on the last load flags (see the @FT_Load_Glyph API
+ * function) and can be expressed either in 26.6 fractional pixels or
+ * font units.
+ *
+ * Note that even when the glyph image is transformed, the metrics are
+ * not.
+ *
+ * linearHoriAdvance ::
+ * The advance width of the unhinted glyph. Its value is expressed in
+ * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
+ * loading the glyph. This field can be important to perform correct
+ * WYSIWYG layout. Only relevant for outline glyphs.
+ *
+ * linearVertAdvance ::
+ * The advance height of the unhinted glyph. Its value is expressed in
+ * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
+ * loading the glyph. This field can be important to perform correct
+ * WYSIWYG layout. Only relevant for outline glyphs.
+ *
+ * advance ::
+ * This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the
+ * transformed (hinted) advance width for the glyph, in 26.6 fractional
+ * pixel format. As specified with @FT_LOAD_VERTICAL_LAYOUT, it uses
+ * either the `horiAdvance` or the `vertAdvance` value of `metrics`
+ * field.
+ *
+ * format ::
+ * This field indicates the format of the image contained in the glyph
+ * slot. Typically @FT_GLYPH_FORMAT_BITMAP, @FT_GLYPH_FORMAT_OUTLINE,
+ * or @FT_GLYPH_FORMAT_COMPOSITE, but other values are possible.
+ *
+ * bitmap ::
+ * This field is used as a bitmap descriptor. Note that the address
+ * and content of the bitmap buffer can change between calls of
+ * @FT_Load_Glyph and a few other functions.
+ *
+ * bitmap_left ::
+ * The bitmap's left bearing expressed in integer pixels.
+ *
+ * bitmap_top ::
+ * The bitmap's top bearing expressed in integer pixels. This is the
+ * distance from the baseline to the top-most glyph scanline, upwards
+ * y~coordinates being **positive**.
+ *
+ * outline ::
+ * The outline descriptor for the current glyph image if its format is
+ * @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, `outline` can be
+ * transformed, distorted, emboldened, etc. However, it must not be
+ * freed.
+ *
+ * [Since 2.10.1] If @FT_LOAD_NO_SCALE is set, outline coordinates of
+ * OpenType variation fonts for a selected instance are internally
+ * handled as 26.6 fractional font units but returned as (rounded)
+ * integers, as expected. To get unrounded font units, don't use
+ * @FT_LOAD_NO_SCALE but load the glyph with @FT_LOAD_NO_HINTING and
+ * scale it, using the font's `units_per_EM` value as the ppem.
+ *
+ * num_subglyphs ::
+ * The number of subglyphs in a composite glyph. This field is only
+ * valid for the composite glyph format that should normally only be
+ * loaded with the @FT_LOAD_NO_RECURSE flag.
+ *
+ * subglyphs ::
+ * An array of subglyph descriptors for composite glyphs. There are
+ * `num_subglyphs` elements in there. Currently internal to FreeType.
+ *
+ * control_data ::
+ * Certain font drivers can also return the control data for a given
+ * glyph image (e.g. TrueType bytecode, Type~1 charstrings, etc.).
+ * This field is a pointer to such data; it is currently internal to
+ * FreeType.
+ *
+ * control_len ::
+ * This is the length in bytes of the control data. Currently internal
+ * to FreeType.
+ *
+ * other ::
+ * Reserved.
+ *
+ * lsb_delta ::
+ * The difference between hinted and unhinted left side bearing while
+ * auto-hinting is active. Zero otherwise.
+ *
+ * rsb_delta ::
+ * The difference between hinted and unhinted right side bearing while
+ * auto-hinting is active. Zero otherwise.
+ *
+ * @note:
+ * If @FT_Load_Glyph is called with default flags (see @FT_LOAD_DEFAULT)
+ * the glyph image is loaded in the glyph slot in its native format
+ * (e.g., an outline glyph for TrueType and Type~1 formats). [Since 2.9]
+ * The prospective bitmap metrics are calculated according to
+ * @FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even
+ * if @FT_LOAD_RENDER is not set.
+ *
+ * This image can later be converted into a bitmap by calling
+ * @FT_Render_Glyph. This function searches the current renderer for the
+ * native image's format, then invokes it.
+ *
+ * The renderer is in charge of transforming the native image through the
+ * slot's face transformation fields, then converting it into a bitmap
+ * that is returned in `slot->bitmap`.
+ *
+ * Note that `slot->bitmap_left` and `slot->bitmap_top` are also used to
+ * specify the position of the bitmap relative to the current pen
+ * position (e.g., coordinates (0,0) on the baseline). Of course,
+ * `slot->format` is also changed to @FT_GLYPH_FORMAT_BITMAP.
+ *
+ * Here is a small pseudo code fragment that shows how to use `lsb_delta`
+ * and `rsb_delta` to do fractional positioning of glyphs:
+ *
+ * ```
+ * FT_GlyphSlot slot = face->glyph;
+ * FT_Pos origin_x = 0;
+ *
+ *
+ * for all glyphs do
+ * <load glyph with `FT_Load_Glyph'>
+ *
+ * FT_Outline_Translate( slot->outline, origin_x & 63, 0 );
+ *
+ * <save glyph image, or render glyph, or ...>
+ *
+ * <compute kern between current and next glyph
+ * and add it to `origin_x'>
+ *
+ * origin_x += slot->advance.x;
+ * origin_x += slot->lsb_delta - slot->rsb_delta;
+ * endfor
+ * ```
+ *
+ * Here is another small pseudo code fragment that shows how to use
+ * `lsb_delta` and `rsb_delta` to improve integer positioning of glyphs:
+ *
+ * ```
+ * FT_GlyphSlot slot = face->glyph;
+ * FT_Pos origin_x = 0;
+ * FT_Pos prev_rsb_delta = 0;
+ *
+ *
+ * for all glyphs do
+ * <compute kern between current and previous glyph
+ * and add it to `origin_x'>
+ *
+ * <load glyph with `FT_Load_Glyph'>
+ *
+ * if ( prev_rsb_delta - slot->lsb_delta > 32 )
+ * origin_x -= 64;
+ * else if ( prev_rsb_delta - slot->lsb_delta < -31 )
+ * origin_x += 64;
+ *
+ * prev_rsb_delta = slot->rsb_delta;
+ *
+ * <save glyph image, or render glyph, or ...>
+ *
+ * origin_x += slot->advance.x;
+ * endfor
+ * ```
+ *
+ * If you use strong auto-hinting, you **must** apply these delta values!
+ * Otherwise you will experience far too large inter-glyph spacing at
+ * small rendering sizes in most cases. Note that it doesn't harm to use
+ * the above code for other hinting modes also, since the delta values
+ * are zero then.
+ */
typedef struct FT_GlyphSlotRec_
{
FT_Library library;
FT_Face face;
FT_GlyphSlot next;
- FT_UInt reserved; /* retained for binary compatibility */
+ FT_UInt glyph_index; /* new in 2.10; was reserved previously */
FT_Generic generic;
FT_Glyph_Metrics metrics;
@@ -1952,86 +1927,92 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Init_FreeType */
- /* */
- /* <Description> */
- /* Initialize a new FreeType library object. The set of modules */
- /* that are registered by this function is determined at build time. */
- /* */
- /* <Output> */
- /* alibrary :: A handle to a new library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* In case you want to provide your own memory allocating routines, */
- /* use @FT_New_Library instead, followed by a call to */
- /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module) */
- /* and @FT_Set_Default_Properties. */
- /* */
- /* See the documentation of @FT_Library and @FT_Face for */
- /* multi-threading issues. */
- /* */
- /* If you need reference-counting (cf. @FT_Reference_Library), use */
- /* @FT_New_Library and @FT_Done_Library. */
- /* */
- /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
- /* set, this function reads the `FREETYPE_PROPERTIES' environment */
- /* variable to control driver properties. See section @properties */
- /* for more. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Init_FreeType
+ *
+ * @description:
+ * Initialize a new FreeType library object. The set of modules that are
+ * registered by this function is determined at build time.
+ *
+ * @output:
+ * alibrary ::
+ * A handle to a new library object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * In case you want to provide your own memory allocating routines, use
+ * @FT_New_Library instead, followed by a call to @FT_Add_Default_Modules
+ * (or a series of calls to @FT_Add_Module) and
+ * @FT_Set_Default_Properties.
+ *
+ * See the documentation of @FT_Library and @FT_Face for multi-threading
+ * issues.
+ *
+ * If you need reference-counting (cf. @FT_Reference_Library), use
+ * @FT_New_Library and @FT_Done_Library.
+ *
+ * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is
+ * set, this function reads the `FREETYPE_PROPERTIES` environment
+ * variable to control driver properties. See section @properties for
+ * more.
+ */
FT_EXPORT( FT_Error )
FT_Init_FreeType( FT_Library *alibrary );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_FreeType */
- /* */
- /* <Description> */
- /* Destroy a given FreeType library object and all of its children, */
- /* including resources, drivers, faces, sizes, etc. */
- /* */
- /* <Input> */
- /* library :: A handle to the target library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Done_FreeType
+ *
+ * @description:
+ * Destroy a given FreeType library object and all of its children,
+ * including resources, drivers, faces, sizes, etc.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Done_FreeType( FT_Library library );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_OPEN_XXX */
- /* */
- /* <Description> */
- /* A list of bit field constants used within the `flags' field of the */
- /* @FT_Open_Args structure. */
- /* */
- /* <Values> */
- /* FT_OPEN_MEMORY :: This is a memory-based stream. */
- /* */
- /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */
- /* */
- /* FT_OPEN_PATHNAME :: Create a new input stream from a C~path */
- /* name. */
- /* */
- /* FT_OPEN_DRIVER :: Use the `driver' field. */
- /* */
- /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */
- /* */
- /* <Note> */
- /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */
- /* flags are mutually exclusive. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_OPEN_XXX
+ *
+ * @description:
+ * A list of bit field constants used within the `flags` field of the
+ * @FT_Open_Args structure.
+ *
+ * @values:
+ * FT_OPEN_MEMORY ::
+ * This is a memory-based stream.
+ *
+ * FT_OPEN_STREAM ::
+ * Copy the stream from the `stream` field.
+ *
+ * FT_OPEN_PATHNAME ::
+ * Create a new input stream from a C~path name.
+ *
+ * FT_OPEN_DRIVER ::
+ * Use the `driver` field.
+ *
+ * FT_OPEN_PARAMS ::
+ * Use the `num_params` and `params` fields.
+ *
+ * @note:
+ * The `FT_OPEN_MEMORY`, `FT_OPEN_STREAM`, and `FT_OPEN_PATHNAME` flags
+ * are mutually exclusive.
+ */
#define FT_OPEN_MEMORY 0x1
#define FT_OPEN_STREAM 0x2
#define FT_OPEN_PATHNAME 0x4
@@ -2039,7 +2020,7 @@ FT_BEGIN_HEADER
#define FT_OPEN_PARAMS 0x10
- /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */
+ /* these constants are deprecated; use the corresponding `FT_OPEN_XXX` */
/* values instead */
#define ft_open_memory FT_OPEN_MEMORY
#define ft_open_stream FT_OPEN_STREAM
@@ -2048,24 +2029,26 @@ FT_BEGIN_HEADER
#define ft_open_params FT_OPEN_PARAMS
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Parameter */
- /* */
- /* <Description> */
- /* A simple structure to pass more or less generic parameters to */
- /* @FT_Open_Face and @FT_Face_Properties. */
- /* */
- /* <Fields> */
- /* tag :: A four-byte identification tag. */
- /* */
- /* data :: A pointer to the parameter data. */
- /* */
- /* <Note> */
- /* The ID and function of parameters are driver-specific. See */
- /* section @parameter_tags for more information. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Parameter
+ *
+ * @description:
+ * A simple structure to pass more or less generic parameters to
+ * @FT_Open_Face and @FT_Face_Properties.
+ *
+ * @fields:
+ * tag ::
+ * A four-byte identification tag.
+ *
+ * data ::
+ * A pointer to the parameter data.
+ *
+ * @note:
+ * The ID and function of parameters are driver-specific. See section
+ * @parameter_tags for more information.
+ */
typedef struct FT_Parameter_
{
FT_ULong tag;
@@ -2074,65 +2057,69 @@ FT_BEGIN_HEADER
} FT_Parameter;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Open_Args */
- /* */
- /* <Description> */
- /* A structure to indicate how to open a new font file or stream. A */
- /* pointer to such a structure can be used as a parameter for the */
- /* functions @FT_Open_Face and @FT_Attach_Stream. */
- /* */
- /* <Fields> */
- /* flags :: A set of bit flags indicating how to use the */
- /* structure. */
- /* */
- /* memory_base :: The first byte of the file in memory. */
- /* */
- /* memory_size :: The size in bytes of the file in memory. */
- /* */
- /* pathname :: A pointer to an 8-bit file pathname. */
- /* */
- /* stream :: A handle to a source stream object. */
- /* */
- /* driver :: This field is exclusively used by @FT_Open_Face; */
- /* it simply specifies the font driver to use for */
- /* opening the face. If set to NULL, FreeType tries */
- /* to load the face with each one of the drivers in */
- /* its list. */
- /* */
- /* num_params :: The number of extra parameters. */
- /* */
- /* params :: Extra parameters passed to the font driver when */
- /* opening a new face. */
- /* */
- /* <Note> */
- /* The stream type is determined by the contents of `flags' that */
- /* are tested in the following order by @FT_Open_Face: */
- /* */
- /* If the @FT_OPEN_MEMORY bit is set, assume that this is a */
- /* memory file of `memory_size' bytes, located at `memory_address'. */
- /* The data are not copied, and the client is responsible for */
- /* releasing and destroying them _after_ the corresponding call to */
- /* @FT_Done_Face. */
- /* */
- /* Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a */
- /* custom input stream `stream' is used. */
- /* */
- /* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this */
- /* is a normal file and use `pathname' to open it. */
- /* */
- /* If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to */
- /* open the file with the driver whose handler is in `driver'. */
- /* */
- /* If the @FT_OPEN_PARAMS bit is set, the parameters given by */
- /* `num_params' and `params' is used. They are ignored otherwise. */
- /* */
- /* Ideally, both the `pathname' and `params' fields should be tagged */
- /* as `const'; this is missing for API backward compatibility. In */
- /* other words, applications should treat them as read-only. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Open_Args
+ *
+ * @description:
+ * A structure to indicate how to open a new font file or stream. A
+ * pointer to such a structure can be used as a parameter for the
+ * functions @FT_Open_Face and @FT_Attach_Stream.
+ *
+ * @fields:
+ * flags ::
+ * A set of bit flags indicating how to use the structure.
+ *
+ * memory_base ::
+ * The first byte of the file in memory.
+ *
+ * memory_size ::
+ * The size in bytes of the file in memory.
+ *
+ * pathname ::
+ * A pointer to an 8-bit file pathname.
+ *
+ * stream ::
+ * A handle to a source stream object.
+ *
+ * driver ::
+ * This field is exclusively used by @FT_Open_Face; it simply specifies
+ * the font driver to use for opening the face. If set to `NULL`,
+ * FreeType tries to load the face with each one of the drivers in its
+ * list.
+ *
+ * num_params ::
+ * The number of extra parameters.
+ *
+ * params ::
+ * Extra parameters passed to the font driver when opening a new face.
+ *
+ * @note:
+ * The stream type is determined by the contents of `flags` that are
+ * tested in the following order by @FT_Open_Face:
+ *
+ * If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file
+ * of `memory_size` bytes, located at `memory_address`. The data are not
+ * copied, and the client is responsible for releasing and destroying
+ * them _after_ the corresponding call to @FT_Done_Face.
+ *
+ * Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a custom
+ * input stream `stream` is used.
+ *
+ * Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a
+ * normal file and use `pathname` to open it.
+ *
+ * If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open
+ * the file with the driver whose handler is in `driver`.
+ *
+ * If the @FT_OPEN_PARAMS bit is set, the parameters given by
+ * `num_params` and `params` is used. They are ignored otherwise.
+ *
+ * Ideally, both the `pathname` and `params` fields should be tagged as
+ * 'const'; this is missing for API backward compatibility. In other
+ * words, applications should treat them as read-only.
+ */
typedef struct FT_Open_Args_
{
FT_UInt flags;
@@ -2147,34 +2134,37 @@ FT_BEGIN_HEADER
} FT_Open_Args;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face */
- /* */
- /* <Description> */
- /* Call @FT_Open_Face to open a font by its pathname. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* pathname :: A path to the font file. */
- /* */
- /* face_index :: See @FT_Open_Face for a detailed description of this */
- /* parameter. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Use @FT_Done_Face to destroy the created @FT_Face object (along */
- /* with its slot and sizes). */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_New_Face
+ *
+ * @description:
+ * Call @FT_Open_Face to open a font by its pathname.
+ *
+ * @inout:
+ * library ::
+ * A handle to the library resource.
+ *
+ * @input:
+ * pathname ::
+ * A path to the font file.
+ *
+ * face_index ::
+ * See @FT_Open_Face for a detailed description of this parameter.
+ *
+ * @output:
+ * aface ::
+ * A handle to a new face object. If `face_index` is greater than or
+ * equal to zero, it must be non-`NULL`.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Use @FT_Done_Face to destroy the created @FT_Face object (along with
+ * its slot and sizes).
+ */
FT_EXPORT( FT_Error )
FT_New_Face( FT_Library library,
const char* filepathname,
@@ -2182,36 +2172,39 @@ FT_BEGIN_HEADER
FT_Face *aface );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Memory_Face */
- /* */
- /* <Description> */
- /* Call @FT_Open_Face to open a font that has been loaded into */
- /* memory. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* file_base :: A pointer to the beginning of the font data. */
- /* */
- /* file_size :: The size of the memory chunk used by the font data. */
- /* */
- /* face_index :: See @FT_Open_Face for a detailed description of this */
- /* parameter. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You must not deallocate the memory before calling @FT_Done_Face. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_New_Memory_Face
+ *
+ * @description:
+ * Call @FT_Open_Face to open a font that has been loaded into memory.
+ *
+ * @inout:
+ * library ::
+ * A handle to the library resource.
+ *
+ * @input:
+ * file_base ::
+ * A pointer to the beginning of the font data.
+ *
+ * file_size ::
+ * The size of the memory chunk used by the font data.
+ *
+ * face_index ::
+ * See @FT_Open_Face for a detailed description of this parameter.
+ *
+ * @output:
+ * aface ::
+ * A handle to a new face object. If `face_index` is greater than or
+ * equal to zero, it must be non-`NULL`.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * You must not deallocate the memory before calling @FT_Done_Face.
+ */
FT_EXPORT( FT_Error )
FT_New_Memory_Face( FT_Library library,
const FT_Byte* file_base,
@@ -2220,147 +2213,143 @@ FT_BEGIN_HEADER
FT_Face *aface );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Open_Face */
- /* */
- /* <Description> */
- /* Create a face object from a given resource described by */
- /* @FT_Open_Args. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* args :: A pointer to an `FT_Open_Args' structure that must */
- /* be filled by the caller. */
- /* */
- /* face_index :: This field holds two different values. Bits 0-15 */
- /* are the index of the face in the font file (starting */
- /* with value~0). Set it to~0 if there is only one */
- /* face in the font file. */
- /* */
- /* [Since 2.6.1] Bits 16-30 are relevant to GX and */
- /* OpenType variation fonts only, specifying the named */
- /* instance index for the current face index (starting */
- /* with value~1; value~0 makes FreeType ignore named */
- /* instances). For non-variation fonts, bits 16-30 are */
- /* ignored. Assuming that you want to access the third */
- /* named instance in face~4, `face_index' should be set */
- /* to 0x00030004. If you want to access face~4 without */
- /* variation handling, simply set `face_index' to */
- /* value~4. */
- /* */
- /* `FT_Open_Face' and its siblings can be used to */
- /* quickly check whether the font format of a given */
- /* font resource is supported by FreeType. In general, */
- /* if the `face_index' argument is negative, the */
- /* function's return value is~0 if the font format is */
- /* recognized, or non-zero otherwise. The function */
- /* allocates a more or less empty face handle in */
- /* `*aface' (if `aface' isn't NULL); the only two */
- /* useful fields in this special case are */
- /* `face->num_faces' and `face->style_flags'. For any */
- /* negative value of `face_index', `face->num_faces' */
- /* gives the number of faces within the font file. For */
- /* the negative value `-(N+1)' (with `N' a non-negative */
- /* 16-bit value), bits 16-30 in `face->style_flags' */
- /* give the number of named instances in face `N' if we */
- /* have a variation font (or zero otherwise). After */
- /* examination, the returned @FT_Face structure should */
- /* be deallocated with a call to @FT_Done_Face. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Unlike FreeType 1.x, this function automatically creates a glyph */
- /* slot for the face object that can be accessed directly through */
- /* `face->glyph'. */
- /* */
- /* Each new face object created with this function also owns a */
- /* default @FT_Size object, accessible as `face->size'. */
- /* */
- /* One @FT_Library instance can have multiple face objects, this is, */
- /* @FT_Open_Face and its siblings can be called multiple times using */
- /* the same `library' argument. */
- /* */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Face. */
- /* */
- /* To loop over all faces, use code similar to the following snippet */
- /* (omitting the error handling). */
- /* */
- /* { */
- /* ... */
- /* FT_Face face; */
- /* FT_Long i, num_faces; */
- /* */
- /* */
- /* error = FT_Open_Face( library, args, -1, &face ); */
- /* if ( error ) { ... } */
- /* */
- /* num_faces = face->num_faces; */
- /* FT_Done_Face( face ); */
- /* */
- /* for ( i = 0; i < num_faces; i++ ) */
- /* { */
- /* ... */
- /* error = FT_Open_Face( library, args, i, &face ); */
- /* ... */
- /* FT_Done_Face( face ); */
- /* ... */
- /* } */
- /* } */
- /* */
- /* To loop over all valid values for `face_index', use something */
- /* similar to the following snippet, again without error handling. */
- /* The code accesses all faces immediately (thus only a single call */
- /* of `FT_Open_Face' within the do-loop), with and without named */
- /* instances. */
- /* */
- /* { */
- /* ... */
- /* FT_Face face; */
- /* */
- /* FT_Long num_faces = 0; */
- /* FT_Long num_instances = 0; */
- /* */
- /* FT_Long face_idx = 0; */
- /* FT_Long instance_idx = 0; */
- /* */
- /* */
- /* do */
- /* { */
- /* FT_Long id = ( instance_idx << 16 ) + face_idx; */
- /* */
- /* */
- /* error = FT_Open_Face( library, args, id, &face ); */
- /* if ( error ) { ... } */
- /* */
- /* num_faces = face->num_faces; */
- /* num_instances = face->style_flags >> 16; */
- /* */
- /* ... */
- /* */
- /* FT_Done_Face( face ); */
- /* */
- /* if ( instance_idx < num_instances ) */
- /* instance_idx++; */
- /* else */
- /* { */
- /* face_idx++; */
- /* instance_idx = 0; */
- /* } */
- /* */
- /* } while ( face_idx < num_faces ) */
- /* } */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Open_Face
+ *
+ * @description:
+ * Create a face object from a given resource described by @FT_Open_Args.
+ *
+ * @inout:
+ * library ::
+ * A handle to the library resource.
+ *
+ * @input:
+ * args ::
+ * A pointer to an `FT_Open_Args` structure that must be filled by the
+ * caller.
+ *
+ * face_index ::
+ * This field holds two different values. Bits 0-15 are the index of
+ * the face in the font file (starting with value~0). Set it to~0 if
+ * there is only one face in the font file.
+ *
+ * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation
+ * fonts only, specifying the named instance index for the current face
+ * index (starting with value~1; value~0 makes FreeType ignore named
+ * instances). For non-variation fonts, bits 16-30 are ignored.
+ * Assuming that you want to access the third named instance in face~4,
+ * `face_index` should be set to 0x00030004. If you want to access
+ * face~4 without variation handling, simply set `face_index` to
+ * value~4.
+ *
+ * `FT_Open_Face` and its siblings can be used to quickly check whether
+ * the font format of a given font resource is supported by FreeType.
+ * In general, if the `face_index` argument is negative, the function's
+ * return value is~0 if the font format is recognized, or non-zero
+ * otherwise. The function allocates a more or less empty face handle
+ * in `*aface` (if `aface` isn't `NULL`); the only two useful fields in
+ * this special case are `face->num_faces` and `face->style_flags`.
+ * For any negative value of `face_index`, `face->num_faces` gives the
+ * number of faces within the font file. For the negative value
+ * '-(N+1)' (with 'N' a non-negative 16-bit value), bits 16-30 in
+ * `face->style_flags` give the number of named instances in face 'N'
+ * if we have a variation font (or zero otherwise). After examination,
+ * the returned @FT_Face structure should be deallocated with a call to
+ * @FT_Done_Face.
+ *
+ * @output:
+ * aface ::
+ * A handle to a new face object. If `face_index` is greater than or
+ * equal to zero, it must be non-`NULL`.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Unlike FreeType 1.x, this function automatically creates a glyph slot
+ * for the face object that can be accessed directly through
+ * `face->glyph`.
+ *
+ * Each new face object created with this function also owns a default
+ * @FT_Size object, accessible as `face->size`.
+ *
+ * One @FT_Library instance can have multiple face objects, this is,
+ * @FT_Open_Face and its siblings can be called multiple times using the
+ * same `library` argument.
+ *
+ * See the discussion of reference counters in the description of
+ * @FT_Reference_Face.
+ *
+ * @example:
+ * To loop over all faces, use code similar to the following snippet
+ * (omitting the error handling).
+ *
+ * ```
+ * ...
+ * FT_Face face;
+ * FT_Long i, num_faces;
+ *
+ *
+ * error = FT_Open_Face( library, args, -1, &face );
+ * if ( error ) { ... }
+ *
+ * num_faces = face->num_faces;
+ * FT_Done_Face( face );
+ *
+ * for ( i = 0; i < num_faces; i++ )
+ * {
+ * ...
+ * error = FT_Open_Face( library, args, i, &face );
+ * ...
+ * FT_Done_Face( face );
+ * ...
+ * }
+ * ```
+ *
+ * To loop over all valid values for `face_index`, use something similar
+ * to the following snippet, again without error handling. The code
+ * accesses all faces immediately (thus only a single call of
+ * `FT_Open_Face` within the do-loop), with and without named instances.
+ *
+ * ```
+ * ...
+ * FT_Face face;
+ *
+ * FT_Long num_faces = 0;
+ * FT_Long num_instances = 0;
+ *
+ * FT_Long face_idx = 0;
+ * FT_Long instance_idx = 0;
+ *
+ *
+ * do
+ * {
+ * FT_Long id = ( instance_idx << 16 ) + face_idx;
+ *
+ *
+ * error = FT_Open_Face( library, args, id, &face );
+ * if ( error ) { ... }
+ *
+ * num_faces = face->num_faces;
+ * num_instances = face->style_flags >> 16;
+ *
+ * ...
+ *
+ * FT_Done_Face( face );
+ *
+ * if ( instance_idx < num_instances )
+ * instance_idx++;
+ * else
+ * {
+ * face_idx++;
+ * instance_idx = 0;
+ * }
+ *
+ * } while ( face_idx < num_faces )
+ * ```
+ */
FT_EXPORT( FT_Error )
FT_Open_Face( FT_Library library,
const FT_Open_Args* args,
@@ -2368,204 +2357,208 @@ FT_BEGIN_HEADER
FT_Face *aface );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Attach_File */
- /* */
- /* <Description> */
- /* Call @FT_Attach_Stream to attach a file. */
- /* */
- /* <InOut> */
- /* face :: The target face object. */
- /* */
- /* <Input> */
- /* filepathname :: The pathname. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Attach_File
+ *
+ * @description:
+ * Call @FT_Attach_Stream to attach a file.
+ *
+ * @inout:
+ * face ::
+ * The target face object.
+ *
+ * @input:
+ * filepathname ::
+ * The pathname.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Attach_File( FT_Face face,
const char* filepathname );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Attach_Stream */
- /* */
- /* <Description> */
- /* `Attach' data to a face object. Normally, this is used to read */
- /* additional information for the face object. For example, you can */
- /* attach an AFM file that comes with a Type~1 font to get the */
- /* kerning values and other metrics. */
- /* */
- /* <InOut> */
- /* face :: The target face object. */
- /* */
- /* <Input> */
- /* parameters :: A pointer to @FT_Open_Args that must be filled by */
- /* the caller. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The meaning of the `attach' (i.e., what really happens when the */
- /* new file is read) is not fixed by FreeType itself. It really */
- /* depends on the font format (and thus the font driver). */
- /* */
- /* Client applications are expected to know what they are doing */
- /* when invoking this function. Most drivers simply do not implement */
- /* file or stream attachments. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Attach_Stream
+ *
+ * @description:
+ * 'Attach' data to a face object. Normally, this is used to read
+ * additional information for the face object. For example, you can
+ * attach an AFM file that comes with a Type~1 font to get the kerning
+ * values and other metrics.
+ *
+ * @inout:
+ * face ::
+ * The target face object.
+ *
+ * @input:
+ * parameters ::
+ * A pointer to @FT_Open_Args that must be filled by the caller.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The meaning of the 'attach' (i.e., what really happens when the new
+ * file is read) is not fixed by FreeType itself. It really depends on
+ * the font format (and thus the font driver).
+ *
+ * Client applications are expected to know what they are doing when
+ * invoking this function. Most drivers simply do not implement file or
+ * stream attachments.
+ */
FT_EXPORT( FT_Error )
FT_Attach_Stream( FT_Face face,
FT_Open_Args* parameters );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Reference_Face */
- /* */
- /* <Description> */
- /* A counter gets initialized to~1 at the time an @FT_Face structure */
- /* is created. This function increments the counter. @FT_Done_Face */
- /* then only destroys a face if the counter is~1, otherwise it simply */
- /* decrements the counter. */
- /* */
- /* This function helps in managing life-cycles of structures that */
- /* reference @FT_Face objects. */
- /* */
- /* <Input> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.4.2 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Reference_Face
+ *
+ * @description:
+ * A counter gets initialized to~1 at the time an @FT_Face structure is
+ * created. This function increments the counter. @FT_Done_Face then
+ * only destroys a face if the counter is~1, otherwise it simply
+ * decrements the counter.
+ *
+ * This function helps in managing life-cycles of structures that
+ * reference @FT_Face objects.
+ *
+ * @input:
+ * face ::
+ * A handle to a target face object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.4.2
+ */
FT_EXPORT( FT_Error )
FT_Reference_Face( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Face */
- /* */
- /* <Description> */
- /* Discard a given face object, as well as all of its child slots and */
- /* sizes. */
- /* */
- /* <Input> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Face. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Done_Face
+ *
+ * @description:
+ * Discard a given face object, as well as all of its child slots and
+ * sizes.
+ *
+ * @input:
+ * face ::
+ * A handle to a target face object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * See the discussion of reference counters in the description of
+ * @FT_Reference_Face.
+ */
FT_EXPORT( FT_Error )
FT_Done_Face( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Select_Size */
- /* */
- /* <Description> */
- /* Select a bitmap strike. To be more precise, this function sets */
- /* the scaling factors of the active @FT_Size object in a face so */
- /* that bitmaps from this particular strike are taken by */
- /* @FT_Load_Glyph and friends. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* strike_index :: The index of the bitmap strike in the */
- /* `available_sizes' field of @FT_FaceRec structure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* For bitmaps embedded in outline fonts it is common that only a */
- /* subset of the available glyphs at a given ppem value is available. */
- /* FreeType silently uses outlines if there is no bitmap for a given */
- /* glyph index. */
- /* */
- /* For GX and OpenType variation fonts, a bitmap strike makes sense */
- /* only if the default instance is active (this is, no glyph */
- /* variation takes place); otherwise, FreeType simply ignores bitmap */
- /* strikes. The same is true for all named instances that are */
- /* different from the default instance. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Select_Size
+ *
+ * @description:
+ * Select a bitmap strike. To be more precise, this function sets the
+ * scaling factors of the active @FT_Size object in a face so that
+ * bitmaps from this particular strike are taken by @FT_Load_Glyph and
+ * friends.
+ *
+ * @inout:
+ * face ::
+ * A handle to a target face object.
+ *
+ * @input:
+ * strike_index ::
+ * The index of the bitmap strike in the `available_sizes` field of
+ * @FT_FaceRec structure.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * For bitmaps embedded in outline fonts it is common that only a subset
+ * of the available glyphs at a given ppem value is available. FreeType
+ * silently uses outlines if there is no bitmap for a given glyph index.
+ *
+ * For GX and OpenType variation fonts, a bitmap strike makes sense only
+ * if the default instance is active (this is, no glyph variation takes
+ * place); otherwise, FreeType simply ignores bitmap strikes. The same
+ * is true for all named instances that are different from the default
+ * instance.
+ *
+ * Don't use this function if you are using the FreeType cache API.
+ */
FT_EXPORT( FT_Error )
FT_Select_Size( FT_Face face,
FT_Int strike_index );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Size_Request_Type */
- /* */
- /* <Description> */
- /* An enumeration type that lists the supported size request types, */
- /* i.e., what input size (in font units) maps to the requested output */
- /* size (in pixels, as computed from the arguments of */
- /* @FT_Size_Request). */
- /* */
- /* <Values> */
- /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */
- /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */
- /* used to determine both scaling values. */
- /* */
- /* This is the standard scaling found in most applications. In */
- /* particular, use this size request type for TrueType fonts if */
- /* they provide optical scaling or something similar. Note, */
- /* however, that `units_per_EM' is a rather abstract value which */
- /* bears no relation to the actual size of the glyphs in a font. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */
- /* The real dimension. The sum of the `ascender' and (minus of) */
- /* the `descender' fields of @FT_FaceRec is used to determine both */
- /* scaling values. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_BBOX :: */
- /* The font bounding box. The width and height of the `bbox' field */
- /* of @FT_FaceRec are used to determine the horizontal and vertical */
- /* scaling value, respectively. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_CELL :: */
- /* The `max_advance_width' field of @FT_FaceRec is used to */
- /* determine the horizontal scaling value; the vertical scaling */
- /* value is determined the same way as */
- /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */
- /* values are set to the smaller one. This type is useful if you */
- /* want to specify the font size for, say, a window of a given */
- /* dimension and 80x24 cells. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_SCALES :: */
- /* Specify the scaling values directly. */
- /* */
- /* <Note> */
- /* The above descriptions only apply to scalable formats. For bitmap */
- /* formats, the behaviour is up to the driver. */
- /* */
- /* See the note section of @FT_Size_Metrics if you wonder how size */
- /* requesting relates to scaling values. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Size_Request_Type
+ *
+ * @description:
+ * An enumeration type that lists the supported size request types, i.e.,
+ * what input size (in font units) maps to the requested output size (in
+ * pixels, as computed from the arguments of @FT_Size_Request).
+ *
+ * @values:
+ * FT_SIZE_REQUEST_TYPE_NOMINAL ::
+ * The nominal size. The `units_per_EM` field of @FT_FaceRec is used
+ * to determine both scaling values.
+ *
+ * This is the standard scaling found in most applications. In
+ * particular, use this size request type for TrueType fonts if they
+ * provide optical scaling or something similar. Note, however, that
+ * `units_per_EM` is a rather abstract value which bears no relation to
+ * the actual size of the glyphs in a font.
+ *
+ * FT_SIZE_REQUEST_TYPE_REAL_DIM ::
+ * The real dimension. The sum of the `ascender` and (minus of) the
+ * `descender` fields of @FT_FaceRec is used to determine both scaling
+ * values.
+ *
+ * FT_SIZE_REQUEST_TYPE_BBOX ::
+ * The font bounding box. The width and height of the `bbox` field of
+ * @FT_FaceRec are used to determine the horizontal and vertical
+ * scaling value, respectively.
+ *
+ * FT_SIZE_REQUEST_TYPE_CELL ::
+ * The `max_advance_width` field of @FT_FaceRec is used to determine
+ * the horizontal scaling value; the vertical scaling value is
+ * determined the same way as @FT_SIZE_REQUEST_TYPE_REAL_DIM does.
+ * Finally, both scaling values are set to the smaller one. This type
+ * is useful if you want to specify the font size for, say, a window of
+ * a given dimension and 80x24 cells.
+ *
+ * FT_SIZE_REQUEST_TYPE_SCALES ::
+ * Specify the scaling values directly.
+ *
+ * @note:
+ * The above descriptions only apply to scalable formats. For bitmap
+ * formats, the behaviour is up to the driver.
+ *
+ * See the note section of @FT_Size_Metrics if you wonder how size
+ * requesting relates to scaling values.
+ */
typedef enum FT_Size_Request_Type_
{
FT_SIZE_REQUEST_TYPE_NOMINAL,
@@ -2579,42 +2572,45 @@ FT_BEGIN_HEADER
} FT_Size_Request_Type;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_RequestRec */
- /* */
- /* <Description> */
- /* A structure to model a size request. */
- /* */
- /* <Fields> */
- /* type :: See @FT_Size_Request_Type. */
- /* */
- /* width :: The desired width, given as a 26.6 fractional */
- /* point value (with 72pt = 1in). */
- /* */
- /* height :: The desired height, given as a 26.6 fractional */
- /* point value (with 72pt = 1in). */
- /* */
- /* horiResolution :: The horizontal resolution (dpi, i.e., pixels per */
- /* inch). If set to zero, `width' is treated as a */
- /* 26.6 fractional *pixel* value, which gets */
- /* internally rounded to an integer. */
- /* */
- /* vertResolution :: The vertical resolution (dpi, i.e., pixels per */
- /* inch). If set to zero, `height' is treated as a */
- /* 26.6 fractional *pixel* value, which gets */
- /* internally rounded to an integer. */
- /* */
- /* <Note> */
- /* If `width' is zero, the horizontal scaling value is set equal */
- /* to the vertical scaling value, and vice versa. */
- /* */
- /* If `type' is FT_SIZE_REQUEST_TYPE_SCALES, `width' and `height' are */
- /* interpreted directly as 16.16 fractional scaling values, without */
- /* any further modification, and both `horiResolution' and */
- /* `vertResolution' are ignored. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Size_RequestRec
+ *
+ * @description:
+ * A structure to model a size request.
+ *
+ * @fields:
+ * type ::
+ * See @FT_Size_Request_Type.
+ *
+ * width ::
+ * The desired width, given as a 26.6 fractional point value (with 72pt
+ * = 1in).
+ *
+ * height ::
+ * The desired height, given as a 26.6 fractional point value (with
+ * 72pt = 1in).
+ *
+ * horiResolution ::
+ * The horizontal resolution (dpi, i.e., pixels per inch). If set to
+ * zero, `width` is treated as a 26.6 fractional **pixel** value, which
+ * gets internally rounded to an integer.
+ *
+ * vertResolution ::
+ * The vertical resolution (dpi, i.e., pixels per inch). If set to
+ * zero, `height` is treated as a 26.6 fractional **pixel** value,
+ * which gets internally rounded to an integer.
+ *
+ * @note:
+ * If `width` is zero, the horizontal scaling value is set equal to the
+ * vertical scaling value, and vice versa.
+ *
+ * If `type` is `FT_SIZE_REQUEST_TYPE_SCALES`, `width` and `height` are
+ * interpreted directly as 16.16 fractional scaling values, without any
+ * further modification, and both `horiResolution` and `vertResolution`
+ * are ignored.
+ */
typedef struct FT_Size_RequestRec_
{
FT_Size_Request_Type type;
@@ -2626,96 +2622,102 @@ FT_BEGIN_HEADER
} FT_Size_RequestRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_Request */
- /* */
- /* <Description> */
- /* A handle to a size request structure. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Size_Request
+ *
+ * @description:
+ * A handle to a size request structure.
+ */
typedef struct FT_Size_RequestRec_ *FT_Size_Request;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Request_Size */
- /* */
- /* <Description> */
- /* Resize the scale of the active @FT_Size object in a face. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* req :: A pointer to a @FT_Size_RequestRec. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Although drivers may select the bitmap strike matching the */
- /* request, you should not rely on this if you intend to select a */
- /* particular bitmap strike. Use @FT_Select_Size instead in that */
- /* case. */
- /* */
- /* The relation between the requested size and the resulting glyph */
- /* size is dependent entirely on how the size is defined in the */
- /* source face. The font designer chooses the final size of each */
- /* glyph relative to this size. For more information refer to */
- /* `https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. */
- /* */
- /* Contrary to @FT_Set_Char_Size, this function doesn't have special */
- /* code to normalize zero-valued widths, heights, or resolutions */
- /* (which lead to errors in most cases). */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Request_Size
+ *
+ * @description:
+ * Resize the scale of the active @FT_Size object in a face.
+ *
+ * @inout:
+ * face ::
+ * A handle to a target face object.
+ *
+ * @input:
+ * req ::
+ * A pointer to a @FT_Size_RequestRec.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Although drivers may select the bitmap strike matching the request,
+ * you should not rely on this if you intend to select a particular
+ * bitmap strike. Use @FT_Select_Size instead in that case.
+ *
+ * The relation between the requested size and the resulting glyph size
+ * is dependent entirely on how the size is defined in the source face.
+ * The font designer chooses the final size of each glyph relative to
+ * this size. For more information refer to
+ * 'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.
+ *
+ * Contrary to @FT_Set_Char_Size, this function doesn't have special code
+ * to normalize zero-valued widths, heights, or resolutions (which lead
+ * to errors in most cases).
+ *
+ * Don't use this function if you are using the FreeType cache API.
+ */
FT_EXPORT( FT_Error )
FT_Request_Size( FT_Face face,
FT_Size_Request req );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Char_Size */
- /* */
- /* <Description> */
- /* Call @FT_Request_Size to request the nominal size (in points). */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* char_width :: The nominal width, in 26.6 fractional points. */
- /* */
- /* char_height :: The nominal height, in 26.6 fractional points. */
- /* */
- /* horz_resolution :: The horizontal resolution in dpi. */
- /* */
- /* vert_resolution :: The vertical resolution in dpi. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* While this function allows fractional points as input values, the */
- /* resulting ppem value for the given resolution is always rounded to */
- /* the nearest integer. */
- /* */
- /* If either the character width or height is zero, it is set equal */
- /* to the other value. */
- /* */
- /* If either the horizontal or vertical resolution is zero, it is set */
- /* equal to the other value. */
- /* */
- /* A character width or height smaller than 1pt is set to 1pt; if */
- /* both resolution values are zero, they are set to 72dpi. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Char_Size
+ *
+ * @description:
+ * Call @FT_Request_Size to request the nominal size (in points).
+ *
+ * @inout:
+ * face ::
+ * A handle to a target face object.
+ *
+ * @input:
+ * char_width ::
+ * The nominal width, in 26.6 fractional points.
+ *
+ * char_height ::
+ * The nominal height, in 26.6 fractional points.
+ *
+ * horz_resolution ::
+ * The horizontal resolution in dpi.
+ *
+ * vert_resolution ::
+ * The vertical resolution in dpi.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * While this function allows fractional points as input values, the
+ * resulting ppem value for the given resolution is always rounded to the
+ * nearest integer.
+ *
+ * If either the character width or height is zero, it is set equal to
+ * the other value.
+ *
+ * If either the horizontal or vertical resolution is zero, it is set
+ * equal to the other value.
+ *
+ * A character width or height smaller than 1pt is set to 1pt; if both
+ * resolution values are zero, they are set to 72dpi.
+ *
+ * Don't use this function if you are using the FreeType cache API.
+ */
FT_EXPORT( FT_Error )
FT_Set_Char_Size( FT_Face face,
FT_F26Dot6 char_width,
@@ -2724,134 +2726,138 @@ FT_BEGIN_HEADER
FT_UInt vert_resolution );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Pixel_Sizes */
- /* */
- /* <Description> */
- /* Call @FT_Request_Size to request the nominal size (in pixels). */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* pixel_width :: The nominal width, in pixels. */
- /* */
- /* pixel_height :: The nominal height, in pixels. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You should not rely on the resulting glyphs matching or being */
- /* constrained to this pixel size. Refer to @FT_Request_Size to */
- /* understand how requested sizes relate to actual sizes. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Pixel_Sizes
+ *
+ * @description:
+ * Call @FT_Request_Size to request the nominal size (in pixels).
+ *
+ * @inout:
+ * face ::
+ * A handle to the target face object.
+ *
+ * @input:
+ * pixel_width ::
+ * The nominal width, in pixels.
+ *
+ * pixel_height ::
+ * The nominal height, in pixels.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * You should not rely on the resulting glyphs matching or being
+ * constrained to this pixel size. Refer to @FT_Request_Size to
+ * understand how requested sizes relate to actual sizes.
+ *
+ * Don't use this function if you are using the FreeType cache API.
+ */
FT_EXPORT( FT_Error )
FT_Set_Pixel_Sizes( FT_Face face,
FT_UInt pixel_width,
FT_UInt pixel_height );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Glyph */
- /* */
- /* <Description> */
- /* Load a glyph into the glyph slot of a face object. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object where the glyph */
- /* is loaded. */
- /* */
- /* <Input> */
- /* glyph_index :: The index of the glyph in the font file. For */
- /* CID-keyed fonts (either in PS or in CFF format) */
- /* this argument specifies the CID value. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* @FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The loaded glyph may be transformed. See @FT_Set_Transform for */
- /* the details. */
- /* */
- /* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is */
- /* returned for invalid CID values (this is, for CID values that */
- /* don't have a corresponding glyph in the font). See the discussion */
- /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */
- /* */
- /* If you receive `FT_Err_Glyph_Too_Big', try getting the glyph */
- /* outline at EM size, then scale it manually and fill it as a */
- /* graphics operation. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Load_Glyph
+ *
+ * @description:
+ * Load a glyph into the glyph slot of a face object.
+ *
+ * @inout:
+ * face ::
+ * A handle to the target face object where the glyph is loaded.
+ *
+ * @input:
+ * glyph_index ::
+ * The index of the glyph in the font file. For CID-keyed fonts
+ * (either in PS or in CFF format) this argument specifies the CID
+ * value.
+ *
+ * load_flags ::
+ * A flag indicating what to load for this glyph. The @FT_LOAD_XXX
+ * constants can be used to control the glyph loading process (e.g.,
+ * whether the outline should be scaled, whether to load bitmaps or
+ * not, whether to hint the outline, etc).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The loaded glyph may be transformed. See @FT_Set_Transform for the
+ * details.
+ *
+ * For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned
+ * for invalid CID values (this is, for CID values that don't have a
+ * corresponding glyph in the font). See the discussion of the
+ * @FT_FACE_FLAG_CID_KEYED flag for more details.
+ *
+ * If you receive `FT_Err_Glyph_Too_Big`, try getting the glyph outline
+ * at EM size, then scale it manually and fill it as a graphics
+ * operation.
+ */
FT_EXPORT( FT_Error )
FT_Load_Glyph( FT_Face face,
FT_UInt glyph_index,
FT_Int32 load_flags );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Char */
- /* */
- /* <Description> */
- /* Load a glyph into the glyph slot of a face object, accessed by its */
- /* character code. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object where the glyph */
- /* is loaded. */
- /* */
- /* <Input> */
- /* char_code :: The glyph's character code, according to the */
- /* current charmap used in the face. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* @FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */
- /* */
- /* Many fonts contain glyphs that can't be loaded by this function */
- /* since its glyph indices are not listed in any of the font's */
- /* charmaps. */
- /* */
- /* If no active cmap is set up (i.e., `face->charmap' is zero), the */
- /* call to @FT_Get_Char_Index is omitted, and the function behaves */
- /* identically to @FT_Load_Glyph. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Load_Char
+ *
+ * @description:
+ * Load a glyph into the glyph slot of a face object, accessed by its
+ * character code.
+ *
+ * @inout:
+ * face ::
+ * A handle to a target face object where the glyph is loaded.
+ *
+ * @input:
+ * char_code ::
+ * The glyph's character code, according to the current charmap used in
+ * the face.
+ *
+ * load_flags ::
+ * A flag indicating what to load for this glyph. The @FT_LOAD_XXX
+ * constants can be used to control the glyph loading process (e.g.,
+ * whether the outline should be scaled, whether to load bitmaps or
+ * not, whether to hint the outline, etc).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph.
+ *
+ * Many fonts contain glyphs that can't be loaded by this function since
+ * its glyph indices are not listed in any of the font's charmaps.
+ *
+ * If no active cmap is set up (i.e., `face->charmap` is zero), the call
+ * to @FT_Get_Char_Index is omitted, and the function behaves identically
+ * to @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 for @FT_Load_Glyph to indicate what
- * kind of operations to perform during glyph loading.
+ * A list of bit field constants for @FT_Load_Glyph to indicate what kind
+ * of operations to perform during glyph loading.
*
* @values:
* FT_LOAD_DEFAULT ::
@@ -2859,15 +2865,14 @@ FT_BEGIN_HEADER
* 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).
+ * face's current size. If one is found, the function returns. The
+ * bitmap data can be accessed from the glyph slot (see note below).
*
* 2. If no embedded bitmap is searched for or found, FreeType looks
- * for a scalable outline. If one is found, it is loaded from
- * the font file, scaled to device pixels, then `hinted' to the
- * pixel grid in order to optimize it. The outline data can be
- * accessed from the glyph slot (see note below).
+ * 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
@@ -2879,14 +2884,14 @@ FT_BEGIN_HEADER
* This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
* unsets @FT_LOAD_RENDER.
*
- * If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using
- * FT_LOAD_NO_SCALE usually yields meaningless outlines because the
- * subglyphs must be scaled and positioned with hinting instructions.
- * This can be solved by loading the font without FT_LOAD_NO_SCALE and
- * setting the character size to `font->units_per_EM'.
+ * If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using
+ * `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the
+ * subglyphs must be scaled and positioned with hinting instructions.
+ * This can be solved by loading the font without `FT_LOAD_NO_SCALE`
+ * and setting the character size to `font->units_per_EM`.
*
* FT_LOAD_NO_HINTING ::
- * Disable hinting. This generally generates `blurrier' bitmap glyphs
+ * Disable hinting. This generally generates 'blurrier' bitmap glyphs
* when the glyph are rendered in any of the anti-aliased modes. See
* also the note below.
*
@@ -2907,34 +2912,37 @@ FT_BEGIN_HEADER
*
* FT_LOAD_VERTICAL_LAYOUT ::
* Load the glyph for vertical text layout. In particular, the
- * `advance' value in the @FT_GlyphSlotRec structure is set to the
- * `vertAdvance' value of the `metrics' field.
+ * `advance` value in the @FT_GlyphSlotRec structure is set to the
+ * `vertAdvance` value of the `metrics` field.
*
- * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use
- * this flag currently. Reason is that in this case vertical metrics
- * get synthesized, and those values are not always consistent across
+ * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use this
+ * flag currently. Reason is that in this case vertical metrics get
+ * synthesized, and those values are not always consistent across
* various font formats.
*
* FT_LOAD_FORCE_AUTOHINT ::
- * Prefer the auto-hinter over the font's native hinter. See also
- * the note below.
+ * Prefer the auto-hinter over the font's native hinter. See also the
+ * note below.
*
* FT_LOAD_PEDANTIC ::
* Make the font driver perform pedantic verifications during glyph
- * loading. This is mostly used to detect broken glyphs in fonts.
- * By default, FreeType tries to handle broken fonts also.
+ * loading and hinting. This is mostly used to detect broken glyphs in
+ * fonts. By default, FreeType tries to handle broken fonts also.
*
* In particular, errors from the TrueType bytecode engine are not
- * passed to the application if this flag is not set; this might
- * result in partially hinted or distorted glyphs in case a glyph's
- * bytecode is buggy.
+ * passed to the application if this flag is not set; this might result
+ * in partially hinted or distorted glyphs in case a glyph's bytecode
+ * is buggy.
*
* FT_LOAD_NO_RECURSE ::
- * Don't load composite glyphs recursively. Instead, the font
- * driver should set the `num_subglyph' and `subglyphs' values of
- * the glyph slot accordingly, and set `glyph->format' to
- * @FT_GLYPH_FORMAT_COMPOSITE. The description of subglyphs can
- * then be accessed with @FT_Get_SubGlyph_Info.
+ * Don't load composite glyphs recursively. Instead, the font driver
+ * fills the `num_subglyph` and `subglyphs` values of the glyph slot;
+ * it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE. The
+ * description of subglyphs can then be accessed with
+ * @FT_Get_SubGlyph_Info.
+ *
+ * Don't use this flag for retrieving metrics information since some
+ * font drivers only return rudimentary data.
*
* This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
*
@@ -2951,23 +2959,35 @@ FT_BEGIN_HEADER
* monochrome-optimized hinting algorithm is used.
*
* FT_LOAD_LINEAR_DESIGN ::
- * Keep `linearHoriAdvance' and `linearVertAdvance' fields of
- * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for
- * details.
+ * Keep `linearHoriAdvance` and `linearVertAdvance` fields of
+ * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for details.
*
* FT_LOAD_NO_AUTOHINT ::
* Disable the auto-hinter. See also the note below.
*
* FT_LOAD_COLOR ::
+ * Load colored glyphs. There are slight differences depending on the
+ * font format.
+ *
* [Since 2.5] Load embedded color bitmap images. The resulting color
- * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format.
- * If the flag is not set and color bitmaps are found, they are
- * converted to 256-level gray bitmaps transparently, using the
- * @FT_PIXEL_MODE_GRAY format.
+ * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format,
+ * with pre-multiplied color channels. If the flag is not set and
+ * color bitmaps are found, they are converted to 256-level gray
+ * bitmaps, using the @FT_PIXEL_MODE_GRAY format.
+ *
+ * [Since 2.10, experimental] If the glyph index contains an entry in
+ * the face's 'COLR' table with a 'CPAL' palette table (as defined in
+ * the OpenType specification), make @FT_Render_Glyph provide a default
+ * blending of the color glyph layers associated with the glyph index,
+ * using the same bitmap format as embedded color bitmap images. This
+ * is mainly for convenience; for full control of color layers use
+ * @FT_Get_Color_Glyph_Layer and FreeType's color functions like
+ * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
+ * so that the client application can handle blending by itself.
*
* FT_LOAD_COMPUTE_METRICS ::
- * [Since 2.6.1] Compute glyph metrics from the glyph data, without
- * the use of bundled metrics tables (for example, the `hdmx' table in
+ * [Since 2.6.1] Compute glyph metrics from the glyph data, without the
+ * use of bundled metrics tables (for example, the 'hdmx' table in
* TrueType fonts). This flag is mainly used by font validating or
* font editing applications, which need to ignore, verify, or edit
* those tables.
@@ -2976,9 +2996,9 @@ FT_BEGIN_HEADER
*
* FT_LOAD_BITMAP_METRICS_ONLY ::
* [Since 2.7.1] Request loading of the metrics and bitmap image
- * information of a (possibly embedded) bitmap glyph without
- * allocating or copying the bitmap image data itself. No effect if
- * the target glyph is not a bitmap image.
+ * information of a (possibly embedded) bitmap glyph without allocating
+ * or copying the bitmap image data itself. No effect if the target
+ * glyph is not a bitmap image.
*
* This flag unsets @FT_LOAD_RENDER.
*
@@ -2993,8 +3013,8 @@ FT_BEGIN_HEADER
* @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.
+ * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used
+ * at all.
*
* See the description of @FT_FACE_FLAG_TRICKY for a special exception
* (affecting only a handful of Asian fonts).
@@ -3005,7 +3025,7 @@ FT_BEGIN_HEADER
* Note that the auto-hinter needs a valid Unicode cmap (either a native
* one or synthesized by FreeType) for producing correct results. If a
* font provides an incorrect mapping (for example, assigning the
- * character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a
+ * character code U+005A, LATIN CAPITAL LETTER~Z, to a glyph depicting a
* mathematical integral sign), the auto-hinter might produce useless
* results.
*
@@ -3025,7 +3045,7 @@ FT_BEGIN_HEADER
#define FT_LOAD_MONOCHROME ( 1L << 12 )
#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 )
#define FT_LOAD_NO_AUTOHINT ( 1L << 15 )
- /* Bits 16-19 are used by `FT_LOAD_TARGET_' */
+ /* Bits 16-19 are used by `FT_LOAD_TARGET_` */
#define FT_LOAD_COLOR ( 1L << 20 )
#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 )
#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 )
@@ -3044,19 +3064,17 @@ FT_BEGIN_HEADER
*
* @description:
* A list of values to select a specific hinting algorithm for the
- * hinter. You should OR one of these values to your `load_flags'
- * when calling @FT_Load_Glyph.
+ * hinter. You should OR one of these values to your `load_flags` when
+ * calling @FT_Load_Glyph.
*
- * Note that a font's native hinters may ignore the hinting algorithm
- * you have specified (e.g., the TrueType bytecode interpreter). You
- * can set @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is
- * used.
+ * Note that a font's native hinters may ignore the hinting algorithm you
+ * have specified (e.g., the TrueType bytecode interpreter). You can set
+ * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.
*
* @values:
* FT_LOAD_TARGET_NORMAL ::
* The default hinting algorithm, optimized for standard gray-level
- * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO
- * instead.
+ * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO instead.
*
* FT_LOAD_TARGET_LIGHT ::
* A lighter hinting algorithm for gray-level modes. Many generated
@@ -3069,13 +3087,13 @@ FT_BEGIN_HEADER
* auto-hinter.
*
* Advance widths are rounded to integer values; however, using the
- * `lsb_delta' and `rsb_delta' fields of @FT_GlyphSlotRec, it is
+ * `lsb_delta` and `rsb_delta` fields of @FT_GlyphSlotRec, it is
* possible to get fractional advance widths for subpixel positioning
* (which is recommended to use).
*
- * If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active,
- * TrueType-like metrics are used to make this mode behave similarly
- * as in unpatched FreeType versions between 2.4.6 and 2.7.1
+ * If configuration option `AF_CONFIG_OPTION_TT_SIZE_METRICS` is
+ * active, TrueType-like metrics are used to make this mode behave
+ * similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1
* (inclusive).
*
* FT_LOAD_TARGET_MONO ::
@@ -3083,6 +3101,12 @@ FT_BEGIN_HEADER
* output. The result is probably unpleasant if the glyph is rendered
* in non-monochrome modes.
*
+ * Note that for outline fonts only the TrueType font driver has proper
+ * monochrome hinting support, provided the TTFs contain hints for B/W
+ * rendering (which most fonts no longer provide). If these conditions
+ * are not met it is very likely that you get ugly results at smaller
+ * sizes.
+ *
* FT_LOAD_TARGET_LCD ::
* A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally
* decimated LCD displays.
@@ -3092,25 +3116,25 @@ FT_BEGIN_HEADER
* 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.
+ * You should use only _one_ of the `FT_LOAD_TARGET_XXX` values in your
+ * `load_flags`. They can't be ORed.
*
* If @FT_LOAD_RENDER is also set, the glyph is rendered in the
* corresponding mode (i.e., the mode that matches the used algorithm
- * best). An exception is FT_LOAD_TARGET_MONO since it implies
+ * best). An exception is `FT_LOAD_TARGET_MONO` since it implies
* @FT_LOAD_MONOCHROME.
*
* You can use a hinting algorithm that doesn't correspond to the same
- * rendering mode. As an example, it is possible to use the `light'
+ * 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_Load_Glyph( face, glyph_index,
+ * load_flags | FT_LOAD_TARGET_LIGHT );
*
- * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
- * }
+ * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
+ * ```
*
* In general, you should stick with one rendering mode. For example,
* switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO
@@ -3142,98 +3166,98 @@ FT_BEGIN_HEADER
#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Transform */
- /* */
- /* <Description> */
- /* Set the transformation that is applied to glyph images when they */
- /* are loaded into a glyph slot through @FT_Load_Glyph. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to the transformation's 2x2 matrix. Use NULL */
- /* for the identity matrix. */
- /* delta :: A pointer to the translation vector. Use NULL for the */
- /* null vector. */
- /* */
- /* <Note> */
- /* The transformation is only applied to scalable image formats after */
- /* the glyph has been loaded. It means that hinting is unaltered by */
- /* the transformation and is performed on the character size given in */
- /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */
- /* */
- /* Note that this also transforms the `face.glyph.advance' field, but */
- /* *not* the values in `face.glyph.metrics'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Transform
+ *
+ * @description:
+ * Set the transformation that is applied to glyph images when they are
+ * loaded into a glyph slot through @FT_Load_Glyph.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @input:
+ * matrix ::
+ * A pointer to the transformation's 2x2 matrix. Use `NULL` for the
+ * identity matrix.
+ * delta ::
+ * A pointer to the translation vector. Use `NULL` for the null vector.
+ *
+ * @note:
+ * The transformation is only applied to scalable image formats after the
+ * glyph has been loaded. It means that hinting is unaltered by the
+ * transformation and is performed on the character size given in the
+ * last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes.
+ *
+ * Note that this also transforms the `face.glyph.advance` field, but
+ * **not** the values in `face.glyph.metrics`.
+ */
FT_EXPORT( void )
FT_Set_Transform( FT_Face face,
FT_Matrix* matrix,
FT_Vector* delta );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Render_Mode */
- /* */
- /* <Description> */
- /* Render modes supported by FreeType~2. Each mode corresponds to a */
- /* specific type of scanline conversion performed on the outline. */
- /* */
- /* For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode' */
- /* field in the @FT_GlyphSlotRec structure gives the format of the */
- /* returned bitmap. */
- /* */
- /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, */
- /* indicating pixel coverage. Use linear alpha blending and gamma */
- /* correction to correctly render non-monochrome glyph bitmaps onto a */
- /* surface; see @FT_Render_Glyph. */
- /* */
- /* <Values> */
- /* FT_RENDER_MODE_NORMAL :: */
- /* Default render mode; it corresponds to 8-bit anti-aliased */
- /* bitmaps. */
- /* */
- /* FT_RENDER_MODE_LIGHT :: */
- /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */
- /* defined as a separate value because render modes are also used */
- /* indirectly to define hinting algorithm selectors. See */
- /* @FT_LOAD_TARGET_XXX for details. */
- /* */
- /* FT_RENDER_MODE_MONO :: */
- /* This mode corresponds to 1-bit bitmaps (with 2~levels of */
- /* opacity). */
- /* */
- /* FT_RENDER_MODE_LCD :: */
- /* This mode corresponds to horizontal RGB and BGR subpixel */
- /* 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 subpixel 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> */
- /* Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your */
- /* `ftoption.h', which enables patented ClearType-style rendering, */
- /* the LCD-optimized glyph bitmaps should be filtered to reduce color */
- /* fringes inherent to this technology. You can either set up LCD */
- /* filtering with @FT_Library_SetLcdFilter or @FT_Face_Properties, */
- /* or do the filtering yourself. The default FreeType LCD rendering */
- /* technology does not require filtering. */
- /* */
- /* The selected render mode only affects vector glyphs of a font. */
- /* Embedded bitmaps often have a different pixel mode like */
- /* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform */
- /* them into 8-bit pixmaps. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Render_Mode
+ *
+ * @description:
+ * Render modes supported by FreeType~2. Each mode corresponds to a
+ * specific type of scanline conversion performed on the outline.
+ *
+ * For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode` field
+ * in the @FT_GlyphSlotRec structure gives the format of the returned
+ * bitmap.
+ *
+ * All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity,
+ * indicating pixel coverage. Use linear alpha blending and gamma
+ * correction to correctly render non-monochrome glyph bitmaps onto a
+ * surface; see @FT_Render_Glyph.
+ *
+ * @values:
+ * FT_RENDER_MODE_NORMAL ::
+ * Default render mode; it corresponds to 8-bit anti-aliased bitmaps.
+ *
+ * FT_RENDER_MODE_LIGHT ::
+ * This is equivalent to @FT_RENDER_MODE_NORMAL. It is only defined as
+ * a separate value because render modes are also used indirectly to
+ * define hinting algorithm selectors. See @FT_LOAD_TARGET_XXX for
+ * details.
+ *
+ * FT_RENDER_MODE_MONO ::
+ * This mode corresponds to 1-bit bitmaps (with 2~levels of opacity).
+ *
+ * FT_RENDER_MODE_LCD ::
+ * This mode corresponds to horizontal RGB and BGR subpixel 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 subpixel 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:
+ * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
+ * `ftoption.h`, which enables patented ClearType-style rendering, the
+ * LCD-optimized glyph bitmaps should be filtered to reduce color fringes
+ * inherent to this technology. You can either set up LCD filtering with
+ * @FT_Library_SetLcdFilter or @FT_Face_Properties, or do the filtering
+ * yourself. The default FreeType LCD rendering technology does not
+ * require filtering.
+ *
+ * The selected render mode only affects vector glyphs of a font.
+ * Embedded bitmaps often have a different pixel mode like
+ * @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them
+ * into 8-bit pixmaps.
+ */
typedef enum FT_Render_Mode_
{
FT_RENDER_MODE_NORMAL = 0,
@@ -3248,147 +3272,149 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `FT_Render_Mode' values instead */
+ /* `FT_Render_Mode` values instead */
#define ft_render_mode_normal FT_RENDER_MODE_NORMAL
#define ft_render_mode_mono FT_RENDER_MODE_MONO
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Render_Glyph */
- /* */
- /* <Description> */
- /* Convert a given glyph image to a bitmap. It does so by inspecting */
- /* the glyph image format, finding the relevant renderer, and */
- /* invoking it. */
- /* */
- /* <InOut> */
- /* slot :: A handle to the glyph slot containing the image to */
- /* convert. */
- /* */
- /* <Input> */
- /* render_mode :: The render mode used to render the glyph image into */
- /* a bitmap. See @FT_Render_Mode for a list of */
- /* possible values. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* To get meaningful results, font scaling values must be set with */
- /* functions like @FT_Set_Char_Size before calling `FT_Render_Glyph'. */
- /* */
- /* When FreeType outputs a bitmap of a glyph, it really outputs an */
- /* alpha coverage map. If a pixel is completely covered by a */
- /* filled-in outline, the bitmap contains 0xFF at that pixel, meaning */
- /* that 0xFF/0xFF fraction of that pixel is covered, meaning the */
- /* pixel is 100% black (or 0% bright). If a pixel is only 50% */
- /* covered (value 0x80), the pixel is made 50% black (50% bright or a */
- /* middle shade of grey). 0% covered means 0% black (100% bright or */
- /* white). */
- /* */
- /* On high-DPI screens like on smartphones and tablets, the pixels */
- /* are so small that their chance of being completely covered and */
- /* therefore completely black are fairly good. On the low-DPI */
- /* screens, however, the situation is different. The pixels are too */
- /* large for most of the details of a glyph and shades of gray are */
- /* the norm rather than the exception. */
- /* */
- /* This is relevant because all our screens have a second problem: */
- /* they are not linear. 1~+~1 is not~2. Twice the value does not */
- /* result in twice the brightness. When a pixel is only 50% covered, */
- /* the coverage map says 50% black, and this translates to a pixel */
- /* value of 128 when you use 8~bits per channel (0-255). However, */
- /* this does not translate to 50% brightness for that pixel on our */
- /* sRGB and gamma~2.2 screens. Due to their non-linearity, they */
- /* dwell longer in the darks and only a pixel value of about 186 */
- /* results in 50% brightness -- 128 ends up too dark on both bright */
- /* and dark backgrounds. The net result is that dark text looks */
- /* burnt-out, pixely and blotchy on bright background, bright text */
- /* too frail on dark backgrounds, and colored text on colored */
- /* background (for example, red on green) seems to have dark halos or */
- /* `dirt' around it. The situation is especially ugly for diagonal */
- /* stems like in `w' glyph shapes where the quality of FreeType's */
- /* anti-aliasing depends on the correct display of grays. On */
- /* high-DPI screens where smaller, fully black pixels reign supreme, */
- /* this doesn't matter, but on our low-DPI screens with all the gray */
- /* shades, it does. 0% and 100% brightness are the same things in */
- /* linear and non-linear space, just all the shades in-between */
- /* aren't. */
- /* */
- /* The blending function for placing text over a background is */
- /* */
- /* { */
- /* dst = alpha * src + (1 - alpha) * dst , */
- /* } */
- /* */
- /* which is known as the OVER operator. */
- /* */
- /* To correctly composite an antialiased pixel of a glyph onto a */
- /* surface, */
- /* */
- /* 1. take the foreground and background colors (e.g., in sRGB space) */
- /* and apply gamma to get them in a linear space, */
- /* */
- /* 2. use OVER to blend the two linear colors using the glyph pixel */
- /* as the alpha value (remember, the glyph bitmap is an alpha */
- /* coverage bitmap), and */
- /* */
- /* 3. apply inverse gamma to the blended pixel and write it back to */
- /* the image. */
- /* */
- /* Internal testing at Adobe found that a target inverse gamma of~1.8 */
- /* for step~3 gives good results across a wide range of displays with */
- /* an sRGB gamma curve or a similar one. */
- /* */
- /* This process can cost performance. There is an approximation that */
- /* does not need to know about the background color; see */
- /* https://bel.fi/alankila/lcd/ and */
- /* https://bel.fi/alankila/lcd/alpcor.html for details. */
- /* */
- /* *ATTENTION*: Linear blending is even more important when dealing */
- /* with subpixel-rendered glyphs to prevent color-fringing! A */
- /* subpixel-rendered glyph must first be filtered with a filter that */
- /* gives equal weight to the three color primaries and does not */
- /* exceed a sum of 0x100, see section @lcd_filtering. Then the */
- /* only difference to gray linear blending is that subpixel-rendered */
- /* linear blending is done 3~times per pixel: red foreground subpixel */
- /* to red background subpixel and so on for green and blue. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Render_Glyph
+ *
+ * @description:
+ * Convert a given glyph image to a bitmap. It does so by inspecting the
+ * glyph image format, finding the relevant renderer, and invoking it.
+ *
+ * @inout:
+ * slot ::
+ * A handle to the glyph slot containing the image to convert.
+ *
+ * @input:
+ * render_mode ::
+ * The render mode used to render the glyph image into a bitmap. See
+ * @FT_Render_Mode for a list of possible values.
+ *
+ * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph
+ * with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default
+ * blending of colored glyph layers associated with the current glyph
+ * slot (provided the font contains such layers) instead of rendering
+ * the glyph slot's outline. This is an experimental feature; see
+ * @FT_LOAD_COLOR for more information.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * To get meaningful results, font scaling values must be set with
+ * functions like @FT_Set_Char_Size before calling `FT_Render_Glyph`.
+ *
+ * When FreeType outputs a bitmap of a glyph, it really outputs an alpha
+ * coverage map. If a pixel is completely covered by a filled-in
+ * outline, the bitmap contains 0xFF at that pixel, meaning that
+ * 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100%
+ * black (or 0% bright). If a pixel is only 50% covered (value 0x80),
+ * the pixel is made 50% black (50% bright or a middle shade of grey).
+ * 0% covered means 0% black (100% bright or white).
+ *
+ * On high-DPI screens like on smartphones and tablets, the pixels are so
+ * small that their chance of being completely covered and therefore
+ * completely black are fairly good. On the low-DPI screens, however,
+ * the situation is different. The pixels are too large for most of the
+ * details of a glyph and shades of gray are the norm rather than the
+ * exception.
+ *
+ * This is relevant because all our screens have a second problem: they
+ * are not linear. 1~+~1 is not~2. Twice the value does not result in
+ * twice the brightness. When a pixel is only 50% covered, the coverage
+ * map says 50% black, and this translates to a pixel value of 128 when
+ * you use 8~bits per channel (0-255). However, this does not translate
+ * to 50% brightness for that pixel on our sRGB and gamma~2.2 screens.
+ * Due to their non-linearity, they dwell longer in the darks and only a
+ * pixel value of about 186 results in 50% brightness -- 128 ends up too
+ * dark on both bright and dark backgrounds. The net result is that dark
+ * text looks burnt-out, pixely and blotchy on bright background, bright
+ * text too frail on dark backgrounds, and colored text on colored
+ * background (for example, red on green) seems to have dark halos or
+ * 'dirt' around it. The situation is especially ugly for diagonal stems
+ * like in 'w' glyph shapes where the quality of FreeType's anti-aliasing
+ * depends on the correct display of grays. On high-DPI screens where
+ * smaller, fully black pixels reign supreme, this doesn't matter, but on
+ * our low-DPI screens with all the gray shades, it does. 0% and 100%
+ * brightness are the same things in linear and non-linear space, just
+ * all the shades in-between aren't.
+ *
+ * The blending function for placing text over a background is
+ *
+ * ```
+ * dst = alpha * src + (1 - alpha) * dst ,
+ * ```
+ *
+ * which is known as the OVER operator.
+ *
+ * To correctly composite an antialiased pixel of a glyph onto a surface,
+ *
+ * 1. take the foreground and background colors (e.g., in sRGB space)
+ * and apply gamma to get them in a linear space,
+ *
+ * 2. use OVER to blend the two linear colors using the glyph pixel
+ * as the alpha value (remember, the glyph bitmap is an alpha coverage
+ * bitmap), and
+ *
+ * 3. apply inverse gamma to the blended pixel and write it back to
+ * the image.
+ *
+ * Internal testing at Adobe found that a target inverse gamma of~1.8 for
+ * step~3 gives good results across a wide range of displays with an sRGB
+ * gamma curve or a similar one.
+ *
+ * This process can cost performance. There is an approximation that
+ * does not need to know about the background color; see
+ * https://bel.fi/alankila/lcd/ and
+ * https://bel.fi/alankila/lcd/alpcor.html for details.
+ *
+ * **ATTENTION**: Linear blending is even more important when dealing
+ * with subpixel-rendered glyphs to prevent color-fringing! A
+ * subpixel-rendered glyph must first be filtered with a filter that
+ * gives equal weight to the three color primaries and does not exceed a
+ * sum of 0x100, see section @lcd_rendering. Then the only difference to
+ * gray linear blending is that subpixel-rendered linear blending is done
+ * 3~times per pixel: red foreground subpixel to red background subpixel
+ * and so on for green and blue.
+ */
FT_EXPORT( FT_Error )
FT_Render_Glyph( FT_GlyphSlot slot,
FT_Render_Mode render_mode );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Kerning_Mode */
- /* */
- /* <Description> */
- /* An enumeration to specify the format of kerning values returned by */
- /* @FT_Get_Kerning. */
- /* */
- /* <Values> */
- /* FT_KERNING_DEFAULT :: Return grid-fitted kerning distances in */
- /* 26.6 fractional pixels. */
- /* */
- /* FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in */
- /* 26.6 fractional pixels. */
- /* */
- /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */
- /* units. */
- /* */
- /* <Note> */
- /* FT_KERNING_DEFAULT returns full pixel values; it also makes */
- /* FreeType heuristically scale down kerning distances at small ppem */
- /* values so that they don't become too big. */
- /* */
- /* Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current */
- /* horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to */
- /* convert font units to pixels. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Kerning_Mode
+ *
+ * @description:
+ * An enumeration to specify the format of kerning values returned by
+ * @FT_Get_Kerning.
+ *
+ * @values:
+ * FT_KERNING_DEFAULT ::
+ * Return grid-fitted kerning distances in 26.6 fractional pixels.
+ *
+ * FT_KERNING_UNFITTED ::
+ * Return un-grid-fitted kerning distances in 26.6 fractional pixels.
+ *
+ * FT_KERNING_UNSCALED ::
+ * Return the kerning vector in original font units.
+ *
+ * @note:
+ * `FT_KERNING_DEFAULT` returns full pixel values; it also makes FreeType
+ * heuristically scale down kerning distances at small ppem values so
+ * that they don't become too big.
+ *
+ * Both `FT_KERNING_DEFAULT` and `FT_KERNING_UNFITTED` use the current
+ * horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to
+ * convert font units to pixels.
+ */
typedef enum FT_Kerning_Mode_
{
FT_KERNING_DEFAULT = 0,
@@ -3399,50 +3425,53 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `FT_Kerning_Mode' values instead */
+ /* `FT_Kerning_Mode` values instead */
#define ft_kerning_default FT_KERNING_DEFAULT
#define ft_kerning_unfitted FT_KERNING_UNFITTED
#define ft_kerning_unscaled FT_KERNING_UNSCALED
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Kerning */
- /* */
- /* <Description> */
- /* Return the kerning vector between two glyphs of the same face. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* left_glyph :: The index of the left glyph in the kern pair. */
- /* */
- /* right_glyph :: The index of the right glyph in the kern pair. */
- /* */
- /* kern_mode :: See @FT_Kerning_Mode for more information. */
- /* Determines the scale and dimension of the returned */
- /* kerning vector. */
- /* */
- /* <Output> */
- /* akerning :: The kerning vector. This is either in font units, */
- /* fractional pixels (26.6 format), or pixels for */
- /* scalable formats, and in pixels for fixed-sizes */
- /* formats. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Only horizontal layouts (left-to-right & right-to-left) are */
- /* supported by this method. Other layouts, or more sophisticated */
- /* kernings, are out of the scope of this API function -- they can be */
- /* implemented through format-specific interfaces. */
- /* */
- /* Kerning for OpenType fonts implemented in a `GPOS' table is not */
- /* supported; use @FT_HAS_KERNING to find out whether a font has data */
- /* that can be extracted with `FT_Get_Kerning'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Kerning
+ *
+ * @description:
+ * Return the kerning vector between two glyphs of the same face.
+ *
+ * @input:
+ * face ::
+ * A handle to a source face object.
+ *
+ * left_glyph ::
+ * The index of the left glyph in the kern pair.
+ *
+ * right_glyph ::
+ * The index of the right glyph in the kern pair.
+ *
+ * kern_mode ::
+ * See @FT_Kerning_Mode for more information. Determines the scale and
+ * dimension of the returned kerning vector.
+ *
+ * @output:
+ * akerning ::
+ * The kerning vector. This is either in font units, fractional pixels
+ * (26.6 format), or pixels for scalable formats, and in pixels for
+ * fixed-sizes formats.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Only horizontal layouts (left-to-right & right-to-left) are supported
+ * by this method. Other layouts, or more sophisticated kernings, are
+ * out of the scope of this API function -- they can be implemented
+ * through format-specific interfaces.
+ *
+ * Kerning for OpenType fonts implemented in a 'GPOS' table is not
+ * supported; use @FT_HAS_KERNING to find out whether a font has data
+ * that can be extracted with `FT_Get_Kerning`.
+ */
FT_EXPORT( FT_Error )
FT_Get_Kerning( FT_Face face,
FT_UInt left_glyph,
@@ -3451,39 +3480,42 @@ FT_BEGIN_HEADER
FT_Vector *akerning );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Track_Kerning */
- /* */
- /* <Description> */
- /* Return the track kerning for a given face object at a given size. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* point_size :: The point size in 16.16 fractional points. */
- /* */
- /* degree :: The degree of tightness. Increasingly negative */
- /* values represent tighter track kerning, while */
- /* increasingly positive values represent looser track */
- /* kerning. Value zero means no track kerning. */
- /* */
- /* <Output> */
- /* akerning :: The kerning in 16.16 fractional points, to be */
- /* uniformly applied between all glyphs. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Currently, only the Type~1 font driver supports track kerning, */
- /* using data from AFM files (if attached with @FT_Attach_File or */
- /* @FT_Attach_Stream). */
- /* */
- /* Only very few AFM files come with track kerning data; please refer */
- /* to Adobe's AFM specification for more details. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Track_Kerning
+ *
+ * @description:
+ * Return the track kerning for a given face object at a given size.
+ *
+ * @input:
+ * face ::
+ * A handle to a source face object.
+ *
+ * point_size ::
+ * The point size in 16.16 fractional points.
+ *
+ * degree ::
+ * The degree of tightness. Increasingly negative values represent
+ * tighter track kerning, while increasingly positive values represent
+ * looser track kerning. Value zero means no track kerning.
+ *
+ * @output:
+ * akerning ::
+ * The kerning in 16.16 fractional points, to be uniformly applied
+ * between all glyphs.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Currently, only the Type~1 font driver supports track kerning, using
+ * data from AFM files (if attached with @FT_Attach_File or
+ * @FT_Attach_Stream).
+ *
+ * Only very few AFM files come with track kerning data; please refer to
+ * Adobe's AFM specification for more details.
+ */
FT_EXPORT( FT_Error )
FT_Get_Track_Kerning( FT_Face face,
FT_Fixed point_size,
@@ -3491,45 +3523,46 @@ FT_BEGIN_HEADER
FT_Fixed* akerning );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Glyph_Name */
- /* */
- /* <Description> */
- /* Retrieve the ASCII name of a given glyph in a face. This only */
- /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* glyph_index :: The glyph index. */
- /* */
- /* buffer_max :: The maximum number of bytes available in the */
- /* buffer. */
- /* */
- /* <Output> */
- /* buffer :: A pointer to a target buffer where the name is */
- /* copied to. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* An error is returned if the face doesn't provide glyph names or if */
- /* the glyph index is invalid. In all cases of failure, the first */
- /* byte of `buffer' is set to~0 to indicate an empty name. */
- /* */
- /* The glyph name is truncated to fit within the buffer if it is too */
- /* long. The returned string is always zero-terminated. */
- /* */
- /* Be aware that FreeType reorders glyph indices internally so that */
- /* glyph index~0 always corresponds to the `missing glyph' (called */
- /* `.notdef'). */
- /* */
- /* This function always returns an error if the config macro */
- /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoption.h'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Glyph_Name
+ *
+ * @description:
+ * Retrieve the ASCII name of a given glyph in a face. This only works
+ * for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.
+ *
+ * @input:
+ * face ::
+ * A handle to a source face object.
+ *
+ * glyph_index ::
+ * The glyph index.
+ *
+ * buffer_max ::
+ * The maximum number of bytes available in the buffer.
+ *
+ * @output:
+ * buffer ::
+ * A pointer to a target buffer where the name is copied to.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * An error is returned if the face doesn't provide glyph names or if the
+ * glyph index is invalid. In all cases of failure, the first byte of
+ * `buffer` is set to~0 to indicate an empty name.
+ *
+ * The glyph name is truncated to fit within the buffer if it is too
+ * long. The returned string is always zero-terminated.
+ *
+ * Be aware that FreeType reorders glyph indices internally so that glyph
+ * index~0 always corresponds to the 'missing glyph' (called '.notdef').
+ *
+ * This function always returns an error if the config macro
+ * `FT_CONFIG_OPTION_NO_GLYPH_NAMES` is not defined in `ftoption.h`.
+ */
FT_EXPORT( FT_Error )
FT_Get_Glyph_Name( FT_Face face,
FT_UInt glyph_index,
@@ -3537,107 +3570,109 @@ FT_BEGIN_HEADER
FT_UInt buffer_max );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Postscript_Name */
- /* */
- /* <Description> */
- /* Retrieve the ASCII PostScript name of a given face, if available. */
- /* This only works with PostScript, TrueType, and OpenType fonts. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* A pointer to the face's PostScript name. NULL if unavailable. */
- /* */
- /* <Note> */
- /* The returned pointer is owned by the face and is destroyed with */
- /* it. */
- /* */
- /* For variation fonts, this string changes if you select a different */
- /* instance, and you have to call `FT_Get_PostScript_Name' again to */
- /* retrieve it. FreeType follows Adobe TechNote #5902, `Generating */
- /* PostScript Names for Fonts Using OpenType Font Variations'. */
- /* */
- /* https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html */
- /* */
- /* [Since 2.9] Special PostScript names for named instances are only */
- /* returned if the named instance is set with @FT_Set_Named_Instance */
- /* (and the font has corresponding entries in its `fvar' table). If */
- /* @FT_IS_VARIATION returns true, the algorithmically derived */
- /* PostScript name is provided, not looking up special entries for */
- /* named instances. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Postscript_Name
+ *
+ * @description:
+ * Retrieve the ASCII PostScript name of a given face, if available.
+ * This only works with PostScript, TrueType, and OpenType fonts.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @return:
+ * A pointer to the face's PostScript name. `NULL` if unavailable.
+ *
+ * @note:
+ * The returned pointer is owned by the face and is destroyed with it.
+ *
+ * For variation fonts, this string changes if you select a different
+ * instance, and you have to call `FT_Get_PostScript_Name` again to
+ * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating
+ * PostScript Names for Fonts Using OpenType Font Variations'.
+ *
+ * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html
+ *
+ * [Since 2.9] Special PostScript names for named instances are only
+ * returned if the named instance is set with @FT_Set_Named_Instance (and
+ * the font has corresponding entries in its 'fvar' table). If
+ * @FT_IS_VARIATION returns true, the algorithmically derived PostScript
+ * name is provided, not looking up special entries for named instances.
+ */
FT_EXPORT( const char* )
FT_Get_Postscript_Name( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Select_Charmap */
- /* */
- /* <Description> */
- /* Select a given charmap by its encoding tag (as listed in */
- /* `freetype.h'). */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* encoding :: A handle to the selected encoding. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function returns an error if no charmap in the face */
- /* corresponds to the encoding queried here. */
- /* */
- /* Because many fonts contain more than a single cmap for Unicode */
- /* encoding, this function has some special code to select the one */
- /* that covers Unicode best (`best' in the sense that a UCS-4 cmap is */
- /* preferred to a UCS-2 cmap). It is thus preferable to */
- /* @FT_Set_Charmap in this case. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Select_Charmap
+ *
+ * @description:
+ * Select a given charmap by its encoding tag (as listed in
+ * `freetype.h`).
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @input:
+ * encoding ::
+ * A handle to the selected encoding.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function returns an error if no charmap in the face corresponds
+ * to the encoding queried here.
+ *
+ * Because many fonts contain more than a single cmap for Unicode
+ * encoding, this function has some special code to select the one that
+ * covers Unicode best ('best' in the sense that a UCS-4 cmap is
+ * preferred to a UCS-2 cmap). It is thus preferable to @FT_Set_Charmap
+ * in this case.
+ */
FT_EXPORT( FT_Error )
FT_Select_Charmap( FT_Face face,
FT_Encoding encoding );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Charmap */
- /* */
- /* <Description> */
- /* Select a given charmap for character code to glyph index mapping. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* charmap :: A handle to the selected charmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function returns an error if the charmap is not part of */
- /* the face (i.e., if it is not listed in the `face->charmaps' */
- /* table). */
- /* */
- /* It also fails if an OpenType type~14 charmap is selected (which */
- /* doesn't map character codes to glyph indices at all). */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Charmap
+ *
+ * @description:
+ * Select a given charmap for character code to glyph index mapping.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @input:
+ * charmap ::
+ * A handle to the selected charmap.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function returns an error if the charmap is not part of the face
+ * (i.e., if it is not listed in the `face->charmaps` table).
+ *
+ * It also fails if an OpenType type~14 charmap is selected (which
+ * doesn't map character codes to glyph indices at all).
+ */
FT_EXPORT( FT_Error )
FT_Set_Charmap( FT_Face face,
FT_CharMap charmap );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_Charmap_Index
@@ -3651,139 +3686,143 @@ FT_BEGIN_HEADER
*
* @return:
* The index into the array of character maps within the face to which
- * `charmap' belongs. If an error occurs, -1 is returned.
+ * `charmap` belongs. If an error occurs, -1 is returned.
*
*/
FT_EXPORT( FT_Int )
FT_Get_Charmap_Index( FT_CharMap charmap );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Char_Index */
- /* */
- /* <Description> */
- /* Return the glyph index of a given character code. This function */
- /* uses the currently selected charmap to do the mapping. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* charcode :: The character code. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means `undefined character code'. */
- /* */
- /* <Note> */
- /* If you use FreeType to manipulate the contents of font files */
- /* directly, be aware that the glyph index returned by this function */
- /* doesn't always correspond to the internal indices used within the */
- /* file. This is done to ensure that value~0 always corresponds to */
- /* the `missing glyph'. If the first glyph is not named `.notdef', */
- /* then for Type~1 and Type~42 fonts, `.notdef' will be moved into */
- /* the glyph ID~0 position, and whatever was there will be moved to */
- /* the position `.notdef' had. For Type~1 fonts, if there is no */
- /* `.notdef' glyph at all, then one will be created at index~0 and */
- /* whatever was there will be moved to the last index -- Type~42 */
- /* fonts are considered invalid under this condition. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Char_Index
+ *
+ * @description:
+ * Return the glyph index of a given character code. This function uses
+ * the currently selected charmap to do the mapping.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * charcode ::
+ * The character code.
+ *
+ * @return:
+ * The glyph index. 0~means 'undefined character code'.
+ *
+ * @note:
+ * If you use FreeType to manipulate the contents of font files directly,
+ * be aware that the glyph index returned by this function doesn't always
+ * correspond to the internal indices used within the file. This is done
+ * to ensure that value~0 always corresponds to the 'missing glyph'. If
+ * the first glyph is not named '.notdef', then for Type~1 and Type~42
+ * fonts, '.notdef' will be moved into the glyph ID~0 position, and
+ * whatever was there will be moved to the position '.notdef' had. For
+ * Type~1 fonts, if there is no '.notdef' glyph at all, then one will be
+ * created at index~0 and whatever was there will be moved to the last
+ * index -- Type~42 fonts are considered invalid under this condition.
+ */
FT_EXPORT( FT_UInt )
FT_Get_Char_Index( FT_Face face,
FT_ULong charcode );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_First_Char */
- /* */
- /* <Description> */
- /* Return the first character code in the current charmap of a given */
- /* face, together with its corresponding glyph index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Output> */
- /* agindex :: Glyph index of first character code. 0~if charmap is */
- /* empty. */
- /* */
- /* <Return> */
- /* The charmap's first character code. */
- /* */
- /* <Note> */
- /* You should use this function together with @FT_Get_Next_Char to */
- /* parse all character codes available in a given charmap. The code */
- /* should look like this: */
- /* */
- /* { */
- /* FT_ULong charcode; */
- /* FT_UInt gindex; */
- /* */
- /* */
- /* charcode = FT_Get_First_Char( face, &gindex ); */
- /* while ( gindex != 0 ) */
- /* { */
- /* ... do something with (charcode,gindex) pair ... */
- /* */
- /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */
- /* } */
- /* } */
- /* */
- /* Be aware that character codes can have values up to 0xFFFFFFFF; */
- /* this might happen for non-Unicode or malformed cmaps. However, */
- /* even with regular Unicode encoding, so-called `last resort fonts' */
- /* (using SFNT cmap format 13, see function @FT_Get_CMap_Format) */
- /* normally have entries for all Unicode characters up to 0x1FFFFF, */
- /* which can cause *a lot* of iterations. */
- /* */
- /* Note that `*agindex' is set to~0 if the charmap is empty. The */
- /* result itself can be~0 in two cases: if the charmap is empty or */
- /* if the value~0 is the first valid character code. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_First_Char
+ *
+ * @description:
+ * Return the first character code in the current charmap of a given
+ * face, together with its corresponding glyph index.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @output:
+ * agindex ::
+ * Glyph index of first character code. 0~if charmap is empty.
+ *
+ * @return:
+ * The charmap's first character code.
+ *
+ * @note:
+ * You should use this function together with @FT_Get_Next_Char to parse
+ * all character codes available in a given charmap. The code should
+ * look like this:
+ *
+ * ```
+ * FT_ULong charcode;
+ * FT_UInt gindex;
+ *
+ *
+ * charcode = FT_Get_First_Char( face, &gindex );
+ * while ( gindex != 0 )
+ * {
+ * ... do something with (charcode,gindex) pair ...
+ *
+ * charcode = FT_Get_Next_Char( face, charcode, &gindex );
+ * }
+ * ```
+ *
+ * Be aware that character codes can have values up to 0xFFFFFFFF; this
+ * might happen for non-Unicode or malformed cmaps. However, even with
+ * regular Unicode encoding, so-called 'last resort fonts' (using SFNT
+ * cmap format 13, see function @FT_Get_CMap_Format) normally have
+ * entries for all Unicode characters up to 0x1FFFFF, which can cause *a
+ * lot* of iterations.
+ *
+ * Note that `*agindex` is set to~0 if the charmap is empty. The result
+ * itself can be~0 in two cases: if the charmap is empty or if the
+ * value~0 is the first valid character code.
+ */
FT_EXPORT( FT_ULong )
FT_Get_First_Char( FT_Face face,
FT_UInt *agindex );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Next_Char */
- /* */
- /* <Description> */
- /* Return the next character code in the current charmap of a given */
- /* face following the value `char_code', as well as the corresponding */
- /* glyph index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* char_code :: The starting character code. */
- /* */
- /* <Output> */
- /* agindex :: Glyph index of next character code. 0~if charmap */
- /* is empty. */
- /* */
- /* <Return> */
- /* The charmap's next character code. */
- /* */
- /* <Note> */
- /* You should use this function with @FT_Get_First_Char to walk */
- /* over all character codes available in a given charmap. See the */
- /* note for that function for a simple code example. */
- /* */
- /* Note that `*agindex' is set to~0 when there are no more codes in */
- /* the charmap. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Next_Char
+ *
+ * @description:
+ * Return the next character code in the current charmap of a given face
+ * following the value `char_code`, as well as the corresponding glyph
+ * index.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * char_code ::
+ * The starting character code.
+ *
+ * @output:
+ * agindex ::
+ * Glyph index of next character code. 0~if charmap is empty.
+ *
+ * @return:
+ * The charmap's next character code.
+ *
+ * @note:
+ * You should use this function with @FT_Get_First_Char to walk over all
+ * character codes available in a given charmap. See the note for that
+ * function for a simple code example.
+ *
+ * Note that `*agindex` is set to~0 when there are no more codes in the
+ * charmap.
+ */
FT_EXPORT( FT_ULong )
FT_Get_Next_Char( FT_Face face,
FT_ULong char_code,
FT_UInt *agindex );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Face_Properties
@@ -3791,27 +3830,26 @@ FT_BEGIN_HEADER
* @description:
* Set or override certain (library or module-wide) properties on a
* face-by-face basis. Useful for finer-grained control and avoiding
- * locks on shared structures (threads can modify their own faces as
- * they see fit).
+ * locks on shared structures (threads can modify their own faces as they
+ * see fit).
*
- * Contrary to @FT_Property_Set, this function uses @FT_Parameter so
- * that you can pass multiple properties to the target face in one call.
- * Note that only a subset of the available properties can be
- * controlled.
+ * Contrary to @FT_Property_Set, this function uses @FT_Parameter so that
+ * you can pass multiple properties to the target face in one call. Note
+ * that only a subset of the available properties can be controlled.
*
* * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the
- * property `no-stem-darkening' provided by the `autofit', `cff',
- * `type1', and `t1cid' modules; see @no-stem-darkening).
+ * property `no-stem-darkening` provided by the 'autofit', 'cff',
+ * 'type1', and 't1cid' modules; see @no-stem-darkening).
*
* * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding
* to function @FT_Library_SetLcdFilterWeights).
*
* * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID
- * `random' operator, corresponding to the `random-seed' property
- * provided by the `cff', `type1', and `t1cid' modules; see
+ * 'random' operator, corresponding to the `random-seed` property
+ * provided by the 'cff', 'type1', and 't1cid' modules; see
* @random-seed).
*
- * Pass NULL as `data' in @FT_Parameter for a given tag to reset the
+ * Pass `NULL` as `data` in @FT_Parameter for a given tag to reset the
* option and use the library or module default again.
*
* @input:
@@ -3822,17 +3860,17 @@ FT_BEGIN_HEADER
* The number of properties that follow.
*
* properties ::
- * A handle to an @FT_Parameter array with `num_properties' elements.
+ * A handle to an @FT_Parameter array with `num_properties` elements.
*
* @return:
* FreeType error code. 0~means success.
*
- * @note:
- * Here an example that sets three properties. You must define
- * FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples
+ * @example:
+ * Here is an example that sets three properties. You must define
+ * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` to make the LCD filter examples
* work.
*
- * {
+ * ```
* FT_Parameter property1;
* FT_Bool darken_stems = 1;
*
@@ -3858,11 +3896,11 @@ FT_BEGIN_HEADER
* property3.data = &random_seed;
*
* FT_Face_Properties( face, 3, properties );
- * }
+ * ```
*
* The next example resets a single property to its default value.
*
- * {
+ * ```
* FT_Parameter property;
*
*
@@ -3870,7 +3908,7 @@ FT_BEGIN_HEADER
* property.data = NULL;
*
* FT_Face_Properties( face, 1, &property );
- * }
+ * ```
*
* @since:
* 2.8
@@ -3882,37 +3920,40 @@ FT_BEGIN_HEADER
FT_Parameter* properties );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Name_Index */
- /* */
- /* <Description> */
- /* Return the glyph index of a given glyph name. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* glyph_name :: The glyph name. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means `undefined character code'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Name_Index
+ *
+ * @description:
+ * Return the glyph index of a given glyph name.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * glyph_name ::
+ * The glyph name.
+ *
+ * @return:
+ * The glyph index. 0~means 'undefined character code'.
+ */
FT_EXPORT( FT_UInt )
- FT_Get_Name_Index( FT_Face face,
- FT_String* glyph_name );
+ FT_Get_Name_Index( FT_Face face,
+ const FT_String* glyph_name );
- /*************************************************************************
+ /**************************************************************************
*
- * @macro:
+ * @enum:
* FT_SUBGLYPH_FLAG_XXX
*
* @description:
- * A list of constants describing subglyphs. Please refer to the
- * `glyf' table description in the OpenType specification for the
- * meaning of the various flags (which get synthesized for
- * non-OpenType subglyphs).
+ * A list of constants describing subglyphs. Please refer to the 'glyf'
+ * table description in the OpenType specification for the meaning of the
+ * various flags (which get synthesized for non-OpenType subglyphs).
+ *
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description
*
* @values:
* FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::
@@ -3933,15 +3974,15 @@ FT_BEGIN_HEADER
#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200
- /*************************************************************************
+ /**************************************************************************
*
- * @func:
+ * @function:
* FT_Get_SubGlyph_Info
*
* @description:
* Retrieve a description of a given subglyph. Only use it if
- * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is
- * returned otherwise.
+ * `glyph->format` is @FT_GLYPH_FORMAT_COMPOSITE; an error is returned
+ * otherwise.
*
* @input:
* glyph ::
@@ -3949,7 +3990,7 @@ FT_BEGIN_HEADER
*
* sub_index ::
* The index of the subglyph. Must be less than
- * `glyph->num_subglyphs'.
+ * `glyph->num_subglyphs`.
*
* @output:
* p_index ::
@@ -3971,10 +4012,12 @@ FT_BEGIN_HEADER
* 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
+ * The values of `*p_arg1`, `*p_arg2`, and `*p_transform` must be
+ * interpreted depending on the flags returned in `*p_flags`. See the
* OpenType specification for details.
*
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description
+ *
*/
FT_EXPORT( FT_Error )
FT_Get_SubGlyph_Info( FT_GlyphSlot glyph,
@@ -3986,59 +4029,228 @@ FT_BEGIN_HEADER
FT_Matrix *p_transform );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_FSTYPE_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags used in the `fsType' field of the OS/2 table */
- /* in a TrueType or OpenType font and the `FSType' entry in a */
- /* PostScript font. These bit flags are returned by */
- /* @FT_Get_FSType_Flags; they inform client applications of embedding */
- /* and subsetting restrictions associated with a font. */
- /* */
- /* See */
- /* https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
- /* for more details. */
- /* */
- /* <Values> */
- /* FT_FSTYPE_INSTALLABLE_EMBEDDING :: */
- /* Fonts with no fsType bit set may be embedded and permanently */
- /* installed on the remote system by an application. */
- /* */
- /* FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: */
- /* Fonts that have only this bit set must not be modified, embedded */
- /* or exchanged in any manner without first obtaining permission of */
- /* the font software copyright owner. */
- /* */
- /* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: */
- /* The font may be embedded and temporarily loaded on the remote */
- /* system. Documents containing Preview & Print fonts must be */
- /* opened `read-only'; no edits can be applied to the document. */
- /* */
- /* FT_FSTYPE_EDITABLE_EMBEDDING :: */
- /* The font may be embedded but must only be installed temporarily */
- /* on other systems. In contrast to Preview & Print fonts, */
- /* documents containing editable fonts may be opened for reading, */
- /* editing is permitted, and changes may be saved. */
- /* */
- /* FT_FSTYPE_NO_SUBSETTING :: */
- /* The font may not be subsetted prior to embedding. */
- /* */
- /* FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: */
- /* Only bitmaps contained in the font may be embedded; no outline */
- /* data may be embedded. If there are no bitmaps available in the */
- /* font, then the font is unembeddable. */
- /* */
- /* <Note> */
- /* The flags are ORed together, thus more than a single value can be */
- /* returned. */
- /* */
- /* While the `fsType' flags can indicate that a font may be embedded, */
- /* a license with the font vendor may be separately required to use */
- /* the font in this way. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * layer_management
+ *
+ * @title:
+ * Glyph Layer Management
+ *
+ * @abstract:
+ * Retrieving and manipulating OpenType's 'COLR' table data.
+ *
+ * @description:
+ * The functions described here allow access of colored glyph layer data
+ * in OpenType's 'COLR' tables.
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_LayerIterator
+ *
+ * @description:
+ * This iterator object is needed for @FT_Get_Color_Glyph_Layer.
+ *
+ * @fields:
+ * num_layers ::
+ * The number of glyph layers for the requested glyph index. Will be
+ * set by @FT_Get_Color_Glyph_Layer.
+ *
+ * layer ::
+ * The current layer. Will be set by @FT_Get_Color_Glyph_Layer.
+ *
+ * p ::
+ * An opaque pointer into 'COLR' table data. The caller must set this
+ * to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
+ */
+ typedef struct FT_LayerIterator_
+ {
+ FT_UInt num_layers;
+ FT_UInt layer;
+ FT_Byte* p;
+
+ } FT_LayerIterator;
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Color_Glyph_Layer
+ *
+ * @description:
+ * This is an interface to the 'COLR' table in OpenType fonts to
+ * iteratively retrieve the colored glyph layers associated with the
+ * current glyph slot.
+ *
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/colr
+ *
+ * The glyph layer data for a given glyph index, if present, provides an
+ * alternative, multi-colour glyph representation: Instead of rendering
+ * the outline or bitmap with the given glyph index, glyphs with the
+ * indices and colors returned by this function are rendered layer by
+ * layer.
+ *
+ * The returned elements are ordered in the z~direction from bottom to
+ * top; the 'n'th element should be rendered with the associated palette
+ * color and blended on top of the already rendered layers (elements 0,
+ * 1, ..., n-1).
+ *
+ * @input:
+ * face ::
+ * A handle to the parent face object.
+ *
+ * base_glyph ::
+ * The glyph index the colored glyph layers are associated with.
+ *
+ * @inout:
+ * iterator ::
+ * An @FT_LayerIterator object. For the first call you should set
+ * `iterator->p` to `NULL`. For all following calls, simply use the
+ * same object again.
+ *
+ * @output:
+ * aglyph_index ::
+ * The glyph index of the current layer.
+ *
+ * acolor_index ::
+ * The color index into the font face's color palette of the current
+ * layer. The value 0xFFFF is special; it doesn't reference a palette
+ * entry but indicates that the text foreground color should be used
+ * instead (to be set up by the application outside of FreeType).
+ *
+ * The color palette can be retrieved with @FT_Palette_Select.
+ *
+ * @return:
+ * Value~1 if everything is OK. If there are no more layers (or if there
+ * are no layers at all), value~0 gets returned. In case of an error,
+ * value~0 is returned also.
+ *
+ * @note:
+ * This function is necessary if you want to handle glyph layers by
+ * yourself. In particular, functions that operate with @FT_GlyphRec
+ * objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
+ * to this information.
+ *
+ * Note that @FT_Render_Glyph is able to handle colored glyph layers
+ * automatically if the @FT_LOAD_COLOR flag is passed to a previous call
+ * to @FT_Load_Glyph. [This is an experimental feature.]
+ *
+ * @example:
+ * ```
+ * FT_Color* palette;
+ * FT_LayerIterator iterator;
+ *
+ * FT_Bool have_layers;
+ * FT_UInt layer_glyph_index;
+ * FT_UInt layer_color_index;
+ *
+ *
+ * error = FT_Palette_Select( face, palette_index, &palette );
+ * if ( error )
+ * palette = NULL;
+ *
+ * iterator.p = NULL;
+ * have_layers = FT_Get_Color_Glyph_Layer( face,
+ * glyph_index,
+ * &layer_glyph_index,
+ * &layer_color_index,
+ * &iterator );
+ *
+ * if ( palette && have_layers )
+ * {
+ * do
+ * {
+ * FT_Color layer_color;
+ *
+ *
+ * if ( layer_color_index == 0xFFFF )
+ * layer_color = text_foreground_color;
+ * else
+ * layer_color = palette[layer_color_index];
+ *
+ * // Load and render glyph `layer_glyph_index', then
+ * // blend resulting pixmap (using color `layer_color')
+ * // with previously created pixmaps.
+ *
+ * } while ( FT_Get_Color_Glyph_Layer( face,
+ * glyph_index,
+ * &layer_glyph_index,
+ * &layer_color_index,
+ * &iterator ) );
+ * }
+ * ```
+ */
+ FT_EXPORT( FT_Bool )
+ FT_Get_Color_Glyph_Layer( FT_Face face,
+ FT_UInt base_glyph,
+ FT_UInt *aglyph_index,
+ FT_UInt *acolor_index,
+ FT_LayerIterator* iterator );
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * base_interface
+ *
+ */
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_FSTYPE_XXX
+ *
+ * @description:
+ * A list of bit flags used in the `fsType` field of the OS/2 table in a
+ * TrueType or OpenType font and the `FSType` entry in a PostScript font.
+ * These bit flags are returned by @FT_Get_FSType_Flags; they inform
+ * client applications of embedding and subsetting restrictions
+ * associated with a font.
+ *
+ * See
+ * https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf
+ * for more details.
+ *
+ * @values:
+ * FT_FSTYPE_INSTALLABLE_EMBEDDING ::
+ * Fonts with no fsType bit set may be embedded and permanently
+ * installed on the remote system by an application.
+ *
+ * FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING ::
+ * Fonts that have only this bit set must not be modified, embedded or
+ * exchanged in any manner without first obtaining permission of the
+ * font software copyright owner.
+ *
+ * FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING ::
+ * The font may be embedded and temporarily loaded on the remote
+ * system. Documents containing Preview & Print fonts must be opened
+ * 'read-only'; no edits can be applied to the document.
+ *
+ * FT_FSTYPE_EDITABLE_EMBEDDING ::
+ * The font may be embedded but must only be installed temporarily on
+ * other systems. In contrast to Preview & Print fonts, documents
+ * containing editable fonts may be opened for reading, editing is
+ * permitted, and changes may be saved.
+ *
+ * FT_FSTYPE_NO_SUBSETTING ::
+ * The font may not be subsetted prior to embedding.
+ *
+ * FT_FSTYPE_BITMAP_EMBEDDING_ONLY ::
+ * Only bitmaps contained in the font may be embedded; no outline data
+ * may be embedded. If there are no bitmaps available in the font,
+ * then the font is unembeddable.
+ *
+ * @note:
+ * The flags are ORed together, thus more than a single value can be
+ * returned.
+ *
+ * While the `fsType` flags can indicate that a font may be embedded, a
+ * license with the font vendor may be separately required to use the
+ * font in this way.
+ */
#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000
#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002
#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004
@@ -4047,548 +4259,563 @@ FT_BEGIN_HEADER
#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_FSType_Flags */
- /* */
- /* <Description> */
- /* Return the `fsType' flags for a font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* The `fsType' flags, see @FT_FSTYPE_XXX. */
- /* */
- /* <Note> */
- /* Use this function rather than directly reading the `fs_type' field */
- /* in the @PS_FontInfoRec structure, which is only guaranteed to */
- /* return the correct results for Type~1 fonts. */
- /* */
- /* <Since> */
- /* 2.3.8 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_FSType_Flags
+ *
+ * @description:
+ * Return the `fsType` flags for a font.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @return:
+ * The `fsType` flags, see @FT_FSTYPE_XXX.
+ *
+ * @note:
+ * Use this function rather than directly reading the `fs_type` field in
+ * the @PS_FontInfoRec structure, which is only guaranteed to return the
+ * correct results for Type~1 fonts.
+ *
+ * @since:
+ * 2.3.8
+ */
FT_EXPORT( FT_UShort )
FT_Get_FSType_Flags( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Section> */
- /* glyph_variants */
- /* */
- /* <Title> */
- /* Unicode Variation Sequences */
- /* */
- /* <Abstract> */
- /* The FreeType~2 interface to Unicode Variation Sequences (UVS), */
- /* using the SFNT cmap format~14. */
- /* */
- /* <Description> */
- /* Many characters, especially for CJK scripts, have variant forms. */
- /* They are a sort of grey area somewhere between being totally */
- /* irrelevant and semantically distinct; for this reason, the Unicode */
- /* consortium decided to introduce Variation Sequences (VS), */
- /* consisting of a Unicode base character and a variation selector */
- /* instead of further extending the already huge number of */
- /* characters. */
- /* */
- /* Unicode maintains two different sets, namely `Standardized */
- /* Variation Sequences' and registered `Ideographic Variation */
- /* Sequences' (IVS), collected in the `Ideographic Variation */
- /* Database' (IVD). */
- /* */
- /* https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt */
- /* https://unicode.org/reports/tr37/ */
- /* https://unicode.org/ivd/ */
- /* */
- /* To date (January 2017), the character with the most ideographic */
- /* variations is U+9089, having 32 such IVS. */
- /* */
- /* Three Mongolian Variation Selectors have the values U+180B-U+180D; */
- /* 256 generic Variation Selectors are encoded in the ranges */
- /* U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation */
- /* Selectors from the range U+E0100-U+E01EF only. */
- /* */
- /* A VS consists of the base character value followed by a single */
- /* Variation Selector. For example, to get the first variation of */
- /* U+9089, you have to write the character sequence `U+9089 U+E0100'. */
- /* */
- /* Adobe and MS decided to support both standardized and ideographic */
- /* VS with a new cmap subtable (format~14). It is an odd subtable */
- /* because it is not a mapping of input code points to glyphs, but */
- /* contains lists of all variations supported by the font. */
- /* */
- /* A variation may be either `default' or `non-default' for a given */
- /* font. A default variation is the one you will get for that code */
- /* point if you look it up in the standard Unicode cmap. A */
- /* non-default variation is a different glyph. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * glyph_variants
+ *
+ * @title:
+ * Unicode Variation Sequences
+ *
+ * @abstract:
+ * The FreeType~2 interface to Unicode Variation Sequences (UVS), using
+ * the SFNT cmap format~14.
+ *
+ * @description:
+ * Many characters, especially for CJK scripts, have variant forms. They
+ * are a sort of grey area somewhere between being totally irrelevant and
+ * semantically distinct; for this reason, the Unicode consortium decided
+ * to introduce Variation Sequences (VS), consisting of a Unicode base
+ * character and a variation selector instead of further extending the
+ * already huge number of characters.
+ *
+ * Unicode maintains two different sets, namely 'Standardized Variation
+ * Sequences' and registered 'Ideographic Variation Sequences' (IVS),
+ * collected in the 'Ideographic Variation Database' (IVD).
+ *
+ * https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt
+ * https://unicode.org/reports/tr37/ https://unicode.org/ivd/
+ *
+ * To date (January 2017), the character with the most ideographic
+ * variations is U+9089, having 32 such IVS.
+ *
+ * Three Mongolian Variation Selectors have the values U+180B-U+180D; 256
+ * generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F
+ * and U+E0100-U+E01EF. IVS currently use Variation Selectors from the
+ * range U+E0100-U+E01EF only.
+ *
+ * A VS consists of the base character value followed by a single
+ * Variation Selector. For example, to get the first variation of
+ * U+9089, you have to write the character sequence `U+9089 U+E0100`.
+ *
+ * Adobe and MS decided to support both standardized and ideographic VS
+ * with a new cmap subtable (format~14). It is an odd subtable because
+ * it is not a mapping of input code points to glyphs, but contains lists
+ * of all variations supported by the font.
+ *
+ * A variation may be either 'default' or 'non-default' for a given font.
+ * A default variation is the one you will get for that code point if you
+ * look it up in the standard Unicode cmap. A non-default variation is a
+ * different glyph.
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharVariantIndex */
- /* */
- /* <Description> */
- /* Return the glyph index of a given character code as modified by */
- /* the variation selector. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character code point in Unicode. */
- /* */
- /* variantSelector :: */
- /* The Unicode code point of the variation selector. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means either `undefined character code', or */
- /* `undefined selector code', or `no variation selector cmap */
- /* subtable', or `current CharMap is not Unicode'. */
- /* */
- /* <Note> */
- /* If you use FreeType to manipulate the contents of font files */
- /* directly, be aware that the glyph index returned by this function */
- /* doesn't always correspond to the internal indices used within */
- /* the file. This is done to ensure that value~0 always corresponds */
- /* to the `missing glyph'. */
- /* */
- /* This function is only meaningful if */
- /* a) the font has a variation selector cmap sub table, */
- /* and */
- /* b) the current charmap has a Unicode encoding. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_GetCharVariantIndex
+ *
+ * @description:
+ * Return the glyph index of a given character code as modified by the
+ * variation selector.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * charcode ::
+ * The character code point in Unicode.
+ *
+ * variantSelector ::
+ * The Unicode code point of the variation selector.
+ *
+ * @return:
+ * The glyph index. 0~means either 'undefined character code', or
+ * 'undefined selector code', or 'no variation selector cmap subtable',
+ * or 'current CharMap is not Unicode'.
+ *
+ * @note:
+ * If you use FreeType to manipulate the contents of font files directly,
+ * be aware that the glyph index returned by this function doesn't always
+ * correspond to the internal indices used within the file. This is done
+ * to ensure that value~0 always corresponds to the 'missing glyph'.
+ *
+ * This function is only meaningful if
+ * a) the font has a variation selector cmap sub table, and
+ * b) the current charmap has a Unicode encoding.
+ *
+ * @since:
+ * 2.3.6
+ */
FT_EXPORT( FT_UInt )
FT_Face_GetCharVariantIndex( FT_Face face,
FT_ULong charcode,
FT_ULong variantSelector );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharVariantIsDefault */
- /* */
- /* <Description> */
- /* Check whether this variation of this Unicode character is the one */
- /* to be found in the `cmap'. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character codepoint in Unicode. */
- /* */
- /* variantSelector :: */
- /* The Unicode codepoint of the variation selector. */
- /* */
- /* <Return> */
- /* 1~if found in the standard (Unicode) cmap, 0~if found in the */
- /* variation selector cmap, or -1 if it is not a variation. */
- /* */
- /* <Note> */
- /* This function is only meaningful if the font has a variation */
- /* selector cmap subtable. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_GetCharVariantIsDefault
+ *
+ * @description:
+ * Check whether this variation of this Unicode character is the one to
+ * be found in the charmap.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * charcode ::
+ * The character codepoint in Unicode.
+ *
+ * variantSelector ::
+ * The Unicode codepoint of the variation selector.
+ *
+ * @return:
+ * 1~if found in the standard (Unicode) cmap, 0~if found in the variation
+ * selector cmap, or -1 if it is not a variation.
+ *
+ * @note:
+ * This function is only meaningful if the font has a variation selector
+ * cmap subtable.
+ *
+ * @since:
+ * 2.3.6
+ */
FT_EXPORT( FT_Int )
FT_Face_GetCharVariantIsDefault( FT_Face face,
FT_ULong charcode,
FT_ULong variantSelector );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetVariantSelectors */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode variation selectors found */
- /* in the font. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* <Return> */
- /* A pointer to an array of selector code points, or NULL if there is */
- /* no valid variation selector cmap subtable. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_GetVariantSelectors
+ *
+ * @description:
+ * Return a zero-terminated list of Unicode variation selectors found in
+ * the font.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @return:
+ * A pointer to an array of selector code points, or `NULL` if there is
+ * no valid variation selector cmap subtable.
+ *
+ * @note:
+ * The last item in the array is~0; the array is owned by the @FT_Face
+ * object but can be overwritten or released on the next call to a
+ * FreeType function.
+ *
+ * @since:
+ * 2.3.6
+ */
FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantSelectors( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetVariantsOfChar */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode variation selectors found */
- /* for the specified character code. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character codepoint in Unicode. */
- /* */
- /* <Return> */
- /* A pointer to an array of variation selector code points that are */
- /* active for the given character, or NULL if the corresponding list */
- /* is empty. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_GetVariantsOfChar
+ *
+ * @description:
+ * Return a zero-terminated list of Unicode variation selectors found for
+ * the specified character code.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * charcode ::
+ * The character codepoint in Unicode.
+ *
+ * @return:
+ * A pointer to an array of variation selector code points that are
+ * active for the given character, or `NULL` if the corresponding list is
+ * empty.
+ *
+ * @note:
+ * The last item in the array is~0; the array is owned by the @FT_Face
+ * object but can be overwritten or released on the next call to a
+ * FreeType function.
+ *
+ * @since:
+ * 2.3.6
+ */
FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantsOfChar( FT_Face face,
FT_ULong charcode );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharsOfVariant */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode character codes found for */
- /* the specified variation selector. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* variantSelector :: */
- /* The variation selector code point in Unicode. */
- /* */
- /* <Return> */
- /* A list of all the code points that are specified by this selector */
- /* (both default and non-default codes are returned) or NULL if there */
- /* is no valid cmap or the variation selector is invalid. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_GetCharsOfVariant
+ *
+ * @description:
+ * Return a zero-terminated list of Unicode character codes found for the
+ * specified variation selector.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * variantSelector ::
+ * The variation selector code point in Unicode.
+ *
+ * @return:
+ * A list of all the code points that are specified by this selector
+ * (both default and non-default codes are returned) or `NULL` if there
+ * is no valid cmap or the variation selector is invalid.
+ *
+ * @note:
+ * The last item in the array is~0; the array is owned by the @FT_Face
+ * object but can be overwritten or released on the next call to a
+ * FreeType function.
+ *
+ * @since:
+ * 2.3.6
+ */
FT_EXPORT( FT_UInt32* )
FT_Face_GetCharsOfVariant( FT_Face face,
FT_ULong variantSelector );
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /* <Title> */
- /* Computations */
- /* */
- /* <Abstract> */
- /* Crunching fixed numbers and vectors. */
- /* */
- /* <Description> */
- /* This section contains various functions used to perform */
- /* computations on 16.16 fixed-float numbers or 2d vectors. */
- /* */
- /* <Order> */
- /* FT_MulDiv */
- /* FT_MulFix */
- /* FT_DivFix */
- /* FT_RoundFix */
- /* FT_CeilFix */
- /* FT_FloorFix */
- /* FT_Vector_Transform */
- /* FT_Matrix_Multiply */
- /* FT_Matrix_Invert */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * **Attention**: Most arithmetic functions take `FT_Long` as arguments.
+ * For historical reasons, FreeType was designed under the assumption
+ * that `FT_Long` is a 32-bit integer; results can thus be undefined if
+ * the arguments don't fit into 32 bits.
+ *
+ * @order:
+ * FT_MulDiv
+ * FT_MulFix
+ * FT_DivFix
+ * FT_RoundFix
+ * FT_CeilFix
+ * FT_FloorFix
+ * FT_Vector_Transform
+ * FT_Matrix_Multiply
+ * FT_Matrix_Invert
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulDiv */
- /* */
- /* <Description> */
- /* Compute `(a*b)/c' with maximum accuracy, using a 64-bit */
- /* intermediate integer whenever necessary. */
- /* */
- /* This function isn't necessarily as fast as some processor specific */
- /* operations, but is at least completely portable. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* */
- /* b :: The second multiplier. */
- /* */
- /* c :: The divisor. */
- /* */
- /* <Return> */
- /* The result of `(a*b)/c'. This function never traps when trying to */
- /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
- /* on the signs of `a' and `b'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_MulDiv
+ *
+ * @description:
+ * Compute `(a*b)/c` with maximum accuracy, using a 64-bit intermediate
+ * integer whenever necessary.
+ *
+ * This function isn't necessarily as fast as some processor-specific
+ * operations, but is at least completely portable.
+ *
+ * @input:
+ * a ::
+ * The first multiplier.
+ *
+ * b ::
+ * The second multiplier.
+ *
+ * c ::
+ * The divisor.
+ *
+ * @return:
+ * The result of `(a*b)/c`. This function never traps when trying to
+ * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on
+ * the signs of `a` and `b`.
+ */
FT_EXPORT( FT_Long )
FT_MulDiv( FT_Long a,
FT_Long b,
FT_Long c );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulFix */
- /* */
- /* <Description> */
- /* Compute `(a*b)/0x10000' with maximum accuracy. Its main use is to */
- /* multiply a given value by a 16.16 fixed-point factor. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* */
- /* b :: The second multiplier. Use a 16.16 factor here whenever */
- /* possible (see note below). */
- /* */
- /* <Return> */
- /* The result of `(a*b)/0x10000'. */
- /* */
- /* <Note> */
- /* This function has been optimized for the case where the absolute */
- /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */
- /* As this happens mainly when scaling from notional units to */
- /* fractional pixels in FreeType, it resulted in noticeable speed */
- /* improvements between versions 2.x and 1.x. */
- /* */
- /* As a conclusion, always try to place a 16.16 factor as the */
- /* _second_ argument of this function; this can make a great */
- /* difference. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_MulFix
+ *
+ * @description:
+ * Compute `(a*b)/0x10000` with maximum accuracy. Its main use is to
+ * multiply a given value by a 16.16 fixed-point factor.
+ *
+ * @input:
+ * a ::
+ * The first multiplier.
+ *
+ * b ::
+ * The second multiplier. Use a 16.16 factor here whenever possible
+ * (see note below).
+ *
+ * @return:
+ * The result of `(a*b)/0x10000`.
+ *
+ * @note:
+ * This function has been optimized for the case where the absolute value
+ * of `a` is less than 2048, and `b` is a 16.16 scaling factor. As this
+ * happens mainly when scaling from notional units to fractional pixels
+ * in FreeType, it resulted in noticeable speed improvements between
+ * versions 2.x and 1.x.
+ *
+ * As a conclusion, always try to place a 16.16 factor as the _second_
+ * argument of this function; this can make a great difference.
+ */
FT_EXPORT( FT_Long )
FT_MulFix( FT_Long a,
FT_Long b );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_DivFix */
- /* */
- /* <Description> */
- /* Compute `(a*0x10000)/b' with maximum accuracy. Its main use is to */
- /* divide a given value by a 16.16 fixed-point factor. */
- /* */
- /* <Input> */
- /* a :: The numerator. */
- /* */
- /* b :: The denominator. Use a 16.16 factor here. */
- /* */
- /* <Return> */
- /* The result of `(a*0x10000)/b'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_DivFix
+ *
+ * @description:
+ * Compute `(a*0x10000)/b` with maximum accuracy. Its main use is to
+ * divide a given value by a 16.16 fixed-point factor.
+ *
+ * @input:
+ * a ::
+ * The numerator.
+ *
+ * b ::
+ * The denominator. Use a 16.16 factor here.
+ *
+ * @return:
+ * The result of `(a*0x10000)/b`.
+ */
FT_EXPORT( FT_Long )
FT_DivFix( FT_Long a,
FT_Long b );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_RoundFix */
- /* */
- /* <Description> */
- /* Round a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number to be rounded. */
- /* */
- /* <Return> */
- /* `a' rounded to the nearest 16.16 fixed integer, halfway cases away */
- /* from zero. */
- /* */
- /* <Note> */
- /* The function uses wrap-around arithmetic. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_RoundFix
+ *
+ * @description:
+ * Round a 16.16 fixed number.
+ *
+ * @input:
+ * a ::
+ * The number to be rounded.
+ *
+ * @return:
+ * `a` rounded to the nearest 16.16 fixed integer, halfway cases away
+ * from zero.
+ *
+ * @note:
+ * The function uses wrap-around arithmetic.
+ */
FT_EXPORT( FT_Fixed )
FT_RoundFix( FT_Fixed a );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_CeilFix */
- /* */
- /* <Description> */
- /* Compute the smallest following integer of a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the ceiling function is to be computed. */
- /* */
- /* <Return> */
- /* `a' rounded towards plus infinity. */
- /* */
- /* <Note> */
- /* The function uses wrap-around arithmetic. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_CeilFix
+ *
+ * @description:
+ * Compute the smallest following integer of a 16.16 fixed number.
+ *
+ * @input:
+ * a ::
+ * The number for which the ceiling function is to be computed.
+ *
+ * @return:
+ * `a` rounded towards plus infinity.
+ *
+ * @note:
+ * The function uses wrap-around arithmetic.
+ */
FT_EXPORT( FT_Fixed )
FT_CeilFix( FT_Fixed a );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_FloorFix */
- /* */
- /* <Description> */
- /* Compute the largest previous integer of a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the floor function is to be computed. */
- /* */
- /* <Return> */
- /* `a' rounded towards minus infinity. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_FloorFix
+ *
+ * @description:
+ * Compute the largest previous integer of a 16.16 fixed number.
+ *
+ * @input:
+ * a ::
+ * The number for which the floor function is to be computed.
+ *
+ * @return:
+ * `a` rounded towards minus infinity.
+ */
FT_EXPORT( FT_Fixed )
FT_FloorFix( FT_Fixed a );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Vector_Transform */
- /* */
- /* <Description> */
- /* Transform a single vector through a 2x2 matrix. */
- /* */
- /* <InOut> */
- /* vector :: The target vector to transform. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to the source 2x2 matrix. */
- /* */
- /* <Note> */
- /* The result is undefined if either `vector' or `matrix' is invalid. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
+ FT_Vector_Transform( FT_Vector* vector,
const FT_Matrix* matrix );
- /*************************************************************************/
- /* */
- /* <Section> */
- /* version */
- /* */
- /* <Title> */
- /* FreeType Version */
- /* */
- /* <Abstract> */
- /* Functions and macros related to FreeType versions. */
- /* */
- /* <Description> */
- /* Note that those functions and macros are of limited use because */
- /* even a new release of FreeType with only documentation changes */
- /* increases the version number. */
- /* */
- /* <Order> */
- /* FT_Library_Version */
- /* */
- /* FREETYPE_MAJOR */
- /* FREETYPE_MINOR */
- /* FREETYPE_PATCH */
- /* */
- /* FT_Face_CheckTrueTypePatents */
- /* FT_Face_SetUnpatentedHinting */
- /* */
- /* FREETYPE_XXX */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * version
+ *
+ * @title:
+ * FreeType Version
+ *
+ * @abstract:
+ * Functions and macros related to FreeType versions.
+ *
+ * @description:
+ * Note that those functions and macros are of limited use because even a
+ * new release of FreeType with only documentation changes increases the
+ * version number.
+ *
+ * @order:
+ * FT_Library_Version
+ *
+ * FREETYPE_MAJOR
+ * FREETYPE_MINOR
+ * FREETYPE_PATCH
+ *
+ * FT_Face_CheckTrueTypePatents
+ * FT_Face_SetUnpatentedHinting
+ *
+ */
- /*************************************************************************
+ /**************************************************************************
*
* @enum:
* FREETYPE_XXX
*
* @description:
- * These three macros identify the FreeType source code version.
- * Use @FT_Library_Version to access them at runtime.
+ * 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.
+ * 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.
+ * 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 9
+#define FREETYPE_MINOR 10
#define FREETYPE_PATCH 1
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -4596,52 +4823,55 @@ FT_BEGIN_HEADER
FT_Int *apatch );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_CheckTrueTypePatents */
- /* */
- /* <Description> */
- /* Deprecated, does nothing. */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* <Return> */
- /* Always returns false. */
- /* */
- /* <Note> */
- /* Since May 2010, TrueType hinting is no longer patented. */
- /* */
- /* <Since> */
- /* 2.3.5 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_CheckTrueTypePatents
+ *
+ * @description:
+ * Deprecated, does nothing.
+ *
+ * @input:
+ * face ::
+ * A face handle.
+ *
+ * @return:
+ * Always returns false.
+ *
+ * @note:
+ * Since May 2010, TrueType hinting is no longer patented.
+ *
+ * @since:
+ * 2.3.5
+ */
FT_EXPORT( FT_Bool )
FT_Face_CheckTrueTypePatents( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_SetUnpatentedHinting */
- /* */
- /* <Description> */
- /* Deprecated, does nothing. */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* value :: New boolean setting. */
- /* */
- /* <Return> */
- /* Always returns false. */
- /* */
- /* <Note> */
- /* Since May 2010, TrueType hinting is no longer patented. */
- /* */
- /* <Since> */
- /* 2.3.5 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Face_SetUnpatentedHinting
+ *
+ * @description:
+ * Deprecated, does nothing.
+ *
+ * @input:
+ * face ::
+ * A face handle.
+ *
+ * value ::
+ * New boolean setting.
+ *
+ * @return:
+ * Always returns false.
+ *
+ * @note:
+ * Since May 2010, TrueType hinting is no longer patented.
+ *
+ * @since:
+ * 2.3.5
+ */
FT_EXPORT( FT_Bool )
FT_Face_SetUnpatentedHinting( FT_Face face,
FT_Bool value );
diff --git a/freetype/include/freetype/ftadvanc.h b/freetype/include/freetype/ftadvanc.h
index f78e8b1a..95c38f92 100644
--- a/freetype/include/freetype/ftadvanc.h
+++ b/freetype/include/freetype/ftadvanc.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftadvanc.h */
-/* */
-/* Quick computation of advance widths (specification only). */
-/* */
-/* Copyright 2008-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftadvanc.h
+ *
+ * Quick computation of advance widths (specification only).
+ *
+ * Copyright (C) 2008-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTADVANC_H_
@@ -56,68 +56,67 @@ FT_BEGIN_HEADER
*/
- /*************************************************************************/
- /* */
- /* <Const> */
- /* FT_ADVANCE_FLAG_FAST_ONLY */
- /* */
- /* <Description> */
- /* A bit-flag to be OR-ed with the `flags' parameter of the */
- /* @FT_Get_Advance and @FT_Get_Advances functions. */
- /* */
- /* If set, it indicates that you want these functions to fail if the */
- /* corresponding hinting mode or font driver doesn't allow for very */
- /* quick advance computation. */
- /* */
- /* Typically, glyphs that are either unscaled, unhinted, bitmapped, */
- /* or light-hinted can have their advance width computed very */
- /* quickly. */
- /* */
- /* Normal and bytecode hinted modes that require loading, scaling, */
- /* and hinting of the glyph outline, are extremely slow by */
- /* comparison. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_ADVANCE_FLAG_FAST_ONLY
+ *
+ * @description:
+ * A bit-flag to be OR-ed with the `flags` parameter of the
+ * @FT_Get_Advance and @FT_Get_Advances functions.
+ *
+ * If set, it indicates that you want these functions to fail if the
+ * corresponding hinting mode or font driver doesn't allow for very quick
+ * advance computation.
+ *
+ * Typically, glyphs that are either unscaled, unhinted, bitmapped, or
+ * light-hinted can have their advance width computed very quickly.
+ *
+ * Normal and bytecode hinted modes that require loading, scaling, and
+ * hinting of the glyph outline, are extremely slow by comparison.
+ */
#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Advance */
- /* */
- /* <Description> */
- /* Retrieve the advance value of a given glyph outline in an */
- /* @FT_Face. */
- /* */
- /* <Input> */
- /* face :: The source @FT_Face handle. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* load_flags :: A set of bit flags similar to those used when */
- /* calling @FT_Load_Glyph, used to determine what kind */
- /* of advances you need. */
- /* <Output> */
- /* padvance :: The advance value. If scaling is performed (based on */
- /* the value of `load_flags'), the advance value is in */
- /* 16.16 format. Otherwise, it is in font units. */
- /* */
- /* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */
- /* vertical advance corresponding to a vertical layout. */
- /* Otherwise, it is the horizontal advance in a */
- /* horizontal layout. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
- /* if the corresponding font backend doesn't have a quick way to */
- /* retrieve the advances. */
- /* */
- /* A scaled advance is returned in 16.16 format but isn't transformed */
- /* by the affine transformation specified by @FT_Set_Transform. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Advance
+ *
+ * @description:
+ * Retrieve the advance value of a given glyph outline in an @FT_Face.
+ *
+ * @input:
+ * face ::
+ * The source @FT_Face handle.
+ *
+ * gindex ::
+ * The glyph index.
+ *
+ * load_flags ::
+ * A set of bit flags similar to those used when calling
+ * @FT_Load_Glyph, used to determine what kind of advances you need.
+ * @output:
+ * padvance ::
+ * The advance value. If scaling is performed (based on the value of
+ * `load_flags`), the advance value is in 16.16 format. Otherwise, it
+ * is in font units.
+ *
+ * If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance
+ * corresponding to a vertical layout. Otherwise, it is the horizontal
+ * advance in a horizontal layout.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
+ * the corresponding font backend doesn't have a quick way to retrieve
+ * the advances.
+ *
+ * A scaled advance is returned in 16.16 format but isn't transformed by
+ * the affine transformation specified by @FT_Set_Transform.
+ */
FT_EXPORT( FT_Error )
FT_Get_Advance( FT_Face face,
FT_UInt gindex,
@@ -125,50 +124,52 @@ FT_BEGIN_HEADER
FT_Fixed *padvance );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Advances */
- /* */
- /* <Description> */
- /* Retrieve the advance values of several glyph outlines in an */
- /* @FT_Face. */
- /* */
- /* <Input> */
- /* face :: The source @FT_Face handle. */
- /* */
- /* start :: The first glyph index. */
- /* */
- /* count :: The number of advance values you want to retrieve. */
- /* */
- /* load_flags :: A set of bit flags similar to those used when */
- /* calling @FT_Load_Glyph. */
- /* */
- /* <Output> */
- /* padvance :: The advance values. This array, to be provided by the */
- /* caller, must contain at least `count' elements. */
- /* */
- /* If scaling is performed (based on the value of */
- /* `load_flags'), the advance values are in 16.16 format. */
- /* Otherwise, they are in font units. */
- /* */
- /* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */
- /* vertical advances corresponding to a vertical layout. */
- /* Otherwise, they are the horizontal advances in a */
- /* horizontal layout. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
- /* if the corresponding font backend doesn't have a quick way to */
- /* retrieve the advances. */
- /* */
- /* Scaled advances are returned in 16.16 format but aren't */
- /* transformed by the affine transformation specified by */
- /* @FT_Set_Transform. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Advances
+ *
+ * @description:
+ * Retrieve the advance values of several glyph outlines in an @FT_Face.
+ *
+ * @input:
+ * face ::
+ * The source @FT_Face handle.
+ *
+ * start ::
+ * The first glyph index.
+ *
+ * count ::
+ * The number of advance values you want to retrieve.
+ *
+ * load_flags ::
+ * A set of bit flags similar to those used when calling
+ * @FT_Load_Glyph.
+ *
+ * @output:
+ * padvance ::
+ * The advance values. This array, to be provided by the caller, must
+ * contain at least `count` elements.
+ *
+ * If scaling is performed (based on the value of `load_flags`), the
+ * advance values are in 16.16 format. Otherwise, they are in font
+ * units.
+ *
+ * If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances
+ * corresponding to a vertical layout. Otherwise, they are the
+ * horizontal advances in a horizontal layout.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
+ * the corresponding font backend doesn't have a quick way to retrieve
+ * the advances.
+ *
+ * Scaled advances are returned in 16.16 format but aren't transformed by
+ * the affine transformation specified by @FT_Set_Transform.
+ */
FT_EXPORT( FT_Error )
FT_Get_Advances( FT_Face face,
FT_UInt start,
diff --git a/freetype/include/freetype/ftbbox.h b/freetype/include/freetype/ftbbox.h
index f9eb70b1..22da70c0 100644
--- a/freetype/include/freetype/ftbbox.h
+++ b/freetype/include/freetype/ftbbox.h
@@ -1,30 +1,30 @@
-/***************************************************************************/
-/* */
-/* ftbbox.h */
-/* */
-/* FreeType exact bbox computation (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftbbox.h
+ *
+ * FreeType exact bbox computation (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -44,43 +44,44 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* outline_processing */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_BBox */
- /* */
- /* <Description> */
- /* Compute the exact bounding box of an outline. This is slower */
- /* than computing the control box. However, it uses an advanced */
- /* algorithm that returns _very_ quickly when the two boxes */
- /* coincide. Otherwise, the outline Bezier arcs are traversed to */
- /* extract their extrema. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline. */
- /* */
- /* <Output> */
- /* abbox :: The outline's exact bounding box. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* If the font is tricky and the glyph has been loaded with */
- /* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */
- /* reasonable values for the BBox it is necessary to load the glyph */
- /* at a large ppem value (so that the hinting instructions can */
- /* properly shift and scale the subglyphs), then extracting the BBox, */
- /* which can be eventually converted back to font units. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * outline_processing
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Get_BBox
+ *
+ * @description:
+ * Compute the exact bounding box of an outline. This is slower than
+ * computing the control box. However, it uses an advanced algorithm
+ * that returns _very_ quickly when the two boxes coincide. Otherwise,
+ * the outline Bezier arcs are traversed to extract their extrema.
+ *
+ * @input:
+ * outline ::
+ * A pointer to the source outline.
+ *
+ * @output:
+ * abbox ::
+ * The outline's exact bounding box.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * If the font is tricky and the glyph has been loaded with
+ * @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get
+ * reasonable values for the BBox it is necessary to load the glyph at a
+ * large ppem value (so that the hinting instructions can properly shift
+ * and scale the subglyphs), then extracting the BBox, which can be
+ * eventually converted back to font units.
+ */
FT_EXPORT( FT_Error )
FT_Outline_Get_BBox( FT_Outline* outline,
FT_BBox *abbox );
diff --git a/freetype/include/freetype/ftbdf.h b/freetype/include/freetype/ftbdf.h
index 1b6dea65..1c46da59 100644
--- a/freetype/include/freetype/ftbdf.h
+++ b/freetype/include/freetype/ftbdf.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbdf.h */
-/* */
-/* FreeType API for accessing BDF-specific strings (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbdf.h
+ *
+ * FreeType API for accessing BDF-specific strings (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -32,25 +32,25 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * bdf_fonts
+ *
+ * @title:
+ * BDF and PCF Files
+ *
+ * @abstract:
+ * BDF and PCF specific API.
+ *
+ * @description:
+ * This section contains the declaration of functions specific to BDF and
+ * PCF fonts.
+ *
+ */
- /**********************************************************************
+ /**************************************************************************
*
* @enum:
* BDF_PropertyType
@@ -81,40 +81,40 @@ FT_BEGIN_HEADER
} BDF_PropertyType;
- /**********************************************************************
+ /**************************************************************************
*
* @type:
* BDF_Property
*
* @description:
- * A handle to a @BDF_PropertyRec structure to model a given
- * BDF/PCF property.
+ * A handle to a @BDF_PropertyRec structure to model a given BDF/PCF
+ * property.
*/
typedef struct BDF_PropertyRec_* BDF_Property;
- /**********************************************************************
- *
- * @struct:
- * BDF_PropertyRec
- *
- * @description:
- * This structure models a given BDF/PCF property.
- *
- * @fields:
- * type ::
- * The property type.
- *
- * u.atom ::
- * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be
- * NULL, indicating an empty string.
- *
- * u.integer ::
- * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
- *
- * u.cardinal ::
- * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
- */
+ /**************************************************************************
+ *
+ * @struct:
+ * BDF_PropertyRec
+ *
+ * @description:
+ * This structure models a given BDF/PCF property.
+ *
+ * @fields:
+ * type ::
+ * The property type.
+ *
+ * u.atom ::
+ * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be
+ * `NULL`, indicating an empty string.
+ *
+ * u.integer ::
+ * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
+ *
+ * u.cardinal ::
+ * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
+ */
typedef struct BDF_PropertyRec_
{
BDF_PropertyType type;
@@ -128,73 +128,76 @@ FT_BEGIN_HEADER
} 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.
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_BDF_Charset_ID
+ *
+ * @description:
+ * Retrieve a BDF font character set identity, according to the BDF
+ * specification.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * @output:
+ * acharset_encoding ::
+ * Charset encoding, as a C~string, owned by the face.
+ *
+ * acharset_registry ::
+ * Charset registry, as a C~string, owned by the face.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function only works with BDF faces, returning an error otherwise.
+ */
FT_EXPORT( FT_Error )
FT_Get_BDF_Charset_ID( FT_Face face,
const char* *acharset_encoding,
const char* *acharset_registry );
- /**********************************************************************
- *
- * @function:
- * FT_Get_BDF_Property
- *
- * @description:
- * Retrieve a BDF property from a BDF or PCF font file.
- *
- * @input:
- * face :: A handle to the input face.
- *
- * name :: The property name.
- *
- * @output:
- * aproperty :: The property.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function works with BDF _and_ PCF fonts. It returns an error
- * otherwise. It also returns an error if the property is not in the
- * font.
- *
- * A `property' is a either key-value pair within the STARTPROPERTIES
- * ... ENDPROPERTIES block of a BDF font or a key-value pair from the
- * `info->props' array within a `FontRec' structure of a PCF font.
- *
- * Integer properties are always stored as `signed' within PCF fonts;
- * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
- * for BDF fonts only.
- *
- * In case of error, `aproperty->type' is always set to
- * @BDF_PROPERTY_TYPE_NONE.
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_BDF_Property
+ *
+ * @description:
+ * Retrieve a BDF property from a BDF or PCF font file.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * name ::
+ * The property name.
+ *
+ * @output:
+ * aproperty ::
+ * The property.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function works with BDF _and_ PCF fonts. It returns an error
+ * otherwise. It also returns an error if the property is not in the
+ * font.
+ *
+ * A 'property' is a either key-value pair within the STARTPROPERTIES
+ * ... ENDPROPERTIES block of a BDF font or a key-value pair from the
+ * `info->props` array within a `FontRec` structure of a PCF font.
+ *
+ * Integer properties are always stored as 'signed' within PCF fonts;
+ * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
+ * for BDF fonts only.
+ *
+ * In case of error, `aproperty->type` is always set to
+ * @BDF_PROPERTY_TYPE_NONE.
+ */
FT_EXPORT( FT_Error )
FT_Get_BDF_Property( FT_Face face,
const char* prop_name,
diff --git a/freetype/include/freetype/ftbitmap.h b/freetype/include/freetype/ftbitmap.h
index a43187ca..a6acdb96 100644
--- a/freetype/include/freetype/ftbitmap.h
+++ b/freetype/include/freetype/ftbitmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.h */
-/* */
-/* FreeType utility functions for bitmaps (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbitmap.h
+ *
+ * FreeType utility functions for bitmaps (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -22,6 +22,7 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+#include FT_COLOR_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -33,39 +34,46 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* bitmap_handling */
- /* */
- /* <Title> */
- /* Bitmap Handling */
- /* */
- /* <Abstract> */
- /* Handling FT_Bitmap objects. */
- /* */
- /* <Description> */
- /* This section contains functions for handling @FT_Bitmap objects. */
- /* Note that none of the functions changes the bitmap's `flow' (as */
- /* indicated by the sign of the `pitch' field in `FT_Bitmap'). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Init */
- /* */
- /* <Description> */
- /* Initialize a pointer to an @FT_Bitmap structure. */
- /* */
- /* <InOut> */
- /* abitmap :: A pointer to the bitmap structure. */
- /* */
- /* <Note> */
- /* A deprecated name for the same function is `FT_Bitmap_New'. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * bitmap_handling
+ *
+ * @title:
+ * Bitmap Handling
+ *
+ * @abstract:
+ * Handling FT_Bitmap objects.
+ *
+ * @description:
+ * This section contains functions for handling @FT_Bitmap objects,
+ * automatically adjusting the target's bitmap buffer size as needed.
+ *
+ * Note that none of the functions changes the bitmap's 'flow' (as
+ * indicated by the sign of the `pitch` field in @FT_Bitmap).
+ *
+ * To set the flow, assign an appropriate positive or negative value to
+ * the `pitch` field of the target @FT_Bitmap object after calling
+ * @FT_Bitmap_Init but before calling any of the other functions
+ * described here.
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Bitmap_Init
+ *
+ * @description:
+ * Initialize a pointer to an @FT_Bitmap structure.
+ *
+ * @inout:
+ * abitmap ::
+ * A pointer to the bitmap structure.
+ *
+ * @note:
+ * A deprecated name for the same function is `FT_Bitmap_New`.
+ */
FT_EXPORT( void )
FT_Bitmap_Init( FT_Bitmap *abitmap );
@@ -75,66 +83,77 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * @note:
+ * `source->buffer` and `target->buffer` must neither be equal nor
+ * overlap.
+ */
FT_EXPORT( FT_Error )
FT_Bitmap_Copy( FT_Library library,
const FT_Bitmap *source,
FT_Bitmap *target );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Embolden */
- /* */
- /* <Description> */
- /* Embolden a bitmap. The new bitmap will be about `xStrength' */
- /* pixels wider and `yStrength' pixels higher. The left and bottom */
- /* borders are kept unchanged. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* xStrength :: How strong the glyph is emboldened horizontally. */
- /* Expressed in 26.6 pixel format. */
- /* */
- /* yStrength :: How strong the glyph is emboldened vertically. */
- /* Expressed in 26.6 pixel format. */
- /* */
- /* <InOut> */
- /* bitmap :: A handle to the target bitmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The current implementation restricts `xStrength' to be less than */
- /* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
- /* */
- /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */
- /* you should call @FT_GlyphSlot_Own_Bitmap on the slot first. */
- /* */
- /* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format */
- /* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Bitmap_Embolden
+ *
+ * @description:
+ * Embolden a bitmap. The new bitmap will be about `xStrength` pixels
+ * wider and `yStrength` pixels higher. The left and bottom borders are
+ * kept unchanged.
+ *
+ * @input:
+ * library ::
+ * A handle to a library object.
+ *
+ * xStrength ::
+ * How strong the glyph is emboldened horizontally. Expressed in 26.6
+ * pixel format.
+ *
+ * yStrength ::
+ * How strong the glyph is emboldened vertically. Expressed in 26.6
+ * pixel format.
+ *
+ * @inout:
+ * bitmap ::
+ * A handle to the target bitmap.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The current implementation restricts `xStrength` to be less than or
+ * equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.
+ *
+ * If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you
+ * should call @FT_GlyphSlot_Own_Bitmap on the slot first.
+ *
+ * Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are
+ * converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).
+ */
FT_EXPORT( FT_Error )
FT_Bitmap_Embolden( FT_Library library,
FT_Bitmap* bitmap,
@@ -142,39 +161,46 @@ FT_BEGIN_HEADER
FT_Pos yStrength );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Convert */
- /* */
- /* <Description> */
- /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */
- /* to a bitmap object with depth 8bpp, making the number of used */
- /* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* source :: The source bitmap. */
- /* */
- /* alignment :: The pitch of the bitmap is a multiple of this */
- /* parameter. Common values are 1, 2, or 4. */
- /* */
- /* <Output> */
- /* target :: The target bitmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* It is possible to call @FT_Bitmap_Convert multiple times without */
- /* calling @FT_Bitmap_Done (the memory is simply reallocated). */
- /* */
- /* Use @FT_Bitmap_Done to finally remove the bitmap object. */
- /* */
- /* The `library' argument is taken to have access to FreeType's */
- /* memory handling functions. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Bitmap_Convert
+ *
+ * @description:
+ * Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to
+ * a bitmap object with depth 8bpp, making the number of used bytes 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 argument. 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.
+ *
+ * `source->buffer` and `target->buffer` must neither be equal nor
+ * overlap.
+ */
FT_EXPORT( FT_Error )
FT_Bitmap_Convert( FT_Library library,
const FT_Bitmap *source,
@@ -182,48 +208,112 @@ FT_BEGIN_HEADER
FT_Int alignment );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GlyphSlot_Own_Bitmap */
- /* */
- /* <Description> */
- /* Make sure that a glyph slot owns `slot->bitmap'. */
- /* */
- /* <Input> */
- /* slot :: The glyph slot. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function is to be used in combination with */
- /* @FT_Bitmap_Embolden. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Bitmap_Blend
+ *
+ * @description:
+ * Blend a bitmap onto another bitmap, using a given color.
+ *
+ * @input:
+ * library ::
+ * A handle to a library object.
+ *
+ * source ::
+ * The source bitmap, which can have any @FT_Pixel_Mode format.
+ *
+ * source_offset ::
+ * The offset vector to the upper left corner of the source bitmap in
+ * 26.6 pixel format. It should represent an integer offset; the
+ * function will set the lowest six bits to zero to enforce that.
+ *
+ * color ::
+ * The color used to draw `source` onto `target`.
+ *
+ * @inout:
+ * target ::
+ * A handle to an `FT_Bitmap` object. It should be either initialized
+ * as empty with a call to @FT_Bitmap_Init, or it should be of type
+ * @FT_PIXEL_MODE_BGRA.
+ *
+ * atarget_offset ::
+ * The offset vector to the upper left corner of the target bitmap in
+ * 26.6 pixel format. It should represent an integer offset; the
+ * function will set the lowest six bits to zero to enforce that.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function doesn't perform clipping.
+ *
+ * The bitmap in `target` gets allocated or reallocated as needed; the
+ * vector `atarget_offset` is updated accordingly.
+ *
+ * In case of allocation or reallocation, the bitmap's pitch is set to
+ * `4 * width`. Both `source` and `target` must have the same bitmap
+ * flow (as indicated by the sign of the `pitch` field).
+ *
+ * `source->buffer` and `target->buffer` must neither be equal nor
+ * overlap.
+ *
+ * @since:
+ * 2.10
+ */
+ FT_EXPORT( FT_Error )
+ FT_Bitmap_Blend( FT_Library library,
+ const FT_Bitmap* source,
+ const FT_Vector source_offset,
+ FT_Bitmap* target,
+ FT_Vector *atarget_offset,
+ FT_Color color );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_GlyphSlot_Own_Bitmap
+ *
+ * @description:
+ * Make sure that a glyph slot owns `slot->bitmap`.
+ *
+ * @input:
+ * slot ::
+ * The glyph slot.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function is to be used in combination with @FT_Bitmap_Embolden.
+ */
FT_EXPORT( FT_Error )
FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Done */
- /* */
- /* <Description> */
- /* Destroy a bitmap object initialized with @FT_Bitmap_Init. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* bitmap :: The bitmap object to be freed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `library' argument is taken to have access to FreeType's */
- /* memory handling functions. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Bitmap_Done
+ *
+ * @description:
+ * Destroy a bitmap object initialized with @FT_Bitmap_Init.
+ *
+ * @input:
+ * library ::
+ * A handle to a library object.
+ *
+ * bitmap ::
+ * The bitmap object to be freed.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The `library` argument is taken to have access to FreeType's memory
+ * handling functions.
+ */
FT_EXPORT( FT_Error )
FT_Bitmap_Done( FT_Library library,
FT_Bitmap *bitmap );
diff --git a/freetype/include/freetype/ftbzip2.h b/freetype/include/freetype/ftbzip2.h
index 6edfa031..ae88cfdb 100644
--- a/freetype/include/freetype/ftbzip2.h
+++ b/freetype/include/freetype/ftbzip2.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbzip2.h */
-/* */
-/* Bzip2-compressed stream support. */
-/* */
-/* Copyright 2010-2018 by */
-/* Joel Klinghed. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbzip2.h
+ *
+ * Bzip2-compressed stream support.
+ *
+ * Copyright (C) 2010-2019 by
+ * Joel Klinghed.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTBZIP2_H_
@@ -31,62 +31,62 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* bzip2 */
- /* */
- /* <Title> */
- /* BZIP2 Streams */
- /* */
- /* <Abstract> */
- /* Using bzip2-compressed font files. */
- /* */
- /* <Description> */
- /* This section contains the declaration of Bzip2-specific functions. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * bzip2
+ *
+ * @title:
+ * BZIP2 Streams
+ *
+ * @abstract:
+ * Using bzip2-compressed font files.
+ *
+ * @description:
+ * This section contains the declaration of Bzip2-specific functions.
+ *
+ */
- /************************************************************************
- *
- * @function:
- * FT_Stream_OpenBzip2
- *
- * @description:
- * Open a new stream to parse bzip2-compressed font files. This is
- * mainly used to support the compressed `*.pcf.bz2' fonts that come
- * with XFree86.
- *
- * @input:
- * stream ::
- * The target embedding stream.
- *
- * source ::
- * The source stream.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source stream must be opened _before_ calling this function.
- *
- * Calling the internal function `FT_Stream_Close' on the new stream will
- * *not* call `FT_Stream_Close' on the source stream. None of the stream
- * objects will be released to the heap.
- *
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream.
- *
- * In certain builds of the library, bzip2 compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a bzip2 compressed stream
- * from it and re-open the face with it.
- *
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with bzip2 support.
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Stream_OpenBzip2
+ *
+ * @description:
+ * Open a new stream to parse bzip2-compressed font files. This is
+ * mainly used to support the compressed `*.pcf.bz2` fonts that come with
+ * XFree86.
+ *
+ * @input:
+ * stream ::
+ * The target embedding stream.
+ *
+ * source ::
+ * The source stream.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The source stream must be opened _before_ calling this function.
+ *
+ * Calling the internal function `FT_Stream_Close` on the new stream will
+ * **not** call `FT_Stream_Close` on the source stream. None of the
+ * stream objects will be released to the heap.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream.
+ *
+ * In certain builds of the library, bzip2 compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a bzip2 compressed
+ * stream from it and re-open the face with it.
+ *
+ * This function may return `FT_Err_Unimplemented_Feature` if your build
+ * of FreeType was not compiled with bzip2 support.
+ */
FT_EXPORT( FT_Error )
FT_Stream_OpenBzip2( FT_Stream stream,
FT_Stream source );
diff --git a/freetype/include/freetype/ftcache.h b/freetype/include/freetype/ftcache.h
index 52d5f00e..0d589d0b 100644
--- a/freetype/include/freetype/ftcache.h
+++ b/freetype/include/freetype/ftcache.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcache.h */
-/* */
-/* FreeType Cache subsystem (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcache.h
+ *
+ * FreeType Cache subsystem (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,24 +27,24 @@
FT_BEGIN_HEADER
- /*************************************************************************
+ /**************************************************************************
*
- * <Section>
- * cache_subsystem
+ * @section:
+ * cache_subsystem
*
- * <Title>
- * Cache Sub-System
+ * @title:
+ * Cache Sub-System
*
- * <Abstract>
- * How to cache face, size, and glyph data with FreeType~2.
+ * @abstract:
+ * How to cache face, size, and glyph data with FreeType~2.
*
- * <Description>
+ * @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.
+ * 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
@@ -59,7 +59,7 @@ FT_BEGIN_HEADER
* to convert an @FTC_FaceID into a new @FT_Face object. The latter is
* then completely managed by the cache, including its termination
* through @FT_Done_Face. To monitor termination of face objects, the
- * finalizer callback in the `generic' field of the @FT_Face object can
+ * finalizer callback in the `generic` field of the @FT_Face object can
* be used, which might also be used to store the @FTC_FaceID of the
* face.
*
@@ -69,14 +69,14 @@ FT_BEGIN_HEADER
* 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
+ * **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.
+ * 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
@@ -91,16 +91,16 @@ FT_BEGIN_HEADER
* 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).
+ * 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>
+ * @order:
* FTC_Manager
* FTC_FaceID
* FTC_Face_Requester
@@ -142,19 +142,20 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************
+ /**************************************************************************
*
- * @type: FTC_FaceID
+ * @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.
+ * 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.
+ * Never use `NULL` as a valid @FTC_FaceID.
*
* Face IDs are passed by the client to the cache manager that calls,
* when needed, the @FTC_Face_Requester to translate them into new
@@ -165,13 +166,13 @@ FT_BEGIN_HEADER
* 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.
+ * Failure to do so will result in incorrect behaviour or even memory
+ * leaks and crashes.
*/
typedef FT_Pointer FTC_FaceID;
- /************************************************************************
+ /**************************************************************************
*
* @functype:
* FTC_Face_Requester
@@ -181,7 +182,7 @@ FT_BEGIN_HEADER
* the cache manager to translate a given @FTC_FaceID into a new valid
* @FT_Face object, on demand.
*
- * <Input>
+ * @input:
* face_id ::
* The face ID to resolve.
*
@@ -191,15 +192,15 @@ FT_BEGIN_HEADER
* req_data ::
* Application-provided request data (see note below).
*
- * <Output>
+ * @output:
* aface ::
* A new @FT_Face handle.
*
- * <Return>
+ * @return:
* FreeType error code. 0~means success.
*
- * <Note>
- * The third parameter `req_data' is the same as the one passed by the
+ * @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
@@ -226,84 +227,90 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FTC_Manager
+ *
+ * @description:
+ * This object corresponds to one instance of the cache-subsystem. It is
+ * used to cache one or more @FT_Face objects, along with corresponding
+ * @FT_Size objects.
+ *
+ * The manager intentionally limits the total number of opened @FT_Face
+ * and @FT_Size objects to control memory usage. See the `max_faces` and
+ * `max_sizes` parameters of @FTC_Manager_New.
+ *
+ * The manager is also used to cache 'nodes' of various types while
+ * limiting their total memory usage.
+ *
+ * All limitations are enforced by keeping lists of managed objects in
+ * most-recently-used order, and flushing old nodes to make room for new
+ * ones.
+ */
typedef struct FTC_ManagerRec_* FTC_Manager;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_Node */
- /* */
- /* <Description> */
- /* An opaque handle to a cache node object. Each cache node is */
- /* reference-counted. A node with a count of~0 might be flushed */
- /* out of a full cache whenever a lookup request is performed. */
- /* */
- /* If you look up nodes, you have the ability to `acquire' them, */
- /* i.e., to increment their reference count. This will prevent the */
- /* node from being flushed out of the cache until you explicitly */
- /* `release' it (see @FTC_Node_Unref). */
- /* */
- /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FTC_Node
+ *
+ * @description:
+ * An opaque handle to a cache node object. Each cache node is
+ * reference-counted. A node with a count of~0 might be flushed out of a
+ * full cache whenever a lookup request is performed.
+ *
+ * If you look up nodes, you have the ability to 'acquire' them, i.e., to
+ * increment their reference count. This will prevent the node from
+ * being flushed out of the cache until you explicitly 'release' it (see
+ * @FTC_Node_Unref).
+ *
+ * See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup.
+ */
typedef struct FTC_NodeRec_* FTC_Node;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_New */
- /* */
- /* <Description> */
- /* Create a new cache manager. */
- /* */
- /* <Input> */
- /* library :: The parent FreeType library handle to use. */
- /* */
- /* max_faces :: Maximum number of opened @FT_Face objects managed by */
- /* this cache instance. Use~0 for defaults. */
- /* */
- /* max_sizes :: Maximum number of opened @FT_Size objects managed by */
- /* this cache instance. Use~0 for defaults. */
- /* */
- /* max_bytes :: Maximum number of bytes to use for cached data nodes. */
- /* Use~0 for defaults. Note that this value does not */
- /* account for managed @FT_Face and @FT_Size objects. */
- /* */
- /* requester :: An application-provided callback used to translate */
- /* face IDs into real @FT_Face objects. */
- /* */
- /* req_data :: A generic pointer that is passed to the requester */
- /* each time it is called (see @FTC_Face_Requester). */
- /* */
- /* <Output> */
- /* amanager :: A handle to a new manager object. 0~in case of */
- /* failure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -314,114 +321,124 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -434,89 +451,93 @@ FT_BEGIN_HEADER
} FTC_ScalerRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FTC_Scaler */
- /* */
- /* <Description> */
- /* A handle to an @FTC_ScalerRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ * 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 ::
@@ -527,11 +548,11 @@ FT_BEGIN_HEADER
*
* @note:
* This function flushes all nodes from the cache corresponding to this
- * `face_id', with the exception of nodes with a non-null reference
+ * `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
+ * 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.
*
*/
@@ -540,20 +561,20 @@ FT_BEGIN_HEADER
FTC_FaceID face_id );
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* FTC_CMapCache
*
* @description:
- * An opaque handle used to model a charmap cache. This cache is to
- * hold character codes -> glyph indices mappings.
+ * 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
@@ -567,7 +588,7 @@ FT_BEGIN_HEADER
*
* @output:
* acache ::
- * A new cache handle. NULL in case of error.
+ * A new cache handle. `NULL` in case of error.
*
* @return:
* FreeType error code. 0~means success.
@@ -582,7 +603,7 @@ FT_BEGIN_HEADER
FTC_CMapCache *acache );
- /************************************************************************
+ /**************************************************************************
*
* @function:
* FTC_CMapCache_Lookup
@@ -606,7 +627,7 @@ FT_BEGIN_HEADER
* The character code (in the corresponding charmap).
*
* @return:
- * Glyph index. 0~means `no glyph'.
+ * Glyph index. 0~means 'no glyph'.
*
*/
FT_EXPORT( FT_UInt )
@@ -627,7 +648,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* FTC_ImageTypeRec
@@ -659,7 +680,7 @@ FT_BEGIN_HEADER
} FTC_ImageTypeRec;
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* FTC_ImageType
@@ -680,83 +701,87 @@ FT_BEGIN_HEADER
(d1)->flags == (d2)->flags )
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_ImageCache */
- /* */
- /* <Description> */
- /* A handle to a glyph image cache object. They are designed to */
- /* hold many distinct glyph images while not exceeding a certain */
- /* memory threshold. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FTC_ImageCache
+ *
+ * @description:
+ * A handle to a glyph image cache object. They are designed to hold
+ * many distinct glyph images while not exceeding a certain memory
+ * threshold.
+ */
typedef struct FTC_ImageCacheRec_* FTC_ImageCache;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_New */
- /* */
- /* <Description> */
- /* Create a new glyph image cache. */
- /* */
- /* <Input> */
- /* manager :: The parent manager for the image cache. */
- /* */
- /* <Output> */
- /* acache :: A handle to the new glyph image cache object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_ImageCache_New
+ *
+ * @description:
+ * Create a new glyph image cache.
+ *
+ * @input:
+ * manager ::
+ * The parent manager for the image cache.
+ *
+ * @output:
+ * acache ::
+ * A handle to the new glyph image cache object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FTC_ImageCache_New( FTC_Manager manager,
FTC_ImageCache *acache );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_Lookup */
- /* */
- /* <Description> */
- /* Retrieve a given glyph image from a glyph image cache. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source glyph image cache. */
- /* */
- /* type :: A pointer to a glyph image type descriptor. */
- /* */
- /* gindex :: The glyph index to retrieve. */
- /* */
- /* <Output> */
- /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
- /* failure. */
- /* */
- /* anode :: Used to return the address of the corresponding cache */
- /* node after incrementing its reference count (see note */
- /* below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned glyph is owned and managed by the glyph image cache. */
- /* Never try to transform or discard it manually! You can however */
- /* create a copy with @FT_Glyph_Copy and modify the new one. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the glyph image, after increasing its reference */
- /* count. This ensures that the node (as well as the @FT_Glyph) will */
- /* always be kept in the cache until you call @FTC_Node_Unref to */
- /* `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the @FT_Glyph could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_ImageCache_Lookup
+ *
+ * @description:
+ * Retrieve a given glyph image from a glyph image cache.
+ *
+ * @input:
+ * cache ::
+ * A handle to the source glyph image cache.
+ *
+ * type ::
+ * A pointer to a glyph image type descriptor.
+ *
+ * gindex ::
+ * The glyph index to retrieve.
+ *
+ * @output:
+ * aglyph ::
+ * The corresponding @FT_Glyph object. 0~in case of failure.
+ *
+ * anode ::
+ * Used to return the address of the corresponding cache node after
+ * incrementing its reference count (see note below).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The returned glyph is owned and managed by the glyph image cache.
+ * Never try to transform or discard it manually! You can however create
+ * a copy with @FT_Glyph_Copy and modify the new one.
+ *
+ * If `anode` is _not_ `NULL`, it receives the address of the cache node
+ * containing the glyph image, after increasing its reference count.
+ * This ensures that the node (as well as the @FT_Glyph) will always be
+ * kept in the cache until you call @FTC_Node_Unref to 'release' it.
+ *
+ * If `anode` is `NULL`, the cache node is left unchanged, which means
+ * that the @FT_Glyph could be flushed out of the cache on the next call
+ * to one of the caching sub-system APIs. Don't assume that it is
+ * persistent!
+ */
FT_EXPORT( FT_Error )
FTC_ImageCache_Lookup( FTC_ImageCache cache,
FTC_ImageType type,
@@ -765,54 +790,57 @@ FT_BEGIN_HEADER
FTC_Node *anode );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_LookupScaler */
- /* */
- /* <Description> */
- /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */
- /* to specify the face ID and its size. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source glyph image cache. */
- /* */
- /* scaler :: A pointer to a scaler descriptor. */
- /* */
- /* load_flags :: The corresponding load flags. */
- /* */
- /* gindex :: The glyph index to retrieve. */
- /* */
- /* <Output> */
- /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
- /* failure. */
- /* */
- /* anode :: Used to return the address of the corresponding */
- /* cache node after incrementing its reference count */
- /* (see note below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned glyph is owned and managed by the glyph image cache. */
- /* Never try to transform or discard it manually! You can however */
- /* create a copy with @FT_Glyph_Copy and modify the new one. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the glyph image, after increasing its reference */
- /* count. This ensures that the node (as well as the @FT_Glyph) will */
- /* always be kept in the cache until you call @FTC_Node_Unref to */
- /* `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the @FT_Glyph could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
- /* Calls to @FT_Set_Char_Size and friends have no effect on cached */
- /* glyphs; you should always use the FreeType cache API instead. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_ImageCache_LookupScaler
+ *
+ * @description:
+ * A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec to
+ * specify the face ID and its size.
+ *
+ * @input:
+ * cache ::
+ * A handle to the source glyph image cache.
+ *
+ * scaler ::
+ * A pointer to a scaler descriptor.
+ *
+ * load_flags ::
+ * The corresponding load flags.
+ *
+ * gindex ::
+ * The glyph index to retrieve.
+ *
+ * @output:
+ * aglyph ::
+ * The corresponding @FT_Glyph object. 0~in case of failure.
+ *
+ * anode ::
+ * Used to return the address of the corresponding cache node after
+ * incrementing its reference count (see note below).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The returned glyph is owned and managed by the glyph image cache.
+ * Never try to transform or discard it manually! You can however create
+ * a copy with @FT_Glyph_Copy and modify the new one.
+ *
+ * If `anode` is _not_ `NULL`, it receives the address of the cache node
+ * containing the glyph image, after increasing its reference count.
+ * This ensures that the node (as well as the @FT_Glyph) will always be
+ * kept in the cache until you call @FTC_Node_Unref to 'release' it.
+ *
+ * If `anode` is `NULL`, the cache node is left unchanged, which means
+ * that the @FT_Glyph could be flushed out of the cache on the next call
+ * to one of the caching sub-system APIs. Don't assume that it is
+ * persistent!
+ *
+ * Calls to @FT_Set_Char_Size and friends have no effect on cached
+ * glyphs; you should always use the FreeType cache API instead.
+ */
FT_EXPORT( FT_Error )
FTC_ImageCache_LookupScaler( FTC_ImageCache cache,
FTC_Scaler scaler,
@@ -822,53 +850,60 @@ FT_BEGIN_HEADER
FTC_Node *anode );
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_SBit */
- /* */
- /* <Description> */
- /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */
- /* structure for details. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -887,87 +922,93 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_SBitCache_New
+ *
+ * @description:
+ * Create a new cache to store small glyph bitmaps.
+ *
+ * @input:
+ * manager ::
+ * A handle to the source cache manager.
+ *
+ * @output:
+ * acache ::
+ * A handle to the new sbit cache. `NULL` in case of error.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FTC_SBitCache_New( FTC_Manager manager,
FTC_SBitCache *acache );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_SBitCache_Lookup */
- /* */
- /* <Description> */
- /* Look up a given small glyph bitmap in a given sbit cache and */
- /* `lock' it to prevent its flushing from the cache until needed. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source sbit cache. */
- /* */
- /* type :: A pointer to the glyph image type descriptor. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* sbit :: A handle to a small bitmap descriptor. */
- /* */
- /* anode :: Used to return the address of the corresponding cache */
- /* node after incrementing its reference count (see note */
- /* below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The small bitmap descriptor and its bit buffer are owned by the */
- /* cache and should never be freed by the application. They might */
- /* as well disappear from memory on the next cache lookup, so don't */
- /* treat them as persistent data. */
- /* */
- /* The descriptor's `buffer' field is set to~0 to indicate a missing */
- /* glyph bitmap. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the bitmap, after increasing its reference count. */
- /* This ensures that the node (as well as the image) will always be */
- /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the bitmap could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_SBitCache_Lookup
+ *
+ * @description:
+ * Look up a given small glyph bitmap in a given sbit cache and 'lock' it
+ * to prevent its flushing from the cache until needed.
+ *
+ * @input:
+ * cache ::
+ * A handle to the source sbit cache.
+ *
+ * type ::
+ * A pointer to the glyph image type descriptor.
+ *
+ * gindex ::
+ * The glyph index.
+ *
+ * @output:
+ * sbit ::
+ * A handle to a small bitmap descriptor.
+ *
+ * anode ::
+ * Used to return the address of the corresponding cache node after
+ * incrementing its reference count (see note below).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The small bitmap descriptor and its bit buffer are owned by the cache
+ * and should never be freed by the application. They might as well
+ * disappear from memory on the next cache lookup, so don't treat them as
+ * persistent data.
+ *
+ * The descriptor's `buffer` field is set to~0 to indicate a missing
+ * glyph bitmap.
+ *
+ * If `anode` is _not_ `NULL`, it receives the address of the cache node
+ * containing the bitmap, after increasing its reference count. This
+ * ensures that the node (as well as the image) will always be kept in
+ * the cache until you call @FTC_Node_Unref to 'release' it.
+ *
+ * If `anode` is `NULL`, the cache node is left unchanged, which means
+ * that the bitmap could be flushed out of the cache on the next call to
+ * one of the caching sub-system APIs. Don't assume that it is
+ * persistent!
+ */
FT_EXPORT( FT_Error )
FTC_SBitCache_Lookup( FTC_SBitCache cache,
FTC_ImageType type,
@@ -976,53 +1017,58 @@ FT_BEGIN_HEADER
FTC_Node *anode );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_SBitCache_LookupScaler */
- /* */
- /* <Description> */
- /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */
- /* to specify the face ID and its size. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source sbit cache. */
- /* */
- /* scaler :: A pointer to the scaler descriptor. */
- /* */
- /* load_flags :: The corresponding load flags. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* sbit :: A handle to a small bitmap descriptor. */
- /* */
- /* anode :: Used to return the address of the corresponding */
- /* cache node after incrementing its reference count */
- /* (see note below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The small bitmap descriptor and its bit buffer are owned by the */
- /* cache and should never be freed by the application. They might */
- /* as well disappear from memory on the next cache lookup, so don't */
- /* treat them as persistent data. */
- /* */
- /* The descriptor's `buffer' field is set to~0 to indicate a missing */
- /* glyph bitmap. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the bitmap, after increasing its reference count. */
- /* This ensures that the node (as well as the image) will always be */
- /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the bitmap could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FTC_SBitCache_LookupScaler
+ *
+ * @description:
+ * A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec to
+ * specify the face ID and its size.
+ *
+ * @input:
+ * cache ::
+ * A handle to the source sbit cache.
+ *
+ * scaler ::
+ * A pointer to the scaler descriptor.
+ *
+ * load_flags ::
+ * The corresponding load flags.
+ *
+ * gindex ::
+ * The glyph index.
+ *
+ * @output:
+ * sbit ::
+ * A handle to a small bitmap descriptor.
+ *
+ * anode ::
+ * Used to return the address of the corresponding cache node after
+ * incrementing its reference count (see note below).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The small bitmap descriptor and its bit buffer are owned by the cache
+ * and should never be freed by the application. They might as well
+ * disappear from memory on the next cache lookup, so don't treat them as
+ * persistent data.
+ *
+ * The descriptor's `buffer` field is set to~0 to indicate a missing
+ * glyph bitmap.
+ *
+ * If `anode` is _not_ `NULL`, it receives the address of the cache node
+ * containing the bitmap, after increasing its reference count. This
+ * ensures that the node (as well as the image) will always be kept in
+ * the cache until you call @FTC_Node_Unref to 'release' it.
+ *
+ * If `anode` is `NULL`, the cache node is left unchanged, which means
+ * that the bitmap could be flushed out of the cache on the next call to
+ * one of the caching sub-system APIs. Don't assume that it is
+ * persistent!
+ */
FT_EXPORT( FT_Error )
FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
FTC_Scaler scaler,
diff --git a/freetype/include/freetype/ftchapters.h b/freetype/include/freetype/ftchapters.h
index 51257bb7..2ee26973 100644
--- a/freetype/include/freetype/ftchapters.h
+++ b/freetype/include/freetype/ftchapters.h
@@ -1,139 +1,145 @@
-/***************************************************************************/
-/* */
-/* This file defines the structure of the FreeType reference. */
-/* It is used by the python script that generates the HTML files. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* general_remarks */
-/* */
-/* <Title> */
-/* General Remarks */
-/* */
-/* <Sections> */
-/* header_inclusion */
-/* user_allocation */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* core_api */
-/* */
-/* <Title> */
-/* Core API */
-/* */
-/* <Sections> */
-/* version */
-/* basic_types */
-/* base_interface */
-/* glyph_variants */
-/* glyph_management */
-/* mac_specific */
-/* sizes_management */
-/* header_file_macros */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* format_specific */
-/* */
-/* <Title> */
-/* Format-Specific API */
-/* */
-/* <Sections> */
-/* multiple_masters */
-/* truetype_tables */
-/* type1_tables */
-/* sfnt_names */
-/* bdf_fonts */
-/* cid_fonts */
-/* pfr_fonts */
-/* winfnt_fonts */
-/* font_formats */
-/* gasp_table */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* module_specific */
-/* */
-/* <Title> */
-/* Controlling FreeType Modules */
-/* */
-/* <Sections> */
-/* auto_hinter */
-/* cff_driver */
-/* t1_cid_driver */
-/* tt_driver */
-/* pcf_driver */
-/* properties */
-/* parameter_tags */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* cache_subsystem */
-/* */
-/* <Title> */
-/* Cache Sub-System */
-/* */
-/* <Sections> */
-/* cache_subsystem */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* support_api */
-/* */
-/* <Title> */
-/* Support API */
-/* */
-/* <Sections> */
-/* computations */
-/* list_processing */
-/* outline_processing */
-/* quick_advance */
-/* bitmap_handling */
-/* raster */
-/* glyph_stroker */
-/* system_interface */
-/* module_management */
-/* gzip */
-/* lzw */
-/* bzip2 */
-/* lcd_filtering */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* error_codes */
-/* */
-/* <Title> */
-/* Error Codes */
-/* */
-/* <Sections> */
-/* error_enumerations */
-/* error_code_values */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * This file defines the structure of the FreeType reference.
+ * It is used by the python script that generates the HTML files.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * general_remarks
+ *
+ * @title:
+ * General Remarks
+ *
+ * @sections:
+ * header_inclusion
+ * user_allocation
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * core_api
+ *
+ * @title:
+ * Core API
+ *
+ * @sections:
+ * version
+ * basic_types
+ * base_interface
+ * glyph_variants
+ * color_management
+ * layer_management
+ * glyph_management
+ * mac_specific
+ * sizes_management
+ * header_file_macros
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * format_specific
+ *
+ * @title:
+ * Format-Specific API
+ *
+ * @sections:
+ * multiple_masters
+ * truetype_tables
+ * type1_tables
+ * sfnt_names
+ * bdf_fonts
+ * cid_fonts
+ * pfr_fonts
+ * winfnt_fonts
+ * font_formats
+ * gasp_table
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * module_specific
+ *
+ * @title:
+ * Controlling FreeType Modules
+ *
+ * @sections:
+ * auto_hinter
+ * cff_driver
+ * t1_cid_driver
+ * tt_driver
+ * pcf_driver
+ * properties
+ * parameter_tags
+ * lcd_rendering
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * cache_subsystem
+ *
+ * @title:
+ * Cache Sub-System
+ *
+ * @sections:
+ * cache_subsystem
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * support_api
+ *
+ * @title:
+ * Support API
+ *
+ * @sections:
+ * computations
+ * list_processing
+ * outline_processing
+ * quick_advance
+ * bitmap_handling
+ * raster
+ * glyph_stroker
+ * system_interface
+ * module_management
+ * gzip
+ * lzw
+ * bzip2
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @chapter:
+ * error_codes
+ *
+ * @title:
+ * Error Codes
+ *
+ * @sections:
+ * error_enumerations
+ * error_code_values
+ *
+ */
+
+
+/* END */
diff --git a/freetype/include/freetype/ftcid.h b/freetype/include/freetype/ftcid.h
index 5e9100a6..8eafc1c7 100644
--- a/freetype/include/freetype/ftcid.h
+++ b/freetype/include/freetype/ftcid.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcid.h */
-/* */
-/* FreeType API for accessing CID font information (specification). */
-/* */
-/* Copyright 2007-2018 by */
-/* Dereg Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcid.h
+ *
+ * FreeType API for accessing CID font information (specification).
+ *
+ * Copyright (C) 2007-2019 by
+ * Dereg Clegg and Michael Toftdal.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTCID_H_
@@ -32,25 +32,25 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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
@@ -61,17 +61,17 @@ FT_BEGIN_HEADER
*
* @input:
* face ::
- * A handle to the input face.
+ * A handle to the input face.
*
* @output:
* registry ::
- * The registry, as a C~string, owned by the face.
+ * The registry, as a C~string, owned by the face.
*
* ordering ::
- * The ordering, as a C~string, owned by the face.
+ * The ordering, as a C~string, owned by the face.
*
* supplement ::
- * The supplement.
+ * The supplement.
*
* @return:
* FreeType error code. 0~means success.
@@ -90,30 +90,30 @@ FT_BEGIN_HEADER
FT_Int *supplement );
- /**********************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_CID_Is_Internally_CID_Keyed
*
* @description:
- * Retrieve the type of the input face, CID keyed or not. In
- * contrast to the @FT_IS_CID_KEYED macro this function returns
- * successfully also for CID-keyed fonts in an SFNT wrapper.
+ * Retrieve the type of the input face, CID keyed or not. In contrast
+ * to the @FT_IS_CID_KEYED macro this function returns successfully also
+ * for CID-keyed fonts in an SFNT wrapper.
*
* @input:
* face ::
- * A handle to the input face.
+ * A handle to the input face.
*
* @output:
* is_cid ::
- * The type of the face as an @FT_Bool.
+ * The type of the face as an @FT_Bool.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * This function only works with CID faces and OpenType fonts,
- * returning an error otherwise.
+ * This function only works with CID faces and OpenType fonts, returning
+ * an error otherwise.
*
* @since:
* 2.3.9
@@ -123,7 +123,7 @@ FT_BEGIN_HEADER
FT_Bool *is_cid );
- /**********************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_CID_From_Glyph_Index
@@ -133,21 +133,21 @@ FT_BEGIN_HEADER
*
* @input:
* face ::
- * A handle to the input face.
+ * A handle to the input face.
*
* glyph_index ::
- * The input glyph index.
+ * The input glyph index.
*
* @output:
* cid ::
- * The CID as an @FT_UInt.
+ * The CID as an @FT_UInt.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * This function only works with CID faces and OpenType fonts,
- * returning an error otherwise.
+ * This function only works with CID faces and OpenType fonts, returning
+ * an error otherwise.
*
* @since:
* 2.3.9
diff --git a/freetype/include/freetype/ftcolor.h b/freetype/include/freetype/ftcolor.h
new file mode 100644
index 00000000..cf180219
--- /dev/null
+++ b/freetype/include/freetype/ftcolor.h
@@ -0,0 +1,311 @@
+/****************************************************************************
+ *
+ * ftcolor.h
+ *
+ * FreeType's glyph color management (specification).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTCOLOR_H_
+#define FTCOLOR_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:
+ * color_management
+ *
+ * @title:
+ * Glyph Color Management
+ *
+ * @abstract:
+ * Retrieving and manipulating OpenType's 'CPAL' table data.
+ *
+ * @description:
+ * The functions described here allow access and manipulation of color
+ * palette entries in OpenType's 'CPAL' tables.
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Color
+ *
+ * @description:
+ * This structure models a BGRA color value of a 'CPAL' palette entry.
+ *
+ * The used color space is sRGB; the colors are not pre-multiplied, and
+ * alpha values must be explicitly set.
+ *
+ * @fields:
+ * blue ::
+ * Blue value.
+ *
+ * green ::
+ * Green value.
+ *
+ * red ::
+ * Red value.
+ *
+ * alpha ::
+ * Alpha value, giving the red, green, and blue color's opacity.
+ *
+ * @since:
+ * 2.10
+ */
+ typedef struct FT_Color_
+ {
+ FT_Byte blue;
+ FT_Byte green;
+ FT_Byte red;
+ FT_Byte alpha;
+
+ } FT_Color;
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_PALETTE_XXX
+ *
+ * @description:
+ * A list of bit field constants used in the `palette_flags` array of the
+ * @FT_Palette_Data structure to indicate for which background a palette
+ * with a given index is usable.
+ *
+ * @values:
+ * FT_PALETTE_FOR_LIGHT_BACKGROUND ::
+ * The palette is appropriate to use when displaying the font on a
+ * light background such as white.
+ *
+ * FT_PALETTE_FOR_DARK_BACKGROUND ::
+ * The palette is appropriate to use when displaying the font on a dark
+ * background such as black.
+ *
+ * @since:
+ * 2.10
+ */
+#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01
+#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Palette_Data
+ *
+ * @description:
+ * This structure holds the data of the 'CPAL' table.
+ *
+ * @fields:
+ * num_palettes ::
+ * The number of palettes.
+ *
+ * palette_name_ids ::
+ * A read-only array of palette name IDs with `num_palettes` elements,
+ * corresponding to entries like 'dark' or 'light' in the font's 'name'
+ * table.
+ *
+ * An empty name ID in the 'CPAL' table gets represented as value
+ * 0xFFFF.
+ *
+ * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
+ *
+ * palette_flags ::
+ * A read-only array of palette flags with `num_palettes` elements.
+ * Possible values are an ORed combination of
+ * @FT_PALETTE_FOR_LIGHT_BACKGROUND and
+ * @FT_PALETTE_FOR_DARK_BACKGROUND.
+ *
+ * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
+ *
+ * num_palette_entries ::
+ * The number of entries in a single palette. All palettes have the
+ * same size.
+ *
+ * palette_entry_name_ids ::
+ * A read-only array of palette entry name IDs with
+ * `num_palette_entries`. In each palette, entries with the same index
+ * have the same function. For example, index~0 might correspond to
+ * string 'outline' in the font's 'name' table to indicate that this
+ * palette entry is used for outlines, index~1 might correspond to
+ * 'fill' to indicate the filling color palette entry, etc.
+ *
+ * An empty entry name ID in the 'CPAL' table gets represented as value
+ * 0xFFFF.
+ *
+ * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
+ *
+ * @note:
+ * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
+ * name strings.
+ *
+ * @since:
+ * 2.10
+ */
+ typedef struct FT_Palette_Data_ {
+ FT_UShort num_palettes;
+ const FT_UShort* palette_name_ids;
+ const FT_UShort* palette_flags;
+
+ FT_UShort num_palette_entries;
+ const FT_UShort* palette_entry_name_ids;
+
+ } FT_Palette_Data;
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Palette_Data_Get
+ *
+ * @description:
+ * Retrieve the face's color palette data.
+ *
+ * @input:
+ * face ::
+ * The source face handle.
+ *
+ * @output:
+ * apalette ::
+ * A pointer to an @FT_Palette_Data structure.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * All arrays in the returned @FT_Palette_Data structure are read-only.
+ *
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
+ *
+ * @since:
+ * 2.10
+ */
+ FT_EXPORT( FT_Error )
+ FT_Palette_Data_Get( FT_Face face,
+ FT_Palette_Data *apalette );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Palette_Select
+ *
+ * @description:
+ * This function has two purposes.
+ *
+ * (1) It activates a palette for rendering color glyphs, and
+ *
+ * (2) it retrieves all (unmodified) color entries of this palette. This
+ * function returns a read-write array, which means that a calling
+ * application can modify the palette entries on demand.
+ *
+ * A corollary of (2) is that calling the function, then modifying some
+ * values, then calling the function again with the same arguments resets
+ * all color entries to the original 'CPAL' values; all user modifications
+ * are lost.
+ *
+ * @input:
+ * face ::
+ * The source face handle.
+ *
+ * palette_index ::
+ * The palette index.
+ *
+ * @output:
+ * apalette ::
+ * An array of color entries for a palette with index `palette_index`,
+ * having `num_palette_entries` elements (as found in the
+ * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no
+ * array gets returned (and no color entries can be modified).
+ *
+ * In case the font doesn't support color palettes, `NULL` is returned.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The array pointed to by `apalette_entries` is owned and managed by
+ * FreeType.
+ *
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
+ *
+ * @since:
+ * 2.10
+ */
+ FT_EXPORT( FT_Error )
+ FT_Palette_Select( FT_Face face,
+ FT_UShort palette_index,
+ FT_Color* *apalette );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Palette_Set_Foreground_Color
+ *
+ * @description:
+ * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground
+ * color'. This function sets this value.
+ *
+ * @input:
+ * face ::
+ * The source face handle.
+ *
+ * foreground_color ::
+ * An `FT_Color` structure to define the text foreground color.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * If this function isn't called, the text foreground color is set to
+ * white opaque (BGRA value 0xFFFFFFFF) if
+ * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette,
+ * and black opaque (BGRA value 0x000000FF) otherwise, including the case
+ * that no palette types are available in the 'CPAL' table.
+ *
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
+ *
+ * @since:
+ * 2.10
+ */
+ FT_EXPORT( FT_Error )
+ FT_Palette_Set_Foreground_Color( FT_Face face,
+ FT_Color foreground_color );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* FTCOLOR_H_ */
+
+
+/* END */
diff --git a/freetype/include/freetype/ftdriver.h b/freetype/include/freetype/ftdriver.h
index e90475b2..497bde9f 100644
--- a/freetype/include/freetype/ftdriver.h
+++ b/freetype/include/freetype/ftdriver.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftdriver.h */
-/* */
-/* FreeType API for controlling driver modules (specification only). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdriver.h
+ *
+ * FreeType API for controlling driver modules (specification only).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -50,8 +50,8 @@ FT_BEGIN_HEADER
* @FT_Property_Get. The following lists the available properties
* together with the necessary macros and structures.
*
- * Note that the auto-hinter's module name is `autofitter' for
- * historical reasons.
+ * Note that the auto-hinter's module name is 'autofitter' for historical
+ * reasons.
*
* Available properties are @increase-x-height, @no-stem-darkening
* (experimental), @darkening-parameters (experimental), @warping
@@ -74,18 +74,18 @@ FT_BEGIN_HEADER
* Controlling the CFF driver module.
*
* @description:
- * While FreeType's CFF driver doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
+ * While FreeType's CFF driver doesn't expose API functions by itself, it
+ * is possible to control its behaviour with @FT_Property_Set and
* @FT_Property_Get.
*
- * The CFF driver's module name is `cff'.
+ * The CFF driver's module name is 'cff'.
*
* Available properties are @hinting-engine, @no-stem-darkening,
* @darkening-parameters, and @random-seed, as documented in the
* @properties section.
*
*
- * *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
+ * **Hinting and antialiasing principles of the new engine**
*
* The rasterizer is positioning horizontal features (e.g., ascender
* height & x-height, or crossbars) on the pixel grid and minimizing the
@@ -93,35 +93,34 @@ FT_BEGIN_HEADER
* features (vertical stems) on the pixel grid without hinting, thus
* representing the stem position and weight accurately. Sometimes the
* vertical stems may be only partially black. In this context,
- * `antialiasing' means that stems are not positioned exactly on pixel
+ * 'antialiasing' means that stems are not positioned exactly on pixel
* borders, causing a fuzzy appearance.
*
* There are two principles behind this approach.
*
- * 1) No hinting in the horizontal direction: Unlike `superhinted'
+ * 1) No hinting in the horizontal direction: Unlike 'superhinted'
* TrueType, which changes glyph widths to accommodate regular
- * inter-glyph spacing, Adobe's approach is `faithful to the design' in
- * representing both the glyph width and the inter-glyph spacing
- * designed for the font. This makes the screen display as close as it
- * can be to the result one would get with infinite resolution, while
- * preserving what is considered the key characteristics of each glyph.
- * Note that the distances between unhinted and grid-fitted positions at
- * small sizes are comparable to kerning values and thus would be
- * noticeable (and distracting) while reading if hinting were applied.
+ * inter-glyph spacing, Adobe's approach is 'faithful to the design' in
+ * representing both the glyph width and the inter-glyph spacing designed
+ * for the font. This makes the screen display as close as it can be to
+ * the result one would get with infinite resolution, while preserving
+ * what is considered the key characteristics of each glyph. Note that
+ * the distances between unhinted and grid-fitted positions at small
+ * sizes are comparable to kerning values and thus would be noticeable
+ * (and distracting) while reading if hinting were applied.
*
* One of the reasons to not hint horizontally is antialiasing for LCD
- * screens: The pixel geometry of modern displays supplies three
- * vertical subpixels as the eye moves horizontally across each visible
- * pixel. On devices where we can be certain this characteristic is
- * present a rasterizer can take advantage of the subpixels to add
- * increments of weight. In Western writing systems this turns out to
- * be the more critical direction anyway; the weights and spacing of
- * vertical stems (see above) are central to Armenian, Cyrillic, Greek,
- * and Latin type designs. Even when the rasterizer uses greyscale
- * antialiasing instead of color (a necessary compromise when one
- * doesn't know the screen characteristics), the unhinted vertical
- * features preserve the design's weight and spacing much better than
- * aliased type would.
+ * screens: The pixel geometry of modern displays supplies three vertical
+ * subpixels as the eye moves horizontally across each visible pixel. On
+ * devices where we can be certain this characteristic is present a
+ * rasterizer can take advantage of the subpixels to add increments of
+ * weight. In Western writing systems this turns out to be the more
+ * critical direction anyway; the weights and spacing of vertical stems
+ * (see above) are central to Armenian, Cyrillic, Greek, and Latin type
+ * designs. Even when the rasterizer uses greyscale antialiasing instead
+ * of color (a necessary compromise when one doesn't know the screen
+ * characteristics), the unhinted vertical features preserve the design's
+ * weight and spacing much better than aliased type would.
*
* 2) Alignment in the vertical direction: Weights and spacing along the
* y~axis are less critical; what is much more important is the visual
@@ -132,16 +131,16 @@ FT_BEGIN_HEADER
*
* On the technical side, horizontal alignment zones for ascender,
* x-height, and other important height values (traditionally called
- * `blue zones') as defined in the font are positioned independently,
- * each being rounded to the nearest pixel edge, taking care of
- * overshoot suppression at small sizes, stem darkening, and scaling.
+ * 'blue zones') as defined in the font are positioned independently,
+ * each being rounded to the nearest pixel edge, taking care of overshoot
+ * suppression at small sizes, stem darkening, and scaling.
*
* Hstems (this is, hint values defined in the font to help align
* horizontal features) that fall within a blue zone are said to be
- * `captured' and are aligned to that zone. Uncaptured stems are moved
+ * 'captured' and are aligned to that zone. Uncaptured stems are moved
* in one of four ways, top edge up or down, bottom edge up or down.
- * Unless there are conflicting hstems, the smallest movement is taken
- * to minimize distortion.
+ * Unless there are conflicting hstems, the smallest movement is taken to
+ * minimize distortion.
*
*/
@@ -158,13 +157,13 @@ FT_BEGIN_HEADER
* Controlling the PCF driver module.
*
* @description:
- * While FreeType's PCF driver doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
+ * While FreeType's PCF driver doesn't expose API functions by itself, it
+ * is possible to control its behaviour with @FT_Property_Set and
* @FT_Property_Get. Right now, there is a single property
* @no-long-family-names available if FreeType is compiled with
* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
*
- * The PCF driver's module name is `pcf'.
+ * The PCF driver's module name is 'pcf'.
*
*/
@@ -187,15 +186,15 @@ FT_BEGIN_HEADER
* Behind the scenes, both drivers use the Adobe CFF engine for hinting;
* however, the used properties must be specified separately.
*
- * The Type~1 driver's module name is `type1'; the CID driver's module
- * name is `t1cid'.
+ * The Type~1 driver's module name is 'type1'; the CID driver's module
+ * name is 't1cid'.
*
* Available properties are @hinting-engine, @no-stem-darkening,
* @darkening-parameters, and @random-seed, as documented in the
* @properties section.
*
- * Please see the @cff_driver section for more details on the new
- * hinting engine.
+ * Please see the @cff_driver section for more details on the new hinting
+ * engine.
*
*/
@@ -217,7 +216,7 @@ FT_BEGIN_HEADER
* and @FT_Property_Get. The following lists the available properties
* together with the necessary macros and structures.
*
- * The TrueType driver's module name is `truetype'.
+ * The TrueType driver's module name is 'truetype'.
*
* A single property @interpreter-version is available, as documented in
* the @properties section.
@@ -225,36 +224,36 @@ FT_BEGIN_HEADER
* We start with a list of definitions, kindly provided by Greg
* Hitchcock.
*
- * _Bi-Level_ _Rendering_
+ * _Bi-Level Rendering_
*
* Monochromatic rendering, exclusively used in the early days of
* TrueType by both Apple and Microsoft. Microsoft's GDI interface
* supported hinting of the right-side bearing point, such that the
* advance width could be non-linear. Most often this was done to
* achieve some level of glyph symmetry. To enable reasonable
- * performance (e.g., not having to run hinting on all glyphs just to
- * get the widths) there was a bit in the head table indicating if the
- * side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
- * cache hinting widths across multiple sizes and device aspect ratios.
+ * performance (e.g., not having to run hinting on all glyphs just to get
+ * the widths) there was a bit in the head table indicating if the side
+ * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache
+ * hinting widths across multiple sizes and device aspect ratios.
*
- * _Font_ _Smoothing_
+ * _Font Smoothing_
*
* Microsoft's GDI implementation of anti-aliasing. Not traditional
* anti-aliasing as the outlines were hinted before the sampling. The
* widths matched the bi-level rendering.
*
- * _ClearType_ _Rendering_
+ * _ClearType Rendering_
*
* Technique that uses physical subpixels to improve rendering on LCD
* (and other) displays. Because of the higher resolution, many methods
- * of improving symmetry in glyphs through hinting the right-side
- * bearing were no longer necessary. This lead to what GDI calls
- * `natural widths' ClearType, see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting
+ * of improving symmetry in glyphs through hinting the right-side bearing
+ * were no longer necessary. This lead to what GDI calls 'natural
+ * widths' ClearType, see
+ * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting
* has extra resolution, most non-linearity went away, but it is still
* possible for hints to change the advance widths in this mode.
*
- * _ClearType_ _Compatible_ _Widths_
+ * _ClearType Compatible Widths_
*
* One of the earliest challenges with ClearType was allowing the
* implementation in GDI to be selected without requiring all UI and
@@ -263,41 +262,41 @@ FT_BEGIN_HEADER
* to determine the width in bi-level rendering, and then re-run in
* ClearType, with the difference in widths being absorbed in the font
* hints for ClearType (mostly in the white space of hints); see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by
+ * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by
* definition, compatible width ClearType allows for non-linear widths,
* but only when the bi-level version has non-linear widths.
*
- * _ClearType_ _Subpixel_ _Positioning_
+ * _ClearType Subpixel Positioning_
*
* One of the nice benefits of ClearType is the ability to more crisply
* display fractional widths; unfortunately, the GDI model of integer
* bitmaps did not support this. However, the WPF and Direct Write
- * frameworks do support fractional widths. DWrite calls this `natural
- * mode', not to be confused with GDI's `natural widths'. Subpixel
+ * frameworks do support fractional widths. DWrite calls this 'natural
+ * mode', not to be confused with GDI's 'natural widths'. Subpixel
* positioning, in the current implementation of Direct Write,
* unfortunately does not support hinted advance widths, see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the
+ * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the
* TrueType interpreter fully allows the advance width to be adjusted in
* this mode, just the DWrite client will ignore those changes.
*
- * _ClearType_ _Backward_ _Compatibility_
+ * _ClearType Backward Compatibility_
*
* This is a set of exceptions made in the TrueType interpreter to
* minimize hinting techniques that were problematic with the extra
* resolution of ClearType; see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
+ * http://rastertragedy.com/RTRCh4.htm#Sec1 and
* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
- * This technique is not to be confused with ClearType compatible
- * widths. ClearType backward compatibility has no direct impact on
- * changing advance widths, but there might be an indirect impact on
- * disabling some deltas. This could be worked around in backward
- * compatibility mode.
+ * This technique is not to be confused with ClearType compatible widths.
+ * ClearType backward compatibility has no direct impact on changing
+ * advance widths, but there might be an indirect impact on disabling
+ * some deltas. This could be worked around in backward compatibility
+ * mode.
*
- * _Native_ _ClearType_ _Mode_
+ * _Native ClearType Mode_
*
- * (Not to be confused with `natural widths'.) This mode removes all
- * the exceptions in the TrueType interpreter when running with
- * ClearType. Any issues on widths would still apply, though.
+ * (Not to be confused with 'natural widths'.) This mode removes all the
+ * exceptions in the TrueType interpreter when running with ClearType.
+ * Any issues on widths would still apply, though.
*
*/
@@ -328,8 +327,8 @@ FT_BEGIN_HEADER
* FT_HINTING_XXX
*
* @description:
- * A list of constants used for the @hinting-engine property to
- * select the hinting engine for CFF, Type~1, and CID fonts.
+ * A list of constants used for the @hinting-engine property to select
+ * the hinting engine for CFF, Type~1, and CID fonts.
*
* @values:
* FT_HINTING_FREETYPE ::
@@ -356,45 +355,46 @@ FT_BEGIN_HEADER
* hinting-engine
*
* @description:
- * Thanks to Adobe, which contributed a new hinting (and parsing)
- * engine, an application can select between `freetype' and `adobe' if
- * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration
- * macro isn't defined, `hinting-engine' does nothing.
+ * Thanks to Adobe, which contributed a new hinting (and parsing) engine,
+ * an application can select between 'freetype' and 'adobe' if compiled
+ * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro
+ * isn't defined, 'hinting-engine' does nothing.
*
* The same holds for the Type~1 and CID modules if compiled with
- * T1_CONFIG_OPTION_OLD_ENGINE.
+ * `T1_CONFIG_OPTION_OLD_ENGINE`.
*
- * For the `cff' module, the default engine is `freetype' if
- * CFF_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe' otherwise.
+ * For the 'cff' module, the default engine is 'freetype' if
+ * `CFF_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe' otherwise.
*
- * For both the `type1' and `t1cid' modules, the default engine is
- * `freetype' if T1_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe'
+ * For both the 'type1' and 't1cid' modules, the default engine is
+ * 'freetype' if `T1_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe'
* otherwise.
*
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
+ * variable (using values 'adobe' or 'freetype').
+ *
+ * @example:
* The following example code demonstrates how to select Adobe's hinting
- * engine for the `cff' module (omitting the error handling).
+ * engine for the 'cff' module (omitting the error handling).
*
- * {
+ * ```
* FT_Library library;
- * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
+ * FT_UInt hinting_engine = FT_HINTING_ADOBE;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "cff",
* "hinting-engine", &hinting_engine );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values `adobe' or `freetype').
+ * ```
*
* @since:
- * 2.4.12 (for `cff' module)
+ * 2.4.12 (for 'cff' module)
*
- * 2.9 (for `type1' and `t1cid' modules)
+ * 2.9 (for 'type1' and 't1cid' modules)
*
*/
@@ -405,10 +405,10 @@ FT_BEGIN_HEADER
* no-stem-darkening
*
* @description:
- * All glyphs that pass through the auto-hinter will be emboldened
- * unless this property is set to TRUE. The same is true for the CFF,
- * Type~1, and CID font modules if the `Adobe' engine is selected (which
- * is the default).
+ * All glyphs that pass through the auto-hinter will be emboldened unless
+ * this property is set to TRUE. The same is true for the CFF, Type~1,
+ * and CID font modules if the 'Adobe' engine is selected (which is the
+ * default).
*
* Stem darkening emboldens glyphs at smaller sizes to make them more
* readable on common low-DPI screens when using linear alpha blending
@@ -419,30 +419,38 @@ FT_BEGIN_HEADER
* Gamma correction essentially lightens fonts since shades of grey are
* shifted to higher pixel values (=~higher brightness) to match the
* original intention to the reality of our screens. The side-effect is
- * that glyphs `thin out'. Mac OS~X and Adobe's proprietary font
+ * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font
* rendering library implement a counter-measure: stem darkening at
* smaller sizes where shades of gray dominate. By emboldening a glyph
* slightly in relation to its pixel size, individual pixels get higher
- * coverage of filled-in outlines and are therefore `blacker'. This
- * counteracts the `thinning out' of glyphs, making text remain readable
+ * coverage of filled-in outlines and are therefore 'blacker'. This
+ * counteracts the 'thinning out' of glyphs, making text remain readable
* at smaller sizes.
*
* By default, the Adobe engines for CFF, Type~1, and CID fonts darken
- * stems at smaller sizes, regardless of hinting, to enhance contrast.
+ * stems at smaller sizes, regardless of hinting, to enhance contrast.
* Setting this property, stem darkening gets switched off.
*
- * For the auto-hinter, stem-darkening is experimental currently and
- * thus switched off by default (this is, `no-stem-darkening' is set to
- * TRUE by default). Total consistency with the CFF driver is not
- * achieved right now because the emboldening method differs and glyphs
- * must be scaled down on the Y-axis to keep outline points inside their
+ * For the auto-hinter, stem-darkening is experimental currently and thus
+ * switched off by default (this is, `no-stem-darkening` is set to TRUE
+ * by default). Total consistency with the CFF driver is not achieved
+ * right now because the emboldening method differs and glyphs must be
+ * scaled down on the Y-axis to keep outline points inside their
* precomputed blue zones. The smaller the size (especially 9ppem and
* down), the higher the loss of emboldening versus the CFF driver.
*
- * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is
- * set.
+ * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
+ * variable (using values 1 and 0 for 'on' and 'off', respectively). It
+ * can also be set per face using @FT_Face_Properties with
+ * @FT_PARAM_TAG_STEM_DARKENING.
*
- * {
+ * @example:
+ * ```
* FT_Library library;
* FT_Bool no_stem_darkening = TRUE;
*
@@ -451,22 +459,14 @@ FT_BEGIN_HEADER
*
* FT_Property_Set( library, "cff",
* "no-stem-darkening", &no_stem_darkening );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
- * It can also be set per face using @FT_Face_Properties with
- * @FT_PARAM_TAG_STEM_DARKENING.
+ * ```
*
* @since:
- * 2.4.12 (for `cff' module)
+ * 2.4.12 (for 'cff' module)
*
- * 2.6.2 (for `autofitter' module)
+ * 2.6.2 (for 'autofitter' module)
*
- * 2.9 (for `type1' and `t1cid' modules)
+ * 2.9 (for 'type1' and 't1cid' modules)
*
*/
@@ -478,43 +478,29 @@ FT_BEGIN_HEADER
*
* @description:
* By default, the Adobe hinting engine, as used by the CFF, Type~1, and
- * CID font drivers, darkens stems as follows (if the
- * `no-stem-darkening' property isn't set):
+ * CID font drivers, darkens stems as follows (if the `no-stem-darkening`
+ * property isn't set):
*
- * {
+ * ```
* stem width <= 0.5px: darkening amount = 0.4px
* stem width = 1px: darkening amount = 0.275px
* stem width = 1.667px: darkening amount = 0.275px
* stem width >= 2.333px: darkening amount = 0px
- * }
+ * ```
*
* and piecewise linear in-between. At configuration time, these four
* control points can be set with the macro
- * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'; the CFF, Type~1, and CID
+ * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID
* drivers share these values. At runtime, the control points can be
- * changed using the `darkening-parameters' property, as the following
- * example demonstrates for the Type~1 driver.
- *
- * {
- * FT_Library library;
- * FT_Int darken_params[8] = { 500, 300, // x1, y1
- * 1000, 200, // x2, y2
- * 1500, 100, // x3, y3
- * 2000, 0 }; // x4, y4
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "type1",
- * "darkening-parameters", darken_params );
- * }
+ * changed using the `darkening-parameters` property (see the example
+ * below that demonstrates this for the Type~1 driver).
*
* The x~values give the stem width, and the y~values the darkening
* amount. The unit is 1000th of pixels. All coordinate values must be
- * positive; the x~values must be monotonically increasing; the
- * y~values must be monotonically decreasing and smaller than or
- * equal to 500 (corresponding to half a pixel); the slope of each
- * linear piece must be shallower than -1 (e.g., -.4).
+ * positive; the x~values must be monotonically increasing; the y~values
+ * must be monotonically decreasing and smaller than or equal to 500
+ * (corresponding to half a pixel); the slope of each linear piece must
+ * be shallower than -1 (e.g., -.4).
*
* The auto-hinter provides this property, too, as an experimental
* feature. See @no-stem-darkening for more.
@@ -522,21 +508,36 @@ FT_BEGIN_HEADER
* @note:
* This property can be used with @FT_Property_Get also.
*
- * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
* variable, using eight comma-separated integers without spaces. Here
- * the above example, using `\' to break the line for readability.
+ * the above example, using `\` to break the line for readability.
*
- * {
+ * ```
* FREETYPE_PROPERTIES=\
* type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
- * }
+ * ```
+ *
+ * @example:
+ * ```
+ * FT_Library library;
+ * FT_Int darken_params[8] = { 500, 300, // x1, y1
+ * 1000, 200, // x2, y2
+ * 1500, 100, // x3, y3
+ * 2000, 0 }; // x4, y4
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "type1",
+ * "darkening-parameters", darken_params );
+ * ```
*
* @since:
- * 2.5.1 (for `cff' module)
+ * 2.5.1 (for 'cff' module)
*
- * 2.6.2 (for `autofitter' module)
+ * 2.6.2 (for 'autofitter' module)
*
- * 2.9 (for `type1' and `t1cid' modules)
+ * 2.9 (for 'type1' and 't1cid' modules)
*
*/
@@ -547,29 +548,29 @@ FT_BEGIN_HEADER
* random-seed
*
* @description:
- * By default, the seed value for the CFF `random' operator and the
- * similar `0 28 callothersubr pop' command for the Type~1 and CID
+ * By default, the seed value for the CFF 'random' operator and the
+ * similar '0 28 callothersubr pop' command for the Type~1 and CID
* drivers is set to a random value. However, mainly for debugging
- * purposes, it is often necessary to use a known value as a seed so
- * that the pseudo-random number sequences generated by `random' are
+ * purposes, it is often necessary to use a known value as a seed so that
+ * the pseudo-random number sequences generated by 'random' are
* repeatable.
*
- * The `random-seed' property does that. Its argument is a signed 32bit
+ * The `random-seed` property does that. Its argument is a signed 32bit
* integer; if the value is zero or negative, the seed given by the
- * `intitialRandomSeed' private DICT operator in a CFF file gets used
- * (or a default value if there is no such operator). If the value is
- * positive, use it instead of `initialRandomSeed', which is
- * consequently ignored.
+ * `intitialRandomSeed` private DICT operator in a CFF file gets used (or
+ * a default value if there is no such operator). If the value is
+ * positive, use it instead of `initialRandomSeed`, which is consequently
+ * ignored.
*
* @note:
- * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
* variable. It can also be set per face using @FT_Face_Properties with
* @FT_PARAM_TAG_RANDOM_SEED.
*
* @since:
- * 2.8 (for `cff' module)
+ * 2.8 (for 'cff' module)
*
- * 2.9 (for `type1' and `t1cid' modules)
+ * 2.9 (for 'type1' and 't1cid' modules)
*
*/
@@ -580,21 +581,28 @@ FT_BEGIN_HEADER
* no-long-family-names
*
* @description:
- * If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
+ * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling
* FreeType, the PCF driver constructs long family names.
*
- * There are many PCF fonts just called `Fixed' which look completely
+ * There are many PCF fonts just called 'Fixed' which look completely
* different, and which have nothing to do with each other. When
- * selecting `Fixed' in KDE or Gnome one gets results that appear rather
- * random, the style changes often if one changes the size and one
- * cannot select some fonts at all. The improve this situation, the PCF
- * module prepends the foundry name (plus a space) to the family name.
- * It also checks whether there are `wide' characters; all put together,
- * family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
+ * selecting 'Fixed' in KDE or Gnome one gets results that appear rather
+ * random, the style changes often if one changes the size and one cannot
+ * select some fonts at all. The improve this situation, the PCF module
+ * prepends the foundry name (plus a space) to the family name. It also
+ * checks whether there are 'wide' characters; all put together, family
+ * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed.
+ *
+ * If `no-long-family-names` is set, this feature gets switched off.
*
- * If `no-long-family-names' is set, this feature gets switched off.
+ * @note:
+ * This property can be used with @FT_Property_Get also.
*
- * {
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
+ * variable (using values 1 and 0 for 'on' and 'off', respectively).
+ *
+ * @example:
+ * ```
* FT_Library library;
* FT_Bool no_long_family_names = TRUE;
*
@@ -604,13 +612,7 @@ FT_BEGIN_HEADER
* FT_Property_Set( library, "pcf",
* "no-long-family-names",
* &no_long_family_names );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
+ * ```
*
* @since:
* 2.8
@@ -626,8 +628,8 @@ FT_BEGIN_HEADER
* A list of constants used for the @interpreter-version property to
* select the hinting engine for Truetype fonts.
*
- * The numeric value in the constant names represents the version
- * number as returned by the `GETINFO' bytecode instruction.
+ * The numeric value in the constant names represents the version number
+ * as returned by the 'GETINFO' bytecode instruction.
*
* @values:
* TT_INTERPRETER_VERSION_35 ::
@@ -638,38 +640,37 @@ FT_BEGIN_HEADER
* Version~38 corresponds to MS rasterizer v.1.9; it is roughly
* equivalent to the hinting provided by DirectWrite ClearType (as can
* be found, for example, in the Internet Explorer~9 running on
- * Windows~7). It is used in FreeType to select the `Infinality'
- * subpixel hinting code. The code may be removed in a future
- * version.
+ * Windows~7). It is used in FreeType to select the 'Infinality'
+ * subpixel hinting code. The code may be removed in a future version.
*
* TT_INTERPRETER_VERSION_40 ::
* Version~40 corresponds to MS rasterizer v.2.1; it is roughly
* equivalent to the hinting provided by DirectWrite ClearType (as can
* be found, for example, in Microsoft's Edge Browser on Windows~10).
- * It is used in FreeType to select the `minimal' subpixel hinting
+ * It is used in FreeType to select the 'minimal' subpixel hinting
* code, a stripped-down and higher performance version of the
- * `Infinality' code.
+ * 'Infinality' code.
*
* @note:
- * This property controls the behaviour of the bytecode interpreter
- * and thus how outlines get hinted. It does *not* control how glyph
- * get rasterized! In particular, it does not control subpixel color
+ * This property controls the behaviour of the bytecode interpreter and
+ * thus how outlines get hinted. It does **not** control how glyph get
+ * rasterized! In particular, it does not control subpixel color
* filtering.
*
* If FreeType has not been compiled with the configuration option
- * TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
- * an `FT_Err_Unimplemented_Feature' error.
+ * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes
+ * an `FT_Err_Unimplemented_Feature` error.
*
- * Depending on the graphics framework, Microsoft uses different
- * bytecode and rendering engines. As a consequence, the version
- * numbers returned by a call to the `GETINFO' bytecode instruction are
- * more convoluted than desired.
+ * Depending on the graphics framework, Microsoft uses different bytecode
+ * and rendering engines. As a consequence, the version numbers returned
+ * by a call to the 'GETINFO' bytecode instruction are more convoluted
+ * than desired.
*
- * Here are two tables that try to shed some light on the possible
- * values for the MS rasterizer engine, together with the additional
- * features introduced by it.
+ * Here are two tables that try to shed some light on the possible values
+ * for the MS rasterizer engine, together with the additional features
+ * introduced by it.
*
- * {
+ * ```
* GETINFO framework version feature
* -------------------------------------------------------------------
* 3 GDI (Win 3.1), v1.0 16-bit, first version
@@ -692,15 +693,15 @@ FT_BEGIN_HEADER
* 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
* DWrite (Win 8) in GETINFO opcode,
* Gray ClearType
- * }
+ * ```
*
- * The `version' field gives a rough orientation only, since some
+ * The 'version' field gives a rough orientation only, since some
* applications provided certain features much earlier (as an example,
* Microsoft Reader used subpixel and Y-direction ClearType already in
* Windows 2000). Similarly, updates to a given framework might include
* improved hinting support.
*
- * {
+ * ```
* version sampling rendering comment
* x y x y
* --------------------------------------------------------------
@@ -710,38 +711,38 @@ FT_BEGIN_HEADER
* v1.9 high high color-filter gray Color ClearType
* v2.1 high normal gray B/W Gray ClearType
* v2.1 high high gray gray Gray ClearType
- * }
+ * ```
*
* Color and Gray ClearType are the two available variants of
- * `Y-direction ClearType', meaning grayscale rasterization along the
+ * 'Y-direction ClearType', meaning grayscale rasterization along the
* Y-direction; the name used in the TrueType specification for this
- * feature is `symmetric smoothing'. `Classic ClearType' is the
- * original algorithm used before introducing a modified version in
- * Win~XP. Another name for v1.6's grayscale rendering is `font
- * smoothing', and `Color ClearType' is sometimes also called `DWrite
- * ClearType'. To differentiate between today's Color ClearType and the
- * earlier ClearType variant with B/W rendering along the vertical axis,
- * the latter is sometimes called `GDI ClearType'.
- *
- * `Normal' and `high' sampling describe the (virtual) resolution to
- * access the rasterized outline after the hinting process. `Normal'
+ * feature is 'symmetric smoothing'. 'Classic ClearType' is the original
+ * algorithm used before introducing a modified version in Win~XP.
+ * Another name for v1.6's grayscale rendering is 'font smoothing', and
+ * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To
+ * differentiate between today's Color ClearType and the earlier
+ * ClearType variant with B/W rendering along the vertical axis, the
+ * latter is sometimes called 'GDI ClearType'.
+ *
+ * 'Normal' and 'high' sampling describe the (virtual) resolution to
+ * access the rasterized outline after the hinting process. 'Normal'
* means 1 sample per grid line (i.e., B/W). In the current Microsoft
- * implementation, `high' means an extra virtual resolution of 16x16 (or
- * 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
+ * implementation, 'high' means an extra virtual resolution of 16x16 (or
+ * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'.
* After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
* lines for color filtering if Color ClearType is activated.
*
- * Note that `Gray ClearType' is essentially the same as v1.6's
- * grayscale rendering. However, the GETINFO instruction handles it
- * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
- * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
- * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
- * the version~1 gasp table exclusively (like Color ClearType), while
- * v1.6 only respects the values of version~0 (bits 0 and~1).
+ * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale
+ * rendering. However, the GETINFO instruction handles it differently:
+ * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns
+ * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19
+ * (Gray ClearType). Also, this mode respects bits 2 and~3 for the
+ * version~1 gasp table exclusively (like Color ClearType), while v1.6
+ * only respects the values of version~0 (bits 0 and~1).
*
- * Keep in mind that the features of the above interpreter versions
- * might not map exactly to FreeType features or behavior because it is
- * a fundamentally different library with different internals.
+ * Keep in mind that the features of the above interpreter versions might
+ * not map exactly to FreeType features or behavior because it is a
+ * fundamentally different library with different internals.
*
*/
#define TT_INTERPRETER_VERSION_35 35
@@ -755,33 +756,40 @@ FT_BEGIN_HEADER
* interpreter-version
*
* @description:
- * Currently, three versions are available, two representing the
- * bytecode interpreter with subpixel hinting support (old `Infinality'
- * code and new stripped-down and higher performance `minimal' code) and
- * one without, respectively. The default is subpixel support if
- * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
- * otherwise (since it isn't available then).
+ * Currently, three versions are available, two representing the bytecode
+ * interpreter with subpixel hinting support (old 'Infinality' code and
+ * new stripped-down and higher performance 'minimal' code) and one
+ * without, respectively. The default is subpixel support if
+ * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel
+ * support otherwise (since it isn't available then).
*
* If subpixel hinting is on, many TrueType bytecode instructions behave
- * differently compared to B/W or grayscale rendering (except if `native
+ * differently compared to B/W or grayscale rendering (except if 'native
* ClearType' is selected by the font). Microsoft's main idea is to
* render at a much increased horizontal resolution, then sampling down
* the created output to subpixel precision. However, many older fonts
- * are not suited to this and must be specially taken care of by
- * applying (hardcoded) tweaks in Microsoft's interpreter.
+ * are not suited to this and must be specially taken care of by applying
+ * (hardcoded) tweaks in Microsoft's interpreter.
*
* Details on subpixel hinting and some of the necessary tweaks can be
* found in Greg Hitchcock's whitepaper at
- * `https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
- * Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
+ * 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
+ * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2,
* or 6x5 supersampling) like discussed in the paper. Depending on the
* chosen interpreter, it simply ignores instructions on vertical stems
* to arrive at very similar results.
*
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
+ * variable (using values '35', '38', or '40').
+ *
+ * @example:
* The following example code demonstrates how to deactivate subpixel
* hinting (omitting the error handling).
*
- * {
+ * ```
* FT_Library library;
* FT_Face face;
* FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
@@ -792,13 +800,7 @@ FT_BEGIN_HEADER
* FT_Property_Set( library, "truetype",
* "interpreter-version",
* &interpreter_version );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values `35', `38', or `40').
+ * ```
*
* @since:
* 2.5
@@ -811,7 +813,7 @@ FT_BEGIN_HEADER
* glyph-to-script-map
*
* @description:
- * *Experimental* *only*
+ * **Experimental only**
*
* The auto-hinter provides various script modules to hint glyphs.
* Examples of supported scripts are Latin or CJK. Before a glyph is
@@ -819,25 +821,26 @@ FT_BEGIN_HEADER
* the script is then determined based on Unicode character ranges, see
* below.
*
- * OpenType fonts, however, often provide much more glyphs than
- * character codes (small caps, superscripts, ligatures, swashes, etc.),
- * to be controlled by so-called `features'. Handling OpenType features
- * can be quite complicated and thus needs a separate library on top of
+ * OpenType fonts, however, often provide much more glyphs than character
+ * codes (small caps, superscripts, ligatures, swashes, etc.), to be
+ * controlled by so-called 'features'. Handling OpenType features can be
+ * quite complicated and thus needs a separate library on top of
* FreeType.
*
* The mapping between glyph indices and scripts (in the auto-hinter
- * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
- * array with `num_glyphs' elements, as found in the font's @FT_Face
- * structure. The `glyph-to-script-map' property returns a pointer to
- * this array, which can be modified as needed. Note that the
- * modification should happen before the first glyph gets processed by
- * the auto-hinter so that the global analysis of the font shapes
- * actually uses the modified mapping.
- *
- * The following example code demonstrates how to access it (omitting
- * the error handling).
- *
- * {
+ * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array
+ * with `num_glyphs` elements, as found in the font's @FT_Face structure.
+ * The `glyph-to-script-map` property returns a pointer to this array,
+ * which can be modified as needed. Note that the modification should
+ * happen before the first glyph gets processed by the auto-hinter so
+ * that the global analysis of the font shapes actually uses the modified
+ * mapping.
+ *
+ * @example:
+ * The following example code demonstrates how to access it (omitting the
+ * error handling).
+ *
+ * ```
* FT_Library library;
* FT_Face face;
* FT_Prop_GlyphToScriptMap prop;
@@ -854,7 +857,7 @@ FT_BEGIN_HEADER
* // adjust `prop.map' as needed right here
*
* FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
- * }
+ * ```
*
* @since:
* 2.4.11
@@ -868,7 +871,7 @@ FT_BEGIN_HEADER
* FT_AUTOHINTER_SCRIPT_XXX
*
* @description:
- * *Experimental* *only*
+ * **Experimental only**
*
* A list of constants used for the @glyph-to-script-map property to
* specify the script submodule the auto-hinter should use for hinting a
@@ -879,14 +882,14 @@ FT_BEGIN_HEADER
* Don't auto-hint this glyph.
*
* FT_AUTOHINTER_SCRIPT_LATIN ::
- * Apply the latin auto-hinter. For the auto-hinter, `latin' is a
- * very broad term, including Cyrillic and Greek also since characters
- * from those scripts share the same design constraints.
+ * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very
+ * broad term, including Cyrillic and Greek also since characters from
+ * those scripts share the same design constraints.
*
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
- * {
+ * ```
* U+0020 - U+007F // Basic Latin (no control characters)
* U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
* U+0100 - U+017F // Latin Extended-A
@@ -915,7 +918,7 @@ FT_BEGIN_HEADER
* U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
* U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
* U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
- * }
+ * ```
*
* FT_AUTOHINTER_SCRIPT_CJK ::
* Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
@@ -924,7 +927,7 @@ FT_BEGIN_HEADER
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
- * {
+ * ```
* U+1100 - U+11FF // Hangul Jamo
* U+2E80 - U+2EFF // CJK Radicals Supplement
* U+2F00 - U+2FDF // Kangxi Radicals
@@ -957,7 +960,7 @@ FT_BEGIN_HEADER
* U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
* U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
* U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
- * }
+ * ```
*
* FT_AUTOHINTER_SCRIPT_INDIC ::
* Apply the indic auto-hinter, covering all major scripts from the
@@ -967,7 +970,7 @@ FT_BEGIN_HEADER
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
- * {
+ * ```
* U+0900 - U+0DFF // Indic Range
* U+0F00 - U+0FFF // Tibetan
* U+1900 - U+194F // Limbu
@@ -975,7 +978,7 @@ FT_BEGIN_HEADER
* U+A800 - U+A82F // Syloti Nagri
* U+ABC0 - U+ABFF // Meetei Mayek
* U+11800 - U+118DF // Sharada
- * }
+ * ```
*
* Note that currently Indic support is rudimentary only, missing blue
* zone support.
@@ -996,7 +999,7 @@ FT_BEGIN_HEADER
* FT_Prop_GlyphToScriptMap
*
* @description:
- * *Experimental* *only*
+ * **Experimental only**
*
* The data exchange structure for the @glyph-to-script-map property.
*
@@ -1018,36 +1021,36 @@ FT_BEGIN_HEADER
* fallback-script
*
* @description:
- * *Experimental* *only*
- *
- * If no auto-hinter script module can be assigned to a glyph, a
- * fallback script gets assigned to it (see also the
- * @glyph-to-script-map property). By default, this is
- * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
- * this fallback value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
+ * **Experimental only**
*
- * FT_Property_Set( library, "autofitter",
- * "fallback-script", &fallback_script );
- * }
+ * If no auto-hinter script module can be assigned to a glyph, a fallback
+ * script gets assigned to it (see also the @glyph-to-script-map
+ * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the
+ * `fallback-script` property, this fallback value can be changed.
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * fallback script value gets triggered either by setting or reading a
+ * creation of the glyph-to-script map that eventually uses the fallback
+ * script value gets triggered either by setting or reading a
* face-specific property like @glyph-to-script-map, or by auto-hinting
* any glyph from that face. In particular, if you have already created
* an @FT_Face structure but not loaded any glyph (using the
* auto-hinter), a change of the fallback script will affect this face.
*
+ * @example:
+ * ```
+ * FT_Library library;
+ * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "fallback-script", &fallback_script );
+ * ```
+ *
* @since:
* 2.4.11
*
@@ -1060,42 +1063,43 @@ FT_BEGIN_HEADER
* default-script
*
* @description:
- * *Experimental* *only*
+ * **Experimental only**
*
- * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
- * the HarfBuzz library access OpenType features for getting better
- * glyph coverages, this property sets the (auto-fitter) script to be
- * used for the default (OpenType) script data of a font's GSUB table.
- * Features for the default script are intended for all scripts not
- * explicitly handled in GSUB; an example is a `dlig' feature,
- * containing the combination of the characters `T', `E', and `L' to
- * form a `TEL' ligature.
+ * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make
+ * the HarfBuzz library access OpenType features for getting better glyph
+ * coverages, this property sets the (auto-fitter) script to be used for
+ * the default (OpenType) script data of a font's GSUB table. Features
+ * for the default script are intended for all scripts not explicitly
+ * handled in GSUB; an example is a 'dlig' feature, containing the
+ * combination of the characters 'T', 'E', and 'L' to form a 'TEL'
+ * ligature.
*
* By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
- * `default-script' property, this default value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "default-script", &default_script );
- * }
+ * `default-script` property, this default value can be changed.
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * default script value gets triggered either by setting or reading a
+ * creation of the glyph-to-script map that eventually uses the default
+ * script value gets triggered either by setting or reading a
* face-specific property like @glyph-to-script-map, or by auto-hinting
* any glyph from that face. In particular, if you have already created
* an @FT_Face structure but not loaded any glyph (using the
* auto-hinter), a change of the default script will affect this face.
*
+ * @example:
+ * ```
+ * FT_Library library;
+ * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "default-script", &default_script );
+ * ```
+ *
* @since:
* 2.5.3
*
@@ -1108,13 +1112,20 @@ FT_BEGIN_HEADER
* increase-x-height
*
* @description:
- * For ppem values in the range 6~<= ppem <= `increase-x-height', round
- * up the font's x~height much more often than normally. If the value
- * is set to~0, which is the default, this feature is switched off. Use
+ * For ppem values in the range 6~<= ppem <= `increase-x-height`, round
+ * up the font's x~height much more often than normally. If the value is
+ * set to~0, which is the default, this feature is switched off. Use
* this property to improve the legibility of small font sizes if
* necessary.
*
- * {
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * Set this value right after calling @FT_Set_Char_Size, but before
+ * loading any glyph (using the auto-hinter).
+ *
+ * @example:
+ * ```
* FT_Library library;
* FT_Face face;
* FT_Prop_IncreaseXHeight prop;
@@ -1129,13 +1140,7 @@ FT_BEGIN_HEADER
*
* FT_Property_Set( library, "autofitter",
* "increase-x-height", &prop );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * Set this value right after calling @FT_Set_Char_Size, but before
- * loading any glyph (using the auto-hinter).
+ * ```
*
* @since:
* 2.4.11
@@ -1166,46 +1171,48 @@ FT_BEGIN_HEADER
* warping
*
* @description:
- * *Experimental* *only*
+ * **Experimental only**
*
- * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
+ * If FreeType gets compiled with option `AF_CONFIG_OPTION_USE_WARPER` to
* activate the warp hinting code in the auto-hinter, this property
* switches warping on and off.
*
- * Warping only works in `normal' auto-hinting mode replacing it.
- * The idea of the code is to slightly scale and shift a glyph along
- * the non-hinted dimension (which is usually the horizontal axis) so
- * that as much of its segments are aligned (more or less) to the grid.
- * To find out a glyph's optimal scaling and shifting value, various
- * parameter combinations are tried and scored.
+ * Warping only works in 'normal' auto-hinting mode replacing it. The
+ * idea of the code is to slightly scale and shift a glyph along the
+ * non-hinted dimension (which is usually the horizontal axis) so that as
+ * much of its segments are aligned (more or less) to the grid. To find
+ * out a glyph's optimal scaling and shifting value, various parameter
+ * combinations are tried and scored.
*
- * By default, warping is off. The example below shows how to switch on
- * warping (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_Bool warping = 1;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "warping", &warping );
- * }
+ * By default, warping is off.
*
* @note:
* This property can be used with @FT_Property_Get also.
*
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
+ * variable (using values 1 and 0 for 'on' and 'off', respectively).
*
* The warping code can also change advance widths. Have a look at the
- * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
+ * `lsb_delta` and `rsb_delta` fields in the @FT_GlyphSlotRec structure
* for details on improving inter-glyph distances while rendering.
*
* Since warping is a global property of the auto-hinter it is best to
* change its value before rendering any face. Otherwise, you should
- * reload all faces that get auto-hinted in `normal' hinting mode.
+ * reload all faces that get auto-hinted in 'normal' hinting mode.
+ *
+ * @example:
+ * This example shows how to switch on warping (omitting the error
+ * handling).
+ *
+ * ```
+ * FT_Library library;
+ * FT_Bool warping = 1;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter", "warping", &warping );
+ * ```
*
* @since:
* 2.6
diff --git a/freetype/include/freetype/fterrdef.h b/freetype/include/freetype/fterrdef.h
index 8ffd346c..9bc7dc65 100644
--- a/freetype/include/freetype/fterrdef.h
+++ b/freetype/include/freetype/fterrdef.h
@@ -1,58 +1,57 @@
-/***************************************************************************/
-/* */
-/* fterrdef.h */
-/* */
-/* FreeType error codes (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fterrdef.h
+ *
+ * FreeType error codes (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Section> */
- /* error_code_values */
- /* */
- /* <Title> */
- /* Error Code Values */
- /* */
- /* <Abstract> */
- /* All possible error codes returned by FreeType functions. */
- /* */
- /* <Description> */
- /* The list below is taken verbatim from the file `fterrdef.h' */
- /* (loaded automatically by including `FT_FREETYPE_H'). The first */
- /* argument of the `FT_ERROR_DEF_' macro is the error label; by */
- /* default, the prefix `FT_Err_' gets added so that you get error */
- /* names like `FT_Err_Cannot_Open_Resource'. The second argument is */
- /* the error code, and the last argument an error string, which is not */
- /* used by FreeType. */
- /* */
- /* Within your application you should *only* use error names and */
- /* *never* its numeric values! The latter might (and actually do) */
- /* change in forthcoming FreeType versions. */
- /* */
- /* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */
- /* See the `Error Enumerations' subsection how to automatically */
- /* generate a list of error strings. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * error_code_values
+ *
+ * @title:
+ * Error Code Values
+ *
+ * @abstract:
+ * All possible error codes returned by FreeType functions.
+ *
+ * @description:
+ * The list below is taken verbatim from the file `fterrdef.h` (loaded
+ * automatically by including `FT_FREETYPE_H`). The first argument of the
+ * `FT_ERROR_DEF_` macro is the error label; by default, the prefix
+ * `FT_Err_` gets added so that you get error names like
+ * `FT_Err_Cannot_Open_Resource`. The second argument is the error code,
+ * and the last argument an error string, which is not used by FreeType.
+ *
+ * Within your application you should **only** use error names and
+ * **never** its numeric values! The latter might (and actually do)
+ * change in forthcoming FreeType versions.
+ *
+ * Macro `FT_NOERRORDEF_` defines `FT_Err_Ok`, which is always zero. See
+ * the 'Error Enumerations' subsection how to automatically generate a
+ * list of error strings.
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Err_XXX */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Err_XXX
+ *
+ */
/* generic errors */
diff --git a/freetype/include/freetype/fterrors.h b/freetype/include/freetype/fterrors.h
index f6ee5c24..2b47eb20 100644
--- a/freetype/include/freetype/fterrors.h
+++ b/freetype/include/freetype/fterrors.h
@@ -1,110 +1,120 @@
-/***************************************************************************/
-/* */
-/* fterrors.h */
-/* */
-/* FreeType error code handling (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* error_enumerations */
- /* */
- /* <Title> */
- /* Error Enumerations */
- /* */
- /* <Abstract> */
- /* How to handle errors and error strings. */
- /* */
- /* <Description> */
- /* The header file `fterrors.h' (which is automatically included by */
- /* `freetype.h' defines the handling of FreeType's enumeration */
- /* constants. It can also be used to generate error message strings */
- /* with a small macro trick explained below. */
- /* */
- /* *Error* *Formats* */
- /* */
- /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
- /* defined in `ftoption.h' in order to make the higher byte indicate */
- /* the module where the error has happened (this is not compatible */
- /* with standard builds of FreeType~2, however). See the file */
- /* `ftmoderr.h' for more details. */
- /* */
- /* *Error* *Message* *Strings* */
- /* */
- /* Error definitions are set up with special macros that allow client */
- /* applications to build a table of error message strings. The */
- /* strings are not included in a normal build of FreeType~2 to save */
- /* space (most client applications do not use them). */
- /* */
- /* To do so, you have to define the following macros before including */
- /* this file. */
- /* */
- /* { */
- /* FT_ERROR_START_LIST */
- /* } */
- /* */
- /* This macro is called before anything else to define the start of */
- /* the error list. It is followed by several FT_ERROR_DEF calls. */
- /* */
- /* { */
- /* FT_ERROR_DEF( e, v, s ) */
- /* } */
- /* */
- /* This macro is called to define one single error. `e' is the error */
- /* code identifier (e.g., `Invalid_Argument'), `v' is the error's */
- /* numerical value, and `s' is the corresponding error string. */
- /* */
- /* { */
- /* FT_ERROR_END_LIST */
- /* } */
- /* */
- /* This macro ends the list. */
- /* */
- /* Additionally, you have to undefine `FTERRORS_H_' before #including */
- /* this file. */
- /* */
- /* Here is a simple example. */
- /* */
- /* { */
- /* #undef FTERRORS_H_ */
- /* #define FT_ERRORDEF( e, v, s ) { e, s }, */
- /* #define FT_ERROR_START_LIST { */
- /* #define FT_ERROR_END_LIST { 0, NULL } }; */
- /* */
- /* const struct */
- /* { */
- /* int err_code; */
- /* const char* err_msg; */
- /* } ft_errors[] = */
- /* */
- /* #include FT_ERRORS_H */
- /* } */
- /* */
- /* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */
- /* `FT_NOERRORDEF'; it is always zero. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * fterrors.h
+ *
+ * FreeType error code handling (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * error_enumerations
+ *
+ * @title:
+ * Error Enumerations
+ *
+ * @abstract:
+ * How to handle errors and error strings.
+ *
+ * @description:
+ * The header file `fterrors.h` (which is automatically included by
+ * `freetype.h` defines the handling of FreeType's enumeration
+ * constants. It can also be used to generate error message strings
+ * with a small macro trick explained below.
+ *
+ * **Error Formats**
+ *
+ * The configuration macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` can be
+ * defined in `ftoption.h` in order to make the higher byte indicate the
+ * module where the error has happened (this is not compatible with
+ * standard builds of FreeType~2, however). See the file `ftmoderr.h`
+ * for more details.
+ *
+ * **Error Message Strings**
+ *
+ * Error definitions are set up with special macros that allow client
+ * applications to build a table of error message strings. The strings
+ * are not included in a normal build of FreeType~2 to save space (most
+ * client applications do not use them).
+ *
+ * To do so, you have to define the following macros before including
+ * this file.
+ *
+ * ```
+ * FT_ERROR_START_LIST
+ * ```
+ *
+ * This macro is called before anything else to define the start of the
+ * error list. It is followed by several `FT_ERROR_DEF` calls.
+ *
+ * ```
+ * FT_ERROR_DEF( e, v, s )
+ * ```
+ *
+ * This macro is called to define one single error. 'e' is the error
+ * code identifier (e.g., `Invalid_Argument`), 'v' is the error's
+ * numerical value, and 's' is the corresponding error string.
+ *
+ * ```
+ * FT_ERROR_END_LIST
+ * ```
+ *
+ * This macro ends the list.
+ *
+ * Additionally, you have to undefine `FTERRORS_H_` before #including
+ * this file.
+ *
+ * Here is a simple example.
+ *
+ * ```
+ * #undef FTERRORS_H_
+ * #define FT_ERRORDEF( e, v, s ) { e, s },
+ * #define FT_ERROR_START_LIST {
+ * #define FT_ERROR_END_LIST { 0, NULL } };
+ *
+ * const struct
+ * {
+ * int err_code;
+ * const char* err_msg;
+ * } ft_errors[] =
+ *
+ * #include FT_ERRORS_H
+ * ```
+ *
+ * An alternative to using an array is a switch statement.
+ *
+ * ```
+ * #undef FTERRORS_H_
+ * #define FT_ERROR_START_LIST switch ( error_code ) {
+ * #define FT_ERRORDEF( e, v, s ) case v: return s;
+ * #define FT_ERROR_END_LIST }
+ * ```
+ *
+ * If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should
+ * be replaced with `FT_ERROR_BASE(error_code)` in the last example.
+ */
/* */
- /* In previous FreeType versions we used `__FTERRORS_H__'. However, */
+ /* In previous FreeType versions we used `__FTERRORS_H__`. However, */
/* using two successive underscores in a non-system symbol name */
/* violates the C (and C++) standard, so it was changed to the */
/* current form. In spite of this, we have to make */
/* */
+ /* ``` */
/* #undefine __FTERRORS_H__ */
+ /* ``` */
/* */
/* work for backward compatibility. */
/* */
@@ -130,7 +140,7 @@
/* FT_ERR_PREFIX is used as a prefix for error identifiers. */
- /* By default, we use `FT_Err_'. */
+ /* By default, we use `FT_Err_`. */
/* */
#ifndef FT_ERR_PREFIX
#define FT_ERR_PREFIX FT_Err_
@@ -158,6 +168,8 @@
/* */
#ifndef FT_ERRORDEF
+#define FT_INCLUDE_ERR_PROTOS
+
#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 ) };
@@ -220,6 +232,57 @@
#undef FT_ERR_PREFIX
#endif
+ /* FT_INCLUDE_ERR_PROTOS: Control if function prototypes should be */
+ /* included with `#include FT_ERRORS_H'. This is */
+ /* only true where `FT_ERRORDEF` is undefined. */
+ /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */
+ /* `fterrors.h`. */
+#ifdef FT_INCLUDE_ERR_PROTOS
+#undef FT_INCLUDE_ERR_PROTOS
+
+#ifndef FT_ERR_PROTOS_DEFINED
+#define FT_ERR_PROTOS_DEFINED
+
+
+FT_BEGIN_HEADER
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Error_String
+ *
+ * @description:
+ * Retrieve the description of a valid FreeType error code.
+ *
+ * @input:
+ * error_code ::
+ * A valid FreeType error code.
+ *
+ * @return:
+ * A C~string or `NULL`, if any error occurred.
+ *
+ * @note:
+ * FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or
+ * `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions.
+ * 'error_string' will be `NULL` otherwise.
+ *
+ * Module identification will be ignored:
+ *
+ * ```c
+ * strcmp( FT_Error_String( FT_Err_Unknown_File_Format ),
+ * FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0;
+ * ```
+ */
+ FT_EXPORT( const char* )
+ FT_Error_String( FT_Error error_code );
+
+FT_END_HEADER
+
+
+#endif /* FT_ERR_PROTOS_DEFINED */
+
+#endif /* FT_INCLUDE_ERR_PROTOS */
+
#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
diff --git a/freetype/include/freetype/ftfntfmt.h b/freetype/include/freetype/ftfntfmt.h
index cc86efac..aae0b132 100644
--- a/freetype/include/freetype/ftfntfmt.h
+++ b/freetype/include/freetype/ftfntfmt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftfntfmt.h */
-/* */
-/* Support functions for font formats. */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftfntfmt.h
+ *
+ * Support functions for font formats.
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTFNTFMT_H_
@@ -32,49 +32,48 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* font_formats */
- /* */
- /* <Title> */
- /* Font Formats */
- /* */
- /* <Abstract> */
- /* Getting the font format. */
- /* */
- /* <Description> */
- /* The single function in this section can be used to get the font */
- /* format. Note that this information is not needed normally; */
- /* however, there are special cases (like in PDF devices) where it is */
- /* important to differentiate, in spite of FreeType's uniform API. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Font_Format */
- /* */
- /* <Description> */
- /* Return a string describing the format of a given face. Possible */
- /* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */
- /* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */
- /* */
- /* The return value is suitable to be used as an X11 FONT_PROPERTY. */
- /* */
- /* <Input> */
- /* face :: */
- /* Input face handle. */
- /* */
- /* <Return> */
- /* Font format string. NULL in case of error. */
- /* */
- /* <Note> */
- /* A deprecated name for the same function is */
- /* `FT_Get_X11_Font_Format'. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * font_formats
+ *
+ * @title:
+ * Font Formats
+ *
+ * @abstract:
+ * Getting the font format.
+ *
+ * @description:
+ * The single function in this section can be used to get the font format.
+ * Note that this information is not needed normally; however, there are
+ * special cases (like in PDF devices) where it is important to
+ * differentiate, in spite of FreeType's uniform API.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Font_Format
+ *
+ * @description:
+ * Return a string describing the format of a given face. Possible values
+ * are 'TrueType', 'Type~1', 'BDF', 'PCF', 'Type~42', 'CID~Type~1', 'CFF',
+ * 'PFR', and 'Windows~FNT'.
+ *
+ * The return value is suitable to be used as an X11 FONT_PROPERTY.
+ *
+ * @input:
+ * face ::
+ * Input face handle.
+ *
+ * @return:
+ * Font format string. `NULL` in case of error.
+ *
+ * @note:
+ * A deprecated name for the same function is `FT_Get_X11_Font_Format`.
+ */
FT_EXPORT( const char* )
FT_Get_Font_Format( FT_Face face );
diff --git a/freetype/include/freetype/ftgasp.h b/freetype/include/freetype/ftgasp.h
index fc1248ff..24673d8c 100644
--- a/freetype/include/freetype/ftgasp.h
+++ b/freetype/include/freetype/ftgasp.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgasp.h */
-/* */
-/* Access of TrueType's `gasp' table (specification). */
-/* */
-/* Copyright 2007-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgasp.h
+ *
+ * Access of TrueType's 'gasp' table (specification).
+ *
+ * Copyright (C) 2007-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTGASP_H_
@@ -32,7 +32,7 @@
FT_BEGIN_HEADER
- /***************************************************************************
+ /**************************************************************************
*
* @section:
* gasp_table
@@ -41,16 +41,16 @@ FT_BEGIN_HEADER
* Gasp Table
*
* @abstract:
- * Retrieving TrueType `gasp' table entries.
+ * 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.
+ * 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
@@ -66,7 +66,7 @@ FT_BEGIN_HEADER
*
* FT_GASP_DO_GRIDFIT ::
* Grid-fitting and hinting should be performed at the specified ppem.
- * This *really* means TrueType bytecode interpretation. If this bit
+ * This **really** means TrueType bytecode interpretation. If this bit
* is not set, no hinting gets applied.
*
* FT_GASP_DO_GRAY ::
@@ -80,13 +80,13 @@ FT_BEGIN_HEADER
* Grid-fitting must be used with ClearType's symmetric smoothing.
*
* @note:
- * The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
+ * The bit-flags `FT_GASP_DO_GRIDFIT` and `FT_GASP_DO_GRAY` are to be
* used for standard font rasterization only. Independently of that,
- * `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
- * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
- * `FT_GASP_DO_GRAY' are consequently ignored).
+ * `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` are to
+ * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT` and
+ * `FT_GASP_DO_GRAY` are consequently ignored).
*
- * `ClearType' is Microsoft's implementation of LCD rendering, partly
+ * 'ClearType' is Microsoft's implementation of LCD rendering, partly
* protected by patents.
*
* @since:
@@ -99,29 +99,31 @@ FT_BEGIN_HEADER
#define FT_GASP_SYMMETRIC_SMOOTHING 0x08
- /*************************************************************************
+ /**************************************************************************
*
- * @func:
+ * @function:
* FT_Get_Gasp
*
* @description:
* For a TrueType or OpenType font file, return the rasterizer behaviour
- * flags from the font's `gasp' table corresponding to a given
- * character pixel size.
+ * flags from the font's 'gasp' table corresponding to a given character
+ * pixel size.
*
* @input:
- * face :: The source face handle.
+ * face ::
+ * The source face handle.
*
- * ppem :: The vertical character pixel size.
+ * 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.
+ * 'gasp' table in the face.
*
* @note:
* If you want to use the MM functionality of OpenType variation fonts
* (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this
- * function *after* setting an instance since the return values can
+ * function **after** setting an instance since the return values can
* change.
*
* @since:
diff --git a/freetype/include/freetype/ftglyph.h b/freetype/include/freetype/ftglyph.h
index 5f3fc009..fedab849 100644
--- a/freetype/include/freetype/ftglyph.h
+++ b/freetype/include/freetype/ftglyph.h
@@ -1,32 +1,32 @@
-/***************************************************************************/
-/* */
-/* ftglyph.h */
-/* */
-/* FreeType convenience functions to handle glyphs (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftglyph.h
+ *
+ * FreeType convenience functions to handle glyphs (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -46,65 +46,70 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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. These objects are
+ * detached from @FT_Face, contrary to @FT_GlyphSlot.
+ *
+ */
/* 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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Glyph
+ *
+ * @description:
+ * Handle to an object used to model generic glyph images. It is a
+ * pointer to the @FT_GlyphRec structure and can contain a glyph bitmap
+ * or pointer.
+ *
+ * @note:
+ * Glyph objects are not owned by the library. You must thus release
+ * them manually (through @FT_Done_Glyph) _before_ calling
+ * @FT_Done_FreeType.
+ */
typedef struct FT_GlyphRec_* FT_Glyph;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_GlyphRec */
- /* */
- /* <Description> */
- /* The root glyph structure contains a given glyph image plus its */
- /* advance width in 16.16 fixed-point format. */
- /* */
- /* <Fields> */
- /* library :: A handle to the FreeType library object. */
- /* */
- /* clazz :: A pointer to the glyph's class. Private. */
- /* */
- /* format :: The format of the glyph's image. */
- /* */
- /* advance :: A 16.16 vector that gives the glyph's advance width. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_GlyphRec
+ *
+ * @description:
+ * The root glyph structure contains a given glyph image plus its advance
+ * width in 16.16 fixed-point format.
+ *
+ * @fields:
+ * library ::
+ * A handle to the FreeType library object.
+ *
+ * clazz ::
+ * A pointer to the glyph's class. Private.
+ *
+ * format ::
+ * The format of the glyph's image.
+ *
+ * advance ::
+ * A 16.16 vector that gives the glyph's advance width.
+ */
typedef struct FT_GlyphRec_
{
FT_Library library;
@@ -115,48 +120,51 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -167,44 +175,46 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_OutlineGlyph
+ *
+ * @description:
+ * A handle to an object used to model an outline glyph image. This is a
+ * sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
+ */
typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_OutlineGlyphRec */
- /* */
- /* <Description> */
- /* A structure used for outline (vectorial) glyph images. This */
- /* really is a `sub-class' of @FT_GlyphRec. */
- /* */
- /* <Fields> */
- /* root :: The root @FT_Glyph fields. */
- /* */
- /* outline :: A descriptor for the outline. */
- /* */
- /* <Note> */
- /* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have */
- /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */
- /* the outline's content easily. */
- /* */
- /* As the outline is extracted from a glyph slot, its coordinates are */
- /* expressed normally in 26.6 pixels, unless the flag */
- /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
- /* */
- /* The outline's tables are always owned by the object and are */
- /* destroyed with it. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_OutlineGlyphRec
+ *
+ * @description:
+ * A structure used for outline (vectorial) glyph images. This really is
+ * a 'sub-class' of @FT_GlyphRec.
+ *
+ * @fields:
+ * root ::
+ * The root @FT_Glyph fields.
+ *
+ * outline ::
+ * A descriptor for the outline.
+ *
+ * @note:
+ * You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have
+ * `glyph->format == FT_GLYPH_FORMAT_OUTLINE`. This lets you access the
+ * outline's content easily.
+ *
+ * As the outline is extracted from a glyph slot, its coordinates are
+ * expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE
+ * was used in @FT_Load_Glyph or @FT_Load_Char.
+ *
+ * The outline's tables are always owned by the object and are destroyed
+ * with it.
+ */
typedef struct FT_OutlineGlyphRec_
{
FT_GlyphRec root;
@@ -213,113 +223,150 @@ FT_BEGIN_HEADER
} FT_OutlineGlyphRec;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Glyph */
- /* */
- /* <Description> */
- /* A function used to extract a glyph image from a slot. Note that */
- /* the created @FT_Glyph object must be released with @FT_Done_Glyph. */
- /* */
- /* <Input> */
- /* slot :: A handle to the source glyph slot. */
- /* */
- /* <Output> */
- /* aglyph :: A handle to the glyph object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16 */
- /* fixed-point numbers, `slot->advance.x' and `slot->advance.y' */
- /* (which are in 26.6 fixed-point format) must be in the range */
- /* ]-32768;32768[. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_New_Glyph
+ *
+ * @description:
+ * A function used to create a new empty glyph image. Note that the
+ * created @FT_Glyph object must be released with @FT_Done_Glyph.
+ *
+ * @input:
+ * library ::
+ * A handle to the FreeType library object.
+ *
+ * format ::
+ * The format of the glyph's image.
+ *
+ * @output:
+ * aglyph ::
+ * A handle to the glyph object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.10
+ */
+ FT_EXPORT( FT_Error )
+ FT_New_Glyph( FT_Library library,
+ FT_Glyph_Format format,
+ FT_Glyph *aglyph );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Glyph
+ *
+ * @description:
+ * A function used to extract a glyph image from a slot. Note that the
+ * created @FT_Glyph object must be released with @FT_Done_Glyph.
+ *
+ * @input:
+ * slot ::
+ * A handle to the source glyph slot.
+ *
+ * @output:
+ * aglyph ::
+ * A handle to the glyph object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16
+ * fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which
+ * are in 26.6 fixed-point format) must be in the range ]-32768;32768[.
+ */
FT_EXPORT( FT_Error )
FT_Get_Glyph( FT_GlyphSlot slot,
FT_Glyph *aglyph );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_Copy */
- /* */
- /* <Description> */
- /* A function used to copy a glyph image. Note that the created */
- /* @FT_Glyph object must be released with @FT_Done_Glyph. */
- /* */
- /* <Input> */
- /* source :: A handle to the source glyph object. */
- /* */
- /* <Output> */
- /* target :: A handle to the target glyph object. 0~in case of */
- /* error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -332,7 +379,7 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `FT_Glyph_BBox_Mode' values instead */
+ /* `FT_Glyph_BBox_Mode` values instead */
#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED
#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS
#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT
@@ -340,187 +387,188 @@ FT_BEGIN_HEADER
#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 Bezier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bezier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* glyph :: A handle to the source glyph object. */
- /* */
- /* mode :: The mode that indicates how to interpret the returned */
- /* bounding box values. */
- /* */
- /* <Output> */
- /* acbox :: The glyph coordinate bounding box. Coordinates are */
- /* expressed in 1/64th of pixels if it is grid-fitted. */
- /* */
- /* <Note> */
- /* Coordinates are relative to the glyph origin, using the y~upwards */
- /* convention. */
- /* */
- /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */
- /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */
- /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */
- /* is another name for this constant. */
- /* */
- /* If the font is tricky and the glyph has been loaded with */
- /* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */
- /* reasonable values for the CBox it is necessary to load the glyph */
- /* at a large ppem value (so that the hinting instructions can */
- /* properly shift and scale the subglyphs), then extracting the CBox, */
- /* which can be eventually converted back to font units. */
- /* */
- /* Note that the maximum coordinates are exclusive, which means that */
- /* one can compute the width and height of the glyph image (be it in */
- /* integer or 26.6 pixels) as: */
- /* */
- /* { */
- /* width = bbox.xMax - bbox.xMin; */
- /* height = bbox.yMax - bbox.yMin; */
- /* } */
- /* */
- /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */
- /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */
- /* which corresponds to: */
- /* */
- /* { */
- /* bbox.xMin = FLOOR(bbox.xMin); */
- /* bbox.yMin = FLOOR(bbox.yMin); */
- /* bbox.xMax = CEILING(bbox.xMax); */
- /* bbox.yMax = CEILING(bbox.yMax); */
- /* } */
- /* */
- /* To get the bbox in pixel coordinates, set `bbox_mode' to */
- /* @FT_GLYPH_BBOX_TRUNCATE. */
- /* */
- /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */
- /* to @FT_GLYPH_BBOX_PIXELS. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Glyph_Get_CBox
+ *
+ * @description:
+ * Return a glyph's 'control box'. The control box encloses all the
+ * outline's points, including Bezier control points. Though it
+ * coincides with the exact bounding box for most glyphs, it can be
+ * slightly larger in some situations (like when rotating an outline that
+ * contains Bezier outside arcs).
+ *
+ * Computing the control box is very fast, while getting the bounding box
+ * can take much more time as it needs to walk over all segments and arcs
+ * in the outline. To get the latter, you can use the 'ftbbox'
+ * component, which is dedicated to this single task.
+ *
+ * @input:
+ * glyph ::
+ * A handle to the source glyph object.
+ *
+ * mode ::
+ * The mode that indicates how to interpret the returned bounding box
+ * values.
+ *
+ * @output:
+ * acbox ::
+ * The glyph coordinate bounding box. Coordinates are expressed in
+ * 1/64th of pixels if it is grid-fitted.
+ *
+ * @note:
+ * Coordinates are relative to the glyph origin, using the y~upwards
+ * convention.
+ *
+ * If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must
+ * be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6
+ * pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS is another name for
+ * this constant.
+ *
+ * If the font is tricky and the glyph has been loaded with
+ * @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get
+ * reasonable values for the CBox it is necessary to load the glyph at a
+ * large ppem value (so that the hinting instructions can properly shift
+ * and scale the subglyphs), then extracting the CBox, which can be
+ * eventually converted back to font units.
+ *
+ * Note that the maximum coordinates are exclusive, which means that one
+ * can compute the width and height of the glyph image (be it in integer
+ * or 26.6 pixels) as:
+ *
+ * ```
+ * width = bbox.xMax - bbox.xMin;
+ * height = bbox.yMax - bbox.yMin;
+ * ```
+ *
+ * Note also that for 26.6 coordinates, if `bbox_mode` is set to
+ * @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,
+ * which corresponds to:
+ *
+ * ```
+ * bbox.xMin = FLOOR(bbox.xMin);
+ * bbox.yMin = FLOOR(bbox.yMin);
+ * bbox.xMax = CEILING(bbox.xMax);
+ * bbox.yMax = CEILING(bbox.yMax);
+ * ```
+ *
+ * To get the bbox in pixel coordinates, set `bbox_mode` to
+ * @FT_GLYPH_BBOX_TRUNCATE.
+ *
+ * To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to
+ * @FT_GLYPH_BBOX_PIXELS.
+ */
FT_EXPORT( void )
FT_Glyph_Get_CBox( FT_Glyph glyph,
FT_UInt bbox_mode,
FT_BBox *acbox );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_To_Bitmap */
- /* */
- /* <Description> */
- /* Convert a given glyph object to a bitmap glyph object. */
- /* */
- /* <InOut> */
- /* the_glyph :: A pointer to a handle to the target glyph. */
- /* */
- /* <Input> */
- /* render_mode :: An enumeration that describes how the data is */
- /* rendered. */
- /* */
- /* origin :: A pointer to a vector used to translate the glyph */
- /* image before rendering. Can be~0 (if no */
- /* translation). The origin is expressed in */
- /* 26.6 pixels. */
- /* */
- /* destroy :: A boolean that indicates that the original glyph */
- /* image should be destroyed by this function. It is */
- /* never destroyed in case of error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function does nothing if the glyph format isn't scalable. */
- /* */
- /* The glyph image is translated with the `origin' vector before */
- /* rendering. */
- /* */
- /* The first parameter is a pointer to an @FT_Glyph handle, that will */
- /* be _replaced_ by this function (with newly allocated data). */
- /* Typically, you would use (omitting error handling): */
- /* */
- /* */
- /* { */
- /* FT_Glyph glyph; */
- /* FT_BitmapGlyph glyph_bitmap; */
- /* */
- /* */
- /* // load glyph */
- /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); */
- /* */
- /* // extract glyph image */
- /* error = FT_Get_Glyph( face->glyph, &glyph ); */
- /* */
- /* // convert to a bitmap (default render mode + destroying old) */
- /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */
- /* { */
- /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, */
- /* 0, 1 ); */
- /* if ( error ) // `glyph' unchanged */
- /* ... */
- /* } */
- /* */
- /* // access bitmap content by typecasting */
- /* glyph_bitmap = (FT_BitmapGlyph)glyph; */
- /* */
- /* // do funny stuff with it, like blitting/drawing */
- /* ... */
- /* */
- /* // discard glyph image (bitmap or not) */
- /* FT_Done_Glyph( glyph ); */
- /* } */
- /* */
- /* */
- /* Here another example, again without error handling: */
- /* */
- /* */
- /* { */
- /* FT_Glyph glyphs[MAX_GLYPHS] */
- /* */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || */
- /* FT_Get_Glyph ( face->glyph, &glyph[idx] ); */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* { */
- /* FT_Glyph bitmap = glyphs[idx]; */
- /* */
- /* */
- /* ... */
- /* */
- /* // after this call, `bitmap' no longer points into */
- /* // the `glyphs' array (and the old value isn't destroyed) */
- /* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); */
- /* */
- /* ... */
- /* */
- /* FT_Done_Glyph( bitmap ); */
- /* } */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* FT_Done_Glyph( glyphs[idx] ); */
- /* } */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Glyph_To_Bitmap
+ *
+ * @description:
+ * Convert a given glyph object to a bitmap glyph object.
+ *
+ * @inout:
+ * the_glyph ::
+ * A pointer to a handle to the target glyph.
+ *
+ * @input:
+ * render_mode ::
+ * An enumeration that describes how the data is rendered.
+ *
+ * origin ::
+ * A pointer to a vector used to translate the glyph image before
+ * rendering. Can be~0 (if no translation). The origin is expressed
+ * in 26.6 pixels.
+ *
+ * destroy ::
+ * A boolean that indicates that the original glyph image should be
+ * destroyed by this function. It is never destroyed in case of error.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function does nothing if the glyph format isn't scalable.
+ *
+ * The glyph image is translated with the `origin` vector before
+ * rendering.
+ *
+ * The first parameter is a pointer to an @FT_Glyph handle, that will be
+ * _replaced_ by this function (with newly allocated data). Typically,
+ * you would use (omitting error handling):
+ *
+ * ```
+ * FT_Glyph glyph;
+ * FT_BitmapGlyph glyph_bitmap;
+ *
+ *
+ * // load glyph
+ * error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT );
+ *
+ * // extract glyph image
+ * error = FT_Get_Glyph( face->glyph, &glyph );
+ *
+ * // convert to a bitmap (default render mode + destroying old)
+ * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
+ * {
+ * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
+ * 0, 1 );
+ * if ( error ) // `glyph' unchanged
+ * ...
+ * }
+ *
+ * // access bitmap content by typecasting
+ * glyph_bitmap = (FT_BitmapGlyph)glyph;
+ *
+ * // do funny stuff with it, like blitting/drawing
+ * ...
+ *
+ * // discard glyph image (bitmap or not)
+ * FT_Done_Glyph( glyph );
+ * ```
+ *
+ * Here is another example, again without error handling:
+ *
+ * ```
+ * FT_Glyph glyphs[MAX_GLYPHS]
+ *
+ *
+ * ...
+ *
+ * for ( idx = 0; i < MAX_GLYPHS; i++ )
+ * error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
+ * FT_Get_Glyph ( face->glyph, &glyphs[idx] );
+ *
+ * ...
+ *
+ * for ( idx = 0; i < MAX_GLYPHS; i++ )
+ * {
+ * FT_Glyph bitmap = glyphs[idx];
+ *
+ *
+ * ...
+ *
+ * // after this call, `bitmap' no longer points into
+ * // the `glyphs' array (and the old value isn't destroyed)
+ * FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );
+ *
+ * ...
+ *
+ * FT_Done_Glyph( bitmap );
+ * }
+ *
+ * ...
+ *
+ * for ( idx = 0; i < MAX_GLYPHS; i++ )
+ * FT_Done_Glyph( glyphs[idx] );
+ * ```
+ */
FT_EXPORT( FT_Error )
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
FT_Render_Mode render_mode,
@@ -528,17 +576,18 @@ FT_BEGIN_HEADER
FT_Bool destroy );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Glyph */
- /* */
- /* <Description> */
- /* Destroy a given glyph. */
- /* */
- /* <Input> */
- /* glyph :: A handle to the target glyph object. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -547,54 +596,56 @@ FT_BEGIN_HEADER
/* other helpful functions */
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Matrix_Multiply */
- /* */
- /* <Description> */
- /* Perform the matrix operation `b = a*b'. */
- /* */
- /* <Input> */
- /* a :: A pointer to matrix `a'. */
- /* */
- /* <InOut> */
- /* b :: A pointer to matrix `b'. */
- /* */
- /* <Note> */
- /* The result is undefined if either `a' or `b' is zero. */
- /* */
- /* Since the function uses wrap-around arithmetic, results become */
- /* meaningless if the arguments are very large. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * computations
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Matrix_Multiply
+ *
+ * @description:
+ * Perform the matrix operation `b = a*b`.
+ *
+ * @input:
+ * a ::
+ * A pointer to matrix `a`.
+ *
+ * @inout:
+ * b ::
+ * A pointer to matrix `b`.
+ *
+ * @note:
+ * The result is undefined if either `a` or `b` is zero.
+ *
+ * Since the function uses wrap-around arithmetic, results become
+ * meaningless if the arguments are very large.
+ */
FT_EXPORT( void )
FT_Matrix_Multiply( const FT_Matrix* a,
FT_Matrix* b );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Matrix_Invert */
- /* */
- /* <Description> */
- /* Invert a 2x2 matrix. Return an error if it can't be inverted. */
- /* */
- /* <InOut> */
- /* matrix :: A pointer to the target matrix. Remains untouched in */
- /* case of error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
diff --git a/freetype/include/freetype/ftgxval.h b/freetype/include/freetype/ftgxval.h
index 8382d599..b14f637c 100644
--- a/freetype/include/freetype/ftgxval.h
+++ b/freetype/include/freetype/ftgxval.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgxval.h
+ *
+ * FreeType API for validating TrueTypeGX/AAT tables (specification).
+ *
+ * Copyright (C) 2004-2019 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_
@@ -41,43 +41,43 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* gx_validation */
- /* */
- /* <Title> */
- /* TrueTypeGX/AAT Validation */
- /* */
- /* <Abstract> */
- /* An API to validate TrueTypeGX/AAT tables. */
- /* */
- /* <Description> */
- /* This section contains the declaration of functions to validate */
- /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */
- /* trak, prop, lcar). */
- /* */
- /* <Order> */
- /* FT_TrueTypeGX_Validate */
- /* FT_TrueTypeGX_Free */
- /* */
- /* FT_ClassicKern_Validate */
- /* FT_ClassicKern_Free */
- /* */
- /* FT_VALIDATE_GX_LENGTH */
- /* FT_VALIDATE_GXXXX */
- /* FT_VALIDATE_CKERNXXX */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* */
- /* Warning: Use FT_VALIDATE_XXX to validate a table. */
- /* Following definitions are for gxvalid developers. */
- /* */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * gx_validation
+ *
+ * @title:
+ * TrueTypeGX/AAT Validation
+ *
+ * @abstract:
+ * An API to validate TrueTypeGX/AAT tables.
+ *
+ * @description:
+ * This section contains the declaration of functions to validate some
+ * TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak,
+ * prop, lcar).
+ *
+ * @order:
+ * FT_TrueTypeGX_Validate
+ * FT_TrueTypeGX_Free
+ *
+ * FT_ClassicKern_Validate
+ * FT_ClassicKern_Free
+ *
+ * FT_VALIDATE_GX_LENGTH
+ * FT_VALIDATE_GXXXX
+ * FT_VALIDATE_CKERNXXX
+ *
+ */
+
+ /**************************************************************************
+ *
+ *
+ * Warning: Use `FT_VALIDATE_XXX` to validate a table.
+ * Following definitions are for gxvalid developers.
+ *
+ *
+ */
#define FT_VALIDATE_feat_INDEX 0
#define FT_VALIDATE_mort_INDEX 1
@@ -92,14 +92,14 @@ FT_BEGIN_HEADER
#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.
+ * for the `table-length` argument of function @FT_TrueTypeGX_Validate.
*/
#define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 )
@@ -112,51 +112,51 @@ FT_BEGIN_HEADER
( 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).
- *
- */
+ /**************************************************************************
+ *
+ * @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 )
@@ -181,47 +181,47 @@ FT_BEGIN_HEADER
FT_VALIDATE_lcar )
- /**********************************************************************
- *
- * @function:
- * FT_TrueTypeGX_Validate
- *
- * @description:
- * Validate various TrueTypeGX tables to assure that all offsets and
- * indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without
- * error checking (which can be quite time consuming).
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the tables to be validated. See
- * @FT_VALIDATE_GXXXX for possible values.
- *
- * table_length ::
- * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH
- * should be passed.
- *
- * @output:
- * tables ::
- * The array where all validated sfnt tables are stored.
- * The array itself must be allocated by a client.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with TrueTypeGX fonts, returning an error
- * otherwise.
- *
- * After use, the application should deallocate the buffers pointed to by
- * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value
- * indicates that the table either doesn't exist in the font, the
- * application hasn't asked for validation, or the validator doesn't have
- * the ability to validate the sfnt table.
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_TrueTypeGX_Validate
+ *
+ * @description:
+ * Validate various TrueTypeGX tables to assure that all offsets and
+ * indices are valid. The idea is that a higher-level library that
+ * actually does the text layout can access those tables without error
+ * checking (which can be quite time consuming).
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field that specifies the tables to be validated. See
+ * @FT_VALIDATE_GXXXX for possible values.
+ *
+ * table_length ::
+ * The size of the `tables` array. Normally, @FT_VALIDATE_GX_LENGTH
+ * should be passed.
+ *
+ * @output:
+ * tables ::
+ * The array where all validated sfnt tables are stored. The array
+ * itself must be allocated by a client.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function only works with TrueTypeGX fonts, returning an error
+ * otherwise.
+ *
+ * After use, the application should deallocate the buffers pointed to by
+ * each `tables` element, by calling @FT_TrueTypeGX_Free. A `NULL` value
+ * indicates that the table either doesn't exist in the font, the
+ * application hasn't asked for validation, or the validator doesn't have
+ * the ability to validate the sfnt table.
+ */
FT_EXPORT( FT_Error )
FT_TrueTypeGX_Validate( FT_Face face,
FT_UInt validation_flags,
@@ -229,119 +229,117 @@ FT_BEGIN_HEADER
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.
- */
+ /**************************************************************************
+ *
+ * @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.
- */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_VALIDATE_CKERNXXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_ClassicKern_Validate to
+ * indicate the classic kern dialect or dialects. If the selected type
+ * doesn't fit, @FT_ClassicKern_Validate regards the table as invalid.
+ *
+ * @values:
+ * FT_VALIDATE_MS ::
+ * Handle the 'kern' table as a classic Microsoft kern table.
+ *
+ * FT_VALIDATE_APPLE ::
+ * Handle the 'kern' table as a classic Apple kern table.
+ *
+ * FT_VALIDATE_CKERN ::
+ * Handle the 'kern' as either classic Apple or Microsoft kern table.
+ */
#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 )
#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 )
#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
- /**********************************************************************
- *
- * @function:
- * FT_ClassicKern_Validate
- *
- * @description:
- * Validate classic (16-bit format) kern table to assure that the offsets
- * and indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without error
- * checking (which can be quite time consuming).
- *
- * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
- * the new 32-bit format and the classic 16-bit format, while
- * FT_ClassicKern_Validate only supports the classic 16-bit format.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the dialect to be validated. See
- * @FT_VALIDATE_CKERNXXX for possible values.
- *
- * @output:
- * ckern_table ::
- * A pointer to the kern table.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * After use, the application should deallocate the buffers pointed to by
- * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value
- * indicates that the table doesn't exist in the font.
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_ClassicKern_Validate
+ *
+ * @description:
+ * Validate classic (16-bit format) kern table to assure that the
+ * offsets and indices are valid. The idea is that a higher-level
+ * library that actually does the text layout can access those tables
+ * without error checking (which can be quite time consuming).
+ *
+ * The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both
+ * the new 32-bit format and the classic 16-bit format, while
+ * FT_ClassicKern_Validate only supports the classic 16-bit format.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field that specifies the dialect to be validated. See
+ * @FT_VALIDATE_CKERNXXX for possible values.
+ *
+ * @output:
+ * ckern_table ::
+ * A pointer to the kern table.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * After use, the application should deallocate the buffers pointed to by
+ * `ckern_table`, by calling @FT_ClassicKern_Free. A `NULL` value
+ * indicates that the table doesn't exist in the font.
+ */
FT_EXPORT( FT_Error )
FT_ClassicKern_Validate( FT_Face face,
FT_UInt validation_flags,
FT_Bytes *ckern_table );
- /**********************************************************************
- *
- * @function:
- * FT_ClassicKern_Free
- *
- * @description:
- * Free the buffer allocated by classic Kern validator.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * table ::
- * The pointer to the buffer that is allocated by
- * @FT_ClassicKern_Validate.
- *
- * @note:
- * This function must be used to free the buffer allocated by
- * @FT_ClassicKern_Validate only.
- */
+ /**************************************************************************
+ *
+ * @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 );
diff --git a/freetype/include/freetype/ftgzip.h b/freetype/include/freetype/ftgzip.h
index db033da0..418c6122 100644
--- a/freetype/include/freetype/ftgzip.h
+++ b/freetype/include/freetype/ftgzip.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgzip.h */
-/* */
-/* Gzip-compressed stream support. */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgzip.h
+ *
+ * Gzip-compressed stream support.
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -31,108 +31,108 @@
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.
- */
+ /**************************************************************************
+ *
+ * @section:
+ * gzip
+ *
+ * @title:
+ * GZIP Streams
+ *
+ * @abstract:
+ * Using gzip-compressed font files.
+ *
+ * @description:
+ * This section contains the declaration of Gzip-specific functions.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Stream_OpenGzip
+ *
+ * @description:
+ * Open a new stream to parse gzip-compressed font files. This is mainly
+ * used to support the compressed `*.pcf.gz` fonts that come with
+ * XFree86.
+ *
+ * @input:
+ * stream ::
+ * The target embedding stream.
+ *
+ * source ::
+ * The source stream.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The source stream must be opened _before_ calling this function.
+ *
+ * Calling the internal function `FT_Stream_Close` on the new stream will
+ * **not** call `FT_Stream_Close` on the source stream. None of the
+ * stream objects will be released to the heap.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream.
+ *
+ * In certain builds of the library, gzip compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a gzipped stream from it
+ * and re-open the face with it.
+ *
+ * This function may return `FT_Err_Unimplemented_Feature` if your build
+ * of FreeType was not compiled with zlib support.
+ */
FT_EXPORT( FT_Error )
FT_Stream_OpenGzip( FT_Stream stream,
FT_Stream source );
- /************************************************************************
- *
- * @function:
- * FT_Gzip_Uncompress
- *
- * @description:
- * Decompress a zipped input buffer into an output buffer. This function
- * is modeled after zlib's `uncompress' function.
- *
- * @input:
- * memory ::
- * A FreeType memory handle.
- *
- * input ::
- * The input buffer.
- *
- * input_len ::
- * The length of the input buffer.
- *
- * @output:
- * output::
- * The output buffer.
- *
- * @inout:
- * output_len ::
- * Before calling the function, this is the total size of the output
- * buffer, which must be large enough to hold the entire uncompressed
- * data (so the size of the uncompressed data must be known in
- * advance). After calling the function, `output_len' is the size of
- * the used data in `output'.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with zlib support.
- *
- * @since:
- * 2.5.1
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Gzip_Uncompress
+ *
+ * @description:
+ * Decompress a zipped input buffer into an output buffer. This function
+ * is modeled after zlib's `uncompress` function.
+ *
+ * @input:
+ * memory ::
+ * A FreeType memory handle.
+ *
+ * input ::
+ * The input buffer.
+ *
+ * input_len ::
+ * The length of the input buffer.
+ *
+ * @output:
+ * output ::
+ * The output buffer.
+ *
+ * @inout:
+ * output_len ::
+ * Before calling the function, this is the total size of the output
+ * buffer, which must be large enough to hold the entire uncompressed
+ * data (so the size of the uncompressed data must be known in
+ * advance). After calling the function, `output_len` is the size of
+ * the used data in `output`.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function may return `FT_Err_Unimplemented_Feature` if your build
+ * of FreeType was not compiled with zlib support.
+ *
+ * @since:
+ * 2.5.1
+ */
FT_EXPORT( FT_Error )
FT_Gzip_Uncompress( FT_Memory memory,
FT_Byte* output,
diff --git a/freetype/include/freetype/ftimage.h b/freetype/include/freetype/ftimage.h
index 79ede195..face34fe 100644
--- a/freetype/include/freetype/ftimage.h
+++ b/freetype/include/freetype/ftimage.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* ftimage.h */
-/* */
-/* FreeType glyph image formats and default raster interface */
-/* (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftimage.h
+ *
+ * FreeType glyph image formats and default raster interface
+ * (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -37,40 +37,42 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Pos */
- /* */
- /* <Description> */
- /* The type FT_Pos is used to store vectorial coordinates. Depending */
- /* on the context, these can represent distances in integer font */
- /* units, or 16.16, or 26.6 fixed-point pixel coordinates. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Pos
+ *
+ * @description:
+ * The type FT_Pos is used to store vectorial coordinates. Depending on
+ * the context, these can represent distances in integer font units, or
+ * 16.16, or 26.6 fixed-point pixel coordinates.
+ */
typedef signed long FT_Pos;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Vector */
- /* */
- /* <Description> */
- /* A simple structure used to store a 2D vector; coordinates are of */
- /* the FT_Pos type. */
- /* */
- /* <Fields> */
- /* x :: The horizontal coordinate. */
- /* y :: The vertical coordinate. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -79,39 +81,41 @@ FT_BEGIN_HEADER
} FT_Vector;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_BBox */
- /* */
- /* <Description> */
- /* A structure used to hold an outline's bounding box, i.e., the */
- /* coordinates of its extrema in the horizontal and vertical */
- /* directions. */
- /* */
- /* <Fields> */
- /* xMin :: The horizontal minimum (left-most). */
- /* */
- /* yMin :: The vertical minimum (bottom-most). */
- /* */
- /* xMax :: The horizontal maximum (right-most). */
- /* */
- /* yMax :: The vertical maximum (top-most). */
- /* */
- /* <Note> */
- /* The bounding box is specified with the coordinates of the lower */
- /* left and the upper right corner. In PostScript, those values are */
- /* often called (llx,lly) and (urx,ury), respectively. */
- /* */
- /* If `yMin' is negative, this value gives the glyph's descender. */
- /* Otherwise, the glyph doesn't descend below the baseline. */
- /* Similarly, if `ymax' is positive, this value gives the glyph's */
- /* ascender. */
- /* */
- /* `xMin' gives the horizontal distance from the glyph's origin to */
- /* the left edge of the glyph's bounding box. If `xMin' is negative, */
- /* the glyph extends to the left of the origin. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_BBox
+ *
+ * @description:
+ * A structure used to hold an outline's bounding box, i.e., the
+ * coordinates of its extrema in the horizontal and vertical directions.
+ *
+ * @fields:
+ * xMin ::
+ * The horizontal minimum (left-most).
+ *
+ * yMin ::
+ * The vertical minimum (bottom-most).
+ *
+ * xMax ::
+ * The horizontal maximum (right-most).
+ *
+ * yMax ::
+ * The vertical maximum (top-most).
+ *
+ * @note:
+ * The bounding box is specified with the coordinates of the lower left
+ * and the upper right corner. In PostScript, those values are often
+ * called (llx,lly) and (urx,ury), respectively.
+ *
+ * If `yMin` is negative, this value gives the glyph's descender.
+ * Otherwise, the glyph doesn't descend below the baseline. Similarly,
+ * if `ymax` is positive, this value gives the glyph's ascender.
+ *
+ * `xMin` gives the horizontal distance from the glyph's origin to the
+ * left edge of the glyph's bounding box. If `xMin` is negative, the
+ * glyph extends to the left of the origin.
+ */
typedef struct FT_BBox_
{
FT_Pos xMin, yMin;
@@ -120,63 +124,60 @@ FT_BEGIN_HEADER
} FT_BBox;
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Pixel_Mode */
- /* */
- /* <Description> */
- /* An enumeration type used to describe the format of pixels in a */
- /* given bitmap. Note that additional formats may be added in the */
- /* future. */
- /* */
- /* <Values> */
- /* FT_PIXEL_MODE_NONE :: */
- /* Value~0 is reserved. */
- /* */
- /* FT_PIXEL_MODE_MONO :: */
- /* A monochrome bitmap, using 1~bit per pixel. Note that pixels */
- /* are stored in most-significant order (MSB), which means that */
- /* the left-most pixel in a byte has value 128. */
- /* */
- /* FT_PIXEL_MODE_GRAY :: */
- /* An 8-bit bitmap, generally used to represent anti-aliased glyph */
- /* images. Each pixel is stored in one byte. Note that the number */
- /* of `gray' levels is stored in the `num_grays' field of the */
- /* @FT_Bitmap structure (it generally is 256). */
- /* */
- /* FT_PIXEL_MODE_GRAY2 :: */
- /* A 2-bit per pixel bitmap, used to represent embedded */
- /* anti-aliased bitmaps in font files according to the OpenType */
- /* specification. We haven't found a single font using this */
- /* format, however. */
- /* */
- /* FT_PIXEL_MODE_GRAY4 :: */
- /* A 4-bit per pixel bitmap, representing embedded anti-aliased */
- /* bitmaps in font files according to the OpenType specification. */
- /* We haven't found a single font using this format, however. */
- /* */
- /* FT_PIXEL_MODE_LCD :: */
- /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
- /* used for display on LCD displays; the bitmap is three times */
- /* wider than the original glyph image. See also */
- /* @FT_RENDER_MODE_LCD. */
- /* */
- /* FT_PIXEL_MODE_LCD_V :: */
- /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
- /* used for display on rotated LCD displays; the bitmap is three */
- /* times taller than the original glyph image. See also */
- /* @FT_RENDER_MODE_LCD_V. */
- /* */
- /* FT_PIXEL_MODE_BGRA :: */
- /* [Since 2.5] An image with four 8-bit channels per pixel, */
- /* representing a color image (such as emoticons) with alpha */
- /* channel. For each pixel, the format is BGRA, which means, the */
- /* blue channel comes first in memory. The color channels are */
- /* pre-multiplied and in the sRGB colorspace. For example, full */
- /* red at half-translucent opacity will be represented as */
- /* `00,00,80,80', not `00,00,FF,80'. See also @FT_LOAD_COLOR. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Pixel_Mode
+ *
+ * @description:
+ * An enumeration type used to describe the format of pixels in a given
+ * bitmap. Note that additional formats may be added in the future.
+ *
+ * @values:
+ * FT_PIXEL_MODE_NONE ::
+ * Value~0 is reserved.
+ *
+ * FT_PIXEL_MODE_MONO ::
+ * A monochrome bitmap, using 1~bit per pixel. Note that pixels are
+ * stored in most-significant order (MSB), which means that the
+ * left-most pixel in a byte has value 128.
+ *
+ * FT_PIXEL_MODE_GRAY ::
+ * An 8-bit bitmap, generally used to represent anti-aliased glyph
+ * images. Each pixel is stored in one byte. Note that the number of
+ * 'gray' levels is stored in the `num_grays` field of the @FT_Bitmap
+ * structure (it generally is 256).
+ *
+ * FT_PIXEL_MODE_GRAY2 ::
+ * A 2-bit per pixel bitmap, used to represent embedded anti-aliased
+ * bitmaps in font files according to the OpenType specification. We
+ * haven't found a single font using this format, however.
+ *
+ * FT_PIXEL_MODE_GRAY4 ::
+ * A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps
+ * in font files according to the OpenType specification. We haven't
+ * found a single font using this format, however.
+ *
+ * FT_PIXEL_MODE_LCD ::
+ * An 8-bit bitmap, representing RGB or BGR decimated glyph images used
+ * for display on LCD displays; the bitmap is three times wider than
+ * the original glyph image. See also @FT_RENDER_MODE_LCD.
+ *
+ * FT_PIXEL_MODE_LCD_V ::
+ * An 8-bit bitmap, representing RGB or BGR decimated glyph images used
+ * for display on rotated LCD displays; the bitmap is three times
+ * taller than the original glyph image. See also
+ * @FT_RENDER_MODE_LCD_V.
+ *
+ * FT_PIXEL_MODE_BGRA ::
+ * [Since 2.5] An image with four 8-bit channels per pixel,
+ * representing a color image (such as emoticons) with alpha channel.
+ * For each pixel, the format is BGRA, which means, the blue channel
+ * comes first in memory. The color channels are pre-multiplied and in
+ * the sRGB colorspace. For example, full red at half-translucent
+ * opacity will be represented as '00,00,80,80', not '00,00,FF,80'.
+ * See also @FT_LOAD_COLOR.
+ */
typedef enum FT_Pixel_Mode_
{
FT_PIXEL_MODE_NONE = 0,
@@ -193,7 +194,7 @@ FT_BEGIN_HEADER
} FT_Pixel_Mode;
- /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */
+ /* these constants are deprecated; use the corresponding `FT_Pixel_Mode` */
/* values instead. */
#define ft_pixel_mode_none FT_PIXEL_MODE_NONE
#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO
@@ -202,62 +203,61 @@ FT_BEGIN_HEADER
#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Bitmap */
- /* */
- /* <Description> */
- /* A structure used to describe a bitmap or pixmap to the raster. */
- /* Note that we now manage pixmaps of various depths through the */
- /* `pixel_mode' field. */
- /* */
- /* <Fields> */
- /* rows :: The number of bitmap rows. */
- /* */
- /* width :: The number of pixels in bitmap row. */
- /* */
- /* pitch :: The pitch's absolute value is the number of bytes */
- /* taken by one bitmap row, including padding. */
- /* However, the pitch is positive when the bitmap has */
- /* a `down' flow, and negative when it has an `up' */
- /* flow. In all cases, the pitch is an offset to add */
- /* to a bitmap pointer in order to go down one row. */
- /* */
- /* Note that `padding' means the alignment of a */
- /* bitmap to a byte border, and FreeType functions */
- /* normally align to the smallest possible integer */
- /* value. */
- /* */
- /* For the B/W rasterizer, `pitch' is always an even */
- /* number. */
- /* */
- /* To change the pitch of a bitmap (say, to make it a */
- /* multiple of 4), use @FT_Bitmap_Convert. */
- /* Alternatively, you might use callback functions to */
- /* directly render to the application's surface; see */
- /* the file `example2.cpp' in the tutorial for a */
- /* demonstration. */
- /* */
- /* buffer :: A typeless pointer to the bitmap buffer. This */
- /* value should be aligned on 32-bit boundaries in */
- /* most cases. */
- /* */
- /* num_grays :: This field is only used with */
- /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */
- /* levels used in the bitmap. */
- /* */
- /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */
- /* See @FT_Pixel_Mode for possible values. */
- /* */
- /* palette_mode :: This field is intended for paletted pixel modes; */
- /* it indicates how the palette is stored. Not */
- /* used currently. */
- /* */
- /* palette :: A typeless pointer to the bitmap palette; this */
- /* field is intended for paletted pixel modes. Not */
- /* used currently. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Bitmap
+ *
+ * @description:
+ * A structure used to describe a bitmap or pixmap to the raster. Note
+ * that we now manage pixmaps of various depths through the `pixel_mode`
+ * field.
+ *
+ * @fields:
+ * rows ::
+ * The number of bitmap rows.
+ *
+ * width ::
+ * The number of pixels in bitmap row.
+ *
+ * pitch ::
+ * The pitch's absolute value is the number of bytes taken by one
+ * bitmap row, including padding. However, the pitch is positive when
+ * the bitmap has a 'down' flow, and negative when it has an 'up' flow.
+ * In all cases, the pitch is an offset to add to a bitmap pointer in
+ * order to go down one row.
+ *
+ * Note that 'padding' means the alignment of a bitmap to a byte
+ * border, and FreeType functions normally align to the smallest
+ * possible integer value.
+ *
+ * For the B/W rasterizer, `pitch` is always an even number.
+ *
+ * To change the pitch of a bitmap (say, to make it a multiple of 4),
+ * use @FT_Bitmap_Convert. Alternatively, you might use callback
+ * functions to directly render to the application's surface; see the
+ * file `example2.cpp` in the tutorial for a demonstration.
+ *
+ * buffer ::
+ * A typeless pointer to the bitmap buffer. This value should be
+ * aligned on 32-bit boundaries in most cases.
+ *
+ * num_grays ::
+ * This field is only used with @FT_PIXEL_MODE_GRAY; it gives the
+ * number of gray levels used in the bitmap.
+ *
+ * pixel_mode ::
+ * The pixel mode, i.e., how pixel bits are stored. See @FT_Pixel_Mode
+ * for possible values.
+ *
+ * palette_mode ::
+ * This field is intended for paletted pixel modes; it indicates how
+ * the palette is stored. Not used currently.
+ *
+ * palette ::
+ * A typeless pointer to the bitmap palette; this field is intended for
+ * paletted pixel modes. Not used currently.
+ */
typedef struct FT_Bitmap_
{
unsigned int rows;
@@ -272,65 +272,68 @@ FT_BEGIN_HEADER
} 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 Bezier control point, while it is `on' if */
- /* set. */
- /* */
- /* Bit~1 is meaningful for `off' points only. If set, */
- /* it indicates a third-order Bezier arc control point; */
- /* and a second-order control point if unset. */
- /* */
- /* If bit~2 is set, bits 5-7 contain the drop-out mode */
- /* (as defined in the OpenType specification; the value */
- /* is the same as the argument to the SCANMODE */
- /* instruction). */
- /* */
- /* Bits 3 and~4 are reserved for internal purposes. */
- /* */
- /* contours :: An array of `n_contours' shorts, giving the end */
- /* point of each contour within the outline. For */
- /* example, the first contour is defined by the points */
- /* `0' to `contours[0]', the second one is defined by */
- /* the points `contours[0]+1' to `contours[1]', etc. */
- /* */
- /* flags :: A set of bit flags used to characterize the outline */
- /* and give hints to the scan-converter and hinter on */
- /* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */
- /* */
- /* <Note> */
- /* The B/W rasterizer only checks bit~2 in the `tags' array for the */
- /* first point of each contour. The drop-out mode as given with */
- /* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */
- /* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */
- /* */
+ /**************************************************************************
+ *
+ * @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 Bezier
+ * control point, while it is 'on' if set.
+ *
+ * Bit~1 is meaningful for 'off' points only. If set, it indicates a
+ * third-order Bezier arc control point; and a second-order control
+ * point if unset.
+ *
+ * If bit~2 is set, bits 5-7 contain the drop-out mode (as defined in
+ * the OpenType specification; the value is the same as the argument to
+ * the 'SCANMODE' instruction).
+ *
+ * Bits 3 and~4 are reserved for internal purposes.
+ *
+ * contours ::
+ * An array of `n_contours` shorts, giving the end point of each
+ * contour within the outline. For example, the first contour is
+ * defined by the points '0' to `contours[0]`, the second one is
+ * defined by the points `contours[0]+1` to `contours[1]`, etc.
+ *
+ * flags ::
+ * A set of bit flags used to characterize the outline and give hints
+ * to the scan-converter and hinter on how to convert/grid-fit it. See
+ * @FT_OUTLINE_XXX.
+ *
+ * @note:
+ * The B/W rasterizer only checks bit~2 in the `tags` array for the first
+ * point of each contour. The drop-out mode as given with
+ * @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and
+ * @FT_OUTLINE_INCLUDE_STUBS in `flags` is then overridden.
+ */
typedef struct FT_Outline_
{
short n_contours; /* number of contours in glyph */
@@ -352,78 +355,76 @@ FT_BEGIN_HEADER
#define FT_OUTLINE_POINTS_MAX SHRT_MAX
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_OUTLINE_XXX */
- /* */
- /* <Description> */
- /* A list of bit-field constants use for the flags in an outline's */
- /* `flags' field. */
- /* */
- /* <Values> */
- /* FT_OUTLINE_NONE :: */
- /* Value~0 is reserved. */
- /* */
- /* FT_OUTLINE_OWNER :: */
- /* If set, this flag indicates that the outline's field arrays */
- /* (i.e., `points', `flags', and `contours') are `owned' by the */
- /* outline object, and should thus be freed when it is destroyed. */
- /* */
- /* FT_OUTLINE_EVEN_ODD_FILL :: */
- /* By default, outlines are filled using the non-zero winding rule. */
- /* If set to 1, the outline will be filled using the even-odd fill */
- /* rule (only works with the smooth rasterizer). */
- /* */
- /* FT_OUTLINE_REVERSE_FILL :: */
- /* By default, outside contours of an outline are oriented in */
- /* clock-wise direction, as defined in the TrueType specification. */
- /* This flag is set if the outline uses the opposite direction */
- /* (typically for Type~1 fonts). This flag is ignored by the scan */
- /* converter. */
- /* */
- /* FT_OUTLINE_IGNORE_DROPOUTS :: */
- /* By default, the scan converter will try to detect drop-outs in */
- /* an outline and correct the glyph bitmap to ensure consistent */
- /* shape continuity. If set, this flag hints the scan-line */
- /* converter to ignore such cases. See below for more information. */
- /* */
- /* FT_OUTLINE_SMART_DROPOUTS :: */
- /* Select smart dropout control. If unset, use simple dropout */
- /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */
- /* below for more information. */
- /* */
- /* FT_OUTLINE_INCLUDE_STUBS :: */
- /* If set, turn pixels on for `stubs', otherwise exclude them. */
- /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */
- /* more information. */
- /* */
- /* FT_OUTLINE_HIGH_PRECISION :: */
- /* This flag indicates that the scan-line converter should try to */
- /* convert this outline to bitmaps with the highest possible */
- /* quality. It is typically set for small character sizes. Note */
- /* that this is only a hint that might be completely ignored by a */
- /* given scan-converter. */
- /* */
- /* FT_OUTLINE_SINGLE_PASS :: */
- /* This flag is set to force a given scan-converter to only use a */
- /* single pass over the outline to render a bitmap glyph image. */
- /* Normally, it is set for very large character sizes. It is only */
- /* a hint that might be completely ignored by a given */
- /* scan-converter. */
- /* */
- /* <Note> */
- /* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
- /* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */
- /* rasterizer. */
- /* */
- /* There exists a second mechanism to pass the drop-out mode to the */
- /* B/W rasterizer; see the `tags' field in @FT_Outline. */
- /* */
- /* Please refer to the description of the `SCANTYPE' instruction in */
- /* the OpenType specification (in file `ttinst1.doc') how simple */
- /* drop-outs, smart drop-outs, and stubs are defined. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_OUTLINE_XXX
+ *
+ * @description:
+ * A list of bit-field constants used for the flags in an outline's
+ * `flags` field.
+ *
+ * @values:
+ * FT_OUTLINE_NONE ::
+ * Value~0 is reserved.
+ *
+ * FT_OUTLINE_OWNER ::
+ * If set, this flag indicates that the outline's field arrays (i.e.,
+ * `points`, `flags`, and `contours`) are 'owned' by the outline
+ * object, and should thus be freed when it is destroyed.
+ *
+ * FT_OUTLINE_EVEN_ODD_FILL ::
+ * By default, outlines are filled using the non-zero winding rule. If
+ * set to 1, the outline will be filled using the even-odd fill rule
+ * (only works with the smooth rasterizer).
+ *
+ * FT_OUTLINE_REVERSE_FILL ::
+ * By default, outside contours of an outline are oriented in
+ * clock-wise direction, as defined in the TrueType specification.
+ * This flag is set if the outline uses the opposite direction
+ * (typically for Type~1 fonts). This flag is ignored by the scan
+ * converter.
+ *
+ * FT_OUTLINE_IGNORE_DROPOUTS ::
+ * By default, the scan converter will try to detect drop-outs in an
+ * outline and correct the glyph bitmap to ensure consistent shape
+ * continuity. If set, this flag hints the scan-line converter to
+ * ignore such cases. See below for more information.
+ *
+ * FT_OUTLINE_SMART_DROPOUTS ::
+ * Select smart dropout control. If unset, use simple dropout control.
+ * Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more
+ * information.
+ *
+ * FT_OUTLINE_INCLUDE_STUBS ::
+ * If set, turn pixels on for 'stubs', otherwise exclude them. Ignored
+ * if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more
+ * information.
+ *
+ * FT_OUTLINE_HIGH_PRECISION ::
+ * This flag indicates that the scan-line converter should try to
+ * convert this outline to bitmaps with the highest possible quality.
+ * It is typically set for small character sizes. Note that this is
+ * only a hint that might be completely ignored by a given
+ * scan-converter.
+ *
+ * FT_OUTLINE_SINGLE_PASS ::
+ * This flag is set to force a given scan-converter to only use a
+ * single pass over the outline to render a bitmap glyph image.
+ * Normally, it is set for very large character sizes. It is only a
+ * hint that might be completely ignored by a given scan-converter.
+ *
+ * @note:
+ * The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and
+ * @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer.
+ *
+ * There exists a second mechanism to pass the drop-out mode to the B/W
+ * rasterizer; see the `tags` field in @FT_Outline.
+ *
+ * Please refer to the description of the 'SCANTYPE' instruction in the
+ * OpenType specification (in file `ttinst1.doc`) how simple drop-outs,
+ * smart drop-outs, and stubs are defined.
+ */
#define FT_OUTLINE_NONE 0x0
#define FT_OUTLINE_OWNER 0x1
#define FT_OUTLINE_EVEN_ODD_FILL 0x2
@@ -437,7 +438,7 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `FT_OUTLINE_XXX' values instead */
+ /* `FT_OUTLINE_XXX` values instead */
#define ft_outline_none FT_OUTLINE_NONE
#define ft_outline_owner FT_OUTLINE_OWNER
#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL
@@ -448,20 +449,25 @@ FT_BEGIN_HEADER
/* */
-#define FT_CURVE_TAG( flag ) ( flag & 3 )
+#define FT_CURVE_TAG( flag ) ( flag & 0x03 )
-#define FT_CURVE_TAG_ON 1
-#define FT_CURVE_TAG_CONIC 0
-#define FT_CURVE_TAG_CUBIC 2
+ /* see the `tags` field in `FT_Outline` for a description of the values */
+#define FT_CURVE_TAG_ON 0x01
+#define FT_CURVE_TAG_CONIC 0x00
+#define FT_CURVE_TAG_CUBIC 0x02
-#define FT_CURVE_TAG_HAS_SCANMODE 4
+#define FT_CURVE_TAG_HAS_SCANMODE 0x04
-#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_X 0x08 /* reserved for TrueType hinter */
+#define FT_CURVE_TAG_TOUCH_Y 0x10 /* reserved for TrueType hinter */
#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \
FT_CURVE_TAG_TOUCH_Y )
+ /* values 0x20, 0x40, and 0x80 are reserved */
+
+ /* these constants are deprecated; use the corresponding */
+ /* `FT_CURVE_TAG_XXX` values instead */
#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
@@ -469,26 +475,28 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -496,26 +504,28 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -523,30 +533,33 @@ FT_BEGIN_HEADER
#define FT_Outline_LineTo_Func FT_Outline_LineToFunc
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_ConicToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `conic */
- /* to' function during outline walking or decomposition. */
- /* */
- /* A `conic to' is emitted to indicate a second-order Bezier 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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Outline_ConicToFunc
+ *
+ * @description:
+ * A function pointer type used to describe the signature of a 'conic to'
+ * function during outline walking or decomposition.
+ *
+ * A 'conic to' is emitted to indicate a second-order Bezier 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,
@@ -555,30 +568,34 @@ FT_BEGIN_HEADER
#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_CubicToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `cubic */
- /* to' function during outline walking or decomposition. */
- /* */
- /* A `cubic to' is emitted to indicate a third-order Bezier arc. */
- /* */
- /* <Input> */
- /* control1 :: A pointer to the first Bezier control point. */
- /* */
- /* control2 :: A pointer to the second Bezier 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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Outline_CubicToFunc
+ *
+ * @description:
+ * A function pointer type used to describe the signature of a 'cubic to'
+ * function during outline walking or decomposition.
+ *
+ * A 'cubic to' is emitted to indicate a third-order Bezier arc.
+ *
+ * @input:
+ * control1 ::
+ * A pointer to the first Bezier control point.
+ *
+ * control2 ::
+ * A pointer to the second Bezier 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,
@@ -588,43 +605,49 @@ FT_BEGIN_HEADER
#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 Beziers. */
- /* */
- /* <Fields> */
- /* move_to :: The `move to' emitter. */
- /* */
- /* line_to :: The segment emitter. */
- /* */
- /* conic_to :: The second-order Bezier arc emitter. */
- /* */
- /* cubic_to :: The third-order Bezier arc emitter. */
- /* */
- /* shift :: The shift that is applied to coordinates before they */
- /* are sent to the emitter. */
- /* */
- /* delta :: The delta that is applied to coordinates before they */
- /* are sent to the emitter, but after the shift. */
- /* */
- /* <Note> */
- /* The point coordinates sent to the emitters are the transformed */
- /* version of the original coordinates (this is important for high */
- /* accuracy during scan-conversion). The transformation is simple: */
- /* */
- /* { */
- /* x' = (x << shift) - delta */
- /* y' = (y << shift) - delta */
- /* } */
- /* */
- /* Set the values of `shift' and `delta' to~0 to get the original */
- /* point coordinates. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Outline_Funcs
+ *
+ * @description:
+ * A structure to hold various function pointers used during outline
+ * decomposition in order to emit segments, conic, and cubic Beziers.
+ *
+ * @fields:
+ * move_to ::
+ * The 'move to' emitter.
+ *
+ * line_to ::
+ * The segment emitter.
+ *
+ * conic_to ::
+ * The second-order Bezier arc emitter.
+ *
+ * cubic_to ::
+ * The third-order Bezier arc emitter.
+ *
+ * shift ::
+ * The shift that is applied to coordinates before they are sent to the
+ * emitter.
+ *
+ * delta ::
+ * The delta that is applied to coordinates before they are sent to the
+ * emitter, but after the shift.
+ *
+ * @note:
+ * The point coordinates sent to the emitters are the transformed version
+ * of the original coordinates (this is important for high accuracy
+ * during scan-conversion). The transformation is simple:
+ *
+ * ```
+ * x' = (x << shift) - delta
+ * y' = (y << shift) - delta
+ * ```
+ *
+ * Set the values of `shift` and `delta` to~0 to get the original point
+ * coordinates.
+ */
typedef struct FT_Outline_Funcs_
{
FT_Outline_MoveToFunc move_to;
@@ -638,33 +661,32 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 ) | \
@@ -674,44 +696,43 @@ FT_BEGIN_HEADER
#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 Bezier 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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
+ * Bezier 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 ),
@@ -725,7 +746,7 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `FT_Glyph_Format' values instead. */
+ /* `FT_Glyph_Format` values instead. */
#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE
#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE
#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP
@@ -744,87 +765,89 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* A raster is a scan converter, in charge of rendering an outline into */
- /* a bitmap. This section contains the public API for rasters. */
- /* */
- /* Note that in FreeType 2, all rasters are now encapsulated within */
- /* specific modules called `renderers'. See `ftrender.h' for more */
- /* details on renderers. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* raster */
- /* */
- /* <Title> */
- /* Scanline Converter */
- /* */
- /* <Abstract> */
- /* How vectorial outlines are converted into bitmaps and pixmaps. */
- /* */
- /* <Description> */
- /* This section contains technical definitions. */
- /* */
- /* <Order> */
- /* FT_Raster */
- /* FT_Span */
- /* FT_SpanFunc */
- /* */
- /* FT_Raster_Params */
- /* FT_RASTER_FLAG_XXX */
- /* */
- /* FT_Raster_NewFunc */
- /* FT_Raster_DoneFunc */
- /* FT_Raster_ResetFunc */
- /* FT_Raster_SetModeFunc */
- /* FT_Raster_RenderFunc */
- /* FT_Raster_Funcs */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Raster */
- /* */
- /* <Description> */
- /* An opaque handle (pointer) to a raster object. Each object can be */
- /* used independently to convert an outline into a bitmap or pixmap. */
- /* */
+ /**************************************************************************
+ *
+ * A raster is a scan converter, in charge of rendering an outline into a
+ * bitmap. This section contains the public API for rasters.
+ *
+ * Note that in FreeType 2, all rasters are now encapsulated within
+ * specific modules called 'renderers'. See `ftrender.h` for more details
+ * on renderers.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * raster
+ *
+ * @title:
+ * Scanline Converter
+ *
+ * @abstract:
+ * How vectorial outlines are converted into bitmaps and pixmaps.
+ *
+ * @description:
+ * This section contains technical definitions.
+ *
+ * @order:
+ * FT_Raster
+ * FT_Span
+ * FT_SpanFunc
+ *
+ * FT_Raster_Params
+ * FT_RASTER_FLAG_XXX
+ *
+ * FT_Raster_NewFunc
+ * FT_Raster_DoneFunc
+ * FT_Raster_ResetFunc
+ * FT_Raster_SetModeFunc
+ * FT_Raster_RenderFunc
+ * FT_Raster_Funcs
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Raster
+ *
+ * @description:
+ * An opaque handle (pointer) to a raster object. Each object can be
+ * used independently to convert an outline into a bitmap or pixmap.
+ */
typedef struct FT_RasterRec_* FT_Raster;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Span */
- /* */
- /* <Description> */
- /* A structure used to model a single span of gray pixels when */
- /* rendering an anti-aliased bitmap. */
- /* */
- /* <Fields> */
- /* x :: The span's horizontal start position. */
- /* */
- /* len :: The span's length in pixels. */
- /* */
- /* coverage :: The span color/coverage, ranging from 0 (background) */
- /* to 255 (foreground). */
- /* */
- /* <Note> */
- /* This structure is used by the span drawing callback type named */
- /* @FT_SpanFunc that takes the y~coordinate of the span as a */
- /* parameter. */
- /* */
- /* The coverage value is always between 0 and 255. If you want less */
- /* gray values, the callback function has to reduce them. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Span
+ *
+ * @description:
+ * A structure used to model a single span of gray pixels when rendering
+ * an anti-aliased bitmap.
+ *
+ * @fields:
+ * x ::
+ * The span's horizontal start position.
+ *
+ * len ::
+ * The span's length in pixels.
+ *
+ * coverage ::
+ * The span color/coverage, ranging from 0 (background) to 255
+ * (foreground).
+ *
+ * @note:
+ * This structure is used by the span drawing callback type named
+ * @FT_SpanFunc that takes the y~coordinate of the span as a parameter.
+ *
+ * The coverage value is always between 0 and 255. If you want less gray
+ * values, the callback function has to reduce them.
+ */
typedef struct FT_Span_
{
short x;
@@ -834,32 +857,36 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 upward y~coordinate.
+ *
+ * count ::
+ * The number of spans to draw on this scanline.
+ *
+ * spans ::
+ * A table of `count` spans to draw on the scanline.
+ *
+ * user ::
+ * User-supplied data that is passed to the callback.
+ *
+ * @note:
+ * This callback allows client applications to directly render the gray
+ * spans of the anti-aliased bitmap to any kind of surfaces.
+ *
+ * This can be used to write anti-aliased outlines directly to a given
+ * background bitmap, and even perform translucency.
+ */
typedef void
(*FT_SpanFunc)( int y,
int count,
@@ -869,131 +896,129 @@ FT_BEGIN_HEADER
#define FT_Raster_Span_Func FT_SpanFunc
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_BitTest_Func */
- /* */
- /* <Description> */
- /* Deprecated, unimplemented. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Raster_BitTest_Func
+ *
+ * @description:
+ * Deprecated, unimplemented.
+ */
typedef int
(*FT_Raster_BitTest_Func)( int y,
int x,
void* user );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_BitSet_Func */
- /* */
- /* <Description> */
- /* Deprecated, unimplemented. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Raster_BitSet_Func
+ *
+ * @description:
+ * Deprecated, unimplemented.
+ */
typedef void
(*FT_Raster_BitSet_Func)( int y,
int x,
void* user );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_RASTER_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flag constants as used in the `flags' field of a */
- /* @FT_Raster_Params structure. */
- /* */
- /* <Values> */
- /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */
- /* */
- /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */
- /* anti-aliased glyph image should be */
- /* generated. Otherwise, it will be */
- /* monochrome (1-bit). */
- /* */
- /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */
- /* rendering. In this mode, client */
- /* applications must provide their own span */
- /* callback. This lets them directly */
- /* draw or compose over an existing bitmap. */
- /* If this bit is not set, the target */
- /* pixmap's buffer _must_ be zeroed before */
- /* rendering. */
- /* */
- /* Direct rendering is only possible with */
- /* anti-aliased glyphs. */
- /* */
- /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */
- /* rendering mode. If set, the output will */
- /* be clipped to a box specified in the */
- /* `clip_box' field of the */
- /* @FT_Raster_Params structure. */
- /* */
- /* Note that by default, the glyph bitmap */
- /* is clipped to the target pixmap, except */
- /* in direct rendering mode where all spans */
- /* are generated if no clipping box is set. */
- /* */
+ /**************************************************************************
+ *
+ * @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 and the output will be clipped to its size.
+ *
+ * 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. Otherwise, the `clip_box` is
+ * effectively set to the bounding box and all spans are generated.
+ */
#define FT_RASTER_FLAG_DEFAULT 0x0
#define FT_RASTER_FLAG_AA 0x1
#define FT_RASTER_FLAG_DIRECT 0x2
#define FT_RASTER_FLAG_CLIP 0x4
/* these constants are deprecated; use the corresponding */
- /* `FT_RASTER_FLAG_XXX' values instead */
+ /* `FT_RASTER_FLAG_XXX` values instead */
#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT
#define ft_raster_flag_aa FT_RASTER_FLAG_AA
#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT
#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Raster_Params */
- /* */
- /* <Description> */
- /* A structure to hold the arguments used by a raster's render */
- /* function. */
- /* */
- /* <Fields> */
- /* target :: The target bitmap. */
- /* */
- /* source :: A pointer to the source glyph image (e.g., an */
- /* @FT_Outline). */
- /* */
- /* flags :: The rendering flags. */
- /* */
- /* gray_spans :: The gray span drawing callback. */
- /* */
- /* black_spans :: Unused. */
- /* */
- /* bit_test :: Unused. */
- /* */
- /* bit_set :: Unused. */
- /* */
- /* user :: User-supplied data that is passed to each drawing */
- /* callback. */
- /* */
- /* clip_box :: An optional clipping box. It is only used in */
- /* direct rendering mode. Note that coordinates here */
- /* should be expressed in _integer_ pixels (and not in */
- /* 26.6 fixed-point units). */
- /* */
- /* <Note> */
- /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */
- /* bit flag is set in the `flags' field, otherwise a monochrome */
- /* bitmap is generated. */
- /* */
- /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */
- /* raster will call the `gray_spans' callback to draw gray pixel */
- /* spans. This allows direct composition over a pre-existing bitmap */
- /* through user-provided callbacks to perform the span drawing and */
- /* composition. Not supported by the monochrome rasterizer. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Raster_Params
+ *
+ * @description:
+ * A structure to hold the parameters used by a raster's render function,
+ * passed as an argument to @FT_Outline_Render.
+ *
+ * @fields:
+ * target ::
+ * The target bitmap.
+ *
+ * source ::
+ * A pointer to the source glyph image (e.g., an @FT_Outline).
+ *
+ * flags ::
+ * The rendering flags.
+ *
+ * gray_spans ::
+ * The gray span drawing callback.
+ *
+ * black_spans ::
+ * Unused.
+ *
+ * bit_test ::
+ * Unused.
+ *
+ * bit_set ::
+ * Unused.
+ *
+ * user ::
+ * User-supplied data that is passed to each drawing callback.
+ *
+ * clip_box ::
+ * An optional clipping box. It is only used in direct rendering mode.
+ * Note that coordinates here should be expressed in _integer_ pixels
+ * (and not in 26.6 fixed-point units).
+ *
+ * @note:
+ * An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA bit
+ * flag is set in the `flags` field, otherwise a monochrome bitmap is
+ * generated.
+ *
+ * If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags`, the raster
+ * will call the `gray_spans` callback to draw gray pixel spans. This
+ * allows direct composition over a pre-existing bitmap through
+ * user-provided callbacks to perform the span drawing and composition.
+ * Not supported by the monochrome rasterizer.
+ */
typedef struct FT_Raster_Params_
{
const FT_Bitmap* target;
@@ -1009,30 +1034,32 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -1040,49 +1067,52 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Raster_DoneFunc
+ *
+ * @description:
+ * A function used to destroy a given raster object.
+ *
+ * @input:
+ * raster ::
+ * A handle to the raster object.
+ */
typedef void
(*FT_Raster_DoneFunc)( FT_Raster raster );
#define FT_Raster_Done_Func FT_Raster_DoneFunc
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_ResetFunc */
- /* */
- /* <Description> */
- /* FreeType used to provide an area of memory called the `render */
- /* pool' available to all registered rasterizers. This was not */
- /* thread safe, however, and now FreeType never allocates this pool. */
- /* */
- /* This function is called after a new raster object is created. */
- /* */
- /* <Input> */
- /* raster :: A handle to the new raster object. */
- /* */
- /* pool_base :: Previously, the address in memory of the render pool. */
- /* Set this to NULL. */
- /* */
- /* pool_size :: Previously, the size in bytes of the render pool. */
- /* Set this to 0. */
- /* */
- /* <Note> */
- /* Rasterizers should rely on dynamic or stack allocation if they */
- /* want to (a handle to the memory allocator is passed to the */
- /* rasterizer constructor). */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Raster_ResetFunc
+ *
+ * @description:
+ * FreeType used to provide an area of memory called the 'render pool'
+ * available to all registered rasterizers. This was not thread safe,
+ * however, and now FreeType never allocates this pool.
+ *
+ * This function is called after a new raster object is created.
+ *
+ * @input:
+ * raster ::
+ * A handle to the new raster object.
+ *
+ * pool_base ::
+ * Previously, the address in memory of the render pool. Set this to
+ * `NULL`.
+ *
+ * pool_size ::
+ * Previously, the size in bytes of the render pool. Set this to 0.
+ *
+ * @note:
+ * Rasterizers should rely on dynamic or stack allocation if they want to
+ * (a handle to the memory allocator is passed to the rasterizer
+ * constructor).
+ */
typedef void
(*FT_Raster_ResetFunc)( FT_Raster raster,
unsigned char* pool_base,
@@ -1091,24 +1121,26 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1117,40 +1149,36 @@ FT_BEGIN_HEADER
#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_RenderFunc */
- /* */
- /* <Description> */
- /* Invoke a given raster to scan-convert a given glyph image into a */
- /* target bitmap. */
- /* */
- /* <Input> */
- /* raster :: A handle to the raster object. */
- /* */
- /* params :: A pointer to an @FT_Raster_Params structure used to */
- /* store the rendering parameters. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- /* <Note> */
- /* The exact format of the source image depends on the raster's glyph */
- /* format defined in its @FT_Raster_Funcs structure. It can be an */
- /* @FT_Outline or anything else in order to support a large array of */
- /* glyph formats. */
- /* */
- /* Note also that the render function can fail and return a */
- /* `FT_Err_Unimplemented_Feature' error code if the raster used does */
- /* not support direct composition. */
- /* */
- /* XXX: For now, the standard raster doesn't support direct */
- /* composition but this should change for the final release (see */
- /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */
- /* for examples of distinct implementations that support direct */
- /* composition). */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ */
typedef int
(*FT_Raster_RenderFunc)( FT_Raster raster,
const FT_Raster_Params* params );
@@ -1158,25 +1186,30 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
diff --git a/freetype/include/freetype/ftincrem.h b/freetype/include/freetype/ftincrem.h
index 44619f94..a4db02b5 100644
--- a/freetype/include/freetype/ftincrem.h
+++ b/freetype/include/freetype/ftincrem.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftincrem.h */
-/* */
-/* FreeType incremental loading (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftincrem.h
+ *
+ * FreeType incremental loading (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -32,7 +32,7 @@
FT_BEGIN_HEADER
- /***************************************************************************
+ /**************************************************************************
*
* @section:
* incremental
@@ -45,7 +45,7 @@ FT_BEGIN_HEADER
*
* @description:
* This section contains various functions used to perform so-called
- * `incremental' glyph loading. This is a mode where all glyphs loaded
+ * '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
@@ -60,23 +60,24 @@ FT_BEGIN_HEADER
*/
- /***************************************************************************
+ /**************************************************************************
*
* @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.
+ * '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.
+ * 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.
@@ -85,14 +86,14 @@ FT_BEGIN_HEADER
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.
+ * A small structure used to contain the basic glyph metrics returned by
+ * the @FT_Incremental_GetGlyphMetricsFunc method.
*
* @fields:
* bearing_x ::
@@ -109,7 +110,7 @@ FT_BEGIN_HEADER
*
* @note:
* These correspond to horizontal or vertical metrics depending on the
- * value of the `vertical' argument to the function
+ * value of the `vertical` argument to the function
* @FT_Incremental_GetGlyphMetricsFunc.
*
*/
@@ -123,7 +124,7 @@ FT_BEGIN_HEADER
} FT_Incremental_MetricsRec;
- /***************************************************************************
+ /**************************************************************************
*
* @struct:
* FT_Incremental_Metrics
@@ -135,7 +136,7 @@ FT_BEGIN_HEADER
typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics;
- /***************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Incremental_GetGlyphDataFunc
@@ -147,8 +148,8 @@ FT_BEGIN_HEADER
*
* 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
+ * 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:
@@ -169,8 +170,8 @@ FT_BEGIN_HEADER
*
* @note:
* If this function returns successfully the method
- * @FT_Incremental_FreeGlyphDataFunc will be called later to release
- * the data bytes.
+ * @FT_Incremental_FreeGlyphDataFunc will be called later to release the
+ * data bytes.
*
* Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
* compound glyphs.
@@ -182,7 +183,7 @@ FT_BEGIN_HEADER
FT_Data* adata );
- /***************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Incremental_FreeGlyphDataFunc
@@ -206,7 +207,7 @@ FT_BEGIN_HEADER
FT_Data* data );
- /***************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Incremental_GetGlyphMetricsFunc
@@ -214,8 +215,8 @@ FT_BEGIN_HEADER
* @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.
+ * formats like TrueType, the metrics are stored in a different place
+ * from the glyph images proper.
*
* @input:
* incremental ::
@@ -229,9 +230,9 @@ FT_BEGIN_HEADER
* 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.
+ * 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 ::
@@ -252,8 +253,8 @@ FT_BEGIN_HEADER
* FT_Incremental_FuncsRec
*
* @description:
- * A table of functions for accessing fonts that load data
- * incrementally. Used in @FT_Incremental_InterfaceRec.
+ * A table of functions for accessing fonts that load data incrementally.
+ * Used in @FT_Incremental_InterfaceRec.
*
* @fields:
* get_glyph_data ::
@@ -263,8 +264,8 @@ FT_BEGIN_HEADER
* 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.
+ * The function to get glyph metrics. May be null if the font does not
+ * provide overriding glyph metrics.
*
*/
typedef struct FT_Incremental_FuncsRec_
@@ -276,7 +277,7 @@ FT_BEGIN_HEADER
} FT_Incremental_FuncsRec;
- /***************************************************************************
+ /**************************************************************************
*
* @struct:
* FT_Incremental_InterfaceRec
@@ -286,30 +287,30 @@ FT_BEGIN_HEADER
* 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;
+ * ```
+ * 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 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 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
+ * // 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 );
- * ...
- * }
+ * // open the font
+ * error = FT_Open_Face( library, &open_args, index, &face );
+ * ...
+ * ```
*
*/
typedef struct FT_Incremental_InterfaceRec_
@@ -320,7 +321,7 @@ FT_BEGIN_HEADER
} FT_Incremental_InterfaceRec;
- /***************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Incremental_Interface
diff --git a/freetype/include/freetype/ftlcdfil.h b/freetype/include/freetype/ftlcdfil.h
index 2a27196c..3a19d043 100644
--- a/freetype/include/freetype/ftlcdfil.h
+++ b/freetype/include/freetype/ftlcdfil.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.h */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs */
-/* (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftlcdfil.h
+ *
+ * FreeType API for color filtering of subpixel bitmap glyphs
+ * (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTLCDFIL_H_
@@ -33,105 +33,98 @@
FT_BEGIN_HEADER
- /***************************************************************************
+ /**************************************************************************
*
* @section:
- * lcd_filtering
+ * lcd_rendering
*
* @title:
- * LCD Filtering
+ * Subpixel Rendering
*
* @abstract:
- * Reduce color fringes of subpixel-rendered bitmaps.
+ * API to control subpixel rendering.
*
* @description:
- * Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your
- * `ftoption.h', which enables patented ClearType-style rendering,
- * the LCD-optimized glyph bitmaps should be filtered to reduce color
- * fringes inherent to this technology. The default FreeType LCD
- * rendering uses different technology, and API described below,
- * although available, does nothing.
+ * FreeType provides two alternative subpixel rendering technologies.
+ * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
+ * `ftoption.h` file, this enables patented ClearType-style rendering.
+ * Otherwise, Harmony LCD rendering is enabled. These technologies are
+ * controlled differently and API described below, although always
+ * available, performs its function when appropriate method is enabled
+ * and does nothing otherwise.
*
* ClearType-style LCD rendering exploits the color-striped structure of
* LCD pixels, increasing the available resolution in the direction of
- * the stripe (usually horizontal RGB) by a factor of~3. Since these
- * subpixels are color pixels, using them unfiltered creates severe
- * color fringes. Use the @FT_Library_SetLcdFilter API to specify a
- * low-pass filter, which is then applied to subpixel-rendered bitmaps
- * generated through @FT_Render_Glyph. The filter sacrifices some of
- * the higher resolution to reduce color fringes, making the glyph image
- * slightly blurrier. Positional improvements will remain.
- *
- * A filter should have two properties:
- *
- * 1) It should be normalized, meaning the sum of the 5~components
- * should be 256 (0x100). It is possible to go above or under this
- * target sum, however: going under means tossing out contrast, going
- * over means invoking clamping and thereby non-linearities that
- * increase contrast somewhat at the expense of greater distortion
- * and color-fringing. Contrast is better enhanced through stem
- * darkening.
- *
- * 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}'
- * where a~+ b~=~c. It distributes the computed coverage for one
- * subpixel to all subpixels equally, sacrificing some won resolution
- * but drastically reducing color-fringing. Positioning improvements
- * remain! Note that color-fringing can only really be minimized
- * when using a color-balanced filter and alpha-blending the glyph
- * onto a surface in linear space; see @FT_Render_Glyph.
- *
- * Regarding the form, a filter can be a `boxy' filter or a `beveled'
- * filter. Boxy filters are sharper but are less forgiving of non-ideal
- * gamma curves of a screen (viewing angles!), beveled filters are
- * fuzzier but more tolerant.
- *
- * Examples:
- *
- * - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor
- * normalized.
- *
- * - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not
- * normalized.
- *
- * - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not
- * balanced.
- *
- * - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not
- * balanced.
- *
- * - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost
- * balanced.
- *
- * - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost
- * balanced.
- *
- * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
- * @FT_Load_Glyph, and @FT_Load_Char. It does _not_ affect the output
- * of @FT_Outline_Render and @FT_Outline_Get_Bitmap.
- *
- * If this feature is activated, the dimensions of LCD glyph bitmaps are
- * either wider or taller than the dimensions of the corresponding
- * outline with regard to the pixel grid. For example, for
- * @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and
- * 3~subpixels to the right. The bitmap offset values are adjusted
- * accordingly, so clients shouldn't need to modify their layout and
- * glyph positioning code when enabling the filter.
- *
- * It is important to understand that linear alpha blending and gamma
- * correction is critical for correctly rendering glyphs onto surfaces
- * without artifacts and even more critical when subpixel rendering is
- * involved.
- *
- * Each of the 3~alpha values (subpixels) is independently used to blend
- * one color channel. That is, red alpha blends the red channel of the
- * text color with the red channel of the background pixel. The
- * distribution of density values by the color-balanced filter assumes
- * alpha blending is done in linear space; only then color artifacts
- * cancel out.
+ * the stripe (usually horizontal RGB) by a factor of~3. Using the
+ * subpixels coverages unfiltered can create severe color fringes
+ * especially when rendering thin features. Indeed, to produce
+ * black-on-white text, the nearby color subpixels must be dimmed
+ * equally.
+ *
+ * A good 5-tap FIR filter should be applied to subpixel coverages
+ * regardless of pixel boundaries and should have these properties:
+ *
+ * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid
+ * any shifts in appearance.
+ *
+ * 2. It should be color-balanced, meaning a~+ b~=~c, to reduce color
+ * fringes by distributing the computed coverage for one subpixel to
+ * all subpixels equally.
+ *
+ * 3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain
+ * overall brightness.
+ *
+ * Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less
+ * forgiving of non-ideal gamma curves of a screen (and viewing angles),
+ * beveled filters are fuzzier but more tolerant.
+ *
+ * Use the @FT_Library_SetLcdFilter or @FT_Library_SetLcdFilterWeights
+ * API to specify a low-pass filter, which is then applied to
+ * subpixel-rendered bitmaps generated through @FT_Render_Glyph.
+ *
+ * Harmony LCD rendering is suitable to panels with any regular subpixel
+ * structure, not just monitors with 3 color striped subpixels, as long
+ * as the color subpixels have fixed positions relative to the pixel
+ * center. In this case, each color channel is then rendered separately
+ * after shifting the outline opposite to the subpixel shift so that the
+ * coverage maps are aligned. This method is immune to color fringes
+ * because the shifts do not change integral coverage.
+ *
+ * The subpixel geometry must be specified by xy-coordinates for each
+ * subpixel. By convention they may come in the RGB order: {{-1/3, 0},
+ * {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4},
+ * {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel.
+ *
+ * Use the @FT_Library_SetLcdGeometry API to specify subpixel positions.
+ * If one follows the RGB order convention, the same order applies to the
+ * resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps. Note,
+ * however, that the coordinate frame for the latter must be rotated
+ * clockwise. Harmony with default LCD geometry is equivalent to
+ * ClearType with light filter.
+ *
+ * As a result of ClearType filtering or Harmony rendering, the
+ * dimensions of LCD bitmaps can be either wider or taller than the
+ * dimensions of the corresponding outline with regard to the pixel grid.
+ * For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to
+ * the left, and 2~subpixels to the right. The bitmap offset values are
+ * adjusted accordingly, so clients shouldn't need to modify their layout
+ * and glyph positioning code when enabling the filter.
+ *
+ * The ClearType and Harmony rendering is applicable to glyph bitmaps
+ * rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and
+ * @FT_Glyph_To_Bitmap, when @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V
+ * is specified. This API does not control @FT_Outline_Render and
+ * @FT_Outline_Get_Bitmap.
+ *
+ * The described algorithms can completely remove color artefacts when
+ * combined with gamma-corrected alpha blending in linear space. Each of
+ * the 3~alpha values (subpixels) must by independently used to blend one
+ * color channel. That is, red alpha blends the red channel of the text
+ * color with the red channel of the background pixel.
*/
- /****************************************************************************
+ /**************************************************************************
*
* @enum:
* FT_LcdFilter
@@ -145,47 +138,25 @@ FT_BEGIN_HEADER
* results in sometimes severe color fringes.
*
* FT_LCD_FILTER_DEFAULT ::
- * The default filter reduces color fringes considerably, at the cost
- * of a slight blurriness in the output.
- *
- * It is a beveled, normalized, and color-balanced five-tap filter
- * that is more forgiving to screens with non-ideal gamma curves and
- * viewing angles. Note that while color-fringing is reduced, it can
- * only be minimized by using linear alpha blending and gamma
- * correction to render glyphs onto surfaces. The default filter
- * weights are [0x08 0x4D 0x56 0x4D 0x08].
+ * This is a beveled, normalized, and color-balanced five-tap filter
+ * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units.
*
* FT_LCD_FILTER_LIGHT ::
- * The light filter is a variant that is sharper at the cost of
- * slightly more color fringes than the default one.
- *
- * It is a boxy, normalized, and color-balanced three-tap filter that
- * is less forgiving to screens with non-ideal gamma curves and
- * viewing angles. This filter works best when the rendering system
- * uses linear alpha blending and gamma correction to render glyphs
- * onto surfaces. The light filter weights are
- * [0x00 0x55 0x56 0x55 0x00].
+ * this is a boxy, normalized, and color-balanced three-tap filter with
+ * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units.
*
* FT_LCD_FILTER_LEGACY ::
+ * FT_LCD_FILTER_LEGACY1 ::
* This filter corresponds to the original libXft color filter. It
* provides high contrast output but can exhibit really bad color
* fringes if glyphs are not extremely well hinted to the pixel grid.
- * In other words, it only works well if the TrueType bytecode
- * interpreter is enabled *and* high-quality hinted fonts are used.
- *
* This filter is only provided for comparison purposes, and might be
- * disabled or stay unsupported in the future.
- *
- * FT_LCD_FILTER_LEGACY1 ::
- * For historical reasons, the FontConfig library returns a different
- * enumeration value for legacy LCD filtering. To make code work that
- * (incorrectly) forwards FontConfig's enumeration value to
- * @FT_Library_SetLcdFilter without proper mapping, it is thus easiest
- * to have another enumeration value, which is completely equal to
- * `FT_LCD_FILTER_LEGACY'.
+ * disabled or stay unsupported in the future. The second value is
+ * provided for compatibility with FontConfig, which historically used
+ * different enumeration, sometimes incorrectly forwarded to FreeType.
*
* @since:
- * 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
+ * 2.3.0 (`FT_LCD_FILTER_LEGACY1` since 2.6.2)
*/
typedef enum FT_LcdFilter_
{
@@ -202,7 +173,7 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @func:
+ * @function:
* FT_Library_SetLcdFilter
*
* @description:
@@ -218,20 +189,20 @@ FT_BEGIN_HEADER
* 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.
+ * @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
+ * 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
+ * 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.
*
@@ -245,7 +216,7 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @func:
+ * @function:
* FT_Library_SetLcdFilterWeights
*
* @description:
@@ -258,15 +229,15 @@ FT_BEGIN_HEADER
*
* weights ::
* A pointer to an array; the function copies the first five bytes and
- * uses them to specify the filter weights.
+ * uses them to specify the filter weights in 1/256th units.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature' if the
- * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+ * 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.
*
@@ -281,7 +252,8 @@ FT_BEGIN_HEADER
unsigned char *weights );
- /*
+ /**************************************************************************
+ *
* @type:
* FT_LcdFiveTapFilter
*
@@ -298,6 +270,53 @@ FT_BEGIN_HEADER
typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS];
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Library_SetLcdGeometry
+ *
+ * @description:
+ * This function can be used to modify default positions of color
+ * subpixels, which controls Harmony LCD rendering.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library instance.
+ *
+ * sub ::
+ * A pointer to an array of 3 vectors in 26.6 fractional pixel format;
+ * the function modifies the default values, see the note below.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Subpixel geometry examples:
+ *
+ * - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color
+ * stripes shifted by a third of a pixel. This could be an RGB panel.
+ *
+ * - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can
+ * specify a BGR panel instead, while keeping the bitmap in the same
+ * RGB888 format.
+ *
+ * - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap
+ * stays RGB888 as a result.
+ *
+ * - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement.
+ *
+ * This function does nothing and returns `FT_Err_Unimplemented_Feature`
+ * in the context of ClearType-style subpixel rendering when
+ * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the
+ * library.
+ *
+ * @since:
+ * 2.10.0
+ */
+ FT_EXPORT( FT_Error )
+ FT_Library_SetLcdGeometry( FT_Library library,
+ FT_Vector sub[3] );
+
/* */
diff --git a/freetype/include/freetype/ftlist.h b/freetype/include/freetype/ftlist.h
index 117473b9..4782892d 100644
--- a/freetype/include/freetype/ftlist.h
+++ b/freetype/include/freetype/ftlist.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* ftlist.h */
-/* */
-/* Generic list support for FreeType (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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'. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftlist.h
+ *
+ * Generic list support for FreeType (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -41,224 +41,245 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_List_Up
+ *
+ * @description:
+ * Move a node to the head/top of a list. Used to maintain LRU lists.
+ *
+ * @inout:
+ * list ::
+ * A pointer to the parent list.
+ * node ::
+ * The node to move.
+ */
FT_EXPORT( void )
FT_List_Up( FT_List list,
FT_ListNode node );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_List_Iterator */
- /* */
- /* <Description> */
- /* An FT_List iterator function that is called during a list parse */
- /* by @FT_List_Iterate. */
- /* */
- /* <Input> */
- /* node :: The current iteration list node. */
- /* */
- /* user :: A typeless pointer passed to @FT_List_Iterate. */
- /* Can be used to point to the iteration's state. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_List_Iterator
+ *
+ * @description:
+ * An FT_List iterator function that is called during a list parse by
+ * @FT_List_Iterate.
+ *
+ * @input:
+ * node ::
+ * The current iteration list node.
+ *
+ * user ::
+ * A typeless pointer passed to @FT_List_Iterate. Can be used to point
+ * to the iteration's state.
+ */
typedef FT_Error
(*FT_List_Iterator)( FT_ListNode node,
void* user );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Iterate */
- /* */
- /* <Description> */
- /* Parse a list and calls a given iterator function on each element. */
- /* Note that parsing is stopped as soon as one of the iterator calls */
- /* returns a non-zero value. */
- /* */
- /* <Input> */
- /* list :: A handle to the list. */
- /* iterator :: An iterator function, called on each node of the list. */
- /* user :: A user-supplied field that is passed as the second */
- /* argument to the iterator. */
- /* */
- /* <Return> */
- /* The result (a FreeType error code) of the last iterator call. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_List_Iterate
+ *
+ * @description:
+ * Parse a list and calls a given iterator function on each element.
+ * Note that parsing is stopped as soon as one of the iterator calls
+ * returns a non-zero value.
+ *
+ * @input:
+ * list ::
+ * A handle to the list.
+ * iterator ::
+ * An iterator function, called on each node of the list.
+ * user ::
+ * A user-supplied field that is passed as the second argument to the
+ * iterator.
+ *
+ * @return:
+ * The result (a FreeType error code) of the last iterator call.
+ */
FT_EXPORT( FT_Error )
FT_List_Iterate( FT_List list,
FT_List_Iterator iterator,
void* user );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_List_Destructor */
- /* */
- /* <Description> */
- /* An @FT_List iterator function that is called during a list */
- /* finalization by @FT_List_Finalize to destroy all elements in a */
- /* given list. */
- /* */
- /* <Input> */
- /* system :: The current system object. */
- /* */
- /* data :: The current object to destroy. */
- /* */
- /* user :: A typeless pointer passed to @FT_List_Iterate. It can */
- /* be used to point to the iteration's state. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_List_Destructor
+ *
+ * @description:
+ * An @FT_List iterator function that is called during a list
+ * finalization by @FT_List_Finalize to destroy all elements in a given
+ * list.
+ *
+ * @input:
+ * system ::
+ * The current system object.
+ *
+ * data ::
+ * The current object to destroy.
+ *
+ * user ::
+ * A typeless pointer passed to @FT_List_Iterate. It can be used to
+ * point to the iteration's state.
+ */
typedef void
(*FT_List_Destructor)( FT_Memory memory,
void* data,
void* user );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Finalize */
- /* */
- /* <Description> */
- /* Destroy all elements in the list as well as the list itself. */
- /* */
- /* <Input> */
- /* list :: A handle to the list. */
- /* */
- /* destroy :: A list destructor that will be applied to each element */
- /* of the list. Set this to NULL if not needed. */
- /* */
- /* memory :: The current memory object that handles deallocation. */
- /* */
- /* user :: A user-supplied field that is passed as the last */
- /* argument to the destructor. */
- /* */
- /* <Note> */
- /* This function expects that all nodes added by @FT_List_Add or */
- /* @FT_List_Insert have been dynamically allocated. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_List_Finalize
+ *
+ * @description:
+ * Destroy all elements in the list as well as the list itself.
+ *
+ * @input:
+ * list ::
+ * A handle to the list.
+ *
+ * destroy ::
+ * A list destructor that will be applied to each element of the list.
+ * Set this to `NULL` if not needed.
+ *
+ * memory ::
+ * The current memory object that handles deallocation.
+ *
+ * user ::
+ * A user-supplied field that is passed as the last argument to the
+ * destructor.
+ *
+ * @note:
+ * This function expects that all nodes added by @FT_List_Add or
+ * @FT_List_Insert have been dynamically allocated.
+ */
FT_EXPORT( void )
FT_List_Finalize( FT_List list,
FT_List_Destructor destroy,
diff --git a/freetype/include/freetype/ftlzw.h b/freetype/include/freetype/ftlzw.h
index 1615912d..fd22968f 100644
--- a/freetype/include/freetype/ftlzw.h
+++ b/freetype/include/freetype/ftlzw.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftlzw.h */
-/* */
-/* LZW-compressed stream support. */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftlzw.h
+ *
+ * LZW-compressed stream support.
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -31,59 +31,60 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* lzw */
- /* */
- /* <Title> */
- /* LZW Streams */
- /* */
- /* <Abstract> */
- /* Using LZW-compressed font files. */
- /* */
- /* <Description> */
- /* This section contains the declaration of LZW-specific functions. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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.
- */
+ /**************************************************************************
+ *
+ * @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 );
diff --git a/freetype/include/freetype/ftmac.h b/freetype/include/freetype/ftmac.h
index c1e497ca..92b9f3dc 100644
--- a/freetype/include/freetype/ftmac.h
+++ b/freetype/include/freetype/ftmac.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftmac.h */
-/* */
-/* Additional Mac-specific API. */
-/* */
-/* Copyright 1996-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftmac.h
+ *
+ * Additional Mac-specific API.
+ *
+ * Copyright (C) 1996-2019 by
+ * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
-/***************************************************************************/
-/* */
-/* NOTE: Include this file after FT_FREETYPE_H and after any */
-/* Mac-specific headers (because this header uses Mac types such as */
-/* Handle, FSSpec, FSRef, etc.) */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * NOTE: Include this file after `FT_FREETYPE_H` and after any
+ * Mac-specific headers (because this header uses Mac types such as
+ * 'Handle', 'FSSpec', 'FSRef', etc.)
+ *
+ */
#ifndef FTMAC_H_
@@ -47,56 +47,59 @@ FT_BEGIN_HEADER
#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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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 ); */
- /* } */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * @example:
+ * 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,
@@ -105,28 +108,28 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -134,27 +137,28 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -162,30 +166,33 @@ FT_BEGIN_HEADER
FT_DEPRECATED_ATTRIBUTE;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GetFilePath_From_Mac_ATS_Name */
- /* */
- /* <Description> */
- /* Return a pathname of the disk file and face index for given font */
- /* name that is handled by ATS framework. */
- /* */
- /* <Input> */
- /* fontName :: Mac OS name of the font in ATS framework. */
- /* */
- /* <Output> */
- /* path :: Buffer to store pathname of the file. For passing */
- /* to @FT_New_Face. The client must allocate this */
- /* buffer before calling this function. */
- /* */
- /* maxPathSize :: Lengths of the buffer `path' that client allocated. */
- /* */
- /* face_index :: Index of the face. For passing to @FT_New_Face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_GetFilePath_From_Mac_ATS_Name
+ *
+ * @description:
+ * Return a pathname of the disk file and face index for given font name
+ * that is handled by ATS framework.
+ *
+ * @input:
+ * fontName ::
+ * Mac OS name of the font in ATS framework.
+ *
+ * @output:
+ * path ::
+ * Buffer to store pathname of the file. For passing to @FT_New_Face.
+ * The client must allocate this buffer before calling this function.
+ *
+ * maxPathSize ::
+ * Lengths of the buffer `path` that client allocated.
+ *
+ * face_index ::
+ * Index of the face. For passing to @FT_New_Face.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
UInt8* path,
@@ -194,33 +201,37 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -229,33 +240,37 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
diff --git a/freetype/include/freetype/ftmm.h b/freetype/include/freetype/ftmm.h
index 8be85ef0..f2e16b64 100644
--- a/freetype/include/freetype/ftmm.h
+++ b/freetype/include/freetype/ftmm.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftmm.h */
-/* */
-/* FreeType Multiple Master font interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftmm.h
+ *
+ * FreeType Multiple Master font interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,49 +27,52 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* multiple_masters */
- /* */
- /* <Title> */
- /* Multiple Masters */
- /* */
- /* <Abstract> */
- /* How to manage Multiple Masters fonts. */
- /* */
- /* <Description> */
- /* The following types and functions are used to manage Multiple */
- /* Master fonts, i.e., the selection of specific design instances by */
- /* setting design axis coordinates. */
- /* */
- /* Besides Adobe MM fonts, the interface supports Apple's TrueType GX */
- /* and OpenType variation fonts. Some of the routines only work with */
- /* Adobe MM fonts, others will work with all three types. They are */
- /* similar enough that a consistent interface makes sense. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Axis */
- /* */
- /* <Description> */
- /* A structure to model a given axis in design space for Multiple */
- /* Masters fonts. */
- /* */
- /* This structure can't be used for TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * multiple_masters
+ *
+ * @title:
+ * Multiple Masters
+ *
+ * @abstract:
+ * How to manage Multiple Masters fonts.
+ *
+ * @description:
+ * The following types and functions are used to manage Multiple Master
+ * fonts, i.e., the selection of specific design instances by setting
+ * design axis coordinates.
+ *
+ * Besides Adobe MM fonts, the interface supports Apple's TrueType GX and
+ * OpenType variation fonts. Some of the routines only work with Adobe
+ * MM fonts, others will work with all three types. They are similar
+ * enough that a consistent interface makes sense.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_MM_Axis
+ *
+ * @description:
+ * A structure to model a given axis in design space for Multiple Masters
+ * fonts.
+ *
+ * This structure can't be used for TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @fields:
+ * name ::
+ * The axis's name.
+ *
+ * minimum ::
+ * The axis's minimum design coordinate.
+ *
+ * maximum ::
+ * The axis's maximum design coordinate.
+ */
typedef struct FT_MM_Axis_
{
FT_String* name;
@@ -79,28 +82,29 @@ FT_BEGIN_HEADER
} FT_MM_Axis;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Multi_Master */
- /* */
- /* <Description> */
- /* A structure to model the axes and space of a Multiple Masters */
- /* font. */
- /* */
- /* This structure can't be used for TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Fields> */
- /* num_axis :: Number of axes. Cannot exceed~4. */
- /* */
- /* num_designs :: Number of designs; should be normally 2^num_axis */
- /* even though the Type~1 specification strangely */
- /* allows for intermediate designs to be present. */
- /* This number cannot exceed~16. */
- /* */
- /* axis :: A table of axis descriptors. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Multi_Master
+ *
+ * @description:
+ * A structure to model the axes and space of a Multiple Masters font.
+ *
+ * This structure can't be used for TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @fields:
+ * num_axis ::
+ * Number of axes. Cannot exceed~4.
+ *
+ * num_designs ::
+ * Number of designs; should be normally 2^num_axis even though the
+ * Type~1 specification strangely allows for intermediate designs to be
+ * present. This number cannot exceed~16.
+ *
+ * axis ::
+ * A table of axis descriptors.
+ */
typedef struct FT_Multi_Master_
{
FT_UInt num_axis;
@@ -110,42 +114,45 @@ FT_BEGIN_HEADER
} FT_Multi_Master;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Axis */
- /* */
- /* <Description> */
- /* A structure to model a given axis in design space for Multiple */
- /* Masters, TrueType GX, and OpenType variation fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* Not always meaningful for TrueType GX or OpenType */
- /* variation fonts. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* def :: The axis's default design coordinate. */
- /* FreeType computes meaningful default values for Adobe */
- /* MM fonts. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- /* tag :: The axis's tag (the equivalent to `name' for TrueType */
- /* GX and OpenType variation fonts). FreeType provides */
- /* default values for Adobe MM fonts if possible. */
- /* */
- /* strid :: The axis name entry in the font's `name' table. This */
- /* is another (and often better) version of the `name' */
- /* field for TrueType GX or OpenType variation fonts. Not */
- /* meaningful for Adobe MM fonts. */
- /* */
- /* <Note> */
- /* The fields `minimum', `def', and `maximum' are 16.16 fractional */
- /* values for TrueType GX and OpenType variation fonts. For Adobe MM */
- /* fonts, the values are integers. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Var_Axis
+ *
+ * @description:
+ * A structure to model a given axis in design space for Multiple
+ * Masters, TrueType GX, and OpenType variation fonts.
+ *
+ * @fields:
+ * name ::
+ * The axis's name. Not always meaningful for TrueType GX or OpenType
+ * variation fonts.
+ *
+ * minimum ::
+ * The axis's minimum design coordinate.
+ *
+ * def ::
+ * The axis's default design coordinate. FreeType computes meaningful
+ * default values for Adobe MM fonts.
+ *
+ * maximum ::
+ * The axis's maximum design coordinate.
+ *
+ * tag ::
+ * The axis's tag (the equivalent to 'name' for TrueType GX and
+ * OpenType variation fonts). FreeType provides default values for
+ * Adobe MM fonts if possible.
+ *
+ * strid ::
+ * The axis name entry in the font's 'name' table. This is another
+ * (and often better) version of the 'name' field for TrueType GX or
+ * OpenType variation fonts. Not meaningful for Adobe MM fonts.
+ *
+ * @note:
+ * The fields `minimum`, `def`, and `maximum` are 16.16 fractional values
+ * for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the
+ * values are integers.
+ */
typedef struct FT_Var_Axis_
{
FT_String* name;
@@ -160,27 +167,29 @@ FT_BEGIN_HEADER
} FT_Var_Axis;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Named_Style */
- /* */
- /* <Description> */
- /* A structure to model a named instance in a TrueType GX or OpenType */
- /* variation font. */
- /* */
- /* This structure can't be used for Adobe MM fonts. */
- /* */
- /* <Fields> */
- /* coords :: The design coordinates for this instance. */
- /* This is an array with one entry for each axis. */
- /* */
- /* strid :: The entry in `name' table identifying this instance. */
- /* */
- /* psid :: The entry in `name' table identifying a PostScript name */
- /* for this instance. Value 0xFFFF indicates a missing */
- /* entry. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Var_Named_Style
+ *
+ * @description:
+ * A structure to model a named instance in a TrueType GX or OpenType
+ * variation font.
+ *
+ * This structure can't be used for Adobe MM fonts.
+ *
+ * @fields:
+ * coords ::
+ * The design coordinates for this instance. This is an array with one
+ * entry for each axis.
+ *
+ * strid ::
+ * The entry in 'name' table identifying this instance.
+ *
+ * psid ::
+ * The entry in 'name' table identifying a PostScript name for this
+ * instance. Value 0xFFFF indicates a missing entry.
+ */
typedef struct FT_Var_Named_Style_
{
FT_Fixed* coords;
@@ -190,50 +199,47 @@ FT_BEGIN_HEADER
} FT_Var_Named_Style;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Var */
- /* */
- /* <Description> */
- /* A structure to model the axes and space of an Adobe MM, TrueType */
- /* GX, or OpenType variation font. */
- /* */
- /* Some fields are specific to one format and not to the others. */
- /* */
- /* <Fields> */
- /* num_axis :: The number of axes. The maximum value is~4 for */
- /* Adobe MM fonts; no limit in TrueType GX or */
- /* OpenType variation fonts. */
- /* */
- /* num_designs :: The number of designs; should be normally */
- /* 2^num_axis for Adobe MM fonts. Not meaningful */
- /* for TrueType GX or OpenType variation fonts */
- /* (where every glyph could have a different */
- /* number of designs). */
- /* */
- /* num_namedstyles :: The number of named styles; a `named style' is */
- /* a tuple of design coordinates that has a string */
- /* ID (in the `name' table) associated with it. */
- /* The font can tell the user that, for example, */
- /* [Weight=1.5,Width=1.1] is `Bold'. Another name */
- /* for `named style' is `named instance'. */
- /* */
- /* For Adobe Multiple Masters fonts, this value is */
- /* always zero because the format does not support */
- /* named styles. */
- /* */
- /* axis :: An axis descriptor table. */
- /* TrueType GX and OpenType variation fonts */
- /* contain slightly more data than Adobe MM fonts. */
- /* Memory management of this pointer is done */
- /* internally by FreeType. */
- /* */
- /* namedstyle :: A named style (instance) table. */
- /* Only meaningful for TrueType GX and OpenType */
- /* variation fonts. Memory management of this */
- /* pointer is done internally by FreeType. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_MM_Var
+ *
+ * @description:
+ * A structure to model the axes and space of an Adobe MM, TrueType GX,
+ * or OpenType variation font.
+ *
+ * Some fields are specific to one format and not to the others.
+ *
+ * @fields:
+ * num_axis ::
+ * The number of axes. The maximum value is~4 for Adobe MM fonts; no
+ * limit in TrueType GX or OpenType variation fonts.
+ *
+ * num_designs ::
+ * The number of designs; should be normally 2^num_axis for Adobe MM
+ * fonts. Not meaningful for TrueType GX or OpenType variation fonts
+ * (where every glyph could have a different number of designs).
+ *
+ * num_namedstyles ::
+ * The number of named styles; a 'named style' is a tuple of design
+ * coordinates that has a string ID (in the 'name' table) associated
+ * with it. The font can tell the user that, for example,
+ * [Weight=1.5,Width=1.1] is 'Bold'. Another name for 'named style' is
+ * 'named instance'.
+ *
+ * For Adobe Multiple Masters fonts, this value is always zero because
+ * the format does not support named styles.
+ *
+ * axis ::
+ * An axis descriptor table. TrueType GX and OpenType variation fonts
+ * contain slightly more data than Adobe MM fonts. Memory management
+ * of this pointer is done internally by FreeType.
+ *
+ * namedstyle ::
+ * A named style (instance) table. Only meaningful for TrueType GX and
+ * OpenType variation fonts. Memory management of this pointer is done
+ * internally by FreeType.
+ */
typedef struct FT_MM_Var_
{
FT_UInt num_axis;
@@ -245,465 +251,493 @@ FT_BEGIN_HEADER
} FT_MM_Var;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Multi_Master */
- /* */
- /* <Description> */
- /* Retrieve a variation descriptor of a given Adobe MM font. */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The Multiple Masters descriptor. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Multi_Master
+ *
+ * @description:
+ * Retrieve a variation descriptor of a given Adobe MM font.
+ *
+ * This function can't be used with TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * @output:
+ * amaster ::
+ * The Multiple Masters descriptor.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Get_Multi_Master( FT_Face face,
FT_Multi_Master *amaster );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_Var */
- /* */
- /* <Description> */
- /* Retrieve a variation descriptor for a given font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The variation descriptor. */
- /* Allocates a data structure, which the user must */
- /* deallocate with a call to @FT_Done_MM_Var after use. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_MM_Var
+ *
+ * @description:
+ * Retrieve a variation descriptor for a given font.
+ *
+ * This function works with all supported variation formats.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * @output:
+ * amaster ::
+ * The variation descriptor. Allocates a data structure, which the
+ * user must deallocate with a call to @FT_Done_MM_Var after use.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Get_MM_Var( FT_Face face,
FT_MM_Var* *amaster );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_MM_Var */
- /* */
- /* <Description> */
- /* Free the memory allocated by @FT_Get_MM_Var. */
- /* */
- /* <Input> */
- /* library :: A handle of the face's parent library object that was */
- /* used in the call to @FT_Get_MM_Var to create `amaster'. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Done_MM_Var
+ *
+ * @description:
+ * Free the memory allocated by @FT_Get_MM_Var.
+ *
+ * @input:
+ * library ::
+ * A handle of the face's parent library object that was used in the
+ * call to @FT_Get_MM_Var to create `amaster`.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Done_MM_Var( FT_Library library,
FT_MM_Var *amaster );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Design_Coordinates */
- /* */
- /* <Description> */
- /* For Adobe MM fonts, choose an interpolated font design through */
- /* design coordinates. */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* [Since 2.8.1] To reset all axes to the default values, call the */
- /* function with `num_coords' set to zero and `coords' set to NULL. */
- /* */
- /* [Since 2.9] If `num_coords' is larger than zero, this function */
- /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
- /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
- /* is zero, this bit flag gets unset. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_MM_Design_Coordinates
+ *
+ * @description:
+ * For Adobe MM fonts, choose an interpolated font design through design
+ * coordinates.
+ *
+ * This function can't be used with TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face.
+ *
+ * @input:
+ * num_coords ::
+ * The number of available design coordinates. If it is larger than
+ * the number of axes, ignore the excess values. If it is smaller than
+ * the number of axes, use default values for the remaining axes.
+ *
+ * coords ::
+ * An array of design coordinates.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * [Since 2.8.1] To reset all axes to the default values, call the
+ * function with `num_coords` set to zero and `coords` set to `NULL`.
+ *
+ * [Since 2.9] If `num_coords` is larger than zero, this function sets
+ * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+ * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero,
+ * this bit flag gets unset.
+ */
FT_EXPORT( FT_Error )
FT_Set_MM_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Long* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Design_Coordinates */
- /* */
- /* <Description> */
- /* Choose an interpolated font design through design coordinates. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* [Since 2.8.1] To reset all axes to the default values, call the */
- /* function with `num_coords' set to zero and `coords' set to NULL. */
- /* [Since 2.9] `Default values' means the currently selected named */
- /* instance (or the base font if no named instance is selected). */
- /* */
- /* [Since 2.9] If `num_coords' is larger than zero, this function */
- /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
- /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
- /* is zero, this bit flag gets unset. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Var_Design_Coordinates
+ *
+ * @description:
+ * Choose an interpolated font design through design coordinates.
+ *
+ * This function works with all supported variation formats.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face.
+ *
+ * @input:
+ * num_coords ::
+ * The number of available design coordinates. If it is larger than
+ * the number of axes, ignore the excess values. If it is smaller than
+ * the number of axes, use default values for the remaining axes.
+ *
+ * coords ::
+ * An array of design coordinates.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * [Since 2.8.1] To reset all axes to the default values, call the
+ * function with `num_coords` set to zero and `coords` set to `NULL`.
+ * [Since 2.9] 'Default values' means the currently selected named
+ * instance (or the base font if no named instance is selected).
+ *
+ * [Since 2.9] If `num_coords` is larger than zero, this function sets
+ * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+ * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero,
+ * this bit flag gets unset.
+ */
FT_EXPORT( FT_Error )
FT_Set_Var_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Var_Design_Coordinates */
- /* */
- /* <Description> */
- /* Get the design coordinates of the currently selected interpolated */
- /* font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of design coordinates to retrieve. If it */
- /* is larger than the number of axes, set the excess */
- /* values to~0. */
- /* */
- /* <Output> */
- /* coords :: The design coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.7.1 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Var_Design_Coordinates
+ *
+ * @description:
+ * Get the design coordinates of the currently selected interpolated
+ * font.
+ *
+ * This function works with all supported variation formats.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * num_coords ::
+ * The number of design coordinates to retrieve. If it is larger than
+ * the number of axes, set the excess values to~0.
+ *
+ * @output:
+ * coords ::
+ * The design coordinates array.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.7.1
+ */
FT_EXPORT( FT_Error )
FT_Get_Var_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* Choose an interpolated font design through normalized blend */
- /* coordinates. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: The design coordinates array (each element must be */
- /* between 0 and 1.0 for Adobe MM fonts, and between */
- /* -1.0 and 1.0 for TrueType GX and OpenType variation */
- /* fonts). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* [Since 2.8.1] To reset all axes to the default values, call the */
- /* function with `num_coords' set to zero and `coords' set to NULL. */
- /* [Since 2.9] `Default values' means the currently selected named */
- /* instance (or the base font if no named instance is selected). */
- /* */
- /* [Since 2.9] If `num_coords' is larger than zero, this function */
- /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
- /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
- /* is zero, this bit flag gets unset. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_MM_Blend_Coordinates
+ *
+ * @description:
+ * Choose an interpolated font design through normalized blend
+ * coordinates.
+ *
+ * This function works with all supported variation formats.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face.
+ *
+ * @input:
+ * num_coords ::
+ * The number of available design coordinates. If it is larger than
+ * the number of axes, ignore the excess values. If it is smaller than
+ * the number of axes, use default values for the remaining axes.
+ *
+ * coords ::
+ * The design coordinates array (each element must be between 0 and 1.0
+ * for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and
+ * OpenType variation fonts).
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * [Since 2.8.1] To reset all axes to the default values, call the
+ * function with `num_coords` set to zero and `coords` set to `NULL`.
+ * [Since 2.9] 'Default values' means the currently selected named
+ * instance (or the base font if no named instance is selected).
+ *
+ * [Since 2.9] If `num_coords` is larger than zero, this function sets
+ * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+ * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero,
+ * this bit flag gets unset.
+ */
FT_EXPORT( FT_Error )
FT_Set_MM_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* Get the normalized blend coordinates of the currently selected */
- /* interpolated font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of normalized blend coordinates to */
- /* retrieve. If it is larger than the number of axes, */
- /* set the excess values to~0.5 for Adobe MM fonts, and */
- /* to~0 for TrueType GX and OpenType variation fonts. */
- /* */
- /* <Output> */
- /* coords :: The normalized blend coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.7.1 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_MM_Blend_Coordinates
+ *
+ * @description:
+ * Get the normalized blend coordinates of the currently selected
+ * interpolated font.
+ *
+ * This function works with all supported variation formats.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * num_coords ::
+ * The number of normalized blend coordinates to retrieve. If it is
+ * larger than the number of axes, set the excess values to~0.5 for
+ * Adobe MM fonts, and to~0 for TrueType GX and OpenType variation
+ * fonts.
+ *
+ * @output:
+ * coords ::
+ * The normalized blend coordinates array.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.7.1
+ */
FT_EXPORT( FT_Error )
FT_Get_MM_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Blend_Coordinates */
- /* */
- /* <Description> */
- /* This is another name of @FT_Set_MM_Blend_Coordinates. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Var_Blend_Coordinates
+ *
+ * @description:
+ * This is another name of @FT_Set_MM_Blend_Coordinates.
+ */
FT_EXPORT( FT_Error )
FT_Set_Var_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_WeightVector */
- /* */
- /* <Description> */
- /* For Adobe MM fonts, choose an interpolated font design by */
- /* directly setting the weight vector. */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* len :: The length of the weight vector array. If it is */
- /* larger than the number of designs, the extra */
- /* values are ignored. If it is less than the number */
- /* of designs, the remaining values are set to zero. */
- /* */
- /* weightvector :: An array representing the weight vector. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Adobe Multiple Master fonts limit the number of designs, and */
- /* thus the length of the WeightVector to 16. */
- /* */
- /* If len is zero and weightvector is NULL, the WeightVector is */
- /* reset to the default values. */
- /* The Adobe documentation also states that the values in the */
- /* WeightVector must total 1.0 +/- 0.001. In practice this does */
- /* not seem to be enforced, so is not enforced, here either. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Var_Blend_Coordinates
+ *
+ * @description:
+ * This is another name of @FT_Get_MM_Blend_Coordinates.
+ *
+ * @since:
+ * 2.7.1
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_Var_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_MM_WeightVector
+ *
+ * @description:
+ * For Adobe MM fonts, choose an interpolated font design by directly
+ * setting the weight vector.
+ *
+ * This function can't be used with TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face.
+ *
+ * @input:
+ * len ::
+ * The length of the weight vector array. If it is larger than the
+ * number of designs, the extra values are ignored. If it is less than
+ * the number of designs, the remaining values are set to zero.
+ *
+ * weightvector ::
+ * An array representing the weight vector.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Adobe Multiple Master fonts limit the number of designs, and thus the
+ * length of the weight vector to~16.
+ *
+ * If `len` is zero and `weightvector` is `NULL`, the weight vector array
+ * is reset to the default values.
+ *
+ * The Adobe documentation also states that the values in the
+ * WeightVector array must total 1.0 +/-~0.001. In practice this does
+ * not seem to be enforced, so is not enforced here, either.
+ *
+ * @since:
+ * 2.10
+ */
FT_EXPORT( FT_Error )
FT_Set_MM_WeightVector( FT_Face face,
FT_UInt len,
FT_Fixed* weightvector );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_WeightVector */
- /* */
- /* <Description> */
- /* For Adobe MM fonts, retrieve the current weight vector of the font */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <InOut> */
- /* len :: Pointer to the size of the array to be filled. If */
- /* size of the array less than the number of designs, */
- /* an Invalid_Argument is returned, and len is set to */
- /* the required size (the number of designs). If the */
- /* size of the array is greater than the number of */
- /* designs, the remaining entries are set to 0. On */
- /* successful completion, len is set to the number of */
- /* designs (i.e. the number of values written to the */
- /* array. */
- /* */
- /* <Output> */
- /* weightvector :: An array to be filled. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Adobe Multiple Master fonts limit the number of designs, and */
- /* thus the length of the WeightVector to 16. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_MM_WeightVector( FT_Face face,
- FT_UInt* len,
- FT_Fixed* weightvector );
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Var_Blend_Coordinates */
- /* */
- /* <Description> */
- /* This is another name of @FT_Get_MM_Blend_Coordinates. */
- /* */
- /* <Since> */
- /* 2.7.1 */
- /* */
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_MM_WeightVector
+ *
+ * @description:
+ * For Adobe MM fonts, retrieve the current weight vector of the font.
+ *
+ * This function can't be used with TrueType GX or OpenType variation
+ * fonts.
+ *
+ * @inout:
+ * face ::
+ * A handle to the source face.
+ *
+ * len ::
+ * A pointer to the size of the array to be filled. If the size of the
+ * array is less than the number of designs, `FT_Err_Invalid_Argument`
+ * is returned, and `len` is set to the required size (the number of
+ * designs). If the size of the array is greater than the number of
+ * designs, the remaining entries are set to~0. On successful
+ * completion, `len` is set to the number of designs (i.e., the number
+ * of values written to the array).
+ *
+ * @output:
+ * weightvector ::
+ * An array to be filled.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Adobe Multiple Master fonts limit the number of designs, and thus the
+ * length of the WeightVector to~16.
+ *
+ * @since:
+ * 2.10
+ */
FT_EXPORT( FT_Error )
- FT_Get_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
+ FT_Get_MM_WeightVector( FT_Face face,
+ FT_UInt* len,
+ FT_Fixed* weightvector );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_VAR_AXIS_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags used in the return value of */
- /* @FT_Get_Var_Axis_Flags. */
- /* */
- /* <Values> */
- /* FT_VAR_AXIS_FLAG_HIDDEN :: */
- /* The variation axis should not be exposed to user interfaces. */
- /* */
- /* <Since> */
- /* 2.8.1 */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_VAR_AXIS_FLAG_XXX
+ *
+ * @description:
+ * A list of bit flags used in the return value of
+ * @FT_Get_Var_Axis_Flags.
+ *
+ * @values:
+ * FT_VAR_AXIS_FLAG_HIDDEN ::
+ * The variation axis should not be exposed to user interfaces.
+ *
+ * @since:
+ * 2.8.1
+ */
#define FT_VAR_AXIS_FLAG_HIDDEN 1
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Var_Axis_Flags */
- /* */
- /* <Description> */
- /* Get the `flags' field of an OpenType Variation Axis Record. */
- /* */
- /* Not meaningful for Adobe MM fonts (`*flags' is always zero). */
- /* */
- /* <Input> */
- /* master :: The variation descriptor. */
- /* */
- /* axis_index :: The index of the requested variation axis. */
- /* */
- /* <Output> */
- /* flags :: The `flags' field. See @FT_VAR_AXIS_FLAG_XXX for */
- /* possible values. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.8.1 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Var_Axis_Flags
+ *
+ * @description:
+ * Get the 'flags' field of an OpenType Variation Axis Record.
+ *
+ * Not meaningful for Adobe MM fonts (`*flags` is always zero).
+ *
+ * @input:
+ * master ::
+ * The variation descriptor.
+ *
+ * axis_index ::
+ * The index of the requested variation axis.
+ *
+ * @output:
+ * flags ::
+ * The 'flags' field. See @FT_VAR_AXIS_FLAG_XXX for possible values.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.8.1
+ */
FT_EXPORT( FT_Error )
FT_Get_Var_Axis_Flags( FT_MM_Var* master,
FT_UInt axis_index,
FT_UInt* flags );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Named_Instance */
- /* */
- /* <Description> */
- /* Set or change the current named instance. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* instance_index :: The index of the requested instance, starting */
- /* with value 1. If set to value 0, FreeType */
- /* switches to font access without a named */
- /* instance. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The function uses the value of `instance_index' to set bits 16-30 */
- /* of the face's `face_index' field. It also resets any variation */
- /* applied to the font, and the @FT_FACE_FLAG_VARIATION bit of the */
- /* face's `face_flags' field gets reset to zero (i.e., */
- /* @FT_IS_VARIATION will return false). */
- /* */
- /* For Adobe MM fonts (which don't have named instances) this */
- /* function simply resets the current face to the default instance. */
- /* */
- /* <Since> */
- /* 2.9 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Named_Instance
+ *
+ * @description:
+ * Set or change the current named instance.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * instance_index ::
+ * The index of the requested instance, starting with value 1. If set
+ * to value 0, FreeType switches to font access without a named
+ * instance.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The function uses the value of `instance_index` to set bits 16-30 of
+ * the face's `face_index` field. It also resets any variation applied
+ * to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's
+ * `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION will
+ * return false).
+ *
+ * For Adobe MM fonts (which don't have named instances) this function
+ * simply resets the current face to the default instance.
+ *
+ * @since:
+ * 2.9
+ */
FT_EXPORT( FT_Error )
FT_Set_Named_Instance( FT_Face face,
FT_UInt instance_index );
diff --git a/freetype/include/freetype/ftmodapi.h b/freetype/include/freetype/ftmodapi.h
index a6eb876e..8d039c4f 100644
--- a/freetype/include/freetype/ftmodapi.h
+++ b/freetype/include/freetype/ftmodapi.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftmodapi.h */
-/* */
-/* FreeType modules public interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftmodapi.h
+ *
+ * FreeType modules public interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -33,77 +33,77 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /* <Title> */
- /* Module Management */
- /* */
- /* <Abstract> */
- /* How to add, upgrade, remove, and control modules from FreeType. */
- /* */
- /* <Description> */
- /* The definitions below are used to manage modules within FreeType. */
- /* Modules can be added, upgraded, and removed at runtime. */
- /* Additionally, some module properties can be controlled also. */
- /* */
- /* Here is a list of possible values of the `module_name' field in */
- /* the @FT_Module_Class structure. */
- /* */
- /* { */
- /* autofitter */
- /* bdf */
- /* cff */
- /* gxvalid */
- /* otvalid */
- /* pcf */
- /* pfr */
- /* psaux */
- /* pshinter */
- /* psnames */
- /* raster1 */
- /* sfnt */
- /* smooth, smooth-lcd, smooth-lcdv */
- /* truetype */
- /* type1 */
- /* type42 */
- /* t1cid */
- /* winfonts */
- /* } */
- /* */
- /* Note that the FreeType Cache sub-system is not a FreeType module. */
- /* */
- /* <Order> */
- /* FT_Module */
- /* FT_Module_Constructor */
- /* FT_Module_Destructor */
- /* FT_Module_Requester */
- /* FT_Module_Class */
- /* */
- /* FT_Add_Module */
- /* FT_Get_Module */
- /* FT_Remove_Module */
- /* FT_Add_Default_Modules */
- /* */
- /* FT_Property_Set */
- /* FT_Property_Get */
- /* FT_Set_Default_Properties */
- /* */
- /* FT_New_Library */
- /* FT_Done_Library */
- /* FT_Reference_Library */
- /* */
- /* FT_Renderer */
- /* FT_Renderer_Class */
- /* */
- /* FT_Get_Renderer */
- /* FT_Set_Renderer */
- /* */
- /* FT_Set_Debug_Hook */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * module_management
+ *
+ * @title:
+ * Module Management
+ *
+ * @abstract:
+ * How to add, upgrade, remove, and control modules from FreeType.
+ *
+ * @description:
+ * The definitions below are used to manage modules within FreeType.
+ * Modules can be added, upgraded, and removed at runtime. Additionally,
+ * some module properties can be controlled also.
+ *
+ * Here is a list of possible values of the `module_name` field in the
+ * @FT_Module_Class structure.
+ *
+ * ```
+ * autofitter
+ * bdf
+ * cff
+ * gxvalid
+ * otvalid
+ * pcf
+ * pfr
+ * psaux
+ * pshinter
+ * psnames
+ * raster1
+ * sfnt
+ * smooth, smooth-lcd, smooth-lcdv
+ * truetype
+ * type1
+ * type42
+ * t1cid
+ * winfonts
+ * ```
+ *
+ * Note that the FreeType Cache sub-system is not a FreeType module.
+ *
+ * @order:
+ * FT_Module
+ * FT_Module_Constructor
+ * FT_Module_Destructor
+ * FT_Module_Requester
+ * FT_Module_Class
+ *
+ * FT_Add_Module
+ * FT_Get_Module
+ * FT_Remove_Module
+ * FT_Add_Default_Modules
+ *
+ * FT_Property_Set
+ * FT_Property_Get
+ * FT_Set_Default_Properties
+ *
+ * FT_New_Library
+ * FT_Done_Library
+ * FT_Reference_Library
+ *
+ * FT_Renderer
+ * FT_Renderer_Class
+ *
+ * FT_Get_Renderer
+ * FT_Set_Renderer
+ *
+ * FT_Set_Debug_Hook
+ *
+ */
/* module bit flags */
@@ -137,83 +137,99 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Module_Destructor
+ *
+ * @description:
+ * A function used to finalize (not destroy) a given module object.
+ *
+ * @input:
+ * module ::
+ * The module to finalize.
+ */
typedef void
(*FT_Module_Destructor)( FT_Module module );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Requester */
- /* */
- /* <Description> */
- /* A function used to query a given module for a specific interface. */
- /* */
- /* <Input> */
- /* module :: The module to be searched. */
- /* */
- /* name :: The name of the interface in the module. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Module_Requester
+ *
+ * @description:
+ * A function used to query a given module for a specific interface.
+ *
+ * @input:
+ * module ::
+ * The module to be searched.
+ *
+ * name ::
+ * The name of the interface in the module.
+ */
typedef FT_Module_Interface
(*FT_Module_Requester)( FT_Module module,
const char* name );
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Module_Class */
- /* */
- /* <Description> */
- /* The module class descriptor. */
- /* */
- /* <Fields> */
- /* module_flags :: Bit flags describing the module. */
- /* */
- /* module_size :: The size of one module object/instance in */
- /* bytes. */
- /* */
- /* module_name :: The name of the module. */
- /* */
- /* module_version :: The version, as a 16.16 fixed number */
- /* (major.minor). */
- /* */
- /* module_requires :: The version of FreeType this module requires, */
- /* as a 16.16 fixed number (major.minor). Starts */
- /* at version 2.0, i.e., 0x20000. */
- /* */
- /* module_init :: The initializing function. */
- /* */
- /* module_done :: The finalizing function. */
- /* */
- /* get_interface :: The interface requesting function. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Module_Class
+ *
+ * @description:
+ * The module class descriptor. While being a public structure necessary
+ * for FreeType's module bookkeeping, most of the fields are essentially
+ * internal, not to be used directly by an application.
+ *
+ * @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_interface ::
+ * A typeless pointer to a structure (which varies between different
+ * modules) that holds the module's interface functions. This is
+ * essentially what `get_interface` returns.
+ *
+ * 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;
@@ -231,83 +247,89 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Remove_Module
+ *
+ * @description:
+ * Remove a given module from a library instance.
+ *
+ * @inout:
+ * library ::
+ * A handle to a library object.
+ *
+ * @input:
+ * module ::
+ * A handle to a module object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The module object is destroyed by the function in case of success.
+ */
FT_EXPORT( FT_Error )
FT_Remove_Module( FT_Library library,
FT_Module module );
- /**********************************************************************
+ /**************************************************************************
*
* @function:
* FT_Property_Set
@@ -317,53 +339,51 @@ FT_BEGIN_HEADER
*
* @input:
* library ::
- * A handle to the library the module is part of.
+ * A handle to the library the module is part of.
*
* module_name ::
- * The module name.
+ * The module name.
*
* property_name ::
- * The property name. Properties are described in section
- * @properties.
+ * The property name. Properties are described in section
+ * @properties.
*
- * Note that only a few modules have properties.
+ * Note that only a few modules have properties.
*
* value ::
- * A generic pointer to a variable or structure that gives the new
- * value of the property. The exact definition of `value' is
- * dependent on the property; see section @properties.
+ * A generic pointer to a variable or structure that gives the new
+ * value of the property. The exact definition of `value` is
+ * dependent on the property; see section @properties.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * If `module_name' isn't a valid module name, or `property_name'
- * doesn't specify a valid property, or if `value' doesn't represent a
+ * If `module_name` isn't a valid module name, or `property_name`
+ * doesn't specify a valid property, or if `value` doesn't represent a
* valid value for the given property, an error is returned.
*
- * The following example sets property `bar' (a simple integer) in
- * module `foo' to value~1.
+ * The following example sets property 'bar' (a simple integer) in
+ * module 'foo' to value~1.
*
- * {
+ * ```
* FT_UInt bar;
*
*
* bar = 1;
* FT_Property_Set( library, "foo", "bar", &bar );
- * }
+ * ```
*
* Note that the FreeType Cache sub-system doesn't recognize module
* property changes. To avoid glyph lookup confusion within the cache
- * you should call @FTC_Manager_Reset to completely flush the cache if
- * a module property gets changed after @FTC_Manager_New has been
- * called.
+ * you should call @FTC_Manager_Reset to completely flush the cache if a
+ * module property gets changed after @FTC_Manager_New has been called.
*
- * It is not possible to set properties of the FreeType Cache
- * sub-system itself with FT_Property_Set; use @FTC_Property_Set
- * instead.
+ * It is not possible to set properties of the FreeType Cache sub-system
+ * itself with FT_Property_Set; use @FTC_Property_Set instead.
*
- * @since:
- * 2.4.11
+ * @since:
+ * 2.4.11
*
*/
FT_EXPORT( FT_Error )
@@ -373,7 +393,7 @@ FT_BEGIN_HEADER
const void* value );
- /**********************************************************************
+ /**************************************************************************
*
* @function:
* FT_Property_Get
@@ -383,32 +403,32 @@ FT_BEGIN_HEADER
*
* @input:
* library ::
- * A handle to the library the module is part of.
+ * A handle to the library the module is part of.
*
* module_name ::
- * The module name.
+ * The module name.
*
* property_name ::
- * The property name. Properties are described in section
- * @properties.
+ * The property name. Properties are described in section
+ * @properties.
*
* @inout:
* value ::
- * A generic pointer to a variable or structure that gives the
- * value of the property. The exact definition of `value' is
- * dependent on the property; see section @properties.
+ * A generic pointer to a variable or structure that gives the value
+ * of the property. The exact definition of `value` is dependent on
+ * the property; see section @properties.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * If `module_name' isn't a valid module name, or `property_name'
- * doesn't specify a valid property, or if `value' doesn't represent a
+ * If `module_name` isn't a valid module name, or `property_name`
+ * doesn't specify a valid property, or if `value` doesn't represent a
* valid value for the given property, an error is returned.
*
- * The following example gets property `baz' (a range) in module `foo'.
+ * The following example gets property 'baz' (a range) in module 'foo'.
*
- * {
+ * ```
* typedef range_
* {
* FT_Int32 min;
@@ -420,13 +440,13 @@ FT_BEGIN_HEADER
*
*
* FT_Property_Get( library, "foo", "baz", &baz );
- * }
+ * ```
*
* It is not possible to retrieve properties of the FreeType Cache
* sub-system with FT_Property_Get; use @FTC_Property_Get instead.
*
- * @since:
- * 2.4.11
+ * @since:
+ * 2.4.11
*
*/
FT_EXPORT( FT_Error )
@@ -436,189 +456,243 @@ FT_BEGIN_HEADER
void* value );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Default_Properties */
- /* */
- /* <Description> */
- /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
- /* set, this function reads the `FREETYPE_PROPERTIES' environment */
- /* variable to control driver properties. See section @properties */
- /* for more. */
- /* */
- /* If the compilation option is not set, this function does nothing. */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here */
- /* into multiple lines for better readability). */
- /* */
- /* { */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* } */
- /* */
- /* Example: */
- /* */
- /* { */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* } */
- /* */
- /* <InOut> */
- /* library :: A handle to a new library object. */
- /* */
- /* <Since> */
- /* 2.8 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Default_Properties
+ *
+ * @description:
+ * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is
+ * set, this function reads the `FREETYPE_PROPERTIES` environment
+ * variable to control driver properties. See section @properties for
+ * more.
+ *
+ * If the compilation option is not set, this function does nothing.
+ *
+ * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
+ * multiple lines for better readability).
+ *
+ * ```
+ * <optional whitespace>
+ * <module-name1> ':'
+ * <property-name1> '=' <property-value1>
+ * <whitespace>
+ * <module-name2> ':'
+ * <property-name2> '=' <property-value2>
+ * ...
+ * ```
+ *
+ * Example:
+ *
+ * ```
+ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ * cff:no-stem-darkening=1 \
+ * autofitter:warping=1
+ * ```
+ *
+ * @inout:
+ * library ::
+ * A handle to a new library object.
+ *
+ * @since:
+ * 2.8
+ */
FT_EXPORT( void )
FT_Set_Default_Properties( FT_Library library );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Reference_Library */
- /* */
- /* <Description> */
- /* A counter gets initialized to~1 at the time an @FT_Library */
- /* structure is created. This function increments the counter. */
- /* @FT_Done_Library then only destroys a library if the counter is~1, */
- /* otherwise it simply decrements the counter. */
- /* */
- /* This function helps in managing life-cycles of structures that */
- /* reference @FT_Library objects. */
- /* */
- /* <Input> */
- /* library :: A handle to a target library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.4.2 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Reference_Library
+ *
+ * @description:
+ * A counter gets initialized to~1 at the time an @FT_Library structure
+ * is created. This function increments the counter. @FT_Done_Library
+ * then only destroys a library if the counter is~1, otherwise it simply
+ * decrements the counter.
+ *
+ * This function helps in managing life-cycles of structures that
+ * reference @FT_Library objects.
+ *
+ * @input:
+ * library ::
+ * A handle to a target library object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @since:
+ * 2.4.2
+ */
FT_EXPORT( FT_Error )
FT_Reference_Library( FT_Library library );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Library */
- /* */
- /* <Description> */
- /* This function is used to create a new FreeType library instance */
- /* from a given memory object. It is thus possible to use libraries */
- /* with distinct memory allocators within the same program. Note, */
- /* however, that the used @FT_Memory structure is expected to remain */
- /* valid for the life of the @FT_Library object. */
- /* */
- /* Normally, you would call this function (followed by a call to */
- /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, */
- /* and a call to @FT_Set_Default_Properties) instead of */
- /* @FT_Init_FreeType to initialize the FreeType library. */
- /* */
- /* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */
- /* library instance. */
- /* */
- /* <Input> */
- /* memory :: A handle to the original memory object. */
- /* */
- /* <Output> */
- /* alibrary :: A pointer to handle of a new library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Library. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_New_Library
+ *
+ * @description:
+ * This function is used to create a new FreeType library instance from a
+ * given memory object. It is thus possible to use libraries with
+ * distinct memory allocators within the same program. Note, however,
+ * that the used @FT_Memory structure is expected to remain valid for the
+ * life of the @FT_Library object.
+ *
+ * Normally, you would call this function (followed by a call to
+ * @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, and a
+ * call to @FT_Set_Default_Properties) instead of @FT_Init_FreeType to
+ * initialize the FreeType library.
+ *
+ * Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a library
+ * instance.
+ *
+ * @input:
+ * memory ::
+ * A handle to the original memory object.
+ *
+ * @output:
+ * alibrary ::
+ * A pointer to handle of a new library object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * See the discussion of reference counters in the description of
+ * @FT_Reference_Library.
+ */
FT_EXPORT( FT_Error )
FT_New_Library( FT_Memory memory,
FT_Library *alibrary );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Library */
- /* */
- /* <Description> */
- /* Discard a given library object. This closes all drivers and */
- /* discards all resource objects. */
- /* */
- /* <Input> */
- /* library :: A handle to the target library. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Library. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Done_Library
+ *
+ * @description:
+ * Discard a given library object. This closes all drivers and discards
+ * all resource objects.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * See the discussion of reference counters in the description of
+ * @FT_Reference_Library.
+ */
FT_EXPORT( FT_Error )
FT_Done_Library( FT_Library library );
- /* */
- typedef void
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_DebugHook_Func
+ *
+ * @description:
+ * A drop-in replacement (or rather a wrapper) for the bytecode or
+ * charstring interpreter's main loop function.
+ *
+ * Its job is essentially
+ *
+ * - to activate debug mode to enforce single-stepping,
+ *
+ * - to call the main loop function to interpret the next opcode, and
+ *
+ * - to show the changed context to the user.
+ *
+ * An example for such a main loop function is `TT_RunIns` (declared in
+ * FreeType's internal header file `src/truetype/ttinterp.h`).
+ *
+ * Have a look at the source code of the `ttdebug` FreeType demo program
+ * for an example of a drop-in replacement.
+ *
+ * @inout:
+ * arg ::
+ * A typeless pointer, to be cast to the main loop function's data
+ * structure (which depends on the font module). For TrueType fonts
+ * it is bytecode interpreter's execution context, `TT_ExecContext`,
+ * which is declared in FreeType's internal header file `tttypes.h`.
+ */
+ typedef FT_Error
(*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. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_DEBUG_HOOK_XXX
+ *
+ * @description:
+ * A list of named debug hook indices.
+ *
+ * @values:
+ * FT_DEBUG_HOOK_TRUETYPE::
+ * This hook index identifies the TrueType bytecode debugger.
+ */
+#define FT_DEBUG_HOOK_TRUETYPE 0
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Debug_Hook
+ *
+ * @description:
+ * Set a debug hook function for debugging the interpreter of a font
+ * format.
+ *
+ * While this is a public API function, an application needs access to
+ * FreeType's internal header files to do something useful.
+ *
+ * Have a look at the source code of the `ttdebug` FreeType demo program
+ * for an example of its usage.
+ *
+ * @inout:
+ * library ::
+ * A handle to the library object.
+ *
+ * @input:
+ * hook_index ::
+ * The index of the debug hook. You should use defined enumeration
+ * macros like @FT_DEBUG_HOOK_TRUETYPE.
+ *
+ * debug_hook ::
+ * The function used to debug the interpreter.
+ *
+ * @note:
+ * Currently, four debug hook slots are available, but only one (for the
+ * TrueType interpreter) is defined.
+ */
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -644,28 +718,28 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @enum:
- * FT_TrueTypeEngineType
+ * @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.
+ * @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.
+ * @values:
+ * FT_TRUETYPE_ENGINE_TYPE_NONE ::
+ * The library doesn't implement any kind of bytecode interpreter.
*
- * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
- * Deprecated and removed.
+ * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
+ * Deprecated and removed.
*
- * FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
- * The library implements a bytecode interpreter that covers
- * the full instruction set of the TrueType virtual machine (this
- * was governed by patents until May 2010, hence the name).
+ * FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
+ * The library implements a bytecode interpreter that covers the full
+ * instruction set of the TrueType virtual machine (this was governed
+ * by patents until May 2010, hence the name).
*
- * @since:
- * 2.2
+ * @since:
+ * 2.2
*
*/
typedef enum FT_TrueTypeEngineType_
@@ -679,22 +753,22 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @func:
- * FT_Get_TrueType_Engine_Type
+ * @function:
+ * FT_Get_TrueType_Engine_Type
*
- * @description:
- * Return an @FT_TrueTypeEngineType value to indicate which level of
- * the TrueType virtual machine a given library instance supports.
+ * @description:
+ * Return an @FT_TrueTypeEngineType value to indicate which level of the
+ * TrueType virtual machine a given library instance supports.
*
- * @input:
- * library ::
- * A library instance.
+ * @input:
+ * library ::
+ * A library instance.
*
- * @return:
- * A value indicating which level is supported.
+ * @return:
+ * A value indicating which level is supported.
*
- * @since:
- * 2.2
+ * @since:
+ * 2.2
*
*/
FT_EXPORT( FT_TrueTypeEngineType )
diff --git a/freetype/include/freetype/ftmoderr.h b/freetype/include/freetype/ftmoderr.h
index e0fc1312..e1699357 100644
--- a/freetype/include/freetype/ftmoderr.h
+++ b/freetype/include/freetype/ftmoderr.h
@@ -1,94 +1,103 @@
-/***************************************************************************/
-/* */
-/* ftmoderr.h */
-/* */
-/* FreeType module error offsets (specification). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the FreeType module error codes. */
- /* */
- /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */
- /* set, the lower byte of an error value identifies the error code as */
- /* usual. In addition, the higher byte identifies the module. For */
- /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
- /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */
- /* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */
- /* */
- /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */
- /* including the high byte. */
- /* */
- /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */
- /* an error value is set to zero. */
- /* */
- /* To hide the various `XXX_Err_' prefixes in the source code, FreeType */
- /* provides some macros in `fttypes.h'. */
- /* */
- /* FT_ERR( err ) */
- /* Add current error module prefix (as defined with the */
- /* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */
- /* the line */
- /* */
- /* error = FT_ERR( Invalid_Outline ); */
- /* */
- /* expands to */
- /* */
- /* error = BDF_Err_Invalid_Outline; */
- /* */
- /* For simplicity, you can always use `FT_Err_Ok' directly instead */
- /* of `FT_ERR( Ok )'. */
- /* */
- /* FT_ERR_EQ( errcode, err ) */
- /* FT_ERR_NEQ( errcode, err ) */
- /* Compare error code `errcode' with the error `err' for equality */
- /* and inequality, respectively. Example: */
- /* */
- /* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */
- /* ... */
- /* */
- /* Using this macro you don't have to think about error prefixes. */
- /* Of course, if module errors are not active, the above example is */
- /* the same as */
- /* */
- /* if ( error == FT_Err_Invalid_Outline ) */
- /* ... */
- /* */
- /* FT_ERROR_BASE( errcode ) */
- /* FT_ERROR_MODULE( errcode ) */
- /* Get base error and module error code, respectively. */
- /* */
- /* */
- /* It can also be used to create a module error message table easily */
- /* with something like */
- /* */
- /* { */
- /* #undef FTMODERR_H_ */
- /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */
- /* #define FT_MODERR_START_LIST { */
- /* #define FT_MODERR_END_LIST { 0, 0 } }; */
- /* */
- /* const struct */
- /* { */
- /* int mod_err_offset; */
- /* const char* mod_err_msg */
- /* } ft_mod_errors[] = */
- /* */
- /* #include FT_MODULE_ERRORS_H */
- /* } */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftmoderr.h
+ *
+ * FreeType module error offsets (specification).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This file is used to define the FreeType module error codes.
+ *
+ * If the macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` in `ftoption.h` is
+ * set, the lower byte of an error value identifies the error code as
+ * usual. In addition, the higher byte identifies the module. For
+ * example, the error `FT_Err_Invalid_File_Format` has value 0x0003, the
+ * error `TT_Err_Invalid_File_Format` has value 0x1303, the error
+ * `T1_Err_Invalid_File_Format` has value 0x1403, etc.
+ *
+ * Note that `FT_Err_Ok`, `TT_Err_Ok`, etc. are always equal to zero,
+ * including the high byte.
+ *
+ * If `FT_CONFIG_OPTION_USE_MODULE_ERRORS` isn't set, the higher byte of an
+ * error value is set to zero.
+ *
+ * To hide the various `XXX_Err_` prefixes in the source code, FreeType
+ * provides some macros in `fttypes.h`.
+ *
+ * FT_ERR( err )
+ *
+ * Add current error module prefix (as defined with the `FT_ERR_PREFIX`
+ * macro) to `err`. For example, in the BDF module the line
+ *
+ * ```
+ * error = FT_ERR( Invalid_Outline );
+ * ```
+ *
+ * expands to
+ *
+ * ```
+ * error = BDF_Err_Invalid_Outline;
+ * ```
+ *
+ * For simplicity, you can always use `FT_Err_Ok` directly instead of
+ * `FT_ERR( Ok )`.
+ *
+ * FT_ERR_EQ( errcode, err )
+ * FT_ERR_NEQ( errcode, err )
+ *
+ * Compare error code `errcode` with the error `err` for equality and
+ * inequality, respectively. Example:
+ *
+ * ```
+ * if ( FT_ERR_EQ( error, Invalid_Outline ) )
+ * ...
+ * ```
+ *
+ * Using this macro you don't have to think about error prefixes. Of
+ * course, if module errors are not active, the above example is the
+ * same as
+ *
+ * ```
+ * if ( error == FT_Err_Invalid_Outline )
+ * ...
+ * ```
+ *
+ * FT_ERROR_BASE( errcode )
+ * FT_ERROR_MODULE( errcode )
+ *
+ * Get base error and module error code, respectively.
+ *
+ * It can also be used to create a module error message table easily with
+ * something like
+ *
+ * ```
+ * #undef FTMODERR_H_
+ * #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s },
+ * #define FT_MODERR_START_LIST {
+ * #define FT_MODERR_END_LIST { 0, 0 } };
+ *
+ * const struct
+ * {
+ * int mod_err_offset;
+ * const char* mod_err_msg
+ * } ft_mod_errors[] =
+ *
+ * #include FT_MODULE_ERRORS_H
+ * ```
+ *
+ */
#ifndef FTMODERR_H_
diff --git a/freetype/include/freetype/ftotval.h b/freetype/include/freetype/ftotval.h
index 26731c2b..c034f489 100644
--- a/freetype/include/freetype/ftotval.h
+++ b/freetype/include/freetype/ftotval.h
@@ -1,30 +1,30 @@
-/***************************************************************************/
-/* */
-/* ftotval.h */
-/* */
-/* FreeType API for validating OpenType tables (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
-/* */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftotval.h
+ *
+ * FreeType API for validating OpenType tables (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -43,62 +43,62 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* ot_validation */
- /* */
- /* <Title> */
- /* OpenType Validation */
- /* */
- /* <Abstract> */
- /* An API to validate OpenType tables. */
- /* */
- /* <Description> */
- /* This section contains the declaration of functions to validate */
- /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */
- /* */
- /* <Order> */
- /* FT_OpenType_Validate */
- /* FT_OpenType_Free */
- /* */
- /* FT_VALIDATE_OTXXX */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @enum:
- * FT_VALIDATE_OTXXX
- *
- * @description:
- * A list of bit-field constants used with @FT_OpenType_Validate to
- * indicate which OpenType tables should be validated.
- *
- * @values:
- * FT_VALIDATE_BASE ::
- * Validate BASE table.
- *
- * FT_VALIDATE_GDEF ::
- * Validate GDEF table.
- *
- * FT_VALIDATE_GPOS ::
- * Validate GPOS table.
- *
- * FT_VALIDATE_GSUB ::
- * Validate GSUB table.
- *
- * FT_VALIDATE_JSTF ::
- * Validate JSTF table.
- *
- * FT_VALIDATE_MATH ::
- * Validate MATH table.
- *
- * FT_VALIDATE_OT ::
- * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
- *
- */
+ /**************************************************************************
+ *
+ * @section:
+ * ot_validation
+ *
+ * @title:
+ * OpenType Validation
+ *
+ * @abstract:
+ * An API to validate OpenType tables.
+ *
+ * @description:
+ * This section contains the declaration of functions to validate some
+ * OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
+ *
+ * @order:
+ * FT_OpenType_Validate
+ * FT_OpenType_Free
+ *
+ * FT_VALIDATE_OTXXX
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_VALIDATE_OTXXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_OpenType_Validate to
+ * indicate which OpenType tables should be validated.
+ *
+ * @values:
+ * FT_VALIDATE_BASE ::
+ * Validate BASE table.
+ *
+ * FT_VALIDATE_GDEF ::
+ * Validate GDEF table.
+ *
+ * FT_VALIDATE_GPOS ::
+ * Validate GPOS table.
+ *
+ * FT_VALIDATE_GSUB ::
+ * Validate GSUB table.
+ *
+ * FT_VALIDATE_JSTF ::
+ * Validate JSTF table.
+ *
+ * FT_VALIDATE_MATH ::
+ * Validate MATH table.
+ *
+ * FT_VALIDATE_OT ::
+ * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
+ *
+ */
#define FT_VALIDATE_BASE 0x0100
#define FT_VALIDATE_GDEF 0x0200
#define FT_VALIDATE_GPOS 0x0400
@@ -113,53 +113,54 @@ FT_BEGIN_HEADER
FT_VALIDATE_JSTF | \
FT_VALIDATE_MATH )
- /**********************************************************************
- *
- * @function:
- * FT_OpenType_Validate
- *
- * @description:
- * Validate various OpenType tables to assure that all offsets and
- * indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without
- * error checking (which can be quite time consuming).
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the tables to be validated. See
- * @FT_VALIDATE_OTXXX for possible values.
- *
- * @output:
- * BASE_table ::
- * A pointer to the BASE table.
- *
- * GDEF_table ::
- * A pointer to the GDEF table.
- *
- * GPOS_table ::
- * A pointer to the GPOS table.
- *
- * GSUB_table ::
- * A pointer to the GSUB table.
- *
- * JSTF_table ::
- * A pointer to the JSTF table.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with OpenType fonts, returning an error
- * otherwise.
- *
- * After use, the application should deallocate the five tables with
- * @FT_OpenType_Free. A NULL value indicates that the table either
- * doesn't exist in the font, or the application hasn't asked for
- * validation.
- */
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_OpenType_Validate
+ *
+ * @description:
+ * Validate various OpenType tables to assure that all offsets and
+ * indices are valid. The idea is that a higher-level library that
+ * actually does the text layout can access those tables without error
+ * checking (which can be quite time consuming).
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field that specifies the tables to be validated. See
+ * @FT_VALIDATE_OTXXX for possible values.
+ *
+ * @output:
+ * BASE_table ::
+ * A pointer to the BASE table.
+ *
+ * GDEF_table ::
+ * A pointer to the GDEF table.
+ *
+ * GPOS_table ::
+ * A pointer to the GPOS table.
+ *
+ * GSUB_table ::
+ * A pointer to the GSUB table.
+ *
+ * JSTF_table ::
+ * A pointer to the JSTF table.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function only works with OpenType fonts, returning an error
+ * otherwise.
+ *
+ * After use, the application should deallocate the five tables with
+ * @FT_OpenType_Free. A `NULL` value indicates that the table either
+ * doesn't exist in the font, or the application hasn't asked for
+ * validation.
+ */
FT_EXPORT( FT_Error )
FT_OpenType_Validate( FT_Face face,
FT_UInt validation_flags,
@@ -169,30 +170,32 @@ FT_BEGIN_HEADER
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.
- */
+
+ /**************************************************************************
+ *
+ * @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 );
+
/* */
diff --git a/freetype/include/freetype/ftoutln.h b/freetype/include/freetype/ftoutln.h
index 89389a49..b72327b7 100644
--- a/freetype/include/freetype/ftoutln.h
+++ b/freetype/include/freetype/ftoutln.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ftoutln.h */
-/* */
-/* Support for the FT_Outline type used to store glyph shapes of */
-/* most scalable font formats (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftoutln.h
+ *
+ * Support for the FT_Outline type used to store glyph shapes of
+ * most scalable font formats (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -34,127 +34,131 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* outline_processing */
- /* */
- /* <Title> */
- /* Outline Processing */
- /* */
- /* <Abstract> */
- /* Functions to create, transform, and render vectorial glyph images. */
- /* */
- /* <Description> */
- /* This section contains routines used to create and destroy scalable */
- /* glyph images known as `outlines'. These can also be measured, */
- /* transformed, and converted into bitmaps and pixmaps. */
- /* */
- /* <Order> */
- /* FT_Outline */
- /* FT_Outline_New */
- /* FT_Outline_Done */
- /* FT_Outline_Copy */
- /* FT_Outline_Translate */
- /* FT_Outline_Transform */
- /* FT_Outline_Embolden */
- /* FT_Outline_EmboldenXY */
- /* FT_Outline_Reverse */
- /* FT_Outline_Check */
- /* */
- /* FT_Outline_Get_CBox */
- /* FT_Outline_Get_BBox */
- /* */
- /* FT_Outline_Get_Bitmap */
- /* FT_Outline_Render */
- /* FT_Outline_Decompose */
- /* FT_Outline_Funcs */
- /* FT_Outline_MoveToFunc */
- /* FT_Outline_LineToFunc */
- /* FT_Outline_ConicToFunc */
- /* FT_Outline_CubicToFunc */
- /* */
- /* FT_Orientation */
- /* FT_Outline_Get_Orientation */
- /* */
- /* FT_OUTLINE_XXX */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Decompose */
- /* */
- /* <Description> */
- /* Walk over an outline's structure to decompose it into individual */
- /* segments and Bezier arcs. This function also emits `move to' */
- /* operations to indicate the start of new contours in the outline. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source target. */
- /* */
- /* func_interface :: A table of `emitters', i.e., function pointers */
- /* called during decomposition to indicate path */
- /* operations. */
- /* */
- /* <InOut> */
- /* user :: A typeless pointer that is passed to each */
- /* emitter during the decomposition. It can be */
- /* used to store the state during the */
- /* decomposition. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* A contour that contains a single point only is represented by a */
- /* `move to' operation followed by `line to' to the same point. In */
- /* most cases, it is best to filter this out before using the */
- /* outline for stroking purposes (otherwise it would result in a */
- /* visible dot when round caps are used). */
- /* */
- /* Similarly, the function returns success for an empty outline also */
- /* (doing nothing, this is, not calling any emitter); if necessary, */
- /* you should filter this out, too. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * outline_processing
+ *
+ * @title:
+ * Outline Processing
+ *
+ * @abstract:
+ * Functions to create, transform, and render vectorial glyph images.
+ *
+ * @description:
+ * This section contains routines used to create and destroy scalable
+ * glyph images known as 'outlines'. These can also be measured,
+ * transformed, and converted into bitmaps and pixmaps.
+ *
+ * @order:
+ * FT_Outline
+ * FT_Outline_New
+ * FT_Outline_Done
+ * FT_Outline_Copy
+ * FT_Outline_Translate
+ * FT_Outline_Transform
+ * FT_Outline_Embolden
+ * FT_Outline_EmboldenXY
+ * FT_Outline_Reverse
+ * FT_Outline_Check
+ *
+ * FT_Outline_Get_CBox
+ * FT_Outline_Get_BBox
+ *
+ * FT_Outline_Get_Bitmap
+ * FT_Outline_Render
+ * FT_Outline_Decompose
+ * FT_Outline_Funcs
+ * FT_Outline_MoveToFunc
+ * FT_Outline_LineToFunc
+ * FT_Outline_ConicToFunc
+ * FT_Outline_CubicToFunc
+ *
+ * FT_Orientation
+ * FT_Outline_Get_Orientation
+ *
+ * FT_OUTLINE_XXX
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Decompose
+ *
+ * @description:
+ * Walk over an outline's structure to decompose it into individual
+ * segments and Bezier arcs. This function also emits 'move to'
+ * operations to indicate the start of new contours in the outline.
+ *
+ * @input:
+ * outline ::
+ * A pointer to the source target.
+ *
+ * func_interface ::
+ * A table of 'emitters', i.e., function pointers called during
+ * decomposition to indicate path operations.
+ *
+ * @inout:
+ * user ::
+ * A typeless pointer that is passed to each emitter during the
+ * decomposition. It can be used to store the state during the
+ * decomposition.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * A contour that contains a single point only is represented by a 'move
+ * to' operation followed by 'line to' to the same point. In most cases,
+ * it is best to filter this out before using the outline for stroking
+ * purposes (otherwise it would result in a visible dot when round caps
+ * are used).
+ *
+ * Similarly, the function returns success for an empty outline also
+ * (doing nothing, this is, not calling any emitter); if necessary, you
+ * should filter this out, too.
+ */
FT_EXPORT( FT_Error )
FT_Outline_Decompose( FT_Outline* outline,
const FT_Outline_Funcs* func_interface,
void* user );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_New */
- /* */
- /* <Description> */
- /* Create a new outline of a given size. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object from where the */
- /* outline is allocated. Note however that the new */
- /* outline will *not* necessarily be *freed*, when */
- /* destroying the library, by @FT_Done_FreeType. */
- /* */
- /* numPoints :: The maximum number of points within the outline. */
- /* Must be smaller than or equal to 0xFFFF (65535). */
- /* */
- /* numContours :: The maximum number of contours within the outline. */
- /* This value must be in the range 0 to `numPoints'. */
- /* */
- /* <Output> */
- /* anoutline :: A handle to the new outline. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The reason why this function takes a `library' parameter is simply */
- /* to use the library's memory allocator. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_New
+ *
+ * @description:
+ * Create a new outline of a given size.
+ *
+ * @input:
+ * library ::
+ * A handle to the library object from where the outline is allocated.
+ * Note however that the new outline will **not** necessarily be
+ * **freed**, when destroying the library, by @FT_Done_FreeType.
+ *
+ * numPoints ::
+ * The maximum number of points within the outline. Must be smaller
+ * than or equal to 0xFFFF (65535).
+ *
+ * numContours ::
+ * The maximum number of contours within the outline. This value must
+ * be in the range 0 to `numPoints`.
+ *
+ * @output:
+ * anoutline ::
+ * A handle to the new outline.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The reason why this function takes a `library` parameter is simply to
+ * use the library's memory allocator.
+ */
FT_EXPORT( FT_Error )
FT_Outline_New( FT_Library library,
FT_UInt numPoints,
@@ -162,372 +166,378 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ */
FT_EXPORT( FT_Error )
FT_Outline_Done( FT_Library library,
FT_Outline* outline );
- FT_EXPORT( FT_Error )
- FT_Outline_Done_Internal( FT_Memory memory,
- FT_Outline* outline );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Check */
- /* */
- /* <Description> */
- /* Check the contents of an outline descriptor. */
- /* */
- /* <Input> */
- /* outline :: A handle to a source outline. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* An empty outline, or an outline with a single point only is also */
- /* valid. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Check
+ *
+ * @description:
+ * Check the contents of an outline descriptor.
+ *
+ * @input:
+ * outline ::
+ * A handle to a source outline.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * An empty outline, or an outline with a single point only is also
+ * valid.
+ */
FT_EXPORT( FT_Error )
FT_Outline_Check( FT_Outline* outline );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_CBox */
- /* */
- /* <Description> */
- /* Return an outline's `control box'. The control box encloses all */
- /* the outline's points, including Bezier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bezier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <Output> */
- /* acbox :: The outline's control box. */
- /* */
- /* <Note> */
- /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Get_CBox
+ *
+ * @description:
+ * Return an outline's 'control box'. The control box encloses all the
+ * outline's points, including Bezier control points. Though it
+ * coincides with the exact bounding box for most glyphs, it can be
+ * slightly larger in some situations (like when rotating an outline that
+ * contains Bezier outside arcs).
+ *
+ * Computing the control box is very fast, while getting the bounding box
+ * can take much more time as it needs to walk over all segments and arcs
+ * in the outline. To get the latter, you can use the 'ftbbox'
+ * component, which is dedicated to this single task.
+ *
+ * @input:
+ * outline ::
+ * A pointer to the source outline descriptor.
+ *
+ * @output:
+ * acbox ::
+ * The outline's control box.
+ *
+ * @note:
+ * See @FT_Glyph_Get_CBox for a discussion of tricky fonts.
+ */
FT_EXPORT( void )
FT_Outline_Get_CBox( const FT_Outline* outline,
FT_BBox *acbox );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Translate */
- /* */
- /* <Description> */
- /* Apply a simple translation to the points of an outline. */
- /* */
- /* <InOut> */
- /* outline :: A pointer to the target outline descriptor. */
- /* */
- /* <Input> */
- /* xOffset :: The horizontal offset. */
- /* */
- /* yOffset :: The vertical offset. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Transform
+ *
+ * @description:
+ * Apply a simple 2x2 matrix to all of an outline's points. Useful for
+ * applying rotations, slanting, flipping, etc.
+ *
+ * @inout:
+ * outline ::
+ * A pointer to the target outline descriptor.
+ *
+ * @input:
+ * matrix ::
+ * A pointer to the transformation matrix.
+ *
+ * @note:
+ * You can use @FT_Outline_Translate if you need to translate the
+ * outline's points.
+ */
FT_EXPORT( void )
FT_Outline_Transform( const FT_Outline* outline,
const FT_Matrix* matrix );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Embolden */
- /* */
- /* <Description> */
- /* Embolden an outline. The new outline will be at most 4~times */
- /* `strength' pixels wider and higher. You may think of the left and */
- /* bottom borders as unchanged. */
- /* */
- /* Negative `strength' values to reduce the outline thickness are */
- /* possible also. */
- /* */
- /* <InOut> */
- /* outline :: A handle to the target outline. */
- /* */
- /* <Input> */
- /* strength :: How strong the glyph is emboldened. Expressed in */
- /* 26.6 pixel format. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The used algorithm to increase or decrease the thickness of the */
- /* glyph doesn't change the number of points; this means that certain */
- /* situations like acute angles or intersections are sometimes */
- /* handled incorrectly. */
- /* */
- /* If you need `better' metrics values you should call */
- /* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */
- /* */
- /* Example call: */
- /* */
- /* { */
- /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
- /* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */
- /* FT_Outline_Embolden( &face->glyph->outline, strength ); */
- /* } */
- /* */
- /* To get meaningful results, font scaling values must be set with */
- /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Embolden
+ *
+ * @description:
+ * Embolden an outline. The new outline will be at most 4~times
+ * `strength` pixels wider and higher. You may think of the left and
+ * bottom borders as unchanged.
+ *
+ * Negative `strength` values to reduce the outline thickness are
+ * possible also.
+ *
+ * @inout:
+ * outline ::
+ * A handle to the target outline.
+ *
+ * @input:
+ * strength ::
+ * How strong the glyph is emboldened. Expressed in 26.6 pixel format.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The used algorithm to increase or decrease the thickness of the glyph
+ * doesn't change the number of points; this means that certain
+ * situations like acute angles or intersections are sometimes handled
+ * incorrectly.
+ *
+ * If you need 'better' metrics values you should call
+ * @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.
+ *
+ * To get meaningful results, font scaling values must be set with
+ * functions like @FT_Set_Char_Size before calling FT_Render_Glyph.
+ *
+ * @example:
+ * ```
+ * FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
+ *
+ * if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
+ * FT_Outline_Embolden( &face->glyph->outline, strength );
+ * ```
+ *
+ */
FT_EXPORT( FT_Error )
FT_Outline_Embolden( FT_Outline* outline,
FT_Pos strength );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_EmboldenXY */
- /* */
- /* <Description> */
- /* Embolden an outline. The new outline will be `xstrength' pixels */
- /* wider and `ystrength' pixels higher. Otherwise, it is similar to */
- /* @FT_Outline_Embolden, which uses the same strength in both */
- /* directions. */
- /* */
- /* <Since> */
- /* 2.4.10 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_EmboldenXY
+ *
+ * @description:
+ * Embolden an outline. The new outline will be `xstrength` pixels wider
+ * and `ystrength` pixels higher. Otherwise, it is similar to
+ * @FT_Outline_Embolden, which uses the same strength in both directions.
+ *
+ * @since:
+ * 2.4.10
+ */
FT_EXPORT( FT_Error )
FT_Outline_EmboldenXY( FT_Outline* outline,
FT_Pos xstrength,
FT_Pos ystrength );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Reverse */
- /* */
- /* <Description> */
- /* Reverse the drawing direction of an outline. This is used to */
- /* ensure consistent fill conventions for mirrored glyphs. */
- /* */
- /* <InOut> */
- /* outline :: A pointer to the target outline descriptor. */
- /* */
- /* <Note> */
- /* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */
- /* the outline's `flags' field. */
- /* */
- /* It shouldn't be used by a normal client application, unless it */
- /* knows what it is doing. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Reverse
+ *
+ * @description:
+ * Reverse the drawing direction of an outline. This is used to ensure
+ * consistent fill conventions for mirrored glyphs.
+ *
+ * @inout:
+ * outline ::
+ * A pointer to the target outline descriptor.
+ *
+ * @note:
+ * This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the
+ * outline's `flags` field.
+ *
+ * It shouldn't be used by a normal client application, unless it knows
+ * what it is doing.
+ */
FT_EXPORT( void )
FT_Outline_Reverse( FT_Outline* outline );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_Bitmap */
- /* */
- /* <Description> */
- /* Render an outline within a bitmap. The outline's image is simply */
- /* OR-ed to the target bitmap. */
- /* */
- /* <Input> */
- /* library :: A handle to a FreeType library object. */
- /* */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <InOut> */
- /* abitmap :: A pointer to the target bitmap descriptor. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function does NOT CREATE the bitmap, it only renders an */
- /* outline image within the one you pass to it! Consequently, the */
- /* various fields in `abitmap' should be set accordingly. */
- /* */
- /* It will use the raster corresponding to the default glyph format. */
- /* */
- /* The value of the `num_grays' field in `abitmap' is ignored. If */
- /* you select the gray-level rasterizer, and you want less than 256 */
- /* gray levels, you have to use @FT_Outline_Render directly. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Get_Bitmap
+ *
+ * @description:
+ * Render an outline within a bitmap. The outline's image is simply
+ * OR-ed to the target bitmap.
+ *
+ * @input:
+ * library ::
+ * A handle to a FreeType library object.
+ *
+ * outline ::
+ * A pointer to the source outline descriptor.
+ *
+ * @inout:
+ * abitmap ::
+ * A pointer to the target bitmap descriptor.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This function does **not create** the bitmap, it only renders an
+ * outline image within the one you pass to it! Consequently, the
+ * various fields in `abitmap` should be set accordingly.
+ *
+ * It will use the raster corresponding to the default glyph format.
+ *
+ * The value of the `num_grays` field in `abitmap` is ignored. If you
+ * select the gray-level rasterizer, and you want less than 256 gray
+ * levels, you have to use @FT_Outline_Render directly.
+ */
FT_EXPORT( FT_Error )
FT_Outline_Get_Bitmap( FT_Library library,
FT_Outline* outline,
const FT_Bitmap *abitmap );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Render */
- /* */
- /* <Description> */
- /* Render an outline within a bitmap using the current scan-convert. */
- /* This function uses an @FT_Raster_Params structure as an argument, */
- /* allowing advanced features like direct composition, translucency, */
- /* etc. */
- /* */
- /* <Input> */
- /* library :: A handle to a FreeType library object. */
- /* */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <InOut> */
- /* params :: A pointer to an @FT_Raster_Params structure used to */
- /* describe the rendering operation. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You should know what you are doing and how @FT_Raster_Params works */
- /* to use this function. */
- /* */
- /* The field `params.source' will be set to `outline' before the scan */
- /* converter is called, which means that the value you give to it is */
- /* actually ignored. */
- /* */
- /* The gray-level rasterizer always uses 256 gray levels. If you */
- /* want less gray levels, you have to provide your own span callback. */
- /* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */
- /* @FT_Raster_Params structure for more details. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Render
+ *
+ * @description:
+ * Render an outline within a bitmap using the current scan-convert.
+ *
+ * @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:
+ * This advanced function uses @FT_Raster_Params as an argument,
+ * allowing FreeType rasterizer to be used for direct composition,
+ * translucency, etc. You should know how to set up @FT_Raster_Params
+ * for this function to work.
+ *
+ * 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.
- *
- */
+ /**************************************************************************
+ *
+ * @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,
@@ -539,33 +549,34 @@ FT_BEGIN_HEADER
} FT_Orientation;
- /**************************************************************************
- *
- * @function:
- * FT_Outline_Get_Orientation
- *
- * @description:
- * This function analyzes a glyph outline and tries to compute its
- * fill orientation (see @FT_Orientation). This is done by integrating
- * the total area covered by the outline. The positive integral
- * corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT
- * is returned. The negative integral corresponds to the counter-clockwise
- * orientation and @FT_ORIENTATION_TRUETYPE is returned.
- *
- * Note that this will return @FT_ORIENTATION_TRUETYPE for empty
- * outlines.
- *
- * @input:
- * outline ::
- * A handle to the source outline.
- *
- * @return:
- * The orientation.
- *
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Get_Orientation
+ *
+ * @description:
+ * This function analyzes a glyph outline and tries to compute its fill
+ * orientation (see @FT_Orientation). This is done by integrating the
+ * total area covered by the outline. The positive integral corresponds
+ * to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is
+ * returned. The negative integral corresponds to the counter-clockwise
+ * orientation and @FT_ORIENTATION_TRUETYPE is returned.
+ *
+ * Note that this will return @FT_ORIENTATION_TRUETYPE for empty
+ * outlines.
+ *
+ * @input:
+ * outline ::
+ * A handle to the source outline.
+ *
+ * @return:
+ * The orientation.
+ *
+ */
FT_EXPORT( FT_Orientation )
FT_Outline_Get_Orientation( FT_Outline* outline );
+
/* */
diff --git a/freetype/include/freetype/ftparams.h b/freetype/include/freetype/ftparams.h
index 5a9006c5..c374ee2f 100644
--- a/freetype/include/freetype/ftparams.h
+++ b/freetype/include/freetype/ftparams.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftparams.h */
-/* */
-/* FreeType API for possible FT_Parameter tags (specification only). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftparams.h
+ *
+ * FreeType API for possible FT_Parameter tags (specification only).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTPARAMS_H_
@@ -51,16 +51,16 @@ FT_BEGIN_HEADER
*/
- /***************************************************************************
+ /**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
*
* @description:
* A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
- * family names in the `name' table (introduced in OpenType version
- * 1.4). Use this for backward compatibility with legacy systems that
- * have a four-faces-per-family restriction.
+ * family names in the 'name' table (introduced in OpenType version 1.4).
+ * Use this for backward compatibility with legacy systems that have a
+ * four-faces-per-family restriction.
*
* @since:
* 2.8
@@ -75,14 +75,14 @@ FT_BEGIN_HEADER
FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
- /***************************************************************************
+ /**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
*
* @description:
* A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
- * subfamily names in the `name' table (introduced in OpenType version
+ * subfamily names in the 'name' table (introduced in OpenType version
* 1.4). Use this for backward compatibility with legacy systems that
* have a four-faces-per-family restriction.
*
@@ -99,9 +99,9 @@ FT_BEGIN_HEADER
FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
- /***************************************************************************
+ /**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_INCREMENTAL
*
* @description:
@@ -115,14 +115,14 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_LCD_FILTER_WEIGHTS
*
* @description:
* An @FT_Parameter tag to be used with @FT_Face_Properties. The
* corresponding argument specifies the five LCD filter weights for a
- * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding
- * the global default values or the values set up with
+ * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding the
+ * global default values or the values set up with
* @FT_Library_SetLcdFilterWeights.
*
* @since:
@@ -135,14 +135,13 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_RANDOM_SEED
*
* @description:
* An @FT_Parameter tag to be used with @FT_Face_Properties. The
* corresponding 32bit signed integer argument overrides the font
- * driver's random seed value with a face-specific one; see
- * @random-seed.
+ * driver's random seed value with a face-specific one; see @random-seed.
*
* @since:
* 2.8
@@ -154,7 +153,7 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @constant:
+ * @enum:
* FT_PARAM_TAG_STEM_DARKENING
*
* @description:
@@ -163,10 +162,10 @@ FT_BEGIN_HEADER
* darkening, overriding the global default values or the values set up
* with @FT_Property_Set (see @no-stem-darkening).
*
- * This is a passive setting that only takes effect if the font driver
- * or autohinter honors it, which the CFF, Type~1, and CID drivers
- * always do, but the autohinter only in `light' hinting mode (as of
- * version 2.9).
+ * This is a passive setting that only takes effect if the font driver or
+ * autohinter honors it, which the CFF, Type~1, and CID drivers always
+ * do, but the autohinter only in 'light' hinting mode (as of version
+ * 2.9).
*
* @since:
* 2.8
@@ -176,19 +175,19 @@ FT_BEGIN_HEADER
FT_MAKE_TAG( 'd', 'a', 'r', 'k' )
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_UNPATENTED_HINTING
- *
- * @description:
- * Deprecated, no effect.
- *
- * Previously: A constant used as the tag of an @FT_Parameter structure to
- * indicate that unpatented methods only should be used by the TrueType
- * bytecode interpreter for a typeface opened by @FT_Open_Face.
- *
- */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_PARAM_TAG_UNPATENTED_HINTING
+ *
+ * @description:
+ * Deprecated, no effect.
+ *
+ * Previously: A constant used as the tag of an @FT_Parameter structure
+ * to indicate that unpatented methods only should be used by the
+ * TrueType bytecode interpreter for a typeface opened by @FT_Open_Face.
+ *
+ */
#define FT_PARAM_TAG_UNPATENTED_HINTING \
FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
diff --git a/freetype/include/freetype/ftpfr.h b/freetype/include/freetype/ftpfr.h
index a69cc482..b4eca76e 100644
--- a/freetype/include/freetype/ftpfr.h
+++ b/freetype/include/freetype/ftpfr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftpfr.h */
-/* */
-/* FreeType API for accessing PFR-specific data (specification only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftpfr.h
+ *
+ * FreeType API for accessing PFR-specific data (specification only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -32,60 +32,61 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* pfr_fonts */
- /* */
- /* <Title> */
- /* PFR Fonts */
- /* */
- /* <Abstract> */
- /* PFR/TrueDoc specific API. */
- /* */
- /* <Description> */
- /* This section contains the declaration of PFR-specific functions. */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_PFR_Metrics
- *
- * @description:
- * Return the outline and metrics resolutions of a given PFR face.
- *
- * @input:
- * face :: Handle to the input face. It can be a non-PFR face.
- *
- * @output:
- * aoutline_resolution ::
- * Outline resolution. This is equivalent to `face->units_per_EM'
- * for non-PFR fonts. Optional (parameter can be NULL).
- *
- * ametrics_resolution ::
- * Metrics resolution. This is equivalent to `outline_resolution'
- * for non-PFR fonts. Optional (parameter can be NULL).
- *
- * ametrics_x_scale ::
- * A 16.16 fixed-point number used to scale distance expressed
- * in metrics units to device subpixels. 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.
- */
+ /**************************************************************************
+ *
+ * @section:
+ * pfr_fonts
+ *
+ * @title:
+ * PFR Fonts
+ *
+ * @abstract:
+ * PFR/TrueDoc-specific API.
+ *
+ * @description:
+ * This section contains the declaration of PFR-specific functions.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_PFR_Metrics
+ *
+ * @description:
+ * Return the outline and metrics resolutions of a given PFR face.
+ *
+ * @input:
+ * face ::
+ * Handle to the input face. It can be a non-PFR face.
+ *
+ * @output:
+ * aoutline_resolution ::
+ * Outline resolution. This is equivalent to `face->units_per_EM` for
+ * non-PFR fonts. Optional (parameter can be `NULL`).
+ *
+ * ametrics_resolution ::
+ * Metrics resolution. This is equivalent to `outline_resolution` for
+ * non-PFR fonts. Optional (parameter can be `NULL`).
+ *
+ * ametrics_x_scale ::
+ * A 16.16 fixed-point number used to scale distance expressed in
+ * metrics units to device subpixels. 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,
@@ -94,37 +95,41 @@ FT_BEGIN_HEADER
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 subpixels.
- */
+ /**************************************************************************
+ *
+ * @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 subpixels.
+ */
FT_EXPORT( FT_Error )
FT_Get_PFR_Kerning( FT_Face face,
FT_UInt left,
@@ -132,30 +137,33 @@ FT_BEGIN_HEADER
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 subpixels (i.e., 1/64th of pixels).
- */
+ /**************************************************************************
+ *
+ * @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 subpixels (i.e., 1/64th of pixels).
+ */
FT_EXPORT( FT_Error )
FT_Get_PFR_Advance( FT_Face face,
FT_UInt gindex,
diff --git a/freetype/include/freetype/ftrender.h b/freetype/include/freetype/ftrender.h
index fa8ad22b..a01c7742 100644
--- a/freetype/include/freetype/ftrender.h
+++ b/freetype/include/freetype/ftrender.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftrender.h */
-/* */
-/* FreeType renderer modules public interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftrender.h
+ *
+ * FreeType renderer modules public interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,12 +28,12 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * module_management
+ *
+ */
/* create a new glyph object */
@@ -116,32 +116,38 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Renderer_Class
+ *
+ * @description:
+ * The renderer module class descriptor.
+ *
+ * @fields:
+ * root ::
+ * The root @FT_Module_Class fields.
+ *
+ * glyph_format ::
+ * The glyph image format this renderer handles.
+ *
+ * render_glyph ::
+ * A method used to render the image that is in a given glyph slot into
+ * a bitmap.
+ *
+ * transform_glyph ::
+ * A method used to transform the image that is in a given glyph slot.
+ *
+ * get_glyph_cbox ::
+ * A method used to access the glyph's cbox.
+ *
+ * set_mode ::
+ * A method used to pass additional parameters.
+ *
+ * raster_class ::
+ * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to
+ * its raster's class.
+ */
typedef struct FT_Renderer_Class_
{
FT_Module_Class root;
@@ -158,64 +164,70 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Renderer
+ *
+ * @description:
+ * Retrieve the current renderer for a given glyph format.
+ *
+ * @input:
+ * library ::
+ * A handle to the library object.
+ *
+ * format ::
+ * The glyph format.
+ *
+ * @return:
+ * A renderer handle. 0~if none found.
+ *
+ * @note:
+ * An error will be returned if a module already exists by that name, or
+ * if the module requires a version of FreeType that is too great.
+ *
+ * To add a new renderer, simply use @FT_Add_Module. To retrieve a
+ * renderer by its name, use @FT_Get_Module.
+ */
FT_EXPORT( FT_Renderer )
FT_Get_Renderer( FT_Library library,
FT_Glyph_Format format );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Renderer */
- /* */
- /* <Description> */
- /* Set the current renderer to use, and set additional mode. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library object. */
- /* */
- /* <Input> */
- /* renderer :: A handle to the renderer object. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* parameters :: Additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* In case of success, the renderer will be used to convert glyph */
- /* images in the renderer's known format into bitmaps. */
- /* */
- /* This doesn't change the current renderer for other formats. */
- /* */
- /* Currently, no FreeType renderer module uses `parameters'; you */
- /* should thus always pass NULL as the value. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Set_Renderer
+ *
+ * @description:
+ * Set the current renderer to use, and set additional mode.
+ *
+ * @inout:
+ * library ::
+ * A handle to the library object.
+ *
+ * @input:
+ * renderer ::
+ * A handle to the renderer object.
+ *
+ * num_params ::
+ * The number of additional parameters.
+ *
+ * parameters ::
+ * Additional parameters.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * In case of success, the renderer will be used to convert glyph images
+ * in the renderer's known format into bitmaps.
+ *
+ * This doesn't change the current renderer for other formats.
+ *
+ * Currently, no FreeType renderer module uses `parameters`; you should
+ * thus always pass `NULL` as the value.
+ */
FT_EXPORT( FT_Error )
FT_Set_Renderer( FT_Library library,
FT_Renderer renderer,
diff --git a/freetype/include/freetype/ftsizes.h b/freetype/include/freetype/ftsizes.h
index 72cb08bf..6c63cef2 100644
--- a/freetype/include/freetype/ftsizes.h
+++ b/freetype/include/freetype/ftsizes.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftsizes.h */
-/* */
-/* FreeType size objects management (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftsizes.h
+ *
+ * FreeType size objects management (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -42,109 +42,110 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Done_Size
+ *
+ * @description:
+ * Discard a given size object. Note that @FT_Done_Face automatically
+ * discards all size objects allocated with @FT_New_Size.
+ *
+ * @input:
+ * size ::
+ * A handle to a target size object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ */
FT_EXPORT( FT_Error )
FT_Done_Size( FT_Size size );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Activate_Size */
- /* */
- /* <Description> */
- /* Even though it is possible to create several size objects for a */
- /* given face (see @FT_New_Size for details), functions like */
- /* @FT_Load_Glyph or @FT_Load_Char only use the one that has been */
- /* activated last to determine the `current character pixel size'. */
- /* */
- /* This function can be used to `activate' a previously created size */
- /* object. */
- /* */
- /* <Input> */
- /* size :: A handle to a target size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* If `face' is the size's parent face object, this function changes */
- /* the value of `face->size' to the input size handle. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Activate_Size
+ *
+ * @description:
+ * Even though it is possible to create several size objects for a given
+ * face (see @FT_New_Size for details), functions like @FT_Load_Glyph or
+ * @FT_Load_Char only use the one that has been activated last to
+ * determine the 'current character pixel size'.
+ *
+ * This function can be used to 'activate' a previously created size
+ * object.
+ *
+ * @input:
+ * size ::
+ * A handle to a target size object.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * If `face` is the size's parent face object, this function changes the
+ * value of `face->size` to the input size handle.
+ */
FT_EXPORT( FT_Error )
FT_Activate_Size( FT_Size size );
diff --git a/freetype/include/freetype/ftsnames.h b/freetype/include/freetype/ftsnames.h
index 8eb8d70f..4d43602a 100644
--- a/freetype/include/freetype/ftsnames.h
+++ b/freetype/include/freetype/ftsnames.h
@@ -1,22 +1,22 @@
-/***************************************************************************/
-/* */
-/* 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-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTSNAMES_H_
@@ -37,72 +37,74 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* sfnt_names */
- /* */
- /* <Title> */
- /* SFNT Names */
- /* */
- /* <Abstract> */
- /* Access the names embedded in TrueType and OpenType files. */
- /* */
- /* <Description> */
- /* The TrueType and OpenType specifications allow the inclusion of */
- /* a special names table (`name') in font files. This table contains */
- /* textual (and internationalized) information regarding the font, */
- /* like family name, copyright, version, etc. */
- /* */
- /* The definitions below are used to access them if available. */
- /* */
- /* Note that this has nothing to do with glyph names! */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SfntName */
- /* */
- /* <Description> */
- /* A structure used to model an SFNT `name' table entry. */
- /* */
- /* <Fields> */
- /* platform_id :: The platform ID for `string'. */
- /* See @TT_PLATFORM_XXX for possible values. */
- /* */
- /* encoding_id :: The encoding ID for `string'. */
- /* See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
- /* @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX */
- /* for possible values. */
- /* */
- /* language_id :: The language ID for `string'. */
- /* See @TT_MAC_LANGID_XXX and @TT_MS_LANGID_XXX for */
- /* possible values. */
- /* */
- /* Registered OpenType values for `language_id' are */
- /* always smaller than 0x8000; values equal or larger */
- /* than 0x8000 usually indicate a language tag string */
- /* (introduced in OpenType version 1.6). Use function */
- /* @FT_Get_Sfnt_LangTag with `language_id' as its */
- /* argument to retrieve the associated language tag. */
- /* */
- /* name_id :: An identifier for `string'. */
- /* See @TT_NAME_ID_XXX for possible values. */
- /* */
- /* string :: The `name' string. Note that its format differs */
- /* depending on the (platform,encoding) pair, being */
- /* either a string of bytes (without a terminating */
- /* NULL byte) or containing UTF-16BE entities. */
- /* */
- /* string_len :: The length of `string' in bytes. */
- /* */
- /* <Note> */
- /* Please refer to the TrueType or OpenType specification for more */
- /* details. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * sfnt_names
+ *
+ * @title:
+ * SFNT Names
+ *
+ * @abstract:
+ * Access the names embedded in TrueType and OpenType files.
+ *
+ * @description:
+ * The TrueType and OpenType specifications allow the inclusion of a
+ * special names table ('name') in font files. This table contains
+ * textual (and internationalized) information regarding the font, like
+ * family name, copyright, version, etc.
+ *
+ * The definitions below are used to access them if available.
+ *
+ * Note that this has nothing to do with glyph names!
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_SfntName
+ *
+ * @description:
+ * A structure used to model an SFNT 'name' table entry.
+ *
+ * @fields:
+ * platform_id ::
+ * The platform ID for `string`. See @TT_PLATFORM_XXX for possible
+ * values.
+ *
+ * encoding_id ::
+ * The encoding ID for `string`. See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,
+ * @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible
+ * values.
+ *
+ * language_id ::
+ * The language ID for `string`. See @TT_MAC_LANGID_XXX and
+ * @TT_MS_LANGID_XXX for possible values.
+ *
+ * Registered OpenType values for `language_id` are always smaller than
+ * 0x8000; values equal or larger than 0x8000 usually indicate a
+ * language tag string (introduced in OpenType version 1.6). Use
+ * function @FT_Get_Sfnt_LangTag with `language_id` as its argument to
+ * retrieve the associated language tag.
+ *
+ * name_id ::
+ * An identifier for `string`. See @TT_NAME_ID_XXX for possible
+ * values.
+ *
+ * string ::
+ * The 'name' string. Note that its format differs depending on the
+ * (platform,encoding) pair, being either a string of bytes (without a
+ * terminating `NULL` byte) or containing UTF-16BE entities.
+ *
+ * string_len ::
+ * The length of `string` in bytes.
+ *
+ * @note:
+ * Please refer to the TrueType or OpenType specification for more
+ * details.
+ */
typedef struct FT_SfntName_
{
FT_UShort platform_id;
@@ -116,83 +118,95 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * @note:
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
+ */
FT_EXPORT( FT_UInt )
FT_Get_Sfnt_Name_Count( FT_Face face );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Name */
- /* */
- /* <Description> */
- /* Retrieve a string of the SFNT `name' table for a given index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* idx :: The index of the `name' string. */
- /* */
- /* <Output> */
- /* aname :: The indexed @FT_SfntName structure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `string' array returned in the `aname' structure is not */
- /* null-terminated. Note that you don't have to deallocate `string' */
- /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
- /* */
- /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
- /* `name' table entries, then do a loop until you get the right */
- /* platform, encoding, and name ID. */
- /* */
- /* `name' table format~1 entries can use language tags also, see */
- /* @FT_Get_Sfnt_LangTag. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Sfnt_Name
+ *
+ * @description:
+ * Retrieve a string of the SFNT 'name' table for a given index.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * idx ::
+ * The index of the 'name' string.
+ *
+ * @output:
+ * aname ::
+ * The indexed @FT_SfntName structure.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The `string` array returned in the `aname` structure is not
+ * null-terminated. Note that you don't have to deallocate `string` by
+ * yourself; FreeType takes care of it if you call @FT_Done_Face.
+ *
+ * Use @FT_Get_Sfnt_Name_Count to get the total number of available
+ * 'name' table entries, then do a loop until you get the right platform,
+ * encoding, and name ID.
+ *
+ * 'name' table format~1 entries can use language tags also, see
+ * @FT_Get_Sfnt_LangTag.
+ *
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
+ */
FT_EXPORT( FT_Error )
FT_Get_Sfnt_Name( FT_Face face,
FT_UInt idx,
FT_SfntName *aname );
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SfntLangTag */
- /* */
- /* <Description> */
- /* A structure to model a language tag entry from an SFNT `name' */
- /* table. */
- /* */
- /* <Fields> */
- /* string :: The language tag string, encoded in UTF-16BE */
- /* (without trailing NULL bytes). */
- /* */
- /* string_len :: The length of `string' in *bytes*. */
- /* */
- /* <Note> */
- /* Please refer to the TrueType or OpenType specification for more */
- /* details. */
- /* */
- /* <Since> */
- /* 2.8 */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_SfntLangTag
+ *
+ * @description:
+ * A structure to model a language tag entry from an SFNT 'name' table.
+ *
+ * @fields:
+ * string ::
+ * The language tag string, encoded in UTF-16BE (without trailing
+ * `NULL` bytes).
+ *
+ * string_len ::
+ * The length of `string` in **bytes**.
+ *
+ * @note:
+ * Please refer to the TrueType or OpenType specification for more
+ * details.
+ *
+ * @since:
+ * 2.8
+ */
typedef struct FT_SfntLangTag_
{
FT_Byte* string; /* this string is *not* null-terminated! */
@@ -201,41 +215,47 @@ FT_BEGIN_HEADER
} FT_SfntLangTag;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_LangTag */
- /* */
- /* <Description> */
- /* Retrieve the language tag associated with a language ID of an SFNT */
- /* `name' table entry. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* langID :: The language ID, as returned by @FT_Get_Sfnt_Name. */
- /* This is always a value larger than 0x8000. */
- /* */
- /* <Output> */
- /* alangTag :: The language tag associated with the `name' table */
- /* entry's language ID. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `string' array returned in the `alangTag' structure is not */
- /* null-terminated. Note that you don't have to deallocate `string' */
- /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
- /* */
- /* Only `name' table format~1 supports language tags. For format~0 */
- /* tables, this function always returns FT_Err_Invalid_Table. For */
- /* invalid format~1 language ID values, FT_Err_Invalid_Argument is */
- /* returned. */
- /* */
- /* <Since> */
- /* 2.8 */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Sfnt_LangTag
+ *
+ * @description:
+ * Retrieve the language tag associated with a language ID of an SFNT
+ * 'name' table entry.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * langID ::
+ * The language ID, as returned by @FT_Get_Sfnt_Name. This is always a
+ * value larger than 0x8000.
+ *
+ * @output:
+ * alangTag ::
+ * The language tag associated with the 'name' table entry's language
+ * ID.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * The `string` array returned in the `alangTag` structure is not
+ * null-terminated. Note that you don't have to deallocate `string` by
+ * yourself; FreeType takes care of it if you call @FT_Done_Face.
+ *
+ * Only 'name' table format~1 supports language tags. For format~0
+ * tables, this function always returns FT_Err_Invalid_Table. For
+ * invalid format~1 language ID values, FT_Err_Invalid_Argument is
+ * returned.
+ *
+ * This function always returns an error if the config macro
+ * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
+ *
+ * @since:
+ * 2.8
+ */
FT_EXPORT( FT_Error )
FT_Get_Sfnt_LangTag( FT_Face face,
FT_UInt langID,
diff --git a/freetype/include/freetype/ftstroke.h b/freetype/include/freetype/ftstroke.h
index 44b6fbe1..01a9c181 100644
--- a/freetype/include/freetype/ftstroke.h
+++ b/freetype/include/freetype/ftstroke.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftstroke.h */
-/* */
-/* FreeType path stroker (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftstroke.h
+ *
+ * FreeType path stroker (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTSTROKE_H_
@@ -27,116 +27,113 @@
FT_BEGIN_HEADER
- /************************************************************************
- *
- * @section:
- * glyph_stroker
- *
- * @title:
- * Glyph Stroker
- *
- * @abstract:
- * Generating bordered and stroked glyphs.
- *
- * @description:
- * This component generates stroked outlines of a given vectorial
- * glyph. It also allows you to retrieve the `outside' and/or the
- * `inside' borders of the stroke.
- *
- * This can be useful to generate `bordered' glyph, i.e., glyphs
- * displayed with a coloured (and anti-aliased) border around their
- * shape.
- *
- * @order:
- * FT_Stroker
- *
- * FT_Stroker_LineJoin
- * FT_Stroker_LineCap
- * FT_StrokerBorder
- *
- * FT_Outline_GetInsideBorder
- * FT_Outline_GetOutsideBorder
- *
- * FT_Glyph_Stroke
- * FT_Glyph_StrokeBorder
- *
- * FT_Stroker_New
- * FT_Stroker_Set
- * FT_Stroker_Rewind
- * FT_Stroker_ParseOutline
- * FT_Stroker_Done
- *
- * FT_Stroker_BeginSubPath
- * FT_Stroker_EndSubPath
- *
- * FT_Stroker_LineTo
- * FT_Stroker_ConicTo
- * FT_Stroker_CubicTo
- *
- * FT_Stroker_GetBorderCounts
- * FT_Stroker_ExportBorder
- * FT_Stroker_GetCounts
- * FT_Stroker_Export
- *
- */
-
-
- /**************************************************************
- *
- * @type:
- * FT_Stroker
- *
- * @description:
- * Opaque handle to a path stroker object.
- */
+ /**************************************************************************
+ *
+ * @section:
+ * glyph_stroker
+ *
+ * @title:
+ * Glyph Stroker
+ *
+ * @abstract:
+ * Generating bordered and stroked glyphs.
+ *
+ * @description:
+ * This component generates stroked outlines of a given vectorial glyph.
+ * It also allows you to retrieve the 'outside' and/or the 'inside'
+ * borders of the stroke.
+ *
+ * This can be useful to generate 'bordered' glyph, i.e., glyphs
+ * displayed with a coloured (and anti-aliased) border around their
+ * shape.
+ *
+ * @order:
+ * FT_Stroker
+ *
+ * FT_Stroker_LineJoin
+ * FT_Stroker_LineCap
+ * FT_StrokerBorder
+ *
+ * FT_Outline_GetInsideBorder
+ * FT_Outline_GetOutsideBorder
+ *
+ * FT_Glyph_Stroke
+ * FT_Glyph_StrokeBorder
+ *
+ * FT_Stroker_New
+ * FT_Stroker_Set
+ * FT_Stroker_Rewind
+ * FT_Stroker_ParseOutline
+ * FT_Stroker_Done
+ *
+ * FT_Stroker_BeginSubPath
+ * FT_Stroker_EndSubPath
+ *
+ * FT_Stroker_LineTo
+ * FT_Stroker_ConicTo
+ * FT_Stroker_CubicTo
+ *
+ * FT_Stroker_GetBorderCounts
+ * FT_Stroker_ExportBorder
+ * FT_Stroker_GetCounts
+ * FT_Stroker_Export
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Stroker
+ *
+ * @description:
+ * Opaque handle to a path stroker object.
+ */
typedef struct FT_StrokerRec_* FT_Stroker;
- /**************************************************************
+ /**************************************************************************
*
* @enum:
* FT_Stroker_LineJoin
*
* @description:
- * These values determine how two joining lines are rendered
- * in a stroker.
+ * 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.
+ * Used to render rounded line joins. Circular arcs are used to join
+ * two lines smoothly.
*
* FT_STROKER_LINEJOIN_BEVEL ::
- * Used to render beveled line joins. The outer corner of
- * the joined lines is filled by enclosing the triangular
- * region of the corner with a straight line between the
- * outer corners of each stroke.
+ * Used to render beveled line joins. The outer corner of the joined
+ * lines is filled by enclosing the triangular region of the corner
+ * with a straight line between the outer corners of each stroke.
*
* FT_STROKER_LINEJOIN_MITER_FIXED ::
- * Used to render mitered line joins, with fixed bevels if the
- * miter limit is exceeded. The outer edges of the strokes
- * for the two segments are extended until they meet at an
- * angle. If the segments meet at too sharp an angle (such
- * that the miter would extend from the intersection of the
- * segments a distance greater than the product of the miter
- * limit value and the border radius), then a bevel join (see
- * above) is used instead. This prevents long spikes being
- * created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
- * line join as used in PostScript and PDF.
+ * Used to render mitered line joins, with fixed bevels if the miter
+ * limit is exceeded. The outer edges of the strokes for the two
+ * segments are extended until they meet at an angle. If the segments
+ * meet at too sharp an angle (such that the miter would extend from
+ * the intersection of the segments a distance greater than the product
+ * of the miter limit value and the border radius), then a bevel join
+ * (see above) is used instead. This prevents long spikes being
+ * created. `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line
+ * join as used in PostScript and PDF.
*
* FT_STROKER_LINEJOIN_MITER_VARIABLE ::
* FT_STROKER_LINEJOIN_MITER ::
- * Used to render mitered line joins, with variable bevels if
- * the miter limit is exceeded. The intersection of the
- * strokes is clipped at a line perpendicular to the bisector
- * of the angle between the strokes, at the distance from the
- * intersection of the segments equal to the product of the
- * miter limit value and the border radius. This prevents
- * long spikes being created.
- * FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
- * join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias
- * for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
- * backward compatibility.
+ * Used to render mitered line joins, with variable bevels if the miter
+ * limit is exceeded. The intersection of the strokes is clipped at a
+ * line perpendicular to the bisector of the angle between the strokes,
+ * at the distance from the intersection of the segments equal to the
+ * product of the miter limit value and the border radius. This
+ * prevents long spikes being created.
+ * `FT_STROKER_LINEJOIN_MITER_VARIABLE` generates a mitered line join
+ * as used in XPS. `FT_STROKER_LINEJOIN_MITER` is an alias for
+ * `FT_STROKER_LINEJOIN_MITER_VARIABLE`, retained for backward
+ * compatibility.
*/
typedef enum FT_Stroker_LineJoin_
{
@@ -149,27 +146,25 @@ FT_BEGIN_HEADER
} FT_Stroker_LineJoin;
- /**************************************************************
+ /**************************************************************************
*
* @enum:
* FT_Stroker_LineCap
*
* @description:
- * These values determine how the end of opened sub-paths are
- * rendered in a stroke.
+ * 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.
+ * 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.
+ * 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.
+ * The end of lines is rendered as a square around the last point.
*/
typedef enum FT_Stroker_LineCap_
{
@@ -180,14 +175,14 @@ FT_BEGIN_HEADER
} 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.
+ * These values are used to select a given stroke border in
+ * @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
*
* @values:
* FT_STROKER_BORDER_LEFT ::
@@ -197,9 +192,9 @@ FT_BEGIN_HEADER
* Select the right border, relative to the drawing direction.
*
* @note:
- * Applications are generally interested in the `inside' and `outside'
+ * 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
+ * '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
@@ -213,14 +208,14 @@ FT_BEGIN_HEADER
} FT_StrokerBorder;
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Outline_GetInsideBorder
*
* @description:
- * Retrieve the @FT_StrokerBorder value corresponding to the
- * `inside' borders of a given outline.
+ * Retrieve the @FT_StrokerBorder value corresponding to the 'inside'
+ * borders of a given outline.
*
* @input:
* outline ::
@@ -234,14 +229,14 @@ FT_BEGIN_HEADER
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.
+ * Retrieve the @FT_StrokerBorder value corresponding to the 'outside'
+ * borders of a given outline.
*
* @input:
* outline ::
@@ -255,7 +250,7 @@ FT_BEGIN_HEADER
FT_Outline_GetOutsideBorder( FT_Outline* outline );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_New
@@ -269,7 +264,7 @@ FT_BEGIN_HEADER
*
* @output:
* astroker ::
- * A new stroker object handle. NULL in case of error.
+ * A new stroker object handle. `NULL` in case of error.
*
* @return:
* FreeType error code. 0~means success.
@@ -279,7 +274,7 @@ FT_BEGIN_HEADER
FT_Stroker *astroker );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_Set
@@ -301,13 +296,12 @@ FT_BEGIN_HEADER
* The line join style.
*
* miter_limit ::
- * The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
- * FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
- * expressed as 16.16 fixed-point value.
+ * The miter limit for the `FT_STROKER_LINEJOIN_MITER_FIXED` and
+ * `FT_STROKER_LINEJOIN_MITER_VARIABLE` line join styles, expressed as
+ * 16.16 fixed-point value.
*
* @note:
- * The radius is expressed in the same units as the outline
- * coordinates.
+ * The radius is expressed in the same units as the outline coordinates.
*
* This function calls @FT_Stroker_Rewind automatically.
*/
@@ -319,16 +313,15 @@ FT_BEGIN_HEADER
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.
+ * 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 ::
@@ -338,15 +331,15 @@ FT_BEGIN_HEADER
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.
+ * 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 ::
@@ -356,18 +349,18 @@ FT_BEGIN_HEADER
* The source outline.
*
* opened ::
- * A boolean. If~1, the outline is treated as an open path instead
- * of a closed one.
+ * A boolean. If~1, the outline is treated as an open path instead of
+ * a closed one.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * If `opened' is~0 (the default), the outline is treated as a closed
- * path, and the stroker generates two distinct `border' outlines.
+ * If `opened` is~0 (the default), the outline is treated as a closed
+ * path, and the stroker generates two distinct 'border' outlines.
*
- * If `opened' is~1, the outline is processed as an open path, and the
- * stroker generates a single `stroke' outline.
+ * If `opened` is~1, the outline is processed as an open path, and the
+ * stroker generates a single 'stroke' outline.
*
* This function calls @FT_Stroker_Rewind automatically.
*/
@@ -377,7 +370,7 @@ FT_BEGIN_HEADER
FT_Bool opened );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_BeginSubPath
@@ -399,8 +392,8 @@ FT_BEGIN_HEADER
* 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.
+ * 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,
@@ -408,7 +401,7 @@ FT_BEGIN_HEADER
FT_Bool open );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_EndSubPath
@@ -424,22 +417,22 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
- * You should call this function after @FT_Stroker_BeginSubPath.
- * If the subpath was not `opened', this function `draws' a
- * single line segment to the start position when needed.
+ * You should call this function after @FT_Stroker_BeginSubPath. If the
+ * subpath was not 'opened', this function 'draws' a single line segment
+ * to the start position when needed.
*/
FT_EXPORT( FT_Error )
FT_Stroker_EndSubPath( FT_Stroker stroker );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_LineTo
*
* @description:
- * `Draw' a single line segment in the stroker's current sub-path,
- * from the last position.
+ * 'Draw' a single line segment in the stroker's current sub-path, from
+ * the last position.
*
* @input:
* stroker ::
@@ -460,13 +453,13 @@ FT_BEGIN_HEADER
FT_Vector* to );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_ConicTo
*
* @description:
- * `Draw' a single quadratic Bezier in the stroker's current sub-path,
+ * 'Draw' a single quadratic Bezier in the stroker's current sub-path,
* from the last position.
*
* @input:
@@ -492,14 +485,14 @@ FT_BEGIN_HEADER
FT_Vector* to );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_CubicTo
*
* @description:
- * `Draw' a single cubic Bezier in the stroker's current sub-path,
- * from the last position.
+ * 'Draw' a single cubic Bezier in the stroker's current sub-path, from
+ * the last position.
*
* @input:
* stroker ::
@@ -528,16 +521,16 @@ FT_BEGIN_HEADER
FT_Vector* to );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_GetBorderCounts
*
* @description:
- * Call this function once you have finished parsing your paths
- * with the stroker. It returns the number of points and
- * contours necessary to export one of the `border' or `stroke'
- * outlines generated by the stroker.
+ * Call this function once you have finished parsing your paths with the
+ * stroker. It returns the number of points and contours necessary to
+ * export one of the 'border' or 'stroke' outlines generated by the
+ * stroker.
*
* @input:
* stroker ::
@@ -557,15 +550,15 @@ FT_BEGIN_HEADER
* 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 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.
+ * 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.
+ * 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,
@@ -574,19 +567,17 @@ FT_BEGIN_HEADER
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.
+ * Call this function after @FT_Stroker_GetBorderCounts to export the
+ * corresponding border to your own @FT_Outline structure.
*
- * Note that this function appends the border points and
- * contours to your outline, but does not try to resize its
- * arrays.
+ * Note that this function appends the border points and contours to your
+ * outline, but does not try to resize its arrays.
*
* @input:
* stroker ::
@@ -599,19 +590,19 @@ FT_BEGIN_HEADER
* 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.
+ * 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 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.
+ * 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.
+ * 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,
@@ -619,16 +610,15 @@ FT_BEGIN_HEADER
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.
+ * 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 ::
@@ -650,18 +640,17 @@ FT_BEGIN_HEADER
FT_UInt *anum_contours );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_Export
*
* @description:
- * Call this function after @FT_Stroker_GetBorderCounts to
- * export all borders to your own @FT_Outline structure.
+ * Call this function after @FT_Stroker_GetBorderCounts to export all
+ * borders to your own @FT_Outline structure.
*
- * Note that this function appends the border points and
- * contours to your outline, but does not try to resize its
- * arrays.
+ * Note that this function appends the border points and contours to your
+ * outline, but does not try to resize its arrays.
*
* @input:
* stroker ::
@@ -675,7 +664,7 @@ FT_BEGIN_HEADER
FT_Outline* outline );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Stroker_Done
@@ -685,13 +674,13 @@ FT_BEGIN_HEADER
*
* @input:
* stroker ::
- * A stroker handle. Can be NULL.
+ * A stroker handle. Can be `NULL`.
*/
FT_EXPORT( void )
FT_Stroker_Done( FT_Stroker stroker );
- /**************************************************************
+ /**************************************************************************
*
* @function:
* FT_Glyph_Stroke
@@ -708,8 +697,7 @@ FT_BEGIN_HEADER
* A stroker handle.
*
* destroy ::
- * A Boolean. If~1, the source glyph object is destroyed
- * on success.
+ * A Boolean. If~1, the source glyph object is destroyed on success.
*
* @return:
* FreeType error code. 0~means success.
@@ -719,8 +707,8 @@ FT_BEGIN_HEADER
*
* Adding stroke may yield a significantly wider and taller glyph
* depending on how large of a radius was used to stroke the glyph. You
- * may need to manually adjust horizontal and vertical advance amounts
- * to account for this added size.
+ * may need to manually adjust horizontal and vertical advance amounts to
+ * account for this added size.
*/
FT_EXPORT( FT_Error )
FT_Glyph_Stroke( FT_Glyph *pglyph,
@@ -728,14 +716,14 @@ FT_BEGIN_HEADER
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.
+ * Stroke a given outline glyph object with a given stroker, but only
+ * return either its inside or outside border.
*
* @inout:
* pglyph ::
@@ -746,12 +734,11 @@ FT_BEGIN_HEADER
* A stroker handle.
*
* inside ::
- * A Boolean. If~1, return the inside border, otherwise
- * the outside border.
+ * 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.
+ * A Boolean. If~1, the source glyph object is destroyed on success.
*
* @return:
* FreeType error code. 0~means success.
@@ -761,8 +748,8 @@ FT_BEGIN_HEADER
*
* Adding stroke may yield a significantly wider and taller glyph
* depending on how large of a radius was used to stroke the glyph. You
- * may need to manually adjust horizontal and vertical advance amounts
- * to account for this added size.
+ * may need to manually adjust horizontal and vertical advance amounts to
+ * account for this added size.
*/
FT_EXPORT( FT_Error )
FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
diff --git a/freetype/include/freetype/ftsynth.h b/freetype/include/freetype/ftsynth.h
index ff9fb43d..8754f97c 100644
--- a/freetype/include/freetype/ftsynth.h
+++ b/freetype/include/freetype/ftsynth.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ftsynth.h */
-/* */
-/* FreeType synthesizing code for emboldening and slanting */
-/* (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsynth.h
+ *
+ * FreeType synthesizing code for emboldening and slanting
+ * (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/*************************************************************************/
@@ -35,7 +35,7 @@
/* Main reason for not lifting the functions in this module to a */
- /* `standard' API is that the used parameters for emboldening and */
+ /* 'standard' API is that the used parameters for emboldening and */
/* slanting are not configurable. Consider the functions as a */
/* code resource that should be copied into the application and */
/* adapted to the particular needs. */
@@ -57,7 +57,7 @@
FT_BEGIN_HEADER
- /* Embolden a glyph by a `reasonable' value (which is highly a matter of */
+ /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */
/* taste). This function is actually a convenience function, providing */
/* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */
/* */
diff --git a/freetype/include/freetype/ftsystem.h b/freetype/include/freetype/ftsystem.h
index f6b1629e..889a6ba1 100644
--- a/freetype/include/freetype/ftsystem.h
+++ b/freetype/include/freetype/ftsystem.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftsystem.h */
-/* */
-/* FreeType low-level system interface definition (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsystem.h
+ *
+ * FreeType low-level system interface definition (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,34 +26,33 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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 */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * M E M O R Y M A N A G E M E N T
+ *
+ */
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Memory
@@ -66,13 +65,13 @@ FT_BEGIN_HEADER
typedef struct FT_MemoryRec_* FT_Memory;
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* FT_Alloc_Func
*
* @description:
- * A function used to allocate `size' bytes from `memory'.
+ * A function used to allocate `size` bytes from `memory`.
*
* @input:
* memory ::
@@ -90,7 +89,7 @@ FT_BEGIN_HEADER
long size );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* FT_Free_Func
@@ -111,7 +110,7 @@ FT_BEGIN_HEADER
void* block );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* FT_Realloc_Func
@@ -146,7 +145,7 @@ FT_BEGIN_HEADER
void* block );
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* FT_MemoryRec
@@ -177,14 +176,14 @@ FT_BEGIN_HEADER
};
- /*************************************************************************/
- /* */
- /* I / O M A N A G E M E N T */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * I / O M A N A G E M E N T
+ *
+ */
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Stream
@@ -193,21 +192,21 @@ FT_BEGIN_HEADER
* A handle to an input stream.
*
* @also:
- * See @FT_StreamRec for the publicly accessible fields of a given
- * stream object.
+ * See @FT_StreamRec for the publicly accessible fields of a given stream
+ * object.
*
*/
typedef struct FT_StreamRec_* FT_Stream;
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* FT_StreamDesc
*
* @description:
* A union type used to store either a long or a pointer. This is used
- * to store a file descriptor or a `FILE*' in an input stream.
+ * to store a file descriptor or a `FILE*` in an input stream.
*
*/
typedef union FT_StreamDesc_
@@ -218,7 +217,7 @@ FT_BEGIN_HEADER
} FT_StreamDesc;
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* FT_Stream_IoFunc
@@ -243,9 +242,8 @@ FT_BEGIN_HEADER
* The number of bytes effectively read by the stream.
*
* @note:
- * This function might be called to perform a seek or skip operation
- * with a `count' of~0. A non-zero return value then indicates an
- * error.
+ * This function might be called to perform a seek or skip operation with
+ * a `count` of~0. A non-zero return value then indicates an error.
*
*/
typedef unsigned long
@@ -255,7 +253,7 @@ FT_BEGIN_HEADER
unsigned long count );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* FT_Stream_CloseFunc
@@ -265,14 +263,14 @@ FT_BEGIN_HEADER
*
* @input:
* stream ::
- * A handle to the target stream.
+ * A handle to the target stream.
*
*/
typedef void
(*FT_Stream_CloseFunc)( FT_Stream stream );
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* FT_StreamRec
@@ -283,7 +281,7 @@ FT_BEGIN_HEADER
* @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
+ * byte in memory. This field should always be set to `NULL` for
* disk-based streams.
*
* size ::
@@ -299,7 +297,7 @@ FT_BEGIN_HEADER
*
* 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*'
+ * used by stream implementations to store file descriptors or `FILE*`
* pointers.
*
* pathname ::
@@ -314,13 +312,13 @@ FT_BEGIN_HEADER
* 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.
+ * 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.
+ * frames. In particular, the `FT_GET_XXX` macros use this instead of
+ * the `pos` field.
*
* limit ::
* This field is set and used internally by FreeType when parsing
diff --git a/freetype/include/freetype/fttrigon.h b/freetype/include/freetype/fttrigon.h
index 2e3f3f1f..37e1412f 100644
--- a/freetype/include/freetype/fttrigon.h
+++ b/freetype/include/freetype/fttrigon.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* fttrigon.h */
-/* */
-/* FreeType trigonometric functions (specification). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fttrigon.h
+ *
+ * FreeType trigonometric functions (specification).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -31,15 +31,15 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * computations
+ *
+ */
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* FT_Angle
@@ -52,7 +52,7 @@ FT_BEGIN_HEADER
typedef FT_Fixed FT_Angle;
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_ANGLE_PI
@@ -64,7 +64,7 @@ FT_BEGIN_HEADER
#define FT_ANGLE_PI ( 180L << 16 )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_ANGLE_2PI
@@ -76,7 +76,7 @@ FT_BEGIN_HEADER
#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_ANGLE_PI2
@@ -88,7 +88,7 @@ FT_BEGIN_HEADER
#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 )
- /*************************************************************************
+ /**************************************************************************
*
* @macro:
* FT_ANGLE_PI4
@@ -100,7 +100,7 @@ FT_BEGIN_HEADER
#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 )
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Sin
@@ -124,7 +124,7 @@ FT_BEGIN_HEADER
FT_Sin( FT_Angle angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Cos
@@ -148,7 +148,7 @@ FT_BEGIN_HEADER
FT_Cos( FT_Angle angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Tan
@@ -168,14 +168,14 @@ FT_BEGIN_HEADER
FT_Tan( FT_Angle angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Atan2
*
* @description:
- * Return the arc-tangent corresponding to a given vector (x,y) in
- * the 2d plane.
+ * Return the arc-tangent corresponding to a given vector (x,y) in the 2d
+ * plane.
*
* @input:
* x ::
@@ -193,7 +193,7 @@ FT_BEGIN_HEADER
FT_Fixed y );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Angle_Diff
@@ -210,7 +210,7 @@ FT_BEGIN_HEADER
* Second angle.
*
* @return:
- * Constrained value of `value2-value1'.
+ * Constrained value of `angle2-angle1`.
*
*/
FT_EXPORT( FT_Angle )
@@ -218,15 +218,15 @@ FT_BEGIN_HEADER
FT_Angle angle2 );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Vector_Unit
*
* @description:
* Return the unit vector corresponding to a given angle. After the
- * call, the value of `vec.x' will be `cos(angle)', and the value of
- * `vec.y' will be `sin(angle)'.
+ * call, the value of `vec.x` will be `cos(angle)`, and the value of
+ * `vec.y` will be `sin(angle)`.
*
* This function is useful to retrieve both the sinus and cosinus of a
* given angle quickly.
@@ -245,7 +245,7 @@ FT_BEGIN_HEADER
FT_Angle angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Vector_Rotate
@@ -267,7 +267,7 @@ FT_BEGIN_HEADER
FT_Angle angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Vector_Length
@@ -288,7 +288,7 @@ FT_BEGIN_HEADER
FT_Vector_Length( FT_Vector* vec );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Vector_Polarize
@@ -314,7 +314,7 @@ FT_BEGIN_HEADER
FT_Angle *angle );
- /*************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Vector_From_Polar
diff --git a/freetype/include/freetype/fttypes.h b/freetype/include/freetype/fttypes.h
index f638c2e5..10571505 100644
--- a/freetype/include/freetype/fttypes.h
+++ b/freetype/include/freetype/fttypes.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* fttypes.h */
-/* */
-/* FreeType simple types definitions (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fttypes.h
+ *
+ * FreeType simple types definitions (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -31,326 +31,327 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /* <Title> */
- /* Basic Data Types */
- /* */
- /* <Abstract> */
- /* The basic data types defined by the library. */
- /* */
- /* <Description> */
- /* This section contains the basic data types defined by FreeType~2, */
- /* ranging from simple scalar types to bitmap descriptors. More */
- /* font-specific structures are defined in a different section. */
- /* */
- /* <Order> */
- /* FT_Byte */
- /* FT_Bytes */
- /* FT_Char */
- /* FT_Int */
- /* FT_UInt */
- /* FT_Int16 */
- /* FT_UInt16 */
- /* FT_Int32 */
- /* FT_UInt32 */
- /* FT_Int64 */
- /* FT_UInt64 */
- /* FT_Short */
- /* FT_UShort */
- /* FT_Long */
- /* FT_ULong */
- /* FT_Bool */
- /* FT_Offset */
- /* FT_PtrDist */
- /* FT_String */
- /* FT_Tag */
- /* FT_Error */
- /* FT_Fixed */
- /* FT_Pointer */
- /* FT_Pos */
- /* FT_Vector */
- /* FT_BBox */
- /* FT_Matrix */
- /* FT_FWord */
- /* FT_UFWord */
- /* FT_F2Dot14 */
- /* FT_UnitVector */
- /* FT_F26Dot6 */
- /* FT_Data */
- /* */
- /* FT_MAKE_TAG */
- /* */
- /* FT_Generic */
- /* FT_Generic_Finalizer */
- /* */
- /* FT_Bitmap */
- /* FT_Pixel_Mode */
- /* FT_Palette_Mode */
- /* FT_Glyph_Format */
- /* FT_IMAGE_TAG */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Bool */
- /* */
- /* <Description> */
- /* A typedef of unsigned char, used for simple booleans. As usual, */
- /* values 1 and~0 represent true and false, respectively. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ * @title:
+ * Basic Data Types
+ *
+ * @abstract:
+ * The basic data types defined by the library.
+ *
+ * @description:
+ * This section contains the basic data types defined by FreeType~2,
+ * ranging from simple scalar types to bitmap descriptors. More
+ * font-specific structures are defined in a different section.
+ *
+ * @order:
+ * FT_Byte
+ * FT_Bytes
+ * FT_Char
+ * FT_Int
+ * FT_UInt
+ * FT_Int16
+ * FT_UInt16
+ * FT_Int32
+ * FT_UInt32
+ * FT_Int64
+ * FT_UInt64
+ * FT_Short
+ * FT_UShort
+ * FT_Long
+ * FT_ULong
+ * FT_Bool
+ * FT_Offset
+ * FT_PtrDist
+ * FT_String
+ * FT_Tag
+ * FT_Error
+ * FT_Fixed
+ * FT_Pointer
+ * FT_Pos
+ * FT_Vector
+ * FT_BBox
+ * FT_Matrix
+ * FT_FWord
+ * FT_UFWord
+ * FT_F2Dot14
+ * FT_UnitVector
+ * FT_F26Dot6
+ * FT_Data
+ *
+ * FT_MAKE_TAG
+ *
+ * FT_Generic
+ * FT_Generic_Finalizer
+ *
+ * FT_Bitmap
+ * FT_Pixel_Mode
+ * FT_Palette_Mode
+ * FT_Glyph_Format
+ * FT_IMAGE_TAG
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Bool
+ *
+ * @description:
+ * A typedef of unsigned char, used for simple booleans. As usual,
+ * values 1 and~0 represent true and false, respectively.
+ */
typedef unsigned char FT_Bool;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_FWord */
- /* */
- /* <Description> */
- /* A signed 16-bit integer used to store a distance in original font */
- /* units. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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). */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Short
+ *
+ * @description:
+ * A typedef for signed short.
+ */
typedef signed short FT_Short;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UShort */
- /* */
- /* <Description> */
- /* A typedef for unsigned 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Long
+ *
+ * @description:
+ * A typedef for signed long.
+ */
typedef signed long FT_Long;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_ULong */
- /* */
- /* <Description> */
- /* A typedef for unsigned long. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_ULong
+ *
+ * @description:
+ * A typedef for unsigned long.
+ */
typedef unsigned long FT_ULong;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_F2Dot14 */
- /* */
- /* <Description> */
- /* A signed 2.14 fixed-point type used for unit vectors. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_F2Dot14
+ *
+ * @description:
+ * A signed 2.14 fixed-point type used for unit vectors.
+ */
typedef signed short FT_F2Dot14;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_F26Dot6 */
- /* */
- /* <Description> */
- /* A signed 26.6 fixed-point type used for vectorial pixel */
- /* coordinates. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_F26Dot6
+ *
+ * @description:
+ * A signed 26.6 fixed-point type used for vectorial pixel coordinates.
+ */
typedef signed long FT_F26Dot6;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Fixed */
- /* */
- /* <Description> */
- /* This type is used to store 16.16 fixed-point values, like scaling */
- /* values or matrix coefficients. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Fixed
+ *
+ * @description:
+ * This type is used to store 16.16 fixed-point values, like scaling
+ * values or matrix coefficients.
+ */
typedef signed long FT_Fixed;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Error */
- /* */
- /* <Description> */
- /* The FreeType error code type. A value of~0 is always interpreted */
- /* as a successful operation. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -359,29 +360,33 @@ FT_BEGIN_HEADER
} FT_UnitVector;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Matrix */
- /* */
- /* <Description> */
- /* A simple structure used to store a 2x2 matrix. Coefficients are */
- /* in 16.16 fixed-point format. The computation performed is: */
- /* */
- /* { */
- /* x' = x*xx + y*xy */
- /* y' = x*yx + y*yy */
- /* } */
- /* */
- /* <Fields> */
- /* xx :: Matrix coefficient. */
- /* */
- /* xy :: Matrix coefficient. */
- /* */
- /* yx :: Matrix coefficient. */
- /* */
- /* yy :: Matrix coefficient. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Matrix
+ *
+ * @description:
+ * A simple structure used to store a 2x2 matrix. Coefficients are in
+ * 16.16 fixed-point format. The computation performed is:
+ *
+ * ```
+ * x' = x*xx + y*xy
+ * y' = x*yx + y*yy
+ * ```
+ *
+ * @fields:
+ * xx ::
+ * Matrix coefficient.
+ *
+ * xy ::
+ * Matrix coefficient.
+ *
+ * yx ::
+ * Matrix coefficient.
+ *
+ * yy ::
+ * Matrix coefficient.
+ */
typedef struct FT_Matrix_
{
FT_Fixed xx, xy;
@@ -390,19 +395,21 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -411,51 +418,52 @@ FT_BEGIN_HEADER
} FT_Data;
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Generic_Finalizer */
- /* */
- /* <Description> */
- /* Describe a function used to destroy the `client' data of any */
- /* FreeType object. See the description of the @FT_Generic type for */
- /* details of usage. */
- /* */
- /* <Input> */
- /* The address of the FreeType object that is under finalization. */
- /* Its client data is accessed through its `generic' field. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_Generic_Finalizer
+ *
+ * @description:
+ * Describe a function used to destroy the 'client' data of any FreeType
+ * object. See the description of the @FT_Generic type for details of
+ * usage.
+ *
+ * @input:
+ * The address of the FreeType object that is under finalization. Its
+ * client data is accessed through its `generic` field.
+ */
typedef void (*FT_Generic_Finalizer)( void* object );
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Generic */
- /* */
- /* <Description> */
- /* Client applications often need to associate their own data to a */
- /* variety of FreeType core objects. For example, a text layout API */
- /* might want to associate a glyph cache to a given size object. */
- /* */
- /* Some FreeType object contains a `generic' field, of type */
- /* FT_Generic, which usage is left to client applications and font */
- /* servers. */
- /* */
- /* It can be used to store a pointer to client-specific data, as well */
- /* as the address of a `finalizer' function, which will be called by */
- /* FreeType when the object is destroyed (for example, the previous */
- /* client example would put the address of the glyph cache destructor */
- /* in the `finalizer' field). */
- /* */
- /* <Fields> */
- /* data :: A typeless pointer to any client-specified data. This */
- /* field is completely ignored by the FreeType library. */
- /* */
- /* finalizer :: A pointer to a `generic finalizer' function, which */
- /* will be called when the object is destroyed. If this */
- /* field is set to NULL, no code will be called. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Generic
+ *
+ * @description:
+ * Client applications often need to associate their own data to a
+ * variety of FreeType core objects. For example, a text layout API
+ * might want to associate a glyph cache to a given size object.
+ *
+ * Some FreeType object contains a `generic` field, of type `FT_Generic`,
+ * which usage is left to client applications and font servers.
+ *
+ * It can be used to store a pointer to client-specific data, as well as
+ * the address of a 'finalizer' function, which will be called by
+ * FreeType when the object is destroyed (for example, the previous
+ * client example would put the address of the glyph cache destructor in
+ * the `finalizer` field).
+ *
+ * @fields:
+ * data ::
+ * A typeless pointer to any client-specified data. This field is
+ * completely ignored by the FreeType library.
+ *
+ * finalizer ::
+ * A pointer to a 'generic finalizer' function, which will be called
+ * when the object is destroyed. If this field is set to `NULL`, no
+ * code will be called.
+ */
typedef struct FT_Generic_
{
void* data;
@@ -464,19 +472,19 @@ FT_BEGIN_HEADER
} FT_Generic;
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_MAKE_TAG */
- /* */
- /* <Description> */
- /* This macro converts four-letter tags that are used to label */
- /* TrueType tables into an unsigned long, to be used within FreeType. */
- /* */
- /* <Note> */
- /* The produced values *must* be 32-bit integers. Don't redefine */
- /* this macro. */
- /* */
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_MAKE_TAG
+ *
+ * @description:
+ * This macro converts four-letter tags that are used to label TrueType
+ * tables into an unsigned long, to be used within FreeType.
+ *
+ * @note:
+ * The produced values **must** be 32-bit integers. Don't redefine this
+ * macro.
+ */
#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
(FT_Tag) \
( ( (FT_ULong)_x1 << 24 ) | \
@@ -494,53 +502,56 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Section> */
- /* list_processing */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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). */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -550,20 +561,22 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -575,13 +588,13 @@ FT_BEGIN_HEADER
#define FT_IS_EMPTY( list ) ( (list).head == 0 )
-#define FT_BOOL( x ) ( (FT_Bool)( x ) )
+#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) )
/* concatenate C tokens */
#define FT_ERR_XCAT( x, y ) x ## y
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
- /* see `ftmoderr.h' for descriptions of the following macros */
+ /* see `ftmoderr.h` for descriptions of the following macros */
#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
diff --git a/freetype/include/freetype/ftwinfnt.h b/freetype/include/freetype/ftwinfnt.h
index 461c65b7..a2fba903 100644
--- a/freetype/include/freetype/ftwinfnt.h
+++ b/freetype/include/freetype/ftwinfnt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.h */
-/* */
-/* FreeType API for accessing Windows fnt-specific data. */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftwinfnt.h
+ *
+ * FreeType API for accessing Windows fnt-specific data.
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -32,44 +32,43 @@
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * winfnt_fonts
+ *
+ * @title:
+ * Window FNT Files
+ *
+ * @abstract:
+ * Windows FNT-specific API.
+ *
+ * @description:
+ * This section contains the declaration of Windows FNT-specific
+ * functions.
+ *
+ */
- /*************************************************************************
+ /**************************************************************************
*
* @enum:
* FT_WinFNT_ID_XXX
*
* @description:
- * A list of valid values for the `charset' byte in
- * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
- * encodings (except for cp1361) can be found at
- * ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
- * subdirectory. cp1361 is roughly a superset of
- * MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
+ * A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec.
+ * Exact mapping tables for the various 'cpXXXX' encodings (except for
+ * 'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the
+ * `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory. 'cp1361' is roughly a
+ * superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`.
*
* @values:
* FT_WinFNT_ID_DEFAULT ::
- * This is used for font enumeration and font creation as a
- * `don't care' value. Valid font files don't contain this value.
- * When querying for information about the character set of the font
- * that is currently selected into a specified device context, this
- * return value (of the related Windows API) simply denotes failure.
+ * 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.
@@ -80,26 +79,27 @@ FT_BEGIN_HEADER
* FT_WinFNT_ID_OEM ::
* From Michael Poettgen <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 '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 '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.
+ * 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
+ * In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the
+ * second default codepage that most international versions of Windows
+ * have. It is one of the OEM codepages from
*
- * https://msdn.microsoft.com/en-us/goglobal/bb964655,
+ * https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
+ * ,
*
- * 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.
+ * 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.
@@ -112,8 +112,8 @@ FT_BEGIN_HEADER
* ordering and minor deviations).
*
* FT_WinFNT_ID_CP949 ::
- * A superset of Korean Hangul KS~C 5601-1987 (with different
- * ordering and minor deviations).
+ * 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
@@ -173,14 +173,14 @@ FT_BEGIN_HEADER
#define FT_WinFNT_ID_OEM 255
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_WinFNT_HeaderRec */
- /* */
- /* <Description> */
- /* Windows FNT Header info. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_WinFNT_HeaderRec
+ *
+ * @description:
+ * Windows FNT Header info.
+ */
typedef struct FT_WinFNT_HeaderRec_
{
FT_UShort version;
@@ -223,18 +223,18 @@ FT_BEGIN_HEADER
} FT_WinFNT_HeaderRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_WinFNT_Header */
- /* */
- /* <Description> */
- /* A handle to an @FT_WinFNT_HeaderRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @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
@@ -243,10 +243,12 @@ FT_BEGIN_HEADER
* Retrieve a Windows FNT font info header.
*
* @input:
- * face :: A handle to the input face.
+ * face ::
+ * A handle to the input face.
*
* @output:
- * aheader :: The WinFNT header.
+ * aheader ::
+ * The WinFNT header.
*
* @return:
* FreeType error code. 0~means success.
diff --git a/freetype/include/freetype/internal/autohint.h b/freetype/include/freetype/internal/autohint.h
index f4d308f6..f64c28bb 100644
--- a/freetype/include/freetype/internal/autohint.h
+++ b/freetype/include/freetype/internal/autohint.h
@@ -1,73 +1,73 @@
-/***************************************************************************/
-/* */
-/* autohint.h */
-/* */
-/* High-level `autohint' module-specific interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * autohint.h
+ *
+ * High-level 'autohint' module-specific interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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>
@@ -80,27 +80,31 @@ FT_BEGIN_HEADER
typedef struct FT_AutoHinterRec_ *FT_AutoHinter;
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalGetFunc */
- /* */
- /* <Description> */
- /* Retrieve the global hints computed for a given face object. The */
- /* resulting data is dissociated from the face and will survive a */
- /* call to FT_Done_Face(). It must be discarded through the API */
- /* FT_AutoHinter_GlobalDoneFunc(). */
- /* */
- /* <Input> */
- /* hinter :: A handle to the source auto-hinter. */
- /* */
- /* face :: A handle to the source face object. */
- /* */
- /* <Output> */
- /* global_hints :: A typeless pointer to the global hints. */
- /* */
- /* global_len :: The size in bytes of the global hints. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_AutoHinter_GlobalGetFunc
+ *
+ * @description:
+ * Retrieve the global hints computed for a given face object. The
+ * resulting data is dissociated from the face and will survive a call to
+ * FT_Done_Face(). It must be discarded through the API
+ * FT_AutoHinter_GlobalDoneFunc().
+ *
+ * @input:
+ * hinter ::
+ * A handle to the source auto-hinter.
+ *
+ * face ::
+ * A handle to the source face object.
+ *
+ * @output:
+ * global_hints ::
+ * A typeless pointer to the global hints.
+ *
+ * global_len ::
+ * The size in bytes of the global hints.
+ */
typedef void
(*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter,
FT_Face face,
@@ -108,69 +112,76 @@ FT_BEGIN_HEADER
long* global_len );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalDoneFunc */
- /* */
- /* <Description> */
- /* Discard the global hints retrieved through */
- /* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */
- /* are freed from memory. */
- /* */
- /* <Input> */
- /* hinter :: A handle to the auto-hinter module. */
- /* */
- /* global :: A pointer to retrieved global hints to discard. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * FT_AutoHinter_GlobalDoneFunc
+ *
+ * @description:
+ * Discard the global hints retrieved through
+ * FT_AutoHinter_GlobalGetFunc(). This is the only way these hints are
+ * freed from memory.
+ *
+ * @input:
+ * hinter ::
+ * A handle to the auto-hinter module.
+ *
+ * global ::
+ * A pointer to retrieved global hints to discard.
+ */
typedef void
(*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter,
void* global );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalResetFunc */
- /* */
- /* <Description> */
- /* This function is used to recompute the global metrics in a given */
- /* font. This is useful when global font data changes (e.g. Multiple */
- /* Masters fonts where blend coordinates change). */
- /* */
- /* <Input> */
- /* hinter :: A handle to the source auto-hinter. */
- /* */
- /* face :: A handle to the face. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -179,14 +190,14 @@ FT_BEGIN_HEADER
FT_Int32 load_flags );
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_AutoHinter_InterfaceRec */
- /* */
- /* <Description> */
- /* The auto-hinter module's interface. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_AutoHinter_InterfaceRec
+ *
+ * @description:
+ * The auto-hinter module's interface.
+ */
typedef struct FT_AutoHinter_InterfaceRec_
{
FT_AutoHinter_GlobalResetFunc reset_face;
@@ -197,8 +208,6 @@ FT_BEGIN_HEADER
} FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_AUTOHINTER_INTERFACE( \
class_, \
reset_face_, \
@@ -214,27 +223,6 @@ FT_BEGIN_HEADER
load_glyph_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_AUTOHINTER_INTERFACE( \
- class_, \
- reset_face_, \
- get_global_hints_, \
- done_global_hints_, \
- load_glyph_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_AutoHinter_InterfaceRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->reset_face = reset_face_; \
- clazz->get_global_hints = get_global_hints_; \
- clazz->done_global_hints = done_global_hints_; \
- clazz->load_glyph = load_glyph_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/cffotypes.h b/freetype/include/freetype/internal/cffotypes.h
index 57e7591d..b26893ea 100644
--- a/freetype/include/freetype/internal/cffotypes.h
+++ b/freetype/include/freetype/internal/cffotypes.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffotypes.h */
-/* */
-/* Basic OpenType/CFF object type definitions (specification). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffotypes.h
+ *
+ * Basic OpenType/CFF object type definitions (specification).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef CFFOTYPES_H_
@@ -33,14 +33,14 @@ FT_BEGIN_HEADER
typedef TT_Face CFF_Face;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Size */
- /* */
- /* <Description> */
- /* A handle to an OpenType size object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * CFF_Size
+ *
+ * @description:
+ * A handle to an OpenType size object.
+ */
typedef struct CFF_SizeRec_
{
FT_SizeRec root;
@@ -49,14 +49,14 @@ FT_BEGIN_HEADER
} CFF_SizeRec, *CFF_Size;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to an OpenType glyph slot object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * CFF_GlyphSlot
+ *
+ * @description:
+ * A handle to an OpenType glyph slot object.
+ */
typedef struct CFF_GlyphSlotRec_
{
FT_GlyphSlotRec root;
@@ -70,14 +70,14 @@ FT_BEGIN_HEADER
} CFF_GlyphSlotRec, *CFF_GlyphSlot;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Internal */
- /* */
- /* <Description> */
- /* The interface to the `internal' field of `FT_Size'. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * CFF_Internal
+ *
+ * @description:
+ * The interface to the 'internal' field of `FT_Size`.
+ */
typedef struct CFF_InternalRec_
{
PSH_Globals topfont;
@@ -86,10 +86,10 @@ FT_BEGIN_HEADER
} CFF_InternalRec, *CFF_Internal;
- /*************************************************************************/
- /* */
- /* Subglyph transformation record. */
- /* */
+ /**************************************************************************
+ *
+ * Subglyph transformation record.
+ */
typedef struct CFF_Transform_
{
FT_Fixed xx, xy; /* transformation matrix coefficients */
diff --git a/freetype/include/freetype/internal/cfftypes.h b/freetype/include/freetype/internal/cfftypes.h
index 7c07e1a3..2fc905ec 100644
--- a/freetype/include/freetype/internal/cfftypes.h
+++ b/freetype/include/freetype/internal/cfftypes.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* cfftypes.h */
-/* */
-/* Basic OpenType/CFF type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cfftypes.h
+ *
+ * Basic OpenType/CFF type definitions and interface (specification
+ * only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -33,34 +33,39 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
diff --git a/freetype/include/freetype/internal/ftcalc.h b/freetype/include/freetype/internal/ftcalc.h
index 818a8123..1811fcd1 100644
--- a/freetype/include/freetype/internal/ftcalc.h
+++ b/freetype/include/freetype/internal/ftcalc.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcalc.h */
-/* */
-/* Arithmetic computations (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcalc.h
+ *
+ * Arithmetic computations (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,11 +27,11 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* FT_MulDiv() and FT_MulFix() are declared in freetype.h. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * FT_MulDiv() and FT_MulFix() are declared in freetype.h.
+ *
+ */
#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
/* Provide assembler fragments for performance-critical functions. */
@@ -246,29 +246,32 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulDiv_No_Round */
- /* */
- /* <Description> */
- /* A very simple function used to perform the computation `(a*b)/c' */
- /* (without rounding) with maximum accuracy (it uses a 64-bit */
- /* intermediate integer whenever necessary). */
- /* */
- /* This function isn't necessarily as fast as some processor specific */
- /* operations, but is at least completely portable. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* b :: The second multiplier. */
- /* c :: The divisor. */
- /* */
- /* <Return> */
- /* The result of `(a*b)/c'. This function never traps when trying to */
- /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
- /* on the signs of `a' and `b'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_MulDiv_No_Round
+ *
+ * @description:
+ * A very simple function used to perform the computation '(a*b)/c'
+ * (without rounding) with maximum accuracy (it uses a 64-bit
+ * intermediate integer whenever necessary).
+ *
+ * This function isn't necessarily as fast as some processor-specific
+ * operations, but is at least completely portable.
+ *
+ * @input:
+ * a ::
+ * The first multiplier.
+ * b ::
+ * The second multiplier.
+ * c ::
+ * The divisor.
+ *
+ * @return:
+ * The result of '(a*b)/c'. This function never traps when trying to
+ * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on
+ * the signs of 'a' and 'b'.
+ */
FT_BASE( FT_Long )
FT_MulDiv_No_Round( FT_Long a,
FT_Long b,
@@ -276,12 +279,11 @@ FT_BEGIN_HEADER
/*
- * 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'.
+ * 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,
@@ -290,8 +292,23 @@ FT_BEGIN_HEADER
/*
- * A variant of FT_Vector_Transform. See comments for
- * FT_Matrix_Multiply_Scaled.
+ * Check a matrix. If the transformation would lead to extreme shear or
+ * extreme scaling, for example, return 0. If everything is OK, return 1.
+ *
+ * Based on geometric considerations we use the following inequality to
+ * identify a degenerate matrix.
+ *
+ * 50 * abs(xx*yy - xy*yx) < xx^2 + xy^2 + yx^2 + yy^2
+ *
+ * Value 50 is heuristic.
+ */
+ FT_BASE( FT_Bool )
+ FT_Matrix_Check( const FT_Matrix* matrix );
+
+
+ /*
+ * A variant of FT_Vector_Transform. See comments for
+ * FT_Matrix_Multiply_Scaled.
*/
FT_BASE( void )
FT_Vector_Transform_Scaled( FT_Vector* vector,
@@ -300,22 +317,22 @@ FT_BEGIN_HEADER
/*
- * This function normalizes a vector and returns its original length.
- * The normalized vector is a 16.16 fixed-point unit vector with length
- * close to 0x10000. The accuracy of the returned length is limited to
- * 16 bits also. The function utilizes quick inverse square root
- * approximation without divisions and square roots relying on Newton's
- * iterations instead.
+ * This function normalizes a vector and returns its original length. The
+ * normalized vector is a 16.16 fixed-point unit vector with length close
+ * to 0x10000. The accuracy of the returned length is limited to 16 bits
+ * also. The function utilizes quick inverse square root approximation
+ * without divisions and square roots relying on Newton's iterations
+ * instead.
*/
FT_BASE( FT_UInt32 )
FT_Vector_NormLen( FT_Vector* vector );
/*
- * Return -1, 0, or +1, depending on the orientation of a given corner.
- * We use the Cartesian coordinate system, with positive vertical values
- * going upwards. The function returns +1 if the corner turns to the
- * left, -1 to the right, and 0 for undecidable cases.
+ * 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,
@@ -325,9 +342,9 @@ FT_BEGIN_HEADER
/*
- * Return TRUE if a corner is flat or nearly flat. This is equivalent to
- * saying that the corner point is close to its neighbors, or inside an
- * ellipse defined by the neighbor focal points to be more precise.
+ * Return TRUE if a corner is flat or nearly flat. This is equivalent to
+ * saying that the corner point is close to its neighbors, or inside an
+ * ellipse defined by the neighbor focal points to be more precise.
*/
FT_BASE( FT_Int )
ft_corner_is_flat( FT_Pos in_x,
@@ -337,10 +354,11 @@ FT_BEGIN_HEADER
/*
- * Return the most significant bit index.
+ * Return the most significant bit index.
*/
#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
+
#if defined( __GNUC__ ) && \
( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) )
@@ -352,9 +370,34 @@ FT_BEGIN_HEADER
#define FT_MSB( x ) ( 31 - __builtin_clzl( x ) )
+#endif /* __GNUC__ */
+
+
+#elif defined( _MSC_VER ) && ( _MSC_VER >= 1400 )
+
+#if FT_SIZEOF_INT == 4
+
+#include <intrin.h>
+#pragma intrinsic( _BitScanReverse )
+
+ static __inline FT_Int32
+ FT_MSB_i386( FT_UInt32 x )
+ {
+ unsigned long where;
+
+
+ _BitScanReverse( &where, x );
+
+ return (FT_Int32)where;
+ }
+
+#define FT_MSB( x ) ( FT_MSB_i386( x ) )
+
#endif
-#endif /* __GNUC__ */
+#endif /* _MSC_VER */
+
+
#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
#ifndef FT_MSB
@@ -366,8 +409,8 @@ FT_BEGIN_HEADER
/*
- * Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses
- * two fixed-point arguments instead.
+ * Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses
+ * two fixed-point arguments instead.
*/
FT_BASE( FT_Fixed )
FT_Hypot( FT_Fixed x,
@@ -376,23 +419,24 @@ FT_BEGIN_HEADER
#if 0
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_SqrtFixed */
- /* */
- /* <Description> */
- /* Computes the square root of a 16.16 fixed-point value. */
- /* */
- /* <Input> */
- /* x :: The value to compute the root for. */
- /* */
- /* <Return> */
- /* The result of `sqrt(x)'. */
- /* */
- /* <Note> */
- /* This function is not very fast. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_SqrtFixed
+ *
+ * @description:
+ * Computes the square root of a 16.16 fixed-point value.
+ *
+ * @input:
+ * x ::
+ * The value to compute the root for.
+ *
+ * @return:
+ * The result of 'sqrt(x)'.
+ *
+ * @note:
+ * This function is not very fast.
+ */
FT_BASE( FT_Int32 )
FT_SqrtFixed( FT_Int32 x );
@@ -409,14 +453,23 @@ FT_BEGIN_HEADER
: ( -( ( 32 - (x) ) & -64 ) ) )
/*
- * The following macros have two purposes.
+ * The following macros have two purposes.
*
- * . Tag places where overflow is expected and harmless.
+ * - Tag places where overflow is expected and harmless.
*
- * . Avoid run-time sanitizer errors.
+ * - Avoid run-time sanitizer errors.
*
- * Use with care!
+ * Use with care!
*/
+#define ADD_INT( a, b ) \
+ (FT_Int)( (FT_UInt)(a) + (FT_UInt)(b) )
+#define SUB_INT( a, b ) \
+ (FT_Int)( (FT_UInt)(a) - (FT_UInt)(b) )
+#define MUL_INT( a, b ) \
+ (FT_Int)( (FT_UInt)(a) * (FT_UInt)(b) )
+#define NEG_INT( a ) \
+ (FT_Int)( (FT_UInt)0 - (FT_UInt)(a) )
+
#define ADD_LONG( a, b ) \
(FT_Long)( (FT_ULong)(a) + (FT_ULong)(b) )
#define SUB_LONG( a, b ) \
@@ -435,6 +488,19 @@ FT_BEGIN_HEADER
#define NEG_INT32( a ) \
(FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
+#ifdef FT_LONG64
+
+#define ADD_INT64( a, b ) \
+ (FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) )
+#define SUB_INT64( a, b ) \
+ (FT_Int64)( (FT_UInt64)(a) - (FT_UInt64)(b) )
+#define MUL_INT64( a, b ) \
+ (FT_Int64)( (FT_UInt64)(a) * (FT_UInt64)(b) )
+#define NEG_INT64( a ) \
+ (FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) )
+
+#endif /* FT_LONG64 */
+
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/ftdebug.h b/freetype/include/freetype/internal/ftdebug.h
index 292a4eed..54a9673a 100644
--- a/freetype/include/freetype/internal/ftdebug.h
+++ b/freetype/include/freetype/internal/ftdebug.h
@@ -1,24 +1,24 @@
-/***************************************************************************/
-/* */
-/* ftdebug.h */
-/* */
-/* Debugging and logging component (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.h
+ *
+ * Debugging and logging component (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -42,12 +42,12 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /* */
- /* Define the trace enums as well as the trace levels array when they */
- /* are needed. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Define the trace enums as well as the trace levels array when they are
+ * needed.
+ *
+ */
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -62,32 +62,37 @@ FT_BEGIN_HEADER
} FT_Trace;
- /* defining the array of trace levels, provided by `src/base/ftdebug.c' */
- extern int ft_trace_levels[trace_count];
+ /* a pointer to the array of trace levels, */
+ /* provided by `src/base/ftdebug.c' */
+ extern int* ft_trace_levels;
#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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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; \
+ /* we need two macros here to make cpp expand `FT_COMPONENT' */
+#define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x )
+#define FT_TRACE_COMP_( x ) trace_ ## x
+
+#define FT_TRACE( level, varformat ) \
+ do \
+ { \
+ if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
+ FT_Message varformat; \
} while ( 0 )
#else /* !FT_DEBUG_LEVEL_TRACE */
@@ -97,62 +102,85 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 is not
+ * built with FT_DEBUG_LEVEL_TRACE definition.
+ *
+ * @note:
+ * Use @FT_Trace_Get_Count to get the number of available trace
+ * components.
+ */
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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Trace_Disable
+ *
+ * @description:
+ * Switch off tracing temporarily. It can be activated again with
+ * @FT_Trace_Enable.
+ */
+ FT_BASE( void )
+ FT_Trace_Disable( void );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Trace_Enable
+ *
+ * @description:
+ * Activate tracing. Use it after tracing has been switched off with
+ * @FT_Trace_Disable.
+ */
+ FT_BASE( void )
+ FT_Trace_Enable( void );
+
+
+ /**************************************************************************
+ *
+ * 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 )
@@ -164,13 +192,13 @@ FT_BEGIN_HEADER
#define FT_TRACE7( varformat ) FT_TRACE( 7, varformat )
- /*************************************************************************/
- /* */
- /* Define the FT_ERROR macro. */
- /* */
- /* Output of this macro is sent to stderr. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Define the FT_ERROR macro.
+ *
+ * Output of this macro is sent to stderr.
+ *
+ */
#ifdef FT_DEBUG_LEVEL_ERROR
@@ -183,12 +211,12 @@ FT_BEGIN_HEADER
#endif /* !FT_DEBUG_LEVEL_ERROR */
- /*************************************************************************/
- /* */
- /* Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw' */
- /* makes it possible to easily set a breakpoint at this function. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw` makes
+ * it possible to easily set a breakpoint at this function.
+ *
+ */
#ifdef FT_DEBUG_LEVEL_ERROR
@@ -215,11 +243,11 @@ FT_BEGIN_HEADER
#endif /* !FT_DEBUG_LEVEL_ERROR */
- /*************************************************************************/
- /* */
- /* Define `FT_Message' and `FT_Panic' when needed. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Define `FT_Message` and `FT_Panic` when needed.
+ *
+ */
#ifdef FT_DEBUG_LEVEL_ERROR
diff --git a/freetype/include/freetype/internal/ftdrv.h b/freetype/include/freetype/internal/ftdrv.h
index 58dd35a9..09e846e1 100644
--- a/freetype/include/freetype/internal/ftdrv.h
+++ b/freetype/include/freetype/internal/ftdrv.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftdrv.h */
-/* */
-/* FreeType internal font driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdrv.h
+ *
+ * FreeType internal font driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTDRV_H_
@@ -87,73 +87,80 @@ FT_BEGIN_HEADER
FT_Fixed* advances );
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Driver_ClassRec */
- /* */
- /* <Description> */
- /* The font driver class. This structure mostly contains pointers to */
- /* driver methods. */
- /* */
- /* <Fields> */
- /* root :: The parent module. */
- /* */
- /* face_object_size :: The size of a face object in bytes. */
- /* */
- /* size_object_size :: The size of a size object in bytes. */
- /* */
- /* slot_object_size :: The size of a glyph object in bytes. */
- /* */
- /* init_face :: The format-specific face constructor. */
- /* */
- /* done_face :: The format-specific face destructor. */
- /* */
- /* init_size :: The format-specific size constructor. */
- /* */
- /* done_size :: The format-specific size destructor. */
- /* */
- /* init_slot :: The format-specific slot constructor. */
- /* */
- /* done_slot :: The format-specific slot destructor. */
- /* */
- /* */
- /* load_glyph :: A function handle to load a glyph to a slot. */
- /* This field is mandatory! */
- /* */
- /* get_kerning :: A function handle to return the unscaled */
- /* kerning for a given pair of glyphs. Can be */
- /* set to 0 if the format doesn't support */
- /* kerning. */
- /* */
- /* attach_file :: This function handle is used to read */
- /* additional data for a face from another */
- /* file/stream. For example, this can be used to */
- /* add data from AFM or PFM files on a Type 1 */
- /* face, or a CIDMap on a CID-keyed face. */
- /* */
- /* get_advances :: A function handle used to return advance */
- /* widths of `count' glyphs (in font units), */
- /* starting at `first'. The `vertical' flag must */
- /* be set to get vertical advance heights. The */
- /* `advances' buffer is caller-allocated. */
- /* The idea of this function is to be able to */
- /* perform device-independent text layout without */
- /* loading a single glyph image. */
- /* */
- /* request_size :: A handle to a function used to request the new */
- /* character size. Can be set to 0 if the */
- /* scaling done in the base layer suffices. */
- /* */
- /* select_size :: A handle to a function used to select a new */
- /* fixed size. It is used only if */
- /* @FT_FACE_FLAG_FIXED_SIZES is set. Can be set */
- /* to 0 if the scaling done in the base layer */
- /* suffices. */
- /* <Note> */
- /* Most function pointers, with the exception of `load_glyph', can be */
- /* set to 0 to indicate a default behaviour. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Driver_ClassRec
+ *
+ * @description:
+ * The font driver class. This structure mostly contains pointers to
+ * driver methods.
+ *
+ * @fields:
+ * root ::
+ * The parent module.
+ *
+ * face_object_size ::
+ * The size of a face object in bytes.
+ *
+ * size_object_size ::
+ * The size of a size object in bytes.
+ *
+ * slot_object_size ::
+ * The size of a glyph object in bytes.
+ *
+ * init_face ::
+ * The format-specific face constructor.
+ *
+ * done_face ::
+ * The format-specific face destructor.
+ *
+ * init_size ::
+ * The format-specific size constructor.
+ *
+ * done_size ::
+ * The format-specific size destructor.
+ *
+ * init_slot ::
+ * The format-specific slot constructor.
+ *
+ * done_slot ::
+ * The format-specific slot destructor.
+ *
+ *
+ * load_glyph ::
+ * A function handle to load a glyph to a slot. This field is
+ * mandatory!
+ *
+ * get_kerning ::
+ * A function handle to return the unscaled kerning for a given pair of
+ * glyphs. Can be set to 0 if the format doesn't support kerning.
+ *
+ * attach_file ::
+ * This function handle is used to read additional data for a face from
+ * another file/stream. For example, this can be used to add data from
+ * AFM or PFM files on a Type 1 face, or a CIDMap on a CID-keyed face.
+ *
+ * get_advances ::
+ * A function handle used to return advance widths of 'count' glyphs
+ * (in font units), starting at 'first'. The 'vertical' flag must be
+ * set to get vertical advance heights. The 'advances' buffer is
+ * caller-allocated. The idea of this function is to be able to
+ * perform device-independent text layout without loading a single
+ * glyph image.
+ *
+ * request_size ::
+ * A handle to a function used to request the new character size. Can
+ * be set to 0 if the scaling done in the base layer suffices.
+ *
+ * select_size ::
+ * A handle to a function used to select a new fixed size. It is used
+ * only if @FT_FACE_FLAG_FIXED_SIZES is set. Can be set to 0 if the
+ * scaling done in the base layer suffices.
+ * @note:
+ * Most function pointers, with the exception of `load_glyph`, can be set
+ * to 0 to indicate a default behaviour.
+ */
typedef struct FT_Driver_ClassRec_
{
FT_Module_Class root;
@@ -184,45 +191,28 @@ FT_BEGIN_HEADER
} FT_Driver_ClassRec, *FT_Driver_Class;
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_DRIVER */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of an FT_Driver_ClassRec */
- /* struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_DRIVER */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Driver_ClassRec struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function has to be */
- /* called with a pointer where the allocated structure is returned. */
- /* And when it is no longer needed a `destroy' function needs to be */
- /* called to release that allocation. */
- /* */
- /* `ftinit.c' (ft_create_default_module_classes) already contains a */
- /* mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by driver definition calling `FT_DEFINE_DRIVER' in following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro is */
- /* used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DECLARE_DRIVER
+ *
+ * @description:
+ * Used to create a forward declaration of an FT_Driver_ClassRec struct
+ * instance.
+ *
+ * @macro:
+ * FT_DEFINE_DRIVER
+ *
+ * @description:
+ * Used to initialize an instance of FT_Driver_ClassRec struct.
+ *
+ * `ftinit.c` (ft_create_default_module_classes) already contains a
+ * mechanism to call these functions for the default modules described in
+ * `ftmodule.h`.
+ *
+ * The struct will be allocated in the global scope (or the scope where
+ * the macro is used).
+ */
#define FT_DECLARE_DRIVER( class_ ) \
FT_CALLBACK_TABLE \
const FT_Driver_ClassRec class_;
@@ -289,108 +279,6 @@ FT_BEGIN_HEADER
select_size_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_DRIVER( class_ ) FT_DECLARE_MODULE( class_ )
-
-#define FT_DEFINE_DRIVER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- init_face_, \
- done_face_, \
- init_size_, \
- done_size_, \
- init_slot_, \
- done_slot_, \
- load_glyph_, \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- request_size_, \
- select_size_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- FT_Driver_Class dclazz = (FT_Driver_Class)clazz; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( dclazz ) \
- FT_FREE( dclazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Driver_Class clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- clazz->face_object_size = face_object_size_; \
- clazz->size_object_size = size_object_size_; \
- clazz->slot_object_size = slot_object_size_; \
- \
- clazz->init_face = init_face_; \
- clazz->done_face = done_face_; \
- \
- clazz->init_size = init_size_; \
- clazz->done_size = done_size_; \
- \
- clazz->init_slot = init_slot_; \
- clazz->done_slot = done_slot_; \
- \
- clazz->load_glyph = load_glyph_; \
- \
- clazz->get_kerning = get_kerning_; \
- clazz->attach_file = attach_file_; \
- clazz->get_advances = get_advances_; \
- \
- clazz->request_size = request_size_; \
- clazz->select_size = select_size_; \
- \
- *output_class = (FT_Module_Class*)clazz; \
- \
- return FT_Err_Ok; \
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/ftgloadr.h b/freetype/include/freetype/internal/ftgloadr.h
index a002fdbf..770871d8 100644
--- a/freetype/include/freetype/internal/ftgloadr.h
+++ b/freetype/include/freetype/internal/ftgloadr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.h */
-/* */
-/* The FreeType glyph loader (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgloadr.h
+ *
+ * The FreeType glyph loader (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,15 +27,15 @@
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). */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_GlyphLoader
+ *
+ * @description:
+ * The glyph loader is an internal object used to load several glyphs
+ * together (for example, in the case of composites).
+ */
typedef struct FT_SubGlyphRec_
{
FT_Int index;
@@ -138,11 +138,6 @@ FT_BEGIN_HEADER
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 );
-
/* */
diff --git a/freetype/include/freetype/internal/fthash.h b/freetype/include/freetype/internal/fthash.h
index f22f9d5d..24918804 100644
--- a/freetype/include/freetype/internal/fthash.h
+++ b/freetype/include/freetype/internal/fthash.h
@@ -1,10 +1,10 @@
-/***************************************************************************/
-/* */
-/* fthash.h */
-/* */
-/* Hashing functions (specification). */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fthash.h
+ *
+ * Hashing functions (specification).
+ *
+ */
/*
* Copyright 2000 Computing Research Labs, New Mexico State University
@@ -30,13 +30,13 @@
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
- /*************************************************************************/
- /* */
- /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
- /* */
- /* taken from Mark Leisher's xmbdfed package */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50
+ *
+ * taken from Mark Leisher's xmbdfed package
+ *
+ */
#ifndef FTHASH_H_
diff --git a/freetype/include/freetype/internal/ftmemory.h b/freetype/include/freetype/internal/ftmemory.h
index 054eaec3..78bd3bc2 100644
--- a/freetype/include/freetype/internal/ftmemory.h
+++ b/freetype/include/freetype/internal/ftmemory.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftmemory.h */
-/* */
-/* The FreeType memory management macros (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftmemory.h
+ *
+ * The FreeType memory management macros (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,16 +28,16 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -58,9 +58,9 @@ FT_BEGIN_HEADER
/*
- * C++ refuses to handle statements like p = (void*)anything, with `p' a
- * typed pointer. Since we don't have a `typeof' operator in standard
- * C++, we have to use a template to emulate it.
+ * C++ refuses to handle statements like p = (void*)anything, with `p' a
+ * typed pointer. Since we don't have a `typeof' operator in standard C++,
+ * we have to use a template to emulate it.
*/
#ifdef __cplusplus
@@ -107,8 +107,8 @@ extern "C++"
/*
- * The allocation functions return a pointer, and the error code
- * is written to through the `p_error' parameter.
+ * The allocation functions return a pointer, and the error code is written
+ * to through the `p_error' parameter.
*/
/* The `q' variants of the functions below (`q' for `quick') don't fill */
@@ -253,20 +253,19 @@ extern "C++"
/*
- * Return the maximum number of addressable elements in an array.
- * We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
- * any problems.
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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, \
diff --git a/freetype/include/freetype/internal/ftobjs.h b/freetype/include/freetype/internal/ftobjs.h
index 1c3c6ad4..0c1d3e5b 100644
--- a/freetype/include/freetype/internal/ftobjs.h
+++ b/freetype/include/freetype/internal/ftobjs.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* ftobjs.h */
-/* */
-/* The FreeType private base classes (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftobjs.h
+ *
+ * The FreeType private base classes (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -35,7 +35,6 @@
#include FT_INTERNAL_DRIVER_H
#include FT_INTERNAL_AUTOHINT_H
#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_PIC_H
#include FT_INTERNAL_CALC_H
#ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -46,10 +45,10 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* Some generic definitions. */
- /* */
+ /**************************************************************************
+ *
+ * Some generic definitions.
+ */
#ifndef TRUE
#define TRUE 1
#endif
@@ -63,20 +62,20 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The min and max functions missing in C. As usual, be careful not to
+ * write things like FT_MIN( a++, b++ ) to avoid side effects.
+ */
#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) )
#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) )
/*
- * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
- * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
- * largest error less than 7% compared to the exact value.
+ * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min' algorithm.
+ * We use alpha = 1, beta = 3/8, giving us results with a largest error
+ * less than 7% compared to the exact value.
*/
#define FT_HYPOT( x, y ) \
( x = FT_ABS( x ), \
@@ -111,9 +110,8 @@ FT_BEGIN_HEADER
/*
- * character classification functions -- since these are used to parse
- * font files, we must not use those in <ctypes.h> which are
- * locale-dependent
+ * 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 )
@@ -187,7 +185,7 @@ FT_BEGIN_HEADER
FT_UInt32 char_code,
FT_UInt32 variant_selector );
- typedef FT_Bool
+ typedef FT_Int
(*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap,
FT_UInt32 char_code,
FT_UInt32 variant_selector );
@@ -228,8 +226,6 @@ FT_BEGIN_HEADER
} FT_CMap_ClassRec;
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DECLARE_CMAP_CLASS( class_ ) \
FT_CALLBACK_TABLE const FT_CMap_ClassRec class_;
@@ -260,45 +256,6 @@ FT_BEGIN_HEADER
variantchar_list_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_CMAP_CLASS( class_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_CMap_ClassRec* clazz );
-
-#define FT_DEFINE_CMAP_CLASS( \
- class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_CMap_ClassRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->size = size_; \
- clazz->init = init_; \
- clazz->done = done_; \
- clazz->char_index = char_index_; \
- clazz->char_next = char_next_; \
- clazz->char_var_index = char_var_index_; \
- clazz->char_var_default = char_var_default_; \
- clazz->variant_list = variant_list_; \
- clazz->charvariant_list = charvariant_list_; \
- clazz->variantchar_list = variantchar_list_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* create a new charmap and add it to charmap->face */
FT_BASE( FT_Error )
@@ -312,95 +269,91 @@ FT_BEGIN_HEADER
FT_CMap_Done( FT_CMap cmap );
- /* adds LCD padding to Min and Max boundaries */
+ /* add LCD padding to CBox */
FT_BASE( void )
- ft_lcd_padding( FT_Pos* Min,
- FT_Pos* Max,
- FT_GlyphSlot slot );
+ ft_lcd_padding( FT_BBox* cbox,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode );
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
- FT_Render_Mode render_mode,
FT_Byte* weights );
/* This is the default LCD filter, an in-place, 5-tap FIR filter. */
FT_BASE( void )
ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
FT_LcdFiveTapFilter weights );
#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Face_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_Face */
- /* object. These fields may change between different releases of */
- /* FreeType. */
- /* */
- /* <Fields> */
- /* max_points :: */
- /* The maximum number of points used to store the vectorial outline */
- /* of any glyph in this face. If this value cannot be known in */
- /* advance, or if the face isn't scalable, this should be set to 0. */
- /* Only relevant for scalable formats. */
- /* */
- /* max_contours :: */
- /* The maximum number of contours used to store the vectorial */
- /* outline of any glyph in this face. If this value cannot be */
- /* known in advance, or if the face isn't scalable, this should be */
- /* set to 0. Only relevant for scalable formats. */
- /* */
- /* transform_matrix :: */
- /* A 2x2 matrix of 16.16 coefficients used to transform glyph */
- /* outlines after they are loaded from the font. Only used by the */
- /* convenience functions. */
- /* */
- /* transform_delta :: */
- /* A translation vector used to transform glyph outlines after they */
- /* are loaded from the font. Only used by the convenience */
- /* functions. */
- /* */
- /* transform_flags :: */
- /* Some flags used to classify the transform. Only used by the */
- /* convenience functions. */
- /* */
- /* services :: */
- /* A cache for frequently used services. It should be only */
- /* accessed with the macro `FT_FACE_LOOKUP_SERVICE'. */
- /* */
- /* incremental_interface :: */
- /* If non-null, the interface through which glyph data and metrics */
- /* are loaded incrementally for faces that do not provide all of */
- /* this data when first opened. This field exists only if */
- /* @FT_CONFIG_OPTION_INCREMENTAL is defined. */
- /* */
- /* no_stem_darkening :: */
- /* Overrides the module-level default, see @stem-darkening[cff], */
- /* for example. FALSE and TRUE toggle stem darkening on and off, */
- /* respectively, value~-1 means to use the module/driver default. */
- /* */
- /* random_seed :: */
- /* If positive, override the seed value for the CFF `random' */
- /* operator. Value~0 means to use the font's value. Value~-1 */
- /* means to use the CFF driver's default. */
- /* */
- /* lcd_weights :: */
- /* lcd_filter_func :: */
- /* If subpixel rendering is activated, the LCD filtering weights */
- /* and callback function. */
- /* */
- /* refcount :: */
- /* A counter initialized to~1 at the time an @FT_Face structure is */
- /* created. @FT_Reference_Face increments this counter, and */
- /* @FT_Done_Face only destroys a face if the counter is~1, */
- /* otherwise it simply decrements it. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Face_InternalRec
+ *
+ * @description:
+ * This structure contains the internal fields of each FT_Face object.
+ * These fields may change between different releases of FreeType.
+ *
+ * @fields:
+ * max_points ::
+ * The maximum number of points used to store the vectorial outline of
+ * any glyph in this face. If this value cannot be known in advance,
+ * or if the face isn't scalable, this should be set to 0. Only
+ * relevant for scalable formats.
+ *
+ * max_contours ::
+ * The maximum number of contours used to store the vectorial outline
+ * of any glyph in this face. If this value cannot be known in
+ * advance, or if the face isn't scalable, this should be set to 0.
+ * Only relevant for scalable formats.
+ *
+ * transform_matrix ::
+ * A 2x2 matrix of 16.16 coefficients used to transform glyph outlines
+ * after they are loaded from the font. Only used by the convenience
+ * functions.
+ *
+ * transform_delta ::
+ * A translation vector used to transform glyph outlines after they are
+ * loaded from the font. Only used by the convenience functions.
+ *
+ * transform_flags ::
+ * Some flags used to classify the transform. Only used by the
+ * convenience functions.
+ *
+ * services ::
+ * A cache for frequently used services. It should be only accessed
+ * with the macro `FT_FACE_LOOKUP_SERVICE`.
+ *
+ * incremental_interface ::
+ * If non-null, the interface through which glyph data and metrics are
+ * loaded incrementally for faces that do not provide all of this data
+ * when first opened. This field exists only if
+ * @FT_CONFIG_OPTION_INCREMENTAL is defined.
+ *
+ * no_stem_darkening ::
+ * Overrides the module-level default, see @stem-darkening[cff], for
+ * example. FALSE and TRUE toggle stem darkening on and off,
+ * respectively, value~-1 means to use the module/driver default.
+ *
+ * random_seed ::
+ * If positive, override the seed value for the CFF 'random' operator.
+ * Value~0 means to use the font's value. Value~-1 means to use the
+ * CFF driver's default.
+ *
+ * lcd_weights ::
+ * lcd_filter_func ::
+ * These fields specify the LCD filtering weights and callback function
+ * for ClearType-style subpixel rendering.
+ *
+ * refcount ::
+ * A counter initialized to~1 at the time an @FT_Face structure is
+ * created. @FT_Reference_Face increments this counter, and
+ * @FT_Done_Face only destroys a face if the counter is~1, otherwise it
+ * simply decrements it.
+ */
typedef struct FT_Face_InternalRec_
{
FT_Matrix transform_matrix;
@@ -426,39 +379,44 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ *
+ * load_flags ::
+ * The load flags passed as an argument to @FT_Load_Glyph while
+ * initializing the glyph slot.
+ */
#define FT_GLYPH_OWN_BITMAP 0x1U
@@ -471,26 +429,30 @@ FT_BEGIN_HEADER
FT_Vector glyph_delta;
void* glyph_hints;
+ FT_Int32 load_flags;
+
} FT_GlyphSlot_InternalRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_Size */
- /* object. */
- /* */
- /* <Fields> */
- /* module_data :: Data specific to a driver module. */
- /* */
- /* autohint_mode :: The used auto-hinting mode. */
- /* */
- /* autohint_metrics :: Metrics used by the auto-hinter. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Size_InternalRec
+ *
+ * @description:
+ * This structure contains the internal fields of each FT_Size object.
+ *
+ * @fields:
+ * module_data ::
+ * Data specific to a driver module.
+ *
+ * autohint_mode ::
+ * The used auto-hinting mode.
+ *
+ * autohint_metrics ::
+ * Metrics used by the auto-hinter.
+ *
+ */
typedef struct FT_Size_InternalRec_
{
@@ -515,21 +477,24 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_ModuleRec
+ *
+ * @description:
+ * A module object instance.
+ *
+ * @fields:
+ * clazz ::
+ * A pointer to the module's class.
+ *
+ * library ::
+ * A handle to the parent library object.
+ *
+ * memory ::
+ * A handle to the memory manager.
+ */
typedef struct FT_ModuleRec_
{
FT_Module_Class* clazz;
@@ -572,27 +537,29 @@ FT_BEGIN_HEADER
FT_MODULE_DRIVER_HINTS_LIGHTLY )
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Module_Interface */
- /* */
- /* <Description> */
- /* Finds a module and returns its specific interface as a typeless */
- /* pointer. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object. */
- /* */
- /* module_name :: The module's name (as an ASCII string). */
- /* */
- /* <Return> */
- /* A module-specific interface if available, 0 otherwise. */
- /* */
- /* <Note> */
- /* You should better be familiar with FreeType internals to know */
- /* which module to look for, and what its interface is :-) */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -643,44 +610,46 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -730,8 +699,9 @@ FT_BEGIN_HEADER
ft_glyphslot_free_bitmap( FT_GlyphSlot slot );
- /* Preset bitmap metrics of an outline glyphslot prior to rendering. */
- FT_BASE( void )
+ /* Preset bitmap metrics of an outline glyphslot prior to rendering */
+ /* and check whether the truncated bbox is too large for rendering. */
+ FT_BASE( FT_Bool )
ft_glyphslot_preset_bitmap( FT_GlyphSlot slot,
FT_Render_Mode mode,
const FT_Vector* origin );
@@ -802,28 +772,30 @@ FT_BEGIN_HEADER
#define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_DriverRec */
- /* */
- /* <Description> */
- /* The root font driver class. A font driver is responsible for */
- /* managing and loading font files of a given format. */
- /* */
- /* <Fields> */
- /* root :: Contains the fields of the root module class. */
- /* */
- /* clazz :: A pointer to the font driver's class. Note that */
- /* this is NOT root.clazz. `class' wasn't used */
- /* as it is a reserved word in C++. */
- /* */
- /* faces_list :: The list of faces currently opened by this */
- /* driver. */
- /* */
- /* glyph_loader :: Unused. Used to be glyph loader for all faces */
- /* managed by this driver. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_DriverRec
+ *
+ * @description:
+ * The root font driver class. A font driver is responsible for managing
+ * and loading font files of a given format.
+ *
+ * @fields:
+ * root ::
+ * Contains the fields of the root module class.
+ *
+ * clazz ::
+ * A pointer to the font driver's class. Note that this is NOT
+ * root.clazz. 'class' wasn't used as it is a reserved word in C++.
+ *
+ * faces_list ::
+ * The list of faces currently opened by this driver.
+ *
+ * glyph_loader ::
+ * Unused. Used to be glyph loader for all faces managed by this
+ * driver.
+ */
typedef struct FT_DriverRec_
{
FT_ModuleRec root;
@@ -847,72 +819,77 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /* 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
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_LibraryRec */
- /* */
- /* <Description> */
- /* The FreeType library class. This is the root of all FreeType */
- /* data. Use FT_New_Library() to create a library object, and */
- /* FT_Done_Library() to discard it and all child objects. */
- /* */
- /* <Fields> */
- /* memory :: The library's memory object. Manages memory */
- /* allocation. */
- /* */
- /* version_major :: The major version number of the library. */
- /* */
- /* version_minor :: The minor version number of the library. */
- /* */
- /* version_patch :: The current patch level of the library. */
- /* */
- /* num_modules :: The number of modules currently registered */
- /* within this library. This is set to 0 for new */
- /* libraries. New modules are added through the */
- /* FT_Add_Module() API function. */
- /* */
- /* modules :: A table used to store handles to the currently */
- /* registered modules. Note that each font driver */
- /* contains a list of its opened faces. */
- /* */
- /* renderers :: The list of renderers currently registered */
- /* within the library. */
- /* */
- /* cur_renderer :: The current outline renderer. This is a */
- /* shortcut used to avoid parsing the list on */
- /* each call to FT_Outline_Render(). It is a */
- /* handle to the current renderer for the */
- /* FT_GLYPH_FORMAT_OUTLINE format. */
- /* */
- /* auto_hinter :: The auto-hinter module interface. */
- /* */
- /* debug_hooks :: An array of four function pointers that allow */
- /* debuggers to hook into a font format's */
- /* interpreter. Currently, only the TrueType */
- /* bytecode debugger uses this. */
- /* */
- /* lcd_weights :: If subpixel rendering is activated, the LCD */
- /* filter weights, if any. */
- /* */
- /* lcd_filter_func :: If subpixel rendering is activated, the LCD */
- /* filtering callback function. */
- /* */
- /* pic_container :: Contains global structs and tables, instead */
- /* of defining them globally. */
- /* */
- /* refcount :: A counter initialized to~1 at the time an */
- /* @FT_Library structure is created. */
- /* @FT_Reference_Library increments this counter, */
- /* and @FT_Done_Library only destroys a library */
- /* if the counter is~1, otherwise it simply */
- /* decrements it. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_LibraryRec
+ *
+ * @description:
+ * The FreeType library class. This is the root of all FreeType data.
+ * Use FT_New_Library() to create a library object, and FT_Done_Library()
+ * to discard it and all child objects.
+ *
+ * @fields:
+ * memory ::
+ * The library's memory object. Manages memory allocation.
+ *
+ * version_major ::
+ * The major version number of the library.
+ *
+ * version_minor ::
+ * The minor version number of the library.
+ *
+ * version_patch ::
+ * The current patch level of the library.
+ *
+ * num_modules ::
+ * The number of modules currently registered within this library.
+ * This is set to 0 for new libraries. New modules are added through
+ * the FT_Add_Module() API function.
+ *
+ * modules ::
+ * A table used to store handles to the currently registered
+ * modules. Note that each font driver contains a list of its opened
+ * faces.
+ *
+ * renderers ::
+ * The list of renderers currently registered within the library.
+ *
+ * cur_renderer ::
+ * The current outline renderer. This is a shortcut used to avoid
+ * parsing the list on each call to FT_Outline_Render(). It is a
+ * handle to the current renderer for the FT_GLYPH_FORMAT_OUTLINE
+ * format.
+ *
+ * auto_hinter ::
+ * The auto-hinter module interface.
+ *
+ * debug_hooks ::
+ * An array of four function pointers that allow debuggers to hook into
+ * a font format's interpreter. Currently, only the TrueType bytecode
+ * debugger uses this.
+ *
+ * lcd_weights ::
+ * The LCD filter weights for ClearType-style subpixel rendering.
+ *
+ * lcd_filter_func ::
+ * The LCD filtering callback function for for ClearType-style subpixel
+ * rendering.
+ *
+ * lcd_geometry ::
+ * This array specifies LCD subpixel geometry and controls Harmony LCD
+ * rendering technique, alternative to ClearType.
+ *
+ * pic_container ::
+ * Contains global structs and tables, instead of defining them
+ * globally.
+ *
+ * refcount ::
+ * A counter initialized to~1 at the time an @FT_Library structure is
+ * created. @FT_Reference_Library increments this counter, and
+ * @FT_Done_Library only destroys a library if the counter is~1,
+ * otherwise it simply decrements it.
+ */
typedef struct FT_LibraryRec_
{
FT_Memory memory; /* library's memory manager */
@@ -933,10 +910,8 @@ FT_BEGIN_HEADER
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */
FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */
-#endif
-
-#ifdef FT_CONFIG_OPTION_PIC
- FT_PIC_Container pic_container;
+#else
+ FT_Vector lcd_geometry[3]; /* RGB subpixel positions */
#endif
FT_Int refcount;
@@ -964,38 +939,39 @@ FT_BEGIN_HEADER
FT_UInt buffer_max );
typedef FT_UInt
- (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face,
- FT_String* glyph_name );
+ (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face,
+ const 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -1013,37 +989,16 @@ FT_BEGIN_HEADER
#endif
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** P I C S U P P O R T ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* PIC support macros for ftimage.h */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_OUTLINE_FUNCS */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Outline_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DEFINE_OUTLINE_FUNCS
+ *
+ * @description:
+ * Used to initialize an instance of FT_Outline_Funcs struct. The struct
+ * will be allocated in the global scope (or the scope where the macro is
+ * used).
+ */
#define FT_DEFINE_OUTLINE_FUNCS( \
class_, \
move_to_, \
@@ -1062,47 +1017,17 @@ FT_BEGIN_HEADER
delta_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_OUTLINE_FUNCS( \
- class_, \
- move_to_, \
- line_to_, \
- conic_to_, \
- cubic_to_, \
- shift_, \
- delta_ ) \
- static FT_Error \
- Init_Class_ ## class_( FT_Outline_Funcs* clazz ) \
- { \
- clazz->move_to = move_to_; \
- clazz->line_to = line_to_; \
- clazz->conic_to = conic_to_; \
- clazz->cubic_to = cubic_to_; \
- clazz->shift = shift_; \
- clazz->delta = delta_; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_RASTER_FUNCS */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Raster_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DEFINE_RASTER_FUNCS
+ *
+ * @description:
+ * Used to initialize an instance of FT_Raster_Funcs struct. The struct
+ * will be allocated in the global scope (or the scope where the macro is
+ * used).
+ */
#define FT_DEFINE_RASTER_FUNCS( \
class_, \
glyph_format_, \
@@ -1121,48 +1046,17 @@ FT_BEGIN_HEADER
raster_done_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_RASTER_FUNCS( \
- class_, \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Raster_Funcs* clazz ) \
- { \
- clazz->glyph_format = glyph_format_; \
- clazz->raster_new = raster_new_; \
- clazz->raster_reset = raster_reset_; \
- clazz->raster_set_mode = raster_set_mode_; \
- clazz->raster_render = raster_render_; \
- clazz->raster_done = raster_done_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
- /* PIC support macros for ftrender.h */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_GLYPH */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Glyph_Class struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DEFINE_GLYPH
+ *
+ * @description:
+ * The struct will be allocated in the global scope (or the scope where
+ * the macro is used).
+ */
#define FT_DEFINE_GLYPH( \
class_, \
size_, \
@@ -1186,73 +1080,25 @@ FT_BEGIN_HEADER
prepare_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_GLYPH( \
- class_, \
- size_, \
- format_, \
- init_, \
- done_, \
- copy_, \
- transform_, \
- bbox_, \
- prepare_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Glyph_Class* clazz ) \
- { \
- clazz->glyph_size = size_; \
- clazz->glyph_format = format_; \
- clazz->glyph_init = init_; \
- clazz->glyph_done = done_; \
- clazz->glyph_copy = copy_; \
- clazz->glyph_transform = transform_; \
- clazz->glyph_bbox = bbox_; \
- clazz->glyph_prepare = prepare_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_RENDERER */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of a */
- /* FT_Renderer_Class struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_RENDERER */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Renderer_Class struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function will */
- /* need to be called with a pointer where the allocated structure is */
- /* returned. And when it is no longer needed a `destroy' function */
- /* needs to be called to release that allocation. */
- /* `ftinit.c' (ft_create_default_module_classes) already contains */
- /* a mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by the renderer definition calling `FT_DEFINE_RENDERER' in the */
- /* following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DECLARE_RENDERER
+ *
+ * @description:
+ * Used to create a forward declaration of a FT_Renderer_Class struct
+ * instance.
+ *
+ * @macro:
+ * FT_DEFINE_RENDERER
+ *
+ * @description:
+ * Used to initialize an instance of FT_Renderer_Class struct.
+ *
+ * The struct will be allocated in the global scope (or the scope where
+ * the macro is used).
+ */
#define FT_DECLARE_RENDERER( class_ ) \
FT_EXPORT_VAR( const FT_Renderer_Class ) class_;
@@ -1295,176 +1141,33 @@ FT_BEGIN_HEADER
raster_class_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_RENDERER( class_ ) FT_DECLARE_MODULE( class_ )
-
-#define FT_DEFINE_RENDERER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- glyph_format_, \
- render_glyph_, \
- transform_glyph_, \
- get_glyph_cbox_, \
- set_mode_, \
- raster_class_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Renderer_Class* rclazz = (FT_Renderer_Class*)clazz; \
- FT_Memory memory = library->memory; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( rclazz ) \
- FT_FREE( rclazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Renderer_Class* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- clazz->glyph_format = glyph_format_; \
- \
- clazz->render_glyph = render_glyph_; \
- clazz->transform_glyph = transform_glyph_; \
- clazz->get_glyph_cbox = get_glyph_cbox_; \
- clazz->set_mode = set_mode_; \
- \
- clazz->raster_class = raster_class_; \
- \
- *output_class = (FT_Module_Class*)clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /* PIC support macros for ftmodapi.h **/
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Creator */
- /* */
- /* <Description> */
- /* A function used to create (allocate) a new module class object. */
- /* The object's members are initialized, but the module itself is */
- /* not. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory manager. */
- /* output_class :: Initialized with the newly allocated class. */
- /* */
- typedef FT_Error
- (*FT_Module_Creator)( FT_Memory memory,
- FT_Module_Class** output_class );
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Destroyer */
- /* */
- /* <Description> */
- /* A function used to destroy (deallocate) a module class object. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory manager. */
- /* clazz :: Module class to destroy. */
- /* */
- typedef void
- (*FT_Module_Destroyer)( FT_Memory memory,
- FT_Module_Class* clazz );
-
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_MODULE */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of a */
- /* FT_Module_Class struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_MODULE */
- /* */
- /* <Description> */
- /* Used to initialize an instance of an FT_Module_Class struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs */
- /* to be called with a pointer where the allocated structure is */
- /* returned. And when it is no longer needed a `destroy' function */
- /* needs to be called to release that allocation. */
- /* `ftinit.c' (ft_create_default_module_classes) already contains */
- /* a mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by the module definition calling `FT_DEFINE_MODULE' in the */
- /* following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
- /* <Macro> */
- /* FT_DEFINE_ROOT_MODULE */
- /* */
- /* <Description> */
- /* Used to initialize an instance of an FT_Module_Class struct inside */
- /* another struct that contains it or in a function that initializes */
- /* that containing struct. */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DECLARE_MODULE
+ *
+ * @description:
+ * Used to create a forward declaration of a FT_Module_Class struct
+ * instance.
+ *
+ * @macro:
+ * FT_DEFINE_MODULE
+ *
+ * @description:
+ * Used to initialize an instance of an FT_Module_Class struct.
+ *
+ * The struct will be allocated in the global scope (or the scope where
+ * the macro is used).
+ *
+ * @macro:
+ * FT_DEFINE_ROOT_MODULE
+ *
+ * @description:
+ * Used to initialize an instance of an FT_Module_Class struct inside
+ * another struct that contains it or in a function that initializes that
+ * containing struct.
+ */
#define FT_DECLARE_MODULE( class_ ) \
FT_CALLBACK_TABLE \
const FT_Module_Class class_;
@@ -1523,100 +1226,6 @@ FT_BEGIN_HEADER
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_MODULE( class_ ) \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ); \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz );
-
-#define FT_DEFINE_ROOT_MODULE( \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- clazz->root.module_flags = flags_; \
- clazz->root.module_size = size_; \
- clazz->root.module_name = name_; \
- clazz->root.module_version = version_; \
- clazz->root.module_requires = requires_; \
- \
- clazz->root.module_interface = interface_; \
- \
- clazz->root.module_init = init_; \
- clazz->root.module_done = done_; \
- clazz->root.get_interface = get_interface_;
-
-#define FT_DEFINE_MODULE( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Memory memory = library->memory; \
- FT_Module_Class* clazz = NULL; \
- FT_Error error; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- clazz->module_flags = flags_; \
- clazz->module_size = size_; \
- clazz->module_name = name_; \
- clazz->module_version = version_; \
- clazz->module_requires = requires_; \
- \
- clazz->module_interface = interface_; \
- \
- clazz->module_init = init_; \
- clazz->module_done = done_; \
- clazz->get_interface = get_interface_; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
FT_END_HEADER
#endif /* FTOBJS_H_ */
diff --git a/freetype/include/freetype/internal/ftpic.h b/freetype/include/freetype/internal/ftpic.h
deleted file mode 100644
index 5214f059..00000000
--- a/freetype/include/freetype/internal/ftpic.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.h */
-/* */
-/* The FreeType position independent code services (declaration). */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Modules that ordinarily have const global data that need address */
- /* can instead define pointers here. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTPIC_H_
-#define FTPIC_H_
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- typedef struct FT_PIC_Container_
- {
- /* pic containers for base */
- void* base;
-
- /* pic containers for modules */
- void* autofit;
- void* cff;
- void* pshinter;
- void* psnames;
- void* raster;
- void* sfnt;
- void* smooth;
- void* truetype;
-
- } FT_PIC_Container;
-
-
- /* Initialize the various function tables, structs, etc. */
- /* stored in the container. */
- FT_BASE( FT_Error )
- ft_pic_container_init( FT_Library library );
-
-
- /* Destroy the contents of the container. */
- FT_BASE( void )
- ft_pic_container_destroy( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTPIC_H_ */
-
-
-/* END */
diff --git a/freetype/include/freetype/internal/ftpsprop.h b/freetype/include/freetype/internal/ftpsprop.h
index abbb6286..574837f6 100644
--- a/freetype/include/freetype/internal/ftpsprop.h
+++ b/freetype/include/freetype/internal/ftpsprop.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftpsprop.h */
-/* */
-/* Get and set properties of PostScript drivers (specification). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftpsprop.h
+ *
+ * Get and set properties of PostScript drivers (specification).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTPSPROP_H_
diff --git a/freetype/include/freetype/internal/ftrfork.h b/freetype/include/freetype/internal/ftrfork.h
index 1aca48a0..75b3e531 100644
--- a/freetype/include/freetype/internal/ftrfork.h
+++ b/freetype/include/freetype/internal/ftrfork.h
@@ -1,24 +1,24 @@
-/***************************************************************************/
-/* */
-/* ftrfork.h */
-/* */
-/* Embedded resource forks accessor (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftrfork.h
+ *
+ * Embedded resource forks accessor (specification).
+ *
+ * Copyright (C) 2004-2019 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_
@@ -72,85 +72,65 @@ FT_BEGIN_HEADER
} FT_RFork_Rule;
/* For fast translation between rule index and rule type,
- * the macros FT_RFORK_xxx should be kept consistent with
- * the raccess_guess_funcs table
+ * the macros FT_RFORK_xxx should be kept consistent with the
+ * raccess_guess_funcs table
*/
typedef struct ft_raccess_guess_rec_ {
ft_raccess_guess_func func;
FT_RFork_Rule type;
} ft_raccess_guess_rec;
-#ifndef FT_CONFIG_OPTION_PIC
- /* this array is a storage in non-PIC mode, so ; is needed in END */
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
static const type name[] = {
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
{ raccess_guess_ ## func_suffix, \
FT_RFork_Rule_ ## type_suffix },
+ /* this array is a storage, thus a final `;' is needed */
#define CONST_FT_RFORK_RULE_ARRAY_END };
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* this array is a function in PIC mode, so no ; is needed in END */
-#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
- void \
- FT_Init_Table_ ## name( type* storage ) \
- { \
- type* local = storage; \
- \
- \
- int i = 0;
-#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
- local[i].func = raccess_guess_ ## func_suffix; \
- local[i].type = FT_RFork_Rule_ ## type_suffix; \
- i++;
-#define CONST_FT_RFORK_RULE_ARRAY_END }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Raccess_Guess */
- /* */
- /* <Description> */
- /* Guess a file name and offset where the actual resource fork is */
- /* stored. The macro FT_RACCESS_N_RULES holds the number of */
- /* guessing rules; the guessed result for the Nth rule is */
- /* represented as a triplet: a new file name (new_names[N]), a file */
- /* offset (offsets[N]), and an error code (errors[N]). */
- /* */
- /* <Input> */
- /* library :: */
- /* A FreeType library instance. */
- /* */
- /* stream :: */
- /* A file stream containing the resource fork. */
- /* */
- /* base_name :: */
- /* The (base) file name of the resource fork used for some */
- /* guessing rules. */
- /* */
- /* <Output> */
- /* new_names :: */
- /* An array of guessed file names in which the resource forks may */
- /* exist. If `new_names[N]' is NULL, the guessed file name is */
- /* equal to `base_name'. */
- /* */
- /* offsets :: */
- /* An array of guessed file offsets. `offsets[N]' holds the file */
- /* offset of the possible start of the resource fork in file */
- /* `new_names[N]'. */
- /* */
- /* errors :: */
- /* An array of FreeType error codes. `errors[N]' is the error */
- /* code of Nth guessing rule function. If `errors[N]' is not */
- /* FT_Err_Ok, `new_names[N]' and `offsets[N]' are meaningless. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -160,37 +140,37 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -199,55 +179,54 @@ FT_BEGIN_HEADER
FT_Long *rdata_pos );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Raccess_Get_DataOffsets */
- /* */
- /* <Description> */
- /* Get the data offsets for a tag in a resource fork. Offsets are */
- /* stored in an array because, in some cases, resources in a resource */
- /* fork have the same tag. */
- /* */
- /* <Input> */
- /* library :: */
- /* A FreeType library instance. */
- /* */
- /* stream :: */
- /* A file stream containing the resource fork. */
- /* */
- /* map_offset :: */
- /* The file offset where the resource map starts. */
- /* */
- /* rdata_pos :: */
- /* The file offset where the resource data starts. */
- /* */
- /* tag :: */
- /* The resource tag. */
- /* */
- /* sort_by_res_id :: */
- /* A Boolean to sort the fragmented resource by their ids. */
- /* The fragmented resources for `POST' resource should be sorted */
- /* to restore Type1 font properly. For `sfnt' resources, sorting */
- /* may induce a different order of the faces in comparison to that */
- /* by QuickDraw API. */
- /* */
- /* <Output> */
- /* offsets :: */
- /* The stream offsets for the resource data specified by `tag'. */
- /* This array is allocated by the function, so you have to call */
- /* @ft_mem_free after use. */
- /* */
- /* count :: */
- /* The length of offsets array. */
- /* */
- /* <Return> */
- /* FreeType error code. FT_Err_Ok means success. */
- /* */
- /* <Note> */
- /* Normally you should use `FT_Raccess_Get_HeaderInfo' to get the */
- /* value for `map_offset' and `rdata_pos'. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Raccess_Get_DataOffsets
+ *
+ * @description:
+ * Get the data offsets for a tag in a resource fork. Offsets are stored
+ * in an array because, in some cases, resources in a resource fork have
+ * the same tag.
+ *
+ * @input:
+ * library ::
+ * A FreeType library instance.
+ *
+ * stream ::
+ * A file stream containing the resource fork.
+ *
+ * map_offset ::
+ * The file offset where the resource map starts.
+ *
+ * rdata_pos ::
+ * The file offset where the resource data starts.
+ *
+ * tag ::
+ * The resource tag.
+ *
+ * sort_by_res_id ::
+ * A Boolean to sort the fragmented resource by their ids. The
+ * fragmented resources for 'POST' resource should be sorted to restore
+ * Type1 font properly. For 'sfnt' resources, sorting may induce a
+ * different order of the faces in comparison to that by QuickDraw API.
+ *
+ * @output:
+ * offsets ::
+ * The stream offsets for the resource data specified by 'tag'. This
+ * array is allocated by the function, so you have to call @ft_mem_free
+ * after use.
+ *
+ * count ::
+ * The length of offsets array.
+ *
+ * @return:
+ * FreeType error code. FT_Err_Ok means success.
+ *
+ * @note:
+ * Normally you should use `FT_Raccess_Get_HeaderInfo` to get the value
+ * for `map_offset` and `rdata_pos`.
+ */
FT_BASE( FT_Error )
FT_Raccess_Get_DataOffsets( FT_Library library,
FT_Stream stream,
diff --git a/freetype/include/freetype/internal/ftserv.h b/freetype/include/freetype/internal/ftserv.h
index e01c1679..8836cf3f 100644
--- a/freetype/include/freetype/internal/ftserv.h
+++ b/freetype/include/freetype/internal/ftserv.h
@@ -1,31 +1,31 @@
-/***************************************************************************/
-/* */
-/* ftserv.h */
-/* */
-/* The FreeType services (specification only). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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). */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftserv.h
+ *
+ * The FreeType services (specification only).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
@@ -34,7 +34,8 @@
FT_BEGIN_HEADER
- /*
+ /**************************************************************************
+ *
* @macro:
* FT_FACE_FIND_SERVICE
*
@@ -46,15 +47,15 @@ FT_BEGIN_HEADER
* 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_'.
+ * 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.
+ * A variable that receives the service pointer. Will be `NULL` if not
+ * found.
*/
#ifdef __cplusplus
@@ -85,7 +86,8 @@ FT_BEGIN_HEADER
#endif /* !C++ */
- /*
+ /**************************************************************************
+ *
* @macro:
* FT_FACE_FIND_GLOBAL_SERVICE
*
@@ -97,15 +99,15 @@ FT_BEGIN_HEADER
* 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_'.
+ * 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.
+ * A variable that receives the service pointer. Will be `NULL` if not
+ * found.
*/
#ifdef __cplusplus
@@ -144,8 +146,8 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*
- * The following structure is used to _describe_ a given service
- * to the library. This is useful to build simple static service lists.
+ * 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_
{
@@ -157,35 +159,26 @@ FT_BEGIN_HEADER
typedef const FT_ServiceDescRec* FT_ServiceDesc;
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_SERVICEDESCREC1 */
- /* FT_DEFINE_SERVICEDESCREC2 */
- /* FT_DEFINE_SERVICEDESCREC3 */
- /* FT_DEFINE_SERVICEDESCREC4 */
- /* FT_DEFINE_SERVICEDESCREC5 */
- /* FT_DEFINE_SERVICEDESCREC6 */
- /* FT_DEFINE_SERVICEDESCREC7 */
- /* FT_DEFINE_SERVICEDESCREC8 */
- /* */
- /* <Description> */
- /* Used to initialize an array of FT_ServiceDescRec structures. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs to */
- /* be called with a pointer to return an allocated array. As soon as */
- /* it is no longer needed, a `destroy' function needs to be called to */
- /* release that allocation. */
- /* */
- /* These functions should be manually called from the `pic_init' and */
- /* `pic_free' functions of your module (see FT_DEFINE_MODULE). */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the array will be */
- /* allocated in the global scope (or the scope where the macro is */
- /* used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_DEFINE_SERVICEDESCREC1
+ * FT_DEFINE_SERVICEDESCREC2
+ * FT_DEFINE_SERVICEDESCREC3
+ * FT_DEFINE_SERVICEDESCREC4
+ * FT_DEFINE_SERVICEDESCREC5
+ * FT_DEFINE_SERVICEDESCREC6
+ * FT_DEFINE_SERVICEDESCREC7
+ * FT_DEFINE_SERVICEDESCREC8
+ * FT_DEFINE_SERVICEDESCREC9
+ * FT_DEFINE_SERVICEDESCREC10
+ *
+ * @description:
+ * Used to initialize an array of FT_ServiceDescRec structures.
+ *
+ * The array will be allocated in the global scope (or the scope where
+ * the macro is used).
+ */
#define FT_DEFINE_SERVICEDESCREC1( class_, \
serv_id_1, serv_data_1 ) \
static const FT_ServiceDescRec class_[] = \
@@ -356,504 +349,15 @@ FT_BEGIN_HEADER
{ NULL, NULL } \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICEDESCREC1( class_, \
- serv_id_1, serv_data_1 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 2 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = NULL; \
- clazz[1].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC2( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 3 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = NULL; \
- clazz[2].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC3( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 4 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = NULL; \
- clazz[3].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC4( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 5 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = NULL; \
- clazz[4].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC5( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 6 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = NULL; \
- clazz[5].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC6( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 7 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = NULL; \
- clazz[6].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC7( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 8 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = NULL; \
- clazz[7].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC8( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 9 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = serv_id_8; \
- clazz[7].serv_data = serv_data_8; \
- clazz[8].serv_id = NULL; \
- clazz[8].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC9( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8, \
- serv_id_9, serv_data_9 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 10 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = serv_id_8; \
- clazz[7].serv_data = serv_data_8; \
- clazz[8].serv_id = serv_id_9; \
- clazz[8].serv_data = serv_data_9; \
- clazz[9].serv_id = NULL; \
- clazz[9].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC10( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8, \
- serv_id_9, serv_data_9, \
- serv_id_10, serv_data_10 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 11 ) ) \
- return error; \
- \
- clazz[ 0].serv_id = serv_id_1; \
- clazz[ 0].serv_data = serv_data_1; \
- clazz[ 1].serv_id = serv_id_2; \
- clazz[ 1].serv_data = serv_data_2; \
- clazz[ 2].serv_id = serv_id_3; \
- clazz[ 2].serv_data = serv_data_3; \
- clazz[ 3].serv_id = serv_id_4; \
- clazz[ 3].serv_data = serv_data_4; \
- clazz[ 4].serv_id = serv_id_5; \
- clazz[ 4].serv_data = serv_data_5; \
- clazz[ 5].serv_id = serv_id_6; \
- clazz[ 5].serv_data = serv_data_6; \
- clazz[ 6].serv_id = serv_id_7; \
- clazz[ 6].serv_data = serv_data_7; \
- clazz[ 7].serv_id = serv_id_8; \
- clazz[ 7].serv_data = serv_data_8; \
- clazz[ 8].serv_id = serv_id_9; \
- clazz[ 8].serv_data = serv_data_9; \
- clazz[ 9].serv_id = serv_id_10; \
- clazz[ 9].serv_data = serv_data_10; \
- clazz[10].serv_id = NULL; \
- clazz[10].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/*
- * Parse a list of FT_ServiceDescRec descriptors and look for
- * a specific service by ID. Note that the last element in the
- * array must be { NULL, NULL }, and that the function should
- * return NULL if the service isn't available.
+ * 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.
+ * 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,
@@ -869,16 +373,16 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*
- * 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.
+ * 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.
+ * 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.
+ * 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_
@@ -894,14 +398,15 @@ FT_BEGIN_HEADER
/*
- * A magic number used within the services cache.
+ * A magic number used within the services cache.
*/
/* ensure that value `1' has the same width as a pointer */
#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)~(FT_PtrDist)1)
- /*
+ /**************************************************************************
+ *
* @macro:
* FT_FACE_LOOKUP_SERVICE
*
@@ -910,7 +415,7 @@ FT_BEGIN_HEADER
* using its cache.
*
* @input:
- * face::
+ * face ::
* The source face handle containing the cache.
*
* field ::
@@ -921,7 +426,7 @@ FT_BEGIN_HEADER
*
* @output:
* ptr ::
- * A variable receiving the service data. NULL if not available.
+ * A variable receiving the service data. `NULL` if not available.
*/
#ifdef __cplusplus
@@ -969,7 +474,7 @@ FT_BEGIN_HEADER
#endif /* !C++ */
/*
- * A macro used to define new service structure types.
+ * A macro used to define new service structure types.
*/
#define FT_DEFINE_SERVICE( name ) \
@@ -982,7 +487,7 @@ FT_BEGIN_HEADER
/* */
/*
- * The header files containing the services.
+ * The header files containing the services.
*/
#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
diff --git a/freetype/include/freetype/internal/ftstream.h b/freetype/include/freetype/internal/ftstream.h
index f90002fe..a579a039 100644
--- a/freetype/include/freetype/internal/ftstream.h
+++ b/freetype/include/freetype/internal/ftstream.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftstream.h */
-/* */
-/* Stream handling (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftstream.h
+ *
+ * Stream handling (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -96,13 +96,13 @@ FT_BEGIN_HEADER
/* The structure type must be set in the FT_STRUCTURE macro before */
/* calling the FT_FRAME_START() macro. */
/* */
-#define FT_FIELD_SIZE( f ) \
+#define FT_FIELD_SIZE( f ) \
(FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
-#define FT_FIELD_SIZE_DELTA( f ) \
+#define FT_FIELD_SIZE_DELTA( f ) \
(FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
-#define FT_FIELD_OFFSET( f ) \
+#define FT_FIELD_OFFSET( f ) \
(FT_UShort)( offsetof( FT_STRUCTURE, f ) )
#define FT_FRAME_FIELD( frame_op, field ) \
@@ -147,11 +147,11 @@ FT_BEGIN_HEADER
#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). */
- /* */
+ /**************************************************************************
+ *
+ * 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)] )
@@ -165,6 +165,21 @@ FT_BEGIN_HEADER
#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
+ /*
+ * function acts on increases does range for emits
+ * pointer checking frames error
+ * -------------------------------------------------------------------
+ * FT_PEEK_XXX buffer pointer no no no no
+ * FT_NEXT_XXX buffer pointer yes no no no
+ * FT_GET_XXX stream->cursor yes yes yes no
+ * FT_READ_XXX stream->pos yes yes no yes
+ */
+
+
+ /*
+ * `FT_PEEK_XXX' are generic macros to get data from a buffer position. No
+ * safety checks are performed.
+ */
#define FT_PEEK_SHORT( p ) FT_INT16( FT_BYTE_U16( p, 0, 8 ) | \
FT_BYTE_U16( p, 1, 0 ) )
@@ -213,7 +228,10 @@ FT_BEGIN_HEADER
FT_BYTE_U32( p, 1, 8 ) | \
FT_BYTE_U32( p, 0, 0 ) )
-
+ /*
+ * `FT_NEXT_XXX' are generic macros to get data from a buffer position
+ * which is then increased appropriately. No safety checks are performed.
+ */
#define FT_NEXT_CHAR( buffer ) \
( (signed char)*buffer++ )
@@ -258,10 +276,14 @@ FT_BEGIN_HEADER
( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
- /*************************************************************************/
- /* */
- /* Each GET_xxxx() macro uses an implicit `stream' variable. */
- /* */
+ /**************************************************************************
+ *
+ * The `FT_GET_XXX` macros use an implicit 'stream' variable.
+ *
+ * Note that a call to `FT_STREAM_SEEK` or `FT_STREAM_POS` has **no**
+ * effect on `FT_GET_XXX`! They operate on `stream->pos`, while
+ * `FT_GET_XXX` use `stream->cursor`.
+ */
#if 0
#define FT_GET_MACRO( type ) FT_NEXT_ ## type ( stream->cursor )
@@ -299,10 +321,18 @@ FT_BEGIN_HEADER
#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_ULong )
#endif
+
#define FT_READ_MACRO( func, type, var ) \
( var = (type)func( stream, &error ), \
error != FT_Err_Ok )
+ /*
+ * The `FT_READ_XXX' macros use implicit `stream' and `error' variables.
+ *
+ * `FT_READ_XXX' can be controlled with `FT_STREAM_SEEK' and
+ * `FT_STREAM_POS'. They use the full machinery to check whether a read is
+ * valid.
+ */
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
@@ -387,12 +417,14 @@ FT_BEGIN_HEADER
/* 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 */
+ /* the `FT_Stream_GetXXX' functions to retrieve frame data without */
/* error checks. */
/* */
- /* You must _always_ call FT_Stream_ExitFrame() once you have entered */
+ /* You must _always_ call `FT_Stream_ExitFrame' once you have entered */
/* a stream frame! */
/* */
+ /* Nested frames are not permitted. */
+ /* */
FT_BASE( FT_Error )
FT_Stream_EnterFrame( FT_Stream stream,
FT_ULong count );
@@ -401,25 +433,29 @@ FT_BEGIN_HEADER
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. */
+ /* is memory-based, this function simply sets 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_Stream_GetXXX' functions can't be used. */
+ /* */
+ /* An extracted frame 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) */
+ /* 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 );
diff --git a/freetype/include/freetype/internal/fttrace.h b/freetype/include/freetype/internal/fttrace.h
index 8092e41f..f5f95980 100644
--- a/freetype/include/freetype/internal/fttrace.h
+++ b/freetype/include/freetype/internal/fttrace.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* fttrace.h */
-/* */
-/* Tracing handling (specification only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fttrace.h
+ *
+ * Tracing handling (specification only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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 */
@@ -23,23 +23,24 @@ FT_TRACE_DEF( any )
/* base components */
FT_TRACE_DEF( calc ) /* calculations (ftcalc.c) */
+FT_TRACE_DEF( gloader ) /* glyph loader (ftgloadr.c) */
+FT_TRACE_DEF( glyph ) /* glyph management (ftglyph.c) */
FT_TRACE_DEF( memory ) /* memory manager (ftobjs.c) */
-FT_TRACE_DEF( stream ) /* stream manager (ftstream.c) */
+FT_TRACE_DEF( init ) /* initialization (ftinit.c) */
FT_TRACE_DEF( io ) /* i/o interface (ftsystem.c) */
FT_TRACE_DEF( list ) /* list management (ftlist.c) */
-FT_TRACE_DEF( init ) /* initialization (ftinit.c) */
FT_TRACE_DEF( objs ) /* base objects (ftobjs.c) */
FT_TRACE_DEF( outline ) /* outline management (ftoutln.c) */
-FT_TRACE_DEF( glyph ) /* glyph management (ftglyph.c) */
-FT_TRACE_DEF( gloader ) /* glyph loader (ftgloadr.c) */
+FT_TRACE_DEF( stream ) /* stream manager (ftstream.c) */
-FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */
-FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
+FT_TRACE_DEF( bitmap ) /* bitmap manipulation (ftbitmap.c) */
+FT_TRACE_DEF( checksum ) /* bitmap checksum (ftobjs.c) */
FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */
+FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */
FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */
+FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */
+FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */
-FT_TRACE_DEF( bitmap ) /* bitmap checksum (ftobjs.c) */
-FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */
/* Cache sub-system */
FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
@@ -47,21 +48,24 @@ FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
/* SFNT driver components */
FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */
FT_TRACE_DEF( sfobjs ) /* SFNT object handler (sfobjs.c) */
+FT_TRACE_DEF( sfwoff ) /* WOFF format handler (sfwoff.c) */
+FT_TRACE_DEF( ttbdf ) /* TrueType embedded BDF (ttbdf.c) */
FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */
+FT_TRACE_DEF( ttcolr ) /* glyph layer table (ttcolr.c) */
+FT_TRACE_DEF( ttcpal ) /* color palette table (ttcpal.c) */
FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */
FT_TRACE_DEF( ttload ) /* basic TrueType tables (ttload.c) */
FT_TRACE_DEF( ttmtx ) /* metrics-related tables (ttmtx.c) */
FT_TRACE_DEF( ttpost ) /* PS table processing (ttpost.c) */
FT_TRACE_DEF( ttsbit ) /* TrueType sbit handling (ttsbit.c) */
-FT_TRACE_DEF( ttbdf ) /* TrueType embedded BDF (ttbdf.c) */
/* TrueType driver components */
FT_TRACE_DEF( ttdriver ) /* TT font driver (ttdriver.c) */
FT_TRACE_DEF( ttgload ) /* TT glyph loader (ttgload.c) */
+FT_TRACE_DEF( ttgxvar ) /* TrueType GX var handler (ttgxvar.c) */
FT_TRACE_DEF( ttinterp ) /* bytecode interpreter (ttinterp.c) */
FT_TRACE_DEF( ttobjs ) /* TT objects manager (ttobjs.c) */
FT_TRACE_DEF( ttpload ) /* TT data/program loader (ttpload.c) */
-FT_TRACE_DEF( ttgxvar ) /* TrueType GX var handler (ttgxvar.c) */
/* Type 1 driver components */
FT_TRACE_DEF( t1afm )
@@ -72,14 +76,14 @@ FT_TRACE_DEF( t1objs )
FT_TRACE_DEF( t1parse )
/* PostScript helper module `psaux' */
-FT_TRACE_DEF( t1decode )
FT_TRACE_DEF( cffdecode )
-FT_TRACE_DEF( psobjs )
FT_TRACE_DEF( psconv )
+FT_TRACE_DEF( psobjs )
+FT_TRACE_DEF( t1decode )
/* PostScript hinting module `pshinter' */
-FT_TRACE_DEF( pshrec )
FT_TRACE_DEF( pshalgo )
+FT_TRACE_DEF( pshrec )
/* Type 2 driver components */
FT_TRACE_DEF( cffdriver )
@@ -117,7 +121,6 @@ FT_TRACE_DEF( bdflib )
FT_TRACE_DEF( pfr )
/* OpenType validation components */
-FT_TRACE_DEF( otvmodule )
FT_TRACE_DEF( otvcommon )
FT_TRACE_DEF( otvbase )
FT_TRACE_DEF( otvgdef )
@@ -125,29 +128,30 @@ FT_TRACE_DEF( otvgpos )
FT_TRACE_DEF( otvgsub )
FT_TRACE_DEF( otvjstf )
FT_TRACE_DEF( otvmath )
+FT_TRACE_DEF( otvmodule )
/* TrueTypeGX/AAT validation components */
-FT_TRACE_DEF( gxvmodule )
+FT_TRACE_DEF( gxvbsln )
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( gxvmodule )
+FT_TRACE_DEF( gxvmort )
+FT_TRACE_DEF( gxvmorx )
+FT_TRACE_DEF( gxvlcar )
FT_TRACE_DEF( gxvopbd )
-FT_TRACE_DEF( gxvtrak )
FT_TRACE_DEF( gxvprop )
-FT_TRACE_DEF( gxvlcar )
+FT_TRACE_DEF( gxvtrak )
/* autofit components */
-FT_TRACE_DEF( afmodule )
-FT_TRACE_DEF( afhints )
FT_TRACE_DEF( afcjk )
+FT_TRACE_DEF( afglobal )
+FT_TRACE_DEF( afhints )
+FT_TRACE_DEF( afmodule )
FT_TRACE_DEF( aflatin )
FT_TRACE_DEF( aflatin2 )
-FT_TRACE_DEF( afwarp )
FT_TRACE_DEF( afshaper )
-FT_TRACE_DEF( afglobal )
+FT_TRACE_DEF( afwarp )
/* END */
diff --git a/freetype/include/freetype/internal/ftvalid.h b/freetype/include/freetype/internal/ftvalid.h
index cad47a55..38aa06cc 100644
--- a/freetype/include/freetype/internal/ftvalid.h
+++ b/freetype/include/freetype/internal/ftvalid.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftvalid.h */
-/* */
-/* FreeType validation support (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftvalid.h
+ *
+ * FreeType validation support (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -42,31 +42,31 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * 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,
diff --git a/freetype/include/freetype/internal/internal.h b/freetype/include/freetype/internal/internal.h
index 8f546e44..3c8830f7 100644
--- a/freetype/include/freetype/internal/internal.h
+++ b/freetype/include/freetype/internal/internal.h
@@ -1,31 +1,30 @@
-/***************************************************************************/
-/* */
-/* internal.h */
-/* */
-/* Internal header files (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * internal.h
+ *
+ * Internal header files (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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! */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * This file is automatically included by `ft2build.h`. Do not include it
+ * manually!
+ *
+ */
#define FT_INTERNAL_OBJECTS_H <freetype/internal/ftobjs.h>
-#define FT_INTERNAL_PIC_H <freetype/internal/ftpic.h>
#define FT_INTERNAL_STREAM_H <freetype/internal/ftstream.h>
#define FT_INTERNAL_MEMORY_H <freetype/internal/ftmemory.h>
#define FT_INTERNAL_DEBUG_H <freetype/internal/ftdebug.h>
@@ -41,6 +40,7 @@
#define FT_INTERNAL_TRUETYPE_TYPES_H <freetype/internal/tttypes.h>
#define FT_INTERNAL_TYPE1_TYPES_H <freetype/internal/t1types.h>
+#define FT_INTERNAL_WOFF_TYPES_H <freetype/internal/wofftypes.h>
#define FT_INTERNAL_POSTSCRIPT_AUX_H <freetype/internal/psaux.h>
#define FT_INTERNAL_POSTSCRIPT_HINTS_H <freetype/internal/pshints.h>
diff --git a/freetype/include/freetype/internal/psaux.h b/freetype/include/freetype/internal/psaux.h
index f77380d2..f962a973 100644
--- a/freetype/include/freetype/internal/psaux.h
+++ b/freetype/include/freetype/internal/psaux.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* psaux.h */
-/* */
-/* Auxiliary functions and data structures related to PostScript fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.h
+ *
+ * Auxiliary functions and data structures related to PostScript fonts
+ * (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -35,10 +35,10 @@
FT_BEGIN_HEADER
- /***********************************************************************/
- /* */
- /* PostScript modules driver class. */
- /* */
+ /**************************************************************************
+ *
+ * PostScript modules driver class.
+ */
typedef struct PS_DriverRec_
{
FT_DriverRec root;
@@ -64,23 +64,27 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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
@@ -92,10 +96,10 @@ FT_BEGIN_HEADER
(*done)( PS_Table table );
FT_Error
- (*add)( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length );
+ (*add)( PS_Table table,
+ FT_Int idx,
+ const void* object,
+ FT_UInt length );
void
(*release)( PS_Table table );
@@ -103,41 +107,47 @@ FT_BEGIN_HEADER
} PS_Table_FuncsRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_TableRec */
- /* */
- /* <Description> */
- /* A PS_Table is a simple object used to store an array of objects in */
- /* a single memory block. */
- /* */
- /* <Fields> */
- /* block :: The address in memory of the growheap's block. This */
- /* can change between two object adds, due to */
- /* reallocation. */
- /* */
- /* cursor :: The current top of the grow heap within its block. */
- /* */
- /* capacity :: The current size of the heap block. Increments by */
- /* 1kByte chunks. */
- /* */
- /* init :: Set to 0xDEADBEEF if `elements' and `lengths' have */
- /* been allocated. */
- /* */
- /* max_elems :: The maximum number of elements in table. */
- /* */
- /* num_elems :: The current number of elements in table. */
- /* */
- /* elements :: A table of element addresses within the block. */
- /* */
- /* lengths :: A table of element sizes within the block. */
- /* */
- /* memory :: The object used for memory operations */
- /* (alloc/realloc). */
- /* */
- /* funcs :: A table of method pointers for this object. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * PS_TableRec
+ *
+ * @description:
+ * A PS_Table is a simple object used to store an array of objects in a
+ * single memory block.
+ *
+ * @fields:
+ * block ::
+ * The address in memory of the growheap's block. This can change
+ * between two object adds, due to reallocation.
+ *
+ * cursor ::
+ * The current top of the grow heap within its block.
+ *
+ * capacity ::
+ * The current size of the heap block. Increments by 1kByte chunks.
+ *
+ * init ::
+ * Set to 0xDEADBEEF if 'elements' and 'lengths' have been allocated.
+ *
+ * max_elems ::
+ * The maximum number of elements in table.
+ *
+ * num_elems ::
+ * The current number of elements in table.
+ *
+ * elements ::
+ * A table of element addresses within the block.
+ *
+ * lengths ::
+ * A table of element sizes within the block.
+ *
+ * memory ::
+ * The object used for memory operations (alloc/realloc).
+ *
+ * funcs ::
+ * A table of method pointers for this object.
+ */
typedef struct PS_TableRec_
{
FT_Byte* block; /* current memory block */
@@ -425,27 +435,33 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -484,51 +500,67 @@ FT_BEGIN_HEADER
} PS_Builder_FuncsRec;
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* PS_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 :: XXX */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* path_begun :: A flag which indicates that a new path has begun. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* is_t1 :: Set if current font type is Type 1. */
- /* */
- /* funcs :: An array of function pointers for the builder. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * PS_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 ::
+ * XXX
+ *
+ * base ::
+ * The base glyph outline.
+ *
+ * current ::
+ * The current glyph outline.
+ *
+ * pos_x ::
+ * The horizontal translation (if composite glyph).
+ *
+ * pos_y ::
+ * The vertical translation (if composite glyph).
+ *
+ * left_bearing ::
+ * The left side bearing point.
+ *
+ * advance ::
+ * The horizontal advance vector.
+ *
+ * bbox ::
+ * Unused.
+ *
+ * path_begun ::
+ * A flag which indicates that a new path has begun.
+ *
+ * load_points ::
+ * If this flag is not set, no points are loaded.
+ *
+ * no_recurse ::
+ * Set but not used.
+ *
+ * metrics_only ::
+ * A boolean indicating that we only want to compute the metrics of a
+ * given glyph, not load all of its points.
+ *
+ * is_t1 ::
+ * Set if current font type is Type 1.
+ *
+ * funcs ::
+ * An array of function pointers for the builder.
+ */
struct PS_Builder_
{
FT_Memory memory;
@@ -729,54 +761,70 @@ FT_BEGIN_HEADER
} T1_ParseState;
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* T1_BuilderRec */
- /* */
- /* <Description> */
- /* A structure used during glyph loading to store its outline. */
- /* */
- /* <Fields> */
- /* memory :: The current memory object. */
- /* */
- /* face :: The current face object. */
- /* */
- /* glyph :: The current glyph slot. */
- /* */
- /* loader :: XXX */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* max_points :: maximum points in builder outline */
- /* */
- /* max_contours :: Maximum number of contours in builder outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* parse_state :: An enumeration which controls the charstring */
- /* parsing state. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* funcs :: An array of function pointers for the builder. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * T1_BuilderRec
+ *
+ * @description:
+ * A structure used during glyph loading to store its outline.
+ *
+ * @fields:
+ * memory ::
+ * The current memory object.
+ *
+ * face ::
+ * The current face object.
+ *
+ * glyph ::
+ * The current glyph slot.
+ *
+ * loader ::
+ * XXX
+ *
+ * base ::
+ * The base glyph outline.
+ *
+ * current ::
+ * The current glyph outline.
+ *
+ * max_points ::
+ * maximum points in builder outline
+ *
+ * max_contours ::
+ * Maximum number of contours in builder outline.
+ *
+ * pos_x ::
+ * The horizontal translation (if composite glyph).
+ *
+ * pos_y ::
+ * The vertical translation (if composite glyph).
+ *
+ * left_bearing ::
+ * The left side bearing point.
+ *
+ * advance ::
+ * The horizontal advance vector.
+ *
+ * bbox ::
+ * Unused.
+ *
+ * parse_state ::
+ * An enumeration which controls the charstring parsing state.
+ *
+ * load_points ::
+ * If this flag is not set, no points are loaded.
+ *
+ * no_recurse ::
+ * Set but not used.
+ *
+ * metrics_only ::
+ * A boolean indicating that we only want to compute the metrics of a
+ * given glyph, not load all of its points.
+ *
+ * funcs ::
+ * An array of function pointers for the builder.
+ */
typedef struct T1_BuilderRec_
{
FT_Memory memory;
@@ -817,19 +865,19 @@ FT_BEGIN_HEADER
#if 0
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+ /**************************************************************************
+ *
+ * T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A
+ * minimum of 16 is required.
+ */
#define T1_MAX_CHARSTRINGS_OPERANDS 32
#endif /* 0 */
@@ -993,53 +1041,70 @@ FT_BEGIN_HEADER
} CFF_Builder_FuncsRec;
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* CFF_Builder */
- /* */
- /* <Description> */
- /* A structure used during glyph loading to store its outline. */
- /* */
- /* <Fields> */
- /* memory :: The current memory object. */
- /* */
- /* face :: The current face object. */
- /* */
- /* glyph :: The current glyph slot. */
- /* */
- /* loader :: The current glyph loader. */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* path_begun :: A flag which indicates that a new path has begun. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* hints_funcs :: Auxiliary pointer for hinting. */
- /* */
- /* hints_globals :: Auxiliary pointer for hinting. */
- /* */
- /* funcs :: A table of method pointers for this object. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * CFF_Builder
+ *
+ * @description:
+ * A structure used during glyph loading to store its outline.
+ *
+ * @fields:
+ * memory ::
+ * The current memory object.
+ *
+ * face ::
+ * The current face object.
+ *
+ * glyph ::
+ * The current glyph slot.
+ *
+ * loader ::
+ * The current glyph loader.
+ *
+ * base ::
+ * The base glyph outline.
+ *
+ * current ::
+ * The current glyph outline.
+ *
+ * pos_x ::
+ * The horizontal translation (if composite glyph).
+ *
+ * pos_y ::
+ * The vertical translation (if composite glyph).
+ *
+ * left_bearing ::
+ * The left side bearing point.
+ *
+ * advance ::
+ * The horizontal advance vector.
+ *
+ * bbox ::
+ * Unused.
+ *
+ * path_begun ::
+ * A flag which indicates that a new path has begun.
+ *
+ * load_points ::
+ * If this flag is not set, no points are loaded.
+ *
+ * no_recurse ::
+ * Set but not used.
+ *
+ * metrics_only ::
+ * A boolean indicating that we only want to compute the metrics of a
+ * given glyph, not load all of its points.
+ *
+ * hints_funcs ::
+ * Auxiliary pointer for hinting.
+ *
+ * hints_globals ::
+ * Auxiliary pointer for hinting.
+ *
+ * funcs ::
+ * A table of method pointers for this object.
+ */
struct CFF_Builder_
{
FT_Memory memory;
@@ -1211,25 +1276,27 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
diff --git a/freetype/include/freetype/internal/pshints.h b/freetype/include/freetype/internal/pshints.h
index d29314ec..699acea6 100644
--- a/freetype/include/freetype/internal/pshints.h
+++ b/freetype/include/freetype/internal/pshints.h
@@ -1,21 +1,21 @@
-/***************************************************************************/
-/* */
-/* 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-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -73,7 +73,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* T1_Hints
@@ -86,16 +86,16 @@ FT_BEGIN_HEADER
* @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.
+ * - 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
+ * 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).
+ * - 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.
@@ -104,7 +104,7 @@ FT_BEGIN_HEADER
typedef struct T1_HintsRec_* T1_Hints;
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* T1_Hints_Funcs
@@ -117,7 +117,7 @@ FT_BEGIN_HEADER
typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs;
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T1_Hints_OpenFunc
@@ -139,14 +139,14 @@ FT_BEGIN_HEADER
(*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'
+ * vertical stem. This corresponds to the Type 1 'hstem' and 'vstem'
* operators.
*
* @input:
@@ -164,15 +164,15 @@ FT_BEGIN_HEADER
* 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.
+ * '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
+ * -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]'.
+ * If the length is -21 (corresponding to a bottom ghost stem), then the
+ * real stem position is 'coords[0]+coords[1]'.
*
*/
typedef void
@@ -181,7 +181,7 @@ FT_BEGIN_HEADER
FT_Fixed* coords );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T1_Hints_SetStem3Func
@@ -215,7 +215,7 @@ FT_BEGIN_HEADER
FT_Fixed* coords );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T1_Hints_ResetFunc
@@ -238,7 +238,7 @@ FT_BEGIN_HEADER
FT_UInt end_point );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T1_Hints_CloseFunc
@@ -267,7 +267,7 @@ FT_BEGIN_HEADER
FT_UInt end_point );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T1_Hints_ApplyFunc
@@ -297,7 +297,7 @@ FT_BEGIN_HEADER
* 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
+ * The scaling transformation is taken from the 'globals' object which
* must correspond to the same font as the glyph.
*
*/
@@ -308,7 +308,7 @@ FT_BEGIN_HEADER
FT_Render_Mode hint_mode );
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* T1_Hints_FuncsRec
@@ -360,7 +360,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* T2_Hints
@@ -373,16 +373,16 @@ FT_BEGIN_HEADER
* @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.
+ * - 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.
+ * 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).
+ * - 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.
@@ -391,7 +391,7 @@ FT_BEGIN_HEADER
typedef struct T2_HintsRec_* T2_Hints;
- /*************************************************************************
+ /**************************************************************************
*
* @type:
* T2_Hints_Funcs
@@ -404,7 +404,7 @@ FT_BEGIN_HEADER
typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs;
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T2_Hints_OpenFunc
@@ -426,7 +426,7 @@ FT_BEGIN_HEADER
(*T2_Hints_OpenFunc)( T2_Hints hints );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T2_Hints_StemsFunc
@@ -434,7 +434,7 @@ FT_BEGIN_HEADER
* @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.
+ * 'hstem', 'vstem', 'hstemhm', and 'vstemhm' Type 2 operators.
*
* @input:
* hints ::
@@ -447,18 +447,18 @@ FT_BEGIN_HEADER
* The number of stems.
*
* coords ::
- * An array of `count' (position,length) pairs in 16.16 format.
+ * An array of 'count' (position,length) pairs in 16.16 format.
*
* @note:
* Use vertical coordinates (y) for horizontal stems (dim=0). Use
* horizontal coordinates (x) for vertical stems (dim=1).
*
- * There are `2*count' elements in the `coords' array. Each even
- * element is an absolute position in font units, each odd element is a
- * length in font units.
+ * 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
+ * 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.
*
*/
@@ -469,22 +469,22 @@ FT_BEGIN_HEADER
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).
+ * 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.
+ * 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.
@@ -494,13 +494,13 @@ FT_BEGIN_HEADER
*
* @note:
* If the hintmask starts the charstring (before any glyph point
- * definition), the value of `end_point' should be 0.
+ * definition), the value of `end_point` should be 0.
*
- * `bit_count' is the number of meaningful bits in the `bytes' array; it
+ * `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
+ * The 'bytes' array can come directly from the Type 2 charstring and
* respects the same format.
*
*/
@@ -511,14 +511,14 @@ FT_BEGIN_HEADER
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).
+ * A method of the @T2_Hints class used to set a given counter mask (this
+ * corresponds to the 'hintmask' Type 2 operator).
*
* @input:
* hints ::
@@ -536,13 +536,13 @@ FT_BEGIN_HEADER
*
* @note:
* If the hintmask starts the charstring (before any glyph point
- * definition), the value of `end_point' should be 0.
+ * definition), the value of `end_point` should be 0.
*
- * `bit_count' is the number of meaningful bits in the `bytes' array; it
+ * `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
+ * The 'bytes' array can come directly from the Type 2 charstring and
* respects the same format.
*
*/
@@ -552,7 +552,7 @@ FT_BEGIN_HEADER
const FT_Byte* bytes );
- /*************************************************************************
+ /**************************************************************************
*
* @functype:
* T2_Hints_CloseFunc
@@ -581,15 +581,14 @@ FT_BEGIN_HEADER
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.
+ * corresponding glyph outline. Must be called after the 'close' method.
*
* @input:
* hints ::
@@ -611,7 +610,7 @@ FT_BEGIN_HEADER
* 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
+ * The scaling transformation is taken from the 'globals' object which
* must correspond to the same font than the glyph.
*
*/
@@ -622,7 +621,7 @@ FT_BEGIN_HEADER
FT_Render_Mode hint_mode );
- /*************************************************************************
+ /**************************************************************************
*
* @struct:
* T2_Hints_FuncsRec
@@ -680,8 +679,6 @@ FT_BEGIN_HEADER
typedef PSHinter_Interface* PSHinter_Service;
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_PSHINTER_INTERFACE( \
class_, \
get_globals_funcs_, \
@@ -694,25 +691,6 @@ FT_BEGIN_HEADER
get_t2_funcs_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_PSHINTER_INTERFACE( \
- class_, \
- get_globals_funcs_, \
- get_t1_funcs_, \
- get_t2_funcs_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- PSHinter_Interface* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_globals_funcs = get_globals_funcs_; \
- clazz->get_t1_funcs = get_t1_funcs_; \
- clazz->get_t2_funcs = get_t2_funcs_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/services/svbdf.h b/freetype/include/freetype/internal/services/svbdf.h
index 4a9ec200..e4786ed0 100644
--- a/freetype/include/freetype/internal/services/svbdf.h
+++ b/freetype/include/freetype/internal/services/svbdf.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svbdf.h */
-/* */
-/* The FreeType BDF services (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svbdf.h
+ *
+ * The FreeType BDF services (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -46,8 +46,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_BDFRec( class_, \
get_charset_id_, \
get_property_ ) \
@@ -56,20 +54,6 @@ FT_BEGIN_HEADER
get_charset_id_, get_property_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_BDFRec( class_, \
- get_charset_id_, \
- get_property_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_BDFRec* clazz ) \
- { \
- clazz->get_charset_id = get_charset_id_; \
- clazz->get_property = get_property_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svcfftl.h b/freetype/include/freetype/internal/services/svcfftl.h
index db623e68..6c621732 100644
--- a/freetype/include/freetype/internal/services/svcfftl.h
+++ b/freetype/include/freetype/internal/services/svcfftl.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svcfftl.h */
-/* */
-/* The FreeType CFF tables loader service (specification). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svcfftl.h
+ *
+ * The FreeType CFF tables loader service (specification).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef SVCFFTL_H_
@@ -65,8 +65,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_CFFLOADREC( class_, \
get_standard_encoding_, \
load_private_dict_, \
@@ -82,26 +80,6 @@ FT_BEGIN_HEADER
blend_build_vector_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_CFFLOADREC( class_, \
- get_standard_encoding_, \
- load_private_dict_, \
- fd_select_get_, \
- blend_check_vector_, \
- blend_build_vector_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_CFFLoadRec* clazz ) \
- { \
- clazz->get_standard_encoding = get_standard_encoding_; \
- clazz->load_private_dict = load_private_dict_; \
- clazz->fd_select_get = fd_select_get_; \
- clazz->blend_check_vector = blend_check_vector_; \
- clazz->blend_build_vector = blend_build_vector_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/services/svcid.h b/freetype/include/freetype/internal/services/svcid.h
index cb59ac6a..555a5af5 100644
--- a/freetype/include/freetype/internal/services/svcid.h
+++ b/freetype/include/freetype/internal/services/svcid.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svcid.h */
-/* */
-/* The FreeType CID font services (specification). */
-/* */
-/* Copyright 2007-2018 by */
-/* Derek Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svcid.h
+ *
+ * The FreeType CID font services (specification).
+ *
+ * Copyright (C) 2007-2019 by
+ * Derek Clegg and Michael Toftdal.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef SVCID_H_
@@ -48,8 +48,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_CIDREC( class_, \
get_ros_, \
get_is_cid_, \
@@ -59,25 +57,6 @@ FT_BEGIN_HEADER
get_ros_, get_is_cid_, get_cid_from_glyph_index_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_CIDREC( class_, \
- get_ros_, \
- get_is_cid_, \
- get_cid_from_glyph_index_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_CIDRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_ros = get_ros_; \
- clazz->get_is_cid = get_is_cid_; \
- clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svfntfmt.h b/freetype/include/freetype/internal/services/svfntfmt.h
index 3b732be1..6f4285ea 100644
--- a/freetype/include/freetype/internal/services/svfntfmt.h
+++ b/freetype/include/freetype/internal/services/svfntfmt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svfntfmt.h */
-/* */
-/* The FreeType font format service (specification only). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svfntfmt.h
+ *
+ * The FreeType font format service (specification only).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef SVFNTFMT_H_
@@ -26,9 +26,9 @@ 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.
+ * A trivial service used to return the name of a face's font driver,
+ * according to the XFree86 nomenclature. Note that the service data is a
+ * simple constant string pointer.
*/
#define FT_SERVICE_ID_FONT_FORMAT "font-format"
diff --git a/freetype/include/freetype/internal/services/svgldict.h b/freetype/include/freetype/internal/services/svgldict.h
index f1a68e31..09496218 100644
--- a/freetype/include/freetype/internal/services/svgldict.h
+++ b/freetype/include/freetype/internal/services/svgldict.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svgldict.h */
-/* */
-/* The FreeType glyph dictionary services (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svgldict.h
+ *
+ * The FreeType glyph dictionary services (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,8 +26,8 @@ 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.
+ * A service used to retrieve glyph names, as well as to find the index of
+ * a given glyph name in a font.
*
*/
@@ -41,8 +41,8 @@ FT_BEGIN_HEADER
FT_UInt buffer_max );
typedef FT_UInt
- (*FT_GlyphDict_NameIndexFunc)( FT_Face face,
- FT_String* glyph_name );
+ (*FT_GlyphDict_NameIndexFunc)( FT_Face face,
+ const FT_String* glyph_name );
FT_DEFINE_SERVICE( GlyphDict )
@@ -52,8 +52,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
get_name_, \
name_index_ ) \
@@ -62,23 +60,6 @@ FT_BEGIN_HEADER
get_name_, name_index_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
- get_name_, \
- name_index_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_GlyphDictRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_name = get_name_; \
- clazz->name_index = name_index_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svgxval.h b/freetype/include/freetype/internal/services/svgxval.h
index ed79ebea..0bb76f31 100644
--- a/freetype/include/freetype/internal/services/svgxval.h
+++ b/freetype/include/freetype/internal/services/svgxval.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* svgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svgxval.h
+ *
+ * FreeType API for validating TrueTypeGX/AAT tables (specification).
+ *
+ * Copyright (C) 2004-2019 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_
diff --git a/freetype/include/freetype/internal/services/svkern.h b/freetype/include/freetype/internal/services/svkern.h
index c7e8f6ef..f992a327 100644
--- a/freetype/include/freetype/internal/services/svkern.h
+++ b/freetype/include/freetype/internal/services/svkern.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svkern.h */
-/* */
-/* The FreeType Kerning service (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svkern.h
+ *
+ * The FreeType Kerning service (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/include/freetype/internal/services/svmetric.h b/freetype/include/freetype/internal/services/svmetric.h
index abaacddb..d688bc7c 100644
--- a/freetype/include/freetype/internal/services/svmetric.h
+++ b/freetype/include/freetype/internal/services/svmetric.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svmetric.h */
-/* */
-/* The FreeType services for metrics variations (specification). */
-/* */
-/* Copyright 2016-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svmetric.h
+ *
+ * The FreeType services for metrics variations (specification).
+ *
+ * Copyright (C) 2016-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef SVMETRIC_H_
@@ -26,7 +26,7 @@ FT_BEGIN_HEADER
/*
- * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables.
+ * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables.
*
*/
@@ -93,8 +93,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
hadvance_adjust_, \
lsb_adjust_, \
@@ -116,32 +114,6 @@ FT_BEGIN_HEADER
metrics_adjust_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
- hadvance_adjust_, \
- lsb_adjust_, \
- rsb_adjust_, \
- vadvance_adjust_, \
- tsb_adjust_, \
- bsb_adjust_, \
- vorg_adjust_, \
- metrics_adjust_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_MetricsVariationsRec* clazz ) \
- { \
- clazz->hadvance_adjust = hadvance_adjust_; \
- clazz->lsb_adjust = lsb_adjust_; \
- clazz->rsb_adjust = rsb_adjust_; \
- clazz->vadvance_adjust = vadvance_adjust_; \
- clazz->tsb_adjust = tsb_adjust_; \
- clazz->bsb_adjust = bsb_adjust_; \
- clazz->vorg_adjust = vorg_adjust_; \
- clazz->metrics_adjust = metrics_adjust_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svmm.h b/freetype/include/freetype/internal/services/svmm.h
index 882862e0..3652f205 100644
--- a/freetype/include/freetype/internal/services/svmm.h
+++ b/freetype/include/freetype/internal/services/svmm.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svmm.h */
-/* */
-/* The FreeType Multiple Masters and GX var services (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svmm.h
+ *
+ * The FreeType Multiple Masters and GX var services (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,9 +26,9 @@ FT_BEGIN_HEADER
/*
- * A service used to manage multiple-masters data in a given face.
+ * A service used to manage multiple-masters data in a given face.
*
- * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
+ * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
*
*/
@@ -86,103 +86,65 @@ FT_BEGIN_HEADER
typedef void
(*FT_Done_Blend_Func)( FT_Face );
- /* use return value -1 to indicate that the new coordinates */
- /* are equal to the current ones; no changes are thus needed */
typedef FT_Error
(*FT_Set_MM_WeightVector_Func)( FT_Face face,
FT_UInt len,
FT_Fixed* weight_vector );
typedef FT_Error
- (*FT_Get_MM_WeightVector_Func)( FT_Face face,
- FT_UInt* len,
- FT_Fixed* weight_vector );
+ (*FT_Get_MM_WeightVector_Func)( FT_Face face,
+ FT_UInt* len,
+ FT_Fixed* weight_vector );
FT_DEFINE_SERVICE( MultiMasters )
{
- FT_Get_MM_Func get_mm;
- FT_Set_MM_Design_Func set_mm_design;
- FT_Set_MM_Blend_Func set_mm_blend;
- FT_Get_MM_Blend_Func get_mm_blend;
- FT_Get_MM_Var_Func get_mm_var;
- FT_Set_Var_Design_Func set_var_design;
- FT_Get_Var_Design_Func get_var_design;
- FT_Set_Instance_Func set_instance;
- FT_Set_MM_WeightVector_Func set_mm_weightvector;
- FT_Get_MM_WeightVector_Func get_mm_weightvector;
+ FT_Get_MM_Func get_mm;
+ FT_Set_MM_Design_Func set_mm_design;
+ FT_Set_MM_Blend_Func set_mm_blend;
+ FT_Get_MM_Blend_Func get_mm_blend;
+ FT_Get_MM_Var_Func get_mm_var;
+ FT_Set_Var_Design_Func set_var_design;
+ FT_Get_Var_Design_Func get_var_design;
+ FT_Set_Instance_Func set_instance;
+ FT_Set_MM_WeightVector_Func set_mm_weightvector;
+ FT_Get_MM_WeightVector_Func get_mm_weightvector;
/* for internal use; only needed for code sharing between modules */
- FT_Get_Var_Blend_Func get_var_blend;
- FT_Done_Blend_Func done_blend;
+ FT_Get_Var_Blend_Func get_var_blend;
+ FT_Done_Blend_Func done_blend;
};
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- set_instance_, \
- set_weightvector_,\
- get_weightvector_,\
- get_var_blend_, \
- done_blend_ ) \
- static const FT_Service_MultiMastersRec class_ = \
- { \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- set_instance_, \
- set_weightvector_, \
- get_weightvector_, \
- get_var_blend_, \
- done_blend_ \
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ set_weightvector_, \
+ get_weightvector_, \
+ get_var_blend_, \
+ done_blend_ ) \
+ static const FT_Service_MultiMastersRec class_ = \
+ { \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ set_weightvector_, \
+ get_weightvector_, \
+ get_var_blend_, \
+ done_blend_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- set_instance_, \
- set_weightvector, \
- get_weightvector, \
- get_var_blend_, \
- done_blend_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \
- { \
- clazz->get_mm = get_mm_; \
- clazz->set_mm_design = set_mm_design_; \
- clazz->set_mm_blend = set_mm_blend_; \
- clazz->get_mm_blend = get_mm_blend_; \
- clazz->get_mm_var = get_mm_var_; \
- clazz->set_var_design = set_var_design_; \
- clazz->get_var_design = get_var_design_; \
- clazz->set_instance = set_instance_; \
- clazz->set_weightvector = set_weightvector; \
- clazz->get_weightvector = get_weightvector; \
- clazz->get_var_blend = get_var_blend_; \
- clazz->done_blend = done_blend_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svotval.h b/freetype/include/freetype/internal/services/svotval.h
index 31294296..cab4c6ef 100644
--- a/freetype/include/freetype/internal/services/svotval.h
+++ b/freetype/include/freetype/internal/services/svotval.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svotval.h */
-/* */
-/* The FreeType OpenType validation service (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svotval.h
+ *
+ * The FreeType OpenType validation service (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/include/freetype/internal/services/svpfr.h b/freetype/include/freetype/internal/services/svpfr.h
index e65d57e9..fd01d614 100644
--- a/freetype/include/freetype/internal/services/svpfr.h
+++ b/freetype/include/freetype/internal/services/svpfr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svpfr.h */
-/* */
-/* Internal PFR service functions (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svpfr.h
+ *
+ * Internal PFR service functions (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/include/freetype/internal/services/svpostnm.h b/freetype/include/freetype/internal/services/svpostnm.h
index 4a49d8b0..18e3843c 100644
--- a/freetype/include/freetype/internal/services/svpostnm.h
+++ b/freetype/include/freetype/internal/services/svpostnm.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svpostnm.h */
-/* */
-/* The FreeType PostScript name services (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svpostnm.h
+ *
+ * The FreeType PostScript name services (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -25,13 +25,13 @@
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.
+ * 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 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.
+ * The name is owned by the face and will be destroyed with it.
*/
#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME "postscript-font-name"
@@ -47,28 +47,12 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
static const FT_Service_PsFontNameRec class_ = \
{ \
get_ps_font_name_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsFontNameRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_ps_font_name = get_ps_font_name_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svprop.h b/freetype/include/freetype/internal/services/svprop.h
index adc0bcf4..e48d0151 100644
--- a/freetype/include/freetype/internal/services/svprop.h
+++ b/freetype/include/freetype/internal/services/svprop.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svprop.h */
-/* */
-/* The FreeType property service (specification). */
-/* */
-/* Copyright 2012-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svprop.h
+ *
+ * The FreeType property service (specification).
+ *
+ * Copyright (C) 2012-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef SVPROP_H_
@@ -45,8 +45,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
set_property_, \
get_property_ ) \
@@ -56,20 +54,6 @@ FT_BEGIN_HEADER
get_property_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
- set_property_, \
- get_property_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_PropertiesRec* clazz ) \
- { \
- clazz->set_property = set_property_; \
- clazz->get_property = get_property_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svpscmap.h b/freetype/include/freetype/internal/services/svpscmap.h
index 5589575b..dfac3baf 100644
--- a/freetype/include/freetype/internal/services/svpscmap.h
+++ b/freetype/include/freetype/internal/services/svpscmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svpscmap.h */
-/* */
-/* The FreeType PostScript charmap service (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svpscmap.h
+ *
+ * The FreeType PostScript charmap service (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -29,27 +29,26 @@ FT_BEGIN_HEADER
/*
- * Adobe glyph name to unicode value.
+ * 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.
+ * 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.
+ * 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.
+ * Simple unicode -> glyph index charmap built from font glyph names table.
*/
typedef struct PS_UniMap_
{
@@ -71,16 +70,16 @@ FT_BEGIN_HEADER
/*
- * A function which returns a glyph name for a given index. Returns
- * NULL if invalid index.
+ * 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
+ * A function used to release the glyph name returned by
+ * PS_GetGlyphNameFunc, when needed
*/
typedef void
(*PS_FreeGlyphNameFunc)( FT_Pointer data,
@@ -118,8 +117,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
unicode_value_, \
unicodes_init_, \
@@ -136,35 +133,6 @@ FT_BEGIN_HEADER
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
- unicode_value_, \
- unicodes_init_, \
- unicodes_char_index_, \
- unicodes_char_next_, \
- macintosh_name_, \
- adobe_std_strings_, \
- adobe_std_encoding_, \
- adobe_expert_encoding_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsCMapsRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->unicode_value = unicode_value_; \
- clazz->unicodes_init = unicodes_init_; \
- clazz->unicodes_char_index = unicodes_char_index_; \
- clazz->unicodes_char_next = unicodes_char_next_; \
- clazz->macintosh_name = macintosh_name_; \
- clazz->adobe_std_strings = adobe_std_strings_; \
- clazz->adobe_std_encoding = adobe_std_encoding_; \
- clazz->adobe_expert_encoding = adobe_expert_encoding_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svpsinfo.h b/freetype/include/freetype/internal/services/svpsinfo.h
index 408f406d..fb4e0e3f 100644
--- a/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/freetype/include/freetype/internal/services/svpsinfo.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svpsinfo.h */
-/* */
-/* The FreeType PostScript info service (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svpsinfo.h
+ *
+ * The FreeType PostScript info service (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -62,8 +62,6 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
get_font_info_, \
ps_get_font_extra_, \
@@ -76,29 +74,6 @@ FT_BEGIN_HEADER
get_font_private_, get_font_value_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
- get_font_info_, \
- ps_get_font_extra_, \
- has_glyph_names_, \
- get_font_private_, \
- get_font_value_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsInfoRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->ps_get_font_info = get_font_info_; \
- clazz->ps_get_font_extra = ps_get_font_extra_; \
- clazz->ps_has_glyph_names = has_glyph_names_; \
- clazz->ps_get_font_private = get_font_private_; \
- clazz->ps_get_font_value = get_font_value_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svsfnt.h b/freetype/include/freetype/internal/services/svsfnt.h
index e8b37bc4..464aa209 100644
--- a/freetype/include/freetype/internal/services/svsfnt.h
+++ b/freetype/include/freetype/internal/services/svsfnt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svsfnt.h */
-/* */
-/* The FreeType SFNT table loading service (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svsfnt.h
+ *
+ * The FreeType SFNT table loading service (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,7 +27,7 @@ FT_BEGIN_HEADER
/*
- * SFNT table loading service.
+ * SFNT table loading service.
*/
#define FT_SERVICE_ID_SFNT_TABLE "sfnt-table"
@@ -70,27 +70,12 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
static const FT_Service_SFNT_TableRec class_ = \
{ \
load_, get_, info_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec* clazz ) \
- { \
- clazz->load_table = load_; \
- clazz->get_table = get_; \
- clazz->table_info = info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svttcmap.h b/freetype/include/freetype/internal/services/svttcmap.h
index cd0e6fda..0fcb8137 100644
--- a/freetype/include/freetype/internal/services/svttcmap.h
+++ b/freetype/include/freetype/internal/services/svttcmap.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* svttcmap.h */
-/* */
-/* The FreeType TrueType/sfnt cmap extra information service. */
-/* */
-/* Copyright 2003-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svttcmap.h
+ *
+ * The FreeType TrueType/sfnt cmap extra information service.
+ *
+ * Copyright (C) 2003-2019 by
+ * Masatake YAMATO, Redhat K.K.,
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/* Development of this service is support of
Information-technology Promotion Agency, Japan. */
@@ -32,29 +32,28 @@ FT_BEGIN_HEADER
#define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_CMapInfo */
- /* */
- /* <Description> */
- /* A structure used to store TrueType/sfnt specific cmap information */
- /* which is not covered by the generic @FT_CharMap structure. This */
- /* structure can be accessed with the @FT_Get_TT_CMap_Info function. */
- /* */
- /* <Fields> */
- /* language :: */
- /* The language ID used in Mac fonts. Definitions of values are in */
- /* `ttnameid.h'. */
- /* */
- /* format :: */
- /* The cmap format. OpenType 1.6 defines the formats 0 (byte */
- /* encoding table), 2~(high-byte mapping through table), 4~(segment */
- /* mapping to delta values), 6~(trimmed table mapping), 8~(mixed */
- /* 16-bit and 32-bit coverage), 10~(trimmed array), 12~(segmented */
- /* coverage), 13~(last resort font), and 14 (Unicode Variation */
- /* Sequences). */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_CMapInfo
+ *
+ * @description:
+ * A structure used to store TrueType/sfnt specific cmap information
+ * which is not covered by the generic @FT_CharMap structure. This
+ * structure can be accessed with the @FT_Get_TT_CMap_Info function.
+ *
+ * @fields:
+ * language ::
+ * The language ID used in Mac fonts. Definitions of values are in
+ * `ttnameid.h`.
+ *
+ * format ::
+ * The cmap format. OpenType 1.6 defines the formats 0 (byte encoding
+ * table), 2~(high-byte mapping through table), 4~(segment mapping to
+ * delta values), 6~(trimmed table mapping), 8~(mixed 16-bit and 32-bit
+ * coverage), 10~(trimmed array), 12~(segmented coverage), 13~(last
+ * resort font), and 14 (Unicode Variation Sequences).
+ */
typedef struct TT_CMapInfo_
{
FT_ULong language;
@@ -73,7 +72,6 @@ FT_BEGIN_HEADER
TT_CMap_Info_GetFunc get_cmap_info;
};
-#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
static const FT_Service_TTCMapsRec class_ = \
@@ -81,20 +79,6 @@ FT_BEGIN_HEADER
get_cmap_info_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_TTCMapsRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_cmap_info = get_cmap_info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svtteng.h b/freetype/include/freetype/internal/services/svtteng.h
index 92e3c541..a852f5c6 100644
--- a/freetype/include/freetype/internal/services/svtteng.h
+++ b/freetype/include/freetype/internal/services/svtteng.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svtteng.h */
-/* */
-/* The FreeType TrueType engine query service (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svtteng.h
+ *
+ * The FreeType TrueType engine query service (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,7 +27,7 @@ FT_BEGIN_HEADER
/*
- * SFNT table loading service.
+ * SFNT table loading service.
*/
#define FT_SERVICE_ID_TRUETYPE_ENGINE "truetype-engine"
diff --git a/freetype/include/freetype/internal/services/svttglyf.h b/freetype/include/freetype/internal/services/svttglyf.h
index 16fac1ca..c8798771 100644
--- a/freetype/include/freetype/internal/services/svttglyf.h
+++ b/freetype/include/freetype/internal/services/svttglyf.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svttglyf.h */
-/* */
-/* The FreeType TrueType glyph service. */
-/* */
-/* Copyright 2007-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svttglyf.h
+ *
+ * The FreeType TrueType glyph service.
+ *
+ * Copyright (C) 2007-2019 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_
@@ -39,25 +39,12 @@ FT_BEGIN_HEADER
};
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
static const FT_Service_TTGlyfRec class_ = \
{ \
get_location_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_TTGlyfRec* clazz ) \
- { \
- clazz->get_location = get_location_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
/* */
diff --git a/freetype/include/freetype/internal/services/svwinfnt.h b/freetype/include/freetype/internal/services/svwinfnt.h
index 80d481cb..38ee0209 100644
--- a/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/freetype/include/freetype/internal/services/svwinfnt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* svwinfnt.h */
-/* */
-/* The FreeType Windows FNT/FONT service (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * svwinfnt.h
+ *
+ * The FreeType Windows FNT/FONT service (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/include/freetype/internal/sfnt.h b/freetype/include/freetype/internal/sfnt.h
index fb1e327a..b19241c3 100644
--- a/freetype/include/freetype/internal/sfnt.h
+++ b/freetype/include/freetype/internal/sfnt.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfnt.h */
-/* */
-/* High-level `sfnt' driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.h
+ *
+ * High-level 'sfnt' driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -23,48 +23,52 @@
#include <ft2build.h>
#include FT_INTERNAL_DRIVER_H
#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include FT_INTERNAL_WOFF_TYPES_H
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Init_Face_Func */
- /* */
- /* <Description> */
- /* First part of the SFNT face object initialization. This finds */
- /* the face in a SFNT file or collection, and load its format tag in */
- /* face->format_tag. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* face :: A handle to the target face object. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* params :: Optional additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be at the font file's origin. */
- /* */
- /* This function recognizes fonts embedded in a `TrueType */
- /* collection'. */
- /* */
- /* Once the format tag has been validated by the font driver, it */
- /* should then call the TT_Load_Face_Func() callback to read the rest */
- /* of the SFNT tables in the object. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Init_Face_Func
+ *
+ * @description:
+ * First part of the SFNT face object initialization. This finds the
+ * face in a SFNT file or collection, and load its format tag in
+ * face->format_tag.
+ *
+ * @input:
+ * stream ::
+ * The input stream.
+ *
+ * face ::
+ * A handle to the target face object.
+ *
+ * face_index ::
+ * The index of the TrueType font, if we are opening a collection, in
+ * bits 0-15. The numbered instance index~+~1 of a GX (sub)font, if
+ * applicable, in bits 16-30.
+ *
+ * num_params ::
+ * The number of additional parameters.
+ *
+ * params ::
+ * Optional additional parameters.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The stream cursor must be at the font file's origin.
+ *
+ * This function recognizes fonts embedded in a 'TrueType collection'.
+ *
+ * Once the format tag has been validated by the font driver, it should
+ * then call the TT_Load_Face_Func() callback to read the rest of the
+ * SFNT tables in the object.
+ */
typedef FT_Error
(*TT_Init_Face_Func)( FT_Stream stream,
TT_Face face,
@@ -73,36 +77,40 @@ FT_BEGIN_HEADER
FT_Parameter* params );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Face_Func */
- /* */
- /* <Description> */
- /* Second part of the SFNT face object initialization. This loads */
- /* the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the */
- /* face object. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* face :: A handle to the target face object. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* params :: Optional additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function must be called after TT_Init_Face_Func(). */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Load_Face_Func
+ *
+ * @description:
+ * Second part of the SFNT face object initialization. This loads the
+ * common SFNT tables (head, OS/2, maxp, metrics, etc.) in the face
+ * object.
+ *
+ * @input:
+ * stream ::
+ * The input stream.
+ *
+ * face ::
+ * A handle to the target face object.
+ *
+ * face_index ::
+ * The index of the TrueType font, if we are opening a collection, in
+ * bits 0-15. The numbered instance index~+~1 of a GX (sub)font, if
+ * applicable, in bits 16-30.
+ *
+ * num_params ::
+ * The number of additional parameters.
+ *
+ * params ::
+ * Optional additional parameters.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function must be called after TT_Init_Face_Func().
+ */
typedef FT_Error
(*TT_Load_Face_Func)( FT_Stream stream,
TT_Face face,
@@ -111,64 +119,64 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Done_Face_Func
+ *
+ * @description:
+ * A callback used to delete the common SFNT data from a face.
+ *
+ * @input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * @note:
+ * This function does NOT destroy the face object.
+ */
typedef void
(*TT_Done_Face_Func)( TT_Face face );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Any_Func */
- /* */
- /* <Description> */
- /* Load any font table into client memory. */
- /* */
- /* <Input> */
- /* face :: The face object to look for. */
- /* */
- /* tag :: The tag of table to load. Use the value 0 if you want */
- /* to access the whole font file, else set this parameter */
- /* to a valid TrueType table tag that you can forge with */
- /* the MAKE_TT_TAG macro. */
- /* */
- /* offset :: The starting offset in the table (or the file if */
- /* tag == 0). */
- /* */
- /* length :: The address of the decision variable: */
- /* */
- /* If length == NULL: */
- /* Loads the whole table. Returns an error if */
- /* `offset' == 0! */
- /* */
- /* If *length == 0: */
- /* Exits immediately; returning the length of the given */
- /* table or of the font file, depending on the value of */
- /* `tag'. */
- /* */
- /* If *length != 0: */
- /* Loads the next `length' bytes of table or font, */
- /* starting at offset `offset' (in table or font too). */
- /* */
- /* <Output> */
- /* buffer :: The address of target buffer. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -177,34 +185,39 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -214,78 +227,81 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -296,130 +312,144 @@ FT_BEGIN_HEADER
TT_SBit_MetricsRec *ametrics );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Set_SBit_Strike_Func */
- /* */
- /* <Description> */
- /* Select an sbit strike for a given size request. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* req :: The size request. */
- /* */
- /* <Output> */
- /* astrike_index :: The index of the sbit strike. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. Returns an error if no */
- /* sbit strike exists for the selected ppem values. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Load_Metrics_Func
+ *
+ * @description:
+ * Load a metrics table, which is a table with a horizontal and a
+ * vertical version.
+ *
+ * @input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * stream ::
+ * The input stream.
+ *
+ * vertical ::
+ * A boolean flag. If set, load the vertical one.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ */
typedef FT_Error
(*TT_Load_Metrics_Func)( TT_Face face,
FT_Stream stream,
FT_Bool vertical );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Metrics_Func */
- /* */
- /* <Description> */
- /* Load the horizontal or vertical header in a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* vertical :: A boolean flag. If set, load vertical metrics. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* abearing :: The horizontal (or vertical) bearing. Set to zero in */
- /* case of error. */
- /* */
- /* aadvance :: The horizontal (or vertical) advance. Set to zero in */
- /* case of error. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Get_Metrics_Func
+ *
+ * @description:
+ * Load the horizontal or vertical header in a face object.
+ *
+ * @input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * vertical ::
+ * A boolean flag. If set, load vertical metrics.
+ *
+ * gindex ::
+ * The glyph index.
+ *
+ * @output:
+ * abearing ::
+ * The horizontal (or vertical) bearing. Set to zero in case of error.
+ *
+ * aadvance ::
+ * The horizontal (or vertical) advance. Set to zero in case of error.
+ */
typedef void
(*TT_Get_Metrics_Func)( TT_Face face,
FT_Bool vertical,
@@ -428,57 +458,168 @@ FT_BEGIN_HEADER
FT_UShort* aadvance );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Name_Func */
- /* */
- /* <Description> */
- /* From the `name' table, return a given ENGLISH name record in */
- /* ASCII. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* nameid :: The name id of the name record to return. */
- /* */
- /* <InOut> */
- /* name :: The address of an allocated string pointer. NULL if */
- /* no name is present. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Set_Palette_Func
+ *
+ * @description:
+ * Load the colors into `face->palette` for a given palette index.
+ *
+ * @input:
+ * face ::
+ * The target face object.
+ *
+ * idx ::
+ * The palette index.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ */
+ typedef FT_Error
+ (*TT_Set_Palette_Func)( TT_Face face,
+ FT_UInt idx );
+
+
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Get_Colr_Layer_Func
+ *
+ * @description:
+ * Iteratively get the color layer data of a given glyph index.
+ *
+ * @input:
+ * face ::
+ * The target face object.
+ *
+ * base_glyph ::
+ * The glyph index the colored glyph layers are associated with.
+ *
+ * @inout:
+ * iterator ::
+ * An @FT_LayerIterator object. For the first call you should set
+ * `iterator->p` to `NULL`. For all following calls, simply use the
+ * same object again.
+ *
+ * @output:
+ * aglyph_index ::
+ * The glyph index of the current layer.
+ *
+ * acolor_index ::
+ * The color index into the font face's color palette of the current
+ * layer. The value 0xFFFF is special; it doesn't reference a palette
+ * entry but indicates that the text foreground color should be used
+ * instead (to be set up by the application outside of FreeType).
+ *
+ * @return:
+ * Value~1 if everything is OK. If there are no more layers (or if there
+ * are no layers at all), value~0 gets returned. In case of an error,
+ * value~0 is returned also.
+ */
+ typedef FT_Bool
+ (*TT_Get_Colr_Layer_Func)( TT_Face face,
+ FT_UInt base_glyph,
+ FT_UInt *aglyph_index,
+ FT_UInt *acolor_index,
+ FT_LayerIterator* iterator );
+
+
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Blend_Colr_Func
+ *
+ * @description:
+ * Blend the bitmap in `new_glyph` into `base_glyph` using the color
+ * specified by `color_index`. If `color_index` is 0xFFFF, use
+ * `face->foreground_color` if `face->have_foreground_color` is set.
+ * Otherwise check `face->palette_data.palette_flags`: If present and
+ * @FT_PALETTE_FOR_DARK_BACKGROUND is set, use BGRA value 0xFFFFFFFF
+ * (white opaque). Otherwise use BGRA value 0x000000FF (black opaque).
+ *
+ * @input:
+ * face ::
+ * The target face object.
+ *
+ * color_index ::
+ * Color index from the COLR table.
+ *
+ * base_glyph ::
+ * Slot for bitmap to be merged into. The underlying bitmap may get
+ * reallocated.
+ *
+ * new_glyph ::
+ * Slot to be incooperated into `base_glyph`.
+ *
+ * @return:
+ * FreeType error code. 0 means success. Returns an error if
+ * color_index is invalid or reallocation fails.
+ */
+ typedef FT_Error
+ (*TT_Blend_Colr_Func)( TT_Face face,
+ FT_UInt color_index,
+ FT_GlyphSlot base_glyph,
+ FT_GlyphSlot new_glyph );
+
+
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Get_Name_Func
+ *
+ * @description:
+ * From the 'name' table, return a given ENGLISH name record in ASCII.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * nameid ::
+ * The name id of the name record to return.
+ *
+ * @inout:
+ * name ::
+ * The address of an allocated string pointer. `NULL` if no name is
+ * present.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ */
typedef FT_Error
(*TT_Get_Name_Func)( TT_Face face,
FT_UShort nameid,
FT_String** name );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Name_ID_Func */
- /* */
- /* <Description> */
- /* Search whether an ENGLISH version for a given name ID is in the */
- /* `name' table. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* nameid :: The name id of the name record to return. */
- /* */
- /* <Out> */
- /* win :: If non-negative, an index into the `name' table with */
- /* the corresponding (3,1) or (3,0) Windows entry. */
- /* */
- /* apple :: If non-negative, an index into the `name' table with */
- /* the corresponding (1,0) Apple entry. */
- /* */
- /* <Return> */
- /* 1 if there is either a win or apple entry (or both), 0 otheriwse. */
- /* */
+ /**************************************************************************
+ *
+ * @functype:
+ * TT_Get_Name_ID_Func
+ *
+ * @description:
+ * Search whether an ENGLISH version for a given name ID is in the 'name'
+ * table.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * nameid ::
+ * The name id of the name record to return.
+ *
+ * @output:
+ * win ::
+ * If non-negative, an index into the 'name' table with the
+ * corresponding (3,1) or (3,0) Windows entry.
+ *
+ * apple ::
+ * If non-negative, an index into the 'name' table with the
+ * corresponding (1,0) Apple entry.
+ *
+ * @return:
+ * 1 if there is either a win or apple entry (or both), 0 otheriwse.
+ */
typedef FT_Bool
(*TT_Get_Name_ID_Func)( TT_Face face,
FT_UShort nameid,
@@ -486,42 +627,45 @@ FT_BEGIN_HEADER
FT_Int *apple );
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Table_Func */
- /* */
- /* <Description> */
- /* Load a given TrueType table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The function uses `face->goto_table' to seek the stream to the */
- /* start of the table, except while loading the font directory. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -534,9 +678,14 @@ FT_BEGIN_HEADER
* 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.
+ * 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.
@@ -547,18 +696,18 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -616,6 +765,14 @@ FT_BEGIN_HEADER
TT_Set_SBit_Strike_Func set_sbit_strike;
TT_Load_Strike_Metrics_Func load_strike_metrics;
+ TT_Load_Table_Func load_cpal;
+ TT_Load_Table_Func load_colr;
+ TT_Free_Table_Func free_cpal;
+ TT_Free_Table_Func free_colr;
+ TT_Set_Palette_Func set_palette;
+ TT_Get_Colr_Layer_Func get_colr_layer;
+ TT_Blend_Colr_Func colr_blend;
+
TT_Get_Metrics_Func get_metrics;
TT_Get_Name_Func get_name;
@@ -627,7 +784,6 @@ FT_BEGIN_HEADER
/* transitional */
typedef SFNT_Interface* SFNT_Service;
-#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SFNT_INTERFACE( \
class_, \
@@ -659,6 +815,13 @@ FT_BEGIN_HEADER
free_eblc_, \
set_sbit_strike_, \
load_strike_metrics_, \
+ load_cpal_, \
+ load_colr_, \
+ free_cpal_, \
+ free_colr_, \
+ set_palette_, \
+ get_colr_layer_, \
+ colr_blend_, \
get_metrics_, \
get_name_, \
get_name_id_ ) \
@@ -692,89 +855,18 @@ FT_BEGIN_HEADER
free_eblc_, \
set_sbit_strike_, \
load_strike_metrics_, \
+ load_cpal_, \
+ load_colr_, \
+ free_cpal_, \
+ free_colr_, \
+ set_palette_, \
+ get_colr_layer_, \
+ colr_blend_, \
get_metrics_, \
get_name_, \
get_name_id_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_INTERNAL( a, a_ ) \
- clazz->a = a_;
-
-#define FT_DEFINE_SFNT_INTERFACE( \
- class_, \
- goto_table_, \
- init_face_, \
- load_face_, \
- done_face_, \
- get_interface_, \
- load_any_, \
- load_head_, \
- load_hhea_, \
- load_cmap_, \
- load_maxp_, \
- load_os2_, \
- load_post_, \
- load_name_, \
- free_name_, \
- load_kern_, \
- load_gasp_, \
- load_pclt_, \
- load_bhed_, \
- load_sbit_image_, \
- get_psname_, \
- free_psnames_, \
- get_kerning_, \
- load_font_dir_, \
- load_hmtx_, \
- load_eblc_, \
- free_eblc_, \
- set_sbit_strike_, \
- load_strike_metrics_, \
- get_metrics_, \
- get_name_, \
- get_name_id_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- SFNT_Interface* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->goto_table = goto_table_; \
- clazz->init_face = init_face_; \
- clazz->load_face = load_face_; \
- clazz->done_face = done_face_; \
- clazz->get_interface = get_interface_; \
- clazz->load_any = load_any_; \
- clazz->load_head = load_head_; \
- clazz->load_hhea = load_hhea_; \
- clazz->load_cmap = load_cmap_; \
- clazz->load_maxp = load_maxp_; \
- clazz->load_os2 = load_os2_; \
- clazz->load_post = load_post_; \
- clazz->load_name = load_name_; \
- clazz->free_name = free_name_; \
- clazz->load_kern = load_kern_; \
- clazz->load_gasp = load_gasp_; \
- clazz->load_pclt = load_pclt_; \
- clazz->load_bhed = load_bhed_; \
- clazz->load_sbit_image = load_sbit_image_; \
- clazz->get_psname = get_psname_; \
- clazz->free_psnames = free_psnames_; \
- clazz->get_kerning = get_kerning_; \
- clazz->load_font_dir = load_font_dir_; \
- clazz->load_hmtx = load_hmtx_; \
- clazz->load_eblc = load_eblc_; \
- clazz->free_eblc = free_eblc_; \
- clazz->set_sbit_strike = set_sbit_strike_; \
- clazz->load_strike_metrics = load_strike_metrics_; \
- clazz->get_metrics = get_metrics_; \
- clazz->get_name = get_name_; \
- clazz->get_name_id = get_name_id_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
FT_END_HEADER
diff --git a/freetype/include/freetype/internal/t1types.h b/freetype/include/freetype/internal/t1types.h
index 2118e336..d94c8c12 100644
--- a/freetype/include/freetype/internal/t1types.h
+++ b/freetype/include/freetype/internal/t1types.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* t1types.h */
-/* */
-/* Basic Type1/Type2 type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1types.h
+ *
+ * Basic Type1/Type2 type definitions and interface (specification
+ * only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -45,36 +45,39 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* T1_EncodingRec */
- /* */
- /* <Description> */
- /* A structure modeling a custom encoding. */
- /* */
- /* <Fields> */
- /* num_chars :: The number of character codes in the encoding. */
- /* Usually 256. */
- /* */
- /* code_first :: The lowest valid character code in the encoding. */
- /* */
- /* code_last :: The highest valid character code in the encoding */
- /* + 1. When equal to code_first there are no valid */
- /* character codes. */
- /* */
- /* char_index :: An array of corresponding glyph indices. */
- /* */
- /* char_name :: An array of corresponding glyph names. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * T1_EncodingRec
+ *
+ * @description:
+ * A structure modeling a custom encoding.
+ *
+ * @fields:
+ * num_chars ::
+ * The number of character codes in the encoding. Usually 256.
+ *
+ * code_first ::
+ * The lowest valid character code in the encoding.
+ *
+ * code_last ::
+ * The highest valid character code in the encoding + 1. When equal to
+ * code_first there are no valid character codes.
+ *
+ * char_index ::
+ * An array of corresponding glyph indices.
+ *
+ * char_name ::
+ * An array of corresponding glyph names.
+ */
typedef struct T1_EncodingRecRec_
{
FT_Int num_chars;
FT_Int code_first;
FT_Int code_last;
- FT_UShort* char_index;
- FT_String** char_name;
+ FT_UShort* char_index;
+ const FT_String** char_name;
} T1_EncodingRec, *T1_Encoding;
diff --git a/freetype/include/freetype/internal/tttypes.h b/freetype/include/freetype/internal/tttypes.h
index 10dd336a..23db240e 100644
--- a/freetype/include/freetype/internal/tttypes.h
+++ b/freetype/include/freetype/internal/tttypes.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* tttypes.h */
-/* */
-/* Basic SFNT/TrueType type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * tttypes.h
+ *
+ * Basic SFNT/TrueType type definitions and interface (specification
+ * only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -24,6 +24,7 @@
#include <ft2build.h>
#include FT_TRUETYPE_TABLES_H
#include FT_INTERNAL_OBJECTS_H
+#include FT_COLOR_H
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_MULTIPLE_MASTERS_H
@@ -46,27 +47,30 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -77,25 +81,30 @@ FT_BEGIN_HEADER
} 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'. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -109,24 +118,28 @@ FT_BEGIN_HEADER
} 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). */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
@@ -137,89 +150,22 @@ FT_BEGIN_HEADER
} TT_TableRec, *TT_Table;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* WOFF_HeaderRec */
- /* */
- /* <Description> */
- /* WOFF file format header. */
- /* */
- /* <Fields> */
- /* See */
- /* */
- /* https://www.w3.org/TR/WOFF/#WOFFHeader */
- /* */
- typedef struct WOFF_HeaderRec_
- {
- FT_ULong signature;
- FT_ULong flavor;
- FT_ULong length;
- FT_UShort num_tables;
- FT_UShort reserved;
- FT_ULong totalSfntSize;
- FT_UShort majorVersion;
- FT_UShort minorVersion;
- FT_ULong metaOffset;
- FT_ULong metaLength;
- FT_ULong metaOrigLength;
- FT_ULong privOffset;
- FT_ULong privLength;
-
- } WOFF_HeaderRec, *WOFF_Header;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* WOFF_TableRec */
- /* */
- /* <Description> */
- /* This structure describes a given table of a WOFF font. */
- /* */
- /* <Fields> */
- /* Tag :: A four-bytes tag describing the table. */
- /* */
- /* Offset :: The offset of the table from the start of the WOFF */
- /* font in its resource. */
- /* */
- /* CompLength :: Compressed table length (in bytes). */
- /* */
- /* OrigLength :: Uncompressed table length (in bytes). */
- /* */
- /* CheckSum :: The table checksum. This value can be ignored. */
- /* */
- /* OrigOffset :: The uncompressed table file offset. This value gets */
- /* computed while constructing the (uncompressed) SFNT */
- /* header. It is not contained in the WOFF file. */
- /* */
- typedef struct WOFF_TableRec_
- {
- FT_ULong Tag; /* table ID */
- FT_ULong Offset; /* table file offset */
- FT_ULong CompLength; /* compressed table length */
- FT_ULong OrigLength; /* uncompressed table length */
- FT_ULong CheckSum; /* uncompressed checksum */
-
- FT_ULong OrigOffset; /* uncompressed table file offset */
- /* (not in the WOFF file) */
- } WOFF_TableRec, *WOFF_Table;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_LongMetricsRec */
- /* */
- /* <Description> */
- /* A structure modeling the long metrics of the `hmtx' and `vmtx' */
- /* TrueType tables. The values are expressed in font units. */
- /* */
- /* <Fields> */
- /* advance :: The advance width or height for the glyph. */
- /* */
- /* bearing :: The left-side or top-side bearing for the glyph. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -228,45 +174,51 @@ FT_BEGIN_HEADER
} TT_LongMetricsRec, *TT_LongMetrics;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_ShortMetrics */
- /* */
- /* <Description> */
- /* A simple type to model the short metrics of the `hmtx' and `vmtx' */
- /* tables. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * TT_ShortMetrics
+ *
+ * @description:
+ * A simple type to model the short metrics of the 'hmtx' and 'vmtx'
+ * tables.
+ */
typedef FT_Short TT_ShortMetrics;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_NameRec */
- /* */
- /* <Description> */
- /* A structure modeling TrueType name records. Name records are used */
- /* to store important strings like family name, style name, */
- /* copyright, etc. in _localized_ versions (i.e., language, encoding, */
- /* etc). */
- /* */
- /* <Fields> */
- /* platformID :: The ID of the name's encoding platform. */
- /* */
- /* encodingID :: The platform-specific ID for the name's encoding. */
- /* */
- /* languageID :: The platform-specific ID for the name's language. */
- /* */
- /* nameID :: The ID specifying what kind of name this is. */
- /* */
- /* stringLength :: The length of the string in bytes. */
- /* */
- /* stringOffset :: The offset to the string in the `name' table. */
- /* */
- /* string :: A pointer to the string's bytes. Note that these */
- /* are usually UTF-16 encoded characters. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_NameRec
+ *
+ * @description:
+ * A structure modeling TrueType name records. Name records are used to
+ * store important strings like family name, style name, copyright,
+ * etc. in _localized_ versions (i.e., language, encoding, etc).
+ *
+ * @fields:
+ * platformID ::
+ * The ID of the name's encoding platform.
+ *
+ * encodingID ::
+ * The platform-specific ID for the name's encoding.
+ *
+ * languageID ::
+ * The platform-specific ID for the name's language.
+ *
+ * nameID ::
+ * The ID specifying what kind of name this is.
+ *
+ * stringLength ::
+ * The length of the string in bytes.
+ *
+ * stringOffset ::
+ * The offset to the string in the 'name' table.
+ *
+ * string ::
+ * A pointer to the string's bytes. Note that these are usually UTF-16
+ * encoded characters.
+ */
typedef struct TT_NameRec_
{
FT_UShort platformID;
@@ -284,23 +236,26 @@ FT_BEGIN_HEADER
} TT_NameRec, *TT_Name;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_LangTagRec */
- /* */
- /* <Description> */
- /* A structure modeling language tag records in SFNT `name' tables, */
- /* introduced in OpenType version 1.6. */
- /* */
- /* <Fields> */
- /* stringLength :: The length of the string in bytes. */
- /* */
- /* stringOffset :: The offset to the string in the `name' table. */
- /* */
- /* string :: A pointer to the string's bytes. Note that these */
- /* are UTF-16BE encoded characters. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_LangTagRec
+ *
+ * @description:
+ * A structure modeling language tag records in SFNT 'name' tables,
+ * introduced in OpenType version 1.6.
+ *
+ * @fields:
+ * stringLength ::
+ * The length of the string in bytes.
+ *
+ * stringOffset ::
+ * The offset to the string in the 'name' table.
+ *
+ * string ::
+ * A pointer to the string's bytes. Note that these are UTF-16BE
+ * encoded characters.
+ */
typedef struct TT_LangTagRec_
{
FT_UShort stringLength;
@@ -314,30 +269,36 @@ FT_BEGIN_HEADER
} TT_LangTagRec, *TT_LangTag;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_NameTableRec */
- /* */
- /* <Description> */
- /* A structure modeling the TrueType name table. */
- /* */
- /* <Fields> */
- /* format :: The format of the name table. */
- /* */
- /* numNameRecords :: The number of names in table. */
- /* */
- /* storageOffset :: The offset of the name table in the `name' */
- /* TrueType table. */
- /* */
- /* names :: An array of name records. */
- /* */
- /* numLangTagRecords :: The number of language tags in table. */
- /* */
- /* langTags :: An array of language tag records. */
- /* */
- /* stream :: The file's input stream. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_NameTableRec
+ *
+ * @description:
+ * A structure modeling the TrueType name table.
+ *
+ * @fields:
+ * format ::
+ * The format of the name table.
+ *
+ * numNameRecords ::
+ * The number of names in table.
+ *
+ * storageOffset ::
+ * The offset of the name table in the 'name' TrueType table.
+ *
+ * names ::
+ * An array of name records.
+ *
+ * numLangTagRecords ::
+ * The number of language tags in table.
+ *
+ * langTags ::
+ * An array of language tag records.
+ *
+ * stream ::
+ * The file's input stream.
+ */
typedef struct TT_NameTableRec_
{
FT_UShort format;
@@ -364,21 +325,23 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -391,22 +354,25 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -429,33 +395,41 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_SBit_MetricsRec
+ *
+ * @description:
+ * A structure used to hold the big metrics of a given glyph bitmap in a
+ * TrueType or OpenType font. These are usually found in the 'EBDT'
+ * (Microsoft) or 'bloc' (Apple) table.
+ *
+ * @fields:
+ * height ::
+ * The glyph height in pixels.
+ *
+ * width ::
+ * The glyph width in pixels.
+ *
+ * horiBearingX ::
+ * The horizontal left bearing.
+ *
+ * horiBearingY ::
+ * The horizontal top bearing.
+ *
+ * horiAdvance ::
+ * The horizontal advance.
+ *
+ * vertBearingX ::
+ * The vertical left bearing.
+ *
+ * vertBearingY ::
+ * The vertical top bearing.
+ *
+ * vertAdvance ::
+ * The vertical advance.
+ */
typedef struct TT_SBit_MetricsRec_
{
FT_UShort height;
@@ -472,27 +446,32 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -505,57 +484,60 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -573,43 +555,53 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -631,47 +623,55 @@ FT_BEGIN_HEADER
} TT_SBit_RangeRec, *TT_SBit_Range;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_StrikeRec */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap strike in the `EBLC' */
- /* (Microsoft) or `bloc' (Apple) tables. */
- /* */
- /* <Fields> */
- /* num_index_ranges :: The number of index ranges. */
- /* */
- /* index_ranges :: An array of glyph index ranges. */
- /* */
- /* color_ref :: Unused. `color_ref' is put in for future */
- /* enhancements, but these fields are already */
- /* in use by other platforms (e.g. Newton). */
- /* For details, please see */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
- /* */
- /* hori :: The line metrics for horizontal layouts. */
- /* */
- /* vert :: The line metrics for vertical layouts. */
- /* */
- /* start_glyph :: The lowest glyph index for this strike. */
- /* */
- /* end_glyph :: The highest glyph index for this strike. */
- /* */
- /* x_ppem :: The number of horizontal pixels per EM. */
- /* */
- /* y_ppem :: The number of vertical pixels per EM. */
- /* */
- /* bit_depth :: The bit depth. Valid values are 1, 2, 4, */
- /* and 8. */
- /* */
- /* flags :: Is this a vertical or horizontal strike? For */
- /* details, please see */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_SBit_StrikeRec
+ *
+ * @description:
+ * A structure used describe a given bitmap strike in the 'EBLC'
+ * (Microsoft) or 'bloc' (Apple) tables.
+ *
+ * @fields:
+ * num_index_ranges ::
+ * The number of index ranges.
+ *
+ * index_ranges ::
+ * An array of glyph index ranges.
+ *
+ * color_ref ::
+ * Unused. `color_ref` is put in for future enhancements, but these
+ * fields are already in use by other platforms (e.g. Newton). For
+ * details, please see
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
+ *
+ * hori ::
+ * The line metrics for horizontal layouts.
+ *
+ * vert ::
+ * The line metrics for vertical layouts.
+ *
+ * start_glyph ::
+ * The lowest glyph index for this strike.
+ *
+ * end_glyph ::
+ * The highest glyph index for this strike.
+ *
+ * x_ppem ::
+ * The number of horizontal pixels per EM.
+ *
+ * y_ppem ::
+ * The number of vertical pixels per EM.
+ *
+ * bit_depth ::
+ * The bit depth. Valid values are 1, 2, 4, and 8.
+ *
+ * flags ::
+ * Is this a vertical or horizontal strike? For details, please see
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
+ */
typedef struct TT_SBit_StrikeRec_
{
FT_Int num_ranges;
@@ -695,21 +695,24 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -719,28 +722,34 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -768,24 +777,28 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -796,21 +809,22 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -819,21 +833,24 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -879,25 +896,25 @@ FT_BEGIN_HEADER
/*
* 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.
+ * 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
+ * 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
+ * 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.
+ * 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
@@ -945,31 +962,30 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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'. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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). */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -981,31 +997,34 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1013,34 +1032,36 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1048,36 +1069,38 @@ FT_BEGIN_HEADER
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
@@ -1124,270 +1147,319 @@ FT_BEGIN_HEADER
#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 )
- /*************************************************************************/
- /* */
- /* TrueType Face Type */
- /* */
- /* <Struct> */
- /* TT_Face */
- /* */
- /* <Description> */
- /* The TrueType face class. These objects model the resolution and */
- /* point-size independent data found in a TrueType font file. */
- /* */
- /* <Fields> */
- /* root :: The base FT_Face structure, managed by the */
- /* base layer. */
- /* */
- /* ttc_header :: The TrueType collection header, used when */
- /* the file is a `ttc' rather than a `ttf'. */
- /* For ordinary font files, the field */
- /* `ttc_header.count' is set to 0. */
- /* */
- /* format_tag :: The font format tag. */
- /* */
- /* num_tables :: The number of TrueType tables in this font */
- /* file. */
- /* */
- /* dir_tables :: The directory of TrueType tables for this */
- /* font file. */
- /* */
- /* header :: The font's font header (`head' table). */
- /* Read on font opening. */
- /* */
- /* horizontal :: The font's horizontal header (`hhea' */
- /* table). This field also contains the */
- /* associated horizontal metrics table */
- /* (`hmtx'). */
- /* */
- /* max_profile :: The font's maximum profile table. Read on */
- /* font opening. Note that some maximum */
- /* values cannot be taken directly from this */
- /* table. We thus define additional fields */
- /* below to hold the computed maxima. */
- /* */
- /* vertical_info :: A boolean which is set when the font file */
- /* contains vertical metrics. If not, the */
- /* value of the `vertical' field is */
- /* undefined. */
- /* */
- /* vertical :: The font's vertical header (`vhea' table). */
- /* This field also contains the associated */
- /* vertical metrics table (`vmtx'), if found. */
- /* IMPORTANT: The contents of this field is */
- /* undefined if the `vertical_info' field is */
- /* unset. */
- /* */
- /* num_names :: The number of name records within this */
- /* TrueType font. */
- /* */
- /* name_table :: The table of name records (`name'). */
- /* */
- /* os2 :: The font's OS/2 table (`OS/2'). */
- /* */
- /* postscript :: The font's PostScript table (`post' */
- /* table). The PostScript glyph names are */
- /* not loaded by the driver on face opening. */
- /* See the `ttpost' module for more details. */
- /* */
- /* cmap_table :: Address of the face's `cmap' SFNT table */
- /* in memory (it's an extracted frame). */
- /* */
- /* cmap_size :: The size in bytes of the `cmap_table' */
- /* described above. */
- /* */
- /* goto_table :: A function called by each TrueType table */
- /* loader to position a stream's cursor to */
- /* the start of a given table according to */
- /* its tag. It defaults to TT_Goto_Face but */
- /* can be different for strange formats (e.g. */
- /* Type 42). */
- /* */
- /* access_glyph_frame :: A function used to access the frame of a */
- /* given glyph within the face's font file. */
- /* */
- /* forget_glyph_frame :: A function used to forget the frame of a */
- /* given glyph when all data has been loaded. */
- /* */
- /* read_glyph_header :: A function used to read a glyph header. */
- /* It must be called between an `access' and */
- /* `forget'. */
- /* */
- /* read_simple_glyph :: A function used to read a simple glyph. */
- /* It must be called after the header was */
- /* read, and before the `forget'. */
- /* */
- /* read_composite_glyph :: A function used to read a composite glyph. */
- /* It must be called after the header was */
- /* read, and before the `forget'. */
- /* */
- /* sfnt :: A pointer to the SFNT service. */
- /* */
- /* psnames :: A pointer to the PostScript names service. */
- /* */
- /* mm :: A pointer to the Multiple Masters service. */
- /* */
- /* var :: A pointer to the Metrics Variations */
- /* service. */
- /* */
- /* hdmx :: The face's horizontal device metrics */
- /* (`hdmx' table). This table is optional in */
- /* TrueType/OpenType fonts. */
- /* */
- /* gasp :: The grid-fitting and scaling properties */
- /* table (`gasp'). This table is optional in */
- /* TrueType/OpenType fonts. */
- /* */
- /* pclt :: The `pclt' SFNT table. */
- /* */
- /* num_sbit_scales :: The number of sbit scales for this font. */
- /* */
- /* sbit_scales :: Array of sbit scales embedded in this */
- /* font. This table is optional in a */
- /* TrueType/OpenType font. */
- /* */
- /* postscript_names :: A table used to store the Postscript names */
- /* of the glyphs for this font. See the */
- /* file `ttconfig.h' for comments on the */
- /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. */
- /* */
- /* font_program_size :: Size in bytecodes of the face's font */
- /* program. 0 if none defined. Ignored for */
- /* Type 2 fonts. */
- /* */
- /* font_program :: The face's font program (bytecode stream) */
- /* executed at load time, also used during */
- /* glyph rendering. Comes from the `fpgm' */
- /* table. Ignored for Type 2 font fonts. */
- /* */
- /* cvt_program_size :: The size in bytecodes of the face's cvt */
- /* program. Ignored for Type 2 fonts. */
- /* */
- /* cvt_program :: The face's cvt program (bytecode stream) */
- /* executed each time an instance/size is */
- /* changed/reset. Comes from the `prep' */
- /* table. Ignored for Type 2 fonts. */
- /* */
- /* cvt_size :: Size of the control value table (in */
- /* entries). Ignored for Type 2 fonts. */
- /* */
- /* cvt :: The face's original control value table. */
- /* Coordinates are expressed in unscaled font */
- /* units. Comes from the `cvt ' table. */
- /* Ignored for Type 2 fonts. */
- /* */
- /* interpreter :: A pointer to the TrueType bytecode */
- /* interpreters field is also used to hook */
- /* the debugger in `ttdebug'. */
- /* */
- /* extra :: Reserved for third-party font drivers. */
- /* */
- /* postscript_name :: The PS name of the font. Used by the */
- /* postscript name service. */
- /* */
- /* glyf_len :: The length of the `glyf' table. Needed */
- /* for malformed `loca' tables. */
- /* */
- /* glyf_offset :: The file offset of the `glyf' table. */
- /* */
- /* is_cff2 :: Set if the font format is CFF2. */
- /* */
- /* doblend :: A boolean which is set if the font should */
- /* be blended (this is for GX var). */
- /* */
- /* blend :: Contains the data needed to control GX */
- /* variation tables (rather like Multiple */
- /* Master data). */
- /* */
- /* variation_support :: Flags that indicate which OpenType */
- /* functionality related to font variation */
- /* support is present, valid, and usable. */
- /* For example, TT_FACE_FLAG_VAR_FVAR is only */
- /* set if we have at least one design axis. */
- /* */
- /* var_postscript_prefix :: */
- /* The PostScript name prefix needed for */
- /* constructing a variation font instance's */
- /* PS name . */
- /* */
- /* var_postscript_prefix_len :: */
- /* The length of the `var_postscript_prefix' */
- /* string. */
- /* */
- /* horz_metrics_size :: The size of the `hmtx' table. */
- /* */
- /* vert_metrics_size :: The size of the `vmtx' table. */
- /* */
- /* num_locations :: The number of glyph locations in this */
- /* TrueType file. This should be */
- /* identical to the number of glyphs. */
- /* Ignored for Type 2 fonts. */
- /* */
- /* glyph_locations :: An array of longs. These are offsets to */
- /* glyph data within the `glyf' table. */
- /* Ignored for Type 2 font faces. */
- /* */
- /* hdmx_table :: A pointer to the `hdmx' table. */
- /* */
- /* hdmx_table_size :: The size of the `hdmx' table. */
- /* */
- /* hdmx_record_count :: The number of hdmx records. */
- /* */
- /* hdmx_record_size :: The size of a single hdmx record. */
- /* */
- /* hdmx_record_sizes :: An array holding the ppem sizes available */
- /* in the `hdmx' table. */
- /* */
- /* sbit_table :: A pointer to the font's embedded bitmap */
- /* location table. */
- /* */
- /* sbit_table_size :: The size of `sbit_table'. */
- /* */
- /* sbit_table_type :: The sbit table type (CBLC, sbix, etc.). */
- /* */
- /* sbit_num_strikes :: The number of sbit strikes exposed by */
- /* FreeType's API, omitting invalid strikes. */
- /* */
- /* sbit_strike_map :: A mapping between the strike indices */
- /* exposed by the API and the indices used in */
- /* the font's sbit table. */
- /* */
- /* kern_table :: A pointer to the `kern' table. */
- /* */
- /* kern_table_size :: The size of the `kern' table. */
- /* */
- /* num_kern_tables :: The number of supported kern subtables */
- /* (up to 32; FreeType recognizes only */
- /* horizontal ones with format 0). */
- /* */
- /* kern_avail_bits :: The availability status of kern subtables; */
- /* if bit n is set, table n is available. */
- /* */
- /* kern_order_bits :: The sortedness status of kern subtables; */
- /* if bit n is set, table n is sorted. */
- /* */
- /* bdf :: Data related to an SFNT font's `bdf' */
- /* table; see `tttypes.h'. */
- /* */
- /* horz_metrics_offset :: The file offset of the `hmtx' table. */
- /* */
- /* vert_metrics_offset :: The file offset of the `vmtx' table. */
- /* */
- /* sph_found_func_flags :: Flags identifying special bytecode */
- /* functions (used by the v38 implementation */
- /* of the bytecode interpreter). */
- /* */
- /* sph_compatibility_mode :: */
- /* This flag is set if we are in ClearType */
- /* backward compatibility mode (used by the */
- /* v38 implementation of the bytecode */
- /* interpreter). */
- /* */
- /* ebdt_start :: The file offset of the sbit data table */
- /* (CBDT, bdat, etc.). */
- /* */
- /* ebdt_size :: The size of the sbit data table. */
- /* */
+ /**************************************************************************
+ *
+ * TrueType Face Type
+ *
+ * @struct:
+ * TT_Face
+ *
+ * @description:
+ * The TrueType face class. These objects model the resolution and
+ * point-size independent data found in a TrueType font file.
+ *
+ * @fields:
+ * root ::
+ * The base FT_Face structure, managed by the base layer.
+ *
+ * ttc_header ::
+ * The TrueType collection header, used when the file is a 'ttc' rather
+ * than a 'ttf'. For ordinary font files, the field `ttc_header.count`
+ * is set to 0.
+ *
+ * format_tag ::
+ * The font format tag.
+ *
+ * num_tables ::
+ * The number of TrueType tables in this font file.
+ *
+ * dir_tables ::
+ * The directory of TrueType tables for this font file.
+ *
+ * header ::
+ * The font's font header ('head' table). Read on font opening.
+ *
+ * horizontal ::
+ * The font's horizontal header ('hhea' table). This field also
+ * contains the associated horizontal metrics table ('hmtx').
+ *
+ * max_profile ::
+ * The font's maximum profile table. Read on font opening. Note that
+ * some maximum values cannot be taken directly from this table. We
+ * thus define additional fields below to hold the computed maxima.
+ *
+ * vertical_info ::
+ * A boolean which is set when the font file contains vertical metrics.
+ * If not, the value of the 'vertical' field is undefined.
+ *
+ * vertical ::
+ * The font's vertical header ('vhea' table). This field also contains
+ * the associated vertical metrics table ('vmtx'), if found.
+ * IMPORTANT: The contents of this field is undefined if the
+ * `vertical_info` field is unset.
+ *
+ * num_names ::
+ * The number of name records within this TrueType font.
+ *
+ * name_table ::
+ * The table of name records ('name').
+ *
+ * os2 ::
+ * The font's OS/2 table ('OS/2').
+ *
+ * postscript ::
+ * The font's PostScript table ('post' table). The PostScript glyph
+ * names are not loaded by the driver on face opening. See the
+ * 'ttpost' module for more details.
+ *
+ * cmap_table ::
+ * Address of the face's 'cmap' SFNT table in memory (it's an extracted
+ * frame).
+ *
+ * cmap_size ::
+ * The size in bytes of the `cmap_table` described above.
+ *
+ * goto_table ::
+ * A function called by each TrueType table loader to position a
+ * stream's cursor to the start of a given table according to its tag.
+ * It defaults to TT_Goto_Face but can be different for strange formats
+ * (e.g. Type 42).
+ *
+ * access_glyph_frame ::
+ * A function used to access the frame of a given glyph within the
+ * face's font file.
+ *
+ * forget_glyph_frame ::
+ * A function used to forget the frame of a given glyph when all data
+ * has been loaded.
+ *
+ * read_glyph_header ::
+ * A function used to read a glyph header. It must be called between
+ * an 'access' and 'forget'.
+ *
+ * read_simple_glyph ::
+ * A function used to read a simple glyph. It must be called after the
+ * header was read, and before the 'forget'.
+ *
+ * read_composite_glyph ::
+ * A function used to read a composite glyph. It must be called after
+ * the header was read, and before the 'forget'.
+ *
+ * sfnt ::
+ * A pointer to the SFNT service.
+ *
+ * psnames ::
+ * A pointer to the PostScript names service.
+ *
+ * mm ::
+ * A pointer to the Multiple Masters service.
+ *
+ * var ::
+ * A pointer to the Metrics Variations service.
+ *
+ * hdmx ::
+ * The face's horizontal device metrics ('hdmx' table). This table is
+ * optional in TrueType/OpenType fonts.
+ *
+ * gasp ::
+ * The grid-fitting and scaling properties table ('gasp'). This table
+ * is optional in TrueType/OpenType fonts.
+ *
+ * pclt ::
+ * The 'pclt' SFNT table.
+ *
+ * num_sbit_scales ::
+ * The number of sbit scales for this font.
+ *
+ * sbit_scales ::
+ * Array of sbit scales embedded in this font. This table is optional
+ * in a TrueType/OpenType font.
+ *
+ * postscript_names ::
+ * A table used to store the Postscript names of the glyphs for this
+ * font. See the file `ttconfig.h` for comments on the
+ * TT_CONFIG_OPTION_POSTSCRIPT_NAMES option.
+ *
+ * palette_data ::
+ * Some fields from the 'CPAL' table that are directly indexed.
+ *
+ * palette_index ::
+ * The current palette index, as set by @FT_Palette_Select.
+ *
+ * palette ::
+ * An array containing the current palette's colors.
+ *
+ * have_foreground_color ::
+ * There was a call to @FT_Palette_Set_Foreground_Color.
+ *
+ * foreground_color ::
+ * The current foreground color corresponding to 'CPAL' color index
+ * 0xFFFF. Only valid if `have_foreground_color` is set.
+ *
+ * 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 (in 26.6 format). Comes from the 'cvt~'
+ * table. Ignored for Type 2 fonts.
+ *
+ * If varied by the `CVAR' table, non-integer values are possible.
+ *
+ * interpreter ::
+ * A pointer to the TrueType bytecode interpreters field is also used
+ * to hook the debugger in 'ttdebug'.
+ *
+ * extra ::
+ * Reserved for third-party font drivers.
+ *
+ * postscript_name ::
+ * The PS name of the font. Used by the postscript name service.
+ *
+ * glyf_len ::
+ * The length of the 'glyf' table. Needed for malformed 'loca' tables.
+ *
+ * glyf_offset ::
+ * The file offset of the 'glyf' table.
+ *
+ * is_cff2 ::
+ * Set if the font format is CFF2.
+ *
+ * doblend ::
+ * A boolean which is set if the font should be blended (this is for GX
+ * var).
+ *
+ * blend ::
+ * Contains the data needed to control GX variation tables (rather like
+ * Multiple Master data).
+ *
+ * variation_support ::
+ * Flags that indicate which OpenType functionality related to font
+ * variation support is present, valid, and usable. For example,
+ * TT_FACE_FLAG_VAR_FVAR is only set if we have at least one design
+ * axis.
+ *
+ * var_postscript_prefix ::
+ * The PostScript name prefix needed for constructing a variation font
+ * instance's PS name .
+ *
+ * var_postscript_prefix_len ::
+ * The length of the `var_postscript_prefix` string.
+ *
+ * horz_metrics_size ::
+ * The size of the 'hmtx' table.
+ *
+ * vert_metrics_size ::
+ * The size of the 'vmtx' table.
+ *
+ * num_locations ::
+ * The number of glyph locations in this TrueType file. This should be
+ * identical to the number of glyphs. Ignored for Type 2 fonts.
+ *
+ * glyph_locations ::
+ * An array of longs. These are offsets to glyph data within the
+ * 'glyf' table. Ignored for Type 2 font faces.
+ *
+ * hdmx_table ::
+ * A pointer to the 'hdmx' table.
+ *
+ * hdmx_table_size ::
+ * The size of the 'hdmx' table.
+ *
+ * hdmx_record_count ::
+ * The number of hdmx records.
+ *
+ * hdmx_record_size ::
+ * The size of a single hdmx record.
+ *
+ * hdmx_record_sizes ::
+ * An array holding the ppem sizes available in the 'hdmx' table.
+ *
+ * sbit_table ::
+ * A pointer to the font's embedded bitmap location table.
+ *
+ * sbit_table_size ::
+ * The size of `sbit_table`.
+ *
+ * sbit_table_type ::
+ * The sbit table type (CBLC, sbix, etc.).
+ *
+ * sbit_num_strikes ::
+ * The number of sbit strikes exposed by FreeType's API, omitting
+ * invalid strikes.
+ *
+ * sbit_strike_map ::
+ * A mapping between the strike indices exposed by the API and the
+ * indices used in the font's sbit table.
+ *
+ * cpal ::
+ * A pointer to data related to the 'CPAL' table. `NULL` if the table
+ * is not available.
+ *
+ * colr ::
+ * A pointer to data related to the 'COLR' table. `NULL` if the table
+ * is not available.
+ *
+ * kern_table ::
+ * A pointer to the 'kern' table.
+ *
+ * kern_table_size ::
+ * The size of the 'kern' table.
+ *
+ * num_kern_tables ::
+ * The number of supported kern subtables (up to 32; FreeType
+ * recognizes only horizontal ones with format 0).
+ *
+ * kern_avail_bits ::
+ * The availability status of kern subtables; if bit n is set, table n
+ * is available.
+ *
+ * kern_order_bits ::
+ * The sortedness status of kern subtables; if bit n is set, table n is
+ * sorted.
+ *
+ * bdf ::
+ * Data related to an SFNT font's 'bdf' table; see `tttypes.h`.
+ *
+ * horz_metrics_offset ::
+ * The file offset of the 'hmtx' table.
+ *
+ * vert_metrics_offset ::
+ * The file offset of the 'vmtx' table.
+ *
+ * sph_found_func_flags ::
+ * Flags identifying special bytecode functions (used by the v38
+ * implementation of the bytecode interpreter).
+ *
+ * sph_compatibility_mode ::
+ * This flag is set if we are in ClearType backward compatibility mode
+ * (used by the v38 implementation of the bytecode interpreter).
+ *
+ * ebdt_start ::
+ * The file offset of the sbit data table (CBDT, bdat, etc.).
+ *
+ * ebdt_size ::
+ * The size of the sbit data table.
+ */
typedef struct TT_FaceRec_
{
FT_FaceRec root;
@@ -1445,11 +1517,11 @@ FT_BEGIN_HEADER
void* psaux;
- /***********************************************************************/
- /* */
- /* Optional TrueType/OpenType tables */
- /* */
- /***********************************************************************/
+ /************************************************************************
+ *
+ * Optional TrueType/OpenType tables
+ *
+ */
/* grid-fitting and scaling table */
TT_GaspRec gasp; /* the `gasp' table */
@@ -1464,12 +1536,19 @@ FT_BEGIN_HEADER
/* postscript names table */
TT_Post_NamesRec postscript_names;
+ /* glyph colors */
+ FT_Palette_Data palette_data; /* since 2.10 */
+ FT_UShort palette_index;
+ FT_Color* palette;
+ FT_Bool have_foreground_color;
+ FT_Color foreground_color;
+
- /***********************************************************************/
- /* */
- /* TrueType-specific fields (ignored by the CFF driver) */
- /* */
- /***********************************************************************/
+ /************************************************************************
+ *
+ * TrueType-specific fields (ignored by the CFF driver)
+ *
+ */
/* the font program, if any */
FT_ULong font_program_size;
@@ -1481,19 +1560,19 @@ FT_BEGIN_HEADER
/* the original, unscaled, control value table */
FT_ULong cvt_size;
- FT_Short* cvt;
+ FT_Int32* cvt;
/* A pointer to the bytecode interpreter to use. This is also */
/* used to hook the debugger for the `ttdebug' utility. */
TT_Interpreter interpreter;
- /***********************************************************************/
- /* */
- /* Other tables or fields. This is used by derivative formats like */
- /* OpenType. */
- /* */
- /***********************************************************************/
+ /************************************************************************
+ *
+ * Other tables or fields. This is used by derivative formats like
+ * OpenType.
+ *
+ */
FT_Generic extra;
@@ -1562,40 +1641,53 @@ FT_BEGIN_HEADER
FT_ULong ebdt_size;
#endif
+ /* since 2.10 */
+ void* cpal;
+ void* colr;
+
} TT_FaceRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_GlyphZoneRec */
- /* */
- /* <Description> */
- /* A glyph zone is used to load, scale and hint glyph outline */
- /* coordinates. */
- /* */
- /* <Fields> */
- /* memory :: A handle to the memory manager. */
- /* */
- /* max_points :: The maximum size in points of the zone. */
- /* */
- /* max_contours :: Max size in links contours of the zone. */
- /* */
- /* n_points :: The current number of points in the zone. */
- /* */
- /* n_contours :: The current number of contours in the zone. */
- /* */
- /* org :: The original glyph coordinates (font */
- /* units/scaled). */
- /* */
- /* cur :: The current glyph coordinates (scaled/hinted). */
- /* */
- /* tags :: The point control tags. */
- /* */
- /* contours :: The contours end points. */
- /* */
- /* first_point :: Offset of the current subglyph's first point. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_GlyphZoneRec
+ *
+ * @description:
+ * A glyph zone is used to load, scale and hint glyph outline
+ * coordinates.
+ *
+ * @fields:
+ * memory ::
+ * A handle to the memory manager.
+ *
+ * max_points ::
+ * The maximum size in points of the zone.
+ *
+ * max_contours ::
+ * Max size in links contours of the zone.
+ *
+ * n_points ::
+ * The current number of points in the zone.
+ *
+ * n_contours ::
+ * The current number of contours in the zone.
+ *
+ * org ::
+ * The original glyph coordinates (font units/scaled).
+ *
+ * cur ::
+ * The current glyph coordinates (scaled/hinted).
+ *
+ * tags ::
+ * The point control tags.
+ *
+ * contours ::
+ * The contours end points.
+ *
+ * first_point ::
+ * Offset of the current subglyph's first point.
+ */
typedef struct TT_GlyphZoneRec_
{
FT_Memory memory;
@@ -1620,14 +1712,14 @@ FT_BEGIN_HEADER
typedef struct TT_ExecContextRec_* TT_ExecContext;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_Size */
- /* */
- /* <Description> */
- /* A handle to a TrueType size object. */
- /* */
+ /**************************************************************************
+ *
+ * @type:
+ * TT_Size
+ *
+ * @description:
+ * A handle to a TrueType size object.
+ */
typedef struct TT_SizeRec_* TT_Size;
diff --git a/freetype/include/freetype/internal/wofftypes.h b/freetype/include/freetype/internal/wofftypes.h
new file mode 100644
index 00000000..ba55bf88
--- /dev/null
+++ b/freetype/include/freetype/internal/wofftypes.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+ *
+ * wofftypes.h
+ *
+ * Basic WOFF/WOFF2 type definitions and interface (specification
+ * only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef WOFFTYPES_H_
+#define WOFFTYPES_H_
+
+
+#include <ft2build.h>
+#include FT_TRUETYPE_TABLES_H
+#include FT_INTERNAL_OBJECTS_H
+
+
+FT_BEGIN_HEADER
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF_HeaderRec
+ *
+ * @description:
+ * WOFF file format header.
+ *
+ * @fields:
+ * See
+ *
+ * https://www.w3.org/TR/WOFF/#WOFFHeader
+ */
+ typedef struct WOFF_HeaderRec_
+ {
+ FT_ULong signature;
+ FT_ULong flavor;
+ FT_ULong length;
+ FT_UShort num_tables;
+ FT_UShort reserved;
+ FT_ULong totalSfntSize;
+ FT_UShort majorVersion;
+ FT_UShort minorVersion;
+ FT_ULong metaOffset;
+ FT_ULong metaLength;
+ FT_ULong metaOrigLength;
+ FT_ULong privOffset;
+ FT_ULong privLength;
+
+ } WOFF_HeaderRec, *WOFF_Header;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF_TableRec
+ *
+ * @description:
+ * This structure describes a given table of a WOFF font.
+ *
+ * @fields:
+ * Tag ::
+ * A four-bytes tag describing the table.
+ *
+ * Offset ::
+ * The offset of the table from the start of the WOFF font in its
+ * resource.
+ *
+ * CompLength ::
+ * Compressed table length (in bytes).
+ *
+ * OrigLength ::
+ * Uncompressed table length (in bytes).
+ *
+ * CheckSum ::
+ * The table checksum. This value can be ignored.
+ *
+ * OrigOffset ::
+ * The uncompressed table file offset. This value gets computed while
+ * constructing the (uncompressed) SFNT header. It is not contained in
+ * the WOFF file.
+ */
+ typedef struct WOFF_TableRec_
+ {
+ FT_ULong Tag; /* table ID */
+ FT_ULong Offset; /* table file offset */
+ FT_ULong CompLength; /* compressed table length */
+ FT_ULong OrigLength; /* uncompressed table length */
+ FT_ULong CheckSum; /* uncompressed checksum */
+
+ FT_ULong OrigOffset; /* uncompressed table file offset */
+ /* (not in the WOFF file) */
+ } WOFF_TableRec, *WOFF_Table;
+
+
+FT_END_HEADER
+
+#endif /* WOFFTYPES_H_ */
+
+
+/* END */
diff --git a/freetype/include/freetype/t1tables.h b/freetype/include/freetype/t1tables.h
index 3503c261..645e6457 100644
--- a/freetype/include/freetype/t1tables.h
+++ b/freetype/include/freetype/t1tables.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* t1tables.h */
-/* */
-/* Basic Type 1/Type 2 tables definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1tables.h
+ *
+ * Basic Type 1/Type 2 tables definitions and interface (specification
+ * only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -34,58 +34,58 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* type1_tables */
- /* */
- /* <Title> */
- /* Type 1 Tables */
- /* */
- /* <Abstract> */
- /* Type~1 (PostScript) specific font tables. */
- /* */
- /* <Description> */
- /* This section contains the definition of Type 1-specific tables, */
- /* including structures related to other PostScript font formats. */
- /* */
- /* <Order> */
- /* PS_FontInfoRec */
- /* PS_FontInfo */
- /* PS_PrivateRec */
- /* PS_Private */
- /* */
- /* CID_FaceDictRec */
- /* CID_FaceDict */
- /* CID_FaceInfoRec */
- /* CID_FaceInfo */
- /* */
- /* FT_Has_PS_Glyph_Names */
- /* FT_Get_PS_Font_Info */
- /* FT_Get_PS_Font_Private */
- /* FT_Get_PS_Font_Value */
- /* */
- /* T1_Blend_Flags */
- /* T1_EncodingType */
- /* PS_Dict_Keys */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @section:
+ * type1_tables
+ *
+ * @title:
+ * Type 1 Tables
+ *
+ * @abstract:
+ * Type~1-specific font tables.
+ *
+ * @description:
+ * This section contains the definition of Type~1-specific tables,
+ * including structures related to other PostScript font formats.
+ *
+ * @order:
+ * PS_FontInfoRec
+ * PS_FontInfo
+ * PS_PrivateRec
+ * PS_Private
+ *
+ * CID_FaceDictRec
+ * CID_FaceDict
+ * CID_FaceInfoRec
+ * CID_FaceInfo
+ *
+ * FT_Has_PS_Glyph_Names
+ * FT_Get_PS_Font_Info
+ * FT_Get_PS_Font_Private
+ * FT_Get_PS_Font_Value
+ *
+ * T1_Blend_Flags
+ * T1_EncodingType
+ * PS_Dict_Keys
+ *
+ */
/* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
/* structures in order to support Multiple Master fonts. */
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_FontInfoRec */
- /* */
- /* <Description> */
- /* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */
- /* Note that for Multiple Master fonts, each instance has its own */
- /* FontInfo dictionary. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -101,40 +101,39 @@ FT_BEGIN_HEADER
} PS_FontInfoRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_FontInfo */
- /* */
- /* <Description> */
- /* A handle to a @PS_FontInfoRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -176,56 +175,55 @@ FT_BEGIN_HEADER
} PS_PrivateRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_Private */
- /* */
- /* <Description> */
- /* A handle to a @PS_PrivateRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * T1_Private
+ *
+ * @description:
+ * This type is equivalent to @PS_PrivateRec. It is deprecated but kept
+ * to maintain source compatibility between various versions of FreeType.
+ */
typedef PS_PrivateRec T1_Private;
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* T1_Blend_Flags */
- /* */
- /* <Description> */
- /* A set of flags used to indicate which fields are present in a */
- /* given blend dictionary (font info or private). Used to support */
- /* Multiple Masters fonts. */
- /* */
- /* <Values> */
- /* T1_BLEND_UNDERLINE_POSITION :: */
- /* T1_BLEND_UNDERLINE_THICKNESS :: */
- /* T1_BLEND_ITALIC_ANGLE :: */
- /* T1_BLEND_BLUE_VALUES :: */
- /* T1_BLEND_OTHER_BLUES :: */
- /* T1_BLEND_STANDARD_WIDTH :: */
- /* T1_BLEND_STANDARD_HEIGHT :: */
- /* T1_BLEND_STEM_SNAP_WIDTHS :: */
- /* T1_BLEND_STEM_SNAP_HEIGHTS :: */
- /* T1_BLEND_BLUE_SCALE :: */
- /* T1_BLEND_BLUE_SHIFT :: */
- /* T1_BLEND_FAMILY_BLUES :: */
- /* T1_BLEND_FAMILY_OTHER_BLUES :: */
- /* T1_BLEND_FORCE_BOLD :: */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * T1_Blend_Flags
+ *
+ * @description:
+ * A set of flags used to indicate which fields are present in a given
+ * blend dictionary (font info or private). Used to support Multiple
+ * Masters fonts.
+ *
+ * @values:
+ * T1_BLEND_UNDERLINE_POSITION ::
+ * T1_BLEND_UNDERLINE_THICKNESS ::
+ * T1_BLEND_ITALIC_ANGLE ::
+ * T1_BLEND_BLUE_VALUES ::
+ * T1_BLEND_OTHER_BLUES ::
+ * T1_BLEND_STANDARD_WIDTH ::
+ * T1_BLEND_STANDARD_HEIGHT ::
+ * T1_BLEND_STEM_SNAP_WIDTHS ::
+ * T1_BLEND_STEM_SNAP_HEIGHTS ::
+ * T1_BLEND_BLUE_SCALE ::
+ * T1_BLEND_BLUE_SHIFT ::
+ * T1_BLEND_FAMILY_BLUES ::
+ * T1_BLEND_FAMILY_OTHER_BLUES ::
+ * T1_BLEND_FORCE_BOLD ::
+ */
typedef enum T1_Blend_Flags_
{
/* required fields in a FontInfo blend dictionary */
@@ -252,7 +250,7 @@ FT_BEGIN_HEADER
/* these constants are deprecated; use the corresponding */
- /* `T1_Blend_Flags' values instead */
+ /* `T1_Blend_Flags` values instead */
#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION
#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS
#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE
@@ -330,14 +328,23 @@ FT_BEGIN_HEADER
typedef PS_BlendRec T1_Blend;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceDictRec */
- /* */
- /* <Description> */
- /* A structure used to represent data in a CID top-level dictionary. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * CID_FaceDictRec
+ *
+ * @description:
+ * A structure used to represent data in a CID top-level dictionary. In
+ * most cases, they are part of the font's '/FDArray' array. Within a
+ * CID font file, such (internal) subfont dictionaries are enclosed by
+ * '%ADOBeginFontDict' and '%ADOEndFontDict' comments.
+ *
+ * Note that `CID_FaceDictRec` misses a field for the '/FontName'
+ * keyword, specifying the subfont's name (the top-level font name is
+ * given by the '/CIDFontName' keyword). This is an oversight, but it
+ * doesn't limit the 'cid' font module's functionality because FreeType
+ * neither needs this entry nor gives access to CID subfonts.
+ */
typedef struct CID_FaceDictRec_
{
PS_PrivateRec private_dict;
@@ -345,8 +352,8 @@ FT_BEGIN_HEADER
FT_UInt len_buildchar;
FT_Fixed forcebold_threshold;
FT_Pos stroke_width;
- FT_Fixed expansion_factor;
-
+ FT_Fixed expansion_factor; /* this is a duplicate of */
+ /* `private_dict->expansion_factor' */
FT_Byte paint_type;
FT_Byte font_type;
FT_Matrix font_matrix;
@@ -359,38 +366,38 @@ FT_BEGIN_HEADER
} CID_FaceDictRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceDict */
- /* */
- /* <Description> */
- /* A handle to a @CID_FaceDictRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * CID_FaceDict
+ *
+ * @description:
+ * A handle to a @CID_FaceDictRec structure.
+ */
typedef struct CID_FaceDictRec_* CID_FaceDict;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FontDict */
- /* */
- /* <Description> */
- /* This type is equivalent to @CID_FaceDictRec. It is deprecated but */
- /* kept to maintain source compatibility between various versions of */
- /* FreeType. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * CID_FontDict
+ *
+ * @description:
+ * This type is equivalent to @CID_FaceDictRec. It is deprecated but
+ * kept to maintain source compatibility between various versions of
+ * FreeType.
+ */
typedef CID_FaceDictRec CID_FontDict;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceInfoRec */
- /* */
- /* <Description> */
- /* A structure used to represent CID Face information. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * CID_FaceInfoRec
+ *
+ * @description:
+ * A structure used to represent CID Face information.
+ */
typedef struct CID_FaceInfoRec_
{
FT_String* cid_font_name;
@@ -421,47 +428,45 @@ FT_BEGIN_HEADER
} CID_FaceInfoRec;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceInfo */
- /* */
- /* <Description> */
- /* A handle to a @CID_FaceInfoRec structure. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ * 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
+ * face handle
*
* @return:
* Boolean. True if glyph names are reliable.
@@ -471,7 +476,7 @@ FT_BEGIN_HEADER
FT_Has_PS_Glyph_Names( FT_Face face );
- /************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_PS_Font_Info
@@ -482,22 +487,22 @@ FT_BEGIN_HEADER
*
* @input:
* face ::
- * PostScript face handle.
+ * PostScript face handle.
*
* @output:
* afont_info ::
- * Output font info structure pointer.
+ * Output font info structure pointer.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
- * String pointers within the @PS_FontInfoRec structure are owned by
- * the face and don't need to be freed by the caller. Missing entries
- * in the font's FontInfo dictionary are represented by NULL pointers.
+ * String pointers within the @PS_FontInfoRec structure are owned by the
+ * face and don't need to be freed by the caller. Missing entries in
+ * the font's FontInfo dictionary are represented by `NULL` pointers.
*
* If the font's format is not PostScript-based, this function will
- * return the `FT_Err_Invalid_Argument' error code.
+ * return the `FT_Err_Invalid_Argument` error code.
*
*/
FT_EXPORT( FT_Error )
@@ -505,7 +510,7 @@ FT_BEGIN_HEADER
PS_FontInfo afont_info );
- /************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_PS_Font_Private
@@ -516,11 +521,11 @@ FT_BEGIN_HEADER
*
* @input:
* face ::
- * PostScript face handle.
+ * PostScript face handle.
*
* @output:
* afont_private ::
- * Output private dictionary structure pointer.
+ * Output private dictionary structure pointer.
*
* @return:
* FreeType error code. 0~means success.
@@ -530,7 +535,7 @@ FT_BEGIN_HEADER
* the face and don't need to be freed by the caller.
*
* If the font's format is not PostScript-based, this function returns
- * the `FT_Err_Invalid_Argument' error code.
+ * the `FT_Err_Invalid_Argument` error code.
*
*/
FT_EXPORT( FT_Error )
@@ -538,25 +543,24 @@ FT_BEGIN_HEADER
PS_Private afont_private );
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* T1_EncodingType */
- /* */
- /* <Description> */
- /* An enumeration describing the `Encoding' entry in a Type 1 */
- /* dictionary. */
- /* */
- /* <Values> */
- /* T1_ENCODING_TYPE_NONE :: */
- /* T1_ENCODING_TYPE_ARRAY :: */
- /* T1_ENCODING_TYPE_STANDARD :: */
- /* T1_ENCODING_TYPE_ISOLATIN1 :: */
- /* T1_ENCODING_TYPE_EXPERT :: */
- /* */
- /* <Since> */
- /* 2.4.8 */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * T1_EncodingType
+ *
+ * @description:
+ * An enumeration describing the 'Encoding' entry in a Type 1 dictionary.
+ *
+ * @values:
+ * T1_ENCODING_TYPE_NONE ::
+ * T1_ENCODING_TYPE_ARRAY ::
+ * T1_ENCODING_TYPE_STANDARD ::
+ * T1_ENCODING_TYPE_ISOLATIN1 ::
+ * T1_ENCODING_TYPE_EXPERT ::
+ *
+ * @since:
+ * 2.4.8
+ */
typedef enum T1_EncodingType_
{
T1_ENCODING_TYPE_NONE = 0,
@@ -568,66 +572,66 @@ FT_BEGIN_HEADER
} T1_EncodingType;
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* PS_Dict_Keys */
- /* */
- /* <Description> */
- /* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */
- /* the Type~1 dictionary entry to retrieve. */
- /* */
- /* <Values> */
- /* PS_DICT_FONT_TYPE :: */
- /* PS_DICT_FONT_MATRIX :: */
- /* PS_DICT_FONT_BBOX :: */
- /* PS_DICT_PAINT_TYPE :: */
- /* PS_DICT_FONT_NAME :: */
- /* PS_DICT_UNIQUE_ID :: */
- /* PS_DICT_NUM_CHAR_STRINGS :: */
- /* PS_DICT_CHAR_STRING_KEY :: */
- /* PS_DICT_CHAR_STRING :: */
- /* PS_DICT_ENCODING_TYPE :: */
- /* PS_DICT_ENCODING_ENTRY :: */
- /* PS_DICT_NUM_SUBRS :: */
- /* PS_DICT_SUBR :: */
- /* PS_DICT_STD_HW :: */
- /* PS_DICT_STD_VW :: */
- /* PS_DICT_NUM_BLUE_VALUES :: */
- /* PS_DICT_BLUE_VALUE :: */
- /* PS_DICT_BLUE_FUZZ :: */
- /* PS_DICT_NUM_OTHER_BLUES :: */
- /* PS_DICT_OTHER_BLUE :: */
- /* PS_DICT_NUM_FAMILY_BLUES :: */
- /* PS_DICT_FAMILY_BLUE :: */
- /* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */
- /* PS_DICT_FAMILY_OTHER_BLUE :: */
- /* PS_DICT_BLUE_SCALE :: */
- /* PS_DICT_BLUE_SHIFT :: */
- /* PS_DICT_NUM_STEM_SNAP_H :: */
- /* PS_DICT_STEM_SNAP_H :: */
- /* PS_DICT_NUM_STEM_SNAP_V :: */
- /* PS_DICT_STEM_SNAP_V :: */
- /* PS_DICT_FORCE_BOLD :: */
- /* PS_DICT_RND_STEM_UP :: */
- /* PS_DICT_MIN_FEATURE :: */
- /* PS_DICT_LEN_IV :: */
- /* PS_DICT_PASSWORD :: */
- /* PS_DICT_LANGUAGE_GROUP :: */
- /* PS_DICT_VERSION :: */
- /* PS_DICT_NOTICE :: */
- /* PS_DICT_FULL_NAME :: */
- /* PS_DICT_FAMILY_NAME :: */
- /* PS_DICT_WEIGHT :: */
- /* PS_DICT_IS_FIXED_PITCH :: */
- /* PS_DICT_UNDERLINE_POSITION :: */
- /* PS_DICT_UNDERLINE_THICKNESS :: */
- /* PS_DICT_FS_TYPE :: */
- /* PS_DICT_ITALIC_ANGLE :: */
- /* */
- /* <Since> */
- /* 2.4.8 */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * PS_Dict_Keys
+ *
+ * @description:
+ * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the
+ * Type~1 dictionary entry to retrieve.
+ *
+ * @values:
+ * PS_DICT_FONT_TYPE ::
+ * PS_DICT_FONT_MATRIX ::
+ * PS_DICT_FONT_BBOX ::
+ * PS_DICT_PAINT_TYPE ::
+ * PS_DICT_FONT_NAME ::
+ * PS_DICT_UNIQUE_ID ::
+ * PS_DICT_NUM_CHAR_STRINGS ::
+ * PS_DICT_CHAR_STRING_KEY ::
+ * PS_DICT_CHAR_STRING ::
+ * PS_DICT_ENCODING_TYPE ::
+ * PS_DICT_ENCODING_ENTRY ::
+ * PS_DICT_NUM_SUBRS ::
+ * PS_DICT_SUBR ::
+ * PS_DICT_STD_HW ::
+ * PS_DICT_STD_VW ::
+ * PS_DICT_NUM_BLUE_VALUES ::
+ * PS_DICT_BLUE_VALUE ::
+ * PS_DICT_BLUE_FUZZ ::
+ * PS_DICT_NUM_OTHER_BLUES ::
+ * PS_DICT_OTHER_BLUE ::
+ * PS_DICT_NUM_FAMILY_BLUES ::
+ * PS_DICT_FAMILY_BLUE ::
+ * PS_DICT_NUM_FAMILY_OTHER_BLUES ::
+ * PS_DICT_FAMILY_OTHER_BLUE ::
+ * PS_DICT_BLUE_SCALE ::
+ * PS_DICT_BLUE_SHIFT ::
+ * PS_DICT_NUM_STEM_SNAP_H ::
+ * PS_DICT_STEM_SNAP_H ::
+ * PS_DICT_NUM_STEM_SNAP_V ::
+ * PS_DICT_STEM_SNAP_V ::
+ * PS_DICT_FORCE_BOLD ::
+ * PS_DICT_RND_STEM_UP ::
+ * PS_DICT_MIN_FEATURE ::
+ * PS_DICT_LEN_IV ::
+ * PS_DICT_PASSWORD ::
+ * PS_DICT_LANGUAGE_GROUP ::
+ * PS_DICT_VERSION ::
+ * PS_DICT_NOTICE ::
+ * PS_DICT_FULL_NAME ::
+ * PS_DICT_FAMILY_NAME ::
+ * PS_DICT_WEIGHT ::
+ * PS_DICT_IS_FIXED_PITCH ::
+ * PS_DICT_UNDERLINE_POSITION ::
+ * PS_DICT_UNDERLINE_THICKNESS ::
+ * PS_DICT_FS_TYPE ::
+ * PS_DICT_ITALIC_ANGLE ::
+ *
+ * @since:
+ * 2.4.8
+ */
typedef enum PS_Dict_Keys_
{
/* conventionally in the font dictionary */
@@ -687,7 +691,7 @@ FT_BEGIN_HEADER
} PS_Dict_Keys;
- /************************************************************************
+ /**************************************************************************
*
* @function:
* FT_Get_PS_Font_Value
@@ -697,57 +701,57 @@ FT_BEGIN_HEADER
*
* @input:
* face ::
- * PostScript face handle.
+ * PostScript face handle.
*
* key ::
- * An enumeration value representing the dictionary key to retrieve.
+ * An enumeration value representing the dictionary key to retrieve.
*
* idx ::
- * For array values, this specifies the index to be returned.
+ * For array values, this specifies the index to be returned.
*
* value ::
- * A pointer to memory into which to write the value.
+ * A pointer to memory into which to write the value.
*
* valen_len ::
- * The size, in bytes, of the memory supplied for the value.
+ * The size, in bytes, of the memory supplied for the value.
*
* @output:
* value ::
- * The value matching the above key, if it exists.
+ * The value matching the above key, if it exists.
*
* @return:
- * The amount of memory (in bytes) required to hold the requested
- * value (if it exists, -1 otherwise).
+ * The amount of memory (in bytes) required to hold the requested value
+ * (if it exists, -1 otherwise).
*
* @note:
* The values returned are not pointers into the internal structures of
- * the face, but are `fresh' copies, so that the memory containing them
+ * the face, but are 'fresh' copies, so that the memory containing them
* belongs to the calling application. This also enforces the
- * `read-only' nature of these values, i.e., this function cannot be
+ * 'read-only' nature of these values, i.e., this function cannot be
* used to manipulate the face.
*
- * `value' is a void pointer because the values returned can be of
+ * `value` is a void pointer because the values returned can be of
* various types.
*
- * If either `value' is NULL or `value_len' is too small, just the
+ * If either `value` is `NULL` or `value_len` is too small, just the
* required memory size for the requested entry is returned.
*
- * The `idx' parameter is used, not only to retrieve elements of, for
+ * The `idx` parameter is used, not only to retrieve elements of, for
* example, the FontMatrix or FontBBox, but also to retrieve name keys
* from the CharStrings dictionary, and the charstrings themselves. It
* is ignored for atomic values.
*
- * PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To
- * get the value as in the font stream, you need to divide by
- * 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
+ * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To
+ * get the value as in the font stream, you need to divide by 65536000.0
+ * (to remove the FT_Fixed scale, and the x1000 scale).
*
* IMPORTANT: Only key/value pairs read by the FreeType interpreter can
- * be retrieved. So, for example, PostScript procedures such as NP,
- * ND, and RD are not available. Arbitrary keys are, obviously, not be
+ * be retrieved. So, for example, PostScript procedures such as NP, ND,
+ * and RD are not available. Arbitrary keys are, obviously, not be
* available either.
*
* If the font's format is not PostScript-based, this function returns
- * the `FT_Err_Invalid_Argument' error code.
+ * the `FT_Err_Invalid_Argument` error code.
*
* @since:
* 2.4.8
diff --git a/freetype/include/freetype/ttnameid.h b/freetype/include/freetype/ttnameid.h
index 8605183d..cc677de7 100644
--- a/freetype/include/freetype/ttnameid.h
+++ b/freetype/include/freetype/ttnameid.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttnameid.h */
-/* */
-/* TrueType name ID definitions (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttnameid.h
+ *
+ * TrueType name ID definitions (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,53 +26,54 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* truetype_tables */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * truetype_tables
+ */
- /*************************************************************************/
- /* */
- /* Possible values for the `platform' identifier code in the name */
- /* records of an SFNT `name' table. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Possible values for the 'platform' identifier code in the name records
+ * of an SFNT 'name' table.
+ *
+ */
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_PLATFORM_XXX
*
* @description:
- * A list of valid values for the `platform_id' identifier code in
+ * 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
+ * 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).
+ * Used by Apple to indicate a MacOS-specific charmap and/or name
+ * entry. See @TT_MAC_ID_XXX for corresponding `encoding_id` values.
+ * Note that most TrueType fonts contain an Apple roman charmap to be
+ * usable on MacOS systems (even if they contain a Microsoft charmap as
+ * well).
*
* TT_PLATFORM_ISO ::
- * This value was used to specify ISO/IEC 10646 charmaps. It is however
- * now deprecated. See @TT_ISO_ID_XXX for a list of corresponding
- * `encoding_id' values.
+ * This value was used to specify ISO/IEC 10646 charmaps. It is
+ * however now deprecated. See @TT_ISO_ID_XXX for a list of
+ * corresponding `encoding_id` values.
*
* TT_PLATFORM_MICROSOFT ::
* Used by Microsoft to indicate Windows-specific charmaps. See
- * @TT_MS_ID_XXX for a list of corresponding `encoding_id' values.
+ * @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_MICROSOFT`, @TT_MS_ID_UNICODE_CS).
*
* TT_PLATFORM_CUSTOM ::
* Used to indicate application-specific charmaps.
@@ -91,13 +92,13 @@ FT_BEGIN_HEADER
#define TT_PLATFORM_ADOBE 7 /* artificial */
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_APPLE_ID_XXX
*
* @description:
- * A list of valid values for the `encoding_id' for
+ * A list of valid values for the `encoding_id` for
* @TT_PLATFORM_APPLE_UNICODE charmaps and name entries.
*
* @values:
@@ -117,8 +118,8 @@ FT_BEGIN_HEADER
* 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.
+ * From Adobe, not Apple. Not a normal cmap. Specifies variations on
+ * a real cmap.
*
* TT_APPLE_ID_FULL_UNICODE ::
* Used for fallback fonts that provide complete Unicode coverage with
@@ -134,13 +135,13 @@ FT_BEGIN_HEADER
#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_MAC_ID_XXX
*
* @description:
- * A list of valid values for the `encoding_id' for
+ * A list of valid values for the `encoding_id` for
* @TT_PLATFORM_MACINTOSH charmaps and name entries.
*/
@@ -180,14 +181,14 @@ FT_BEGIN_HEADER
#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.
+ * A list of valid values for the `encoding_id` for @TT_PLATFORM_ISO
+ * charmaps and name entries.
*
* Their use is now deprecated.
*
@@ -205,13 +206,13 @@ FT_BEGIN_HEADER
#define TT_ISO_ID_8859_1 2
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_MS_ID_XXX
*
* @description:
- * A list of valid values for the `encoding_id' for
+ * A list of valid values for the `encoding_id` for
* @TT_PLATFORM_MICROSOFT charmaps and name entries.
*
* @values:
@@ -219,16 +220,15 @@ FT_BEGIN_HEADER
* Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL.
*
* TT_MS_ID_UNICODE_CS ::
- * Microsoft WGL4 charmap, matching Unicode. See
- * @FT_ENCODING_UNICODE.
+ * Microsoft WGL4 charmap, matching Unicode. See @FT_ENCODING_UNICODE.
*
* TT_MS_ID_SJIS ::
* Shift JIS Japanese encoding. See @FT_ENCODING_SJIS.
*
* TT_MS_ID_PRC ::
* Chinese encodings as used in the People's Republic of China (PRC).
- * This means the encodings GB~2312 and its supersets GBK and
- * GB~18030. See @FT_ENCODING_PRC.
+ * This means the encodings GB~2312 and its supersets GBK and GB~18030.
+ * See @FT_ENCODING_PRC.
*
* TT_MS_ID_BIG_5 ::
* Traditional Chinese as used in Taiwan and Hong Kong. See
@@ -258,14 +258,14 @@ FT_BEGIN_HEADER
#define TT_MS_ID_GB2312 TT_MS_ID_PRC
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_ADOBE_ID_XXX
*
* @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension!
+ * 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 ::
@@ -284,14 +284,14 @@ FT_BEGIN_HEADER
#define TT_ADOBE_ID_LATIN_1 3
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_MAC_LANGID_XXX
*
* @description:
* Possible values of the language identifier field in the name records
- * of the SFNT `name' table if the `platform' identifier code is
+ * of the SFNT 'name' table if the 'platform' identifier code is
* @TT_PLATFORM_MACINTOSH. These values are also used as return values
* for function @FT_Get_CMap_Language_ID.
*
@@ -424,24 +424,24 @@ FT_BEGIN_HEADER
#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_MS_LANGID_XXX
*
* @description:
* Possible values of the language identifier field in the name records
- * of the SFNT `name' table if the `platform' identifier code is
+ * of the SFNT 'name' table if the 'platform' identifier code is
* @TT_PLATFORM_MICROSOFT. These values are also used as return values
* for function @FT_Get_CMap_Language_ID.
*
* The canonical source for Microsoft's IDs is
*
- * https://www.microsoft.com/globaldev/reference/lcid-all.mspx ,
+ * https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings ,
*
* however, we only provide macros for language identifiers present in
* the OpenType specification: Microsoft has abandoned the concept of
- * LCIDs (language code identifiers), and format~1 of the `name' table
+ * LCIDs (language code identifiers), and format~1 of the 'name' table
* provides a better mechanism for languages not covered here.
*
* More legacy values not listed in the reference can be found in the
@@ -780,14 +780,14 @@ FT_BEGIN_HEADER
TT_MS_LANGID_UIGHUR_PRC
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_NAME_ID_XXX
*
* @description:
- * Possible values of the `name' identifier field in the name records of
- * an SFNT `name' table. These values are platform independent.
+ * Possible values of the 'name' identifier field in the name records of
+ * an SFNT 'name' table. These values are platform independent.
*/
#define TT_NAME_ID_COPYRIGHT 0
@@ -834,14 +834,14 @@ FT_BEGIN_HEADER
#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
- /***********************************************************************
+ /**************************************************************************
*
* @enum:
* TT_UCR_XXX
*
* @description:
- * Possible bit mask values for the `ulUnicodeRangeX' fields in an SFNT
- * `OS/2' table.
+ * Possible bit mask values for the `ulUnicodeRangeX` fields in an SFNT
+ * 'OS/2' table.
*/
/* ulUnicodeRange1 */
diff --git a/freetype/include/freetype/tttables.h b/freetype/include/freetype/tttables.h
index ce6a6177..d04f8102 100644
--- a/freetype/include/freetype/tttables.h
+++ b/freetype/include/freetype/tttables.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* tttables.h */
-/* */
-/* Basic SFNT/TrueType tables definitions and interface */
-/* (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * tttables.h
+ *
+ * Basic SFNT/TrueType tables definitions and interface
+ * (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -33,53 +33,55 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* truetype_tables */
- /* */
- /* <Title> */
- /* TrueType Tables */
- /* */
- /* <Abstract> */
- /* TrueType specific table types and functions. */
- /* */
- /* <Description> */
- /* This section contains definitions of some basic tables specific to */
- /* TrueType and OpenType as well as some routines used to access and */
- /* process them. */
- /* */
- /* <Order> */
- /* TT_Header */
- /* TT_HoriHeader */
- /* TT_VertHeader */
- /* TT_OS2 */
- /* TT_Postscript */
- /* TT_PCLT */
- /* TT_MaxProfile */
- /* */
- /* FT_Sfnt_Tag */
- /* FT_Get_Sfnt_Table */
- /* FT_Load_Sfnt_Table */
- /* FT_Sfnt_Table_Info */
- /* */
- /* FT_Get_CMap_Language_ID */
- /* FT_Get_CMap_Format */
- /* */
- /* FT_PARAM_TAG_UNPATENTED_HINTING */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Header */
- /* */
- /* <Description> */
- /* A structure to model a TrueType font header table. All fields */
- /* follow the OpenType specification. */
- /* */
+ /**************************************************************************
+ *
+ * @section:
+ * truetype_tables
+ *
+ * @title:
+ * TrueType Tables
+ *
+ * @abstract:
+ * TrueType-specific table types and functions.
+ *
+ * @description:
+ * This section contains definitions of some basic tables specific to
+ * TrueType and OpenType as well as some routines used to access and
+ * process them.
+ *
+ * @order:
+ * TT_Header
+ * TT_HoriHeader
+ * TT_VertHeader
+ * TT_OS2
+ * TT_Postscript
+ * TT_PCLT
+ * TT_MaxProfile
+ *
+ * FT_Sfnt_Tag
+ * FT_Get_Sfnt_Table
+ * FT_Load_Sfnt_Table
+ * FT_Sfnt_Table_Info
+ *
+ * FT_Get_CMap_Language_ID
+ * FT_Get_CMap_Format
+ *
+ * FT_PARAM_TAG_UNPATENTED_HINTING
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_Header
+ *
+ * @description:
+ * A structure to model a TrueType font header table. All fields follow
+ * the OpenType specification. The 64-bit timestamps are stored in
+ * two-element arrays `Created` and `Modified`, first the upper then
+ * the lower 32~bits.
+ */
typedef struct TT_Header_
{
FT_Fixed Table_Version;
@@ -91,8 +93,8 @@ FT_BEGIN_HEADER
FT_UShort Flags;
FT_UShort Units_Per_EM;
- FT_Long Created [2];
- FT_Long Modified[2];
+ FT_ULong Created [2];
+ FT_ULong Modified[2];
FT_Short xMin;
FT_Short yMin;
@@ -109,93 +111,93 @@ FT_BEGIN_HEADER
} TT_Header;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_HoriHeader */
- /* */
- /* <Description> */
- /* A structure to model a TrueType horizontal header, the `hhea' */
- /* table, as well as the corresponding horizontal metrics table, */
- /* `hmtx'. */
- /* */
- /* <Fields> */
- /* Version :: The table version. */
- /* */
- /* Ascender :: The font's ascender, i.e., the distance */
- /* from the baseline to the top-most of all */
- /* glyph points found in the font. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of the */
- /* glyphs found in the font (maybe ASCII). */
- /* */
- /* You should use the `sTypoAscender' field */
- /* of the `OS/2' table instead if you want */
- /* the correct one. */
- /* */
- /* Descender :: The font's descender, i.e., the distance */
- /* from the baseline to the bottom-most of */
- /* all glyph points found in the font. It */
- /* is negative. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of the */
- /* glyphs found in the font (maybe ASCII). */
- /* */
- /* You should use the `sTypoDescender' */
- /* field of the `OS/2' table instead if you */
- /* want the correct one. */
- /* */
- /* Line_Gap :: The font's line gap, i.e., the distance */
- /* to add to the ascender and descender to */
- /* get the BTB, i.e., the */
- /* baseline-to-baseline distance for the */
- /* font. */
- /* */
- /* advance_Width_Max :: This field is the maximum of all advance */
- /* widths found in the font. It can be */
- /* used to compute the maximum width of an */
- /* arbitrary string of text. */
- /* */
- /* min_Left_Side_Bearing :: The minimum left side bearing of all */
- /* glyphs within the font. */
- /* */
- /* min_Right_Side_Bearing :: The minimum right side bearing of all */
- /* glyphs within the font. */
- /* */
- /* xMax_Extent :: The maximum horizontal extent (i.e., the */
- /* `width' of a glyph's bounding box) for */
- /* all glyphs in the font. */
- /* */
- /* caret_Slope_Rise :: The rise coefficient of the cursor's */
- /* slope of the cursor (slope=rise/run). */
- /* */
- /* caret_Slope_Run :: The run coefficient of the cursor's */
- /* slope. */
- /* */
- /* caret_Offset :: The cursor's offset for slanted fonts. */
- /* */
- /* Reserved :: 8~reserved bytes. */
- /* */
- /* metric_Data_Format :: Always~0. */
- /* */
- /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */
- /* table -- this value can be smaller than */
- /* the total number of glyphs in the font. */
- /* */
- /* long_metrics :: A pointer into the `hmtx' table. */
- /* */
- /* short_metrics :: A pointer into the `hmtx' table. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `caret_Slope_Rise', */
- /* `caret_Slope_Run', and `caret_Offset'. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_HoriHeader
+ *
+ * @description:
+ * A structure to model a TrueType horizontal header, the 'hhea' table,
+ * as well as the corresponding horizontal metrics table, 'hmtx'.
+ *
+ * @fields:
+ * Version ::
+ * The table version.
+ *
+ * Ascender ::
+ * The font's ascender, i.e., the distance from the baseline to the
+ * top-most of all glyph points found in the font.
+ *
+ * This value is invalid in many fonts, as it is usually set by the
+ * font designer, and often reflects only a portion of the glyphs found
+ * in the font (maybe ASCII).
+ *
+ * You should use the `sTypoAscender` field of the 'OS/2' table instead
+ * if you want the correct one.
+ *
+ * Descender ::
+ * The font's descender, i.e., the distance from the baseline to the
+ * bottom-most of all glyph points found in the font. It is negative.
+ *
+ * This value is invalid in many fonts, as it is usually set by the
+ * font designer, and often reflects only a portion of the glyphs found
+ * in the font (maybe ASCII).
+ *
+ * You should use the `sTypoDescender` field of the 'OS/2' table
+ * instead if you want the correct one.
+ *
+ * Line_Gap ::
+ * The font's line gap, i.e., the distance to add to the ascender and
+ * descender to get the BTB, i.e., the baseline-to-baseline distance
+ * for the font.
+ *
+ * advance_Width_Max ::
+ * This field is the maximum of all advance widths found in the font.
+ * It can be used to compute the maximum width of an arbitrary string
+ * of text.
+ *
+ * min_Left_Side_Bearing ::
+ * The minimum left side bearing of all glyphs within the font.
+ *
+ * min_Right_Side_Bearing ::
+ * The minimum right side bearing of all glyphs within the font.
+ *
+ * xMax_Extent ::
+ * The maximum horizontal extent (i.e., the 'width' of a glyph's
+ * bounding box) for all glyphs in the font.
+ *
+ * caret_Slope_Rise ::
+ * The rise coefficient of the cursor's slope of the cursor
+ * (slope=rise/run).
+ *
+ * caret_Slope_Run ::
+ * The run coefficient of the cursor's slope.
+ *
+ * caret_Offset ::
+ * The cursor's offset for slanted fonts.
+ *
+ * Reserved ::
+ * 8~reserved bytes.
+ *
+ * metric_Data_Format ::
+ * Always~0.
+ *
+ * number_Of_HMetrics ::
+ * Number of HMetrics entries in the 'hmtx' table -- this value can be
+ * smaller than the total number of glyphs in the font.
+ *
+ * long_metrics ::
+ * A pointer into the 'hmtx' table.
+ *
+ * short_metrics ::
+ * A pointer into the 'hmtx' table.
+ *
+ * @note:
+ * For an OpenType variation font, the values of the following fields can
+ * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+ * the font contains an 'MVAR' table: `caret_Slope_Rise`,
+ * `caret_Slope_Run`, and `caret_Offset`.
+ */
typedef struct TT_HoriHeader_
{
FT_Fixed Version;
@@ -219,7 +221,7 @@ FT_BEGIN_HEADER
/* The following fields are not defined by the OpenType specification */
/* but they are used to connect the metrics header to the relevant */
- /* `hmtx' table. */
+ /* 'hmtx' table. */
void* long_metrics;
void* short_metrics;
@@ -227,97 +229,93 @@ FT_BEGIN_HEADER
} TT_HoriHeader;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_VertHeader */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType vertical header, the `vhea' */
- /* table, as well as the corresponding vertical metrics table, */
- /* `vmtx'. */
- /* */
- /* <Fields> */
- /* Version :: The table version. */
- /* */
- /* Ascender :: The font's ascender, i.e., the distance */
- /* from the baseline to the top-most of */
- /* all glyph points found in the font. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of */
- /* the glyphs found in the font (maybe */
- /* ASCII). */
- /* */
- /* You should use the `sTypoAscender' */
- /* field of the `OS/2' table instead if */
- /* you want the correct one. */
- /* */
- /* Descender :: The font's descender, i.e., the */
- /* distance from the baseline to the */
- /* bottom-most of all glyph points found */
- /* in the font. It is negative. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of */
- /* the glyphs found in the font (maybe */
- /* ASCII). */
- /* */
- /* You should use the `sTypoDescender' */
- /* field of the `OS/2' table instead if */
- /* you want the correct one. */
- /* */
- /* Line_Gap :: The font's line gap, i.e., the distance */
- /* to add to the ascender and descender to */
- /* get the BTB, i.e., the */
- /* baseline-to-baseline distance for the */
- /* font. */
- /* */
- /* advance_Height_Max :: This field is the maximum of all */
- /* advance heights found in the font. It */
- /* can be used to compute the maximum */
- /* height of an arbitrary string of text. */
- /* */
- /* min_Top_Side_Bearing :: The minimum top side bearing of all */
- /* glyphs within the font. */
- /* */
- /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */
- /* glyphs within the font. */
- /* */
- /* yMax_Extent :: The maximum vertical extent (i.e., the */
- /* `height' of a glyph's bounding box) for */
- /* all glyphs in the font. */
- /* */
- /* caret_Slope_Rise :: The rise coefficient of the cursor's */
- /* slope of the cursor (slope=rise/run). */
- /* */
- /* caret_Slope_Run :: The run coefficient of the cursor's */
- /* slope. */
- /* */
- /* caret_Offset :: The cursor's offset for slanted fonts. */
- /* */
- /* Reserved :: 8~reserved bytes. */
- /* */
- /* metric_Data_Format :: Always~0. */
- /* */
- /* number_Of_VMetrics :: Number of VMetrics entries in the */
- /* `vmtx' table -- this value can be */
- /* smaller than the total number of glyphs */
- /* in the font. */
- /* */
- /* long_metrics :: A pointer into the `vmtx' table. */
- /* */
- /* short_metrics :: A pointer into the `vmtx' table. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `Ascender', */
- /* `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run', */
- /* and `caret_Offset'. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_VertHeader
+ *
+ * @description:
+ * A structure used to model a TrueType vertical header, the 'vhea'
+ * table, as well as the corresponding vertical metrics table, 'vmtx'.
+ *
+ * @fields:
+ * Version ::
+ * The table version.
+ *
+ * Ascender ::
+ * The font's ascender, i.e., the distance from the baseline to the
+ * top-most of all glyph points found in the font.
+ *
+ * This value is invalid in many fonts, as it is usually set by the
+ * font designer, and often reflects only a portion of the glyphs found
+ * in the font (maybe ASCII).
+ *
+ * You should use the `sTypoAscender` field of the 'OS/2' table instead
+ * if you want the correct one.
+ *
+ * Descender ::
+ * The font's descender, i.e., the distance from the baseline to the
+ * bottom-most of all glyph points found in the font. It is negative.
+ *
+ * This value is invalid in many fonts, as it is usually set by the
+ * font designer, and often reflects only a portion of the glyphs found
+ * in the font (maybe ASCII).
+ *
+ * You should use the `sTypoDescender` field of the 'OS/2' table
+ * instead if you want the correct one.
+ *
+ * Line_Gap ::
+ * The font's line gap, i.e., the distance to add to the ascender and
+ * descender to get the BTB, i.e., the baseline-to-baseline distance
+ * for the font.
+ *
+ * advance_Height_Max ::
+ * This field is the maximum of all advance heights found in the font.
+ * It can be used to compute the maximum height of an arbitrary string
+ * of text.
+ *
+ * min_Top_Side_Bearing ::
+ * The minimum top side bearing of all glyphs within the font.
+ *
+ * min_Bottom_Side_Bearing ::
+ * The minimum bottom side bearing of all glyphs within the font.
+ *
+ * yMax_Extent ::
+ * The maximum vertical extent (i.e., the 'height' of a glyph's
+ * bounding box) for all glyphs in the font.
+ *
+ * caret_Slope_Rise ::
+ * The rise coefficient of the cursor's slope of the cursor
+ * (slope=rise/run).
+ *
+ * caret_Slope_Run ::
+ * The run coefficient of the cursor's slope.
+ *
+ * caret_Offset ::
+ * The cursor's offset for slanted fonts.
+ *
+ * Reserved ::
+ * 8~reserved bytes.
+ *
+ * metric_Data_Format ::
+ * Always~0.
+ *
+ * number_Of_VMetrics ::
+ * Number of VMetrics entries in the 'vmtx' table -- this value can be
+ * smaller than the total number of glyphs in the font.
+ *
+ * long_metrics ::
+ * A pointer into the 'vmtx' table.
+ *
+ * short_metrics ::
+ * A pointer into the 'vmtx' table.
+ *
+ * @note:
+ * For an OpenType variation font, the values of the following fields can
+ * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+ * the font contains an 'MVAR' table: `Ascender`, `Descender`,
+ * `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`.
+ */
typedef struct TT_VertHeader_
{
FT_Fixed Version;
@@ -341,7 +339,7 @@ FT_BEGIN_HEADER
/* The following fields are not defined by the OpenType specification */
/* but they are used to connect the metrics header to the relevant */
- /* `vmtx' table. */
+ /* 'vmtx' table. */
void* long_metrics;
void* short_metrics;
@@ -349,33 +347,31 @@ FT_BEGIN_HEADER
} TT_VertHeader;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_OS2 */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `OS/2' table. All fields comply */
- /* to the OpenType specification. */
- /* */
- /* Note that we now support old Mac fonts that do not include an */
- /* `OS/2' table. In this case, the `version' field is always set to */
- /* 0xFFFF. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `sCapHeight', */
- /* `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight', */
- /* `usWinAscent', `usWinDescent', `yStrikeoutPosition', */
- /* `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize', */
- /* `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset', */
- /* `ySuperscriptXSize', `ySuperscriptYOffset', and */
- /* `ySuperscriptYSize'. */
- /* */
- /* Possible values for bits in the `ulUnicodeRangeX' fields are given */
- /* by the @TT_UCR_XXX macros. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_OS2
+ *
+ * @description:
+ * A structure to model a TrueType 'OS/2' table. All fields comply to
+ * the OpenType specification.
+ *
+ * Note that we now support old Mac fonts that do not include an 'OS/2'
+ * table. In this case, the `version` field is always set to 0xFFFF.
+ *
+ * @note:
+ * For an OpenType variation font, the values of the following fields can
+ * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+ * the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`,
+ * `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`,
+ * `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`,
+ * `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`,
+ * `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`,
+ * `ySuperscriptYOffset`, and `ySuperscriptYSize`.
+ *
+ * Possible values for bits in the `ulUnicodeRangeX` fields are given by
+ * the @TT_UCR_XXX macros.
+ */
typedef struct TT_OS2_
{
@@ -435,23 +431,23 @@ FT_BEGIN_HEADER
} TT_OS2;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Postscript */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `post' table. All fields comply */
- /* to the OpenType specification. This structure does not reference */
- /* a font's PostScript glyph names; use @FT_Get_Glyph_Name to */
- /* retrieve them. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `underlinePosition' */
- /* and `underlineThickness'. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_Postscript
+ *
+ * @description:
+ * A structure to model a TrueType 'post' table. All fields comply to
+ * the OpenType specification. This structure does not reference a
+ * font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve
+ * them.
+ *
+ * @note:
+ * For an OpenType variation font, the values of the following fields can
+ * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+ * the font contains an 'MVAR' table: `underlinePosition` and
+ * `underlineThickness`.
+ */
typedef struct TT_Postscript_
{
FT_Fixed FormatType;
@@ -464,21 +460,21 @@ FT_BEGIN_HEADER
FT_ULong minMemType1;
FT_ULong maxMemType1;
- /* Glyph names follow in the `post' table, but we don't */
+ /* Glyph names follow in the 'post' table, but we don't */
/* load them by default. */
} TT_Postscript;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_PCLT */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `PCLT' table. All fields comply */
- /* to the OpenType specification. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_PCLT
+ *
+ * @description:
+ * A structure to model a TrueType 'PCLT' table. All fields comply to
+ * the OpenType specification.
+ */
typedef struct TT_PCLT_
{
FT_Fixed Version;
@@ -500,70 +496,75 @@ FT_BEGIN_HEADER
} TT_PCLT;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_MaxProfile */
- /* */
- /* <Description> */
- /* The maximum profile (`maxp') table contains many max values, which */
- /* can be used to pre-allocate arrays for speeding up glyph loading */
- /* and hinting. */
- /* */
- /* <Fields> */
- /* version :: The version number. */
- /* */
- /* numGlyphs :: The number of glyphs in this TrueType */
- /* font. */
- /* */
- /* maxPoints :: The maximum number of points in a */
- /* non-composite TrueType glyph. See also */
- /* `maxCompositePoints'. */
- /* */
- /* maxContours :: The maximum number of contours in a */
- /* non-composite TrueType glyph. See also */
- /* `maxCompositeContours'. */
- /* */
- /* maxCompositePoints :: The maximum number of points in a */
- /* composite TrueType glyph. See also */
- /* `maxPoints'. */
- /* */
- /* maxCompositeContours :: The maximum number of contours in a */
- /* composite TrueType glyph. See also */
- /* `maxContours'. */
- /* */
- /* maxZones :: The maximum number of zones used for */
- /* glyph hinting. */
- /* */
- /* maxTwilightPoints :: The maximum number of points in the */
- /* twilight zone used for glyph hinting. */
- /* */
- /* maxStorage :: The maximum number of elements in the */
- /* storage area used for glyph hinting. */
- /* */
- /* maxFunctionDefs :: The maximum number of function */
- /* definitions in the TrueType bytecode for */
- /* this font. */
- /* */
- /* maxInstructionDefs :: The maximum number of instruction */
- /* definitions in the TrueType bytecode for */
- /* this font. */
- /* */
- /* maxStackElements :: The maximum number of stack elements used */
- /* during bytecode interpretation. */
- /* */
- /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */
- /* used for glyph hinting. */
- /* */
- /* maxComponentElements :: The maximum number of simple (i.e., non- */
- /* composite) glyphs in a composite glyph. */
- /* */
- /* maxComponentDepth :: The maximum nesting depth of composite */
- /* glyphs. */
- /* */
- /* <Note> */
- /* This structure is only used during font loading. */
- /* */
+ /**************************************************************************
+ *
+ * @struct:
+ * TT_MaxProfile
+ *
+ * @description:
+ * The maximum profile ('maxp') table contains many max values, which can
+ * be used to pre-allocate arrays for speeding up glyph loading and
+ * hinting.
+ *
+ * @fields:
+ * version ::
+ * The version number.
+ *
+ * numGlyphs ::
+ * The number of glyphs in this TrueType font.
+ *
+ * maxPoints ::
+ * The maximum number of points in a non-composite TrueType glyph. See
+ * also `maxCompositePoints`.
+ *
+ * maxContours ::
+ * The maximum number of contours in a non-composite TrueType glyph.
+ * See also `maxCompositeContours`.
+ *
+ * maxCompositePoints ::
+ * The maximum number of points in a composite TrueType glyph. See
+ * also `maxPoints`.
+ *
+ * maxCompositeContours ::
+ * The maximum number of contours in a composite TrueType glyph. See
+ * also `maxContours`.
+ *
+ * maxZones ::
+ * The maximum number of zones used for glyph hinting.
+ *
+ * maxTwilightPoints ::
+ * The maximum number of points in the twilight zone used for glyph
+ * hinting.
+ *
+ * maxStorage ::
+ * The maximum number of elements in the storage area used for glyph
+ * hinting.
+ *
+ * maxFunctionDefs ::
+ * The maximum number of function definitions in the TrueType bytecode
+ * for this font.
+ *
+ * maxInstructionDefs ::
+ * The maximum number of instruction definitions in the TrueType
+ * bytecode for this font.
+ *
+ * maxStackElements ::
+ * The maximum number of stack elements used during bytecode
+ * interpretation.
+ *
+ * maxSizeOfInstructions ::
+ * The maximum number of TrueType opcodes used for glyph hinting.
+ *
+ * maxComponentElements ::
+ * The maximum number of simple (i.e., non-composite) glyphs in a
+ * composite glyph.
+ *
+ * maxComponentDepth ::
+ * The maximum nesting depth of composite glyphs.
+ *
+ * @note:
+ * This structure is only used during font loading.
+ */
typedef struct TT_MaxProfile_
{
FT_Fixed version;
@@ -585,31 +586,38 @@ FT_BEGIN_HEADER
} TT_MaxProfile;
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Sfnt_Tag */
- /* */
- /* <Description> */
- /* An enumeration to specify indices of SFNT tables loaded and parsed */
- /* by FreeType during initialization of an SFNT font. Used in the */
- /* @FT_Get_Sfnt_Table API function. */
- /* */
- /* <Values> */
- /* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */
- /* */
- /* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */
- /* */
- /* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */
- /* */
- /* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */
- /* */
- /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure. */
- /* */
- /* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */
- /* */
- /* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */
- /* */
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Sfnt_Tag
+ *
+ * @description:
+ * An enumeration to specify indices of SFNT tables loaded and parsed by
+ * FreeType during initialization of an SFNT font. Used in the
+ * @FT_Get_Sfnt_Table API function.
+ *
+ * @values:
+ * FT_SFNT_HEAD ::
+ * To access the font's @TT_Header structure.
+ *
+ * FT_SFNT_MAXP ::
+ * To access the font's @TT_MaxProfile structure.
+ *
+ * FT_SFNT_OS2 ::
+ * To access the font's @TT_OS2 structure.
+ *
+ * FT_SFNT_HHEA ::
+ * To access the font's @TT_HoriHeader structure.
+ *
+ * FT_SFNT_VHEA ::
+ * To access the font's @TT_VertHeader structure.
+ *
+ * FT_SFNT_POST ::
+ * To access the font's @TT_Postscript structure.
+ *
+ * FT_SFNT_PCLT ::
+ * To access the font's @TT_PCLT structure.
+ */
typedef enum FT_Sfnt_Tag_
{
FT_SFNT_HEAD,
@@ -624,7 +632,7 @@ FT_BEGIN_HEADER
} FT_Sfnt_Tag;
- /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */
+ /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */
/* values instead */
#define ft_sfnt_head FT_SFNT_HEAD
#define ft_sfnt_maxp FT_SFNT_MAXP
@@ -635,44 +643,46 @@ FT_BEGIN_HEADER
#define ft_sfnt_pclt FT_SFNT_PCLT
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Table */
- /* */
- /* <Description> */
- /* Return a pointer to a given SFNT table stored within a face. */
- /* */
- /* <Input> */
- /* face :: A handle to the source. */
- /* */
- /* tag :: The index of the SFNT table. */
- /* */
- /* <Return> */
- /* A type-less pointer to the table. This will be NULL in case of */
- /* error, or if the corresponding table was not found *OR* loaded */
- /* from the file. */
- /* */
- /* Use a typecast according to `tag' to access the structure */
- /* elements. */
- /* */
- /* <Note> */
- /* The table is owned by the face object and disappears with it. */
- /* */
- /* This function is only useful to access SFNT tables that are loaded */
- /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */
- /* a list. */
- /* */
- /* Here an example how to access the `vhea' table: */
- /* */
- /* { */
- /* TT_VertHeader* vert_header; */
- /* */
- /* */
- /* vert_header = */
- /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */
- /* } */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Sfnt_Table
+ *
+ * @description:
+ * Return a pointer to a given SFNT table stored within a face.
+ *
+ * @input:
+ * face ::
+ * A handle to the source.
+ *
+ * tag ::
+ * The index of the SFNT table.
+ *
+ * @return:
+ * A type-less pointer to the table. This will be `NULL` in case of
+ * error, or if the corresponding table was not found **OR** loaded from
+ * the file.
+ *
+ * Use a typecast according to `tag` to access the structure elements.
+ *
+ * @note:
+ * The table is owned by the face object and disappears with it.
+ *
+ * This function is only useful to access SFNT tables that are loaded by
+ * the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for a
+ * list.
+ *
+ * @example:
+ * Here is an example demonstrating access to the 'vhea' table.
+ *
+ * ```
+ * TT_VertHeader* vert_header;
+ *
+ *
+ * vert_header =
+ * (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA );
+ * ```
+ */
FT_EXPORT( void* )
FT_Get_Sfnt_Table( FT_Face face,
FT_Sfnt_Tag tag );
@@ -691,8 +701,8 @@ FT_BEGIN_HEADER
* A handle to the source face.
*
* tag ::
- * The four-byte tag of the table to load. Use value~0 if you want
- * to access the whole font file. Otherwise, you can use one of the
+ * The four-byte tag of the table to load. Use value~0 if you want to
+ * access the whole font file. Otherwise, you can use one of the
* definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
* one with @FT_MAKE_TAG.
*
@@ -706,10 +716,10 @@ FT_BEGIN_HEADER
*
* @inout:
* length ::
- * If the `length' parameter is NULL, try to load the whole table.
+ * If the `length` parameter is `NULL`, try to load the whole table.
* Return an error code if it fails.
*
- * Else, if `*length' is~0, exit immediately while returning the
+ * 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
@@ -720,21 +730,21 @@ FT_BEGIN_HEADER
*
* @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:
+ * function with `*length` set to~0, as in the following example:
*
- * {
- * FT_ULong length = 0;
+ * ```
+ * FT_ULong length = 0;
*
*
- * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
- * if ( error ) { ... table does not exist ... }
+ * 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 ... }
+ * 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 ... }
- * }
+ * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
+ * if ( error ) { ... could not load table ... }
+ * ```
*
* Note that structures like @TT_Header or @TT_OS2 can't be used with
* this function; they are limited to @FT_Get_Sfnt_Table. Reason is that
@@ -768,14 +778,14 @@ FT_BEGIN_HEADER
*
* @inout:
* tag ::
- * The name tag of the SFNT table. If the value is NULL, `table_index'
- * is ignored, and `length' returns the number of SFNT tables in the
- * font.
+ * The name tag of the SFNT table. If the value is `NULL`,
+ * `table_index` is ignored, and `length` returns the number of SFNT
+ * tables in the font.
*
* @output:
* length ::
- * The length of the SFNT table (or the number of SFNT tables, depending
- * on `tag').
+ * The length of the SFNT table (or the number of SFNT tables,
+ * depending on `tag`).
*
* @return:
* FreeType error code. 0~means success.
@@ -792,46 +802,46 @@ FT_BEGIN_HEADER
FT_ULong *length );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_CMap_Language_ID */
- /* */
- /* <Description> */
- /* Return cmap language ID as specified in the OpenType standard. */
- /* Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The language ID of `charmap'. If `charmap' doesn't belong to an */
- /* SFNT face, just return~0 as the default value. */
- /* */
- /* For a format~14 cmap (to access Unicode IVS), the return value is */
- /* 0xFFFFFFFF. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_CMap_Language_ID
+ *
+ * @description:
+ * Return cmap language ID as specified in the OpenType standard.
+ * Definitions of language ID values are in file @FT_TRUETYPE_IDS_H.
+ *
+ * @input:
+ * charmap ::
+ * The target charmap.
+ *
+ * @return:
+ * The language ID of `charmap`. If `charmap` doesn't belong to an SFNT
+ * face, just return~0 as the default value.
+ *
+ * For a format~14 cmap (to access Unicode IVS), the return value is
+ * 0xFFFFFFFF.
+ */
FT_EXPORT( FT_ULong )
FT_Get_CMap_Language_ID( FT_CharMap charmap );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_CMap_Format */
- /* */
- /* <Description> */
- /* Return the format of an SFNT `cmap' table. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The format of `charmap'. If `charmap' doesn't belong to an SFNT */
- /* face, return -1. */
- /* */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_CMap_Format
+ *
+ * @description:
+ * Return the format of an SFNT 'cmap' table.
+ *
+ * @input:
+ * charmap ::
+ * The target charmap.
+ *
+ * @return:
+ * The format of `charmap`. If `charmap` doesn't belong to an SFNT face,
+ * return -1.
+ */
FT_EXPORT( FT_Long )
FT_Get_CMap_Format( FT_CharMap charmap );
diff --git a/freetype/include/freetype/tttags.h b/freetype/include/freetype/tttags.h
index e5cee68a..bd0986ef 100644
--- a/freetype/include/freetype/tttags.h
+++ b/freetype/include/freetype/tttags.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* tttags.h */
-/* */
-/* Tags for TrueType and OpenType tables (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * tttags.h
+ *
+ * Tags for TrueType and OpenType tables (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -46,6 +46,8 @@ FT_BEGIN_HEADER
#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' )
#define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
+#define TTAG_COLR FT_MAKE_TAG( 'C', 'O', 'L', 'R' )
+#define TTAG_CPAL FT_MAKE_TAG( 'C', 'P', 'A', 'L' )
#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' )
diff --git a/freetype/include/ft2build.h b/freetype/include/ft2build.h
index e7ce99bc..e3f48879 100644
--- a/freetype/include/ft2build.h
+++ b/freetype/include/ft2build.h
@@ -1,34 +1,36 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros. */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This is the `entry point' for FreeType header file inclusions. It is */
- /* the only header file which should be included directly; all other */
- /* FreeType header files should be accessed with macro names (after */
- /* including `ft2build.h'). */
- /* */
- /* A typical example is */
- /* */
- /* #include <ft2build.h> */
- /* #include FT_FREETYPE_H */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ft2build.h
+ *
+ * FreeType 2 build and setup macros.
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This is the 'entry point' for FreeType header file inclusions. It is
+ * the only header file which should be included directly; all other
+ * FreeType header files should be accessed with macro names (after
+ * including `ft2build.h`).
+ *
+ * A typical example is
+ *
+ * ```
+ * #include <ft2build.h>
+ * #include FT_FREETYPE_H
+ * ```
+ *
+ */
#ifndef FT2BUILD_H_
diff --git a/freetype/modules.cfg b/freetype/modules.cfg
index 4bf34452..dc6c8d42 100644
--- a/freetype/modules.cfg
+++ b/freetype/modules.cfg
@@ -1,6 +1,6 @@
# modules.cfg
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -37,7 +37,6 @@ FONT_MODULES += truetype
# PostScript Type 1 font driver.
#
# This driver needs the `psaux', `pshinter', and `psnames' modules.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += type1
# CFF/OpenType font driver.
@@ -48,30 +47,24 @@ FONT_MODULES += cff
# Type 1 CID-keyed font driver.
#
# This driver needs the `psaux', `pshinter', and `psnames' modules.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += cid
# PFR/TrueDoc font driver. See optional extension ftpfr.c below also.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += pfr
# PostScript Type 42 font driver.
#
# This driver needs the `truetype' and `psaux' modules.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += type42
# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below
# also.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += winfonts
# PCF font driver. If debugging and tracing is enabled, needs `ftbitmap.c'.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += pcf
# BDF font driver. See optional extension ftbdf.c below also.
-# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += bdf
# SFNT files support. If used without `truetype' or `cff', it supports
@@ -114,41 +107,34 @@ RASTER_MODULES += smooth
# FreeType's cache sub-system (quite stable but still in beta -- this means
# that its public API is subject to change if necessary). See
# include/freetype/ftcache.h. Needs `ftglyph.c'.
-# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += cache
# TrueType GX/AAT table validation. Needs `ftgxval.c' below.
#
-# No FT_CONFIG_OPTION_PIC support.
# AUX_MODULES += gxvalid
# Support for streams compressed with gzip (files with suffix .gz).
#
# See include/freetype/ftgzip.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += gzip
# Support for streams compressed with LZW (files with suffix .Z).
#
# See include/freetype/ftlzw.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += lzw
# Support for streams compressed with bzip2 (files with suffix .bz2).
#
# See include/freetype/ftbzip2.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += bzip2
# OpenType table validation. Needs `ftotval.c' below.
#
-# No FT_CONFIG_OPTION_PIC support.
# AUX_MODULES += otvalid
# Auxiliary PostScript driver component to share common code.
#
# This module depends on `psnames'.
-# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += psaux
# Support for PostScript glyph names.
diff --git a/freetype/src/Jamfile b/freetype/src/Jamfile
index 562480c9..3ad2d5c9 100644
--- a/freetype/src/Jamfile
+++ b/freetype/src/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/Jamfile b/freetype/src/autofit/Jamfile
index 01b866ec..ea69dee3 100644
--- a/freetype/src/autofit/Jamfile
+++ b/freetype/src/autofit/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/autofit Jamfile
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/afangles.c b/freetype/src/autofit/afangles.c
index c65a3ae2..9e1f7a21 100644
--- a/freetype/src/autofit/afangles.c
+++ b/freetype/src/autofit/afangles.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* afangles.c */
-/* */
-/* Routines used to compute vector angles with limited accuracy */
-/* and very high speed. It also contains sorting routines (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afangles.c
+ *
+ * Routines used to compute vector angles with limited accuracy
+ * and very high speed. It also contains sorting routines (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include "aftypes.h"
/*
- * We are not using `af_angle_atan' anymore, but we keep the source
- * code below just in case...
+ * We are not using `af_angle_atan' anymore, but we keep the source
+ * code below just in case...
*/
@@ -30,16 +30,16 @@
/*
- * 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 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
+ * The approximation
*
- * dy * PI / (|dx|+|dy|)
+ * dy * PI / (|dx|+|dy|)
*
- * should be enough, and much faster to compute.
+ * should be enough, and much faster to compute.
*/
FT_LOCAL_DEF( AF_Angle )
af_angle_atan( FT_Fixed dx,
diff --git a/freetype/src/autofit/afangles.h b/freetype/src/autofit/afangles.h
index f33f9e10..18d7dae3 100644
--- a/freetype/src/autofit/afangles.h
+++ b/freetype/src/autofit/afangles.h
@@ -1,7 +1,7 @@
/*
- * afangles.h
+ * afangles.h
*
- * This is a dummy file, used to please the build system. It is never
- * included by the auto-fitter sources.
+ * This is a dummy file, used to please the build system. It is never
+ * included by the auto-fitter sources.
*
*/
diff --git a/freetype/src/autofit/afblue.c b/freetype/src/autofit/afblue.c
index e4078fd0..b99dbeb1 100644
--- a/freetype/src/autofit/afblue.c
+++ b/freetype/src/autofit/afblue.c
@@ -1,22 +1,22 @@
/* This file has been generated by the Perl script `afblue.pl', */
/* using data from file `afblue.dat'. */
-/***************************************************************************/
-/* */
-/* afblue.c */
-/* */
-/* Auto-fitter data for blue strings (body). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afblue.c
+ *
+ * Auto-fitter data for blue strings (body).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -296,6 +296,10 @@
'\0',
'\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2', /* ട ഠ ധ ശ ഘ ച ഥ ല */
'\0',
+ '\xE1', '\xA0', '\xB3', ' ', '\xE1', '\xA0', '\xB4', ' ', '\xE1', '\xA0', '\xB6', ' ', '\xE1', '\xA0', '\xBD', ' ', '\xE1', '\xA1', '\x82', ' ', '\xE1', '\xA1', '\x8A', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xA1', '\xE2', '\x80', '\x8D', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xB3', '\xE2', '\x80', '\x8D', /* ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍ */
+ '\0',
+ '\xE1', '\xA1', '\x83', /* ᡃ */
+ '\0',
'\xE1', '\x80', '\x81', ' ', '\xE1', '\x80', '\x82', ' ', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\xA5', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* ခ ဂ င ဒ ဝ ၥ ၊ ။ */
'\0',
'\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x8E', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x95', ' ', '\xE1', '\x80', '\x97', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* င ဎ ဒ ပ ဗ ဝ ၊ ။ */
@@ -649,6 +653,9 @@
{ AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_MONGOLIAN_TOP_BASE, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_MYANMAR_BOTTOM, 0 },
diff --git a/freetype/src/autofit/afblue.cin b/freetype/src/autofit/afblue.cin
index 4913e2eb..6545d1fd 100644
--- a/freetype/src/autofit/afblue.cin
+++ b/freetype/src/autofit/afblue.cin
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afblue.c */
-/* */
-/* Auto-fitter data for blue strings (body). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afblue.c
+ *
+ * Auto-fitter data for blue strings (body).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
diff --git a/freetype/src/autofit/afblue.dat b/freetype/src/autofit/afblue.dat
index bc2f0d27..46db43fe 100644
--- a/freetype/src/autofit/afblue.dat
+++ b/freetype/src/autofit/afblue.dat
@@ -1,15 +1,15 @@
-// afblue.dat
+// afblue.dat
//
-// Auto-fitter data for blue strings.
+// Auto-fitter data for blue strings.
//
-// Copyright 2013-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
+// Copyright (C) 2013-2019 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.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 part of the FreeType project, and may only be used,
+// modified, and distributed under the terms of the FreeType project
+// license, LICENSE.TXT. By continuing to use, modify, or distribute
+// this file you indicate that you have read the license and
+// understand and accept it fully.
// This file contains data specific to blue zones. It gets processed by
@@ -392,6 +392,11 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
AF_BLUE_STRING_MALAYALAM_BOTTOM
"ട ഠ ധ ശ ഘ ച ഥ ല"
+ AF_BLUE_STRING_MONGOLIAN_TOP_BASE
+ "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
+ AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
+ "ᡃ"
+
AF_BLUE_STRING_MYANMAR_TOP
"ခ ဂ င ဒ ဝ ၥ ၊ ။"
AF_BLUE_STRING_MYANMAR_BOTTOM
@@ -947,6 +952,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_MONG
+ { AF_BLUE_STRING_MONGOLIAN_TOP_BASE, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_MYMR
{ AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
diff --git a/freetype/src/autofit/afblue.h b/freetype/src/autofit/afblue.h
index de31e259..b69b1df5 100644
--- a/freetype/src/autofit/afblue.h
+++ b/freetype/src/autofit/afblue.h
@@ -1,22 +1,22 @@
/* This file has been generated by the Perl script `afblue.pl', */
/* using data from file `afblue.dat'. */
-/***************************************************************************/
-/* */
-/* afblue.h */
-/* */
-/* Auto-fitter data for blue strings (specification). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afblue.h
+ *
+ * Auto-fitter data for blue strings (specification).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFBLUE_H_
@@ -212,56 +212,58 @@ FT_BEGIN_HEADER
AF_BLUE_STRING_LISU_BOTTOM = 3506,
AF_BLUE_STRING_MALAYALAM_TOP = 3538,
AF_BLUE_STRING_MALAYALAM_BOTTOM = 3582,
- AF_BLUE_STRING_MYANMAR_TOP = 3614,
- AF_BLUE_STRING_MYANMAR_BOTTOM = 3646,
- AF_BLUE_STRING_MYANMAR_ASCENDER = 3678,
- AF_BLUE_STRING_MYANMAR_DESCENDER = 3706,
- AF_BLUE_STRING_NKO_TOP = 3738,
- AF_BLUE_STRING_NKO_BOTTOM = 3762,
- AF_BLUE_STRING_NKO_SMALL_TOP = 3777,
- AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3786,
- AF_BLUE_STRING_OL_CHIKI = 3798,
- AF_BLUE_STRING_OLD_TURKIC_TOP = 3822,
- AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3837,
- AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3857,
- AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3897,
- AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3927,
- AF_BLUE_STRING_OSAGE_SMALL_TOP = 3942,
- AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3982,
- AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4022,
- AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4047,
- AF_BLUE_STRING_OSMANYA_TOP = 4062,
- AF_BLUE_STRING_OSMANYA_BOTTOM = 4102,
- AF_BLUE_STRING_SAURASHTRA_TOP = 4142,
- AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4174,
- AF_BLUE_STRING_SHAVIAN_TOP = 4194,
- AF_BLUE_STRING_SHAVIAN_BOTTOM = 4204,
- AF_BLUE_STRING_SHAVIAN_DESCENDER = 4229,
- AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4239,
- AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4274,
- AF_BLUE_STRING_SINHALA_TOP = 4289,
- AF_BLUE_STRING_SINHALA_BOTTOM = 4321,
- AF_BLUE_STRING_SINHALA_DESCENDER = 4353,
- AF_BLUE_STRING_SUNDANESE_TOP = 4397,
- AF_BLUE_STRING_SUNDANESE_BOTTOM = 4421,
- AF_BLUE_STRING_SUNDANESE_DESCENDER = 4453,
- AF_BLUE_STRING_TAI_VIET_TOP = 4461,
- AF_BLUE_STRING_TAI_VIET_BOTTOM = 4481,
- AF_BLUE_STRING_TAMIL_TOP = 4493,
- AF_BLUE_STRING_TAMIL_BOTTOM = 4525,
- AF_BLUE_STRING_TELUGU_TOP = 4557,
- AF_BLUE_STRING_TELUGU_BOTTOM = 4585,
- AF_BLUE_STRING_THAI_TOP = 4613,
- AF_BLUE_STRING_THAI_BOTTOM = 4637,
- AF_BLUE_STRING_THAI_ASCENDER = 4665,
- AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4677,
- AF_BLUE_STRING_THAI_DESCENDER = 4689,
- AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4705,
- AF_BLUE_STRING_THAI_DIGIT_TOP = 4713,
- AF_BLUE_STRING_TIFINAGH = 4725,
- AF_BLUE_STRING_VAI_TOP = 4757,
- AF_BLUE_STRING_VAI_BOTTOM = 4789,
- af_blue_1_1 = 4820,
+ AF_BLUE_STRING_MONGOLIAN_TOP_BASE = 3614,
+ AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE = 3658,
+ AF_BLUE_STRING_MYANMAR_TOP = 3662,
+ AF_BLUE_STRING_MYANMAR_BOTTOM = 3694,
+ AF_BLUE_STRING_MYANMAR_ASCENDER = 3726,
+ AF_BLUE_STRING_MYANMAR_DESCENDER = 3754,
+ AF_BLUE_STRING_NKO_TOP = 3786,
+ AF_BLUE_STRING_NKO_BOTTOM = 3810,
+ AF_BLUE_STRING_NKO_SMALL_TOP = 3825,
+ AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3834,
+ AF_BLUE_STRING_OL_CHIKI = 3846,
+ AF_BLUE_STRING_OLD_TURKIC_TOP = 3870,
+ AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3885,
+ AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3905,
+ AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3945,
+ AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3975,
+ AF_BLUE_STRING_OSAGE_SMALL_TOP = 3990,
+ AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 4030,
+ AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4070,
+ AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4095,
+ AF_BLUE_STRING_OSMANYA_TOP = 4110,
+ AF_BLUE_STRING_OSMANYA_BOTTOM = 4150,
+ AF_BLUE_STRING_SAURASHTRA_TOP = 4190,
+ AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4222,
+ AF_BLUE_STRING_SHAVIAN_TOP = 4242,
+ AF_BLUE_STRING_SHAVIAN_BOTTOM = 4252,
+ AF_BLUE_STRING_SHAVIAN_DESCENDER = 4277,
+ AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4287,
+ AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4322,
+ AF_BLUE_STRING_SINHALA_TOP = 4337,
+ AF_BLUE_STRING_SINHALA_BOTTOM = 4369,
+ AF_BLUE_STRING_SINHALA_DESCENDER = 4401,
+ AF_BLUE_STRING_SUNDANESE_TOP = 4445,
+ AF_BLUE_STRING_SUNDANESE_BOTTOM = 4469,
+ AF_BLUE_STRING_SUNDANESE_DESCENDER = 4501,
+ AF_BLUE_STRING_TAI_VIET_TOP = 4509,
+ AF_BLUE_STRING_TAI_VIET_BOTTOM = 4529,
+ AF_BLUE_STRING_TAMIL_TOP = 4541,
+ AF_BLUE_STRING_TAMIL_BOTTOM = 4573,
+ AF_BLUE_STRING_TELUGU_TOP = 4605,
+ AF_BLUE_STRING_TELUGU_BOTTOM = 4633,
+ AF_BLUE_STRING_THAI_TOP = 4661,
+ AF_BLUE_STRING_THAI_BOTTOM = 4685,
+ AF_BLUE_STRING_THAI_ASCENDER = 4713,
+ AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4725,
+ AF_BLUE_STRING_THAI_DESCENDER = 4737,
+ AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4753,
+ AF_BLUE_STRING_THAI_DIGIT_TOP = 4761,
+ AF_BLUE_STRING_TIFINAGH = 4773,
+ AF_BLUE_STRING_VAI_TOP = 4805,
+ AF_BLUE_STRING_VAI_BOTTOM = 4837,
+ af_blue_1_1 = 4868,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
@@ -355,24 +357,25 @@ FT_BEGIN_HEADER
AF_BLUE_STRINGSET_LATP = 166,
AF_BLUE_STRINGSET_LISU = 173,
AF_BLUE_STRINGSET_MLYM = 176,
- AF_BLUE_STRINGSET_MYMR = 179,
- AF_BLUE_STRINGSET_NKOO = 184,
- AF_BLUE_STRINGSET_NONE = 189,
- AF_BLUE_STRINGSET_OLCK = 190,
- AF_BLUE_STRINGSET_ORKH = 193,
- AF_BLUE_STRINGSET_OSGE = 196,
- AF_BLUE_STRINGSET_OSMA = 204,
- AF_BLUE_STRINGSET_SAUR = 207,
- AF_BLUE_STRINGSET_SHAW = 210,
- AF_BLUE_STRINGSET_SINH = 216,
- AF_BLUE_STRINGSET_SUND = 220,
- AF_BLUE_STRINGSET_TAML = 224,
- AF_BLUE_STRINGSET_TAVT = 227,
- AF_BLUE_STRINGSET_TELU = 230,
- AF_BLUE_STRINGSET_TFNG = 233,
- AF_BLUE_STRINGSET_THAI = 236,
- AF_BLUE_STRINGSET_VAII = 244,
- af_blue_2_1 = 247,
+ AF_BLUE_STRINGSET_MONG = 179,
+ AF_BLUE_STRINGSET_MYMR = 182,
+ AF_BLUE_STRINGSET_NKOO = 187,
+ AF_BLUE_STRINGSET_NONE = 192,
+ AF_BLUE_STRINGSET_OLCK = 193,
+ AF_BLUE_STRINGSET_ORKH = 196,
+ AF_BLUE_STRINGSET_OSGE = 199,
+ AF_BLUE_STRINGSET_OSMA = 207,
+ AF_BLUE_STRINGSET_SAUR = 210,
+ AF_BLUE_STRINGSET_SHAW = 213,
+ AF_BLUE_STRINGSET_SINH = 219,
+ AF_BLUE_STRINGSET_SUND = 223,
+ AF_BLUE_STRINGSET_TAML = 227,
+ AF_BLUE_STRINGSET_TAVT = 230,
+ AF_BLUE_STRINGSET_TELU = 233,
+ AF_BLUE_STRINGSET_TFNG = 236,
+ AF_BLUE_STRINGSET_THAI = 239,
+ AF_BLUE_STRINGSET_VAII = 247,
+ af_blue_2_1 = 250,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
af_blue_2_1_1 = af_blue_2_1 + 2,
diff --git a/freetype/src/autofit/afblue.hin b/freetype/src/autofit/afblue.hin
index 682147cb..30a28daf 100644
--- a/freetype/src/autofit/afblue.hin
+++ b/freetype/src/autofit/afblue.hin
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afblue.h */
-/* */
-/* Auto-fitter data for blue strings (specification). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afblue.h
+ *
+ * Auto-fitter data for blue strings (specification).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFBLUE_H_
diff --git a/freetype/src/autofit/afcjk.c b/freetype/src/autofit/afcjk.c
index 6001ebbd..a61689be 100644
--- a/freetype/src/autofit/afcjk.c
+++ b/freetype/src/autofit/afcjk.c
@@ -1,24 +1,24 @@
-/***************************************************************************/
-/* */
-/* afcjk.c */
-/* */
-/* Auto-fitter hinting routines for CJK writing system (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afcjk.c
+ *
+ * Auto-fitter hinting routines for CJK writing system (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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, archived at
+ * The algorithm is based on akito's autohint patch, archived at
*
- * https://web.archive.org/web/20051219160454/http://www.kde.gr.jp:80/~akito/patch/freetype2/2.1.7/
+ * https://web.archive.org/web/20051219160454/http://www.kde.gr.jp:80/~akito/patch/freetype2/2.1.7/
*
*/
@@ -27,7 +27,6 @@
#include FT_INTERNAL_DEBUG_H
#include "afglobal.h"
-#include "afpic.h"
#include "aflatin.h"
#include "afcjk.h"
@@ -44,14 +43,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afcjk
+#define FT_COMPONENT afcjk
/*************************************************************************/
@@ -92,13 +91,8 @@
AF_CJKMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = metrics->root.globals;
-#endif
-
AF_StyleClass style_class = metrics->root.style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
+ AF_ScriptClass script_class = af_script_classes[style_class->script];
/* If HarfBuzz is not available, we need a pointer to a single */
/* unsigned long value. */
@@ -204,10 +198,10 @@
goto Exit;
/*
- * We assume that the glyphs selected for the stem width
- * computation are `featureless' enough so that the linking
- * algorithm works fine without adjustments of its scoring
- * function.
+ * We assume that the glyphs selected for the stem width
+ * computation are `featureless' enough so that the linking
+ * algorithm works fine without adjustments of its scoring
+ * function.
*/
af_latin_hints_link_segments( hints,
0,
@@ -503,8 +497,8 @@
if ( num_flats == 0 && num_fills == 0 )
{
/*
- * we couldn't find a single glyph to compute this blue zone,
- * we will simply ignore it then
+ * we couldn't find a single glyph to compute this blue zone,
+ * we will simply ignore it then
*/
FT_TRACE5(( " empty\n" ));
continue;
@@ -920,11 +914,11 @@
}
/*
- * now compute the `serif' segments
+ * 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.
+ * 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.
*
*/
@@ -1030,21 +1024,21 @@
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. */
- /* */
- /*********************************************************************/
+ /**********************************************************************
+ *
+ * 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 );
@@ -1144,17 +1138,17 @@
}
}
- /******************************************************************/
- /* */
- /* Good, we now compute each edge's properties according to the */
- /* segments found on its position. Basically, these are */
- /* */
- /* - the edge's main direction */
- /* - stem edge, serif edge or both (which defaults to stem then) */
- /* - rounded edge, straight or both (which defaults to straight) */
- /* - link for edge */
- /* */
- /******************************************************************/
+ /*******************************************************************
+ *
+ * Good, we now compute each edge's properties according to the
+ * segments found on its position. Basically, these are
+ *
+ * - the edge's main direction
+ * - stem edge, serif edge or both (which defaults to stem then)
+ * - rounded edge, straight or both (which defaults to straight)
+ * - link for edge
+ *
+ */
/* first of all, set the `edge' field in each segment -- this is */
/* required in order to compute edge links */
@@ -1190,6 +1184,8 @@
seg = edge->first;
+ if ( !seg )
+ goto Skip_Loop;
do
{
@@ -1204,7 +1200,7 @@
/* check for links -- if seg->serif is set, then seg->link must */
/* be ignored */
- is_serif = (FT_Bool)( seg->serif && seg->serif->edge != edge );
+ is_serif = FT_BOOL( seg->serif && seg->serif->edge != edge );
if ( seg->link || is_serif )
{
@@ -1245,13 +1241,14 @@
edge2->flags |= AF_EDGE_SERIF;
}
else
- edge->link = edge2;
+ edge->link = edge2;
}
seg = seg->edge_next;
} while ( seg != edge->first );
+ Skip_Loop:
/* set the round/straight flags */
edge->flags = AF_EDGE_NORMAL;
@@ -1394,8 +1391,8 @@
af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
/*
- * correct x_scale and y_scale when needed, since they may have
- * been modified af_cjk_scale_dim above
+ * 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;
@@ -1414,21 +1411,21 @@
other_flags = 0;
/*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
+ * 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.
+ * We snap the width of horizontal stems for the monochrome and
+ * vertical LCD rendering targets only.
*/
if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
@@ -2124,8 +2121,8 @@
goto Exit;
/*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
+ * now hint the remaining edges (serifs and single) in order
+ * to complete our processing
*/
for ( edge = edges; edge < edge_limit; edge++ )
{
diff --git a/freetype/src/autofit/afcjk.h b/freetype/src/autofit/afcjk.h
index d229c0c9..59acae53 100644
--- a/freetype/src/autofit/afcjk.h
+++ b/freetype/src/autofit/afcjk.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afcjk.h */
-/* */
-/* Auto-fitter hinting routines for CJK writing system (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afcjk.h
+ *
+ * Auto-fitter hinting routines for CJK writing system (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -41,9 +41,9 @@ FT_BEGIN_HEADER
/*
- * CJK glyphs tend to fill the square. So we have both vertical and
- * horizontal blue zones. But some glyphs have flat bounding strokes that
- * leave some space between neighbour glyphs.
+ * CJK glyphs tend to fill the square. So we have both vertical and
+ * horizontal blue zones. But some glyphs have flat bounding strokes that
+ * leave some space between neighbour glyphs.
*/
#define AF_CJK_IS_TOP_BLUE( b ) \
diff --git a/freetype/src/autofit/afcover.h b/freetype/src/autofit/afcover.h
index 6eeb8fc9..ff207a97 100644
--- a/freetype/src/autofit/afcover.h
+++ b/freetype/src/autofit/afcover.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afcover.h */
-/* */
-/* Auto-fitter coverages (specification only). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afcover.h
+ *
+ * Auto-fitter coverages (specification only).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/* This header file can be included multiple times. */
diff --git a/freetype/src/autofit/afdummy.c b/freetype/src/autofit/afdummy.c
index f30c517c..7e07a41e 100644
--- a/freetype/src/autofit/afdummy.c
+++ b/freetype/src/autofit/afdummy.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* afdummy.c */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afdummy.c
+ *
+ * Auto-fitter dummy routines to be used if no hinting should be
+ * performed (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -38,13 +38,15 @@
static FT_Error
- af_dummy_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline )
+ af_dummy_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
+ FT_Outline* outline,
+ AF_StyleMetrics metrics )
{
FT_Error error;
FT_UNUSED( glyph_index );
+ FT_UNUSED( metrics );
error = af_glyph_hints_reload( hints, outline );
diff --git a/freetype/src/autofit/afdummy.h b/freetype/src/autofit/afdummy.h
index b382acd9..ab9227d3 100644
--- a/freetype/src/autofit/afdummy.h
+++ b/freetype/src/autofit/afdummy.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* afdummy.h */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afdummy.h
+ *
+ * Auto-fitter dummy routines to be used if no hinting should be
+ * performed (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/autofit/aferrors.h b/freetype/src/autofit/aferrors.h
index e5de5436..2ec336f7 100644
--- a/freetype/src/autofit/aferrors.h
+++ b/freetype/src/autofit/aferrors.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* aferrors.h */
-/* */
-/* Autofitter error codes (specification only). */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * aferrors.h
+ *
+ * Autofitter error codes (specification only).
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/autofit/afglobal.c b/freetype/src/autofit/afglobal.c
index 3d09c53e..6a9a1e5a 100644
--- a/freetype/src/autofit/afglobal.c
+++ b/freetype/src/autofit/afglobal.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afglobal.c */
-/* */
-/* Auto-fitter routines to compute global hinting values (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afglobal.c
+ *
+ * Auto-fitter routines to compute global hinting values (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -22,14 +22,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afglobal
+#define FT_COMPONENT afglobal
/* get writing system specific header files */
@@ -38,7 +38,6 @@
#include "afwrtsys.h"
#include "aferrors.h"
-#include "afpic.h"
#undef SCRIPT
@@ -67,8 +66,6 @@
#include "afstyles.h"
-#ifndef FT_CONFIG_OPTION_PIC
-
#undef WRITING_SYSTEM
#define WRITING_SYSTEM( ws, WS ) \
&af_ ## ws ## _writing_system_class,
@@ -110,8 +107,6 @@
NULL /* do not remove */
};
-#endif /* !FT_CONFIG_OPTION_PIC */
-
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -159,12 +154,12 @@
}
/* scan each style in a Unicode charmap */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
+ for ( ss = 0; af_style_classes[ss]; ss++ )
{
AF_StyleClass style_class =
- AF_STYLE_CLASSES_GET[ss];
+ af_style_classes[ss];
AF_ScriptClass script_class =
- AF_SCRIPT_CLASSES_GET[style_class->script];
+ af_script_classes[style_class->script];
AF_Script_UniRange range;
@@ -172,8 +167,8 @@
continue;
/*
- * Scan all Unicode points in the range and set the corresponding
- * glyph style index.
+ * Scan all Unicode points in the range and set the corresponding
+ * glyph style index.
*/
if ( style_class->coverage == AF_COVERAGE_DEFAULT )
{
@@ -246,9 +241,9 @@
}
/* handle the remaining default OpenType features ... */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
+ for ( ss = 0; af_style_classes[ss]; ss++ )
{
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
+ AF_StyleClass style_class = af_style_classes[ss];
if ( style_class->coverage == AF_COVERAGE_DEFAULT )
@@ -256,7 +251,7 @@
}
/* ... and finally the default OpenType features of the default script */
- af_shaper_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles, 1 );
+ af_shaper_get_coverage( globals, af_style_classes[dflt], gstyles, 1 );
/* mark ASCII digits */
for ( i = 0x30; i <= 0x39; i++ )
@@ -270,8 +265,8 @@
Exit:
/*
- * By default, all uncovered glyphs are set to the fallback style.
- * XXX: Shouldn't we disable hinting or do something similar?
+ * By default, all uncovered glyphs are set to the fallback style.
+ * XXX: Shouldn't we disable hinting or do something similar?
*/
if ( globals->module->fallback_style != AF_STYLE_UNASSIGNED )
{
@@ -295,9 +290,9 @@
"==============\n"
"\n" ));
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
+ for ( ss = 0; af_style_classes[ss]; ss++ )
{
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
+ AF_StyleClass style_class = af_style_classes[ss];
FT_UInt count = 0;
FT_Long idx;
@@ -397,9 +392,9 @@
if ( globals->metrics[nn] )
{
AF_StyleClass style_class =
- AF_STYLE_CLASSES_GET[nn];
+ af_style_classes[nn];
AF_WritingSystemClass writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
+ af_writing_system_classes[style_class->writing_system];
if ( writing_system_class->style_metrics_done )
@@ -448,8 +443,9 @@
style = (AF_Style)( globals->glyph_styles[gindex] &
AF_STYLE_UNASSIGNED );
- style_class = AF_STYLE_CLASSES_GET[style];
- writing_system_class = AF_WRITING_SYSTEM_CLASSES_GET
+ Again:
+ style_class = af_style_classes[style];
+ writing_system_class = af_writing_system_classes
[style_class->writing_system];
metrics = globals->metrics[style];
@@ -475,6 +471,16 @@
writing_system_class->style_metrics_done( metrics );
FT_FREE( metrics );
+
+ /* internal error code -1 indicates */
+ /* that no blue zones have been found */
+ if ( error == -1 )
+ {
+ style = (AF_Style)( globals->glyph_styles[gindex] &
+ AF_STYLE_UNASSIGNED );
+ goto Again;
+ }
+
goto Exit;
}
}
@@ -494,9 +500,9 @@
FT_UInt gindex )
{
if ( gindex < (FT_ULong)globals->glyph_count )
- return (FT_Bool)( globals->glyph_styles[gindex] & AF_DIGIT );
+ return FT_BOOL( globals->glyph_styles[gindex] & AF_DIGIT );
- return (FT_Bool)0;
+ return FT_BOOL( 0 );
}
diff --git a/freetype/src/autofit/afglobal.h b/freetype/src/autofit/afglobal.h
index 489ed46d..52f38350 100644
--- a/freetype/src/autofit/afglobal.h
+++ b/freetype/src/autofit/afglobal.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* afglobal.h */
-/* */
-/* Auto-fitter routines to compute global hinting values */
-/* (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afglobal.h
+ *
+ * Auto-fitter routines to compute global hinting values
+ * (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFGLOBAL_H_
@@ -60,8 +60,8 @@ FT_BEGIN_HEADER
/*
- * Default values and flags for both autofitter globals (found in
- * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
+ * Default values and flags for both autofitter globals (found in
+ * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
*/
/* index of fallback style in `af_style_classes' */
@@ -98,8 +98,8 @@ FT_BEGIN_HEADER
/*
- * Note that glyph_styles[] maps each glyph to an index into the
- * `af_style_classes' array.
+ * Note that glyph_styles[] maps each glyph to an index into the
+ * `af_style_classes' array.
*
*/
typedef struct AF_FaceGlobalsRec_
@@ -140,8 +140,8 @@ FT_BEGIN_HEADER
/*
- * model the global hints data for a given face, decomposed into
- * style-specific items
+ * model the global hints data for a given face, decomposed into
+ * style-specific items
*/
FT_LOCAL( FT_Error )
diff --git a/freetype/src/autofit/afhints.c b/freetype/src/autofit/afhints.c
index 0666dbc8..ed111c41 100644
--- a/freetype/src/autofit/afhints.c
+++ b/freetype/src/autofit/afhints.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afhints.c */
-/* */
-/* Auto-fitter hinting routines (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afhints.c
+ *
+ * Auto-fitter hinting routines (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -22,14 +22,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afhints
+#define FT_COMPONENT afhints
/* Get new segment for given axis. */
@@ -297,6 +297,19 @@
}
+ static int
+ af_get_strong_edge_index( AF_GlyphHints hints,
+ AF_Edge* strong_edges,
+ int dimension )
+ {
+ AF_AxisHints axis = &hints->axis[dimension];
+ AF_Edge edges = axis->edges;
+
+
+ return AF_INDEX_NUM( strong_edges[dimension], edges );
+ }
+
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -317,8 +330,10 @@
{
AF_DUMP(( " index hedge hseg vedge vseg flags "
/* " XXXXX XXXXX XXXXX XXXXX XXXXX XXXXXX" */
- " xorg yorg xscale yscale xfit yfit" ));
+ " xorg yorg xscale yscale xfit yfit "
/* " XXXXX XXXXX XXXX.XX XXXX.XX XXXX.XX XXXX.XX" */
+ " hbef haft vbef vaft" ));
+ /* " XXXXX XXXXX XXXXX XXXXX" */
}
else
AF_DUMP(( " (none)\n" ));
@@ -330,6 +345,7 @@
int segment_idx_1 = af_get_segment_index( hints, point_idx, 1 );
char buf1[16], buf2[16], buf3[16], buf4[16];
+ char buf5[16], buf6[16], buf7[16], buf8[16];
/* insert extra newline at the beginning of a contour */
@@ -340,7 +356,8 @@
}
AF_DUMP(( " %5d %5s %5s %5s %5s %s"
- " %5d %5d %7.2f %7.2f %7.2f %7.2f\n",
+ " %5d %5d %7.2f %7.2f %7.2f %7.2f"
+ " %5s %5s %5s %5s\n",
point_idx,
af_print_idx( buf1,
af_get_edge_index( hints, segment_idx_1, 1 ) ),
@@ -359,7 +376,20 @@
point->ox / 64.0,
point->oy / 64.0,
point->x / 64.0,
- point->y / 64.0 ));
+ point->y / 64.0,
+
+ af_print_idx( buf5, af_get_strong_edge_index( hints,
+ point->before,
+ 1 ) ),
+ af_print_idx( buf6, af_get_strong_edge_index( hints,
+ point->after,
+ 1 ) ),
+ af_print_idx( buf7, af_get_strong_edge_index( hints,
+ point->before,
+ 0 ) ),
+ af_print_idx( buf8, af_get_strong_edge_index( hints,
+ point->after,
+ 0 ) ) ));
}
AF_DUMP(( "\n" ));
}
@@ -519,7 +549,7 @@
*offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->fx
: seg->first->fy;
if ( seg->edge )
- *is_blue = (FT_Bool)( seg->edge->blue_edge != 0 );
+ *is_blue = FT_BOOL( seg->edge->blue_edge );
else
*is_blue = FALSE;
@@ -558,8 +588,8 @@
/*
- * note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
- * since they have a constant X coordinate.
+ * note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
+ * since they have a constant X coordinate.
*/
if ( dimension == AF_DIMENSION_HORZ )
AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
@@ -681,8 +711,8 @@
memory = hints->memory;
/*
- * note that we don't need to free the segment and edge
- * buffers since they are really within the hints->points array
+ * 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++ )
{
@@ -776,9 +806,9 @@
}
/*
- * then reallocate the points arrays if necessary --
- * note that we reserve two additional point positions, used to
- * hint metrics appropriately
+ * then reallocate the points arrays if necessary --
+ * note that we reserve two additional point positions, used to
+ * hint metrics appropriately
*/
new_max = (FT_UInt)( outline->n_points + 2 );
old_max = (FT_UInt)hints->max_points;
@@ -898,6 +928,14 @@
prev = end;
}
}
+
+#ifdef FT_DEBUG_AUTOFIT
+ point->before[0] = NULL;
+ point->before[1] = NULL;
+ point->after[0] = NULL;
+ point->after[1] = NULL;
+#endif
+
}
}
@@ -918,15 +956,15 @@
{
/*
- * Compute directions of `in' and `out' vectors.
+ * Compute directions of `in' and `out' vectors.
*
- * Note that distances between points that are very near to each
- * other are accumulated. In other words, the auto-hinter either
- * prepends the small vectors between near points to the first
- * non-near vector, or the sum of small vector lengths exceeds a
- * threshold, thus `grouping' the small vectors. All intermediate
- * points are tagged as weak; the directions are adjusted also to
- * be equal to the accumulated one.
+ * Note that distances between points that are very near to each
+ * other are accumulated. In other words, the auto-hinter either
+ * prepends the small vectors between near points to the first
+ * non-near vector, or the sum of small vector lengths exceeds a
+ * threshold, thus `grouping' the small vectors. All intermediate
+ * points are tagged as weak; the directions are adjusted also to
+ * be equal to the accumulated one.
*/
FT_Int near_limit2 = 2 * near_limit - 1;
@@ -956,12 +994,12 @@
out_y = point->fy - prev->fy;
/*
- * We use Taxicab metrics to measure the vector length.
+ * We use Taxicab metrics to measure the vector length.
*
- * Note that the accumulated distances so far could have the
- * opposite direction of the distance measured here. For this
- * reason we use `near_limit2' for the comparison to get a
- * non-near point even in the worst case.
+ * Note that the accumulated distances so far could have the
+ * opposite direction of the distance measured here. For this
+ * reason we use `near_limit2' for the comparison to get a
+ * non-near point even in the worst case.
*/
if ( FT_ABS( out_x ) + FT_ABS( out_y ) >= near_limit2 )
break;
@@ -979,11 +1017,11 @@
curr = first;
/*
- * We abuse the `u' and `v' fields to store index deltas to the
- * next and previous non-near point, respectively.
+ * We abuse the `u' and `v' fields to store index deltas to the
+ * next and previous non-near point, respectively.
*
- * To avoid problems with not having non-near points, we point to
- * `first' by default as the next non-near point.
+ * To avoid problems with not having non-near points, we point to
+ * `first' by default as the next non-near point.
*
*/
curr->u = (FT_Pos)( first - curr );
@@ -1035,12 +1073,12 @@
}
/*
- * The next step is to `simplify' an outline's topology so that we
- * can identify local extrema more reliably: A series of
- * non-horizontal or non-vertical vectors pointing into the same
- * quadrant are handled as a single, long vector. From a
- * topological point of the view, the intermediate points are of no
- * interest and thus tagged as weak.
+ * The next step is to `simplify' an outline's topology so that we
+ * can identify local extrema more reliably: A series of
+ * non-horizontal or non-vertical vectors pointing into the same
+ * quadrant are handled as a single, long vector. From a
+ * topological point of the view, the intermediate points are of no
+ * interest and thus tagged as weak.
*/
for ( point = points; point < point_limit; point++ )
@@ -1080,9 +1118,9 @@
}
/*
- * Finally, check for remaining weak points. Everything else not
- * collected in edges so far is then implicitly classified as strong
- * points.
+ * Finally, check for remaining weak points. Everything else not
+ * collected in edges so far is then implicitly classified as strong
+ * points.
*/
for ( point = points; point < point_limit; point++ )
@@ -1309,6 +1347,12 @@
if ( delta >= 0 )
{
u = edge->pos - ( edge->opos - ou );
+
+#ifdef FT_DEBUG_AUTOFIT
+ point->before[dim] = edge;
+ point->after[dim] = NULL;
+#endif
+
goto Store_Point;
}
@@ -1318,6 +1362,12 @@
if ( delta >= 0 )
{
u = edge->pos + ( ou - edge->opos );
+
+#ifdef FT_DEBUG_AUTOFIT
+ point->before[dim] = NULL;
+ point->after[dim] = edge;
+#endif
+
goto Store_Point;
}
@@ -1364,6 +1414,12 @@
{
/* we are on the edge */
u = edge->pos;
+
+#ifdef FT_DEBUG_AUTOFIT
+ point->before[dim] = NULL;
+ point->after[dim] = NULL;
+#endif
+
goto Store_Point;
}
}
@@ -1374,6 +1430,11 @@
AF_Edge after = edges + min + 0;
+#ifdef FT_DEBUG_AUTOFIT
+ point->before[dim] = before;
+ point->after[dim] = after;
+#endif
+
/* assert( before && after && before != after ) */
if ( before->scale == 0 )
before->scale = FT_DivFix( after->pos - before->pos,
diff --git a/freetype/src/autofit/afhints.h b/freetype/src/autofit/afhints.h
index 3326ebc4..e0cf612f 100644
--- a/freetype/src/autofit/afhints.h
+++ b/freetype/src/autofit/afhints.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afhints.h */
-/* */
-/* Auto-fitter hinting routines (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afhints.h
+ *
+ * Auto-fitter hinting routines (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,8 +26,8 @@
FT_BEGIN_HEADER
/*
- * The definition of outline glyph hints. These are shared by all
- * writing system analysis routines (until now).
+ * The definition of outline glyph hints. These are shared by all
+ * writing system analysis routines (until now).
*/
typedef enum AF_Dimension_
@@ -56,153 +56,153 @@ FT_BEGIN_HEADER
/*
- * The following explanations are mostly taken from the article
+ * The following explanations are mostly taken from the article
*
- * Real-Time Grid Fitting of Typographic Outlines
+ * Real-Time Grid Fitting of Typographic Outlines
*
- * by David Turner and Werner Lemberg
+ * by David Turner and Werner Lemberg
*
- * https://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
+ * https://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
*
- * with appropriate updates.
+ * with appropriate updates.
*
*
- * Segments
+ * Segments
*
- * `af_{cjk,latin,...}_hints_compute_segments' are the functions to
- * find segments in an outline.
+ * `af_{cjk,latin,...}_hints_compute_segments' are the functions to
+ * find segments in an outline.
*
- * A segment is a series of at least two consecutive points that are
- * approximately aligned along a coordinate axis. The analysis to do
- * so is specific to a writing system.
+ * A segment is a series of at least two consecutive points that are
+ * approximately aligned along a coordinate axis. The analysis to do
+ * so is specific to a writing system.
*
*
- * Edges
+ * Edges
*
- * `af_{cjk,latin,...}_hints_compute_edges' are the functions to find
- * edges.
+ * `af_{cjk,latin,...}_hints_compute_edges' are the functions to find
+ * edges.
*
- * As soon as segments are defined, the auto-hinter groups them into
- * edges. An edge corresponds to a single position on the main
- * dimension that collects one or more segments (allowing for a small
- * threshold).
+ * As soon as segments are defined, the auto-hinter groups them into
+ * edges. An edge corresponds to a single position on the main
+ * dimension that collects one or more segments (allowing for a small
+ * threshold).
*
- * As an example, the `latin' writing system first tries to grid-fit
- * edges, then to align segments on the edges unless it detects that
- * they form a serif.
+ * As an example, the `latin' writing system first tries to grid-fit
+ * edges, then to align segments on the edges unless it detects that
+ * they form a serif.
*
*
- * A H
- * | |
- * | |
- * | |
- * | |
- * C | | F
- * +------<-----+ +-----<------+
- * | B G |
- * | |
- * | |
- * +--------------->------------------+
- * D E
+ * A H
+ * | |
+ * | |
+ * | |
+ * | |
+ * C | | F
+ * +------<-----+ +-----<------+
+ * | B G |
+ * | |
+ * | |
+ * +--------------->------------------+
+ * D E
*
*
- * Stems
+ * Stems
*
- * Stems are detected by `af_{cjk,latin,...}_hint_edges'.
+ * Stems are detected by `af_{cjk,latin,...}_hint_edges'.
*
- * Segments need to be `linked' to other ones in order to detect stems.
- * A stem is made of two segments that face each other in opposite
- * directions and that are sufficiently close to each other. Using
- * vocabulary from the TrueType specification, stem segments form a
- * `black distance'.
+ * Segments need to be `linked' to other ones in order to detect stems.
+ * A stem is made of two segments that face each other in opposite
+ * directions and that are sufficiently close to each other. Using
+ * vocabulary from the TrueType specification, stem segments form a
+ * `black distance'.
*
- * In the above ASCII drawing, the horizontal segments are BC, DE, and
- * FG; the vertical segments are AB, CD, EF, and GH.
+ * In the above ASCII drawing, the horizontal segments are BC, DE, and
+ * FG; the vertical segments are AB, CD, EF, and GH.
*
- * Each segment has at most one `best' candidate to form a black
- * distance, or no candidate at all. Notice that two distinct segments
- * can have the same candidate, which frequently means a serif.
+ * Each segment has at most one `best' candidate to form a black
+ * distance, or no candidate at all. Notice that two distinct segments
+ * can have the same candidate, which frequently means a serif.
*
- * A stem is recognized by the following condition:
+ * A stem is recognized by the following condition:
*
- * best segment_1 = segment_2 && best segment_2 = segment_1
+ * best segment_1 = segment_2 && best segment_2 = segment_1
*
- * The best candidate is stored in field `link' in structure
- * `AF_Segment'.
+ * The best candidate is stored in field `link' in structure
+ * `AF_Segment'.
*
- * In the above ASCII drawing, the best candidate for both AB and CD is
- * GH, while the best candidate for GH is AB. Similarly, the best
- * candidate for EF and GH is AB, while the best candidate for AB is
- * GH.
+ * In the above ASCII drawing, the best candidate for both AB and CD is
+ * GH, while the best candidate for GH is AB. Similarly, the best
+ * candidate for EF and GH is AB, while the best candidate for AB is
+ * GH.
*
- * The detection and handling of stems is dependent on the writing
- * system.
+ * The detection and handling of stems is dependent on the writing
+ * system.
*
*
- * Serifs
+ * Serifs
*
- * Serifs are detected by `af_{cjk,latin,...}_hint_edges'.
+ * Serifs are detected by `af_{cjk,latin,...}_hint_edges'.
*
- * In comparison to a stem, a serif (as handled by the auto-hinter
- * module that takes care of the `latin' writing system) has
+ * In comparison to a stem, a serif (as handled by the auto-hinter
+ * module that takes care of the `latin' writing system) has
*
- * best segment_1 = segment_2 && best segment_2 != segment_1
+ * best segment_1 = segment_2 && best segment_2 != segment_1
*
- * where segment_1 corresponds to the serif segment (CD and EF in the
- * above ASCII drawing).
+ * where segment_1 corresponds to the serif segment (CD and EF in the
+ * above ASCII drawing).
*
- * The best candidate is stored in field `serif' in structure
- * `AF_Segment' (and `link' is set to NULL).
+ * The best candidate is stored in field `serif' in structure
+ * `AF_Segment' (and `link' is set to NULL).
*
*
- * Touched points
+ * Touched points
*
- * A point is called `touched' if it has been processed somehow by the
- * auto-hinter. It basically means that it shouldn't be moved again
- * (or moved only under certain constraints to preserve the already
- * applied processing).
+ * A point is called `touched' if it has been processed somehow by the
+ * auto-hinter. It basically means that it shouldn't be moved again
+ * (or moved only under certain constraints to preserve the already
+ * applied processing).
*
*
- * Flat and round segments
+ * Flat and round segments
*
- * Segments are `round' or `flat', depending on the series of points
- * that define them. A segment is round if the next and previous point
- * of an extremum (which can be either a single point or sequence of
- * points) are both conic or cubic control points. Otherwise, a
- * segment with an extremum is flat.
+ * Segments are `round' or `flat', depending on the series of points
+ * that define them. A segment is round if the next and previous point
+ * of an extremum (which can be either a single point or sequence of
+ * points) are both conic or cubic control points. Otherwise, a
+ * segment with an extremum is flat.
*
*
- * Strong Points
+ * Strong Points
*
- * Experience has shown that points not part of an edge need to be
- * interpolated linearly between their two closest edges, even if these
- * are not part of the contour of those particular points. Typical
- * candidates for this are
+ * Experience has shown that points not part of an edge need to be
+ * interpolated linearly between their two closest edges, even if these
+ * are not part of the contour of those particular points. Typical
+ * candidates for this are
*
- * - angle points (i.e., points where the `in' and `out' direction
- * differ greatly)
+ * - angle points (i.e., points where the `in' and `out' direction
+ * differ greatly)
*
- * - inflection points (i.e., where the `in' and `out' angles are the
- * same, but the curvature changes sign) [currently, such points
- * aren't handled specially in the auto-hinter]
+ * - inflection points (i.e., where the `in' and `out' angles are the
+ * same, but the curvature changes sign) [currently, such points
+ * aren't handled specially in the auto-hinter]
*
- * `af_glyph_hints_align_strong_points' is the function that takes
- * care of such situations; it is equivalent to the TrueType `IP'
- * hinting instruction.
+ * `af_glyph_hints_align_strong_points' is the function that takes
+ * care of such situations; it is equivalent to the TrueType `IP'
+ * hinting instruction.
*
*
- * Weak Points
+ * Weak Points
*
- * Other points in the outline must be interpolated using the
- * coordinates of their previous and next unfitted contour neighbours.
- * These are called `weak points' and are touched by the function
- * `af_glyph_hints_align_weak_points', equivalent to the TrueType `IUP'
- * hinting instruction. Typical candidates are control points and
- * points on the contour without a major direction.
+ * Other points in the outline must be interpolated using the
+ * coordinates of their previous and next unfitted contour neighbours.
+ * These are called `weak points' and are touched by the function
+ * `af_glyph_hints_align_weak_points', equivalent to the TrueType `IUP'
+ * hinting instruction. Typical candidates are control points and
+ * points on the contour without a major direction.
*
- * The major effect is to reduce possible distortion caused by
- * alignment of edges and strong points, thus weak points are processed
- * after strong points.
+ * The major effect is to reduce possible distortion caused by
+ * alignment of edges and strong points, thus weak points are processed
+ * after strong points.
*/
@@ -252,6 +252,12 @@ FT_BEGIN_HEADER
AF_Point next; /* next point in contour */
AF_Point prev; /* previous point in contour */
+#ifdef FT_DEBUG_AUTOFIT
+ /* track `before' and `after' edges for strong points */
+ AF_Edge before[2];
+ AF_Edge after[2];
+#endif
+
} AF_PointRec;
diff --git a/freetype/src/autofit/afindic.c b/freetype/src/autofit/afindic.c
index dfbea5f3..a17117c7 100644
--- a/freetype/src/autofit/afindic.c
+++ b/freetype/src/autofit/afindic.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afindic.c */
-/* */
-/* Auto-fitter hinting routines for Indic writing system (body). */
-/* */
-/* Copyright 2007-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afindic.c
+ *
+ * Auto-fitter hinting routines for Indic writing system (body).
+ *
+ * Copyright (C) 2007-2019 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"
diff --git a/freetype/src/autofit/afindic.h b/freetype/src/autofit/afindic.h
index 5688738e..bc5bc59f 100644
--- a/freetype/src/autofit/afindic.h
+++ b/freetype/src/autofit/afindic.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* afindic.h */
-/* */
-/* Auto-fitter hinting routines for Indic writing system */
-/* (specification). */
-/* */
-/* Copyright 2007-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afindic.h
+ *
+ * Auto-fitter hinting routines for Indic writing system
+ * (specification).
+ *
+ * Copyright (C) 2007-2019 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_
diff --git a/freetype/src/autofit/aflatin.c b/freetype/src/autofit/aflatin.c
index 8f3cc466..27d40248 100644
--- a/freetype/src/autofit/aflatin.c
+++ b/freetype/src/autofit/aflatin.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* aflatin.c */
-/* */
-/* Auto-fitter hinting routines for latin writing system (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * aflatin.c
+ *
+ * Auto-fitter hinting routines for latin writing system (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -21,7 +21,6 @@
#include FT_INTERNAL_DEBUG_H
#include "afglobal.h"
-#include "afpic.h"
#include "aflatin.h"
#include "aferrors.h"
@@ -31,14 +30,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_aflatin
+#define FT_COMPONENT aflatin
/* needed for computation of round vs. flat segments */
@@ -83,13 +82,8 @@
AF_LatinMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = metrics->root.globals;
-#endif
-
AF_StyleClass style_class = metrics->root.style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
+ AF_ScriptClass script_class = af_script_classes[style_class->script];
/* If HarfBuzz is not available, we need a pointer to a single */
/* unsigned long value. */
@@ -155,7 +149,11 @@
af_shaper_buf_destroy( face, shaper_buf );
if ( !glyph_index )
+ {
+ FT_TRACE5(( "standard character missing;"
+ " using fallback stem widths\n" ));
goto Exit;
+ }
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
ch, glyph_index ));
@@ -197,10 +195,10 @@
goto Exit;
/*
- * We assume that the glyphs selected for the stem width
- * computation are `featureless' enough so that the linking
- * algorithm works fine without adjustments of its scoring
- * function.
+ * We assume that the glyphs selected for the stem width
+ * computation are `featureless' enough so that the linking
+ * algorithm works fine without adjustments of its scoring
+ * function.
*/
af_latin_hints_link_segments( hints,
0,
@@ -318,7 +316,7 @@
/* Find all blue zones. Flat segments give the reference points, */
/* round segments the overshoot positions. */
- static void
+ static int
af_latin_metrics_init_blues( AF_LatinMetrics metrics,
FT_Face face )
{
@@ -904,8 +902,8 @@
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
+ * we couldn't find a single glyph to compute this blue zone,
+ * we will simply ignore it then
*/
FT_TRACE5(( " empty\n" ));
continue;
@@ -987,10 +985,11 @@
af_shaper_buf_destroy( face, shaper_buf );
- /* we finally check whether blue zones are ordered; */
- /* `ref' and `shoot' values of two blue zones must not overlap */
if ( axis->blue_count )
{
+ /* we finally check whether blue zones are ordered; */
+ /* `ref' and `shoot' values of two blue zones must not overlap */
+
FT_UInt i;
AF_LatinBlue blue_sorted[AF_BLUE_STRINGSET_MAX_LEN + 2];
@@ -1039,11 +1038,34 @@
*a ));
}
}
+
+ FT_TRACE5(( "\n" ));
+
+ return 0;
}
+ else
+ {
+ /* disable hinting for the current style if there are no blue zones */
- FT_TRACE5(( "\n" ));
+ AF_FaceGlobals globals = metrics->root.globals;
+ FT_UShort* gstyles = globals->glyph_styles;
+
+ FT_Long i;
+
+
+ FT_TRACE5(( "no blue zones found:"
+ " hinting disabled for this style\n" ));
+
+ for ( i = 0; i < globals->glyph_count; i++ )
+ {
+ if ( ( gstyles[i] & AF_STYLE_MASK ) == sc->style )
+ gstyles[i] = AF_STYLE_NONE_DFLT;
+ }
+
+ FT_TRACE5(( "\n" ));
- return;
+ return 1;
+ }
}
@@ -1122,6 +1144,8 @@
af_latin_metrics_init( AF_LatinMetrics metrics,
FT_Face face )
{
+ FT_Error error = FT_Err_Ok;
+
FT_CharMap oldmap = face->charmap;
@@ -1130,12 +1154,18 @@
if ( !FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
{
af_latin_metrics_init_widths( metrics, face );
- af_latin_metrics_init_blues( metrics, face );
+ if ( af_latin_metrics_init_blues( metrics, face ) )
+ {
+ /* use internal error code to indicate missing blue zones */
+ error = -1;
+ goto Exit;
+ }
af_latin_metrics_check_digits( metrics, face );
}
+ Exit:
FT_Set_Charmap( face, oldmap );
- return FT_Err_Ok;
+ return error;
}
@@ -1313,7 +1343,7 @@
/* an extra-light axis corresponds to a standard width that is */
/* smaller than 5/8 pixels */
axis->extra_light =
- (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
+ FT_BOOL( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
#ifdef FT_DEBUG_LEVEL_TRACE
if ( axis->extra_light )
@@ -1449,13 +1479,13 @@
nn,
blue->ref.org,
blue->ref.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)",
+ ( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
+ : " (inactive)",
nn,
blue->shoot.org,
blue->shoot.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)" ));
+ ( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
+ : " (inactive)" ));
}
#endif
}
@@ -1997,17 +2027,17 @@
if ( len >= len_threshold )
{
/*
- * The score is the sum of two demerits indicating the
- * `badness' of a fit, measured along the segments' main axis
- * and orthogonal to it, respectively.
+ * The score is the sum of two demerits indicating the
+ * `badness' of a fit, measured along the segments' main axis
+ * and orthogonal to it, respectively.
*
- * o The less overlapping along the main axis, the worse it
- * is, causing a larger demerit.
+ * - The less overlapping along the main axis, the worse it
+ * is, causing a larger demerit.
*
- * o The nearer the orthogonal distance to a stem width, the
- * better it is, causing a smaller demerit. For simplicity,
- * however, we only increase the demerit for values that
- * exceed the largest stem width.
+ * - The nearer the orthogonal distance to a stem width, the
+ * better it is, causing a smaller demerit. For simplicity,
+ * however, we only increase the demerit for values that
+ * exceed the largest stem width.
*/
FT_Pos dist = pos2 - pos1;
@@ -2079,13 +2109,8 @@
FT_Memory memory = hints->memory;
AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = hints->metrics->globals;
-#endif
-
AF_StyleClass style_class = hints->metrics->style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
+ AF_ScriptClass script_class = af_script_classes[style_class->script];
FT_Bool top_to_bottom_hinting = 0;
@@ -2116,9 +2141,9 @@
top_to_bottom_hinting = script_class->top_to_bottom_hinting;
/*
- * We ignore all segments that are less than 1 pixel in length
- * to avoid many problems with serif fonts. We compute the
- * corresponding threshold in font units.
+ * We ignore all segments that are less than 1 pixel in length
+ * to avoid many problems with serif fonts. We compute the
+ * corresponding threshold in font units.
*/
if ( dim == AF_DIMENSION_HORZ )
segment_length_threshold = FT_DivFix( 64, hints->y_scale );
@@ -2126,26 +2151,26 @@
segment_length_threshold = 0;
/*
- * Similarly, we ignore segments that have a width delta
- * larger than 0.5px (i.e., a width larger than 1px).
+ * Similarly, we ignore segments that have a width delta
+ * larger than 0.5px (i.e., a width larger than 1px).
*/
segment_width_threshold = FT_DivFix( 32, scale );
- /*********************************************************************/
- /* */
- /* We begin by generating a sorted table of edges for the current */
- /* direction. To do so, we simply scan each segment and try to find */
- /* an edge in our table that corresponds to its position. */
- /* */
- /* If no edge is found, we create and insert a new edge in the */
- /* sorted table. Otherwise, we simply add the segment to the edge's */
- /* list which gets processed in the second step to compute the */
- /* edge's properties. */
- /* */
- /* Note that the table of edges is sorted along the segment/edge */
- /* position. */
- /* */
- /*********************************************************************/
+ /**********************************************************************
+ *
+ * We begin by generating a sorted table of edges for the current
+ * direction. To do so, we simply scan each segment and try to find
+ * an edge in our table that corresponds to its position.
+ *
+ * If no edge is found, we create and insert a new edge in the
+ * sorted table. Otherwise, we simply add the segment to the edge's
+ * list which gets processed in the second step to compute the
+ * edge's properties.
+ *
+ * Note that the table of edges is sorted along the segment/edge
+ * position.
+ *
+ */
/* assure that edge distance threshold is at most 0.25px */
edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
@@ -2267,17 +2292,17 @@
}
- /******************************************************************/
- /* */
- /* Good, we now compute each edge's properties according to the */
- /* segments found on its position. Basically, these are */
- /* */
- /* - the edge's main direction */
- /* - stem edge, serif edge or both (which defaults to stem then) */
- /* - rounded edge, straight or both (which defaults to straight) */
- /* - link for edge */
- /* */
- /******************************************************************/
+ /*******************************************************************
+ *
+ * Good, we now compute each edge's properties according to the
+ * segments found on its position. Basically, these are
+ *
+ * - the edge's main direction
+ * - stem edge, serif edge or both (which defaults to stem then)
+ * - rounded edge, straight or both (which defaults to straight)
+ * - link for edge
+ *
+ */
/* first of all, set the `edge' field in each segment -- this is */
/* required in order to compute edge links */
@@ -2339,9 +2364,9 @@
/* 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 );
+ is_serif = FT_BOOL( seg->serif &&
+ seg->serif->edge &&
+ seg->serif->edge != edge );
if ( ( seg->link && seg->link->edge ) || is_serif )
{
@@ -2576,8 +2601,8 @@
af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
/*
- * correct x_scale and y_scale if needed, since they may have
- * been modified by `af_latin_metrics_scale_dim' above
+ * correct x_scale and y_scale if needed, since they may have
+ * been modified by `af_latin_metrics_scale_dim' above
*/
hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
@@ -2596,21 +2621,21 @@
other_flags = 0;
/*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
+ * 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.
+ * We snap the width of horizontal stems for the monochrome and
+ * vertical LCD rendering targets only.
*/
if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
@@ -2619,11 +2644,11 @@
other_flags |= AF_LATIN_HINTS_MONO;
/*
- * In `light' or `lcd' mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
+ * In `light' or `lcd' mode we disable horizontal hinting completely.
+ * We also do it if the face is italic.
*
- * However, if warping is enabled (which only works in `light' hinting
- * mode), advance widths get adjusted, too.
+ * However, if warping is enabled (which only works in `light' hinting
+ * mode), advance widths get adjusted, too.
*/
if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
@@ -2966,13 +2991,8 @@
AF_Edge anchor = NULL;
FT_Int has_serifs = 0;
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = hints->metrics->globals;
-#endif
-
AF_StyleClass style_class = hints->metrics->style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
+ AF_ScriptClass script_class = af_script_classes[style_class->script];
FT_Bool top_to_bottom_hinting = 0;
@@ -3006,12 +3026,12 @@
edge2 = edge->link;
/*
- * If a stem contains both a neutral and a non-neutral blue zone,
- * skip the neutral one. Otherwise, outlines with different
- * directions might be incorrectly aligned at the same vertical
- * position.
+ * If a stem contains both a neutral and a non-neutral blue zone,
+ * skip the neutral one. Otherwise, outlines with different
+ * directions might be incorrectly aligned at the same vertical
+ * position.
*
- * If we have two neutral blue zones, skip one of them.
+ * If we have two neutral blue zones, skip one of them.
*
*/
if ( edge->blue_edge && edge2 && edge2->blue_edge )
@@ -3374,8 +3394,8 @@
if ( has_serifs || !anchor )
{
/*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
+ * now hint the remaining edges (serifs and single) in order
+ * to complete our processing
*/
for ( edge = edges; edge < edge_limit; edge++ )
{
diff --git a/freetype/src/autofit/aflatin.h b/freetype/src/autofit/aflatin.h
index 432cccce..40479538 100644
--- a/freetype/src/autofit/aflatin.h
+++ b/freetype/src/autofit/aflatin.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* aflatin.h */
-/* */
-/* Auto-fitter hinting routines for latin writing system */
-/* (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * aflatin.h
+ *
+ * Auto-fitter hinting routines for latin writing system
+ * (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -45,9 +45,9 @@ FT_BEGIN_HEADER
/*
- * The following declarations could be embedded in the file `aflatin.c';
- * they have been made semi-public to allow alternate writing system
- * hinters to re-use some of them.
+ * The following declarations could be embedded in the file `aflatin.c';
+ * they have been made semi-public to allow alternate writing system
+ * hinters to re-use some of them.
*/
@@ -161,8 +161,8 @@ FT_BEGIN_HEADER
/*
- * The next functions shouldn't normally be exported. However, other
- * writing systems might like to use these functions as-is.
+ * The next functions shouldn't normally be exported. However, other
+ * writing systems might like to use these functions as-is.
*/
FT_LOCAL( FT_Error )
af_latin_hints_compute_segments( AF_GlyphHints hints,
diff --git a/freetype/src/autofit/aflatin2.c b/freetype/src/autofit/aflatin2.c
index 5c713781..c601ab8d 100644
--- a/freetype/src/autofit/aflatin2.c
+++ b/freetype/src/autofit/aflatin2.c
@@ -3,22 +3,22 @@
/* marked as experimental. */
-/***************************************************************************/
-/* */
-/* aflatin2.c */
-/* */
-/* Auto-fitter hinting routines for latin writing system (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * aflatin2.c
+ *
+ * Auto-fitter hinting routines for latin writing system (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include FT_ADVANCES_H
@@ -37,14 +37,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_aflatin2
+#define FT_COMPONENT aflatin2
FT_LOCAL_DEF( FT_Error )
@@ -265,7 +265,7 @@
/* 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 )
+ if ( last <= first )
continue;
if ( AF_LATIN_IS_TOP_BLUE( bb ) )
@@ -299,6 +299,7 @@
/* now check whether the point belongs to a straight or round */
/* segment; we first need to find in which contour the extremum */
/* lies, then inspect its previous and next points */
+ if ( best_point >= 0 )
{
FT_Pos best_x = points[best_point].x;
FT_Int start, end, prev, next;
@@ -358,8 +359,8 @@
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
+ * we couldn't find a single glyph to compute this blue zone,
+ * we will simply ignore it then
*/
FT_TRACE5(( " empty\n" ));
continue;
@@ -632,7 +633,7 @@
/* an extra-light axis corresponds to a standard width that is */
/* smaller than 5/8 pixels */
axis->extra_light =
- (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
+ FT_BOOL( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
if ( dim == AF_DIMENSION_VERT )
{
@@ -1108,13 +1109,13 @@
: 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
+ * 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
+ * also, unlink serif segments that are linked to segments farther
+ * than 50% of the standard width
*/
if ( dim == AF_DIMENSION_HORZ )
{
@@ -1126,21 +1127,21 @@
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. */
- /* */
- /*********************************************************************/
+ /**********************************************************************
+ *
+ * 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 );
@@ -1230,17 +1231,17 @@
}
- /*********************************************************************/
- /* */
- /* 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 */
- /* */
- /*********************************************************************/
+ /**********************************************************************
+ *
+ * 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 */
@@ -1302,9 +1303,9 @@
/* 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 );
+ is_serif = FT_BOOL( seg->serif &&
+ seg->serif->edge &&
+ seg->serif->edge != edge );
if ( ( seg->link && seg->link->edge ) || is_serif )
{
@@ -1524,8 +1525,8 @@
af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
/*
- * correct x_scale and y_scale if needed, since they may have
- * been modified `af_latin2_metrics_scale_dim' above
+ * 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;
@@ -1544,21 +1545,21 @@
other_flags = 0;
/*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
+ * 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.
+ * We snap the width of horizontal stems for the monochrome and
+ * vertical LCD rendering targets only.
*/
if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
@@ -1567,8 +1568,8 @@
other_flags |= AF_LATIN_HINTS_MONO;
/*
- * In `light' or `lcd' mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
+ * In `light' or `lcd' mode we disable horizontal hinting completely.
+ * We also do it if the face is italic.
*/
if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
@@ -2233,8 +2234,8 @@
if ( has_serifs || !anchor )
{
/*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
+ * now hint the remaining edges (serifs and single) in order
+ * to complete our processing
*/
for ( edge = edges; edge < edge_limit; edge++ )
{
diff --git a/freetype/src/autofit/aflatin2.h b/freetype/src/autofit/aflatin2.h
index 0129dc70..507cef3d 100644
--- a/freetype/src/autofit/aflatin2.h
+++ b/freetype/src/autofit/aflatin2.h
@@ -3,23 +3,23 @@
/* marked as experimental. */
-/***************************************************************************/
-/* */
-/* aflatin2.h */
-/* */
-/* Auto-fitter hinting routines for latin writing system */
-/* (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * aflatin2.h
+ *
+ * Auto-fitter hinting routines for latin writing system
+ * (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/autofit/afloader.c b/freetype/src/autofit/afloader.c
index e37a1abd..83743b7b 100644
--- a/freetype/src/autofit/afloader.c
+++ b/freetype/src/autofit/afloader.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afloader.c */
-/* */
-/* Auto-fitter glyph loading routines (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afloader.c
+ *
+ * Auto-fitter glyph loading routines (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -21,7 +21,6 @@
#include "afhints.h"
#include "aferrors.h"
#include "afmodule.h"
-#include "afpic.h"
#include FT_INTERNAL_CALC_H
@@ -119,12 +118,12 @@
}
/*
- * We depend on the writing system (script analyzers) to supply
- * standard widths for the script of the glyph we are looking at. If
- * it can't deliver, stem darkening is disabled.
+ * We depend on the writing system (script analyzers) to supply
+ * standard widths for the script of the glyph we are looking at. If
+ * it can't deliver, stem darkening is disabled.
*/
writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_metrics->style_class->writing_system];
+ af_writing_system_classes[style_metrics->style_class->writing_system];
if ( writing_system_class->style_metrics_getstdw )
writing_system_class->style_metrics_getstdw( style_metrics,
@@ -174,22 +173,22 @@
globals->darken_y = af_fixedToInt( darken_y );
/*
- * Scale outlines down on the Y-axis to keep them inside their blue
- * zones. The stronger the emboldening, the stronger the downscaling
- * (plus heuristical padding to prevent outlines still falling out
- * their zones due to rounding).
+ * Scale outlines down on the Y-axis to keep them inside their blue
+ * zones. The stronger the emboldening, the stronger the downscaling
+ * (plus heuristical padding to prevent outlines still falling out
+ * their zones due to rounding).
*
- * Reason: `FT_Outline_Embolden' works by shifting the rightmost
- * points of stems farther to the right, and topmost points farther
- * up. This positions points on the Y-axis outside their
- * pre-computed blue zones and leads to distortion when applying the
- * hints in the code further below. Code outside this emboldening
- * block doesn't know we are presenting it with modified outlines the
- * analyzer didn't see!
+ * Reason: `FT_Outline_Embolden' works by shifting the rightmost
+ * points of stems farther to the right, and topmost points farther
+ * up. This positions points on the Y-axis outside their
+ * pre-computed blue zones and leads to distortion when applying the
+ * hints in the code further below. Code outside this emboldening
+ * block doesn't know we are presenting it with modified outlines the
+ * analyzer didn't see!
*
- * An unfortunate side effect of downscaling is that the emboldening
- * effect is slightly decreased. The loss becomes more pronounced
- * versus the CFF driver at smaller sizes, e.g., at 9ppem and below.
+ * An unfortunate side effect of downscaling is that the emboldening
+ * effect is slightly decreased. The loss becomes more pronounced
+ * versus the CFF driver at smaller sizes, e.g., at 9ppem and below.
*/
globals->scale_down_factor =
FT_DivFix( em_size - ( darken_by_font_units_y + af_intToFixed( 8 ) ),
@@ -232,10 +231,6 @@
AF_StyleClass style_class;
AF_WritingSystemClass writing_system_class;
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = loader->globals;
-#endif
-
if ( !size )
return FT_THROW( Invalid_Size_Handle );
@@ -282,13 +277,13 @@
}
/*
- * TODO: This code currently doesn't support fractional advance widths,
- * i.e., placing hinted glyphs at anything other than integer
- * x-positions. This is only relevant for the warper code, which
- * scales and shifts glyphs to optimize blackness of stems (hinting on
- * the x-axis by nature places things on pixel integers, hinting on the
- * y-axis only, i.e., LIGHT mode, doesn't touch the x-axis). The delta
- * values of the scaler would need to be adjusted.
+ * TODO: This code currently doesn't support fractional advance widths,
+ * i.e., placing hinted glyphs at anything other than integer
+ * x-positions. This is only relevant for the warper code, which
+ * scales and shifts glyphs to optimize blackness of stems (hinting on
+ * the x-axis by nature places things on pixel integers, hinting on the
+ * y-axis only, i.e., LIGHT mode, doesn't touch the x-axis). The delta
+ * values of the scaler would need to be adjusted.
*/
scaler.face = face;
scaler.x_scale = size_internal->autohint_metrics.x_scale;
@@ -312,10 +307,10 @@
#endif
/*
- * Glyphs (really code points) are assigned to scripts. Script
- * analysis is done lazily: For each glyph that passes through here,
- * the corresponding script analyzer is called, but returns immediately
- * if it has been run already.
+ * Glyphs (really code points) are assigned to scripts. Script
+ * analysis is done lazily: For each glyph that passes through here,
+ * the corresponding script analyzer is called, but returns immediately
+ * if it has been run already.
*/
error = af_face_globals_get_metrics( loader->globals, glyph_index,
style_options, &style_metrics );
@@ -324,7 +319,7 @@
style_class = style_metrics->style_class;
writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
+ af_writing_system_classes[style_class->writing_system];
loader->metrics = style_metrics;
@@ -342,11 +337,11 @@
}
/*
- * Do the main work of `af_loader_load_glyph'. Note that we never have
- * to deal with composite glyphs as those get loaded into
- * FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function.
- * In the rare cases where FT_LOAD_NO_RECURSE is set, it implies
- * FT_LOAD_NO_SCALE and as such the auto-hinter is never called.
+ * Do the main work of `af_loader_load_glyph'. Note that we never have
+ * to deal with composite glyphs as those get loaded into
+ * FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function.
+ * In the rare cases where FT_LOAD_NO_RECURSE is set, it implies
+ * FT_LOAD_NO_SCALE and as such the auto-hinter is never called.
*/
load_flags |= FT_LOAD_NO_SCALE |
FT_LOAD_IGNORE_TRANSFORM |
@@ -358,26 +353,26 @@
goto Exit;
/*
- * Apply stem darkening (emboldening) here before hints are applied to
- * the outline. Glyphs are scaled down proportionally to the
- * emboldening so that curve points don't fall outside their
- * precomputed blue zones.
+ * Apply stem darkening (emboldening) here before hints are applied to
+ * the outline. Glyphs are scaled down proportionally to the
+ * emboldening so that curve points don't fall outside their
+ * precomputed blue zones.
*
- * Any emboldening done by the font driver (e.g., the CFF driver)
- * doesn't reach here because the autohinter loads the unprocessed
- * glyphs in font units for analysis (functions `af_*_metrics_init_*')
- * and then above to prepare it for the rasterizers by itself,
- * independently of the font driver. So emboldening must be done here,
- * within the autohinter.
+ * Any emboldening done by the font driver (e.g., the CFF driver)
+ * doesn't reach here because the autohinter loads the unprocessed
+ * glyphs in font units for analysis (functions `af_*_metrics_init_*')
+ * and then above to prepare it for the rasterizers by itself,
+ * independently of the font driver. So emboldening must be done here,
+ * within the autohinter.
*
- * All glyphs to be autohinted pass through here one by one. The
- * standard widths can therefore change from one glyph to the next,
- * depending on what script a glyph is assigned to (each script has its
- * own set of standard widths and other metrics). The darkening amount
- * must therefore be recomputed for each size and
- * `standard_{vertical,horizontal}_width' change.
+ * All glyphs to be autohinted pass through here one by one. The
+ * standard widths can therefore change from one glyph to the next,
+ * depending on what script a glyph is assigned to (each script has its
+ * own set of standard widths and other metrics). The darkening amount
+ * must therefore be recomputed for each size and
+ * `standard_{vertical,horizontal}_width' change.
*
- * Ignore errors and carry on without emboldening.
+ * Ignore errors and carry on without emboldening.
*
*/
@@ -427,10 +422,11 @@
/* and run the automatic hinting process */
if ( writing_system_class->style_hints_apply )
{
- error = writing_system_class->style_hints_apply( glyph_index,
- hints,
- &gloader->base.outline,
- style_metrics );
+ error = writing_system_class->style_hints_apply(
+ glyph_index,
+ hints,
+ &gloader->base.outline,
+ style_metrics );
if ( error )
goto Exit;
}
@@ -439,26 +435,25 @@
/* 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;
+ AF_Edge edge1 = axis->edges; /* leftmost edge */
+ AF_Edge edge2 = edge1 +
+ axis->num_edges - 1; /* rightmost edge */
+
+ FT_Pos old_rsb = loader->pp2.x - edge2->opos;
/* loader->pp1.x is always zero at this point of time */
- old_lsb = edge1->opos /* - loader->pp1.x */;
- new_lsb = edge1->pos;
+ FT_Pos old_lsb = edge1->opos; /* - loader->pp1.x */
+ FT_Pos 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;
+ FT_Pos pp1x_uh = new_lsb - old_lsb;
+ FT_Pos pp2x_uh = edge2->pos + old_rsb;
+
/* prefer too much space over too little space */
/* for very small sizes */
diff --git a/freetype/src/autofit/afloader.h b/freetype/src/autofit/afloader.h
index d4d72d15..d1e0f3c0 100644
--- a/freetype/src/autofit/afloader.h
+++ b/freetype/src/autofit/afloader.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afloader.h */
-/* */
-/* Auto-fitter glyph loading routines (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afloader.h
+ *
+ * Auto-fitter glyph loading routines (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFLOADER_H_
@@ -27,11 +27,11 @@
FT_BEGIN_HEADER
/*
- * The autofitter module's (global) data structure to communicate with
- * actual fonts. If necessary, `local' data like the current face, the
- * current face's auto-hint data, or the current glyph's parameters
- * relevant to auto-hinting are `swapped in'. Cf. functions like
- * `af_loader_reset' and `af_loader_load_g'.
+ * The autofitter module's (global) data structure to communicate with
+ * actual fonts. If necessary, `local' data like the current face, the
+ * current face's auto-hint data, or the current glyph's parameters
+ * relevant to auto-hinting are `swapped in'. Cf. functions like
+ * `af_loader_reset' and `af_loader_load_g'.
*/
typedef struct AF_LoaderRec_
diff --git a/freetype/src/autofit/afmodule.c b/freetype/src/autofit/afmodule.c
index dcaa17a2..3e46a365 100644
--- a/freetype/src/autofit/afmodule.c
+++ b/freetype/src/autofit/afmodule.c
@@ -1,26 +1,25 @@
-/***************************************************************************/
-/* */
-/* afmodule.c */
-/* */
-/* Auto-fitter module implementation (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afmodule.c
+ *
+ * Auto-fitter module implementation (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include "afglobal.h"
#include "afmodule.h"
#include "afloader.h"
#include "aferrors.h"
-#include "afpic.h"
#ifdef FT_DEBUG_AUTOFIT
@@ -60,14 +59,14 @@
#include FT_SERVICE_PROPERTIES_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afmodule
+#define FT_COMPONENT afmodule
static FT_Error
@@ -104,19 +103,6 @@
}
-#ifdef FT_CONFIG_OPTION_PIC
-
-#undef AF_SCRIPT_CLASSES_GET
-#define AF_SCRIPT_CLASSES_GET \
- ( GET_PIC( ft_module->library )->af_script_classes )
-
-#undef AF_STYLE_CLASSES_GET
-#define AF_STYLE_CLASSES_GET \
- ( GET_PIC( ft_module->library )->af_style_classes )
-
-#endif
-
-
static FT_Error
af_property_set( FT_Module ft_module,
const char* property_name,
@@ -147,9 +133,9 @@
/* We translate the fallback script to a fallback style that uses */
/* `fallback-script' as its script and `AF_COVERAGE_NONE' as its */
/* coverage value. */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
+ for ( ss = 0; af_style_classes[ss]; ss++ )
{
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
+ AF_StyleClass style_class = af_style_classes[ss];
if ( (FT_UInt)style_class->script == *fallback_script &&
@@ -160,7 +146,7 @@
}
}
- if ( !AF_STYLE_CLASSES_GET[ss] )
+ if ( !af_style_classes[ss] )
{
FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n",
fallback_script, property_name ));
@@ -357,7 +343,7 @@
{
FT_UInt* val = (FT_UInt*)value;
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[fallback_style];
+ AF_StyleClass style_class = af_style_classes[fallback_style];
*val = style_class->script;
@@ -440,28 +426,16 @@
FT_DEFINE_SERVICEDESCREC1(
af_services,
- FT_SERVICE_ID_PROPERTIES, &AF_SERVICE_PROPERTIES_GET )
+ FT_SERVICE_ID_PROPERTIES, &af_service_properties )
FT_CALLBACK_DEF( FT_Module_Interface )
af_get_interface( FT_Module module,
const char* module_interface )
{
- /* AF_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
FT_UNUSED( module );
-#endif
- return ft_service_list_lookup( AF_SERVICES_GET, module_interface );
+ return ft_service_list_lookup( af_services, module_interface );
}
@@ -533,7 +507,7 @@
glyph_index, load_flags );
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( ft_trace_levels[FT_COMPONENT] )
+ if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] )
{
#endif
af_glyph_hints_dump_points( hints, 0 );
@@ -589,7 +563,7 @@
0x10000L, /* version 1.0 of the autofitter */
0x20000L, /* requires FreeType 2.0 or above */
- (const void*)&AF_INTERFACE_GET,
+ (const void*)&af_autofitter_interface,
(FT_Module_Constructor)af_autofitter_init, /* module_init */
(FT_Module_Destructor) af_autofitter_done, /* module_done */
diff --git a/freetype/src/autofit/afmodule.h b/freetype/src/autofit/afmodule.h
index 56f64eaf..b410809a 100644
--- a/freetype/src/autofit/afmodule.h
+++ b/freetype/src/autofit/afmodule.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afmodule.h */
-/* */
-/* Auto-fitter module implementation (specification). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afmodule.h
+ *
+ * Auto-fitter module implementation (specification).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,8 +28,8 @@ FT_BEGIN_HEADER
/*
- * This is the `extended' FT_Module structure that holds the
- * autofitter's global data.
+ * This is the `extended' FT_Module structure that holds the
+ * autofitter's global data.
*/
typedef struct AF_ModuleRec_
diff --git a/freetype/src/autofit/afpic.c b/freetype/src/autofit/afpic.c
deleted file mode 100644
index d48d016a..00000000
--- a/freetype/src/autofit/afpic.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.c */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "afpic.h"
-#include "afglobal.h"
-#include "aferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from afmodule.c */
- FT_Error
- FT_Create_Class_af_services( FT_Library library,
- FT_ServiceDescRec** output_class );
-
- void
- FT_Destroy_Class_af_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_af_service_properties( FT_Service_PropertiesRec* clazz );
-
- void FT_Init_Class_af_autofitter_interface(
- FT_Library library,
- FT_AutoHinter_InterfaceRec* clazz );
-
-
- /* forward declaration of PIC init functions from writing system classes */
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) /* empty */
-
-#include "afwrtsys.h"
-
-
- void
- autofit_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->autofit )
- {
- AFModulePIC* container = (AFModulePIC*)pic_container->autofit;
-
-
- if ( container->af_services )
- FT_Destroy_Class_af_services( library,
- container->af_services );
- container->af_services = NULL;
-
- FT_FREE( container );
- pic_container->autofit = NULL;
- }
- }
-
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_UInt ss;
- FT_Error error = FT_Err_Ok;
- AFModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->autofit = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_af_services( library,
- &container->af_services );
- if ( error )
- goto Exit;
-
- FT_Init_Class_af_service_properties( &container->af_service_properties );
-
- for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ )
- container->af_writing_system_classes[ss] =
- &container->af_writing_system_classes_rec[ss];
- container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL;
-
- for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ )
- container->af_script_classes[ss] =
- &container->af_script_classes_rec[ss];
- container->af_script_classes[AF_SCRIPT_MAX] = NULL;
-
- for ( ss = 0; ss < AF_STYLE_MAX; ss++ )
- container->af_style_classes[ss] =
- &container->af_style_classes_rec[ss];
- container->af_style_classes[AF_STYLE_MAX] = NULL;
-
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) \
- FT_Init_Class_af_ ## ws ## _writing_system_class( \
- &container->af_writing_system_classes_rec[ss++] );
-
- ss = 0;
-#include "afwrtsys.h"
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, sss ) \
- FT_Init_Class_af_ ## s ## _script_class( \
- &container->af_script_classes_rec[ss++] );
-
- ss = 0;
-#include "afscript.h"
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, bss, c ) \
- FT_Init_Class_af_ ## s ## _style_class( \
- &container->af_style_classes_rec[ss++] );
-
- ss = 0;
-#include "afstyles.h"
-
- FT_Init_Class_af_autofitter_interface(
- library, &container->af_autofitter_interface );
-
- Exit:
- if ( error )
- autofit_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/autofit/afpic.h b/freetype/src/autofit/afpic.h
deleted file mode 100644
index 0c734567..00000000
--- a/freetype/src/autofit/afpic.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.h */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFPIC_H_
-#define AFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define AF_SERVICES_GET af_services
-#define AF_SERVICE_PROPERTIES_GET af_service_properties
-
-#define AF_WRITING_SYSTEM_CLASSES_GET af_writing_system_classes
-#define AF_SCRIPT_CLASSES_GET af_script_classes
-#define AF_STYLE_CLASSES_GET af_style_classes
-#define AF_INTERFACE_GET af_autofitter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of AFModulePIC */
-#include FT_SERVICE_PROPERTIES_H
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct AFModulePIC_
- {
- FT_ServiceDescRec* af_services;
- FT_Service_PropertiesRec af_service_properties;
-
- AF_WritingSystemClass af_writing_system_classes
- [AF_WRITING_SYSTEM_MAX + 1];
- AF_WritingSystemClassRec af_writing_system_classes_rec
- [AF_WRITING_SYSTEM_MAX];
-
- AF_ScriptClass af_script_classes
- [AF_SCRIPT_MAX + 1];
- AF_ScriptClassRec af_script_classes_rec
- [AF_SCRIPT_MAX];
-
- AF_StyleClass af_style_classes
- [AF_STYLE_MAX + 1];
- AF_StyleClassRec af_style_classes_rec
- [AF_STYLE_MAX];
-
- FT_AutoHinter_InterfaceRec af_autofitter_interface;
-
- } AFModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (AFModulePIC*)( (lib)->pic_container.autofit ) )
-
-#define AF_SERVICES_GET \
- ( GET_PIC( library )->af_services )
-#define AF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->af_service_properties )
-
-#define AF_WRITING_SYSTEM_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_writing_system_classes )
-#define AF_SCRIPT_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_script_classes )
-#define AF_STYLE_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_style_classes )
-#define AF_INTERFACE_GET \
- ( GET_PIC( library )->af_autofitter_interface )
-
-
- /* see afpic.c for the implementation */
- void
- autofit_module_class_pic_free( FT_Library library );
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* AFPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/autofit/afranges.c b/freetype/src/autofit/afranges.c
index cf67fafb..45c8bbfc 100644
--- a/freetype/src/autofit/afranges.c
+++ b/freetype/src/autofit/afranges.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afranges.c */
-/* */
-/* Auto-fitter Unicode script ranges (body). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afranges.c
+ *
+ * Auto-fitter Unicode script ranges (body).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include "afranges.h"
@@ -664,6 +664,21 @@
};
+ const AF_Script_UniRangeRec af_mong_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1800, 0x18AF ), /* Mongolian */
+ AF_UNIRANGE_REC( 0x11660, 0x1167F ), /* Mongolian Supplement */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_mong_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1885, 0x1886 ),
+ AF_UNIRANGE_REC( 0x18A9, 0x18A9 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_mymr_uniranges[] =
{
AF_UNIRANGE_REC( 0x1000, 0x109F ), /* Myanmar */
diff --git a/freetype/src/autofit/afranges.h b/freetype/src/autofit/afranges.h
index ba3b5e7c..d5917aef 100644
--- a/freetype/src/autofit/afranges.h
+++ b/freetype/src/autofit/afranges.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afranges.h */
-/* */
-/* Auto-fitter Unicode script ranges (specification). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afranges.h
+ *
+ * Auto-fitter Unicode script ranges (specification).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFRANGES_H_
diff --git a/freetype/src/autofit/afscript.h b/freetype/src/autofit/afscript.h
index 623a1734..2da8c701 100644
--- a/freetype/src/autofit/afscript.h
+++ b/freetype/src/autofit/afscript.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afscript.h */
-/* */
-/* Auto-fitter scripts (specification only). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afscript.h
+ *
+ * Auto-fitter scripts (specification only).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/* The following part can be included multiple times. */
@@ -243,6 +243,12 @@
HINTING_BOTTOM_TO_TOP,
"\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* ഠ റ */
+ SCRIPT( mong, MONG,
+ "Mongolian",
+ HB_SCRIPT_MONGOLIAN,
+ HINTING_TOP_TO_BOTTOM,
+ "\xE1\xA1\x82 \xE1\xA0\xAA" ) /* ᡂ ᠪ */
+
SCRIPT( mymr, MYMR,
"Myanmar",
HB_SCRIPT_MYANMAR,
diff --git a/freetype/src/autofit/afshaper.c b/freetype/src/autofit/afshaper.c
index ce3133fa..a5191c69 100644
--- a/freetype/src/autofit/afshaper.c
+++ b/freetype/src/autofit/afshaper.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afshaper.c */
-/* */
-/* HarfBuzz interface for accessing OpenType features (body). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afshaper.c
+ *
+ * HarfBuzz interface for accessing OpenType features (body).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,14 +26,14 @@
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afshaper
+#define FT_COMPONENT afshaper
/*
diff --git a/freetype/src/autofit/afshaper.h b/freetype/src/autofit/afshaper.h
index 7efd9f6a..06a1e066 100644
--- a/freetype/src/autofit/afshaper.h
+++ b/freetype/src/autofit/afshaper.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afshaper.h */
-/* */
-/* HarfBuzz interface for accessing OpenType features (specification). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afshaper.h
+ *
+ * HarfBuzz interface for accessing OpenType features (specification).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFSHAPER_H_
diff --git a/freetype/src/autofit/afstyles.h b/freetype/src/autofit/afstyles.h
index e2688b3f..8d1d7081 100644
--- a/freetype/src/autofit/afstyles.h
+++ b/freetype/src/autofit/afstyles.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afstyles.h */
-/* */
-/* Auto-fitter styles (specification only). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afstyles.h
+ *
+ * Auto-fitter styles (specification only).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/* The following part can be included multiple times. */
@@ -322,6 +322,13 @@
AF_BLUE_STRINGSET_MLYM,
AF_COVERAGE_DEFAULT )
+ STYLE( mong_dflt, MONG_DFLT,
+ "Mongolian default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_MONG,
+ AF_BLUE_STRINGSET_MONG,
+ AF_COVERAGE_DEFAULT )
+
STYLE( mymr_dflt, MYMR_DFLT,
"Myanmar default style",
AF_WRITING_SYSTEM_LATIN,
diff --git a/freetype/src/autofit/aftypes.h b/freetype/src/autofit/aftypes.h
index 6bd8c895..579003d2 100644
--- a/freetype/src/autofit/aftypes.h
+++ b/freetype/src/autofit/aftypes.h
@@ -1,30 +1,30 @@
-/***************************************************************************/
-/* */
-/* aftypes.h */
-/* */
-/* Auto-fitter types (specification only). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * aftypes.h
+ *
+ * Auto-fitter types (specification only).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/*************************************************************************
*
- * The auto-fitter is a complete rewrite of the old auto-hinter.
- * Its main feature is the ability to differentiate between different
- * writing systems and scripts in order to apply specific rules.
+ * The auto-fitter is a complete rewrite of the old auto-hinter.
+ * Its main feature is the ability to differentiate between different
+ * writing systems and scripts in order to apply specific rules.
*
- * The code has also been compartmentalized into several entities that
- * should make algorithmic experimentation easier than with the old
- * code.
+ * The code has also been compartmentalized into several entities that
+ * should make algorithmic experimentation easier than with the old
+ * code.
*
*************************************************************************/
@@ -102,9 +102,9 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * 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).
+ * 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;
@@ -118,7 +118,7 @@ extern void* _af_debug_hints;
#if 0
/*
- * compute the angle of a given 2-D vector
+ * compute the angle of a given 2-D vector
*/
FT_LOCAL( AF_Angle )
af_angle_atan( FT_Pos dx,
@@ -126,8 +126,8 @@ extern void* _af_debug_hints;
/*
- * compute `angle2 - angle1'; the result is always within
- * the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1]
+ * 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,
@@ -150,8 +150,9 @@ extern void* _af_debug_hints;
FT_END_STMNT
- /* opaque handle to glyph-specific hints -- see `afhints.h' for more
- * details
+ /*
+ * opaque handle to glyph-specific hints -- see `afhints.h' for more
+ * details
*/
typedef struct AF_GlyphHintsRec_* AF_GlyphHints;
@@ -165,8 +166,8 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * A scaler models the target pixel device that will receive the
- * auto-hinted glyph image.
+ * A scaler models the target pixel device that will receive the
+ * auto-hinted glyph image.
*/
#define AF_SCALER_FLAG_NO_HORIZONTAL 1U /* disable horizontal hinting */
@@ -197,8 +198,9 @@ extern void* _af_debug_hints;
typedef struct AF_StyleMetricsRec_* AF_StyleMetrics;
- /* This function parses an FT_Face to compute global metrics for
- * a specific style.
+ /*
+ * This function parses an FT_Face to compute global metrics for
+ * a specific style.
*/
typedef FT_Error
(*AF_WritingSystem_InitMetricsFunc)( AF_StyleMetrics metrics,
@@ -237,22 +239,22 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * For the auto-hinter, a writing system consists of multiple scripts that
- * can be handled similarly *in a typographical way*; the relationship is
- * not based on history. For example, both the Greek and the unrelated
- * Armenian scripts share the same features like ascender, descender,
- * x-height, etc. Essentially, a writing system is covered by a
- * submodule of the auto-fitter; it contains
+ * For the auto-hinter, a writing system consists of multiple scripts that
+ * can be handled similarly *in a typographical way*; the relationship is
+ * not based on history. For example, both the Greek and the unrelated
+ * Armenian scripts share the same features like ascender, descender,
+ * x-height, etc. Essentially, a writing system is covered by a
+ * submodule of the auto-fitter; it contains
*
- * - a specific global analyzer that computes global metrics specific to
- * the script (based on script-specific characters to identify ascender
- * height, x-height, etc.),
+ * - a specific global analyzer that computes global metrics specific to
+ * the script (based on script-specific characters to identify ascender
+ * height, x-height, etc.),
*
- * - a specific glyph analyzer that computes segments and edges for each
- * glyph covered by the script,
+ * - a specific glyph analyzer that computes segments and edges for each
+ * glyph covered by the script,
*
- * - a specific grid-fitting algorithm that distorts the scaled glyph
- * outline according to the results of the glyph analyzer.
+ * - a specific grid-fitting algorithm that distorts the scaled glyph
+ * outline according to the results of the glyph analyzer.
*/
#define AFWRTSYS_H_ /* don't load header files */
@@ -300,12 +302,12 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * Each script is associated with two sets of Unicode ranges to test
- * whether the font face supports the script, and which non-base
- * characters the script contains.
+ * Each script is associated with two sets of Unicode ranges to test
+ * whether the font face supports the script, and which non-base
+ * characters the script contains.
*
- * We use four-letter script tags from the OpenType specification,
- * extended by `NONE', which indicates `no script'.
+ * We use four-letter script tags from the OpenType specification,
+ * extended by `NONE', which indicates `no script'.
*/
#undef SCRIPT
@@ -361,41 +363,41 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * Usually, a font contains more glyphs than can be addressed by its
- * character map.
+ * Usually, a font contains more glyphs than can be addressed by its
+ * character map.
*
- * In the PostScript font world, encoding vectors specific to a given
- * task are used to select such glyphs, and these glyphs can be often
- * recognized by having a suffix in its glyph names. For example, a
- * superscript glyph `A' might be called `A.sup'. Unfortunately, this
- * naming scheme is not standardized and thus unusable for us.
+ * In the PostScript font world, encoding vectors specific to a given
+ * task are used to select such glyphs, and these glyphs can be often
+ * recognized by having a suffix in its glyph names. For example, a
+ * superscript glyph `A' might be called `A.sup'. Unfortunately, this
+ * naming scheme is not standardized and thus unusable for us.
*
- * In the OpenType world, a better solution was invented, namely
- * `features', which cleanly separate a character's input encoding from
- * the corresponding glyph's appearance, and which don't use glyph names
- * at all. For our purposes, and slightly generalized, an OpenType
- * feature is a name of a mapping that maps character codes to
- * non-standard glyph indices (features get used for other things also).
- * For example, the `sups' feature provides superscript glyphs, thus
- * mapping character codes like `A' or `B' to superscript glyph
- * representation forms. How this mapping happens is completely
- * uninteresting to us.
+ * In the OpenType world, a better solution was invented, namely
+ * `features', which cleanly separate a character's input encoding from
+ * the corresponding glyph's appearance, and which don't use glyph names
+ * at all. For our purposes, and slightly generalized, an OpenType
+ * feature is a name of a mapping that maps character codes to
+ * non-standard glyph indices (features get used for other things also).
+ * For example, the `sups' feature provides superscript glyphs, thus
+ * mapping character codes like `A' or `B' to superscript glyph
+ * representation forms. How this mapping happens is completely
+ * uninteresting to us.
*
- * For the auto-hinter, a `coverage' represents all glyphs of an OpenType
- * feature collected in a set (as listed below) that can be hinted
- * together. To continue the above example, superscript glyphs must not
- * be hinted together with normal glyphs because the blue zones
- * completely differ.
+ * For the auto-hinter, a `coverage' represents all glyphs of an OpenType
+ * feature collected in a set (as listed below) that can be hinted
+ * together. To continue the above example, superscript glyphs must not
+ * be hinted together with normal glyphs because the blue zones
+ * completely differ.
*
- * Note that FreeType itself doesn't compute coverages; it only provides
- * the glyphs addressable by the default Unicode character map. Instead,
- * we use the HarfBuzz library (if available), which has many functions
- * exactly for this purpose.
+ * Note that FreeType itself doesn't compute coverages; it only provides
+ * the glyphs addressable by the default Unicode character map. Instead,
+ * we use the HarfBuzz library (if available), which has many functions
+ * exactly for this purpose.
*
- * AF_COVERAGE_DEFAULT is special: It should cover everything that isn't
- * listed separately (including the glyphs addressable by the character
- * map). In case HarfBuzz isn't available, it exactly covers the glyphs
- * addressable by the character map.
+ * AF_COVERAGE_DEFAULT is special: It should cover everything that isn't
+ * listed separately (including the glyphs addressable by the character
+ * map). In case HarfBuzz isn't available, it exactly covers the glyphs
+ * addressable by the character map.
*
*/
@@ -423,8 +425,8 @@ extern void* _af_debug_hints;
/*************************************************************************/
/*
- * The topmost structure for modelling the auto-hinter glyph input data
- * is a `style class', grouping everything together.
+ * The topmost structure for modelling the auto-hinter glyph input data
+ * is a `style class', grouping everything together.
*/
#undef STYLE
@@ -486,8 +488,6 @@ extern void* _af_debug_hints;
/* Declare and define vtables for classes */
-#ifndef FT_CONFIG_OPTION_PIC
-
#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \
FT_CALLBACK_TABLE const AF_WritingSystemClassRec \
writing_system_class;
@@ -562,87 +562,9 @@ extern void* _af_debug_hints;
coverage \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac );
-
-#define AF_DEFINE_WRITING_SYSTEM_CLASS( \
- writing_system_class, \
- system, \
- m_size, \
- m_init, \
- m_scale, \
- m_done, \
- m_stdw, \
- h_init, \
- h_apply ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ) \
- { \
- ac->writing_system = system; \
- \
- ac->style_metrics_size = m_size; \
- \
- ac->style_metrics_init = m_init; \
- ac->style_metrics_scale = m_scale; \
- ac->style_metrics_done = m_done; \
- ac->style_metrics_getstdw = m_stdw; \
- \
- ac->style_hints_init = h_init; \
- ac->style_hints_apply = h_apply; \
- }
-
-
-#define AF_DECLARE_SCRIPT_CLASS( script_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac );
-
-#define AF_DEFINE_SCRIPT_CLASS( \
- script_class, \
- script_, \
- ranges, \
- nonbase_ranges, \
- top_to_bottom, \
- std_charstring ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ) \
- { \
- ac->script = script_; \
- ac->script_uni_ranges = ranges; \
- ac->script_uni_nonbase_ranges = nonbase_ranges; \
- ac->top_to_bottom_hinting = top_to_bottom; \
- ac->standard_charstring = std_charstring; \
- }
-
-
-#define AF_DECLARE_STYLE_CLASS( style_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## style_class( AF_StyleClassRec* ac );
-
-#define AF_DEFINE_STYLE_CLASS( \
- style_class, \
- style_, \
- writing_system_, \
- script_, \
- blue_stringset_, \
- coverage_ ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ) \
- { \
- ac->style = style_; \
- ac->writing_system = writing_system_; \
- ac->script = script_; \
- ac->blue_stringset = blue_stringset_; \
- ac->coverage = coverage_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
/* */
+
FT_END_HEADER
#endif /* AFTYPES_H_ */
diff --git a/freetype/src/autofit/afwarp.c b/freetype/src/autofit/afwarp.c
index 2a75ea7b..84e9753a 100644
--- a/freetype/src/autofit/afwarp.c
+++ b/freetype/src/autofit/afwarp.c
@@ -1,40 +1,40 @@
-/***************************************************************************/
-/* */
-/* afwarp.c */
-/* */
-/* Auto-fitter warping algorithm (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afwarp.c
+ *
+ * Auto-fitter warping algorithm (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/*
- * The idea of the warping code is to slightly scale and shift a glyph
- * within a single dimension so that as much of its segments are aligned
- * (more or less) on the grid. To find out the optimal scaling and
- * shifting value, various parameter combinations are tried and scored.
+ * The idea of the warping code is to slightly scale and shift a glyph
+ * within a single dimension so that as much of its segments are aligned
+ * (more or less) on the grid. To find out the optimal scaling and
+ * shifting value, various parameter combinations are tried and scored.
*/
#include "afwarp.h"
#ifdef AF_CONFIG_OPTION_USE_WARPER
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afwarp
+#define FT_COMPONENT afwarp
/* The weights cover the range 0/64 - 63/64 of a pixel. Obviously, */
diff --git a/freetype/src/autofit/afwarp.h b/freetype/src/autofit/afwarp.h
index 520b1be9..9a2c9a42 100644
--- a/freetype/src/autofit/afwarp.h
+++ b/freetype/src/autofit/afwarp.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afwarp.h */
-/* */
-/* Auto-fitter warping algorithm (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afwarp.h
+ *
+ * Auto-fitter warping algorithm (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -47,12 +47,14 @@ FT_BEGIN_HEADER
} AF_WarperRec, *AF_Warper;
+#ifdef AF_CONFIG_OPTION_USE_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_Pos *a_delta );
+#endif
FT_END_HEADER
diff --git a/freetype/src/autofit/afwrtsys.h b/freetype/src/autofit/afwrtsys.h
index 4675f324..5611cf44 100644
--- a/freetype/src/autofit/afwrtsys.h
+++ b/freetype/src/autofit/afwrtsys.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afwrtsys.h */
-/* */
-/* Auto-fitter writing systems (specification only). */
-/* */
-/* Copyright 2013-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afwrtsys.h
+ *
+ * Auto-fitter writing systems (specification only).
+ *
+ * Copyright (C) 2013-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef AFWRTSYS_H_
diff --git a/freetype/src/autofit/autofit.c b/freetype/src/autofit/autofit.c
index c1605160..facfec17 100644
--- a/freetype/src/autofit/autofit.c
+++ b/freetype/src/autofit/autofit.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* autofit.c */
-/* */
-/* Auto-fitter module (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * autofit.c
+ *
+ * Auto-fitter module (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -30,7 +30,6 @@
#include "aflatin2.c"
#include "afloader.c"
#include "afmodule.c"
-#include "afpic.c"
#include "afranges.c"
#include "afshaper.c"
#include "afwarp.c"
diff --git a/freetype/src/autofit/module.mk b/freetype/src/autofit/module.mk
index ff05f83e..cf77b169 100644
--- a/freetype/src/autofit/module.mk
+++ b/freetype/src/autofit/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/rules.mk b/freetype/src/autofit/rules.mk
index 75171b41..c59da33a 100644
--- a/freetype/src/autofit/rules.mk
+++ b/freetype/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -38,7 +38,6 @@ AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
$(AUTOF_DIR)/aflatin.c \
$(AUTOF_DIR)/afloader.c \
$(AUTOF_DIR)/afmodule.c \
- $(AUTOF_DIR)/afpic.c \
$(AUTOF_DIR)/afranges.c \
$(AUTOF_DIR)/afshaper.c \
$(AUTOF_DIR)/afwarp.c
diff --git a/freetype/src/base/Jamfile b/freetype/src/base/Jamfile
index 4994c1b4..8e1ec427 100644
--- a/freetype/src/base/Jamfile
+++ b/freetype/src/base/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/base Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,9 @@ SubDir FT2_TOP $(FT2_SRC_DIR) base ;
_sources = basepic
ftadvanc
ftcalc
+ ftcolor
ftdbgmem
+ fterrors
ftfntfmt
ftgloadr
fthash
@@ -47,8 +49,7 @@ SubDir FT2_TOP $(FT2_SRC_DIR) base ;
# Add the optional/replaceable files.
#
{
- local _sources = ftapi
- ftbbox
+ local _sources = ftbbox
ftbdf
ftbitmap
ftcid
diff --git a/freetype/src/base/basepic.c b/freetype/src/base/basepic.c
deleted file mode 100644
index bc804064..00000000
--- a/freetype/src/base/basepic.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.c */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftglyph.c */
- void
- FT_Init_Class_ft_outline_glyph_class( FT_Glyph_Class* clazz );
-
- void
- FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class* clazz );
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- /* forward declaration of PIC init function from ftrfork.c */
- /* (not modularized) */
- void
- FT_Init_Table_ft_raccess_guess_table( ft_raccess_guess_rec* record );
-#endif
-
- /* forward declaration of PIC init functions from ftinit.c */
- FT_Error
- ft_create_default_module_classes( FT_Library library );
-
- void
- ft_destroy_default_module_classes( FT_Library library );
-
-
- void
- ft_base_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->base )
- {
- /* destroy default module classes */
- /* (in case FT_Add_Default_Modules was used) */
- ft_destroy_default_module_classes( library );
-
- FT_FREE( pic_container->base );
- pic_container->base = NULL;
- }
- }
-
-
- FT_Error
- ft_base_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- BasePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->base = container;
-
- /* initialize default modules list and pointers */
- error = ft_create_default_module_classes( library );
- if ( error )
- goto Exit;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_outline_glyph_class(
- &container->ft_outline_glyph_class );
- FT_Init_Class_ft_bitmap_glyph_class(
- &container->ft_bitmap_glyph_class );
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- FT_Init_Table_ft_raccess_guess_table(
- (ft_raccess_guess_rec*)&container->ft_raccess_guess_table );
-#endif
-
- Exit:
- if ( error )
- ft_base_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/base/basepic.h b/freetype/src/base/basepic.h
deleted file mode 100644
index 492d1ede..00000000
--- a/freetype/src/base/basepic.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.h */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef BASEPIC_H_
-#define BASEPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class
-#define FT_BITMAP_GLYPH_CLASS_GET &ft_bitmap_glyph_class
-#define FT_DEFAULT_MODULES_GET ft_default_modules
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET ft_raccess_guess_table
-#endif
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_GLYPH_H
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#include FT_INTERNAL_RFORK_H
-#endif
-
-
-FT_BEGIN_HEADER
-
- typedef struct BasePIC_
- {
- FT_Module_Class** default_module_classes;
- FT_Glyph_Class ft_outline_glyph_class;
- FT_Glyph_Class ft_bitmap_glyph_class;
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
- ft_raccess_guess_rec ft_raccess_guess_table[FT_RACCESS_N_RULES];
-#endif
-
- } BasePIC;
-
-
-#define GET_PIC( lib ) ( (BasePIC*)( (lib)->pic_container.base ) )
-
-#define FT_OUTLINE_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_outline_glyph_class )
-#define FT_BITMAP_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_bitmap_glyph_class )
-#define FT_DEFAULT_MODULES_GET \
- ( GET_PIC( library )->default_module_classes )
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET \
- ( GET_PIC( library )->ft_raccess_guess_table )
-#endif
-
-
- /* see basepic.c for the implementation */
- void
- ft_base_pic_free( FT_Library library );
-
- FT_Error
- ft_base_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* BASEPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/base/ftadvanc.c b/freetype/src/base/ftadvanc.c
index 230c84d6..0dfba570 100644
--- a/freetype/src/base/ftadvanc.c
+++ b/freetype/src/base/ftadvanc.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftadvanc.c */
-/* */
-/* Quick computation of advance widths (body). */
-/* */
-/* Copyright 2008-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftadvanc.c
+ *
+ * Quick computation of advance widths (body).
+ *
+ * Copyright (C) 2008-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/ftapi.c b/freetype/src/base/ftapi.c
deleted file mode 100644
index 32d6e95d..00000000
--- a/freetype/src/base/ftapi.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftapi.c */
-/* */
-/* The FreeType compatibility functions (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_OUTLINE_H
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** C O M P A T I B I L I T Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* backward compatibility API */
-
- FT_BASE_DEF( void )
- FT_New_Memory_Stream( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Stream stream )
- {
- FT_UNUSED( library );
-
- FT_Stream_OpenMemory( stream, base, size );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Seek_Stream( FT_Stream stream,
- FT_ULong pos )
- {
- return FT_Stream_Seek( stream, pos );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Skip_Stream( FT_Stream stream,
- FT_Long distance )
- {
- return FT_Stream_Skip( stream, distance );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_Read( stream, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream_At( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_ReadAt( stream, pos, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Extract_Frame( FT_Stream stream,
- FT_ULong count,
- FT_Byte** pbytes )
- {
- return FT_Stream_ExtractFrame( stream, count, pbytes );
- }
-
-
- FT_BASE_DEF( void )
- FT_Release_Frame( FT_Stream stream,
- FT_Byte** pbytes )
- {
- FT_Stream_ReleaseFrame( stream, pbytes );
- }
-
- FT_BASE_DEF( FT_Error )
- FT_Access_Frame( FT_Stream stream,
- FT_ULong count )
- {
- return FT_Stream_EnterFrame( stream, count );
- }
-
-
- FT_BASE_DEF( void )
- FT_Forget_Frame( FT_Stream stream )
- {
- FT_Stream_ExitFrame( stream );
- }
-
-
-/* END */
diff --git a/freetype/src/base/ftbase.c b/freetype/src/base/ftbase.c
index f914b9b2..fb8cbfcc 100644
--- a/freetype/src/base/ftbase.c
+++ b/freetype/src/base/ftbase.c
@@ -1,28 +1,29 @@
-/***************************************************************************/
-/* */
-/* ftbase.c */
-/* */
-/* Single object library component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbase.c
+ *
+ * Single object library component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include "basepic.c"
#include "ftadvanc.c"
#include "ftcalc.c"
+#include "ftcolor.c"
#include "ftdbgmem.c"
+#include "fterrors.c"
#include "ftfntfmt.c"
#include "ftgloadr.c"
#include "fthash.c"
@@ -30,7 +31,6 @@
#include "ftmac.c"
#include "ftobjs.c"
#include "ftoutln.c"
-#include "ftpic.c"
#include "ftpsprop.c"
#include "ftrfork.c"
#include "ftsnames.c"
diff --git a/freetype/src/base/ftbase.h b/freetype/src/base/ftbase.h
index 7e8cfad9..35b1c47f 100644
--- a/freetype/src/base/ftbase.h
+++ b/freetype/src/base/ftbase.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbase.h */
-/* */
-/* Private functions used in the `base' module (specification). */
-/* */
-/* Copyright 2008-2018 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbase.h
+ *
+ * Private functions used in the `base' module (specification).
+ *
+ * Copyright (C) 2008-2019 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTBASE_H_
diff --git a/freetype/src/base/ftbbox.c b/freetype/src/base/ftbbox.c
index 151e85c9..a0b2c46f 100644
--- a/freetype/src/base/ftbbox.c
+++ b/freetype/src/base/ftbbox.c
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* ftbbox.c */
-/* */
-/* FreeType bbox computation (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftbbox.c
+ *
+ * FreeType bbox computation (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -61,26 +61,28 @@
( p->y < bbox.yMin || p->y > bbox.yMax )
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Move_To */
- /* */
- /* <Description> */
- /* This function is used as a `move_to' emitter during */
- /* FT_Outline_Decompose(). It simply records the destination point */
- /* in `user->last'. We also update bbox in case contour starts with */
- /* an implicit `on' point. */
- /* */
- /* <Input> */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: A pointer to the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Move_To
+ *
+ * @Description:
+ * This function is used as a `move_to' emitter during
+ * FT_Outline_Decompose(). It simply records the destination point
+ * in `user->last'. We also update bbox in case contour starts with
+ * an implicit `on' point.
+ *
+ * @Input:
+ * to ::
+ * A pointer to the destination vector.
+ *
+ * @InOut:
+ * user ::
+ * A pointer to the current walk context.
+ *
+ * @Return:
+ * Always 0. Needed for the interface only.
+ */
static int
BBox_Move_To( FT_Vector* to,
TBBox_Rec* user )
@@ -93,26 +95,28 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Line_To */
- /* */
- /* <Description> */
- /* This function is used as a `line_to' emitter during */
- /* FT_Outline_Decompose(). It simply records the destination point */
- /* in `user->last'; no further computations are necessary because */
- /* bbox already contains both explicit ends of the line segment. */
- /* */
- /* <Input> */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: A pointer to the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Line_To
+ *
+ * @Description:
+ * This function is used as a `line_to' emitter during
+ * FT_Outline_Decompose(). It simply records the destination point
+ * in `user->last'; no further computations are necessary because
+ * bbox already contains both explicit ends of the line segment.
+ *
+ * @Input:
+ * to ::
+ * A pointer to the destination vector.
+ *
+ * @InOut:
+ * user ::
+ * A pointer to the current walk context.
+ *
+ * @Return:
+ * Always 0. Needed for the interface only.
+ */
static int
BBox_Line_To( FT_Vector* to,
TBBox_Rec* user )
@@ -123,28 +127,33 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Conic_Check */
- /* */
- /* <Description> */
- /* Find the extrema of a 1-dimensional conic Bezier curve and update */
- /* a bounding range. This version uses direct computation, as it */
- /* doesn't need square roots. */
- /* */
- /* <Input> */
- /* y1 :: The start coordinate. */
- /* */
- /* y2 :: The coordinate of the control point. */
- /* */
- /* y3 :: The end coordinate. */
- /* */
- /* <InOut> */
- /* min :: The address of the current minimum. */
- /* */
- /* max :: The address of the current maximum. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Conic_Check
+ *
+ * @Description:
+ * Find the extrema of a 1-dimensional conic Bezier curve and update
+ * a bounding range. This version uses direct computation, as it
+ * doesn't need square roots.
+ *
+ * @Input:
+ * y1 ::
+ * The start coordinate.
+ *
+ * y2 ::
+ * The coordinate of the control point.
+ *
+ * y3 ::
+ * The end coordinate.
+ *
+ * @InOut:
+ * min ::
+ * The address of the current minimum.
+ *
+ * max ::
+ * The address of the current maximum.
+ */
static void
BBox_Conic_Check( FT_Pos y1,
FT_Pos y2,
@@ -168,32 +177,35 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Conic_To */
- /* */
- /* <Description> */
- /* This function is used as a `conic_to' emitter during */
- /* FT_Outline_Decompose(). It checks a conic Bezier curve with the */
- /* current bounding box, and computes its extrema if necessary to */
- /* update it. */
- /* */
- /* <Input> */
- /* control :: A pointer to a control point. */
- /* */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: The address of the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- /* <Note> */
- /* In the case of a non-monotonous arc, we compute directly the */
- /* extremum coordinates, as it is sufficiently fast. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Conic_To
+ *
+ * @Description:
+ * This function is used as a `conic_to' emitter during
+ * FT_Outline_Decompose(). It checks a conic Bezier curve with the
+ * current bounding box, and computes its extrema if necessary to
+ * update it.
+ *
+ * @Input:
+ * control ::
+ * A pointer to a control point.
+ *
+ * to ::
+ * A pointer to the destination vector.
+ *
+ * @InOut:
+ * user ::
+ * The address of the current walk context.
+ *
+ * @Return:
+ * Always 0. Needed for the interface only.
+ *
+ * @Note:
+ * In the case of a non-monotonous arc, we compute directly the
+ * extremum coordinates, as it is sufficiently fast.
+ */
static int
BBox_Conic_To( FT_Vector* control,
FT_Vector* to,
@@ -222,30 +234,36 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Cubic_Check */
- /* */
- /* <Description> */
- /* Find the extrema of a 1-dimensional cubic Bezier curve and */
- /* update a bounding range. This version uses iterative splitting */
- /* because it is faster than the exact solution with square roots. */
- /* */
- /* <Input> */
- /* p1 :: The start coordinate. */
- /* */
- /* p2 :: The coordinate of the first control point. */
- /* */
- /* p3 :: The coordinate of the second control point. */
- /* */
- /* p4 :: The end coordinate. */
- /* */
- /* <InOut> */
- /* min :: The address of the current minimum. */
- /* */
- /* max :: The address of the current maximum. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Cubic_Check
+ *
+ * @Description:
+ * Find the extrema of a 1-dimensional cubic Bezier curve and
+ * update a bounding range. This version uses iterative splitting
+ * because it is faster than the exact solution with square roots.
+ *
+ * @Input:
+ * p1 ::
+ * The start coordinate.
+ *
+ * p2 ::
+ * The coordinate of the first control point.
+ *
+ * p3 ::
+ * The coordinate of the second control point.
+ *
+ * p4 ::
+ * The end coordinate.
+ *
+ * @InOut:
+ * min ::
+ * The address of the current minimum.
+ *
+ * max ::
+ * The address of the current maximum.
+ */
static FT_Pos
cubic_peak( FT_Pos q1,
FT_Pos q2,
@@ -301,9 +319,9 @@
q2 = q2 + q1;
q4 = q4 + q3;
q3 = q3 + q2;
- q4 = ( q4 + q3 ) / 8;
- q3 = q3 / 4;
- q2 = q2 / 2;
+ q4 = ( q4 + q3 ) >> 3;
+ q3 = q3 >> 2;
+ q2 = q2 >> 1;
}
else /* second half */
{
@@ -312,9 +330,9 @@
q3 = q3 + q4;
q1 = q1 + q2;
q2 = q2 + q3;
- q1 = ( q1 + q2 ) / 8;
- q2 = q2 / 4;
- q3 = q3 / 2;
+ q1 = ( q1 + q2 ) >> 3;
+ q2 = q2 >> 2;
+ q3 = q3 >> 1;
}
/* check whether either end reached the maximum */
@@ -361,34 +379,38 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Cubic_To */
- /* */
- /* <Description> */
- /* This function is used as a `cubic_to' emitter during */
- /* FT_Outline_Decompose(). It checks a cubic Bezier curve with the */
- /* current bounding box, and computes its extrema if necessary to */
- /* update it. */
- /* */
- /* <Input> */
- /* control1 :: A pointer to the first control point. */
- /* */
- /* control2 :: A pointer to the second control point. */
- /* */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: The address of the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- /* <Note> */
- /* In the case of a non-monotonous arc, we don't compute directly */
- /* extremum coordinates, we subdivide instead. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * BBox_Cubic_To
+ *
+ * @Description:
+ * This function is used as a `cubic_to' emitter during
+ * FT_Outline_Decompose(). It checks a cubic Bezier curve with the
+ * current bounding box, and computes its extrema if necessary to
+ * update it.
+ *
+ * @Input:
+ * control1 ::
+ * A pointer to the first control point.
+ *
+ * control2 ::
+ * A pointer to the second control point.
+ *
+ * to ::
+ * A pointer to the destination vector.
+ *
+ * @InOut:
+ * user ::
+ * The address of the current walk context.
+ *
+ * @Return:
+ * Always 0. Needed for the interface only.
+ *
+ * @Note:
+ * In the case of a non-monotonous arc, we don't compute directly
+ * extremum coordinates, we subdivide instead.
+ */
static int
BBox_Cubic_To( FT_Vector* control1,
FT_Vector* control2,
@@ -490,12 +512,6 @@
FT_Error error;
TBBox_Rec user;
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Outline_Funcs bbox_interface;
-
-
- Init_Class_bbox_interface( &bbox_interface );
-#endif
user.bbox = bbox;
diff --git a/freetype/src/base/ftbdf.c b/freetype/src/base/ftbdf.c
index c4ea502f..c0fccd7b 100644
--- a/freetype/src/base/ftbdf.c
+++ b/freetype/src/base/ftbdf.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbdf.c */
-/* */
-/* FreeType API for accessing BDF-specific strings (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbdf.c
+ *
+ * FreeType API for accessing BDF-specific strings (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/ftbitmap.c b/freetype/src/base/ftbitmap.c
index a9746663..0e0a76fe 100644
--- a/freetype/src/base/ftbitmap.c
+++ b/freetype/src/base/ftbitmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.c */
-/* */
-/* FreeType utility functions for bitmaps (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbitmap.c
+ *
+ * FreeType utility functions for bitmaps (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -24,8 +24,18 @@
#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 bitmap
+
+
static
- const FT_Bitmap null_bitmap = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ const FT_Bitmap null_bitmap = { 0, 0, 0, NULL, 0, 0, 0, NULL };
/* documentation is in ftbitmap.h */
@@ -786,6 +796,338 @@
/* documentation is in ftbitmap.h */
FT_EXPORT_DEF( FT_Error )
+ FT_Bitmap_Blend( FT_Library library,
+ const FT_Bitmap* source_,
+ const FT_Vector source_offset_,
+ FT_Bitmap* target,
+ FT_Vector *atarget_offset,
+ FT_Color color )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory;
+
+ FT_Bitmap source_bitmap;
+ const FT_Bitmap* source;
+
+ FT_Vector source_offset;
+ FT_Vector target_offset;
+
+ FT_Bool free_source_bitmap = 0;
+ FT_Bool free_target_bitmap_on_error = 0;
+
+ FT_Pos source_llx, source_lly, source_urx, source_ury;
+ FT_Pos target_llx, target_lly, target_urx, target_ury;
+ FT_Pos final_llx, final_lly, final_urx, final_ury;
+
+ unsigned int final_rows, final_width;
+ long x, y;
+
+
+ if ( !library || !target || !source_ || !atarget_offset )
+ return FT_THROW( Invalid_Argument );
+
+ memory = library->memory;
+
+ if ( !( target->pixel_mode == FT_PIXEL_MODE_NONE ||
+ ( target->pixel_mode == FT_PIXEL_MODE_BGRA &&
+ target->buffer ) ) )
+ return FT_THROW( Invalid_Argument );
+
+ if ( source_->pixel_mode == FT_PIXEL_MODE_NONE )
+ return FT_Err_Ok; /* nothing to do */
+
+ /* pitches must have the same sign */
+ if ( target->pixel_mode == FT_PIXEL_MODE_BGRA &&
+ ( source_->pitch ^ target->pitch ) < 0 )
+ return FT_THROW( Invalid_Argument );
+
+ if ( !( source_->width && source_->rows ) )
+ return FT_Err_Ok; /* nothing to do */
+
+ /* assure integer pixel offsets */
+ source_offset.x = FT_PIX_FLOOR( source_offset_.x );
+ source_offset.y = FT_PIX_FLOOR( source_offset_.y );
+ target_offset.x = FT_PIX_FLOOR( atarget_offset->x );
+ target_offset.y = FT_PIX_FLOOR( atarget_offset->y );
+
+ /* get source bitmap dimensions */
+ source_llx = source_offset.x;
+ if ( FT_LONG_MIN + (FT_Pos)( source_->rows << 6 ) + 64 > source_offset.y )
+ {
+ FT_TRACE5((
+ "FT_Bitmap_Blend: y coordinate overflow in source bitmap\n" ));
+ return FT_THROW( Invalid_Argument );
+ }
+ source_lly = source_offset.y - ( source_->rows << 6 );
+
+ if ( FT_LONG_MAX - (FT_Pos)( source_->width << 6 ) - 64 < source_llx )
+ {
+ FT_TRACE5((
+ "FT_Bitmap_Blend: x coordinate overflow in source bitmap\n" ));
+ return FT_THROW( Invalid_Argument );
+ }
+ source_urx = source_llx + ( source_->width << 6 );
+ source_ury = source_offset.y;
+
+ /* get target bitmap dimensions */
+ if ( target->width && target->rows )
+ {
+ target_llx = target_offset.x;
+ if ( FT_LONG_MIN + (FT_Pos)( target->rows << 6 ) > target_offset.y )
+ {
+ FT_TRACE5((
+ "FT_Bitmap_Blend: y coordinate overflow in target bitmap\n" ));
+ return FT_THROW( Invalid_Argument );
+ }
+ target_lly = target_offset.y - ( target->rows << 6 );
+
+ if ( FT_LONG_MAX - (FT_Pos)( target->width << 6 ) < target_llx )
+ {
+ FT_TRACE5((
+ "FT_Bitmap_Blend: x coordinate overflow in target bitmap\n" ));
+ return FT_THROW( Invalid_Argument );
+ }
+ target_urx = target_llx + ( target->width << 6 );
+ target_ury = target_offset.y;
+ }
+ else
+ {
+ target_llx = FT_LONG_MAX;
+ target_lly = FT_LONG_MAX;
+ target_urx = FT_LONG_MIN;
+ target_ury = FT_LONG_MIN;
+ }
+
+ /* compute final bitmap dimensions */
+ final_llx = FT_MIN( source_llx, target_llx );
+ final_lly = FT_MIN( source_lly, target_lly );
+ final_urx = FT_MAX( source_urx, target_urx );
+ final_ury = FT_MAX( source_ury, target_ury );
+
+ final_width = ( final_urx - final_llx ) >> 6;
+ final_rows = ( final_ury - final_lly ) >> 6;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE5(( "FT_Bitmap_Blend:\n"
+ " source bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ source_llx / 64, source_lly / 64,
+ source_urx / 64, source_ury / 64,
+ source_->width, source_->rows ));
+
+ if ( target->width && target->rows )
+ FT_TRACE5(( " target bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ target_llx / 64, target_lly / 64,
+ target_urx / 64, target_ury / 64,
+ target->width, target->rows ));
+ else
+ FT_TRACE5(( " target bitmap: empty\n" ));
+
+ if ( final_width && final_rows )
+ FT_TRACE5(( " final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ final_llx / 64, final_lly / 64,
+ final_urx / 64, final_ury / 64,
+ final_width, final_rows ));
+ else
+ FT_TRACE5(( " final bitmap: empty\n" ));
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+ if ( !( final_width && final_rows ) )
+ return FT_Err_Ok; /* nothing to do */
+
+ /* for blending, set offset vector of final bitmap */
+ /* temporarily to (0,0) */
+ source_llx -= final_llx;
+ source_lly -= final_lly;
+
+ if ( target->width && target->rows )
+ {
+ target_llx -= final_llx;
+ target_lly -= final_lly;
+ }
+
+ /* set up target bitmap */
+ if ( target->pixel_mode == FT_PIXEL_MODE_NONE )
+ {
+ /* create new empty bitmap */
+ target->width = final_width;
+ target->rows = final_rows;
+ target->pixel_mode = FT_PIXEL_MODE_BGRA;
+ target->pitch = (int)final_width * 4;
+ target->num_grays = 256;
+
+ if ( FT_LONG_MAX / target->pitch < (int)target->rows )
+ {
+ FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
+ final_width, final_rows ));
+ return FT_THROW( Invalid_Argument );
+ }
+
+ if ( FT_ALLOC( target->buffer, target->pitch * (int)target->rows ) )
+ return error;
+
+ free_target_bitmap_on_error = 1;
+ }
+ else if ( target->width != final_width ||
+ target->rows != final_rows )
+ {
+ /* adjust old bitmap to enlarged size */
+ int pitch, new_pitch;
+
+ unsigned char* buffer = NULL;
+
+
+ pitch = target->pitch;
+
+ if ( pitch < 0 )
+ pitch = -pitch;
+
+ new_pitch = (int)final_width * 4;
+
+ if ( FT_LONG_MAX / new_pitch < (int)final_rows )
+ {
+ FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
+ final_width, final_rows ));
+ return FT_THROW( Invalid_Argument );
+ }
+
+ /* TODO: provide an in-buffer solution for large bitmaps */
+ /* to avoid allocation of a new buffer */
+ if ( FT_ALLOC( buffer, new_pitch * (int)final_rows ) )
+ goto Error;
+
+ /* copy data to new buffer */
+ x = target_llx >> 6;
+ y = target_lly >> 6;
+
+ /* the bitmap flow is from top to bottom, */
+ /* but y is measured from bottom to top */
+ if ( target->pitch < 0 )
+ {
+ /* XXX */
+ }
+ else
+ {
+ unsigned char* p =
+ target->buffer;
+ unsigned char* q =
+ buffer +
+ ( final_rows - y - target->rows ) * new_pitch +
+ x * 4;
+ unsigned char* limit_p =
+ p + pitch * (int)target->rows;
+
+
+ while ( p < limit_p )
+ {
+ FT_MEM_COPY( q, p, pitch );
+
+ p += pitch;
+ q += new_pitch;
+ }
+ }
+
+ FT_FREE( target->buffer );
+
+ target->width = final_width;
+ target->rows = final_rows;
+
+ if ( target->pitch < 0 )
+ target->pitch = -new_pitch;
+ else
+ target->pitch = new_pitch;
+
+ target->buffer = buffer;
+ }
+
+ /* adjust source bitmap if necessary */
+ if ( source_->pixel_mode != FT_PIXEL_MODE_GRAY )
+ {
+ FT_Bitmap_Init( &source_bitmap );
+ error = FT_Bitmap_Convert( library, source_, &source_bitmap, 1 );
+ if ( error )
+ goto Error;
+
+ source = &source_bitmap;
+ free_source_bitmap = 1;
+ }
+ else
+ source = source_;
+
+ /* do blending; the code below returns pre-multiplied channels, */
+ /* similar to what FreeType gets from `CBDT' tables */
+ x = source_llx >> 6;
+ y = source_lly >> 6;
+
+ /* the bitmap flow is from top to bottom, */
+ /* but y is measured from bottom to top */
+ if ( target->pitch < 0 )
+ {
+ /* XXX */
+ }
+ else
+ {
+ unsigned char* p =
+ source->buffer;
+ unsigned char* q =
+ target->buffer +
+ ( target->rows - y - source->rows ) * target->pitch +
+ x * 4;
+ unsigned char* limit_p =
+ p + source->pitch * (int)source->rows;
+
+
+ while ( p < limit_p )
+ {
+ unsigned char* r = p;
+ unsigned char* s = q;
+ unsigned char* limit_r = r + source->width;
+
+
+ while ( r < limit_r )
+ {
+ int aa = *r++;
+ int fa = color.alpha * aa / 255;
+
+ int fb = color.blue * fa / 255;
+ int fg = color.green * fa / 255;
+ int fr = color.red * fa / 255;
+
+ int ba2 = 255 - fa;
+
+ int bb = s[0];
+ int bg = s[1];
+ int br = s[2];
+ int ba = s[3];
+
+
+ *s++ = (unsigned char)( bb * ba2 / 255 + fb );
+ *s++ = (unsigned char)( bg * ba2 / 255 + fg );
+ *s++ = (unsigned char)( br * ba2 / 255 + fr );
+ *s++ = (unsigned char)( ba * ba2 / 255 + fa );
+ }
+
+ p += source->pitch;
+ q += target->pitch;
+ }
+ }
+
+ atarget_offset->x = final_llx;
+ atarget_offset->y = final_lly + ( final_rows << 6 );
+
+ Error:
+ if ( error && free_target_bitmap_on_error )
+ FT_Bitmap_Done( library, target );
+
+ if ( free_source_bitmap )
+ FT_Bitmap_Done( library, &source_bitmap );
+
+ return error;
+ }
+
+
+ /* documentation is in ftbitmap.h */
+
+ FT_EXPORT_DEF( FT_Error )
FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot )
{
if ( slot && slot->format == FT_GLYPH_FORMAT_BITMAP &&
diff --git a/freetype/src/base/ftcalc.c b/freetype/src/base/ftcalc.c
index f4ff45f8..315dc441 100644
--- a/freetype/src/base/ftcalc.c
+++ b/freetype/src/base/ftcalc.c
@@ -1,35 +1,35 @@
-/***************************************************************************/
-/* */
-/* ftcalc.c */
-/* */
-/* Arithmetic computations (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftcalc.c
+ *
+ * Arithmetic computations (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -58,14 +58,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT calc
/* transfer sign, leaving a positive number; */
@@ -516,10 +516,10 @@
#elif 0
/*
- * This code is nonportable. See comment below.
+ * This code is nonportable. See comment below.
*
- * However, on a platform where right-shift of a signed quantity fills
- * the leftmost bits by copying the sign bit, it might be faster.
+ * However, on a platform where right-shift of a signed quantity fills
+ * the leftmost bits by copying the sign bit, it might be faster.
*/
FT_Long sa, sb;
@@ -527,22 +527,22 @@
/*
- * This is a clever way of converting a signed number `a' into its
- * absolute value (stored back into `a') and its sign. The sign is
- * stored in `sa'; 0 means `a' was positive or zero, and -1 means `a'
- * was negative. (Similarly for `b' and `sb').
+ * This is a clever way of converting a signed number `a' into its
+ * absolute value (stored back into `a') and its sign. The sign is
+ * stored in `sa'; 0 means `a' was positive or zero, and -1 means `a'
+ * was negative. (Similarly for `b' and `sb').
*
- * Unfortunately, it doesn't work (at least not portably).
+ * Unfortunately, it doesn't work (at least not portably).
*
- * It makes the assumption that right-shift on a negative signed value
- * fills the leftmost bits by copying the sign bit. This is wrong.
- * According to K&R 2nd ed, section `A7.8 Shift Operators' on page 206,
- * the result of right-shift of a negative signed value is
- * implementation-defined. At least one implementation fills the
- * leftmost bits with 0s (i.e., it is exactly the same as an unsigned
- * right shift). This means that when `a' is negative, `sa' ends up
- * with the value 1 rather than -1. After that, everything else goes
- * wrong.
+ * It makes the assumption that right-shift on a negative signed value
+ * fills the leftmost bits by copying the sign bit. This is wrong.
+ * According to K&R 2nd ed, section `A7.8 Shift Operators' on page 206,
+ * the result of right-shift of a negative signed value is
+ * implementation-defined. At least one implementation fills the
+ * leftmost bits with 0s (i.e., it is exactly the same as an unsigned
+ * right shift). This means that when `a' is negative, `sa' ends up
+ * with the value 1 rather than -1. After that, everything else goes
+ * wrong.
*/
sa = ( a_ >> ( sizeof ( a_ ) * 8 - 1 ) );
a = ( a_ ^ sa ) - sa;
@@ -701,8 +701,8 @@
if ( !delta )
return FT_THROW( Invalid_Argument ); /* matrix can't be inverted */
- matrix->xy = - FT_DivFix( matrix->xy, delta );
- matrix->yx = - FT_DivFix( matrix->yx, delta );
+ matrix->xy = -FT_DivFix( matrix->xy, delta );
+ matrix->yx = -FT_DivFix( matrix->yx, delta );
xx = matrix->xx;
yy = matrix->yy;
@@ -747,6 +747,76 @@
/* documentation is in ftcalc.h */
+ FT_BASE_DEF( FT_Bool )
+ FT_Matrix_Check( const FT_Matrix* matrix )
+ {
+ FT_Matrix m;
+ FT_Fixed val[4];
+ FT_Fixed nonzero_minval, maxval;
+ FT_Fixed temp1, temp2;
+ FT_UInt i;
+
+
+ if ( !matrix )
+ return 0;
+
+ val[0] = FT_ABS( matrix->xx );
+ val[1] = FT_ABS( matrix->xy );
+ val[2] = FT_ABS( matrix->yx );
+ val[3] = FT_ABS( matrix->yy );
+
+ /*
+ * To avoid overflow, we ensure that each value is not larger than
+ *
+ * int(sqrt(2^31 / 4)) = 23170 ;
+ *
+ * we also check that no value becomes zero if we have to scale.
+ */
+
+ maxval = 0;
+ nonzero_minval = FT_LONG_MAX;
+
+ for ( i = 0; i < 4; i++ )
+ {
+ if ( val[i] > maxval )
+ maxval = val[i];
+ if ( val[i] && val[i] < nonzero_minval )
+ nonzero_minval = val[i];
+ }
+
+ /* we only handle 32bit values */
+ if ( maxval > 0x7FFFFFFFL )
+ return 0;
+
+ if ( maxval > 23170 )
+ {
+ FT_Fixed scale = FT_DivFix( maxval, 23170 );
+
+
+ if ( !FT_DivFix( nonzero_minval, scale ) )
+ return 0; /* value range too large */
+
+ m.xx = FT_DivFix( matrix->xx, scale );
+ m.xy = FT_DivFix( matrix->xy, scale );
+ m.yx = FT_DivFix( matrix->yx, scale );
+ m.yy = FT_DivFix( matrix->yy, scale );
+ }
+ else
+ m = *matrix;
+
+ temp1 = FT_ABS( m.xx * m.yy - m.xy * m.yx );
+ temp2 = m.xx * m.xx + m.xy * m.xy + m.yx * m.yx + m.yy * m.yy;
+
+ if ( temp1 == 0 ||
+ temp2 / temp1 > 50 )
+ return 0;
+
+ return 1;
+ }
+
+
+ /* documentation is in ftcalc.h */
+
FT_BASE_DEF( void )
FT_Vector_Transform_Scaled( FT_Vector* vector,
const FT_Matrix* matrix,
@@ -913,9 +983,13 @@
FT_Pos out_x,
FT_Pos out_y )
{
+ /* we silently ignore overflow errors since such large values */
+ /* lead to even more (harmless) rendering errors later on */
+
#ifdef FT_LONG64
- FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
+ FT_Int64 delta = SUB_INT64( MUL_INT64( in_x, out_y ),
+ MUL_INT64( in_y, out_x ) );
return ( delta > 0 ) - ( delta < 0 );
@@ -925,8 +999,6 @@
FT_Int result;
- /* we silently ignore overflow errors, since such large values */
- /* lead to even more (harmless) rendering errors later on */
if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L &&
ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L )
{
diff --git a/freetype/src/base/ftcid.c b/freetype/src/base/ftcid.c
index f5184649..190b23f3 100644
--- a/freetype/src/base/ftcid.c
+++ b/freetype/src/base/ftcid.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcid.c */
-/* */
-/* FreeType API for accessing CID font information. */
-/* */
-/* Copyright 2007-2018 by */
-/* Derek Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcid.c
+ *
+ * FreeType API for accessing CID font information.
+ *
+ * Copyright (C) 2007-2019 by
+ * Derek Clegg and Michael Toftdal.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
diff --git a/freetype/src/base/ftcolor.c b/freetype/src/base/ftcolor.c
new file mode 100644
index 00000000..8cb057a3
--- /dev/null
+++ b/freetype/src/base/ftcolor.c
@@ -0,0 +1,157 @@
+/****************************************************************************
+ *
+ * ftcolor.c
+ *
+ * FreeType's glyph color management (body).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_SFNT_H
+#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include FT_COLOR_H
+
+
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+
+ static
+ const FT_Palette_Data null_palette_data = { 0, NULL, NULL, 0, NULL };
+
+
+ /* documentation is in ftcolor.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Data_Get( FT_Face face,
+ FT_Palette_Data *apalette_data )
+ {
+ if ( !face )
+ return FT_THROW( Invalid_Face_Handle );
+ if ( !apalette_data)
+ return FT_THROW( Invalid_Argument );
+
+ if ( FT_IS_SFNT( face ) )
+ *apalette_data = ( (TT_Face)face )->palette_data;
+ else
+ *apalette_data = null_palette_data;
+
+ return FT_Err_Ok;
+ }
+
+
+ /* documentation is in ftcolor.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Select( FT_Face face,
+ FT_UShort palette_index,
+ FT_Color* *apalette )
+ {
+ FT_Error error;
+
+ TT_Face ttface;
+ SFNT_Service sfnt;
+
+
+ if ( !face )
+ return FT_THROW( Invalid_Face_Handle );
+
+ if ( !FT_IS_SFNT( face ) )
+ {
+ if ( apalette )
+ *apalette = NULL;
+
+ return FT_Err_Ok;
+ }
+
+ ttface = (TT_Face)face;
+ sfnt = (SFNT_Service)ttface->sfnt;
+
+ error = sfnt->set_palette( ttface, palette_index );
+ if ( error )
+ return error;
+
+ ttface->palette_index = palette_index;
+
+ if ( apalette )
+ *apalette = ttface->palette;
+
+ return FT_Err_Ok;
+ }
+
+
+ /* documentation is in ftcolor.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Set_Foreground_Color( FT_Face face,
+ FT_Color foreground_color )
+ {
+ TT_Face ttface;
+
+
+ if ( !face )
+ return FT_THROW( Invalid_Face_Handle );
+
+ if ( !FT_IS_SFNT( face ) )
+ return FT_Err_Ok;
+
+ ttface = (TT_Face)face;
+
+ ttface->foreground_color = foreground_color;
+ ttface->have_foreground_color = 1;
+
+ return FT_Err_Ok;
+ }
+
+#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Data_Get( FT_Face face,
+ FT_Palette_Data *apalette_data )
+ {
+ FT_UNUSED( face );
+ FT_UNUSED( apalette_data );
+
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Select( FT_Face face,
+ FT_UShort palette_index,
+ FT_Color* *apalette )
+ {
+ FT_UNUSED( face );
+ FT_UNUSED( palette_index );
+ FT_UNUSED( apalette );
+
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Palette_Set_Foreground_Color( FT_Face face,
+ FT_Color foreground_color )
+ {
+ FT_UNUSED( face );
+ FT_UNUSED( foreground_color );
+
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+
+/* END */
diff --git a/freetype/src/base/ftdbgmem.c b/freetype/src/base/ftdbgmem.c
index c33d8acb..55cd269e 100644
--- a/freetype/src/base/ftdbgmem.c
+++ b/freetype/src/base/ftdbgmem.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftdbgmem.c */
-/* */
-/* Memory debugger (body). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdbgmem.c
+ *
+ * Memory debugger (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -50,9 +50,9 @@
#define FT_MEM_VAL( addr ) ( (FT_PtrDist)(FT_Pointer)( addr ) )
/*
- * This structure holds statistics for a single allocation/release
- * site. This is useful to know where memory operations happen the
- * most.
+ * 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_
{
@@ -76,17 +76,17 @@
/*
- * We don't need a resizable array for the memory sources because
- * their number is pretty limited within FreeType.
+ * We don't need a resizable array for the memory sources because
+ * their number is pretty limited within FreeType.
*/
#define FT_MEM_SOURCE_BUCKETS 128
/*
- * This structure holds information related to a single allocated
- * memory block. If KEEPALIVE is defined, blocks that are freed by
- * FreeType are never released to the system. Instead, their `size'
- * field is set to `-size'. This is mainly useful to detect double
- * frees, at the price of a large memory footprint during execution.
+ * This structure holds information related to a single allocated
+ * memory block. If KEEPALIVE is defined, blocks that are freed by
+ * FreeType are never released to the system. Instead, their `size'
+ * field is set to `-size'. This is mainly useful to detect double
+ * frees, at the price of a large memory footprint during execution.
*/
typedef struct FT_MemNodeRec_
{
@@ -106,8 +106,8 @@
/*
- * The global structure, containing compound statistics and all hash
- * tables.
+ * The global structure, containing compound statistics and all hash
+ * tables.
*/
typedef struct FT_MemTableRec_
{
@@ -146,8 +146,8 @@
/*
- * Prime numbers are ugly to handle. It would be better to implement
- * L-Hashing, which is 10% faster and doesn't require divisions.
+ * Prime numbers are ugly to handle. It would be better to implement
+ * L-Hashing, which is 10% faster and doesn't require divisions.
*/
static const FT_Int ft_mem_primes[] =
{
diff --git a/freetype/src/base/ftdebug.c b/freetype/src/base/ftdebug.c
index fe263091..ec723378 100644
--- a/freetype/src/base/ftdebug.c
+++ b/freetype/src/base/ftdebug.c
@@ -1,44 +1,44 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ * Debugging and logging component (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -87,9 +87,19 @@
int line,
const char* file )
{
+#if 0
+ /* activating the code in this block makes FreeType very chatty */
+ fprintf( stderr,
+ "%s:%d: error 0x%02x: %s\n",
+ file,
+ line,
+ error,
+ FT_Error_String( error ) );
+#else
FT_UNUSED( error );
FT_UNUSED( line );
FT_UNUSED( file );
+#endif
return 0;
}
@@ -100,9 +110,16 @@
#ifdef FT_DEBUG_LEVEL_TRACE
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
+ /* array of trace levels, initialized to 0; */
+ /* this gets adjusted at run-time */
+ static int ft_trace_levels_enabled[trace_count];
+ /* array of trace levels, always initialized to 0 */
+ static int ft_trace_levels_disabled[trace_count];
+
+ /* a pointer to either `ft_trace_levels_enabled' */
+ /* or `ft_trace_levels_disabled' */
+ int* ft_trace_levels;
/* define array of trace toggle names */
#define FT_TRACE_DEF( x ) #x ,
@@ -140,24 +157,42 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ ft_trace_levels = ft_trace_levels_disabled;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ ft_trace_levels = ft_trace_levels_enabled;
+ }
+
+
+ /**************************************************************************
+ *
+ * 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 )
{
@@ -223,14 +258,16 @@
{
/* special case for `any' */
for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
+ ft_trace_levels_enabled[n] = level;
}
else
- ft_trace_levels[found] = level;
+ ft_trace_levels_enabled[found] = level;
}
}
}
}
+
+ ft_trace_levels = ft_trace_levels_enabled;
}
@@ -260,6 +297,22 @@
}
+ FT_BASE_DEF( void )
+ FT_Trace_Disable( void )
+ {
+ /* nothing */
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Trace_Enable( void )
+ {
+ /* nothing */
+ }
+
+
#endif /* !FT_DEBUG_LEVEL_TRACE */
diff --git a/freetype/src/base/fterrors.c b/freetype/src/base/fterrors.c
new file mode 100644
index 00000000..84fe5902
--- /dev/null
+++ b/freetype/src/base/fterrors.c
@@ -0,0 +1,46 @@
+/****************************************************************************
+ *
+ * fterrors.c
+ *
+ * FreeType API for error code handling.
+ *
+ * Copyright (C) 2018-2019 by
+ * Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_ERRORS_H
+
+
+ /* documentation is in fterrors.h */
+
+ FT_EXPORT_DEF( const char* )
+ FT_Error_String( FT_Error error_code )
+ {
+ if ( error_code < 0 ||
+ error_code >= FT_ERR_CAT( FT_ERR_PREFIX, Max ) )
+ return NULL;
+
+#if defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || \
+ defined( FT_DEBUG_LEVEL_ERROR )
+
+#undef FTERRORS_H_
+#define FT_ERROR_START_LIST switch ( FT_ERROR_BASE( error_code ) ) {
+#define FT_ERRORDEF( e, v, s ) case v: return s;
+#define FT_ERROR_END_LIST }
+
+#include FT_ERRORS_H
+
+#endif /* defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || ... */
+
+ return NULL;
+ }
diff --git a/freetype/src/base/ftfntfmt.c b/freetype/src/base/ftfntfmt.c
index a2900ceb..54ba5374 100644
--- a/freetype/src/base/ftfntfmt.c
+++ b/freetype/src/base/ftfntfmt.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftfntfmt.c */
-/* */
-/* FreeType utility file for font formats (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftfntfmt.c
+ *
+ * FreeType utility file for font formats (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/ftfstype.c b/freetype/src/base/ftfstype.c
index e6cdf6e2..45e2d808 100644
--- a/freetype/src/base/ftfstype.c
+++ b/freetype/src/base/ftfstype.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftfstype.c */
-/* */
-/* FreeType utility file to access FSType data (body). */
-/* */
-/* Copyright 2008-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftfstype.c
+ *
+ * FreeType utility file to access FSType data (body).
+ *
+ * Copyright (C) 2008-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
#include FT_TYPE1_TABLES_H
diff --git a/freetype/src/base/ftgasp.c b/freetype/src/base/ftgasp.c
index 4f80bba6..720fb113 100644
--- a/freetype/src/base/ftgasp.c
+++ b/freetype/src/base/ftgasp.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgasp.c */
-/* */
-/* Access of TrueType's `gasp' table (body). */
-/* */
-/* Copyright 2007-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgasp.c
+ *
+ * Access of TrueType's `gasp' table (body).
+ *
+ * Copyright (C) 2007-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/ftgloadr.c b/freetype/src/base/ftgloadr.c
index 47202496..bfeed461 100644
--- a/freetype/src/base/ftgloadr.c
+++ b/freetype/src/base/ftgloadr.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.c */
-/* */
-/* The FreeType glyph loader (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgloadr.c
+ *
+ * The FreeType glyph loader (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -23,7 +23,7 @@
#include FT_INTERNAL_OBJECTS_H
#undef FT_COMPONENT
-#define FT_COMPONENT trace_gloader
+#define FT_COMPONENT gloader
/*************************************************************************/
@@ -38,31 +38,31 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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 */
@@ -99,12 +99,12 @@
}
- /* reset the glyph loader, frees all allocated tables */
- /* and starts from zero */
+ /* reset glyph loader, free all allocated tables, */
+ /* and start from zero */
FT_BASE_DEF( void )
FT_GlyphLoader_Reset( FT_GlyphLoader loader )
{
- FT_Memory memory = loader->memory;
+ FT_Memory memory = loader->memory;
FT_FREE( loader->base.outline.points );
@@ -129,7 +129,7 @@
{
if ( loader )
{
- FT_Memory memory = loader->memory;
+ FT_Memory memory = loader->memory;
FT_GlyphLoader_Reset( loader );
@@ -361,46 +361,4 @@
}
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
- FT_GlyphLoader source )
- {
- FT_Error error;
- FT_UInt num_points = (FT_UInt)source->base.outline.n_points;
- FT_UInt num_contours = (FT_UInt)source->base.outline.n_contours;
-
-
- error = FT_GlyphLoader_CheckPoints( target, num_points, num_contours );
- if ( !error )
- {
- FT_Outline* out = &target->base.outline;
- FT_Outline* in = &source->base.outline;
-
-
- FT_ARRAY_COPY( out->points, in->points,
- num_points );
- FT_ARRAY_COPY( out->tags, in->tags,
- num_points );
- FT_ARRAY_COPY( out->contours, in->contours,
- num_contours );
-
- /* do we need to copy the extra points? */
- if ( target->use_extra && source->use_extra )
- {
- FT_ARRAY_COPY( target->base.extra_points, source->base.extra_points,
- num_points );
- FT_ARRAY_COPY( target->base.extra_points2, source->base.extra_points2,
- num_points );
- }
-
- out->n_points = (short)num_points;
- out->n_contours = (short)num_contours;
-
- FT_GlyphLoader_Adjust_Points( target );
- }
-
- return error;
- }
-
-
/* END */
diff --git a/freetype/src/base/ftglyph.c b/freetype/src/base/ftglyph.c
index 6759aa25..e6b13279 100644
--- a/freetype/src/base/ftglyph.c
+++ b/freetype/src/base/ftglyph.c
@@ -1,31 +1,31 @@
-/***************************************************************************/
-/* */
-/* ftglyph.c */
-/* */
-/* FreeType convenience functions to handle glyphs (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftglyph.c
+ *
+ * FreeType convenience functions to handle glyphs (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -36,16 +36,15 @@
#include FT_BITMAP_H
#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT glyph
/*************************************************************************/
@@ -77,7 +76,7 @@
/* do lazy copying whenever possible */
if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
- glyph->bitmap = slot->bitmap;
+ glyph->bitmap = slot->bitmap;
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
else
@@ -359,37 +358,28 @@
/* documentation is in ftglyph.h */
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Glyph( FT_GlyphSlot slot,
- FT_Glyph *aglyph )
+ FT_EXPORT( FT_Error )
+ FT_New_Glyph( FT_Library library,
+ FT_Glyph_Format format,
+ FT_Glyph *aglyph )
{
- FT_Library library;
- FT_Error error;
- FT_Glyph glyph;
-
const FT_Glyph_Class* clazz = NULL;
-
- if ( !slot )
- return FT_THROW( Invalid_Slot_Handle );
-
- library = slot->library;
-
- if ( !aglyph )
+ if ( !library || !aglyph )
return FT_THROW( Invalid_Argument );
/* if it is a bitmap, that's easy :-) */
- if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- clazz = FT_BITMAP_GLYPH_CLASS_GET;
+ if ( format == FT_GLYPH_FORMAT_BITMAP )
+ clazz = &ft_bitmap_glyph_class;
/* if it is an outline */
- else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- clazz = FT_OUTLINE_GLYPH_CLASS_GET;
+ else if ( 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 );
+ FT_Renderer render = FT_Lookup_Renderer( library, format, 0 );
if ( render )
@@ -397,13 +387,31 @@
}
if ( !clazz )
- {
- error = FT_THROW( Invalid_Glyph_Format );
- goto Exit;
- }
+ return FT_THROW( Invalid_Glyph_Format );
+
+ /* create FT_Glyph object */
+ return ft_new_glyph( library, clazz, aglyph );
+ }
+
+
+ /* documentation is in ftglyph.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Glyph( FT_GlyphSlot slot,
+ FT_Glyph *aglyph )
+ {
+ FT_Error error;
+ FT_Glyph glyph;
+
+
+ if ( !slot )
+ return FT_THROW( Invalid_Slot_Handle );
+
+ if ( !aglyph )
+ return FT_THROW( Invalid_Argument );
/* create FT_Glyph object */
- error = ft_new_glyph( library, clazz, &glyph );
+ error = FT_New_Glyph( slot->library, slot->format, &glyph );
if ( error )
goto Exit;
@@ -427,7 +435,7 @@
glyph->advance.y = slot->advance.y * 1024;
/* now import the image from the glyph slot */
- error = clazz->glyph_init( glyph, slot );
+ error = glyph->clazz->glyph_init( glyph, slot );
Exit2:
/* if an error occurred, destroy the glyph */
@@ -505,8 +513,8 @@
{
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 );
+ acbox->xMax = FT_PIX_CEIL_LONG( acbox->xMax );
+ acbox->yMax = FT_PIX_CEIL_LONG( acbox->yMax );
}
/* convert to integer pixels if needed */
@@ -536,7 +544,6 @@
FT_BitmapGlyph bitmap = NULL;
const FT_Glyph_Class* clazz;
- /* FT_BITMAP_GLYPH_CLASS_GET dereferences `library' in PIC mode */
FT_Library library;
@@ -553,7 +560,7 @@
goto Bad;
/* when called with a bitmap glyph, do nothing and return successfully */
- if ( clazz == FT_BITMAP_GLYPH_CLASS_GET )
+ if ( clazz == &ft_bitmap_glyph_class )
goto Exit;
if ( !clazz->glyph_prepare )
@@ -569,7 +576,7 @@
dummy.format = clazz->glyph_format;
/* create result bitmap glyph */
- error = ft_new_glyph( library, FT_BITMAP_GLYPH_CLASS_GET, &b );
+ error = ft_new_glyph( library, &ft_bitmap_glyph_class, &b );
if ( error )
goto Exit;
bitmap = (FT_BitmapGlyph)b;
diff --git a/freetype/src/base/ftgxval.c b/freetype/src/base/ftgxval.c
index 19e2d6ac..0677d26f 100644
--- a/freetype/src/base/ftgxval.c
+++ b/freetype/src/base/ftgxval.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftgxval.c */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgxval.c
+ *
+ * FreeType API for validating TrueTypeGX/AAT tables (body).
+ *
+ * Copyright (C) 2004-2019 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>
diff --git a/freetype/src/base/fthash.c b/freetype/src/base/fthash.c
index 21bc8dd5..387e6d26 100644
--- a/freetype/src/base/fthash.c
+++ b/freetype/src/base/fthash.c
@@ -1,10 +1,10 @@
-/***************************************************************************/
-/* */
-/* fthash.c */
-/* */
-/* Hashing functions (body). */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fthash.c
+ *
+ * Hashing functions (body).
+ *
+ */
/*
* Copyright 2000 Computing Research Labs, New Mexico State University
@@ -30,13 +30,13 @@
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
- /*************************************************************************/
- /* */
- /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
- /* */
- /* taken from Mark Leisher's xmbdfed package */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50
+ *
+ * taken from Mark Leisher's xmbdfed package
+ *
+ */
#include <ft2build.h>
diff --git a/freetype/src/base/ftinit.c b/freetype/src/base/ftinit.c
index 1fa47210..c73cd78b 100644
--- a/freetype/src/base/ftinit.c
+++ b/freetype/src/base/ftinit.c
@@ -1,40 +1,40 @@
-/***************************************************************************/
-/* */
-/* ftinit.c */
-/* */
-/* FreeType initialization layer (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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'. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftinit.c
+ *
+ * FreeType initialization layer (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -42,20 +42,16 @@
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_DEBUG_H
#include FT_MODULE_H
-#include "basepic.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_init
-
-
-#ifndef FT_CONFIG_OPTION_PIC
+#define FT_COMPONENT init
#undef FT_USE_MODULE
@@ -78,120 +74,6 @@
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-
-#ifdef __cplusplus
-#define FT_EXTERNC extern "C"
-#else
-#define FT_EXTERNC extern
-#endif
-
- /* declare the module's class creation/destruction functions */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- FT_EXTERNC FT_Error \
- FT_Create_Class_ ## x( FT_Library library, \
- FT_Module_Class* *output_class ); \
- FT_EXTERNC void \
- FT_Destroy_Class_ ## x( FT_Library library, \
- FT_Module_Class* clazz );
-
-#include FT_CONFIG_MODULES_H
-
- /* count all module classes */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x,
-
- enum
- {
-#include FT_CONFIG_MODULES_H
- FT_NUM_MODULE_CLASSES
- };
-
- /* destroy all module classes */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- if ( classes[i] ) \
- { \
- FT_Destroy_Class_ ## x( library, classes[i] ); \
- } \
- i++;
-
-
- FT_BASE_DEF( void )
- ft_destroy_default_module_classes( FT_Library library )
- {
- FT_Module_Class* *classes;
- FT_Memory memory;
- FT_UInt i;
- BasePIC* pic_container = (BasePIC*)library->pic_container.base;
-
-
- if ( !pic_container->default_module_classes )
- return;
-
- memory = library->memory;
- classes = pic_container->default_module_classes;
- i = 0;
-
-#include FT_CONFIG_MODULES_H
-
- FT_FREE( classes );
- pic_container->default_module_classes = NULL;
- }
-
-
- /* initialize all module classes and the pointer table */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- error = FT_Create_Class_ ## x( library, &clazz ); \
- if ( error ) \
- goto Exit; \
- classes[i++] = clazz;
-
-
- FT_BASE_DEF( FT_Error )
- ft_create_default_module_classes( FT_Library library )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Module_Class* *classes = NULL;
- FT_Module_Class* clazz;
- FT_UInt i;
- BasePIC* pic_container = (BasePIC*)library->pic_container.base;
-
-
- memory = library->memory;
-
- pic_container->default_module_classes = NULL;
-
- if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) *
- ( FT_NUM_MODULE_CLASSES + 1 ) ) )
- return error;
-
- /* initialize all pointers to 0, especially the last one */
- for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ )
- classes[i] = NULL;
- classes[FT_NUM_MODULE_CLASSES] = NULL;
-
- i = 0;
-
-#include FT_CONFIG_MODULES_H
-
- Exit:
- if ( error )
- ft_destroy_default_module_classes( library );
- else
- pic_container->default_module_classes = classes;
-
- return error;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
/* documentation is in ftmodapi.h */
FT_EXPORT_DEF( void )
@@ -201,16 +83,10 @@
const FT_Module_Class* const* cur;
- /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !library )
- return;
-#endif
-
/* GCC 4.6 warns the type difference:
* FT_Module_Class** != const FT_Module_Class* const*
*/
- cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET;
+ cur = (const FT_Module_Class* const*)ft_default_modules;
/* test for valid `library' delayed to FT_Add_Module() */
while ( *cur )
@@ -300,6 +176,9 @@
module_name,
property_name,
property_value );
+
+ if ( !*p )
+ break;
}
}
diff --git a/freetype/src/base/ftlcdfil.c b/freetype/src/base/ftlcdfil.c
index 8d314df0..d9f4af42 100644
--- a/freetype/src/base/ftlcdfil.c
+++ b/freetype/src/base/ftlcdfil.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.c */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftlcdfil.c
+ *
+ * FreeType API for color filtering of subpixel bitmap glyphs (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -34,9 +34,9 @@
/* add padding according to filter weights */
FT_BASE_DEF (void)
- ft_lcd_padding( FT_Pos* Min,
- FT_Pos* Max,
- FT_GlyphSlot slot )
+ ft_lcd_padding( FT_BBox* cbox,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode )
{
FT_Byte* lcd_weights;
FT_Bitmap_LcdFilterFunc lcd_filter_func;
@@ -56,10 +56,20 @@
if ( lcd_filter_func == ft_lcd_filter_fir )
{
- *Min -= lcd_weights[0] ? 43 :
- lcd_weights[1] ? 22 : 0;
- *Max += lcd_weights[4] ? 43 :
- lcd_weights[3] ? 22 : 0;
+ if ( mode == FT_RENDER_MODE_LCD )
+ {
+ cbox->xMin -= lcd_weights[0] ? 43 :
+ lcd_weights[1] ? 22 : 0;
+ cbox->xMax += lcd_weights[4] ? 43 :
+ lcd_weights[3] ? 22 : 0;
+ }
+ else if ( mode == FT_RENDER_MODE_LCD_V )
+ {
+ cbox->yMin -= lcd_weights[0] ? 43 :
+ lcd_weights[1] ? 22 : 0;
+ cbox->yMax += lcd_weights[4] ? 43 :
+ lcd_weights[3] ? 22 : 0;
+ }
}
}
@@ -67,13 +77,13 @@
/* FIR filter used by the default and light filters */
FT_BASE_DEF( void )
ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
FT_LcdFiveTapFilter weights )
{
FT_UInt width = (FT_UInt)bitmap->width;
FT_UInt height = (FT_UInt)bitmap->rows;
FT_Int pitch = bitmap->pitch;
FT_Byte* origin = bitmap->buffer;
+ FT_Byte mode = bitmap->pixel_mode;
/* take care of bitmap flow */
@@ -81,7 +91,7 @@
origin += pitch * (FT_Int)( height - 1 );
/* horizontal in-place FIR filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 2 )
+ if ( mode == FT_PIXEL_MODE_LCD && width >= 2 )
{
FT_Byte* line = origin;
@@ -124,7 +134,7 @@
}
/* vertical in-place FIR filter */
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 )
+ else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 2 )
{
FT_Byte* column = origin;
@@ -173,13 +183,13 @@
/* intra-pixel filter used by the legacy filter */
static void
_ft_lcd_filter_legacy( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
FT_Byte* weights )
{
FT_UInt width = (FT_UInt)bitmap->width;
FT_UInt height = (FT_UInt)bitmap->rows;
FT_Int pitch = bitmap->pitch;
FT_Byte* origin = bitmap->buffer;
+ FT_Byte mode = bitmap->pixel_mode;
static const unsigned int filters[3][3] =
{
@@ -196,7 +206,7 @@
origin += pitch * (FT_Int)( height - 1 );
/* horizontal in-place intra-pixel filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
+ if ( mode == FT_PIXEL_MODE_LCD && width >= 3 )
{
FT_Byte* line = origin;
@@ -233,7 +243,7 @@
}
}
}
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 )
+ else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 3 )
{
FT_Byte* column = origin;
@@ -275,6 +285,8 @@
#endif /* USE_LEGACY */
+ /* documentation in ftlcdfil.h */
+
FT_EXPORT_DEF( FT_Error )
FT_Library_SetLcdFilterWeights( FT_Library library,
unsigned char *weights )
@@ -292,6 +304,8 @@
}
+ /* documentation in ftlcdfil.h */
+
FT_EXPORT_DEF( FT_Error )
FT_Library_SetLcdFilter( FT_Library library,
FT_LcdFilter filter )
@@ -341,18 +355,41 @@
return FT_Err_Ok;
}
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Library_SetLcdGeometry( FT_Library library,
+ FT_Vector* sub )
+ {
+ FT_UNUSED( library );
+ FT_UNUSED( sub );
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- /* add padding according to accommodate outline shifts */
+ /* add padding to accommodate outline shifts */
FT_BASE_DEF (void)
- ft_lcd_padding( FT_Pos* Min,
- FT_Pos* Max,
- FT_GlyphSlot slot )
+ ft_lcd_padding( FT_BBox* cbox,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode )
{
- FT_UNUSED( slot );
+ FT_Vector* sub = slot->library->lcd_geometry;
- *Min -= 21;
- *Max += 21;
+ if ( mode == FT_RENDER_MODE_LCD )
+ {
+ cbox->xMin -= FT_MAX( FT_MAX( sub[0].x, sub[1].x ), sub[2].x );
+ cbox->xMax -= FT_MIN( FT_MIN( sub[0].x, sub[1].x ), sub[2].x );
+ cbox->yMin -= FT_MAX( FT_MAX( sub[0].y, sub[1].y ), sub[2].y );
+ cbox->yMax -= FT_MIN( FT_MIN( sub[0].y, sub[1].y ), sub[2].y );
+ }
+ else if ( mode == FT_RENDER_MODE_LCD_V )
+ {
+ cbox->xMin -= FT_MAX( FT_MAX( sub[0].y, sub[1].y ), sub[2].y );
+ cbox->xMax -= FT_MIN( FT_MIN( sub[0].y, sub[1].y ), sub[2].y );
+ cbox->yMin += FT_MIN( FT_MIN( sub[0].x, sub[1].x ), sub[2].x );
+ cbox->yMax += FT_MAX( FT_MAX( sub[0].x, sub[1].x ), sub[2].x );
+ }
}
@@ -377,6 +414,24 @@
return FT_THROW( Unimplemented_Feature );
}
+
+ /* documentation in ftlcdfil.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Library_SetLcdGeometry( FT_Library library,
+ FT_Vector sub[3] )
+ {
+ if ( !library )
+ return FT_THROW( Invalid_Library_Handle );
+
+ if ( !sub )
+ return FT_THROW( Invalid_Argument );
+
+ ft_memcpy( library->lcd_geometry, sub, 3 * sizeof( FT_Vector ) );
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
diff --git a/freetype/src/base/ftmac.c b/freetype/src/base/ftmac.c
index fd4c0cc2..5f23ceea 100644
--- a/freetype/src/base/ftmac.c
+++ b/freetype/src/base/ftmac.c
@@ -1,23 +1,23 @@
-/***************************************************************************/
-/* */
-/* 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-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 1996-2019 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.
+ *
+ */
/*
@@ -954,17 +954,17 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -995,17 +995,18 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
+ /**************************************************************************
+ *
+ * @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,
@@ -1040,16 +1041,17 @@
}
- /*************************************************************************/
- /* */
- /* <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 */
+ /**************************************************************************
+ *
+ * @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,
diff --git a/freetype/src/base/ftmm.c b/freetype/src/base/ftmm.c
index 8e841c07..ba9e67f0 100644
--- a/freetype/src/base/ftmm.c
+++ b/freetype/src/base/ftmm.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftmm.c */
-/* */
-/* Multiple Master font support (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftmm.c
+ *
+ * Multiple Master font support (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -25,14 +25,14 @@
#include FT_SERVICE_METRICS_VARIATIONS_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT mm
static FT_Error
@@ -198,6 +198,7 @@
return error;
}
+
/* documentation is in ftmm.h */
FT_EXPORT_DEF( FT_Error )
@@ -232,9 +233,10 @@
return error;
}
+
FT_EXPORT_DEF( FT_Error )
FT_Get_MM_WeightVector( FT_Face face,
- FT_UInt* len,
+ FT_UInt* len,
FT_Fixed* weightvector )
{
FT_Error error;
diff --git a/freetype/src/base/ftobjs.c b/freetype/src/base/ftobjs.c
index 926943b2..e301f8f1 100644
--- a/freetype/src/base/ftobjs.c
+++ b/freetype/src/base/ftobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftobjs.c */
-/* */
-/* The FreeType private base classes (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftobjs.c
+ *
+ * The FreeType private base classes (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -79,6 +79,18 @@
#pragma warning( pop )
#endif
+ static const char* const pixel_modes[] =
+ {
+ "none",
+ "monochrome bitmap",
+ "gray 8-bit bitmap",
+ "gray 2-bit bitmap",
+ "gray 4-bit bitmap",
+ "LCD 8-bit bitmap",
+ "vertical LCD 8-bit bitmap",
+ "BGRA 32-bit color image bitmap"
+ };
+
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -259,14 +271,14 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
+#define FT_COMPONENT objs
/*************************************************************************/
@@ -330,7 +342,9 @@
}
- FT_BASE_DEF( void )
+ /* overflow-resistant presetting of bitmap position and dimensions; */
+ /* also check whether the size is too large for rendering */
+ FT_BASE_DEF( FT_Bool )
ft_glyphslot_preset_bitmap( FT_GlyphSlot slot,
FT_Render_Mode mode,
const FT_Vector* origin )
@@ -340,15 +354,15 @@
FT_Pixel_Mode pixel_mode;
- FT_BBox cbox;
+ FT_BBox cbox, pbox;
FT_Pos x_shift = 0;
FT_Pos y_shift = 0;
FT_Pos x_left, y_top;
FT_Pos width, height, pitch;
- if ( slot->internal && ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
- return;
+ if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
+ return 1;
if ( origin )
{
@@ -360,70 +374,89 @@
/* taking into account the origin shift */
FT_Outline_Get_CBox( outline, &cbox );
- cbox.xMin += x_shift;
- cbox.yMin += y_shift;
- cbox.xMax += x_shift;
- cbox.yMax += y_shift;
+ /* rough estimate of pixel box */
+ pbox.xMin = ( cbox.xMin >> 6 ) + ( x_shift >> 6 );
+ pbox.yMin = ( cbox.yMin >> 6 ) + ( y_shift >> 6 );
+ pbox.xMax = ( cbox.xMax >> 6 ) + ( x_shift >> 6 );
+ pbox.yMax = ( cbox.yMax >> 6 ) + ( y_shift >> 6 );
+
+ /* tiny remainder box */
+ cbox.xMin = ( cbox.xMin & 63 ) + ( x_shift & 63 );
+ cbox.yMin = ( cbox.yMin & 63 ) + ( y_shift & 63 );
+ cbox.xMax = ( cbox.xMax & 63 ) + ( x_shift & 63 );
+ cbox.yMax = ( cbox.yMax & 63 ) + ( y_shift & 63 );
switch ( mode )
{
case FT_RENDER_MODE_MONO:
pixel_mode = FT_PIXEL_MODE_MONO;
#if 1
- /* undocumented but confirmed: bbox values get rounded */
- /* unless the rounded box can collapse for a narrow glyph */
- if ( cbox.xMax - cbox.xMin < 64 )
+ /* x */
+
+ /* undocumented but confirmed: bbox values get rounded; */
+ /* we do asymmetric rounding so that the center of a pixel */
+ /* gets always included */
+
+ pbox.xMin += ( cbox.xMin + 31 ) >> 6;
+ pbox.xMax += ( cbox.xMax + 32 ) >> 6;
+
+ /* if the bbox collapsed, we add a pixel based on the total */
+ /* rounding remainder to cover most of the original cbox */
+
+ if ( pbox.xMin == pbox.xMax )
{
- cbox.xMin = ( cbox.xMin + cbox.xMax ) / 2 - 32;
- cbox.xMax = cbox.xMin + 64;
+ if ( ( ( cbox.xMin + 31 ) & 63 ) - 31 +
+ ( ( cbox.xMax + 32 ) & 63 ) - 32 < 0 )
+ pbox.xMin -= 1;
+ else
+ pbox.xMax += 1;
}
- cbox.xMin = FT_PIX_ROUND_LONG( cbox.xMin );
- cbox.xMax = FT_PIX_ROUND_LONG( cbox.xMax );
+ /* y */
+
+ pbox.yMin += ( cbox.yMin + 31 ) >> 6;
+ pbox.yMax += ( cbox.yMax + 32 ) >> 6;
- if ( cbox.yMax - cbox.yMin < 64 )
+ if ( pbox.yMin == pbox.yMax )
{
- cbox.yMin = ( cbox.yMin + cbox.yMax ) / 2 - 32;
- cbox.yMax = cbox.yMin + 64;
+ if ( ( ( cbox.yMin + 31 ) & 63 ) - 31 +
+ ( ( cbox.yMax + 32 ) & 63 ) - 32 < 0 )
+ pbox.yMin -= 1;
+ else
+ pbox.yMax += 1;
}
- cbox.yMin = FT_PIX_ROUND_LONG( cbox.yMin );
- cbox.yMax = FT_PIX_ROUND_LONG( cbox.yMax );
-
break;
#else
- goto Round;
+ goto Adjust;
#endif
case FT_RENDER_MODE_LCD:
pixel_mode = FT_PIXEL_MODE_LCD;
- ft_lcd_padding( &cbox.xMin, &cbox.xMax, slot );
- goto Round;
+ ft_lcd_padding( &cbox, slot, mode );
+ goto Adjust;
case FT_RENDER_MODE_LCD_V:
pixel_mode = FT_PIXEL_MODE_LCD_V;
- ft_lcd_padding( &cbox.yMin, &cbox.yMax, slot );
- goto Round;
+ ft_lcd_padding( &cbox, slot, mode );
+ goto Adjust;
case FT_RENDER_MODE_NORMAL:
case FT_RENDER_MODE_LIGHT:
default:
pixel_mode = FT_PIXEL_MODE_GRAY;
- Round:
- cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
- cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
- cbox.xMax = FT_PIX_CEIL_LONG( cbox.xMax );
- cbox.yMax = FT_PIX_CEIL_LONG( cbox.yMax );
+ Adjust:
+ pbox.xMin += cbox.xMin >> 6;
+ pbox.yMin += cbox.yMin >> 6;
+ pbox.xMax += ( cbox.xMax + 63 ) >> 6;
+ pbox.yMax += ( cbox.yMax + 63 ) >> 6;
}
- x_shift = SUB_LONG( x_shift, cbox.xMin );
- y_shift = SUB_LONG( y_shift, cbox.yMin );
+ x_left = pbox.xMin;
+ y_top = pbox.yMax;
- x_left = cbox.xMin >> 6;
- y_top = cbox.yMax >> 6;
-
- width = ( (FT_ULong)cbox.xMax - (FT_ULong)cbox.xMin ) >> 6;
- height = ( (FT_ULong)cbox.yMax - (FT_ULong)cbox.yMin ) >> 6;
+ width = pbox.xMax - pbox.xMin;
+ height = pbox.yMax - pbox.yMin;
switch ( pixel_mode )
{
@@ -453,6 +486,16 @@
bitmap->width = (unsigned int)width;
bitmap->rows = (unsigned int)height;
bitmap->pitch = pitch;
+
+ if ( pbox.xMin < -0x8000 || pbox.xMax > 0x7FFF ||
+ pbox.yMin < -0x8000 || pbox.yMax > 0x7FFF )
+ {
+ FT_TRACE3(( "ft_glyphslot_preset_bitmap: [%ld %ld %ld %ld]\n",
+ pbox.xMin, pbox.yMin, pbox.xMax, pbox.yMax ));
+ return 1;
+ }
+
+ return 0;
}
@@ -801,7 +844,7 @@
* - Do only auto-hinting if we have
*
* - a hinter module,
- * - a scalable font format dealing with outlines,
+ * - a scalable font,
* - not a tricky font, and
* - no transforms except simple slants and/or rotations by
* integer multiples of 90 degrees.
@@ -819,8 +862,7 @@
if ( hinter &&
!( load_flags & FT_LOAD_NO_HINTING ) &&
!( load_flags & FT_LOAD_NO_AUTOHINT ) &&
- FT_DRIVER_IS_SCALABLE( driver ) &&
- FT_DRIVER_USES_OUTLINES( driver ) &&
+ FT_IS_SCALABLE( face ) &&
!FT_IS_TRICKY( face ) &&
( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) ||
( face->internal->transform_matrix.yx == 0 &&
@@ -840,7 +882,7 @@
/* only the new Adobe engine (for both CFF and Type 1) is `light'; */
/* we use `strstr' to catch both `Type 1' and `CID Type 1' */
is_light_type1 =
- ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL &&
+ ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL &&
((PS_Driver)driver)->hinting_engine == FT_HINTING_ADOBE;
/* the check for `num_locations' assures that we actually */
@@ -920,8 +962,9 @@
#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 ) );
+ ft_glyphslot_grid_fit_metrics(
+ slot,
+ FT_BOOL( load_flags & FT_LOAD_VERTICAL_LAYOUT ) );
#endif
}
}
@@ -989,6 +1032,9 @@
}
}
+ slot->glyph_index = glyph_index;
+ slot->internal->load_flags = load_flags;
+
/* do we need to render the image or preset the bitmap now? */
if ( !error &&
( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
@@ -1008,17 +1054,21 @@
ft_glyphslot_preset_bitmap( slot, mode, NULL );
}
- FT_TRACE5(( "FT_Load_Glyph: index %d, flags %x\n",
- glyph_index, load_flags ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE5(( "FT_Load_Glyph: index %d, flags 0x%x\n",
+ glyph_index, load_flags ));
FT_TRACE5(( " x advance: %f\n", slot->advance.x / 64.0 ));
FT_TRACE5(( " y advance: %f\n", slot->advance.y / 64.0 ));
FT_TRACE5(( " linear x advance: %f\n",
slot->linearHoriAdvance / 65536.0 ));
FT_TRACE5(( " linear y advance: %f\n",
slot->linearVertAdvance / 65536.0 ));
- FT_TRACE5(( " bitmap %dx%d, mode %d\n",
- slot->bitmap.width, slot->bitmap.rows,
- slot->bitmap.pixel_mode ));
+ FT_TRACE5(( " bitmap %dx%d, %s (mode %d)\n",
+ slot->bitmap.width,
+ slot->bitmap.rows,
+ pixel_modes[slot->bitmap.pixel_mode],
+ slot->bitmap.pixel_mode ));
+#endif
Exit:
return error;
@@ -1156,20 +1206,20 @@
}
- /*************************************************************************/
- /* */
- /* <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 ). */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -1186,26 +1236,26 @@
return FT_THROW( Invalid_CharMap_Handle );
/*
- * The original TrueType specification(s) only specified charmap
- * formats that are capable of mapping 8 or 16 bit character codes to
- * glyph indices.
+ * 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.
+ * 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:
+ * 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.
+ * - 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.
+ * - 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.
+ * 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 */
@@ -1249,15 +1299,15 @@
}
- /*************************************************************************/
- /* */
- /* <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). */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -1288,14 +1338,14 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* open_face */
- /* */
- /* <Description> */
- /* This function does some work for FT_Open_Face(). */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * open_face
+ *
+ * @Description:
+ * This function does some work for FT_Open_Face().
+ */
static FT_Error
open_face( FT_Driver driver,
FT_Stream *astream,
@@ -2170,13 +2220,13 @@
{
#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
+#define FT_COMPONENT raccess
FT_Memory memory = library->memory;
FT_Error error = FT_ERR( Unknown_File_Format );
FT_UInt i;
- char * file_names[FT_RACCESS_N_RULES];
+ char* file_names[FT_RACCESS_N_RULES];
FT_Long offsets[FT_RACCESS_N_RULES];
FT_Error errors[FT_RACCESS_N_RULES];
FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */
@@ -2248,7 +2298,7 @@
return error;
#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
+#define FT_COMPONENT objs
}
@@ -2276,7 +2326,7 @@
{
#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
+#define FT_COMPONENT raccess
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE3(( "Try as dfont: " ));
@@ -2289,7 +2339,7 @@
FT_TRACE3(( "%s\n", error ? "failed" : "successful" ));
#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
+#define FT_COMPONENT objs
}
@@ -2687,8 +2737,8 @@
/* close the attached stream */
FT_Stream_Free( stream,
- (FT_Bool)( parameters->stream &&
- ( parameters->flags & FT_OPEN_STREAM ) ) );
+ FT_BOOL( parameters->stream &&
+ ( parameters->flags & FT_OPEN_STREAM ) ) );
Exit:
return error;
@@ -3458,7 +3508,8 @@
if ( !face )
return FT_THROW( Invalid_Face_Handle );
- if ( encoding == FT_ENCODING_NONE )
+ /* FT_ENCODING_NONE is a valid encoding for BDF, PCF, and Windows FNT */
+ if ( encoding == FT_ENCODING_NONE && !face->num_charmaps )
return FT_THROW( Invalid_Argument );
/* FT_ENCODING_UNICODE is special. We try to find the `best' Unicode */
@@ -3479,7 +3530,7 @@
if ( cur[0]->encoding == encoding )
{
face->charmap = cur[0];
- return 0;
+ return FT_Err_Ok;
}
}
@@ -3504,14 +3555,12 @@
if ( !cur || !charmap )
return FT_THROW( Invalid_CharMap_Handle );
- if ( FT_Get_CMap_Format( charmap ) == 14 )
- return FT_THROW( Invalid_Argument );
-
limit = cur + face->num_charmaps;
for ( ; cur < limit; cur++ )
{
- if ( cur[0] == charmap )
+ if ( cur[0] == charmap &&
+ FT_Get_CMap_Format ( charmap ) != 14 )
{
face->charmap = cur[0];
return FT_Err_Ok;
@@ -4010,8 +4059,8 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_UInt )
- FT_Get_Name_Index( FT_Face face,
- FT_String* glyph_name )
+ FT_Get_Name_Index( FT_Face face,
+ const FT_String* glyph_name )
{
FT_UInt result = 0;
@@ -4481,16 +4530,89 @@
FT_Render_Mode render_mode )
{
FT_Error error = FT_Err_Ok;
+ FT_Face face = slot->face;
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:
+ if ( slot->internal->load_flags & FT_LOAD_COLOR )
+ {
+ FT_LayerIterator iterator;
+
+ FT_UInt base_glyph = slot->glyph_index;
+
+ FT_Bool have_layers;
+ FT_UInt glyph_index;
+ FT_UInt color_index;
+
+
+ /* check whether we have colored glyph layers */
+ iterator.p = NULL;
+ have_layers = FT_Get_Color_Glyph_Layer( face,
+ base_glyph,
+ &glyph_index,
+ &color_index,
+ &iterator );
+ if ( have_layers )
+ {
+ error = FT_New_GlyphSlot( face, NULL );
+ if ( !error )
+ {
+ TT_Face ttface = (TT_Face)face;
+ SFNT_Service sfnt = (SFNT_Service)ttface->sfnt;
+
+
+ do
+ {
+ FT_Int32 load_flags = slot->internal->load_flags;
+
+
+ /* disable the `FT_LOAD_COLOR' flag to avoid recursion */
+ /* right here in this function */
+ load_flags &= ~FT_LOAD_COLOR;
+
+ /* render into the new `face->glyph' glyph slot */
+ load_flags |= FT_LOAD_RENDER;
+
+ error = FT_Load_Glyph( face, glyph_index, load_flags );
+ if ( error )
+ break;
+
+ /* blend new `face->glyph' into old `slot'; */
+ /* at the first call, `slot' is still empty */
+ error = sfnt->colr_blend( ttface,
+ color_index,
+ slot,
+ face->glyph );
+ if ( error )
+ break;
+
+ } while ( FT_Get_Color_Glyph_Layer( face,
+ base_glyph,
+ &glyph_index,
+ &color_index,
+ &iterator ) );
+
+ if ( !error )
+ slot->format = FT_GLYPH_FORMAT_BITMAP;
+
+ /* this call also restores `slot' as the glyph slot */
+ FT_Done_GlyphSlot( face->glyph );
+ }
+
+ if ( !error )
+ return error;
+
+ /* Failed to do the colored layer. Draw outline instead. */
+ slot->format = FT_GLYPH_FORMAT_OUTLINE;
+ }
+ }
+
{
FT_ListNode node = NULL;
@@ -4526,7 +4648,7 @@
#ifdef FT_DEBUG_LEVEL_TRACE
#undef FT_COMPONENT
-#define FT_COMPONENT trace_bitmap
+#define FT_COMPONENT checksum
/*
* Computing the MD5 checksum is expensive, unnecessarily distorting a
@@ -4536,9 +4658,9 @@
*/
/* we use FT_TRACE3 in this block */
- if ( !error &&
- ft_trace_levels[trace_bitmap] >= 3 &&
- slot->bitmap.buffer )
+ if ( !error &&
+ ft_trace_levels[trace_checksum] >= 3 &&
+ slot->bitmap.buffer )
{
FT_Bitmap bitmap;
FT_Error err;
@@ -4559,8 +4681,11 @@
int pitch = bitmap.pitch;
- FT_TRACE3(( "FT_Render_Glyph: bitmap %dx%d, mode %d\n",
- rows, pitch, slot->bitmap.pixel_mode ));
+ FT_TRACE3(( "FT_Render_Glyph: bitmap %dx%d, %s (mode %d)\n",
+ pitch,
+ rows,
+ pixel_modes[slot->bitmap.pixel_mode],
+ slot->bitmap.pixel_mode ));
for ( i = 0; i < rows; i++ )
for ( j = 0; j < pitch; j++ )
@@ -4588,49 +4713,56 @@
*/
/* we use FT_TRACE7 in this block */
- if ( !error &&
- ft_trace_levels[trace_bitmap] >= 7 &&
- slot->bitmap.rows < 128U &&
- slot->bitmap.width < 128U &&
- slot->bitmap.buffer )
+ if ( !error &&
+ ft_trace_levels[trace_checksum] >= 7 )
{
- int rows = (int)slot->bitmap.rows;
- int width = (int)slot->bitmap.width;
- int pitch = slot->bitmap.pitch;
- int i, j, m;
- unsigned char* topleft = slot->bitmap.buffer;
+ if ( slot->bitmap.rows < 128U &&
+ slot->bitmap.width < 128U &&
+ slot->bitmap.buffer )
+ {
+ int rows = (int)slot->bitmap.rows;
+ int width = (int)slot->bitmap.width;
+ int pitch = slot->bitmap.pitch;
+ int i, j, m;
- if ( pitch < 0 )
- topleft -= pitch * ( rows - 1 );
+ unsigned char* topleft = slot->bitmap.buffer;
- FT_TRACE7(( "Netpbm image: start\n" ));
- switch ( slot->bitmap.pixel_mode )
- {
- case FT_PIXEL_MODE_MONO:
- FT_TRACE7(( "P1 %d %d\n", width, rows ));
- for ( i = 0; i < rows; i++ )
- {
- for ( j = 0; j < width; )
- for ( m = 128; m > 0 && j < width; m >>= 1, j++ )
- FT_TRACE7(( " %d", ( topleft[i * pitch + j / 8] & m ) != 0 ));
- FT_TRACE7(( "\n" ));
- }
- break;
- default:
- FT_TRACE7(( "P2 %d %d 255\n", width, rows ));
- for ( i = 0; i < rows; i++ )
+ if ( pitch < 0 )
+ topleft -= pitch * ( rows - 1 );
+
+ FT_TRACE7(( "Netpbm image: start\n" ));
+ switch ( slot->bitmap.pixel_mode )
{
- for ( j = 0; j < width; j += 1 )
- FT_TRACE7(( " %3u", topleft[i * pitch + j] ));
- FT_TRACE7(( "\n" ));
+ case FT_PIXEL_MODE_MONO:
+ FT_TRACE7(( "P1 %d %d\n", width, rows ));
+ for ( i = 0; i < rows; i++ )
+ {
+ for ( j = 0; j < width; )
+ for ( m = 128; m > 0 && j < width; m >>= 1, j++ )
+ FT_TRACE7(( " %d",
+ ( topleft[i * pitch + j / 8] & m ) != 0 ));
+ FT_TRACE7(( "\n" ));
+ }
+ break;
+
+ default:
+ FT_TRACE7(( "P2 %d %d 255\n", width, rows ));
+ for ( i = 0; i < rows; i++ )
+ {
+ for ( j = 0; j < width; j += 1 )
+ FT_TRACE7(( " %3u", topleft[i * pitch + j] ));
+ FT_TRACE7(( "\n" ));
+ }
}
+ FT_TRACE7(( "Netpbm image: end\n" ));
}
- FT_TRACE7(( "Netpbm image: end\n" ));
+ else
+ FT_TRACE7(( "Netpbm image: too large, omitted\n" ));
}
#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
+#define FT_COMPONENT objs
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -4669,21 +4801,22 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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! */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -5022,9 +5155,9 @@
service = (FT_Service_Properties)interface;
if ( set )
- missing_func = (FT_Bool)( !service->set_property );
+ missing_func = FT_BOOL( !service->set_property );
else
- missing_func = (FT_Bool)( !service->get_property );
+ missing_func = FT_BOOL( !service->get_property );
if ( missing_func )
{
@@ -5150,13 +5283,6 @@
library->memory = memory;
-#ifdef FT_CONFIG_OPTION_PIC
- /* initialize position independent code containers */
- error = ft_pic_container_init( library );
- if ( error )
- goto Fail;
-#endif
-
library->version_major = FREETYPE_MAJOR;
library->version_minor = FREETYPE_MINOR;
library->version_patch = FREETYPE_PATCH;
@@ -5167,13 +5293,6 @@
*alibrary = library;
return FT_Err_Ok;
-
-#ifdef FT_CONFIG_OPTION_PIC
- Fail:
- ft_pic_container_destroy( library );
- FT_FREE( library );
- return error;
-#endif
}
@@ -5231,10 +5350,10 @@
*
* 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
+ * - the cff font driver uses the pshinter module in cff_size_done
+ * - if the pshinter module is destroyed before the cff font driver,
+ * opened FT_Face objects managed by the driver are not properly
+ * destroyed, resulting in a memory leak
*
* Some faces are dependent on other faces, like Type42 faces that
* depend on TrueType faces synthesized internally.
@@ -5304,11 +5423,6 @@
}
#endif
-#ifdef FT_CONFIG_OPTION_PIC
- /* Destroy pic container contents */
- ft_pic_container_destroy( library );
-#endif
-
FT_FREE( library );
Exit:
@@ -5396,4 +5510,41 @@
}
+ /* documentation is in freetype.h */
+
+ FT_EXPORT_DEF( FT_Bool )
+ FT_Get_Color_Glyph_Layer( FT_Face face,
+ FT_UInt base_glyph,
+ FT_UInt *aglyph_index,
+ FT_UInt *acolor_index,
+ FT_LayerIterator* iterator )
+ {
+ TT_Face ttface;
+ SFNT_Service sfnt;
+
+
+ if ( !face ||
+ !aglyph_index ||
+ !acolor_index ||
+ !iterator ||
+ base_glyph >= (FT_UInt)face->num_glyphs )
+ return 0;
+
+ if ( !FT_IS_SFNT( face ) )
+ return 0;
+
+ ttface = (TT_Face)face;
+ sfnt = (SFNT_Service)ttface->sfnt;
+
+ if ( sfnt->get_colr_layer )
+ return sfnt->get_colr_layer( ttface,
+ base_glyph,
+ aglyph_index,
+ acolor_index,
+ iterator );
+ else
+ return 0;
+ }
+
+
/* END */
diff --git a/freetype/src/base/ftotval.c b/freetype/src/base/ftotval.c
index a2944a79..007576ce 100644
--- a/freetype/src/base/ftotval.c
+++ b/freetype/src/base/ftotval.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftotval.c */
-/* */
-/* FreeType API for validating OpenType tables (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftotval.c
+ *
+ * FreeType API for validating OpenType tables (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/base/ftoutln.c b/freetype/src/base/ftoutln.c
index cb91321d..0e2ba347 100644
--- a/freetype/src/base/ftoutln.c
+++ b/freetype/src/base/ftoutln.c
@@ -1,26 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftoutln.c */
-/* */
-/* FreeType outline management (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftoutln.c
+ *
+ * FreeType outline management (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,14 +24,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT outline
static
@@ -53,8 +46,7 @@
void* user )
{
#undef SCALED
-#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << shift ) \
- : ( (x) << shift ) ) - delta )
+#define SCALED( x ) ( (x) * ( 1L << shift ) - delta )
FT_Vector v_last;
FT_Vector v_control;
@@ -296,14 +288,22 @@
}
+ /* documentation is in ftoutln.h */
+
FT_EXPORT_DEF( FT_Error )
- FT_Outline_New_Internal( FT_Memory memory,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline )
+ FT_Outline_New( FT_Library library,
+ FT_UInt numPoints,
+ FT_Int numContours,
+ FT_Outline *anoutline )
{
- FT_Error error;
+ FT_Error error;
+ FT_Memory memory;
+
+ if ( !library )
+ return FT_THROW( Invalid_Library_Handle );
+
+ memory = library->memory;
if ( !anoutline || !memory )
return FT_THROW( Invalid_Argument );
@@ -330,7 +330,7 @@
Fail:
anoutline->flags |= FT_OUTLINE_OWNER;
- FT_Outline_Done_Internal( memory, anoutline );
+ FT_Outline_Done( library, anoutline );
return error;
}
@@ -339,22 +339,6 @@
/* documentation is in ftoutln.h */
FT_EXPORT_DEF( FT_Error )
- FT_Outline_New( FT_Library library,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline )
- {
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- return FT_Outline_New_Internal( library->memory, numPoints,
- numContours, anoutline );
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
FT_Outline_Check( FT_Outline* outline )
{
if ( outline )
@@ -436,13 +420,23 @@
}
+ /* documentation is in ftoutln.h */
+
FT_EXPORT_DEF( FT_Error )
- FT_Outline_Done_Internal( FT_Memory memory,
- FT_Outline* outline )
+ FT_Outline_Done( FT_Library library,
+ FT_Outline* outline )
{
+ FT_Memory memory;
+
+
+ if ( !library )
+ return FT_THROW( Invalid_Library_Handle );
+
if ( !outline )
return FT_THROW( Invalid_Outline );
+ memory = library->memory;
+
if ( !memory )
return FT_THROW( Invalid_Argument );
@@ -460,21 +454,6 @@
/* documentation is in ftoutln.h */
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Done( FT_Library library,
- FT_Outline* outline )
- {
- /* check for valid `outline' in FT_Outline_Done_Internal() */
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- return FT_Outline_Done_Internal( library->memory, outline );
- }
-
-
- /* documentation is in ftoutln.h */
-
FT_EXPORT_DEF( void )
FT_Outline_Get_CBox( const FT_Outline* outline,
FT_BBox *acbox )
@@ -619,6 +598,7 @@
FT_Error error;
FT_Renderer renderer;
FT_ListNode node;
+ FT_BBox cbox;
if ( !library )
@@ -630,11 +610,26 @@
if ( !params )
return FT_THROW( Invalid_Argument );
+ FT_Outline_Get_CBox( outline, &cbox );
+ if ( cbox.xMin < -0x1000000L || cbox.yMin < -0x1000000L ||
+ cbox.xMax > 0x1000000L || cbox.yMax > 0x1000000L )
+ return FT_THROW( Invalid_Outline );
+
renderer = library->cur_renderer;
node = library->renderers.head;
params->source = (void*)outline;
+ /* preset clip_box for direct mode */
+ if ( params->flags & FT_RASTER_FLAG_DIRECT &&
+ !( params->flags & FT_RASTER_FLAG_CLIP ) )
+ {
+ params->clip_box.xMin = cbox.xMin >> 6;
+ params->clip_box.yMin = cbox.yMin >> 6;
+ params->clip_box.xMax = ( cbox.xMax + 63 ) >> 6;
+ params->clip_box.yMax = ( cbox.yMax + 63 ) >> 6;
+ }
+
error = FT_ERR( Cannot_Render_Glyph );
while ( renderer )
{
@@ -911,9 +906,9 @@
FT_Pos xstrength,
FT_Pos ystrength )
{
- FT_Vector* points;
- FT_Int c, first, last;
- FT_Int orientation;
+ FT_Vector* points;
+ FT_Int c, first, last;
+ FT_Orientation orientation;
if ( !outline )
@@ -1044,7 +1039,7 @@
FT_EXPORT_DEF( FT_Orientation )
FT_Outline_Get_Orientation( FT_Outline* outline )
{
- FT_BBox cbox;
+ FT_BBox cbox = { 0, 0, 0, 0 };
FT_Int xshift, yshift;
FT_Vector* points;
FT_Vector v_prev, v_cur;
@@ -1090,7 +1085,8 @@
v_cur.y = points[n].y >> yshift;
area = ADD_LONG( area,
- ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ) );
+ MUL_LONG( v_cur.y - v_prev.y,
+ v_cur.x + v_prev.x ) );
v_prev = v_cur;
}
diff --git a/freetype/src/base/ftpatent.c b/freetype/src/base/ftpatent.c
index e23ee2e3..020f4646 100644
--- a/freetype/src/base/ftpatent.c
+++ b/freetype/src/base/ftpatent.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ftpatent.c */
-/* */
-/* FreeType API for checking patented TrueType bytecode instructions */
-/* (body). Obsolete, retained for backward compatibility. */
-/* */
-/* Copyright 2007-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftpatent.c
+ *
+ * FreeType API for checking patented TrueType bytecode instructions
+ * (body). Obsolete, retained for backward compatibility.
+ *
+ * Copyright (C) 2007-2019 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
diff --git a/freetype/src/base/ftpfr.c b/freetype/src/base/ftpfr.c
index bfe13520..aeff1db8 100644
--- a/freetype/src/base/ftpfr.c
+++ b/freetype/src/base/ftpfr.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftpfr.c */
-/* */
-/* FreeType API for accessing PFR-specific data (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftpfr.c
+ *
+ * FreeType API for accessing PFR-specific data (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/base/ftpic.c b/freetype/src/base/ftpic.c
deleted file mode 100644
index 1492e180..00000000
--- a/freetype/src/base/ftpic.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.c */
-/* */
-/* The FreeType position independent code services (body). */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* documentation is in ftpic.h */
-
- FT_BASE_DEF( FT_Error )
- ft_pic_container_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error;
-
-
- FT_MEM_SET( pic_container, 0, sizeof ( *pic_container ) );
-
- error = ft_base_pic_init( library );
- if ( error )
- return error;
-
- return FT_Err_Ok;
- }
-
-
- /* Destroy the contents of the container. */
- FT_BASE_DEF( void )
- ft_pic_container_destroy( FT_Library library )
- {
- ft_base_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/base/ftpsprop.c b/freetype/src/base/ftpsprop.c
index 459b5e60..52b9d453 100644
--- a/freetype/src/base/ftpsprop.c
+++ b/freetype/src/base/ftpsprop.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ftpsprop.c */
-/* */
-/* Get and set properties of PostScript drivers (body). */
-/* See `ftdriver.h' for available properties. */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftpsprop.c
+ *
+ * Get and set properties of PostScript drivers (body).
+ * See `ftdriver.h' for available properties.
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -25,14 +25,14 @@
#include FT_INTERNAL_POSTSCRIPT_PROPS_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. */
- /* */
+ /**************************************************************************
+ *
+ * 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_psprops
+#define FT_COMPONENT psprops
FT_BASE_CALLBACK_DEF( FT_Error )
diff --git a/freetype/src/base/ftrfork.c b/freetype/src/base/ftrfork.c
index c3a2b915..73b7eb0d 100644
--- a/freetype/src/base/ftrfork.c
+++ b/freetype/src/base/ftrfork.c
@@ -1,38 +1,38 @@
-/***************************************************************************/
-/* */
-/* ftrfork.c */
-/* */
-/* Embedded resource forks accessor (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftrfork.c
+ *
+ * Embedded resource forks accessor (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * Masatake YAMATO and Redhat K.K.
+ *
+ * FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are
+ * derived from ftobjs.c.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+/****************************************************************************
+ * Development of the code in this file is support of
+ * Information-technology Promotion Agency, Japan.
+ */
#include <ft2build.h>
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_RFORK_H
-#include "basepic.h"
+
#include "ftbase.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
+#define FT_COMPONENT raccess
/*************************************************************************/
@@ -438,7 +438,7 @@
static FT_Error
raccess_guess_linux_double_from_file_name( FT_Library library,
- char * file_name,
+ char* file_name,
FT_Long *result_offset );
static char *
@@ -468,10 +468,10 @@
if ( errors[i] )
continue;
- errors[i] = (FT_RACCESS_GUESS_TABLE_GET[i].func)( library,
- stream, base_name,
- &(new_names[i]),
- &(offsets[i]) );
+ errors[i] = ft_raccess_guess_table[i].func( library,
+ stream, base_name,
+ &(new_names[i]),
+ &(offsets[i]) );
}
return;
@@ -488,7 +488,7 @@
if ( rule_index >= FT_RACCESS_N_RULES )
return FT_RFork_Rule_invalid;
- return FT_RACCESS_GUESS_TABLE_GET[rule_index].type;
+ return ft_raccess_guess_table[rule_index].type;
}
@@ -847,7 +847,7 @@
{
FT_Open_Args args2;
FT_Stream stream2;
- char * nouse = NULL;
+ char* nouse = NULL;
FT_Error error;
@@ -909,9 +909,9 @@
#else /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
- /*************************************************************************/
- /* Dummy function; just sets errors */
- /*************************************************************************/
+ /**************************************************************************
+ * Dummy function; just sets errors
+ */
FT_BASE_DEF( void )
FT_Raccess_Guess( FT_Library library,
diff --git a/freetype/src/base/ftsnames.c b/freetype/src/base/ftsnames.c
index 90ea1e2b..7ab3fe3c 100644
--- a/freetype/src/base/ftsnames.c
+++ b/freetype/src/base/ftsnames.c
@@ -1,22 +1,22 @@
-/***************************************************************************/
-/* */
-/* ftsnames.c */
-/* */
-/* Simple interface to access SFNT name tables (which are used */
-/* to hold font names, copyright info, notices, etc.) (body). */
-/* */
-/* This is _not_ used to retrieve glyph names! */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsnames.c
+ *
+ * Simple interface to access SFNT name tables (which are used
+ * to hold font names, copyright info, notices, etc.) (body).
+ *
+ * This is _not_ used to retrieve glyph names!
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -142,7 +142,45 @@
}
-#endif /* TT_CONFIG_OPTION_SFNT_NAMES */
+#else /* !TT_CONFIG_OPTION_SFNT_NAMES */
+
+
+ FT_EXPORT_DEF( FT_UInt )
+ FT_Get_Sfnt_Name_Count( FT_Face face )
+ {
+ FT_UNUSED( face );
+
+ return 0;
+ }
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Sfnt_Name( FT_Face face,
+ FT_UInt idx,
+ FT_SfntName *aname )
+ {
+ FT_UNUSED( face );
+ FT_UNUSED( idx );
+ FT_UNUSED( aname );
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Sfnt_LangTag( FT_Face face,
+ FT_UInt langID,
+ FT_SfntLangTag *alangTag )
+ {
+ FT_UNUSED( face );
+ FT_UNUSED( langID );
+ FT_UNUSED( alangTag );
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+
+#endif /* !TT_CONFIG_OPTION_SFNT_NAMES */
/* END */
diff --git a/freetype/src/base/ftstream.c b/freetype/src/base/ftstream.c
index 18df7dcf..4b0890d7 100644
--- a/freetype/src/base/ftstream.c
+++ b/freetype/src/base/ftstream.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftstream.c */
-/* */
-/* I/O stream support (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftstream.c
+ *
+ * I/O stream support (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -21,14 +21,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT stream
FT_BASE_DEF( void )
@@ -219,13 +219,14 @@
{
FT_Memory memory = stream->memory;
+
#ifdef FT_DEBUG_MEMORY
ft_mem_free( memory, *pbytes );
- *pbytes = NULL;
#else
FT_FREE( *pbytes );
#endif
}
+
*pbytes = NULL;
}
@@ -238,6 +239,8 @@
FT_ULong read_bytes;
+ FT_TRACE7(( "FT_Stream_EnterFrame: %ld bytes\n", count ));
+
/* check for nested frame access */
FT_ASSERT( stream && stream->cursor == 0 );
@@ -281,6 +284,7 @@
FT_FREE( stream->base );
error = FT_THROW( Invalid_Stream_Operation );
}
+
stream->cursor = stream->base;
stream->limit = stream->cursor + count;
stream->pos += read_bytes;
@@ -321,13 +325,16 @@
/* 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_TRACE7(( "FT_Stream_ExitFrame\n" ));
+
FT_ASSERT( stream );
if ( stream->read )
{
FT_Memory memory = stream->memory;
+
#ifdef FT_DEBUG_MEMORY
ft_mem_free( memory, stream->base );
stream->base = NULL;
@@ -335,6 +342,7 @@
FT_FREE( stream->base );
#endif
}
+
stream->cursor = NULL;
stream->limit = NULL;
}
diff --git a/freetype/src/base/ftstroke.c b/freetype/src/base/ftstroke.c
index 6ae18190..1b2c0f65 100644
--- a/freetype/src/base/ftstroke.c
+++ b/freetype/src/base/ftstroke.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftstroke.c */
-/* */
-/* FreeType path stroker (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftstroke.c
+ *
+ * FreeType path stroker (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -24,15 +24,10 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
- /* declare an extern to access `ft_outline_glyph_class' globally */
- /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
- /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
-#ifndef FT_CONFIG_OPTION_PIC
+ /* declare an extern to access `ft_outline_glyph_class' globally */
+ /* allocated in `ftglyph.c' */
FT_CALLBACK_TABLE const FT_Glyph_Class ft_outline_glyph_class;
-#endif
/* documentation is in ftstroke.h */
@@ -91,16 +86,18 @@
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ base[3].x = b >> 1;
+ base[2].x = ( a + b ) >> 2;
+ base[1].x = a >> 1;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ base[3].y = b >> 1;
+ base[2].y = ( a + b ) >> 2;
+ base[1].y = a >> 1;
}
@@ -158,28 +155,32 @@
static void
ft_cubic_split( FT_Vector* base )
{
- FT_Pos a, b, c, d;
+ FT_Pos a, b, c;
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ c = base[2].x + base[3].x;
+ base[5].x = c >> 1;
+ c += b;
+ base[4].x = c >> 2;
+ base[1].x = a >> 1;
+ a += b;
+ base[2].x = a >> 2;
+ base[3].x = ( a + c ) >> 3;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ c = base[2].y + base[3].y;
+ base[5].y = c >> 1;
+ c += b;
+ base[4].y = c >> 2;
+ base[1].y = a >> 1;
+ a += b;
+ base[2].y = a >> 2;
+ base[3].y = ( a + c ) >> 3;
}
@@ -372,6 +373,7 @@
/* it contains the `adjusted' starting coordinates */
border->num_points = --count;
border->points[start] = border->points[count];
+ border->tags[start] = border->tags[count];
if ( reverse )
{
@@ -436,8 +438,8 @@
}
else
{
- /* don't add zero-length lineto */
- if ( border->num_points > 0 &&
+ /* don't add zero-length lineto, but always add moveto */
+ if ( border->num_points > (FT_UInt)border->start &&
FT_IS_SMALL( border->points[border->num_points - 1].x - to->x ) &&
FT_IS_SMALL( border->points[border->num_points - 1].y - to->y ) )
return error;
@@ -2087,8 +2089,8 @@
/* 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.
+ * 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,
@@ -2306,17 +2308,12 @@
FT_Error error = FT_ERR( Invalid_Argument );
FT_Glyph glyph = NULL;
- /* for FT_OUTLINE_GLYPH_CLASS_GET (in PIC mode) */
- FT_Library library = stroker->library;
-
- FT_UNUSED( library );
-
if ( !pglyph )
goto Exit;
glyph = *pglyph;
- if ( !glyph || glyph->clazz != FT_OUTLINE_GLYPH_CLASS_GET )
+ if ( !glyph || glyph->clazz != &ft_outline_glyph_class )
goto Exit;
{
@@ -2386,17 +2383,12 @@
FT_Error error = FT_ERR( Invalid_Argument );
FT_Glyph glyph = NULL;
- /* for FT_OUTLINE_GLYPH_CLASS_GET (in PIC mode) */
- FT_Library library = stroker->library;
-
- FT_UNUSED( library );
-
if ( !pglyph )
goto Exit;
glyph = *pglyph;
- if ( !glyph || glyph->clazz != FT_OUTLINE_GLYPH_CLASS_GET )
+ if ( !glyph || glyph->clazz != &ft_outline_glyph_class )
goto Exit;
{
diff --git a/freetype/src/base/ftsynth.c b/freetype/src/base/ftsynth.c
index c2834670..f87ed65e 100644
--- a/freetype/src/base/ftsynth.c
+++ b/freetype/src/base/ftsynth.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftsynth.c */
-/* */
-/* FreeType synthesizing code for emboldening and slanting (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsynth.c
+ *
+ * FreeType synthesizing code for emboldening and slanting (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -24,14 +24,14 @@
#include FT_BITMAP_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_synth
+#define FT_COMPONENT synth
/*************************************************************************/
diff --git a/freetype/src/base/ftsystem.c b/freetype/src/base/ftsystem.c
index 6adebdb9..f92b3a03 100644
--- a/freetype/src/base/ftsystem.c
+++ b/freetype/src/base/ftsystem.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* ANSI-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftsystem.c
+ *
+ * ANSI-specific FreeType low-level system interface (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -34,37 +34,39 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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 )
@@ -75,26 +77,30 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -108,19 +114,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -131,39 +139,40 @@
}
- /*************************************************************************/
- /* */
- /* RESOURCE MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * RESOURCE MANAGEMENT INTERFACE
+ *
+ */
#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -175,28 +184,32 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_ansi_stream_io */
- /* */
- /* <Description> */
- /* The function to open a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- /* offset :: The position in the data stream to start reading. */
- /* */
- /* buffer :: The address of buffer to store the read data. */
- /* */
- /* count :: The number of bytes to read from the stream. */
- /* */
- /* <Return> */
- /* The number of bytes actually read. If `count' is zero (this is, */
- /* the function is used for seeking), a non-zero return value */
- /* indicates an error. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_ansi_stream_io
+ *
+ * @Description:
+ * The function to open a stream.
+ *
+ * @Input:
+ * stream ::
+ * A pointer to the stream object.
+ *
+ * offset ::
+ * The position in the data stream to start reading.
+ *
+ * buffer ::
+ * The address of buffer to store the read data.
+ *
+ * count ::
+ * The number of bytes to read from the stream.
+ *
+ * @Return:
+ * The number of bytes actually read. If `count' is zero (this is,
+ * the function is used for seeking), a non-zero return value
+ * indicates an error.
+ */
FT_CALLBACK_DEF( unsigned long )
ft_ansi_stream_io( FT_Stream stream,
unsigned long offset,
diff --git a/freetype/src/base/fttrigon.c b/freetype/src/base/fttrigon.c
index d6dd098c..38721977 100644
--- a/freetype/src/base/fttrigon.c
+++ b/freetype/src/base/fttrigon.c
@@ -1,33 +1,33 @@
-/***************************************************************************/
-/* */
-/* fttrigon.c */
-/* */
-/* FreeType trigonometric functions (body). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This is a fixed-point CORDIC implementation of trigonometric */
- /* functions as well as transformations between Cartesian and polar */
- /* coordinates. The angles are represented as 16.16 fixed-point values */
- /* in degrees, i.e., the angular resolution is 2^-16 degrees. Note that */
- /* only vectors longer than 2^16*180/pi (or at least 22 bits) on a */
- /* discrete Cartesian grid can have the same or better angular */
- /* resolution. Therefore, to maintain this precision, some functions */
- /* require an interim upscaling of the vectors, whereas others operate */
- /* with 24-bit long vectors directly. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * fttrigon.c
+ *
+ * FreeType trigonometric functions (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * This is a fixed-point CORDIC implementation of trigonometric
+ * functions as well as transformations between Cartesian and polar
+ * coordinates. The angles are represented as 16.16 fixed-point values
+ * in degrees, i.e., the angular resolution is 2^-16 degrees. Note that
+ * only vectors longer than 2^16*180/pi (or at least 22 bits) on a
+ * discrete Cartesian grid can have the same or better angular
+ * resolution. Therefore, to maintain this precision, some functions
+ * require an interim upscaling of the vectors, whereas others operate
+ * with 24-bit long vectors directly.
+ *
+ */
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
@@ -325,10 +325,10 @@
FT_EXPORT_DEF( FT_Fixed )
FT_Tan( FT_Angle angle )
{
- FT_Vector v;
+ FT_Vector v = { 1 << 24, 0 };
- FT_Vector_Unit( &v, angle );
+ ft_trig_pseudo_rotate( &v, angle );
return FT_DivFix( v.y, v.x );
}
@@ -372,14 +372,6 @@
}
- /* 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 )
@@ -408,8 +400,8 @@
FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
- vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
- vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
+ vec->x = ( v.x + half - ( v.x < 0 ) ) >> shift;
+ vec->y = ( v.y + half - ( v.y < 0 ) ) >> shift;
}
else
{
diff --git a/freetype/src/base/fttype1.c b/freetype/src/base/fttype1.c
index aa8f8ccb..26d4f1c3 100644
--- a/freetype/src/base/fttype1.c
+++ b/freetype/src/base/fttype1.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* fttype1.c */
-/* */
-/* FreeType utility file for PS names support (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * fttype1.c
+ *
+ * FreeType utility file for PS names support (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/ftutil.c b/freetype/src/base/ftutil.c
index 4de5f2c1..92bd857e 100644
--- a/freetype/src/base/ftutil.c
+++ b/freetype/src/base/ftutil.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftutil.c */
-/* */
-/* FreeType utility file for memory and list management (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftutil.c
+ *
+ * FreeType utility file for memory and list management (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -23,14 +23,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT memory
/*************************************************************************/
@@ -54,7 +54,7 @@
FT_Error error;
FT_Pointer block = ft_mem_qalloc( memory, size, &error );
- if ( !error && size > 0 )
+ if ( !error && block && size > 0 )
FT_MEM_ZERO( block, size );
*p_error = error;
@@ -101,7 +101,7 @@
block = ft_mem_qrealloc( memory, item_size,
cur_count, new_count, block, &error );
- if ( !error && new_count > cur_count )
+ if ( !error && block && new_count > cur_count )
FT_MEM_ZERO( (char*)block + cur_count * item_size,
( new_count - cur_count ) * item_size );
@@ -185,7 +185,7 @@
FT_Pointer p = ft_mem_qalloc( memory, (FT_Long)size, &error );
- if ( !error && address )
+ if ( !error && address && size > 0 )
ft_memcpy( p, address, size );
*p_error = error;
@@ -236,7 +236,7 @@
/*************************************************************************/
#undef FT_COMPONENT
-#define FT_COMPONENT trace_list
+#define FT_COMPONENT list
/* documentation is in ftlist.h */
diff --git a/freetype/src/base/ftver.rc b/freetype/src/base/ftver.rc
index a2903d58..13544974 100644
--- a/freetype/src/base/ftver.rc
+++ b/freetype/src/base/ftver.rc
@@ -4,7 +4,7 @@
/* */
/* FreeType VERSIONINFO resource for Windows DLLs. */
/* */
-/* Copyright 2018 by */
+/* Copyright (C) 2018-2019 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,8 +18,8 @@
#include<windows.h>
-#define FT_VERSION 2,9,1,0
-#define FT_VERSION_STR "2.9.1"
+#define FT_VERSION 2,10,1,0
+#define FT_VERSION_STR "2.10.1"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FT_VERSION
@@ -28,7 +28,7 @@ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#endif
-#ifdef _DLL
+#ifdef DLL_EXPORT
FILETYPE VFT_DLL
#define FT_FILENAME "freetype.dll"
#else
@@ -45,7 +45,7 @@ BEGIN
VALUE "FileVersion", FT_VERSION_STR
VALUE "ProductName", "FreeType"
VALUE "ProductVersion", FT_VERSION_STR
- VALUE "LegalCopyright", "\251 2018 The FreeType Project www.freetype.org. All rights reserved."
+ VALUE "LegalCopyright", "\251 2018-2019 The FreeType Project www.freetype.org. All rights reserved."
VALUE "InternalName", "freetype"
VALUE "OriginalFilename", FT_FILENAME
END
diff --git a/freetype/src/base/ftwinfnt.c b/freetype/src/base/ftwinfnt.c
index 11bd28af..59daa770 100644
--- a/freetype/src/base/ftwinfnt.c
+++ b/freetype/src/base/ftwinfnt.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.c */
-/* */
-/* FreeType API for accessing Windows FNT specific info (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftwinfnt.c
+ *
+ * FreeType API for accessing Windows FNT specific info (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/base/rules.mk b/freetype/src/base/rules.mk
index e9805bd0..4b24c6dc 100644
--- a/freetype/src/base/rules.mk
+++ b/freetype/src/base/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -36,17 +36,17 @@ BASE_COMPILE := $(CC) $(ANSIFLAGS) \
# All files listed here should be included in `ftbase.c' (for a `single'
# build).
#
-BASE_SRC := $(BASE_DIR)/basepic.c \
- $(BASE_DIR)/ftadvanc.c \
+BASE_SRC := $(BASE_DIR)/ftadvanc.c \
$(BASE_DIR)/ftcalc.c \
+ $(BASE_DIR)/ftcolor.c \
$(BASE_DIR)/ftdbgmem.c \
+ $(BASE_DIR)/fterrors.c \
$(BASE_DIR)/ftfntfmt.c \
$(BASE_DIR)/ftgloadr.c \
$(BASE_DIR)/fthash.c \
$(BASE_DIR)/ftlcdfil.c \
$(BASE_DIR)/ftobjs.c \
$(BASE_DIR)/ftoutln.c \
- $(BASE_DIR)/ftpic.c \
$(BASE_DIR)/ftpsprop.c \
$(BASE_DIR)/ftrfork.c \
$(BASE_DIR)/ftsnames.c \
@@ -60,8 +60,7 @@ ifneq ($(ftmac_c),)
endif
# for simplicity, we also handle `md5.c' (which gets included by `ftobjs.h')
-BASE_H := $(BASE_DIR)/basepic.h \
- $(BASE_DIR)/ftbase.h \
+BASE_H := $(BASE_DIR)/ftbase.h \
$(BASE_DIR)/md5.c \
$(BASE_DIR)/md5.h
diff --git a/freetype/src/bdf/Jamfile b/freetype/src/bdf/Jamfile
index d9e441c1..a49c7f5d 100644
--- a/freetype/src/bdf/Jamfile
+++ b/freetype/src/bdf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/bdf Jamfile
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/bdf/bdf.h b/freetype/src/bdf/bdf.h
index 9012727c..d9abd237 100644
--- a/freetype/src/bdf/bdf.h
+++ b/freetype/src/bdf/bdf.h
@@ -51,11 +51,11 @@ FT_BEGIN_HEADER
/* end of bdfP.h */
- /*************************************************************************/
- /* */
- /* BDF font options macros and types. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * BDF font options macros and types.
+ *
+ */
#define BDF_CORRECT_METRICS 0x01 /* Correct invalid metrics when loading. */
@@ -93,11 +93,11 @@ FT_BEGIN_HEADER
void* client_data );
- /*************************************************************************/
- /* */
- /* BDF font property macros and types. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * BDF font property macros and types.
+ *
+ */
#define BDF_ATOM 1
@@ -109,9 +109,9 @@ FT_BEGIN_HEADER
/* 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. */
+ const char* name; /* Name of the property. */
+ int format; /* Format of the property. */
+ int builtin; /* A builtin property. */
union
{
char* atom;
@@ -123,11 +123,11 @@ FT_BEGIN_HEADER
} bdf_property_t;
- /*************************************************************************/
- /* */
- /* BDF font metric and glyph types. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * BDF font metric and glyph types.
+ *
+ */
typedef struct bdf_bbx_t_
@@ -147,7 +147,7 @@ FT_BEGIN_HEADER
typedef struct bdf_glyph_t_
{
char* name; /* Glyph name. */
- long encoding; /* Glyph encoding. */
+ unsigned long encoding; /* Glyph encoding. */
unsigned short swidth; /* Scalable width. */
unsigned short dwidth; /* Device width. */
bdf_bbx_t bbx; /* Glyph bounding box. */
@@ -158,20 +158,6 @@ FT_BEGIN_HEADER
} bdf_glyph_t;
- typedef struct bdf_glyphlist_t_
- {
- unsigned short pad; /* Pad to 4-byte boundary. */
- unsigned short bpp; /* Bits per pixel. */
- long start; /* Beginning encoding value of glyphs. */
- long end; /* Ending encoding value of glyphs. */
- bdf_glyph_t* glyphs; /* Glyphs themselves. */
- unsigned long glyphs_size; /* Glyph structures allocated. */
- unsigned long glyphs_used; /* Glyph structures used. */
- bdf_bbx_t bbx; /* Overall bounding box of glyphs. */
-
- } bdf_glyphlist_t;
-
-
typedef struct bdf_font_t_
{
char* name; /* Name of the font. */
@@ -185,7 +171,7 @@ FT_BEGIN_HEADER
unsigned short monowidth; /* Logical width for monowidth font. */
- long default_char; /* Encoding of the default glyph. */
+ unsigned long default_char; /* Encoding of the default glyph. */
long font_ascent; /* Font ascent. */
long font_descent; /* Font descent. */
@@ -205,16 +191,8 @@ FT_BEGIN_HEADER
char* comments; /* Font comments. */
unsigned long comments_len; /* Length of comment string. */
- bdf_glyphlist_t overflow; /* Storage used for glyph insertion. */
-
void* internal; /* Internal data for the font. */
- /* The size of the next two arrays must be in sync with the */
- /* size of the `have' array in the `bdf_parse_t' structure. */
- unsigned long nmod[34816]; /* Bitmap indicating modified glyphs. */
- unsigned long umod[34816]; /* Bitmap indicating modified */
- /* unencoded glyphs. */
- unsigned short modified; /* Boolean indicating font modified. */
unsigned short bpp; /* Bits per pixel. */
FT_Memory memory;
@@ -226,11 +204,11 @@ FT_BEGIN_HEADER
} bdf_font_t;
- /*************************************************************************/
- /* */
- /* Types for load/save callbacks. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Types for load/save callbacks.
+ *
+ */
/* Error codes. */
@@ -247,11 +225,11 @@ FT_BEGIN_HEADER
#define BDF_INVALID_LINE -100
- /*************************************************************************/
- /* */
- /* BDF font API. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * BDF font API.
+ *
+ */
FT_LOCAL( FT_Error )
bdf_load_font( FT_Stream stream,
diff --git a/freetype/src/bdf/bdfdrivr.c b/freetype/src/bdf/bdfdrivr.c
index ca937f89..60eb9330 100644
--- a/freetype/src/bdf/bdfdrivr.c
+++ b/freetype/src/bdf/bdfdrivr.c
@@ -41,14 +41,14 @@ THE SOFTWARE.
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT bdfdriver
typedef struct BDF_CMapRec_
@@ -99,14 +99,17 @@ THE SOFTWARE.
min = 0;
max = cmap->num_encodings;
+ mid = ( min + max ) >> 1;
while ( min < max )
{
FT_ULong code;
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
+ if ( mid >= max || mid < min )
+ mid = ( min + max ) >> 1;
+
+ code = encodings[mid].enc;
if ( charcode == code )
{
@@ -120,6 +123,9 @@ THE SOFTWARE.
max = mid;
else
min = mid + 1;
+
+ /* prediction in a continuous block */
+ mid += charcode - code;
}
return result;
@@ -139,14 +145,17 @@ THE SOFTWARE.
min = 0;
max = cmap->num_encodings;
+ mid = ( min + max ) >> 1;
while ( min < max )
{
FT_ULong code; /* same as BDF_encoding_el.enc */
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
+ if ( mid >= max || mid < min )
+ mid = ( min + max ) >> 1;
+
+ code = encodings[mid].enc;
if ( charcode == code )
{
@@ -160,12 +169,15 @@ THE SOFTWARE.
max = mid;
else
min = mid + 1;
+
+ /* prediction in a continuous block */
+ mid += charcode - code;
}
charcode = 0;
if ( min < cmap->num_encodings )
{
- charcode = (FT_ULong)encodings[min].enc;
+ charcode = encodings[min].enc;
result = encodings[min].glyph + 1;
}
@@ -204,13 +216,13 @@ THE SOFTWARE.
bdf_font_t* font = bdf->bdffont;
bdf_property_t* prop;
- char* strings[4] = { NULL, NULL, NULL, NULL };
- size_t nn, len, lengths[4];
+ const char* strings[4] = { NULL, NULL, NULL, NULL };
+ size_t lengths[4], nn, len;
face->style_flags = 0;
- prop = bdf_get_font_property( font, (char *)"SLANT" );
+ prop = bdf_get_font_property( font, "SLANT" );
if ( prop && prop->format == BDF_ATOM &&
prop->value.atom &&
( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' ||
@@ -218,30 +230,30 @@ THE SOFTWARE.
{
face->style_flags |= FT_STYLE_FLAG_ITALIC;
strings[2] = ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' )
- ? (char *)"Oblique"
- : (char *)"Italic";
+ ? "Oblique"
+ : "Italic";
}
- prop = bdf_get_font_property( font, (char *)"WEIGHT_NAME" );
+ prop = bdf_get_font_property( font, "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";
+ strings[1] = "Bold";
}
- prop = bdf_get_font_property( font, (char *)"SETWIDTH_NAME" );
+ prop = bdf_get_font_property( font, "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);
+ strings[3] = (const char *)(prop->value.atom);
- prop = bdf_get_font_property( font, (char *)"ADD_STYLE_NAME" );
+ prop = bdf_get_font_property( font, "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);
+ strings[0] = (const char *)(prop->value.atom);
for ( len = 0, nn = 0; nn < 4; nn++ )
{
@@ -255,7 +267,7 @@ THE SOFTWARE.
if ( len == 0 )
{
- strings[0] = (char *)"Regular";
+ strings[0] = "Regular";
lengths[0] = ft_strlen( strings[0] );
len = lengths[0] + 1;
}
@@ -271,7 +283,7 @@ THE SOFTWARE.
for ( nn = 0; nn < 4; nn++ )
{
- char* src = strings[nn];
+ const char* src = strings[nn];
len = lengths[nn];
@@ -401,8 +413,7 @@ THE SOFTWARE.
bdfface->face_index = 0;
bdfface->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_FAST_GLYPHS;
+ FT_FACE_FLAG_HORIZONTAL;
prop = bdf_get_font_property( font, "SPACING" );
if ( prop && prop->format == BDF_ATOM &&
@@ -863,7 +874,7 @@ THE SOFTWARE.
/*
*
- * BDF SERVICE
+ * BDF SERVICE
*
*/
@@ -939,7 +950,7 @@ THE SOFTWARE.
/*
*
- * SERVICES LIST
+ * SERVICES LIST
*
*/
diff --git a/freetype/src/bdf/bdfdrivr.h b/freetype/src/bdf/bdfdrivr.h
index 94550818..b37b84ea 100644
--- a/freetype/src/bdf/bdfdrivr.h
+++ b/freetype/src/bdf/bdfdrivr.h
@@ -36,14 +36,10 @@ THE SOFTWARE.
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
typedef struct BDF_encoding_el_
{
- FT_Long enc;
+ FT_ULong enc;
FT_UShort glyph;
} BDF_encoding_el;
@@ -60,9 +56,6 @@ FT_BEGIN_HEADER
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;
diff --git a/freetype/src/bdf/bdferror.h b/freetype/src/bdf/bdferror.h
index b462c7d3..dbe41c02 100644
--- a/freetype/src/bdf/bdferror.h
+++ b/freetype/src/bdf/bdferror.h
@@ -20,11 +20,11 @@
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
- /*************************************************************************/
- /* */
- /* This file is used to define the BDF error enumeration constants. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * This file is used to define the BDF error enumeration constants.
+ *
+ */
#ifndef BDFERROR_H_
#define BDFERROR_H_
diff --git a/freetype/src/bdf/bdflib.c b/freetype/src/bdf/bdflib.c
index 2f5c99d5..63813f7e 100644
--- a/freetype/src/bdf/bdflib.c
+++ b/freetype/src/bdf/bdflib.c
@@ -22,13 +22,13 @@
* 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 */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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>
@@ -42,21 +42,21 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT bdflib
- /*************************************************************************/
- /* */
- /* Default BDF font options. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Default BDF font options.
+ *
+ */
static const bdf_options_t _bdf_opts =
@@ -68,100 +68,100 @@
};
- /*************************************************************************/
- /* */
- /* Builtin BDF font properties. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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 } },
+ { "ADD_STYLE_NAME", BDF_ATOM, 1, { 0 } },
+ { "AVERAGE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "AVG_CAPITAL_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "AVG_LOWERCASE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "CAP_HEIGHT", BDF_INTEGER, 1, { 0 } },
+ { "CHARSET_COLLECTIONS", BDF_ATOM, 1, { 0 } },
+ { "CHARSET_ENCODING", BDF_ATOM, 1, { 0 } },
+ { "CHARSET_REGISTRY", BDF_ATOM, 1, { 0 } },
+ { "COMMENT", BDF_ATOM, 1, { 0 } },
+ { "COPYRIGHT", BDF_ATOM, 1, { 0 } },
+ { "DEFAULT_CHAR", BDF_CARDINAL, 1, { 0 } },
+ { "DESTINATION", BDF_CARDINAL, 1, { 0 } },
+ { "DEVICE_FONT_NAME", BDF_ATOM, 1, { 0 } },
+ { "END_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "FACE_NAME", BDF_ATOM, 1, { 0 } },
+ { "FAMILY_NAME", BDF_ATOM, 1, { 0 } },
+ { "FIGURE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "FONT", BDF_ATOM, 1, { 0 } },
+ { "FONTNAME_REGISTRY", BDF_ATOM, 1, { 0 } },
+ { "FONT_ASCENT", BDF_INTEGER, 1, { 0 } },
+ { "FONT_DESCENT", BDF_INTEGER, 1, { 0 } },
+ { "FOUNDRY", BDF_ATOM, 1, { 0 } },
+ { "FULL_NAME", BDF_ATOM, 1, { 0 } },
+ { "ITALIC_ANGLE", BDF_INTEGER, 1, { 0 } },
+ { "MAX_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "MIN_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "NORM_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "NOTICE", BDF_ATOM, 1, { 0 } },
+ { "PIXEL_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "POINT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "QUAD_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_ASCENT", BDF_INTEGER, 1, { 0 } },
+ { "RAW_AVERAGE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_AVG_CAPITAL_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_AVG_LOWERCASE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_CAP_HEIGHT", BDF_INTEGER, 1, { 0 } },
+ { "RAW_DESCENT", BDF_INTEGER, 1, { 0 } },
+ { "RAW_END_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_FIGURE_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_MAX_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_MIN_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_NORM_SPACE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_PIXEL_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_POINT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_PIXELSIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_POINTSIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_QUAD_WIDTH", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SMALL_CAP_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_STRIKEOUT_ASCENT", BDF_INTEGER, 1, { 0 } },
+ { "RAW_STRIKEOUT_DESCENT", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUBSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUBSCRIPT_X", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUBSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUPERSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUPERSCRIPT_X", BDF_INTEGER, 1, { 0 } },
+ { "RAW_SUPERSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
+ { "RAW_UNDERLINE_POSITION", BDF_INTEGER, 1, { 0 } },
+ { "RAW_UNDERLINE_THICKNESS", BDF_INTEGER, 1, { 0 } },
+ { "RAW_X_HEIGHT", BDF_INTEGER, 1, { 0 } },
+ { "RELATIVE_SETWIDTH", BDF_CARDINAL, 1, { 0 } },
+ { "RELATIVE_WEIGHT", BDF_CARDINAL, 1, { 0 } },
+ { "RESOLUTION", BDF_INTEGER, 1, { 0 } },
+ { "RESOLUTION_X", BDF_CARDINAL, 1, { 0 } },
+ { "RESOLUTION_Y", BDF_CARDINAL, 1, { 0 } },
+ { "SETWIDTH_NAME", BDF_ATOM, 1, { 0 } },
+ { "SLANT", BDF_ATOM, 1, { 0 } },
+ { "SMALL_CAP_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "SPACING", BDF_ATOM, 1, { 0 } },
+ { "STRIKEOUT_ASCENT", BDF_INTEGER, 1, { 0 } },
+ { "STRIKEOUT_DESCENT", BDF_INTEGER, 1, { 0 } },
+ { "SUBSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "SUBSCRIPT_X", BDF_INTEGER, 1, { 0 } },
+ { "SUBSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
+ { "SUPERSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
+ { "SUPERSCRIPT_X", BDF_INTEGER, 1, { 0 } },
+ { "SUPERSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
+ { "UNDERLINE_POSITION", BDF_INTEGER, 1, { 0 } },
+ { "UNDERLINE_THICKNESS", BDF_INTEGER, 1, { 0 } },
+ { "WEIGHT", BDF_CARDINAL, 1, { 0 } },
+ { "WEIGHT_NAME", BDF_ATOM, 1, { 0 } },
+ { "X_HEIGHT", BDF_INTEGER, 1, { 0 } },
+ { "_MULE_BASELINE_OFFSET", BDF_INTEGER, 1, { 0 } },
+ { "_MULE_RELATIVE_COMPOSE", BDF_INTEGER, 1, { 0 } },
};
static const unsigned long
@@ -196,11 +196,10 @@
#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 ACMSG13 "Glyph %lu extra rows removed.\n"
+#define ACMSG14 "Glyph %lu extra columns removed.\n"
#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
-#define ACMSG16 "Glyph %ld missing columns padded with zero bits.\n"
+#define ACMSG16 "Glyph %lu missing columns padded with zero bits.\n"
#define ACMSG17 "Adjusting number of glyphs to %ld.\n"
/* Error messages. */
@@ -219,11 +218,11 @@
#define DBGMSG2 " (0x%lX)\n"
- /*************************************************************************/
- /* */
- /* Utility types and functions. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Utility types and functions.
+ *
+ */
/* Function type for parsing lines of a BDF font. */
@@ -270,8 +269,6 @@
bdf_font_t* font;
bdf_options_t* opts;
- unsigned long have[34816]; /* must be in sync with `nmod' and `umod' */
- /* arrays from `bdf_font_t' structure */
_bdf_list_t list;
FT_Memory memory;
@@ -367,7 +364,7 @@
/* An empty string for empty fields. */
- static const char empty[1] = { 0 }; /* XXX eliminate this */
+ static const char empty[] = ""; /* XXX eliminate this */
static char *
@@ -410,13 +407,14 @@
static FT_Error
_bdf_list_split( _bdf_list_t* list,
- char* separators,
+ const char* separators,
char* line,
unsigned long linelen )
{
unsigned long final_empty;
int mult;
- char *sp, *ep, *end;
+ const char *sp, *end;
+ char *ep;
char seps[32];
FT_Error error = FT_Err_Ok;
@@ -476,7 +474,7 @@
}
/* Assign the field appropriately. */
- list->field[list->used++] = ( ep > sp ) ? sp : (char*)empty;
+ list->field[list->used++] = ( ep > sp ) ? (char*)sp : (char*)empty;
sp = ep;
@@ -695,7 +693,7 @@
/* Routine to convert a decimal ASCII string to an unsigned long integer. */
static unsigned long
- _bdf_atoul( char* s )
+ _bdf_atoul( const char* s )
{
unsigned long v;
@@ -720,7 +718,7 @@
/* Routine to convert a decimal ASCII string to a signed long integer. */
static long
- _bdf_atol( char* s )
+ _bdf_atol( const char* s )
{
long v, neg;
@@ -753,7 +751,7 @@
/* Routine to convert a decimal ASCII string to an unsigned short integer. */
static unsigned short
- _bdf_atous( char* s )
+ _bdf_atous( const char* s )
{
unsigned short v;
@@ -778,7 +776,7 @@
/* Routine to convert a decimal ASCII string to a signed short integer. */
static short
- _bdf_atos( char* s )
+ _bdf_atos( const char* s )
{
short v, neg;
@@ -831,7 +829,7 @@
static FT_Error
- bdf_create_property( char* name,
+ bdf_create_property( const char* name,
int format,
bdf_font_t* font )
{
@@ -900,11 +898,11 @@
}
- /*************************************************************************/
- /* */
- /* BDF font file parsing flags and functions. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * BDF font file parsing flags and functions.
+ *
+ */
/* Parse flags. */
@@ -1001,7 +999,7 @@
FT_MEM_COPY( name, font->name, len );
- error = _bdf_list_split( &list, (char *)"-", name, (unsigned long)len );
+ error = _bdf_list_split( &list, "-", name, (unsigned long)len );
if ( error )
goto Fail;
@@ -1100,7 +1098,7 @@
static FT_Error
_bdf_add_property( bdf_font_t* font,
- char* name,
+ const char* name,
char* value,
unsigned long lineno )
{
@@ -1232,7 +1230,7 @@
/* present, and the SPACING property should override the default */
/* spacing. */
if ( _bdf_strncmp( name, "DEFAULT_CHAR", 12 ) == 0 )
- font->default_char = fp->value.l;
+ font->default_char = fp->value.ul;
else if ( _bdf_strncmp( name, "FONT_ASCENT", 11 ) == 0 )
font->font_ascent = fp->value.l;
else if ( _bdf_strncmp( name, "FONT_DESCENT", 12 ) == 0 )
@@ -1265,6 +1263,25 @@
};
+ static FT_Error
+ _bdf_parse_end( char* line,
+ unsigned long linelen,
+ unsigned long lineno,
+ void* call_data,
+ void* client_data )
+ {
+ /* a no-op; we ignore everything after `ENDFONT' */
+
+ FT_UNUSED( line );
+ FT_UNUSED( linelen );
+ FT_UNUSED( lineno );
+ FT_UNUSED( call_data );
+ FT_UNUSED( client_data );
+
+ return FT_Err_Ok;
+ }
+
+
/* Actually parse the glyph info and bitmaps. */
static FT_Error
_bdf_parse_glyphs( char* line,
@@ -1278,6 +1295,7 @@
unsigned char* bp;
unsigned long i, slen, nibbles;
+ _bdf_line_func_t* next;
_bdf_parse_t* p;
bdf_glyph_t* glyph;
bdf_font_t* font;
@@ -1285,11 +1303,11 @@
FT_Memory memory;
FT_Error error = FT_Err_Ok;
- FT_UNUSED( call_data );
FT_UNUSED( lineno ); /* only used in debug mode */
- p = (_bdf_parse_t *)client_data;
+ next = (_bdf_line_func_t *)call_data;
+ p = (_bdf_parse_t *) client_data;
font = p->font;
memory = font->memory;
@@ -1319,7 +1337,7 @@
goto Exit;
}
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1] );
@@ -1370,6 +1388,7 @@
by_encoding );
p->flags &= ~BDF_START_;
+ *next = _bdf_parse_end;
goto Exit;
}
@@ -1405,7 +1424,7 @@
/* encoding can be checked for an unencoded character. */
FT_FREE( p->glyph_name );
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -1443,7 +1462,7 @@
goto Exit;
}
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -1458,40 +1477,11 @@
if ( p->glyph_enc == -1 && p->list.used > 2 )
p->glyph_enc = _bdf_atol( p->list.field[2] );
- if ( p->glyph_enc < -1 )
+ if ( p->glyph_enc < -1 || p->glyph_enc >= 0x110000L )
p->glyph_enc = -1;
FT_TRACE4(( DBGMSG2, p->glyph_enc ));
- /* Check that the encoding is in the Unicode range because */
- /* otherwise p->have (a bitmap with static size) overflows. */
- if ( p->glyph_enc > 0 &&
- (size_t)p->glyph_enc >= sizeof ( p->have ) /
- sizeof ( unsigned long ) * 32 )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "ENCODING" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Check whether this encoding has already been encountered. */
- /* If it has then change it to unencoded so it gets added if */
- /* indicated. */
- if ( p->glyph_enc >= 0 )
- {
- if ( _bdf_glyph_modified( p->have, p->glyph_enc ) )
- {
- /* Emit a message saying a glyph has been moved to the */
- /* unencoded area. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG12,
- p->glyph_enc, p->glyph_name ));
- p->glyph_enc = -1;
- font->modified = 1;
- }
- else
- _bdf_set_glyph_modified( p->have, p->glyph_enc );
- }
-
if ( p->glyph_enc >= 0 )
{
/* Make sure there are enough glyphs allocated in case the */
@@ -1508,7 +1498,7 @@
glyph = font->glyphs + font->glyphs_used++;
glyph->name = p->glyph_name;
- glyph->encoding = p->glyph_enc;
+ glyph->encoding = (unsigned long)p->glyph_enc;
/* Reset the initial glyph info. */
p->glyph_name = NULL;
@@ -1532,7 +1522,7 @@
glyph = font->unencoded + font->unencoded_used;
glyph->name = p->glyph_name;
- glyph->encoding = (long)font->unencoded_used++;
+ glyph->encoding = font->unencoded_used++;
/* Reset the initial glyph info. */
p->glyph_name = NULL;
@@ -1556,6 +1546,9 @@
goto Exit;
}
+ if ( !( p->flags & BDF_ENCODING_ ) )
+ goto Missing_Encoding;
+
/* Point at the glyph being constructed. */
if ( p->glyph_enc == -1 )
glyph = font->unencoded + ( font->unencoded_used - 1 );
@@ -1573,7 +1566,6 @@
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG13, glyph->encoding ));
p->flags |= BDF_GLYPH_HEIGHT_CHECK_;
- font->modified = 1;
}
goto Exit;
@@ -1601,7 +1593,6 @@
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
p->flags |= BDF_GLYPH_WIDTH_CHECK_;
- font->modified = 1;
}
/* Remove possible garbage at the right. */
@@ -1616,7 +1607,6 @@
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
p->flags |= BDF_GLYPH_WIDTH_CHECK_;
- font->modified = 1;
}
p->row++;
@@ -1626,10 +1616,7 @@
/* Expect the SWIDTH (scalable width) field next. */
if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 )
{
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -1642,10 +1629,7 @@
/* Expect the DWIDTH (scalable width) field next. */
if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
{
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -1670,10 +1654,7 @@
/* Expect the BBX field next. */
if ( _bdf_strncmp( line, "BBX", 3 ) == 0 )
{
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -1720,14 +1701,7 @@
{
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;
}
}
@@ -1823,26 +1797,24 @@
{
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",
+ error = _bdf_add_property( p->font, "FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
- p->font->modified = 1;
}
if ( bdf_get_font_property( p->font, "FONT_DESCENT" ) == 0 )
{
p->font->font_descent = p->font->bbx.descent;
ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
- error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
+ error = _bdf_add_property( p->font, "FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
- p->font->modified = 1;
}
p->flags &= ~BDF_PROPS_;
@@ -1875,7 +1847,7 @@
}
else
{
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
name = p->list.field[0];
@@ -1989,7 +1961,7 @@
if ( error )
goto Exit;
p->font->spacing = p->opts->font_spacing;
- p->font->default_char = -1;
+ p->font->default_char = ~0UL;
goto Exit;
}
@@ -2005,7 +1977,7 @@
goto Exit;
}
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -2044,7 +2016,7 @@
goto Exit;
}
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -2067,7 +2039,7 @@
/* The next thing to check for is the FONT field. */
if ( _bdf_strncmp( line, "FONT", 4 ) == 0 )
{
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
_bdf_list_shift( &p->list, 1 );
@@ -2110,7 +2082,7 @@
goto Exit;
}
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+ error = _bdf_list_split( &p->list, " +", line, linelen );
if ( error )
goto Exit;
@@ -2165,7 +2137,7 @@
/* for compiling fonts. */
p->font->font_ascent = p->font->bbx.ascent;
ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
- error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
+ error = _bdf_add_property( p->font, "FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
@@ -2173,14 +2145,12 @@
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",
+ error = _bdf_add_property( p->font, "FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
- p->font->modified = 1;
-
*next = _bdf_parse_glyphs;
/* A special return value. */
@@ -2196,11 +2166,11 @@
}
- /*************************************************************************/
- /* */
- /* API. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * API.
+ *
+ */
FT_LOCAL_DEF( FT_Error )
@@ -2246,7 +2216,6 @@
{
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 */
@@ -2259,7 +2228,6 @@
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 )
@@ -2267,7 +2235,6 @@
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 )
@@ -2275,7 +2242,6 @@
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 )
@@ -2284,7 +2250,6 @@
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 )
@@ -2415,16 +2380,6 @@
FT_FREE( font->glyphs );
FT_FREE( font->unencoded );
- /* Free up the overflow storage if it was used. */
- for ( i = 0, glyphs = font->overflow.glyphs;
- i < font->overflow.glyphs_used; i++, glyphs++ )
- {
- FT_FREE( glyphs->name );
- FT_FREE( glyphs->bitmap );
- }
-
- FT_FREE( font->overflow.glyphs );
-
/* bdf_cleanup */
ft_hash_str_free( &(font->proptbl), memory );
diff --git a/freetype/src/bzip2/Jamfile b/freetype/src/bzip2/Jamfile
index 3548eab5..4b77916a 100644
--- a/freetype/src/bzip2/Jamfile
+++ b/freetype/src/bzip2/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/bzip2 Jamfile
#
-# Copyright 2010-2018 by
+# Copyright (C) 2010-2019 by
# Joel Klinghed
#
# based on `src/lzw/Jamfile'
diff --git a/freetype/src/bzip2/ftbzip2.c b/freetype/src/bzip2/ftbzip2.c
index 16019485..1fda59b6 100644
--- a/freetype/src/bzip2/ftbzip2.c
+++ b/freetype/src/bzip2/ftbzip2.c
@@ -1,25 +1,25 @@
-/***************************************************************************/
-/* */
-/* ftbzip2.c */
-/* */
-/* FreeType support for .bz2 compressed files. */
-/* */
-/* This optional component relies on libbz2. It should mainly be used to */
-/* parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2010-2018 by */
-/* Joel Klinghed. */
-/* */
-/* based on `src/gzip/ftgzip.c' */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftbzip2.c
+ *
+ * FreeType support for .bz2 compressed files.
+ *
+ * This optional component relies on libbz2. It should mainly be used to
+ * parse compressed PCF fonts, as found with many X11 server
+ * distributions.
+ *
+ * Copyright (C) 2010-2019 by
+ * Joel Klinghed.
+ *
+ * based on `src/gzip/ftgzip.c'
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
@@ -43,10 +43,6 @@
#ifdef FT_CONFIG_OPTION_USE_BZIP2
-#ifdef FT_CONFIG_OPTION_PIC
-#error "bzip2 code does not support PIC yet"
-#endif
-
#define BZ_NO_STDIO /* Do not need FILE */
#include <bzlib.h>
@@ -475,8 +471,8 @@
memory = source->memory;
/*
- * check the header right now; this prevents allocating unnecessary
- * objects when we don't need them
+ * check the header right now; this prevents allocating unnecessary
+ * objects when we don't need them
*/
error = ft_bzip2_check_header( source );
if ( error )
diff --git a/freetype/src/bzip2/rules.mk b/freetype/src/bzip2/rules.mk
index 95954d75..f365c1f7 100644
--- a/freetype/src/bzip2/rules.mk
+++ b/freetype/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
# FreeType 2 BZIP2 support configuration rules
#
-# Copyright 2010-2018 by
+# Copyright (C) 2010-2019 by
# Joel Klinghed.
#
# based on `src/lzw/rules.mk'
diff --git a/freetype/src/cache/Jamfile b/freetype/src/cache/Jamfile
index 53f4c7b6..51f7196d 100644
--- a/freetype/src/cache/Jamfile
+++ b/freetype/src/cache/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cache Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cache/ftcache.c b/freetype/src/cache/ftcache.c
index 1b425af9..a6a3e63e 100644
--- a/freetype/src/cache/ftcache.c
+++ b/freetype/src/cache/ftcache.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcache.c */
-/* */
-/* The FreeType Caching sub-system (body only). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcache.c
+ *
+ * The FreeType Caching sub-system (body only).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/cache/ftcbasic.c b/freetype/src/cache/ftcbasic.c
index 994aa122..a473585e 100644
--- a/freetype/src/cache/ftcbasic.c
+++ b/freetype/src/cache/ftcbasic.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcbasic.c */
-/* */
-/* The FreeType basic cache interface (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcbasic.c
+ *
+ * The FreeType basic cache interface (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -27,11 +27,11 @@
#include "ftccback.h"
#include "ftcerror.h"
-#define FT_COMPONENT trace_cache
+#define FT_COMPONENT cache
/*
- * Basic Families
+ * Basic Families
*
*/
typedef struct FTC_BasicAttrRec_
diff --git a/freetype/src/cache/ftccache.c b/freetype/src/cache/ftccache.c
index 12ec585a..f38ca44d 100644
--- a/freetype/src/cache/ftccache.c
+++ b/freetype/src/cache/ftccache.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftccache.c */
-/* */
-/* The FreeType internal cache interface (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftccache.c
+ *
+ * The FreeType internal cache interface (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -25,7 +25,7 @@
#include "ftcerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
+#define FT_COMPONENT cache
#define FTC_HASH_MAX_LOAD 2
diff --git a/freetype/src/cache/ftccache.h b/freetype/src/cache/ftccache.h
index 859c547e..140ceadb 100644
--- a/freetype/src/cache/ftccache.h
+++ b/freetype/src/cache/ftccache.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftccache.h */
-/* */
-/* FreeType internal cache interface (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftccache.h
+ *
+ * FreeType internal cache interface (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -42,17 +42,17 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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_
@@ -302,11 +302,11 @@ FT_BEGIN_HEADER
*
* Example:
*
- * {
- * FTC_CACHE_TRYLOOP( cache )
- * error = load_data( ... );
- * FTC_CACHE_TRYLOOP_END()
- * }
+ * {
+ * FTC_CACHE_TRYLOOP( cache )
+ * error = load_data( ... );
+ * FTC_CACHE_TRYLOOP_END()
+ * }
*
*/
#define FTC_CACHE_TRYLOOP( cache ) \
diff --git a/freetype/src/cache/ftccback.h b/freetype/src/cache/ftccback.h
index e51d8d6e..9321bc3d 100644
--- a/freetype/src/cache/ftccback.h
+++ b/freetype/src/cache/ftccback.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftccback.h */
-/* */
-/* Callback functions of the caching sub-system (specification only). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftccback.h
+ *
+ * Callback functions of the caching sub-system (specification only).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cache/ftccmap.c b/freetype/src/cache/ftccmap.c
index d20b0f48..76ba10e3 100644
--- a/freetype/src/cache/ftccmap.c
+++ b/freetype/src/cache/ftccmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftccmap.c */
-/* */
-/* FreeType CharMap cache (body) */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftccmap.c
+ *
+ * FreeType CharMap cache (body)
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -28,21 +28,21 @@
#include "ftcerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
- /*************************************************************************/
- /* */
- /* Each FTC_CMapNode contains a simple array to map a range of character */
- /* codes to equivalent glyph indices. */
- /* */
- /* For now, the implementation is very basic: Each node maps a range of */
- /* 128 consecutive character codes to their corresponding glyph indices. */
- /* */
- /* We could do more complex things, but I don't think it is really very */
- /* useful. */
- /* */
- /*************************************************************************/
+#define FT_COMPONENT cache
+
+
+ /**************************************************************************
+ *
+ * Each FTC_CMapNode contains a simple array to map a range of character
+ * codes to equivalent glyph indices.
+ *
+ * For now, the implementation is very basic: Each node maps a range of
+ * 128 consecutive character codes to their corresponding glyph indices.
+ *
+ * We could do more complex things, but I don't think it is really very
+ * useful.
+ *
+ */
/* number of glyph indices / character code per node */
diff --git a/freetype/src/cache/ftcerror.h b/freetype/src/cache/ftcerror.h
index a26cd593..e2d64171 100644
--- a/freetype/src/cache/ftcerror.h
+++ b/freetype/src/cache/ftcerror.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* ftcerror.h */
-/* */
-/* Caching sub-system error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftcerror.h
+ *
+ * Caching sub-system error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/cache/ftcglyph.c b/freetype/src/cache/ftcglyph.c
index 782cc0ed..2a0e97d4 100644
--- a/freetype/src/cache/ftcglyph.c
+++ b/freetype/src/cache/ftcglyph.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.c */
-/* */
-/* FreeType Glyph Image (FT_Glyph) cache (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcglyph.c
+ *
+ * FreeType Glyph Image (FT_Glyph) cache (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/cache/ftcglyph.h b/freetype/src/cache/ftcglyph.h
index 23c24d22..5a1f0e2a 100644
--- a/freetype/src/cache/ftcglyph.h
+++ b/freetype/src/cache/ftcglyph.h
@@ -1,101 +1,101 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.h */
-/* */
-/* FreeType abstract glyph cache (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcglyph.h
+ *
+ * FreeType abstract glyph cache (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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:
+ * 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.
+ * - 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.
+ * - 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:
+ * - 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'.
+ * * 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.
+ * - 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'.
+ * 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.).
+ * 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.
+ * 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:
+ * 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_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_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.
+ * - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
+ * data.
*
- * - Constant structures for a FTC_GNodeClass.
+ * - Constant structures for a FTC_GNodeClass.
*
- * - MyCacheNew() can be implemented easily as a call to the convenience
- * function FTC_GCache_New.
+ * - 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:
+ * - 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
+ * - 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.
+ * - Call FTC_Cache_Lookup.
*
- * If it returns NULL, you should create a new node, then call
- * ftc_cache_add as usual.
+ * 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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.
+ *
+ */
/*************************************************************************/
@@ -125,11 +125,11 @@ FT_BEGIN_HEADER
/*
- * We can group glyphs into `families'. Each family correspond to a
- * given face ID, character size, transform, etc.
+ * 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.
+ * Families are implemented as MRU list nodes. They are
+ * reference-counted.
*/
typedef struct FTC_FamilyRec_
@@ -167,12 +167,12 @@ FT_BEGIN_HEADER
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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 )
diff --git a/freetype/src/cache/ftcimage.c b/freetype/src/cache/ftcimage.c
index 77a10015..9e64d51a 100644
--- a/freetype/src/cache/ftcimage.c
+++ b/freetype/src/cache/ftcimage.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcimage.c */
-/* */
-/* FreeType Image cache (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcimage.c
+ *
+ * FreeType Image cache (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/cache/ftcimage.h b/freetype/src/cache/ftcimage.h
index 24a22105..dcb101fa 100644
--- a/freetype/src/cache/ftcimage.h
+++ b/freetype/src/cache/ftcimage.h
@@ -1,35 +1,35 @@
-/***************************************************************************/
-/* */
-/* ftcimage.h */
-/* */
-/* FreeType Generic Image cache (specification) */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcimage.h
+ *
+ * FreeType Generic Image cache (specification)
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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 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'.
+ * 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Each image cache really manages FT_Glyph objects.
+ *
+ */
#ifndef FTCIMAGE_H_
diff --git a/freetype/src/cache/ftcmanag.c b/freetype/src/cache/ftcmanag.c
index 2bcd9df5..bd585968 100644
--- a/freetype/src/cache/ftcmanag.c
+++ b/freetype/src/cache/ftcmanag.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.c */
-/* */
-/* FreeType Cache Manager (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcmanag.c
+ *
+ * FreeType Cache Manager (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,13 +26,9 @@
#include "ftccback.h"
#include "ftcerror.h"
-#ifdef FT_CONFIG_OPTION_PIC
-#error "cache system does not support PIC yet"
-#endif
-
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
+#define FT_COMPONENT cache
static FT_Error
diff --git a/freetype/src/cache/ftcmanag.h b/freetype/src/cache/ftcmanag.h
index b4b47553..60c66c8f 100644
--- a/freetype/src/cache/ftcmanag.h
+++ b/freetype/src/cache/ftcmanag.h
@@ -1,47 +1,47 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.h */
-/* */
-/* FreeType Cache Manager (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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). */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftcmanag.h
+ *
+ * FreeType Cache Manager (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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).
+ *
+ */
/*************************************************************************/
@@ -72,12 +72,12 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * @Section:
+ * cache_subsystem
+ *
+ */
#define FTC_MAX_FACES_DEFAULT 2
@@ -110,27 +110,28 @@ FT_BEGIN_HEADER
} 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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
diff --git a/freetype/src/cache/ftcmru.c b/freetype/src/cache/ftcmru.c
index 1087be4d..18a7b800 100644
--- a/freetype/src/cache/ftcmru.c
+++ b/freetype/src/cache/ftcmru.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcmru.c */
-/* */
-/* FreeType MRU support (body). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcmru.c
+ *
+ * FreeType MRU support (body).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/cache/ftcmru.h b/freetype/src/cache/ftcmru.h
index 82396b91..58721ed3 100644
--- a/freetype/src/cache/ftcmru.h
+++ b/freetype/src/cache/ftcmru.h
@@ -1,43 +1,43 @@
-/***************************************************************************/
-/* */
-/* ftcmru.h */
-/* */
-/* Simple MRU list-cache (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftcmru.h
+ *
+ * Simple MRU list-cache (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/cache/ftcsbits.c b/freetype/src/cache/ftcsbits.c
index 018f1ecd..06b46c89 100644
--- a/freetype/src/cache/ftcsbits.c
+++ b/freetype/src/cache/ftcsbits.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.c */
-/* */
-/* FreeType sbits manager (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcsbits.c
+ *
+ * FreeType sbits manager (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -27,7 +27,7 @@
#include "ftcerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
+#define FT_COMPONENT cache
/*************************************************************************/
@@ -91,14 +91,14 @@
/*
- * 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.
+ * 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.
+ * 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,
@@ -347,34 +347,34 @@
/*
- * The following code illustrates what to do when you want to
- * perform operations that may fail within a lookup function.
+ * 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).
+ * 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.
+ * 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.
+ * 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.
+ * 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.
+ * 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.
+ * Note that `buffer == NULL && width == 255' is a hack used to
+ * tag `unavailable' bitmaps in the array. We should never try
+ * to load these.
*
*/
diff --git a/freetype/src/cache/ftcsbits.h b/freetype/src/cache/ftcsbits.h
index 206a1bb3..f1b71c28 100644
--- a/freetype/src/cache/ftcsbits.h
+++ b/freetype/src/cache/ftcsbits.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.h */
-/* */
-/* A small-bitmap cache (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftcsbits.h
+ *
+ * A small-bitmap cache (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cache/rules.mk b/freetype/src/cache/rules.mk
index 55893597..1618d983 100644
--- a/freetype/src/cache/rules.mk
+++ b/freetype/src/cache/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2000-2018 by
+# Copyright (C) 2000-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -15,7 +15,7 @@
# Cache driver directory
#
-CACHE_DIR := $(SRC_DIR)/cache
+CACHE_DIR := $(SRC_DIR)/cache
# compilation flags for the driver
diff --git a/freetype/src/cff/Jamfile b/freetype/src/cff/Jamfile
index 53c904fc..10f49cef 100644
--- a/freetype/src/cff/Jamfile
+++ b/freetype/src/cff/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cff Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cff/cff.c b/freetype/src/cff/cff.c
index 1a755d5d..a34ba9b7 100644
--- a/freetype/src/cff/cff.c
+++ b/freetype/src/cff/cff.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cff.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cff.c
+ *
+ * FreeType OpenType driver component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -23,7 +23,6 @@
#include "cffdrivr.c"
#include "cffgload.c"
#include "cffparse.c"
-#include "cffpic.c"
#include "cffload.c"
#include "cffobjs.c"
diff --git a/freetype/src/cff/cffcmap.c b/freetype/src/cff/cffcmap.c
index e45ae112..15cc94ca 100644
--- a/freetype/src/cff/cffcmap.c
+++ b/freetype/src/cff/cffcmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffcmap.c */
-/* */
-/* CFF character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffcmap.c
+ *
+ * CFF character mapping table (cmap) support (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -161,6 +161,9 @@
if ( !charset->sids )
return FT_THROW( No_Unicode_Glyph_Name );
+ if ( !psnames->unicodes_init )
+ return FT_THROW( Unimplemented_Feature );
+
return psnames->unicodes_init( memory,
unicodes,
cff->num_glyphs,
diff --git a/freetype/src/cff/cffcmap.h b/freetype/src/cff/cffcmap.h
index 856a43dd..07366bc7 100644
--- a/freetype/src/cff/cffcmap.h
+++ b/freetype/src/cff/cffcmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffcmap.h */
-/* */
-/* CFF character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffcmap.h
+ *
+ * CFF character mapping table (cmap) support (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cff/cffdrivr.c b/freetype/src/cff/cffdrivr.c
index 06e2d743..23249898 100644
--- a/freetype/src/cff/cffdrivr.c
+++ b/freetype/src/cff/cffdrivr.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.c */
-/* */
-/* OpenType font driver implementation (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffdrivr.c
+ *
+ * OpenType font driver implementation (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -42,7 +42,6 @@
#endif
#include "cfferrs.h"
-#include "cffpic.h"
#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_GLYPH_DICT_H
@@ -50,14 +49,14 @@
#include FT_DRIVER_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cffdriver
/*************************************************************************/
@@ -73,38 +72,42 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -125,32 +128,36 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_glyph_load */
- /* */
- /* <Description> */
- /* A driver method used to load a glyph within a given glyph slot. */
- /* */
- /* <Input> */
- /* slot :: A handle to the target slot object where the glyph */
- /* will be loaded. */
- /* */
- /* size :: A handle to the source face size at which the glyph */
- /* must be scaled, loaded, etc. */
- /* */
- /* glyph_index :: The index of the glyph in the font file. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* FT_LOAD_??? constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * cff_glyph_load
+ *
+ * @Description:
+ * A driver method used to load a glyph within a given glyph slot.
+ *
+ * @Input:
+ * slot ::
+ * A handle to the target slot object where the glyph
+ * will be loaded.
+ *
+ * size ::
+ * A handle to the source face size at which the glyph
+ * must be scaled, loaded, etc.
+ *
+ * glyph_index ::
+ * The index of the glyph in the font file.
+ *
+ * load_flags ::
+ * A flag indicating what to load for this glyph. The
+ * FT_LOAD_??? constants can be used to control the
+ * glyph loading process (e.g., whether the outline
+ * should be scaled, whether to load bitmaps or not,
+ * whether to hint the outline, etc).
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_CALLBACK_DEF( FT_Error )
cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
FT_Size cffsize, /* CFF_Size */
@@ -302,7 +309,7 @@
/*
- * GLYPH DICT SERVICE
+ * GLYPH DICT SERVICE
*
*/
@@ -341,7 +348,7 @@
FT_ERROR(( "cff_get_glyph_name:"
" cannot get glyph name from a CFF2 font\n"
" "
- " without the `PSNames' module\n" ));
+ " without the `psnames' module\n" ));
error = FT_THROW( Missing_Module );
goto Exit;
}
@@ -352,7 +359,7 @@
FT_ERROR(( "cff_get_glyph_name:"
" cannot get glyph name from CFF & CEF fonts\n"
" "
- " without the `PSNames' module\n" ));
+ " without the `psnames' module\n" ));
error = FT_THROW( Missing_Module );
goto Exit;
}
@@ -374,8 +381,8 @@
static FT_UInt
- cff_get_name_index( CFF_Face face,
- FT_String* glyph_name )
+ cff_get_name_index( CFF_Face face,
+ const FT_String* glyph_name )
{
CFF_Font cff;
CFF_Charset charset;
@@ -408,7 +415,7 @@
FT_ERROR(( "cff_get_name_index:"
" cannot get glyph index from a CFF2 font\n"
" "
- " without the `PSNames' module\n" ));
+ " without the `psnames' module\n" ));
return 0;
}
}
@@ -446,7 +453,7 @@
/*
- * POSTSCRIPT INFO SERVICE
+ * POSTSCRIPT INFO SERVICE
*
*/
@@ -593,7 +600,7 @@
/*
- * POSTSCRIPT NAME SERVICE
+ * POSTSCRIPT NAME SERVICE
*
*/
@@ -654,8 +661,8 @@
FT_Library library = FT_FACE_LIBRARY( face );
- if ( cmap->clazz != &CFF_CMAP_ENCODING_CLASS_REC_GET &&
- cmap->clazz != &CFF_CMAP_UNICODE_CLASS_REC_GET )
+ if ( cmap->clazz != &cff_cmap_encoding_class_rec &&
+ cmap->clazz != &cff_cmap_unicode_class_rec )
{
FT_Module sfnt = FT_Get_Module( library, "sfnt" );
FT_Service_TTCMaps service =
@@ -682,7 +689,7 @@
/*
- * CID INFO SERVICE
+ * CID INFO SERVICE
*
*/
static FT_Error
@@ -788,7 +795,7 @@
goto Fail;
}
- if ( glyph_index > cff->num_glyphs )
+ if ( glyph_index >= cff->num_glyphs )
{
error = FT_THROW( Invalid_Argument );
goto Fail;
@@ -818,7 +825,7 @@
/*
- * PROPERTY SERVICE
+ * PROPERTY SERVICE
*
*/
@@ -832,7 +839,7 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
/*
- * MULTIPLE MASTER SERVICE
+ * MULTIPLE MASTER SERVICE
*
*/
@@ -859,10 +866,11 @@
return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
}
+
static FT_Error
cff_set_mm_weightvector( CFF_Face face,
- FT_UInt len,
- FT_Fixed* weightvector )
+ FT_UInt len,
+ FT_Fixed* weightvector )
{
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
@@ -882,6 +890,7 @@
return mm->get_mm_weightvector( FT_FACE( face ), len, weightvector );
}
+
static FT_Error
cff_get_mm_var( CFF_Face face,
FT_MM_Var* *master )
@@ -931,24 +940,24 @@
FT_DEFINE_SERVICE_MULTIMASTERSREC(
cff_service_multi_masters,
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
- (FT_Set_Var_Design_Func) cff_set_var_design, /* set_var_design */
- (FT_Get_Var_Design_Func) cff_get_var_design, /* get_var_design */
- (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
- (FT_Set_MM_WeightVector_Func) cff_set_mm_weightvector,/* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func) cff_get_mm_weightvector,/* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) cff_done_blend /* done_blend */
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
+ (FT_Set_Var_Design_Func) cff_set_var_design, /* set_var_design */
+ (FT_Get_Var_Design_Func) cff_get_var_design, /* get_var_design */
+ (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)cff_set_mm_weightvector, /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)cff_get_mm_weightvector, /* get_mm_weightvector */
+
+ (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) cff_done_blend /* done_blend */
)
/*
- * METRICS VARIATIONS SERVICE
+ * METRICS VARIATIONS SERVICE
*
*/
@@ -992,7 +1001,7 @@
/*
- * CFFLOAD SERVICE
+ * CFFLOAD SERVICE
*
*/
@@ -1025,54 +1034,54 @@
cff_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
- FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ FT_SERVICE_ID_MULTI_MASTERS, &cff_service_multi_masters,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &cff_service_metrics_variations,
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
+ FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict,
+ FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
+ FT_SERVICE_ID_CID, &cff_service_cid_info,
+ FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
+ FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
#elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
FT_DEFINE_SERVICEDESCREC8(
cff_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
- FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
+ FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict,
+ FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
+ FT_SERVICE_ID_CID, &cff_service_cid_info,
+ FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
+ FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_DEFINE_SERVICEDESCREC9(
cff_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
- FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ FT_SERVICE_ID_MULTI_MASTERS, &cff_service_multi_masters,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &cff_service_metrics_var,
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
+ FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
+ FT_SERVICE_ID_CID, &cff_service_cid_info,
+ FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
+ FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
#else
FT_DEFINE_SERVICEDESCREC7(
cff_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
- FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
+ FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
+ FT_SERVICE_ID_CID, &cff_service_cid_info,
+ FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
+ FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
#endif
@@ -1086,27 +1095,16 @@
FT_Module_Interface result;
- /* CFF_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- result = ft_service_list_lookup( CFF_SERVICES_GET, module_interface );
+ result = ft_service_list_lookup( cff_services, module_interface );
if ( result )
return result;
- /* `driver' is not yet evaluated in non-PIC mode */
-#ifndef FT_CONFIG_OPTION_PIC
+ /* `driver' is not yet evaluated */
if ( !driver )
return NULL;
library = driver->library;
if ( !library )
return NULL;
-#endif
/* we pass our request to the `sfnt' module */
sfnt = FT_Get_Module( library, "sfnt" );
diff --git a/freetype/src/cff/cffdrivr.h b/freetype/src/cff/cffdrivr.h
index ad7c3ad7..f2bbcfe4 100644
--- a/freetype/src/cff/cffdrivr.h
+++ b/freetype/src/cff/cffdrivr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.h */
-/* */
-/* High-level OpenType driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffdrivr.h
+ *
+ * High-level OpenType driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,10 +26,8 @@
FT_BEGIN_HEADER
-
FT_DECLARE_DRIVER( cff_driver_class )
-
FT_END_HEADER
#endif /* CFFDRIVER_H_ */
diff --git a/freetype/src/cff/cfferrs.h b/freetype/src/cff/cfferrs.h
index b2e1bfaf..78d47a15 100644
--- a/freetype/src/cff/cfferrs.h
+++ b/freetype/src/cff/cfferrs.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* cfferrs.h */
-/* */
-/* CFF error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * cfferrs.h
+ *
+ * CFF error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/cff/cffgload.c b/freetype/src/cff/cffgload.c
index c58471ce..36aa7d1b 100644
--- a/freetype/src/cff/cffgload.c
+++ b/freetype/src/cff/cffgload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffgload.c */
-/* */
-/* OpenType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffgload.c
+ *
+ * OpenType Glyph Loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,14 +31,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cffgload
FT_LOCAL_DEF( FT_Error )
@@ -280,16 +280,16 @@
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.width = (FT_Pos)metrics.width * 64;
+ glyph->root.metrics.height = (FT_Pos)metrics.height * 64;
- 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.horiBearingX = (FT_Pos)metrics.horiBearingX * 64;
+ glyph->root.metrics.horiBearingY = (FT_Pos)metrics.horiBearingY * 64;
+ glyph->root.metrics.horiAdvance = (FT_Pos)metrics.horiAdvance * 64;
- 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.metrics.vertBearingX = (FT_Pos)metrics.vertBearingX * 64;
+ glyph->root.metrics.vertBearingY = (FT_Pos)metrics.vertBearingY * 64;
+ glyph->root.metrics.vertAdvance = (FT_Pos)metrics.vertAdvance * 64;
glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
@@ -414,7 +414,7 @@
decoder.width_only = TRUE;
decoder.builder.no_recurse =
- (FT_Bool)( load_flags & FT_LOAD_NO_RECURSE );
+ FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
/* now load the unscaled outline */
error = cff_get_glyph_data( face, glyph_index,
diff --git a/freetype/src/cff/cffgload.h b/freetype/src/cff/cffgload.h
index 803f3974..754c55ac 100644
--- a/freetype/src/cff/cffgload.h
+++ b/freetype/src/cff/cffgload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffgload.h
+ *
+ * OpenType Glyph Loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cff/cffload.c b/freetype/src/cff/cffload.c
index 1c6fe515..12efd18d 100644
--- a/freetype/src/cff/cffload.c
+++ b/freetype/src/cff/cffload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffload.c */
-/* */
-/* OpenType and CFF data/program tables loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffload.c
+ *
+ * OpenType and CFF data/program tables loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -196,14 +196,14 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cffload
/* read an offset from the index's stream current position */
@@ -1398,7 +1398,14 @@
FT_UInt master;
- FT_ASSERT( lenNDV == 0 || NDV );
+ /* protect against malformed fonts */
+ if ( !( lenNDV == 0 || NDV ) )
+ {
+ FT_TRACE4(( " cff_blend_build_vector:"
+ " Malformed Normalize Design Vector data\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
blend->builtBV = FALSE;
@@ -2080,13 +2087,13 @@
/*
* Initialize the random number generator.
*
- * . If we have a face-specific seed, use it.
+ * - If we have a face-specific seed, use it.
* If non-zero, update it to a positive value.
*
- * . Otherwise, use the seed from the CFF driver.
+ * - Otherwise, use the seed from the CFF driver.
* If non-zero, update it to a positive value.
*
- * . If the random value is zero, use the seed given by the subfont's
+ * - If the random value is zero, use the seed given by the subfont's
* `initialRandomSeed' value.
*
*/
diff --git a/freetype/src/cff/cffload.h b/freetype/src/cff/cffload.h
index 14d14e21..42d2696f 100644
--- a/freetype/src/cff/cffload.h
+++ b/freetype/src/cff/cffload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffload.h */
-/* */
-/* OpenType & CFF data/program tables loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffload.h
+ *
+ * OpenType & CFF data/program tables loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cff/cffobjs.c b/freetype/src/cff/cffobjs.c
index a2d7aec6..f76245f3 100644
--- a/freetype/src/cff/cffobjs.c
+++ b/freetype/src/cff/cffobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffobjs.c */
-/* */
-/* OpenType objects manager (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffobjs.c
+ *
+ * OpenType objects manager (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -37,7 +37,6 @@
#include "cffobjs.h"
#include "cffload.h"
#include "cffcmap.h"
-#include "cffpic.h"
#include "cfferrs.h"
@@ -45,21 +44,21 @@
#include FT_SERVICE_CFF_TABLE_LOAD_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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cffobjs
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SIZE FUNCTIONS
+ *
+ */
static PSH_Globals_Funcs
@@ -341,11 +340,11 @@
}
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SLOT FUNCTIONS
+ *
+ */
FT_LOCAL_DEF( void )
cff_slot_done( FT_GlyphSlot slot )
@@ -383,11 +382,11 @@
}
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * FACE FUNCTIONS
+ *
+ */
static FT_String*
cff_strcpy( FT_Memory memory,
@@ -645,14 +644,14 @@
dict = &cff->top_font.font_dict;
- /* we need the `PSNames' module for CFF and CEF formats */
+ /* we need the `psnames' module for CFF and CEF formats */
/* which aren't CID-keyed */
if ( dict->cid_registry == 0xFFFFU && !psnames )
{
FT_ERROR(( "cff_face_init:"
" cannot open CFF & CEF fonts\n"
" "
- " without the `PSNames' module\n" ));
+ " without the `psnames' module\n" ));
error = FT_THROW( Missing_Module );
goto Exit;
}
@@ -963,12 +962,12 @@
cffface->style_name = style_name;
else
/* assume "Regular" style if we don't know better */
- cffface->style_name = cff_strcpy( memory, (char *)"Regular" );
+ cffface->style_name = cff_strcpy( memory, "Regular" );
- /*******************************************************************/
- /* */
- /* Compute face flags. */
- /* */
+ /********************************************************************
+ *
+ * Compute face flags.
+ */
flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */
FT_FACE_FLAG_HORIZONTAL | /* horizontal data */
FT_FACE_FLAG_HINTER; /* has native hinter */
@@ -989,10 +988,10 @@
cffface->face_flags |= flags;
- /*******************************************************************/
- /* */
- /* Compute style flags. */
- /* */
+ /********************************************************************
+ *
+ * Compute style flags.
+ */
flags = 0;
if ( dict->italic_angle )
@@ -1028,10 +1027,10 @@
if ( dict->cid_registry != 0xFFFFU && pure_cff )
cffface->face_flags |= FT_FACE_FLAG_CID_KEYED;
- /*******************************************************************/
- /* */
- /* Compute char maps. */
- /* */
+ /********************************************************************
+ *
+ * Compute char maps.
+ */
/* Try to synthesize a Unicode charmap if there is none available */
/* already. If an OpenType font contains a Unicode "cmap", we */
@@ -1070,10 +1069,11 @@
nn = (FT_UInt)cffface->num_charmaps;
- error = FT_CMap_New( &CFF_CMAP_UNICODE_CLASS_REC_GET, NULL,
+ error = FT_CMap_New( &cff_cmap_unicode_class_rec, NULL,
&cmaprec, NULL );
if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+ FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+ FT_ERR_NEQ( error, Unimplemented_Feature ) )
goto Exit;
error = FT_Err_Ok;
@@ -1094,19 +1094,19 @@
{
cmaprec.encoding_id = TT_ADOBE_ID_STANDARD;
cmaprec.encoding = FT_ENCODING_ADOBE_STANDARD;
- clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET;
+ 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_GET;
+ 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_GET;
+ clazz = &cff_cmap_encoding_class_rec;
}
error = FT_CMap_New( clazz, NULL, &cmaprec, NULL );
diff --git a/freetype/src/cff/cffobjs.h b/freetype/src/cff/cffobjs.h
index 616a25b3..03bc78a6 100644
--- a/freetype/src/cff/cffobjs.h
+++ b/freetype/src/cff/cffobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffobjs.h */
-/* */
-/* OpenType objects manager (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffobjs.h
+ *
+ * OpenType objects manager (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -51,10 +51,10 @@ FT_BEGIN_HEADER
cff_slot_init( FT_GlyphSlot slot );
- /*************************************************************************/
- /* */
- /* Face functions */
- /* */
+ /**************************************************************************
+ *
+ * Face functions
+ */
FT_LOCAL( FT_Error )
cff_face_init( FT_Stream stream,
FT_Face face, /* CFF_Face */
@@ -66,10 +66,10 @@ FT_BEGIN_HEADER
cff_face_done( FT_Face face ); /* CFF_Face */
- /*************************************************************************/
- /* */
- /* Driver functions */
- /* */
+ /**************************************************************************
+ *
+ * Driver functions
+ */
FT_LOCAL( FT_Error )
cff_driver_init( FT_Module module ); /* PS_Driver */
diff --git a/freetype/src/cff/cffparse.c b/freetype/src/cff/cffparse.c
index b9611cf5..008752c3 100644
--- a/freetype/src/cff/cffparse.c
+++ b/freetype/src/cff/cffparse.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffparse.c */
-/* */
-/* CFF token stream parser (body) */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffparse.c
+ *
+ * CFF token stream parser (body)
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -22,20 +22,20 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_CALC_H
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_LIST_H
#include "cfferrs.h"
-#include "cffpic.h"
#include "cffload.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cffparse
FT_LOCAL_DEF( FT_Error )
@@ -77,6 +77,23 @@
}
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ static void
+ finalize_t2_strings( FT_Memory memory,
+ void* data,
+ void* user )
+ {
+ CFF_T2_String t2 = (CFF_T2_String)data;
+
+
+ FT_UNUSED( user );
+
+ memory->free( memory, t2->start );
+ memory->free( memory, data );
+ }
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+
FT_LOCAL_DEF( void )
cff_parser_done( CFF_Parser parser )
{
@@ -84,13 +101,65 @@
FT_FREE( parser->stack );
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ FT_List_Finalize( &parser->t2_strings,
+ finalize_t2_strings,
+ memory,
+ NULL );
+#endif
+ }
+
+
+ /* Assuming `first >= last'. */
+
+ static FT_Error
+ cff_parser_within_limits( CFF_Parser parser,
+ FT_Byte* first,
+ FT_Byte* last )
+ {
+#ifndef CFF_CONFIG_OPTION_OLD_ENGINE
+
+ /* Fast path for regular FreeType builds with the "new" engine; */
+ /* `first >= parser->start' can be assumed. */
+
+ FT_UNUSED( first );
+
+ return last < parser->limit ? FT_Err_Ok : FT_THROW( Invalid_Argument );
+
+#else /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+ FT_ListNode node;
+
+
+ if ( first >= parser->start &&
+ last < parser->limit )
+ return FT_Err_Ok;
+
+ node = parser->t2_strings.head;
+
+ while ( node )
+ {
+ CFF_T2_String t2 = (CFF_T2_String)node->data;
+
+
+ if ( first >= t2->start &&
+ last < t2->limit )
+ return FT_Err_Ok;
+
+ node = node->next;
+ }
+
+ return FT_THROW( Invalid_Argument );
+
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
}
/* read an integer */
static FT_Long
- cff_parse_integer( FT_Byte* start,
- FT_Byte* limit )
+ cff_parse_integer( CFF_Parser parser,
+ FT_Byte* start )
{
FT_Byte* p = start;
FT_Int v = *p++;
@@ -99,14 +168,14 @@
if ( v == 28 )
{
- if ( p + 2 > limit )
+ if ( cff_parser_within_limits( parser, p, p + 1 ) )
goto Bad;
val = (FT_Short)( ( (FT_UShort)p[0] << 8 ) | p[1] );
}
else if ( v == 29 )
{
- if ( p + 4 > limit )
+ if ( cff_parser_within_limits( parser, p, p + 3 ) )
goto Bad;
val = (FT_Long)( ( (FT_ULong)p[0] << 24 ) |
@@ -120,14 +189,14 @@
}
else if ( v < 251 )
{
- if ( p + 1 > limit )
+ if ( cff_parser_within_limits( parser, p, p ) )
goto Bad;
val = ( v - 247 ) * 256 + p[0] + 108;
}
else
{
- if ( p + 1 > limit )
+ if ( cff_parser_within_limits( parser, p, p ) )
goto Bad;
val = -( v - 251 ) * 256 - p[0] - 108;
@@ -176,10 +245,10 @@
/* read a real */
static FT_Fixed
- cff_parse_real( FT_Byte* start,
- FT_Byte* limit,
- FT_Long power_ten,
- FT_Long* scaling )
+ cff_parse_real( CFF_Parser parser,
+ FT_Byte* start,
+ FT_Long power_ten,
+ FT_Long* scaling )
{
FT_Byte* p = start;
FT_Int nib;
@@ -214,7 +283,7 @@
p++;
/* Make sure we don't read past the end. */
- if ( p >= limit )
+ if ( cff_parser_within_limits( parser, p, p ) )
goto Bad;
}
@@ -251,7 +320,7 @@
p++;
/* Make sure we don't read past the end. */
- if ( p >= limit )
+ if ( cff_parser_within_limits( parser, p, p ) )
goto Bad;
}
@@ -290,7 +359,7 @@
p++;
/* Make sure we don't read past the end. */
- if ( p >= limit )
+ if ( cff_parser_within_limits( parser, p, p ) )
goto Bad;
}
@@ -457,7 +526,7 @@
if ( **d == 30 )
{
/* binary-coded decimal is truncated to integer */
- return cff_parse_real( *d, parser->limit, 0, NULL ) >> 16;
+ return cff_parse_real( parser, *d, 0, NULL ) >> 16;
}
else if ( **d == 255 )
@@ -483,7 +552,7 @@
}
else
- return cff_parse_integer( *d, parser->limit );
+ return cff_parse_integer( parser, *d );
}
@@ -494,10 +563,10 @@
FT_Long scaling )
{
if ( **d == 30 )
- return cff_parse_real( *d, parser->limit, scaling, NULL );
+ return cff_parse_real( parser, *d, scaling, NULL );
else
{
- FT_Long val = cff_parse_integer( *d, parser->limit );
+ FT_Long val = cff_parse_integer( parser, *d );
if ( scaling )
@@ -562,14 +631,14 @@
FT_ASSERT( scaling );
if ( **d == 30 )
- return cff_parse_real( *d, parser->limit, 0, scaling );
+ return cff_parse_real( parser, *d, 0, scaling );
else
{
FT_Long number;
FT_Int integer_length;
- number = cff_parse_integer( d[0], d[1] );
+ number = cff_parse_integer( parser, d[0] );
if ( number > 0x7FFFL )
{
@@ -605,7 +674,6 @@
FT_Vector* offset = &dict->font_offset;
FT_ULong* upm = &dict->units_per_em;
FT_Byte** data = parser->stack;
- FT_Error error = FT_ERR( Stack_Underflow );
if ( parser->top >= parser->stack + 6 )
@@ -617,8 +685,6 @@
int i;
- error = FT_Err_Ok;
-
dict->has_font_matrix = TRUE;
/* We expect a well-formed font matrix, this is, the matrix elements */
@@ -647,22 +713,11 @@
( max_scaling - min_scaling ) < 0 ||
( max_scaling - min_scaling ) > 9 )
{
- /* Return default matrix in case of unlikely values. */
-
FT_TRACE1(( "cff_parse_font_matrix:"
" strange scaling values (minimum %d, maximum %d),\n"
" "
" using default matrix\n", min_scaling, max_scaling ));
-
- matrix->xx = 0x10000L;
- matrix->yx = 0;
- matrix->xy = 0;
- matrix->yy = 0x10000L;
- offset->x = 0;
- offset->y = 0;
- *upm = 1;
-
- goto Exit;
+ goto Unlikely;
}
for ( i = 0; i < 6; i++ )
@@ -709,10 +764,31 @@
(double)matrix->yy / *upm / 65536,
(double)offset->x / *upm / 65536,
(double)offset->y / *upm / 65536 ));
+
+ if ( !FT_Matrix_Check( matrix ) )
+ {
+ FT_TRACE1(( "cff_parse_font_matrix:"
+ " degenerate values, using default matrix\n" ));
+ goto Unlikely;
+ }
+
+ return FT_Err_Ok;
}
+ else
+ return FT_THROW( Stack_Underflow );
- Exit:
- return error;
+ Unlikely:
+ /* Return default matrix in case of unlikely values. */
+
+ matrix->xx = 0x10000L;
+ matrix->yx = 0;
+ matrix->xy = 0;
+ matrix->yy = 0x10000L;
+ offset->x = 0;
+ offset->y = 0;
+ *upm = 1;
+
+ return FT_Err_Ok;
}
@@ -802,7 +878,7 @@
#ifdef FT_DEBUG_LEVEL_TRACE
/* beautify tracing message */
- if ( ft_trace_levels[FT_COMPONENT] < 4 )
+ if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] < 4 )
FT_TRACE1(( "Multiple Master CFFs not supported yet,"
" handling first master design only\n" ));
else
@@ -1003,9 +1079,6 @@
CFF_FIELD( code, name, id, cff_kind_bool )
-#ifndef FT_CONFIG_OPTION_PIC
-
-
#undef CFF_FIELD
#undef CFF_FIELD_DELTA
@@ -1118,199 +1191,20 @@
#endif /* FT_DEBUG_LEVEL_TRACE */
-#else /* FT_CONFIG_OPTION_PIC */
-
-
- void
- FT_Destroy_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler* clazz )
- {
- FT_Memory memory = library->memory;
-
-
- if ( clazz )
- FT_FREE( clazz );
- }
-
-
- FT_Error
- FT_Create_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler** output_class )
- {
- CFF_Field_Handler* clazz = NULL;
- FT_Error error;
- FT_Memory memory = library->memory;
-
- int i = 0;
-
-
-#undef CFF_FIELD
-#define CFF_FIELD( code, name, id, kind ) i++;
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code, name, max, id ) i++;
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code, name, id ) i++;
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code, id ) i++;
-
-#include "cfftoken.h"
-
- i++; /* { 0, 0, 0, 0, 0, 0, 0 } */
-
- if ( FT_ALLOC( clazz, sizeof ( CFF_Field_Handler ) * i ) )
- return error;
-
- i = 0;
-
-
-#ifndef FT_DEBUG_LEVEL_TRACE
-
-
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
- clazz[i].kind = cff_kind_callback; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_ ## name_; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++;
-
-#undef CFF_FIELD
-#define CFF_FIELD( code_, name_, id_, kind_ ) \
- clazz[i].kind = kind_; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++; \
-
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
- clazz[i].kind = cff_kind_delta; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = max_; \
- clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
- i++;
-
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code_, id_ ) \
- clazz[i].kind = cff_kind_blend; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_blend; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++;
-
-#include "cfftoken.h"
-
- clazz[i].kind = 0;
- clazz[i].code = 0;
- clazz[i].offset = 0;
- clazz[i].size = 0;
- clazz[i].reader = 0;
- clazz[i].array_max = 0;
- clazz[i].count_offset = 0;
-
-
-#else /* FT_DEBUG_LEVEL_TRACE */
-
-
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
- clazz[i].kind = cff_kind_callback; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_ ## name_; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++;
-
-#undef CFF_FIELD
-#define CFF_FIELD( code_, name_, id_, kind_ ) \
- clazz[i].kind = kind_; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++; \
-
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
- clazz[i].kind = cff_kind_delta; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = max_; \
- clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
- clazz[i].id = id_; \
- i++;
-
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code_, id_ ) \
- clazz[i].kind = cff_kind_blend; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_blend; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++;
-
-#include "cfftoken.h"
-
- clazz[i].kind = 0;
- clazz[i].code = 0;
- clazz[i].offset = 0;
- clazz[i].size = 0;
- clazz[i].reader = 0;
- clazz[i].array_max = 0;
- clazz[i].count_offset = 0;
- clazz[i].id = 0;
-
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- *output_class = clazz;
-
- return FT_Err_Ok;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
FT_LOCAL_DEF( FT_Error )
cff_parser_run( CFF_Parser parser,
FT_Byte* start,
FT_Byte* limit )
{
+ FT_Byte* p = start;
+ FT_Error error = FT_Err_Ok;
+
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
PSAux_Service psaux;
-#endif
- FT_Byte* p = start;
- FT_Error error = FT_Err_Ok;
FT_Library library = parser->library;
-
- FT_UNUSED( library );
-
+ FT_Memory memory = library->memory;
+#endif
parser->top = parser->stack;
parser->start = start;
@@ -1321,6 +1215,7 @@
{
FT_UInt v = *p;
+
/* Opcode 31 is legacy MM T2 operator, not a number. */
/* Opcode 255 is reserved and should not appear in fonts; */
/* it is used internally for CFF2 blends. */
@@ -1369,8 +1264,11 @@
FT_Byte* charstring_base;
FT_ULong charstring_len;
- FT_Fixed* stack;
- FT_Byte* q;
+ FT_Fixed* stack;
+ FT_ListNode node;
+ CFF_T2_String t2;
+ size_t t2_size;
+ FT_Byte* q;
charstring_base = ++p;
@@ -1405,17 +1303,39 @@
error = psaux->cff_decoder_funcs->parse_charstrings_old(
&decoder, charstring_base, charstring_len, 1 );
+ if ( error )
+ goto Exit;
/* Now copy the stack data in the temporary decoder object, */
/* converting it back to charstring number representations */
/* (this is ugly, I know). */
- /* */
- /* We overwrite the original top DICT charstring under the */
- /* assumption that the charstring representation of the result */
- /* of `cff_decoder_parse_charstrings' is shorter, which should */
- /* be always true. */
- q = charstring_base - 1;
+ node = (FT_ListNode)memory->alloc( memory,
+ sizeof ( FT_ListNodeRec ) );
+ if ( !node )
+ goto Out_Of_Memory_Error;
+
+ FT_List_Add( &parser->t2_strings, node );
+
+ t2 = (CFF_T2_String)memory->alloc( memory,
+ sizeof ( CFF_T2_StringRec ) );
+ if ( !t2 )
+ goto Out_Of_Memory_Error;
+
+ node->data = t2;
+
+ /* `5' is the conservative upper bound of required bytes per stack */
+ /* element. */
+
+ t2_size = 5 * ( decoder.top - decoder.stack );
+
+ q = (FT_Byte*)memory->alloc( memory, t2_size );
+ if ( !q )
+ goto Out_Of_Memory_Error;
+
+ t2->start = q;
+ t2->limit = q + t2_size;
+
stack = decoder.stack;
while ( stack < decoder.top )
@@ -1431,7 +1351,7 @@
if ( *stack < 0 )
{
- num = (FT_ULong)-*stack;
+ num = (FT_ULong)NEG_LONG( *stack );
neg = 1;
}
else
@@ -1523,7 +1443,7 @@
}
code = code | parser->object_code;
- for ( field = CFF_FIELD_HANDLERS_GET; field->kind; field++ )
+ for ( field = cff_field_handlers; field->kind; field++ )
{
if ( field->code == (FT_Int)code )
{
@@ -1672,11 +1592,17 @@
parser->top = parser->stack;
}
p++;
- }
+ } /* while ( p < limit ) */
Exit:
return error;
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ Out_Of_Memory_Error:
+ error = FT_THROW( Out_Of_Memory );
+ goto Exit;
+#endif
+
Stack_Overflow:
error = FT_THROW( Invalid_Argument );
goto Exit;
diff --git a/freetype/src/cff/cffparse.h b/freetype/src/cff/cffparse.h
index 8a8caeca..4e74709a 100644
--- a/freetype/src/cff/cffparse.h
+++ b/freetype/src/cff/cffparse.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffparse.h */
-/* */
-/* CFF token stream parser (specification) */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffparse.h
+ *
+ * CFF token stream parser (specification)
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef CFFPARSE_H_
@@ -33,11 +33,11 @@ FT_BEGIN_HEADER
#define CFF_MAX_STACK_DEPTH 96
/*
- * There are plans to remove the `maxstack' operator in a forthcoming
- * revision of the CFF2 specification, increasing the (then static) stack
- * size to 513. By making the default stack size equal to the maximum
- * stack size, the operator is essentially disabled, which has the
- * desired effect in FreeType.
+ * There are plans to remove the `maxstack' operator in a forthcoming
+ * revision of the CFF2 specification, increasing the (then static) stack
+ * size to 513. By making the default stack size equal to the maximum
+ * stack size, the operator is essentially disabled, which has the
+ * desired effect in FreeType.
*/
#define CFF2_MAX_STACK 513
#define CFF2_DEFAULT_STACK 513
@@ -60,6 +60,10 @@ FT_BEGIN_HEADER
FT_Byte** top;
FT_UInt stackSize; /* allocated size */
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ FT_ListRec t2_strings;
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
FT_UInt object_code;
void* object;
@@ -130,6 +134,15 @@ FT_BEGIN_HEADER
FT_END_HEADER
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ typedef struct CFF_T2_String_
+ {
+ FT_Byte* start;
+ FT_Byte* limit;
+
+ } CFF_T2_StringRec, *CFF_T2_String;
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
#endif /* CFFPARSE_H_ */
diff --git a/freetype/src/cff/cffpic.c b/freetype/src/cff/cffpic.c
deleted file mode 100644
index 08b74c7c..00000000
--- a/freetype/src/cff/cffpic.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.c */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "cffcmap.h"
-#include "cffpic.h"
-#include "cfferrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from cffdrivr.c */
- FT_Error
- FT_Create_Class_cff_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_cff_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_cff_service_ps_info( FT_Library library,
- FT_Service_PsInfoRec* clazz );
- void
- FT_Init_Class_cff_service_glyph_dict( FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_cff_service_ps_name( FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_cff_service_get_cmap_info( FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_cff_service_cid_info( FT_Library library,
- FT_Service_CIDRec* clazz );
-
- /* forward declaration of PIC init functions from cffparse.c */
- FT_Error
- FT_Create_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler** output_class );
- void
- FT_Destroy_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler* clazz );
-
-
- void
- cff_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->cff )
- {
- CffModulePIC* container = (CffModulePIC*)pic_container->cff;
-
-
- if ( container->cff_services )
- FT_Destroy_Class_cff_services( library,
- container->cff_services );
- container->cff_services = NULL;
- if ( container->cff_field_handlers )
- FT_Destroy_Class_cff_field_handlers(
- library, container->cff_field_handlers );
- container->cff_field_handlers = NULL;
- FT_FREE( container );
- pic_container->cff = NULL;
- }
- }
-
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- CffModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->cff = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_cff_services( library,
- &container->cff_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_cff_field_handlers(
- library, &container->cff_field_handlers );
- if ( error )
- goto Exit;
-
- FT_Init_Class_cff_service_ps_info(
- library, &container->cff_service_ps_info );
- FT_Init_Class_cff_service_glyph_dict(
- library, &container->cff_service_glyph_dict );
- FT_Init_Class_cff_service_ps_name(
- library, &container->cff_service_ps_name );
- FT_Init_Class_cff_service_get_cmap_info(
- library, &container->cff_service_get_cmap_info );
- FT_Init_Class_cff_service_cid_info(
- library, &container->cff_service_cid_info );
- FT_Init_Class_cff_cmap_encoding_class_rec(
- library, &container->cff_cmap_encoding_class_rec );
- FT_Init_Class_cff_cmap_unicode_class_rec(
- library, &container->cff_cmap_unicode_class_rec );
-
- Exit:
- if ( error )
- cff_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/cff/cffpic.h b/freetype/src/cff/cffpic.h
deleted file mode 100644
index 8ba4203a..00000000
--- a/freetype/src/cff/cffpic.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.h */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFPIC_H_
-#define CFFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define CFF_SERVICE_PS_INFO_GET cff_service_ps_info
-#define CFF_SERVICE_GLYPH_DICT_GET cff_service_glyph_dict
-#define CFF_SERVICE_PS_NAME_GET cff_service_ps_name
-#define CFF_SERVICE_GET_CMAP_INFO_GET cff_service_get_cmap_info
-#define CFF_SERVICE_CID_INFO_GET cff_service_cid_info
-#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
-#define CFF_SERVICES_GET cff_services
-#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
-#define CFF_SERVICE_METRICS_VAR_GET cff_service_metrics_variations
-#define CFF_SERVICE_CFF_LOAD_GET cff_service_cff_load
-#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
-#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
-#define CFF_FIELD_HANDLERS_GET cff_field_handlers
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_GLYPH_DICT_H
-#include "cffparse.h"
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct CffModulePIC_
- {
- FT_ServiceDescRec* cff_services;
- CFF_Field_Handler* cff_field_handlers;
- FT_Service_PsInfoRec cff_service_ps_info;
- FT_Service_GlyphDictRec cff_service_glyph_dict;
- FT_Service_PsFontNameRec cff_service_ps_name;
- FT_Service_TTCMapsRec cff_service_get_cmap_info;
- FT_Service_CIDRec cff_service_cid_info;
- FT_Service_PropertiesRec cff_service_properties;
- FT_Service_MultiMastersRec cff_service_multi_masters;
- FT_Service_MetricsVariationsRec cff_service_metrics_variations;
- FT_Service_CFFLoadRec cff_service_cff_load;
- FT_CMap_ClassRec cff_cmap_encoding_class_rec;
- FT_CMap_ClassRec cff_cmap_unicode_class_rec;
-
- } CffModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (CffModulePIC*)( (lib)->pic_container.cff ) )
-
-#define CFF_SERVICE_PS_INFO_GET \
- ( GET_PIC( library )->cff_service_ps_info )
-#define CFF_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->cff_service_glyph_dict )
-#define CFF_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->cff_service_ps_name )
-#define CFF_SERVICE_GET_CMAP_INFO_GET \
- ( GET_PIC( library )->cff_service_get_cmap_info )
-#define CFF_SERVICE_CID_INFO_GET \
- ( GET_PIC( library )->cff_service_cid_info )
-#define CFF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->cff_service_properties )
-#define CFF_SERVICES_GET \
- ( GET_PIC( library )->cff_services )
-#define CFF_SERVICE_MULTI_MASTERS_GET \
- ( GET_PIC( library )->cff_service_multi_masters )
-#define CFF_SERVICE_METRICS_VAR_GET \
- ( GET_PIC( library )->cff_service_metrics_variations )
-#define CFF_SERVICE_CFF_LOAD_GET \
- ( GET_PIC( library )->cff_service_cff_load )
-#define CFF_CMAP_ENCODING_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_encoding_class_rec )
-#define CFF_CMAP_UNICODE_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_unicode_class_rec )
-#define CFF_FIELD_HANDLERS_GET \
- ( GET_PIC( library )->cff_field_handlers )
-
- /* see cffpic.c for the implementation */
- void
- cff_driver_class_pic_free( FT_Library library );
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* CFFPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/cff/cfftoken.h b/freetype/src/cff/cfftoken.h
index fec1ca20..063a7b3b 100644
--- a/freetype/src/cff/cfftoken.h
+++ b/freetype/src/cff/cfftoken.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cfftoken.h */
-/* */
-/* CFF token definitions (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cfftoken.h
+ *
+ * CFF token definitions (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/cff/module.mk b/freetype/src/cff/module.mk
index 8013d5dc..8c610959 100644
--- a/freetype/src/cff/module.mk
+++ b/freetype/src/cff/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cff/rules.mk b/freetype/src/cff/rules.mk
index bce67292..6e2dc476 100644
--- a/freetype/src/cff/rules.mk
+++ b/freetype/src/cff/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -31,8 +31,7 @@ CFF_DRV_SRC := $(CFF_DIR)/cffcmap.c \
$(CFF_DIR)/cffgload.c \
$(CFF_DIR)/cffload.c \
$(CFF_DIR)/cffobjs.c \
- $(CFF_DIR)/cffparse.c \
- $(CFF_DIR)/cffpic.c
+ $(CFF_DIR)/cffparse.c
# CFF driver headers
diff --git a/freetype/src/cid/Jamfile b/freetype/src/cid/Jamfile
index 1c232fda..1cfb7025 100644
--- a/freetype/src/cid/Jamfile
+++ b/freetype/src/cid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cid Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cid/ciderrs.h b/freetype/src/cid/ciderrs.h
index a5a86e3f..be80bed3 100644
--- a/freetype/src/cid/ciderrs.h
+++ b/freetype/src/cid/ciderrs.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* ciderrs.h */
-/* */
-/* CID error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ciderrs.h
+ *
+ * CID error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/cid/cidgload.c b/freetype/src/cid/cidgload.c
index d14f9a2c..f59f2880 100644
--- a/freetype/src/cid/cidgload.c
+++ b/freetype/src/cid/cidgload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidgload.c */
-/* */
-/* CID-keyed Type1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidgload.c
+ *
+ * CID-keyed Type1 Glyph Loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,14 +31,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cidgload
FT_CALLBACK_DEF( FT_Error )
@@ -393,8 +393,7 @@
must_finish_decoder = TRUE;
/* set up the decoder */
- decoder.builder.no_recurse = FT_BOOL(
- ( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
+ decoder.builder.no_recurse = FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
error = cid_load_glyph( &decoder, glyph_index );
if ( error )
diff --git a/freetype/src/cid/cidgload.h b/freetype/src/cid/cidgload.h
index 4811852a..37eba7ca 100644
--- a/freetype/src/cid/cidgload.h
+++ b/freetype/src/cid/cidgload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidgload.h
+ *
+ * OpenType Glyph Loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cid/cidload.c b/freetype/src/cid/cidload.c
index 27cd09b3..fce3e37d 100644
--- a/freetype/src/cid/cidload.c
+++ b/freetype/src/cid/cidload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidload.c */
-/* */
-/* CID-keyed Type1 font loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidload.c
+ *
+ * CID-keyed Type1 font loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -21,20 +21,21 @@
#include FT_CONFIG_CONFIG_H
#include FT_MULTIPLE_MASTERS_H
#include FT_INTERNAL_TYPE1_TYPES_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cidload
/* read a single offset */
@@ -81,6 +82,8 @@
/* if the keyword has a dedicated callback, call it */
if ( keyword->type == T1_FIELD_TYPE_CALLBACK )
{
+ FT_TRACE4(( " %s", keyword->ident ));
+
keyword->reader( (FT_Face)face, parser );
error = parser->root.error;
goto Exit;
@@ -131,6 +134,8 @@
}
}
+ FT_TRACE4(( " %s", keyword->ident ));
+
dummy_object = object;
/* now, load the keyword data in the object's field(s) */
@@ -141,12 +146,15 @@
else
error = cid_parser_load_field( &loader->parser,
keyword, &dummy_object );
+
+ FT_TRACE4(( "\n" ));
+
Exit:
return error;
}
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
cid_parse_font_matrix( CID_Face face,
CID_Parser* parser )
{
@@ -171,14 +179,25 @@
result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
if ( result < 6 )
- return FT_THROW( Invalid_File_Format );
+ {
+ FT_ERROR(( "cid_parse_font_matrix: not enough matrix elements\n" ));
+ goto Exit;
+ }
+
+ FT_TRACE4(( " [%f %f %f %f %f %f]\n",
+ (double)temp[0] / 65536 / 1000,
+ (double)temp[1] / 65536 / 1000,
+ (double)temp[2] / 65536 / 1000,
+ (double)temp[3] / 65536 / 1000,
+ (double)temp[4] / 65536 / 1000,
+ (double)temp[5] / 65536 / 1000 ));
temp_scale = FT_ABS( temp[3] );
if ( temp_scale == 0 )
{
FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" ));
- return FT_THROW( Invalid_File_Format );
+ goto Exit;
}
/* atypical case */
@@ -200,16 +219,24 @@
matrix->xy = temp[2];
matrix->yy = temp[3];
+ if ( !FT_Matrix_Check( matrix ) )
+ {
+ FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
+ parser->root.error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
/* note that the font offsets are expressed in integer font units */
offset->x = temp[4] >> 16;
offset->y = temp[5] >> 16;
}
- return FT_Err_Ok;
+ Exit:
+ return;
}
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
parse_fd_array( CID_Face face,
CID_Parser* parser )
{
@@ -224,10 +251,11 @@
if ( num_dicts < 0 )
{
FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
- error = FT_THROW( Invalid_File_Format );
goto Exit;
}
+ FT_TRACE4(( " %d\n", num_dicts ));
+
/*
* A single entry in the FDArray must (at least) contain the following
* structure elements.
@@ -263,27 +291,31 @@
cid->num_dicts = num_dicts;
- /* don't forget to set a few defaults */
+ /* set some default values (the same as for Type 1 fonts) */
for ( n = 0; n < cid->num_dicts; n++ )
{
CID_FaceDict dict = cid->font_dicts + n;
- /* default value for lenIV */
- dict->private_dict.lenIV = 4;
+ dict->private_dict.blue_shift = 7;
+ dict->private_dict.blue_fuzz = 1;
+ dict->private_dict.lenIV = 4;
+ dict->private_dict.expansion_factor = (FT_Fixed)( 0.06 * 0x10000L );
+ dict->private_dict.blue_scale = (FT_Fixed)(
+ 0.039625 * 0x10000L * 1000 );
}
}
Exit:
- return error;
+ return;
}
- /* by mistake, `expansion_factor' appears both in PS_PrivateRec */
+ /* By mistake, `expansion_factor' appears both in PS_PrivateRec */
/* and CID_FaceDictRec (both are public header files and can't */
- /* changed); we simply copy the value */
+ /* changed). We simply copy the value. */
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
parse_expansion_factor( CID_Face face,
CID_Parser* parser )
{
@@ -296,9 +328,43 @@
dict->expansion_factor = cid_parser_to_fixed( parser, 0 );
dict->private_dict.expansion_factor = dict->expansion_factor;
+
+ FT_TRACE4(( "%d\n", dict->expansion_factor ));
+ }
+
+ return;
+ }
+
+
+ /* By mistake, `CID_FaceDictRec' doesn't contain a field for the */
+ /* `FontName' keyword. FreeType doesn't need it, but it is nice */
+ /* to catch it for producing better trace output. */
+
+ FT_CALLBACK_DEF( void )
+ parse_font_name( CID_Face face,
+ CID_Parser* parser )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
+ {
+ T1_TokenRec token;
+ FT_UInt len;
+
+
+ cid_parser_to_token( parser, &token );
+
+ len = (FT_UInt)( token.limit - token.start );
+ if ( len )
+ FT_TRACE4(( " %.*s\n", len, token.start ));
+ else
+ FT_TRACE4(( " <no value>\n" ));
}
+#else
+ FT_UNUSED( face );
+ FT_UNUSED( parser );
+#endif
- return FT_Err_Ok;
+ return;
}
@@ -311,6 +377,7 @@
T1_FIELD_CALLBACK( "FDArray", parse_fd_array, 0 )
T1_FIELD_CALLBACK( "FontMatrix", cid_parse_font_matrix, 0 )
T1_FIELD_CALLBACK( "ExpansionFactor", parse_expansion_factor, 0 )
+ T1_FIELD_CALLBACK( "FontName", parse_font_name, 0 )
{ 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 }
};
@@ -356,7 +423,16 @@
/* 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++;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " FontDict %d", parser->num_dict ));
+ if ( parser->num_dict > face->cid.num_dicts )
+ FT_TRACE4(( " (ignored)" ));
+ FT_TRACE4(( "\n" ));
+#endif
+ }
}
}
@@ -757,7 +833,7 @@
if ( cid->fd_bytes < 0 || cid->gd_bytes < 1 )
{
- FT_ERROR(( "cid_parse_dict:"
+ FT_ERROR(( "cid_face_open:"
" Invalid `FDBytes' or `GDBytes' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
@@ -766,7 +842,7 @@
/* allow at most 32bit offsets */
if ( cid->fd_bytes > 4 || cid->gd_bytes > 4 )
{
- FT_ERROR(( "cid_parse_dict:"
+ FT_ERROR(( "cid_face_open:"
" Values of `FDBytes' or `GDBytes' larger than 4\n"
" "
" are not supported\n" ));
@@ -782,17 +858,36 @@
CID_FaceDict dict = cid->font_dicts + n;
+ /* the upper limits are ad-hoc values */
+ if ( dict->private_dict.blue_shift > 1000 ||
+ dict->private_dict.blue_shift < 0 )
+ {
+ FT_TRACE2(( "cid_face_open:"
+ " setting unlikely BlueShift value %d to default (7)\n",
+ dict->private_dict.blue_shift ));
+ dict->private_dict.blue_shift = 7;
+ }
+
+ if ( dict->private_dict.blue_fuzz > 1000 ||
+ dict->private_dict.blue_fuzz < 0 )
+ {
+ FT_TRACE2(( "cid_face_open:"
+ " setting unlikely BlueFuzz value %d to default (1)\n",
+ dict->private_dict.blue_fuzz ));
+ dict->private_dict.blue_fuzz = 1;
+ }
+
if ( dict->sd_bytes < 0 ||
( dict->num_subrs && dict->sd_bytes < 1 ) )
{
- FT_ERROR(( "cid_parse_dict: Invalid `SDBytes' value\n" ));
+ FT_ERROR(( "cid_face_open: Invalid `SDBytes' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
if ( dict->sd_bytes > 4 )
{
- FT_ERROR(( "cid_parse_dict:"
+ FT_ERROR(( "cid_face_open:"
" Values of `SDBytes' larger than 4"
" are not supported\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -801,7 +896,7 @@
if ( dict->subrmap_offset > binary_length )
{
- FT_ERROR(( "cid_parse_dict: Invalid `SubrMapOffset' value\n" ));
+ FT_ERROR(( "cid_face_open: Invalid `SubrMapOffset' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -812,7 +907,7 @@
dict->num_subrs > ( binary_length - dict->subrmap_offset ) /
(FT_UInt)dict->sd_bytes ) )
{
- FT_ERROR(( "cid_parse_dict: Invalid `SubrCount' value\n" ));
+ FT_ERROR(( "cid_face_open: Invalid `SubrCount' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -820,7 +915,7 @@
if ( cid->cidmap_offset > binary_length )
{
- FT_ERROR(( "cid_parse_dict: Invalid `CIDMapOffset' value\n" ));
+ FT_ERROR(( "cid_face_open: Invalid `CIDMapOffset' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -829,7 +924,7 @@
cid->cid_count >
( binary_length - cid->cidmap_offset ) / entry_len )
{
- FT_ERROR(( "cid_parse_dict: Invalid `CIDCount' value\n" ));
+ FT_ERROR(( "cid_face_open: Invalid `CIDCount' value\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
diff --git a/freetype/src/cid/cidload.h b/freetype/src/cid/cidload.h
index 3f8bd086..fb9d4621 100644
--- a/freetype/src/cid/cidload.h
+++ b/freetype/src/cid/cidload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidload.h */
-/* */
-/* CID-keyed Type1 font loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidload.h
+ *
+ * CID-keyed Type1 font loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/cid/cidobjs.c b/freetype/src/cid/cidobjs.c
index 77afe1c8..4e972871 100644
--- a/freetype/src/cid/cidobjs.c
+++ b/freetype/src/cid/cidobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidobjs.c */
-/* */
-/* CID objects manager (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidobjs.c
+ *
+ * CID objects manager (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,21 +31,21 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cidobjs
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SLOT FUNCTIONS
+ *
+ */
FT_LOCAL_DEF( void )
cid_slot_done( FT_GlyphSlot slot )
@@ -85,11 +85,11 @@
}
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SIZE FUNCTIONS
+ *
+ */
static PSH_Globals_Funcs
@@ -174,23 +174,24 @@
}
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_face_done */
- /* */
- /* <Description> */
- /* Finalizes a given face object. */
- /* */
- /* <Input> */
- /* face :: A pointer to the face object to destroy. */
- /* */
+ /**************************************************************************
+ *
+ * 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 */
{
@@ -252,29 +253,34 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
@@ -449,20 +455,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 module )
{
@@ -505,17 +512,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_driver_done */
- /* */
- /* <Description> */
- /* Finalizes a given CID driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target CID driver. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
diff --git a/freetype/src/cid/cidobjs.h b/freetype/src/cid/cidobjs.h
index 0221f017..89c9aa74 100644
--- a/freetype/src/cid/cidobjs.h
+++ b/freetype/src/cid/cidobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidobjs.h */
-/* */
-/* CID objects manager (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidobjs.h
+ *
+ * CID objects manager (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -34,60 +34,60 @@ FT_BEGIN_HEADER
typedef struct CID_Glyph_Hints_ CID_Glyph_Hints;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CID_Driver */
- /* */
- /* <Description> */
- /* A handle to a Type 1 driver object. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * HERE BEGINS THE TYPE 1 SPECIFIC STUFF
+ *
+ */
typedef struct CID_SizeRec_
diff --git a/freetype/src/cid/cidparse.c b/freetype/src/cid/cidparse.c
index b1c7f3cb..1be46ec3 100644
--- a/freetype/src/cid/cidparse.c
+++ b/freetype/src/cid/cidparse.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidparse.c */
-/* */
-/* CID-keyed Type1 parser (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidparse.c
+ *
+ * CID-keyed Type1 parser (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,14 +26,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT cidparse
/*************************************************************************/
diff --git a/freetype/src/cid/cidparse.h b/freetype/src/cid/cidparse.h
index 61602f76..ec1f6a34 100644
--- a/freetype/src/cid/cidparse.h
+++ b/freetype/src/cid/cidparse.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidparse.h */
-/* */
-/* CID-keyed Type1 parser (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidparse.h
+ *
+ * CID-keyed Type1 parser (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -29,35 +29,43 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -86,11 +94,11 @@ FT_BEGIN_HEADER
cid_parser_done( CID_Parser* parser );
- /*************************************************************************/
- /* */
- /* PARSING ROUTINES */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * PARSING ROUTINES
+ *
+ */
#define cid_parser_skip_spaces( p ) \
(p)->root.funcs.skip_spaces( &(p)->root )
diff --git a/freetype/src/cid/cidriver.c b/freetype/src/cid/cidriver.c
index d9faf353..4d91e875 100644
--- a/freetype/src/cid/cidriver.c
+++ b/freetype/src/cid/cidriver.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidriver.c */
-/* */
-/* CID driver interface (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidriver.c
+ *
+ * CID driver interface (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -34,18 +34,18 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ciddriver
/*
- * POSTSCRIPT NAME SERVICE
+ * POSTSCRIPT NAME SERVICE
*
*/
@@ -69,7 +69,7 @@
/*
- * POSTSCRIPT INFO SERVICE
+ * POSTSCRIPT INFO SERVICE
*
*/
@@ -105,7 +105,7 @@
/*
- * CID INFO SERVICE
+ * CID INFO SERVICE
*
*/
static FT_Error
@@ -173,7 +173,7 @@
/*
- * PROPERTY SERVICE
+ * PROPERTY SERVICE
*
*/
@@ -185,7 +185,7 @@
/*
- * SERVICE LIST
+ * SERVICE LIST
*
*/
diff --git a/freetype/src/cid/cidriver.h b/freetype/src/cid/cidriver.h
index 59d9ded9..3402fd7e 100644
--- a/freetype/src/cid/cidriver.h
+++ b/freetype/src/cid/cidriver.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidriver.h */
-/* */
-/* High-level CID driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidriver.h
+ *
+ * High-level CID driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,15 +26,9 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
FT_CALLBACK_TABLE
const FT_Driver_ClassRec t1cid_driver_class;
-
FT_END_HEADER
#endif /* CIDRIVER_H_ */
diff --git a/freetype/src/cid/cidtoken.h b/freetype/src/cid/cidtoken.h
index b0e2dac6..f505c9e1 100644
--- a/freetype/src/cid/cidtoken.h
+++ b/freetype/src/cid/cidtoken.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cidtoken.h */
-/* */
-/* CID token definitions (specification only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cidtoken.h
+ *
+ * CID token definitions (specification only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -21,17 +21,20 @@
#undef T1CODE
#define T1CODE T1_FIELD_LOCATION_CID_INFO
- T1_FIELD_KEY ( "CIDFontName", cid_font_name, 0 )
- T1_FIELD_FIXED ( "CIDFontVersion", cid_version, 0 )
- T1_FIELD_NUM ( "CIDFontType", cid_font_type, 0 )
- T1_FIELD_STRING( "Registry", registry, 0 )
- T1_FIELD_STRING( "Ordering", ordering, 0 )
- T1_FIELD_NUM ( "Supplement", supplement, 0 )
- T1_FIELD_NUM ( "UIDBase", uid_base, 0 )
- T1_FIELD_NUM ( "CIDMapOffset", cidmap_offset, 0 )
- T1_FIELD_NUM ( "FDBytes", fd_bytes, 0 )
- T1_FIELD_NUM ( "GDBytes", gd_bytes, 0 )
- T1_FIELD_NUM ( "CIDCount", cid_count, 0 )
+ T1_FIELD_KEY ( "CIDFontName", cid_font_name, 0 )
+ T1_FIELD_FIXED ( "CIDFontVersion", cid_version, 0 )
+ T1_FIELD_NUM ( "CIDFontType", cid_font_type, 0 )
+ T1_FIELD_STRING ( "Registry", registry, 0 )
+ T1_FIELD_STRING ( "Ordering", ordering, 0 )
+ T1_FIELD_NUM ( "Supplement", supplement, 0 )
+ T1_FIELD_NUM ( "UIDBase", uid_base, 0 )
+
+ T1_FIELD_NUM_TABLE( "XUID", xuid, 16, 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
diff --git a/freetype/src/cid/module.mk b/freetype/src/cid/module.mk
index 9010e339..875c683c 100644
--- a/freetype/src/cid/module.mk
+++ b/freetype/src/cid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cid/rules.mk b/freetype/src/cid/rules.mk
index 94333bda..2b68dd48 100644
--- a/freetype/src/cid/rules.mk
+++ b/freetype/src/cid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cid/type1cid.c b/freetype/src/cid/type1cid.c
index 61770e3f..d21801ce 100644
--- a/freetype/src/cid/type1cid.c
+++ b/freetype/src/cid/type1cid.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* type1cid.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * type1cid.c
+ *
+ * FreeType OpenType driver component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/gxvalid/Jamfile b/freetype/src/gxvalid/Jamfile
index 74f3c51f..a08e7a99 100644
--- a/freetype/src/gxvalid/Jamfile
+++ b/freetype/src/gxvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gxvalid Jamfile
#
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
# suzuki toshiya, Masatake YAMATO and Red Hat K.K.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/gxvalid/README b/freetype/src/gxvalid/README
index af8128e0..d4935878 100644
--- a/freetype/src/gxvalid/README
+++ b/freetype/src/gxvalid/README
@@ -518,7 +518,7 @@ gxvalid: TrueType GX validator
------------------------------------------------------------------------
-Copyright 2004-2018 by
+Copyright (C) 2004-2019 by
suzuki toshiya, Masatake YAMATO, Red hat K.K.,
David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/freetype/src/gxvalid/gxvalid.c b/freetype/src/gxvalid/gxvalid.c
index d0577a24..462e461b 100644
--- a/freetype/src/gxvalid/gxvalid.c
+++ b/freetype/src/gxvalid/gxvalid.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* gxvalid.c */
-/* */
-/* FreeType validator for TrueTypeGX/AAT tables (body only). */
-/* */
-/* Copyright 2005-2018 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.c
+ *
+ * FreeType validator for TrueTypeGX/AAT tables (body only).
+ *
+ * Copyright (C) 2005-2019 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
diff --git a/freetype/src/gxvalid/gxvalid.h b/freetype/src/gxvalid/gxvalid.h
index 19f03799..969cd092 100644
--- a/freetype/src/gxvalid/gxvalid.h
+++ b/freetype/src/gxvalid/gxvalid.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvalid.h */
-/* */
-/* TrueTypeGX/AAT table validation (specification only). */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvalid.h
+ *
+ * TrueTypeGX/AAT table validation (specification only).
+ *
+ * Copyright (C) 2005-2019 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_
diff --git a/freetype/src/gxvalid/gxvbsln.c b/freetype/src/gxvalid/gxvbsln.c
index c367d384..f22f2545 100644
--- a/freetype/src/gxvalid/gxvbsln.c
+++ b/freetype/src/gxvalid/gxvbsln.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvbsln.c */
-/* */
-/* TrueTypeGX/AAT bsln table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvbsln.c
+ *
+ * TrueTypeGX/AAT bsln table validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvbsln
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvcommn.c b/freetype/src/gxvalid/gxvcommn.c
index b9660110..c5cb8ebe 100644
--- a/freetype/src/gxvalid/gxvcommn.c
+++ b/freetype/src/gxvalid/gxvcommn.c
@@ -1,41 +1,41 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.c */
-/* */
-/* TrueTypeGX/AAT common tables validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvcommn.c
+ *
+ * TrueTypeGX/AAT common tables validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvcommon
/*************************************************************************/
@@ -384,8 +384,8 @@
( P += 2, gxv_lookup_value_load( P - 2, SIGNSPEC ) )
static GXV_LookupValueDesc
- gxv_lookup_value_load( FT_Bytes p,
- int signspec )
+ gxv_lookup_value_load( FT_Bytes p,
+ GXV_LookupValue_SignSpec signspec )
{
GXV_LookupValueDesc v;
diff --git a/freetype/src/gxvalid/gxvcommn.h b/freetype/src/gxvalid/gxvcommn.h
index 8e4ff9ca..334dc9df 100644
--- a/freetype/src/gxvalid/gxvcommn.h
+++ b/freetype/src/gxvalid/gxvcommn.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.h */
-/* */
-/* TrueTypeGX/AAT common tables validation (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvcommn.h
+ *
+ * TrueTypeGX/AAT common tables validation (specification).
+ *
+ * Copyright (C) 2004-2019 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,
+ * 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.
+ * 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.
*/
diff --git a/freetype/src/gxvalid/gxverror.h b/freetype/src/gxvalid/gxverror.h
index d1151258..da0edb35 100644
--- a/freetype/src/gxvalid/gxverror.h
+++ b/freetype/src/gxvalid/gxverror.h
@@ -1,36 +1,36 @@
-/***************************************************************************/
-/* */
-/* gxverror.h */
-/* */
-/* TrueTypeGX/AAT validation module error codes (specification only). */
-/* */
-/* Copyright 2004-2018 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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * gxverror.h
+ *
+ * TrueTypeGX/AAT validation module error codes (specification only).
+ *
+ * Copyright (C) 2004-2019 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_
diff --git a/freetype/src/gxvalid/gxvfeat.c b/freetype/src/gxvalid/gxvfeat.c
index 2c805d1d..e1a12a18 100644
--- a/freetype/src/gxvalid/gxvfeat.c
+++ b/freetype/src/gxvalid/gxvfeat.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.c */
-/* */
-/* TrueTypeGX/AAT feat table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvfeat.c
+ *
+ * TrueTypeGX/AAT feat table validation (body).
+ *
+ * Copyright (C) 2004-2019 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"
@@ -30,14 +30,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvfeat
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvfeat.h b/freetype/src/gxvalid/gxvfeat.h
index 2d943806..6c989291 100644
--- a/freetype/src/gxvalid/gxvfeat.h
+++ b/freetype/src/gxvalid/gxvfeat.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.h */
-/* */
-/* TrueTypeGX/AAT feat table validation (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvfeat.h
+ *
+ * TrueTypeGX/AAT feat table validation (specification).
+ *
+ * Copyright (C) 2004-2019 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_
diff --git a/freetype/src/gxvalid/gxvfgen.c b/freetype/src/gxvalid/gxvfgen.c
index 840c0f35..5ecb9443 100644
--- a/freetype/src/gxvalid/gxvfgen.c
+++ b/freetype/src/gxvalid/gxvfgen.c
@@ -1,62 +1,62 @@
-/***************************************************************************/
-/* */
-/* gxfgen.c */
-/* */
-/* Generate feature registry data for gxv `feat' validator. */
-/* This program is derived from gxfeatreg.c in gxlayout. */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxfgen.c
+ *
+ * Generate feature registry data for gxv `feat' validator.
+ * This program is derived from gxfeatreg.c in gxlayout.
+ *
+ * Copyright (C) 2004-2019 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. */
-/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html */
-/* (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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxfeatreg.c
+ *
+ * Database of font features pre-defined by Apple Computer, Inc.
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html
+ * (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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 */
- /*******************************************************************/
+ /********************************************************************
+ * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+ */
/*
* If you add a new setting to a feature, check the number of settings
@@ -65,9 +65,9 @@
*/
#define FEATREG_MAX_SETTING 12
- /*******************************************************************/
- /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */
- /*******************************************************************/
+ /********************************************************************
+ * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+ */
#include <stdio.h>
diff --git a/freetype/src/gxvalid/gxvjust.c b/freetype/src/gxvalid/gxvjust.c
index 00c42931..a5823778 100644
--- a/freetype/src/gxvalid/gxvjust.c
+++ b/freetype/src/gxvalid/gxvjust.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvjust.c */
-/* */
-/* TrueTypeGX/AAT just table validation (body). */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvjust.c
+ *
+ * TrueTypeGX/AAT just table validation (body).
+ *
+ * Copyright (C) 2005-2019 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"
@@ -31,14 +31,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvjust
/*
* referred `just' table format specification:
@@ -72,6 +72,8 @@
const FT_String* msg_tag,
GXV_Validator gxvalid )
{
+ FT_UNUSED( msg_tag );
+
if ( gid < gxvalid->face->num_glyphs )
return;
diff --git a/freetype/src/gxvalid/gxvkern.c b/freetype/src/gxvalid/gxvkern.c
index 9c0efd7a..a7532335 100644
--- a/freetype/src/gxvalid/gxvkern.c
+++ b/freetype/src/gxvalid/gxvkern.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvkern.c */
-/* */
-/* TrueTypeGX/AAT kern table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvkern.c
+ *
+ * TrueTypeGX/AAT kern table validation (body).
+ *
+ * Copyright (C) 2004-2019 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"
@@ -32,14 +32,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvkern
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvlcar.c b/freetype/src/gxvalid/gxvlcar.c
index 0f261a9a..13b3de3e 100644
--- a/freetype/src/gxvalid/gxvlcar.c
+++ b/freetype/src/gxvalid/gxvlcar.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvlcar.c */
-/* */
-/* TrueTypeGX/AAT lcar table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvlcar.c
+ *
+ * TrueTypeGX/AAT lcar table validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvlcar
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvmod.c b/freetype/src/gxvalid/gxvmod.c
index 1a3c8629..eeadeb3e 100644
--- a/freetype/src/gxvalid/gxvmod.c
+++ b/freetype/src/gxvalid/gxvmod.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvmod.c */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmod.c
+ *
+ * FreeType's TrueTypeGX/AAT validation module implementation (body).
+ *
+ * Copyright (C) 2004-2019 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>
@@ -37,14 +37,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmodule
static FT_Error
diff --git a/freetype/src/gxvalid/gxvmod.h b/freetype/src/gxvalid/gxvmod.h
index 745c62e1..6ecd7312 100644
--- a/freetype/src/gxvalid/gxvmod.h
+++ b/freetype/src/gxvalid/gxvmod.h
@@ -1,29 +1,29 @@
-/***************************************************************************/
-/* */
-/* gxvmod.h */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation */
-/* (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmod.h
+ *
+ * FreeType's TrueTypeGX/AAT validation module implementation
+ * (specification).
+ *
+ * Copyright (C) 2004-2019 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_
@@ -35,10 +35,6 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
FT_EXPORT_VAR( const FT_Module_Class ) gxv_module_class;
diff --git a/freetype/src/gxvalid/gxvmort.c b/freetype/src/gxvalid/gxvmort.c
index b361cb2b..288ef698 100644
--- a/freetype/src/gxvalid/gxvmort.c
+++ b/freetype/src/gxvalid/gxvmort.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort.c */
-/* */
-/* TrueTypeGX/AAT mort table validation (body). */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort.c
+ *
+ * TrueTypeGX/AAT mort table validation (body).
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
static void
@@ -123,6 +123,7 @@
GXV_Validator gxvalid )
{
FT_UNUSED( gxvalid );
+ FT_UNUSED( coverage );
#ifdef FT_DEBUG_LEVEL_TRACE
if ( coverage & 0x8000U )
diff --git a/freetype/src/gxvalid/gxvmort.h b/freetype/src/gxvalid/gxvmort.h
index d8030645..0619e24f 100644
--- a/freetype/src/gxvalid/gxvmort.h
+++ b/freetype/src/gxvalid/gxvmort.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvmort.h */
-/* */
-/* TrueTypeGX/AAT common definition for mort table (specification). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort.h
+ *
+ * TrueTypeGX/AAT common definition for mort table (specification).
+ *
+ * Copyright (C) 2004-2019 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_
diff --git a/freetype/src/gxvalid/gxvmort0.c b/freetype/src/gxvalid/gxvmort0.c
index 95cf53d5..2c01bf95 100644
--- a/freetype/src/gxvalid/gxvmort0.c
+++ b/freetype/src/gxvalid/gxvmort0.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort0.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort0.c
+ *
+ * TrueTypeGX/AAT mort table validation
+ * body for type0 (Indic Script Rearrangement) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
static const char* GXV_Mort_IndicScript_Msg[] =
diff --git a/freetype/src/gxvalid/gxvmort1.c b/freetype/src/gxvalid/gxvmort1.c
index a7683a17..c71ba133 100644
--- a/freetype/src/gxvalid/gxvmort1.c
+++ b/freetype/src/gxvalid/gxvmort1.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort1.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort1.c
+ *
+ * TrueTypeGX/AAT mort table validation
+ * body for type1 (Contextual Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
typedef struct GXV_mort_subtable_type1_StateOptRec_
diff --git a/freetype/src/gxvalid/gxvmort2.c b/freetype/src/gxvalid/gxvmort2.c
index c23c2775..889d3bd5 100644
--- a/freetype/src/gxvalid/gxvmort2.c
+++ b/freetype/src/gxvalid/gxvmort2.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort2.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort2.c
+ *
+ * TrueTypeGX/AAT mort table validation
+ * body for type2 (Ligature Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
typedef struct GXV_mort_subtable_type2_StateOptRec_
diff --git a/freetype/src/gxvalid/gxvmort4.c b/freetype/src/gxvalid/gxvmort4.c
index 9d21a5fc..f8ce6cf7 100644
--- a/freetype/src/gxvalid/gxvmort4.c
+++ b/freetype/src/gxvalid/gxvmort4.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort4.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort4.c
+ *
+ * TrueTypeGX/AAT mort table validation
+ * body for type4 (Non-Contextual Glyph Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
static void
diff --git a/freetype/src/gxvalid/gxvmort5.c b/freetype/src/gxvalid/gxvmort5.c
index 42cb428a..1ba1e5de 100644
--- a/freetype/src/gxvalid/gxvmort5.c
+++ b/freetype/src/gxvalid/gxvmort5.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmort5.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmort5.c
+ *
+ * TrueTypeGX/AAT mort table validation
+ * body for type5 (Contextual Glyph Insertion) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmort
/*
diff --git a/freetype/src/gxvalid/gxvmorx.c b/freetype/src/gxvalid/gxvmorx.c
index 9fd6e6b9..8bd45c27 100644
--- a/freetype/src/gxvalid/gxvmorx.c
+++ b/freetype/src/gxvalid/gxvmorx.c
@@ -1,41 +1,41 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.c */
-/* */
-/* TrueTypeGX/AAT morx table validation (body). */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx.c
+ *
+ * TrueTypeGX/AAT morx table validation (body).
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
static void
diff --git a/freetype/src/gxvalid/gxvmorx.h b/freetype/src/gxvalid/gxvmorx.h
index 6d9925e9..e2572703 100644
--- a/freetype/src/gxvalid/gxvmorx.h
+++ b/freetype/src/gxvalid/gxvmorx.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.h */
-/* */
-/* TrueTypeGX/AAT common definition for morx table (specification). */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx.h
+ *
+ * TrueTypeGX/AAT common definition for morx table (specification).
+ *
+ * Copyright (C) 2005-2019 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_
diff --git a/freetype/src/gxvalid/gxvmorx0.c b/freetype/src/gxvalid/gxvmorx0.c
index 302261b7..d7764a0a 100644
--- a/freetype/src/gxvalid/gxvmorx0.c
+++ b/freetype/src/gxvalid/gxvmorx0.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmorx0.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx0.c
+ *
+ * TrueTypeGX/AAT morx table validation
+ * body for type0 (Indic Script Rearrangement) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
static void
diff --git a/freetype/src/gxvalid/gxvmorx1.c b/freetype/src/gxvalid/gxvmorx1.c
index 890ca74b..5b41b360 100644
--- a/freetype/src/gxvalid/gxvmorx1.c
+++ b/freetype/src/gxvalid/gxvmorx1.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmorx1.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx1.c
+ *
+ * TrueTypeGX/AAT morx table validation
+ * body for type1 (Contextual Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
typedef struct GXV_morx_subtable_type1_StateOptRec_
diff --git a/freetype/src/gxvalid/gxvmorx2.c b/freetype/src/gxvalid/gxvmorx2.c
index 3135031d..ec4c8129 100644
--- a/freetype/src/gxvalid/gxvmorx2.c
+++ b/freetype/src/gxvalid/gxvmorx2.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmorx2.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx2.c
+ *
+ * TrueTypeGX/AAT morx table validation
+ * body for type2 (Ligature Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
typedef struct GXV_morx_subtable_type2_StateOptRec_
diff --git a/freetype/src/gxvalid/gxvmorx4.c b/freetype/src/gxvalid/gxvmorx4.c
index 1e2397b0..7b041534 100644
--- a/freetype/src/gxvalid/gxvmorx4.c
+++ b/freetype/src/gxvalid/gxvmorx4.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmorx4.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx4.c
+ *
+ * TrueTypeGX/AAT morx table validation
+ * body for "morx" type4 (Non-Contextual Glyph Substitution) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
FT_LOCAL_DEF( void )
diff --git a/freetype/src/gxvalid/gxvmorx5.c b/freetype/src/gxvalid/gxvmorx5.c
index db4f9290..70a46236 100644
--- a/freetype/src/gxvalid/gxvmorx5.c
+++ b/freetype/src/gxvalid/gxvmorx5.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvmorx5.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvmorx5.c
+ *
+ * TrueTypeGX/AAT morx table validation
+ * body for type5 (Contextual Glyph Insertion) subtable.
+ *
+ * Copyright (C) 2005-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvmorx
/*
diff --git a/freetype/src/gxvalid/gxvopbd.c b/freetype/src/gxvalid/gxvopbd.c
index e2c167ea..f055a220 100644
--- a/freetype/src/gxvalid/gxvopbd.c
+++ b/freetype/src/gxvalid/gxvopbd.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvopbd.c */
-/* */
-/* TrueTypeGX/AAT opbd table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvopbd.c
+ *
+ * TrueTypeGX/AAT opbd table validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvopbd
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvprop.c b/freetype/src/gxvalid/gxvprop.c
index a67b6bdd..e1911edd 100644
--- a/freetype/src/gxvalid/gxvprop.c
+++ b/freetype/src/gxvalid/gxvprop.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvprop.c */
-/* */
-/* TrueTypeGX/AAT prop table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvprop.c
+ *
+ * TrueTypeGX/AAT prop table validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvprop
/*************************************************************************/
diff --git a/freetype/src/gxvalid/gxvtrak.c b/freetype/src/gxvalid/gxvtrak.c
index d501b501..b7794b7a 100644
--- a/freetype/src/gxvalid/gxvtrak.c
+++ b/freetype/src/gxvalid/gxvtrak.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* gxvtrak.c */
-/* */
-/* TrueTypeGX/AAT trak table validation (body). */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * gxvtrak.c
+ *
+ * TrueTypeGX/AAT trak table validation (body).
+ *
+ * Copyright (C) 2004-2019 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT gxvtrak
/*************************************************************************/
diff --git a/freetype/src/gxvalid/module.mk b/freetype/src/gxvalid/module.mk
index b64879dc..04067ce6 100644
--- a/freetype/src/gxvalid/module.mk
+++ b/freetype/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
# FreeType 2 gxvalid module definition
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/freetype/src/gxvalid/rules.mk b/freetype/src/gxvalid/rules.mk
index 3a17c030..4ef463bc 100644
--- a/freetype/src/gxvalid/rules.mk
+++ b/freetype/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/freetype/src/gzip/Jamfile b/freetype/src/gzip/Jamfile
index a7b4c8c9..2c808b74 100644
--- a/freetype/src/gzip/Jamfile
+++ b/freetype/src/gzip/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gzip Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/gzip/ftgzip.c b/freetype/src/gzip/ftgzip.c
index f8011c2d..5e78bc6f 100644
--- a/freetype/src/gzip/ftgzip.c
+++ b/freetype/src/gzip/ftgzip.c
@@ -1,23 +1,23 @@
-/***************************************************************************/
-/* */
-/* 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-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -41,10 +41,6 @@
#ifdef FT_CONFIG_OPTION_USE_ZLIB
-#ifdef FT_CONFIG_OPTION_PIC
-#error "gzip code does not support PIC yet"
-#endif
-
#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
#include <zlib.h>
@@ -637,8 +633,8 @@
memory = source->memory;
/*
- * check the header right now; this prevents allocating un-necessary
- * objects when we don't need them
+ * 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 )
@@ -660,12 +656,12 @@
}
/*
- * 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.
+ * 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 );
@@ -735,7 +731,7 @@
/* check for `input' delayed to `inflate' */
- if ( !memory || ! output_len || !output )
+ if ( !memory || !output_len || !output )
return FT_THROW( Invalid_Argument );
/* this function is modeled after zlib's `uncompress' function */
@@ -750,7 +746,7 @@
stream.zfree = (free_func) ft_gzip_free;
stream.opaque = memory;
- err = inflateInit2( &stream, MAX_WBITS );
+ err = inflateInit2( &stream, MAX_WBITS|32 );
if ( err != Z_OK )
return FT_THROW( Invalid_Argument );
diff --git a/freetype/src/gzip/infblock.c b/freetype/src/gzip/infblock.c
index d6e2dc29..2b4f0c2b 100644
--- a/freetype/src/gzip/infblock.c
+++ b/freetype/src/gzip/infblock.c
@@ -235,6 +235,7 @@ int r )
s->sub.trees.index = 0;
Tracev((stderr, "inflate: table sizes ok\n"));
s->mode = BTREE;
+ /* fall through */
case BTREE:
while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
{
@@ -260,6 +261,7 @@ int r )
s->sub.trees.index = 0;
Tracev((stderr, "inflate: bits tree ok\n"));
s->mode = DTREE;
+ /* fall through */
case DTREE:
while (t = s->sub.trees.table,
s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
@@ -335,6 +337,7 @@ int r )
}
ZFREE(z, s->sub.trees.blens);
s->mode = CODES;
+ /* fall through */
case CODES:
UPDATE
if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
@@ -351,11 +354,13 @@ int r )
break;
}
s->mode = DRY;
+ /* fall through */
case DRY:
FLUSH
if (s->read != s->write)
LEAVE
s->mode = DONE;
+ /* fall through */
case DONE:
r = Z_STREAM_END;
LEAVE
diff --git a/freetype/src/gzip/infcodes.c b/freetype/src/gzip/infcodes.c
index f7bfd58c..ba306549 100644
--- a/freetype/src/gzip/infcodes.c
+++ b/freetype/src/gzip/infcodes.c
@@ -117,6 +117,7 @@ int r )
c->sub.code.need = c->lbits;
c->sub.code.tree = c->ltree;
c->mode = LEN;
+ /* fall through */
case LEN: /* i: get length/literal/eob next */
j = c->sub.code.need;
NEEDBITS(j)
@@ -164,6 +165,7 @@ int r )
c->sub.code.tree = c->dtree;
Tracevv((stderr, "inflate: length %u\n", c->len));
c->mode = DIST;
+ /* fall through */
case DIST: /* i: get distance next */
j = c->sub.code.need;
NEEDBITS(j)
@@ -194,6 +196,7 @@ int r )
DUMPBITS(j)
Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
c->mode = COPY;
+ /* fall through */
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 */
@@ -225,6 +228,7 @@ int r )
if (s->read != s->write)
LEAVE
c->mode = END;
+ /* fall through */
case END:
r = Z_STREAM_END;
LEAVE
diff --git a/freetype/src/gzip/inflate.c b/freetype/src/gzip/inflate.c
index 8877fa3e..95e26536 100644
--- a/freetype/src/gzip/inflate.c
+++ b/freetype/src/gzip/inflate.c
@@ -174,6 +174,7 @@ int f )
break;
}
z->state->mode = FLAG;
+ /* fall through */
case FLAG:
NEEDBYTE
b = NEXTBYTE;
@@ -191,18 +192,22 @@ int f )
break;
}
z->state->mode = DICT4;
+ /* fall through */
case DICT4:
NEEDBYTE
z->state->sub.check.need = (uLong)NEXTBYTE << 24;
z->state->mode = DICT3;
+ /* fall through */
case DICT3:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE << 16;
z->state->mode = DICT2;
+ /* fall through */
case DICT2:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE << 8;
z->state->mode = DICT1;
+ /* fall through */
case DICT1:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE;
@@ -234,18 +239,22 @@ int f )
break;
}
z->state->mode = CHECK4;
+ /* fall through */
case CHECK4:
NEEDBYTE
z->state->sub.check.need = (uLong)NEXTBYTE << 24;
z->state->mode = CHECK3;
+ /* fall through */
case CHECK3:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE << 16;
z->state->mode = CHECK2;
+ /* fall through */
case CHECK2:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE << 8;
z->state->mode = CHECK1;
+ /* fall through */
case CHECK1:
NEEDBYTE
z->state->sub.check.need += (uLong)NEXTBYTE;
@@ -259,6 +268,7 @@ int f )
}
Tracev((stderr, "inflate: zlib check ok\n"));
z->state->mode = DONE;
+ /* fall through */
case DONE:
return Z_STREAM_END;
case BAD:
diff --git a/freetype/src/gzip/rules.mk b/freetype/src/gzip/rules.mk
index 1a2e48be..44206a1d 100644
--- a/freetype/src/gzip/rules.mk
+++ b/freetype/src/gzip/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/lzw/Jamfile b/freetype/src/lzw/Jamfile
index cb83aa4a..ba2d6ebb 100644
--- a/freetype/src/lzw/Jamfile
+++ b/freetype/src/lzw/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/lzw Jamfile
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/lzw/ftlzw.c b/freetype/src/lzw/ftlzw.c
index cb46f93c..9805a1e3 100644
--- a/freetype/src/lzw/ftlzw.c
+++ b/freetype/src/lzw/ftlzw.c
@@ -1,25 +1,25 @@
-/***************************************************************************/
-/* */
-/* 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-2018 by */
-/* Albert Chin-A-Young. */
-/* */
-/* based on code in `src/gzip/ftgzip.c' */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 2004-2019 by
+ * Albert Chin-A-Young.
+ *
+ * based on code in `src/gzip/ftgzip.c'
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
#include FT_INTERNAL_MEMORY_H
@@ -42,10 +42,6 @@
#ifdef FT_CONFIG_OPTION_USE_LZW
-#ifdef FT_CONFIG_OPTION_PIC
-#error "lzw code does not support PIC yet"
-#endif
-
#include "ftzopen.h"
@@ -361,11 +357,11 @@
memory = source->memory;
/*
- * Check the header right now; this prevents allocation of a huge
- * LZWFile object (400 KByte of heap memory) if not necessary.
+ * 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?
+ * Did I mention that you should never use .Z compressed font
+ * files?
*/
error = ft_lzw_check_header( source );
if ( error )
diff --git a/freetype/src/lzw/ftzopen.c b/freetype/src/lzw/ftzopen.c
index 2b868ba9..67e6760f 100644
--- a/freetype/src/lzw/ftzopen.c
+++ b/freetype/src/lzw/ftzopen.c
@@ -1,23 +1,23 @@
-/***************************************************************************/
-/* */
-/* 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-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 2005-2019 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
@@ -167,11 +167,11 @@
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'.
+ * 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.
+ * 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,
diff --git a/freetype/src/lzw/ftzopen.h b/freetype/src/lzw/ftzopen.h
index 4fd267eb..44fe36d6 100644
--- a/freetype/src/lzw/ftzopen.h
+++ b/freetype/src/lzw/ftzopen.h
@@ -1,23 +1,23 @@
-/***************************************************************************/
-/* */
-/* 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-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * 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 (C) 2005-2019 by
+ * David Turner.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef FTZOPEN_H_
#define FTZOPEN_H_
@@ -27,9 +27,9 @@
/*
- * 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.
+ * 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.
*
*/
@@ -58,56 +58,56 @@
/*
- * state of LZW decompressor
+ * state of LZW decompressor
*
- * small technical note
- * --------------------
+ * small technical note
+ * --------------------
*
- * We use a few tricks in this implementation that are explained here to
- * ease debugging and maintenance.
+ * 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
+ * - 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]
+ * 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.
+ * 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:
+ * 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)
+ * 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.
+ * 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'.
+ * - `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.
+ * 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.
+ * `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.
+ * 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
+ * - `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
+ * 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'.
+ * 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_
diff --git a/freetype/src/lzw/rules.mk b/freetype/src/lzw/rules.mk
index 18933c41..930b32e6 100644
--- a/freetype/src/lzw/rules.mk
+++ b/freetype/src/lzw/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# Albert Chin-A-Young.
#
# based on `src/lzw/rules.mk'
diff --git a/freetype/src/otvalid/Jamfile b/freetype/src/otvalid/Jamfile
index 21b8e0cb..36db0e1f 100644
--- a/freetype/src/otvalid/Jamfile
+++ b/freetype/src/otvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/otvalid Jamfile
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/otvalid/module.mk b/freetype/src/otvalid/module.mk
index 34f3dab3..5ea5b7b5 100644
--- a/freetype/src/otvalid/module.mk
+++ b/freetype/src/otvalid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/otvalid/otvalid.c b/freetype/src/otvalid/otvalid.c
index 4423ca10..e3964b99 100644
--- a/freetype/src/otvalid/otvalid.c
+++ b/freetype/src/otvalid/otvalid.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvalid.c */
-/* */
-/* FreeType validator for OpenType tables (body only). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvalid.c
+ *
+ * FreeType validator for OpenType tables (body only).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/otvalid/otvalid.h b/freetype/src/otvalid/otvalid.h
index d7801aba..5ca819f2 100644
--- a/freetype/src/otvalid/otvalid.h
+++ b/freetype/src/otvalid/otvalid.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvalid.h */
-/* */
-/* OpenType table validation (specification only). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvalid.h
+ *
+ * OpenType table validation (specification only).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/otvalid/otvbase.c b/freetype/src/otvalid/otvbase.c
index a01d45c7..be69d7ca 100644
--- a/freetype/src/otvalid/otvbase.c
+++ b/freetype/src/otvalid/otvbase.c
@@ -1,33 +1,33 @@
-/***************************************************************************/
-/* */
-/* otvbase.c */
-/* */
-/* OpenType BASE table validation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvbase.c
+ *
+ * OpenType BASE table validation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvbase
static void
diff --git a/freetype/src/otvalid/otvcommn.c b/freetype/src/otvalid/otvcommn.c
index 0ccfb03c..5ed17235 100644
--- a/freetype/src/otvalid/otvcommn.c
+++ b/freetype/src/otvalid/otvcommn.c
@@ -1,32 +1,32 @@
-/***************************************************************************/
-/* */
-/* otvcommn.c */
-/* */
-/* OpenType common tables validation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvcommn.c
+ *
+ * OpenType common tables validation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvcommon
/*************************************************************************/
diff --git a/freetype/src/otvalid/otvcommn.h b/freetype/src/otvalid/otvcommn.h
index a392784c..bfcc5b97 100644
--- a/freetype/src/otvalid/otvcommn.h
+++ b/freetype/src/otvalid/otvcommn.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvcommn.h */
-/* */
-/* OpenType common tables validation (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvcommn.h
+ *
+ * OpenType common tables validation (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/otvalid/otverror.h b/freetype/src/otvalid/otverror.h
index 2fcf42e3..a7d35acf 100644
--- a/freetype/src/otvalid/otverror.h
+++ b/freetype/src/otvalid/otverror.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* otverror.h */
-/* */
-/* OpenType validation module error codes (specification only). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * otverror.h
+ *
+ * OpenType validation module error codes (specification only).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/otvalid/otvgdef.c b/freetype/src/otvalid/otvgdef.c
index 08f31715..2529b544 100644
--- a/freetype/src/otvalid/otvgdef.c
+++ b/freetype/src/otvalid/otvgdef.c
@@ -1,33 +1,33 @@
-/***************************************************************************/
-/* */
-/* otvgdef.c */
-/* */
-/* OpenType GDEF table validation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvgdef.c
+ *
+ * OpenType GDEF table validation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvgdef
/*************************************************************************/
diff --git a/freetype/src/otvalid/otvgpos.c b/freetype/src/otvalid/otvgpos.c
index 696b35ca..f3bddeac 100644
--- a/freetype/src/otvalid/otvgpos.c
+++ b/freetype/src/otvalid/otvgpos.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvgpos.c */
-/* */
-/* OpenType GPOS table validation (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvgpos.c
+ *
+ * OpenType GPOS table validation (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -21,14 +21,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvgpos
static void
diff --git a/freetype/src/otvalid/otvgpos.h b/freetype/src/otvalid/otvgpos.h
index 95f9ac3e..b3154312 100644
--- a/freetype/src/otvalid/otvgpos.h
+++ b/freetype/src/otvalid/otvgpos.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvgpos.h */
-/* */
-/* OpenType GPOS table validator (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvgpos.h
+ *
+ * OpenType GPOS table validator (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/otvalid/otvgsub.c b/freetype/src/otvalid/otvgsub.c
index d35ea67f..97da997d 100644
--- a/freetype/src/otvalid/otvgsub.c
+++ b/freetype/src/otvalid/otvgsub.c
@@ -1,33 +1,33 @@
-/***************************************************************************/
-/* */
-/* otvgsub.c */
-/* */
-/* OpenType GSUB table validation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvgsub.c
+ *
+ * OpenType GSUB table validation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvgsub
/*************************************************************************/
diff --git a/freetype/src/otvalid/otvjstf.c b/freetype/src/otvalid/otvjstf.c
index 94d4af90..d4e6d871 100644
--- a/freetype/src/otvalid/otvjstf.c
+++ b/freetype/src/otvalid/otvjstf.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvjstf.c */
-/* */
-/* OpenType JSTF table validation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvjstf.c
+ *
+ * OpenType JSTF table validation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -21,14 +21,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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 FT_COMPONENT otvjstf
#define JstfPriorityFunc otv_JstfPriority_validate
diff --git a/freetype/src/otvalid/otvmath.c b/freetype/src/otvalid/otvmath.c
index b9800f60..3aaf0ec0 100644
--- a/freetype/src/otvalid/otvmath.c
+++ b/freetype/src/otvalid/otvmath.c
@@ -1,21 +1,21 @@
-/***************************************************************************/
-/* */
-/* otvmath.c */
-/* */
-/* OpenType MATH table validation (body). */
-/* */
-/* Copyright 2007-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvmath.c
+ *
+ * OpenType MATH table validation (body).
+ *
+ * Copyright (C) 2007-2019 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"
@@ -23,14 +23,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvmath
diff --git a/freetype/src/otvalid/otvmod.c b/freetype/src/otvalid/otvmod.c
index 89ee449d..f417bd22 100644
--- a/freetype/src/otvalid/otvmod.c
+++ b/freetype/src/otvalid/otvmod.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* otvmod.c */
-/* */
-/* FreeType's OpenType validation module implementation (body). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvmod.c
+ *
+ * FreeType's OpenType validation module implementation (body).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -28,14 +28,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT otvmodule
static FT_Error
diff --git a/freetype/src/otvalid/otvmod.h b/freetype/src/otvalid/otvmod.h
index 6917bcce..5539de7e 100644
--- a/freetype/src/otvalid/otvmod.h
+++ b/freetype/src/otvalid/otvmod.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* otvmod.h */
-/* */
-/* FreeType's OpenType validation module implementation */
-/* (specification). */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * otvmod.h
+ *
+ * FreeType's OpenType validation module implementation
+ * (specification).
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -27,10 +27,6 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
FT_EXPORT_VAR( const FT_Module_Class ) otv_module_class;
diff --git a/freetype/src/otvalid/rules.mk b/freetype/src/otvalid/rules.mk
index d4fc7237..3c6ece1c 100644
--- a/freetype/src/otvalid/rules.mk
+++ b/freetype/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pcf/Jamfile b/freetype/src/pcf/Jamfile
index 7b92b12d..fd17d53f 100644
--- a/freetype/src/pcf/Jamfile
+++ b/freetype/src/pcf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pcf Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pcf/pcf.h b/freetype/src/pcf/pcf.h
index f0390cb1..33be4bcd 100644
--- a/freetype/src/pcf/pcf.h
+++ b/freetype/src/pcf/pcf.h
@@ -99,11 +99,25 @@ FT_BEGIN_HEADER
FT_Short ascent;
FT_Short descent;
FT_Short attributes;
- FT_ULong bits;
+
+ FT_ULong bits; /* offset into the PCF_BITMAPS table */
} PCF_MetricRec, *PCF_Metric;
+ typedef struct PCF_EncRec_
+ {
+ FT_UShort firstCol;
+ FT_UShort lastCol;
+ FT_UShort firstRow;
+ FT_UShort lastRow;
+ FT_UShort defaultChar;
+
+ FT_UShort* offset;
+
+ } PCF_EncRec, *PCF_Enc;
+
+
typedef struct PCF_AccelRec_
{
FT_Byte noOverlap;
@@ -124,41 +138,32 @@ FT_BEGIN_HEADER
} PCF_AccelRec, *PCF_Accel;
- typedef struct PCF_EncodingRec_
- {
- FT_Long enc;
- FT_UShort glyph;
-
- } PCF_EncodingRec, *PCF_Encoding;
-
-
+ /*
+ * This file uses X11 terminology for PCF data; an `encoding' in X11 speak
+ * is the same as a `character code' in FreeType speak.
+ */
typedef struct PCF_FaceRec_
{
- FT_FaceRec root;
-
- FT_StreamRec comp_stream;
- FT_Stream comp_source;
+ FT_FaceRec root;
- char* charset_encoding;
- char* charset_registry;
+ FT_StreamRec comp_stream;
+ FT_Stream comp_source;
- PCF_TocRec toc;
- PCF_AccelRec accel;
+ char* charset_encoding;
+ char* charset_registry;
- int nprops;
- PCF_Property properties;
+ PCF_TocRec toc;
+ PCF_AccelRec accel;
- FT_ULong nmetrics;
- PCF_Metric metrics;
- FT_ULong nencodings;
- PCF_Encoding encodings;
+ int nprops;
+ PCF_Property properties;
- FT_Short defaultChar;
+ FT_ULong nmetrics;
+ PCF_Metric metrics;
- FT_ULong bitmapsFormat;
+ PCF_EncRec enc;
- FT_CharMap charmap_handle;
- FT_CharMapRec charmap; /* a single charmap per face */
+ FT_ULong bitmapsFormat;
} PCF_FaceRec, *PCF_Face;
diff --git a/freetype/src/pcf/pcfdrivr.c b/freetype/src/pcf/pcfdrivr.c
index 0119d948..b39592c7 100644
--- a/freetype/src/pcf/pcfdrivr.c
+++ b/freetype/src/pcf/pcfdrivr.c
@@ -45,7 +45,7 @@ THE SOFTWARE.
#include "pcfutil.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pcfread
+#define FT_COMPONENT pcfread
#include FT_SERVICE_BDF_H
#include FT_SERVICE_FONT_FORMAT_H
@@ -53,21 +53,24 @@ THE SOFTWARE.
#include FT_DRIVER_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT pcfdriver
+ /*
+ * This file uses X11 terminology for PCF data; an `encoding' in X11 speak
+ * is the same as a `character code' in FreeType speak.
+ */
typedef struct PCF_CMapRec_
{
- FT_CMapRec root;
- FT_ULong num_encodings;
- PCF_Encoding encodings;
+ FT_CMapRec root;
+ PCF_Enc enc;
} PCF_CMapRec, *PCF_CMap;
@@ -82,8 +85,7 @@ THE SOFTWARE.
FT_UNUSED( init_data );
- cmap->num_encodings = face->nencodings;
- cmap->encodings = face->encodings;
+ cmap->enc = &face->enc;
return FT_Err_Ok;
}
@@ -95,8 +97,7 @@ THE SOFTWARE.
PCF_CMap cmap = (PCF_CMap)pcfcmap;
- cmap->encodings = NULL;
- cmap->num_encodings = 0;
+ cmap->enc = NULL;
}
@@ -104,36 +105,26 @@ THE SOFTWARE.
pcf_cmap_char_index( FT_CMap pcfcmap, /* PCF_CMap */
FT_UInt32 charcode )
{
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Encoding encodings = cmap->encodings;
- FT_ULong min, max, mid;
- FT_UInt result = 0;
+ PCF_CMap cmap = (PCF_CMap)pcfcmap;
+ PCF_Enc enc = cmap->enc;
+ FT_UShort charcodeRow;
+ FT_UShort charcodeCol;
- min = 0;
- max = cmap->num_encodings;
+ if ( charcode > (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) ||
+ charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
+ return 0;
- while ( min < max )
- {
- FT_ULong code;
+ charcodeRow = (FT_UShort)( charcode >> 8 );
+ charcodeCol = (FT_UShort)( charcode & 0xFF );
+ if ( charcodeCol < enc->firstCol ||
+ charcodeCol > enc->lastCol )
+ return 0;
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
-
- if ( charcode == code )
- {
- result = encodings[mid].glyph + 1;
- break;
- }
-
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
-
- return result;
+ return (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
+ ( enc->lastCol - enc->firstCol + 1 ) +
+ charcodeCol - enc->firstCol];
}
@@ -141,52 +132,43 @@ THE SOFTWARE.
pcf_cmap_char_next( FT_CMap pcfcmap, /* PCF_CMap */
FT_UInt32 *acharcode )
{
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Encoding encodings = cmap->encodings;
- FT_ULong min, max, mid;
- FT_ULong charcode = *acharcode + 1;
- FT_UInt result = 0;
-
+ PCF_CMap cmap = (PCF_CMap)pcfcmap;
+ PCF_Enc enc = cmap->enc;
+ FT_UInt32 charcode = *acharcode;
+ FT_UShort charcodeRow;
+ FT_UShort charcodeCol;
+ FT_Int result = 0;
- min = 0;
- max = cmap->num_encodings;
- while ( min < max )
+ while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) )
{
- FT_ULong code;
+ charcode++;
+ if ( charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
+ charcode = (FT_UInt32)( enc->firstRow * 256 + enc->firstCol );
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
+ charcodeRow = (FT_UShort)( charcode >> 8 );
+ charcodeCol = (FT_UShort)( charcode & 0xFF );
- if ( charcode == code )
+ if ( charcodeCol < enc->firstCol )
+ charcodeCol = enc->firstCol;
+ else if ( charcodeCol > enc->lastCol )
{
- result = encodings[mid].glyph + 1;
- goto Exit;
+ charcodeRow++;
+ charcodeCol = enc->firstCol;
}
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
+ charcode = (FT_UInt32)( charcodeRow * 256 + charcodeCol );
- charcode = 0;
- if ( min < cmap->num_encodings )
- {
- charcode = (FT_ULong)encodings[min].enc;
- result = encodings[min].glyph + 1;
+ result = (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
+ ( enc->lastCol - enc->firstCol + 1 ) +
+ charcodeCol - enc->firstCol];
+ if ( result != 0xFFFFU )
+ break;
}
- Exit:
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "pcf_cmap_char_next: charcode 0x%x > 32bit API" ));
- *acharcode = 0;
- /* XXX: result should be changed to indicate an overflow error */
- }
- else
- *acharcode = (FT_UInt32)charcode;
+ *acharcode = charcode;
+
return result;
}
@@ -216,8 +198,8 @@ THE SOFTWARE.
memory = FT_FACE_MEMORY( face );
- FT_FREE( face->encodings );
FT_FREE( face->metrics );
+ FT_FREE( face->enc.offset );
/* free properties */
if ( face->properties )
@@ -512,9 +494,6 @@ THE SOFTWARE.
stream = face->root.stream;
- if ( glyph_index > 0 )
- glyph_index--;
-
metric = face->metrics + glyph_index;
bitmap->rows = (unsigned int)( metric->ascent +
@@ -601,11 +580,11 @@ THE SOFTWARE.
}
- /*
- *
- * BDF SERVICE
- *
- */
+ /*
+ *
+ * BDF SERVICE
+ *
+ */
static FT_Error
pcf_get_bdf_property( PCF_Face face,
@@ -633,9 +612,9 @@ THE SOFTWARE.
}
/*
- * 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.
+ * The PCF driver loads all properties as signed integers.
+ * This really doesn't seem to be a problem, because this is
+ * sufficient for any meaningful values.
*/
aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
aproperty->u.integer = (FT_Int32)prop->value.l;
@@ -668,7 +647,7 @@ THE SOFTWARE.
/*
- * PROPERTY SERVICE
+ * PROPERTY SERVICE
*
*/
static FT_Error
@@ -777,11 +756,11 @@ THE SOFTWARE.
(FT_Properties_GetFunc)pcf_property_get ) /* get_property */
- /*
- *
- * SERVICE LIST
- *
- */
+ /*
+ *
+ * SERVICE LIST
+ *
+ */
static const FT_ServiceDescRec pcf_services[] =
{
diff --git a/freetype/src/pcf/pcfdrivr.h b/freetype/src/pcf/pcfdrivr.h
index 29d30497..73db0823 100644
--- a/freetype/src/pcf/pcfdrivr.h
+++ b/freetype/src/pcf/pcfdrivr.h
@@ -31,11 +31,8 @@ THE SOFTWARE.
#include <ft2build.h>
#include FT_INTERNAL_DRIVER_H
-FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
+FT_BEGIN_HEADER
FT_EXPORT_VAR( const FT_Driver_ClassRec ) pcf_driver_class;
diff --git a/freetype/src/pcf/pcferror.h b/freetype/src/pcf/pcferror.h
index add8ef22..2e69d1d2 100644
--- a/freetype/src/pcf/pcferror.h
+++ b/freetype/src/pcf/pcferror.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* pcferror.h */
-/* */
-/* PCF error codes (specification only). */
-/* */
-/* Copyright 2001, 2012 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PCF error enumeration constants. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * pcferror.h
+ *
+ * PCF error codes (specification only).
+ *
+ * Copyright 2001, 2012 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This file is used to define the PCF error enumeration constants.
+ *
+ */
#ifndef PCFERROR_H_
#define PCFERROR_H_
diff --git a/freetype/src/pcf/pcfread.c b/freetype/src/pcf/pcfread.c
index 537da0dc..2ffe22d7 100644
--- a/freetype/src/pcf/pcfread.c
+++ b/freetype/src/pcf/pcfread.c
@@ -37,14 +37,14 @@ THE SOFTWARE.
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT pcfread
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -178,23 +178,23 @@ THE SOFTWARE.
}
/*
- * We now check whether the `size' and `offset' values are reasonable:
- * `offset' + `size' must not exceed the stream size.
+ * We now check whether the `size' and `offset' values are reasonable:
+ * `offset' + `size' must not exceed the stream size.
*
- * Note, however, that X11's `pcfWriteFont' routine (used by the
- * `bdftopcf' program to create PDF font files) has two special
- * features.
+ * Note, however, that X11's `pcfWriteFont' routine (used by the
+ * `bdftopcf' program to create PCF font files) has two special
+ * features.
*
- * - It always assigns the accelerator table a size of 100 bytes in the
- * TOC, regardless of its real size, which can vary between 34 and 72
- * bytes.
+ * - It always assigns the accelerator table a size of 100 bytes in the
+ * TOC, regardless of its real size, which can vary between 34 and 72
+ * bytes.
*
- * - Due to the way the routine is designed, it ships out the last font
- * table with its real size, ignoring the TOC's size value. Since
- * the TOC size values are always rounded up to a multiple of 4, the
- * difference can be up to three bytes for all tables except the
- * accelerator table, for which the difference can be as large as 66
- * bytes.
+ * - Due to the way the routine is designed, it ships out the last font
+ * table with its real size, ignoring the TOC's size value. Since
+ * the TOC size values are always rounded up to a multiple of 4, the
+ * difference can be up to three bytes for all tables except the
+ * accelerator table, for which the difference can be as large as 66
+ * bytes.
*
*/
@@ -743,33 +743,39 @@ THE SOFTWARE.
if ( !orig_nmetrics )
return FT_THROW( Invalid_Table );
- /* PCF is a format from ancient times; Unicode was in its */
- /* infancy, and widely used two-byte character sets for CJK */
- /* scripts (Big 5, GB 2312, JIS X 0208, etc.) did have at most */
- /* 15000 characters. Even the more exotic CNS 11643 and CCCII */
- /* standards, which were essentially three-byte character sets, */
- /* provided less then 65536 assigned characters. */
- /* */
- /* While technically possible to have a larger number of glyphs */
- /* in PCF files, we thus limit the number to 65536. */
- if ( orig_nmetrics > 65536 )
+ /*
+ * PCF is a format from ancient times; Unicode was in its infancy, and
+ * widely used two-byte character sets for CJK scripts (Big 5, GB 2312,
+ * JIS X 0208, etc.) did have at most 15000 characters. Even the more
+ * exotic CNS 11643 and CCCII standards, which were essentially
+ * three-byte character sets, provided less then 65536 assigned
+ * characters.
+ *
+ * While technically possible to have a larger number of glyphs in PCF
+ * files, we thus limit the number to 65535, taking into account that we
+ * synthesize the metrics of glyph 0 to be a copy of the `default
+ * character', and that 0xFFFF in the encodings array indicates a
+ * missing glyph.
+ */
+ if ( orig_nmetrics > 65534 )
{
FT_TRACE0(( "pcf_get_metrics:"
- " only loading first 65536 metrics\n" ));
- nmetrics = 65536;
+ " only loading first 65534 metrics\n" ));
+ nmetrics = 65534;
}
else
nmetrics = orig_nmetrics;
- face->nmetrics = nmetrics;
+ face->nmetrics = nmetrics + 1;
- if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )
+ if ( FT_NEW_ARRAY( face->metrics, face->nmetrics ) )
return error;
- metrics = face->metrics;
+ /* we handle glyph index 0 later on */
+ metrics = face->metrics + 1;
FT_TRACE4(( "\n" ));
- for ( i = 0; i < nmetrics; i++, metrics++ )
+ for ( i = 1; i < face->nmetrics; i++, metrics++ )
{
FT_TRACE5(( " idx %ld:", i ));
error = pcf_get_metric( stream, format, metrics );
@@ -808,12 +814,10 @@ THE SOFTWARE.
pcf_get_bitmaps( FT_Stream stream,
PCF_Face face )
{
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_Long* offsets = NULL;
- FT_Long bitmapSizes[GLYPHPADOPTIONS];
- FT_ULong format, size;
- FT_ULong nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
+ FT_Error error;
+ FT_ULong bitmapSizes[GLYPHPADOPTIONS];
+ FT_ULong format, size, pos;
+ FT_ULong nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
error = pcf_seek_to_table_type( stream,
@@ -859,31 +863,46 @@ THE SOFTWARE.
FT_TRACE4(( " number of bitmaps: %ld\n", orig_nbitmaps ));
/* see comment in `pcf_get_metrics' */
- if ( orig_nbitmaps > 65536 )
+ if ( orig_nbitmaps > 65534 )
{
FT_TRACE0(( "pcf_get_bitmaps:"
- " only loading first 65536 bitmaps\n" ));
- nbitmaps = 65536;
+ " only loading first 65534 bitmaps\n" ));
+ nbitmaps = 65534;
}
else
nbitmaps = orig_nbitmaps;
- if ( nbitmaps != face->nmetrics )
+ /* no extra bitmap for glyph 0 */
+ if ( nbitmaps != face->nmetrics - 1 )
return FT_THROW( Invalid_File_Format );
- if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
- return error;
+ /* start position of bitmap data */
+ pos = stream->pos + nbitmaps * 4 + 4 * 4;
FT_TRACE5(( "\n" ));
- for ( i = 0; i < nbitmaps; i++ )
+ for ( i = 1; i <= nbitmaps; i++ )
{
+ FT_ULong offset;
+
+
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_LONG( offsets[i] );
+ (void)FT_READ_ULONG( offset );
else
- (void)FT_READ_LONG_LE( offsets[i] );
+ (void)FT_READ_ULONG_LE( offset );
+
+ FT_TRACE5(( " bitmap %lu: offset %lu (0x%lX)\n",
+ i, offset, offset ));
- FT_TRACE5(( " bitmap %ld: offset %ld (0x%lX)\n",
- i, offsets[i], offsets[i] ));
+ /* right now, we only check the offset with a rough estimate; */
+ /* actual bitmaps are only loaded on demand */
+ if ( offset > size )
+ {
+ FT_TRACE0(( "pcf_get_bitmaps:"
+ " invalid offset to bitmap data of glyph %lu\n", i ));
+ face->metrics[i].bits = pos;
+ }
+ else
+ face->metrics[i].bits = pos + offset;
}
if ( error )
goto Bail;
@@ -891,62 +910,84 @@ THE SOFTWARE.
for ( i = 0; i < GLYPHPADOPTIONS; i++ )
{
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_LONG( bitmapSizes[i] );
+ (void)FT_READ_ULONG( bitmapSizes[i] );
else
- (void)FT_READ_LONG_LE( bitmapSizes[i] );
+ (void)FT_READ_ULONG_LE( bitmapSizes[i] );
if ( error )
goto Bail;
- sizebitmaps = (FT_ULong)bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
+ sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
- FT_TRACE4(( " %ld-bit padding implies a size of %ld\n",
+ FT_TRACE4(( " %ld-bit padding implies a size of %lu\n",
8 << i, bitmapSizes[i] ));
}
- FT_TRACE4(( " %ld bitmaps, using %ld-bit padding\n",
+ FT_TRACE4(( " %lu bitmaps, using %ld-bit padding\n",
nbitmaps,
8 << PCF_GLYPH_PAD_INDEX( format ) ));
- FT_TRACE4(( " bitmap size: %ld\n", sizebitmaps ));
+ FT_TRACE4(( " bitmap size: %lu\n", sizebitmaps ));
FT_UNUSED( sizebitmaps ); /* only used for debugging */
- /* right now, we only check the bitmap offsets; */
- /* actual bitmaps are only loaded on demand */
- for ( i = 0; i < nbitmaps; i++ )
- {
- /* rough estimate */
- if ( ( offsets[i] < 0 ) ||
- ( (FT_ULong)offsets[i] > size ) )
- {
- FT_TRACE0(( "pcf_get_bitmaps:"
- " invalid offset to bitmap data of glyph %ld\n", i ));
- }
- else
- face->metrics[i].bits = stream->pos + (FT_ULong)offsets[i];
- }
-
face->bitmapsFormat = format;
Bail:
- FT_FREE( offsets );
return error;
}
+ /*
+ * This file uses X11 terminology for PCF data; an `encoding' in X11 speak
+ * is the same as a character code in FreeType speak.
+ */
+#define PCF_ENC_SIZE 10
+
+ static
+ const FT_Frame_Field pcf_enc_header[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE PCF_EncRec
+
+ FT_FRAME_START( PCF_ENC_SIZE ),
+ FT_FRAME_USHORT_LE( firstCol ),
+ FT_FRAME_USHORT_LE( lastCol ),
+ FT_FRAME_USHORT_LE( firstRow ),
+ FT_FRAME_USHORT_LE( lastRow ),
+ FT_FRAME_USHORT_LE( defaultChar ),
+ FT_FRAME_END
+ };
+
+
+ static
+ const FT_Frame_Field pcf_enc_msb_header[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE PCF_EncRec
+
+ FT_FRAME_START( PCF_ENC_SIZE ),
+ FT_FRAME_USHORT( firstCol ),
+ FT_FRAME_USHORT( lastCol ),
+ FT_FRAME_USHORT( firstRow ),
+ FT_FRAME_USHORT( lastRow ),
+ FT_FRAME_USHORT( defaultChar ),
+ FT_FRAME_END
+ };
+
+
static FT_Error
pcf_get_encodings( FT_Stream stream,
PCF_Face face )
{
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_ULong format, size;
- int firstCol, lastCol;
- int firstRow, lastRow;
- FT_ULong nencoding;
- FT_UShort encodingOffset;
- int i, j;
- FT_ULong k;
- PCF_Encoding encoding = NULL;
+ FT_Error error;
+ FT_Memory memory = FT_FACE( face )->memory;
+ FT_ULong format, size;
+ PCF_Enc enc = &face->enc;
+ FT_ULong nencoding;
+ FT_UShort* offset;
+ FT_UShort defaultCharRow, defaultCharCol;
+ FT_UShort encodingOffset, defaultCharEncodingOffset;
+ FT_UShort i, j;
+ FT_Byte* pos;
error = pcf_seek_to_table_type( stream,
@@ -956,105 +997,148 @@ THE SOFTWARE.
&format,
&size );
if ( error )
- return error;
+ goto Bail;
- error = FT_Stream_EnterFrame( stream, 14 );
- if ( error )
- return error;
+ if ( FT_READ_ULONG_LE( format ) )
+ goto Bail;
- format = FT_GET_ULONG_LE();
+ FT_TRACE4(( "pcf_get_encodings:\n"
+ " format: 0x%lX (%s)\n",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
+
+ if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
+ !PCF_FORMAT_MATCH( format, PCF_BDF_ENCODINGS ) )
+ return FT_THROW( Invalid_File_Format );
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();
+ if ( FT_STREAM_READ_FIELDS( pcf_enc_msb_header, enc ) )
+ goto Bail;
}
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();
+ if ( FT_STREAM_READ_FIELDS( pcf_enc_header, enc ) )
+ goto Bail;
}
- FT_Stream_ExitFrame( stream );
-
- FT_TRACE4(( "pcf_get_encodings:\n"
- " format: 0x%lX (%s)\n",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- return FT_THROW( Invalid_File_Format );
-
FT_TRACE4(( " firstCol 0x%X, lastCol 0x%X\n"
- " firstRow 0x%X, lastRow 0x%X\n",
- firstCol, lastCol,
- firstRow, lastRow ));
+ " firstRow 0x%X, lastRow 0x%X\n"
+ " defaultChar 0x%X\n",
+ enc->firstCol, enc->lastCol,
+ enc->firstRow, enc->lastRow,
+ enc->defaultChar ));
/* sanity checks; we limit numbers of rows and columns to 256 */
- if ( firstCol < 0 ||
- firstCol > lastCol ||
- lastCol > 0xFF ||
- firstRow < 0 ||
- firstRow > lastRow ||
- lastRow > 0xFF )
+ if ( enc->firstCol > enc->lastCol ||
+ enc->lastCol > 0xFF ||
+ enc->firstRow > enc->lastRow ||
+ enc->lastRow > 0xFF )
return FT_THROW( Invalid_Table );
- nencoding = (FT_ULong)( lastCol - firstCol + 1 ) *
- (FT_ULong)( lastRow - firstRow + 1 );
+ nencoding = (FT_ULong)( enc->lastCol - enc->firstCol + 1 ) *
+ (FT_ULong)( enc->lastRow - enc->firstRow + 1 );
- if ( FT_NEW_ARRAY( encoding, nencoding ) )
- return error;
+ if ( FT_NEW_ARRAY( enc->offset, nencoding ) )
+ goto Bail;
error = FT_Stream_EnterFrame( stream, 2 * nencoding );
if ( error )
- goto Bail;
+ goto Exit;
FT_TRACE5(( "\n" ));
- k = 0;
- for ( i = firstRow; i <= lastRow; i++ )
+ defaultCharRow = enc->defaultChar >> 8;
+ defaultCharCol = enc->defaultChar & 0xFF;
+
+ /* validate default character */
+ if ( defaultCharRow < enc->firstRow ||
+ defaultCharRow > enc->lastRow ||
+ defaultCharCol < enc->firstCol ||
+ defaultCharCol > enc->lastCol )
+ {
+ enc->defaultChar = enc->firstRow * 256U + enc->firstCol;
+ FT_TRACE0(( "pcf_get_encodings:"
+ " Invalid default character set to %u\n",
+ enc->defaultChar ));
+
+ defaultCharRow = enc->firstRow;
+ defaultCharCol = enc->firstCol;
+ }
+
+ /*
+ * FreeType mandates that glyph index 0 is the `undefined glyph', which
+ * PCF calls the `default character'. However, FreeType needs glyph
+ * index 0 to be used for the undefined glyph only, which is is not the
+ * case for PCF. For this reason, we add one slot for glyph index 0 and
+ * simply copy the default character to it.
+ *
+ * `stream->cursor' still points to the beginning of the frame; we can
+ * thus easily get the offset to the default character.
+ */
+ pos = stream->cursor +
+ 2 * ( ( defaultCharRow - enc->firstRow ) *
+ ( enc->lastCol - enc->firstCol + 1 ) +
+ defaultCharCol - enc->firstCol );
+
+ if ( PCF_BYTE_ORDER( format ) == MSBFirst )
+ defaultCharEncodingOffset = FT_PEEK_USHORT( pos );
+ else
+ defaultCharEncodingOffset = FT_PEEK_USHORT_LE( pos );
+
+ if ( defaultCharEncodingOffset == 0xFFFF )
+ {
+ FT_TRACE0(( "pcf_get_encodings:"
+ " No glyph for default character,\n"
+ " "
+ " setting it to the first glyph of the font\n" ));
+ defaultCharEncodingOffset = 1;
+ }
+ else
+ {
+ defaultCharEncodingOffset++;
+
+ if ( defaultCharEncodingOffset >= face->nmetrics )
+ {
+ FT_TRACE0(( "pcf_get_encodings:"
+ " Invalid glyph index for default character,\n"
+ " "
+ " setting it to the first glyph of the font\n" ));
+ defaultCharEncodingOffset = 1;
+ }
+ }
+
+ /* copy metrics of default character to index 0 */
+ face->metrics[0] = face->metrics[defaultCharEncodingOffset];
+
+ /* now loop over all values */
+ offset = enc->offset;
+ for ( i = enc->firstRow; i <= enc->lastRow; i++ )
{
- for ( j = firstCol; j <= lastCol; j++ )
+ for ( j = enc->firstCol; j <= enc->lastCol; j++ )
{
/* X11's reference implementation uses the equivalent to */
/* `FT_GET_SHORT', however PCF fonts with more than 32768 */
- /* characters (e.g. `unifont.pcf') clearly show that an */
+ /* characters (e.g., `unifont.pcf') clearly show that an */
/* unsigned value is needed. */
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
encodingOffset = FT_GET_USHORT();
else
encodingOffset = FT_GET_USHORT_LE();
- if ( encodingOffset != 0xFFFFU )
- {
- encoding[k].enc = i * 256 + j;
- encoding[k].glyph = encodingOffset;
-
- FT_TRACE5(( " code %d (0x%04X): idx %d\n",
- encoding[k].enc, encoding[k].enc, encoding[k].glyph ));
-
- k++;
- }
+ /* everything is off by 1 due to the artificial glyph 0 */
+ *offset++ = encodingOffset == 0xFFFF ? 0xFFFF
+ : encodingOffset + 1;
}
}
FT_Stream_ExitFrame( stream );
- if ( FT_RENEW_ARRAY( encoding, nencoding, k ) )
- goto Bail;
-
- face->nencodings = k;
- face->encodings = encoding;
-
return error;
+ Exit:
+ FT_FREE( enc->offset );
+
Bail:
- FT_FREE( encoding );
return error;
}
@@ -1228,9 +1312,8 @@ THE SOFTWARE.
PCF_Property prop;
- size_t nn, len;
- char* strings[4] = { NULL, NULL, NULL, NULL };
- size_t lengths[4];
+ const char* strings[4] = { NULL, NULL, NULL, NULL };
+ size_t lengths[4], nn, len;
face->style_flags = 0;
@@ -1242,8 +1325,8 @@ THE SOFTWARE.
{
face->style_flags |= FT_STYLE_FLAG_ITALIC;
strings[2] = ( *(prop->value.atom) == 'O' ||
- *(prop->value.atom) == 'o' ) ? (char *)"Oblique"
- : (char *)"Italic";
+ *(prop->value.atom) == 'o' ) ? "Oblique"
+ : "Italic";
}
prop = pcf_find_property( pcf, "WEIGHT_NAME" );
@@ -1251,20 +1334,20 @@ THE SOFTWARE.
( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
{
face->style_flags |= FT_STYLE_FLAG_BOLD;
- strings[1] = (char*)"Bold";
+ strings[1] = "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 );
+ strings[3] = (const 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 );
+ strings[0] = (const char*)( prop->value.atom );
for ( len = 0, nn = 0; nn < 4; nn++ )
{
@@ -1278,7 +1361,7 @@ THE SOFTWARE.
if ( len == 0 )
{
- strings[0] = (char*)"Regular";
+ strings[0] = "Regular";
lengths[0] = ft_strlen( strings[0] );
len = lengths[0] + 1;
}
@@ -1294,7 +1377,7 @@ THE SOFTWARE.
for ( nn = 0; nn < 4; nn++ )
{
- char* src = strings[nn];
+ const char* src = strings[nn];
len = lengths[nn];
@@ -1397,8 +1480,7 @@ THE SOFTWARE.
root->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_FAST_GLYPHS;
+ FT_FACE_FLAG_HORIZONTAL;
if ( face->accel.constantWidth )
root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
@@ -1482,14 +1564,7 @@ THE SOFTWARE.
else
root->family_name = NULL;
- /*
- * Note: We shift all glyph indices by +1 since we must
- * respect the convention that glyph 0 always corresponds
- * to the `missing glyph'.
- *
- * This implies bumping the number of `available' glyphs by 1.
- */
- root->num_glyphs = (FT_Long)( face->nmetrics + 1 );
+ root->num_glyphs = (FT_Long)face->nmetrics;
root->num_fixed_sizes = 1;
if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
diff --git a/freetype/src/pcf/pcfutil.c b/freetype/src/pcf/pcfutil.c
index 0451ee8d..045c42d6 100644
--- a/freetype/src/pcf/pcfutil.c
+++ b/freetype/src/pcf/pcfutil.c
@@ -37,7 +37,7 @@ in this Software without prior written authorization from The Open Group.
/*
- * Invert bit order within each BYTE of an array.
+ * Invert bit order within each BYTE of an array.
*/
FT_LOCAL_DEF( void )
@@ -59,7 +59,7 @@ in this Software without prior written authorization from The Open Group.
/*
- * Invert byte order within each 16-bits of an array.
+ * Invert byte order within each 16-bits of an array.
*/
FT_LOCAL_DEF( void )
@@ -78,7 +78,7 @@ in this Software without prior written authorization from The Open Group.
}
/*
- * Invert byte order within each 32-bits of an array.
+ * Invert byte order within each 32-bits of an array.
*/
FT_LOCAL_DEF( void )
diff --git a/freetype/src/pfr/Jamfile b/freetype/src/pfr/Jamfile
index cb55a7ee..fbca8065 100644
--- a/freetype/src/pfr/Jamfile
+++ b/freetype/src/pfr/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pfr Jamfile
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pfr/module.mk b/freetype/src/pfr/module.mk
index 27fec8e5..30d876d4 100644
--- a/freetype/src/pfr/module.mk
+++ b/freetype/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pfr/pfr.c b/freetype/src/pfr/pfr.c
index 1760882f..6d885ea4 100644
--- a/freetype/src/pfr/pfr.c
+++ b/freetype/src/pfr/pfr.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfr.c */
-/* */
-/* FreeType PFR driver component. */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType PFR driver component.
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/pfr/pfrcmap.c b/freetype/src/pfr/pfrcmap.c
index 60643780..bfa1b9ea 100644
--- a/freetype/src/pfr/pfrcmap.c
+++ b/freetype/src/pfr/pfrcmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.c */
-/* */
-/* FreeType PFR cmap handling (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrcmap.c
+ *
+ * FreeType PFR cmap handling (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/pfr/pfrcmap.h b/freetype/src/pfr/pfrcmap.h
index c70a0c83..1e203a05 100644
--- a/freetype/src/pfr/pfrcmap.h
+++ b/freetype/src/pfr/pfrcmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.h */
-/* */
-/* FreeType PFR cmap handling (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrcmap.h
+ *
+ * FreeType PFR cmap handling (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/pfrdrivr.c b/freetype/src/pfr/pfrdrivr.c
index 6c7e5012..f67eebf1 100644
--- a/freetype/src/pfr/pfrdrivr.c
+++ b/freetype/src/pfr/pfrdrivr.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.c */
-/* */
-/* FreeType PFR driver interface (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrdrivr.c
+ *
+ * FreeType PFR driver interface (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -57,10 +57,10 @@
}
- /*
- * PFR METRICS SERVICE
- *
- */
+ /*
+ * PFR METRICS SERVICE
+ *
+ */
FT_CALLBACK_DEF( FT_Error )
pfr_get_advance( FT_Face pfrface, /* PFR_Face */
@@ -145,10 +145,10 @@
};
- /*
- * SERVICE LIST
- *
- */
+ /*
+ * SERVICE LIST
+ *
+ */
static const FT_ServiceDescRec pfr_services[] =
{
diff --git a/freetype/src/pfr/pfrdrivr.h b/freetype/src/pfr/pfrdrivr.h
index cab85278..33b7b941 100644
--- a/freetype/src/pfr/pfrdrivr.h
+++ b/freetype/src/pfr/pfrdrivr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.h */
-/* */
-/* High-level Type PFR driver interface (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrdrivr.h
+ *
+ * High-level Type PFR driver interface (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,14 +26,8 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
FT_EXPORT_VAR( const FT_Driver_ClassRec ) pfr_driver_class;
-
FT_END_HEADER
diff --git a/freetype/src/pfr/pfrerror.h b/freetype/src/pfr/pfrerror.h
index 7027c818..4829cfc0 100644
--- a/freetype/src/pfr/pfrerror.h
+++ b/freetype/src/pfr/pfrerror.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* pfrerror.h */
-/* */
-/* PFR error codes (specification only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * pfrerror.h
+ *
+ * PFR error codes (specification only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/pfr/pfrgload.c b/freetype/src/pfr/pfrgload.c
index b7990196..6ef5856a 100644
--- a/freetype/src/pfr/pfrgload.c
+++ b/freetype/src/pfr/pfrgload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrgload.c */
-/* */
-/* FreeType PFR glyph loader (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrgload.c
+ *
+ * FreeType PFR glyph loader (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -24,7 +24,7 @@
#include "pfrerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
+#define FT_COMPONENT pfr
/*************************************************************************/
@@ -359,9 +359,9 @@
FT_UInt format, format_low, args_format = 0, args_count, n;
- /***************************************************************/
- /* read instruction */
- /* */
+ /****************************************************************
+ * read instruction
+ */
PFR_CHECK( 1 );
format = PFR_NEXT_BYTE( p );
format_low = format & 15;
@@ -426,9 +426,9 @@
args_format = format_low;
}
- /***********************************************************/
- /* now read arguments */
- /* */
+ /************************************************************
+ * now read arguments
+ */
cur = pos;
for ( n = 0; n < args_count; n++ )
{
@@ -513,9 +513,9 @@
FT_TRACE7(( "\n" ));
- /***********************************************************/
- /* finally, execute instruction */
- /* */
+ /************************************************************
+ * finally, execute instruction
+ */
switch ( format >> 4 )
{
case 0: /* end glyph => EXIT */
diff --git a/freetype/src/pfr/pfrgload.h b/freetype/src/pfr/pfrgload.h
index 01f48d77..d0e1420b 100644
--- a/freetype/src/pfr/pfrgload.h
+++ b/freetype/src/pfr/pfrgload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrgload.h */
-/* */
-/* FreeType PFR glyph loader (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrgload.h
+ *
+ * FreeType PFR glyph loader (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/pfrload.c b/freetype/src/pfr/pfrload.c
index 2776da46..ccf0b7e1 100644
--- a/freetype/src/pfr/pfrload.c
+++ b/freetype/src/pfr/pfrload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrload.c */
-/* */
-/* FreeType PFR loader (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrload.c
+ *
+ * FreeType PFR loader (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -23,92 +23,92 @@
#include "pfrerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
+#define FT_COMPONENT pfr
/*
- * The overall structure of a PFR file is as follows.
+ * The overall structure of a PFR file is as follows.
*
- * PFR header
- * 58 bytes (contains nPhysFonts)
+ * PFR header
+ * 58 bytes (contains nPhysFonts)
*
- * Logical font directory (size at most 2^16 bytes)
- * 2 bytes (nLogFonts)
- * + nLogFonts * 5 bytes
+ * Logical font directory (size at most 2^16 bytes)
+ * 2 bytes (nLogFonts)
+ * + nLogFonts * 5 bytes
*
- * ==> nLogFonts <= 13106
+ * ==> nLogFonts <= 13106
*
- * Logical font section (size at most 2^24 bytes)
- * nLogFonts * logFontRecord
+ * Logical font section (size at most 2^24 bytes)
+ * nLogFonts * logFontRecord
*
- * logFontRecord (size at most 2^16 bytes)
- * 12 bytes (fontMatrix)
- * + 1 byte (flags)
- * + 0-5 bytes (depending on `flags')
- * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
- * + 5 bytes (physical font info)
- * + 0-1 bytes (depending on PFR header)
+ * logFontRecord (size at most 2^16 bytes)
+ * 12 bytes (fontMatrix)
+ * + 1 byte (flags)
+ * + 0-5 bytes (depending on `flags')
+ * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
+ * + 5 bytes (physical font info)
+ * + 0-1 bytes (depending on PFR header)
*
- * ==> minimum size 18 bytes
+ * ==> minimum size 18 bytes
*
- * Physical font section (size at most 2^24 bytes)
- * nPhysFonts * (physFontRecord
- * + nBitmapSizes * nBmapChars * bmapCharRecord)
+ * Physical font section (size at most 2^24 bytes)
+ * nPhysFonts * (physFontRecord
+ * + nBitmapSizes * nBmapChars * bmapCharRecord)
*
- * physFontRecord (size at most 2^24 bytes)
- * 14 bytes (font info)
- * + 1 byte (flags)
- * + 0-2 (depending on `flags')
- * + 0-? (structure too complicated to be shown here; depending on
- * `flags'; contains `nBitmapSizes' and `nBmapChars')
- * + 3 bytes (nAuxBytes)
- * + nAuxBytes
- * + 1 byte (nBlueValues)
- * + 2 * nBlueValues
- * + 6 bytes (hinting data)
- * + 2 bytes (nCharacters)
- * + nCharacters * (4-10 bytes) (depending on `flags')
+ * physFontRecord (size at most 2^24 bytes)
+ * 14 bytes (font info)
+ * + 1 byte (flags)
+ * + 0-2 (depending on `flags')
+ * + 0-? (structure too complicated to be shown here; depending on
+ * `flags'; contains `nBitmapSizes' and `nBmapChars')
+ * + 3 bytes (nAuxBytes)
+ * + nAuxBytes
+ * + 1 byte (nBlueValues)
+ * + 2 * nBlueValues
+ * + 6 bytes (hinting data)
+ * + 2 bytes (nCharacters)
+ * + nCharacters * (4-10 bytes) (depending on `flags')
*
- * ==> minimum size 27 bytes
+ * ==> minimum size 27 bytes
*
- * bmapCharRecord
- * 4-7 bytes
+ * bmapCharRecord
+ * 4-7 bytes
*
- * Glyph program strings (three possible types: simpleGps, compoundGps,
- * and bitmapGps; size at most 2^24 bytes)
- * simpleGps (size at most 2^16 bytes)
- * 1 byte (flags)
- * 1-2 bytes (n[XY]orus, depending on `flags')
- * 0-(64+512*2) = 0-1088 bytes (depending on `n[XY]orus')
- * 0-? (structure too complicated to be shown here; depending on
- * `flags')
- * 1-? glyph data (faintly resembling PS Type 1 charstrings)
+ * Glyph program strings (three possible types: simpleGps, compoundGps,
+ * and bitmapGps; size at most 2^24 bytes)
+ * simpleGps (size at most 2^16 bytes)
+ * 1 byte (flags)
+ * 1-2 bytes (n[XY]orus, depending on `flags')
+ * 0-(64+512*2) = 0-1088 bytes (depending on `n[XY]orus')
+ * 0-? (structure too complicated to be shown here; depending on
+ * `flags')
+ * 1-? glyph data (faintly resembling PS Type 1 charstrings)
*
- * ==> minimum size 3 bytes
+ * ==> minimum size 3 bytes
*
- * compoundGps (size at most 2^16 bytes)
- * 1 byte (nElements <= 63, flags)
- * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
- * + nElements * (6-14 bytes)
+ * compoundGps (size at most 2^16 bytes)
+ * 1 byte (nElements <= 63, flags)
+ * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
+ * + nElements * (6-14 bytes)
*
- * bitmapGps (size at most 2^16 bytes)
- * 1 byte (flags)
- * 3-13 bytes (position info, depending on `flags')
- * 0-? bitmap data
+ * bitmapGps (size at most 2^16 bytes)
+ * 1 byte (flags)
+ * 3-13 bytes (position info, depending on `flags')
+ * 0-? bitmap data
*
- * ==> minimum size 4 bytes
+ * ==> minimum size 4 bytes
*
- * PFR trailer
- * 8 bytes
+ * PFR trailer
+ * 8 bytes
*
*
- * ==> minimum size of a valid PFR:
- * 58 (header)
- * + 2 (nLogFonts)
- * + 27 (1 physFontRecord)
- * + 8 (trailer)
- * -----
- * 95 bytes
+ * ==> minimum size of a valid PFR:
+ * 58 (header)
+ * + 2 (nLogFonts)
+ * + 27 (1 physFontRecord)
+ * + 8 (trailer)
+ * -----
+ * 95 bytes
*
*/
diff --git a/freetype/src/pfr/pfrload.h b/freetype/src/pfr/pfrload.h
index 36e809a7..2e7ffd01 100644
--- a/freetype/src/pfr/pfrload.h
+++ b/freetype/src/pfr/pfrload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrload.h */
-/* */
-/* FreeType PFR loader (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrload.h
+ *
+ * FreeType PFR loader (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/pfrobjs.c b/freetype/src/pfr/pfrobjs.c
index 737b97b5..9765f95c 100644
--- a/freetype/src/pfr/pfrobjs.c
+++ b/freetype/src/pfr/pfrobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.c */
-/* */
-/* FreeType PFR object methods (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrobjs.c
+ *
+ * FreeType PFR object methods (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -29,7 +29,7 @@
#include "pfrerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
+#define FT_COMPONENT pfr
/*************************************************************************/
@@ -122,7 +122,7 @@
stream,
(FT_UInt)( face_index & 0xFFFF ),
face->header.log_dir_offset,
- FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
+ FT_BOOL( face->header.phy_font_max_size_high ) );
if ( error )
goto Exit;
@@ -370,7 +370,7 @@
FT_Bool scaling;
- scaling = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+ scaling = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE ) );
/* copy outline data */
*outline = slot->glyph.loader->base.outline;
@@ -378,7 +378,7 @@
outline->flags &= ~FT_OUTLINE_OWNER;
outline->flags |= FT_OUTLINE_REVERSE_FILL;
- if ( size && pfrsize->metrics.y_ppem < 24 )
+ if ( pfrsize->metrics.y_ppem < 24 )
outline->flags |= FT_OUTLINE_HIGH_PRECISION;
/* compute the advance vector */
diff --git a/freetype/src/pfr/pfrobjs.h b/freetype/src/pfr/pfrobjs.h
index 59c709f5..39cffd07 100644
--- a/freetype/src/pfr/pfrobjs.h
+++ b/freetype/src/pfr/pfrobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.h */
-/* */
-/* FreeType PFR object methods (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrobjs.h
+ *
+ * FreeType PFR object methods (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/pfrsbit.c b/freetype/src/pfr/pfrsbit.c
index ba909ddc..00a96164 100644
--- a/freetype/src/pfr/pfrsbit.c
+++ b/freetype/src/pfr/pfrsbit.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.c */
-/* */
-/* FreeType PFR bitmap loader (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrsbit.c
+ *
+ * FreeType PFR bitmap loader (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -24,7 +24,7 @@
#include "pfrerror.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
+#define FT_COMPONENT pfr
/*************************************************************************/
diff --git a/freetype/src/pfr/pfrsbit.h b/freetype/src/pfr/pfrsbit.h
index 07b27bc0..6568b909 100644
--- a/freetype/src/pfr/pfrsbit.h
+++ b/freetype/src/pfr/pfrsbit.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.h */
-/* */
-/* FreeType PFR bitmap loader (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrsbit.h
+ *
+ * FreeType PFR bitmap loader (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/pfrtypes.h b/freetype/src/pfr/pfrtypes.h
index 058d6aad..6a5f9d57 100644
--- a/freetype/src/pfr/pfrtypes.h
+++ b/freetype/src/pfr/pfrtypes.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pfrtypes.h */
-/* */
-/* FreeType PFR data structures (specification only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pfrtypes.h
+ *
+ * FreeType PFR data structures (specification only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pfr/rules.mk b/freetype/src/pfr/rules.mk
index 3acb7956..f14ca699 100644
--- a/freetype/src/pfr/rules.mk
+++ b/freetype/src/pfr/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/Jamfile b/freetype/src/psaux/Jamfile
index a231d597..30bcc1c0 100644
--- a/freetype/src/psaux/Jamfile
+++ b/freetype/src/psaux/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psaux Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/afmparse.c b/freetype/src/psaux/afmparse.c
index 0c33d594..f78adbba 100644
--- a/freetype/src/psaux/afmparse.c
+++ b/freetype/src/psaux/afmparse.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afmparse.c */
-/* */
-/* AFM parser (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afmparse.c
+ *
+ * AFM parser (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -28,13 +28,13 @@
#include "psauxerr.h"
-/***************************************************************************/
-/* */
-/* AFM_Stream */
-/* */
-/* The use of AFM_Stream is largely inspired by parseAFM.[ch] from t1lib. */
-/* */
-/* */
+ /**************************************************************************
+ *
+ * AFM_Stream
+ *
+ * The use of AFM_Stream is largely inspired by parseAFM.[ch] from t1lib.
+ *
+ */
enum
{
@@ -193,11 +193,11 @@
}
- /*************************************************************************/
- /* */
- /* AFM_Parser */
- /* */
- /* */
+ /**************************************************************************
+ *
+ * AFM_Parser
+ *
+ */
/* all keys defined in Ch. 7-10 of 5004.AFM_Spec.pdf */
typedef enum AFM_Token_
@@ -953,7 +953,8 @@
error = afm_parse_kern_data( parser );
if ( error )
goto Fail;
- /* fall through since we only support kern data */
+ /* we only support kern data, so ... */
+ /* fall through */
case AFM_TOKEN_ENDFONTMETRICS:
return FT_Err_Ok;
diff --git a/freetype/src/psaux/afmparse.h b/freetype/src/psaux/afmparse.h
index 86f852a2..2ceb7755 100644
--- a/freetype/src/psaux/afmparse.h
+++ b/freetype/src/psaux/afmparse.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* afmparse.h */
-/* */
-/* AFM parser (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * afmparse.h
+ *
+ * AFM parser (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/psaux/cffdecode.c b/freetype/src/psaux/cffdecode.c
index 80d622c0..17cccf81 100644
--- a/freetype/src/psaux/cffdecode.c
+++ b/freetype/src/psaux/cffdecode.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffdecode.c */
-/* */
-/* PostScript CFF (Type 2) decoding routines (body). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffdecode.c
+ *
+ * PostScript CFF (Type 2) decoding routines (body).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -28,14 +28,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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_cffdecode
+#define FT_COMPONENT cffdecode
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
@@ -235,8 +235,8 @@
return FT_THROW( Syntax_Error );
}
- adx += decoder->builder.left_bearing.x;
- ady += decoder->builder.left_bearing.y;
+ adx = ADD_LONG( adx, decoder->builder.left_bearing.x );
+ ady = ADD_LONG( ady, decoder->builder.left_bearing.y );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
/* Incremental fonts don't necessarily have valid charsets. */
@@ -378,23 +378,26 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_compute_bias */
- /* */
- /* <Description> */
- /* Computes the bias value in dependence of the number of glyph */
- /* subroutines. */
- /* */
- /* <Input> */
- /* in_charstring_type :: The `CharstringType' value of the top DICT */
- /* dictionary. */
- /* */
- /* num_subrs :: The number of glyph subroutines. */
- /* */
- /* <Return> */
- /* The bias value. */
+ /**************************************************************************
+ *
+ * @Function:
+ * cff_compute_bias
+ *
+ * @Description:
+ * Computes the bias value in dependence of the number of glyph
+ * subroutines.
+ *
+ * @Input:
+ * in_charstring_type ::
+ * The `CharstringType' value of the top DICT
+ * dictionary.
+ *
+ * num_subrs ::
+ * The number of glyph subroutines.
+ *
+ * @Return:
+ * The bias value.
+ */
static FT_Int
cff_compute_bias( FT_Int in_charstring_type,
FT_UInt num_subrs )
@@ -464,28 +467,32 @@
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_decoder_parse_charstrings */
- /* */
- /* <Description> */
- /* Parses a given Type 2 charstrings program. */
- /* */
- /* <InOut> */
- /* decoder :: The current Type 1 decoder. */
- /* */
- /* <Input> */
- /* charstring_base :: The base of the charstring stream. */
- /* */
- /* charstring_len :: The length in bytes of the charstring stream. */
- /* */
- /* in_dict :: Set to 1 if function is called from top or */
- /* private DICT (needed for Multiple Master CFFs). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * cff_decoder_parse_charstrings
+ *
+ * @Description:
+ * Parses a given Type 2 charstrings program.
+ *
+ * @InOut:
+ * decoder ::
+ * The current Type 1 decoder.
+ *
+ * @Input:
+ * charstring_base ::
+ * The base of the charstring stream.
+ *
+ * charstring_len ::
+ * The length in bytes of the charstring stream.
+ *
+ * in_dict ::
+ * Set to 1 if function is called from top or
+ * private DICT (needed for Multiple Master CFFs).
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
cff_decoder_parse_charstrings( CFF_Decoder* decoder,
FT_Byte* charstring_base,
@@ -543,10 +550,10 @@
FT_Byte v;
- /********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
+ /*********************************************************************
+ *
+ * Decode operator or operand
+ */
v = *ip++;
if ( v >= 32 || v == 28 )
{
@@ -853,6 +860,15 @@
case cff_op_flex1:
case cff_op_callsubr:
case cff_op_callgsubr:
+ /* deprecated opcodes */
+ case cff_op_dotsection:
+ /* invalid Type 1 opcodes */
+ case cff_op_hsbw:
+ case cff_op_closepath:
+ case cff_op_callothersubr:
+ case cff_op_seac:
+ case cff_op_sbw:
+ case cff_op_setcurrentpoint:
goto MM_Error;
default:
@@ -948,10 +964,10 @@
case cff_op_hstemhm:
case cff_op_vstemhm:
/* the number of arguments is always even here */
- FT_TRACE4((
- op == cff_op_hstem ? " hstem\n" :
- ( op == cff_op_vstem ? " vstem\n" :
- ( op == cff_op_hstemhm ? " hstemhm\n" : " vstemhm\n" ) ) ));
+ FT_TRACE4(( "%s\n",
+ op == cff_op_hstem ? " hstem" :
+ ( op == cff_op_vstem ? " vstem" :
+ ( op == cff_op_hstemhm ? " hstemhm" : " vstemhm" ) ) ));
if ( hinter )
hinter->stems( hinter->hints,
@@ -965,7 +981,8 @@
case cff_op_hintmask:
case cff_op_cntrmask:
- FT_TRACE4(( op == cff_op_hintmask ? " hintmask" : " cntrmask" ));
+ FT_TRACE4(( "%s", op == cff_op_hintmask ? " hintmask"
+ : " cntrmask" ));
/* implement vstem when needed -- */
/* the specification doesn't say it, but this also works */
@@ -1078,8 +1095,8 @@
FT_Int phase = ( op == cff_op_hlineto );
- FT_TRACE4(( op == cff_op_hlineto ? " hlineto\n"
- : " vlineto\n" ));
+ FT_TRACE4(( "%s\n", op == cff_op_hlineto ? " hlineto"
+ : " vlineto" ));
if ( num_args < 0 )
goto Stack_Underflow;
@@ -1250,8 +1267,8 @@
FT_Int nargs;
- FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto\n"
- : " hvcurveto\n" ));
+ FT_TRACE4(( "%s\n", op == cff_op_vhcurveto ? " vhcurveto"
+ : " hvcurveto" ));
if ( cff_builder_start_point( builder, x, y ) )
goto Fail;
@@ -1539,9 +1556,9 @@
}
if ( dx < 0 )
- dx = -dx;
+ dx = NEG_LONG( dx );
if ( dy < 0 )
- dy = -dy;
+ dy = NEG_LONG( dy );
/* strange test, but here it is... */
horizontal = ( dx > dy );
@@ -1551,7 +1568,7 @@
x = ADD_LONG( x, args[0] );
y = ADD_LONG( y, args[1] );
cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 3 ) );
+ FT_BOOL( count == 3 ) );
args += 2;
}
@@ -1589,7 +1606,7 @@
x = ADD_LONG( x, args[0] );
y = ADD_LONG( y, args[1] );
cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 4 || count == 1 ) );
+ FT_BOOL( count == 4 || count == 1 ) );
args += 2;
}
@@ -1705,16 +1722,20 @@
break;
case cff_op_random:
- FT_TRACE4(( " random\n" ));
+ {
+ FT_UInt32* randval = in_dict ? &decoder->cff->top_font.random
+ : &decoder->current_subfont->random;
- /* only use the lower 16 bits of `random' */
- /* to generate a number in the range (0;1] */
- args[0] = (FT_Fixed)
- ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
- args++;
- decoder->current_subfont->random =
- cff_random( decoder->current_subfont->random );
+ FT_TRACE4(( " random\n" ));
+
+ /* only use the lower 16 bits of `random' */
+ /* to generate a number in the range (0;1] */
+ args[0] = (FT_Fixed)( ( *randval & 0xFFFF ) + 1 );
+ args++;
+
+ *randval = cff_random( *randval );
+ }
break;
case cff_op_mul:
@@ -1727,7 +1748,10 @@
case cff_op_sqrt:
FT_TRACE4(( " sqrt\n" ));
- if ( args[0] > 0 )
+ /* without upper limit the loop below might not finish */
+ if ( args[0] > 0x7FFFFFFFL )
+ args[0] = 46341;
+ else if ( args[0] > 0 )
{
FT_Fixed root = args[0];
FT_Fixed new_root;
@@ -1800,6 +1824,7 @@
if ( idx >= 0 )
{
+ idx = idx % count;
while ( idx > 0 )
{
FT_Fixed tmp = args[count - 1];
@@ -1814,6 +1839,10 @@
}
else
{
+ /* before C99 it is implementation-defined whether */
+ /* the result of `%' is negative if the first operand */
+ /* is negative */
+ idx = -( NEG_INT( idx ) % count );
while ( idx < 0 )
{
FT_Fixed tmp = args[0];
@@ -1914,6 +1943,7 @@
case cff_op_blend:
/* this operator was removed from the Type2 specification */
/* in version 16-March-2000 */
+ if ( num_designs )
{
FT_Int num_results = (FT_Int)( args[0] >> 16 );
@@ -1923,7 +1953,8 @@
if ( num_results < 0 )
goto Syntax_Error;
- if ( num_results * (FT_Int)num_designs > num_args )
+ if ( num_results > num_args ||
+ num_results * (FT_Int)num_designs > num_args )
goto Stack_Underflow;
/* since we currently don't handle interpolation of multiple */
@@ -1932,6 +1963,8 @@
args -= num_results * ( num_designs - 1 );
num_args -= num_results * ( num_designs - 1 );
}
+ else
+ goto Syntax_Error;
break;
case cff_op_dotsection:
@@ -1998,20 +2031,31 @@
break;
case cff_op_callothersubr:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
+ {
+ FT_Fixed arg;
- FT_TRACE4(( " callothersubr (invalid op)\n" ));
- /* subsequent `pop' operands should add the arguments, */
- /* this is the implementation described for `unknown' other */
- /* subroutines in the Type1 spec. */
- /* */
- /* XXX Fix return arguments (see discussion below). */
- args -= 2 + ( args[-2] >> 16 );
- if ( args < stack )
- goto Stack_Underflow;
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from */
+ /* probably Type 1 to CFF, and some parsers seem to accept */
+ /* it */
+
+ FT_TRACE4(( " callothersubr (invalid op)\n" ));
+
+ /* subsequent `pop' operands should add the arguments, */
+ /* this is the implementation described for `unknown' */
+ /* other subroutines in the Type1 spec. */
+ /* */
+ /* XXX Fix return arguments (see discussion below). */
+
+ arg = 2 + ( args[-2] >> 16 );
+ if ( arg >= CFF_MAX_OPERANDS )
+ goto Stack_Underflow;
+
+ args -= arg;
+ if ( args < stack )
+ goto Stack_Underflow;
+ }
break;
case cff_op_pop:
@@ -2251,28 +2295,34 @@
#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
diff --git a/freetype/src/psaux/cffdecode.h b/freetype/src/psaux/cffdecode.h
index 0d4f5fef..a6691979 100644
--- a/freetype/src/psaux/cffdecode.h
+++ b/freetype/src/psaux/cffdecode.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* cffdecode.h */
-/* */
-/* PostScript CFF (Type 2) decoding routines (specification). */
-/* */
-/* Copyright 2017-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * cffdecode.h
+ *
+ * PostScript CFF (Type 2) decoding routines (specification).
+ *
+ * Copyright (C) 2017-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef CFFDECODE_H_
diff --git a/freetype/src/psaux/module.mk b/freetype/src/psaux/module.mk
index 6584d075..bb0886ab 100644
--- a/freetype/src/psaux/module.mk
+++ b/freetype/src/psaux/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/psarrst.c b/freetype/src/psaux/psarrst.c
index a8780947..011803b4 100644
--- a/freetype/src/psaux/psarrst.c
+++ b/freetype/src/psaux/psarrst.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psarrst.c */
-/* */
-/* Adobe's code for Array Stacks (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psarrst.c
+ *
+ * Adobe's code for Array Stacks (body).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
diff --git a/freetype/src/psaux/psarrst.h b/freetype/src/psaux/psarrst.h
index b3568eb6..098617b2 100644
--- a/freetype/src/psaux/psarrst.h
+++ b/freetype/src/psaux/psarrst.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psarrst.h */
-/* */
-/* Adobe's code for Array Stacks (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psarrst.h
+ *
+ * Adobe's code for Array Stacks (specification).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSARRST_H_
diff --git a/freetype/src/psaux/psaux.c b/freetype/src/psaux/psaux.c
index fb447fcd..1db04625 100644
--- a/freetype/src/psaux/psaux.c
+++ b/freetype/src/psaux/psaux.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psaux.c */
-/* */
-/* FreeType auxiliary PostScript driver component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType auxiliary PostScript driver component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/psaux/psauxerr.h b/freetype/src/psaux/psauxerr.h
index cc33fd2e..523e1886 100644
--- a/freetype/src/psaux/psauxerr.h
+++ b/freetype/src/psaux/psauxerr.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* psauxerr.h */
-/* */
-/* PS auxiliary module error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * psauxerr.h
+ *
+ * PS auxiliary module error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/psaux/psauxmod.c b/freetype/src/psaux/psauxmod.c
index ee497085..5df8e690 100644
--- a/freetype/src/psaux/psauxmod.c
+++ b/freetype/src/psaux/psauxmod.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psauxmod.c */
-/* */
-/* FreeType auxiliary PostScript module implementation (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psauxmod.c
+ *
+ * FreeType auxiliary PostScript module implementation (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
diff --git a/freetype/src/psaux/psauxmod.h b/freetype/src/psaux/psauxmod.h
index f30978f0..a0eda0bf 100644
--- a/freetype/src/psaux/psauxmod.h
+++ b/freetype/src/psaux/psauxmod.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psauxmod.h */
-/* */
-/* FreeType auxiliary PostScript module implementation (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psauxmod.h
+ *
+ * FreeType auxiliary PostScript module implementation (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,10 +28,6 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
FT_CALLBACK_TABLE
const CFF_Builder_FuncsRec cff_builder_funcs;
diff --git a/freetype/src/psaux/psblues.c b/freetype/src/psaux/psblues.c
index ae39d03c..89738ce4 100644
--- a/freetype/src/psaux/psblues.c
+++ b/freetype/src/psaux/psblues.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psblues.c */
-/* */
-/* Adobe's code for handling Blue Zones (body). */
-/* */
-/* Copyright 2009-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psblues.c
+ *
+ * Adobe's code for handling Blue Zones (body).
+ *
+ * Copyright 2009-2014 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -44,14 +44,14 @@
#include "psfont.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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2blues
+#define FT_COMPONENT cf2blues
/*
@@ -452,13 +452,13 @@
* zones in the same pass (see `BlueLock'). If a hint is captured,
* return true and position the edge(s) in one of 3 ways:
*
- * 1) If `BlueScale' suppresses overshoot, position the captured edge
- * at the flat edge of the zone.
- * 2) If overshoot is not suppressed and `BlueShift' requires
- * overshoot, position the captured edge a minimum of 1 device pixel
- * from the flat edge.
- * 3) If overshoot is not suppressed or required, position the captured
- * edge at the nearest device pixel.
+ * 1) If `BlueScale' suppresses overshoot, position the captured edge
+ * at the flat edge of the zone.
+ * 2) If overshoot is not suppressed and `BlueShift' requires
+ * overshoot, position the captured edge a minimum of 1 device pixel
+ * from the flat edge.
+ * 3) If overshoot is not suppressed or required, position the captured
+ * edge at the nearest device pixel.
*
*/
FT_LOCAL_DEF( FT_Bool )
diff --git a/freetype/src/psaux/psblues.h b/freetype/src/psaux/psblues.h
index 25ef6849..55fb88ec 100644
--- a/freetype/src/psaux/psblues.h
+++ b/freetype/src/psaux/psblues.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psblues.h */
-/* */
-/* Adobe's code for handling Blue Zones (specification). */
-/* */
-/* Copyright 2009-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psblues.h
+ *
+ * Adobe's code for handling Blue Zones (specification).
+ *
+ * Copyright 2009-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
/*
diff --git a/freetype/src/psaux/psconv.c b/freetype/src/psaux/psconv.c
index a0338500..c8876168 100644
--- a/freetype/src/psaux/psconv.c
+++ b/freetype/src/psaux/psconv.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psconv.c */
-/* */
-/* Some convenience conversions (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psconv.c
+ *
+ * Some convenience conversions (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -24,14 +24,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_psconv
+#define FT_COMPONENT psconv
/* The following array is used by various functions to quickly convert */
diff --git a/freetype/src/psaux/psconv.h b/freetype/src/psaux/psconv.h
index d643ffcf..6b24bf6f 100644
--- a/freetype/src/psaux/psconv.h
+++ b/freetype/src/psaux/psconv.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psconv.h */
-/* */
-/* Some convenience conversions (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psconv.h
+ *
+ * Some convenience conversions (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/psaux/pserror.c b/freetype/src/psaux/pserror.c
index 9169e522..98cebcf7 100644
--- a/freetype/src/psaux/pserror.c
+++ b/freetype/src/psaux/pserror.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* pserror.c */
-/* */
-/* Adobe's code for error handling (body). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pserror.c
+ *
+ * Adobe's code for error handling (body).
+ *
+ * Copyright 2006-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
diff --git a/freetype/src/psaux/pserror.h b/freetype/src/psaux/pserror.h
index 13d52062..b2156b33 100644
--- a/freetype/src/psaux/pserror.h
+++ b/freetype/src/psaux/pserror.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* pserror.h */
-/* */
-/* Adobe's code for error handling (specification). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pserror.h
+ *
+ * Adobe's code for error handling (specification).
+ *
+ * Copyright 2006-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSERROR_H_
diff --git a/freetype/src/psaux/psfixed.h b/freetype/src/psaux/psfixed.h
index 219589e7..7dff9ef1 100644
--- a/freetype/src/psaux/psfixed.h
+++ b/freetype/src/psaux/psfixed.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psfixed.h */
-/* */
-/* Adobe's code for Fixed Point Mathematics (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psfixed.h
+ *
+ * Adobe's code for Fixed Point Mathematics (specification only).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSFIXED_H_
@@ -72,8 +72,7 @@ FT_BEGIN_HEADER
#define cf2_fixedFraction( x ) \
( (x) - cf2_fixedFloor( x ) )
#define cf2_fracToFixed( x ) \
- ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 ) \
- : ( ( (x) + 0x2000 ) >> 14 ) )
+ ( ( (x) + 0x2000 - ( (x) < 0 ) ) >> 14 )
/* signed numeric types */
diff --git a/freetype/src/psaux/psfont.c b/freetype/src/psaux/psfont.c
index dde67a73..00e42108 100644
--- a/freetype/src/psaux/psfont.c
+++ b/freetype/src/psaux/psfont.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psfont.c */
-/* */
-/* Adobe's code for font instances (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psfont.c
+ *
+ * Adobe's code for font instances (body).
+ *
+ * Copyright 2007-2014 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include <ft2build.h>
@@ -274,9 +274,6 @@
if ( !font->isT1 )
{
- FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)font->cffload;
-
-
/* check for variation vectors */
vstore = cf2_getVStore( decoder );
hasVariations = ( vstore->dataCount != 0 );
@@ -284,6 +281,9 @@
if ( hasVariations )
{
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)font->cffload;
+
+
/* check whether Private DICT in this subfont needs to be reparsed */
font->error = cf2_getNormalizedVector( decoder,
&lenNormalizedV,
@@ -331,7 +331,7 @@
}
/* copy hinted flag on each call */
- font->hinted = (FT_Bool)( font->renderingFlags & CF2_FlagsHinted );
+ font->hinted = FT_BOOL( font->renderingFlags & CF2_FlagsHinted );
/* determine if transform has changed; */
/* include Fontmatrix but ignore translation */
@@ -366,7 +366,7 @@
if ( font->stemDarkened != ( font->renderingFlags & CF2_FlagsDarkened ) )
{
font->stemDarkened =
- (FT_Bool)( font->renderingFlags & CF2_FlagsDarkened );
+ FT_BOOL( font->renderingFlags & CF2_FlagsDarkened );
/* blue zones depend on darkened flag */
needExtraSetup = TRUE;
diff --git a/freetype/src/psaux/psfont.h b/freetype/src/psaux/psfont.h
index e611ac4b..8fbacbb6 100644
--- a/freetype/src/psaux/psfont.h
+++ b/freetype/src/psaux/psfont.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psfont.h */
-/* */
-/* Adobe's code for font instances (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psfont.h
+ *
+ * Adobe's code for font instances (specification).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSFONT_H_
diff --git a/freetype/src/psaux/psft.c b/freetype/src/psaux/psft.c
index 1f750174..54be4683 100644
--- a/freetype/src/psaux/psft.c
+++ b/freetype/src/psaux/psft.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psft.c */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (body). */
-/* */
-/* Copyright 2013-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psft.c
+ *
+ * FreeType Glue Component to Adobe's Interpreter (body).
+ *
+ * Copyright 2013-2014 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -120,12 +120,12 @@
}
- /********************************************/
- /* */
- /* functions for handling client outline; */
- /* FreeType uses coordinates in 26.6 format */
- /* */
- /********************************************/
+ /*********************************************
+ *
+ * functions for handling client outline;
+ * FreeType uses coordinates in 26.6 format
+ *
+ */
static void
cf2_builder_moveTo( CF2_OutlineCallbacks callbacks,
@@ -767,13 +767,14 @@
cf2_freeT1SeacComponent( PS_Decoder* decoder,
CF2_Buffer buf )
{
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+
T1_Face face;
FT_Data data;
FT_ASSERT( decoder );
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
face = (T1_Face)decoder->builder.face;
data.pointer = buf->start;
@@ -783,7 +784,13 @@
face->root.internal->incremental_interface->funcs->free_glyph_data(
face->root.internal->incremental_interface->object,
&data );
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
+
+#else /* !FT_CONFIG_OPTION_INCREMENTAL */
+
+ FT_UNUSED( decoder );
+ FT_UNUSED( buf );
+
+#endif /* !FT_CONFIG_OPTION_INCREMENTAL */
}
diff --git a/freetype/src/psaux/psft.h b/freetype/src/psaux/psft.h
index ab172110..4c930f0d 100644
--- a/freetype/src/psaux/psft.h
+++ b/freetype/src/psaux/psft.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psft.h */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (specification). */
-/* */
-/* Copyright 2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psft.h
+ *
+ * FreeType Glue Component to Adobe's Interpreter (specification).
+ *
+ * Copyright 2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSFT_H_
diff --git a/freetype/src/psaux/psglue.h b/freetype/src/psaux/psglue.h
index 5545e12a..022aafbf 100644
--- a/freetype/src/psaux/psglue.h
+++ b/freetype/src/psaux/psglue.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psglue.h */
-/* */
-/* Adobe's code for shared stuff (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psglue.h
+ *
+ * Adobe's code for shared stuff (specification only).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSGLUE_H_
diff --git a/freetype/src/psaux/pshints.c b/freetype/src/psaux/pshints.c
index 36151964..1cbecd2b 100644
--- a/freetype/src/psaux/pshints.c
+++ b/freetype/src/psaux/pshints.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* pshints.c */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshints.c
+ *
+ * Adobe's code for handling CFF hints (body).
+ *
+ * Copyright 2007-2014 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -45,14 +45,14 @@
#include "psintrp.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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2hints
+#define FT_COMPONENT cf2hints
typedef struct CF2_HintMoveRec_
@@ -217,52 +217,49 @@
FT_LOCAL_DEF( FT_Bool )
cf2_hint_isValid( const CF2_Hint hint )
{
- return (FT_Bool)( hint->flags != 0 );
+ return FT_BOOL( hint->flags );
}
static FT_Bool
cf2_hint_isPair( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_PairTop ) ) != 0 );
+ return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_PairTop ) );
}
static FT_Bool
cf2_hint_isPairTop( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags & CF2_PairTop ) != 0 );
+ return FT_BOOL( hint->flags & CF2_PairTop );
}
FT_LOCAL_DEF( FT_Bool )
cf2_hint_isTop( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairTop | CF2_GhostTop ) ) != 0 );
+ return FT_BOOL( hint->flags & ( CF2_PairTop | CF2_GhostTop ) );
}
FT_LOCAL_DEF( FT_Bool )
cf2_hint_isBottom( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_GhostBottom ) ) != 0 );
+ return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_GhostBottom ) );
}
static FT_Bool
cf2_hint_isLocked( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags & CF2_Locked ) != 0 );
+ return FT_BOOL( hint->flags & CF2_Locked );
}
static FT_Bool
cf2_hint_isSynthetic( const CF2_Hint hint )
{
- return (FT_Bool)( ( hint->flags & CF2_Synthetic ) != 0 );
+ return FT_BOOL( hint->flags & CF2_Synthetic );
}
@@ -334,7 +331,7 @@
cf2_hintmap_map( CF2_HintMap hintmap,
CF2_Fixed csCoord )
{
- if ( hintmap->count == 0 || ! hintmap->hinted )
+ if ( hintmap->count == 0 || !hintmap->hinted )
{
/* there are no hints; use uniform scale and zero offset */
return FT_MulFix( csCoord, hintmap->scale );
@@ -497,7 +494,7 @@
{
move = moveDown;
/* true if non-optimum move */
- saveEdge = (FT_Bool)( moveUp < -moveDown );
+ saveEdge = FT_BOOL( moveUp < -moveDown );
}
else
{
@@ -1025,10 +1022,10 @@
}
}
- FT_TRACE6(( initialMap ? "flags: [p]air [g]host [t]op "
- "[b]ottom [L]ocked [S]ynthetic\n"
- "Initial hintmap\n"
- : "Hints:\n" ));
+ FT_TRACE6(( "%s\n", initialMap ? "flags: [p]air [g]host [t]op"
+ " [b]ottom [L]ocked [S]ynthetic\n"
+ "Initial hintmap"
+ : "Hints:" ));
cf2_hintmap_dump( hintmap );
/*
@@ -1215,7 +1212,7 @@
* (`u').
*
* See notation in
- * http://softsurfer.com/Archive/algorithm_0104/algorithm_0104B.htm.
+ * http://geomalgorithms.com/a05-_intersect-1.html.
* Calculations are done in 16.16, but must handle the squaring of
* line lengths in character space. We scale all vectors by 1/32 to
* avoid overflow. This allows values up to 4095 to be squared. The
diff --git a/freetype/src/psaux/pshints.h b/freetype/src/psaux/pshints.h
index 92e37e98..31a82303 100644
--- a/freetype/src/psaux/pshints.h
+++ b/freetype/src/psaux/pshints.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* pshints.h */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshints.h
+ *
+ * Adobe's code for handling CFF hints (body).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSHINT_H_
diff --git a/freetype/src/psaux/psintrp.c b/freetype/src/psaux/psintrp.c
index 65a802d9..fa0f9b22 100644
--- a/freetype/src/psaux/psintrp.c
+++ b/freetype/src/psaux/psintrp.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psintrp.c */
-/* */
-/* Adobe's CFF Interpreter (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psintrp.c
+ *
+ * Adobe's CFF Interpreter (body).
+ *
+ * Copyright 2007-2014 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -52,14 +52,14 @@
#include "t1decode.h" /* for t1 seac */
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2interp
+#define FT_COMPONENT cf2interp
FT_LOCAL_DEF( void )
@@ -287,7 +287,7 @@
{
CF2_UInt i;
CF2_UInt count = cf2_stack_count( opStack );
- FT_Bool hasWidthArg = (FT_Bool)( count & 1 );
+ FT_Bool hasWidthArg = FT_BOOL( count & 1 );
/* variable accumulates delta values from operand stack */
CF2_Fixed position = hintOffset;
@@ -364,7 +364,7 @@
if ( doConditionalLastRead )
{
- FT_Bool lastIsX = (FT_Bool)(
+ FT_Bool lastIsX = FT_BOOL(
cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) >
cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) );
CF2_Fixed lastVal = cf2_stack_getReal( opStack, idx );
@@ -612,14 +612,14 @@
cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
- *charstring = *buf; /* structure copy */
-
- charstringIndex = 0; /* entry is valid now */
/* catch errors so far */
if ( *error )
goto exit;
+ *charstring = *buf; /* structure copy */
+ charstringIndex = 0; /* entry is valid now */
+
/* main interpreter loop */
while ( 1 )
{
@@ -663,6 +663,7 @@
/* Skip outline commands first time round. */
/* `endchar' will trigger initial hintmap build */
/* and rewind the charstring. */
+ FT_TRACE4(( " <outline command skipped>\n" ));
cf2_stack_clear( opStack );
continue;
}
@@ -775,7 +776,8 @@
case cf2_cmdHSTEMHM:
case cf2_cmdHSTEM:
- FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
+ FT_TRACE4(( "%s\n", op1 == cf2_cmdHSTEMHM ? " hstemhm"
+ : " hstem" ));
if ( !font->isT1 )
{
@@ -805,7 +807,8 @@
case cf2_cmdVSTEMHM:
case cf2_cmdVSTEM:
- FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
+ FT_TRACE4(( "%s\n", op1 == cf2_cmdVSTEMHM ? " vstemhm"
+ : " vstem" ));
if ( !font->isT1 )
{
@@ -888,7 +891,7 @@
FT_Bool isX = FT_BOOL( op1 == cf2_cmdHLINETO );
- FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
+ FT_TRACE4(( "%s\n", isX ? " hlineto" : " vlineto" ));
for ( idx = 0; idx < count; idx++ )
{
@@ -916,8 +919,8 @@
CF2_UInt idx = 0;
- FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
- : " rrcurveto\n" ));
+ FT_TRACE4(( "%s\n", op1 == cf2_cmdRCURVELINE ? " rcurveline"
+ : " rrcurveto" ));
while ( idx + 6 <= count )
{
@@ -957,10 +960,11 @@
FT_TRACE4(( " unknown op (%d)\n", op1 ));
else
{
- FT_TRACE4(( " closepath" ));
+ FT_TRACE4(( " closepath\n" ));
/* if there is no path, `closepath' is a no-op */
cf2_glyphpath_closeOpenPath( &glyphPath );
+
haveWidth = TRUE;
}
break;
@@ -971,8 +975,8 @@
CF2_Int subrNum;
- FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
- : " callsubr" ));
+ FT_TRACE4(( "%s", op1 == cf2_cmdCALLGSUBR ? " callgsubr"
+ : " callsubr" ));
if ( ( !font->isT1 && charstringIndex > CF2_MAX_SUBR ) ||
( font->isT1 && charstringIndex > T1_MAX_SUBRS_CALLS ) )
@@ -1211,8 +1215,8 @@
FT_Bool isV = FT_BOOL( op2 == cf2_escVSTEM3 );
- FT_TRACE4(( isV ? " vstem3\n"
- : " hstem3\n" ));
+ FT_TRACE4(( "%s\n", isV ? " vstem3"
+ : " hstem3" ));
FT_ASSERT( cf2_stack_count( opStack ) == 6 );
@@ -1653,16 +1657,17 @@
subr_no = cf2_stack_popInt( opStack );
arg_cnt = cf2_stack_popInt( opStack );
- /*******************************************************/
- /* */
- /* 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 */
+ /********************************************************
+ *
+ * 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
+ */
count = cf2_stack_count( opStack );
FT_ASSERT( (CF2_UInt)arg_cnt <= count );
@@ -2425,7 +2430,7 @@
PS_Builder* builder;
- FT_TRACE4(( " hsbw" ));
+ FT_TRACE4(( " hsbw\n" ));
builder = &decoder->builder;
@@ -2571,7 +2576,7 @@
case cf2_cmdHINTMASK:
/* the final \n in the tracing message gets added in */
/* `cf2_hintmask_read' (which also traces the mask bytes) */
- FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
+ FT_TRACE4(( "%s", op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
/* never add hints after the mask is computed */
if ( cf2_stack_count( opStack ) > 1 &&
@@ -2837,7 +2842,7 @@
count = count1 & ~2U;
idx += count1 - count;
- FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
+ FT_TRACE4(( "%s\n", alternate ? " hvcurveto" : " vhcurveto" ));
while ( idx < count )
{
diff --git a/freetype/src/psaux/psintrp.h b/freetype/src/psaux/psintrp.h
index 4790aaa3..669c09c0 100644
--- a/freetype/src/psaux/psintrp.h
+++ b/freetype/src/psaux/psintrp.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psintrp.h */
-/* */
-/* Adobe's CFF Interpreter (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psintrp.h
+ *
+ * Adobe's CFF Interpreter (specification).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSINTRP_H_
diff --git a/freetype/src/psaux/psobjs.c b/freetype/src/psaux/psobjs.c
index f54bc7e4..8bfdb923 100644
--- a/freetype/src/psaux/psobjs.c
+++ b/freetype/src/psaux/psobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psobjs.c */
-/* */
-/* Auxiliary functions for PostScript fonts (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psobjs.c
+ *
+ * Auxiliary functions for PostScript fonts (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -29,14 +29,14 @@
#include "psauxmod.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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT psobjs
/*************************************************************************/
@@ -47,26 +47,29 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -144,33 +147,37 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ps_table_add
+ *
+ * @Description:
+ * Adds an object to a PS_Table, possibly growing its memory block.
+ *
+ * @InOut:
+ * table ::
+ * The target table.
+ *
+ * @Input:
+ * idx ::
+ * The index of the object in the table.
+ *
+ * object ::
+ * The address of the object to copy in memory.
+ *
+ * length ::
+ * The length in bytes of the source object.
+ *
+ * @Return:
+ * FreeType error code. 0 means success. An error is returned if a
+ * reallocation fails.
+ */
FT_LOCAL_DEF( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length )
+ ps_table_add( PS_Table table,
+ FT_Int idx,
+ const void* object,
+ FT_UInt length )
{
if ( idx < 0 || idx >= table->max_elems )
{
@@ -216,22 +223,23 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -498,12 +506,12 @@
}
- /***********************************************************************/
- /* */
- /* All exported parsing routines handle leading whitespace and stop at */
- /* the first character which isn't part of the just handled token. */
- /* */
- /***********************************************************************/
+ /************************************************************************
+ *
+ * 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 )
@@ -1100,18 +1108,22 @@
{
case T1_FIELD_TYPE_BOOL:
val = ps_tobool( &cur, limit );
+ FT_TRACE4(( " %s", val ? "true" : "false" ));
goto Store_Integer;
case T1_FIELD_TYPE_FIXED:
val = PS_Conv_ToFixed( &cur, limit, 0 );
+ FT_TRACE4(( " %f", (double)val / 65536 ));
goto Store_Integer;
case T1_FIELD_TYPE_FIXED_1000:
val = PS_Conv_ToFixed( &cur, limit, 3 );
+ FT_TRACE4(( " %f", (double)val / 65536 / 1000 ));
goto Store_Integer;
case T1_FIELD_TYPE_INTEGER:
val = PS_Conv_ToInt( &cur, limit );
+ FT_TRACE4(( " %ld", val ));
/* fall through */
Store_Integer:
@@ -1188,6 +1200,13 @@
FT_MEM_COPY( string, cur, len );
string[len] = 0;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( token.type == T1_TOKEN_TYPE_STRING )
+ FT_TRACE4(( " (%s)", string ));
+ else
+ FT_TRACE4(( " /%s", string ));
+#endif
+
*(FT_String**)q = string;
}
break;
@@ -1213,6 +1232,12 @@
bbox->yMin = FT_RoundFix( temp[1] );
bbox->xMax = FT_RoundFix( temp[2] );
bbox->yMax = FT_RoundFix( temp[3] );
+
+ FT_TRACE4(( " [%d %d %d %d]",
+ bbox->xMin / 65536,
+ bbox->yMin / 65536,
+ bbox->xMax / 65536,
+ bbox->yMax / 65536 ));
}
break;
@@ -1251,6 +1276,7 @@
skip_spaces( &cur, limit );
}
+ FT_TRACE4(( " [" ));
for ( i = 0; i < max_objects; i++ )
{
FT_BBox* bbox = (FT_BBox*)objects[i];
@@ -1260,7 +1286,14 @@
bbox->yMin = FT_RoundFix( temp[i + max_objects] );
bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] );
bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] );
+
+ FT_TRACE4(( " [%d %d %d %d]",
+ bbox->xMin / 65536,
+ bbox->yMin / 65536,
+ bbox->xMax / 65536,
+ bbox->yMax / 65536 ));
}
+ FT_TRACE4(( "]" ));
FT_FREE( temp );
}
@@ -1333,6 +1366,8 @@
*(FT_Byte*)( (FT_Byte*)objects[0] + field->count_offset ) =
(FT_Byte)num_elements;
+ FT_TRACE4(( " [" ));
+
/* we now load each element, adjusting the field.offset on each one */
token = elements;
for ( ; num_elements > 0; num_elements--, token++ )
@@ -1351,6 +1386,8 @@
fieldrec.offset += fieldrec.size;
}
+ FT_TRACE4(( "]" ));
+
#if 0 /* obsolete -- keep for reference */
if ( pflags )
*pflags |= 1L << field->flag_bit;
@@ -1410,6 +1447,8 @@
bytes,
max_bytes );
+ parser->cursor = cur;
+
if ( delimiters )
{
if ( cur < parser->limit && *cur != '>' )
@@ -1419,11 +1458,9 @@
goto Exit;
}
- cur++;
+ parser->cursor++;
}
- parser->cursor = cur;
-
Exit:
return error;
}
@@ -1509,26 +1546,31 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1572,19 +1614,20 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -1769,26 +1812,31 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ */
FT_LOCAL_DEF( void )
cff_builder_init( CFF_Builder* builder,
TT_Face face,
@@ -1841,19 +1889,20 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ */
FT_LOCAL_DEF( void )
cff_builder_done( CFF_Builder* builder )
{
@@ -1993,6 +2042,14 @@
first = outline->n_contours <= 1
? 0 : outline->contours[outline->n_contours - 2] + 1;
+ /* in malformed fonts it can happen that a contour was started */
+ /* but no points were added */
+ if ( outline->n_contours && first == outline->n_points )
+ {
+ outline->n_contours--;
+ return;
+ }
+
/* We must not include the last point in the path if it */
/* is located on the first point. */
if ( outline->n_points > 1 )
@@ -2033,26 +2090,31 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ps_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 )
ps_builder_init( PS_Builder* ps_builder,
void* builder,
@@ -2116,19 +2178,20 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ps_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 )
ps_builder_done( PS_Builder* builder )
{
@@ -2336,23 +2399,26 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_decoder_init */
- /* */
- /* <Description> */
- /* Creates a wrapper decoder for use in the combined */
- /* Type 1 / CFF interpreter. */
- /* */
- /* <InOut> */
- /* ps_decoder :: A pointer to the decoder to initialize. */
- /* */
- /* <Input> */
- /* decoder :: A pointer to the original decoder. */
- /* */
- /* is_t1 :: Flag indicating Type 1 or CFF */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ps_decoder_init
+ *
+ * @Description:
+ * Creates a wrapper decoder for use in the combined
+ * Type 1 / CFF interpreter.
+ *
+ * @InOut:
+ * ps_decoder ::
+ * A pointer to the decoder to initialize.
+ *
+ * @Input:
+ * decoder ::
+ * A pointer to the original decoder.
+ *
+ * is_t1 ::
+ * Flag indicating Type 1 or CFF
+ */
FT_LOCAL_DEF( void )
ps_decoder_init( PS_Decoder* ps_decoder,
void* decoder,
diff --git a/freetype/src/psaux/psobjs.h b/freetype/src/psaux/psobjs.h
index 8e0fe5fa..c44dc450 100644
--- a/freetype/src/psaux/psobjs.h
+++ b/freetype/src/psaux/psobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psobjs.h */
-/* */
-/* Auxiliary functions for PostScript fonts (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psobjs.h
+ *
+ * Auxiliary functions for PostScript fonts (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -53,10 +53,10 @@ FT_BEGIN_HEADER
FT_Memory memory );
FT_LOCAL( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length );
+ ps_table_add( PS_Table table,
+ FT_Int idx,
+ const void* object,
+ FT_UInt length );
FT_LOCAL( void )
ps_table_done( PS_Table table );
diff --git a/freetype/src/psaux/psread.c b/freetype/src/psaux/psread.c
index 719863ce..86bfc03c 100644
--- a/freetype/src/psaux/psread.c
+++ b/freetype/src/psaux/psread.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psread.c */
-/* */
-/* Adobe's code for stream handling (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psread.c
+ *
+ * Adobe's code for stream handling (body).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -105,7 +105,7 @@
FT_LOCAL_DEF( FT_Bool )
cf2_buf_isEnd( CF2_Buffer buf )
{
- return (FT_Bool)( buf->ptr >= buf->end );
+ return FT_BOOL( buf->ptr >= buf->end );
}
diff --git a/freetype/src/psaux/psread.h b/freetype/src/psaux/psread.h
index 464b29ba..9e55fe04 100644
--- a/freetype/src/psaux/psread.h
+++ b/freetype/src/psaux/psread.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psread.h */
-/* */
-/* Adobe's code for stream handling (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psread.h
+ *
+ * Adobe's code for stream handling (specification).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSREAD_H_
diff --git a/freetype/src/psaux/psstack.c b/freetype/src/psaux/psstack.c
index 69d06334..66590680 100644
--- a/freetype/src/psaux/psstack.c
+++ b/freetype/src/psaux/psstack.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psstack.c */
-/* */
-/* Adobe's code for emulating a CFF stack (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psstack.c
+ *
+ * Adobe's code for emulating a CFF stack (body).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#include "psft.h"
@@ -258,6 +258,9 @@
return;
}
+ /* before C99 it is implementation-defined whether */
+ /* the result of `%' is negative if the first operand */
+ /* is negative */
if ( shift < 0 )
shift = -( ( -shift ) % count );
else
diff --git a/freetype/src/psaux/psstack.h b/freetype/src/psaux/psstack.h
index 38f7b41c..18cd39bc 100644
--- a/freetype/src/psaux/psstack.h
+++ b/freetype/src/psaux/psstack.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* psstack.h */
-/* */
-/* Adobe's code for emulating a CFF stack (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psstack.h
+ *
+ * Adobe's code for emulating a CFF stack (specification).
+ *
+ * Copyright 2007-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSSTACK_H_
diff --git a/freetype/src/psaux/pstypes.h b/freetype/src/psaux/pstypes.h
index dfbaa3d4..041287e8 100644
--- a/freetype/src/psaux/pstypes.h
+++ b/freetype/src/psaux/pstypes.h
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* pstypes.h */
-/* */
-/* Adobe's code for defining data types (specification only). */
-/* */
-/* Copyright 2011-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pstypes.h
+ *
+ * Adobe's code for defining data types (specification only).
+ *
+ * Copyright 2011-2013 Adobe Systems Incorporated.
+ *
+ * This software, and all works of authorship, whether in source or
+ * object code form as indicated by the copyright notice(s) included
+ * herein (collectively, the "Work") is made available, and may only be
+ * used, modified, and distributed under the FreeType Project License,
+ * LICENSE.TXT. Additionally, subject to the terms and conditions of the
+ * FreeType Project License, each contributor to the Work hereby grants
+ * to any individual or legal entity exercising permissions granted by
+ * the FreeType Project License and this section (hereafter, "You" or
+ * "Your") a perpetual, worldwide, non-exclusive, no-charge,
+ * royalty-free, irrevocable (except as stated in this section) patent
+ * license to make, have made, use, offer to sell, sell, import, and
+ * otherwise transfer the Work, where such license applies only to those
+ * patent claims licensable by such contributor that are necessarily
+ * infringed by their contribution(s) alone or by combination of their
+ * contribution(s) with the Work to which such contribution(s) was
+ * submitted. If You institute patent litigation against any entity
+ * (including a cross-claim or counterclaim in a lawsuit) alleging that
+ * the Work or a contribution incorporated within the Work constitutes
+ * direct or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate as of
+ * the date such litigation is filed.
+ *
+ * By using, modifying, or distributing the Work you indicate that you
+ * have read and understood the terms and conditions of the
+ * FreeType Project License as well as those provided in this section,
+ * and you accept them fully.
+ *
+ */
#ifndef PSTYPES_H_
diff --git a/freetype/src/psaux/rules.mk b/freetype/src/psaux/rules.mk
index a87bfe96..2de734d5 100644
--- a/freetype/src/psaux/rules.mk
+++ b/freetype/src/psaux/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/t1cmap.c b/freetype/src/psaux/t1cmap.c
index 112a7892..d62d2d5c 100644
--- a/freetype/src/psaux/t1cmap.c
+++ b/freetype/src/psaux/t1cmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1cmap.c */
-/* */
-/* Type 1 character map support (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1cmap.c
+ *
+ * Type 1 character map support (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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"
@@ -305,6 +305,9 @@
FT_UNUSED( pointer );
+ if ( !psnames->unicodes_init )
+ return FT_THROW( Unimplemented_Feature );
+
return psnames->unicodes_init( memory,
unicodes,
(FT_UInt)face->type1.num_glyphs,
diff --git a/freetype/src/psaux/t1cmap.h b/freetype/src/psaux/t1cmap.h
index 4308e31d..d325e7b5 100644
--- a/freetype/src/psaux/t1cmap.h
+++ b/freetype/src/psaux/t1cmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1cmap.h */
-/* */
-/* Type 1 character map support (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1cmap.h
+ *
+ * Type 1 character map support (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/psaux/t1decode.c b/freetype/src/psaux/t1decode.c
index 6ad14566..c2b3729b 100644
--- a/freetype/src/psaux/t1decode.c
+++ b/freetype/src/psaux/t1decode.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1decode.c */
-/* */
-/* PostScript Type 1 decoding routines (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1decode.c
+ *
+ * PostScript Type 1 decoding routines (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,14 +31,14 @@
/* ensure proper sign extension */
#define Fix2Int( f ) ( (FT_Int)(FT_Short)( (f) >> 16 ) )
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1decode
typedef enum T1_Operator_
@@ -109,24 +109,26 @@
};
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_lookup_glyph_by_stdcharcode_ps */
- /* */
- /* <Description> */
- /* Looks up a given glyph by its StandardEncoding charcode. Used to */
- /* implement the SEAC Type 1 operator in the Adobe engine */
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * t1_lookup_glyph_by_stdcharcode_ps
+ *
+ * @Description:
+ * Looks up a given glyph by its StandardEncoding charcode. Used to
+ * implement the SEAC Type 1 operator in the Adobe engine
+ *
+ * @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.
+ */
FT_LOCAL_DEF( FT_Int )
t1_lookup_glyph_by_stdcharcode_ps( PS_Decoder* decoder,
FT_Int charcode )
@@ -159,24 +161,27 @@
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+
+ /**************************************************************************
+ *
+ * @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 )
@@ -217,30 +222,36 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -399,24 +410,27 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -466,9 +480,6 @@
if ( decoder->buildchar && decoder->len_buildchar > 0 )
FT_ARRAY_ZERO( decoder->buildchar, decoder->len_buildchar );
- FT_TRACE4(( "\n"
- "Start charstring\n" ));
-
zone->base = charstring_base;
limit = zone->limit = charstring_base + charstring_len;
ip = zone->cursor = zone->base;
@@ -503,11 +514,11 @@
}
#endif
- /*********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
- /* */
+ /**********************************************************************
+ *
+ * Decode operator or operand
+ *
+ */
/* first of all, decompress operator or value */
switch ( *ip++ )
@@ -710,11 +721,11 @@
large_int = FALSE;
}
- /*********************************************************************/
- /* */
- /* Push value on stack, or process operator */
- /* */
- /* */
+ /**********************************************************************
+ *
+ * Push value on stack, or process operator
+ *
+ */
if ( op == op_none )
{
if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS )
@@ -752,16 +763,17 @@
subr_no = Fix2Int( top[1] );
arg_cnt = Fix2Int( top[0] );
- /***********************************************************/
- /* */
- /* remove all operands to callothersubr from the stack */
- /* */
- /* for handled othersubrs, where we know the number of */
- /* arguments, we increase the stack by the value of */
- /* known_othersubr_result_cnt */
- /* */
- /* for unhandled othersubrs the following pops adjust the */
- /* stack pointer as necessary */
+ /************************************************************
+ *
+ * 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;
@@ -1223,7 +1235,10 @@
/* the glyph's metrics (lsb + advance width), not load the */
/* rest of it; so exit immediately */
if ( builder->metrics_only )
+ {
+ FT_TRACE4(( "\n" ));
return FT_Err_Ok;
+ }
break;
@@ -1255,7 +1270,10 @@
/* the glyph's metrics (lsb + advance width), not load the */
/* rest of it; so exit immediately */
if ( builder->metrics_only )
+ {
+ FT_TRACE4(( "\n" ));
return FT_Err_Ok;
+ }
break;
@@ -1638,26 +1656,31 @@
return FT_THROW( Stack_Underflow );
}
-#else /* T1_CONFIG_OPTION_OLD_ENGINE */
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_decoder_parse_metrics */
- /* */
- /* <Description> */
- /* Parses a given Type 1 charstrings program to extract width */
- /* */
- /* <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. */
- /* */
+
+#else /* !T1_CONFIG_OPTION_OLD_ENGINE */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * t1_decoder_parse_metrics
+ *
+ * @Description:
+ * Parses a given Type 1 charstrings program to extract width
+ *
+ * @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_metrics( T1_Decoder decoder,
FT_Byte* charstring_base,
@@ -1680,9 +1703,6 @@
builder->parse_state = T1_Parse_Start;
- FT_TRACE4(( "\n"
- "Start charstring: get width\n" ));
-
zone->base = charstring_base;
limit = zone->limit = charstring_base + charstring_len;
ip = zone->cursor = zone->base;
@@ -1703,11 +1723,11 @@
}
#endif
- /*********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
- /* */
+ /**********************************************************************
+ *
+ * Decode operator or operand
+ *
+ */
/* first of all, decompress operator or value */
switch ( *ip++ )
@@ -1817,11 +1837,11 @@
}
}
- /*********************************************************************/
- /* */
- /* Push value on stack, or process operator */
- /* */
- /* */
+ /**********************************************************************
+ *
+ * Push value on stack, or process operator
+ *
+ */
if ( op == op_none )
{
if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS )
@@ -1875,6 +1895,7 @@
/* we only want to compute the glyph's metrics */
/* (lsb + advance width), not load the rest of */
/* it; so exit immediately */
+ FT_TRACE4(( "\n" ));
return FT_Err_Ok;
case op_sbw:
@@ -1893,6 +1914,7 @@
/* we only want to compute the glyph's metrics */
/* (lsb + advance width), not load the rest of */
/* it; so exit immediately */
+ FT_TRACE4(( "\n" ));
return FT_Err_Ok;
default:
@@ -1917,7 +1939,8 @@
Stack_Underflow:
return FT_THROW( Stack_Underflow );
}
-#endif /* T1_CONFIG_OPTION_OLD_ENGINE */
+
+#endif /* !T1_CONFIG_OPTION_OLD_ENGINE */
/* initialize T1 decoder */
@@ -1934,7 +1957,7 @@
{
FT_ZERO( decoder );
- /* retrieve PSNames interface from list of current modules */
+ /* retrieve `psnames' interface from list of current modules */
{
FT_Service_PsCMaps psnames;
diff --git a/freetype/src/psaux/t1decode.h b/freetype/src/psaux/t1decode.h
index 1d9718d6..1b5d6263 100644
--- a/freetype/src/psaux/t1decode.h
+++ b/freetype/src/psaux/t1decode.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1decode.h */
-/* */
-/* PostScript Type 1 decoding routines (specification). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1decode.h
+ *
+ * PostScript Type 1 decoding routines (specification).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pshinter/Jamfile b/freetype/src/pshinter/Jamfile
index 3f5f0ae4..0e44c191 100644
--- a/freetype/src/pshinter/Jamfile
+++ b/freetype/src/pshinter/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pshinter Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pshinter/module.mk b/freetype/src/pshinter/module.mk
index 06707be3..0a12a260 100644
--- a/freetype/src/pshinter/module.mk
+++ b/freetype/src/pshinter/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pshinter/pshalgo.c b/freetype/src/pshinter/pshalgo.c
index b98077c6..0c5ae626 100644
--- a/freetype/src/pshinter/pshalgo.c
+++ b/freetype/src/pshinter/pshalgo.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshalgo.c */
-/* */
-/* PostScript hinting algorithm (body). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshalgo.c
+ *
+ * PostScript hinting algorithm (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,7 +26,7 @@
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshalgo
+#define FT_COMPONENT pshalgo
#ifdef DEBUG_HINTER
@@ -53,8 +53,8 @@
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;
+ return ADD_INT( hint1->org_pos, hint1->org_len ) >= hint2->org_pos &&
+ ADD_INT( hint2->org_pos, hint2->org_len ) >= hint1->org_pos;
}
@@ -479,7 +479,7 @@
if ( dimension == 1 )
psh_blues_snap_stem( &globals->blues,
- hint->org_pos + hint->org_len,
+ ADD_INT( hint->org_pos, hint->org_len ),
hint->org_pos,
&align );
@@ -658,8 +658,8 @@
#if 0 /* not used for now, experimental */
/*
- * A variant to perform "light" hinting (i.e. FT_RENDER_MODE_LIGHT)
- * of stems
+ * A variant to perform "light" hinting (i.e. FT_RENDER_MODE_LIGHT)
+ * of stems
*/
static void
psh_hint_align_light( PSH_Hint hint,
@@ -703,7 +703,7 @@
if ( dimension == 1 )
psh_blues_snap_stem( &globals->blues,
- hint->org_pos + hint->org_len,
+ ADD_INT( hint->org_pos, hint->org_len ),
hint->org_pos,
&align );
@@ -1538,8 +1538,8 @@
PSH_Hint hint = sort[nn];
- if ( org_u >= hint->org_pos &&
- org_u <= hint->org_pos + hint->org_len )
+ if ( org_u >= hint->org_pos &&
+ org_u <= ADD_INT( hint->org_pos, hint->org_len ) )
{
point->hint = hint;
break;
diff --git a/freetype/src/pshinter/pshalgo.h b/freetype/src/pshinter/pshalgo.h
index c50683fb..6859e95c 100644
--- a/freetype/src/pshinter/pshalgo.h
+++ b/freetype/src/pshinter/pshalgo.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshalgo.h */
-/* */
-/* PostScript hinting algorithm (specification). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshalgo.h
+ *
+ * PostScript hinting algorithm (specification).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pshinter/pshglob.c b/freetype/src/pshinter/pshglob.c
index accc0492..b021e6e4 100644
--- a/freetype/src/pshinter/pshglob.c
+++ b/freetype/src/pshinter/pshglob.c
@@ -1,25 +1,26 @@
-/***************************************************************************/
-/* */
-/* pshglob.c */
-/* */
-/* PostScript hinter global hinting management (body). */
-/* Inspired by the new auto-hinter module. */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshglob.c
+ *
+ * PostScript hinter global hinting management (body).
+ * Inspired by the new auto-hinter module.
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.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_CALC_H
#include "pshglob.h"
#ifdef DEBUG_HINTER
@@ -568,7 +569,7 @@
for ( ; count > 0; count--, zone++ )
{
- delta = stem_top - zone->org_bottom;
+ delta = SUB_LONG( stem_top, zone->org_bottom );
if ( delta < -blues->blue_fuzz )
break;
@@ -590,7 +591,7 @@
for ( ; count > 0; count--, zone-- )
{
- delta = zone->org_top - stem_bot;
+ delta = SUB_LONG( zone->org_top, stem_bot );
if ( delta < -blues->blue_fuzz )
break;
diff --git a/freetype/src/pshinter/pshglob.h b/freetype/src/pshinter/pshglob.h
index cf80bf40..0049d4c0 100644
--- a/freetype/src/pshinter/pshglob.h
+++ b/freetype/src/pshinter/pshglob.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshglob.h */
-/* */
-/* PostScript hinter global hinting management. */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshglob.h
+ *
+ * PostScript hinter global hinting management.
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -36,27 +36,27 @@ FT_BEGIN_HEADER
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* @constant: */
- /* PS_GLOBALS_MAX_BLUE_ZONES */
- /* */
- /* @description: */
- /* The maximum number of blue zones in a font global hints structure. */
- /* See @PS_Globals_BluesRec. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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
diff --git a/freetype/src/pshinter/pshinter.c b/freetype/src/pshinter/pshinter.c
index 0eedac45..16c3a0a1 100644
--- a/freetype/src/pshinter/pshinter.c
+++ b/freetype/src/pshinter/pshinter.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshinter.c */
-/* */
-/* FreeType PostScript Hinting module */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType PostScript Hinting module
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -22,7 +22,6 @@
#include "pshalgo.c"
#include "pshglob.c"
#include "pshmod.c"
-#include "pshpic.c"
#include "pshrec.c"
diff --git a/freetype/src/pshinter/pshmod.c b/freetype/src/pshinter/pshmod.c
index 0b8f6f99..2d36ea2a 100644
--- a/freetype/src/pshinter/pshmod.c
+++ b/freetype/src/pshinter/pshmod.c
@@ -1,26 +1,25 @@
-/***************************************************************************/
-/* */
-/* pshmod.c */
-/* */
-/* FreeType PostScript hinter module implementation (body). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshmod.c
+ *
+ * FreeType PostScript hinter module implementation (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include "pshrec.h"
#include "pshalgo.h"
-#include "pshpic.h"
/* the Postscript Hinter module structure */
@@ -111,7 +110,7 @@
0x10000L,
0x20000L,
- &PSHINTER_INTERFACE_GET, /* module-specific interface */
+ &pshinter_interface, /* module-specific interface */
(FT_Module_Constructor)ps_hinter_init, /* module_init */
(FT_Module_Destructor) ps_hinter_done, /* module_done */
diff --git a/freetype/src/pshinter/pshmod.h b/freetype/src/pshinter/pshmod.h
index 556de2fb..ea877130 100644
--- a/freetype/src/pshinter/pshmod.h
+++ b/freetype/src/pshinter/pshmod.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshmod.h */
-/* */
-/* PostScript hinter module interface (specification). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshmod.h
+ *
+ * PostScript hinter module interface (specification).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/pshinter/pshnterr.h b/freetype/src/pshinter/pshnterr.h
index b9d02d29..fb9dbca2 100644
--- a/freetype/src/pshinter/pshnterr.h
+++ b/freetype/src/pshinter/pshnterr.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* pshnterr.h */
-/* */
-/* PS Hinter error codes (specification only). */
-/* */
-/* Copyright 2003-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * pshnterr.h
+ *
+ * PS Hinter error codes (specification only).
+ *
+ * Copyright (C) 2003-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/pshinter/pshpic.c b/freetype/src/pshinter/pshpic.c
deleted file mode 100644
index 465ad318..00000000
--- a/freetype/src/pshinter/pshpic.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.c */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pshpic.h"
-#include "pshnterr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from pshmod.c */
- void
- FT_Init_Class_pshinter_interface( FT_Library library,
- PSHinter_Interface* clazz );
-
- void
- pshinter_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->pshinter )
- {
- FT_FREE( pic_container->pshinter );
- pic_container->pshinter = NULL;
- }
- }
-
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSHinterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->pshinter = container;
-
- /* add call to initialization function when you add new scripts */
- FT_Init_Class_pshinter_interface(
- library, &container->pshinter_interface );
-
- if ( error )
- pshinter_module_class_pic_free( library );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/pshinter/pshpic.h b/freetype/src/pshinter/pshpic.h
deleted file mode 100644
index 4469ba87..00000000
--- a/freetype/src/pshinter/pshpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.h */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHPIC_H_
-#define PSHPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSHINTER_INTERFACE_GET pshinter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-FT_BEGIN_HEADER
-
- typedef struct PSHinterPIC_
- {
- PSHinter_Interface pshinter_interface;
-
- } PSHinterPIC;
-
-
-#define GET_PIC( lib ) ( (PSHinterPIC*)( (lib)->pic_container.pshinter ) )
-
-#define PSHINTER_INTERFACE_GET ( GET_PIC( library )->pshinter_interface )
-
- /* see pshpic.c for the implementation */
- void
- pshinter_module_class_pic_free( FT_Library library );
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSHPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/pshinter/pshrec.c b/freetype/src/pshinter/pshrec.c
index 6648d13d..9dd09efe 100644
--- a/freetype/src/pshinter/pshrec.c
+++ b/freetype/src/pshinter/pshrec.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pshrec.c */
-/* */
-/* FreeType PostScript hints recorder (body). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pshrec.c
+ *
+ * FreeType PostScript hints recorder (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -28,7 +28,7 @@
#include "pshnterr.h"
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshrec
+#define FT_COMPONENT pshrec
#ifdef DEBUG_HINTER
PS_Hints ps_debug_hints = NULL;
@@ -666,7 +666,7 @@
if ( len == -21 )
{
flags |= PS_HINT_FLAG_BOTTOM;
- pos += len;
+ pos = ADD_INT( pos, len );
}
len = 0;
}
@@ -1187,7 +1187,7 @@
/* compute integer stem positions in font units */
for ( n = 0; n < count * 2; n++ )
{
- y += coords[n];
+ y = ADD_LONG( y, coords[n] );
stems[n] = FIXED_TO_INT( y );
}
diff --git a/freetype/src/pshinter/pshrec.h b/freetype/src/pshinter/pshrec.h
index 7e3dfe0d..02cc2102 100644
--- a/freetype/src/pshinter/pshrec.h
+++ b/freetype/src/pshinter/pshrec.h
@@ -1,31 +1,31 @@
-/***************************************************************************/
-/* */
-/* pshrec.h */
-/* */
-/* Postscript (Type1/Type2) hints recorder (specification). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /**************************************************************************/
+/****************************************************************************
+ *
+ * pshrec.h
+ *
+ * Postscript (Type1/Type2) hints recorder (specification).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/pshinter/rules.mk b/freetype/src/pshinter/rules.mk
index 966690ef..58227d10 100644
--- a/freetype/src/pshinter/rules.mk
+++ b/freetype/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -31,7 +31,6 @@ PSHINTER_COMPILE := $(CC) $(ANSIFLAGS) \
PSHINTER_DRV_SRC := $(PSHINTER_DIR)/pshalgo.c \
$(PSHINTER_DIR)/pshglob.c \
$(PSHINTER_DIR)/pshmod.c \
- $(PSHINTER_DIR)/pshpic.c \
$(PSHINTER_DIR)/pshrec.c
diff --git a/freetype/src/psnames/Jamfile b/freetype/src/psnames/Jamfile
index a0fd3739..75978a87 100644
--- a/freetype/src/psnames/Jamfile
+++ b/freetype/src/psnames/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psnames Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psnames/module.mk b/freetype/src/psnames/module.mk
index 410f48a1..0806a318 100644
--- a/freetype/src/psnames/module.mk
+++ b/freetype/src/psnames/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psnames/psmodule.c b/freetype/src/psnames/psmodule.c
index 8929ebe7..0ec440e6 100644
--- a/freetype/src/psnames/psmodule.c
+++ b/freetype/src/psnames/psmodule.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psmodule.c */
-/* */
-/* PSNames module implementation (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psmodule.c
+ *
+ * psnames module implementation (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -24,16 +24,16 @@
#include "psmodule.h"
/*
- * The file `pstables.h' with its arrays and its function
- * `ft_get_adobe_glyph_index' is useful for other projects also (for
- * example, `pdfium' is using it). However, if used as a C++ header,
- * including it in two different source files makes it necessary to use
- * `extern const' for the declaration of its arrays, otherwise the data
- * would be duplicated as mandated by the C++ standard.
+ * The file `pstables.h' with its arrays and its function
+ * `ft_get_adobe_glyph_index' is useful for other projects also (for
+ * example, `pdfium' is using it). However, if used as a C++ header,
+ * including it in two different source files makes it necessary to use
+ * `extern const' for the declaration of its arrays, otherwise the data
+ * would be duplicated as mandated by the C++ standard.
*
- * For this reason, we use `DEFINE_PS_TABLES' to guard the function
- * definitions, and `DEFINE_PS_TABLES_DATA' to provide both proper array
- * declarations and definitions.
+ * For this reason, we use `DEFINE_PS_TABLES' to guard the function
+ * definitions, and `DEFINE_PS_TABLES_DATA' to provide both proper array
+ * declarations and definitions.
*/
#include "pstables.h"
#define DEFINE_PS_TABLES
@@ -41,7 +41,6 @@
#include "pstables.h"
#include "psnamerr.h"
-#include "pspic.h"
#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
@@ -393,7 +392,9 @@
/* Reallocate if the number of used entries is much smaller. */
if ( count < num_glyphs / 2 )
{
- (void)FT_RENEW_ARRAY( table->maps, num_glyphs, count );
+ (void)FT_RENEW_ARRAY( table->maps,
+ num_glyphs + EXTRA_GLYPH_LIST_SIZE,
+ count );
error = FT_Err_Ok;
}
@@ -577,28 +578,16 @@
FT_DEFINE_SERVICEDESCREC1(
pscmaps_services,
- FT_SERVICE_ID_POSTSCRIPT_CMAPS, &PSCMAPS_INTERFACE_GET )
+ FT_SERVICE_ID_POSTSCRIPT_CMAPS, &pscmaps_interface )
static FT_Pointer
psnames_get_service( FT_Module module,
const char* service_id )
{
- /* PSCMAPS_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
FT_UNUSED( module );
-#endif
- return ft_service_list_lookup( PSCMAPS_SERVICES_GET, service_id );
+ return ft_service_list_lookup( pscmaps_services, service_id );
}
#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
@@ -621,7 +610,7 @@
0x20000L, /* driver requires FreeType 2 or above */
PUT_PS_NAMES_SERVICE(
- (void*)&PSCMAPS_INTERFACE_GET ), /* module specific interface */
+ (void*)&pscmaps_interface ), /* module specific interface */
(FT_Module_Constructor)NULL, /* module_init */
(FT_Module_Destructor) NULL, /* module_done */
diff --git a/freetype/src/psnames/psmodule.h b/freetype/src/psnames/psmodule.h
index 3e94f8b4..0df9a7d8 100644
--- a/freetype/src/psnames/psmodule.h
+++ b/freetype/src/psnames/psmodule.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* psmodule.h */
-/* */
-/* High-level PSNames module interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * psmodule.h
+ *
+ * High-level psnames module interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/psnames/psnamerr.h b/freetype/src/psnames/psnamerr.h
index 14eb76c9..67ab1765 100644
--- a/freetype/src/psnames/psnamerr.h
+++ b/freetype/src/psnames/psnamerr.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* psnamerr.h */
-/* */
-/* PS names module error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * psnamerr.h
+ *
+ * PS names module error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/psnames/psnames.c b/freetype/src/psnames/psnames.c
index febb80d5..4722f988 100644
--- a/freetype/src/psnames/psnames.c
+++ b/freetype/src/psnames/psnames.c
@@ -1,26 +1,25 @@
-/***************************************************************************/
-/* */
-/* psnames.c */
-/* */
-/* FreeType PSNames module component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType psnames module component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
#include "psmodule.c"
-#include "pspic.c"
/* END */
diff --git a/freetype/src/psnames/pspic.c b/freetype/src/psnames/pspic.c
deleted file mode 100644
index 85a06f36..00000000
--- a/freetype/src/psnames/pspic.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.c */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pspic.h"
-#include "psnamerr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from psmodule.c */
- FT_Error
- FT_Create_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_pscmaps_interface( FT_Library library,
- FT_Service_PsCMapsRec* clazz );
-
-
- void
- psnames_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->psnames )
- {
- PSModulePIC* container = (PSModulePIC*)pic_container->psnames;
-
-
- if ( container->pscmaps_services )
- FT_Destroy_Class_pscmaps_services( library,
- container->pscmaps_services );
- container->pscmaps_services = NULL;
- FT_FREE( container );
- pic_container->psnames = NULL;
- }
- }
-
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->psnames = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_pscmaps_services(
- library, &container->pscmaps_services );
- if ( error )
- goto Exit;
- FT_Init_Class_pscmaps_interface( library,
- &container->pscmaps_interface );
-
- Exit:
- if ( error )
- psnames_module_class_pic_free( library );
- return error;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/psnames/pspic.h b/freetype/src/psnames/pspic.h
deleted file mode 100644
index 889780cc..00000000
--- a/freetype/src/psnames/pspic.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.h */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSPIC_H_
-#define PSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSCMAPS_SERVICES_GET pscmaps_services
-#define PSCMAPS_INTERFACE_GET pscmaps_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct PSModulePIC_
- {
- FT_ServiceDescRec* pscmaps_services;
- FT_Service_PsCMapsRec pscmaps_interface;
-
- } PSModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (PSModulePIC*)((lib)->pic_container.psnames) )
-#define PSCMAPS_SERVICES_GET ( GET_PIC( library )->pscmaps_services )
-#define PSCMAPS_INTERFACE_GET ( GET_PIC( library )->pscmaps_interface )
-
-
- /* see pspic.c for the implementation */
- void
- psnames_module_class_pic_free( FT_Library library );
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/psnames/pstables.h b/freetype/src/psnames/pstables.h
index 79545ee0..c0139bbc 100644
--- a/freetype/src/psnames/pstables.h
+++ b/freetype/src/psnames/pstables.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* pstables.h */
-/* */
-/* PostScript glyph names. */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pstables.h
+ *
+ * PostScript glyph names.
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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! */
@@ -609,12 +609,12 @@
/*
- * 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.
+ * 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.
+ * The lookup function to get the Unicode value for a given string
+ * is defined below the table.
*/
#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
@@ -4137,7 +4137,7 @@
#ifdef DEFINE_PS_TABLES
/*
- * This function searches the compressed table efficiently.
+ * This function searches the compressed table efficiently.
*/
static unsigned long
ft_get_adobe_glyph_index( const char* name,
diff --git a/freetype/src/psnames/rules.mk b/freetype/src/psnames/rules.mk
index 4d629d84..dcc203e3 100644
--- a/freetype/src/psnames/rules.mk
+++ b/freetype/src/psnames/rules.mk
@@ -1,9 +1,9 @@
#
-# FreeType 2 PSNames driver configuration rules
+# FreeType 2 psnames driver configuration rules
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -13,7 +13,7 @@
# fully.
-# PSNames driver directory
+# psnames driver directory
#
PSNAMES_DIR := $(SRC_DIR)/psnames
@@ -26,20 +26,19 @@ PSNAMES_COMPILE := $(CC) $(ANSIFLAGS) \
$(FT_CFLAGS)
-# PSNames driver sources (i.e., C files)
+# psnames driver sources (i.e., C files)
#
-PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c \
- $(PSNAMES_DIR)/pspic.c
+PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c
-# PSNames driver headers
+# psnames driver headers
#
PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \
$(PSNAMES_DIR)/psnamerr.h \
$(PSNAMES_DIR)/pstables.h
-# PSNames driver object(s)
+# psnames driver object(s)
#
# PSNAMES_DRV_OBJ_M is used during `multi' builds
# PSNAMES_DRV_OBJ_S is used during `single' builds
@@ -47,19 +46,19 @@ PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \
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 driver source file for single build
#
PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psnames.c
-# PSNames driver - single object
+# 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
+# psnames driver - multiple objects
#
$(OBJ_DIR)/%.$O: $(PSNAMES_DIR)/%.c $(FREETYPE_H) $(PSNAMES_DRV_H)
$(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
diff --git a/freetype/src/raster/Jamfile b/freetype/src/raster/Jamfile
index 838e7ef5..3990c05c 100644
--- a/freetype/src/raster/Jamfile
+++ b/freetype/src/raster/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/raster Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/raster/ftmisc.h b/freetype/src/raster/ftmisc.h
index 7e401190..a246569e 100644
--- a/freetype/src/raster/ftmisc.h
+++ b/freetype/src/raster/ftmisc.h
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ftmisc.h */
-/* */
-/* Miscellaneous macros for stand-alone rasterizer (specification */
-/* only). */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /***************************************************/
+/****************************************************************************
+ *
+ * ftmisc.h
+ *
+ * Miscellaneous macros for stand-alone rasterizer (specification
+ * only).
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/raster/ftraster.c b/freetype/src/raster/ftraster.c
index 4354730d..023b6c1e 100644
--- a/freetype/src/raster/ftraster.c
+++ b/freetype/src/raster/ftraster.c
@@ -1,51 +1,51 @@
-/***************************************************************************/
-/* */
-/* ftraster.c */
-/* */
-/* The FreeType glyph rasterizer (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the STANDALONE_ macro when compiling it. You also need to */
- /* put the files `ftimage.h' and `ftmisc.h' into the $(incdir) */
- /* directory. Typically, you should do something like */
- /* */
- /* - copy `src/raster/ftraster.c' (this file) to your current directory */
- /* */
- /* - copy `include/freetype/ftimage.h' and `src/raster/ftmisc.h' to your */
- /* current directory */
- /* */
- /* - compile `ftraster' with the STANDALONE_ macro defined, as in */
- /* */
- /* cc -c -DSTANDALONE_ ftraster.c */
- /* */
- /* The renderer can be initialized with a call to */
- /* `ft_standard_raster.raster_new'; a bitmap can be generated */
- /* with a call to `ft_standard_raster.raster_render'. */
- /* */
- /* See the comments and documentation in the file `ftimage.h' for more */
- /* details on how the raster works. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This is a rewrite of the FreeType 1.x scan-line converter */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftraster.c
+ *
+ * The FreeType glyph rasterizer (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * This file can be compiled without the rest of the FreeType engine, by
+ * defining the STANDALONE_ macro when compiling it. You also need to
+ * put the files `ftimage.h' and `ftmisc.h' into the $(incdir)
+ * directory. Typically, you should do something like
+ *
+ * - copy `src/raster/ftraster.c' (this file) to your current directory
+ *
+ * - copy `include/freetype/ftimage.h' and `src/raster/ftmisc.h' to your
+ * current directory
+ *
+ * - compile `ftraster' with the STANDALONE_ macro defined, as in
+ *
+ * cc -c -DSTANDALONE_ ftraster.c
+ *
+ * The renderer can be initialized with a call to
+ * `ft_standard_raster.raster_new'; a bitmap can be generated
+ * with a call to `ft_standard_raster.raster_render'.
+ *
+ * See the comments and documentation in the file `ftimage.h' for more
+ * details on how the raster works.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This is a rewrite of the FreeType 1.x scan-line converter
+ *
+ */
#ifdef STANDALONE_
@@ -65,82 +65,81 @@
#include <ft2build.h>
#include "ftraster.h"
#include FT_INTERNAL_CALC_H /* for FT_MulDiv and FT_MulDiv_No_Round */
-
-#include "rastpic.h"
+#include FT_OUTLINE_H /* for FT_Outline_Get_CBox */
#endif /* !STANDALONE_ */
- /*************************************************************************/
- /* */
- /* A simple technical note on how the raster works */
- /* ----------------------------------------------- */
- /* */
- /* Converting an outline into a bitmap is achieved in several steps: */
- /* */
- /* 1 - Decomposing the outline into successive `profiles'. Each */
- /* profile is simply an array of scanline intersections on a given */
- /* dimension. A profile's main attributes are */
- /* */
- /* o its scanline position boundaries, i.e. `Ymin' and `Ymax' */
- /* */
- /* o an array of intersection coordinates for each scanline */
- /* between `Ymin' and `Ymax' */
- /* */
- /* o a direction, indicating whether it was built going `up' or */
- /* `down', as this is very important for filling rules */
- /* */
- /* o its drop-out mode */
- /* */
- /* 2 - Sweeping the target map's scanlines in order to compute segment */
- /* `spans' which are then filled. Additionally, this pass */
- /* performs drop-out control. */
- /* */
- /* The outline data is parsed during step 1 only. The profiles are */
- /* built from the bottom of the render pool, used as a stack. The */
- /* following graphics shows the profile list under construction: */
- /* */
- /* __________________________________________________________ _ _ */
- /* | | | | | */
- /* | profile | coordinates for | profile | coordinates for |--> */
- /* | 1 | profile 1 | 2 | profile 2 |--> */
- /* |_________|_________________|_________|_________________|__ _ _ */
- /* */
- /* ^ ^ */
- /* | | */
- /* start of render pool top */
- /* */
- /* The top of the profile stack is kept in the `top' variable. */
- /* */
- /* As you can see, a profile record is pushed on top of the render */
- /* pool, which is then followed by its coordinates/intersections. If */
- /* a change of direction is detected in the outline, a new profile is */
- /* generated until the end of the outline. */
- /* */
- /* Note that when all profiles have been generated, the function */
- /* Finalize_Profile_Table() is used to record, for each profile, its */
- /* bottom-most scanline as well as the scanline above its upmost */
- /* boundary. These positions are called `y-turns' because they (sort */
- /* of) correspond to local extrema. They are stored in a sorted list */
- /* built from the top of the render pool as a downwards stack: */
- /* */
- /* _ _ _______________________________________ */
- /* | | */
- /* <--| sorted list of | */
- /* <--| extrema scanlines | */
- /* _ _ __________________|____________________| */
- /* */
- /* ^ ^ */
- /* | | */
- /* maxBuff sizeBuff = end of pool */
- /* */
- /* This list is later used during the sweep phase in order to */
- /* optimize performance (see technical note on the sweep below). */
- /* */
- /* Of course, the raster detects whether the two stacks collide and */
- /* handles the situation properly. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * A simple technical note on how the raster works
+ * -----------------------------------------------
+ *
+ * Converting an outline into a bitmap is achieved in several steps:
+ *
+ * 1 - Decomposing the outline into successive `profiles'. Each
+ * profile is simply an array of scanline intersections on a given
+ * dimension. A profile's main attributes are
+ *
+ * o its scanline position boundaries, i.e. `Ymin' and `Ymax'
+ *
+ * o an array of intersection coordinates for each scanline
+ * between `Ymin' and `Ymax'
+ *
+ * o a direction, indicating whether it was built going `up' or
+ * `down', as this is very important for filling rules
+ *
+ * o its drop-out mode
+ *
+ * 2 - Sweeping the target map's scanlines in order to compute segment
+ * `spans' which are then filled. Additionally, this pass
+ * performs drop-out control.
+ *
+ * The outline data is parsed during step 1 only. The profiles are
+ * built from the bottom of the render pool, used as a stack. The
+ * following graphics shows the profile list under construction:
+ *
+ * __________________________________________________________ _ _
+ * | | | | |
+ * | profile | coordinates for | profile | coordinates for |-->
+ * | 1 | profile 1 | 2 | profile 2 |-->
+ * |_________|_________________|_________|_________________|__ _ _
+ *
+ * ^ ^
+ * | |
+ * start of render pool top
+ *
+ * The top of the profile stack is kept in the `top' variable.
+ *
+ * As you can see, a profile record is pushed on top of the render
+ * pool, which is then followed by its coordinates/intersections. If
+ * a change of direction is detected in the outline, a new profile is
+ * generated until the end of the outline.
+ *
+ * Note that when all profiles have been generated, the function
+ * Finalize_Profile_Table() is used to record, for each profile, its
+ * bottom-most scanline as well as the scanline above its upmost
+ * boundary. These positions are called `y-turns' because they (sort
+ * of) correspond to local extrema. They are stored in a sorted list
+ * built from the top of the render pool as a downwards stack:
+ *
+ * _ _ _______________________________________
+ * | |
+ * <--| sorted list of |
+ * <--| extrema scanlines |
+ * _ _ __________________|____________________|
+ *
+ * ^ ^
+ * | |
+ * maxBuff sizeBuff = end of pool
+ *
+ * This list is later used during the sweep phase in order to
+ * optimize performance (see technical note on the sweep below).
+ *
+ * Of course, the raster detects whether the two stacks collide and
+ * handles the situation properly.
+ *
+ */
/*************************************************************************/
@@ -163,14 +162,14 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT raster
#ifdef STANDALONE_
@@ -400,7 +399,7 @@
#define RAS_ARGS /* void */
-#define RAS_ARG /* void */
+#define RAS_ARG void
#define RAS_VARS /* void */
#define RAS_VAR /* void */
@@ -452,9 +451,9 @@
#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
#define TRUNC( x ) ( (Long)(x) >> ras.precision_bits )
#define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
-#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << ras.scale_shift ) \
- : ( (x) << ras.scale_shift ) ) \
- - ras.precision_half )
+
+ /* scale and shift grid to pixel centers */
+#define SCALED( x ) ( (x) * ras.precision_scale - ras.precision_half )
#define IS_BOTTOM_OVERSHOOT( x ) \
(Bool)( CEILING( x ) - x >= ras.precision_half )
@@ -476,13 +475,10 @@
Int precision_bits; /* precision related variables */
Int precision;
Int precision_half;
- Int precision_shift;
+ Int precision_scale;
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 */
@@ -495,8 +491,7 @@
TPoint* arc; /* current Bezier arc pointer */
UShort bWidth; /* target bitmap width */
- PByte bTarget; /* target bitmap buffer */
- PByte gTarget; /* target pixmap buffer */
+ PByte bOrigin; /* target bitmap bottom-left origin */
Long lastX, lastY;
Long minY, maxY;
@@ -519,8 +514,6 @@
FT_Outline outline;
Long traceOfs; /* current offset in target bitmap */
- Long traceG; /* current offset in target pixmap */
-
Short traceIncr; /* sweep's increment in target bitmap */
/* dispatch variables */
@@ -553,8 +546,7 @@
#ifdef FT_STATIC_RASTER
- static black_TWorker cur_ras;
-#define ras cur_ras
+ static black_TWorker ras;
#else /* !FT_STATIC_RASTER */
@@ -572,18 +564,19 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Set_High_Precision */
- /* */
- /* <Description> */
- /* Set precision variables according to param flag. */
- /* */
- /* <Input> */
- /* High :: Set to True for high precision (typically for ppem < 24), */
- /* false otherwise. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Set_High_Precision
+ *
+ * @Description:
+ * Set precision variables according to param flag.
+ *
+ * @Input:
+ * High ::
+ * Set to True for high precision (typically for ppem < 24),
+ * false otherwise.
+ */
static void
Set_High_Precision( RAS_ARGS Int High )
{
@@ -625,29 +618,31 @@
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_half = ras.precision >> 1;
+ ras.precision_scale = ras.precision >> Pixel_Bits;
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* New_Profile */
- /* */
- /* <Description> */
- /* Create a new profile in the render pool. */
- /* */
- /* <Input> */
- /* aState :: The state/orientation of the new profile. */
- /* */
- /* overshoot :: Whether the profile's unrounded start position */
- /* differs by at least a half pixel. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or of incoherent */
- /* profile. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * New_Profile
+ *
+ * @Description:
+ * Create a new profile in the render pool.
+ *
+ * @Input:
+ * aState ::
+ * The state/orientation of the new profile.
+ *
+ * overshoot ::
+ * Whether the profile's unrounded start position
+ * differs by at least a half pixel.
+ *
+ * @Return:
+ * SUCCESS on success. FAILURE in case of overflow or of incoherent
+ * profile.
+ */
static Bool
New_Profile( RAS_ARGS TStates aState,
Bool overshoot )
@@ -665,7 +660,6 @@
return FAILURE;
}
- ras.cProfile->flags = 0;
ras.cProfile->start = 0;
ras.cProfile->height = 0;
ras.cProfile->offset = ras.top;
@@ -706,21 +700,22 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* End_Profile */
- /* */
- /* <Description> */
- /* Finalize the current profile. */
- /* */
- /* <Input> */
- /* overshoot :: Whether the profile's unrounded end position differs */
- /* by at least a half pixel. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or incoherency. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * End_Profile
+ *
+ * @Description:
+ * Finalize the current profile.
+ *
+ * @Input:
+ * overshoot ::
+ * Whether the profile's unrounded end position differs
+ * by at least a half pixel.
+ *
+ * @Return:
+ * SUCCESS on success. FAILURE in case of overflow or incoherency.
+ */
static Bool
End_Profile( RAS_ARGS Bool overshoot )
{
@@ -778,21 +773,21 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Insert_Y_Turn */
- /* */
- /* <Description> */
- /* Insert a salient into the sorted list placed on top of the render */
- /* pool. */
- /* */
- /* <Input> */
- /* New y scanline position. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Insert_Y_Turn
+ *
+ * @Description:
+ * Insert a salient into the sorted list placed on top of the render
+ * pool.
+ *
+ * @Input:
+ * New y scanline position.
+ *
+ * @Return:
+ * SUCCESS on success. FAILURE in case of overflow.
+ */
static Bool
Insert_Y_Turn( RAS_ARGS Int y )
{
@@ -834,17 +829,17 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Finalize_Profile_Table */
- /* */
- /* <Description> */
- /* Adjust all links in the profiles list. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Finalize_Profile_Table
+ *
+ * @Description:
+ * Adjust all links in the profiles list.
+ *
+ * @Return:
+ * SUCCESS on success. FAILURE in case of overflow.
+ */
static Bool
Finalize_Profile_Table( RAS_ARG )
{
@@ -894,22 +889,22 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Split_Conic */
- /* */
- /* <Description> */
- /* Subdivide one conic Bezier into two joint sub-arcs in the Bezier */
- /* stack. */
- /* */
- /* <Input> */
- /* None (subdivided Bezier is taken from the top of the stack). */
- /* */
- /* <Note> */
- /* This routine is the `beef' of this component. It is _the_ inner */
- /* loop that should be optimized to hell to get the best performance. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Split_Conic
+ *
+ * @Description:
+ * Subdivide one conic Bezier into two joint sub-arcs in the Bezier
+ * stack.
+ *
+ * @Input:
+ * None (subdivided Bezier is taken from the top of the stack).
+ *
+ * @Note:
+ * This routine is the `beef' of this component. It is _the_ inner
+ * loop that should be optimized to hell to get the best performance.
+ */
static void
Split_Conic( TPoint* base )
{
@@ -917,89 +912,101 @@
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ base[3].x = b >> 1;
+ base[2].x = ( a + b ) >> 2;
+ base[1].x = a >> 1;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ base[3].y = b >> 1;
+ base[2].y = ( a + b ) >> 2;
+ base[1].y = a >> 1;
/* hand optimized. gcc doesn't seem to be too good at common */
/* expression substitution and instruction scheduling ;-) */
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Split_Cubic */
- /* */
- /* <Description> */
- /* Subdivide a third-order Bezier arc into two joint sub-arcs in the */
- /* Bezier stack. */
- /* */
- /* <Note> */
- /* This routine is the `beef' of the component. It is one of _the_ */
- /* inner loops that should be optimized like hell to get the best */
- /* performance. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Split_Cubic
+ *
+ * @Description:
+ * Subdivide a third-order Bezier arc into two joint sub-arcs in the
+ * Bezier stack.
+ *
+ * @Note:
+ * This routine is the `beef' of the component. It is one of _the_
+ * inner loops that should be optimized like hell to get the best
+ * performance.
+ */
static void
Split_Cubic( TPoint* base )
{
- Long a, b, c, d;
+ Long a, b, c;
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ c = base[2].x + base[3].x;
+ base[5].x = c >> 1;
+ c += b;
+ base[4].x = c >> 2;
+ base[1].x = a >> 1;
+ a += b;
+ base[2].x = a >> 2;
+ base[3].x = ( a + c ) >> 3;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ c = base[2].y + base[3].y;
+ base[5].y = c >> 1;
+ c += b;
+ base[4].y = c >> 2;
+ base[1].y = a >> 1;
+ a += b;
+ base[2].y = a >> 2;
+ base[3].y = ( a + c ) >> 3;
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_Up */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an ascending line segment and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* x1 :: The x-coordinate of the segment's start point. */
- /* */
- /* y1 :: The y-coordinate of the segment's start point. */
- /* */
- /* x2 :: The x-coordinate of the segment's end point. */
- /* */
- /* y2 :: The y-coordinate of the segment's end point. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Line_Up
+ *
+ * @Description:
+ * Compute the x-coordinates of an ascending line segment and store
+ * them in the render pool.
+ *
+ * @Input:
+ * x1 ::
+ * The x-coordinate of the segment's start point.
+ *
+ * y1 ::
+ * The y-coordinate of the segment's start point.
+ *
+ * x2 ::
+ * The x-coordinate of the segment's end point.
+ *
+ * y2 ::
+ * The y-coordinate of the segment's end point.
+ *
+ * miny ::
+ * A lower vertical clipping bound value.
+ *
+ * maxy ::
+ * An upper vertical clipping bound value.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow.
+ */
static Bool
Line_Up( RAS_ARGS Long x1,
Long y1,
@@ -1114,31 +1121,37 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_Down */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an descending line segment and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* x1 :: The x-coordinate of the segment's start point. */
- /* */
- /* y1 :: The y-coordinate of the segment's start point. */
- /* */
- /* x2 :: The x-coordinate of the segment's end point. */
- /* */
- /* y2 :: The y-coordinate of the segment's end point. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Line_Down
+ *
+ * @Description:
+ * Compute the x-coordinates of an descending line segment and store
+ * them in the render pool.
+ *
+ * @Input:
+ * x1 ::
+ * The x-coordinate of the segment's start point.
+ *
+ * y1 ::
+ * The y-coordinate of the segment's start point.
+ *
+ * x2 ::
+ * The x-coordinate of the segment's end point.
+ *
+ * y2 ::
+ * The y-coordinate of the segment's end point.
+ *
+ * miny ::
+ * A lower vertical clipping bound value.
+ *
+ * maxy ::
+ * An upper vertical clipping bound value.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow.
+ */
static Bool
Line_Down( RAS_ARGS Long x1,
Long y1,
@@ -1165,27 +1178,31 @@
typedef void (*TSplitter)( TPoint* base );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Bezier_Up */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an ascending Bezier arc and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* degree :: The degree of the Bezier arc (either 2 or 3). */
- /* */
- /* splitter :: The function to split Bezier arcs. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Bezier_Up
+ *
+ * @Description:
+ * Compute the x-coordinates of an ascending Bezier arc and store
+ * them in the render pool.
+ *
+ * @Input:
+ * degree ::
+ * The degree of the Bezier arc (either 2 or 3).
+ *
+ * splitter ::
+ * The function to split Bezier arcs.
+ *
+ * miny ::
+ * A lower vertical clipping bound value.
+ *
+ * maxy ::
+ * An upper vertical clipping bound value.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow.
+ */
static Bool
Bezier_Up( RAS_ARGS Int degree,
TSplitter splitter,
@@ -1298,27 +1315,31 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Bezier_Down */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an descending Bezier arc and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* degree :: The degree of the Bezier arc (either 2 or 3). */
- /* */
- /* splitter :: The function to split Bezier arcs. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Bezier_Down
+ *
+ * @Description:
+ * Compute the x-coordinates of an descending Bezier arc and store
+ * them in the render pool.
+ *
+ * @Input:
+ * degree ::
+ * The degree of the Bezier arc (either 2 or 3).
+ *
+ * splitter ::
+ * The function to split Bezier arcs.
+ *
+ * miny ::
+ * A lower vertical clipping bound value.
+ *
+ * maxy ::
+ * An upper vertical clipping bound value.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow.
+ */
static Bool
Bezier_Down( RAS_ARGS Int degree,
TSplitter splitter,
@@ -1347,25 +1368,27 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_To */
- /* */
- /* <Description> */
- /* Inject a new line segment and adjust the Profiles list. */
- /* */
- /* <Input> */
- /* x :: The x-coordinate of the segment's end point (its start point */
- /* is stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the segment's end point (its start point */
- /* is stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Line_To
+ *
+ * @Description:
+ * Inject a new line segment and adjust the Profiles list.
+ *
+ * @Input:
+ * x ::
+ * The x-coordinate of the segment's end point (its start point
+ * is stored in `lastX').
+ *
+ * y ::
+ * The y-coordinate of the segment's end point (its start point
+ * is stored in `lastY').
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow or incorrect
+ * profile.
+ */
static Bool
Line_To( RAS_ARGS Long x,
Long y )
@@ -1441,29 +1464,33 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Conic_To */
- /* */
- /* <Description> */
- /* Inject a new conic arc and adjust the profile list. */
- /* */
- /* <Input> */
- /* cx :: The x-coordinate of the arc's new control point. */
- /* */
- /* cy :: The y-coordinate of the arc's new control point. */
- /* */
- /* x :: The x-coordinate of the arc's end point (its start point is */
- /* stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the arc's end point (its start point is */
- /* stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Conic_To
+ *
+ * @Description:
+ * Inject a new conic arc and adjust the profile list.
+ *
+ * @Input:
+ * cx ::
+ * The x-coordinate of the arc's new control point.
+ *
+ * cy ::
+ * The y-coordinate of the arc's new control point.
+ *
+ * x ::
+ * The x-coordinate of the arc's end point (its start point is
+ * stored in `lastX').
+ *
+ * y ::
+ * The y-coordinate of the arc's end point (its start point is
+ * stored in `lastY').
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow or incorrect
+ * profile.
+ */
static Bool
Conic_To( RAS_ARGS Long cx,
Long cy,
@@ -1558,33 +1585,39 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Cubic_To */
- /* */
- /* <Description> */
- /* Inject a new cubic arc and adjust the profile list. */
- /* */
- /* <Input> */
- /* cx1 :: The x-coordinate of the arc's first new control point. */
- /* */
- /* cy1 :: The y-coordinate of the arc's first new control point. */
- /* */
- /* cx2 :: The x-coordinate of the arc's second new control point. */
- /* */
- /* cy2 :: The y-coordinate of the arc's second new control point. */
- /* */
- /* x :: The x-coordinate of the arc's end point (its start point is */
- /* stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the arc's end point (its start point is */
- /* stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Cubic_To
+ *
+ * @Description:
+ * Inject a new cubic arc and adjust the profile list.
+ *
+ * @Input:
+ * cx1 ::
+ * The x-coordinate of the arc's first new control point.
+ *
+ * cy1 ::
+ * The y-coordinate of the arc's first new control point.
+ *
+ * cx2 ::
+ * The x-coordinate of the arc's second new control point.
+ *
+ * cy2 ::
+ * The y-coordinate of the arc's second new control point.
+ *
+ * x ::
+ * The x-coordinate of the arc's end point (its start point is
+ * stored in `lastX').
+ *
+ * y ::
+ * The y-coordinate of the arc's end point (its start point is
+ * stored in `lastY').
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on render pool overflow or incorrect
+ * profile.
+ */
static Bool
Cubic_To( RAS_ARGS Long cx1,
Long cy1,
@@ -1705,27 +1738,30 @@
} while ( 0 )
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Decompose_Curve */
- /* */
- /* <Description> */
- /* Scan the outline arrays in order to emit individual segments and */
- /* Beziers by calling Line_To() and Bezier_To(). It handles all */
- /* weird cases, like when the first point is off the curve, or when */
- /* there are simply no `on' points in the contour! */
- /* */
- /* <Input> */
- /* first :: The index of the first point in the contour. */
- /* */
- /* last :: The index of the last point in the contour. */
- /* */
- /* flipped :: If set, flip the direction of the curve. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on error. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Decompose_Curve
+ *
+ * @Description:
+ * Scan the outline arrays in order to emit individual segments and
+ * Beziers by calling Line_To() and Bezier_To(). It handles all
+ * weird cases, like when the first point is off the curve, or when
+ * there are simply no `on' points in the contour!
+ *
+ * @Input:
+ * first ::
+ * The index of the first point in the contour.
+ *
+ * last ::
+ * The index of the last point in the contour.
+ *
+ * flipped ::
+ * If set, flip the direction of the curve.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE on error.
+ */
static Bool
Decompose_Curve( RAS_ARGS UShort first,
UShort last,
@@ -1934,22 +1970,23 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Convert_Glyph */
- /* */
- /* <Description> */
- /* Convert a glyph into a series of segments and arcs and make a */
- /* profiles list with them. */
- /* */
- /* <Input> */
- /* flipped :: If set, flip the direction of curve. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE if any error was encountered during */
- /* rendering. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Convert_Glyph
+ *
+ * @Description:
+ * Convert a glyph into a series of segments and arcs and make a
+ * profiles list with them.
+ *
+ * @Input:
+ * flipped ::
+ * If set, flip the direction of curve.
+ *
+ * @Return:
+ * SUCCESS on success, FAILURE if any error was encountered during
+ * rendering.
+ */
static Bool
Convert_Glyph( RAS_ARGS Int flipped )
{
@@ -2028,12 +2065,12 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* Init_Linked */
- /* */
- /* Initializes an empty linked list. */
- /* */
+ /**************************************************************************
+ *
+ * Init_Linked
+ *
+ * Initializes an empty linked list.
+ */
static void
Init_Linked( TProfileList* l )
{
@@ -2041,12 +2078,12 @@
}
- /*************************************************************************/
- /* */
- /* InsNew */
- /* */
- /* Inserts a new profile in a linked list. */
- /* */
+ /**************************************************************************
+ *
+ * InsNew
+ *
+ * Inserts a new profile in a linked list.
+ */
static void
InsNew( PProfileList list,
PProfile profile )
@@ -2072,12 +2109,12 @@
}
- /*************************************************************************/
- /* */
- /* DelOld */
- /* */
- /* Removes an old profile from a linked list. */
- /* */
+ /**************************************************************************
+ *
+ * DelOld
+ *
+ * Removes an old profile from a linked list.
+ */
static void
DelOld( PProfileList list,
PProfile profile )
@@ -2105,14 +2142,14 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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 )
{
@@ -2163,14 +2200,14 @@
}
- /*************************************************************************/
- /* */
- /* Vertical Sweep Procedure Set */
- /* */
- /* These four routines are used during the vertical black/white sweep */
- /* phase by the generic Draw_Sweep() function. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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,
@@ -2183,8 +2220,6 @@
ras.traceIncr = (Short)-pitch;
ras.traceOfs = -*min * pitch;
- if ( pitch > 0 )
- ras.traceOfs += (Long)( ras.target.rows - 1 ) * pitch;
}
@@ -2215,13 +2250,18 @@
/* Drop-out control */
- e1 = TRUNC( CEILING( x1 ) );
+ e1 = CEILING( x1 );
+ e2 = FLOOR( x2 );
+ /* take care of the special case where both the left */
+ /* and right contour lie exactly on pixel centers */
if ( dropOutControl != 2 &&
- x2 - x1 - ras.precision <= ras.precision_jitter )
+ x2 - x1 - ras.precision <= ras.precision_jitter &&
+ e1 != x1 && e2 != x2 )
e2 = e1;
- else
- e2 = TRUNC( FLOOR( x2 ) );
+
+ e1 = TRUNC( e1 );
+ e2 = TRUNC( e2 );
if ( e2 >= 0 && e1 < ras.bWidth )
{
@@ -2242,7 +2282,7 @@
f1 = (Byte) ( 0xFF >> ( e1 & 7 ) );
f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) );
- target = ras.bTarget + ras.traceOfs + c1;
+ target = ras.bOrigin + ras.traceOfs + c1;
c2 -= c1;
if ( c2 > 0 )
@@ -2252,12 +2292,9 @@
/* 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 )
- {
+ while ( --c2 > 0 )
*(++target) = 0xFF;
- c2--;
- }
+
target[1] |= f2;
}
else
@@ -2400,7 +2437,7 @@
f1 = (Short)( e1 & 7 );
if ( e1 >= 0 && e1 < ras.bWidth &&
- ras.bTarget[ras.traceOfs + c1] & ( 0x80 >> f1 ) )
+ ras.bOrigin[ras.traceOfs + c1] & ( 0x80 >> f1 ) )
goto Exit;
}
else
@@ -2416,7 +2453,7 @@
c1 = (Short)( e1 >> 3 );
f1 = (Short)( e1 & 7 );
- ras.bTarget[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
+ ras.bOrigin[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
}
Exit:
@@ -2431,14 +2468,14 @@
}
- /***********************************************************************/
- /* */
- /* Horizontal Sweep Procedure Set */
- /* */
- /* These four routines are used during the horizontal black/white */
- /* sweep phase by the generic Draw_Sweep() function. */
- /* */
- /***********************************************************************/
+ /************************************************************************
+ *
+ * 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,
@@ -2483,19 +2520,14 @@
{
Byte f1;
PByte bits;
- PByte p;
FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
- bits = ras.bTarget + ( y >> 3 );
+ bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
f1 = (Byte)( 0x80 >> ( y & 7 ) );
- p = bits - e1 * ras.target.pitch;
- if ( ras.target.pitch > 0 )
- p += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
-
- p[0] |= f1;
+ bits[0] |= f1;
}
}
@@ -2597,13 +2629,9 @@
e1 = TRUNC( e1 );
- bits = ras.bTarget + ( y >> 3 );
+ bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
f1 = (Byte)( 0x80 >> ( y & 7 ) );
- bits -= e1 * ras.target.pitch;
- if ( ras.target.pitch > 0 )
- bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
-
if ( e1 >= 0 &&
(ULong)e1 < ras.target.rows &&
*bits & f1 )
@@ -2619,12 +2647,8 @@
{
FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
- bits = ras.bTarget + ( y >> 3 );
+ bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
f1 = (Byte)( 0x80 >> ( y & 7 ) );
- bits -= e1 * ras.target.pitch;
-
- if ( ras.target.pitch > 0 )
- bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
bits[0] |= f1;
}
@@ -2642,11 +2666,11 @@
}
- /*************************************************************************/
- /* */
- /* Generic Sweep Drawing routine */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Generic Sweep Drawing routine
+ *
+ */
static Bool
Draw_Sweep( RAS_ARG )
@@ -2764,7 +2788,7 @@
P_Left = draw_left;
P_Right = draw_right;
- while ( P_Left )
+ while ( P_Left && P_Right )
{
x1 = P_Left ->X;
x2 = P_Right->X;
@@ -2865,7 +2889,7 @@
P_Left = draw_left;
P_Right = draw_right;
- while ( P_Left )
+ while ( P_Left && P_Right )
{
if ( P_Left->countL )
{
@@ -2888,20 +2912,109 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Single_Pass */
- /* */
- /* <Description> */
- /* Perform one sweep with sub-banding. */
- /* */
- /* <Input> */
- /* flipped :: If set, flip the direction of the outline. */
- /* */
- /* <Return> */
- /* Renderer error code. */
- /* */
+#ifdef STANDALONE_
+
+ /**************************************************************************
+ *
+ * The following functions should only compile in stand-alone mode,
+ * i.e., when building this component without the rest of FreeType.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * @Function:
+ * FT_Outline_Get_CBox
+ *
+ * @Description:
+ * Return an outline's `control box'. The control box encloses all
+ * the outline's points, including Bézier control points. Though it
+ * coincides with the exact bounding box for most glyphs, it can be
+ * slightly larger in some situations (like when rotating an outline
+ * that contains Bézier outside arcs).
+ *
+ * Computing the control box is very fast, while getting the bounding
+ * box can take much more time as it needs to walk over all segments
+ * and arcs in the outline. To get the latter, you can use the
+ * `ftbbox' component, which is dedicated to this single task.
+ *
+ * @Input:
+ * outline ::
+ * A pointer to the source outline descriptor.
+ *
+ * @Output:
+ * acbox ::
+ * The outline's control box.
+ *
+ * @Note:
+ * See @FT_Glyph_Get_CBox for a discussion of tricky fonts.
+ */
+
+ static void
+ FT_Outline_Get_CBox( const FT_Outline* outline,
+ FT_BBox *acbox )
+ {
+ Long 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++ )
+ {
+ Long x, y;
+
+
+ x = vec->x;
+ if ( x < xMin ) xMin = x;
+ if ( x > xMax ) xMax = x;
+
+ y = vec->y;
+ if ( y < yMin ) yMin = y;
+ if ( y > yMax ) yMax = y;
+ }
+ }
+ acbox->xMin = xMin;
+ acbox->xMax = xMax;
+ acbox->yMin = yMin;
+ acbox->yMax = yMax;
+ }
+ }
+
+#endif /* STANDALONE_ */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * Render_Single_Pass
+ *
+ * @Description:
+ * Perform one sweep with sub-banding.
+ *
+ * @Input:
+ * flipped ::
+ * If set, flip the direction of the outline.
+ *
+ * @Return:
+ * Renderer error code.
+ */
static int
Render_Single_Pass( RAS_ARGS Bool flipped )
{
@@ -2963,17 +3076,17 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Glyph */
- /* */
- /* <Description> */
- /* Render a glyph in a bitmap. Sub-banding if needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Render_Glyph
+ *
+ * @Description:
+ * Render a glyph in a bitmap. Sub-banding if needed.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
static FT_Error
Render_Glyph( RAS_ARG )
{
@@ -2982,7 +3095,6 @@
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;
@@ -3013,7 +3125,10 @@
ras.band_stack[0].y_max = (Short)( ras.target.rows - 1 );
ras.bWidth = (UShort)ras.target.width;
- ras.bTarget = (Byte*)ras.target.buffer;
+ ras.bOrigin = (Byte*)ras.target.buffer;
+
+ if ( ras.target.pitch > 0 )
+ ras.bOrigin += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
if ( ( error = Render_Single_Pass( RAS_VARS 0 ) ) != 0 )
return error;
@@ -3146,7 +3261,9 @@
const FT_Outline* outline = (const FT_Outline*)params->source;
const FT_Bitmap* target_map = params->target;
+#ifndef FT_STATIC_RASTER
black_TWorker worker[1];
+#endif
Long buffer[FT_MAX_BLACK_POOL];
@@ -3185,25 +3302,11 @@
if ( !target_map->buffer )
return FT_THROW( Invalid );
- /* reject too large outline coordinates */
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- for ( ; vec < limit; vec++ )
- {
- if ( vec->x < -0x1000000L || vec->x > 0x1000000L ||
- vec->y < -0x1000000L || vec->y > 0x1000000L )
- return FT_THROW( Invalid );
- }
- }
-
ras.outline = *outline;
ras.target = *target_map;
- worker->buff = buffer;
- worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
+ ras.buff = buffer;
+ ras.sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
return Render_Glyph( RAS_VAR );
}
diff --git a/freetype/src/raster/ftraster.h b/freetype/src/raster/ftraster.h
index 40b5d6d3..50d34201 100644
--- a/freetype/src/raster/ftraster.h
+++ b/freetype/src/raster/ftraster.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftraster.h */
-/* */
-/* The FreeType glyph rasterizer (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftraster.h
+ *
+ * The FreeType glyph rasterizer (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,11 +28,11 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* Uncomment the following line if you are using ftraster.c as a */
- /* standalone module, fully independent of FreeType. */
- /* */
+ /**************************************************************************
+ *
+ * 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;
diff --git a/freetype/src/raster/ftrend1.c b/freetype/src/raster/ftrend1.c
index a7ce9731..62c72718 100644
--- a/freetype/src/raster/ftrend1.c
+++ b/freetype/src/raster/ftrend1.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftrend1.c */
-/* */
-/* The FreeType glyph rasterizer interface (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftrend1.c
+ *
+ * The FreeType glyph rasterizer interface (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -22,7 +22,6 @@
#include FT_OUTLINE_H
#include "ftrend1.h"
#include "ftraster.h"
-#include "rastpic.h"
#include "rasterrs.h"
@@ -128,7 +127,11 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
- ft_glyphslot_preset_bitmap( slot, mode, origin );
+ if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) )
+ {
+ error = FT_THROW( Raster_Overflow );
+ goto Exit;
+ }
/* allocate new one */
if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
@@ -197,7 +200,7 @@
(FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox, /* get_glyph_cbox */
(FT_Renderer_SetModeFunc) ft_raster1_set_mode, /* set_mode */
- (FT_Raster_Funcs*)&FT_STANDARD_RASTER_GET /* raster_class */
+ (FT_Raster_Funcs*)&ft_standard_raster /* raster_class */
)
diff --git a/freetype/src/raster/ftrend1.h b/freetype/src/raster/ftrend1.h
index 2abdf2d7..82ecac68 100644
--- a/freetype/src/raster/ftrend1.h
+++ b/freetype/src/raster/ftrend1.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftrend1.h */
-/* */
-/* The FreeType glyph rasterizer interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftrend1.h
+ *
+ * The FreeType glyph rasterizer interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/raster/module.mk b/freetype/src/raster/module.mk
index b115f416..0a6d4b09 100644
--- a/freetype/src/raster/module.mk
+++ b/freetype/src/raster/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/raster/raster.c b/freetype/src/raster/raster.c
index 76edd21e..e3ac9e56 100644
--- a/freetype/src/raster/raster.c
+++ b/freetype/src/raster/raster.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* raster.c */
-/* */
-/* FreeType monochrome rasterer module component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType monochrome rasterer module component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -21,7 +21,6 @@
#include "ftraster.c"
#include "ftrend1.c"
-#include "rastpic.c"
/* END */
diff --git a/freetype/src/raster/rasterrs.h b/freetype/src/raster/rasterrs.h
index 22a3e153..72664073 100644
--- a/freetype/src/raster/rasterrs.h
+++ b/freetype/src/raster/rasterrs.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* rasterrs.h */
-/* */
-/* monochrome renderer error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * rasterrs.h
+ *
+ * monochrome renderer error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/raster/rastpic.c b/freetype/src/raster/rastpic.c
deleted file mode 100644
index 1dc8981b..00000000
--- a/freetype/src/raster/rastpic.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.c */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "rastpic.h"
-#include "rasterrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftraster.c */
- void
- FT_Init_Class_ft_standard_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_raster1_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->raster )
- {
- RasterPIC* container = (RasterPIC*)pic_container->raster;
-
-
- if ( --container->ref_count )
- return;
- FT_FREE( container );
- pic_container->raster = NULL;
- }
- }
-
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- RasterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* XXX: since this function also served the no longer available */
- /* raster5 renderer it uses reference counting, which could */
- /* be removed now */
- if ( pic_container->raster )
- {
- ((RasterPIC*)pic_container->raster)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->raster = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_standard_raster( &container->ft_standard_raster );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/raster/rastpic.h b/freetype/src/raster/rastpic.h
deleted file mode 100644
index 6d0877c4..00000000
--- a/freetype/src/raster/rastpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.h */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef RASTPIC_H_
-#define RASTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_STANDARD_RASTER_GET ft_standard_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct RasterPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_standard_raster;
-
- } RasterPIC;
-
-
-#define GET_PIC( lib ) \
- ( (RasterPIC*)( (lib)->pic_container.raster ) )
-#define FT_STANDARD_RASTER_GET ( GET_PIC( library )->ft_standard_raster )
-
-
- /* see rastpic.c for the implementation */
- void
- ft_raster1_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* RASTPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/raster/rules.mk b/freetype/src/raster/rules.mk
index 9aef1f0b..7664671e 100644
--- a/freetype/src/raster/rules.mk
+++ b/freetype/src/raster/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -28,8 +28,7 @@ RASTER_COMPILE := $(CC) $(ANSIFLAGS) \
# raster driver sources (i.e., C files)
#
RASTER_DRV_SRC := $(RASTER_DIR)/ftraster.c \
- $(RASTER_DIR)/ftrend1.c \
- $(RASTER_DIR)/rastpic.c
+ $(RASTER_DIR)/ftrend1.c
# raster driver headers
diff --git a/freetype/src/sfnt/Jamfile b/freetype/src/sfnt/Jamfile
index 57977fc9..f646b352 100644
--- a/freetype/src/sfnt/Jamfile
+++ b/freetype/src/sfnt/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/sfnt Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -22,6 +22,8 @@ SubDir FT2_TOP $(FT2_SRC_DIR) sfnt ;
sfobjs
ttbdf
ttcmap
+ ttcolr
+ ttcpal
ttkern
ttload
ttmtx
diff --git a/freetype/src/sfnt/module.mk b/freetype/src/sfnt/module.mk
index 51ca67e7..8c3b44fe 100644
--- a/freetype/src/sfnt/module.mk
+++ b/freetype/src/sfnt/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/sfnt/pngshim.c b/freetype/src/sfnt/pngshim.c
index 16020266..ca85d975 100644
--- a/freetype/src/sfnt/pngshim.c
+++ b/freetype/src/sfnt/pngshim.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* pngshim.c */
-/* */
-/* PNG Bitmap glyph support. */
-/* */
-/* Copyright 2013-2018 by */
-/* Google, Inc. */
-/* Written by Stuart Gill and Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pngshim.c
+ *
+ * PNG Bitmap glyph support.
+ *
+ * Copyright (C) 2013-2019 by
+ * Google, Inc.
+ * Written by Stuart Gill and Behdad Esfahbod.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
diff --git a/freetype/src/sfnt/pngshim.h b/freetype/src/sfnt/pngshim.h
index 194238c3..06c6f6b2 100644
--- a/freetype/src/sfnt/pngshim.h
+++ b/freetype/src/sfnt/pngshim.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* pngshim.h */
-/* */
-/* PNG Bitmap glyph support. */
-/* */
-/* Copyright 2013-2018 by */
-/* Google, Inc. */
-/* Written by Stuart Gill and Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * pngshim.h
+ *
+ * PNG Bitmap glyph support.
+ *
+ * Copyright (C) 2013-2019 by
+ * Google, Inc.
+ * Written by Stuart Gill and Behdad Esfahbod.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef PNGSHIM_H_
diff --git a/freetype/src/sfnt/rules.mk b/freetype/src/sfnt/rules.mk
index 83acc66a..ee3314ea 100644
--- a/freetype/src/sfnt/rules.mk
+++ b/freetype/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -28,17 +28,19 @@ SFNT_COMPILE := $(CC) $(ANSIFLAGS) \
# SFNT driver sources (i.e., C files)
#
-SFNT_DRV_SRC := $(SFNT_DIR)/ttload.c \
- $(SFNT_DIR)/ttmtx.c \
+SFNT_DRV_SRC := $(SFNT_DIR)/pngshim.c \
+ $(SFNT_DIR)/sfdriver.c \
+ $(SFNT_DIR)/sfobjs.c \
+ $(SFNT_DIR)/sfwoff.c \
+ $(SFNT_DIR)/ttbdf.c \
$(SFNT_DIR)/ttcmap.c \
- $(SFNT_DIR)/ttsbit.c \
- $(SFNT_DIR)/ttpost.c \
+ $(SFNT_DIR)/ttcolr.c \
+ $(SFNT_DIR)/ttcpal.c \
$(SFNT_DIR)/ttkern.c \
- $(SFNT_DIR)/ttbdf.c \
- $(SFNT_DIR)/sfobjs.c \
- $(SFNT_DIR)/sfdriver.c \
- $(SFNT_DIR)/sfntpic.c \
- $(SFNT_DIR)/pngshim.c
+ $(SFNT_DIR)/ttload.c \
+ $(SFNT_DIR)/ttmtx.c \
+ $(SFNT_DIR)/ttpost.c \
+ $(SFNT_DIR)/ttsbit.c
# SFNT driver headers
#
diff --git a/freetype/src/sfnt/sfdriver.c b/freetype/src/sfnt/sfdriver.c
index 303e1ca9..26116852 100644
--- a/freetype/src/sfnt/sfdriver.c
+++ b/freetype/src/sfnt/sfdriver.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfdriver.c */
-/* */
-/* High-level SFNT driver interface (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * sfdriver.c
+ *
+ * High-level SFNT driver interface (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -25,7 +25,6 @@
#include "sfdriver.h"
#include "ttload.h"
#include "sfobjs.h"
-#include "sfntpic.h"
#include "sferrors.h"
@@ -33,6 +32,11 @@
#include "ttsbit.h"
#endif
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+#include "ttcolr.h"
+#include "ttcpal.h"
+#endif
+
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
#include "ttpost.h"
#endif
@@ -57,18 +61,18 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_sfdriver
+#define FT_COMPONENT sfdriver
/*
- * SFNT TABLE SERVICE
+ * SFNT TABLE SERVICE
*
*/
@@ -155,7 +159,7 @@
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
/*
- * GLYPH DICT SERVICE
+ * GLYPH DICT SERVICE
*
*/
@@ -178,8 +182,8 @@
static FT_UInt
- sfnt_get_name_index( FT_Face face,
- FT_String* glyph_name )
+ sfnt_get_name_index( FT_Face face,
+ const FT_String* glyph_name )
{
TT_Face ttface = (TT_Face)face;
@@ -222,7 +226,7 @@
/*
- * POSTSCRIPT NAME SERVICE
+ * POSTSCRIPT NAME SERVICE
*
*/
@@ -371,47 +375,61 @@
{
case 15:
k4 ^= (FT_UInt32)tail[14] << 16;
+ /* fall through */
case 14:
k4 ^= (FT_UInt32)tail[13] << 8;
+ /* fall through */
case 13:
k4 ^= (FT_UInt32)tail[12];
k4 *= c4;
k4 = ROTL32( k4, 18 );
k4 *= c1;
h4 ^= k4;
+ /* fall through */
case 12:
k3 ^= (FT_UInt32)tail[11] << 24;
+ /* fall through */
case 11:
k3 ^= (FT_UInt32)tail[10] << 16;
+ /* fall through */
case 10:
k3 ^= (FT_UInt32)tail[9] << 8;
+ /* fall through */
case 9:
k3 ^= (FT_UInt32)tail[8];
k3 *= c3;
k3 = ROTL32( k3, 17 );
k3 *= c4;
h3 ^= k3;
+ /* fall through */
case 8:
k2 ^= (FT_UInt32)tail[7] << 24;
+ /* fall through */
case 7:
k2 ^= (FT_UInt32)tail[6] << 16;
+ /* fall through */
case 6:
k2 ^= (FT_UInt32)tail[5] << 8;
+ /* fall through */
case 5:
k2 ^= (FT_UInt32)tail[4];
k2 *= c2;
k2 = ROTL32( k2, 16 );
k2 *= c3;
h2 ^= k2;
+ /* fall through */
case 4:
k1 ^= (FT_UInt32)tail[3] << 24;
+ /* fall through */
case 3:
k1 ^= (FT_UInt32)tail[2] << 16;
+ /* fall through */
case 2:
k1 ^= (FT_UInt32)tail[1] << 8;
+ /* fall through */
case 1:
k1 ^= (FT_UInt32)tail[0];
k1 *= c1;
@@ -460,14 +478,12 @@
typedef int (*char_type_func)( int c );
- /* handling of PID/EID 3/0 and 3/1 is the same */
+ /* Handling of PID/EID 3/0 and 3/1 is the same. */
#define IS_WIN( n ) ( (n)->platformID == 3 && \
- ( (n)->encodingID == 1 || (n)->encodingID == 0 ) && \
- (n)->languageID == 0x409 )
+ ( (n)->encodingID == 1 || (n)->encodingID == 0 ) )
#define IS_APPLE( n ) ( (n)->platformID == 1 && \
- (n)->encodingID == 0 && \
- (n)->languageID == 0 )
+ (n)->encodingID == 0 )
static char*
get_win_string( FT_Memory memory,
@@ -491,42 +507,40 @@
if ( FT_STREAM_SEEK( entry->stringOffset ) ||
FT_FRAME_ENTER( entry->stringLength ) )
- {
- FT_FREE( result );
- entry->stringLength = 0;
- entry->stringOffset = 0;
- FT_FREE( entry->string );
-
- return NULL;
- }
+ goto get_win_string_error;
r = (FT_String*)result;
p = (FT_Char*)stream->cursor;
for ( len = entry->stringLength / 2; len > 0; len--, p += 2 )
{
- if ( p[0] == 0 )
+ if ( p[0] == 0 && char_type( p[1] ) )
+ *r++ = p[1];
+ else
{
- if ( char_type( p[1] ) )
- *r++ = p[1];
- else
- {
- if ( report_invalid_characters )
- {
- FT_TRACE0(( "get_win_string:"
- " Character `%c' (0x%X) invalid in PS name string\n",
- p[1], p[1] ));
- /* it's not the job of FreeType to correct PS names... */
- *r++ = p[1];
- }
- }
+ if ( report_invalid_characters )
+ FT_TRACE0(( "get_win_string:"
+ " Character 0x%X invalid in PS name string\n",
+ ((unsigned)p[0])*256 + (unsigned)p[1] ));
+ break;
}
}
- *r = '\0';
+ if ( !len )
+ *r = '\0';
FT_FRAME_EXIT();
- return result;
+ if ( !len )
+ return result;
+
+ get_win_string_error:
+ FT_FREE( result );
+
+ entry->stringLength = 0;
+ entry->stringOffset = 0;
+ FT_FREE( entry->string );
+
+ return NULL;
}
@@ -552,14 +566,7 @@
if ( FT_STREAM_SEEK( entry->stringOffset ) ||
FT_FRAME_ENTER( entry->stringLength ) )
- {
- FT_FREE( result );
- entry->stringOffset = 0;
- entry->stringLength = 0;
- FT_FREE( entry->string );
-
- return NULL;
- }
+ goto get_apple_string_error;
r = (FT_String*)result;
p = (FT_Char*)stream->cursor;
@@ -571,20 +578,28 @@
else
{
if ( report_invalid_characters )
- {
FT_TRACE0(( "get_apple_string:"
" Character `%c' (0x%X) invalid in PS name string\n",
*p, *p ));
- /* it's not the job of FreeType to correct PS names... */
- *r++ = *p;
- }
+ break;
}
}
- *r = '\0';
+ if ( !len )
+ *r = '\0';
FT_FRAME_EXIT();
- return result;
+ if ( !len )
+ return result;
+
+ get_apple_string_error:
+ FT_FREE( result );
+
+ entry->stringOffset = 0;
+ entry->stringLength = 0;
+ FT_FREE( entry->string );
+
+ return NULL;
}
@@ -607,10 +622,10 @@
if ( name->nameID == id && name->stringLength > 0 )
{
- if ( IS_WIN( name ) )
+ if ( IS_WIN( name ) && ( name->languageID == 0x409 || *win == -1 ) )
*win = n;
- if ( IS_APPLE( name ) )
+ if ( IS_APPLE( name ) && ( name->languageID == 0 || *apple == -1 ) )
*apple = n;
}
}
@@ -643,9 +658,9 @@
/*
- * Find the shortest decimal representation of a 16.16 fixed point
- * number. The function fills `buf' with the result, returning a pointer
- * to the position after the representation's last byte.
+ * Find the shortest decimal representation of a 16.16 fixed point
+ * number. The function fills `buf' with the result, returning a pointer
+ * to the position after the representation's last byte.
*/
static char*
@@ -673,7 +688,7 @@
if ( fixed < 0 )
{
*p++ = '-';
- fixed = -fixed;
+ fixed = NEG_INT( fixed );
}
int_part = ( fixed >> 16 ) & 0xFFFF;
@@ -828,13 +843,20 @@
face->name_table.names + win,
sfnt_is_alphanumeric,
0 );
- else
+ if ( !result && apple != -1 )
result = get_apple_string( face->root.memory,
face->name_table.stream,
face->name_table.names + apple,
sfnt_is_alphanumeric,
0 );
+ if ( !result )
+ {
+ FT_TRACE0(( "sfnt_get_var_ps_name:"
+ " No valid PS name prefix for font instances found\n" ));
+ return NULL;
+ }
+
len = ft_strlen( result );
/* sanitize if necessary; we reserve space for 36 bytes (a 128bit */
@@ -1052,7 +1074,7 @@
face->name_table.names + win,
sfnt_is_postscript,
1 );
- else
+ if ( !result && apple != -1 )
result = get_apple_string( face->root.memory,
face->name_table.stream,
face->name_table.names + apple,
@@ -1073,7 +1095,7 @@
/*
- * TT CMAP INFO
+ * TT CMAP INFO
*/
FT_DEFINE_SERVICE_TTCMAPSREC(
tt_service_get_cmap_info,
@@ -1132,41 +1154,41 @@
/*
- * SERVICE LIST
+ * SERVICE LIST
*/
#if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF
FT_DEFINE_SERVICEDESCREC5(
sfnt_services,
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
+ FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name,
+ FT_SERVICE_ID_GLYPH_DICT, &sfnt_service_glyph_dict,
+ FT_SERVICE_ID_BDF, &sfnt_service_bdf,
+ FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info )
#elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES
FT_DEFINE_SERVICEDESCREC4(
sfnt_services,
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
+ FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name,
+ FT_SERVICE_ID_GLYPH_DICT, &sfnt_service_glyph_dict,
+ FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info )
#elif defined TT_CONFIG_OPTION_BDF
FT_DEFINE_SERVICEDESCREC4(
sfnt_services,
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
+ FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name,
+ FT_SERVICE_ID_BDF, &sfnt_service_bdf,
+ FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info )
#else
FT_DEFINE_SERVICEDESCREC3(
sfnt_services,
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
+ FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name,
+ FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info )
#endif
@@ -1174,21 +1196,9 @@
sfnt_get_interface( FT_Module module,
const char* module_interface )
{
- /* SFNT_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
FT_UNUSED( module );
-#endif
- return ft_service_list_lookup( SFNT_SERVICES_GET, module_interface );
+ return ft_service_list_lookup( sfnt_services, module_interface );
}
@@ -1198,6 +1208,12 @@
#define PUT_EMBEDDED_BITMAPS( a ) NULL
#endif
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+#define PUT_COLOR_LAYERS( a ) a
+#else
+#define PUT_COLOR_LAYERS( a ) NULL
+#endif
+
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
#define PUT_PS_NAMES( a ) a
#else
@@ -1256,9 +1272,24 @@
/* TT_Free_Table_Func free_eblc */
PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ),
- /* TT_Set_SBit_Strike_Func set_sbit_strike */
+ /* TT_Set_SBit_Strike_Func set_sbit_strike */
PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ),
- /* TT_Load_Strike_Metrics_Func load_strike_metrics */
+ /* TT_Load_Strike_Metrics_Func load_strike_metrics */
+
+ PUT_COLOR_LAYERS( tt_face_load_cpal ),
+ /* TT_Load_Table_Func load_cpal */
+ PUT_COLOR_LAYERS( tt_face_load_colr ),
+ /* TT_Load_Table_Func load_colr */
+ PUT_COLOR_LAYERS( tt_face_free_cpal ),
+ /* TT_Free_Table_Func free_cpal */
+ PUT_COLOR_LAYERS( tt_face_free_colr ),
+ /* TT_Free_Table_Func free_colr */
+ PUT_COLOR_LAYERS( tt_face_palette_set ),
+ /* TT_Set_Palette_Func set_palette */
+ PUT_COLOR_LAYERS( tt_face_get_colr_layer ),
+ /* TT_Get_Colr_Layer_Func get_colr_layer */
+ PUT_COLOR_LAYERS( tt_face_colr_blend_layer ),
+ /* TT_Blend_Colr_Func colr_blend */
tt_face_get_metrics, /* TT_Get_Metrics_Func get_metrics */
@@ -1277,7 +1308,7 @@
0x10000L, /* driver version 1.0 */
0x20000L, /* driver requires FreeType 2.0 or higher */
- (const void*)&SFNT_INTERFACE_GET, /* module specific interface */
+ (const void*)&sfnt_interface, /* module specific interface */
(FT_Module_Constructor)NULL, /* module_init */
(FT_Module_Destructor) NULL, /* module_done */
diff --git a/freetype/src/sfnt/sfdriver.h b/freetype/src/sfnt/sfdriver.h
index 81c22d28..8c174634 100644
--- a/freetype/src/sfnt/sfdriver.h
+++ b/freetype/src/sfnt/sfdriver.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfdriver.h */
-/* */
-/* High-level SFNT driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * sfdriver.h
+ *
+ * High-level SFNT driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,10 +26,8 @@
FT_BEGIN_HEADER
-
FT_DECLARE_MODULE( sfnt_module_class )
-
FT_END_HEADER
#endif /* SFDRIVER_H_ */
diff --git a/freetype/src/sfnt/sferrors.h b/freetype/src/sfnt/sferrors.h
index 74003d4b..43e148d2 100644
--- a/freetype/src/sfnt/sferrors.h
+++ b/freetype/src/sfnt/sferrors.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* sferrors.h */
-/* */
-/* SFNT error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * sferrors.h
+ *
+ * SFNT error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/sfnt/sfnt.c b/freetype/src/sfnt/sfnt.c
index 8b9a6b34..b4faf34a 100644
--- a/freetype/src/sfnt/sfnt.c
+++ b/freetype/src/sfnt/sfnt.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfnt.c */
-/* */
-/* Single object library component. */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * Single object library component.
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -21,10 +21,13 @@
#include "pngshim.c"
#include "sfdriver.c"
-#include "sfntpic.c"
#include "sfobjs.c"
+#include "sfwoff.c"
#include "ttbdf.c"
#include "ttcmap.c"
+#include "ttcolr.c"
+#include "ttcpal.c"
+
#include "ttkern.c"
#include "ttload.c"
#include "ttmtx.c"
diff --git a/freetype/src/sfnt/sfntpic.c b/freetype/src/sfnt/sfntpic.c
deleted file mode 100644
index db2d816c..00000000
--- a/freetype/src/sfnt/sfntpic.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.c */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "sfntpic.h"
-#include "sferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from sfdriver.c */
- FT_Error
- FT_Create_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec* clazz );
- void
- FT_Init_Class_sfnt_interface( FT_Library library,
- SFNT_Interface* clazz );
- void
- FT_Init_Class_sfnt_service_glyph_dict(
- FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_sfnt_service_ps_name(
- FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_tt_service_get_cmap_info(
- FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_sfnt_service_sfnt_table(
- FT_Service_SFNT_TableRec* clazz );
-
-
- /* forward declaration of PIC init functions from ttcmap.c */
- FT_Error
- FT_Create_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class** output_class );
- void
- FT_Destroy_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class* clazz );
-
-
- void
- sfnt_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->sfnt )
- {
- sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt;
-
-
- if ( container->sfnt_services )
- FT_Destroy_Class_sfnt_services( library,
- container->sfnt_services );
- container->sfnt_services = NULL;
-
- if ( container->tt_cmap_classes )
- FT_Destroy_Class_tt_cmap_classes( library,
- container->tt_cmap_classes );
- container->tt_cmap_classes = NULL;
-
- FT_FREE( container );
- pic_container->sfnt = NULL;
- }
- }
-
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- sfntModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->sfnt = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_sfnt_services( library,
- &container->sfnt_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_tt_cmap_classes( library,
- &container->tt_cmap_classes );
- if ( error )
- goto Exit;
-
- FT_Init_Class_sfnt_service_glyph_dict(
- library, &container->sfnt_service_glyph_dict );
- FT_Init_Class_sfnt_service_ps_name(
- library, &container->sfnt_service_ps_name );
- FT_Init_Class_tt_service_get_cmap_info(
- library, &container->tt_service_get_cmap_info );
- FT_Init_Class_sfnt_service_sfnt_table(
- &container->sfnt_service_sfnt_table );
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
-#endif
- FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
-
- Exit:
- if ( error )
- sfnt_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/sfnt/sfntpic.h b/freetype/src/sfnt/sfntpic.h
deleted file mode 100644
index 8f43122d..00000000
--- a/freetype/src/sfnt/sfntpic.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.h */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFNTPIC_H_
-#define SFNTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define SFNT_SERVICES_GET sfnt_services
-#define SFNT_SERVICE_GLYPH_DICT_GET sfnt_service_glyph_dict
-#define SFNT_SERVICE_PS_NAME_GET sfnt_service_ps_name
-#define TT_SERVICE_CMAP_INFO_GET tt_service_get_cmap_info
-#define TT_CMAP_CLASSES_GET tt_cmap_classes
-#define SFNT_SERVICE_SFNT_TABLE_GET sfnt_service_sfnt_table
-#define SFNT_SERVICE_BDF_GET sfnt_service_bdf
-#define SFNT_INTERFACE_GET sfnt_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of sfntModulePIC */
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TT_CMAP_H
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.h"
-#include FT_SERVICE_BDF_H
-#endif
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include "ttcmap.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct sfntModulePIC_
- {
- FT_ServiceDescRec* sfnt_services;
- FT_Service_GlyphDictRec sfnt_service_glyph_dict;
- FT_Service_PsFontNameRec sfnt_service_ps_name;
- FT_Service_TTCMapsRec tt_service_get_cmap_info;
- TT_CMap_Class* tt_cmap_classes;
- FT_Service_SFNT_TableRec sfnt_service_sfnt_table;
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Service_BDFRec sfnt_service_bdf;
-#endif
- SFNT_Interface sfnt_interface;
-
- } sfntModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (sfntModulePIC*)( (lib)->pic_container.sfnt ) )
-
-#define SFNT_SERVICES_GET \
- ( GET_PIC( library )->sfnt_services )
-#define SFNT_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->sfnt_service_glyph_dict )
-#define SFNT_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->sfnt_service_ps_name )
-#define TT_SERVICE_CMAP_INFO_GET \
- ( GET_PIC( library )->tt_service_get_cmap_info )
-#define TT_CMAP_CLASSES_GET \
- ( GET_PIC( library )->tt_cmap_classes )
-#define SFNT_SERVICE_SFNT_TABLE_GET \
- ( GET_PIC( library )->sfnt_service_sfnt_table )
-#define SFNT_SERVICE_BDF_GET \
- ( GET_PIC( library )->sfnt_service_bdf )
-#define SFNT_INTERFACE_GET \
- ( GET_PIC( library )->sfnt_interface )
-
-
- /* see sfntpic.c for the implementation */
- void
- sfnt_module_class_pic_free( FT_Library library );
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library );
-
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* SFNTPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/sfnt/sfobjs.c b/freetype/src/sfnt/sfobjs.c
index 6ba8509f..6edf3ae1 100644
--- a/freetype/src/sfnt/sfobjs.c
+++ b/freetype/src/sfnt/sfobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfobjs.c */
-/* */
-/* SFNT object management (base). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * sfobjs.c
+ *
+ * SFNT object management (base).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -21,13 +21,13 @@
#include "ttload.h"
#include "ttcmap.h"
#include "ttkern.h"
+#include "sfwoff.h"
#include FT_INTERNAL_SFNT_H
#include FT_INTERNAL_DEBUG_H
#include FT_TRUETYPE_IDS_H
#include FT_TRUETYPE_TAGS_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include FT_SFNT_NAMES_H
-#include FT_GZIP_H
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_SERVICE_MULTIPLE_MASTERS_H
@@ -41,14 +41,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT sfobjs
@@ -337,403 +337,6 @@
}
-#define WRITE_USHORT( p, v ) \
- do \
- { \
- *(p)++ = (FT_Byte)( (v) >> 8 ); \
- *(p)++ = (FT_Byte)( (v) >> 0 ); \
- \
- } while ( 0 )
-
-#define WRITE_ULONG( p, v ) \
- do \
- { \
- *(p)++ = (FT_Byte)( (v) >> 24 ); \
- *(p)++ = (FT_Byte)( (v) >> 16 ); \
- *(p)++ = (FT_Byte)( (v) >> 8 ); \
- *(p)++ = (FT_Byte)( (v) >> 0 ); \
- \
- } while ( 0 )
-
-
- static void
- sfnt_stream_close( FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( stream->base );
-
- stream->size = 0;
- stream->base = NULL;
- stream->close = NULL;
- }
-
-
- FT_CALLBACK_DEF( int )
- compare_offsets( const void* a,
- const void* b )
- {
- WOFF_Table table1 = *(WOFF_Table*)a;
- WOFF_Table table2 = *(WOFF_Table*)b;
-
- FT_ULong offset1 = table1->Offset;
- FT_ULong offset2 = table2->Offset;
-
-
- if ( offset1 > offset2 )
- return 1;
- else if ( offset1 < offset2 )
- return -1;
- else
- return 0;
- }
-
-
- /* Replace `face->root.stream' with a stream containing the extracted */
- /* SFNT of a WOFF font. */
-
- static FT_Error
- woff_open_font( FT_Stream stream,
- TT_Face face )
- {
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
-
- WOFF_HeaderRec woff;
- WOFF_Table tables = NULL;
- WOFF_Table* indices = NULL;
-
- FT_ULong woff_offset;
-
- FT_Byte* sfnt = NULL;
- FT_Stream sfnt_stream = NULL;
-
- FT_Byte* sfnt_header;
- FT_ULong sfnt_offset;
-
- FT_Int nn;
- FT_ULong old_tag = 0;
-
- static const FT_Frame_Field woff_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WOFF_HeaderRec
-
- FT_FRAME_START( 44 ),
- FT_FRAME_ULONG ( signature ),
- FT_FRAME_ULONG ( flavor ),
- FT_FRAME_ULONG ( length ),
- FT_FRAME_USHORT( num_tables ),
- FT_FRAME_USHORT( reserved ),
- FT_FRAME_ULONG ( totalSfntSize ),
- FT_FRAME_USHORT( majorVersion ),
- FT_FRAME_USHORT( minorVersion ),
- FT_FRAME_ULONG ( metaOffset ),
- FT_FRAME_ULONG ( metaLength ),
- FT_FRAME_ULONG ( metaOrigLength ),
- FT_FRAME_ULONG ( privOffset ),
- FT_FRAME_ULONG ( privLength ),
- FT_FRAME_END
- };
-
-
- FT_ASSERT( stream == face->root.stream );
- FT_ASSERT( FT_STREAM_POS() == 0 );
-
- if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )
- return error;
-
- /* Make sure we don't recurse back here or hit TTC code. */
- if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )
- return FT_THROW( Invalid_Table );
-
- /* Miscellaneous checks. */
- if ( woff.length != stream->size ||
- woff.num_tables == 0 ||
- 44 + woff.num_tables * 20UL >= woff.length ||
- 12 + woff.num_tables * 16UL >= woff.totalSfntSize ||
- ( woff.totalSfntSize & 3 ) != 0 ||
- ( woff.metaOffset == 0 && ( woff.metaLength != 0 ||
- woff.metaOrigLength != 0 ) ) ||
- ( woff.metaLength != 0 && woff.metaOrigLength == 0 ) ||
- ( woff.privOffset == 0 && woff.privLength != 0 ) )
- {
- FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
- return FT_THROW( Invalid_Table );
- }
-
- /* Don't trust `totalSfntSize' before thorough checks. */
- if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
- FT_NEW( sfnt_stream ) )
- goto Exit;
-
- sfnt_header = sfnt;
-
- /* Write sfnt header. */
- {
- FT_UInt searchRange, entrySelector, rangeShift, x;
-
-
- x = woff.num_tables;
- entrySelector = 0;
- while ( x )
- {
- x >>= 1;
- entrySelector += 1;
- }
- entrySelector--;
-
- searchRange = ( 1 << entrySelector ) * 16;
- rangeShift = woff.num_tables * 16 - searchRange;
-
- WRITE_ULONG ( sfnt_header, woff.flavor );
- WRITE_USHORT( sfnt_header, woff.num_tables );
- WRITE_USHORT( sfnt_header, searchRange );
- WRITE_USHORT( sfnt_header, entrySelector );
- WRITE_USHORT( sfnt_header, rangeShift );
- }
-
- /* While the entries in the sfnt header must be sorted by the */
- /* tag value, the tables themselves are not. We thus have to */
- /* sort them by offset and check that they don't overlap. */
-
- if ( FT_NEW_ARRAY( tables, woff.num_tables ) ||
- FT_NEW_ARRAY( indices, woff.num_tables ) )
- goto Exit;
-
- FT_TRACE2(( "\n"
- " tag offset compLen origLen checksum\n"
- " -------------------------------------------\n" ));
-
- if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
- goto Exit;
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = tables + nn;
-
- table->Tag = FT_GET_TAG4();
- table->Offset = FT_GET_ULONG();
- table->CompLength = FT_GET_ULONG();
- table->OrigLength = FT_GET_ULONG();
- table->CheckSum = FT_GET_ULONG();
-
- FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx %08lx\n",
- (FT_Char)( table->Tag >> 24 ),
- (FT_Char)( table->Tag >> 16 ),
- (FT_Char)( table->Tag >> 8 ),
- (FT_Char)( table->Tag ),
- table->Offset,
- table->CompLength,
- table->OrigLength,
- table->CheckSum ));
-
- if ( table->Tag <= old_tag )
- {
- FT_FRAME_EXIT();
-
- FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- old_tag = table->Tag;
- indices[nn] = table;
- }
-
- FT_FRAME_EXIT();
-
- /* Sort by offset. */
-
- ft_qsort( indices,
- woff.num_tables,
- sizeof ( WOFF_Table ),
- compare_offsets );
-
- /* Check offsets and lengths. */
-
- woff_offset = 44 + woff.num_tables * 20L;
- sfnt_offset = 12 + woff.num_tables * 16L;
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = indices[nn];
-
-
- if ( table->Offset != woff_offset ||
- table->CompLength > woff.length ||
- table->Offset > woff.length - table->CompLength ||
- table->OrigLength > woff.totalSfntSize ||
- sfnt_offset > woff.totalSfntSize - table->OrigLength ||
- table->CompLength > table->OrigLength )
- {
- FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- table->OrigOffset = sfnt_offset;
-
- /* The offsets must be multiples of 4. */
- woff_offset += ( table->CompLength + 3 ) & ~3U;
- sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
- }
-
- /*
- * Final checks!
- *
- * We don't decode and check the metadata block.
- * We don't check table checksums either.
- * But other than those, I think we implement all
- * `MUST' checks from the spec.
- */
-
- if ( woff.metaOffset )
- {
- if ( woff.metaOffset != woff_offset ||
- woff.metaOffset + woff.metaLength > woff.length )
- {
- FT_ERROR(( "woff_font_open:"
- " invalid `metadata' offset or length\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* We have padding only ... */
- woff_offset += woff.metaLength;
- }
-
- if ( woff.privOffset )
- {
- /* ... if it isn't the last block. */
- woff_offset = ( woff_offset + 3 ) & ~3U;
-
- if ( woff.privOffset != woff_offset ||
- woff.privOffset + woff.privLength > woff.length )
- {
- FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* No padding for the last block. */
- woff_offset += woff.privLength;
- }
-
- if ( sfnt_offset != woff.totalSfntSize ||
- woff_offset != woff.length )
- {
- FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* Now use `totalSfntSize'. */
- if ( FT_REALLOC( sfnt,
- 12 + woff.num_tables * 16UL,
- woff.totalSfntSize ) )
- goto Exit;
-
- sfnt_header = sfnt + 12;
-
- /* Write the tables. */
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = tables + nn;
-
-
- /* Write SFNT table entry. */
- WRITE_ULONG( sfnt_header, table->Tag );
- WRITE_ULONG( sfnt_header, table->CheckSum );
- WRITE_ULONG( sfnt_header, table->OrigOffset );
- WRITE_ULONG( sfnt_header, table->OrigLength );
-
- /* Write table data. */
- if ( FT_STREAM_SEEK( table->Offset ) ||
- FT_FRAME_ENTER( table->CompLength ) )
- goto Exit;
-
- if ( table->CompLength == table->OrigLength )
- {
- /* Uncompressed data; just copy. */
- ft_memcpy( sfnt + table->OrigOffset,
- stream->cursor,
- table->OrigLength );
- }
- else
- {
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
-
- /* Uncompress with zlib. */
- FT_ULong output_len = table->OrigLength;
-
-
- error = FT_Gzip_Uncompress( memory,
- sfnt + table->OrigOffset, &output_len,
- stream->cursor, table->CompLength );
- if ( error )
- goto Exit;
- if ( output_len != table->OrigLength )
- {
- FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
-#else /* !FT_CONFIG_OPTION_USE_ZLIB */
-
- error = FT_THROW( Unimplemented_Feature );
- goto Exit;
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
- }
-
- FT_FRAME_EXIT();
-
- /* We don't check whether the padding bytes in the WOFF file are */
- /* actually '\0'. For the output, however, we do set them properly. */
- sfnt_offset = table->OrigOffset + table->OrigLength;
- while ( sfnt_offset & 3 )
- {
- sfnt[sfnt_offset] = '\0';
- sfnt_offset++;
- }
- }
-
- /* Ok! Finally ready. Swap out stream and return. */
- FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize );
- sfnt_stream->memory = stream->memory;
- sfnt_stream->close = sfnt_stream_close;
-
- FT_Stream_Free(
- face->root.stream,
- ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
-
- face->root.stream = sfnt_stream;
-
- face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
-
- Exit:
- FT_FREE( tables );
- FT_FREE( indices );
-
- if ( error )
- {
- FT_FREE( sfnt );
- FT_Stream_Close( sfnt_stream );
- FT_FREE( sfnt_stream );
- }
-
- return error;
- }
-
-
-#undef WRITE_USHORT
-#undef WRITE_ULONG
-
-
/* Fill in face->ttc_header. If the font is not a TTC, it is */
/* synthesized into a TTC with one offset table. */
static FT_Error
@@ -918,7 +521,9 @@
/* Stream may have changed in sfnt_open_font. */
stream = face->root.stream;
- FT_TRACE2(( "sfnt_init_face: %08p, %d\n", face, face_instance_index ));
+ FT_TRACE2(( "sfnt_init_face: %08p (index %d)\n",
+ face,
+ face_instance_index ));
face_index = FT_ABS( face_instance_index ) & 0xFFFF;
@@ -1001,15 +606,15 @@
face->variation_support |= TT_FACE_FLAG_VAR_FVAR;
/*
- * As documented in the OpenType specification, an entry for the
- * default instance may be omitted in the named instance table. In
- * particular this means that even if there is no named instance
- * table in the font we actually do have a named instance, namely the
- * default instance.
+ * As documented in the OpenType specification, an entry for the
+ * default instance may be omitted in the named instance table. In
+ * particular this means that even if there is no named instance
+ * table in the font we actually do have a named instance, namely the
+ * default instance.
*
- * For consistency, we always want the default instance in our list
- * of named instances. If it is missing, we try to synthesize it
- * later on. Here, we have to adjust `num_instances' accordingly.
+ * For consistency, we always want the default instance in our list
+ * of named instances. If it is missing, we try to synthesize it
+ * later on. Here, we have to adjust `num_instances' accordingly.
*/
if ( ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) &&
@@ -1341,6 +946,13 @@
if ( sfnt->load_eblc )
LOAD_( eblc );
+ /* colored glyph support */
+ if ( sfnt->load_cpal )
+ {
+ LOAD_( cpal );
+ LOAD_( colr );
+ }
+
/* consider the pclt, kerning, and gasp tables as optional */
LOAD_( pclt );
LOAD_( gasp );
@@ -1389,12 +1001,13 @@
FT_Long flags = root->face_flags;
- /*********************************************************************/
- /* */
- /* Compute face flags. */
- /* */
+ /**********************************************************************
+ *
+ * Compute face flags.
+ */
if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_CBLC ||
- face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX )
+ face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX ||
+ face->colr )
flags |= FT_FACE_FLAG_COLOR; /* color glyphs */
if ( has_outline == TRUE )
@@ -1438,10 +1051,10 @@
root->face_flags = flags;
- /*********************************************************************/
- /* */
- /* Compute style flags. */
- /* */
+ /**********************************************************************
+ *
+ * Compute style flags.
+ */
flags = 0;
if ( has_outline == TRUE && face->os2.version != 0xFFFFU )
@@ -1471,14 +1084,14 @@
root->style_flags |= flags;
- /*********************************************************************/
- /* */
- /* Polish the charmaps. */
- /* */
- /* Try to set the charmap encoding according to the platform & */
- /* encoding ID of each charmap. Emulate Unicode charmap if one */
- /* is missing. */
- /* */
+ /**********************************************************************
+ *
+ * Polish the charmaps.
+ *
+ * Try to set the charmap encoding according to the platform &
+ * encoding ID of each charmap. Emulate Unicode charmap if one
+ * is missing.
+ */
tt_face_build_cmaps( face ); /* ignore errors */
@@ -1521,7 +1134,8 @@
error = FT_CMap_New( (FT_CMap_Class)&tt_cmap_unicode_class_rec,
NULL, &cmaprec, NULL );
if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+ FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+ FT_ERR_NEQ( error, Unimplemented_Feature ) )
goto Exit;
error = FT_Err_Ok;
@@ -1533,9 +1147,9 @@
#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.
+ * Now allocate the root array of FT_Bitmap_Size records and
+ * populate them. Unfortunately, it isn't possible to indicate bit
+ * depths in the FT_Bitmap_Size record. This is a design error.
*/
{
FT_UInt count;
@@ -1615,10 +1229,10 @@
root->face_flags |= FT_FACE_FLAG_SCALABLE;
- /*********************************************************************/
- /* */
- /* Set up metrics. */
- /* */
+ /**********************************************************************
+ *
+ * Set up metrics.
+ */
if ( FT_IS_SCALABLE( root ) )
{
/* XXX What about if outline header is missing */
@@ -1630,59 +1244,73 @@
root->units_per_EM = face->header.Units_Per_EM;
- /* XXX: Computing the ascender/descender/height is very different */
- /* from what the specification tells you. Apparently, we */
- /* must be careful because */
- /* */
- /* - not all fonts have an OS/2 table; in this case, we take */
- /* the values in the horizontal header. However, these */
- /* values very often are not reliable. */
- /* */
- /* - otherwise, the correct typographic values are in the */
- /* sTypoAscender, sTypoDescender & sTypoLineGap fields. */
- /* */
- /* However, certain fonts have these fields set to 0. */
- /* Rather, they have usWinAscent & usWinDescent correctly */
- /* set (but with different values). */
- /* */
- /* As an example, Arial Narrow is implemented through four */
- /* files ARIALN.TTF, ARIALNI.TTF, ARIALNB.TTF & ARIALNBI.TTF */
- /* */
- /* Strangely, all fonts have the same values in their */
- /* sTypoXXX fields, except ARIALNB which sets them to 0. */
- /* */
- /* On the other hand, they all have different */
- /* usWinAscent/Descent values -- as a conclusion, the OS/2 */
- /* table cannot be used to compute the text height reliably! */
- /* */
-
- /* The ascender and descender are taken from the `hhea' table. */
- /* If zero, they are taken from the `OS/2' table. */
-
- root->ascender = face->horizontal.Ascender;
- root->descender = face->horizontal.Descender;
-
- root->height = root->ascender - root->descender +
- face->horizontal.Line_Gap;
-
- if ( !( root->ascender || root->descender ) )
+ /*
+ * Computing the ascender/descender/height is tricky.
+ *
+ * The OpenType specification v1.8.3 says:
+ *
+ * [OS/2's] sTypoAscender, sTypoDescender and sTypoLineGap fields
+ * are intended to allow applications to lay out documents in a
+ * typographically-correct and portable fashion.
+ *
+ * This is somewhat at odds with the decades of backwards
+ * compatibility, operating systems and applications doing whatever
+ * they want, not to mention broken fonts.
+ *
+ * Not all fonts have an OS/2 table; in this case, we take the values
+ * in the horizontal header, although there is nothing stopping the
+ * values from being unreliable. Even with a OS/2 table, certain fonts
+ * set the sTypoAscender, sTypoDescender and sTypoLineGap fields to 0
+ * and instead correctly set usWinAscent and usWinDescent.
+ *
+ * As an example, Arial Narrow is shipped as four files ARIALN.TTF,
+ * ARIALNI.TTF, ARIALNB.TTF and ARIALNBI.TTF. Strangely, all fonts have
+ * the same values in their sTypo* fields, except ARIALNB.ttf which
+ * sets them to 0. All of them have different usWinAscent/Descent
+ * values. The OS/2 table therefore cannot be trusted for computing the
+ * text height reliably.
+ *
+ * As a compromise, do the following:
+ *
+ * 1. If the OS/2 table exists and the fsSelection bit 7 is set
+ * (USE_TYPO_METRICS), trust the font and use the sTypo* metrics.
+ * 2. Otherwise, use the `hhea' table's metrics.
+ * 3. If they are zero and the OS/2 table exists,
+ * 1. use the OS/2 table's sTypo* metrics if they are non-zero.
+ * 2. Otherwise, use the OS/2 table's usWin* metrics.
+ */
+
+ if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 128 )
{
- if ( face->os2.version != 0xFFFFU )
- {
- if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
- {
- root->ascender = face->os2.sTypoAscender;
- root->descender = face->os2.sTypoDescender;
+ root->ascender = face->os2.sTypoAscender;
+ root->descender = face->os2.sTypoDescender;
+ root->height = root->ascender - root->descender +
+ face->os2.sTypoLineGap;
+ }
+ else
+ {
+ root->ascender = face->horizontal.Ascender;
+ root->descender = face->horizontal.Descender;
+ root->height = root->ascender - root->descender +
+ face->horizontal.Line_Gap;
- root->height = root->ascender - root->descender +
- face->os2.sTypoLineGap;
- }
- else
+ if ( !( root->ascender || root->descender ) )
+ {
+ if ( face->os2.version != 0xFFFFU )
{
- root->ascender = (FT_Short)face->os2.usWinAscent;
- root->descender = -(FT_Short)face->os2.usWinDescent;
-
- root->height = root->ascender - root->descender;
+ if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
+ {
+ root->ascender = face->os2.sTypoAscender;
+ root->descender = face->os2.sTypoDescender;
+ root->height = root->ascender - root->descender +
+ face->os2.sTypoLineGap;
+ }
+ else
+ {
+ root->ascender = (FT_Short)face->os2.usWinAscent;
+ root->descender = -(FT_Short)face->os2.usWinDescent;
+ root->height = root->ascender - root->descender;
+ }
}
}
}
@@ -1737,6 +1365,13 @@
/* destroy the embedded bitmaps table if it is loaded */
if ( sfnt->free_eblc )
sfnt->free_eblc( face );
+
+ /* destroy color table data if it is loaded */
+ if ( sfnt->free_cpal )
+ {
+ sfnt->free_cpal( face );
+ sfnt->free_colr( face );
+ }
}
#ifdef TT_CONFIG_OPTION_BDF
@@ -1792,11 +1427,18 @@
FT_FREE( face->sbit_strike_map );
face->root.num_fixed_sizes = 0;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_FREE( face->postscript_name );
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_FREE( face->var_postscript_prefix );
#endif
+ /* freeing glyph color palette data */
+ FT_FREE( face->palette_data.palette_name_ids );
+ FT_FREE( face->palette_data.palette_flags );
+ FT_FREE( face->palette_data.palette_entry_name_ids );
+ FT_FREE( face->palette );
+
face->sfnt = NULL;
}
diff --git a/freetype/src/sfnt/sfobjs.h b/freetype/src/sfnt/sfobjs.h
index 1b8d1be5..3fbf2dd6 100644
--- a/freetype/src/sfnt/sfobjs.h
+++ b/freetype/src/sfnt/sfobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* sfobjs.h */
-/* */
-/* SFNT object management (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * sfobjs.h
+ *
+ * SFNT object management (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -53,7 +53,7 @@ FT_BEGIN_HEADER
FT_END_HEADER
-#endif /* SFDRIVER_H_ */
+#endif /* SFOBJS_H_ */
/* END */
diff --git a/freetype/src/sfnt/sfwoff.c b/freetype/src/sfnt/sfwoff.c
new file mode 100644
index 00000000..ca4821a2
--- /dev/null
+++ b/freetype/src/sfnt/sfwoff.c
@@ -0,0 +1,434 @@
+/****************************************************************************
+ *
+ * sfwoff.c
+ *
+ * WOFF format management (base).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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 "sfwoff.h"
+#include FT_TRUETYPE_TAGS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+#include FT_GZIP_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 sfwoff
+
+
+#define WRITE_USHORT( p, v ) \
+ do \
+ { \
+ *(p)++ = (FT_Byte)( (v) >> 8 ); \
+ *(p)++ = (FT_Byte)( (v) >> 0 ); \
+ \
+ } while ( 0 )
+
+#define WRITE_ULONG( p, v ) \
+ do \
+ { \
+ *(p)++ = (FT_Byte)( (v) >> 24 ); \
+ *(p)++ = (FT_Byte)( (v) >> 16 ); \
+ *(p)++ = (FT_Byte)( (v) >> 8 ); \
+ *(p)++ = (FT_Byte)( (v) >> 0 ); \
+ \
+ } while ( 0 )
+
+
+ static void
+ sfnt_stream_close( FT_Stream stream )
+ {
+ FT_Memory memory = stream->memory;
+
+
+ FT_FREE( stream->base );
+
+ stream->size = 0;
+ stream->base = NULL;
+ stream->close = NULL;
+ }
+
+
+ FT_CALLBACK_DEF( int )
+ compare_offsets( const void* a,
+ const void* b )
+ {
+ WOFF_Table table1 = *(WOFF_Table*)a;
+ WOFF_Table table2 = *(WOFF_Table*)b;
+
+ FT_ULong offset1 = table1->Offset;
+ FT_ULong offset2 = table2->Offset;
+
+
+ if ( offset1 > offset2 )
+ return 1;
+ else if ( offset1 < offset2 )
+ return -1;
+ else
+ return 0;
+ }
+
+
+ /* Replace `face->root.stream' with a stream containing the extracted */
+ /* SFNT of a WOFF font. */
+
+ FT_LOCAL_DEF( FT_Error )
+ woff_open_font( FT_Stream stream,
+ TT_Face face )
+ {
+ FT_Memory memory = stream->memory;
+ FT_Error error = FT_Err_Ok;
+
+ WOFF_HeaderRec woff;
+ WOFF_Table tables = NULL;
+ WOFF_Table* indices = NULL;
+
+ FT_ULong woff_offset;
+
+ FT_Byte* sfnt = NULL;
+ FT_Stream sfnt_stream = NULL;
+
+ FT_Byte* sfnt_header;
+ FT_ULong sfnt_offset;
+
+ FT_Int nn;
+ FT_ULong old_tag = 0;
+
+ static const FT_Frame_Field woff_header_fields[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE WOFF_HeaderRec
+
+ FT_FRAME_START( 44 ),
+ FT_FRAME_ULONG ( signature ),
+ FT_FRAME_ULONG ( flavor ),
+ FT_FRAME_ULONG ( length ),
+ FT_FRAME_USHORT( num_tables ),
+ FT_FRAME_USHORT( reserved ),
+ FT_FRAME_ULONG ( totalSfntSize ),
+ FT_FRAME_USHORT( majorVersion ),
+ FT_FRAME_USHORT( minorVersion ),
+ FT_FRAME_ULONG ( metaOffset ),
+ FT_FRAME_ULONG ( metaLength ),
+ FT_FRAME_ULONG ( metaOrigLength ),
+ FT_FRAME_ULONG ( privOffset ),
+ FT_FRAME_ULONG ( privLength ),
+ FT_FRAME_END
+ };
+
+
+ FT_ASSERT( stream == face->root.stream );
+ FT_ASSERT( FT_STREAM_POS() == 0 );
+
+ if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )
+ return error;
+
+ /* Make sure we don't recurse back here or hit TTC code. */
+ if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )
+ return FT_THROW( Invalid_Table );
+
+ /* Miscellaneous checks. */
+ if ( woff.length != stream->size ||
+ woff.num_tables == 0 ||
+ 44 + woff.num_tables * 20UL >= woff.length ||
+ 12 + woff.num_tables * 16UL >= woff.totalSfntSize ||
+ ( woff.totalSfntSize & 3 ) != 0 ||
+ ( woff.metaOffset == 0 && ( woff.metaLength != 0 ||
+ woff.metaOrigLength != 0 ) ) ||
+ ( woff.metaLength != 0 && woff.metaOrigLength == 0 ) ||
+ ( woff.privOffset == 0 && woff.privLength != 0 ) )
+ {
+ FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ /* Don't trust `totalSfntSize' before thorough checks. */
+ if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
+ FT_NEW( sfnt_stream ) )
+ goto Exit;
+
+ sfnt_header = sfnt;
+
+ /* Write sfnt header. */
+ {
+ FT_UInt searchRange, entrySelector, rangeShift, x;
+
+
+ x = woff.num_tables;
+ entrySelector = 0;
+ while ( x )
+ {
+ x >>= 1;
+ entrySelector += 1;
+ }
+ entrySelector--;
+
+ searchRange = ( 1 << entrySelector ) * 16;
+ rangeShift = woff.num_tables * 16 - searchRange;
+
+ WRITE_ULONG ( sfnt_header, woff.flavor );
+ WRITE_USHORT( sfnt_header, woff.num_tables );
+ WRITE_USHORT( sfnt_header, searchRange );
+ WRITE_USHORT( sfnt_header, entrySelector );
+ WRITE_USHORT( sfnt_header, rangeShift );
+ }
+
+ /* While the entries in the sfnt header must be sorted by the */
+ /* tag value, the tables themselves are not. We thus have to */
+ /* sort them by offset and check that they don't overlap. */
+
+ if ( FT_NEW_ARRAY( tables, woff.num_tables ) ||
+ FT_NEW_ARRAY( indices, woff.num_tables ) )
+ goto Exit;
+
+ FT_TRACE2(( "\n"
+ " tag offset compLen origLen checksum\n"
+ " -------------------------------------------\n" ));
+
+ if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
+ goto Exit;
+
+ for ( nn = 0; nn < woff.num_tables; nn++ )
+ {
+ WOFF_Table table = tables + nn;
+
+ table->Tag = FT_GET_TAG4();
+ table->Offset = FT_GET_ULONG();
+ table->CompLength = FT_GET_ULONG();
+ table->OrigLength = FT_GET_ULONG();
+ table->CheckSum = FT_GET_ULONG();
+
+ FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx %08lx\n",
+ (FT_Char)( table->Tag >> 24 ),
+ (FT_Char)( table->Tag >> 16 ),
+ (FT_Char)( table->Tag >> 8 ),
+ (FT_Char)( table->Tag ),
+ table->Offset,
+ table->CompLength,
+ table->OrigLength,
+ table->CheckSum ));
+
+ if ( table->Tag <= old_tag )
+ {
+ FT_FRAME_EXIT();
+
+ FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ old_tag = table->Tag;
+ indices[nn] = table;
+ }
+
+ FT_FRAME_EXIT();
+
+ /* Sort by offset. */
+
+ ft_qsort( indices,
+ woff.num_tables,
+ sizeof ( WOFF_Table ),
+ compare_offsets );
+
+ /* Check offsets and lengths. */
+
+ woff_offset = 44 + woff.num_tables * 20L;
+ sfnt_offset = 12 + woff.num_tables * 16L;
+
+ for ( nn = 0; nn < woff.num_tables; nn++ )
+ {
+ WOFF_Table table = indices[nn];
+
+
+ if ( table->Offset != woff_offset ||
+ table->CompLength > woff.length ||
+ table->Offset > woff.length - table->CompLength ||
+ table->OrigLength > woff.totalSfntSize ||
+ sfnt_offset > woff.totalSfntSize - table->OrigLength ||
+ table->CompLength > table->OrigLength )
+ {
+ FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ table->OrigOffset = sfnt_offset;
+
+ /* The offsets must be multiples of 4. */
+ woff_offset += ( table->CompLength + 3 ) & ~3U;
+ sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
+ }
+
+ /*
+ * Final checks!
+ *
+ * We don't decode and check the metadata block.
+ * We don't check table checksums either.
+ * But other than those, I think we implement all
+ * `MUST' checks from the spec.
+ */
+
+ if ( woff.metaOffset )
+ {
+ if ( woff.metaOffset != woff_offset ||
+ woff.metaOffset + woff.metaLength > woff.length )
+ {
+ FT_ERROR(( "woff_font_open:"
+ " invalid `metadata' offset or length\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* We have padding only ... */
+ woff_offset += woff.metaLength;
+ }
+
+ if ( woff.privOffset )
+ {
+ /* ... if it isn't the last block. */
+ woff_offset = ( woff_offset + 3 ) & ~3U;
+
+ if ( woff.privOffset != woff_offset ||
+ woff.privOffset + woff.privLength > woff.length )
+ {
+ FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* No padding for the last block. */
+ woff_offset += woff.privLength;
+ }
+
+ if ( sfnt_offset != woff.totalSfntSize ||
+ woff_offset != woff.length )
+ {
+ FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* Now use `totalSfntSize'. */
+ if ( FT_REALLOC( sfnt,
+ 12 + woff.num_tables * 16UL,
+ woff.totalSfntSize ) )
+ goto Exit;
+
+ sfnt_header = sfnt + 12;
+
+ /* Write the tables. */
+
+ for ( nn = 0; nn < woff.num_tables; nn++ )
+ {
+ WOFF_Table table = tables + nn;
+
+
+ /* Write SFNT table entry. */
+ WRITE_ULONG( sfnt_header, table->Tag );
+ WRITE_ULONG( sfnt_header, table->CheckSum );
+ WRITE_ULONG( sfnt_header, table->OrigOffset );
+ WRITE_ULONG( sfnt_header, table->OrigLength );
+
+ /* Write table data. */
+ if ( FT_STREAM_SEEK( table->Offset ) ||
+ FT_FRAME_ENTER( table->CompLength ) )
+ goto Exit;
+
+ if ( table->CompLength == table->OrigLength )
+ {
+ /* Uncompressed data; just copy. */
+ ft_memcpy( sfnt + table->OrigOffset,
+ stream->cursor,
+ table->OrigLength );
+ }
+ else
+ {
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
+
+ /* Uncompress with zlib. */
+ FT_ULong output_len = table->OrigLength;
+
+
+ error = FT_Gzip_Uncompress( memory,
+ sfnt + table->OrigOffset, &output_len,
+ stream->cursor, table->CompLength );
+ if ( error )
+ goto Exit;
+ if ( output_len != table->OrigLength )
+ {
+ FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+#else /* !FT_CONFIG_OPTION_USE_ZLIB */
+
+ error = FT_THROW( Unimplemented_Feature );
+ goto Exit;
+
+#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
+ }
+
+ FT_FRAME_EXIT();
+
+ /* We don't check whether the padding bytes in the WOFF file are */
+ /* actually '\0'. For the output, however, we do set them properly. */
+ sfnt_offset = table->OrigOffset + table->OrigLength;
+ while ( sfnt_offset & 3 )
+ {
+ sfnt[sfnt_offset] = '\0';
+ sfnt_offset++;
+ }
+ }
+
+ /* Ok! Finally ready. Swap out stream and return. */
+ FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize );
+ sfnt_stream->memory = stream->memory;
+ sfnt_stream->close = sfnt_stream_close;
+
+ FT_Stream_Free(
+ face->root.stream,
+ ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
+
+ face->root.stream = sfnt_stream;
+
+ face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
+
+ Exit:
+ FT_FREE( tables );
+ FT_FREE( indices );
+
+ if ( error )
+ {
+ FT_FREE( sfnt );
+ FT_Stream_Close( sfnt_stream );
+ FT_FREE( sfnt_stream );
+ }
+
+ return error;
+ }
+
+
+#undef WRITE_USHORT
+#undef WRITE_ULONG
+
+
+/* END */
diff --git a/freetype/src/sfnt/sfwoff.h b/freetype/src/sfnt/sfwoff.h
new file mode 100644
index 00000000..15495c32
--- /dev/null
+++ b/freetype/src/sfnt/sfwoff.h
@@ -0,0 +1,41 @@
+/****************************************************************************
+ *
+ * sfwoff.h
+ *
+ * WOFFF format management (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef SFWOFF_H_
+#define SFWOFF_H_
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_SFNT_H
+#include FT_INTERNAL_OBJECTS_H
+
+
+FT_BEGIN_HEADER
+
+
+ FT_LOCAL( FT_Error )
+ woff_open_font( FT_Stream stream,
+ TT_Face face );
+
+
+FT_END_HEADER
+
+#endif /* SFWOFF_H_ */
+
+
+/* END */
diff --git a/freetype/src/sfnt/ttbdf.c b/freetype/src/sfnt/ttbdf.c
index 534201f2..853599fc 100644
--- a/freetype/src/sfnt/ttbdf.c
+++ b/freetype/src/sfnt/ttbdf.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttbdf.c */
-/* */
-/* TrueType and OpenType embedded BDF properties (body). */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttbdf.c
+ *
+ * TrueType and OpenType embedded BDF properties (body).
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -27,14 +27,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttbdf
FT_LOCAL_DEF( void )
@@ -45,7 +45,7 @@
if ( bdf->loaded )
{
- FT_Stream stream = FT_FACE(face)->stream;
+ FT_Stream stream = FT_FACE( face )->stream;
if ( bdf->table )
@@ -111,8 +111,8 @@
FT_UInt num_items = FT_PEEK_USHORT( p + 2 );
/*
- * We don't need to check the value sets themselves, since this
- * is done later.
+ * We don't need to check the value sets themselves, since this
+ * is done later.
*/
strike += 10 * num_items;
@@ -142,7 +142,7 @@
BDF_PropertyRec *aprop )
{
TT_BDF bdf = &face->bdf;
- FT_Size size = FT_FACE(face)->size;
+ FT_Size size = FT_FACE( face )->size;
FT_Error error = FT_Err_Ok;
FT_Byte* p;
FT_UInt count;
diff --git a/freetype/src/sfnt/ttbdf.h b/freetype/src/sfnt/ttbdf.h
index 809a6630..e4164e61 100644
--- a/freetype/src/sfnt/ttbdf.h
+++ b/freetype/src/sfnt/ttbdf.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttbdf.h */
-/* */
-/* TrueType and OpenType embedded BDF properties (specification). */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttbdf.h
+ *
+ * TrueType and OpenType embedded BDF properties (specification).
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/sfnt/ttcmap.c b/freetype/src/sfnt/ttcmap.c
index 996e6648..683f3b18 100644
--- a/freetype/src/sfnt/ttcmap.c
+++ b/freetype/src/sfnt/ttcmap.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttcmap.c */
-/* */
-/* TrueType character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttcmap.c
+ *
+ * TrueType character mapping table (cmap) support (body).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -27,17 +27,16 @@
#include "ttload.h"
#include "ttcmap.h"
#include "ttpost.h"
-#include "sfntpic.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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 FT_COMPONENT ttcmap
#define TT_PEEK_SHORT FT_PEEK_SHORT
@@ -77,19 +76,19 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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 */
- /* */
+ /**************************************************************************
+ *
+ * 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
@@ -238,57 +237,57 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 2 */
- /* length 2 USHORT table length in bytes */
- /* language 4 USHORT Mac language code */
- /* keys 6 USHORT[256] sub-header keys */
- /* subs 518 SUBHEAD[NSUBS] sub-headers array */
- /* glyph_ids 518+NSUB*8 USHORT[] glyph ID array */
- /* */
- /* The `keys' table is used to map charcode high bytes to sub-headers. */
- /* The value of `NSUBS' is the number of sub-headers defined in the */
- /* table and is computed by finding the maximum of the `keys' table. */
- /* */
- /* Note that for any `n', `keys[n]' is a byte offset within the `subs' */
- /* table, i.e., it is the corresponding sub-header index multiplied */
- /* by 8. */
- /* */
- /* Each sub-header has the following format. */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* first 0 USHORT first valid low-byte */
- /* count 2 USHORT number of valid low-bytes */
- /* delta 4 SHORT see below */
- /* offset 6 USHORT see below */
- /* */
- /* A sub-header defines, for each high byte, the range of valid */
- /* low bytes within the charmap. Note that the range defined by `first' */
- /* and `count' must be completely included in the interval [0..255] */
- /* according to the specification. */
- /* */
- /* If a character code is contained within a given sub-header, then */
- /* mapping it to a glyph index is done as follows. */
- /* */
- /* * The value of `offset' is read. This is a _byte_ distance from the */
- /* location of the `offset' field itself into a slice of the */
- /* `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too). */
- /* */
- /* * The value `slice[char.lo - first]' is read. If it is 0, there is */
- /* no glyph for the charcode. Otherwise, the value of `delta' is */
- /* added to it (modulo 65536) to form a new glyph index. */
- /* */
- /* It is up to the validation routine to check that all offsets fall */
- /* within the glyph IDs table (and not within the `subs' table itself or */
- /* outside of the CMap). */
- /* */
+ /**************************************************************************
+ *
+ * TABLE OVERVIEW
+ * --------------
+ *
+ * NAME OFFSET TYPE DESCRIPTION
+ *
+ * format 0 USHORT must be 2
+ * length 2 USHORT table length in bytes
+ * language 4 USHORT Mac language code
+ * keys 6 USHORT[256] sub-header keys
+ * subs 518 SUBHEAD[NSUBS] sub-headers array
+ * glyph_ids 518+NSUB*8 USHORT[] glyph ID array
+ *
+ * The `keys' table is used to map charcode high bytes to sub-headers.
+ * The value of `NSUBS' is the number of sub-headers defined in the
+ * table and is computed by finding the maximum of the `keys' table.
+ *
+ * Note that for any `n', `keys[n]' is a byte offset within the `subs'
+ * table, i.e., it is the corresponding sub-header index multiplied
+ * by 8.
+ *
+ * Each sub-header has the following format.
+ *
+ * NAME OFFSET TYPE DESCRIPTION
+ *
+ * first 0 USHORT first valid low-byte
+ * count 2 USHORT number of valid low-bytes
+ * delta 4 SHORT see below
+ * offset 6 USHORT see below
+ *
+ * A sub-header defines, for each high byte, the range of valid
+ * low bytes within the charmap. Note that the range defined by `first'
+ * and `count' must be completely included in the interval [0..255]
+ * according to the specification.
+ *
+ * If a character code is contained within a given sub-header, then
+ * mapping it to a glyph index is done as follows.
+ *
+ * - The value of `offset' is read. This is a _byte_ distance from the
+ * location of the `offset' field itself into a slice of the
+ * `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too).
+ *
+ * - The value `slice[char.lo - first]' is read. If it is 0, there is
+ * no glyph for the charcode. Otherwise, the value of `delta' is
+ * added to it (modulo 65536) to form a new glyph index.
+ *
+ * It is up to the validation routine to check that all offsets fall
+ * within the glyph IDs table (and not within the `subs' table itself or
+ * outside of the CMap).
+ */
#ifdef TT_CONFIG_CMAP_FORMAT_2
@@ -626,68 +625,68 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 4 */
- /* length 2 USHORT table length */
- /* in bytes */
- /* language 4 USHORT Mac language code */
- /* */
- /* segCountX2 6 USHORT 2*NUM_SEGS */
- /* searchRange 8 USHORT 2*(1 << LOG_SEGS) */
- /* entrySelector 10 USHORT LOG_SEGS */
- /* rangeShift 12 USHORT segCountX2 - */
- /* searchRange */
- /* */
- /* endCount 14 USHORT[NUM_SEGS] end charcode for */
- /* each segment; last */
- /* is 0xFFFF */
- /* */
- /* pad 14+NUM_SEGS*2 USHORT padding */
- /* */
- /* startCount 16+NUM_SEGS*2 USHORT[NUM_SEGS] first charcode for */
- /* each segment */
- /* */
- /* idDelta 16+NUM_SEGS*4 SHORT[NUM_SEGS] delta for each */
- /* segment */
- /* idOffset 16+NUM_SEGS*6 SHORT[NUM_SEGS] range offset for */
- /* each segment; can be */
- /* zero */
- /* */
- /* glyphIds 16+NUM_SEGS*8 USHORT[] array of glyph ID */
- /* ranges */
- /* */
- /* Character codes are modelled by a series of ordered (increasing) */
- /* intervals called segments. Each segment has start and end codes, */
- /* provided by the `startCount' and `endCount' arrays. Segments must */
- /* not overlap, and the last segment should always contain the value */
- /* 0xFFFF for `endCount'. */
- /* */
- /* The fields `searchRange', `entrySelector' and `rangeShift' are better */
- /* ignored (they are traces of over-engineering in the TrueType */
- /* specification). */
- /* */
- /* Each segment also has a signed `delta', as well as an optional offset */
- /* within the `glyphIds' table. */
- /* */
- /* If a segment's idOffset is 0, the glyph index corresponding to any */
- /* charcode within the segment is obtained by adding the value of */
- /* `idDelta' directly to the charcode, modulo 65536. */
- /* */
- /* Otherwise, a glyph index is taken from the glyph IDs sub-array for */
- /* the segment, and the value of `idDelta' is added to it. */
- /* */
- /* */
- /* Finally, note that a lot of fonts contain an invalid last segment, */
- /* where `start' and `end' are correctly set to 0xFFFF but both `delta' */
- /* and `offset' are incorrect (e.g., `opens___.ttf' which comes with */
- /* OpenOffice.org). We need special code to deal with them correctly. */
- /* */
+ /**************************************************************************
+ *
+ * TABLE OVERVIEW
+ * --------------
+ *
+ * NAME OFFSET TYPE DESCRIPTION
+ *
+ * format 0 USHORT must be 4
+ * length 2 USHORT table length
+ * in bytes
+ * language 4 USHORT Mac language code
+ *
+ * segCountX2 6 USHORT 2*NUM_SEGS
+ * searchRange 8 USHORT 2*(1 << LOG_SEGS)
+ * entrySelector 10 USHORT LOG_SEGS
+ * rangeShift 12 USHORT segCountX2 -
+ * searchRange
+ *
+ * endCount 14 USHORT[NUM_SEGS] end charcode for
+ * each segment; last
+ * is 0xFFFF
+ *
+ * pad 14+NUM_SEGS*2 USHORT padding
+ *
+ * startCount 16+NUM_SEGS*2 USHORT[NUM_SEGS] first charcode for
+ * each segment
+ *
+ * idDelta 16+NUM_SEGS*4 SHORT[NUM_SEGS] delta for each
+ * segment
+ * idOffset 16+NUM_SEGS*6 SHORT[NUM_SEGS] range offset for
+ * each segment; can be
+ * zero
+ *
+ * glyphIds 16+NUM_SEGS*8 USHORT[] array of glyph ID
+ * ranges
+ *
+ * Character codes are modelled by a series of ordered (increasing)
+ * intervals called segments. Each segment has start and end codes,
+ * provided by the `startCount' and `endCount' arrays. Segments must
+ * not overlap, and the last segment should always contain the value
+ * 0xFFFF for `endCount'.
+ *
+ * The fields `searchRange', `entrySelector' and `rangeShift' are better
+ * ignored (they are traces of over-engineering in the TrueType
+ * specification).
+ *
+ * Each segment also has a signed `delta', as well as an optional offset
+ * within the `glyphIds' table.
+ *
+ * If a segment's idOffset is 0, the glyph index corresponding to any
+ * charcode within the segment is obtained by adding the value of
+ * `idDelta' directly to the charcode, modulo 65536.
+ *
+ * Otherwise, a glyph index is taken from the glyph IDs sub-array for
+ * the segment, and the value of `idDelta' is added to it.
+ *
+ *
+ * Finally, note that a lot of fonts contain an invalid last segment,
+ * where `start' and `end' are correctly set to 0xFFFF but both `delta'
+ * and `offset' are incorrect (e.g., `opens___.ttf' which comes with
+ * OpenOffice.org). We need special code to deal with them correctly.
+ */
#ifdef TT_CONFIG_CMAP_FORMAT_4
@@ -1573,23 +1572,23 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 6 */
- /* length 2 USHORT table length in bytes */
- /* language 4 USHORT Mac language code */
- /* */
- /* first 6 USHORT first segment code */
- /* count 8 USHORT segment size in chars */
- /* glyphIds 10 USHORT[count] glyph IDs */
- /* */
- /* A very simplified segment mapping. */
- /* */
+ /**************************************************************************
+ *
+ * TABLE OVERVIEW
+ * --------------
+ *
+ * NAME OFFSET TYPE DESCRIPTION
+ *
+ * format 0 USHORT must be 6
+ * length 2 USHORT table length in bytes
+ * language 4 USHORT Mac language code
+ *
+ * first 6 USHORT first segment code
+ * count 8 USHORT segment size in chars
+ * glyphIds 10 USHORT[count] glyph IDs
+ *
+ * A very simplified segment mapping.
+ */
#ifdef TT_CONFIG_CMAP_FORMAT_6
@@ -1768,26 +1767,26 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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 */
- /* */
+ /**************************************************************************
+ *
+ * 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
@@ -2037,22 +2036,22 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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 */
- /* */
+ /**************************************************************************
+ *
+ * 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
@@ -2209,26 +2208,26 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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 */
- /* */
+ /**************************************************************************
+ *
+ * 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
@@ -2369,10 +2368,7 @@
/* if `gindex' is invalid, the remaining values */
/* in this group are invalid, too */
if ( gindex >= (FT_UInt)face->num_glyphs )
- {
- gindex = 0;
continue;
- }
cmap->cur_charcode = char_code;
cmap->cur_gindex = gindex;
@@ -2565,26 +2561,26 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 13 */
- /* reserved 2 USHORT reserved */
- /* length 4 ULONG length in bytes */
- /* language 8 ULONG Mac language code */
- /* count 12 ULONG number of groups */
- /* 16 */
- /* */
- /* This header is followed by `count' groups of the following format: */
- /* */
- /* start 0 ULONG first charcode */
- /* end 4 ULONG last charcode */
- /* glyphId 8 ULONG glyph ID for the whole group */
- /* */
+ /**************************************************************************
+ *
+ * TABLE OVERVIEW
+ * --------------
+ *
+ * NAME OFFSET TYPE DESCRIPTION
+ *
+ * format 0 USHORT must be 13
+ * reserved 2 USHORT reserved
+ * length 4 ULONG length in bytes
+ * language 8 ULONG Mac language code
+ * count 12 ULONG number of groups
+ * 16
+ *
+ * This header is followed by `count' groups of the following format:
+ *
+ * start 0 ULONG first charcode
+ * end 4 ULONG last charcode
+ * glyphId 8 ULONG glyph ID for the whole group
+ */
#ifdef TT_CONFIG_CMAP_FORMAT_13
@@ -2891,58 +2887,59 @@
/*************************************************************************/
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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'. */
+ /**************************************************************************
+ *
+ * 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
@@ -3661,7 +3658,7 @@
tt_get_glyph_name( TT_Face face,
FT_UInt idx )
{
- FT_String* PSname;
+ FT_String* PSname = NULL;
tt_face_get_ps_name( face, idx, &PSname );
@@ -3681,6 +3678,9 @@
FT_UNUSED( pointer );
+ if ( !psnames->unicodes_init )
+ return FT_THROW( Unimplemented_Feature );
+
return psnames->unicodes_init( memory,
unicodes,
face->root.num_glyphs,
@@ -3749,7 +3749,6 @@
#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-#ifndef FT_CONFIG_OPTION_PIC
static const TT_CMap_Class tt_cmap_classes[] =
{
@@ -3758,61 +3757,6 @@
NULL,
};
-#else /*FT_CONFIG_OPTION_PIC*/
-
- void
- FT_Destroy_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class* clazz )
- {
- FT_Memory memory = library->memory;
-
-
- if ( clazz )
- FT_FREE( clazz );
- }
-
-
- FT_Error
- FT_Create_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class** output_class )
- {
- TT_CMap_Class* clazz = NULL;
- TT_CMap_ClassRec* recs;
- FT_Error error;
- FT_Memory memory = library->memory;
-
- int i = 0;
-
-
-#define TTCMAPCITEM( a ) i++;
-#include "ttcmapc.h"
-
- /* allocate enough space for both the pointers */
- /* plus terminator and the class instances */
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * ( i + 1 ) +
- sizeof ( TT_CMap_ClassRec ) * i ) )
- return error;
-
- /* the location of the class instances follows the array of pointers */
- recs = (TT_CMap_ClassRec*)( (char*)clazz +
- sizeof ( *clazz ) * ( i + 1 ) );
- i = 0;
-
-#undef TTCMAPCITEM
-#define TTCMAPCITEM( a ) \
- FT_Init_Class_ ## a( &recs[i] ); \
- clazz[i] = &recs[i]; \
- i++;
-#include "ttcmapc.h"
-
- clazz[i] = NULL;
-
- *output_class = clazz;
- return FT_Err_Ok;
- }
-
-#endif /*FT_CONFIG_OPTION_PIC*/
-
/* parse the `cmap' table and build the corresponding TT_CMap objects */
/* in the current face */
@@ -3859,7 +3803,7 @@
{
FT_Byte* volatile cmap = table + offset;
volatile FT_UInt format = TT_PEEK_USHORT( cmap );
- const TT_CMap_Class* volatile pclazz = TT_CMAP_CLASSES_GET;
+ const TT_CMap_Class* volatile pclazz = tt_cmap_classes;
TT_CMap_Class volatile clazz;
diff --git a/freetype/src/sfnt/ttcmap.h b/freetype/src/sfnt/ttcmap.h
index d264d99d..36801c93 100644
--- a/freetype/src/sfnt/ttcmap.h
+++ b/freetype/src/sfnt/ttcmap.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttcmap.h */
-/* */
-/* TrueType character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttcmap.h
+ *
+ * TrueType character mapping table (cmap) support (specification).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -56,8 +56,6 @@ FT_BEGIN_HEADER
} TT_CMap_ClassRec;
-#ifndef FT_CONFIG_OPTION_PIC
-
#define FT_DEFINE_TT_CMAP( class_, \
size_, \
init_, \
@@ -92,42 +90,6 @@ FT_BEGIN_HEADER
get_cmap_info_ \
};
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_TT_CMAP( class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_, \
- format_, \
- validate_, \
- get_cmap_info_ ) \
- void \
- FT_Init_Class_ ## class_( TT_CMap_ClassRec* clazz ) \
- { \
- clazz->clazz.size = size_; \
- clazz->clazz.init = init_; \
- clazz->clazz.done = done_; \
- clazz->clazz.char_index = char_index_; \
- clazz->clazz.char_next = char_next_; \
- clazz->clazz.char_var_index = char_var_index_; \
- clazz->clazz.char_var_default = char_var_default_; \
- clazz->clazz.variant_list = variant_list_; \
- clazz->clazz.charvariant_list = charvariant_list_; \
- clazz->clazz.variantchar_list = variantchar_list_; \
- clazz->format = format_; \
- clazz->validate = validate_; \
- clazz->get_cmap_info = get_cmap_info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
typedef struct TT_ValidatorRec_
{
diff --git a/freetype/src/sfnt/ttcmapc.h b/freetype/src/sfnt/ttcmapc.h
index 4980e9dd..ace9e69c 100644
--- a/freetype/src/sfnt/ttcmapc.h
+++ b/freetype/src/sfnt/ttcmapc.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttcmapc.h */
-/* */
-/* TT CMAP classes definitions (specification only). */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttcmapc.h
+ *
+ * TT CMAP classes definitions (specification only).
+ *
+ * Copyright (C) 2009-2019 by
+ * Oran Agra and Mickey Gabel.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifdef TT_CONFIG_CMAP_FORMAT_0
diff --git a/freetype/src/sfnt/ttcolr.c b/freetype/src/sfnt/ttcolr.c
new file mode 100644
index 00000000..6b537d95
--- /dev/null
+++ b/freetype/src/sfnt/ttcolr.c
@@ -0,0 +1,451 @@
+/****************************************************************************
+ *
+ * ttcolr.c
+ *
+ * TrueType and OpenType colored glyph layer support (body).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Originally written by Shao Yu Zhang <shaozhang@fb.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.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * `COLR' table specification:
+ *
+ * https://www.microsoft.com/typography/otspec/colr.htm
+ *
+ */
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+#include FT_TRUETYPE_TAGS_H
+#include FT_COLOR_H
+
+
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+
+#include "ttcolr.h"
+
+
+ /* NOTE: These are the table sizes calculated through the specs. */
+#define BASE_GLYPH_SIZE 6
+#define LAYER_SIZE 4
+#define COLR_HEADER_SIZE 14
+
+
+ typedef struct BaseGlyphRecord_
+ {
+ FT_UShort gid;
+ FT_UShort first_layer_index;
+ FT_UShort num_layers;
+
+ } BaseGlyphRecord;
+
+
+ typedef struct Colr_
+ {
+ FT_UShort version;
+ FT_UShort num_base_glyphs;
+ FT_UShort num_layers;
+
+ FT_Byte* base_glyphs;
+ FT_Byte* layers;
+
+ /* The memory which backs up the `COLR' table. */
+ void* table;
+ FT_ULong table_size;
+
+ } Colr;
+
+
+ /**************************************************************************
+ *
+ * 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 ttcolr
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_face_load_colr( TT_Face face,
+ FT_Stream stream )
+ {
+ FT_Error error;
+ FT_Memory memory = face->root.memory;
+
+ FT_Byte* table = NULL;
+ FT_Byte* p = NULL;
+
+ Colr* colr = NULL;
+
+ FT_ULong base_glyph_offset, layer_offset;
+ FT_ULong table_size;
+
+
+ /* `COLR' always needs `CPAL' */
+ if ( !face->cpal )
+ return FT_THROW( Invalid_File_Format );
+
+ error = face->goto_table( face, TTAG_COLR, stream, &table_size );
+ if ( error )
+ goto NoColr;
+
+ if ( table_size < COLR_HEADER_SIZE )
+ goto InvalidTable;
+
+ if ( FT_FRAME_EXTRACT( table_size, table ) )
+ goto NoColr;
+
+ p = table;
+
+ if ( FT_NEW( colr ) )
+ goto NoColr;
+
+ colr->version = FT_NEXT_USHORT( p );
+ if ( colr->version != 0 )
+ goto InvalidTable;
+
+ colr->num_base_glyphs = FT_NEXT_USHORT( p );
+ base_glyph_offset = FT_NEXT_ULONG( p );
+
+ if ( base_glyph_offset >= table_size )
+ goto InvalidTable;
+ if ( colr->num_base_glyphs * BASE_GLYPH_SIZE >
+ table_size - base_glyph_offset )
+ goto InvalidTable;
+
+ layer_offset = FT_NEXT_ULONG( p );
+ colr->num_layers = FT_NEXT_USHORT( p );
+
+ if ( layer_offset >= table_size )
+ goto InvalidTable;
+ if ( colr->num_layers * LAYER_SIZE > table_size - layer_offset )
+ goto InvalidTable;
+
+ colr->base_glyphs = (FT_Byte*)( table + base_glyph_offset );
+ colr->layers = (FT_Byte*)( table + layer_offset );
+ colr->table = table;
+ colr->table_size = table_size;
+
+ face->colr = colr;
+
+ return FT_Err_Ok;
+
+ InvalidTable:
+ error = FT_THROW( Invalid_Table );
+
+ NoColr:
+ FT_FRAME_RELEASE( table );
+ FT_FREE( colr );
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ tt_face_free_colr( TT_Face face )
+ {
+ FT_Stream stream = face->root.stream;
+ FT_Memory memory = face->root.memory;
+
+ Colr* colr = (Colr*)face->colr;
+
+
+ if ( colr )
+ {
+ FT_FRAME_RELEASE( colr->table );
+ FT_FREE( colr );
+ }
+ }
+
+
+ static FT_Bool
+ find_base_glyph_record( FT_Byte* base_glyph_begin,
+ FT_Int num_base_glyph,
+ FT_UInt glyph_id,
+ BaseGlyphRecord* record )
+ {
+ FT_Int min = 0;
+ FT_Int max = num_base_glyph - 1;
+
+
+ while ( min <= max )
+ {
+ FT_Int mid = min + ( max - min ) / 2;
+ FT_Byte* p = base_glyph_begin + mid * BASE_GLYPH_SIZE;
+
+ FT_UShort gid = FT_NEXT_USHORT( p );
+
+
+ if ( gid < glyph_id )
+ min = mid + 1;
+ else if (gid > glyph_id )
+ max = mid - 1;
+ else
+ {
+ record->gid = gid;
+ record->first_layer_index = FT_NEXT_USHORT( p );
+ record->num_layers = FT_NEXT_USHORT( p );
+
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ tt_face_get_colr_layer( TT_Face face,
+ FT_UInt base_glyph,
+ FT_UInt *aglyph_index,
+ FT_UInt *acolor_index,
+ FT_LayerIterator* iterator )
+ {
+ Colr* colr = (Colr*)face->colr;
+ BaseGlyphRecord glyph_record;
+
+
+ if ( !colr )
+ return 0;
+
+ if ( !iterator->p )
+ {
+ FT_ULong offset;
+
+
+ /* first call to function */
+ iterator->layer = 0;
+
+ if ( !find_base_glyph_record( colr->base_glyphs,
+ colr->num_base_glyphs,
+ base_glyph,
+ &glyph_record ) )
+ return 0;
+
+ if ( glyph_record.num_layers )
+ iterator->num_layers = glyph_record.num_layers;
+ else
+ return 0;
+
+ offset = LAYER_SIZE * glyph_record.first_layer_index;
+ if ( offset + LAYER_SIZE * glyph_record.num_layers > colr->table_size )
+ return 0;
+
+ iterator->p = colr->layers + offset;
+ }
+
+ if ( iterator->layer >= iterator->num_layers )
+ return 0;
+
+ *aglyph_index = FT_NEXT_USHORT( iterator->p );
+ *acolor_index = FT_NEXT_USHORT( iterator->p );
+
+ if ( *aglyph_index >= (FT_UInt)( FT_FACE( face )->num_glyphs ) ||
+ ( *acolor_index != 0xFFFF &&
+ *acolor_index >= face->palette_data.num_palette_entries ) )
+ return 0;
+
+ iterator->layer++;
+
+ return 1;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_face_colr_blend_layer( TT_Face face,
+ FT_UInt color_index,
+ FT_GlyphSlot dstSlot,
+ FT_GlyphSlot srcSlot )
+ {
+ FT_Error error;
+
+ FT_UInt x, y;
+ FT_Byte b, g, r, alpha;
+
+ FT_ULong size;
+ FT_Byte* src;
+ FT_Byte* dst;
+
+
+ if ( !dstSlot->bitmap.buffer )
+ {
+ /* Initialize destination of color bitmap */
+ /* with the size of first component. */
+ dstSlot->bitmap_left = srcSlot->bitmap_left;
+ dstSlot->bitmap_top = srcSlot->bitmap_top;
+
+ dstSlot->bitmap.width = srcSlot->bitmap.width;
+ dstSlot->bitmap.rows = srcSlot->bitmap.rows;
+ dstSlot->bitmap.pixel_mode = FT_PIXEL_MODE_BGRA;
+ dstSlot->bitmap.pitch = (int)dstSlot->bitmap.width * 4;
+ dstSlot->bitmap.num_grays = 256;
+
+ size = dstSlot->bitmap.rows * (unsigned int)dstSlot->bitmap.pitch;
+
+ error = ft_glyphslot_alloc_bitmap( dstSlot, size );
+ if ( error )
+ return error;
+
+ FT_MEM_ZERO( dstSlot->bitmap.buffer, size );
+ }
+ else
+ {
+ /* Resize destination if needed such that new component fits. */
+ FT_Int x_min, x_max, y_min, y_max;
+
+
+ x_min = FT_MIN( dstSlot->bitmap_left, srcSlot->bitmap_left );
+ x_max = FT_MAX( dstSlot->bitmap_left + (FT_Int)dstSlot->bitmap.width,
+ srcSlot->bitmap_left + (FT_Int)srcSlot->bitmap.width );
+
+ y_min = FT_MIN( dstSlot->bitmap_top - (FT_Int)dstSlot->bitmap.rows,
+ srcSlot->bitmap_top - (FT_Int)srcSlot->bitmap.rows );
+ y_max = FT_MAX( dstSlot->bitmap_top, srcSlot->bitmap_top );
+
+ if ( x_min != dstSlot->bitmap_left ||
+ x_max != dstSlot->bitmap_left + (FT_Int)dstSlot->bitmap.width ||
+ y_min != dstSlot->bitmap_top - (FT_Int)dstSlot->bitmap.rows ||
+ y_max != dstSlot->bitmap_top )
+ {
+ FT_Memory memory = face->root.memory;
+
+ FT_UInt width = (FT_UInt)( x_max - x_min );
+ FT_UInt rows = (FT_UInt)( y_max - y_min );
+ FT_UInt pitch = width * 4;
+
+ FT_Byte* buf = NULL;
+ FT_Byte* p;
+ FT_Byte* q;
+
+
+ size = rows * pitch;
+ if ( FT_ALLOC( buf, size ) )
+ return error;
+
+ p = dstSlot->bitmap.buffer;
+ q = buf +
+ (int)pitch * ( y_max - dstSlot->bitmap_top ) +
+ 4 * ( dstSlot->bitmap_left - x_min );
+
+ for ( y = 0; y < dstSlot->bitmap.rows; y++ )
+ {
+ FT_MEM_COPY( q, p, dstSlot->bitmap.width * 4 );
+
+ p += dstSlot->bitmap.pitch;
+ q += pitch;
+ }
+
+ ft_glyphslot_set_bitmap( dstSlot, buf );
+
+ dstSlot->bitmap_top = y_max;
+ dstSlot->bitmap_left = x_min;
+
+ dstSlot->bitmap.width = width;
+ dstSlot->bitmap.rows = rows;
+ dstSlot->bitmap.pitch = (int)pitch;
+
+ dstSlot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+ dstSlot->format = FT_GLYPH_FORMAT_BITMAP;
+ }
+ }
+
+ if ( color_index == 0xFFFF )
+ {
+ if ( face->have_foreground_color )
+ {
+ b = face->foreground_color.blue;
+ g = face->foreground_color.green;
+ r = face->foreground_color.red;
+ alpha = face->foreground_color.alpha;
+ }
+ else
+ {
+ if ( face->palette_data.palette_flags &&
+ ( face->palette_data.palette_flags[face->palette_index] &
+ FT_PALETTE_FOR_DARK_BACKGROUND ) )
+ {
+ /* white opaque */
+ b = 0xFF;
+ g = 0xFF;
+ r = 0xFF;
+ alpha = 0xFF;
+ }
+ else
+ {
+ /* black opaque */
+ b = 0x00;
+ g = 0x00;
+ r = 0x00;
+ alpha = 0xFF;
+ }
+ }
+ }
+ else
+ {
+ b = face->palette[color_index].blue;
+ g = face->palette[color_index].green;
+ r = face->palette[color_index].red;
+ alpha = face->palette[color_index].alpha;
+ }
+
+ /* XXX Convert if srcSlot.bitmap is not grey? */
+ src = srcSlot->bitmap.buffer;
+ dst = dstSlot->bitmap.buffer +
+ dstSlot->bitmap.pitch * ( dstSlot->bitmap_top - srcSlot->bitmap_top ) +
+ 4 * ( srcSlot->bitmap_left - dstSlot->bitmap_left );
+
+ for ( y = 0; y < srcSlot->bitmap.rows; y++ )
+ {
+ for ( x = 0; x < srcSlot->bitmap.width; x++ )
+ {
+ int aa = src[x];
+ int fa = alpha * aa / 255;
+
+ int fb = b * fa / 255;
+ int fg = g * fa / 255;
+ int fr = r * fa / 255;
+
+ int ba2 = 255 - fa;
+
+ int bb = dst[4 * x + 0];
+ int bg = dst[4 * x + 1];
+ int br = dst[4 * x + 2];
+ int ba = dst[4 * x + 3];
+
+
+ dst[4 * x + 0] = (FT_Byte)( bb * ba2 / 255 + fb );
+ dst[4 * x + 1] = (FT_Byte)( bg * ba2 / 255 + fg );
+ dst[4 * x + 2] = (FT_Byte)( br * ba2 / 255 + fr );
+ dst[4 * x + 3] = (FT_Byte)( ba * ba2 / 255 + fa );
+ }
+
+ src += srcSlot->bitmap.pitch;
+ dst += dstSlot->bitmap.pitch;
+ }
+
+ return FT_Err_Ok;
+ }
+
+#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_colr_dummy;
+
+#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+/* EOF */
diff --git a/freetype/src/sfnt/ttcolr.h b/freetype/src/sfnt/ttcolr.h
new file mode 100644
index 00000000..817489a8
--- /dev/null
+++ b/freetype/src/sfnt/ttcolr.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+ *
+ * ttcolr.h
+ *
+ * TrueType and OpenType colored glyph layer support (specification).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Originally written by Shao Yu Zhang <shaozhang@fb.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 __TTCOLR_H__
+#define __TTCOLR_H__
+
+
+#include <ft2build.h>
+#include "ttload.h"
+
+
+FT_BEGIN_HEADER
+
+
+ FT_LOCAL( FT_Error )
+ tt_face_load_colr( TT_Face face,
+ FT_Stream stream );
+
+ FT_LOCAL( void )
+ tt_face_free_colr( TT_Face face );
+
+ FT_LOCAL( FT_Bool )
+ tt_face_get_colr_layer( TT_Face face,
+ FT_UInt base_glyph,
+ FT_UInt *aglyph_index,
+ FT_UInt *acolor_index,
+ FT_LayerIterator* iterator );
+
+ FT_LOCAL( FT_Error )
+ tt_face_colr_blend_layer( TT_Face face,
+ FT_UInt color_index,
+ FT_GlyphSlot dstSlot,
+ FT_GlyphSlot srcSlot );
+
+
+FT_END_HEADER
+
+
+#endif /* __TTCOLR_H__ */
+
+/* END */
diff --git a/freetype/src/sfnt/ttcpal.c b/freetype/src/sfnt/ttcpal.c
new file mode 100644
index 00000000..3482169a
--- /dev/null
+++ b/freetype/src/sfnt/ttcpal.c
@@ -0,0 +1,311 @@
+/****************************************************************************
+ *
+ * ttcpal.c
+ *
+ * TrueType and OpenType color palette support (body).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Originally written by Shao Yu Zhang <shaozhang@fb.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.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * `CPAL' table specification:
+ *
+ * https://www.microsoft.com/typography/otspec/cpal.htm
+ *
+ */
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+#include FT_TRUETYPE_TAGS_H
+#include FT_COLOR_H
+
+
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+
+#include "ttcpal.h"
+
+
+ /* NOTE: These are the table sizes calculated through the specs. */
+#define CPAL_V0_HEADER_BASE_SIZE 12
+#define COLOR_SIZE 4
+
+
+ /* all data from `CPAL' not covered in FT_Palette_Data */
+ typedef struct Cpal_
+ {
+ FT_UShort version; /* Table version number (0 or 1 supported). */
+ FT_UShort num_colors; /* Total number of color records, */
+ /* combined for all palettes. */
+ FT_Byte* colors; /* RGBA array of colors */
+ FT_Byte* color_indices; /* Index of each palette's first color record */
+ /* in the combined color record array. */
+
+ /* The memory which backs up the `CPAL' table. */
+ void* table;
+ FT_ULong table_size;
+
+ } Cpal;
+
+
+ /**************************************************************************
+ *
+ * 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 ttcpal
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_face_load_cpal( TT_Face face,
+ FT_Stream stream )
+ {
+ FT_Error error;
+ FT_Memory memory = face->root.memory;
+
+ FT_Byte* table = NULL;
+ FT_Byte* p = NULL;
+
+ Cpal* cpal = NULL;
+
+ FT_ULong colors_offset;
+ FT_ULong table_size;
+
+
+ error = face->goto_table( face, TTAG_CPAL, stream, &table_size );
+ if ( error )
+ goto NoCpal;
+
+ if ( table_size < CPAL_V0_HEADER_BASE_SIZE )
+ goto InvalidTable;
+
+ if ( FT_FRAME_EXTRACT( table_size, table ) )
+ goto NoCpal;
+
+ p = table;
+
+ if ( FT_NEW( cpal ) )
+ goto NoCpal;
+
+ cpal->version = FT_NEXT_USHORT( p );
+ if ( cpal->version > 1 )
+ goto InvalidTable;
+
+ face->palette_data.num_palette_entries = FT_NEXT_USHORT( p );
+ face->palette_data.num_palettes = FT_NEXT_USHORT( p );
+
+ cpal->num_colors = FT_NEXT_USHORT( p );
+ colors_offset = FT_NEXT_ULONG( p );
+
+ if ( CPAL_V0_HEADER_BASE_SIZE +
+ face->palette_data.num_palettes * 2U > table_size )
+ goto InvalidTable;
+
+ if ( colors_offset >= table_size )
+ goto InvalidTable;
+ if ( cpal->num_colors * COLOR_SIZE > table_size - colors_offset )
+ goto InvalidTable;
+
+ if ( face->palette_data.num_palette_entries > cpal->num_colors )
+ goto InvalidTable;
+
+ cpal->color_indices = p;
+ cpal->colors = (FT_Byte*)( table + colors_offset );
+
+ if ( cpal->version == 1 )
+ {
+ FT_ULong type_offset, label_offset, entry_label_offset;
+ FT_UShort* array = NULL;
+ FT_UShort* limit;
+ FT_UShort* q;
+
+
+ if ( CPAL_V0_HEADER_BASE_SIZE +
+ face->palette_data.num_palettes * 2U +
+ 3U * 4 > table_size )
+ goto InvalidTable;
+
+ p += face->palette_data.num_palettes * 2;
+
+ type_offset = FT_NEXT_ULONG( p );
+ label_offset = FT_NEXT_ULONG( p );
+ entry_label_offset = FT_NEXT_ULONG( p );
+
+ if ( type_offset )
+ {
+ if ( type_offset >= table_size )
+ goto InvalidTable;
+ if ( face->palette_data.num_palettes * 2 >
+ table_size - type_offset )
+ goto InvalidTable;
+
+ if ( FT_QNEW_ARRAY( array, face->palette_data.num_palettes ) )
+ goto NoCpal;
+
+ p = table + type_offset;
+ q = array;
+ limit = q + face->palette_data.num_palettes;
+
+ while ( q < limit )
+ *q++ = FT_NEXT_USHORT( p );
+
+ face->palette_data.palette_flags = array;
+ }
+
+ if ( label_offset )
+ {
+ if ( label_offset >= table_size )
+ goto InvalidTable;
+ if ( face->palette_data.num_palettes * 2 >
+ table_size - label_offset )
+ goto InvalidTable;
+
+ if ( FT_QNEW_ARRAY( array, face->palette_data.num_palettes ) )
+ goto NoCpal;
+
+ p = table + label_offset;
+ q = array;
+ limit = q + face->palette_data.num_palettes;
+
+ while ( q < limit )
+ *q++ = FT_NEXT_USHORT( p );
+
+ face->palette_data.palette_name_ids = array;
+ }
+
+ if ( entry_label_offset )
+ {
+ if ( entry_label_offset >= table_size )
+ goto InvalidTable;
+ if ( face->palette_data.num_palette_entries * 2 >
+ table_size - entry_label_offset )
+ goto InvalidTable;
+
+ if ( FT_QNEW_ARRAY( array, face->palette_data.num_palette_entries ) )
+ goto NoCpal;
+
+ p = table + entry_label_offset;
+ q = array;
+ limit = q + face->palette_data.num_palette_entries;
+
+ while ( q < limit )
+ *q++ = FT_NEXT_USHORT( p );
+
+ face->palette_data.palette_entry_name_ids = array;
+ }
+ }
+
+ cpal->table = table;
+ cpal->table_size = table_size;
+
+ face->cpal = cpal;
+
+ /* set up default palette */
+ if ( FT_NEW_ARRAY( face->palette,
+ face->palette_data.num_palette_entries ) )
+ goto NoCpal;
+
+ if ( tt_face_palette_set( face, 0 ) )
+ goto InvalidTable;
+
+ return FT_Err_Ok;
+
+ InvalidTable:
+ error = FT_THROW( Invalid_Table );
+
+ NoCpal:
+ FT_FRAME_RELEASE( table );
+ FT_FREE( cpal );
+
+ face->cpal = NULL;
+
+ /* arrays in `face->palette_data' and `face->palette' */
+ /* are freed in `sfnt_done_face' */
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ tt_face_free_cpal( TT_Face face )
+ {
+ FT_Stream stream = face->root.stream;
+ FT_Memory memory = face->root.memory;
+
+ Cpal* cpal = (Cpal*)face->cpal;
+
+
+ if ( cpal )
+ {
+ FT_FRAME_RELEASE( cpal->table );
+ FT_FREE( cpal );
+ }
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_face_palette_set( TT_Face face,
+ FT_UInt palette_index )
+ {
+ Cpal* cpal = (Cpal*)face->cpal;
+
+ FT_Byte* offset;
+ FT_Byte* p;
+
+ FT_Color* q;
+ FT_Color* limit;
+
+ FT_UShort color_index;
+
+
+ if ( !cpal || palette_index >= face->palette_data.num_palettes )
+ return FT_THROW( Invalid_Argument );
+
+ offset = cpal->color_indices + 2 * palette_index;
+ color_index = FT_PEEK_USHORT( offset );
+
+ if ( color_index + face->palette_data.num_palette_entries >
+ cpal->num_colors )
+ return FT_THROW( Invalid_Table );
+
+ p = cpal->colors + COLOR_SIZE * color_index;
+ q = face->palette;
+ limit = q + face->palette_data.num_palette_entries;
+
+ while ( q < limit )
+ {
+ q->blue = FT_NEXT_BYTE( p );
+ q->green = FT_NEXT_BYTE( p );
+ q->red = FT_NEXT_BYTE( p );
+ q->alpha = FT_NEXT_BYTE( p );
+
+ q++;
+ }
+
+ return FT_Err_Ok;
+ }
+
+
+#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_cpal_dummy;
+
+#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
+
+/* EOF */
diff --git a/freetype/src/sfnt/ttcpal.h b/freetype/src/sfnt/ttcpal.h
new file mode 100644
index 00000000..d1b244f3
--- /dev/null
+++ b/freetype/src/sfnt/ttcpal.h
@@ -0,0 +1,49 @@
+/****************************************************************************
+ *
+ * ttcpal.h
+ *
+ * TrueType and OpenType color palette support (specification).
+ *
+ * Copyright (C) 2018-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Originally written by Shao Yu Zhang <shaozhang@fb.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 __TTCPAL_H__
+#define __TTCPAL_H__
+
+
+#include <ft2build.h>
+#include "ttload.h"
+
+
+FT_BEGIN_HEADER
+
+
+ FT_LOCAL( FT_Error )
+ tt_face_load_cpal( TT_Face face,
+ FT_Stream stream );
+
+ FT_LOCAL( void )
+ tt_face_free_cpal( TT_Face face );
+
+ FT_LOCAL( FT_Error )
+ tt_face_palette_set( TT_Face face,
+ FT_UInt palette_index );
+
+
+FT_END_HEADER
+
+
+#endif /* __TTCPAL_H__ */
+
+/* END */
diff --git a/freetype/src/sfnt/ttkern.c b/freetype/src/sfnt/ttkern.c
index 68f15a20..8d1b7810 100644
--- a/freetype/src/sfnt/ttkern.c
+++ b/freetype/src/sfnt/ttkern.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ttkern.c */
-/* */
-/* Load the basic TrueType kerning table. This doesn't handle */
-/* kerning data within the GPOS table at the moment. */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttkern.c
+ *
+ * Load the basic TrueType kerning table. This doesn't handle
+ * kerning data within the GPOS table at the moment.
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,14 +26,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttkern
#undef TT_KERN_INDEX
@@ -127,8 +127,8 @@
avail |= mask;
/*
- * Now check whether the pairs in this table are ordered.
- * We then can use binary search.
+ * Now check whether the pairs in this table are ordered.
+ * We then can use binary search.
*/
if ( num_pairs > 0 )
{
@@ -283,8 +283,8 @@
break;
/*
- * We don't support format 2 because we haven't seen a single font
- * using it in real life...
+ * We don't support format 2 because we haven't seen a single font
+ * using it in real life...
*/
default:
diff --git a/freetype/src/sfnt/ttkern.h b/freetype/src/sfnt/ttkern.h
index 4e45d096..5f283e5e 100644
--- a/freetype/src/sfnt/ttkern.h
+++ b/freetype/src/sfnt/ttkern.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ttkern.h */
-/* */
-/* Load the basic TrueType kerning table. This doesn't handle */
-/* kerning data within the GPOS table at the moment. */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttkern.h
+ *
+ * Load the basic TrueType kerning table. This doesn't handle
+ * kerning data within the GPOS table at the moment.
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/sfnt/ttload.c b/freetype/src/sfnt/ttload.c
index a86a546c..5443bf4b 100644
--- a/freetype/src/sfnt/ttload.c
+++ b/freetype/src/sfnt/ttload.c
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ttload.c */
-/* */
-/* Load the basic TrueType tables, i.e., tables that can be either in */
-/* TTF or OTF fonts (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttload.c
+ *
+ * Load the basic TrueType tables, i.e., tables that can be either in
+ * TTF or OTF fonts (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,32 +26,34 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+#define FT_COMPONENT 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 )
@@ -101,27 +103,31 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -309,28 +315,31 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -496,46 +505,51 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -586,22 +600,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -622,10 +638,10 @@
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_ULONG ( Created[0] ),
+ FT_FRAME_ULONG ( Created[1] ),
+ FT_FRAME_ULONG ( Modified[0] ),
+ FT_FRAME_ULONG ( Modified[1] ),
FT_FRAME_SHORT ( xMin ),
FT_FRAME_SHORT ( yMin ),
FT_FRAME_SHORT ( xMax ),
@@ -676,22 +692,24 @@
#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_maxp */
- /* */
- /* <Description> */
- /* Loads the maximum profile into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_load_maxp
+ *
+ * @Description:
+ * Loads the maximum profile into a face object.
+ *
+ * @Input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * stream ::
+ * The input stream.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_face_load_maxp( TT_Face face,
FT_Stream stream )
@@ -784,22 +802,24 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_name */
- /* */
- /* <Description> */
- /* Loads the name records. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_load_name
+ *
+ * @Description:
+ * Loads the name records.
+ *
+ * @Input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * stream ::
+ * The input stream.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_face_load_name( TT_Face face,
FT_Stream stream )
@@ -981,17 +1001,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_free_name */
- /* */
- /* <Description> */
- /* Frees the name records. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_free_name
+ *
+ * @Description:
+ * Frees the name records.
+ *
+ * @Input:
+ * face ::
+ * A handle to the target face object.
+ */
FT_LOCAL_DEF( void )
tt_face_free_name( TT_Face face )
{
@@ -1030,23 +1051,25 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1068,22 +1091,24 @@
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -1228,22 +1253,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -1288,22 +1315,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -1349,22 +1378,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
diff --git a/freetype/src/sfnt/ttload.h b/freetype/src/sfnt/ttload.h
index f94be8b7..cc18c186 100644
--- a/freetype/src/sfnt/ttload.h
+++ b/freetype/src/sfnt/ttload.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ttload.h */
-/* */
-/* Load the basic TrueType tables, i.e., tables that can be either in */
-/* TTF or OTF fonts (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttload.h
+ *
+ * Load the basic TrueType tables, i.e., tables that can be either in
+ * TTF or OTF fonts (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/sfnt/ttmtx.c b/freetype/src/sfnt/ttmtx.c
index 6ddda95b..b6725c96 100644
--- a/freetype/src/sfnt/ttmtx.c
+++ b/freetype/src/sfnt/ttmtx.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttmtx.c */
-/* */
-/* Load the metrics tables common to TTF and OTF fonts (body). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttmtx.c
+ *
+ * Load the metrics tables common to TTF and OTF fonts (body).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -38,34 +38,37 @@
/* both the horizontal and vertical headers. */
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttmtx
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_hmtx */
- /* */
- /* <Description> */
- /* Load the `hmtx' or `vmtx' table into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* vertical :: A boolean flag. If set, load `vmtx'. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+#define FT_COMPONENT ttmtx
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_load_hmtx
+ *
+ * @Description:
+ * Load the `hmtx' or `vmtx' table into a face object.
+ *
+ * @Input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * stream ::
+ * The input stream.
+ *
+ * vertical ::
+ * A boolean flag. If set, load `vmtx'.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_face_load_hmtx( TT_Face face,
FT_Stream stream,
@@ -102,24 +105,27 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -190,30 +196,35 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_metrics */
- /* */
- /* <Description> */
- /* Return the horizontal or vertical metrics in font units for a */
- /* given glyph. The values are the left side bearing (top side */
- /* bearing for vertical metrics) and advance width (advance height */
- /* for vertical metrics). */
- /* */
- /* <Input> */
- /* face :: A pointer to the TrueType face structure. */
- /* */
- /* vertical :: If set to TRUE, get vertical metrics. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* abearing :: The bearing, either left side or top side. */
- /* */
- /* aadvance :: The advance width or advance height, depending on */
- /* the `vertical' flag. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_get_metrics
+ *
+ * @Description:
+ * Return the horizontal or vertical metrics in font units for a
+ * given glyph. The values are the left side bearing (top side
+ * bearing for vertical metrics) and advance width (advance height
+ * for vertical metrics).
+ *
+ * @Input:
+ * face ::
+ * A pointer to the TrueType face structure.
+ *
+ * vertical ::
+ * If set to TRUE, get vertical metrics.
+ *
+ * gindex ::
+ * The glyph index.
+ *
+ * @Output:
+ * abearing ::
+ * The bearing, either left side or top side.
+ *
+ * aadvance ::
+ * The advance width or advance height, depending on
+ * the `vertical' flag.
+ */
FT_LOCAL_DEF( void )
tt_face_get_metrics( TT_Face face,
FT_Bool vertical,
@@ -269,7 +280,7 @@
else
{
table_pos += 4 * ( k - 1 );
- if ( table_pos + 4 > table_end )
+ if ( table_pos + 2 > table_end )
goto NoData;
if ( FT_STREAM_SEEK( table_pos ) ||
@@ -281,7 +292,9 @@
*abearing = 0;
else
{
- if ( !FT_STREAM_SEEK( table_pos ) )
+ if ( FT_STREAM_SEEK( table_pos ) )
+ *abearing = 0;
+ else
(void)FT_READ_SHORT( *abearing );
}
}
diff --git a/freetype/src/sfnt/ttmtx.h b/freetype/src/sfnt/ttmtx.h
index ab00acd7..5b0b60b6 100644
--- a/freetype/src/sfnt/ttmtx.h
+++ b/freetype/src/sfnt/ttmtx.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttmtx.h */
-/* */
-/* Load the metrics tables common to TTF and OTF fonts (specification). */
-/* */
-/* Copyright 2006-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttmtx.h
+ *
+ * Load the metrics tables common to TTF and OTF fonts (specification).
+ *
+ * Copyright (C) 2006-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/sfnt/ttpost.c b/freetype/src/sfnt/ttpost.c
index 6de99ef9..636a0a00 100644
--- a/freetype/src/sfnt/ttpost.c
+++ b/freetype/src/sfnt/ttpost.c
@@ -1,28 +1,28 @@
-/***************************************************************************/
-/* */
-/* ttpost.c */
-/* */
-/* PostScript name table processing for TrueType and OpenType fonts */
-/* (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ttpost.c
+ *
+ * PostScript name table processing for TrueType and OpenType fonts
+ * (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -38,17 +38,17 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttpost
- /* If this configuration macro is defined, we rely on the `PSNames' */
+ /* If this configuration macro is defined, we rely on the `psnames' */
/* module to grab the glyph names. */
#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
@@ -62,9 +62,9 @@
#else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
- /* Otherwise, we ignore the `PSNames' module, and provide our own */
+ /* 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. */
+ /* FreeType without the Type 1 driver & psnames module. */
#define MAC_NAME( x ) (FT_String*)tt_post_default_names[x]
@@ -459,28 +459,31 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_ps_name */
- /* */
- /* <Description> */
- /* Get the PostScript glyph name of a glyph. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face. */
- /* */
- /* idx :: The glyph index. */
- /* */
- /* <InOut> */
- /* PSname :: The address of a string pointer. Undefined 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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_get_ps_name
+ *
+ * @Description:
+ * Get the PostScript glyph name of a glyph.
+ *
+ * @Input:
+ * face ::
+ * A handle to the parent face.
+ *
+ * idx ::
+ * The glyph index.
+ *
+ * @InOut:
+ * PSname ::
+ * The address of a string pointer. Undefined 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,
diff --git a/freetype/src/sfnt/ttpost.h b/freetype/src/sfnt/ttpost.h
index 3bec07e4..812a0fc9 100644
--- a/freetype/src/sfnt/ttpost.h
+++ b/freetype/src/sfnt/ttpost.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* ttpost.h */
-/* */
-/* PostScript name table processing for TrueType and OpenType fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttpost.h
+ *
+ * PostScript name table processing for TrueType and OpenType fonts
+ * (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/sfnt/ttsbit.c b/freetype/src/sfnt/ttsbit.c
index 33b8640b..23bd9d7e 100644
--- a/freetype/src/sfnt/ttsbit.c
+++ b/freetype/src/sfnt/ttsbit.c
@@ -1,22 +1,22 @@
-/***************************************************************************/
-/* */
-/* ttsbit.c */
-/* */
-/* TrueType and OpenType embedded bitmap support (body). */
-/* */
-/* Copyright 2005-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Copyright 2013 by Google, Inc. */
-/* Google Author(s): Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttsbit.c
+ *
+ * TrueType and OpenType embedded bitmap support (body).
+ *
+ * Copyright (C) 2005-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Copyright 2013 by Google, Inc.
+ * Google Author(s): Behdad Esfahbod.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#include <ft2build.h>
@@ -36,14 +36,14 @@
#include "pngshim.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttsbit
FT_LOCAL_DEF( FT_Error )
@@ -129,8 +129,8 @@
}
/*
- * Count the number of strikes available in the table. We are a bit
- * paranoid there and don't trust the data.
+ * 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 )
@@ -182,8 +182,8 @@
" expect bad rendering results\n" ));
/*
- * Count the number of strikes available in the table. We are a bit
- * paranoid there and don't trust the data.
+ * Count the number of strikes available in the table. We are a bit
+ * paranoid there and don't trust the data.
*/
count = (FT_UInt)num_strikes;
if ( 8 + 4UL * count > table_size )
@@ -1014,8 +1014,8 @@
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 );
+ FT_Char dx = FT_NEXT_CHAR( p );
+ FT_Char dy = FT_NEXT_CHAR( p );
/* NB: a recursive call */
diff --git a/freetype/src/sfnt/ttsbit.h b/freetype/src/sfnt/ttsbit.h
index ce2af3c1..5ab8ff55 100644
--- a/freetype/src/sfnt/ttsbit.h
+++ b/freetype/src/sfnt/ttsbit.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttsbit.h */
-/* */
-/* TrueType and OpenType embedded bitmap support (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttsbit.h
+ *
+ * TrueType and OpenType embedded bitmap support (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/smooth/Jamfile b/freetype/src/smooth/Jamfile
index 9957d5e9..6ca1cede 100644
--- a/freetype/src/smooth/Jamfile
+++ b/freetype/src/smooth/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/smooth Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/smooth/ftgrays.c b/freetype/src/smooth/ftgrays.c
index 803a19e4..fd357a50 100644
--- a/freetype/src/smooth/ftgrays.c
+++ b/freetype/src/smooth/ftgrays.c
@@ -1,94 +1,102 @@
-/***************************************************************************/
-/* */
-/* ftgrays.c */
-/* */
-/* A new `perfect' anti-aliasing renderer (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the STANDALONE_ macro when compiling it. You also need to */
- /* put the files `ftgrays.h' and `ftimage.h' into the current */
- /* compilation directory. Typically, you could do something like */
- /* */
- /* - copy `src/smooth/ftgrays.c' (this file) to your current directory */
- /* */
- /* - copy `include/freetype/ftimage.h' and `src/smooth/ftgrays.h' to the */
- /* same directory */
- /* */
- /* - compile `ftgrays' with the STANDALONE_ macro defined, as in */
- /* */
- /* cc -c -DSTANDALONE_ ftgrays.c */
- /* */
- /* The renderer can be initialized with a call to */
- /* `ft_gray_raster.raster_new'; an anti-aliased bitmap can be generated */
- /* with a call to `ft_gray_raster.raster_render'. */
- /* */
- /* See the comments and documentation in the file `ftimage.h' for more */
- /* details on how the raster works. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This is a new anti-aliasing scan-converter for FreeType 2. The */
- /* algorithm used here is _very_ different from the one in the standard */
- /* `ftraster' module. Actually, `ftgrays' computes the _exact_ */
- /* coverage of the outline on each pixel cell. */
- /* */
- /* It is based on ideas that I initially found in Raph Levien's */
- /* excellent LibArt graphics library (see http://www.levien.com/libart */
- /* for more information, though the web pages do not tell anything */
- /* about the renderer; you'll have to dive into the source code to */
- /* understand how it works). */
- /* */
- /* Note, however, that this is a _very_ different implementation */
- /* compared to Raph's. Coverage information is stored in a very */
- /* different way, and I don't use sorted vector paths. Also, it doesn't */
- /* use floating point values. */
- /* */
- /* This renderer has the following advantages: */
- /* */
- /* - It doesn't need an intermediate bitmap. Instead, one can supply a */
- /* callback function that will be called by the renderer to draw gray */
- /* spans on any target surface. You can thus do direct composition on */
- /* any kind of bitmap, provided that you give the renderer the right */
- /* callback. */
- /* */
- /* - A perfect anti-aliaser, i.e., it computes the _exact_ coverage on */
- /* each pixel cell. */
- /* */
- /* - It performs a single pass on the outline (the `standard' FT2 */
- /* renderer makes two passes). */
- /* */
- /* - It can easily be modified to render to _any_ number of gray levels */
- /* cheaply. */
- /* */
- /* - For small (< 20) pixel sizes, it is faster than the standard */
- /* renderer. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+/****************************************************************************
+ *
+ * ftgrays.c
+ *
+ * A new `perfect' anti-aliasing renderer (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * This file can be compiled without the rest of the FreeType engine, by
+ * defining the STANDALONE_ macro when compiling it. You also need to
+ * put the files `ftgrays.h' and `ftimage.h' into the current
+ * compilation directory. Typically, you could do something like
+ *
+ * - copy `src/smooth/ftgrays.c' (this file) to your current directory
+ *
+ * - copy `include/freetype/ftimage.h' and `src/smooth/ftgrays.h' to the
+ * same directory
+ *
+ * - compile `ftgrays' with the STANDALONE_ macro defined, as in
+ *
+ * cc -c -DSTANDALONE_ ftgrays.c
+ *
+ * The renderer can be initialized with a call to
+ * `ft_gray_raster.raster_new'; an anti-aliased bitmap can be generated
+ * with a call to `ft_gray_raster.raster_render'.
+ *
+ * See the comments and documentation in the file `ftimage.h' for more
+ * details on how the raster works.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * This is a new anti-aliasing scan-converter for FreeType 2. The
+ * algorithm used here is _very_ different from the one in the standard
+ * `ftraster' module. Actually, `ftgrays' computes the _exact_
+ * coverage of the outline on each pixel cell by straight segments.
+ *
+ * It is based on ideas that I initially found in Raph Levien's
+ * excellent LibArt graphics library (see https://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.
+ *
+ * Bézier segments are flattened by splitting them until their deviation
+ * from straight line becomes much smaller than a pixel. Therefore, the
+ * pixel coverage by a Bézier curve is calculated approximately. To
+ * estimate the deviation, we use the distance from the control point
+ * to the conic chord centre or the cubic chord trisection. These
+ * distances vanish fast after each split. In the conic case, they vanish
+ * predictably and the number of necessary splits can be calculated.
+ *
+ * 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 by straight segments.
+ *
+ * - 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 (< 80) 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
+#define FT_COMPONENT smooth
#ifdef STANDALONE_
@@ -112,9 +120,9 @@
/*
- * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
- * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
- * largest error less than 7% compared to the exact value.
+ * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
+ * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
+ * largest error less than 7% compared to the exact value.
*/
#define FT_HYPOT( x, y ) \
( x = FT_ABS( x ), \
@@ -222,10 +230,10 @@ typedef ptrdiff_t FT_PtrDist;
#endif
#define FT_THROW( e ) \
- ( FT_Throw( FT_ERR_CAT( ErrRaster, e ), \
+ ( FT_Throw( FT_ERR_CAT( ErrRaster_, e ), \
__LINE__, \
__FILE__ ) | \
- FT_ERR_CAT( ErrRaster, e ) )
+ FT_ERR_CAT( ErrRaster_, e ) )
#else /* !FT_DEBUG_LEVEL_TRACE */
@@ -279,8 +287,6 @@ typedef ptrdiff_t FT_PtrDist;
#include "ftsmerrs.h"
-#include "ftspic.h"
-
#define Smooth_Err_Invalid_Mode Smooth_Err_Cannot_Render_Glyph
#define Smooth_Err_Memory_Overflow Smooth_Err_Out_Of_Memory
#define ErrRaster_Memory_Overflow Smooth_Err_Out_Of_Memory
@@ -329,17 +335,9 @@ typedef ptrdiff_t FT_PtrDist;
/* must be at least 6 bits! */
#define PIXEL_BITS 8
-#undef FLOOR
-#undef CEILING
-#undef TRUNC
-#undef SCALED
-
#define ONE_PIXEL ( 1 << PIXEL_BITS )
-#define TRUNC( x ) ( (TCoord)( (x) >> PIXEL_BITS ) )
-#define SUBPIXELS( x ) ( (TPos)(x) * ONE_PIXEL )
-#define FLOOR( x ) ( (x) & -ONE_PIXEL )
-#define CEILING( x ) ( ( (x) + ONE_PIXEL - 1 ) & -ONE_PIXEL )
-#define ROUND( x ) ( ( (x) + ONE_PIXEL / 2 ) & -ONE_PIXEL )
+#define TRUNC( x ) (TCoord)( (x) >> PIXEL_BITS )
+#define FRACT( x ) (TCoord)( (x) & ( ONE_PIXEL - 1 ) )
#if PIXEL_BITS >= 6
#define UPSCALE( x ) ( (x) * ( ONE_PIXEL >> 6 ) )
@@ -390,15 +388,15 @@ typedef ptrdiff_t FT_PtrDist;
#define FT_UDIVPREP( c, b ) \
long b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
: 0
-#define FT_UDIV( a, b ) \
- ( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >> \
- ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
+#define FT_UDIV( a, b ) \
+ (TCoord)( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >> \
+ ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
- /*************************************************************************/
- /* */
- /* TYPE DEFINITIONS */
- /* */
+ /**************************************************************************
+ *
+ * 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 */
@@ -434,6 +432,9 @@ typedef ptrdiff_t FT_PtrDist;
#define FT_MAX_GRAY_POOL ( 2048 / sizeof ( TCell ) )
#endif
+ /* FT_Span buffer size for direct rendering only */
+#define FT_MAX_GRAY_SPANS 10
+
#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
/* We disable the warning `structure was padded due to */
@@ -467,6 +468,8 @@ typedef ptrdiff_t FT_PtrDist;
FT_Raster_Span_Func render_span;
void* render_span_data;
+ FT_Span spans[FT_MAX_GRAY_SPANS];
+ int num_spans;
} gray_TWorker, *gray_PWorker;
@@ -516,10 +519,10 @@ typedef ptrdiff_t FT_PtrDist;
#endif /* FT_DEBUG_LEVEL_TRACE */
- /*************************************************************************/
- /* */
- /* Record the current cell in the table. */
- /* */
+ /**************************************************************************
+ *
+ * Record the current cell in the linked list.
+ */
static void
gray_record_cell( RAS_ARG )
{
@@ -528,10 +531,9 @@ typedef ptrdiff_t FT_PtrDist;
pcell = &ras.ycells[ras.ey - ras.min_ey];
- for (;;)
+ while ( ( cell = *pcell ) )
{
- cell = *pcell;
- if ( !cell || cell->x > x )
+ if ( cell->x > x )
break;
if ( cell->x == x )
@@ -561,10 +563,10 @@ typedef ptrdiff_t FT_PtrDist;
}
- /*************************************************************************/
- /* */
- /* Set the current cell to a new position. */
- /* */
+ /**************************************************************************
+ *
+ * Set the current cell to a new position.
+ */
static void
gray_set_cell( RAS_ARG_ TCoord ex,
TCoord ey )
@@ -579,16 +581,13 @@ typedef ptrdiff_t FT_PtrDist;
/* Note that if a cell is to the left of the clipping region, it is */
/* actually set to the (min_ex-1) horizontal position. */
- if ( ex < ras.min_ex )
- ex = ras.min_ex - 1;
-
/* record the current one if it is valid and substantial */
if ( !ras.invalid && ( ras.area || ras.cover ) )
gray_record_cell( RAS_VAR );
ras.area = 0;
ras.cover = 0;
- ras.ex = ex;
+ ras.ex = FT_MAX( ex, ras.min_ex - 1 );
ras.ey = ey;
ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
@@ -598,10 +597,10 @@ typedef ptrdiff_t FT_PtrDist;
#ifndef FT_LONG64
- /*************************************************************************/
- /* */
- /* Render a scanline as one or more cells. */
- /* */
+ /**************************************************************************
+ *
+ * Render a scanline as one or more cells.
+ */
static void
gray_render_scanline( RAS_ARG_ TCoord ey,
TPos x1,
@@ -624,8 +623,8 @@ typedef ptrdiff_t FT_PtrDist;
return;
}
- fx1 = (TCoord)( x1 - SUBPIXELS( ex1 ) );
- fx2 = (TCoord)( x2 - SUBPIXELS( ex2 ) );
+ fx1 = FRACT( x1 );
+ fx2 = FRACT( x2 );
/* everything is located in a single cell. That is easy! */
/* */
@@ -652,6 +651,9 @@ typedef ptrdiff_t FT_PtrDist;
dx = -dx;
}
+ /* the fractional part of y-delta is mod/dx. It is essential to */
+ /* keep track of its accumulation for accurate rendering. */
+ /* XXX: y-delta and x-delta below should be related. */
FT_DIV_MOD( TCoord, p, dx, delta, mod );
ras.area += (TArea)( ( fx1 + first ) * delta );
@@ -696,10 +698,10 @@ typedef ptrdiff_t FT_PtrDist;
}
- /*************************************************************************/
- /* */
- /* Render a given line as a series of scanlines. */
- /* */
+ /**************************************************************************
+ *
+ * Render a given line as a series of scanlines.
+ */
static void
gray_render_line( RAS_ARG_ TPos to_x,
TPos to_y )
@@ -717,8 +719,8 @@ typedef ptrdiff_t FT_PtrDist;
( ey1 < ras.min_ey && ey2 < ras.min_ey ) )
goto End;
- fy1 = (TCoord)( ras.y - SUBPIXELS( ey1 ) );
- fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
+ fy1 = FRACT( ras.y );
+ fy2 = FRACT( to_y );
/* everything is on a single scanline */
if ( ey1 == ey2 )
@@ -734,7 +736,7 @@ typedef ptrdiff_t FT_PtrDist;
if ( dx == 0 )
{
TCoord ex = TRUNC( ras.x );
- TCoord two_fx = (TCoord)( ( ras.x - SUBPIXELS( ex ) ) << 1 );
+ TCoord two_fx = FRACT( ras.x ) << 1;
TArea area;
@@ -789,6 +791,8 @@ typedef ptrdiff_t FT_PtrDist;
dy = -dy;
}
+ /* the fractional part of x-delta is mod/dy. It is essential to */
+ /* keep track of its accumulation for accurate rendering. */
FT_DIV_MOD( TCoord, p, dy, delta, mod );
x = ras.x + delta;
@@ -837,16 +841,17 @@ typedef ptrdiff_t FT_PtrDist;
#else
- /*************************************************************************/
- /* */
- /* Render a straight line across multiple cells in any direction. */
- /* */
+ /**************************************************************************
+ *
+ * Render a straight line across multiple cells in any direction.
+ */
static void
gray_render_line( RAS_ARG_ TPos to_x,
TPos to_y )
{
- TPos dx, dy, fx1, fy1, fx2, fy2;
- TCoord ex1, ex2, ey1, ey2;
+ TPos dx, dy;
+ TCoord fx1, fy1, fx2, fy2;
+ TCoord ex1, ey1, ex2, ey2;
ey1 = TRUNC( ras.y );
@@ -860,8 +865,8 @@ typedef ptrdiff_t FT_PtrDist;
ex1 = TRUNC( ras.x );
ex2 = TRUNC( to_x );
- fx1 = ras.x - SUBPIXELS( ex1 );
- fy1 = ras.y - SUBPIXELS( ey1 );
+ fx1 = FRACT( ras.x );
+ fy1 = FRACT( ras.y );
dx = to_x - ras.x;
dy = to_y - ras.y;
@@ -870,8 +875,8 @@ typedef ptrdiff_t FT_PtrDist;
;
else if ( dy == 0 ) /* ex1 != ex2 */ /* any horizontal line */
{
- ex1 = ex2;
- gray_set_cell( RAS_VAR_ ex1, ey1 );
+ gray_set_cell( RAS_VAR_ ex2, ey2 );
+ goto End;
}
else if ( dx == 0 )
{
@@ -898,7 +903,7 @@ typedef ptrdiff_t FT_PtrDist;
}
else /* any other line */
{
- TPos prod = dx * fy1 - dy * fx1;
+ TPos prod = dx * (TPos)fy1 - dy * (TPos)fx1;
FT_UDIVPREP( ex1 != ex2, dx );
FT_UDIVPREP( ey1 != ey2, dy );
@@ -912,7 +917,7 @@ typedef ptrdiff_t FT_PtrDist;
prod - dx * ONE_PIXEL > 0 ) /* left */
{
fx2 = 0;
- fy2 = (TPos)FT_UDIV( -prod, -dx );
+ fy2 = FT_UDIV( -prod, -dx );
prod -= dy * ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -924,7 +929,7 @@ typedef ptrdiff_t FT_PtrDist;
prod - dx * ONE_PIXEL + dy * ONE_PIXEL > 0 ) /* up */
{
prod -= dx * ONE_PIXEL;
- fx2 = (TPos)FT_UDIV( -prod, dy );
+ fx2 = FT_UDIV( -prod, dy );
fy2 = ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -937,7 +942,7 @@ typedef ptrdiff_t FT_PtrDist;
{
prod += dy * ONE_PIXEL;
fx2 = ONE_PIXEL;
- fy2 = (TPos)FT_UDIV( prod, dx );
+ fy2 = FT_UDIV( prod, dx );
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
fx1 = 0;
@@ -947,7 +952,7 @@ typedef ptrdiff_t FT_PtrDist;
else /* ( prod + dy * ONE_PIXEL < 0 &&
prod > 0 ) down */
{
- fx2 = (TPos)FT_UDIV( prod, -dy );
+ fx2 = FT_UDIV( prod, -dy );
fy2 = 0;
prod += dx * ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
@@ -961,8 +966,8 @@ typedef ptrdiff_t FT_PtrDist;
} while ( ex1 != ex2 || ey1 != ey2 );
}
- fx2 = to_x - SUBPIXELS( ex2 );
- fy2 = to_y - SUBPIXELS( ey2 );
+ fx2 = FRACT( to_x );
+ fy2 = FRACT( to_y );
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -981,16 +986,18 @@ typedef ptrdiff_t FT_PtrDist;
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ base[3].x = b >> 1;
+ base[2].x = ( a + b ) >> 2;
+ base[1].x = a >> 1;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ base[3].y = b >> 1;
+ base[2].y = ( a + b ) >> 2;
+ base[1].y = a >> 1;
}
@@ -1044,12 +1051,11 @@ typedef ptrdiff_t FT_PtrDist;
/* many times as there are trailing zeros in the counter. */
do
{
- split = 1;
- while ( ( draw & split ) == 0 )
+ split = draw & ( -draw ); /* isolate the rightmost 1-bit */
+ while ( ( split >>= 1 ) )
{
gray_split_conic( arc );
arc += 2;
- split <<= 1;
}
gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
@@ -1062,28 +1068,32 @@ typedef ptrdiff_t FT_PtrDist;
static void
gray_split_cubic( FT_Vector* base )
{
- TPos a, b, c, d;
+ TPos a, b, c;
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;
+ a = base[0].x + base[1].x;
+ b = base[1].x + base[2].x;
+ c = base[2].x + base[3].x;
+ base[5].x = c >> 1;
+ c += b;
+ base[4].x = c >> 2;
+ base[1].x = a >> 1;
+ a += b;
+ base[2].x = a >> 2;
+ base[3].x = ( a + c ) >> 3;
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;
+ a = base[0].y + base[1].y;
+ b = base[1].y + base[2].y;
+ c = base[2].y + base[3].y;
+ base[5].y = c >> 1;
+ c += b;
+ base[4].y = c >> 2;
+ base[1].y = a >> 1;
+ a += b;
+ base[2].y = a >> 2;
+ base[3].y = ( a + c ) >> 3;
}
@@ -1094,9 +1104,6 @@ typedef ptrdiff_t FT_PtrDist;
{
FT_Vector bez_stack[16 * 3 + 1]; /* enough to accommodate bisections */
FT_Vector* arc = bez_stack;
- TPos dx, dy, dx_, dy_;
- TPos dx1, dy1, dx2, dy2;
- TPos L, s, s_limit;
arc[0].x = UPSCALE( to->x );
@@ -1125,45 +1132,13 @@ typedef ptrdiff_t FT_PtrDist;
for (;;)
{
- /* Decide whether to split or draw. See `Rapid Termination */
- /* Evaluation for Recursive Subdivision of Bezier Curves' by Thomas */
- /* F. Hain, at */
- /* http://www.cis.southalabama.edu/~hain/general/Publications/Bezier/Camera-ready%20CISST02%202.pdf */
-
- /* dx and dy are x and y components of the P0-P3 chord vector. */
- dx = dx_ = arc[3].x - arc[0].x;
- dy = dy_ = arc[3].y - arc[0].y;
-
- L = FT_HYPOT( dx_, dy_ );
-
- /* Avoid possible arithmetic overflow below by splitting. */
- if ( L > 32767 )
- goto Split;
-
- /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */
- s_limit = L * (TPos)( ONE_PIXEL / 6 );
-
- /* s is L * the perpendicular distance from P1 to the line P0-P3. */
- dx1 = arc[1].x - arc[0].x;
- dy1 = arc[1].y - arc[0].y;
- s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx1 ), MUL_LONG( dx, dy1 ) ) );
-
- if ( s > s_limit )
- goto Split;
-
- /* s is L * the perpendicular distance from P2 to the line P0-P3. */
- dx2 = arc[2].x - arc[0].x;
- dy2 = arc[2].y - arc[0].y;
- s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx2 ), MUL_LONG( dx, dy2 ) ) );
-
- if ( s > s_limit )
- goto Split;
-
- /* Split super curvy segments where the off points are so far
- from the chord that the angles P0-P1-P3 or P0-P2-P3 become
- acute as detected by appropriate dot products. */
- if ( dx1 * ( dx1 - dx ) + dy1 * ( dy1 - dy ) > 0 ||
- dx2 * ( dx2 - dx ) + dy2 * ( dy2 - dy ) > 0 )
+ /* with each split, control points quickly converge towards */
+ /* chord trisection points and the vanishing distances below */
+ /* indicate when the segment is flat enough to draw */
+ if ( FT_ABS( 2 * arc[0].x - 3 * arc[1].x + arc[3].x ) > ONE_PIXEL / 2 ||
+ FT_ABS( 2 * arc[0].y - 3 * arc[1].y + arc[3].y ) > ONE_PIXEL / 2 ||
+ FT_ABS( arc[0].x - 3 * arc[2].x + 2 * arc[3].x ) > ONE_PIXEL / 2 ||
+ FT_ABS( arc[0].y - 3 * arc[2].y + 2 * arc[3].y ) > ONE_PIXEL / 2 )
goto Split;
gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
@@ -1238,8 +1213,6 @@ typedef ptrdiff_t FT_PtrDist;
{
/* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256 */
coverage >>= PIXEL_BITS * 2 + 1 - 8;
- if ( coverage < 0 )
- coverage = -coverage - 1;
/* compute the line's coverage depending on the outline fill rule */
if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
@@ -1249,23 +1222,30 @@ typedef ptrdiff_t FT_PtrDist;
if ( coverage >= 256 )
coverage = 511 - coverage;
}
- else
+ else /* default non-zero winding rule */
{
- /* normal non-zero winding rule */
+ if ( coverage < 0 )
+ coverage = ~coverage; /* the same as -coverage - 1 */
+
if ( coverage >= 256 )
coverage = 255;
}
- if ( ras.render_span ) /* for FT_RASTER_FLAG_DIRECT only */
+ if ( ras.num_spans >= 0 ) /* for FT_RASTER_FLAG_DIRECT only */
{
- FT_Span span;
+ FT_Span* span = ras.spans + ras.num_spans++;
- span.x = (short)x;
- span.len = (unsigned short)acount;
- span.coverage = (unsigned char)coverage;
+ span->x = (short)x;
+ span->len = (unsigned short)acount;
+ span->coverage = (unsigned char)coverage;
- ras.render_span( y, 1, &span, ras.render_span_data );
+ if ( ras.num_spans == FT_MAX_GRAY_SPANS )
+ {
+ /* flush the span buffer and reset the count */
+ ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
+ ras.num_spans = 0;
+ }
}
else
{
@@ -1279,14 +1259,29 @@ typedef ptrdiff_t FT_PtrDist;
*/
switch ( acount )
{
- case 7: *q++ = c;
- case 6: *q++ = c;
- case 5: *q++ = c;
- case 4: *q++ = c;
- case 3: *q++ = c;
- case 2: *q++ = c;
- case 1: *q = c;
- case 0: break;
+ case 7:
+ *q++ = c;
+ /* fall through */
+ case 6:
+ *q++ = c;
+ /* fall through */
+ case 5:
+ *q++ = c;
+ /* fall through */
+ case 4:
+ *q++ = c;
+ /* fall through */
+ case 3:
+ *q++ = c;
+ /* fall through */
+ case 2:
+ *q++ = c;
+ /* fall through */
+ case 1:
+ *q = c;
+ /* fall through */
+ case 0:
+ break;
default:
FT_MEM_SET( q, c, acount );
}
@@ -1324,53 +1319,63 @@ typedef ptrdiff_t FT_PtrDist;
if ( cover != 0 )
gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
+
+ if ( ras.num_spans > 0 ) /* for FT_RASTER_FLAG_DIRECT only */
+ {
+ /* flush the span buffer and reset the count */
+ ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
+ ras.num_spans = 0;
+ }
}
}
#ifdef STANDALONE_
- /*************************************************************************/
- /* */
- /* The following functions should only compile in stand-alone mode, */
- /* i.e., when building this component without the rest of FreeType. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Decompose */
- /* */
- /* <Description> */
- /* Walk over an outline's structure to decompose it into individual */
- /* segments and Bézier arcs. This function is also able to emit */
- /* `move to' and `close to' operations to indicate the start and end */
- /* of new contours in the outline. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source target. */
- /* */
- /* func_interface :: A table of `emitters', i.e., function pointers */
- /* called during decomposition to indicate path */
- /* operations. */
- /* */
- /* <InOut> */
- /* user :: A typeless pointer which is passed to each */
- /* emitter during the decomposition. It can be */
- /* used to store the state during the */
- /* decomposition. */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * The following functions should only compile in stand-alone mode,
+ * i.e., when building this component without the rest of FreeType.
+ *
+ */
+
+ /**************************************************************************
+ *
+ * @Function:
+ * FT_Outline_Decompose
+ *
+ * @Description:
+ * Walk over an outline's structure to decompose it into individual
+ * segments and Bézier arcs. This function is also able to emit
+ * `move to' and `close to' operations to indicate the start and end
+ * of new contours in the outline.
+ *
+ * @Input:
+ * outline ::
+ * A pointer to the source target.
+ *
+ * func_interface ::
+ * A table of `emitters', i.e., function pointers
+ * called during decomposition to indicate path
+ * operations.
+ *
+ * @InOut:
+ * user ::
+ * A typeless pointer which is passed to each
+ * emitter during the decomposition. It can be
+ * used to store the state during the
+ * decomposition.
+ *
+ * @Return:
+ * Error code. 0 means success.
+ */
static int
FT_Outline_Decompose( const FT_Outline* outline,
const FT_Outline_Funcs* func_interface,
void* user )
{
#undef SCALED
-#define SCALED( x ) ( ( (x) << shift ) - delta )
+#define SCALED( x ) ( (x) * ( 1L << shift ) - delta )
FT_Vector v_last;
FT_Vector v_control;
@@ -1610,81 +1615,6 @@ typedef ptrdiff_t FT_PtrDist;
return FT_THROW( Invalid_Outline );
}
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_CBox */
- /* */
- /* <Description> */
- /* Return an outline's `control box'. The control box encloses all */
- /* the outline's points, including Bézier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <Output> */
- /* acbox :: The outline's control box. */
- /* */
- /* <Note> */
- /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
- /* */
-
- static void
- FT_Outline_Get_CBox( const FT_Outline* outline,
- FT_BBox *acbox )
- {
- TPos xMin, yMin, xMax, yMax;
-
-
- if ( outline && acbox )
- {
- if ( outline->n_points == 0 )
- {
- xMin = 0;
- yMin = 0;
- xMax = 0;
- yMax = 0;
- }
- else
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- xMin = xMax = vec->x;
- yMin = yMax = vec->y;
- vec++;
-
- for ( ; vec < limit; vec++ )
- {
- TPos x, y;
-
-
- x = vec->x;
- if ( x < xMin ) xMin = x;
- if ( x > xMax ) xMax = x;
-
- y = vec->y;
- if ( y < yMin ) yMin = y;
- if ( y > yMax ) yMax = y;
- }
- }
- acbox->xMin = xMin;
- acbox->xMax = xMax;
- acbox->yMin = yMin;
- acbox->yMax = yMax;
- }
- }
-
#endif /* STANDALONE_ */
@@ -1702,19 +1632,20 @@ typedef ptrdiff_t FT_PtrDist;
static int
- gray_convert_glyph_inner( RAS_ARG )
+ gray_convert_glyph_inner( RAS_ARG,
+ int continued )
{
+ int error;
- volatile int error = 0;
-
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Outline_Funcs func_interface;
- Init_Class_func_interface(&func_interface);
-#endif
if ( ft_setjmp( ras.jump_buffer ) == 0 )
{
+ if ( continued )
+ FT_Trace_Disable();
error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
+ if ( continued )
+ FT_Trace_Enable();
+
if ( !ras.invalid )
gray_record_cell( RAS_VAR );
@@ -1741,8 +1672,6 @@ typedef ptrdiff_t FT_PtrDist;
{
const TCoord yMin = ras.min_ey;
const TCoord yMax = ras.max_ey;
- const TCoord xMin = ras.min_ex;
- const TCoord xMax = ras.max_ex;
TCell buffer[FT_MAX_GRAY_POOL];
size_t height = (size_t)( yMax - yMin );
@@ -1751,6 +1680,8 @@ typedef ptrdiff_t FT_PtrDist;
TCoord bands[32]; /* enough to accommodate bisections */
TCoord* band;
+ int continued = 0;
+
/* set up vertical bands */
if ( height > n )
@@ -1774,8 +1705,8 @@ typedef ptrdiff_t FT_PtrDist;
ras.max_ey = FT_MIN( y, yMax );
band = bands;
- band[1] = xMin;
- band[0] = xMax;
+ band[1] = ras.min_ey;
+ band[0] = ras.max_ey;
do
{
@@ -1787,10 +1718,11 @@ typedef ptrdiff_t FT_PtrDist;
ras.num_cells = 0;
ras.invalid = 1;
- ras.min_ex = band[1];
- ras.max_ex = band[0];
+ ras.min_ey = band[1];
+ ras.max_ey = band[0];
- error = gray_convert_glyph_inner( RAS_VAR );
+ error = gray_convert_glyph_inner( RAS_VAR, continued );
+ continued = 1;
if ( !error )
{
@@ -1827,7 +1759,6 @@ typedef ptrdiff_t FT_PtrDist;
{
const FT_Outline* outline = (const FT_Outline*)params->source;
const FT_Bitmap* target_map = params->target;
- FT_BBox cbox, clip;
#ifndef FT_STATIC_RASTER
gray_TWorker worker[1];
@@ -1864,6 +1795,12 @@ typedef ptrdiff_t FT_PtrDist;
ras.render_span = (FT_Raster_Span_Func)params->gray_spans;
ras.render_span_data = params->user;
+ ras.num_spans = 0;
+
+ ras.min_ex = params->clip_box.xMin;
+ ras.min_ey = params->clip_box.yMin;
+ ras.max_ex = params->clip_box.xMax;
+ ras.max_ey = params->clip_box.yMax;
}
else
{
@@ -1888,46 +1825,15 @@ typedef ptrdiff_t FT_PtrDist;
ras.render_span = (FT_Raster_Span_Func)NULL;
ras.render_span_data = NULL;
- }
-
- FT_Outline_Get_CBox( outline, &cbox );
-
- /* reject too large outline coordinates */
- if ( cbox.xMin < -0x1000000L || cbox.xMax > 0x1000000L ||
- cbox.yMin < -0x1000000L || cbox.yMax > 0x1000000L )
- return FT_THROW( Invalid_Outline );
-
- /* truncate the bounding box to integer pixels */
- cbox.xMin = cbox.xMin >> 6;
- cbox.yMin = cbox.yMin >> 6;
- cbox.xMax = ( cbox.xMax + 63 ) >> 6;
- cbox.yMax = ( cbox.yMax + 63 ) >> 6;
+ ras.num_spans = -1; /* invalid */
- /* compute clipping box */
- if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) )
- {
- /* compute clip box from target pixmap */
- clip.xMin = 0;
- clip.yMin = 0;
- clip.xMax = (FT_Pos)target_map->width;
- clip.yMax = (FT_Pos)target_map->rows;
+ ras.min_ex = 0;
+ ras.min_ey = 0;
+ ras.max_ex = (FT_Pos)target_map->width;
+ ras.max_ey = (FT_Pos)target_map->rows;
}
- else if ( params->flags & FT_RASTER_FLAG_CLIP )
- clip = params->clip_box;
- else
- {
- clip.xMin = -32768L;
- clip.yMin = -32768L;
- clip.xMax = 32767L;
- clip.yMax = 32767L;
- }
-
- /* clip to target bitmap, exit if nothing to do */
- ras.min_ex = FT_MAX( cbox.xMin, clip.xMin );
- ras.min_ey = FT_MAX( cbox.yMin, clip.yMin );
- ras.max_ex = FT_MIN( cbox.xMax, clip.xMax );
- ras.max_ey = FT_MIN( cbox.yMax, clip.yMax );
+ /* exit if nothing to do */
if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
return 0;
diff --git a/freetype/src/smooth/ftgrays.h b/freetype/src/smooth/ftgrays.h
index 9e11ca67..e9f9c7a4 100644
--- a/freetype/src/smooth/ftgrays.h
+++ b/freetype/src/smooth/ftgrays.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftgrays.h */
-/* */
-/* FreeType smooth renderer declaration */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftgrays.h
+ *
+ * FreeType smooth renderer declaration
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,19 +28,18 @@
#include "ftimage.h"
#else
#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H /* for FT_CONFIG_OPTION_PIC */
#include FT_IMAGE_H
#endif
- /*************************************************************************/
- /* */
- /* To make ftgrays.h independent from configuration files we check */
- /* whether FT_EXPORT_VAR has been defined already. */
- /* */
- /* On some systems and compilers (Win32 mostly), an extra keyword is */
- /* necessary to compile the library as a DLL. */
- /* */
+ /**************************************************************************
+ *
+ * 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
diff --git a/freetype/src/smooth/ftsmerrs.h b/freetype/src/smooth/ftsmerrs.h
index 226dc1b0..d52c0dd9 100644
--- a/freetype/src/smooth/ftsmerrs.h
+++ b/freetype/src/smooth/ftsmerrs.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* ftsmerrs.h */
-/* */
-/* smooth renderer error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ftsmerrs.h
+ *
+ * smooth renderer error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/smooth/ftsmooth.c b/freetype/src/smooth/ftsmooth.c
index ef176bdf..cd034d2b 100644
--- a/freetype/src/smooth/ftsmooth.c
+++ b/freetype/src/smooth/ftsmooth.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.c */
-/* */
-/* Anti-aliasing renderer interface (body). */
-/* */
-/* Copyright 2000-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsmooth.c
+ *
+ * Anti-aliasing renderer interface (body).
+ *
+ * Copyright (C) 2000-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -22,7 +22,6 @@
#include FT_OUTLINE_H
#include "ftsmooth.h"
#include "ftgrays.h"
-#include "ftspic.h"
#include "ftsmerrs.h"
@@ -31,6 +30,26 @@
static FT_Error
ft_smooth_init( FT_Renderer render )
{
+
+#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+ FT_Vector* sub = render->root.library->lcd_geometry;
+
+
+ /* set up default subpixel geometry for striped RGB panels. */
+ sub[0].x = -21;
+ sub[0].y = 0;
+ sub[1].x = 0;
+ sub[1].y = 0;
+ sub[2].x = 21;
+ sub[2].y = 0;
+
+#elif 0 /* or else, once ClearType patents expire */
+
+ FT_Library_SetLcdFilter( render->root.library, FT_LCD_FILTER_DEFAULT );
+
+#endif
+
render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
return 0;
@@ -130,7 +149,11 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
- ft_glyphslot_preset_bitmap( slot, mode, origin );
+ if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) )
+ {
+ error = FT_THROW( Raster_Overflow );
+ goto Exit;
+ }
/* allocate new one */
if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
@@ -220,7 +243,7 @@
}
if ( lcd_filter_func )
- lcd_filter_func( bitmap, mode, lcd_weights );
+ lcd_filter_func( bitmap, lcd_weights );
}
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -235,33 +258,40 @@
unsigned int width = bitmap->width;
int pitch = bitmap->pitch;
+ FT_Vector* sub = slot->library->lcd_geometry;
- /* Render 3 separate monochrome bitmaps, shifting the outline */
- /* by 1/3 pixel. */
- width /= 3;
- bitmap->buffer += width;
+ /* Render 3 separate monochrome bitmaps, shifting the outline. */
+ width /= 3;
+ FT_Outline_Translate( outline,
+ -sub[0].x,
+ -sub[0].y );
error = render->raster_render( render->raster, &params );
if ( error )
goto Exit;
- FT_Outline_Translate( outline, -21, 0 );
- x_shift -= 21;
bitmap->buffer += width;
-
+ FT_Outline_Translate( outline,
+ sub[0].x - sub[1].x,
+ sub[0].y - sub[1].y );
error = render->raster_render( render->raster, &params );
+ bitmap->buffer -= width;
if ( error )
goto Exit;
- FT_Outline_Translate( outline, 42, 0 );
- x_shift += 42;
- bitmap->buffer -= 2 * width;
-
+ bitmap->buffer += 2 * width;
+ FT_Outline_Translate( outline,
+ sub[1].x - sub[2].x,
+ sub[1].y - sub[2].y );
error = render->raster_render( render->raster, &params );
+ bitmap->buffer -= 2 * width;
if ( error )
goto Exit;
+ x_shift -= sub[2].x;
+ y_shift -= sub[2].y;
+
/* XXX: Rearrange the bytes according to FT_PIXEL_MODE_LCD. */
/* XXX: It is more efficient to render every third byte above. */
@@ -286,34 +316,43 @@
{
int pitch = bitmap->pitch;
+ FT_Vector* sub = slot->library->lcd_geometry;
+
- /* Render 3 separate monochrome bitmaps, shifting the outline */
- /* by 1/3 pixel. Triple the pitch to render on each third row. */
+ /* Render 3 separate monochrome bitmaps, shifting the outline. */
+ /* Notice that the subpixel geometry vectors are rotated. */
+ /* Triple the pitch to render on each third row. */
bitmap->pitch *= 3;
bitmap->rows /= 3;
- bitmap->buffer += pitch;
-
+ FT_Outline_Translate( outline,
+ -sub[0].y,
+ sub[0].x );
error = render->raster_render( render->raster, &params );
if ( error )
goto Exit;
- FT_Outline_Translate( outline, 0, 21 );
- y_shift += 21;
bitmap->buffer += pitch;
-
+ FT_Outline_Translate( outline,
+ sub[0].y - sub[1].y,
+ sub[1].x - sub[0].x );
error = render->raster_render( render->raster, &params );
+ bitmap->buffer -= pitch;
if ( error )
goto Exit;
- FT_Outline_Translate( outline, 0, -42 );
- y_shift -= 42;
- bitmap->buffer -= 2 * pitch;
-
+ bitmap->buffer += 2 * pitch;
+ FT_Outline_Translate( outline,
+ sub[1].y - sub[2].y,
+ sub[2].x - sub[1].x );
error = render->raster_render( render->raster, &params );
+ bitmap->buffer -= 2 * pitch;
if ( error )
goto Exit;
+ x_shift -= sub[2].y;
+ y_shift += sub[2].x;
+
bitmap->pitch /= 3;
bitmap->rows *= 3;
}
@@ -403,7 +442,7 @@
(FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
(FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
+ (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */
)
@@ -430,7 +469,7 @@
(FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
(FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
+ (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */
)
@@ -457,7 +496,7 @@
(FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
(FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
+ (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */
)
diff --git a/freetype/src/smooth/ftsmooth.h b/freetype/src/smooth/ftsmooth.h
index c76ffc50..fbb21a31 100644
--- a/freetype/src/smooth/ftsmooth.h
+++ b/freetype/src/smooth/ftsmooth.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.h */
-/* */
-/* Anti-aliasing renderer interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsmooth.h
+ *
+ * Anti-aliasing renderer interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/smooth/ftspic.c b/freetype/src/smooth/ftspic.c
deleted file mode 100644
index 10f04cf4..00000000
--- a/freetype/src/smooth/ftspic.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.c */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ftspic.h"
-#include "ftsmerrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftgrays.c */
- void
- FT_Init_Class_ft_grays_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_smooth_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->smooth )
- {
- SmoothPIC* container = (SmoothPIC*)pic_container->smooth;
-
-
- if ( --container->ref_count )
- return;
-
- FT_FREE( container );
- pic_container->smooth = NULL;
- }
- }
-
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- SmoothPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* since this function also serve smooth_lcd and smooth_lcdv renderers,
- it implements reference counting */
- if ( pic_container->smooth )
- {
- ((SmoothPIC*)pic_container->smooth)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->smooth = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_grays_raster( &container->ft_grays_raster );
-
- return error;
- }
-
-
- /* re-route these init and free functions to the above functions */
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/smooth/ftspic.h b/freetype/src/smooth/ftspic.h
deleted file mode 100644
index 80fb64cf..00000000
--- a/freetype/src/smooth/ftspic.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.h */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSPIC_H_
-#define FTSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_GRAYS_RASTER_GET ft_grays_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct SmoothPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_grays_raster;
-
- } SmoothPIC;
-
-
-#define GET_PIC( lib ) \
- ( (SmoothPIC*)( (lib)->pic_container.smooth ) )
-#define FT_GRAYS_RASTER_GET ( GET_PIC( library )->ft_grays_raster )
-
-
- /* see ftspic.c for the implementation */
- void
- ft_smooth_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTSPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/smooth/module.mk b/freetype/src/smooth/module.mk
index 5b8bc3be..44b76dfe 100644
--- a/freetype/src/smooth/module.mk
+++ b/freetype/src/smooth/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/smooth/rules.mk b/freetype/src/smooth/rules.mk
index f30824a3..0153ac24 100644
--- a/freetype/src/smooth/rules.mk
+++ b/freetype/src/smooth/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -29,8 +29,7 @@ SMOOTH_COMPILE := $(CC) $(ANSIFLAGS) \
# smooth driver sources (i.e., C files)
#
SMOOTH_DRV_SRC := $(SMOOTH_DIR)/ftgrays.c \
- $(SMOOTH_DIR)/ftsmooth.c \
- $(SMOOTH_DIR)/ftspic.c
+ $(SMOOTH_DIR)/ftsmooth.c
# smooth driver headers
diff --git a/freetype/src/smooth/smooth.c b/freetype/src/smooth/smooth.c
index 5249a893..9c543d33 100644
--- a/freetype/src/smooth/smooth.c
+++ b/freetype/src/smooth/smooth.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* smooth.c */
-/* */
-/* FreeType anti-aliasing rasterer module component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType anti-aliasing rasterer module component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -21,7 +21,6 @@
#include "ftgrays.c"
#include "ftsmooth.c"
-#include "ftspic.c"
/* END */
diff --git a/freetype/src/tools/afblue.pl b/freetype/src/tools/afblue.pl
index 7c6f1a7d..937d4ecf 100644
--- a/freetype/src/tools/afblue.pl
+++ b/freetype/src/tools/afblue.pl
@@ -5,7 +5,7 @@
#
# Process a blue zone character data file.
#
-# Copyright 2013-2018 by
+# Copyright (C) 2013-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/apinames.c b/freetype/src/tools/apinames.c
index 06c32604..aeecf88d 100644
--- a/freetype/src/tools/apinames.c
+++ b/freetype/src/tools/apinames.c
@@ -10,7 +10,7 @@
* accepted if you are using GCC for compilation (and probably by
* other compilers too).
*
- * Author: David Turner, 2005, 2006, 2008-2013, 2015
+ * Author: FreeType team, 2005-2019
*
* This code is explicitly placed into the public domain.
*
@@ -26,6 +26,7 @@
#define LINEBUFF_SIZE 1024
+
typedef enum OutputFormat_
{
OUTPUT_LIST = 0, /* output the list of names, one per line */
@@ -53,10 +54,12 @@ typedef struct NameRec_
} NameRec, *Name;
+
static Name the_names;
static int num_names;
static int max_names;
+
static void
names_add( const char* name,
const char* end )
@@ -65,14 +68,16 @@ names_add( const char* name,
int nn, len;
Name nm;
+
if ( end <= name )
return;
/* compute hash value */
- len = (int)(end - name);
+ len = (int)( end - name );
h = 0;
+
for ( nn = 0; nn < len; nn++ )
- h = h*33 + name[nn];
+ h = h * 33 + name[nn];
/* check for an pre-existing name */
for ( nn = 0; nn < num_names; nn++ )
@@ -88,7 +93,7 @@ names_add( const char* name,
/* add new name */
if ( num_names >= max_names )
{
- max_names += (max_names >> 1) + 4;
+ max_names += ( max_names >> 1 ) + 4;
the_names = (NameRec*)realloc( the_names,
sizeof ( the_names[0] ) * max_names );
if ( !the_names )
@@ -97,7 +102,7 @@ names_add( const char* name,
nm = &the_names[num_names++];
nm->hash = h;
- nm->name = (char*)malloc( len+1 );
+ nm->name = (char*)malloc( len + 1 );
if ( !nm->name )
panic( "not enough memory" );
@@ -116,6 +121,7 @@ name_compare( const void* name1,
return strcmp( n1->name, n2->name );
}
+
static void
names_sort( void )
{
@@ -134,87 +140,93 @@ names_dump( FILE* out,
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_WINDOWS_DEF:
+ if ( dll_name )
+ fprintf( out, "LIBRARY %s\n", dll_name );
- case OUTPUT_BORLAND_DEF:
- if ( dll_name )
- fprintf( out, "LIBRARY %s\n", dll_name );
-
- fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
- fprintf( out, "EXPORTS\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, " _%s\n", the_names[nn].name );
- break;
-
- case OUTPUT_WATCOM_LBC:
- {
- const char* dot;
- char temp[512];
+ 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 );
- if ( !dll_name )
- {
- fprintf( stderr,
- "you must provide a DLL name with the -d option!\n" );
- exit( 4 );
- }
+ break;
- /* we must omit the .dll suffix from the library name */
- dot = strchr( dll_name, '.' );
- if ( dot )
- {
- int len = dot - dll_name;
+ 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" );
- if ( len > (int)( sizeof ( temp ) - 1 ) )
- len = sizeof ( temp ) - 1;
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, " _%s\n", the_names[nn].name );
- memcpy( temp, dll_name, len );
- temp[len] = 0;
+ break;
- dll_name = (const char*)temp;
- }
+ case OUTPUT_WATCOM_LBC:
+ {
+ const char* dot;
+ char temp[512];
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
- the_names[nn].name );
- }
- break;
- case OUTPUT_NETWARE_IMP:
+ if ( !dll_name )
{
- if ( dll_name )
- fprintf( out, " (%s)\n", dll_name );
- for ( nn = 0; nn < num_names - 1; nn++ )
- fprintf( out, " %s,\n", the_names[nn].name );
- fprintf( out, " %s\n", the_names[num_names - 1].name );
+ fprintf( stderr,
+ "you must provide a DLL name with the -d option!\n" );
+ exit( 4 );
}
- break;
- case OUTPUT_GNU_VERMAP:
+ /* we must omit the `.dll' suffix from the library name */
+ dot = strchr( dll_name, '.' );
+ if ( dot )
{
- fprintf( out, "{\n\tglobal:\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "\t\t%s;\n", the_names[nn].name );
- fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+ 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;
}
- break;
- default: /* LIST */
for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "%s\n", the_names[nn].name );
- }
-}
+ fprintf( out, "++_%s.%s.%s\n",
+ the_names[nn].name, dll_name, the_names[nn].name );
+ }
+
+ break;
+
+ case OUTPUT_NETWARE_IMP:
+ if ( dll_name )
+ fprintf( out, " (%s)\n", dll_name );
+
+ for ( nn = 0; nn < num_names - 1; nn++ )
+ fprintf( out, " %s,\n", the_names[nn].name );
+ fprintf( out, " %s\n", the_names[num_names - 1].name );
+
+ break;
+
+ case OUTPUT_GNU_VERMAP:
+ fprintf( out, "{\n\tglobal:\n" );
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, "\t\t%s;\n", the_names[nn].name );
+ fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+
+ break;
+
+ default: /* LIST */
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, "%s\n", the_names[nn].name );
+
+ break;
+ }
+}
/* states of the line parser */
@@ -226,89 +238,96 @@ typedef enum State_
} State;
+
static int
-read_header_file( FILE* file, int verbose )
+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 */
+ /* skip leading whitespace */
+ while ( *p && ( *p == ' ' || *p == '\\' ) )
p++;
- if ( *p == '\n' || *p == '\r' ) /* skip empty lines */
+ /* skip empty lines */
+ if ( *p == '\n' || *p == '\r' )
continue;
switch ( state )
{
- case STATE_START:
+ 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 == ')' )
{
- 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;
+ p++;
+ break;
}
- /* fall-through */
- case STATE_TYPE:
- {
- char* name = p;
+ p++;
+ }
- while ( isalnum(*p) || *p == '_' )
- p++;
+ state = STATE_TYPE;
+
+ /*
+ * Sometimes, the name is just after `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;
- if ( p > name )
- {
- if ( verbose )
- fprintf( stderr, ">>> %.*s\n", (int)(p - name), name );
- names_add( name, p );
- }
+ while ( isalnum( *p ) || *p == '_' )
+ p++;
- state = STATE_START;
+ if ( p > name )
+ {
+ if ( verbose )
+ fprintf( stderr, ">>> %.*s\n", (int)( p - name ), name );
+
+ names_add( name, p );
}
- break;
- default:
- ;
+ state = STATE_START;
+ }
+
+ break;
+
+ default:
+ ;
}
- NextLine:
+NextLine:
;
- }
+ } /* end of while loop */
return 0;
}
@@ -318,143 +337,154 @@ static void
usage( void )
{
static const char* const format =
- "%s %s: extract FreeType API names from header files\n\n"
- "this program is used to extract the list of public FreeType API\n"
- "functions. It receives the list of header files as argument and\n"
- "generates a sorted list of unique identifiers\n\n"
-
- "usage: %s header1 [options] [header2 ...]\n\n"
-
- "options: - : parse the content of stdin, ignore arguments\n"
- " -v : verbose mode, output sent to standard error\n"
- " -oFILE : write output to FILE instead of standard output\n"
- " -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
- " -w : output .DEF file for Visual C++ and Mingw\n"
- " -wB : output .DEF file for Borland C++\n"
- " -wW : output Watcom Linker Response File\n"
- " -wN : output NetWare Import File\n"
- " -wL : output version map for GNU or Solaris linker\n"
- "\n";
+ "%s %s: extract FreeType API names from header files\n"
+ "\n"
+ "This program extracts the list of public FreeType API functions.\n"
+ "It receives a list of header files as an argument and\n"
+ "generates a sorted list of unique identifiers in various formats.\n"
+ "\n"
+ "usage: %s header1 [options] [header2 ...]\n"
+ "\n"
+ "options: - parse the contents of stdin, ignore arguments\n"
+ " -v verbose mode, output sent to standard error\n"
+ " -oFILE write output to FILE instead of standard output\n"
+ " -dNAME indicate DLL file name, 'freetype.dll' by default\n"
+ " -w output .DEF file for Visual C++ and Mingw\n"
+ " -wB output .DEF file for Borland C++\n"
+ " -wW output Watcom Linker Response File\n"
+ " -wN output NetWare Import File\n"
+ " -wL output version map for GNU or Solaris linker\n"
+ "\n";
fprintf( stderr,
format,
PROGRAM_NAME,
PROGRAM_VERSION,
- PROGRAM_NAME
- );
- exit(1);
+ PROGRAM_NAME );
+
+ exit( 1 );
}
-int main( int argc, const char* const* argv )
+int
+main( int argc,
+ const char* const* argv )
{
- int from_stdin = 0;
- int verbose = 0;
- OutputFormat format = OUTPUT_LIST; /* the default */
- FILE* out = stdout;
+ 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 */
+ /* `-' 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 'v':
+ verbose = 1;
- case 'o':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
+ break;
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
+ case 'o':
+ if ( arg[2] == 0 )
+ {
+ if ( argc < 2 )
+ usage();
- out = fopen( arg, "wt" );
- if ( !out )
- {
- fprintf( stderr, "could not open '%s' for writing\n", argv[2] );
- exit(3);
- }
- break;
+ arg = argv[2];
+ argv++;
+ argc--;
+ }
+ else
+ arg += 2;
- case 'd':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
+ out = fopen( arg, "wt" );
+ if ( !out )
+ {
+ fprintf( stderr, "could not open '%s' for writing\n", arg );
+ exit( 3 );
+ }
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
+ break;
- library_name = arg;
- break;
+ case 'd':
+ if ( arg[2] == 0 )
+ {
+ if ( argc < 2 )
+ usage();
- case 'w':
- format = OUTPUT_WINDOWS_DEF;
- switch ( arg[2] )
- {
- case 'B':
- format = OUTPUT_BORLAND_DEF;
- break;
+ arg = argv[2];
+ argv++;
+ argc--;
+ }
+ else
+ arg += 2;
+
+ library_name = arg;
+
+ break;
- case 'W':
- format = OUTPUT_WATCOM_LBC;
- break;
+ case 'w':
+ format = OUTPUT_WINDOWS_DEF;
- case 'N':
- format = OUTPUT_NETWARE_IMP;
- break;
+ switch ( arg[2] )
+ {
+ case 'B':
+ format = OUTPUT_BORLAND_DEF;
+ break;
- case 'L':
- format = OUTPUT_GNU_VERMAP;
- break;
+ case 'W':
+ format = OUTPUT_WATCOM_LBC;
+ break;
- case 0:
- break;
+ case 'N':
+ format = OUTPUT_NETWARE_IMP;
+ break;
- default:
- usage();
- }
+ case 'L':
+ format = OUTPUT_GNU_VERMAP;
break;
case 0:
- from_stdin = 1;
break;
default:
usage();
+ }
+
+ break;
+
+ case 0:
+ from_stdin = 1;
+
+ break;
+
+ default:
+ usage();
}
argc--;
argv++;
- }
+
+ } /* end of while loop */
if ( from_stdin )
- {
read_header_file( stdin, verbose );
- }
else
{
for ( --argc, argv++; argc > 0; argc--, argv++ )
{
FILE* file = fopen( argv[0], "rb" );
+
if ( !file )
fprintf( stderr, "unable to open '%s'\n", argv[0] );
else
@@ -469,7 +499,7 @@ int main( int argc, const char* const* argv )
}
if ( num_names == 0 )
- panic( "could not find exported functions !!\n" );
+ panic( "could not find exported functions\n" );
names_sort();
names_dump( out, format, library_name );
@@ -479,3 +509,6 @@ int main( int argc, const char* const* argv )
return 0;
}
+
+
+/* END */
diff --git a/freetype/src/tools/docmaker/content.py b/freetype/src/tools/docmaker/content.py
deleted file mode 100644
index 198780ae..00000000
--- a/freetype/src/tools/docmaker/content.py
+++ /dev/null
@@ -1,672 +0,0 @@
-#
-# content.py
-#
-# Parse comment blocks to build content blocks (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This file contains routines to parse documentation comment blocks,
-# building more structured objects out of them.
-#
-
-
-from sources import *
-from utils import *
-
-import string, re
-
-
-#
-# Regular expressions to detect code sequences. `Code sequences' are simply
-# code fragments embedded in '{' and '}', as demonstrated in the following
-# example.
-#
-# {
-# x = y + z;
-# if ( zookoo == 2 )
-# {
-# foobar();
-# }
-# }
-#
-# Note that the indentation of the first opening brace and the last closing
-# brace must be exactly the same. The code sequence itself should have a
-# larger indentation than the surrounding braces.
-#
-re_code_start = re.compile( r"(\s*){\s*$" )
-re_code_end = re.compile( r"(\s*)}\s*$" )
-
-
-#
-# A regular expression to isolate identifiers from other text. Two syntax
-# forms are supported:
-#
-# <name>
-# <name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries; in the
-# index, `<id>' will be appended in parentheses.
-#
-# For example,
-#
-# stem_darkening[autofit]
-#
-# becomes `stem_darkening (autofit)' in the index.
-#
-re_identifier = re.compile( r"""
- ((?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- """, re.VERBOSE )
-
-
-#
-# We collect macro names ending in `_H' (group 1), as defined in
-# `freetype/config/ftheader.h'. While outputting the object data, we use
-# this info together with the object's file location (group 2) to emit the
-# appropriate header file macro and its associated file name before the
-# object itself.
-#
-# Example:
-#
-# #define FT_FREETYPE_H <freetype.h>
-#
-re_header_macro = re.compile( r'^#define\s{1,}(\w{1,}_H)\s{1,}<(.*)>' )
-
-
-################################################################
-##
-## DOC CODE CLASS
-##
-## The `DocCode' class is used to store source code lines.
-##
-## `self.lines' contains a set of source code lines that will be dumped as
-## HTML in a <PRE> tag.
-##
-## The object is filled line by line by the parser; it strips the leading
-## `margin' space from each input line before storing it in `self.lines'.
-##
-class DocCode:
-
- def __init__( self, margin, lines ):
- self.lines = []
- self.words = None
-
- # remove margin spaces
- for l in lines:
- if string.strip( l[:margin] ) == "":
- l = l[margin:]
- self.lines.append( l )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print( prefix + l )
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- for l in self.lines:
- result.append( " " * margin + l )
- return result
-
-
-
-################################################################
-##
-## DOC PARA CLASS
-##
-## `Normal' text paragraphs are stored in the `DocPara' class.
-##
-## `self.words' contains the list of words that make up the paragraph.
-##
-class DocPara:
-
- def __init__( self, lines ):
- self.lines = None
- self.words = []
- for l in lines:
- l = string.strip( l )
- self.words.extend( string.split( l ) )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print( prefix + l )
-
- def dump_lines( self, margin = 0, width = 60 ):
- cur = "" # current line
- col = 0 # current width
- result = []
-
- for word in self.words:
- ln = len( word )
- if col > 0:
- ln = ln + 1
-
- if col + ln > width:
- result.append( " " * margin + cur )
- cur = word
- col = len( word )
- else:
- if col > 0:
- cur = cur + " "
- cur = cur + word
- col = col + ln
-
- if col > 0:
- result.append( " " * margin + cur )
-
- return result
-
-
-################################################################
-##
-## DOC FIELD CLASS
-##
-## The `DocField' class stores a list containing either `DocPara' or
-## `DocCode' objects. Each DocField object also has an optional `name'
-## that is used when the object corresponds to a field or value definition.
-##
-class DocField:
-
- def __init__( self, name, lines ):
- self.name = name # can be `None' for normal paragraphs/sources
- self.items = [] # list of items
-
- mode_none = 0 # start parsing mode
- mode_code = 1 # parsing code sequences
- mode_para = 3 # parsing normal paragraph
-
- margin = -1 # current code sequence indentation
- cur_lines = []
-
- # analyze the markup lines to check whether they contain paragraphs,
- # code sequences, or fields definitions
- #
- start = 0
- mode = mode_none
-
- for l in lines:
- # are we parsing a code sequence?
- if mode == mode_code:
- m = re_code_end.match( l )
- if m and len( m.group( 1 ) ) <= margin:
- # that's it, we finished the code sequence
- code = DocCode( 0, cur_lines )
- self.items.append( code )
- margin = -1
- cur_lines = []
- mode = mode_none
- else:
- # otherwise continue the code sequence
- cur_lines.append( l[margin:] )
- else:
- # start of code sequence?
- m = re_code_start.match( l )
- if m:
- # save current lines
- if cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
-
- # switch to code extraction mode
- margin = len( m.group( 1 ) )
- mode = mode_code
- else:
- if not string.split( l ) and cur_lines:
- # if the line is empty, we end the current paragraph,
- # if any
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
- else:
- # otherwise, simply add the line to the current
- # paragraph
- cur_lines.append( l )
-
- if mode == mode_code:
- # unexpected end of code sequence
- code = DocCode( margin, cur_lines )
- self.items.append( code )
- elif cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
-
- def dump( self, prefix = "" ):
- if self.field:
- print( prefix + self.field + " ::" )
- prefix = prefix + "----"
-
- first = 1
- for p in self.items:
- if not first:
- print( "" )
- p.dump( prefix )
- first = 0
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- nl = None
-
- for p in self.items:
- if nl:
- result.append( "" )
-
- result.extend( p.dump_lines( margin, width ) )
- nl = 1
-
- return result
-
-
-#
-# A regular expression to detect field definitions.
-#
-# Examples:
-#
-# foo ::
-# foo.bar ::
-#
-re_field = re.compile( r"""
- \s*
- (
- \w*
- |
- \w (\w | \.)* \w
- )
- \s* ::
- """, re.VERBOSE )
-
-
-################################################################
-##
-## DOC MARKUP CLASS
-##
-class DocMarkup:
-
- def __init__( self, tag, lines ):
- self.tag = string.lower( tag )
- self.fields = []
-
- cur_lines = []
- field = None
- mode = 0
-
- for l in lines:
- m = re_field.match( l )
- if m:
- # We detected the start of a new field definition.
-
- # first, save the current one
- if cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
- cur_lines = []
- field = None
-
- field = m.group( 1 ) # record field name
- ln = len( m.group( 0 ) )
- l = " " * ln + l[ln:]
- cur_lines = [l]
- else:
- cur_lines.append( l )
-
- if field or cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
-
- def get_name( self ):
- try:
- return self.fields[0].items[0].words[0]
- except:
- return None
-
- def dump( self, margin ):
- print( " " * margin + "<" + self.tag + ">" )
- for f in self.fields:
- f.dump( " " )
- print( " " * margin + "</" + self.tag + ">" )
-
-
-################################################################
-##
-## DOC CHAPTER CLASS
-##
-class DocChapter:
-
- def __init__( self, block ):
- self.block = block
- self.sections = []
- if block:
- self.name = block.name
- self.title = block.get_markup_words( "title" )
- self.order = block.get_markup_words( "sections" )
- else:
- self.name = "Other"
- self.title = string.split( "Miscellaneous" )
- self.order = []
-
-
-################################################################
-##
-## DOC SECTION CLASS
-##
-class DocSection:
-
- def __init__( self, name = "Other" ):
- self.name = name
- self.blocks = {}
- self.block_names = [] # ordered block names in section
- self.defs = []
- self.abstract = ""
- self.description = ""
- self.order = []
- self.title = "ERROR"
- self.chapter = None
-
- def add_def( self, block ):
- self.defs.append( block )
-
- def add_block( self, block ):
- self.block_names.append( block.name )
- self.blocks[block.name] = block
-
- def process( self ):
- # look up one block that contains a valid section description
- for block in self.defs:
- title = block.get_markup_text( "title" )
- if title:
- self.title = title
- self.abstract = block.get_markup_words( "abstract" )
- self.description = block.get_markup_items( "description" )
- self.order = block.get_markup_words_all( "order" )
- return
-
- def reorder( self ):
- self.block_names = sort_order_list( self.block_names, self.order )
-
-
-################################################################
-##
-## CONTENT PROCESSOR CLASS
-##
-class ContentProcessor:
-
- def __init__( self ):
- """Initialize a block content processor."""
- self.reset()
-
- self.sections = {} # dictionary of documentation sections
- self.section = None # current documentation section
-
- self.chapters = [] # list of chapters
-
- self.headers = {} # dictionary of header macros
-
- def set_section( self, section_name ):
- """Set current section during parsing."""
- if not section_name in self.sections:
- section = DocSection( section_name )
- self.sections[section_name] = section
- self.section = section
- else:
- self.section = self.sections[section_name]
-
- def add_chapter( self, block ):
- chapter = DocChapter( block )
- self.chapters.append( chapter )
-
- def reset( self ):
- """Reset the content processor for a new block."""
- self.markups = []
- self.markup = None
- self.markup_lines = []
-
- def add_markup( self ):
- """Add a new markup section."""
- if self.markup and self.markup_lines:
-
- # get rid of last line of markup if it's empty
- marks = self.markup_lines
- if len( marks ) > 0 and not string.strip( marks[-1] ):
- self.markup_lines = marks[:-1]
-
- m = DocMarkup( self.markup, self.markup_lines )
-
- self.markups.append( m )
-
- self.markup = None
- self.markup_lines = []
-
- def process_content( self, content ):
- """Process a block content and return a list of DocMarkup objects
- corresponding to it."""
- markup = None
- markup_lines = []
- first = 1
-
- margin = -1
- in_code = 0
-
- for line in content:
- if in_code:
- m = re_code_end.match( line )
- if m and len( m.group( 1 ) ) <= margin:
- in_code = 0
- margin = -1
- else:
- m = re_code_start.match( line )
- if m:
- in_code = 1
- margin = len( m.group( 1 ) )
-
- found = None
-
- if not in_code:
- for t in re_markup_tags:
- m = t.match( line )
- if m:
- found = string.lower( m.group( 1 ) )
- prefix = len( m.group( 0 ) )
- # remove markup from line
- line = " " * prefix + line[prefix:]
- break
-
- # is it the start of a new markup section ?
- if found:
- first = 0
- self.add_markup() # add current markup content
- self.markup = found
- if len( string.strip( line ) ) > 0:
- self.markup_lines.append( line )
- elif first == 0:
- self.markup_lines.append( line )
-
- self.add_markup()
-
- return self.markups
-
- def parse_sources( self, source_processor ):
- blocks = source_processor.blocks
- count = len( blocks )
-
- for n in range( count ):
- source = blocks[n]
- if source.content:
- # this is a documentation comment, we need to catch
- # all following normal blocks in the "follow" list
- #
- follow = []
- m = n + 1
- while m < count and not blocks[m].content:
- follow.append( blocks[m] )
- m = m + 1
-
- doc_block = DocBlock( source, follow, self )
-
- def finish( self ):
- # process all sections to extract their abstract, description
- # and ordered list of items
- #
- for sec in self.sections.values():
- sec.process()
-
- # process chapters to check that all sections are correctly
- # listed there
- for chap in self.chapters:
- for sec in chap.order:
- if sec in self.sections:
- section = self.sections[sec]
- section.chapter = chap
- section.reorder()
- chap.sections.append( section )
- else:
- sys.stderr.write( "WARNING: chapter '" + \
- chap.name + "' in " + chap.block.location() + \
- " lists unknown section '" + sec + "'\n" )
-
- # check that all sections are in a chapter
- #
- others = []
- for sec in self.sections.values():
- if not sec.chapter:
- sec.reorder()
- others.append( sec )
-
- # create a new special chapter for all remaining sections
- # when necessary
- #
- if others:
- chap = DocChapter( None )
- chap.sections = others
- self.chapters.append( chap )
-
-
-################################################################
-##
-## DOC BLOCK CLASS
-##
-class DocBlock:
-
- def __init__( self, source, follow, processor ):
- processor.reset()
-
- self.source = source
- self.code = []
- self.type = "ERRTYPE"
- self.name = "ERRNAME"
- self.section = processor.section
- self.markups = processor.process_content( source.content )
-
- # compute block type from first markup tag
- try:
- self.type = self.markups[0].tag
- except:
- pass
-
- # compute block name from first markup paragraph
- try:
- markup = self.markups[0]
- para = markup.fields[0].items[0]
- name = para.words[0]
- m = re_identifier.match( name )
- if m:
- name = m.group( 1 )
- self.name = name
- except:
- pass
-
- if self.type == "section":
- # detect new section starts
- processor.set_section( self.name )
- processor.section.add_def( self )
- elif self.type == "chapter":
- # detect new chapter
- processor.add_chapter( self )
- else:
- processor.section.add_block( self )
-
- # now, compute the source lines relevant to this documentation
- # block. We keep normal comments in for obvious reasons (??)
- source = []
- for b in follow:
- if b.format:
- break
- for l in b.lines:
- # collect header macro definitions
- m = re_header_macro.match( l )
- if m:
- processor.headers[m.group( 2 )] = m.group( 1 );
-
- # we use "/* */" as a separator
- if re_source_sep.match( l ):
- break
- source.append( l )
-
- # now strip the leading and trailing empty lines from the sources
- start = 0
- end = len( source ) - 1
-
- while start < end and not string.strip( source[start] ):
- start = start + 1
-
- while start < end and not string.strip( source[end] ):
- end = end - 1
-
- if start == end and not string.strip( source[start] ):
- self.code = []
- else:
- self.code = source[start:end + 1]
-
- def location( self ):
- return self.source.location()
-
- def get_markup( self, tag_name ):
- """Return the DocMarkup corresponding to a given tag in a block."""
- for m in self.markups:
- if m.tag == string.lower( tag_name ):
- return m
- return None
-
- def get_markup_words( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items[0].words
- except:
- return []
-
- def get_markup_words_all( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- words = []
- for item in m.fields[0].items:
- # We honour empty lines in an `<Order>' section element by
- # adding the sentinel `/empty/'. The formatter should then
- # convert it to an appropriate representation in the
- # `section_enter' function.
- words += item.words
- words.append( "/empty/" )
- return words
- except:
- return []
-
- def get_markup_text( self, tag_name ):
- result = self.get_markup_words( tag_name )
- return string.join( result )
-
- def get_markup_items( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items
- except:
- return None
-
-# eof
diff --git a/freetype/src/tools/docmaker/docbeauty.py b/freetype/src/tools/docmaker/docbeauty.py
deleted file mode 100644
index 0b021fa6..00000000
--- a/freetype/src/tools/docmaker/docbeauty.py
+++ /dev/null
@@ -1,111 +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 sys, os, 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/freetype/src/tools/docmaker/docmaker.py b/freetype/src/tools/docmaker/docmaker.py
deleted file mode 100644
index eb49afb0..00000000
--- a/freetype/src/tools/docmaker/docmaker.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-#
-# docmaker.py
-#
-# Convert source code markup to HTML documentation.
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This program is a re-write of the original DocMaker tool used to generate
-# the API Reference of the FreeType font rendering engine by converting
-# in-source comments into structured HTML.
-#
-# This new version is capable of outputting XML data as well as accepting
-# more liberal formatting options. It also uses regular expression matching
-# and substitution to speed up operation significantly.
-#
-
-from sources import *
-from content import *
-from utils import *
-from formatter import *
-from tohtml import *
-
-import utils
-
-import sys, 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/freetype/src/tools/docmaker/formatter.py b/freetype/src/tools/docmaker/formatter.py
deleted file mode 100644
index 2708fd40..00000000
--- a/freetype/src/tools/docmaker/formatter.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# formatter.py
-#
-# Convert parsed content blocks to a structured document (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This is the base Formatter class. Its purpose is to convert a content
-# processor's data into specific documents (i.e., table of contents, global
-# index, and individual API reference indices).
-#
-# You need to sub-class it to output anything sensible. For example, the
-# file `tohtml.py' contains the definition of the `HtmlFormatter' sub-class
-# to output HTML.
-#
-
-
-from sources import *
-from content import *
-from utils import *
-
-
-################################################################
-##
-## FORMATTER CLASS
-##
-class Formatter:
-
- def __init__( self, processor ):
- self.processor = processor
- self.identifiers = {}
- self.chapters = processor.chapters
- self.sections = processor.sections.values()
- self.block_index = []
-
- # store all blocks in a dictionary
- self.blocks = []
- for section in self.sections:
- for block in section.blocks.values():
- self.add_identifier( block.name, block )
-
- # add enumeration values to the index, since this is useful
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- self.add_identifier( field.name, block )
-
- self.block_index = self.identifiers.keys()
- self.block_index.sort( key = index_key )
-
- # also add section names to dictionary (without making them appear
- # in the index)
- for section in self.sections:
- self.add_identifier( section.name, section )
-
- def add_identifier( self, name, block ):
- if name in self.identifiers:
- # duplicate name!
- sys.stderr.write( "WARNING: duplicate definition for"
- + " '" + name + "' "
- + "in " + block.location() + ", "
- + "previous definition in "
- + self.identifiers[name].location()
- + "\n" )
- else:
- self.identifiers[name] = block
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- pass
-
- def toc_chapter_enter( self, chapter ):
- pass
-
- def toc_section_enter( self, section ):
- pass
-
- def toc_section_exit( self, section ):
- pass
-
- def toc_chapter_exit( self, chapter ):
- pass
-
- def toc_index( self, index_filename ):
- pass
-
- def toc_exit( self ):
- pass
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- output = None
- if toc_filename:
- output = open_output( toc_filename )
-
- self.toc_enter()
-
- for chap in self.processor.chapters:
-
- self.toc_chapter_enter( chap )
-
- for section in chap.sections:
- self.toc_section_enter( section )
- self.toc_section_exit( section )
-
- self.toc_chapter_exit( chap )
-
- self.toc_index( index_filename )
-
- self.toc_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- pass
-
- def index_name_enter( self, name ):
- pass
-
- def index_name_exit( self, name ):
- pass
-
- def index_exit( self ):
- pass
-
- def index_dump( self, index_filename = None ):
- output = None
- if index_filename:
- output = open_output( index_filename )
-
- self.index_enter()
-
- for name in self.block_index:
- self.index_name_enter( name )
- self.index_name_exit( name )
-
- self.index_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting a section
- #
- def section_enter( self, section ):
- pass
-
- def block_enter( self, block ):
- pass
-
- def markup_enter( self, markup, block = None ):
- pass
-
- def field_enter( self, field, markup = None, block = None ):
- pass
-
- def field_exit( self, field, markup = None, block = None ):
- pass
-
- def markup_exit( self, markup, block = None ):
- pass
-
- def block_exit( self, block ):
- pass
-
- def section_exit( self, section ):
- pass
-
- def section_dump( self, section, section_filename = None ):
- output = None
- if section_filename:
- output = open_output( section_filename )
-
- self.section_enter( section )
-
- for name in section.block_names:
- skip_entry = 0
- try:
- block = self.identifiers[name]
- # `block_names' can contain field names also,
- # which we filter out
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name == name:
- skip_entry = 1
- except:
- skip_entry = 1 # this happens e.g. for `/empty/' entries
-
- if skip_entry:
- continue
-
- self.block_enter( block )
-
- for markup in block.markups[1:]: # always ignore first markup!
- self.markup_enter( markup, block )
-
- for field in markup.fields:
- self.field_enter( field, markup, block )
- self.field_exit( field, markup, block )
-
- self.markup_exit( markup, block )
-
- self.block_exit( block )
-
- self.section_exit( section )
-
- if output:
- close_output( output )
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section )
-
-# eof
diff --git a/freetype/src/tools/docmaker/sources.py b/freetype/src/tools/docmaker/sources.py
deleted file mode 100644
index e3b95e0f..00000000
--- a/freetype/src/tools/docmaker/sources.py
+++ /dev/null
@@ -1,410 +0,0 @@
-#
-# sources.py
-#
-# Convert source code comments to multi-line blocks (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This library file contains definitions of classes needed to decompose C
-# source code files into a series of multi-line `blocks'. There are two
-# kinds of blocks.
-#
-# - Normal blocks, which contain source code or ordinary comments.
-#
-# - Documentation blocks, which have restricted formatting, and whose text
-# always start with a documentation markup tag like `<Function>',
-# `<Type>', etc.
-#
-# The routines to process the content of documentation blocks are contained
-# in file `content.py'; the classes and methods found here only deal with
-# text parsing and basic documentation block extraction.
-#
-
-
-import fileinput, re, string
-
-
-################################################################
-##
-## SOURCE BLOCK FORMAT CLASS
-##
-## A simple class containing compiled regular expressions to detect
-## potential documentation format block comments within C source code.
-##
-## The `column' pattern must contain a group to `unbox' the content of
-## documentation comment blocks.
-##
-## Later on, paragraphs are converted to long lines, which simplifies the
-## regular expressions that act upon the text.
-##
-class SourceBlockFormat:
-
- def __init__( self, id, start, column, end ):
- """Create a block pattern, used to recognize special documentation
- blocks."""
- self.id = id
- self.start = re.compile( start, re.VERBOSE )
- self.column = re.compile( column, re.VERBOSE )
- self.end = re.compile( end, re.VERBOSE )
-
-
-#
-# Format 1 documentation comment blocks.
-#
-# /************************************/ (at least 2 asterisks)
-# /* */
-# /* */
-# /* */
-# /************************************/ (at least 2 asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,}/ # followed by '/' and at least two asterisks then '/'
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- /\*{1} # followed by '/' and precisely one asterisk
- ([^*].*) # followed by anything (group 1)
- \*{1}/ # followed by one asterisk and a '/'
- \s*$ # probably followed by whitespace
-'''
-
-re_source_block_format1 = SourceBlockFormat( 1, start, column, start )
-
-
-#
-# Format 2 documentation comment blocks.
-#
-# /************************************ (at least 2 asterisks)
-# *
-# * (1 asterisk)
-# *
-# */ (1 or more asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,} # followed by '/' and at least two asterisks
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- \*{1}(?![*/]) # followed by precisely one asterisk not followed by `/'
- (.*) # then anything (group1)
-'''
-
-end = r'''
- \s* # any number of whitespace
- \*+/ # followed by at least one asterisk, then '/'
-'''
-
-re_source_block_format2 = SourceBlockFormat( 2, start, column, end )
-
-
-#
-# The list of supported documentation block formats. We could add new ones
-# quite easily.
-#
-re_source_block_formats = [re_source_block_format1, re_source_block_format2]
-
-
-#
-# The following regular expressions correspond to markup tags within the
-# documentation comment blocks. They are equivalent despite their different
-# syntax.
-#
-# A markup tag consists of letters or character `-', to be found in group 1.
-#
-# Notice that a markup tag _must_ begin a new paragraph.
-#
-re_markup_tag1 = re.compile( r'''\s*<((?:\w|-)*)>''' ) # <xxxx> format
-re_markup_tag2 = re.compile( r'''\s*@((?:\w|-)*):''' ) # @xxxx: format
-
-#
-# The list of supported markup tags. We could add new ones quite easily.
-#
-re_markup_tags = [re_markup_tag1, re_markup_tag2]
-
-
-#
-# A regular expression to detect a cross reference, after markup tags have
-# been stripped off.
-#
-# Two syntax forms are supported:
-#
-# @<name>
-# @<name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries.
-#
-# Example: @foo[bar]
-#
-re_crossref = re.compile( r"""
- @
- (?P<name>(?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- (?P<rest>.*)
- """, re.VERBOSE )
-
-#
-# Two regular expressions to detect italic and bold markup, respectively.
-# Group 1 is the markup, group 2 the rest of the line.
-#
-# Note that the markup is limited to words consisting of letters, digits,
-# the characters `_' and `-', or an apostrophe (but not as the first
-# character).
-#
-re_italic = re.compile( r"_((?:\w|-)(?:\w|'|-)*)_(.*)" ) # _italic_
-re_bold = re.compile( r"\*((?:\w|-)(?:\w|'|-)*)\*(.*)" ) # *bold*
-
-#
-# This regular expression code to identify an URL has been taken from
-#
-# https://mail.python.org/pipermail/tutor/2002-September/017228.html
-#
-# (with slight modifications).
-#
-urls = r'(?:https?|telnet|gopher|file|wais|ftp)'
-ltrs = r'\w'
-gunk = r'/#~:.?+=&%@!\-'
-punc = r'.:?\-'
-any = "%(ltrs)s%(gunk)s%(punc)s" % { 'ltrs' : ltrs,
- 'gunk' : gunk,
- 'punc' : punc }
-url = r"""
- (
- \b # start at word boundary
- %(urls)s : # need resource and a colon
- [%(any)s] +? # followed by one or more of any valid
- # character, but be conservative and
- # take only what you need to...
- (?= # [look-ahead non-consumptive assertion]
- [%(punc)s]* # either 0 or more punctuation
- (?: # [non-grouping parentheses]
- [^%(any)s] | $ # followed by a non-url char
- # or end of the string
- )
- )
- )
- """ % {'urls' : urls,
- 'any' : any,
- 'punc' : punc }
-
-re_url = re.compile( url, re.VERBOSE | re.MULTILINE )
-
-#
-# A regular expression that stops collection of comments for the current
-# block.
-#
-re_source_sep = re.compile( r'\s*/\*\s*\*/' ) # /* */
-
-#
-# A regular expression to find possible C identifiers while outputting
-# source code verbatim, covering things like `*foo' or `(bar'. Group 1 is
-# the prefix, group 2 the identifier -- since we scan lines from left to
-# right, sequentially splitting the source code into prefix and identifier
-# is fully sufficient for our purposes.
-#
-re_source_crossref = re.compile( r'(\W*)(\w*)' )
-
-#
-# A regular expression that matches a list of reserved C source keywords.
-#
-re_source_keywords = re.compile( '''\\b ( typedef |
- struct |
- enum |
- union |
- const |
- char |
- int |
- short |
- long |
- void |
- signed |
- unsigned |
- \#include |
- \#define |
- \#undef |
- \#if |
- \#ifdef |
- \#ifndef |
- \#else |
- \#endif ) \\b''', re.VERBOSE )
-
-
-################################################################
-##
-## SOURCE BLOCK CLASS
-##
-## There are two important fields in a `SourceBlock' object.
-##
-## self.lines
-## A list of text lines for the corresponding block.
-##
-## self.content
-## For documentation comment blocks only, this is the block content
-## that has been `unboxed' from its decoration. This is `None' for all
-## other blocks (i.e., sources or ordinary comments with no starting
-## markup tag)
-##
-class SourceBlock:
-
- def __init__( self, processor, filename, lineno, lines ):
- self.processor = processor
- self.filename = filename
- self.lineno = lineno
- self.lines = lines[:]
- self.format = processor.format
- self.content = []
-
- if self.format == None:
- return
-
- words = []
-
- # extract comment lines
- lines = []
-
- for line0 in self.lines:
- m = self.format.column.match( line0 )
- if m:
- lines.append( m.group( 1 ) )
-
- # now, look for a markup tag
- for l in lines:
- l = string.strip( l )
- if len( l ) > 0:
- for tag in re_markup_tags:
- if tag.match( l ):
- self.content = lines
- return
-
- def location( self ):
- return "(" + self.filename + ":" + repr( self.lineno ) + ")"
-
- # debugging only -- not used in normal operations
- def dump( self ):
- if self.content:
- print( "{{{content start---" )
- for l in self.content:
- print( l )
- print( "---content end}}}" )
- return
-
- fmt = ""
- if self.format:
- fmt = repr( self.format.id ) + " "
-
- for line in self.lines:
- print( line )
-
-
-################################################################
-##
-## SOURCE PROCESSOR CLASS
-##
-## The `SourceProcessor' is in charge of reading a C source file and
-## decomposing it into a series of different `SourceBlock' objects.
-##
-## A SourceBlock object consists of the following data.
-##
-## - A documentation comment block using one of the layouts above. Its
-## exact format will be discussed later.
-##
-## - Normal sources lines, including comments.
-##
-##
-class SourceProcessor:
-
- def __init__( self ):
- """Initialize a source processor."""
- self.blocks = []
- self.filename = None
- self.format = None
- self.lines = []
-
- def reset( self ):
- """Reset a block processor and clean up all its blocks."""
- self.blocks = []
- self.format = None
-
- def parse_file( self, filename ):
- """Parse a C source file and add its blocks to the processor's
- list."""
- self.reset()
-
- self.filename = filename
-
- fileinput.close()
- self.format = None
- self.lineno = 0
- self.lines = []
-
- for line in fileinput.input( filename ):
- # strip trailing newlines, important on Windows machines!
- if line[-1] == '\012':
- line = line[0:-1]
-
- if self.format == None:
- self.process_normal_line( line )
- else:
- if self.format.end.match( line ):
- # A normal block end. Add it to `lines' and create a
- # new block
- self.lines.append( line )
- self.add_block_lines()
- elif self.format.column.match( line ):
- # A normal column line. Add it to `lines'.
- self.lines.append( line )
- else:
- # An unexpected block end. Create a new block, but
- # don't process the line.
- self.add_block_lines()
-
- # we need to process the line again
- self.process_normal_line( line )
-
- # record the last lines
- self.add_block_lines()
-
- def process_normal_line( self, line ):
- """Process a normal line and check whether it is the start of a new
- block."""
- for f in re_source_block_formats:
- if f.start.match( line ):
- self.add_block_lines()
- self.format = f
- self.lineno = fileinput.filelineno()
-
- self.lines.append( line )
-
- def add_block_lines( self ):
- """Add the current accumulated lines and create a new block."""
- if self.lines != []:
- block = SourceBlock( self,
- self.filename,
- self.lineno,
- self.lines )
-
- self.blocks.append( block )
- self.format = None
- self.lines = []
-
- # debugging only, not used in normal operations
- def dump( self ):
- """Print all blocks in a processor."""
- for b in self.blocks:
- b.dump()
-
-# eof
diff --git a/freetype/src/tools/docmaker/tohtml.py b/freetype/src/tools/docmaker/tohtml.py
deleted file mode 100644
index 9f318a2a..00000000
--- a/freetype/src/tools/docmaker/tohtml.py
+++ /dev/null
@@ -1,725 +0,0 @@
-#
-# tohtml.py
-#
-# A sub-class container of the `Formatter' class to produce HTML.
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-# The parent class is contained in file `formatter.py'.
-
-
-from sources import *
-from content import *
-from formatter import *
-
-import time
-
-
-# The following strings define the HTML header used by all generated pages.
-html_header_1 = """\
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>\
-"""
-
-html_header_2 = """\
- API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-"""
-
-html_header_3l = """
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-
-html_header_3r = """
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-
-html_header_4 = """\
-">Index</a>]</td><td class="right">[<a href="\
-"""
-
-html_header_5t = """\
-">TOC</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_5i = """\
-">Index</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_6 = """\
- API Reference</h1>
-"""
-
-
-# The HTML footer used by all generated pages.
-html_footer = """\
-</body>
-</html>\
-"""
-
-# The header and footer used for each section.
-section_title_header1 = '<h1 id="'
-section_title_header2 = '">'
-section_title_footer = "</h1>"
-
-# The header and footer used for code segments.
-code_header = '<pre class="colored">'
-code_footer = '</pre>'
-
-# Paragraph header and footer.
-para_header = "<p>"
-para_footer = "</p>"
-
-# Block header and footer.
-block_header = '<div class="section">'
-block_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-block_footer_middle = """\
-">Index</a>]</td>\
-<td class="middle">[<a href="#">Top</a>]</td>\
-<td class="right">[<a href="\
-"""
-block_footer_end = """\
-">TOC</a>]</td></tr></table></div>
-"""
-
-# Description header/footer.
-description_header = ""
-description_footer = ""
-
-# Marker header/inter/footer combination.
-marker_header = "<h4>"
-marker_inter = "</h4>"
-marker_footer = ""
-
-# Header location header/footer.
-header_location_header = "<p>"
-header_location_footer = "</p>"
-
-# Source code extracts header/footer.
-source_header = "<pre>"
-source_footer = "</pre>"
-
-# Chapter header/inter/footer.
-chapter_header = """\
-<div class="section">
-<h2>\
-"""
-chapter_inter = '</h2>'
-chapter_footer = '</div>'
-
-# Index footer.
-index_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-index_footer_end = """\
-">TOC</a>]</td></tr></table>
-"""
-
-# TOC footer.
-toc_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-toc_footer_end = """\
-">Index</a>]</td></tr></table>
-"""
-
-
-# Source language keyword coloration and styling.
-keyword_prefix = '<span class="keyword">'
-keyword_suffix = '</span>'
-
-section_synopsis_header = '<h2>Synopsis</h2>'
-section_synopsis_footer = ''
-
-
-# Translate a single line of source to HTML. This converts `<', `>', and
-# `&' into `&lt;',`&gt;', and `&amp;'.
-#
-def html_quote( line ):
- result = string.replace( line, "&", "&amp;" )
- result = string.replace( result, "<", "&lt;" )
- result = string.replace( result, ">", "&gt;" )
- return result
-
-
-################################################################
-##
-## HTML FORMATTER CLASS
-##
-class HtmlFormatter( Formatter ):
-
- def __init__( self, processor, project_title, file_prefix ):
- Formatter.__init__( self, processor )
-
- global html_header_1
- global html_header_2
- global html_header_3l, html_header_3r
- global html_header_4
- global html_header_5t, html_header_5i
- global html_header_6
- global html_footer
-
- if file_prefix:
- file_prefix = file_prefix + "-"
- else:
- file_prefix = ""
-
- self.headers = processor.headers
- self.project_title = project_title
- self.file_prefix = file_prefix
- self.html_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_4 + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_index_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3r + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_toc_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_5i + project_title
- + html_header_6 )
- self.html_footer = (
- '<div class="timestamp">generated on '
- + time.asctime( time.localtime( time.time() ) )
- + "</div>" + html_footer )
-
- self.columns = 3
-
- def make_section_url( self, section ):
- return self.file_prefix + section.name + ".html"
-
- def make_block_url( self, block, name = None ):
- if name == None:
- name = block.name
-
- try:
- section_url = self.make_section_url( block.section )
- except:
- # we already have a section
- section_url = self.make_section_url( block )
-
- return section_url + "#" + name
-
- def make_html_word( self, word ):
- """Analyze a simple word to detect cross-references and markup."""
- # handle cross-references
- m = re_crossref.match( word )
- if m:
- try:
- name = m.group( 'name' )
- rest = m.group( 'rest' )
- block = self.identifiers[name]
- url = self.make_block_url( block )
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
-
- try:
- # for sections, display title
- url = ( '&lsquo;<a href="' + url + '">'
- + block.title + '</a>&rsquo;'
- + rest )
- except:
- url = ( '<a href="' + url + '">'
- + name + '</a>'
- + rest )
-
- return url
- except:
- # we detected a cross-reference to an unknown item
- sys.stderr.write( "WARNING: undefined cross reference"
- + " '" + name + "'.\n" )
- return '?' + name + '?' + rest
-
- # handle markup for italic and bold
- m = re_italic.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<i>' + name + '</i>' + rest
-
- m = re_bold.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<b>' + name + '</b>' + rest
-
- return html_quote( word )
-
- def make_html_para( self, words ):
- """Convert words of a paragraph into tagged HTML text. Also handle
- cross references."""
- line = ""
- if words:
- line = self.make_html_word( words[0] )
- for word in words[1:]:
- line = line + " " + self.make_html_word( word )
- # handle hyperlinks
- line = re_url.sub( r'<a href="\1">\1</a>', line )
- # convert `...' quotations into real left and right single quotes
- line = re.sub( r"(^|\W)`(.*?)'(\W|$)",
- r'\1&lsquo;\2&rsquo;\3',
- line )
- # convert tilde into non-breakable space
- line = string.replace( line, "~", "&nbsp;" )
-
- return para_header + line + para_footer
-
- def make_html_code( self, lines ):
- """Convert a code sequence to HTML."""
- line = code_header + '\n'
- for l in lines:
- line = line + html_quote( l ).rstrip() + '\n'
-
- return line + code_footer
-
- def make_html_items( self, items ):
- """Convert a field's content into HTML."""
- lines = []
- for item in items:
- if item.lines:
- lines.append( self.make_html_code( item.lines ) )
- else:
- lines.append( self.make_html_para( item.words ) )
-
- return string.join( lines, '\n' )
-
- def print_html_items( self, items ):
- print( self.make_html_items( items ) )
-
- def print_html_field( self, field ):
- if field.name:
- print( '<table><tr valign="top"><td><b>'
- + field.name
- + "</b></td><td>" )
-
- print( self.make_html_items( field.items ) )
-
- if field.name:
- print( "</td></tr></table>" )
-
- def html_source_quote( self, line, block_name = None ):
- result = ""
- while line:
- m = re_source_crossref.match( line )
- if m:
- name = m.group( 2 )
- prefix = html_quote( m.group( 1 ) )
- length = len( m.group( 0 ) )
-
- if name == block_name:
- # this is the current block name, if any
- result = result + prefix + '<b>' + name + '</b>'
- elif re_source_keywords.match( name ):
- # this is a C keyword
- result = ( result + prefix
- + keyword_prefix + name + keyword_suffix )
- elif name in self.identifiers:
- # this is a known identifier
- block = self.identifiers[name]
- id = block.name
-
- # link to a field ID if possible
- try:
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name:
- id = name
-
- result = ( result + prefix
- + '<a href="'
- + self.make_block_url( block, id )
- + '">' + name + '</a>' )
- except:
- # sections don't have `markups'; however, we don't
- # want references to sections here anyway
- result = result + html_quote( line[:length] )
-
- else:
- result = result + html_quote( line[:length] )
-
- line = line[length:]
- else:
- result = result + html_quote( line )
- line = []
-
- return result
-
- def print_html_field_list( self, fields ):
- print( '<table class="fields">' )
- for field in fields:
- print( '<tr><td class="val" id="' + field.name + '">'
- + field.name
- + '</td><td class="desc">' )
- self.print_html_items( field.items )
- print( "</td></tr>" )
- print( "</table>" )
-
- def print_html_markup( self, markup ):
- table_fields = []
- for field in markup.fields:
- if field.name:
- # We begin a new series of field or value definitions. We
- # record them in the `table_fields' list before outputting
- # all of them as a single table.
- table_fields.append( field )
- else:
- if table_fields:
- self.print_html_field_list( table_fields )
- table_fields = []
-
- self.print_html_items( field.items )
-
- if table_fields:
- self.print_html_field_list( table_fields )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- print( self.html_index_header )
- self.index_items = {}
-
- def index_name_enter( self, name ):
- block = self.identifiers[name]
- url = self.make_block_url( block )
- self.index_items[name] = url
-
- def index_exit( self ):
- # `block_index' already contains the sorted list of index names
- count = len( self.block_index )
- rows = ( count + self.columns - 1 ) // self.columns
-
- print( '<table class="index">' )
- for r in range( rows ):
- line = "<tr>"
- for c in range( self.columns ):
- i = r + c * rows
- if i < count:
- bname = self.block_index[r + c * rows]
- url = self.index_items[bname]
- # display `foo[bar]' as `foo (bar)'
- bname = string.replace( bname, "[", " (" )
- bname = string.replace( bname, "]", ")" )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<td><a href="' + url + '">'
- + bname + '</a></td>' )
- else:
- line = line + '<td></td>'
- line = line + "</tr>"
- print( line )
-
- print( "</table>" )
-
- print( index_footer_start
- + self.file_prefix + "toc.html"
- + index_footer_end )
-
- print( self.html_footer )
-
- self.index_items = {}
-
- def index_dump( self, index_filename = None ):
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.index_dump( self, index_filename )
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- print( self.html_toc_header )
- print( "<h1>Table of Contents</h1>" )
-
- def toc_chapter_enter( self, chapter ):
- print( chapter_header + string.join( chapter.title ) + chapter_inter )
- print( '<table class="toc">' )
-
- def toc_section_enter( self, section ):
- print( '<tr><td class="link">'
- + '<a href="' + self.make_section_url( section ) + '">'
- + section.title + '</a></td><td class="desc">' )
- print( self.make_html_para( section.abstract ) )
-
- def toc_section_exit( self, section ):
- print( "</td></tr>" )
-
- def toc_chapter_exit( self, chapter ):
- print( "</table>" )
- print( chapter_footer )
-
- def toc_index( self, index_filename ):
- print( chapter_header
- + '<a href="' + index_filename + '">Global Index</a>'
- + chapter_inter + chapter_footer )
-
- def toc_exit( self ):
- print( toc_footer_start
- + self.file_prefix + "index.html"
- + toc_footer_end )
-
- print( self.html_footer )
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- if toc_filename == None:
- toc_filename = self.file_prefix + "toc.html"
-
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.toc_dump( self, toc_filename, index_filename )
-
- #
- # formatting sections
- #
- def section_enter( self, section ):
- print( self.html_header )
-
- print( section_title_header1 + section.name + section_title_header2
- + section.title
- + section_title_footer )
-
- maxwidth = 0
- for b in section.blocks.values():
- if len( b.name ) > maxwidth:
- maxwidth = len( b.name )
-
- width = 70 # XXX magic number
- if maxwidth > 0:
- # print section synopsis
- print( section_synopsis_header )
- print( '<table class="synopsis">' )
-
- columns = width // maxwidth
- if columns < 1:
- columns = 1
-
- count = len( section.block_names )
- # don't handle last entry if it is empty
- if section.block_names[-1] == "/empty/":
- count -= 1
- rows = ( count + columns - 1 ) // columns
-
- for r in range( rows ):
- line = "<tr>"
- for c in range( columns ):
- i = r + c * rows
- line = line + '<td>'
- if i < count:
- name = section.block_names[i]
- if name == "/empty/":
- # it can happen that a complete row is empty, and
- # without a proper `filler' the browser might
- # collapse the row to a much smaller height (or
- # even omit it completely)
- line = line + "&nbsp;"
- else:
- url = name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<a href="#' + url + '">'
- + name + '</a>' )
-
- line = line + '</td>'
- line = line + "</tr>"
- print( line )
-
- print( "</table>" )
- print( section_synopsis_footer )
-
- print( description_header )
- print( self.make_html_items( section.description ) )
- print( description_footer )
-
- def block_enter( self, block ):
- print( block_header )
-
- # place html anchor if needed
- if block.name:
- url = block.name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', block.name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- print( '<h3 id="' + url + '">' + name + '</h3>' )
-
- # dump the block C source lines now
- if block.code:
- header = ''
- for f in self.headers.keys():
- if block.source.filename.find( f ) >= 0:
- header = self.headers[f] + ' (' + f + ')'
- break
-
-# if not header:
-# sys.stderr.write(
-# "WARNING: No header macro for"
-# + " '" + block.source.filename + "'.\n" )
-
- if header:
- print( header_location_header
- + 'Defined in ' + header + '.'
- + header_location_footer )
-
- print( source_header )
- for l in block.code:
- print( self.html_source_quote( l, block.name ) )
- print( source_footer )
-
- def markup_enter( self, markup, block ):
- if markup.tag == "description":
- print( description_header )
- else:
- print( marker_header + markup.tag + marker_inter )
-
- self.print_html_markup( markup )
-
- def markup_exit( self, markup, block ):
- if markup.tag == "description":
- print( description_footer )
- else:
- print( marker_footer )
-
- def block_exit( self, block ):
- print( block_footer_start + self.file_prefix + "index.html"
- + block_footer_middle + self.file_prefix + "toc.html"
- + block_footer_end )
-
- def section_exit( self, section ):
- print( html_footer )
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section,
- self.file_prefix + section.name + '.html' )
-
-# eof
diff --git a/freetype/src/tools/docmaker/utils.py b/freetype/src/tools/docmaker/utils.py
deleted file mode 100644
index f40f1674..00000000
--- a/freetype/src/tools/docmaker/utils.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# utils.py
-#
-# Auxiliary functions for the `docmaker' tool (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-
-import string, sys, os, glob, itertools
-
-
-# current output directory
-#
-output_dir = None
-
-
-# A function that generates a sorting key. We want lexicographical order
-# (primary key) except that capital letters are sorted before lowercase
-# ones (secondary key).
-#
-# The primary key is implemented by lowercasing the input. The secondary
-# key is simply the original data appended, character by character. For
-# example, the sort key for `FT_x' is `fFtT__xx', while the sort key for
-# `ft_X' is `fftt__xX'. Since ASCII codes of uppercase letters are
-# numerically smaller than the codes of lowercase letters, `fFtT__xx' gets
-# sorted before `fftt__xX'.
-#
-def index_key( s ):
- return string.join( itertools.chain( *zip( s.lower(), s ) ) )
-
-
-# Sort `input_list', placing the elements of `order_list' in front.
-#
-def sort_order_list( input_list, order_list ):
- new_list = order_list[:]
- for id in input_list:
- if not id in order_list:
- new_list.append( id )
- return new_list
-
-
-# Divert standard output to a given project documentation file. Use
-# `output_dir' to determine the filename location if necessary and save the
-# old stdout handle in a tuple that is returned by this function.
-#
-def open_output( filename ):
- global output_dir
-
- if output_dir and output_dir != "":
- filename = output_dir + os.sep + filename
-
- old_stdout = sys.stdout
- new_file = open( filename, "w" )
- sys.stdout = new_file
-
- return ( new_file, old_stdout )
-
-
-# Close the output that was returned by `open_output'.
-#
-def close_output( output ):
- output[0].close()
- sys.stdout = output[1]
-
-
-# Check output directory.
-#
-def check_output():
- global output_dir
- if output_dir:
- if output_dir != "":
- if not os.path.isdir( output_dir ):
- sys.stderr.write( "argument"
- + " '" + output_dir + "' "
- + "is not a valid directory\n" )
- sys.exit( 2 )
- else:
- output_dir = None
-
-
-def file_exists( pathname ):
- """Check that a given file exists."""
- result = 1
- try:
- file = open( pathname, "r" )
- file.close()
- except:
- result = None
- sys.stderr.write( pathname + " couldn't be accessed\n" )
-
- return result
-
-
-def make_file_list( args = None ):
- """Build a list of input files from command-line arguments."""
- file_list = []
- # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
-
- if not args:
- args = sys.argv[1:]
-
- for pathname in args:
- if string.find( pathname, '*' ) >= 0:
- newpath = glob.glob( pathname )
- newpath.sort() # sort files -- this is important because
- # of the order of files
- else:
- newpath = [pathname]
-
- file_list.extend( newpath )
-
- if len( file_list ) == 0:
- file_list = None
- else:
- # now filter the file list to remove non-existing ones
- file_list = filter( file_exists, file_list )
-
- return file_list
-
-# eof
diff --git a/freetype/src/tools/ftfuzzer/README b/freetype/src/tools/ftfuzzer/README
deleted file mode 100644
index 09d8e9f3..00000000
--- a/freetype/src/tools/ftfuzzer/README
+++ /dev/null
@@ -1,81 +0,0 @@
-ftfuzzer
-========
-
-
-ftfuzzer.cc
------------
-
-This file contains a target function for FreeType fuzzing. It can be
-used with libFuzzer (https://llvm.org/docs/LibFuzzer.html) or
-potentially any other similar fuzzer.
-
-Usage:
-
- 1. Build `libfreetype.a' and `ftfuzzer.cc' using the most recent
- clang compiler with these flags:
-
- # for fuzzer coverage feedback
- -fsanitize-coverage=edge,8bit-counters
- # for bug checking
- -fsanitize=address,signed-integer-overflow,shift
-
- You also need the header files from the `libarchive' library
- (https://www.libarchive.org/) for handling tar files (see file
- `ftmutator.cc' below for more).
-
- 2. Link with `libFuzzer' (it contains `main') and `libarchive'.
-
- 3. Run the fuzzer on some test corpus.
-
-The exact flags and commands may vary.
-
- https://github.com/google/oss-fuzz/tree/master/projects/freetype2
-
-There is a continuous fuzzing bot that runs ftfuzzer.
-
- https://oss-fuzz.com
-
-(You need an account to be able to see coverage reports and the like
-on oss-fuzz.com.)
-
-Check the bot configuration for the most current settings.
-
-
-ftmutator.cc
-------------
-
-FreeType has the ability to `attach' auxiliary files to a font file,
-providing additional information. The main usage is to load AFM files
-for PostScript Type 1 fonts.
-
-However, libFuzzer currently only supports mutation of a single input
-file. For this reason, `ftmutator.cc' contains a custom fuzzer
-mutator that uses an uncompressed tar file archive as the input. The
-first file in such a tarball gets opened by FreeType as a font, all
-other files are treated as input for `FT_Attach_Stream'.
-
-Compilation is similar to `ftfuzzer.c'.
-
-
-runinput.cc
------------
-
-To run the target function on a set of input files, this file contains
-a convenience `main' function. Link it with `ftfuzzer.cc',
-`libfreetype.a', and `libarchive' and run like
-
- ./a.out my_tests_inputs/*
-
-----------------------------------------------------------------------
-
-Copyright 2015-2018 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/freetype/src/tools/ftfuzzer/ftfuzzer.cc b/freetype/src/tools/ftfuzzer/ftfuzzer.cc
deleted file mode 100644
index acf2bc98..00000000
--- a/freetype/src/tools/ftfuzzer/ftfuzzer.cc
+++ /dev/null
@@ -1,428 +0,0 @@
-// ftfuzzer.cc
-//
-// A fuzzing function to test FreeType with libFuzzer.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include <assert.h>
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include FT_CACHE_H
-#include FT_CACHE_CHARMAP_H
-#include FT_CACHE_IMAGE_H
-#include FT_CACHE_SMALL_BITMAPS_H
-#include FT_SYNTHESIS_H
-#include FT_ADVANCES_H
-#include FT_OUTLINE_H
-#include FT_BBOX_H
-#include FT_MODULE_H
-#include FT_DRIVER_H
-#include FT_MULTIPLE_MASTERS_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global
- {
- FT_Global()
- {
- InitResult = FT_Init_FreeType( &library );
- if ( InitResult )
- return;
-
- // try to activate Adobe's CFF engine; it might not be the default
- unsigned int cff_hinting_engine = FT_HINTING_ADOBE;
- FT_Property_Set( library,
- "cff",
- "hinting-engine", &cff_hinting_engine );
- }
-
- ~FT_Global()
- {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- // We want to select n values at random (without repetition),
- // with 0 < n <= N. The algorithm is taken from TAoCP, Vol. 2
- // (Algorithm S, selection sampling technique)
- struct Random
- {
- int n;
- int N;
-
- int t; // total number of values so far
- int m; // number of selected values so far
-
- uint32_t r; // the current pseudo-random number
-
- Random( int n_,
- int N_ )
- : n( n_ ),
- N( N_ )
- {
- t = 0;
- m = 0;
-
- // Ideally, this should depend on the input file,
- // for example, taking the sha256 as input;
- // however, this is overkill for fuzzying tests.
- r = 12345;
- }
-
- int get()
- {
- if ( m >= n )
- return -1;
-
- Redo:
- // We can't use `rand': different C libraries might provide
- // different implementations of this function. As a replacement,
- // we use a 32bit version of the `xorshift' algorithm.
- r ^= r << 13;
- r ^= r >> 17;
- r ^= r << 5;
-
- double U = double( r ) / UINT32_MAX;
-
- if ( ( N - t ) * U >= ( n - m ) )
- {
- t++;
- goto Redo;
- }
-
- t++;
- m++;
-
- return t;
- }
- };
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<FT_Byte> *vw )
- {
- int r;
- const FT_Byte* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<FT_Byte>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<FT_Byte>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<FT_Byte> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( r != ARCHIVE_OK )
- break;
-
- files.push_back( move( entry_data ) );
- }
- }
-
- if ( files.size() == 0 )
- files.emplace_back( data, data + size );
-
- return files;
- }
-
-
- static void
- setIntermediateAxis( FT_Face face )
- {
- // only handle Multiple Masters and GX variation fonts
- if ( !FT_HAS_MULTIPLE_MASTERS( face ) )
- return;
-
- // get variation data for current instance
- FT_MM_Var* variations_ptr = nullptr;
- if ( FT_Get_MM_Var( face, &variations_ptr ) )
- return;
-
- unique_ptr<FT_MM_Var,
- decltype ( free )*> variations( variations_ptr, free );
- vector<FT_Fixed> coords( variations->num_axis );
-
- // select an arbitrary instance
- for ( unsigned int i = 0; i < variations->num_axis; i++ )
- coords[i] = ( variations->axis[i].minimum +
- variations->axis[i].def ) / 2;
-
- if ( FT_Set_Var_Design_Coordinates( face,
- FT_UInt( coords.size() ),
- coords.data() ) )
- return;
- }
-
-
- // the interface function to the libFuzzer library
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- assert( !InitResult );
-
- if ( size_ < 1 )
- return 0;
-
- const vector<vector<FT_Byte>>& files = parse_data( data, size_ );
-
- FT_Face face;
- FT_Int32 load_flags = FT_LOAD_DEFAULT;
-#if 0
- FT_Render_Mode render_mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- // We use a conservative approach here, at the cost of calling
- // `FT_New_Face' quite often. The idea is that the fuzzer should be
- // able to try all faces and named instances of a font, expecting that
- // some faces don't work for various reasons, e.g., a broken subfont, or
- // an unsupported NFNT bitmap font in a Mac dfont resource that holds
- // more than a single font.
-
- // get number of faces
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -1,
- &face ) )
- return 0;
- long num_faces = face->num_faces;
- FT_Done_Face( face );
-
- // loop over up to 20 arbitrarily selected faces
- // from index range [0;num-faces-1]
- long max_face_cnt = num_faces < 20
- ? num_faces
- : 20;
-
- Random faces_pool( (int)max_face_cnt, (int)num_faces );
-
- for ( long face_cnt = 0;
- face_cnt < max_face_cnt;
- face_cnt++ )
- {
- long face_index = faces_pool.get() - 1;
-
- // get number of instances
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -( face_index + 1 ),
- &face ) )
- continue;
- long num_instances = face->style_flags >> 16;
- FT_Done_Face( face );
-
- // loop over the face without instance (index 0)
- // and up to 20 arbitrarily selected instances
- // from index range [1;num_instances]
- long max_instance_cnt = num_instances < 20
- ? num_instances
- : 20;
-
- Random instances_pool( (int)max_instance_cnt, (int)num_instances );
-
- for ( long instance_cnt = 0;
- instance_cnt <= max_instance_cnt;
- instance_cnt++ )
- {
- long instance_index = 0;
-
- if ( !instance_cnt )
- {
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- face_index,
- &face ) )
- continue;
- }
- else
- {
- instance_index = instances_pool.get();
-
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- ( instance_index << 16 ) + face_index,
- &face ) )
- continue;
- }
-
- // if we have more than a single input file coming from an archive,
- // attach them (starting with the second file) using the order given
- // in the archive
- for ( size_t files_index = 1;
- files_index < files.size();
- files_index++ )
- {
- FT_Open_Args open_args = {};
- open_args.flags = FT_OPEN_MEMORY;
- open_args.memory_base = files[files_index].data();
- open_args.memory_size = (FT_Long)files[files_index].size();
-
- // the last archive element will be eventually used as the
- // attachment
- FT_Attach_Stream( face, &open_args );
- }
-
- // loop over an arbitrary size for outlines
- // and up to ten arbitrarily selected bitmap strike sizes
- // from the range [0;num_fixed_sizes - 1]
- int max_size_cnt = face->num_fixed_sizes < 10
- ? face->num_fixed_sizes
- : 10;
-
- Random sizes_pool( max_size_cnt, face->num_fixed_sizes );
-
- for ( int size_cnt = 0;
- size_cnt <= max_size_cnt;
- size_cnt++ )
- {
- FT_Int32 flags = load_flags;
-
- int size_index = 0;
-
- if ( !size_cnt )
- {
- // set up 20pt at 72dpi as an arbitrary size
- if ( FT_Set_Char_Size( face, 20 * 64, 20 * 64, 72, 72 ) )
- continue;
- flags |= FT_LOAD_NO_BITMAP;
- }
- else
- {
- // bitmap strikes are not active for font variations
- if ( instance_index )
- continue;
-
- size_index = sizes_pool.get() - 1;
-
- if ( FT_Select_Size( face, size_index ) )
- continue;
- flags |= FT_LOAD_COLOR;
- }
-
- // test MM interface only for a face without a selected instance
- // and without a selected bitmap strike
- if ( !instance_index && !size_cnt )
- setIntermediateAxis( face );
-
- // loop over all glyphs
- for ( unsigned int glyph_index = 0;
- glyph_index < (unsigned int)face->num_glyphs;
- glyph_index++ )
- {
- if ( FT_Load_Glyph( face, glyph_index, flags ) )
- continue;
-
- // Rendering is the most expensive and the least interesting part.
- //
- // if ( FT_Render_Glyph( face->glyph, render_mode) )
- // continue;
- // FT_GlyphSlot_Embolden( face->glyph );
-
-#if 0
- FT_Glyph glyph;
- if ( !FT_Get_Glyph( face->glyph, &glyph ) )
- FT_Done_Glyph( glyph );
-
- FT_Outline* outline = &face->glyph->outline;
- FT_Matrix rot30 = { 0xDDB4, -0x8000, 0x8000, 0xDDB4 };
-
- FT_Outline_Transform( outline, &rot30 );
-
- FT_BBox bbox;
- FT_Outline_Get_BBox( outline, &bbox );
-#endif
- }
- }
- FT_Done_Face( face );
- }
- }
-
- return 0;
- }
-
-
-// END
diff --git a/freetype/src/tools/ftfuzzer/ftmutator.cc b/freetype/src/tools/ftfuzzer/ftmutator.cc
deleted file mode 100644
index ae4b1404..00000000
--- a/freetype/src/tools/ftfuzzer/ftmutator.cc
+++ /dev/null
@@ -1,314 +0,0 @@
-// ftmutator.cc
-//
-// A custom fuzzer mutator to test for FreeType with libFuzzer.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// Since `tar' is not a valid format for input to FreeType, treat any input
-// that looks like `tar' as multiple files and mutate them separately.
-//
-// In the future, a variation of this may be used to guide mutation on a
-// logically higher level.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <cstdint>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <cstddef>
-#include <cstring>
-#include <iostream>
-
-#include <memory>
-#include <vector>
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include "FuzzerInterface.h"
-
-
- using namespace std;
-
-
- // This function should be defined by `ftfuzzer.cc'.
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* Data,
- size_t Size );
-
-
- static void
- check_result( struct archive* a,
- int r )
- {
- if ( r == ARCHIVE_OK )
- return;
-
- const char* m = archive_error_string( a );
- write( 1, m, strlen( m ) );
- exit( 1 );
- }
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<uint8_t> *vw )
- {
- int r;
- const uint8_t* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<uint8_t>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<uint8_t>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<uint8_t> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( entry_data.size() == 0 )
- continue;
-
- files.push_back( move( entry_data ) );
- if ( r != ARCHIVE_OK )
- break;
- }
- }
-
- return files;
- }
-
-
- class FTFuzzer
- : public fuzzer::UserSuppliedFuzzer
- {
-
- public:
- FTFuzzer( fuzzer::FuzzerRandomBase* Rand )
- : fuzzer::UserSuppliedFuzzer( Rand ) {}
-
-
- int
- TargetFunction( const uint8_t* Data,
- size_t Size )
- {
- return LLVMFuzzerTestOneInput( Data, Size );
- }
-
-
- // Custom mutator.
- virtual size_t
- Mutate( uint8_t* Data,
- size_t Size,
- size_t MaxSize )
- {
- vector<vector<uint8_t>> files = parse_data( Data, Size );
-
- // If the file was not recognized as a tar file, treat it as non-tar.
- if ( files.size() == 0 )
- return fuzzer::UserSuppliedFuzzer::Mutate( Data, Size, MaxSize );
-
- // This is somewhat `white box' on tar. The tar format uses 512 byte
- // blocks. One block as header for each file, two empty blocks of 0's
- // at the end. File data is padded to fill its last block.
- size_t used_blocks = files.size() + 2;
- for ( const auto& file : files )
- used_blocks += ( file.size() + 511 ) / 512;
-
- size_t max_blocks = MaxSize / 512;
-
- // If the input is big, it will need to be downsized. If the original
- // tar file was too big, it may have been clipped to fit. In this
- // case it may not be possible to properly write out the data, as
- // there may not be enough space for the trailing two blocks. Start
- // dropping file data or files from the end.
- for ( size_t i = files.size();
- i-- > 1 && used_blocks > max_blocks; )
- {
- size_t blocks_to_free = used_blocks - max_blocks;
- size_t blocks_currently_used_by_file_data =
- ( files[i].size() + 511 ) / 512;
-
- if ( blocks_currently_used_by_file_data >= blocks_to_free )
- {
- files[i].resize( ( blocks_currently_used_by_file_data -
- blocks_to_free ) * 512 );
- used_blocks -= blocks_to_free;
- continue;
- }
-
- files.pop_back();
- used_blocks -= blocks_currently_used_by_file_data + 1;
- }
-
- // If we get down to one file, don't use tar.
- if ( files.size() == 1 )
- {
- memcpy( Data, files[0].data(), files[0].size() );
- return fuzzer::UserSuppliedFuzzer::Mutate( Data,
- files[0].size(),
- MaxSize );
- }
-
- size_t free_blocks = max_blocks - used_blocks;
-
- // Allow each file to use up as much of the currently available space
- // it can. If it uses or gives up blocks, add them or remove them
- // from the pool.
- for ( auto&& file : files )
- {
- size_t blocks_currently_used_by_file = ( file.size() + 511 ) / 512;
- size_t blocks_available = blocks_currently_used_by_file +
- free_blocks;
- size_t max_size = blocks_available * 512;
- size_t data_size = file.size();
-
- file.resize( max_size );
- file.resize( fuzzer::UserSuppliedFuzzer::Mutate( file.data(),
- data_size,
- max_size ) );
-
- size_t blocks_now_used_by_file = ( file.size() + 511 ) / 512;
- free_blocks = free_blocks +
- blocks_currently_used_by_file -
- blocks_now_used_by_file;
- }
-
- unique_ptr<struct archive,
- decltype ( archive_write_free )*> a( archive_write_new(),
- archive_write_free );
-
- check_result( a.get(), archive_write_add_filter_none( a.get() ) );
- check_result( a.get(), archive_write_set_format_ustar( a.get() ) );
-
- // `used' may not be correct until after the archive is closed.
- size_t used = 0xbadbeef;
- check_result( a.get(), archive_write_open_memory( a.get(),
- Data,
- MaxSize,
- &used ) );
-
- {
- unique_ptr<struct archive,
- decltype ( archive_write_close )*> a_open( a.get(),
- archive_write_close );
-
- int file_index = 0;
- for ( const auto& file : files )
- {
- unique_ptr<struct archive_entry,
- decltype ( archive_entry_free )*>
- e( archive_entry_new2( a_open.get() ),
- archive_entry_free );
-
- char name_buffer[100];
- snprintf( name_buffer, 100, "file%d", file_index++ );
-
- archive_entry_set_pathname( e.get(), name_buffer );
- archive_entry_set_size( e.get(), file.size() );
- archive_entry_set_filetype( e.get(), AE_IFREG );
- archive_entry_set_perm( e.get(), 0644 );
-
- check_result( a_open.get(),
- archive_write_header( a_open.get(), e.get() ) );
- archive_write_data( a_open.get(), file.data(), file.size() );
- check_result( a_open.get(),
- archive_write_finish_entry( a_open.get() ) );
- }
- }
-
- return used;
- }
-
-
- // Cross `Data1' and `Data2', write up to `MaxOutSize' bytes into `Out',
- // return the number of bytes written, which should be positive.
- virtual size_t
- CrossOver( const uint8_t* Data1,
- size_t Size1,
- const uint8_t* Data2,
- size_t Size2,
- uint8_t* Out,
- size_t MaxOutSize )
- {
- return fuzzer::UserSuppliedFuzzer::CrossOver( Data1,
- Size1,
- Data2,
- Size2,
- Out,
- MaxOutSize );
- }
-
- }; // end of FTFuzzer class
-
-
- int
- main( int argc,
- char* *argv )
- {
- fuzzer::FuzzerRandomLibc Rand( 0 );
- FTFuzzer F( &Rand );
-
- fuzzer::FuzzerDriver( argc, argv, F );
- }
-
-
-// END
diff --git a/freetype/src/tools/ftfuzzer/rasterfuzzer.cc b/freetype/src/tools/ftfuzzer/rasterfuzzer.cc
deleted file mode 100644
index c69b95ea..00000000
--- a/freetype/src/tools/ftfuzzer/rasterfuzzer.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-// rasterfuzzer.cc
-//
-// A fuzzing function to test FreeType's rasterizers with libFuzzer.
-//
-// Copyright 2016-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <stdint.h>
-
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global {
- FT_Global() {
- InitResult = FT_Init_FreeType( &library );
- }
- ~FT_Global() {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- unsigned char pixels[4];
-
- FT_Bitmap bitmap_mono = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 2, // num_grays
- FT_PIXEL_MODE_MONO, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- FT_Bitmap bitmap_gray = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 256, // num_grays
- FT_PIXEL_MODE_GRAY, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- const size_t vsize = sizeof ( FT_Vector );
- const size_t tsize = sizeof ( char );
-
- // we use the input data for both points and tags
- short n_points = short( size_ / ( vsize + tsize ) );
- if ( n_points <= 2 )
- return 0;
-
- FT_Vector* points = reinterpret_cast<FT_Vector*>(
- const_cast<uint8_t*>(
- data ) );
- char* tags = reinterpret_cast<char*>(
- const_cast<uint8_t*>(
- data + size_t( n_points ) * vsize ) );
-
- // to reduce the number of invalid outlines that are immediately
- // rejected in `FT_Outline_Render', limit values to 2^18 pixels
- // (i.e., 2^24 bits)
- for ( short i = 0; i < n_points; i++ )
- {
- if ( points[i].x == LONG_MIN )
- points[i].x = 0;
- else if ( points[i].x < 0 )
- points[i].x = -( -points[i].x & 0xFFFFFF ) - 1;
- else
- points[i].x = ( points[i].x & 0xFFFFFF ) + 1;
-
- if ( points[i].y == LONG_MIN )
- points[i].y = 0;
- else if ( points[i].y < 0 )
- points[i].y = -( -points[i].y & 0xFFFFFF ) - 1;
- else
- points[i].y = ( points[i].y & 0xFFFFFF ) + 1;
- }
-
- short contours[1];
- contours[0] = n_points - 1;
-
- FT_Outline outline =
- {
- 1, // n_contours
- n_points, // n_points
- points, // points
- tags, // tags
- contours, // contours
- FT_OUTLINE_NONE // flags
- };
-
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_mono );
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_gray );
-
- return 0;
- }
-
-
-// END
diff --git a/freetype/src/tools/ftfuzzer/runinput.cc b/freetype/src/tools/ftfuzzer/runinput.cc
deleted file mode 100644
index 2b02f575..00000000
--- a/freetype/src/tools/ftfuzzer/runinput.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// runinput.cc
-//
-// A `main' function for fuzzers like `ftfuzzer.cc'.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-
- extern "C" void
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size );
-
-
- unsigned char a[1 << 24];
-
-
- int
- main( int argc,
- char* *argv )
- {
- assert( argc >= 2 );
-
- for ( int i = 1; i < argc; i++ )
- {
- fprintf( stderr, "%s\n", argv[i] );
-
- FILE* f = fopen( argv[i], "r" );
- assert( f );
-
- size_t n = fread( a, 1, sizeof ( a ), f );
- fclose( f );
- if ( !n )
- continue;
-
- unsigned char* b = (unsigned char*)malloc( n );
- memcpy( b, a, n );
-
- LLVMFuzzerTestOneInput( b, n );
-
- free( b );
- }
- }
-
-
-// END
diff --git a/freetype/src/tools/glnames.py b/freetype/src/tools/glnames.py
index b048d293..e1b613d1 100644
--- a/freetype/src/tools/glnames.py
+++ b/freetype/src/tools/glnames.py
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -5310,24 +5310,24 @@ def main():
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-2018 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( " * %-71s\n" % os.path.basename( sys.argv[1] ) )
+
+ write( " *\n" )
+ write( " * PostScript glyph names.\n" )
+ write( " *\n" )
+ write( " * Copyright 2005-2019 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" )
@@ -5361,12 +5361,12 @@ def main():
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.
+ * 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.
+ * The lookup function to get the Unicode value for a given string
+ * is defined below the table.
*/
#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
@@ -5380,7 +5380,7 @@ def main():
write( """\
#ifdef DEFINE_PS_TABLES
/*
- * This function searches the compressed table efficiently.
+ * This function searches the compressed table efficiently.
*/
static unsigned long
ft_get_adobe_glyph_index( const char* name,
diff --git a/freetype/src/tools/update-copyright-year b/freetype/src/tools/update-copyright-year
index 934f11cf..2ae50d6f 100755
--- a/freetype/src/tools/update-copyright-year
+++ b/freetype/src/tools/update-copyright-year
@@ -2,7 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
& eval 'exec perl -wS -i "$0" $argv:q'
if 0;
-# Copyright 2015-2018 by
+# Copyright (C) 2015-2019 by
# Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -67,7 +67,8 @@ while (<>)
s {
(?<begin>.*)
Copyright
- (?<space1>\ +)
+ (?<space1>(\ +
+ | \ +\(C\)\ +))
(?<first>[12][0-9][0-9][0-9])
(?<middle>.+)
(?<last>[12][0-9][0-9][0-9])
@@ -78,14 +79,15 @@ while (<>)
}
{
# Fill line to the same length (if appropriate); we skip the middle
- # part but insert two spaces and `-'.
+ # part but insert `(C)', three spaces, and `-'.
my $space = length($+{space1}) - 1
+ length($+{middle}) - 1
+ length($+{space2}) - 1
- + length($+{space3});
+ + length($+{space3})
+ - (length("(C)") + 1);
print "$+{begin}";
- print "Copyright\ $+{first}-$year\ by";
+ print "Copyright\ (C)\ $+{first}-$year\ by";
print ' ' x $space if length($+{end});
print "$+{end}\n";
$replaced = 1;
@@ -95,7 +97,8 @@ while (<>)
s {
(?<begin>.*)
Copyright
- (?<space1>\ +)
+ (?<space1>(\ +
+ | \ +\(C\)\ +))
(?<first>[12][0-9][0-9][0-9])
(?<space2>\ +)
by
@@ -103,7 +106,7 @@ while (<>)
(?<end>.*)
}
{
- # Fill line to the same length (if appropriate); we insert two
+ # Fill line to the same length (if appropriate); we insert three
# spaces, a `-', and the current year.
my $space = length($+{space1}) - 1
+ length($+{space2}) - 1
@@ -111,7 +114,7 @@ while (<>)
- (length($year) + 1);
print "$+{begin}";
- print "Copyright $+{first}-$year by";
+ print "Copyright\ (C)\ $+{first}-$year\ by";
# If $space is negative this inserts nothing.
print ' ' x $space if length($+{end});
print "$+{end}\n";
diff --git a/freetype/src/truetype/Jamfile b/freetype/src/truetype/Jamfile
index e321fba1..2de63a7b 100644
--- a/freetype/src/truetype/Jamfile
+++ b/freetype/src/truetype/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/truetype Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/truetype/module.mk b/freetype/src/truetype/module.mk
index 16bc9c8b..8a841cc9 100644
--- a/freetype/src/truetype/module.mk
+++ b/freetype/src/truetype/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/truetype/rules.mk b/freetype/src/truetype/rules.mk
index e16113f1..df8dcd4a 100644
--- a/freetype/src/truetype/rules.mk
+++ b/freetype/src/truetype/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -33,7 +33,6 @@ TT_DRV_SRC := $(TT_DIR)/ttdriver.c \
$(TT_DIR)/ttgxvar.c \
$(TT_DIR)/ttinterp.c \
$(TT_DIR)/ttobjs.c \
- $(TT_DIR)/ttpic.c \
$(TT_DIR)/ttpload.c \
$(TT_DIR)/ttsubpix.c
diff --git a/freetype/src/truetype/truetype.c b/freetype/src/truetype/truetype.c
index 48437097..84928e73 100644
--- a/freetype/src/truetype/truetype.c
+++ b/freetype/src/truetype/truetype.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* truetype.c */
-/* */
-/* FreeType TrueType driver component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType TrueType driver component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -24,7 +24,6 @@
#include "ttgxvar.c" /* gx distortable font */
#include "ttinterp.c"
#include "ttobjs.c" /* object manager */
-#include "ttpic.c"
#include "ttpload.c" /* tables loader */
#include "ttsubpix.c"
diff --git a/freetype/src/truetype/ttdriver.c b/freetype/src/truetype/ttdriver.c
index 88b499ce..ff626d53 100644
--- a/freetype/src/truetype/ttdriver.c
+++ b/freetype/src/truetype/ttdriver.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttdriver.c */
-/* */
-/* TrueType font driver implementation (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttdriver.c
+ *
+ * TrueType font driver implementation (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -43,20 +43,19 @@
#include "tterrors.h"
-#include "ttpic.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttdriver
/*
- * PROPERTY SERVICE
+ * PROPERTY SERVICE
*
*/
static FT_Error
@@ -164,38 +163,42 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -384,32 +387,36 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_glyph_load */
- /* */
- /* <Description> */
- /* A driver method used to load a glyph within a given glyph slot. */
- /* */
- /* <Input> */
- /* slot :: A handle to the target slot object where the glyph */
- /* will be loaded. */
- /* */
- /* size :: A handle to the source face size at which the glyph */
- /* must be scaled, loaded, etc. */
- /* */
- /* glyph_index :: The index of the glyph in the font file. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_glyph_load
+ *
+ * @Description:
+ * A driver method used to load a glyph within a given glyph slot.
+ *
+ * @Input:
+ * slot ::
+ * A handle to the target slot object where the glyph
+ * will be loaded.
+ *
+ * size ::
+ * A handle to the source face size at which the glyph
+ * must be scaled, loaded, etc.
+ *
+ * glyph_index ::
+ * The index of the glyph in the font file.
+ *
+ * load_flags ::
+ * A flag indicating what to load for this glyph. The
+ * FT_LOAD_XXX constants can be used to control the
+ * glyph loading process (e.g., whether the outline
+ * should be scaled, whether to load bitmaps or not,
+ * whether to hint the outline, etc).
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
static FT_Error
tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */
FT_Size ttsize, /* TT_Size */
@@ -464,7 +471,7 @@
? &ttsize->metrics
: &size->hinted_metrics;
- /* now load the glyph outline if necessary */
+ /* now fill in the glyph slot with outline/bitmap/layered */
error = TT_Load_Glyph( size, slot, glyph_index, load_flags );
/* force drop-out mode to 2 - irrelevant now */
@@ -491,19 +498,19 @@
FT_DEFINE_SERVICE_MULTIMASTERSREC(
tt_service_gx_multi_masters,
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func) TT_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func) TT_Get_Var_Design, /* get_var_design */
- (FT_Set_Instance_Func) TT_Set_Named_Instance,/* set_instance */
- (FT_Set_MM_WeightVector_Func) NULL, /* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func) NULL, /* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) tt_done_blend /* done_blend */
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func) TT_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func) TT_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) TT_Set_Named_Instance, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)NULL, /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)NULL, /* get_mm_weightvector */
+
+ (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) tt_done_blend /* done_blend */
)
FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
@@ -550,19 +557,19 @@
tt_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
- FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &TT_SERVICE_METRICS_VARIATIONS_GET,
+ FT_SERVICE_ID_MULTI_MASTERS, &tt_service_gx_multi_masters,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &tt_service_metrics_variations,
FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
- FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
- FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
+ FT_SERVICE_ID_TT_GLYF, &tt_service_truetype_glyf,
+ FT_SERVICE_ID_PROPERTIES, &tt_service_properties )
#else
FT_DEFINE_SERVICEDESCREC4(
tt_services,
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
- FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
- FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
+ FT_SERVICE_ID_TT_GLYF, &tt_service_truetype_glyf,
+ FT_SERVICE_ID_PROPERTIES, &tt_service_properties )
#endif
@@ -576,26 +583,15 @@
SFNT_Service sfnt;
- /* TT_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- result = ft_service_list_lookup( TT_SERVICES_GET, tt_interface );
+ result = ft_service_list_lookup( tt_services, tt_interface );
if ( result )
return result;
-#ifndef FT_CONFIG_OPTION_PIC
if ( !driver )
return NULL;
library = driver->library;
if ( !library )
return NULL;
-#endif
/* only return the default interface from the SFNT module */
sfntd = FT_Get_Module( library, "sfnt" );
diff --git a/freetype/src/truetype/ttdriver.h b/freetype/src/truetype/ttdriver.h
index 707aa68e..3936c6a4 100644
--- a/freetype/src/truetype/ttdriver.h
+++ b/freetype/src/truetype/ttdriver.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttdriver.h */
-/* */
-/* High-level TrueType driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttdriver.h
+ *
+ * High-level TrueType driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,10 +26,8 @@
FT_BEGIN_HEADER
-
FT_DECLARE_DRIVER( tt_driver_class )
-
FT_END_HEADER
#endif /* TTDRIVER_H_ */
diff --git a/freetype/src/truetype/tterrors.h b/freetype/src/truetype/tterrors.h
index 88bca3a0..5609d28d 100644
--- a/freetype/src/truetype/tterrors.h
+++ b/freetype/src/truetype/tterrors.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* tterrors.h */
-/* */
-/* TrueType error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * tterrors.h
+ *
+ * TrueType error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/truetype/ttgload.c b/freetype/src/truetype/ttgload.c
index 39d9c3f7..a0468408 100644
--- a/freetype/src/truetype/ttgload.c
+++ b/freetype/src/truetype/ttgload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttgload.c */
-/* */
-/* TrueType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttgload.c
+ *
+ * TrueType Glyph Loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -38,20 +38,35 @@
#include "ttsubpix.h"
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttgload
- /*************************************************************************/
- /* */
- /* Composite glyph flags. */
- /* */
+ /**************************************************************************
+ *
+ * Simple glyph flags.
+ */
+#define ON_CURVE_POINT 0x01 /* same value as FT_CURVE_TAG_ON */
+#define X_SHORT_VECTOR 0x02
+#define Y_SHORT_VECTOR 0x04
+#define REPEAT_FLAG 0x08
+#define X_POSITIVE 0x10 /* two meanings depending on X_SHORT_VECTOR */
+#define SAME_X 0x10
+#define Y_POSITIVE 0x20 /* two meanings depending on Y_SHORT_VECTOR */
+#define SAME_Y 0x20
+#define OVERLAP_SIMPLE 0x40 /* we ignore this value */
+
+
+ /**************************************************************************
+ *
+ * Composite glyph flags.
+ */
#define ARGS_ARE_WORDS 0x0001
#define ARGS_ARE_XY_VALUES 0x0002
#define ROUND_XY_TO_GRID 0x0004
@@ -62,15 +77,24 @@
#define WE_HAVE_A_2X2 0x0080
#define WE_HAVE_INSTR 0x0100
#define USE_MY_METRICS 0x0200
-#define OVERLAP_COMPOUND 0x0400
+#define OVERLAP_COMPOUND 0x0400 /* we ignore this value */
#define SCALED_COMPONENT_OFFSET 0x0800
#define UNSCALED_COMPONENT_OFFSET 0x1000
- /*************************************************************************/
- /* */
- /* Return the horizontal metrics in font units for a given glyph. */
- /* */
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#define IS_DEFAULT_INSTANCE( _face ) \
+ ( !( FT_IS_NAMED_INSTANCE( _face ) || \
+ FT_IS_VARIATION( _face ) ) )
+#else
+#define IS_DEFAULT_INSTANCE( _face ) 1
+#endif
+
+
+ /**************************************************************************
+ *
+ * Return the horizontal metrics in font units for a given glyph.
+ */
FT_LOCAL_DEF( void )
TT_Get_HMetrics( TT_Face face,
FT_UInt idx,
@@ -84,11 +108,11 @@
}
- /*************************************************************************/
- /* */
- /* Return the vertical metrics in font units for a given glyph. */
- /* See function `tt_loader_set_pp' below for explanations. */
- /* */
+ /**************************************************************************
+ *
+ * Return the vertical metrics in font units for a given glyph.
+ * See function `tt_loader_set_pp' below for explanations.
+ */
FT_LOCAL_DEF( void )
TT_Get_VMetrics( TT_Face face,
FT_UInt idx,
@@ -250,13 +274,13 @@
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- /*************************************************************************/
- /* */
- /* The following functions are used by default with TrueType fonts. */
- /* However, they can be replaced by alternatives if we need to support */
- /* TrueType-compressed formats (like MicroType) in the future. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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,
@@ -267,12 +291,9 @@
FT_Error error;
FT_Stream stream = loader->stream;
- /* for non-debug mode */
FT_UNUSED( glyph_index );
- FT_TRACE4(( "Glyph %ld\n", glyph_index ));
-
/* the following line sets the `error' variable through macros! */
if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( byte_count ) )
return error;
@@ -337,7 +358,7 @@
FT_Byte *flag, *flag_limit;
FT_Byte c, count;
FT_Vector *vec, *vec_limit;
- FT_Pos x;
+ FT_Pos x, y;
FT_Short *cont, *cont_limit, prev_cont;
FT_Int xy_size = 0;
@@ -382,6 +403,8 @@
goto Invalid_Outline;
}
+ FT_TRACE5(( " # of points: %d\n", n_points ));
+
/* note that we will add four phantom points later */
error = FT_GLYPHLOADER_CHECK_POINTS( gloader, n_points + 4, 0 );
if ( error )
@@ -452,7 +475,7 @@
goto Invalid_Outline;
*flag++ = c = FT_NEXT_BYTE( p );
- if ( c & 8 )
+ if ( c & REPEAT_FLAG )
{
if ( p + 1 > limit )
goto Invalid_Outline;
@@ -478,31 +501,29 @@
for ( ; vec < vec_limit; vec++, flag++ )
{
- FT_Pos y = 0;
- FT_Byte f = *flag;
+ FT_Pos delta = 0;
+ FT_Byte f = *flag;
- if ( f & 2 )
+ if ( f & X_SHORT_VECTOR )
{
if ( p + 1 > limit )
goto Invalid_Outline;
- y = (FT_Pos)FT_NEXT_BYTE( p );
- if ( ( f & 16 ) == 0 )
- y = -y;
+ delta = (FT_Pos)FT_NEXT_BYTE( p );
+ if ( !( f & X_POSITIVE ) )
+ delta = -delta;
}
- else if ( ( f & 16 ) == 0 )
+ else if ( !( f & SAME_X ) )
{
if ( p + 2 > limit )
goto Invalid_Outline;
- y = (FT_Pos)FT_NEXT_SHORT( p );
+ delta = (FT_Pos)FT_NEXT_SHORT( p );
}
- x += y;
+ x += delta;
vec->x = x;
- /* the cast is for stupid compilers */
- *flag = (FT_Byte)( f & ~( 2 | 16 ) );
}
/* reading the Y coordinates */
@@ -510,35 +531,36 @@
vec = gloader->current.outline.points;
vec_limit = vec + n_points;
flag = (FT_Byte*)outline->tags;
- x = 0;
+ y = 0;
for ( ; vec < vec_limit; vec++, flag++ )
{
- FT_Pos y = 0;
- FT_Byte f = *flag;
+ FT_Pos delta = 0;
+ FT_Byte f = *flag;
- if ( f & 4 )
+ if ( f & Y_SHORT_VECTOR )
{
if ( p + 1 > limit )
goto Invalid_Outline;
- y = (FT_Pos)FT_NEXT_BYTE( p );
- if ( ( f & 32 ) == 0 )
- y = -y;
+ delta = (FT_Pos)FT_NEXT_BYTE( p );
+ if ( !( f & Y_POSITIVE ) )
+ delta = -delta;
}
- else if ( ( f & 32 ) == 0 )
+ else if ( !( f & SAME_Y ) )
{
if ( p + 2 > limit )
goto Invalid_Outline;
- y = (FT_Pos)FT_NEXT_SHORT( p );
+ delta = (FT_Pos)FT_NEXT_SHORT( p );
}
- x += y;
- vec->y = x;
+ y += delta;
+ vec->y = y;
+
/* the cast is for stupid compilers */
- *flag = (FT_Byte)( f & FT_CURVE_TAG_ON );
+ *flag = (FT_Byte)( f & ON_CURVE_POINT );
}
outline->n_points = (FT_Short)n_points;
@@ -559,9 +581,10 @@
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_Byte* p = loader->cursor;
+ FT_Byte* limit = loader->limit;
+ FT_GlyphLoader gloader = loader->gloader;
+ FT_Long num_glyphs = loader->face->root.num_glyphs;
FT_SubGlyph subglyph;
FT_UInt num_subglyphs;
@@ -590,6 +613,11 @@
subglyph->flags = FT_NEXT_USHORT( p );
subglyph->index = FT_NEXT_USHORT( p );
+ /* we reject composites that have components */
+ /* with invalid glyph indices */
+ if ( subglyph->index >= num_glyphs )
+ goto Invalid_Composite;
+
/* check space */
count = 2;
if ( subglyph->flags & ARGS_ARE_WORDS )
@@ -768,15 +796,15 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -797,15 +825,9 @@
#ifdef TT_USE_BYTECODE_INTERPRETER
- if ( loader->glyph->control_len > 0xFFFFL )
- {
- FT_TRACE1(( "TT_Hint_Glyph: too long instructions" ));
- FT_TRACE1(( " (0x%lx byte) is truncated\n",
- loader->glyph->control_len ));
- }
n_ins = loader->glyph->control_len;
- /* save original point position in org */
+ /* save original point positions in `org' array */
if ( n_ins > 0 )
FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
@@ -896,16 +918,16 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -914,6 +936,11 @@
FT_Outline* outline;
FT_Int n_points;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_Memory memory = loader->face->root.memory;
+ FT_Vector* unrounded = NULL;
+#endif
+
outline = &gloader->current.outline;
n_points = outline->n_points;
@@ -934,26 +961,32 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( FT_IS_NAMED_INSTANCE( FT_FACE( loader->face ) ) ||
- FT_IS_VARIATION( FT_FACE( loader->face ) ) )
+ if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
{
+ if ( FT_NEW_ARRAY( unrounded, n_points ) )
+ goto Exit;
+
/* Deltas apply to the unscaled data. */
error = TT_Vary_Apply_Glyph_Deltas( loader->face,
loader->glyph_index,
outline,
+ unrounded,
(FT_UInt)n_points );
/* recalculate linear horizontal and vertical advances */
/* if we don't have HVAR and VVAR, respectively */
+
+ /* XXX: change all FreeType modules to store `linear' and `vadvance' */
+ /* in 26.6 format before the `base' module scales them to 16.16 */
if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = outline->points[n_points - 3].x -
- outline->points[n_points - 4].x;
+ loader->linear = FT_PIX_ROUND( unrounded[n_points - 3].x -
+ unrounded[n_points - 4].x ) / 64;
if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = outline->points[n_points - 1].x -
- outline->points[n_points - 2].x;
+ loader->vadvance = FT_PIX_ROUND( unrounded[n_points - 1].x -
+ unrounded[n_points - 2].x ) / 64;
if ( error )
- return error;
+ goto Exit;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1008,10 +1041,23 @@
/* compensate for any scaling by de/emboldening; */
/* the amount was determined via experimentation */
if ( x_scale_factor != 1000 && ppem > 11 )
+ {
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_Vector* orig_points = outline->points;
+
+
+ if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
+ outline->points = unrounded;
+#endif
FT_Outline_EmboldenXY( outline,
FT_MulFix( 1280 * ppem,
1000 - x_scale_factor ),
0 );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
+ outline->points = orig_points;
+#endif
+ }
do_scale = TRUE;
}
}
@@ -1032,10 +1078,26 @@
if ( do_scale )
{
- for ( ; vec < limit; vec++ )
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
{
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
+ FT_Vector* u = unrounded;
+
+
+ for ( ; vec < limit; vec++, u++ )
+ {
+ vec->x = ( FT_MulFix( u->x, x_scale ) + 32 ) >> 6;
+ vec->y = ( FT_MulFix( u->y, y_scale ) + 32 ) >> 6;
+ }
+ }
+ else
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+ {
+ for ( ; vec < limit; vec++ )
+ {
+ vec->x = FT_MulFix( vec->x, x_scale );
+ vec->y = FT_MulFix( vec->y, y_scale );
+ }
}
}
@@ -1067,19 +1129,24 @@
error = TT_Hint_Glyph( loader, 0 );
}
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ Exit:
+ FT_FREE( unrounded );
+#endif
+
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1153,10 +1220,10 @@
#if 0
- /*******************************************************************/
- /* */
- /* This algorithm is what Apple documents. But it doesn't work. */
- /* */
+ /********************************************************************
+ *
+ * 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
@@ -1178,10 +1245,10 @@
#else /* 1 */
- /*******************************************************************/
- /* */
- /* This algorithm is a guess and works much better than the above. */
- /* */
+ /********************************************************************
+ *
+ * This algorithm is a guess and works much better than the above.
+ */
FT_Fixed mac_xscale = FT_Hypot( subglyph->transform.xx,
subglyph->transform.xy );
FT_Fixed mac_yscale = FT_Hypot( subglyph->transform.yy,
@@ -1239,16 +1306,16 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1460,7 +1527,7 @@
}
#endif
- use_aw_2 = (FT_Bool)( subpixel_hinting && grayscale );
+ use_aw_2 = FT_BOOL( subpixel_hinting && grayscale );
loader->pp1.x = loader->bbox.xMin - loader->left_bearing;
loader->pp1.y = 0;
@@ -1497,27 +1564,28 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* load_truetype_glyph */
- /* */
- /* <Description> */
- /* Loads a given truetype glyph. Handles composites and uses a */
- /* TT_Loader object. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * load_truetype_glyph
+ *
+ * @Description:
+ * Loads a given truetype glyph. Handles composites and uses a
+ * TT_Loader object.
+ */
static FT_Error
load_truetype_glyph( TT_Loader loader,
FT_UInt glyph_index,
FT_UInt recurse_count,
FT_Bool header_only )
{
- FT_Error error = FT_Err_Ok;
+ FT_Error error = FT_Err_Ok;
FT_Fixed x_scale, y_scale;
FT_ULong offset;
- TT_Face face = loader->face;
- FT_GlyphLoader gloader = loader->gloader;
- FT_Bool opened_frame = 0;
+ TT_Face face = loader->face;
+ FT_GlyphLoader gloader = loader->gloader;
+
+ FT_Bool opened_frame = 0;
#ifdef FT_CONFIG_OPTION_INCREMENTAL
FT_StreamRec inc_stream;
@@ -1550,15 +1618,15 @@
loader->glyph_index = glyph_index;
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
+ if ( loader->load_flags & FT_LOAD_NO_SCALE )
{
- x_scale = loader->size->metrics->x_scale;
- y_scale = loader->size->metrics->y_scale;
+ x_scale = 0x10000L;
+ y_scale = 0x10000L;
}
else
{
- x_scale = 0x10000L;
- y_scale = 0x10000L;
+ x_scale = loader->size->metrics->x_scale;
+ y_scale = loader->size->metrics->y_scale;
}
/* Set `offset' to the start of the glyph relative to the start of */
@@ -1617,38 +1685,36 @@
if ( error )
goto Exit;
- opened_frame = 1;
-
/* read glyph header first */
error = face->read_glyph_header( loader );
- if ( error )
- goto Exit;
- /* the metrics must be computed after loading the glyph header */
- /* since we need the glyph's `yMax' value in case the vertical */
- /* metrics must be emulated */
- error = tt_get_metrics( loader, glyph_index );
- if ( error )
- goto Exit;
+ face->forget_glyph_frame( loader );
- if ( header_only )
+ if ( error )
goto Exit;
}
+ /* a space glyph */
if ( loader->byte_len == 0 || loader->n_contours == 0 )
{
loader->bbox.xMin = 0;
loader->bbox.xMax = 0;
loader->bbox.yMin = 0;
loader->bbox.yMax = 0;
+ }
- error = tt_get_metrics( loader, glyph_index );
- if ( error )
- goto Exit;
+ /* the metrics must be computed after loading the glyph header */
+ /* since we need the glyph's `yMax' value in case the vertical */
+ /* metrics must be emulated */
+ error = tt_get_metrics( loader, glyph_index );
+ if ( error )
+ goto Exit;
- if ( header_only )
- goto Exit;
+ if ( header_only )
+ goto Exit;
+ if ( loader->byte_len == 0 || loader->n_contours == 0 )
+ {
/* must initialize points before (possibly) overriding */
/* glyph metrics from the incremental interface */
tt_loader_set_pp( loader );
@@ -1669,6 +1735,9 @@
short contours[4] = { 0, 1, 2, 3 };
FT_Outline outline;
+ /* unrounded values */
+ FT_Vector unrounded[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
+
points[0].x = loader->pp1.x;
points[0].y = loader->pp1.y;
@@ -1690,6 +1759,7 @@
error = TT_Vary_Apply_Glyph_Deltas( loader->face,
glyph_index,
&outline,
+ unrounded,
(FT_UInt)outline.n_points );
if ( error )
goto Exit;
@@ -1704,13 +1774,14 @@
loader->pp4.x = points[3].x;
loader->pp4.y = points[3].y;
-
/* recalculate linear horizontal and vertical advances */
/* if we don't have HVAR and VVAR, respectively */
if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = loader->pp2.x - loader->pp1.x;
+ loader->linear = FT_PIX_ROUND( unrounded[1].x -
+ unrounded[0].x ) / 64;
if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = loader->pp4.x - loader->pp3.x;
+ loader->vadvance = FT_PIX_ROUND( unrounded[3].x -
+ unrounded[2].x ) / 64;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1745,6 +1816,16 @@
/***********************************************************************/
/***********************************************************************/
+ /* we now open a frame again, right after the glyph header */
+ /* (which consists of 10 bytes) */
+ error = face->access_glyph_frame( loader, glyph_index,
+ face->glyf_offset + offset + 10,
+ (FT_UInt)loader->byte_len - 10 );
+ if ( error )
+ goto Exit;
+
+ opened_frame = 1;
+
/* if it is a simple glyph, load it */
if ( loader->n_contours > 0 )
@@ -1790,7 +1871,6 @@
* pointers with a width of at least 32 bits.
*/
-
/* clear the nodes filled by sibling chains */
node = ft_list_get_node_at( &loader->composites, recurse_count );
for ( node2 = node; node2; node2 = node2->next )
@@ -1841,9 +1921,10 @@
FT_SubGlyph subglyph;
FT_Outline outline;
- FT_Vector* points = NULL;
- char* tags = NULL;
- short* contours = NULL;
+ FT_Vector* points = NULL;
+ char* tags = NULL;
+ short* contours = NULL;
+ FT_Vector* unrounded = NULL;
limit = (short)gloader->current.num_subglyphs;
@@ -1857,9 +1938,10 @@
outline.tags = NULL;
outline.contours = NULL;
- if ( FT_NEW_ARRAY( points, outline.n_points ) ||
- FT_NEW_ARRAY( tags, outline.n_points ) ||
- FT_NEW_ARRAY( contours, outline.n_points ) )
+ if ( FT_NEW_ARRAY( points, outline.n_points ) ||
+ FT_NEW_ARRAY( tags, outline.n_points ) ||
+ FT_NEW_ARRAY( contours, outline.n_points ) ||
+ FT_NEW_ARRAY( unrounded, outline.n_points ) )
goto Exit1;
subglyph = gloader->current.subglyphs;
@@ -1908,6 +1990,7 @@
face,
glyph_index,
&outline,
+ unrounded,
(FT_UInt)outline.n_points ) ) )
goto Exit1;
@@ -1935,14 +2018,19 @@
/* recalculate linear horizontal and vertical advances */
/* if we don't have HVAR and VVAR, respectively */
if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = loader->pp2.x - loader->pp1.x;
+ loader->linear =
+ FT_PIX_ROUND( unrounded[outline.n_points - 3].x -
+ unrounded[outline.n_points - 4].x ) / 64;
if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = loader->pp4.x - loader->pp3.x;
+ loader->vadvance =
+ FT_PIX_ROUND( unrounded[outline.n_points - 1].x -
+ unrounded[outline.n_points - 2].x ) / 64;
Exit1:
FT_FREE( outline.points );
FT_FREE( outline.tags );
FT_FREE( outline.contours );
+ FT_FREE( unrounded );
if ( error )
goto Exit;
@@ -2002,7 +2090,7 @@
FT_Int linear_vadvance;
- /* Each time we call load_truetype_glyph in this loop, the */
+ /* 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. */
@@ -2045,12 +2133,14 @@
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 */
+ /* gloader->base.outline consists of three parts: */
+ /* */
+ /* 0 ----> start_point ----> num_base_points ----> n_points */
+ /* (1) (2) (3) */
+ /* */
+ /* (1) points that exist from the beginning */
+ /* (2) component points that have been loaded so far */
+ /* (3) points of the newly loaded component */
error = TT_Process_Composite_Component( loader,
subglyph,
start_point,
@@ -2066,6 +2156,7 @@
loader->ins_pos = ins_pos;
if ( IS_HINTED( loader->load_flags ) &&
#ifdef TT_USE_BYTECODE_INTERPRETER
+ subglyph &&
subglyph->flags & WE_HAVE_INSTR &&
#endif
num_points > start_point )
@@ -2132,7 +2223,7 @@
glyph->metrics.horiBearingX = bbox.xMin;
glyph->metrics.horiBearingY = bbox.yMax;
- glyph->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
+ glyph->metrics.horiAdvance = SUB_LONG(loader->pp2.x, loader->pp1.x);
/* Adjust advance width to the value contained in the hdmx table */
/* unless FT_LOAD_COMPUTE_METRICS is set or backward compatibility */
@@ -2276,13 +2367,13 @@
/* XXX: for now, we have no better algorithm for the lsb, but it */
/* should work fine. */
/* */
- glyph->metrics.vertBearingX = glyph->metrics.horiBearingX -
- glyph->metrics.horiAdvance / 2;
+ glyph->metrics.vertBearingX = SUB_LONG( glyph->metrics.horiBearingX,
+ glyph->metrics.horiAdvance / 2 );
glyph->metrics.vertBearingY = top;
glyph->metrics.vertAdvance = advance;
}
- return 0;
+ return FT_Err_Ok;
}
@@ -2589,11 +2680,6 @@
if ( reexecute )
{
- FT_UInt i;
-
-
- for ( i = 0; i < size->cvt_size; i++ )
- size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
error = tt_size_run_prep( size, pedantic );
if ( error )
return error;
@@ -2656,33 +2742,37 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -2692,13 +2782,6 @@
FT_Error error;
TT_LoaderRec loader;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#define IS_DEFAULT_INSTANCE ( !( FT_IS_NAMED_INSTANCE( glyph->face ) || \
- FT_IS_VARIATION( glyph->face ) ) )
-#else
-#define IS_DEFAULT_INSTANCE 1
-#endif
-
FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index ));
@@ -2707,7 +2790,7 @@
/* try to load embedded bitmap (if any) */
if ( size->strike_index != 0xFFFFFFFFUL &&
( load_flags & FT_LOAD_NO_BITMAP ) == 0 &&
- IS_DEFAULT_INSTANCE )
+ IS_DEFAULT_INSTANCE( glyph->face ) )
{
FT_Fixed x_scale = size->root.metrics.x_scale;
FT_Fixed y_scale = size->root.metrics.y_scale;
diff --git a/freetype/src/truetype/ttgload.h b/freetype/src/truetype/ttgload.h
index d237cfd2..f1324bc8 100644
--- a/freetype/src/truetype/ttgload.h
+++ b/freetype/src/truetype/ttgload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttgload.h */
-/* */
-/* TrueType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttgload.h
+ *
+ * TrueType Glyph Loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/truetype/ttgxvar.c b/freetype/src/truetype/ttgxvar.c
index 29ab2a4e..78d87dc0 100644
--- a/freetype/src/truetype/ttgxvar.c
+++ b/freetype/src/truetype/ttgxvar.c
@@ -1,42 +1,42 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.c */
-/* */
-/* TrueType GX Font Variation loader */
-/* */
-/* Copyright 2004-2018 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Apple documents the `fvar', `gvar', `cvar', and `avar' tables at */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html */
- /* */
- /* The documentation for `gvar' is not intelligible; `cvar' refers you */
- /* to `gvar' and is thus also incomprehensible. */
- /* */
- /* The documentation for `avar' appears correct, but Apple has no fonts */
- /* with an `avar' table, so it is hard to test. */
- /* */
- /* Many thanks to John Jenkins (at Apple) in figuring this out. */
- /* */
- /* */
- /* Apple's `kern' table has some references to tuple indices, but as */
- /* there is no indication where these indices are defined, nor how to */
- /* interpolate the kerning values (different tuples have different */
- /* classes) this issue is ignored. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * ttgxvar.c
+ *
+ * TrueType GX Font Variation loader
+ *
+ * Copyright (C) 2004-2019 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * Apple documents the `fvar', `gvar', `cvar', and `avar' tables at
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html
+ *
+ * The documentation for `gvar' is not intelligible; `cvar' refers you
+ * to `gvar' and is thus also incomprehensible.
+ *
+ * The documentation for `avar' appears correct, but Apple has no fonts
+ * with an `avar' table, so it is hard to test.
+ *
+ * Many thanks to John Jenkins (at Apple) in figuring this out.
+ *
+ *
+ * Apple's `kern' table has some references to tuple indices, but as
+ * there is no indication where these indices are defined, nor how to
+ * interpolate the kerning values (different tuples have different
+ * classes) this issue is ignored.
+ *
+ */
#include <ft2build.h>
@@ -67,14 +67,27 @@
: (stream)->limit
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /* some macros we need */
+#define FT_fdot14ToFixed( x ) \
+ ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
+#define FT_intToFixed( i ) \
+ ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
+#define FT_fdot6ToFixed( i ) \
+ ( (FT_Fixed)( (FT_ULong)(i) << 10 ) )
+#define FT_fixedToInt( x ) \
+ ( (FT_Short)( ( (x) + 0x8000U ) >> 16 ) )
+#define FT_fixedToFdot6( x ) \
+ ( (FT_Pos)( ( (x) + 0x200 ) >> 10 ) )
+
+
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT ttgxvar
/*************************************************************************/
@@ -86,12 +99,12 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
+ /**************************************************************************
+ *
+ * The macro ALL_POINTS is used in `ft_var_readpackedpoints'. It
+ * indicates that there is a delta for every point without needing to
+ * enumerate all of them.
+ */
/* ensure that value `0' has the same width as a pointer */
#define ALL_POINTS (FT_UShort*)~(FT_PtrDist)0
@@ -101,29 +114,32 @@
#define GX_PT_POINT_RUN_COUNT_MASK 0x7FU
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_readpackedpoints */
- /* */
- /* <Description> */
- /* Read a set of points to which the following deltas will apply. */
- /* Points are packed with a run length encoding. */
- /* */
- /* <Input> */
- /* stream :: The data stream. */
- /* */
- /* size :: The size of the table holding the data. */
- /* */
- /* <Output> */
- /* point_cnt :: The number of points read. A zero value means that */
- /* all points in the glyph will be affected, without */
- /* enumerating them individually. */
- /* */
- /* <Return> */
- /* An array of FT_UShort containing the affected points or the */
- /* special value ALL_POINTS. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_var_readpackedpoints
+ *
+ * @Description:
+ * Read a set of points to which the following deltas will apply.
+ * Points are packed with a run length encoding.
+ *
+ * @Input:
+ * stream ::
+ * The data stream.
+ *
+ * size ::
+ * The size of the table holding the data.
+ *
+ * @Output:
+ * point_cnt ::
+ * The number of points read. A zero value means that
+ * all points in the glyph will be affected, without
+ * enumerating them individually.
+ *
+ * @Return:
+ * An array of FT_UShort containing the affected points or the
+ * special value ALL_POINTS.
+ */
static FT_UShort*
ft_var_readpackedpoints( FT_Stream stream,
FT_ULong size,
@@ -211,34 +227,41 @@
#define GX_DT_DELTA_RUN_COUNT_MASK 0x3FU
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_readpackeddeltas */
- /* */
- /* <Description> */
- /* Read a set of deltas. These are packed slightly differently than */
- /* points. In particular there is no overall count. */
- /* */
- /* <Input> */
- /* stream :: The data stream. */
- /* */
- /* size :: The size of the table holding the data. */
- /* */
- /* delta_cnt :: The number of deltas to be read. */
- /* */
- /* <Return> */
- /* An array of FT_Short containing the deltas for the affected */
- /* points. (This only gets the deltas for one dimension. It will */
- /* generally be called twice, once for x, once for y. When used in */
- /* cvt table, it will only be called once.) */
- /* */
- static FT_Short*
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_var_readpackeddeltas
+ *
+ * @Description:
+ * Read a set of deltas. These are packed slightly differently than
+ * points. In particular there is no overall count.
+ *
+ * @Input:
+ * stream ::
+ * The data stream.
+ *
+ * size ::
+ * The size of the table holding the data.
+ *
+ * delta_cnt ::
+ * The number of deltas to be read.
+ *
+ * @Return:
+ * An array of FT_Fixed 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.)
+ *
+ * We use FT_Fixed to avoid accumulation errors while summing up all
+ * deltas (the rounding to integer values happens as the very last
+ * step).
+ */
+ static FT_Fixed*
ft_var_readpackeddeltas( FT_Stream stream,
FT_ULong size,
FT_UInt delta_cnt )
{
- FT_Short *deltas = NULL;
+ FT_Fixed *deltas = NULL;
FT_UInt runcnt, cnt;
FT_UInt i, j;
FT_Memory memory = stream->memory;
@@ -272,13 +295,13 @@
{
/* `runcnt' shorts from the stack */
for ( j = 0; j <= cnt && i < delta_cnt; j++ )
- deltas[i++] = FT_GET_SHORT();
+ deltas[i++] = FT_intToFixed( FT_GET_SHORT() );
}
else
{
/* `runcnt' signed bytes from the stack */
for ( j = 0; j <= cnt && i < delta_cnt; j++ )
- deltas[i++] = FT_GET_CHAR();
+ deltas[i++] = FT_intToFixed( FT_GET_CHAR() );
}
if ( j <= cnt )
@@ -293,18 +316,19 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
@@ -377,9 +401,10 @@
for ( j = 0; j < segment->pairCount; j++ )
{
- /* convert to Fixed */
- segment->correspondence[j].fromCoord = FT_GET_SHORT() * 4;
- segment->correspondence[j].toCoord = FT_GET_SHORT() * 4;
+ segment->correspondence[j].fromCoord =
+ FT_fdot14ToFixed( FT_GET_SHORT() );
+ segment->correspondence[j].toCoord =
+ FT_fdot14ToFixed( FT_GET_SHORT() );
FT_TRACE5(( " mapping %.5f to %.5f\n",
segment->correspondence[j].fromCoord / 65536.0,
@@ -394,17 +419,6 @@
}
- /* some macros we need */
-#define FT_FIXED_ONE ( (FT_Fixed)0x10000 )
-
-#define FT_fdot14ToFixed( x ) \
- ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
-#define FT_intToFixed( i ) \
- ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
-#define FT_fixedToInt( x ) \
- ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
-
-
static FT_Error
ft_var_load_item_variation_store( TT_Face face,
FT_ULong offset,
@@ -702,29 +716,30 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_hvvar */
- /* */
- /* <Description> */
- /* If `vertical' is zero, parse the `HVAR' table and set */
- /* `blend->hvar_loaded' to TRUE. On success, `blend->hvar_checked' */
- /* is set to TRUE. */
- /* */
- /* If `vertical' is not zero, parse the `VVAR' table and set */
- /* `blend->vvar_loaded' to TRUE. On success, `blend->vvar_checked' */
- /* is set to TRUE. */
- /* */
- /* Some memory may remain allocated on error; it is always freed in */
- /* `tt_done_blend', however. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_var_load_hvvar
+ *
+ * @Description:
+ * If `vertical' is zero, parse the `HVAR' table and set
+ * `blend->hvar_loaded' to TRUE. On success, `blend->hvar_checked'
+ * is set to TRUE.
+ *
+ * If `vertical' is not zero, parse the `VVAR' table and set
+ * `blend->vvar_loaded' to TRUE. On success, `blend->vvar_checked'
+ * is set to TRUE.
+ *
+ * Some memory may remain allocated on error; it is always freed in
+ * `tt_done_blend', however.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
static FT_Error
ft_var_load_hvvar( TT_Face face,
FT_Bool vertical )
@@ -872,7 +887,7 @@
/* outer loop steps through master designs to be blended */
for ( master = 0; master < varData->regionIdxCount; master++ )
{
- FT_Fixed scalar = FT_FIXED_ONE;
+ FT_Fixed scalar = 0x10000L;
FT_UInt regionIndex = varData->regionIndices[master];
GX_AxisCoords axis = itemStore->varRegionList[regionIndex].axisList;
@@ -881,47 +896,43 @@
/* inner loop steps through axes in this region */
for ( j = 0; j < itemStore->axisCount; j++, axis++ )
{
- FT_Fixed axisScalar;
-
-
/* compute the scalar contribution of this axis; */
/* ignore invalid ranges */
if ( axis->startCoord > axis->peakCoord ||
axis->peakCoord > axis->endCoord )
- axisScalar = FT_FIXED_ONE;
+ continue;
else if ( axis->startCoord < 0 &&
axis->endCoord > 0 &&
axis->peakCoord != 0 )
- axisScalar = FT_FIXED_ONE;
+ continue;
/* peak of 0 means ignore this axis */
else if ( axis->peakCoord == 0 )
- axisScalar = FT_FIXED_ONE;
+ continue;
- /* ignore this region if coords are out of range */
- else if ( face->blend->normalizedcoords[j] < axis->startCoord ||
- face->blend->normalizedcoords[j] > axis->endCoord )
- axisScalar = 0;
+ else if ( face->blend->normalizedcoords[j] == axis->peakCoord )
+ continue;
- /* calculate a proportional factor */
- else
+ /* ignore this region if coords are out of range */
+ else if ( face->blend->normalizedcoords[j] <= axis->startCoord ||
+ face->blend->normalizedcoords[j] >= axis->endCoord )
{
- if ( face->blend->normalizedcoords[j] == axis->peakCoord )
- axisScalar = FT_FIXED_ONE;
- else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
- axisScalar =
- FT_DivFix( face->blend->normalizedcoords[j] - axis->startCoord,
- axis->peakCoord - axis->startCoord );
- else
- axisScalar =
- FT_DivFix( axis->endCoord - face->blend->normalizedcoords[j],
- axis->endCoord - axis->peakCoord );
+ scalar = 0;
+ break;
}
- /* take product of all the axis scalars */
- scalar = FT_MulFix( scalar, axisScalar );
-
+ /* cumulative product of all the axis scalars */
+ else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
+ scalar =
+ FT_MulDiv( scalar,
+ face->blend->normalizedcoords[j] - axis->startCoord,
+ axis->peakCoord - axis->startCoord );
+ else
+ scalar =
+ FT_MulDiv( scalar,
+ axis->endCoord - face->blend->normalizedcoords[j],
+ axis->endCoord - axis->peakCoord );
} /* per-axis loop */
/* get the scaled delta for this region */
@@ -937,25 +948,29 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_hvadvance_adjust */
- /* */
- /* <Description> */
- /* Apply `HVAR' advance width or `VVAR' advance height adjustment of */
- /* a given glyph. */
- /* */
- /* <Input> */
- /* gindex :: The glyph index. */
- /* */
- /* vertical :: If set, handle `VVAR' table. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* adelta :: Points to width or height value that gets modified. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_hvadvance_adjust
+ *
+ * @Description:
+ * Apply `HVAR' advance width or `VVAR' advance height adjustment of
+ * a given glyph.
+ *
+ * @Input:
+ * gindex ::
+ * The glyph index.
+ *
+ * vertical ::
+ * If set, handle `VVAR' table.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ *
+ * adelta ::
+ * Points to width or height value that gets modified.
+ */
static FT_Error
tt_hvadvance_adjust( TT_Face face,
FT_UInt gindex,
@@ -1151,20 +1166,21 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_mvar */
- /* */
- /* <Description> */
- /* Parse the `MVAR' table. */
- /* */
- /* Some memory may remain allocated on error; it is always freed in */
- /* `tt_done_blend', however. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_var_load_mvar
+ *
+ * @Description:
+ * Parse the `MVAR' table.
+ *
+ * Some memory may remain allocated on error; it is always freed in
+ * `tt_done_blend', however.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ */
static void
ft_var_load_mvar( TT_Face face )
{
@@ -1297,22 +1313,26 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_apply_mvar */
- /* */
- /* <Description> */
- /* Apply `MVAR' table adjustments. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_apply_mvar
+ *
+ * @Description:
+ * Apply `MVAR' table adjustments.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ */
FT_LOCAL_DEF( void )
tt_apply_mvar( TT_Face face )
{
GX_Blend blend = face->blend;
GX_Value value, limit;
+ FT_Short mvar_hasc_delta = 0;
+ FT_Short mvar_hdsc_delta = 0;
+ FT_Short mvar_hlgp_delta = 0;
if ( !( face->variation_support & TT_FACE_FLAG_VAR_MVAR ) )
@@ -1347,6 +1367,14 @@
/* since we handle both signed and unsigned values as FT_Short, */
/* ensure proper overflow arithmetic */
*p = (FT_Short)( value->unmodified + (FT_Short)delta );
+
+ /* Treat hasc, hdsc and hlgp specially, see below. */
+ if ( value->tag == MVAR_TAG_HASC )
+ mvar_hasc_delta = (FT_Short)delta;
+ else if ( value->tag == MVAR_TAG_HDSC )
+ mvar_hdsc_delta = (FT_Short)delta;
+ else if ( value->tag == MVAR_TAG_HLGP )
+ mvar_hlgp_delta = (FT_Short)delta;
}
}
@@ -1354,25 +1382,40 @@
{
FT_Face root = &face->root;
-
- if ( face->os2.version != 0xFFFFU )
- {
- if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
- {
- root->ascender = face->os2.sTypoAscender;
- root->descender = face->os2.sTypoDescender;
-
- root->height = root->ascender - root->descender +
- face->os2.sTypoLineGap;
- }
- else
- {
- root->ascender = (FT_Short)face->os2.usWinAscent;
- root->descender = -(FT_Short)face->os2.usWinDescent;
-
- root->height = root->ascender - root->descender;
- }
- }
+ /*
+ * Apply the deltas of hasc, hdsc and hlgp to the FT_Face's ascender,
+ * descender and height attributes, no matter how they were originally
+ * computed.
+ *
+ * (Code that ignores those and accesses the font's metrics values
+ * directly is already served by the delta application code above.)
+ *
+ * The MVAR table supports variations for both typo and win metrics.
+ * According to Behdad Esfahbod, the thinking of the working group was
+ * that no one uses win metrics anymore for setting line metrics (the
+ * specification even calls these metrics "horizontal clipping
+ * ascent/descent", probably for their role on the Windows platform in
+ * computing clipping boxes), and new fonts should use typo metrics, so
+ * typo deltas should be applied to whatever sfnt_load_face decided the
+ * line metrics should be.
+ *
+ * Before, the following led to different line metrics between default
+ * outline and instances, visible when e.g. the default outlines were
+ * used as the regular face and instances for everything else:
+ *
+ * 1. sfnt_load_face applied the hhea metrics by default.
+ * 2. This code later applied the typo metrics by default, regardless of
+ * whether they were actually changed or the font had the OS/2 table's
+ * fsSelection's bit 7 (USE_TYPO_METRICS) set.
+ */
+ FT_Short current_line_gap = root->height - root->ascender +
+ root->descender;
+
+
+ root->ascender = root->ascender + mvar_hasc_delta;
+ root->descender = root->descender + mvar_hdsc_delta;
+ root->height = root->ascender - root->descender +
+ current_line_gap + mvar_hlgp_delta;
root->underline_position = face->postscript.underlinePosition -
face->postscript.underlineThickness / 2;
@@ -1400,21 +1443,22 @@
} GX_GVar_Head;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_gvar */
- /* */
- /* <Description> */
- /* Parse the `gvar' table if present. If `fvar' is there, `gvar' had */
- /* better be there too. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * ft_var_load_gvar
+ *
+ * @Description:
+ * Parse the `gvar' table if present. If `fvar' is there, `gvar' had
+ * better be there too.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
static FT_Error
ft_var_load_gvar( TT_Face face )
{
@@ -1512,28 +1556,55 @@
if ( gvar_head.flags & 1 )
{
+ FT_ULong limit = gvar_start + table_len;
+
+
/* long offsets (one more offset than glyphs, to mark size of last) */
if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) )
goto Exit;
for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+ {
blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG();
-
- FT_FRAME_EXIT();
+ /* use `>', not `>=' */
+ if ( blend->glyphoffsets[i] > limit )
+ {
+ FT_TRACE2(( "ft_var_load_gvar:"
+ " invalid glyph variation data offset for index %d\n",
+ i ));
+ error = FT_THROW( Invalid_Table );
+ break;
+ }
+ }
}
else
{
+ FT_ULong limit = gvar_start + table_len;
+
+
/* 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();
+ /* use `>', not `>=' */
+ if ( blend->glyphoffsets[i] > limit )
+ {
+ FT_TRACE2(( "ft_var_load_gvar:"
+ " invalid glyph variation data offset for index %d\n",
+ i ));
+ error = FT_THROW( Invalid_Table );
+ break;
+ }
+ }
}
+ FT_FRAME_EXIT();
+ if ( error )
+ goto Exit;
+
if ( blend->tuplecount != 0 )
{
if ( FT_NEW_ARRAY( blend->tuplecoords,
@@ -1550,7 +1621,7 @@
for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ )
{
blend->tuplecoords[i * gvar_head.axisCount + j] =
- FT_GET_SHORT() * 4; /* convert to FT_Fixed */
+ FT_fdot14ToFixed( FT_GET_SHORT() );
FT_TRACE5(( "%.5f ",
blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
}
@@ -1567,33 +1638,38 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -1607,13 +1683,8 @@
for ( i = 0; i < blend->num_axis; i++ )
{
- FT_TRACE6(( " axis coordinate %d (%.5f):\n",
+ FT_TRACE6(( " axis %d coordinate %.5f:\n",
i, blend->normalizedcoords[i] / 65536.0 ));
- if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
- FT_TRACE6(( " intermediate coordinates %d (%.5f, %.5f):\n",
- i,
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
/* It's not clear why (for intermediate tuples) we don't need */
/* to check against start/end -- the documentation says we don't. */
@@ -1622,7 +1693,7 @@
if ( tuple_coords[i] == 0 )
{
- FT_TRACE6(( " tuple coordinate is zero, ignored\n", i ));
+ FT_TRACE6(( " tuple coordinate is zero, ignore\n", i ));
continue;
}
@@ -1635,7 +1706,7 @@
if ( blend->normalizedcoords[i] == tuple_coords[i] )
{
- FT_TRACE6(( " tuple coordinate value %.5f fits perfectly\n",
+ FT_TRACE6(( " tuple coordinate %.5f fits perfectly\n",
tuple_coords[i] / 65536.0 ));
/* `apply' does not change */
continue;
@@ -1648,13 +1719,13 @@
if ( blend->normalizedcoords[i] < FT_MIN( 0, tuple_coords[i] ) ||
blend->normalizedcoords[i] > FT_MAX( 0, tuple_coords[i] ) )
{
- FT_TRACE6(( " tuple coordinate value %.5f is exceeded, stop\n",
+ FT_TRACE6(( " tuple coordinate %.5f is exceeded, stop\n",
tuple_coords[i] / 65536.0 ));
apply = 0;
break;
}
- FT_TRACE6(( " tuple coordinate value %.5f fits\n",
+ FT_TRACE6(( " tuple coordinate %.5f fits\n",
tuple_coords[i] / 65536.0 ));
apply = FT_MulDiv( apply,
blend->normalizedcoords[i],
@@ -1664,10 +1735,10 @@
{
/* intermediate tuple */
- if ( blend->normalizedcoords[i] < im_start_coords[i] ||
- blend->normalizedcoords[i] > im_end_coords[i] )
+ if ( blend->normalizedcoords[i] <= im_start_coords[i] ||
+ blend->normalizedcoords[i] >= im_end_coords[i] )
{
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] is exceeded,"
+ FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ is exceeded,"
" stop\n",
im_start_coords[i] / 65536.0,
im_end_coords[i] / 65536.0 ));
@@ -1675,25 +1746,17 @@
break;
}
- else if ( blend->normalizedcoords[i] < tuple_coords[i] )
- {
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
+ FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ fits\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
+ if ( blend->normalizedcoords[i] < tuple_coords[i] )
apply = FT_MulDiv( apply,
blend->normalizedcoords[i] - im_start_coords[i],
tuple_coords[i] - im_start_coords[i] );
- }
-
else
- {
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
apply = FT_MulDiv( apply,
im_end_coords[i] - blend->normalizedcoords[i],
im_end_coords[i] - tuple_coords[i] );
- }
}
}
@@ -1756,11 +1819,11 @@
}
if ( coord < a->def )
- normalized[i] = -FT_DivFix( coord - a->def,
- a->minimum - a->def );
+ normalized[i] = -FT_DivFix( SUB_LONG( coord, a->def ),
+ SUB_LONG( a->minimum, a->def ) );
else if ( coord > a->def )
- normalized[i] = FT_DivFix( coord - a->def,
- a->maximum - a->def );
+ normalized[i] = FT_DivFix( SUB_LONG( coord, a->def ),
+ SUB_LONG( a->maximum, a->def ) );
else
normalized[i] = 0;
}
@@ -1910,27 +1973,29 @@
} GX_FVar_Axis;
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_MM_Var */
- /* */
- /* <Description> */
- /* Check that the font's `fvar' table is valid, parse it, and return */
- /* those data. It also loads (and parses) the `MVAR' table, if */
- /* possible. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* TT_Get_MM_Var initializes the blend structure. */
- /* */
- /* <Output> */
- /* master :: The `fvar' data (must be freed by caller). Can be NULL, */
- /* which makes this function simply load MM support. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Get_MM_Var
+ *
+ * @Description:
+ * Check that the font's `fvar' table is valid, parse it, and return
+ * those data. It also loads (and parses) the `MVAR' table, if
+ * possible.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ * TT_Get_MM_Var initializes the blend structure.
+ *
+ * @Output:
+ * master ::
+ * The `fvar' data (must be freed by caller). Can be NULL,
+ * which makes this function simply load MM support.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Get_MM_Var( TT_Face face,
FT_MM_Var* *master )
@@ -2507,11 +2572,14 @@
if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) )
{
- FT_UInt idx = (FT_UInt)face->root.face_index >> 16;
+ FT_UInt instance_index = (FT_UInt)face->root.face_index >> 16;
c = blend->normalizedcoords + i;
- n = blend->normalized_stylecoords + idx * mmvar->num_axis + i;
+ n = blend->normalized_stylecoords +
+ ( instance_index - 1 ) * mmvar->num_axis +
+ i;
+
for ( j = i; j < mmvar->num_axis; j++, n++, c++ )
if ( *c != *n )
have_diff = 1;
@@ -2526,7 +2594,11 @@
/* return value -1 indicates `no change' */
if ( !have_diff )
+ {
+ face->doblend = TRUE;
+
return -1;
+ }
for ( ; i < mmvar->num_axis; i++ )
{
@@ -2590,31 +2662,34 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_MM_Blend */
- /* */
- /* <Description> */
- /* Set the blend (normalized) coordinates for this instance of the */
- /* font. Check that the `gvar' table is reasonable and does some */
- /* initial preparation. */
- /* */
- /* <InOut> */
- /* face :: The font. */
- /* Initialize the blend structure with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use the default value (0) for the remaining axes. */
- /* */
- /* coords :: An array of `num_coords', each between [-1,1]. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Set_MM_Blend
+ *
+ * @Description:
+ * Set the blend (normalized) coordinates for this instance of the
+ * font. Check that the `gvar' table is reasonable and does some
+ * initial preparation.
+ *
+ * @InOut:
+ * face ::
+ * The font.
+ * Initialize the blend structure with `gvar' data.
+ *
+ * @Input:
+ * num_coords ::
+ * The number of available coordinates. If it is
+ * larger than the number of axes, ignore the excess
+ * values. If it is smaller than the number of axes,
+ * use the default value (0) for the remaining axes.
+ *
+ * coords ::
+ * An array of `num_coords', each between [-1,1].
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Set_MM_Blend( TT_Face face,
FT_UInt num_coords,
@@ -2636,29 +2711,32 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_MM_Blend */
- /* */
- /* <Description> */
- /* Get the blend (normalized) coordinates for this instance of the */
- /* font. */
- /* */
- /* <InOut> */
- /* face :: The font. */
- /* Initialize the blend structure with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, set the excess */
- /* values to 0. */
- /* */
- /* coords :: An array of `num_coords', each between [-1,1]. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Get_MM_Blend
+ *
+ * @Description:
+ * Get the blend (normalized) coordinates for this instance of the
+ * font.
+ *
+ * @InOut:
+ * face ::
+ * The font.
+ * Initialize the blend structure with `gvar' data.
+ *
+ * @Input:
+ * num_coords ::
+ * The number of available coordinates. If it is
+ * larger than the number of axes, set the excess
+ * values to 0.
+ *
+ * coords ::
+ * An array of `num_coords', each between [-1,1].
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Get_MM_Blend( TT_Face face,
FT_UInt num_coords,
@@ -2712,31 +2790,34 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_Var_Design */
- /* */
- /* <Description> */
- /* Set the coordinates for the instance, measured in the user */
- /* coordinate system. Parse the `avar' table (if present) to convert */
- /* from user to normalized coordinates. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* Initialize the blend struct with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use the default values for the remaining axes. */
- /* */
- /* coords :: A coordinate array with `num_coords' elements. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Set_Var_Design
+ *
+ * @Description:
+ * Set the coordinates for the instance, measured in the user
+ * coordinate system. Parse the `avar' table (if present) to convert
+ * from user to normalized coordinates.
+ *
+ * @InOut:
+ * face ::
+ * The font face.
+ * Initialize the blend struct with `gvar' data.
+ *
+ * @Input:
+ * num_coords ::
+ * The number of available coordinates. If it is
+ * larger than the number of axes, ignore the excess
+ * values. If it is smaller than the number of axes,
+ * use the default values for the remaining axes.
+ *
+ * coords ::
+ * A coordinate array with `num_coords' elements.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Set_Var_Design( TT_Face face,
FT_UInt num_coords,
@@ -2854,28 +2935,31 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Var_Design */
- /* */
- /* <Description> */
- /* Get the design coordinates of the currently selected interpolated */
- /* font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of design coordinates to retrieve. If it */
- /* is larger than the number of axes, set the excess */
- /* values to~0. */
- /* */
- /* <Output> */
- /* coords :: The design coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Get_Var_Design
+ *
+ * @Description:
+ * Get the design coordinates of the currently selected interpolated
+ * font.
+ *
+ * @Input:
+ * face ::
+ * A handle to the source face.
+ *
+ * num_coords ::
+ * The number of design coordinates to retrieve. If it
+ * is larger than the number of axes, set the excess
+ * values to~0.
+ *
+ * @Output:
+ * coords ::
+ * The design coordinates array.
+ *
+ * @Return:
+ * FreeType error code. 0~means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Get_Var_Design( TT_Face face,
FT_UInt num_coords,
@@ -2929,24 +3013,26 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_Named_Instance */
- /* */
- /* <Description> */
- /* Set the given named instance, also resetting any further */
- /* variation. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* instance_index :: The instance index, starting with value 1. */
- /* Value 0 indicates to not use an instance. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Set_Named_Instance
+ *
+ * @Description:
+ * Set the given named instance, also resetting any further
+ * variation.
+ *
+ * @Input:
+ * face ::
+ * A handle to the source face.
+ *
+ * instance_index ::
+ * The instance index, starting with value 1.
+ * Value 0 indicates to not use an instance.
+ *
+ * @Return:
+ * FreeType error code. 0~means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Set_Named_Instance( TT_Face face,
FT_UInt instance_index )
@@ -2973,7 +3059,7 @@
if ( instance_index > num_instances )
goto Exit;
- if ( instance_index > 0 && mmvar->namedstyle )
+ if ( instance_index > 0 )
{
FT_Memory memory = face->root.memory;
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
@@ -2999,7 +3085,12 @@
mmvar->num_axis,
named_style->coords );
if ( error )
+ {
+ /* internal error code -1 means `no change' */
+ if ( error == -1 )
+ error = FT_Err_Ok;
goto Exit;
+ }
}
else
error = TT_Set_Var_Design( face, 0, NULL );
@@ -3022,48 +3113,77 @@
/*************************************************************************/
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ static FT_Error
+ tt_cvt_ready_iterator( FT_ListNode node,
+ void* user )
+ {
+ TT_Size size = (TT_Size)node->data;
+
+ FT_UNUSED( user );
+
+
+ size->cvt_ready = -1;
+
+ return FT_Err_Ok;
+ }
+
+
+ /**************************************************************************
+ *
+ * @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, spoint_count = 0;
+ FT_Error error;
+ FT_Memory memory = stream->memory;
+
+ FT_Face root = &face->root;
+
+ 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_UInt spoint_count = 0;
+
FT_UShort* sharedpoints = NULL;
FT_UShort* localpoints = NULL;
FT_UShort* points;
- FT_Short* deltas;
+
+ FT_Fixed* deltas = NULL;
+ FT_Fixed* cvt_deltas = NULL;
FT_TRACE2(( "CVAR " ));
@@ -3146,11 +3266,14 @@
}
FT_TRACE5(( "cvar: there %s %d tuple%s:\n",
- ( tupleCount & 0xFFF ) == 1 ? "is" : "are",
- tupleCount & 0xFFF,
- ( tupleCount & 0xFFF ) == 1 ? "" : "s" ));
+ ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "is" : "are",
+ tupleCount & GX_TC_TUPLE_COUNT_MASK,
+ ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" ));
- for ( i = 0; i < ( tupleCount & 0xFFF ); i++ )
+ if ( FT_NEW_ARRAY( cvt_deltas, face->cvt_size ) )
+ goto FExit;
+
+ for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
{
FT_UInt tupleDataSize;
FT_UInt tupleIndex;
@@ -3165,8 +3288,7 @@
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
- /* short frac to fixed */
+ tuple_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
}
else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
{
@@ -3174,20 +3296,32 @@
" invalid tuple index\n" ));
error = FT_THROW( Invalid_Table );
- goto Exit;
+ goto FExit;
}
else
+ {
+ if ( !blend->tuplecoords )
+ {
+ FT_TRACE2(( "tt_face_vary_cvt:"
+ " no valid tuple coordinates available\n" ));
+
+ error = FT_THROW( Invalid_Table );
+ goto FExit;
+ }
+
FT_MEM_COPY(
tuple_coords,
- &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
+ blend->tuplecoords +
+ ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis,
blend->num_axis * sizeof ( FT_Fixed ) );
+ }
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() * 4;
+ im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() * 4;
+ im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
}
apply = ft_var_apply_tuple( blend,
@@ -3241,17 +3375,21 @@
/* this means that there are deltas for every entry in cvt */
for ( j = 0; j < face->cvt_size; j++ )
{
- FT_Long orig_cvt = face->cvt[j];
+ FT_Fixed old_cvt_delta;
- face->cvt[j] = (FT_Short)( orig_cvt +
- FT_MulFix( deltas[j], apply ) );
+ old_cvt_delta = cvt_deltas[j];
+ cvt_deltas[j] = old_cvt_delta + FT_MulFix( deltas[j], apply );
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( orig_cvt != face->cvt[j] )
+ if ( old_cvt_delta != cvt_deltas[j] )
{
- FT_TRACE7(( " %d: %d -> %d\n",
- j, orig_cvt, face->cvt[j] ));
+ FT_TRACE7(( " %d: %f -> %f\n",
+ j,
+ ( FT_fdot6ToFixed( face->cvt[j] ) +
+ old_cvt_delta ) / 65536.0,
+ ( FT_fdot6ToFixed( face->cvt[j] ) +
+ cvt_deltas[j] ) / 65536.0 ));
count++;
}
#endif
@@ -3274,23 +3412,26 @@
for ( j = 0; j < point_count; j++ )
{
- int pindex;
- FT_Long orig_cvt;
+ int pindex;
+ FT_Fixed old_cvt_delta;
pindex = points[j];
if ( (FT_ULong)pindex >= face->cvt_size )
continue;
- orig_cvt = face->cvt[pindex];
- face->cvt[pindex] = (FT_Short)( orig_cvt +
- FT_MulFix( deltas[j], apply ) );
+ old_cvt_delta = cvt_deltas[pindex];
+ cvt_deltas[pindex] = old_cvt_delta + FT_MulFix( deltas[j], apply );
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( orig_cvt != face->cvt[pindex] )
+ if ( old_cvt_delta != cvt_deltas[pindex] )
{
- FT_TRACE7(( " %d: %d -> %d\n",
- pindex, orig_cvt, face->cvt[pindex] ));
+ FT_TRACE7(( " %d: %f -> %f\n",
+ pindex,
+ ( FT_fdot6ToFixed( face->cvt[pindex] ) +
+ old_cvt_delta ) / 65536.0,
+ ( FT_fdot6ToFixed( face->cvt[pindex] ) +
+ cvt_deltas[pindex] ) / 65536.0 ));
count++;
}
#endif
@@ -3313,6 +3454,9 @@
FT_TRACE5(( "\n" ));
+ for ( i = 0; i < face->cvt_size; i++ )
+ face->cvt[i] += FT_fixedToFdot6( cvt_deltas[i] );
+
FExit:
FT_FRAME_EXIT();
@@ -3322,6 +3466,13 @@
FT_FREE( tuple_coords );
FT_FREE( im_start_coords );
FT_FREE( im_end_coords );
+ FT_FREE( cvt_deltas );
+
+ /* iterate over all FT_Size objects and set `cvt_ready' to -1 */
+ /* to trigger rescaling of all CVT values */
+ FT_List_Iterate( &root->sizes_list,
+ tt_cvt_ready_iterator,
+ NULL );
return error;
}
@@ -3367,9 +3518,8 @@
/* between `p1' and `p2', using `ref1' and `ref2' as the reference */
/* point indices. */
- /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */
- /* `Ins_IUP' */
-
+ /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */
+ /* `Ins_IUP' with spec differences in handling ill-defined cases. */
static void
tt_delta_interpolate( int p1,
int p2,
@@ -3528,61 +3678,89 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Vary_Apply_Glyph_Deltas */
- /* */
- /* <Description> */
- /* Apply the appropriate deltas to the current glyph. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* glyph_index :: The index of the glyph being modified. */
- /* */
- /* n_points :: The number of the points in the glyph, including */
- /* phantom points. */
- /* */
- /* <InOut> */
- /* outline :: The outline to change. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Vary_Apply_Glyph_Deltas
+ *
+ * @Description:
+ * Apply the appropriate deltas to the current glyph.
+ *
+ * @Input:
+ * face ::
+ * A handle to the target face object.
+ *
+ * glyph_index ::
+ * The index of the glyph being modified.
+ *
+ * n_points ::
+ * The number of the points in the glyph, including
+ * phantom points.
+ *
+ * @InOut:
+ * outline ::
+ * The outline to change.
+ *
+ * @Output:
+ * unrounded ::
+ * An array with `n_points' elements that is filled with unrounded
+ * point coordinates (in 26.6 format).
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Vary_Apply_Glyph_Deltas( TT_Face face,
FT_UInt glyph_index,
FT_Outline* outline,
+ FT_Vector* unrounded,
FT_UInt n_points )
{
- FT_Stream stream = face->root.stream;
- FT_Memory memory = stream->memory;
- GX_Blend blend = face->blend;
+ FT_Error error;
+ FT_Stream stream = face->root.stream;
+ FT_Memory memory = stream->memory;
- FT_Vector* points_org = NULL;
- FT_Vector* points_out = NULL;
+ FT_Vector* points_org = NULL; /* coordinates in 16.16 format */
+ FT_Vector* points_out = NULL; /* coordinates in 16.16 format */
FT_Bool* has_delta = NULL;
- FT_Error error;
- FT_ULong glyph_start;
- FT_UInt tupleCount;
- FT_ULong offsetToData;
- FT_ULong here;
- FT_UInt i, j;
- FT_Fixed* tuple_coords = NULL;
- FT_Fixed* im_start_coords = NULL;
- FT_Fixed* im_end_coords = NULL;
- FT_UInt point_count, spoint_count = 0;
+ FT_ULong glyph_start;
+
+ FT_UInt tupleCount;
+ FT_ULong offsetToData;
+ FT_ULong dataSize;
+
+ 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_UInt spoint_count = 0;
+
FT_UShort* sharedpoints = NULL;
FT_UShort* localpoints = NULL;
FT_UShort* points;
- FT_Short *deltas_x, *deltas_y;
+
+ FT_Fixed* deltas_x = NULL;
+ FT_Fixed* deltas_y = NULL;
+ FT_Fixed* point_deltas_x = NULL;
+ FT_Fixed* point_deltas_y = NULL;
if ( !face->doblend || !blend )
return FT_THROW( Invalid_Argument );
+ for ( i = 0; i < n_points; i++ )
+ {
+ unrounded[i].x = INT_TO_F26DOT6( outline->points[i].x );
+ unrounded[i].y = INT_TO_F26DOT6( outline->points[i].y );
+ }
+
if ( glyph_index >= blend->gv_glyphcnt ||
blend->glyphoffsets[glyph_index] ==
blend->glyphoffsets[glyph_index + 1] )
@@ -3597,9 +3775,11 @@
FT_NEW_ARRAY( has_delta, n_points ) )
goto Fail1;
- if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
- FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] -
- blend->glyphoffsets[glyph_index] ) )
+ dataSize = blend->glyphoffsets[glyph_index + 1] -
+ blend->glyphoffsets[glyph_index];
+
+ if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
+ FT_FRAME_ENTER( dataSize ) )
goto Fail1;
glyph_start = FT_Stream_FTell( stream );
@@ -3615,8 +3795,8 @@
offsetToData = FT_GET_USHORT();
/* rough sanity test */
- if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
- blend->gvar_size )
+ if ( offsetToData > dataSize ||
+ ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 > dataSize )
{
FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
" invalid glyph variation array header\n" ));
@@ -3646,8 +3826,15 @@
tupleCount & GX_TC_TUPLE_COUNT_MASK,
( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" ));
+ if ( FT_NEW_ARRAY( point_deltas_x, n_points ) ||
+ FT_NEW_ARRAY( point_deltas_y, n_points ) )
+ goto Fail3;
+
for ( j = 0; j < n_points; j++ )
- points_org[j] = outline->points[j];
+ {
+ points_org[j].x = FT_intToFixed( outline->points[j].x );
+ points_org[j].y = FT_intToFixed( outline->points[j].y );
+ }
for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
{
@@ -3664,8 +3851,7 @@
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
- /* short frac to fixed */
+ tuple_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
}
else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
{
@@ -3673,20 +3859,21 @@
" invalid tuple index\n" ));
error = FT_THROW( Invalid_Table );
- goto Fail2;
+ goto Fail3;
}
else
FT_MEM_COPY(
tuple_coords,
- &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
+ blend->tuplecoords +
+ ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis,
blend->num_axis * sizeof ( FT_Fixed ) );
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() * 4;
+ im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() * 4;
+ im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
}
apply = ft_var_apply_tuple( blend,
@@ -3742,14 +3929,17 @@
/* this means that there are deltas for every point in the glyph */
for ( j = 0; j < n_points; j++ )
{
- FT_Pos delta_x = FT_MulFix( deltas_x[j], apply );
- FT_Pos delta_y = FT_MulFix( deltas_y[j], apply );
+ FT_Fixed old_point_delta_x = point_deltas_x[j];
+ FT_Fixed old_point_delta_y = point_deltas_y[j];
+
+ FT_Fixed point_delta_x = FT_MulFix( deltas_x[j], apply );
+ FT_Fixed point_delta_y = FT_MulFix( deltas_y[j], apply );
if ( j < n_points - 4 )
{
- outline->points[j].x += delta_x;
- outline->points[j].y += delta_y;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
}
else
{
@@ -3759,33 +3949,37 @@
if ( j == ( n_points - 4 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_LSB ) )
- outline->points[j].x += delta_x;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
else if ( j == ( n_points - 3 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_HADVANCE ) )
- outline->points[j].x += delta_x;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
else if ( j == ( n_points - 2 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_TSB ) )
- outline->points[j].y += delta_y;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
else if ( j == ( n_points - 1 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_VADVANCE ) )
- outline->points[j].y += delta_y;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
}
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( delta_x || delta_y )
+ if ( point_delta_x || point_delta_y )
{
- FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
+ FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n",
j,
- outline->points[j].x - delta_x,
- outline->points[j].y - delta_y,
- outline->points[j].x,
- outline->points[j].y ));
+ ( FT_intToFixed( outline->points[j].x ) +
+ old_point_delta_x ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].y ) +
+ old_point_delta_y ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].x ) +
+ point_deltas_x[j] ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].y ) +
+ point_deltas_y[j] ) / 65536.0 ));
count++;
}
#endif
@@ -3837,14 +4031,17 @@
for ( j = 0; j < n_points; j++ )
{
- FT_Pos delta_x = points_out[j].x - points_org[j].x;
- FT_Pos delta_y = points_out[j].y - points_org[j].y;
+ FT_Fixed old_point_delta_x = point_deltas_x[j];
+ FT_Fixed old_point_delta_y = point_deltas_y[j];
+
+ FT_Pos point_delta_x = points_out[j].x - points_org[j].x;
+ FT_Pos point_delta_y = points_out[j].y - points_org[j].y;
if ( j < n_points - 4 )
{
- outline->points[j].x += delta_x;
- outline->points[j].y += delta_y;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
}
else
{
@@ -3854,33 +4051,37 @@
if ( j == ( n_points - 4 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_LSB ) )
- outline->points[j].x += delta_x;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
else if ( j == ( n_points - 3 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_HADVANCE ) )
- outline->points[j].x += delta_x;
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
else if ( j == ( n_points - 2 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_TSB ) )
- outline->points[j].y += delta_y;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
else if ( j == ( n_points - 1 ) &&
!( face->variation_support &
TT_FACE_FLAG_VAR_VADVANCE ) )
- outline->points[j].y += delta_y;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
}
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( delta_x || delta_y )
+ if ( point_delta_x || point_delta_y )
{
- FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
+ FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n",
j,
- outline->points[j].x - delta_x,
- outline->points[j].y - delta_y,
- outline->points[j].x,
- outline->points[j].y ));
+ ( FT_intToFixed( outline->points[j].x ) +
+ old_point_delta_x ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].y ) +
+ old_point_delta_y ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].x ) +
+ point_deltas_x[j] ) / 65536.0,
+ ( FT_intToFixed( outline->points[j].y ) +
+ point_deltas_y[j] ) / 65536.0 ));
count++;
}
#endif
@@ -3904,6 +4105,19 @@
FT_TRACE5(( "\n" ));
+ for ( i = 0; i < n_points; i++ )
+ {
+ unrounded[i].x += FT_fixedToFdot6( point_deltas_x[i] );
+ unrounded[i].y += FT_fixedToFdot6( point_deltas_y[i] );
+
+ outline->points[i].x += FT_fixedToInt( point_deltas_x[i] );
+ outline->points[i].y += FT_fixedToInt( point_deltas_y[i] );
+ }
+
+ Fail3:
+ FT_FREE( point_deltas_x );
+ FT_FREE( point_deltas_y );
+
Fail2:
if ( sharedpoints != ALL_POINTS )
FT_FREE( sharedpoints );
@@ -3922,16 +4136,16 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_get_var_blend */
- /* */
- /* <Description> */
- /* An extended internal version of `TT_Get_MM_Blend' that returns */
- /* pointers instead of copying data, without any initialization of */
- /* the MM machinery in case it isn't loaded yet. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_get_var_blend
+ *
+ * @Description:
+ * An extended internal version of `TT_Get_MM_Blend' that returns
+ * pointers instead of copying data, without any initialization of
+ * the MM machinery in case it isn't loaded yet.
+ */
FT_LOCAL_DEF( FT_Error )
tt_get_var_blend( TT_Face face,
FT_UInt *num_coords,
@@ -3993,14 +4207,14 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_done_blend */
- /* */
- /* <Description> */
- /* Free the blend internal data structure. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_done_blend
+ *
+ * @Description:
+ * Free the blend internal data structure.
+ */
FT_LOCAL_DEF( void )
tt_done_blend( TT_Face face )
{
diff --git a/freetype/src/truetype/ttgxvar.h b/freetype/src/truetype/ttgxvar.h
index a37bb902..07c99b64 100644
--- a/freetype/src/truetype/ttgxvar.h
+++ b/freetype/src/truetype/ttgxvar.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.h */
-/* */
-/* TrueType GX Font Variation loader (specification) */
-/* */
-/* Copyright 2004-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttgxvar.h
+ *
+ * TrueType GX Font Variation loader (specification)
+ *
+ * Copyright (C) 2004-2019 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_
@@ -29,15 +29,15 @@ FT_BEGIN_HEADER
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_AVarCorrespondenceRec */
- /* */
- /* <Description> */
- /* A data structure representing `shortFracCorrespondence' in `avar' */
- /* table according to the specifications from Apple. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -46,15 +46,15 @@ FT_BEGIN_HEADER
} GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_AVarRec */
- /* */
- /* <Description> */
- /* Data from the segment field of `avar' table. */
- /* There is one of these for each axis. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
@@ -114,14 +114,14 @@ FT_BEGIN_HEADER
} GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_HVVarTableRec */
- /* */
- /* <Description> */
- /* Data from either the `HVAR' or `VVAR' table. */
- /* */
+ /**************************************************************************
+ *
+ * @Struct:
+ * GX_HVVarTableRec
+ *
+ * @Description:
+ * Data from either the `HVAR' or `VVAR' table.
+ */
typedef struct GX_HVVarTableRec_
{
GX_ItemVarStoreRec itemStore; /* Item Variation Store */
@@ -191,14 +191,14 @@ FT_BEGIN_HEADER
} GX_ValueRec, *GX_Value;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_MVarTableRec */
- /* */
- /* <Description> */
- /* Data from the `MVAR' table. */
- /* */
+ /**************************************************************************
+ *
+ * @Struct:
+ * GX_MVarTableRec
+ *
+ * @Description:
+ * Data from the `MVAR' table.
+ */
typedef struct GX_MVarTableRec_
{
FT_UShort valueCount;
@@ -209,95 +209,95 @@ FT_BEGIN_HEADER
} GX_MVarTableRec, *GX_MVarTable;
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_BlendRec */
- /* */
- /* <Description> */
- /* Data for interpolating a font from a distortable font specified */
- /* by the GX *var tables ([fgcahvm]var). */
- /* */
- /* <Fields> */
- /* num_axis :: */
- /* The number of axes along which interpolation may happen. */
- /* */
- /* coords :: */
- /* An array of design coordinates (in user space) indicating the */
- /* contribution along each axis to the final interpolated font. */
- /* `normalizedcoords' holds the same values. */
- /* */
- /* normalizedcoords :: */
- /* An array of normalized values (between [-1,1]) indicating the */
- /* contribution along each axis to the final interpolated font. */
- /* `coords' holds the same values. */
- /* */
- /* mmvar :: */
- /* Data from the `fvar' table. */
- /* */
- /* mmvar_len :: */
- /* The length of the `mmvar' structure. */
- /* */
- /* normalized_stylecoords :: */
- /* A two-dimensional array that holds the named instance data from */
- /* `mmvar' as normalized values. */
- /* */
- /* avar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `avar' */
- /* table. */
- /* */
- /* avar_segment :: */
- /* Data from the `avar' table. */
- /* */
- /* hvar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `hvar' */
- /* table. */
- /* */
- /* hvar_checked :: */
- /* A Boolean; if set, FreeType successfully loaded and parsed the */
- /* `hvar' table. */
- /* */
- /* hvar_error :: */
- /* If loading and parsing of the `hvar' table failed, this field */
- /* holds the corresponding error code. */
- /* */
- /* hvar_table :: */
- /* Data from the `hvar' table. */
- /* */
- /* vvar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `vvar' */
- /* table. */
- /* */
- /* vvar_checked :: */
- /* A Boolean; if set, FreeType successfully loaded and parsed the */
- /* `vvar' table. */
- /* */
- /* vvar_error :: */
- /* If loading and parsing of the `vvar' table failed, this field */
- /* holds the corresponding error code. */
- /* */
- /* vvar_table :: */
- /* Data from the `vvar' table. */
- /* */
- /* mvar_table :: */
- /* Data from the `mvar' table. */
- /* */
- /* tuplecount :: */
- /* The number of shared tuples in the `gvar' table. */
- /* */
- /* tuplecoords :: */
- /* A two-dimensional array that holds the shared tuple coordinates */
- /* in the `gvar' table. */
- /* */
- /* gv_glyphcnt :: */
- /* The number of glyphs handled in the `gvar' table. */
- /* */
- /* glyphoffsets :: */
- /* Offsets into the glyph variation data array. */
- /* */
- /* gvar_size :: */
- /* The size of the `gvar' table. */
- /* */
+ /**************************************************************************
+ *
+ * @Struct:
+ * GX_BlendRec
+ *
+ * @Description:
+ * Data for interpolating a font from a distortable font specified
+ * by the GX *var tables ([fgcahvm]var).
+ *
+ * @Fields:
+ * num_axis ::
+ * The number of axes along which interpolation may happen.
+ *
+ * coords ::
+ * An array of design coordinates (in user space) indicating the
+ * contribution along each axis to the final interpolated font.
+ * `normalizedcoords' holds the same values.
+ *
+ * normalizedcoords ::
+ * An array of normalized values (between [-1,1]) indicating the
+ * contribution along each axis to the final interpolated font.
+ * `coords' holds the same values.
+ *
+ * mmvar ::
+ * Data from the `fvar' table.
+ *
+ * mmvar_len ::
+ * The length of the `mmvar' structure.
+ *
+ * normalized_stylecoords ::
+ * A two-dimensional array that holds the named instance data from
+ * `mmvar' as normalized values.
+ *
+ * avar_loaded ::
+ * A Boolean; if set, FreeType tried to load (and parse) the `avar'
+ * table.
+ *
+ * avar_segment ::
+ * Data from the `avar' table.
+ *
+ * hvar_loaded ::
+ * A Boolean; if set, FreeType tried to load (and parse) the `hvar'
+ * table.
+ *
+ * hvar_checked ::
+ * A Boolean; if set, FreeType successfully loaded and parsed the
+ * `hvar' table.
+ *
+ * hvar_error ::
+ * If loading and parsing of the `hvar' table failed, this field
+ * holds the corresponding error code.
+ *
+ * hvar_table ::
+ * Data from the `hvar' table.
+ *
+ * vvar_loaded ::
+ * A Boolean; if set, FreeType tried to load (and parse) the `vvar'
+ * table.
+ *
+ * vvar_checked ::
+ * A Boolean; if set, FreeType successfully loaded and parsed the
+ * `vvar' table.
+ *
+ * vvar_error ::
+ * If loading and parsing of the `vvar' table failed, this field
+ * holds the corresponding error code.
+ *
+ * vvar_table ::
+ * Data from the `vvar' table.
+ *
+ * mvar_table ::
+ * Data from the `mvar' table.
+ *
+ * tuplecount ::
+ * The number of shared tuples in the `gvar' table.
+ *
+ * tuplecoords ::
+ * A two-dimensional array that holds the shared tuple coordinates
+ * in the `gvar' table.
+ *
+ * gv_glyphcnt ::
+ * The number of glyphs handled in the `gvar' table.
+ *
+ * glyphoffsets ::
+ * Offsets into the glyph variation data array.
+ *
+ * gvar_size ::
+ * The size of the `gvar' table.
+ */
typedef struct GX_BlendRec_
{
FT_UInt num_axis;
@@ -336,14 +336,14 @@ FT_BEGIN_HEADER
} GX_BlendRec;
- /*************************************************************************/
- /* */
- /* <enum> */
- /* GX_TupleCountFlags */
- /* */
- /* <Description> */
- /* Flags used within the `TupleCount' field of the `gvar' table. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -353,15 +353,15 @@ FT_BEGIN_HEADER
} GX_TupleCountFlags;
- /*************************************************************************/
- /* */
- /* <enum> */
- /* GX_TupleIndexFlags */
- /* */
- /* <Description> */
- /* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */
- /* tables. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -416,6 +416,7 @@ FT_BEGIN_HEADER
TT_Vary_Apply_Glyph_Deltas( TT_Face face,
FT_UInt glyph_index,
FT_Outline* outline,
+ FT_Vector* unrounded,
FT_UInt n_points );
FT_LOCAL( FT_Error )
diff --git a/freetype/src/truetype/ttinterp.c b/freetype/src/truetype/ttinterp.c
index da9b595a..70434e17 100644
--- a/freetype/src/truetype/ttinterp.c
+++ b/freetype/src/truetype/ttinterp.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttinterp.c */
-/* */
-/* TrueType bytecode interpreter (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttinterp.c
+ *
+ * TrueType bytecode interpreter (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
/* Greg Hitchcock from Microsoft has helped a lot in resolving unclear */
@@ -39,14 +39,14 @@
#ifdef TT_USE_BYTECODE_INTERPRETER
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttinterp
+#define FT_COMPONENT ttinterp
#define NO_SUBPIXEL_HINTING \
@@ -82,10 +82,10 @@
exc->func_dualproj( exc, (v)->x, (v)->y )
- /*************************************************************************/
- /* */
- /* Two simple bounds-checking macros. */
- /* */
+ /**************************************************************************
+ *
+ * Two simple bounds-checking macros.
+ */
#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
@@ -97,30 +97,33 @@
#define FAILURE 1
- /*************************************************************************/
- /* */
- /* CODERANGE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Goto_CodeRange */
- /* */
- /* <Description> */
- /* Switches to a new code range (updates the code related elements in */
- /* `exec', and `IP'). */
- /* */
- /* <Input> */
- /* range :: The new execution code range. */
- /* */
- /* IP :: The new IP in the new code range. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
+ /**************************************************************************
+ *
+ * CODERANGE FUNCTIONS
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Goto_CodeRange
+ *
+ * @Description:
+ * Switches to a new code range (updates the code related elements in
+ * `exec', and `IP').
+ *
+ * @Input:
+ * range ::
+ * The new execution code range.
+ *
+ * IP ::
+ * The new IP in the new code range.
+ *
+ * @InOut:
+ * exec ::
+ * The target execution context.
+ */
FT_LOCAL_DEF( void )
TT_Goto_CodeRange( TT_ExecContext exec,
FT_Int range,
@@ -148,24 +151,28 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Set_CodeRange
+ *
+ * @Description:
+ * Sets a code range.
+ *
+ * @Input:
+ * range ::
+ * The code range index.
+ *
+ * base ::
+ * The new code base.
+ *
+ * length ::
+ * The range size in bytes.
+ *
+ * @InOut:
+ * exec ::
+ * The target execution context.
+ */
FT_LOCAL_DEF( void )
TT_Set_CodeRange( TT_ExecContext exec,
FT_Int range,
@@ -179,20 +186,22 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Clear_CodeRange */
- /* */
- /* <Description> */
- /* Clears a code range. */
- /* */
- /* <Input> */
- /* range :: The code range index. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Clear_CodeRange
+ *
+ * @Description:
+ * Clears a code range.
+ *
+ * @Input:
+ * range ::
+ * The code range index.
+ *
+ * @InOut:
+ * exec ::
+ * The target execution context.
+ */
FT_LOCAL_DEF( void )
TT_Clear_CodeRange( TT_ExecContext exec,
FT_Int range )
@@ -204,29 +213,31 @@
}
- /*************************************************************************/
- /* */
- /* EXECUTION CONTEXT ROUTINES */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_Context */
- /* */
- /* <Description> */
- /* Destroys a given context. */
- /* */
- /* <Input> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* memory :: A handle to the parent memory object. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
+ /**************************************************************************
+ *
+ * EXECUTION CONTEXT ROUTINES
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Done_Context
+ *
+ * @Description:
+ * Destroys a given context.
+ *
+ * @Input:
+ * exec ::
+ * A handle to the target execution context.
+ *
+ * memory ::
+ * A handle to the parent memory object.
+ *
+ * @Note:
+ * Only the glyph loader and debugger should call this function.
+ */
FT_LOCAL_DEF( void )
TT_Done_Context( TT_ExecContext exec )
{
@@ -257,23 +268,25 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -313,30 +326,35 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Update_Max
+ *
+ * @Description:
+ * Checks the size of a buffer and reallocates it if necessary.
+ *
+ * @Input:
+ * memory ::
+ * A handle to the parent memory object.
+ *
+ * multiplier ::
+ * The size in bytes of each element in the buffer.
+ *
+ * new_max ::
+ * The new capacity (size) of the buffer.
+ *
+ * @InOut:
+ * size ::
+ * The address of the buffer's current size expressed
+ * in elements.
+ *
+ * buff ::
+ * The address of the buffer base pointer.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
Update_Max( FT_Memory memory,
FT_ULong* size,
@@ -359,28 +377,31 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -467,23 +488,25 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Save_Context */
- /* */
- /* <Description> */
- /* Saves the code ranges in a `size' object. */
- /* */
- /* <Input> */
- /* exec :: A handle to the source execution context. */
- /* */
- /* <InOut> */
- /* size :: A handle to the target size object. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Save_Context
+ *
+ * @Description:
+ * Saves the code ranges in a `size' object.
+ *
+ * @Input:
+ * exec ::
+ * A handle to the source execution context.
+ *
+ * @InOut:
+ * size ::
+ * A handle to the target size object.
+ *
+ * @Note:
+ * Only the glyph loader and debugger should call this function.
+ */
FT_LOCAL_DEF( void )
TT_Save_Context( TT_ExecContext exec,
TT_Size size )
@@ -505,27 +528,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_Run_Context
+ *
+ * @Description:
+ * Executes one or more instructions in the execution context.
+ *
+ * @Input:
+ * exec ::
+ * A handle to the target execution context.
+ *
+ * @Return:
+ * TrueType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
TT_Run_Context( TT_ExecContext exec )
{
@@ -609,22 +626,22 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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
@@ -637,23 +654,25 @@
/* 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 ),
+ /* 0x00 */
+ /* SVTCA[0] */ PACK( 0, 0 ),
+ /* SVTCA[1] */ PACK( 0, 0 ),
+ /* SPVTCA[0] */ PACK( 0, 0 ),
+ /* SPVTCA[1] */ PACK( 0, 0 ),
+ /* SFVTCA[0] */ PACK( 0, 0 ),
+ /* SFVTCA[1] */ PACK( 0, 0 ),
+ /* SPVTL[0] */ PACK( 2, 0 ),
+ /* SPVTL[1] */ PACK( 2, 0 ),
+ /* SFVTL[0] */ PACK( 2, 0 ),
+ /* SFVTL[1] */ 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 ),
+ /* 0x10 */
/* SRP0 */ PACK( 1, 0 ),
/* SRP1 */ PACK( 1, 0 ),
/* SRP2 */ PACK( 1, 0 ),
@@ -667,10 +686,11 @@
/* SMD */ PACK( 1, 0 ),
/* ELSE */ PACK( 0, 0 ),
/* JMPR */ PACK( 1, 0 ),
- /* SCvTCi */ PACK( 1, 0 ),
- /* SSwCi */ PACK( 1, 0 ),
+ /* SCVTCI */ PACK( 1, 0 ),
+ /* SSWCI */ PACK( 1, 0 ),
/* SSW */ PACK( 1, 0 ),
+ /* 0x20 */
/* DUP */ PACK( 1, 2 ),
/* POP */ PACK( 1, 0 ),
/* CLEAR */ PACK( 0, 0 ),
@@ -678,7 +698,7 @@
/* DEPTH */ PACK( 0, 1 ),
/* CINDEX */ PACK( 1, 1 ),
/* MINDEX */ PACK( 1, 0 ),
- /* AlignPTS */ PACK( 2, 0 ),
+ /* ALIGNPTS */ PACK( 2, 0 ),
/* INS_$28 */ PACK( 0, 0 ),
/* UTP */ PACK( 1, 0 ),
/* LOOPCALL */ PACK( 2, 0 ),
@@ -688,6 +708,7 @@
/* MDAP[0] */ PACK( 1, 0 ),
/* MDAP[1] */ PACK( 1, 0 ),
+ /* 0x30 */
/* IUP[0] */ PACK( 0, 0 ),
/* IUP[1] */ PACK( 0, 0 ),
/* SHP[0] */ PACK( 0, 0 ), /* loops */
@@ -700,17 +721,18 @@
/* IP */ PACK( 0, 0 ), /* loops */
/* MSIRP[0] */ PACK( 2, 0 ),
/* MSIRP[1] */ PACK( 2, 0 ),
- /* AlignRP */ PACK( 0, 0 ), /* loops */
+ /* ALIGNRP */ PACK( 0, 0 ), /* loops */
/* RTDG */ PACK( 0, 0 ),
/* MIAP[0] */ PACK( 2, 0 ),
/* MIAP[1] */ PACK( 2, 0 ),
- /* NPushB */ PACK( 0, 0 ),
- /* NPushW */ PACK( 0, 0 ),
+ /* 0x40 */
+ /* NPUSHB */ PACK( 0, 0 ),
+ /* NPUSHW */ PACK( 0, 0 ),
/* WS */ PACK( 2, 0 ),
/* RS */ PACK( 1, 1 ),
- /* WCvtP */ PACK( 2, 0 ),
- /* RCvt */ 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 ),
@@ -718,10 +740,11 @@
/* MD[1] */ PACK( 2, 1 ),
/* MPPEM */ PACK( 0, 1 ),
/* MPS */ PACK( 0, 1 ),
- /* FlipON */ PACK( 0, 0 ),
- /* FlipOFF */ PACK( 0, 0 ),
+ /* FLIPON */ PACK( 0, 0 ),
+ /* FLIPOFF */ PACK( 0, 0 ),
/* DEBUG */ PACK( 1, 0 ),
+ /* 0x50 */
/* LT */ PACK( 2, 1 ),
/* LTEQ */ PACK( 2, 1 ),
/* GT */ PACK( 2, 1 ),
@@ -735,10 +758,11 @@
/* AND */ PACK( 2, 1 ),
/* OR */ PACK( 2, 1 ),
/* NOT */ PACK( 1, 1 ),
- /* DeltaP1 */ PACK( 1, 0 ),
+ /* DELTAP1 */ PACK( 1, 0 ),
/* SDB */ PACK( 1, 0 ),
/* SDS */ PACK( 1, 0 ),
+ /* 0x60 */
/* ADD */ PACK( 2, 1 ),
/* SUB */ PACK( 2, 1 ),
/* DIV */ PACK( 2, 1 ),
@@ -756,14 +780,15 @@
/* 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 ),
+ /* 0x70 */
+ /* WCVTF */ PACK( 2, 0 ),
+ /* DELTAP2 */ PACK( 1, 0 ),
+ /* DELTAP3 */ PACK( 1, 0 ),
+ /* DELTAC1 */ PACK( 1, 0 ),
+ /* DELTAC2 */ PACK( 1, 0 ),
+ /* DELTAC3 */ PACK( 1, 0 ),
/* SROUND */ PACK( 1, 0 ),
- /* S45Round */ PACK( 1, 0 ),
+ /* S45ROUND */ PACK( 1, 0 ),
/* JROT */ PACK( 2, 0 ),
/* JROF */ PACK( 2, 0 ),
/* ROFF */ PACK( 0, 0 ),
@@ -773,23 +798,25 @@
/* SANGW */ PACK( 1, 0 ),
/* AA */ PACK( 1, 0 ),
- /* FlipPT */ PACK( 0, 0 ), /* loops */
- /* FlipRgON */ PACK( 2, 0 ),
- /* FlipRgOFF */ PACK( 2, 0 ),
+ /* 0x80 */
+ /* FLIPPT */ PACK( 0, 0 ), /* loops */
+ /* FLIPRGON */ PACK( 2, 0 ),
+ /* FLIPRGOFF */ PACK( 2, 0 ),
/* INS_$83 */ PACK( 0, 0 ),
/* INS_$84 */ PACK( 0, 0 ),
- /* ScanCTRL */ PACK( 1, 0 ),
- /* SDPvTL[0] */ PACK( 2, 0 ),
- /* SDPvTL[1] */ PACK( 2, 0 ),
- /* GetINFO */ PACK( 1, 1 ),
+ /* SCANCTRL */ PACK( 1, 0 ),
+ /* SDPVTL[0] */ PACK( 2, 0 ),
+ /* SDPVTL[1] */ PACK( 2, 0 ),
+ /* GETINFO */ PACK( 1, 1 ),
/* IDEF */ PACK( 1, 0 ),
/* ROLL */ PACK( 3, 3 ),
/* MAX */ PACK( 2, 1 ),
/* MIN */ PACK( 2, 1 ),
- /* ScanTYPE */ PACK( 1, 0 ),
- /* InstCTRL */ PACK( 2, 0 ),
+ /* SCANTYPE */ PACK( 1, 0 ),
+ /* INSTCTRL */ PACK( 2, 0 ),
/* INS_$8F */ PACK( 0, 0 ),
+ /* 0x90 */
/* INS_$90 */ PACK( 0, 0 ),
/* GETVAR */ PACK( 0, 0 ), /* will be handled specially */
/* GETDATA */ PACK( 0, 1 ),
@@ -807,6 +834,7 @@
/* INS_$9E */ PACK( 0, 0 ),
/* INS_$9F */ PACK( 0, 0 ),
+ /* 0xA0 */
/* INS_$A0 */ PACK( 0, 0 ),
/* INS_$A1 */ PACK( 0, 0 ),
/* INS_$A2 */ PACK( 0, 0 ),
@@ -824,23 +852,25 @@
/* 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 ),
-
+ /* 0xB0 */
+ /* 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 ),
+
+ /* 0xC0 */
/* MDRP[00] */ PACK( 1, 0 ),
/* MDRP[01] */ PACK( 1, 0 ),
/* MDRP[02] */ PACK( 1, 0 ),
@@ -858,6 +888,7 @@
/* MDRP[14] */ PACK( 1, 0 ),
/* MDRP[15] */ PACK( 1, 0 ),
+ /* 0xD0 */
/* MDRP[16] */ PACK( 1, 0 ),
/* MDRP[17] */ PACK( 1, 0 ),
/* MDRP[18] */ PACK( 1, 0 ),
@@ -875,6 +906,7 @@
/* MDRP[30] */ PACK( 1, 0 ),
/* MDRP[31] */ PACK( 1, 0 ),
+ /* 0xE0 */
/* MIRP[00] */ PACK( 2, 0 ),
/* MIRP[01] */ PACK( 2, 0 ),
/* MIRP[02] */ PACK( 2, 0 ),
@@ -892,6 +924,7 @@
/* MIRP[14] */ PACK( 2, 0 ),
/* MIRP[15] */ PACK( 2, 0 ),
+ /* 0xF0 */
/* MIRP[16] */ PACK( 2, 0 ),
/* MIRP[17] */ PACK( 2, 0 ),
/* MIRP[18] */ PACK( 2, 0 ),
@@ -920,23 +953,25 @@
static
const char* const opcode_name[256] =
{
- "7 SVTCA y",
- "7 SVTCA x",
- "8 SPvTCA y",
- "8 SPvTCA x",
- "8 SFvTCA y",
- "8 SFvTCA x",
- "8 SPvTL ||",
- "7 SPvTL +",
- "8 SFvTL ||",
- "7 SFvTL +",
- "5 SPvFS",
- "5 SFvFS",
- "3 GPv",
- "3 GFv",
- "6 SFvTPv",
+ /* 0x00 */
+ "8 SVTCA[y]",
+ "8 SVTCA[x]",
+ "9 SPVTCA[y]",
+ "9 SPVTCA[x]",
+ "9 SFVTCA[y]",
+ "9 SFVTCA[x]",
+ "9 SPVTL[||]",
+ "8 SPVTL[+]",
+ "9 SFVTL[||]",
+ "8 SFVTL[+]",
+ "5 SPVFS",
+ "5 SFVFS",
+ "3 GPV",
+ "3 GFV",
+ "6 SFVTPV",
"5 ISECT",
+ /* 0x10 */
"4 SRP0",
"4 SRP1",
"4 SRP2",
@@ -950,10 +985,11 @@
"3 SMD",
"4 ELSE",
"4 JMPR",
- "6 SCvTCi",
- "5 SSwCi",
+ "6 SCVTCI",
+ "5 SSWCI",
"3 SSW",
+ /* 0x20 */
"3 DUP",
"3 POP",
"5 CLEAR",
@@ -961,50 +997,53 @@
"5 DEPTH",
"6 CINDEX",
"6 MINDEX",
- "8 AlignPTS",
+ "8 ALIGNPTS",
"7 INS_$28",
"3 UTP",
"8 LOOPCALL",
"4 CALL",
"4 FDEF",
"4 ENDF",
- "7 MDAP[0]",
- "7 MDAP[1]",
-
- "6 IUP[0]",
- "6 IUP[1]",
- "6 SHP[0]",
- "6 SHP[1]",
- "6 SHC[0]",
- "6 SHC[1]",
- "6 SHZ[0]",
- "6 SHZ[1]",
+ "6 MDAP[]",
+ "9 MDAP[rnd]",
+
+ /* 0x30 */
+ "6 IUP[y]",
+ "6 IUP[x]",
+ "8 SHP[rp2]",
+ "8 SHP[rp1]",
+ "8 SHC[rp2]",
+ "8 SHC[rp1]",
+ "8 SHZ[rp2]",
+ "8 SHZ[rp1]",
"5 SHPIX",
"2 IP",
- "8 MSIRP[0]",
- "8 MSIRP[1]",
- "7 AlignRP",
+ "7 MSIRP[]",
+ "A MSIRP[rp0]",
+ "7 ALIGNRP",
"4 RTDG",
- "7 MIAP[0]",
- "7 MIAP[1]",
+ "6 MIAP[]",
+ "9 MIAP[rnd]",
- "6 NPushB",
- "6 NPushW",
+ /* 0x40 */
+ "6 NPUSHB",
+ "6 NPUSHW",
"2 WS",
"2 RS",
- "5 WCvtP",
- "4 RCvt",
- "5 GC[0]",
- "5 GC[1]",
+ "5 WCVTP",
+ "4 RCVT",
+ "8 GC[curr]",
+ "8 GC[orig]",
"4 SCFS",
- "5 MD[0]",
- "5 MD[1]",
+ "8 MD[curr]",
+ "8 MD[orig]",
"5 MPPEM",
"3 MPS",
- "6 FlipON",
- "7 FlipOFF",
+ "6 FLIPON",
+ "7 FLIPOFF",
"5 DEBUG",
+ /* 0x50 */
"2 LT",
"4 LTEQ",
"2 GT",
@@ -1018,10 +1057,11 @@
"3 AND",
"2 OR",
"3 NOT",
- "7 DeltaP1",
+ "7 DELTAP1",
"3 SDB",
"3 SDS",
+ /* 0x60 */
"3 ADD",
"3 SUB",
"3 DIV",
@@ -1030,23 +1070,24 @@
"3 NEG",
"5 FLOOR",
"7 CEILING",
- "8 ROUND[0]",
- "8 ROUND[1]",
- "8 ROUND[2]",
- "8 ROUND[3]",
- "9 NROUND[0]",
- "9 NROUND[1]",
- "9 NROUND[2]",
- "9 NROUND[3]",
-
- "5 WCvtF",
- "7 DeltaP2",
- "7 DeltaP3",
- "A DeltaCn[0]",
- "A DeltaCn[1]",
- "A DeltaCn[2]",
+ "8 ROUND[G]",
+ "8 ROUND[B]",
+ "8 ROUND[W]",
+ "7 ROUND[]",
+ "9 NROUND[G]",
+ "9 NROUND[B]",
+ "9 NROUND[W]",
+ "8 NROUND[]",
+
+ /* 0x70 */
+ "5 WCVTF",
+ "7 DELTAP2",
+ "7 DELTAP3",
+ "7 DELTAC1",
+ "7 DELTAC2",
+ "7 DELTAC3",
"6 SROUND",
- "8 S45Round",
+ "8 S45ROUND",
"4 JROT",
"4 JROF",
"4 ROFF",
@@ -1056,26 +1097,28 @@
"5 SANGW",
"2 AA",
- "6 FlipPT",
- "8 FlipRgON",
- "9 FlipRgOFF",
+ /* 0x80 */
+ "6 FLIPPT",
+ "8 FLIPRGON",
+ "9 FLIPRGOFF",
"7 INS_$83",
"7 INS_$84",
- "8 ScanCTRL",
- "9 SDPvTL[0]",
- "9 SDPvTL[1]",
- "7 GetINFO",
+ "8 SCANCTRL",
+ "A SDPVTL[||]",
+ "9 SDPVTL[+]",
+ "7 GETINFO",
"4 IDEF",
"4 ROLL",
"3 MAX",
"3 MIN",
- "8 ScanTYPE",
- "8 InstCTRL",
+ "8 SCANTYPE",
+ "8 INSTCTRL",
"7 INS_$8F",
+ /* 0x90 */
"7 INS_$90",
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- "6 GETVAR",
+ "C GETVARIATION",
"7 GETDATA",
#else
"7 INS_$91",
@@ -1095,6 +1138,7 @@
"7 INS_$9E",
"7 INS_$9F",
+ /* 0xA0 */
"7 INS_$A0",
"7 INS_$A1",
"7 INS_$A2",
@@ -1112,90 +1156,95 @@
"7 INS_$AE",
"7 INS_$AF",
- "8 PushB[0]",
- "8 PushB[1]",
- "8 PushB[2]",
- "8 PushB[3]",
- "8 PushB[4]",
- "8 PushB[5]",
- "8 PushB[6]",
- "8 PushB[7]",
- "8 PushW[0]",
- "8 PushW[1]",
- "8 PushW[2]",
- "8 PushW[3]",
- "8 PushW[4]",
- "8 PushW[5]",
- "8 PushW[6]",
- "8 PushW[7]",
-
- "8 MDRP[00]",
- "8 MDRP[01]",
- "8 MDRP[02]",
- "8 MDRP[03]",
- "8 MDRP[04]",
- "8 MDRP[05]",
- "8 MDRP[06]",
- "8 MDRP[07]",
- "8 MDRP[08]",
- "8 MDRP[09]",
- "8 MDRP[10]",
- "8 MDRP[11]",
- "8 MDRP[12]",
- "8 MDRP[13]",
- "8 MDRP[14]",
- "8 MDRP[15]",
-
- "8 MDRP[16]",
- "8 MDRP[17]",
- "8 MDRP[18]",
- "8 MDRP[19]",
- "8 MDRP[20]",
- "8 MDRP[21]",
- "8 MDRP[22]",
- "8 MDRP[23]",
- "8 MDRP[24]",
- "8 MDRP[25]",
- "8 MDRP[26]",
- "8 MDRP[27]",
- "8 MDRP[28]",
- "8 MDRP[29]",
- "8 MDRP[30]",
- "8 MDRP[31]",
-
- "8 MIRP[00]",
- "8 MIRP[01]",
- "8 MIRP[02]",
- "8 MIRP[03]",
- "8 MIRP[04]",
- "8 MIRP[05]",
- "8 MIRP[06]",
- "8 MIRP[07]",
- "8 MIRP[08]",
- "8 MIRP[09]",
- "8 MIRP[10]",
- "8 MIRP[11]",
- "8 MIRP[12]",
- "8 MIRP[13]",
- "8 MIRP[14]",
- "8 MIRP[15]",
-
- "8 MIRP[16]",
- "8 MIRP[17]",
- "8 MIRP[18]",
- "8 MIRP[19]",
- "8 MIRP[20]",
- "8 MIRP[21]",
- "8 MIRP[22]",
- "8 MIRP[23]",
- "8 MIRP[24]",
- "8 MIRP[25]",
- "8 MIRP[26]",
- "8 MIRP[27]",
- "8 MIRP[28]",
- "8 MIRP[29]",
- "8 MIRP[30]",
- "8 MIRP[31]"
+ /* 0xB0 */
+ "8 PUSHB[0]",
+ "8 PUSHB[1]",
+ "8 PUSHB[2]",
+ "8 PUSHB[3]",
+ "8 PUSHB[4]",
+ "8 PUSHB[5]",
+ "8 PUSHB[6]",
+ "8 PUSHB[7]",
+ "8 PUSHW[0]",
+ "8 PUSHW[1]",
+ "8 PUSHW[2]",
+ "8 PUSHW[3]",
+ "8 PUSHW[4]",
+ "8 PUSHW[5]",
+ "8 PUSHW[6]",
+ "8 PUSHW[7]",
+
+ /* 0xC0 */
+ "7 MDRP[G]",
+ "7 MDRP[B]",
+ "7 MDRP[W]",
+ "6 MDRP[]",
+ "8 MDRP[rG]",
+ "8 MDRP[rB]",
+ "8 MDRP[rW]",
+ "7 MDRP[r]",
+ "8 MDRP[mG]",
+ "8 MDRP[mB]",
+ "8 MDRP[mW]",
+ "7 MDRP[m]",
+ "9 MDRP[mrG]",
+ "9 MDRP[mrB]",
+ "9 MDRP[mrW]",
+ "8 MDRP[mr]",
+
+ /* 0xD0 */
+ "8 MDRP[pG]",
+ "8 MDRP[pB]",
+ "8 MDRP[pW]",
+ "7 MDRP[p]",
+ "9 MDRP[prG]",
+ "9 MDRP[prB]",
+ "9 MDRP[prW]",
+ "8 MDRP[pr]",
+ "9 MDRP[pmG]",
+ "9 MDRP[pmB]",
+ "9 MDRP[pmW]",
+ "8 MDRP[pm]",
+ "A MDRP[pmrG]",
+ "A MDRP[pmrB]",
+ "A MDRP[pmrW]",
+ "9 MDRP[pmr]",
+
+ /* 0xE0 */
+ "7 MIRP[G]",
+ "7 MIRP[B]",
+ "7 MIRP[W]",
+ "6 MIRP[]",
+ "8 MIRP[rG]",
+ "8 MIRP[rB]",
+ "8 MIRP[rW]",
+ "7 MIRP[r]",
+ "8 MIRP[mG]",
+ "8 MIRP[mB]",
+ "8 MIRP[mW]",
+ "7 MIRP[m]",
+ "9 MIRP[mrG]",
+ "9 MIRP[mrB]",
+ "9 MIRP[mrW]",
+ "8 MIRP[mr]",
+
+ /* 0xF0 */
+ "8 MIRP[pG]",
+ "8 MIRP[pB]",
+ "8 MIRP[pW]",
+ "7 MIRP[p]",
+ "9 MIRP[prG]",
+ "9 MIRP[prB]",
+ "9 MIRP[prW]",
+ "8 MIRP[pr]",
+ "9 MIRP[pmG]",
+ "9 MIRP[pmB]",
+ "9 MIRP[pmW]",
+ "8 MIRP[pm]",
+ "A MIRP[pmrG]",
+ "A MIRP[pmrB]",
+ "A MIRP[pmrW]",
+ "9 MIRP[pmr]"
};
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -1448,18 +1497,18 @@
#endif /* TT_DotFix14 */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Current_Ratio */
- /* */
- /* <Description> */
- /* Returns the current aspect ratio scaling factor depending on the */
- /* projection vector's state and device resolutions. */
- /* */
- /* <Return> */
- /* The aspect ratio in 16.16 format, always <= 1.0 . */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Current_Ratio
+ *
+ * @Description:
+ * Returns the current aspect ratio scaling factor depending on the
+ * projection vector's state and device resolutions.
+ *
+ * @Return:
+ * The aspect ratio in 16.16 format, always <= 1.0 .
+ */
static FT_Long
Current_Ratio( TT_ExecContext exc )
{
@@ -1501,11 +1550,11 @@
}
- /*************************************************************************/
- /* */
- /* Functions related to the control value table (CVT). */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Functions related to the control value table (CVT).
+ *
+ */
FT_CALLBACK_DEF( FT_F26Dot6 )
@@ -1547,7 +1596,7 @@
FT_ULong idx,
FT_F26Dot6 value )
{
- exc->cvt[idx] += value;
+ exc->cvt[idx] = ADD_LONG( exc->cvt[idx], value );
}
@@ -1556,25 +1605,26 @@
FT_ULong idx,
FT_F26Dot6 value )
{
- exc->cvt[idx] += FT_DivFix( value, Current_Ratio( exc ) );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* GetShortIns */
- /* */
- /* <Description> */
- /* Returns a short integer taken from the instruction stream at */
- /* address IP. */
- /* */
- /* <Return> */
- /* Short read at code[IP]. */
- /* */
- /* <Note> */
- /* This one could become a macro. */
- /* */
+ exc->cvt[idx] = ADD_LONG( exc->cvt[idx],
+ FT_DivFix( value, Current_Ratio( exc ) ) );
+ }
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * GetShortIns
+ *
+ * @Description:
+ * Returns a short integer taken from the instruction stream at
+ * address IP.
+ *
+ * @Return:
+ * Short read at code[IP].
+ *
+ * @Note:
+ * This one could become a macro.
+ */
static FT_Short
GetShortIns( TT_ExecContext exc )
{
@@ -1585,22 +1635,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Ins_Goto_CodeRange
+ *
+ * @Description:
+ * Goes to a certain code range in the instruction stream.
+ *
+ * @Input:
+ * aRange ::
+ * The index of the code range.
+ *
+ * aIP ::
+ * The new IP address in the code range.
+ *
+ * @Return:
+ * SUCCESS or FAILURE.
+ */
static FT_Bool
Ins_Goto_CodeRange( TT_ExecContext exc,
FT_Int aRange,
@@ -1642,27 +1694,56 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Direct_Move */
- /* */
- /* <Description> */
- /* Moves a point by a given distance along the freedom vector. The */
- /* point will be `touched'. */
- /* */
- /* <Input> */
- /* point :: The index of the point to move. */
- /* */
- /* distance :: The distance to apply. */
- /* */
- /* <InOut> */
- /* zone :: The affected glyph zone. */
- /* */
- /* <Note> */
- /* See `ttinterp.h' for details on backward compatibility mode. */
- /* `Touches' the point. */
- /* */
+ /*
+ *
+ * Apple's TrueType specification at
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#order
+ *
+ * gives the following order of operations in instructions that move
+ * points.
+ *
+ * - check single width cut-in (MIRP, MDRP)
+ *
+ * - check control value cut-in (MIRP, MIAP)
+ *
+ * - apply engine compensation (MIRP, MDRP)
+ *
+ * - round distance (MIRP, MDRP) or value (MIAP, MDAP)
+ *
+ * - check minimum distance (MIRP,MDRP)
+ *
+ * - move point (MIRP, MDRP, MIAP, MSIRP, MDAP)
+ *
+ * For rounding instructions, engine compensation happens before rounding.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * Direct_Move
+ *
+ * @Description:
+ * Moves a point by a given distance along the freedom vector. The
+ * point will be `touched'.
+ *
+ * @Input:
+ * point ::
+ * The index of the point to move.
+ *
+ * distance ::
+ * The distance to apply.
+ *
+ * @InOut:
+ * zone ::
+ * The affected glyph zone.
+ *
+ * @Note:
+ * See `ttinterp.h' for details on backward compatibility mode.
+ * `Touches' the point.
+ */
static void
Direct_Move( TT_ExecContext exc,
TT_GlyphZone zone,
@@ -1728,23 +1809,26 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Direct_Move_Orig
+ *
+ * @Description:
+ * Moves the *original* position of a point by a given distance along
+ * the freedom vector. Obviously, the point will not be `touched'.
+ *
+ * @Input:
+ * point ::
+ * The index of the point to move.
+ *
+ * distance ::
+ * The distance to apply.
+ *
+ * @InOut:
+ * zone ::
+ * The affected glyph zone.
+ */
static void
Direct_Move_Orig( TT_ExecContext exc,
TT_GlyphZone zone,
@@ -1772,15 +1856,15 @@
}
- /*************************************************************************/
- /* */
- /* Special versions of Direct_Move() */
- /* */
- /* The following versions are used whenever both vectors are both */
- /* along one of the coordinate unit vectors, i.e. in 90% of the cases. */
- /* See `ttinterp.h' for details on backward compatibility mode. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Special versions of Direct_Move()
+ *
+ * The following versions are used whenever both vectors are both
+ * along one of the coordinate unit vectors, i.e. in 90% of the cases.
+ * See `ttinterp.h' for details on backward compatibility mode.
+ *
+ */
static void
@@ -1827,14 +1911,14 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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
@@ -1860,29 +1944,24 @@
zone->org[point].y = ADD_LONG( zone->org[point].y, distance );
}
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_None */
- /* */
- /* <Description> */
- /* Does not round, but adds engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance (not) to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* The compensated distance. */
- /* */
- /* <Note> */
- /* The TrueType specification says very few about the relationship */
- /* between rounding and engine compensation. However, it seems from */
- /* the description of super round that we should add the compensation */
- /* before rounding. */
- /* */
+ /**************************************************************************
+ *
+ * @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.
+ */
static FT_F26Dot6
Round_None( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -1909,22 +1988,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_To_Grid
+ *
+ * @Description:
+ * Rounds value to grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ */
static FT_F26Dot6
Round_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -1953,22 +2034,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_To_Half_Grid
+ *
+ * @Description:
+ * Rounds value to half grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ */
static FT_F26Dot6
Round_To_Half_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -1999,22 +2082,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_Down_To_Grid
+ *
+ * @Description:
+ * Rounds value down to grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ */
static FT_F26Dot6
Round_Down_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -2042,22 +2127,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_Up_To_Grid
+ *
+ * @Description:
+ * Rounds value up to grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ */
static FT_F26Dot6
Round_Up_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -2086,22 +2173,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_To_Double_Grid
+ *
+ * @Description:
+ * Rounds value to double grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ */
static FT_F26Dot6
Round_To_Double_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -2130,28 +2219,30 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_Super */
- /* */
- /* <Description> */
- /* Super-rounds value to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- /* <Note> */
- /* The TrueType specification says very little about the relationship */
- /* between rounding and engine compensation. However, it seems from */
- /* the description of super round that we should add the compensation */
- /* before rounding. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_Super
+ *
+ * @Description:
+ * Super-rounds value to grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ *
+ * @Note:
+ * The TrueType specification says very little about the relationship
+ * between rounding and engine compensation. However, it seems from
+ * the description of super round that we should add the compensation
+ * before rounding.
+ */
static FT_F26Dot6
Round_Super( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -2183,26 +2274,28 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Round_Super_45
+ *
+ * @Description:
+ * Super-rounds value to grid after adding engine compensation.
+ *
+ * @Input:
+ * distance ::
+ * The distance to round.
+ *
+ * compensation ::
+ * The engine compensation.
+ *
+ * @Return:
+ * Rounded distance.
+ *
+ * @Note:
+ * There is a separate function for Round_Super_45() as we may need
+ * greater precision.
+ */
static FT_F26Dot6
Round_Super_45( TT_ExecContext exc,
FT_F26Dot6 distance,
@@ -2234,17 +2327,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Compute_Round */
- /* */
- /* <Description> */
- /* Sets the rounding mode. */
- /* */
- /* <Input> */
- /* round_mode :: The rounding mode to be used. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Compute_Round
+ *
+ * @Description:
+ * Sets the rounding mode.
+ *
+ * @Input:
+ * round_mode ::
+ * The rounding mode to be used.
+ */
static void
Compute_Round( TT_ExecContext exc,
FT_Byte round_mode )
@@ -2286,19 +2380,21 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* SetSuperRound */
- /* */
- /* <Description> */
- /* Sets Super Round parameters. */
- /* */
- /* <Input> */
- /* GridPeriod :: The grid period. */
- /* */
- /* selector :: The SROUND opcode. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * SetSuperRound
+ *
+ * @Description:
+ * Sets Super Round parameters.
+ *
+ * @Input:
+ * GridPeriod ::
+ * The grid period.
+ *
+ * selector ::
+ * The SROUND opcode.
+ */
static void
SetSuperRound( TT_ExecContext exc,
FT_F2Dot14 GridPeriod,
@@ -2355,22 +2451,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Project
+ *
+ * @Description:
+ * Computes the projection of vector given by (v2-v1) along the
+ * current projection vector.
+ *
+ * @Input:
+ * v1 ::
+ * First input vector.
+ * v2 ::
+ * Second input vector.
+ *
+ * @Return:
+ * The distance in F26dot6 format.
+ */
static FT_F26Dot6
Project( TT_ExecContext exc,
FT_Pos dx,
@@ -2382,22 +2480,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Dual_Project
+ *
+ * @Description:
+ * Computes the projection of the vector given by (v2-v1) along the
+ * current dual vector.
+ *
+ * @Input:
+ * v1 ::
+ * First input vector.
+ * v2 ::
+ * Second input vector.
+ *
+ * @Return:
+ * The distance in F26dot6 format.
+ */
static FT_F26Dot6
Dual_Project( TT_ExecContext exc,
FT_Pos dx,
@@ -2409,22 +2509,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Project_x
+ *
+ * @Description:
+ * Computes the projection of the vector given by (v2-v1) along the
+ * horizontal axis.
+ *
+ * @Input:
+ * v1 ::
+ * First input vector.
+ * v2 ::
+ * Second input vector.
+ *
+ * @Return:
+ * The distance in F26dot6 format.
+ */
static FT_F26Dot6
Project_x( TT_ExecContext exc,
FT_Pos dx,
@@ -2437,22 +2539,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Project_y
+ *
+ * @Description:
+ * Computes the projection of the vector given by (v2-v1) along the
+ * vertical axis.
+ *
+ * @Input:
+ * v1 ::
+ * First input vector.
+ * v2 ::
+ * Second input vector.
+ *
+ * @Return:
+ * The distance in F26dot6 format.
+ */
static FT_F26Dot6
Project_y( TT_ExecContext exc,
FT_Pos dx,
@@ -2465,15 +2569,15 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Compute_Funcs */
- /* */
- /* <Description> */
- /* Computes the projection and movement function pointers according */
- /* to the current graphics state. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Compute_Funcs
+ *
+ * @Description:
+ * Computes the projection and movement function pointers according
+ * to the current graphics state.
+ */
static void
Compute_Funcs( TT_ExecContext exc )
{
@@ -2528,28 +2632,31 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Normalize
+ *
+ * @Description:
+ * Norms a vector.
+ *
+ * @Input:
+ * Vx ::
+ * The horizontal input vector coordinate.
+ * Vy ::
+ * The vertical input vector coordinate.
+ *
+ * @Output:
+ * R ::
+ * The normed unit vector.
+ *
+ * @Return:
+ * Returns FAILURE if a vector parameter is zero.
+ *
+ * @Note:
+ * In case Vx and Vy are both zero, `Normalize' returns SUCCESS, and
+ * R is undefined.
+ */
static FT_Bool
Normalize( FT_F26Dot6 Vx,
FT_F26Dot6 Vy,
@@ -2577,11 +2684,11 @@
}
- /*************************************************************************/
- /* */
- /* Here we start with the implementation of the various opcodes. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Here we start with the implementation of the various opcodes.
+ *
+ */
#define ARRAY_BOUND_ERROR \
@@ -2592,12 +2699,12 @@
} while (0)
- /*************************************************************************/
- /* */
- /* MPPEM[]: Measure Pixel Per EM */
- /* Opcode range: 0x4B */
- /* Stack: --> Euint16 */
- /* */
+ /**************************************************************************
+ *
+ * MPPEM[]: Measure Pixel Per EM
+ * Opcode range: 0x4B
+ * Stack: --> Euint16
+ */
static void
Ins_MPPEM( TT_ExecContext exc,
FT_Long* args )
@@ -2606,12 +2713,12 @@
}
- /*************************************************************************/
- /* */
- /* MPS[]: Measure Point Size */
- /* Opcode range: 0x4C */
- /* Stack: --> Euint16 */
- /* */
+ /**************************************************************************
+ *
+ * MPS[]: Measure Point Size
+ * Opcode range: 0x4C
+ * Stack: --> Euint16
+ */
static void
Ins_MPS( TT_ExecContext exc,
FT_Long* args )
@@ -2633,12 +2740,12 @@
}
- /*************************************************************************/
- /* */
- /* DUP[]: DUPlicate the stack's top element */
- /* Opcode range: 0x20 */
- /* Stack: StkElt --> StkElt StkElt */
- /* */
+ /**************************************************************************
+ *
+ * DUP[]: DUPlicate the stack's top element
+ * Opcode range: 0x20
+ * Stack: StkElt --> StkElt StkElt
+ */
static void
Ins_DUP( FT_Long* args )
{
@@ -2646,12 +2753,12 @@
}
- /*************************************************************************/
- /* */
- /* POP[]: POP the stack's top element */
- /* Opcode range: 0x21 */
- /* Stack: StkElt --> */
- /* */
+ /**************************************************************************
+ *
+ * POP[]: POP the stack's top element
+ * Opcode range: 0x21
+ * Stack: StkElt -->
+ */
static void
Ins_POP( void )
{
@@ -2659,12 +2766,12 @@
}
- /*************************************************************************/
- /* */
- /* CLEAR[]: CLEAR the entire stack */
- /* Opcode range: 0x22 */
- /* Stack: StkElt... --> */
- /* */
+ /**************************************************************************
+ *
+ * CLEAR[]: CLEAR the entire stack
+ * Opcode range: 0x22
+ * Stack: StkElt... -->
+ */
static void
Ins_CLEAR( TT_ExecContext exc )
{
@@ -2672,12 +2779,12 @@
}
- /*************************************************************************/
- /* */
- /* SWAP[]: SWAP the stack's top two elements */
- /* Opcode range: 0x23 */
- /* Stack: 2 * StkElt --> 2 * StkElt */
- /* */
+ /**************************************************************************
+ *
+ * SWAP[]: SWAP the stack's top two elements
+ * Opcode range: 0x23
+ * Stack: 2 * StkElt --> 2 * StkElt
+ */
static void
Ins_SWAP( FT_Long* args )
{
@@ -2690,12 +2797,12 @@
}
- /*************************************************************************/
- /* */
- /* DEPTH[]: return the stack DEPTH */
- /* Opcode range: 0x24 */
- /* Stack: --> uint32 */
- /* */
+ /**************************************************************************
+ *
+ * DEPTH[]: return the stack DEPTH
+ * Opcode range: 0x24
+ * Stack: --> uint32
+ */
static void
Ins_DEPTH( TT_ExecContext exc,
FT_Long* args )
@@ -2704,12 +2811,12 @@
}
- /*************************************************************************/
- /* */
- /* LT[]: Less Than */
- /* Opcode range: 0x50 */
- /* Stack: int32? int32? --> bool */
- /* */
+ /**************************************************************************
+ *
+ * LT[]: Less Than
+ * Opcode range: 0x50
+ * Stack: int32? int32? --> bool
+ */
static void
Ins_LT( FT_Long* args )
{
@@ -2717,12 +2824,12 @@
}
- /*************************************************************************/
- /* */
- /* LTEQ[]: Less Than or EQual */
- /* Opcode range: 0x51 */
- /* Stack: int32? int32? --> bool */
- /* */
+ /**************************************************************************
+ *
+ * LTEQ[]: Less Than or EQual
+ * Opcode range: 0x51
+ * Stack: int32? int32? --> bool
+ */
static void
Ins_LTEQ( FT_Long* args )
{
@@ -2730,12 +2837,12 @@
}
- /*************************************************************************/
- /* */
- /* GT[]: Greater Than */
- /* Opcode range: 0x52 */
- /* Stack: int32? int32? --> bool */
- /* */
+ /**************************************************************************
+ *
+ * GT[]: Greater Than
+ * Opcode range: 0x52
+ * Stack: int32? int32? --> bool
+ */
static void
Ins_GT( FT_Long* args )
{
@@ -2743,12 +2850,12 @@
}
- /*************************************************************************/
- /* */
- /* GTEQ[]: Greater Than or EQual */
- /* Opcode range: 0x53 */
- /* Stack: int32? int32? --> bool */
- /* */
+ /**************************************************************************
+ *
+ * GTEQ[]: Greater Than or EQual
+ * Opcode range: 0x53
+ * Stack: int32? int32? --> bool
+ */
static void
Ins_GTEQ( FT_Long* args )
{
@@ -2756,12 +2863,12 @@
}
- /*************************************************************************/
- /* */
- /* EQ[]: EQual */
- /* Opcode range: 0x54 */
- /* Stack: StkElt StkElt --> bool */
- /* */
+ /**************************************************************************
+ *
+ * EQ[]: EQual
+ * Opcode range: 0x54
+ * Stack: StkElt StkElt --> bool
+ */
static void
Ins_EQ( FT_Long* args )
{
@@ -2769,12 +2876,12 @@
}
- /*************************************************************************/
- /* */
- /* NEQ[]: Not EQual */
- /* Opcode range: 0x55 */
- /* Stack: StkElt StkElt --> bool */
- /* */
+ /**************************************************************************
+ *
+ * NEQ[]: Not EQual
+ * Opcode range: 0x55
+ * Stack: StkElt StkElt --> bool
+ */
static void
Ins_NEQ( FT_Long* args )
{
@@ -2782,12 +2889,12 @@
}
- /*************************************************************************/
- /* */
- /* ODD[]: Is ODD */
- /* Opcode range: 0x56 */
- /* Stack: f26.6 --> bool */
- /* */
+ /**************************************************************************
+ *
+ * ODD[]: Is ODD
+ * Opcode range: 0x56
+ * Stack: f26.6 --> bool
+ */
static void
Ins_ODD( TT_ExecContext exc,
FT_Long* args )
@@ -2796,12 +2903,12 @@
}
- /*************************************************************************/
- /* */
- /* EVEN[]: Is EVEN */
- /* Opcode range: 0x57 */
- /* Stack: f26.6 --> bool */
- /* */
+ /**************************************************************************
+ *
+ * EVEN[]: Is EVEN
+ * Opcode range: 0x57
+ * Stack: f26.6 --> bool
+ */
static void
Ins_EVEN( TT_ExecContext exc,
FT_Long* args )
@@ -2810,12 +2917,12 @@
}
- /*************************************************************************/
- /* */
- /* AND[]: logical AND */
- /* Opcode range: 0x5A */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
+ /**************************************************************************
+ *
+ * AND[]: logical AND
+ * Opcode range: 0x5A
+ * Stack: uint32 uint32 --> uint32
+ */
static void
Ins_AND( FT_Long* args )
{
@@ -2823,12 +2930,12 @@
}
- /*************************************************************************/
- /* */
- /* OR[]: logical OR */
- /* Opcode range: 0x5B */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
+ /**************************************************************************
+ *
+ * OR[]: logical OR
+ * Opcode range: 0x5B
+ * Stack: uint32 uint32 --> uint32
+ */
static void
Ins_OR( FT_Long* args )
{
@@ -2836,12 +2943,12 @@
}
- /*************************************************************************/
- /* */
- /* NOT[]: logical NOT */
- /* Opcode range: 0x5C */
- /* Stack: StkElt --> uint32 */
- /* */
+ /**************************************************************************
+ *
+ * NOT[]: logical NOT
+ * Opcode range: 0x5C
+ * Stack: StkElt --> uint32
+ */
static void
Ins_NOT( FT_Long* args )
{
@@ -2849,12 +2956,12 @@
}
- /*************************************************************************/
- /* */
- /* ADD[]: ADD */
- /* Opcode range: 0x60 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * ADD[]: ADD
+ * Opcode range: 0x60
+ * Stack: f26.6 f26.6 --> f26.6
+ */
static void
Ins_ADD( FT_Long* args )
{
@@ -2862,12 +2969,12 @@
}
- /*************************************************************************/
- /* */
- /* SUB[]: SUBtract */
- /* Opcode range: 0x61 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * SUB[]: SUBtract
+ * Opcode range: 0x61
+ * Stack: f26.6 f26.6 --> f26.6
+ */
static void
Ins_SUB( FT_Long* args )
{
@@ -2875,12 +2982,12 @@
}
- /*************************************************************************/
- /* */
- /* DIV[]: DIVide */
- /* Opcode range: 0x62 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * DIV[]: DIVide
+ * Opcode range: 0x62
+ * Stack: f26.6 f26.6 --> f26.6
+ */
static void
Ins_DIV( TT_ExecContext exc,
FT_Long* args )
@@ -2892,12 +2999,12 @@
}
- /*************************************************************************/
- /* */
- /* MUL[]: MULtiply */
- /* Opcode range: 0x63 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * MUL[]: MULtiply
+ * Opcode range: 0x63
+ * Stack: f26.6 f26.6 --> f26.6
+ */
static void
Ins_MUL( FT_Long* args )
{
@@ -2905,12 +3012,12 @@
}
- /*************************************************************************/
- /* */
- /* ABS[]: ABSolute value */
- /* Opcode range: 0x64 */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * ABS[]: ABSolute value
+ * Opcode range: 0x64
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_ABS( FT_Long* args )
{
@@ -2919,12 +3026,12 @@
}
- /*************************************************************************/
- /* */
- /* NEG[]: NEGate */
- /* Opcode range: 0x65 */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * NEG[]: NEGate
+ * Opcode range: 0x65
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_NEG( FT_Long* args )
{
@@ -2932,12 +3039,12 @@
}
- /*************************************************************************/
- /* */
- /* FLOOR[]: FLOOR */
- /* Opcode range: 0x66 */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * FLOOR[]: FLOOR
+ * Opcode range: 0x66
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_FLOOR( FT_Long* args )
{
@@ -2945,12 +3052,12 @@
}
- /*************************************************************************/
- /* */
- /* CEILING[]: CEILING */
- /* Opcode range: 0x67 */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * CEILING[]: CEILING
+ * Opcode range: 0x67
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_CEILING( FT_Long* args )
{
@@ -2958,12 +3065,12 @@
}
- /*************************************************************************/
- /* */
- /* RS[]: Read Store */
- /* Opcode range: 0x43 */
- /* Stack: uint32 --> uint32 */
- /* */
+ /**************************************************************************
+ *
+ * RS[]: Read Store
+ * Opcode range: 0x43
+ * Stack: uint32 --> uint32
+ */
static void
Ins_RS( TT_ExecContext exc,
FT_Long* args )
@@ -3004,12 +3111,12 @@
}
- /*************************************************************************/
- /* */
- /* WS[]: Write Store */
- /* Opcode range: 0x42 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * WS[]: Write Store
+ * Opcode range: 0x42
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_WS( TT_ExecContext exc,
FT_Long* args )
@@ -3027,12 +3134,12 @@
}
- /*************************************************************************/
- /* */
- /* WCVTP[]: Write CVT in Pixel units */
- /* Opcode range: 0x44 */
- /* Stack: f26.6 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * WCVTP[]: Write CVT in Pixel units
+ * Opcode range: 0x44
+ * Stack: f26.6 uint32 -->
+ */
static void
Ins_WCVTP( TT_ExecContext exc,
FT_Long* args )
@@ -3050,12 +3157,12 @@
}
- /*************************************************************************/
- /* */
- /* WCVTF[]: Write CVT in Funits */
- /* Opcode range: 0x70 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * WCVTF[]: Write CVT in Funits
+ * Opcode range: 0x70
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_WCVTF( TT_ExecContext exc,
FT_Long* args )
@@ -3073,12 +3180,12 @@
}
- /*************************************************************************/
- /* */
- /* RCVT[]: Read CVT */
- /* Opcode range: 0x45 */
- /* Stack: uint32 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * RCVT[]: Read CVT
+ * Opcode range: 0x45
+ * Stack: uint32 --> f26.6
+ */
static void
Ins_RCVT( TT_ExecContext exc,
FT_Long* args )
@@ -3098,12 +3205,12 @@
}
- /*************************************************************************/
- /* */
- /* AA[]: Adjust Angle */
- /* Opcode range: 0x7F */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * AA[]: Adjust Angle
+ * Opcode range: 0x7F
+ * Stack: uint32 -->
+ */
static void
Ins_AA( void )
{
@@ -3111,14 +3218,14 @@
}
- /*************************************************************************/
- /* */
- /* DEBUG[]: DEBUG. Unsupported. */
- /* Opcode range: 0x4F */
- /* Stack: uint32 --> */
- /* */
- /* Note: The original instruction pops a value from the stack. */
- /* */
+ /**************************************************************************
+ *
+ * DEBUG[]: DEBUG. Unsupported.
+ * Opcode range: 0x4F
+ * Stack: uint32 -->
+ *
+ * Note: The original instruction pops a value from the stack.
+ */
static void
Ins_DEBUG( TT_ExecContext exc )
{
@@ -3126,12 +3233,12 @@
}
- /*************************************************************************/
- /* */
- /* ROUND[ab]: ROUND value */
- /* Opcode range: 0x68-0x6B */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * ROUND[ab]: ROUND value
+ * Opcode range: 0x68-0x6B
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_ROUND( TT_ExecContext exc,
FT_Long* args )
@@ -3143,12 +3250,12 @@
}
- /*************************************************************************/
- /* */
- /* NROUND[ab]: No ROUNDing of value */
- /* Opcode range: 0x6C-0x6F */
- /* Stack: f26.6 --> f26.6 */
- /* */
+ /**************************************************************************
+ *
+ * NROUND[ab]: No ROUNDing of value
+ * Opcode range: 0x6C-0x6F
+ * Stack: f26.6 --> f26.6
+ */
static void
Ins_NROUND( TT_ExecContext exc,
FT_Long* args )
@@ -3160,12 +3267,12 @@
}
- /*************************************************************************/
- /* */
- /* MAX[]: MAXimum */
- /* Opcode range: 0x8B */
- /* Stack: int32? int32? --> int32 */
- /* */
+ /**************************************************************************
+ *
+ * MAX[]: MAXimum
+ * Opcode range: 0x8B
+ * Stack: int32? int32? --> int32
+ */
static void
Ins_MAX( FT_Long* args )
{
@@ -3174,12 +3281,12 @@
}
- /*************************************************************************/
- /* */
- /* MIN[]: MINimum */
- /* Opcode range: 0x8C */
- /* Stack: int32? int32? --> int32 */
- /* */
+ /**************************************************************************
+ *
+ * MIN[]: MINimum
+ * Opcode range: 0x8C
+ * Stack: int32? int32? --> int32
+ */
static void
Ins_MIN( FT_Long* args )
{
@@ -3188,12 +3295,12 @@
}
- /*************************************************************************/
- /* */
- /* MINDEX[]: Move INDEXed element */
- /* Opcode range: 0x26 */
- /* Stack: int32? --> StkElt */
- /* */
+ /**************************************************************************
+ *
+ * MINDEX[]: Move INDEXed element
+ * Opcode range: 0x26
+ * Stack: int32? --> StkElt
+ */
static void
Ins_MINDEX( TT_ExecContext exc,
FT_Long* args )
@@ -3221,12 +3328,12 @@
}
- /*************************************************************************/
- /* */
- /* CINDEX[]: Copy INDEXed element */
- /* Opcode range: 0x25 */
- /* Stack: int32 --> StkElt */
- /* */
+ /**************************************************************************
+ *
+ * CINDEX[]: Copy INDEXed element
+ * Opcode range: 0x25
+ * Stack: int32 --> StkElt
+ */
static void
Ins_CINDEX( TT_ExecContext exc,
FT_Long* args )
@@ -3247,12 +3354,12 @@
}
- /*************************************************************************/
- /* */
- /* ROLL[]: ROLL top three elements */
- /* Opcode range: 0x8A */
- /* Stack: 3 * StkElt --> 3 * StkElt */
- /* */
+ /**************************************************************************
+ *
+ * ROLL[]: ROLL top three elements
+ * Opcode range: 0x8A
+ * Stack: 3 * StkElt --> 3 * StkElt
+ */
static void
Ins_ROLL( FT_Long* args )
{
@@ -3269,19 +3376,19 @@
}
- /*************************************************************************/
- /* */
- /* MANAGING THE FLOW OF CONTROL */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * MANAGING THE FLOW OF CONTROL
+ *
+ */
- /*************************************************************************/
- /* */
- /* SLOOP[]: Set LOOP variable */
- /* Opcode range: 0x17 */
- /* Stack: int32? --> */
- /* */
+ /**************************************************************************
+ *
+ * SLOOP[]: Set LOOP variable
+ * Opcode range: 0x17
+ * Stack: int32? -->
+ */
static void
Ins_SLOOP( TT_ExecContext exc,
FT_Long* args )
@@ -3323,12 +3430,12 @@
}
- /*************************************************************************/
- /* */
- /* IF[]: IF test */
- /* Opcode range: 0x58 */
- /* Stack: StkElt --> */
- /* */
+ /**************************************************************************
+ *
+ * IF[]: IF test
+ * Opcode range: 0x58
+ * Stack: StkElt -->
+ */
static void
Ins_IF( TT_ExecContext exc,
FT_Long* args )
@@ -3367,12 +3474,12 @@
}
- /*************************************************************************/
- /* */
- /* ELSE[]: ELSE */
- /* Opcode range: 0x1B */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * ELSE[]: ELSE
+ * Opcode range: 0x1B
+ * Stack: -->
+ */
static void
Ins_ELSE( TT_ExecContext exc )
{
@@ -3400,12 +3507,12 @@
}
- /*************************************************************************/
- /* */
- /* EIF[]: End IF */
- /* Opcode range: 0x59 */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * EIF[]: End IF
+ * Opcode range: 0x59
+ * Stack: -->
+ */
static void
Ins_EIF( void )
{
@@ -3413,12 +3520,12 @@
}
- /*************************************************************************/
- /* */
- /* JMPR[]: JuMP Relative */
- /* Opcode range: 0x1C */
- /* Stack: int32 --> */
- /* */
+ /**************************************************************************
+ *
+ * JMPR[]: JuMP Relative
+ * Opcode range: 0x1C
+ * Stack: int32 -->
+ */
static void
Ins_JMPR( TT_ExecContext exc,
FT_Long* args )
@@ -3448,12 +3555,12 @@
}
- /*************************************************************************/
- /* */
- /* JROT[]: Jump Relative On True */
- /* Opcode range: 0x78 */
- /* Stack: StkElt int32 --> */
- /* */
+ /**************************************************************************
+ *
+ * JROT[]: Jump Relative On True
+ * Opcode range: 0x78
+ * Stack: StkElt int32 -->
+ */
static void
Ins_JROT( TT_ExecContext exc,
FT_Long* args )
@@ -3463,12 +3570,12 @@
}
- /*************************************************************************/
- /* */
- /* JROF[]: Jump Relative On False */
- /* Opcode range: 0x79 */
- /* Stack: StkElt int32 --> */
- /* */
+ /**************************************************************************
+ *
+ * JROF[]: Jump Relative On False
+ * Opcode range: 0x79
+ * Stack: StkElt int32 -->
+ */
static void
Ins_JROF( TT_ExecContext exc,
FT_Long* args )
@@ -3478,19 +3585,19 @@
}
- /*************************************************************************/
- /* */
- /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * DEFINING AND USING FUNCTIONS AND INSTRUCTIONS
+ *
+ */
- /*************************************************************************/
- /* */
- /* FDEF[]: Function DEFinition */
- /* Opcode range: 0x2C */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * FDEF[]: Function DEFinition
+ * Opcode range: 0x2C
+ * Stack: uint32 -->
+ */
static void
Ins_FDEF( TT_ExecContext exc,
FT_Long* args )
@@ -3788,12 +3895,12 @@
}
- /*************************************************************************/
- /* */
- /* ENDF[]: END Function definition */
- /* Opcode range: 0x2D */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * ENDF[]: END Function definition
+ * Opcode range: 0x2D
+ * Stack: -->
+ */
static void
Ins_ENDF( TT_ExecContext exc )
{
@@ -3837,12 +3944,12 @@
}
- /*************************************************************************/
- /* */
- /* CALL[]: CALL function */
- /* Opcode range: 0x2B */
- /* Stack: uint32? --> */
- /* */
+ /**************************************************************************
+ *
+ * CALL[]: CALL function
+ * Opcode range: 0x2B
+ * Stack: uint32? -->
+ */
static void
Ins_CALL( TT_ExecContext exc,
FT_Long* args )
@@ -3926,12 +4033,12 @@
}
- /*************************************************************************/
- /* */
- /* LOOPCALL[]: LOOP and CALL function */
- /* Opcode range: 0x2A */
- /* Stack: uint32? Eint16? --> */
- /* */
+ /**************************************************************************
+ *
+ * LOOPCALL[]: LOOP and CALL function
+ * Opcode range: 0x2A
+ * Stack: uint32? Eint16? -->
+ */
static void
Ins_LOOPCALL( TT_ExecContext exc,
FT_Long* args )
@@ -4019,12 +4126,12 @@
}
- /*************************************************************************/
- /* */
- /* IDEF[]: Instruction DEFinition */
- /* Opcode range: 0x89 */
- /* Stack: Eint8 --> */
- /* */
+ /**************************************************************************
+ *
+ * IDEF[]: Instruction DEFinition
+ * Opcode range: 0x89
+ * Stack: Eint8 -->
+ */
static void
Ins_IDEF( TT_ExecContext exc,
FT_Long* args )
@@ -4094,19 +4201,19 @@
}
- /*************************************************************************/
- /* */
- /* PUSHING DATA ONTO THE INTERPRETER STACK */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * PUSHING DATA ONTO THE INTERPRETER STACK
+ *
+ */
- /*************************************************************************/
- /* */
- /* NPUSHB[]: PUSH N Bytes */
- /* Opcode range: 0x40 */
- /* Stack: --> uint32... */
- /* */
+ /**************************************************************************
+ *
+ * NPUSHB[]: PUSH N Bytes
+ * Opcode range: 0x40
+ * Stack: --> uint32...
+ */
static void
Ins_NPUSHB( TT_ExecContext exc,
FT_Long* args )
@@ -4129,12 +4236,12 @@
}
- /*************************************************************************/
- /* */
- /* NPUSHW[]: PUSH N Words */
- /* Opcode range: 0x41 */
- /* Stack: --> int32... */
- /* */
+ /**************************************************************************
+ *
+ * NPUSHW[]: PUSH N Words
+ * Opcode range: 0x41
+ * Stack: --> int32...
+ */
static void
Ins_NPUSHW( TT_ExecContext exc,
FT_Long* args )
@@ -4160,12 +4267,12 @@
}
- /*************************************************************************/
- /* */
- /* PUSHB[abc]: PUSH Bytes */
- /* Opcode range: 0xB0-0xB7 */
- /* Stack: --> uint32... */
- /* */
+ /**************************************************************************
+ *
+ * PUSHB[abc]: PUSH Bytes
+ * Opcode range: 0xB0-0xB7
+ * Stack: --> uint32...
+ */
static void
Ins_PUSHB( TT_ExecContext exc,
FT_Long* args )
@@ -4186,12 +4293,12 @@
}
- /*************************************************************************/
- /* */
- /* PUSHW[abc]: PUSH Words */
- /* Opcode range: 0xB8-0xBF */
- /* Stack: --> int32... */
- /* */
+ /**************************************************************************
+ *
+ * PUSHW[abc]: PUSH Words
+ * Opcode range: 0xB8-0xBF
+ * Stack: --> int32...
+ */
static void
Ins_PUSHW( TT_ExecContext exc,
FT_Long* args )
@@ -4216,11 +4323,11 @@
}
- /*************************************************************************/
- /* */
- /* MANAGING THE GRAPHICS STATE */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * MANAGING THE GRAPHICS STATE
+ *
+ */
static FT_Bool
@@ -4274,20 +4381,20 @@
}
- /*************************************************************************/
- /* */
- /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */
- /* Opcode range: 0x00-0x01 */
- /* Stack: --> */
- /* */
- /* SPvTCA[a]: Set PVector to Coordinate Axis */
- /* Opcode range: 0x02-0x03 */
- /* Stack: --> */
- /* */
- /* SFvTCA[a]: Set FVector to Coordinate Axis */
- /* Opcode range: 0x04-0x05 */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * SVTCA[a]: Set (F and P) Vectors to Coordinate Axis
+ * Opcode range: 0x00-0x01
+ * Stack: -->
+ *
+ * SPvTCA[a]: Set PVector to Coordinate Axis
+ * Opcode range: 0x02-0x03
+ * Stack: -->
+ *
+ * SFvTCA[a]: Set FVector to Coordinate Axis
+ * Opcode range: 0x04-0x05
+ * Stack: -->
+ */
static void
Ins_SxyTCA( TT_ExecContext exc )
{
@@ -4318,12 +4425,12 @@
}
- /*************************************************************************/
- /* */
- /* SPvTL[a]: Set PVector To Line */
- /* Opcode range: 0x06-0x07 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SPvTL[a]: Set PVector To Line
+ * Opcode range: 0x06-0x07
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_SPVTL( TT_ExecContext exc,
FT_Long* args )
@@ -4339,12 +4446,12 @@
}
- /*************************************************************************/
- /* */
- /* SFvTL[a]: Set FVector To Line */
- /* Opcode range: 0x08-0x09 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SFvTL[a]: Set FVector To Line
+ * Opcode range: 0x08-0x09
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_SFVTL( TT_ExecContext exc,
FT_Long* args )
@@ -4359,12 +4466,12 @@
}
- /*************************************************************************/
- /* */
- /* SFvTPv[]: Set FVector To PVector */
- /* Opcode range: 0x0E */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * SFvTPv[]: Set FVector To PVector
+ * Opcode range: 0x0E
+ * Stack: -->
+ */
static void
Ins_SFVTPV( TT_ExecContext exc )
{
@@ -4373,12 +4480,12 @@
}
- /*************************************************************************/
- /* */
- /* SPvFS[]: Set PVector From Stack */
- /* Opcode range: 0x0A */
- /* Stack: f2.14 f2.14 --> */
- /* */
+ /**************************************************************************
+ *
+ * SPvFS[]: Set PVector From Stack
+ * Opcode range: 0x0A
+ * Stack: f2.14 f2.14 -->
+ */
static void
Ins_SPVFS( TT_ExecContext exc,
FT_Long* args )
@@ -4400,12 +4507,12 @@
}
- /*************************************************************************/
- /* */
- /* SFvFS[]: Set FVector From Stack */
- /* Opcode range: 0x0B */
- /* Stack: f2.14 f2.14 --> */
- /* */
+ /**************************************************************************
+ *
+ * SFvFS[]: Set FVector From Stack
+ * Opcode range: 0x0B
+ * Stack: f2.14 f2.14 -->
+ */
static void
Ins_SFVFS( TT_ExecContext exc,
FT_Long* args )
@@ -4425,12 +4532,12 @@
}
- /*************************************************************************/
- /* */
- /* GPv[]: Get Projection Vector */
- /* Opcode range: 0x0C */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
+ /**************************************************************************
+ *
+ * GPv[]: Get Projection Vector
+ * Opcode range: 0x0C
+ * Stack: ef2.14 --> ef2.14
+ */
static void
Ins_GPV( TT_ExecContext exc,
FT_Long* args )
@@ -4440,12 +4547,12 @@
}
- /*************************************************************************/
- /* */
- /* GFv[]: Get Freedom Vector */
- /* Opcode range: 0x0D */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
+ /**************************************************************************
+ *
+ * GFv[]: Get Freedom Vector
+ * Opcode range: 0x0D
+ * Stack: ef2.14 --> ef2.14
+ */
static void
Ins_GFV( TT_ExecContext exc,
FT_Long* args )
@@ -4455,12 +4562,12 @@
}
- /*************************************************************************/
- /* */
- /* SRP0[]: Set Reference Point 0 */
- /* Opcode range: 0x10 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SRP0[]: Set Reference Point 0
+ * Opcode range: 0x10
+ * Stack: uint32 -->
+ */
static void
Ins_SRP0( TT_ExecContext exc,
FT_Long* args )
@@ -4469,12 +4576,12 @@
}
- /*************************************************************************/
- /* */
- /* SRP1[]: Set Reference Point 1 */
- /* Opcode range: 0x11 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SRP1[]: Set Reference Point 1
+ * Opcode range: 0x11
+ * Stack: uint32 -->
+ */
static void
Ins_SRP1( TT_ExecContext exc,
FT_Long* args )
@@ -4483,12 +4590,12 @@
}
- /*************************************************************************/
- /* */
- /* SRP2[]: Set Reference Point 2 */
- /* Opcode range: 0x12 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SRP2[]: Set Reference Point 2
+ * Opcode range: 0x12
+ * Stack: uint32 -->
+ */
static void
Ins_SRP2( TT_ExecContext exc,
FT_Long* args )
@@ -4497,12 +4604,12 @@
}
- /*************************************************************************/
- /* */
- /* SMD[]: Set Minimum Distance */
- /* Opcode range: 0x1A */
- /* Stack: f26.6 --> */
- /* */
+ /**************************************************************************
+ *
+ * SMD[]: Set Minimum Distance
+ * Opcode range: 0x1A
+ * Stack: f26.6 -->
+ */
static void
Ins_SMD( TT_ExecContext exc,
FT_Long* args )
@@ -4511,12 +4618,12 @@
}
- /*************************************************************************/
- /* */
- /* SCVTCI[]: Set Control Value Table Cut In */
- /* Opcode range: 0x1D */
- /* Stack: f26.6 --> */
- /* */
+ /**************************************************************************
+ *
+ * SCVTCI[]: Set Control Value Table Cut In
+ * Opcode range: 0x1D
+ * Stack: f26.6 -->
+ */
static void
Ins_SCVTCI( TT_ExecContext exc,
FT_Long* args )
@@ -4525,12 +4632,12 @@
}
- /*************************************************************************/
- /* */
- /* SSWCI[]: Set Single Width Cut In */
- /* Opcode range: 0x1E */
- /* Stack: f26.6 --> */
- /* */
+ /**************************************************************************
+ *
+ * SSWCI[]: Set Single Width Cut In
+ * Opcode range: 0x1E
+ * Stack: f26.6 -->
+ */
static void
Ins_SSWCI( TT_ExecContext exc,
FT_Long* args )
@@ -4539,12 +4646,12 @@
}
- /*************************************************************************/
- /* */
- /* SSW[]: Set Single Width */
- /* Opcode range: 0x1F */
- /* Stack: int32? --> */
- /* */
+ /**************************************************************************
+ *
+ * SSW[]: Set Single Width
+ * Opcode range: 0x1F
+ * Stack: int32? -->
+ */
static void
Ins_SSW( TT_ExecContext exc,
FT_Long* args )
@@ -4554,12 +4661,12 @@
}
- /*************************************************************************/
- /* */
- /* FLIPON[]: Set auto-FLIP to ON */
- /* Opcode range: 0x4D */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * FLIPON[]: Set auto-FLIP to ON
+ * Opcode range: 0x4D
+ * Stack: -->
+ */
static void
Ins_FLIPON( TT_ExecContext exc )
{
@@ -4567,12 +4674,12 @@
}
- /*************************************************************************/
- /* */
- /* FLIPOFF[]: Set auto-FLIP to OFF */
- /* Opcode range: 0x4E */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * FLIPOFF[]: Set auto-FLIP to OFF
+ * Opcode range: 0x4E
+ * Stack: -->
+ */
static void
Ins_FLIPOFF( TT_ExecContext exc )
{
@@ -4580,12 +4687,12 @@
}
- /*************************************************************************/
- /* */
- /* SANGW[]: Set ANGle Weight */
- /* Opcode range: 0x7E */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SANGW[]: Set ANGle Weight
+ * Opcode range: 0x7E
+ * Stack: uint32 -->
+ */
static void
Ins_SANGW( void )
{
@@ -4593,12 +4700,12 @@
}
- /*************************************************************************/
- /* */
- /* SDB[]: Set Delta Base */
- /* Opcode range: 0x5E */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SDB[]: Set Delta Base
+ * Opcode range: 0x5E
+ * Stack: uint32 -->
+ */
static void
Ins_SDB( TT_ExecContext exc,
FT_Long* args )
@@ -4607,12 +4714,12 @@
}
- /*************************************************************************/
- /* */
- /* SDS[]: Set Delta Shift */
- /* Opcode range: 0x5F */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SDS[]: Set Delta Shift
+ * Opcode range: 0x5F
+ * Stack: uint32 -->
+ */
static void
Ins_SDS( TT_ExecContext exc,
FT_Long* args )
@@ -4624,12 +4731,12 @@
}
- /*************************************************************************/
- /* */
- /* RTHG[]: Round To Half Grid */
- /* Opcode range: 0x19 */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * RTHG[]: Round To Half Grid
+ * Opcode range: 0x19
+ * Stack: -->
+ */
static void
Ins_RTHG( TT_ExecContext exc )
{
@@ -4638,12 +4745,12 @@
}
- /*************************************************************************/
- /* */
- /* RTG[]: Round To Grid */
- /* Opcode range: 0x18 */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * RTG[]: Round To Grid
+ * Opcode range: 0x18
+ * Stack: -->
+ */
static void
Ins_RTG( TT_ExecContext exc )
{
@@ -4652,11 +4759,11 @@
}
- /*************************************************************************/
- /* RTDG[]: Round To Double Grid */
- /* Opcode range: 0x3D */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ * RTDG[]: Round To Double Grid
+ * Opcode range: 0x3D
+ * Stack: -->
+ */
static void
Ins_RTDG( TT_ExecContext exc )
{
@@ -4665,11 +4772,11 @@
}
- /*************************************************************************/
- /* RUTG[]: Round Up To Grid */
- /* Opcode range: 0x7C */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ * RUTG[]: Round Up To Grid
+ * Opcode range: 0x7C
+ * Stack: -->
+ */
static void
Ins_RUTG( TT_ExecContext exc )
{
@@ -4678,12 +4785,12 @@
}
- /*************************************************************************/
- /* */
- /* RDTG[]: Round Down To Grid */
- /* Opcode range: 0x7D */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * RDTG[]: Round Down To Grid
+ * Opcode range: 0x7D
+ * Stack: -->
+ */
static void
Ins_RDTG( TT_ExecContext exc )
{
@@ -4692,12 +4799,12 @@
}
- /*************************************************************************/
- /* */
- /* ROFF[]: Round OFF */
- /* Opcode range: 0x7A */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * ROFF[]: Round OFF
+ * Opcode range: 0x7A
+ * Stack: -->
+ */
static void
Ins_ROFF( TT_ExecContext exc )
{
@@ -4706,12 +4813,12 @@
}
- /*************************************************************************/
- /* */
- /* SROUND[]: Super ROUND */
- /* Opcode range: 0x76 */
- /* Stack: Eint8 --> */
- /* */
+ /**************************************************************************
+ *
+ * SROUND[]: Super ROUND
+ * Opcode range: 0x76
+ * Stack: Eint8 -->
+ */
static void
Ins_SROUND( TT_ExecContext exc,
FT_Long* args )
@@ -4723,12 +4830,12 @@
}
- /*************************************************************************/
- /* */
- /* S45ROUND[]: Super ROUND 45 degrees */
- /* Opcode range: 0x77 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * S45ROUND[]: Super ROUND 45 degrees
+ * Opcode range: 0x77
+ * Stack: uint32 -->
+ */
static void
Ins_S45ROUND( TT_ExecContext exc,
FT_Long* args )
@@ -4740,15 +4847,15 @@
}
- /*************************************************************************/
- /* */
- /* GC[a]: Get Coordinate projected onto */
- /* Opcode range: 0x46-0x47 */
- /* Stack: uint32 --> f26.6 */
- /* */
- /* XXX: UNDOCUMENTED: Measures from the original glyph must be taken */
- /* along the dual projection vector! */
- /* */
+ /**************************************************************************
+ *
+ * GC[a]: Get Coordinate projected onto
+ * Opcode range: 0x46-0x47
+ * Stack: uint32 --> f26.6
+ *
+ * XXX: UNDOCUMENTED: Measures from the original glyph must be taken
+ * along the dual projection vector!
+ */
static void
Ins_GC( TT_ExecContext exc,
FT_Long* args )
@@ -4777,16 +4884,16 @@
}
- /*************************************************************************/
- /* */
- /* SCFS[]: Set Coordinate From Stack */
- /* Opcode range: 0x48 */
- /* Stack: f26.6 uint32 --> */
- /* */
- /* Formula: */
- /* */
- /* OA := OA + ( value - OA.p )/( f.p ) * f */
- /* */
+ /**************************************************************************
+ *
+ * SCFS[]: Set Coordinate From Stack
+ * Opcode range: 0x48
+ * Stack: f26.6 uint32 -->
+ *
+ * Formula:
+ *
+ * OA := OA + ( value - OA.p )/( f.p ) * f
+ */
static void
Ins_SCFS( TT_ExecContext exc,
FT_Long* args )
@@ -4815,21 +4922,21 @@
}
- /*************************************************************************/
- /* */
- /* MD[a]: Measure Distance */
- /* Opcode range: 0x49-0x4A */
- /* Stack: uint32 uint32 --> f26.6 */
- /* */
- /* XXX: UNDOCUMENTED: Measure taken in the original glyph must be along */
- /* the dual projection vector. */
- /* */
- /* XXX: UNDOCUMENTED: Flag attributes are inverted! */
- /* 0 => measure distance in original outline */
- /* 1 => measure distance in grid-fitted outline */
- /* */
- /* XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1! */
- /* */
+ /**************************************************************************
+ *
+ * MD[a]: Measure Distance
+ * Opcode range: 0x49-0x4A
+ * Stack: uint32 uint32 --> f26.6
+ *
+ * XXX: UNDOCUMENTED: Measure taken in the original glyph must be along
+ * the dual projection vector.
+ *
+ * XXX: UNDOCUMENTED: Flag attributes are inverted!
+ * 0 => measure distance in original outline
+ * 1 => measure distance in grid-fitted outline
+ *
+ * XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1!
+ */
static void
Ins_MD( TT_ExecContext exc,
FT_Long* args )
@@ -4902,12 +5009,12 @@
}
- /*************************************************************************/
- /* */
- /* SDPvTL[a]: Set Dual PVector to Line */
- /* Opcode range: 0x86-0x87 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SDPvTL[a]: Set Dual PVector to Line
+ * Opcode range: 0x86-0x87
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_SDPVTL( TT_ExecContext exc,
FT_Long* args )
@@ -4985,12 +5092,12 @@
}
- /*************************************************************************/
- /* */
- /* SZP0[]: Set Zone Pointer 0 */
- /* Opcode range: 0x13 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SZP0[]: Set Zone Pointer 0
+ * Opcode range: 0x13
+ * Stack: uint32 -->
+ */
static void
Ins_SZP0( TT_ExecContext exc,
FT_Long* args )
@@ -5015,12 +5122,12 @@
}
- /*************************************************************************/
- /* */
- /* SZP1[]: Set Zone Pointer 1 */
- /* Opcode range: 0x14 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SZP1[]: Set Zone Pointer 1
+ * Opcode range: 0x14
+ * Stack: uint32 -->
+ */
static void
Ins_SZP1( TT_ExecContext exc,
FT_Long* args )
@@ -5045,12 +5152,12 @@
}
- /*************************************************************************/
- /* */
- /* SZP2[]: Set Zone Pointer 2 */
- /* Opcode range: 0x15 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SZP2[]: Set Zone Pointer 2
+ * Opcode range: 0x15
+ * Stack: uint32 -->
+ */
static void
Ins_SZP2( TT_ExecContext exc,
FT_Long* args )
@@ -5075,12 +5182,12 @@
}
- /*************************************************************************/
- /* */
- /* SZPS[]: Set Zone PointerS */
- /* Opcode range: 0x16 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SZPS[]: Set Zone PointerS
+ * Opcode range: 0x16
+ * Stack: uint32 -->
+ */
static void
Ins_SZPS( TT_ExecContext exc,
FT_Long* args )
@@ -5110,12 +5217,12 @@
}
- /*************************************************************************/
- /* */
- /* INSTCTRL[]: INSTruction ConTRoL */
- /* Opcode range: 0x8E */
- /* Stack: int32 int32 --> */
- /* */
+ /**************************************************************************
+ *
+ * INSTCTRL[]: INSTruction ConTRoL
+ * Opcode range: 0x8E
+ * Stack: int32 int32 -->
+ */
static void
Ins_INSTCTRL( TT_ExecContext exc,
FT_Long* args )
@@ -5172,12 +5279,12 @@
}
- /*************************************************************************/
- /* */
- /* SCANCTRL[]: SCAN ConTRoL */
- /* Opcode range: 0x85 */
- /* Stack: uint32? --> */
- /* */
+ /**************************************************************************
+ *
+ * SCANCTRL[]: SCAN ConTRoL
+ * Opcode range: 0x85
+ * Stack: uint32? -->
+ */
static void
Ins_SCANCTRL( TT_ExecContext exc,
FT_Long* args )
@@ -5219,12 +5326,12 @@
}
- /*************************************************************************/
- /* */
- /* SCANTYPE[]: SCAN TYPE */
- /* Opcode range: 0x8D */
- /* Stack: uint16 --> */
- /* */
+ /**************************************************************************
+ *
+ * SCANTYPE[]: SCAN TYPE
+ * Opcode range: 0x8D
+ * Stack: uint16 -->
+ */
static void
Ins_SCANTYPE( TT_ExecContext exc,
FT_Long* args )
@@ -5234,19 +5341,19 @@
}
- /*************************************************************************/
- /* */
- /* MANAGING OUTLINES */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * MANAGING OUTLINES
+ *
+ */
- /*************************************************************************/
- /* */
- /* FLIPPT[]: FLIP PoinT */
- /* Opcode range: 0x80 */
- /* Stack: uint32... --> */
- /* */
+ /**************************************************************************
+ *
+ * FLIPPT[]: FLIP PoinT
+ * Opcode range: 0x80
+ * Stack: uint32... -->
+ */
static void
Ins_FLIPPT( TT_ExecContext exc )
{
@@ -5295,12 +5402,12 @@
}
- /*************************************************************************/
- /* */
- /* FLIPRGON[]: FLIP RanGe ON */
- /* Opcode range: 0x81 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * FLIPRGON[]: FLIP RanGe ON
+ * Opcode range: 0x81
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_FLIPRGON( TT_ExecContext exc,
FT_Long* args )
@@ -5333,12 +5440,12 @@
}
- /*************************************************************************/
- /* */
- /* FLIPRGOFF: FLIP RanGe OFF */
- /* Opcode range: 0x82 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * FLIPRGOFF: FLIP RanGe OFF
+ * Opcode range: 0x82
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_FLIPRGOFF( TT_ExecContext exc,
FT_Long* args )
@@ -5450,12 +5557,12 @@
}
- /*************************************************************************/
- /* */
- /* SHP[a]: SHift Point by the last point */
- /* Opcode range: 0x32-0x33 */
- /* Stack: uint32... --> */
- /* */
+ /**************************************************************************
+ *
+ * SHP[a]: SHift Point by the last point
+ * Opcode range: 0x32-0x33
+ * Stack: uint32... -->
+ */
static void
Ins_SHP( TT_ExecContext exc )
{
@@ -5507,16 +5614,16 @@
}
- /*************************************************************************/
- /* */
- /* SHC[a]: SHift Contour */
- /* Opcode range: 0x34-35 */
- /* Stack: uint32 --> */
- /* */
- /* UNDOCUMENTED: According to Greg Hitchcock, there is one (virtual) */
- /* contour in the twilight zone, namely contour number */
- /* zero which includes all points of it. */
- /* */
+ /**************************************************************************
+ *
+ * SHC[a]: SHift Contour
+ * Opcode range: 0x34-35
+ * Stack: uint32 -->
+ *
+ * UNDOCUMENTED: According to Greg Hitchcock, there is one (virtual)
+ * contour in the twilight zone, namely contour number
+ * zero which includes all points of it.
+ */
static void
Ins_SHC( TT_ExecContext exc,
FT_Long* args )
@@ -5563,12 +5670,12 @@
}
- /*************************************************************************/
- /* */
- /* SHZ[a]: SHift Zone */
- /* Opcode range: 0x36-37 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * SHZ[a]: SHift Zone
+ * Opcode range: 0x36-37
+ * Stack: uint32 -->
+ */
static void
Ins_SHZ( TT_ExecContext exc,
FT_Long* args )
@@ -5611,12 +5718,12 @@
}
- /*************************************************************************/
- /* */
- /* SHPIX[]: SHift points by a PIXel amount */
- /* Opcode range: 0x38 */
- /* Stack: f26.6 uint32... --> */
- /* */
+ /**************************************************************************
+ *
+ * SHPIX[]: SHift points by a PIXel amount
+ * Opcode range: 0x38
+ * Stack: f26.6 uint32... -->
+ */
static void
Ins_SHPIX( TT_ExecContext exc,
FT_Long* args )
@@ -5771,12 +5878,12 @@
}
- /*************************************************************************/
- /* */
- /* MSIRP[a]: Move Stack Indirect Relative Position */
- /* Opcode range: 0x3A-0x3B */
- /* Stack: f26.6 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * MSIRP[a]: Move Stack Indirect Relative Position
+ * Opcode range: 0x3A-0x3B
+ * Stack: f26.6 uint32 -->
+ */
static void
Ins_MSIRP( TT_ExecContext exc,
FT_Long* args )
@@ -5846,12 +5953,12 @@
}
- /*************************************************************************/
- /* */
- /* MDAP[a]: Move Direct Absolute Point */
- /* Opcode range: 0x2E-0x2F */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * MDAP[a]: Move Direct Absolute Point
+ * Opcode range: 0x2E-0x2F
+ * Stack: uint32 -->
+ */
static void
Ins_MDAP( TT_ExecContext exc,
FT_Long* args )
@@ -5900,12 +6007,12 @@
}
- /*************************************************************************/
- /* */
- /* MIAP[a]: Move Indirect Absolute Point */
- /* Opcode range: 0x3E-0x3F */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * MIAP[a]: Move Indirect Absolute Point
+ * Opcode range: 0x3E-0x3F
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_MIAP( TT_ExecContext exc,
FT_Long* args )
@@ -6020,12 +6127,12 @@
}
- /*************************************************************************/
- /* */
- /* MDRP[abcde]: Move Direct Relative Point */
- /* Opcode range: 0xC0-0xDF */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * MDRP[abcde]: Move Direct Relative Point
+ * Opcode range: 0xC0-0xDF
+ * Stack: uint32 -->
+ */
static void
Ins_MDRP( TT_ExecContext exc,
FT_Long* args )
@@ -6164,12 +6271,12 @@
}
- /*************************************************************************/
- /* */
- /* MIRP[abcde]: Move Indirect Relative Point */
- /* Opcode range: 0xE0-0xFF */
- /* Stack: int32? uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * MIRP[abcde]: Move Indirect Relative Point
+ * Opcode range: 0xE0-0xFF
+ * Stack: int32? uint32 -->
+ */
static void
Ins_MIRP( TT_ExecContext exc,
FT_Long* args )
@@ -6189,6 +6296,8 @@
FT_Bool reverse_move = FALSE;
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ FT_F26Dot6 delta;
+
minimum_distance = exc->GS.minimum_distance;
control_value_cutin = exc->GS.control_value_cutin;
@@ -6221,8 +6330,11 @@
/* single width test */
- if ( FT_ABS( cvt_dist - exc->GS.single_width_value ) <
- exc->GS.single_width_cutin )
+ delta = SUB_LONG( cvt_dist, exc->GS.single_width_value );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
+
+ if ( delta < exc->GS.single_width_cutin )
{
if ( cvt_dist >= 0 )
cvt_dist = exc->GS.single_width_value;
@@ -6251,7 +6363,7 @@
if ( exc->GS.auto_flip )
{
if ( ( org_dist ^ cvt_dist ) < 0 )
- cvt_dist = -cvt_dist;
+ cvt_dist = NEG_LONG( cvt_dist );
}
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
@@ -6276,9 +6388,6 @@
if ( exc->GS.gep0 == exc->GS.gep1 )
{
- FT_F26Dot6 delta;
-
-
/* XXX: According to Greg Hitchcock, the following wording is */
/* the right one: */
/* */
@@ -6313,9 +6422,6 @@
exc->ignore_x_mode &&
exc->GS.gep0 == exc->GS.gep1 )
{
- FT_F26Dot6 delta;
-
-
delta = SUB_LONG( cvt_dist, org_dist );
if ( delta < 0 )
delta = NEG_LONG( delta );
@@ -6412,12 +6518,12 @@
}
- /*************************************************************************/
- /* */
- /* ALIGNRP[]: ALIGN Relative Point */
- /* Opcode range: 0x3C */
- /* Stack: uint32 uint32... --> */
- /* */
+ /**************************************************************************
+ *
+ * ALIGNRP[]: ALIGN Relative Point
+ * Opcode range: 0x3C
+ * Stack: uint32 uint32... -->
+ */
static void
Ins_ALIGNRP( TT_ExecContext exc )
{
@@ -6475,12 +6581,12 @@
}
- /*************************************************************************/
- /* */
- /* ISECT[]: moves point to InterSECTion */
- /* Opcode range: 0x0F */
- /* Stack: 5 * uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * ISECT[]: moves point to InterSECTion
+ * Opcode range: 0x0F
+ * Stack: 5 * uint32 -->
+ */
static void
Ins_ISECT( TT_ExecContext exc,
FT_Long* args )
@@ -6571,12 +6677,12 @@
}
- /*************************************************************************/
- /* */
- /* ALIGNPTS[]: ALIGN PoinTS */
- /* Opcode range: 0x27 */
- /* Stack: uint32 uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * ALIGNPTS[]: ALIGN PoinTS
+ * Opcode range: 0x27
+ * Stack: uint32 uint32 -->
+ */
static void
Ins_ALIGNPTS( TT_ExecContext exc,
FT_Long* args )
@@ -6603,12 +6709,12 @@
}
- /*************************************************************************/
- /* */
- /* IP[]: Interpolate Point */
- /* Opcode range: 0x39 */
- /* Stack: uint32... --> */
- /* */
+ /**************************************************************************
+ *
+ * IP[]: Interpolate Point
+ * Opcode range: 0x39
+ * Stack: uint32... -->
+ */
/* SOMETIMES, DUMBER CODE IS BETTER CODE */
@@ -6763,12 +6869,12 @@
}
- /*************************************************************************/
- /* */
- /* UTP[a]: UnTouch Point */
- /* Opcode range: 0x29 */
- /* Stack: uint32 --> */
- /* */
+ /**************************************************************************
+ *
+ * UTP[a]: UnTouch Point
+ * Opcode range: 0x29
+ * Stack: uint32 -->
+ */
static void
Ins_UTP( TT_ExecContext exc,
FT_Long* args )
@@ -6932,12 +7038,12 @@
}
- /*************************************************************************/
- /* */
- /* IUP[a]: Interpolate Untouched Points */
- /* Opcode range: 0x30-0x31 */
- /* Stack: --> */
- /* */
+ /**************************************************************************
+ *
+ * IUP[a]: Interpolate Untouched Points
+ * Opcode range: 0x30-0x31
+ * Stack: -->
+ */
static void
Ins_IUP( TT_ExecContext exc )
{
@@ -7060,12 +7166,12 @@
}
- /*************************************************************************/
- /* */
- /* DELTAPn[]: DELTA exceptions P1, P2, P3 */
- /* Opcode range: 0x5D,0x71,0x72 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
+ /**************************************************************************
+ *
+ * DELTAPn[]: DELTA exceptions P1, P2, P3
+ * Opcode range: 0x5D,0x71,0x72
+ * Stack: uint32 (2 * uint32)... -->
+ */
static void
Ins_DELTAP( TT_ExecContext exc,
FT_Long* args )
@@ -7142,12 +7248,12 @@
if ( SUBPIXEL_HINTING_INFINALITY )
{
/*
- * Allow delta move if
+ * Allow delta move if
*
- * - not using ignore_x_mode rendering,
- * - glyph is specifically set to allow it, or
- * - glyph is composite and freedom vector is not in subpixel
- * direction.
+ * - not using ignore_x_mode rendering,
+ * - glyph is specifically set to allow it, or
+ * - glyph is composite and freedom vector is not in subpixel
+ * direction.
*/
if ( !exc->ignore_x_mode ||
( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) ||
@@ -7227,12 +7333,12 @@
}
- /*************************************************************************/
- /* */
- /* DELTACn[]: DELTA exceptions C1, C2, C3 */
- /* Opcode range: 0x73,0x74,0x75 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
+ /**************************************************************************
+ *
+ * DELTACn[]: DELTA exceptions C1, C2, C3
+ * Opcode range: 0x73,0x74,0x75
+ * Stack: uint32 (2 * uint32)... -->
+ */
static void
Ins_DELTAC( TT_ExecContext exc,
FT_Long* args )
@@ -7305,27 +7411,27 @@
}
- /*************************************************************************/
- /* */
- /* MISC. INSTRUCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * MISC. INSTRUCTIONS
+ *
+ */
- /*************************************************************************/
- /* */
- /* GETINFO[]: GET INFOrmation */
- /* Opcode range: 0x88 */
- /* Stack: uint32 --> uint32 */
- /* */
- /* XXX: UNDOCUMENTED: Selector bits higher than 9 are currently (May */
- /* 2015) not documented in the OpenType specification. */
- /* */
- /* Selector bit 11 is incorrectly described as bit 8, while the */
- /* real meaning of bit 8 (vertical LCD subpixels) stays */
- /* undocumented. The same mistake can be found in Greg Hitchcock's */
- /* whitepaper. */
- /* */
+ /**************************************************************************
+ *
+ * GETINFO[]: GET INFOrmation
+ * Opcode range: 0x88
+ * Stack: uint32 --> uint32
+ *
+ * XXX: UNDOCUMENTED: Selector bits higher than 9 are currently (May
+ * 2015) not documented in the OpenType specification.
+ *
+ * Selector bit 11 is incorrectly described as bit 8, while the
+ * real meaning of bit 8 (vertical LCD subpixels) stays
+ * undocumented. The same mistake can be found in Greg Hitchcock's
+ * whitepaper.
+ */
static void
Ins_GETINFO( TT_ExecContext exc,
FT_Long* args )
@@ -7337,11 +7443,11 @@
K = 0;
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /********************************/
- /* RASTERIZER VERSION */
- /* Selector Bit: 0 */
- /* Return Bit(s): 0-7 */
- /* */
+ /*********************************
+ * RASTERIZER VERSION
+ * Selector Bit: 0
+ * Return Bit(s): 0-7
+ */
if ( SUBPIXEL_HINTING_INFINALITY &&
( args[0] & 1 ) != 0 &&
exc->subpixel_hinting )
@@ -7362,39 +7468,40 @@
if ( ( args[0] & 1 ) != 0 )
K = driver->interpreter_version;
- /********************************/
- /* GLYPH ROTATED */
- /* Selector Bit: 1 */
- /* Return Bit(s): 8 */
- /* */
+ /*********************************
+ * GLYPH ROTATED
+ * Selector Bit: 1
+ * Return Bit(s): 8
+ */
if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated )
K |= 1 << 8;
- /********************************/
- /* GLYPH STRETCHED */
- /* Selector Bit: 2 */
- /* Return Bit(s): 9 */
- /* */
+ /*********************************
+ * GLYPH STRETCHED
+ * Selector Bit: 2
+ * Return Bit(s): 9
+ */
if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched )
K |= 1 << 9;
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /********************************/
- /* VARIATION GLYPH */
- /* Selector Bit: 3 */
- /* Return Bit(s): 10 */
- /* */
- /* XXX: UNDOCUMENTED! */
+ /*********************************
+ * VARIATION GLYPH
+ * Selector Bit: 3
+ * Return Bit(s): 10
+ *
+ * XXX: UNDOCUMENTED!
+ */
if ( (args[0] & 8 ) != 0 && exc->face->blend )
K |= 1 << 10;
#endif
- /********************************/
- /* BI-LEVEL HINTING AND */
- /* GRAYSCALE RENDERING */
- /* Selector Bit: 5 */
- /* Return Bit(s): 12 */
- /* */
+ /*********************************
+ * BI-LEVEL HINTING AND
+ * GRAYSCALE RENDERING
+ * Selector Bit: 5
+ * Return Bit(s): 12
+ */
if ( ( args[0] & 32 ) != 0 && exc->grayscale )
K |= 1 << 12;
@@ -7405,50 +7512,54 @@
/* Bold Italic'. */
if ( SUBPIXEL_HINTING_MINIMAL && exc->subpixel_hinting_lean )
{
- /********************************/
- /* HINTING FOR SUBPIXEL */
- /* Selector Bit: 6 */
- /* Return Bit(s): 13 */
- /* */
- /* v40 does subpixel hinting by default. */
+ /*********************************
+ * HINTING FOR SUBPIXEL
+ * Selector Bit: 6
+ * Return Bit(s): 13
+ *
+ * v40 does subpixel hinting by default.
+ */
if ( ( args[0] & 64 ) != 0 )
K |= 1 << 13;
- /********************************/
- /* VERTICAL LCD SUBPIXELS? */
- /* Selector Bit: 8 */
- /* Return Bit(s): 15 */
- /* */
+ /*********************************
+ * VERTICAL LCD SUBPIXELS?
+ * Selector Bit: 8
+ * Return Bit(s): 15
+ */
if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd_lean )
K |= 1 << 15;
- /********************************/
- /* SUBPIXEL POSITIONED? */
- /* Selector Bit: 10 */
- /* Return Bit(s): 17 */
- /* */
- /* XXX: FreeType supports it, dependent on what client does? */
+ /*********************************
+ * SUBPIXEL POSITIONED?
+ * Selector Bit: 10
+ * Return Bit(s): 17
+ *
+ * XXX: FreeType supports it, dependent on what client does?
+ */
if ( ( args[0] & 1024 ) != 0 )
K |= 1 << 17;
- /********************************/
- /* SYMMETRICAL SMOOTHING */
- /* Selector Bit: 11 */
- /* Return Bit(s): 18 */
- /* */
- /* The only smoothing method FreeType supports unless someone sets */
- /* FT_LOAD_TARGET_MONO. */
+ /*********************************
+ * SYMMETRICAL SMOOTHING
+ * Selector Bit: 11
+ * Return Bit(s): 18
+ *
+ * The only smoothing method FreeType supports unless someone sets
+ * FT_LOAD_TARGET_MONO.
+ */
if ( ( args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean )
K |= 1 << 18;
- /********************************/
- /* CLEARTYPE HINTING AND */
- /* GRAYSCALE RENDERING */
- /* Selector Bit: 12 */
- /* Return Bit(s): 19 */
- /* */
- /* Grayscale rendering is what FreeType does anyway unless someone */
- /* sets FT_LOAD_TARGET_MONO or FT_LOAD_TARGET_LCD(_V) */
+ /*********************************
+ * CLEARTYPE HINTING AND
+ * GRAYSCALE RENDERING
+ * Selector Bit: 12
+ * Return Bit(s): 19
+ *
+ * Grayscale rendering is what FreeType does anyway unless someone
+ * sets FT_LOAD_TARGET_MONO or FT_LOAD_TARGET_LCD(_V)
+ */
if ( ( args[0] & 4096 ) != 0 && exc->grayscale_cleartype )
K |= 1 << 19;
}
@@ -7462,67 +7573,73 @@
if ( exc->rasterizer_version >= 37 )
{
- /********************************/
- /* HINTING FOR SUBPIXEL */
- /* Selector Bit: 6 */
- /* Return Bit(s): 13 */
- /* */
+ /*********************************
+ * HINTING FOR SUBPIXEL
+ * Selector Bit: 6
+ * Return Bit(s): 13
+ */
if ( ( args[0] & 64 ) != 0 && exc->subpixel_hinting )
K |= 1 << 13;
- /********************************/
- /* COMPATIBLE WIDTHS ENABLED */
- /* Selector Bit: 7 */
- /* Return Bit(s): 14 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * COMPATIBLE WIDTHS ENABLED
+ * Selector Bit: 7
+ * Return Bit(s): 14
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 128 ) != 0 && exc->compatible_widths )
K |= 1 << 14;
- /********************************/
- /* VERTICAL LCD SUBPIXELS? */
- /* Selector Bit: 8 */
- /* Return Bit(s): 15 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * VERTICAL LCD SUBPIXELS?
+ * Selector Bit: 8
+ * Return Bit(s): 15
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd )
K |= 1 << 15;
- /********************************/
- /* HINTING FOR BGR? */
- /* Selector Bit: 9 */
- /* Return Bit(s): 16 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * HINTING FOR BGR?
+ * Selector Bit: 9
+ * Return Bit(s): 16
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 512 ) != 0 && exc->bgr )
K |= 1 << 16;
if ( exc->rasterizer_version >= 38 )
{
- /********************************/
- /* SUBPIXEL POSITIONED? */
- /* Selector Bit: 10 */
- /* Return Bit(s): 17 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * SUBPIXEL POSITIONED?
+ * Selector Bit: 10
+ * Return Bit(s): 17
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 1024 ) != 0 && exc->subpixel_positioned )
K |= 1 << 17;
- /********************************/
- /* SYMMETRICAL SMOOTHING */
- /* Selector Bit: 11 */
- /* Return Bit(s): 18 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * SYMMETRICAL SMOOTHING
+ * Selector Bit: 11
+ * Return Bit(s): 18
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 2048 ) != 0 && exc->symmetrical_smoothing )
K |= 1 << 18;
- /********************************/
- /* GRAY CLEARTYPE */
- /* Selector Bit: 12 */
- /* Return Bit(s): 19 */
- /* */
- /* Functionality still needs to be added */
+ /*********************************
+ * GRAY CLEARTYPE
+ * Selector Bit: 12
+ * Return Bit(s): 19
+ *
+ * Functionality still needs to be added
+ */
if ( ( args[0] & 4096 ) != 0 && exc->gray_cleartype )
K |= 1 << 19;
}
@@ -7537,16 +7654,16 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /*************************************************************************/
- /* */
- /* GETVARIATION[]: get normalized variation (blend) coordinates */
- /* Opcode range: 0x91 */
- /* Stack: --> f2.14... */
- /* */
- /* XXX: UNDOCUMENTED! There is no official documentation from Apple for */
- /* this bytecode instruction. Active only if a font has GX */
- /* variation axes. */
- /* */
+ /**************************************************************************
+ *
+ * GETVARIATION[]: get normalized variation (blend) coordinates
+ * Opcode range: 0x91
+ * Stack: --> f2.14...
+ *
+ * XXX: UNDOCUMENTED! There is no official documentation from Apple for
+ * this bytecode instruction. Active only if a font has GX
+ * variation axes.
+ */
static void
Ins_GETVARIATION( TT_ExecContext exc,
FT_Long* args )
@@ -7576,15 +7693,15 @@
}
- /*************************************************************************/
- /* */
- /* GETDATA[]: no idea what this is good for */
- /* Opcode range: 0x92 */
- /* Stack: --> 17 */
- /* */
- /* XXX: UNDOCUMENTED! There is no documentation from Apple for this */
- /* very weird bytecode instruction. */
- /* */
+ /**************************************************************************
+ *
+ * GETDATA[]: no idea what this is good for
+ * Opcode range: 0x92
+ * Stack: --> 17
+ *
+ * XXX: UNDOCUMENTED! There is no documentation from Apple for this
+ * very weird bytecode instruction.
+ */
static void
Ins_GETDATA( FT_Long* args )
{
@@ -7632,34 +7749,34 @@
}
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * RUN
+ *
+ * This function executes a run of opcodes. It will exit in the
+ * following cases:
+ *
+ * - Errors (in which case it returns FALSE).
+ *
+ * - Reaching the end of the main code range (returns TRUE).
+ * Reaching the end of a code range within a function call is an
+ * error.
+ *
+ * - After executing one single opcode, if the flag `Instruction_Trap'
+ * is set to TRUE (returns TRUE).
+ *
+ * On exit with TRUE, test IP < CodeSize to know whether it comes from
+ * an instruction trap or a normal termination.
+ *
+ *
+ * Note: The documented DEBUG opcode pops a value from the stack. This
+ * behaviour is unsupported; here a DEBUG opcode is always an
+ * error.
+ *
+ *
+ * THIS IS THE INTERPRETER'S MAIN LOOP.
+ *
+ */
/* documentation is in ttinterp.h */
@@ -7691,16 +7808,16 @@
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
/*
- * Toggle backward compatibility according to what font wants, except
- * when
+ * Toggle backward compatibility according to what font wants, except
+ * when
*
- * 1) we have a `tricky' font that heavily relies on the interpreter to
- * render glyphs correctly, for example DFKai-SB, or
- * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
+ * 1) we have a `tricky' font that heavily relies on the interpreter to
+ * render glyphs correctly, for example DFKai-SB, or
+ * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
*
- * In those cases, backward compatibility needs to be turned off to get
- * correct rendering. The rendering is then completely up to the
- * font's programming.
+ * In those cases, backward compatibility needs to be turned off to get
+ * correct rendering. The rendering is then completely up to the
+ * font's programming.
*
*/
if ( SUBPIXEL_HINTING_MINIMAL &&
@@ -7801,7 +7918,7 @@
/* and the first few stack elements also */
FT_TRACE6(( " " ));
FT_TRACE7(( "%06d ", exc->IP ));
- FT_TRACE6(( opcode_name[exc->opcode] + 2 ));
+ FT_TRACE6(( "%s", opcode_name[exc->opcode] + 2 ));
FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A'
? 2
: 12 - ( *opcode_name[exc->opcode] - '0' ),
diff --git a/freetype/src/truetype/ttinterp.h b/freetype/src/truetype/ttinterp.h
index 2966439e..0cb1e892 100644
--- a/freetype/src/truetype/ttinterp.h
+++ b/freetype/src/truetype/ttinterp.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttinterp.h */
-/* */
-/* TrueType bytecode interpreter (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttinterp.h
+ *
+ * TrueType bytecode interpreter (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,10 +26,10 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* Rounding mode constants. */
- /* */
+ /**************************************************************************
+ *
+ * Rounding mode constants.
+ */
#define TT_Round_Off 5
#define TT_Round_To_Half_Grid 0
#define TT_Round_To_Grid 1
@@ -40,13 +40,13 @@ FT_BEGIN_HEADER
#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). */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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
@@ -84,10 +84,10 @@ FT_BEGIN_HEADER
FT_F26Dot6 value );
- /*************************************************************************/
- /* */
- /* This structure defines a call record, used to manage function calls. */
- /* */
+ /**************************************************************************
+ *
+ * This structure defines a call record, used to manage function calls.
+ */
typedef struct TT_CallRec_
{
FT_Int Caller_Range;
@@ -101,11 +101,11 @@ FT_BEGIN_HEADER
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /*************************************************************************/
- /* */
- /* These structures define rules used to tweak subpixel hinting for */
- /* various fonts. "", 0, "", NULL value indicates to match any value. */
- /* */
+ /**************************************************************************
+ *
+ * These structures define rules used to tweak subpixel hinting for
+ * various fonts. "", 0, "", NULL value indicates to match any value.
+ */
#define SPH_MAX_NAME_SIZE 32
#define SPH_MAX_CLASS_MEMBERS 100
@@ -141,11 +141,11 @@ FT_BEGIN_HEADER
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- /*************************************************************************/
- /* */
- /* The main structure for the interpreter which collects all necessary */
- /* variables and states. */
- /* */
+ /**************************************************************************
+ *
+ * The main structure for the interpreter which collects all necessary
+ * variables and states.
+ */
typedef struct TT_ExecContextRec_
{
TT_Face face;
@@ -352,7 +352,7 @@ FT_BEGIN_HEADER
* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
*
* [3] Beat Stamm describes it in more detail:
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec12
+ * http://rastertragedy.com/RTRCh4.htm#Sec12.
*
* [4] The list of `native ClearType' fonts is small at the time of this
* writing; I found the following on a Windows 10 Update 1511
@@ -464,26 +464,27 @@ FT_BEGIN_HEADER
#endif /* TT_USE_BYTECODE_INTERPRETER */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_New_Context */
- /* */
- /* <Description> */
- /* Queries the face context for a given font. Note that there is */
- /* now a _single_ execution context in the TrueType driver which is */
- /* shared among faces. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* A handle to the execution context. Initialized for `face'. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* (And right now only the glyph loader uses it.) */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * TT_New_Context
+ *
+ * @Description:
+ * Queries the face context for a given font. Note that there is
+ * now a _single_ execution context in the TrueType driver which is
+ * shared among faces.
+ *
+ * @Input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @Return:
+ * A handle to the execution context. Initialized for `face'.
+ *
+ * @Note:
+ * Only the glyph loader and debugger should call this function.
+ * (And right now only the glyph loader uses it.)
+ */
FT_EXPORT( TT_ExecContext )
TT_New_Context( TT_Driver driver );
@@ -506,27 +507,28 @@ FT_BEGIN_HEADER
#endif /* TT_USE_BYTECODE_INTERPRETER */
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_RunIns */
- /* */
- /* <Description> */
- /* Executes one or more instruction in the execution context. This */
- /* is the main function of the TrueType opcode interpreter. */
- /* */
- /* <Input> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only the object manager and debugger should call this function. */
- /* */
- /* This function is publicly exported because it is directly */
- /* invoked by the TrueType debugger. */
- /* */
+ /**************************************************************************
+ *
+ * @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 );
diff --git a/freetype/src/truetype/ttobjs.c b/freetype/src/truetype/ttobjs.c
index 6685dc81..e4775a51 100644
--- a/freetype/src/truetype/ttobjs.c
+++ b/freetype/src/truetype/ttobjs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttobjs.c */
-/* */
-/* Objects manager (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttobjs.c
+ *
+ * Objects manager (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -36,36 +36,37 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT 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. */
- /* */
+ /**************************************************************************
+ *
+ * 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 )
{
@@ -87,27 +88,31 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -143,7 +148,7 @@
/* This list shall be expanded as we find more of them. */
static FT_Bool
- tt_check_trickyness_family( FT_String* name )
+ tt_check_trickyness_family( const FT_String* name )
{
#define TRICK_NAMES_MAX_CHARACTERS 19
@@ -566,32 +571,37 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_init */
- /* */
- /* <Description> */
- /* Initialize a given TrueType face object. */
- /* */
- /* <Input> */
- /* stream :: The source font stream. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: Number of additional generic parameters. Ignored. */
- /* */
- /* params :: Additional generic parameters. Ignored. */
- /* */
- /* <InOut> */
- /* face :: The newly built face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_face_init
+ *
+ * @Description:
+ * Initialize a given TrueType face object.
+ *
+ * @Input:
+ * stream ::
+ * The source font stream.
+ *
+ * face_index ::
+ * The index of the TrueType font, if we are opening a
+ * collection, in bits 0-15. The numbered instance
+ * index~+~1 of a GX (sub)font, if applicable, in bits
+ * 16-30.
+ *
+ * num_params ::
+ * Number of additional generic parameters. Ignored.
+ *
+ * params ::
+ * Additional generic parameters. Ignored.
+ *
+ * @InOut:
+ * face ::
+ * The newly built face object.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_face_init( FT_Stream stream,
FT_Face ttface, /* TT_Face */
@@ -743,17 +753,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_done */
- /* */
- /* <Description> */
- /* Finalize a given face object. */
- /* */
- /* <Input> */
- /* face :: A pointer to the face object to destroy. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
{
@@ -799,30 +810,32 @@
}
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SIZE FUNCTIONS
+ *
+ */
#ifdef TT_USE_BYTECODE_INTERPRETER
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_run_fpgm */
- /* */
- /* <Description> */
- /* Run the font program. */
- /* */
- /* <Input> */
- /* size :: A handle to the size object. */
- /* */
- /* pedantic :: Set if bytecode execution should be pedantic. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_size_run_fpgm
+ *
+ * @Description:
+ * Run the font program.
+ *
+ * @Input:
+ * size ::
+ * A handle to the size object.
+ *
+ * pedantic ::
+ * Set if bytecode execution should be pedantic.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_size_run_fpgm( TT_Size size,
FT_Bool pedantic )
@@ -899,22 +912,24 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_run_prep */
- /* */
- /* <Description> */
- /* Run the control value program. */
- /* */
- /* <Input> */
- /* size :: A handle to the size object. */
- /* */
- /* pedantic :: Set if bytecode execution should be pedantic. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_size_run_prep
+ *
+ * @Description:
+ * Run the control value program.
+ *
+ * @Input:
+ * size ::
+ * A handle to the size object.
+ *
+ * pedantic ::
+ * Set if bytecode execution should be pedantic.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
tt_size_run_prep( TT_Size size,
FT_Bool pedantic )
@@ -922,7 +937,22 @@
TT_Face face = (TT_Face)size->root.face;
TT_ExecContext exec;
FT_Error error;
+ FT_UInt i;
+ /* unscaled CVT values are already stored in 26.6 format */
+ FT_Fixed scale = size->ttmetrics.scale >> 6;
+
+
+ /* Scale the cvt values to the new ppem. */
+ /* By default, we use the y ppem value for scaling. */
+ FT_TRACE6(( "CVT values:\n" ));
+ for ( i = 0; i < size->cvt_size; i++ )
+ {
+ size->cvt[i] = FT_MulFix( face->cvt[i], scale );
+ FT_TRACE6(( " %3d: %f (%f)\n",
+ i, face->cvt[i] / 64.0, size->cvt[i] / 64.0 ));
+ }
+ FT_TRACE6(( "\n" ));
exec = size->context;
@@ -1079,11 +1109,17 @@
tt_metrics->rotated = FALSE;
tt_metrics->stretched = FALSE;
- /* set default engine compensation */
- tt_metrics->compensations[0] = 0; /* gray */
- tt_metrics->compensations[1] = 0; /* black */
- tt_metrics->compensations[2] = 0; /* white */
- tt_metrics->compensations[3] = 0; /* reserved */
+ /* Set default engine compensation. Value 3 is not described */
+ /* in the OpenType specification (as of Mai 2019), but Greg */
+ /* says that MS handles it the same as `gray'. */
+ /* */
+ /* The Apple specification says that the compensation for */
+ /* `gray' is always zero. FreeType doesn't do any */
+ /* compensation at all. */
+ tt_metrics->compensations[0] = 0; /* gray */
+ tt_metrics->compensations[1] = 0; /* black */
+ tt_metrics->compensations[2] = 0; /* white */
+ tt_metrics->compensations[3] = 0; /* the same as gray */
}
/* allocate function defs, instruction defs, cvt, and storage area */
@@ -1156,13 +1192,7 @@
if ( size->cvt_ready < 0 )
{
FT_UInt i;
- TT_Face face = (TT_Face)size->root.face;
-
- /* Scale the cvt values to the new ppem. */
- /* We use by default the y ppem to scale the CVT. */
- for ( i = 0; i < size->cvt_size; i++ )
- size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
/* all twilight points are originally zero */
for ( i = 0; i < (FT_UInt)size->twilight.n_points; i++ )
@@ -1191,20 +1221,21 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
{
@@ -1224,17 +1255,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_done */
- /* */
- /* <Description> */
- /* The TrueType size object finalizer. */
- /* */
- /* <Input> */
- /* size :: A handle to the target size object. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
{
@@ -1249,22 +1281,24 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_reset */
- /* */
- /* <Description> */
- /* Reset a TrueType size when resolutions and character dimensions */
- /* have been changed. */
- /* */
- /* <Input> */
- /* size :: A handle to the target size object. */
- /* */
- /* only_height :: Only recompute ascender, descender, and height; */
- /* this flag is used for variation fonts where */
- /* `tt_size_reset' is used as an iterator function. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * tt_size_reset
+ *
+ * @Description:
+ * Reset a TrueType size when resolutions and character dimensions
+ * have been changed.
+ *
+ * @Input:
+ * size ::
+ * A handle to the target size object.
+ *
+ * only_height ::
+ * Only recompute ascender, descender, and height;
+ * this flag is used for variation fonts where
+ * `tt_size_reset' is used as an iterator function.
+ */
FT_LOCAL_DEF( FT_Error )
tt_size_reset( TT_Size size,
FT_Bool only_height )
@@ -1358,20 +1392,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
{
@@ -1398,17 +1433,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_driver_done */
- /* */
- /* <Description> */
- /* Finalize a given TrueType driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target TrueType driver. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
{
@@ -1416,20 +1452,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
{
diff --git a/freetype/src/truetype/ttobjs.h b/freetype/src/truetype/ttobjs.h
index 38fa30e4..9fc654d5 100644
--- a/freetype/src/truetype/ttobjs.h
+++ b/freetype/src/truetype/ttobjs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttobjs.h */
-/* */
-/* Objects manager (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttobjs.h
+ *
+ * Objects manager (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,40 +28,40 @@
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_Driver */
- /* */
- /* <Description> */
- /* A handle to a TrueType driver object. */
- /* */
+ /**************************************************************************
+ *
+ * @Type:
+ * TT_Driver
+ *
+ * @Description:
+ * A handle to a TrueType driver object.
+ */
typedef struct TT_DriverRec_* TT_Driver;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a TrueType glyph slot object. */
- /* */
- /* <Note> */
- /* This is a direct typedef of FT_GlyphSlot, as there is nothing */
- /* specific about the TrueType glyph slot. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @Struct:
+ * TT_GraphicsState
+ *
+ * @Description:
+ * The TrueType graphics state used during bytecode interpretation.
+ */
typedef struct TT_GraphicsState_
{
FT_UShort rp0;
@@ -113,25 +113,25 @@ FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* EXECUTION SUBTABLES */
- /* */
- /* These sub-tables relate to instruction execution. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * 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 */
- /* */
+ /**************************************************************************
+ *
+ * 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,
@@ -152,10 +152,10 @@ FT_BEGIN_HEADER
typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES];
- /*************************************************************************/
- /* */
- /* Defines a function/instruction definition record. */
- /* */
+ /**************************************************************************
+ *
+ * Defines a function/instruction definition record.
+ */
typedef struct TT_DefRecord_
{
FT_Int range; /* in which code range is it located? */
@@ -169,10 +169,10 @@ FT_BEGIN_HEADER
} TT_DefRecord, *TT_DefArray;
- /*************************************************************************/
- /* */
- /* Subglyph transformation record. */
- /* */
+ /**************************************************************************
+ *
+ * Subglyph transformation record.
+ */
typedef struct TT_Transform_
{
FT_Fixed xx, xy; /* transformation matrix coefficients */
@@ -182,72 +182,72 @@ FT_BEGIN_HEADER
} TT_Transform;
- /*************************************************************************/
- /* */
- /* A note regarding non-squared pixels: */
- /* */
- /* (This text will probably go into some docs at some time; for now, it */
- /* is kept here to explain some definitions in the TT_Size_Metrics */
- /* record). */
- /* */
- /* The CVT is a one-dimensional array containing values that control */
- /* certain important characteristics in a font, like the height of all */
- /* capitals, all lowercase letter, default spacing or stem width/height. */
- /* */
- /* These values are found in FUnits in the font file, and must be scaled */
- /* to pixel coordinates before being used by the CVT and glyph programs. */
- /* Unfortunately, when using distinct x and y resolutions (or distinct x */
- /* and y pointsizes), there are two possible scalings. */
- /* */
- /* A first try was to implement a `lazy' scheme where all values were */
- /* scaled when first used. However, while some values are always used */
- /* in the same direction, some others are used under many different */
- /* circumstances and orientations. */
- /* */
- /* I have found a simpler way to do the same, and it even seems to work */
- /* in most of the cases: */
- /* */
- /* - All CVT values are scaled to the maximum ppem size. */
- /* */
- /* - When performing a read or write in the CVT, a ratio factor is used */
- /* to perform adequate scaling. Example: */
- /* */
- /* x_ppem = 14 */
- /* y_ppem = 10 */
- /* */
- /* We choose ppem = x_ppem = 14 as the CVT scaling size. All cvt */
- /* entries are scaled to it. */
- /* */
- /* x_ratio = 1.0 */
- /* y_ratio = y_ppem/ppem (< 1.0) */
- /* */
- /* We compute the current ratio like: */
- /* */
- /* - If projVector is horizontal, */
- /* ratio = x_ratio = 1.0 */
- /* */
- /* - if projVector is vertical, */
- /* ratio = y_ratio */
- /* */
- /* - else, */
- /* ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 ) */
- /* */
- /* Reading a cvt value returns */
- /* ratio * cvt[index] */
- /* */
- /* Writing a cvt value in pixels: */
- /* cvt[index] / ratio */
- /* */
- /* The current ppem is simply */
- /* ratio * ppem */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Metrics used by the TrueType size and context objects. */
- /* */
+ /**************************************************************************
+ *
+ * A note regarding non-squared pixels:
+ *
+ * (This text will probably go into some docs at some time; for now, it
+ * is kept here to explain some definitions in the TT_Size_Metrics
+ * record).
+ *
+ * The CVT is a one-dimensional array containing values that control
+ * certain important characteristics in a font, like the height of all
+ * capitals, all lowercase letter, default spacing or stem width/height.
+ *
+ * These values are found in FUnits in the font file, and must be scaled
+ * to pixel coordinates before being used by the CVT and glyph programs.
+ * Unfortunately, when using distinct x and y resolutions (or distinct x
+ * and y pointsizes), there are two possible scalings.
+ *
+ * A first try was to implement a `lazy' scheme where all values were
+ * scaled when first used. However, while some values are always used
+ * in the same direction, some others are used under many different
+ * circumstances and orientations.
+ *
+ * I have found a simpler way to do the same, and it even seems to work
+ * in most of the cases:
+ *
+ * - All CVT values are scaled to the maximum ppem size.
+ *
+ * - When performing a read or write in the CVT, a ratio factor is used
+ * to perform adequate scaling. Example:
+ *
+ * x_ppem = 14
+ * y_ppem = 10
+ *
+ * We choose ppem = x_ppem = 14 as the CVT scaling size. All cvt
+ * entries are scaled to it.
+ *
+ * x_ratio = 1.0
+ * y_ratio = y_ppem/ppem (< 1.0)
+ *
+ * We compute the current ratio like:
+ *
+ * - If projVector is horizontal,
+ * ratio = x_ratio = 1.0
+ *
+ * - if projVector is vertical,
+ * ratio = y_ratio
+ *
+ * - else,
+ * ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 )
+ *
+ * Reading a cvt value returns
+ * ratio * cvt[index]
+ *
+ * Writing a cvt value in pixels:
+ * cvt[index] / ratio
+ *
+ * The current ppem is simply
+ * ratio * ppem
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * Metrics used by the TrueType size and context objects.
+ */
typedef struct TT_Size_Metrics_
{
/* for non-square pixels */
@@ -268,10 +268,10 @@ FT_BEGIN_HEADER
} TT_Size_Metrics;
- /*************************************************************************/
- /* */
- /* TrueType size class. */
- /* */
+ /**************************************************************************
+ *
+ * TrueType size class.
+ */
typedef struct TT_SizeRec_
{
FT_SizeRec root;
@@ -324,10 +324,10 @@ FT_BEGIN_HEADER
} TT_SizeRec;
- /*************************************************************************/
- /* */
- /* TrueType driver class. */
- /* */
+ /**************************************************************************
+ *
+ * TrueType driver class.
+ */
typedef struct TT_DriverRec_
{
FT_DriverRec root;
@@ -348,10 +348,10 @@ FT_BEGIN_HEADER
/* will always use the TT driver to create them. */
- /*************************************************************************/
- /* */
- /* Face functions */
- /* */
+ /**************************************************************************
+ *
+ * Face functions
+ */
FT_LOCAL( FT_Error )
tt_face_init( FT_Stream stream,
FT_Face ttface, /* TT_Face */
@@ -363,10 +363,10 @@ FT_BEGIN_HEADER
tt_face_done( FT_Face ttface ); /* TT_Face */
- /*************************************************************************/
- /* */
- /* Size functions */
- /* */
+ /**************************************************************************
+ *
+ * Size functions
+ */
FT_LOCAL( FT_Error )
tt_size_init( FT_Size ttsize ); /* TT_Size */
@@ -394,10 +394,10 @@ FT_BEGIN_HEADER
FT_Bool only_height );
- /*************************************************************************/
- /* */
- /* Driver functions */
- /* */
+ /**************************************************************************
+ *
+ * Driver functions
+ */
FT_LOCAL( FT_Error )
tt_driver_init( FT_Module ttdriver ); /* TT_Driver */
@@ -405,10 +405,10 @@ FT_BEGIN_HEADER
tt_driver_done( FT_Module ttdriver ); /* TT_Driver */
- /*************************************************************************/
- /* */
- /* Slot functions */
- /* */
+ /**************************************************************************
+ *
+ * Slot functions
+ */
FT_LOCAL( FT_Error )
tt_slot_init( FT_GlyphSlot slot );
diff --git a/freetype/src/truetype/ttpic.c b/freetype/src/truetype/ttpic.c
deleted file mode 100644
index cdbb8063..00000000
--- a/freetype/src/truetype/ttpic.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.c */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ttpic.h"
-#include "tterrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ttdriver.c */
- FT_Error
- FT_Create_Class_tt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_tt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_tt_service_gx_multi_masters(
- FT_Service_MultiMastersRec* sv_mm );
- void
- FT_Init_Class_tt_service_truetype_glyf(
- FT_Service_TTGlyfRec* sv_ttglyf );
-
-
- void
- tt_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->truetype )
- {
- TTModulePIC* container = (TTModulePIC*)pic_container->truetype;
-
-
- if ( container->tt_services )
- FT_Destroy_Class_tt_services( library, container->tt_services );
- container->tt_services = NULL;
- FT_FREE( container );
- pic_container->truetype = NULL;
- }
- }
-
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- TTModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->truetype = container;
-
- /* initialize pointer table - this is how the module usually */
- /* expects this data */
- error = FT_Create_Class_tt_services( library,
- &container->tt_services );
- if ( error )
- goto Exit;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Init_Class_tt_service_gx_multi_masters(
- &container->tt_service_gx_multi_masters );
-#endif
- FT_Init_Class_tt_service_truetype_glyf(
- &container->tt_service_truetype_glyf );
-
- Exit:
- if ( error )
- tt_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/freetype/src/truetype/ttpic.h b/freetype/src/truetype/ttpic.h
deleted file mode 100644
index df878ae6..00000000
--- a/freetype/src/truetype/ttpic.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.h */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTPIC_H_
-#define TTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define TT_SERVICES_GET tt_services
-#define TT_SERVICE_GX_MULTI_MASTERS_GET tt_service_gx_multi_masters
-#define TT_SERVICE_METRICS_VARIATIONS_GET tt_service_metrics_variations
-#define TT_SERVICE_TRUETYPE_GLYF_GET tt_service_truetype_glyf
-#define TT_SERVICE_PROPERTIES_GET tt_service_properties
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-#include FT_SERVICE_PROPERTIES_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct TTModulePIC_
- {
- FT_ServiceDescRec* tt_services;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Service_MultiMastersRec tt_service_gx_multi_masters;
- FT_Service_MetricsVariationsRec tt_service_metrics_variations;
-#endif
- FT_Service_TTGlyfRec tt_service_truetype_glyf;
- FT_Service_PropertiesRec tt_service_properties;
-
- } TTModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (TTModulePIC*)((lib)->pic_container.truetype) )
-#define TT_SERVICES_GET \
- ( GET_PIC( library )->tt_services )
-#define TT_SERVICE_METRICS_VARIATIONS_GET \
- ( GET_PIC( library )->tt_service_metrics_variations )
-#define TT_SERVICE_GX_MULTI_MASTERS_GET \
- ( GET_PIC( library )->tt_service_gx_multi_masters )
-#define TT_SERVICE_TRUETYPE_GLYF_GET \
- ( GET_PIC( library )->tt_service_truetype_glyf )
-#define TT_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->tt_service_properties )
-
-
- /* see ttpic.c for the implementation */
- void
- tt_driver_class_pic_free( FT_Library library );
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* TTPIC_H_ */
-
-
-/* END */
diff --git a/freetype/src/truetype/ttpload.c b/freetype/src/truetype/ttpload.c
index d9526ad0..bc954c2d 100644
--- a/freetype/src/truetype/ttpload.c
+++ b/freetype/src/truetype/ttpload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttpload.c */
-/* */
-/* TrueType-specific tables loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttpload.c
+ *
+ * TrueType-specific tables loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -31,33 +31,35 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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. */
- /* */
+#define FT_COMPONENT 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 )
@@ -297,23 +299,25 @@
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -348,12 +352,12 @@
goto Exit;
{
- FT_Short* cur = face->cvt;
- FT_Short* limit = cur + face->cvt_size;
+ FT_Int32* cur = face->cvt;
+ FT_Int32* limit = cur + face->cvt_size;
for ( ; cur < limit; cur++ )
- *cur = FT_GET_SHORT();
+ *cur = FT_GET_SHORT() * 64;
}
FT_FRAME_EXIT();
@@ -378,23 +382,25 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -440,23 +446,25 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 )
@@ -501,22 +509,24 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @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,
@@ -610,11 +620,11 @@
}
- /*************************************************************************/
- /* */
- /* Return the advance width table for a given pixel size if it is found */
- /* in the font's `hdmx' table (if any). */
- /* */
+ /**************************************************************************
+ *
+ * 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,
diff --git a/freetype/src/truetype/ttpload.h b/freetype/src/truetype/ttpload.h
index fa125272..022750e3 100644
--- a/freetype/src/truetype/ttpload.h
+++ b/freetype/src/truetype/ttpload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttpload.h */
-/* */
-/* TrueType-specific tables loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttpload.h
+ *
+ * TrueType-specific tables loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/truetype/ttsubpix.c b/freetype/src/truetype/ttsubpix.c
index d94bcc8b..23a2e5b4 100644
--- a/freetype/src/truetype/ttsubpix.c
+++ b/freetype/src/truetype/ttsubpix.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttsubpix.c */
-/* */
-/* TrueType Subpixel Hinting. */
-/* */
-/* Copyright 2010-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttsubpix.c
+ *
+ * TrueType Subpixel Hinting.
+ *
+ * Copyright (C) 2010-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
@@ -30,35 +30,35 @@
#if defined( TT_USE_BYTECODE_INTERPRETER ) && \
defined( TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY )
- /*************************************************************************/
- /* */
- /* These rules affect how the TT Interpreter does hinting, with the */
- /* goal of doing subpixel hinting by (in general) ignoring x moves. */
- /* Some of these rules are fixes that go above and beyond the */
- /* stated techniques in the MS whitepaper on Cleartype, due to */
- /* artifacts in many glyphs. So, these rules make some glyphs render */
- /* better than they do in the MS rasterizer. */
- /* */
- /* "" string or 0 int/char indicates to apply to all glyphs. */
- /* "-" used as dummy placeholders, but any non-matching string works. */
- /* */
- /* Some of this could arguably be implemented in fontconfig, however: */
- /* */
- /* - Fontconfig can't set things on a glyph-by-glyph basis. */
- /* - The tweaks that happen here are very low-level, from an average */
- /* user's point of view and are best implemented in the hinter. */
- /* */
- /* The goal is to make the subpixel hinting techniques as generalized */
- /* as possible across all fonts to prevent the need for extra rules such */
- /* as these. */
- /* */
- /* The rule structure is designed so that entirely new rules can easily */
- /* be added when a new compatibility feature is discovered. */
- /* */
- /* The rule structures could also use some enhancement to handle ranges. */
- /* */
- /* ****************** WORK IN PROGRESS ******************* */
- /* */
+ /**************************************************************************
+ *
+ * These rules affect how the TT Interpreter does hinting, with the
+ * goal of doing subpixel hinting by (in general) ignoring x moves.
+ * Some of these rules are fixes that go above and beyond the
+ * stated techniques in the MS whitepaper on Cleartype, due to
+ * artifacts in many glyphs. So, these rules make some glyphs render
+ * better than they do in the MS rasterizer.
+ *
+ * "" string or 0 int/char indicates to apply to all glyphs.
+ * "-" used as dummy placeholders, but any non-matching string works.
+ *
+ * Some of this could arguably be implemented in fontconfig, however:
+ *
+ * - Fontconfig can't set things on a glyph-by-glyph basis.
+ * - The tweaks that happen here are very low-level, from an average
+ * user's point of view and are best implemented in the hinter.
+ *
+ * The goal is to make the subpixel hinting techniques as generalized
+ * as possible across all fonts to prevent the need for extra rules such
+ * as these.
+ *
+ * The rule structure is designed so that entirely new rules can easily
+ * be added when a new compatibility feature is discovered.
+ *
+ * The rule structures could also use some enhancement to handle ranges.
+ *
+ * ****************** WORK IN PROGRESS *******************
+ */
/* These are `classes' of fonts that can be grouped together and used in */
/* rules below. A blank entry "" is required at the end of these! */
diff --git a/freetype/src/truetype/ttsubpix.h b/freetype/src/truetype/ttsubpix.h
index 1070bb01..4966800c 100644
--- a/freetype/src/truetype/ttsubpix.h
+++ b/freetype/src/truetype/ttsubpix.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* ttsubpix.h */
-/* */
-/* TrueType Subpixel Hinting. */
-/* */
-/* Copyright 2010-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ttsubpix.h
+ *
+ * TrueType Subpixel Hinting.
+ *
+ * Copyright (C) 2010-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
#ifndef TTSUBPIX_H_
@@ -29,11 +29,11 @@ FT_BEGIN_HEADER
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /*************************************************************************/
- /* */
- /* ID flags to identify special functions at FDEF and runtime. */
- /* */
- /* */
+ /**************************************************************************
+ *
+ * ID flags to identify special functions at FDEF and runtime.
+ *
+ */
#define SPH_FDEF_INLINE_DELTA_1 0x0000001
#define SPH_FDEF_INLINE_DELTA_2 0x0000002
#define SPH_FDEF_DIAGONAL_STROKE 0x0000004
@@ -45,11 +45,11 @@ FT_BEGIN_HEADER
#define SPH_FDEF_TYPEMAN_DIAGENDCTRL 0x0000100
- /*************************************************************************/
- /* */
- /* Tweak flags that are set for each glyph by the below rules. */
- /* */
- /* */
+ /**************************************************************************
+ *
+ * Tweak flags that are set for each glyph by the below rules.
+ *
+ */
#define SPH_TWEAK_ALLOW_X_DMOVE 0x0000001UL
#define SPH_TWEAK_ALWAYS_DO_DELTAP 0x0000002UL
#define SPH_TWEAK_ALWAYS_SKIP_DELTAP 0x0000004UL
diff --git a/freetype/src/type1/Jamfile b/freetype/src/type1/Jamfile
index b94b7d0a..0bcfb2e4 100644
--- a/freetype/src/type1/Jamfile
+++ b/freetype/src/type1/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type1 Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type1/module.mk b/freetype/src/type1/module.mk
index 3fea5cc1..2f48c658 100644
--- a/freetype/src/type1/module.mk
+++ b/freetype/src/type1/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type1/rules.mk b/freetype/src/type1/rules.mk
index cb1a1428..901169c7 100644
--- a/freetype/src/type1/rules.mk
+++ b/freetype/src/type1/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type1/t1afm.c b/freetype/src/type1/t1afm.c
index 61053d9a..68411845 100644
--- a/freetype/src/type1/t1afm.c
+++ b/freetype/src/type1/t1afm.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1afm.c */
-/* */
-/* AFM support for Type 1 fonts (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1afm.c
+ *
+ * AFM support for Type 1 fonts (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -26,14 +26,14 @@
#ifndef T1_CONFIG_OPTION_NO_AFM
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1afm
FT_LOCAL_DEF( void )
diff --git a/freetype/src/type1/t1afm.h b/freetype/src/type1/t1afm.h
index cb8d302b..a8e6a549 100644
--- a/freetype/src/type1/t1afm.h
+++ b/freetype/src/type1/t1afm.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1afm.h */
-/* */
-/* AFM support for Type 1 fonts (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1afm.h
+ *
+ * AFM support for Type 1 fonts (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/type1/t1driver.c b/freetype/src/type1/t1driver.c
index 8fcb2a38..557733da 100644
--- a/freetype/src/type1/t1driver.c
+++ b/freetype/src/type1/t1driver.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1driver.c */
-/* */
-/* Type 1 driver interface (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1driver.c
+ *
+ * Type 1 driver interface (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -43,19 +43,19 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1driver
- /*
- * GLYPH DICT SERVICE
- *
- */
+ /*
+ * GLYPH DICT SERVICE
+ *
+ */
static FT_Error
t1_get_glyph_name( T1_Face face,
@@ -70,8 +70,8 @@
static FT_UInt
- t1_get_name_index( T1_Face face,
- FT_String* glyph_name )
+ t1_get_name_index( T1_Face face,
+ const FT_String* glyph_name )
{
FT_Int i;
@@ -97,7 +97,7 @@
/*
- * POSTSCRIPT NAME SERVICE
+ * POSTSCRIPT NAME SERVICE
*
*/
@@ -115,32 +115,32 @@
/*
- * MULTIPLE MASTERS SERVICE
+ * MULTIPLE MASTERS SERVICE
*
*/
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
static const FT_Service_MultiMastersRec t1_service_multi_masters =
{
- (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
- (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
- (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func) T1_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func) T1_Get_Var_Design, /* get_var_design */
- (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
- (FT_Set_MM_WeightVector_Func) T1_Set_MM_WeightVector, /* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func) T1_Get_MM_WeightVector, /* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
- (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
+ (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
+ (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func) T1_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func) T1_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)T1_Set_MM_WeightVector, /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)T1_Get_MM_WeightVector, /* get_mm_weightvector */
+
+ (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
+ (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
};
#endif
/*
- * POSTSCRIPT INFO SERVICE
+ * POSTSCRIPT INFO SERVICE
*
*/
@@ -272,9 +272,12 @@
break;
case PS_DICT_FONT_NAME:
- retval = ft_strlen( type1->font_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_name ), retval );
+ if ( type1->font_name )
+ {
+ retval = ft_strlen( type1->font_name ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_name ), retval );
+ }
break;
case PS_DICT_UNIQUE_ID:
@@ -364,7 +367,7 @@
ok = 1;
}
- if ( ok )
+ if ( ok && type1->subrs )
{
retval = type1->subrs_len[idx] + 1;
if ( value && value_len >= retval )
@@ -561,33 +564,49 @@
break;
case PS_DICT_VERSION:
- retval = ft_strlen( type1->font_info.version ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.version ), retval );
+ if ( type1->font_info.version )
+ {
+ retval = ft_strlen( type1->font_info.version ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_info.version ), retval );
+ }
break;
case PS_DICT_NOTICE:
- retval = ft_strlen( type1->font_info.notice ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
+ if ( type1->font_info.notice )
+ {
+ retval = ft_strlen( type1->font_info.notice ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
+ }
break;
case PS_DICT_FULL_NAME:
- retval = ft_strlen( type1->font_info.full_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
+ if ( type1->font_info.full_name )
+ {
+ retval = ft_strlen( type1->font_info.full_name ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
+ }
break;
case PS_DICT_FAMILY_NAME:
- retval = ft_strlen( type1->font_info.family_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.family_name ), retval );
+ if ( type1->font_info.family_name )
+ {
+ retval = ft_strlen( type1->font_info.family_name ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_info.family_name ),
+ retval );
+ }
break;
case PS_DICT_WEIGHT:
- retval = ft_strlen( type1->font_info.weight ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
+ if ( type1->font_info.weight )
+ {
+ retval = ft_strlen( type1->font_info.weight ) + 1;
+ if ( value && value_len >= retval )
+ ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
+ }
break;
case PS_DICT_ITALIC_ANGLE:
@@ -620,7 +639,7 @@
/*
- * PROPERTY SERVICE
+ * PROPERTY SERVICE
*
*/
@@ -632,7 +651,7 @@
/*
- * SERVICE LIST
+ * SERVICE LIST
*
*/
@@ -667,38 +686,42 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * Get_Kerning
+ *
+ * @Description:
+ * A driver method used to return the kerning vector between two
+ * glyphs of the same face.
+ *
+ * @Input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * left_glyph ::
+ * The index of the left glyph in the kern pair.
+ *
+ * right_glyph ::
+ * The index of the right glyph in the kern pair.
+ *
+ * @Output:
+ * kerning ::
+ * The kerning vector. This is in font units for
+ * scalable formats, and in pixels for fixed-sizes
+ * formats.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ *
+ * @Note:
+ * Only horizontal layouts (left-to-right & right-to-left) are
+ * supported by this function. Other layouts, or more sophisticated
+ * kernings are out of scope of this method (the basic driver
+ * interface is meant to be simple).
+ *
+ * They can be implemented by format-specific interfaces.
+ */
static FT_Error
Get_Kerning( FT_Face t1face, /* T1_Face */
FT_UInt left_glyph,
diff --git a/freetype/src/type1/t1driver.h b/freetype/src/type1/t1driver.h
index 2b150723..206f64a0 100644
--- a/freetype/src/type1/t1driver.h
+++ b/freetype/src/type1/t1driver.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1driver.h */
-/* */
-/* High-level Type 1 driver interface (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1driver.h
+ *
+ * High-level Type 1 driver interface (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -26,14 +26,8 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
FT_EXPORT_VAR( const FT_Driver_ClassRec ) t1_driver_class;
-
FT_END_HEADER
#endif /* T1DRIVER_H_ */
diff --git a/freetype/src/type1/t1errors.h b/freetype/src/type1/t1errors.h
index 9e0151b9..b35f67a2 100644
--- a/freetype/src/type1/t1errors.h
+++ b/freetype/src/type1/t1errors.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* t1errors.h */
-/* */
-/* Type 1 error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * t1errors.h
+ *
+ * Type 1 error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/type1/t1gload.c b/freetype/src/type1/t1gload.c
index 87d40e75..f9b115b1 100644
--- a/freetype/src/type1/t1gload.c
+++ b/freetype/src/type1/t1gload.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1gload.c */
-/* */
-/* Type 1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1gload.c
+ *
+ * Type 1 Glyph Loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -29,14 +29,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1gload
static FT_Error
@@ -62,6 +62,7 @@
PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face );
#endif
+
decoder->font_matrix = type1->font_matrix;
decoder->font_offset = type1->font_offset;
@@ -249,6 +250,8 @@
*max_advance = 0;
+ FT_TRACE6(( "T1_Compute_Max_Advance:\n" ));
+
/* for each glyph, parse the glyph charstring and extract */
/* the advance width */
for ( glyph_index = 0; glyph_index < type1->num_glyphs; glyph_index++ )
@@ -261,6 +264,9 @@
/* ignore the error if one occurred - skip to next glyph */
}
+ FT_TRACE6(( "T1_Compute_Max_Advance: max advance: %f\n",
+ *max_advance / 65536.0 ));
+
psaux->t1_decoder_funcs->done( &decoder );
return FT_Err_Ok;
@@ -282,11 +288,18 @@
FT_Error error;
+ FT_TRACE5(( "T1_Get_Advances:\n" ));
+
if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
{
for ( nn = 0; nn < count; nn++ )
+ {
advances[nn] = 0;
+ FT_TRACE5(( " idx %d: advance height 0 font units\n",
+ first + nn ));
+ }
+
return FT_Err_Ok;
}
@@ -320,6 +333,11 @@
advances[nn] = FIXED_TO_INT( decoder.builder.advance.x );
else
advances[nn] = 0;
+
+ FT_TRACE5(( " idx %d: advance width %d font unit%s\n",
+ first + nn,
+ advances[nn],
+ advances[nn] == 1 ? "" : "s" ));
}
return FT_Err_Ok;
@@ -384,9 +402,9 @@
t1glyph->outline.n_points = 0;
t1glyph->outline.n_contours = 0;
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
- scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+ hinting = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE ) &&
+ !( load_flags & FT_LOAD_NO_HINTING ) );
+ scaled = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE ) );
glyph->hint = hinting;
glyph->scaled = scaled;
@@ -398,7 +416,7 @@
t1glyph,
(FT_Byte**)type1->glyph_names,
face->blend,
- FT_BOOL( hinting ),
+ hinting,
FT_LOAD_TARGET_MODE( load_flags ),
T1_Parse_Glyph );
if ( error )
@@ -406,8 +424,7 @@
must_finish_decoder = TRUE;
- decoder.builder.no_recurse = FT_BOOL(
- ( load_flags & FT_LOAD_NO_RECURSE ) != 0 );
+ decoder.builder.no_recurse = FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
decoder.num_subrs = type1->num_subrs;
decoder.subrs = type1->subrs;
@@ -528,7 +545,7 @@
/* First of all, scale the points, if we are not hinting */
- if ( !hinting || ! decoder.builder.hints_funcs )
+ if ( !hinting || !decoder.builder.hints_funcs )
for ( n = cur->n_points; n > 0; n--, vec++ )
{
vec->x = FT_MulFix( vec->x, x_scale );
diff --git a/freetype/src/type1/t1gload.h b/freetype/src/type1/t1gload.h
index 72ef76f6..80440369 100644
--- a/freetype/src/type1/t1gload.h
+++ b/freetype/src/type1/t1gload.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1gload.h */
-/* */
-/* Type 1 Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1gload.h
+ *
+ * Type 1 Glyph Loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/type1/t1load.c b/freetype/src/type1/t1load.c
index 94e85605..5cffdfaa 100644
--- a/freetype/src/type1/t1load.c
+++ b/freetype/src/type1/t1load.c
@@ -1,63 +1,63 @@
-/***************************************************************************/
-/* */
-/* t1load.c */
-/* */
-/* Type 1 font loader (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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'. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * t1load.c
+ *
+ * Type 1 font loader (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -73,20 +73,20 @@
#ifdef FT_CONFIG_OPTION_INCREMENTAL
-#define IS_INCREMENTAL (FT_Bool)( face->root.internal->incremental_interface != 0 )
+#define IS_INCREMENTAL FT_BOOL( face->root.internal->incremental_interface )
#else
#define IS_INCREMENTAL 0
#endif
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1load
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
@@ -222,11 +222,11 @@
}
- /*************************************************************************/
- /* */
- /* Given a normalized (blend) coordinate, figure out the design */
- /* coordinate appropriate for that value. */
- /* */
+ /**************************************************************************
+ *
+ * Given a normalized (blend) coordinate, figure out the design
+ * coordinate appropriate for that value.
+ */
static FT_Fixed
mm_axis_unmap( PS_DesignMap axismap,
FT_Fixed ncv )
@@ -251,11 +251,11 @@
}
- /*************************************************************************/
- /* */
- /* Given a vector of weights, one for each design, figure out the */
- /* normalized axis coordinates which gave rise to those weights. */
- /* */
+ /**************************************************************************
+ *
+ * Given a vector of weights, one for each design, figure out the
+ * normalized axis coordinates which gave rise to those weights.
+ */
static void
mm_weights_unmap( FT_Fixed* weights,
FT_Fixed* axiscoords,
@@ -293,11 +293,11 @@
}
- /*************************************************************************/
- /* */
- /* Just a wrapper around T1_Get_Multi_Master to support the different */
- /* arguments needed by the GX var distortable fonts. */
- /* */
+ /**************************************************************************
+ *
+ * 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 )
@@ -348,16 +348,13 @@
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 );
+ mm_weights_unmap( blend->default_weight_vector,
+ axiscoords,
+ blend->num_axis );
- for ( i = 0; i < mmaster.num_axis; i++ )
- mmvar->axis[i].def = mm_axis_unmap( &blend->design_map[i],
- axiscoords[i] );
- }
+ for ( i = 0; i < mmaster.num_axis; i++ )
+ mmvar->axis[i].def = mm_axis_unmap( &blend->design_map[i],
+ axiscoords[i] );
*master = mmvar;
@@ -387,24 +384,31 @@
for ( n = 0; n < blend->num_designs; n++ )
{
FT_Fixed result = 0x10000L; /* 1.0 fixed */
+ FT_Fixed factor;
for ( m = 0; m < blend->num_axis; m++ )
{
- FT_Fixed factor;
-
-
- /* get current blend axis position; */
/* use a default value if we don't have a coordinate */
- factor = m < num_coords ? coords[m] : 0x8000;
- if ( factor < 0 )
- factor = 0;
- if ( factor > 0x10000L )
- factor = 0x10000L;
+ if ( m >= num_coords )
+ {
+ result >>= 1;
+ continue;
+ }
+ /* get current blend axis position */
+ factor = coords[m];
if ( ( n & ( 1 << m ) ) == 0 )
factor = 0x10000L - factor;
+ if ( factor <= 0 )
+ {
+ result = 0;
+ break;
+ }
+ else if ( factor >= 0x10000L )
+ continue;
+
result = FT_MulFix( result, factor );
}
@@ -475,6 +479,7 @@
return FT_Err_Ok;
}
+
FT_LOCAL_DEF( FT_Error )
T1_Set_MM_WeightVector( T1_Face face,
FT_UInt len,
@@ -483,32 +488,34 @@
PS_Blend blend = face->blend;
FT_UInt i, n;
- if ( !blend)
+
+ if ( !blend )
return FT_THROW( Invalid_Argument );
- if ( len == 0 && weightvector == NULL )
+ if ( !len && !weightvector )
{
- for ( i = 0; i < blend->num_designs; i++ )
- blend->weight_vector[i] = blend->default_weight_vector[i];
+ for ( i = 0; i < blend->num_designs; i++ )
+ blend->weight_vector[i] = blend->default_weight_vector[i];
}
else
{
- if ( weightvector == NULL )
+ if ( !weightvector )
return FT_THROW( Invalid_Argument );
n = len < blend->num_designs ? len : blend->num_designs;
for ( i = 0; i < n; i++ )
- blend->weight_vector[i] = weightvector[i];
+ blend->weight_vector[i] = weightvector[i];
for ( ; i < blend->num_designs; i++ )
- blend->weight_vector[i] = (FT_Fixed)0;
+ blend->weight_vector[i] = (FT_Fixed)0;
if ( len )
face->root.face_flags |= FT_FACE_FLAG_VARIATION;
else
face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
}
+
return FT_Err_Ok;
}
@@ -524,16 +531,17 @@
if ( !blend )
return FT_THROW( Invalid_Argument );
- if (*len < blend->num_designs)
+
+ if ( *len < blend->num_designs )
{
*len = blend->num_designs;
return FT_THROW( Invalid_Argument );
}
- for (i = 0; i < blend->num_designs; i++)
- weightvector[i] = blend->weight_vector[i];
- for (; i < *len; i++)
- weightvector[i] = (FT_Fixed)0;
+ for ( i = 0; i < blend->num_designs; i++ )
+ weightvector[i] = blend->weight_vector[i];
+ for ( ; i < *len; i++ )
+ weightvector[i] = (FT_Fixed)0;
*len = blend->num_designs;
@@ -638,11 +646,11 @@
}
- /*************************************************************************/
- /* */
- /* Just a wrapper around T1_Set_MM_Design to support the different */
- /* arguments needed by the GX var distortable fonts. */
- /* */
+ /**************************************************************************
+ *
+ * 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,
@@ -784,6 +792,8 @@
if ( error )
goto Exit;
+ FT_TRACE4(( " [" ));
+
blend = face->blend;
memory = face->root.memory;
@@ -806,11 +816,13 @@
goto Exit;
}
+ FT_TRACE4(( " /%.*s", len, token->start ));
+
name = (FT_Byte*)blend->axis_names[n];
if ( name )
{
FT_TRACE0(( "parse_blend_axis_types:"
- " overwriting axis name `%s' with `%*.s'\n",
+ " overwriting axis name `%s' with `%.*s'\n",
name, len, token->start ));
FT_FREE( name );
}
@@ -823,6 +835,8 @@
name[len] = '\0';
}
+ FT_TRACE4(( "]\n" ));
+
Exit:
loader->parser.root.error = error;
}
@@ -867,6 +881,8 @@
blend = face->blend;
num_axis = 0; /* make compiler happy */
+ FT_TRACE4(( " [" ));
+
for ( n = 0; n < num_designs; n++ )
{
T1_TokenRec axis_tokens[T1_MAX_MM_AXIS];
@@ -907,6 +923,7 @@
}
/* now read each axis token into the design position */
+ FT_TRACE4(( " [" )) ;
for ( axis = 0; axis < n_axis; axis++ )
{
T1_Token token2 = axis_tokens + axis;
@@ -915,9 +932,13 @@
parser->root.cursor = token2->start;
parser->root.limit = token2->limit;
blend->design_pos[n][axis] = T1_ToFixed( parser, 0 );
+ FT_TRACE4(( " %f", (double)blend->design_pos[n][axis] / 65536 ));
}
+ FT_TRACE4(( "]" )) ;
}
+ FT_TRACE4(( "]\n" ));
+
loader->parser.root.cursor = old_cursor;
loader->parser.root.limit = old_limit;
}
@@ -964,6 +985,8 @@
goto Exit;
blend = face->blend;
+ FT_TRACE4(( " [" ));
+
/* now read each axis design map */
for ( n = 0; n < num_axis; n++ )
{
@@ -980,6 +1003,8 @@
T1_ToTokenArray( parser, point_tokens,
T1_MAX_MM_MAP_POINTS, &num_points );
+ FT_TRACE4(( " [" ));
+
if ( num_points <= 0 || num_points > T1_MAX_MM_MAP_POINTS )
{
FT_ERROR(( "parse_blend_design_map: incorrect table\n" ));
@@ -1013,9 +1038,17 @@
map->design_points[p] = T1_ToInt( parser );
map->blend_points [p] = T1_ToFixed( parser, 0 );
+
+ FT_TRACE4(( " [%d %f]",
+ map->design_points[p],
+ (double)map->blend_points[p] / 65536 ));
}
+
+ FT_TRACE4(( "]" ));
}
+ FT_TRACE4(( "]\n" ));
+
parser->root.cursor = old_cursor;
parser->root.limit = old_limit;
@@ -1075,6 +1108,8 @@
old_cursor = parser->root.cursor;
old_limit = parser->root.limit;
+ FT_TRACE4(( "[" ));
+
for ( n = 0; n < num_designs; n++ )
{
token = design_tokens + n;
@@ -1083,8 +1118,12 @@
blend->default_weight_vector[n] =
blend->weight_vector[n] = T1_ToFixed( parser, 0 );
+
+ FT_TRACE4(( " %f", (double)blend->weight_vector[n] / 65536 ));
}
+ FT_TRACE4(( "]\n" ));
+
parser->root.cursor = old_cursor;
parser->root.limit = old_limit;
@@ -1101,6 +1140,20 @@
{
face->len_buildchar = (FT_UInt)T1_ToFixedArray( &loader->parser,
0, NULL, 0 );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_UInt i;
+
+
+ FT_TRACE4(( " [" ));
+ for ( i = 0; i < face->len_buildchar; i++ )
+ FT_TRACE4(( " 0" ));
+
+ FT_TRACE4(( "]\n" ));
+ }
+#endif
+
return;
}
@@ -1136,6 +1189,8 @@
/* if the keyword has a dedicated callback, call it */
if ( field->type == T1_FIELD_TYPE_CALLBACK )
{
+ FT_TRACE4(( " %s", field->ident ));
+
field->reader( (FT_Face)face, loader );
error = loader->parser.root.error;
goto Exit;
@@ -1213,6 +1268,8 @@
max_objects = 0;
}
+ FT_TRACE4(( " %s", field->ident ));
+
if ( *objects )
{
if ( field->type == T1_FIELD_TYPE_INTEGER_ARRAY ||
@@ -1232,6 +1289,8 @@
error = FT_Err_Ok;
}
+ FT_TRACE4(( "\n" ));
+
Exit:
return error;
}
@@ -1244,6 +1303,8 @@
FT_UNUSED( face );
loader->keywords_encountered |= T1_PRIVATE;
+
+ FT_TRACE4(( "\n" ));
}
@@ -1323,6 +1384,14 @@
return;
}
+ FT_TRACE4(( " [%f %f %f %f %f %f]\n",
+ (double)temp[0] / 65536 / 1000,
+ (double)temp[1] / 65536 / 1000,
+ (double)temp[2] / 65536 / 1000,
+ (double)temp[3] / 65536 / 1000,
+ (double)temp[4] / 65536 / 1000,
+ (double)temp[5] / 65536 / 1000 ));
+
temp_scale = FT_ABS( temp[3] );
if ( temp_scale == 0 )
@@ -1345,12 +1414,18 @@
temp[5] = FT_DivFix( temp[5], temp_scale );
temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L;
}
-
matrix->xx = temp[0];
matrix->yx = temp[1];
matrix->xy = temp[2];
matrix->yy = temp[3];
+ if ( !FT_Matrix_Check( matrix ) )
+ {
+ FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
+ parser->root.error = FT_THROW( Invalid_File_Format );
+ return;
+ }
+
/* note that the offsets must be expressed in integer font units */
offset->x = temp[4] >> 16;
offset->y = temp[5] >> 16;
@@ -1432,12 +1507,7 @@
/* We need to `zero' out encoding_table.elements */
for ( n = 0; n < array_size; n++ )
- {
- char* notdef = (char *)".notdef";
-
-
- (void)T1_Add_Table( char_table, n, notdef, 8 );
- }
+ (void)T1_Add_Table( char_table, n, ".notdef", 8 );
/* Now we need to read records of the form */
/* */
@@ -1559,6 +1629,15 @@
T1_Skip_Spaces( parser );
}
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " [" ));
+
+ /* XXX show encoding vector */
+ FT_TRACE4(( "..." ));
+
+ FT_TRACE4(( "]\n" ));
+#endif
+
face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY;
parser->root.cursor = cur;
}
@@ -1569,18 +1648,30 @@
{
if ( cur + 17 < limit &&
ft_strncmp( (const char*)cur, "StandardEncoding", 16 ) == 0 )
+ {
face->type1.encoding_type = T1_ENCODING_TYPE_STANDARD;
+ FT_TRACE4(( " StandardEncoding\n" ));
+ }
else if ( cur + 15 < limit &&
ft_strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )
+ {
face->type1.encoding_type = T1_ENCODING_TYPE_EXPERT;
+ FT_TRACE4(( " ExpertEncoding\n" ));
+ }
else if ( cur + 18 < limit &&
ft_strncmp( (const char*)cur, "ISOLatin1Encoding", 17 ) == 0 )
+ {
face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1;
+ FT_TRACE4(( " ISOLatin1Encoding\n" ));
+ }
else
+ {
parser->root.error = FT_ERR( Ignore );
+ FT_TRACE4(( "<unknown>\n" ));
+ }
}
}
@@ -1761,6 +1852,15 @@
if ( !loader->num_subrs )
loader->num_subrs = num_subrs;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " <" ));
+
+ /* XXX show subrs? */
+ FT_TRACE4(( "%d elements", num_subrs ));
+
+ FT_TRACE4(( ">\n" ));
+#endif
+
return;
Fail:
@@ -2042,7 +2142,6 @@
/* 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,
@@ -2057,7 +2156,7 @@
if ( error )
goto Fail;
- error = T1_Add_Table( name_table, 0, notdef_name, 8 );
+ error = T1_Add_Table( name_table, 0, ".notdef", 8 );
if ( error )
goto Fail;
@@ -2082,6 +2181,15 @@
loader->num_glyphs += 1;
}
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " <" ));
+
+ /* XXX show charstrings? */
+ FT_TRACE4(( "%d elements", loader->num_glyphs ));
+
+ FT_TRACE4(( ">\n" ));
+#endif
+
return;
Fail:
@@ -2089,12 +2197,12 @@
}
- /*************************************************************************/
- /* */
- /* Define the token field static variables. This is a set of */
- /* T1_FieldRec variables. */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * Define the token field static variables. This is a set of
+ * T1_FieldRec variables.
+ *
+ */
static
@@ -2281,6 +2389,7 @@
? T1_FIELD_DICT_PRIVATE
: T1_FIELD_DICT_FONTDICT;
+
if ( !( dict & keyword->dict ) )
{
FT_TRACE1(( "parse_dict: found `%s' but ignoring it"
@@ -2395,6 +2504,7 @@
if ( error )
goto Exit;
+ FT_TRACE4(( " top dictionary:\n" ));
error = parse_dict( face, &loader,
parser->base_dict, parser->base_len );
if ( error )
@@ -2404,6 +2514,7 @@
if ( error )
goto Exit;
+ FT_TRACE4(( " private dictionary:\n" ));
error = parse_dict( face, &loader,
parser->private_dict, parser->private_len );
if ( error )
@@ -2414,6 +2525,16 @@
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
+ /* we don't support Multiple Master fonts with intermediate designs; */
+ /* this implies that `num_designs' must be equal to `2^^num_axis' */
+ if ( face->blend &&
+ face->blend->num_designs != ( 1U << face->blend->num_axis ) )
+ {
+ FT_ERROR(( "T1_Open_Face:"
+ " number-of-designs != 2 ^^ number-of-axes\n" ));
+ T1_Done_Blend( face );
+ }
+
if ( face->blend &&
face->blend->num_default_design_vector != 0 &&
face->blend->num_default_design_vector != face->blend->num_axis )
@@ -2506,8 +2627,7 @@
/* we must now build type1.encoding when we have a custom array */
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
{
- FT_Int charcode, idx, min_char, max_char;
- FT_Byte* glyph_name;
+ FT_Int charcode, idx, min_char, max_char;
/* OK, we do the following: for each element in the encoding */
@@ -2521,27 +2641,27 @@
charcode = 0;
for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
{
- FT_Byte* char_name;
+ const FT_String* char_name =
+ (const FT_String*)loader.encoding_table.elements[charcode];
type1->encoding.char_index[charcode] = 0;
- type1->encoding.char_name [charcode] = (char *)".notdef";
+ type1->encoding.char_name [charcode] = ".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 )
+ const FT_String* glyph_name = type1->glyph_names[idx];
+
+
+ if ( ft_strcmp( char_name, glyph_name ) == 0 )
{
type1->encoding.char_index[charcode] = (FT_UShort)idx;
- type1->encoding.char_name [charcode] = (char*)glyph_name;
+ type1->encoding.char_name [charcode] = 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 ( ft_strcmp( ".notdef", glyph_name ) != 0 )
{
if ( charcode < min_char )
min_char = charcode;
diff --git a/freetype/src/type1/t1load.h b/freetype/src/type1/t1load.h
index 5763ccc1..44f835bd 100644
--- a/freetype/src/type1/t1load.h
+++ b/freetype/src/type1/t1load.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1load.h */
-/* */
-/* Type 1 font loader (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1load.h
+ *
+ * Type 1 font loader (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
diff --git a/freetype/src/type1/t1objs.c b/freetype/src/type1/t1objs.c
index 7333c4c9..741388a6 100644
--- a/freetype/src/type1/t1objs.c
+++ b/freetype/src/type1/t1objs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1objs.c */
-/* */
-/* Type 1 objects manager (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1objs.c
+ *
+ * Type 1 objects manager (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -36,21 +36,21 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1objs
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SIZE FUNCTIONS
+ *
+ */
static PSH_Globals_Funcs
@@ -133,11 +133,11 @@
}
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * SLOT FUNCTIONS
+ *
+ */
FT_LOCAL_DEF( void )
T1_GlyphSlot_Done( FT_GlyphSlot slot )
@@ -177,24 +177,25 @@
}
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Face_Done */
- /* */
- /* <Description> */
- /* The face object destructor. */
- /* */
- /* <Input> */
- /* face :: A typeless pointer to the face object to destroy. */
- /* */
+ /**************************************************************************
+ *
+ * FACE FUNCTIONS
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @Function:
+ * T1_Face_Done
+ *
+ * @Description:
+ * The face object destructor.
+ *
+ * @Input:
+ * face ::
+ * A typeless pointer to the face object to destroy.
+ */
FT_LOCAL_DEF( void )
T1_Face_Done( FT_Face t1face ) /* T1_Face */
{
@@ -274,29 +275,34 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * T1_Face_Init
+ *
+ * @Description:
+ * The face object constructor.
+ *
+ * @Input:
+ * stream ::
+ * input stream where to load font data.
+ *
+ * face_index ::
+ * The index of the font face in the resource.
+ *
+ * num_params ::
+ * Number of additional generic parameters. Ignored.
+ *
+ * params ::
+ * Additional generic parameters. Ignored.
+ *
+ * @InOut:
+ * face ::
+ * The face record to build.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
T1_Face_Init( FT_Stream stream,
FT_Face t1face, /* T1_Face */
@@ -341,6 +347,10 @@
if ( error )
goto Exit;
+ FT_TRACE2(( "T1_Face_Init: %08p (index %d)\n",
+ face,
+ face_index ));
+
/* if we just wanted to check the format, leave successfully now */
if ( face_index < 0 )
goto Exit;
@@ -516,7 +526,8 @@
error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+ FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+ FT_ERR_NEQ( error, Unimplemented_Feature ) )
goto Exit;
error = FT_Err_Ok;
@@ -564,20 +575,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * T1_Driver_Init
+ *
+ * @Description:
+ * Initializes a given Type 1 driver object.
+ *
+ * @Input:
+ * driver ::
+ * A handle to the target driver object.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
T1_Driver_Init( FT_Module module )
{
@@ -620,17 +632,18 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Driver_Done */
- /* */
- /* <Description> */
- /* Finalizes a given Type 1 driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target Type 1 driver. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * T1_Driver_Done
+ *
+ * @Description:
+ * Finalizes a given Type 1 driver.
+ *
+ * @Input:
+ * driver ::
+ * A handle to the target Type 1 driver.
+ */
FT_LOCAL_DEF( void )
T1_Driver_Done( FT_Module driver )
{
diff --git a/freetype/src/type1/t1objs.h b/freetype/src/type1/t1objs.h
index 8298e036..2161091f 100644
--- a/freetype/src/type1/t1objs.h
+++ b/freetype/src/type1/t1objs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1objs.h */
-/* */
-/* Type 1 objects manager (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1objs.h
+ *
+ * Type 1 objects manager (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -34,59 +34,59 @@ FT_BEGIN_HEADER
typedef struct T1_Glyph_Hints_ T1_Glyph_Hints;
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_Size */
- /* */
- /* <Description> */
- /* A handle to a Type 1 size object. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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. */
- /* */
+ /**************************************************************************
+ *
+ * @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 */
- /* */
- /*************************************************************************/
+ /**************************************************************************
+ *
+ * HERE BEGINS THE TYPE1 SPECIFIC STUFF
+ *
+ */
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_SizeRec */
- /* */
- /* <Description> */
- /* Type 1 size record. */
- /* */
+ /**************************************************************************
+ *
+ * @Type:
+ * T1_SizeRec
+ *
+ * @Description:
+ * Type 1 size record.
+ */
typedef struct T1_SizeRec_
{
FT_SizeRec root;
@@ -105,14 +105,14 @@ FT_BEGIN_HEADER
T1_Size_Init( FT_Size size );
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_GlyphSlotRec */
- /* */
- /* <Description> */
- /* Type 1 glyph slot record. */
- /* */
+ /**************************************************************************
+ *
+ * @Type:
+ * T1_GlyphSlotRec
+ *
+ * @Description:
+ * Type 1 glyph slot record.
+ */
typedef struct T1_GlyphSlotRec_
{
FT_GlyphSlotRec root;
diff --git a/freetype/src/type1/t1parse.c b/freetype/src/type1/t1parse.c
index 8e201e5e..56caeb9e 100644
--- a/freetype/src/type1/t1parse.c
+++ b/freetype/src/type1/t1parse.c
@@ -1,36 +1,36 @@
-/***************************************************************************/
-/* */
-/* t1parse.c */
-/* */
-/* Type 1 parser (body). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * t1parse.c
+ *
+ * Type 1 parser (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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>
@@ -43,14 +43,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t1parse
/*************************************************************************/
@@ -169,21 +169,21 @@
}
}
- /******************************************************************/
- /* */
- /* 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. */
- /* */
+ /*******************************************************************
+ *
+ * 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 */
diff --git a/freetype/src/type1/t1parse.h b/freetype/src/type1/t1parse.h
index 4ac82ae9..dab8fddc 100644
--- a/freetype/src/type1/t1parse.h
+++ b/freetype/src/type1/t1parse.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1parse.h */
-/* */
-/* Type 1 parser (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1parse.h
+ *
+ * Type 1 parser (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. 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_
@@ -28,36 +28,45 @@
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. */
- /* */
+ /**************************************************************************
+ *
+ * @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;
diff --git a/freetype/src/type1/t1tokens.h b/freetype/src/type1/t1tokens.h
index 43a65d88..97f2dbe0 100644
--- a/freetype/src/type1/t1tokens.h
+++ b/freetype/src/type1/t1tokens.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t1tokens.h */
-/* */
-/* Type 1 tokenizer (specification). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t1tokens.h
+ *
+ * Type 1 tokenizer (specification).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/type1/type1.c b/freetype/src/type1/type1.c
index 72eff59b..ce8557a5 100644
--- a/freetype/src/type1/type1.c
+++ b/freetype/src/type1/type1.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* type1.c */
-/* */
-/* FreeType Type 1 driver component (body only). */
-/* */
-/* Copyright 1996-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType Type 1 driver component (body only).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/type42/Jamfile b/freetype/src/type42/Jamfile
index b98de05a..6123b355 100644
--- a/freetype/src/type42/Jamfile
+++ b/freetype/src/type42/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type42 Jamfile
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type42/module.mk b/freetype/src/type42/module.mk
index 3d4732bb..9e9d1545 100644
--- a/freetype/src/type42/module.mk
+++ b/freetype/src/type42/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type42/rules.mk b/freetype/src/type42/rules.mk
index 9325d389..9d71f530 100644
--- a/freetype/src/type42/rules.mk
+++ b/freetype/src/type42/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type42/t42drivr.c b/freetype/src/type42/t42drivr.c
index f579b270..09ad632e 100644
--- a/freetype/src/type42/t42drivr.c
+++ b/freetype/src/type42/t42drivr.c
@@ -1,39 +1,39 @@
-/***************************************************************************/
-/* */
-/* t42drivr.c */
-/* */
-/* High-level Type 42 driver interface (body). */
-/* */
-/* Copyright 2002-2018 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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * t42drivr.c
+ *
+ * High-level Type 42 driver interface (body).
+ *
+ * Copyright (C) 2002-2019 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"
@@ -47,12 +47,12 @@
#include FT_SERVICE_POSTSCRIPT_INFO_H
#undef FT_COMPONENT
-#define FT_COMPONENT trace_t42
+#define FT_COMPONENT t42
/*
*
- * GLYPH DICT SERVICE
+ * GLYPH DICT SERVICE
*
*/
@@ -69,8 +69,8 @@
static FT_UInt
- t42_get_name_index( T42_Face face,
- FT_String* glyph_name )
+ t42_get_name_index( T42_Face face,
+ const FT_String* glyph_name )
{
FT_Int i;
@@ -98,7 +98,7 @@
/*
*
- * POSTSCRIPT NAME SERVICE
+ * POSTSCRIPT NAME SERVICE
*
*/
@@ -117,7 +117,7 @@
/*
*
- * POSTSCRIPT INFO SERVICE
+ * POSTSCRIPT INFO SERVICE
*
*/
@@ -173,7 +173,7 @@
/*
*
- * SERVICE LIST
+ * SERVICE LIST
*
*/
diff --git a/freetype/src/type42/t42drivr.h b/freetype/src/type42/t42drivr.h
index 3667f3e0..a35ca28f 100644
--- a/freetype/src/type42/t42drivr.h
+++ b/freetype/src/type42/t42drivr.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42drivr.h */
-/* */
-/* High-level Type 42 driver interface (specification). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42drivr.h
+ *
+ * High-level Type 42 driver interface (specification).
+ *
+ * Copyright (C) 2002-2019 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_
@@ -26,14 +26,8 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
FT_EXPORT_VAR( const FT_Driver_ClassRec ) t42_driver_class;
-
FT_END_HEADER
diff --git a/freetype/src/type42/t42error.h b/freetype/src/type42/t42error.h
index e3978a76..5fb21439 100644
--- a/freetype/src/type42/t42error.h
+++ b/freetype/src/type42/t42error.h
@@ -1,26 +1,26 @@
-/***************************************************************************/
-/* */
-/* t42error.h */
-/* */
-/* Type 42 error codes (specification only). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * t42error.h
+ *
+ * Type 42 error codes (specification only).
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/type42/t42objs.c b/freetype/src/type42/t42objs.c
index 66e5c403..d31bace4 100644
--- a/freetype/src/type42/t42objs.c
+++ b/freetype/src/type42/t42objs.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42objs.c */
-/* */
-/* Type 42 objects manager (body). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42objs.c
+ *
+ * Type 42 objects manager (body).
+ *
+ * Copyright (C) 2002-2019 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"
@@ -25,7 +25,7 @@
#undef FT_COMPONENT
-#define FT_COMPONENT trace_t42
+#define FT_COMPONENT t42
static FT_Error
@@ -98,8 +98,7 @@
/* we must now build type1.encoding when we have a custom array */
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
{
- FT_Int charcode, idx, min_char, max_char;
- FT_Byte* glyph_name;
+ FT_Int charcode, idx, min_char, max_char;
/* OK, we do the following: for each element in the encoding */
@@ -114,27 +113,27 @@
charcode = 0;
for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
{
- FT_Byte* char_name;
+ const FT_String* char_name =
+ (const FT_String*)loader.encoding_table.elements[charcode];
type1->encoding.char_index[charcode] = 0;
- type1->encoding.char_name [charcode] = (char *)".notdef";
+ type1->encoding.char_name [charcode] = ".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 )
+ const FT_String* glyph_name = type1->glyph_names[idx];
+
+
+ if ( ft_strcmp( char_name, glyph_name ) == 0 )
{
type1->encoding.char_index[charcode] = (FT_UShort)idx;
- type1->encoding.char_name [charcode] = (char*)glyph_name;
+ type1->encoding.char_name [charcode] = 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 ( ft_strcmp( ".notdef", glyph_name ) != 0 )
{
if ( charcode < min_char )
min_char = charcode;
@@ -354,7 +353,8 @@
error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+ FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+ FT_ERR_NEQ( error, Unimplemented_Feature ) )
goto Exit;
error = FT_Err_Ok;
@@ -457,20 +457,21 @@
}
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
+ /**************************************************************************
+ *
+ * @Function:
+ * T42_Driver_Init
+ *
+ * @Description:
+ * Initializes a given Type 42 driver object.
+ *
+ * @Input:
+ * driver ::
+ * A handle to the target driver object.
+ *
+ * @Return:
+ * FreeType error code. 0 means success.
+ */
FT_LOCAL_DEF( FT_Error )
T42_Driver_Init( FT_Module module ) /* T42_Driver */
{
diff --git a/freetype/src/type42/t42objs.h b/freetype/src/type42/t42objs.h
index 3bad5135..98300cf3 100644
--- a/freetype/src/type42/t42objs.h
+++ b/freetype/src/type42/t42objs.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42objs.h */
-/* */
-/* Type 42 objects manager (specification). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42objs.h
+ *
+ * Type 42 objects manager (specification).
+ *
+ * Copyright (C) 2002-2019 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_
diff --git a/freetype/src/type42/t42parse.c b/freetype/src/type42/t42parse.c
index 4813d1f3..c47a7778 100644
--- a/freetype/src/type42/t42parse.c
+++ b/freetype/src/type42/t42parse.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42parse.c */
-/* */
-/* Type 42 font parser (body). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42parse.c
+ *
+ * Type 42 font parser (body).
+ *
+ * Copyright (C) 2002-2019 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"
@@ -23,14 +23,14 @@
#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. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT t42
static void
@@ -149,19 +149,19 @@
parser->base_dict = NULL;
parser->in_memory = 0;
- /*******************************************************************/
- /* */
- /* Here a short summary of what is going on: */
- /* */
- /* When creating a new Type 42 parser, we try to locate and load */
- /* the base dictionary, loading the whole font into memory. */
- /* */
- /* When `loading' the base dictionary, we only set up pointers */
- /* in the case of a memory-based stream. Otherwise, we allocate */
- /* and load the base dictionary in it. */
- /* */
- /* parser->in_memory is set if we have a memory stream. */
- /* */
+ /********************************************************************
+ *
+ * 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 ) )
@@ -226,7 +226,8 @@
if ( !parser->in_memory )
FT_FREE( parser->base_dict );
- parser->root.funcs.done( &parser->root );
+ if ( parser->root.funcs.done )
+ parser->root.funcs.done( &parser->root );
}
@@ -284,6 +285,13 @@
matrix->xy = temp[2];
matrix->yy = temp[3];
+ if ( !FT_Matrix_Check( matrix ) )
+ {
+ FT_ERROR(( "t42_parse_font_matrix: invalid font matrix\n" ));
+ parser->root.error = FT_THROW( Invalid_File_Format );
+ return;
+ }
+
/* note that the offsets must be expressed in integer font units */
offset->x = temp[4] >> 16;
offset->y = temp[5] >> 16;
@@ -366,12 +374,7 @@
/* We need to `zero' out encoding_table.elements */
for ( n = 0; n < count; n++ )
- {
- char* notdef = (char *)".notdef";
-
-
- (void)T1_Add_Table( char_table, n, notdef, 8 );
- }
+ (void)T1_Add_Table( char_table, n, ".notdef", 8 );
/* Now we need to read records of the form */
/* */
@@ -588,6 +591,14 @@
else if ( *cur == '<' )
{
+ if ( string_buf && !allocated )
+ {
+ FT_ERROR(( "t42_parse_sfnts: "
+ "can't handle mixed binary and hex strings\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+
T1_Skip_PS_Token( parser );
if ( parser->root.error )
goto Exit;
@@ -1006,8 +1017,7 @@
}
/* if /.notdef does not occupy index 0, do our magic. */
- if ( ft_strcmp( (const char*)".notdef",
- (const char*)name_table->elements[0] ) )
+ if ( ft_strcmp( ".notdef", (const char*)name_table->elements[0] ) )
{
/* Swap glyph in index 0 with /.notdef glyph. First, add index 0 */
/* name and code entries to swap_table. Then place notdef_index */
diff --git a/freetype/src/type42/t42parse.h b/freetype/src/type42/t42parse.h
index f35d23de..0c7bb484 100644
--- a/freetype/src/type42/t42parse.h
+++ b/freetype/src/type42/t42parse.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42parse.h */
-/* */
-/* Type 42 font parser (specification). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42parse.h
+ *
+ * Type 42 font parser (specification).
+ *
+ * Copyright (C) 2002-2019 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_
diff --git a/freetype/src/type42/t42types.h b/freetype/src/type42/t42types.h
index d0aa2de5..a258144e 100644
--- a/freetype/src/type42/t42types.h
+++ b/freetype/src/type42/t42types.h
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* t42types.h */
-/* */
-/* Type 42 font data types (specification only). */
-/* */
-/* Copyright 2002-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * t42types.h
+ *
+ * Type 42 font data types (specification only).
+ *
+ * Copyright (C) 2002-2019 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_
diff --git a/freetype/src/type42/type42.c b/freetype/src/type42/type42.c
index 6a89cfbe..0cb7b77e 100644
--- a/freetype/src/type42/type42.c
+++ b/freetype/src/type42/type42.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/* */
-/* type42.c */
-/* */
-/* FreeType Type 42 driver component. */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.c
+ *
+ * FreeType Type 42 driver component.
+ *
+ * Copyright (C) 2002-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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
diff --git a/freetype/src/winfonts/Jamfile b/freetype/src/winfonts/Jamfile
index 4385e3b3..4b922261 100644
--- a/freetype/src/winfonts/Jamfile
+++ b/freetype/src/winfonts/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/winfonts Jamfile
#
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/winfonts/fnterrs.h b/freetype/src/winfonts/fnterrs.h
index 3a86af5a..af29307c 100644
--- a/freetype/src/winfonts/fnterrs.h
+++ b/freetype/src/winfonts/fnterrs.h
@@ -1,27 +1,27 @@
-/***************************************************************************/
-/* */
-/* fnterrs.h */
-/* */
-/* Win FNT/FON error codes (specification only). */
-/* */
-/* Copyright 2001-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
+/****************************************************************************
+ *
+ * fnterrs.h
+ *
+ * Win FNT/FON error codes (specification only).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.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_
diff --git a/freetype/src/winfonts/module.mk b/freetype/src/winfonts/module.mk
index 13f9077c..82fb0151 100644
--- a/freetype/src/winfonts/module.mk
+++ b/freetype/src/winfonts/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/winfonts/rules.mk b/freetype/src/winfonts/rules.mk
index d694d1a7..998d49bc 100644
--- a/freetype/src/winfonts/rules.mk
+++ b/freetype/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/winfonts/winfnt.c b/freetype/src/winfonts/winfnt.c
index 36bd3148..2d771be2 100644
--- a/freetype/src/winfonts/winfnt.c
+++ b/freetype/src/winfonts/winfnt.c
@@ -1,21 +1,21 @@
-/***************************************************************************/
-/* */
-/* winfnt.c */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * winfnt.c
+ *
+ * FreeType font driver for Windows FNT/FON files
+ *
+ * Copyright (C) 1996-2019 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>
@@ -30,14 +30,14 @@
#include FT_SERVICE_WINFNT_H
#include FT_SERVICE_FONT_FORMAT_H
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
+ /**************************************************************************
+ *
+ * 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
+#define FT_COMPONENT winfnt
static const FT_Frame_Field winmz_header_fields[] =
@@ -1131,10 +1131,10 @@
winfnt_get_header /* get_header */
};
- /*
- * SERVICE LIST
- *
- */
+ /*
+ * SERVICE LIST
+ *
+ */
static const FT_ServiceDescRec winfnt_services[] =
{
diff --git a/freetype/src/winfonts/winfnt.h b/freetype/src/winfonts/winfnt.h
index 4885c9d7..b628ad4c 100644
--- a/freetype/src/winfonts/winfnt.h
+++ b/freetype/src/winfonts/winfnt.h
@@ -1,20 +1,20 @@
-/***************************************************************************/
-/* */
-/* winfnt.h */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2018 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. */
-/* */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * winfnt.h
+ *
+ * FreeType font driver for Windows FNT/FON files
+ *
+ * Copyright (C) 1996-2019 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_
@@ -28,9 +28,6 @@
FT_BEGIN_HEADER
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
typedef struct WinMZ_HeaderRec_
{
@@ -153,9 +150,6 @@ FT_BEGIN_HEADER
FT_FaceRec root;
FNT_Font font;
- FT_CharMap charmap_handle;
- FT_CharMapRec charmap; /* a single charmap per face */
-
} FNT_FaceRec, *FNT_Face;
diff --git a/freetype/vms_make.com b/freetype/vms_make.com
index 7b8a49b3..b5da5f8d 100644
--- a/freetype/vms_make.com
+++ b/freetype/vms_make.com
@@ -1,6 +1,6 @@
$! make FreeType 2 under OpenVMS
$!
-$! Copyright 2003-2018 by
+$! Copyright (C) 2003-2019 by
$! David Turner, Robert Wilhelm, and Werner Lemberg.
$!
$! This file is part of the FreeType project, and may only be used, modified,
@@ -47,13 +47,13 @@ $!
$! Setup variables holding "config" information
$!
$ Make = ""
-$ ccopt = "/name=as_is/float=ieee"
+$ ccopt = "/name=(as_is,short)/float=ieee"
$ lopts = ""
$ dnsrl = ""
$ aconf_in_file = "config.hin"
$ name = "Freetype2"
-$ mapfile = name + ".map"
-$ optfile = name + ".opt"
+$ mapfile = name + ".map"
+$ optfile = name + ".opt"
$ s_case = false
$ liblist = ""
$!
@@ -113,7 +113,14 @@ $!
$ If f$getsyi("HW_MODEL") .gt. 1024
$ Then
$ write sys$output "Creating freetype2shr.exe"
-$ call anal_obj_axp 'optfile' _link.opt
+$ If f$getsyi("HW_MODEL") .le. 2048
+$ Then
+$ call anal_obj_axp 'optfile' _link.opt
+$ Else
+$ copy _link.opt_ia64 _link.opt
+$ close libsf
+$ copy libs.opt_ia64 libs.opt
+$ endif
$ open/append optf 'optfile'
$ if s_case then WRITE optf "case_sensitive=YES"
$ close optf
@@ -157,7 +164,7 @@ $ deck
#
-# Copyright 2001 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -172,15 +179,16 @@ $ deck
all :
- define freetype [--.include]
- define psaux [-.psaux]
+ define config [--.include.freetype.config]
+ define internal [--.include.freetype.internal]
define autofit [-.autofit]
- define autohint [-.autohint]
define base [-.base]
define cache [-.cache]
define cff [-.cff]
define cid [-.cid]
+ define freetype [--.include.freetype]
define pcf [-.pcf]
+ define psaux [-.psaux]
define psnames [-.psnames]
define raster [-.raster]
define sfnt [-.sfnt]
@@ -191,9 +199,7 @@ all :
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]
+ set default [--.src.autofit]
$(MMS)$(MMSQUALIFIERS)
set default [-.base]
$(MMS)$(MMSQUALIFIERS)
@@ -205,8 +211,12 @@ all :
$(MMS)$(MMSQUALIFIERS)
set default [-.cid]
$(MMS)$(MMSQUALIFIERS)
+ set default [-.gxvalid]
+ $(MMS)$(MMSQUALIFIERS)
set default [-.gzip]
$(MMS)$(MMSQUALIFIERS)
+ set default [-.bzip2]
+ $(MMS)$(MMSQUALIFIERS)
set default [-.lzw]
$(MMS)$(MMSQUALIFIERS)
set default [-.otvalid]
@@ -250,7 +260,7 @@ $ deck
#
-# Copyright 2001 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -260,7 +270,7 @@ $ deck
# fully.
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/list/show=all/include=([],[--.include],[--.src.base])
OBJS=ftsystem.obj
@@ -282,7 +292,7 @@ $ deck
#
-# Copyright 2002 by
+# Copyright 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -293,39 +303,7 @@ $ deck
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
+OBJS=autofit.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
@@ -343,7 +321,7 @@ $ deck
#
-# Copyright 2001, 2003 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -355,9 +333,22 @@ $ deck
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,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
- ftbitmap.obj,ftgasp.obj
+OBJS=ftbase.obj,\
+ ftbbox.obj,\
+ ftbdf.obj,\
+ ftbitmap.obj,\
+ ftcid.obj,\
+ ftdebug.obj,\
+ ftfstype.obj,\
+ ftgasp.obj,\
+ ftglyph.obj,\
+ ftinit.obj,\
+ ftmm.obj,\
+ ftpfr.obj,\
+ ftstroke.obj,\
+ ftsynth.obj,\
+ fttype1.obj,\
+ ftwinfnt.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
@@ -375,7 +366,7 @@ $ deck
#
-# Copyright 2002 by
+# Copyright 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -405,7 +396,7 @@ $ deck
#
-# Copyright 2001, 2002, 2003, 2004 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -415,16 +406,13 @@ $ deck
# fully.
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cache])
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cache])/nowarn
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
@@ -438,7 +426,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -468,7 +456,7 @@ $ deck
#
-# Copyright 2001 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -488,6 +476,36 @@ all : $(OBJS)
# EOF
$ eod
$ close out
+$ write sys$output "... [.src.gxvalid] directory"
+$ create [.src.gxvalid]descrip.mms
+$ open/append out [.src.gxvalid]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 TrueTypeGX/AAT validation driver configuration rules for VMS
+#
+
+
+# Copyright 2004-2019 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.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.gxvalid])
+
+OBJS=gxvalid.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
@@ -498,7 +516,7 @@ $ deck
#
-# Copyright 2002 by
+# Copyright 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -522,18 +540,20 @@ all : $(OBJS)
# EOF
$ eod
$ close out
-$ write sys$output "... [.src.lzw] directory"
-$ create [.src.lzw]descrip.mms
-$ open/append out [.src.lzw]descrip.mms
+$ write sys$output "... [.src.bzip2] directory"
+$ create [.src.bzip2]descrip.mms
+$ open/append out [.src.bzip2]descrip.mms
$ copy sys$input: out
$ deck
#
-# FreeType 2 LZW support compilation rules for VMS
+# FreeType 2 BZIP2 support compilation rules for VMS
#
-# Copyright 2004 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
+# Copyright 2010-2019 by
+# Joel Klinghed.
+#
+# based on `src/lzw/rules.mk'
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
@@ -546,9 +566,9 @@ $ write out "COMP_FLAGS = ", ccopt
$ copy sys$input: out
$ deck
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=($(LIBINCS)[--.include],[--.src.lzw])
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.bzip2])
-OBJS=ftlzw.obj
+OBJS=ftbzip2.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
@@ -556,17 +576,17 @@ all : $(OBJS)
# EOF
$ eod
$ close out
-$ write sys$output "... [.src.otlayout] directory"
-$ create [.src.otlayout]descrip.mms
-$ open/append out [.src.otlayout]descrip.mms
+$ 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 OT layout compilation rules for VMS
+# FreeType 2 LZW support compilation rules for VMS
#
-# Copyright 2004 by
+# Copyright 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -574,17 +594,19 @@ $ deck
# LICENSE.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])
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.otlayout])
-
-OBJS=otlbase.obj,otlcommn.obj,otlgdef.obj,otlgpos.obj,otlgsub.obj,\
- otljstf.obj,otlparse.obj
+OBJS=ftlzw.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
-
# EOF
$ eod
$ close out
@@ -598,7 +620,7 @@ $ deck
#
-# Copyright 2004 by
+# Copyright 2004-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -670,7 +692,7 @@ $ deck
#
-# Copyright 2002 by
+# Copyright 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -700,7 +722,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -730,7 +752,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -756,11 +778,11 @@ $ open/append out [.src.psnames]descrip.mms
$ copy sys$input: out
$ deck
#
-# FreeType 2 PSNames driver compilation rules for VMS
+# FreeType 2 psnames driver compilation rules for VMS
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -790,7 +812,7 @@ $ deck
#
-# Copyright 2001 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -820,7 +842,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -850,7 +872,7 @@ $ deck
#
-# Copyright 2001 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -880,7 +902,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -910,7 +932,7 @@ $ deck
#
-# Copyright 1996-2000, 2002 by
+# Copyright 1996-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -927,8 +949,6 @@ 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
@@ -942,7 +962,7 @@ $ deck
#
-# Copyright 2002 by
+# Copyright 2002-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -972,7 +992,7 @@ $ deck
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -1103,7 +1123,7 @@ $ endif
$!
$! Init symbols used to hold CPP definitions and include path
$!
-$ libdefs = ""
+$ libdefs = "FT2_BUILD_LIBRARY,FT_CONFIG_OPTION_OLD_INTERNALS,"
$ libincs = ""
$!
$! Open data file with location of libraries
diff --git a/freetype/builds/unix/install-sh b/install-sh
index 0b0fdcbb..59990a10 100755
--- a/freetype/builds/unix/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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-writable 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"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_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"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/jbig2dec/CHANGES b/jbig2dec/CHANGES
index 052a0382..f0101b8b 100644
--- a/jbig2dec/CHANGES
+++ b/jbig2dec/CHANGES
@@ -1,14 +1,21 @@
-Version 0.17 (2019 October 1)
+Version 0.18 (2020 February 11)
-* Updated documentation with accurate contact information.
+* Performance enhancements related to decoding of MMR and generic
+ regions as well as composing images onto pages.
+
+* Bug fixes for a few issues reported by Coverity and OSS-Fuzz.
+
+Version 0.17 (2019 September 16)
+
+* Improved test suite by verifying input file contents and adding
+ all ubc test streams. Fixed bugs where previously missing ubc
+ test streams were decoded incorrectly.
+
+* Bug fixes for a few issues reported by Coverity.
* Moved version number to jbig2.h, and adapted configure
correspondingly. Added pkg-config file to be installed
- along side library. Added run-time check of version
- number so that the correct header is used with the matching
- binary library.
-
-* Bug fixes.
+ along side library.
Version 0.16 (2019 April 04)
diff --git a/jbig2dec/Makefile.am b/jbig2dec/Makefile.am
index e207b7a7..da46c350 100644
--- a/jbig2dec/Makefile.am
+++ b/jbig2dec/Makefile.am
@@ -12,7 +12,7 @@ AM_CFLAGS = $(XCFLAGS)
libjbig2dec_la_LDFLAGS = -version-info @JBIG2DEC_LT_CURRENT@:@JBIG2DEC_LT_REVISION@:@JBIG2DEC_LT_AGE@ -no-undefined
libjbig2dec_la_SOURCES = jbig2.c \
- jbig2_arith.c jbig2_arith_int.c jbig2_arith_iaid.c jbig2_huffman.c \
+ jbig2_arith.c jbig2_arith_int.c jbig2_arith_iaid.c jbig2_huffman.c jbig2_hufftab.c \
jbig2_segment.c jbig2_page.c \
jbig2_symbol_dict.c jbig2_text.c \
jbig2_generic.c jbig2_refinement.c jbig2_mmr.c \
diff --git a/jbig2dec/Makefile.unix b/jbig2dec/Makefile.unix
index 24bb12d1..cd386b5d 100644
--- a/jbig2dec/Makefile.unix
+++ b/jbig2dec/Makefile.unix
@@ -8,9 +8,9 @@ CFLAGS := -Wall -Wextra -Wno-unused-parameter -g -O2
LIB_SRCS := \
jbig2_arith.c jbig2_arith_int.c jbig2_arith_iaid.c \
- jbig2_huffman.c jbig2_segment.c jbig2_page.c jbig2_symbol_dict.c \
- jbig2_text.c jbig2_halftone.c jbig2_generic.c jbig2_refinement.c \
- jbig2_mmr.c jbig2_image.c jbig2.c
+ jbig2_huffman.c jbig2_hufftab.c jbig2_segment.c jbig2_page.c \
+ jbig2_symbol_dict.c jbig2_text.c jbig2_halftone.c jbig2_generic.c \
+ jbig2_refinement.c jbig2_mmr.c jbig2_image.c jbig2.c
LIB_OBJS := $(LIB_SRCS:%.c=%.o)
LIB_HDRS := \
jbig2.h jbig2_arith.h jbig2_arith_iaid.h jbig2_arith_int.h \
diff --git a/jbig2dec/autogen.sh b/jbig2dec/autogen.sh
index 1dbe143c..41a5d971 100755
--- a/jbig2dec/autogen.sh
+++ b/jbig2dec/autogen.sh
@@ -22,7 +22,7 @@ VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/"
VERSIONMKMAJ="sed -e s/\([0-9][0-9]*\)[^0-9].*/\\1/"
VERSIONMKMIN="sed -e s/.*[0-9][0-9]*\.//"
-JBIG2VERSIONGREP="sed -e s/^.*(\([0-9]\+\)).*/\\1/"
+JBIG2VERSIONGREP="sed -e s/^.*(\([0-9][0-9]*\)).*/\\1/"
JBIG2MAJOR=$(grep 'define JBIG2_VERSION_MAJOR' jbig2.h | $JBIG2VERSIONGREP)
JBIG2MINOR=$(grep 'define JBIG2_VERSION_MINOR' jbig2.h | $JBIG2VERSIONGREP)
sed -e "s/^\(AC_INIT[^,]*,\)[^,]*\(,.*\)$/\1 [$JBIG2MAJOR.$JBIG2MINOR]\2/" configure.ac.in > configure.ac
diff --git a/jbig2dec/config_win32.h b/jbig2dec/config_win32.h
index cef8acdb..959d07e4 100644
--- a/jbig2dec/config_win32.h
+++ b/jbig2dec/config_win32.h
@@ -41,6 +41,15 @@ typedef unsigned __int64 uint64_t;
/* VS 2008 and later have vsnprintf */
# if _MSC_VER < 1500
# define vsnprintf _vsnprintf
+/* Previously we defined inline as nothing for 2005 and below */
+# define inline
+#else
+/* VS 2008 has __inline but not inline, later versiosn (unknown exactly where) define inline
+ * so cater for it being defined already.
+ */
+# if !(defined(inline))
+# define inline __inline
+# endif
# endif
/* VS 2014 and later have (finally) snprintf */
diff --git a/jbig2dec/jbig2.c b/jbig2dec/jbig2.c
index 07c7969f..3fc6bf86 100644
--- a/jbig2dec/jbig2.c
+++ b/jbig2dec/jbig2.c
@@ -179,24 +179,32 @@ jbig2_ctx_new_imp(Jbig2Allocator *allocator, Jbig2Options options, Jbig2GlobalCt
#define get_int16(bptr)\
(((int)get_uint16(bptr) ^ 0x8000) - 0x8000)
+/* coverity[ -tainted_data_return ] */
+/* coverity[ -tainted_data_argument : arg-0 ] */
int16_t
jbig2_get_int16(const byte *bptr)
{
return get_int16(bptr);
}
+/* coverity[ -tainted_data_return ] */
+/* coverity[ -tainted_data_argument : arg-0 ] */
uint16_t
jbig2_get_uint16(const byte *bptr)
{
return get_uint16(bptr);
}
+/* coverity[ -tainted_data_return ] */
+/* coverity[ -tainted_data_argument : arg-0 ] */
int32_t
jbig2_get_int32(const byte *bptr)
{
return ((int32_t) get_int16(bptr) << 16) | get_uint16(bptr + 2);
}
+/* coverity[ -tainted_data_return ] */
+/* coverity[ -tainted_data_argument : arg-0 ] */
uint32_t
jbig2_get_uint32(const byte *bptr)
{
@@ -373,7 +381,7 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
p += 4;
segment->data_length = p - s;
- jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "unknown length determined to be %u", segment->data_length);
+ jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "unknown length determined to be %lu", (long) segment->data_length);
}
else if (segment->data_length > ctx->buf_wr_ix - ctx->buf_rd_ix)
return 0; /* need more data */
@@ -384,7 +392,7 @@ jbig2_data_in(Jbig2Ctx *ctx, const unsigned char *data, size_t size)
if (ctx->state == JBIG2_FILE_RANDOM_BODIES) {
if (ctx->segment_index == ctx->n_segments)
ctx->state = JBIG2_FILE_EOF;
- } else { /* JBIG2_FILE_SEQUENCIAL_BODY */
+ } else { /* JBIG2_FILE_SEQUENTIAL_BODY */
ctx->state = JBIG2_FILE_SEQUENTIAL_HEADER;
}
if (code < 0) {
diff --git a/jbig2dec/jbig2.h b/jbig2dec/jbig2.h
index 16bb95ac..fb195fec 100644
--- a/jbig2dec/jbig2.h
+++ b/jbig2dec/jbig2.h
@@ -26,7 +26,7 @@ extern "C"
#define _JBIG2_H
#define JBIG2_VERSION_MAJOR (0)
-#define JBIG2_VERSION_MINOR (17)
+#define JBIG2_VERSION_MINOR (18)
/* warning levels */
typedef enum {
@@ -106,6 +106,11 @@ int jbig2_complete_page(Jbig2Ctx *ctx);
#endif /* _JBIG2_H */
+/* If we don't have a definition for inline, make it nothing so the code will compile */
+#ifndef inline
+#define inline
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/jbig2dec/jbig2_arith.c b/jbig2dec/jbig2_arith.c
index 6416fad6..04566337 100644
--- a/jbig2dec/jbig2_arith.c
+++ b/jbig2dec/jbig2_arith.c
@@ -42,21 +42,16 @@ struct _Jbig2ArithState {
int offset;
};
-#undef SOFTWARE_CONVENTION
-
/*
- A note on the "software conventions".
-
- Previously, I had misinterpreted the spec, and had thought that the
- spec's description of the "software convention" was wrong. Now I
- believe that this code is both correct and matches the spec, with
- SOFTWARE_CONVENTION defined or not. Thanks to William Rucklidge for
- the clarification.
-
- In any case, my benchmarking indicates no speed difference at all.
- Therefore, for now we will just use the normative version.
-
- */
+ Previous versions of this code had a #define to allow
+ us to choose between using the revised arithmetic decoding
+ specified in the 'Software Convention' section of the spec.
+ Back to back tests showed that the 'Software Convention'
+ version was indeed slightly faster. We therefore enable it
+ by default. We also strip the option out, because a) it
+ makes the code harder to read, and b) such things are an
+ invitation to bitrot.
+*/
static void
jbig2_arith_bytein(Jbig2ArithState *as)
@@ -66,6 +61,23 @@ jbig2_arith_bytein(Jbig2ArithState *as)
/* invariant: as->next_word_bytes > 0 */
+ /* This code confused me no end when I first read it, so a quick note
+ * to save others (and future me's) from being similarly confused.
+ * 'next_word' does indeed contain 'next_word_bytes' of valid data
+ * (always starting at the most significant byte). The confusing
+ * thing is that the first byte has always already been read.
+ * i.e. it serves only as an indication that the last byte we read
+ * was FF or not.
+ *
+ * The jbig2 bytestream uses FF bytes, followed by a byte > 0x8F as
+ * marker bytes. These never occur in normal streams of arithmetic
+ * encoding, so meeting one terminates the stream (with an infinite
+ * series of 1 bits).
+ *
+ * If we meet an FF byte, we return it as normal. We just 'remember'
+ * that fact for the next byte we read.
+ */
+
/* Figure G.3 */
B = (byte)((as->next_word >> 24) & 0xFF);
if (B == 0xFF) {
@@ -83,9 +95,6 @@ jbig2_arith_bytein(Jbig2ArithState *as)
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "read %02x (aa)\n", B);
#endif
-#ifndef SOFTWARE_CONVENTION
- as->C += 0xFF00;
-#endif
as->CT = 8;
as->next_word = 0xFF000000 | (as->next_word >> 8);
as->next_word_bytes = 4;
@@ -94,11 +103,7 @@ jbig2_arith_bytein(Jbig2ArithState *as)
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "read %02x (a)\n", B);
#endif
-#ifdef SOFTWARE_CONVENTION
as->C += 0xFE00 - (B1 << 9);
-#else
- as->C += B1 << 9;
-#endif
as->CT = 7;
}
} else {
@@ -107,9 +112,6 @@ jbig2_arith_bytein(Jbig2ArithState *as)
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "read %02x (ba)\n", B);
#endif
-#ifndef SOFTWARE_CONVENTION
- as->C += 0xFF00;
-#endif
as->CT = 8;
} else {
as->next_word_bytes--;
@@ -118,11 +120,7 @@ jbig2_arith_bytein(Jbig2ArithState *as)
fprintf(stderr, "read %02x (b)\n", B);
#endif
-#ifdef SOFTWARE_CONVENTION
as->C += 0xFE00 - (B1 << 9);
-#else
- as->C += (B1 << 9);
-#endif
as->CT = 7;
}
}
@@ -141,11 +139,7 @@ jbig2_arith_bytein(Jbig2ArithState *as)
as->next_word_bytes = new_bytes;
}
B = (byte)((as->next_word >> 24) & 0xFF);
-#ifdef SOFTWARE_CONVENTION
as->C += 0xFF00 - (B << 8);
-#else
- as->C += (B << 8);
-#endif
}
}
@@ -172,11 +166,7 @@ jbig2_arith_new(Jbig2Ctx *ctx, Jbig2WordStream *ws)
result->offset = new_bytes;
/* Figure E.20 */
-#ifdef SOFTWARE_CONVENTION
result->C = (~(result->next_word >> 8)) & 0xFF0000;
-#else
- result->C = (result->next_word >> 8) & 0xFF0000;
-#endif
jbig2_arith_bytein(result);
result->C <<= 7;
@@ -195,7 +185,7 @@ typedef struct {
byte lps_xor; /* lps_xor = index ^ NLPS ^ (SWITCH << 7) */
} Jbig2ArithQe;
-const Jbig2ArithQe jbig2_arith_Qe[MAX_QE_ARRAY_SIZE] = {
+static const Jbig2ArithQe jbig2_arith_Qe[MAX_QE_ARRAY_SIZE] = {
{0x5601, 1 ^ 0, 1 ^ 0 ^ 0x80},
{0x3401, 2 ^ 1, 6 ^ 1},
{0x1801, 3 ^ 2, 9 ^ 2},
@@ -258,34 +248,22 @@ jbig2_arith_renormd(Jbig2ArithState *as)
} while ((as->A & 0x8000) == 0);
}
-bool
-jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx, int *code)
+int
+jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx)
{
Jbig2ArithCx cx = *pcx;
const Jbig2ArithQe *pqe;
unsigned int index = cx & 0x7f;
bool D;
- if (index >= MAX_QE_ARRAY_SIZE) {
- *code = -1;
- return 0;
- } else {
- pqe = &jbig2_arith_Qe[index];
- }
+ if (index >= MAX_QE_ARRAY_SIZE)
+ return -1; /* Error */
+
+ pqe = &jbig2_arith_Qe[index];
/* Figure E.15 */
as->A -= pqe->Qe;
- if (
-#ifdef SOFTWARE_CONVENTION
- /* Note: I do not think this is correct. See above. */
- (as->C >> 16) < as->A
-#else
- !((as->C >> 16) < pqe->Qe)
-#endif
- ) {
-#ifndef SOFTWARE_CONVENTION
- as->C -= pqe->Qe << 16;
-#endif
+ if ((as->C >> 16) < as->A) {
if ((as->A & 0x8000) == 0) {
/* MPS_EXCHANGE, Figure E.16 */
if (as->A < pqe->Qe) {
@@ -296,16 +274,12 @@ jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx, int *code)
*pcx ^= pqe->mps_xor;
}
jbig2_arith_renormd(as);
- *code = 0;
return D;
} else {
- *code = 0;
return cx >> 7;
}
} else {
-#ifdef SOFTWARE_CONVENTION
as->C -= (as->A) << 16;
-#endif
/* LPS_EXCHANGE, Figure E.17 */
if (as->A < pqe->Qe) {
as->A = pqe->Qe;
@@ -317,7 +291,6 @@ jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx, int *code)
*pcx ^= pqe->lps_xor;
}
jbig2_arith_renormd(as);
- *code = 0;
return D;
}
}
@@ -378,7 +351,6 @@ main(int argc, char **argv)
Jbig2ArithState *as;
int i;
Jbig2ArithCx cx = 0;
- int code;
ctx = jbig2_ctx_new(NULL, 0, NULL, NULL, NULL);
@@ -394,7 +366,7 @@ main(int argc, char **argv)
#else
(void)
#endif
- jbig2_arith_decode(as, &cx, &code);
+ jbig2_arith_decode(as, &cx);
#ifdef JBIG2_DEBUG_ARITH
fprintf(stderr, "%3d: D = %d, ", i, D);
diff --git a/jbig2dec/jbig2_arith.h b/jbig2dec/jbig2_arith.h
index be9382b8..f50d232f 100644
--- a/jbig2dec/jbig2_arith.h
+++ b/jbig2dec/jbig2_arith.h
@@ -31,7 +31,8 @@ typedef unsigned char Jbig2ArithCx;
Jbig2ArithState *jbig2_arith_new(Jbig2Ctx *ctx, Jbig2WordStream *ws);
/* decode a bit */
-bool jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx, int *code);
+/* Normally returns 0 or 1. May return negative in case of error. */
+int jbig2_arith_decode(Jbig2ArithState *as, Jbig2ArithCx *pcx);
/* returns true if the end of the data stream has been reached (for sanity checks) */
bool jbig2_arith_has_reached_marker(Jbig2ArithState *as);
diff --git a/jbig2dec/jbig2_arith_iaid.c b/jbig2dec/jbig2_arith_iaid.c
index d2177a3e..caa79c80 100644
--- a/jbig2dec/jbig2_arith_iaid.c
+++ b/jbig2dec/jbig2_arith_iaid.c
@@ -75,12 +75,11 @@ jbig2_arith_iaid_decode(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *actx, Jbig2ArithState
int PREV = 1;
int D;
int i;
- int code = 0;
/* A.3 (2) */
for (i = 0; i < SBSYMCODELEN; i++) {
- D = jbig2_arith_decode(as, &IAIDx[PREV], &code);
- if (code)
+ D = jbig2_arith_decode(as, &IAIDx[PREV]);
+ if (D < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAIDx code");
#ifdef VERBOSE
fprintf(stderr, "IAID%x: D = %d\n", PREV, D);
diff --git a/jbig2dec/jbig2_arith_int.c b/jbig2dec/jbig2_arith_int.c
index 05ec1b85..378ac9d3 100644
--- a/jbig2dec/jbig2_arith_int.c
+++ b/jbig2dec/jbig2_arith_int.c
@@ -70,38 +70,37 @@ jbig2_arith_int_decode(Jbig2Ctx *ctx, Jbig2ArithIntCtx *actx, Jbig2ArithState *a
int bit;
int n_tail, offset;
int i;
- int code = 0;
- S = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ S = jbig2_arith_decode(as, &IAx[PREV]);
+ if (S < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx S");
PREV = (PREV << 1) | S;
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 0");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 1");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 2");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 3");
PREV = (PREV << 1) | bit;
if (bit) {
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx decision bit 4");
PREV = (PREV << 1) | bit;
@@ -131,8 +130,8 @@ jbig2_arith_int_decode(Jbig2Ctx *ctx, Jbig2ArithIntCtx *actx, Jbig2ArithState *a
V = 0;
for (i = 0; i < n_tail; i++) {
- bit = jbig2_arith_decode(as, &IAx[PREV], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &IAx[PREV]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode IAx V bit %d", i);
PREV = ((PREV << 1) & 511) | (PREV & 256) | bit;
V = (V << 1) | bit;
diff --git a/jbig2dec/jbig2_generic.c b/jbig2dec/jbig2_generic.c
index 6c28352d..32211aad 100644
--- a/jbig2dec/jbig2_generic.c
+++ b/jbig2dec/jbig2_generic.c
@@ -346,6 +346,16 @@ NEWCONTEXT |= (line_m2 >> (10-x_minor)) & 0x80;
The optimized decoding functions for GBTEMPLATE 0, 1 and 3 all
work similarly. */
+/* Get a bit. No bounds checking. */
+static inline int
+jbig2_image_get_pixel_fast(Jbig2Image *image, int x, int y)
+{
+ const int byte = (x >> 3) + y * image->stride;
+ const int bit = 7 - (x & 7);
+
+ return ((image->data[byte] >> bit) & 1);
+}
+
/* return the appropriate context size for the given template */
int
jbig2_generic_stats_size(Jbig2Ctx *ctx, int template)
@@ -381,7 +391,6 @@ jbig2_decode_generic_template0(Jbig2Ctx *ctx,
uint32_t line_m1;
uint32_t line_m2;
uint32_t padded_width = (GBW + 7) & -8;
- int code = 0;
line_m1 = line1 ? line1[0] : 0;
line_m2 = line2 ? line2[0] << 6 : 0;
@@ -401,10 +410,10 @@ jbig2_decode_generic_template0(Jbig2Ctx *ctx,
/* This is the speed-critical inner loop. */
for (x_minor = 0; x_minor < minor_width; x_minor++) {
- bool bit;
+ int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bit | ((line_m1 >> (7 - x_minor)) & 0x10) | ((line_m2 >> (7 - x_minor)) & 0x800);
@@ -434,8 +443,7 @@ jbig2_decode_generic_template0_unopt(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
- int code = 0;
+ int bit;
if (pixel_outside_field(params->gbat[0], params->gbat[1]) ||
pixel_outside_field(params->gbat[2], params->gbat[3]) ||
@@ -444,36 +452,56 @@ jbig2_decode_generic_template0_unopt(Jbig2Ctx *ctx,
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
- /* this version is generic and easy to understand, but very slow */
-
for (y = 0; y < GBH; y++) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x000F; /* First 4 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
+ CONTEXT |= (pd>>8) & 0x03E0; /* Next 5 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], y + params->gbat[3]) << 10;
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
+ CONTEXT |= (ppd>>2) & 0x7000; /* Next 3 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 unoptimized");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 9;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], y + params->gbat[3]) << 10;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 12;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 2) << 13;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 14;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 unoptimized");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
}
return 0;
}
@@ -487,40 +515,59 @@ jbig2_decode_generic_template1_unopt(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
- int code = 0;
+ int bit;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
- /* this version is generic and easy to understand, but very slow */
-
for (y = 0; y < GBH; y++) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x0007; /* First 3 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
+ CONTEXT |= (pd>>9) & 0x01F0; /* Next 5 pixels */
+ CONTEXT |= (ppd>>4) & 0x1E00; /* Next 4 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 unoptimized");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 2) << 9;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 10;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 2) << 11;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 12;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 unoptimized");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
}
return 0;
}
@@ -537,7 +584,6 @@ jbig2_decode_generic_template1(Jbig2Ctx *ctx,
byte *line2 = NULL;
byte *line1 = NULL;
byte *gbreg_line = (byte *) image->data;
- int code = 0;
#ifdef OUTPUT_PBM
printf("P4\n%d %d\n", GBW, GBH);
@@ -570,10 +616,10 @@ jbig2_decode_generic_template1(Jbig2Ctx *ctx,
/* This is the speed-critical inner loop. */
for (x_minor = 0; x_minor < minor_width; x_minor++) {
- bool bit;
+ int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0xefb) << 1) | bit | ((line_m1 >> (8 - x_minor)) & 0x8) | ((line_m2 >> (8 - x_minor)) & 0x200);
@@ -600,37 +646,59 @@ jbig2_decode_generic_template2_unopt(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
- int code = 0;
+ int bit;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
- /* this version is generic and easy to understand, but very slow */
-
for (y = 0; y < GBH; y++) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x003; /* First 2 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
+ CONTEXT |= (pd>>11) & 0x078; /* Next 4 pixels */
+ CONTEXT |= (ppd>>7) & 0x380; /* Next 3 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 unoptimized");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 2) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 9;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 unoptimized");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
}
return 0;
@@ -648,7 +716,6 @@ jbig2_decode_generic_template2(Jbig2Ctx *ctx,
byte *line2 = NULL;
byte *line1 = NULL;
byte *gbreg_line = (byte *) image->data;
- int code = 0;
#ifdef OUTPUT_PBM
printf("P4\n%d %d\n", GBW, GBH);
@@ -681,10 +748,10 @@ jbig2_decode_generic_template2(Jbig2Ctx *ctx,
/* This is the speed-critical inner loop. */
for (x_minor = 0; x_minor < minor_width; x_minor++) {
- bool bit;
+ int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x1bd) << 1) | bit | ((line_m1 >> (10 - x_minor)) & 0x4) | ((line_m2 >> (10 - x_minor)) & 0x80);
@@ -713,7 +780,6 @@ jbig2_decode_generic_template3(Jbig2Ctx *ctx,
byte *line1 = NULL;
byte *gbreg_line = (byte *) image->data;
uint32_t x, y;
- int code;
#ifdef OUTPUT_PBM
printf("P4\n%d %d\n", GBW, GBH);
@@ -741,10 +807,10 @@ jbig2_decode_generic_template3(Jbig2Ctx *ctx,
/* This is the speed-critical inner loop. */
for (x_minor = 0; x_minor < minor_width; x_minor++) {
- bool bit;
+ int bit;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 optimized");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x1f7) << 1) | bit | ((line_m1 >> (8 - x_minor)) & 0x10);
@@ -770,37 +836,47 @@ jbig2_decode_generic_template3_unopt(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
- int code = 0;
+ int bit;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
- /* this version is generic and easy to understand, but very slow */
-
for (y = 0; y < GBH; y++) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint32_t pd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x00F; /* First 4 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
+ CONTEXT |= (pd>>9) & 0x3E0; /* Next 5 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 unoptimized");
+ }
+ pd = pd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0)
+ pd |= *pline++;
}
- CONTEXT = 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y - 1) << 9;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 unoptimized");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
}
return 0;
}
@@ -828,9 +904,9 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
int LTP = 0;
- int code = 0;
+ int gmin, gmax;
+ uint32_t left, right, top;
if (pixel_outside_field(params->gbat[0], params->gbat[1]) ||
pixel_outside_field(params->gbat[2], params->gbat[3]) ||
@@ -839,37 +915,178 @@ jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx,
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
+ /* JBig2 has 'standard' values for gbat (see 6.2.5.4 of the spec).
+ * Have an optimised version for those locations. This greatly
+ * simplifies some of the fetches. It's almost like they thought
+ * it through. */
+ if (params->gbat[0] == 3 && params->gbat[1] == -1 &&
+ params->gbat[2] == -3 && params->gbat[3] == -1 &&
+ params->gbat[4] == 2 && params->gbat[5] == -2 &&
+ params->gbat[6] == -2 && params->gbat[7] == -2)
+ {
+ for (y = 0; y < GBH; y++) {
+ int bit = jbig2_arith_decode(as, &GB_stats[0x9B25]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
+ LTP ^= bit;
+ if (!LTP) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
+ for (x = 0; x < GBW; x++) {
+ if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x00F; /* First 4 pixels */
+ CONTEXT |= (pd>>8) & 0x7F0; /* Next 7 pixels */
+ CONTEXT |= (ppd>>2) & 0xF800; /* Final 5 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ *d++ = (uint8_t)out_byte;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
+ }
+ }
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ } else {
+ copy_prev_row(image, y);
+ }
+ }
+ return 0;
+ }
+
+ /* We divide the width into 3 regions 0..left...right...GBW,
+ * between left and right, we know that our accesses will never
+ * step outside the image, enabling us to use faster accessors. */
+ left = 4;
+ right = 2;
+ gmin = gmax = params->gbat[0];
+ if (params->gbat[2] < gmin)
+ gmin = params->gbat[2];
+ if (gmax < params->gbat[2])
+ gmax = params->gbat[2];
+ if (params->gbat[4] < gmin)
+ gmin = params->gbat[4];
+ if (gmax < params->gbat[4])
+ gmax = params->gbat[4];
+ if (params->gbat[6] < gmin)
+ gmin = params->gbat[6];
+ if (gmax < params->gbat[6])
+ gmax = params->gbat[6];
+ if ((int)left < -gmin)
+ left = -gmin;
+ if ((int)right < gmax)
+ right = gmax;
+ if (right > GBW)
+ right = GBW;
+ right = GBW - right;
+ /* So 0 <= x < left or right <= x < GBW needs bounds checking. */
+
+ /* Now we do the same for the height, but here there is no bottom
+ * region, as we only ever look up for y. */
+ top = 2;
+ gmin = params->gbat[1];
+ if (params->gbat[3] < gmin)
+ gmin = params->gbat[3];
+ if (params->gbat[5] < gmin)
+ gmin = params->gbat[5];
+ if (params->gbat[7] < gmin)
+ gmin = params->gbat[7];
+ if ((int)top < -gmin)
+ top = -gmin;
+ /* So 0 <= y < top needs bounds checking. */
+
for (y = 0; y < GBH; y++) {
- LTP ^= jbig2_arith_decode(as, &GB_stats[0x9B25], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GB_stats[0x9B25]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON1");
+ LTP ^= bit;
if (!LTP) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x000F; /* First 4 pixels */
+ CONTEXT |= (pd>>8) & 0x03E0; /* Skip one, next 5 pixels */
+ CONTEXT |= (ppd>>2) & 0x7000; /* Skip 2, next 3 pixels, skip one */
+ if (y >= top && x >= left && x < right)
+ {
+ CONTEXT |= jbig2_image_get_pixel_fast(image, x + params->gbat[0], y + params->gbat[1]) << 4;
+ CONTEXT |= jbig2_image_get_pixel_fast(image, x + params->gbat[2], y + params->gbat[3]) << 10;
+ CONTEXT |= jbig2_image_get_pixel_fast(image, x + params->gbat[4], y + params->gbat[5]) << 11;
+ CONTEXT |= jbig2_image_get_pixel_fast(image, x + params->gbat[6], y + params->gbat[7]) << 15;
+ }
+ else
+ {
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], y + params->gbat[3]) << 10;
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
+ }
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = jbig2_image_get_pixel(image, x - 1, y);
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 9;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], y + params->gbat[3]) << 10;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], y + params->gbat[5]) << 11;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 12;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 2) << 13;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 14;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], y + params->gbat[7]) << 15;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template0 TPGDON2");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
} else {
copy_prev_row(image, y);
}
@@ -887,42 +1104,64 @@ jbig2_decode_generic_template1_TPGDON(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
int LTP = 0;
- int code = 0;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- LTP ^= jbig2_arith_decode(as, &GB_stats[0x0795], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GB_stats[0x0795]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON1");
+ LTP ^= bit;
if (!LTP) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x0007; /* First 3 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
+ CONTEXT |= (pd>>9) & 0x01F0; /* next 5 pixels */
+ CONTEXT |= (ppd>>4) & 0x1E00; /* next 4 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON2");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = jbig2_image_get_pixel(image, x - 1, y);
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 2) << 9;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 10;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 2) << 11;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 12;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template1 TPGDON2");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
} else {
copy_prev_row(image, y);
}
@@ -940,39 +1179,64 @@ jbig2_decode_generic_template2_TPGDON(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
int LTP = 0;
- int code = 0;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- LTP ^= jbig2_arith_decode(as, &GB_stats[0xE5], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GB_stats[0xE5]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON1");
+ LTP ^= bit;
if (!LTP) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint8_t *ppline = &image->data[image->stride * (y-2)];
+ uint32_t pd = 0;
+ uint32_t ppd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ if (y > 1) {
+ ppd = (*ppline++ << 8);
+ if (GBW > 8)
+ ppd |= *ppline++;
+ }
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x003; /* First 2 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
+ CONTEXT |= (pd>>11) & 0x078; /* next 4 pixels */
+ CONTEXT |= (ppd>>7) & 0x380; /* next 3 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON2");
+ }
+ pd = pd<<1;
+ ppd = ppd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0) {
+ pd |= *pline++;
+ if (y > 1)
+ ppd |= *ppline++;
+ }
}
- CONTEXT = jbig2_image_get_pixel(image, x - 1, y);
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 1) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 2) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 9;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template2 TPGDON2");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
} else {
copy_prev_row(image, y);
}
@@ -990,39 +1254,52 @@ jbig2_decode_generic_template3_TPGDON(Jbig2Ctx *ctx,
const uint32_t GBH = image->height;
uint32_t CONTEXT;
uint32_t x, y;
- bool bit;
int LTP = 0;
- int code = 0;
if (pixel_outside_field(params->gbat[0], params->gbat[1]))
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
"adaptive template pixel is out of field");
for (y = 0; y < GBH; y++) {
- LTP ^= jbig2_arith_decode(as, &GB_stats[0x0195], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GB_stats[0x0195]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON1");
+ LTP ^= bit;
if (!LTP) {
+ uint32_t out_byte = 0;
+ int out_bits_to_go_in_byte = 8;
+ uint8_t *d = &image->data[image->stride * y];
+ uint8_t *pline = &image->data[image->stride * (y-1)];
+ uint32_t pd = 0;
+ if (y > 0) {
+ pd = (*pline++ << 8);
+ if (GBW > 8)
+ pd |= *pline++;
+ }
for (x = 0; x < GBW; x++) {
if (params->USESKIP && jbig2_image_get_pixel(params->SKIP, x, y)) {
- jbig2_image_set_pixel(image, x, y, 0);
- continue;
+ bit = 0;
+ } else {
+ CONTEXT = out_byte & 0x0F; /* First 4 pixels */
+ CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
+ CONTEXT |= (pd>>9) & 0x3E0; /* next 5 pixels */
+ bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]);
+ if (bit < 0)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON2");
+ }
+ pd = pd<<1;
+ out_byte = (out_byte<<1) | bit;
+ out_bits_to_go_in_byte--;
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
+ if (out_bits_to_go_in_byte == 0) {
+ out_bits_to_go_in_byte = 8;
+ d++;
+ if (x+9 < GBW && y > 0)
+ pd |= *pline++;
}
- CONTEXT = jbig2_image_get_pixel(image, x - 1, y);
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2;
- CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3;
- CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], y + params->gbat[1]) << 4;
- CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5;
- CONTEXT |= jbig2_image_get_pixel(image, x, y - 1) << 6;
- CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7;
- CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8;
- CONTEXT |= jbig2_image_get_pixel(image, x - 3, y - 1) << 9;
- bit = jbig2_arith_decode(as, &GB_stats[CONTEXT], &code);
- if (code)
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling generic template3 TPGDON2");
- jbig2_image_set_pixel(image, x, y, bit);
}
+ if (out_bits_to_go_in_byte != 8)
+ *d = (uint8_t)out_byte<<out_bits_to_go_in_byte;
} else {
copy_prev_row(image, y);
}
@@ -1075,7 +1352,7 @@ jbig2_decode_generic_region(Jbig2Ctx *ctx,
if (image->stride * image->height > (1 << 26) && segment->data_length < image->stride * image->height / (1 << 16)) {
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
- "region is far larger than data provided (%d << %d), aborting to prevent DOS", segment->data_length, image->stride * image->height);
+ "region is far larger than data provided (%li << %d), aborting to prevent DOS", (long) segment->data_length, image->stride * image->height);
}
if (!params->MMR && params->TPGDON)
diff --git a/jbig2dec/jbig2_halftone.c b/jbig2dec/jbig2_halftone.c
index 8a18fc70..e67c6d18 100644
--- a/jbig2dec/jbig2_halftone.c
+++ b/jbig2dec/jbig2_halftone.c
@@ -50,6 +50,12 @@ jbig2_hd_new(Jbig2Ctx *ctx, const Jbig2PatternDictParams *params, Jbig2Image *im
uint32_t i;
int j;
+ if (N == 0) {
+ /* We've wrapped. */
+ jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "params->GRAYMAX out of range");
+ return NULL;
+ }
+
/* allocate a new struct */
new = jbig2_new(ctx, Jbig2PatternDict, 1);
if (new != NULL) {
@@ -458,7 +464,7 @@ jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
Jbig2Image *HSKIP = NULL;
Jbig2PatternDict *HPATS;
uint32_t i;
- uint32_t mg, ng;
+ int32_t mg, ng;
int32_t x, y;
uint16_t gray_val;
int code = 0;
@@ -481,8 +487,8 @@ jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
for (mg = 0; mg < params->HGH; ++mg) {
for (ng = 0; ng < params->HGW; ++ng) {
- x = (params->HGX + mg * (int32_t) params->HRY + ng * (int32_t) params->HRX) >> 8;
- y = (params->HGY + mg * (int32_t) params->HRX - ng * (int32_t) params->HRY) >> 8;
+ x = (params->HGX + mg * params->HRY + ng * params->HRX) >> 8;
+ y = (params->HGY + mg * params->HRX - ng * params->HRY) >> 8;
if (x + HPATS->HPW <= 0 || x >= (int32_t) image->width || y + HPATS->HPH <= 0 || y >= (int32_t) image->height) {
jbig2_image_set_pixel(HSKIP, ng, mg, 1);
diff --git a/jbig2dec/jbig2_huffman.c b/jbig2dec/jbig2_huffman.c
index 908ab59c..a3bc001a 100644
--- a/jbig2dec/jbig2_huffman.c
+++ b/jbig2dec/jbig2_huffman.c
@@ -299,7 +299,7 @@ jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *o
entry = &table->entries[log_table_size > 0 ? this_word >> (32 - log_table_size) : 0];
flags = entry->flags;
PREFLEN = entry->PREFLEN;
- if (flags == (byte) -1 && PREFLEN == (byte) -1 && entry->u.RANGELOW == -1) {
+ if (flags == (byte) -1 || PREFLEN == (byte) -1) {
if (oob)
*oob = -1;
return jbig2_error(hs->ctx, JBIG2_SEVERITY_FATAL, -1, "encountered unpopulated huffman table entry");
@@ -583,6 +583,11 @@ jbig2_table(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data)
code_table_flags, HTOOB, HTPS, HTRS, HTLOW, HTHIGH);
#endif
+ if (HTLOW >= HTHIGH) {
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "invalid Huffman Table range");
+ goto error_exit;
+ }
+
/* allocate HuffmanParams & HuffmanLine */
params = jbig2_new(ctx, Jbig2HuffmanParams, 1);
if (params == NULL) {
@@ -747,7 +752,7 @@ static int test1()
{
Jbig2Ctx *ctx;
Jbig2HuffmanTable *tables[5];
- Jbig2HuffmanState *hs;
+ Jbig2HuffmanState *hs = NULL;
Jbig2WordStream ws;
bool oob;
int32_t code;
@@ -799,6 +804,7 @@ static int test1()
success = 1;
cleanup:
+ jbig2_huffman_free(ctx, hs);
for (i = 0; i < 5; i++)
jbig2_release_huffman_table(ctx, tables[i]);
jbig2_ctx_free(ctx);
diff --git a/jbig2dec/jbig2_hufftab.c b/jbig2dec/jbig2_hufftab.c
new file mode 100644
index 00000000..80b9bf26
--- /dev/null
+++ b/jbig2dec/jbig2_hufftab.c
@@ -0,0 +1,318 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/*
+ jbig2dec
+*/
+
+/* predefined Huffman table definitions
+ -- See Annex B of the JBIG2 specification */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "os_types.h"
+
+#include <stdlib.h>
+
+#include "jbig2.h"
+#include "jbig2_priv.h"
+#include "jbig2_huffman.h"
+#include "jbig2_hufftab.h"
+
+#define JBIG2_COUNTOF(x) (sizeof((x)) / sizeof((x)[0]))
+
+/* Table B.1 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_A[] = {
+ {1, 4, 0},
+ {2, 8, 16},
+ {3, 16, 272},
+ {0, 32, -1}, /* low */
+ {3, 32, 65808} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_A = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_A), jbig2_huffman_lines_A };
+
+/* Table B.2 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_B[] = {
+ {1, 0, 0},
+ {2, 0, 1},
+ {3, 0, 2},
+ {4, 3, 3},
+ {5, 6, 11},
+ {0, 32, -1}, /* low */
+ {6, 32, 75}, /* high */
+ {6, 0, 0} /* OOB */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_B = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_B), jbig2_huffman_lines_B };
+
+/* Table B.3 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_C[] = {
+ {8, 8, -256},
+ {1, 0, 0},
+ {2, 0, 1},
+ {3, 0, 2},
+ {4, 3, 3},
+ {5, 6, 11},
+ {8, 32, -257}, /* low */
+ {7, 32, 75}, /* high */
+ {6, 0, 0} /* OOB */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_C = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_C), jbig2_huffman_lines_C };
+
+/* Table B.4 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_D[] = {
+ {1, 0, 1},
+ {2, 0, 2},
+ {3, 0, 3},
+ {4, 3, 4},
+ {5, 6, 12},
+ {0, 32, -1}, /* low */
+ {5, 32, 76}, /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_D = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_D), jbig2_huffman_lines_D };
+
+/* Table B.5 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_E[] = {
+ {7, 8, -255},
+ {1, 0, 1},
+ {2, 0, 2},
+ {3, 0, 3},
+ {4, 3, 4},
+ {5, 6, 12},
+ {7, 32, -256}, /* low */
+ {6, 32, 76} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_E = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_E), jbig2_huffman_lines_E };
+
+/* Table B.6 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_F[] = {
+ {5, 10, -2048},
+ {4, 9, -1024},
+ {4, 8, -512},
+ {4, 7, -256},
+ {5, 6, -128},
+ {5, 5, -64},
+ {4, 5, -32},
+ {2, 7, 0},
+ {3, 7, 128},
+ {3, 8, 256},
+ {4, 9, 512},
+ {4, 10, 1024},
+ {6, 32, -2049}, /* low */
+ {6, 32, 2048} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_F = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_F), jbig2_huffman_lines_F };
+
+/* Table B.7 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_G[] = {
+ {4, 9, -1024},
+ {3, 8, -512},
+ {4, 7, -256},
+ {5, 6, -128},
+ {5, 5, -64},
+ {4, 5, -32},
+ {4, 5, 0},
+ {5, 5, 32},
+ {5, 6, 64},
+ {4, 7, 128},
+ {3, 8, 256},
+ {3, 9, 512},
+ {3, 10, 1024},
+ {5, 32, -1025}, /* low */
+ {5, 32, 2048} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_G = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_G), jbig2_huffman_lines_G };
+
+/* Table B.8 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_H[] = {
+ {8, 3, -15},
+ {9, 1, -7},
+ {8, 1, -5},
+ {9, 0, -3},
+ {7, 0, -2},
+ {4, 0, -1},
+ {2, 1, 0},
+ {5, 0, 2},
+ {6, 0, 3},
+ {3, 4, 4},
+ {6, 1, 20},
+ {4, 4, 22},
+ {4, 5, 38},
+ {5, 6, 70},
+ {5, 7, 134},
+ {6, 7, 262},
+ {7, 8, 390},
+ {6, 10, 646},
+ {9, 32, -16}, /* low */
+ {9, 32, 1670}, /* high */
+ {2, 0, 0} /* OOB */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_H = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_H), jbig2_huffman_lines_H };
+
+/* Table B.9 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_I[] = {
+ {8, 4, -31},
+ {9, 2, -15},
+ {8, 2, -11},
+ {9, 1, -7},
+ {7, 1, -5},
+ {4, 1, -3},
+ {3, 1, -1},
+ {3, 1, 1},
+ {5, 1, 3},
+ {6, 1, 5},
+ {3, 5, 7},
+ {6, 2, 39},
+ {4, 5, 43},
+ {4, 6, 75},
+ {5, 7, 139},
+ {5, 8, 267},
+ {6, 8, 523},
+ {7, 9, 779},
+ {6, 11, 1291},
+ {9, 32, -32}, /* low */
+ {9, 32, 3339}, /* high */
+ {2, 0, 0} /* OOB */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_I = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_I), jbig2_huffman_lines_I };
+
+/* Table B.10 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_J[] = {
+ {7, 4, -21},
+ {8, 0, -5},
+ {7, 0, -4},
+ {5, 0, -3},
+ {2, 2, -2},
+ {5, 0, 2},
+ {6, 0, 3},
+ {7, 0, 4},
+ {8, 0, 5},
+ {2, 6, 6},
+ {5, 5, 70},
+ {6, 5, 102},
+ {6, 6, 134},
+ {6, 7, 198},
+ {6, 8, 326},
+ {6, 9, 582},
+ {6, 10, 1094},
+ {7, 11, 2118},
+ {8, 32, -22}, /* low */
+ {8, 32, 4166}, /* high */
+ {2, 0, 0} /* OOB */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_J = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_J), jbig2_huffman_lines_J };
+
+/* Table B.11 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_K[] = {
+ {1, 0, 1},
+ {2, 1, 2},
+ {4, 0, 4},
+ {4, 1, 5},
+ {5, 1, 7},
+ {5, 2, 9},
+ {6, 2, 13},
+ {7, 2, 17},
+ {7, 3, 21},
+ {7, 4, 29},
+ {7, 5, 45},
+ {7, 6, 77},
+ {0, 32, -1}, /* low */
+ {7, 32, 141} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_K = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_K), jbig2_huffman_lines_K };
+
+/* Table B.12 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_L[] = {
+ {1, 0, 1},
+ {2, 0, 2},
+ {3, 1, 3},
+ {5, 0, 5},
+ {5, 1, 6},
+ {6, 1, 8},
+ {7, 0, 10},
+ {7, 1, 11},
+ {7, 2, 13},
+ {7, 3, 17},
+ {7, 4, 25},
+ {8, 5, 41},
+ {8, 32, 73},
+ {0, 32, -1}, /* low */
+ {0, 32, 0} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_L = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_L), jbig2_huffman_lines_L };
+
+/* Table B.13 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_M[] = {
+ {1, 0, 1},
+ {3, 0, 2},
+ {4, 0, 3},
+ {5, 0, 4},
+ {4, 1, 5},
+ {3, 3, 7},
+ {6, 1, 15},
+ {6, 2, 17},
+ {6, 3, 21},
+ {6, 4, 29},
+ {6, 5, 45},
+ {7, 6, 77},
+ {0, 32, -1}, /* low */
+ {7, 32, 141} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_M = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_M), jbig2_huffman_lines_M };
+
+/* Table B.14 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_N[] = {
+ {3, 0, -2},
+ {3, 0, -1},
+ {1, 0, 0},
+ {3, 0, 1},
+ {3, 0, 2},
+ {0, 32, -1}, /* low */
+ {0, 32, 3}, /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_N = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_N), jbig2_huffman_lines_N };
+
+/* Table B.15 */
+static const Jbig2HuffmanLine jbig2_huffman_lines_O[] = {
+ {7, 4, -24},
+ {6, 2, -8},
+ {5, 1, -4},
+ {4, 0, -2},
+ {3, 0, -1},
+ {1, 0, 0},
+ {3, 0, 1},
+ {4, 0, 2},
+ {5, 1, 3},
+ {6, 2, 5},
+ {7, 4, 9},
+ {7, 32, -25}, /* low */
+ {7, 32, 25} /* high */
+};
+
+const Jbig2HuffmanParams jbig2_huffman_params_O = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_O), jbig2_huffman_lines_O };
diff --git a/jbig2dec/jbig2_hufftab.h b/jbig2dec/jbig2_hufftab.h
index 29a39db0..68d1b619 100644
--- a/jbig2dec/jbig2_hufftab.h
+++ b/jbig2dec/jbig2_hufftab.h
@@ -18,298 +18,25 @@
*/
/* predefined Huffman table definitions
- -- See Annex B of the JBIG2 specification */
+ -- See Annex B.5 of the JBIG2 specification */
#ifndef _JBIG2_HUFFTAB_H
#define _JBIG2_HUFFTAB_H
-/* types are in jbig2_huffman.h, you must include that first */
-
-#define JBIG2_COUNTOF(x) (sizeof((x)) / sizeof((x)[0]))
-
-/* Table B.1 */
-const Jbig2HuffmanLine jbig2_huffman_lines_A[] = {
- {1, 4, 0},
- {2, 8, 16},
- {3, 16, 272},
- {0, 32, -1}, /* low */
- {3, 32, 65808} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_A = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_A), jbig2_huffman_lines_A };
-
-/* Table B.2 */
-const Jbig2HuffmanLine jbig2_huffman_lines_B[] = {
- {1, 0, 0},
- {2, 0, 1},
- {3, 0, 2},
- {4, 3, 3},
- {5, 6, 11},
- {0, 32, -1}, /* low */
- {6, 32, 75}, /* high */
- {6, 0, 0} /* OOB */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_B = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_B), jbig2_huffman_lines_B };
-
-/* Table B.3 */
-const Jbig2HuffmanLine jbig2_huffman_lines_C[] = {
- {8, 8, -256},
- {1, 0, 0},
- {2, 0, 1},
- {3, 0, 2},
- {4, 3, 3},
- {5, 6, 11},
- {8, 32, -257}, /* low */
- {7, 32, 75}, /* high */
- {6, 0, 0} /* OOB */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_C = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_C), jbig2_huffman_lines_C };
-
-/* Table B.4 */
-const Jbig2HuffmanLine jbig2_huffman_lines_D[] = {
- {1, 0, 1},
- {2, 0, 2},
- {3, 0, 3},
- {4, 3, 4},
- {5, 6, 12},
- {0, 32, -1}, /* low */
- {5, 32, 76}, /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_D = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_D), jbig2_huffman_lines_D };
-
-/* Table B.5 */
-const Jbig2HuffmanLine jbig2_huffman_lines_E[] = {
- {7, 8, -255},
- {1, 0, 1},
- {2, 0, 2},
- {3, 0, 3},
- {4, 3, 4},
- {5, 6, 12},
- {7, 32, -256}, /* low */
- {6, 32, 76} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_E = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_E), jbig2_huffman_lines_E };
-
-/* Table B.6 */
-const Jbig2HuffmanLine jbig2_huffman_lines_F[] = {
- {5, 10, -2048},
- {4, 9, -1024},
- {4, 8, -512},
- {4, 7, -256},
- {5, 6, -128},
- {5, 5, -64},
- {4, 5, -32},
- {2, 7, 0},
- {3, 7, 128},
- {3, 8, 256},
- {4, 9, 512},
- {4, 10, 1024},
- {6, 32, -2049}, /* low */
- {6, 32, 2048} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_F = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_F), jbig2_huffman_lines_F };
-
-/* Table B.7 */
-const Jbig2HuffmanLine jbig2_huffman_lines_G[] = {
- {4, 9, -1024},
- {3, 8, -512},
- {4, 7, -256},
- {5, 6, -128},
- {5, 5, -64},
- {4, 5, -32},
- {4, 5, 0},
- {5, 5, 32},
- {5, 6, 64},
- {4, 7, 128},
- {3, 8, 256},
- {3, 9, 512},
- {3, 10, 1024},
- {5, 32, -1025}, /* low */
- {5, 32, 2048} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_G = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_G), jbig2_huffman_lines_G };
-
-/* Table B.8 */
-const Jbig2HuffmanLine jbig2_huffman_lines_H[] = {
- {8, 3, -15},
- {9, 1, -7},
- {8, 1, -5},
- {9, 0, -3},
- {7, 0, -2},
- {4, 0, -1},
- {2, 1, 0},
- {5, 0, 2},
- {6, 0, 3},
- {3, 4, 4},
- {6, 1, 20},
- {4, 4, 22},
- {4, 5, 38},
- {5, 6, 70},
- {5, 7, 134},
- {6, 7, 262},
- {7, 8, 390},
- {6, 10, 646},
- {9, 32, -16}, /* low */
- {9, 32, 1670}, /* high */
- {2, 0, 0} /* OOB */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_H = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_H), jbig2_huffman_lines_H };
-
-/* Table B.9 */
-const Jbig2HuffmanLine jbig2_huffman_lines_I[] = {
- {8, 4, -31},
- {9, 2, -15},
- {8, 2, -11},
- {9, 1, -7},
- {7, 1, -5},
- {4, 1, -3},
- {3, 1, -1},
- {3, 1, 1},
- {5, 1, 3},
- {6, 1, 5},
- {3, 5, 7},
- {6, 2, 39},
- {4, 5, 43},
- {4, 6, 75},
- {5, 7, 139},
- {5, 8, 267},
- {6, 8, 523},
- {7, 9, 779},
- {6, 11, 1291},
- {9, 32, -32}, /* low */
- {9, 32, 3339}, /* high */
- {2, 0, 0} /* OOB */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_I = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_I), jbig2_huffman_lines_I };
-
-/* Table B.10 */
-const Jbig2HuffmanLine jbig2_huffman_lines_J[] = {
- {7, 4, -21},
- {8, 0, -5},
- {7, 0, -4},
- {5, 0, -3},
- {2, 2, -2},
- {5, 0, 2},
- {6, 0, 3},
- {7, 0, 4},
- {8, 0, 5},
- {2, 6, 6},
- {5, 5, 70},
- {6, 5, 102},
- {6, 6, 134},
- {6, 7, 198},
- {6, 8, 326},
- {6, 9, 582},
- {6, 10, 1094},
- {7, 11, 2118},
- {8, 32, -22}, /* low */
- {8, 32, 4166}, /* high */
- {2, 0, 0} /* OOB */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_J = { TRUE, JBIG2_COUNTOF(jbig2_huffman_lines_J), jbig2_huffman_lines_J };
-
-/* Table B.11 */
-const Jbig2HuffmanLine jbig2_huffman_lines_K[] = {
- {1, 0, 1},
- {2, 1, 2},
- {4, 0, 4},
- {4, 1, 5},
- {5, 1, 7},
- {5, 2, 9},
- {6, 2, 13},
- {7, 2, 17},
- {7, 3, 21},
- {7, 4, 29},
- {7, 5, 45},
- {7, 6, 77},
- {0, 32, -1}, /* low */
- {7, 32, 141} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_K = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_K), jbig2_huffman_lines_K };
-
-/* Table B.12 */
-const Jbig2HuffmanLine jbig2_huffman_lines_L[] = {
- {1, 0, 1},
- {2, 0, 2},
- {3, 1, 3},
- {5, 0, 5},
- {5, 1, 6},
- {6, 1, 8},
- {7, 0, 10},
- {7, 1, 11},
- {7, 2, 13},
- {7, 3, 17},
- {7, 4, 25},
- {8, 5, 41},
- {8, 32, 73},
- {0, 32, -1}, /* low */
- {0, 32, 0} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_L = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_L), jbig2_huffman_lines_L };
-
-/* Table B.13 */
-const Jbig2HuffmanLine jbig2_huffman_lines_M[] = {
- {1, 0, 1},
- {3, 0, 2},
- {4, 0, 3},
- {5, 0, 4},
- {4, 1, 5},
- {3, 3, 7},
- {6, 1, 15},
- {6, 2, 17},
- {6, 3, 21},
- {6, 4, 29},
- {6, 5, 45},
- {7, 6, 77},
- {0, 32, -1}, /* low */
- {7, 32, 141} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_M = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_M), jbig2_huffman_lines_M };
-
-/* Table B.14 */
-const Jbig2HuffmanLine jbig2_huffman_lines_N[] = {
- {3, 0, -2},
- {3, 0, -1},
- {1, 0, 0},
- {3, 0, 1},
- {3, 0, 2},
- {0, 32, -1}, /* low */
- {0, 32, 3}, /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_N = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_N), jbig2_huffman_lines_N };
-
-/* Table B.15 */
-const Jbig2HuffmanLine jbig2_huffman_lines_O[] = {
- {7, 4, -24},
- {6, 2, -8},
- {5, 1, -4},
- {4, 0, -2},
- {3, 0, -1},
- {1, 0, 0},
- {3, 0, 1},
- {4, 0, 2},
- {5, 1, 3},
- {6, 2, 5},
- {7, 4, 9},
- {7, 32, -25}, /* low */
- {7, 32, 25} /* high */
-};
-
-const Jbig2HuffmanParams jbig2_huffman_params_O = { FALSE, JBIG2_COUNTOF(jbig2_huffman_lines_O), jbig2_huffman_lines_O };
-
-#undef JBIG2_COUNTOF
+extern const Jbig2HuffmanParams jbig2_huffman_params_A;
+extern const Jbig2HuffmanParams jbig2_huffman_params_B;
+extern const Jbig2HuffmanParams jbig2_huffman_params_C;
+extern const Jbig2HuffmanParams jbig2_huffman_params_D;
+extern const Jbig2HuffmanParams jbig2_huffman_params_E;
+extern const Jbig2HuffmanParams jbig2_huffman_params_F;
+extern const Jbig2HuffmanParams jbig2_huffman_params_G;
+extern const Jbig2HuffmanParams jbig2_huffman_params_H;
+extern const Jbig2HuffmanParams jbig2_huffman_params_I;
+extern const Jbig2HuffmanParams jbig2_huffman_params_J;
+extern const Jbig2HuffmanParams jbig2_huffman_params_K;
+extern const Jbig2HuffmanParams jbig2_huffman_params_L;
+extern const Jbig2HuffmanParams jbig2_huffman_params_M;
+extern const Jbig2HuffmanParams jbig2_huffman_params_N;
+extern const Jbig2HuffmanParams jbig2_huffman_params_O;
#endif /* _JBIG2_HUFFTAB_H */
diff --git a/jbig2dec/jbig2_image.c b/jbig2dec/jbig2_image.c
index 05a81bd7..70c985a9 100644
--- a/jbig2dec/jbig2_image.c
+++ b/jbig2dec/jbig2_image.c
@@ -33,6 +33,9 @@
#if !defined (INT32_MAX)
#define INT32_MAX 0x7fffffff
#endif
+#if !defined (UINT32_MAX)
+#define UINT32_MAX 0xffffffffu
+#endif
/* allocate a Jbig2Image structure and its associated bitmap */
Jbig2Image *
@@ -164,137 +167,232 @@ jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, uint32_t width, uint32_t he
return image;
}
-/* composite one jbig2_image onto another
- slow but general version */
-static int
-jbig2_image_compose_unopt(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y, Jbig2ComposeOp op)
+static inline void
+template_image_compose_opt(const uint8_t * JBIG2_RESTRICT ss, uint8_t * JBIG2_RESTRICT dd, int early, int late, uint8_t leftmask, uint8_t rightmask, uint32_t bytewidth_, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride, Jbig2ComposeOp op)
{
- uint32_t i, j;
- uint32_t sw = src->width;
- uint32_t sh = src->height;
- uint32_t sx = 0;
- uint32_t sy = 0;
-
- /* clip to the dst image boundaries */
- if (x < 0) {
- sx += -x;
- if (sw < (uint32_t) -x)
- sw = 0;
- else
- sw -= -x;
- x = 0;
- }
- if (y < 0) {
- sy += -y;
- if (sh < (uint32_t) -y)
- sh = 0;
- else
- sh -= -y;
- y = 0;
- }
- if ((uint32_t) x + sw >= dst->width) {
- if (dst->width >= (uint32_t) x)
- sw = dst->width - x;
- else
- sw = 0;
- }
- if ((uint32_t) y + sh >= dst->height) {
- if (dst->height >= (uint32_t) y)
- sh = dst->height - y;
- else
- sh = 0;
- }
+ int i;
+ uint32_t j;
+ int bytewidth = (int)bytewidth_;
- switch (op) {
- case JBIG2_COMPOSE_OR:
- for (j = 0; j < sh; j++) {
- for (i = 0; i < sw; i++) {
- jbig2_image_set_pixel(dst, i + x, j + y, jbig2_image_get_pixel(src, i + sx, j + sy) | jbig2_image_get_pixel(dst, i + x, j + y));
- }
- }
- break;
- case JBIG2_COMPOSE_AND:
- for (j = 0; j < sh; j++) {
- for (i = 0; i < sw; i++) {
- jbig2_image_set_pixel(dst, i + x, j + y, jbig2_image_get_pixel(src, i + sx, j + sy) & jbig2_image_get_pixel(dst, i + x, j + y));
- }
- }
- break;
- case JBIG2_COMPOSE_XOR:
- for (j = 0; j < sh; j++) {
- for (i = 0; i < sw; i++) {
- jbig2_image_set_pixel(dst, i + x, j + y, jbig2_image_get_pixel(src, i + sx, j + sy) ^ jbig2_image_get_pixel(dst, i + x, j + y));
- }
+ if (bytewidth == 1) {
+ for (j = 0; j < h; j++) {
+ /* Only 1 byte! */
+ uint8_t v = (((early ? 0 : ss[0]<<8) | (late ? 0 : ss[1]))>>shift);
+ if (op == JBIG2_COMPOSE_OR)
+ *dd |= v & leftmask;
+ else if (op == JBIG2_COMPOSE_AND)
+ *dd &= (v & leftmask) | ~leftmask;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *dd ^= v & leftmask;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *dd ^= (~v) & leftmask;
+ else /* Replace */
+ *dd = (v & leftmask) | (*dd & ~leftmask);
+ dd += dstride;
+ ss += sstride;
}
- break;
- case JBIG2_COMPOSE_XNOR:
- for (j = 0; j < sh; j++) {
- for (i = 0; i < sw; i++) {
- jbig2_image_set_pixel(dst, i + x, j + y, (jbig2_image_get_pixel(src, i + sx, j + sy) == jbig2_image_get_pixel(dst, i + x, j + y)));
+ return;
+ }
+ bytewidth -= 2;
+ if (shift == 0) {
+ ss++;
+ for (j = 0; j < h; j++) {
+ /* Left byte */
+ const uint8_t * JBIG2_RESTRICT s = ss;
+ uint8_t * JBIG2_RESTRICT d = dd;
+ if (op == JBIG2_COMPOSE_OR)
+ *d++ |= *s++ & leftmask;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d++ &= (*s++ & leftmask) | ~leftmask;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d++ ^= *s++ & leftmask;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d++ ^= (~*s++) & leftmask;
+ else /* Replace */
+ *d = (*s++ & leftmask) | (*d & ~leftmask), d++;
+ /* Central run */
+ for (i = bytewidth; i != 0; i--) {
+ if (op == JBIG2_COMPOSE_OR)
+ *d++ |= *s++;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d++ &= *s++;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d++ ^= *s++;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d++ ^= ~*s++;
+ else /* Replace */
+ *d++ = *s++;
}
+ /* Right byte */
+ if (op == JBIG2_COMPOSE_OR)
+ *d |= *s & rightmask;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d &= (*s & rightmask) | ~rightmask;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d ^= *s & rightmask;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d ^= (~*s) & rightmask;
+ else /* Replace */
+ *d = (*s & rightmask) | (*d & ~rightmask);
+ dd += dstride;
+ ss += sstride;
}
- break;
- case JBIG2_COMPOSE_REPLACE:
- for (j = 0; j < sh; j++) {
- for (i = 0; i < sw; i++) {
- jbig2_image_set_pixel(dst, i + x, j + y, jbig2_image_get_pixel(src, i + sx, j + sy));
+ } else {
+ for (j = 0; j < h; j++) {
+ /* Left byte */
+ const uint8_t * JBIG2_RESTRICT s = ss;
+ uint8_t * JBIG2_RESTRICT d = dd;
+ uint8_t s0, s1, v;
+ s0 = early ? 0 : *s;
+ s++;
+ s1 = *s++;
+ v = ((s0<<8) | s1)>>shift;
+ if (op == JBIG2_COMPOSE_OR)
+ *d++ |= v & leftmask;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d++ &= (v & leftmask) | ~leftmask;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d++ ^= v & leftmask;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d++ ^= (~v) & leftmask;
+ else /* Replace */
+ *d = (v & leftmask) | (*d & ~leftmask), d++;
+ /* Central run */
+ for (i = bytewidth; i > 0; i--) {
+ s0 = s1; s1 = *s++;
+ v = ((s0<<8) | s1)>>shift;
+ if (op == JBIG2_COMPOSE_OR)
+ *d++ |= v;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d++ &= v;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d++ ^= v;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d++ ^= ~v;
+ else /* Replace */
+ *d++ = v;
}
+ /* Right byte */
+ s0 = s1; s1 = (late ? 0 : *s);
+ v = (((s0<<8) | s1)>>shift);
+ if (op == JBIG2_COMPOSE_OR)
+ *d |= v & rightmask;
+ else if (op == JBIG2_COMPOSE_AND)
+ *d &= (v & rightmask) | ~rightmask;
+ else if (op == JBIG2_COMPOSE_XOR)
+ *d ^= v & rightmask;
+ else if (op == JBIG2_COMPOSE_XNOR)
+ *d ^= ~v & rightmask;
+ else /* Replace */
+ *d = (v & rightmask) | (*d & ~rightmask);
+ dd += dstride;
+ ss += sstride;
}
- break;
}
+}
- return 0;
+static void
+jbig2_image_compose_opt_OR(const uint8_t *s, uint8_t *d, int early, int late, uint8_t mask, uint8_t rightmask, uint32_t bytewidth, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride)
+{
+ if (early || late)
+ template_image_compose_opt(s, d, early, late, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_OR);
+ else
+ template_image_compose_opt(s, d, 0, 0, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_OR);
+}
+
+static void
+jbig2_image_compose_opt_AND(const uint8_t *s, uint8_t *d, int early, int late, uint8_t mask, uint8_t rightmask, uint32_t bytewidth, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride)
+{
+ if (early || late)
+ template_image_compose_opt(s, d, early, late, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_AND);
+ else
+ template_image_compose_opt(s, d, 0, 0, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_AND);
+}
+
+static void
+jbig2_image_compose_opt_XOR(const uint8_t *s, uint8_t *d, int early, int late, uint8_t mask, uint8_t rightmask, uint32_t bytewidth, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride)
+{
+ if (early || late)
+ template_image_compose_opt(s, d, early, late, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_XOR);
+ else
+ template_image_compose_opt(s, d, 0, 0, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_XOR);
+}
+
+static void
+jbig2_image_compose_opt_XNOR(const uint8_t *s, uint8_t *d, int early, int late, uint8_t mask, uint8_t rightmask, uint32_t bytewidth, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride)
+{
+ if (early || late)
+ template_image_compose_opt(s, d, early, late, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_XNOR);
+ else
+ template_image_compose_opt(s, d, 0, 0, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_XNOR);
+}
+
+static void
+jbig2_image_compose_opt_REPLACE(const uint8_t *s, uint8_t *d, int early, int late, uint8_t mask, uint8_t rightmask, uint32_t bytewidth, uint32_t h, uint32_t shift, uint32_t dstride, uint32_t sstride)
+{
+ if (early || late)
+ template_image_compose_opt(s, d, early, late, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_REPLACE);
+ else
+ template_image_compose_opt(s, d, 0, 0, mask, rightmask, bytewidth, h, shift, dstride, sstride, JBIG2_COMPOSE_REPLACE);
}
/* composite one jbig2_image onto another */
int
jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y, Jbig2ComposeOp op)
{
- uint32_t i, j;
uint32_t w, h;
- uint32_t leftbyte, rightbyte;
uint32_t shift;
- uint8_t *s, *ss;
- uint8_t *d, *dd;
- uint8_t mask, rightmask;
+ uint32_t leftbyte;
+ uint8_t *ss;
+ uint8_t *dd;
+ uint8_t leftmask, rightmask;
+ int early = x >= 0;
+ int late;
+ uint32_t bytewidth;
+ uint32_t syoffset = 0;
if (src == NULL)
return 0;
- /* The optimized code for the OR operator below doesn't
- handle the source image partially placed outside the
- destination (above and/or to the left). The affected
- intersection of the destination is computed correctly,
- however the correct subset of the source image is not
- chosen. Instead the upper left corner of the source image
- is always used.
-
- In the unoptimized version that handles all operators
- (including OR) the correct subset of the source image is
- chosen.
-
- The workaround is to check whether the x/y coordinates to
- the composition operator are negative and in this case use
- the unoptimized implementation.
-
- TODO: Fix the optimized OR implementation if possible. */
- if (op != JBIG2_COMPOSE_OR || x < 0 || y < 0) {
- /* hand off the the general routine */
- return jbig2_image_compose_unopt(ctx, dst, src, x, y, op);
+ if ((UINT32_MAX - src->width < (x > 0 ? x : -x)) ||
+ (UINT32_MAX - src->height < (y > 0 ? y : -y)))
+ {
+#ifdef JBIG2_DEBUG
+ jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "overflow in compose_image");
+#endif
+ return 0;
}
- /* optimized code for the prevalent OR operator */
+ /* This code takes a src image and combines it onto dst at offset (x,y), with operation op. */
+
+ /* Data is packed msb first within a byte, so with bits numbered: 01234567.
+ * Second byte is: 89abcdef. So to combine into a run, we use:
+ * (s[0]<<8) | s[1] == 0123456789abcdef.
+ * To read from src into dst at offset 3, we need to read:
+ * read: 0123456789abcdef...
+ * write: 0123456798abcdef...
+ * In general, to read from src and write into dst at offset x, we need to shift
+ * down by (x&7) bits to allow for bit alignment. So shift = x&7.
+ * So the 'central' part of our runs will see us doing:
+ * *d++ op= ((s[0]<<8)|s[1])>>shift;
+ * with special cases on the left and right edges of the run to mask.
+ * With the left hand edge, we have to be careful not to 'underread' the start of
+ * the src image; this is what the early flag is about. Similarly we have to be
+ * careful not to read off the right hand edge; this is what the late flag is for.
+ */
/* clip */
w = src->width;
h = src->height;
- ss = src->data;
+ shift = (x & 7);
+ ss = src->data - early;
if (x < 0) {
if (w < (uint32_t) -x)
w = 0;
else
w += x;
+ ss += (-x-1)>>3;
x = 0;
}
if (y < 0) {
@@ -302,10 +400,23 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
h = 0;
else
h += y;
+ syoffset = -y * src->stride;
y = 0;
}
- w = ((uint32_t) x + w < dst->width) ? w : ((dst->width >= (uint32_t) x) ? dst->width - (uint32_t) x : 0);
- h = ((uint32_t) y + h < dst->height) ? h : ((dst->height >= (uint32_t) y) ? dst->height - (uint32_t) y : 0);
+ if ((uint32_t)x + w > dst->width)
+ {
+ if (dst->width < (uint32_t)x)
+ w = 0;
+ else
+ w = dst->width - x;
+ }
+ if ((uint32_t)y + h > dst->height)
+ {
+ if (dst->height < (uint32_t)y)
+ h = 0;
+ else
+ h = dst->height - y;
+ }
#ifdef JBIG2_DEBUG
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "compositing %dx%d at (%d, %d) after clipping", w, h, x, y);
#endif
@@ -319,55 +430,32 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
}
leftbyte = (uint32_t) x >> 3;
- rightbyte = ((uint32_t) x + w - 1) >> 3;
- shift = x & 7;
-
- /* general OR case */
- s = ss;
- d = dd = dst->data + y * dst->stride + leftbyte;
- if (d < dst->data ||
- leftbyte > dst->stride ||
- d - leftbyte + (size_t) h * dst->stride > dst->data + (size_t) dst->height * dst->stride ||
- s - leftbyte + (size_t) (h - 1) * src->stride + rightbyte > src->data + (size_t) src->height * src->stride) {
- return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "preventing heap overflow in jbig2_image_compose");
- }
- if (leftbyte == rightbyte) {
- mask = 0x100 - (0x100 >> w);
- for (j = 0; j < h; j++) {
- *d |= (*s & mask) >> shift;
- d += dst->stride;
- s += src->stride;
- }
- } else if (shift == 0) {
- rightmask = (w & 7) ? 0x100 - (1 << (8 - (w & 7))) : 0xFF;
- for (j = 0; j < h; j++) {
- for (i = leftbyte; i < rightbyte; i++)
- *d++ |= *s++;
- *d |= *s & rightmask;
- d = (dd += dst->stride);
- s = (ss += src->stride);
- }
- } else {
- bool overlap = (((w + 7) >> 3) < ((x + w + 7) >> 3) - (x >> 3));
-
- mask = 0x100 - (1 << shift);
- if (overlap)
- rightmask = (0x100 - (0x100 >> ((x + w) & 7))) >> (8 - shift);
- else
- rightmask = 0x100 - (0x100 >> (w & 7));
- for (j = 0; j < h; j++) {
- *d++ |= (*s & mask) >> shift;
- for (i = leftbyte; i < rightbyte - 1; i++) {
- *d |= ((*s++ & ~mask) << (8 - shift));
- *d++ |= ((*s & mask) >> shift);
- }
- if (overlap)
- *d |= (*s & rightmask) << (8 - shift);
- else
- *d |= ((s[0] & ~mask) << (8 - shift)) | ((s[1] & rightmask) >> shift);
- d = (dd += dst->stride);
- s = (ss += src->stride);
- }
+ dd = dst->data + y * dst->stride + leftbyte;
+ bytewidth = (((uint32_t) x + w - 1) >> 3) - leftbyte + 1;
+ leftmask = 255>>(x&7);
+ rightmask = (((x+w)&7) == 0) ? 255 : ~(255>>((x+w)&7));
+ if (bytewidth == 1)
+ leftmask &= rightmask;
+ late = (ss + bytewidth >= src->data + ((src->width+7)>>3));
+ ss += syoffset;
+
+ switch(op)
+ {
+ case JBIG2_COMPOSE_OR:
+ jbig2_image_compose_opt_OR(ss, dd, early, late, leftmask, rightmask, bytewidth, h, shift, dst->stride, src->stride);
+ break;
+ case JBIG2_COMPOSE_AND:
+ jbig2_image_compose_opt_AND(ss, dd, early, late, leftmask, rightmask, bytewidth, h, shift, dst->stride, src->stride);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ jbig2_image_compose_opt_XOR(ss, dd, early, late, leftmask, rightmask, bytewidth, h, shift, dst->stride, src->stride);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ jbig2_image_compose_opt_XNOR(ss, dd, early, late, leftmask, rightmask, bytewidth, h, shift, dst->stride, src->stride);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ jbig2_image_compose_opt_REPLACE(ss, dd, early, late, leftmask, rightmask, bytewidth, h, shift, dst->stride, src->stride);
+ break;
}
return 0;
diff --git a/jbig2dec/jbig2_mmr.c b/jbig2dec/jbig2_mmr.c
index c3229df7..dcb36753 100644
--- a/jbig2dec/jbig2_mmr.c
+++ b/jbig2dec/jbig2_mmr.c
@@ -27,6 +27,7 @@
#endif
#include "os_types.h"
+#include <assert.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
@@ -745,7 +746,10 @@ const mmr_table_node jbig2_mmr_black_decode[] = {
static uint32_t
jbig2_find_changing_element(const byte *line, uint32_t x, uint32_t w)
{
- int a, b;
+ int a;
+ uint8_t all8;
+ uint16_t all16;
+ uint32_t all32;
if (line == NULL)
return w;
@@ -760,13 +764,128 @@ jbig2_find_changing_element(const byte *line, uint32_t x, uint32_t w)
return x;
}
- while (x < w) {
- b = getbit(line, x);
- if (a != b)
- break;
- x++;
+ /* We will be looking for a uint8 or uint16 or uint32 that has at least one
+ bit different from <a>, so prepare some useful values for comparison. */
+ all8 = (a) ? 0xff : 0;
+ all16 = (a) ? 0xffff : 0;
+ all32 = (a) ? 0xffffffff : 0;
+
+ /* Check individual bits up to next 8-bit boundary.
+
+ [Would it be worth looking at top 4 bits, then at 2 bits then at 1 bit,
+ instead of iterating over all 8 bits? */
+
+ if ( ((uint8_t*) line)[ x / 8] == all8) {
+ /* Don't bother checking individual bits if the enclosing uint8 equals
+ all8 - just move to the next byte. */
+ x = x / 8 * 8 + 8;
+ if (x >= w) {
+ x = w;
+ goto end;
+ }
+ } else {
+ for(;;) {
+ if (x == w) {
+ goto end;
+ }
+ if (x % 8 == 0) {
+ break;
+ }
+ if (getbit(line, x) != a) {
+ goto end;
+ }
+ x += 1;
+ }
+ }
+
+ assert(x % 8 == 0);
+ /* Check next uint8 if we are not on 16-bit boundary. */
+ if (x % 16) {
+ if (w - x < 8) {
+ goto check1;
+ }
+ if ( ((uint8_t*) line)[ x / 8] != all8) {
+ goto check1;
+ }
+ x += 8; /* This will make x a multiple of 16. */
+ }
+
+ assert(x % 16 == 0);
+ /* Check next uint16 if we are not on 32-bit boundary. */
+ if (x % 32) {
+ if (w - x < 16) {
+ goto check8;
+ }
+ if ( ((uint16_t*) line)[ x / 16] != all16) {
+ goto check8_no_eof;
+ }
+ x += 16; /* This will make x a multiple of 32. */
+ }
+
+ /* We are now on a 32-bit boundary. Check uint32's until we reach last
+ sub-32-bit region. */
+ assert(x % 32 == 0);
+ for(;;) {
+ if (w - x < 32) {
+ /* We could still look at the uint32 here - if it equals all32, we
+ know there is no match before <w> so could do {x = w; goto end;}.
+
+ But for now we simply fall into the epilogue checking, which will
+ look at the next uint16, then uint8, then last 8 bits. */
+ goto check16;
+ }
+ if (((uint32_t*) line)[x/32] != all32) {
+ goto check16_no_eof;
+ }
+ x += 32;
+ }
+
+ /* Check next uint16. */
+check16:
+ assert(x % 16 == 0);
+ if (w - x < 16) {
+ goto check8;
+ }
+check16_no_eof:
+ assert(w - x >= 16);
+ if ( ((uint16_t*) line)[x/16] != all16) {
+ goto check8_no_eof;
+ }
+ x += 16;
+
+ /* Check next uint8. */
+check8:
+ assert(x % 8 == 0);
+ if (w - x < 8) {
+ goto check1;
+ }
+check8_no_eof:
+ assert(w - x >= 8);
+ if ( ((uint8_t*) line)[x/8] != all8) {
+ goto check1;
+ }
+ x += 8;
+
+ /* Check up to the next 8 bits. */
+check1:
+ assert(x % 8 == 0);
+ if ( ((uint8_t*) line)[ x / 8] == all8) {
+ x = w;
+ goto end;
+ }
+ {
+ for(;;) {
+ if (x == w) {
+ goto end;
+ }
+ if (getbit(line, x) != a) {
+ goto end;
+ }
+ x += 1;
+ }
}
+end:
return x;
}
diff --git a/jbig2dec/jbig2_page.c b/jbig2dec/jbig2_page.c
index c07842b7..47445597 100644
--- a/jbig2dec/jbig2_page.c
+++ b/jbig2dec/jbig2_page.c
@@ -34,6 +34,13 @@
#include "jbig2_page.h"
#include "jbig2_segment.h"
+#if !defined (INT32_MAX)
+#define INT32_MAX 0x7fffffff
+#endif
+#if !defined (UINT32_MAX)
+#define UINT32_MAX 0xffffffff
+#endif
+
/* dump the page struct info */
static void
dump_page_info(Jbig2Ctx *ctx, Jbig2Segment *segment, Jbig2Page *page)
@@ -262,13 +269,21 @@ jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, uint32_
{
int code;
+ if (x > INT32_MAX || y > INT32_MAX)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "unsupported image coordinates");
+
/* ensure image exists first */
if (page->image == NULL)
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, "page info possibly missing, no image defined");
/* grow the page to accommodate a new stripe if necessary */
if (page->striped && page->height == 0xFFFFFFFF) {
- uint32_t new_height = y + image->height;
+ uint32_t new_height;
+
+ if (y > UINT32_MAX - image->height)
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "adding image at coordinate would grow page out of bounds");
+ new_height = y + image->height;
+
if (page->image->height < new_height) {
Jbig2Image *resized_image = NULL;
diff --git a/jbig2dec/jbig2_priv.h b/jbig2dec/jbig2_priv.h
index 0fee2b99..cf117e6c 100644
--- a/jbig2dec/jbig2_priv.h
+++ b/jbig2dec/jbig2_priv.h
@@ -20,9 +20,8 @@
#ifndef _JBIG2_PRIV_H
#define _JBIG2_PRIV_H
-/* To enable Memento, either uncomment the following, or arrange to
- * predefine MEMENTO whilst building. */
-/* #define MEMENTO */
+/* To enable Memento predefine MEMENTO while building by setting
+ CFLAGS=-DMEMENTO. */
/* If we are being compiled as part of a larger project that includes
* Memento, that project should define JBIG_EXTERNAL_MEMENTO_H to point
@@ -116,7 +115,11 @@ void *jbig2_realloc(Jbig2Allocator *allocator, void *p, size_t size, size_t num)
#define jbig2_renew(ctx, p, t, size) ((t *)jbig2_realloc(ctx->allocator, (p), size, sizeof(t)))
-int jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, const char *fmt, ...);
+int jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, const char *fmt, ...)
+#ifdef __GNUC__
+ __attribute__ ((format (__printf__, 4, 5)))
+#endif
+ ;
/* The word stream design is a compromise between simplicity and
trying to amortize the number of method calls. Each ::get_next_word
@@ -133,4 +136,15 @@ Jbig2WordStream *jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size
void jbig2_word_stream_buf_free(Jbig2Ctx *ctx, Jbig2WordStream *ws);
+/* restrict is standard in C99, but not in all C++ compilers. */
+#if defined (__STDC_VERSION_) && (__STDC_VERSION__ >= 199901L) /* C99 */
+#define JBIG2_RESTRICT restrict
+#elif defined(_MSC_VER) && (_MSC_VER >= 1600) /* MSVC 10 or newer */
+#define JBIG2_RESTRICT __restrict
+#elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC 3 or newer */
+#define JBIG2_RESTRICT __restrict
+#else /* Unknown or ancient */
+#define JBIG2_RESTRICT
+#endif
+
#endif /* _JBIG2_PRIV_H */
diff --git a/jbig2dec/jbig2_refinement.c b/jbig2dec/jbig2_refinement.c
index 2c3ba29e..7c391b03 100644
--- a/jbig2dec/jbig2_refinement.c
+++ b/jbig2dec/jbig2_refinement.c
@@ -57,8 +57,7 @@ jbig2_decode_refinement_template0_unopt(Jbig2Ctx *ctx,
const int dy = params->GRREFERENCEDY;
uint32_t CONTEXT;
int x, y;
- bool bit;
- int code = 0;
+ int bit;
if (pixel_outside_field(params->grat[0], params->grat[1]) ||
refpixel_outside_field(params->grat[2], params->grat[3]))
@@ -81,8 +80,8 @@ jbig2_decode_refinement_template0_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 1, y - dy - 1) << 10;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy - 1) << 11;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + params->grat[2], y - dy + params->grat[3]) << 12;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template0");
jbig2_image_set_pixel(image, x, y, bit);
}
@@ -120,8 +119,7 @@ jbig2_decode_refinement_template1_unopt(Jbig2Ctx *ctx,
const int dy = params->GRREFERENCEDY;
uint32_t CONTEXT;
int x, y;
- bool bit;
- int code = 0;
+ int bit;
for (y = 0; y < GRH; y++) {
for (x = 0; x < GRW; x++) {
@@ -136,8 +134,8 @@ jbig2_decode_refinement_template1_unopt(Jbig2Ctx *ctx,
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy + 0) << 7;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx - 1, y - dy + 0) << 8;
CONTEXT |= jbig2_image_get_pixel(ref, x - dx + 0, y - dy - 1) << 9;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template0");
jbig2_image_set_pixel(image, x, y, bit);
}
@@ -177,7 +175,6 @@ jbig2_decode_refinement_template1(Jbig2Ctx *ctx,
byte *grreg_line = (byte *) image->data;
byte *grref_line = (byte *) params->reference->data;
int x, y;
- int code = 0;
for (y = 0; y < GRH; y++) {
const int padded_width = (GRW + 7) & -8;
@@ -212,10 +209,10 @@ jbig2_decode_refinement_template1(Jbig2Ctx *ctx,
/* this is the speed critical inner-loop */
for (x_minor = 0; x_minor < minor_width; x_minor++) {
- bool bit;
+ int bit;
- bit = jbig2_arith_decode(as, &GR_stats[CONTEXT], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode arithmetic code when handling refinement template1");
result |= bit << (7 - x_minor);
CONTEXT = ((CONTEXT & 0x0d6) << 1) | bit |
@@ -308,10 +305,9 @@ jbig2_decode_refinement_TPGRON(Jbig2Ctx *ctx, const Jbig2RefinementRegionParams
{
const int GRW = image->width;
const int GRH = image->height;
- int x, y, iv, bit, LTP = 0;
+ int x, y, iv, LTP = 0;
uint32_t start_context = (params->GRTEMPLATE ? 0x40 : 0x100);
ContextBuilder mkctx = (params->GRTEMPLATE ? mkctx1 : mkctx0);
- int code = 0;
if (params->GRTEMPLATE == 0 &&
(pixel_outside_field(params->grat[0], params->grat[1]) ||
@@ -320,13 +316,14 @@ jbig2_decode_refinement_TPGRON(Jbig2Ctx *ctx, const Jbig2RefinementRegionParams
"adaptive template pixel is out of field");
for (y = 0; y < GRH; y++) {
- LTP ^= jbig2_arith_decode(as, &GR_stats[start_context], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GR_stats[start_context]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
+ LTP ^= bit;
if (!LTP) {
for (x = 0; x < GRW; x++) {
- bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)], &code);
- if (code)
+ bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
jbig2_image_set_pixel(image, x, y, bit);
}
@@ -334,8 +331,8 @@ jbig2_decode_refinement_TPGRON(Jbig2Ctx *ctx, const Jbig2RefinementRegionParams
for (x = 0; x < GRW; x++) {
iv = implicit_value(params, image, x, y);
if (iv < 0) {
- bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)], &code);
- if (code)
+ int bit = jbig2_arith_decode(as, &GR_stats[mkctx(params, image, x, y)]);
+ if (bit < 0)
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to decode arithmetic code when handling refinement TPGRON1");
jbig2_image_set_pixel(image, x, y, bit);
} else
diff --git a/jbig2dec/jbig2_segment.c b/jbig2dec/jbig2_segment.c
index 9c47f630..2b561969 100644
--- a/jbig2dec/jbig2_segment.c
+++ b/jbig2dec/jbig2_segment.c
@@ -87,7 +87,7 @@ jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t
referred_to_segment_size = result->number <= 256 ? 1 : result->number <= 65536 ? 2 : 4; /* 7.2.5 */
pa_size = result->flags & 0x40 ? 4 : 1; /* 7.2.6 */
if (offset + referred_to_segment_count * referred_to_segment_size + pa_size + 4 > buf_size) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, result->number, "insufficient data to parse segment header", -1);
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, result->number, "insufficient data to parse segment header");
jbig2_free(ctx->allocator, result);
return NULL;
}
@@ -334,7 +334,7 @@ int
jbig2_parse_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data)
{
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number,
- "segment %d, flags=%x, type=%d, data_length=%d", segment->number, segment->flags, segment->flags & 63, segment->data_length);
+ "segment %d, flags=%x, type=%d, data_length=%ld", segment->number, segment->flags, segment->flags & 63, (long) segment->data_length);
switch (segment->flags & 63) {
case 0:
return jbig2_symbol_dictionary(ctx, segment, segment_data);
diff --git a/jbig2dec/jbig2_symbol_dict.c b/jbig2dec/jbig2_symbol_dict.c
index 93ea09d5..7d0c3a1d 100644
--- a/jbig2dec/jbig2_symbol_dict.c
+++ b/jbig2dec/jbig2_symbol_dict.c
@@ -664,14 +664,14 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
/* SumatraPDF: prevent read access violation */
if (size < jbig2_huffman_offset(hs) || (size - jbig2_huffman_offset(hs) < (size_t) image->height * stride) || (size < jbig2_huffman_offset(hs))) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding uncompressed (%d/%d)", image->height * stride,
- size - jbig2_huffman_offset(hs));
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding uncompressed (%d/%li)", image->height * stride,
+ (long) (size - jbig2_huffman_offset(hs)));
goto cleanup;
}
BMSIZE = (size_t) image->height * stride;
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number,
- "reading %dx%d uncompressed bitmap for %d symbols (%d bytes)", image->width, image->height, NSYMSDECODED - HCFIRSTSYM, BMSIZE);
+ "reading %dx%d uncompressed bitmap for %d symbols (%li bytes)", image->width, image->height, NSYMSDECODED - HCFIRSTSYM, (long) BMSIZE);
for (j = 0; j < image->height; j++) {
memcpy(dst, src, stride);
@@ -683,12 +683,12 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
/* SumatraPDF: prevent read access violation */
if (size < jbig2_huffman_offset(hs) || size < BMSIZE || size - jbig2_huffman_offset(hs) < BMSIZE) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding (%d/%d)", BMSIZE, size - jbig2_huffman_offset(hs));
+ jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding (%li/%li)", (long) BMSIZE, (long) (size - jbig2_huffman_offset(hs)));
goto cleanup;
}
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number,
- "reading %dx%d collective bitmap for %d symbols (%d bytes)", image->width, image->height, NSYMSDECODED - HCFIRSTSYM, BMSIZE);
+ "reading %dx%d collective bitmap for %d symbols (%li bytes)", image->width, image->height, NSYMSDECODED - HCFIRSTSYM, (long) BMSIZE);
rparams.MMR = 1;
code = jbig2_decode_generic_mmr(ctx, segment, &rparams, data + jbig2_huffman_offset(hs), BMSIZE, image);
@@ -1034,7 +1034,7 @@ jbig2_symbol_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segmen
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to allocate arithmetic decoder states for generic regions");
goto cleanup;
}
- memset(GB_stats, 0, stats_size);
+ memset(GB_stats, 0, sizeof (Jbig2ArithCx) * stats_size);
stats_size = params.SDRTEMPLATE ? 1 << 10 : 1 << 13;
GR_stats = jbig2_new(ctx, Jbig2ArithCx, stats_size);
diff --git a/jbig2dec/jbig2_text.c b/jbig2dec/jbig2_text.c
index 7fb9eb08..57b31de0 100644
--- a/jbig2dec/jbig2_text.c
+++ b/jbig2dec/jbig2_text.c
@@ -221,9 +221,8 @@ cleanup1:
jbig2_release_huffman_table(ctx, runcodes);
if (SBSYMCODES == NULL) {
- code = jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to construct symbol ID huffman table");
jbig2_huffman_free(ctx, hs);
- return code;
+ return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "failed to construct symbol ID huffman table");
}
}
diff --git a/jbig2dec/jbig2dec.1 b/jbig2dec/jbig2dec.1
index 3933d381..01f960a5 100644
--- a/jbig2dec/jbig2dec.1
+++ b/jbig2dec/jbig2dec.1
@@ -1,4 +1,4 @@
-.TH jbig2dec 1 "2019 September 17" "Version 0.17" "jbig2dec Manual"
+.TH jbig2dec 1 "2020 February 11" "Version 0.18" "jbig2dec Manual"
.SH NAME
jbig2dec \- File format converter specialized in JBIG2 decoding
diff --git a/jbig2dec/jbig2dec.c b/jbig2dec/jbig2dec.c
index 5e3f5e5a..4f95589b 100644
--- a/jbig2dec/jbig2dec.c
+++ b/jbig2dec/jbig2dec.c
@@ -35,6 +35,12 @@
#include "os_types.h"
#include "sha1.h"
+#ifdef JBIG_EXTERNAL_MEMENTO_H
+#include JBIG_EXTERNAL_MEMENTO_H
+#else
+#include "memento.h"
+#endif
+
#include "jbig2.h"
#include "jbig2_priv.h"
#include "jbig2_image.h"
@@ -589,6 +595,8 @@ main(int argc, char **argv)
cleanup:
flush_errors(&params);
jbig2_ctx_free(ctx);
+ if (params.last_message)
+ free(params.last_message);
if (params.output_filename)
free(params.output_filename);
if (params.hash)
diff --git a/jbig2dec/memento.c b/jbig2dec/memento.c
index 8ebe0e57..ab48bfbb 100644
--- a/jbig2dec/memento.c
+++ b/jbig2dec/memento.c
@@ -45,10 +45,12 @@ int atexit(void (*)(void));
#ifndef _MSC_VER
#include <stdint.h>
#include <limits.h>
+#include <unistd.h>
#endif
#include <stdlib.h>
#include <stdarg.h>
+#include <string.h>
#ifdef __ANDROID__
#define MEMENTO_ANDROID
@@ -59,9 +61,11 @@ int atexit(void (*)(void));
#ifdef _MSC_VER
#define FMTZ "%llu"
#define FMTZ_CAST _int64
+#define FMTP "0x%p"
#else
#define FMTZ "%zu"
#define FMTZ_CAST size_t
+#define FMTP "%p"
#endif
#define UB(x) ((intptr_t)((x) & 0xFF))
@@ -251,7 +255,8 @@ enum {
Memento_Flag_BreakOnFree = 4,
Memento_Flag_BreakOnRealloc = 8,
Memento_Flag_Freed = 16,
- Memento_Flag_KnownLeak = 32
+ Memento_Flag_KnownLeak = 32,
+ Memento_Flag_Reported = 64
};
enum {
@@ -452,6 +457,7 @@ extern void backtrace_symbols_fd(void **, size_t, int);
extern char **backtrace_symbols(void **, size_t);
#define MEMENTO_BACKTRACE_MAX 256
+static void (*print_stack_value)(void *address);
/* Libbacktrace gubbins - relies on us having libdl to load the .so */
#ifdef HAVE_LIBDL
@@ -489,7 +495,6 @@ static backtrace_create_state_type backtrace_create_state;
static backtrace_pcinfo_type backtrace_pcinfo;
static struct backtrace_state *my_backtrace_state;
static void *libbt;
-static void (*print_stack_value)(void *address);
static char backtrace_exe[4096];
static void *current_addr;
@@ -535,7 +540,30 @@ static void print_stack_libbt(void *addr)
static void print_stack_libbt_failed(void *addr)
{
- char **strings = backtrace_symbols(&addr, 1);
+ char **strings;
+#if 0
+ /* Let's use a hack from Julian Smith to call gdb to extract the information */
+ /* Disabled for now, as I can't make this work. */
+ static char command[1024];
+ int e;
+ static int gdb_invocation_failed = 0;
+
+ if (gdb_invocation_failed == 0)
+ {
+ snprintf(command, sizeof(command),
+ //"gdb -q --batch -p=%i -ex 'info line *%p' -ex quit 2>/dev/null",
+ "gdb -q --batch -p=%i -ex 'info line *%p' -ex quit 2>/dev/null| egrep -v '(Thread debugging using)|(Using host libthread_db library)|(A debugging session is active)|(will be detached)|(Quit anyway)|(No such file or directory)|(^0x)|(^$)'",
+ getpid(), addr);
+ printf("%s\n", command);
+ e = system(command);
+ if (e == 0)
+ return; /* That'll do! */
+ gdb_invocation_failed = 1; /* If it's failed once, it'll probably keep failing. */
+ }
+#endif
+
+ /* We couldn't even get gdb! Make do. */
+ strings = backtrace_symbols(&addr, 1);
if (strings == NULL || strings[0] == NULL)
{
@@ -553,6 +581,12 @@ static void print_stack_libbt_failed(void *addr)
static int init_libbt(void)
{
+ static int libbt_inited = 0;
+
+ if (libbt_inited)
+ return 0;
+ libbt_inited = 1;
+
libbt = dlopen("libbacktrace.so", RTLD_LAZY);
if (libbt == NULL)
libbt = dlopen("/opt/lib/libbacktrace.so", RTLD_LAZY);
@@ -588,6 +622,9 @@ static int init_libbt(void)
return 1;
fail:
+ fprintf(stderr,
+ "MEMENTO: libbacktrace.so failed to load; backtraces will be sparse.\n"
+ "MEMENTO: See memento.h for how to rectify this.\n");
libbt = NULL;
backtrace_create_state = NULL;
backtrace_syminfo = NULL;
@@ -602,7 +639,7 @@ static void print_stack_default(void *addr)
if (strings == NULL || strings[0] == NULL)
{
- fprintf(stderr, " [0x%p]\n", addr);
+ fprintf(stderr, " ["FMTP"]\n", addr);
}
#ifdef HAVE_LIBDL
else if (strchr(strings[0], ':') == NULL)
@@ -614,7 +651,7 @@ static void print_stack_default(void *addr)
{
memcpy(backtrace_exe, strings[0], s - strings[0]);
backtrace_exe[s-strings[0]] = 0;
- if (init_libbt())
+ init_libbt();
print_stack_value(addr);
}
}
@@ -846,12 +883,12 @@ static void Memento_showStacktrace(void **stack, int numberOfFrames)
const char *sym = info.dli_sname ? info.dli_sname : "<unknown>";
char *demangled = __cxa_demangle(sym, NULL, 0, &status);
int offset = stack[i] - info.dli_saddr;
- fprintf(stderr, " [%p]%s(+0x%x)\n", stack[i], demangled && status == 0 ? demangled : sym, offset);
+ fprintf(stderr, " ["FMTP"]%s(+0x%x)\n", stack[i], demangled && status == 0 ? demangled : sym, offset);
free(demangled);
}
else
{
- fprintf(stderr, " [%p]\n", stack[i]);
+ fprintf(stderr, " ["FMTP"]\n", stack[i]);
}
}
}
@@ -1255,14 +1292,19 @@ static int Memento_appBlock(Memento_Blocks *blks,
}
#endif /* MEMENTO_LEAKONLY */
-static void showBlock(Memento_BlkHeader *b, int space)
+static int showBlock(Memento_BlkHeader *b, int space)
{
- fprintf(stderr, "0x%p:(size=" FMTZ ",num=%d)",
+ int seq;
+ VALGRIND_MAKE_MEM_DEFINED(b, sizeof(Memento_BlkHeader));
+ fprintf(stderr, FMTP":(size=" FMTZ ",num=%d)",
MEMBLK_TOBLK(b), (FMTZ_CAST)b->rawsize, b->sequence);
if (b->label)
fprintf(stderr, "%c(%s)", space, b->label);
if (b->flags & Memento_Flag_KnownLeak)
fprintf(stderr, "(Known Leak)");
+ seq = b->sequence;
+ VALGRIND_MAKE_MEM_NOACCESS(b, sizeof(Memento_BlkHeader));
+ return seq;
}
static void blockDisplay(Memento_BlkHeader *b, int n)
@@ -1291,7 +1333,9 @@ static int Memento_listBlock(Memento_BlkHeader *b,
size_t *counts = (size_t *)arg;
blockDisplay(b, 0);
counts[0]++;
+ VALGRIND_MAKE_MEM_DEFINED(b, sizeof(Memento_BlkHeader));
counts[1]+= b->rawsize;
+ VALGRIND_MAKE_MEM_NOACCESS(b, sizeof(Memento_BlkHeader));
return 0;
}
@@ -1300,15 +1344,19 @@ static void doNestedDisplay(Memento_BlkHeader *b,
{
/* Try and avoid recursion if we can help it */
do {
+ Memento_BlkHeader *c = NULL;
blockDisplay(b, depth);
+ VALGRIND_MAKE_MEM_DEFINED(b, sizeof(Memento_BlkHeader));
if (b->sibling) {
- if (b->child)
- doNestedDisplay(b->child, depth+1);
+ c = b->child;
b = b->sibling;
} else {
b = b->child;
depth++;
}
+ VALGRIND_MAKE_MEM_NOACCESS(b, sizeof(Memento_BlkHeader));
+ if (c)
+ doNestedDisplay(c, depth+1);
} while (b);
}
@@ -1494,7 +1542,7 @@ static int showInfo(Memento_BlkHeader *b, void *arg)
{
Memento_BlkDetails *details;
- fprintf(stderr, "0x%p:(size="FMTZ",num=%d)",
+ fprintf(stderr, FMTP":(size="FMTZ",num=%d)",
MEMBLK_TOBLK(b), (FMTZ_CAST)b->rawsize, b->sequence);
if (b->label)
fprintf(stderr, " (%s)", b->label);
@@ -1526,9 +1574,15 @@ static int Memento_nonLeakBlocksLeaked(void)
Memento_BlkHeader *blk = memento.used.head;
while (blk)
{
- if ((blk->flags & Memento_Flag_KnownLeak) == 0)
+ Memento_BlkHeader *next;
+ int leaked;
+ VALGRIND_MAKE_MEM_DEFINED(blk, sizeof(*blk));
+ leaked = ((blk->flags & Memento_Flag_KnownLeak) == 0);
+ next = blk->next;
+ VALGRIND_MAKE_MEM_DEFINED(blk, sizeof(*blk));
+ if (leaked)
return 1;
- blk = blk->next;
+ blk = next;
}
return 0;
}
@@ -1583,6 +1637,9 @@ static void Memento_init(void)
env = getenv("MEMENTO_FAILAT");
memento.failAt = (env ? atoi(env) : 0);
+ env = getenv("MEMENTO_BREAKAT");
+ memento.breakAt = (env ? atoi(env) : 0);
+
env = getenv("MEMENTO_PARANOIA");
memento.paranoia = (env ? atoi(env) : 0);
if (memento.paranoia == 0)
@@ -1804,6 +1861,7 @@ static void Memento_startFailing(void)
{
if (!memento.failing) {
fprintf(stderr, "Starting to fail...\n");
+ Memento_bt();
fflush(stderr);
memento.failing = 1;
memento.failAt = memento.sequence;
@@ -2347,7 +2405,11 @@ static int checkBlockUser(Memento_BlkHeader *memblk, const char *action)
}
fprintf(stderr, "Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
Memento_breakpointLocked();
+ }
return 1;
}
#endif
@@ -2394,7 +2456,11 @@ static int checkBlock(Memento_BlkHeader *memblk, const char *action)
}
fprintf(stderr, "Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
Memento_breakpointLocked();
+ }
return 1;
}
#endif
@@ -2585,6 +2651,11 @@ static int Memento_Internal_checkAllAlloced(Memento_BlkHeader *memblk, void *arg
data->preCorrupt = 0;
data->postCorrupt = 0;
data->freeCorrupt = 0;
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
}
else
memblk->lastCheckedOK = memento.sequence;
@@ -2604,7 +2675,7 @@ static int Memento_Internal_checkAllFreed(Memento_BlkHeader *memblk, void *arg)
fprintf(stderr, " ");
showBlock(memblk, ' ');
if (data->freeCorrupt) {
- fprintf(stderr, " index %d (address 0x%p) onwards", (int)data->index,
+ fprintf(stderr, " index %d (address "FMTP") onwards", (int)data->index,
&((char *)MEMBLK_TOBLK(memblk))[data->index]);
if (data->preCorrupt) {
fprintf(stderr, "+ preguard");
@@ -2621,9 +2692,16 @@ static int Memento_Internal_checkAllFreed(Memento_BlkHeader *memblk, void *arg)
(data->preCorrupt ? "+" : ""));
}
}
+ VALGRIND_MAKE_MEM_DEFINED(memblk, sizeof(Memento_BlkHeader));
fprintf(stderr, " corrupted.\n"
" Block last checked OK at allocation %d. Now %d.\n",
memblk->lastCheckedOK, memento.sequence);
+ if ((memblk->flags & Memento_Flag_Reported) == 0)
+ {
+ memblk->flags |= Memento_Flag_Reported;
+ Memento_breakpointLocked();
+ }
+ VALGRIND_MAKE_MEM_NOACCESS(memblk, sizeof(Memento_BlkHeader));
data->preCorrupt = 0;
data->postCorrupt = 0;
data->freeCorrupt = 0;
@@ -2702,6 +2780,7 @@ int Memento_check(void)
int Memento_find(void *a)
{
findBlkData data;
+ int s;
MEMENTO_LOCK();
data.addr = a;
@@ -2709,27 +2788,27 @@ int Memento_find(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Address 0x%p is in %sallocated block ",
+ fprintf(stderr, "Address "FMTP" is in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
- showBlock(data.blk, ' ');
+ s = showBlock(data.blk, ' ');
fprintf(stderr, "\n");
MEMENTO_UNLOCK();
- return data.blk->sequence;
+ return s;
}
data.blk = NULL;
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
- showBlock(data.blk, ' ');
+ s = showBlock(data.blk, ' ');
fprintf(stderr, "\n");
MEMENTO_UNLOCK();
- return data.blk->sequence;
+ return s;
}
MEMENTO_UNLOCK();
return 0;
@@ -2745,13 +2824,15 @@ void Memento_breakOnFree(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Will stop when address 0x%p (in %sallocated block ",
+ fprintf(stderr, "Will stop when address "FMTP" (in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
showBlock(data.blk, ' ');
fprintf(stderr, ") is freed\n");
+ VALGRIND_MAKE_MEM_DEFINED(data.blk, sizeof(Memento_BlkHeader));
data.blk->flags |= Memento_Flag_BreakOnFree;
+ VALGRIND_MAKE_MEM_NOACCESS(data.blk, sizeof(Memento_BlkHeader));
MEMENTO_UNLOCK();
return;
}
@@ -2759,7 +2840,7 @@ void Memento_breakOnFree(void *a)
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Can't stop on free; address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Can't stop on free; address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2768,7 +2849,7 @@ void Memento_breakOnFree(void *a)
MEMENTO_UNLOCK();
return;
}
- fprintf(stderr, "Can't stop on free; address 0x%p is not in a known block.\n", a);
+ fprintf(stderr, "Can't stop on free; address "FMTP" is not in a known block.\n", a);
MEMENTO_UNLOCK();
}
@@ -2782,13 +2863,15 @@ void Memento_breakOnRealloc(void *a)
data.flags = 0;
Memento_appBlocks(&memento.used, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Will stop when address 0x%p (in %sallocated block ",
+ fprintf(stderr, "Will stop when address "FMTP" (in %sallocated block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
showBlock(data.blk, ' ');
fprintf(stderr, ") is freed (or realloced)\n");
+ VALGRIND_MAKE_MEM_DEFINED(data.blk, sizeof(Memento_BlkHeader));
data.blk->flags |= Memento_Flag_BreakOnFree | Memento_Flag_BreakOnRealloc;
+ VALGRIND_MAKE_MEM_NOACCESS(data.blk, sizeof(Memento_BlkHeader));
MEMENTO_UNLOCK();
return;
}
@@ -2796,7 +2879,7 @@ void Memento_breakOnRealloc(void *a)
data.flags = 0;
Memento_appBlocks(&memento.free, Memento_containsAddr, &data);
if (data.blk != NULL) {
- fprintf(stderr, "Can't stop on free/realloc; address 0x%p is in %sfreed block ",
+ fprintf(stderr, "Can't stop on free/realloc; address "FMTP" is in %sfreed block ",
data.addr,
(data.flags == 1 ? "" : (data.flags == 2 ?
"preguard of " : "postguard of ")));
@@ -2805,7 +2888,7 @@ void Memento_breakOnRealloc(void *a)
MEMENTO_UNLOCK();
return;
}
- fprintf(stderr, "Can't stop on free/realloc; address 0x%p is not in a known block.\n", a);
+ fprintf(stderr, "Can't stop on free/realloc; address "FMTP" is not in a known block.\n", a);
MEMENTO_UNLOCK();
}
@@ -2834,6 +2917,11 @@ void Memento_stopLeaking(void)
memento.leaking--;
}
+int Memento_squeezing(void)
+{
+ return memento.squeezing;
+}
+
#endif /* MEMENTO_CPP_EXTRAS_ONLY */
#ifdef __cplusplus
@@ -3033,4 +3121,9 @@ void (Memento_stopLeaking)(void)
{
}
+int (Memento_squeezing)(void)
+{
+ return 0;
+}
+
#endif
diff --git a/jbig2dec/memento.h b/jbig2dec/memento.h
index d8cf5b34..b822479f 100644
--- a/jbig2dec/memento.h
+++ b/jbig2dec/memento.h
@@ -75,8 +75,7 @@
* An example:
* Suppose we have a gs invocation that crashes with memory corruption.
* * Build with -DMEMENTO.
- * * In your debugger put breakpoints on Memento_inited and
- * Memento_Breakpoint.
+ * * In your debugger put a breakpoint on Memento_breakpoint.
* * Run the program. It will stop in Memento_inited.
* * Execute Memento_setParanoia(1); (In VS use Ctrl-Alt-Q). (Note #1)
* * Continue execution.
@@ -92,9 +91,9 @@
* and 1458 - so if we rerun and stop the program at 1457, we can then
* step through, possibly with a data breakpoint at 0x172e710 and see
* when it occurs.
- * * So restart the program from the beginning. When we hit Memento_inited
- * execute Memento_breakAt(1457); (and maybe Memento_setParanoia(1), or
- * Memento_setParanoidAt(1457))
+ * * So restart the program from the beginning. When we stop after
+ * initialisation execute Memento_breakAt(1457); (and maybe
+ * Memento_setParanoia(1), or Memento_setParanoidAt(1457))
* * Continue execution until we hit Memento_breakpoint.
* * Now you can step through and watch the memory corruption happen.
*
@@ -157,6 +156,30 @@
* Both Windows and GCC provide separate new[] and delete[] operators
* for arrays. Apparently some systems do not. If this is the case for
* your system, define MEMENTO_CPP_NO_ARRAY_CONSTRUCTORS.
+ *
+ * "libbacktrace.so failed to load"
+ *
+ * In order to give nice backtraces on unix, Memento will try to use
+ * a libbacktrace dynamic library. If it can't find it, you'll see
+ * that warning, and your backtraces won't include file/line information.
+ *
+ * To fix this you'll need to build your own libbacktrace. Don't worry
+ * it's really easy:
+ * git clone git://github.com/ianlancetaylor/libbacktrace
+ * cd libbacktrace
+ * ./configure
+ * make
+ *
+ * This leaves the build .so as .libs/libbacktrace.so
+ *
+ * Memento will look for this on LD_LIBRARY_PATH, or in /opt/lib/,
+ * or in /lib/, or in /usr/lib/, or in /usr/local/lib/. I recommend
+ * using /opt/lib/ as this won't conflict with anything that you
+ * get via a package manager like apt.
+ *
+ * sudo mkdir /opt
+ * sudo mkdir /opt/lib
+ * sudo cp .libs/libbacktrace.so /opt/lib/
*/
#ifndef MEMENTO_H
@@ -238,6 +261,8 @@ void Memento_stopLeaking(void);
int Memento_sequence(void);
+int Memento_squeezing(void);
+
void Memento_fin(void);
void Memento_bt(void);
@@ -299,6 +324,7 @@ void Memento_bt(void);
#define Memento_fin() do {} while (0)
#define Memento_bt() do {} while (0)
#define Memento_sequence() (0)
+#define Memento_squeezing() (0)
#endif /* MEMENTO */
diff --git a/jbig2dec/msvc.mak b/jbig2dec/msvc.mak
index 94bc548f..5c2d6bd9 100644
--- a/jbig2dec/msvc.mak
+++ b/jbig2dec/msvc.mak
@@ -42,10 +42,11 @@ FE=-Fe
#
OBJS=getopt$(OBJ) getopt1$(OBJ) jbig2$(OBJ) jbig2_arith$(OBJ) \
jbig2_arith_iaid$(OBJ) jbig2_arith_int$(OBJ) jbig2_huffman$(OBJ) \
- jbig2_generic$(OBJ) jbig2_refinement$(OBJ) jbig2_halftone$(OBJ)\
- jbig2_image$(OBJ) jbig2_image_pbm$(OBJ) $(JBIG2_IMAGE_PNG_OBJ) \
- jbig2_segment$(OBJ) jbig2_symbol_dict$(OBJ) jbig2_text$(OBJ) \
- jbig2_mmr$(OBJ) jbig2_page$(OBJ) jbig2dec$(OBJ) sha1$(OBJ)
+ jbig2_hufftab$(OBJ) jbig2_generic$(OBJ) jbig2_refinement$(OBJ) \
+ jbig2_halftone$(OBJ) jbig2_image$(OBJ) jbig2_image_pbm$(OBJ) \
+ $(JBIG2_IMAGE_PNG_OBJ) jbig2_segment$(OBJ) jbig2_symbol_dict$(OBJ) \
+ jbig2_text$(OBJ) jbig2_mmr$(OBJ) jbig2_page$(OBJ) jbig2dec$(OBJ) \
+ sha1$(OBJ)
HDRS=getopt.h jbig2.h jbig2_arith.h jbig2_arith_iaid.h jbig2_arith_int.h \
jbig2_generic.h jbig2_huffman.h jbig2_hufftab.h jbig2_image.h \
@@ -83,6 +84,9 @@ jbig2_refinement$(OBJ): jbig2_refinement.c $(HDRS)
jbig2_huffman$(OBJ): jbig2_huffman.c $(HDRS)
$(CC) $(CFLAGS) -c jbig2_huffman.c
+jbig2_hufftab$(OBJ): jbig2_hufftab.c $(HDRS)
+ $(CC) $(CFLAGS) -c jbig2_hufftab.c
+
jbig2_image$(OBJ): jbig2_image.c $(HDRS)
$(CC) $(CFLAGS) -c jbig2_image.c
diff --git a/jbig2dec/test_jbig2dec.py b/jbig2dec/test_jbig2dec.py
index a8414383..629b685e 100755
--- a/jbig2dec/test_jbig2dec.py
+++ b/jbig2dec/test_jbig2dec.py
@@ -4,6 +4,7 @@
import os, re
import sys, time
+import hashlib
class SelfTest:
'generic class for self tests'
@@ -60,92 +61,82 @@ class KnownFileHash(SelfTest):
# hashes of known test inputs
known_NOTHING_DECODED = "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+ known_WHITE_PAGE_DECODED = "28a6bd83a8a3a36910fbc1f5ce06c962e4332911"
known_042_DECODED = "ebfdf6e2fc5ff3ee2271c2fa19de0e52712046e8"
known_amb_DECODED = "3d4b7992d506894662b53415bd3d0d2a2f8b7953"
# these are known test files in the form
# (filename, sha-1(file), sha-1(decoded document)
- known_hashes = ( ('../ubc/042_1.jb2',
- "673e1ee5c55ab241b171e476ba1168a42733ddaa",
- known_042_DECODED),
- ('../ubc/042_2.jb2',
- "9aa2804e2d220952035c16fb3c907547884067c5",
- known_042_DECODED),
- ('../ubc/042_3.jb2',
- "9663a5f35727f13e61a0a2f0a64207b1f79e7d67",
- known_042_DECODED),
- ('../ubc/042_4.jb2',
- "014df658c8b99b600c2ceac3f1d53c7cc2b4917c",
- known_042_DECODED),
- ('../ubc/042_5.jb2',
- "264720a6ccbbf72aa6a2cfb6343f43b8e6f2da4b",
- known_042_DECODED),
- ('../ubc/042_6.jb2',
- "96f7dc9df4a1b305f9ac082dd136f85ef5b108fe",
- known_042_DECODED),
- ('../ubc/042_7.jb2',
- "5526371ba9dc2b8743f20ae3e05a7e60b3dcba76",
- known_042_DECODED),
- ('../ubc/042_8.jb2',
- "4bf0c87dfaf40d67c36f2a083579eeda26d54641",
- known_042_DECODED),
- ('../ubc/042_9.jb2',
- "53e630e7fe2fe6e1d6164758e15fc93382e07f55",
- known_042_DECODED),
- ('../ubc/042_10.jb2',
- "5ca1364367e25cb8f642e9dc677a94d5cfed0c8b",
- known_042_DECODED),
- ('../ubc/042_11.jb2',
- "bc194caf022bc5345fc41259e05cea3c08245216",
- known_042_DECODED),
- ('../ubc/042_12.jb2',
- "f354df8eb4849bc707f088739e322d1fe3a14ef3",
- known_042_DECODED),
- ('../ubc/042_13.jb2',
- "7d428bd542f58591b254d9827f554b0552c950a7",
- known_NOTHING_DECODED),
- ('../ubc/042_14.jb2',
- "c40fe3a02acb6359baf9b40fc9c49bc0800be589",
- known_NOTHING_DECODED),
- ('../ubc/042_15.jb2',
- "a9e39fc1ecb178aec9f05039514d75ea3246246c",
- known_042_DECODED),
- ('../ubc/042_16.jb2',
- "4008bbca43670f3c90eaee26516293ba95baaf3d",
- known_042_DECODED),
- ('../ubc/042_17.jb2',
- "0ff95637b64c57d659a41c582da03e25321551fb",
- known_042_DECODED),
- ('../ubc/042_18.jb2',
- "87381d044f00c4329200e44decbe91bebfa31595",
- known_042_DECODED),
- ('../ubc/042_19.jb2',
- "387d95a140b456d4742622c788cf5b51cebbf438",
- known_042_DECODED),
- ('../ubc/042_20.jb2',
- "85c19e9ec42b8ddd6b860a1bebea1c67610e7a59",
- known_042_DECODED),
- ('../ubc/042_21.jb2',
- "ab535c7d7a61a7b9dc53d546e7419ca78ac7f447",
- known_042_DECODED),
- ('../ubc/042_22.jb2',
- "a9e2b365be63716dbde74b0661c3c6efd2a6844d",
- known_042_DECODED),
- ('../ubc/042_23.jb2',
- "8ffa40a05e93e10982b38a2233a8da58c1b5c343",
- known_042_DECODED),
- ('../ubc/042_24.jb2',
- "2553fe65111c58f6412de51d8cdc71651e778ccf",
- known_042_DECODED),
- ('../ubc/042_25.jb2',
- "52de4a3b86252d896a8d783ba71dd0699333dd69",
- known_042_DECODED),
- ('../ubc/amb_1.jb2',
- "d6d6d1c981dc37a09108c1e3ed990aa5b345fa6a",
- known_amb_DECODED),
- ('../ubc/amb_2.jb2',
- "9af6616a89eb03f8934de72626e301a716366c3c",
- known_amb_DECODED)
+ known_hashes = (
+ ('tests/ubc/042_1.jb2', "673e1ee5c55ab241b171e476ba1168a42733ddaa", known_042_DECODED),
+ ('tests/ubc/042_2.jb2', "9aa2804e2d220952035c16fb3c907547884067c5", known_042_DECODED),
+ ('tests/ubc/042_3.jb2', "9663a5f35727f13e61a0a2f0a64207b1f79e7d67", known_042_DECODED),
+ ('tests/ubc/042_4.jb2', "014df658c8b99b600c2ceac3f1d53c7cc2b4917c", known_042_DECODED),
+ ('tests/ubc/042_5.jb2', "264720a6ccbbf72aa6a2cfb6343f43b8e6f2da4b", known_042_DECODED),
+ ('tests/ubc/042_6.jb2', "96f7dc9df4a1b305f9ac082dd136f85ef5b108fe", known_042_DECODED),
+ ('tests/ubc/042_7.jb2', "5526371ba9dc2b8743f20ae3e05a7e60b3dcba76", known_042_DECODED),
+ ('tests/ubc/042_8.jb2', "4bf0c87dfaf40d67c36f2a083579eeda26d54641", known_042_DECODED),
+ ('tests/ubc/042_9.jb2', "53e630e7fe2fe6e1d6164758e15fc93382e07f55", known_042_DECODED),
+ ('tests/ubc/042_10.jb2', "5ca1364367e25cb8f642e9dc677a94d5cfed0c8b", known_042_DECODED),
+ ('tests/ubc/042_11.jb2', "bc194caf022bc5345fc41259e05cea3c08245216", known_042_DECODED),
+ ('tests/ubc/042_12.jb2', "f354df8eb4849bc707f088739e322d1fe3a14ef3", known_042_DECODED),
+ ('tests/ubc/042_13.jb2', "7d428bd542f58591b254d9827f554b0552c950a7", known_WHITE_PAGE_DECODED),
+ ('tests/ubc/042_14.jb2', "c40fe3a02acb6359baf9b40fc9c49bc0800be589", known_WHITE_PAGE_DECODED),
+ ('tests/ubc/042_15.jb2', "a9e39fc1ecb178aec9f05039514d75ea3246246c", known_042_DECODED),
+ ('tests/ubc/042_16.jb2', "4008bbca43670f3c90eaee26516293ba95baaf3d", known_042_DECODED),
+ ('tests/ubc/042_17.jb2', "0ff95637b64c57d659a41c582da03e25321551fb", known_042_DECODED),
+ ('tests/ubc/042_18.jb2', "87381d044f00c4329200e44decbe91bebfa31595", known_042_DECODED),
+ ('tests/ubc/042_19.jb2', "387d95a140b456d4742622c788cf5b51cebbf438", known_042_DECODED),
+ ('tests/ubc/042_20.jb2', "85c19e9ec42b8ddd6b860a1bebea1c67610e7a59", known_042_DECODED),
+ ('tests/ubc/042_21.jb2', "ab535c7d7a61a7b9dc53d546e7419ca78ac7f447", known_042_DECODED),
+ ('tests/ubc/042_22.jb2', "a9e2b365be63716dbde74b0661c3c6efd2a6844d", known_042_DECODED),
+ ('tests/ubc/042_23.jb2', "8ffa40a05e93e10982b38a2233a8da58c1b5c343", known_042_DECODED),
+ ('tests/ubc/042_24.jb2', "2553fe65111c58f6412de51d8cdc71651e778ccf", known_042_DECODED),
+ ('tests/ubc/042_25.jb2', "52de4a3b86252d896a8d783ba71dd0699333dd69", known_042_DECODED),
+
+ ('tests/ubc/amb_1.jb2', "d6d6d1c981dc37a09108c1e3ed990aa5b345fa6a", known_amb_DECODED),
+ ('tests/ubc/amb_2.jb2', "9af6616a89eb03f8934de72626e301a716366c3c", known_amb_DECODED),
+
+ ('tests/ubc/200-10-0.jb2', "f6014b43775640ef0874497e0873f8deb291cc32", "49cddf903d3451ba23297a6b68502504093979cf"),
+ ('tests/ubc/200-10-0-stripe.jb2', "d19f58cd180afd1ae2afd11c96471e98c7c6f125", "ac89ae2046c4859348418830287982b6d60bf39b"),
+ ('tests/ubc/200-10-45.jb2', "504297b028810f812cbf075597f589a9fb82121b", "38aa99e40c6a746391c26c953223bcd4549cadd0"),
+ ('tests/ubc/200-10-45-stripe.jb2', "0d9f2a63c9fd224a6b60a9b7c0cd658f47551edd", "2921889fc5ffaafb348084761aa7c54831ec57ba"),
+ ('tests/ubc/200-20-0.jb2', "a40aaf33dd4c3225728ddfc0fad12167ceff1b17", "cc1732742d5d68c6d5c3f4eec9d5887e9ee24cd0"),
+ ('tests/ubc/200-20-0-stripe.jb2', "d499a89baf69a1b5f6fa450ec20b21136052b4cd", "743aa86e7abc9e238e23d02fbc993b048589282a"),
+ ('tests/ubc/200-20-45.jb2', "a39f1e2670f1c08dbd07d14a99965bf7253e6318", "7213fb351f65397c12accf662787aa3bc028c40f"),
+ ('tests/ubc/200-20-45-stripe.jb2', "3aa44cdef38fc8e34376480408ca99364ccbf0ee", "9021716b3eca4da549508db691655eddc4d51548"),
+ ('tests/ubc/200-2-0.jb2', "087f529ba6e3cc5fca3773c1d07e39fb642f5052", "534fceffada398444ce065088a37b6d6517a3406"),
+ ('tests/ubc/200-2-0-stripe.jb2', "dc227f7531ccecda08511bda9359864c66a8d230", "56f0e25ae5863a75d69a1825b820ba004e48d2c4"),
+ ('tests/ubc/200-3-0.jb2', "024a20b82e794eb469b4fae2b4f930c5c079fd6b", "57fe3645b028e6c7a68dcf707674f889038ee4b5"),
+ ('tests/ubc/200-3-0-stripe.jb2', "2322db7dc956863b7257d28a212431e304661998", "32ea498b28a46bf04e0b799c70114ab99ce7d15e"),
+ ('tests/ubc/200-3-45.jb2', "21ba06f8cfcc31b5bd7fa39ad98093180d3e05aa", "83e01d0a83d167fe00f7389e5fec0a660841aeef"),
+ ('tests/ubc/200-3-45-stripe.jb2', "6dfe3cbb019ef0c30ecae7d2196b1b3fd7634288", "20c2ade5766eeb3a70dca9963029c0a74171064b"),
+ ('tests/ubc/200-4-0.jb2', "c7d8d8b8a97388b0fcc6e5e3d8708fbce0881edf", "b85fe470db7542789b0632dc87dbdc721e07ddf5"),
+ ('tests/ubc/200-4-0-stripe.jb2', "840f076fd542b2ae8d0d1663ed7efd5683326bc7", "0acd5a6f24637dad4b948fa24563b1fae04996be"),
+ ('tests/ubc/200-4-45.jb2', "6ed49af06268d57137436ffeea2def6f93ea17eb", "5177abf7e9d641ca4f553bd4847134e51bb1159a"),
+ ('tests/ubc/200-4-45-stripe.jb2', "0dfc5b59a046ab05364298b1767334298fa03eeb", "944a399d8763007ae0477f69b80ec28d7fbe6edd"),
+ ('tests/ubc/200-5-0.jb2', "47770e4144b022790af00098ac830ac8665f62a0", "515eaf8e4537bbda841abf3b7ffbd1b4728c7597"),
+ ('tests/ubc/200-5-0-stripe.jb2', "23f784c297c204bc1bf7cd1559a7c38a95097266", "c69e97f9e1a7e45d6eb3975ecb8a4a7dd7f09e2e"),
+ ('tests/ubc/200-5-45.jb2', "193376e966e8bc22868e38791289e810953b5483", "77fff5286023b77316221d5c36a6d40f8b905ca9"),
+ ('tests/ubc/200-5-45-stripe.jb2', "d211863df684b5c113c2e29aec72c6a533681356", "efd7b9ae877bf3d71c0baa604a1014e1218ada90"),
+ ('tests/ubc/200-6-0.jb2', "e66a8cff6c00575018253a06f9309192cc796fb2", "7b5dae69e6f8953463dd29707f77225cd8a543ad"),
+ ('tests/ubc/200-6-0-stripe.jb2', "55ba1b94e73d96defbb7abbe35ccf13b4e1ac89f", "e8a1b55780dde4102f37ca5fafeff29bbd30e867"),
+ ('tests/ubc/200-6-45.jb2', "71d167f8af4e6c2a3202c26873aedf490e8da8f2", "9093ba8bfc65b87dddc310d437b8ca626ee2283c"),
+ ('tests/ubc/200-6-45-stripe.jb2', "abcf8f71f9ce0cb65c43942ecf0cfda7ece5d7ff", "397a48e4f3a3261928b2175699104117e36349e6"),
+ ('tests/ubc/200-8-0.jb2', "e7004846acb5529d5335c16315d11c188edea89d", "8cfa43f514911d35d9666e52ae51bbd93a9bddfc"),
+ ('tests/ubc/200-8-0-stripe.jb2', "0d96be49231e7e5a52c41bfa7303768465a9fa81", "021fbcfa12122999cded6beea3b7aa3c7018acbd"),
+ ('tests/ubc/200-8-45.jb2', "e28403c3bf1014a5b5e9c3c3e5e99cae47aa09ab", "669986963011b174d5352d38e6c77f459ff3bebd"),
+ ('tests/ubc/200-8-45-stripe.jb2', "c2e19b3e51d06c102a06643f3ea15f77d6df3788", "ceb0ef29cb68fe53d9abceb45ab182c1e6a39ff7"),
+ ('tests/ubc/200-lossless.jb2', "b9989aea1a3edd65e38e7fbeaa89a29d7a2aa342", "94d9324437bc27955e610ef4fbbd684ad3107fea"),
+ ('tests/ubc/600-10-0.jb2', "46c9af206382243d838f86ea45c63e7ca2900b68", "0ad323815315270f02f8220ed3b69133a1639f74"),
+ ('tests/ubc/600-10-45.jb2', "1f143e95bf57d8d2696525797e198efd785f7221", "16002bb4e4cefbb58da5dde531b1064b9e6ad1a7"),
+ ('tests/ubc/600-20-0.jb2', "8c874b1fb89e714ef8c64f33d292db2aea4fd05f", "a537aac28d9e0ea27d43a38024962f86aa1e403b"),
+ ('tests/ubc/600-20-45.jb2', "a9c94915dd140916bc14db7b4bc9fc5d7e73b5a9", "5af6ec6f2e8ae68cfb6df3f82bf47ee2f6c4f0b5"),
+ ('tests/ubc/600-30-0.jb2', "f0b9eea13b5c7a18742238778f1a3b7e1a4d3361", "6feaffc771381922a578bc54c4b50d18e7933ea1"),
+ ('tests/ubc/600-30-45.jb2', "65bb4202b575bba6063ef3597a5eefa356b5e660", "768788c5176d5ffb5d8d0855d8ab34312611f67d"),
+ ('tests/ubc/600-6-0.jb2', "c54abd4bdbb26b1f1209dc03ab10c05cdfd7a63a", "baba4bc5359c0fafc54efcba14da2bd5943222be"),
+ ('tests/ubc/600-6-45.jb2', "94f4f6ea60eda33e0cd8bb94a5a0f90dc05f96a7", "bc3afe7c37533ca43f3244e6877ce38b3e978e9f"),
+ ('tests/ubc/600-lossless.jb2', "60ecd5ddfb0984e3d2691bc385f425a50c753019", "f632d82b3c3d500098ad560e5ab91c69bd20827f")
)
def __init__(self, file, file_hash, decode_hash):
@@ -159,11 +150,18 @@ class KnownFileHash(SelfTest):
def runTest(self):
'''jbig2dec should return proper document hashes for known files'''
+ # verify that the input file hash is correct
+ sha1 = hashlib.sha1()
+ with open(self.file, 'rb') as f:
+ sha1.update(f.read())
+ self.assertEqual(self.file_hash, sha1.hexdigest())
+
# invoke jbig2dec on our file
instance = os.popen('./jbig2dec -q -o /dev/null --hash ' + self.file)
lines = instance.readlines()
exit_code = instance.close()
self.failIf(exit_code, 'jbig2dec should exit normally')
+
# test here for correct hash
hash_pattern = re.compile('[0-9a-f]{%d}' % len(decode_hash))
for line in lines:
diff --git a/lcms2mt/ChangeLog b/lcms2mt/ChangeLog
index 49342f04..9a30cd41 100644
--- a/lcms2mt/ChangeLog
+++ b/lcms2mt/ChangeLog
@@ -28,7 +28,7 @@ Several fixes related with security, and therefore not detailed here.
C++ compiles now without warnings
Added OSX and clang in travis
Added a travis-ci test matrix for many compilers and OS. Thanks to Thomas Weber (debian) for this great improvement.
-testbed can now work with dynamic versions of library
+testbed can now work with dynamic versions of library
Fixed wrong planar formatters regarding linestride interpretation
-----------------------
diff --git a/lcms2mt/Projects/VC2010/lcms2mt.rc b/lcms2mt/Projects/VC2010/lcms2mt.rc
index 2d0d0a8f..65f192bc 100644
--- a/lcms2mt/Projects/VC2010/lcms2mt.rc
+++ b/lcms2mt/Projects/VC2010/lcms2mt.rc
@@ -66,12 +66,20 @@ END
// TEXTINCLUDE
//
+<<<<<<< e2c48062c190a618a765f443fdfcac76a80d684d
1 TEXTINCLUDE
+=======
+1 TEXTINCLUDE
+>>>>>>> Pull in newly merged and updated LCMS2MT from MuPDF thirdparty repo.
BEGIN
"resource.h\0"
END
+<<<<<<< e2c48062c190a618a765f443fdfcac76a80d684d
2 TEXTINCLUDE
+=======
+2 TEXTINCLUDE
+>>>>>>> Pull in newly merged and updated LCMS2MT from MuPDF thirdparty repo.
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
@@ -79,7 +87,11 @@ BEGIN
"\0"
END
+<<<<<<< e2c48062c190a618a765f443fdfcac76a80d684d
3 TEXTINCLUDE
+=======
+3 TEXTINCLUDE
+>>>>>>> Pull in newly merged and updated LCMS2MT from MuPDF thirdparty repo.
BEGIN
"\r\n"
"\0"
@@ -101,4 +113,7 @@ END
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
+<<<<<<< e2c48062c190a618a765f443fdfcac76a80d684d
+=======
+>>>>>>> Pull in newly merged and updated LCMS2MT from MuPDF thirdparty repo.
diff --git a/lcms2mt/config.guess b/lcms2mt/config.guess
index e7464614..82e59e2a 100755
--- a/lcms2mt/config.guess
+++ b/lcms2mt/config.guess
@@ -1101,6 +1101,7 @@ EOF
# the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configuration will decide that
+ # prints for the "djgpp" host, or else GDB configuration will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
exit ;;
diff --git a/lcms2mt/include/lcms2mt.h b/lcms2mt/include/lcms2mt.h
index d36115d2..6d5ad1aa 100644
--- a/lcms2mt/include/lcms2mt.h
+++ b/lcms2mt/include/lcms2mt.h
@@ -1644,6 +1644,8 @@ CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsContext ContextID,
// Copy alpha channels when transforming
#define cmsFLAGS_COPY_ALPHA 0x04000000 // Alpha channels are copied on cmsDoTransform()
+#define cmsFLAGS_FORCE_LINEARINTERP 0x08000000 // Force slower but more accurate interpolation
+
// Fine-tune control over number of gridpoints
#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16)
diff --git a/lcms2mt/src/cmscnvrt.c b/lcms2mt/src/cmscnvrt.c
index afa3de60..f29ab5ba 100644
--- a/lcms2mt/src/cmscnvrt.c
+++ b/lcms2mt/src/cmscnvrt.c
@@ -546,6 +546,8 @@ cmsPipeline* DefaultICCintents(cmsContext ContextID,
Result = cmsPipelineAlloc(ContextID, 0, 0);
if (Result == NULL) return NULL;
+ ContextID->dwFlags = dwFlags;
+
CurrentColorSpace = cmsGetColorSpace(ContextID, hProfiles[0]);
for (i=0; i < nProfiles; i++) {
@@ -653,10 +655,14 @@ cmsPipeline* DefaultICCintents(cmsContext ContextID,
}
+ ContextID->dwFlags = 0;
+
return Result;
Error:
+ ContextID->dwFlags = 0;
+
if (Lut != NULL) cmsPipelineFree(ContextID, Lut);
if (Result != NULL) cmsPipelineFree(ContextID, Result);
return NULL;
diff --git a/lcms2mt/src/cmsintrp.c b/lcms2mt/src/cmsintrp.c
index 651e25c3..555125e3 100644
--- a/lcms2mt/src/cmsintrp.c
+++ b/lcms2mt/src/cmsintrp.c
@@ -85,6 +85,10 @@ cmsBool _cmsRegisterInterpPlugin(cmsContext ContextID, cmsPluginBase* Data)
cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p)
{
_cmsInterpPluginChunkType* ptr = (_cmsInterpPluginChunkType*) _cmsContextGetClientChunk(ContextID, InterpPlugin);
+ cmsUInt32Number flags = 0;
+
+ if (ContextID->dwFlags & cmsFLAGS_FORCE_LINEARINTERP)
+ flags = CMS_LERP_FLAGS_TRILINEAR;
p ->Interpolation.Lerp16 = NULL;
@@ -95,7 +99,7 @@ cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p)
// If unsupported by the plug-in, go for the LittleCMS default.
// If happens only if an extern plug-in is being used
if (p ->Interpolation.Lerp16 == NULL)
- p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags);
+ p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags | flags);
// Check for valid interpolator (we just check one member of the union)
if (p ->Interpolation.Lerp16 == NULL) {
@@ -607,6 +611,149 @@ void TrilinearInterp16(cmsContext ContextID, register const cmsUInt16Number Inpu
# undef DENS
}
+static
+void QuadrilinearInterpFloat(cmsContext ContextID,
+ const cmsFloat32Number Input[],
+ cmsFloat32Number Output[],
+ const cmsInterpParams *p)
+
+{
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0;
+ cmsUInt32Number i, n;
+ cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p;
+ cmsFloat32Number i0 = fclamp(Input[0]);
+
+ pk = i0 * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
+
+ memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number));
+ p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[3] * k0;
+
+ TrilinearInterpFloat(ContextID, Input + 1, Output, &p1);
+
+ if (i0 == 1.0)
+ return;
+
+ p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[3];
+ TrilinearInterpFloat(ContextID, Input + 1, Tmp, &p1);
+
+ n = p -> nOutputs;
+ for (i=0; i < n; i++) {
+ cmsFloat32Number y0 = Output[i];
+ cmsFloat32Number y1 = Tmp[i];
+
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
+}
+
+static CMS_NO_SANITIZE
+void QuadrilinearInterp16(cmsContext ContextID,
+ register const cmsUInt16Number Input[],
+ register cmsUInt16Number Output[],
+ register const cmsInterpParams *p)
+
+{
+#define DENS(i,j,k,l) (LutTable[(i)+(j)+(k)+(l)+OutChan])
+#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a)))
+
+ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table;
+ int OutChan, TotalOut;
+ cmsS15Fixed16Number fx, fy, fz, fk;
+ register int rx, ry, rz, rk;
+ int x0, y0, z0, k0;
+ register int X0, X1, Y0, Y1, Z0, Z1, K0, K1;
+ int d0000, d0001, d0010, d0011,
+ d0100, d0101, d0110, d0111,
+ d1000, d1001, d1010, d1011,
+ d1100, d1101, d1110, d1111,
+ d000, d001, d010, d011,
+ d100, d101, d110, d111,
+ dx00, dx01, dx10, dx11,
+ dxy0, dxy1, dxyz;
+ cmsUNUSED_PARAMETER(ContextID);
+
+ TotalOut = p -> nOutputs;
+
+ fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]);
+ x0 = FIXED_TO_INT(fx);
+ rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain
+
+
+ fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]);
+ y0 = FIXED_TO_INT(fy);
+ ry = FIXED_REST_TO_INT(fy);
+
+ fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]);
+ z0 = FIXED_TO_INT(fz);
+ rz = FIXED_REST_TO_INT(fz);
+
+ fk = _cmsToFixedDomain((int) Input[3] * p -> Domain[3]);
+ k0 = FIXED_TO_INT(fk);
+ rk = FIXED_REST_TO_INT(fk);
+
+
+ X0 = p -> opta[3] * x0;
+ X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[3]);
+
+ Y0 = p -> opta[2] * y0;
+ Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[2]);
+
+ Z0 = p -> opta[1] * z0;
+ Z1 = Z0 + (Input[2] == 0xFFFFU ? 0 : p->opta[1]);
+
+ K0 = p -> opta[0] * k0;
+ K1 = K0 + (Input[3] == 0xFFFFU ? 0 : p->opta[0]);
+
+ for (OutChan = 0; OutChan < TotalOut; OutChan++) {
+
+ d0000 = DENS(X0, Y0, Z0, K0);
+ d0001 = DENS(X0, Y0, Z0, K1);
+ d000 = LERP(rk, d0000, d0001);
+ d0010 = DENS(X0, Y0, Z1, K0);
+ d0011 = DENS(X0, Y0, Z1, K1);
+ d001 = LERP(rk, d0010, d0011);
+ d0100 = DENS(X0, Y1, Z0, K0);
+ d0101 = DENS(X0, Y1, Z0, K1);
+ d010 = LERP(rk, d0100, d0101);
+ d0110 = DENS(X0, Y1, Z1, K0);
+ d0111 = DENS(X0, Y1, Z1, K1);
+ d011 = LERP(rk, d0110, d0111);
+
+ d1000 = DENS(X1, Y0, Z0, K0);
+ d1001 = DENS(X1, Y0, Z0, K1);
+ d100 = LERP(rk, d1000, d1001);
+ d1010 = DENS(X1, Y0, Z1, K0);
+ d1011 = DENS(X1, Y0, Z1, K1);
+ d101 = LERP(rk, d1010, d1011);
+ d1100 = DENS(X1, Y1, Z0, K0);
+ d1101 = DENS(X1, Y1, Z0, K1);
+ d110 = LERP(rk, d1100, d1101);
+ d1110 = DENS(X1, Y1, Z1, K0);
+ d1111 = DENS(X1, Y1, Z1, K1);
+ d111 = LERP(rk, d1110, d1111);
+
+ dx00 = LERP(rx, d000, d100);
+ dx01 = LERP(rx, d001, d101);
+ dx10 = LERP(rx, d010, d110);
+ dx11 = LERP(rx, d011, d111);
+
+ dxy0 = LERP(ry, dx00, dx10);
+ dxy1 = LERP(ry, dx01, dx11);
+
+ dxyz = LERP(rz, dxy0, dxy1);
+
+ Output[OutChan] = (cmsUInt16Number) dxyz;
+ }
+
+
+# undef LERP
+# undef DENS
+}
+
// Tetrahedral interpolation, using Sakamoto algorithm.
#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
@@ -846,27 +993,25 @@ void TetrahedralInterp16(cmsContext ContextID, register const cmsUInt16Number In
}
-#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan])
+/* Pentachoronal Interpolation */
static CMS_NO_SANITIZE
void Eval4Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
register cmsUInt16Number Output[],
register const cmsInterpParams* p16)
{
- const cmsUInt16Number* LutTable;
- cmsS15Fixed16Number fk;
- cmsS15Fixed16Number k0, rk;
- int K0, K1;
- cmsS15Fixed16Number fx, fy, fz;
- cmsS15Fixed16Number rx, ry, rz;
- int x0, y0, z0;
- cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1;
- cmsUInt32Number i;
- cmsS15Fixed16Number c0, c1, c2, c3, Rest;
+ const cmsUInt16Number *LutTable;
+ cmsS15Fixed16Number fx, fy, fz, fk;
+ cmsS15Fixed16Number rx, ry, rz, rk;
+ cmsS15Fixed16Number m1, m2, m3, m4;
+ int x0, y0, z0, k0;
+ cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1, K0, K1;
+ cmsS15Fixed16Number o1, o2, o3, o4;
+ cmsS15Fixed16Number c0, c1, c2, c3, c4, Rest;
cmsUInt32Number OutChan;
- cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
+ cmsUInt16Number *Out = Output;
+ int which;
cmsUNUSED_PARAMETER(ContextID);
-
fk = _cmsToFixedDomain((int) Input[0] * p16 -> Domain[0]);
fx = _cmsToFixedDomain((int) Input[1] * p16 -> Domain[1]);
fy = _cmsToFixedDomain((int) Input[2] * p16 -> Domain[2]);
@@ -883,240 +1028,326 @@ void Eval4Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
rz = FIXED_REST_TO_INT(fz);
K0 = p16 -> opta[3] * k0;
- K1 = K0 + (Input[0] == 0xFFFFU ? 0 : p16->opta[3]);
+ K1 = (Input[0] == 0xFFFFU ? 0 : p16->opta[3]);
X0 = p16 -> opta[2] * x0;
- X1 = X0 + (Input[1] == 0xFFFFU ? 0 : p16->opta[2]);
+ X1 = (Input[1] == 0xFFFFU ? 0 : p16->opta[2]);
Y0 = p16 -> opta[1] * y0;
- Y1 = Y0 + (Input[2] == 0xFFFFU ? 0 : p16->opta[1]);
+ Y1 = (Input[2] == 0xFFFFU ? 0 : p16->opta[1]);
Z0 = p16 -> opta[0] * z0;
- Z1 = Z0 + (Input[3] == 0xFFFFU ? 0 : p16->opta[0]);
+ Z1 = (Input[3] == 0xFFFFU ? 0 : p16->opta[0]);
LutTable = (cmsUInt16Number*) p16 -> Table;
- LutTable += K0;
-
- for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) {
-
- c0 = DENS(X0, Y0, Z0);
-
- if (rx >= ry && ry >= rz) {
-
- c1 = DENS(X1, Y0, Z0) - c0;
- c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
- c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
-
- }
- else
- if (rx >= rz && rz >= ry) {
-
- c1 = DENS(X1, Y0, Z0) - c0;
- c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
- c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
-
- }
- else
- if (rz >= rx && rx >= ry) {
-
- c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
- c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
- c3 = DENS(X0, Y0, Z1) - c0;
-
- }
- else
- if (ry >= rx && rx >= rz) {
-
- c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
- c2 = DENS(X0, Y1, Z0) - c0;
- c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
-
- }
- else
- if (ry >= rz && rz >= rx) {
-
- c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
- c2 = DENS(X0, Y1, Z0) - c0;
- c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
-
- }
- else
- if (rz >= ry && ry >= rx) {
-
- c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
- c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
- c3 = DENS(X0, Y0, Z1) - c0;
-
- }
- else {
- c1 = c2 = c3 = 0;
- }
-
- Rest = c1 * rx + c2 * ry + c3 * rz;
-
- Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ LutTable += K0 + X0 + Y0 + Z0;
+
+ /* We carefully choose the following tests, a) cos these
+ * work nicely in SSE (see CAL), and b) because, as well
+ * as the standard 24 pentachorons, we get some useful
+ * special cases. */
+ which = (rx > ry ? 1 : 0) +
+ (ry > rz ? 2 : 0) +
+ (rz > rk ? 4 : 0) +
+ (rk > rx ? 8 : 0) +
+ (rz > rx ? 16 : 0) +
+ (rk > ry ? 32 : 0);
+
+ o4 = X1+Y1+Z1+K1;
+ switch(which)
+ {
+ default: /* Never happens, but stops the compiler complaining of uninitialised vars */
+ case 0x00: /* x == y == z == k - special case */
+ m1 = rx; goto one_lerp;
+ case 0x01: /* x > k == z == y - special case */
+ o1 = X1; m1 = rx; m2 = ry; goto two_lerps;
+ case 0x18: /* y == z == k > x - special case */
+ o1 = Y1+Z1+K1; m1 = ry; m2 = rx; goto two_lerps;
+ case 0x04: /* z == y == x > k - special case */
+ o1 = X1+Y1+Z1; m1 = ry; m2 = rk; goto two_lerps;
+ case 0x28: /* k > z == y == x - special case */
+ o1 = K1; m1 = rk; m2 = ry; goto two_lerps;
+ case 0x02: /* y >= x >= k >= z */
+ o1 = Y1; o2 = X1; o3 = K1; m1 = ry; m2 = rx; m3 = rk; m4 = rz; break;
+ case 0x03: /* x > y >= k >= z */
+ o1 = X1; o2 = Y1; o3 = K1; m1 = rx; m2 = ry; m3 = rk; m4 = rz; break;
+ case 0x05: /* x >= z >= y >= k */
+ o1 = X1; o2 = Z1; o3 = Y1; m1 = rx; m2 = rz; m3 = ry; m4 = rk; break;
+ case 0x06: /* y >= x >= z > k */
+ o1 = Y1; o2 = X1; o3 = Z1; m1 = ry; m2 = rx; m3 = rz; m4 = rk; break;
+ case 0x07: /* x > y > z > k */
+ o1 = X1; o2 = Y1; o3 = Z1; m1 = rx; m2 = ry; m3 = rz; m4 = rk; break;
+ case 0x0a: /* y >= k > x >= z */
+ o1 = Y1; o2 = K1; o3 = X1; m1 = ry; m2 = rk; m3 = rx; m4 = rz; break;
+ case 0x14: /* z >= y >= x >= k */
+ o1 = Z1; o2 = Y1; o3 = X1; m1 = rz; m2 = ry; m3 = rx; m4 = rk; break;
+ case 0x15: /* z > x >= y >= k */
+ o1 = Z1; o2 = X1; o3 = Y1; m1 = rz; m2 = rx; m3 = ry; m4 = rk; break;
+ case 0x16: /* y >= z > x >= k */
+ o1 = Y1; o2 = Z1; o3 = X1; m1 = ry; m2 = rz; m3 = rx; m4 = rk; break;
+ case 0x1a: /* y >= k >= z > x */
+ o1 = Y1; o2 = K1; o3 = Z1; m1 = ry; m2 = rk; m3 = rz; m4 = rx; break;
+ case 0x1c: /* z >= y >= k > x */
+ o1 = Z1; o2 = Y1; o3 = K1; m1 = rz; m2 = ry; m3 = rk; m4 = rx; break;
+ case 0x1e: /* y > z > k > x */
+ o1 = Y1; o2 = Z1; o3 = K1; m1 = ry; m2 = rz; m3 = rk; m4 = rx; break;
+ case 0x21: /* x >= k >= z >= y */
+ o1 = X1; o2 = K1; o3 = Z1; m1 = rx; m2 = rk; m3 = rz; m4 = ry; break;
+ case 0x23: /* x >= k > y > z */
+ o1 = X1; o2 = K1; o3 = Y1; m1 = rx; m2 = rk; m3 = ry; m4 = rz; break;
+ case 0x25: /* x >= z > k > y */
+ o1 = X1; o2 = Z1; o3 = K1; m1 = rx; m2 = rz; m3 = rk; m4 = ry; break;
+ case 0x29: /* k > x >= z >= y */
+ o1 = K1; o2 = X1; o3 = Z1; m1 = rk; m2 = rx; m3 = rz; m4 = ry; break;
+ case 0x2a: /* k > y >= x >= z */
+ o1 = K1; o2 = Y1; o3 = X1; m1 = rk; m2 = ry; m3 = rx; m4 = rz; break;
+ case 0x2b: /* k > x > y > z */
+ o1 = K1; o2 = X1; o3 = Y1; m1 = rk; m2 = rx; m3 = ry; m4 = rz; break;
+ case 0x35: /* z > x >= k > y */
+ o1 = Z1; o2 = X1; o3 = K1; m1 = rz; m2 = rx; m3 = rk; m4 = ry; break;
+ case 0x38: /* k >= z >= y >= x */
+ o1 = K1; o2 = Z1; o3 = Y1; m1 = rk; m2 = rz; m3 = ry; m4 = rx; break;
+ case 0x39: /* k >= z > x > y */
+ o1 = K1; o2 = Z1; o3 = X1; m1 = rk; m2 = rz; m3 = rx; m4 = ry; break;
+ case 0x3a: /* k > y > z > x */
+ o1 = K1; o2 = Y1; o3 = Z1; m1 = rk; m2 = ry; m3 = rz; m4 = rx; break;
+ case 0x3c: /* z > k > y >= x */
+ o1 = Z1; o2 = K1; o3 = Y1; m1 = rz; m2 = rk; m3 = ry; m4 = rx; break;
+ case 0x3d: /* z > k > x > y */
+ o1 = Z1; o2 = K1; o3 = X1; m1 = rz; m2 = rk; m3 = rx; m4 = ry; break;
}
+ assert(m1 >= m2 && m2 >= m3 && m3 >= m4);
+ o2 += o1;
+ o3 += o2;
+ for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
+ c1 = LutTable[o1];
+ c2 = LutTable[o2];
+ c3 = LutTable[o3];
+ c4 = LutTable[o4] - c3;
+ c0 = *LutTable++;
+ c3 -= c2;
+ c2 -= c1;
+ c1 -= c0;
+
+ Rest = c1 * m1 + c2 * m2 + c3 * m3 + c4 * m4;
+
+ *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ }
+ return;
+two_lerps:
+ assert(m1 >= m2);
+ for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
+ c1 = LutTable[o1];
+ c2 = LutTable[o4] - c1;
+ c0 = *LutTable++;
+ c1 -= c0;
- LutTable = (cmsUInt16Number*) p16 -> Table;
- LutTable += K1;
-
- for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) {
-
- c0 = DENS(X0, Y0, Z0);
-
- if (rx >= ry && ry >= rz) {
-
- c1 = DENS(X1, Y0, Z0) - c0;
- c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0);
- c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
-
- }
- else
- if (rx >= rz && rz >= ry) {
-
- c1 = DENS(X1, Y0, Z0) - c0;
- c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
- c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0);
-
- }
- else
- if (rz >= rx && rx >= ry) {
-
- c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1);
- c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1);
- c3 = DENS(X0, Y0, Z1) - c0;
-
- }
- else
- if (ry >= rx && rx >= rz) {
-
- c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0);
- c2 = DENS(X0, Y1, Z0) - c0;
- c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0);
-
- }
- else
- if (ry >= rz && rz >= rx) {
-
- c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
- c2 = DENS(X0, Y1, Z0) - c0;
- c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0);
-
- }
- else
- if (rz >= ry && ry >= rx) {
-
- c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1);
- c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1);
- c3 = DENS(X0, Y0, Z1) - c0;
-
- }
- else {
- c1 = c2 = c3 = 0;
- }
+ Rest = c1 * m1 + c2 * m2;
- Rest = c1 * rx + c2 * ry + c3 * rz;
-
- Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
+ *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
+ return;
+one_lerp:
+ for (OutChan=p16 -> nOutputs; OutChan != 0; OutChan--) {
+ c1 = LutTable[o4];
+ c0 = *LutTable++;
+ c1 -= c0;
+ Rest = c1 * m1;
- for (i=0; i < p16 -> nOutputs; i++) {
- Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
+ *Out++ = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
+ return;
}
-#undef DENS
-
-
-// For more that 3 inputs (i.e., CMYK)
-// evaluate two 3-dimensional interpolations and then linearly interpolate between them.
-
static
void Eval4InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0, K0, K1;
- const cmsFloat32Number* T;
- cmsUInt32Number i;
- cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
+ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
+ cmsFloat32Number px, py, pz, pk;
+ int x0, y0, z0, k0;
+ int X0, Y0, Z0, K0, X1, Y1, Z1, K1;
+ cmsFloat32Number rx, ry, rz, rk;
+ cmsFloat32Number m1, m2, m3, m4;
+ cmsFloat32Number c0, c1, c2, c3, c4;
+ int o1, o2, o3, o4;
+ int OutChan, TotalOut;
+ cmsFloat32Number *Out = Output;
+ int which;
+ cmsUNUSED_PARAMETER(ContextID);
- pk = fclamp(Input[0]) * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ TotalOut = p -> nOutputs;
- K0 = p -> opta[3] * k0;
- K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[3]);
+ // We need some clipping here
+ pk = fclamp(Input[0]) * p->Domain[0];
+ px = fclamp(Input[1]) * p->Domain[1];
+ py = fclamp(Input[2]) * p->Domain[2];
+ pz = fclamp(Input[3]) * p->Domain[3];
- p1 = *p;
- memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number));
+ k0 = (int) floor(pk); rk = (pk - (cmsFloat32Number) k0);
+ x0 = (int) floor(px); rx = (px - (cmsFloat32Number) x0); // We need full floor functionality here
+ y0 = (int) floor(py); ry = (py - (cmsFloat32Number) y0);
+ z0 = (int) floor(pz); rz = (pz - (cmsFloat32Number) z0);
- T = LutTable + K0;
- p1.Table = T;
+ K0 = p -> opta[3] * k0;
+ K1 = (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[3]);
- TetrahedralInterpFloat(ContextID, Input + 1, Tmp1, &p1);
+ X0 = p -> opta[2] * x0;
+ X1 = (fclamp(Input[1]) >= 1.0 ? 0 : p->opta[2]);
- T = LutTable + K1;
- p1.Table = T;
- TetrahedralInterpFloat(ContextID, Input + 1, Tmp2, &p1);
+ Y0 = p -> opta[1] * y0;
+ Y1 = (fclamp(Input[2]) >= 1.0 ? 0 : p->opta[1]);
- for (i=0; i < p -> nOutputs; i++)
- {
- cmsFloat32Number y0 = Tmp1[i];
- cmsFloat32Number y1 = Tmp2[i];
+ Z0 = p -> opta[0] * z0;
+ Z1 = (fclamp(Input[3]) >= 1.0 ? 0 : p->opta[0]);
+
+ LutTable = (cmsFloat32Number*) p -> Table;
+ LutTable += K0 + X0 + Y0 + Z0;
+
+ /* We carefully choose the following tests, a) cos these
+ * work nicely in SSE (see CAL), and b) because, as well
+ * as the standard 24 pentachorons, we get some useful
+ * special cases. */
+ which = (rx > ry ? 1 : 0) +
+ (ry > rz ? 2 : 0) +
+ (rz > rk ? 4 : 0) +
+ (rk > rx ? 8 : 0) +
+ (rz > rx ? 16 : 0) +
+ (rk > ry ? 32 : 0);
+
+ o4 = X1+Y1+Z1+K1;
+ switch(which)
+ {
+ default: /* Never happens, but stops the compiler complaining of uninitialised vars */
+ case 0x00: /* x == y == z == k - special case */
+ m1 = rx; goto one_lerp;
+ case 0x01: /* x > k == z == y - special case */
+ o1 = X1; m1 = rx; m2 = ry; goto two_lerps;
+ case 0x18: /* y == z == k > x - special case */
+ o1 = Y1+Z1+K1; m1 = ry; m2 = rx; goto two_lerps;
+ case 0x04: /* z == y == x > k - special case */
+ o1 = X1+Y1+Z1; m1 = ry; m2 = rk; goto two_lerps;
+ case 0x28: /* k > z == y == x - special case */
+ o1 = K1; m1 = rk; m2 = ry; goto two_lerps;
+ case 0x02: /* y >= x >= k >= z */
+ o1 = Y1; o2 = X1; o3 = K1; m1 = ry; m2 = rx; m3 = rk; m4 = rz; break;
+ case 0x03: /* x > y >= k >= z */
+ o1 = X1; o2 = Y1; o3 = K1; m1 = rx; m2 = ry; m3 = rk; m4 = rz; break;
+ case 0x05: /* x >= z >= y >= k */
+ o1 = X1; o2 = Z1; o3 = Y1; m1 = rx; m2 = rz; m3 = ry; m4 = rk; break;
+ case 0x06: /* y >= x >= z > k */
+ o1 = Y1; o2 = X1; o3 = Z1; m1 = ry; m2 = rx; m3 = rz; m4 = rk; break;
+ case 0x07: /* x > y > z > k */
+ o1 = X1; o2 = Y1; o3 = Z1; m1 = rx; m2 = ry; m3 = rz; m4 = rk; break;
+ case 0x0a: /* y >= k > x >= z */
+ o1 = Y1; o2 = K1; o3 = X1; m1 = ry; m2 = rk; m3 = rx; m4 = rz; break;
+ case 0x14: /* z >= y >= x >= k */
+ o1 = Z1; o2 = Y1; o3 = X1; m1 = rz; m2 = ry; m3 = rx; m4 = rk; break;
+ case 0x15: /* z > x >= y >= k */
+ o1 = Z1; o2 = X1; o3 = Y1; m1 = rz; m2 = rx; m3 = ry; m4 = rk; break;
+ case 0x16: /* y >= z > x >= k */
+ o1 = Y1; o2 = Z1; o3 = X1; m1 = ry; m2 = rz; m3 = rx; m4 = rk; break;
+ case 0x1a: /* y >= k >= z > x */
+ o1 = Y1; o2 = K1; o3 = Z1; m1 = ry; m2 = rk; m3 = rz; m4 = rx; break;
+ case 0x1c: /* z >= y >= k > x */
+ o1 = Z1; o2 = Y1; o3 = K1; m1 = rz; m2 = ry; m3 = rk; m4 = rx; break;
+ case 0x1e: /* y > z > k > x */
+ o1 = Y1; o2 = Z1; o3 = K1; m1 = ry; m2 = rz; m3 = rk; m4 = rx; break;
+ case 0x21: /* x >= k >= z >= y */
+ o1 = X1; o2 = K1; o3 = Z1; m1 = rx; m2 = rk; m3 = rz; m4 = ry; break;
+ case 0x23: /* x >= k > y > z */
+ o1 = X1; o2 = K1; o3 = Y1; m1 = rx; m2 = rk; m3 = ry; m4 = rz; break;
+ case 0x25: /* x >= z > k > y */
+ o1 = X1; o2 = Z1; o3 = K1; m1 = rx; m2 = rz; m3 = rk; m4 = ry; break;
+ case 0x29: /* k > x >= z >= y */
+ o1 = K1; o2 = X1; o3 = Z1; m1 = rk; m2 = rx; m3 = rz; m4 = ry; break;
+ case 0x2a: /* k > y >= x >= z */
+ o1 = K1; o2 = Y1; o3 = X1; m1 = rk; m2 = ry; m3 = rx; m4 = rz; break;
+ case 0x2b: /* k > x > y > z */
+ o1 = K1; o2 = X1; o3 = Y1; m1 = rk; m2 = rx; m3 = ry; m4 = rz; break;
+ case 0x35: /* z > x >= k > y */
+ o1 = Z1; o2 = X1; o3 = K1; m1 = rz; m2 = rx; m3 = rk; m4 = ry; break;
+ case 0x38: /* k >= z >= y >= x */
+ o1 = K1; o2 = Z1; o3 = Y1; m1 = rk; m2 = rz; m3 = ry; m4 = rx; break;
+ case 0x39: /* k >= z > x > y */
+ o1 = K1; o2 = Z1; o3 = X1; m1 = rk; m2 = rz; m3 = rx; m4 = ry; break;
+ case 0x3a: /* k > y > z > x */
+ o1 = K1; o2 = Y1; o3 = Z1; m1 = rk; m2 = ry; m3 = rz; m4 = rx; break;
+ case 0x3c: /* z > k > y >= x */
+ o1 = Z1; o2 = K1; o3 = Y1; m1 = rz; m2 = rk; m3 = ry; m4 = rx; break;
+ case 0x3d: /* z > k > x > y */
+ o1 = Z1; o2 = K1; o3 = X1; m1 = rz; m2 = rk; m3 = rx; m4 = ry; break;
+ }
+ assert(m1 >= m2 && m2 >= m3 && m3 >= m4);
+ o2 += o1;
+ o3 += o2;
+ for (OutChan=TotalOut; OutChan != 0; OutChan--) {
+ c1 = LutTable[o1];
+ c2 = LutTable[o2];
+ c3 = LutTable[o3];
+ c4 = LutTable[o4] - c3;
+ c0 = *LutTable++;
+ c3 -= c2;
+ c2 -= c1;
+ c1 -= c0;
+
+ *Out++ = c0 + c1 * m1 + c2 * m2 + c3 * m3 + c4 * m4;
+ }
+ return;
- Output[i] = y0 + (y1 - y0) * rest;
- }
-}
+two_lerps:
+ assert(m1 >= m2);
+ for (OutChan=TotalOut; OutChan != 0; OutChan--) {
+ c1 = LutTable[o1];
+ c2 = LutTable[o4] - c1;
+ c0 = *LutTable++;
+ c1 -= c0;
+
+ *Out++ = c0 + c1 * m1 + c2 * m2;
+ }
+ return;
+
+one_lerp:
+ for (OutChan=TotalOut; OutChan != 0; OutChan--) {
+ c1 = LutTable[o4];
+ c0 = *LutTable++;
+ c1 -= c0;
+ *Out++ = c0 + c1 * m1;
+ }
+ return;
+}
static CMS_NO_SANITIZE
void Eval5Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
register cmsUInt16Number Output[],
register const cmsInterpParams* p16)
{
- const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
- cmsS15Fixed16Number fk;
- cmsS15Fixed16Number k0, rk;
- int K0, K1;
- const cmsUInt16Number* T;
- cmsUInt32Number i;
- cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
-
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- k0 = FIXED_TO_INT(fk);
- rk = FIXED_REST_TO_INT(fk);
-
- K0 = p16 -> opta[4] * k0;
- K1 = p16 -> opta[4] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
-
- p1 = *p16;
- memmove(&p1.Domain[0], &p16 ->Domain[1], 4*sizeof(cmsUInt32Number));
-
- T = LutTable + K0;
- p1.Table = T;
-
- Eval4Inputs(ContextID, Input + 1, Tmp1, &p1);
+ cmsS15Fixed16Number fk;
+ cmsUInt32Number i, n;
+ cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p16;
- T = LutTable + K1;
- p1.Table = T;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 4*sizeof(cmsUInt32Number));
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[4] * FIXED_TO_INT(fk);
- Eval4Inputs(ContextID, Input + 1, Tmp2, &p1);
+ Eval4Inputs(ContextID, Input + 1, Output, &p1);
- for (i=0; i < p16 -> nOutputs; i++) {
+ if (Input[0] == 0xFFFFU)
+ return;
- Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
- }
+ p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[4];
+ Eval4Inputs(ContextID, Input + 1, Tmp, &p1);
+ fk = FIXED_REST_TO_INT(fk);
+ n = p16 -> nOutputs;
+ for (i=0; i < n; i++)
+ Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1125,42 +1356,36 @@ void Eval5InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0, K0, K1;
- const cmsFloat32Number* T;
- cmsUInt32Number i;
- cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0;
+ cmsUInt32Number i, n;
+ cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p;
+ cmsFloat32Number i0 = fclamp(Input[0]);
- pk = fclamp(Input[0]) * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
+ pk = i0 * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- K0 = p -> opta[4] * k0;
- K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[4]);
+ memmove(&p1.Domain[0], &p ->Domain[1], 4*sizeof(cmsUInt32Number));
+ p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[4] * k0;
- p1 = *p;
- memmove(&p1.Domain[0], &p ->Domain[1], 4*sizeof(cmsUInt32Number));
+ Eval4InputsFloat(ContextID, Input + 1, Output, &p1);
- T = LutTable + K0;
- p1.Table = T;
+ if (i0 == 1.0)
+ return;
- Eval4InputsFloat(ContextID, Input + 1, Tmp1, &p1);
+ p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[4];
+ Eval4InputsFloat(ContextID, Input + 1, Tmp, &p1);
- T = LutTable + K1;
- p1.Table = T;
+ n = p -> nOutputs;
+ for (i=0; i < n; i++) {
+ cmsFloat32Number y0 = Output[i];
+ cmsFloat32Number y1 = Tmp[i];
- Eval4InputsFloat(ContextID, Input + 1, Tmp2, &p1);
-
- for (i=0; i < p -> nOutputs; i++) {
-
- cmsFloat32Number y0 = Tmp1[i];
- cmsFloat32Number y1 = Tmp2[i];
-
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
@@ -1170,40 +1395,27 @@ void Eval6Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
register cmsUInt16Number Output[],
register const cmsInterpParams* p16)
{
- const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
- cmsS15Fixed16Number fk;
- cmsS15Fixed16Number k0, rk;
- int K0, K1;
- const cmsUInt16Number* T;
- cmsUInt32Number i;
- cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- k0 = FIXED_TO_INT(fk);
- rk = FIXED_REST_TO_INT(fk);
-
- K0 = p16 -> opta[5] * k0;
- K1 = p16 -> opta[5] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
-
- p1 = *p16;
- memmove(&p1.Domain[0], &p16 ->Domain[1], 5*sizeof(cmsUInt32Number));
-
- T = LutTable + K0;
- p1.Table = T;
+ cmsS15Fixed16Number fk;
+ cmsUInt32Number i, n;
+ cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p16;
- Eval5Inputs(ContextID, Input + 1, Tmp1, &p1);
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 5*sizeof(cmsUInt32Number));
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[5] * FIXED_TO_INT(fk);
- T = LutTable + K1;
- p1.Table = T;
+ Eval5Inputs(ContextID, Input + 1, Output, &p1);
- Eval5Inputs(ContextID, Input + 1, Tmp2, &p1);
+ if (Input[0] == 0xFFFFU)
+ return;
- for (i=0; i < p16 -> nOutputs; i++) {
-
- Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
- }
+ p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[5];
+ Eval5Inputs(ContextID, Input + 1, Tmp, &p1);
+ fk = FIXED_REST_TO_INT(fk);
+ n = p16 -> nOutputs;
+ for (i=0; i < n; i++)
+ Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1212,42 +1424,36 @@ void Eval6InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0, K0, K1;
- const cmsFloat32Number* T;
- cmsUInt32Number i;
- cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
- pk = fclamp(Input[0]) * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
-
- K0 = p -> opta[5] * k0;
- K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[5]);
-
- p1 = *p;
- memmove(&p1.Domain[0], &p ->Domain[1], 5*sizeof(cmsUInt32Number));
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0;
+ cmsUInt32Number i, n;
+ cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p;
+ cmsFloat32Number i0 = fclamp(Input[0]);
- T = LutTable + K0;
- p1.Table = T;
+ pk = i0 * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- Eval5InputsFloat(ContextID, Input + 1, Tmp1, &p1);
+ memmove(&p1.Domain[0], &p ->Domain[1], 5*sizeof(cmsUInt32Number));
+ p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[5] * k0;
- T = LutTable + K1;
- p1.Table = T;
+ Eval5InputsFloat(ContextID, Input + 1, Output, &p1);
- Eval5InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+ if (i0 == 1.0)
+ return;
- for (i=0; i < p -> nOutputs; i++) {
+ p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[5];
+ Eval5InputsFloat(ContextID, Input + 1, Tmp, &p1);
- cmsFloat32Number y0 = Tmp1[i];
- cmsFloat32Number y1 = Tmp2[i];
+ n = p -> nOutputs;
+ for (i=0; i < n; i++) {
+ cmsFloat32Number y0 = Output[i];
+ cmsFloat32Number y1 = Tmp[i];
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
@@ -1256,39 +1462,27 @@ void Eval7Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
register cmsUInt16Number Output[],
register const cmsInterpParams* p16)
{
- const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
- cmsS15Fixed16Number fk;
- cmsS15Fixed16Number k0, rk;
- int K0, K1;
- const cmsUInt16Number* T;
- cmsUInt32Number i;
- cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
-
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- k0 = FIXED_TO_INT(fk);
- rk = FIXED_REST_TO_INT(fk);
-
- K0 = p16 -> opta[6] * k0;
- K1 = p16 -> opta[6] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
-
- p1 = *p16;
- memmove(&p1.Domain[0], &p16 ->Domain[1], 6*sizeof(cmsUInt32Number));
+ cmsS15Fixed16Number fk;
+ cmsUInt32Number i, n;
+ cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p16;
- T = LutTable + K0;
- p1.Table = T;
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 6*sizeof(cmsUInt32Number));
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[6] * FIXED_TO_INT(fk);
- Eval6Inputs(ContextID, Input + 1, Tmp1, &p1);
+ Eval6Inputs(ContextID, Input + 1, Output, &p1);
- T = LutTable + K1;
- p1.Table = T;
+ if (Input[0] == 0xFFFFU)
+ return;
- Eval6Inputs(ContextID, Input + 1, Tmp2, &p1);
+ p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[6];
+ Eval6Inputs(ContextID, Input + 1, Tmp, &p1);
- for (i=0; i < p16 -> nOutputs; i++) {
- Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
- }
+ fk = FIXED_REST_TO_INT(fk);
+ n = p16 -> nOutputs;
+ for (i=0; i < n; i++)
+ Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1297,44 +1491,36 @@ void Eval7InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0, K0, K1;
- const cmsFloat32Number* T;
- cmsUInt32Number i;
- cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
- pk = fclamp(Input[0]) * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
-
- K0 = p -> opta[6] * k0;
- K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[6]);
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0;
+ cmsUInt32Number i, n;
+ cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p;
+ cmsFloat32Number i0 = fclamp(Input[0]);
- p1 = *p;
- memmove(&p1.Domain[0], &p ->Domain[1], 6*sizeof(cmsUInt32Number));
+ pk = i0 * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- T = LutTable + K0;
- p1.Table = T;
+ memmove(&p1.Domain[0], &p ->Domain[1], 6*sizeof(cmsUInt32Number));
+ p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[6] * k0;
- Eval6InputsFloat(ContextID, Input + 1, Tmp1, &p1);
+ Eval6InputsFloat(ContextID, Input + 1, Output, &p1);
- T = LutTable + K1;
- p1.Table = T;
+ if (i0 == 1.0)
+ return;
- Eval6InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+ p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[6];
+ Eval6InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ n = p -> nOutputs;
+ for (i=0; i < n; i++) {
+ cmsFloat32Number y0 = Output[i];
+ cmsFloat32Number y1 = Tmp[i];
- for (i=0; i < p -> nOutputs; i++) {
-
- cmsFloat32Number y0 = Tmp1[i];
- cmsFloat32Number y1 = Tmp2[i];
-
- Output[i] = y0 + (y1 - y0) * rest;
-
- }
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
static CMS_NO_SANITIZE
@@ -1342,37 +1528,27 @@ void Eval8Inputs(cmsContext ContextID, register const cmsUInt16Number Input[],
register cmsUInt16Number Output[],
register const cmsInterpParams* p16)
{
- const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;
- cmsS15Fixed16Number fk;
- cmsS15Fixed16Number k0, rk;
- int K0, K1;
- const cmsUInt16Number* T;
- cmsUInt32Number i;
- cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
- fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
- k0 = FIXED_TO_INT(fk);
- rk = FIXED_REST_TO_INT(fk);
-
- K0 = p16 -> opta[7] * k0;
- K1 = p16 -> opta[7] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));
+ cmsS15Fixed16Number fk;
+ cmsUInt32Number i, n;
+ cmsUInt16Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p16;
- p1 = *p16;
- memmove(&p1.Domain[0], &p16 ->Domain[1], 7*sizeof(cmsUInt32Number));
+ memmove(&p1.Domain[0], &p16 ->Domain[1], 7*sizeof(cmsUInt32Number));
+ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);
+ p1.Table = ((cmsUInt16Number*)p16 -> Table) + p16 -> opta[7] * FIXED_TO_INT(fk);
- T = LutTable + K0;
- p1.Table = T;
+ Eval7Inputs(ContextID, Input + 1, Output, &p1);
- Eval7Inputs(ContextID, Input + 1, Tmp1, &p1);
+ if (Input[0] == 0xFFFFU)
+ return;
- T = LutTable + K1;
- p1.Table = T;
- Eval7Inputs(ContextID, Input + 1, Tmp2, &p1);
+ p1.Table = ((cmsUInt16Number*)p1.Table) + p16 -> opta[7];
+ Eval7Inputs(ContextID, Input + 1, Tmp, &p1);
- for (i=0; i < p16 -> nOutputs; i++) {
- Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);
- }
+ fk = FIXED_REST_TO_INT(fk);
+ n = p16 -> nOutputs;
+ for (i=0; i < n; i++)
+ Output[i] = LinearInterp(fk, Output[i], Tmp[i]);
}
@@ -1382,43 +1558,36 @@ void Eval8InputsFloat(cmsContext ContextID, const cmsFloat32Number Input[],
cmsFloat32Number Output[],
const cmsInterpParams* p)
{
- const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;
- cmsFloat32Number rest;
- cmsFloat32Number pk;
- int k0, K0, K1;
- const cmsFloat32Number* T;
- cmsUInt32Number i;
- cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];
- cmsInterpParams p1;
-
- pk = fclamp(Input[0]) * p->Domain[0];
- k0 = _cmsQuickFloor(pk);
- rest = pk - (cmsFloat32Number) k0;
-
- K0 = p -> opta[7] * k0;
- K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[7]);
+ cmsFloat32Number rest;
+ cmsFloat32Number pk;
+ int k0;
+ cmsUInt32Number i, n;
+ cmsFloat32Number Tmp[MAX_STAGE_CHANNELS];
+ cmsInterpParams p1 = *p;
+ cmsFloat32Number i0 = fclamp(Input[0]);
- p1 = *p;
- memmove(&p1.Domain[0], &p ->Domain[1], 7*sizeof(cmsUInt32Number));
+ pk = i0 * p->Domain[0];
+ k0 = _cmsQuickFloor(pk);
+ rest = pk - (cmsFloat32Number) k0;
- T = LutTable + K0;
- p1.Table = T;
+ memmove(&p1.Domain[0], &p ->Domain[1], 7*sizeof(cmsUInt32Number));
+ p1.Table = ((cmsFloat32Number*) p -> Table) + p -> opta[7] * k0;
- Eval7InputsFloat(ContextID, Input + 1, Tmp1, &p1);
+ Eval7InputsFloat(ContextID, Input + 1, Output, &p1);
- T = LutTable + K1;
- p1.Table = T;
+ if (i0 == 1.0)
+ return;
- Eval7InputsFloat(ContextID, Input + 1, Tmp2, &p1);
+ p1.Table = ((cmsFloat32Number*) p1.Table) + p->opta[7];
+ Eval7InputsFloat(ContextID, Input + 1, Tmp, &p1);
+ n = p -> nOutputs;
+ for (i=0; i < n; i++) {
+ cmsFloat32Number y0 = Output[i];
+ cmsFloat32Number y1 = Tmp[i];
- for (i=0; i < p -> nOutputs; i++) {
-
- cmsFloat32Number y0 = Tmp1[i];
- cmsFloat32Number y1 = Tmp2[i];
-
- Output[i] = y0 + (y1 - y0) * rest;
- }
+ Output[i] = y0 + (y1 - y0) * rest;
+ }
}
// The default factory
@@ -1486,10 +1655,17 @@ cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cm
case 4: // CMYK lut
- if (IsFloat)
- Interpolation.LerpFloat = Eval4InputsFloat;
- else
- Interpolation.Lerp16 = Eval4Inputs;
+ if (IsTrilinear) {
+ if (IsFloat)
+ Interpolation.LerpFloat = QuadrilinearInterpFloat;
+ else
+ Interpolation.Lerp16 = QuadrilinearInterp16;
+ } else {
+ if (IsFloat)
+ Interpolation.LerpFloat = Eval4InputsFloat;
+ else
+ Interpolation.Lerp16 = Eval4Inputs;
+ }
break;
case 5: // 5 Inks
diff --git a/lcms2mt/src/cmsio1.c b/lcms2mt/src/cmsio1.c
index f95a19be..627f8598 100644
--- a/lcms2mt/src/cmsio1.c
+++ b/lcms2mt/src/cmsio1.c
@@ -308,6 +308,7 @@ cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsContext ContextID, cmsHPROFILE hProfi
cmsTagTypeSignature OriginalType;
cmsTagSignature tag16;
cmsTagSignature tagFloat;
+ int k;
// On named color, take the appropriate tag
if (cmsGetDeviceClass(ContextID, hProfile) == cmsSigNamedColorClass) {
@@ -345,9 +346,17 @@ cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsContext ContextID, cmsHPROFILE hProfi
return _cmsReadFloatInputTag(ContextID, hProfile, tagFloat);
}
- // Revert to perceptual if no tag is found
+ /* There are profiles out there (not legal) that may only have a
+ colorimetric or saturation tag and no perceptual tag. If we
+ can't find the specified intent be a bit robust and not give
+ up until we can't find any table, starting with perceptual */
if (!cmsIsTag(ContextID, hProfile, tag16)) {
- tag16 = Device2PCS16[0];
+ for (k = 0; k < 3; k++) {
+ if (cmsIsTag(ContextID, hProfile, Device2PCS16[k])) {
+ tag16 = Device2PCS16[k];
+ break;
+ }
+ }
}
if (cmsIsTag(ContextID, hProfile, tag16)) { // Is there any LUT-Based table?
diff --git a/lcms2mt/src/cmsopt.c b/lcms2mt/src/cmsopt.c
index 93d78f26..fedb5043 100644
--- a/lcms2mt/src/cmsopt.c
+++ b/lcms2mt/src/cmsopt.c
@@ -695,8 +695,10 @@ cmsBool OptimizeByResampling(cmsContext ContextID, cmsPipeline** Lut, cmsUInt32N
}
}
+ ContextID->dwFlags = *dwFlags;
// Allocate the CLUT
CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, Src ->InputChannels, Src->OutputChannels, NULL);
+ ContextID->dwFlags = 0;
if (CLUT == NULL) goto Error;
// Add the CLUT to the destination LUT
diff --git a/lcms2mt/src/lcms2_internal.h b/lcms2mt/src/lcms2_internal.h
index bc971fc5..89625592 100644
--- a/lcms2mt/src/lcms2_internal.h
+++ b/lcms2mt/src/lcms2_internal.h
@@ -517,6 +517,8 @@ struct _cmsContext_struct {
// If NULL, then it reverts to global Context0
_cmsMemPluginChunkType DefaultMemoryManager; // The allocators used for creating the context itself. Cannot be overridden
+
+ cmsUInt32Number dwFlags; // Horrid, but safe hack
};
// Returns a pointer to a valid context structure, including the global one if id is zero.
diff --git a/lib/Fontmap.URW-136.T1 b/lib/Fontmap.URW-136.T1
deleted file mode 100644
index 0d35cf28..00000000
--- a/lib/Fontmap.URW-136.T1
+++ /dev/null
@@ -1,580 +0,0 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
-% All Rights Reserved.
-%
-% This software is provided AS-IS with no warranty, either express or
-% implied.
-%
-% This software is distributed under license and may not be copied,
-% modified or distributed except as expressly authorized under the terms
-% of the license contained in the file LICENSE in this distribution.
-%
-% Refer to licensing information at http://www.artifex.com or contact
-% Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
-% CA 94945, U.S.A., +1(415)492-9861, for further information.
-%
-
-% $Id: Fontmap.GS 8978 2008-08-12 23:44:53Z ray $
-% Fontmap - standard font catalog for Ghostscript.
-
-% ----------------------------------------------------------------
-
-% This file is a catalog of fonts known to Ghostscript. Any font
-% that is to be loaded automatically when named must be in this catalog,
-% except for fonts that Ghostscript finds automatically in directories
-% named in the GS_FONTPATH environment variable.
-
-% Each font has an entry consisting of three items:
-%
-% - The name by which the font is known inside Ghostscript
-% (a Ghostscript name preceded by a `/', or a string enclosed
-% in parentheses). This is used to find the file from which
-% a font of a given name should be loaded.
-%
-% - Information depending on whether this is a real font or a
-% font alias:
-%
-% - For real fonts, the name of the Ghostscript font
-% file (a Ghostscript string, enclosed in parentheses).
-% The filename should include the extension, which (by
-% convention) is `.gsf'. `.pfa' and `.pfb' files are
-% also usable as fonts for Ghostscript.
-%
-% - For font aliases, the name of the font which should
-% be used when this one is requested, preceded by a
-% `/'. See the entry for Charter below for an example.
-% Note that an alias name cannot be enclosed in parentheses.
-%
-% - At least one space or tab, and a terminating semicolon.
-
-% The following table is executed as a PostScript file.
-% If you add new entries, be sure to copy the punctuation accurately;
-% in particular, you must leave at least one space or tab between each
-% field in the entry. Also, please read fonts.doc for important information
-% about font names.
-
-% PDF interpreter evaluates hexadecimal escapes in PDF font names before
-% looking up the font. When the resulting name cannot be represented using
-% PostScript name syntax, the string can be used instead of the name.
-
-% Note that .pfa and .pfb fonts are compatible with Adobe Type Manager
-% and other programs that don't include full PostScript interpreters,
-% as well as with PostScript interpreters; .gsf fonts are compatible with
-% PostScript interpreters, but not with ATM or similar programs.
-
-%
-
-%
-% The 136 font set from URW in .PFB (Printer Font Binary) format
-%
-
-/AntiqueOli-Reg (a008003i.pfb) ;
-/AntiqueOli-Bol (a008006i.pfb) ;
-/AntiqueOli-Com (a008007i.pfb) ;
-/AntiqueOli-RegIta (a008023i.pfb) ;
-/URWGothic-Boo (a010013l.pfb) ;
-/URWGothic-Dem (a010015l.pfb) ;
-/URWGothic-BooObl (a010033l.pfb) ;
-/URWGothic-DemObl (a010035l.pfb) ;
-/A028-Lig (a028012i.pfb) ;
-/A028-Med (a028014i.pfb) ;
-/A028-MedIta (a028034i.pfb) ;
-/AtramentURW (a096003i.pfb) ;
-/AlonURW (a097003i.pfb) ;
-/AfficheURW (a098003i.pfb) ;
-/BaskervilleOrnaments (b004000i.pfb) ;
-/BaskervilleURW-Reg (b004003i.pfb) ;
-/BaskervilleURW-Bla (b004006i.pfb) ;
-/BaskervilleURW-Ita (b004023i.pfb) ;
-/BaskervilleURW-BlaIta (b004026i.pfb) ;
-/BookmanURW-Lig (b018012l.pfb) ;
-/BookmanURW-DemBol (b018015l.pfb) ;
-/BookmanURW-LigIta (b018032l.pfb) ;
-/BookmanURW-DemBolIta (b018035l.pfb) ;
-/BodoniAnt-Reg (b044003i.pfb) ;
-/BodoniAnt-Bol (b044004i.pfb) ;
-/BodoniAnt-Ita (b044023i.pfb) ;
-/BodoniAnt-BolIta (b044024i.pfb) ;
-/Bodoni-Ult (b049020i.pfb) ;
-/Bodoni-Com (b049132i.pfb) ;
-/Clarendon-Lig (c011002i.pfb) ;
-/Clarendon-Med (c011004i.pfb) ;
-/Clarendon-Bol (c011007i.pfb) ;
-/Cooper-Bla (c018016i.pfb) ;
-/Cooper-BlaIta (c018036i.pfb) ;
-/Copperplate-Med (c041014i.pfb) ;
-/Copperplate-Bol (c041018i.pfb) ;
-/CenturySchURW-Rom (c059013l.pfb) ;
-/CenturySchURW-Bol (c059016l.pfb) ;
-/CenturySchURW-Ita (c059033l.pfb) ;
-/CenturySchURW-BolIta (c059036l.pfb) ;
-/CoronetURW (c093000i.pfb) ;
-/Dingbats (d050000l.pfb) ;
-/Eurostile-Reg (e004003i.pfb) ;
-/Eurostile-Bol (e004006i.pfb) ;
-/Eurostile-Ext (e004083i.pfb) ;
-/Eurostile-BolExt (e004086i.pfb) ;
-/G032-Lig (g032012i.pfb) ;
-/G032-Reg (g032013i.pfb) ;
-/G032-Bol (g032016i.pfb) ;
-/G032-ExtBol (g032017i.pfb) ;
-/G032-LigIta (g032032i.pfb) ;
-/G032-Ita (g032033i.pfb) ;
-/G032-BolIta (g032036i.pfb) ;
-/G032Con-Reg (g032053i.pfb) ;
-/G032Con-Bol (g032056i.pfb) ;
-/GaramondURW-Reg (g043003i.pfb) ;
-/GaramondURW-Dem (g043004i.pfb) ;
-/GaramondURW-Ita (g043023i.pfb) ;
-/GaramondURW-DemIta (g043024i.pfb) ;
-/Goudy-Reg (g047013i.pfb) ;
-/Goudy-Med (g047014i.pfb) ;
-/Goudy-Bol (g047016i.pfb) ;
-/Goudy-Ita (g047033i.pfb) ;
-/Goudy-MedIta (g047034i.pfb) ;
-/Joanna-Reg (j011013i.pfb) ;
-/Joanna-Bol (j011016i.pfb) ;
-/Joanna-Ita (j011033i.pfb) ;
-/Joanna-BolIta (j011036i.pfb) ;
-/Lubalin-Boo (l005013i.pfb) ;
-/Lubalin-Dem (l005015i.pfb) ;
-/Lubalin-BooObl (l005033i.pfb) ;
-/Lubalin-DemObl (l005035i.pfb) ;
-/LetterGot-Reg (l021003i.pfb) ;
-/LetterGot-Bol (l021004i.pfb) ;
-/LetterGot-Ita (l021023i.pfb) ;
-/LetterGot-BolIta (l021024i.pfb) ;
-/MonaLis (m034000i.pfb) ;
-/Mauritius (m048000i.pfb) ;
-/NimbusSanNo2-Reg (n019003i.pfb) ;
-/NimbusSan-Reg (n019003l.pfb) ;
-/NimbusSan-Bol (n019004l.pfb) ;
-/NimbusSanNo2-Bol (n019004i.pfb) ;
-/NimbusSanNo2-BolIta (n019023i.pfb) ;
-/NimbusSan-Ita (n019023l.pfb) ;
-/NimbusSanNo2-Ita (n019024i.pfb) ;
-/NimbusSan-BolIta (n019024l.pfb) ;
-/NimbusSanCon-Reg (n019043i.pfb) ;
-/NimbusSanNar-Reg (n019043l.pfb) ;
-/NimbusSanNar-Bol (n019044l.pfb) ;
-/NimbusSanCon-Bol (n019045i.pfb) ;
-/NimbusSanCon-Ita (n019063i.pfb) ;
-/NimbusSanNar-Ita (n019063l.pfb) ;
-/NimbusSanNar-BolIta (n019064l.pfb) ;
-%
-% This PFB font is not legal as it does not contain a /.notdef glyph
-%/NimbusSanCon-BolIta (n019065i.pfb) ;
-%
-/NimbusRomNo9-Reg (n021003i.pfb) ;
-/NimbusRom-Reg (n021003l.pfb) ;
-/NimbusRomNo9-Bol (n021004i.pfb) ;
-/NimbusRom-Med (n021004l.pfb) ;
-/NimbusRomNo9-Ita (n021023i.pfb) ;
-/NimbusRom-Ita (n021023l.pfb) ;
-/NimbusRomNo9-BolIta (n021024i.pfb) ;
-/NimbusRom-MedIta (n021024l.pfb) ;
-/NimbusMon-Reg (n022003l.pfb) ;
-/NimbusMon-Bol (n022004l.pfb) ;
-/NimbusMon-Obl (n022023l.pfb) ;
-/NimbusMon-BolObl (n022024l.pfb) ;
-/NimbusTypewriter-Regular (n056003m.pfb) ;
-/NimbusRomanScreen-Regular (n057003i.pfb) ;
-/NimbusGUI-Regular (n058003i.pfb) ;
-/NimbusSansScreen-Regular (n059003i.pfb) ;
-/ClassicoURW-Reg (o004003i.pfb) ;
-/ClassicoURW-Bol (o004004i.pfb) ;
-/ClassicoURW-Ita (o004023i.pfb) ;
-/ClassicoURW-BolIta (o004024i.pfb) ;
-/PalladioURW-Rom (p052003l.pfb) ;
-/PalladioURW-Bol (p052004l.pfb) ;
-/PalladioURW-Ita (p052023l.pfb) ;
-/PalladioURW-BolIta (p052024l.pfb) ;
-/StandardSymL (s050000l.pfb) ;
-/URWSignsAndSymD (s052000d.pfb) ;
-/URWClassicSan-Lig (u001002i.pfb) ;
-/URWClassicSan-Reg (u001003i.pfb) ;
-/URWClassicSan-Bol (u001004i.pfb) ;
-/URWClassicSan-LigIta (u001022i.pfb) ;
-/URWClassicSan-Ita (u001023i.pfb) ;
-/URWClassicSan-BolIta (u001024i.pfb) ;
-/URWClassicSanCon-Reg (u001043i.pfb) ;
-/URWClassicSanCon-Bol (u001044i.pfb) ;
-/URWClassicSanCon-RegIta (u001063i.pfb) ;
-/URWClassicSanCon-BolIta (u001064i.pfb) ;
-/URWClassicSanExt-Reg (u001083i.pfb) ;
-/URWClassicSanExt-Bol (u001085i.pfb) ;
-/URWClassicSanExt-Ita (u001103i.pfb) ;
-/URWClassicSanExt-BolIta (u001105i.pfb) ;
-/UngerCha (u022003i.pfb) ;
-/ChanceryURW-MedIta (z003034l.pfb) ;
-
-% Aliases
-% These map the Adobe font names to the closest match in the URW font set
-%
-/AlbertusMT-Light /A028-Lig ;
-/AlbertusMT /A028-Med ;
-/AlbertusMT-Italic /A028-MedIta ;
-/AntiqueOlive-Roman /AntiqueOli-Reg ;
-/AntiqueOlive-Bold /AntiqueOli-Bol ;
-/AntiqueOlive-Compact /AntiqueOli-Com ;
-/AntiqueOlive-Italic /AntiqueOli-RegIta ;
-/Apple-Chancery /UngerCha ;
-/ArialMT /NimbusSanNo2-Reg ;
-%
-% The FontName entries for the next two fonts are reversed
-%
-/Arial-ItalicMT /NimbusSanNo2-BolIta ;
-/Arial-BoldItalicMT /NimbusSanNo2-Ita ;
-/Arial-BoldMT /NimbusSanNo2-Bol ;
-/AvantGarde-Book /URWGothic-Boo ;
-/AvantGarde-Demi /URWGothic-Dem ;
-/AvantGarde-BookOblique /URWGothic-BooObl ;
-/AvantGarde-DemiOblique /URWGothic-DemObl ;
-/Bodoni /BodoniAnt-Reg ;
-/Bodoni-Bold /BodoniAnt-Bol ;
-/Bodoni-Italic /BodoniAnt-Ita ;
-/Bodoni-BoldItalic /BodoniAnt-BolIta ;
-/Bodoni-Poster /Bodoni-Ult ;
-/Bodoni-PosterCompressed /Bodoni-Com ;
-/Bookman-Light /BookmanURW-Lig ;
-/Bookman-Demi /BookmanURW-DemBol ;
-/Bookman-LightItalic /BookmanURW-LigIta ;
-/Bookman-DemiItalic /BookmanURW-DemBolIta ;
-/Carta /URWSignsAndSymD ;
-/Chicago /NimbusGUI-Regular ;
-/Clarendon-Light /Clarendon-Lig ;
-/Clarendon /Clarendon-Med ;
-/Clarendon-Bold /Clarendon-Bol ;
-/CooperBlack /Cooper-Bla ;
-/CooperBlack-Italic /Cooper-BlaIta ;
-/Copperplate-ThirtyTwoBC /Copperplate-Med ;
-/Copperplate-ThirtyThreeBC /Copperplate-Bol ;
-/Coronet-Regular /CoronetURW ;
-/Courier /NimbusMon-Reg ;
-/Courier-BoldOblique /NimbusMon-BolObl ;
-/Courier-Oblique /NimbusMon-Obl ;
-/Courier-Bold /NimbusMon-Bol ;
-/Eurostile /Eurostile-Reg ;
-/Eurostile-Bold /Eurostile-Bol ;
-/Eurostile-ExtendedTwo /Eurostile-Ext ;
-/Eurostile-BoldExtendedTwo /Eurostile-BolExt ;
-/Geneva /NimbusSansScreen-Regular ;
-/GillSans-Light /G032-Lig ;
-/GillSans /G032-Reg ;
-/GillSans-Bold /G032-Bol ;
-/GillSans-ExtraBold /G032-ExtBol ;
-/GillSans-LightItalic /G032-LigIta ;
-/GillSans-Italic /G032-Ita ;
-/GillSans-BoldItalic /G032-BolIta ;
-/GillSans-Condensed /G032Con-Reg ;
-/GillSans-BoldCondensed /G032Con-Bol ;
-/Goudy /Goudy-Reg ;
-/Goudy-Bold /Goudy-Med ;
-/Goudy-ExtraBold /Goudy-Bol ;
-/Goudy-Italic /Goudy-Ita ;
-/Goudy-BoldItalic /Goudy-MedIta ;
-/Helvetica /NimbusSan-Reg ;
-/Helvetica-Bold /NimbusSan-Bol ;
-/Helvetica-Oblique /NimbusSan-Ita ;
-/Helvetica-BoldOblique /NimbusSan-BolIta ;
-/Helvetica-Condensed /NimbusSanCon-Reg ;
-/Helvetica-Narrow /NimbusSanNar-Reg ;
-/Helvetica-Narrow-Bold /NimbusSanNar-Bol ;
-/Helvetica-Condensed-Bold /NimbusSanCon-Bol ;
-/Helvetica-Condensed-Oblique /NimbusSanCon-Ita ;
-/Helvetica-Narrow-Oblique /NimbusSanNar-Ita ;
-/Helvetica-Narrow-BoldOblique /NimbusSanNar-BolIta ;
-/Helvetica-Condensed-BoldObl /NimbusSanCon-BolIta ;
-/HoeflerText-Ornaments /BaskervilleOrnaments ;
-/HoeflerText-Regular /BaskervilleURW-Reg ;
-/HoeflerText-Black /BaskervilleURW-Bla ;
-/HoeflerText-Italic /BaskervilleURW-Ita ;
-/HoeflerText-BlackItalic /BaskervilleURW-BlaIta ;
-/JoannaMT /Joanna-Reg ;
-/JoannaMT-Bold /Joanna-Bol ;
-/JoannaMT-Italic /Joanna-Ita ;
-/JoannaMT-BoldItalic /Joanna-BolIta ;
-/LetterGothic /LetterGot-Reg ;
-/LetterGothic-Bold /LetterGot-Bol ;
-/LetterGothic-Slanted /LetterGot-Ita ;
-/LetterGothic-BoldSlanted /LetterGot-BolIta ;
-/LubalinGraph-Book /Lubalin-Boo ;
-/LubalinGraph-Demi /Lubalin-Dem ;
-/LubalinGraph-BookOblique /Lubalin-BooObl ;
-/LubalinGraph-DemiOblique /Lubalin-DemObl ;
-/Marigold /Mauritius ;
-/Monaco /NimbusTypewriter-Regular ;
-/MonaLisa-Recut /MonaLis ;
-/NewCenturySchlbk-Roman /CenturySchURW-Rom ;
-/NewCenturySchlbk-Bold /CenturySchURW-Bol ;
-/NewCenturySchlbk-Italic /CenturySchURW-Ita ;
-/NewCenturySchlbk-BoldItalic /CenturySchURW-BolIta ;
-/NewYork /NimbusRomanScreen-Regular ;
-/Optima /ClassicoURW-Reg ;
-/Optima-Bold /ClassicoURW-Bol ;
-/Optima-Italic /ClassicoURW-Ita ;
-/Optima-BoldItalic /ClassicoURW-BolIta ;
-/Oxford /AlonURW ;
-/Palatino-Roman /PalladioURW-Rom ;
-/Palatino-Bold /PalladioURW-Bol ;
-/Palatino-Italic /PalladioURW-Ita ;
-/Palatino-BoldItalic /PalladioURW-BolIta ;
-/StempelGaramond-Roman /GaramondURW-Reg ;
-/StempelGaramond-Bold /GaramondURW-Dem ;
-/StempelGaramond-Italic /GaramondURW-Ita ;
-/StempelGaramond-BoldItalic /GaramondURW-DemIta ;
-/Symbol /StandardSymL ;
-/Tekton /AfficheURW ;
-/Times-Roman /NimbusRom-Reg ;
-/Times-Bold /NimbusRom-Med ;
-/Times-Italic /NimbusRom-Ita ;
-/Times-BoldItalic /NimbusRom-MedIta ;
-/TimesNewRomanPSMT /NimbusRomNo9-Reg ;
-/TimesNewRomanPS-BoldMT /NimbusRomNo9-Bol ;
-/TimesNewRomanPS-ItalicMT /NimbusRomNo9-Ita ;
-/TimesNewRomanPS-BoldItalicMT /NimbusRomNo9-BolIta ;
-/Univers-Light /URWClassicSan-Lig ;
-/Univers /URWClassicSan-Reg ;
-/Univers-Bold /URWClassicSan-Bol ;
-/Univers-LightOblique /URWClassicSan-LigIta ;
-/Univers-Oblique /URWClassicSan-Ita ;
-/Univers-BoldOblique /URWClassicSan-BolIta ;
-/Univers-Condensed /URWClassicSanCon-Reg ;
-/Univers-CondensedBold /URWClassicSanCon-Bol ;
-/Univers-CondensedOblique /URWClassicSanCon-RegIta ;
-/Univers-CondensedBoldOblique /URWClassicSanCon-BolIta ;
-/Univers-Extended /URWClassicSanExt-Reg ;
-/Univers-BoldExt /URWClassicSanExt-Bol ;
-/Univers-ExtendedObl /URWClassicSanExt-Ita ;
-/Univers-BoldExtObl /URWClassicSanExt-BolIta ;
-/ZapfChancery-MediumItalic /ChanceryURW-MedIta ;
-/ZapfDingbats /Dingbats ;
-
-/Taffy /AtramentURW
-
-% Note that for legal reasons ther is no equivalen to Wingdings
-%
-
-
-%
-% Type 1 fonts contributed to the X11R5 distribution.
-%
-
-% The following notice accompanied the Charter fonts.
-%
-% (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.
-
-/CharterBT-Roman (bchr.pfa) ;
-/CharterBT-Italic (bchri.pfa) ;
-/CharterBT-Bold (bchb.pfa) ;
-/CharterBT-BoldItalic (bchbi.pfa) ;
-
-% Aliases
-
-/Charter-Roman /CharterBT-Roman ;
-/Charter-Italic /CharterBT-Italic ;
-/Charter-Bold /CharterBT-Bold ;
-/Charter-BoldItalic /CharterBT-BoldItalic ;
-
-% The following notice accompanied the Utopia font:
-%
-% Permission to use, reproduce, display and distribute the listed
-% typefaces is hereby granted, provided that the Adobe Copyright notice
-% appears in all whole and partial copies of the software and that the
-% following trademark symbol and attribution appear in all unmodified
-% copies of the software:
-%
-% Copyright (c) 1989 Adobe Systems Incorporated
-% Utopia (R)
-% Utopia is a registered trademark of Adobe Systems Incorporated
-%
-% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
-% Metric files) donated are:
-%
-% Utopia Regular
-% Utopia Italic
-% Utopia Bold
-% Utopia Bold Italic
-
-/Utopia-Regular (putr.pfa) ;
-/Utopia-Italic (putri.pfa) ;
-/Utopia-Bold (putb.pfa) ;
-/Utopia-BoldItalic (putbi.pfa) ;
-
-%
-%
-% Fonts contributed by URW GmbH for distribution under the GNU License.
-% The following notice accompanied these fonts:
-%
-% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
-% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
-%
-% Copyright (c) 1992 URW GmbH, Hamburg, Germany
-%
-% 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) later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; wihtout 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 U.S.A.
-%
-% Address:
-% URW GmbH
-% PC Support
-% Harksheider Strasse 102
-% 2000 Hamburg 65
-% Germany
-% Phone: +49 40 60 60 50 (Reception)
-% Phone: +49 40 60 60 52 30 (PC Support)
-% Fax : +49 40 60 60 52 52
-%
-
-/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
-/URWGroteskT-Bold (u004006t.gsf) ;
-
-%
-%
-% Calligraphic Kana fonts. These are distributed under the OFL 1.1:
-%
-% Copyright (c) 1993, Kevin Hartig (kevin.hartig@gmail.com),
-% with Reserved Font Name Calligraphic-Hiragana and Calligraphic-Katakana.
-% This Font Software is licensed under the SIL Open Font License, Version 1.1.
-% This license is available with an FAQ at: http://scripts.sil.org/OFL
-
-% Hiragana and Katakana fonts. The character names are inappropriate,
-% and the encoding is probably not related to any known standard.
-
-/Calligraphic-Hiragana (fhirw.gsf) ;
-/Calligraphic-Katakana (fkarw.gsf) ;
-
-%
-%
-% Public-domain fonts. These have no copyright, and are of unknown quality.
-
-% Cyrillic fonts. The character names are inappropriate,
-% and the encoding is probably not related to any known standard.
-
-/Shareware-Cyrillic-Regular (fcyr.gsf) ;
-/Shareware-Cyrillic-Italic (fcyri.gsf) ;
-
-% Aliases
-/Cyrillic /Cyrillic-Regular ;
-/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
-/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
-
-%
-%
-% Fonts converted from Hershey outlines. These are constructed and
-% maintained manually. These are also in the public domain.
-%
-% The suggested UniqueID's and filenames are constructed differently for
-% these than for the ones above, because of the strange way that the Hershey
-% fonts were constructed. The scheme for these looks like:
-%
-% 42TTXY0
-%
-% TT = typeface, X = ``class'', Y = variation
-%
-% The typeface names and numbers are listed in fonts.mak.
-%
-% class:
-% 0 = normal = r
-% 1 = simplex = s
-% 2 = complex = c
-% 3 = triplex = t
-% 4 = duplex = d
-%
-% variation:
-% 0 = normal (omitted)
-% 1 = oblique = o
-% 2 = italic = i
-% 3 = bold = b
-% 4 = bold oblique = bo
-% 5 = bold italic = bi
-%
-
-% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
-% accents, accented characters, and various other non-alphabetics
-% to the original Hershey fonts. These are "freeware", not to be sold.
-
-/Hershey-Gothic-English (hrger.pfa) ; % 5066533
-/Hershey-Gothic-German (hrgrr.pfa) ;
-/Hershey-Gothic-Italian (hritr.pfa) ;
-
-/Hershey-Plain-Duplex (hrpld.pfa) ;
-/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
-/Hershey-Plain-Triplex (hrplt.pfa) ;
-/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
-
-/Hershey-Script-Complex (hrscc.pfa) ;
-/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
-
-% Fonts created algorithmically from the above.
-
-/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
-/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
-/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
-/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
-/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
-/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
-/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
-
-/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
-/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
-/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
-/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
-
-/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
-/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
-/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
-/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
-
-% Fonts consisting only of characters from the original Hershey
-% distribution. These are Type 3 fonts.
-
-/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
-/Hershey-Greek-Simplex (hrgks.gsf) ;
-
-/Hershey-Plain (hrplr.gsf) ;
-/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
-
-% Fonts created algorithmically from the above.
-
-/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
-/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
-/Hershey-Plain-Oblique (hrplro.gsf) ;
-/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
-/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
-/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
-
-% This font, and only this font among the Hershey fonts, uses
-% the SymbolEncoding.
-
-/Hershey-Symbol (hrsyr.gsf) ; % 5066567
-
-/Arial /ArialMT ;
-/Arial,Bold /Arial-BoldMT ;
-/Arial,Italic /Arial-ItalicMT ;
-/Arial,BoldItalic /Arial-BoldItalicMT ;
-
-/TimesNewRoman /TimesNewRomanPSMT ;
-/TimesNewRoman,Bold /TimesNewRomanPS-BoldMT ;
-/TimesNewRoman,Italic /TimesNewRomanPS-ItalicMT ;
-/TimesNewRoman,BoldItalic /TimesNewRomanPS-BoldItalicMT ;
-
diff --git a/lib/Fontmap.URW-136.TT b/lib/Fontmap.URW-136.TT
deleted file mode 100644
index 2768d69a..00000000
--- a/lib/Fontmap.URW-136.TT
+++ /dev/null
@@ -1,574 +0,0 @@
-% Copyright (C) 2001-2019 Artifex Software, Inc.
-% All Rights Reserved.
-%
-% This software is provided AS-IS with no warranty, either express or
-% implied.
-%
-% This software is distributed under license and may not be copied,
-% modified or distributed except as expressly authorized under the terms
-% of the license contained in the file LICENSE in this distribution.
-%
-% Refer to licensing information at http://www.artifex.com or contact
-% Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
-% CA 94945, U.S.A., +1(415)492-9861, for further information.
-%
-
-% $Id: Fontmap.GS 8978 2008-08-12 23:44:53Z ray $
-% Fontmap - standard font catalog for Ghostscript.
-
-% ----------------------------------------------------------------
-
-% This file is a catalog of fonts known to Ghostscript. Any font
-% that is to be loaded automatically when named must be in this catalog,
-% except for fonts that Ghostscript finds automatically in directories
-% named in the GS_FONTPATH environment variable.
-
-% Each font has an entry consisting of three items:
-%
-% - The name by which the font is known inside Ghostscript
-% (a Ghostscript name preceded by a `/', or a string enclosed
-% in parentheses). This is used to find the file from which
-% a font of a given name should be loaded.
-%
-% - Information depending on whether this is a real font or a
-% font alias:
-%
-% - For real fonts, the name of the Ghostscript font
-% file (a Ghostscript string, enclosed in parentheses).
-% The filename should include the extension, which (by
-% convention) is `.gsf'. `.pfa' and `.ttf' files are
-% also usable as fonts for Ghostscript.
-%
-% - For font aliases, the name of the font which should
-% be used when this one is requested, preceded by a
-% `/'. See the entry for Charter below for an example.
-% Note that an alias name cannot be enclosed in parentheses.
-%
-% - At least one space or tab, and a terminating semicolon.
-
-% The following table is executed as a PostScript file.
-% If you add new entries, be sure to copy the punctuation accurately;
-% in particular, you must leave at least one space or tab between each
-% field in the entry. Also, please read fonts.doc for important information
-% about font names.
-
-% PDF interpreter evaluates hexadecimal escapes in PDF font names before
-% looking up the font. When the resulting name cannot be represented using
-% PostScript name syntax, the string can be used instead of the name.
-
-% Note that .pfa and .ttf fonts are compatible with Adobe Type Manager
-% and other programs that don't include full PostScript interpreters,
-% as well as with PostScript interpreters; .gsf fonts are compatible with
-% PostScript interpreters, but not with ATM or similar programs.
-
-%
-
-%
-% The 136 font set from URW in .ttf (Printer Font Binary) format
-%
-
-/AntiqueOli-Reg (a008003i.ttf) ;
-/AntiqueOli-Bol (a008006i.ttf) ;
-/AntiqueOli-Com (a008007i.ttf) ;
-/AntiqueOli-RegIta (a008023i.ttf) ;
-/URWGothic-Boo (a010013l.ttf) ;
-/URWGothic-Dem (a010015l.ttf) ;
-/URWGothic-BooObl (a010033l.ttf) ;
-/URWGothic-DemObl (a010035l.ttf) ;
-/A028-Lig (a028012i.ttf) ;
-/A028-Med (a028014i.ttf) ;
-/A028-MedIta (a028034i.ttf) ;
-/AtramentURW (a096003i.ttf) ;
-/AlonURW (a097003i.ttf) ;
-/AfficheURW (a098003i.ttf) ;
-/BaskervilleOrnaments (b004000i.ttf) ;
-/BaskervilleURW-Reg (b004003i.ttf) ;
-/BaskervilleURW-Bla (b004006i.ttf) ;
-/BaskervilleURW-Ita (b004023i.ttf) ;
-/BaskervilleURW-BlaIta (b004026i.ttf) ;
-/BookmanURW-Lig (b018012l.ttf) ;
-/BookmanURW-DemBol (b018015l.ttf) ;
-/BookmanURW-LigIta (b018032l.ttf) ;
-/BookmanURW-DemBolIta (b018035l.ttf) ;
-/BodoniAnt-Reg (b044003i.ttf) ;
-/BodoniAnt-Bol (b044004i.ttf) ;
-/BodoniAnt-Ita (b044023i.ttf) ;
-/BodoniAnt-BolIta (b044024i.ttf) ;
-/Bodoni-Ult (b049020i.ttf) ;
-/Bodoni-Com (b049132i.ttf) ;
-/Clarendon-Lig (c011002i.ttf) ;
-/Clarendon-Med (c011004i.ttf) ;
-/Clarendon-Bol (c011007i.ttf) ;
-/Cooper-Bla (c018016i.ttf) ;
-/Cooper-BlaIta (c018036i.ttf) ;
-/Copperplate-Med (c041014i.ttf) ;
-/Copperplate-Bol (c041018i.ttf) ;
-/CenturySchURW-Rom (c059013l.ttf) ;
-/CenturySchURW-Bol (c059016l.ttf) ;
-/CenturySchURW-Ita (c059033l.ttf) ;
-/CenturySchURW-BolIta (c059036l.ttf) ;
-/CoronetURW (c093000i.ttf) ;
-/Dingbats (d050000l.ttf) ;
-/Eurostile-Reg (e004003i.ttf) ;
-/Eurostile-Bol (e004006i.ttf) ;
-/Eurostile-Ext (e004083i.ttf) ;
-/Eurostile-BolExt (e004086i.ttf) ;
-/G032-Lig (g032012i.ttf) ;
-/G032-Reg (g032013i.ttf) ;
-/G032-Bol (g032016i.ttf) ;
-/G032-ExtBol (g032017i.ttf) ;
-/G032-LigIta (g032032i.ttf) ;
-/G032-Ita (g032033i.ttf) ;
-/G032-BolIta (g032036i.ttf) ;
-/G032Con-Reg (g032053i.ttf) ;
-/G032Con-Bol (g032056i.ttf) ;
-/GaramondURW-Reg (g043003i.ttf) ;
-/GaramondURW-Dem (g043004i.ttf) ;
-/GaramondURW-Ita (g043023i.ttf) ;
-/GaramondURW-DemIta (g043024i.ttf) ;
-/Goudy-Reg (g047013i.ttf) ;
-/Goudy-Med (g047014i.ttf) ;
-/Goudy-Bol (g047016i.ttf) ;
-/Goudy-Ita (g047033i.ttf) ;
-/Goudy-MedIta (g047034i.ttf) ;
-/Joanna-Reg (j011013i.ttf) ;
-/Joanna-Bol (j011016i.ttf) ;
-/Joanna-Ita (j011033i.ttf) ;
-/Joanna-BolIta (j011036i.ttf) ;
-/Lubalin-Boo (l005013i.ttf) ;
-/Lubalin-Dem (l005015i.ttf) ;
-/Lubalin-BooObl (l005033i.ttf) ;
-/Lubalin-DemObl (l005035i.ttf) ;
-/LetterGot-Reg (l021003i.ttf) ;
-/LetterGot-Bol (l021004i.ttf) ;
-/LetterGot-Ita (l021023i.ttf) ;
-/LetterGot-BolIta (l021024i.ttf) ;
-/MonaLis (m034000i.ttf) ;
-/Mauritius (m048000i.ttf) ;
-/NimbusSan-Reg (n019003l.ttf) ;
-/NimbusSan-Bol (n019004l.ttf) ;
-/NimbusSan-Ita (n019023l.ttf) ;
-/NimbusSan-BolIta (n019024l.ttf) ;
-/NimbusSanNo2-Reg (n019003i.ttf) ;
-/NimbusSanNo2-Bol (n019004i.ttf) ;
-/NimbusSanNo2-Ita (n019023i.ttf) ;
-/NimbusSanNo2-BolIta (n019024i.ttf) ;
-/NimbusSanCon-Reg (n019043i.ttf) ;
-/NimbusSanNar-Reg (n019043l.ttf) ;
-/NimbusSanNar-Bol (n019044l.ttf) ;
-/NimbusSanCon-Bol (n019045i.ttf) ;
-/NimbusSanCon-Ita (n019063i.ttf) ;
-/NimbusSanCon-BolIta (n019065i.ttf) ;
-/NimbusSanNar-Ita (n019063l.ttf) ;
-/NimbusSanNar-BolIta (n019064l.ttf) ;
-/NimbusRomNo9-Reg (n021003i.ttf) ;
-/NimbusRom-Reg (n021003l.ttf) ;
-/NimbusRomNo9-Bol (n021004i.ttf) ;
-/NimbusRom-Med (n021004l.ttf) ;
-/NimbusRomNo9-Ita (n021023i.ttf) ;
-/NimbusRom-Ita (n021023l.ttf) ;
-/NimbusRomNo9-BolIta (n021024i.ttf) ;
-/NimbusRom-MedIta (n021024l.ttf) ;
-/NimbusMon-Reg (n022003l.ttf) ;
-/NimbusMon-Bol (n022004l.ttf) ;
-/NimbusMon-Obl (n022023l.ttf) ;
-/NimbusMon-BolObl (n022024l.ttf) ;
-/NimbusTypewriter-Regular (n056003m.ttf) ;
-/NimbusRomanScreen-Regular (n057003i.ttf) ;
-/NimbusGUI-Regular (n058003i.ttf) ;
-/NimbusSansScreen-Regular (n059003i.ttf) ;
-/ClassicoURW-Reg (o004003i.ttf) ;
-/ClassicoURW-Bol (o004004i.ttf) ;
-/ClassicoURW-Ita (o004023i.ttf) ;
-/ClassicoURW-BolIta (o004024i.ttf) ;
-/PalladioURW-Rom (p052003l.ttf) ;
-/PalladioURW-Bol (p052004l.ttf) ;
-/PalladioURW-Ita (p052023l.ttf) ;
-/PalladioURW-BolIta (p052024l.ttf) ;
-/StandardSymL (s050000l.ttf) ;
-/URWSignsAndSymD (s052000d.ttf) ;
-/URWClassicSan-Lig (u001002i.ttf) ;
-/URWClassicSan-Reg (u001003i.ttf) ;
-/URWClassicSan-Bol (u001004i.ttf) ;
-/URWClassicSan-LigIta (u001022i.ttf) ;
-/URWClassicSan-Ita (u001023i.ttf) ;
-/URWClassicSan-BolIta (u001024i.ttf) ;
-/URWClassicSanCon-Reg (u001043i.ttf) ;
-/URWClassicSanCon-Bol (u001044i.ttf) ;
-/URWClassicSanCon-RegIta (u001063i.ttf) ;
-/URWClassicSanCon-BolIta (u001064i.ttf) ;
-/URWClassicSanExt-Reg (u001083i.ttf) ;
-/URWClassicSanExt-Bol (u001085i.ttf) ;
-/URWClassicSanExt-Ita (u001103i.ttf) ;
-/URWClassicSanExt-BolIta (u001105i.ttf) ;
-/UngerCha (u022003i.ttf) ;
-/ChanceryURW-MedIta (z003034l.ttf) ;
-
-% Aliases
-% These map the Adobe font names to the closest match in the URW font set
-%
-/AlbertusMT-Light /A028-Lig ;
-/AlbertusMT /A028-Med ;
-/AlbertusMT-Italic /A028-MedIta ;
-/AntiqueOlive-Roman /AntiqueOli-Reg ;
-/AntiqueOlive-Bold /AntiqueOli-Bol ;
-/AntiqueOlive-Compact /AntiqueOli-Com ;
-/AntiqueOlive-Italic /AntiqueOli-RegIta ;
-/Apple-Chancery /UngerCha ;
-/ArialMT /NimbusSanNo2-Reg ;
-/Arial-BoldMT /NimbusSanNo2-Bol ;
-/Arial-BoldItalicMT /NimbusSanNo2-Ita ;
-/Arial-ItalicMT /NimbusSanNo2-BolIta ;
-/AvantGarde-Book /URWGothic-Boo ;
-/AvantGarde-Demi /URWGothic-Dem ;
-/AvantGarde-BookOblique /URWGothic-BooObl ;
-/AvantGarde-DemiOblique /URWGothic-DemObl ;
-/Bodoni /BodoniAnt-Reg ;
-/Bodoni-Bold /BodoniAnt-Bol ;
-/Bodoni-Italic /BodoniAnt-Ita ;
-/Bodoni-BoldItalic /BodoniAnt-BolIta ;
-/Bodoni-Poster /Bodoni-Ult ;
-/Bodoni-PosterCompressed /Bodoni-Com ;
-/Bookman-Light /BookmanURW-Lig ;
-/Bookman-Demi /BookmanURW-DemBol ;
-/Bookman-LightItalic /BookmanURW-LigIta ;
-/Bookman-DemiItalic /BookmanURW-DemBolIta ;
-/Carta /URWSignsAndSymD ;
-/Chicago /NimbusGUI-Regular ;
-/Clarendon-Light /Clarendon-Lig ;
-/Clarendon /Clarendon-Med ;
-/Clarendon-Bold /Clarendon-Bol ;
-/CooperBlack /Cooper-Bla ;
-/CooperBlack-Italic /Cooper-BlaIta ;
-/Copperplate-ThirtyTwoBC /Copperplate-Med ;
-/Copperplate-ThirtyThreeBC /Copperplate-Bol ;
-/Coronet-Regular /CoronetURW ;
-/Courier /NimbusMon-Reg ;
-/Courier-BoldOblique /NimbusMon-BolObl ;
-/Courier-Oblique /NimbusMon-Obl ;
-/Courier-Bold /NimbusMon-Bol ;
-/Eurostile /Eurostile-Reg ;
-/Eurostile-Bold /Eurostile-Bol ;
-/Eurostile-ExtendedTwo /Eurostile-Ext ;
-/Eurostile-BoldExtendedTwo /Eurostile-BolExt ;
-/Geneva /NimbusSansScreen-Regular ;
-/GillSans-Light /G032-Lig ;
-/GillSans /G032-Reg ;
-/GillSans-Bold /G032-Bol ;
-/GillSans-ExtraBold /G032-ExtBol ;
-/GillSans-LightItalic /G032-LigIta ;
-/GillSans-Italic /G032-Ita ;
-/GillSans-BoldItalic /G032-BolIta ;
-/GillSans-Condensed /G032Con-Reg ;
-/GillSans-BoldCondensed /G032Con-Bol ;
-/Goudy /Goudy-Reg ;
-/Goudy-Bold /Goudy-Med ;
-/Goudy-ExtraBold /Goudy-Bol ;
-/Goudy-Italic /Goudy-Ita ;
-/Goudy-BoldItalic /Goudy-MedIta ;
-/Helvetica /NimbusSan-Reg ;
-/Helvetica-Bold /NimbusSan-Bol ;
-/Helvetica-Oblique /NimbusSan-Ita ;
-/Helvetica-BoldOblique /NimbusSan-BolIta ;
-/Helvetica-Condensed /NimbusSanCon-Reg ;
-/Helvetica-Narrow /NimbusSanNar-Reg ;
-/Helvetica-Narrow-Bold /NimbusSanNar-Bol ;
-/Helvetica-Condensed-Bold /NimbusSanCon-Bol ;
-/Helvetica-Condensed-Oblique /NimbusSanCon-Ita ;
-/Helvetica-Narrow-Oblique /NimbusSanNar-Ita ;
-/Helvetica-Narrow-BoldOblique /NimbusSanNar-BolIta ;
-/Helvetica-Condensed-BoldObl /NimbusSanCon-BolIta ;
-/HoeflerText-Ornaments /BaskervilleOrnaments ;
-/HoeflerText-Regular /BaskervilleURW-Reg ;
-/HoeflerText-Black /BaskervilleURW-Bla ;
-/HoeflerText-Italic /BaskervilleURW-Ita ;
-/HoeflerText-BlackItalic /BaskervilleURW-BlaIta ;
-/JoannaMT /Joanna-Reg ;
-/JoannaMT-Bold /Joanna-Bol ;
-/JoannaMT-Italic /Joanna-Ita ;
-/JoannaMT-BoldItalic /Joanna-BolIta ;
-/LetterGothic /LetterGot-Reg ;
-/LetterGothic-Bold /LetterGot-Bol ;
-/LetterGothic-Slanted /LetterGot-Ita ;
-/LetterGothic-BoldSlanted /LetterGot-BolIta ;
-/LubalinGraph-Book /Lubalin-Boo ;
-/LubalinGraph-Demi /Lubalin-Dem ;
-/LubalinGraph-BookOblique /Lubalin-BooObl ;
-/LubalinGraph-DemiOblique /Lubalin-DemObl ;
-/Marigold /Mauritius ;
-/Monaco /NimbusTypewriter-Regular ;
-/MonaLisa-Recut /MonaLis ;
-/NewCenturySchlbk-Roman /CenturySchURW-Rom ;
-/NewCenturySchlbk-Bold /CenturySchURW-Bol ;
-/NewCenturySchlbk-Italic /CenturySchURW-Ita ;
-/NewCenturySchlbk-BoldItalic /CenturySchURW-BolIta ;
-/NewYork /NimbusRomanScreen-Regular ;
-/Optima /ClassicoURW-Reg ;
-/Optima-Bold /ClassicoURW-Bol ;
-/Optima-Italic /ClassicoURW-Ita ;
-/Optima-BoldItalic /ClassicoURW-BolIta ;
-/Oxford /AlonURW ;
-/Palatino-Roman /PalladioURW-Rom ;
-/Palatino-Bold /PalladioURW-Bol ;
-/Palatino-Italic /PalladioURW-Ita ;
-/Palatino-BoldItalic /PalladioURW-BolIta ;
-/StempelGaramond-Roman /GaramondURW-Reg ;
-/StempelGaramond-Bold /GaramondURW-Dem ;
-/StempelGaramond-Italic /GaramondURW-Ita ;
-/StempelGaramond-BoldItalic /GaramondURW-DemIta ;
-/Symbol /StandardSymL ;
-/Tekton /AfficheURW ;
-/Times-Roman /NimbusRom-Reg ;
-/Times-Bold /NimbusRom-Med ;
-/Times-Italic /NimbusRom-Ita ;
-/Times-BoldItalic /NimbusRom-MedIta ;
-/TimesNewRomanPSMT /NimbusRomNo9-Reg ;
-/TimesNewRomanPS-BoldMT /NimbusRomNo9-Bol ;
-/TimesNewRomanPS-ItalicMT /NimbusRomNo9-Ita ;
-/TimesNewRomanPS-BoldItalicMT /NimbusRomNo9-BolIta ;
-/Univers-Light /URWClassicSan-Lig ;
-/Univers /URWClassicSan-Reg ;
-/Univers-Bold /URWClassicSan-Bol ;
-/Univers-LightOblique /URWClassicSan-LigIta ;
-/Univers-Oblique /URWClassicSan-Ita ;
-/Univers-BoldOblique /URWClassicSan-BolIta ;
-/Univers-Condensed /URWClassicSanCon-Reg ;
-/Univers-CondensedBold /URWClassicSanCon-Bol ;
-/Univers-CondensedOblique /URWClassicSanCon-RegIta ;
-/Univers-CondensedBoldOblique /URWClassicSanCon-BolIta ;
-/Univers-Extended /URWClassicSanExt-Reg ;
-/Univers-BoldExt /URWClassicSanExt-Bol ;
-/Univers-ExtendedObl /URWClassicSanExt-Ita ;
-/Univers-BoldExtObl /URWClassicSanExt-BolIta ;
-/ZapfChancery-MediumItalic /ChanceryURW-MedIta ;
-/ZapfDingbats /Dingbats ;
-
-/Taffy /AtramentURW
-
-% Note that for legal reasons ther is no equivalen to Wingdings
-%
-
-
-%
-% Type 1 fonts contributed to the X11R5 distribution.
-%
-
-% The following notice accompanied the Charter fonts.
-%
-% (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.
-
-/CharterBT-Roman (bchr.pfa) ;
-/CharterBT-Italic (bchri.pfa) ;
-/CharterBT-Bold (bchb.pfa) ;
-/CharterBT-BoldItalic (bchbi.pfa) ;
-
-% Aliases
-
-/Charter-Roman /CharterBT-Roman ;
-/Charter-Italic /CharterBT-Italic ;
-/Charter-Bold /CharterBT-Bold ;
-/Charter-BoldItalic /CharterBT-BoldItalic ;
-
-% The following notice accompanied the Utopia font:
-%
-% Permission to use, reproduce, display and distribute the listed
-% typefaces is hereby granted, provided that the Adobe Copyright notice
-% appears in all whole and partial copies of the software and that the
-% following trademark symbol and attribution appear in all unmodified
-% copies of the software:
-%
-% Copyright (c) 1989 Adobe Systems Incorporated
-% Utopia (R)
-% Utopia is a registered trademark of Adobe Systems Incorporated
-%
-% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
-% Metric files) donated are:
-%
-% Utopia Regular
-% Utopia Italic
-% Utopia Bold
-% Utopia Bold Italic
-
-/Utopia-Regular (putr.pfa) ;
-/Utopia-Italic (putri.pfa) ;
-/Utopia-Bold (putb.pfa) ;
-/Utopia-BoldItalic (putbi.pfa) ;
-
-%
-%
-% Fonts contributed by URW GmbH for distribution under the GNU License.
-% The following notice accompanied these fonts:
-%
-% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
-% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
-%
-% Copyright (c) 1992 URW GmbH, Hamburg, Germany
-%
-% 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) later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; wihtout 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 U.S.A.
-%
-% Address:
-% URW GmbH
-% PC Support
-% Harksheider Strasse 102
-% 2000 Hamburg 65
-% Germany
-% Phone: +49 40 60 60 50 (Reception)
-% Phone: +49 40 60 60 52 30 (PC Support)
-% Fax : +49 40 60 60 52 52
-%
-
-/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
-/URWGroteskT-Bold (u004006t.gsf) ;
-
-%
-%
-% Calligraphic Kana fonts. These are distributed under the OFL 1.1:
-%
-% Copyright (c) 1993, Kevin Hartig (kevin.hartig@gmail.com),
-% with Reserved Font Name Calligraphic-Hiragana and Calligraphic-Katakana.
-% This Font Software is licensed under the SIL Open Font License, Version 1.1.
-% This license is available with an FAQ at: http://scripts.sil.org/OFL
-
-% Hiragana and Katakana fonts. The character names are inappropriate,
-% and the encoding is probably not related to any known standard.
-
-/Calligraphic-Hiragana (fhirw.gsf) ;
-/Calligraphic-Katakana (fkarw.gsf) ;
-
-%
-%
-% Public-domain fonts. These have no copyright, and are of unknown quality.
-
-% Cyrillic fonts. The character names are inappropriate,
-% and the encoding is probably not related to any known standard.
-
-/Shareware-Cyrillic-Regular (fcyr.gsf) ;
-/Shareware-Cyrillic-Italic (fcyri.gsf) ;
-
-% Aliases
-/Cyrillic /Cyrillic-Regular ;
-/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
-/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
-
-%
-%
-% Fonts converted from Hershey outlines. These are constructed and
-% maintained manually. These are also in the public domain.
-%
-% The suggested UniqueID's and filenames are constructed differently for
-% these than for the ones above, because of the strange way that the Hershey
-% fonts were constructed. The scheme for these looks like:
-%
-% 42TTXY0
-%
-% TT = typeface, X = ``class'', Y = variation
-%
-% The typeface names and numbers are listed in fonts.mak.
-%
-% class:
-% 0 = normal = r
-% 1 = simplex = s
-% 2 = complex = c
-% 3 = triplex = t
-% 4 = duplex = d
-%
-% variation:
-% 0 = normal (omitted)
-% 1 = oblique = o
-% 2 = italic = i
-% 3 = bold = b
-% 4 = bold oblique = bo
-% 5 = bold italic = bi
-%
-
-% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
-% accents, accented characters, and various other non-alphabetics
-% to the original Hershey fonts. These are "freeware", not to be sold.
-
-/Hershey-Gothic-English (hrger.pfa) ; % 5066533
-/Hershey-Gothic-German (hrgrr.pfa) ;
-/Hershey-Gothic-Italian (hritr.pfa) ;
-
-/Hershey-Plain-Duplex (hrpld.pfa) ;
-/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
-/Hershey-Plain-Triplex (hrplt.pfa) ;
-/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
-
-/Hershey-Script-Complex (hrscc.pfa) ;
-/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
-
-% Fonts created algorithmically from the above.
-
-/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
-/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
-/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
-/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
-/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
-/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
-/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
-
-/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
-/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
-/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
-/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
-
-/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
-/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
-/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
-/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
-
-% Fonts consisting only of characters from the original Hershey
-% distribution. These are Type 3 fonts.
-
-/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
-/Hershey-Greek-Simplex (hrgks.gsf) ;
-
-/Hershey-Plain (hrplr.gsf) ;
-/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
-
-% Fonts created algorithmically from the above.
-
-/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
-/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
-/Hershey-Plain-Oblique (hrplro.gsf) ;
-/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
-/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
-/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
-
-% This font, and only this font among the Hershey fonts, uses
-% the SymbolEncoding.
-
-/Hershey-Symbol (hrsyr.gsf) ; % 5066567
-
-/Arial /ArialMT ;
-/Arial,Bold /Arial-BoldMT ;
-/Arial,Italic /Arial-ItalicMT ;
-/Arial,BoldItalic /Arial-BoldItalicMT ;
-
-/TimesNewRoman /TimesNewRomanPSMT ;
-/TimesNewRoman,Bold /TimesNewRomanPS-BoldMT ;
-/TimesNewRoman,Italic /TimesNewRomanPS-ItalicMT ;
-/TimesNewRoman,BoldItalic /TimesNewRomanPS-BoldItalicMT ;
-
diff --git a/lib/dvipdf b/lib/dvipdf
index f643087f..13e19854 100755
--- a/lib/dvipdf
+++ b/lib/dvipdf
@@ -43,4 +43,4 @@ fi
# We have to include the options twice because -I only takes effect if it
# appears before other options.
-exec dvips -Ppdf $DVIPSOPTIONS -q -f "$infile" | $GS_EXECUTABLE $OPTIONS -q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%stderr -sOutputFile="$outfile" $OPTIONS
+exec dvips -Ppdf $DVIPSOPTIONS -q -f "$infile" | $GS_EXECUTABLE $OPTIONS -q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%stderr -sOutputFile="$outfile" $OPTIONS -
diff --git a/toolbin/pdf_info.ps b/lib/pdf_info.ps
index 6af5f58c..547809c8 100644
--- a/toolbin/pdf_info.ps
+++ b/lib/pdf_info.ps
@@ -19,7 +19,7 @@
% Dump some info from a PDF file
% usage: gs -dNODISPLAY -q -sFile=____.pdf [-dDumpMediaSizes=false] [-dDumpFontsNeeded=false] [-dDumpXML]
-% [-dDumpFontsUsed [-dShowEmbeddedFonts] ] toolbin/pdf_info.ps
+% [-dDumpFontsUsed [-dShowEmbeddedFonts] ] lib/pdf_info.ps
128 dict begin
@@ -40,26 +40,27 @@
/DumpMediaSizes where { pop } { /DumpMediaSizes true def } ifelse
/DumpFontsNeeded where { pop } { /DumpFontsNeeded true def } ifelse
-[ .shellarguments
- { counttomark 1 eq {
- dup 0 get (-) 0 get ne {
- % File specified on the command line using: -- toolbin/pdf_info.ps infile.pdf
- /File exch def
- false % don't show usage
- } {
- true % show usage and quit
- } ifelse
- } { true } ifelse
- {
- (\n*** Usage: gs [options] -- toolbin/pdf_info.ps infile.pdf ***\n\n) print
- showoptions
- quit
+[ {.shellarguments} stopped not
+ {
+ { counttomark 1 eq {
+ dup 0 get (-) 0 get ne {
+ % File specified on the command line using: -- lib/pdf_info.ps infile.pdf
+ /File exch def
+ false % don't show usage
+ } {
+ true % show usage and quit
+ } ifelse
+ } { true } ifelse
+ {
+ (\n*** Usage: gs [options] -- lib/pdf_info.ps infile.pdf ***\n\n) print
+ showoptions
+ quit
+ } if
} if
} if
-
/File where not {
(\n *** Missing input file name \(use -sFile=____.pdf\)\n) =
- ( usage: gs -dNODISPLAY -q -sFile=____.pdf [ options ] toolbin/pdf_info.ps\n) =
+ ( usage: gs -dNODISPLAY -q -sFile=____.pdf [ options ] lib/pdf_info.ps\n) =
showoptions
quit
} if
@@ -332,13 +333,13 @@ currentdict /res-type-dict undef
systemdict /DumpFontsUsed known
{
- (\nFont or CIDFont resources used:) =
- { = } forall
+ (\nFont or CIDFont resources used (plain name and ASCIIHEX string representation):) =
+ { 128 string cvs dup print ( ) print (<) print 128 string cvs {16 8 string cvrs print} forall (>) print (\n) print} forall
} {
DumpFontsNeeded {
dup length 0 gt {
(\nFonts Needed that are not embedded \(system fonts required\):) =
- { ( ) print = } forall
+ { ( ) print 128 string cvs dup print ( ) print (<) print {16 8 string cvrs print} forall (>) print (\n) print} forall
} {
pop
(\nNo system fonts are needed.) =
diff --git a/libpng/ANNOUNCE b/libpng/ANNOUNCE
index 0f66c0d1..ecf9c704 100644
--- a/libpng/ANNOUNCE
+++ b/libpng/ANNOUNCE
@@ -1,35 +1,47 @@
-Libpng 1.6.34 - September 29, 2017
+libpng 1.6.37 - April 14, 2019
+==============================
-This is a public release of libpng, intended for use in production codes.
+This is a public release of libpng, intended for use in production code.
-Files available for download:
-Source files with LF line endings (for Unix/Linux) and with a
-"configure" script
+Files available for download
+----------------------------
- libpng-1.6.34.tar.xz (LZMA-compressed, recommended)
- libpng-1.6.34.tar.gz
+Source files with LF line endings (for Unix/Linux):
-Source files with CRLF line endings (for Windows), without the
-"configure" script
+ * libpng-1.6.37.tar.xz (LZMA-compressed, recommended)
+ * libpng-1.6.37.tar.gz
- lpng1634.7z (LZMA-compressed, recommended)
- lpng1634.zip
+Source files with CRLF line endings (for Windows):
+
+ * lp1637.7z (LZMA-compressed, recommended)
+ * lp1637.zip
Other information:
- libpng-1.6.34-README.txt
- libpng-1.6.34-LICENSE.txt
- libpng-1.6.34-*.asc (armored detached GPG signatures)
+ * README.md
+ * LICENSE.md
+ * AUTHORS.md
+ * TRADEMARK.md
-Changes since the last public release (1.6.33):
- Removed contrib/pngsuite/i*.png; some of these were incorrect and caused
- test failures.
-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
+Changes since the previous public release (version 1.6.36)
+----------------------------------------------------------
+
+ * Fixed a use-after-free vulnerability (CVE-2019-7317) in png_image_free.
+ * Fixed a memory leak in the ARM NEON implementation of png_do_expand_palette.
+ * Fixed a memory leak in pngtest.c.
+ * Fixed two vulnerabilities (CVE-2018-14048, CVE-2018-14550) in
+ contrib/pngminus; refactor.
+ * Changed the license of contrib/pngminus to MIT; refresh makefile and docs.
+ (Contributed by Willem van Schaik)
+ * Fixed a typo in the libpng license v2.
+ (Contributed by Miguel Ojeda)
+ * Added makefiles for AddressSanitizer-enabled builds.
+ * Cleaned up various makefiles.
-Glenn R-P
+
+Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
+Subscription is required; visit
+https://lists.sourceforge.net/lists/listinfo/png-mng-implement
+to subscribe.
diff --git a/libpng/AUTHORS b/libpng/AUTHORS
new file mode 100644
index 00000000..79a3d103
--- /dev/null
+++ b/libpng/AUTHORS
@@ -0,0 +1,45 @@
+PNG REFERENCE LIBRARY AUTHORS
+=============================
+
+This is the list of PNG Reference Library ("libpng") Contributing
+Authors, for copyright and licensing purposes.
+
+ * Andreas Dilger
+ * Cosmin Truta
+ * Dave Martindale
+ * Eric S. Raymond
+ * Gilles Vollant
+ * Glenn Randers-Pehrson
+ * Greg Roelofs
+ * Guy Eric Schalnat
+ * James Yu
+ * John Bowler
+ * Kevin Bracey
+ * Magnus Holmgren
+ * Mandar Sahastrabuddhe
+ * Mans Rullgard
+ * Matt Sarett
+ * Mike Klein
+ * Paul Schmidt
+ * Sam Bushell
+ * Samuel Williams
+ * Simon-Pierre Cadieux
+ * Tim Wegner
+ * Tom Lane
+ * Tom Tanner
+ * Vadim Barkov
+ * Willem van Schaik
+ * Zhijie Liang
+ * Arm Holdings
+ - Richard Townsend
+ * Google Inc.
+ - Matt Sarett
+ - Mike Klein
+
+The build projects, the build scripts, the test scripts, and other
+files in the "projects", "scripts" and "tests" directories, have other
+copyright owners, but are released under the libpng license.
+
+Some files in the "contrib" directory, and some tools-generated files
+that are distributed with libpng, have other copyright owners, and are
+released under other open source licenses.
diff --git a/libpng/CHANGES b/libpng/CHANGES
index 4b821189..f0b0a934 100644
--- a/libpng/CHANGES
+++ b/libpng/CHANGES
@@ -1,4 +1,3 @@
-#if 0
CHANGES - changes for libpng
version 0.1 [March 29, 1995]
@@ -1454,7 +1453,7 @@ Version 1.2.6beta4 [July 28, 2004]
sequential read support.
Added some "#if PNG_WRITE_SUPPORTED" blocks.
Added #ifdef to remove some redundancy in png_malloc_default().
- Use png_malloc instead of png_zalloc to allocate the pallete.
+ Use png_malloc instead of png_zalloc to allocate the palette.
Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS().
@@ -3259,7 +3258,7 @@ Version 1.5.2beta01 [February 13, 2011]
Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
old VisualC++ preprocessor.
Turned on interlace handling in png_read_png().
- Fixed gcc pendantic warnings.
+ Fixed gcc pedantic warnings.
Handle longjmp in Cygwin.
Fixed png_get_current_row_number() in the interlaced case.
Cleaned up ALPHA flags and transformations.
@@ -3359,7 +3358,7 @@ Version 1.5.3beta05 [May 6, 2011]
Pass "" instead of '\0' to png_default_error() in png_err(). This mistake
was introduced in libpng-1.2.20beta01. This fixes CVE-2011-2691.
Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
- optimization configureable.
+ optimization configurable.
IDAT compression failed if preceded by a compressed text chunk (bug
introduced in libpng-1.5.3beta01-02). This was because the attempt to
reset the zlib stream in png_write_IDAT happened after the first IDAT
@@ -3643,7 +3642,7 @@ Version 1.5.6beta05 [October 12, 2011]
Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01.
Version 1.5.6beta06 [October 17, 2011]
- Removed two redundant tests for unitialized row.
+ Removed two redundant tests for uninitialized row.
Fixed a relatively harmless memory overwrite in compressed text writing
with a 1 byte zlib buffer.
Add ability to call png_read_update_info multiple times to pngvalid.c.
@@ -3689,7 +3688,7 @@ Version 1.5.7beta01 [November 4, 2011]
crash. The pngmem.c implementation of png_malloc() included a cast
to png_size_t which would fail on large allocations on 16-bit systems.
Fix for the preprocessor of the Intel C compiler. The preprocessor
- splits adjacent @ signs with a space; this changes the concatentation
+ splits adjacent @ signs with a space; this changes the concatenation
token from @-@-@ to PNG_JOIN; that should work with all compiler
preprocessors.
Paeth filter speed improvements from work by Siarhei Siamashka. This
@@ -3735,7 +3734,7 @@ Version 1.5.7beta03 [November 17, 2011]
gray (on palette) itself.
Fixes for C++ compilation using g++ When libpng source is compiled
using g++. The compiler imposes C++ rules on the C source; thus it
- is desireable to make the source work with either C or C++ rules
+ is desirable to make the source work with either C or C++ rules
without throwing away useful error information. This change adds
png_voidcast to allow C semantic (void*) cases or the corresponding
C++ static_cast operation, as appropriate.
@@ -4061,7 +4060,7 @@ Version 1.6.0beta17 [March 10, 2012]
possible to call png_inflate() incrementally. A warning is no longer
issued if the language tag or translated keyword in the iTXt chunk
has zero length.
- If benign errors are disabled use maximum window on ancilliary inflate.
+ If benign errors are disabled use maximum window on ancillary inflate.
This works round a bug introduced in 1.5.4 where compressed ancillary
chunks could end up with a too-small windowBits value in the deflate
header.
@@ -4176,7 +4175,7 @@ Version 1.6.0beta27 [August 11, 2012]
declared even though the functions are never actually defined. This
change provides a dummy definition so that the declarations work, yet any
implementation will fail to compile because of an incomplete type.
- Re-eliminated the use of strcpy() in pngtest.c. An unncessary use of
+ Re-eliminated the use of strcpy() in pngtest.c. An unnecessary use of
strcpy() was accidentally re-introduced in libpng16; this change replaces
it with strncpy().
Eliminated use of png_sizeof(); use sizeof() instead.
@@ -4309,7 +4308,7 @@ Version 1.6.0beta31 [November 1, 2012]
resulting in VS2010 having to update the files.
Removed non-working ICC profile support code that was mostly added to
libpng-1.6.0beta29 and beta30. There was too much code for too little
- gain; implementing full ICC color correction may be desireable but is left
+ gain; implementing full ICC color correction may be desirable but is left
up to applications.
Version 1.6.0beta32 [November 25, 2012]
@@ -4592,7 +4591,7 @@ Version 1.6.3beta07 [June 8, 2013]
the optimizations ('check' vs 'api') are exposed in the public header files
except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
decision about whether or not to use the optimizations.
- Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
+ Protect symbol prefixing against CC/CPPFLAGS/CFLAGS usage.
Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
on __ARM_NEON__ from configure time to compile time. This breaks symbol
prefixing because the definition of the special png_init_filter_functions
@@ -5635,7 +5634,7 @@ Version 1.6.24beta02 [June 23, 2016]
to All and adds a list of the warnings that need to be turned off. This is
semi-documentary; the intent is to tell libpng users which warnings have
been examined and judged non-fixable at present. The warning about
- structure padding is fixable, but it would be a signficant change (moving
+ structure padding is fixable, but it would be a significant change (moving
structure members around).
Version 1.6.24beta03 [July 4, 2016]
@@ -5781,7 +5780,7 @@ Version 1.6.28rc01 [January 3, 2017]
Added option to Cmake build allowing a custom location of zlib to be
specified in a scenario where libpng is being built as a subproject
alongside zlib by another project (Sam Serrels).
- Changed png_ptr->options from a png_byte to png_uint_32, to accomodate
+ Changed png_ptr->options from a png_byte to png_uint_32, to accommodate
up to 16 options.
Version 1.6.28rc02 [January 4, 2017]
@@ -5932,7 +5931,7 @@ Version 1.6.32beta04 [August 2, 2017]
Update libpng.3 and libpng-manual.txt about eXIf functions.
Version 1.6.32beta05 [August 2, 2017]
- Restored png_get_eXIf() and png_set_eXIf() to maintain API compatability.
+ Restored png_get_eXIf() and png_set_eXIf() to maintain API compatibility.
Version 1.6.32beta06 [August 2, 2017]
Removed png_get_eXIf_1() and png_set_eXIf_1().
@@ -6038,14 +6037,73 @@ Version 1.6.33 [September 28, 2017]
Add end_info structure and png_read_end() to the libpng fuzzer.
Version 1.6.34 [September 29, 2017]
- Removed contrib/pngsuite/i*.png; some of these were incorrect and caused
- test failures.
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
+ Removed contrib/pngsuite/i*.png; some of them caused test failures.
+
+Version 1.6.35beta01 [March 6, 2018]
+ Restored 21 of the contrib/pngsuite/i*.png, which do not cause test
+ failures. Placed the remainder in contrib/pngsuite/interlaced/i*.png.
+ Added calls to png_set_*() transforms commonly used by browsers to
+ the fuzzer.
+ Removed some unnecessary brackets in pngrtran.c
+ Fixed miscellaneous typos (Patch by github user "luzpaz").
+ Change "ASM C" to "C ASM" in CMakeLists.txt
+ Fixed incorrect handling of bKGD chunk in sub-8-bit files (Cosmin)
+ Added hardware optimization directories to zip and 7z distributions.
+ Fixed incorrect bitmask for options.
+ Fixed many spelling typos.
+
+Version 1.6.35beta02 [March 28, 2018]
+ Make png_get_iCCP consistent with man page (allow compression-type argument
+ to be NULL, bug report by Lenard Szolnoki).
+
+Version 1.6.35 [July 15, 2018]
+ Replaced the remaining uses of png_size_t with size_t (Cosmin)
+ Fixed the calculation of row_factor in png_check_chunk_length
+ (reported by Thuan Pham in SourceForge issue #278)
+ Added missing parentheses to a macro definition
+ (suggested by "irwir" in GitHub issue #216)
+
+Version 1.6.36 [December 1, 2018]
+ Optimized png_do_expand_palette for ARM processors.
+ Improved performance by around 10-22% on a recent ARM Chromebook.
+ (Contributed by Richard Townsend, ARM Holdings)
+ Fixed manipulation of machine-specific optimization options.
+ (Contributed by Vicki Pfau)
+ Used memcpy instead of manual pointer arithmetic on Intel SSE2.
+ (Contributed by Samuel Williams)
+ Fixed build errors with MSVC on ARM64.
+ (Contributed by Zhijie Liang)
+ Fixed detection of libm in CMakeLists.
+ (Contributed by Cameron Cawley)
+ Fixed incorrect creation of pkg-config file in CMakeLists.
+ (Contributed by Kyle Bentley)
+ Fixed the CMake build on Windows MSYS by avoiding symlinks.
+ Fixed a build warning on OpenBSD.
+ (Contributed by Theo Buehler)
+ Fixed various typos in comments.
+ (Contributed by "luz.paz")
+ Raised the minimum required CMake version from 3.0.2 to 3.1.
+ Removed yet more of the vestigial support for pre-ANSI C compilers.
+ Removed ancient makefiles for ancient systems that have been broken
+ across all previous libpng-1.6.x versions.
+ Removed the Y2K compliance statement and the export control
+ information.
+ Applied various code style and documentation fixes.
+
+Version 1.6.37 [April 14, 2019]
+ Fixed a use-after-free vulnerability (CVE-2019-7317) in png_image_free.
+ Fixed a memory leak in the ARM NEON implementation of png_do_expand_palette.
+ Fixed a memory leak in pngtest.c.
+ Fixed two vulnerabilities (CVE-2018-14048, CVE-2018-14550) in
+ contrib/pngminus; refactor.
+ Changed the license of contrib/pngminus to MIT; refresh makefile and docs.
+ (Contributed by Willem van Schaik)
+ Fixed a typo in the libpng license v2.
+ (Contributed by Miguel Ojeda)
+ Added makefiles for AddressSanitizer-enabled builds.
+ Cleaned up various makefiles.
+
+Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
+Subscription is required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe)
-or to glennrp at users.sourceforge.net
-
-Glenn R-P
-#endif
+to subscribe.
diff --git a/libpng/CMakeLists.txt b/libpng/CMakeLists.txt
index 48c6fa28..6451fcf1 100644
--- a/libpng/CMakeLists.txt
+++ b/libpng/CMakeLists.txt
@@ -1,42 +1,32 @@
# CMakeLists.txt
-# Copyright (C) 2007,2009-2017 Glenn Randers-Pehrson
+# Copyright (C) 2018 Cosmin Truta
+# Copyright (C) 2007,2009-2018 Glenn Randers-Pehrson
# Written by Christian Ehrlicher, 2007
# Revised by Roger Lowman, 2009-2010
-# Revised by Clifford Yapp, 2011-2012
+# Revised by Clifford Yapp, 2011-2012,2017
# Revised by Roger Leigh, 2016
# Revised by Andreas Franek, 2016
+# Revised by Sam Serrels, 2017
+# Revised by Vadim Barkov, 2017
+# Revised by Vicky Pfau, 2018
+# Revised by Cameron Cawley, 2018
+# Revised by Cosmin Truta, 2018
+# Revised by Kyle Bentley, 2018
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h
-cmake_minimum_required(VERSION 3.0.2)
-cmake_policy(VERSION 3.0.2)
-
-# Set MacOSX @rpath usage globally.
-if (POLICY CMP0020)
- cmake_policy(SET CMP0020 NEW)
-endif(POLICY CMP0020)
-if (POLICY CMP0042)
- cmake_policy(SET CMP0042 NEW)
-endif(POLICY CMP0042)
-# Use new variable expansion policy.
-if (POLICY CMP0053)
- cmake_policy(SET CMP0053 NEW)
-endif(POLICY CMP0053)
-if (POLICY CMP0054)
- cmake_policy(SET CMP0054 NEW)
-endif(POLICY CMP0054)
-
-set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
-
-project(libpng ASM C)
+cmake_minimum_required(VERSION 3.1)
+cmake_policy(VERSION 3.1)
+
+project(libpng C ASM)
enable_testing()
set(PNGLIB_MAJOR 1)
set(PNGLIB_MINOR 6)
-set(PNGLIB_RELEASE 34)
+set(PNGLIB_RELEASE 37)
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
@@ -44,25 +34,19 @@ include(GNUInstallDirs)
# needed packages
-#Allow users to specify location of Zlib,
-# Useful if zlib is being built alongside this as a sub-project
+# Allow users to specify location of Zlib.
+# Useful if zlib is being built alongside this as a sub-project.
option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF)
-IF(NOT PNG_BUILD_ZLIB)
+if(NOT PNG_BUILD_ZLIB)
find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIR})
-ENDIF(NOT PNG_BUILD_ZLIB)
-
-if(NOT WIN32)
- find_library(M_LIBRARY
- NAMES m
- PATHS /usr/lib /usr/local/lib
- )
- if(NOT M_LIBRARY)
- message(STATUS "math lib 'libm' not found; floating point support disabled")
- endif()
+endif()
+
+if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU)
+ find_library(M_LIBRARY m)
else()
- # not needed on windows
+ # libm is not needed and/or not available
set(M_LIBRARY "")
endif()
@@ -73,16 +57,14 @@ option(PNG_TESTS "Build libpng tests" ON)
# Many more configuration options could be added here
option(PNG_FRAMEWORK "Build OS X framework" OFF)
-option(PNG_DEBUG "Build with debug output" OFF)
-option(PNGARG "Disable ANSI-C prototypes" OFF)
-
-option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON)
-
+option(PNG_DEBUG "Build with debug output" OFF)
+option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON)
set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names")
set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings")
if(PNG_HARDWARE_OPTIMIZATIONS)
+
# set definitions and sources for arm
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
@@ -96,12 +78,13 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index)
if(index EQUAL -1)
message(FATAL_ERROR
- " PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]")
- elseif(NOT ${PNG_ARM_NEON} STREQUAL "no")
+ "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]")
+ elseif(NOT ${PNG_ARM_NEON} STREQUAL "off")
set(libpng_arm_sources
arm/arm_init.c
arm/filter_neon.S
- arm/filter_neon_intrinsics.c)
+ arm/filter_neon_intrinsics.c
+ arm/palette_neon_intrinsics.c)
if(${PNG_ARM_NEON} STREQUAL "on")
add_definitions(-DPNG_ARM_NEON_OPT=2)
@@ -115,7 +98,7 @@ endif()
# set definitions and sources for powerpc
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*")
set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations:
off: disable the optimizations.")
@@ -124,8 +107,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index)
if(index EQUAL -1)
message(FATAL_ERROR
- " PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]")
- elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "no")
+ "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]")
+ elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "off")
set(libpng_powerpc_sources
powerpc/powerpc_init.c
powerpc/filter_vsx_intrinsics.c)
@@ -139,7 +122,7 @@ endif()
# set definitions and sources for intel
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
off: disable the optimizations")
@@ -148,8 +131,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index)
if(index EQUAL -1)
message(FATAL_ERROR
- " PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]")
- elseif(NOT ${PNG_INTEL_SSE} STREQUAL "no")
+ "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]")
+ elseif(NOT ${PNG_INTEL_SSE} STREQUAL "off")
set(libpng_intel_sources
intel/intel_init.c
intel/filter_sse2_intrinsics.c)
@@ -163,7 +146,7 @@ endif()
# set definitions and sources for MIPS
if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" )
+ CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*")
set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
off: disable the optimizations")
@@ -172,8 +155,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index)
if(index EQUAL -1)
message(FATAL_ERROR
- " PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]")
- elseif(NOT ${PNG_MIPS_MSA} STREQUAL "no")
+ "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]")
+ elseif(NOT ${PNG_MIPS_MSA} STREQUAL "off")
set(libpng_mips_sources
mips/mips_init.c
mips/filter_msa_intrinsics.c)
@@ -184,6 +167,33 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
add_definitions(-DPNG_MIPS_MSA_OPT=0)
endif()
endif()
+
+else(PNG_HARDWARE_OPTIMIZATIONS)
+
+# set definitions and sources for arm
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
+ add_definitions(-DPNG_ARM_NEON_OPT=0)
+endif()
+
+# set definitions and sources for powerpc
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*")
+ add_definitions(-DPNG_POWERPC_VSX_OPT=0)
+endif()
+
+# set definitions and sources for intel
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
+ add_definitions(-DPNG_INTEL_SSE_OPT=0)
+endif()
+
+# set definitions and sources for MIPS
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*")
+ add_definitions(-DPNG_MIPS_MSA_OPT=0)
+endif()
+
endif(PNG_HARDWARE_OPTIMIZATIONS)
# SET LIBNAME
@@ -241,17 +251,17 @@ function(symbol_prefix)
foreach(line ${OUT})
string(REGEX MATCH "^PREFIX=" found_match "${line}")
if(found_match)
- STRING(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}")
+ string(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}")
string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}")
if(found_match)
- STRING(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}")
+ string(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}")
endif()
set(SYMBOL_PREFIX "${prefix}")
endif()
endforeach()
- message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}")
- set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE)
+ message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}")
+ set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE)
endfunction()
if(UNIX)
@@ -276,11 +286,11 @@ else()
set(oneValueArgs INPUT OUTPUT)
set(multiValueArgs DEPENDS)
cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- if (NOT _GC_INPUT)
- message(FATAL_ERROR "Invalid arguments. generate_out requires input.")
+ if(NOT _GC_INPUT)
+ message(FATAL_ERROR "generate_chk: Missing INPUT argument")
endif()
- if (NOT _GC_OUTPUT)
- message(FATAL_ERROR "Invalid arguments. generate_out requires output.")
+ if(NOT _GC_OUTPUT)
+ message(FATAL_ERROR "generate_chk: Missing OUTPUT argument")
endif()
add_custom_command(OUTPUT "${_GC_OUTPUT}"
@@ -299,11 +309,11 @@ else()
set(oneValueArgs INPUT OUTPUT)
set(multiValueArgs DEPENDS)
cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- if (NOT _GO_INPUT)
- message(FATAL_ERROR "Invalid arguments. generate_out requires input.")
+ if(NOT _GO_INPUT)
+ message(FATAL_ERROR "generate_out: Missing INPUT argument")
endif()
- if (NOT _GO_OUTPUT)
- message(FATAL_ERROR "Invalid arguments. generate_out requires output.")
+ if(NOT _GO_OUTPUT)
+ message(FATAL_ERROR "generate_out: Missing OUTPUT argument")
endif()
add_custom_command(OUTPUT "${_GO_OUTPUT}"
@@ -322,8 +332,8 @@ else()
set(oneValueArgs OUTPUT)
set(multiValueArgs DEPENDS)
cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- if (NOT _GSO_OUTPUT)
- message(FATAL_ERROR "Invalid arguments. generate_source requires output.")
+ if(NOT _GSO_OUTPUT)
+ message(FATAL_ERROR "generate_source: Missing OUTPUT argument")
endif()
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}"
@@ -424,7 +434,7 @@ else()
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
# A single target handles generation of all generated files. If
- # they are dependend upon separately by multiple targets, this
+ # they are depended upon separately by multiple targets, this
# confuses parallel make (it would require a separate top-level
# target for each file to track the dependencies properly).
add_custom_target(genfiles DEPENDS
@@ -505,7 +515,7 @@ set(png_fix_itxt_sources
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
-endif(MSVC)
+endif()
if(PNG_DEBUG)
add_definitions(-DPNG_DEBUG)
@@ -585,7 +595,7 @@ if(NOT PNG_LIB_TARGETS)
message(SEND_ERROR
"No library variant selected to build. "
"Please enable at least one of the following options: "
- " PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK")
+ "PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK")
endif()
if(PNG_SHARED AND WIN32)
@@ -598,11 +608,11 @@ function(png_add_test)
set(multiValueArgs OPTIONS FILES)
cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- if (NOT _PAT_NAME)
- message(FATAL_ERROR "Invalid arguments. png_add_test requires name.")
+ if(NOT _PAT_NAME)
+ message(FATAL_ERROR "png_add_test: Missing NAME argument")
endif()
- if (NOT _PAT_COMMAND)
- message(FATAL_ERROR "Invalid arguments. png_add_test requires command.")
+ if(NOT _PAT_COMMAND)
+ message(FATAL_ERROR "png_add_test: Missing COMMAND argument")
endif()
set(TEST_OPTIONS "${_PAT_OPTIONS}")
@@ -610,19 +620,11 @@ function(png_add_test)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" @ONLY)
- if(CMAKE_MAJOR_VERSION GREATER 2) # have generator expressions
- add_test(NAME "${_PAT_NAME}"
- COMMAND "${CMAKE_COMMAND}"
- "-DLIBPNG=$<TARGET_FILE:png>"
- "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>"
- -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
- else() # old 2.x add_test; limited and won't work well on Windows
- # Note LIBPNG is a dummy value as there are no generator expressions
- add_test("${_PAT_NAME}" "${CMAKE_COMMAND}"
- "-DLIBPNG=${CMAKE_CURRENT_BINARY_DIR}/libpng.so"
- "-DTEST_COMMAND=./${_PAT_COMMAND}"
- -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
- endif()
+ add_test(NAME "${_PAT_NAME}"
+ COMMAND "${CMAKE_COMMAND}"
+ "-DLIBPNG=$<TARGET_FILE:png>"
+ "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>"
+ -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
endfunction()
if(PNG_TESTS AND PNG_SHARED)
@@ -687,11 +689,11 @@ if(PNG_TESTS AND PNG_SHARED)
set(TEST_PNG_VALID TRUE)
if(TEST_PNG_ALPHA)
- if (NOT "${alpha_type}" STREQUAL "alpha")
+ if(NOT "${alpha_type}" STREQUAL "alpha")
set(TEST_PNG_VALID FALSE)
endif()
else()
- if ("${alpha_type}" STREQUAL "alpha")
+ if("${alpha_type}" STREQUAL "alpha")
set(TEST_PNG_VALID FALSE)
endif()
endif()
@@ -760,51 +762,44 @@ endif()
# copies if different.
include(CMakeParseArguments)
-function(CREATE_SYMLINK DEST_FILE)
+function(create_symlink DEST_FILE)
cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN})
if(NOT S_TARGET AND NOT S_FILE)
- message(FATAL_ERROR "Specify either a TARGET or a FILE for CREATE_SYMLINK to link to.")
- endif(NOT S_TARGET AND NOT S_FILE)
+ message(FATAL_ERROR "create_symlink: Missing TARGET or FILE argument")
+ endif()
if(S_TARGET AND S_FILE)
- message(FATAL_ERROR "CREATE_SYMLINK called with both source file ${S_FILE} and build target ${S_TARGET} arguments - can only handle 1 type per call.")
- endif(S_TARGET AND S_FILE)
+ message(FATAL_ERROR "create_symlink: Both source file ${S_FILE} and build target ${S_TARGET} arguments are present; can only have one.")
+ endif()
if(S_FILE)
# If we don't need to symlink something that's coming from a build target,
# we can go ahead and symlink/copy at configure time.
-
- if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
+ if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
execute_process(
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
- )
- else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+ else()
execute_process(
- COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
- )
- endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
- endif(S_FILE)
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+ endif()
+ endif()
if(S_TARGET)
# We need to use generator expressions, which can be a bit tricky, so for
# simplicity make the symlink a POST_BUILD step and use the TARGET
# signature of add_custom_command.
-
- if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
+ if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
add_custom_command(TARGET ${S_TARGET} POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
- )
- else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE})
+ else()
add_custom_command(TARGET ${S_TARGET} POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
- )
- endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
-
- endif(S_TARGET)
+ COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE})
+ endif()
+ endif()
endfunction()
@@ -816,103 +811,95 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake @ONLY)
-
# libpng is a library so default to 'lib'
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
set(CMAKE_INSTALL_LIBDIR lib)
-endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
+endif()
# CREATE PKGCONFIG FILES
-# we use the same files like ./configure, so we have to set its vars
+# We use the same files like ./configure, so we have to set its vars.
# Only do this on Windows for Cygwin - the files don't make much sense outside
-# a UNIX look alike
+# of a UNIX look-alike.
if(NOT WIN32 OR CYGWIN OR MINGW)
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
- set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
- set(includedir ${CMAKE_INSTALL_PREFIX}/include)
+ set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
+ set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
set(LIBS "-lz -lm")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
- CREATE_SYMLINK(libpng.pc FILE ${PNGLIB_NAME}.pc)
+ create_symlink(libpng.pc FILE ${PNGLIB_NAME}.pc)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
- CREATE_SYMLINK(libpng-config FILE ${PNGLIB_NAME}-config)
-endif(NOT WIN32 OR CYGWIN OR MINGW)
+ create_symlink(libpng-config FILE ${PNGLIB_NAME}-config)
+endif()
# SET UP LINKS
if(PNG_SHARED)
set_target_properties(png PROPERTIES
-# VERSION 16.${PNGLIB_RELEASE}.1.6.34
+# VERSION 16.${PNGLIB_RELEASE}.1.6.37
VERSION 16.${PNGLIB_RELEASE}.0
SOVERSION 16
CLEAN_DIRECT_OUTPUT 1)
endif()
-# If CMake > 2.4.x, we set a variable used below to export
-# targets to an export file.
-# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
-if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
- set(PNG_EXPORT_RULE EXPORT libpng)
-elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
- set(PNG_EXPORT_RULE EXPORT libpng)
-endif()
-
# INSTALL
-if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
+if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
install(TARGETS ${PNG_LIB_TARGETS}
- ${PNG_EXPORT_RULE}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ EXPORT libpng
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(PNG_SHARED)
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
if(CYGWIN OR MINGW)
- CREATE_SYMLINK(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png)
- install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
- endif(CYGWIN OR MINGW)
+ create_symlink(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png)
+ install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ endif()
if(NOT WIN32)
- CREATE_SYMLINK(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png)
- install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
- endif(NOT WIN32)
- endif(PNG_SHARED)
+ create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png)
+ install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ endif()
+ endif()
if(PNG_STATIC)
if(NOT WIN32 OR CYGWIN OR MINGW)
- CREATE_SYMLINK( libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static)
- install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
- endif(NOT WIN32 OR CYGWIN OR MINGW)
- endif()
+ create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static)
+ install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ endif()
+ endif()
endif()
-if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
- install(FILES ${libpng_public_hdrs} DESTINATION include)
- install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
+if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
+ install(FILES ${libpng_public_hdrs} DESTINATION include)
+ install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
endif()
-if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
+if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL)
if(NOT WIN32 OR CYGWIN OR MINGW)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
- DESTINATION bin)
- endif(NOT WIN32 OR CYGWIN OR MINGW)
+ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
+ endif()
endif()
-if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL )
+if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL)
install(TARGETS ${PNG_BIN_TARGETS}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION bin)
endif()
-if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
+if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL)
# Install man pages
if(NOT PNG_MAN_DIR)
set(PNG_MAN_DIR "share/man")
endif()
- install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
- install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
+ install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
+ install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
# Install pkg-config files
if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
@@ -923,12 +910,11 @@ if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
DESTINATION bin)
- endif(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
+ endif()
endif()
-# On versions of CMake that support it, create an export file CMake
-# users can include() to import our targets
-if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
+# Create an export file that CMake users can include() to import our targets.
+if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL)
install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
endif()
diff --git a/libpng/INSTALL b/libpng/INSTALL
index e8edb724..4c170225 100644
--- a/libpng/INSTALL
+++ b/libpng/INSTALL
@@ -284,7 +284,7 @@ those sections that are actually used will be loaded into memory.
XIV. Enabling or disabling hardware optimizations
-Certain hardware capabilites, such as the Intel SSE instructions,
+Certain hardware capabilities, such as the Intel SSE instructions,
are normally detected at run time. Enable them with configure options
such as one of
diff --git a/libpng/LICENSE b/libpng/LICENSE
index 4cda4fa0..e0c5b531 100644
--- a/libpng/LICENSE
+++ b/libpng/LICENSE
@@ -1,53 +1,82 @@
+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.
+PNG Reference Library License version 2
+---------------------------------------
-COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+ * Copyright (c) 1995-2019 The PNG Reference Library Authors.
+ * Copyright (c) 2018-2019 Cosmin Truta.
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * Copyright (c) 1996-1997 Andreas Dilger.
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
-If you modify libpng you may insert additional notices immediately following
-this sentence.
+The software is supplied "as is", without warranty of any kind,
+express or implied, including, without limitation, the warranties
+of merchantability, fitness for a particular purpose, title, and
+non-infringement. In no event shall the Copyright owners, or
+anyone distributing the software, be liable for any damages or
+other liability, whether in contract, tort or otherwise, arising
+from, out of, or in connection with the software, or the use or
+other dealings in the software, even if advised of the possibility
+of such damage.
-This code is released under the libpng license.
+Permission is hereby granted to use, copy, modify, and distribute
+this software, or portions hereof, for any purpose, without fee,
+subject to the following restrictions:
-libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
-Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
+ 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 Copyright notice may not be removed or altered from any
+ source or altered source distribution.
+
+
+PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
+-----------------------------------------------------------------------
+
+libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
+Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, 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
- Mans Rullgard
- Cosmin Truta
- Gilles Vollant
- James Yu
- Mandar Sahastrabuddhe
- Google Inc.
- Vadim Barkov
+ Simon-Pierre Cadieux
+ Eric S. Raymond
+ Mans Rullgard
+ Cosmin Truta
+ Gilles Vollant
+ James Yu
+ Mandar Sahastrabuddhe
+ Google Inc.
+ Vadim Barkov
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.
+ 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.
Some files in the "contrib" directory and some configure-generated
-files that are distributed with libpng have other copyright owners and
+files that are distributed with libpng have other copyright owners, and
are released under other open source licenses.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, 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:
+license as libpng-0.96, with the following individuals added to the
+list of Contributing Authors:
- Tom Lane
- Glenn Randers-Pehrson
- Willem van Schaik
+ 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, are derived from libpng-0.88,
@@ -55,14 +84,14 @@ and are 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
+ John Bowler
+ Kevin Bracey
+ Sam Bushell
+ Magnus Holmgren
+ Greg Roelofs
+ Tom Tanner
-Some files in the "scripts" directory have other copyright owners
+Some files in the "scripts" directory have other copyright owners,
but are released under this license.
libpng versions 0.5, May 1995, through 0.88, January 1996, are
@@ -71,63 +100,35 @@ 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.
+ 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.
-
-END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
-
-TRADEMARK:
-
-The name "libpng" has not been registered by the Copyright owner
-as a trademark in any jurisdiction. However, because libpng has
-been distributed and maintained world-wide, continually since 1995,
-the Copyright owner claims "common-law trademark protection" in any
-jurisdiction where common-law trademark is recognized.
-
-OSI CERTIFICATION:
-
-Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
-a certification mark of the Open Source Initiative. OSI has not addressed
-the additional disclaimers inserted at version 1.0.7.
+ 1. The origin of this source code must not be misrepresented.
-EXPORT CONTROL:
+ 2. Altered versions must be plainly marked as such and must not
+ be misrepresented as being the original source.
-The Copyright owner believes that the Export Control Classification
-Number (ECCN) for libpng is EAR99, which means not subject to export
-controls or International Traffic in Arms Regulations (ITAR) because
-it is open source, publicly available software, that does not contain
-any encryption software. See the EAR, paragraphs 734.3(b)(3) and
-734.7(b).
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-September 29, 2017
+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.
diff --git a/libpng/Makefile.am b/libpng/Makefile.am
index 08db3e59..4f621aa4 100644
--- a/libpng/Makefile.am
+++ b/libpng/Makefile.am
@@ -1,7 +1,7 @@
# Makefile.am, the source file for Makefile.in (and hence Makefile), is
#
+# Copyright (c) 2018 Cosmin Truta
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
-# Last changed in libpng 1.6.25 [September 1, 2016]
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
@@ -95,7 +95,8 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
- arm/filter_neon.S arm/filter_neon_intrinsics.c
+ arm/filter_neon.S arm/filter_neon_intrinsics.c \
+ arm/palette_neon_intrinsics.c
endif
if PNG_MIPS_MSA
@@ -147,7 +148,7 @@ pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
# from those directories being included. This only works if the configure is
# not done in the source directory!
EXTRA_DIST= \
- ANNOUNCE CHANGES INSTALL LICENSE README TODO \
+ ANNOUNCE AUTHORS CHANGES INSTALL LICENSE README TODO TRADEMARK \
pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
$(TESTS) $(XFAIL_TESTS) tests/pngstest \
diff --git a/libpng/Makefile.in b/libpng/Makefile.in
index b25f3387..81ac1c85 100644
--- a/libpng/Makefile.in
+++ b/libpng/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -16,8 +16,8 @@
# Makefile.am, the source file for Makefile.in (and hence Makefile), is
#
+# Copyright (c) 2018 Cosmin Truta
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
-# Last changed in libpng 1.6.25 [September 1, 2016]
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
@@ -106,7 +106,8 @@ check_PROGRAMS = pngtest$(EXEEXT) pngunknown$(EXEEXT) \
@HAVE_CLOCK_GETTIME_TRUE@am__append_1 = timepng
bin_PROGRAMS = pngfix$(EXEEXT) png-fix-itxt$(EXEEXT)
@PNG_ARM_NEON_TRUE@am__append_2 = arm/arm_init.c\
-@PNG_ARM_NEON_TRUE@ arm/filter_neon.S arm/filter_neon_intrinsics.c
+@PNG_ARM_NEON_TRUE@ arm/filter_neon.S arm/filter_neon_intrinsics.c \
+@PNG_ARM_NEON_TRUE@ arm/palette_neon_intrinsics.c
@PNG_MIPS_MSA_TRUE@am__append_3 = mips/mips_init.c\
@PNG_MIPS_MSA_TRUE@ mips/filter_msa_intrinsics.c
@@ -142,6 +143,12 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = libpng.pc libpng-config
CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \
+ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \
+ "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"
+@HAVE_CLOCK_GETTIME_TRUE@am__EXEEXT_1 = timepng$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -169,10 +176,6 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
- "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" \
- "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \
- "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD =
am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES_DIST = png.c \
@@ -181,12 +184,14 @@ am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES_DIST = png.c \
pngwtran.c pngwutil.c png.h pngconf.h pngdebug.h pnginfo.h \
pngpriv.h pngstruct.h pngusr.dfa arm/arm_init.c \
arm/filter_neon.S arm/filter_neon_intrinsics.c \
- mips/mips_init.c mips/filter_msa_intrinsics.c \
- intel/intel_init.c intel/filter_sse2_intrinsics.c \
- powerpc/powerpc_init.c powerpc/filter_vsx_intrinsics.c
+ arm/palette_neon_intrinsics.c mips/mips_init.c \
+ mips/filter_msa_intrinsics.c intel/intel_init.c \
+ intel/filter_sse2_intrinsics.c powerpc/powerpc_init.c \
+ powerpc/filter_vsx_intrinsics.c
am__dirstamp = $(am__leading_dot)dirstamp
@PNG_ARM_NEON_TRUE@am__objects_1 = arm/arm_init.lo arm/filter_neon.lo \
-@PNG_ARM_NEON_TRUE@ arm/filter_neon_intrinsics.lo
+@PNG_ARM_NEON_TRUE@ arm/filter_neon_intrinsics.lo \
+@PNG_ARM_NEON_TRUE@ arm/palette_neon_intrinsics.lo
@PNG_MIPS_MSA_TRUE@am__objects_2 = mips/mips_init.lo \
@PNG_MIPS_MSA_TRUE@ mips/filter_msa_intrinsics.lo
@PNG_INTEL_SSE_TRUE@am__objects_3 = intel/intel_init.lo \
@@ -211,8 +216,6 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
$(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS) $(LDFLAGS) -o \
$@
-@HAVE_CLOCK_GETTIME_TRUE@am__EXEEXT_1 = timepng$(EXEEXT)
-PROGRAMS = $(bin_PROGRAMS)
am_png_fix_itxt_OBJECTS = contrib/tools/png-fix-itxt.$(OBJEXT)
png_fix_itxt_OBJECTS = $(am_png_fix_itxt_OBJECTS)
png_fix_itxt_LDADD = $(LDADD)
@@ -255,11 +258,36 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/png.Plo ./$(DEPDIR)/pngerror.Plo \
+ ./$(DEPDIR)/pngget.Plo ./$(DEPDIR)/pngmem.Plo \
+ ./$(DEPDIR)/pngpread.Plo ./$(DEPDIR)/pngread.Plo \
+ ./$(DEPDIR)/pngrio.Plo ./$(DEPDIR)/pngrtran.Plo \
+ ./$(DEPDIR)/pngrutil.Plo ./$(DEPDIR)/pngset.Plo \
+ ./$(DEPDIR)/pngtest.Po ./$(DEPDIR)/pngtrans.Plo \
+ ./$(DEPDIR)/pngwio.Plo ./$(DEPDIR)/pngwrite.Plo \
+ ./$(DEPDIR)/pngwtran.Plo ./$(DEPDIR)/pngwutil.Plo \
+ arm/$(DEPDIR)/arm_init.Plo arm/$(DEPDIR)/filter_neon.Plo \
+ arm/$(DEPDIR)/filter_neon_intrinsics.Plo \
+ arm/$(DEPDIR)/palette_neon_intrinsics.Plo \
+ contrib/libtests/$(DEPDIR)/pngimage.Po \
+ contrib/libtests/$(DEPDIR)/pngstest.Po \
+ contrib/libtests/$(DEPDIR)/pngunknown.Po \
+ contrib/libtests/$(DEPDIR)/pngvalid.Po \
+ contrib/libtests/$(DEPDIR)/timepng.Po \
+ contrib/tools/$(DEPDIR)/png-fix-itxt.Po \
+ contrib/tools/$(DEPDIR)/pngcp.Po \
+ contrib/tools/$(DEPDIR)/pngfix.Po \
+ intel/$(DEPDIR)/filter_sse2_intrinsics.Plo \
+ intel/$(DEPDIR)/intel_init.Plo \
+ mips/$(DEPDIR)/filter_msa_intrinsics.Plo \
+ mips/$(DEPDIR)/mips_init.Plo \
+ powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo \
+ powerpc/$(DEPDIR)/powerpc_init.Plo
am__mv = mv -f
CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
-LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CCASFLAGS) $(CCASFLAGS)
@@ -506,7 +534,7 @@ TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
$(srcdir)/config.h.in $(srcdir)/libpng-config.in \
- $(srcdir)/libpng.pc.in INSTALL README TODO compile \
+ $(srcdir)/libpng.pc.in AUTHORS INSTALL README TODO compile \
config.guess config.sub depcomp install-sh ltmain.sh missing \
test-driver
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -756,7 +784,7 @@ pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
# from those directories being included. This only works if the configure is
# not done in the source directory!
EXTRA_DIST = \
- ANNOUNCE CHANGES INSTALL LICENSE README TODO \
+ ANNOUNCE AUTHORS CHANGES INSTALL LICENSE README TODO TRADEMARK \
pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
$(TESTS) $(XFAIL_TESTS) tests/pngstest \
@@ -814,8 +842,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -845,6 +873,64 @@ libpng.pc: $(top_builddir)/config.status $(srcdir)/libpng.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
libpng-config: $(top_builddir)/config.status $(srcdir)/libpng-config.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -890,6 +976,8 @@ arm/arm_init.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp)
arm/filter_neon.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp)
arm/filter_neon_intrinsics.lo: arm/$(am__dirstamp) \
arm/$(DEPDIR)/$(am__dirstamp)
+arm/palette_neon_intrinsics.lo: arm/$(am__dirstamp) \
+ arm/$(DEPDIR)/$(am__dirstamp)
mips/$(am__dirstamp):
@$(MKDIR_P) mips
@: > mips/$(am__dirstamp)
@@ -922,64 +1010,6 @@ powerpc/filter_vsx_intrinsics.lo: powerpc/$(am__dirstamp) \
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la: $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES) $(EXTRA_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES)
$(AM_V_CCLD)$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LINK) -rpath $(libdir) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD) $(LIBS)
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
- fi; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p \
- || test -f $$p1 \
- ; then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' \
- -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' \
- `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
-
-clean-checkPROGRAMS:
- @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
contrib/tools/$(am__dirstamp):
@$(MKDIR_P) contrib/tools
@: > contrib/tools/$(am__dirstamp)
@@ -1097,39 +1127,46 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/png.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngerror.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngget.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngmem.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngpread.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngread.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrio.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrtran.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrutil.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngset.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtrans.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwio.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwrite.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwtran.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwutil.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_init.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon_intrinsics.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngimage.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngstest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngunknown.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngvalid.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/timepng.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/png-fix-itxt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngcp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngfix.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/filter_sse2_intrinsics.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/intel_init.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/filter_msa_intrinsics.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/mips_init.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/powerpc_init.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/png.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngerror.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngget.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngpread.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngread.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrtran.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrutil.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngset.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtest.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtrans.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwrite.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwtran.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwutil.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_init.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon_intrinsics.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/palette_neon_intrinsics.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngimage.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngstest.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngunknown.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngvalid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/timepng.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/png-fix-itxt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngcp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngfix.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/filter_sse2_intrinsics.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/intel_init.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/filter_msa_intrinsics.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/mips_init.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/powerpc_init.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.S.o:
@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1520,7 +1557,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS:
+check-TESTS: $(check_PROGRAMS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1787,7 +1824,10 @@ tests/pngimage-full.log: tests/pngimage-full
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1830,7 +1870,7 @@ distdir: $(DISTFILES)
! -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
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
@@ -1855,7 +1895,7 @@ dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
@@ -1873,7 +1913,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@@ -1883,7 +1923,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
@@ -1957,12 +1997,12 @@ check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(MANS) $(DATA) \
$(HEADERS) config.h
install-binPROGRAMS: install-libLTLIBRARIES
installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -2024,7 +2064,40 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf ./$(DEPDIR) arm/$(DEPDIR) contrib/libtests/$(DEPDIR) contrib/tools/$(DEPDIR) intel/$(DEPDIR) mips/$(DEPDIR) powerpc/$(DEPDIR)
+ -rm -f ./$(DEPDIR)/png.Plo
+ -rm -f ./$(DEPDIR)/pngerror.Plo
+ -rm -f ./$(DEPDIR)/pngget.Plo
+ -rm -f ./$(DEPDIR)/pngmem.Plo
+ -rm -f ./$(DEPDIR)/pngpread.Plo
+ -rm -f ./$(DEPDIR)/pngread.Plo
+ -rm -f ./$(DEPDIR)/pngrio.Plo
+ -rm -f ./$(DEPDIR)/pngrtran.Plo
+ -rm -f ./$(DEPDIR)/pngrutil.Plo
+ -rm -f ./$(DEPDIR)/pngset.Plo
+ -rm -f ./$(DEPDIR)/pngtest.Po
+ -rm -f ./$(DEPDIR)/pngtrans.Plo
+ -rm -f ./$(DEPDIR)/pngwio.Plo
+ -rm -f ./$(DEPDIR)/pngwrite.Plo
+ -rm -f ./$(DEPDIR)/pngwtran.Plo
+ -rm -f ./$(DEPDIR)/pngwutil.Plo
+ -rm -f arm/$(DEPDIR)/arm_init.Plo
+ -rm -f arm/$(DEPDIR)/filter_neon.Plo
+ -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo
+ -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo
+ -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po
+ -rm -f contrib/libtests/$(DEPDIR)/timepng.Po
+ -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po
+ -rm -f contrib/tools/$(DEPDIR)/pngcp.Po
+ -rm -f contrib/tools/$(DEPDIR)/pngfix.Po
+ -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo
+ -rm -f intel/$(DEPDIR)/intel_init.Plo
+ -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo
+ -rm -f mips/$(DEPDIR)/mips_init.Plo
+ -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo
+ -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -2076,7 +2149,40 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf ./$(DEPDIR) arm/$(DEPDIR) contrib/libtests/$(DEPDIR) contrib/tools/$(DEPDIR) intel/$(DEPDIR) mips/$(DEPDIR) powerpc/$(DEPDIR)
+ -rm -f ./$(DEPDIR)/png.Plo
+ -rm -f ./$(DEPDIR)/pngerror.Plo
+ -rm -f ./$(DEPDIR)/pngget.Plo
+ -rm -f ./$(DEPDIR)/pngmem.Plo
+ -rm -f ./$(DEPDIR)/pngpread.Plo
+ -rm -f ./$(DEPDIR)/pngread.Plo
+ -rm -f ./$(DEPDIR)/pngrio.Plo
+ -rm -f ./$(DEPDIR)/pngrtran.Plo
+ -rm -f ./$(DEPDIR)/pngrutil.Plo
+ -rm -f ./$(DEPDIR)/pngset.Plo
+ -rm -f ./$(DEPDIR)/pngtest.Po
+ -rm -f ./$(DEPDIR)/pngtrans.Plo
+ -rm -f ./$(DEPDIR)/pngwio.Plo
+ -rm -f ./$(DEPDIR)/pngwrite.Plo
+ -rm -f ./$(DEPDIR)/pngwtran.Plo
+ -rm -f ./$(DEPDIR)/pngwutil.Plo
+ -rm -f arm/$(DEPDIR)/arm_init.Plo
+ -rm -f arm/$(DEPDIR)/filter_neon.Plo
+ -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo
+ -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo
+ -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po
+ -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po
+ -rm -f contrib/libtests/$(DEPDIR)/timepng.Po
+ -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po
+ -rm -f contrib/tools/$(DEPDIR)/pngcp.Po
+ -rm -f contrib/tools/$(DEPDIR)/pngfix.Po
+ -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo
+ -rm -f intel/$(DEPDIR)/intel_init.Plo
+ -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo
+ -rm -f mips/$(DEPDIR)/mips_init.Plo
+ -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo
+ -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -2104,19 +2210,19 @@ uninstall-man: uninstall-man3 uninstall-man5
.MAKE: all check check-am install install-am install-data-am \
install-exec-am install-strip uninstall-am
-.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
- check-am clean clean-binPROGRAMS clean-checkPROGRAMS \
- clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \
- cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
- dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
- dist-zip distcheck distclean distclean-compile \
- distclean-generic distclean-hdr distclean-libtool \
- distclean-tags distcleancheck distdir distuninstallcheck dvi \
- dvi-am html html-am info info-am install install-am \
- install-binPROGRAMS install-binSCRIPTS install-data \
- install-data-am install-data-hook install-dvi install-dvi-am \
- install-exec install-exec-am install-exec-hook install-html \
- install-html-am install-info install-info-am \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
+ check-TESTS check-am clean clean-binPROGRAMS \
+ clean-checkPROGRAMS clean-cscope clean-generic \
+ clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \
+ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \
+ dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
+ distclean distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-binSCRIPTS \
+ install-data install-data-am install-data-hook install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
install-libLTLIBRARIES install-man install-man3 install-man5 \
install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
install-pkgconfigDATA install-pkgincludeHEADERS install-ps \
diff --git a/libpng/README b/libpng/README
index 0da5a5ef..cfc1f0e3 100644
--- a/libpng/README
+++ b/libpng/README
@@ -1,15 +1,16 @@
-README for libpng version 1.6.34 - September 29, 2017 (shared library 16.0)
-See the note about version numbers near the top of png.h
+README for libpng version 1.6.37 - April 14, 2019
+=================================================
+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 or
-libpng-*.tar.xz or if you want UNIX-style line endings in the text files,
-or lpng*.7z or lpng*.zip if you want DOS-style line endings.
+libpng-*.tar.xz or 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
+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
@@ -60,94 +61,59 @@ 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-manual.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
+For a detailed description on using libpng, read libpng-manual.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.
+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.
+some images.
+
+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 zlib.net.
+zlib should be available at the same place that libpng is, or at
+https://zlib.net.
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.sourceforge.io in the
-[DOWNLOAD] area, and at http://libpng.download/src . If you
-can't find it in any of those places, e-mail me, and I'll help you find it.
-
-I am not a lawyer, but I believe that the Export Control Classification
-Number (ECCN) for libpng is EAR99, which means not subject to export
-controls or International Traffic in Arms Regulations (ITAR) because it
-is open source, publicly available software, that does not contain any
-encryption software. See the EAR, paragraphs 734.3(b)(3) and 734.7(b).
-
-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
+[DOWNLOAD] area, and at http://libpng.download/src .
+
+This release, based in a large way on Glenn's, Guy's and Andreas'
+earlier work, was created and will be supported by myself and the PNG
development group.
Send comments/corrections/commendations to png-mng-implement at
lists.sourceforge.net (subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe) or to glennrp at users.sourceforge.net
+to subscribe).
-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
-png-mng-misc at lists.sf.net (subscription required; visit
+Send general questions about the PNG specification to png-mng-misc
+at lists.sourceforge.net (subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-misc to
-subscribe). 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 twenty 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.
+subscribe).
Files in this distribution:
ANNOUNCE => Announcement of this version, with recent changes
+ AUTHORS => List of contributing authors
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
+ TRADEMARK => Trademark information
example.c => Example code for using libpng functions
libpng.3 => manual page for libpng (includes libpng-manual.txt)
libpng-manual.txt => Description of libpng and its functions
@@ -208,15 +174,10 @@ Files in this distribution:
scripts => Directory containing scripts for building libpng:
(see scripts/README.txt for the list of scripts)
-Good luck, and happy coding.
-
--Glenn Randers-Pehrson (current maintainer, since 1998)
- Internet: glennrp at users.sourceforge.net
-
--Andreas Eric Dilger (former maintainer, 1996-1997)
- Internet: adilger at enel.ucalgary.ca
- Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
+Good luck, and happy coding!
--Guy Eric Schalnat (original author and former maintainer, 1995-1996)
- (formerly of Group 42, Inc)
- Internet: gschal at infinet.com
+ * Cosmin Truta (current maintainer, since 2018)
+ * Glenn Randers-Pehrson (former maintainer, 1998-2018)
+ * Andreas Eric Dilger (former maintainer, 1996-1997)
+ * Guy Eric Schalnat (original author and former maintainer, 1995-1996)
+ (formerly of Group 42, Inc.)
diff --git a/libpng/TODO b/libpng/TODO
index 36d6092a..562dab06 100644
--- a/libpng/TODO
+++ b/libpng/TODO
@@ -1,30 +1,23 @@
-/*
TODO - list of things to do for libpng:
-Final bug fixes.
-Better C++ wrapper/full C++ implementation?
-Fix problem with C++ and EXTERN "C".
-cHRM transformation.
-Remove setjmp/longjmp usage in favor of returning error codes. As a start on
- this, minimize the use of png_error(), replacing them with
- png_warning(); return(0); or similar.
-Palette creation.
-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).
-Avoid building gamma tables whenever possible.
-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.
-Add interpolated method of handling interlacing.
-Extend pngvalid.c to validate more of the libpng transformations.
-Refactor preprocessor conditionals to compile entire statements
-
-*/
+* Fix all defects (duh!)
+* Better C++ wrapper / full C++ implementation (?)
+* Fix the problems with C++ and 'extern "C"'.
+* cHRM transformation.
+* Palette creation.
+* "grayscale->palette" transformation and "palette->grayscale" detection.
+* Improved dithering.
+* Multi-lingual error and warning message support.
+* Complete sRGB transformation. (Currently it simply uses gamma=0.45455.)
+* Man pages for function calls.
+* Better documentation.
+* Better filter selection
+ (e.g., counting huffman bits/precompression; filter inertia; filter costs).
+* Histogram creation.
+* Text conversion between different code pages (e.g., Latin-1 -> Mac).
+* Avoid building gamma tables whenever possible.
+* Greater precision in changing to linear gamma for compositing against
+ background, and in doing rgb-to-gray transformations.
+* Investigate pre-incremented loop counters and other loop constructions.
+* Interpolated method of handling interlacing.
+* More validations for libpng transformations.
diff --git a/libpng/TRADEMARK b/libpng/TRADEMARK
new file mode 100644
index 00000000..ac667187
--- /dev/null
+++ b/libpng/TRADEMARK
@@ -0,0 +1,8 @@
+TRADEMARK
+=========
+
+The name "libpng" has not been registered by the Copyright owners
+as a trademark in any jurisdiction. However, because libpng has
+been distributed and maintained world-wide, continually since 1995,
+the Copyright owners claim "common-law trademark protection" in any
+jurisdiction where common-law trademark is recognized.
diff --git a/libpng/aclocal.m4 b/libpng/aclocal.m4
index 0ea1ad32..bc18c34f 100644
--- a/libpng/aclocal.m4
+++ b/libpng/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ 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-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# 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.15'
+[am__api_version='1.16'
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.15], [],
+m4_if([$1], [1.16.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_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.15])dnl
+[AM_AUTOMAKE_VERSION([1.16.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# Figure out how to run the assembler. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -78,7 +78,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -130,7 +130,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -161,7 +161,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -352,13 +352,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 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_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
@@ -366,49 +365,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# Older Autoconf 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
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_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
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: 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"`
- # 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'`; 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
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@@ -417,18 +408,17 @@ AC_DEFUN([_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.
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll 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"])
-])
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -515,8 +505,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
@@ -583,7 +573,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -625,7 +615,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -646,7 +636,7 @@ if test x"${install_sh+set}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -668,7 +658,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -703,7 +693,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -711,49 +701,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# AM_MAKE_INCLUDE()
# -----------------
-# Check to see how make treats includes.
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.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
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -792,7 +775,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -821,7 +804,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -868,7 +851,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -887,7 +870,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -968,7 +951,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1028,7 +1011,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1056,7 +1039,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1075,7 +1058,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/libpng/arm/arm_init.c b/libpng/arm/arm_init.c
index 02df812e..a34ecdbe 100644
--- a/libpng/arm/arm_init.c
+++ b/libpng/arm/arm_init.c
@@ -1,14 +1,15 @@
/* arm_init.c - NEON optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
- * Last changed in libpng 1.6.22 [May 26, 2016]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
+
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
* called.
*/
diff --git a/libpng/arm/filter_neon.S b/libpng/arm/filter_neon.S
index 000764cd..2308aad1 100644
--- a/libpng/arm/filter_neon.S
+++ b/libpng/arm/filter_neon.S
@@ -1,9 +1,9 @@
/* filter_neon.S - NEON optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2014,2017 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
- * Last changed in libpng 1.6.31 [July 27, 2017]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
diff --git a/libpng/arm/filter_neon_intrinsics.c b/libpng/arm/filter_neon_intrinsics.c
index ea7e356b..553c0be2 100644
--- a/libpng/arm/filter_neon_intrinsics.c
+++ b/libpng/arm/filter_neon_intrinsics.c
@@ -1,12 +1,11 @@
/* filter_neon_intrinsics.c - NEON optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* Written by James Yu <james.yu at linaro.org>, October 2013.
* Based on filter_neon.S, written by Mans Rullgard, 2011.
*
- * Last changed in libpng 1.6.22 [May 26, 2016]
- *
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
@@ -19,7 +18,11 @@
/* This code requires -mfpu=neon on the command line: */
#if PNG_ARM_NEON_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */
-#include <arm_neon.h>
+#if defined(_MSC_VER) && defined(_M_ARM64)
+# include <arm64_neon.h>
+#else
+# include <arm_neon.h>
+#endif
/* libpng row pointers are not necessarily aligned to any particular boundary,
* however this code will only work with appropriate alignment. arm/arm_init.c
@@ -33,6 +36,11 @@
* 'type'. This is written this way just to hide the GCC strict aliasing
* warning; note that the code is safe because there never is an alias between
* the input and output pointers.
+ *
+ * When compiling with MSVC ARM64, the png_ldr macro can't be passed directly
+ * to vst4_lane_u32, because of an internal compiler error inside MSVC.
+ * To avoid this compiler bug, we use a temporary variable (vdest_val) to store
+ * the result of png_ldr.
*/
#define png_ldr(type,pointer)\
(temp_pointer = png_ptr(type,pointer), *temp_pointer)
@@ -125,12 +133,15 @@ png_read_filter_row_sub4_neon(png_row_infop row_info, png_bytep row,
uint8x8x4_t *vrpt = png_ptr(uint8x8x4_t,&vtmp);
uint8x8x4_t vrp = *vrpt;
uint32x2x4_t *temp_pointer;
+ uint32x2x4_t vdest_val;
vdest.val[0] = vadd_u8(vdest.val[3], vrp.val[0]);
vdest.val[1] = vadd_u8(vdest.val[0], vrp.val[1]);
vdest.val[2] = vadd_u8(vdest.val[1], vrp.val[2]);
vdest.val[3] = vadd_u8(vdest.val[2], vrp.val[3]);
- vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
+
+ vdest_val = png_ldr(uint32x2x4_t, &vdest);
+ vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0);
}
PNG_UNUSED(prev_row)
@@ -223,6 +234,7 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
uint8x8x4_t *vrpt, *vppt;
uint8x8x4_t vrp, vpp;
uint32x2x4_t *temp_pointer;
+ uint32x2x4_t vdest_val;
vtmp = vld4_u32(png_ptr(uint32_t,rp));
vrpt = png_ptr(uint8x8x4_t,&vtmp);
@@ -240,7 +252,8 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
vdest.val[3] = vhadd_u8(vdest.val[2], vpp.val[3]);
vdest.val[3] = vadd_u8(vdest.val[3], vrp.val[3]);
- vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
+ vdest_val = png_ldr(uint32x2x4_t, &vdest);
+ vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0);
}
}
@@ -359,6 +372,7 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
uint8x8x4_t *vrpt, *vppt;
uint8x8x4_t vrp, vpp;
uint32x2x4_t *temp_pointer;
+ uint32x2x4_t vdest_val;
vtmp = vld4_u32(png_ptr(uint32_t,rp));
vrpt = png_ptr(uint8x8x4_t,&vtmp);
@@ -378,7 +392,8 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
vlast = vpp.val[3];
- vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
+ vdest_val = png_ldr(uint32x2x4_t, &vdest);
+ vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0);
}
}
diff --git a/libpng/arm/palette_neon_intrinsics.c b/libpng/arm/palette_neon_intrinsics.c
new file mode 100644
index 00000000..b4d1fd2a
--- /dev/null
+++ b/libpng/arm/palette_neon_intrinsics.c
@@ -0,0 +1,149 @@
+
+/* palette_neon_intrinsics.c - NEON optimised palette expansion functions
+ *
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 2017-2018 Arm Holdings. All rights reserved.
+ * Written by Richard Townsend <Richard.Townsend@arm.com>, February 2017.
+ *
+ * This code is released under the libpng license.
+ * For conditions of distribution and use, see the disclaimer
+ * and license in png.h
+ */
+
+#include "../pngpriv.h"
+
+#if PNG_ARM_NEON_IMPLEMENTATION == 1
+
+#if defined(_MSC_VER) && defined(_M_ARM64)
+# include <arm64_neon.h>
+#else
+# include <arm_neon.h>
+#endif
+
+/* Build an RGBA8 palette from the separate RGB and alpha palettes. */
+void
+png_riffle_palette_neon(png_structrp png_ptr)
+{
+ png_const_colorp palette = png_ptr->palette;
+ png_bytep riffled_palette = png_ptr->riffled_palette;
+ png_const_bytep trans_alpha = png_ptr->trans_alpha;
+ int num_trans = png_ptr->num_trans;
+ int i;
+
+ png_debug(1, "in png_riffle_palette_neon");
+
+ /* Initially black, opaque. */
+ uint8x16x4_t w = {{
+ vdupq_n_u8(0x00),
+ vdupq_n_u8(0x00),
+ vdupq_n_u8(0x00),
+ vdupq_n_u8(0xff),
+ }};
+
+ /* First, riffle the RGB colours into an RGBA8 palette.
+ * The alpha component is set to opaque for now.
+ */
+ for (i = 0; i < 256; i += 16)
+ {
+ uint8x16x3_t v = vld3q_u8((png_const_bytep)(palette + i));
+ w.val[0] = v.val[0];
+ w.val[1] = v.val[1];
+ w.val[2] = v.val[2];
+ vst4q_u8(riffled_palette + (i << 2), w);
+ }
+
+ /* Fix up the missing transparency values. */
+ for (i = 0; i < num_trans; i++)
+ riffled_palette[(i << 2) + 3] = trans_alpha[i];
+}
+
+/* Expands a palettized row into RGBA8. */
+int
+png_do_expand_palette_rgba8_neon(png_structrp png_ptr, png_row_infop row_info,
+ png_const_bytep row, png_bytepp ssp, png_bytepp ddp)
+{
+ png_uint_32 row_width = row_info->width;
+ const png_uint_32 *riffled_palette =
+ (const png_uint_32 *)png_ptr->riffled_palette;
+ const png_int_32 pixels_per_chunk = 4;
+ int i;
+
+ png_debug(1, "in png_do_expand_palette_rgba8_neon");
+
+ if (row_width < pixels_per_chunk)
+ return 0;
+
+ /* This function originally gets the last byte of the output row.
+ * The NEON part writes forward from a given position, so we have
+ * to seek this back by 4 pixels x 4 bytes.
+ */
+ *ddp = *ddp - ((pixels_per_chunk * sizeof(png_uint_32)) - 1);
+
+ for (i = 0; i < row_width; i += pixels_per_chunk)
+ {
+ uint32x4_t cur;
+ png_bytep sp = *ssp - i, dp = *ddp - (i << 2);
+ cur = vld1q_dup_u32 (riffled_palette + *(sp - 3));
+ cur = vld1q_lane_u32(riffled_palette + *(sp - 2), cur, 1);
+ cur = vld1q_lane_u32(riffled_palette + *(sp - 1), cur, 2);
+ cur = vld1q_lane_u32(riffled_palette + *(sp - 0), cur, 3);
+ vst1q_u32((void *)dp, cur);
+ }
+ if (i != row_width)
+ {
+ /* Remove the amount that wasn't processed. */
+ i -= pixels_per_chunk;
+ }
+
+ /* Decrement output pointers. */
+ *ssp = *ssp - i;
+ *ddp = *ddp - (i << 2);
+ return i;
+}
+
+/* Expands a palettized row into RGB8. */
+int
+png_do_expand_palette_rgb8_neon(png_structrp png_ptr, png_row_infop row_info,
+ png_const_bytep row, png_bytepp ssp, png_bytepp ddp)
+{
+ png_uint_32 row_width = row_info->width;
+ png_const_bytep palette = (png_const_bytep)png_ptr->palette;
+ const png_uint_32 pixels_per_chunk = 8;
+ int i;
+
+ png_debug(1, "in png_do_expand_palette_rgb8_neon");
+
+ if (row_width <= pixels_per_chunk)
+ return 0;
+
+ /* Seeking this back by 8 pixels x 3 bytes. */
+ *ddp = *ddp - ((pixels_per_chunk * sizeof(png_color)) - 1);
+
+ for (i = 0; i < row_width; i += pixels_per_chunk)
+ {
+ uint8x8x3_t cur;
+ png_bytep sp = *ssp - i, dp = *ddp - ((i << 1) + i);
+ cur = vld3_dup_u8(palette + sizeof(png_color) * (*(sp - 7)));
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 6)), cur, 1);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 5)), cur, 2);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 4)), cur, 3);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 3)), cur, 4);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 2)), cur, 5);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 1)), cur, 6);
+ cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 0)), cur, 7);
+ vst3_u8((void *)dp, cur);
+ }
+
+ if (i != row_width)
+ {
+ /* Remove the amount that wasn't processed. */
+ i -= pixels_per_chunk;
+ }
+
+ /* Decrement output pointers. */
+ *ssp = *ssp - i;
+ *ddp = *ddp - ((i << 1) + i);
+ return i;
+}
+
+#endif /* PNG_ARM_NEON_IMPLEMENTATION */
diff --git a/libpng/autogen.sh b/libpng/autogen.sh
index 91607171..a46daf65 100755
--- a/libpng/autogen.sh
+++ b/libpng/autogen.sh
@@ -194,7 +194,7 @@ case "$mode" in
if test -d .git
then
exec >&2
- echo "ERROR: running autoreconf on an initialized sytem"
+ echo "ERROR: running autoreconf on an initialized system"
echo " This is not necessary; it is only necessary to remake the"
echo " autotools generated files if Makefile.am or configure.ac"
echo " change and make does the right thing with:"
diff --git a/libpng/compile b/libpng/compile
index a85b723c..99e50524 100755
--- a/libpng/compile
+++ b/libpng/compile
@@ -1,9 +1,9 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
-scriptversion=2012-10-14.11; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -255,7 +255,8 @@ EOF
echo "compile $scriptversion"
exit $?
;;
- cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
@@ -339,9 +340,9 @@ exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/libpng/config.guess b/libpng/config.guess
deleted file mode 100755
index 6c32c864..00000000
--- a/libpng/config.guess
+++ /dev/null
@@ -1,1421 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-11-04'
-
-# 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 3 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, 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. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-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 1992-2014 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
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
-
- eval $set_cc_for_build
- cat <<-EOF > $dummy.c
- #include <features.h>
- #if defined(__UCLIBC__)
- LIBC=uclibc
- #elif defined(__dietlibc__)
- LIBC=dietlibc
- #else
- LIBC=gnu
- #endif
- EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
- ;;
-esac
-
-# 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 tuples: *-*-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 -q __ELF__
- 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 ;;
- *:Bitrig:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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'`
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
- 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 ;;
- s390x:SunOS:*:*)
- echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux${UNAME_RELEASE}
- 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:*:[4567])
- 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/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
- 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 -q __LP64__
- 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:*:*)
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- case ${UNAME_PROCESSOR} in
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW64*:*)
- echo ${UNAME_MACHINE}-pc-mingw64
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- *:MSYS*:*)
- echo ${UNAME_MACHINE}-pc-msys
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- authenticamd | genuineintel | EM64T)
- 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 ;;
- 8664:Windows_NT:*)
- echo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC}
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- aarch64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- aarch64_be:Linux:*:*)
- UNAME_MACHINE=aarch64_be
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 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 -q ld.so.1
- if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 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-${LIBC}
- else
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
- else
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
- fi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- cris:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-${LIBC}
- exit ;;
- crisv32:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-${LIBC}
- exit ;;
- frv:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- hexagon:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- i*86:Linux:*:*)
- echo ${UNAME_MACHINE}-pc-linux-${LIBC}
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
- ;;
- openrisc*:Linux:*:*)
- echo or1k-unknown-linux-${LIBC}
- exit ;;
- or32:Linux:*:* | or1k*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-${LIBC}
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-${LIBC}
- 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-${LIBC} ;;
- PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
- *) echo hppa-unknown-linux-${LIBC} ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-${LIBC}
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-${LIBC}
- exit ;;
- ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-${LIBC}
- exit ;;
- ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-${LIBC}
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-${LIBC}
- exit ;;
- x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 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.[02]*:*)
- 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 i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configury will decide that
- # this is a cross-build.
- echo i586-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.[02]*:*)
- 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 ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-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
- eval $set_cc_for_build
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
- fi
- if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- fi
- elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
- fi
- 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 ;;
- NEO-?:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk${UNAME_RELEASE}
- 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 ;;
- x86_64:VMkernel:*:*)
- echo ${UNAME_MACHINE}-unknown-esx
- exit ;;
-esac
-
-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/libpng/config.h.in b/libpng/config.h.in
index a0ec9bc1..2931048b 100644
--- a/libpng/config.h.in
+++ b/libpng/config.h.in
@@ -18,9 +18,6 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
/* Define to 1 if you have the `pow' function. */
#undef HAVE_POW
diff --git a/libpng/config.sub b/libpng/config.sub
deleted file mode 100755
index 7ffe3737..00000000
--- a/libpng/config.sub
+++ /dev/null
@@ -1,1807 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-12-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 3 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, 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. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# 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.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# 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 1992-2014 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-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | 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/'`
- ;;
- android-linux)
- os=-linux-android
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
- ;;
- *)
- 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 | -microblaze*)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -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*178)
- os=-lynxos178
- ;;
- -lynx*5)
- os=-lynxos5
- ;;
- -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 \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | be32 | be64 \
- | bfin \
- | c4x | c8051 | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | 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 \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pyramid \
- | riscv32 | riscv64 \
- | rl78 | rx \
- | 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 \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | visium \
- | we32k \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- leon|leon[3-9])
- basic_machine=sparc-$basic_machine
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
- ;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- xscaleeb)
- basic_machine=armeb-unknown
- ;;
-
- xscaleel)
- basic_machine=armel-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-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | 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-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | k1om-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | 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-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pyramid-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | 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-* | sv1-* | sx?-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | visium-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | 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
- ;;
- bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- 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 | 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*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
- ;;
- leon-*|leon[3-9]-*)
- basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
- ;;
- 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
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
- mingw32)
- basic_machine=i686-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
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- os=-moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- msys)
- basic_machine=i686-pc
- os=-msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=-nacl
- ;;
- 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
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- 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 | ppcbe) basic_machine=powerpc-unknown
- ;;
- ppc-* | ppcbe-*)
- 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 | rdos64)
- basic_machine=x86_64-pc
- os=-rdos
- ;;
- rdos32)
- 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
- ;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- 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
- ;;
- tile*)
- basic_machine=$basic_machine-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
- ;;
- xscale-* | xscalee[bl]-*)
- basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
- ;;
- 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.
- -auroraux)
- os=-auroraux
- ;;
- -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* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* | -plan9* \
- | -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* \
- | -bitrig* | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- | -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* | -es* | -tirtos*)
- # 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
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
- -nacl*)
- ;;
- -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
- ;;
- c8051-*)
- os=-elf
- ;;
- hexagon-*)
- os=-elf
- ;;
- tic54x-*)
- os=-coff
- ;;
- tic55x-*)
- os=-coff
- ;;
- tic6x-*)
- 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
- ;;
- 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
- ;;
- -cnk*|-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/libpng/configure b/libpng/configure
deleted file mode 100755
index 603fd9e0..00000000
--- a/libpng/configure
+++ /dev/null
@@ -1,16128 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libpng 1.6.34.
-#
-# Report bugs to <png-mng-implement@lists.sourceforge.net>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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
-
-
-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
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (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
-
-
-# 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.
-as_myself=
-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
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="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_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1
-
- test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
- ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- PATH=/empty FPATH=/empty; export PATH FPATH
- test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
- || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: png-mng-implement@lists.sourceforge.net about your
-$0: system, including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- 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_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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'`
-
-# 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_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # 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; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-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 -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-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='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/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=
-
-# Identity of this package.
-PACKAGE_NAME='libpng'
-PACKAGE_TARNAME='libpng'
-PACKAGE_VERSION='1.6.34'
-PACKAGE_STRING='libpng 1.6.34'
-PACKAGE_BUGREPORT='png-mng-implement@lists.sourceforge.net'
-PACKAGE_URL=''
-
-ac_unique_file="pngget.c"
-# 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='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-PNG_POWERPC_VSX_FALSE
-PNG_POWERPC_VSX_TRUE
-PNG_INTEL_SSE_FALSE
-PNG_INTEL_SSE_TRUE
-PNG_MIPS_MSA_FALSE
-PNG_MIPS_MSA_TRUE
-PNG_ARM_NEON_FALSE
-PNG_ARM_NEON_TRUE
-DO_INSTALL_LIBPNG_CONFIG_FALSE
-DO_INSTALL_LIBPNG_CONFIG_TRUE
-DO_INSTALL_LIBPNG_PC_FALSE
-DO_INSTALL_LIBPNG_PC_TRUE
-DO_INSTALL_LINKS_FALSE
-DO_INSTALL_LINKS_TRUE
-DO_PNG_PREFIX_FALSE
-DO_PNG_PREFIX_TRUE
-PNG_PREFIX
-binconfigs
-pkgconfigdir
-PNGLIB_RELEASE
-PNGLIB_MINOR
-PNGLIB_MAJOR
-PNGLIB_VERSION
-SYMBOL_PREFIX
-HAVE_LD_VERSION_SCRIPT_FALSE
-HAVE_LD_VERSION_SCRIPT_TRUE
-HAVE_SOLARIS_LD_FALSE
-HAVE_SOLARIS_LD_TRUE
-HAVE_CLOCK_GETTIME_FALSE
-HAVE_CLOCK_GETTIME_TRUE
-LIBOBJS
-POW_LIB
-PNG_COPTS
-DFNCPP
-LT_SYS_LIBRARY_PATH
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-MANIFEST_TOOL
-RANLIB
-ac_ct_AR
-AR
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LIBTOOL
-OBJDUMP
-DLLTOOL
-AS
-LN_S
-CPP
-LD
-FGREP
-EGREP
-GREP
-SED
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-am__fastdepCCAS_FALSE
-am__fastdepCCAS_TRUE
-CCASDEPMODE
-CCASFLAGS
-CCAS
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-am__nodep
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-MAINT
-MAINTAINER_MODE_FALSE
-MAINTAINER_MODE_TRUE
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-AM_DEFAULT_V
-AM_V
-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
-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_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_silent_rules
-enable_maintainer_mode
-enable_dependency_tracking
-with_gnu_ld
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_aix_soname
-with_sysroot
-enable_libtool_lock
-enable_werror
-with_zlib_prefix
-with_pkgconfigdir
-with_binconfigs
-with_libpng_prefix
-enable_unversioned_links
-enable_unversioned_libpng_pc
-enable_unversioned_libpng_config
-enable_hardware_optimizations
-enable_arm_neon
-enable_mips_msa
-enable_intel_sse
-enable_powerpc_vsx
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CCAS
-CCASFLAGS
-CPP
-LT_SYS_LIBRARY_PATH
-PNG_COPTS'
-
-
-# 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= ;;
- *) 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_fn_error $? "invalid feature name: $ac_useropt"
- 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_fn_error $? "invalid feature name: $ac_useropt"
- 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_fn_error $? "invalid package name: $ac_useropt"
- 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_fn_error $? "invalid package name: $ac_useropt"
- 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_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- 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_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $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_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- 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 libpng 1.6.34 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/libpng]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_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
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of libpng 1.6.34:";;
- 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-silent-rules less verbose build output (undo: "make V=1")
- --disable-silent-rules verbose build output (undo: "make V=0")
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
- --enable-dependency-tracking
- do not reject slow dependency extractors
- --disable-dependency-tracking
- speeds up one-time build
- --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)
- --enable-werror[=OPT] Pass -Werror or the given argument to the compiler
- if it is supported
- --enable-unversioned-links
- Installed libpng header files are placed in a
- versioned subdirectory and installed libpng library
- (including DLL) files are versioned. If this option
- is enabled unversioned links will be created
- pointing to the corresponding installed files. If
- you use libpng.pc or libpng-config for all builds
- you do not need these links, but if you compile
- programs directly they will typically #include
- <png.h> and link with -lpng; in that case you need
- the links. The links can be installed manually using
- 'make install-header-links' and 'make
- install-library-links' and can be removed using the
- corresponding uninstall- targets. If you do enable
- this option every libpng 'make install' will
- recreate the links to point to the just installed
- version of libpng. The default is to create the
- links; use --disable-unversioned-links to change
- this
- --enable-unversioned-libpng-pc
- Install the configuration file 'libpng.pc' as a link
- to the versioned version. This is done by default -
- use --disable-unversioned-libpng-pc to change this.
- --enable-unversioned-libpng-config
- Install the configuration file 'libpng-config' as a
- link to the versioned version. This is done by
- default - use --disable-unversioned-libpng-config to
- change this.
- --enable-hardware-optimizations
- Enable hardware optimizations: =no/off, yes/on:
- --enable-arm-neon Enable ARM NEON optimizations: =no/off, check, api,
- yes/on: no/off: disable the optimizations; check:
- use internal checking code (deprecated and poorly
- supported); api: disable by default, enable by a
- call to png_set_option; yes/on: turn on
- unconditionally. If not specified: determined by the
- compiler.
- --enable-mips-msa Enable MIPS MSA optimizations: =no/off, check, api,
- yes/on: no/off: disable the optimizations; check:
- use internal checking code (deprecated and poorly
- supported); api: disable by default, enable by a
- call to png_set_option; yes/on: turn on
- unconditionally. If not specified: determined by the
- compiler.
- --enable-intel-sse Enable Intel SSE optimizations: =no/off, yes/on:
- no/off: disable the optimizations; yes/on: enable
- the optimizations. If not specified: determined by
- the compiler.
- --enable-powerpc-vsx Enable POWERPC VSX optimizations: =no/off, check,
- api, yes/on: no/off: disable the optimizations;
- check: use internal checking code api: disable by
- default, enable by a call to png_set_option yes/on:
- turn on unconditionally. If not specified:
- determined by the compiler.
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
- both]
- --with-aix-soname=aix|svr4|both
- shared library versioning (aka "SONAME") variant to
- provide on AIX, [default=aix].
- --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
- compiler's sysroot if not specified).
- --with-zlib-prefix prefix that may have been used in installed zlib
- --with-pkgconfigdir Use the specified pkgconfig dir (default is
- libdir/pkgconfig)
- --with-binconfigs Generate shell libpng-config scripts as well as
- pkg-config data [default=yes]
- --with-libpng-prefix prefix libpng exported function (API) names with the
- given value
-
-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 (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CCAS assembler compiler command (defaults to CC)
- CCASFLAGS assembler compiler flags (defaults to CFLAGS)
- CPP C preprocessor
- LT_SYS_LIBRARY_PATH
- User-defined run-time library search path.
- PNG_COPTS additional flags for the C compiler, use this for options that
- would cause configure itself to fail
-
-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 <png-mng-implement@lists.sourceforge.net>.
-_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
-libpng configure 1.6.34
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-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
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); 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 $2
-
-/* 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 $2 ();
-/* 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_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-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
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-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 libpng $as_me 1.6.34, which was
-generated by GNU Autoconf 2.69. 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) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- 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:${as_lineno-$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= ;; #(
- *) { eval $ac_var=; 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
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- 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
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- 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
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- 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'; as_fn_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
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_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
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-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 /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$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" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$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_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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
-
-
-
-
-# libpng does not follow GNU file name conventions (hence 'foreign')
-# color-tests requires automake 1.11 or later
-# silent-rules requires automake 1.11 or later
-# dist-xz requires automake 1.11 or later
-# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1
-# 1.13 is required for parallel tests
-am__api_version='1.15'
-
-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_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-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.
-
-
-# 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:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; 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 as_fn_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
- 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:${as_lineno-$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:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name. Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
- *[\\\"\#\$\&\'\`$am_lf]*)
- as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
- *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
- as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
-esac
-
-# 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 (
- am_has_slept=no
- for am_try in 1 2; do
- echo "timestamp, slept: $am_has_slept" > conftest.file
- 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
- 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_fn_error $? "ls -t appears to fail. Make sure there is not a broken
- alias in your environment" "$LINENO" 5
- fi
- if test "$2" = conftest.file || test $am_try -eq 2; then
- break
- fi
- # Just in case.
- sleep 1
- am_has_slept=yes
- done
- test "$2" = conftest.file
- )
-then
- # Ok.
- :
-else
- as_fn_error $? "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
- ( sleep 1 ) &
- am_sleep_pid=$!
-fi
-
-rm -f conftest.file
-
-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`
-
-if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --is-lightweight"; then
- am_missing_run="$MISSING "
-else
- am_missing_run=
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
- *)
- install_sh="\${SHELL} $am_aux_dir/install-sh"
- esac
-fi
-
-# 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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"
-
-{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_path_mkdir+:} false; 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
- as_fn_executable_p "$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
-
- test -d ./--version && rmdir ./--version
- 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.
- MKDIR_P="$ac_install_sh -d"
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-{ $as_echo "$as_me:${as_lineno-$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; 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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$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
-
-# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
- enableval=$enable_silent_rules;
-fi
-
-case $enable_silent_rules in # (((
- yes) AM_DEFAULT_VERBOSITY=0;;
- no) AM_DEFAULT_VERBOSITY=1;;
- *) AM_DEFAULT_VERBOSITY=1;;
-esac
-am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if $as_echo 'TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
- @$(TRUE)
-.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
- am_cv_make_support_nested_variables=yes
-else
- am_cv_make_support_nested_variables=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
-if test $am_cv_make_support_nested_variables = yes; then
- AM_V='$(V)'
- AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
- AM_V=$AM_DEFAULT_VERBOSITY
- AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AM_BACKSLASH='\'
-
-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_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
- 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='libpng'
- VERSION='1.6.34'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# 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"}
-
-# For better backward compatibility. To be removed once Automake 1.9.x
-# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
-mkdir_p='$(MKDIR_P)'
-
-# We need awk for the "check" target (and possibly the TAP driver). The
-# system "awk" is bad on some platforms.
-# Always define AMTAR for backward compatibility. Yes, it's still used
-# in the wild :-( We should find a proper way to deprecate it ...
-AMTAR='$${TAR-tar}'
-
-
-# We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar pax cpio none'
-
-am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
-
-
-
-
-
-
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes. So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
- cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present. This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message. This
-can help us improve future automake versions.
-
-END
- if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
- echo 'Configuration will proceed anyway, since you have set the' >&2
- echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
- echo >&2
- else
- cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
- as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
- fi
-fi
-
-# The following line causes --disable-maintainer-mode to be the default to
-# configure. This is necessary because libpng distributions cannot rely on the
-# time stamps of the autotools generated files being correct
-
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
-
-
-
-
-PNGLIB_VERSION=1.6.34
-PNGLIB_MAJOR=1
-PNGLIB_MINOR=6
-PNGLIB_RELEASE=34
-
-
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-# 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
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$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 ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- 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:${as_lineno-$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:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-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:${as_lineno-$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:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-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:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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=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:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
- # Make sure it works both with $CC and with simple cc.
- # Following AC_PROG_CC_C_O, we do the test twice because some
- # compilers refuse to overwrite an existing .o file with -o,
- # though they will create one.
- am_cv_prog_cc_c_o=yes
- for am_i in 1 2; do
- if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
- ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } \
- && test -f conftest2.$ac_objext; then
- : OK
- else
- am_cv_prog_cc_c_o=no
- break
- fi
- done
- rm -f core conftest*
- unset am_i
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
-if test "$am_cv_prog_cc_c_o" != yes; then
- # Losing compiler, so override with the script.
- # FIXME: It is wrong to rewrite CC.
- # But if we don't then we get into trouble of one sort or another.
- # A longer-term fix would be to have automake use am__CC in this case,
- # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
- CC="$am_aux_dir/compile $CC"
-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
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$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
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$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='\'
- am__nodep='_no'
-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:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; 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".
- rm -rf conftest.dir
- 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
- am__universal=false
- case " $depcc " in #(
- *\ -arch\ *\ -arch\ *) am__universal=true ;;
- esac
-
- 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 10 /bin/sh.
- echo '/* dummy */' > sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- # 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. Also, some Intel
- # versions had trouble with output in subdirs.
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- 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
- ;;
- msvc7 | msvc7msys | msvisualcpp | msvcmsys)
- # This compiler won't grok '-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj 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 $am__obj 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:${as_lineno-$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
-
-
-# By default we simply use the C compiler to build assembly code.
-
-test "${CCAS+set}" = set || CCAS=$CC
-test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
-
-
-
-depcc="$CCAS" am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CCAS_dependencies_compiler_type+:} false; 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".
- rm -rf conftest.dir
- 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_CCAS_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- am__universal=false
-
-
- 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 10 /bin/sh.
- echo '/* dummy */' > sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- # 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. Also, some Intel
- # versions had trouble with output in subdirs.
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- 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
- ;;
- msvc7 | msvc7msys | msvisualcpp | msvcmsys)
- # This compiler won't grok '-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj 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 $am__obj 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_CCAS_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CCAS_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
-CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
-
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
- am__fastdepCCAS_TRUE=
- am__fastdepCCAS_FALSE='#'
-else
- am__fastdepCCAS_TRUE='#'
- am__fastdepCCAS_FALSE=
-fi
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; 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_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-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:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; 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_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-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:${as_lineno-$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 ${ac_cv_path_SED+:} false; 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
- { ac_script=; unset 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
- fi
-else
- ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 ${ac_cv_path_GREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; 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"
- as_fn_executable_p "$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
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- 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_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_FGREP=$FGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='printf %s\n'
-else
- # Use this function as a fallback that always works.
- func_fallback_echo ()
- {
- eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
- }
- ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
- $ECHO ""
-}
-
-case $ECHO in
- printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
- print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
- *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
- withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test yes = "$GCC"; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:${as_lineno-$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 yes = "$with_gnu_ld"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${lt_cv_path_LD+:} false; 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 no != "$with_gnu_ld" && break
- ;;
- *)
- test yes != "$with_gnu_ld" && 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:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; 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:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-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:${as_lineno-$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 ${ac_cv_prog_CPP+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-{ $as_echo "$as_me:${as_lineno-$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; 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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:${as_lineno-$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.4.6'
-macro_revision='2.4.6'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain=$ac_aux_dir/ltmain.sh
-
-# Backslashify 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'
-
-{ $as_echo "$as_me:${as_lineno-$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 ${lt_cv_path_NM+:} false; 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
- # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
- case $build_os in
- mingw*) lt_bad_file=conftest.nm/nofile ;;
- *) lt_bad_file=/dev/null ;;
- esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
- *$lt_bad_file* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break 2
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break 2
- ;;
- *)
- 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:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test no != "$lt_cv_path_NM"; then
- NM=$lt_cv_path_NM
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- if test -n "$DUMPBIN"; then :
- # Let the user override the test.
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in dumpbin "link -dump"
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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 "link -dump"
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- DUMPBIN=$ac_ct_DUMPBIN
- fi
-fi
-
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
- *COFF*)
- DUMPBIN="$DUMPBIN -symbols -headers"
- ;;
- *)
- DUMPBIN=:
- ;;
- esac
- fi
-
- if test : != "$DUMPBIN"; then
- NM=$DUMPBIN
- fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; 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:$LINENO: $ac_compile\"" >&5)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: 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:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; 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* | cegcc*)
- # 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;
- ;;
-
- mint*)
- # On MiNT this can take a long time and run out of memory.
- 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;
- ;;
-
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
- # 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
- ;;
-
- os2*)
- # The test takes a long time on OS/2.
- lt_cv_sys_max_cmd_len=8192
- ;;
-
- 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" && \
- test undefined != "$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`env echo "$teststring$teststring" 2>/dev/null` \
- = "X$teststring$teststring"; } >/dev/null 2>&1 &&
- test 17 != "$i" # 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:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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"}
-
-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:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
- ;;
- esac
- ;;
- *-*-cygwin* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
- ;;
- esac
- ;;
- * ) # unhandled hosts (and "normal" native builds)
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
-esac
-
-fi
-
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- #assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
- ;;
- esac
- ;;
-esac
-
-fi
-
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$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
- cygwin* | mingw* | pw32* | cegcc*)
- if test yes != "$GCC"; then
- reload_cmds=false
- fi
- ;;
- darwin*)
- if test yes = "$GCC"; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; 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
-# that 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
- # Keep this pattern in sync with the one in func_win32_libid.
- lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-cegcc*)
- # use the weaker test based on 'objdump'. See mingw*.
- lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-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
- ;;
-
-haiku*)
- 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])(-bit)?( [LM]SB)? 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 glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | 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* | bitrig*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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
- ;;
-os2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
- case $host_os in
- mingw* | pw32*)
- if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
- want_nocaseglob=yes
- else
- file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
- fi
- ;;
- esac
-fi
-
-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}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
- # two different shell functions defined in ltmain.sh;
- # decide which one to use based on capabilities of $DLLTOOL
- case `$DLLTOOL --help 2>&1` in
- *--identify-strict*)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
- ;;
- *)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
- ;;
- esac
- ;;
-*)
- # fallback: assume linklib IS sharedlib
- lt_cv_sharedlib_from_linklib_cmd=$ECHO
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- for ac_prog in ar
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AR" && break
- done
-fi
-if test -z "$AR"; then
- ac_ct_AR=$AR
- for ac_prog in ar
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_AR" && break
-done
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- AR=$ac_ct_AR
- fi
-fi
-
-: ${AR=ar}
-: ${AR_FLAGS=cru}
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ar_at_file=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- echo conftest.$ac_objext > conftest.lst
- lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -eq "$ac_status"; then
- # Ensure the archiver fails upon bogus file names.
- rm -f conftest.$ac_objext libconftest.a
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -ne "$ac_status"; then
- lt_cv_ar_at_file=@
- fi
- fi
- rm -f conftest.* libconftest.a
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
-
-if test no = "$lt_cv_ar_at_file"; then
- archiver_list_spec=
-else
- archiver_list_spec=$lt_cv_ar_at_file
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
-
-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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
-
-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
- bitrig* | openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
- darwin*)
- lock_old_archive_extraction=yes ;;
- *)
- lock_old_archive_extraction=no ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 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:${as_lineno-$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 ${lt_cv_sys_global_symbol_pipe+:} false; 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* | cegcc*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*)
- if test ia64 = "$host_cpu"; 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
-
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
- # Adjust the below global symbol transforms to fixup imported variables.
- lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
- lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
- lt_c_name_lib_hook="\
- -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
- -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
-else
- # Disable hooks by default.
- lt_cv_sys_global_symbol_to_import=
- lt_cdecl_hook=
- lt_c_name_hook=
- lt_c_name_lib_hook=
-fi
-
-# 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"\
-$lt_cdecl_hook\
-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
-" -e 's/^$symcode$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"\
-$lt_c_name_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
-
-# Transform an extracted symbol line into symbol name with lib prefix and
-# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
-$lt_c_name_lib_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/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,
- # D for any global variable and I for any imported 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};"\
-" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
-" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
-" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
-" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
-" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print f,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
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # 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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { { eval echo "\"\$as_me\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
-/* DATA imports from DLLs on WIN32 can't be const, because runtime
- relocations are performed -- see ld's documentation on pseudo-relocs. */
-# define LT_DLSYM_CONST
-#elif defined __osf__
-/* This system does not cope well with relocations in const data. */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#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. */
-LT_DLSYM_CONST struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$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_globsym_save_LIBS=$LIBS
- lt_globsym_save_CFLAGS=$CFLAGS
- LIBS=conftstm.$ac_objext
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest$ac_exeext; then
- pipe_works=yes
- fi
- LIBS=$lt_globsym_save_LIBS
- CFLAGS=$lt_globsym_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 yes = "$pipe_works"; 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:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
- nm_file_list_spec='@'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
-
-# Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
- withval=$with_sysroot;
-else
- with_sysroot=no
-fi
-
-
-lt_sysroot=
-case $with_sysroot in #(
- yes)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
- fi
- ;; #(
- /*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
- ;; #(
- no|'')
- ;; #(
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
- as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
- ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-: ${lt_DD:=$DD}
-if test -z "$lt_DD"; then
- ac_path_lt_DD_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 dd; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_lt_DD" || continue
-if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
-fi
- $ac_path_lt_DD_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_lt_DD"; then
- :
- fi
-else
- ac_cv_path_lt_DD=$lt_DD
-fi
-
-rm -f conftest.i conftest2.i conftest.out
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-lt_cv_truncate_bin=
-if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
-fi
-rm -f conftest.i conftest2.i conftest.out
-test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
-
-
-
-
-
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
- enableval=$enable_libtool_lock;
-fi
-
-test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test yes = "$lt_cv_prog_gnu_ld"; 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*
- ;;
-
-mips64*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- emul="${emul}32"
- ;;
- *64-bit*)
- emul="${emul}64"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *MSB*)
- emul="${emul}btsmip"
- ;;
- *LSB*)
- emul="${emul}ltsmip"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *N32*)
- emul="${emul}n32"
- ;;
- esac
- LD="${LD-ld} -m $emul"
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly. Note that the listed cases only cover the
- # situations where additional linker options are needed (such as when
- # doing 32-bit compilation for a host where ld defaults to 64-bit, or
- # vice versa); the common cases where no linker options are needed do
- # not appear in the list.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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*)
- case `/usr/bin/file conftest.o` in
- *x86-64*)
- LD="${LD-ld} -m elf32_x86_64"
- ;;
- *)
- LD="${LD-ld} -m elf_i386"
- ;;
- esac
- ;;
- powerpc64le-*linux*)
- LD="${LD-ld} -m elf32lppclinux"
- ;;
- 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"
- ;;
- powerpcle-*linux*)
- LD="${LD-ld} -m elf64lppc"
- ;;
- 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:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_cc_needs_belf=yes
-else
- lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- 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:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test yes != "$lt_cv_cc_needs_belf"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS=$SAVE_CFLAGS
- fi
- ;;
-*-*solaris*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*)
- case $host in
- i?86-*-solaris*|x86_64-*-solaris*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- sparc*-*-solaris*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
- if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
- LD=${LD-ld}_sol2
- fi
- ;;
- *)
- 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
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MANIFEST_TOOL"; then
- ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-if test -n "$MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
- ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
- # Extract the first word of "mt", so it can be a program name with args.
-set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_MANIFEST_TOOL"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-if test -n "$ac_ct_MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_MANIFEST_TOOL" = x; then
- MANIFEST_TOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$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
- MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
- fi
-else
- MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-fi
-
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_path_mainfest_tool=no
- echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
- $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
- cat conftest.err >&5
- if $GREP 'Manifest Tool' conftest.out > /dev/null; then
- lt_cv_path_mainfest_tool=yes
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test yes != "$lt_cv_path_mainfest_tool"; then
- MANIFEST_TOOL=:
-fi
-
-
-
-
-
-
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LIPO="lipo"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL="otool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL64="otool64"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- OTOOL64=$ac_ct_OTOOL64
- fi
-else
- OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; 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 there is a non-empty error log, and "single_module"
- # appears in it, assume the flag caused a linker warning
- if test -s conftest.err && $GREP single_module conftest.err; then
- cat conftest.err >&5
- # Otherwise, if the output was created with a 0 exit code from
- # the compiler, it worked.
- elif test -f libconftest.dylib && test 0 = "$_lt_result"; 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:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_ld_exported_symbols_list=yes
-else
- lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_force_load=no
- cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
- echo "$RANLIB libconftest.a" >&5
- $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
- _lt_result=$?
- if test -s conftest.err && $GREP force_load conftest.err; then
- cat conftest.err >&5
- elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
- lt_cv_ld_force_load=yes
- else
- cat conftest.err >&5
- fi
- rm -f conftest.err libconftest.a conftest conftest.c
- rm -rf conftest.dSYM
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&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 yes = "$lt_cv_apple_cc_single_mod"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test yes = "$lt_cv_ld_exported_symbols_list"; 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" && test no = "$lt_cv_ld_force_load"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-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`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in dlfcn.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-# Set options
-enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AS="${ac_tool_prefix}as"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AS="as"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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
- 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; lt_p=${PACKAGE-default}
- case $withval in
- yes|no) pic_mode=$withval ;;
- *)
- pic_mode=default
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for lt_pkg in $withval; do
- IFS=$lt_save_ifs
- if test "X$lt_pkg" = "X$lt_p"; then
- pic_mode=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- pic_mode=default
-fi
-
-
-
-
-
-
-
-
- # 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
-
-
-
-
-
-
-
-
- shared_archive_member_spec=
-case $host,$enable_shared in
-power*-*-aix[5-9]*,yes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
-$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
-
-# Check whether --with-aix-soname was given.
-if test "${with_aix_soname+set}" = set; then :
- withval=$with_aix_soname; case $withval in
- aix|svr4|both)
- ;;
- *)
- as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
- ;;
- esac
- lt_cv_with_aix_soname=$with_aix_soname
-else
- if ${lt_cv_with_aix_soname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_with_aix_soname=aix
-fi
-
- with_aix_soname=$lt_cv_with_aix_soname
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
-$as_echo "$with_aix_soname" >&6; }
- if test aix != "$with_aix_soname"; then
- # For the AIX way of multilib, we name the shared archive member
- # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
- # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
- # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
- # the AIX toolchain works better with OBJECT_MODE set (default 32).
- if test 64 = "${OBJECT_MODE-32}"; then
- shared_archive_member_spec=shr_64
- else
- shared_archive_member_spec=shr
- fi
- fi
- ;;
-*)
- with_aix_soname=aix
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-# 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:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; 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:${as_lineno-$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 set != "${COLLECT_NAMES+set}"; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# 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
-
-func_cc_basename $compiler
-cc_basename=$func_cc_basename_result
-
-
-# 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:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; 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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; 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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$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*
-
-
-## 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...
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test yes = "$GCC"; then
- case $cc_basename in
- nvcc*)
- lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
- *)
- lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
- esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; 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" ## exclude from sc_useless_quotes_in_assignment
- # 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; 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=
-
-
- if test yes = "$GCC"; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- lt_prog_compiler_pic='-fPIC'
- ;;
-
- 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* | cegcc*)
- # 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'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- haiku*)
- # PIC is the default for Haiku.
- # The "-static" flag exists, but is broken.
- lt_prog_compiler_static=
- ;;
-
- hpux*)
- # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
- # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
- # sets the default TLS model and affects inlining.
- case $host_cpu in
- hppa*64*)
- # +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
-
- case $cc_basename in
- nvcc*) # Cuda Compiler Driver 2.2
- lt_prog_compiler_wl='-Xlinker '
- if test -n "$lt_prog_compiler_pic"; then
- lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
- fi
- ;;
- 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 ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- case $cc_basename in
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # 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'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- 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 | kopensolaris*-gnu | gnu*)
- case $cc_basename in
- # old Intel for x86_64, which still supported -KPIC.
- ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- # icc used to be incompatible with GCC.
- # ICC 10 doesn't accept -KPIC any more.
- icc* | ifort*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- # Lahey Fortran 8.1.
- lf95*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # 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* | bgxl* | bgf* | mpixl*)
- # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-qpic'
- lt_prog_compiler_static='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
- # 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=''
- ;;
- *Sun\ F* | *Sun*Fortran*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Qoption ld '
- ;;
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Intel*\ [CF]*Compiler*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- *Portland\ Group*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- 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* | sunf77* | sunf90* | sunf95*)
- 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 that 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:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_pic_works+:} false; 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" ## exclude from sc_useless_quotes_in_assignment
- # 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_pic_works"; 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:${as_lineno-$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 ${lt_cv_prog_compiler_static_works+:} false; 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 "$_lt_linker_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_static_works"; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links=nottested
-if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test no = "$hard_links"; then
- { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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_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* | cegcc*)
- # 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 yes != "$GCC"; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd* | bitrig*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
-
- # On some targets, GNU ld is compatible enough with the native linker
- # that we're better off using the native interface for both.
- lt_use_gnu_ld_interface=no
- if test yes = "$with_gnu_ld"; then
- case $host_os in
- aix*)
- # The AIX port of GNU ld has always aspired to compatibility
- # with the native linker. However, as the warning in the GNU ld
- # block says, versions before 2.19.5* couldn't really create working
- # shared libraries, regardless of the interface used.
- case `$LD -v 2>&1` in
- *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
- *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
- *\ \(GNU\ Binutils\)\ [3-9]*) ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- fi
-
- if test yes = "$lt_use_gnu_ld_interface"; 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 | $SED -e 's/(^)\+)\s\+//' 2>&1` in
- *GNU\ gold*) supports_anon_versioning=yes ;;
- *\ [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 ia64 != "$host_cpu"; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, 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 install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_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* | cegcc*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- export_dynamic_flag_spec='$wl--export-all-symbols'
- 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/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
- exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- 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, use it as
- # is; otherwise, prepend EXPORTS...
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; 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
- ;;
-
- haiku*)
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- link_all_deplibs=yes
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- ;;
-
- 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 | kopensolaris*-gnu)
- tmp_diet=no
- if test linux-dietlibc = "$host_os"; 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 no = "$tmp_diet"
- then
- tmp_addflag=' $pic_flag'
- 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; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95* | pgfortran*)
- # 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; func_echo_all \"$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' ;;
- lf95*) # Lahey Fortran 8.1
- whole_archive_flag_spec=
- tmp_sharedflag='--shared' ;;
- nagfor*) # NAGFOR 5.3
- tmp_sharedflag='-Wl,-shared' ;;
- xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- nvcc*) # Cuda Compiler Driver 2.2
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- ;;
- 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; func_echo_all \"$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 yes = "$supports_anon_versioning"; 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
- tcc*)
- export_dynamic_flag_spec='-rdynamic'
- ;;
- xlf* | bgf* | bgxlf* | mpixlf*)
- # 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='$wl-rpath $wl$libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test yes = "$supports_anon_versioning"; 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 $linker_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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 cannot
-*** 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 $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $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 no = "$ld_shlibs"; 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 yes = "$GCC" && 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 ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm.
- # Without the "-l" option, or with the "-B" option, AIX nm treats
- # weak defined symbols like other global defined symbols, whereas
- # GNU nm marks them as "W".
- # While the 'weak' keyword is ignored in the Export File, we need
- # it in the Import File for the 'aix-soname' feature, so we have
- # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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
- # have runtime linking enabled, and use it for executables.
- # For shared libraries, we enable/disable runtime linking
- # depending on the kind of the shared library created -
- # when "with_aix_soname,aix_use_runtimelinking" is:
- # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
- # "aix,yes" lib.so shared, rtl:yes, for executables
- # lib.a static archive
- # "both,no" lib.so.V(shr.o) shared, rtl:yes
- # lib.a(lib.so.V) shared, rtl:no, for executables
- # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a(lib.so.V) shared, rtl:no
- # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a static archive
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
- # With aix-soname=svr4, we create the lib.so.V shared archives only,
- # so we don't have lib.a shared libs to link our executables.
- # We have to force runtime linking in this case.
- aix_use_runtimelinking=yes
- LDFLAGS="$LDFLAGS -Wl,-brtl"
- fi
- ;;
- 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,'
- case $with_aix_soname,$aix_use_runtimelinking in
- aix,*) ;; # traditional, no import file
- svr4,* | *,yes) # use import file
- # The Import File defines what to hardcode.
- hardcode_direct=no
- hardcode_direct_absolute=no
- ;;
- esac
-
- if test yes = "$GCC"; 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 yes = "$aix_use_runtimelinking"; then
- shared_flag="$shared_flag "'$wl-G'
- fi
- # Need to ensure runtime linking is disabled for the traditional
- # shared library, or the linker may eventually find shared libraries
- # /with/ Import File - we do not want to mix them.
- shared_flag_aix='-shared'
- shared_flag_svr4='-shared $wl-G'
- else
- # not using gcc
- if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then
- shared_flag='$wl-G'
- else
- shared_flag='$wl-bM:SRE'
- fi
- shared_flag_aix='$wl-bM:SRE'
- shared_flag_svr4='$wl-G'
- fi
- fi
-
- export_dynamic_flag_spec='$wl-bexpall'
- # 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,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_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 "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
- else
- if test ia64 = "$host_cpu"; 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.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_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 "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-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'
- if test yes = "$with_gnu_ld"; then
- # We only use this code for GNU lds that support --whole-archive.
- whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
- else
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- fi
- archive_cmds_need_lc=yes
- archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
- # -brtl affects multiple linker settings, -berok does not and is overridden later
- compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
- if test svr4 != "$with_aix_soname"; then
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
- fi
- if test aix != "$with_aix_soname"; then
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
- else
- # used by -dlpreopen to get the symbols
- archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
- fi
- archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
- 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* | cegcc*)
- # 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.
- case $cc_basename in
- cl*)
- # Native MSVC
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- file_list_spec='@'
- # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp "$export_symbols" "$output_objdir/$soname.def";
- echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
- else
- $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
- fi~
- $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
- linknames='
- # The linker will not automatically build a static lib if we build a DLL.
- # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
- enable_shared_with_static_runtimes=yes
- exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
- # Don't use ranlib
- old_postinstall_cmds='chmod 644 $oldlib'
- postlink_cmds='lt_outputfile="@OUTPUT@"~
- lt_tool_outputfile="@TOOL_OUTPUT@"~
- case $lt_outputfile in
- *.exe|*.EXE) ;;
- *)
- lt_outputfile=$lt_outputfile.exe
- lt_tool_outputfile=$lt_tool_outputfile.exe
- ;;
- esac~
- if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
- $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
- $RM "$lt_outputfile.manifest";
- fi'
- ;;
- *)
- # Assume MSVC wrapper
- 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 `func_echo_all "$deplibs" | $SED '\''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'
- enable_shared_with_static_runtimes=yes
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
-
-
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- if test yes = "$lt_cv_ld_force_load"; then
- whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-
- else
- whole_archive_flag_spec=''
- fi
- link_all_deplibs=yes
- allow_undefined_flag=$_lt_dar_allow_undefined
- case $cc_basename in
- ifort*|nagfor*) _lt_dar_can_shared=yes ;;
- *) _lt_dar_can_shared=$GCC ;;
- esac
- if test yes = "$_lt_dar_can_shared"; then
- output_verbose_link_cmd=func_echo_all
- 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
- ;;
-
- # 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 $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test yes = "$GCC"; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$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 yes,no = "$GCC,$with_gnu_ld"; then
- archive_cmds='$CC -shared $pic_flag $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 no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$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 yes,no = "$GCC,$with_gnu_ld"; 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 $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag $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'
- ;;
- *)
-
- # Older versions of the 11.00 compiler do not understand -b yet
- # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler__b=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -b"
- 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 "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler__b=yes
- fi
- else
- lt_cv_prog_compiler__b=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
-
-if test yes = "$lt_cv_prog_compiler__b"; then
- archive_cmds='$CC -b $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
-
- ;;
- esac
- fi
- if test no = "$with_gnu_ld"; 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 yes = "$GCC"; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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.
- # This should be the same for all languages, so no per-tag cache variable.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo (void) { return 0; }
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_irix_exported_symbol=yes
-else
- lt_cv_irix_exported_symbol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
- if test yes = "$lt_cv_irix_exported_symbol"; then
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
- fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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
- ;;
-
- linux*)
- case $cc_basename in
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- ld_shlibs=yes
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
-
- 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* | bitrig*)
- 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__`"; 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
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- ;;
-
- osf3*)
- if test yes = "$GCC"; 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" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -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 yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-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; 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 "-set_version $verstring"` -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 yes = "$GCC"; then
- wlarc='$wl'
- archive_cmds='$CC -shared $pic_flag $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 $pic_flag $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 yes = "$GCC"; 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 sequent = "$host_vendor"; 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 yes = "$GCC"; 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 CANNOT 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 yes = "$GCC"; 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 sni = "$host_vendor"; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- export_dynamic_flag_spec='$wl-Blargedynsym'
- ;;
- esac
- fi
- fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test no = "$ld_shlibs" && 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 yes,yes = "$GCC,$enable_shared"; 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:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } 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\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
- lt_cv_archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
- archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test yes = "$GCC"; then
- case $host_os in
- darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
- *) lt_awk_arg='/^libraries:/' ;;
- esac
- case $host_os in
- mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
- *) lt_sed_strip_eq='s|=/|/|g' ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
- case $lt_search_path_spec in
- *\;*)
- # 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 's/;/ /g'`
- ;;
- *)
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
- ;;
- esac
- # 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`
- # ...but if some path component already ends with the multilib dir we assume
- # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
- case "$lt_multi_os_dir; $lt_search_path_spec " in
- "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
- lt_multi_os_dir=
- ;;
- esac
- 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"
- elif test -n "$lt_multi_os_dir"; then
- 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; }
-}'`
- # AWK program above erroneously prepends '/' to C:/dos/paths
- # for these hosts.
- case $host_os in
- mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
- $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
- esac
- sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-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 # correct to gnu/linux during the next big refactor
- 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 # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test ia64 = "$host_cpu"; 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
- # Using Import Files as archive members, it is possible to support
- # filename-based versioning of shared library archives on AIX. While
- # this would work for both with and without runtime linking, it will
- # prevent static linking of such archives. So we do filename-based
- # shared library versioning with .so extension only, which is used
- # when both runtime linking and shared linking is enabled.
- # Unfortunately, runtime linking may impact performance, so we do
- # not want this to be the default eventually. Also, we use the
- # versioned .so libs for executables only if there is the -brtl
- # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
- # To allow for filename-based versioning support, we need to create
- # libNAME.so.V as an archive file, containing:
- # *) an Import File, referring to the versioned filename of the
- # archive as well as the shared archive member, telling the
- # bitwidth (32 or 64) of that shared object, and providing the
- # list of exported symbols of that shared object, eventually
- # decorated with the 'weak' keyword
- # *) the shared object with the F_LOADONLY flag set, to really avoid
- # it being seen by the linker.
- # At run time we better use the real file rather than another symlink,
- # but for link time we create the symlink libNAME.so -> libNAME.so.V
-
- case $with_aix_soname,$aix_use_runtimelinking in
- # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- aix,yes) # traditional libtool
- dynamic_linker='AIX unversionable lib.so'
- # 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'
- ;;
- aix,no) # traditional AIX only
- dynamic_linker='AIX lib.a(lib.so.V)'
- # 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'
- ;;
- svr4,*) # full svr4 only
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,yes) # both, prefer svr4
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # unpreferred sharedlib libNAME.a needs extra handling
- postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
- postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,no) # both, prefer aix
- dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release.a $libname.a'
- soname_spec='$libname$release$shared_ext$major'
- # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
- postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
- postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
- ;;
- esac
- 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=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $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 # correct to gnu/linux during the next big refactor
- 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* | cegcc*)
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$cc_basename in
- yes,*)
- # gcc
- 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="$sys_lib_search_path_spec /usr/lib/w32api"
- ;;
- mingw* | cegcc*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- 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
- dynamic_linker='Win32 ld.exe'
- ;;
-
- *,cl*)
- # Native MSVC
- libname_spec='$name'
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- library_names_spec='$libname.dll.lib'
-
- case $build_os in
- mingw*)
- sys_lib_search_path_spec=
- lt_save_ifs=$IFS
- IFS=';'
- for lt_path in $LIB
- do
- IFS=$lt_save_ifs
- # Let DOS variable expansion print the short 8.3 style file name.
- lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
- sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
- done
- IFS=$lt_save_ifs
- # Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
- ;;
- cygwin*)
- # Convert to unix form, then to dos form, then back to unix form
- # but this time dos style (no spaces!) so that the unix form looks
- # like /cygdrive/c/PROGRA~1:/cygdr...
- sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
- sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
- sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- ;;
- *)
- sys_lib_search_path_spec=$LIB
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH.
- 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
- # FIXME: find the short name or the path components, as spaces are
- # common. (e.g. "Program Files" -> "PROGRA~1")
- ;;
- esac
-
- # 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'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
- dynamic_linker='Win32 link.exe'
- ;;
-
- *)
- # Assume MSVC wrapper
- library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
- dynamic_linker='Win32 ld.exe'
- ;;
- esac
- # 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 # correct to gnu/linux during the next big refactor
- 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
- ;;
-
-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[23].*) 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$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- 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
- ;;
-
-haiku*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- dynamic_linker="$host_os runtime_loader"
- 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=LIBRARY_PATH
- shlibpath_overrides_runpath=no
- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- 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 32 = "$HPUX_IA64_MODE"; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux32
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux64
- fi
- ;;
- 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'
- # or fails outright, so override atomically:
- install_override_mode=555
- ;;
-
-interix[3-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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 yes = "$lt_cv_prog_gnu_ld"; then
- version_type=linux # correct to gnu/linux during the next big refactor
- 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
- ;;
-
-linux*android*)
- version_type=none # Android doesn't support versioned libraries.
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext'
- soname_spec='$libname$release$shared_ext'
- finish_cmds=
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-
- # 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
-
- dynamic_linker='Android linker'
- # Don't embed -rpath directories since the linker doesn't support them.
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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
- if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_shlibpath_overrides_runpath=no
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- lt_cv_shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
-fi
-
- shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
- # 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
-
- # Ideally, we could use ldconfig to report *all* directores which are
- # searched for libraries, however this is still not possible. Aside from not
- # being certain /sbin/ldconfig is available, command
- # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
- # even though it is searched at run-time. Try to do the best guess by
- # appending ld.so.conf contents (and includes) 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;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 # correct to gnu/linux during the next big refactor
- 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* | bitrig*)
- version_type=sunos
- sys_lib_dlsearch_path_spec=/usr/lib
- need_lib_prefix=no
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- need_version=no
- else
- need_version=yes
- fi
- 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
- shlibpath_overrides_runpath=yes
- ;;
-
-os2*)
- libname_spec='$name'
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
- # OS/2 can only load a DLL with a base name of 8 characters or less.
- soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
- v=$($ECHO $release$versuffix | tr -d .-);
- n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
- $ECHO $n$v`$shared_ext'
- library_names_spec='${libname}_dll.$libext'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=BEGINLIBPATH
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- 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'
- ;;
-
-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 # correct to gnu/linux during the next big refactor
- 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 yes = "$with_gnu_ld"; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- 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 # correct to gnu/linux during the next big refactor
- 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=sco
- 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 yes = "$with_gnu_ld"; 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 # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_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 # correct to gnu/linux during the next big refactor
- 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:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test no = "$dynamic_linker" && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test yes = "$GCC"; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
- sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
-fi
-
-if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
- sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
-fi
-
-# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
-configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
-
-# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
-func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
-
-# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
-configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$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 yes = "$hardcode_automatic"; then
-
- # We can hardcode non-existent directories.
- if test no != "$hardcode_direct" &&
- # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
- test no != "$hardcode_minus_L"; 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:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test relink = "$hardcode_action" ||
- test yes = "$inherit_rpath"; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test yes = "$shlibpath_overrides_runpath" ||
- test no = "$enable_shared"; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-
-
-
-
- if test yes != "$enable_dlopen"; 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* | cegcc*)
- 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:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; 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
-
- ;;
-
- tpf*)
- # Don't try to run any link tests for TPF. We know it's impossible
- # because TPF is a cross-compiler, and we know how we open DSOs.
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=no
- ;;
-
- *)
- ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_shl_load=yes
-else
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
- ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_svld_dlopen=yes
-else
- ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_dld_link=yes
-else
- ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
- lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test no = "$lt_cv_dlopen"; then
- enable_dlopen=no
- else
- enable_dlopen=yes
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS=$CPPFLAGS
- test yes = "$ac_cv_header_dlfcn_h" && 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:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; 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 $LINENO "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
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 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;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test yes = "$lt_cv_dlopen_self"; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:${as_lineno-$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 ${lt_cv_dlopen_self_static+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; 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 $LINENO "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
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 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;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
- # Report what library types will actually be built
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
- test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 != "$host_cpu"; then
- case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
- yes,aix,yes) ;; # shared object as lib.so file only
- yes,svr4,*) ;; # shared object as lib.so archive member only
- yes,*) enable_static=no ;; # shared object in lib.a archive as well
- esac
- fi
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$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 yes = "$enable_shared" || enable_static=yes
- { $as_echo "$as_me:${as_lineno-$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:
-
-
-
-
-# Some awks crash when confronted with pnglibconf.dfa, do a test run now
-# to make sure this doesn't happen
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that AWK works" >&5
-$as_echo_n "checking that AWK works... " >&6; }
-if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\
- ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
- ${srcdir}/pngusr.dfa 1>&2
-then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 1 "failed
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-# This is a remnant of the old cc -E validation, where it may have been
-# necessary to use a different preprocessor for .dfn files
-DFNCPP="$CPP"
-
-
-# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it
-# checks the compiler with a program that generates a warning), add the
-# following option to deal with this
-
-# Check whether --enable-werror was given.
-if test "${enable_werror+set}" = set; then :
- enableval=$enable_werror; test "$enable_werror" = "yes" && enable_werror="-Werror"
- if test "$enable_werror" != "no"; then
- sav_CFLAGS="$CFLAGS"
- CFLAGS="$enable_werror $CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler allows $enable_werror" >&5
-$as_echo_n "checking if the compiler allows $enable_werror... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- int main(int argc, char **argv){
- return argv[argc-1][0];
- }
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- PNG_COPTS="$PNG_COPTS $enable_werror"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS="$sav_CFLAGS"
- fi
-fi
-
-
-# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89
-# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining _POSIX_SOURCE to 1
-# This is incompatible with the new default mode, so we test for that and force the
-# "-std=c89" compiler option:
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to force back C standard to C89" >&5
-$as_echo_n "checking if we need to force back C standard to C89... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #define _POSIX_SOURCE 1
- #include <stdio.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-
- if test "x$GCC" != "xyes"; then
- as_fn_error $? "Forcing back to C89 is required but the flags are only known for GCC" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- CFLAGS="$CFLAGS -std=c89"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-# Checks for header files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* 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 sort of thing. */
- char tx;
- char *t = &tx;
- 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 sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; 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
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
-$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if ${ac_cv_struct_tm+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <time.h>
-
-int
-main ()
-{
-struct tm tm;
- int *p = &tm.tm_sec;
- return !p;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_struct_tm=time.h
-else
- ac_cv_struct_tm=sys/time.h
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
-$as_echo "$ac_cv_struct_tm" >&6; }
-if test $ac_cv_struct_tm = sys/time.h; then
-
-$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if ${ac_cv_c_restrict+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_restrict=no
- # The order here caters to the fact that C++ does not require restrict.
- for ac_kw in __restrict __restrict__ _Restrict restrict; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-typedef int * int_ptr;
- int foo (int_ptr $ac_kw ip) {
- return ip[0];
- }
-int
-main ()
-{
-int s[1];
- int * $ac_kw t = s;
- t[0] = 0;
- return foo(t)
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_restrict=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_restrict" != no && break
- done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
-
- case $ac_cv_c_restrict in
- restrict) ;;
- no) $as_echo "#define restrict /**/" >>confdefs.h
- ;;
- *) cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
- ;;
- esac
-
-
-# Checks for library functions.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
-$as_echo_n "checking for working strtod... " >&6; }
-if ${ac_cv_func_strtod+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_strtod=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-$ac_includes_default
-#ifndef strtod
-double strtod ();
-#endif
-int
-main()
-{
- {
- /* Some versions of Linux strtod mis-parse strings with leading '+'. */
- char *string = " +69";
- char *term;
- double value;
- value = strtod (string, &term);
- if (value != 69 || term != (string + 4))
- return 1;
- }
-
- {
- /* Under Solaris 2.4, strtod returns the wrong value for the
- terminating character under some conditions. */
- char *string = "NaN";
- char *term;
- strtod (string, &term);
- if (term != string && *(term - 1) == 0)
- return 1;
- }
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_strtod=yes
-else
- ac_cv_func_strtod=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
-$as_echo "$ac_cv_func_strtod" >&6; }
-if test $ac_cv_func_strtod = no; then
- case " $LIBOBJS " in
- *" strtod.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
- ;;
-esac
-
-ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
-if test "x$ac_cv_func_pow" = xyes; then :
-
-fi
-
-if test $ac_cv_func_pow = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
-$as_echo_n "checking for pow in -lm... " >&6; }
-if ${ac_cv_lib_m_pow+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 pow ();
-int
-main ()
-{
-return pow ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_pow=yes
-else
- ac_cv_lib_m_pow=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
-$as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = xyes; then :
- POW_LIB=-lm
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
-$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
-fi
-
-fi
-
-fi
-
-for ac_func in memset
-do :
- ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
-if test "x$ac_cv_func_memset" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MEMSET 1
-_ACEOF
-
-else
- as_fn_error $? "memset not found in libc" "$LINENO" 5
-fi
-done
-
-for ac_func in pow
-do :
- ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
-if test "x$ac_cv_func_pow" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_POW 1
-_ACEOF
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
-$as_echo_n "checking for pow in -lm... " >&6; }
-if ${ac_cv_lib_m_pow+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 pow ();
-int
-main ()
-{
-return pow ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_pow=yes
-else
- ac_cv_lib_m_pow=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
-$as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
- LIBS="-lm $LIBS"
-
-else
- as_fn_error $? "cannot find pow" "$LINENO" 5
-fi
-
-fi
-done
-
-
-# Some later POSIX 1003.1 functions are required for test programs, failure here
-# is soft (the corresponding test program is not built).
-ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
-if test "x$ac_cv_func_clock_gettime" = xyes; then :
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not building timepng" >&5
-$as_echo "$as_me: WARNING: not building timepng" >&2;}
-fi
-
- if test "$ac_cv_func_clock_gettime" = "yes"; then
- HAVE_CLOCK_GETTIME_TRUE=
- HAVE_CLOCK_GETTIME_FALSE='#'
-else
- HAVE_CLOCK_GETTIME_TRUE='#'
- HAVE_CLOCK_GETTIME_FALSE=
-fi
-
-
-
-# Check whether --with-zlib-prefix was given.
-if test "${with_zlib_prefix+set}" = set; then :
- withval=$with_zlib_prefix; ZPREFIX=${withval}
-else
- ZPREFIX='z_'
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlibVersion in -lz" >&5
-$as_echo_n "checking for zlibVersion in -lz... " >&6; }
-if ${ac_cv_lib_z_zlibVersion+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 zlibVersion ();
-int
-main ()
-{
-return zlibVersion ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_z_zlibVersion=yes
-else
- ac_cv_lib_z_zlibVersion=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_zlibVersion" >&5
-$as_echo "$ac_cv_lib_z_zlibVersion" >&6; }
-if test "x$ac_cv_lib_z_zlibVersion" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBZ 1
-_ACEOF
-
- LIBS="-lz $LIBS"
-
-else
- as_ac_Lib=`$as_echo "ac_cv_lib_z_${ZPREFIX}zlibVersion" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ZPREFIX}zlibVersion in -lz" >&5
-$as_echo_n "checking for ${ZPREFIX}zlibVersion in -lz... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 ${ZPREFIX}zlibVersion ();
-int
-main ()
-{
-return ${ZPREFIX}zlibVersion ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$as_ac_Lib=yes"
-else
- eval "$as_ac_Lib=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-eval ac_res=\$$as_ac_Lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBZ 1
-_ACEOF
-
- LIBS="-lz $LIBS"
-
-else
- as_fn_error $? "zlib not installed" "$LINENO" 5
-fi
-
-fi
-
-
-# The following is for pngvalid, to ensure it catches FP errors even on
-# platforms that don't enable FP exceptions, the function appears in the math
-# library (typically), it's not an error if it is not found.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for feenableexcept in -lm" >&5
-$as_echo_n "checking for feenableexcept in -lm... " >&6; }
-if ${ac_cv_lib_m_feenableexcept+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* 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 feenableexcept ();
-int
-main ()
-{
-return feenableexcept ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_feenableexcept=yes
-else
- ac_cv_lib_m_feenableexcept=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_feenableexcept" >&5
-$as_echo "$ac_cv_lib_m_feenableexcept" >&6; }
-if test "x$ac_cv_lib_m_feenableexcept" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
- LIBS="-lm $LIBS"
-
-fi
-
-for ac_func in feenableexcept
-do :
- ac_fn_c_check_func "$LINENO" "feenableexcept" "ac_cv_func_feenableexcept"
-if test "x$ac_cv_func_feenableexcept" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FEENABLEEXCEPT 1
-_ACEOF
-
-fi
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if using Solaris linker" >&5
-$as_echo_n "checking if using Solaris linker... " >&6; }
-SLD=`$LD --version 2>&1 | grep Solaris`
-if test "$SLD"; then
- have_solaris_ld=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- have_solaris_ld=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
- if test "$have_solaris_ld" = "yes"; then
- HAVE_SOLARIS_LD_TRUE=
- HAVE_SOLARIS_LD_FALSE='#'
-else
- HAVE_SOLARIS_LD_TRUE='#'
- HAVE_SOLARIS_LD_FALSE=
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libraries can be versioned" >&5
-$as_echo_n "checking if libraries can be versioned... " >&6; }
-# Special case for PE/COFF platforms: ld reports
-# support for version-script, but doesn't actually
-# DO anything with it.
-case $host in
-*cygwin* | *mingw32* | *interix* )
- have_ld_version_script=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-;;
-* )
-
-if test "$have_solaris_ld" = "yes"; then
- GLD=`$LD --help < /dev/null 2>&1 | grep 'M mapfile'`
-else
- GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
-fi
-
-if test "$GLD"; then
- have_ld_version_script=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- have_ld_version_script=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** You have not enabled versioned symbols." >&5
-$as_echo "$as_me: WARNING: *** You have not enabled versioned symbols." >&2;}
-fi
-;;
-esac
-
- if test "$have_ld_version_script" = "yes"; then
- HAVE_LD_VERSION_SCRIPT_TRUE=
- HAVE_LD_VERSION_SCRIPT_FALSE='#'
-else
- HAVE_LD_VERSION_SCRIPT_TRUE='#'
- HAVE_LD_VERSION_SCRIPT_FALSE=
-fi
-
-
-if test "$have_ld_version_script" = "yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for symbol prefix" >&5
-$as_echo_n "checking for symbol prefix... " >&6; }
- SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
- | ${CPP-${CC-gcc} -E} - 2>&1 \
- | ${EGREP-grep} "^PREFIX=" \
- | ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYMBOL_PREFIX" >&5
-$as_echo "$SYMBOL_PREFIX" >&6; }
-fi
-
-# Substitutions for .in files
-
-
-
-
-
-# Additional arguments (and substitutions)
-# Allow the pkg-config directory to be set
-
-# Check whether --with-pkgconfigdir was given.
-if test "${with_pkgconfigdir+set}" = set; then :
- withval=$with_pkgconfigdir; pkgconfigdir=${withval}
-else
- pkgconfigdir='${libdir}/pkgconfig'
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: pkgconfig directory is ${pkgconfigdir}" >&5
-$as_echo "$as_me: pkgconfig directory is ${pkgconfigdir}" >&6;}
-
-# Make the *-config binary config scripts optional
-
-# Check whether --with-binconfigs was given.
-if test "${with_binconfigs+set}" = set; then :
- withval=$with_binconfigs; if test "${withval}" = no; then
- binconfigs=
- { $as_echo "$as_me:${as_lineno-$LINENO}: libpng-config scripts will not be built" >&5
-$as_echo "$as_me: libpng-config scripts will not be built" >&6;}
- else
- binconfigs='${binconfigs}'
- fi
-else
- binconfigs='${binconfigs}'
-fi
-
-
-
-# Support for prefixes to the API function names; this will generate defines
-# at the start of the build to rename exported library functions
-
-# Check whether --with-libpng-prefix was given.
-if test "${with_libpng_prefix+set}" = set; then :
- withval=$with_libpng_prefix; if test "${withval:-no}" != "no"; then
- PNG_PREFIX=${withval}
-
- fi
-fi
-
- if test "${with_libpng_prefix:-no}" != "no"; then
- DO_PNG_PREFIX_TRUE=
- DO_PNG_PREFIX_FALSE='#'
-else
- DO_PNG_PREFIX_TRUE='#'
- DO_PNG_PREFIX_FALSE=
-fi
-
-
-# Control over what links are made for installed files. Versioned files are
-# always installed, when the following options are turned on corresponding
-# unversioned links are also created (normally as symbolic links):
-# Check whether --enable-unversioned-links was given.
-if test "${enable_unversioned_links+set}" = set; then :
- enableval=$enable_unversioned_links;
-fi
-
-
-# The AM_CONDITIONAL test is written so that the default is enabled;
-# --disable-unversioned-links must be given to turn the option off.
- if test "$enable_unversioned_links" != "no"; then
- DO_INSTALL_LINKS_TRUE=
- DO_INSTALL_LINKS_FALSE='#'
-else
- DO_INSTALL_LINKS_TRUE='#'
- DO_INSTALL_LINKS_FALSE=
-fi
-
-
-# Check whether --enable-unversioned-libpng-pc was given.
-if test "${enable_unversioned_libpng_pc+set}" = set; then :
- enableval=$enable_unversioned_libpng_pc;
-fi
-
- if test "$enable_unversioned_libpng_pc" != "no"; then
- DO_INSTALL_LIBPNG_PC_TRUE=
- DO_INSTALL_LIBPNG_PC_FALSE='#'
-else
- DO_INSTALL_LIBPNG_PC_TRUE='#'
- DO_INSTALL_LIBPNG_PC_FALSE=
-fi
-
-
-# Check whether --enable-unversioned-libpng-config was given.
-if test "${enable_unversioned_libpng_config+set}" = set; then :
- enableval=$enable_unversioned_libpng_config;
-fi
-
- if test "$enable_unversioned_libpng_config" != "no"; then
- DO_INSTALL_LIBPNG_CONFIG_TRUE=
- DO_INSTALL_LIBPNG_CONFIG_FALSE='#'
-else
- DO_INSTALL_LIBPNG_CONFIG_TRUE='#'
- DO_INSTALL_LIBPNG_CONFIG_FALSE=
-fi
-
-
-# HOST SPECIFIC OPTIONS
-# =====================
-#
-# DEFAULT
-# =======
-#
-# Check whether --enable-hardware-optimizations was given.
-if test "${enable_hardware_optimizations+set}" = set; then :
- enableval=$enable_hardware_optimizations; case "$enableval" in
- no|off)
- # disable hardware optimization on all systems:
- enable_arm_neon=no
-
-$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h
-
- enable_mips_msa=no
-
-$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h
-
- enable_powerpc_vsx=no
-
-$as_echo "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h
-
- enable_intel_sse=no
-
-$as_echo "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h
-
- ;;
- *)
- # allow enabling hardware optimization on any system:
- case "$host_cpu" in
- arm*|aarch64*)
- enable_arm_neon=yes
-
-$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h
-
- ;;
- mipsel*|mips64el*)
- enable_mips_msa=yes
-
-$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h
-
- ;;
- i?86|x86_64)
- enable_intel_sse=yes
-
-$as_echo "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h
-
- ;;
- powerpc*|ppc64*)
- enable_powerpc_vsx=yes
-
-$as_echo "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h
-
- ;;
- esac
- ;;
- esac
-fi
-
-
-# ARM
-# ===
-#
-# ARM NEON (SIMD) support.
-
-# Check whether --enable-arm-neon was given.
-if test "${enable_arm_neon+set}" = set; then :
- enableval=$enable_arm_neon; case "$enableval" in
- no|off)
- # disable the default enabling on __ARM_NEON__ systems:
-
-$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h
-
- # Prevent inclusion of the assembler files below:
- enable_arm_neon=no;;
- check)
-
-$as_echo "#define PNG_ARM_NEON_CHECK_SUPPORTED /**/" >>confdefs.h
-;;
- api)
-
-$as_echo "#define PNG_ARM_NEON_API_SUPPORTED /**/" >>confdefs.h
-;;
- yes|on)
-
-$as_echo "#define PNG_ARM_NEON_OPT 2" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-arm-neon: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass -mfpu=neon
- to the compiler." >&5
-$as_echo "$as_me: WARNING: --enable-arm-neon: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass -mfpu=neon
- to the compiler." >&2;};;
- *)
- as_fn_error $? "--enable-arm-neon=${enable_arm_neon}: invalid value" "$LINENO" 5
- esac
-fi
-
-
-# Add ARM specific files to all builds where the host_cpu is arm ('arm*') or
-# where ARM optimizations were explicitly requested (this allows a fallback if a
-# future host CPU does not match 'arm*')
-
- if test "$enable_arm_neon" != 'no' &&
- case "$host_cpu" in
- arm*|aarch64*) :;;
- *) test "$enable_arm_neon" != '';;
- esac; then
- PNG_ARM_NEON_TRUE=
- PNG_ARM_NEON_FALSE='#'
-else
- PNG_ARM_NEON_TRUE='#'
- PNG_ARM_NEON_FALSE=
-fi
-
-
-# MIPS
-# ===
-#
-# MIPS MSA (SIMD) support.
-
-# Check whether --enable-mips-msa was given.
-if test "${enable_mips_msa+set}" = set; then :
- enableval=$enable_mips_msa; case "$enableval" in
- no|off)
- # disable the default enabling on __mips_msa systems:
-
-$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h
-
- # Prevent inclusion of the assembler files below:
- enable_mips_msa=no;;
- check)
-
-$as_echo "#define PNG_MIPS_MSA_CHECK_SUPPORTED /**/" >>confdefs.h
-;;
- api)
-
-$as_echo "#define PNG_MIPS_MSA_API_SUPPORTED /**/" >>confdefs.h
-;;
- yes|on)
-
-$as_echo "#define PNG_MIPS_MSA_OPT 2" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-mips-msa: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass '-mmsa -mfp64'
- to the compiler." >&5
-$as_echo "$as_me: WARNING: --enable-mips-msa: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass '-mmsa -mfp64'
- to the compiler." >&2;};;
- *)
- as_fn_error $? "--enable-mips-msa=${enable_mips_msa}: invalid value" "$LINENO" 5
- esac
-fi
-
-
-# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or
-# where MIPS optimizations were explicitly requested (this allows a fallback if a
-# future host CPU does not match 'mips*')
-
- if test "$enable_mips_msa" != 'no' &&
- case "$host_cpu" in
- mipsel*|mips64el*) :;;
- esac; then
- PNG_MIPS_MSA_TRUE=
- PNG_MIPS_MSA_FALSE='#'
-else
- PNG_MIPS_MSA_TRUE='#'
- PNG_MIPS_MSA_FALSE=
-fi
-
-
-# INTEL
-# =====
-#
-# INTEL SSE (SIMD) support.
-
-# Check whether --enable-intel-sse was given.
-if test "${enable_intel_sse+set}" = set; then :
- enableval=$enable_intel_sse; case "$enableval" in
- no|off)
- # disable the default enabling:
-
-$as_echo "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h
-
- # Prevent inclusion of the assembler files below:
- enable_intel_sse=no;;
- yes|on)
-
-$as_echo "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h
-;;
- *)
- as_fn_error $? "--enable-intel-sse=${enable_intel_sse}: invalid value" "$LINENO" 5
- esac
-fi
-
-
-# Add Intel specific files to all builds where the host_cpu is Intel ('x86*')
-# or where Intel optimizations were explicitly requested (this allows a
-# fallback if a future host CPU does not match 'x86*')
- if test "$enable_intel_sse" != 'no' &&
- case "$host_cpu" in
- i?86|x86_64) :;;
- *) test "$enable_intel_sse" != '';;
- esac; then
- PNG_INTEL_SSE_TRUE=
- PNG_INTEL_SSE_FALSE='#'
-else
- PNG_INTEL_SSE_TRUE='#'
- PNG_INTEL_SSE_FALSE=
-fi
-
-
-# PowerPC
-# ===
-#
-# PowerPC VSX (SIMD) support.
-
-# Check whether --enable-powerpc-vsx was given.
-if test "${enable_powerpc_vsx+set}" = set; then :
- enableval=$enable_powerpc_vsx; case "$enableval" in
- no|off)
- # disable the default enabling on __ppc64__ systems:
-
-$as_echo "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h
-
- # Prevent inclusion of the platform specific files below:
- enable_powerpc_vsx=no;;
- check)
-
-$as_echo "#define PNG_POWERPC_VSX_CHECK_SUPPORTED /**/" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx Please check contrib/powerpc/README file
- for the list of supported OSes." >&5
-$as_echo "$as_me: WARNING: --enable-powerpc-vsx Please check contrib/powerpc/README file
- for the list of supported OSes." >&2;};;
- api)
-
-$as_echo "#define PNG_POWERPC_VSX_API_SUPPORTED /**/" >>confdefs.h
-;;
- yes|on)
-
-$as_echo "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass '-maltivec -mvsx'
- or '-mcpu=power8'to the compiler." >&5
-$as_echo "$as_me: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api', if
- you want the optimizations unconditionally pass '-maltivec -mvsx'
- or '-mcpu=power8'to the compiler." >&2;};;
- *)
- as_fn_error $? "--enable-powerpc-vsx=${enable_powerpc_vsx}: invalid value" "$LINENO" 5
- esac
-fi
-
-
-# Add PowerPC specific files to all builds where the host_cpu is powerpc('powerpc*') or
-# where POWERPC optimizations were explicitly requested (this allows a fallback if a
-# future host CPU does not match 'powerpc*')
-
- if test "$enable_powerpc_vsx" != 'no' &&
- case "$host_cpu" in
- powerpc*|ppc64*) :;;
- esac; then
- PNG_POWERPC_VSX_TRUE=
- PNG_POWERPC_VSX_FALSE='#'
-else
- PNG_POWERPC_VSX_TRUE='#'
- PNG_POWERPC_VSX_FALSE=
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: Extra options for compiler: $PNG_COPTS" >&5
-$as_echo "$as_me: Extra options for compiler: $PNG_COPTS" >&6;}
-
-# Config files, substituting as above
-ac_config_files="$ac_config_files Makefile libpng.pc:libpng.pc.in"
-
-ac_config_files="$ac_config_files libpng-config:libpng-config.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:${as_lineno-$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= ;; #(
- *) { eval $ac_var=; 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
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$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=
-U=
-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.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
- if test -n "$am_sleep_pid"; then
- # Hide warnings about reused PIDs.
- wait $am_sleep_pid 2>/dev/null
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
- if test -n "$EXEEXT"; then
- am__EXEEXT_TRUE=
- am__EXEEXT_FALSE='#'
-else
- am__EXEEXT_TRUE='#'
- am__EXEEXT_FALSE=
-fi
-
-if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
- as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
- as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_CLOCK_GETTIME_TRUE}" && test -z "${HAVE_CLOCK_GETTIME_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_CLOCK_GETTIME\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_SOLARIS_LD_TRUE}" && test -z "${HAVE_SOLARIS_LD_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_SOLARIS_LD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${DO_PNG_PREFIX_TRUE}" && test -z "${DO_PNG_PREFIX_FALSE}"; then
- as_fn_error $? "conditional \"DO_PNG_PREFIX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${DO_INSTALL_LINKS_TRUE}" && test -z "${DO_INSTALL_LINKS_FALSE}"; then
- as_fn_error $? "conditional \"DO_INSTALL_LINKS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${DO_INSTALL_LIBPNG_PC_TRUE}" && test -z "${DO_INSTALL_LIBPNG_PC_FALSE}"; then
- as_fn_error $? "conditional \"DO_INSTALL_LIBPNG_PC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${DO_INSTALL_LIBPNG_CONFIG_TRUE}" && test -z "${DO_INSTALL_LIBPNG_CONFIG_FALSE}"; then
- as_fn_error $? "conditional \"DO_INSTALL_LIBPNG_CONFIG\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${PNG_ARM_NEON_TRUE}" && test -z "${PNG_ARM_NEON_FALSE}"; then
- as_fn_error $? "conditional \"PNG_ARM_NEON\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${PNG_MIPS_MSA_TRUE}" && test -z "${PNG_MIPS_MSA_FALSE}"; then
- as_fn_error $? "conditional \"PNG_MIPS_MSA\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${PNG_INTEL_SSE_TRUE}" && test -z "${PNG_INTEL_SSE_FALSE}"; then
- as_fn_error $? "conditional \"PNG_INTEL_SSE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${PNG_POWERPC_VSX_TRUE}" && test -z "${PNG_POWERPC_VSX_FALSE}"; then
- as_fn_error $? "conditional \"PNG_POWERPC_VSX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-: "${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:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_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
-
-
-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
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (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
-
-
-# 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.
-as_myself=
-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
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-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'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-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 -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- 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_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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 libpng $as_me 1.6.34, which was
-generated by GNU Autoconf 2.69. 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"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, 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
-
-Configuration commands:
-$config_commands
-
-Report bugs to <png-mng-implement@lists.sourceforge.net>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-libpng config.status 1.6.34
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 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
-_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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- 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 ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; 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"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append 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
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --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_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append 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
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-
-# 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'
-SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
-Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
-GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
-EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
-FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
-SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
-ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
-LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
-macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
-AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
-enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
-shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
-PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
-host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
-host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
-host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
-build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
-build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
-build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
-NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
-LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
-exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
-AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
-STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
-lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
-CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
-compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
-GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
-nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
-lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
-objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
-need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
-LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
-libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
-version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
-install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
-configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
-striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
-
-# Quote evaled strings.
-for var in SED \
-GREP \
-EGREP \
-FGREP \
-SHELL \
-ECHO \
-LD \
-AS \
-DLLTOOL \
-OBJDUMP \
-PATH_SEPARATOR \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-deplibs_check_method \
-file_magic_cmd \
-file_magic_glob \
-want_nocaseglob \
-sharedlib_from_linklib_cmd \
-AR \
-AR_FLAGS \
-archiver_list_spec \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_import \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-lt_cv_nm_interface \
-nm_file_list_spec \
-lt_cv_truncate_bin \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_pic \
-lt_prog_compiler_wl \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-MANIFEST_TOOL \
-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_separator \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-install_override_mode \
-finish_eval \
-old_striplib \
-striplib; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- 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 \
-postlink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-configure_time_dlsearch_path \
-configure_time_lt_sys_library_path; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-ac_aux_dir='$ac_aux_dir'
-
-# See if we are running on zsh, and set the options that 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'
- 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
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "libpng.pc") CONFIG_FILES="$CONFIG_FILES libpng.pc:libpng.pc.in" ;;
- "libpng-config") CONFIG_FILES="$CONFIG_FILES libpng-config:libpng-config.in" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# 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=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-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 {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- 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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- 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 >>"\$ac_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 >>"\$ac_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 < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-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 >"$ac_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_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- 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_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-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_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[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="$ac_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_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append 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:${as_lineno-$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 >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- 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"; as_fn_mkdir_p
- 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
- 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
-# 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:${as_lineno-$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
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$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 "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- 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
- ;;
-
- :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
-
-
- case $ac_file$ac_mode in
- "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
- # Older Autoconf 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"`
- # 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'`; 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; as_fn_mkdir_p
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
- done
-}
- ;;
- "libtool":C)
-
- # See if we are running on zsh, and set the options that 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
-# Generated automatically by $as_me ($PACKAGE) $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.
-
-# Provide generalized library-building support services.
-# Written by Gordon Matzigkeit, 1996
-
-# Copyright (C) 2014 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 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags=''
-
-# Configured defaults for sys_lib_dlsearch_path munging.
-: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
-
-# ### BEGIN LIBTOOL CONFIG
-
-# 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
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that protects backslashes.
-ECHO=$lt_ECHO
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Assembler program.
-AS=$lt_AS
-
-# DLL creation program.
-DLLTOOL=$lt_DLLTOOL
-
-# Object dumper program.
-OBJDUMP=$lt_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
-
-# Shared archive member basename,for filename based shared library versioning on AIX.
-shared_archive_member_spec=$shared_archive_member_spec
-
-# The PATH separator for the build system.
-PATH_SEPARATOR=$lt_PATH_SEPARATOR
-
-# 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 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
-
-# convert \$build file names to \$host format.
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-
-# convert \$build files to toolchain format.
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-
-# 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
-
-# How to find potential files when deplibs_check_method = "file_magic".
-file_magic_glob=$lt_file_magic_glob
-
-# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-want_nocaseglob=$lt_want_nocaseglob
-
-# Command to associate shared and link libraries.
-sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-
-# The archiver.
-AR=$lt_AR
-
-# Flags to create an archive.
-AR_FLAGS=$lt_AR_FLAGS
-
-# How to feed a file listing to the archiver.
-archiver_list_spec=$lt_archiver_list_spec
-
-# 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
-
-# Whether to use a lock for old archive extraction.
-lock_old_archive_extraction=$lock_old_archive_extraction
-
-# 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 into a list of symbols to manually relocate.
-global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
-
-# 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 lister interface.
-nm_interface=$lt_lt_cv_nm_interface
-
-# Specify filename containing input files for \$NM.
-nm_file_list_spec=$lt_nm_file_list_spec
-
-# The root where to search for dependent libraries,and where our libraries should be installed.
-lt_sysroot=$lt_sysroot
-
-# Command to truncate a binary pipe.
-lt_truncate_bin=$lt_lt_cv_truncate_bin
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# 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
-
-# Manifest tool.
-MANIFEST_TOOL=$lt_MANIFEST_TOOL
-
-# 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
-
-# Permission mode override for installation of shared libraries.
-install_override_mode=$lt_install_override_mode
-
-# 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
-
-# Detected run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
-
-# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
-configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
-
-# 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
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# 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
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# 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
-
-# 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
-
-# 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
-
-# Commands necessary for finishing linking programs.
-postlink_cmds=$lt_postlink_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
-
- cat <<'_LT_EOF' >> "$cfgfile"
-
-# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-
-# ### END FUNCTIONS SHARED WITH CONFIGURE
-
-_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 set != "${COLLECT_NAMES+set}"; 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 '$q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
- ;;
- "libpng-config":F) chmod +x libpng-config ;;
-
- esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/libpng/configure.ac b/libpng/configure.ac
index e3cfafd6..52dba94b 100644
--- a/libpng/configure.ac
+++ b/libpng/configure.ac
@@ -1,7 +1,7 @@
# configure.ac
+# Copyright (c) 2018 Cosmin Truta
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
-# Last changed in libpng 1.6.25 [September 1, 2016]
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
@@ -25,7 +25,7 @@ AC_PREREQ([2.68])
dnl Version number stuff here:
-AC_INIT([libpng],[1.6.34],[png-mng-implement@lists.sourceforge.net])
+AC_INIT([libpng],[1.6.37],[png-mng-implement@lists.sourceforge.net])
AC_CONFIG_MACRO_DIR([scripts])
# libpng does not follow GNU file name conventions (hence 'foreign')
@@ -46,10 +46,10 @@ dnl automake, so the following is not necessary (and is not defined anyway):
dnl AM_PREREQ([1.11.2])
dnl stop configure from automagically running automake
-PNGLIB_VERSION=1.6.34
+PNGLIB_VERSION=1.6.37
PNGLIB_MAJOR=1
PNGLIB_MINOR=6
-PNGLIB_RELEASE=34
+PNGLIB_RELEASE=37
dnl End of version number stuff
@@ -144,7 +144,6 @@ AC_C_RESTRICT
# Checks for library functions.
AC_FUNC_STRTOD
-AC_CHECK_FUNCS([memset], , AC_MSG_ERROR(memset not found in libc))
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find pow)) )
# Some later POSIX 1003.1 functions are required for test programs, failure here
diff --git a/libpng/contrib/conftest/pngcp.dfa b/libpng/contrib/conftest/pngcp.dfa
index 15a856e2..31c411d5 100644
--- a/libpng/contrib/conftest/pngcp.dfa
+++ b/libpng/contrib/conftest/pngcp.dfa
@@ -33,7 +33,7 @@ option WRITE_16BIT on
option WRITE_FILTER on
# pngcp needs this to preserve unknown chunks, switching all these on means that
-# pngcp can work without explicit known chunk reading suppport
+# pngcp can work without explicit known chunk reading support
option UNKNOWN_CHUNKS on
option SET_UNKNOWN_CHUNKS on
option HANDLE_AS_UNKNOWN on
@@ -52,6 +52,6 @@ option TEXT on
option USER_LIMITS on
option SET_USER_LIMITS on
-# these are are just required for specific customizations
+# these are just required for specific customizations
option WRITE_CUSTOMIZE_ZTXT_COMPRESSION on
option WRITE_CUSTOMIZE_COMPRESSION on
diff --git a/libpng/contrib/examples/iccfrompng.c b/libpng/contrib/examples/iccfrompng.c
index 603037e7..00056abf 100644
--- a/libpng/contrib/examples/iccfrompng.c
+++ b/libpng/contrib/examples/iccfrompng.c
@@ -10,7 +10,7 @@
* without processing the image. Notice that some header information may occur
* after the image data. Textual data and comments are an example; the approach
* in this file won't work reliably for such data because it only looks for the
- * information in the section of the file that preceeds the image data.
+ * information in the section of the file that precedes the image data.
*
* Compile and link against libpng and zlib, plus anything else required on the
* system you use.
diff --git a/libpng/contrib/examples/pngpixel.c b/libpng/contrib/examples/pngpixel.c
index f762379e..9185d518 100644
--- a/libpng/contrib/examples/pngpixel.c
+++ b/libpng/contrib/examples/pngpixel.c
@@ -42,7 +42,7 @@ component(png_const_bytep row, png_uint_32 x, unsigned int c,
png_uint_32 bit_offset_hi = bit_depth * ((x >> 6) * channels);
png_uint_32 bit_offset_lo = bit_depth * ((x & 0x3f) * channels + c);
- row = (png_const_bytep)(((PNG_CONST png_byte (*)[8])row) + bit_offset_hi);
+ row = (png_const_bytep)(((const png_byte (*)[8])row) + bit_offset_hi);
row += bit_offset_lo >> 3;
bit_offset_lo &= 0x07;
@@ -73,7 +73,7 @@ static void
print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row,
png_uint_32 x)
{
- PNG_CONST unsigned int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
+ unsigned int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
switch (png_get_color_type(png_ptr, info_ptr))
{
@@ -87,7 +87,7 @@ print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row,
*/
case PNG_COLOR_TYPE_PALETTE:
{
- PNG_CONST int index = component(row, x, 0, bit_depth, 1);
+ int index = component(row, x, 0, bit_depth, 1);
png_colorp palette = NULL;
int num_palette = 0;
diff --git a/libpng/contrib/gregbook/readpng2.c b/libpng/contrib/gregbook/readpng2.c
index 5d13e153..610b3cd8 100644
--- a/libpng/contrib/gregbook/readpng2.c
+++ b/libpng/contrib/gregbook/readpng2.c
@@ -146,7 +146,7 @@ int readpng2_init(mainprog_info *mainprog_ptr)
/* These byte strings were copied from png.h. If a future version
* of readpng2.c recognizes more chunks, add them to this list.
*/
- static PNG_CONST png_byte chunks_to_process[] = {
+ static const png_byte chunks_to_process[] = {
98, 75, 71, 68, '\0', /* bKGD */
103, 65, 77, 65, '\0', /* gAMA */
115, 82, 71, 66, '\0', /* sRGB */
diff --git a/libpng/contrib/libtests/makepng.c b/libpng/contrib/libtests/makepng.c
index 9dff0484..312062bd 100644
--- a/libpng/contrib/libtests/makepng.c
+++ b/libpng/contrib/libtests/makepng.c
@@ -661,7 +661,7 @@ generate_row(png_bytep row, size_t rowbytes, unsigned int y, int color_type,
{
case 1:
{
- const png_uint_32 luma = colors[1];
+ png_uint_32 luma = colors[1];
png_uint_32 x;
for (x=0; x<=size_max; ++x)
@@ -672,8 +672,8 @@ generate_row(png_bytep row, size_t rowbytes, unsigned int y, int color_type,
case 2:
{
- const png_uint_32 luma = colors[1];
- const png_uint_32 alpha = colors[2];
+ png_uint_32 luma = colors[1];
+ png_uint_32 alpha = colors[2];
png_uint_32 x;
for (x=0; x<size_max; ++x)
@@ -688,9 +688,9 @@ generate_row(png_bytep row, size_t rowbytes, unsigned int y, int color_type,
case 3:
{
- const png_uint_32 red = colors[1];
- const png_uint_32 green = colors[2];
- const png_uint_32 blue = colors[3];
+ png_uint_32 red = colors[1];
+ png_uint_32 green = colors[2];
+ png_uint_32 blue = colors[3];
png_uint_32 x;
for (x=0; x<=size_max; ++x)
@@ -707,10 +707,10 @@ generate_row(png_bytep row, size_t rowbytes, unsigned int y, int color_type,
case 4:
{
- const png_uint_32 red = colors[1];
- const png_uint_32 green = colors[2];
- const png_uint_32 blue = colors[3];
- const png_uint_32 alpha = colors[4];
+ png_uint_32 red = colors[1];
+ png_uint_32 green = colors[2];
+ png_uint_32 blue = colors[3];
+ png_uint_32 alpha = colors[4];
png_uint_32 x;
for (x=0; x<=size_max; ++x)
@@ -812,7 +812,7 @@ write_png(const char **name, FILE *fp, int color_type, int bit_depth,
png_error(png_ptr, "OOM allocating info structure");
{
- const unsigned int size =
+ unsigned int size =
image_size_of_type(color_type, bit_depth, colors, small);
unsigned int ysize;
png_fixed_point real_gamma = 45455; /* For sRGB */
@@ -824,7 +824,7 @@ write_png(const char **name, FILE *fp, int color_type, int bit_depth,
*/
if (small)
{
- const unsigned int pixel_depth =
+ unsigned int pixel_depth =
pixel_depth_of_type(color_type, bit_depth);
if (pixel_depth <= 8U)
@@ -950,7 +950,7 @@ write_png(const char **name, FILE *fp, int color_type, int bit_depth,
int passes = 1;
# endif /* !WRITE_INTERLACING */
int pass;
- png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+ size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row = malloc(rowbytes);
@@ -1094,7 +1094,7 @@ load_file(png_const_charp name, png_bytepp result)
return 0;
}
-static png_size_t
+static size_t
load_fake(png_charp param, png_bytepp profile)
{
char *endptr = NULL;
@@ -1164,7 +1164,7 @@ insert_iCCP(png_structp png_ptr, png_infop info_ptr, int nparams,
{
case '<':
{
- png_size_t filelen = load_file(params[1]+1, &profile);
+ size_t filelen = load_file(params[1]+1, &profile);
if (filelen > 0xfffffffc) /* Maximum profile length */
{
fprintf(stderr, "%s: file too long (%lu) for an ICC profile\n",
@@ -1179,7 +1179,7 @@ insert_iCCP(png_structp png_ptr, png_infop info_ptr, int nparams,
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- png_size_t fake_len = load_fake(params[1], &profile);
+ size_t fake_len = load_fake(params[1], &profile);
if (fake_len > 0) /* else a simple parameter */
{
@@ -1274,7 +1274,7 @@ set_text(png_structp png_ptr, png_infop info_ptr, png_textp text,
case '5': case '6': case '7': case '8': case '9':
{
png_bytep data = NULL;
- png_size_t fake_len = load_fake(param, &data);
+ size_t fake_len = load_fake(param, &data);
if (fake_len > 0) /* else a simple parameter */
{
@@ -1378,10 +1378,10 @@ static void
insert_sBIT(png_structp png_ptr, png_infop info_ptr, int nparams,
png_charpp params)
{
- const int ct = png_get_color_type(png_ptr, info_ptr);
- const int c = (ct & PNG_COLOR_MASK_COLOR ? 3 : 1) +
+ int ct = png_get_color_type(png_ptr, info_ptr);
+ int c = (ct & PNG_COLOR_MASK_COLOR ? 3 : 1) +
(ct & PNG_COLOR_MASK_ALPHA ? 1 : 0);
- const unsigned int maxval =
+ unsigned int maxval =
ct & PNG_COLOR_MASK_PALETTE ? 8U : png_get_bit_depth(png_ptr, info_ptr);
png_color_8 sBIT;
@@ -1856,7 +1856,7 @@ main(int argc, char **argv)
/* Check the colors */
{
- const unsigned int lim = (color_type == PNG_COLOR_TYPE_PALETTE ? 255U :
+ unsigned int lim = (color_type == PNG_COLOR_TYPE_PALETTE ? 255U :
(1U<<bit_depth)-1);
unsigned int i;
diff --git a/libpng/contrib/libtests/pngimage.c b/libpng/contrib/libtests/pngimage.c
index 9ae402cc..f130c043 100644
--- a/libpng/contrib/libtests/pngimage.c
+++ b/libpng/contrib/libtests/pngimage.c
@@ -551,7 +551,7 @@ struct display
png_structp original_pp; /* used on the original read */
png_infop original_ip; /* set by the original read */
- png_size_t original_rowbytes; /* of the original rows: */
+ size_t original_rowbytes; /* of the original rows: */
png_bytepp original_rows; /* from the original read */
/* Original chunks valid */
@@ -807,7 +807,7 @@ display_cache_file(struct display *dp, const char *filename)
static void
buffer_read(struct display *dp, struct buffer *bp, png_bytep data,
- png_size_t size)
+ size_t size)
{
struct buffer_list *last = bp->current;
size_t read_count = bp->read_count;
@@ -855,7 +855,7 @@ buffer_read(struct display *dp, struct buffer *bp, png_bytep data,
}
static void PNGCBAPI
-read_function(png_structp pp, png_bytep data, png_size_t size)
+read_function(png_structp pp, png_bytep data, size_t size)
{
buffer_read(get_dp(pp), get_buffer(pp), data, size);
}
@@ -927,7 +927,7 @@ update_display(struct display *dp)
png_structp pp;
png_infop ip;
- /* Now perform the initial read with a 0 tranform. */
+ /* Now perform the initial read with a 0 transform. */
read_png(dp, &dp->original_file, "original read", 0/*no transform*/);
/* Move the result to the 'original' fields */
@@ -1267,7 +1267,7 @@ compare_read(struct display *dp, int applied_transforms)
#ifdef PNG_WRITE_PNG_SUPPORTED
static void
buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
- png_size_t size)
+ size_t size)
/* Generic write function used both from the write callback provided to
* libpng and from the generic read code.
*/
@@ -1311,7 +1311,7 @@ buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
}
static void PNGCBAPI
-write_function(png_structp pp, png_bytep data, png_size_t size)
+write_function(png_structp pp, png_bytep data, size_t size)
{
buffer_write(get_dp(pp), get_buffer(pp), data, size);
}
@@ -1446,7 +1446,7 @@ test_one_file(struct display *dp, const char *filename)
* unsigned, because some transforms are negative on a 16-bit system.
*/
unsigned int active = dp->active_transforms;
- const int exhaustive = (dp->options & EXHAUSTIVE) != 0;
+ int exhaustive = (dp->options & EXHAUSTIVE) != 0;
unsigned int current = first_transform(active);
unsigned int bad_transforms = 0;
unsigned int bad_combo = ~0U; /* bitwise AND of failing transforms */
@@ -1572,7 +1572,7 @@ do_test(struct display *dp, const char *file)
}
int
-main(const int argc, const char * const * const argv)
+main(int argc, char **argv)
{
/* For each file on the command line test it with a range of transforms */
int option_end, ilog = 0;
@@ -1674,7 +1674,7 @@ main(const int argc, const char * const * const argv)
/* Here on any return, including failures, except user/internal issues
*/
{
- const int pass = (d.options & STRICT) ?
+ int pass = (d.options & STRICT) ?
RESULT_STRICT(d.results) : RESULT_RELAXED(d.results);
if (!pass)
diff --git a/libpng/contrib/libtests/pngstest.c b/libpng/contrib/libtests/pngstest.c
index ab450893..a368bf0f 100644
--- a/libpng/contrib/libtests/pngstest.c
+++ b/libpng/contrib/libtests/pngstest.c
@@ -372,7 +372,7 @@ print_opts(png_uint_32 opts)
*/
#define FORMAT_COUNT 64
#define FORMAT_MASK 0x3f
-static PNG_CONST char * PNG_CONST format_names[FORMAT_COUNT] =
+static const char * const format_names[FORMAT_COUNT] =
{
"sRGB-gray",
"sRGB-gray+alpha",
@@ -578,11 +578,11 @@ typedef struct
int stride_extra;
FILE *input_file;
png_voidp input_memory;
- png_size_t input_memory_size;
+ size_t input_memory_size;
png_bytep buffer;
ptrdiff_t stride;
- png_size_t bufsize;
- png_size_t allocsize;
+ size_t bufsize;
+ size_t allocsize;
char tmpfile_name[32];
png_uint_16 colormap[256*4];
}
@@ -665,7 +665,7 @@ static void initimage(Image *image, png_uint_32 opts, const char *file_name,
static void
allocbuffer(Image *image)
{
- png_size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride);
+ size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride);
if (size+32 > image->bufsize)
{
@@ -1142,7 +1142,7 @@ get_pixel(png_uint_32 format))(Pixel *p, png_const_voidp pb)
}
}
-/* Convertion between pixel formats. The code above effectively eliminates the
+/* Conversion between pixel formats. The code above effectively eliminates the
* component ordering changes leaving three basic changes:
*
* 1) Remove an alpha channel by pre-multiplication or compositing on a
@@ -2036,7 +2036,7 @@ typedef struct
/* Precalculated values: */
int in_opaque; /* Value of input alpha that is opaque */
int is_palette; /* Sample values come from the palette */
- int accumulate; /* Accumlate component errors (don't log) */
+ int accumulate; /* Accumulate component errors (don't log) */
int output_8bit; /* Output is 8-bit (else 16-bit) */
void (*in_gp)(Pixel*, png_const_voidp);
@@ -2346,8 +2346,8 @@ static int
logpixel(const Transform *transform, png_uint_32 x, png_uint_32 y,
const Pixel *in, const Pixel *calc, const Pixel *out, const char *reason)
{
- const png_uint_32 in_format = transform->in_image->image.format;
- const png_uint_32 out_format = transform->out_image->image.format;
+ png_uint_32 in_format = transform->in_image->image.format;
+ png_uint_32 out_format = transform->out_image->image.format;
png_uint_32 back_format = out_format & ~PNG_FORMAT_FLAG_ALPHA;
const char *via_linear = "";
@@ -2602,12 +2602,12 @@ compare_two_images(Image *a, Image *b, int via_linear,
ptrdiff_t strideb = b->stride;
png_const_bytep rowa = a->buffer+16;
png_const_bytep rowb = b->buffer+16;
- const png_uint_32 width = a->image.width;
- const png_uint_32 height = a->image.height;
- const png_uint_32 formata = a->image.format;
- const png_uint_32 formatb = b->image.format;
- const unsigned int a_sample = PNG_IMAGE_SAMPLE_SIZE(formata);
- const unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb);
+ png_uint_32 width = a->image.width;
+ png_uint_32 height = a->image.height;
+ png_uint_32 formata = a->image.format;
+ png_uint_32 formatb = b->image.format;
+ unsigned int a_sample = PNG_IMAGE_SAMPLE_SIZE(formata);
+ unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb);
int alpha_added, alpha_removed;
int bchannels;
png_uint_32 y;
@@ -2726,7 +2726,7 @@ compare_two_images(Image *a, Image *b, int via_linear,
result = 0;
}
- /* If reqested copy the error values back from the Transform. */
+ /* If requested, copy the error values back from the Transform. */
if (a->opts & ACCUMULATE)
{
tr.error_ptr[0] = tr.error[0];
@@ -2790,8 +2790,7 @@ compare_two_images(Image *a, Image *b, int via_linear,
(formata & (formatb ^ PNG_FORMAT_FLAG_COLOR) & PNG_FORMAT_FLAG_COLOR)))
{
/* Was an alpha channel changed? */
- const png_uint_32 alpha_changed = (formata ^ formatb) &
- PNG_FORMAT_FLAG_ALPHA;
+ png_uint_32 alpha_changed = (formata ^ formatb) & PNG_FORMAT_FLAG_ALPHA;
/* Was an alpha channel removed? (The third test.) If so the direct
* comparison is only possible if the input alpha is opaque.
@@ -2932,7 +2931,7 @@ compare_two_images(Image *a, Image *b, int via_linear,
}
}
- /* If reqested copy the error values back from the Transform. */
+ /* If requested, copy the error values back from the Transform. */
if (a->opts & ACCUMULATE)
{
tr.error_ptr[0] = tr.error[0];
@@ -3627,7 +3626,7 @@ main(int argc, char **argv)
if (arg[0] == '-')
{
- const int term = (arg[1] == '0' ? 0 : '\n');
+ int term = (arg[1] == '0' ? 0 : '\n');
unsigned int ich = 0;
/* Loop reading files, use a static buffer to simplify this and just
diff --git a/libpng/contrib/libtests/pngunknown.c b/libpng/contrib/libtests/pngunknown.c
index 12eab725..05bdd833 100644
--- a/libpng/contrib/libtests/pngunknown.c
+++ b/libpng/contrib/libtests/pngunknown.c
@@ -56,7 +56,7 @@
defined(PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED)
#if PNG_LIBPNG_VER < 10500
-/* This deliberately lacks the PNG_CONST. */
+/* This deliberately lacks the const. */
typedef png_byte *png_const_bytep;
/* This is copied from 1.5.1 png.h: */
@@ -85,7 +85,7 @@ typedef png_byte *png_const_bytep;
#define PNG_WRITE_16BIT_SUPPORTED
#define PNG_READ_16BIT_SUPPORTED
-/* This comes from pnglibconf.h afer 1.5: */
+/* This comes from pnglibconf.h after 1.5: */
#define PNG_FP_1 100000
#define PNG_GAMMA_THRESHOLD_FIXED\
((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1))
diff --git a/libpng/contrib/libtests/pngvalid.c b/libpng/contrib/libtests/pngvalid.c
index 4dc4f844..d800110c 100644
--- a/libpng/contrib/libtests/pngvalid.c
+++ b/libpng/contrib/libtests/pngvalid.c
@@ -21,6 +21,7 @@
#define _POSIX_SOURCE 1
#define _ISOC99_SOURCE 1 /* For floating point */
#define _GNU_SOURCE 1 /* For the floating point exception extension */
+#define _BSD_SOURCE 1 /* For the floating point exception extension */
#include <signal.h>
#include <stdio.h>
@@ -102,7 +103,7 @@ typedef png_byte *png_const_bytep;
#define PNG_WRITE_16BIT_SUPPORTED
#define PNG_READ_16BIT_SUPPORTED
-/* This comes from pnglibconf.h afer 1.5: */
+/* This comes from pnglibconf.h after 1.5: */
#define PNG_FP_1 100000
#define PNG_GAMMA_THRESHOLD_FIXED\
((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1))
@@ -711,7 +712,7 @@ typedef struct png_store_file
unsigned int IDAT_bits; /* Number of bits in IDAT size */
png_uint_32 IDAT_size; /* Total size of IDAT data */
png_uint_32 id; /* must be correct (see FILEID) */
- png_size_t datacount; /* In this (the last) buffer */
+ size_t datacount; /* In this (the last) buffer */
png_store_buffer data; /* Last buffer in file */
int npalette; /* Number of entries in palette */
store_palette_entry* palette; /* May be NULL */
@@ -777,10 +778,10 @@ typedef struct png_store
png_infop piread;
png_store_file* current; /* Set when reading */
png_store_buffer* next; /* Set when reading */
- png_size_t readpos; /* Position in *next */
+ size_t readpos; /* Position in *next */
png_byte* image; /* Buffer for reading interlaced images */
- png_size_t cb_image; /* Size of this buffer */
- png_size_t cb_row; /* Row size of the image(s) */
+ size_t cb_image; /* Size of this buffer */
+ size_t cb_row; /* Row size of the image(s) */
uLong IDAT_crc;
png_uint_32 IDAT_len; /* Used when re-chunking IDAT chunks */
png_uint_32 IDAT_pos; /* Used when re-chunking IDAT chunks */
@@ -791,7 +792,7 @@ typedef struct png_store
png_store_file* saved;
png_structp pwrite; /* Used when writing a new file */
png_infop piwrite;
- png_size_t writepos; /* Position in .new */
+ size_t writepos; /* Position in .new */
char wname[FILE_NAME_SIZE];
png_store_buffer new; /* The end of the new PNG file being written. */
store_pool write_memory_pool;
@@ -961,7 +962,7 @@ bits_of(png_uint_32 num)
return b; /* 0..32 */
}
-/* Main interface to file storeage, after writing a new PNG file (see the API
+/* Main interface to file storage, after writing a new PNG file (see the API
* below) call store_storefile to store the result with the given name and id.
*/
static void
@@ -1125,7 +1126,7 @@ static png_bytep
store_image_row(const png_store* ps, png_const_structp pp, int nImage,
png_uint_32 y)
{
- png_size_t coffset = (nImage * ps->image_h + y) * (ps->cb_row + 5) + 2;
+ size_t coffset = (nImage * ps->image_h + y) * (ps->cb_row + 5) + 2;
if (ps->image == NULL)
png_error(pp, "no allocated image");
@@ -1160,9 +1161,9 @@ store_image_free(png_store *ps, png_const_structp pp)
static void
store_ensure_image(png_store *ps, png_const_structp pp, int nImages,
- png_size_t cbRow, png_uint_32 cRows)
+ size_t cbRow, png_uint_32 cRows)
{
- png_size_t cb = nImages * cRows * (cbRow + 5);
+ size_t cb = nImages * cRows * (cbRow + 5);
if (ps->cb_image < cb)
{
@@ -1234,7 +1235,7 @@ store_image_check(const png_store* ps, png_const_structp pp, int iImage)
png_error(pp, "image overwrite");
else
{
- png_size_t cbRow = ps->cb_row;
+ size_t cbRow = ps->cb_row;
png_uint_32 rows = ps->image_h;
image += iImage * (cbRow+5) * ps->image_h;
@@ -1278,7 +1279,7 @@ valid_chunktype(png_uint_32 chunktype)
}
static void PNGCBAPI
-store_write(png_structp ppIn, png_bytep pb, png_size_t st)
+store_write(png_structp ppIn, png_bytep pb, size_t st)
{
png_const_structp pp = ppIn;
png_store *ps = voidcast(png_store*, png_get_io_ptr(pp));
@@ -1346,13 +1347,13 @@ store_write(png_structp ppIn, png_bytep pb, png_size_t st)
else /* chunkpos >= 8 */
{
- png_size_t cb = st;
+ size_t cb = st;
if (cb > STORE_BUFFER_SIZE - writepos)
cb = STORE_BUFFER_SIZE - writepos;
if (cb > chunklen - chunkpos/* bytes left in chunk*/)
- cb = (png_size_t)/*SAFE*/(chunklen - chunkpos);
+ cb = (size_t)/*SAFE*/(chunklen - chunkpos);
memcpy(ps->new.buffer + writepos, pb, cb);
chunkpos += (png_uint_32)/*SAFE*/cb;
@@ -1440,7 +1441,7 @@ store_read_buffer_next(png_store *ps)
* during progressive read, where the io_ptr is set internally by libpng.
*/
static void
-store_read_imp(png_store *ps, png_bytep pb, png_size_t st)
+store_read_imp(png_store *ps, png_bytep pb, size_t st)
{
if (ps->current == NULL || ps->next == NULL)
png_error(ps->pread, "store state damaged");
@@ -1463,14 +1464,13 @@ store_read_imp(png_store *ps, png_bytep pb, png_size_t st)
}
}
-static png_size_t
-store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max,
- const png_size_t min)
+static size_t
+store_read_chunk(png_store *ps, png_bytep pb, size_t max, size_t min)
{
png_uint_32 chunklen = ps->chunklen;
png_uint_32 chunktype = ps->chunktype;
png_uint_32 chunkpos = ps->chunkpos;
- png_size_t st = max;
+ size_t st = max;
if (st > 0) do
{
@@ -1601,8 +1601,8 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max,
store_read_imp(ps, pb, avail);
ps->IDAT_crc = crc32(ps->IDAT_crc, pb, avail);
- pb += (png_size_t)/*SAFE*/avail;
- st -= (png_size_t)/*SAFE*/avail;
+ pb += (size_t)/*SAFE*/avail;
+ st -= (size_t)/*SAFE*/avail;
chunkpos += (png_uint_32)/*SAFE*/avail;
IDAT_size -= (png_uint_32)/*SAFE*/avail;
IDAT_pos += (png_uint_32)/*SAFE*/avail;
@@ -1669,10 +1669,10 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max,
else /* Return chunk bytes, including the CRC */
{
- png_size_t avail = st;
+ size_t avail = st;
if (avail > chunklen - chunkpos)
- avail = (png_size_t)/*SAFE*/(chunklen - chunkpos);
+ avail = (size_t)/*SAFE*/(chunklen - chunkpos);
store_read_imp(ps, pb, avail);
pb += avail;
@@ -1698,7 +1698,7 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max,
}
static void PNGCBAPI
-store_read(png_structp ppIn, png_bytep pb, png_size_t st)
+store_read(png_structp ppIn, png_bytep pb, size_t st)
{
png_const_structp pp = ppIn;
png_store *ps = voidcast(png_store*, png_get_io_ptr(pp));
@@ -1724,7 +1724,7 @@ store_progressive_read(png_store *ps, png_structp pp, png_infop pi)
while (store_read_buffer_avail(ps) > 0)
{
static png_uint_32 noise = 2;
- png_size_t cb;
+ size_t cb;
png_byte buffer[512];
/* Generate 15 more bits of stuff: */
@@ -2590,7 +2590,7 @@ static double digitize(double value, int depth, int do_round)
* rounding and 'do_round' should be 1, if it is 0 the digitized value will
* be truncated.
*/
- const unsigned int digitization_factor = (1U << depth) -1;
+ unsigned int digitization_factor = (1U << depth) - 1;
/* Limiting the range is done as a convenience to the caller - it's easier to
* do it once here than every time at the call site.
@@ -2991,7 +2991,7 @@ modifier_setbuffer(png_modifier *pm)
* png_struct.
*/
static void
-modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st)
+modifier_read_imp(png_modifier *pm, png_bytep pb, size_t st)
{
while (st > 0)
{
@@ -3137,7 +3137,7 @@ modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st)
*/
if (len+12 <= sizeof pm->buffer)
{
- png_size_t s = len+12-pm->buffer_count;
+ size_t s = len+12-pm->buffer_count;
store_read_chunk(&pm->this, pm->buffer+pm->buffer_count, s, s);
pm->buffer_count = len+12;
@@ -3196,7 +3196,7 @@ modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st)
/* The callback: */
static void PNGCBAPI
-modifier_read(png_structp ppIn, png_bytep pb, png_size_t st)
+modifier_read(png_structp ppIn, png_bytep pb, size_t st)
{
png_const_structp pp = ppIn;
png_modifier *pm = voidcast(png_modifier*, png_get_io_ptr(pp));
@@ -3226,7 +3226,7 @@ modifier_progressive_read(png_modifier *pm, png_structp pp, png_infop pi)
for (;;)
{
static png_uint_32 noise = 1;
- png_size_t cb, cbAvail;
+ size_t cb, cbAvail;
png_byte buffer[512];
/* Generate 15 more bits of stuff: */
@@ -3688,8 +3688,8 @@ init_standard_palette(png_store *ps, png_structp pp, png_infop pi, int npalette,
#ifdef PNG_WRITE_tRNS_SUPPORTED
static void
-set_random_tRNS(png_structp pp, png_infop pi, const png_byte colour_type,
- const int bit_depth)
+set_random_tRNS(png_structp pp, png_infop pi, png_byte colour_type,
+ int bit_depth)
{
/* To make this useful the tRNS color needs to match at least one pixel.
* Random values are fine for gray, including the 16-bit case where we know
@@ -3697,7 +3697,7 @@ set_random_tRNS(png_structp pp, png_infop pi, const png_byte colour_type,
* method as only 65536 different RGB values are generated.
*/
png_color_16 tRNS;
- const png_uint_16 mask = (png_uint_16)((1U << bit_depth)-1);
+ png_uint_16 mask = (png_uint_16)((1U << bit_depth)-1);
R8(tRNS); /* makes unset fields random */
@@ -4338,7 +4338,7 @@ make_size_image(png_store* const ps, png_byte const colour_type,
/* Make a name and get an appropriate id for the store: */
char name[FILE_NAME_SIZE];
- const png_uint_32 id = FILEID(colour_type, bit_depth, 0/*palette*/,
+ png_uint_32 id = FILEID(colour_type, bit_depth, 0/*palette*/,
interlace_type, w, h, do_interlace);
standard_name_from_id(name, sizeof name, 0, id);
@@ -4414,7 +4414,7 @@ make_size_image(png_store* const ps, png_byte const colour_type,
for (pass=0; pass<npasses; ++pass)
{
/* The following two are for checking the macros: */
- const png_uint_32 wPass = PNG_PASS_COLS(w, pass);
+ png_uint_32 wPass = PNG_PASS_COLS(w, pass);
/* If do_interlace is set we don't call png_write_row for every
* row because some of them are empty. In fact, for a 1x1 image,
@@ -4646,7 +4646,7 @@ make_error(png_store* const ps, png_byte const colour_type,
Try
{
png_infop pi;
- const png_structp pp = set_store_for_write(ps, &pi, name);
+ png_structp pp = set_store_for_write(ps, &pi, name);
png_uint_32 w, h;
gnu_volatile(pp)
@@ -4706,7 +4706,7 @@ make_error(png_store* const ps, png_byte const colour_type,
else
{
/* Now write the whole image, just to make sure that the detected, or
- * undetected, errro has not created problems inside libpng. This
+ * undetected, error has not created problems inside libpng. This
* doesn't work if there was a png_error in png_write_info because that
* can abort before PLTE was written.
*/
@@ -5001,7 +5001,7 @@ standard_display_init(standard_display *dp, png_store* ps, png_uint_32 id,
dp->npalette = 0;
/* Preset the transparent color to black: */
memset(&dp->transparent, 0, sizeof dp->transparent);
- /* Preset the palette to full intensity/opaque througout: */
+ /* Preset the palette to full intensity/opaque throughout: */
memset(dp->palette, 0xff, sizeof dp->palette);
}
@@ -5270,7 +5270,7 @@ standard_info_part1(standard_display *dp, png_structp pp, png_infop pi)
*/
standard_palette_validate(dp, pp, pi);
- /* In any case always check for a tranparent color (notice that the
+ /* In any case always check for a transparent color (notice that the
* colour type 3 case must not give a successful return on the get_tRNS call
* with these arguments!)
*/
@@ -5469,14 +5469,14 @@ progressive_row(png_structp ppIn, png_bytep new_row, png_uint_32 y, int pass)
static void
sequential_row(standard_display *dp, png_structp pp, png_infop pi,
- const int iImage, const int iDisplay)
+ int iImage, int iDisplay)
{
- const int npasses = dp->npasses;
- const int do_interlace = dp->do_interlace &&
+ int npasses = dp->npasses;
+ int do_interlace = dp->do_interlace &&
dp->interlace_type == PNG_INTERLACE_ADAM7;
- const png_uint_32 height = standard_height(pp, dp->id);
- const png_uint_32 width = standard_width(pp, dp->id);
- const png_store* ps = dp->ps;
+ png_uint_32 height = standard_height(pp, dp->id);
+ png_uint_32 width = standard_width(pp, dp->id);
+ const png_store* ps = dp->ps;
int pass;
for (pass=0; pass<npasses; ++pass)
@@ -5870,7 +5870,7 @@ test_size(png_modifier* const pm, png_byte const colour_type,
*/
static const png_byte hinc[] = {1, 3, 11, 1, 5};
static const png_byte winc[] = {1, 9, 5, 7, 1};
- const int save_bdlo = bdlo;
+ int save_bdlo = bdlo;
for (; bdlo <= bdhi; ++bdlo)
{
@@ -6078,12 +6078,12 @@ image_pixel_init(image_pixel *this, png_const_bytep row, png_byte colour_type,
png_byte bit_depth, png_uint_32 x, store_palette palette,
const image_pixel *format /*from pngvalid transform of input*/)
{
- const png_byte sample_depth = (png_byte)(colour_type ==
- PNG_COLOR_TYPE_PALETTE ? 8 : bit_depth);
- const unsigned int max = (1U<<sample_depth)-1;
- const int swap16 = (format != 0 && format->swap16);
- const int littleendian = (format != 0 && format->littleendian);
- const int sig_bits = (format != 0 && format->sig_bits);
+ png_byte sample_depth =
+ (png_byte)(colour_type == PNG_COLOR_TYPE_PALETTE ? 8 : bit_depth);
+ unsigned int max = (1U<<sample_depth)-1;
+ int swap16 = (format != 0 && format->swap16);
+ int littleendian = (format != 0 && format->littleendian);
+ int sig_bits = (format != 0 && format->sig_bits);
/* Initially just set everything to the same number and the alpha to opaque.
* Note that this currently assumes a simple palette where entry x has colour
@@ -6101,7 +6101,7 @@ image_pixel_init(image_pixel *this, png_const_bytep row, png_byte colour_type,
/* This permits the caller to default to the sample value. */
if (palette != 0)
{
- const unsigned int i = this->palette_index;
+ unsigned int i = this->palette_index;
this->red = palette[i].red;
this->green = palette[i].green;
@@ -6432,8 +6432,8 @@ static void
image_transform_mod_end(const image_transform *this, image_pixel *that,
png_const_structp pp, const transform_display *display)
{
- const unsigned int scale = (1U<<that->sample_depth)-1;
- const int sig_bits = that->sig_bits;
+ unsigned int scale = (1U<<that->sample_depth)-1;
+ int sig_bits = that->sig_bits;
UNUSED(this)
UNUSED(pp)
@@ -6756,19 +6756,19 @@ transform_image_validate(transform_display *dp, png_const_structp pp,
{
/* Constants for the loop below: */
const png_store* const ps = dp->this.ps;
- const png_byte in_ct = dp->this.colour_type;
- const png_byte in_bd = dp->this.bit_depth;
- const png_uint_32 w = dp->this.w;
- const png_uint_32 h = dp->this.h;
- const png_byte out_ct = dp->output_colour_type;
- const png_byte out_bd = dp->output_bit_depth;
- const png_byte sample_depth = (png_byte)(out_ct ==
- PNG_COLOR_TYPE_PALETTE ? 8 : out_bd);
- const png_byte red_sBIT = dp->this.red_sBIT;
- const png_byte green_sBIT = dp->this.green_sBIT;
- const png_byte blue_sBIT = dp->this.blue_sBIT;
- const png_byte alpha_sBIT = dp->this.alpha_sBIT;
- const int have_tRNS = dp->this.is_transparent;
+ png_byte in_ct = dp->this.colour_type;
+ png_byte in_bd = dp->this.bit_depth;
+ png_uint_32 w = dp->this.w;
+ png_uint_32 h = dp->this.h;
+ png_byte out_ct = dp->output_colour_type;
+ png_byte out_bd = dp->output_bit_depth;
+ png_byte sample_depth =
+ (png_byte)(out_ct == PNG_COLOR_TYPE_PALETTE ? 8 : out_bd);
+ png_byte red_sBIT = dp->this.red_sBIT;
+ png_byte green_sBIT = dp->this.green_sBIT;
+ png_byte blue_sBIT = dp->this.blue_sBIT;
+ png_byte alpha_sBIT = dp->this.alpha_sBIT;
+ int have_tRNS = dp->this.is_transparent;
double digitization_error;
store_palette out_palette;
@@ -6780,7 +6780,7 @@ transform_image_validate(transform_display *dp, png_const_structp pp,
store_image_check(dp->this.ps, pp, 0);
/* Read the palette corresponding to the output if the output colour type
- * indicates a palette, othewise set out_palette to garbage.
+ * indicates a palette, otherwise set out_palette to garbage.
*/
if (out_ct == PNG_COLOR_TYPE_PALETTE)
{
@@ -6929,7 +6929,7 @@ transform_end(png_structp ppIn, png_infop pi)
/* A single test run. */
static void
-transform_test(png_modifier *pmIn, const png_uint_32 idIn,
+transform_test(png_modifier *pmIn, png_uint_32 idIn,
const image_transform* transform_listIn, const char * const name)
{
transform_display d;
@@ -7764,7 +7764,7 @@ static void
image_transform_png_set_rgb_to_gray_set(const image_transform *this,
transform_display *that, png_structp pp, png_infop pi)
{
- const int error_action = 1; /* no error, no defines in png.h */
+ int error_action = 1; /* no error, no defines in png.h */
# ifdef PNG_FLOATING_POINT_SUPPORTED
png_set_rgb_to_gray(pp, error_action, data.red_to_set, data.green_to_set);
@@ -7905,10 +7905,10 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this,
# if DIGITIZE
{
png_modifier *pm = display->pm;
- const unsigned int sample_depth = that->sample_depth;
- const unsigned int calc_depth = (pm->assume_16_bit_calculations ? 16 :
+ unsigned int sample_depth = that->sample_depth;
+ unsigned int calc_depth = (pm->assume_16_bit_calculations ? 16 :
sample_depth);
- const unsigned int gamma_depth =
+ unsigned int gamma_depth =
(sample_depth == 16 ?
display->max_gamma_8 :
(pm->assume_16_bit_calculations ?
@@ -7991,7 +7991,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this,
/* Now calculate the actual gray values. Although the error in the
* coefficients depends on whether they were specified on the command
* line (in which case truncation to 15 bits happened) or not (rounding
- * was used) the maxium error in an individual coefficient is always
+ * was used) the maximum error in an individual coefficient is always
* 2/32768, because even in the rounding case the requirement that
* coefficients add up to 32768 can cause a larger rounding error.
*
@@ -8002,7 +8002,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this,
b * data.blue_coefficient;
{
- const int do_round = data.gamma != 1 || calc_depth == 16;
+ int do_round = data.gamma != 1 || calc_depth == 16;
const double ce = 2. / 32768;
graylo = DD(rlo * (data.red_coefficient-ce) +
@@ -8207,7 +8207,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this,
that->bluef = that->greenf = that->redf = gray;
that->bluee = that->greene = that->rede = err;
- /* The sBIT is the minium of the three colour channel sBITs. */
+ /* The sBIT is the minimum of the three colour channel sBITs. */
if (that->red_sBIT > that->green_sBIT)
that->red_sBIT = that->green_sBIT;
if (that->red_sBIT > that->blue_sBIT)
@@ -8626,7 +8626,7 @@ image_transform_png_set_filler_mod(const image_transform *this,
(that->colour_type == PNG_COLOR_TYPE_RGB ||
that->colour_type == PNG_COLOR_TYPE_GRAY))
{
- const unsigned int max = (1U << that->bit_depth)-1;
+ unsigned int max = (1U << that->bit_depth)-1;
that->alpha = data.filler & max;
that->alphaf = ((double)that->alpha) / max;
that->alphae = 0;
@@ -8693,7 +8693,7 @@ image_transform_png_set_add_alpha_mod(const image_transform *this,
(that->colour_type == PNG_COLOR_TYPE_RGB ||
that->colour_type == PNG_COLOR_TYPE_GRAY))
{
- const unsigned int max = (1U << that->bit_depth)-1;
+ unsigned int max = (1U << that->bit_depth)-1;
that->alpha = data.filler & max;
that->alphaf = ((double)that->alpha) / max;
that->alphae = 0;
@@ -8884,7 +8884,7 @@ image_transform_png_set_shift_set(const image_transform *this,
* field is randomized independently. This acts as a check that
* libpng does use the correct field.
*/
- const unsigned int depth = that->this.bit_depth;
+ unsigned int depth = that->this.bit_depth;
data.red = (png_byte)/*SAFE*/(random_mod(depth)+1);
data.green = (png_byte)/*SAFE*/(random_mod(depth)+1);
@@ -9299,12 +9299,12 @@ gamma_info_imp(gamma_display *dp, png_structp pp, png_infop pi)
int mode = dp->do_background - ALPHA_MODE_OFFSET;
/* The gamma value is the output gamma, and is in the standard,
- * non-inverted, represenation. It provides a default for the PNG file
+ * non-inverted, representation. It provides a default for the PNG file
* gamma, but since the file has a gAMA chunk this does not matter.
*/
const double sg = dp->screen_gamma;
# ifndef PNG_FLOATING_POINT_SUPPORTED
- const png_fixed_point g = fix(sg);
+ png_fixed_point g = fix(sg);
# endif
# ifdef PNG_FLOATING_POINT_SUPPORTED
@@ -9352,7 +9352,7 @@ gamma_info_imp(gamma_display *dp, png_structp pp, png_infop pi)
*/
const double bg = dp->background_gamma;
# ifndef PNG_FLOATING_POINT_SUPPORTED
- const png_fixed_point g = fix(bg);
+ png_fixed_point g = fix(bg);
# endif
# ifdef PNG_FLOATING_POINT_SUPPORTED
@@ -9426,7 +9426,7 @@ static void
init_validate_info(validate_info *vi, gamma_display *dp, png_const_structp pp,
int in_depth, int out_depth)
{
- const unsigned int outmax = (1U<<out_depth)-1;
+ unsigned int outmax = (1U<<out_depth)-1;
vi->pp = pp;
vi->dp = dp;
@@ -9588,14 +9588,14 @@ gamma_component_compose(int do_background, double input_sample, double alpha,
/* This API returns the encoded *input* component, in the range 0..1 */
static double
gamma_component_validate(const char *name, const validate_info *vi,
- const unsigned int id, const unsigned int od,
+ unsigned int id, unsigned int od,
const double alpha /* <0 for the alpha channel itself */,
const double background /* component background value */)
{
- const unsigned int isbit = id >> vi->isbit_shift;
- const unsigned int sbit_max = vi->sbit_max;
- const unsigned int outmax = vi->outmax;
- const int do_background = vi->do_background;
+ unsigned int isbit = id >> vi->isbit_shift;
+ unsigned int sbit_max = vi->sbit_max;
+ unsigned int outmax = vi->outmax;
+ int do_background = vi->do_background;
double i;
@@ -9746,7 +9746,7 @@ gamma_component_validate(const char *name, const validate_info *vi,
*
* pngvalid calculations:
* input_sample: linear result; i linearized and composed, range 0..1
- * encoded_sample: encoded result; input_sample scaled to ouput bit depth
+ * encoded_sample: encoded result; input_sample scaled to output bit depth
*
* libpng calculations:
* output: linear result; od scaled to 0..1 and linearized
@@ -10161,13 +10161,13 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp,
{
/* Get some constants derived from the input and output file formats: */
const png_store* const ps = dp->this.ps;
- const png_byte in_ct = dp->this.colour_type;
- const png_byte in_bd = dp->this.bit_depth;
- const png_uint_32 w = dp->this.w;
- const png_uint_32 h = dp->this.h;
+ png_byte in_ct = dp->this.colour_type;
+ png_byte in_bd = dp->this.bit_depth;
+ png_uint_32 w = dp->this.w;
+ png_uint_32 h = dp->this.h;
const size_t cbRow = dp->this.cbRow;
- const png_byte out_ct = png_get_color_type(pp, pi);
- const png_byte out_bd = png_get_bit_depth(pp, pi);
+ png_byte out_ct = png_get_color_type(pp, pi);
+ png_byte out_bd = png_get_bit_depth(pp, pi);
/* There are three sources of error, firstly the quantization in the
* file encoding, determined by sbit and/or the file depth, secondly
@@ -10183,10 +10183,10 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp,
* Since the library must quantize the output to 8 or 16 bits there is
* a fundamental limit on the accuracy of the output of +/-.5 - this
* quantization limit is included in addition to the other limits
- * specified by the paramaters to the API. (Effectively, add .5
+ * specified by the parameters to the API. (Effectively, add .5
* everywhere.)
*
- * The behavior of the 'sbit' paramter is defined by section 12.5
+ * The behavior of the 'sbit' parameter is defined by section 12.5
* (sample depth scaling) of the PNG spec. That section forces the
* decoder to assume that the PNG values have been scaled if sBIT is
* present:
@@ -10208,11 +10208,11 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp,
* The basic tests below do not do this, however if 'use_input_precision'
* is set a subsequent test is performed above.
*/
- const unsigned int samples_per_pixel = (out_ct & 2U) ? 3U : 1U;
+ unsigned int samples_per_pixel = (out_ct & 2U) ? 3U : 1U;
int processing;
png_uint_32 y;
const store_palette_entry *in_palette = dp->this.palette;
- const int in_is_transparent = dp->this.is_transparent;
+ int in_is_transparent = dp->this.is_transparent;
int process_tRNS;
int out_npalette = -1;
int out_is_transparent = 0; /* Just refers to the palette case */
@@ -10260,9 +10260,9 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp,
double alpha = 1; /* serves as a flag value */
/* Record the palette index for index images. */
- const unsigned int in_index =
+ unsigned int in_index =
in_ct == 3 ? sample(std, 3, in_bd, x, 0, 0, 0) : 256;
- const unsigned int out_index =
+ unsigned int out_index =
out_ct == 3 ? sample(std, 3, out_bd, x, 0, 0, 0) : 256;
/* Handle input alpha - png_set_background will cause the output
@@ -10271,7 +10271,7 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp,
if ((in_ct & PNG_COLOR_MASK_ALPHA) != 0 ||
(in_ct == 3 && in_is_transparent))
{
- const unsigned int input_alpha = in_ct == 3 ?
+ unsigned int input_alpha = in_ct == 3 ?
dp->this.palette[in_index].alpha :
sample(std, in_ct, in_bd, x, samples_per_pixel, 0, 0);
@@ -10396,14 +10396,14 @@ gamma_end(png_structp ppIn, png_infop pi)
* maxpc: maximum percentage error (as a percentage)
*/
static void
-gamma_test(png_modifier *pmIn, const png_byte colour_typeIn,
- const png_byte bit_depthIn, const int palette_numberIn,
- const int interlace_typeIn,
+gamma_test(png_modifier *pmIn, png_byte colour_typeIn,
+ png_byte bit_depthIn, int palette_numberIn,
+ int interlace_typeIn,
const double file_gammaIn, const double screen_gammaIn,
- const png_byte sbitIn, const int threshold_testIn,
+ png_byte sbitIn, int threshold_testIn,
const char *name,
- const int use_input_precisionIn, const int scale16In,
- const int expand16In, const int do_backgroundIn,
+ int use_input_precisionIn, int scale16In,
+ int expand16In, int do_backgroundIn,
const png_color_16 *bkgd_colorIn, double bkgd_gammaIn)
{
gamma_display d;
@@ -10607,11 +10607,11 @@ perform_gamma_threshold_tests(png_modifier *pm)
}
static void gamma_transform_test(png_modifier *pm,
- const png_byte colour_type, const png_byte bit_depth,
- const int palette_number,
- const int interlace_type, const double file_gamma,
- const double screen_gamma, const png_byte sbit,
- const int use_input_precision, const int scale16)
+ png_byte colour_type, png_byte bit_depth,
+ int palette_number,
+ int interlace_type, const double file_gamma,
+ const double screen_gamma, png_byte sbit,
+ int use_input_precision, int scale16)
{
size_t pos = 0;
char name[64];
@@ -10768,12 +10768,12 @@ static void perform_gamma_scale16_tests(png_modifier *pm)
#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
defined(PNG_READ_ALPHA_MODE_SUPPORTED)
static void gamma_composition_test(png_modifier *pm,
- const png_byte colour_type, const png_byte bit_depth,
- const int palette_number,
- const int interlace_type, const double file_gamma,
+ png_byte colour_type, png_byte bit_depth,
+ int palette_number,
+ int interlace_type, const double file_gamma,
const double screen_gamma,
- const int use_input_precision, const int do_background,
- const int expand_16)
+ int use_input_precision, int do_background,
+ int expand_16)
{
size_t pos = 0;
png_const_charp base;
@@ -11729,7 +11729,7 @@ int main(int argc, char **argv)
/* Some default values (set the behavior for 'make check' here).
* These values simply control the maximum error permitted in the gamma
- * transformations. The practial limits for human perception are described
+ * transformations. The practical limits for human perception are described
* below (the setting for maxpc16), however for 8 bit encodings it isn't
* possible to meet the accepted capabilities of human vision - i.e. 8 bit
* images can never be good enough, regardless of encoding.
diff --git a/libpng/contrib/libtests/readpng.c b/libpng/contrib/libtests/readpng.c
index 3336d4e2..60a2d46c 100644
--- a/libpng/contrib/libtests/readpng.c
+++ b/libpng/contrib/libtests/readpng.c
@@ -60,7 +60,7 @@ read_png(FILE *fp)
png_read_info(png_ptr, info_ptr);
{
- png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+ size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
/* Failure to initialize these is harmless */
row = malloc(rowbytes);
diff --git a/libpng/contrib/libtests/tarith.c b/libpng/contrib/libtests/tarith.c
index cb17ffa7..c03f05a8 100644
--- a/libpng/contrib/libtests/tarith.c
+++ b/libpng/contrib/libtests/tarith.c
@@ -108,7 +108,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
do
{
- png_size_t index;
+ size_t index;
int state, failed = 0;
char buffer[64];
@@ -176,7 +176,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
}
else if (PNG_FP_IS_POSITIVE(state) && !(test > 0))
{
- fprintf(stderr, "%g[%d] -> '%s' but postive value not so reported\n",
+ fprintf(stderr, "%g[%d] -> '%s' but positive value not so reported\n",
test, precision, buffer);
failed = 1;
assert(!PNG_FP_IS_NEGATIVE(state));
@@ -329,10 +329,10 @@ static int check_one_character(checkfp_command *co, checkfp_control c, int ch)
{
/* Test this character (ch) to ensure the parser does the correct thing.
*/
- png_size_t index = 0;
+ size_t index = 0;
const char test = (char)ch;
- const int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index);
- const int character_accepted = (index == 1);
+ int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index);
+ int character_accepted = (index == 1);
if (c.check_state != exponent && isdigit(ch) && ch != '0')
c.is_zero = 0;
diff --git a/libpng/contrib/libtests/timepng.c b/libpng/contrib/libtests/timepng.c
index 3bcfde5a..23d8b17b 100644
--- a/libpng/contrib/libtests/timepng.c
+++ b/libpng/contrib/libtests/timepng.c
@@ -65,7 +65,7 @@ typedef struct
} io_data;
static PNG_CALLBACK(void, read_and_copy,
- (png_structp png_ptr, png_bytep buffer, png_size_t cb))
+ (png_structp png_ptr, png_bytep buffer, size_t cb))
{
io_data *io = (io_data*)png_get_io_ptr(png_ptr);
@@ -100,7 +100,7 @@ static void read_by_row(png_structp png_ptr, png_infop info_ptr,
png_read_info(png_ptr, info_ptr);
{
- png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+ size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row = voidcast(png_bytep,malloc(rowbytes));
display = voidcast(png_bytep,malloc(rowbytes));
diff --git a/libpng/contrib/oss-fuzz/Dockerfile b/libpng/contrib/oss-fuzz/Dockerfile
index 7e4d1ebf..f5bc1a98 100644
--- a/libpng/contrib/oss-fuzz/Dockerfile
+++ b/libpng/contrib/oss-fuzz/Dockerfile
@@ -16,9 +16,10 @@
FROM gcr.io/oss-fuzz-base/base-builder
MAINTAINER glennrp@gmail.com
-RUN apt-get update && apt-get install -y make autoconf automake libtool zlib1g-dev
+RUN apt-get update && \
+ apt-get install -y make autoconf automake libtool
+RUN git clone --depth 1 https://github.com/madler/zlib.git
RUN git clone --depth 1 https://github.com/glennrp/libpng.git
-RUN (cd libpng; git log | head -1)
+RUN cp libpng/contrib/oss-fuzz/build.sh $SRC
WORKDIR libpng
-COPY build.sh $SRC/
diff --git a/libpng/contrib/oss-fuzz/README.txt b/libpng/contrib/oss-fuzz/README.txt
index a2b67366..3b3656fb 100644
--- a/libpng/contrib/oss-fuzz/README.txt
+++ b/libpng/contrib/oss-fuzz/README.txt
@@ -24,13 +24,13 @@ The files are
Filename or derived Copyright License
========================= ========== ================ ==========
Dockerfile* derived 2017, Glenn R-P Apache 2.0
- build.sh* derived 2017, Glenn R-P Apache 2.0
+ build.sh derived 2017, Glenn R-P Apache 2.0
libpng_read_fuzzer.cc derived 2017, Glenn R-P Chromium
libpng_read_fuzzer.options original 2015, Chrome Devs Chromium
png.dict original 2015, Chrome Devs Chromium
README.txt (this file) original 2017, Glenn R-P libpng
- * Dockerfile and build.sh are copies of the files used by oss-fuzz.
+ * Dockerfile is a copy of the file used by oss-fuzz. build.sh,
png.dict and libpng_read_fuzzer.* are the actual files used by oss-fuzz,
which retrieves them from the libpng repository at Github.
diff --git a/libpng/contrib/oss-fuzz/build.sh b/libpng/contrib/oss-fuzz/build.sh
index d2137b13..f9e1b077 100755
--- a/libpng/contrib/oss-fuzz/build.sh
+++ b/libpng/contrib/oss-fuzz/build.sh
@@ -1,5 +1,5 @@
#!/bin/bash -eu
-# Copyright 2017 Glenn Randers-Pehrson
+# Copyright 2017-2018 Glenn Randers-Pehrson
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,12 +14,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# Last changed in libpng 1.6.33 [September 28, 2017]
+# Last changed in libpng 1.6.35 [July 15, 2018]
#
-# Revisions by Glenn Randers-Pehson, 2017:
+# Revisions by Glenn Randers-Pehrson, 2017:
# 1. Build only the library, not the tools (changed "make -j$(nproc) all" to
# "make -j$(nproc) libpng16.la").
# 2. Disabled WARNING and WRITE options in pnglibconf.dfa.
+# 3. Build zlib alongside libpng
################################################################################
# Disable logging via library build configuration control.
@@ -30,9 +31,9 @@ cat scripts/pnglibconf.dfa | \
> scripts/pnglibconf.dfa.temp
mv scripts/pnglibconf.dfa.temp scripts/pnglibconf.dfa
-# build the library.
+# build the libpng library.
autoreconf -f -i
-./configure
+./configure --with-libpng-prefix=OSS_FUZZ_
make -j$(nproc) clean
make -j$(nproc) libpng16.la
diff --git a/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc b/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc
index 78c7c9ff..7b305509 100644
--- a/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc
+++ b/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc
@@ -1,11 +1,11 @@
// libpng_read_fuzzer.cc
-// Copyright 2017 Glenn Randers-Pehrson
+// Copyright 2017-2018 Glenn Randers-Pehrson
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that may
// be found in the LICENSE file https://cs.chromium.org/chromium/src/LICENSE
-// Last changed in libpng 1.6.32 [August 24, 2017]
+// Last changed in libpng 1.6.35 [July 15, 2018]
// The modifications in 2017 by Glenn Randers-Pehrson include
// 1. addition of a PNG_CLEANUP macro,
@@ -13,6 +13,7 @@
// 3. adding "#include <string.h>" which is needed on some platforms
// to provide memcpy().
// 4. adding read_end_info() and creating an end_info structure.
+// 5. adding calls to png_set_*() transforms commonly used by browsers.
#include <stddef.h>
#include <stdint.h>
@@ -67,7 +68,7 @@ struct PngObjectHandler {
}
};
-void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) {
+void user_read_data(png_structp png_ptr, png_bytep data, size_t length) {
BufState* buf_state = static_cast<BufState*>(png_get_io_ptr(png_ptr));
if (length > buf_state->bytes_left) {
png_error(png_ptr, "read error");
@@ -136,9 +137,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
// Reading.
png_read_info(png_handler.png_ptr, png_handler.info_ptr);
- png_handler.row_ptr = png_malloc(
- png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr,
- png_handler.info_ptr));
// reset error handler to put png_deleter into scope.
if (setjmp(png_jmpbuf(png_handler.png_ptr))) {
@@ -163,8 +161,20 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
return 0;
}
+ // Set several transforms that browsers typically use:
+ png_set_gray_to_rgb(png_handler.png_ptr);
+ png_set_expand(png_handler.png_ptr);
+ png_set_packing(png_handler.png_ptr);
+ png_set_scale_16(png_handler.png_ptr);
+ png_set_tRNS_to_alpha(png_handler.png_ptr);
+
int passes = png_set_interlace_handling(png_handler.png_ptr);
- png_start_read_image(png_handler.png_ptr);
+
+ png_read_update_info(png_handler.png_ptr, png_handler.info_ptr);
+
+ png_handler.row_ptr = png_malloc(
+ png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr,
+ png_handler.info_ptr));
for (int pass = 0; pass < passes; ++pass) {
for (png_uint_32 y = 0; y < height; ++y) {
diff --git a/libpng/contrib/oss-fuzz/newcc b/libpng/contrib/oss-fuzz/newcc
deleted file mode 100644
index 0fc9e206..00000000
--- a/libpng/contrib/oss-fuzz/newcc
+++ /dev/null
@@ -1,190 +0,0 @@
-
-// libpng_read_fuzzer.cc
-// Copyright 2017 Glenn Randers-Pehrson
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that may
-// be found in the LICENSE file https://cs.chromium.org/chromium/src/LICENSE
-
-// Last changed in libpng 1.6.33beta03 [September 27, 2017]
-
-// The modifications in 2017 by Glenn Randers-Pehrson include
-// 1. addition of a PNG_CLEANUP macro,
-// 2. setting the option to ignore ADLER32 checksums,
-// 3. adding "#include <string.h>" which is needed on some platforms
-// to provide memcpy().
-// 4. adding read_end_info() and creating an end_info structure.
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-
-#include <vector>
-
-#define PNG_INTERNAL
-#include "png.h"
-
-struct BufState {
- const uint8_t* data;
- size_t bytes_left;
-};
-
-struct PngObjectHandler {
- png_infop info_ptr = nullptr;
- png_structp png_ptr = nullptr;
- png_infop end_info_ptr = nullptr;
- png_voidp row_ptr = nullptr;
- BufState* buf_state = nullptr;
-
- ~PngObjectHandler() {
- if (row_ptr)
- png_free(png_ptr, row_ptr);
- if (end_info_ptr)
- png_destroy_read_struct(&png_ptr, &info_ptr, &end_info_ptr);
- else if (info_ptr)
- png_destroy_read_struct(&png_ptr, &info_ptr, nullptr);
- else
- png_destroy_read_struct(&png_ptr, nullptr, nullptr);
- delete buf_state;
- }
-};
-
-void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) {
- BufState* buf_state = static_cast<BufState*>(png_get_io_ptr(png_ptr));
- if (length > buf_state->bytes_left) {
- png_error(png_ptr, "read error");
- }
- memcpy(data, buf_state->data, length);
- buf_state->bytes_left -= length;
- buf_state->data += length;
-}
-
-static const int kPngHeaderSize = 8;
-
-// Entry point for LibFuzzer.
-// Roughly follows the libpng book example:
-// http://www.libpng.org/pub/png/book/chapter13.html
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- if (size < kPngHeaderSize) {
- return 0;
- }
-
- std::vector<unsigned char> v(data, data + size);
- if (png_sig_cmp(v.data(), 0, kPngHeaderSize)) {
- // not a PNG.
- return 0;
- }
-
- PngObjectHandler png_handler;
- png_handler.png_ptr = nullptr;
- png_handler.row_ptr = nullptr;
- png_handler.info_ptr = nullptr;
- png_handler.end_info_ptr = nullptr;
-
- png_handler.png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
- if (!png_handler.png_ptr) {
- return 0;
- }
-
-#define PNG_CLEANUP \
- if(png_handler.png_ptr) \
- { \
- if (png_handler.row_ptr) \
- png_free(png_handler.png_ptr, png_handler.row_ptr); \
- if (png_handler.end_info_ptr) \
- png_destroy_read_struct(&png_handler.png_ptr, &png_handler.info_ptr,\
- &png_handler.end_info_ptr); \
- else if (png_handler.info_ptr) \
- png_destroy_read_struct(&png_handler.png_ptr, &png_handler.info_ptr,\
- nullptr); \
- else \
- png_destroy_read_struct(&png_handler.png_ptr, nullptr, nullptr); \
- png_handler.png_ptr = nullptr; \
- png_handler.row_ptr = nullptr; \
- png_handler.info_ptr = nullptr; \
- png_handler.end_info_ptr = nullptr; \
- }
-
- png_handler.info_ptr = png_create_info_struct(png_handler.png_ptr);
- if (!png_handler.info_ptr) {
- PNG_CLEANUP
- return 0;
- }
-
- png_handler.end_info_ptr = png_create_info_struct(png_handler.png_ptr);
- if (!png_handler.end_info_ptr) {
- PNG_CLEANUP
- return 0;
- }
-
- /* Treat benign errors as warnings */
- png_set_benign_errors(png_handler.png_ptr, 1);
-
- png_set_crc_action(png_handler.png_ptr, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE);
-
-#ifdef PNG_IGNORE_ADLER32
- png_set_option(png_handler.png_ptr, PNG_IGNORE_ADLER32, PNG_OPTION_ON);
-#endif
-
- // Setting up reading from buffer.
- png_handler.buf_state = new BufState();
- png_handler.buf_state->data = data + kPngHeaderSize;
- png_handler.buf_state->bytes_left = size - kPngHeaderSize;
- png_set_read_fn(png_handler.png_ptr, png_handler.buf_state, user_read_data);
- png_set_sig_bytes(png_handler.png_ptr, kPngHeaderSize);
-
- if (setjmp(png_jmpbuf(png_handler.png_ptr))) {
- PNG_CLEANUP
- return 0;
- }
-
- // Reading.
- png_read_info(png_handler.png_ptr, png_handler.info_ptr);
- png_read_update_info(png_handler.png_ptr, png_handler.info_ptr);
- png_handler.row_ptr = png_malloc(
- png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr,
- png_handler.info_ptr));
-
- // reset error handler to put png_deleter into scope.
- if (setjmp(png_jmpbuf(png_handler.png_ptr))) {
- PNG_CLEANUP
- return 0;
- }
-
- png_uint_32 width, height;
- int bit_depth, color_type, interlace_type, compression_type;
- int filter_type;
-
- if (!png_get_IHDR(png_handler.png_ptr, png_handler.info_ptr, &width,
- &height, &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_type)) {
- PNG_CLEANUP
- return 0;
- }
-
- // This is going to be too slow.
- if (width && height > 100000000 / width) {
- PNG_CLEANUP
- return 0;
- }
-
- int passes = png_set_interlace_handling(png_handler.png_ptr);
- png_start_read_image(png_handler.png_ptr);
-
- /* To do: prevent the optimizer from removing this code entirely */
- for (int pass = 0; pass < passes; ++pass) {
- for (png_uint_32 y = 0; y < height; ++y) {
- png_read_row(png_handler.png_ptr,
- static_cast<png_bytep>(png_handler.row_ptr), nullptr);
- }
- }
-
- png_read_end(png_handler.png_ptr, png_handler.end_info_ptr);
-
- PNG_CLEANUP
-
- /* TO do: exercise the progressive reader here */
-
- return 0;
-}
diff --git a/libpng/contrib/pngminus/CHANGES.txt b/libpng/contrib/pngminus/CHANGES.txt
new file mode 100644
index 00000000..4e64e5ee
--- /dev/null
+++ b/libpng/contrib/pngminus/CHANGES.txt
@@ -0,0 +1,13 @@
+
+pnm2png / png2pnm --- conversion from PBM/PGM/PPM-file to PNG-file
+copyright (C) 1999-2019 by Willem van Schaik <willem at schaik dot com>
+
+version 1.0 - 1999.10.15 - First version.
+ 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
+ 1.2 - 2017.04.22 - Add buffer-size check
+ 1.3 - 2017.08.24 - Fix potential overflow in buffer-size check
+ (Glenn Randers-Pehrson)
+ 1.4 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse)
+ 1.5 - 2018.08.05 - Fix buffer overflow in tokenizer (Cosmin Truta)
+ 1.6 - 2018.08.05 - Improve portability and fix style (Cosmin Truta)
+ 1.7 - 2019.01.22 - Change license to MIT (Willem van Schaik)
diff --git a/libpng/contrib/pngminus/CMakeLists.txt b/libpng/contrib/pngminus/CMakeLists.txt
new file mode 100644
index 00000000..1f815a58
--- /dev/null
+++ b/libpng/contrib/pngminus/CMakeLists.txt
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.1)
+cmake_policy(VERSION 3.1)
+
+project(PNGMINUS C)
+
+option(PNGMINUS_USE_STATIC_LIBRARIES "Use the static library builds" ON)
+
+# libpng
+add_subdirectory(../.. libpng)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/libpng)
+if(PNGMINUS_USE_STATIC_LIBRARIES)
+ set(PNGMINUS_PNG_LIBRARY png_static)
+else()
+ set(PNGMINUS_PNG_LIBRARY png)
+endif()
+
+# png2pnm
+add_executable(png2pnm png2pnm.c)
+target_link_libraries(png2pnm ${PNGMINUS_PNG_LIBRARY})
+
+# pnm2png
+add_executable(pnm2png pnm2png.c)
+target_link_libraries(pnm2png ${PNGMINUS_PNG_LIBRARY})
diff --git a/libpng/contrib/pngminus/LICENSE.txt b/libpng/contrib/pngminus/LICENSE.txt
new file mode 100644
index 00000000..00878a9a
--- /dev/null
+++ b/libpng/contrib/pngminus/LICENSE.txt
@@ -0,0 +1,22 @@
+
+pnm2png / png2pnm --- conversion from PBM/PGM/PPM-file to PNG-file
+
+copyright (C) 1999-2019 by Willem van Schaik <willem at schaik dot com>
+
+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 copyight 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.
diff --git a/libpng/contrib/pngminus/Makefile b/libpng/contrib/pngminus/Makefile
new file mode 100644
index 00000000..4bba0796
--- /dev/null
+++ b/libpng/contrib/pngminus/Makefile
@@ -0,0 +1,62 @@
+# Makefile for PngMinus (png2pnm and pnm2png)
+# Linux / Unix
+
+#CC = cc
+CC = gcc
+LD = $(CC)
+
+RM = rm -f
+
+PNGINC = -I../..
+PNGLIB_SHARED = -L../.. -lpng
+PNGLIB_STATIC = ../../libpng.a
+
+# Uncomment the following if you have a custom zlib build at ../../../zlib
+#ZINC = -I../../../zlib
+#ZLIB_SHARED = -L../../../zlib -lz
+#ZLIB_STATIC = ../../../zlib/libz.a
+
+# Use the system zlib otherwise
+ZLIB_SHARED = -lz
+ZLIB_STATIC = -lz
+
+CPPFLAGS = $(PNGINC) $(ZINC)
+CFLAGS =
+LDFLAGS =
+LIBS_SHARED = $(PNGLIB_SHARED) $(ZLIB_SHARED)
+LIBS_STATIC = $(PNGLIB_STATIC) $(ZLIB_STATIC)
+
+EXEEXT =
+#EXEEXT = .exe
+
+# dependencies
+
+all: png2pnm$(EXEEXT) pnm2png$(EXEEXT) png2pnm-static$(EXEEXT) pnm2png-static$(EXEEXT)
+
+png2pnm.o: png2pnm.c
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm.c
+
+pnm2png.o: pnm2png.c
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png.c
+
+png2pnm$(EXEEXT): png2pnm.o
+ $(LD) $(LDFLAGS) -o png2pnm$(EXEEXT) png2pnm.o $(LIBS_SHARED) -lm
+
+pnm2png$(EXEEXT): pnm2png.o
+ $(LD) $(LDFLAGS) -o pnm2png$(EXEEXT) pnm2png.o $(LIBS_SHARED) -lm
+
+png2pnm-static$(EXEEXT): png2pnm.o
+ $(LD) $(LDFLAGS) -o png2pnm-static$(EXEEXT) png2pnm.o $(LIBS_STATIC) -lm
+
+pnm2png-static$(EXEEXT): pnm2png.o
+ $(LD) $(LDFLAGS) -o pnm2png-static$(EXEEXT) pnm2png.o $(LIBS_STATIC) -lm
+
+clean:
+ $(RM) png2pnm.o
+ $(RM) pnm2png.o
+ $(RM) png2pnm$(EXEEXT)
+ $(RM) pnm2png$(EXEEXT)
+ $(RM) png2pnm-static$(EXEEXT)
+ $(RM) pnm2png-static$(EXEEXT)
+
+# End of makefile for png2pnm / pnm2png
diff --git a/libpng/contrib/pngminus/README b/libpng/contrib/pngminus/README.txt
index fbcfc986..f7f6ecb3 100644
--- a/libpng/contrib/pngminus/README
+++ b/libpng/contrib/pngminus/README.txt
@@ -1,26 +1,16 @@
PngMinus
--------
-(copyright Willem van Schaik, 1999)
+(copyright Willem van Schaik, 1999-2019)
-License
--------
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and
-that both that copyright notice and this permission notice appear in
-supporting documentation. This software is provided "as is" without
-express or implied warranty.
-
Some history
------------
Soon after the creation of PNG in 1995, the need was felt for a set of
-pnmtopng / pngtopnm utilities. Independantly Alexander Lehmann and I
+pnmtopng / pngtopnm utilities. Independently Alexander Lehmann and I
(Willem van Schaik) started such a project. Luckily we discovered this
-and merged the two together into pnmtopng.tar.gz, which is available
-from a/o ftp://ftp.simplesystems.org/pub/libpng/png/.
+and merged the two, which later became part of NetPBM, available from
+SourceForge.
These two utilities have many, many options and make use of most of the
features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes
@@ -35,8 +25,8 @@ makes the whole setup a bit bulky. But that's unavoidable given the many
features of pnmtopng.
-What now
---------
+What now (1999)
+---------------
At this moment libpng is in a very stable state and can do much of the
work done in pnmtopng. Also, pnmtopng needs to be upgraded to the new
interface of libpng. Hence, it is time for a rewrite from the ground up
@@ -49,8 +39,8 @@ a small prototype that contains only the basic functionality. It doesn't
have any of the options to read or write special chunks and it will do
no gamma correction. But this makes it also a simple program that is
quite easy to understand and can serve well as a template for other
-software developments. (By now there are of course a couple of programs,
-like Greg Roelofs' rpng/wpng, that can be used just as good.)
+software developments. By now there are of course a couple of programs,
+like Greg Roelofs' rpng/wpng, that can be used just as good.
Can and can not
@@ -60,7 +50,8 @@ PngMinus. Because I started this development in good-old Turbo-C, I
avoided the use the netpbm library, which requires DOS extenders. Again,
another reason to call it PngMinus (minus netpbm :-). So, part of the
program are some elementary routines to read / write pgm- and ppm-files.
-It does not read b&w pbm-files.
+It does not handle B&W pbm-files, but instead you could do pgm with bit-
+depth 1.
The downside of this approach is that you can not use them on images
that require blocks of memory bigger than 64k (the DOS version). For
@@ -96,58 +87,34 @@ To list the options type "png2pnm -h" or "pnm2png -h".
Just like Scandinavian furniture
--------------------------------
-You have to put it together yourself. I did test the software under
-MS-DOS with Turbo-C 3.0 and under RedHat Linux 4.2 with gcc. In both
-cases I used libpng-1.0.4 and zlib-1.1.3. Later versions should be OK,
-however some older libpng versions have a bug in pngmem.c when using
-Turbo-C 3.0 (see below).
-
-You can build it using one of the two makefiles (make -f makefile.###)
-or use the batch/script files pngminus.bat / pngminus.sh. This assumes
-that you have built the libraries in ../libpng and ../zlib. Using Linux,
-make sure that you have built libpng with makefile.std and not
-makefile.linux (also called .lnx in earlier versions of libpng). The
-latter creates a .so shared-library, while the PngMinus makefile assumes
-a normal .a static library.
+You have to put it together yourself. I developed the software on MS-DOS
+with Turbo-C 3.0 and RedHat Linux 4.2 with gcc. In both cases I used
+libpng-1.0.4 and zlib-1.1.3. By now (2019) it is twenty years later and
+more current versions are OK.
+
+The makefile assumes that the libpng libraries can be found in ../.. and
+libz in ../../../zlib. But you can change this to for example ../libpng
+and ../zlib. The makefile creates two versions of each program, one with
+static library support and the other using shared libraries.
If you create a ../pngsuite directory and then store the basn####.png
files from PngSuite (http://www.schaik.com/pngsuite/) in there, you can
-test in one go the proper functioning of PngMinus, see png2pnm.bat and
-pnm2png.bat (or the .sh versions).
+test the proper functioning of PngMinus by running pngminus.sh.
Warranty
-------
Please, remember that this was just a small experiment to learn a few
-things. It will have many unforeseen features <vbg>. Who said bugs? Use
-it when you are in need for something simple or when you want to start
-developing your own stuff.
-
-
-The Turbo bug
--------------
-** pngmem.old
- hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
- hptr += 16L;
-** pngmem.c
- hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
- hptr = hptr + 16L;
-**
-
-** pngmem.old
- png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
- hptr += (png_uint_32)65536L;
-** pngmem.c
- png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
- hptr = hptr + 65536L;
-**
+things. It will have many unforeseen features <vbg> ... who said bugs? Use
+it when you are in need for something simple or when you want a starting
+point for developing your own stuff.
The end
-------
Willem van Schaik
-mailto:willem at schaik.com
+mailto:willem at schaik dot com
http://www.schaik.com/png/
--------
-Oct 1999
+
+Oct 1999, Jan 2019
diff --git a/libpng/contrib/pngminus/makefile.std b/libpng/contrib/pngminus/makefile.std
deleted file mode 100644
index 14e25cd6..00000000
--- a/libpng/contrib/pngminus/makefile.std
+++ /dev/null
@@ -1,66 +0,0 @@
-# Makefile for PngMinus (png2pnm and pnm2png)
-# Linux / Unix
-
-#CC=cc
-CC=gcc
-LD=$(CC)
-
-RM=rm -f
-
-#PNGPATH = /usr/local
-#PNGINC = -I$(PNGPATH)/include/libpng16
-#PNGLIB = -L$(PNGPATH)/lib -lpng16
-#PNGLIBS = $(PNGPATH)/lib/libpng16.a
-PNGINC = -I../..
-PNGLIB = -L../.. -lpng
-PNGLIBS = ../../libpng.a
-
-#ZPATH = /usr/local
-#ZINC = -I$(ZPATH)/include
-#ZLIB = -L$(ZPATH)/lib -lz
-#ZLIBS = $(ZPATH)/lib/libz.a
-ZINC = -I../../../zlib
-ZLIB = -L../../../zlib -lz
-ZLIBS = ../../../zlib/libz.a
-
-CPPFLAGS=$(PNGINC) $(ZINC)
-CFLAGS=
-LDLIBS=$(PNGLIB) $(ZLIB)
-LDLIBSS=$(PNGLIBS) $(ZLIBS)
-C=.c
-O=.o
-L=.a
-E=
-
-# dependencies
-
-#all: png2pnm$(E) pnm2png$(E)
-all: png2pnm$(E) pnm2png$(E) png2pnm-static$(E) pnm2png-static$(E)
-
-png2pnm$(O): png2pnm$(C)
- $(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm$(C)
-
-png2pnm$(E): png2pnm$(O)
- $(LD) $(LDFLAGS) -o png2pnm$(E) png2pnm$(O) $(LDLIBS) -lm
-
-png2pnm-static$(E): png2pnm$(O)
- $(LD) $(LDFLAGS) -o png2pnm-static$(E) png2pnm$(O) $(LDLIBSS) -lm
-
-pnm2png$(O): pnm2png$(C)
- $(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png$(C)
-
-pnm2png$(E): pnm2png$(O)
- $(LD) $(LDFLAGS) -o pnm2png$(E) pnm2png$(O) $(LDLIBS) -lm
-
-pnm2png-static$(E): pnm2png$(O)
- $(LD) $(LDFLAGS) -o pnm2png-static$(E) pnm2png$(O) $(LDLIBSS) -lm
-
-clean:
- $(RM) png2pnm$(O)
- $(RM) pnm2png$(O)
- $(RM) png2pnm$(E)
- $(RM) pnm2png$(E)
- $(RM) png2pnm-static$(E)
- $(RM) pnm2png-static$(E)
-
-# End of makefile for png2pnm / pnm2png
diff --git a/libpng/contrib/pngminus/makefile.tc3 b/libpng/contrib/pngminus/makefile.tc3
deleted file mode 100644
index 6a2f4b98..00000000
--- a/libpng/contrib/pngminus/makefile.tc3
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile for PngMinus (png2pnm and pnm2png)
-# TurboC++ 3.0
-
-CC=tcc -Ic:\tc3\inc
-LD=tcc -Lc:\tc3\lib
-LB=tlib
-RM=del
-CP=copy
-MODEL=l
-CPPFLAGS=-I..\libpng -I..\zlib
-CFLAGS=-O -m$(MODEL)
-LDFLAGS=-m$(MODEL) -L..\libpng -L..\zlib
-C=.c
-O=.obj
-L=.lib
-E=.exe
-
-# dependencies
-
-all: png2pnm$(E) pnm2png$(E)
-
-png2pnm$(O): png2pnm$(C)
- $(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm$(C)
-
-png2pnm$(E): png2pnm$(O)
- $(LD) $(LDFLAGS) png2pnm$(O) libpng$(L) zlib$(L)
-
-pnm2png$(O): pnm2png$(C)
- $(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png$(C)
-
-pnm2png$(E): pnm2png$(O)
- $(LD) $(LDFLAGS) pnm2png$(O) libpng$(L) zlib$(L)
-
-clean:
- $(RM) *$(O)
- $(RM) *$(E)
-
-# End of makefile for png2pnm / pnm2png
diff --git a/libpng/contrib/pngminus/png2pnm.bat b/libpng/contrib/pngminus/png2pnm.bat
index 449cf367..a2798c34 100755
--- a/libpng/contrib/pngminus/png2pnm.bat
+++ b/libpng/contrib/pngminus/png2pnm.bat
@@ -7,7 +7,7 @@ png2pnm.exe -noraw ..\pngsuite\basn0g16.png basn0g16.pgm
REM -- full-color
png2pnm.exe -noraw ..\pngsuite\basn2c08.png basn2c08.ppm
png2pnm.exe -noraw ..\pngsuite\basn2c16.png basn2c16.ppm
-REM -- palletted
+REM -- paletted
png2pnm.exe -noraw ..\pngsuite\basn3p01.png basn3p01.ppm
png2pnm.exe -noraw ..\pngsuite\basn3p02.png basn3p02.ppm
png2pnm.exe -noraw ..\pngsuite\basn3p04.png basn3p04.ppm
@@ -27,7 +27,7 @@ png2pnm.exe -raw ..\pngsuite\basn0g16.png rawn0g16.pgm
REM -- full-color
png2pnm.exe -raw ..\pngsuite\basn2c08.png rawn2c08.ppm
png2pnm.exe -raw ..\pngsuite\basn2c16.png rawn2c16.ppm
-REM -- palletted
+REM -- paletted
png2pnm.exe -raw ..\pngsuite\basn3p01.png rawn3p01.ppm
png2pnm.exe -raw ..\pngsuite\basn3p02.png rawn3p02.ppm
png2pnm.exe -raw ..\pngsuite\basn3p04.png rawn3p04.ppm
diff --git a/libpng/contrib/pngminus/png2pnm.c b/libpng/contrib/pngminus/png2pnm.c
index 1420a783..5fef7ed1 100644
--- a/libpng/contrib/pngminus/png2pnm.c
+++ b/libpng/contrib/pngminus/png2pnm.c
@@ -1,28 +1,14 @@
/*
* png2pnm.c --- conversion from PNG-file to PGM/PPM-file
- * copyright (C) 1999,2017 by Willem van Schaik <willem at schaik.com>
+ * copyright (C) 1999-2019 by Willem van Schaik <willem at schaik dot com>
*
- * version 1.0 - 1999.10.15 - First version.
- * 1.1 - 2017.04.22 - Add buffer-size check (Glenn Randers-Pehrson)
- * 1.2 - 2017.08.24 - Fix potential overflow in buffer-size check
- * (Glenn Randers-Pehrson)
- * 1.3 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse)
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear in
- * supporting documentation. This software is provided "as is" without
- * express or implied warranty.
+ * This software is released under the MIT license. For conditions of
+ * distribution and use, see the LICENSE file part of this package.
*/
#include <stdio.h>
#include <stdlib.h>
-#ifdef __TURBOC__
-#include <mem.h>
#include <fcntl.h>
-#endif
-#include <zlib.h>
#ifndef BOOL
#define BOOL unsigned char
@@ -34,45 +20,25 @@
#define FALSE (BOOL) 0
#endif
-#ifdef __TURBOC__
-#define STDIN 0
-#define STDOUT 1
-#define STDERR 2
-#endif
-
-/* to make png2pnm verbose so we can find problems (needs to be before png.h) */
+/* make png2pnm verbose so we can find problems (needs to be before png.h) */
#ifndef PNG_DEBUG
#define PNG_DEBUG 0
#endif
-
#include "png.h"
-/* 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
-
-#ifndef PNGMINUS_UNUSED
-/* Unused formal parameter warnings are silenced using the following macro
- * which is expected to have no bad effects on performance (optimizing
- * compilers will probably remove it entirely).
- */
-# define PNGMINUS_UNUSED(param) (void)param
-#endif
-
/* function prototypes */
-int main (int argc, char *argv[]);
+int main (int argc, char *argv[]);
void usage ();
-BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw,
- BOOL alpha);
+BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
+ BOOL raw, BOOL alpha);
/*
* main
*/
-int main(int argc, char *argv[])
+int main (int argc, char *argv[])
{
FILE *fp_rd = stdin;
FILE *fp_wr = stdout;
@@ -99,21 +65,21 @@ int main(int argc, char *argv[])
if ((fp_al = fopen (argv[argi], "wb")) == NULL)
{
fprintf (stderr, "PNM2PNG\n");
- fprintf (stderr, "Error: can not create alpha-channel file %s\n",
- argv[argi]);
+ fprintf (stderr, "Error: cannot create alpha-channel file %s\n",
+ argv[argi]);
exit (1);
}
break;
case 'h':
case '?':
- usage();
- exit(0);
+ usage ();
+ exit (0);
break;
default:
fprintf (stderr, "PNG2PNM\n");
fprintf (stderr, "Error: unknown option %s\n", argv[argi]);
- usage();
- exit(1);
+ usage ();
+ exit (1);
break;
} /* end switch */
}
@@ -121,9 +87,9 @@ int main(int argc, char *argv[])
{
if ((fp_rd = fopen (argv[argi], "rb")) == NULL)
{
- fprintf (stderr, "PNG2PNM\n");
- fprintf (stderr, "Error: file %s does not exist\n", argv[argi]);
- exit (1);
+ fprintf (stderr, "PNG2PNM\n");
+ fprintf (stderr, "Error: file %s does not exist\n", argv[argi]);
+ exit (1);
}
}
else if (fp_wr == stdout)
@@ -131,7 +97,7 @@ int main(int argc, char *argv[])
if ((fp_wr = fopen (argv[argi], "wb")) == NULL)
{
fprintf (stderr, "PNG2PNM\n");
- fprintf (stderr, "Error: can not create file %s\n", argv[argi]);
+ fprintf (stderr, "Error: cannot create file %s\n", argv[argi]);
exit (1);
}
}
@@ -139,21 +105,17 @@ int main(int argc, char *argv[])
{
fprintf (stderr, "PNG2PNM\n");
fprintf (stderr, "Error: too many parameters\n");
- usage();
- exit(1);
+ usage ();
+ exit (1);
}
} /* end for */
-#ifdef __TURBOC__
+#if defined(O_BINARY) && (O_BINARY != 0)
/* set stdin/stdout if required to binary */
if (fp_rd == stdin)
- {
- setmode (STDIN, O_BINARY);
- }
+ setmode (fileno (stdin), O_BINARY);
if ((raw) && (fp_wr == stdout))
- {
- setmode (STDOUT, O_BINARY);
- }
+ setmode (fileno (stdout), O_BINARY);
#endif
/* call the conversion program itself */
@@ -161,7 +123,7 @@ int main(int argc, char *argv[])
{
fprintf (stderr, "PNG2PNM\n");
fprintf (stderr, "Error: unsuccessful conversion of PNG-image\n");
- exit(1);
+ exit (1);
}
/* close input file */
@@ -179,23 +141,18 @@ int main(int argc, char *argv[])
* usage
*/
-void usage()
+void usage ()
{
fprintf (stderr, "PNG2PNM\n");
fprintf (stderr, " by Willem van Schaik, 1999\n");
-#ifdef __TURBOC__
- fprintf (stderr, " for Turbo-C and Borland-C compilers\n");
-#else
- fprintf (stderr, " for Linux (and Unix) compilers\n");
-#endif
fprintf (stderr, "Usage: png2pnm [options] <file>.png [<file>.pnm]\n");
fprintf (stderr, " or: ... | png2pnm [options]\n");
fprintf (stderr, "Options:\n");
fprintf (stderr,
- " -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n");
+ " -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n");
fprintf (stderr, " -n[oraw] write pnm-file in ascii format (P1/P2/P3)\n");
fprintf (stderr,
- " -a[lpha] <file>.pgm write PNG alpha channel as pgm-file\n");
+ " -a[lpha] <file>.pgm write PNG alpha channel as pgm-file\n");
fprintf (stderr, " -h | -? print this help-information\n");
}
@@ -204,10 +161,10 @@ void usage()
*/
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
- volatile BOOL raw, BOOL alpha)
+ BOOL raw, BOOL alpha)
{
png_struct *png_ptr = NULL;
- png_info *info_ptr = NULL;
+ png_info *info_ptr = NULL;
png_byte buf[8];
png_byte *png_pixels = NULL;
png_byte **row_pointers = NULL;
@@ -231,24 +188,24 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
return FALSE;
ret = png_sig_cmp (buf, 0, 8);
- if (ret)
+ if (ret != 0)
return FALSE;
/* create png and info structures */
png_ptr = png_create_read_struct (png_get_libpng_ver(NULL),
- NULL, NULL, NULL);
+ NULL, NULL, NULL);
if (!png_ptr)
- return FALSE; /* out of memory */
+ return FALSE; /* out of memory */
info_ptr = png_create_info_struct (png_ptr);
if (!info_ptr)
{
png_destroy_read_struct (&png_ptr, NULL, NULL);
- return FALSE; /* out of memory */
+ return FALSE; /* out of memory */
}
- if (setjmp (png_jmpbuf(png_ptr)))
+ if (setjmp (png_jmpbuf (png_ptr)))
{
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
return FALSE;
@@ -256,15 +213,14 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* set up the input control for C streams */
png_init_io (png_ptr, png_file);
- png_set_sig_bytes (png_ptr, 8); /* we already read the 8 signature bytes */
+ png_set_sig_bytes (png_ptr, 8); /* we already read the 8 signature bytes */
/* read the file information */
png_read_info (png_ptr, info_ptr);
/* get size and bit-depth of the PNG-image */
- png_get_IHDR (png_ptr, info_ptr,
- &width, &height, &bit_depth, &color_type,
- NULL, NULL, NULL);
+ png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
+ NULL, NULL, NULL);
/* set-up the transformations */
@@ -284,7 +240,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
png_set_strip_16 (png_ptr);
/* transform grayscale images into full-color */
if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb (png_ptr);
/* only if file has a file gamma, we do a correction */
if (png_get_gAMA (png_ptr, info_ptr, &file_gamma))
@@ -298,14 +254,14 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* get the new color-type and bit-depth (after expansion/stripping) */
png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
- NULL, NULL, NULL);
+ NULL, NULL, NULL);
/* check for 16-bit files */
if (bit_depth == 16)
{
raw = FALSE;
-#ifdef __TURBOC__
- pnm_file->flags &= ~((unsigned) _F_BIN);
+#if defined(O_BINARY) && (O_BINARY != 0)
+ setmode (fileno (pnm_file), O_BINARY);
#endif
}
@@ -333,25 +289,25 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* row_bytes is the width x number of channels x (bit-depth / 8) */
row_bytes = png_get_rowbytes (png_ptr, info_ptr);
- if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes))
+ if ((row_bytes == 0) ||
+ ((size_t) height > (size_t) (-1) / (size_t) row_bytes))
{
- /* too big */
+ /* too big */
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
return FALSE;
}
if ((png_pixels = (png_byte *)
- malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL)
+ malloc ((size_t) row_bytes * (size_t) height)) == NULL)
{
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
return FALSE;
}
if ((row_pointers = (png_byte **)
- malloc ((size_t)height * sizeof (png_bytep))) == NULL)
+ malloc ((size_t) height * sizeof (png_byte *))) == NULL)
{
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
free (png_pixels);
- png_pixels = NULL;
return FALSE;
}
@@ -366,7 +322,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
png_read_end (png_ptr, info_ptr);
/* clean up after the read, and free any memory allocated - REQUIRED */
- png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp) NULL);
+ png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
/* write header of PNM file */
@@ -406,14 +362,21 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
for (i = 0; i < (channels - alpha_present); i++)
{
if (raw)
- fputc ((int) *pix_ptr++ , pnm_file);
+ {
+ fputc ((int) *pix_ptr++, pnm_file);
+ }
else
- if (bit_depth == 16){
+ {
+ if (bit_depth == 16)
+ {
dep_16 = (long) *pix_ptr++;
fprintf (pnm_file, "%ld ", (dep_16 << 8) + ((long) *pix_ptr++));
}
else
+ {
fprintf (pnm_file, "%ld ", (long) *pix_ptr++);
+ }
+ }
}
if (alpha_present)
{
@@ -426,17 +389,23 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
else /* output alpha-channel as pgm file */
{
if (raw)
- fputc ((int) *pix_ptr++ , alpha_file);
+ {
+ fputc ((int) *pix_ptr++, alpha_file);
+ }
else
+ {
if (bit_depth == 16)
{
dep_16 = (long) *pix_ptr++;
fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++);
}
else
+ {
fprintf (alpha_file, "%ld ", (long) *pix_ptr++);
+ }
+ }
}
- } /* if alpha_present */
+ } /* end if alpha_present */
if (!raw)
if (col % 4 == 3)
@@ -448,13 +417,11 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
fprintf (pnm_file, "\n");
} /* end for row */
- if (row_pointers != (unsigned char**) NULL)
+ if (row_pointers != NULL)
free (row_pointers);
- if (png_pixels != (unsigned char*) NULL)
+ if (png_pixels != NULL)
free (png_pixels);
- PNGMINUS_UNUSED(raw); /* to quiet a Coverity defect */
return TRUE;
} /* end of source */
-
diff --git a/libpng/contrib/pngminus/png2pnm.sh b/libpng/contrib/pngminus/png2pnm.sh
index b1c05370..756126a5 100755
--- a/libpng/contrib/pngminus/png2pnm.sh
+++ b/libpng/contrib/pngminus/png2pnm.sh
@@ -8,7 +8,7 @@
# -- full-color
./png2pnm -noraw ../pngsuite/basn2c08.png basn2c08.ppm
./png2pnm -noraw ../pngsuite/basn2c16.png basn2c16.ppm
-# -- palletted
+# -- paletted
./png2pnm -noraw ../pngsuite/basn3p01.png basn3p01.ppm
./png2pnm -noraw ../pngsuite/basn3p02.png basn3p02.ppm
./png2pnm -noraw ../pngsuite/basn3p04.png basn3p04.ppm
@@ -28,7 +28,7 @@
# -- full-color
./png2pnm -raw ../pngsuite/basn2c08.png rawn2c08.ppm
./png2pnm -raw ../pngsuite/basn2c16.png rawn2c16.ppm
-# -- palletted
+# -- paletted
./png2pnm -raw ../pngsuite/basn3p01.png rawn3p01.ppm
./png2pnm -raw ../pngsuite/basn3p02.png rawn3p02.ppm
./png2pnm -raw ../pngsuite/basn3p04.png rawn3p04.ppm
diff --git a/libpng/contrib/pngminus/pngminus.bat b/libpng/contrib/pngminus/pngminus.bat
index 911bb8df..fa60e7de 100755
--- a/libpng/contrib/pngminus/pngminus.bat
+++ b/libpng/contrib/pngminus/pngminus.bat
@@ -1,4 +1,4 @@
-make -f makefile.tc3
+make
call png2pnm.bat
call pnm2png.bat
diff --git a/libpng/contrib/pngminus/pngminus.sh b/libpng/contrib/pngminus/pngminus.sh
index 2a0a9d8f..cc9b4a56 100755
--- a/libpng/contrib/pngminus/pngminus.sh
+++ b/libpng/contrib/pngminus/pngminus.sh
@@ -1,5 +1,5 @@
#!/bin/sh
-make -f makefile.std
+make
sh png2pnm.sh
sh pnm2png.sh
diff --git a/libpng/contrib/pngminus/pnm2png.bat b/libpng/contrib/pngminus/pnm2png.bat
index f756cb84..c02b80be 100755
--- a/libpng/contrib/pngminus/pnm2png.bat
+++ b/libpng/contrib/pngminus/pnm2png.bat
@@ -7,7 +7,7 @@ pnm2png.exe basn0g16.pgm basn0g16.png
REM -- full-color
pnm2png.exe basn2c08.ppm basn2c08.png
pnm2png.exe basn2c16.ppm basn2c16.png
-REM -- palletted
+REM -- paletted
pnm2png.exe basn3p01.ppm basn3p01.png
pnm2png.exe basn3p02.ppm basn3p02.png
pnm2png.exe basn3p04.ppm basn3p04.png
@@ -27,7 +27,7 @@ pnm2png.exe rawn0g16.pgm rawn0g16.png
REM -- full-color
pnm2png.exe rawn2c08.ppm rawn2c08.png
pnm2png.exe rawn2c16.ppm rawn2c16.png
-REM -- palletted
+REM -- paletted
pnm2png.exe rawn3p01.ppm rawn3p01.png
pnm2png.exe rawn3p02.ppm rawn3p02.png
pnm2png.exe rawn3p04.ppm rawn3p04.png
diff --git a/libpng/contrib/pngminus/pnm2png.c b/libpng/contrib/pngminus/pnm2png.c
index 0d2caef9..a2c2551d 100644
--- a/libpng/contrib/pngminus/pnm2png.c
+++ b/libpng/contrib/pngminus/pnm2png.c
@@ -1,29 +1,14 @@
/*
* pnm2png.c --- conversion from PBM/PGM/PPM-file to PNG-file
- * copyright (C) 1999,2015,2017 by Willem van Schaik <willem at schaik.com>
+ * copyright (C) 1999-2019 by Willem van Schaik <willem at schaik dot com>
*
- * version 1.0 - 1999.10.15 - First version.
- * version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
- * version 1.2 - 2017.04.22 - Add buffer-size check
- * 1.3 - 2017.08.24 - Fix potential overflow in buffer-size check
- * (Glenn Randers-Pehrson)
- * 1.4 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse)
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear in
- * supporting documentation. This software is provided "as is" without
- * express or implied warranty.
+ * This software is released under the MIT license. For conditions of
+ * distribution and use, see the LICENSE file part of this package.
*/
#include <stdio.h>
#include <stdlib.h>
-#ifdef __TURBOC__
-#include <mem.h>
#include <fcntl.h>
-#endif
-#include <zlib.h>
#ifndef BOOL
#define BOOL unsigned char
@@ -35,38 +20,20 @@
#define FALSE (BOOL) 0
#endif
-#define STDIN 0
-#define STDOUT 1
-#define STDERR 2
-
-/* to make pnm2png verbose so we can find problems (needs to be before png.h) */
+/* make pnm2png verbose so we can find problems (needs to be before png.h) */
#ifndef PNG_DEBUG
#define PNG_DEBUG 0
#endif
#include "png.h"
-/* 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
-
-#ifndef PNGMINUS_UNUSED
-/* Unused formal parameter warnings are silenced using the following macro
- * which is expected to have no bad effects on performance (optimizing
- * compilers will probably remove it entirely).
- */
-# define PNGMINUS_UNUSED(param) (void)param
-#endif
-
-
/* function prototypes */
-int main (int argc, char *argv[]);
+int main (int argc, char *argv[]);
void usage ();
-BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
- BOOL alpha);
-void get_token(FILE *pnm_file, char *token);
+BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file,
+ BOOL interlace, BOOL alpha);
+void get_token (FILE *pnm_file, char *token_buf, size_t token_buf_size);
png_uint_32 get_data (FILE *pnm_file, int depth);
png_uint_32 get_value (FILE *pnm_file, int depth);
@@ -74,7 +41,7 @@ png_uint_32 get_value (FILE *pnm_file, int depth);
* main
*/
-int main(int argc, char *argv[])
+int main (int argc, char *argv[])
{
FILE *fp_rd = stdin;
FILE *fp_al = NULL;
@@ -99,20 +66,20 @@ int main(int argc, char *argv[])
{
fprintf (stderr, "PNM2PNG\n");
fprintf (stderr, "Error: alpha-channel file %s does not exist\n",
- argv[argi]);
+ argv[argi]);
exit (1);
}
break;
case 'h':
case '?':
- usage();
- exit(0);
+ usage ();
+ exit (0);
break;
default:
fprintf (stderr, "PNM2PNG\n");
fprintf (stderr, "Error: unknown option %s\n", argv[argi]);
- usage();
- exit(1);
+ usage ();
+ exit (1);
break;
} /* end switch */
}
@@ -130,7 +97,7 @@ int main(int argc, char *argv[])
if ((fp_wr = fopen (argv[argi], "wb")) == NULL)
{
fprintf (stderr, "PNM2PNG\n");
- fprintf (stderr, "Error: can not create PNG-file %s\n", argv[argi]);
+ fprintf (stderr, "Error: cannot create PNG-file %s\n", argv[argi]);
exit (1);
}
}
@@ -138,21 +105,19 @@ int main(int argc, char *argv[])
{
fprintf (stderr, "PNM2PNG\n");
fprintf (stderr, "Error: too many parameters\n");
- usage();
+ usage ();
exit (1);
}
} /* end for */
-#ifdef __TURBOC__
- /* set stdin/stdout to binary, we're reading the PNM always! in binary format */
+#if defined(O_BINARY) && (O_BINARY != 0)
+ /* set stdin/stdout to binary,
+ * we're reading the PNM always! in binary format
+ */
if (fp_rd == stdin)
- {
- setmode (STDIN, O_BINARY);
- }
+ setmode (fileno (stdin), O_BINARY);
if (fp_wr == stdout)
- {
- setmode (STDOUT, O_BINARY);
- }
+ setmode (fileno (stdout), O_BINARY);
#endif
/* call the conversion program itself */
@@ -178,15 +143,10 @@ int main(int argc, char *argv[])
* usage
*/
-void usage()
+void usage ()
{
fprintf (stderr, "PNM2PNG\n");
fprintf (stderr, " by Willem van Schaik, 1999\n");
-#ifdef __TURBOC__
- fprintf (stderr, " for Turbo-C and Borland-C compilers\n");
-#else
- fprintf (stderr, " for Linux (and Unix) compilers\n");
-#endif
fprintf (stderr, "Usage: pnm2png [options] <file>.<pnm> [<file>.png]\n");
fprintf (stderr, " or: ... | pnm2png [options]\n");
fprintf (stderr, "Options:\n");
@@ -200,31 +160,31 @@ void usage()
* pnm2png
*/
-BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
- BOOL alpha)
+BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file,
+ BOOL interlace, BOOL alpha)
{
png_struct *png_ptr = NULL;
png_info *info_ptr = NULL;
png_byte *png_pixels = NULL;
png_byte **row_pointers = NULL;
png_byte *pix_ptr = NULL;
- volatile png_uint_32 row_bytes;
+ volatile png_uint_32 row_bytes;
char type_token[16];
char width_token[16];
char height_token[16];
char maxval_token[16];
- volatile int color_type=1;
- unsigned long ul_width=0, ul_alpha_width=0;
- unsigned long ul_height=0, ul_alpha_height=0;
- unsigned long ul_maxval=0;
- volatile png_uint_32 width=0, height=0;
- volatile png_uint_32 alpha_width=0, alpha_height=0;
+ volatile int color_type = 1;
+ unsigned long ul_width = 0, ul_alpha_width = 0;
+ unsigned long ul_height = 0, ul_alpha_height = 0;
+ unsigned long ul_maxval = 0;
+ volatile png_uint_32 width = 0, height = 0;
+ volatile png_uint_32 alpha_width = 0, alpha_height = 0;
png_uint_32 maxval;
- volatile int bit_depth = 0;
- int channels=0;
+ volatile int bit_depth = 0;
+ int channels = 0;
int alpha_depth = 0;
- int alpha_present=0;
+ int alpha_present = 0;
int row, col;
BOOL raw, alpha_raw = FALSE;
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
@@ -235,7 +195,7 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
/* read header of PNM file */
- get_token(pnm_file, type_token);
+ get_token (pnm_file, type_token, sizeof (type_token));
if (type_token[0] != 'P')
{
return FALSE;
@@ -245,30 +205,31 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
raw = (type_token[1] == '4');
color_type = PNG_COLOR_TYPE_GRAY;
- get_token(pnm_file, width_token);
+ get_token (pnm_file, width_token, sizeof (width_token));
sscanf (width_token, "%lu", &ul_width);
width = (png_uint_32) ul_width;
- get_token(pnm_file, height_token);
+ get_token (pnm_file, height_token, sizeof (height_token));
sscanf (height_token, "%lu", &ul_height);
height = (png_uint_32) ul_height;
bit_depth = 1;
packed_bitmap = TRUE;
#else
- fprintf (stderr, "PNM2PNG built without PNG_WRITE_INVERT_SUPPORTED and \n");
+ fprintf (stderr, "PNM2PNG built without PNG_WRITE_INVERT_SUPPORTED and\n");
fprintf (stderr, "PNG_WRITE_PACK_SUPPORTED can't read PBM (P1,P4) files\n");
+ return FALSE;
#endif
}
else if ((type_token[1] == '2') || (type_token[1] == '5'))
{
raw = (type_token[1] == '5');
color_type = PNG_COLOR_TYPE_GRAY;
- get_token(pnm_file, width_token);
+ get_token (pnm_file, width_token, sizeof (width_token));
sscanf (width_token, "%lu", &ul_width);
width = (png_uint_32) ul_width;
- get_token(pnm_file, height_token);
+ get_token (pnm_file, height_token, sizeof (height_token));
sscanf (height_token, "%lu", &ul_height);
height = (png_uint_32) ul_height;
- get_token(pnm_file, maxval_token);
+ get_token (pnm_file, maxval_token, sizeof (maxval_token));
sscanf (maxval_token, "%lu", &ul_maxval);
maxval = (png_uint_32) ul_maxval;
@@ -280,20 +241,22 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
bit_depth = 4;
else if (maxval <= 255)
bit_depth = 8;
- else /* if (maxval <= 65535) */
+ else if (maxval <= 65535U)
bit_depth = 16;
+ else /* maxval > 65535U */
+ return FALSE;
}
else if ((type_token[1] == '3') || (type_token[1] == '6'))
{
raw = (type_token[1] == '6');
color_type = PNG_COLOR_TYPE_RGB;
- get_token(pnm_file, width_token);
+ get_token (pnm_file, width_token, sizeof (width_token));
sscanf (width_token, "%lu", &ul_width);
width = (png_uint_32) ul_width;
- get_token(pnm_file, height_token);
+ get_token (pnm_file, height_token, sizeof (height_token));
sscanf (height_token, "%lu", &ul_height);
height = (png_uint_32) ul_height;
- get_token(pnm_file, maxval_token);
+ get_token (pnm_file, maxval_token, sizeof (maxval_token));
sscanf (maxval_token, "%lu", &ul_maxval);
maxval = (png_uint_32) ul_maxval;
if (maxval <= 1)
@@ -304,8 +267,10 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
bit_depth = 4;
else if (maxval <= 255)
bit_depth = 8;
- else /* if (maxval <= 65535) */
+ else if (maxval <= 65535U)
bit_depth = 16;
+ else /* maxval > 65535U */
+ return FALSE;
}
else
{
@@ -321,7 +286,7 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
if (color_type == PNG_COLOR_TYPE_RGB)
color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- get_token(alpha_file, type_token);
+ get_token (alpha_file, type_token, sizeof (type_token));
if (type_token[0] != 'P')
{
return FALSE;
@@ -329,17 +294,17 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
else if ((type_token[1] == '2') || (type_token[1] == '5'))
{
alpha_raw = (type_token[1] == '5');
- get_token(alpha_file, width_token);
+ get_token (alpha_file, width_token, sizeof (width_token));
sscanf (width_token, "%lu", &ul_alpha_width);
- alpha_width=(png_uint_32) ul_alpha_width;
+ alpha_width = (png_uint_32) ul_alpha_width;
if (alpha_width != width)
return FALSE;
- get_token(alpha_file, height_token);
+ get_token (alpha_file, height_token, sizeof (height_token));
sscanf (height_token, "%lu", &ul_alpha_height);
alpha_height = (png_uint_32) ul_alpha_height;
if (alpha_height != height)
return FALSE;
- get_token(alpha_file, maxval_token);
+ get_token (alpha_file, maxval_token, sizeof (maxval_token));
sscanf (maxval_token, "%lu", &ul_maxval);
maxval = (png_uint_32) ul_maxval;
if (maxval <= 1)
@@ -350,8 +315,10 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
alpha_depth = 4;
else if (maxval <= 255)
alpha_depth = 8;
- else /* if (maxval <= 65535) */
+ else if (maxval <= 65535U)
alpha_depth = 16;
+ else /* maxval > 65535U */
+ return FALSE;
if (alpha_depth != bit_depth)
return FALSE;
}
@@ -379,21 +346,29 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
if (packed_bitmap)
+ {
/* row data is as many bytes as can fit width x channels x bit_depth */
row_bytes = (width * channels * bit_depth + 7) / 8;
+ }
else
#endif
- /* row_bytes is the width x number of channels x (bit-depth / 8) */
+ {
+ /* row_bytes is the width x number of channels x (bit-depth / 8) */
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
+ }
- if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes))
+ if ((row_bytes == 0) ||
+ ((size_t) height > (size_t) (-1) / (size_t) row_bytes))
{
- /* too big */
+ /* too big */
return FALSE;
}
if ((png_pixels = (png_byte *)
- malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL)
+ malloc ((size_t) row_bytes * (size_t) height)) == NULL)
+ {
+ /* out of memory */
return FALSE;
+ }
/* read data from PNM file */
pix_ptr = png_pixels;
@@ -404,9 +379,12 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
if (packed_bitmap)
{
for (i = 0; i < (int) row_bytes; i++)
+ {
/* png supports this format natively so no conversion is needed */
*pix_ptr++ = get_data (pnm_file, 8);
- } else
+ }
+ }
+ else
#endif
{
for (col = 0; col < (int) width; col++)
@@ -414,10 +392,15 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
for (i = 0; i < (channels - alpha_present); i++)
{
if (raw)
+ {
*pix_ptr++ = get_data (pnm_file, bit_depth);
+ }
else
+ {
if (bit_depth <= 8)
+ {
*pix_ptr++ = get_value (pnm_file, bit_depth);
+ }
else
{
tmp16 = get_value (pnm_file, bit_depth);
@@ -426,41 +409,46 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
*pix_ptr = (png_byte) (tmp16 & 0xFF);
pix_ptr++;
}
+ }
}
if (alpha) /* read alpha-channel from pgm file */
{
if (alpha_raw)
+ {
*pix_ptr++ = get_data (alpha_file, alpha_depth);
+ }
else
+ {
if (alpha_depth <= 8)
+ {
*pix_ptr++ = get_value (alpha_file, bit_depth);
+ }
else
{
tmp16 = get_value (alpha_file, bit_depth);
*pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF);
*pix_ptr++ = (png_byte) (tmp16 & 0xFF);
}
- } /* if alpha */
- } /* if packed_bitmap */
+ }
+ } /* end if alpha */
+ } /* end if packed_bitmap */
} /* end for col */
} /* end for row */
/* prepare the standard PNG structures */
- png_ptr = png_create_write_struct (png_get_libpng_ver(NULL), NULL, NULL,
- NULL);
+ png_ptr = png_create_write_struct (png_get_libpng_ver(NULL),
+ NULL, NULL, NULL);
if (!png_ptr)
{
free (png_pixels);
- png_pixels = NULL;
return FALSE;
}
info_ptr = png_create_info_struct (png_ptr);
if (!info_ptr)
{
- png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
+ png_destroy_write_struct (&png_ptr, NULL);
free (png_pixels);
- png_pixels = NULL;
return FALSE;
}
@@ -472,12 +460,10 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
}
#endif
- /* setjmp() must be called in every function that calls a PNG-reading libpng function */
- if (setjmp (png_jmpbuf(png_ptr)))
+ if (setjmp (png_jmpbuf (png_ptr)))
{
png_destroy_write_struct (&png_ptr, &info_ptr);
free (png_pixels);
- png_pixels = NULL;
return FALSE;
}
@@ -486,21 +472,20 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
/* we're going to write more or less the same PNG as the input file */
png_set_IHDR (png_ptr, info_ptr, width, height, bit_depth, color_type,
- (!interlace) ? PNG_INTERLACE_NONE : PNG_INTERLACE_ADAM7,
- PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
+ (!interlace) ? PNG_INTERLACE_NONE : PNG_INTERLACE_ADAM7,
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
/* write the file header information */
png_write_info (png_ptr, info_ptr);
/* if needed we will allocate memory for an new array of row-pointers */
- if (row_pointers == (unsigned char**) NULL)
+ if (row_pointers == NULL)
{
if ((row_pointers = (png_byte **)
- malloc (height * sizeof (png_bytep))) == NULL)
+ malloc (height * sizeof (png_byte *))) == NULL)
{
png_destroy_write_struct (&png_ptr, &info_ptr);
free (png_pixels);
- png_pixels = NULL;
return FALSE;
}
}
@@ -518,62 +503,60 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
/* clean up after the write, and free any memory allocated */
png_destroy_write_struct (&png_ptr, &info_ptr);
- if (row_pointers != (unsigned char**) NULL)
+ if (row_pointers != NULL)
free (row_pointers);
- if (png_pixels != (unsigned char*) NULL)
+ if (png_pixels != NULL)
free (png_pixels);
- PNGMINUS_UNUSED(raw); /* Quiet a Coverity defect */
-
return TRUE;
} /* end of pnm2png */
/*
- * get_token() - gets the first string after whitespace
+ * get_token - gets the first string after whitespace
*/
-void get_token(FILE *pnm_file, char *token)
+void get_token (FILE *pnm_file, char *token_buf, size_t token_buf_size)
{
- int i = 0;
+ size_t i = 0;
int ret;
/* remove white-space and comment lines */
do
{
- ret = fgetc(pnm_file);
+ ret = fgetc (pnm_file);
if (ret == '#')
{
/* the rest of this line is a comment */
do
{
- ret = fgetc(pnm_file);
+ ret = fgetc (pnm_file);
}
while ((ret != '\n') && (ret != '\r') && (ret != EOF));
}
if (ret == EOF) break;
- token[i] = (unsigned char) ret;
+ token_buf[i] = (char) ret;
}
- while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' '));
+ while ((ret == '\n') || (ret == '\r') || (ret == ' '));
/* read string */
do
{
- ret = fgetc(pnm_file);
+ ret = fgetc (pnm_file);
if (ret == EOF) break;
- i++;
- token[i] = (unsigned char) ret;
+ if (++i == token_buf_size - 1) break;
+ token_buf[i] = (char) ret;
}
- while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' '));
+ while ((ret != '\n') && (ret != '\r') && (ret != ' '));
- token[i] = '\0';
+ token_buf[i] = '\0';
return;
}
/*
- * get_data() - takes first byte and converts into next pixel value,
- * taking as much bits as defined by bit-depth and
- * using the bit-depth to fill up a byte (0Ah -> AAh)
+ * get_data - takes first byte and converts into next pixel value,
+ * taking as much bits as defined by bit-depth and
+ * using the bit-depth to fill up a byte (0Ah -> AAh)
*/
png_uint_32 get_data (FILE *pnm_file, int depth)
@@ -605,14 +588,14 @@ png_uint_32 get_data (FILE *pnm_file, int depth)
}
/*
- * get_value() - takes first (numeric) string and converts into number,
- * using the bit-depth to fill up a byte (0Ah -> AAh)
+ * get_value - takes first (numeric) string and converts into number,
+ * using the bit-depth to fill up a byte (0Ah -> AAh)
*/
png_uint_32 get_value (FILE *pnm_file, int depth)
{
static png_uint_32 mask = 0;
- png_byte token[16];
+ char token[16];
unsigned long ul_ret_value;
png_uint_32 ret_value;
int i = 0;
@@ -621,8 +604,8 @@ png_uint_32 get_value (FILE *pnm_file, int depth)
for (i = 0; i < depth; i++)
mask = (mask << 1) | 0x01;
- get_token (pnm_file, (char *) token);
- sscanf ((const char *) token, "%lu", &ul_ret_value);
+ get_token (pnm_file, token, sizeof (token));
+ sscanf (token, "%lu", &ul_ret_value);
ret_value = (png_uint_32) ul_ret_value;
ret_value &= mask;
@@ -635,4 +618,3 @@ png_uint_32 get_value (FILE *pnm_file, int depth)
}
/* end of source */
-
diff --git a/libpng/contrib/pngminus/pnm2png.sh b/libpng/contrib/pngminus/pnm2png.sh
index d79df2fa..2ad17a60 100755
--- a/libpng/contrib/pngminus/pnm2png.sh
+++ b/libpng/contrib/pngminus/pnm2png.sh
@@ -8,7 +8,7 @@
# -- full-color
./pnm2png basn2c08.ppm basn2c08.png
./pnm2png basn2c16.ppm basn2c16.png
-# -- palletted
+# -- paletted
./pnm2png basn3p01.ppm basn3p01.png
./pnm2png basn3p02.ppm basn3p02.png
./pnm2png basn3p04.ppm basn3p04.png
@@ -28,7 +28,7 @@
# -- full-color
./pnm2png rawn2c08.ppm rawn2c08.png
./pnm2png rawn2c16.ppm rawn2c16.png
-# -- palletted
+# -- paletted
./pnm2png rawn3p01.ppm rawn3p01.png
./pnm2png rawn3p02.ppm rawn3p02.png
./pnm2png rawn3p04.ppm rawn3p04.png
diff --git a/libpng/contrib/pngsuite/README b/libpng/contrib/pngsuite/README
index 53ba5c8f..d236b02e 100644
--- a/libpng/contrib/pngsuite/README
+++ b/libpng/contrib/pngsuite/README
@@ -16,6 +16,8 @@ chunks, etc.
The "ft*.png" images are "free/libre" replacements for the transparent
corresponding t*.png images in the PngSuite.
+The "i*.png" images are the same images, but interlaced.
+
The images in this directory represent the basic PNG color-types:
grayscale (1-16 bit deep), full color (8 or 16 bit), paletted
(1-8 bit) and grayscale or color images with alpha channel. You
diff --git a/libpng/contrib/pngsuite/bad_interlace_conversions.txt b/libpng/contrib/pngsuite/bad_interlace_conversions.txt
new file mode 100644
index 00000000..8afbde79
--- /dev/null
+++ b/libpng/contrib/pngsuite/bad_interlace_conversions.txt
@@ -0,0 +1,9 @@
+basn0g01.png
+basn0g02.png
+basn0g04.png
+basn3p01.png
+basn3p02.png
+basn3p04.png
+ftbbn0g01.png
+ftbbn0g02.png
+ftbbn0g04.png
diff --git a/libpng/contrib/pngsuite/ibasn0g08.png b/libpng/contrib/pngsuite/ibasn0g08.png
new file mode 100644
index 00000000..90b5305e
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn0g08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn0g16.png b/libpng/contrib/pngsuite/ibasn0g16.png
new file mode 100644
index 00000000..c82f230e
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn0g16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn2c08.png b/libpng/contrib/pngsuite/ibasn2c08.png
new file mode 100644
index 00000000..05d46888
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn2c08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn2c16.png b/libpng/contrib/pngsuite/ibasn2c16.png
new file mode 100644
index 00000000..399f1be5
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn2c16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn3p08.png b/libpng/contrib/pngsuite/ibasn3p08.png
new file mode 100644
index 00000000..6df8370a
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn4a08.png b/libpng/contrib/pngsuite/ibasn4a08.png
new file mode 100644
index 00000000..bda8e3c6
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn4a08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn4a16.png b/libpng/contrib/pngsuite/ibasn4a16.png
new file mode 100644
index 00000000..500f9128
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn4a16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn6a08.png b/libpng/contrib/pngsuite/ibasn6a08.png
new file mode 100644
index 00000000..258f9405
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn6a08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/ibasn6a16.png b/libpng/contrib/pngsuite/ibasn6a16.png
new file mode 100644
index 00000000..e4de69fe
--- /dev/null
+++ b/libpng/contrib/pngsuite/ibasn6a16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbbn2c16.png b/libpng/contrib/pngsuite/iftbbn2c16.png
new file mode 100644
index 00000000..64a9cdf2
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbbn2c16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbbn3p08.png b/libpng/contrib/pngsuite/iftbbn3p08.png
new file mode 100644
index 00000000..47d6eeb3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbbn3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbgn2c16.png b/libpng/contrib/pngsuite/iftbgn2c16.png
new file mode 100644
index 00000000..64a9cdf2
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbgn2c16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbgn3p08.png b/libpng/contrib/pngsuite/iftbgn3p08.png
new file mode 100644
index 00000000..47d6eeb3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbgn3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbrn2c08.png b/libpng/contrib/pngsuite/iftbrn2c08.png
new file mode 100644
index 00000000..08ebbae2
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbrn2c08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbwn0g16.png b/libpng/contrib/pngsuite/iftbwn0g16.png
new file mode 100644
index 00000000..4b7537e3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbwn0g16.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbwn3p08.png b/libpng/contrib/pngsuite/iftbwn3p08.png
new file mode 100644
index 00000000..47d6eeb3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbwn3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftbyn3p08.png b/libpng/contrib/pngsuite/iftbyn3p08.png
new file mode 100644
index 00000000..47d6eeb3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftbyn3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftp0n0g08.png b/libpng/contrib/pngsuite/iftp0n0g08.png
new file mode 100644
index 00000000..aa826b86
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftp0n0g08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftp0n2c08.png b/libpng/contrib/pngsuite/iftp0n2c08.png
new file mode 100644
index 00000000..b12bd0a7
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftp0n2c08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftp0n3p08.png b/libpng/contrib/pngsuite/iftp0n3p08.png
new file mode 100644
index 00000000..37aa0cb0
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftp0n3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/iftp1n3p08.png b/libpng/contrib/pngsuite/iftp1n3p08.png
new file mode 100644
index 00000000..47d6eeb3
--- /dev/null
+++ b/libpng/contrib/pngsuite/iftp1n3p08.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/README b/libpng/contrib/pngsuite/interlaced/README
new file mode 100644
index 00000000..f171eee0
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/README
@@ -0,0 +1,2 @@
+
+These images fail the "pngimage-quick" and "pngimage-full" tests.
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn0g01.png b/libpng/contrib/pngsuite/interlaced/ibasn0g01.png
new file mode 100644
index 00000000..828fa760
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn0g01.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn0g02.png b/libpng/contrib/pngsuite/interlaced/ibasn0g02.png
new file mode 100644
index 00000000..7fc17e3a
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn0g02.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn0g04.png b/libpng/contrib/pngsuite/interlaced/ibasn0g04.png
new file mode 100644
index 00000000..1beade28
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn0g04.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn3p01.png b/libpng/contrib/pngsuite/interlaced/ibasn3p01.png
new file mode 100644
index 00000000..f91e7233
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn3p01.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn3p02.png b/libpng/contrib/pngsuite/interlaced/ibasn3p02.png
new file mode 100644
index 00000000..0f9ce76e
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn3p02.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/ibasn3p04.png b/libpng/contrib/pngsuite/interlaced/ibasn3p04.png
new file mode 100644
index 00000000..b2ca7207
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/ibasn3p04.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png b/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png
new file mode 100644
index 00000000..6eb27d10
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png b/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png
new file mode 100644
index 00000000..46ba4977
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png
Binary files differ
diff --git a/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png b/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png
new file mode 100644
index 00000000..e9db0ad5
--- /dev/null
+++ b/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png
Binary files differ
diff --git a/libpng/contrib/powerpc-vsx/README b/libpng/contrib/powerpc-vsx/README
index e566147e..4970a52c 100644
--- a/libpng/contrib/powerpc-vsx/README
+++ b/libpng/contrib/powerpc-vsx/README
@@ -46,7 +46,7 @@ everything should be static. It must define the function:
static int png_have_vsx(png_structp png_ptr);
-That function must return 1 if ARM NEON instructions are supported, 0 if not.
+That function must return 1 if POWERPC_VSX instructions are supported, 0 if not.
It must not execute png_error unless it detects a bug. A png_error will prevent
the reading of the PNG and in the future, writing too.
diff --git a/libpng/contrib/powerpc-vsx/linux_aux.c b/libpng/contrib/powerpc-vsx/linux_aux.c
index 796922d7..7828acaf 100644
--- a/libpng/contrib/powerpc-vsx/linux_aux.c
+++ b/libpng/contrib/powerpc-vsx/linux_aux.c
@@ -23,14 +23,12 @@
static int
png_have_vsx(png_structp png_ptr)
{
-
- const unsigned long auxv = getauxval( AT_HWCAP );
+ unsigned long auxv = getauxval(AT_HWCAP);
PNG_UNUSED(png_ptr)
- if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX ))
+ if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX))
return 1;
else
return 0;
}
-
diff --git a/libpng/contrib/testpngs/makepngs.sh b/libpng/contrib/testpngs/makepngs.sh
index 059503e2..eb1c15fc 100755
--- a/libpng/contrib/testpngs/makepngs.sh
+++ b/libpng/contrib/testpngs/makepngs.sh
@@ -74,7 +74,7 @@ case "$1" in
--coverage)
# Comments below indicate cases known to be required and not duplicated
# in other (required) cases; the aim is to get a minimal set that gives
- # the maxium code coverage.
+ # the maximum code coverage.
mpg none gray-alpha 8 # required: code coverage, sRGB opaque component
mpg none palette 8 # required: basic palette read
mpg 1.8 gray 2 # required: tests gamma threshold code
diff --git a/libpng/contrib/tools/chkfmt b/libpng/contrib/tools/chkfmt
index a1b88ccb..95181fde 100755
--- a/libpng/contrib/tools/chkfmt
+++ b/libpng/contrib/tools/chkfmt
@@ -54,7 +54,7 @@ doed(){
}
# In beta versions the version string which appears in files can be a little
-# long and cause spuriously overlong lines. To avoid this subtitute the version
+# long and cause spuriously overlong lines. To avoid this substitute the version
# string with a 'standard' version a.b.cc before checking for long lines.
if test -r png.h
then
diff --git a/libpng/contrib/tools/makesRGB.c b/libpng/contrib/tools/makesRGB.c
index e66c9f15..d0c0ca93 100644
--- a/libpng/contrib/tools/makesRGB.c
+++ b/libpng/contrib/tools/makesRGB.c
@@ -388,7 +388,7 @@ main(int argc, char **argv)
if (!test_only)
{
- printf("PNG_CONST png_uint_16 png_sRGB_table[256] =\n{\n ");
+ printf("const png_uint_16 png_sRGB_table[256] =\n{\n ");
for (i=0; i<255; )
{
do
@@ -401,7 +401,7 @@ main(int argc, char **argv)
printf("%d\n};\n\n", png_sRGB_table[i]);
- printf("PNG_CONST png_uint_16 png_sRGB_base[512] =\n{\n ");
+ printf("const png_uint_16 png_sRGB_base[512] =\n{\n ");
for (i=0; i<511; )
{
do
@@ -413,7 +413,7 @@ main(int argc, char **argv)
}
printf("%d\n};\n\n", png_sRGB_base[i]);
- printf("PNG_CONST png_byte png_sRGB_delta[512] =\n{\n ");
+ printf("const png_byte png_sRGB_delta[512] =\n{\n ");
for (i=0; i<511; )
{
do
diff --git a/libpng/contrib/tools/pngcp.c b/libpng/contrib/tools/pngcp.c
index e82dddcc..16d4e7f4 100644
--- a/libpng/contrib/tools/pngcp.c
+++ b/libpng/contrib/tools/pngcp.c
@@ -191,7 +191,7 @@ vl_strategy[] =
/* This controls the order of search. */
{ "huffman", Z_HUFFMAN_ONLY },
{ "RLE", Z_RLE },
- { "fixed", Z_FIXED }, /* the remainder do window searchs */
+ { "fixed", Z_FIXED }, /* the remainder do window searches */
{ "filtered", Z_FILTERED },
{ "default", Z_DEFAULT_STRATEGY },
{ all, 0 }
@@ -336,7 +336,7 @@ static const option options[] =
# define VLC(name) VLCIDAT(name) VLCiCCP(name) VLCzTXt(name)
# ifdef PNG_SW_COMPRESS_png_level
- /* The libpng compression level isn't searched beause it justs sets the
+ /* The libpng compression level isn't searched because it justs sets the
* other things that are searched!
*/
VLO("compression", compression, 0)
@@ -735,7 +735,7 @@ option_index(struct display *dp, const char *opt, size_t len)
static int
get_option(struct display *dp, const char *opt, int *value)
{
- const png_byte i = option_index(dp, opt, strlen(opt));
+ png_byte i = option_index(dp, opt, strlen(opt));
if (dp->entry[i]) /* option was set on command line */
{
@@ -789,7 +789,7 @@ record_opt(struct display *dp, png_byte opt, const char *entry_name)
* numerical value.
*/
{
- const unsigned int sp = dp->csp; /* stack entry of next searched option */
+ unsigned int sp = dp->csp; /* stack entry of next searched option */
if (sp >= dp->tsp)
{
@@ -797,7 +797,7 @@ record_opt(struct display *dp, png_byte opt, const char *entry_name)
* searched entry or the start of the dp->curr buffer if there is nothing
* on the stack yet (sp == 0).
*/
- const int offset = set_opt_string_(dp, sp, opt, entry_name);
+ int offset = set_opt_string_(dp, sp, opt, entry_name);
if (sp > 0)
dp->stack[sp-1].opt_string_end = offset;
@@ -1222,7 +1222,7 @@ advance_opt(struct display *dp, png_byte opt, int search)
}
static int
-getallopts_(struct display *dp, const png_byte opt, int *value, int record)
+getallopts_(struct display *dp, png_byte opt, int *value, int record)
/* Like getop but iterate over all the values if the option was set to "all".
*/
{
@@ -1259,7 +1259,7 @@ getsearchopts(struct display *dp, const char *opt_str, int *value)
/* As above except that if the option was not set try a search */
{
png_byte istrat;
- const png_byte opt = option_index(dp, opt_str, strlen(opt_str));
+ png_byte opt = option_index(dp, opt_str, strlen(opt_str));
int record = options[opt].search;
const char *entry_name;
@@ -1725,7 +1725,7 @@ display_start_read(struct display *dp, const char *filename)
}
static void PNGCBAPI
-read_function(png_structp pp, png_bytep data, png_size_t size)
+read_function(png_structp pp, png_bytep data, size_t size)
{
struct display *dp = get_dp(pp);
@@ -1881,7 +1881,7 @@ display_start_write(struct display *dp, const char *filename)
}
static void PNGCBAPI
-write_function(png_structp pp, png_bytep data, png_size_t size)
+write_function(png_structp pp, png_bytep data, size_t size)
{
struct display *dp = get_dp(pp);
@@ -2117,7 +2117,7 @@ better_options(const struct display *dp)
*
* This function looks through the stack from the bottom up looking for an
* option that does not match the current best value. When it finds one it
- * checks to see if it is more or less desireable and returns true or false
+ * checks to see if it is more or less desirable and returns true or false
* as appropriate.
*
* Notice that this means that the order options are pushed onto the stack
@@ -2220,7 +2220,7 @@ cp_one_file(struct display *dp, const char *filename, const char *destname)
strcpy(dp->best, dp->curr);
dp->best_size = dp->write_size;
- if (dp->nsp > 0) /* interating over lists */
+ if (dp->nsp > 0) /* iterating over lists */
{
char *tmpname, tmpbuf[(sizeof dp->namebuf) + 4];
assert(dp->curr[0] == ' ' && dp->tsp > 0);
@@ -2302,7 +2302,7 @@ cppng(struct display *dp, const char *file, const char *gv dest)
}
int
-main(const int argc, const char * const * const argv)
+main(int argc, char **argv)
{
/* For each file on the command line test it with a range of transforms */
int option_end;
@@ -2379,7 +2379,7 @@ main(const int argc, const char * const * const argv)
/* Here on any return, including failures, except user/internal issues
*/
{
- const int pass = (d.options & STRICT) ?
+ int pass = (d.options & STRICT) ?
RESULT_STRICT(d.results) : RESULT_RELAXED(d.results);
if (!pass)
diff --git a/libpng/contrib/tools/pngfix.c b/libpng/contrib/tools/pngfix.c
index 69ffc170..2fa5d13e 100644
--- a/libpng/contrib/tools/pngfix.c
+++ b/libpng/contrib/tools/pngfix.c
@@ -772,7 +772,7 @@ skip_chunk_type(const struct global *global, png_uint_32 type)
return 0;
/* Chunks that specify gamma encoding which should therefore only be
- * removed the the user insists:
+ * removed if the user insists:
*/
case png_gAMA: case png_sRGB:
if (global->skip >= SKIP_ALL)
@@ -2363,7 +2363,7 @@ zlib_advance(struct zlib *zlib, png_uint_32 nbytes)
flush = Z_NO_FLUSH;
out_bytes = 0;
- /* NOTE: expression 3 is only evaluted on 'continue', because of the
+ /* NOTE: expression 3 is only evaluated on 'continue', because of the
* 'break' at the end of this loop below.
*/
for (;endrc == ZLIB_OK;
@@ -2514,7 +2514,7 @@ zlib_run(struct zlib *zlib)
*/
for (;;)
{
- const unsigned int count = list->count;
+ unsigned int count = list->count;
unsigned int i;
for (i = 0; i<count; ++i)
@@ -2664,7 +2664,7 @@ zlib_check(struct file *file, png_uint_32 offset)
* this case, so do the optimization anyway.
*/
if (zlib.cksum)
- chunk_message(zlib.chunk, "zlib checkum");
+ chunk_message(zlib.chunk, "zlib checksum");
break;
@@ -2791,7 +2791,7 @@ process_chunk(struct file *file, png_uint_32 file_crc, png_uint_32 next_length,
* to read_chunk.
*/
{
- const png_uint_32 type = file->type;
+ png_uint_32 type = file->type;
if (file->global->verbose > 1)
{
@@ -3152,7 +3152,7 @@ read_chunk(struct file *file)
}
}
- /* Control gets to here if the the stream seems invalid or damaged in some
+ /* Control gets to here if the stream seems invalid or damaged in some
* way. Either there was a problem reading all the expected data (this
* chunk's data, its CRC and the length and type of the next chunk) or the
* next chunk length/type are invalid. Notice that the cases that end up
@@ -3678,7 +3678,7 @@ usage(const char *prog)
size_t i;
static const char *usage_string[] = {
" Tests, optimizes and optionally fixes the zlib header in PNG files.",
-" Optionally, when fixing, strips ancilliary chunks from the file.",
+" Optionally, when fixing, strips ancillary chunks from the file.",
0,
"OPTIONS",
" OPERATION",
@@ -3710,7 +3710,7 @@ usage(const char *prog)
" practice most programs will ignore it.",
" bKGD [transform]: This is used by libpng transforms."
" --max=<number>:",
-" Use IDAT chunks sized <number>. If no number is given the the IDAT",
+" Use IDAT chunks sized <number>. If no number is given the IDAT",
" chunks will be the maximum size permitted; 2^31-1 bytes. If the option",
" is omitted the original chunk sizes will not be changed. When the",
" option is given --strip=unsafe is set automatically. This may be",
diff --git a/libpng/contrib/visupng/PngFile.c b/libpng/contrib/visupng/PngFile.c
index d46318f4..cf943f32 100644
--- a/libpng/contrib/visupng/PngFile.c
+++ b/libpng/contrib/visupng/PngFile.c
@@ -410,15 +410,14 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
#ifndef PNG_STDIO_SUPPORTED
static void
-png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
+png_read_data(png_structp png_ptr, png_bytep data, size_t length)
{
- png_size_t check;
+ size_t check;
- /* fread() returns 0 on error, so it is OK to store this in a png_size_t
+ /* fread() returns 0 on error, so it is OK to store this in a size_t
* instead of an int, which is what fread() actually returns.
*/
- check = (png_size_t)fread(data, (png_size_t)1, length,
- (FILE *)png_ptr->io_ptr);
+ check = fread(data, 1, length, (FILE *)png_ptr->io_ptr);
if (check != length)
{
@@ -427,7 +426,7 @@ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
}
static void
-png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
+png_write_data(png_structp png_ptr, png_bytep data, size_t length)
{
png_uint_32 check;
diff --git a/libpng/contrib/visupng/PngFile.h b/libpng/contrib/visupng/PngFile.h
index 474426c2..1b7b9be3 100644
--- a/libpng/contrib/visupng/PngFile.h
+++ b/libpng/contrib/visupng/PngFile.h
@@ -23,8 +23,8 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
int iWidth, int iHeight, png_color BkgColor);
#ifndef PNG_STDIO_SUPPORTED
-static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
-static void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
+static void png_read_data(png_structp png_ptr, png_bytep data, size_t length);
+static void png_write_data(png_structp png_ptr, png_bytep data, size_t length);
static void png_flush(png_structp png_ptr);
#endif
diff --git a/libpng/contrib/visupng/VisualPng.c b/libpng/contrib/visupng/VisualPng.c
index 20e1625f..6baa3b66 100644
--- a/libpng/contrib/visupng/VisualPng.c
+++ b/libpng/contrib/visupng/VisualPng.c
@@ -716,7 +716,7 @@ BOOL DisplayImage (HWND hwnd, BYTE **ppDib,
png_color bkgGray = {127, 127, 127};
png_color bkgWhite = {255, 255, 255};
- /* allocate memory for the Device Independant bitmap */
+ /* allocate memory for the Device Independent bitmap */
wDIRowBytes = (WORD) ((3 * cxWinSize + 3L) >> 2) << 2;
diff --git a/libpng/depcomp b/libpng/depcomp
index fc98710e..65cbf709 100755
--- a/libpng/depcomp
+++ b/libpng/depcomp
@@ -1,9 +1,9 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2013-05-30.07; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 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
@@ -16,7 +16,7 @@ scriptversion=2013-05-30.07; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -783,9 +783,9 @@ exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/libpng/example.c b/libpng/example.c
index 99d2f054..2e2afaaf 100644
--- a/libpng/example.c
+++ b/libpng/example.c
@@ -2,18 +2,20 @@
#if 0 /* in case someone actually tries to compile this */
/* example.c - an example of using libpng
- * Last changed in libpng 1.6.24 [August 4, 2016]
+ *
+ * Maintained 2018 Cosmin Truta
* Maintained 1998-2016 Glenn Randers-Pehrson
- * Maintained 1996, 1997 Andreas Dilger)
- * Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
+ * Maintained 1996-1997 Andreas Dilger
+ * Written 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+ *
* To the extent possible under law, the authors have waived
* all copyright and related or neighboring rights to this file.
- * This work is published from: United States.
+ * This work is published from: United States, Canada.
*/
/* This is an example of how to use libpng to read and write PNG files.
- * The file libpng-manual.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
+ * The file libpng-manual.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.
*
@@ -24,16 +26,17 @@
* see also the programs in the contrib directory.
*/
-/* The simple, but restricted, approach to reading a PNG file or data stream
- * just requires two function calls, as in the following complete program.
- * Writing a file just needs one function call, so long as the data has an
+/* The simple, but restricted approach to reading a PNG file or data stream
+ * requires just two function calls, as in the following complete program.
+ * Writing a file needs just one function call, so long as the data has an
* appropriate layout.
*
* The following code reads PNG image data from a file and writes it, in a
- * potentially new format, to a new file. While this code will compile there is
- * minimal (insufficient) error checking; for a more realistic version look at
- * contrib/examples/pngtopng.c
+ * potentially new format, to a new file. While this code will compile, there
+ * is minimal (insufficient) error checking. For a more realistic version,
+ * see contrib/examples/pngtopng.c
*/
+
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
@@ -68,28 +71,28 @@ int main(int argc, const char **argv)
*/
buffer = malloc(PNG_IMAGE_SIZE(image));
- /* If enough memory was available read the image in the desired format
- * then write the result out to the new file. 'background' is not
- * necessary when reading the image because the alpha channel is
+ /* If enough memory was available, read the image in the desired
+ * format, then write the result out to the new file. 'background' is
+ * not necessary when reading the image, because the alpha channel is
* preserved; if it were to be removed, for example if we requested
* PNG_FORMAT_RGB, then either a solid background color would have to
- * be supplied or the output buffer would have to be initialized to the
- * actual background of the image.
+ * be supplied, or the output buffer would have to be initialized to
+ * the actual background of the image.
*
* The fourth argument to png_image_finish_read is the 'row_stride' -
* this is the number of components allocated for the image in each
* row. It has to be at least as big as the value returned by
* PNG_IMAGE_ROW_STRIDE, but if you just allocate space for the
- * default, minimum, size using PNG_IMAGE_SIZE as above you can pass
+ * default, minimum size, using PNG_IMAGE_SIZE as above, you can pass
* zero.
*
* The final argument is a pointer to a buffer for the colormap;
- * colormaps have exactly the same format as a row of image pixels (so
- * you choose what format to make the colormap by setting
+ * colormaps have exactly the same format as a row of image pixels
+ * (so you choose what format to make the colormap by setting
* image.format). A colormap is only returned if
* PNG_FORMAT_FLAG_COLORMAP is also set in image.format, so in this
* case NULL is passed as the final argument. If you do want to force
- * all images into an index/color-mapped format then you can use:
+ * all images into an index/color-mapped format, then you can use:
*
* PNG_IMAGE_COLORMAP_SIZE(image)
*
@@ -111,17 +114,15 @@ int main(int argc, const char **argv)
exit(0);
}
}
-
else
{
/* Calling png_image_free is optional unless the simplified API was
- * not run to completion. In this case if there wasn't enough
- * memory for 'buffer' we didn't complete the read, so we must free
- * the image:
+ * not run to completion. In this case, if there wasn't enough
+ * memory for 'buffer', we didn't complete the read, so we must
+ * free the image:
*/
if (buffer == NULL)
png_image_free(&image);
-
else
free(buffer);
}
@@ -130,65 +131,67 @@ int main(int argc, const char **argv)
* textual message in the 'png_image' structure:
*/
fprintf(stderr, "pngtopng: error: %s\n", image.message);
- exit (1);
+ exit(1);
}
fprintf(stderr, "pngtopng: usage: pngtopng input-file output-file\n");
- exit(1);
+ exit(2);
}
/* That's it ;-) Of course you probably want to do more with PNG files than
* just converting them all to 32-bit RGBA PNG files; you can do that between
* the call to png_image_finish_read and png_image_write_to_file. You can also
- * ask for the image data to be presented in a number of different formats. You
- * do this by simply changing the 'format' parameter set before allocating the
- * buffer.
+ * ask for the image data to be presented in a number of different formats.
+ * You do this by simply changing the 'format' parameter set before allocating
+ * the buffer.
*
* The format parameter consists of five flags that define various aspects of
- * the image, you can simply add these together to get the format or you can use
- * one of the predefined macros from png.h (as above):
+ * the image. You can simply add these together to get the format, or you can
+ * use one of the predefined macros from png.h (as above):
*
- * PNG_FORMAT_FLAG_COLOR: if set the image will have three color components per
- * pixel (red, green and blue), if not set the image will just have one
+ * PNG_FORMAT_FLAG_COLOR: if set, the image will have three color components
+ * per pixel (red, green and blue); if not set, the image will just have one
* luminance (grayscale) component.
*
- * PNG_FORMAT_FLAG_ALPHA: if set each pixel in the image will have an additional
- * alpha value; a linear value that describes the degree the image pixel
- * covers (overwrites) the contents of the existing pixel on the display.
+ * PNG_FORMAT_FLAG_ALPHA: if set, each pixel in the image will have an
+ * additional alpha value; a linear value that describes the degree the
+ * image pixel covers (overwrites) the contents of the existing pixel on the
+ * display.
*
- * PNG_FORMAT_FLAG_LINEAR: if set the components of each pixel will be returned
- * as a series of 16-bit linear values, if not set the components will be
- * returned as a series of 8-bit values encoded according to the 'sRGB'
- * standard. The 8-bit format is the normal format for images intended for
- * direct display, because almost all display devices do the inverse of the
- * sRGB transformation to the data they receive. The 16-bit format is more
- * common for scientific data and image data that must be further processed;
- * because it is linear simple math can be done on the component values.
- * Regardless of the setting of this flag the alpha channel is always linear,
- * although it will be 8 bits or 16 bits wide as specified by the flag.
+ * PNG_FORMAT_FLAG_LINEAR: if set, the components of each pixel will be
+ * returned as a series of 16-bit linear values; if not set, the components
+ * will be returned as a series of 8-bit values encoded according to the
+ * sRGB standard. The 8-bit format is the normal format for images intended
+ * for direct display, because almost all display devices do the inverse of
+ * the sRGB transformation to the data they receive. The 16-bit format is
+ * more common for scientific data and image data that must be further
+ * processed; because it is linear, simple math can be done on the component
+ * values. Regardless of the setting of this flag, the alpha channel is
+ * always linear, although it will be 8 bits or 16 bits wide as specified by
+ * the flag.
*
- * PNG_FORMAT_FLAG_BGR: if set the components of a color pixel will be returned
- * in the order blue, then green, then red. If not set the pixel components
- * are in the order red, then green, then blue.
+ * PNG_FORMAT_FLAG_BGR: if set, the components of a color pixel will be
+ * returned in the order blue, then green, then red. If not set, the pixel
+ * components are in the order red, then green, then blue.
*
- * PNG_FORMAT_FLAG_AFIRST: if set the alpha channel (if present) precedes the
- * color or grayscale components. If not set the alpha channel follows the
+ * PNG_FORMAT_FLAG_AFIRST: if set, the alpha channel (if present) precedes the
+ * color or grayscale components. If not set, the alpha channel follows the
* components.
*
* You do not have to read directly from a file. You can read from memory or,
* on systems that support it, from a <stdio.h> FILE*. This is controlled by
- * the particular png_image_read_from_ function you call at the start. Likewise
- * on write you can write to a FILE* if your system supports it. Check the
- * macro PNG_STDIO_SUPPORTED to see if stdio support has been included in your
- * libpng build.
+ * the particular png_image_read_from_ function you call at the start.
+ * Likewise, on write, you can write to a FILE* if your system supports it.
+ * Check the macro PNG_STDIO_SUPPORTED to see if stdio support has been
+ * included in your libpng build.
*
- * If you read 16-bit (PNG_FORMAT_FLAG_LINEAR) data you may need to write it in
- * the 8-bit format for display. You do this by setting the convert_to_8bit
+ * If you read 16-bit (PNG_FORMAT_FLAG_LINEAR) data, you may need to write it
+ * in the 8-bit format for display. You do this by setting the convert_to_8bit
* flag to 'true'.
*
* Don't repeatedly convert between the 8-bit and 16-bit forms. There is
- * significant data loss when 16-bit data is converted to the 8-bit encoding and
- * the current libpng implementation of conversion to 16-bit is also
+ * significant data loss when 16-bit data is converted to the 8-bit encoding,
+ * and the current libpng implementation of conversion to 16-bit is also
* significantly lossy. The latter will be fixed in the future, but the former
* is unavoidable - the 8-bit format just doesn't have enough resolution.
*/
@@ -199,10 +202,10 @@ int main(int argc, const char **argv)
* interfaces.
*
* All these interfaces require that you do your own error handling - your
- * program must be able to arrange for control to return to your own code any
- * time libpng encounters a problem. There are several ways to do this, but the
- * standard way is to use the ANSI-C (C90) <setjmp.h> interface to establish a
- * return point within your own code. You must do this if you do not use the
+ * program must be able to arrange for control to return to your own code, any
+ * time libpng encounters a problem. There are several ways to do this, but
+ * the standard way is to use the <setjmp.h> interface to establish a return
+ * point within your own code. You must do this if you do not use the
* simplified interface (above).
*
* The first step is to include the header files you need, including the libpng
@@ -214,7 +217,7 @@ int main(int argc, const char **argv)
/* 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!).
+ * is not already defined by libpng!)
*/
#ifndef png_jmpbuf
@@ -222,10 +225,10 @@ int main(int argc, const char **argv)
#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.
+ * returns zero if the image is a PNG, and nonzero otherwise.
*
* 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 the file can be opened and is a PNG, and 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
@@ -238,7 +241,7 @@ int main(int argc, const char **argv)
*
* 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
+ * 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
@@ -250,14 +253,14 @@ int check_if_png(char *file_name, FILE **fp)
if ((*fp = fopen(file_name, "rb")) == NULL)
return 0;
- /* Read in some of the signature bytes */
+ /* 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));
+ * Return nonzero (true) if they match.
+ */
+ return(!png_sig_cmp(buf, 0, PNG_BYTES_TO_CHECK));
}
/* Read a PNG file. You may want to return an error code if the read
@@ -267,7 +270,7 @@ int check_if_png(char *file_name, FILE **fp)
* 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 */
+void read_png(char *file_name) /* We need to open the file */
{
png_structp png_ptr;
png_infop info_ptr;
@@ -280,7 +283,7 @@ void read_png(char *file_name) /* We need to open the file */
return (ERROR);
#else no_open_file /* prototype 2 */
-void read_png(FILE *fp, int sig_read) /* File is already open */
+void read_png(FILE *fp, int sig_read) /* File is already open */
{
png_structp png_ptr;
png_infop info_ptr;
@@ -292,7 +295,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
* 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
+ * 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);
@@ -316,35 +319,33 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
* 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 */
+ /* Free all of the memory associated with the png_ptr and info_ptr. */
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
fclose(fp);
- /* If we get here, we had a problem reading the file */
+ /* If we get here, we had a problem reading the file. */
return (ERROR);
}
- /* One of the following I/O initialization methods is REQUIRED */
+ /* 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 */
+ /* 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_init_io(), 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 */
+ /* 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,
+ /* 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
* quantizing, filling, setting background, and doing gamma
@@ -354,10 +355,10 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
png_read_png(png_ptr, info_ptr, png_transforms, NULL);
#else
- /* OK, you're doing it the hard way, with the lower-level functions */
+ /* 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 file before the first IDAT (image data chunk). REQUIRED.
*/
png_read_info(png_ptr, info_ptr);
@@ -385,20 +386,21 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
*/
png_set_strip_alpha(png_ptr);
- /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
+ /* Extract multiple pixels with bit depths of 1, 2 or 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). */
+ * (not useful if you are using png_set_packing).
+ */
png_set_packswap(png_ptr);
- /* Expand paletted colors into true RGB triplets */
+ /* 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 */
+ /* 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_expand_gray_1_2_4_to_8(png_ptr);
@@ -409,12 +411,11 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
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
+ * 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) != 0)
@@ -424,32 +425,29 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
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
+ /* 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
+ * 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 */
+ /* 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 = PNG_DEFAULT_sRGB; /* A good guess for a PC monitor
- in a dimly lit room */
- screen_gamma = PNG_GAMMA_MAC_18 or 1.0; /* Good guesses for Mac systems */
+ screen_gamma = PNG_DEFAULT_sRGB; /* A good guess for a PC monitor
+ in a dimly lit room */
+ screen_gamma = PNG_GAMMA_MAC_18 or 1.0; /* Good guesses 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.
+ * by the user at run time. Gamma correction support in your application
+ * is strongly recommended.
*/
int intent;
@@ -466,7 +464,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
}
#ifdef PNG_READ_QUANTIZE_SUPPORTED
- /* Quantize RGB files down to 8-bit palette or reduce palettes
+ /* Quantize 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) != 0)
@@ -474,29 +472,26 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
int num_palette;
png_colorp palette;
- /* This reduces the image to the application supplied 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 quantized */
+ /* An array of colors to which the image should be quantized. */
png_color std_color_cube[MAX_SCREEN_COLORS];
-
png_set_quantize(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
MAX_SCREEN_COLORS, NULL, 0);
}
- /* This reduces the image to the palette supplied in the file */
+ /* This reduces the image to the palette supplied in the file. */
else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette) != 0)
{
png_uint_16p histogram = NULL;
-
png_get_hIST(png_ptr, info_ptr, &histogram);
-
png_set_quantize(png_ptr, palette, num_palette,
max_screen_colors, histogram, 0);
}
}
#endif /* READ_QUANTIZE */
- /* Invert monochrome files to have 0 as white and 1 as black */
+ /* 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
@@ -506,22 +501,21 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT) != 0)
{
png_color_8p sig_bit_p;
-
png_get_sBIT(png_ptr, info_ptr, &sig_bit_p);
png_set_shift(png_ptr, sig_bit_p);
}
- /* Flip the RGB pixels to BGR (or RGBA to BGRA) */
+ /* Flip the RGB pixels to BGR (or RGBA to BGRA). */
if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
png_set_bgr(png_ptr);
- /* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
+ /* 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 */
+ /* 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) */
+ /* Add filler (or alpha) byte (before/after each RGB triplet). */
png_set_filler(png_ptr, 0xffff, PNG_FILLER_AFTER);
#ifdef PNG_READ_INTERLACING_SUPPORTED
@@ -534,40 +528,31 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
number_passes = 1;
#endif /* READ_INTERLACING */
-
/* 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).
+ * update the palette for you (i.e. 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];
-
- /* Clear the pointer array */
for (row = 0; row < height; row++)
- row_pointers[row] = NULL;
-
+ row_pointers[row] = NULL; /* Clear the pointer array */
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 */
+ /* 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], NULL, 1);
- }
#else no_single /* Read the image several rows at a time */
for (y = 0; y < height; y += number_of_rows)
@@ -581,24 +566,24 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
#endif no_sparkle /* Use only one of these two methods */
}
- /* If you want to display the image after every pass, do so here */
+ /* 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 */
+ /* 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 */
+ /* At this point you have read the entire image. */
- /* Clean up after the read, and free any memory allocated - REQUIRED */
+ /* Clean up after the read, and free any memory allocated. REQUIRED. */
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- /* Close the file */
+ /* Close the file. */
fclose(fp);
- /* That's it */
+ /* That's it! */
return (OK);
}
@@ -610,34 +595,30 @@ 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
+ * 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, NULL);
return (ERROR);
}
-
if (setjmp(png_jmpbuf((*png_ptr))))
{
png_destroy_read_struct(png_ptr, info_ptr, NULL);
return (ERROR);
}
- /* This one's new. You will need to provide all three
- * function callbacks, even if you aren't using them all.
+ /* You will need to provide all three function callbacks,
+ * even if you aren't using all of them.
* 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().
@@ -650,7 +631,6 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
*/
png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
info_callback, row_callback, end_callback);
-
return (OK);
}
@@ -660,18 +640,18 @@ process_data(png_structp *png_ptr, png_infop *info_ptr,
{
if (setjmp(png_jmpbuf((*png_ptr))))
{
- /* Free the png_ptr and info_ptr memory on error */
+ /* Free the png_ptr and info_ptr memory on error. */
png_destroy_read_struct(png_ptr, info_ptr, 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).
+ /* Give 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
+ * 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
+ * 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.
*/
@@ -693,8 +673,7 @@ info_callback(png_structp png_ptr, png_infop info)
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
+ /* 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.
*
@@ -705,25 +684,22 @@ row_callback(png_structp png_ptr, png_bytep new_row,
* 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
+ * If new_row is not NULL, then you need to call
+ * png_progressive_combine_row(), to replace the corresponding row as
* shown below:
*/
- /* Get pointer to corresponding row in our
- * PNG read buffer.
- */
+ /* Get pointer to corresponding row in our PNG read buffer. */
png_bytep old_row = ((png_bytep *)our_data)[row_num];
#ifdef PNG_READ_INTERLACING_SUPPORTED
- /* If both rows are allocated then copy the new row
+ /* 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);
+ 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
+ /* 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.
*
@@ -734,7 +710,6 @@ row_callback(png_structp png_ptr, png_bytep new_row,
* (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 previous rows. Note
@@ -781,14 +756,13 @@ void write_png(char *file_name /* , ... other image information ... */)
*/
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 */
+ /* Allocate/initialize the image information data. REQUIRED. */
info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL)
{
@@ -797,30 +771,30 @@ void write_png(char *file_name /* , ... other image information ... */)
return (ERROR);
}
- /* Set error handling. REQUIRED if you aren't supplying your own
+ /* Set up 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 writing the file */
+ /* If we get here, we had a problem writing the file. */
fclose(fp);
png_destroy_write_struct(&png_ptr, &info_ptr);
return (ERROR);
}
- /* One of the following I/O initialization functions is REQUIRED */
+ /* 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 */
+ /* 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 write functions, instead of calling
- * png_init_io() here you would call
+ * png_init_io(), 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 */
+ /* where user_io_ptr is a structure you want available to the callbacks. */
#endif no_streams /* Only use one initialization method */
#ifdef hilevel
@@ -831,30 +805,32 @@ void write_png(char *file_name /* , ... other image information ... */)
png_write_png(png_ptr, info_ptr, png_transforms, NULL);
#else
- /* This is the hard way */
+ /* 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,
+ * 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
+ * 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);
+ 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
- * (sizeof (png_color)));
+ /* Set the palette if there is one. REQUIRED for indexed-color images. */
+ palette = (png_colorp)png_malloc(png_ptr,
+ PNG_MAX_PALETTE_LENGTH * (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
+ /* You must not free palette here, because png_set_PLTE only makes a link
+ * to the palette that you allocated. Wait until you are about to destroy
* the png structure.
*/
- /* Optional significant bit (sBIT) chunk */
+ /* Optional significant bit (sBIT) chunk. */
png_color_8 sig_bit;
/* If we are dealing with a grayscale image then */
@@ -870,18 +846,17 @@ void write_png(char *file_name /* , ... other image information ... */)
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 */
+ /* Optionally write comments into the image. */
{
png_text text_ptr[3];
- char key0[]="Title";
- char text0[]="Mona Lisa";
+ char key0[] = "Title";
+ char text0[] = "Mona Lisa";
text_ptr[0].key = key0;
text_ptr[0].text = text0;
text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE;
@@ -889,8 +864,8 @@ void write_png(char *file_name /* , ... other image information ... */)
text_ptr[0].lang = NULL;
text_ptr[0].lang_key = NULL;
- char key1[]="Author";
- char text1[]="Leonardo DaVinci";
+ char key1[] = "Author";
+ char text1[] = "Leonardo DaVinci";
text_ptr[1].key = key1;
text_ptr[1].text = text1;
text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE;
@@ -898,8 +873,8 @@ void write_png(char *file_name /* , ... other image information ... */)
text_ptr[1].lang = NULL;
text_ptr[1].lang_key = NULL;
- char key2[]="Description";
- char text2[]="<long text>";
+ char key2[] = "Description";
+ char text2[] = "<long text>";
text_ptr[2].key = key2;
text_ptr[2].text = text2;
text_ptr[2].compression = PNG_TEXT_COMPRESSION_zTXt;
@@ -910,14 +885,14 @@ void write_png(char *file_name /* , ... other image information ... */)
png_set_text(write_ptr, write_info_ptr, text_ptr, 3);
}
- /* Other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs */
+ /* Other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs. */
- /* Note that if sRGB is present the gAMA and cHRM chunks must be ignored
+ /* Note that if sRGB is present, the gAMA and cHRM chunks must be ignored
* on read and, if your application chooses to write them, they must
- * be written in accordance with the sRGB profile
+ * be written in accordance with the sRGB profile.
*/
- /* Write the file header information. REQUIRED */
+ /* 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
@@ -941,7 +916,7 @@ void write_png(char *file_name /* , ... other image information ... */)
* all optional. Only call them if you want them.
*/
- /* Invert monochrome pixels */
+ /* Invert monochrome pixels. */
png_set_invert_mono(png_ptr);
/* Shift the pixels up to a legal bit depth and fill in
@@ -949,30 +924,29 @@ void write_png(char *file_name /* , ... other image information ... */)
*/
png_set_shift(png_ptr, &sig_bit);
- /* Pack pixels into bytes */
+ /* Pack pixels into bytes. */
png_set_packing(png_ptr);
- /* Swap location of alpha bytes from ARGB to RGBA */
+ /* 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.
+ * 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 */
+ /* Flip BGR pixels to RGB. */
png_set_bgr(png_ptr);
- /* Swap bytes of 16-bit files to most significant byte first */
+ /* Swap bytes of 16-bit files to most significant byte first. */
png_set_swap(png_ptr);
- /* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats */
+ /* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats. */
png_set_packswap(png_ptr);
- /* Turn on interlace handling if you are not using png_write_image() */
+ /* Turn on interlace handling if you are not using png_write_image(). */
if (interlacing != 0)
number_passes = png_set_interlace_handling(png_ptr);
-
else
number_passes = 1;
@@ -982,29 +956,28 @@ void write_png(char *file_name /* , ... other image information ... */)
*/
png_uint_32 k, height, width;
- /* In this example, "image" is a one-dimensional array of bytes */
+ /* In this example, "image" is a one-dimensional array of bytes. */
- /* Guard against integer overflow */
- if (height > PNG_SIZE_MAX/(width*bytes_per_pixel)) {
- png_error(png_ptr, "Image_data buffer would be too large");
- }
- png_byte image[height*width*bytes_per_pixel];
+ /* Guard against integer overflow. */
+ if (height > PNG_SIZE_MAX / (width * bytes_per_pixel))
+ png_error(png_ptr, "Image data buffer would be too large");
+ png_byte image[height * width * bytes_per_pixel];
png_bytep row_pointers[height];
- if (height > PNG_UINT_32_MAX/(sizeof (png_bytep)))
- png_error (png_ptr, "Image is too tall to process in memory");
+ if (height > PNG_UINT_32_MAX / (sizeof (png_bytep)))
+ png_error(png_ptr, "Image is too tall to process in memory");
- /* Set up pointers into your "image" byte array */
+ /* Set up pointers into your "image" byte array. */
for (k = 0; k < height; k++)
- row_pointers[k] = image + k*width*bytes_per_pixel;
+ row_pointers[k] = image + k * width * bytes_per_pixel;
- /* One of the following output methods is REQUIRED */
+ /* 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 */
+ /* The other way to write the image - deal with interlacing. */
#else no_entire /* Write out the image data by one or more scanlines */
@@ -1016,27 +989,27 @@ void write_png(char *file_name /* , ... other image information ... */)
/* 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 */
+ /* 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.2.0 and up as all the public
- * chunks are supported and you can use png_set_unknown_chunks() to
+ * as well. Shouldn't be necessary in 1.2.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 */
+ /* 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().
+ /* If you png_malloced a palette, free it here.
+ * (Don't free info_ptr->palette, as shown 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;
@@ -1047,19 +1020,20 @@ void write_png(char *file_name /* , ... other image information ... */)
*/
png_free(png_ptr, trans);
trans = NULL;
- /* Whenever you use png_free() it is a good idea to set the pointer to
+
+ /* Whenever you use png_free(), it is a good idea to set the pointer to
* NULL in case your application inadvertently tries to png_free() it
- * again. When png_free() sees a NULL it returns without action, thus
- * avoiding the double-free security problem.
+ * again. When png_free() sees a NULL it returns without action, avoiding
+ * the double-free problem.
*/
- /* Clean up after the write, and free any memory allocated */
+ /* Clean up after the write, and free any allocated memory. */
png_destroy_write_struct(&png_ptr, &info_ptr);
- /* Close the file */
+ /* Close the file. */
fclose(fp);
- /* That's it */
+ /* That's it! */
return (OK);
}
diff --git a/libpng/install-sh b/libpng/install-sh
deleted file mode 100755
index 0b0fdcbb..00000000
--- a/libpng/install-sh
+++ /dev/null
@@ -1,501 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2013-12-25.23; # UTC
-
-# 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.
-
-tab=' '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# 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_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
-is_target_a_directory=possibly
-
-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
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
-
- -T) is_target_a_directory=never;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
-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
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- 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
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 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 problematic for 'test' and other utilities.
- 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
-
- # 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 "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- dstdir=`dirname "$dst"`
- 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-writable 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
-
- oIFS=$IFS
- IFS=/
- set -f
- set fnord $dstdir
- shift
- set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test X"$d" = X && 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` &&
- set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- 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-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/libpng/intel/filter_sse2_intrinsics.c b/libpng/intel/filter_sse2_intrinsics.c
index 5e8553fb..f52aaa80 100644
--- a/libpng/intel/filter_sse2_intrinsics.c
+++ b/libpng/intel/filter_sse2_intrinsics.c
@@ -1,12 +1,11 @@
/* filter_sse2_intrinsics.c - SSE2 optimized filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2016-2017 Glenn Randers-Pehrson
* Written by Mike Klein and Matt Sarett
* Derived from arm/filter_neon_intrinsics.c
*
- * Last changed in libpng 1.6.31 [July 27, 2017]
- *
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
@@ -29,39 +28,25 @@
*/
static __m128i load4(const void* p) {
- return _mm_cvtsi32_si128(*(const int*)p);
+ int tmp;
+ memcpy(&tmp, p, sizeof(tmp));
+ return _mm_cvtsi32_si128(tmp);
}
static void store4(void* p, __m128i v) {
- *(int*)p = _mm_cvtsi128_si32(v);
+ int tmp = _mm_cvtsi128_si32(v);
+ memcpy(p, &tmp, sizeof(int));
}
static __m128i load3(const void* p) {
- /* We'll load 2 bytes, then 1 byte,
- * then mask them together, and finally load into SSE.
- */
- const png_uint_16* p01 = (png_const_uint_16p)p;
- const png_byte* p2 = (const png_byte*)(p01+1);
-
- png_uint_32 v012 = (png_uint_32)(*p01)
- | (png_uint_32)(*p2) << 16;
- return load4(&v012);
+ png_uint_32 tmp = 0;
+ memcpy(&tmp, p, 3);
+ return _mm_cvtsi32_si128(tmp);
}
static void store3(void* p, __m128i v) {
- /* We'll pull from SSE as a 32-bit int, then write
- * its bottom two bytes, then its third byte.
- */
- png_uint_32 v012;
- png_uint_16* p01;
- png_byte* p2;
-
- store4(&v012, v);
-
- p01 = (png_uint_16p)p;
- p2 = (png_byte*)(p01+1);
- *p01 = (png_uint_16)v012;
- *p2 = (png_byte)(v012 >> 16);
+ int tmp = _mm_cvtsi128_si32(v);
+ memcpy(p, &tmp, 3);
}
void png_read_filter_row_sub3_sse2(png_row_infop row_info, png_bytep row,
@@ -71,7 +56,7 @@ void png_read_filter_row_sub3_sse2(png_row_infop row_info, png_bytep row,
* There is no pixel to the left of the first pixel. It's encoded directly.
* That works with our main loop if we just say that left pixel was zero.
*/
- png_size_t rb;
+ size_t rb;
__m128i a, d = _mm_setzero_si128();
@@ -104,7 +89,7 @@ void png_read_filter_row_sub4_sse2(png_row_infop row_info, png_bytep row,
* There is no pixel to the left of the first pixel. It's encoded directly.
* That works with our main loop if we just say that left pixel was zero.
*/
- png_size_t rb;
+ size_t rb;
__m128i a, d = _mm_setzero_si128();
@@ -131,7 +116,7 @@ void png_read_filter_row_avg3_sse2(png_row_infop row_info, png_bytep row,
* perfectly with our loop if we make sure a starts at zero.
*/
- png_size_t rb;
+ size_t rb;
const __m128i zero = _mm_setzero_si128();
@@ -185,7 +170,7 @@ void png_read_filter_row_avg4_sse2(png_row_infop row_info, png_bytep row,
* predicted to be half of the pixel above it. So again, this works
* perfectly with our loop if we make sure a starts at zero.
*/
- png_size_t rb;
+ size_t rb;
const __m128i zero = _mm_setzero_si128();
__m128i b;
__m128i a, d = zero;
@@ -257,7 +242,7 @@ void png_read_filter_row_paeth3_sse2(png_row_infop row_info, png_bytep row,
* Here we zero b and d, which become c and a respectively at the start of
* the loop.
*/
- png_size_t rb;
+ size_t rb;
const __m128i zero = _mm_setzero_si128();
__m128i c, b = zero,
a, d = zero;
@@ -356,7 +341,7 @@ void png_read_filter_row_paeth4_sse2(png_row_infop row_info, png_bytep row,
* Here we zero b and d, which become c and a respectively at the start of
* the loop.
*/
- png_size_t rb;
+ size_t rb;
const __m128i zero = _mm_setzero_si128();
__m128i pa,pb,pc,smallest,nearest;
__m128i c, b = zero,
diff --git a/libpng/intel/intel_init.c b/libpng/intel/intel_init.c
index 8f08baf8..2f8168b7 100644
--- a/libpng/intel/intel_init.c
+++ b/libpng/intel/intel_init.c
@@ -1,12 +1,11 @@
/* intel_init.c - SSE2 optimized filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2016-2017 Glenn Randers-Pehrson
* Written by Mike Klein and Matt Sarett, Google, Inc.
* Derived from arm/arm_init.c
*
- * Last changed in libpng 1.6.29 [March 16, 2017]
- *
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
diff --git a/libpng/libpng-manual.txt b/libpng/libpng-manual.txt
index d4407ef2..5dad92fb 100644
--- a/libpng/libpng-manual.txt
+++ b/libpng/libpng-manual.txt
@@ -1,9 +1,7 @@
libpng-manual.txt - A description on how to use and modify libpng
- libpng version 1.6.34 - September 29, 2017
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2017 Glenn Randers-Pehrson
+ Copyright (c) 2018-2019 Cosmin Truta
+ Copyright (c) 1998-2018 Glenn Randers-Pehrson
This document is released under the libpng license.
For conditions of distribution and use, see the disclaimer
@@ -11,9 +9,13 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng versions 0.97, January 1998, through 1.6.34 - September 29, 2017
+ libpng version 1.6.36, December 2018, through 1.6.37 - April 2019
+ Updated and distributed by Cosmin Truta
+ Copyright (c) 2018-2019 Cosmin Truta
+
+ libpng versions 0.97, January 1998, through 1.6.35 - July 2018
Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2017 Glenn Randers-Pehrson
+ Copyright (c) 1998-2018 Glenn Randers-Pehrson
libpng 1.0 beta 6 - version 0.96 - May 28, 1997
Updated and distributed by Andreas Dilger
@@ -45,7 +47,6 @@ libpng-manual.txt - A description on how to use and modify libpng
XIII. Detecting libpng
XIV. Source code repository
XV. Coding style
- XVI. Y2K Compliance in libpng
I. Introduction
@@ -66,7 +67,7 @@ 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:2004 (E)) at
-<https://www.w3.org/TR/2003/REC-PNG-20031110/
+<https://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
@@ -74,9 +75,9 @@ The PNG-1.2 specification is available at
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
+The PNG-1.0 specification is available as RFC 2083 at
<https://png-mng.sourceforge.io/pub/png/spec/1.0/> and as a
-W3C Recommendation <https://www.w3.org/TR/REC-png-961001>.
+W3C Recommendation at <https://www.w3.org/TR/REC-png-961001>.
Some additional chunks are described in the special-purpose public chunks
documents at <http://www.libpng.org/pub/png/spec/register/>
@@ -348,18 +349,18 @@ Customizing libpng.
FILE *fp = fopen(file_name, "rb");
if (!fp)
{
- return (ERROR);
+ return ERROR;
}
if (fread(header, 1, number, fp) != number)
{
- return (ERROR);
+ return ERROR;
}
is_png = !png_sig_cmp(header, 0, number);
if (!is_png)
{
- return (NOT_PNG);
+ return NOT_PNG;
}
Next, png_struct and png_info need to be allocated and initialized. In
@@ -378,7 +379,7 @@ create the structure, so your application should check for that.
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ return ERROR;
png_infop info_ptr = png_create_info_struct(png_ptr);
@@ -386,7 +387,7 @@ create the structure, so your application should check for that.
{
png_destroy_read_struct(&png_ptr,
(png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
If you want to use your own memory allocation routines,
@@ -421,7 +422,7 @@ free any memory.
png_destroy_read_struct(&png_ptr, &info_ptr,
&end_info);
fclose(fp);
- return (ERROR);
+ return ERROR;
}
Pass (png_infopp)NULL instead of &end_info if you didn't create
@@ -503,7 +504,7 @@ input stream. You must supply the function
png_byte name[5];
png_byte *data;
- png_size_t size;
+ size_t size;
/* Note that libpng has already taken care of
the CRC handling */
@@ -512,9 +513,9 @@ input stream. You must supply the function
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 */
+ 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
@@ -1003,7 +1004,7 @@ chunks to be assumed to be encoded using sRGB.
png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
In this case the output is assumed to be something like an sRGB conformant
-display preceeded by a power-law lookup table of power 1.45. This is how
+display preceded by a power-law lookup table of power 1.45. This is how
early Mac systems behaved.
png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
@@ -1055,7 +1056,7 @@ faster.)
When the default gamma of PNG files doesn't match the output gamma.
If you have PNG files with no gamma information png_set_alpha_mode allows
-you to provide a default gamma, but it also sets the ouput gamma to the
+you to provide a default gamma, but it also sets the output gamma to the
matching value. If you know your PNG files have a gamma that doesn't
match the output you can take advantage of the fact that
png_set_alpha_mode always sets the output gamma but only sets the PNG
@@ -2409,7 +2410,7 @@ separate.
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
png_read_end(png_ptr, end_info);
@@ -2549,7 +2550,7 @@ png_infop info_ptr;
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ return ERROR;
info_ptr = png_create_info_struct(png_ptr);
@@ -2557,14 +2558,14 @@ png_infop info_ptr;
{
png_destroy_read_struct(&png_ptr,
(png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
if (setjmp(png_jmpbuf(png_ptr)))
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
/* This one's new. You can provide functions
@@ -2598,7 +2599,7 @@ png_infop info_ptr;
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
/* This one's new also. Simply give it a chunk
@@ -2742,7 +2743,7 @@ custom writing functions. See the discussion under Customizing libpng.
FILE *fp = fopen(file_name, "wb");
if (!fp)
- return (ERROR);
+ 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
@@ -2757,14 +2758,14 @@ both "png_ptr"; you can call them anything you like, such as
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ 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);
+ return ERROR;
}
If you want to use your own memory allocation routines,
@@ -2791,7 +2792,7 @@ section below for more information on the libpng error handling.
{
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
- return (ERROR);
+ return ERROR;
}
...
return;
@@ -3779,7 +3780,7 @@ in-memory bitmap formats or to be written from the same formats. If these
formats do not accommodate your needs then you can, and should, use the more
sophisticated APIs above - these support a wide variety of in-memory formats
and a wide variety of sophisticated transformations to those formats as well
-as a wide variety of APIs to manipulate ancilliary information.
+as a wide variety of APIs to manipulate ancillary information.
To read a PNG file using the simplified API:
@@ -4055,7 +4056,7 @@ Flags containing additional information about the image are held in
the 'flags' field of png_image.
PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
- This indicates the the RGB values of the in-memory bitmap do not
+ This indicates that the RGB values of the in-memory bitmap do not
correspond to the red, green and blue end-points defined by sRGB.
PNG_IMAGE_FLAG_FAST == 0x02
@@ -4102,7 +4103,7 @@ READ APIs
The PNG header is read from the stdio FILE object.
int png_image_begin_read_from_memory(png_imagep image,
- png_const_voidp memory, png_size_t size)
+ png_const_voidp memory, size_t size)
The PNG header is read from the given memory buffer.
@@ -4255,10 +4256,10 @@ png_get_io_ptr(). For example:
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);
+ png_bytep data, size_t length);
void user_write_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
+ png_bytep data, size_t length);
void user_flush_data(png_structp png_ptr);
@@ -4521,7 +4522,7 @@ 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
+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.
@@ -4548,7 +4549,7 @@ or any other MNG chunks; your application must provide its own support for
them. You may wish to consider using libmng (available at
https://www.libmng.com/) instead.
-VIII. Changes to Libpng from version 0.88
+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
@@ -4603,7 +4604,7 @@ application:
png_uint_32 application_vn = PNG_LIBPNG_VER;
-IX. Changes to Libpng from version 1.0.x to 1.2.x
+IX. Changes to Libpng from version 1.0.x to 1.2.x
Support for user memory management was enabled by default. To
accomplish this, the functions png_create_read_struct_2(),
@@ -4700,7 +4701,7 @@ which also expands tRNS to alpha was replaced with
png_set_expand_gray_1_2_4_to_8()
which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
-X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
+X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
Private libpng prototypes and macro definitions were moved from
png.h and pngconf.h into a new pngpriv.h header file.
@@ -4784,7 +4785,7 @@ behavior in case the application runs out of memory part-way through
the process.
We changed the prototypes of png_get_compression_buffer_size() and
-png_set_compression_buffer_size() to work with png_size_t instead of
+png_set_compression_buffer_size() to work with size_t instead of
png_uint_32.
Support for numbered error messages was removed by default, since we
@@ -4810,7 +4811,7 @@ was renamed to PNG_READ_QUANTIZE_SUPPORTED.
We removed the trailing '.' from the warning and error messages.
-XI. Changes to Libpng from version 1.4.x to 1.5.x
+XI. Changes to Libpng from version 1.4.x to 1.5.x
From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
function) incorrectly returned a value of type png_uint_32.
@@ -4873,7 +4874,7 @@ to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep.
There are changes of form in png.h, including new and changed macros to
declare parts of the API. Some API functions with arguments that are
pointers to data not modified within the function have been corrected to
-declare these arguments with PNG_CONST.
+declare these arguments with const.
Much of the internal use of C macros to control the library build has also
changed and some of this is visible in the exported header files, in
@@ -5068,7 +5069,7 @@ even though the default is to use the macros - this allows applications
to choose at app buildtime whether or not to use macros (previously
impossible because the functions weren't in the default build.)
-XII. Changes to Libpng from version 1.5.x to 1.6.x
+XII. Changes to Libpng from version 1.5.x to 1.6.x
A "simplified API" has been added (see documentation in png.h and a simple
example in contrib/examples/pngtopng.c). The new publicly visible API
@@ -5231,7 +5232,7 @@ attempt to decode the Exif profile; it simply returns a byte array
containing the profile to the calling application which must do its own
decoding.
-XIII. Detecting libpng
+XIII. Detecting libpng
The png_get_io_ptr() function has been present since libpng-0.88, has never
changed, and is unaffected by conditional compilation macros. It is the
@@ -5255,9 +5256,8 @@ or you can browse it with a web browser at
https://github.com/glennrp/libpng or
https://sourceforge.net/p/libpng/code/ci/libpng16/tree/
-Patches can be sent to glennrp at users.sourceforge.net or to
-png-mng-implement at lists.sourceforge.net or you can upload them to
-the libpng bug tracker at
+Patches can be sent to png-mng-implement at lists.sourceforge.net or
+uploaded to the libpng bug tracker at
https://libpng.sourceforge.io/
@@ -5266,9 +5266,9 @@ or as a "pull request" to
https://github.com/glennrp/libpng/pulls
We also accept patches built from the tar or zip distributions, and
-simple verbal discriptions of bug fixes, reported either to the
+simple verbal descriptions of bug fixes, reported either to the
SourceForge bug tracker, to the png-mng-implement at lists.sf.net
-mailing list, as github issues, or directly to glennrp.
+mailing list, as github issues.
XV. Coding style
@@ -5289,7 +5289,7 @@ braces on separate lines:
The braces can be omitted from simple one-line actions:
if (condition)
- return (0);
+ return 0;
We use 3-space indentation, except for continued statements which
are usually indented the same as the first line of the statement
@@ -5407,58 +5407,3 @@ We do not use the TAB character for indentation in the C sources.
Lines do not exceed 80 characters.
Other rules can be inferred by inspecting the libpng source.
-
-XVI. Y2K Compliance in libpng
-
-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.6.34 are Y2K compliant. It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has two year fields. One is a 2-byte unsigned integer
-that will hold years up to 65535. The other, which is deprecated,
-holds the date in text format, and will hold years up to 9999.
-
-The integer is
- "png_uint_16 year" in png_time_struct.
-
-The string is
- "char time_buffer[29]" in png_struct. This is no longer used
-in libpng-1.6.x and will be removed from libpng-1.7.0.
-
-There are seven time-related functions:
-
- png_convert_to_rfc_1123_buffer() in png.c
- (formerly png_convert_to_rfc_1152() in error, and
- also formerly png_convert_to_rfc_1123())
- 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/libpng/libpng.3 b/libpng/libpng.3
index 3c8d62ab..f3742354 100644
--- a/libpng/libpng.3
+++ b/libpng/libpng.3
@@ -1,11 +1,11 @@
-.TH LIBPNG 3 "September 29, 2017"
+.TH LIBPNG 3 "April 14, 2019"
.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
+libpng \- Portable Network Graphics (PNG) Reference Library 1.6.37
+
.SH SYNOPSIS
-\fB
-#include <png.h>\fP
+\fB#include <png.h>\fP
-\fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP
+\fBpng_uint_32 png_access_version_number (void);\fP
\fBvoid png_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
@@ -35,7 +35,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\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
-\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask)\fP\fB);\fP
+\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask\fP\fB);\fP
\fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
@@ -225,7 +225,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\fBint png_image_begin_read_from_stdio (png_imagep \fP\fIimage\fP\fB, FILE* \fIfile\fP\fB);\fP
-\fBint, png_image_begin_read_from_memory (png_imagep \fP\fIimage\fP\fB, png_const_voidp \fP\fImemory\fP\fB, png_size_t \fIsize\fP\fB);\fP
+\fBint, png_image_begin_read_from_memory (png_imagep \fP\fIimage\fP\fB, png_const_voidp \fP\fImemory\fP\fB, size_t \fIsize\fP\fB);\fP
\fBint png_image_finish_read (png_imagep \fP\fIimage\fP\fB, png_colorp \fP\fIbackground\fP\fB, void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP
@@ -233,11 +233,11 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\fBint png_image_write_to_file (png_imagep \fP\fIimage\fP\fB, const char \fP\fI*file\fP\fB, int \fP\fIconvert_to_8bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP
-\fBint png_image_write_to_memory (png_imagep \fP\fIimage\fP\fB, void \fP\fI*memory\fP\fB, png_alloc_size_t * PNG_RESTRICT \fP\fImemory_bytes\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, const void \fI*colormap)\fP\fB);\fP
+\fBint png_image_write_to_memory (png_imagep \fP\fIimage\fP\fB, void \fP\fI*memory\fP\fB, png_alloc_size_t * PNG_RESTRICT \fP\fImemory_bytes\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, const void \fI*colormap\fP\fB);\fP
-\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap)\fP\fB);\fP
+\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP
-\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP
+\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, size_t \fIpng_info_struct_size\fP\fB);\fP
\fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
@@ -251,11 +251,11 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\fBpng_uint_32 png_permit_mng_features (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fImng_features_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_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, size_t \fIbuffer_size\fP\fB);\fP
-\fBpng_size_t png_process_data_pause \fP\fI(png_structp\fP\fB, int \fIsave\fP\fB);\fP
+\fBsize_t png_process_data_pause (png_structp \fP\fIpng_ptr\fP\fB, int \fIsave\fP\fB);\fP
-\fBpng_uint_32 png_process_data_skip \fI(png_structp\fP\fB);\fP
+\fBpng_uint_32 png_process_data_skip (png_structp \fP\fIpng_ptr\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
@@ -297,7 +297,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\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_check_for_invalid_index(png_structrp \fP\fIpng_ptr\fP\fB, int \fIallowed\fP\fB);\fP
+\fBvoid png_set_check_for_invalid_index (png_structrp \fP\fIpng_ptr\fP\fB, int \fIallowed\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
@@ -353,7 +353,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\fBvoid png_set_eXIf (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fIexif\fP\fB);\fP
-\fBvoid png_set_eXIf_1 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, const png_uint_32 \fP\fInum_exif\fP\fB, png_bytep \fIexif\fP\fB);\fP
+\fBvoid png_set_eXIf_1 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fInum_exif\fP\fB, png_bytep \fIexif\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
@@ -453,7 +453,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\fBvoid png_set_text_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
-\fBvoid \fP\fIpng_set_text_compression_method\fP\fB, (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod)\fP\fB);\fP
+\fBvoid png_set_text_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\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
@@ -475,15 +475,15 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
\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
-\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
+\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, size_t \fP\fIstart\fP\fB, 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 (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, 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_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, size_t \fIlength\fP\fB);\fP
\fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP
@@ -515,13 +515,12 @@ the Portable Network Graphics (PNG) format image files. It uses the
.IR zlib(3)
compression library.
Following is a copy of the libpng-manual.txt file that accompanies libpng.
+
.SH LIBPNG.TXT
libpng-manual.txt - A description on how to use and modify libpng
- libpng version 1.6.34 - September 29, 2017
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2017 Glenn Randers-Pehrson
+ Copyright (c) 2018-2019 Cosmin Truta
+ Copyright (c) 1998-2018 Glenn Randers-Pehrson
This document is released under the libpng license.
For conditions of distribution and use, see the disclaimer
@@ -529,9 +528,13 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng versions 0.97, January 1998, through 1.6.34 - September 29, 2017
+ libpng version 1.6.36, December 2018, through 1.6.37 - April 2019
+ Updated and distributed by Cosmin Truta
+ Copyright (c) 2018-2019 Cosmin Truta
+
+ libpng versions 0.97, January 1998, through 1.6.35 - July 2018
Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2017 Glenn Randers-Pehrson
+ Copyright (c) 1998-2018 Glenn Randers-Pehrson
libpng 1.0 beta 6 - version 0.96 - May 28, 1997
Updated and distributed by Andreas Dilger
@@ -563,7 +566,6 @@ libpng-manual.txt - A description on how to use and modify libpng
XIII. Detecting libpng
XIV. Source code repository
XV. Coding style
- XVI. Y2K Compliance in libpng
.SH I. Introduction
@@ -584,7 +586,7 @@ 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:2004 (E)) at
-<https://www.w3.org/TR/2003/REC-PNG-20031110/
+<https://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
@@ -592,9 +594,9 @@ The PNG-1.2 specification is available at
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
+The PNG-1.0 specification is available as RFC 2083 at
<https://png-mng.sourceforge.io/pub/png/spec/1.0/> and as a
-W3C Recommendation <https://www.w3.org/TR/REC-png-961001>.
+W3C Recommendation at <https://www.w3.org/TR/REC-png-961001>.
Some additional chunks are described in the special-purpose public chunks
documents at <http://www.libpng.org/pub/png/spec/register/>
@@ -866,18 +868,18 @@ Customizing libpng.
FILE *fp = fopen(file_name, "rb");
if (!fp)
{
- return (ERROR);
+ return ERROR;
}
if (fread(header, 1, number, fp) != number)
{
- return (ERROR);
+ return ERROR;
}
is_png = !png_sig_cmp(header, 0, number);
if (!is_png)
{
- return (NOT_PNG);
+ return NOT_PNG;
}
Next, png_struct and png_info need to be allocated and initialized. In
@@ -896,7 +898,7 @@ create the structure, so your application should check for that.
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ return ERROR;
png_infop info_ptr = png_create_info_struct(png_ptr);
@@ -904,7 +906,7 @@ create the structure, so your application should check for that.
{
png_destroy_read_struct(&png_ptr,
(png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
If you want to use your own memory allocation routines,
@@ -939,7 +941,7 @@ free any memory.
png_destroy_read_struct(&png_ptr, &info_ptr,
&end_info);
fclose(fp);
- return (ERROR);
+ return ERROR;
}
Pass (png_infopp)NULL instead of &end_info if you didn't create
@@ -1021,7 +1023,7 @@ input stream. You must supply the function
png_byte name[5];
png_byte *data;
- png_size_t size;
+ size_t size;
/* Note that libpng has already taken care of
the CRC handling */
@@ -1030,9 +1032,9 @@ input stream. You must supply the function
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 */
+ 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
@@ -1521,7 +1523,7 @@ chunks to be assumed to be encoded using sRGB.
png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
In this case the output is assumed to be something like an sRGB conformant
-display preceeded by a power-law lookup table of power 1.45. This is how
+display preceded by a power-law lookup table of power 1.45. This is how
early Mac systems behaved.
png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
@@ -1573,7 +1575,7 @@ faster.)
When the default gamma of PNG files doesn't match the output gamma.
If you have PNG files with no gamma information png_set_alpha_mode allows
-you to provide a default gamma, but it also sets the ouput gamma to the
+you to provide a default gamma, but it also sets the output gamma to the
matching value. If you know your PNG files have a gamma that doesn't
match the output you can take advantage of the fact that
png_set_alpha_mode always sets the output gamma but only sets the PNG
@@ -2927,7 +2929,7 @@ separate.
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
png_read_end(png_ptr, end_info);
@@ -3067,7 +3069,7 @@ png_infop info_ptr;
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ return ERROR;
info_ptr = png_create_info_struct(png_ptr);
@@ -3075,14 +3077,14 @@ png_infop info_ptr;
{
png_destroy_read_struct(&png_ptr,
(png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
if (setjmp(png_jmpbuf(png_ptr)))
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
/* This one's new. You can provide functions
@@ -3116,7 +3118,7 @@ png_infop info_ptr;
{
png_destroy_read_struct(&png_ptr, &info_ptr,
(png_infopp)NULL);
- return (ERROR);
+ return ERROR;
}
/* This one's new also. Simply give it a chunk
@@ -3260,7 +3262,7 @@ custom writing functions. See the discussion under Customizing libpng.
FILE *fp = fopen(file_name, "wb");
if (!fp)
- return (ERROR);
+ 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
@@ -3275,14 +3277,14 @@ both "png_ptr"; you can call them anything you like, such as
user_error_fn, user_warning_fn);
if (!png_ptr)
- return (ERROR);
+ 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);
+ return ERROR;
}
If you want to use your own memory allocation routines,
@@ -3309,7 +3311,7 @@ section below for more information on the libpng error handling.
{
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
- return (ERROR);
+ return ERROR;
}
...
return;
@@ -4297,7 +4299,7 @@ in-memory bitmap formats or to be written from the same formats. If these
formats do not accommodate your needs then you can, and should, use the more
sophisticated APIs above - these support a wide variety of in-memory formats
and a wide variety of sophisticated transformations to those formats as well
-as a wide variety of APIs to manipulate ancilliary information.
+as a wide variety of APIs to manipulate ancillary information.
To read a PNG file using the simplified API:
@@ -4573,7 +4575,7 @@ Flags containing additional information about the image are held in
the 'flags' field of png_image.
PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
- This indicates the the RGB values of the in-memory bitmap do not
+ This indicates that the RGB values of the in-memory bitmap do not
correspond to the red, green and blue end-points defined by sRGB.
PNG_IMAGE_FLAG_FAST == 0x02
@@ -4620,7 +4622,7 @@ READ APIs
The PNG header is read from the stdio FILE object.
int png_image_begin_read_from_memory(png_imagep image,
- png_const_voidp memory, png_size_t size)
+ png_const_voidp memory, size_t size)
The PNG header is read from the given memory buffer.
@@ -4773,10 +4775,10 @@ png_get_io_ptr(). For example:
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);
+ png_bytep data, size_t length);
void user_write_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
+ png_bytep data, size_t length);
void user_flush_data(png_structp png_ptr);
@@ -5039,7 +5041,7 @@ 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
+.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.
@@ -5066,7 +5068,7 @@ or any other MNG chunks; your application must provide its own support for
them. You may wish to consider using libmng (available at
https://www.libmng.com/) instead.
-.SH VIII. Changes to Libpng from version 0.88
+.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
@@ -5121,7 +5123,7 @@ application:
png_uint_32 application_vn = PNG_LIBPNG_VER;
-.SH IX. Changes to Libpng from version 1.0.x to 1.2.x
+.SH IX. Changes to Libpng from version 1.0.x to 1.2.x
Support for user memory management was enabled by default. To
accomplish this, the functions png_create_read_struct_2(),
@@ -5218,7 +5220,7 @@ which also expands tRNS to alpha was replaced with
png_set_expand_gray_1_2_4_to_8()
which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
-.SH X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
+.SH X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
Private libpng prototypes and macro definitions were moved from
png.h and pngconf.h into a new pngpriv.h header file.
@@ -5302,7 +5304,7 @@ behavior in case the application runs out of memory part-way through
the process.
We changed the prototypes of png_get_compression_buffer_size() and
-png_set_compression_buffer_size() to work with png_size_t instead of
+png_set_compression_buffer_size() to work with size_t instead of
png_uint_32.
Support for numbered error messages was removed by default, since we
@@ -5328,7 +5330,7 @@ was renamed to PNG_READ_QUANTIZE_SUPPORTED.
We removed the trailing '.' from the warning and error messages.
-.SH XI. Changes to Libpng from version 1.4.x to 1.5.x
+.SH XI. Changes to Libpng from version 1.4.x to 1.5.x
From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
function) incorrectly returned a value of type png_uint_32.
@@ -5391,7 +5393,7 @@ to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep.
There are changes of form in png.h, including new and changed macros to
declare parts of the API. Some API functions with arguments that are
pointers to data not modified within the function have been corrected to
-declare these arguments with PNG_CONST.
+declare these arguments with const.
Much of the internal use of C macros to control the library build has also
changed and some of this is visible in the exported header files, in
@@ -5586,7 +5588,7 @@ even though the default is to use the macros - this allows applications
to choose at app buildtime whether or not to use macros (previously
impossible because the functions weren't in the default build.)
-.SH XII. Changes to Libpng from version 1.5.x to 1.6.x
+.SH XII. Changes to Libpng from version 1.5.x to 1.6.x
A "simplified API" has been added (see documentation in png.h and a simple
example in contrib/examples/pngtopng.c). The new publicly visible API
@@ -5749,7 +5751,7 @@ attempt to decode the Exif profile; it simply returns a byte array
containing the profile to the calling application which must do its own
decoding.
-.SH XIII. Detecting libpng
+.SH XIII. Detecting libpng
The png_get_io_ptr() function has been present since libpng-0.88, has never
changed, and is unaffected by conditional compilation macros. It is the
@@ -5773,9 +5775,8 @@ or you can browse it with a web browser at
https://github.com/glennrp/libpng or
https://sourceforge.net/p/libpng/code/ci/libpng16/tree/
-Patches can be sent to glennrp at users.sourceforge.net or to
-png-mng-implement at lists.sourceforge.net or you can upload them to
-the libpng bug tracker at
+Patches can be sent to png-mng-implement at lists.sourceforge.net or
+uploaded to the libpng bug tracker at
https://libpng.sourceforge.io/
@@ -5784,9 +5785,9 @@ or as a "pull request" to
https://github.com/glennrp/libpng/pulls
We also accept patches built from the tar or zip distributions, and
-simple verbal discriptions of bug fixes, reported either to the
+simple verbal descriptions of bug fixes, reported either to the
SourceForge bug tracker, to the png-mng-implement at lists.sf.net
-mailing list, as github issues, or directly to glennrp.
+mailing list, as github issues.
.SH XV. Coding style
@@ -5807,7 +5808,7 @@ braces on separate lines:
The braces can be omitted from simple one-line actions:
if (condition)
- return (0);
+ return 0;
We use 3-space indentation, except for continued statements which
are usually indented the same as the first line of the statement
@@ -5926,61 +5927,6 @@ Lines do not exceed 80 characters.
Other rules can be inferred by inspecting the libpng source.
-.SH XVI. Y2K Compliance in libpng
-
-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.6.34 are Y2K compliant. It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has two year fields. One is a 2-byte unsigned integer
-that will hold years up to 65535. The other, which is deprecated,
-holds the date in text format, and will hold years up to 9999.
-
-The integer is
- "png_uint_16 year" in png_time_struct.
-
-The string is
- "char time_buffer[29]" in png_struct. This is no longer used
-in libpng-1.6.x and will be removed from libpng-1.7.0.
-
-There are seven time-related functions:
-
- png_convert_to_rfc_1123_buffer() in png.c
- (formerly png_convert_to_rfc_1152() in error, and
- also formerly png_convert_to_rfc_1123())
- 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:
@@ -5991,9 +5937,9 @@ 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
- ------- ------ ----- ----------
+ 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]
@@ -6028,23 +5974,25 @@ the first widely used release:
1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
1.0.7 1 10007 (still compatible)
...
- 1.0.19 10 10019 10.so.0.19[.0]
+ 1.0.69 10 10069 10.so.0.69[.0]
...
1.2.59 13 10259 12.so.0.59[.0]
...
+ 1.4.20 14 10420 14.so.0.20[.0]
+ ...
1.5.30 15 10530 15.so.15.30[.0]
...
- 1.6.34 16 10634 16.so.16.34[.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 "rcNN".
+ 1.6.35 16 10635 16.so.16.35[.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 "rcNN".
.SH "SEE ALSO"
.IR libpngpf(3) ", " png(5)
@@ -6081,8 +6029,9 @@ 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>
+This man page:
+Initially created by Glenn Randers-Pehrson.
+Maintained by Cosmin Truta.
The contributing authors would like to thank all those who helped
with testing, bug fixes, and patience. This wouldn't have been
@@ -6090,160 +6039,14 @@ possible without all of you.
Thanks to Frank J. T. Wojcik for helping with the documentation.
-Libpng version 1.6.34 - September 29, 2017:
+Libpng:
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
-Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
+Maintained by Cosmin Truta.
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 NOTICES:
-
-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.
-
-This code is released under the libpng license.
-
-libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
-Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
-derived from libpng-1.0.6, 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
- Mans Rullgard
- Cosmin Truta
- Gilles Vollant
- James Yu
- Mandar Sahastrabuddhe
- Google Inc.
- Vadim Barkov
-
-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.
-
-Some files in the "contrib" directory and some configure-generated
-files that are distributed with libpng have other copyright owners and
-are released under other open source licenses.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
-libpng-0.96, 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, are derived from libpng-0.88,
-and are 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
-
-Some files in the "scripts" directory have other copyright owners
-but are released under this license.
-
-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.
-
-END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
-
-TRADEMARK:
-
-The name "libpng" has not been registered by the Copyright owner
-as a trademark in any jurisdiction. However, because libpng has
-been distributed and maintained world-wide, continually since 1995,
-the Copyright owner claims "common-law trademark protection" in any
-jurisdiction where common-law trademark is recognized.
-
-OSI CERTIFICATION:
-
-Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
-a certification mark of the Open Source Initiative. OSI has not addressed
-the additional disclaimers inserted at version 1.0.7.
-
-EXPORT CONTROL:
-
-The Copyright owner believes that the Export Control Classification
-Number (ECCN) for libpng is EAR99, which means not subject to export
-controls or International Traffic in Arms Regulations (ITAR) because
-it is open source, publicly available software, that does not contain
-any encryption software. See the EAR, paragraphs 734.3(b)(3) and
-734.7(b).
-
-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).
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-September 29, 2017
-
.\" end of man page
-
diff --git a/libpng/libpngpf.3 b/libpng/libpngpf.3
index 8cea87a7..6909c70a 100644
--- a/libpng/libpngpf.3
+++ b/libpng/libpngpf.3
@@ -1,18 +1,24 @@
-.TH LIBPNGPF 3 "April 1, 2017"
+.TH LIBPNGPF 3 "April 14, 2019"
.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34
+libpng \- Portable Network Graphics (PNG) Reference Library 1.6.37
(private functions)
+
.SH SYNOPSIS
-\fB\fB#include \fI\fI"pngpriv.h"
+\fB#include \fI"pngpriv.h"
-\fB\fBAs of libpng version \fP\fI\fP\fI1.5.1\fP\fB\fP\fB, this section is no longer \fP\fI\fP\fImaintained\fP\fB\fP\fB, now that the private function prototypes are hidden in pngpriv.h and not accessible to applications. Look in pngpriv.h for the prototypes and a short description of each \fI\fIfunction.
+\fBAs of libpng version \fP\fI1.5.1\fP\fB, this section is no longer
+\fP\fImaintained\fP\fB, now that the private function prototypes are hidden in
+\fP\fIpngpriv.h\fP\fB and not accessible to applications. Look in
+\fP\fIpngpriv.h\fP\fB for the prototypes and a short description of each
+function.
.SH DESCRIPTION
The functions previously listed here are used privately by libpng and are not
available for use by applications. They are not "exported" to applications
using shared libraries.
-.SH SEE ALSO
+.SH "SEE ALSO"
.BR "png"(5), " libpng"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5)
-.SH AUTHOR
-Glenn Randers-Pehrson
+
+.SH AUTHORS
+Cosmin Truta, Glenn Randers-Pehrson
diff --git a/libpng/mips/filter_msa_intrinsics.c b/libpng/mips/filter_msa_intrinsics.c
index 943bb3d0..a5791794 100644
--- a/libpng/mips/filter_msa_intrinsics.c
+++ b/libpng/mips/filter_msa_intrinsics.c
@@ -1,14 +1,15 @@
/* filter_msa_intrinsics.c - MSA optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2016 Glenn Randers-Pehrson
* Written by Mandar Sahastrabuddhe, August 2016.
- * Last changed in libpng 1.6.25 [September 1, 2016]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
+
#include <stdio.h>
#include <stdint.h>
#include "../pngpriv.h"
@@ -366,8 +367,8 @@
void png_read_filter_row_up_msa(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i, cnt, cnt16, cnt32;
- png_size_t istop = row_info->rowbytes;
+ size_t i, cnt, cnt16, cnt32;
+ size_t istop = row_info->rowbytes;
png_bytep rp = row;
png_const_bytep pp = prev_row;
v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
@@ -457,8 +458,8 @@ void png_read_filter_row_up_msa(png_row_infop row_info, png_bytep row,
void png_read_filter_row_sub4_msa(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t count;
- png_size_t istop = row_info->rowbytes;
+ size_t count;
+ size_t istop = row_info->rowbytes;
png_bytep src = row;
png_bytep nxt = row + 4;
int32_t inp0;
@@ -496,8 +497,8 @@ void png_read_filter_row_sub4_msa(png_row_infop row_info, png_bytep row,
void png_read_filter_row_sub3_msa(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t count;
- png_size_t istop = row_info->rowbytes;
+ size_t count;
+ size_t istop = row_info->rowbytes;
png_bytep src = row;
png_bytep nxt = row + 3;
int64_t out0;
@@ -541,11 +542,11 @@ void png_read_filter_row_sub3_msa(png_row_infop row_info, png_bytep row,
void png_read_filter_row_avg4_msa(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
+ size_t i;
png_bytep src = row;
png_bytep nxt = row;
png_const_bytep pp = prev_row;
- png_size_t istop = row_info->rowbytes - 4;
+ size_t istop = row_info->rowbytes - 4;
int32_t inp0, inp1, out0;
v16u8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, dst0, dst1;
v16u8 zero = { 0 };
@@ -592,11 +593,11 @@ void png_read_filter_row_avg4_msa(png_row_infop row_info, png_bytep row,
void png_read_filter_row_avg3_msa(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
+ size_t i;
png_bytep src = row;
png_bytep nxt = row;
png_const_bytep pp = prev_row;
- png_size_t istop = row_info->rowbytes - 3;
+ size_t istop = row_info->rowbytes - 3;
int64_t out0;
int32_t inp0, inp1, out1;
int16_t out2;
diff --git a/libpng/mips/mips_init.c b/libpng/mips/mips_init.c
index 0bfb7a32..8dd283de 100644
--- a/libpng/mips/mips_init.c
+++ b/libpng/mips/mips_init.c
@@ -1,14 +1,15 @@
/* mips_init.c - MSA optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2016 Glenn Randers-Pehrson
* Written by Mandar Sahastrabuddhe, 2016.
- * Last changed in libpng 1.6.25 [September 1, 2016]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
+
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
* called.
*/
diff --git a/libpng/missing b/libpng/missing
index f62bbae3..625aeb11 100755
--- a/libpng/missing
+++ b/libpng/missing
@@ -1,9 +1,9 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2013-10-28.13; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@ scriptversion=2013-10-28.13; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -101,9 +101,9 @@ else
exit $st
fi
-perl_URL=http://www.perl.org/
-flex_URL=http://flex.sourceforge.net/
-gnu_software_URL=http://www.gnu.org/software
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
program_details ()
{
@@ -207,9 +207,9 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \
exit $st
# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/libpng/png.5 b/libpng/png.5
index b0cbd2cf..c2da95c4 100644
--- a/libpng/png.5
+++ b/libpng/png.5
@@ -1,47 +1,49 @@
-.TH PNG 5 "April 1, 2017"
+.TH PNG 5 "April 14, 2019"
.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
+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
+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.
+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"
.BR "libpng"(3), " libpngpf"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5)
.LP
-PNG specification (second edition), November 2003:
+PNG Specification (Second Edition), November 2003:
.IP
.br
- <https://www.w3.org/TR/2003/REC-PNG-20031110/
-PNG 1.2 specification, July 1999:
+https://www.w3.org/TR/2003/REC-PNG-20031110/
+.LP
+PNG 1.2 Specification, July 1999:
.IP
.br
https://png-mng.sourceforge.io/pub/png/spec/1.2/
.LP
-PNG 1.0 specification, October 1996:
+PNG 1.0 Specification, October 1996:
.IP
.br
RFC 2083
-.IP
.br
https://www.ietf.org/rfc/rfc2083.txt
+.IP
.br
-or (as a W3C Recommendation) at
+or W3C Recommendation
.br
https://www.w3.org/TR/REC-png-961001
+
.SH AUTHORS
-This man page: Glenn Randers-Pehrson
+This man page: Cosmin Truta, Glenn Randers-Pehrson
.LP
Portable Network Graphics (PNG) Specification (Second Edition)
Information technology - Computer graphics and image processing -
@@ -53,22 +55,30 @@ 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
+.SH COPYRIGHT
.LP
-This man page is Copyright (c) 1998-2006 Glenn Randers-Pehrson. See png.h
-for conditions of use and distribution.
+This man page is
+.br
+Copyright (c) 2018-2019 Cosmin Truta.
+.br
+Copyright (c) 1998-2006 Glenn Randers-Pehrson.
+.br
+See png.h for conditions of use and distribution.
.LP
The PNG Specification (Second Edition) is
+.br
Copyright (c) 2003 W3C. (MIT, ERCIM, Keio), All Rights Reserved.
.LP
-The PNG-1.2 specification is copyright (c) 1999 Glenn Randers-Pehrson.
+The PNG-1.2 Specification is
+.br
+Copyright (c) 1999 Glenn Randers-Pehrson.
+.br
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
+The PNG-1.0 Specification is
+.br
+Copyright (c) 1996 Massachusetts Institute of Technology.
+.br
+See the specification for conditions of use and distribution.
.\" end of man page
-
diff --git a/libpng/png.c b/libpng/png.c
index ff02c565..757c755f 100644
--- a/libpng/png.c
+++ b/libpng/png.c
@@ -1,10 +1,10 @@
/* png.c - location for general purpose libpng functions
*
- * Last changed in libpng 1.6.33 [September 28, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -14,7 +14,7 @@
#include "pngpriv.h"
/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_34 Your_png_h_is_not_version_1_6_34;
+typedef png_libpng_version_1_6_37 Your_png_h_is_not_version_1_6_37;
#ifdef __GNUC__
/* The version tests may need to be added to, but the problem warning has
@@ -71,7 +71,7 @@ png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
* PNG signature (this is the same behavior as strcmp, memcmp, etc).
*/
int PNGAPI
-png_sig_cmp(png_const_bytep sig, png_size_t start, png_size_t num_to_check)
+png_sig_cmp(png_const_bytep sig, size_t start, size_t num_to_check)
{
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
@@ -136,7 +136,7 @@ png_reset_crc(png_structrp png_ptr)
* trouble of calculating it.
*/
void /* PRIVATE */
-png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
+png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, size_t length)
{
int need_crc = 1;
@@ -421,7 +421,7 @@ png_destroy_info_struct(png_const_structrp png_ptr, png_infopp info_ptr_ptr)
* those cases where it does anything other than a memset.
*/
PNG_FUNCTION(void,PNGAPI
-png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
+png_info_init_3,(png_infopp ptr_ptr, size_t png_info_struct_size),
PNG_DEPRECATED)
{
png_inforp info_ptr = *ptr_ptr;
@@ -736,7 +736,7 @@ png_save_int_32(png_bytep buf, png_int_32 i)
int PNGAPI
png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
{
- static PNG_CONST char short_months[12][4] =
+ static const char short_months[12][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
@@ -814,20 +814,14 @@ png_get_copyright(png_const_structrp png_ptr)
#ifdef PNG_STRING_COPYRIGHT
return PNG_STRING_COPYRIGHT
#else
-# ifdef __STDC__
return PNG_STRING_NEWLINE \
- "libpng version 1.6.34 - September 29, 2017" PNG_STRING_NEWLINE \
- "Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson" \
+ "libpng version 1.6.37" PNG_STRING_NEWLINE \
+ "Copyright (c) 2018-2019 Cosmin Truta" PNG_STRING_NEWLINE \
+ "Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson" \
PNG_STRING_NEWLINE \
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
PNG_STRING_NEWLINE;
-# else
- return "libpng version 1.6.34 - September 29, 2017\
- Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson\
- Copyright (c) 1996-1997 Andreas Dilger\
- Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
-# endif
#endif
}
@@ -942,7 +936,7 @@ png_handle_as_unknown(png_const_structrp png_ptr, png_const_bytep chunk_name)
/* The code is the fifth byte after each four byte string. Historically this
* code was always searched from the end of the list, this is no longer
- * necessary because the 'set' routine handles duplicate entries correcty.
+ * necessary because the 'set' routine handles duplicate entries correctly.
*/
do /* num_chunk_list > 0, so at least one */
{
@@ -1121,7 +1115,7 @@ png_colorspace_set_gamma(png_const_structrp png_ptr,
png_colorspacerp colorspace, png_fixed_point gAMA)
{
/* Changed in libpng-1.5.4 to limit the values to ensure overflow can't
- * occur. Since the fixed point representation is asymetrical it is
+ * occur. Since the fixed point representation is asymmetrical it is
* possible for 1/gamma to overflow the limit of 21474 and this means the
* gamma value must be at least 5/100000 and hence at most 20000.0. For
* safety the limits here are a little narrower. The values are 0.00016 to
@@ -2067,7 +2061,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
*/
/* Data checks (could be skipped). These checks must be independent of the
- * version number; however, the version number doesn't accomodate changes in
+ * version number; however, the version number doesn't accommodate changes in
* the header fields (just the known tags and the interpretation of the
* data.)
*/
@@ -2707,7 +2701,7 @@ png_check_IHDR(png_const_structrp png_ptr,
#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)
/* ASCII to fp functions */
-/* Check an ASCII formated floating point value, see the more detailed
+/* Check an ASCII formatted floating point value, see the more detailed
* comments in pngpriv.h
*/
/* The following is used internally to preserve the sticky flags */
@@ -2715,11 +2709,11 @@ png_check_IHDR(png_const_structrp png_ptr,
#define png_fp_set(state, value) ((state) = (value) | ((state) & PNG_FP_STICKY))
int /* PRIVATE */
-png_check_fp_number(png_const_charp string, png_size_t size, int *statep,
+png_check_fp_number(png_const_charp string, size_t size, int *statep,
png_size_tp whereami)
{
int state = *statep;
- png_size_t i = *whereami;
+ size_t i = *whereami;
while (i < size)
{
@@ -2842,10 +2836,10 @@ PNG_FP_End:
/* The same but for a complete string. */
int
-png_check_fp_string(png_const_charp string, png_size_t size)
+png_check_fp_string(png_const_charp string, size_t size)
{
int state=0;
- png_size_t char_index=0;
+ size_t char_index=0;
if (png_check_fp_number(string, size, &state, &char_index) != 0 &&
(char_index == size || string[char_index] == 0))
@@ -2906,7 +2900,7 @@ png_pow10(int power)
#pragma GCC diagnostic warning "-Wstrict-overflow=2"
#endif /* GCC_STRICT_OVERFLOW */
void /* PRIVATE */
-png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
+png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, size_t size,
double fp, unsigned int precision)
{
/* We use standard functions from math.h, but not printf because
@@ -3134,11 +3128,11 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
/* The total output count (max) is now 4+precision */
/* Check for an exponent, if we don't need one we are
- * done and just need to terminate the string. At
- * this point exp_b10==(-1) is effectively a flag - it got
- * to '-1' because of the decrement after outputting
- * the decimal point above (the exponent required is
- * *not* -1!)
+ * done and just need to terminate the string. At this
+ * point, exp_b10==(-1) is effectively a flag: it got
+ * to '-1' because of the decrement, after outputting
+ * the decimal point above. (The exponent required is
+ * *not* -1.)
*/
if (exp_b10 >= (-1) && exp_b10 <= 2)
{
@@ -3237,7 +3231,7 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
*/
void /* PRIVATE */
png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
- png_size_t size, png_fixed_point fp)
+ size_t size, png_fixed_point fp)
{
/* Require space for 10 decimal digits, a decimal point, a minus sign and a
* trailing \0, 13 characters:
@@ -3976,18 +3970,18 @@ png_gamma_correct(png_structrp png_ptr, unsigned int value,
*/
static void
png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
- PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
+ unsigned int shift, png_fixed_point gamma_val)
{
/* Various values derived from 'shift': */
- PNG_CONST unsigned int num = 1U << (8U - shift);
+ unsigned int num = 1U << (8U - shift);
#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
/* CSE the division and work round wacky GCC warnings (see the comments
* in png_gamma_8bit_correct for where these come from.)
*/
- PNG_CONST double fmax = 1./(((png_int_32)1 << (16U - shift))-1);
+ double fmax = 1.0 / (((png_int_32)1 << (16U - shift)) - 1);
#endif
- PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
- PNG_CONST unsigned int max_by_2 = 1U << (15U-shift);
+ unsigned int max = (1U << (16U - shift)) - 1U;
+ unsigned int max_by_2 = 1U << (15U - shift);
unsigned int i;
png_uint_16pp table = *ptable =
@@ -4053,10 +4047,10 @@ png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
*/
static void
png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
- PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
+ unsigned int shift, png_fixed_point gamma_val)
{
- PNG_CONST unsigned int num = 1U << (8U - shift);
- PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
+ unsigned int num = 1U << (8U - shift);
+ unsigned int max = (1U << (16U - shift))-1U;
unsigned int i;
png_uint_32 last;
@@ -4121,7 +4115,7 @@ png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
*/
static void
png_build_8bit_table(png_structrp png_ptr, png_bytepp ptable,
- PNG_CONST png_fixed_point gamma_val)
+ png_fixed_point gamma_val)
{
unsigned int i;
png_bytep table = *ptable = (png_bytep)png_malloc(png_ptr, 256);
@@ -4344,7 +4338,7 @@ png_set_option(png_structrp png_ptr, int option, int onoff)
png_uint_32 setting = (2U + (onoff != 0)) << option;
png_uint_32 current = png_ptr->options;
- png_ptr->options = (png_uint_32)(((current & ~mask) | setting) & 0xff);
+ png_ptr->options = (png_uint_32)((current & ~mask) | setting);
return (int)(current & mask) >> option;
}
@@ -4594,8 +4588,7 @@ png_image_free(png_imagep image)
if (image != NULL && image->opaque != NULL &&
image->opaque->error_buf == NULL)
{
- /* Ignore errors here: */
- (void)png_safe_execute(image, png_image_free_function, image);
+ png_image_free_function(image);
image->opaque = NULL;
}
}
diff --git a/libpng/png.h b/libpng/png.h
index 4c873f5c..139eb0dc 100644
--- a/libpng/png.h
+++ b/libpng/png.h
@@ -1,68 +1,105 @@
/* png.h - header file for PNG reference library
*
- * libpng version 1.6.34, September 29, 2017
+ * libpng version 1.6.37 - April 14, 2019
*
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
- * This code is released under the libpng license (See LICENSE, below)
+ * This code is released under the libpng license. (See LICENSE, below.)
*
* Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
- * libpng versions 0.97, January 1998, through 1.6.34, September 29, 2017:
- * Glenn Randers-Pehrson.
+ * libpng versions 0.97, January 1998, through 1.6.35, July 2018:
+ * Glenn Randers-Pehrson
+ * libpng versions 1.6.36, December 2018, through 1.6.37, April 2019:
+ * Cosmin Truta
* See also "Contributing Authors", below.
*/
/*
- * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+ * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
+ * =========================================
+ *
+ * PNG Reference Library License version 2
+ * ---------------------------------------
+ *
+ * * Copyright (c) 1995-2019 The PNG Reference Library Authors.
+ * * Copyright (c) 2018-2019 Cosmin Truta.
+ * * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * * Copyright (c) 1996-1997 Andreas Dilger.
+ * * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+ *
+ * The software is supplied "as is", without warranty of any kind,
+ * express or implied, including, without limitation, the warranties
+ * of merchantability, fitness for a particular purpose, title, and
+ * non-infringement. In no event shall the Copyright owners, or
+ * anyone distributing the software, be liable for any damages or
+ * other liability, whether in contract, tort or otherwise, arising
+ * from, out of, or in connection with the software, or the use or
+ * other dealings in the software, even if advised of the possibility
+ * of such damage.
+ *
+ * Permission is hereby granted to use, copy, modify, and distribute
+ * this software, or portions hereof, for any purpose, without fee,
+ * subject to the following restrictions:
*
- * If you modify libpng you may insert additional notices immediately following
- * this sentence.
+ * 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.
*
- * This code is released under the libpng license.
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
*
- * libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
- * Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
+ * 3. This Copyright notice may not be removed or altered from any
+ * source or altered source distribution.
+ *
+ *
+ * PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
+ * -----------------------------------------------------------------------
+ *
+ * libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
* derived from libpng-1.0.6, 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
- * Mans Rullgard
- * Cosmin Truta
- * Gilles Vollant
- * James Yu
- * Mandar Sahastrabuddhe
- * Google Inc.
- * Vadim Barkov
+ * Simon-Pierre Cadieux
+ * Eric S. Raymond
+ * Mans Rullgard
+ * Cosmin Truta
+ * Gilles Vollant
+ * James Yu
+ * Mandar Sahastrabuddhe
+ * Google Inc.
+ * Vadim Barkov
*
* 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.
+ * 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.
*
* Some files in the "contrib" directory and some configure-generated
- * files that are distributed with libpng have other copyright owners and
+ * files that are distributed with libpng have other copyright owners, and
* are released under other open source licenses.
*
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
* libpng-0.96, 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:
+ * license as libpng-0.96, with the following individuals added to the
+ * list of Contributing Authors:
*
- * Tom Lane
- * Glenn Randers-Pehrson
- * Willem van Schaik
+ * 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, are derived from libpng-0.88,
@@ -70,14 +107,14 @@
* 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
+ * John Bowler
+ * Kevin Bracey
+ * Sam Bushell
+ * Magnus Holmgren
+ * Greg Roelofs
+ * Tom Tanner
*
- * Some files in the "scripts" directory have other copyright owners
+ * Some files in the "scripts" directory have other copyright owners,
* but are released under this license.
*
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
@@ -86,62 +123,49 @@
* 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.
+ * 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.
+ * 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.
+ * 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.
+ * 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.
+ * 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.
*
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
*
- * TRADEMARK:
+ * TRADEMARK
+ * =========
*
- * The name "libpng" has not been registered by the Copyright owner
+ * The name "libpng" has not been registered by the Copyright owners
* as a trademark in any jurisdiction. However, because libpng has
* been distributed and maintained world-wide, continually since 1995,
- * the Copyright owner claims "common-law trademark protection" in any
+ * the Copyright owners claim "common-law trademark protection" in any
* jurisdiction where common-law trademark is recognized.
- *
- * OSI CERTIFICATION:
- *
- * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
- * a certification mark of the Open Source Initiative. OSI has not addressed
- * the additional disclaimers inserted at version 1.0.7.
- *
- * EXPORT CONTROL:
- *
- * The Copyright owner believes that the Export Control Classification
- * Number (ECCN) for libpng is EAR99, which means not subject to export
- * controls or International Traffic in Arms Regulations (ITAR) because
- * it is open source, publicly available software, that does not contain
- * any encryption software. See the EAR, paragraphs 734.3(b)(3) and
- * 734.7(b).
*/
/*
@@ -207,23 +231,25 @@
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
* 1.0.7 1 10007 (still compatible)
* ...
- * 1.0.19 10 10019 10.so.0.19[.0]
+ * 1.0.69 10 10069 10.so.0.69[.0]
+ * ...
+ * 1.2.59 13 10259 12.so.0.59[.0]
* ...
- * 1.2.59 13 10257 12.so.0.59[.0]
+ * 1.4.20 14 10420 14.so.0.20[.0]
* ...
- * 1.5.30 15 10527 15.so.15.30[.0]
+ * 1.5.30 15 10530 15.so.15.30[.0]
* ...
- * 1.6.34 16 10633 16.so.16.34[.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".
+ * 1.6.37 16 10637 16.so.16.37[.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
@@ -233,65 +259,8 @@
* 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,
- * <https://www.w3.org/TR/2003/REC-PNG-20031110/
- */
-
-/*
- * Y2K compliance in libpng:
- * =========================
- *
- * September 29, 2017
- *
- * 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.6.34 are Y2K compliant. It is my belief that
- * earlier versions were also Y2K compliant.
- *
- * Libpng only has two year fields. One is a 2-byte unsigned integer
- * that will hold years up to 65535. The other, which is deprecated,
- * holds the date in text format, and will hold years up to 9999.
- *
- * The integer is
- * "png_uint_16 year" in png_time_struct.
- *
- * The string is
- * "char time_buffer[29]" in png_struct. This is no longer used
- * in libpng-1.6.x and will be removed from libpng-1.7.0.
- *
- * There are seven time-related functions:
- * png.c: png_convert_to_rfc_1123_buffer() in png.c
- * (formerly png_convert_to_rfc_1123() prior to libpng-1.5.x and
- * png_convert_to_rfc_1152() in error prior to libpng-0.98)
- * 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 libpng applications
- * are not passing 4-digit years into the png_convert_to_rfc_1123_buffer()
- * 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
+ * is available as a W3C Recommendation and as an ISO/IEC Standard; see
+ * <https://www.w3.org/TR/2003/REC-PNG-20031110/>
*/
#ifndef PNG_H
@@ -309,8 +278,8 @@
*/
/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.6.34"
-#define PNG_HEADER_VERSION_STRING " libpng version 1.6.34 - September 29, 2017\n"
+#define PNG_LIBPNG_VER_STRING "1.6.37"
+#define PNG_HEADER_VERSION_STRING " libpng version 1.6.37 - April 14, 2019\n"
#define PNG_LIBPNG_VER_SONUM 16
#define PNG_LIBPNG_VER_DLLNUM 16
@@ -318,12 +287,11 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 6
-#define PNG_LIBPNG_VER_RELEASE 34
+#define PNG_LIBPNG_VER_RELEASE 37
-/* This should match the numeric part of the final component of
- * PNG_LIBPNG_VER_STRING, omitting any leading zero:
+/* This should be zero for a public release, or non-zero for a
+ * development version. [Deprecated]
*/
-
#define PNG_LIBPNG_VER_BUILD 0
/* Release Status */
@@ -343,13 +311,14 @@
#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
+/* 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 is:
+ * XXYYZZ, where XX=major, YY=minor, ZZ=release
*/
-#define PNG_LIBPNG_VER 10634 /* 1.6.34 */
+#define PNG_LIBPNG_VER 10637 /* 1.6.37 */
/* Library configuration: these options cannot be changed after
* the library has been built.
@@ -459,7 +428,7 @@ extern "C" {
/* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number.
*/
-typedef char* png_libpng_version_1_6_34;
+typedef char* png_libpng_version_1_6_37;
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
*
@@ -600,8 +569,8 @@ typedef struct png_text_struct
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 */
- png_size_t itxt_length; /* length of the itxt string */
+ size_t text_length; /* length of the text string */
+ 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
@@ -654,7 +623,7 @@ typedef struct png_unknown_chunk_t
{
png_byte name[5]; /* Textual chunk name with '\0' terminator */
png_byte *data; /* Data, should not be modified on read! */
- png_size_t size;
+ size_t size;
/* On write 'location' must be set using the flag values listed below.
* Notice that on read it is set by libpng however the values stored have
@@ -679,7 +648,7 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
/* 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))
+#define PNG_SIZE_MAX ((size_t)(-1))
/* These are constants for fixed point values encoded in the
* PNG specification manner (x100000)
@@ -785,7 +754,7 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
typedef struct png_row_info_struct
{
png_uint_32 width; /* width of row */
- png_size_t rowbytes; /* number of bytes in row */
+ size_t 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) */
@@ -804,7 +773,7 @@ typedef png_row_info * * png_row_infopp;
* expected to return the read data in the buffer.
*/
typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
-typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
+typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, size_t));
typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
int));
@@ -941,8 +910,8 @@ PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes));
* signature, and non-zero otherwise. Having num_to_check == 0 or
* start > 7 will always fail (ie return non-zero).
*/
-PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
- png_size_t num_to_check));
+PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, size_t start,
+ 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).
@@ -961,11 +930,11 @@ PNG_EXPORTA(5, png_structp, png_create_write_struct,
png_error_ptr warn_fn),
PNG_ALLOCATED);
-PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
+PNG_EXPORT(6, size_t, png_get_compression_buffer_size,
(png_const_structrp png_ptr));
PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr,
- png_size_t size));
+ size_t size));
/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
* match up.
@@ -1018,7 +987,7 @@ PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr));
/* Write a PNG chunk - size, type, (optional) data, CRC. */
PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep
- chunk_name, png_const_bytep data, png_size_t length));
+ chunk_name, png_const_bytep data, size_t length));
/* Write the start of a PNG chunk - length and chunk name. */
PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr,
@@ -1026,7 +995,7 @@ PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr,
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr,
- png_const_bytep data, png_size_t length));
+ png_const_bytep data, size_t length));
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr));
@@ -1040,7 +1009,7 @@ PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr),
* the API will be removed in the future.
*/
PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr,
- png_size_t png_info_struct_size), PNG_DEPRECATED);
+ size_t png_info_struct_size), PNG_DEPRECATED);
/* Writes all the PNG information before the image. */
PNG_EXPORT(20, void, png_write_info_before_PLTE,
@@ -1137,7 +1106,7 @@ PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,
* corresponding composited pixel, and the color channels are unassociated
* (not premultiplied). The gamma encoded color channels must be scaled
* according to the contribution and to do this it is necessary to undo
- * the encoding, scale the color values, perform the composition and reencode
+ * the encoding, scale the color values, perform the composition and re-encode
* the values. This is the 'PNG' mode.
*
* The alternative is to 'associate' the alpha with the color information by
@@ -1193,7 +1162,7 @@ PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr,
*
* png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
* In this case the output is assumed to be something like an sRGB conformant
- * display preceeded by a power-law lookup table of power 1.45. This is how
+ * display preceded by a power-law lookup table of power 1.45. This is how
* early Mac systems behaved.
*
* png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
@@ -1240,7 +1209,7 @@ PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr,
*
* When the default gamma of PNG files doesn't match the output gamma.
* If you have PNG files with no gamma information png_set_alpha_mode allows
- * you to provide a default gamma, but it also sets the ouput gamma to the
+ * you to provide a default gamma, but it also sets the output gamma to the
* matching value. If you know your PNG files have a gamma that doesn't
* match the output you can take advantage of the fact that
* png_set_alpha_mode always sets the output gamma but only sets the PNG
@@ -1691,7 +1660,7 @@ PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp));
* chunk will cause an error at this point unless it is to be saved.
* positive: The chunk was handled, libpng will ignore/discard it.
*
- * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about
+ * See "INTERACTION WITH USER CHUNK CALLBACKS" below for important notes about
* how this behavior will change in libpng 1.7
*/
PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr,
@@ -1716,7 +1685,7 @@ PNG_EXPORT(91, png_voidp, png_get_progressive_ptr,
/* Function to be called when data becomes available */
PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr,
- png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size));
+ png_inforp info_ptr, png_bytep buffer, size_t buffer_size));
/* A function which may be called *only* within png_process_data to stop the
* processing of any more data. The function returns the number of bytes
@@ -1725,7 +1694,7 @@ PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr,
* 'save' is set to true the routine will first save all the pending data and
* will always return 0.
*/
-PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save));
+PNG_EXPORT(219, size_t, png_process_data_pause, (png_structrp, int save));
/* A function which may be called *only* outside (after) a call to
* png_process_data. It returns the number of bytes of data to skip in the
@@ -1870,7 +1839,7 @@ PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr,
png_const_inforp info_ptr, png_uint_32 flag));
/* Returns number of bytes needed to hold a transformed row. */
-PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr,
+PNG_EXPORT(111, size_t, png_get_rowbytes, (png_const_structrp png_ptr,
png_const_inforp info_ptr));
#ifdef PNG_INFO_IMAGE_SUPPORTED
@@ -2013,12 +1982,12 @@ PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr,
PNG_EXPORT(246, png_uint_32, png_get_eXIf, (png_const_structrp png_ptr,
png_inforp info_ptr, png_bytep *exif));
PNG_EXPORT(247, void, png_set_eXIf, (png_const_structrp png_ptr,
- png_inforp info_ptr, const png_bytep exif));
+ png_inforp info_ptr, png_bytep exif));
PNG_EXPORT(248, png_uint_32, png_get_eXIf_1, (png_const_structrp png_ptr,
png_const_inforp info_ptr, png_uint_32 *num_exif, png_bytep *exif));
PNG_EXPORT(249, void, png_set_eXIf_1, (png_const_structrp png_ptr,
- png_inforp info_ptr, const png_uint_32 num_exif, const png_bytep exif));
+ png_inforp info_ptr, png_uint_32 num_exif, png_bytep exif));
#endif
#ifdef PNG_gAMA_SUPPORTED
@@ -2239,7 +2208,7 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
* to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks
* it simply resets the behavior to the libpng default.
*
- * INTERACTION WTIH USER CHUNK CALLBACKS:
+ * INTERACTION WITH USER CHUNK CALLBACKS:
* The per-chunk handling is always used when there is a png_user_chunk_ptr
* callback and the callback returns 0; the chunk is then always stored *unless*
* it is critical and the per-chunk setting is other than ALWAYS. Notice that
@@ -2658,7 +2627,7 @@ PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
* The simplified API hides the details of both libpng and the PNG file format
* itself. It allows PNG files to be read into a very limited number of
* in-memory bitmap formats or to be written from the same formats. If these
- * formats do not accomodate your needs then you can, and should, use the more
+ * formats do not accommodate your needs then you can, and should, use the more
* sophisticated APIs above - these support a wide variety of in-memory formats
* and a wide variety of sophisticated transformations to those formats as well
* as a wide variety of APIs to manipulate ancillary information.
@@ -2764,7 +2733,7 @@ typedef struct
*
* When the simplified API needs to convert between sRGB and linear colorspaces,
* the actual sRGB transfer curve defined in the sRGB specification (see the
- * article at https://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
+ * article at <https://en.wikipedia.org/wiki/SRGB>) is used, not the gamma=1/2.2
* approximation used elsewhere in libpng.
*
* When an alpha channel is present it is expected to denote pixel coverage
@@ -2967,7 +2936,7 @@ typedef struct
* 'flags' field of png_image.
*/
#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01
- /* This indicates the the RGB values of the in-memory bitmap do not
+ /* This indicates that the RGB values of the in-memory bitmap do not
* correspond to the red, green and blue end-points defined by sRGB.
*/
@@ -3020,7 +2989,7 @@ PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image,
#endif /* STDIO */
PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image,
- png_const_voidp memory, png_size_t size));
+ png_const_voidp memory, size_t size));
/* The PNG header is read from the given memory buffer. */
PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image,
@@ -3133,7 +3102,7 @@ PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
* than or equal to the original value.
*
* If the function returns false and *memory_bytes was not changed an error
- * occured during write. If *memory_bytes was changed, or is not 0 if
+ * occurred during write. If *memory_bytes was changed, or is not 0 if
* 'memory' was NULL, the write would have succeeded but for the memory
* buffer being too small. *memory_bytes contains the required number of
* bytes and will be bigger that the original value.
@@ -3217,7 +3186,7 @@ PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
* option and 'onoff' is 0 (off) or non-0 (on). The value returned is given
* by the PNG_OPTION_ defines below.
*
- * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions,
+ * HARDWARE: normally hardware capabilities, such as the Intel SSE instructions,
* are detected at run time, however sometimes it may be impossible
* to do this in user mode, in which case it is necessary to discover
* the capabilities in an OS specific way. Such capabilities are
diff --git a/libpng/pngconf.h b/libpng/pngconf.h
index d13b13e5..927a769d 100644
--- a/libpng/pngconf.h
+++ b/libpng/pngconf.h
@@ -1,11 +1,12 @@
-/* pngconf.h - machine configurable file for libpng
+/* pngconf.h - machine-configurable file for libpng
*
- * libpng version 1.6.34, September 29, 2017
+ * libpng version 1.6.37
*
- * Copyright (c) 1998-2002,2004,2006-2016 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -57,14 +58,13 @@
#endif /* PNG_BUILDING_SYMBOL_TABLE */
-/* Prior to 1.6.0 it was possible to turn off 'const' in declarations using
- * PNG_NO_CONST; this is no longer supported except for data declarations which
- * apparently still cause problems in 2011 on some compilers.
+/* Prior to 1.6.0, it was possible to turn off 'const' in declarations,
+ * using PNG_NO_CONST. This is no longer supported.
*/
#define PNG_CONST const /* backward compatibility only */
-/* This controls optimization of the reading of 16-bit and 32-bit values
- * from PNG files. It can be set on a per-app-file basis - it
+/* This controls optimization of the reading of 16-bit and 32-bit
+ * values from PNG files. It can be set on a per-app-file basis: it
* just changes whether a macro is used when the function is called.
* The library builder sets the default; if read functions are not
* built into the library the macro implementation is forced on.
@@ -127,7 +127,7 @@
*
* These cases only differ if the operating system does not use the C
* calling convention, at present this just means the above cases
- * (x86 DOS/Windows sytems) and, even then, this does not apply to
+ * (x86 DOS/Windows systems) and, even then, this does not apply to
* Cygwin running on those systems.
*
* Note that the value must be defined in pnglibconf.h so that what
@@ -515,8 +515,10 @@
# error "libpng requires an unsigned 32-bit (or more) type"
#endif
-/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
- * requires an ISOC90 compiler and relies on consistent behavior of sizeof.
+/* Prior to 1.6.0, it was possible to disable the use of size_t and ptrdiff_t.
+ * From 1.6.0 onwards, an ISO C90 compiler, as well as a standard-compliant
+ * behavior of sizeof and ptrdiff_t are required.
+ * The legacy typedefs are provided here for backwards compatibility.
*/
typedef size_t png_size_t;
typedef ptrdiff_t png_ptrdiff_t;
@@ -537,13 +539,12 @@ typedef ptrdiff_t png_ptrdiff_t;
# endif
#endif
-/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, and no
- * smaller than png_uint_32. Casts from png_size_t or png_uint_32 to
- * png_alloc_size_t are not necessary; in fact, it is recommended not to use
- * them at all so that the compiler can complain when something turns out to be
- * problematic.
+/* png_alloc_size_t is guaranteed to be no smaller than size_t, and no smaller
+ * than png_uint_32. Casts from size_t or png_uint_32 to png_alloc_size_t are
+ * not necessary; in fact, it is recommended not to use them at all, so that
+ * the compiler can complain when something turns out to be problematic.
*
- * Casts in the other direction (from png_alloc_size_t to png_size_t or
+ * Casts in the other direction (from png_alloc_size_t to size_t or
* png_uint_32) should be explicitly applied; however, we do not expect to
* encounter practical situations that require such conversions.
*
@@ -553,7 +554,7 @@ typedef ptrdiff_t png_ptrdiff_t;
#ifdef PNG_SMALL_SIZE_T
typedef png_uint_32 png_alloc_size_t;
#else
- typedef png_size_t png_alloc_size_t;
+ typedef size_t png_alloc_size_t;
#endif
/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler
@@ -589,8 +590,8 @@ typedef char * png_charp;
typedef const char * png_const_charp;
typedef png_fixed_point * png_fixed_point_p;
typedef const png_fixed_point * png_const_fixed_point_p;
-typedef png_size_t * png_size_tp;
-typedef const png_size_t * png_const_size_tp;
+typedef size_t * png_size_tp;
+typedef const size_t * png_const_size_tp;
#ifdef PNG_STDIO_SUPPORTED
typedef FILE * png_FILE_p;
diff --git a/libpng/pngdebug.h b/libpng/pngdebug.h
index 15a7ed0c..00d5a456 100644
--- a/libpng/pngdebug.h
+++ b/libpng/pngdebug.h
@@ -1,10 +1,10 @@
/* pngdebug.h - Debugging macros for libpng, also used in pngtest.c
*
- * Last changed in libpng 1.6.8 [December 19, 2013]
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2013 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.)
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
diff --git a/libpng/pngerror.c b/libpng/pngerror.c
index ad48bfb9..ec3a709b 100644
--- a/libpng/pngerror.c
+++ b/libpng/pngerror.c
@@ -1,10 +1,10 @@
/* pngerror.c - stub functions for i/o and memory allocation
*
- * Last changed in libpng 1.6.31 [July 27, 2017]
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -425,7 +425,7 @@ png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
* if the character is invalid.
*/
#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
-static PNG_CONST char png_digit[16] = {
+static const char png_digit[16] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'
};
@@ -885,7 +885,7 @@ PNG_FUNCTION(void /* PRIVATE */, (PNGCBAPI
png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
PNG_NORETURN)
{
- const png_const_structrp png_ptr = png_nonconst_ptr;
+ png_const_structrp png_ptr = png_nonconst_ptr;
png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
/* An error is always logged here, overwriting anything (typically a warning)
@@ -920,7 +920,7 @@ png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
void /* PRIVATE */ PNGCBAPI
png_safe_warning(png_structp png_nonconst_ptr, png_const_charp warning_message)
{
- const png_const_structrp png_ptr = png_nonconst_ptr;
+ png_const_structrp png_ptr = png_nonconst_ptr;
png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
/* A warning is only logged if there is no prior warning or error. */
diff --git a/libpng/pngget.c b/libpng/pngget.c
index 26e9fb1c..5abf1efd 100644
--- a/libpng/pngget.c
+++ b/libpng/pngget.c
@@ -1,10 +1,10 @@
/* pngget.c - retrieval of values from info struct
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -26,7 +26,7 @@ png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
return(0);
}
-png_size_t PNGAPI
+size_t PNGAPI
png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
{
if (png_ptr != NULL && info_ptr != NULL)
@@ -367,7 +367,7 @@ png_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
static png_fixed_point
png_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
{
- /* Convert from metres * 1,000,000 to inches * 100,000, meters to
+ /* Convert from meters * 1,000,000 to inches * 100,000, meters to
* inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
* Notice that this can overflow - a warning is output and 0 is
* returned.
@@ -741,8 +741,7 @@ png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
if (png_ptr != NULL && info_ptr != NULL &&
(info_ptr->valid & PNG_INFO_iCCP) != 0 &&
- name != NULL && compression_type != NULL && profile != NULL &&
- proflen != NULL)
+ name != NULL && profile != NULL && proflen != NULL)
{
*name = info_ptr->iccp_name;
*profile = info_ptr->iccp_profile;
@@ -750,11 +749,13 @@ png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
/* This is somewhat irrelevant since the profile data returned has
* actually been uncompressed.
*/
- *compression_type = PNG_COMPRESSION_TYPE_BASE;
+ if (compression_type != NULL)
+ *compression_type = PNG_COMPRESSION_TYPE_BASE;
return (PNG_INFO_iCCP);
}
return (0);
+
}
#endif
@@ -1164,7 +1165,7 @@ png_get_user_chunk_ptr(png_const_structrp png_ptr)
}
#endif
-png_size_t PNGAPI
+size_t PNGAPI
png_get_compression_buffer_size(png_const_structrp png_ptr)
{
if (png_ptr == NULL)
diff --git a/libpng/pnginfo.h b/libpng/pnginfo.h
index d5f6149d..1f98dedc 100644
--- a/libpng/pnginfo.h
+++ b/libpng/pnginfo.h
@@ -1,10 +1,10 @@
/* pnginfo.h - header file for PNG reference library
*
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2002,2004,2006-2013 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2013,2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -55,10 +55,10 @@
struct png_info_def
{
/* 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_size_t rowbytes; /* bytes needed to hold an untransformed row */
+ 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) */
+ size_t 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) */
@@ -247,7 +247,7 @@ defined(PNG_READ_BACKGROUND_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
+ * values. The values are width and height corresponding to one pixel
* in the image. Data values are valid if (valid & PNG_INFO_sCAL) is
* non-zero.
*/
diff --git a/libpng/pngmem.c b/libpng/pngmem.c
index ff3ef7e8..09ed9c1c 100644
--- a/libpng/pngmem.c
+++ b/libpng/pngmem.c
@@ -1,10 +1,10 @@
/* pngmem.c - stub functions for memory allocation
*
- * Last changed in libpng 1.6.26 [October 20, 2016]
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2014,2016 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.)
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
diff --git a/libpng/pngpread.c b/libpng/pngpread.c
index fbe361dc..e283627b 100644
--- a/libpng/pngpread.c
+++ b/libpng/pngpread.c
@@ -1,10 +1,10 @@
/* pngpread.c - read a png file in push mode
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -34,7 +34,7 @@ if (png_ptr->buffer_size < N) \
void PNGAPI
png_process_data(png_structrp png_ptr, png_inforp info_ptr,
- png_bytep buffer, png_size_t buffer_size)
+ png_bytep buffer, size_t buffer_size)
{
if (png_ptr == NULL || info_ptr == NULL)
return;
@@ -47,7 +47,7 @@ png_process_data(png_structrp png_ptr, png_inforp info_ptr,
}
}
-png_size_t PNGAPI
+size_t PNGAPI
png_process_data_pause(png_structrp png_ptr, int save)
{
if (png_ptr != NULL)
@@ -60,7 +60,7 @@ png_process_data_pause(png_structrp png_ptr, int save)
else
{
/* This includes any pending saved bytes: */
- png_size_t remaining = png_ptr->buffer_size;
+ size_t remaining = png_ptr->buffer_size;
png_ptr->buffer_size = 0;
/* So subtract the saved buffer size, unless all the data
@@ -133,8 +133,8 @@ png_process_some_data(png_structrp png_ptr, png_inforp info_ptr)
void /* PRIVATE */
png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
{
- png_size_t num_checked = png_ptr->sig_bytes, /* SAFE, does not exceed 8 */
- num_to_check = 8 - num_checked;
+ size_t num_checked = png_ptr->sig_bytes; /* SAFE, does not exceed 8 */
+ size_t num_to_check = 8 - num_checked;
if (png_ptr->buffer_size < num_to_check)
{
@@ -418,7 +418,7 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
}
void PNGCBAPI
-png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
+png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, size_t length)
{
png_bytep ptr;
@@ -428,7 +428,7 @@ png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
ptr = buffer;
if (png_ptr->save_buffer_size != 0)
{
- png_size_t save_size;
+ size_t save_size;
if (length < png_ptr->save_buffer_size)
save_size = length;
@@ -445,7 +445,7 @@ png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
}
if (length != 0 && png_ptr->current_buffer_size != 0)
{
- png_size_t save_size;
+ size_t save_size;
if (length < png_ptr->current_buffer_size)
save_size = length;
@@ -467,7 +467,7 @@ png_push_save_buffer(png_structrp png_ptr)
{
if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
{
- png_size_t i, istop;
+ size_t i, istop;
png_bytep sp;
png_bytep dp;
@@ -482,7 +482,7 @@ png_push_save_buffer(png_structrp png_ptr)
if (png_ptr->save_buffer_size + png_ptr->current_buffer_size >
png_ptr->save_buffer_max)
{
- png_size_t new_max;
+ size_t new_max;
png_bytep old_buffer;
if (png_ptr->save_buffer_size > PNG_SIZE_MAX -
@@ -494,7 +494,7 @@ png_push_save_buffer(png_structrp png_ptr)
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_warn(png_ptr,
- (png_size_t)new_max);
+ (size_t)new_max);
if (png_ptr->save_buffer == NULL)
{
@@ -522,7 +522,7 @@ png_push_save_buffer(png_structrp png_ptr)
void /* PRIVATE */
png_push_restore_buffer(png_structrp png_ptr, png_bytep buffer,
- png_size_t buffer_length)
+ size_t buffer_length)
{
png_ptr->current_buffer = buffer;
png_ptr->current_buffer_size = buffer_length;
@@ -562,7 +562,7 @@ png_push_read_IDAT(png_structrp png_ptr)
if (png_ptr->idat_size != 0 && png_ptr->save_buffer_size != 0)
{
- png_size_t save_size = png_ptr->save_buffer_size;
+ size_t save_size = png_ptr->save_buffer_size;
png_uint_32 idat_size = png_ptr->idat_size;
/* We want the smaller of 'idat_size' and 'current_buffer_size', but they
@@ -572,7 +572,7 @@ png_push_read_IDAT(png_structrp png_ptr)
* will break on either 16-bit or 64-bit platforms.
*/
if (idat_size < save_size)
- save_size = (png_size_t)idat_size;
+ save_size = (size_t)idat_size;
else
idat_size = (png_uint_32)save_size;
@@ -589,7 +589,7 @@ png_push_read_IDAT(png_structrp png_ptr)
if (png_ptr->idat_size != 0 && png_ptr->current_buffer_size != 0)
{
- png_size_t save_size = png_ptr->current_buffer_size;
+ size_t save_size = png_ptr->current_buffer_size;
png_uint_32 idat_size = png_ptr->idat_size;
/* We want the smaller of 'idat_size' and 'current_buffer_size', but they
@@ -598,7 +598,7 @@ png_push_read_IDAT(png_structrp png_ptr)
* larger - this cannot overflow.
*/
if (idat_size < save_size)
- save_size = (png_size_t)idat_size;
+ save_size = (size_t)idat_size;
else
idat_size = (png_uint_32)save_size;
@@ -625,7 +625,7 @@ png_push_read_IDAT(png_structrp png_ptr)
void /* PRIVATE */
png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
- png_size_t buffer_length)
+ size_t buffer_length)
{
/* The caller checks for a non-zero buffer length. */
if (!(buffer_length > 0) || buffer == NULL)
@@ -972,20 +972,20 @@ png_read_push_finish_row(png_structrp png_ptr)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
/* Start of interlace block in the y direction */
- static PNG_CONST png_byte png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
+ static const png_byte png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
/* Offset to next interlace block in the y direction */
- static PNG_CONST png_byte png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
+ static const png_byte 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
- static PNG_CONST png_byte png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
*/
#endif
diff --git a/libpng/pngpriv.h b/libpng/pngpriv.h
index 1f2e90f2..583c26f9 100644
--- a/libpng/pngpriv.h
+++ b/libpng/pngpriv.h
@@ -1,10 +1,10 @@
/* pngpriv.h - private declarations for use inside libpng
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -174,7 +174,10 @@
# else /* !defined __ARM_NEON__ */
/* The 'intrinsics' code simply won't compile without this -mfpu=neon:
*/
-# define PNG_ARM_NEON_IMPLEMENTATION 2
+# if !defined(__aarch64__)
+ /* The assembler code currently does not work on ARM64 */
+# define PNG_ARM_NEON_IMPLEMENTATION 2
+# endif /* __aarch64__ */
# endif /* __ARM_NEON__ */
# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
@@ -210,7 +213,11 @@
defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64) || \
(defined(_M_IX86_FP) && _M_IX86_FP >= 2)
# define PNG_INTEL_SSE_OPT 1
+# else
+# define PNG_INTEL_SSE_OPT 0
# endif
+# else
+# define PNG_INTEL_SSE_OPT 0
# endif
#endif
@@ -234,6 +241,8 @@
# if PNG_INTEL_SSE_IMPLEMENTATION > 0
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_sse2
# endif
+#else
+# define PNG_INTEL_SSE_IMPLEMENTATION 0
#endif
#if PNG_MIPS_MSA_OPT > 0
@@ -728,8 +737,8 @@
/* Added to libpng-1.2.6 JB */
#define PNG_ROWBYTES(pixel_bits, width) \
((pixel_bits) >= 8 ? \
- ((png_size_t)(width) * (((png_size_t)(pixel_bits)) >> 3)) : \
- (( ((png_size_t)(width) * ((png_size_t)(pixel_bits))) + 7) >> 3) )
+ ((size_t)(width) * (((size_t)(pixel_bits)) >> 3)) : \
+ (( ((size_t)(width) * ((size_t)(pixel_bits))) + 7) >> 3) )
/* This returns the number of trailing bits in the last byte of a row, 0 if the
* last byte is completely full of pixels. It is, in principle, (pixel_bits x
@@ -917,7 +926,7 @@
* PNG files the -I directives must match.
*
* The most likely explanation is that you passed a -I in CFLAGS. This will
- * not work; all the preprocessor directories and in particular all the -I
+ * not work; all the preprocessor directives and in particular all the -I
* directives must be in CPPFLAGS.
*/
#endif
@@ -1046,15 +1055,15 @@ PNG_INTERNAL_FUNCTION(void,png_zfree,(voidpf png_ptr, voidpf ptr),PNG_EMPTY);
*/
PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_read_data,(png_structp png_ptr,
- png_bytep data, png_size_t length),PNG_EMPTY);
+ png_bytep data, size_t length),PNG_EMPTY);
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_push_fill_buffer,(png_structp png_ptr,
- png_bytep buffer, png_size_t length),PNG_EMPTY);
+ png_bytep buffer, size_t length),PNG_EMPTY);
#endif
PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_write_data,(png_structp png_ptr,
- png_bytep data, png_size_t length),PNG_EMPTY);
+ png_bytep data, size_t length),PNG_EMPTY);
#ifdef PNG_WRITE_FLUSH_SUPPORTED
# ifdef PNG_STDIO_SUPPORTED
@@ -1068,7 +1077,7 @@ PNG_INTERNAL_FUNCTION(void,png_reset_crc,(png_structrp png_ptr),PNG_EMPTY);
/* Write the "data" buffer to whatever output you are using */
PNG_INTERNAL_FUNCTION(void,png_write_data,(png_structrp png_ptr,
- png_const_bytep data, png_size_t length),PNG_EMPTY);
+ png_const_bytep data, size_t length),PNG_EMPTY);
/* Read and check the PNG file signature */
PNG_INTERNAL_FUNCTION(void,png_read_sig,(png_structrp png_ptr,
@@ -1080,7 +1089,7 @@ PNG_INTERNAL_FUNCTION(png_uint_32,png_read_chunk_header,(png_structrp png_ptr),
/* Read data from whatever input you are using into the "data" buffer */
PNG_INTERNAL_FUNCTION(void,png_read_data,(png_structrp png_ptr, png_bytep data,
- png_size_t length),PNG_EMPTY);
+ size_t length),PNG_EMPTY);
/* Read bytes into buf, and update png_ptr->crc */
PNG_INTERNAL_FUNCTION(void,png_crc_read,(png_structrp png_ptr, png_bytep buf,
@@ -1098,7 +1107,7 @@ PNG_INTERNAL_FUNCTION(int,png_crc_error,(png_structrp png_ptr),PNG_EMPTY);
* since this is the maximum buffer size we can specify.
*/
PNG_INTERNAL_FUNCTION(void,png_calculate_crc,(png_structrp png_ptr,
- png_const_bytep ptr, png_size_t length),PNG_EMPTY);
+ png_const_bytep ptr, size_t length),PNG_EMPTY);
#ifdef PNG_WRITE_FLUSH_SUPPORTED
PNG_INTERNAL_FUNCTION(void,png_flush,(png_structrp png_ptr),PNG_EMPTY);
@@ -1181,7 +1190,7 @@ PNG_INTERNAL_FUNCTION(void,png_write_hIST,(png_structrp png_ptr,
/* Chunks that have keywords */
#ifdef PNG_WRITE_tEXt_SUPPORTED
PNG_INTERNAL_FUNCTION(void,png_write_tEXt,(png_structrp png_ptr,
- png_const_charp key, png_const_charp text, png_size_t text_len),PNG_EMPTY);
+ png_const_charp key, png_const_charp text, size_t text_len),PNG_EMPTY);
#endif
#ifdef PNG_WRITE_zTXt_SUPPORTED
@@ -1528,10 +1537,10 @@ PNG_INTERNAL_FUNCTION(void,png_handle_zTXt,(png_structrp png_ptr,
#endif
PNG_INTERNAL_FUNCTION(void,png_check_chunk_name,(png_const_structrp png_ptr,
- const png_uint_32 chunk_name),PNG_EMPTY);
+ png_uint_32 chunk_name),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_check_chunk_length,(png_const_structrp png_ptr,
- const png_uint_32 chunk_length),PNG_EMPTY);
+ png_uint_32 chunk_length),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_handle_unknown,(png_structrp png_ptr,
png_inforp info_ptr, png_uint_32 length, int keep),PNG_EMPTY);
@@ -1574,10 +1583,10 @@ PNG_INTERNAL_FUNCTION(void,png_push_check_crc,(png_structrp png_ptr),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_push_save_buffer,(png_structrp png_ptr),
PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_push_restore_buffer,(png_structrp png_ptr,
- png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
+ png_bytep buffer, size_t buffer_length),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_push_read_IDAT,(png_structrp png_ptr),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_process_IDAT_data,(png_structrp png_ptr,
- png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
+ png_bytep buffer, size_t buffer_length),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_push_process_row,(png_structrp png_ptr),
PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_push_handle_unknown,(png_structrp png_ptr,
@@ -1847,13 +1856,13 @@ PNG_INTERNAL_FUNCTION(void,png_chunk_report,(png_const_structrp png_ptr,
#ifdef PNG_FLOATING_POINT_SUPPORTED
PNG_INTERNAL_FUNCTION(void,png_ascii_from_fp,(png_const_structrp png_ptr,
- png_charp ascii, png_size_t size, double fp, unsigned int precision),
+ png_charp ascii, size_t size, double fp, unsigned int precision),
PNG_EMPTY);
#endif /* FLOATING_POINT */
#ifdef PNG_FIXED_POINT_SUPPORTED
PNG_INTERNAL_FUNCTION(void,png_ascii_from_fixed,(png_const_structrp png_ptr,
- png_charp ascii, png_size_t size, png_fixed_point fp),PNG_EMPTY);
+ png_charp ascii, size_t size, png_fixed_point fp),PNG_EMPTY);
#endif /* FIXED_POINT */
#endif /* sCAL */
@@ -1946,7 +1955,7 @@ PNG_INTERNAL_FUNCTION(void,png_ascii_from_fixed,(png_const_structrp png_ptr,
* the problem character.) This has not been tested within libpng.
*/
PNG_INTERNAL_FUNCTION(int,png_check_fp_number,(png_const_charp string,
- png_size_t size, int *statep, png_size_tp whereami),PNG_EMPTY);
+ size_t size, int *statep, png_size_tp whereami),PNG_EMPTY);
/* This is the same but it checks a complete string and returns true
* only if it just contains a floating point number. As of 1.5.4 this
@@ -1955,7 +1964,7 @@ PNG_INTERNAL_FUNCTION(int,png_check_fp_number,(png_const_charp string,
* for negative or zero values using the sticky flag.
*/
PNG_INTERNAL_FUNCTION(int,png_check_fp_string,(png_const_charp string,
- png_size_t size),PNG_EMPTY);
+ size_t size),PNG_EMPTY);
#endif /* pCAL || sCAL */
#if defined(PNG_GAMMA_SUPPORTED) ||\
@@ -2030,7 +2039,7 @@ typedef struct png_control
png_voidp error_buf; /* Always a jmp_buf at present. */
png_const_bytep memory; /* Memory buffer. */
- png_size_t size; /* Size of the memory buffer. */
+ size_t size; /* Size of the memory buffer. */
unsigned int for_write :1; /* Otherwise it is a read structure */
unsigned int owned_file :1; /* We own the file in io_ptr */
@@ -2108,6 +2117,29 @@ PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_sse2,
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
png_const_charp key, png_bytep new_key), PNG_EMPTY);
+#if PNG_ARM_NEON_IMPLEMENTATION == 1
+PNG_INTERNAL_FUNCTION(void,
+ png_riffle_palette_neon,
+ (png_structrp),
+ PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(int,
+ png_do_expand_palette_rgba8_neon,
+ (png_structrp,
+ png_row_infop,
+ png_const_bytep,
+ const png_bytepp,
+ const png_bytepp),
+ PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(int,
+ png_do_expand_palette_rgb8_neon,
+ (png_structrp,
+ png_row_infop,
+ png_const_bytep,
+ const png_bytepp,
+ const png_bytepp),
+ PNG_EMPTY);
+#endif
+
/* Maintainer: Put new private prototypes here ^ */
#include "pngdebug.h"
diff --git a/libpng/pngread.c b/libpng/pngread.c
index da32e9ad..8fa7d9f1 100644
--- a/libpng/pngread.c
+++ b/libpng/pngread.c
@@ -1,10 +1,10 @@
/* pngread.c - read a PNG file
*
- * Last changed in libpng 1.6.33 [September 28, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -994,6 +994,12 @@ png_read_destroy(png_structrp png_ptr)
png_ptr->chunk_list = NULL;
#endif
+#if defined(PNG_READ_EXPAND_SUPPORTED) && \
+ defined(PNG_ARM_NEON_IMPLEMENTATION)
+ png_free(png_ptr, png_ptr->riffled_palette);
+ png_ptr->riffled_palette = NULL;
+#endif
+
/* NOTE: the 'setjmp' buffer may still be allocated and the memory and error
* callbacks are still set at this point. They are required to complete the
* destruction of the png_struct itself.
@@ -1532,7 +1538,7 @@ png_image_begin_read_from_file(png_imagep image, const char *file_name)
#endif /* STDIO */
static void PNGCBAPI
-png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
+png_image_memory_read(png_structp png_ptr, png_bytep out, size_t need)
{
if (png_ptr != NULL)
{
@@ -1543,7 +1549,7 @@ png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
if (cp != NULL)
{
png_const_bytep memory = cp->memory;
- png_size_t size = cp->size;
+ size_t size = cp->size;
if (memory != NULL && size >= need)
{
@@ -1562,7 +1568,7 @@ png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
}
int PNGAPI png_image_begin_read_from_memory(png_imagep image,
- png_const_voidp memory, png_size_t size)
+ png_const_voidp memory, size_t size)
{
if (image != NULL && image->version == PNG_IMAGE_VERSION)
{
@@ -1621,7 +1627,7 @@ png_image_skip_unused_chunks(png_structrp png_ptr)
* errors (which are unfortunately quite common.)
*/
{
- static PNG_CONST png_byte chunks_to_process[] = {
+ static const png_byte chunks_to_process[] = {
98, 75, 71, 68, '\0', /* bKGD */
99, 72, 82, 77, '\0', /* cHRM */
103, 65, 77, 65, '\0', /* gAMA */
@@ -1758,9 +1764,9 @@ png_create_colormap_entry(png_image_read_control *display,
png_uint_32 alpha, int encoding)
{
png_imagep image = display->image;
- const int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
+ int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
P_LINEAR : P_sRGB;
- const int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
+ int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
(red != green || green != blue);
if (ip > 255)
@@ -1869,13 +1875,13 @@ png_create_colormap_entry(png_image_read_control *display,
/* Store the value. */
{
# ifdef PNG_FORMAT_AFIRST_SUPPORTED
- const int afirst = (image->format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
+ int afirst = (image->format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
(image->format & PNG_FORMAT_FLAG_ALPHA) != 0;
# else
# define afirst 0
# endif
# ifdef PNG_FORMAT_BGR_SUPPORTED
- const int bgr = (image->format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
+ int bgr = (image->format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
# else
# define bgr 0
# endif
@@ -2085,11 +2091,11 @@ png_image_read_colormap(png_voidp argument)
{
png_image_read_control *display =
png_voidcast(png_image_read_control*, argument);
- const png_imagep image = display->image;
+ png_imagep image = display->image;
- const png_structrp png_ptr = image->opaque->png_ptr;
- const png_uint_32 output_format = image->format;
- const int output_encoding = (output_format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
+ png_structrp png_ptr = image->opaque->png_ptr;
+ png_uint_32 output_format = image->format;
+ int output_encoding = (output_format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
P_LINEAR : P_sRGB;
unsigned int cmap_entries;
@@ -2802,7 +2808,7 @@ png_image_read_colormap(png_voidp argument)
unsigned int num_trans = png_ptr->num_trans;
png_const_bytep trans = num_trans > 0 ? png_ptr->trans_alpha : NULL;
png_const_colorp colormap = png_ptr->palette;
- const int do_background = trans != NULL &&
+ int do_background = trans != NULL &&
(output_format & PNG_FORMAT_FLAG_ALPHA) == 0;
unsigned int i;
@@ -3946,7 +3952,7 @@ png_image_read_direct(png_voidp argument)
*/
if (linear != 0)
{
- PNG_CONST png_uint_16 le = 0x0001;
+ png_uint_16 le = 0x0001;
if ((*(png_const_bytep) & le) != 0)
png_set_swap(png_ptr);
@@ -4108,7 +4114,7 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
* original PNG format because it may not occur in the output PNG format
* and libpng deals with the issues of reading the original.
*/
- const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
+ unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
/* The following checks just the 'row_stride' calculation to ensure it
* fits in a signed 32-bit value. Because channels/components can be
@@ -4119,7 +4125,7 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
if (image->width <= 0x7fffffffU/channels) /* no overflow */
{
png_uint_32 check;
- const png_uint_32 png_row_stride = image->width * channels;
+ png_uint_32 png_row_stride = image->width * channels;
if (row_stride == 0)
row_stride = (png_int_32)/*SAFE*/png_row_stride;
@@ -4150,7 +4156,7 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
*
* NOTE: this will be changed in 1.7 because PNG_IMAGE_BUFFER_SIZE
* will be changed to use png_alloc_size_t; bigger images can be
- * accomodated on 64-bit systems.
+ * accommodated on 64-bit systems.
*/
if (image->height <=
0xffffffffU/PNG_IMAGE_PIXEL_COMPONENT_SIZE(image->format)/check)
diff --git a/libpng/pngrio.c b/libpng/pngrio.c
index 7e26e855..79463581 100644
--- a/libpng/pngrio.c
+++ b/libpng/pngrio.c
@@ -1,10 +1,10 @@
/* pngrio.c - functions for data input
*
- * Last changed in libpng 1.6.24 [August 4, 2016]
- * Copyright (c) 1998-2002,2004,2006-2016 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -29,7 +29,7 @@
* to read more than 64K on a 16-bit machine.
*/
void /* PRIVATE */
-png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
+png_read_data(png_structrp png_ptr, png_bytep data, size_t length)
{
png_debug1(4, "reading %d bytes", (int)length);
@@ -47,14 +47,14 @@ png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
* than changing the library.
*/
void PNGCBAPI
-png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
+png_default_read_data(png_structp png_ptr, png_bytep data, size_t length)
{
- png_size_t check;
+ 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
+ /* fread() returns 0 on error, so it is OK to store this in a size_t
* instead of an int, which is what fread() actually returns.
*/
check = fread(data, 1, length, png_voidcast(png_FILE_p, png_ptr->io_ptr));
diff --git a/libpng/pngrtran.c b/libpng/pngrtran.c
index c1896503..9a8fad9f 100644
--- a/libpng/pngrtran.c
+++ b/libpng/pngrtran.c
@@ -1,10 +1,10 @@
/* pngrtran.c - transforms the data in a row for PNG readers
*
- * Last changed in libpng 1.6.33 [September 28, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -18,6 +18,17 @@
#include "pngpriv.h"
+#ifdef PNG_ARM_NEON_IMPLEMENTATION
+# if PNG_ARM_NEON_IMPLEMENTATION == 1
+# define PNG_ARM_NEON_INTRINSICS_AVAILABLE
+# if defined(_MSC_VER) && defined(_M_ARM64)
+# include <arm64_neon.h>
+# else
+# include <arm_neon.h>
+# endif
+# endif
+#endif
+
#ifdef PNG_READ_SUPPORTED
/* Set the action on getting a CRC error for an ancillary or critical chunk. */
@@ -292,7 +303,7 @@ png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
* who use the inverse of the gamma value accidentally! Since some of these
* values are reasonable this may have to be changed:
*
- * 1.6.x: changed from 0.07..3 to 0.01..100 (to accomodate the optimal 16-bit
+ * 1.6.x: changed from 0.07..3 to 0.01..100 (to accommodate the optimal 16-bit
* gamma of 36, and its reciprocal.)
*/
if (output_gamma < 1000 || output_gamma > 10000000)
@@ -747,7 +758,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
int num_red = (1 << PNG_QUANTIZE_RED_BITS);
int num_green = (1 << PNG_QUANTIZE_GREEN_BITS);
int num_blue = (1 << PNG_QUANTIZE_BLUE_BITS);
- png_size_t num_entries = ((png_size_t)1 << total_bits);
+ size_t num_entries = ((size_t)1 << total_bits);
png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
(png_alloc_size_t)(num_entries * (sizeof (png_byte))));
@@ -1171,20 +1182,20 @@ png_init_palette_transformations(png_structrp png_ptr)
png_ptr->palette[png_ptr->background.index].blue;
#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
- if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
- {
- if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
- {
- /* Invert the alpha channel (in tRNS) unless the pixels are
- * going to be expanded, in which case leave it for later
- */
- int i, istop = png_ptr->num_trans;
-
- for (i=0; i<istop; i++)
- png_ptr->trans_alpha[i] = (png_byte)(255 -
- png_ptr->trans_alpha[i]);
- }
- }
+ if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
+ {
+ if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
+ {
+ /* Invert the alpha channel (in tRNS) unless the pixels are
+ * going to be expanded, in which case leave it for later
+ */
+ int i, istop = png_ptr->num_trans;
+
+ for (i = 0; i < istop; i++)
+ png_ptr->trans_alpha[i] =
+ (png_byte)(255 - png_ptr->trans_alpha[i]);
+ }
+ }
#endif /* READ_INVERT_ALPHA */
}
} /* background expand and (therefore) no alpha association. */
@@ -1317,7 +1328,7 @@ png_init_read_transformations(png_structrp png_ptr)
else if (png_ptr->screen_gamma != 0)
/* The converse - assume the file matches the screen, note that this
- * perhaps undesireable default can (from 1.5.4) be changed by calling
+ * perhaps undesirable default can (from 1.5.4) be changed by calling
* png_set_alpha_mode (even if the alpha handling mode isn't required
* or isn't changed from the default.)
*/
@@ -1885,7 +1896,7 @@ png_init_read_transformations(png_structrp png_ptr)
png_ptr->transformations &= ~PNG_SHIFT;
- /* significant bits can be in the range 1 to 7 for a meaninful result, if
+ /* significant bits can be in the range 1 to 7 for a meaningful result, if
* the number of significant bits is 0 then no shift is done (this is an
* error condition which is silently ignored.)
*/
@@ -2151,8 +2162,8 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
{
case 1:
{
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
- png_bytep dp = row + (png_size_t)row_width - 1;
+ png_bytep sp = row + (size_t)((row_width - 1) >> 3);
+ png_bytep dp = row + (size_t)row_width - 1;
png_uint_32 shift = 7U - ((row_width + 7U) & 0x07);
for (i = 0; i < row_width; i++)
{
@@ -2175,8 +2186,8 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
case 2:
{
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
- png_bytep dp = row + (png_size_t)row_width - 1;
+ png_bytep sp = row + (size_t)((row_width - 1) >> 2);
+ png_bytep dp = row + (size_t)row_width - 1;
png_uint_32 shift = ((3U - ((row_width + 3U) & 0x03)) << 1);
for (i = 0; i < row_width; i++)
{
@@ -2198,8 +2209,8 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
case 4:
{
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
- png_bytep dp = row + (png_size_t)row_width - 1;
+ png_bytep sp = row + (size_t)((row_width - 1) >> 1);
+ png_bytep dp = row + (size_t)row_width - 1;
png_uint_32 shift = ((1U - ((row_width + 1U) & 0x01)) << 2);
for (i = 0; i < row_width; i++)
{
@@ -2463,95 +2474,94 @@ png_do_chop(png_row_infop row_info, png_bytep row)
static void
png_do_read_swap_alpha(png_row_infop row_info, png_bytep row)
{
+ png_uint_32 row_width = row_info->width;
+
png_debug(1, "in png_do_read_swap_alpha");
+ if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
{
- 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)
{
- /* 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;
+ 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;
- }
+ for (i = 0; i < row_width; i++)
+ {
+ save = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = save;
}
+ }
#ifdef PNG_READ_16BIT_SUPPORTED
- /* 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;
+ /* 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];
- }
+ 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];
}
-#endif
}
+#endif
+ }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ {
+ /* This converts from GA to AG */
+ if (row_info->bit_depth == 8)
{
- /* 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;
+ 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;
- }
+ for (i = 0; i < row_width; i++)
+ {
+ save = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = save;
}
+ }
#ifdef PNG_READ_16BIT_SUPPORTED
- /* 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;
+ /* 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];
- }
+ for (i = 0; i < row_width; i++)
+ {
+ save[0] = *(--sp);
+ save[1] = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = *(--sp);
+ *(--dp) = save[0];
+ *(--dp) = save[1];
}
-#endif
}
+#endif
}
}
#endif
@@ -2681,8 +2691,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
{
/* This changes the data from G to GX */
- png_bytep sp = row + (png_size_t)row_width;
- png_bytep dp = sp + (png_size_t)row_width;
+ png_bytep sp = row + (size_t)row_width;
+ png_bytep dp = sp + (size_t)row_width;
for (i = 1; i < row_width; i++)
{
*(--dp) = lo_filler;
@@ -2697,8 +2707,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
else
{
/* This changes the data from G to XG */
- png_bytep sp = row + (png_size_t)row_width;
- png_bytep dp = sp + (png_size_t)row_width;
+ png_bytep sp = row + (size_t)row_width;
+ png_bytep dp = sp + (size_t)row_width;
for (i = 0; i < row_width; i++)
{
*(--dp) = *(--sp);
@@ -2716,8 +2726,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
{
/* This changes the data from GG to GGXX */
- png_bytep sp = row + (png_size_t)row_width * 2;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width * 2;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 1; i < row_width; i++)
{
*(--dp) = lo_filler;
@@ -2735,8 +2745,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
else
{
/* This changes the data from GG to XXGG */
- png_bytep sp = row + (png_size_t)row_width * 2;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width * 2;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 0; i < row_width; i++)
{
*(--dp) = *(--sp);
@@ -2758,8 +2768,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
{
/* This changes the data from RGB to RGBX */
- png_bytep sp = row + (png_size_t)row_width * 3;
- png_bytep dp = sp + (png_size_t)row_width;
+ png_bytep sp = row + (size_t)row_width * 3;
+ png_bytep dp = sp + (size_t)row_width;
for (i = 1; i < row_width; i++)
{
*(--dp) = lo_filler;
@@ -2776,8 +2786,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
else
{
/* This changes the data from RGB to XRGB */
- png_bytep sp = row + (png_size_t)row_width * 3;
- png_bytep dp = sp + (png_size_t)row_width;
+ png_bytep sp = row + (size_t)row_width * 3;
+ png_bytep dp = sp + (size_t)row_width;
for (i = 0; i < row_width; i++)
{
*(--dp) = *(--sp);
@@ -2797,8 +2807,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
{
/* This changes the data from RRGGBB to RRGGBBXX */
- png_bytep sp = row + (png_size_t)row_width * 6;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width * 6;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 1; i < row_width; i++)
{
*(--dp) = lo_filler;
@@ -2820,8 +2830,8 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
else
{
/* This changes the data from RRGGBB to XXRRGGBB */
- png_bytep sp = row + (png_size_t)row_width * 6;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width * 6;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 0; i < row_width; i++)
{
*(--dp) = *(--sp);
@@ -2862,8 +2872,8 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
if (row_info->bit_depth == 8)
{
/* This changes G to RGB */
- png_bytep sp = row + (png_size_t)row_width - 1;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width - 1;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 0; i < row_width; i++)
{
*(dp--) = *sp;
@@ -2875,8 +2885,8 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
else
{
/* This changes GG to RRGGBB */
- png_bytep sp = row + (png_size_t)row_width * 2 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 4;
+ png_bytep sp = row + (size_t)row_width * 2 - 1;
+ png_bytep dp = sp + (size_t)row_width * 4;
for (i = 0; i < row_width; i++)
{
*(dp--) = *sp;
@@ -2894,8 +2904,8 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
if (row_info->bit_depth == 8)
{
/* This changes GA to RGBA */
- png_bytep sp = row + (png_size_t)row_width * 2 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 2;
+ png_bytep sp = row + (size_t)row_width * 2 - 1;
+ png_bytep dp = sp + (size_t)row_width * 2;
for (i = 0; i < row_width; i++)
{
*(dp--) = *(sp--);
@@ -2908,8 +2918,8 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
else
{
/* This changes GGAA to RRGGBBAA */
- png_bytep sp = row + (png_size_t)row_width * 4 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 4;
+ png_bytep sp = row + (size_t)row_width * 4 - 1;
+ png_bytep dp = sp + (size_t)row_width * 4;
for (i = 0; i < row_width; i++)
{
*(dp--) = *(sp--);
@@ -2980,14 +2990,13 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
* values this results in an implicit assumption that the original PNG RGB
* values were linear.
*
- * Other integer coefficents can be used via png_set_rgb_to_gray(). Because
+ * Other integer coefficients can be used via png_set_rgb_to_gray(). Because
* the API takes just red and green coefficients the blue coefficient is
* calculated to make the sum 32768. This will result in different rounding
* to that used above.
*/
static int
png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
-
{
int rgb_error = 0;
@@ -2996,12 +3005,11 @@ png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
if ((row_info->color_type & PNG_COLOR_MASK_PALETTE) == 0 &&
(row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
{
- PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
- PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
- PNG_CONST png_uint_32 bc = 32768 - rc - gc;
- PNG_CONST png_uint_32 row_width = row_info->width;
- PNG_CONST int have_alpha =
- (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
+ 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 = 32768 - rc - gc;
+ png_uint_32 row_width = row_info->width;
+ int have_alpha = (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
if (row_info->bit_depth == 8)
{
@@ -3209,720 +3217,718 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
png_debug(1, "in png_do_compose");
+ switch (row_info->color_type)
{
- switch (row_info->color_type)
+ case PNG_COLOR_TYPE_GRAY:
{
- case PNG_COLOR_TYPE_GRAY:
+ switch (row_info->bit_depth)
{
- 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)
+ == png_ptr->trans_color.gray)
+ {
+ unsigned int tmp = *sp & (0x7f7f >> (7 - shift));
+ tmp |=
+ (unsigned int)(png_ptr->background.gray << shift);
+ *sp = (png_byte)(tmp & 0xff);
+ }
+
+ if (shift == 0)
+ {
+ shift = 7;
+ sp++;
+ }
+
+ else
+ shift--;
+ }
+ break;
+ }
+
+ case 2:
{
- case 1:
+#ifdef PNG_READ_GAMMA_SUPPORTED
+ if (gamma_table != NULL)
{
sp = row;
- shift = 7;
+ shift = 6;
for (i = 0; i < row_width; i++)
{
- if ((png_uint_16)((*sp >> shift) & 0x01)
- == png_ptr->trans_color.gray)
+ if ((png_uint_16)((*sp >> shift) & 0x03)
+ == png_ptr->trans_color.gray)
{
- unsigned int tmp = *sp & (0x7f7f >> (7 - shift));
+ unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
tmp |=
- (unsigned int)(png_ptr->background.gray << shift);
+ (unsigned int)png_ptr->background.gray << shift;
+ *sp = (png_byte)(tmp & 0xff);
+ }
+
+ else
+ {
+ unsigned int p = (*sp >> shift) & 0x03;
+ unsigned int g = (gamma_table [p | (p << 2) |
+ (p << 4) | (p << 6)] >> 6) & 0x03;
+ unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
+ tmp |= (unsigned int)(g << shift);
*sp = (png_byte)(tmp & 0xff);
}
if (shift == 0)
{
- shift = 7;
+ shift = 6;
sp++;
}
else
- shift--;
+ shift -= 2;
}
- break;
}
- case 2:
+ else
+#endif
{
-#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_table != NULL)
+ sp = row;
+ shift = 6;
+ for (i = 0; i < row_width; i++)
{
- sp = row;
- shift = 6;
- for (i = 0; i < row_width; i++)
+ if ((png_uint_16)((*sp >> shift) & 0x03)
+ == png_ptr->trans_color.gray)
{
- if ((png_uint_16)((*sp >> shift) & 0x03)
- == png_ptr->trans_color.gray)
- {
- unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
- tmp |=
- (unsigned int)png_ptr->background.gray << shift;
- *sp = (png_byte)(tmp & 0xff);
- }
-
- else
- {
- unsigned int p = (*sp >> shift) & 0x03;
- unsigned int g = (gamma_table [p | (p << 2) |
- (p << 4) | (p << 6)] >> 6) & 0x03;
- unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
- tmp |= (unsigned int)(g << shift);
- *sp = (png_byte)(tmp & 0xff);
- }
-
- if (shift == 0)
- {
- shift = 6;
- sp++;
- }
-
- else
- shift -= 2;
+ unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
+ tmp |=
+ (unsigned int)png_ptr->background.gray << shift;
+ *sp = (png_byte)(tmp & 0xff);
}
- }
- else
-#endif
- {
- sp = row;
- shift = 6;
- for (i = 0; i < row_width; i++)
+ if (shift == 0)
{
- if ((png_uint_16)((*sp >> shift) & 0x03)
- == png_ptr->trans_color.gray)
- {
- unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
- tmp |=
- (unsigned int)png_ptr->background.gray << shift;
- *sp = (png_byte)(tmp & 0xff);
- }
-
- if (shift == 0)
- {
- shift = 6;
- sp++;
- }
-
- else
- shift -= 2;
+ shift = 6;
+ sp++;
}
+
+ else
+ shift -= 2;
}
- break;
}
+ break;
+ }
- case 4:
- {
+ case 4:
+ {
#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_table != NULL)
+ if (gamma_table != NULL)
+ {
+ sp = row;
+ shift = 4;
+ for (i = 0; i < row_width; i++)
{
- sp = row;
- shift = 4;
- for (i = 0; i < row_width; i++)
+ if ((png_uint_16)((*sp >> shift) & 0x0f)
+ == png_ptr->trans_color.gray)
{
- if ((png_uint_16)((*sp >> shift) & 0x0f)
- == png_ptr->trans_color.gray)
- {
- unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
- tmp |=
- (unsigned int)(png_ptr->background.gray << shift);
- *sp = (png_byte)(tmp & 0xff);
- }
-
- else
- {
- unsigned int p = (*sp >> shift) & 0x0f;
- unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
- 0x0f;
- unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
- tmp |= (unsigned int)(g << shift);
- *sp = (png_byte)(tmp & 0xff);
- }
-
- if (shift == 0)
- {
- shift = 4;
- sp++;
- }
-
- else
- shift -= 4;
+ unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
+ tmp |=
+ (unsigned int)(png_ptr->background.gray << shift);
+ *sp = (png_byte)(tmp & 0xff);
}
- }
- else
-#endif
- {
- sp = row;
- shift = 4;
- for (i = 0; i < row_width; i++)
+ else
{
- if ((png_uint_16)((*sp >> shift) & 0x0f)
- == png_ptr->trans_color.gray)
- {
- unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
- tmp |=
- (unsigned int)(png_ptr->background.gray << shift);
- *sp = (png_byte)(tmp & 0xff);
- }
-
- if (shift == 0)
- {
- shift = 4;
- sp++;
- }
-
- else
- shift -= 4;
+ unsigned int p = (*sp >> shift) & 0x0f;
+ unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
+ 0x0f;
+ unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
+ tmp |= (unsigned int)(g << shift);
+ *sp = (png_byte)(tmp & 0xff);
}
- }
- break;
- }
-
- case 8:
- {
-#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_table != NULL)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp++)
- {
- if (*sp == png_ptr->trans_color.gray)
- *sp = (png_byte)png_ptr->background.gray;
- else
- *sp = gamma_table[*sp];
- }
- }
- else
-#endif
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp++)
+ if (shift == 0)
{
- if (*sp == png_ptr->trans_color.gray)
- *sp = (png_byte)png_ptr->background.gray;
+ shift = 4;
+ sp++;
}
+
+ else
+ shift -= 4;
}
- break;
}
- case 16:
+ else
+#endif
{
-#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_16 != NULL)
+ sp = row;
+ shift = 4;
+ for (i = 0; i < row_width; i++)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 2)
+ if ((png_uint_16)((*sp >> shift) & 0x0f)
+ == png_ptr->trans_color.gray)
{
- png_uint_16 v;
-
- v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
- if (v == png_ptr->trans_color.gray)
- {
- /* Background is already in screen gamma */
- *sp = (png_byte)((png_ptr->background.gray >> 8)
- & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.gray
- & 0xff);
- }
-
- else
- {
- v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- }
+ unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
+ tmp |=
+ (unsigned int)(png_ptr->background.gray << shift);
+ *sp = (png_byte)(tmp & 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 == png_ptr->trans_color.gray)
- {
- *sp = (png_byte)((png_ptr->background.gray >> 8)
- & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.gray
- & 0xff);
- }
+ if (shift == 0)
+ {
+ shift = 4;
+ sp++;
}
+
+ else
+ shift -= 4;
}
- break;
}
-
- default:
- break;
+ break;
}
- break;
- }
- case PNG_COLOR_TYPE_RGB:
- {
- if (row_info->bit_depth == 8)
+ case 8:
{
#ifdef PNG_READ_GAMMA_SUPPORTED
if (gamma_table != NULL)
{
sp = row;
- for (i = 0; i < row_width; i++, sp += 3)
+ for (i = 0; i < row_width; i++, sp++)
{
- if (*sp == png_ptr->trans_color.red &&
- *(sp + 1) == png_ptr->trans_color.green &&
- *(sp + 2) == png_ptr->trans_color.blue)
- {
- *sp = (png_byte)png_ptr->background.red;
- *(sp + 1) = (png_byte)png_ptr->background.green;
- *(sp + 2) = (png_byte)png_ptr->background.blue;
- }
+ if (*sp == png_ptr->trans_color.gray)
+ *sp = (png_byte)png_ptr->background.gray;
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)
+ for (i = 0; i < row_width; i++, sp++)
{
- if (*sp == png_ptr->trans_color.red &&
- *(sp + 1) == png_ptr->trans_color.green &&
- *(sp + 2) == png_ptr->trans_color.blue)
- {
- *sp = (png_byte)png_ptr->background.red;
- *(sp + 1) = (png_byte)png_ptr->background.green;
- *(sp + 2) = (png_byte)png_ptr->background.blue;
- }
+ if (*sp == png_ptr->trans_color.gray)
+ *sp = (png_byte)png_ptr->background.gray;
}
}
+ break;
}
- else /* if (row_info->bit_depth == 16) */
+
+ case 16:
{
#ifdef PNG_READ_GAMMA_SUPPORTED
if (gamma_16 != NULL)
{
sp = row;
- for (i = 0; i < row_width; i++, sp += 6)
+ for (i = 0; i < row_width; i++, sp += 2)
{
- png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
+ png_uint_16 v;
- png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
- + *(sp + 3));
+ v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
- + *(sp + 5));
-
- if (r == png_ptr->trans_color.red &&
- g == png_ptr->trans_color.green &&
- b == png_ptr->trans_color.blue)
+ if (v == png_ptr->trans_color.gray)
{
/* Background is already in screen gamma */
- *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
- *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
- & 0xff);
- *(sp + 3) = (png_byte)(png_ptr->background.green
- & 0xff);
- *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
- & 0xff);
- *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
+ *sp = (png_byte)((png_ptr->background.gray >> 8)
+ & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.gray
+ & 0xff);
}
else
{
- png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
+ 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)
+ for (i = 0; i < row_width; i++, sp += 2)
{
- 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 v;
- png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
- + *(sp + 5));
+ v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- if (r == png_ptr->trans_color.red &&
- g == png_ptr->trans_color.green &&
- b == png_ptr->trans_color.blue)
+ if (v == png_ptr->trans_color.gray)
{
- *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
- *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
- & 0xff);
- *(sp + 3) = (png_byte)(png_ptr->background.green
- & 0xff);
- *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
- & 0xff);
- *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
+ *sp = (png_byte)((png_ptr->background.gray >> 8)
+ & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.gray
+ & 0xff);
}
}
}
+ break;
}
- break;
+
+ default:
+ break;
}
+ break;
+ }
- case PNG_COLOR_TYPE_GRAY_ALPHA:
+ case PNG_COLOR_TYPE_RGB:
+ {
+ if (row_info->bit_depth == 8)
{
- if (row_info->bit_depth == 8)
- {
#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
- gamma_table != NULL)
+ if (gamma_table != NULL)
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 3)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 2)
+ if (*sp == png_ptr->trans_color.red &&
+ *(sp + 1) == png_ptr->trans_color.green &&
+ *(sp + 2) == png_ptr->trans_color.blue)
{
- png_uint_16 a = *(sp + 1);
+ *sp = (png_byte)png_ptr->background.red;
+ *(sp + 1) = (png_byte)png_ptr->background.green;
+ *(sp + 2) = (png_byte)png_ptr->background.blue;
+ }
- if (a == 0xff)
- *sp = gamma_table[*sp];
+ 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 == png_ptr->trans_color.red &&
+ *(sp + 1) == png_ptr->trans_color.green &&
+ *(sp + 2) == png_ptr->trans_color.blue)
+ {
+ *sp = (png_byte)png_ptr->background.red;
+ *(sp + 1) = (png_byte)png_ptr->background.green;
+ *(sp + 2) = (png_byte)png_ptr->background.blue;
+ }
+ }
+ }
+ }
+ else /* if (row_info->bit_depth == 16) */
+ {
+#ifdef 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));
- else if (a == 0)
- {
- /* Background is already in screen gamma */
- *sp = (png_byte)png_ptr->background.gray;
- }
+ png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
+ + *(sp + 3));
- else
- {
- png_byte v, w;
+ png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
+ + *(sp + 5));
- v = gamma_to_1[*sp];
- png_composite(w, v, a, png_ptr->background_1.gray);
- if (optimize == 0)
- w = gamma_from_1[w];
- *sp = w;
- }
+ if (r == png_ptr->trans_color.red &&
+ g == png_ptr->trans_color.green &&
+ b == png_ptr->trans_color.blue)
+ {
+ /* Background is already in screen gamma */
+ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
+ *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
+ & 0xff);
+ *(sp + 3) = (png_byte)(png_ptr->background.green
+ & 0xff);
+ *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
+ & 0xff);
+ *(sp + 5) = (png_byte)(png_ptr->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
+ }
+
+ else
#endif
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 6)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 2)
+ 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 == png_ptr->trans_color.red &&
+ g == png_ptr->trans_color.green &&
+ b == png_ptr->trans_color.blue)
{
- png_byte a = *(sp + 1);
+ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
+ *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
+ & 0xff);
+ *(sp + 3) = (png_byte)(png_ptr->background.green
+ & 0xff);
+ *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
+ & 0xff);
+ *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
+ }
+ }
+ }
+ }
+ break;
+ }
- if (a == 0)
- *sp = (png_byte)png_ptr->background.gray;
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ {
+ if (row_info->bit_depth == 8)
+ {
+#ifdef PNG_READ_GAMMA_SUPPORTED
+ if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
+ gamma_table != NULL)
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 2)
+ {
+ png_uint_16 a = *(sp + 1);
+
+ if (a == 0xff)
+ *sp = gamma_table[*sp];
+
+ else if (a == 0)
+ {
+ /* Background is already in screen gamma */
+ *sp = (png_byte)png_ptr->background.gray;
+ }
+
+ else
+ {
+ png_byte v, w;
- else if (a < 0xff)
- png_composite(*sp, *sp, a, png_ptr->background.gray);
+ v = gamma_to_1[*sp];
+ png_composite(w, v, a, png_ptr->background_1.gray);
+ if (optimize == 0)
+ w = gamma_from_1[w];
+ *sp = w;
}
}
}
- else /* if (png_ptr->bit_depth == 16) */
+ else
+#endif
{
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 2)
+ {
+ png_byte a = *(sp + 1);
+
+ if (a == 0)
+ *sp = (png_byte)png_ptr->background.gray;
+
+ else if (a < 0xff)
+ png_composite(*sp, *sp, a, png_ptr->background.gray);
+ }
+ }
+ }
+ else /* if (png_ptr->bit_depth == 16) */
+ {
#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
- gamma_16_to_1 != NULL)
+ if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
+ gamma_16_to_1 != NULL)
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 4)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 4)
+ png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
+ + *(sp + 3));
+
+ if (a == (png_uint_16)0xffff)
{
- png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
- + *(sp + 3));
+ png_uint_16 v;
- if (a == (png_uint_16)0xffff)
- {
- png_uint_16 v;
+ v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
+ *sp = (png_byte)((v >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(v & 0xff);
+ }
- v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- }
+ else if (a == 0)
+ {
+ /* Background is already in screen gamma */
+ *sp = (png_byte)((png_ptr->background.gray >> 8)
+ & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
+ }
- else if (a == 0)
- {
- /* Background is already in screen gamma */
- *sp = (png_byte)((png_ptr->background.gray >> 8)
- & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
- }
+ else
+ {
+ png_uint_16 g, v, w;
+ g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
+ png_composite_16(v, g, a, png_ptr->background_1.gray);
+ if (optimize != 0)
+ w = v;
else
- {
- png_uint_16 g, v, w;
-
- g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
- png_composite_16(v, g, a, png_ptr->background_1.gray);
- if (optimize != 0)
- w = v;
- else
- w = gamma_16_from_1[(v & 0xff) >>
- gamma_shift][v >> 8];
- *sp = (png_byte)((w >> 8) & 0xff);
- *(sp + 1) = (png_byte)(w & 0xff);
- }
+ w = gamma_16_from_1[(v & 0xff) >>
+ gamma_shift][v >> 8];
+ *sp = (png_byte)((w >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(w & 0xff);
}
}
- else
+ }
+ else
#endif
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 4)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 4)
- {
- png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
- + *(sp + 3));
+ png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
+ + *(sp + 3));
- if (a == 0)
- {
- *sp = (png_byte)((png_ptr->background.gray >> 8)
- & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
- }
+ if (a == 0)
+ {
+ *sp = (png_byte)((png_ptr->background.gray >> 8)
+ & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
+ }
- else if (a < 0xffff)
- {
- png_uint_16 g, v;
+ else if (a < 0xffff)
+ {
+ png_uint_16 g, v;
- g = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- png_composite_16(v, g, a, png_ptr->background.gray);
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- }
+ g = (png_uint_16)(((*sp) << 8) + *(sp + 1));
+ png_composite_16(v, g, a, png_ptr->background.gray);
+ *sp = (png_byte)((v >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(v & 0xff);
}
}
}
- break;
}
+ break;
+ }
- case PNG_COLOR_TYPE_RGB_ALPHA:
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ {
+ if (row_info->bit_depth == 8)
{
- if (row_info->bit_depth == 8)
- {
#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
- gamma_table != NULL)
+ if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
+ gamma_table != NULL)
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 4)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 4)
+ png_byte a = *(sp + 3);
+
+ if (a == 0xff)
{
- png_byte a = *(sp + 3);
+ *sp = gamma_table[*sp];
+ *(sp + 1) = gamma_table[*(sp + 1)];
+ *(sp + 2) = gamma_table[*(sp + 2)];
+ }
- if (a == 0xff)
- {
- *sp = gamma_table[*sp];
- *(sp + 1) = gamma_table[*(sp + 1)];
- *(sp + 2) = gamma_table[*(sp + 2)];
- }
+ else if (a == 0)
+ {
+ /* Background is already in screen gamma */
+ *sp = (png_byte)png_ptr->background.red;
+ *(sp + 1) = (png_byte)png_ptr->background.green;
+ *(sp + 2) = (png_byte)png_ptr->background.blue;
+ }
- else if (a == 0)
- {
- /* Background is already in screen gamma */
- *sp = (png_byte)png_ptr->background.red;
- *(sp + 1) = (png_byte)png_ptr->background.green;
- *(sp + 2) = (png_byte)png_ptr->background.blue;
- }
+ else
+ {
+ png_byte v, w;
- else
- {
- png_byte v, w;
-
- v = gamma_to_1[*sp];
- png_composite(w, v, a, png_ptr->background_1.red);
- if (optimize == 0) w = gamma_from_1[w];
- *sp = w;
-
- v = gamma_to_1[*(sp + 1)];
- png_composite(w, v, a, png_ptr->background_1.green);
- if (optimize == 0) w = gamma_from_1[w];
- *(sp + 1) = w;
-
- v = gamma_to_1[*(sp + 2)];
- png_composite(w, v, a, png_ptr->background_1.blue);
- if (optimize == 0) w = gamma_from_1[w];
- *(sp + 2) = w;
- }
+ v = gamma_to_1[*sp];
+ png_composite(w, v, a, png_ptr->background_1.red);
+ if (optimize == 0) w = gamma_from_1[w];
+ *sp = w;
+
+ v = gamma_to_1[*(sp + 1)];
+ png_composite(w, v, a, png_ptr->background_1.green);
+ if (optimize == 0) w = gamma_from_1[w];
+ *(sp + 1) = w;
+
+ v = gamma_to_1[*(sp + 2)];
+ png_composite(w, v, a, png_ptr->background_1.blue);
+ if (optimize == 0) w = gamma_from_1[w];
+ *(sp + 2) = w;
}
}
- else
+ }
+ else
#endif
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 4)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 4)
- {
- png_byte a = *(sp + 3);
+ png_byte a = *(sp + 3);
- if (a == 0)
- {
- *sp = (png_byte)png_ptr->background.red;
- *(sp + 1) = (png_byte)png_ptr->background.green;
- *(sp + 2) = (png_byte)png_ptr->background.blue;
- }
+ if (a == 0)
+ {
+ *sp = (png_byte)png_ptr->background.red;
+ *(sp + 1) = (png_byte)png_ptr->background.green;
+ *(sp + 2) = (png_byte)png_ptr->background.blue;
+ }
- else if (a < 0xff)
- {
- png_composite(*sp, *sp, a, png_ptr->background.red);
+ else if (a < 0xff)
+ {
+ png_composite(*sp, *sp, a, png_ptr->background.red);
- png_composite(*(sp + 1), *(sp + 1), a,
- png_ptr->background.green);
+ png_composite(*(sp + 1), *(sp + 1), a,
+ png_ptr->background.green);
- png_composite(*(sp + 2), *(sp + 2), a,
- png_ptr->background.blue);
- }
+ png_composite(*(sp + 2), *(sp + 2), a,
+ png_ptr->background.blue);
}
}
}
- else /* if (row_info->bit_depth == 16) */
- {
+ }
+ else /* if (row_info->bit_depth == 16) */
+ {
#ifdef PNG_READ_GAMMA_SUPPORTED
- if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
- gamma_16_to_1 != NULL)
+ if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
+ gamma_16_to_1 != NULL)
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 8)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 8)
+ 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 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
- << 8) + (png_uint_16)(*(sp + 7)));
+ png_uint_16 v;
- if (a == (png_uint_16)0xffff)
- {
- png_uint_16 v;
+ v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
+ *sp = (png_byte)((v >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(v & 0xff);
- 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 + 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);
- }
+ v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
+ *(sp + 4) = (png_byte)((v >> 8) & 0xff);
+ *(sp + 5) = (png_byte)(v & 0xff);
+ }
- else if (a == 0)
- {
- /* Background is already in screen gamma */
- *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
- *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
- & 0xff);
- *(sp + 3) = (png_byte)(png_ptr->background.green
- & 0xff);
- *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
- & 0xff);
- *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
- }
+ else if (a == 0)
+ {
+ /* Background is already in screen gamma */
+ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
+ *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
+ & 0xff);
+ *(sp + 3) = (png_byte)(png_ptr->background.green
+ & 0xff);
+ *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
+ & 0xff);
+ *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
+ }
- else
- {
- png_uint_16 v, w;
-
- v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
- png_composite_16(w, v, a, png_ptr->background_1.red);
- if (optimize == 0)
- w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
- 8];
- *sp = (png_byte)((w >> 8) & 0xff);
- *(sp + 1) = (png_byte)(w & 0xff);
-
- v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];
- png_composite_16(w, v, a, png_ptr->background_1.green);
- if (optimize == 0)
- w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
- 8];
-
- *(sp + 2) = (png_byte)((w >> 8) & 0xff);
- *(sp + 3) = (png_byte)(w & 0xff);
-
- v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];
- png_composite_16(w, v, a, png_ptr->background_1.blue);
- if (optimize == 0)
- w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
- 8];
-
- *(sp + 4) = (png_byte)((w >> 8) & 0xff);
- *(sp + 5) = (png_byte)(w & 0xff);
- }
+ else
+ {
+ png_uint_16 v, w;
+
+ v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
+ png_composite_16(w, v, a, png_ptr->background_1.red);
+ if (optimize == 0)
+ w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
+ 8];
+ *sp = (png_byte)((w >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(w & 0xff);
+
+ v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];
+ png_composite_16(w, v, a, png_ptr->background_1.green);
+ if (optimize == 0)
+ w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
+ 8];
+
+ *(sp + 2) = (png_byte)((w >> 8) & 0xff);
+ *(sp + 3) = (png_byte)(w & 0xff);
+
+ v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];
+ png_composite_16(w, v, a, png_ptr->background_1.blue);
+ if (optimize == 0)
+ w = gamma_16_from_1[((w & 0xff) >> gamma_shift)][w >>
+ 8];
+
+ *(sp + 4) = (png_byte)((w >> 8) & 0xff);
+ *(sp + 5) = (png_byte)(w & 0xff);
}
}
+ }
- else
+ else
#endif
+ {
+ sp = row;
+ for (i = 0; i < row_width; i++, sp += 8)
{
- sp = row;
- for (i = 0; i < row_width; i++, sp += 8)
- {
- png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
- << 8) + (png_uint_16)(*(sp + 7)));
+ png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
+ << 8) + (png_uint_16)(*(sp + 7)));
- if (a == 0)
- {
- *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
- *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
- & 0xff);
- *(sp + 3) = (png_byte)(png_ptr->background.green
- & 0xff);
- *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
- & 0xff);
- *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
- }
+ if (a == 0)
+ {
+ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
+ *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
+ & 0xff);
+ *(sp + 3) = (png_byte)(png_ptr->background.green
+ & 0xff);
+ *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
+ & 0xff);
+ *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
+ }
- else if (a < 0xffff)
- {
- png_uint_16 v;
+ else if (a < 0xffff)
+ {
+ 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_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, png_ptr->background.red);
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
+ png_composite_16(v, r, a, png_ptr->background.red);
+ *sp = (png_byte)((v >> 8) & 0xff);
+ *(sp + 1) = (png_byte)(v & 0xff);
- png_composite_16(v, g, a, png_ptr->background.green);
- *(sp + 2) = (png_byte)((v >> 8) & 0xff);
- *(sp + 3) = (png_byte)(v & 0xff);
+ png_composite_16(v, g, a, png_ptr->background.green);
+ *(sp + 2) = (png_byte)((v >> 8) & 0xff);
+ *(sp + 3) = (png_byte)(v & 0xff);
- png_composite_16(v, b, a, png_ptr->background.blue);
- *(sp + 4) = (png_byte)((v >> 8) & 0xff);
- *(sp + 5) = (png_byte)(v & 0xff);
- }
+ png_composite_16(v, b, a, png_ptr->background.blue);
+ *(sp + 4) = (png_byte)((v >> 8) & 0xff);
+ *(sp + 5) = (png_byte)(v & 0xff);
}
}
}
- break;
}
-
- default:
- break;
+ break;
}
+
+ default:
+ break;
}
}
#endif /* READ_BACKGROUND || READ_ALPHA_MODE */
@@ -4146,12 +4152,11 @@ png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
{
if (row_info->bit_depth == 8)
{
- PNG_CONST png_bytep table = png_ptr->gamma_from_1;
+ png_bytep table = png_ptr->gamma_from_1;
if (table != NULL)
{
- PNG_CONST int step =
- (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
+ int step = (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
/* The alpha channel is the last component: */
row += step - 1;
@@ -4165,13 +4170,12 @@ png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
else if (row_info->bit_depth == 16)
{
- PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
- PNG_CONST int gamma_shift = png_ptr->gamma_shift;
+ png_uint_16pp table = png_ptr->gamma_16_from_1;
+ int gamma_shift = png_ptr->gamma_shift;
if (table != NULL)
{
- PNG_CONST int step =
- (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
+ int step = (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
/* The alpha channel is the last component: */
row += step - 2;
@@ -4202,8 +4206,9 @@ png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
* upon whether you supply trans and num_trans.
*/
static void
-png_do_expand_palette(png_row_infop row_info, png_bytep row,
- png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
+png_do_expand_palette(png_structrp png_ptr, png_row_infop row_info,
+ png_bytep row, png_const_colorp palette, png_const_bytep trans_alpha,
+ int num_trans)
{
int shift, value;
png_bytep sp, dp;
@@ -4220,8 +4225,8 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
{
case 1:
{
- sp = row + (png_size_t)((row_width - 1) >> 3);
- dp = row + (png_size_t)row_width - 1;
+ sp = row + (size_t)((row_width - 1) >> 3);
+ dp = row + (size_t)row_width - 1;
shift = 7 - (int)((row_width + 7) & 0x07);
for (i = 0; i < row_width; i++)
{
@@ -4247,8 +4252,8 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
case 2:
{
- sp = row + (png_size_t)((row_width - 1) >> 2);
- dp = row + (png_size_t)row_width - 1;
+ sp = row + (size_t)((row_width - 1) >> 2);
+ dp = row + (size_t)row_width - 1;
shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
for (i = 0; i < row_width; i++)
{
@@ -4270,8 +4275,8 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
case 4:
{
- sp = row + (png_size_t)((row_width - 1) >> 1);
- dp = row + (png_size_t)row_width - 1;
+ sp = row + (size_t)((row_width - 1) >> 1);
+ dp = row + (size_t)row_width - 1;
shift = (int)((row_width & 0x01) << 2);
for (i = 0; i < row_width; i++)
{
@@ -4304,17 +4309,30 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
{
if (num_trans > 0)
{
- sp = row + (png_size_t)row_width - 1;
- dp = row + ((png_size_t)row_width << 2) - 1;
+ sp = row + (size_t)row_width - 1;
+ dp = row + ((size_t)row_width << 2) - 1;
- for (i = 0; i < row_width; i++)
+ i = 0;
+#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
+ if (png_ptr->riffled_palette != NULL)
+ {
+ /* The RGBA optimization works with png_ptr->bit_depth == 8
+ * but sometimes row_info->bit_depth has been changed to 8.
+ * In these cases, the palette hasn't been riffled.
+ */
+ i = png_do_expand_palette_rgba8_neon(png_ptr, row_info, row,
+ &sp, &dp);
+ }
+#else
+ PNG_UNUSED(png_ptr)
+#endif
+
+ for (; i < row_width; i++)
{
if ((int)(*sp) >= num_trans)
*dp-- = 0xff;
-
else
*dp-- = trans_alpha[*sp];
-
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
*dp-- = palette[*sp].red;
@@ -4329,10 +4347,17 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
else
{
- sp = row + (png_size_t)row_width - 1;
- dp = row + (png_size_t)(row_width * 3) - 1;
+ sp = row + (size_t)row_width - 1;
+ dp = row + (size_t)(row_width * 3) - 1;
+ i = 0;
+#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
+ i = png_do_expand_palette_rgb8_neon(png_ptr, row_info, row,
+ &sp, &dp);
+#else
+ PNG_UNUSED(png_ptr)
+#endif
- for (i = 0; i < row_width; i++)
+ for (; i < row_width; i++)
{
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
@@ -4365,195 +4390,130 @@ png_do_expand(png_row_infop row_info, png_bytep row,
png_debug(1, "in png_do_expand");
+ if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
{
- if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
- {
- unsigned int gray = trans_color != NULL ? trans_color->gray : 0;
+ unsigned int gray = trans_color != NULL ? trans_color->gray : 0;
- if (row_info->bit_depth < 8)
+ if (row_info->bit_depth < 8)
+ {
+ switch (row_info->bit_depth)
{
- switch (row_info->bit_depth)
+ case 1:
{
- case 1:
+ gray = (gray & 0x01) * 0xff;
+ sp = row + (size_t)((row_width - 1) >> 3);
+ dp = row + (size_t)row_width - 1;
+ shift = 7 - (int)((row_width + 7) & 0x07);
+ for (i = 0; i < row_width; i++)
{
- gray = (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++;
+ if ((*sp >> shift) & 0x01)
+ *dp = 0xff;
- dp--;
- }
- break;
- }
+ else
+ *dp = 0;
- case 2:
- {
- gray = (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++)
+ if (shift == 7)
{
- value = (*sp >> shift) & 0x03;
- *dp = (png_byte)(value | (value << 2) | (value << 4) |
- (value << 6));
- if (shift == 6)
- {
- shift = 0;
- sp--;
- }
-
- else
- shift += 2;
-
- dp--;
+ shift = 0;
+ sp--;
}
- break;
- }
- case 4:
- {
- gray = (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;
+ else
+ shift++;
- dp--;
- }
- break;
+ dp--;
}
-
- default:
- break;
+ break;
}
- row_info->bit_depth = 8;
- row_info->pixel_depth = 8;
- row_info->rowbytes = row_width;
- }
-
- if (trans_color != NULL)
- {
- if (row_info->bit_depth == 8)
+ case 2:
{
- gray = gray & 0xff;
- sp = row + (png_size_t)row_width - 1;
- dp = row + ((png_size_t)row_width << 1) - 1;
-
+ gray = (gray & 0x03) * 0x55;
+ sp = row + (size_t)((row_width - 1) >> 2);
+ dp = row + (size_t)row_width - 1;
+ shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
for (i = 0; i < row_width; i++)
{
- if ((*sp & 0xffU) == gray)
- *dp-- = 0;
+ value = (*sp >> shift) & 0x03;
+ *dp = (png_byte)(value | (value << 2) | (value << 4) |
+ (value << 6));
+ if (shift == 6)
+ {
+ shift = 0;
+ sp--;
+ }
else
- *dp-- = 0xff;
+ shift += 2;
- *dp-- = *sp--;
+ dp--;
}
+ break;
}
- else if (row_info->bit_depth == 16)
+ case 4:
{
- unsigned int gray_high = (gray >> 8) & 0xff;
- unsigned int gray_low = gray & 0xff;
- sp = row + row_info->rowbytes - 1;
- dp = row + (row_info->rowbytes << 1) - 1;
+ gray = (gray & 0x0f) * 0x11;
+ sp = row + (size_t)((row_width - 1) >> 1);
+ dp = row + (size_t)row_width - 1;
+ shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
for (i = 0; i < row_width; i++)
{
- if ((*(sp - 1) & 0xffU) == gray_high &&
- (*(sp) & 0xffU) == gray_low)
+ value = (*sp >> shift) & 0x0f;
+ *dp = (png_byte)(value | (value << 4));
+ if (shift == 4)
{
- *dp-- = 0;
- *dp-- = 0;
+ shift = 0;
+ sp--;
}
else
- {
- *dp-- = 0xff;
- *dp-- = 0xff;
- }
+ shift = 4;
- *dp-- = *sp--;
- *dp-- = *sp--;
+ dp--;
}
+ break;
}
- 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);
+ default:
+ break;
}
+
+ row_info->bit_depth = 8;
+ row_info->pixel_depth = 8;
+ row_info->rowbytes = row_width;
}
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB &&
- trans_color != NULL)
+
+ if (trans_color != NULL)
{
if (row_info->bit_depth == 8)
{
- png_byte red = (png_byte)(trans_color->red & 0xff);
- png_byte green = (png_byte)(trans_color->green & 0xff);
- png_byte blue = (png_byte)(trans_color->blue & 0xff);
- sp = row + (png_size_t)row_info->rowbytes - 1;
- dp = row + ((png_size_t)row_width << 2) - 1;
+ gray = gray & 0xff;
+ sp = row + (size_t)row_width - 1;
+ dp = row + ((size_t)row_width << 1) - 1;
+
for (i = 0; i < row_width; i++)
{
- if (*(sp - 2) == red && *(sp - 1) == green && *(sp) == blue)
+ if ((*sp & 0xffU) == gray)
*dp-- = 0;
else
*dp-- = 0xff;
*dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
}
}
+
else if (row_info->bit_depth == 16)
{
- png_byte red_high = (png_byte)((trans_color->red >> 8) & 0xff);
- png_byte green_high = (png_byte)((trans_color->green >> 8) & 0xff);
- png_byte blue_high = (png_byte)((trans_color->blue >> 8) & 0xff);
- png_byte red_low = (png_byte)(trans_color->red & 0xff);
- png_byte green_low = (png_byte)(trans_color->green & 0xff);
- png_byte blue_low = (png_byte)(trans_color->blue & 0xff);
+ unsigned int gray_high = (gray >> 8) & 0xff;
+ unsigned int gray_low = gray & 0xff;
sp = row + row_info->rowbytes - 1;
- dp = row + ((png_size_t)row_width << 3) - 1;
+ dp = row + (row_info->rowbytes << 1) - 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)
+ if ((*(sp - 1) & 0xffU) == gray_high &&
+ (*(sp) & 0xffU) == gray_low)
{
*dp-- = 0;
*dp-- = 0;
@@ -4567,18 +4527,81 @@ png_do_expand(png_row_infop row_info, png_bytep row,
*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);
+
+ 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_color != NULL)
+ {
+ if (row_info->bit_depth == 8)
+ {
+ png_byte red = (png_byte)(trans_color->red & 0xff);
+ png_byte green = (png_byte)(trans_color->green & 0xff);
+ png_byte blue = (png_byte)(trans_color->blue & 0xff);
+ sp = row + (size_t)row_info->rowbytes - 1;
+ dp = row + ((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 = (png_byte)((trans_color->red >> 8) & 0xff);
+ png_byte green_high = (png_byte)((trans_color->green >> 8) & 0xff);
+ png_byte blue_high = (png_byte)((trans_color->blue >> 8) & 0xff);
+ png_byte red_low = (png_byte)(trans_color->red & 0xff);
+ png_byte green_low = (png_byte)(trans_color->green & 0xff);
+ png_byte blue_low = (png_byte)(trans_color->blue & 0xff);
+ sp = row + row_info->rowbytes - 1;
+ dp = row + ((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
@@ -4748,7 +4771,19 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
{
if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
{
- png_do_expand_palette(row_info, png_ptr->row_buf + 1,
+#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
+ if ((png_ptr->num_trans > 0) && (png_ptr->bit_depth == 8))
+ {
+ if (png_ptr->riffled_palette == NULL)
+ {
+ /* Initialize the accelerated palette expansion. */
+ png_ptr->riffled_palette =
+ (png_bytep)png_malloc(png_ptr, 256 * 4);
+ png_riffle_palette_neon(png_ptr);
+ }
+ }
+#endif
+ png_do_expand_palette(png_ptr, row_info, png_ptr->row_buf + 1,
png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
}
@@ -4760,8 +4795,7 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
&(png_ptr->trans_color));
else
- png_do_expand(row_info, png_ptr->row_buf + 1,
- NULL);
+ png_do_expand(row_info, png_ptr->row_buf + 1, NULL);
}
}
#endif
@@ -4985,7 +5019,7 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
(png_ptr, /* png_ptr */
row_info, /* row_info: */
/* png_uint_32 width; width of row */
- /* png_size_t rowbytes; number of bytes in row */
+ /* size_t 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) */
diff --git a/libpng/pngrutil.c b/libpng/pngrutil.c
index 8692933b..d5fa08c3 100644
--- a/libpng/pngrutil.c
+++ b/libpng/pngrutil.c
@@ -1,10 +1,10 @@
/* pngrutil.c - utilities to read a PNG file
*
- * Last changed in libpng 1.6.33 [September 28, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -102,7 +102,7 @@ png_get_int_32)(png_const_bytep buf)
png_uint_16 (PNGAPI
png_get_uint_16)(png_const_bytep buf)
{
- /* ANSI-C requires an int value to accomodate at least 16 bits so this
+ /* ANSI-C requires an int value to accommodate at least 16 bits so this
* works and allows the compiler not to worry about possible narrowing
* on 32-bit systems. (Pre-ANSI systems did not make integers smaller
* than 16 bits either.)
@@ -120,7 +120,7 @@ png_get_uint_16)(png_const_bytep buf)
void /* PRIVATE */
png_read_sig(png_structrp png_ptr, png_inforp info_ptr)
{
- png_size_t num_checked, num_to_check;
+ size_t num_checked, num_to_check;
/* Exit if the user application does not expect a signature. */
if (png_ptr->sig_bytes >= 8)
@@ -1461,8 +1461,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
{
/* We have the ICC profile header; do the basic header checks.
*/
- const png_uint_32 profile_length =
- png_get_uint_32(profile_header);
+ png_uint_32 profile_length = png_get_uint_32(profile_header);
if (png_icc_check_length(png_ptr, &png_ptr->colorspace,
keyword, profile_length) != 0)
@@ -1479,8 +1478,8 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
* profile. The header check has already validated
* that none of this stuff will overflow.
*/
- const png_uint_32 tag_count = png_get_uint_32(
- profile_header+128);
+ png_uint_32 tag_count =
+ png_get_uint_32(profile_header + 128);
png_bytep profile = png_read_buffer(png_ptr,
profile_length, 2/*silent*/);
@@ -1648,7 +1647,7 @@ png_handle_sPLT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
int entry_size, i;
png_uint_32 skip = 0;
png_uint_32 dl;
- png_size_t max_dl;
+ size_t max_dl;
png_debug(1, "in png_handle_sPLT");
@@ -1997,6 +1996,15 @@ png_handle_bKGD(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0) /* GRAY */
{
+ if (png_ptr->bit_depth <= 8)
+ {
+ if (buf[0] != 0 || buf[1] >= (unsigned int)(1 << png_ptr->bit_depth))
+ {
+ png_chunk_benign_error(png_ptr, "invalid gray level");
+ return;
+ }
+ }
+
background.index = 0;
background.red =
background.green =
@@ -2006,6 +2014,15 @@ png_handle_bKGD(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
else
{
+ if (png_ptr->bit_depth <= 8)
+ {
+ if (buf[0] != 0 || buf[2] != 0 || buf[4] != 0)
+ {
+ png_chunk_benign_error(png_ptr, "invalid color");
+ return;
+ }
+ }
+
background.index = 0;
background.red = png_get_uint_16(buf);
background.green = png_get_uint_16(buf + 2);
@@ -2359,7 +2376,7 @@ void /* PRIVATE */
png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
{
png_bytep buffer;
- png_size_t i;
+ size_t i;
int state;
png_debug(1, "in png_handle_sCAL");
@@ -2429,7 +2446,7 @@ png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
else
{
- png_size_t heighti = i;
+ size_t heighti = i;
state = 0;
if (png_check_fp_number((png_const_charp)buffer, length,
@@ -2867,7 +2884,7 @@ png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
{
PNG_CSTRING_FROM_CHUNK(png_ptr->unknown_chunk.name, png_ptr->chunk_name);
/* The following is safe because of the PNG_SIZE_MAX init above */
- png_ptr->unknown_chunk.size = (png_size_t)length/*SAFE*/;
+ png_ptr->unknown_chunk.size = (size_t)length/*SAFE*/;
/* 'mode' is a flag array, only the bottom four bits matter here */
png_ptr->unknown_chunk.location = (png_byte)png_ptr->mode/*SAFE*/;
@@ -3114,7 +3131,7 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
*/
void /* PRIVATE */
-png_check_chunk_name(png_const_structrp png_ptr, const png_uint_32 chunk_name)
+png_check_chunk_name(png_const_structrp png_ptr, png_uint_32 chunk_name)
{
int i;
png_uint_32 cn=chunk_name;
@@ -3133,7 +3150,7 @@ png_check_chunk_name(png_const_structrp png_ptr, const png_uint_32 chunk_name)
}
void /* PRIVATE */
-png_check_chunk_length(png_const_structrp png_ptr, const png_uint_32 length)
+png_check_chunk_length(png_const_structrp png_ptr, png_uint_32 length)
{
png_alloc_size_t limit = PNG_UINT_31_MAX;
@@ -3149,10 +3166,13 @@ png_check_chunk_length(png_const_structrp png_ptr, const png_uint_32 length)
{
png_alloc_size_t idat_limit = PNG_UINT_31_MAX;
size_t row_factor =
- (png_ptr->width * png_ptr->channels * (png_ptr->bit_depth > 8? 2: 1)
- + 1 + (png_ptr->interlaced? 6: 0));
+ (size_t)png_ptr->width
+ * (size_t)png_ptr->channels
+ * (png_ptr->bit_depth > 8? 2: 1)
+ + 1
+ + (png_ptr->interlaced? 6: 0);
if (png_ptr->height > PNG_UINT_32_MAX/row_factor)
- idat_limit=PNG_UINT_31_MAX;
+ idat_limit = PNG_UINT_31_MAX;
else
idat_limit = png_ptr->height * row_factor;
row_factor = row_factor > 32566? 32566 : row_factor;
@@ -3342,7 +3362,7 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
/* Hence the pre-compiled masks indexed by PACKSWAP (or not), depth and
* then pass:
*/
- static PNG_CONST png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
+ static const png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
{
/* Little-endian byte masks for PACKSWAP */
{ S_MASKS(1,0), S_MASKS(2,0), S_MASKS(4,0) },
@@ -3353,7 +3373,7 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
/* display_mask has only three entries for the odd passes, so index by
* pass>>1.
*/
- static PNG_CONST png_uint_32 display_mask[2][3][3] =
+ static const png_uint_32 display_mask[2][3][3] =
{
/* Little-endian byte masks for PACKSWAP */
{ B_MASKS(1,0), B_MASKS(2,0), B_MASKS(4,0) },
@@ -3666,7 +3686,7 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
{
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Offset to next interlace block */
- static PNG_CONST unsigned int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const unsigned int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
png_debug(1, "in png_do_read_interlace");
if (row != NULL && row_info != NULL)
@@ -3679,8 +3699,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
{
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);
+ png_bytep sp = row + (size_t)((row_info->width - 1) >> 3);
+ png_bytep dp = row + (size_t)((final_width - 1) >> 3);
unsigned int sshift, dshift;
unsigned int s_start, s_end;
int s_inc;
@@ -3806,8 +3826,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
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);
+ png_bytep sp = row + (size_t)((row_info->width - 1) >> 1);
+ png_bytep dp = row + (size_t)((final_width - 1) >> 1);
unsigned int sshift, dshift;
unsigned int s_start, s_end;
int s_inc;
@@ -3869,12 +3889,12 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
default:
{
- png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
+ size_t pixel_bytes = (row_info->pixel_depth >> 3);
- png_bytep sp = row + (png_size_t)(row_info->width - 1)
+ png_bytep sp = row + (size_t)(row_info->width - 1)
* pixel_bytes;
- png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
+ png_bytep dp = row + (size_t)(final_width - 1) * pixel_bytes;
int jstop = (int)png_pass_inc[pass];
png_uint_32 i;
@@ -3911,8 +3931,8 @@ static void
png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
- png_size_t istop = row_info->rowbytes;
+ size_t i;
+ size_t istop = row_info->rowbytes;
unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
png_bytep rp = row + bpp;
@@ -3929,8 +3949,8 @@ static void
png_read_filter_row_up(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
- png_size_t istop = row_info->rowbytes;
+ size_t i;
+ size_t istop = row_info->rowbytes;
png_bytep rp = row;
png_const_bytep pp = prev_row;
@@ -3945,11 +3965,11 @@ static void
png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
+ size_t i;
png_bytep rp = row;
png_const_bytep pp = prev_row;
unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
- png_size_t istop = row_info->rowbytes - bpp;
+ size_t istop = row_info->rowbytes - bpp;
for (i = 0; i < bpp; i++)
{
@@ -4308,16 +4328,16 @@ png_read_finish_row(png_structrp png_ptr)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
/* Start of interlace block in the y direction */
- static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
+ static const png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
/* Offset to next interlace block in the y direction */
- static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
+ static const png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
png_debug(1, "in png_read_finish_row");
png_ptr->row_number++;
@@ -4373,19 +4393,19 @@ png_read_start_row(png_structrp png_ptr)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
/* Start of interlace block in the y direction */
- static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
+ static const png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
/* Offset to next interlace block in the y direction */
- static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
+ static const png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
unsigned int max_pixel_depth;
- png_size_t row_bytes;
+ size_t row_bytes;
png_debug(1, "in png_read_start_row");
diff --git a/libpng/pngset.c b/libpng/pngset.c
index 6f3a1ee1..ec75dbe3 100644
--- a/libpng/pngset.c
+++ b/libpng/pngset.c
@@ -1,10 +1,10 @@
/* pngset.c - storage of image information into info struct
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -137,7 +137,7 @@ png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
#ifdef PNG_eXIf_SUPPORTED
void PNGAPI
png_set_eXIf(png_const_structrp png_ptr, png_inforp info_ptr,
- const png_bytep eXIf_buf)
+ png_bytep eXIf_buf)
{
png_warning(png_ptr, "png_set_eXIf does not work; use png_set_eXIf_1");
PNG_UNUSED(info_ptr)
@@ -146,7 +146,7 @@ png_set_eXIf(png_const_structrp png_ptr, png_inforp info_ptr,
void PNGAPI
png_set_eXIf_1(png_const_structrp png_ptr, png_inforp info_ptr,
- const png_uint_32 num_exif, const png_bytep eXIf_buf)
+ png_uint_32 num_exif, png_bytep eXIf_buf)
{
int i;
@@ -313,7 +313,7 @@ png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type,
int nparams, png_const_charp units, png_charpp params)
{
- png_size_t length;
+ size_t length;
int i;
png_debug1(1, "in %s storage function", "pCAL");
@@ -390,7 +390,7 @@ png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
memcpy(info_ptr->pcal_units, units, length);
info_ptr->pcal_params = png_voidcast(png_charpp, png_malloc_warn(png_ptr,
- (png_size_t)(((unsigned int)nparams + 1) * (sizeof (png_charp)))));
+ (size_t)(((unsigned int)nparams + 1) * (sizeof (png_charp)))));
if (info_ptr->pcal_params == NULL)
{
@@ -430,7 +430,7 @@ void PNGAPI
png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
int unit, png_const_charp swidth, png_const_charp sheight)
{
- png_size_t lengthw = 0, lengthh = 0;
+ size_t lengthw = 0, lengthh = 0;
png_debug1(1, "in %s storage function", "sCAL");
@@ -691,7 +691,7 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
{
png_charp new_iccp_name;
png_bytep new_iccp_profile;
- png_size_t length;
+ size_t length;
png_debug1(1, "in %s storage function", "iCCP");
@@ -1018,7 +1018,7 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
info_ptr->trans_alpha = png_voidcast(png_bytep,
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
- memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
+ memcpy(info_ptr->trans_alpha, trans_alpha, (size_t)num_trans);
}
png_ptr->trans_alpha = info_ptr->trans_alpha;
}
@@ -1098,7 +1098,7 @@ png_set_sPLT(png_const_structrp png_ptr,
do
{
- png_size_t length;
+ size_t length;
/* Skip invalid input entries */
if (entries->name == NULL || entries->entries == NULL)
@@ -1399,7 +1399,7 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
/* Ignore all unknown chunks and all chunks recognized by
* libpng except for IHDR, PLTE, tRNS, IDAT, and IEND
*/
- static PNG_CONST png_byte chunks_to_ignore[] = {
+ static const png_byte chunks_to_ignore[] = {
98, 75, 71, 68, '\0', /* bKGD */
99, 72, 82, 77, '\0', /* cHRM */
101, 88, 73, 102, '\0', /* eXIf */
@@ -1563,7 +1563,7 @@ png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
#endif
void PNGAPI
-png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
+png_set_compression_buffer_size(png_structrp png_ptr, size_t size)
{
if (png_ptr == NULL)
return;
diff --git a/libpng/pngstruct.h b/libpng/pngstruct.h
index d83f9712..8bdc7ce4 100644
--- a/libpng/pngstruct.h
+++ b/libpng/pngstruct.h
@@ -1,10 +1,10 @@
/* pngstruct.h - header file for PNG reference library
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -47,7 +47,7 @@
/* zlib.h declares a magic type 'uInt' that limits the amount of data that zlib
* can handle at once. This type need be no larger than 16 bits (so maximum of
* 65535), this define allows us to discover how big it is, but limited by the
- * maximuum for png_size_t. The value can be overriden in a library build
+ * maximum for size_t. The value can be overridden in a library build
* (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably
* lower value (e.g. 255 works). A lower value may help memory usage (slightly)
* and may even improve performance on some systems (and degrade it on others.)
@@ -214,7 +214,7 @@ struct png_struct_def
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_size_t rowbytes; /* size of row in bytes */
+ size_t rowbytes; /* size of 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_uint_32 chunk_name; /* PNG_CHUNK() id of current chunk */
@@ -232,7 +232,7 @@ struct png_struct_def
png_bytep try_row; /* buffer to save trial row when filtering */
png_bytep tst_row; /* buffer to save best trial row when filtering */
#endif
- png_size_t info_rowbytes; /* Added in 1.5.4: cache of updated row bytes */
+ size_t info_rowbytes; /* Added in 1.5.4: cache of updated row bytes */
png_uint_32 idat_size; /* current IDAT size for read */
png_uint_32 crc; /* current chunk CRC value */
@@ -307,7 +307,7 @@ struct png_struct_def
#endif
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
- png_color_8 shift; /* shift for significant bit tranformation */
+ png_color_8 shift; /* shift for significant bit transformation */
#endif
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
@@ -328,10 +328,10 @@ struct png_struct_def
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 */
+ size_t save_buffer_size; /* amount of data now in save_buffer */
+ size_t save_buffer_max; /* total size of save_buffer */
+ size_t buffer_size; /* total amount of available input data */
+ 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 */
@@ -392,6 +392,12 @@ struct png_struct_def
/* deleted in 1.5.5: rgb_to_gray_blue_coeff; */
#endif
+/* New member added in libpng-1.6.36 */
+#if defined(PNG_READ_EXPAND_SUPPORTED) && \
+ defined(PNG_ARM_NEON_IMPLEMENTATION)
+ png_bytep riffled_palette; /* buffer for accelerated palette expansion */
+#endif
+
/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* Changed from png_byte to png_uint_32 at version 1.2.0 */
@@ -451,7 +457,7 @@ struct png_struct_def
#endif
/* New member added in libpng-1.2.26 */
- png_size_t old_big_row_buf_size;
+ size_t old_big_row_buf_size;
#ifdef PNG_READ_SUPPORTED
/* New member added in libpng-1.2.30 */
diff --git a/libpng/pngtest.c b/libpng/pngtest.c
index 9d507579..a715ae11 100644
--- a/libpng/pngtest.c
+++ b/libpng/pngtest.c
@@ -1,10 +1,10 @@
/* pngtest.c - a simple test program to test libpng
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -345,10 +345,10 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
#ifdef PNG_IO_STATE_SUPPORTED
void
-pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
+pngtest_check_io_state(png_structp png_ptr, size_t data_length,
png_uint_32 io_op);
void
-pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
+pngtest_check_io_state(png_structp png_ptr, size_t data_length,
png_uint_32 io_op)
{
png_uint_32 io_state = png_get_io_state(png_ptr);
@@ -386,12 +386,12 @@ pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
#endif
static void PNGCBAPI
-pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
+pngtest_read_data(png_structp png_ptr, png_bytep data, size_t length)
{
- png_size_t check = 0;
+ size_t check = 0;
png_voidp io_ptr;
- /* fread() returns 0 on error, so it is OK to store this in a png_size_t
+ /* fread() returns 0 on error, so it is OK to store this in a size_t
* instead of an int, which is what fread() actually returns.
*/
io_ptr = png_get_io_ptr(png_ptr);
@@ -425,9 +425,9 @@ pngtest_flush(png_structp png_ptr)
* than changing the library.
*/
static void PNGCBAPI
-pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
+pngtest_write_data(png_structp png_ptr, png_bytep data, size_t length)
{
- png_size_t check;
+ size_t check;
check = fwrite(data, 1, length, (png_FILE_p)png_get_io_ptr(png_ptr));
@@ -449,13 +449,13 @@ pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
*/
typedef struct
{
- PNG_CONST char *file_name;
+ const char *file_name;
} pngtest_error_parameters;
static void PNGCBAPI
pngtest_warning(png_structp png_ptr, png_const_charp message)
{
- PNG_CONST char *name = "UNKNOWN (ERROR!)";
+ const char *name = "UNKNOWN (ERROR!)";
pngtest_error_parameters *test =
(pngtest_error_parameters*)png_get_error_ptr(png_ptr);
@@ -705,7 +705,7 @@ read_user_chunk_callback(png_struct *png_ptr, png_unknown_chunkp chunk)
* The unknown chunk structure contains the chunk data:
* png_byte name[5];
* png_byte *data;
- * png_size_t size;
+ * size_t size;
*
* Note that libpng has already taken care of the CRC handling.
*/
@@ -850,7 +850,7 @@ pngtest_check_text_support(png_structp png_ptr, png_textp text_ptr,
/* Test one file */
static int
-test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
+test_one_file(const char *inname, const char *outname)
{
static png_FILE_p fpin;
static png_FILE_p fpout; /* "static" prevents setjmp corruption */
@@ -957,6 +957,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
if (setjmp(png_jmpbuf(write_ptr)))
{
fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
+ png_free(read_ptr, row_buf);
+ row_buf = NULL;
if (verbose != 0)
fprintf(STDERR, " destroying read structs\n");
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
@@ -1436,7 +1438,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
row_buf = (png_bytep)png_malloc(read_ptr,
png_get_rowbytes(read_ptr, read_info_ptr));
- pngtest_debug1("\t0x%08lx", (unsigned long)row_buf);
+ pngtest_debug1("\t%p", row_buf);
#endif /* SINGLE_ROWBUF_ALLOC */
pngtest_debug("Writing row data");
@@ -1490,7 +1492,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
row_buf = (png_bytep)png_malloc(read_ptr,
png_get_rowbytes(read_ptr, read_info_ptr));
- pngtest_debug2("\t0x%08lx (%lu bytes)", (unsigned long)row_buf,
+ pngtest_debug2("\t%p (%lu bytes)", row_buf,
(unsigned long)png_get_rowbytes(read_ptr, read_info_ptr));
#endif /* !SINGLE_ROWBUF_ALLOC */
@@ -1726,7 +1728,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
for (;;)
{
static int wrote_question = 0;
- png_size_t num_in, num_out;
+ size_t num_in, num_out;
char inbuf[256], outbuf[256];
num_in = fread(inbuf, 1, sizeof inbuf, fpin);
@@ -1809,11 +1811,11 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
/* Input and output filenames */
#ifdef RISCOS
-static PNG_CONST char *inname = "pngtest/png";
-static PNG_CONST char *outname = "pngout/png";
+static const char *inname = "pngtest/png";
+static const char *outname = "pngout/png";
#else
-static PNG_CONST char *inname = "pngtest.png";
-static PNG_CONST char *outname = "pngout.png";
+static const char *inname = "pngtest.png";
+static const char *outname = "pngout.png";
#endif
int
@@ -2153,4 +2155,4 @@ main(void)
#endif
/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_34 Your_png_h_is_not_version_1_6_34;
+typedef png_libpng_version_1_6_37 Your_png_h_is_not_version_1_6_37;
diff --git a/libpng/pngtrans.c b/libpng/pngtrans.c
index 6882f0fd..1100f46e 100644
--- a/libpng/pngtrans.c
+++ b/libpng/pngtrans.c
@@ -1,10 +1,10 @@
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
*
- * Last changed in libpng 1.6.33 [September 28, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -269,8 +269,8 @@ png_do_invert(png_row_infop row_info, png_bytep row)
if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
{
png_bytep rp = row;
- png_size_t i;
- png_size_t istop = row_info->rowbytes;
+ size_t i;
+ size_t istop = row_info->rowbytes;
for (i = 0; i < istop; i++)
{
@@ -283,8 +283,8 @@ png_do_invert(png_row_infop row_info, png_bytep row)
row_info->bit_depth == 8)
{
png_bytep rp = row;
- png_size_t i;
- png_size_t istop = row_info->rowbytes;
+ size_t i;
+ size_t istop = row_info->rowbytes;
for (i = 0; i < istop; i += 2)
{
@@ -298,8 +298,8 @@ png_do_invert(png_row_infop row_info, png_bytep row)
row_info->bit_depth == 16)
{
png_bytep rp = row;
- png_size_t i;
- png_size_t istop = row_info->rowbytes;
+ size_t i;
+ size_t istop = row_info->rowbytes;
for (i = 0; i < istop; i += 4)
{
@@ -345,7 +345,7 @@ png_do_swap(png_row_infop row_info, png_bytep row)
#endif
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-static PNG_CONST png_byte onebppswaptable[256] = {
+static 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,
@@ -380,7 +380,7 @@ static PNG_CONST png_byte onebppswaptable[256] = {
0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
};
-static PNG_CONST png_byte twobppswaptable[256] = {
+static 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,
@@ -415,7 +415,7 @@ static PNG_CONST png_byte twobppswaptable[256] = {
0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
};
-static PNG_CONST png_byte fourbppswaptable[256] = {
+static 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,
@@ -609,7 +609,7 @@ png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start)
return; /* The filler channel has gone already */
/* Fix the rowbytes value. */
- row_info->rowbytes = (png_size_t)(dp-row);
+ row_info->rowbytes = (size_t)(dp-row);
}
#endif
diff --git a/libpng/pngwio.c b/libpng/pngwio.c
index 37c7c3a7..10e919dd 100644
--- a/libpng/pngwio.c
+++ b/libpng/pngwio.c
@@ -1,10 +1,10 @@
/* pngwio.c - functions for data output
*
- * Last changed in libpng 1.6.24 [August 4, 2016]
- * Copyright (c) 1998-2002,2004,2006-2014,2016 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2014,2016,2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -30,7 +30,7 @@
*/
void /* PRIVATE */
-png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
+png_write_data(png_structrp png_ptr, png_const_bytep data, size_t length)
{
/* NOTE: write_data_fn must not change the buffer! */
if (png_ptr->write_data_fn != NULL )
@@ -48,9 +48,9 @@ png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
* than changing the library.
*/
void PNGCBAPI
-png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
+png_default_write_data(png_structp png_ptr, png_bytep data, size_t length)
{
- png_size_t check;
+ size_t check;
if (png_ptr == NULL)
return;
diff --git a/libpng/pngwrite.c b/libpng/pngwrite.c
index a16d77ce..59377a4d 100644
--- a/libpng/pngwrite.c
+++ b/libpng/pngwrite.c
@@ -1,10 +1,10 @@
/* pngwrite.c - general routines to write a PNG file
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -469,7 +469,7 @@ png_write_end(png_structrp png_ptr, png_inforp info_ptr)
#ifdef PNG_CONVERT_tIME_SUPPORTED
void PNGAPI
-png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm * ttime)
+png_convert_from_struct_tm(png_timep ptime, const struct tm * ttime)
{
png_debug(1, "in png_convert_from_struct_tm");
@@ -1536,7 +1536,7 @@ png_write_image_16bit(png_voidp argument)
display->first_row);
png_uint_16p output_row = png_voidcast(png_uint_16p, display->local_row);
png_uint_16p row_end;
- const unsigned int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ?
+ unsigned int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ?
3 : 1;
int aindex = 0;
png_uint_32 y = image->height;
@@ -1573,7 +1573,7 @@ png_write_image_16bit(png_voidp argument)
while (out_ptr < row_end)
{
- const png_uint_16 alpha = in_ptr[aindex];
+ png_uint_16 alpha = in_ptr[aindex];
png_uint_32 reciprocal = 0;
int c;
@@ -1636,7 +1636,7 @@ png_write_image_16bit(png_voidp argument)
* calculation can be done to 15 bits of accuracy; however, the output needs to
* be scaled in the range 0..255*65535, so include that scaling here.
*/
-# define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
+# define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+((alpha)>>1))/(alpha))
static png_byte
png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
@@ -1695,7 +1695,7 @@ png_write_image_8bit(png_voidp argument)
display->first_row);
png_bytep output_row = png_voidcast(png_bytep, display->local_row);
png_uint_32 y = image->height;
- const unsigned int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ?
+ unsigned int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ?
3 : 1;
if ((image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
@@ -1783,25 +1783,25 @@ png_write_image_8bit(png_voidp argument)
static void
png_image_set_PLTE(png_image_write_control *display)
{
- const png_imagep image = display->image;
+ png_imagep image = display->image;
const void *cmap = display->colormap;
- const int entries = image->colormap_entries > 256 ? 256 :
+ int entries = image->colormap_entries > 256 ? 256 :
(int)image->colormap_entries;
/* NOTE: the caller must check for cmap != NULL and entries != 0 */
- const png_uint_32 format = image->format;
- const unsigned int channels = PNG_IMAGE_SAMPLE_CHANNELS(format);
+ png_uint_32 format = image->format;
+ unsigned int channels = PNG_IMAGE_SAMPLE_CHANNELS(format);
# if defined(PNG_FORMAT_BGR_SUPPORTED) &&\
defined(PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED)
- const int afirst = (format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
+ int afirst = (format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
(format & PNG_FORMAT_FLAG_ALPHA) != 0;
# else
# define afirst 0
# endif
# ifdef PNG_FORMAT_BGR_SUPPORTED
- const int bgr = (format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
+ int bgr = (format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
# else
# define bgr 0
# endif
@@ -1951,12 +1951,12 @@ png_image_write_main(png_voidp argument)
* and total image size to ensure that they are within the system limits.
*/
{
- const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
+ unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
if (image->width <= 0x7fffffffU/channels) /* no overflow */
{
png_uint_32 check;
- const png_uint_32 png_row_stride = image->width * channels;
+ png_uint_32 png_row_stride = image->width * channels;
if (display->row_stride == 0)
display->row_stride = (png_int_32)/*SAFE*/png_row_stride;
@@ -2052,7 +2052,7 @@ png_image_write_main(png_voidp argument)
*/
if (write_16bit != 0)
{
- PNG_CONST png_uint_16 le = 0x0001;
+ png_uint_16 le = 0x0001;
if ((*(png_const_bytep) & le) != 0)
png_set_swap(png_ptr);
@@ -2162,12 +2162,11 @@ png_image_write_main(png_voidp argument)
static void (PNGCBAPI
-image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data,
- png_size_t size)
+image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data, size_t size)
{
png_image_write_control *display = png_voidcast(png_image_write_control*,
png_ptr->io_ptr/*backdoor: png_get_io_ptr(png_ptr)*/);
- const png_alloc_size_t ob = display->output_bytes;
+ png_alloc_size_t ob = display->output_bytes;
/* Check for overflow; this should never happen: */
if (size <= ((png_alloc_size_t)-1) - ob)
diff --git a/libpng/pngwtran.c b/libpng/pngwtran.c
index 377b43e5..49a13c1e 100644
--- a/libpng/pngwtran.c
+++ b/libpng/pngwtran.c
@@ -1,10 +1,10 @@
/* pngwtran.c - transforms the data in a row for PNG writers
*
- * Last changed in libpng 1.6.26 [October 20, 2016]
- * Copyright (c) 1998-2002,2004,2006-2016 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -212,9 +212,9 @@ png_do_shift(png_row_infop row_info, png_bytep row,
if (row_info->bit_depth < 8)
{
png_bytep bp = row;
- png_size_t i;
+ size_t i;
unsigned int mask;
- png_size_t row_bytes = row_info->rowbytes;
+ size_t row_bytes = row_info->rowbytes;
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
mask = 0x55;
@@ -254,8 +254,7 @@ png_do_shift(png_row_infop row_info, png_bytep row,
for (i = 0; i < istop; i++, bp++)
{
-
- const unsigned int c = i%channels;
+ unsigned int c = i%channels;
int j;
unsigned int v, out;
@@ -283,7 +282,7 @@ png_do_shift(png_row_infop row_info, png_bytep row,
for (bp = row, i = 0; i < istop; i++)
{
- const unsigned int c = i%channels;
+ unsigned int c = i%channels;
int j;
unsigned int value, v;
@@ -514,7 +513,7 @@ png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
(png_ptr, /* png_ptr */
row_info, /* row_info: */
/* png_uint_32 width; width of row */
- /* png_size_t rowbytes; number of bytes in row */
+ /* size_t 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) */
diff --git a/libpng/pngwutil.c b/libpng/pngwutil.c
index 0d4fb133..16345e4c 100644
--- a/libpng/pngwutil.c
+++ b/libpng/pngwutil.c
@@ -1,10 +1,10 @@
/* pngwutil.c - utilities to write a PNG file
*
- * Last changed in libpng 1.6.32 [August 24, 2017]
- * Copyright (c) 1998-2002,2004,2006-2017 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.)
+ * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
+ * Copyright (c) 1996-1997 Andreas Dilger
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -59,7 +59,7 @@ png_write_sig(png_structrp png_ptr)
/* 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));
+ (size_t)(8 - png_ptr->sig_bytes));
if (png_ptr->sig_bytes < 3)
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
@@ -124,8 +124,7 @@ png_write_chunk_start(png_structrp png_ptr, png_const_bytep chunk_string,
* given to png_write_chunk_header().
*/
void PNGAPI
-png_write_chunk_data(png_structrp png_ptr, png_const_bytep data,
- png_size_t length)
+png_write_chunk_data(png_structrp png_ptr, png_const_bytep data, size_t length)
{
/* Write the data, and run the CRC over it */
if (png_ptr == NULL)
@@ -160,7 +159,7 @@ png_write_chunk_end(png_structrp png_ptr)
/* Write the crc in a single operation */
png_save_uint_32(buf, png_ptr->crc);
- png_write_data(png_ptr, buf, (png_size_t)4);
+ png_write_data(png_ptr, buf, 4);
}
/* Write a PNG chunk all at once. The type is an array of ASCII characters
@@ -174,7 +173,7 @@ png_write_chunk_end(png_structrp png_ptr)
*/
static void
png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
- png_const_bytep data, png_size_t length)
+ png_const_bytep data, size_t length)
{
if (png_ptr == NULL)
return;
@@ -191,7 +190,7 @@ png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
/* This is the API that calls the internal function above. */
void PNGAPI
png_write_chunk(png_structrp png_ptr, png_const_bytep chunk_string,
- png_const_bytep data, png_size_t length)
+ png_const_bytep data, size_t length)
{
png_write_complete_chunk(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), data,
length);
@@ -820,7 +819,7 @@ png_write_IHDR(png_structrp png_ptr, png_uint_32 width, png_uint_32 height,
buf[12] = (png_byte)interlace_type;
/* Write the chunk */
- png_write_complete_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
+ png_write_complete_chunk(png_ptr, png_IHDR, buf, 13);
if ((png_ptr->do_filter) == PNG_NO_FILTERS)
{
@@ -889,7 +888,7 @@ png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
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);
+ png_write_chunk_data(png_ptr, buf, 3);
}
#else
@@ -903,7 +902,7 @@ png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
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);
+ png_write_chunk_data(png_ptr, buf, 3);
}
#endif
@@ -1075,7 +1074,7 @@ png_write_IEND(png_structrp png_ptr)
{
png_debug(1, "in png_write_IEND");
- png_write_complete_chunk(png_ptr, png_IEND, NULL, (png_size_t)0);
+ png_write_complete_chunk(png_ptr, png_IEND, NULL, 0);
png_ptr->mode |= PNG_HAVE_IEND;
}
@@ -1090,7 +1089,7 @@ png_write_gAMA_fixed(png_structrp png_ptr, png_fixed_point file_gamma)
/* file_gamma is saved in 1/100,000ths */
png_save_uint_32(buf, (png_uint_32)file_gamma);
- png_write_complete_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
+ png_write_complete_chunk(png_ptr, png_gAMA, buf, 4);
}
#endif
@@ -1108,7 +1107,7 @@ png_write_sRGB(png_structrp png_ptr, int srgb_intent)
"Invalid sRGB rendering intent specified");
buf[0]=(png_byte)srgb_intent;
- png_write_complete_chunk(png_ptr, png_sRGB, buf, (png_size_t)1);
+ png_write_complete_chunk(png_ptr, png_sRGB, buf, 1);
}
#endif
@@ -1182,8 +1181,8 @@ png_write_sPLT(png_structrp png_ptr, png_const_sPLT_tp spalette)
png_uint_32 name_len;
png_byte new_name[80];
png_byte entrybuf[10];
- png_size_t entry_size = (spalette->depth == 8 ? 6 : 10);
- png_size_t palette_size = entry_size * (png_size_t)spalette->nentries;
+ size_t entry_size = (spalette->depth == 8 ? 6 : 10);
+ size_t palette_size = entry_size * (size_t)spalette->nentries;
png_sPLT_entryp ep;
#ifndef PNG_POINTER_INDEXING_SUPPORTED
int i;
@@ -1200,10 +1199,9 @@ png_write_sPLT(png_structrp png_ptr, png_const_sPLT_tp spalette)
png_write_chunk_header(png_ptr, png_sPLT,
(png_uint_32)(name_len + 2 + palette_size));
- png_write_chunk_data(png_ptr, (png_bytep)new_name,
- (png_size_t)(name_len + 1));
+ png_write_chunk_data(png_ptr, (png_bytep)new_name, (size_t)(name_len + 1));
- png_write_chunk_data(png_ptr, &spalette->depth, (png_size_t)1);
+ png_write_chunk_data(png_ptr, &spalette->depth, 1);
/* Loop through each palette entry, writing appropriately */
#ifdef PNG_POINTER_INDEXING_SUPPORTED
@@ -1265,7 +1263,7 @@ void /* PRIVATE */
png_write_sBIT(png_structrp png_ptr, png_const_color_8p sbit, int color_type)
{
png_byte buf[4];
- png_size_t size;
+ size_t size;
png_debug(1, "in png_write_sBIT");
@@ -1365,7 +1363,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
/* Write the chunk out as it is */
png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha,
- (png_size_t)num_trans);
+ (size_t)num_trans);
}
else if (color_type == PNG_COLOR_TYPE_GRAY)
@@ -1380,7 +1378,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
}
png_save_uint_16(buf, tran->gray);
- png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)2);
+ png_write_complete_chunk(png_ptr, png_tRNS, buf, 2);
}
else if (color_type == PNG_COLOR_TYPE_RGB)
@@ -1400,7 +1398,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
return;
}
- png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)6);
+ png_write_complete_chunk(png_ptr, png_tRNS, buf, 6);
}
else
@@ -1433,7 +1431,7 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
}
buf[0] = back->index;
- png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)1);
+ png_write_complete_chunk(png_ptr, png_bKGD, buf, 1);
}
else if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
@@ -1454,7 +1452,7 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
return;
}
- png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)6);
+ png_write_complete_chunk(png_ptr, png_bKGD, buf, 6);
}
else
@@ -1468,7 +1466,7 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
}
png_save_uint_16(buf, back->gray);
- png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)2);
+ png_write_complete_chunk(png_ptr, png_bKGD, buf, 2);
}
}
#endif
@@ -1488,7 +1486,7 @@ png_write_eXIf(png_structrp png_ptr, png_bytep exif, int num_exif)
for (i = 0; i < num_exif; i++)
{
buf[0] = exif[i];
- png_write_chunk_data(png_ptr, buf, (png_size_t)1);
+ png_write_chunk_data(png_ptr, buf, 1);
}
png_write_chunk_end(png_ptr);
@@ -1519,7 +1517,7 @@ png_write_hIST(png_structrp png_ptr, png_const_uint_16p hist, int num_hist)
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_data(png_ptr, buf, 2);
}
png_write_chunk_end(png_ptr);
@@ -1530,7 +1528,7 @@ png_write_hIST(png_structrp png_ptr, png_const_uint_16p hist, int num_hist)
/* Write a tEXt chunk */
void /* PRIVATE */
png_write_tEXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
- png_size_t text_len)
+ size_t text_len)
{
png_uint_32 key_len;
png_byte new_key[80];
@@ -1627,7 +1625,7 @@ png_write_iTXt(png_structrp png_ptr, int compression, png_const_charp key,
png_const_charp lang, png_const_charp lang_key, png_const_charp text)
{
png_uint_32 key_len, prefix_len;
- png_size_t lang_len, lang_key_len;
+ size_t lang_len, lang_key_len;
png_byte new_key[82];
compression_state comp;
@@ -1737,7 +1735,7 @@ png_write_oFFs(png_structrp png_ptr, png_int_32 x_offset, png_int_32 y_offset,
png_save_int_32(buf + 4, y_offset);
buf[8] = (png_byte)unit_type;
- png_write_complete_chunk(png_ptr, png_oFFs, buf, (png_size_t)9);
+ png_write_complete_chunk(png_ptr, png_oFFs, buf, 9);
}
#endif
#ifdef PNG_WRITE_pCAL_SUPPORTED
@@ -1748,7 +1746,7 @@ png_write_pCAL(png_structrp png_ptr, png_charp purpose, png_int_32 X0,
png_charpp params)
{
png_uint_32 purpose_len;
- png_size_t units_len, total_len;
+ size_t units_len, total_len;
png_size_tp params_len;
png_byte buf[10];
png_byte new_purpose[80];
@@ -1772,7 +1770,7 @@ png_write_pCAL(png_structrp png_ptr, png_charp purpose, png_int_32 X0,
total_len = purpose_len + units_len + 10;
params_len = (png_size_tp)png_malloc(png_ptr,
- (png_alloc_size_t)((png_alloc_size_t)nparams * (sizeof (png_size_t))));
+ (png_alloc_size_t)((png_alloc_size_t)nparams * (sizeof (size_t))));
/* Find the length of each parameter, making sure we don't count the
* null terminator for the last parameter.
@@ -1792,8 +1790,8 @@ png_write_pCAL(png_structrp png_ptr, png_charp purpose, png_int_32 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_const_bytep)units, (png_size_t)units_len);
+ png_write_chunk_data(png_ptr, buf, 10);
+ png_write_chunk_data(png_ptr, (png_const_bytep)units, (size_t)units_len);
for (i = 0; i < nparams; i++)
{
@@ -1812,7 +1810,7 @@ png_write_sCAL_s(png_structrp png_ptr, int unit, png_const_charp width,
png_const_charp height)
{
png_byte buf[64];
- png_size_t wlen, hlen, total_len;
+ size_t wlen, hlen, total_len;
png_debug(1, "in png_write_sCAL_s");
@@ -1853,7 +1851,7 @@ png_write_pHYs(png_structrp png_ptr, png_uint_32 x_pixels_per_unit,
png_save_uint_32(buf + 4, y_pixels_per_unit);
buf[8] = (png_byte)unit_type;
- png_write_complete_chunk(png_ptr, png_pHYs, buf, (png_size_t)9);
+ png_write_complete_chunk(png_ptr, png_pHYs, buf, 9);
}
#endif
@@ -1883,7 +1881,7 @@ png_write_tIME(png_structrp png_ptr, png_const_timep mod_time)
buf[5] = mod_time->minute;
buf[6] = mod_time->second;
- png_write_complete_chunk(png_ptr, png_tIME, buf, (png_size_t)7);
+ png_write_complete_chunk(png_ptr, png_tIME, buf, 7);
}
#endif
@@ -1895,16 +1893,16 @@ png_write_start_row(png_structrp png_ptr)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
/* Start of interlace block in the y direction */
- static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
+ static const png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
/* Offset to next interlace block in the y direction */
- static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
+ static const png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
#endif
png_alloc_size_t buf_size;
@@ -2010,16 +2008,16 @@ png_write_finish_row(png_structrp png_ptr)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
/* Start of interlace block in the y direction */
- static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
+ static const png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
/* Offset to next interlace block in the y direction */
- static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
+ static const png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
#endif
png_debug(1, "in png_write_finish_row");
@@ -2073,8 +2071,8 @@ png_write_finish_row(png_structrp png_ptr)
{
if (png_ptr->prev_row != NULL)
memset(png_ptr->prev_row, 0,
- (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels*
- png_ptr->usr_bit_depth, png_ptr->width)) + 1);
+ PNG_ROWBYTES(png_ptr->usr_channels *
+ png_ptr->usr_bit_depth, png_ptr->width) + 1);
return;
}
@@ -2100,10 +2098,10 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* Start of interlace block */
- static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
+ static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
/* Offset to next interlace block */
- static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
+ static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
png_debug(1, "in png_do_write_interlace");
@@ -2130,7 +2128,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
for (i = png_pass_start[pass]; i < row_width;
i += png_pass_inc[pass])
{
- sp = row + (png_size_t)(i >> 3);
+ sp = row + (size_t)(i >> 3);
value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
d |= (value << shift);
@@ -2168,7 +2166,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
for (i = png_pass_start[pass]; i < row_width;
i += png_pass_inc[pass])
{
- sp = row + (png_size_t)(i >> 2);
+ sp = row + (size_t)(i >> 2);
value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
d |= (value << shift);
@@ -2204,7 +2202,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
for (i = png_pass_start[pass]; i < row_width;
i += png_pass_inc[pass])
{
- sp = row + (png_size_t)(i >> 1);
+ sp = row + (size_t)(i >> 1);
value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
d |= (value << shift);
@@ -2230,7 +2228,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
png_bytep dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
- png_size_t pixel_bytes;
+ size_t pixel_bytes;
/* Start at the beginning */
dp = row;
@@ -2243,7 +2241,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
i += png_pass_inc[pass])
{
/* Find out where the original pixel is */
- sp = row + (png_size_t)i * pixel_bytes;
+ sp = row + (size_t)i * pixel_bytes;
/* Move the pixel */
if (dp != sp)
@@ -2274,16 +2272,16 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
*/
static void /* PRIVATE */
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
- png_size_t row_bytes);
+ size_t row_bytes);
#ifdef PNG_WRITE_FILTER_SUPPORTED
-static png_size_t /* PRIVATE */
-png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes, const png_size_t lmins)
+static size_t /* PRIVATE */
+png_setup_sub_row(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes, size_t lmins)
{
png_bytep rp, dp, lp;
- png_size_t i;
- png_size_t sum = 0;
+ size_t i;
+ size_t sum = 0;
unsigned int v;
png_ptr->try_row[0] = PNG_FILTER_VALUE_SUB;
@@ -2317,11 +2315,11 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
}
static void /* PRIVATE */
-png_setup_sub_row_only(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes)
+png_setup_sub_row_only(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes)
{
png_bytep rp, dp, lp;
- png_size_t i;
+ size_t i;
png_ptr->try_row[0] = PNG_FILTER_VALUE_SUB;
@@ -2338,13 +2336,12 @@ png_setup_sub_row_only(png_structrp png_ptr, const png_uint_32 bpp,
}
}
-static png_size_t /* PRIVATE */
-png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
- const png_size_t lmins)
+static size_t /* PRIVATE */
+png_setup_up_row(png_structrp png_ptr, size_t row_bytes, size_t lmins)
{
png_bytep rp, dp, pp;
- png_size_t i;
- png_size_t sum = 0;
+ size_t i;
+ size_t sum = 0;
unsigned int v;
png_ptr->try_row[0] = PNG_FILTER_VALUE_UP;
@@ -2367,10 +2364,10 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
return (sum);
}
static void /* PRIVATE */
-png_setup_up_row_only(png_structrp png_ptr, const png_size_t row_bytes)
+png_setup_up_row_only(png_structrp png_ptr, size_t row_bytes)
{
png_bytep rp, dp, pp;
- png_size_t i;
+ size_t i;
png_ptr->try_row[0] = PNG_FILTER_VALUE_UP;
@@ -2382,13 +2379,13 @@ png_setup_up_row_only(png_structrp png_ptr, const png_size_t row_bytes)
}
}
-static png_size_t /* PRIVATE */
-png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes, const png_size_t lmins)
+static size_t /* PRIVATE */
+png_setup_avg_row(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes, size_t lmins)
{
png_bytep rp, dp, pp, lp;
png_uint_32 i;
- png_size_t sum = 0;
+ size_t sum = 0;
unsigned int v;
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
@@ -2423,8 +2420,8 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
return (sum);
}
static void /* PRIVATE */
-png_setup_avg_row_only(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes)
+png_setup_avg_row_only(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes)
{
png_bytep rp, dp, pp, lp;
png_uint_32 i;
@@ -2444,13 +2441,13 @@ png_setup_avg_row_only(png_structrp png_ptr, const png_uint_32 bpp,
}
}
-static png_size_t /* PRIVATE */
-png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes, const png_size_t lmins)
+static size_t /* PRIVATE */
+png_setup_paeth_row(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes, size_t lmins)
{
png_bytep rp, dp, pp, cp, lp;
- png_size_t i;
- png_size_t sum = 0;
+ size_t i;
+ size_t sum = 0;
unsigned int v;
png_ptr->try_row[0] = PNG_FILTER_VALUE_PAETH;
@@ -2506,11 +2503,11 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
return (sum);
}
static void /* PRIVATE */
-png_setup_paeth_row_only(png_structrp png_ptr, const png_uint_32 bpp,
- const png_size_t row_bytes)
+png_setup_paeth_row_only(png_structrp png_ptr, png_uint_32 bpp,
+ size_t row_bytes)
{
png_bytep rp, dp, pp, cp, lp;
- png_size_t i;
+ size_t i;
png_ptr->try_row[0] = PNG_FILTER_VALUE_PAETH;
@@ -2559,8 +2556,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
png_bytep row_buf;
png_bytep best_row;
png_uint_32 bpp;
- png_size_t mins;
- png_size_t row_bytes = row_info->rowbytes;
+ size_t mins;
+ size_t row_bytes = row_info->rowbytes;
png_debug(1, "in png_write_find_filter");
@@ -2615,8 +2612,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
* 'none' filter.
*/
png_bytep rp;
- png_size_t sum = 0;
- png_size_t i;
+ size_t sum = 0;
+ size_t i;
unsigned int v;
{
@@ -2644,8 +2641,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
else if ((filter_to_do & PNG_FILTER_SUB) != 0)
{
- png_size_t sum;
- png_size_t lmins = mins;
+ size_t sum;
+ size_t lmins = mins;
sum = png_setup_sub_row(png_ptr, bpp, row_bytes, lmins);
@@ -2670,8 +2667,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
else if ((filter_to_do & PNG_FILTER_UP) != 0)
{
- png_size_t sum;
- png_size_t lmins = mins;
+ size_t sum;
+ size_t lmins = mins;
sum = png_setup_up_row(png_ptr, row_bytes, lmins);
@@ -2696,8 +2693,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
else if ((filter_to_do & PNG_FILTER_AVG) != 0)
{
- png_size_t sum;
- png_size_t lmins = mins;
+ size_t sum;
+ size_t lmins = mins;
sum= png_setup_avg_row(png_ptr, bpp, row_bytes, lmins);
@@ -2722,8 +2719,8 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
else if ((filter_to_do & PNG_FILTER_PAETH) != 0)
{
- png_size_t sum;
- png_size_t lmins = mins;
+ size_t sum;
+ size_t lmins = mins;
sum = png_setup_paeth_row(png_ptr, bpp, row_bytes, lmins);
@@ -2748,7 +2745,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
/* Do the actual writing of a previously filtered row. */
static void
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
- png_size_t full_row_length/*includes filter byte*/)
+ size_t full_row_length/*includes filter byte*/)
{
png_debug(1, "in png_write_filtered_row");
diff --git a/libpng/powerpc/filter_vsx_intrinsics.c b/libpng/powerpc/filter_vsx_intrinsics.c
index e3de496b..01cf8800 100644
--- a/libpng/powerpc/filter_vsx_intrinsics.c
+++ b/libpng/powerpc/filter_vsx_intrinsics.c
@@ -1,13 +1,14 @@
/* filter_vsx_intrinsics.c - PowerPC optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2017 Glenn Randers-Pehrson
* Written by Vadim Barkov, 2017.
- * Last changed in libpng 1.6.29 [March 16, 2017]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
+
#include <stdio.h>
#include <stdint.h>
#include "../pngpriv.h"
@@ -42,8 +43,8 @@
png_byte i;\
png_bytep rp = row + offset;\
png_const_bytep pp = prev_row;\
- png_size_t unaligned_top = 16 - (((png_size_t)rp % 16));\
- png_size_t istop;\
+ size_t unaligned_top = 16 - (((size_t)rp % 16));\
+ size_t istop;\
if(unaligned_top == 16)\
unaligned_top = 0;\
istop = row_info->rowbytes;\
@@ -173,7 +174,7 @@ static const vector unsigned char VSX_SHORT_TO_CHAR4_3 = {16,16,16,16,16,16,16,1
void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 4;
+ png_byte bpp = 4;
vector unsigned char rp_vec;
vector unsigned char part_vec;
@@ -230,7 +231,7 @@ void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_sub3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 3;
+ png_byte bpp = 3;
vector unsigned char rp_vec;
vector unsigned char part_vec;
@@ -294,7 +295,7 @@ void png_read_filter_row_sub3_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 4;
+ png_byte bpp = 4;
vector unsigned char rp_vec;
vector unsigned char pp_vec;
@@ -381,7 +382,7 @@ void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 3;
+ png_byte bpp = 3;
vector unsigned char rp_vec;
vector unsigned char pp_vec;
@@ -499,7 +500,7 @@ void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 4;
+ png_byte bpp = 4;
int a, b, c, pa, pb, pc, p;
vector unsigned char rp_vec;
@@ -619,7 +620,7 @@ void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_paeth3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- const png_byte bpp = 3;
+ png_byte bpp = 3;
int a, b, c, pa, pb, pc, p;
vector unsigned char rp_vec;
diff --git a/libpng/powerpc/powerpc_init.c b/libpng/powerpc/powerpc_init.c
index 07016177..54426c55 100644
--- a/libpng/powerpc/powerpc_init.c
+++ b/libpng/powerpc/powerpc_init.c
@@ -1,14 +1,15 @@
/* powerpc_init.c - POWERPC optimised filter functions
*
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2017 Glenn Randers-Pehrson
* Written by Vadim Barkov, 2017.
- * Last changed in libpng 1.6.29 [March 16, 2017]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
+
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
* called.
*/
diff --git a/libpng/projects/owatcom/pngconfig.mak b/libpng/projects/owatcom/pngconfig.mak
index 1a5b8c3b..7524127b 100644
--- a/libpng/projects/owatcom/pngconfig.mak
+++ b/libpng/projects/owatcom/pngconfig.mak
@@ -117,7 +117,7 @@ $# 3) Delete this file (config.inf).
<<
@$(COPY) << pngconfig.dfa
$# pngconfig.dfa: this file contains configuration options for libpng.
-$# If emtpy the standard configuration will be built. For this file to be
+$# If empty the standard configuration will be built. For this file to be
$# used a working version of the program 'awk' is required and the program
$# must be identified in the 'before' rule of the project.
$#
@@ -144,7 +144,7 @@ $# dependency on pnglibconf.h correctly.
$#
$# If awk isn't set then this file is bypassed. If you just want the standard
$# configuration it is automatically produced from the distributed version
-$# (scripts\pnglibconf.h.prebuilt) by editting PNG_API_RULE to 2 (to force use
+$# (scripts\pnglibconf.h.prebuilt) by editing PNG_API_RULE to 2 (to force use
$# of the OpenWatcom library calling convention.)
$#
<<
diff --git a/libpng/projects/visualc71/README.txt b/libpng/projects/visualc71/README.txt
index 34565e4d..4e1c8fa1 100644
--- a/libpng/projects/visualc71/README.txt
+++ b/libpng/projects/visualc71/README.txt
@@ -12,7 +12,7 @@ Assumptions:
* The libpng source files are in ..\..
* The zlib source files are in ..\..\..\zlib
* The zlib project file is in . /* Warning: This is until the zlib project
- files get intergrated into the next zlib release. The final zlib project
+ files get integrated into the next zlib release. The final zlib project
directory will then be ..\..\..\zlib\projects\visualc71. */
To use:
diff --git a/libpng/projects/vstudio/README.txt b/libpng/projects/vstudio/README.txt
index 71d3ba23..e28ec954 100644
--- a/libpng/projects/vstudio/README.txt
+++ b/libpng/projects/vstudio/README.txt
@@ -1,76 +1,77 @@
+Instructions for building libpng using Microsoft Visual Studio
+==============================================================
-VisualStudio instructions
-
-libpng version 1.6.34 - September 29, 2017
-
+Copyright (c) 2018 Cosmin Truta
Copyright (c) 2010,2013,2015 Glenn Randers-Pehrson
This code is released under the libpng license.
-For conditions of distribution and use, see the disclaimer
-and license in png.h
+For conditions of distribution and use, see the disclaimer and license
+in png.h
-This directory contains support for building libpng under MicroSoft
-VisualStudio 2010. It may also work under later versions of VisualStudio.
-You should be familiar with VisualStudio before using this directory.
+This directory contains a solution for building libpng under Microsoft
+Visual Studio 2010. It may also work under later versions of Visual
+Studio. You should be familiar with Visual Studio before using this
+solution.
Initial preparations
-====================
-You must enter some information in zlib.props before attempting to build
-with this 'solution'. Please read and edit zlib.props first. You will
-probably not be familiar with the contents of zlib.props - do not worry,
-it is mostly harmless.
+--------------------
+You must enter some information in zlib.props before attempting to
+build with this 'solution'. Please read and edit zlib.props first.
+You will probably not be familiar with the contents of zlib.props -
+do not worry, it is mostly harmless.
This is all you need to do to build the 'release' and 'release library'
configurations.
Debugging
-=========
+---------
The release configurations default to /Ox optimization. Full debugging
-information is produced (in the .pdb), but if you encounter a problem the
-optimization may make it difficult to debug. Simply rebuild with a lower
-optimization level (e.g. /Od.)
+information is produced (in the .pdb), but if you encounter a problem
+the optimization may make it difficult to debug. Simply rebuild with a
+lower optimization level (e.g. /Od.)
Linking your application
-========================
-Normally you should link against the 'release' configuration. This builds a
-DLL for libpng with the default runtime options used by Visual Studio 2010.
-In particular the runtime library is the "MultiThreaded DLL" version.
-If you use Visual Studio defaults to build your application you will have no
-problems.
-
-If you don't use the Visual Studio defaults your application must still be
-built with the default runtime option (/MD). If, for some reason, it is not
-then your application will crash inside libpng16.dll as soon as libpng
-tries to read from a file handle you pass in.
-
-If you do not want to use the DLL, for example for a very small application,
-the 'release library' configuration may be more appropriate. This is built
-with a non-standard runtime library - the "MultiThreaded" version. When you
-build your application it must be compiled with this option (/MT), otherwise
-it will not build (if you are lucky) or crash (if you are not.) See the
-WARNING file that is distributed along with this readme.txt.
+------------------------
+Normally you should link against the 'release' configuration. This
+builds a DLL for libpng with the default runtime options used by Visual
+Studio. In particular the runtime library is the "MultiThreaded DLL"
+version. If you use Visual Studio defaults to build your application,
+you should have no problems.
+
+If you don't use the Visual Studio defaults your application must still
+be built with the default runtime option (/MD). If, for some reason,
+it is not then your application will crash inside libpng16.dll as soon
+as libpng tries to read from a file handle you pass in.
+
+If you do not want to use the DLL, and prefer static linking instead,
+you may choose the 'release library' configuration. This is built with
+a non-standard runtime library - the "MultiThreaded" version. When you
+build your application, it must be compiled with this option (/MT),
+otherwise it will not build (if you are lucky) or it will crash (if you
+are not.) See the WARNING file that is distributed with this README.
Stop reading here
-=================
+-----------------
You have enough information to build a working application.
Debug versions have limited support
-===================================
-This solution includes limited support for debug versions of libpng. You
-do not need these unless your own solution itself uses debug builds (it is
-far more effective to debug on the release builds, there is no point building
-a special debug build unless you have heap corruption problems that you can't
-track down.)
+-----------------------------------
+This solution includes limited support for debug versions of libpng.
+You do not need these unless your own solution itself uses debug builds
+(it is far more effective to debug on the release builds, there is no
+point building a special debug build unless you have heap corruption
+problems that you can't track down.)
-The debug build of libpng is minimally supported. Support for debug builds of
-zlib is also minimal. You really don't want to do this.
+The debug build of libpng is minimally supported. Support for debug
+builds of zlib is also minimal. Please keep this in mind, if you want
+to use it.
WARNING
-=======
-Libpng 1.6.x does not use the default run-time library when building static
-library builds of libpng; instead of the shared DLL runtime it uses a static
-runtime. If you need to change this make sure to change the setting on all the
-relevant projects:
+-------
+Libpng 1.6.x does not use the default run-time library when building
+static library builds of libpng; instead of the shared DLL runtime, it
+uses a static runtime. If you need to change this, make sure to change
+the setting on all the relevant projects:
libpng
zlib
@@ -82,16 +83,5 @@ The runtime library settings for each build are as follows:
DLL /MD /MDd
Library /MT /MTd
-NOTICE that libpng 1.5.x erroneously used /MD for Debug DLL builds; if you used
-the debug builds in your app and you changed your app to use /MD you will need
-to change it back to /MDd for libpng 1.6.0 and later.
-
-The Visual Studio 2010 defaults for a Win32 DLL or Static Library project are
-as follows:
-
- Release Debug
- DLL /MD /MDd
- Static Library /MD /MDd
-
-Also, be sure to build libpng, zlib, and your project all for the same
+Also, be sure to build libpng, zlib, and your project, all for the same
platform (e.g., 32-bit or 64-bit).
diff --git a/libpng/projects/vstudio/zlib.props b/libpng/projects/vstudio/zlib.props
index 8e3682a2..87862796 100644
--- a/libpng/projects/vstudio/zlib.props
+++ b/libpng/projects/vstudio/zlib.props
@@ -2,16 +2,15 @@
<!--
* zlib.props - location of zlib source
*
- * libpng version 1.6.34 - September 29, 2017
- *
+ * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
- * You must edit this file to record the location of the zlib
- * source code.
+ * You may need to edit this file in order to update the location
+ * of the zlib source code.
-->
<Project ToolsVersion="4.0"
@@ -32,7 +31,7 @@
versions do not match. The zlib version used in this build is recorded
below:
-->
- <ZLibSrcDir>..\..\..\..\zlib-1.2.8</ZLibSrcDir>
+ <ZLibSrcDir>..\..\..\..\zlib</ZLibSrcDir>
<!-- The following line allows compilation for an ARM target with Visual
Studio 2012. Notice that this is not supported by the Visual Studio
diff --git a/libpng/scripts/README.txt b/libpng/scripts/README.txt
index 793506e4..3d911ef2 100644
--- a/libpng/scripts/README.txt
+++ b/libpng/scripts/README.txt
@@ -1,24 +1,20 @@
-Makefiles for libpng version 1.6.34 - September 29, 2017
+Makefiles for libpng
-pnglibconf.h.prebuilt => Stores configuration settings
+pnglibconf.h.prebuilt => Configuration settings
makefile.linux => Linux/ELF makefile
- (gcc, creates libpng16.so.16.1.6.34)
+ (gcc, creates shared libpng16.so.16.1.6.*)
makefile.linux-opt=> Linux/ELF makefile with hardware optimizations on
- (gcc, creates libpng16.so.16.1.6.34)
+ (gcc, creates shared libpng16.so.16.1.6.*)
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.acorn => Acorn makefile
makefile.aix => AIX/gcc makefile
makefile.amiga => Amiga makefile
makefile.atari => Atari makefile
makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
- makefile.beos => beos makefile
- makefile.bor => Borland makefile (uses bcc)
+ makefile.beos => BeOS makefile
makefile.cegcc => minge32ce for Windows CE makefile
- makefile.darwin => Darwin makefile, can use on MacosX
+ makefile.darwin => Darwin makefile, for macOS (formerly Mac OS X)
makefile.dec => DEC Alpha UNIX makefile
makefile.dj2 => DJGPP 2 makefile
makefile.freebsd => FreeBSD makefile
@@ -29,23 +25,20 @@ pnglibconf.h.prebuilt => Stores configuration settings
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
makefile.intel => Intel C/C++ version 4.0 and later
makefile.mips => MIPS makefile
- makefile.msc => Microsoft C makefile
- makefile.netbsd => NetBSD/cc makefile, makes libpng.so.
+ makefile.netbsd => NetBSD/cc makefile, makes shared libpng.so
makefile.openbsd => OpenBSD makefile
- makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
- makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
- makefile.sggcc => Silicon Graphics (gcc,
- creates libpng16.so.16.1.6.34)
+ makefile.sco => SCO OSr5 ELF and Unixware 7 with Native cc
+ makefile.sggcc => Silicon Graphics makefile
+ (gcc, creates shared libpng16.so.16.1.6.*)
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
- makefile.solaris => Solaris 2.X makefile (gcc,
- creates libpng16.so.16.1.6.34)
- makefile.so9 => Solaris 9 makefile (gcc,
- creates libpng16.so.16.1.6.34)
+ makefile.solaris => Solaris 2.X makefile
+ (gcc, creates shared libpng16.so.16.1.6.*)
+ makefile.so9 => Solaris 9 makefile
+ (gcc, creates shared libpng16.so.16.1.6.*)
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
makefile.sunos => Sun makefile
makefile.32sunu => Sun Ultra 32-bit makefile
makefile.64sunu => Sun Ultra 64-bit makefile
- makefile.tc3 => Turbo C 3.0 makefile
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later
makevms.com => VMS build script
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
@@ -57,20 +50,20 @@ Other supporting scripts:
libpng-config-body.in => used by several makefiles to create libpng-config
libpng-config-head.in => used by several makefiles to create libpng-config
libpng.pc.in => Used by several makefiles to create libpng.pc
- pngwin.rc => Used by the visualc71 project.
+ pngwin.rc => Used by the visualc71 project
pngwin.def => Used by makefile.os2
pngwin.dfn => Used to maintain pngwin.def
SCOPTIONS.ppc => Used with smakefile.ppc
- checksym.awk => Used for maintaining pnglibconf.h
- def.dfn => Used for maintaining pnglibconf.h
- options.awk => Used for maintaining pnglibconf.h
- pnglibconf.dfa => Used for maintaining pnglibconf.h
- pnglibconf.mak => Used for maintaining pnglibconf.h
- sym.dfn => Used for symbol versioning
- symbols.def => Used for symbol versioning
- symbols.dfn => Used for symbol versioning
- vers.dfn => Used for symbol versioning
+ checksym.awk => Used for maintaining pnglibconf.h
+ def.dfn => Used for maintaining pnglibconf.h
+ options.awk => Used for maintaining pnglibconf.h
+ pnglibconf.dfa => Used for maintaining pnglibconf.h
+ pnglibconf.mak => Used for maintaining pnglibconf.h
+ sym.dfn => Used for symbol versioning
+ symbols.def => Used for symbol versioning
+ symbols.dfn => Used for symbol versioning
+ vers.dfn => Used for symbol versioning
libtool.m4 => Used by autoconf tools
ltoptions.m4 => Used by autoconf tools
diff --git a/libpng/scripts/def.c b/libpng/scripts/def.c
deleted file mode 100644
index 23bdbad4..00000000
--- a/libpng/scripts/def.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* def.c - define format of libpng.def
- *
- * Last changed in libpng version 1.6.16 [December 22, 2014]
- * Copyright (c) 2011-2014 Glenn Randers-Pehrson
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* Write the export file header: */
-PNG_DFN ";--------------------------------------------------------------"
-PNG_DFN "; LIBPNG module definition file for OS/2"
-PNG_DFN ";--------------------------------------------------------------"
-PNG_DFN ""
-PNG_DFN "; If you give the library an explicit name one or other files"
-PNG_DFN "; may need modifying to support the new name on one or more"
-PNG_DFN "; systems."
-PNG_DFN "LIBRARY"
-PNG_DFN "OS2 DESCRIPTION "PNG image compression library""
-PNG_DFN "OS2 CODE PRELOAD MOVEABLE DISCARDABLE"
-PNG_DFN ""
-PNG_DFN "EXPORTS"
-PNG_DFN ";Version 1.6.34"
-
-#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
- PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"
-
-#include "../png.h"
diff --git a/libpng/scripts/descrip.mms b/libpng/scripts/descrip.mms
index 463c4251..a3aefbf4 100644
--- a/libpng/scripts/descrip.mms
+++ b/libpng/scripts/descrip.mms
@@ -16,10 +16,10 @@ OBJS = png.obj, pngset.obj, pngget.obj, pngrutil.obj, pngtrans.obj,\
CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF)
all : pngtest.exe libpng.olb
- @ write sys$output " pngtest available"
+ @ write sys$output " pngtest available"
libpng.olb : libpng.olb($(OBJS))
- @ write sys$output " Libpng available"
+ @ write sys$output " libpng available"
pngtest.exe : pngtest.obj libpng.olb
diff --git a/libpng/scripts/libpng-config-head.in b/libpng/scripts/libpng-config-head.in
index 64dd3987..2a5afb46 100644
--- a/libpng/scripts/libpng-config-head.in
+++ b/libpng/scripts/libpng-config-head.in
@@ -11,7 +11,7 @@
# Modeled after libxml-config.
-version=1.6.34
+version=1.6.37
prefix=""
libdir=""
libs=""
diff --git a/libpng/scripts/libpng.pc.in b/libpng/scripts/libpng.pc.in
index 33c65767..416fefe8 100644
--- a/libpng/scripts/libpng.pc.in
+++ b/libpng/scripts/libpng.pc.in
@@ -5,6 +5,6 @@ includedir=@includedir@/libpng16
Name: libpng
Description: Loads and saves PNG files
-Version: 1.6.34
+Version: 1.6.37
Libs: -L${libdir} -lpng16
Cflags: -I${includedir}
diff --git a/libpng/scripts/makefile.32sunu b/libpng/scripts/makefile.32sunu
index 7d4b7c53..c849ecd2 100644
--- a/libpng/scripts/makefile.32sunu
+++ b/libpng/scripts/makefile.32sunu
@@ -219,7 +219,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.64sunu b/libpng/scripts/makefile.64sunu
index 341fce96..8880fa9b 100644
--- a/libpng/scripts/makefile.64sunu
+++ b/libpng/scripts/makefile.64sunu
@@ -219,7 +219,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.bor b/libpng/scripts/makefile.bor
deleted file mode 100644
index 6693772d..00000000
--- a/libpng/scripts/makefile.bor
+++ /dev/null
@@ -1,170 +0,0 @@
-# Makefile for libpng
-# 16-bit Borland C++ (Note: All modules are compiled in C mode)
-# To build the library, do:
-# "make -fmakefile.bor -DMODEL=c"
-# or: "make -fmakefile.bor -DMODEL=l"
-#
-# ------------ Borland C++ ------------
-
-### Absolutely necessary for this makefile to work
-.AUTODEPEND
-
-## Where zlib.h, zconf.h and zlib_MODEL.lib are
-ZLIB_DIR=..\zlib
-
-## Compiler, linker, librarian and other tools
-CC=bcc
-LD=bcc
-LIB=tlib
-CP=copy
-
-!ifndef MODEL
-MODEL=l
-!endif
-
-MODEL_ARG=-m$(MODEL)
-
-#TARGET_CPU=3
-# 2 = 286, 3 = 386, etc.
-!ifndef TARGET_CPU
-TARGET_CPU=2
-!endif
-
-# Use this if you don't want Borland's fancy exception handling
-# (for Borland C++ 4.0 or later)
-#NOEHLIB=noeh$(MODEL).lib
-
-!ifdef DEBUG
-CDEBUG=-v
-LDEBUG=-v
-!else
-CDEBUG=
-LDEBUG=
-!endif
-
-# STACKOFLOW=1
-!ifdef STACKOFLOW
-CDEBUG=$(CDEBUG) -N
-LDEBUG=$(LDEBUG) -N
-!endif
-
-# -X- turn on dependency generation in the object file
-# -w set all warnings on
-# -O2 optimize for speed
-# -Z global optimization
-CPPFLAGS=-I$(ZLIB_DIR)
-CFLAGS=-O2 -Z -X- -w -$(TARGET_CPU) $(MODEL_ARG) $(CDEBUG)
-
-# -M generate map file
-LDFLAGS=-M -L$(ZLIB_DIR) $(MODEL_ARG) $(LDEBUG)
-
-# Pre-built configuration
-# See scripts\pnglibconf.mak for more options
-!ifndef PNGLIBCONF_H_PREBUILT
-PNGLIBCONF_H_PREBUILT = scripts\pnglibconf.h.prebuilt
-!endif
-
-## Variables
-
-OBJS = \
- png.obj \
- pngerror.obj \
- pngget.obj \
- pngmem.obj \
- pngpread.obj \
- pngread.obj \
- pngrio.obj \
- pngrtran.obj \
- pngrutil.obj \
- pngset.obj \
- pngtrans.obj \
- pngwio.obj \
- pngwrite.obj \
- pngwtran.obj \
- pngwutil.obj
-
-LIBOBJS = \
- +png.obj \
- +pngerror.obj \
- +pngget.obj \
- +pngmem.obj \
- +pngpread.obj \
- +pngread.obj \
- +pngrio.obj \
- +pngrtran.obj \
- +pngrutil.obj \
- +pngset.obj \
- +pngtrans.obj \
- +pngwio.obj \
- +pngwrite.obj \
- +pngwtran.obj \
- +pngwutil.obj
-
-LIBNAME=libpng$(MODEL).lib
-
-## Implicit rules
-
-# Braces let make "batch" calls to the compiler,
-# 2 calls instead of 12; space is important.
-.c.obj:
- $(CC) $(CPPFLAGS) $(CFLAGS) -c {$*.c }
-
-.c.exe:
- $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $*.c \
- $(LIBNAME) zlib_$(MODEL).lib $(NOEHLIB)
-
-## Major targets
-
-all: libpng pngtest
-
-# try !include scripts\pnglibconf.mak for more options
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- $(CP) $(PNGLIBCONF_H_PREBUILT) $@
-
-libpng: $(LIBNAME)
-
-pngtest: pngtest$(MODEL).exe
-
-test: pngtest$(MODEL).exe
- pngtest$(MODEL)
-
-## Minor Targets
-
-png.obj: png.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngerror.obj: pngerror.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngget.obj: pngget.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngmem.obj: pngmem.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngpread.obj: pngpread.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngread.obj: pngread.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrio.obj: pngrio.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrtran.obj: pngrtran.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrutil.obj: pngrutil.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngset.obj: pngset.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngtrans.obj: pngtrans.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwio.obj: pngwio.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwrite.obj: pngwrite.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwtran.obj: pngwtran.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwutil.obj: pngwutil.c png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-
-$(LIBNAME): $(OBJS)
- -del $(LIBNAME)
- $(LIB) $(LIBNAME) @&&|
-$(LIBOBJS), libpng$(MODEL)
-|
-
-pngtest$(MODEL).obj: pngtest.c png.h pngconf.h pnglibconf.h
- $(CC) $(CFLAGS) -opngtest$(MODEL) -c pngtest.c
-
-pngtest$(MODEL).exe: pngtest$(MODEL).obj
- $(LD) $(LDFLAGS) pngtest$(MODEL).obj $(LIBNAME) zlib_$(MODEL).lib $(NOEHLIB)
-
-# Clean up anything else you want
-clean:
- -del pnglibconf.h
- -del *.obj
- -del *.exe
- -del *.lib
- -del *.lst
- -del *.map
-
-# End of makefile for libpng
diff --git a/libpng/scripts/makefile.cegcc b/libpng/scripts/makefile.cegcc
index d85bed9a..6f915c2b 100644
--- a/libpng/scripts/makefile.cegcc
+++ b/libpng/scripts/makefile.cegcc
@@ -23,7 +23,7 @@
VERMAJ = 1
VERMIN = 6
-VERMIC = 34
+VERMIC = 37
VER = $(VERMAJ).$(VERMIN).$(VERMIC)
NAME = libpng
PACKAGE = $(NAME)-$(VER)
diff --git a/libpng/scripts/makefile.clang b/libpng/scripts/makefile.clang
new file mode 100644
index 00000000..fcaefae9
--- /dev/null
+++ b/libpng/scripts/makefile.clang
@@ -0,0 +1,87 @@
+# makefile for libpng using clang (generic, static library)
+# Copyright (C) 2008, 2014 Glenn Randers-Pehrson
+# Copyright (C) 2000, 2014, 2019 Cosmin Truta
+# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
+#
+# This code is released under the libpng license.
+# For conditions of distribution and use, see the disclaimer
+# and license in png.h
+
+# Location of the zlib library and include files
+ZLIBINC = ../zlib
+ZLIBLIB = ../zlib
+
+# Compiler, linker, lib and other tools
+CC = clang
+LD = $(CC)
+AR_RC = ar rcs
+RANLIB = ranlib
+CP = cp
+RM_F = rm -f
+
+WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \
+ -Wmissing-declarations -Wtraditional -Wcast-align \
+ -Wstrict-prototypes -Wmissing-prototypes # -Wconversion
+CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5
+CFLAGS = -W -Wall -O2 # $(WARNMORE) -g
+LDFLAGS = -L$(ZLIBLIB)
+LIBS = -lz -lm
+
+# File extensions
+EXEEXT =
+
+# Pre-built configuration
+# See scripts/pnglibconf.mak for more options
+PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
+
+# Variables
+OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \
+ pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \
+ pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o
+
+# Targets
+all: static
+
+pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
+ $(CP) $(PNGLIBCONF_H_PREBUILT) $@
+
+.c.o:
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+static: libpng.a pngtest$(EXEEXT)
+
+shared:
+ @echo This is a generic makefile that cannot create shared libraries.
+ @echo Please use a configuration that is specific to your platform.
+ @false
+
+libpng.a: $(OBJS)
+ $(AR_RC) $@ $(OBJS)
+ $(RANLIB) $@
+
+test: pngtest$(EXEEXT)
+ ./pngtest$(EXEEXT)
+
+pngtest$(EXEEXT): pngtest.o libpng.a
+ $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)
+
+clean:
+ $(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h
+
+png.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+
+pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.clang-asan b/libpng/scripts/makefile.clang-asan
new file mode 100644
index 00000000..0cab52fd
--- /dev/null
+++ b/libpng/scripts/makefile.clang-asan
@@ -0,0 +1,87 @@
+# makefile for libpng using clang + address sanitizer (generic, static library)
+# Copyright (C) 2008, 2014 Glenn Randers-Pehrson
+# Copyright (C) 2000, 2014, 2019 Cosmin Truta
+# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
+#
+# This code is released under the libpng license.
+# For conditions of distribution and use, see the disclaimer
+# and license in png.h
+
+# Location of the zlib library and include files
+ZLIBINC = ../zlib
+ZLIBLIB = ../zlib
+
+# Compiler, linker, lib and other tools
+CC = clang
+LD = $(CC)
+AR_RC = ar rcs
+RANLIB = ranlib
+CP = cp
+RM_F = rm -f
+
+WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \
+ -Wmissing-declarations -Wtraditional -Wcast-align \
+ -Wstrict-prototypes -Wmissing-prototypes # -Wconversion
+CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5
+CFLAGS = -W -Wall -O0 -g -fsanitize=address
+LDFLAGS = -L$(ZLIBLIB) -g -fsanitize=address
+LIBS = -lz -lm
+
+# File extensions
+EXEEXT =
+
+# Pre-built configuration
+# See scripts/pnglibconf.mak for more options
+PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
+
+# Variables
+OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \
+ pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \
+ pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o
+
+# Targets
+all: static
+
+pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
+ $(CP) $(PNGLIBCONF_H_PREBUILT) $@
+
+.c.o:
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+static: libpng.a pngtest$(EXEEXT)
+
+shared:
+ @echo This is a generic makefile that cannot create shared libraries.
+ @echo Please use a configuration that is specific to your platform.
+ @false
+
+libpng.a: $(OBJS)
+ $(AR_RC) $@ $(OBJS)
+ $(RANLIB) $@
+
+test: pngtest$(EXEEXT)
+ ./pngtest$(EXEEXT)
+
+pngtest$(EXEEXT): pngtest.o libpng.a
+ $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)
+
+clean:
+ $(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h
+
+png.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+
+pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.darwin b/libpng/scripts/makefile.darwin
index be3f92c5..33c27cc1 100644
--- a/libpng/scripts/makefile.darwin
+++ b/libpng/scripts/makefile.darwin
@@ -200,7 +200,7 @@ clean:
$(RM_F) *.o libpng.a pngtest pngout.png libpng-config \
libpng.pc $(LIBNAME).*dylib pngtesti pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.freebsd b/libpng/scripts/makefile.freebsd
index cad1a5aa..5fec61e3 100644
--- a/libpng/scripts/makefile.freebsd
+++ b/libpng/scripts/makefile.freebsd
@@ -62,7 +62,7 @@ test: pngtest
pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
cp $(PNGLIBCONF_H_PREBUILT) $@
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.gcc b/libpng/scripts/makefile.gcc
index ba92d150..a9773136 100644
--- a/libpng/scripts/makefile.gcc
+++ b/libpng/scripts/makefile.gcc
@@ -1,6 +1,6 @@
# makefile for libpng using gcc (generic, static library)
# Copyright (C) 2008, 2014 Glenn Randers-Pehrson
-# Copyright (C) 2000 Cosmin Truta
+# Copyright (C) 2000, 2014, 2019 Cosmin Truta
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
#
# This code is released under the libpng license.
@@ -24,7 +24,7 @@ WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \
-Wstrict-prototypes -Wmissing-prototypes # -Wconversion
CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5
CFLAGS = -W -Wall -O2 # $(WARNMORE) -g
-LDFLAGS =
+LDFLAGS = -L$(ZLIBLIB)
LIBS = -lz -lm
# File extensions
@@ -63,7 +63,7 @@ test: pngtest$(EXEEXT)
./pngtest$(EXEEXT)
pngtest$(EXEEXT): pngtest.o libpng.a
- $(LD) $(LDFLAGS) -L$(ZLIBLIB) -o $@ pngtest.o libpng.a $(LIBS)
+ $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)
clean:
$(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h
diff --git a/libpng/scripts/makefile.gcc-asan b/libpng/scripts/makefile.gcc-asan
new file mode 100644
index 00000000..aae55d63
--- /dev/null
+++ b/libpng/scripts/makefile.gcc-asan
@@ -0,0 +1,87 @@
+# makefile for libpng using gcc + address sanitizer (generic, static library)
+# Copyright (C) 2008, 2014 Glenn Randers-Pehrson
+# Copyright (C) 2000, 2014, 2019 Cosmin Truta
+# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
+#
+# This code is released under the libpng license.
+# For conditions of distribution and use, see the disclaimer
+# and license in png.h
+
+# Location of the zlib library and include files
+ZLIBINC = ../zlib
+ZLIBLIB = ../zlib
+
+# Compiler, linker, lib and other tools
+CC = gcc
+LD = $(CC)
+AR_RC = ar rcs
+RANLIB = ranlib
+CP = cp
+RM_F = rm -f
+
+WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \
+ -Wmissing-declarations -Wtraditional -Wcast-align \
+ -Wstrict-prototypes -Wmissing-prototypes # -Wconversion
+CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5
+CFLAGS = -W -Wall -O0 -g -fsanitize=address
+LDFLAGS = -L$(ZLIBLIB) -g -fsanitize=address
+LIBS = -lz -lm
+
+# File extensions
+EXEEXT =
+
+# Pre-built configuration
+# See scripts/pnglibconf.mak for more options
+PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
+
+# Variables
+OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \
+ pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \
+ pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o
+
+# Targets
+all: static
+
+pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
+ $(CP) $(PNGLIBCONF_H_PREBUILT) $@
+
+.c.o:
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+static: libpng.a pngtest$(EXEEXT)
+
+shared:
+ @echo This is a generic makefile that cannot create shared libraries.
+ @echo Please use a configuration that is specific to your platform.
+ @false
+
+libpng.a: $(OBJS)
+ $(AR_RC) $@ $(OBJS)
+ $(RANLIB) $@
+
+test: pngtest$(EXEEXT)
+ ./pngtest$(EXEEXT)
+
+pngtest$(EXEEXT): pngtest.o libpng.a
+ $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)
+
+clean:
+ $(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h
+
+png.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+
+pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.hp64 b/libpng/scripts/makefile.hp64
index 5948be8e..4421e787 100644
--- a/libpng/scripts/makefile.hp64
+++ b/libpng/scripts/makefile.hp64
@@ -1,7 +1,7 @@
# makefile for libpng, HPUX (10.20 and 11.00) using the ANSI/C product.
# Copyright (C) 1999-2002, 2006, 2009, 2010-2014 Glenn Randers-Pehrson
# Copyright (C) 1995 Guy Eric Schalnat, Group 42
-# contributed by Jim Rice and updated by Chris Schleicher, Hewlett Packard
+# Contributed by Jim Rice and updated by Chris Schleicher, Hewlett Packard
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
@@ -206,7 +206,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.hpgcc b/libpng/scripts/makefile.hpgcc
index 5c8791b1..efef1f3f 100644
--- a/libpng/scripts/makefile.hpgcc
+++ b/libpng/scripts/makefile.hpgcc
@@ -209,7 +209,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.hpux b/libpng/scripts/makefile.hpux
index b07612dc..27b312a3 100644
--- a/libpng/scripts/makefile.hpux
+++ b/libpng/scripts/makefile.hpux
@@ -1,7 +1,7 @@
# makefile for libpng, HPUX (10.20 and 11.00) using the ANSI/C product.
# Copyright (C) 1999-2002, 2006, 2010-2014 Glenn Randers-Pehrson
# Copyright (C) 1995 Guy Eric Schalnat, Group 42
-# contributed by Jim Rice and updated by Chris Schleicher, Hewlett Packard
+# Contributed by Jim Rice and updated by Chris Schleicher, Hewlett Packard
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
@@ -204,7 +204,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.knr b/libpng/scripts/makefile.knr
deleted file mode 100644
index d8de064c..00000000
--- a/libpng/scripts/makefile.knr
+++ /dev/null
@@ -1,116 +0,0 @@
-# makefile for libpng
-# Copyright (C) 2002, 2006, 2009, 2014 Glenn Randers-Pehrson
-# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
-#
-# This code is released under the libpng license.
-# For conditions of distribution and use, see the disclaimer
-# and license in png.h
-#
-# This makefile requires the file ansi2knr.c, which you can get
-# from the Ghostscript ftp site at ftp://ftp.cs.wisc.edu/ghost/
-# If you have libjpeg, you probably already have ansi2knr.c in the jpeg
-# source distribution.
-
-# where make install puts libpng.a and png.h
-prefix=/usr/local
-INCPATH=$(prefix)/include
-LIBPATH=$(prefix)/lib
-
-# override DESTDIR= on the make install command line to easily support
-# installing into a temporary location. Example:
-#
-# make install DESTDIR=/tmp/build/libpng
-#
-# If you're going to install into a temporary location
-# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
-# you execute make install.
-DESTDIR=
-
-CC = cc
-CPPFLAGS = -I../zlib
-CFLAGS = -O
-LDFLAGS = -L. -L../zlib/ -lpng -lz -lm
-# flags for ansi2knr
-ANSI2KNRFLAGS=
-
-RANLIB = ranlib
-#RANLIB = echo
-
-CP = cp
-RM_F = rm -f
-
-# Pre-built configuration
-# See scripts/pnglibconf.mak for more options
-PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
-
-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: ansi2knr libpng.a pngtest
-
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- $(CP) $(PNGLIBCONF_H_PREBUILT) $@
-
-# general rule to allow ansi2knr to work
-.c.o:
- ./ansi2knr $*.c T$*.c
- $(CC) $(CPPFLAGS) $(CFLAGS) -c T$*.c
- rm -f T$*.c $*.o
- mv T$*.o $*.o
-
-ansi2knr: ansi2knr.c
- $(CC) $(CPPFLAGS) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c
-
-libpng.a: ansi2knr $(OBJS)
- ar rc $@ $(OBJS)
- $(RANLIB) $@
-
-pngtest: pngtest.o libpng.a
- $(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
-
-test: pngtest
- ./pngtest
-
-install: libpng.a png.h pngconf.h pnglibconf.h
- -@mkdir $(DESTDIR)$(INCPATH)
- -@mkdir $(DESTDIR)$(INCPATH)/libpng
- -@mkdir $(DESTDIR)$(LIBPATH)
- -@rm -f $(DESTDIR)$(INCPATH)/png.h
- -@rm -f $(DESTDIR)$(INCPATH)/pngconf.h
- cp png.h $(DESTDIR)$(INCPATH)/libpng
- cp pngconf.h $(DESTDIR)$(INCPATH)/libpng
- cp pnglibconf.h $(DESTDIR)$(INCPATH)/libpng
- chmod 644 $(DESTDIR)$(INCPATH)/libpng/png.h
- chmod 644 $(DESTDIR)$(INCPATH)/libpng/pngconf.h
- chmod 644 $(DESTDIR)$(INCPATH)/libpng/pnglibconf.h
- (cd $(DESTDIR)$(INCPATH); ln -f -s libpng/* .)
- cp libpng.a $(DESTDIR)$(LIBPATH)
- chmod 644 $(DESTDIR)$(LIBPATH)/libpng.a
-
-clean:
- $(RM_F) *.o libpng.a pngtest pngout.png ansi2knr pnglibconf.h
-
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
-writelock:
- chmod a-w *.[ch35] $(DOCS) scripts/*
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-png.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-
-pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.linux b/libpng/scripts/makefile.linux
index f61087cc..f2d8beae 100644
--- a/libpng/scripts/makefile.linux
+++ b/libpng/scripts/makefile.linux
@@ -10,7 +10,7 @@
# Library name:
LIBNAME = libpng16
PNGMAJ = 16
-RELEASE = 34
+RELEASE = 37
# Shared library names:
LIBSO=$(LIBNAME).so
@@ -50,8 +50,7 @@ WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
# for pgcc version 2.95.1, -O3 is buggy; don't use it.
CPPFLAGS=-I$(ZLIBINC) # -DPNG_DEBUG=5
-CFLAGS= -W -Wall -O3 -funroll-loops \
- $(ALIGN) # $(WARNMORE) -g -DPNG_DEBUG=5
+CFLAGS=-W -Wall -O3 -funroll-loops $(ALIGN) # $(WARNMORE) -g
LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng16 -lz -lm
LDFLAGS_A=-L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) libpng.a -lz -lm
@@ -222,7 +221,7 @@ clean:
$(LIBSO) $(LIBSOMAJ)* pngtest-static pngtesti \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.linux-opt b/libpng/scripts/makefile.linux-opt
index 017656c6..327151f0 100644
--- a/libpng/scripts/makefile.linux-opt
+++ b/libpng/scripts/makefile.linux-opt
@@ -10,7 +10,7 @@
# Library name:
LIBNAME = libpng16
PNGMAJ = 16
-RELEASE = 34
+RELEASE = 37
# Shared library names:
LIBSO=$(LIBNAME).so
@@ -232,7 +232,7 @@ clean:
$(LIBSO) $(LIBSOMAJ)* pngtest-static pngtesti \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.mips b/libpng/scripts/makefile.mips
index 5633608c..0357ae81 100644
--- a/libpng/scripts/makefile.mips
+++ b/libpng/scripts/makefile.mips
@@ -78,7 +78,7 @@ install: libpng.a
clean:
rm -f *.o libpng.a pngtest pngout.png pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.msc b/libpng/scripts/makefile.msc
deleted file mode 100644
index 539d62e9..00000000
--- a/libpng/scripts/makefile.msc
+++ /dev/null
@@ -1,100 +0,0 @@
-# makefile for libpng
-# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
-# Copyright (C) 2006, 2009, 2014 Glenn Randers-Pehrson
-#
-# This code is released under the libpng license.
-# For conditions of distribution and use, see the disclaimer
-# and license in png.h
-#
-# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
-
-# -------- Microsoft C 5.1 and later, does not use assembler code --------
-MODEL=L
-CPPFLAGS=-I..\zlib
-CFLAGS=-Oait -Gs -nologo -W3 -A$(MODEL)
-#-Ox generates bad code with MSC 5.1
-CC=cl
-LD=link
-LDFLAGS=/e/st:0x1500/noe
-CP=copy
-O=.obj
-
-# Pre-built configuration
-# See scripts\pnglibconf.mak for more options
-PNGLIBCONF_H_PREBUILT = scripts\pnglibconf.h.prebuilt
-
-#uncomment next to put error messages in a file
-ERRFILE= >> pngerrs
-
-# variables
-OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
-OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
-OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
-
-all: libpng.lib
-
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- $(CP) $(PNGLIBCONF_H_PREBUILT) $@
-
-png$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngset$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngget$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngread$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngpread$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngrtran$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngrutil$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngerror$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngmem$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngrio$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngwio$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngtrans$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngwrite$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngwtran$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngwutil$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
- del libpng.lib
- lib libpng $(OBJS1);
- lib libpng $(OBJS2);
- lib libpng $(OBJS3);
-
-pngtest$(O): png.h pngconf.h pnglibconf.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c $(ERRFILE)
-
-pngtest.exe: pngtest.obj libpng.lib
- $(LD) $(LDFLAGS) pngtest.obj,,,libpng.lib ..\zlib\zlib.lib ;
-
-test: pngtest.exe
- pngtest
-
-# End of makefile for libpng
-
diff --git a/libpng/scripts/makefile.msys b/libpng/scripts/makefile.msys
index 33b7721d..6b9daf83 100644
--- a/libpng/scripts/makefile.msys
+++ b/libpng/scripts/makefile.msys
@@ -1,10 +1,11 @@
# makefile for libpng using MSYS/gcc (shared, static library)
+# Copyright (C) 2019 Cosmin Truta
# Copyright (C) 2012 Glenn Randers-Pehrson and Christopher M. Wheeler
#
-# Portions taken from makefile.linux:
+# Portions taken from makefile.linux and makefile.gcc:
+# Copyright (C) 2000 Cosmin Truta
# Copyright (C) 1998, 1999, 2002, 2006, 2008, 2010-2014 Greg Roelofs and
# Glenn Randers-Pehrson
-# Copyright (C) 2000 Cosmin Truta
# Copyright (C) 1996, 1997 Andreas Dilger
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
#
@@ -18,7 +19,7 @@ exec_prefix=$(prefix)
# Library name:
LIBNAME = libpng16
PNGMAJ = 16
-RELEASE = 34
+RELEASE = 37
# Shared library names:
LIBSO=$(LIBNAME).dll
@@ -176,7 +177,7 @@ test: pngtest$(EXEEXT)
./pngtest$(EXEEXT)
pngtest$(EXEEXT): pngtest.o libpng.a
- $(LD) $(LDFLAGS) -L$(ZLIBLIB) -o $@ pngtest.o libpng.a $(LIBS)
+ $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)
clean:
$(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h $(LIBSO) \
diff --git a/libpng/scripts/makefile.ne12bsd b/libpng/scripts/makefile.ne12bsd
deleted file mode 100644
index bc8dd8ba..00000000
--- a/libpng/scripts/makefile.ne12bsd
+++ /dev/null
@@ -1,56 +0,0 @@
-# makefile for libpng for NetBSD for the standard
-# make obj && make depend && make && make test
-# make includes && make install
-# Copyright (C) 2002 Patrick R.L. Welche
-# Copyright (C) 2007, 2009, 2014 Glenn Randers-Pehrson
-#
-# This code is released under the libpng license.
-# For conditions of distribution and use, see the disclaimer
-# and license in png.h
-
-# You should also run makefile.netbsd
-
-LOCALBASE?=/usr/local
-LIBDIR= ${LOCALBASE}/lib
-MANDIR= ${LOCALBASE}/man
-INCSDIR=${LOCALBASE}/include/libpng16
-
-LIB= png16
-SHLIB_MAJOR= 0
-SHLIB_MINOR= 1.6.34
-SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
- pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
- pngwtran.c pngmem.c pngerror.c pngpread.c
-INCS= png.h pngconf.h pnglibconf.h
-MAN= libpng.3 libpngpf.3 png.5
-
-CPPFLAGS+=-I${.CURDIR}
-
-# Pre-built configuration
-# See scripts/pnglibconf.mak for more options
-PNGLIBCONF_H_PREBUILT= scripts/pnglibconf.h.prebuilt
-
-# We should be able to do something like this instead of the manual
-# uncommenting, but it core dumps for me at the moment:
-# .if ${MACHINE_ARCH} == "i386"
-# MKLINT= no
-# .endif
-
-CLEANFILES+=pngtest.o pngtest pnglibconf.h
-
-.c.o:
- $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
-
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- cp $(PNGLIBCONF_H_PREBUILT) $@
-
-pngtest.o: pngtest.c
- ${CC} -c ${CPPFLAGS} ${CFLAGS} ${.ALLSRC} -o ${.TARGET}
-
-pngtest: pngtest.o libpng.a
- ${CC} ${LDFLAGS} ${.ALLSRC} -o${.TARGET} -lz -lm
-
-test: pngtest
- cd ${.CURDIR} && ${.OBJDIR}/pngtest
-
-.include <bsd.lib.mk>
diff --git a/libpng/scripts/makefile.netbsd b/libpng/scripts/makefile.netbsd
index ab1cedda..9a6b0462 100644
--- a/libpng/scripts/makefile.netbsd
+++ b/libpng/scripts/makefile.netbsd
@@ -8,19 +8,18 @@
# For conditions of distribution and use, see the disclaimer
# and license in png.h
-# You should also run makefile.ne16bsd
-
LOCALBASE?=/usr/local
LIBDIR= ${LOCALBASE}/lib
MANDIR= ${LOCALBASE}/man
INCSDIR=${LOCALBASE}/include
-LIB= png
SHLIB_MAJOR= 16
-SHLIB_MINOR= 1.6.34
-SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
- pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
- pngwtran.c pngmem.c pngerror.c pngpread.c
+SHLIB_MINOR= 1.6.37
+
+LIB= png
+SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
+ pngread.c pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c \
+ pngwio.c pngwrite.c pngwtran.c pngwutil.c
INCS= png.h pngconf.h pnglibconf.h
MAN= libpng.3 libpngpf.3 png.5
@@ -39,16 +38,16 @@ PNGLIBCONF_H_PREBUILT= scripts/pnglibconf.h.prebuilt
CLEANFILES+=pngtest.o pngtest pnglibconf.h
.c.o:
- $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ ${CC} -c ${CPPFLAGS} ${CFLAGS} -o $@ $<
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- cp $(PNGLIBCONF_H_PREBUILT) $@
+pnglibconf.h: ${PNGLIBCONF_H_PREBUILT}
+ cp ${PNGLIBCONF_H_PREBUILT} $@
pngtest.o: pngtest.c
${CC} -c ${CPPFLAGS} ${CFLAGS} ${.ALLSRC} -o ${.TARGET}
pngtest: pngtest.o libpng.a
- ${CC} ${LDFLAGS} ${.ALLSRC} -o${.TARGET} -lz -lm
+ ${CC} ${LDFLAGS} ${.ALLSRC} -o ${.TARGET} -lz -lm
test: pngtest
cd ${.CURDIR} && ${.OBJDIR}/pngtest
diff --git a/libpng/scripts/makefile.openbsd b/libpng/scripts/makefile.openbsd
index b32ea61a..ad5ffb3a 100644
--- a/libpng/scripts/makefile.openbsd
+++ b/libpng/scripts/makefile.openbsd
@@ -11,14 +11,16 @@ LIBDIR= ${PREFIX}/lib
MANDIR= ${PREFIX}/man/cat
SHLIB_MAJOR= 16
-SHLIB_MINOR= 1.6.34
+SHLIB_MINOR= 1.6.37
LIB= png
SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
pngread.c pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c \
pngwio.c pngwrite.c pngwtran.c pngwutil.c
-
HDRS= png.h pngconf.h pnglibconf.h
+MAN= libpng.3 libpngpf.3 png.5
+DOCS= ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO \
+ libpng-manual.txt
CFLAGS+= -W -Wall
CPPFLAGS+= -I${.CURDIR}
@@ -27,22 +29,18 @@ NOPROFILE= Yes
CLEANFILES+= pngtest.o pngtest pnglibconf.h
-MAN= libpng.3 libpngpf.3 png.5
-DOCS= ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO \
- libpng-manual.txt
-
# Pre-built configuration
# See scripts/pnglibconf.mak for more options
PNGLIBCONF_H_PREBUILT= scripts/pnglibconf.h.prebuilt
.c.o:
- $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ ${CC} -c ${CPPFLAGS} ${CFLAGS} -o $@ $<
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- cp $(PNGLIBCONF_H_PREBUILT) $@
+pnglibconf.h: ${PNGLIBCONF_H_PREBUILT}
+ cp ${PNGLIBCONF_H_PREBUILT} $@
pngtest.o: pngtest.c
- ${CC} ${CPPFLAGS} ${CFLAGS} -c ${.ALLSRC} -o ${.TARGET}
+ ${CC} -c ${CPPFLAGS} ${CFLAGS} ${.ALLSRC} -o ${.TARGET}
pngtest: pngtest.o
${CC} ${LDFLAGS} ${.ALLSRC} -o ${.TARGET} -L${.OBJDIR} -lpng -lz -lm
diff --git a/libpng/scripts/makefile.sco b/libpng/scripts/makefile.sco
index 67d84aaa..01d7eaaa 100644
--- a/libpng/scripts/makefile.sco
+++ b/libpng/scripts/makefile.sco
@@ -201,7 +201,7 @@ clean:
$(LIBSO) $(LIBSOMAJ)* pngtest-static pngtesti \
pnglibconf.h libpng.pc
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.sggcc b/libpng/scripts/makefile.sggcc
index a0d051db..82efe7a2 100644
--- a/libpng/scripts/makefile.sggcc
+++ b/libpng/scripts/makefile.sggcc
@@ -211,7 +211,7 @@ clean:
$(RM_F) libpng.a pngtest pngtesti pngout.png libpng.pc \
so_locations libpng-config $(LIBSO) $(LIBSOMAJ)* pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.sgi b/libpng/scripts/makefile.sgi
index 7df09022..5d9c23fa 100644
--- a/libpng/scripts/makefile.sgi
+++ b/libpng/scripts/makefile.sgi
@@ -212,7 +212,7 @@ clean:
$(LIBSO) $(LIBSOMAJ)* \
so_locations pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.so9 b/libpng/scripts/makefile.so9
index ba9308c8..93166f30 100644
--- a/libpng/scripts/makefile.so9
+++ b/libpng/scripts/makefile.so9
@@ -222,7 +222,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.solaris b/libpng/scripts/makefile.solaris
index 8a450d37..f6d7b586 100644
--- a/libpng/scripts/makefile.solaris
+++ b/libpng/scripts/makefile.solaris
@@ -44,8 +44,7 @@ WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
-Wmissing-declarations -Wtraditional -Wcast-align \
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
CPPFLAGS=-I$(ZLIBINC) # -DPNG_DEBUG=5
-CFLAGS= -W -Wall -O \
- # $(WARNMORE) -g -DPNG_DEBUG=5
+CFLAGS=-W -Wall -O # $(WARNMORE) -g
LDFLAGS=-L. -R. -L$(ZLIBLIB) -R$(ZLIBLIB) -lpng16 -lz -lm
INCPATH=$(prefix)/include
@@ -219,7 +218,7 @@ clean:
libpng-config $(LIBSO) $(LIBSOMAJ)* \
libpng.pc pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.solaris-x86 b/libpng/scripts/makefile.solaris-x86
deleted file mode 100644
index 2ee3c14a..00000000
--- a/libpng/scripts/makefile.solaris-x86
+++ /dev/null
@@ -1,243 +0,0 @@
-# makefile for libpng on Solaris 2.x with gcc
-# Copyright (C) 2004, 2006-2008, 2010-2014 Glenn Randers-Pehrson
-# Contributed by William L. Sebok, based on makefile.linux
-# Copyright (C) 1998 Greg Roelofs
-# Copyright (C) 1996, 1997 Andreas Dilger
-
-# This code is released under the libpng license.
-# For conditions of distribution and use, see the disclaimer
-# and license in png.h
-
-# Library name:
-LIBNAME = libpng16
-PNGMAJ = 16
-
-# Shared library names:
-LIBSO=$(LIBNAME).so
-LIBSOMAJ=$(LIBNAME).so.$(PNGMAJ)
-LIBSOREL=$(LIBSOMAJ).$(RELEASE)
-OLDSO=libpng.so
-
-# Utilities:
-AR_RC=ar rc
-CC=gcc
-MKDIR_P=mkdir -p
-LN_SF=ln -f -s
-RANLIB=echo
-CP=cp
-RM_F=/bin/rm -f
-
-# Where make install puts libpng.a, libpng16.so*, and png.h
-prefix=/usr/local
-exec_prefix=$(prefix)
-
-# Where the zlib library and include files are located
-# Changing these to ../zlib poses a security risk. If you want
-# to have zlib in an adjacent directory, specify the full path instead of "..".
-#ZLIBLIB=../zlib
-#ZLIBINC=../zlib
-
-ZLIBLIB=/usr/local/lib
-ZLIBINC=/usr/local/include
-
-WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
- -Wmissing-declarations -Wtraditional -Wcast-align \
- -Wstrict-prototypes -Wmissing-prototypes #-Wconversion
-CPPFLAGS=-I$(ZLIBINC) # -DPNG_DEBUG=5
-CFLAGS=-W -Wall -O # $(WARNMORE) -g
-LDFLAGS=-L. -R. -L$(ZLIBLIB) -R$(ZLIBLIB) -lpng16 -lz -lm
-
-INCPATH=$(prefix)/include
-LIBPATH=$(exec_prefix)/lib
-MANPATH=$(prefix)/man
-BINPATH=$(exec_prefix)/bin
-
-# override DESTDIR= on the make install command line to easily support
-# installing into a temporary location. Example:
-#
-# make install DESTDIR=/tmp/build/libpng
-#
-# If you're going to install into a temporary location
-# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
-# you execute make install.
-DESTDIR=
-
-DB=$(DESTDIR)$(BINPATH)
-DI=$(DESTDIR)$(INCPATH)
-DL=$(DESTDIR)$(LIBPATH)
-DM=$(DESTDIR)$(MANPATH)
-
-# Pre-built configuration
-# See scripts/pnglibconf.mak for more options
-PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
-
-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
-
-OBJSDLL = $(OBJS:.o=.pic.o)
-
-.SUFFIXES: .c .o .pic.o
-
-.c.o:
- $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
-
-.c.pic.o:
- $(CC) -c $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ $*.c
-
-all: libpng.a $(LIBSO) pngtest libpng.pc libpng-config
-
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- $(CP) $(PNGLIBCONF_H_PREBUILT) $@
-
-libpng.a: $(OBJS)
- $(AR_RC) $@ $(OBJS)
- $(RANLIB) $@
-
-libpng.pc:
- cat scripts/libpng.pc.in | sed -e s!@prefix@!$(prefix)! \
- -e s!@exec_prefix@!$(exec_prefix)! \
- -e s!@libdir@!$(LIBPATH)! \
- -e s!@includedir@!$(INCPATH)! \
- -e s!-lpng16!-lpng16\ -lz\ -lm! > libpng.pc
-
-libpng-config:
- ( cat scripts/libpng-config-head.in; \
- echo prefix=\"$(prefix)\"; \
- echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \
- echo cppflags=\""; \
- echo L_opts=\"-L$(LIBPATH)\"; \
- echo R_opts=\"-R$(LIBPATH)\"; \
- echo libs=\"-lpng16 -lz -lm\"; \
- cat scripts/libpng-config-body.in ) > libpng-config
- chmod +x libpng-config
-
-$(LIBSO): $(LIBSOMAJ)
- $(LN_SF) $(LIBSOMAJ) $(LIBSO)
-
-$(LIBSOMAJ): $(OBJSDLL)
- @case "`type ld`" in *ucb*) \
- echo; \
- echo '## WARNING:'; \
- echo '## The commands "CC" and "LD" must NOT refer to /usr/ucb/cc'; \
- echo '## and /usr/ucb/ld. If they do, you need to adjust your PATH'; \
- echo '## environment variable to put /usr/ccs/bin ahead of /usr/ucb.'; \
- echo '## The environment variable LD_LIBRARY_PATH should not be set'; \
- echo '## at all. If it is, things are likely to break because of'; \
- echo '## the libucb dependency that is created.'; \
- echo; \
- ;; \
- esac
- $(LD) -G -h $(LIBSOMAJ) \
- -o $(LIBSOMAJ) $(OBJSDLL)
-
-pngtest: pngtest.o $(LIBSO)
- $(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
-
-test: pngtest
- ./pngtest
-
-install-headers: png.h pngconf.h pnglibconf.h
- -@if [ ! -d $(DI) ]; then $(MKDIR_P) $(DI); fi
- -@if [ ! -d $(DI)/$(LIBNAME) ]; then $(MKDIR_P) $(DI)/$(LIBNAME); fi
- cp png.h pngconf.h pnglibconf.h $(DI)/$(LIBNAME)
- chmod 644 $(DI)/$(LIBNAME)/png.h $(DI)/$(LIBNAME)/pngconf.h $(DI)/$(LIBNAME)/pnglibconf.h
- -@$(RM_F) $(DI)/png.h $(DI)/pngconf.h $(DI)/pnglibconf.h
- -@$(RM_F) $(DI)/libpng
- (cd $(DI); $(LN_SF) $(LIBNAME) libpng; $(LN_SF) $(LIBNAME)/* .)
-
-install-static: install-headers libpng.a
- -@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
- cp libpng.a $(DL)/$(LIBNAME).a
- chmod 644 $(DL)/$(LIBNAME).a
- -@$(RM_F) $(DL)/libpng.a
- (cd $(DL); $(LN_SF) $(LIBNAME).a libpng.a)
-
-install-shared: install-headers $(LIBSOMAJ) libpng.pc
- -@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
- -@$(RM_F) $(DL)/$(LIBSO)
- -@$(RM_F) $(DL)/$(LIBSOREL)
- -@$(RM_F) $(DL)/$(OLDSO)
- cp $(LIBSOMAJ) $(DL)/$(LIBSOREL)
- chmod 755 $(DL)/$(LIBSOREL)
- (cd $(DL); \
- $(LN_SF) $(LIBSOREL) $(LIBSO); \
- $(LN_SF) $(LIBSO) $(OLDSO))
- -@if [ ! -d $(DL)/pkgconfig ]; then $(MKDIR_P) $(DL)/pkgconfig; fi
- -@$(RM_F) $(DL)/pkgconfig/$(LIBNAME).pc
- -@$(RM_F) $(DL)/pkgconfig/libpng.pc
- cp libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc
- chmod 644 $(DL)/pkgconfig/$(LIBNAME).pc
- (cd $(DL)/pkgconfig; $(LN_SF) $(LIBNAME).pc libpng.pc)
-
-install-man: libpng.3 libpngpf.3 png.5
- -@if [ ! -d $(DM) ]; then $(MKDIR_P) $(DM); fi
- -@if [ ! -d $(DM)/man3 ]; then $(MKDIR_P) $(DM)/man3; fi
- -@$(RM_F) $(DM)/man3/libpng.3
- -@$(RM_F) $(DM)/man3/libpngpf.3
- cp libpng.3 $(DM)/man3
- cp libpngpf.3 $(DM)/man3
- -@if [ ! -d $(DM)/man5 ]; then $(MKDIR_P) $(DM)/man5; fi
- -@$(RM_F) $(DM)/man5/png.5
- cp png.5 $(DM)/man5
-
-install-config: libpng-config
- -@if [ ! -d $(DB) ]; then $(MKDIR_P) $(DB); fi
- -@$(RM_F) $(DB)/libpng-config
- -@$(RM_F) $(DB)/$(LIBNAME)-config
- cp libpng-config $(DB)/$(LIBNAME)-config
- chmod 755 $(DB)/$(LIBNAME)-config
- (cd $(DB); $(LN_SF) $(LIBNAME)-config libpng-config)
-
-install: install-static install-shared install-man install-config
-
-# If you installed in $(DESTDIR), test-installed won't work until you
-# move the library to its final location. Use test-dd to test it
-# before then.
-
-test-dd:
- echo
- echo Testing installed dynamic shared library in $(DL).
- $(CC) -I$(DI) $(CPPFLAGS) \
- `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
- -o pngtestd `$(BINPATH)/$(LIBNAME)-config --ldflags` \
- -L$(DL) -L$(ZLIBLIB) -R$(ZLIBLIB) -R$(DL)
- ./pngtestd pngtest.png
-
-test-installed:
- echo
- echo Testing installed dynamic shared library.
- $(CC) $(CPPFLAGS) \
- `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
- -o pngtesti `$(BINPATH)/$(LIBNAME)-config --ldflags` \
- -L$(ZLIBLIB) -R$(ZLIBLIB)
- ./pngtesti pngtest.png
-
-clean:
- $(RM_F) *.o libpng.a pngtest pngtesti pngout.png \
- libpng-config $(LIBSO) $(LIBSOMAJ)* \
- libpng.pc pnglibconf.h
-
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
-writelock:
- chmod a-w *.[ch35] $(DOCS) scripts/*
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-png.o png.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngerror.o pngerror.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrio.o pngrio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwio.o pngwio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngmem.o pngmem.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngset.o pngset.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngget.o pngget.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngread.o pngread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrtran.o pngrtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngrutil.o pngrutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngtrans.o pngtrans.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwrite.o pngwrite.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwtran.o pngwtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngwutil.o pngwutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngpread.o pngpread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-
-pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.std b/libpng/scripts/makefile.std
index ee6a8683..2f4871df 100644
--- a/libpng/scripts/makefile.std
+++ b/libpng/scripts/makefile.std
@@ -109,7 +109,7 @@ clean:
$(RM_F) *.o libpng.a pngtest pngout.png pnglibconf.h pnglibconf.c \
pnglibconf.out
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
@@ -122,6 +122,7 @@ pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.
pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
+pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
@@ -129,6 +130,5 @@ pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebu
pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
-pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
pngtest.o: png.h pngconf.h pnglibconf.h
diff --git a/libpng/scripts/makefile.sunos b/libpng/scripts/makefile.sunos
index efe308c4..9a0e28e7 100644
--- a/libpng/scripts/makefile.sunos
+++ b/libpng/scripts/makefile.sunos
@@ -90,7 +90,7 @@ install: libpng.a
clean:
$(RM_F) *.o libpng.a pngtest pngout.png pnglibconf.h
-DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
diff --git a/libpng/scripts/makefile.tc3 b/libpng/scripts/makefile.tc3
deleted file mode 100644
index 1d015026..00000000
--- a/libpng/scripts/makefile.tc3
+++ /dev/null
@@ -1,100 +0,0 @@
-# Makefile for libpng
-# TurboC/C++ (Note: All modules are compiled in C mode)
-
-# To use, do "make -fmakefile.tc3"
-
-# ----- Turbo C++ 3.0 -----
-
-MODEL=l
-CPPFLAGS=-I..\zlib
-CFLAGS=-O2 -Z -m$(MODEL)
-CC=tcc
-LD=tcc
-LIB=tlib
-LDFLAGS=-m$(MODEL) -L..\zlib
-CP=copy
-
-# Pre-built configuration
-# See scripts\pnglibconf.mak for more options
-!ifndef PNGLIBCONF_H_PREBUILT
-PNGLIBCONF_H_PREBUILT = scripts\pnglibconf.h.prebuilt
-!endif
-
-O=.obj
-E=.exe
-
-# variables
-OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
-OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
-OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
-OBJSL1 = +png$(O) +pngset$(O) +pngget$(O) +pngrutil$(O) +pngtrans$(O)
-OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
-OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
-
-all: libpng$(MODEL).lib pngtest$(E)
-
-pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
- $(CP) $(PNGLIBCONF_H_PREBUILT) $@
-
-pngtest: pngtest$(E)
-
-test: pngtest$(E)
- pngtest$(E)
-
-png$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngset$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngget$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngread$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngpread$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngrtran$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngrutil$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngerror$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngmem$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngrio$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngwio$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngtest$(O): png.h pngconf.h pnglibconf.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngtrans$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngwrite$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngwtran$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-pngwutil$(O): png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $*.c
-
-libpng$(MODEL).lib: $(OBJS1) $(OBJS2) $(OBJS3)
- $(LIB) libpng$(MODEL) +$(OBJSL1)
- $(LIB) libpng$(MODEL) +$(OBJSL2)
- $(LIB) libpng$(MODEL) +$(OBJSL3)
-
-pngtest$(E): pngtest$(O) libpng$(MODEL).lib
- $(LD) $(LDFLAGS) pngtest.obj libpng$(MODEL).lib zlib_$(MODEL).lib
-
-# End of makefile for libpng
diff --git a/libpng/scripts/options.awk b/libpng/scripts/options.awk
index 81b82ff0..fef5dfd7 100755
--- a/libpng/scripts/options.awk
+++ b/libpng/scripts/options.awk
@@ -40,7 +40,7 @@ BEGIN{
# the lines, for example by inserting spaces around operators, and all
# C preprocessors notice lines that start with '#', most remove comments.
# The technique adopted here is to make the final output lines into
- # C strings (enclosed in double quotes), preceeded by PNG_DFN. As a
+ # C strings (enclosed in double quotes), preceded by PNG_DFN. As a
# consequence the output cannot contain a 'raw' double quote - instead put
# @' in, this will be replaced by a single " afterward. See the parser
# script dfn.awk for more capabilities (not required here). Note that if
@@ -336,7 +336,7 @@ $1 == "option" && NF >= 2{
# chunk NAME [requires OPT] [enables LIST] [on|off|disabled]
# Expands to the 'option' settings appropriate to the reading and
-# writing of an ancilliary PNG chunk 'NAME':
+# writing of an ancillary PNG chunk 'NAME':
#
# option READ_NAME requires READ_ANCILLARY_CHUNKS [READ_OPT]
# option READ_NAME enables NAME LIST
@@ -805,8 +805,8 @@ END{
print comment, "end of options", cend >out
# Do the 'setting' values second, the algorithm the standard
- # tree walk (O(1)) done in an O(2) while/for loop; interations
- # settings x depth, outputing the deepest required macros
+ # tree walk (O(1)) done in an O(2) while/for loop; iterations
+ # settings x depth, outputting the deepest required macros
# first.
print "" >out
print "/* SETTINGS */" >out
diff --git a/libpng/scripts/pnglibconf.dfa b/libpng/scripts/pnglibconf.dfa
index 52c0c742..4dcaf7c8 100644
--- a/libpng/scripts/pnglibconf.dfa
+++ b/libpng/scripts/pnglibconf.dfa
@@ -8,7 +8,8 @@ com pnglibconf.h - library build configuration
com
version
com
-com Copyright (c) 1998-2017 Glenn Randers-Pehrson
+com Copyright (c) 2018-2019 Cosmin Truta
+com Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
com
com This code is released under the libpng license.
com For conditions of distribution and use, see the disclaimer
@@ -189,7 +190,7 @@ setting USER_VERSIONINFO_LEGALTRADEMARKS
setting API_RULE default 0
-# This allows a prefix to be added to the front of every API functon name (and
+# This allows a prefix to be added to the front of every API function name (and
# therefore every symbol) by redefining all the function names with the prefix
# at the end of pnglibconf.h. It also turns on similar internal symbol renaming
# by causing a similar build-time only file, pngprefix.h, to be generated.
@@ -324,7 +325,7 @@ option WRITE_INT_FUNCTIONS disabled
# By default recoverable errors on write should just generate warnings,
# not generally safe because this allows the application to write invalid
# PNG files. Applications should enable this themselves; it's useful
-# because it means that a failure to write an ancilliary chunk can often be
+# because it means that a failure to write an ancillary chunk can often be
# ignored.
option WARNINGS
@@ -395,7 +396,7 @@ option IO_STATE
option USER_LIMITS requires READ
# The default settings given below for the limits mean that libpng will
-# limit the size of images or the size of data in ancilliary chunks to less
+# limit the size of images or the size of data in ancillary chunks to less
# than the specification or implementation limits. Settings have the
# following interpretations:
#
@@ -559,7 +560,7 @@ option WRITE_CUSTOMIZE_ZTXT_COMPRESSION requires WRITE
option WRITE_CUSTOMIZE_COMPRESSION requires WRITE
# Any chunks you are not interested in, you can undef here. The
-# ones that allocate memory may be expecially important (hIST,
+# ones that allocate memory may be especially important (hIST,
# tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
# a bit smaller.
@@ -715,7 +716,7 @@ setting sCAL_PRECISION default 5
setting ZBUF_SIZE default 8192
# This is the size of the decompression buffer used when counting or checking
-# the decompressed size of an LZ stream from a compressed ancilliary chunk; the
+# the decompressed size of an LZ stream from a compressed ancillary chunk; the
# decompressed data is never used so a different size may be optimal. This size
# was determined using contrib/libtests/timepng.c with compressed zTXt data
# around 11MByte in size. Slight speed improvements (up to about 14% in
diff --git a/libpng/scripts/pnglibconf.h.prebuilt b/libpng/scripts/pnglibconf.h.prebuilt
index 53b5e442..e1e27e95 100644
--- a/libpng/scripts/pnglibconf.h.prebuilt
+++ b/libpng/scripts/pnglibconf.h.prebuilt
@@ -1,10 +1,9 @@
-/* libpng 1.6.34 STANDARD API DEFINITION */
-
/* pnglibconf.h - library build configuration */
-/* Libpng version 1.6.34 - September 29, 2017 */
+/* libpng version 1.6.37 */
-/* Copyright (c) 1998-2017 Glenn Randers-Pehrson */
+/* Copyright (c) 2018-2019 Cosmin Truta */
+/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */
/* This code is released under the libpng license. */
/* For conditions of distribution and use, see the disclaimer */
@@ -20,8 +19,6 @@
#define PNG_ALIGNED_MEMORY_SUPPORTED
/*#undef PNG_ARM_NEON_API_SUPPORTED*/
/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/
-/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/
-/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/
#define PNG_BENIGN_ERRORS_SUPPORTED
#define PNG_BENIGN_READ_ERRORS_SUPPORTED
/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/
@@ -46,6 +43,8 @@
#define PNG_IO_STATE_SUPPORTED
#define PNG_MNG_FEATURES_SUPPORTED
#define PNG_POINTER_INDEXING_SUPPORTED
+/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/
+/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/
#define PNG_PROGRESSIVE_READ_SUPPORTED
#define PNG_READ_16BIT_SUPPORTED
#define PNG_READ_ALPHA_MODE_SUPPORTED
diff --git a/libpng/scripts/symbols.def b/libpng/scripts/symbols.def
index 51901901..82494bbf 100644
--- a/libpng/scripts/symbols.def
+++ b/libpng/scripts/symbols.def
@@ -1,4 +1,3 @@
-;Version 1.6.34
;--------------------------------------------------------------
; LIBPNG symbol list as a Win32 DEF file
; Contains all the symbols that can be exported from libpng
diff --git a/libpng/test-driver b/libpng/test-driver
index 8e575b01..b8521a48 100755
--- a/libpng/test-driver
+++ b/libpng/test-driver
@@ -1,9 +1,9 @@
#! /bin/sh
# test-driver - basic testsuite driver script.
-scriptversion=2013-07-13.22; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2018 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
@@ -16,7 +16,7 @@ scriptversion=2013-07-13.22; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -140,9 +140,9 @@ echo ":copy-in-global-log: $gcopy" >> $trs_file
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/man/dvipdf.1 b/man/dvipdf.1
index 5d17aff6..7880e46c 100644
--- a/man/dvipdf.1
+++ b/man/dvipdf.1
@@ -1,4 +1,4 @@
-.TH DVIPDF 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH DVIPDF 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
dvipdf \- Convert TeX DVI file to PDF using ghostscript and dvips
.SH SYNOPSIS
@@ -21,7 +21,7 @@ and any options from the command-line.
.SH SEE ALSO
gs(1), dvips(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/gs.1 b/man/gs.1
index 7e01d94a..c86937eb 100644
--- a/man/gs.1
+++ b/man/gs.1
@@ -1,4 +1,4 @@
-.TH GS 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH GS 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
gs \- Ghostscript (PostScript and PDF language interpreter and previewer)
.SH SYNOPSIS
@@ -442,7 +442,7 @@ The various Ghostscript document files (above), especially \fBUse.htm\fR.
See http://bugs.ghostscript.com/ and the Usenet news group
comp.lang.postscript.
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the primary maintainers
of Ghostscript.
diff --git a/man/gslp.1 b/man/gslp.1
index b3809894..f0d23cbe 100644
--- a/man/gslp.1
+++ b/man/gslp.1
@@ -1,4 +1,4 @@
-.TH GSLP 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH GSLP 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
gslp \- Format and print text using ghostscript
.br
@@ -92,7 +92,7 @@ Also, the string %# in a heading or footing is replaced with the page #.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/gsnd.1 b/man/gsnd.1
index f0c757d1..045478ee 100644
--- a/man/gsnd.1
+++ b/man/gsnd.1
@@ -1,4 +1,4 @@
-.TH GSND 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH GSND 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
gsnd \- Run ghostscript (PostScript and PDF engine) without display
.SH SYNOPSIS
@@ -12,7 +12,7 @@ flag, followed by any other arguments from the command-line.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pdf2dsc.1 b/man/pdf2dsc.1
index f4244892..783ed727 100644
--- a/man/pdf2dsc.1
+++ b/man/pdf2dsc.1
@@ -1,4 +1,4 @@
-.TH PDF2DSC 1 "15 October 2019" 9.50 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2DSC 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2dsc \- generate a PostScript page list of a PDF document
.SH SYNOPSIS
@@ -28,6 +28,6 @@ Ghostscript since release 3.53.
.SH SEE ALSO
gs(1), ghostview(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Yves Arrouye <yves.arrouye@usa.net> and Russell Lang gsview at ghostgum.com.au
diff --git a/man/pdf2ps.1 b/man/pdf2ps.1
index b2331f56..0490dcef 100644
--- a/man/pdf2ps.1
+++ b/man/pdf2ps.1
@@ -1,4 +1,4 @@
-.TH PDF2PS 1 "15 October 2019" 9.50 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2PS 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2ps \- Ghostscript PDF to PostScript translator
.SH SYNOPSIS
@@ -14,7 +14,7 @@ LanguageLevel 3 in the output.
Run "\fBgs -h\fR" to find the location of Ghostscript documentation on your
system, from which you can get more details.
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pf2afm.1 b/man/pf2afm.1
index 548ed39d..4fb679b9 100644
--- a/man/pf2afm.1
+++ b/man/pf2afm.1
@@ -1,4 +1,4 @@
-.TH PF2AFM 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH PF2AFM 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
pf2afm \- Make an AFM file from Postscript (PFB/PFA/PFM) font files using ghostscript
.SH SYNOPSIS
@@ -15,7 +15,7 @@ gs(1)
.br
pf2afm.ps in the Ghostscript lib directory.
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/pfbtopfa.1 b/man/pfbtopfa.1
index f6bda4b5..7ffdfd20 100644
--- a/man/pfbtopfa.1
+++ b/man/pfbtopfa.1
@@ -1,4 +1,4 @@
-.TH PFBTOPFA 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH PFBTOPFA 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
pfbtopfa \- Convert Postscript .pfb fonts to .pfa format using ghostscript
.SH SYNOPSIS
@@ -10,7 +10,7 @@ to convert a .pfb file into a .pfa file.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/printafm.1 b/man/printafm.1
index dcab9474..338f8eaa 100644
--- a/man/printafm.1
+++ b/man/printafm.1
@@ -1,4 +1,4 @@
-.TH PRINTAFM 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH PRINTAFM 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
printafm \- Print the metrics from a Postscript font in AFM format using ghostscript
.SH SYNOPSIS
@@ -11,7 +11,7 @@ Output goes to stdout.
.SH SEE ALSO
gs(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2ascii.1 b/man/ps2ascii.1
index 2ccb3662..548cfe24 100644
--- a/man/ps2ascii.1
+++ b/man/ps2ascii.1
@@ -1,4 +1,4 @@
-.TH PS2ASCII 1 "15 October 2019" 9.50 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2ASCII 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ascii \- Ghostscript translator from PostScript or PDF to ASCII
.SH SYNOPSIS
@@ -22,7 +22,7 @@ system, from which you can get more details.
.SH SEE ALSO
pstotext(1), http://www.research.digital.com/SRC/virtualpaper/pstotext.html
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2epsi.1 b/man/ps2epsi.1
index 42b852c6..00220860 100644
--- a/man/ps2epsi.1
+++ b/man/ps2epsi.1
@@ -1,4 +1,4 @@
-.TH PS2EPSI 1 "15 October 2019" 9.50 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2EPSI 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2epsi \- generate conforming Encapsulated PostScript
.SH SYNOPSIS
@@ -59,7 +59,7 @@ ps2epsi.ps>the Ghostscript program which does the work
.SH SEE ALSO
gs (1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
However, the content may be obsolete, or inconsistent with ps2epsi.txt.
.SH AUTHOR
George Cameron
diff --git a/man/ps2pdf.1 b/man/ps2pdf.1
index 534da391..e584e5a1 100644
--- a/man/ps2pdf.1
+++ b/man/ps2pdf.1
@@ -1,4 +1,4 @@
-.TH PS2PDF 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH PS2PDF 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdf \- Convert PostScript to PDF using ghostscript
.br
@@ -89,7 +89,7 @@ Ps2pdf.htm in the Ghostscript documentation
See http://bugs.ghostscript.com/ and the Usenet news group
comp.lang.postscript.
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2pdfwr.1 b/man/ps2pdfwr.1
index 2266bfa5..dfddcb86 100644
--- a/man/ps2pdfwr.1
+++ b/man/ps2pdfwr.1
@@ -1,4 +1,4 @@
-.TH PS2PDFWR 1 "15 October 2019" 9.50 Ghostscript \" -*- nroff -*-
+.TH PS2PDFWR 1 "19 March 2020" 9.52 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdfwr \- Convert PostScript to PDF without specifying CompatibilityLevel, using ghostscript
.SH SYNOPSIS
@@ -23,7 +23,7 @@ scripts all invoke this one with the addition of the respective compatibility le
.SH SEE ALSO
gs(1), ps2pdf(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/man/ps2ps.1 b/man/ps2ps.1
index 178f2b24..747f9419 100644
--- a/man/ps2ps.1
+++ b/man/ps2ps.1
@@ -1,4 +1,4 @@
-.TH PS2PS 1 "15 October 2019" 9.50 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2PS 1 "19 March 2020" 9.52 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ps, eps2eps \- Ghostscript PostScript "distiller"
.SH SYNOPSIS
@@ -22,7 +22,7 @@ system, from which you can get more details.
.SH SEE ALSO
ps2pdf(1), ps2ascii(1), ps2epsi(1)
.SH VERSION
-This document was last revised for Ghostscript version 9.50.
+This document was last revised for Ghostscript version 9.52.
.SH AUTHOR
Artifex Software, Inc. are the
primary maintainers of Ghostscript.
diff --git a/openjpeg/.travis.yml b/openjpeg/.travis.yml
deleted file mode 100644
index 32dce2b6..00000000
--- a/openjpeg/.travis.yml
+++ /dev/null
@@ -1,153 +0,0 @@
-language: cpp
-
-matrix:
- include:
-# OSX
- - os: osx
- compiler: clang
- env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_CI_INCLUDE_IF_DEPLOY=1
-
-# Test code style
- - os: linux
- compiler: clang-3.8
- env: OPJ_CI_CC=clang-3.8 OPJ_CI_CXX=clang-3.8 OPJ_CI_CHECK_STYLE=1 OPJ_CI_SKIP_TESTS=1
- addons:
- apt:
- sources:
- - llvm-toolchain-precise-3.8
- - ubuntu-toolchain-r-test
- packages:
- - clang-3.8
- - flip
-
-# Performance test with GCC
- - os: linux
- compiler: g++
- dist: precise
- env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_CI_INCLUDE_IF_DEPLOY=1 OPJ_CI_PERF_TESTS=1
-
-# Test compilation with AVX2
- - os: linux
- # "sudo: yes" and "dist: trusty" give us a worker with the AVX2 instruction set
- sudo: yes
- dist: trusty
- compiler: clang-3.8
- env: OPJ_CI_CC=clang-3.8 OPJ_CI_CXX=clang-3.8 OPJ_CI_INSTRUCTION_SETS="-mavx2" OPJ_CI_BUILD_CONFIGURATION=Release
- addons:
- apt:
- sources:
- - llvm-toolchain-precise-3.8
- - ubuntu-toolchain-r-test
- packages:
- - clang-3.8
-
-# Test multi-threading
- - os: linux
- compiler: g++
- dist: precise
- env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_NUM_THREADS=2
-
-# Test 32-bit compilation
- - os: linux
- compiler: g++
- env: OPJ_CI_ARCH=i386 OPJ_CI_BUILD_CONFIGURATION=Release
- addons:
- apt:
- packages:
- - gcc-multilib
- - g++-multilib
-
-# Profile code (gcc -pg)
- - os: linux
- compiler: g++
- env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug OPJ_CI_PROFILE=1
- addons:
- apt:
- packages:
- - valgrind
-
-# Test under ASAN
- - os: linux
- compiler: clang
- env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug OPJ_CI_ASAN=1
-
-# Test with CLang 3.8
- - os: linux
- compiler: clang-3.8
- env: OPJ_CI_CC=clang-3.8 OPJ_CI_CXX=clang-3.8 OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_CI_PERF_TESTS=1 OPJ_CI_BUILD_FUZZERS=1
- addons:
- apt:
- sources:
- - llvm-toolchain-precise-3.8
- - ubuntu-toolchain-r-test
- packages:
- - clang-3.8
-
-# Test with mingw 32 bit
- - os: linux
- compiler: x86_64-w64-mingw32-g++
- env: OPJ_CI_CC=x86_64-w64-mingw32-gcc OPJ_CI_CXX=x86_64-w64-mingw32-g++ OPJ_CI_ARCH=i386 OPJ_CI_BUILD_CONFIGURATION=Release
- addons:
- apt:
- packages:
- - gcc-mingw-w64-base
- - binutils-mingw-w64-i686
- - gcc-mingw-w64-i686
- - gcc-mingw-w64
- - g++-mingw-w64-i686
- - gcc-multilib
- - g++-multilib
-
-# Test with mingw 64 bit
- - os: linux
- compiler: x86_64-w64-mingw32-g++
- env: OPJ_CI_CC=x86_64-w64-mingw32-gcc OPJ_CI_CXX=x86_64-w64-mingw32-g++ OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release
- addons:
- apt:
- packages:
- - gcc-mingw-w64-base
- - binutils-mingw-w64-x86-64
- - gcc-mingw-w64-x86-64
- - gcc-mingw-w64
- - g++-mingw-w64-x86-64
-
-# Test with gcc 4.8
- - os: linux
- compiler: g++-4.8
- env: OPJ_CI_CC=gcc-4.8 OPJ_CI_CXX=g++-4.8 OPJ_CI_ABI_CHECK=1
- dist: precise
- addons:
- apt:
- sources:
- - ubuntu-toolchain-r-test
- packages:
- - gcc-4.8
- - g++-4.8
- - libelf-dev
- - elfutils
- - texinfo
- - exuberant-ctags
-
-install:
- - ./tools/travis-ci/install.sh
-
-script:
- - ./tools/travis-ci/run.sh
- - ./tools/travis-ci/abi-check.sh
-
-before_deploy:
- - export OPJ_RELEASE_PKG_FILE=$(ls build/openjpeg-${TRAVIS_TAG}*)
- - echo "deploying $OPJ_RELEASE_PKG_FILE to GitHub releases"
-
-deploy:
- provider: releases
- api_key:
- secure: Npi13uOffALCVNwea4p4q8v85Lo/WsRqaeZQcWrAkt8MxRnfvWQtmnuwmHnVB6Cig+T1lVUHrklOaJIApIb6nkGq3CS/9bD8+SCS2NEdAAP/QYWnBi0ubWXVMRyDLypmwRpzLNSZ0xLYGFUl2PjieZYKRcz1dd/J7S+FnXhPtdjXweq0FS63zTcMe7ggjfmzSOWUCEFmMjZPaM0Be+3PweieCO1dxlHuy7ugCkx2S7d+5hNsicIhQmTADjqtJAkHoMhYqu6/yLFxhjO/+f938PATFULdODTvjCsUwdN/ySWi1Oj4uPAntfytZP7H6YrzLh8dS73QCsdkhhDJIgJskHIBSbRyyEVUnOvQgD9VaBVGHtc1KtZQTwc41OUO3BGPHl97s3oX6bqWqo/L53dB3TPHGx+1+2HL/F0zaDZuHhAKMkPwe8LFPMPB/ur65zXMHjnWb2ZTVVdoIvkbQ7nu8ApI60ejxocYBsEyAuC2CPXU2ki4jdEhm0E1hIziWNE9/LTuM17ziQuJ6WpXOSMrfP4o5aVDmLp5ZGBSocrspOksgyI9XogHaO/r+Y6N3exy+giObFfMHkZVUpsKrKmtOJ7TC1Vg5HsYGlWW8RN8dkJV47bUXm9K4sMos9eYMUt/czykPAs+132cogpII3QxXpFZQqZg6SEPVfOiyqQzTUI=
- file_glob: true
- file: "${OPJ_RELEASE_PKG_FILE}"
- skip_cleanup: true
- on:
- repo: uclouvain/openjpeg
- tags: true
- condition: "$OPJ_CI_INCLUDE_IF_DEPLOY = 1"
-
diff --git a/openjpeg/CHANGELOG.md b/openjpeg/CHANGELOG.md
index a01ca6d9..e45b3246 100644
--- a/openjpeg/CHANGELOG.md
+++ b/openjpeg/CHANGELOG.md
@@ -1,5 +1,83 @@
# Changelog
+## [v2.3.1](https://github.com/uclouvain/openjpeg/releases/v2.3.1) (2019-04-02)
+[Full Changelog](https://github.com/uclouvain/openjpeg/compare/v2.3.0...v2.3.1)
+
+**Closed issues:**
+
+- v2.2.0 regression for decoding images where TNsot == 0 [\#1120](https://github.com/uclouvain/openjpeg/issues/1120)
+- Int overflow in jp3d [\#1162](https://github.com/uclouvain/openjpeg/issues/1162)
+- Heap buffer overflow in opj\_j2k\_update\_image\_data\(\) triggered with Ghostscript [\#1157](https://github.com/uclouvain/openjpeg/issues/1157)
+- LINUX install doesn't work when building shared libraries is disabled [\#1155](https://github.com/uclouvain/openjpeg/issues/1155)
+- OPENJPEG null ptr dereference in openjpeg-2.3.0/src/bin/jp2/convert.c:2243 [\#1152](https://github.com/uclouvain/openjpeg/issues/1152)
+- How to drop certain subbands/layers in DWT [\#1147](https://github.com/uclouvain/openjpeg/issues/1147)
+- where is the MQ-Coder ouput stream in t2.c? [\#1146](https://github.com/uclouvain/openjpeg/issues/1146)
+- OpenJPEG 2.3 \(and 2.2?\) multi component image fails to decode with KDU v7.10 [\#1132](https://github.com/uclouvain/openjpeg/issues/1132)
+- Missing checks for header\_info.height and header\_info.width in function pnmtoimage in src/bin/jpwl/convert.c, which can lead to heap buffer overflow [\#1126](https://github.com/uclouvain/openjpeg/issues/1126)
+- Assertion Failure in jp2.c [\#1125](https://github.com/uclouvain/openjpeg/issues/1125)
+- Division-by-zero vulnerabilities in the function pi\_next\_pcrl, pi\_next\_cprl and pi\_next\_rpcl in src/lib/openjp3d/pi.c [\#1123](https://github.com/uclouvain/openjpeg/issues/1123)
+- Precinct switch \(-c\) doesn't right-shift last record to remaining resolution levels [\#1117](https://github.com/uclouvain/openjpeg/issues/1117)
+- Sample: encode J2K a data using streams??? [\#1114](https://github.com/uclouvain/openjpeg/issues/1114)
+- HIGH THROUGHPUT JPEG 2000 \(HTJ2K\) [\#1112](https://github.com/uclouvain/openjpeg/issues/1112)
+- How to build openjpeg for arm linux? [\#1108](https://github.com/uclouvain/openjpeg/issues/1108)
+- crash [\#1106](https://github.com/uclouvain/openjpeg/issues/1106)
+- JP2000 returning OPJ\_CLRSPC\_UNKNOWN color space [\#1103](https://github.com/uclouvain/openjpeg/issues/1103)
+- Compilation successful but install unsuccessful: Calling executables throws libraries missing error [\#1102](https://github.com/uclouvain/openjpeg/issues/1102)
+- fprintf format string requires 1 parameter but only 0 are given [\#1093](https://github.com/uclouvain/openjpeg/issues/1093)
+- fprintf format string requires 1 parameter but only 0 are given [\#1092](https://github.com/uclouvain/openjpeg/issues/1092)
+- sprintf buffer overflow [\#1088](https://github.com/uclouvain/openjpeg/issues/1088)
+- sprintf buffer overflow [\#1085](https://github.com/uclouvain/openjpeg/issues/1085)
+- Infinite loop when reading jp2 [\#1081](https://github.com/uclouvain/openjpeg/issues/1081)
+- missing format string parameter [\#1074](https://github.com/uclouvain/openjpeg/issues/1074)
+- Excessive Iteration in opj\_t1\_encode\_cblks \(src/lib/openjp2/t1.c\) [\#1059](https://github.com/uclouvain/openjpeg/issues/1059)
+- Out-of-bound left shift in opj\_j2k\_setup\_encoder \(src/lib/openjp2/j2k.c\) [\#1057](https://github.com/uclouvain/openjpeg/issues/1057)
+- Encode image on Unsplash [\#1054](https://github.com/uclouvain/openjpeg/issues/1054)
+- Integer overflow in opj\_t1\_encode\_cblks \(src/lib/openjp2/t1.c\) [\#1053](https://github.com/uclouvain/openjpeg/issues/1053)
+- Signed Integer Overflow - 68065512 [\#1048](https://github.com/uclouvain/openjpeg/issues/1048)
+- Similar vulnerable functions related to CVE-2017-14041 [\#1044](https://github.com/uclouvain/openjpeg/issues/1044)
+- \[ERROR\] COD marker already read. No more than one COD marker per tile. [\#1043](https://github.com/uclouvain/openjpeg/issues/1043)
+- failing to install latest version of openjpeg from source [\#1041](https://github.com/uclouvain/openjpeg/issues/1041)
+- Trouble compressing large raw image [\#1032](https://github.com/uclouvain/openjpeg/issues/1032)
+- Download and installed code from 2.3 archive. Installing 2.2? [\#1030](https://github.com/uclouvain/openjpeg/issues/1030)
+- missing fclose [\#1029](https://github.com/uclouvain/openjpeg/issues/1029)
+- NULL Pointer Access in function imagetopnm of convert.c\(jp2\):1289 [\#860](https://github.com/uclouvain/openjpeg/issues/860)
+- NULL Pointer Access in function imagetopnm of convert.c:2226\(jp2\) [\#859](https://github.com/uclouvain/openjpeg/issues/859)
+- Heap Buffer Overflow in function imagetotga of convert.c\(jp2\):942 [\#858](https://github.com/uclouvain/openjpeg/issues/858)
+
+**Merged pull requests:**
+
+- abi-check.sh: fix broken download URL [\#1188](https://github.com/uclouvain/openjpeg/pull/1188) ([rouault](https://github.com/rouault))
+- opj\_t1\_encode\_cblks: fix UBSAN signed integer overflow [\#1187](https://github.com/uclouvain/openjpeg/pull/1187) ([rouault](https://github.com/rouault))
+- convertbmp: detect invalid file dimensions early \(CVE-2018-6616\) [\#1172](https://github.com/uclouvain/openjpeg/pull/1172) ([hlef](https://github.com/hlef))
+- color\_apply\_icc\_profile: avoid potential heap buffer overflow [\#1170](https://github.com/uclouvain/openjpeg/pull/1170) ([rouault](https://github.com/rouault))
+- Fix multiple potential vulnerabilities and bugs [\#1168](https://github.com/uclouvain/openjpeg/pull/1168) ([Young-X](https://github.com/Young-X))
+- Fix several memory and resource leaks [\#1163](https://github.com/uclouvain/openjpeg/pull/1163) ([nforro](https://github.com/nforro))
+- Fix some potential overflow issues [\#1161](https://github.com/uclouvain/openjpeg/pull/1161) ([stweil](https://github.com/stweil))
+- jp3d/jpwl convert: fix write stack buffer overflow [\#1160](https://github.com/uclouvain/openjpeg/pull/1160) ([hlef](https://github.com/hlef))
+- Int overflow fixed [\#1159](https://github.com/uclouvain/openjpeg/pull/1159) ([ichlubna](https://github.com/ichlubna))
+- Update knownfailures- files given current configurations [\#1149](https://github.com/uclouvain/openjpeg/pull/1149) ([rouault](https://github.com/rouault))
+- CVE-2018-5785: fix issues with zero bitmasks [\#1148](https://github.com/uclouvain/openjpeg/pull/1148) ([hlef](https://github.com/hlef))
+- openjp2/jp2: Fix two format strings [\#1143](https://github.com/uclouvain/openjpeg/pull/1143) ([stweil](https://github.com/stweil))
+- Changes in pnmtoimage if image data are missing [\#1141](https://github.com/uclouvain/openjpeg/pull/1141) ([szukw000](https://github.com/szukw000))
+- Relative path to header files is hardcoded in OpenJPEGConfig.cmake.in file [\#1140](https://github.com/uclouvain/openjpeg/pull/1140) ([bukatlib](https://github.com/bukatlib))
+- Cast on uint ceildiv [\#1136](https://github.com/uclouvain/openjpeg/pull/1136) ([reverson](https://github.com/reverson))
+- Add -DBUILD\_PKGCONFIG\_FILES to install instructions [\#1133](https://github.com/uclouvain/openjpeg/pull/1133) ([robe2](https://github.com/robe2))
+- Fix some typos in code comments and documentation [\#1128](https://github.com/uclouvain/openjpeg/pull/1128) ([stweil](https://github.com/stweil))
+- Fix regression in reading files with TNsot == 0 \(refs \#1120\) [\#1121](https://github.com/uclouvain/openjpeg/pull/1121) ([rouault](https://github.com/rouault))
+- Use local type declaration for POSIX standard type only for MS compiler [\#1119](https://github.com/uclouvain/openjpeg/pull/1119) ([stweil](https://github.com/stweil))
+- Fix Mac builds [\#1104](https://github.com/uclouvain/openjpeg/pull/1104) ([rouault](https://github.com/rouault))
+- jp3d: Replace sprintf\(\) by snprintf\(\) in volumetobin\(\) [\#1101](https://github.com/uclouvain/openjpeg/pull/1101) ([kbabioch](https://github.com/kbabioch))
+- opj\_mj2\_extract: Rename output\_location to output\_prefix [\#1096](https://github.com/uclouvain/openjpeg/pull/1096) ([kbabioch](https://github.com/kbabioch))
+- mj2: Add missing variable to format string in fprintf\(\) invocation in meta\_out.c [\#1094](https://github.com/uclouvain/openjpeg/pull/1094) ([kbabioch](https://github.com/kbabioch))
+- Convert files to UTF-8 encoding [\#1090](https://github.com/uclouvain/openjpeg/pull/1090) ([stweil](https://github.com/stweil))
+- fix unchecked integer multiplication overflow [\#1080](https://github.com/uclouvain/openjpeg/pull/1080) ([setharnold](https://github.com/setharnold))
+- Fixed typos [\#1062](https://github.com/uclouvain/openjpeg/pull/1062) ([radarhere](https://github.com/radarhere))
+- Note that seek uses SEEK\_SET behavior. [\#1055](https://github.com/uclouvain/openjpeg/pull/1055) ([ideasman42](https://github.com/ideasman42))
+- Some Doxygen tags are removed [\#1050](https://github.com/uclouvain/openjpeg/pull/1050) ([szukw000](https://github.com/szukw000))
+- Fix resource leak \(CID 179466\) [\#1047](https://github.com/uclouvain/openjpeg/pull/1047) ([stweil](https://github.com/stweil))
+- Changed cmake version test to allow for cmake 2.8.11.x [\#1042](https://github.com/uclouvain/openjpeg/pull/1042) ([radarhere](https://github.com/radarhere))
+- Add missing fclose\(\) statement in error condition. [\#1037](https://github.com/uclouvain/openjpeg/pull/1037) ([gfiumara](https://github.com/gfiumara))
+
## [v2.3.0](https://github.com/uclouvain/openjpeg/releases/v2.3.0) (2017-10-04)
[Full Changelog](https://github.com/uclouvain/openjpeg/compare/v2.2.0...v2.3.0)
@@ -388,7 +466,7 @@
- Migration guide v2 [\#160](https://github.com/uclouvain/openjpeg/issues/160)
- Cannot decompress JPEG2000Aware3.18.7.3Win32\_kdutranscode6.3.1.j2k [\#158](https://github.com/uclouvain/openjpeg/issues/158)
- Cannot decompress JPEG2000Aware3.18.7.3Win32.j2k [\#157](https://github.com/uclouvain/openjpeg/issues/157)
-- openjpeg@googlegroups.com has disappeard [\#153](https://github.com/uclouvain/openjpeg/issues/153)
+- openjpeg@googlegroups.com has disappeared [\#153](https://github.com/uclouvain/openjpeg/issues/153)
- OpenJPEG 1.5.0 crashes on a ridiculously big file... [\#151](https://github.com/uclouvain/openjpeg/issues/151)
- opj\_image vs free [\#146](https://github.com/uclouvain/openjpeg/issues/146)
- Windows .dll file invalid [\#140](https://github.com/uclouvain/openjpeg/issues/140)
@@ -451,7 +529,7 @@
- Support unscaled 10 bit data for 2K cinema @ 48 FPS, as per DCI standard [\#671](https://github.com/uclouvain/openjpeg/issues/671)
- Use parallel jobs in ctest [\#664](https://github.com/uclouvain/openjpeg/issues/664)
- \[Security\]Multiple Memory error [\#663](https://github.com/uclouvain/openjpeg/issues/663)
-- lossy encoding a 16 bit TIF file : severe artifiacts in decompressed image [\#660](https://github.com/uclouvain/openjpeg/issues/660)
+- lossy encoding a 16 bit TIF file : severe artifacts in decompressed image [\#660](https://github.com/uclouvain/openjpeg/issues/660)
- opj\_compress and opj\_decompress : get\_next\_file method uses hard-coded unix path separator [\#630](https://github.com/uclouvain/openjpeg/issues/630)
- Uninitialized variable [\#629](https://github.com/uclouvain/openjpeg/issues/629)
- Use of enum variable for bit flags prevents compilation as C++ source [\#619](https://github.com/uclouvain/openjpeg/issues/619)
@@ -488,7 +566,7 @@
- Correct abi-check.sh for PR [\#791](https://github.com/uclouvain/openjpeg/pull/791) ([mayeut](https://github.com/mayeut))
- Update tcd.c [\#790](https://github.com/uclouvain/openjpeg/pull/790) ([maddin200](https://github.com/maddin200))
- Update lcms2 [\#773](https://github.com/uclouvain/openjpeg/pull/773) ([mayeut](https://github.com/mayeut))
-- Use lowercase for cmake commands consistenly [\#769](https://github.com/uclouvain/openjpeg/pull/769) ([julienmalik](https://github.com/julienmalik))
+- Use lowercase for cmake commands consistently [\#769](https://github.com/uclouvain/openjpeg/pull/769) ([julienmalik](https://github.com/julienmalik))
- Ignore clang's summary warning [\#768](https://github.com/uclouvain/openjpeg/pull/768) ([julienmalik](https://github.com/julienmalik))
- Fix UBSan gcc warning for first arg to memset non null [\#767](https://github.com/uclouvain/openjpeg/pull/767) ([julienmalik](https://github.com/julienmalik))
- Update to libtiff-4.0.6 [\#764](https://github.com/uclouvain/openjpeg/pull/764) ([mayeut](https://github.com/mayeut))
diff --git a/openjpeg/INSTALL.md b/openjpeg/INSTALL.md
new file mode 100644
index 00000000..1c0f1e4e
--- /dev/null
+++ b/openjpeg/INSTALL.md
@@ -0,0 +1,138 @@
+
+# OpenJPEG installation
+
+The build method maintained by OpenJPEG is [CMake](https://cmake.org/).
+
+## UNIX/LINUX - MacOS (terminal) - WINDOWS (cygwin, MinGW)
+
+To build the library, type from source tree directory:
+```
+mkdir build
+cd build
+cmake .. -DCMAKE_BUILD_TYPE=Release
+make
+```
+Binaries are then located in the 'bin' directory.
+
+To install the library, type with root privileges:
+```
+make install
+make clean
+```
+
+To build the html documentation, you need doxygen to be installed on your system.
+It will create an "html" directory in TOP\_LEVEL/build/doc)
+```
+make doc
+```
+
+Main available cmake flags:
+ * To specify the install path: '-DCMAKE\_INSTALL\_PREFIX=/path'
+ * To build the shared libraries and links the executables against it: '-DBUILD\_SHARED\_LIBS:bool=on' (default: 'ON')
+> Note: when using this option, static libraries are not built and executables are dynamically linked.
+ * PKG_CONFIG files are by default built for Unix compile, you can force to build on other platforms by adding: '-DBUILD_PKGCONFIG_FILES=on'
+ * To build the CODEC executables: '-DBUILD\_CODEC:bool=on' (default: 'ON')
+ * To build opjstyle (internal version of astyle) for OpenJPEG development: '-DWITH_ASTYLE=ON'
+ * [OBSOLETE] To build the MJ2 executables: '-DBUILD\_MJ2:bool=on' (default: 'OFF')
+ * [OBSOLETE] To build the JPWL executables and JPWL library: '-DBUILD\_JPWL:bool=on' (default: 'OFF')
+ * [OBSOLETE] To build the JPIP client (java compiler recommended) library and executables: '-DBUILD\_JPIP:bool=on' (default: 'OFF')
+ * [OBSOLETE] To build the JPIP server (need fcgi) library and executables: '-DBUILD\_JPIP\_SERVER:bool=on' (default: 'OFF')
+ * To enable testing (and automatic result upload to http://my.cdash.org/index.php?project=OPENJPEG):
+```
+cmake . -DBUILD_TESTING:BOOL=ON -DOPJ_DATA_ROOT:PATH='path/to/the/data/directory' -DBUILDNAME:STRING='name_of_the_build'
+make
+make Experimental
+```
+Note : test data is available on the following github repo: https://github.com/uclouvain/openjpeg-data
+
+If '-DOPJ\_DATA\_ROOT:PATH' option is omitted, test files will be automatically searched in '${CMAKE\_SOURCE\_DIR}/../data'.
+
+Note 2 : to execute the encoding test suite, kakadu binaries are needed to decode encoded image and compare it to the baseline. Kakadu binaries are freely available for non-commercial purposes at http://www.kakadusoftware.com. kdu\_expand will need to be in your PATH for cmake to find it.
+
+Note 3 : OpenJPEG encoder and decoder (not the library itself !) depends on several libraries: png, tiff, lcms, z. If these libraries are not found on the system, they are automatically built from the versions available in the source tree. You can force the use of these embedded version with BUILD\_THIRDPARTY:BOOL=ON. On a Debian-like system you can also simply install these libraries with:
+```
+sudo apt-get install liblcms2-dev libtiff-dev libpng-dev libz-dev
+```
+
+Note 4 : On MacOS, if it does not work, try adding the following flag to the cmake command :
+```
+-DCMAKE_OSX_ARCHITECTURES:STRING=i386
+```
+
+## MacOS (XCode) - WINDOWS (VisualStudio, etc)
+
+You can use cmake to generate the project files for the IDE you are using (VC2010, XCode, etc).
+Type `cmake --help` for available generators on your platform.
+
+Examples for Windows with Visual Studio C++ compiler:
+
+If using directly the cl compiler:
+
+```
+cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+To compile a 64-bit application, open 64-Bit Visual C\+\+ toolset on the command line and run cmake. For further information, please refer to: [How to: Enable a 64-Bit Visual C\+\+ Toolset on the Command Line](https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx).
+
+
+If you do not want directly use the cl compiler, you could use:
+
+```
+cmake -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+To create Visual Studio solution (.sln) and project files (.vcproj / .vcxproj):
+```
+cmake -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+64-bit application:
+```
+cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+
+# Enabling CPU specific optimizations
+
+For Intel/AMD processors, OpenJPEG implements optimizations using the SSE4.1
+instruction set (for example, for the 9x7 inverse MCT transform) and the AVX2
+instruction set (for example, for the 5x3 inverse discrete wavelet transform).
+Currently, those optimizations are only available if OpenJPEG is built to
+use those instruction sets (and the resulting binary will only run on compatible
+CPUs)
+
+With gcc/clang, it is possible to enable those instruction sets with the following :
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -msse4.1 -DNDEBUG" ..
+```
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -mavx2 -DNDEBUG" ..
+```
+
+(AVX2 implies SSE4.1)
+
+Or if the binary is dedicated to run on the machine where it has
+been compiled :
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -march=native -DNDEBUG" ..
+```
+
+# Modifying OpenJPEG
+
+Before committing changes, run:
+```scripts/prepare-commit.sh```
+
+# Using OpenJPEG
+
+To use openjpeg exported cmake file, simply create your application doing:
+
+```
+$ cat CMakeLists.txt
+find_package(OpenJPEG REQUIRED)
+include_directories(${OPENJPEG_INCLUDE_DIRS})
+add_executable(myapp myapp.c)
+target_link_libraries(myapp ${OPENJPEG_LIBRARIES})
+```
diff --git a/openjpeg/NEWS.md b/openjpeg/NEWS.md
index 0d85a7a4..794a796e 100644
--- a/openjpeg/NEWS.md
+++ b/openjpeg/NEWS.md
@@ -1,6 +1,12 @@
# OpenJPEG NEWS
-More details in the [Changelog](https://github.com/uclouvain/openjpeg/blob/master/CHANGELOG.md)
+More details in the [CHANGELOG](https://github.com/uclouvain/openjpeg/blob/master/CHANGELOG.md)
+
+## OpenJPEG 2.3.1 (April 2019)
+
+No API/ABI break compared to v2.3.0
+
+* Many bug fixes (including security fixes)
## OpenJPEG 2.3.0 (October 2017)
diff --git a/openjpeg/appveyor.yml b/openjpeg/appveyor.yml
index b8e55a29..d6561f6a 100644
--- a/openjpeg/appveyor.yml
+++ b/openjpeg/appveyor.yml
@@ -1,4 +1,4 @@
-version: 2.3.0.{build}
+version: 2.3.1.{build}
branches:
except:
- coverity_scan
@@ -32,9 +32,9 @@ deploy:
description: 'OpenJPEG $(appveyor_repo_tag_name) has been released. More info [here](https://github.com/uclouvain/openjpeg/blob/$(appveyor_repo_tag_name)/NEWS) and a detailed view [here](https://github.com/uclouvain/openjpeg/blob/$(appveyor_repo_tag_name)/CHANGES).'
provider: GitHub
auth_token:
- secure: Huk03f1heCD/HMyA+4ZeVmICdmKn9rPxK5p8/KxzgL+FtJDHlqcllcCrtN9bDxRH # your encrypted token from GitHub
+ secure: XUL+IoRRw8U/4tupa/fMpinxurft7WRQHZiWHMLO5iuFbwZ+C3vCjVVVM+5Ebky7 # your encrypted token from GitHub
artifact: /.*\.zip/ # upload all zip packages to release assets
- draft: false
+ draft: true
prerelease: false
on:
appveyor_repo_tag: true # deploy on tag push only
diff --git a/openjpeg/doc/Doxyfile.dox.cmake.in b/openjpeg/doc/Doxyfile.dox.cmake.in
index 3163f991..439e133d 100644
--- a/openjpeg/doc/Doxyfile.dox.cmake.in
+++ b/openjpeg/doc/Doxyfile.dox.cmake.in
@@ -47,7 +47,6 @@ IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
-SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
@@ -79,7 +78,6 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
-SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
@@ -146,7 +144,6 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
-HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
@@ -173,7 +170,6 @@ ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
-USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
@@ -217,8 +213,6 @@ MAN_LINKS = NO
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
diff --git a/openjpeg/src/bin/CMakeLists.txt b/openjpeg/src/bin/CMakeLists.txt
deleted file mode 100644
index edf85feb..00000000
--- a/openjpeg/src/bin/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# source code for openjpeg apps:
-add_subdirectory(common)
-# Part 1 & 2:
-add_subdirectory(jp2)
-
-# optionals components:
-if(BUILD_JPWL)
- add_subdirectory(jpwl)
-endif()
-if(BUILD_MJ2)
- add_subdirectory(mj2)
-endif()
-if(BUILD_JPIP)
- add_subdirectory(jpip)
-endif()
-if(BUILD_JP3D)
- add_subdirectory(jp3d)
-endif()
-
-# wx apps:
-add_subdirectory(wx)
diff --git a/openjpeg/src/bin/common/CMakeLists.txt b/openjpeg/src/bin/common/CMakeLists.txt
deleted file mode 100644
index 017c23df..00000000
--- a/openjpeg/src/bin/common/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-#-----------------------------------------------------------------------------
-# opj_apps_config.h generation
-configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_apps_config.h.cmake.in
- ${CMAKE_CURRENT_BINARY_DIR}/opj_apps_config.h
- @ONLY
- )
diff --git a/openjpeg/src/bin/common/color.c b/openjpeg/src/bin/common/color.c
deleted file mode 100644
index a97d49f1..00000000
--- a/openjpeg/src/bin/common/color.c
+++ /dev/null
@@ -1,1127 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#include <assert.h>
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "color.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-
-#ifdef OPJ_USE_LEGACY
-#define OPJ_CLRSPC_GRAY CLRSPC_GRAY
-#define OPJ_CLRSPC_SRGB CLRSPC_SRGB
-#endif
-
-/*--------------------------------------------------------
-Matrix for sYCC, Amendment 1 to IEC 61966-2-1
-
-Y : 0.299 0.587 0.114 :R
-Cb: -0.1687 -0.3312 0.5 :G
-Cr: 0.5 -0.4187 -0.0812 :B
-
-Inverse:
-
-R: 1 -3.68213e-05 1.40199 :Y
-G: 1.00003 -0.344125 -0.714128 :Cb - 2^(prec - 1)
-B: 0.999823 1.77204 -8.04142e-06 :Cr - 2^(prec - 1)
-
------------------------------------------------------------*/
-static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
- int *out_r, int *out_g, int *out_b)
-{
- int r, g, b;
-
- cb -= offset;
- cr -= offset;
- r = y + (int)(1.402 * (float)cr);
- if (r < 0) {
- r = 0;
- } else if (r > upb) {
- r = upb;
- }
- *out_r = r;
-
- g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
- if (g < 0) {
- g = 0;
- } else if (g > upb) {
- g = upb;
- }
- *out_g = g;
-
- b = y + (int)(1.772 * (float)cb);
- if (b < 0) {
- b = 0;
- } else if (b > upb) {
- b = upb;
- }
- *out_b = b;
-}
-
-static void sycc444_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- size_t maxw, maxh, max, i;
- int offset, upb;
-
- upb = (int)img->comps[0].prec;
- offset = 1 << (upb - 1);
- upb = (1 << upb) - 1;
-
- maxw = (size_t)img->comps[0].w;
- maxh = (size_t)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_image_data_alloc(sizeof(int) * max);
- d1 = g = (int*)opj_image_data_alloc(sizeof(int) * max);
- d2 = b = (int*)opj_image_data_alloc(sizeof(int) * max);
-
- if (r == NULL || g == NULL || b == NULL) {
- goto fails;
- }
-
- for (i = 0U; i < max; ++i) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++cb;
- ++cr;
- ++r;
- ++g;
- ++b;
- }
- opj_image_data_free(img->comps[0].data);
- img->comps[0].data = d0;
- opj_image_data_free(img->comps[1].data);
- img->comps[1].data = d1;
- opj_image_data_free(img->comps[2].data);
- img->comps[2].data = d2;
- img->color_space = OPJ_CLRSPC_SRGB;
- return;
-
-fails:
- opj_image_data_free(r);
- opj_image_data_free(g);
- opj_image_data_free(b);
-}/* sycc444_to_rgb() */
-
-static void sycc422_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- size_t maxw, maxh, max, offx, loopmaxw;
- int offset, upb;
- size_t i;
-
- upb = (int)img->comps[0].prec;
- offset = 1 << (upb - 1);
- upb = (1 << upb) - 1;
-
- maxw = (size_t)img->comps[0].w;
- maxh = (size_t)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_image_data_alloc(sizeof(int) * max);
- d1 = g = (int*)opj_image_data_alloc(sizeof(int) * max);
- d2 = b = (int*)opj_image_data_alloc(sizeof(int) * max);
-
- if (r == NULL || g == NULL || b == NULL) {
- goto fails;
- }
-
- /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
- offx = img->x0 & 1U;
- loopmaxw = maxw - offx;
-
- for (i = 0U; i < maxh; ++i) {
- size_t j;
-
- if (offx > 0U) {
- sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- }
-
- for (j = 0U; j < (loopmaxw & ~(size_t)1U); j += 2U) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- ++cb;
- ++cr;
- }
- if (j < loopmaxw) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- ++cb;
- ++cr;
- }
- }
-
- opj_image_data_free(img->comps[0].data);
- img->comps[0].data = d0;
- opj_image_data_free(img->comps[1].data);
- img->comps[1].data = d1;
- opj_image_data_free(img->comps[2].data);
- img->comps[2].data = d2;
-
- img->comps[1].w = img->comps[2].w = img->comps[0].w;
- img->comps[1].h = img->comps[2].h = img->comps[0].h;
- img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
- img->color_space = OPJ_CLRSPC_SRGB;
- return;
-
-fails:
- opj_image_data_free(r);
- opj_image_data_free(g);
- opj_image_data_free(b);
-}/* sycc422_to_rgb() */
-
-static void sycc420_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
- const int *y, *cb, *cr, *ny;
- size_t maxw, maxh, max, offx, loopmaxw, offy, loopmaxh;
- int offset, upb;
- size_t i;
-
- upb = (int)img->comps[0].prec;
- offset = 1 << (upb - 1);
- upb = (1 << upb) - 1;
-
- maxw = (size_t)img->comps[0].w;
- maxh = (size_t)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)opj_image_data_alloc(sizeof(int) * max);
- d1 = g = (int*)opj_image_data_alloc(sizeof(int) * max);
- d2 = b = (int*)opj_image_data_alloc(sizeof(int) * max);
-
- if (r == NULL || g == NULL || b == NULL) {
- goto fails;
- }
-
- /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
- offx = img->x0 & 1U;
- loopmaxw = maxw - offx;
- /* if img->y0 is odd, then first line shall use Cb/Cr = 0 */
- offy = img->y0 & 1U;
- loopmaxh = maxh - offy;
-
- if (offy > 0U) {
- size_t j;
-
- for (j = 0; j < maxw; ++j) {
- sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- }
- }
-
- for (i = 0U; i < (loopmaxh & ~(size_t)1U); i += 2U) {
- size_t j;
-
- ny = y + maxw;
- nr = r + maxw;
- ng = g + maxw;
- nb = b + maxw;
-
- if (offx > 0U) {
- sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny;
- ++nr;
- ++ng;
- ++nb;
- }
-
- for (j = 0; j < (loopmaxw & ~(size_t)1U); j += 2U) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny;
- ++nr;
- ++ng;
- ++nb;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny;
- ++nr;
- ++ng;
- ++nb;
- ++cb;
- ++cr;
- }
- if (j < loopmaxw) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++r;
- ++g;
- ++b;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny;
- ++nr;
- ++ng;
- ++nb;
- ++cb;
- ++cr;
- }
- y += maxw;
- r += maxw;
- g += maxw;
- b += maxw;
- }
- if (i < loopmaxh) {
- size_t j;
-
- for (j = 0U; j < (maxw & ~(size_t)1U); j += 2U) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y;
- ++r;
- ++g;
- ++b;
-
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y;
- ++r;
- ++g;
- ++b;
- ++cb;
- ++cr;
- }
- if (j < maxw) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- }
- }
-
- opj_image_data_free(img->comps[0].data);
- img->comps[0].data = d0;
- opj_image_data_free(img->comps[1].data);
- img->comps[1].data = d1;
- opj_image_data_free(img->comps[2].data);
- img->comps[2].data = d2;
-
- img->comps[1].w = img->comps[2].w = img->comps[0].w;
- img->comps[1].h = img->comps[2].h = img->comps[0].h;
- img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
- img->color_space = OPJ_CLRSPC_SRGB;
- return;
-
-fails:
- opj_image_data_free(r);
- opj_image_data_free(g);
- opj_image_data_free(b);
-}/* sycc420_to_rgb() */
-
-void color_sycc_to_rgb(opj_image_t *img)
-{
- if (img->numcomps < 3) {
- img->color_space = OPJ_CLRSPC_GRAY;
- return;
- }
-
- if ((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 2)
- && (img->comps[2].dy == 2)) { /* horizontal and vertical sub-sample */
- sycc420_to_rgb(img);
- } else if ((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1)) { /* horizontal sub-sample only */
- sycc422_to_rgb(img);
- } else if ((img->comps[0].dx == 1)
- && (img->comps[1].dx == 1)
- && (img->comps[2].dx == 1)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1)) { /* no sub-sample */
- sycc444_to_rgb(img);
- } else {
- fprintf(stderr, "%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
- __LINE__);
- return;
- }
-}/* color_sycc_to_rgb() */
-
-#if defined(OPJ_HAVE_LIBLCMS2) || defined(OPJ_HAVE_LIBLCMS1)
-
-#ifdef OPJ_HAVE_LIBLCMS1
-/* Bob Friesenhahn proposed:*/
-#define cmsSigXYZData icSigXYZData
-#define cmsSigLabData icSigLabData
-#define cmsSigCmykData icSigCmykData
-#define cmsSigYCbCrData icSigYCbCrData
-#define cmsSigLuvData icSigLuvData
-#define cmsSigGrayData icSigGrayData
-#define cmsSigRgbData icSigRgbData
-#define cmsUInt32Number DWORD
-
-#define cmsColorSpaceSignature icColorSpaceSignature
-#define cmsGetHeaderRenderingIntent cmsTakeRenderingIntent
-
-#endif /* OPJ_HAVE_LIBLCMS1 */
-
-/*#define DEBUG_PROFILE*/
-void color_apply_icc_profile(opj_image_t *image)
-{
- cmsHPROFILE in_prof, out_prof;
- cmsHTRANSFORM transform;
- cmsColorSpaceSignature in_space, out_space;
- cmsUInt32Number intent, in_type, out_type;
- int *r, *g, *b;
- size_t nr_samples, i, max, max_w, max_h;
- int prec, ok = 0;
- OPJ_COLOR_SPACE new_space;
-
- in_prof = cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
-#ifdef DEBUG_PROFILE
- FILE *icm = fopen("debug.icm", "wb");
- fwrite(image->icc_profile_buf, 1, image->icc_profile_len, icm);
- fclose(icm);
-#endif
-
- if (in_prof == NULL) {
- return;
- }
-
- in_space = cmsGetPCS(in_prof);
- out_space = cmsGetColorSpace(in_prof);
- intent = cmsGetHeaderRenderingIntent(in_prof);
-
-
- max_w = image->comps[0].w;
- max_h = image->comps[0].h;
- prec = (int)image->comps[0].prec;
-
- if (out_space == cmsSigRgbData) { /* enumCS 16 */
- unsigned int i, nr_comp = image->numcomps;
-
- if (nr_comp > 4) {
- nr_comp = 4;
- }
- for (i = 1; i < nr_comp; ++i) { /* AFL test */
- if (image->comps[0].dx != image->comps[i].dx) {
- break;
- }
-
- if (image->comps[0].dy != image->comps[i].dy) {
- break;
- }
-
- if (image->comps[0].prec != image->comps[i].prec) {
- break;
- }
-
- if (image->comps[0].sgnd != image->comps[i].sgnd) {
- break;
- }
-
- }
- if (i != nr_comp) {
- cmsCloseProfile(in_prof);
- return;
- }
-
- if (prec <= 8) {
- in_type = TYPE_RGB_8;
- out_type = TYPE_RGB_8;
- } else {
- in_type = TYPE_RGB_16;
- out_type = TYPE_RGB_16;
- }
- out_prof = cmsCreate_sRGBProfile();
- new_space = OPJ_CLRSPC_SRGB;
- } else if (out_space == cmsSigGrayData) { /* enumCS 17 */
- in_type = TYPE_GRAY_8;
- out_type = TYPE_RGB_8;
- out_prof = cmsCreate_sRGBProfile();
- new_space = OPJ_CLRSPC_SRGB;
- } else if (out_space == cmsSigYCbCrData) { /* enumCS 18 */
- in_type = TYPE_YCbCr_16;
- out_type = TYPE_RGB_16;
- out_prof = cmsCreate_sRGBProfile();
- new_space = OPJ_CLRSPC_SRGB;
- } else {
-#ifdef DEBUG_PROFILE
- fprintf(stderr, "%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
- "output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
- __FILE__, __LINE__, out_space,
- (out_space >> 24) & 0xff, (out_space >> 16) & 0xff,
- (out_space >> 8) & 0xff, out_space & 0xff);
-#endif
- cmsCloseProfile(in_prof);
-
- return;
- }
- if (out_prof == NULL) {
- cmsCloseProfile(in_prof);
- return;
- }
-
-#ifdef DEBUG_PROFILE
- fprintf(stderr,
- "%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
- "\n\tprofile: in(%p) out(%p)\n", __FILE__, __LINE__, image->numcomps, prec,
- max_w, max_h, (void*)in_prof, (void*)out_prof);
-
- fprintf(stderr, "\trender_intent (%u)\n\t"
- "color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t"
- " type: in(%u) out:(%u)\n",
- intent,
- in_space,
- (in_space >> 24) & 0xff, (in_space >> 16) & 0xff,
- (in_space >> 8) & 0xff, in_space & 0xff,
-
- out_space,
- (out_space >> 24) & 0xff, (out_space >> 16) & 0xff,
- (out_space >> 8) & 0xff, out_space & 0xff,
-
- in_type, out_type
- );
-#else
- (void)prec;
- (void)in_space;
-#endif /* DEBUG_PROFILE */
-
- transform = cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
-
-#ifdef OPJ_HAVE_LIBLCMS2
- /* Possible for: LCMS_VERSION >= 2000 :*/
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
-
- if (transform == NULL) {
-#ifdef DEBUG_PROFILE
- fprintf(stderr, "%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
- "ICC Profile ignored.\n", __FILE__, __LINE__);
-#endif
-
-#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
- return;
- }
-
- if (image->numcomps > 2) { /* RGB, RGBA */
- if (prec <= 8) {
- unsigned char *inbuf, *outbuf, *in, *out;
-
- max = max_w * max_h;
- nr_samples = (size_t)(max * 3U * sizeof(unsigned char));
- in = inbuf = (unsigned char*)opj_image_data_alloc(nr_samples);
- out = outbuf = (unsigned char*)opj_image_data_alloc(nr_samples);
-
- if (inbuf == NULL || outbuf == NULL) {
- goto fails0;
- }
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0U; i < max; ++i) {
- *in++ = (unsigned char) * r++;
- *in++ = (unsigned char) * g++;
- *in++ = (unsigned char) * b++;
- }
-
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0U; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- ok = 1;
-
-fails0:
- opj_image_data_free(inbuf);
- opj_image_data_free(outbuf);
- } else { /* prec > 8 */
- unsigned short *inbuf, *outbuf, *in, *out;
-
- max = max_w * max_h;
- nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
- in = inbuf = (unsigned short*)opj_image_data_alloc(nr_samples);
- out = outbuf = (unsigned short*)opj_image_data_alloc(nr_samples);
-
- if (inbuf == NULL || outbuf == NULL) {
- goto fails1;
- }
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0U ; i < max; ++i) {
- *in++ = (unsigned short) * r++;
- *in++ = (unsigned short) * g++;
- *in++ = (unsigned short) * b++;
- }
-
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- ok = 1;
-
-fails1:
- opj_image_data_free(inbuf);
- opj_image_data_free(outbuf);
- }
- } else { /* image->numcomps <= 2 : GRAY, GRAYA */
- if (prec <= 8) {
- unsigned char *in, *inbuf, *out, *outbuf;
- opj_image_comp_t *new_comps;
-
- max = max_w * max_h;
- nr_samples = (size_t)(max * 3 * sizeof(unsigned char));
- in = inbuf = (unsigned char*)opj_image_data_alloc(nr_samples);
- out = outbuf = (unsigned char*)opj_image_data_alloc(nr_samples);
- g = (int*)opj_image_data_alloc((size_t)max * sizeof(int));
- b = (int*)opj_image_data_alloc((size_t)max * sizeof(int));
-
- if (inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) {
- goto fails2;
- }
-
- new_comps = (opj_image_comp_t*)realloc(image->comps,
- (image->numcomps + 2) * sizeof(opj_image_comp_t));
-
- if (new_comps == NULL) {
- goto fails2;
- }
-
- image->comps = new_comps;
-
- if (image->numcomps == 2) {
- image->comps[3] = image->comps[1];
- }
-
- image->comps[1] = image->comps[0];
- image->comps[2] = image->comps[0];
-
- image->comps[1].data = g;
- image->comps[2].data = b;
-
- image->numcomps += 2;
-
- r = image->comps[0].data;
-
- for (i = 0U; i < max; ++i) {
- *in++ = (unsigned char) * r++;
- }
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0U; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- r = g = b = NULL;
- ok = 1;
-
-fails2:
- opj_image_data_free(inbuf);
- opj_image_data_free(outbuf);
- opj_image_data_free(g);
- opj_image_data_free(b);
- } else { /* prec > 8 */
- unsigned short *in, *inbuf, *out, *outbuf;
- opj_image_comp_t *new_comps;
-
- max = max_w * max_h;
- nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
- in = inbuf = (unsigned short*)opj_image_data_alloc(nr_samples);
- out = outbuf = (unsigned short*)opj_image_data_alloc(nr_samples);
- g = (int*)opj_image_data_alloc((size_t)max * sizeof(int));
- b = (int*)opj_image_data_alloc((size_t)max * sizeof(int));
-
- if (inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) {
- goto fails3;
- }
-
- new_comps = (opj_image_comp_t*)realloc(image->comps,
- (image->numcomps + 2) * sizeof(opj_image_comp_t));
-
- if (new_comps == NULL) {
- goto fails3;
- }
-
- image->comps = new_comps;
-
- if (image->numcomps == 2) {
- image->comps[3] = image->comps[1];
- }
-
- image->comps[1] = image->comps[0];
- image->comps[2] = image->comps[0];
-
- image->comps[1].data = g;
- image->comps[2].data = b;
-
- image->numcomps += 2;
-
- r = image->comps[0].data;
-
- for (i = 0U; i < max; ++i) {
- *in++ = (unsigned short) * r++;
- }
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for (i = 0; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- r = g = b = NULL;
- ok = 1;
-
-fails3:
- opj_image_data_free(inbuf);
- opj_image_data_free(outbuf);
- opj_image_data_free(g);
- opj_image_data_free(b);
- }
- }/* if(image->numcomps > 2) */
-
- cmsDeleteTransform(transform);
-
-#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
-#endif
- if (ok) {
- image->color_space = new_space;
- }
-}/* color_apply_icc_profile() */
-
-static int are_comps_same_dimensions(opj_image_t * image)
-{
- unsigned int i;
- for (i = 1; i < image->numcomps; i++) {
- if (image->comps[0].dx != image->comps[i].dx ||
- image->comps[0].dy != image->comps[i].dy) {
- return OPJ_FALSE;
- }
- }
- return OPJ_TRUE;
-}
-
-void color_cielab_to_rgb(opj_image_t *image)
-{
- int *row;
- int enumcs, numcomps;
- OPJ_COLOR_SPACE new_space;
-
- numcomps = (int)image->numcomps;
-
- if (numcomps != 3) {
- fprintf(stderr, "%s:%d:\n\tnumcomps %d not handled. Quitting.\n",
- __FILE__, __LINE__, numcomps);
- return;
- }
- if (!are_comps_same_dimensions(image)) {
- fprintf(stderr,
- "%s:%d:\n\tcomponents are not all of the same dimension. Quitting.\n",
- __FILE__, __LINE__);
- return;
- }
-
- row = (int*)image->icc_profile_buf;
- enumcs = row[0];
-
- if (enumcs == 14) { /* CIELab */
- int *L, *a, *b, *red, *green, *blue;
- int *src0, *src1, *src2, *dst0, *dst1, *dst2;
- double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
- double minL, maxL, mina, maxa, minb, maxb;
- unsigned int default_type;
- unsigned int i, max;
- cmsHPROFILE in, out;
- cmsHTRANSFORM transform;
- cmsUInt16Number RGB[3];
- cmsCIELab Lab;
-
- in = cmsCreateLab4Profile(NULL);
- if (in == NULL) {
- return;
- }
- out = cmsCreate_sRGBProfile();
- if (out == NULL) {
- cmsCloseProfile(in);
- return;
- }
- transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16,
- INTENT_PERCEPTUAL, 0);
-
-#ifdef OPJ_HAVE_LIBLCMS2
- cmsCloseProfile(in);
- cmsCloseProfile(out);
-#endif
- if (transform == NULL) {
-#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in);
- cmsCloseProfile(out);
-#endif
- return;
- }
- new_space = OPJ_CLRSPC_SRGB;
-
- prec0 = (double)image->comps[0].prec;
- prec1 = (double)image->comps[1].prec;
- prec2 = (double)image->comps[2].prec;
-
- default_type = (unsigned int)row[1];
-
- if (default_type == 0x44454600) { /* DEF : default */
- rl = 100;
- ra = 170;
- rb = 200;
- ol = 0;
- oa = pow(2, prec1 - 1);
- ob = pow(2, prec2 - 2) + pow(2, prec2 - 3);
- } else {
- rl = row[2];
- ra = row[4];
- rb = row[6];
- ol = row[3];
- oa = row[5];
- ob = row[7];
- }
-
- L = src0 = image->comps[0].data;
- a = src1 = image->comps[1].data;
- b = src2 = image->comps[2].data;
-
- max = image->comps[0].w * image->comps[0].h;
-
- red = dst0 = (int*)opj_image_data_alloc(max * sizeof(int));
- green = dst1 = (int*)opj_image_data_alloc(max * sizeof(int));
- blue = dst2 = (int*)opj_image_data_alloc(max * sizeof(int));
-
- if (red == NULL || green == NULL || blue == NULL) {
- goto fails;
- }
-
- minL = -(rl * ol) / (pow(2, prec0) - 1);
- maxL = minL + rl;
-
- mina = -(ra * oa) / (pow(2, prec1) - 1);
- maxa = mina + ra;
-
- minb = -(rb * ob) / (pow(2, prec2) - 1);
- maxb = minb + rb;
-
- for (i = 0; i < max; ++i) {
- Lab.L = minL + (double)(*L) * (maxL - minL) / (pow(2, prec0) - 1);
- ++L;
- Lab.a = mina + (double)(*a) * (maxa - mina) / (pow(2, prec1) - 1);
- ++a;
- Lab.b = minb + (double)(*b) * (maxb - minb) / (pow(2, prec2) - 1);
- ++b;
-
- cmsDoTransform(transform, &Lab, RGB, 1);
-
- *red++ = RGB[0];
- *green++ = RGB[1];
- *blue++ = RGB[2];
- }
- cmsDeleteTransform(transform);
-#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in);
- cmsCloseProfile(out);
-#endif
- opj_image_data_free(src0);
- image->comps[0].data = dst0;
- opj_image_data_free(src1);
- image->comps[1].data = dst1;
- opj_image_data_free(src2);
- image->comps[2].data = dst2;
-
- image->color_space = new_space;
- image->comps[0].prec = 16;
- image->comps[1].prec = 16;
- image->comps[2].prec = 16;
-
- return;
-
-fails:
- cmsDeleteTransform(transform);
-#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in);
- cmsCloseProfile(out);
-#endif
- if (red) {
- opj_image_data_free(red);
- }
- if (green) {
- opj_image_data_free(green);
- }
- if (blue) {
- opj_image_data_free(blue);
- }
- return;
- }
-
- fprintf(stderr, "%s:%d:\n\tenumCS %d not handled. Ignoring.\n", __FILE__,
- __LINE__, enumcs);
-}/* color_cielab_to_rgb() */
-
-#endif /* OPJ_HAVE_LIBLCMS2 || OPJ_HAVE_LIBLCMS1 */
-
-void color_cmyk_to_rgb(opj_image_t *image)
-{
- float C, M, Y, K;
- float sC, sM, sY, sK;
- unsigned int w, h, max, i;
-
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- if (
- (image->numcomps < 4)
- || (image->comps[0].dx != image->comps[1].dx) ||
- (image->comps[0].dx != image->comps[2].dx) ||
- (image->comps[0].dx != image->comps[3].dx)
- || (image->comps[0].dy != image->comps[1].dy) ||
- (image->comps[0].dy != image->comps[2].dy) ||
- (image->comps[0].dy != image->comps[3].dy)
- ) {
- fprintf(stderr, "%s:%d:color_cmyk_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
- __LINE__);
- return;
- }
-
- max = w * h;
-
- sC = 1.0F / (float)((1 << image->comps[0].prec) - 1);
- sM = 1.0F / (float)((1 << image->comps[1].prec) - 1);
- sY = 1.0F / (float)((1 << image->comps[2].prec) - 1);
- sK = 1.0F / (float)((1 << image->comps[3].prec) - 1);
-
- for (i = 0; i < max; ++i) {
- /* CMYK values from 0 to 1 */
- C = (float)(image->comps[0].data[i]) * sC;
- M = (float)(image->comps[1].data[i]) * sM;
- Y = (float)(image->comps[2].data[i]) * sY;
- K = (float)(image->comps[3].data[i]) * sK;
-
- /* Invert all CMYK values */
- C = 1.0F - C;
- M = 1.0F - M;
- Y = 1.0F - Y;
- K = 1.0F - K;
-
- /* CMYK -> RGB : RGB results from 0 to 255 */
- image->comps[0].data[i] = (int)(255.0F * C * K); /* R */
- image->comps[1].data[i] = (int)(255.0F * M * K); /* G */
- image->comps[2].data[i] = (int)(255.0F * Y * K); /* B */
- }
-
- opj_image_data_free(image->comps[3].data);
- image->comps[3].data = NULL;
- image->comps[0].prec = 8;
- image->comps[1].prec = 8;
- image->comps[2].prec = 8;
- image->numcomps -= 1;
- image->color_space = OPJ_CLRSPC_SRGB;
-
- for (i = 3; i < image->numcomps; ++i) {
- memcpy(&(image->comps[i]), &(image->comps[i + 1]), sizeof(image->comps[i]));
- }
-
-}/* color_cmyk_to_rgb() */
-
-/*
- * This code has been adopted from sjpx_openjpeg.c of ghostscript
- */
-void color_esycc_to_rgb(opj_image_t *image)
-{
- int y, cb, cr, sign1, sign2, val;
- unsigned int w, h, max, i;
- int flip_value = (1 << (image->comps[0].prec - 1));
- int max_value = (1 << image->comps[0].prec) - 1;
-
- if (
- (image->numcomps < 3)
- || (image->comps[0].dx != image->comps[1].dx) ||
- (image->comps[0].dx != image->comps[2].dx)
- || (image->comps[0].dy != image->comps[1].dy) ||
- (image->comps[0].dy != image->comps[2].dy)
- ) {
- fprintf(stderr, "%s:%d:color_esycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
- __LINE__);
- return;
- }
-
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- sign1 = (int)image->comps[1].sgnd;
- sign2 = (int)image->comps[2].sgnd;
-
- max = w * h;
-
- for (i = 0; i < max; ++i) {
-
- y = image->comps[0].data[i];
- cb = image->comps[1].data[i];
- cr = image->comps[2].data[i];
-
- if (!sign1) {
- cb -= flip_value;
- }
- if (!sign2) {
- cr -= flip_value;
- }
-
- val = (int)
- ((float)y - (float)0.0000368 * (float)cb
- + (float)1.40199 * (float)cr + (float)0.5);
-
- if (val > max_value) {
- val = max_value;
- } else if (val < 0) {
- val = 0;
- }
- image->comps[0].data[i] = val;
-
- val = (int)
- ((float)1.0003 * (float)y - (float)0.344125 * (float)cb
- - (float)0.7141128 * (float)cr + (float)0.5);
-
- if (val > max_value) {
- val = max_value;
- } else if (val < 0) {
- val = 0;
- }
- image->comps[1].data[i] = val;
-
- val = (int)
- ((float)0.999823 * (float)y + (float)1.77204 * (float)cb
- - (float)0.000008 * (float)cr + (float)0.5);
-
- if (val > max_value) {
- val = max_value;
- } else if (val < 0) {
- val = 0;
- }
- image->comps[2].data[i] = val;
- }
- image->color_space = OPJ_CLRSPC_SRGB;
-
-}/* color_esycc_to_rgb() */
diff --git a/openjpeg/src/bin/common/color.h b/openjpeg/src/bin/common/color.h
deleted file mode 100644
index 24792544..00000000
--- a/openjpeg/src/bin/common/color.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _OPJ_COLOR_H_
-#define _OPJ_COLOR_H_
-
-extern void color_sycc_to_rgb(opj_image_t *img);
-extern void color_apply_icc_profile(opj_image_t *image);
-extern void color_cielab_to_rgb(opj_image_t *image);
-
-extern void color_cmyk_to_rgb(opj_image_t *image);
-extern void color_esycc_to_rgb(opj_image_t *image);
-#endif /* _OPJ_COLOR_H_ */
diff --git a/openjpeg/src/bin/common/format_defs.h b/openjpeg/src/bin/common/format_defs.h
deleted file mode 100644
index 1985b54f..00000000
--- a/openjpeg/src/bin/common/format_defs.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _OPJ_FORMAT_DEFS_H_
-#define _OPJ_FORMAT_DEFS_H_
-
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
-
-#define PXM_DFMT 10
-#define PGX_DFMT 11
-#define BMP_DFMT 12
-#define YUV_DFMT 13
-#define TIF_DFMT 14
-#define RAW_DFMT 15 /* MSB / Big Endian */
-#define TGA_DFMT 16
-#define PNG_DFMT 17
-#define RAWL_DFMT 18 /* LSB / Little Endian */
-
-#endif /* _OPJ_FORMAT_DEFS_H_ */
diff --git a/openjpeg/src/bin/common/opj_apps_config.h.cmake.in b/openjpeg/src/bin/common/opj_apps_config.h.cmake.in
deleted file mode 100644
index 607c0786..00000000
--- a/openjpeg/src/bin/common/opj_apps_config.h.cmake.in
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "opj_config_private.h"
-
-/* create opj_apps_config.h for CMake */
-
-#cmakedefine OPJ_HAVE_LIBPNG @HAVE_LIBPNG@
-#cmakedefine OPJ_HAVE_PNG_H @HAVE_PNG_H@
-#cmakedefine OPJ_HAVE_LIBTIFF @HAVE_LIBTIFF@
-#cmakedefine OPJ_HAVE_TIFF_H @HAVE_TIFF_H@
-
-#cmakedefine OPJ_HAVE_LIBLCMS1
-#cmakedefine OPJ_HAVE_LIBLCMS2
-#cmakedefine OPJ_HAVE_LCMS1_H
-#cmakedefine OPJ_HAVE_LCMS2_H
-
-
diff --git a/openjpeg/src/bin/common/opj_getopt.c b/openjpeg/src/bin/common/opj_getopt.c
deleted file mode 100644
index 11ccfc59..00000000
--- a/openjpeg/src/bin/common/opj_getopt.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * The copyright in this software is being made available under the 3-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 1987, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* last review : october 29th, 2002 */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)opj_getopt.c 8.3 (Berkeley) 4/27/95";
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "opj_getopt.h"
-
-int opj_opterr = 1, /* if error message should be printed */
- opj_optind = 1, /* index into parent argv vector */
- opj_optopt, /* character checked for validity */
- opj_optreset; /* reset getopt */
-char *opj_optarg; /* argument associated with option */
-
-#define BADCH (int)'?'
-#define BADARG (int)':'
-static char EMSG[] = {""};
-
-/* As this class remembers its values from one Java call to the other, reset the values before each use */
-void opj_reset_options_reading(void)
-{
- opj_opterr = 1;
- opj_optind = 1;
-}
-
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int opj_getopt(int nargc, char *const *nargv, const char *ostr)
-{
-# define __progname nargv[0]
- static char *place = EMSG; /* option letter processing */
- const char *oli = NULL; /* option letter list index */
-
- if (opj_optreset || !*place) { /* update scanning pointer */
- opj_optreset = 0;
- if (opj_optind >= nargc || *(place = nargv[opj_optind]) != '-') {
- place = EMSG;
- return (-1);
- }
- if (place[1] && *++place == '-') { /* found "--" */
- ++opj_optind;
- place = EMSG;
- return (-1);
- }
- } /* option letter okay? */
- if ((opj_optopt = (int) * place++) == (int) ':' ||
- !(oli = strchr(ostr, opj_optopt))) {
- /*
- * if the user didn't specify '-' as an option,
- * assume it means -1.
- */
- if (opj_optopt == (int) '-') {
- return (-1);
- }
- if (!*place) {
- ++opj_optind;
- }
- if (opj_opterr && *ostr != ':') {
- fprintf(stderr,
- "%s: illegal option -- %c\n", __progname, opj_optopt);
- return (BADCH);
- }
- }
- if (*++oli != ':') { /* don't need argument */
- opj_optarg = NULL;
- if (!*place) {
- ++opj_optind;
- }
- } else { /* need an argument */
- if (*place) { /* no white space */
- opj_optarg = place;
- } else if (nargc <= ++opj_optind) { /* no arg */
- place = EMSG;
- if (*ostr == ':') {
- return (BADARG);
- }
- if (opj_opterr) {
- fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- __progname, opj_optopt);
- return (BADCH);
- }
- } else { /* white space */
- opj_optarg = nargv[opj_optind];
- }
- place = EMSG;
- ++opj_optind;
- }
- return (opj_optopt); /* dump back option letter */
-}
-
-
-int opj_getopt_long(int argc, char * const argv[], const char *optstring,
- const opj_option_t *longopts, int totlen)
-{
- static int lastidx, lastofs;
- const char *tmp;
- int i, len;
- char param = 1;
-
-again:
- if (opj_optind >= argc || !argv[opj_optind] || *argv[opj_optind] != '-') {
- return -1;
- }
-
- if (argv[opj_optind][0] == '-' && argv[opj_optind][1] == 0) {
- if (opj_optind >= (argc - 1)) { /* no more input parameters */
- param = 0;
- } else { /* more input parameters */
- if (argv[opj_optind + 1][0] == '-') {
- param = 0; /* Missing parameter after '-' */
- } else {
- param = 2;
- }
- }
- }
-
- if (param == 0) {
- ++opj_optind;
- return (BADCH);
- }
-
- if (argv[opj_optind][0] == '-') { /* long option */
- char* arg;
- const opj_option_t* o;
- o = longopts;
- len = sizeof(longopts[0]);
-
- if (param > 1) {
- if (opj_optind + 1 >= argc) {
- return -1;
- }
- arg = argv[opj_optind + 1];
- opj_optind++;
- } else {
- arg = argv[opj_optind] + 1;
- }
-
- if (strlen(arg) > 1) {
- for (i = 0; i < totlen; i = i + len, o++) {
- if (!strcmp(o->name, arg)) { /* match */
- if (o->has_arg == 0) {
- if ((argv[opj_optind + 1]) && (!(argv[opj_optind + 1][0] == '-'))) {
- fprintf(stderr, "%s: option does not require an argument. Ignoring %s\n", arg,
- argv[opj_optind + 1]);
- ++opj_optind;
- }
- } else {
- opj_optarg = argv[opj_optind + 1];
- if (opj_optarg) {
- if (opj_optarg[0] ==
- '-') { /* Has read next input parameter: No arg for current parameter */
- if (opj_opterr) {
- fprintf(stderr, "%s: option requires an argument\n", arg);
- return (BADCH);
- }
- }
- }
- if (!opj_optarg && o->has_arg == 1) { /* no argument there */
- if (opj_opterr) {
- fprintf(stderr, "%s: option requires an argument \n", arg);
- return (BADCH);
- }
- }
- ++opj_optind;
- }
- ++opj_optind;
- if (o->flag) {
- *(o->flag) = o->val;
- } else {
- return o->val;
- }
- return 0;
- }
- }/*(end for)String not found in the list*/
- fprintf(stderr, "Invalid option %s\n", arg);
- ++opj_optind;
- return (BADCH);
- } else { /*Single character input parameter*/
- if (*optstring == ':') {
- return ':';
- }
- if (lastidx != opj_optind) {
- lastidx = opj_optind;
- lastofs = 0;
- }
- opj_optopt = argv[opj_optind][lastofs + 1];
- if ((tmp = strchr(optstring, opj_optopt))) { /*Found input parameter in list*/
- if (*tmp == 0) { /* apparently, we looked for \0, i.e. end of argument */
- ++opj_optind;
- goto again;
- }
- if (tmp[1] == ':') { /* argument expected */
- if (tmp[2] == ':' ||
- argv[opj_optind][lastofs + 2]) { /* "-foo", return "oo" as opj_optarg */
- if (!*(opj_optarg = argv[opj_optind] + lastofs + 2)) {
- opj_optarg = 0;
- }
- goto found;
- }
- opj_optarg = argv[opj_optind + 1];
- if (opj_optarg) {
- if (opj_optarg[0] ==
- '-') { /* Has read next input parameter: No arg for current parameter */
- if (opj_opterr) {
- fprintf(stderr, "%s: option requires an argument\n", arg);
- ++opj_optind;
- return (BADCH);
- }
- }
- }
- if (!opj_optarg) { /* missing argument */
- if (opj_opterr) {
- fprintf(stderr, "%s: option requires an argument\n", arg);
- ++opj_optind;
- return (BADCH);
- }
- }
- ++opj_optind;
- } else {/*Argument not expected*/
- ++lastofs;
- return opj_optopt;
- }
-found:
- ++opj_optind;
- return opj_optopt;
- } else { /* not found */
- fprintf(stderr, "Invalid option %s\n", arg);
- ++opj_optind;
- return (BADCH);
- }/*end of not found*/
-
- }/* end of single character*/
- }/*end '-'*/
- fprintf(stderr, "Invalid option\n");
- ++opj_optind;
- return (BADCH);;
-}/*end function*/
diff --git a/openjpeg/src/bin/common/opj_getopt.h b/openjpeg/src/bin/common/opj_getopt.h
deleted file mode 100644
index 18ac24d4..00000000
--- a/openjpeg/src/bin/common/opj_getopt.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* last review : october 29th, 2002 */
-
-#ifndef _GETOPT_H_
-#define _GETOPT_H_
-
-typedef struct opj_option {
- const char *name;
- int has_arg;
- int *flag;
- int val;
-} opj_option_t;
-
-#define NO_ARG 0
-#define REQ_ARG 1
-#define OPT_ARG 2
-
-extern int opj_opterr;
-extern int opj_optind;
-extern int opj_optopt;
-extern int opj_optreset;
-extern char *opj_optarg;
-
-extern int opj_getopt(int nargc, char *const *nargv, const char *ostr);
-extern int opj_getopt_long(int argc, char * const argv[], const char *optstring,
- const opj_option_t *longopts, int totlen);
-extern void opj_reset_options_reading(void);
-
-#endif /* _GETOPT_H_ */
diff --git a/openjpeg/src/bin/common/opj_string.h b/openjpeg/src/bin/common/opj_string.h
deleted file mode 100644
index f704a8c9..00000000
--- a/openjpeg/src/bin/common/opj_string.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2015, Matthieu Darbois
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef OPJ_STRING_H
-#define OPJ_STRING_H
-
-#include <errno.h>
-#include <string.h>
-
-/* strnlen is not standard, strlen_s is C11... */
-/* keep in mind there still is a buffer read overflow possible */
-static size_t opj_strnlen_s(const char *src, size_t max_len)
-{
- size_t len;
-
- if (src == NULL) {
- return 0U;
- }
- for (len = 0U; (*src != '\0') && (len < max_len); src++, len++);
- return len;
-}
-
-/* should be equivalent to C11 function except for the handler */
-/* keep in mind there still is a buffer read overflow possible */
-static int opj_strcpy_s(char* dst, size_t dst_size, const char* src)
-{
- size_t src_len = 0U;
- if ((dst == NULL) || (dst_size == 0U)) {
- return EINVAL;
- }
- if (src == NULL) {
- dst[0] = '\0';
- return EINVAL;
- }
- src_len = opj_strnlen_s(src, dst_size);
- if (src_len >= dst_size) {
- return ERANGE;
- }
- memcpy(dst, src, src_len);
- dst[src_len] = '\0';
- return 0;
-}
-
-#endif /* OPJ_STRING_H */
diff --git a/openjpeg/src/bin/jp2/CMakeLists.txt b/openjpeg/src/bin/jp2/CMakeLists.txt
deleted file mode 100644
index 4324c36d..00000000
--- a/openjpeg/src/bin/jp2/CMakeLists.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-# Build the demo app, small examples
-
-# First thing define the common source:
-set(common_SRCS
- convert.c
- convert.h
- convertbmp.c
- index.c
- index.h
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.h
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.h
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_string.h
- )
-
-if(OPJ_HAVE_LIBTIFF)
- list(APPEND common_SRCS converttif.c)
-endif()
-if(OPJ_HAVE_LIBPNG)
- list(APPEND common_SRCS convertpng.c)
-endif()
-
-# Headers file are located here:
-include_directories(
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
- ${OPENJPEG_BINARY_DIR}/src/bin/common # opj_apps_config.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openjp2
- ${OPENJPEG_SOURCE_DIR}/src/bin/common
- ${LCMS_INCLUDE_DIRNAME}
- ${Z_INCLUDE_DIRNAME}
- ${PNG_INCLUDE_DIRNAME}
- ${TIFF_INCLUDE_DIRNAME}
- )
-
-if(WIN32)
- if(BUILD_SHARED_LIBS)
- add_definitions(-DOPJ_EXPORTS)
- else()
- add_definitions(-DOPJ_STATIC)
- endif()
-endif()
-
-# Loop over all executables:
-foreach(exe opj_decompress opj_compress opj_dump)
- add_executable(${exe} ${exe}.c ${common_SRCS})
- if(${CMAKE_VERSION} VERSION_GREATER "2.8.11")
- target_compile_options(${exe} PRIVATE ${OPENJP2_COMPILE_OPTIONS})
- endif()
- target_link_libraries(${exe} ${OPENJPEG_LIBRARY_NAME}
- ${PNG_LIBNAME} ${TIFF_LIBNAME} ${LCMS_LIBNAME}
- )
- # To support universal exe:
- if(ZLIB_FOUND AND APPLE)
- target_link_libraries(${exe} z)
- else(ZLIB_FOUND AND APPLE)
- target_link_libraries(${exe} ${Z_LIBNAME})
- endif()
-
- # On unix you need to link to the math library:
- if(UNIX)
- target_link_libraries(${exe} m)
- IF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
- target_link_libraries(${exe} rt)
- endif()
- endif()
- # Install exe
- install(TARGETS ${exe}
- EXPORT OpenJPEGTargets
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
- if(OPJ_USE_DSYMUTIL)
- add_custom_command(TARGET ${exe} POST_BUILD
- COMMAND "dsymutil" "$<TARGET_FILE:${exe}>"
- COMMENT "dsymutil $<TARGET_FILE:${exe}>"
- DEPENDS ${exe})
- endif()
-endforeach()
-
-if(BUILD_DOC)
-# Install man pages
-install(
- FILES ${OPENJPEG_SOURCE_DIR}/doc/man/man1/opj_compress.1
- ${OPENJPEG_SOURCE_DIR}/doc/man/man1/opj_decompress.1
- ${OPENJPEG_SOURCE_DIR}/doc/man/man1/opj_dump.1
- DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man1)
-#
-endif()
diff --git a/openjpeg/src/bin/jp2/convert.c b/openjpeg/src/bin/jp2/convert.c
deleted file mode 100644
index 7040969d..00000000
--- a/openjpeg/src/bin/jp2/convert.c
+++ /dev/null
@@ -1,2595 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-
-#include "openjpeg.h"
-#include "convert.h"
-
-/*
- * Get logarithm of an integer and round downwards.
- *
- * log2(a)
- */
-static int int_floorlog2(int a)
-{
- int l;
- for (l = 0; a > 1; l++) {
- a >>= 1;
- }
- return l;
-}
-
-/* Component precision scaling */
-void clip_component(opj_image_comp_t* component, OPJ_UINT32 precision)
-{
- OPJ_SIZE_T i;
- OPJ_SIZE_T len;
- OPJ_UINT32 umax = (OPJ_UINT32)((OPJ_INT32) - 1);
-
- len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
- if (precision < 32) {
- umax = (1U << precision) - 1U;
- }
-
- if (component->sgnd) {
- OPJ_INT32* l_data = component->data;
- OPJ_INT32 max = (OPJ_INT32)(umax / 2U);
- OPJ_INT32 min = -max - 1;
- for (i = 0; i < len; ++i) {
- if (l_data[i] > max) {
- l_data[i] = max;
- } else if (l_data[i] < min) {
- l_data[i] = min;
- }
- }
- } else {
- OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
- for (i = 0; i < len; ++i) {
- if (l_data[i] > umax) {
- l_data[i] = umax;
- }
- }
- }
- component->prec = precision;
-}
-
-/* Component precision scaling */
-static void scale_component_up(opj_image_comp_t* component,
- OPJ_UINT32 precision)
-{
- OPJ_SIZE_T i, len;
-
- len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
- if (component->sgnd) {
- OPJ_INT64 newMax = (OPJ_INT64)(1U << (precision - 1));
- OPJ_INT64 oldMax = (OPJ_INT64)(1U << (component->prec - 1));
- OPJ_INT32* l_data = component->data;
- for (i = 0; i < len; ++i) {
- l_data[i] = (OPJ_INT32)(((OPJ_INT64)l_data[i] * newMax) / oldMax);
- }
- } else {
- OPJ_UINT64 newMax = (OPJ_UINT64)((1U << precision) - 1U);
- OPJ_UINT64 oldMax = (OPJ_UINT64)((1U << component->prec) - 1U);
- OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
- for (i = 0; i < len; ++i) {
- l_data[i] = (OPJ_UINT32)(((OPJ_UINT64)l_data[i] * newMax) / oldMax);
- }
- }
- component->prec = precision;
- component->bpp = precision;
-}
-void scale_component(opj_image_comp_t* component, OPJ_UINT32 precision)
-{
- int shift;
- OPJ_SIZE_T i, len;
-
- if (component->prec == precision) {
- return;
- }
- if (component->prec < precision) {
- scale_component_up(component, precision);
- return;
- }
- shift = (int)(component->prec - precision);
- len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
- if (component->sgnd) {
- OPJ_INT32* l_data = component->data;
- for (i = 0; i < len; ++i) {
- l_data[i] >>= shift;
- }
- } else {
- OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
- for (i = 0; i < len; ++i) {
- l_data[i] >>= shift;
- }
- }
- component->bpp = precision;
- component->prec = precision;
-}
-
-
-/* planar / interleaved conversions */
-/* used by PNG/TIFF */
-static void convert_32s_C1P1(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
- OPJ_SIZE_T length)
-{
- memcpy(pDst[0], pSrc, length * sizeof(OPJ_INT32));
-}
-static void convert_32s_C2P2(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- OPJ_INT32* pDst0 = pDst[0];
- OPJ_INT32* pDst1 = pDst[1];
-
- for (i = 0; i < length; i++) {
- pDst0[i] = pSrc[2 * i + 0];
- pDst1[i] = pSrc[2 * i + 1];
- }
-}
-static void convert_32s_C3P3(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- OPJ_INT32* pDst0 = pDst[0];
- OPJ_INT32* pDst1 = pDst[1];
- OPJ_INT32* pDst2 = pDst[2];
-
- for (i = 0; i < length; i++) {
- pDst0[i] = pSrc[3 * i + 0];
- pDst1[i] = pSrc[3 * i + 1];
- pDst2[i] = pSrc[3 * i + 2];
- }
-}
-static void convert_32s_C4P4(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- OPJ_INT32* pDst0 = pDst[0];
- OPJ_INT32* pDst1 = pDst[1];
- OPJ_INT32* pDst2 = pDst[2];
- OPJ_INT32* pDst3 = pDst[3];
-
- for (i = 0; i < length; i++) {
- pDst0[i] = pSrc[4 * i + 0];
- pDst1[i] = pSrc[4 * i + 1];
- pDst2[i] = pSrc[4 * i + 2];
- pDst3[i] = pSrc[4 * i + 3];
- }
-}
-const convert_32s_CXPX convert_32s_CXPX_LUT[5] = {
- NULL,
- convert_32s_C1P1,
- convert_32s_C2P2,
- convert_32s_C3P3,
- convert_32s_C4P4
-};
-
-static void convert_32s_P1C1(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length, OPJ_INT32 adjust)
-{
- OPJ_SIZE_T i;
- const OPJ_INT32* pSrc0 = pSrc[0];
-
- for (i = 0; i < length; i++) {
- pDst[i] = pSrc0[i] + adjust;
- }
-}
-static void convert_32s_P2C2(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length, OPJ_INT32 adjust)
-{
- OPJ_SIZE_T i;
- const OPJ_INT32* pSrc0 = pSrc[0];
- const OPJ_INT32* pSrc1 = pSrc[1];
-
- for (i = 0; i < length; i++) {
- pDst[2 * i + 0] = pSrc0[i] + adjust;
- pDst[2 * i + 1] = pSrc1[i] + adjust;
- }
-}
-static void convert_32s_P3C3(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length, OPJ_INT32 adjust)
-{
- OPJ_SIZE_T i;
- const OPJ_INT32* pSrc0 = pSrc[0];
- const OPJ_INT32* pSrc1 = pSrc[1];
- const OPJ_INT32* pSrc2 = pSrc[2];
-
- for (i = 0; i < length; i++) {
- pDst[3 * i + 0] = pSrc0[i] + adjust;
- pDst[3 * i + 1] = pSrc1[i] + adjust;
- pDst[3 * i + 2] = pSrc2[i] + adjust;
- }
-}
-static void convert_32s_P4C4(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length, OPJ_INT32 adjust)
-{
- OPJ_SIZE_T i;
- const OPJ_INT32* pSrc0 = pSrc[0];
- const OPJ_INT32* pSrc1 = pSrc[1];
- const OPJ_INT32* pSrc2 = pSrc[2];
- const OPJ_INT32* pSrc3 = pSrc[3];
-
- for (i = 0; i < length; i++) {
- pDst[4 * i + 0] = pSrc0[i] + adjust;
- pDst[4 * i + 1] = pSrc1[i] + adjust;
- pDst[4 * i + 2] = pSrc2[i] + adjust;
- pDst[4 * i + 3] = pSrc3[i] + adjust;
- }
-}
-const convert_32s_PXCX convert_32s_PXCX_LUT[5] = {
- NULL,
- convert_32s_P1C1,
- convert_32s_P2C2,
- convert_32s_P3C3,
- convert_32s_P4C4
-};
-
-/* bit depth conversions */
-/* used by PNG/TIFF up to 8bpp */
-static void convert_1u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)(val >> 7);
- pDst[i + 1] = (OPJ_INT32)((val >> 6) & 0x1U);
- pDst[i + 2] = (OPJ_INT32)((val >> 5) & 0x1U);
- pDst[i + 3] = (OPJ_INT32)((val >> 4) & 0x1U);
- pDst[i + 4] = (OPJ_INT32)((val >> 3) & 0x1U);
- pDst[i + 5] = (OPJ_INT32)((val >> 2) & 0x1U);
- pDst[i + 6] = (OPJ_INT32)((val >> 1) & 0x1U);
- pDst[i + 7] = (OPJ_INT32)(val & 0x1U);
- }
- if (length & 7U) {
- OPJ_UINT32 val = *pSrc++;
- length = length & 7U;
- pDst[i + 0] = (OPJ_INT32)(val >> 7);
-
- if (length > 1U) {
- pDst[i + 1] = (OPJ_INT32)((val >> 6) & 0x1U);
- if (length > 2U) {
- pDst[i + 2] = (OPJ_INT32)((val >> 5) & 0x1U);
- if (length > 3U) {
- pDst[i + 3] = (OPJ_INT32)((val >> 4) & 0x1U);
- if (length > 4U) {
- pDst[i + 4] = (OPJ_INT32)((val >> 3) & 0x1U);
- if (length > 5U) {
- pDst[i + 5] = (OPJ_INT32)((val >> 2) & 0x1U);
- if (length > 6U) {
- pDst[i + 6] = (OPJ_INT32)((val >> 1) & 0x1U);
- }
- }
- }
- }
- }
- }
- }
-}
-static void convert_2u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 val = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)(val >> 6);
- pDst[i + 1] = (OPJ_INT32)((val >> 4) & 0x3U);
- pDst[i + 2] = (OPJ_INT32)((val >> 2) & 0x3U);
- pDst[i + 3] = (OPJ_INT32)(val & 0x3U);
- }
- if (length & 3U) {
- OPJ_UINT32 val = *pSrc++;
- length = length & 3U;
- pDst[i + 0] = (OPJ_INT32)(val >> 6);
-
- if (length > 1U) {
- pDst[i + 1] = (OPJ_INT32)((val >> 4) & 0x3U);
- if (length > 2U) {
- pDst[i + 2] = (OPJ_INT32)((val >> 2) & 0x3U);
-
- }
- }
- }
-}
-static void convert_4u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
- OPJ_UINT32 val = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)(val >> 4);
- pDst[i + 1] = (OPJ_INT32)(val & 0xFU);
- }
- if (length & 1U) {
- OPJ_UINT8 val = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)(val >> 4);
- }
-}
-static void convert_6u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)(val0 >> 2);
- pDst[i + 1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
- pDst[i + 2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
- pDst[i + 3] = (OPJ_INT32)(val2 & 0x3FU);
-
- }
- if (length & 3U) {
- OPJ_UINT32 val0 = *pSrc++;
- length = length & 3U;
- pDst[i + 0] = (OPJ_INT32)(val0 >> 2);
-
- if (length > 1U) {
- OPJ_UINT32 val1 = *pSrc++;
- pDst[i + 1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
- if (length > 2U) {
- OPJ_UINT32 val2 = *pSrc++;
- pDst[i + 2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
- }
- }
- }
-}
-static void convert_8u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; i++) {
- pDst[i] = pSrc[i];
- }
-}
-const convert_XXx32s_C1R convert_XXu32s_C1R_LUT[9] = {
- NULL,
- convert_1u32s_C1R,
- convert_2u32s_C1R,
- NULL,
- convert_4u32s_C1R,
- NULL,
- convert_6u32s_C1R,
- NULL,
- convert_8u32s_C1R
-};
-
-
-static void convert_32s1u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) |
- (src4 << 3) | (src5 << 2) | (src6 << 1) | src7);
- }
-
- if (length & 7U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = 0U;
- OPJ_UINT32 src2 = 0U;
- OPJ_UINT32 src3 = 0U;
- OPJ_UINT32 src4 = 0U;
- OPJ_UINT32 src5 = 0U;
- OPJ_UINT32 src6 = 0U;
- length = length & 7U;
-
- if (length > 1U) {
- src1 = (OPJ_UINT32)pSrc[i + 1];
- if (length > 2U) {
- src2 = (OPJ_UINT32)pSrc[i + 2];
- if (length > 3U) {
- src3 = (OPJ_UINT32)pSrc[i + 3];
- if (length > 4U) {
- src4 = (OPJ_UINT32)pSrc[i + 4];
- if (length > 5U) {
- src5 = (OPJ_UINT32)pSrc[i + 5];
- if (length > 6U) {
- src6 = (OPJ_UINT32)pSrc[i + 6];
- }
- }
- }
- }
- }
- }
- *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) |
- (src4 << 3) | (src5 << 2) | (src6 << 1));
- }
-}
-
-static void convert_32s2u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
-
- *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2) | src3);
- }
-
- if (length & 3U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = 0U;
- OPJ_UINT32 src2 = 0U;
- length = length & 3U;
-
- if (length > 1U) {
- src1 = (OPJ_UINT32)pSrc[i + 1];
- if (length > 2U) {
- src2 = (OPJ_UINT32)pSrc[i + 2];
- }
- }
- *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2));
- }
-}
-
-static void convert_32s4u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
-
- *pDst++ = (OPJ_BYTE)((src0 << 4) | src1);
- }
-
- if (length & 1U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- *pDst++ = (OPJ_BYTE)((src0 << 4));
- }
-}
-
-static void convert_32s6u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
-
- *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | src3);
- }
-
- if (length & 3U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = 0U;
- OPJ_UINT32 src2 = 0U;
- length = length & 3U;
-
- if (length > 1U) {
- src1 = (OPJ_UINT32)pSrc[i + 1];
- if (length > 2U) {
- src2 = (OPJ_UINT32)pSrc[i + 2];
- }
- }
- *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
- if (length > 1U) {
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
- if (length > 2U) {
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
- }
- }
- }
-}
-static void convert_32s8u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; ++i) {
- pDst[i] = (OPJ_BYTE)pSrc[i];
- }
-}
-const convert_32sXXx_C1R convert_32sXXu_C1R_LUT[9] = {
- NULL,
- convert_32s1u_C1R,
- convert_32s2u_C1R,
- NULL,
- convert_32s4u_C1R,
- NULL,
- convert_32s6u_C1R,
- NULL,
- convert_32s8u_C1R
-};
-
-/* -->> -->> -->> -->>
-
- TGA IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-#ifdef INFORMATION_ONLY
-/* TGA header definition. */
-struct tga_header {
- unsigned char id_length; /* Image id field length */
- unsigned char colour_map_type; /* Colour map type */
- unsigned char image_type; /* Image type */
- /*
- ** Colour map specification
- */
- unsigned short colour_map_index; /* First entry index */
- unsigned short colour_map_length; /* Colour map length */
- unsigned char colour_map_entry_size; /* Colour map entry size */
- /*
- ** Image specification
- */
- unsigned short x_origin; /* x origin of image */
- unsigned short y_origin; /* u origin of image */
- unsigned short image_width; /* Image width */
- unsigned short image_height; /* Image height */
- unsigned char pixel_depth; /* Pixel depth */
- unsigned char image_desc; /* Image descriptor */
-};
-#endif /* INFORMATION_ONLY */
-
-/* Returns a ushort from a little-endian serialized value */
-static unsigned short get_tga_ushort(const unsigned char *data)
-{
- return (unsigned short)(data[0] | (data[1] << 8));
-}
-
-#define TGA_HEADER_SIZE 18
-
-static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
- unsigned int *width, unsigned int *height, int *flip_image)
-{
- int palette_size;
- unsigned char tga[TGA_HEADER_SIZE];
- unsigned char id_len, /*cmap_type,*/ image_type;
- unsigned char pixel_depth, image_desc;
- unsigned short /*cmap_index,*/ cmap_len, cmap_entry_size;
- unsigned short /*x_origin, y_origin,*/ image_w, image_h;
-
- if (!bits_per_pixel || !width || !height || !flip_image) {
- return 0;
- }
-
- if (fread(tga, TGA_HEADER_SIZE, 1, fp) != 1) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0 ;
- }
- id_len = tga[0];
- /*cmap_type = tga[1];*/
- image_type = tga[2];
- /*cmap_index = get_tga_ushort(&tga[3]);*/
- cmap_len = get_tga_ushort(&tga[5]);
- cmap_entry_size = tga[7];
-
-
-#if 0
- x_origin = get_tga_ushort(&tga[8]);
- y_origin = get_tga_ushort(&tga[10]);
-#endif
- image_w = get_tga_ushort(&tga[12]);
- image_h = get_tga_ushort(&tga[14]);
- pixel_depth = tga[16];
- image_desc = tga[17];
-
- *bits_per_pixel = (unsigned int)pixel_depth;
- *width = (unsigned int)image_w;
- *height = (unsigned int)image_h;
-
- /* Ignore tga identifier, if present ... */
- if (id_len) {
- unsigned char *id = (unsigned char *) malloc(id_len);
- if (id == 0) {
- fprintf(stderr, "tga_readheader: memory out\n");
- return 0;
- }
- if (!fread(id, id_len, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- free(id);
- return 0 ;
- }
- free(id);
- }
-
- /* Test for compressed formats ... not yet supported ...
- // Note :- 9 - RLE encoded palettized.
- // 10 - RLE encoded RGB. */
- if (image_type > 8) {
- fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
- return 0 ;
- }
-
- *flip_image = !(image_desc & 32);
-
- /* Palettized formats are not yet supported, skip over the palette, if present ... */
- palette_size = cmap_len * (cmap_entry_size / 8);
-
- if (palette_size > 0) {
- fprintf(stderr, "File contains a palette - not yet supported.");
- fseek(fp, palette_size, SEEK_CUR);
- }
- return 1;
-}
-
-#ifdef OPJ_BIG_ENDIAN
-
-static INLINE OPJ_UINT16 swap16(OPJ_UINT16 x)
-{
- return (OPJ_UINT16)(((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
-}
-
-#endif
-
-static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
- OPJ_BOOL flip_image)
-{
- OPJ_UINT16 image_w, image_h, us0;
- unsigned char uc0, image_type;
- unsigned char pixel_depth, image_desc;
-
- if (!bits_per_pixel || !width || !height) {
- return 0;
- }
-
- pixel_depth = 0;
-
- if (bits_per_pixel < 256) {
- pixel_depth = (unsigned char)bits_per_pixel;
- } else {
- fprintf(stderr, "ERROR: Wrong bits per pixel inside tga_header");
- return 0;
- }
- uc0 = 0;
-
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* id_length */
- }
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* colour_map_type */
- }
-
- image_type = 2; /* Uncompressed. */
- if (fwrite(&image_type, 1, 1, fp) != 1) {
- goto fails;
- }
-
- us0 = 0;
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* colour_map_index */
- }
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* colour_map_length */
- }
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* colour_map_entry_size */
- }
-
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* x_origin */
- }
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* y_origin */
- }
-
- image_w = (unsigned short)width;
- image_h = (unsigned short) height;
-
-#ifndef OPJ_BIG_ENDIAN
- if (fwrite(&image_w, 2, 1, fp) != 1) {
- goto fails;
- }
- if (fwrite(&image_h, 2, 1, fp) != 1) {
- goto fails;
- }
-#else
- image_w = swap16(image_w);
- image_h = swap16(image_h);
- if (fwrite(&image_w, 2, 1, fp) != 1) {
- goto fails;
- }
- if (fwrite(&image_h, 2, 1, fp) != 1) {
- goto fails;
- }
-#endif
-
- if (fwrite(&pixel_depth, 1, 1, fp) != 1) {
- goto fails;
- }
-
- image_desc = 8; /* 8 bits per component. */
-
- if (flip_image) {
- image_desc |= 32;
- }
- if (fwrite(&image_desc, 1, 1, fp) != 1) {
- goto fails;
- }
-
- return 1;
-
-fails:
- fputs("\nwrite_tgaheader: write ERROR\n", stderr);
- return 0;
-}
-
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters)
-{
- FILE *f;
- opj_image_t *image;
- unsigned int image_width, image_height, pixel_bit_depth;
- unsigned int x, y;
- int flip_image = 0;
- opj_image_cmptparm_t cmptparm[4]; /* maximum 4 components */
- int numcomps;
- OPJ_COLOR_SPACE color_space;
- OPJ_BOOL mono ;
- OPJ_BOOL save_alpha;
- int subsampling_dx, subsampling_dy;
- int i;
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- return 0;
- }
-
- if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height,
- &flip_image)) {
- fclose(f);
- return NULL;
- }
-
- /* We currently only support 24 & 32 bit tga's ... */
- if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) {
- fclose(f);
- return NULL;
- }
-
- /* initialize image components */
- memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
- mono = (pixel_bit_depth == 8) ||
- (pixel_bit_depth == 16); /* Mono with & without alpha. */
- save_alpha = (pixel_bit_depth == 16) ||
- (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
-
- if (mono) {
- color_space = OPJ_CLRSPC_GRAY;
- numcomps = save_alpha ? 2 : 1;
- } else {
- numcomps = save_alpha ? 4 : 3;
- color_space = OPJ_CLRSPC_SRGB;
- }
-
- /* If the declared file size is > 10 MB, check that the file is big */
- /* enough to avoid excessive memory allocations */
- if (image_height != 0 &&
- image_width > 10000000U / image_height / (OPJ_UINT32)numcomps) {
- char ch;
- OPJ_UINT64 expected_file_size =
- (OPJ_UINT64)image_width * image_height * (OPJ_UINT32)numcomps;
- long curpos = ftell(f);
- if (expected_file_size > (OPJ_UINT64)INT_MAX) {
- expected_file_size = (OPJ_UINT64)INT_MAX;
- }
- fseek(f, (long)expected_file_size - 1, SEEK_SET);
- if (fread(&ch, 1, 1, f) != 1) {
- fclose(f);
- return NULL;
- }
- fseek(f, curpos, SEEK_SET);
- }
-
- subsampling_dx = parameters->subsampling_dx;
- subsampling_dy = parameters->subsampling_dy;
-
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = (OPJ_UINT32)subsampling_dx;
- cmptparm[i].dy = (OPJ_UINT32)subsampling_dy;
- cmptparm[i].w = image_width;
- cmptparm[i].h = image_height;
- }
-
- /* create the image */
- image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- fclose(f);
- return NULL;
- }
-
-
- /* set image offset and reference grid */
- image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
- image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
- image->x1 = !image->x0 ? (OPJ_UINT32)(image_width - 1) *
- (OPJ_UINT32)subsampling_dx + 1 : image->x0 + (OPJ_UINT32)(image_width - 1) *
- (OPJ_UINT32)subsampling_dx + 1;
- image->y1 = !image->y0 ? (OPJ_UINT32)(image_height - 1) *
- (OPJ_UINT32)subsampling_dy + 1 : image->y0 + (OPJ_UINT32)(image_height - 1) *
- (OPJ_UINT32)subsampling_dy + 1;
-
- /* set image data */
- for (y = 0; y < image_height; y++) {
- int index;
-
- if (flip_image) {
- index = (int)((image_height - y - 1) * image_width);
- } else {
- index = (int)(y * image_width);
- }
-
- if (numcomps == 3) {
- for (x = 0; x < image_width; x++) {
- unsigned char r, g, b;
-
- if (!fread(&b, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&g, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&r, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
-
- image->comps[0].data[index] = r;
- image->comps[1].data[index] = g;
- image->comps[2].data[index] = b;
- index++;
- }
- } else if (numcomps == 4) {
- for (x = 0; x < image_width; x++) {
- unsigned char r, g, b, a;
- if (!fread(&b, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&g, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&r, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&a, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
-
- image->comps[0].data[index] = r;
- image->comps[1].data[index] = g;
- image->comps[2].data[index] = b;
- image->comps[3].data[index] = a;
- index++;
- }
- } else {
- fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
- }
- }
- fclose(f);
- return image;
-}
-
-int imagetotga(opj_image_t * image, const char *outfile)
-{
- int width, height, bpp, x, y;
- OPJ_BOOL write_alpha;
- unsigned int i;
- int adjustR, adjustG = 0, adjustB = 0, fails;
- unsigned int alpha_channel;
- float r, g, b, a;
- unsigned char value;
- float scale;
- FILE *fdest;
- size_t res;
- fails = 1;
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return 1;
- }
-
- for (i = 0; i < image->numcomps - 1; i++) {
- if ((image->comps[0].dx != image->comps[i + 1].dx)
- || (image->comps[0].dy != image->comps[i + 1].dy)
- || (image->comps[0].prec != image->comps[i + 1].prec)
- || (image->comps[0].sgnd != image->comps[i + 1].sgnd)) {
- fclose(fdest);
- fprintf(stderr,
- "Unable to create a tga file with such J2K image charateristics.\n");
- return 1;
- }
- }
-
- width = (int)image->comps[0].w;
- height = (int)image->comps[0].h;
-
- /* Mono with alpha, or RGB with alpha. */
- write_alpha = (image->numcomps == 2) || (image->numcomps == 4);
-
- /* Write TGA header */
- bpp = write_alpha ? 32 : 24;
-
- if (!tga_writeheader(fdest, bpp, width, height, OPJ_TRUE)) {
- goto fin;
- }
-
- alpha_channel = image->numcomps - 1;
-
- scale = 255.0f / (float)((1 << image->comps[0].prec) - 1);
-
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- if (image->numcomps >= 3) {
- adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
- }
-
- for (y = 0; y < height; y++) {
- unsigned int index = (unsigned int)(y * width);
-
- for (x = 0; x < width; x++, index++) {
- r = (float)(image->comps[0].data[index] + adjustR);
-
- if (image->numcomps > 2) {
- g = (float)(image->comps[1].data[index] + adjustG);
- b = (float)(image->comps[2].data[index] + adjustB);
- } else {
- /* Greyscale ... */
- g = r;
- b = r;
- }
-
- /* TGA format writes BGR ... */
- if (b > 255.) {
- b = 255.;
- } else if (b < 0.) {
- b = 0.;
- }
- value = (unsigned char)(b * scale);
- res = fwrite(&value, 1, 1, fdest);
-
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
- if (g > 255.) {
- g = 255.;
- } else if (g < 0.) {
- g = 0.;
- }
- value = (unsigned char)(g * scale);
- res = fwrite(&value, 1, 1, fdest);
-
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
- if (r > 255.) {
- r = 255.;
- } else if (r < 0.) {
- r = 0.;
- }
- value = (unsigned char)(r * scale);
- res = fwrite(&value, 1, 1, fdest);
-
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
-
- if (write_alpha) {
- a = (float)(image->comps[alpha_channel].data[index]);
- if (a > 255.) {
- a = 255.;
- } else if (a < 0.) {
- a = 0.;
- }
- value = (unsigned char)(a * scale);
- res = fwrite(&value, 1, 1, fdest);
-
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
- }
- }
- }
- fails = 0;
-fin:
- fclose(fdest);
-
- return fails;
-}
-
-/* -->> -->> -->> -->>
-
-PGX IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-
-static unsigned char readuchar(FILE * f)
-{
- unsigned char c1;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- return c1;
-}
-
-static unsigned short readushort(FILE * f, int bigendian)
-{
- unsigned char c1, c2;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c2, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (bigendian) {
- return (unsigned short)((c1 << 8) + c2);
- } else {
- return (unsigned short)((c2 << 8) + c1);
- }
-}
-
-static unsigned int readuint(FILE * f, int bigendian)
-{
- unsigned char c1, c2, c3, c4;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c2, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c3, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c4, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (bigendian) {
- return (unsigned int)(c1 << 24) + (unsigned int)(c2 << 16) + (unsigned int)(
- c3 << 8) + c4;
- } else {
- return (unsigned int)(c4 << 24) + (unsigned int)(c3 << 16) + (unsigned int)(
- c2 << 8) + c1;
- }
-}
-
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters)
-{
- FILE *f = NULL;
- int w, h, prec;
- int i, numcomps, max;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm; /* maximum of 1 component */
- opj_image_t * image = NULL;
- int adjustS, ushift, dshift, force8;
- OPJ_UINT64 expected_file_size;
-
- char endian1, endian2, sign;
- char signtmp[32];
-
- char temp[32];
- int bigendian;
- opj_image_comp_t *comp = NULL;
-
- numcomps = 1;
- color_space = OPJ_CLRSPC_GRAY;
-
- memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t));
-
- max = 0;
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !\n", filename);
- return NULL;
- }
-
- fseek(f, 0, SEEK_SET);
- if (fscanf(f, "PG%31[ \t]%c%c%31[ \t+-]%d%31[ \t]%d%31[ \t]%d", temp, &endian1,
- &endian2, signtmp, &prec, temp, &w, temp, &h) != 9) {
- fclose(f);
- fprintf(stderr,
- "ERROR: Failed to read the right number of element from the fscanf() function!\n");
- return NULL;
- }
-
- i = 0;
- sign = '+';
- while (signtmp[i] != '\0') {
- if (signtmp[i] == '-') {
- sign = '-';
- }
- i++;
- }
-
- fgetc(f);
- if (endian1 == 'M' && endian2 == 'L') {
- bigendian = 1;
- } else if (endian2 == 'M' && endian1 == 'L') {
- bigendian = 0;
- } else {
- fclose(f);
- fprintf(stderr, "Bad pgx header, please check input file\n");
- return NULL;
- }
-
- if (w < 1 || h < 1 || prec < 1 || prec > 31) {
- fclose(f);
- fprintf(stderr, "Bad pgx header, please check input file\n");
- return NULL;
- }
-
- expected_file_size =
- (OPJ_UINT64)w * (OPJ_UINT64)h * (prec > 16 ? 4 : prec > 8 ? 2 : 1);
- if (expected_file_size > 10000000U) {
- char ch;
- long curpos = ftell(f);
- if (expected_file_size > (OPJ_UINT64)INT_MAX) {
- expected_file_size = (OPJ_UINT64)INT_MAX;
- }
- fseek(f, (long)expected_file_size - 1, SEEK_SET);
- if (fread(&ch, 1, 1, f) != 1) {
- fprintf(stderr, "File too short\n");
- fclose(f);
- return NULL;
- }
- fseek(f, curpos, SEEK_SET);
- }
-
- /* initialize image component */
-
- cmptparm.x0 = (OPJ_UINT32)parameters->image_offset_x0;
- cmptparm.y0 = (OPJ_UINT32)parameters->image_offset_y0;
- cmptparm.w = !cmptparm.x0 ? (OPJ_UINT32)((w - 1) * parameters->subsampling_dx +
- 1) : cmptparm.x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)parameters->subsampling_dx
- + 1;
- cmptparm.h = !cmptparm.y0 ? (OPJ_UINT32)((h - 1) * parameters->subsampling_dy +
- 1) : cmptparm.y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)parameters->subsampling_dy
- + 1;
-
- if (sign == '-') {
- cmptparm.sgnd = 1;
- } else {
- cmptparm.sgnd = 0;
- }
- if (prec < 8) {
- force8 = 1;
- ushift = 8 - prec;
- dshift = prec - ushift;
- if (cmptparm.sgnd) {
- adjustS = (1 << (prec - 1));
- } else {
- adjustS = 0;
- }
- cmptparm.sgnd = 0;
- prec = 8;
- } else {
- ushift = dshift = force8 = adjustS = 0;
- }
-
- cmptparm.prec = (OPJ_UINT32)prec;
- cmptparm.bpp = (OPJ_UINT32)prec;
- cmptparm.dx = (OPJ_UINT32)parameters->subsampling_dx;
- cmptparm.dy = (OPJ_UINT32)parameters->subsampling_dy;
-
- /* create the image */
- image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm, color_space);
- if (!image) {
- fclose(f);
- return NULL;
- }
- /* set image offset and reference grid */
- image->x0 = cmptparm.x0;
- image->y0 = cmptparm.x0;
- image->x1 = cmptparm.w;
- image->y1 = cmptparm.h;
-
- /* set image data */
-
- comp = &image->comps[0];
-
- for (i = 0; i < w * h; i++) {
- int v;
- if (force8) {
- v = readuchar(f) + adjustS;
- v = (v << ushift) + (v >> dshift);
- comp->data[i] = (unsigned char)v;
-
- if (v > max) {
- max = v;
- }
-
- continue;
- }
- if (comp->prec == 8) {
- if (!comp->sgnd) {
- v = readuchar(f);
- } else {
- v = (char) readuchar(f);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- v = readushort(f, bigendian);
- } else {
- v = (short) readushort(f, bigendian);
- }
- } else {
- if (!comp->sgnd) {
- v = (int)readuint(f, bigendian);
- } else {
- v = (int) readuint(f, bigendian);
- }
- }
- if (v > max) {
- max = v;
- }
- comp->data[i] = v;
- }
- fclose(f);
- comp->bpp = (OPJ_UINT32)int_floorlog2(max) + 1;
-
- return image;
-}
-
-#define CLAMP(x,a,b) ((x) < (a) ? (a) : ((x) > (b) ? (b) : (x)))
-
-static INLINE int clamp(const int value, const int prec, const int sgnd)
-{
- if (sgnd) {
- if (prec <= 8) {
- return CLAMP(value, -128, 127);
- } else if (prec <= 16) {
- return CLAMP(value, -32768, 32767);
- } else {
- return CLAMP(value, -2147483647 - 1, 2147483647);
- }
- } else {
- if (prec <= 8) {
- return CLAMP(value, 0, 255);
- } else if (prec <= 16) {
- return CLAMP(value, 0, 65535);
- } else {
- return value; /*CLAMP(value,0,4294967295);*/
- }
- }
-}
-
-int imagetopgx(opj_image_t * image, const char *outfile)
-{
- int w, h;
- int i, j, fails = 1;
- unsigned int compno;
- FILE *fdest = NULL;
-
- for (compno = 0; compno < image->numcomps; compno++) {
- opj_image_comp_t *comp = &image->comps[compno];
- char bname[256]; /* buffer for name */
- char *name = bname; /* pointer */
- int nbytes = 0;
- size_t res;
- const size_t olen = strlen(outfile);
- const size_t dotpos = olen - 4;
- const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
-
- if (outfile[dotpos] != '.') {
- /* `pgx` was recognized but there is no dot at expected position */
- fprintf(stderr, "ERROR -> Impossible happen.");
- goto fin;
- }
- if (total > 256) {
- name = (char*)malloc(total + 1);
- if (name == NULL) {
- fprintf(stderr, "imagetopgx: memory out\n");
- goto fin;
- }
- }
- strncpy(name, outfile, dotpos);
- sprintf(name + dotpos, "_%u.pgx", compno);
- fdest = fopen(name, "wb");
- /* don't need name anymore */
-
- if (!fdest) {
-
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
- if (total > 256) {
- free(name);
- }
- goto fin;
- }
-
- w = (int)image->comps[compno].w;
- h = (int)image->comps[compno].h;
-
- fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec,
- w, h);
-
- if (comp->prec <= 8) {
- nbytes = 1;
- } else if (comp->prec <= 16) {
- nbytes = 2;
- } else {
- nbytes = 4;
- }
-
- if (nbytes == 1) {
- unsigned char* line_buffer = malloc((size_t)w);
- if (line_buffer == NULL) {
- fprintf(stderr, "Out of memory");
- goto fin;
- }
- for (j = 0; j < h; j++) {
- if (comp->prec == 8 && comp->sgnd == 0) {
- for (i = 0; i < w; i++) {
- line_buffer[i] = (unsigned char)CLAMP(image->comps[compno].data[j * w + i], 0,
- 255);
- }
- } else {
- for (i = 0; i < w; i++) {
- line_buffer[i] = (unsigned char)
- clamp(image->comps[compno].data[j * w + i],
- (int)comp->prec, (int)comp->sgnd);
- }
- }
- res = fwrite(line_buffer, 1, (size_t)w, fdest);
- if (res != (size_t)w) {
- fprintf(stderr, "failed to write %d bytes for %s\n", w, name);
- if (total > 256) {
- free(name);
- }
- free(line_buffer);
- goto fin;
- }
- }
- free(line_buffer);
- } else {
-
- for (i = 0; i < w * h; i++) {
- /* FIXME: clamp func is being called within a loop */
- const int val = clamp(image->comps[compno].data[i],
- (int)comp->prec, (int)comp->sgnd);
-
- for (j = nbytes - 1; j >= 0; j--) {
- int v = (int)(val >> (j * 8));
- unsigned char byte = (unsigned char)v;
- res = fwrite(&byte, 1, 1, fdest);
-
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", name);
- if (total > 256) {
- free(name);
- }
- goto fin;
- }
- }
- }
- }
-
- if (total > 256) {
- free(name);
- }
- fclose(fdest);
- fdest = NULL;
- }
- fails = 0;
-fin:
- if (fdest) {
- fclose(fdest);
- }
-
- return fails;
-}
-
-/* -->> -->> -->> -->>
-
-PNM IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-struct pnm_header {
- int width, height, maxval, depth, format;
- char rgb, rgba, gray, graya, bw;
- char ok;
-};
-
-static char *skip_white(char *s)
-{
- if (s != NULL) {
- while (*s) {
- if (*s == '\n' || *s == '\r') {
- return NULL;
- }
- if (isspace(*s)) {
- ++s;
- continue;
- }
- return s;
- }
- }
- return NULL;
-}
-
-static char *skip_int(char *start, int *out_n)
-{
- char *s;
- char c;
-
- *out_n = 0;
-
- s = skip_white(start);
- if (s == NULL) {
- return NULL;
- }
- start = s;
-
- while (*s) {
- if (!isdigit(*s)) {
- break;
- }
- ++s;
- }
- c = *s;
- *s = 0;
- *out_n = atoi(start);
- *s = c;
- return s;
-}
-
-static char *skip_idf(char *start, char out_idf[256])
-{
- char *s;
- char c;
-
- s = skip_white(start);
- if (s == NULL) {
- return NULL;
- }
- start = s;
-
- while (*s) {
- if (isalpha(*s) || *s == '_') {
- ++s;
- continue;
- }
- break;
- }
- c = *s;
- *s = 0;
- strncpy(out_idf, start, 255);
- *s = c;
- return s;
-}
-
-static void read_pnm_header(FILE *reader, struct pnm_header *ph)
-{
- int format, end, ttype;
- char idf[256], type[256];
- char line[256];
-
- if (fgets(line, 250, reader) == NULL) {
- fprintf(stderr, "\nWARNING: fgets return a NULL value");
- return;
- }
-
- if (line[0] != 'P') {
- fprintf(stderr, "read_pnm_header:PNM:magic P missing\n");
- return;
- }
- format = atoi(line + 1);
- if (format < 1 || format > 7) {
- fprintf(stderr, "read_pnm_header:magic format %d invalid\n", format);
- return;
- }
- ph->format = format;
- ttype = end = 0;
-
- while (fgets(line, 250, reader)) {
- char *s;
- int allow_null = 0;
-
- if (*line == '#') {
- continue;
- }
-
- s = line;
-
- if (format == 7) {
- s = skip_idf(s, idf);
-
- if (s == NULL || *s == 0) {
- return;
- }
-
- if (strcmp(idf, "ENDHDR") == 0) {
- end = 1;
- break;
- }
- if (strcmp(idf, "WIDTH") == 0) {
- s = skip_int(s, &ph->width);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "HEIGHT") == 0) {
- s = skip_int(s, &ph->height);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "DEPTH") == 0) {
- s = skip_int(s, &ph->depth);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "MAXVAL") == 0) {
- s = skip_int(s, &ph->maxval);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "TUPLTYPE") == 0) {
- s = skip_idf(s, type);
- if (s == NULL || *s == 0) {
- return;
- }
-
- if (strcmp(type, "BLACKANDWHITE") == 0) {
- ph->bw = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "GRAYSCALE") == 0) {
- ph->gray = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "GRAYSCALE_ALPHA") == 0) {
- ph->graya = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "RGB") == 0) {
- ph->rgb = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "RGB_ALPHA") == 0) {
- ph->rgba = 1;
- ttype = 1;
- continue;
- }
- fprintf(stderr, "read_pnm_header:unknown P7 TUPLTYPE %s\n", type);
- return;
- }
- fprintf(stderr, "read_pnm_header:unknown P7 idf %s\n", idf);
- return;
- } /* if(format == 7) */
-
- /* Here format is in range [1,6] */
- if (ph->width == 0) {
- s = skip_int(s, &ph->width);
- if ((s == NULL) || (*s == 0) || (ph->width < 1)) {
- return;
- }
- allow_null = 1;
- }
- if (ph->height == 0) {
- s = skip_int(s, &ph->height);
- if ((s == NULL) && allow_null) {
- continue;
- }
- if ((s == NULL) || (*s == 0) || (ph->height < 1)) {
- return;
- }
- if (format == 1 || format == 4) {
- break;
- }
- allow_null = 1;
- }
- /* here, format is in P2, P3, P5, P6 */
- s = skip_int(s, &ph->maxval);
- if ((s == NULL) && allow_null) {
- continue;
- }
- if ((s == NULL) || (*s == 0)) {
- return;
- }
- break;
- }/* while(fgets( ) */
- if (format == 2 || format == 3 || format > 4) {
- if (ph->maxval < 1 || ph->maxval > 65535) {
- return;
- }
- }
- if (ph->width < 1 || ph->height < 1) {
- return;
- }
-
- if (format == 7) {
- if (!end) {
- fprintf(stderr, "read_pnm_header:P7 without ENDHDR\n");
- return;
- }
- if (ph->depth < 1 || ph->depth > 4) {
- return;
- }
-
- if (ttype) {
- ph->ok = 1;
- }
- } else {
- ph->ok = 1;
- if (format == 1 || format == 4) {
- ph->maxval = 255;
- }
- }
-}
-
-static int has_prec(int val)
-{
- if (val < 2) {
- return 1;
- }
- if (val < 4) {
- return 2;
- }
- if (val < 8) {
- return 3;
- }
- if (val < 16) {
- return 4;
- }
- if (val < 32) {
- return 5;
- }
- if (val < 64) {
- return 6;
- }
- if (val < 128) {
- return 7;
- }
- if (val < 256) {
- return 8;
- }
- if (val < 512) {
- return 9;
- }
- if (val < 1024) {
- return 10;
- }
- if (val < 2048) {
- return 11;
- }
- if (val < 4096) {
- return 12;
- }
- if (val < 8192) {
- return 13;
- }
- if (val < 16384) {
- return 14;
- }
- if (val < 32768) {
- return 15;
- }
- return 16;
-}
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
-
- FILE *fp = NULL;
- int i, compno, numcomps, w, h, prec, format;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm[4]; /* RGBA: max. 4 components */
- opj_image_t * image = NULL;
- struct pnm_header header_info;
-
- if ((fp = fopen(filename, "rb")) == NULL) {
- fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n", filename);
- return NULL;
- }
- memset(&header_info, 0, sizeof(struct pnm_header));
-
- read_pnm_header(fp, &header_info);
-
- if (!header_info.ok) {
- fclose(fp);
- return NULL;
- }
-
- /* This limitation could be removed by making sure to use size_t below */
- if (header_info.height != 0 &&
- header_info.width > INT_MAX / header_info.height) {
- fprintf(stderr, "pnmtoimage:Image %dx%d too big!\n",
- header_info.width, header_info.height);
- fclose(fp);
- return NULL;
- }
-
- format = header_info.format;
-
- switch (format) {
- case 1: /* ascii bitmap */
- case 4: /* raw bitmap */
- numcomps = 1;
- break;
-
- case 2: /* ascii greymap */
- case 5: /* raw greymap */
- numcomps = 1;
- break;
-
- case 3: /* ascii pixmap */
- case 6: /* raw pixmap */
- numcomps = 3;
- break;
-
- case 7: /* arbitrary map */
- numcomps = header_info.depth;
- break;
-
- default:
- fclose(fp);
- return NULL;
- }
- if (numcomps < 3) {
- color_space = OPJ_CLRSPC_GRAY; /* GRAY, GRAYA */
- } else {
- color_space = OPJ_CLRSPC_SRGB; /* RGB, RGBA */
- }
-
- prec = has_prec(header_info.maxval);
-
- if (prec < 8) {
- prec = 8;
- }
-
- w = header_info.width;
- h = header_info.height;
- subsampling_dx = parameters->subsampling_dx;
- subsampling_dy = parameters->subsampling_dy;
-
- memset(&cmptparm[0], 0, (size_t)numcomps * sizeof(opj_image_cmptparm_t));
-
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = (OPJ_UINT32)prec;
- cmptparm[i].bpp = (OPJ_UINT32)prec;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = (OPJ_UINT32)subsampling_dx;
- cmptparm[i].dy = (OPJ_UINT32)subsampling_dy;
- cmptparm[i].w = (OPJ_UINT32)w;
- cmptparm[i].h = (OPJ_UINT32)h;
- }
- image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- fclose(fp);
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
- image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
- image->x1 = (OPJ_UINT32)(parameters->image_offset_x0 + (w - 1) * subsampling_dx
- + 1);
- image->y1 = (OPJ_UINT32)(parameters->image_offset_y0 + (h - 1) * subsampling_dy
- + 1);
-
- if ((format == 2) || (format == 3)) { /* ascii pixmap */
- unsigned int index;
-
- for (i = 0; i < w * h; i++) {
- for (compno = 0; compno < numcomps; compno++) {
- index = 0;
- if (fscanf(fp, "%u", &index) != 1) {
- fprintf(stderr,
- "\nWARNING: fscanf return a number of element different from the expected.\n");
- }
-
- image->comps[compno].data[i] = (OPJ_INT32)(index * 255) / header_info.maxval;
- }
- }
- } else if ((format == 5)
- || (format == 6)
- || ((format == 7)
- && (header_info.gray || header_info.graya
- || header_info.rgb || header_info.rgba))) { /* binary pixmap */
- unsigned char c0, c1, one;
-
- one = (prec < 9);
-
- for (i = 0; i < w * h; i++) {
- for (compno = 0; compno < numcomps; compno++) {
- if (!fread(&c0, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- fclose(fp);
- return NULL;
- }
- if (one) {
- image->comps[compno].data[i] = c0;
- } else {
- if (!fread(&c1, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- }
- /* netpbm: */
- image->comps[compno].data[i] = ((c0 << 8) | c1);
- }
- }
- }
- } else if (format == 1) { /* ascii bitmap */
- for (i = 0; i < w * h; i++) {
- unsigned int index;
-
- if (fscanf(fp, "%u", &index) != 1) {
- fprintf(stderr,
- "\nWARNING: fscanf return a number of element different from the expected.\n");
- }
-
- image->comps[0].data[i] = (index ? 0 : 255);
- }
- } else if (format == 4) {
- int x, y, bit;
- unsigned char uc;
-
- i = 0;
- for (y = 0; y < h; ++y) {
- bit = -1;
- uc = 0;
-
- for (x = 0; x < w; ++x) {
- if (bit == -1) {
- bit = 7;
- uc = (unsigned char)getc(fp);
- }
- image->comps[0].data[i] = (((uc >> bit) & 1) ? 0 : 255);
- --bit;
- ++i;
- }
- }
- } else if ((format == 7 && header_info.bw)) { /*MONO*/
- unsigned char uc;
-
- for (i = 0; i < w * h; ++i) {
- if (!fread(&uc, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- }
- image->comps[0].data[i] = (uc & 1) ? 0 : 255;
- }
- }
- fclose(fp);
-
- return image;
-}/* pnmtoimage() */
-
-static int are_comps_similar(opj_image_t * image)
-{
- unsigned int i;
- for (i = 1; i < image->numcomps; i++) {
- if (image->comps[0].dx != image->comps[i].dx ||
- image->comps[0].dy != image->comps[i].dy ||
- (i <= 2 &&
- (image->comps[0].prec != image->comps[i].prec ||
- image->comps[0].sgnd != image->comps[i].sgnd))) {
- return OPJ_FALSE;
- }
- }
- return OPJ_TRUE;
-}
-
-
-int imagetopnm(opj_image_t * image, const char *outfile, int force_split)
-{
- int *red, *green, *blue, *alpha;
- int wr, hr, max;
- int i;
- unsigned int compno, ncomp;
- int adjustR, adjustG, adjustB, adjustA;
- int fails, two, want_gray, has_alpha, triple;
- int prec, v;
- FILE *fdest = NULL;
- const char *tmp = outfile;
- char *destname;
-
- alpha = NULL;
-
- if ((prec = (int)image->comps[0].prec) > 16) {
- fprintf(stderr, "%s:%d:imagetopnm\n\tprecision %d is larger than 16"
- "\n\t: refused.\n", __FILE__, __LINE__, prec);
- return 1;
- }
- two = has_alpha = 0;
- fails = 1;
- ncomp = image->numcomps;
-
- while (*tmp) {
- ++tmp;
- }
- tmp -= 2;
- want_gray = (*tmp == 'g' || *tmp == 'G');
- ncomp = image->numcomps;
-
- if (want_gray) {
- ncomp = 1;
- }
-
- if ((force_split == 0) && ncomp >= 2 &&
- are_comps_similar(image)) {
- fdest = fopen(outfile, "wb");
-
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return fails;
- }
- two = (prec > 8);
- triple = (ncomp > 2);
- wr = (int)image->comps[0].w;
- hr = (int)image->comps[0].h;
- max = (1 << prec) - 1;
- has_alpha = (ncomp == 4 || ncomp == 2);
-
- red = image->comps[0].data;
-
- if (triple) {
- green = image->comps[1].data;
- blue = image->comps[2].data;
- } else {
- green = blue = NULL;
- }
-
- if (has_alpha) {
- const char *tt = (triple ? "RGB_ALPHA" : "GRAYSCALE_ALPHA");
-
- fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %u\n"
- "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
- wr, hr, ncomp, max, tt);
- alpha = image->comps[ncomp - 1].data;
- adjustA = (image->comps[ncomp - 1].sgnd ?
- 1 << (image->comps[ncomp - 1].prec - 1) : 0);
- } else {
- fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
- opj_version(), wr, hr, max);
- adjustA = 0;
- }
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-
- if (triple) {
- adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
- } else {
- adjustG = adjustB = 0;
- }
-
- for (i = 0; i < wr * hr; ++i) {
- if (two) {
- v = *red + adjustR;
- ++red;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- if (triple) {
- v = *green + adjustG;
- ++green;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- v = *blue + adjustB;
- ++blue;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- }/* if(triple) */
-
- if (has_alpha) {
- v = *alpha + adjustA;
- ++alpha;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
- }
- continue;
-
- } /* if(two) */
-
- /* prec <= 8: */
- v = *red++;
- if (v > 255) {
- v = 255;
- } else if (v < 0) {
- v = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)v);
- if (triple) {
- v = *green++;
- if (v > 255) {
- v = 255;
- } else if (v < 0) {
- v = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)v);
- v = *blue++;
- if (v > 255) {
- v = 255;
- } else if (v < 0) {
- v = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)v);
- }
- if (has_alpha) {
- v = *alpha++;
- if (v > 255) {
- v = 255;
- } else if (v < 0) {
- v = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)v);
- }
- } /* for(i */
-
- fclose(fdest);
- return 0;
- }
-
- /* YUV or MONO: */
-
- if (image->numcomps > ncomp) {
- fprintf(stderr, "WARNING -> [PGM file] Only the first component\n");
- fprintf(stderr, " is written to the file\n");
- }
- destname = (char*)malloc(strlen(outfile) + 8);
- if (destname == NULL) {
- fprintf(stderr, "imagetopnm: memory out\n");
- return 1;
- }
- for (compno = 0; compno < ncomp; compno++) {
- if (ncomp > 1) {
- /*sprintf(destname, "%d.%s", compno, outfile);*/
- const size_t olen = strlen(outfile);
- const size_t dotpos = olen - 4;
-
- strncpy(destname, outfile, dotpos);
- sprintf(destname + dotpos, "_%u.pgm", compno);
- } else {
- sprintf(destname, "%s", outfile);
- }
-
- fdest = fopen(destname, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
- free(destname);
- return 1;
- }
- wr = (int)image->comps[compno].w;
- hr = (int)image->comps[compno].h;
- prec = (int)image->comps[compno].prec;
- max = (1 << prec) - 1;
-
- fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
- opj_version(), wr, hr, max);
-
- red = image->comps[compno].data;
- adjustR =
- (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-
- if (prec > 8) {
- for (i = 0; i < wr * hr; i++) {
- v = *red + adjustR;
- ++red;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- if (has_alpha) {
- v = *alpha++;
- if (v > 65535) {
- v = 65535;
- } else if (v < 0) {
- v = 0;
- }
-
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
- }
- }/* for(i */
- } else { /* prec <= 8 */
- for (i = 0; i < wr * hr; ++i) {
- v = *red + adjustR;
- ++red;
- if (v > 255) {
- v = 255;
- } else if (v < 0) {
- v = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)v);
- }
- }
- fclose(fdest);
- } /* for (compno */
- free(destname);
-
- return 0;
-}/* imagetopnm() */
-
-/* -->> -->> -->> -->>
-
- RAW IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-static opj_image_t* rawtoimage_common(const char *filename,
- opj_cparameters_t *parameters, raw_cparameters_t *raw_cp, OPJ_BOOL big_endian)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
-
- FILE *f = NULL;
- int i, compno, numcomps, w, h;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t *cmptparm;
- opj_image_t * image = NULL;
- unsigned short ch;
-
- if ((!(raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp &
- raw_cp->rawBitDepth)) == 0) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
- fprintf(stderr,
- "If subsampling is omitted, 1x1 is assumed for all components\n");
- fprintf(stderr,
- "Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
- fprintf(stderr, " for raw 512x512 image with 4:2:0 subsampling\n");
- fprintf(stderr, "Aborting.\n");
- return NULL;
- }
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- fprintf(stderr, "Aborting\n");
- return NULL;
- }
- numcomps = raw_cp->rawComp;
-
- /* FIXME ADE at this point, tcp_mct has not been properly set in calling function */
- if (numcomps == 1) {
- color_space = OPJ_CLRSPC_GRAY;
- } else if ((numcomps >= 3) && (parameters->tcp_mct == 0)) {
- color_space = OPJ_CLRSPC_SYCC;
- } else if ((numcomps >= 3) && (parameters->tcp_mct != 2)) {
- color_space = OPJ_CLRSPC_SRGB;
- } else {
- color_space = OPJ_CLRSPC_UNKNOWN;
- }
- w = raw_cp->rawWidth;
- h = raw_cp->rawHeight;
- cmptparm = (opj_image_cmptparm_t*) calloc((OPJ_UINT32)numcomps,
- sizeof(opj_image_cmptparm_t));
- if (!cmptparm) {
- fprintf(stderr, "Failed to allocate image components parameters !!\n");
- fprintf(stderr, "Aborting\n");
- fclose(f);
- return NULL;
- }
- /* initialize image components */
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = (OPJ_UINT32)raw_cp->rawBitDepth;
- cmptparm[i].bpp = (OPJ_UINT32)raw_cp->rawBitDepth;
- cmptparm[i].sgnd = (OPJ_UINT32)raw_cp->rawSigned;
- cmptparm[i].dx = (OPJ_UINT32)(subsampling_dx * raw_cp->rawComps[i].dx);
- cmptparm[i].dy = (OPJ_UINT32)(subsampling_dy * raw_cp->rawComps[i].dy);
- cmptparm[i].w = (OPJ_UINT32)w;
- cmptparm[i].h = (OPJ_UINT32)h;
- }
- /* create the image */
- image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
- free(cmptparm);
- if (!image) {
- fclose(f);
- return NULL;
- }
- /* set image offset and reference grid */
- image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
- image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
- image->x1 = (OPJ_UINT32)parameters->image_offset_x0 + (OPJ_UINT32)(w - 1) *
- (OPJ_UINT32)subsampling_dx + 1;
- image->y1 = (OPJ_UINT32)parameters->image_offset_y0 + (OPJ_UINT32)(h - 1) *
- (OPJ_UINT32)subsampling_dy + 1;
-
- if (raw_cp->rawBitDepth <= 8) {
- unsigned char value = 0;
- for (compno = 0; compno < numcomps; compno++) {
- int nloop = (w * h) / (raw_cp->rawComps[compno].dx *
- raw_cp->rawComps[compno].dy);
- for (i = 0; i < nloop; i++) {
- if (!fread(&value, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- image->comps[compno].data[i] = raw_cp->rawSigned ? (char)value : value;
- }
- }
- } else if (raw_cp->rawBitDepth <= 16) {
- unsigned short value;
- for (compno = 0; compno < numcomps; compno++) {
- int nloop = (w * h) / (raw_cp->rawComps[compno].dx *
- raw_cp->rawComps[compno].dy);
- for (i = 0; i < nloop; i++) {
- unsigned char temp1;
- unsigned char temp2;
- if (!fread(&temp1, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (!fread(&temp2, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
- if (big_endian) {
- value = (unsigned short)((temp1 << 8) + temp2);
- } else {
- value = (unsigned short)((temp2 << 8) + temp1);
- }
- image->comps[compno].data[i] = raw_cp->rawSigned ? (short)value : value;
- }
- }
- } else {
- fprintf(stderr,
- "OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
- opj_image_destroy(image);
- fclose(f);
- return NULL;
- }
-
- if (fread(&ch, 1, 1, f)) {
- fprintf(stderr, "Warning. End of raw file not reached... processing anyway\n");
- }
- fclose(f);
-
- return image;
-}
-
-opj_image_t* rawltoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp)
-{
- return rawtoimage_common(filename, parameters, raw_cp, OPJ_FALSE);
-}
-
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp)
-{
- return rawtoimage_common(filename, parameters, raw_cp, OPJ_TRUE);
-}
-
-static int imagetoraw_common(opj_image_t * image, const char *outfile,
- OPJ_BOOL big_endian)
-{
- FILE *rawFile = NULL;
- size_t res;
- unsigned int compno, numcomps;
- int w, h, fails;
- int line, row, curr, mask;
- int *ptr;
- unsigned char uc;
- (void)big_endian;
-
- if ((image->numcomps * image->x1 * image->y1) == 0) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- return 1;
- }
-
- numcomps = image->numcomps;
-
- if (numcomps > 4) {
- numcomps = 4;
- }
-
- for (compno = 1; compno < numcomps; ++compno) {
- if (image->comps[0].dx != image->comps[compno].dx) {
- break;
- }
- if (image->comps[0].dy != image->comps[compno].dy) {
- break;
- }
- if (image->comps[0].prec != image->comps[compno].prec) {
- break;
- }
- if (image->comps[0].sgnd != image->comps[compno].sgnd) {
- break;
- }
- }
- if (compno != numcomps) {
- fprintf(stderr,
- "imagetoraw_common: All components shall have the same subsampling, same bit depth, same sign.\n");
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
-
- rawFile = fopen(outfile, "wb");
- if (!rawFile) {
- fprintf(stderr, "Failed to open %s for writing !!\n", outfile);
- return 1;
- }
-
- fails = 1;
- fprintf(stdout, "Raw image characteristics: %d components\n", image->numcomps);
-
- for (compno = 0; compno < image->numcomps; compno++) {
- fprintf(stdout, "Component %u characteristics: %dx%dx%d %s\n", compno,
- image->comps[compno].w,
- image->comps[compno].h, image->comps[compno].prec,
- image->comps[compno].sgnd == 1 ? "signed" : "unsigned");
-
- w = (int)image->comps[compno].w;
- h = (int)image->comps[compno].h;
-
- if (image->comps[compno].prec <= 8) {
- if (image->comps[compno].sgnd == 1) {
- mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = *ptr;
- if (curr > 127) {
- curr = 127;
- } else if (curr < -128) {
- curr = -128;
- }
- uc = (unsigned char)(curr & mask);
- res = fwrite(&uc, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
- ptr++;
- }
- }
- } else if (image->comps[compno].sgnd == 0) {
- mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = *ptr;
- if (curr > 255) {
- curr = 255;
- } else if (curr < 0) {
- curr = 0;
- }
- uc = (unsigned char)(curr & mask);
- res = fwrite(&uc, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- goto fin;
- }
- ptr++;
- }
- }
- }
- } else if (image->comps[compno].prec <= 16) {
- if (image->comps[compno].sgnd == 1) {
- union {
- signed short val;
- signed char vals[2];
- } uc16;
- mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = *ptr;
- if (curr > 32767) {
- curr = 32767;
- } else if (curr < -32768) {
- curr = -32768;
- }
- uc16.val = (signed short)(curr & mask);
- res = fwrite(uc16.vals, 1, 2, rawFile);
- if (res < 2) {
- fprintf(stderr, "failed to write 2 byte for %s\n", outfile);
- goto fin;
- }
- ptr++;
- }
- }
- } else if (image->comps[compno].sgnd == 0) {
- union {
- unsigned short val;
- unsigned char vals[2];
- } uc16;
- mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = *ptr;
- if (curr > 65535) {
- curr = 65535;
- } else if (curr < 0) {
- curr = 0;
- }
- uc16.val = (unsigned short)(curr & mask);
- res = fwrite(uc16.vals, 1, 2, rawFile);
- if (res < 2) {
- fprintf(stderr, "failed to write 2 byte for %s\n", outfile);
- goto fin;
- }
- ptr++;
- }
- }
- }
- } else if (image->comps[compno].prec <= 32) {
- fprintf(stderr, "More than 16 bits per component not handled yet\n");
- goto fin;
- } else {
- fprintf(stderr, "Error: invalid precision: %d\n", image->comps[compno].prec);
- goto fin;
- }
- }
- fails = 0;
-fin:
- fclose(rawFile);
- return fails;
-}
-
-int imagetoraw(opj_image_t * image, const char *outfile)
-{
- return imagetoraw_common(image, outfile, OPJ_TRUE);
-}
-
-int imagetorawl(opj_image_t * image, const char *outfile)
-{
- return imagetoraw_common(image, outfile, OPJ_FALSE);
-}
-
diff --git a/openjpeg/src/bin/jp2/convert.h b/openjpeg/src/bin/jp2/convert.h
deleted file mode 100644
index 61439d49..00000000
--- a/openjpeg/src/bin/jp2/convert.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J2K_CONVERT_H
-#define __J2K_CONVERT_H
-
-/**@name RAW component encoding parameters */
-/*@{*/
-typedef struct raw_comp_cparameters {
- /** subsampling in X direction */
- int dx;
- /** subsampling in Y direction */
- int dy;
- /*@}*/
-} raw_comp_cparameters_t;
-
-/**@name RAW image encoding parameters */
-/*@{*/
-typedef struct raw_cparameters {
- /** width of the raw image */
- int rawWidth;
- /** height of the raw image */
- int rawHeight;
- /** number of components of the raw image */
- int rawComp;
- /** bit depth of the raw image */
- int rawBitDepth;
- /** signed/unsigned raw image */
- OPJ_BOOL rawSigned;
- /** raw components parameters */
- raw_comp_cparameters_t *rawComps;
- /*@}*/
-} raw_cparameters_t;
-
-/* Component precision clipping */
-void clip_component(opj_image_comp_t* component, OPJ_UINT32 precision);
-/* Component precision scaling */
-void scale_component(opj_image_comp_t* component, OPJ_UINT32 precision);
-
-/* planar / interleaved conversions */
-typedef void (* convert_32s_CXPX)(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
- OPJ_SIZE_T length);
-extern const convert_32s_CXPX convert_32s_CXPX_LUT[5];
-typedef void (* convert_32s_PXCX)(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length, OPJ_INT32 adjust);
-extern const convert_32s_PXCX convert_32s_PXCX_LUT[5];
-/* bit depth conversions */
-typedef void (* convert_XXx32s_C1R)(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length);
-extern const convert_XXx32s_C1R convert_XXu32s_C1R_LUT[9]; /* up to 8bpp */
-typedef void (* convert_32sXXx_C1R)(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length);
-extern const convert_32sXXx_C1R convert_32sXXu_C1R_LUT[9]; /* up to 8bpp */
-
-
-/* TGA conversion */
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotga(opj_image_t * image, const char *outfile);
-
-/* BMP conversion */
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetobmp(opj_image_t *image, const char *outfile);
-
-/* TIFF conversion*/
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotif(opj_image_t *image, const char *outfile);
-/**
-Load a single image component encoded in PGX file format
-@param filename Name of the PGX file to load
-@param parameters *List ?*
-@return Returns a greyscale image if successful, returns NULL otherwise
-*/
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopgx(opj_image_t *image, const char *outfile);
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopnm(opj_image_t *image, const char *outfile, int force_split);
-
-/* RAW conversion */
-int imagetoraw(opj_image_t * image, const char *outfile);
-int imagetorawl(opj_image_t * image, const char *outfile);
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp);
-opj_image_t* rawltoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp);
-
-/* PNG conversion*/
-extern int imagetopng(opj_image_t *image, const char *write_idf);
-extern opj_image_t* pngtoimage(const char *filename,
- opj_cparameters_t *parameters);
-
-#endif /* __J2K_CONVERT_H */
-
diff --git a/openjpeg/src/bin/jp2/convertbmp.c b/openjpeg/src/bin/jp2/convertbmp.c
deleted file mode 100644
index 084f70bb..00000000
--- a/openjpeg/src/bin/jp2/convertbmp.c
+++ /dev/null
@@ -1,1106 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "openjpeg.h"
-#include "convert.h"
-
-typedef struct {
- OPJ_UINT16 bfType; /* 'BM' for Bitmap (19776) */
- OPJ_UINT32 bfSize; /* Size of the file */
- OPJ_UINT16 bfReserved1; /* Reserved : 0 */
- OPJ_UINT16 bfReserved2; /* Reserved : 0 */
- OPJ_UINT32 bfOffBits; /* Offset */
-} OPJ_BITMAPFILEHEADER;
-
-typedef struct {
- OPJ_UINT32 biSize; /* Size of the structure in bytes */
- OPJ_UINT32 biWidth; /* Width of the image in pixels */
- OPJ_UINT32 biHeight; /* Height of the image in pixels */
- OPJ_UINT16 biPlanes; /* 1 */
- OPJ_UINT16 biBitCount; /* Number of color bits by pixels */
- OPJ_UINT32 biCompression; /* Type of encoding 0: none 1: RLE8 2: RLE4 */
- OPJ_UINT32 biSizeImage; /* Size of the image in bytes */
- OPJ_UINT32 biXpelsPerMeter; /* Horizontal (X) resolution in pixels/meter */
- OPJ_UINT32 biYpelsPerMeter; /* Vertical (Y) resolution in pixels/meter */
- OPJ_UINT32 biClrUsed; /* Number of color used in the image (0: ALL) */
- OPJ_UINT32 biClrImportant; /* Number of important color (0: ALL) */
- OPJ_UINT32 biRedMask; /* Red channel bit mask */
- OPJ_UINT32 biGreenMask; /* Green channel bit mask */
- OPJ_UINT32 biBlueMask; /* Blue channel bit mask */
- OPJ_UINT32 biAlphaMask; /* Alpha channel bit mask */
- OPJ_UINT32 biColorSpaceType; /* Color space type */
- OPJ_UINT8 biColorSpaceEP[36]; /* Color space end points */
- OPJ_UINT32 biRedGamma; /* Red channel gamma */
- OPJ_UINT32 biGreenGamma; /* Green channel gamma */
- OPJ_UINT32 biBlueGamma; /* Blue channel gamma */
- OPJ_UINT32 biIntent; /* Intent */
- OPJ_UINT32 biIccProfileData; /* ICC profile data */
- OPJ_UINT32 biIccProfileSize; /* ICC profile size */
- OPJ_UINT32 biReserved; /* Reserved */
-} OPJ_BITMAPINFOHEADER;
-
-static void opj_applyLUT8u_8u32s_C1R(
- OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
- OPJ_INT32* pDst, OPJ_INT32 dstStride,
- OPJ_UINT8 const* pLUT,
- OPJ_UINT32 width, OPJ_UINT32 height)
-{
- OPJ_UINT32 y;
-
- for (y = height; y != 0U; --y) {
- OPJ_UINT32 x;
-
- for (x = 0; x < width; x++) {
- pDst[x] = (OPJ_INT32)pLUT[pSrc[x]];
- }
- pSrc += srcStride;
- pDst += dstStride;
- }
-}
-
-static void opj_applyLUT8u_8u32s_C1P3R(
- OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
- OPJ_INT32* const* pDst, OPJ_INT32 const* pDstStride,
- OPJ_UINT8 const* const* pLUT,
- OPJ_UINT32 width, OPJ_UINT32 height)
-{
- OPJ_UINT32 y;
- OPJ_INT32* pR = pDst[0];
- OPJ_INT32* pG = pDst[1];
- OPJ_INT32* pB = pDst[2];
- OPJ_UINT8 const* pLUT_R = pLUT[0];
- OPJ_UINT8 const* pLUT_G = pLUT[1];
- OPJ_UINT8 const* pLUT_B = pLUT[2];
-
- for (y = height; y != 0U; --y) {
- OPJ_UINT32 x;
-
- for (x = 0; x < width; x++) {
- OPJ_UINT8 idx = pSrc[x];
- pR[x] = (OPJ_INT32)pLUT_R[idx];
- pG[x] = (OPJ_INT32)pLUT_G[idx];
- pB[x] = (OPJ_INT32)pLUT_B[idx];
- }
- pSrc += srcStride;
- pR += pDstStride[0];
- pG += pDstStride[1];
- pB += pDstStride[2];
- }
-}
-
-static void bmp24toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
- opj_image_t* image)
-{
- int index;
- OPJ_UINT32 width, height;
- OPJ_UINT32 x, y;
- const OPJ_UINT8 *pSrc = NULL;
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- index = 0;
- pSrc = pData + (height - 1U) * stride;
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- image->comps[0].data[index] = (OPJ_INT32)pSrc[3 * x + 2]; /* R */
- image->comps[1].data[index] = (OPJ_INT32)pSrc[3 * x + 1]; /* G */
- image->comps[2].data[index] = (OPJ_INT32)pSrc[3 * x + 0]; /* B */
- index++;
- }
- pSrc -= stride;
- }
-}
-
-static void bmp_mask_get_shift_and_prec(OPJ_UINT32 mask, OPJ_UINT32* shift,
- OPJ_UINT32* prec)
-{
- OPJ_UINT32 l_shift, l_prec;
-
- l_shift = l_prec = 0U;
-
- if (mask != 0U) {
- while ((mask & 1U) == 0U) {
- mask >>= 1;
- l_shift++;
- }
- while (mask & 1U) {
- mask >>= 1;
- l_prec++;
- }
- }
- *shift = l_shift;
- *prec = l_prec;
-}
-
-static void bmpmask32toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
- opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask,
- OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
-{
- int index;
- OPJ_UINT32 width, height;
- OPJ_UINT32 x, y;
- const OPJ_UINT8 *pSrc = NULL;
- OPJ_BOOL hasAlpha;
- OPJ_UINT32 redShift, redPrec;
- OPJ_UINT32 greenShift, greenPrec;
- OPJ_UINT32 blueShift, bluePrec;
- OPJ_UINT32 alphaShift, alphaPrec;
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- hasAlpha = image->numcomps > 3U;
-
- bmp_mask_get_shift_and_prec(redMask, &redShift, &redPrec);
- bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
- bmp_mask_get_shift_and_prec(blueMask, &blueShift, &bluePrec);
- bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
-
- image->comps[0].bpp = redPrec;
- image->comps[0].prec = redPrec;
- image->comps[1].bpp = greenPrec;
- image->comps[1].prec = greenPrec;
- image->comps[2].bpp = bluePrec;
- image->comps[2].prec = bluePrec;
- if (hasAlpha) {
- image->comps[3].bpp = alphaPrec;
- image->comps[3].prec = alphaPrec;
- }
-
- index = 0;
- pSrc = pData + (height - 1U) * stride;
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- OPJ_UINT32 value = 0U;
-
- value |= ((OPJ_UINT32)pSrc[4 * x + 0]) << 0;
- value |= ((OPJ_UINT32)pSrc[4 * x + 1]) << 8;
- value |= ((OPJ_UINT32)pSrc[4 * x + 2]) << 16;
- value |= ((OPJ_UINT32)pSrc[4 * x + 3]) << 24;
-
- image->comps[0].data[index] = (OPJ_INT32)((value & redMask) >>
- redShift); /* R */
- image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >>
- greenShift); /* G */
- image->comps[2].data[index] = (OPJ_INT32)((value & blueMask) >>
- blueShift); /* B */
- if (hasAlpha) {
- image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask) >>
- alphaShift); /* A */
- }
- index++;
- }
- pSrc -= stride;
- }
-}
-
-static void bmpmask16toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
- opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask,
- OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
-{
- int index;
- OPJ_UINT32 width, height;
- OPJ_UINT32 x, y;
- const OPJ_UINT8 *pSrc = NULL;
- OPJ_BOOL hasAlpha;
- OPJ_UINT32 redShift, redPrec;
- OPJ_UINT32 greenShift, greenPrec;
- OPJ_UINT32 blueShift, bluePrec;
- OPJ_UINT32 alphaShift, alphaPrec;
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- hasAlpha = image->numcomps > 3U;
-
- bmp_mask_get_shift_and_prec(redMask, &redShift, &redPrec);
- bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
- bmp_mask_get_shift_and_prec(blueMask, &blueShift, &bluePrec);
- bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
-
- image->comps[0].bpp = redPrec;
- image->comps[0].prec = redPrec;
- image->comps[1].bpp = greenPrec;
- image->comps[1].prec = greenPrec;
- image->comps[2].bpp = bluePrec;
- image->comps[2].prec = bluePrec;
- if (hasAlpha) {
- image->comps[3].bpp = alphaPrec;
- image->comps[3].prec = alphaPrec;
- }
-
- index = 0;
- pSrc = pData + (height - 1U) * stride;
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- OPJ_UINT32 value = 0U;
-
- value |= ((OPJ_UINT32)pSrc[2 * x + 0]) << 0;
- value |= ((OPJ_UINT32)pSrc[2 * x + 1]) << 8;
-
- image->comps[0].data[index] = (OPJ_INT32)((value & redMask) >>
- redShift); /* R */
- image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >>
- greenShift); /* G */
- image->comps[2].data[index] = (OPJ_INT32)((value & blueMask) >>
- blueShift); /* B */
- if (hasAlpha) {
- image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask) >>
- alphaShift); /* A */
- }
- index++;
- }
- pSrc -= stride;
- }
-}
-
-static opj_image_t* bmp8toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
- opj_image_t* image, OPJ_UINT8 const* const* pLUT)
-{
- OPJ_UINT32 width, height;
- const OPJ_UINT8 *pSrc = NULL;
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- pSrc = pData + (height - 1U) * stride;
- if (image->numcomps == 1U) {
- opj_applyLUT8u_8u32s_C1R(pSrc, -(OPJ_INT32)stride, image->comps[0].data,
- (OPJ_INT32)width, pLUT[0], width, height);
- } else {
- OPJ_INT32* pDst[3];
- OPJ_INT32 pDstStride[3];
-
- pDst[0] = image->comps[0].data;
- pDst[1] = image->comps[1].data;
- pDst[2] = image->comps[2].data;
- pDstStride[0] = (OPJ_INT32)width;
- pDstStride[1] = (OPJ_INT32)width;
- pDstStride[2] = (OPJ_INT32)width;
- opj_applyLUT8u_8u32s_C1P3R(pSrc, -(OPJ_INT32)stride, pDst, pDstStride, pLUT,
- width, height);
- }
- return image;
-}
-
-static OPJ_BOOL bmp_read_file_header(FILE* IN, OPJ_BITMAPFILEHEADER* header)
-{
- header->bfType = (OPJ_UINT16)getc(IN);
- header->bfType |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-
- if (header->bfType != 19778) {
- fprintf(stderr, "Error, not a BMP file!\n");
- return OPJ_FALSE;
- }
-
- /* FILE HEADER */
- /* ------------- */
- header->bfSize = (OPJ_UINT32)getc(IN);
- header->bfSize |= (OPJ_UINT32)getc(IN) << 8;
- header->bfSize |= (OPJ_UINT32)getc(IN) << 16;
- header->bfSize |= (OPJ_UINT32)getc(IN) << 24;
-
- header->bfReserved1 = (OPJ_UINT16)getc(IN);
- header->bfReserved1 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-
- header->bfReserved2 = (OPJ_UINT16)getc(IN);
- header->bfReserved2 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-
- header->bfOffBits = (OPJ_UINT32)getc(IN);
- header->bfOffBits |= (OPJ_UINT32)getc(IN) << 8;
- header->bfOffBits |= (OPJ_UINT32)getc(IN) << 16;
- header->bfOffBits |= (OPJ_UINT32)getc(IN) << 24;
- return OPJ_TRUE;
-}
-static OPJ_BOOL bmp_read_info_header(FILE* IN, OPJ_BITMAPINFOHEADER* header)
-{
- memset(header, 0, sizeof(*header));
- /* INFO HEADER */
- /* ------------- */
- header->biSize = (OPJ_UINT32)getc(IN);
- header->biSize |= (OPJ_UINT32)getc(IN) << 8;
- header->biSize |= (OPJ_UINT32)getc(IN) << 16;
- header->biSize |= (OPJ_UINT32)getc(IN) << 24;
-
- switch (header->biSize) {
- case 12U: /* BITMAPCOREHEADER */
- case 40U: /* BITMAPINFOHEADER */
- case 52U: /* BITMAPV2INFOHEADER */
- case 56U: /* BITMAPV3INFOHEADER */
- case 108U: /* BITMAPV4HEADER */
- case 124U: /* BITMAPV5HEADER */
- break;
- default:
- fprintf(stderr, "Error, unknown BMP header size %d\n", header->biSize);
- return OPJ_FALSE;
- }
-
- header->biWidth = (OPJ_UINT32)getc(IN);
- header->biWidth |= (OPJ_UINT32)getc(IN) << 8;
- header->biWidth |= (OPJ_UINT32)getc(IN) << 16;
- header->biWidth |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biHeight = (OPJ_UINT32)getc(IN);
- header->biHeight |= (OPJ_UINT32)getc(IN) << 8;
- header->biHeight |= (OPJ_UINT32)getc(IN) << 16;
- header->biHeight |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biPlanes = (OPJ_UINT16)getc(IN);
- header->biPlanes |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-
- header->biBitCount = (OPJ_UINT16)getc(IN);
- header->biBitCount |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
- if (header->biBitCount == 0) {
- fprintf(stderr, "Error, invalid biBitCount %d\n", 0);
- return OPJ_FALSE;
- }
-
- if (header->biSize >= 40U) {
- header->biCompression = (OPJ_UINT32)getc(IN);
- header->biCompression |= (OPJ_UINT32)getc(IN) << 8;
- header->biCompression |= (OPJ_UINT32)getc(IN) << 16;
- header->biCompression |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biSizeImage = (OPJ_UINT32)getc(IN);
- header->biSizeImage |= (OPJ_UINT32)getc(IN) << 8;
- header->biSizeImage |= (OPJ_UINT32)getc(IN) << 16;
- header->biSizeImage |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biXpelsPerMeter = (OPJ_UINT32)getc(IN);
- header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
- header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
- header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biYpelsPerMeter = (OPJ_UINT32)getc(IN);
- header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
- header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
- header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biClrUsed = (OPJ_UINT32)getc(IN);
- header->biClrUsed |= (OPJ_UINT32)getc(IN) << 8;
- header->biClrUsed |= (OPJ_UINT32)getc(IN) << 16;
- header->biClrUsed |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biClrImportant = (OPJ_UINT32)getc(IN);
- header->biClrImportant |= (OPJ_UINT32)getc(IN) << 8;
- header->biClrImportant |= (OPJ_UINT32)getc(IN) << 16;
- header->biClrImportant |= (OPJ_UINT32)getc(IN) << 24;
- }
-
- if (header->biSize >= 56U) {
- header->biRedMask = (OPJ_UINT32)getc(IN);
- header->biRedMask |= (OPJ_UINT32)getc(IN) << 8;
- header->biRedMask |= (OPJ_UINT32)getc(IN) << 16;
- header->biRedMask |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biGreenMask = (OPJ_UINT32)getc(IN);
- header->biGreenMask |= (OPJ_UINT32)getc(IN) << 8;
- header->biGreenMask |= (OPJ_UINT32)getc(IN) << 16;
- header->biGreenMask |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biBlueMask = (OPJ_UINT32)getc(IN);
- header->biBlueMask |= (OPJ_UINT32)getc(IN) << 8;
- header->biBlueMask |= (OPJ_UINT32)getc(IN) << 16;
- header->biBlueMask |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biAlphaMask = (OPJ_UINT32)getc(IN);
- header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 8;
- header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 16;
- header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 24;
- }
-
- if (header->biSize >= 108U) {
- header->biColorSpaceType = (OPJ_UINT32)getc(IN);
- header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 8;
- header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 16;
- header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 24;
-
- if (fread(&(header->biColorSpaceEP), 1U, sizeof(header->biColorSpaceEP),
- IN) != sizeof(header->biColorSpaceEP)) {
- fprintf(stderr, "Error, can't read BMP header\n");
- return OPJ_FALSE;
- }
-
- header->biRedGamma = (OPJ_UINT32)getc(IN);
- header->biRedGamma |= (OPJ_UINT32)getc(IN) << 8;
- header->biRedGamma |= (OPJ_UINT32)getc(IN) << 16;
- header->biRedGamma |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biGreenGamma = (OPJ_UINT32)getc(IN);
- header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 8;
- header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 16;
- header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biBlueGamma = (OPJ_UINT32)getc(IN);
- header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 8;
- header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 16;
- header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 24;
- }
-
- if (header->biSize >= 124U) {
- header->biIntent = (OPJ_UINT32)getc(IN);
- header->biIntent |= (OPJ_UINT32)getc(IN) << 8;
- header->biIntent |= (OPJ_UINT32)getc(IN) << 16;
- header->biIntent |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biIccProfileData = (OPJ_UINT32)getc(IN);
- header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 8;
- header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 16;
- header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biIccProfileSize = (OPJ_UINT32)getc(IN);
- header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 8;
- header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 16;
- header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 24;
-
- header->biReserved = (OPJ_UINT32)getc(IN);
- header->biReserved |= (OPJ_UINT32)getc(IN) << 8;
- header->biReserved |= (OPJ_UINT32)getc(IN) << 16;
- header->biReserved |= (OPJ_UINT32)getc(IN) << 24;
- }
- return OPJ_TRUE;
-}
-
-static OPJ_BOOL bmp_read_raw_data(FILE* IN, OPJ_UINT8* pData, OPJ_UINT32 stride,
- OPJ_UINT32 width, OPJ_UINT32 height)
-{
- OPJ_ARG_NOT_USED(width);
-
- if (fread(pData, sizeof(OPJ_UINT8), stride * height, IN) != (stride * height)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return OPJ_FALSE;
- }
- return OPJ_TRUE;
-}
-
-static OPJ_BOOL bmp_read_rle8_data(FILE* IN, OPJ_UINT8* pData,
- OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
-{
- OPJ_UINT32 x, y;
- OPJ_UINT8 *pix;
- const OPJ_UINT8 *beyond;
-
- beyond = pData + stride * height;
- pix = pData;
-
- x = y = 0U;
- while (y < height) {
- int c = getc(IN);
- if (c == EOF) {
- return OPJ_FALSE;
- }
-
- if (c) {
- int j, c1_int;
- OPJ_UINT8 c1;
-
- c1_int = getc(IN);
- if (c1_int == EOF) {
- return OPJ_FALSE;
- }
- c1 = (OPJ_UINT8)c1_int;
-
- for (j = 0; (j < c) && (x < width) &&
- ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
- *pix = c1;
- }
- } else {
- c = getc(IN);
- if (c == EOF) {
- return OPJ_FALSE;
- }
-
- if (c == 0x00) { /* EOL */
- x = 0;
- ++y;
- pix = pData + y * stride + x;
- } else if (c == 0x01) { /* EOP */
- break;
- } else if (c == 0x02) { /* MOVE by dxdy */
- c = getc(IN);
- if (c == EOF) {
- return OPJ_FALSE;
- }
- x += (OPJ_UINT32)c;
- c = getc(IN);
- if (c == EOF) {
- return OPJ_FALSE;
- }
- y += (OPJ_UINT32)c;
- pix = pData + y * stride + x;
- } else { /* 03 .. 255 */
- int j;
- for (j = 0; (j < c) && (x < width) &&
- ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
- int c1_int;
- OPJ_UINT8 c1;
- c1_int = getc(IN);
- if (c1_int == EOF) {
- return OPJ_FALSE;
- }
- c1 = (OPJ_UINT8)c1_int;
- *pix = c1;
- }
- if ((OPJ_UINT32)c & 1U) { /* skip padding byte */
- c = getc(IN);
- if (c == EOF) {
- return OPJ_FALSE;
- }
- }
- }
- }
- }/* while() */
- return OPJ_TRUE;
-}
-
-static OPJ_BOOL bmp_read_rle4_data(FILE* IN, OPJ_UINT8* pData,
- OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
-{
- OPJ_UINT32 x, y;
- OPJ_UINT8 *pix;
- const OPJ_UINT8 *beyond;
-
- beyond = pData + stride * height;
- pix = pData;
- x = y = 0U;
- while (y < height) {
- int c = getc(IN);
- if (c == EOF) {
- break;
- }
-
- if (c) { /* encoded mode */
- int j;
- OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
-
- for (j = 0; (j < c) && (x < width) &&
- ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
- *pix = (OPJ_UINT8)((j & 1) ? (c1 & 0x0fU) : ((c1 >> 4) & 0x0fU));
- }
- } else { /* absolute mode */
- c = getc(IN);
- if (c == EOF) {
- break;
- }
-
- if (c == 0x00) { /* EOL */
- x = 0;
- y++;
- pix = pData + y * stride;
- } else if (c == 0x01) { /* EOP */
- break;
- } else if (c == 0x02) { /* MOVE by dxdy */
- c = getc(IN);
- x += (OPJ_UINT32)c;
- c = getc(IN);
- y += (OPJ_UINT32)c;
- pix = pData + y * stride + x;
- } else { /* 03 .. 255 : absolute mode */
- int j;
- OPJ_UINT8 c1 = 0U;
-
- for (j = 0; (j < c) && (x < width) &&
- ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
- if ((j & 1) == 0) {
- c1 = (OPJ_UINT8)getc(IN);
- }
- *pix = (OPJ_UINT8)((j & 1) ? (c1 & 0x0fU) : ((c1 >> 4) & 0x0fU));
- }
- if (((c & 3) == 1) || ((c & 3) == 2)) { /* skip padding byte */
- getc(IN);
- }
- }
- }
- } /* while(y < height) */
- return OPJ_TRUE;
-}
-
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
-{
- opj_image_cmptparm_t cmptparm[4]; /* maximum of 4 components */
- OPJ_UINT8 lut_R[256], lut_G[256], lut_B[256];
- OPJ_UINT8 const* pLUT[3];
- opj_image_t * image = NULL;
- FILE *IN;
- OPJ_BITMAPFILEHEADER File_h;
- OPJ_BITMAPINFOHEADER Info_h;
- OPJ_UINT32 i, palette_len, numcmpts = 1U;
- OPJ_BOOL l_result = OPJ_FALSE;
- OPJ_UINT8* pData = NULL;
- OPJ_UINT32 stride;
-
- pLUT[0] = lut_R;
- pLUT[1] = lut_G;
- pLUT[2] = lut_B;
-
- IN = fopen(filename, "rb");
- if (!IN) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- return NULL;
- }
-
- if (!bmp_read_file_header(IN, &File_h)) {
- fclose(IN);
- return NULL;
- }
- if (!bmp_read_info_header(IN, &Info_h)) {
- fclose(IN);
- return NULL;
- }
-
- /* Load palette */
- if (Info_h.biBitCount <= 8U) {
- memset(&lut_R[0], 0, sizeof(lut_R));
- memset(&lut_G[0], 0, sizeof(lut_G));
- memset(&lut_B[0], 0, sizeof(lut_B));
-
- palette_len = Info_h.biClrUsed;
- if ((palette_len == 0U) && (Info_h.biBitCount <= 8U)) {
- palette_len = (1U << Info_h.biBitCount);
- }
- if (palette_len > 256U) {
- palette_len = 256U;
- }
- if (palette_len > 0U) {
- OPJ_UINT8 has_color = 0U;
- for (i = 0U; i < palette_len; i++) {
- lut_B[i] = (OPJ_UINT8)getc(IN);
- lut_G[i] = (OPJ_UINT8)getc(IN);
- lut_R[i] = (OPJ_UINT8)getc(IN);
- (void)getc(IN); /* padding */
- has_color |= (lut_B[i] ^ lut_G[i]) | (lut_G[i] ^ lut_R[i]);
- }
- if (has_color) {
- numcmpts = 3U;
- }
- }
- } else {
- numcmpts = 3U;
- if ((Info_h.biCompression == 3) && (Info_h.biAlphaMask != 0U)) {
- numcmpts++;
- }
- }
-
- if (Info_h.biWidth == 0 || Info_h.biHeight == 0) {
- fclose(IN);
- return NULL;
- }
-
- if (Info_h.biBitCount > (((OPJ_UINT32) - 1) - 31) / Info_h.biWidth) {
- fclose(IN);
- return NULL;
- }
- stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) *
- 4U; /* rows are aligned on 32bits */
- if (Info_h.biBitCount == 4 &&
- Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */
- if (8 > (((OPJ_UINT32) - 1) - 31) / Info_h.biWidth) {
- fclose(IN);
- return NULL;
- }
- stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U;
- }
-
- if (stride > ((OPJ_UINT32) - 1) / sizeof(OPJ_UINT8) / Info_h.biHeight) {
- fclose(IN);
- return NULL;
- }
- pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8));
- if (pData == NULL) {
- fclose(IN);
- return NULL;
- }
- /* Place the cursor at the beginning of the image information */
- fseek(IN, 0, SEEK_SET);
- fseek(IN, (long)File_h.bfOffBits, SEEK_SET);
-
- switch (Info_h.biCompression) {
- case 0:
- case 3:
- /* read raw data */
- l_result = bmp_read_raw_data(IN, pData, stride, Info_h.biWidth,
- Info_h.biHeight);
- break;
- case 1:
- /* read rle8 data */
- l_result = bmp_read_rle8_data(IN, pData, stride, Info_h.biWidth,
- Info_h.biHeight);
- break;
- case 2:
- /* read rle4 data */
- l_result = bmp_read_rle4_data(IN, pData, stride, Info_h.biWidth,
- Info_h.biHeight);
- break;
- default:
- fprintf(stderr, "Unsupported BMP compression\n");
- l_result = OPJ_FALSE;
- break;
- }
- if (!l_result) {
- free(pData);
- fclose(IN);
- return NULL;
- }
-
- /* create the image */
- memset(&cmptparm[0], 0, sizeof(cmptparm));
- for (i = 0; i < 4U; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = (OPJ_UINT32)parameters->subsampling_dx;
- cmptparm[i].dy = (OPJ_UINT32)parameters->subsampling_dy;
- cmptparm[i].w = Info_h.biWidth;
- cmptparm[i].h = Info_h.biHeight;
- }
-
- image = opj_image_create(numcmpts, &cmptparm[0],
- (numcmpts == 1U) ? OPJ_CLRSPC_GRAY : OPJ_CLRSPC_SRGB);
- if (!image) {
- fclose(IN);
- free(pData);
- return NULL;
- }
- if (numcmpts == 4U) {
- image->comps[3].alpha = 1;
- }
-
- /* set image offset and reference grid */
- image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
- image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
- image->x1 = image->x0 + (Info_h.biWidth - 1U) * (OPJ_UINT32)
- parameters->subsampling_dx + 1U;
- image->y1 = image->y0 + (Info_h.biHeight - 1U) * (OPJ_UINT32)
- parameters->subsampling_dy + 1U;
-
- /* Read the data */
- if (Info_h.biBitCount == 24 && Info_h.biCompression == 0) { /*RGB */
- bmp24toimage(pData, stride, image);
- } else if (Info_h.biBitCount == 8 &&
- Info_h.biCompression == 0) { /* RGB 8bpp Indexed */
- bmp8toimage(pData, stride, image, pLUT);
- } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
- bmp8toimage(pData, stride, image, pLUT);
- } else if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /*RLE4*/
- bmp8toimage(pData, stride, image,
- pLUT); /* RLE 4 gets decoded as 8 bits data for now */
- } else if (Info_h.biBitCount == 32 && Info_h.biCompression == 0) { /* RGBX */
- bmpmask32toimage(pData, stride, image, 0x00FF0000U, 0x0000FF00U, 0x000000FFU,
- 0x00000000U);
- } else if (Info_h.biBitCount == 32 && Info_h.biCompression == 3) { /* bitmask */
- bmpmask32toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask,
- Info_h.biBlueMask, Info_h.biAlphaMask);
- } else if (Info_h.biBitCount == 16 && Info_h.biCompression == 0) { /* RGBX */
- bmpmask16toimage(pData, stride, image, 0x7C00U, 0x03E0U, 0x001FU, 0x0000U);
- } else if (Info_h.biBitCount == 16 && Info_h.biCompression == 3) { /* bitmask */
- if ((Info_h.biRedMask == 0U) && (Info_h.biGreenMask == 0U) &&
- (Info_h.biBlueMask == 0U)) {
- Info_h.biRedMask = 0xF800U;
- Info_h.biGreenMask = 0x07E0U;
- Info_h.biBlueMask = 0x001FU;
- }
- bmpmask16toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask,
- Info_h.biBlueMask, Info_h.biAlphaMask);
- } else {
- opj_image_destroy(image);
- image = NULL;
- fprintf(stderr,
- "Other system than 24 bits/pixels or 8 bits (no RLE coding) is not yet implemented [%d]\n",
- Info_h.biBitCount);
- }
- free(pData);
- fclose(IN);
- return image;
-}
-
-int imagetobmp(opj_image_t * image, const char *outfile)
-{
- int w, h;
- int i, pad;
- FILE *fdest = NULL;
- int adjustR, adjustG, adjustB;
-
- if (image->comps[0].prec < 8) {
- fprintf(stderr, "imagetobmp: Unsupported precision: %d\n",
- image->comps[0].prec);
- return 1;
- }
- if (image->numcomps >= 3 && image->comps[0].dx == image->comps[1].dx
- && image->comps[1].dx == image->comps[2].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[1].dy == image->comps[2].dy
- && image->comps[0].prec == image->comps[1].prec
- && image->comps[1].prec == image->comps[2].prec
- && image->comps[0].sgnd == image->comps[1].sgnd
- && image->comps[1].sgnd == image->comps[2].sgnd) {
-
- /* -->> -->> -->> -->>
- 24 bits color
- <<-- <<-- <<-- <<-- */
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return 1;
- }
-
- w = (int)image->comps[0].w;
- h = (int)image->comps[0].h;
-
- fprintf(fdest, "BM");
-
- /* FILE HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c",
- (OPJ_UINT8)(h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, ((54) >> 16) & 0xff,
- ((54) >> 24) & 0xff);
-
- /* INFO HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
- ((40) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((w) & 0xff),
- (OPJ_UINT8)((w) >> 8) & 0xff,
- (OPJ_UINT8)((w) >> 16) & 0xff,
- (OPJ_UINT8)((w) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((h) & 0xff),
- (OPJ_UINT8)((h) >> 8) & 0xff,
- (OPJ_UINT8)((h) >> 16) & 0xff,
- (OPJ_UINT8)((h) >> 24) & 0xff);
- fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
- fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(3 * h * w + 3 * h * (w % 2)) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
- (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
-
- if (image->comps[0].prec > 8) {
- adjustR = (int)image->comps[0].prec - 8;
- printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
- image->comps[0].prec);
- } else {
- adjustR = 0;
- }
- if (image->comps[1].prec > 8) {
- adjustG = (int)image->comps[1].prec - 8;
- printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
- image->comps[1].prec);
- } else {
- adjustG = 0;
- }
- if (image->comps[2].prec > 8) {
- adjustB = (int)image->comps[2].prec - 8;
- printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
- image->comps[2].prec);
- } else {
- adjustB = 0;
- }
-
- for (i = 0; i < w * h; i++) {
- OPJ_UINT8 rc, gc, bc;
- int r, g, b;
-
- r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- if (adjustR > 0) {
- r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
- }
- if (r > 255) {
- r = 255;
- } else if (r < 0) {
- r = 0;
- }
- rc = (OPJ_UINT8)r;
-
- g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- if (adjustG > 0) {
- g = ((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
- }
- if (g > 255) {
- g = 255;
- } else if (g < 0) {
- g = 0;
- }
- gc = (OPJ_UINT8)g;
-
- b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
- if (adjustB > 0) {
- b = ((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
- }
- if (b > 255) {
- b = 255;
- } else if (b < 0) {
- b = 0;
- }
- bc = (OPJ_UINT8)b;
-
- fprintf(fdest, "%c%c%c", bc, gc, rc);
-
- if ((i + 1) % w == 0) {
- for (pad = ((3 * w) % 4) ? (4 - (3 * w) % 4) : 0; pad > 0; pad--) { /* ADD */
- fprintf(fdest, "%c", 0);
- }
- }
- }
- fclose(fdest);
- } else { /* Gray-scale */
-
- /* -->> -->> -->> -->>
- 8 bits non code (Gray scale)
- <<-- <<-- <<-- <<-- */
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return 1;
- }
- if (image->numcomps > 1) {
- fprintf(stderr, "imagetobmp: only first component of %d is used.\n",
- image->numcomps);
- }
- w = (int)image->comps[0].w;
- h = (int)image->comps[0].h;
-
- fprintf(fdest, "BM");
-
- /* FILE HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(h * w + 54 + 1024 + h * (w % 2)) & 0xff,
- (OPJ_UINT8)((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
- (OPJ_UINT8)((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
- (OPJ_UINT8)((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff,
- ((54 + 1024) >> 16) & 0xff,
- ((54 + 1024) >> 24) & 0xff);
-
- /* INFO HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
- ((40) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((w) & 0xff),
- (OPJ_UINT8)((w) >> 8) & 0xff,
- (OPJ_UINT8)((w) >> 16) & 0xff,
- (OPJ_UINT8)((w) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((h) & 0xff),
- (OPJ_UINT8)((h) >> 8) & 0xff,
- (OPJ_UINT8)((h) >> 16) & 0xff,
- (OPJ_UINT8)((h) >> 24) & 0xff);
- fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
- fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(h * w + h * (w % 2)) & 0xff,
- (OPJ_UINT8)((h * w + h * (w % 2)) >> 8) & 0xff,
- (OPJ_UINT8)((h * w + h * (w % 2)) >> 16) & 0xff,
- (OPJ_UINT8)((h * w + h * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
- ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
- ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-
- if (image->comps[0].prec > 8) {
- adjustR = (int)image->comps[0].prec - 8;
- printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
- image->comps[0].prec);
- } else {
- adjustR = 0;
- }
-
- for (i = 0; i < 256; i++) {
- fprintf(fdest, "%c%c%c%c", i, i, i, 0);
- }
-
- for (i = 0; i < w * h; i++) {
- int r;
-
- r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- if (adjustR > 0) {
- r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
- }
- if (r > 255) {
- r = 255;
- } else if (r < 0) {
- r = 0;
- }
-
- fprintf(fdest, "%c", (OPJ_UINT8)r);
-
- if ((i + 1) % w == 0) {
- for (pad = (w % 4) ? (4 - w % 4) : 0; pad > 0; pad--) { /* ADD */
- fprintf(fdest, "%c", 0);
- }
- }
- }
- fclose(fdest);
- }
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jp2/convertpng.c b/openjpeg/src/bin/jp2/convertpng.c
deleted file mode 100644
index 44d985f2..00000000
--- a/openjpeg/src/bin/jp2/convertpng.c
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2015, Matthieu Darbois
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <zlib.h>
-#include <png.h>
-
-#include "openjpeg.h"
-#include "convert.h"
-
-#define PNG_MAGIC "\x89PNG\x0d\x0a\x1a\x0a"
-#define MAGIC_SIZE 8
-/* PNG allows bits per sample: 1, 2, 4, 8, 16 */
-
-
-static void convert_16u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; i++) {
- OPJ_INT32 val0 = *pSrc++;
- OPJ_INT32 val1 = *pSrc++;
- pDst[i] = val0 << 8 | val1;
- }
-}
-
-opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params)
-{
- png_structp png = NULL;
- png_infop info = NULL;
- double gamma;
- int bit_depth, interlace_type, compression_type, filter_type;
- OPJ_UINT32 i;
- png_uint_32 width, height = 0U;
- int color_type;
- FILE *reader = NULL;
- OPJ_BYTE** rows = NULL;
- OPJ_INT32* row32s = NULL;
- /* j2k: */
- opj_image_t *image = NULL;
- opj_image_cmptparm_t cmptparm[4];
- OPJ_UINT32 nr_comp;
- OPJ_BYTE sigbuf[8];
- convert_XXx32s_C1R cvtXXTo32s = NULL;
- convert_32s_CXPX cvtCxToPx = NULL;
- OPJ_INT32* planes[4];
-
- if ((reader = fopen(read_idf, "rb")) == NULL) {
- fprintf(stderr, "pngtoimage: can not open %s\n", read_idf);
- return NULL;
- }
-
- if (fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
- || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) {
- fprintf(stderr, "pngtoimage: %s is no valid PNG file\n", read_idf);
- goto fin;
- }
-
- if ((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL)) == NULL) {
- goto fin;
- }
- if ((info = png_create_info_struct(png)) == NULL) {
- goto fin;
- }
-
- if (setjmp(png_jmpbuf(png))) {
- goto fin;
- }
-
- png_init_io(png, reader);
- png_set_sig_bytes(png, MAGIC_SIZE);
-
- png_read_info(png, info);
-
- if (png_get_IHDR(png, info, &width, &height,
- &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_type) == 0) {
- goto fin;
- }
-
- /* png_set_expand():
- * 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.
- */
- if (color_type == PNG_COLOR_TYPE_PALETTE) {
- png_set_expand(png);
- }
-
- if (png_get_valid(png, info, PNG_INFO_tRNS)) {
- png_set_expand(png);
- }
- /* We might wan't to expand background */
- /*
- if(png_get_valid(png, info, PNG_INFO_bKGD)) {
- png_color_16p bgnd;
- png_get_bKGD(png, info, &bgnd);
- png_set_background(png, bgnd, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- }
- */
-
- if (!png_get_gAMA(png, info, &gamma)) {
- gamma = 1.0;
- }
-
- /* we're not displaying but converting, screen gamma == 1.0 */
- png_set_gamma(png, 1.0, gamma);
-
- png_read_update_info(png, info);
-
- color_type = png_get_color_type(png, info);
-
- switch (color_type) {
- case PNG_COLOR_TYPE_GRAY:
- nr_comp = 1;
- break;
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- nr_comp = 2;
- break;
- case PNG_COLOR_TYPE_RGB:
- nr_comp = 3;
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- nr_comp = 4;
- break;
- default:
- fprintf(stderr, "pngtoimage: colortype %d is not supported\n", color_type);
- goto fin;
- }
- cvtCxToPx = convert_32s_CXPX_LUT[nr_comp];
- bit_depth = png_get_bit_depth(png, info);
-
- switch (bit_depth) {
- case 1:
- case 2:
- case 4:
- case 8:
- cvtXXTo32s = convert_XXu32s_C1R_LUT[bit_depth];
- break;
- case 16: /* 16 bpp is specific to PNG */
- cvtXXTo32s = convert_16u32s_C1R;
- break;
- default:
- fprintf(stderr, "pngtoimage: bit depth %d is not supported\n", bit_depth);
- goto fin;
- }
-
-
- rows = (OPJ_BYTE**)calloc(height + 1, sizeof(OPJ_BYTE*));
- if (rows == NULL) {
- fprintf(stderr, "pngtoimage: memory out\n");
- goto fin;
- }
- for (i = 0; i < height; ++i) {
- rows[i] = (OPJ_BYTE*)malloc(png_get_rowbytes(png, info));
- if (rows[i] == NULL) {
- fprintf(stderr, "pngtoimage: memory out\n");
- goto fin;
- }
- }
- png_read_image(png, rows);
-
- /* Create image */
- memset(cmptparm, 0, sizeof(cmptparm));
- for (i = 0; i < nr_comp; ++i) {
- cmptparm[i].prec = (OPJ_UINT32)bit_depth;
- /* bits_per_pixel: 8 or 16 */
- cmptparm[i].bpp = (OPJ_UINT32)bit_depth;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = (OPJ_UINT32)params->subsampling_dx;
- cmptparm[i].dy = (OPJ_UINT32)params->subsampling_dy;
- cmptparm[i].w = (OPJ_UINT32)width;
- cmptparm[i].h = (OPJ_UINT32)height;
- }
-
- image = opj_image_create(nr_comp, &cmptparm[0],
- (nr_comp > 2U) ? OPJ_CLRSPC_SRGB : OPJ_CLRSPC_GRAY);
- if (image == NULL) {
- goto fin;
- }
- image->x0 = (OPJ_UINT32)params->image_offset_x0;
- image->y0 = (OPJ_UINT32)params->image_offset_y0;
- image->x1 = (OPJ_UINT32)(image->x0 + (width - 1) * (OPJ_UINT32)
- params->subsampling_dx + 1 + image->x0);
- image->y1 = (OPJ_UINT32)(image->y0 + (height - 1) * (OPJ_UINT32)
- params->subsampling_dy + 1 + image->y0);
-
- row32s = (OPJ_INT32 *)malloc((size_t)width * nr_comp * sizeof(OPJ_INT32));
- if (row32s == NULL) {
- goto fin;
- }
-
- /* Set alpha channel */
- image->comps[nr_comp - 1U].alpha = 1U - (nr_comp & 1U);
-
- for (i = 0; i < nr_comp; i++) {
- planes[i] = image->comps[i].data;
- }
-
- for (i = 0; i < height; ++i) {
- cvtXXTo32s(rows[i], row32s, (OPJ_SIZE_T)width * nr_comp);
- cvtCxToPx(row32s, planes, width);
- planes[0] += width;
- planes[1] += width;
- planes[2] += width;
- planes[3] += width;
- }
-fin:
- if (rows) {
- for (i = 0; i < height; ++i)
- if (rows[i]) {
- free(rows[i]);
- }
- free(rows);
- }
- if (row32s) {
- free(row32s);
- }
- if (png) {
- png_destroy_read_struct(&png, &info, NULL);
- }
-
- fclose(reader);
-
- return image;
-
-}/* pngtoimage() */
-
-
-static void convert_32s16u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; i++) {
- OPJ_UINT32 val = (OPJ_UINT32)pSrc[i];
- *pDst++ = (OPJ_BYTE)(val >> 8);
- *pDst++ = (OPJ_BYTE)val;
- }
-}
-int imagetopng(opj_image_t * image, const char *write_idf)
-{
- FILE * volatile writer = NULL;
- png_structp png = NULL;
- png_infop info = NULL;
- png_bytep volatile row_buf = NULL;
- int nr_comp, color_type;
- volatile int prec;
- png_color_8 sig_bit;
- OPJ_INT32 const* planes[4];
- int i;
- OPJ_INT32* volatile buffer32s = NULL;
-
- volatile int fails = 1;
-
- memset(&sig_bit, 0, sizeof(sig_bit));
- prec = (int)image->comps[0].prec;
- planes[0] = image->comps[0].data;
- nr_comp = (int)image->numcomps;
-
- if (nr_comp > 4) {
- nr_comp = 4;
- }
- for (i = 1; i < nr_comp; ++i) {
- if (image->comps[0].dx != image->comps[i].dx) {
- break;
- }
- if (image->comps[0].dy != image->comps[i].dy) {
- break;
- }
- if (image->comps[0].prec != image->comps[i].prec) {
- break;
- }
- if (image->comps[0].sgnd != image->comps[i].sgnd) {
- break;
- }
- planes[i] = image->comps[i].data;
- }
- if (i != nr_comp) {
- fprintf(stderr,
- "imagetopng: All components shall have the same subsampling, same bit depth, same sign.\n");
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
- for (i = 0; i < nr_comp; ++i) {
- clip_component(&(image->comps[i]), image->comps[0].prec);
- }
- if (prec > 8 && prec < 16) {
- for (i = 0; i < nr_comp; ++i) {
- scale_component(&(image->comps[i]), 16);
- }
- prec = 16;
- } else if (prec < 8 && nr_comp > 1) { /* GRAY_ALPHA, RGB, RGB_ALPHA */
- for (i = 0; i < nr_comp; ++i) {
- scale_component(&(image->comps[i]), 8);
- }
- prec = 8;
- } else if ((prec > 1) && (prec < 8) && ((prec == 6) ||
- ((prec & 1) == 1))) { /* GRAY with non native precision */
- if ((prec == 5) || (prec == 6)) {
- prec = 8;
- } else {
- prec++;
- }
- for (i = 0; i < nr_comp; ++i) {
- scale_component(&(image->comps[i]), (OPJ_UINT32)prec);
- }
- }
-
- if (prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) {
- fprintf(stderr, "imagetopng: can not create %s\n\twrong bit_depth %d\n",
- write_idf, prec);
- return fails;
- }
-
- writer = fopen(write_idf, "wb");
-
- if (writer == NULL) {
- return fails;
- }
-
- /* 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 = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL);
- /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
-
- if (png == NULL) {
- goto fin;
- }
-
- /* Allocate/initialize the image information data. REQUIRED
- */
- info = png_create_info_struct(png);
-
- if (info == NULL) {
- goto fin;
- }
-
- /* Set error handling. REQUIRED if you are not supplying your own
- * error handling functions in the png_create_write_struct() call.
- */
- if (setjmp(png_jmpbuf(png))) {
- goto fin;
- }
-
- /* I/O initialization functions is REQUIRED
- */
- png_init_io(png, writer);
-
- /* 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
- *
- * ERRORS:
- *
- * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
- * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
- *
- */
- png_set_compression_level(png, Z_BEST_COMPRESSION);
-
- if (nr_comp >= 3) { /* RGB(A) */
- color_type = PNG_COLOR_TYPE_RGB;
- sig_bit.red = sig_bit.green = sig_bit.blue = (png_byte)prec;
- } else { /* GRAY(A) */
- color_type = PNG_COLOR_TYPE_GRAY;
- sig_bit.gray = (png_byte)prec;
- }
- if ((nr_comp & 1) == 0) { /* ALPHA */
- color_type |= PNG_COLOR_MASK_ALPHA;
- sig_bit.alpha = (png_byte)prec;
- }
-
- png_set_IHDR(png, info, image->comps[0].w, image->comps[0].h, prec, color_type,
- PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
- png_set_sBIT(png, info, &sig_bit);
- /* png_set_gamma(png, 2.2, 1./2.2); */
- /* png_set_sRGB(png, info, PNG_sRGB_INTENT_PERCEPTUAL); */
- png_write_info(png, info);
-
- /* setup conversion */
- {
- OPJ_SIZE_T rowStride;
- png_size_t png_row_size;
-
- png_row_size = png_get_rowbytes(png, info);
- rowStride = ((OPJ_SIZE_T)image->comps[0].w * (OPJ_SIZE_T)nr_comp *
- (OPJ_SIZE_T)prec + 7U) / 8U;
- if (rowStride != (OPJ_SIZE_T)png_row_size) {
- fprintf(stderr, "Invalid PNG row size\n");
- goto fin;
- }
- row_buf = (png_bytep)malloc(png_row_size);
- if (row_buf == NULL) {
- fprintf(stderr, "Can't allocate memory for PNG row\n");
- goto fin;
- }
- buffer32s = (OPJ_INT32*)malloc((OPJ_SIZE_T)image->comps[0].w *
- (OPJ_SIZE_T)nr_comp * sizeof(OPJ_INT32));
- if (buffer32s == NULL) {
- fprintf(stderr, "Can't allocate memory for interleaved 32s row\n");
- goto fin;
- }
- }
-
- /* convert */
- {
- OPJ_SIZE_T width = image->comps[0].w;
- OPJ_UINT32 y;
- convert_32s_PXCX cvtPxToCx = convert_32s_PXCX_LUT[nr_comp];
- convert_32sXXx_C1R cvt32sToPack = NULL;
- OPJ_INT32 adjust = image->comps[0].sgnd ? 1 << (prec - 1) : 0;
- png_bytep row_buf_cpy = row_buf;
- OPJ_INT32* buffer32s_cpy = buffer32s;
-
- switch (prec) {
- case 1:
- case 2:
- case 4:
- case 8:
- cvt32sToPack = convert_32sXXu_C1R_LUT[prec];
- break;
- case 16:
- cvt32sToPack = convert_32s16u_C1R;
- break;
- default:
- /* never here */
- break;
- }
-
- for (y = 0; y < image->comps[0].h; ++y) {
- cvtPxToCx(planes, buffer32s_cpy, width, adjust);
- cvt32sToPack(buffer32s_cpy, row_buf_cpy, width * (OPJ_SIZE_T)nr_comp);
- png_write_row(png, row_buf_cpy);
- planes[0] += width;
- planes[1] += width;
- planes[2] += width;
- planes[3] += width;
- }
- }
-
- png_write_end(png, info);
-
- fails = 0;
-
-fin:
- if (png) {
- png_destroy_write_struct(&png, &info);
- }
- if (row_buf) {
- free(row_buf);
- }
- if (buffer32s) {
- free(buffer32s);
- }
- fclose(writer);
-
- if (fails) {
- (void)remove(write_idf); /* ignore return value */
- }
-
- return fails;
-}/* imagetopng() */
diff --git a/openjpeg/src/bin/jp2/converttif.c b/openjpeg/src/bin/jp2/converttif.c
deleted file mode 100644
index 6e5c4f40..00000000
--- a/openjpeg/src/bin/jp2/converttif.c
+++ /dev/null
@@ -1,1510 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2015, Matthieu Darbois
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-
-#ifndef OPJ_HAVE_LIBTIFF
-# error OPJ_HAVE_LIBTIFF_NOT_DEFINED
-#endif /* OPJ_HAVE_LIBTIFF */
-
-#include <tiffio.h>
-#include "openjpeg.h"
-#include "convert.h"
-#include "opj_inttypes.h"
-
-/* -->> -->> -->> -->>
-
- TIFF IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-#define PUTBITS2(s, nb) \
- trailing <<= remaining; \
- trailing |= (unsigned int)((s) >> (nb - remaining)); \
- *pDst++ = (OPJ_BYTE)trailing; \
- trailing = (unsigned int)((s) & ((1U << (nb - remaining)) - 1U)); \
- if (nb >= (remaining + 8)) { \
- *pDst++ = (OPJ_BYTE)(trailing >> (nb - (remaining + 8))); \
- trailing &= (unsigned int)((1U << (nb - (remaining + 8))) - 1U); \
- remaining += 16 - nb; \
- } else { \
- remaining += 8 - nb; \
- }
-
-#define PUTBITS(s, nb) \
- if (nb >= remaining) { \
- PUTBITS2(s, nb) \
- } else { \
- trailing <<= nb; \
- trailing |= (unsigned int)(s); \
- remaining -= nb; \
- }
-#define FLUSHBITS() \
- if (remaining != 8) { \
- trailing <<= remaining; \
- *pDst++ = (OPJ_BYTE)trailing; \
- }
-
-static void tif_32sto3u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 << 2) | (src2 >> 1));
- *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 << 4) | (src4 << 1) | (src5 >> 2));
- *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 << 3) | (src7));
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS((OPJ_UINT32)pSrc[i + 0], 3)
- if (length > 1U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 1], 3)
- if (length > 2U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 2], 3)
- if (length > 3U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 3], 3)
- if (length > 4U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 4], 3)
- if (length > 5U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 5], 3)
- if (length > 6U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 6], 3)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-
-static void tif_32sto5u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 2));
- *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 << 1) | (src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 1));
- *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 << 2) | (src6 >> 3));
- *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7));
-
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS((OPJ_UINT32)pSrc[i + 0], 5)
- if (length > 1U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 1], 5)
- if (length > 2U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 2], 5)
- if (length > 3U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 3], 5)
- if (length > 4U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 4], 5)
- if (length > 5U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 5], 5)
- if (length > 6U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 6], 5)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-
-static void tif_32sto7u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 6));
- *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 5));
- *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 3));
- *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 2));
- *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 1));
- *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7));
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS((OPJ_UINT32)pSrc[i + 0], 7)
- if (length > 1U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 1], 7)
- if (length > 2U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 2], 7)
- if (length > 3U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 3], 7)
- if (length > 4U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 4], 7)
- if (length > 5U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 5], 7)
- if (length > 6U) {
- PUTBITS((OPJ_UINT32)pSrc[i + 6], 7)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-
-static void tif_32sto9u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 >> 1));
- *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 >> 2));
- *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 3));
- *pDst++ = (OPJ_BYTE)((src2 << 5) | (src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 5));
- *pDst++ = (OPJ_BYTE)((src4 << 3) | (src5 >> 6));
- *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 7));
- *pDst++ = (OPJ_BYTE)((src6 << 1) | (src7 >> 8));
- *pDst++ = (OPJ_BYTE)(src7);
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS2((OPJ_UINT32)pSrc[i + 0], 9)
- if (length > 1U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 1], 9)
- if (length > 2U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 2], 9)
- if (length > 3U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 3], 9)
- if (length > 4U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 4], 9)
- if (length > 5U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 5], 9)
- if (length > 6U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 6], 9)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-
-static void tif_32sto10u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
-
- *pDst++ = (OPJ_BYTE)(src0 >> 2);
- *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2) | (src3 >> 8));
- *pDst++ = (OPJ_BYTE)(src3);
- }
-
- if (length & 3U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = 0U;
- OPJ_UINT32 src2 = 0U;
- length = length & 3U;
-
- if (length > 1U) {
- src1 = (OPJ_UINT32)pSrc[i + 1];
- if (length > 2U) {
- src2 = (OPJ_UINT32)pSrc[i + 2];
- }
- }
- *pDst++ = (OPJ_BYTE)(src0 >> 2);
- *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
- if (length > 1U) {
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
- if (length > 2U) {
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2));
- }
- }
- }
-}
-static void tif_32sto11u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 >> 3));
- *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 >> 6));
- *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 9));
- *pDst++ = (OPJ_BYTE)((src2 >> 1));
- *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 7));
- *pDst++ = (OPJ_BYTE)((src4 << 1) | (src5 >> 10));
- *pDst++ = (OPJ_BYTE)((src5 >> 2));
- *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 5));
- *pDst++ = (OPJ_BYTE)((src6 << 3) | (src7 >> 8));
- *pDst++ = (OPJ_BYTE)(src7);
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS2((OPJ_UINT32)pSrc[i + 0], 11)
- if (length > 1U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 1], 11)
- if (length > 2U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 2], 11)
- if (length > 3U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 3], 11)
- if (length > 4U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 4], 11)
- if (length > 5U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 5], 11)
- if (length > 6U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 6], 11)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-static void tif_32sto12u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
-
- *pDst++ = (OPJ_BYTE)(src0 >> 4);
- *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4) | (src1 >> 8));
- *pDst++ = (OPJ_BYTE)(src1);
- }
-
- if (length & 1U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- *pDst++ = (OPJ_BYTE)(src0 >> 4);
- *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4));
- }
-}
-static void tif_32sto13u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 >> 5));
- *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 10));
- *pDst++ = (OPJ_BYTE)((src1 >> 2));
- *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 7));
- *pDst++ = (OPJ_BYTE)((src2 << 1) | (src3 >> 12));
- *pDst++ = (OPJ_BYTE)((src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 9));
- *pDst++ = (OPJ_BYTE)((src4 >> 1));
- *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 >> 6));
- *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 11));
- *pDst++ = (OPJ_BYTE)((src6 >> 3));
- *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7 >> 8));
- *pDst++ = (OPJ_BYTE)(src7);
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS2((OPJ_UINT32)pSrc[i + 0], 13)
- if (length > 1U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 1], 13)
- if (length > 2U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 2], 13)
- if (length > 3U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 3], 13)
- if (length > 4U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 4], 13)
- if (length > 5U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 5], 13)
- if (length > 6U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 6], 13)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-static void tif_32sto14u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
-
- *pDst++ = (OPJ_BYTE)(src0 >> 6);
- *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
- *pDst++ = (OPJ_BYTE)(src1 >> 4);
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
- *pDst++ = (OPJ_BYTE)(src2 >> 2);
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | (src3 >> 8));
- *pDst++ = (OPJ_BYTE)(src3);
- }
-
- if (length & 3U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = 0U;
- OPJ_UINT32 src2 = 0U;
- length = length & 3U;
-
- if (length > 1U) {
- src1 = (OPJ_UINT32)pSrc[i + 1];
- if (length > 2U) {
- src2 = (OPJ_UINT32)pSrc[i + 2];
- }
- }
- *pDst++ = (OPJ_BYTE)(src0 >> 6);
- *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
- if (length > 1U) {
- *pDst++ = (OPJ_BYTE)(src1 >> 4);
- *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
- if (length > 2U) {
- *pDst++ = (OPJ_BYTE)(src2 >> 2);
- *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
- }
- }
- }
-}
-static void tif_32sto15u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
-
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
- OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
- OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
- OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
- OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
- OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
- OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
- OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
-
- *pDst++ = (OPJ_BYTE)((src0 >> 7));
- *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 14));
- *pDst++ = (OPJ_BYTE)((src1 >> 6));
- *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 13));
- *pDst++ = (OPJ_BYTE)((src2 >> 5));
- *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 12));
- *pDst++ = (OPJ_BYTE)((src3 >> 4));
- *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 11));
- *pDst++ = (OPJ_BYTE)((src4 >> 3));
- *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 10));
- *pDst++ = (OPJ_BYTE)((src5 >> 2));
- *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 9));
- *pDst++ = (OPJ_BYTE)((src6 >> 1));
- *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7 >> 8));
- *pDst++ = (OPJ_BYTE)(src7);
- }
-
- if (length & 7U) {
- unsigned int trailing = 0U;
- int remaining = 8U;
- length &= 7U;
- PUTBITS2((OPJ_UINT32)pSrc[i + 0], 15)
- if (length > 1U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 1], 15)
- if (length > 2U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 2], 15)
- if (length > 3U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 3], 15)
- if (length > 4U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 4], 15)
- if (length > 5U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 5], 15)
- if (length > 6U) {
- PUTBITS2((OPJ_UINT32)pSrc[i + 6], 15)
- }
- }
- }
- }
- }
- }
- FLUSHBITS()
- }
-}
-static void tif_32sto16u(const OPJ_INT32* pSrc, OPJ_UINT16* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; ++i) {
- pDst[i] = (OPJ_UINT16)pSrc[i];
- }
-}
-
-int imagetotif(opj_image_t * image, const char *outfile)
-{
- TIFF *tif;
- tdata_t buf;
- uint32 width, height;
- uint16 bps, tiPhoto;
- int adjust, sgnd;
- int64_t strip_size, rowStride, TIFF_MAX;
- OPJ_UINT32 i, numcomps;
- OPJ_INT32* buffer32s = NULL;
- OPJ_INT32 const* planes[4];
- convert_32s_PXCX cvtPxToCx = NULL;
- convert_32sXXx_C1R cvt32sToTif = NULL;
-
- bps = (uint16)image->comps[0].prec;
- planes[0] = image->comps[0].data;
-
- numcomps = image->numcomps;
-
- if (image->color_space == OPJ_CLRSPC_CMYK) {
- if (numcomps < 4U) {
- fprintf(stderr,
- "imagetotif: CMYK images shall be composed of at least 4 planes.\n");
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
- tiPhoto = PHOTOMETRIC_SEPARATED;
- if (numcomps > 4U) {
- numcomps = 4U; /* Alpha not supported */
- }
- } else if (numcomps > 2U) {
- tiPhoto = PHOTOMETRIC_RGB;
- if (numcomps > 4U) {
- numcomps = 4U;
- }
- } else {
- tiPhoto = PHOTOMETRIC_MINISBLACK;
- }
- for (i = 1U; i < numcomps; ++i) {
- if (image->comps[0].dx != image->comps[i].dx) {
- break;
- }
- if (image->comps[0].dy != image->comps[i].dy) {
- break;
- }
- if (image->comps[0].prec != image->comps[i].prec) {
- break;
- }
- if (image->comps[0].sgnd != image->comps[i].sgnd) {
- break;
- }
- planes[i] = image->comps[i].data;
- }
- if (i != numcomps) {
- fprintf(stderr,
- "imagetotif: All components shall have the same subsampling, same bit depth.\n");
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
-
- if (bps > 16) {
- bps = 0;
- }
- if (bps == 0) {
- fprintf(stderr, "imagetotif: Bits=%d, Only 1 to 16 bits implemented\n", bps);
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
- tif = TIFFOpen(outfile, "wb");
- if (!tif) {
- fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
- return 1;
- }
- for (i = 0U; i < numcomps; ++i) {
- clip_component(&(image->comps[i]), image->comps[0].prec);
- }
- cvtPxToCx = convert_32s_PXCX_LUT[numcomps];
- switch (bps) {
- case 1:
- case 2:
- case 4:
- case 6:
- case 8:
- cvt32sToTif = convert_32sXXu_C1R_LUT[bps];
- break;
- case 3:
- cvt32sToTif = tif_32sto3u;
- break;
- case 5:
- cvt32sToTif = tif_32sto5u;
- break;
- case 7:
- cvt32sToTif = tif_32sto7u;
- break;
- case 9:
- cvt32sToTif = tif_32sto9u;
- break;
- case 10:
- cvt32sToTif = tif_32sto10u;
- break;
- case 11:
- cvt32sToTif = tif_32sto11u;
- break;
- case 12:
- cvt32sToTif = tif_32sto12u;
- break;
- case 13:
- cvt32sToTif = tif_32sto13u;
- break;
- case 14:
- cvt32sToTif = tif_32sto14u;
- break;
- case 15:
- cvt32sToTif = tif_32sto15u;
- break;
- case 16:
- cvt32sToTif = (convert_32sXXx_C1R)tif_32sto16u;
- break;
- default:
- /* never here */
- break;
- }
- sgnd = (int)image->comps[0].sgnd;
- adjust = sgnd ? (int)(1 << (image->comps[0].prec - 1)) : 0;
- width = (uint32)image->comps[0].w;
- height = (uint32)image->comps[0].h;
-
- TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
- TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
- TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (uint16)numcomps);
- TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
- TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
- TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, tiPhoto);
- TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
- if (sizeof(tsize_t) == 4) {
- TIFF_MAX = INT_MAX;
- } else {
- TIFF_MAX = UINT_MAX;
- }
- strip_size = (int64_t)TIFFStripSize(tif);
-
- if ((int64_t)width > (int64_t)(TIFF_MAX / numcomps) ||
- (int64_t)(width * numcomps) > (int64_t)(TIFF_MAX / bps) ||
- (int64_t)(width * numcomps) > (int64_t)(TIFF_MAX / (int64_t)sizeof(
- OPJ_INT32))) {
- fprintf(stderr, "Buffer overflow\n");
- TIFFClose(tif);
- return 1;
- }
- rowStride = (int64_t)((width * numcomps * bps + 7U) / 8U);
- if (rowStride != strip_size) {
- fprintf(stderr, "Invalid TIFF strip size\n");
- TIFFClose(tif);
- return 1;
- }
- buf = malloc((OPJ_SIZE_T)strip_size);
- if (buf == NULL) {
- TIFFClose(tif);
- return 1;
- }
- buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)(width * numcomps * sizeof(
- OPJ_INT32)));
- if (buffer32s == NULL) {
- _TIFFfree(buf);
- TIFFClose(tif);
- return 1;
- }
-
- for (i = 0; i < image->comps[0].h; ++i) {
- cvtPxToCx(planes, buffer32s, (OPJ_SIZE_T)width, adjust);
- cvt32sToTif(buffer32s, (OPJ_BYTE *)buf, (OPJ_SIZE_T)width * numcomps);
- (void)TIFFWriteEncodedStrip(tif, i, (void*)buf, (tsize_t)strip_size);
- planes[0] += width;
- planes[1] += width;
- planes[2] += width;
- planes[3] += width;
- }
- _TIFFfree((void*)buf);
- TIFFClose(tif);
- free(buffer32s);
-
- return 0;
-}/* imagetotif() */
-
-#define GETBITS(dest, nb) { \
- int needed = (nb); \
- unsigned int dst = 0U; \
- if (available == 0) { \
- val = *pSrc++; \
- available = 8; \
- } \
- while (needed > available) { \
- dst |= val & ((1U << available) - 1U); \
- needed -= available; \
- dst <<= needed; \
- val = *pSrc++; \
- available = 8; \
- } \
- dst |= (val >> (available - needed)) & ((1U << needed) - 1U); \
- available -= needed; \
- dest = (OPJ_INT32)dst; \
-}
-
-static void tif_3uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 >> 5));
- pDst[i + 1] = (OPJ_INT32)(((val0 & 0x1FU) >> 2));
- pDst[i + 2] = (OPJ_INT32)(((val0 & 0x3U) << 1) | (val1 >> 7));
- pDst[i + 3] = (OPJ_INT32)(((val1 & 0x7FU) >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val1 & 0xFU) >> 1));
- pDst[i + 5] = (OPJ_INT32)(((val1 & 0x1U) << 2) | (val2 >> 6));
- pDst[i + 6] = (OPJ_INT32)(((val2 & 0x3FU) >> 3));
- pDst[i + 7] = (OPJ_INT32)(((val2 & 0x7U)));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 3)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 3)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 3)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 3)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 3)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 3)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 3)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_5uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 >> 3));
- pDst[i + 1] = (OPJ_INT32)(((val0 & 0x7U) << 2) | (val1 >> 6));
- pDst[i + 2] = (OPJ_INT32)(((val1 & 0x3FU) >> 1));
- pDst[i + 3] = (OPJ_INT32)(((val1 & 0x1U) << 4) | (val2 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val2 & 0xFU) << 1) | (val3 >> 7));
- pDst[i + 5] = (OPJ_INT32)(((val3 & 0x7FU) >> 2));
- pDst[i + 6] = (OPJ_INT32)(((val3 & 0x3U) << 3) | (val4 >> 5));
- pDst[i + 7] = (OPJ_INT32)(((val4 & 0x1FU)));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 5)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 5)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 5)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 5)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 5)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 5)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 5)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_7uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 >> 1));
- pDst[i + 1] = (OPJ_INT32)(((val0 & 0x1U) << 6) | (val1 >> 2));
- pDst[i + 2] = (OPJ_INT32)(((val1 & 0x3U) << 5) | (val2 >> 3));
- pDst[i + 3] = (OPJ_INT32)(((val2 & 0x7U) << 4) | (val3 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val3 & 0xFU) << 3) | (val4 >> 5));
- pDst[i + 5] = (OPJ_INT32)(((val4 & 0x1FU) << 2) | (val5 >> 6));
- pDst[i + 6] = (OPJ_INT32)(((val5 & 0x3FU) << 1) | (val6 >> 7));
- pDst[i + 7] = (OPJ_INT32)(((val6 & 0x7FU)));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 7)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 7)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 7)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 7)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 7)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 7)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 7)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_9uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
- OPJ_UINT32 val7 = *pSrc++;
- OPJ_UINT32 val8 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 1) | (val1 >> 7));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x7FU) << 2) | (val2 >> 6));
- pDst[i + 2] = (OPJ_INT32)(((val2 & 0x3FU) << 3) | (val3 >> 5));
- pDst[i + 3] = (OPJ_INT32)(((val3 & 0x1FU) << 4) | (val4 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val4 & 0xFU) << 5) | (val5 >> 3));
- pDst[i + 5] = (OPJ_INT32)(((val5 & 0x7U) << 6) | (val6 >> 2));
- pDst[i + 6] = (OPJ_INT32)(((val6 & 0x3U) << 7) | (val7 >> 1));
- pDst[i + 7] = (OPJ_INT32)(((val7 & 0x1U) << 8) | (val8));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 9)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 9)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 9)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 9)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 9)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 9)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 9)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_10uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
- pDst[i + 2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
- pDst[i + 3] = (OPJ_INT32)(((val3 & 0x3U) << 8) | val4);
-
- }
- if (length & 3U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- length = length & 3U;
- pDst[i + 0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
-
- if (length > 1U) {
- OPJ_UINT32 val2 = *pSrc++;
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
- if (length > 2U) {
- OPJ_UINT32 val3 = *pSrc++;
- pDst[i + 2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
- }
- }
- }
-}
-static void tif_11uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
- OPJ_UINT32 val7 = *pSrc++;
- OPJ_UINT32 val8 = *pSrc++;
- OPJ_UINT32 val9 = *pSrc++;
- OPJ_UINT32 val10 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 3) | (val1 >> 5));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x1FU) << 6) | (val2 >> 2));
- pDst[i + 2] = (OPJ_INT32)(((val2 & 0x3U) << 9) | (val3 << 1) | (val4 >> 7));
- pDst[i + 3] = (OPJ_INT32)(((val4 & 0x7FU) << 4) | (val5 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val5 & 0xFU) << 7) | (val6 >> 1));
- pDst[i + 5] = (OPJ_INT32)(((val6 & 0x1U) << 10) | (val7 << 2) | (val8 >> 6));
- pDst[i + 6] = (OPJ_INT32)(((val8 & 0x3FU) << 5) | (val9 >> 3));
- pDst[i + 7] = (OPJ_INT32)(((val9 & 0x7U) << 8) | (val10));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 11)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 11)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 11)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 11)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 11)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 11)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 11)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_12uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0xFU) << 8) | val2);
- }
- if (length & 1U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- pDst[i + 0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
- }
-}
-static void tif_13uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
- OPJ_UINT32 val7 = *pSrc++;
- OPJ_UINT32 val8 = *pSrc++;
- OPJ_UINT32 val9 = *pSrc++;
- OPJ_UINT32 val10 = *pSrc++;
- OPJ_UINT32 val11 = *pSrc++;
- OPJ_UINT32 val12 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 5) | (val1 >> 3));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x7U) << 10) | (val2 << 2) | (val3 >> 6));
- pDst[i + 2] = (OPJ_INT32)(((val3 & 0x3FU) << 7) | (val4 >> 1));
- pDst[i + 3] = (OPJ_INT32)(((val4 & 0x1U) << 12) | (val5 << 4) | (val6 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val6 & 0xFU) << 9) | (val7 << 1) | (val8 >> 7));
- pDst[i + 5] = (OPJ_INT32)(((val8 & 0x7FU) << 6) | (val9 >> 2));
- pDst[i + 6] = (OPJ_INT32)(((val9 & 0x3U) << 11) | (val10 << 3) | (val11 >> 5));
- pDst[i + 7] = (OPJ_INT32)(((val11 & 0x1FU) << 8) | (val12));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 13)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 13)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 13)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 13)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 13)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 13)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 13)
- }
- }
- }
- }
- }
- }
- }
-}
-static void tif_14uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
- pDst[i + 2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
- pDst[i + 3] = (OPJ_INT32)(((val5 & 0x3FU) << 8) | val6);
-
- }
- if (length & 3U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- length = length & 3U;
- pDst[i + 0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
-
- if (length > 1U) {
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
- if (length > 2U) {
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- pDst[i + 2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
- }
- }
- }
-}
-static void tif_15uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
- OPJ_UINT32 val0 = *pSrc++;
- OPJ_UINT32 val1 = *pSrc++;
- OPJ_UINT32 val2 = *pSrc++;
- OPJ_UINT32 val3 = *pSrc++;
- OPJ_UINT32 val4 = *pSrc++;
- OPJ_UINT32 val5 = *pSrc++;
- OPJ_UINT32 val6 = *pSrc++;
- OPJ_UINT32 val7 = *pSrc++;
- OPJ_UINT32 val8 = *pSrc++;
- OPJ_UINT32 val9 = *pSrc++;
- OPJ_UINT32 val10 = *pSrc++;
- OPJ_UINT32 val11 = *pSrc++;
- OPJ_UINT32 val12 = *pSrc++;
- OPJ_UINT32 val13 = *pSrc++;
- OPJ_UINT32 val14 = *pSrc++;
-
- pDst[i + 0] = (OPJ_INT32)((val0 << 7) | (val1 >> 1));
- pDst[i + 1] = (OPJ_INT32)(((val1 & 0x1U) << 14) | (val2 << 6) | (val3 >> 2));
- pDst[i + 2] = (OPJ_INT32)(((val3 & 0x3U) << 13) | (val4 << 5) | (val5 >> 3));
- pDst[i + 3] = (OPJ_INT32)(((val5 & 0x7U) << 12) | (val6 << 4) | (val7 >> 4));
- pDst[i + 4] = (OPJ_INT32)(((val7 & 0xFU) << 11) | (val8 << 3) | (val9 >> 5));
- pDst[i + 5] = (OPJ_INT32)(((val9 & 0x1FU) << 10) | (val10 << 2) | (val11 >> 6));
- pDst[i + 6] = (OPJ_INT32)(((val11 & 0x3FU) << 9) | (val12 << 1) | (val13 >> 7));
- pDst[i + 7] = (OPJ_INT32)(((val13 & 0x7FU) << 8) | (val14));
-
- }
- if (length & 7U) {
- unsigned int val;
- int available = 0;
-
- length = length & 7U;
-
- GETBITS(pDst[i + 0], 15)
-
- if (length > 1U) {
- GETBITS(pDst[i + 1], 15)
- if (length > 2U) {
- GETBITS(pDst[i + 2], 15)
- if (length > 3U) {
- GETBITS(pDst[i + 3], 15)
- if (length > 4U) {
- GETBITS(pDst[i + 4], 15)
- if (length > 5U) {
- GETBITS(pDst[i + 5], 15)
- if (length > 6U) {
- GETBITS(pDst[i + 6], 15)
- }
- }
- }
- }
- }
- }
- }
-}
-
-/* seems that libtiff decodes this to machine endianness */
-static void tif_16uto32s(const OPJ_UINT16* pSrc, OPJ_INT32* pDst,
- OPJ_SIZE_T length)
-{
- OPJ_SIZE_T i;
- for (i = 0; i < length; i++) {
- pDst[i] = pSrc[i];
- }
-}
-
-/*
- * libtiff/tif_getimage.c : 1,2,4,8,16 bitspersample accepted
- * CINEMA : 12 bit precision
- */
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
- TIFF *tif;
- tdata_t buf;
- tstrip_t strip;
- int64_t strip_size, rowStride, TIFF_MAX;
- int j, currentPlane, numcomps = 0, w, h;
- OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN;
- opj_image_cmptparm_t cmptparm[4]; /* RGBA */
- opj_image_t *image = NULL;
- uint16 tiBps, tiPhoto, tiSf, tiSpp, tiPC;
- uint32 tiWidth, tiHeight;
- OPJ_BOOL is_cinema = OPJ_IS_CINEMA(parameters->rsiz);
- convert_XXx32s_C1R cvtTifTo32s = NULL;
- convert_32s_CXPX cvtCxToPx = NULL;
- OPJ_INT32* buffer32s = NULL;
- OPJ_INT32* planes[4];
-
- tif = TIFFOpen(filename, "r");
-
- if (!tif) {
- fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
- return 0;
- }
- tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
- tiWidth = tiHeight = 0;
-
- TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
- TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
- TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
- TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
- TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
- TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
- TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
- w = (int)tiWidth;
- h = (int)tiHeight;
-
- if (tiSpp == 0 || tiSpp > 4) { /* should be 1 ... 4 */
- fprintf(stderr, "tiftoimage: Bad value for samples per pixel == %d.\n"
- "\tAborting.\n", tiSpp);
- TIFFClose(tif);
- return NULL;
- }
- if (tiBps > 16U || tiBps == 0) {
- fprintf(stderr, "tiftoimage: Bad values for Bits == %d.\n"
- "\tMax. 16 Bits are allowed here.\n\tAborting.\n", tiBps);
- TIFFClose(tif);
- return NULL;
- }
- if (tiPhoto != PHOTOMETRIC_MINISBLACK && tiPhoto != PHOTOMETRIC_RGB) {
- fprintf(stderr,
- "tiftoimage: Bad color format %d.\n\tOnly RGB(A) and GRAY(A) has been implemented\n\tAborting.\n",
- (int) tiPhoto);
- TIFFClose(tif);
- return NULL;
- }
- if (tiWidth == 0 || tiHeight == 0) {
- fprintf(stderr, "tiftoimage: Bad values for width(%u) "
- "and/or height(%u)\n\tAborting.\n", tiWidth, tiHeight);
- TIFFClose(tif);
- return NULL;
- }
- w = (int)tiWidth;
- h = (int)tiHeight;
-
- switch (tiBps) {
- case 1:
- case 2:
- case 4:
- case 6:
- case 8:
- cvtTifTo32s = convert_XXu32s_C1R_LUT[tiBps];
- break;
- /* others are specific to TIFF */
- case 3:
- cvtTifTo32s = tif_3uto32s;
- break;
- case 5:
- cvtTifTo32s = tif_5uto32s;
- break;
- case 7:
- cvtTifTo32s = tif_7uto32s;
- break;
- case 9:
- cvtTifTo32s = tif_9uto32s;
- break;
- case 10:
- cvtTifTo32s = tif_10uto32s;
- break;
- case 11:
- cvtTifTo32s = tif_11uto32s;
- break;
- case 12:
- cvtTifTo32s = tif_12uto32s;
- break;
- case 13:
- cvtTifTo32s = tif_13uto32s;
- break;
- case 14:
- cvtTifTo32s = tif_14uto32s;
- break;
- case 15:
- cvtTifTo32s = tif_15uto32s;
- break;
- case 16:
- cvtTifTo32s = (convert_XXx32s_C1R)tif_16uto32s;
- break;
- default:
- /* never here */
- break;
- }
-
- /* initialize image components */
- memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
- if ((tiPhoto == PHOTOMETRIC_RGB) && (is_cinema) && (tiBps != 12U)) {
- fprintf(stdout, "WARNING:\n"
- "Input image bitdepth is %d bits\n"
- "TIF conversion has automatically rescaled to 12-bits\n"
- "to comply with cinema profiles.\n",
- tiBps);
- } else {
- is_cinema = 0U;
- }
-
- numcomps = tiSpp;
- if (tiPhoto == PHOTOMETRIC_RGB) { /* RGB(A) */
- color_space = OPJ_CLRSPC_SRGB;
- } else if (tiPhoto == PHOTOMETRIC_MINISBLACK) { /* GRAY(A) */
- color_space = OPJ_CLRSPC_GRAY;
- }
-
- cvtCxToPx = convert_32s_CXPX_LUT[numcomps];
- if (tiPC == PLANARCONFIG_SEPARATE) {
- cvtCxToPx = convert_32s_CXPX_LUT[1]; /* override */
- tiSpp = 1U; /* consider only one sample per plane */
- }
-
- for (j = 0; j < numcomps; j++) {
- cmptparm[j].prec = tiBps;
- cmptparm[j].bpp = tiBps;
- cmptparm[j].dx = (OPJ_UINT32)subsampling_dx;
- cmptparm[j].dy = (OPJ_UINT32)subsampling_dy;
- cmptparm[j].w = (OPJ_UINT32)w;
- cmptparm[j].h = (OPJ_UINT32)h;
- }
-
- image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
- if (!image) {
- TIFFClose(tif);
- return NULL;
- }
- /* set image offset and reference grid */
- image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
- image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
- image->x1 = !image->x0 ? (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1 :
- image->x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1;
- if (image->x1 <= image->x0) {
- fprintf(stderr, "tiftoimage: Bad value for image->x1(%d) vs. "
- "image->x0(%d)\n\tAborting.\n", image->x1, image->x0);
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
- image->y1 = !image->y0 ? (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1 :
- image->y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1;
- if (image->y1 <= image->y0) {
- fprintf(stderr, "tiftoimage: Bad value for image->y1(%d) vs. "
- "image->y0(%d)\n\tAborting.\n", image->y1, image->y0);
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
-
- for (j = 0; j < numcomps; j++) {
- planes[j] = image->comps[j].data;
- }
- image->comps[numcomps - 1].alpha = (OPJ_UINT16)(1 - (numcomps & 1));
-
- strip_size = (int64_t)TIFFStripSize(tif);
-
- buf = malloc((OPJ_SIZE_T)strip_size);
- if (buf == NULL) {
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
- if (sizeof(tsize_t) == 4) {
- TIFF_MAX = INT_MAX;
- } else {
- TIFF_MAX = UINT_MAX;
- }
- if ((int64_t)tiWidth > (int64_t)(TIFF_MAX / tiSpp) ||
- (int64_t)(tiWidth * tiSpp) > (int64_t)(TIFF_MAX / tiBps) ||
- (int64_t)(tiWidth * tiSpp) > (int64_t)(TIFF_MAX / (int64_t)sizeof(OPJ_INT32))) {
- fprintf(stderr, "Buffer overflow\n");
- _TIFFfree(buf);
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
-
- rowStride = (int64_t)((tiWidth * tiSpp * tiBps + 7U) / 8U);
- buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)(tiWidth * tiSpp * sizeof(
- OPJ_INT32)));
- if (buffer32s == NULL) {
- _TIFFfree(buf);
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
-
- strip = 0;
- currentPlane = 0;
- do {
- planes[0] = image->comps[currentPlane].data; /* to manage planar data */
- h = (int)tiHeight;
- /* Read the Image components */
- for (; (h > 0) && (strip < TIFFNumberOfStrips(tif)); strip++) {
- const OPJ_UINT8 *dat8;
- int64_t ssize;
-
- ssize = (int64_t)TIFFReadEncodedStrip(tif, strip, buf, (tsize_t)strip_size);
-
- if (ssize < 1 || ssize > strip_size) {
- fprintf(stderr, "tiftoimage: Bad value for ssize(%" PRId64 ") "
- "vs. strip_size(%" PRId64 ").\n\tAborting.\n", ssize, strip_size);
- _TIFFfree(buf);
- _TIFFfree(buffer32s);
- TIFFClose(tif);
- opj_image_destroy(image);
- return NULL;
- }
- dat8 = (const OPJ_UINT8*)buf;
-
- while (ssize >= rowStride) {
- cvtTifTo32s(dat8, buffer32s, (OPJ_SIZE_T)w * tiSpp);
- cvtCxToPx(buffer32s, planes, (OPJ_SIZE_T)w);
- planes[0] += w;
- planes[1] += w;
- planes[2] += w;
- planes[3] += w;
- dat8 += rowStride;
- ssize -= rowStride;
- h--;
- }
- }
- currentPlane++;
- } while ((tiPC == PLANARCONFIG_SEPARATE) && (currentPlane < numcomps));
-
- free(buffer32s);
- _TIFFfree(buf);
- TIFFClose(tif);
-
- if (is_cinema) {
- for (j = 0; j < numcomps; ++j) {
- scale_component(&(image->comps[j]), 12);
- }
-
- }
- return image;
-
-}/* tiftoimage() */
-
diff --git a/openjpeg/src/bin/jp2/index.c b/openjpeg/src/bin/jp2/index.c
deleted file mode 100644
index 3eae2f97..00000000
--- a/openjpeg/src/bin/jp2/index.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include "openjpeg.h"
-#include "index.h"
-#include "opj_inttypes.h"
-
-/* ------------------------------------------------------------------------------------ */
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index)
-{
- int tileno, compno, layno, resno, precno, pack_nb, x, y;
- FILE *stream = NULL;
- double total_disto = 0;
- /* UniPG>> */
- int tilepartno;
- char disto_on, numpix_on;
-
-#ifdef USE_JPWL
- if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) {
- return 0;
- }
-#endif /* USE_JPWL */
- /* <<UniPG */
-
- if (!cstr_info) {
- return 1;
- }
-
- stream = fopen(index, "w");
- if (!stream) {
- fprintf(stderr, "failed to open index file [%s] for writing\n", index);
- return 1;
- }
-
- if (cstr_info->tile[0].distotile > 0.0) {
- disto_on = 1;
- } else {
- disto_on = 0;
- }
-
- if (cstr_info->tile[0].numpix) {
- numpix_on = 1;
- } else {
- numpix_on = 0;
- }
-
- fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
- fprintf(stream, "%d\n", cstr_info->prog);
- fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
- fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
- fprintf(stream, "%d\n", cstr_info->numcomps);
- fprintf(stream, "%d\n", cstr_info->numlayers);
- fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
-
- for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
- fprintf(stream, "[%d,%d] ",
- (1 << cstr_info->tile[0].pdx[resno]),
- (1 << cstr_info->tile[0].pdx[resno])); /* based on tile 0 and component 0 */
- }
-
- fprintf(stream, "\n");
- /* UniPG>> */
- fprintf(stream, "%d\n", cstr_info->main_head_start);
- /* <<UniPG */
- fprintf(stream, "%d\n", cstr_info->main_head_end);
- fprintf(stream, "%d\n", cstr_info->codestream_size);
-
- fprintf(stream, "\nINFO ON TILES\n");
- fprintf(stream, "tileno start_pos end_hd end_tile nbparts");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- if (numpix_on) {
- fprintf(stream, " nbpix");
- }
- if (disto_on && numpix_on) {
- fprintf(stream, " disto/nbpix");
- }
- fprintf(stream, "\n");
-
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- fprintf(stream, "%4d %9d %9d %9d %9d",
- cstr_info->tile[tileno].tileno,
- cstr_info->tile[tileno].start_pos,
- cstr_info->tile[tileno].end_header,
- cstr_info->tile[tileno].end_pos,
- cstr_info->tile[tileno].num_tps);
- if (disto_on) {
- fprintf(stream, " %9e", cstr_info->tile[tileno].distotile);
- }
- if (numpix_on) {
- fprintf(stream, " %9d", cstr_info->tile[tileno].numpix);
- }
- if (disto_on && numpix_on) {
- fprintf(stream, " %9e", cstr_info->tile[tileno].distotile /
- cstr_info->tile[tileno].numpix);
- }
- fprintf(stream, "\n");
- }
-
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- OPJ_OFF_T start_pos, end_ph_pos, end_pos;
- double disto = 0;
- int max_numdecompos = 0;
- pack_nb = 0;
-
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- if (max_numdecompos < cstr_info->numdecompos[compno]) {
- max_numdecompos = cstr_info->numdecompos[compno];
- }
- }
-
- fprintf(stream, "\nTILE %d DETAILS\n", tileno);
- fprintf(stream,
- "part_nb tileno start_pack num_packs start_pos end_tph_pos end_pos\n");
- for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
- fprintf(stream, "%4d %9d %9d %9d %9d %11d %9d\n",
- tilepartno, tileno,
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
- cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
- cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
- cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
- );
-
- if (cstr_info->prog == OPJ_LRCP) { /* LRCP */
- fprintf(stream,
- "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int prec_max;
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- prec_max = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %6" PRId64 " %6" PRId64 " %7"
- PRId64,
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* LRCP */
-
- else if (cstr_info->prog == OPJ_RLCP) { /* RLCP */
- fprintf(stream,
- "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int prec_max;
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- prec_max = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9" PRId64 " %9" PRId64 " %7" PRId64,
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* RLCP */
-
- else if (cstr_info->prog == OPJ_RPCL) { /* RPCL */
-
- fprintf(stream,
- "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < numprec; precno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9" PRId64 " %9" PRId64 " %7" PRId64,
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* precno */
- } /* compno */
- } /* resno */
- } /* RPCL */
-
- else if (cstr_info->prog == OPJ_PCRL) { /* PCRL */
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
-
- /* Count the maximum number of precincts */
- int max_numprec = 0;
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- if (numprec > max_numprec) {
- max_numprec = numprec;
- }
- }
-
- fprintf(stream,
- "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (precno = 0; precno < max_numprec; precno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (precno >= numprec) {
- continue;
- }
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 " %9" PRId64 " %7" PRId64,
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* resno */
- } /* compno */
- } /* precno */
- } /* PCRL */
-
- else { /* CPRL */
- /* Count the maximum number of precincts */
- int max_numprec = 0;
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- if (numprec > max_numprec) {
- max_numprec = numprec;
- }
- }
-
- fprintf(stream,
- "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
-
- for (precno = 0; precno < max_numprec; precno++) {
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (precno >= numprec) {
- continue;
- }
-
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 " %9" PRId64 " %7" PRId64,
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* resno */
- } /* precno */
- } /* compno */
- } /* CPRL */
- } /* tileno */
-
- if (disto_on) {
- fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
- fprintf(stream, "%.8e\n", total_disto); /* SE totale */
- }
- /* UniPG>> */
- /* print the markers' list */
- if (cstr_info->marknum) {
- fprintf(stream, "\nMARKER LIST\n");
- fprintf(stream, "%d\n", cstr_info->marknum);
- fprintf(stream, "type\tstart_pos length\n");
- for (x = 0; x < cstr_info->marknum; x++) {
- fprintf(stream, "%X\t%9" PRId64 " %9d\n", cstr_info->marker[x].type,
- cstr_info->marker[x].pos, cstr_info->marker[x].len);
- }
- }
- /* <<UniPG */
- fclose(stream);
-
- fprintf(stderr, "Generated index file %s\n", index);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jp2/index.h b/openjpeg/src/bin/jp2/index.h
deleted file mode 100644
index b461e91b..00000000
--- a/openjpeg/src/bin/jp2/index.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __J2K_INDEX_H
-#define __J2K_INDEX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __J2K_INDEX_H */
-
diff --git a/openjpeg/src/bin/jp2/opj_compress.c b/openjpeg/src/bin/jp2/opj_compress.c
deleted file mode 100644
index 26454d9e..00000000
--- a/openjpeg/src/bin/jp2/opj_compress.c
+++ /dev/null
@@ -1,2069 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>
- * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
- * Copyright (c) 2012, CS Systemes d'Information, France
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#include <assert.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#else
-#include <strings.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/times.h>
-#endif /* _WIN32 */
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#include "format_defs.h"
-#include "opj_string.h"
-
-typedef struct dircnt {
- /** Buffer for holding images read from Directory*/
- char *filename_buf;
- /** Pointer to the buffer*/
- char **filename;
-} dircnt_t;
-
-typedef struct img_folder {
- /** The directory path of the folder containing input images*/
- char *imgdirpath;
- /** Output format*/
- char *out_format;
- /** Enable option*/
- char set_imgdir;
- /** Enable Cod Format for output*/
- char set_out_format;
-} img_fol_t;
-
-static void encode_help_display(void)
-{
- fprintf(stdout,
- "\nThis is the opj_compress utility from the OpenJPEG project.\n"
- "It compresses various image formats with the JPEG 2000 algorithm.\n"
- "It has been compiled against openjp2 library v%s.\n\n", opj_version());
-
- fprintf(stdout, "Default encoding options:\n");
- fprintf(stdout, "-------------------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " * Lossless\n");
- fprintf(stdout, " * 1 tile\n");
- fprintf(stdout, " * RGB->YCC conversion if at least 3 components\n");
- fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
- fprintf(stdout, " * Size of code-block : 64 x 64\n");
- fprintf(stdout, " * Number of resolutions: 6\n");
- fprintf(stdout, " * No SOP marker in the codestream\n");
- fprintf(stdout, " * No EPH marker in the codestream\n");
- fprintf(stdout, " * No sub-sampling in x or y direction\n");
- fprintf(stdout, " * No mode switch activated\n");
- fprintf(stdout, " * Progression order: LRCP\n");
-#ifdef FIXME_INDEX
- fprintf(stdout, " * No index file\n");
-#endif /* FIXME_INDEX */
- fprintf(stdout, " * No ROI upshifted\n");
- fprintf(stdout, " * No offset of the origin of the image\n");
- fprintf(stdout, " * No offset of the origin of the tiles\n");
- fprintf(stdout, " * Reversible DWT 5-3\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout, " * No JPWL protection\n");
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "\n");
-
- fprintf(stdout, "Note:\n");
- fprintf(stdout, "-----\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
- fprintf(stdout, "COD and QCD never appear in the tile_header.\n");
- fprintf(stdout, "\n");
-
- fprintf(stdout, "Parameters:\n");
- fprintf(stdout, "-----------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Required Parameters (except with -h):\n");
- fprintf(stdout, "One of the two options -ImgDir or -i must be used\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-i <file>\n");
- fprintf(stdout, " Input file\n");
- fprintf(stdout,
- " Known extensions are <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n");
- fprintf(stdout, " If used, '-o <file>' must be provided\n");
- fprintf(stdout, "-o <compressed file>\n");
- fprintf(stdout, " Output file (accepted extensions are j2k or jp2).\n");
- fprintf(stdout, "-ImgDir <dir>\n");
- fprintf(stdout, " Image file Directory path (example ../Images) \n");
- fprintf(stdout, " When using this option -OutFor must be used\n");
- fprintf(stdout, "-OutFor <J2K|J2C|JP2>\n");
- fprintf(stdout, " Output format for compressed files.\n");
- fprintf(stdout, " Required only if -ImgDir is used\n");
- fprintf(stdout,
- "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
- fprintf(stdout, " Characteristics of the raw input image\n");
- fprintf(stdout,
- " If subsampling is omitted, 1x1 is assumed for all components\n");
- fprintf(stdout, " Example: -F 512,512,3,8,u@1x1:2x2:2x2\n");
- fprintf(stdout,
- " for raw 512x512 image with 4:2:0 subsampling\n");
- fprintf(stdout, " Required only if RAW or RAWL input file is provided.\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Optional Parameters:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-h\n");
- fprintf(stdout, " Display the help information.\n");
- fprintf(stdout, "-r <compression ratio>,<compression ratio>,...\n");
- fprintf(stdout, " Different compression ratios for successive layers.\n");
- fprintf(stdout,
- " The rate specified for each quality level is the desired\n");
- fprintf(stdout, " compression factor (use 1 for lossless)\n");
- fprintf(stdout, " Decreasing ratios required.\n");
- fprintf(stdout, " Example: -r 20,10,1 means \n");
- fprintf(stdout, " quality layer 1: compress 20x, \n");
- fprintf(stdout, " quality layer 2: compress 10x \n");
- fprintf(stdout, " quality layer 3: compress lossless\n");
- fprintf(stdout, " Options -r and -q cannot be used together.\n");
- fprintf(stdout, "-q <psnr value>,<psnr value>,<psnr value>,...\n");
- fprintf(stdout, " Different psnr for successive layers (-q 30,40,50).\n");
- fprintf(stdout, " Increasing PSNR values required, except 0 which can\n");
- fprintf(stdout, " be used for the last layer to indicate it is lossless.\n");
- fprintf(stdout, " Options -r and -q cannot be used together.\n");
- fprintf(stdout, "-n <number of resolutions>\n");
- fprintf(stdout, " Number of resolutions.\n");
- fprintf(stdout,
- " It corresponds to the number of DWT decompositions +1. \n");
- fprintf(stdout, " Default: 6.\n");
- fprintf(stdout, "-b <cblk width>,<cblk height>\n");
- fprintf(stdout,
- " Code-block size. The dimension must respect the constraint \n");
- fprintf(stdout,
- " defined in the JPEG-2000 standard (no dimension smaller than 4 \n");
- fprintf(stdout,
- " or greater than 1024, no code-block with more than 4096 coefficients).\n");
- fprintf(stdout, " The maximum value authorized is 64x64. \n");
- fprintf(stdout, " Default: 64x64.\n");
- fprintf(stdout,
- "-c [<prec width>,<prec height>],[<prec width>,<prec height>],...\n");
- fprintf(stdout, " Precinct size. Values specified must be power of 2. \n");
- fprintf(stdout,
- " Multiple records may be supplied, in which case the first record refers\n");
- fprintf(stdout,
- " to the highest resolution level and subsequent records to lower \n");
- fprintf(stdout,
- " resolution levels. The last specified record is right-shifted for each \n");
- fprintf(stdout, " remaining lower resolution levels.\n");
- fprintf(stdout, " Default: 215x215 at each resolution.\n");
- fprintf(stdout, "-t <tile width>,<tile height>\n");
- fprintf(stdout, " Tile size.\n");
- fprintf(stdout,
- " Default: the dimension of the whole image, thus only one tile.\n");
- fprintf(stdout, "-p <LRCP|RLCP|RPCL|PCRL|CPRL>\n");
- fprintf(stdout, " Progression order.\n");
- fprintf(stdout, " Default: LRCP.\n");
- fprintf(stdout, "-s <subX,subY>\n");
- fprintf(stdout, " Subsampling factor.\n");
- fprintf(stdout, " Subsampling bigger than 2 can produce error\n");
- fprintf(stdout, " Default: no subsampling.\n");
- fprintf(stdout,
- "-POC <progression order change>/<progression order change>/...\n");
- fprintf(stdout, " Progression order change.\n");
- fprintf(stdout,
- " The syntax of a progression order change is the following:\n");
- fprintf(stdout,
- " T<tile>=<resStart>,<compStart>,<layerEnd>,<resEnd>,<compEnd>,<progOrder>\n");
- fprintf(stdout, " Example: -POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL\n");
- fprintf(stdout, "-SOP\n");
- fprintf(stdout, " Write SOP marker before each packet.\n");
- fprintf(stdout, "-EPH\n");
- fprintf(stdout, " Write EPH marker after each header packet.\n");
- fprintf(stdout, "-M <key value>\n");
- fprintf(stdout, " Mode switch.\n");
- fprintf(stdout, " [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
- fprintf(stdout, " 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)]\n");
- fprintf(stdout, " Indicate multiple modes by adding their values.\n");
- fprintf(stdout,
- " Example: RESTART(4) + RESET(2) + SEGMARK(32) => -M 38\n");
- fprintf(stdout, "-TP <R|L|C>\n");
- fprintf(stdout, " Divide packets of every tile into tile-parts.\n");
- fprintf(stdout,
- " Division is made by grouping Resolutions (R), Layers (L)\n");
- fprintf(stdout, " or Components (C).\n");
-#ifdef FIXME_INDEX
- fprintf(stdout, "-x <index file>\n");
- fprintf(stdout, " Create an index file.\n");
-#endif /*FIXME_INDEX*/
- fprintf(stdout, "-ROI c=<component index>,U=<upshifting value>\n");
- fprintf(stdout, " Quantization indices upshifted for a component. \n");
- fprintf(stdout,
- " Warning: This option does not implement the usual ROI (Region of Interest).\n");
- fprintf(stdout,
- " It should be understood as a 'Component of Interest'. It offers the \n");
- fprintf(stdout,
- " possibility to upshift the value of a component during quantization step.\n");
- fprintf(stdout,
- " The value after c= is the component number [0, 1, 2, ...] and the value \n");
- fprintf(stdout,
- " after U= is the value of upshifting. U must be in the range [0, 37].\n");
- fprintf(stdout, "-d <image offset X,image offset Y>\n");
- fprintf(stdout, " Offset of the origin of the image.\n");
- fprintf(stdout, "-T <tile offset X,tile offset Y>\n");
- fprintf(stdout, " Offset of the origin of the tiles.\n");
- fprintf(stdout, "-I\n");
- fprintf(stdout, " Use the irreversible DWT 9-7.\n");
- fprintf(stdout, "-mct <0|1|2>\n");
- fprintf(stdout,
- " Explicitly specifies if a Multiple Component Transform has to be used.\n");
- fprintf(stdout, " 0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
- fprintf(stdout,
- " If custom MCT, \"-m\" option has to be used (see hereunder).\n");
- fprintf(stdout,
- " By default, RGB->YCC conversion is used if there are 3 components or more,\n");
- fprintf(stdout, " no conversion otherwise.\n");
- fprintf(stdout, "-m <file>\n");
- fprintf(stdout,
- " Use array-based MCT, values are coma separated, line by line\n");
- fprintf(stdout,
- " No specific separators between lines, no space allowed between values.\n");
- fprintf(stdout,
- " If this option is used, it automatically sets \"-mct\" option to 2.\n");
- fprintf(stdout, "-cinema2K <24|48>\n");
- fprintf(stdout, " Digital Cinema 2K profile compliant codestream.\n");
- fprintf(stdout,
- " Need to specify the frames per second for a 2K resolution.\n");
- fprintf(stdout, " Only 24 or 48 fps are currently allowed.\n");
- fprintf(stdout, "-cinema4K\n");
- fprintf(stdout, " Digital Cinema 4K profile compliant codestream.\n");
- fprintf(stdout, " Frames per second not required. Default value is 24fps.\n");
- fprintf(stdout, "-jpip\n");
- fprintf(stdout, " Write jpip codestream index box in JP2 output file.\n");
- fprintf(stdout, " Currently supports only RPCL order.\n");
- fprintf(stdout, "-C <comment>\n");
- fprintf(stdout, " Add <comment> in the comment marker segment.\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout, "-W <params>\n");
- fprintf(stdout, " Adoption of JPWL (Part 11) capabilities (-W params)\n");
- fprintf(stdout,
- " The <params> field can be written and repeated in any order:\n");
- fprintf(stdout, " [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
- fprintf(stdout, " ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
- fprintf(stdout,
- " h selects the header error protection (EPB): 'type' can be\n");
- fprintf(stdout,
- " [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout,
- " if 'tilepart' is absent, it is for main and tile headers\n");
- fprintf(stdout, " if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout,
- " onwards, up to the next h<> spec, or to the last tilepart\n");
- fprintf(stdout, " in the codestream (max. %d specs)\n",
- JPWL_MAX_NO_TILESPECS);
- fprintf(stdout,
- " p selects the packet error protection (EEP/UEP with EPBs)\n");
- fprintf(stdout, " to be applied to raw data: 'type' can be\n");
- fprintf(stdout,
- " [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout,
- " if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
- fprintf(stdout,
- " if 'tilepart:pack' is present, it applies from that tile\n");
- fprintf(stdout,
- " and that packet onwards, up to the next packet spec\n");
- fprintf(stdout,
- " or to the last packet in the last tilepart in the stream\n");
- fprintf(stdout, " (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
- fprintf(stdout,
- " s enables sensitivity data insertion (ESD): 'method' can be\n");
- fprintf(stdout,
- " [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
- fprintf(stdout, " 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
- fprintf(stdout, " if 'tilepart' is absent, it is for main header only\n");
- fprintf(stdout, " if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout,
- " onwards, up to the next s<> spec, or to the last tilepart\n");
- fprintf(stdout, " in the codestream (max. %d specs)\n",
- JPWL_MAX_NO_TILESPECS);
- fprintf(stdout, " g determines the addressing mode: <range> can be\n");
- fprintf(stdout, " [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
- fprintf(stdout,
- " a determines the size of data addressing: <addr> can be\n");
- fprintf(stdout,
- " 2/4 bytes (small/large codestreams). If not set, auto-mode\n");
- fprintf(stdout,
- " z determines the size of sensitivity values: <size> can be\n");
- fprintf(stdout,
- " 1/2 bytes, for the transformed pseudo-floating point value\n");
- fprintf(stdout, " ex.:\n");
- fprintf(stdout,
- " h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
- fprintf(stdout, " s0=6,s3=-1,a=0,g=1,z=1\n");
- fprintf(stdout, " means\n");
- fprintf(stdout,
- " predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
- fprintf(stdout,
- " CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
- fprintf(stdout, " UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
- fprintf(stdout,
- " UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
- fprintf(stdout, " UEP rs default for packets of tilepart 1,\n");
- fprintf(stdout, " no UEP for packets 0 to 19 of tilepart 3,\n");
- fprintf(stdout,
- " UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
- fprintf(stdout, " relative sensitivity ESD for MH,\n");
- fprintf(stdout,
- " TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
- fprintf(stdout,
- " size of addresses and 1 byte for each sensitivity value\n");
- fprintf(stdout, " ex.:\n");
- fprintf(stdout, " h,s,p\n");
- fprintf(stdout, " means\n");
- fprintf(stdout,
- " default protection to headers (MH and TPHs) as well as\n");
- fprintf(stdout, " data packets, one ESD in MH\n");
- fprintf(stdout,
- " N.B.: use the following recommendations when specifying\n");
- fprintf(stdout, " the JPWL parameters list\n");
- fprintf(stdout,
- " - when you use UEP, always pair the 'p' option with 'h'\n");
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "\n");
-#ifdef FIXME_INDEX
- fprintf(stdout, "Index structure:\n");
- fprintf(stdout, "----------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Image_height Image_width\n");
- fprintf(stdout, "progression order\n");
- fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
- fprintf(stdout, "Tiles_nb_X Tiles_nb_Y\n");
- fprintf(stdout, "Components_nb\n");
- fprintf(stdout, "Layers_nb\n");
- fprintf(stdout, "decomposition_levels\n");
- fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
- fprintf(stdout, " [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
- fprintf(stdout, "Main_header_start_position\n");
- fprintf(stdout, "Main_header_end_position\n");
- fprintf(stdout, "Codestream_size\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "INFO ON TILES\n");
- fprintf(stdout,
- "tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
- fprintf(stdout,
- "Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
- fprintf(stdout,
- "Tile_1 '' '' '' '' '' '' ''\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tile_Nt '' '' '' '' '' '' ''\n");
- fprintf(stdout, "...\n");
- fprintf(stdout, "TILE 0 DETAILS\n");
- fprintf(stdout, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
- fprintf(stdout, "...\n");
- fprintf(stdout, "Progression_string\n");
- fprintf(stdout,
- "pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
- fprintf(stdout,
- "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tpacket_Np '' '' '' '' '' '' '' ''\n");
- fprintf(stdout, "MaxDisto\n");
- fprintf(stdout, "TotalDisto\n\n");
-#endif /*FIXME_INDEX*/
-}
-
-static OPJ_PROG_ORDER give_progression(const char progression[4])
-{
- if (strncmp(progression, "LRCP", 4) == 0) {
- return OPJ_LRCP;
- }
- if (strncmp(progression, "RLCP", 4) == 0) {
- return OPJ_RLCP;
- }
- if (strncmp(progression, "RPCL", 4) == 0) {
- return OPJ_RPCL;
- }
- if (strncmp(progression, "PCRL", 4) == 0) {
- return OPJ_PCRL;
- }
- if (strncmp(progression, "CPRL", 4) == 0) {
- return OPJ_CPRL;
- }
-
- return OPJ_PROG_UNKNOWN;
-}
-
-static unsigned int get_num_images(char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- unsigned int num_images = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 0;
- }
-
- num_images = 0;
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
- num_images++;
- }
- closedir(dir);
- return num_images;
-}
-
-static int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int i = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 1;
- } else {
- fprintf(stderr, "Folder opened successfully\n");
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
-
- strcpy(dirptr->filename[i], content->d_name);
- i++;
- }
- closedir(dir);
- return 0;
-}
-
-static int get_file_format(char *filename)
-{
- unsigned int i;
- static const char *extension[] = {
- "pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "rawl", "tga", "png", "j2k", "jp2", "j2c", "jpc"
- };
- static const int format[] = {
- PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, RAWL_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
- };
- char * ext = strrchr(filename, '.');
- if (ext == NULL) {
- return -1;
- }
- ext++;
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (strcasecmp(ext, extension[i]) == 0) {
- return format[i];
- }
- }
- return -1;
-}
-
-static char * get_file_name(char *name)
-{
- char *fname = strtok(name, ".");
- return fname;
-}
-
-static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_cparameters_t *parameters)
-{
- char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
- outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
- char *temp_p, temp1[OPJ_PATH_LEN] = "";
-
- strcpy(image_filename, dirptr->filename[imageno]);
- fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
- parameters->decod_format = get_file_format(image_filename);
- if (parameters->decod_format == -1) {
- return 1;
- }
- sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
- infilename) != 0) {
- return 1;
- }
-
- /*Set output file*/
- strcpy(temp_ofname, get_file_name(image_filename));
- while ((temp_p = strtok(NULL, ".")) != NULL) {
- strcat(temp_ofname, temp1);
- sprintf(temp1, ".%s", temp_p);
- }
- if (img_fol->set_out_format == 1) {
- sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
- img_fol->out_format);
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- outfilename) != 0) {
- return 1;
- }
- }
- return 0;
-}
-
-/* ------------------------------------------------------------------------------------ */
-
-static int parse_cmdline_encoder(int argc, char **argv,
- opj_cparameters_t *parameters,
- img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename,
- size_t indexfilename_size)
-{
- OPJ_UINT32 i, j;
- int totlen, c;
- opj_option_t long_option[] = {
- {"cinema2K", REQ_ARG, NULL, 'w'},
- {"cinema4K", NO_ARG, NULL, 'y'},
- {"ImgDir", REQ_ARG, NULL, 'z'},
- {"TP", REQ_ARG, NULL, 'u'},
- {"SOP", NO_ARG, NULL, 'S'},
- {"EPH", NO_ARG, NULL, 'E'},
- {"OutFor", REQ_ARG, NULL, 'O'},
- {"POC", REQ_ARG, NULL, 'P'},
- {"ROI", REQ_ARG, NULL, 'R'},
- {"jpip", NO_ARG, NULL, 'J'},
- {"mct", REQ_ARG, NULL, 'Y'}
- };
-
- /* parse the command line */
- const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:JY:"
-#ifdef USE_JPWL
- "W:"
-#endif /* USE_JPWL */
- "h";
-
- totlen = sizeof(long_option);
- img_fol->set_out_format = 0;
- raw_cp->rawWidth = 0;
-
- do {
- c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = get_file_format(infile);
- switch (parameters->decod_format) {
- case PGX_DFMT:
- case PXM_DFMT:
- case BMP_DFMT:
- case TIF_DFMT:
- case RAW_DFMT:
- case RAWL_DFMT:
- case TGA_DFMT:
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr,
- "[ERROR] Unknown input file format: %s \n"
- " Known file formats are *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga\n",
- infile);
- return 1;
- }
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case J2K_CFMT:
- case JP2_CFMT:
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
- return 1;
- }
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- outfile) != 0) {
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'O': { /* output format */
- char outformat[50];
- char *of = opj_optarg;
- sprintf(outformat, ".%s", of);
- img_fol->set_out_format = 1;
- parameters->cod_format = get_file_format(outformat);
- switch (parameters->cod_format) {
- case J2K_CFMT:
- case JP2_CFMT:
- img_fol->out_format = opj_optarg;
- break;
- default:
- fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");
- return 1;
- }
- }
- break;
-
-
- /* ----------------------------------------------------- */
-
-
- case 'r': { /* rates rates/distorsion */
- char *s = opj_optarg;
- parameters->tcp_numlayers = 0;
- while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
- 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_disto_alloc = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'F': { /* Raw image format parameters */
- OPJ_BOOL wrong = OPJ_FALSE;
- char *substr1;
- char *substr2;
- char *sep;
- char signo;
- int width, height, bitdepth, ncomp;
- OPJ_UINT32 len;
- OPJ_BOOL raw_signed = OPJ_FALSE;
- substr2 = strchr(opj_optarg, '@');
- if (substr2 == NULL) {
- len = (OPJ_UINT32) strlen(opj_optarg);
- } else {
- len = (OPJ_UINT32)(substr2 - opj_optarg);
- substr2++; /* skip '@' character */
- }
- substr1 = (char*) malloc((len + 1) * sizeof(char));
- if (substr1 == NULL) {
- return 1;
- }
- memcpy(substr1, opj_optarg, len);
- substr1[len] = '\0';
- if (sscanf(substr1, "%d,%d,%d,%d,%c", &width, &height, &ncomp, &bitdepth,
- &signo) == 5) {
- if (signo == 's') {
- raw_signed = OPJ_TRUE;
- } else if (signo == 'u') {
- raw_signed = OPJ_FALSE;
- } else {
- wrong = OPJ_TRUE;
- }
- } else {
- wrong = OPJ_TRUE;
- }
- if (!wrong) {
- int compno;
- int lastdx = 1;
- int lastdy = 1;
- raw_cp->rawWidth = width;
- raw_cp->rawHeight = height;
- raw_cp->rawComp = ncomp;
- raw_cp->rawBitDepth = bitdepth;
- raw_cp->rawSigned = raw_signed;
- raw_cp->rawComps = (raw_comp_cparameters_t*) malloc(((OPJ_UINT32)(
- ncomp)) * sizeof(raw_comp_cparameters_t));
- if (raw_cp->rawComps == NULL) {
- free(substr1);
- return 1;
- }
- for (compno = 0; compno < ncomp && !wrong; compno++) {
- if (substr2 == NULL) {
- raw_cp->rawComps[compno].dx = lastdx;
- raw_cp->rawComps[compno].dy = lastdy;
- } else {
- int dx, dy;
- sep = strchr(substr2, ':');
- if (sep == NULL) {
- if (sscanf(substr2, "%dx%d", &dx, &dy) == 2) {
- lastdx = dx;
- lastdy = dy;
- raw_cp->rawComps[compno].dx = dx;
- raw_cp->rawComps[compno].dy = dy;
- substr2 = NULL;
- } else {
- wrong = OPJ_TRUE;
- }
- } else {
- if (sscanf(substr2, "%dx%d:%s", &dx, &dy, substr2) == 3) {
- raw_cp->rawComps[compno].dx = dx;
- raw_cp->rawComps[compno].dy = dy;
- } else {
- wrong = OPJ_TRUE;
- }
- }
- }
- }
- }
- free(substr1);
- if (wrong) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
- fprintf(stderr,
- "If subsampling is omitted, 1x1 is assumed for all components\n");
- fprintf(stderr,
- "Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
- fprintf(stderr, " for raw 512x512 image with 4:2:0 subsampling\n");
- fprintf(stderr, "Aborting.\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'q': { /* add fixed_quality */
- char *s = opj_optarg;
- while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
- == 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_fixed_quality = 1;
- }
- break;
-
- /* dda */
- /* ----------------------------------------------------- */
-
- case 'f': { /* mod fixed_quality (before : -q) */
- int *row = NULL, *col = NULL;
- OPJ_UINT32 numlayers = 0, numresolution = 0, matrix_width = 0;
-
- char *s = opj_optarg;
- sscanf(s, "%u", &numlayers);
- s++;
- if (numlayers > 9) {
- s++;
- }
-
- parameters->tcp_numlayers = (int)numlayers;
- numresolution = (OPJ_UINT32)parameters->numresolution;
- matrix_width = numresolution * 3;
- parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
- if (parameters->cp_matrice == NULL) {
- return 1;
- }
- s = s + 2;
-
- for (i = 0; i < numlayers; i++) {
- row = &parameters->cp_matrice[i * matrix_width];
- col = row;
- parameters->tcp_rates[i] = 1;
- sscanf(s, "%d,", &col[0]);
- s += 2;
- if (col[0] > 9) {
- s++;
- }
- col[1] = 0;
- col[2] = 0;
- for (j = 1; j < numresolution; j++) {
- col += 3;
- sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
- s += 6;
- if (col[0] > 9) {
- s++;
- }
- if (col[1] > 9) {
- s++;
- }
- if (col[2] > 9) {
- s++;
- }
- }
- if (i < numlayers - 1) {
- s++;
- }
- }
- parameters->cp_fixed_alloc = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 't': { /* tiles */
- sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
- parameters->tile_size_on = OPJ_TRUE;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'n': { /* resolution */
- sscanf(opj_optarg, "%d", &parameters->numresolution);
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'c': { /* precinct dimension */
- char sep;
- int res_spec = 0;
-
- char *s = opj_optarg;
- int ret;
- do {
- sep = 0;
- ret = sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
- &parameters->prch_init[res_spec], &sep);
- if (!(ret == 2 && sep == 0) && !(ret == 3 && sep == ',')) {
- fprintf(stderr, "\nError: could not parse precinct dimension: '%s' %x\n", s,
- sep);
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -c [128,128],[128,128]\n");
- return 1;
- }
- parameters->csty |= 0x01;
- res_spec++;
- s = strpbrk(s, "]") + 2;
- } while (sep == ',');
- parameters->res_spec = res_spec;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'b': { /* code-block dimension */
- int cblockw_init = 0, cblockh_init = 0;
- sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
- if (cblockw_init > 1024 || cblockw_init < 4 ||
- cblockh_init > 1024 || cblockh_init < 4 ||
- cblockw_init * cblockh_init > 4096) {
- fprintf(stderr,
- "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
- " * width*height<=4096\n * 4<=width,height<= 1024\n\n");
- return 1;
- }
- parameters->cblockw_init = cblockw_init;
- parameters->cblockh_init = cblockh_init;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'x': { /* creation of index file */
- if (opj_strcpy_s(indexfilename, indexfilename_size, opj_optarg) != 0) {
- return 1;
- }
- /* FIXME ADE INDEX >> */
- fprintf(stderr,
- "[WARNING] Index file generation is currently broken.\n"
- " '-x' option ignored.\n");
- /* << FIXME ADE INDEX */
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'p': { /* progression order */
- char progression[4];
-
- strncpy(progression, opj_optarg, 4);
- parameters->prog_order = give_progression(progression);
- if (parameters->prog_order == -1) {
- fprintf(stderr, "Unrecognized progression order "
- "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 's': { /* subsampling factor */
- if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
- &parameters->subsampling_dy) != 2) {
- fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'd': { /* coordonnate of the reference grid */
- if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
- &parameters->image_offset_y0) != 2) {
- fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
- "error !! [-d x0,y0]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': /* display an help description */
- encode_help_display();
- return 1;
-
- /* ----------------------------------------------------- */
-
- case 'P': { /* POC */
- int numpocs = 0; /* number of progression order change (POC) default 0 */
- opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */
-
- char *s = opj_optarg;
- POC = parameters->POC;
-
- while (sscanf(s, "T%u=%u,%u,%u,%u,%u,%4s", &POC[numpocs].tile,
- &POC[numpocs].resno0, &POC[numpocs].compno0,
- &POC[numpocs].layno1, &POC[numpocs].resno1,
- &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
- POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
- numpocs++;
- while (*s && *s != '/') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->numpocs = (OPJ_UINT32)numpocs;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'S': { /* SOP marker */
- parameters->csty |= 0x02;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'E': { /* EPH marker */
- parameters->csty |= 0x04;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'M': { /* Mode switch pas tous au point !! */
- int value = 0;
- if (sscanf(opj_optarg, "%d", &value) == 1) {
- for (i = 0; i <= 5; i++) {
- int cache = value & (1 << i);
- if (cache) {
- parameters->mode |= (1 << i);
- }
- }
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'R': { /* ROI */
- if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
- &parameters->roi_shift) != 2) {
- fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'T': { /* Tile offset */
- if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0,
- &parameters->cp_ty0) != 2) {
- fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'C': { /* add a comment */
- parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
- if (parameters->cp_comment) {
- strcpy(parameters->cp_comment, opj_optarg);
- }
- }
- break;
-
-
- /* ------------------------------------------------------ */
-
- case 'I': { /* reversible or not */
- parameters->irreversible = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'u': { /* Tile part generation*/
- parameters->tp_flag = opj_optarg[0];
- parameters->tp_on = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'z': { /* Image Directory path */
- img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
- if (img_fol->imgdirpath == NULL) {
- return 1;
- }
- strcpy(img_fol->imgdirpath, opj_optarg);
- img_fol->set_imgdir = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'w': { /* Digital Cinema 2K profile compliance*/
- int fps = 0;
- sscanf(opj_optarg, "%d", &fps);
- if (fps == 24) {
- parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
- parameters->max_comp_size = OPJ_CINEMA_24_COMP;
- parameters->max_cs_size = OPJ_CINEMA_24_CS;
- } else if (fps == 48) {
- parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
- parameters->max_comp_size = OPJ_CINEMA_48_COMP;
- parameters->max_cs_size = OPJ_CINEMA_48_CS;
- } else {
- fprintf(stderr, "Incorrect value!! must be 24 or 48\n");
- return 1;
- }
- fprintf(stdout, "CINEMA 2K profile activated\n"
- "Other options specified could be overridden\n");
-
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'y': { /* Digital Cinema 4K profile compliance*/
- parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
- fprintf(stdout, "CINEMA 4K profile activated\n"
- "Other options specified could be overridden\n");
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'Y': { /* Shall we do an MCT ? 0:no_mct;1:rgb->ycc;2:custom mct (-m option required)*/
- int mct_mode = 0;
- sscanf(opj_optarg, "%d", &mct_mode);
- if (mct_mode < 0 || mct_mode > 2) {
- fprintf(stderr,
- "MCT incorrect value!! Current accepted values are 0, 1 or 2.\n");
- return 1;
- }
- parameters->tcp_mct = (char) mct_mode;
- }
- break;
-
- /* ------------------------------------------------------ */
-
-
- case 'm': { /* mct input file */
- char *lFilename = opj_optarg;
- char *lMatrix;
- char *lCurrentPtr ;
- float *lCurrentDoublePtr;
- float *lSpace;
- int *l_int_ptr;
- int lNbComp = 0, lTotalComp, lMctComp, i2;
- size_t lStrLen, lStrFread;
-
- /* Open file */
- FILE * lFile = fopen(lFilename, "r");
- if (lFile == NULL) {
- return 1;
- }
-
- /* Set size of file and read its content*/
- fseek(lFile, 0, SEEK_END);
- lStrLen = (size_t)ftell(lFile);
- fseek(lFile, 0, SEEK_SET);
- lMatrix = (char *) malloc(lStrLen + 1);
- if (lMatrix == NULL) {
- fclose(lFile);
- return 1;
- }
- lStrFread = fread(lMatrix, 1, lStrLen, lFile);
- fclose(lFile);
- if (lStrLen != lStrFread) {
- free(lMatrix);
- return 1;
- }
-
- lMatrix[lStrLen] = 0;
- lCurrentPtr = lMatrix;
-
- /* replace ',' by 0 */
- while (*lCurrentPtr != 0) {
- if (*lCurrentPtr == ' ') {
- *lCurrentPtr = 0;
- ++lNbComp;
- }
- ++lCurrentPtr;
- }
- ++lNbComp;
- lCurrentPtr = lMatrix;
-
- lNbComp = (int)(sqrt(4 * lNbComp + 1) / 2. - 0.5);
- lMctComp = lNbComp * lNbComp;
- lTotalComp = lMctComp + lNbComp;
- lSpace = (float *) malloc((size_t)lTotalComp * sizeof(float));
- if (lSpace == NULL) {
- free(lMatrix);
- return 1;
- }
- lCurrentDoublePtr = lSpace;
- for (i2 = 0; i2 < lMctComp; ++i2) {
- lStrLen = strlen(lCurrentPtr) + 1;
- *lCurrentDoublePtr++ = (float) atof(lCurrentPtr);
- lCurrentPtr += lStrLen;
- }
-
- l_int_ptr = (int*) lCurrentDoublePtr;
- for (i2 = 0; i2 < lNbComp; ++i2) {
- lStrLen = strlen(lCurrentPtr) + 1;
- *l_int_ptr++ = atoi(lCurrentPtr);
- lCurrentPtr += lStrLen;
- }
-
- /* TODO should not be here ! */
- opj_set_MCT(parameters, lSpace, (int *)(lSpace + lMctComp),
- (OPJ_UINT32)lNbComp);
-
- /* Free memory*/
- free(lSpace);
- free(lMatrix);
- }
- break;
-
-
- /* ------------------------------------------------------ */
-
- /* UniPG>> */
-#ifdef USE_JPWL
- /* ------------------------------------------------------ */
-
- case 'W': { /* JPWL capabilities switched on */
- char *token = NULL;
- int hprot, pprot, sens, addr, size, range;
-
- /* we need to enable indexing */
- if (!indexfilename || !*indexfilename) {
- if (opj_strcpy_s(indexfilename, indexfilename_size,
- JPWL_PRIVATEINDEX_NAME) != 0) {
- return 1;
- }
- }
-
- /* search for different protection methods */
-
- /* break the option in comma points and parse the result */
- token = strtok(opj_optarg, ",");
- while (token != NULL) {
-
- /* search header error protection method */
- if (*token == 'h') {
-
- static int tile = 0, tilespec = 0, lasttileno = 0;
-
- hprot = 1; /* predefined method */
-
- if (sscanf(token, "h=%d", &hprot) == 1) {
- /* Main header, specified */
- if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
- ((hprot >= 37) && (hprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n",
- hprot);
- return 1;
- }
- parameters->jpwl_hprot_MH = hprot;
-
- } else if (sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
- /* Tile part header, specified */
- if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
- ((hprot >= 37) && (hprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n",
- hprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_hprot_TPH[tilespec++] = hprot;
- }
-
- } else if (sscanf(token, "h%d", &tile) == 1) {
- /* Tile part header, unspecified */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_hprot_TPH[tilespec++] = hprot;
- }
-
-
- } else if (!strcmp(token, "h")) {
- /* Main header, unspecified */
- parameters->jpwl_hprot_MH = hprot;
-
- } else {
- fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search packet error protection method */
- if (*token == 'p') {
-
- static int pack = 0, tile = 0, packspec = 0;
-
- pprot = 1; /* predefined method */
-
- if (sscanf(token, "p=%d", &pprot) == 1) {
- /* Method for all tiles and all packets */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n",
- pprot);
- return 1;
- }
- parameters->jpwl_pprot_tileno[0] = 0;
- parameters->jpwl_pprot_packno[0] = 0;
- parameters->jpwl_pprot[0] = pprot;
-
- } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
- /* method specified from that tile on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = 0;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
- /* method fully specified from that tile and that packet on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (pack < 0) {
- fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
- pack);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = pack;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
- /* default method from that tile and that packet on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (pack < 0) {
- fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
- pack);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = pack;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d", &tile) == 1) {
- /* default from a tile on */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = 0;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
-
- } else if (!strcmp(token, "p")) {
- /* all default */
- parameters->jpwl_pprot_tileno[0] = 0;
- parameters->jpwl_pprot_packno[0] = 0;
- parameters->jpwl_pprot[0] = pprot;
-
- } else {
- fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search sensitivity method */
- if (*token == 's') {
-
- static int tile = 0, tilespec = 0, lasttileno = 0;
-
- sens = 0; /* predefined: relative error */
-
- if (sscanf(token, "s=%d", &sens) == 1) {
- /* Main header, specified */
- if ((sens < -1) || (sens > 7)) {
- fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n",
- sens);
- return 1;
- }
- parameters->jpwl_sens_MH = sens;
-
- } else if (sscanf(token, "s%d=%d", &tile, &sens) == 2) {
- /* Tile part header, specified */
- if ((sens < -1) || (sens > 7)) {
- fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n",
- sens);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_sens_TPH[tilespec++] = sens;
- }
-
- } else if (sscanf(token, "s%d", &tile) == 1) {
- /* Tile part header, unspecified */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_sens_TPH[tilespec++] = hprot;
- }
-
- } else if (!strcmp(token, "s")) {
- /* Main header, unspecified */
- parameters->jpwl_sens_MH = sens;
-
- } else {
- fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token);
- return 1;
- };
-
- parameters->jpwl_sens_size = 2; /* 2 bytes for default size */
- }
-
- /* search addressing size */
- if (*token == 'a') {
-
-
- addr = 0; /* predefined: auto */
-
- if (sscanf(token, "a=%d", &addr) == 1) {
- /* Specified */
- if ((addr != 0) && (addr != 2) && (addr != 4)) {
- fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
- return 1;
- }
- parameters->jpwl_sens_addr = addr;
-
- } else if (!strcmp(token, "a")) {
- /* default */
- parameters->jpwl_sens_addr = addr; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search sensitivity size */
- if (*token == 'z') {
-
-
- size = 1; /* predefined: 1 byte */
-
- if (sscanf(token, "z=%d", &size) == 1) {
- /* Specified */
- if ((size != 0) && (size != 1) && (size != 2)) {
- fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
- return 1;
- }
- parameters->jpwl_sens_size = size;
-
- } else if (!strcmp(token, "a")) {
- /* default */
- parameters->jpwl_sens_size = size; /* 1 for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid size selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search range method */
- if (*token == 'g') {
-
-
- range = 0; /* predefined: 0 (packet) */
-
- if (sscanf(token, "g=%d", &range) == 1) {
- /* Specified */
- if ((range < 0) || (range > 3)) {
- fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
- return 1;
- }
- parameters->jpwl_sens_range = range;
-
- } else if (!strcmp(token, "g")) {
- /* default */
- parameters->jpwl_sens_range = range;
-
- } else {
- fprintf(stderr, "ERROR -> invalid range selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* next token or bust */
- token = strtok(NULL, ",");
- };
-
-
- /* some info */
- fprintf(stdout, "Info: JPWL capabilities enabled\n");
- parameters->jpwl_epc_on = OPJ_TRUE;
-
- }
- break;
-#endif /* USE_JPWL */
- /* <<UniPG */
- /* ------------------------------------------------------ */
-
- case 'J': { /* jpip on */
- parameters->jpip_on = OPJ_TRUE;
- }
- break;
- /* ------------------------------------------------------ */
-
-
- default:
- fprintf(stderr, "[WARNING] An invalid option has been ignored\n");
- break;
- }
- } while (c != -1);
-
- if (img_fol->set_imgdir == 1) {
- if (!(parameters->infile[0] == 0)) {
- fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together !!\n");
- return 1;
- }
- if (img_fol->set_out_format == 0) {
- fprintf(stderr,
- "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
- fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
- return 1;
- }
- if (!((parameters->outfile[0] == 0))) {
- fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together !!\n");
- fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
- return 1;
- }
- } else {
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stderr, "[ERROR] Required parameters are missing\n"
- "Example: %s -i image.pgm -o image.j2k\n", argv[0]);
- fprintf(stderr, " Help: %s -h\n", argv[0]);
- return 1;
- }
- }
-
- if ((parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0)
- || (parameters->decod_format == RAWL_DFMT && raw_cp->rawWidth == 0)) {
- fprintf(stderr, "[ERROR] invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stderr, "Aborting\n");
- return 1;
- }
-
- if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
- parameters->cp_fixed_quality)
- && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^
- parameters->cp_fixed_quality))) {
- fprintf(stderr, "[ERROR] options -r -q and -f cannot be used together !!\n");
- return 1;
- } /* mod fixed_quality */
-
-
- /* if no rate entered, lossless by default */
- /* Note: post v2.2.0, this is no longer necessary, but for released */
- /* versions at the time of writing, this is needed to avoid crashes */
- if (parameters->tcp_numlayers == 0) {
- parameters->tcp_rates[0] = 0;
- parameters->tcp_numlayers++;
- parameters->cp_disto_alloc = 1;
- }
-
- if ((parameters->cp_tx0 > parameters->image_offset_x0) ||
- (parameters->cp_ty0 > parameters->image_offset_y0)) {
- fprintf(stderr,
- "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
- parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0,
- parameters->image_offset_y0);
- return 1;
- }
-
- for (i = 0; i < parameters->numpocs; i++) {
- if (parameters->POC[i].prg == -1) {
- fprintf(stderr,
- "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
- i + 1);
- }
- }
-
- /* If subsampled image is provided, automatically disable MCT */
- if (((parameters->decod_format == RAW_DFMT) ||
- (parameters->decod_format == RAWL_DFMT))
- && (((raw_cp->rawComp > 1) && ((raw_cp->rawComps[1].dx > 1) ||
- (raw_cp->rawComps[1].dy > 1)))
- || ((raw_cp->rawComp > 2) && ((raw_cp->rawComps[2].dx > 1) ||
- (raw_cp->rawComps[2].dy > 1)))
- )) {
- parameters->tcp_mct = 0;
- }
-
- return 0;
-
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error debug callback expecting no client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[ERROR] %s", msg);
-}
-/**
-sample warning debug callback expecting no client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting no client object
-*/
-static void info_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[INFO] %s", msg);
-}
-
-OPJ_FLOAT64 opj_clock(void)
-{
-#ifdef _WIN32
- /* _WIN32: use QueryPerformance (very accurate) */
- LARGE_INTEGER freq, t ;
- /* freq is the clock speed of the CPU */
- QueryPerformanceFrequency(&freq) ;
- /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
- /* t is the high resolution performance counter (see MSDN) */
- QueryPerformanceCounter(& t) ;
- return freq.QuadPart ? ((OPJ_FLOAT64) t.QuadPart / (OPJ_FLOAT64) freq.QuadPart)
- : 0 ;
-#else
- /* Unix or Linux: use resource usage */
- struct rusage t;
- OPJ_FLOAT64 procTime;
- /* (1) Get the rusage data structure at this moment (man getrusage) */
- getrusage(0, &t);
- /* (2) What is the elapsed time ? - CPU time = User time + System time */
- /* (2a) Get the seconds */
- procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
- /* (2b) More precisely! Get the microseconds part ! */
- return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) *
- 1e-6) ;
-#endif
-}
-
-
-/* -------------------------------------------------------------------------- */
-/**
- * OPJ_COMPRESS MAIN
- */
-/* -------------------------------------------------------------------------- */
-int main(int argc, char **argv)
-{
-
- opj_cparameters_t parameters; /* compression parameters */
-
- opj_stream_t *l_stream = 00;
- opj_codec_t* l_codec = 00;
- opj_image_t *image = NULL;
- raw_cparameters_t raw_cp;
- OPJ_SIZE_T num_compressed_files = 0;
-
- char indexfilename[OPJ_PATH_LEN]; /* index file name */
-
- unsigned int i, num_images, imageno;
- img_fol_t img_fol;
- dircnt_t *dirptr = NULL;
-
- OPJ_BOOL bSuccess;
- OPJ_BOOL bUseTiles = OPJ_FALSE; /* OPJ_TRUE */
- OPJ_UINT32 l_nb_tiles = 4;
- OPJ_FLOAT64 t = opj_clock();
-
- /* set encoding parameters to default values */
- opj_set_default_encoder_parameters(&parameters);
-
- /* Initialize indexfilename and img_fol */
- *indexfilename = 0;
- memset(&img_fol, 0, sizeof(img_fol_t));
-
- /* raw_cp initialization */
- raw_cp.rawBitDepth = 0;
- raw_cp.rawComp = 0;
- raw_cp.rawComps = 0;
- raw_cp.rawHeight = 0;
- raw_cp.rawSigned = 0;
- raw_cp.rawWidth = 0;
-
- /* parse input and get user encoding parameters */
- parameters.tcp_mct = (char)
- 255; /* This will be set later according to the input image or the provided option */
- if (parse_cmdline_encoder(argc, argv, &parameters, &img_fol, &raw_cp,
- indexfilename, sizeof(indexfilename)) == 1) {
- goto fails;
- }
-
- /* Read directory if necessary */
- if (img_fol.set_imgdir == 1) {
- num_images = get_num_images(img_fol.imgdirpath);
- dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
- if (dirptr) {
- dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
- char)); /* Stores at max 10 image file names*/
- dirptr->filename = (char**) malloc(num_images * sizeof(char*));
- if (!dirptr->filename_buf) {
- return 0;
- }
- for (i = 0; i < num_images; i++) {
- dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
- }
- }
- if (load_images(dirptr, img_fol.imgdirpath) == 1) {
- return 0;
- }
- if (num_images == 0) {
- fprintf(stdout, "Folder is empty\n");
- return 0;
- }
- } else {
- num_images = 1;
- }
- /*Encoding image one by one*/
- for (imageno = 0; imageno < num_images; imageno++) {
- image = NULL;
- fprintf(stderr, "\n");
-
- if (img_fol.set_imgdir == 1) {
- if (get_next_file((int)imageno, dirptr, &img_fol, &parameters)) {
- fprintf(stderr, "skipping file...\n");
- continue;
- }
- }
-
- switch (parameters.decod_format) {
- case PGX_DFMT:
- break;
- case PXM_DFMT:
- break;
- case BMP_DFMT:
- break;
- case TIF_DFMT:
- break;
- case RAW_DFMT:
- case RAWL_DFMT:
- break;
- case TGA_DFMT:
- break;
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr, "skipping file...\n");
- continue;
- }
-
- /* decode the source image */
- /* ----------------------- */
-
- switch (parameters.decod_format) {
- case PGX_DFMT:
- image = pgxtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load pgx file\n");
- return 1;
- }
- break;
-
- case PXM_DFMT:
- image = pnmtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load pnm file\n");
- return 1;
- }
- break;
-
- case BMP_DFMT:
- image = bmptoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load bmp file\n");
- return 1;
- }
- break;
-
-#ifdef OPJ_HAVE_LIBTIFF
- case TIF_DFMT:
- image = tiftoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load tiff file\n");
- return 1;
- }
- break;
-#endif /* OPJ_HAVE_LIBTIFF */
-
- case RAW_DFMT:
- image = rawtoimage(parameters.infile, &parameters, &raw_cp);
- if (!image) {
- fprintf(stderr, "Unable to load raw file\n");
- return 1;
- }
- break;
-
- case RAWL_DFMT:
- image = rawltoimage(parameters.infile, &parameters, &raw_cp);
- if (!image) {
- fprintf(stderr, "Unable to load raw file\n");
- return 1;
- }
- break;
-
- case TGA_DFMT:
- image = tgatoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load tga file\n");
- return 1;
- }
- break;
-
-#ifdef OPJ_HAVE_LIBPNG
- case PNG_DFMT:
- image = pngtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load png file\n");
- return 1;
- }
- break;
-#endif /* OPJ_HAVE_LIBPNG */
- }
-
- /* Can happen if input file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
- */
- if (!image) {
- fprintf(stderr, "Unable to load file: got no image\n");
- return 1;
- }
-
- /* Decide if MCT should be used */
- if (parameters.tcp_mct == (char)
- 255) { /* mct mode has not been set in commandline */
- parameters.tcp_mct = (image->numcomps >= 3) ? 1 : 0;
- } else { /* mct mode has been set in commandline */
- if ((parameters.tcp_mct == 1) && (image->numcomps < 3)) {
- fprintf(stderr, "RGB->YCC conversion cannot be used:\n");
- fprintf(stderr, "Input image has less than 3 components\n");
- return 1;
- }
- if ((parameters.tcp_mct == 2) && (!parameters.mct_data)) {
- fprintf(stderr, "Custom MCT has been set but no array-based MCT\n");
- fprintf(stderr, "has been provided. Aborting.\n");
- return 1;
- }
- }
-
- /* encode the destination image */
- /* ---------------------------- */
-
- switch (parameters.cod_format) {
- case J2K_CFMT: { /* JPEG-2000 codestream */
- /* Get a decoder handle */
- l_codec = opj_create_compress(OPJ_CODEC_J2K);
- break;
- }
- case JP2_CFMT: { /* JPEG 2000 compressed image data */
- /* Get a decoder handle */
- l_codec = opj_create_compress(OPJ_CODEC_JP2);
- break;
- }
- default:
- fprintf(stderr, "skipping file..\n");
- opj_stream_destroy(l_stream);
- continue;
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_info_handler(l_codec, info_callback, 00);
- opj_set_warning_handler(l_codec, warning_callback, 00);
- opj_set_error_handler(l_codec, error_callback, 00);
-
- if (bUseTiles) {
- parameters.cp_tx0 = 0;
- parameters.cp_ty0 = 0;
- parameters.tile_size_on = OPJ_TRUE;
- parameters.cp_tdx = 512;
- parameters.cp_tdy = 512;
- }
- if (! opj_setup_encoder(l_codec, &parameters, image)) {
- fprintf(stderr, "failed to encode image: opj_setup_encoder\n");
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- return 1;
- }
-
- /* open a byte stream for writing and allocate memory for all tiles */
- l_stream = opj_stream_create_default_file_stream(parameters.outfile, OPJ_FALSE);
- if (! l_stream) {
- return 1;
- }
-
- /* encode the image */
- bSuccess = opj_start_compress(l_codec, image, l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_start_compress\n");
- }
- if (bSuccess && bUseTiles) {
- OPJ_BYTE *l_data;
- OPJ_UINT32 l_data_size = 512 * 512 * 3;
- l_data = (OPJ_BYTE*) calloc(1, l_data_size);
- if (l_data == NULL) {
- goto fails;
- }
- for (i = 0; i < l_nb_tiles; ++i) {
- if (! opj_write_tile(l_codec, i, l_data, l_data_size, l_stream)) {
- fprintf(stderr, "ERROR -> test_tile_encoder: failed to write the tile %d!\n",
- i);
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- return 1;
- }
- }
- free(l_data);
- } else {
- bSuccess = bSuccess && opj_encode(l_codec, l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_encode\n");
- }
- }
- bSuccess = bSuccess && opj_end_compress(l_codec, l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_end_compress\n");
- }
-
- if (!bSuccess) {
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- fprintf(stderr, "failed to encode image\n");
- remove(parameters.outfile);
- return 1;
- }
-
- num_compressed_files++;
- fprintf(stdout, "[INFO] Generated outfile %s\n", parameters.outfile);
- /* close and free the byte stream */
- opj_stream_destroy(l_stream);
-
- /* free remaining compression structures */
- opj_destroy_codec(l_codec);
-
- /* free image data */
- opj_image_destroy(image);
-
- }
-
- /* free user parameters structure */
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
- if (raw_cp.rawComps) {
- free(raw_cp.rawComps);
- }
-
- t = opj_clock() - t;
- if (num_compressed_files) {
- fprintf(stdout, "encode time: %d ms \n",
- (int)((t * 1000.0) / (OPJ_FLOAT64)num_compressed_files));
- }
-
- return 0;
-
-fails:
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
- if (raw_cp.rawComps) {
- free(raw_cp.rawComps);
- }
- if (img_fol.imgdirpath) {
- free(img_fol.imgdirpath);
- }
- if (dirptr) {
- if (dirptr->filename_buf) {
- free(dirptr->filename_buf);
- }
- if (dirptr->filename) {
- free(dirptr->filename);
- }
- free(dirptr);
- }
- return 1;
-}
diff --git a/openjpeg/src/bin/jp2/opj_decompress.c b/openjpeg/src/bin/jp2/opj_decompress.c
deleted file mode 100644
index 1336bed5..00000000
--- a/openjpeg/src/bin/jp2/opj_decompress.c
+++ /dev/null
@@ -1,1801 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
- * Copyright (c) 2012, CS Systemes d'Information, France
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#else
-#include <strings.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/times.h>
-#endif /* _WIN32 */
-
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-#include "color.h"
-
-#include "format_defs.h"
-#include "opj_string.h"
-
-typedef struct dircnt {
- /** Buffer for holding images read from Directory*/
- char *filename_buf;
- /** Pointer to the buffer*/
- char **filename;
-} dircnt_t;
-
-
-typedef struct img_folder {
- /** The directory path of the folder containing input images*/
- char *imgdirpath;
- /** Output format*/
- const char *out_format;
- /** Enable option*/
- char set_imgdir;
- /** Enable Cod Format for output*/
- char set_out_format;
-
-} img_fol_t;
-
-typedef enum opj_prec_mode {
- OPJ_PREC_MODE_CLIP,
- OPJ_PREC_MODE_SCALE
-} opj_precision_mode;
-
-typedef struct opj_prec {
- OPJ_UINT32 prec;
- opj_precision_mode mode;
-} opj_precision;
-
-typedef struct opj_decompress_params {
- /** core library parameters */
- opj_dparameters_t core;
-
- /** input file name */
- char infile[OPJ_PATH_LEN];
- /** output file name */
- char outfile[OPJ_PATH_LEN];
- /** input file format 0: J2K, 1: JP2, 2: JPT */
- int decod_format;
- /** output file format 0: PGX, 1: PxM, 2: BMP */
- int cod_format;
- /** index file name */
- char indexfilename[OPJ_PATH_LEN];
-
- /** Decoding area left boundary */
- OPJ_UINT32 DA_x0;
- /** Decoding area right boundary */
- OPJ_UINT32 DA_x1;
- /** Decoding area up boundary */
- OPJ_UINT32 DA_y0;
- /** Decoding area bottom boundary */
- OPJ_UINT32 DA_y1;
- /** Verbose mode */
- OPJ_BOOL m_verbose;
-
- /** tile number ot the decoded tile*/
- OPJ_UINT32 tile_index;
- /** Nb of tile to decode */
- OPJ_UINT32 nb_tile_to_decode;
-
- opj_precision* precision;
- OPJ_UINT32 nb_precision;
-
- /* force output colorspace to RGB */
- int force_rgb;
- /* upsample components according to their dx/dy values */
- int upsample;
- /* split output components to different files */
- int split_pnm;
- /** number of threads */
- int num_threads;
- /* Quiet */
- int quiet;
- /** number of components to decode */
- OPJ_UINT32 numcomps;
- /** indices of components to decode */
- OPJ_UINT32* comps_indices;
-} opj_decompress_parameters;
-
-/* -------------------------------------------------------------------------- */
-/* Declarations */
-int get_num_images(char *imgdirpath);
-int load_images(dircnt_t *dirptr, char *imgdirpath);
-int get_file_format(const char *filename);
-char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_decompress_parameters *parameters);
-static int infile_format(const char *fname);
-
-int parse_cmdline_decoder(int argc, char **argv,
- opj_decompress_parameters *parameters, img_fol_t *img_fol);
-int parse_DA_values(char* inArg, unsigned int *DA_x0, unsigned int *DA_y0,
- unsigned int *DA_x1, unsigned int *DA_y1);
-
-static opj_image_t* convert_gray_to_rgb(opj_image_t* original);
-
-/* -------------------------------------------------------------------------- */
-static void decode_help_display(void)
-{
- fprintf(stdout,
- "\nThis is the opj_decompress utility from the OpenJPEG project.\n"
- "It decompresses JPEG 2000 codestreams to various image formats.\n"
- "It has been compiled against openjp2 library v%s.\n\n", opj_version());
-
- fprintf(stdout, "Parameters:\n"
- "-----------\n"
- "\n"
- " -ImgDir <directory> \n"
- " Image file Directory path \n"
- " -OutFor <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n"
- " REQUIRED only if -ImgDir is used\n"
- " Output format for decompressed images.\n");
- fprintf(stdout, " -i <compressed file>\n"
- " REQUIRED only if an Input image directory is not specified\n"
- " Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"
- " is identified based on its suffix.\n");
- fprintf(stdout, " -o <decompressed file>\n"
- " REQUIRED\n"
- " Currently accepts formats specified above (see OutFor option)\n"
- " Binary data is written to the file (not ascii). If a PGX\n"
- " filename is given, there will be as many output files as there are\n"
- " components: an indice starting from 0 will then be appended to the\n"
- " output filename, just before the \"pgx\" extension. If a PGM filename\n"
- " is given and there are more than one component, only the first component\n"
- " will be written to the file.\n");
- fprintf(stdout, " -r <reduce factor>\n"
- " Set the number of highest resolution levels to be discarded. The\n"
- " image resolution is effectively divided by 2 to the power of the\n"
- " number of discarded levels. The reduce factor is limited by the\n"
- " smallest total number of decomposition levels among tiles.\n"
- " -l <number of quality layers to decode>\n"
- " Set the maximum number of quality layers to decode. If there are\n"
- " less quality layers than the specified number, all the quality layers\n"
- " are decoded.\n");
- fprintf(stdout, " -x \n"
- " Create an index file *.Idx (-x index_name.Idx) \n"
- " -d <x0,y0,x1,y1>\n"
- " OPTIONAL\n"
- " Decoding area\n"
- " By default all the image is decoded.\n"
- " -t <tile_number>\n"
- " OPTIONAL\n"
- " Set the tile number of the decoded tile. Follow the JPEG2000 convention from left-up to bottom-up\n"
- " By default all tiles are decoded.\n");
- fprintf(stdout, " -p <comp 0 precision>[C|S][,<comp 1 precision>[C|S][,...]]\n"
- " OPTIONAL\n"
- " Force the precision (bit depth) of components.\n");
- fprintf(stdout,
- " There shall be at least 1 value. Theres no limit on the number of values (comma separated, last values ignored if too much values).\n"
- " If there are less values than components, the last value is used for remaining components.\n"
- " If 'C' is specified (default), values are clipped.\n"
- " If 'S' is specified, values are scaled.\n"
- " A 0 value can be specified (meaning original bit depth).\n");
- fprintf(stdout, " -c first_comp_index[,second_comp_index][,...]\n"
- " OPTIONAL\n"
- " To limit the number of components to decoded.\n"
- " Component indices are numbered starting at 0.\n");
- fprintf(stdout, " -force-rgb\n"
- " Force output image colorspace to RGB\n"
- " -upsample\n"
- " Downsampled components will be upsampled to image size\n"
- " -split-pnm\n"
- " Split output components to different files when writing to PNM\n");
- if (opj_has_thread_support()) {
- fprintf(stdout, " -threads <num_threads>\n"
- " Number of threads to use for decoding.\n");
- }
- fprintf(stdout, " -quiet\n"
- " Disable output from the library and other output.\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout, " -W <options>\n"
- " Activates the JPWL correction capability, if the codestream complies.\n"
- " Options can be a comma separated list of <param=val> tokens:\n"
- " c, c=numcomps\n"
- " numcomps is the number of expected components in the codestream\n"
- " (search of first EPB rely upon this, default is %d)\n",
- JPWL_EXPECTED_COMPONENTS);
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-
-static OPJ_BOOL parse_precision(const char* option,
- opj_decompress_parameters* parameters)
-{
- const char* l_remaining = option;
- OPJ_BOOL l_result = OPJ_TRUE;
-
- /* reset */
- if (parameters->precision) {
- free(parameters->precision);
- parameters->precision = NULL;
- }
- parameters->nb_precision = 0U;
-
- for (;;) {
- int prec;
- char mode;
- char comma;
- int count;
-
- count = sscanf(l_remaining, "%d%c%c", &prec, &mode, &comma);
- if (count == 1) {
- mode = 'C';
- count++;
- }
- if ((count == 2) || (mode == ',')) {
- if (mode == ',') {
- mode = 'C';
- }
- comma = ',';
- count = 3;
- }
- if (count == 3) {
- if ((prec < 1) || (prec > 32)) {
- fprintf(stderr, "Invalid precision %d in precision option %s\n", prec, option);
- l_result = OPJ_FALSE;
- break;
- }
- if ((mode != 'C') && (mode != 'S')) {
- fprintf(stderr, "Invalid precision mode %c in precision option %s\n", mode,
- option);
- l_result = OPJ_FALSE;
- break;
- }
- if (comma != ',') {
- fprintf(stderr, "Invalid character %c in precision option %s\n", comma, option);
- l_result = OPJ_FALSE;
- break;
- }
-
- if (parameters->precision == NULL) {
- /* first one */
- parameters->precision = (opj_precision *)malloc(sizeof(opj_precision));
- if (parameters->precision == NULL) {
- fprintf(stderr, "Could not allocate memory for precision option\n");
- l_result = OPJ_FALSE;
- break;
- }
- } else {
- OPJ_UINT32 l_new_size = parameters->nb_precision + 1U;
- opj_precision* l_new;
-
- if (l_new_size == 0U) {
- fprintf(stderr, "Could not allocate memory for precision option\n");
- l_result = OPJ_FALSE;
- break;
- }
-
- l_new = (opj_precision *)realloc(parameters->precision,
- l_new_size * sizeof(opj_precision));
- if (l_new == NULL) {
- fprintf(stderr, "Could not allocate memory for precision option\n");
- l_result = OPJ_FALSE;
- break;
- }
- parameters->precision = l_new;
- }
-
- parameters->precision[parameters->nb_precision].prec = (OPJ_UINT32)prec;
- switch (mode) {
- case 'C':
- parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_CLIP;
- break;
- case 'S':
- parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_SCALE;
- break;
- default:
- break;
- }
- parameters->nb_precision++;
-
- l_remaining = strchr(l_remaining, ',');
- if (l_remaining == NULL) {
- break;
- }
- l_remaining += 1;
- } else {
- fprintf(stderr, "Could not parse precision option %s\n", option);
- l_result = OPJ_FALSE;
- break;
- }
- }
-
- return l_result;
-}
-
-/* -------------------------------------------------------------------------- */
-
-int get_num_images(char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int num_images = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 0;
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
- num_images++;
- }
- closedir(dir);
- return num_images;
-}
-
-/* -------------------------------------------------------------------------- */
-int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int i = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 1;
- } else {
- fprintf(stderr, "Folder opened successfully\n");
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
-
- strcpy(dirptr->filename[i], content->d_name);
- i++;
- }
- closedir(dir);
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-int get_file_format(const char *filename)
-{
- unsigned int i;
- static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "rawl", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
- static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, RAWL_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
- const char * ext = strrchr(filename, '.');
- if (ext == NULL) {
- return -1;
- }
- ext++;
- if (*ext) {
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (strcasecmp(ext, extension[i]) == 0) {
- return format[i];
- }
- }
- }
-
- return -1;
-}
-
-#ifdef _WIN32
-const char* path_separator = "\\";
-#else
-const char* path_separator = "/";
-#endif
-
-/* -------------------------------------------------------------------------- */
-char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_decompress_parameters *parameters)
-{
- char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
- outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
- char *temp_p, temp1[OPJ_PATH_LEN] = "";
-
- strcpy(image_filename, dirptr->filename[imageno]);
- fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
- sprintf(infilename, "%s%s%s", img_fol->imgdirpath, path_separator,
- image_filename);
- parameters->decod_format = infile_format(infilename);
- if (parameters->decod_format == -1) {
- return 1;
- }
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
- infilename) != 0) {
- return 1;
- }
-
- /*Set output file*/
- strcpy(temp_ofname, strtok(image_filename, "."));
- while ((temp_p = strtok(NULL, ".")) != NULL) {
- strcat(temp_ofname, temp1);
- sprintf(temp1, ".%s", temp_p);
- }
- if (img_fol->set_out_format == 1) {
- sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
- img_fol->out_format);
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- outfilename) != 0) {
- return 1;
- }
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-#define JP2_RFC3745_MAGIC "\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a"
-#define JP2_MAGIC "\x0d\x0a\x87\x0a"
-/* position 45: "\xff\x52" */
-#define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51"
-
-static int infile_format(const char *fname)
-{
- FILE *reader;
- const char *s, *magic_s;
- int ext_format, magic_format;
- unsigned char buf[12];
- OPJ_SIZE_T l_nb_read;
-
- reader = fopen(fname, "rb");
-
- if (reader == NULL) {
- return -2;
- }
-
- memset(buf, 0, 12);
- l_nb_read = fread(buf, 1, 12, reader);
- fclose(reader);
- if (l_nb_read != 12) {
- return -1;
- }
-
-
-
- ext_format = get_file_format(fname);
-
- if (ext_format == JPT_CFMT) {
- return JPT_CFMT;
- }
-
- if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
- magic_format = JP2_CFMT;
- magic_s = ".jp2";
- } else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
- magic_format = J2K_CFMT;
- magic_s = ".j2k or .jpc or .j2c";
- } else {
- return -1;
- }
-
- if (magic_format == ext_format) {
- return ext_format;
- }
-
- s = fname + strlen(fname) - 4;
-
- fputs("\n===========================================\n", stderr);
- fprintf(stderr, "The extension of this file is incorrect.\n"
- "FOUND %s. SHOULD BE %s\n", s, magic_s);
- fputs("===========================================\n", stderr);
-
- return magic_format;
-}
-
-/* -------------------------------------------------------------------------- */
-/**
- * Parse the command line
- */
-/* -------------------------------------------------------------------------- */
-int parse_cmdline_decoder(int argc, char **argv,
- opj_decompress_parameters *parameters, img_fol_t *img_fol)
-{
- /* parse the command line */
- int totlen, c;
- opj_option_t long_option[] = {
- {"ImgDir", REQ_ARG, NULL, 'y'},
- {"OutFor", REQ_ARG, NULL, 'O'},
- {"force-rgb", NO_ARG, NULL, 1},
- {"upsample", NO_ARG, NULL, 1},
- {"split-pnm", NO_ARG, NULL, 1},
- {"threads", REQ_ARG, NULL, 'T'},
- {"quiet", NO_ARG, NULL, 1},
- };
-
- const char optlist[] = "i:o:r:l:x:d:t:p:c:"
-
- /* UniPG>> */
-#ifdef USE_JPWL
- "W:"
-#endif /* USE_JPWL */
- /* <<UniPG */
- "h" ;
-
- long_option[2].flag = &(parameters->force_rgb);
- long_option[3].flag = &(parameters->upsample);
- long_option[4].flag = &(parameters->split_pnm);
- long_option[6].flag = &(parameters->quiet);
- totlen = sizeof(long_option);
- opj_reset_options_reading();
- img_fol->set_out_format = 0;
- do {
- c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 0: /* long opt with flag */
- break;
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = infile_format(infile);
- switch (parameters->decod_format) {
- case J2K_CFMT:
- break;
- case JP2_CFMT:
- break;
- case JPT_CFMT:
- break;
- case -2:
- fprintf(stderr,
- "!! infile cannot be read: %s !!\n\n",
- infile);
- return 1;
- default:
- fprintf(stderr,
- "[ERROR] Unknown input file format: %s \n"
- " Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
- infile);
- return 1;
- }
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
- fprintf(stderr, "[ERROR] Path is too long\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case PGX_DFMT:
- break;
- case PXM_DFMT:
- break;
- case BMP_DFMT:
- break;
- case TIF_DFMT:
- break;
- case RAW_DFMT:
- break;
- case RAWL_DFMT:
- break;
- case TGA_DFMT:
- break;
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n",
- outfile);
- return 1;
- }
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- outfile) != 0) {
- fprintf(stderr, "[ERROR] Path is too long\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'O': { /* output format */
- char outformat[50];
- char *of = opj_optarg;
- sprintf(outformat, ".%s", of);
- img_fol->set_out_format = 1;
- parameters->cod_format = get_file_format(outformat);
- switch (parameters->cod_format) {
- case PGX_DFMT:
- img_fol->out_format = "pgx";
- break;
- case PXM_DFMT:
- img_fol->out_format = "ppm";
- break;
- case BMP_DFMT:
- img_fol->out_format = "bmp";
- break;
- case TIF_DFMT:
- img_fol->out_format = "tif";
- break;
- case RAW_DFMT:
- img_fol->out_format = "raw";
- break;
- case RAWL_DFMT:
- img_fol->out_format = "rawl";
- break;
- case TGA_DFMT:
- img_fol->out_format = "raw";
- break;
- case PNG_DFMT:
- img_fol->out_format = "png";
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n",
- outformat);
- return 1;
- break;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'r': { /* reduce option */
- sscanf(opj_optarg, "%u", &(parameters->core.cp_reduce));
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'l': { /* layering option */
- sscanf(opj_optarg, "%u", &(parameters->core.cp_layer));
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': /* display an help description */
- decode_help_display();
- return 1;
-
- /* ----------------------------------------------------- */
-
- case 'y': { /* Image Directory path */
- img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
- if (img_fol->imgdirpath == NULL) {
- return 1;
- }
- strcpy(img_fol->imgdirpath, opj_optarg);
- img_fol->set_imgdir = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'd': { /* Input decode ROI */
- size_t size_optarg = (size_t)strlen(opj_optarg) + 1U;
- char *ROI_values = (char*) malloc(size_optarg);
- if (ROI_values == NULL) {
- fprintf(stderr, "[ERROR] Couldn't allocate memory\n");
- return 1;
- }
- ROI_values[0] = '\0';
- memcpy(ROI_values, opj_optarg, size_optarg);
- /*printf("ROI_values = %s [%d / %d]\n", ROI_values, strlen(ROI_values), size_optarg ); */
- parse_DA_values(ROI_values, &parameters->DA_x0, &parameters->DA_y0,
- &parameters->DA_x1, &parameters->DA_y1);
-
- free(ROI_values);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 't': { /* Input tile index */
- sscanf(opj_optarg, "%u", &parameters->tile_index);
- parameters->nb_tile_to_decode = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'x': { /* Creation of index file */
- if (opj_strcpy_s(parameters->indexfilename, sizeof(parameters->indexfilename),
- opj_optarg) != 0) {
- fprintf(stderr, "[ERROR] Path is too long\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'p': { /* Force precision */
- if (!parse_precision(opj_optarg, parameters)) {
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'c': { /* Componenets */
- const char* iter = opj_optarg;
- while (1) {
- parameters->numcomps ++;
- parameters->comps_indices = (OPJ_UINT32*) realloc(
- parameters->comps_indices,
- parameters->numcomps * sizeof(OPJ_UINT32));
- parameters->comps_indices[parameters->numcomps - 1] =
- (OPJ_UINT32) atoi(iter);
- iter = strchr(iter, ',');
- if (iter == NULL) {
- break;
- }
- iter ++;
- }
- }
- break;
- /* ----------------------------------------------------- */
-
- /* UniPG>> */
-#ifdef USE_JPWL
-
- case 'W': { /* activate JPWL correction */
- char *token = NULL;
-
- token = strtok(opj_optarg, ",");
- while (token != NULL) {
-
- /* search expected number of components */
- if (*token == 'c') {
-
- static int compno;
-
- compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
-
- if (sscanf(token, "c=%d", &compno) == 1) {
- /* Specified */
- if ((compno < 1) || (compno > 256)) {
- fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
- return 1;
- }
- parameters->jpwl_exp_comps = compno;
-
- } else if (!strcmp(token, "c")) {
- /* default */
- parameters->jpwl_exp_comps = compno; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
- return 1;
- };
- }
-
- /* search maximum number of tiles */
- if (*token == 't') {
-
- static int tileno;
-
- tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
-
- if (sscanf(token, "t=%d", &tileno) == 1) {
- /* Specified */
- if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
- fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
- return 1;
- }
- parameters->jpwl_max_tiles = tileno;
-
- } else if (!strcmp(token, "t")) {
- /* default */
- parameters->jpwl_max_tiles = tileno; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
- return 1;
- };
- }
-
- /* next token or bust */
- token = strtok(NULL, ",");
- };
- parameters->jpwl_correct = OPJ_TRUE;
- if (!(parameter->quiet)) {
- fprintf(stdout, "JPWL correction capability activated\n");
- fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
- }
- }
- break;
-#endif /* USE_JPWL */
- /* <<UniPG */
-
- /* ----------------------------------------------------- */
- case 'T': { /* Number of threads */
- if (strcmp(opj_optarg, "ALL_CPUS") == 0) {
- parameters->num_threads = opj_get_num_cpus();
- if (parameters->num_threads == 1) {
- parameters->num_threads = 0;
- }
- } else {
- sscanf(opj_optarg, "%d", &parameters->num_threads);
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- default:
- fprintf(stderr, "[WARNING] An invalid option has been ignored.\n");
- break;
- }
- } while (c != -1);
-
- /* check for possible errors */
- if (img_fol->set_imgdir == 1) {
- if (!(parameters->infile[0] == 0)) {
- fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together.\n");
- return 1;
- }
- if (img_fol->set_out_format == 0) {
- fprintf(stderr,
- "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
- fprintf(stderr, "Only one format allowed.\n"
- "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
- return 1;
- }
- if (!((parameters->outfile[0] == 0))) {
- fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together.\n");
- return 1;
- }
- } else {
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stderr, "[ERROR] Required parameters are missing\n"
- "Example: %s -i image.j2k -o image.pgm\n", argv[0]);
- fprintf(stderr, " Help: %s -h\n", argv[0]);
- return 1;
- }
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-/**
- * Parse decoding area input values
- * separator = ","
- */
-/* -------------------------------------------------------------------------- */
-int parse_DA_values(char* inArg, unsigned int *DA_x0, unsigned int *DA_y0,
- unsigned int *DA_x1, unsigned int *DA_y1)
-{
- int it = 0;
- int values[4];
- char delims[] = ",";
- char *result = NULL;
- result = strtok(inArg, delims);
-
- while ((result != NULL) && (it < 4)) {
- values[it] = atoi(result);
- result = strtok(NULL, delims);
- it++;
- }
-
- if (it != 4) {
- return EXIT_FAILURE;
- } else {
- *DA_x0 = (OPJ_UINT32)values[0];
- *DA_y0 = (OPJ_UINT32)values[1];
- *DA_x1 = (OPJ_UINT32)values[2];
- *DA_y1 = (OPJ_UINT32)values[3];
- return EXIT_SUCCESS;
- }
-}
-
-OPJ_FLOAT64 opj_clock(void)
-{
-#ifdef _WIN32
- /* _WIN32: use QueryPerformance (very accurate) */
- LARGE_INTEGER freq, t ;
- /* freq is the clock speed of the CPU */
- QueryPerformanceFrequency(&freq) ;
- /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
- /* t is the high resolution performance counter (see MSDN) */
- QueryPerformanceCounter(& t) ;
- return freq.QuadPart ? ((OPJ_FLOAT64)t.QuadPart / (OPJ_FLOAT64)freq.QuadPart) :
- 0;
-#elif defined(__linux)
- struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- return ((OPJ_FLOAT64)ts.tv_sec + (OPJ_FLOAT64)ts.tv_nsec * 1e-9);
-#else
- /* Unix : use resource usage */
- /* FIXME: this counts the total CPU time, instead of the user perceived time */
- struct rusage t;
- OPJ_FLOAT64 procTime;
- /* (1) Get the rusage data structure at this moment (man getrusage) */
- getrusage(0, &t);
- /* (2) What is the elapsed time ? - CPU time = User time + System time */
- /* (2a) Get the seconds */
- procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
- /* (2b) More precisely! Get the microseconds part ! */
- return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) *
- 1e-6) ;
-#endif
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting no client object
-*/
-static void info_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[INFO] %s", msg);
-}
-/**
-sample quiet callback expecting no client object
-*/
-static void quiet_callback(const char *msg, void *client_data)
-{
- (void)msg;
- (void)client_data;
-}
-
-static void set_default_parameters(opj_decompress_parameters* parameters)
-{
- if (parameters) {
- memset(parameters, 0, sizeof(opj_decompress_parameters));
-
- /* default decoding parameters (command line specific) */
- parameters->decod_format = -1;
- parameters->cod_format = -1;
-
- /* default decoding parameters (core) */
- opj_set_default_decoder_parameters(&(parameters->core));
- }
-}
-
-static void destroy_parameters(opj_decompress_parameters* parameters)
-{
- if (parameters) {
- if (parameters->precision) {
- free(parameters->precision);
- parameters->precision = NULL;
- }
-
- free(parameters->comps_indices);
- parameters->comps_indices = NULL;
- }
-}
-
-/* -------------------------------------------------------------------------- */
-
-static opj_image_t* convert_gray_to_rgb(opj_image_t* original)
-{
- OPJ_UINT32 compno;
- opj_image_t* l_new_image = NULL;
- opj_image_cmptparm_t* l_new_components = NULL;
-
- l_new_components = (opj_image_cmptparm_t*)malloc((original->numcomps + 2U) *
- sizeof(opj_image_cmptparm_t));
- if (l_new_components == NULL) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
- opj_image_destroy(original);
- return NULL;
- }
-
- l_new_components[0].bpp = l_new_components[1].bpp = l_new_components[2].bpp =
- original->comps[0].bpp;
- l_new_components[0].dx = l_new_components[1].dx = l_new_components[2].dx =
- original->comps[0].dx;
- l_new_components[0].dy = l_new_components[1].dy = l_new_components[2].dy =
- original->comps[0].dy;
- l_new_components[0].h = l_new_components[1].h = l_new_components[2].h =
- original->comps[0].h;
- l_new_components[0].w = l_new_components[1].w = l_new_components[2].w =
- original->comps[0].w;
- l_new_components[0].prec = l_new_components[1].prec = l_new_components[2].prec =
- original->comps[0].prec;
- l_new_components[0].sgnd = l_new_components[1].sgnd = l_new_components[2].sgnd =
- original->comps[0].sgnd;
- l_new_components[0].x0 = l_new_components[1].x0 = l_new_components[2].x0 =
- original->comps[0].x0;
- l_new_components[0].y0 = l_new_components[1].y0 = l_new_components[2].y0 =
- original->comps[0].y0;
-
- for (compno = 1U; compno < original->numcomps; ++compno) {
- l_new_components[compno + 2U].bpp = original->comps[compno].bpp;
- l_new_components[compno + 2U].dx = original->comps[compno].dx;
- l_new_components[compno + 2U].dy = original->comps[compno].dy;
- l_new_components[compno + 2U].h = original->comps[compno].h;
- l_new_components[compno + 2U].w = original->comps[compno].w;
- l_new_components[compno + 2U].prec = original->comps[compno].prec;
- l_new_components[compno + 2U].sgnd = original->comps[compno].sgnd;
- l_new_components[compno + 2U].x0 = original->comps[compno].x0;
- l_new_components[compno + 2U].y0 = original->comps[compno].y0;
- }
-
- l_new_image = opj_image_create(original->numcomps + 2U, l_new_components,
- OPJ_CLRSPC_SRGB);
- free(l_new_components);
- if (l_new_image == NULL) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
- opj_image_destroy(original);
- return NULL;
- }
-
- l_new_image->x0 = original->x0;
- l_new_image->x1 = original->x1;
- l_new_image->y0 = original->y0;
- l_new_image->y1 = original->y1;
-
- l_new_image->comps[0].factor = l_new_image->comps[1].factor =
- l_new_image->comps[2].factor = original->comps[0].factor;
- l_new_image->comps[0].alpha = l_new_image->comps[1].alpha =
- l_new_image->comps[2].alpha = original->comps[0].alpha;
- l_new_image->comps[0].resno_decoded = l_new_image->comps[1].resno_decoded =
- l_new_image->comps[2].resno_decoded = original->comps[0].resno_decoded;
-
- memcpy(l_new_image->comps[0].data, original->comps[0].data,
- original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
- memcpy(l_new_image->comps[1].data, original->comps[0].data,
- original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
- memcpy(l_new_image->comps[2].data, original->comps[0].data,
- original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
-
- for (compno = 1U; compno < original->numcomps; ++compno) {
- l_new_image->comps[compno + 2U].factor = original->comps[compno].factor;
- l_new_image->comps[compno + 2U].alpha = original->comps[compno].alpha;
- l_new_image->comps[compno + 2U].resno_decoded =
- original->comps[compno].resno_decoded;
- memcpy(l_new_image->comps[compno + 2U].data, original->comps[compno].data,
- original->comps[compno].w * original->comps[compno].h * sizeof(OPJ_INT32));
- }
- opj_image_destroy(original);
- return l_new_image;
-}
-
-/* -------------------------------------------------------------------------- */
-
-static opj_image_t* upsample_image_components(opj_image_t* original)
-{
- opj_image_t* l_new_image = NULL;
- opj_image_cmptparm_t* l_new_components = NULL;
- OPJ_BOOL l_upsample_need = OPJ_FALSE;
- OPJ_UINT32 compno;
-
- for (compno = 0U; compno < original->numcomps; ++compno) {
- if (original->comps[compno].factor > 0U) {
- fprintf(stderr,
- "ERROR -> opj_decompress: -upsample not supported with reduction\n");
- opj_image_destroy(original);
- return NULL;
- }
- if ((original->comps[compno].dx > 1U) || (original->comps[compno].dy > 1U)) {
- l_upsample_need = OPJ_TRUE;
- break;
- }
- }
- if (!l_upsample_need) {
- return original;
- }
- /* Upsample is needed */
- l_new_components = (opj_image_cmptparm_t*)malloc(original->numcomps * sizeof(
- opj_image_cmptparm_t));
- if (l_new_components == NULL) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
- opj_image_destroy(original);
- return NULL;
- }
-
- for (compno = 0U; compno < original->numcomps; ++compno) {
- opj_image_cmptparm_t* l_new_cmp = &(l_new_components[compno]);
- opj_image_comp_t* l_org_cmp = &(original->comps[compno]);
-
- l_new_cmp->bpp = l_org_cmp->bpp;
- l_new_cmp->prec = l_org_cmp->prec;
- l_new_cmp->sgnd = l_org_cmp->sgnd;
- l_new_cmp->x0 = original->x0;
- l_new_cmp->y0 = original->y0;
- l_new_cmp->dx = 1;
- l_new_cmp->dy = 1;
- l_new_cmp->w =
- l_org_cmp->w; /* should be original->x1 - original->x0 for dx==1 */
- l_new_cmp->h =
- l_org_cmp->h; /* should be original->y1 - original->y0 for dy==0 */
-
- if (l_org_cmp->dx > 1U) {
- l_new_cmp->w = original->x1 - original->x0;
- }
-
- if (l_org_cmp->dy > 1U) {
- l_new_cmp->h = original->y1 - original->y0;
- }
- }
-
- l_new_image = opj_image_create(original->numcomps, l_new_components,
- original->color_space);
- free(l_new_components);
- if (l_new_image == NULL) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
- opj_image_destroy(original);
- return NULL;
- }
-
- l_new_image->x0 = original->x0;
- l_new_image->x1 = original->x1;
- l_new_image->y0 = original->y0;
- l_new_image->y1 = original->y1;
-
- for (compno = 0U; compno < original->numcomps; ++compno) {
- opj_image_comp_t* l_new_cmp = &(l_new_image->comps[compno]);
- opj_image_comp_t* l_org_cmp = &(original->comps[compno]);
-
- l_new_cmp->factor = l_org_cmp->factor;
- l_new_cmp->alpha = l_org_cmp->alpha;
- l_new_cmp->resno_decoded = l_org_cmp->resno_decoded;
-
- if ((l_org_cmp->dx > 1U) || (l_org_cmp->dy > 1U)) {
- const OPJ_INT32* l_src = l_org_cmp->data;
- OPJ_INT32* l_dst = l_new_cmp->data;
- OPJ_UINT32 y;
- OPJ_UINT32 xoff, yoff;
-
- /* need to take into account dx & dy */
- xoff = l_org_cmp->dx * l_org_cmp->x0 - original->x0;
- yoff = l_org_cmp->dy * l_org_cmp->y0 - original->y0;
- if ((xoff >= l_org_cmp->dx) || (yoff >= l_org_cmp->dy)) {
- fprintf(stderr,
- "ERROR -> opj_decompress: Invalid image/component parameters found when upsampling\n");
- opj_image_destroy(original);
- opj_image_destroy(l_new_image);
- return NULL;
- }
-
- for (y = 0U; y < yoff; ++y) {
- memset(l_dst, 0U, l_new_cmp->w * sizeof(OPJ_INT32));
- l_dst += l_new_cmp->w;
- }
-
- if (l_new_cmp->h > (l_org_cmp->dy -
- 1U)) { /* check subtraction overflow for really small images */
- for (; y < l_new_cmp->h - (l_org_cmp->dy - 1U); y += l_org_cmp->dy) {
- OPJ_UINT32 x, dy;
- OPJ_UINT32 xorg;
-
- xorg = 0U;
- for (x = 0U; x < xoff; ++x) {
- l_dst[x] = 0;
- }
- if (l_new_cmp->w > (l_org_cmp->dx -
- 1U)) { /* check subtraction overflow for really small images */
- for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
- OPJ_UINT32 dx;
- for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
- l_dst[x + dx] = l_src[xorg];
- }
- }
- }
- for (; x < l_new_cmp->w; ++x) {
- l_dst[x] = l_src[xorg];
- }
- l_dst += l_new_cmp->w;
-
- for (dy = 1U; dy < l_org_cmp->dy; ++dy) {
- memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
- l_dst += l_new_cmp->w;
- }
- l_src += l_org_cmp->w;
- }
- }
- if (y < l_new_cmp->h) {
- OPJ_UINT32 x;
- OPJ_UINT32 xorg;
-
- xorg = 0U;
- for (x = 0U; x < xoff; ++x) {
- l_dst[x] = 0;
- }
- if (l_new_cmp->w > (l_org_cmp->dx -
- 1U)) { /* check subtraction overflow for really small images */
- for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
- OPJ_UINT32 dx;
- for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
- l_dst[x + dx] = l_src[xorg];
- }
- }
- }
- for (; x < l_new_cmp->w; ++x) {
- l_dst[x] = l_src[xorg];
- }
- l_dst += l_new_cmp->w;
- ++y;
- for (; y < l_new_cmp->h; ++y) {
- memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
- l_dst += l_new_cmp->w;
- }
- }
- } else {
- memcpy(l_new_cmp->data, l_org_cmp->data,
- l_org_cmp->w * l_org_cmp->h * sizeof(OPJ_INT32));
- }
- }
- opj_image_destroy(original);
- return l_new_image;
-}
-
-/* -------------------------------------------------------------------------- */
-/**
- * OPJ_DECOMPRESS MAIN
- */
-/* -------------------------------------------------------------------------- */
-int main(int argc, char **argv)
-{
- opj_decompress_parameters parameters; /* decompression parameters */
- opj_image_t* image = NULL;
- opj_stream_t *l_stream = NULL; /* Stream */
- opj_codec_t* l_codec = NULL; /* Handle to a decompressor */
- opj_codestream_index_t* cstr_index = NULL;
-
- OPJ_INT32 num_images, imageno;
- img_fol_t img_fol;
- dircnt_t *dirptr = NULL;
- int failed = 0;
- OPJ_FLOAT64 t, tCumulative = 0;
- OPJ_UINT32 numDecompressedImages = 0;
- OPJ_UINT32 cp_reduce;
-
- /* set decoding parameters to default values */
- set_default_parameters(&parameters);
-
- /* Initialize img_fol */
- memset(&img_fol, 0, sizeof(img_fol_t));
-
- /* parse input and get user encoding parameters */
- if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol) == 1) {
- failed = 1;
- goto fin;
- }
-
- cp_reduce = parameters.core.cp_reduce;
- if (getenv("USE_OPJ_SET_DECODED_RESOLUTION_FACTOR") != NULL) {
- /* For debugging/testing purposes, do not set the cp_reduce member */
- /* if USE_OPJ_SET_DECODED_RESOLUTION_FACTOR is defined, but used */
- /* the opj_set_decoded_resolution_factor() API instead */
- parameters.core.cp_reduce = 0;
- }
-
-
- /* Initialize reading of directory */
- if (img_fol.set_imgdir == 1) {
- int it_image;
- num_images = get_num_images(img_fol.imgdirpath);
-
- dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
- if (!dirptr) {
- destroy_parameters(&parameters);
- return EXIT_FAILURE;
- }
- dirptr->filename_buf = (char*)malloc((size_t)num_images * OPJ_PATH_LEN * sizeof(
- char)); /* Stores at max 10 image file names*/
- if (!dirptr->filename_buf) {
- failed = 1;
- goto fin;
- }
-
- dirptr->filename = (char**) malloc((size_t)num_images * sizeof(char*));
-
- if (!dirptr->filename) {
- failed = 1;
- goto fin;
- }
- for (it_image = 0; it_image < num_images; it_image++) {
- dirptr->filename[it_image] = dirptr->filename_buf + it_image * OPJ_PATH_LEN;
- }
-
- if (load_images(dirptr, img_fol.imgdirpath) == 1) {
- failed = 1;
- goto fin;
- }
- if (num_images == 0) {
- fprintf(stderr, "Folder is empty\n");
- failed = 1;
- goto fin;
- }
- } else {
- num_images = 1;
- }
-
- /*Decoding image one by one*/
- for (imageno = 0; imageno < num_images ; imageno++) {
-
- if (!parameters.quiet) {
- fprintf(stderr, "\n");
- }
-
- if (img_fol.set_imgdir == 1) {
- if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
- fprintf(stderr, "skipping file...\n");
- destroy_parameters(&parameters);
- continue;
- }
- }
-
- /* read the input file and put it in memory */
- /* ---------------------------------------- */
-
- l_stream = opj_stream_create_default_file_stream(parameters.infile, 1);
- if (!l_stream) {
- fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",
- parameters.infile);
- failed = 1;
- goto fin;
- }
-
- /* decode the JPEG2000 stream */
- /* ---------------------- */
-
- switch (parameters.decod_format) {
- case J2K_CFMT: { /* JPEG-2000 codestream */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_J2K);
- break;
- }
- case JP2_CFMT: { /* JPEG 2000 compressed image data */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_JP2);
- break;
- }
- case JPT_CFMT: { /* JPEG 2000, JPIP */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_JPT);
- break;
- }
- default:
- fprintf(stderr, "skipping file..\n");
- destroy_parameters(&parameters);
- opj_stream_destroy(l_stream);
- continue;
- }
-
- if (parameters.quiet) {
- /* Set all callbacks to quiet */
- opj_set_info_handler(l_codec, quiet_callback, 00);
- opj_set_warning_handler(l_codec, quiet_callback, 00);
- opj_set_error_handler(l_codec, quiet_callback, 00);
- } else {
- /* catch events using our callbacks and give a local context */
- opj_set_info_handler(l_codec, info_callback, 00);
- opj_set_warning_handler(l_codec, warning_callback, 00);
- opj_set_error_handler(l_codec, error_callback, 00);
- }
-
-
- t = opj_clock();
-
- /* Setup the decoder decoding parameters using user parameters */
- if (!opj_setup_decoder(l_codec, &(parameters.core))) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to setup the decoder\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- failed = 1;
- goto fin;
- }
-
- if (parameters.num_threads >= 1 &&
- !opj_codec_set_threads(l_codec, parameters.num_threads)) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to set number of threads\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- failed = 1;
- goto fin;
- }
-
- /* Read the main header of the codestream and if necessary the JP2 boxes*/
- if (! opj_read_header(l_stream, l_codec, &image)) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to read the header\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
-
- if (parameters.numcomps) {
- if (! opj_set_decoded_components(l_codec,
- parameters.numcomps,
- parameters.comps_indices,
- OPJ_FALSE)) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to set the component indices!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
- }
-
- if (getenv("USE_OPJ_SET_DECODED_RESOLUTION_FACTOR") != NULL) {
- /* For debugging/testing purposes, and also an illustration on how to */
- /* use the alternative API opj_set_decoded_resolution_factor() instead */
- /* of setting parameters.cp_reduce */
- if (! opj_set_decoded_resolution_factor(l_codec, cp_reduce)) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to set the resolution factor tile!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
- }
-
- if (!parameters.nb_tile_to_decode) {
- if (getenv("SKIP_OPJ_SET_DECODE_AREA") != NULL &&
- parameters.DA_x0 == 0 &&
- parameters.DA_y0 == 0 &&
- parameters.DA_x1 == 0 &&
- parameters.DA_y1 == 0) {
- /* For debugging/testing purposes, */
- /* do nothing if SKIP_OPJ_SET_DECODE_AREA env variable */
- /* is defined and no decoded area has been set */
- }
- /* Optional if you want decode the entire image */
- else if (!opj_set_decode_area(l_codec, image, (OPJ_INT32)parameters.DA_x0,
- (OPJ_INT32)parameters.DA_y0, (OPJ_INT32)parameters.DA_x1,
- (OPJ_INT32)parameters.DA_y1)) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to set the decoded area\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
-
- /* Get the decoded image */
- if (!(opj_decode(l_codec, l_stream, image) &&
- opj_end_decompress(l_codec, l_stream))) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to decode image!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
- } else {
- if (!(parameters.DA_x0 == 0 &&
- parameters.DA_y0 == 0 &&
- parameters.DA_x1 == 0 &&
- parameters.DA_y1 == 0)) {
- if (!(parameters.quiet)) {
- fprintf(stderr, "WARNING: -d option ignored when used together with -t\n");
- }
- }
-
- if (!opj_get_decoded_tile(l_codec, l_stream, image, parameters.tile_index)) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to decode tile!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
- if (!(parameters.quiet)) {
- fprintf(stdout, "tile %d is decoded!\n\n", parameters.tile_index);
- }
- }
-
- tCumulative += opj_clock() - t;
- numDecompressedImages++;
-
- /* Close the byte stream */
- opj_stream_destroy(l_stream);
-
- if (image->color_space != OPJ_CLRSPC_SYCC
- && image->numcomps == 3 && image->comps[0].dx == image->comps[0].dy
- && image->comps[1].dx != 1) {
- image->color_space = OPJ_CLRSPC_SYCC;
- } else if (image->numcomps <= 2) {
- image->color_space = OPJ_CLRSPC_GRAY;
- }
-
- if (image->color_space == OPJ_CLRSPC_SYCC) {
- color_sycc_to_rgb(image);
- } else if ((image->color_space == OPJ_CLRSPC_CMYK) &&
- (parameters.cod_format != TIF_DFMT)) {
- color_cmyk_to_rgb(image);
- } else if (image->color_space == OPJ_CLRSPC_EYCC) {
- color_esycc_to_rgb(image);
- }
-
- if (image->icc_profile_buf) {
-#if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
- if (image->icc_profile_len) {
- color_apply_icc_profile(image);
- } else {
- color_cielab_to_rgb(image);
- }
-#endif
- free(image->icc_profile_buf);
- image->icc_profile_buf = NULL;
- image->icc_profile_len = 0;
- }
-
- /* Force output precision */
- /* ---------------------- */
- if (parameters.precision != NULL) {
- OPJ_UINT32 compno;
- for (compno = 0; compno < image->numcomps; ++compno) {
- OPJ_UINT32 precno = compno;
- OPJ_UINT32 prec;
-
- if (precno >= parameters.nb_precision) {
- precno = parameters.nb_precision - 1U;
- }
-
- prec = parameters.precision[precno].prec;
- if (prec == 0) {
- prec = image->comps[compno].prec;
- }
-
- switch (parameters.precision[precno].mode) {
- case OPJ_PREC_MODE_CLIP:
- clip_component(&(image->comps[compno]), prec);
- break;
- case OPJ_PREC_MODE_SCALE:
- scale_component(&(image->comps[compno]), prec);
- break;
- default:
- break;
- }
-
- }
- }
-
- /* Upsample components */
- /* ------------------- */
- if (parameters.upsample) {
- image = upsample_image_components(image);
- if (image == NULL) {
- fprintf(stderr,
- "ERROR -> opj_decompress: failed to upsample image components!\n");
- opj_destroy_codec(l_codec);
- failed = 1;
- goto fin;
- }
- }
-
- /* Force RGB output */
- /* ---------------- */
- if (parameters.force_rgb) {
- switch (image->color_space) {
- case OPJ_CLRSPC_SRGB:
- break;
- case OPJ_CLRSPC_GRAY:
- image = convert_gray_to_rgb(image);
- break;
- default:
- fprintf(stderr,
- "ERROR -> opj_decompress: don't know how to convert image to RGB colorspace!\n");
- opj_image_destroy(image);
- image = NULL;
- break;
- }
- if (image == NULL) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to convert to RGB image!\n");
- opj_destroy_codec(l_codec);
- failed = 1;
- goto fin;
- }
- }
-
- /* create output image */
- /* ------------------- */
- switch (parameters.cod_format) {
- case PXM_DFMT: /* PNM PGM PPM */
- if (imagetopnm(image, parameters.outfile, parameters.split_pnm)) {
- fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case PGX_DFMT: /* PGX */
- if (imagetopgx(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case BMP_DFMT: /* BMP */
- if (imagetobmp(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#ifdef OPJ_HAVE_LIBTIFF
- case TIF_DFMT: /* TIFF */
- if (imagetotif(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#endif /* OPJ_HAVE_LIBTIFF */
- case RAW_DFMT: /* RAW */
- if (imagetoraw(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Error generating raw file. Outfile %s not generated\n",
- parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case RAWL_DFMT: /* RAWL */
- if (imagetorawl(image, parameters.outfile)) {
- fprintf(stderr,
- "[ERROR] Error generating rawl file. Outfile %s not generated\n",
- parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case TGA_DFMT: /* TGA */
- if (imagetotga(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Error generating tga file. Outfile %s not generated\n",
- parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#ifdef OPJ_HAVE_LIBPNG
- case PNG_DFMT: /* PNG */
- if (imagetopng(image, parameters.outfile)) {
- fprintf(stderr, "[ERROR] Error generating png file. Outfile %s not generated\n",
- parameters.outfile);
- failed = 1;
- } else if (!(parameters.quiet)) {
- fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#endif /* OPJ_HAVE_LIBPNG */
- /* Can happen if output file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
- */
- default:
- fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
- failed = 1;
- }
-
- /* free remaining structures */
- if (l_codec) {
- opj_destroy_codec(l_codec);
- }
-
-
- /* free image data structure */
- opj_image_destroy(image);
-
- /* destroy the codestream index */
- opj_destroy_cstr_index(&cstr_index);
-
- if (failed) {
- (void)remove(parameters.outfile); /* ignore return value */
- }
- }
-fin:
- destroy_parameters(&parameters);
- if (failed && img_fol.imgdirpath) {
- free(img_fol.imgdirpath);
- }
- if (dirptr) {
- if (dirptr->filename) {
- free(dirptr->filename);
- }
- if (dirptr->filename_buf) {
- free(dirptr->filename_buf);
- }
- free(dirptr);
- }
- if (numDecompressedImages && !failed && !(parameters.quiet)) {
- fprintf(stdout, "decode time: %d ms\n",
- (int)((tCumulative * 1000.0) / (OPJ_FLOAT64)numDecompressedImages));
- }
- return failed ? EXIT_FAILURE : EXIT_SUCCESS;
-}
-/*end main()*/
diff --git a/openjpeg/src/bin/jp2/opj_dump.c b/openjpeg/src/bin/jp2/opj_dump.c
deleted file mode 100644
index 6e15fee4..00000000
--- a/openjpeg/src/bin/jp2/opj_dump.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2010, Mathieu Malaterre, GDCM
- * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
- * Copyright (c) 2012, CS Systemes d'Information, France
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <strings.h>
-#define _stricmp strcasecmp
-#define _strnicmp strncasecmp
-#endif /* _WIN32 */
-
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#include "format_defs.h"
-#include "opj_string.h"
-
-typedef struct dircnt {
- /** Buffer for holding images read from Directory*/
- char *filename_buf;
- /** Pointer to the buffer*/
- char **filename;
-} dircnt_t;
-
-
-typedef struct img_folder {
- /** The directory path of the folder containing input images*/
- char *imgdirpath;
- /** Output format*/
- const char *out_format;
- /** Enable option*/
- char set_imgdir;
- /** Enable Cod Format for output*/
- char set_out_format;
-
- int flag;
-} img_fol_t;
-
-/* -------------------------------------------------------------------------- */
-/* Declarations */
-static int get_num_images(char *imgdirpath);
-static int load_images(dircnt_t *dirptr, char *imgdirpath);
-static int get_file_format(const char *filename);
-static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_dparameters_t *parameters);
-static int infile_format(const char *fname);
-
-static int parse_cmdline_decoder(int argc, char **argv,
- opj_dparameters_t *parameters, img_fol_t *img_fol);
-
-/* -------------------------------------------------------------------------- */
-static void decode_help_display(void)
-{
- fprintf(stdout, "\nThis is the opj_dump utility from the OpenJPEG project.\n"
- "It dumps JPEG 2000 codestream info to stdout or a given file.\n"
- "It has been compiled against openjp2 library v%s.\n\n", opj_version());
-
- fprintf(stdout, "Parameters:\n");
- fprintf(stdout, "-----------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " -ImgDir <directory>\n");
- fprintf(stdout, " Image file Directory path \n");
- fprintf(stdout, " -i <compressed file>\n");
- fprintf(stdout,
- " REQUIRED only if an Input image directory not specified\n");
- fprintf(stdout,
- " Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
- fprintf(stdout, " is identified based on its suffix.\n");
- fprintf(stdout, " -o <output file>\n");
- fprintf(stdout, " OPTIONAL\n");
- fprintf(stdout, " Output file where file info will be dump.\n");
- fprintf(stdout, " By default it will be in the stdout.\n");
- fprintf(stdout, " -v "); /* FIXME WIP_MSD */
- fprintf(stdout, " OPTIONAL\n");
- fprintf(stdout, " Enable informative messages\n");
- fprintf(stdout, " By default verbose mode is off.\n");
- fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-static int get_num_images(char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int num_images = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 0;
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
- num_images++;
- }
- closedir(dir);
- return num_images;
-}
-
-/* -------------------------------------------------------------------------- */
-static int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int i = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 1;
- } else {
- fprintf(stderr, "Folder opened successfully\n");
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
-
- strcpy(dirptr->filename[i], content->d_name);
- i++;
- }
- closedir(dir);
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-static int get_file_format(const char *filename)
-{
- unsigned int i;
- static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
- static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
- const char *ext = strrchr(filename, '.');
- if (ext == NULL) {
- return -1;
- }
- ext++;
- if (ext) {
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (_strnicmp(ext, extension[i], 3) == 0) {
- return format[i];
- }
- }
- }
-
- return -1;
-}
-
-/* -------------------------------------------------------------------------- */
-static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_dparameters_t *parameters)
-{
- char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
- outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
- char *temp_p, temp1[OPJ_PATH_LEN] = "";
-
- strcpy(image_filename, dirptr->filename[imageno]);
- fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
- parameters->decod_format = get_file_format(image_filename);
- if (parameters->decod_format == -1) {
- return 1;
- }
- sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
- infilename) != 0) {
- return 1;
- }
-
- /*Set output file*/
- strcpy(temp_ofname, strtok(image_filename, "."));
- while ((temp_p = strtok(NULL, ".")) != NULL) {
- strcat(temp_ofname, temp1);
- sprintf(temp1, ".%s", temp_p);
- }
- if (img_fol->set_out_format == 1) {
- sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
- img_fol->out_format);
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- outfilename) != 0) {
- return 1;
- }
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-#define JP2_RFC3745_MAGIC "\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a"
-#define JP2_MAGIC "\x0d\x0a\x87\x0a"
-/* position 45: "\xff\x52" */
-#define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51"
-
-static int infile_format(const char *fname)
-{
- FILE *reader;
- const char *s, *magic_s;
- int ext_format, magic_format;
- unsigned char buf[12];
- size_t l_nb_read;
-
- reader = fopen(fname, "rb");
-
- if (reader == NULL) {
- return -1;
- }
-
- memset(buf, 0, 12);
- l_nb_read = fread(buf, 1, 12, reader);
- fclose(reader);
- if (l_nb_read != 12) {
- return -1;
- }
-
-
-
- ext_format = get_file_format(fname);
-
- if (ext_format == JPT_CFMT) {
- return JPT_CFMT;
- }
-
- if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
- magic_format = JP2_CFMT;
- magic_s = ".jp2";
- } else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
- magic_format = J2K_CFMT;
- magic_s = ".j2k or .jpc or .j2c";
- } else {
- return -1;
- }
-
- if (magic_format == ext_format) {
- return ext_format;
- }
-
- s = fname + strlen(fname) - 4;
-
- fputs("\n===========================================\n", stderr);
- fprintf(stderr, "The extension of this file is incorrect.\n"
- "FOUND %s. SHOULD BE %s\n", s, magic_s);
- fputs("===========================================\n", stderr);
-
- return magic_format;
-}
-/* -------------------------------------------------------------------------- */
-/**
- * Parse the command line
- */
-/* -------------------------------------------------------------------------- */
-static int parse_cmdline_decoder(int argc, char **argv,
- opj_dparameters_t *parameters, img_fol_t *img_fol)
-{
- int totlen, c;
- opj_option_t long_option[] = {
- {"ImgDir", REQ_ARG, NULL, 'y'}
- };
- const char optlist[] = "i:o:f:hv";
-
- totlen = sizeof(long_option);
- img_fol->set_out_format = 0;
- do {
- c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = infile_format(infile);
- switch (parameters->decod_format) {
- case J2K_CFMT:
- break;
- case JP2_CFMT:
- break;
- case JPT_CFMT:
- break;
- default:
- fprintf(stderr,
- "[ERROR] Unknown input file format: %s \n"
- " Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
- infile);
- return 1;
- }
- if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
- fprintf(stderr, "[ERROR] Path is too long\n");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'o': { /* output file */
- if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
- opj_optarg) != 0) {
- fprintf(stderr, "[ERROR] Path is too long\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'f': /* flag */
- img_fol->flag = atoi(opj_optarg);
- break;
- /* ----------------------------------------------------- */
-
- case 'h': /* display an help description */
- decode_help_display();
- return 1;
-
- /* ------------------------------------------------------ */
-
- case 'y': { /* Image Directory path */
- img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
- if (img_fol->imgdirpath == NULL) {
- return 1;
- }
- strcpy(img_fol->imgdirpath, opj_optarg);
- img_fol->set_imgdir = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'v': { /* Verbose mode */
- parameters->m_verbose = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
- default:
- fprintf(stderr, "[WARNING] An invalid option has been ignored.\n");
- break;
- }
- } while (c != -1);
-
- /* check for possible errors */
- if (img_fol->set_imgdir == 1) {
- if (!(parameters->infile[0] == 0)) {
- fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together.\n");
- return 1;
- }
- if (img_fol->set_out_format == 0) {
- fprintf(stderr,
- "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
- fprintf(stderr, "Only one format allowed.\n"
- "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
- return 1;
- }
- if (!(parameters->outfile[0] == 0)) {
- fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together\n");
- return 1;
- }
- } else {
- if (parameters->infile[0] == 0) {
- fprintf(stderr, "[ERROR] Required parameter is missing\n");
- fprintf(stderr, "Example: %s -i image.j2k\n", argv[0]);
- fprintf(stderr, " Help: %s -h\n", argv[0]);
- return 1;
- }
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error debug callback expecting no client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[ERROR] %s", msg);
-}
-/**
-sample warning debug callback expecting no client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting no client object
-*/
-static void info_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-/**
- * OPJ_DUMP MAIN
- */
-/* -------------------------------------------------------------------------- */
-int main(int argc, char *argv[])
-{
- FILE *fout = NULL;
-
- opj_dparameters_t parameters; /* Decompression parameters */
- opj_image_t* image = NULL; /* Image structure */
- opj_codec_t* l_codec = NULL; /* Handle to a decompressor */
- opj_stream_t *l_stream = NULL; /* Stream */
- opj_codestream_info_v2_t* cstr_info = NULL;
- opj_codestream_index_t* cstr_index = NULL;
-
- OPJ_INT32 num_images, imageno;
- img_fol_t img_fol;
- dircnt_t *dirptr = NULL;
-
- /* Set decoding parameters to default values */
- opj_set_default_decoder_parameters(&parameters);
-
- /* Initialize img_fol */
- memset(&img_fol, 0, sizeof(img_fol_t));
- img_fol.flag = OPJ_IMG_INFO | OPJ_J2K_MH_INFO | OPJ_J2K_MH_IND;
-
- /* Parse input and get user encoding parameters */
- if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol) == 1) {
- if (img_fol.imgdirpath) {
- free(img_fol.imgdirpath);
- }
-
- return EXIT_FAILURE;
- }
-
- /* Initialize reading of directory */
- if (img_fol.set_imgdir == 1) {
- int it_image;
- num_images = get_num_images(img_fol.imgdirpath);
-
- dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
- if (!dirptr) {
- return EXIT_FAILURE;
- }
- dirptr->filename_buf = (char*)malloc((size_t)num_images * OPJ_PATH_LEN * sizeof(
- char)); /* Stores at max 10 image file names*/
- if (!dirptr->filename_buf) {
- free(dirptr);
- return EXIT_FAILURE;
- }
- dirptr->filename = (char**) malloc((size_t)num_images * sizeof(char*));
-
- if (!dirptr->filename) {
- goto fails;
- }
-
- for (it_image = 0; it_image < num_images; it_image++) {
- dirptr->filename[it_image] = dirptr->filename_buf + it_image * OPJ_PATH_LEN;
- }
-
- if (load_images(dirptr, img_fol.imgdirpath) == 1) {
- goto fails;
- }
-
- if (num_images == 0) {
- fprintf(stdout, "Folder is empty\n");
- goto fails;
- }
- } else {
- num_images = 1;
- }
-
- /* Try to open for writing the output file if necessary */
- if (parameters.outfile[0] != 0) {
- fout = fopen(parameters.outfile, "w");
- if (!fout) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", parameters.outfile);
- goto fails;
- }
- } else {
- fout = stdout;
- }
-
- /* Read the header of each image one by one */
- for (imageno = 0; imageno < num_images ; imageno++) {
-
- fprintf(stderr, "\n");
-
- if (img_fol.set_imgdir == 1) {
- if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
- fprintf(stderr, "skipping file...\n");
- continue;
- }
- }
-
- /* Read the input file and put it in memory */
- /* ---------------------------------------- */
-
- l_stream = opj_stream_create_default_file_stream(parameters.infile, 1);
- if (!l_stream) {
- fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",
- parameters.infile);
- goto fails;
- }
-
- /* Read the JPEG2000 stream */
- /* ------------------------ */
-
- switch (parameters.decod_format) {
- case J2K_CFMT: { /* JPEG-2000 codestream */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_J2K);
- break;
- }
- case JP2_CFMT: { /* JPEG 2000 compressed image data */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_JP2);
- break;
- }
- case JPT_CFMT: { /* JPEG 2000, JPIP */
- /* Get a decoder handle */
- l_codec = opj_create_decompress(OPJ_CODEC_JPT);
- break;
- }
- default:
- fprintf(stderr, "skipping file..\n");
- opj_stream_destroy(l_stream);
- continue;
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_info_handler(l_codec, info_callback, 00);
- opj_set_warning_handler(l_codec, warning_callback, 00);
- opj_set_error_handler(l_codec, error_callback, 00);
-
- parameters.flags |= OPJ_DPARAMETERS_DUMP_FLAG;
-
- /* Setup the decoder decoding parameters using user parameters */
- if (!opj_setup_decoder(l_codec, &parameters)) {
- fprintf(stderr, "ERROR -> opj_dump: failed to setup the decoder\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- fclose(fout);
- goto fails;
- }
-
- /* Read the main header of the codestream and if necessary the JP2 boxes*/
- if (! opj_read_header(l_stream, l_codec, &image)) {
- fprintf(stderr, "ERROR -> opj_dump: failed to read the header\n");
- opj_stream_destroy(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- fclose(fout);
- goto fails;
- }
-
- opj_dump_codec(l_codec, img_fol.flag, fout);
-
- cstr_info = opj_get_cstr_info(l_codec);
-
- cstr_index = opj_get_cstr_index(l_codec);
-
- /* close the byte stream */
- opj_stream_destroy(l_stream);
-
- /* free remaining structures */
- if (l_codec) {
- opj_destroy_codec(l_codec);
- }
-
- /* destroy the image header */
- opj_image_destroy(image);
-
- /* destroy the codestream index */
- opj_destroy_cstr_index(&cstr_index);
-
- /* destroy the codestream info */
- opj_destroy_cstr_info(&cstr_info);
-
- }
-
- /* Close the output file */
- fclose(fout);
-
- return EXIT_SUCCESS;
-
-fails:
- if (dirptr) {
- if (dirptr->filename) {
- free(dirptr->filename);
- }
- if (dirptr->filename_buf) {
- free(dirptr->filename_buf);
- }
- free(dirptr);
- }
- return EXIT_FAILURE;
-}
diff --git a/openjpeg/src/bin/jp2/windirent.h b/openjpeg/src/bin/jp2/windirent.h
deleted file mode 100644
index 19509822..00000000
--- a/openjpeg/src/bin/jp2/windirent.h
+++ /dev/null
@@ -1,683 +0,0 @@
-
-/*
- * uce-dirent.h - operating system independent dirent implementation
- *
- * Copyright (C) 1998-2002 Toni Ronkko
- *
- * 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 TONI RONKKO 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.
- *
- *
- * May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
- *
- * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
- *
- * $Log: uce-dirent.h,v $
- * Revision 1.7 2002/05/13 10:48:35 tr
- * embedded some source code directly to the header so that no source
- * modules need to be included in the MS Visual C project using the
- * interface, removed all the dependencies to other headers of the `uce'
- * library so that the header can be made public
- *
- * Revision 1.6 2002/04/12 16:22:04 tr
- * Unified Compiling Environment (UCE) replaced `std' library
- *
- * Revision 1.5 2001/07/20 16:33:40 tr
- * moved to `std' library and re-named defines accordingly
- *
- * Revision 1.4 2001/07/10 16:47:18 tronkko
- * revised comments
- *
- * Revision 1.3 2001/01/11 13:16:43 tr
- * using ``uce-machine.h'' for finding out defines such as `FREEBSD'
- *
- * Revision 1.2 2000/10/08 16:00:41 tr
- * copy of FreeBSD man page
- *
- * Revision 1.1 2000/07/10 05:53:16 tr
- * Initial revision
- *
- * Revision 1.2 1998/07/19 18:29:14 tr
- * Added error reporting capabilities and some asserts.
- *
- * Revision 1.1 1998/07/04 16:27:51 tr
- * Initial revision
- *
- *
- * MSVC 1.0 scans automatic dependencies incorrectly when your project
- * contains this very header. The problem is that MSVC cannot handle
- * include directives inside #if..#endif block those are never entered.
- * Since this header ought to compile in many different operating systems,
- * there had to be several conditional blocks that are compiled only in
- * operating systems for what they were designed for. MSVC 1.0 cannot
- * handle inclusion of sys/dir.h in a part that is compiled only in Apollo
- * operating system. To fix the problem you need to insert DIR.H into
- * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
- * Consult manuals for more informaton about the problem.
- *
- * Since many UNIX systems have dirent.h we assume to have one also.
- * However, if your UNIX system does not have dirent.h you can download one
- * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
- * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
- * sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H,
- * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
- * HAVE_SYS_NDIR_H according to the files found.
- */
-#ifndef DIRENT_H
-#define DIRENT_H
-#define DIRENT_H_INCLUDED
-
-/* find out platform */
-#if defined(MSDOS) /* MS-DOS */
-#elif defined(__MSDOS__) /* Turbo C/Borland */
-# define MSDOS
-#elif defined(__DOS__) /* Watcom */
-# define MSDOS
-#endif
-
-#if defined(WIN32) /* MS-Windows */
-#elif defined(__NT__) /* Watcom */
-# define WIN32
-#elif defined(_WIN32) /* Microsoft */
-# define WIN32
-#elif defined(__WIN32__) /* Borland */
-# define WIN32
-#endif
-
-/*
- * See what kind of dirent interface we have unless autoconf has already
- * determinated that.
- */
-#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
-# if defined(_MSC_VER) /* Microsoft C/C++ */
-/* no dirent.h */
-# elif defined(__MINGW32__) /* MinGW */
-/* no dirent.h */
-# elif defined(__BORLANDC__) /* Borland C/C++ */
-# define HAVE_DIRENT_H
-# define VOID_CLOSEDIR
-# elif defined(__TURBOC__) /* Borland Turbo C */
-/* no dirent.h */
-# elif defined(__WATCOMC__) /* Watcom C/C++ */
-# define HAVE_DIRECT_H
-# elif defined(__apollo) /* Apollo */
-# define HAVE_SYS_DIR_H
-# elif defined(__hpux) /* HP-UX */
-# define HAVE_DIRENT_H
-# elif (defined(__alpha) || defined(__alpha__)) && !defined(__linux__) /* Alpha OSF1 */
-# error "not implemented"
-# elif defined(__sgi) /* Silicon Graphics */
-# define HAVE_DIRENT_H
-# elif defined(sun) || defined(__sun) /* Sun Solaris */
-# define HAVE_DIRENT_H
-# elif defined(__FreeBSD__) /* FreeBSD */
-# define HAVE_DIRENT_H
-# elif defined(__linux__) /* Linux */
-# define HAVE_DIRENT_H
-# elif defined(__GNUC__) /* GNU C/C++ */
-# define HAVE_DIRENT_H
-# else
-# error "not implemented"
-# endif
-#endif
-
-/* include proper interface headers */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# ifdef FREEBSD
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-# else
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-# endif
-
-#elif defined(HAVE_NDIR_H)
-# include <ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIRECT_H)
-# include <direct.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIR_H)
-# include <dir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_DIR_H)
-# include <sys/types.h>
-# include <sys/dir.h>
-# ifndef dirent
-# define dirent direct
-# endif
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(MSDOS) || defined(WIN32)
-
-/* figure out type of underlaying directory interface to be used */
-# if defined(WIN32)
-# define DIRENT_WIN32_INTERFACE
-# elif defined(MSDOS)
-# define DIRENT_MSDOS_INTERFACE
-# else
-# error "missing native dirent interface"
-# endif
-
-/*** WIN32 specifics ***/
-# if defined(DIRENT_WIN32_INTERFACE)
-# include <windows.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (MAX_PATH)
-# endif
-
-
-/*** MS-DOS specifics ***/
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# include <dos.h>
-
-/* Borland defines file length macros in dir.h */
-# if defined(__BORLANDC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# if !defined(_find_t)
-# define _find_t find_t
-# endif
-
-/* Turbo C defines ffblk structure in dir.h */
-# elif defined(__TURBOC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# define DIRENT_USE_FFBLK
-
-/* MSVC */
-# elif defined(_MSC_VER)
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (12)
-# endif
-
-/* Watcom */
-# elif defined(__WATCOMC__)
-# if !defined(DIRENT_MAXNAMLEN)
-# if defined(__OS2__) || defined(__NT__)
-# define DIRENT_MAXNAMLEN (255)
-# else
-# define DIRENT_MAXNAMLEN (12)
-# endif
-# endif
-
-# endif
-# endif
-
-/*** generic MS-DOS and MS-Windows stuff ***/
-# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
-# define NAME_MAX DIRENT_MAXNAMLEN
-# endif
-# if NAME_MAX < DIRENT_MAXNAMLEN
-# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
-# endif
-
-
-/*
- * Substitute for real dirent structure. Note that `d_name' field is a
- * true character array although we have it copied in the implementation
- * dependent data. We could save some memory if we had declared `d_name'
- * as a pointer referring the name within implementation dependent data.
- * We have not done that since some code may rely on sizeof(d_name) to be
- * something other than four. Besides, directory entries are typically so
- * small that it takes virtually no time to copy them from place to place.
- */
-typedef struct dirent {
- char d_name[NAME_MAX + 1];
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/
- WIN32_FIND_DATA data;
-# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/
-# if defined(DIRENT_USE_FFBLK)
- struct ffblk data;
-# else
- struct _find_t data;
-# endif
-# endif
-} dirent;
-
-/* DIR substitute structure containing directory name. The name is
- * essential for the operation of ``rewinndir'' function. */
-typedef struct DIR {
- char *dirname; /* directory being scanned */
- dirent current; /* current entry */
- int dirent_filled; /* is current un-processed? */
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE)
- HANDLE search_handle;
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# endif
-} DIR;
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* supply prototypes for dirent functions */
-static DIR *opendir(const char *dirname);
-static struct dirent *readdir(DIR *dirp);
-static int closedir(DIR *dirp);
-#ifdef unused
-static void rewinddir(DIR *dirp);
-#endif
-
-/*
- * Implement dirent interface as static functions so that the user does not
- * need to change his project in any way to use dirent function. With this
- * it is sufficient to include this very header from source modules using
- * dirent functions and the functions will be pulled in automatically.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-/* use ffblk instead of _find_t if requested */
-#if defined(DIRENT_USE_FFBLK)
-# define _A_ARCH (FA_ARCH)
-# define _A_HIDDEN (FA_HIDDEN)
-# define _A_NORMAL (0)
-# define _A_RDONLY (FA_RDONLY)
-# define _A_SUBDIR (FA_DIREC)
-# define _A_SYSTEM (FA_SYSTEM)
-# define _A_VOLID (FA_LABEL)
-# define _dos_findnext(dest) findnext(dest)
-# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
-#endif
-
-static int _initdir(DIR *p);
-static const char *_getdirname(const struct dirent *dp);
-static void _setdirname(struct DIR *dirp);
-
-/*
- * <function name="opendir">
- * <intro>open directory stream for reading
- * <syntax>DIR *opendir (const char *dirname);
- *
- * <desc>Open named directory stream for read and return pointer to the
- * internal working area that is used for retrieving individual directory
- * entries. The internal working area has no fields of your interest.
- *
- * <ret>Returns a pointer to the internal working area or NULL in case the
- * directory stream could not be opened. Global `errno' variable will set
- * in case of error as follows:
- *
- * <table>
- * [EACESS |Permission denied.
- * [EMFILE |Too many open files used by the process.
- * [ENFILE |Too many open files in system.
- * [ENOENT |Directory does not exist.
- * [ENOMEM |Insufficient memory.
- * [ENOTDIR |dirname does not refer to directory. This value is not
- * reliable on MS-DOS and MS-Windows platforms. Many
- * implementations return ENOENT even when the name refers to a
- * file.]
- * </table>
- * </function>
- */
-static DIR *opendir(const char *dirname)
-{
- DIR *dirp;
- assert(dirname != NULL);
-
- dirp = (DIR*)malloc(sizeof(struct DIR));
- if (dirp != NULL) {
- char *p;
-
- /* allocate room for directory name */
- dirp->dirname = (char*) malloc(strlen(dirname) + 1 + strlen("\\*.*"));
- if (dirp->dirname == NULL) {
- /* failed to duplicate directory name. errno set by malloc() */
- free(dirp);
- return NULL;
- }
- /* Copy directory name while appending directory separator and "*.*".
- * Directory separator is not appended if the name already ends with
- * drive or directory separator. Directory separator is assumed to be
- * '/' or '\' and drive separator is assumed to be ':'. */
- strcpy(dirp->dirname, dirname);
- p = strchr(dirp->dirname, '\0');
- if (dirp->dirname < p &&
- *(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':') {
- strcpy(p++, "\\");
- }
-# ifdef DIRENT_WIN32_INTERFACE
- strcpy(p, "*"); /*scan files with and without extension in win32*/
-# else
- strcpy(p, "*.*"); /*scan files with and without extension in DOS*/
-# endif
-
- /* open stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed */
- free(dirp->dirname);
- free(dirp);
- return NULL;
- }
- }
- return dirp;
-}
-
-
-/*
- * <function name="readdir">
- * <intro>read a directory entry
- * <syntax>struct dirent *readdir (DIR *dirp);
- *
- * <desc>Read individual directory entry and return pointer to a structure
- * containing the name of the entry. Individual directory entries returned
- * include normal files, sub-directories, pseudo-directories "." and ".."
- * and also volume labels, hidden files and system files in MS-DOS and
- * MS-Windows. You might want to use stat(2) function to determinate which
- * one are you dealing with. Many dirent implementations already contain
- * equivalent information in dirent structure but you cannot depend on
- * this.
- *
- * The dirent structure contains several system dependent fields that
- * generally have no interest to you. The only interesting one is char
- * d_name[] that is also portable across different systems. The d_name
- * field contains the name of the directory entry without leading path.
- * While d_name is portable across different systems the actual storage
- * capacity of d_name varies from system to system and there is no portable
- * way to find out it at compile time as different systems define the
- * capacity of d_name with different macros and some systems do not define
- * capacity at all (besides actual declaration of the field). If you really
- * need to find out storage capacity of d_name then you might want to try
- * NAME_MAX macro. The NAME_MAX is defined in POSIX standard although
- * there are many MS-DOS and MS-Windows implementations those do not define
- * it. There are also systems that declare d_name as "char d_name[1]" and
- * then allocate suitable amount of memory at run-time. Thanks to Alain
- * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
- *
- * This all leads to the fact that it is difficult to allocate space
- * for the directory names when the very same program is being compiled on
- * number of operating systems. Therefore I suggest that you always
- * allocate space for directory names dynamically.
- *
- * <ret>
- * Returns a pointer to a structure containing name of the directory entry
- * in `d_name' field or NULL if there was an error. In case of an error the
- * global `errno' variable will set as follows:
- *
- * <table>
- * [EBADF |dir parameter refers to an invalid directory stream. This value
- * is not set reliably on all implementations.]
- * </table>
- * </function>
- */
-static struct dirent *
-readdir(DIR *dirp)
-{
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return NULL;
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* directory stream was opened/rewound incorrectly or it ended normally */
- errno = EBADF;
- return NULL;
- }
-#endif
-
- if (dirp->dirent_filled != 0) {
- /*
- * Directory entry has already been retrieved and there is no need to
- * retrieve a new one. Directory entry will be retrieved in advance
- * when the user calls readdir function for the first time. This is so
- * because real dirent has separate functions for opening and reading
- * the stream whereas Win32 and DOS dirents open the stream
- * automatically when we retrieve the first file. Therefore, we have to
- * save the first file when opening the stream and later we have to
- * return the saved entry when the user tries to read the first entry.
- */
- dirp->dirent_filled = 0;
- } else {
- /* fill in entry and return that */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (FindNextFile(dirp->search_handle, &dirp->current.data) == FALSE) {
- /* Last file has been processed or an error occurred */
- FindClose(dirp->search_handle);
- dirp->search_handle = INVALID_HANDLE_VALUE;
- errno = ENOENT;
- return NULL;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findnext(&dirp->current.data) != 0) {
- /* _dos_findnext and findnext will set errno to ENOENT when no
- * more entries could be retrieved. */
- return NULL;
- }
-# endif
-
- _setdirname(dirp);
- assert(dirp->dirent_filled == 0);
- }
- return &dirp->current;
-}
-
-
-/*
- * <function name="closedir">
- * <intro>close directory stream.
- * <syntax>int closedir (DIR *dirp);
- *
- * <desc>Close directory stream opened by the `opendir' function. Close of
- * directory stream invalidates the DIR structure as well as previously read
- * dirent entry.
- *
- * <ret>The function typically returns 0 on success and -1 on failure but
- * the function may be declared to return void on same systems. At least
- * Borland C/C++ and some UNIX implementations use void as a return type.
- * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
- * known to return nothing. The very same definition is made by the GNU
- * autoconf if you happen to use it.
- *
- * The global `errno' variable will set to EBADF in case of error.
- * </function>
- */
-static int
-closedir(DIR *dirp)
-{
- int retcode = 0;
-
- /* make sure that dirp points to legal structure */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return -1;
- }
-
- /* free directory name and search handles */
- if (dirp->dirname != NULL) {
- free(dirp->dirname);
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- retcode = -1;
- errno = EBADF;
- }
- }
-#endif
-
- /* clear dirp structure to make sure that it cannot be used anymore*/
- memset(dirp, 0, sizeof(*dirp));
-# if defined(DIRENT_WIN32_INTERFACE)
- dirp->search_handle = INVALID_HANDLE_VALUE;
-# endif
-
- free(dirp);
- return retcode;
-}
-
-
-#ifdef unused
-/*
- * <function name="rewinddir">
- * <intro>rewind directory stream to the beginning
- * <syntax>void rewinddir (DIR *dirp);
- *
- * <desc>Rewind directory stream to the beginning so that the next call of
- * readdir() returns the very first directory entry again. However, note
- * that next call of readdir() may not return the same directory entry as it
- * did in first time. The directory stream may have been affected by newly
- * created files.
- *
- * Almost every dirent implementation ensure that rewinddir will update
- * the directory stream to reflect any changes made to the directory entries
- * since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on
- * this if your program depends on the feature. I know at least one dirent
- * implementation where you are required to close and re-open the stream to
- * see the changes.
- *
- * <ret>Returns nothing. If something went wrong while rewinding, you will
- * notice it later when you try to retrieve the first directory entry.
- */
-static void
-rewinddir(DIR *dirp)
-{
- /* make sure that dirp is legal */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return;
- }
- assert(dirp->dirname != NULL);
-
- /* close previous stream */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- errno = EBADF;
- }
- }
-#endif
-
- /* re-open previous stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed but we cannot deal with error. User will notice
- * error later when she tries to retrieve first directory enty. */
- /*EMPTY*/;
- }
-}
-#endif
-
-/*
- * Open native directory stream object and retrieve first file.
- * Be sure to close previous stream before opening new one.
- */
-static int
-_initdir(DIR *dirp)
-{
- assert(dirp != NULL);
- assert(dirp->dirname != NULL);
- dirp->dirent_filled = 0;
-
-# if defined(DIRENT_WIN32_INTERFACE)
- /* Open stream and retrieve first file */
- dirp->search_handle = FindFirstFile(dirp->dirname, &dirp->current.data);
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* something went wrong but we don't know what. GetLastError() could
- * give us more information about the error, but then we should map
- * the error code into errno. */
- errno = ENOENT;
- return 0;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findfirst(dirp->dirname,
- _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
- &dirp->current.data) != 0) {
- /* _dos_findfirst and findfirst will set errno to ENOENT when no
- * more entries could be retrieved. */
- return 0;
- }
-# endif
-
- /* initialize DIR and it's first entry */
- _setdirname(dirp);
- dirp->dirent_filled = 1;
- return 1;
-}
-
-
-/*
- * Return implementation dependent name of the current directory entry.
- */
-static const char *
-_getdirname(const struct dirent *dp)
-{
-#if defined(DIRENT_WIN32_INTERFACE)
- return dp->data.cFileName;
-
-#elif defined(DIRENT_USE_FFBLK)
- return dp->data.ff_name;
-
-#else
- return dp->data.name;
-#endif
-}
-
-
-/*
- * Copy name of implementation dependent directory entry to the d_name field.
- */
-static void
-_setdirname(struct DIR *dirp)
-{
- /* make sure that d_name is long enough */
- assert(strlen(_getdirname(&dirp->current)) <= NAME_MAX);
-
- strncpy(dirp->current.d_name,
- _getdirname(&dirp->current),
- NAME_MAX);
- dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
-}
-
-# ifdef __cplusplus
-}
-# endif
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-
-#else
-# error "missing dirent interface"
-#endif
-
-
-#endif /*DIRENT_H*/
diff --git a/openjpeg/src/bin/jp3d/CMakeLists.txt b/openjpeg/src/bin/jp3d/CMakeLists.txt
deleted file mode 100644
index 3cac1a8f..00000000
--- a/openjpeg/src/bin/jp3d/CMakeLists.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-# Build the demo app, small examples
-
-# First thing define the common source:
-set(common_SRCS
- convert.c
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c
- )
-
-# Headers file are located here:
-include_directories(
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openjp3d
- ${LCMS_INCLUDE_DIRNAME}
- ${OPENJPEG_SOURCE_DIR}/src/bin/common
- ${Z_INCLUDE_DIRNAME}
- ${PNG_INCLUDE_DIRNAME}
- ${TIFF_INCLUDE_DIRNAME}
- )
-
-if(WIN32)
- if(BUILD_SHARED_LIBS)
- add_definitions(-DOPJ_EXPORTS)
- else()
- add_definitions(-DOPJ_STATIC)
- endif()
-endif()
-
-# Loop over all executables:
-foreach(exe opj_jp3d_compress opj_jp3d_decompress)
- add_executable(${exe} ${exe}.c ${common_SRCS})
- target_link_libraries(${exe} openjp3d)
- # On unix you need to link to the math library:
- if(UNIX)
- target_link_libraries(${exe} m)
- endif(UNIX)
- # Install exe
- install(TARGETS ${exe}
- EXPORT OpenJP3DTargets
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
-endforeach()
diff --git a/openjpeg/src/bin/jp3d/convert.c b/openjpeg/src/bin/jp3d/convert.c
deleted file mode 100644
index 5d07bf19..00000000
--- a/openjpeg/src/bin/jp3d/convert.c
+++ /dev/null
@@ -1,1050 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mnica Dez Garca, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "openjp3d.h"
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-
-
-void dump_volume(FILE *fd, opj_volume_t * vol)
-{
- int compno;
- fprintf(fd, "volume {\n");
- fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0,
- vol->z0, vol->x1, vol->y1, vol->z1);
- fprintf(fd, " numcomps=%d\n", vol->numcomps);
- for (compno = 0; compno < vol->numcomps; compno++) {
- opj_volume_comp_t *comp = &vol->comps[compno];
- fprintf(fd, " comp %d {\n", compno);
- fprintf(fd, " dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
- fprintf(fd, " prec=%d\n", comp->prec);
- fprintf(fd, " sgnd=%d\n", comp->sgnd);
- fprintf(fd, " }\n");
- }
- fprintf(fd, "}\n");
-}
-
-/*
- * Get logarithm of an integer and round downwards.
- *
- * log2(a)
- */
-static int int_floorlog2(int a)
-{
- int l;
- for (l = 0; a > 1; l++) {
- a >>= 1;
- }
- return l;
-}
-
-/*
- * Divide an integer by a power of 2 and round upwards.
- *
- * a divided by 2^b
- */
-static int int_ceildivpow2(int a, int b)
-{
- return (a + (1 << b) - 1) >> b;
-}
-
-/*
- * Divide an integer and round upwards.
- *
- * a divided by b
- */
-static int int_ceildiv(int a, int b)
-{
- return (a + b - 1) / b;
-}
-
-
-/* -->> -->> -->> -->>
-
-PGX IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-
-unsigned char readuchar(FILE * f)
-{
- unsigned char c1;
- fread(&c1, 1, 1, f);
- return c1;
-}
-
-unsigned short readushort(FILE * f, int bigendian)
-{
- unsigned char c1, c2;
- fread(&c1, 1, 1, f);
- fread(&c2, 1, 1, f);
- if (bigendian) {
- return (c1 << 8) + c2;
- } else {
- return (c2 << 8) + c1;
- }
-}
-
-unsigned int readuint(FILE * f, int bigendian)
-{
- unsigned char c1, c2, c3, c4;
- fread(&c1, 1, 1, f);
- fread(&c2, 1, 1, f);
- fread(&c3, 1, 1, f);
- fread(&c4, 1, 1, f);
- if (bigendian) {
- return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
- } else {
- return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
- }
-}
-/*****************************************/
-static unsigned short ShortSwap(unsigned short v)
-{
- unsigned char c1, c2;
- c1 = v & 0xff;
- c2 = (v >> 8) & 0xff;
- return (c1 << 8) + c2;
-}
-
-static unsigned int LongSwap(unsigned int i)
-{
- unsigned char b1, b2, b3, b4;
- b1 = i & 255;
- b2 = (i >> 8) & 255;
- b3 = (i >> 16) & 255;
- b4 = (i >> 24) & 255;
- return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
-}
-/*****************************************/
-
-opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters)
-{
-
- FILE *f = NULL;
- int w, h, prec;
- unsigned long offset;
- int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0;
-
- OPJ_COLOR_SPACE color_space;
- opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
- opj_volume_t * volume = NULL;
-
- char endian1, endian2, sign;
- char signtmp[32];
- char temp[32];
- opj_volume_comp_t *comp = NULL;
-
- DIR *dirp;
- struct dirent *direntp;
-
- char *tmp = NULL, *tmp2 = NULL,
- *point = NULL, *pgx = NULL;
- char tmpdirpath[MAX_PATH];
- char dirpath[MAX_PATH];
- char pattern[MAX_PATH];
- char pgxfiles[MAX_SLICES][MAX_PATH];
- int pgxslicepos[MAX_SLICES];
- char tmpno[3];
-
- numcomps = 1;
- color_space = CLRSPC_GRAY;
- sliceno = 0;
- maxvalue = 0;
- memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char));
- memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
- /* Separacin del caso de un nico slice frente al de muchos */
- if ((tmp = strrchr(relpath, '-')) == NULL) {
- /*fprintf(stdout,"[INFO] A volume of only one slice....\n");*/
- sliceno = 1;
- maxslice = 1;
- strcpy(pgxfiles[0], relpath);
-
- } else {
- /*Fetch only the path */
- strcpy(tmpdirpath, relpath);
- if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
- tmp++;
- *tmp = '\0';
- strcpy(dirpath, tmpdirpath);
- } else {
- strcpy(dirpath, "./");
- }
-
- /*Fetch the pattern of the volume slices*/
- if ((tmp = strrchr(relpath, '/')) != NULL) {
- tmp++;
- } else {
- tmp = relpath;
- }
- if ((tmp2 = strrchr(tmp, '-')) != NULL) {
- *tmp2 = '\0';
- } else {
- fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s", tmp,
- relpath);
- return NULL;
- }
- strcpy(pattern, tmp);
-
- dirp = opendir(dirpath);
- if (dirp == NULL) {
- fprintf(stdout,
- "[ERROR] Infile must be a .pgx file or a directory that contain pgx files");
- return NULL;
- }
-
- /*Read all .pgx files of directory */
- while ((direntp = readdir(dirp)) != NULL) {
- /* Found a directory, but ignore . and .. */
- if (strcmp(".", direntp->d_name) == 0 || strcmp("..", direntp->d_name) == 0) {
- continue;
- }
-
- if (((pgx = strstr(direntp->d_name, pattern)) != NULL) &&
- ((tmp2 = strstr(direntp->d_name, ".pgx")) != NULL)) {
-
- strcpy(tmp, dirpath);
- tmp = strcat(tmp, direntp->d_name);
-
- /*Obtenemos el index de la secuencia de slices*/
- if ((tmp2 = strpbrk(direntp->d_name, "0123456789")) == NULL) {
- continue;
- }
- i = 0;
- while (tmp2 != NULL) {
- tmpno[i++] = *tmp2;
- point = tmp2;
- tmp2 = strpbrk(tmp2 + 1, "0123456789");
- }
- tmpno[i] = '\0';
-
- /*Comprobamos que no estamos leyendo algo raro como pattern.jp3d*/
- if ((point = strpbrk(point, ".")) == NULL) {
- break;
- }
- /*Slicepos --> index de slice; Sliceno --> no de slices hasta el momento*/
- slicepos = atoi(tmpno);
- pgxslicepos[sliceno] = slicepos - 1;
- sliceno++;
- if (slicepos > maxslice) {
- maxslice = slicepos;
- }
-
- /*Colocamos el slices en su posicion correspondiente*/
- strcpy(pgxfiles[slicepos - 1], tmp);
- }
- }
-
- }/* else if pattern*.pgx */
-
- if (!sliceno) {
- fprintf(stdout,
- "[ERROR] No slices with this pattern founded !! Please check input volume name\n");
- return NULL;
- }
- /*if ( maxslice != sliceno) {
- fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n");
- return NULL;
- }*/
-
- for (s = 0; s < sliceno; s++) {
- int pos = maxslice == sliceno ? s : pgxslicepos[s];
- f = fopen(pgxfiles[pos], "rb");
- if (!f) {
- fprintf(stdout, "[ERROR] Failed to open %s for reading !\n", pgxfiles[s]);
- return NULL;
- }
- fprintf(stdout, "[INFO] Loading %s \n", pgxfiles[pos]);
-
- fseek(f, 0, SEEK_SET);
- fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d", temp, &endian1, &endian2,
- signtmp, &prec, temp, &w, temp, &h);
-
- i = 0;
- sign = '+';
- while (signtmp[i] != '\0') {
- if (signtmp[i] == '-') {
- sign = '-';
- }
- i++;
- }
-
- fgetc(f);
- if (endian1 == 'M' && endian2 == 'L') {
- cmptparm.bigendian = 1;
- } else if (endian2 == 'M' && endian1 == 'L') {
- cmptparm.bigendian = 0;
- } else {
- fprintf(stdout, "[ERROR] Bad pgx header, please check input file\n");
- fclose(f);
- return NULL;
- }
-
- if (s == 0) {
- /* initialize volume component */
-
- cmptparm.x0 = parameters->volume_offset_x0;
- cmptparm.y0 = parameters->volume_offset_y0;
- cmptparm.z0 = parameters->volume_offset_z0;
- cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
- cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
- cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
- cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
- cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 :
- cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1;
-
- if (sign == '-') {
- cmptparm.sgnd = 1;
- } else {
- cmptparm.sgnd = 0;
- }
- cmptparm.prec = prec;
- cmptparm.bpp = prec;
- cmptparm.dcoffset = parameters->dcoffset;
- cmptparm.dx = parameters->subsampling_dx;
- cmptparm.dy = parameters->subsampling_dy;
- cmptparm.dz = parameters->subsampling_dz;
-
- /* create the volume */
- volume = opj_volume_create(numcomps, &cmptparm, color_space);
- if (!volume) {
- fclose(f);
- return NULL;
- }
- /* set volume offset and reference grid */
- volume->x0 = cmptparm.x0;
- volume->y0 = cmptparm.y0;
- volume->z0 = cmptparm.z0;
- volume->x1 = cmptparm.w;
- volume->y1 = cmptparm.h;
- volume->z1 = cmptparm.l;
-
- /* set volume data :only one component, that is a volume*/
- comp = &volume->comps[0];
-
- }/*if sliceno==1*/
-
- offset = w * h * s;
-
- for (i = 0; i < w * h; i++) {
- int v;
- if (comp->prec <= 8) {
- if (!comp->sgnd) {
- v = readuchar(f);
- } else {
- v = (char) readuchar(f);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- v = readushort(f, cmptparm.bigendian);
- } else {
- v = (short) readushort(f, cmptparm.bigendian);
- }
- } else {
- if (!comp->sgnd) {
- v = readuint(f, cmptparm.bigendian);
- } else {
- v = (int) readuint(f, cmptparm.bigendian);
- }
- }
- if (v > maxvalue) {
- maxvalue = v;
- }
- comp->data[i + offset] = v;
-
- }
- fclose(f);
- } /* for s --> sliceno*/
- comp->bpp = int_floorlog2(maxvalue) + 1;
- if (sliceno != 1) {
- closedir(dirp);
- }
- /*dump_volume(stdout, volume);*/
- return volume;
-}
-
-
-int volumetopgx(opj_volume_t * volume, char *outfile)
-{
- int w, wr, wrr, h, hr, hrr, l, lr, lrr;
- int i, j, compno, offset, sliceno;
- FILE *fdest = NULL;
-
- for (compno = 0; compno < volume->numcomps; compno++) {
- opj_volume_comp_t *comp = &volume->comps[compno];
- char name[256];
- int nbytes = 0;
- char *tmp = outfile;
- while (*tmp) {
- tmp++;
- }
- while (*tmp != '.') {
- tmp--;
- }
- *tmp = '\0';
- for (sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) {
-
- if (volume->numcomps > 1) {
- sprintf(name, "%s%d-%d.pgx", outfile, sliceno + 1, compno);
- } else if ((volume->z1 - volume->z0) > 1) {
- sprintf(name, "%s%d.pgx", outfile, sliceno + 1);
- } else {
- sprintf(name, "%s.pgx", outfile);
- }
-
- fdest = fopen(name, "wb");
- if (!fdest) {
- fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name);
- return 1;
- }
-
- fprintf(stdout, "[INFO] Writing in %s (%s)\n", name,
- volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
- w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
- wr = volume->comps[compno].w;
- wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-
- h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
- hr = volume->comps[compno].h;
- hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-
- l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
- lr = volume->comps[compno].l;
- lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
- fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M' : 'L',
- comp->bigendian ? 'L' : 'M', comp->sgnd ? '-' : '+', comp->prec, wr, hr);
- if (comp->prec <= 8) {
- nbytes = 1;
- } else if (comp->prec <= 16) {
- nbytes = 2;
- } else {
- nbytes = 4;
- }
-
- offset = (sliceno / lrr * l) + (sliceno % lrr);
- offset = wrr * hrr * offset;
- /*fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w);*/
- for (i = 0; i < wrr * hrr; i++) {
- int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
- if (volume->comps[0].bigendian) {
- for (j = nbytes - 1; j >= 0; j--) {
- char byte = (char)((v >> (j * 8)) & 0xff);
- fwrite(&byte, 1, 1, fdest);
- }
- } else {
- for (j = 0; j <= nbytes - 1; j++) {
- char byte = (char)((v >> (j * 8)) & 0xff);
- fwrite(&byte, 1, 1, fdest);
- }
- }
- }
-
- fclose(fdest);
- }/*for sliceno*/
- }/*for compno*/
-
- return 0;
-}
-
-/* -->> -->> -->> -->>
-
-BIN IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-opj_volume_t* bintovolume(char *filename, char *fileimg,
- opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
- int subsampling_dz = parameters->subsampling_dz;
-
- int i, compno, w, h, l, numcomps = 1;
- int prec, max = 0;
-
- /* char temp[32];*/
- char line[100];
- int bigendian;
-
- FILE *f = NULL;
- FILE *fimg = NULL;
- OPJ_COLOR_SPACE color_space;
- opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
- opj_volume_t * volume = NULL;
- opj_volume_comp_t *comp = NULL;
-
- bigendian = 0;
- color_space = CLRSPC_GRAY;
-
- fimg = fopen(fileimg, "r");
- if (!fimg) {
- fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg);
- return 0;
- }
-
- fseek(fimg, 0, SEEK_SET);
- while (!feof(fimg)) {
- fgets(line, 100, fimg);
- /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
- if (strncmp(line, "Bpp", 3) == 0) {
- sscanf(line, "%*s%*[ \t]%d", &prec);
- } else if (strncmp(line, "Color", 5) == 0) {
- sscanf(line, "%*s%*[ \t]%d", &color_space);
- } else if (strncmp(line, "Dim", 3) == 0) {
- sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
- }
- }
- /*fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp);*/
- /*fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp);*/
- /*fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp);*/
-
-#ifdef VERBOSE
- fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",
- color_space, w, h, l, subsampling_dx, subsampling_dy, subsampling_dz, prec);
-#endif
- fclose(fimg);
-
- /* initialize volume components */
- memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
- cmptparm.prec = prec;
- cmptparm.bpp = prec;
- cmptparm.sgnd = 0;
- cmptparm.bigendian = bigendian;
- cmptparm.dcoffset = parameters->dcoffset;
- cmptparm.dx = subsampling_dx;
- cmptparm.dy = subsampling_dy;
- cmptparm.dz = subsampling_dz;
- cmptparm.w = w;
- cmptparm.h = h;
- cmptparm.l = l;
-
- /* create the volume */
- volume = opj_volume_create(numcomps, &cmptparm, color_space);
- if (!volume) {
- fprintf(stdout, "[ERROR] Unable to create volume");
- fclose(f);
- return NULL;
- }
-
- /* set volume offset and reference grid */
- volume->x0 = parameters->volume_offset_x0;
- volume->y0 = parameters->volume_offset_y0;
- volume->z0 = parameters->volume_offset_z0;
- volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1;
- volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1;
- volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1;
-
- /* set volume data */
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename);
- return 0;
- }
-
- /* BINARY */
- for (compno = 0; compno < volume->numcomps; compno++) {
- int whl = w * h * l;
- /* set volume data */
- comp = &volume->comps[compno];
-
- /*if (comp->prec <= 8) {
- if (!comp->sgnd) {
- unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
- fread(data, 1, whl, f);
- for (i = 0; i < whl; i++) {
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- char *data = (char *) malloc(whl);
- fread(data, 1, whl, f);
- for (i = 0; i < whl; i++) {
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
- int leido = fread(data, 2, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- }
-
- for (i = 0; i < whl; i++) {
- if (bigendian) //(c1 << 8) + c2;
- comp->data[i] = data[i];
- else{ //(c2 << 8) + c1;
- comp->data[i] = ShortSwap(data[i]);
- }
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- short *data = (short *) malloc(whl);
- int leido = fread(data, 2, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- }
- for (i = 0; i < whl; i++) {
- if (bigendian){ //(c1 << 8) + c2;
- comp->data[i] = data[i];
- }else{ //(c2 << 8) + c1;
- comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
- }
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- }
- } else {
- if (!comp->sgnd) {
- unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
- int leido = fread(data, 4, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- } for (i = 0; i < whl; i++) {
- if (!bigendian)
- comp->data[i] = LongSwap(data[i]);
- else
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- int leido = fread(comp->data, 4, whl, f);
- if (!leido) {
- fclose(f);
- return NULL;
- }
- for (i = 0; i < whl; i++) {
- if (!bigendian)
- comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- }
- }*/
-
- for (i = 0; i < whl; i++) {
- int v;
- if (comp->prec <= 8) {
- if (!comp->sgnd) {
- v = readuchar(f);
- } else {
- v = (char) readuchar(f);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- v = readushort(f, bigendian);
- } else {
- v = (short) readushort(f, bigendian);
- }
- } else {
- if (!comp->sgnd) {
- v = readuint(f, bigendian);
- } else {
- v = (int) readuint(f, bigendian);
- }
- }
- if (v > max) {
- max = v;
- }
- comp->data[i] = v;
- }
- comp->bpp = int_floorlog2(max) + 1;
- }
- fclose(f);
- return volume;
-}
-
-int volumetobin(opj_volume_t * volume, char *outfile)
-{
- int w, wr, wrr, h, hr, hrr, l, lr, lrr, max;
- int i, j, compno, nbytes;
- int offset, sliceno;
- FILE *fdest = NULL;
- FILE *fimgdest = NULL;
- /* char *imgtemp;*/
- char name[256];
-
- for (compno = 0; compno < 1; compno++) { /*Only one component*/
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile);
- return 1;
- }
- fprintf(stdout, "[INFO] Writing outfile %s (%s) \n", outfile,
- volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
- w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
- wr = volume->comps[compno].w;
- wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-
- h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
- hr = volume->comps[compno].h;
- hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-
- l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
- lr = volume->comps[compno].l;
- lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
- max = (volume->comps[compno].prec <= 8) ? 255 : (1 <<
- volume->comps[compno].prec) - 1;
-
- volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 -
- int_ceildiv(volume->x0, volume->comps[compno].dx),
- volume->comps[compno].factor[0]);
- volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 -
- int_ceildiv(volume->y0, volume->comps[compno].dy),
- volume->comps[compno].factor[1]);
- volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 -
- int_ceildiv(volume->z0, volume->comps[compno].dz),
- volume->comps[compno].factor[2]);
-
- if (volume->comps[0].prec <= 8) {
- nbytes = 1;
- } else if (volume->comps[0].prec <= 16) {
- nbytes = 2;
- } else {
- nbytes = 4;
- }
-
- /*fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]);*/
-
- for (sliceno = 0; sliceno < lrr; sliceno++) {
- offset = (sliceno / lrr * l) + (sliceno % lrr);
- offset = wrr * hrr * offset;
- for (i = 0; i < wrr * hrr; i++) {
- int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
- if (volume->comps[0].bigendian) {
- for (j = nbytes - 1; j >= 0; j--) {
- char byte = (char)((v >> (j * 8)) & 0xff);
- fwrite(&byte, 1, 1, fdest);
- }
- } else {
- for (j = 0; j <= nbytes - 1; j++) {
- char byte = (char)((v >> (j * 8)) & 0xff);
- fwrite(&byte, 1, 1, fdest);
- }
- }
- }
- }
-
- }
-
- fclose(fdest);
-
- sprintf(name, "%s.img", outfile);
- fimgdest = fopen(name, "w");
- if (!fimgdest) {
- fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name);
- return 1;
- }
- fprintf(fimgdest,
- "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n",
- volume->comps[0].prec, wrr, hrr, lrr, volume->comps[0].dx, volume->comps[0].dy,
- volume->comps[0].dz);
-
- fclose(fimgdest);
- return 0;
-}
-/* -->> -->> -->> -->>
-
-IMG IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
- int subsampling_dz = parameters->subsampling_dz;
-
- int i, compno, w, h, l, numcomps = 1;
- int prec, max = 0, min = 0;
- float dx, dy, dz;
- char filename[100], tmpdirpath[100], dirpath[100], *tmp;
- char line[100], datatype[100];
- int bigendian;
-
- FILE *f = NULL;
- FILE *fimg = NULL;
- OPJ_COLOR_SPACE color_space;
- opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
- opj_volume_t * volume = NULL;
- opj_volume_comp_t *comp = NULL;
-
- bigendian = 0;
- color_space = CLRSPC_GRAY;
-
- fimg = fopen(fileimg, "r");
- if (!fimg) {
- fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg);
- return 0;
- }
-
- /*Fetch only the path */
- strcpy(tmpdirpath, fileimg);
- if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
- tmp++;
- *tmp = '\0';
- strcpy(dirpath, tmpdirpath);
- } else {
- strcpy(dirpath, "./");
- }
-
- fseek(fimg, 0, SEEK_SET);
- while (!feof(fimg)) {
- fgets(line, 100, fimg);
- /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
- if (strncmp(line, "Image", 5) == 0) {
- sscanf(line, "%*s%*[ \t]%s", datatype);
- } else if (strncmp(line, "File", 4) == 0) {
- sscanf(line, "%*s %*s%*[ \t]%s", filename);
- strcat(dirpath, filename);
- strcpy(filename, dirpath);
- } else if (strncmp(line, "Min", 3) == 0) {
- sscanf(line, "%*s %*s%*[ \t]%d%*[ \t]%d", &min, &max);
- prec = int_floorlog2(max - min + 1);
- } else if (strncmp(line, "Bpp", 3) == 0) {
- sscanf(line, "%*s%*[ \t]%d", &prec);
- } else if (strncmp(line, "Color", 5) == 0) {
- sscanf(line, "%*s %*s%*[ \t]%d", &color_space);
- } else if (strncmp(line, "Dim", 3) == 0) {
- sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
- } else if (strncmp(line, "Res", 3) == 0) {
- sscanf(line, "%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f", &dx, &dy, &dz);
- }
-
- }
-#ifdef VERBOSE
- fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n", filename,
- color_space, w, h, l, dx, dy, dz, max, min, prec);
-#endif
- fclose(fimg);
-
- /* error control */
- if (!prec || !w || !h || !l) {
- fprintf(stderr,
- "[ERROR] Unable to read IMG file correctly. Found some null values.");
- return NULL;
- }
-
- /* initialize volume components */
- memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-
- cmptparm.prec = prec;
- cmptparm.bpp = prec;
- cmptparm.sgnd = 0;
- cmptparm.bigendian = bigendian;
- cmptparm.dcoffset = parameters->dcoffset;
- cmptparm.dx = subsampling_dx;
- cmptparm.dy = subsampling_dy;
- cmptparm.dz = subsampling_dz;
- cmptparm.w = w;
- cmptparm.h = h;
- cmptparm.l = l;
-
- /* create the volume */
- volume = opj_volume_create(numcomps, &cmptparm, color_space);
- if (!volume) {
- fprintf(stdout, "[ERROR] Unable to create volume");
- return NULL;
- }
-
- /* set volume offset and reference grid */
- volume->x0 = parameters->volume_offset_x0;
- volume->y0 = parameters->volume_offset_y0;
- volume->z0 = parameters->volume_offset_z0;
- volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1;
- volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1;
- volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1;
-
- max = 0;
- /* set volume data */
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename);
- fclose(f);
- return 0;
- }
-
- /* BINARY */
- for (compno = 0; compno < volume->numcomps; compno++) {
- int whl = w * h * l;
- /* set volume data */
- comp = &volume->comps[compno];
-
- /*if (comp->prec <= 8) {
- if (!comp->sgnd) {
- unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
- fread(data, 1, whl, f);
- for (i = 0; i < whl; i++) {
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- char *data = (char *) malloc(whl);
- fread(data, 1, whl, f);
- for (i = 0; i < whl; i++) {
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
- int leido = fread(data, 2, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- }
-
- for (i = 0; i < whl; i++) {
- if (bigendian) //(c1 << 8) + c2;
- comp->data[i] = data[i];
- else{ //(c2 << 8) + c1;
- comp->data[i] = ShortSwap(data[i]);
- }
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- short *data = (short *) malloc(whl);
- int leido = fread(data, 2, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- }
- for (i = 0; i < whl; i++) {
- if (bigendian){ //(c1 << 8) + c2;
- comp->data[i] = data[i];
- }else{ //(c2 << 8) + c1;
- comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
- }
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- }
- } else {
- if (!comp->sgnd) {
- unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
- int leido = fread(data, 4, whl, f);
- if (!leido) {
- free(data); fclose(f);
- return NULL;
- } for (i = 0; i < whl; i++) {
- if (!bigendian)
- comp->data[i] = LongSwap(data[i]);
- else
- comp->data[i] = data[i];
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- free(data);
- } else {
- int leido = fread(comp->data, 4, whl, f);
- if (!leido) {
- fclose(f);
- return NULL;
- }
- for (i = 0; i < whl; i++) {
- if (!bigendian)
- comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
- if (comp->data[i] > max)
- max = comp->data[i];
- }
- }
- }*/
-
- for (i = 0; i < whl; i++) {
- int v;
- if (comp->prec <= 8) {
- if (!comp->sgnd) {
- v = readuchar(f);
- } else {
- v = (char) readuchar(f);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- v = readushort(f, bigendian);
- } else {
- v = (short) readushort(f, bigendian);
- }
- } else {
- if (!comp->sgnd) {
- v = readuint(f, bigendian);
- } else {
- v = (int) readuint(f, bigendian);
- }
- }
- if (v > max) {
- max = v;
- }
- comp->data[i] = v;
- }
- comp->bpp = int_floorlog2(max) + 1;
- }
- fclose(f);
- return volume;
-}
-
diff --git a/openjpeg/src/bin/jp3d/convert.h b/openjpeg/src/bin/jp3d/convert.h
deleted file mode 100644
index 1df170eb..00000000
--- a/openjpeg/src/bin/jp3d/convert.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mnica Dez Garca, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __JP3D_CONVERT_H
-#define __JP3D_CONVERT_H
-
-/**
-Load a single volume component encoded in PGX file format
-@param filename Name of the PGX file to load
-@param parameters *List ?*
-@return Returns a greyscale volume if successful, returns NULL otherwise
-*/
-opj_volume_t* pgxtovolume(char *filename, opj_cparameters_t *parameters);
-
-int volumetopgx(opj_volume_t *volume, char *outfile);
-
-opj_volume_t* bintovolume(char *filename, char *fileimg,
- opj_cparameters_t *parameters);
-
-int volumetobin(opj_volume_t *volume, char *outfile);
-
-opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters);
-
-#endif /* __J2K_CONVERT_H */
-
diff --git a/openjpeg/src/bin/jp3d/getopt.c b/openjpeg/src/bin/jp3d/getopt.c
deleted file mode 100644
index 855b9ae5..00000000
--- a/openjpeg/src/bin/jp3d/getopt.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1987, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* last review : october 29th, 2002 */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int opterr = 1, /* if error message should be printed */
- optind = 1, /* index into parent argv vector */
- optopt, /* character checked for validity */
- optreset; /* reset getopt */
-char *optarg; /* argument associated with option */
-
-#define BADCH (int)'?'
-#define BADARG (int)':'
-#define EMSG ""
-
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int getopt(int nargc, char *const *nargv, const char *ostr)
-{
-
-# define __progname nargv[0] /* program name */
-
- static char *place = EMSG; /* option letter processing */
- char *oli; /* option letter list index */
-
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc || *(place = nargv[optind]) != '-') {
- place = EMSG;
- return (-1);
- }
- if (place[1] && *++place == '-') { /* found "--" */
- ++optind;
- place = EMSG;
- return (-1);
- }
- } /* option letter okay? */
-
- if ((optopt = (int) * place++) == (int) ':' || !(oli = strchr(ostr, optopt))) {
- /* if the user didn't specify '-' as an option, assume it means -1. */
- if (optopt == (int) '-') {
- return (-1);
- }
- if (!*place) {
- ++optind;
- }
- if (opterr && *ostr != ':') {
- (void) fprintf(stdout, "[ERROR] %s: illegal option -- %c\n", __progname,
- optopt);
- }
- return (BADCH);
- }
-
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place) {
- ++optind;
- }
- } else { /* need an argument */
- if (*place) { /* no white space */
- optarg = place;
- } else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- if (*ostr == ':') {
- return (BADARG);
- }
- if (opterr) {
- (void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n",
- __progname, optopt);
- }
- return (BADCH);
- } else { /* white space */
- optarg = nargv[optind];
- }
- place = EMSG;
- ++optind;
- }
- return (optopt); /* dump back option letter */
-}
diff --git a/openjpeg/src/bin/jp3d/getopt.h b/openjpeg/src/bin/jp3d/getopt.h
deleted file mode 100644
index 935171ba..00000000
--- a/openjpeg/src/bin/jp3d/getopt.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* last review : october 29th, 2002 */
-
-#ifndef _GETOPT_H_
-#define _GETOPT_H_
-
-extern int opterr;
-extern int optind;
-extern int optopt;
-extern int optreset;
-extern char *optarg;
-
-extern int getopt(int nargc, char *const *nargv, const char *ostr);
-
-#endif /* _GETOPT_H_ */
diff --git a/openjpeg/src/bin/jp3d/opj_jp3d_compress.c b/openjpeg/src/bin/jp3d/opj_jp3d_compress.c
deleted file mode 100644
index ea7ee7fc..00000000
--- a/openjpeg/src/bin/jp3d/opj_jp3d_compress.c
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mnica Dez Garca, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "opj_config.h"
-#include "openjp3d.h"
-#include "opj_getopt.h"
-#include "convert.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-#endif /* _WIN32 */
-
-/* ----------------------------------------------------------------------- */
-
-void encode_help_display()
-{
- fprintf(stdout, "List of parameters for the JPEG2000 Part 10 encoder:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Required Parameters (except with -h):\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-i : source file (-i source.bin or source*.pgx) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-m : source characteristics file (-m imgfile.img) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-o : destination file (-o dest.jp3d) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Optional Parameters:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-h : display the help information \n ");
- fprintf(stdout, "\n");
- fprintf(stdout, "-n : number of resolutions (-n 3,3,3) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-I : use the irreversible transforms: ICT + DWT 9-7 (-I) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-C : coding algorithm (-C 2EB) [2EB, 3EB] \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-r : different compression ratios for successive layers (-r 20,10,5)\n ");
- fprintf(stdout,
- " - The rate specified for each quality level is the desired compression factor.\n");
- fprintf(stdout, " - Rate 1 means lossless compression\n");
- fprintf(stdout,
- " (options -r and -q cannot be used together)\n ");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-q : different psnr for successive layers (-q 30,40,50) \n ");
- fprintf(stdout,
- " (options -r and -q cannot be used together)\n ");
- fprintf(stdout, "\n");
- fprintf(stdout, "-b : size of code block (-b 32,32,32) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-c : size of precinct (-c 128,128,128) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-t : size of tile (-t 512,512,512) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-s : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n");
- fprintf(stdout, " - Remark: subsampling bigger than 2 can produce error\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-SOP : write SOP marker before each packet \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-EPH : write EPH marker after each header packet \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-M : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
- fprintf(stdout, " 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n");
- fprintf(stdout,
- " Indicate multiple modes by adding their values. \n");
- fprintf(stdout,
- " ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-D : define DC offset (-D 12) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-x : create an index file *.Idx (-x index_name.Idx) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-ROI : c=%%d,U=%%d : quantization indices upshifted \n");
- fprintf(stdout, " for component c=%%d [%%d = 0,1,2]\n");
- fprintf(stdout,
- " with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-d : offset of the origin of the volume (-d 150,300,100) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-l : offset of the origin of the tiles (-l 100,75,25) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "DEFAULT CODING:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " * Lossless\n");
- fprintf(stdout, " * 1 tile\n");
- fprintf(stdout,
- " * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n");
- fprintf(stdout, " * Size of code-block : 64 x 64 x 64\n");
- fprintf(stdout, " * Number of resolutions in x, y and z axis: 3\n");
- fprintf(stdout, " * No SOP marker in the codestream\n");
- fprintf(stdout, " * No EPH marker in the codestream\n");
- fprintf(stdout, " * No sub-sampling in x, y or z direction\n");
- fprintf(stdout, " * No mode switch activated\n");
- fprintf(stdout, " * Progression order: LRCP\n");
- fprintf(stdout, " * No index file\n");
- fprintf(stdout, " * No ROI upshifted\n");
- fprintf(stdout, " * No offset of the origin of the volume\n");
- fprintf(stdout, " * No offset of the origin of the tiles\n");
- fprintf(stdout, " * Reversible DWT 5-3 on each 2D slice\n");
- fprintf(stdout, " * Coding algorithm: 2D-EBCOT \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "REMARKS:\n");
- fprintf(stdout, "---------\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "- The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
- fprintf(stdout,
- "- COD and QCD markers will never appear in the tile_header.\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "- You need enough disk space memory (twice the original) to encode \n");
- fprintf(stdout,
- "the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "- When loading *.pgx files, a relative path to directory is needed for input argument \n");
- fprintf(stdout,
- " followed by the common prefix of the slices and a '*' character representing sequential numeration.\n");
- fprintf(stdout, "( -i relativepath/slices*.pgx )\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " - The index file has the structure below:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "\t Image_height Image_width Image_depth\n");
- fprintf(stdout, "\t Progression order: 0 (LRCP)\n");
- fprintf(stdout, "\t Tiles_size_X Tiles_size_Y Tiles_size_Z\n");
- fprintf(stdout, "\t Components_nb\n");
- fprintf(stdout, "\t Layers_nb\n");
- fprintf(stdout, "\t Decomposition_levels\n");
- fprintf(stdout,
- "\t [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t ...\n");
- fprintf(stdout,
- "\t [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n");
- fprintf(stdout, "\t Main_header_end_position\n");
- fprintf(stdout, "\t Codestream_size\n");
- fprintf(stdout,
- "\t Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n");
- fprintf(stdout, "\t ...\n");
- fprintf(stdout,
- "\t Tile_Nt [ '' '' '' '' '' '' ]\n");
- fprintf(stdout,
- "\t Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n");
- fprintf(stdout, "\t ...\n");
- fprintf(stdout,
- "\t Tpacket_Np ['' '' '' '' '' '' '' '' ]\n");
- fprintf(stdout, "\t MaxDisto\n");
- fprintf(stdout, "\t TotalDisto\n\n");
- fprintf(stdout, "\n");
-
-}
-
-OPJ_PROG_ORDER give_progression(char progression[4])
-{
- if (strncmp(progression, "LRCP", 4) == 0) {
- return LRCP;
- }
- if (strncmp(progression, "RLCP", 4) == 0) {
- return RLCP;
- }
- if (strncmp(progression, "RPCL", 4) == 0) {
- return RPCL;
- }
- if (strncmp(progression, "PCRL", 4) == 0) {
- return PCRL;
- }
- if (strncmp(progression, "CPRL", 4) == 0) {
- return CPRL;
- }
-
- return PROG_UNKNOWN;
-}
-
-OPJ_TRANSFORM give_transform(char transform[4])
-{
- if (strncmp(transform, "2DWT", 4) == 0) {
- return TRF_2D_DWT;
- }
- if (strncmp(transform, "3DWT", 4) == 0) {
- return TRF_3D_DWT;
- }
- return TRF_UNKNOWN;
-}
-
-OPJ_ENTROPY_CODING give_coding(char coding[3])
-{
-
- if (strncmp(coding, "2EB", 3) == 0) {
- return ENCOD_2EB;
- }
- if (strncmp(coding, "3EB", 3) == 0) {
- return ENCOD_3EB;
- }
- /*if(strncmp(coding, "2GR", 3) == 0) {
- return ENCOD_2GR;
- }
- if(strncmp(coding, "3GR", 3) == 0) {
- return ENCOD_3GR;
- }*/
-
- return ENCOD_UNKNOWN;
-}
-
-int get_file_format(char *filename)
-{
- int i;
- static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"};
- static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT};
- char * ext = strrchr(filename, '.');
- if (ext) {
- ext++;
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (strnicmp(ext, extension[i], 3) == 0) {
- return format[i];
- }
- }
- }
-
- return -1;
-}
-
-/* ------------------------------------------------------------------------------------ */
-
-int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters)
-{
- int i, value;
-
- /* parse the command line */
-
- while (1) {
- int c = opj_getopt(argc, argv,
- "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I");
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = get_file_format(infile);
- switch (parameters->decod_format) {
- case PGX_DFMT:
- case BIN_DFMT:
- case IMG_DFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n",
- infile);
- return 1;
- break;
- }
- strncpy(parameters->infile, infile, MAX_PATH);
- fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
-
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'm': { /* input IMG file */
- char *imgfile = opj_optarg;
- int imgformat = get_file_format(imgfile);
- switch (imgformat) {
- case IMG_DFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
- imgfile);
- return 1;
- break;
- }
- strncpy(parameters->imgfile, imgfile, MAX_PATH);
- fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
- imgformat);
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case J3D_CFMT:
- case J2K_CFMT:
- case LSE_CFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n",
- outfile);
- return 1;
- break;
- }
- strncpy(parameters->outfile, outfile, MAX_PATH);
- fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'r': { /* define compression rates for each layer */
- char *s = opj_optarg;
- while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
- 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_disto_alloc = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'q': { /* define distorsion (PSNR) for each layer */
- char *s = opj_optarg;
- while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
- == 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_fixed_quality = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'f': {
- fprintf(stdout, "/---------------------------------------------------\\\n");
- fprintf(stdout, "| Fixed layer allocation option not implemented !! |\n");
- fprintf(stdout, "\\---------------------------------------------------/\n");
- /*int *row = NULL, *col = NULL;
- int numlayers = 0, matrix_width = 0;
-
- char *s = opj_optarg;
- sscanf(s, "%d", &numlayers);
- s++;
- if (numlayers > 9)
- s++;
-
- parameters->tcp_numlayers = numlayers;
- matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2];
- parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
- s = s + 2;
-
- for (i = 0; i < numlayers; i++) {
- row = &parameters->cp_matrice[i * matrix_width];
- col = row;
- parameters->tcp_rates[i] = 1;
- sscanf(s, "%d,", &col[0]);
- s += 2;
- if (col[0] > 9)
- s++;
- col[1] = 0;
- col[2] = 0;
- for (j = 1; j < matrix_width; j++) {
- col += 3; j+=2;
- sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
- s += 6;
- if (col[0] > 9)
- s++;
- if (col[1] > 9)
- s++;
- if (col[2] > 9)
- s++;
- }
- if (i < numlayers - 1)
- s++;
- }
- parameters->cp_fixed_alloc = 1; */
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 't': { /* tiles */
- if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tdx, &parameters->cp_tdy,
- &parameters->cp_tdz) != 3) {
- fprintf(stdout,
- "[ERROR] '-t' 'dimensions of tiles' argument error ! [-t tdx,tdy,tdz]\n");
- return 1;
- }
- parameters->tile_size_on = true;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'n': { /* resolution */
- int aux;
- aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->numresolution[0],
- &parameters->numresolution[1], &parameters->numresolution[2]);
- if (aux == 2) {
- parameters->numresolution[2] = 1;
- } else if (aux == 1) {
- parameters->numresolution[1] = parameters->numresolution[0];
- parameters->numresolution[2] = 1;
- } else if (aux == 0) {
- parameters->numresolution[0] = 1;
- parameters->numresolution[1] = 1;
- parameters->numresolution[2] = 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'c': { /* precinct dimension */
- char sep;
- int res_spec = 0;
- int aux;
- char *s = opj_optarg;
- do {
- sep = 0;
- aux = sscanf(s, "[%d,%d,%d]%c", &parameters->prct_init[0][res_spec],
- &parameters->prct_init[1][res_spec], &parameters->prct_init[2][res_spec], &sep);
- if (sep == ',' && aux != 4) {
- fprintf(stdout,
- "[ERROR] '-c' 'dimensions of precincts' argument error ! [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n");
- return 1;
- }
- parameters->csty |= 0x01;
- res_spec++;
- s = strpbrk(s, "]") + 2;
- } while (sep == ',');
- parameters->res_spec = res_spec; /* number of precinct size specifications */
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'b': { /* code-block dimension */
- int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0;
- if (sscanf(opj_optarg, "%d,%d,%d", &cblockw_init, &cblockh_init,
- &cblockl_init) != 3) {
- fprintf(stdout,
- "[ERROR] '-b' 'dimensions of codeblocks' argument error ! [-b cblkx,cblky,cblkz]\n");
- return 1;
- }
- if (cblockw_init * cblockh_init * cblockl_init > (1 << 18) ||
- cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 ||
- cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) {
- fprintf(stdout,
- "[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n");
- return 1;
- }
- parameters->cblock_init[0] = cblockw_init;
- parameters->cblock_init[1] = cblockh_init;
- parameters->cblock_init[2] = cblockl_init;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'x': { /* creation of index file */
- char *index = opj_optarg;
- strncpy(parameters->index, index, MAX_PATH);
- parameters->index_on = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'p': { /* progression order */
- char progression[4];
-
- strncpy(progression, opj_optarg, 4);
- parameters->prog_order = give_progression(progression);
- if (parameters->prog_order == -1) {
- fprintf(stdout,
- "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 's': { /* subsampling factor */
- if (sscanf(opj_optarg, "%d,%d,%d", &parameters->subsampling_dx,
- &parameters->subsampling_dy, &parameters->subsampling_dz) != 3) {
- fprintf(stdout, "[ERROR] '-s' sub-sampling argument error ! [-s dx,dy,dz]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'd': { /* coordonnate of the reference grid */
- if (sscanf(opj_optarg, "%d,%d,%d", &parameters->volume_offset_x0,
- &parameters->volume_offset_y0, &parameters->volume_offset_z0) != 3) {
- fprintf(stdout,
- "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': { /* display an help description */
- encode_help_display();
- return 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'P': { /* POC */
- int numpocs = 0; /* number of progression order change (POC) default 0 */
- opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */
-
- char *s = opj_optarg;
- POC = parameters->POC;
-
- fprintf(stdout, "/----------------------------------\\\n");
- fprintf(stdout, "| POC option not fully tested !! |\n");
- fprintf(stdout, "\\----------------------------------/\n");
-
- while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile,
- &POC[numpocs].resno0, &POC[numpocs].compno0,
- &POC[numpocs].layno1, &POC[numpocs].resno1,
- &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
- POC[numpocs].prg = give_progression(POC[numpocs].progorder);
- /* POC[numpocs].tile; */
- numpocs++;
- while (*s && *s != '/') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->numpocs = numpocs;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'S': { /* SOP marker */
- parameters->csty |= 0x02;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'E': { /* EPH marker */
- parameters->csty |= 0x04;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'M': { /* Codification mode switch */
- fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n");
- value = 0;
- if (sscanf(opj_optarg, "%d", &value) == 1) {
- for (i = 0; i <= 6; i++) {
- int cache = value & (1 << i);
- if (cache) {
- parameters->mode |= (1 << i);
- }
- }
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'D': { /* DCO */
- if (sscanf(opj_optarg, "%d", &parameters->dcoffset) != 1) {
- fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n", parameters->dcoffset);
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'R': { /* ROI */
- if (sscanf(opj_optarg, "OI:c=%d,U=%d", &parameters->roi_compno,
- &parameters->roi_shift) != 2) {
- fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'l': { /* Tile offset */
- if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tx0, &parameters->cp_ty0,
- &parameters->cp_tz0) != 3) {
- fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------
-
- case 'T': // Transformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS)
- {
- char transform[4];
-
- strncpy(transform, opj_optarg, 4);
- parameters->transform_format = give_transform(transform);
- if (parameters->transform_format == -1) {
- fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]");
- return 1;
- }
- }
- break;
-
- ------------------------------------------------------ */
-
- case 'C': { /* Coding of transformed data */
- char coding[3];
-
- strncpy(coding, opj_optarg, 3);
- parameters->encoding_format = give_coding(coding);
- if (parameters->encoding_format == -1) {
- fprintf(stdout,
- "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'I': { /* reversible or not */
- parameters->irreversible = 1;
- }
- break;
-
- default:
- fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, opj_optarg);
- return 1;
- }
- }
-
- /* check for possible errors */
-
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n");
- return 1;
- }
-
- if ((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) {
- fprintf(stdout,
- "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n");
- return 1;
- }
-
- if ((parameters->decod_format != BIN_DFMT) &&
- (parameters->decod_format != PGX_DFMT) &&
- (parameters->decod_format != IMG_DFMT)) {
- fprintf(stdout,
- "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
- return 1;
- }
- if ((parameters->cod_format != J3D_CFMT) &&
- (parameters->cod_format != J2K_CFMT)) {
- fprintf(stdout,
- "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
- return 1;
- }
-
- if ((parameters->encoding_format == ENCOD_2GR ||
- parameters->encoding_format == ENCOD_3GR) &&
- parameters->transform_format != TRF_3D_LSE &&
- parameters->transform_format != TRF_3D_RLS) {
- fprintf(stdout,
- "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n");
- return 1;
- }
- if (parameters->encoding_format == ENCOD_3EB) {
- parameters->mode |= (1 << 6);
- }
-
- if ((parameters->mode >> 6) & 1) {
- parameters->encoding_format = ENCOD_3EB;
- }
-
- if ((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) ||
- (parameters->numresolution[0] == 0))) {
- fprintf(stdout,
- "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n");
- return 1;
- }
- if (parameters->numresolution[1] != parameters->numresolution[0]) {
- fprintf(stdout,
- "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n");
- return 1;
- }
-
- if (parameters->numresolution[2] > parameters->numresolution[0]) {
- fprintf(stdout,
- "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n");
- return 1;
- }
-
- if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) {
- fprintf(stdout,
- "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n");
- return 1;
- }
-
- if (parameters->numresolution[2] != 1) {
- parameters->transform_format = TRF_3D_DWT;
- /*fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n");*/
- } else if (parameters->numresolution[2] == 1) {
- parameters->transform_format = TRF_2D_DWT;
- /*fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n");*/
- }
-
- if ((parameters->cod_format == J2K_CFMT) &&
- (parameters->transform_format != TRF_2D_DWT ||
- parameters->encoding_format != ENCOD_2EB)) {
- fprintf(stdout,
- "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n");
- parameters->transform_format = TRF_2D_DWT;
- parameters->encoding_format = ENCOD_2EB;
- }
-
- if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
- parameters->cp_fixed_quality) &&
- (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) {
- fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n");
- return 1;
- } /* mod fixed_quality */
-
- /* if no rate entered, lossless by default */
- if (parameters->tcp_numlayers == 0) {
- parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */
- parameters->tcp_numlayers++;
- parameters->cp_disto_alloc = 1;
- }
-
- if ((parameters->cp_tx0 > parameters->volume_offset_x0) ||
- (parameters->cp_ty0 > parameters->volume_offset_y0) ||
- (parameters->cp_tz0 > parameters->volume_offset_z0)) {
- fprintf(stdout,
- "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n",
- parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0,
- parameters->volume_offset_y0,
- parameters->cp_tz0, parameters->volume_offset_z0);
- return 1;
- }
-
- for (i = 0; i < parameters->numpocs; i++) {
- if (parameters->POC[i].prg == -1) {
- fprintf(stdout,
- "[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
- i + 1);
- }
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting a FILE* client object
-*/
-void info_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
- bool bSuccess;
- bool delete_comment = true;
- opj_cparameters_t parameters; /* compression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_volume_t *volume = NULL;
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* set encoding parameters to default values */
- opj_set_default_encoder_parameters(&parameters);
-
- /* parse input and get user encoding parameters */
- if (parse_cmdline_encoder(argc, argv, &parameters) == 1) {
- return 0;
- }
-
- if (parameters.cp_comment == NULL) {
- parameters.cp_comment = "Created by OpenJPEG version JP3D";
- /* no need to delete parameters.cp_comment on exit */
- delete_comment = false;
- }
-
- /* encode the destination volume */
- /* ---------------------------- */
- if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT) {
- int codestream_length, pixels, bitsin;
- opj_cio_t *cio = NULL;
- FILE *f = NULL;
- opj_cinfo_t* cinfo = NULL;
-
- /* decode the source volume */
- /* ----------------------- */
- switch (parameters.decod_format) {
- case PGX_DFMT:
- fprintf(stdout, "[INFO] Loading pgx file(s)\n");
- volume = pgxtovolume(parameters.infile, &parameters);
- if (!volume) {
- fprintf(stdout, "[ERROR] Unable to load pgx files\n");
- return 1;
- }
- break;
-
- case BIN_DFMT:
- fprintf(stdout, "[INFO] Loading bin file\n");
- volume = bintovolume(parameters.infile, parameters.imgfile, &parameters);
- if (!volume) {
- fprintf(stdout, "[ERROR] Unable to load bin file\n");
- return 1;
- }
- break;
-
- case IMG_DFMT:
- fprintf(stdout, "[INFO] Loading img file\n");
- volume = imgtovolume(parameters.infile, &parameters);
- if (!volume) {
- fprintf(stderr, "[ERROR] Unable to load img file\n");
- return 1;
- }
- break;
- }
-
- /* get a JP3D or J2K compressor handle */
- if (parameters.cod_format == J3D_CFMT) {
- cinfo = opj_create_compress(CODEC_J3D);
- } else if (parameters.cod_format == J2K_CFMT) {
- cinfo = opj_create_compress(CODEC_J2K);
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout);
-
- /* setup the encoder parameters using the current volume and using user parameters */
- opj_setup_encoder(cinfo, &parameters, volume);
-
- /* open a byte stream for writing */
- /* allocate memory for all tiles */
- cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
- /* encode the volume */
- /*fprintf(stdout, "[INFO] Encode the volume\n");*/
- bSuccess = opj_encode(cinfo, cio, volume, parameters.index);
- if (!bSuccess) {
- opj_cio_close(cio);
- fprintf(stdout, "[ERROR] Failed to encode volume\n");
- return 1;
- }
- codestream_length = cio_tell(cio);
- pixels = (volume->x1 - volume->x0) * (volume->y1 - volume->y0) *
- (volume->z1 - volume->z0);
- bitsin = pixels * volume->comps[0].prec;
- fprintf(stdout,
- "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B, Ratio: %5.3f bpv, (%5.3f : 1) \n",
- (volume->x1 - volume->x0), (volume->y1 - volume->y0), (volume->z1 - volume->z0),
- volume->comps[0].prec,
- codestream_length, ((double)codestream_length * 8.0 / (double)pixels),
- ((double)bitsin / (8.0 * (double)codestream_length)));
-
- /* write the buffer to disk */
- f = fopen(parameters.outfile, "wb");
- if (!f) {
- fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile);
- return 1;
- }
- fwrite(cio->buffer, 1, codestream_length, f);
- fclose(f);
-
- /* close and free the byte stream */
- opj_cio_close(cio);
-
- /* free remaining compression structures */
- opj_destroy_compress(cinfo);
- } else {
- fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n");
- return 1;
- }
-
- /* free user parameters structure */
- if (delete_comment) {
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
-
- /* free volume data */
- opj_volume_destroy(volume);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jp3d/opj_jp3d_decompress.c b/openjpeg/src/bin/jp3d/opj_jp3d_decompress.c
deleted file mode 100644
index 08d6ced2..00000000
--- a/openjpeg/src/bin/jp3d/opj_jp3d_decompress.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2006, Mnica Dez Garca, Image Processing Laboratory, University of Valladolid, Spain
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "opj_config.h"
-#include "openjp3d.h"
-#include "opj_getopt.h"
-#include "convert.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-#endif /* _WIN32 */
-
-/* ----------------------------------------------------------------------- */
-static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
-{
- int max, i, k, compno = 0, size;
- double sum, total = 0;
- int global = 1;
-
- max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
- original->comps[compno].prec) - 1;
- if (global) {
- size = (original->x1 - original->x0) * (original->y1 - original->y0) *
- (original->z1 - original->z0);
-
- for (compno = 0; compno < original->numcomps; compno++) {
- for (sum = 0, i = 0; i < size; ++i) {
- if ((decoded->comps[compno].data[i] < 0) ||
- (decoded->comps[compno].data[i] > max)) {
- fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
- } else {
- sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) *
- (original->comps[compno].data[i] - decoded->comps[compno].data[i]);
- }
- }
- }
- sum /= size;
- total = ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
- } else {
- size = (original->x1 - original->x0) * (original->y1 - original->y0);
-
- for (k = 0; k < original->z1 - original->z0; k++) {
- int offset = k * size;
- for (sum = 0, compno = 0; compno < original->numcomps; compno++) {
- for (i = 0; i < size; ++i) {
- if ((decoded->comps[compno].data[i + offset] < 0) ||
- (decoded->comps[compno].data[i + offset] > max)) {
- fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
- } else {
- sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i
- + offset]) * (original->comps[compno].data[i + offset] -
- decoded->comps[compno].data[i + offset]);
- }
- }
- }
- sum /= size;
- total = total + ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
- }
-
- }
- if (total == 0) { /* perfect reconstruction, PSNR should return infinity */
- return -1.0;
- }
-
- return total;
- /*return 20 * log10((max - 1) / sqrt(sum));*/
-}
-
-static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded)
-{
- int max, i, compno = 0, size, sizeM;
- double sum;
- double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0,
- sigmaxy = 0.0/*, structx = 0.0, structy = 0.0*/;
- double lcomp, ccomp, scomp;
- double C1, C2, C3;
-
- max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
- original->comps[compno].prec) - 1;
- size = (original->x1 - original->x0) * (original->y1 - original->y0) *
- (original->z1 - original->z0);
-
- /*MSSIM*/
-
- /* sizeM = size / (original->z1 - original->z0);*/
-
- sizeM = size;
- for (sum = 0, i = 0; i < sizeM; ++i) {
- /* First, the luminance of each signal is compared.*/
- mux += original->comps[compno].data[i];
- muy += decoded->comps[compno].data[i];
- }
- mux /= sizeM;
- muy /= sizeM;
-
- /*We use the standard deviation (the square root of variance) as an estimate of the signal contrast.*/
- for (sum = 0, i = 0; i < sizeM; ++i) {
- /* First, the luminance of each signal is compared.*/
- sigmax += (original->comps[compno].data[i] - mux) *
- (original->comps[compno].data[i] - mux);
- sigmay += (decoded->comps[compno].data[i] - muy) *
- (decoded->comps[compno].data[i] - muy);
- sigmaxy += (original->comps[compno].data[i] - mux) *
- (decoded->comps[compno].data[i] - muy);
- }
- sigmax /= sizeM - 1;
- sigmay /= sizeM - 1;
- sigmaxy /= sizeM - 1;
-
- sigmax = sqrt(sigmax);
- sigmay = sqrt(sigmay);
- sigmaxy = sqrt(sigmaxy);
-
- /*Third, the signal is normalized (divided) by its own standard deviation, */
- /*so that the two signals being compared have unit standard deviation.*/
-
- /*Luminance comparison*/
- C1 = (0.01 * max) * (0.01 * max);
- lcomp = ((2 * mux * muy) + C1) / ((mux * mux) + (muy * mux) + C1);
- /*Constrast comparison*/
- C2 = (0.03 * max) * (0.03 * max);
- ccomp = ((2 * sigmax * sigmay) + C2) / ((sigmax * sigmax) +
- (sigmay * sigmay) + C2);
- /*Structure comparison*/
- C3 = C2 / 2;
- scomp = (sigmaxy + C3) / (sigmax * sigmay + C3);
- /*Similarity measure*/
-
- sum = lcomp * ccomp * scomp;
- return sum;
-}
-
-void decode_help_display()
-{
- fprintf(stdout, "HELP\n----\n\n");
- fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
- fprintf(stdout, "List of parameters for the JPEG 2000 encoder:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " Required arguments \n");
- fprintf(stdout, " ---------------------------- \n");
- fprintf(stdout, " -i <compressed file> ( *.jp3d, *.j3d )\n");
- fprintf(stdout,
- " Currently accepts J3D-files. The file type is identified based on its suffix.\n");
- fprintf(stdout, " -o <decompressed file> ( *.pgx, *.bin )\n");
- fprintf(stdout,
- " Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n");
- fprintf(stdout,
- " If a PGX filename is given, there will be as many output files as slices; \n");
- fprintf(stdout,
- " an indice starting from 0 will then be appended to the output filename,\n");
- fprintf(stdout, " just before the \"pgx\" extension.\n");
- fprintf(stdout, " -m <characteristics file> ( *.img ) \n");
- fprintf(stdout,
- " Required only for BIN-files. Ascii data of volume characteristics is written. \n");
- fprintf(stdout, "\n");
- fprintf(stdout, " Optional \n");
- fprintf(stdout, " ---------------------------- \n");
- fprintf(stdout, " -h \n ");
- fprintf(stdout, " Display the help information\n");
- fprintf(stdout, " -r <RFx,RFy,RFz>\n");
- fprintf(stdout,
- " Set the number of highest resolution levels to be discarded on each dimension. \n");
- fprintf(stdout,
- " The volume resolution is effectively divided by 2 to the power of the\n");
- fprintf(stdout,
- " number of discarded levels. The reduce factor is limited by the\n");
- fprintf(stdout,
- " smallest total number of decomposition levels among tiles.\n");
- fprintf(stdout, " -l <number of quality layers to decode>\n");
- fprintf(stdout,
- " Set the maximum number of quality layers to decode. If there are\n");
- fprintf(stdout,
- " less quality layers than the specified number, all the quality layers\n");
- fprintf(stdout, " are decoded. \n");
- fprintf(stdout, " -O original-file \n");
- fprintf(stdout,
- " This option offers the possibility to compute some quality results \n");
- fprintf(stdout,
- " for the decompressed volume, like the PSNR value achieved or the global SSIM value. \n");
- fprintf(stdout,
- " Needs the original file in order to compare with the new one.\n");
- fprintf(stdout,
- " NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n");
- fprintf(stdout,
- " NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n");
- fprintf(stdout, " (i.e. -O original-BIN-file -m original-IMG-file) \n");
- fprintf(stdout, " -BE \n");
- fprintf(stdout,
- " Define that the recovered volume data will be saved with big endian byte order.\n");
- fprintf(stdout, " By default, little endian byte order is used.\n");
- fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-
-int get_file_format(char *filename)
-{
- int i;
- static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"};
- static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT};
- char * ext = strrchr(filename, '.');
- if (ext) {
- ext++;
- for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) {
- if (strnicmp(ext, extension[i], 3) == 0) {
- return format[i];
- }
- }
- }
-
- return -1;
-}
-
-/* -------------------------------------------------------------------------- */
-
-int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters)
-{
- /* parse the command line */
-
- while (1) {
- int c = opj_getopt(argc, argv, "i:o:O:r:l:B:m:h");
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = get_file_format(infile);
- switch (parameters->decod_format) {
- case J3D_CFMT:
- case J2K_CFMT:
- break;
- default:
- fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n",
- infile);
- return 1;
- break;
- }
- strncpy(parameters->infile, infile, MAX_PATH);
- fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
-
- }
- break;
-
- case 'm': { /* img file */
- char *imgfile = opj_optarg;
- int imgformat = get_file_format(imgfile);
- switch (imgformat) {
- case IMG_DFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
- imgfile);
- return 1;
- break;
- }
- strncpy(parameters->imgfile, imgfile, MAX_PATH);
- fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
- imgformat);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case PGX_DFMT:
- case BIN_DFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n",
- outfile);
- return 1;
- break;
- }
- strncpy(parameters->outfile, outfile, MAX_PATH);
- fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
-
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'O': { /* Original image for PSNR computing */
- char *original = opj_optarg;
- parameters->orig_format = get_file_format(original);
- switch (parameters->orig_format) {
- case PGX_DFMT:
- case BIN_DFMT:
- break;
- default:
- fprintf(stdout,
- "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n",
- original);
- return 1;
- break;
- }
- strncpy(parameters->original, original, MAX_PATH);
- fprintf(stdout, "[INFO] Original file: %s \n", parameters->original);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'r': { /* reduce option */
- /*sscanf(opj_optarg, "%d, %d, %d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);*/
- int aux;
- aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_reduce[0],
- &parameters->cp_reduce[1], &parameters->cp_reduce[2]);
- if (aux == 2) {
- parameters->cp_reduce[2] = 0;
- } else if (aux == 1) {
- parameters->cp_reduce[1] = parameters->cp_reduce[0];
- parameters->cp_reduce[2] = 0;
- } else if (aux == 0) {
- parameters->cp_reduce[0] = 0;
- parameters->cp_reduce[1] = 0;
- parameters->cp_reduce[2] = 0;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'l': { /* layering option */
- sscanf(opj_optarg, "%d", &parameters->cp_layer);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'B': { /* BIGENDIAN vs. LITTLEENDIAN */
- parameters->bigendian = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'L': { /* BIGENDIAN vs. LITTLEENDIAN */
- parameters->decod_format = LSE_CFMT;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': { /* display an help description */
- decode_help_display();
- return 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- default:
- fprintf(stdout, "[WARNING] This option is not valid \"-%c %s\"\n", c,
- opj_optarg);
- break;
- }
- }
-
- /* check for possible errors */
-
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stdout,
- "[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n");
- return 1;
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting no client object
-*/
-void info_callback(const char *msg, void *client_data)
-{
- fprintf(stdout, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
-
- opj_dparameters_t parameters; /* decompression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_volume_t *volume = NULL;
-
- opj_volume_t *original = NULL;
- opj_cparameters_t cparameters; /* original parameters */
-
- FILE *fsrc = NULL;
- unsigned char *src = NULL;
- int file_length;
- int decodeok;
- double psnr, ssim;
-
- opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
- opj_cio_t *cio = NULL;
-
- /* configure the event callbacks (not required) */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* set decoding parameters to default values */
- opj_set_default_decoder_parameters(&parameters);
-
- /* parse input and get user decoding parameters */
- strcpy(parameters.original, "NULL");
- strcpy(parameters.imgfile, "NULL");
- if (parse_cmdline_decoder(argc, argv, &parameters) == 1) {
- return 0;
- }
-
- /* read the input file and put it in memory */
- /* ---------------------------------------- */
- fprintf(stdout, "[INFO] Loading %s file \n",
- parameters.decod_format == J3D_CFMT ? ".jp3d" : ".j2k");
- fsrc = fopen(parameters.infile, "rb");
- if (!fsrc) {
- fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile);
- return 1;
- }
- fseek(fsrc, 0, SEEK_END);
- file_length = ftell(fsrc);
- fseek(fsrc, 0, SEEK_SET);
- src = (unsigned char *) malloc(file_length);
- fread(src, 1, file_length, fsrc);
- fclose(fsrc);
-
- /* decode the code-stream */
- /* ---------------------- */
- if (parameters.decod_format == J3D_CFMT ||
- parameters.decod_format == J2K_CFMT) {
- /* get a JP3D or J2K decoder handle */
- if (parameters.decod_format == J3D_CFMT) {
- dinfo = opj_create_decompress(CODEC_J3D);
- } else if (parameters.decod_format == J2K_CFMT) {
- dinfo = opj_create_decompress(CODEC_J2K);
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
- /* decode the stream and fill the volume structure */
- volume = opj_decode(dinfo, cio);
- if (!volume) {
- fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n");
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- return 1;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
- }
-
- /* free the memory containing the code-stream */
- free(src);
- src = NULL;
-
- /* create output volume */
- /* ------------------- */
-
- switch (parameters.cod_format) {
- case PGX_DFMT: /* PGX */
- decodeok = volumetopgx(volume, parameters.outfile);
- if (decodeok) {
- fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
- }
- break;
-
- case BIN_DFMT: /* BMP */
- decodeok = volumetobin(volume, parameters.outfile);
- if (decodeok) {
- fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
- }
- break;
- }
- switch (parameters.orig_format) {
- case PGX_DFMT: /* PGX */
- if (strcmp("NULL", parameters.original) != 0) {
- fprintf(stdout, "Loading original file %s \n", parameters.original);
- cparameters.subsampling_dx = 1;
- cparameters.subsampling_dy = 1;
- cparameters.subsampling_dz = 1;
- cparameters.volume_offset_x0 = 0;
- cparameters.volume_offset_y0 = 0;
- cparameters.volume_offset_z0 = 0;
- original = pgxtovolume(parameters.original, &cparameters);
- }
- break;
-
- case BIN_DFMT: /* BMP */
- if (strcmp("NULL", parameters.original) != 0 &&
- strcmp("NULL", parameters.imgfile) != 0) {
- fprintf(stdout, "Loading original file %s %s\n", parameters.original,
- parameters.imgfile);
- cparameters.subsampling_dx = 1;
- cparameters.subsampling_dy = 1;
- cparameters.subsampling_dz = 1;
- cparameters.volume_offset_x0 = 0;
- cparameters.volume_offset_y0 = 0;
- cparameters.volume_offset_z0 = 0;
- original = bintovolume(parameters.original, parameters.imgfile, &cparameters);
- }
- break;
- }
-
- fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ",
- (volume->comps[0].w >> volume->comps[0].factor[0]),
- (volume->comps[0].h >> volume->comps[0].factor[1]),
- (volume->comps[0].l >> volume->comps[0].factor[2]),
- volume->comps[0].prec);
-
- if (original) {
- psnr = calc_PSNR(original, volume);
- ssim = calc_SSIM(original, volume);
- if (psnr < 0.0) {
- fprintf(stdout, " PSNR: Inf , SSMI %f -- Perfect reconstruction!\n", ssim);
- } else {
- fprintf(stdout, " PSNR: %f , SSIM %f \n", psnr, ssim);
- }
- }
- /* free remaining structures */
- if (dinfo) {
- opj_destroy_decompress(dinfo);
- }
-
- /* free volume data structure */
- opj_volume_destroy(volume);
-
- return 0;
-}
-
diff --git a/openjpeg/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl b/openjpeg/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl
deleted file mode 100755
index 37657b27..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/LPI_JP3D_VM.tcl
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/sh
-# The next line is executed by /bin/sh, but not tcl \
-exec wish "$0" ${1+"$@"}
-lappend auto_path /usr/share/tcltk/bwidget1.9.2
-
-namespace eval jp3dVM {
-
- variable _progress 0
- variable _afterid ""
- variable _status "Compute in progress..."
- variable notebook
- variable mainframe
- variable dataout "Process execution information"
- variable status
- variable prgtext
- variable prgindic
-
- set pwd [pwd]
- cd [file dirname [info script]]
- variable VMDIR [pwd]
- cd $pwd
-
- foreach script {encoder.tcl decoder.tcl} {
- namespace inscope :: source $VMDIR/$script
- }
-}
-
-
-proc jp3dVM::create { } {
- variable notebook
- variable mainframe
- variable dataout
-
- bind all <F12> { catch {console show} }
-
- # Menu description
- set descmenu {
- "&File" {} {} 0 {
- {command "E&xit" {} "Exit BWidget jp3dVM" {} -command exit}
- }
- "&Options" {} {} 0 {
- {command "&Encode" {} "Show encoder" {}
- -command {$jp3dVM::notebook raise [$jp3dVM::notebook page 0]}
- }
- {command "&Decode" {} "Show decoder" {}
- -command {$jp3dVM::notebook raise [$jp3dVM::notebook page 1]}
- }
- }
- "&Help" {} {} 0 {
- {command "&About authors..." {} "Show info about authors" {}
- -command {MessageDlg .msgdlg -parent . -title "About authors" -message " Copyright @ LPI-UVA 2006 " -type ok -icon info}}
- }
- }
-
- set mainframe [MainFrame .mainframe \
- -menu $descmenu \
- -textvariable jp3dVM::status \
- -progressvar jp3dVM::prgindic]
-
- $mainframe addindicator -text "JP3D Verification Model 1.0.0"
-
- # NoteBook creation
- set frame [$mainframe getframe]
- set notebook [NoteBook $frame.nb]
-
- set logo [frame $frame.logo]
- #creo imagen logo
- image create photo LPIimg -file logoLPI.gif
- set logoimg [Label $logo.logoimg -image LPIimg]
-
- set f0 [VMEncoder::create $notebook]
- set f1 [VMDecoder::create $notebook]
-
- set tfinfo [TitleFrame $frame.codinfo -text "Program Execution"]
- set codinfo [$tfinfo getframe]
- set sw [ScrolledWindow $codinfo.sw -relief sunken -borderwidth 2 -scrollbar both]
- set sf [ScrollableFrame $codinfo.sf ]
- $sw setwidget $sf
- set subf [$sf getframe]
- set labinfo [label $subf.labinfo -textvariable jp3dVM::dataout -justify left]
-
- pack $labinfo -side left
- pack $sw
-
- $notebook compute_size
- $notebook raise [$notebook page 0]
-
- pack $logoimg -side left -fill x -expand yes
- pack $notebook -expand yes
- pack $logo $tfinfo -side left -expand yes
- pack $mainframe -fill both -expand yes
- update idletasks
-}
-
-
-proc jp3dVM::main {} {
- variable VMDIR
-
- lappend ::auto_path [file dirname $VMDIR]
- namespace inscope :: package require BWidget
-
- option add *TitleFrame.l.font {helvetica 11 bold italic}
-
- wm withdraw .
- wm title . "JP3D Verification Model @ LPI"
-
- jp3dVM::create
- BWidget::place . 0 0 center
- wm deiconify .
- raise .
- focus -force .
-}
-
-jp3dVM::main
-wm geom . [wm geom .]
diff --git a/openjpeg/src/bin/jp3d/tcltk/README b/openjpeg/src/bin/jp3d/tcltk/README
deleted file mode 100644
index f4e2e359..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/README
+++ /dev/null
@@ -1,13 +0,0 @@
-HOWTO USE THE TCL/TK APP IN 'jp3d/tcltk'
-----------------------------------------
-1. Download the 'BWidget-1.9.2'
- http://www.sourceforge.net/projects/tcllib/
-
-2. Install it e.g. in '/usr/local/BWidget-1.9.2/'
-3. Add the lappend command in line 4
- to jp3d/tcltk/LPI_JP3D_VM.tcl:
-
-#!/bin/sh
-# The next line is executed by /bin/sh, but not tcl \
-exec wish "$0" ${1+"$@"}
-lappend auto_path /usr/local/BWidget-1.9.2
diff --git a/openjpeg/src/bin/jp3d/tcltk/Thumbs.db b/openjpeg/src/bin/jp3d/tcltk/Thumbs.db
deleted file mode 100755
index 5d6ffdf9..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/Thumbs.db
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/jp3d/tcltk/decoder.tcl b/openjpeg/src/bin/jp3d/tcltk/decoder.tcl
deleted file mode 100755
index 21daba7d..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/decoder.tcl
+++ /dev/null
@@ -1,272 +0,0 @@
-
-namespace eval VMDecoder {
- variable var
- variable JP3Ddecoder "../bin/jp3d_to_volume.exe"
- #variable JP3Ddecoder "jp3d_to_volume.exe"
-}
-
-
-proc VMDecoder::create { nb } {
- variable var
-
- set frameD [$nb insert end VMDecoder -text "Decoder"]
- set topfD [frame $frameD.topfD]
- set medfD [frame $frameD.medfD]
- set bottomfD [frame $frameD.bottomfD]
- set srcfD [TitleFrame $topfD.srcfD -text "Source"]
- set dstfD [TitleFrame $topfD.dstfD -text "Destination"]
- set paramfD [TitleFrame $medfD.paramfD -text "Decoding parameters"]
- set infofD [TitleFrame $medfD.infofD -text "Distortion measures"]
-
- set frame1 [$srcfD getframe]
- _sourceD $frame1
- set frame2 [$dstfD getframe]
- _destinationD $frame2
- set frame3 [$infofD getframe]
- _originalD $frame3
- set frame4 [$paramfD getframe]
- _paramsD $frame4
-
- set butD [Button $bottomfD.butD -text "Decode!" \
- -command "VMDecoder::_decode $frame1 $frame2 $frame3" \
- -helptext "Decoding trigger button"]
- set butR [Button $bottomfD.butR -text "Save info" \
- -command "VMDecoder::_save $frame3" \
- -helptext "Save information"]
-
- pack $srcfD $dstfD -side left -fill both -padx 10 -ipadx 5 -expand yes
- pack $topfD -pady 4 -fill x
-
- pack $paramfD $infofD -side left -fill both -padx 10 -pady 2 -ipadx 5 -expand yes
- pack $medfD -pady 4 -fill x
-
- pack $butD $butR -side left -padx 4 -pady 5 -expand yes
- pack $bottomfD -pady 4 -fill x
-
-return $frameD
-}
-
-
-proc fileDialogD {w ent operation} {
-
- variable file
-
- if {$operation == "open"} {
- #-----Type names---------Extension(s)---
- set types {
- {"JP3D Files" {.jp3d} }
- {"All files" *}
- }
- set file [tk_getOpenFile -filetypes $types -parent $w ]
- } elseif {$operation == "original"} {
- #-----Type names---------Extension(s)---
- set types {
- {"BIN Raw Image Files" {.bin} }
- {"PGX Raw Image Files" {.pgx} }
- {"All files" *}
- }
- set file [tk_getOpenFile -filetypes $types -parent $w ]
- } else {
- #-----Type names---------Extension(s)---
- set types {
- {"BIN Raw Image Files" {.bin} }
- {"PGX Raw Image Files" {.pgx} }
- {"All files" *}
- }
- set file [tk_getSaveFile -filetypes $types -parent $w -initialfile Untitled -defaultextension "*.bin"]
- }
- if {[string compare $file ""]} {
- $ent delete 0 end
- $ent insert end $file
- $ent xview moveto 1
- }
-}
-
-proc VMDecoder::_sourceD { parent } {
-
- variable var
-
- set labsrcD [LabelFrame $parent.labsrcD -text "Select compressed file: " -side top \
- -anchor w -relief flat -borderwidth 0]
- set subsrcD [$labsrcD getframe]
- set listD [entry $subsrcD.entrysrcD -width 40 -textvariable VMDecoder::var(sourceD)]
-
- set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
- set subbrw [$labbrw getframe]
- set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \
- -relief raised -borderwidth 1 -padx 1 -pady 1 \
- -command "fileDialogD . $subsrcD.entrysrcD open"]
-
- pack $listD -side top
- pack $butbrw -side top
- pack $labsrcD $labbrw -side left -fill both -expand yes
-
-
-}
-
-proc VMDecoder::_destinationD { parent } {
-
- variable var
-
- set labdstD [LabelFrame $parent.labdstD -text "Save decompressed volume file(s) as: " -side top \
- -anchor w -relief flat -borderwidth 0]
- set subdstD [$labdstD getframe]
- set listD [entry $subdstD.entrydstD -width 40 -textvariable VMDecoder::var(destinationD)]
-
- set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
- set subbrw [$labbrw getframe]
- set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \
- -relief raised -borderwidth 1 -padx 1 -pady 1 \
- -command "fileDialogD . $subdstD.entrydstD save"]
-
- pack $listD -side top
- pack $butbrw -side top
- pack $labdstD $labbrw -side left -fill both -expand yes
-}
-
-proc VMDecoder::_originalD { parent } {
-
- variable var
-
- set laborgD [LabelFrame $parent.laborgD -text "Select original file: " -side top \
- -anchor w -relief flat -borderwidth 0]
- set suborgD [$laborgD getframe]
- set listorgD [entry $suborgD.entryorgD -width 30 -textvariable VMDecoder::var(originalD)]
-
- set labbrw2 [LabelFrame $parent.labbrw2 -side top -anchor w -relief flat -borderwidth 0]
- set subbrw2 [$labbrw2 getframe]
- set butbrw2 [button $subbrw2.butbrw2 -image [Bitmap::get open] \
- -relief raised -borderwidth 1 -padx 1 -pady 1 \
- -command "fileDialogD . $suborgD.entryorgD original"]
-
- set infoD [Label $parent.infoD -relief sunken -textvariable VMDecoder::var(decodinfo) -justify left]
-
- pack $listorgD -side left -anchor n
- pack $butbrw2 -side left -anchor n
- pack $infoD -side bottom -anchor nw -pady 4 -ipadx 150 -ipady 20 -expand yes
- pack $laborgD $labbrw2 -side left -fill both
-
-
-}
-
-proc VMDecoder::_paramsD { parent } {
-
- variable var
-
- ########### DECODING #############
- set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1]
- set subcod [$labcod getframe]
-
- set frameres [frame $subcod.frameres -borderwidth 1]
- set labres [LabelEntry $frameres.labres -label "Resolutions to discard: " -labelwidth 20 -labelanchor w \
- -textvariable VMDecoder::var(resdiscard) -editable 1 \
- -helptext "Number of highest resolution levels to be discarded on each dimension" ]
- set VMDecoder::var(resdiscard) "0,0,0"
-
- set framelayer [frame $subcod.framelayer -borderwidth 1]
- set lablayer [LabelEntry $framelayer.lablayer -label "Layers to decode: " -labelwidth 20 -labelanchor w \
- -textvariable VMDecoder::var(layer) -editable 1 \
- -helptext "Maximum number of quality layers to decode" ]
- set VMDecoder::var(layer) "All"
-
- set framebe [frame $subcod.framebe -borderwidth 1]
- set chkbe [checkbutton $framebe.chkbe -text "Write decoded file with BigEndian byte order" \
- -variable VMDecoder::var(be) -onvalue 1 -offvalue 0 ]
-
- pack $labres -side left -padx 2 -anchor n
- pack $lablayer -side left -padx 2 -anchor n
- pack $chkbe -side left -padx 2 -anchor w
- pack $frameres $framelayer $framebe -side top -anchor w
-
- pack $subcod -anchor n
- pack $labcod -side left -fill both -padx 4 -expand yes
-}
-
-
-proc VMDecoder::_decode { framesrc framedst frameinfo} {
-
- variable var
-
- set sourceD [$framesrc.labsrcD.f.entrysrcD get ]
- set destinationD [$framedst.labdstD.f.entrydstD get ]
- set originD [$frameinfo.laborgD.f.entryorgD get ]
- set cond1 [string match *.pgx [string tolower $destinationD]]
- set cond2 [string match *\**.pgx [string tolower $destinationD]]
- set cond3 [string match *.bin [string tolower $destinationD]]
-
- #comprobamos datos son correctos
- if {($cond1 == 1) && ($cond2 == 0)} {
- set pgx "*.pgx"
- set pattern [string range $destinationD 0 [expr [string length $destinationD]-5]]
- set destinationD $pattern$img
- } elseif {$sourceD == ""} {
- MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error
- } elseif {$destinationD == ""} {
- MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error
- } else {
-
- #creamos datain a partir de los parametros de entrada
- #set dirJP3Ddecoder [mk_relativepath $VMDecoder::JP3Ddecoder]
- set dirJP3Ddecoder $VMDecoder::JP3Ddecoder
- set datain [concat " $dirJP3Ddecoder -i [mk_relativepath $sourceD] "]
- set datain [concat " $datain -o [mk_relativepath $destinationD] "]
- if {$originD != ""} {
- set datain [concat " $datain -O [mk_relativepath $originD] "]
- if {$cond3 == 1} {
- set img ".img"
- set pattern [string range $originD 0 [expr [string length $originD]-5]]
- set pattern $pattern$img
- if {[file exists $pattern]} {
- set datain [concat " $datain -m [mk_relativepath $pattern] "]
- } else {
- MessageDlg .msgdlg -parent . -message "Error : IMG file associated to original BIN volume file not found in same directory !" -type ok -icon info
- }
- }
- }
- if {$VMDecoder::var(resdiscard) != "0,0,0"} {
- set datain [concat " $datain -r $VMDecoder::var(resdiscard) "]
- }
- if {$VMDecoder::var(layer) != "All" && $VMDecoder::var(layer) > 0} {
- set datain [concat " $datain -l $VMDecoder::var(layer) "]
- }
- if {$VMDecoder::var(be) == 1} {
- set datain [concat " $datain -BE"]
- }
-
- set VMDecoder::var(progval) 10
- ProgressDlg .progress -parent . -title "Wait..." \
- -type infinite \
- -width 20 \
- -textvariable "Compute in progress..."\
- -variable VMDecoder::progval \
- -stop "Stop" \
- -command {destroy .progress}
-
- after 200 set VMDecoder::var(progval) 2
-
- set fp [open "| $datain " r+]
- fconfigure $fp -buffering line
- set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"]
- while {-1 != [gets $fp tmp]} {
- set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"]
- }
- close $fp
- destroy .progress
- set cond [string first "ERROR" $jp3dVM::dataout]
- set cond2 [string first "PSNR" $jp3dVM::dataout]
- set cond3 [string first "RESULT" $jp3dVM::dataout]
- if {$cond != -1} {
- MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error
- } elseif {$cond3 != -1} {
- if {$cond2 != -1} {
- set VMDecoder::var(decodinfo) [string range $jp3dVM::dataout [expr $cond2-1] end]
- }
- MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond3-1] end] -type ok -icon info
- }
- }
-}
-
-proc VMDecoder::_save { frameinfo } {
-
-}
-
diff --git a/openjpeg/src/bin/jp3d/tcltk/encoder.tcl b/openjpeg/src/bin/jp3d/tcltk/encoder.tcl
deleted file mode 100755
index 6c4a5083..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/encoder.tcl
+++ /dev/null
@@ -1,470 +0,0 @@
-
-namespace eval VMEncoder {
- variable var
- variable JP3Dencoder "../bin/bin/volume_to_jp3d"
-}
-
-proc VMEncoder::create { nb } {
-
- set frame [$nb insert end VMEncoder -text "Encoder"]
- set topf [frame $frame.topf]
- set midf [frame $frame.midf]
- set bottomf [frame $frame.bottomf]
- set srcf [TitleFrame $topf.srcf -text "Source"]
- set dstf [TitleFrame $topf.dstf -text "Destination"]
- set Tparf [TitleFrame $midf.parfT -text "Transform Parameters"]
- set Cparf [TitleFrame $midf.parfC -text "Coding Parameters"]
-
- set frame1 [$srcf getframe]
- VMEncoder::_sourceE $frame1
-
- set frame2 [$dstf getframe]
- VMEncoder::_destinationE $frame2
-
- set frame3 [$Tparf getframe]
- VMEncoder::_transformE $frame3
-
- set frame4 [$Cparf getframe]
- VMEncoder::_codingE $frame4
-
- set butE [Button $bottomf.butE -text "Encode!" \
- -command "VMEncoder::_encode $frame1 $frame2" \
- -helptext "Encoding trigger button"]
- set butR [Button $bottomf.butR -text "Restore defaults" \
- -command "VMEncoder::_reset $frame1 $frame2 $frame3 $frame4" \
- -helptext "Reset to default values"]
-
- pack $srcf $dstf -side left -fill y -padx 4 -expand yes
- pack $topf -pady 2 -fill x
-
- pack $Tparf $Cparf -side left -fill both -padx 4 -expand yes
- pack $midf -pady 2 -fill x
-
- pack $butE $butR -side left -padx 40 -pady 5 -fill y -expand yes
- pack $bottomf -pady 2 -fill x
-
- return $frame
-}
-
-proc VMEncoder::_sourceE { parent } {
-
- variable var
-
- set labsrc [LabelFrame $parent.labsrc -text "Select volume file to encode: " -side top \
- -anchor w -relief flat -borderwidth 0]
- set subsrc [$labsrc getframe]
- set list [entry $subsrc.entrysrc -width 30 -textvariable VMDecoder::var(source)]
-
- set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
- set subbrw [$labbrw getframe]
- set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \
- -relief raised -borderwidth 1 -padx 1 -pady 1 \
- -command "fileDialogE . $subsrc.entrysrc open"]
-
- pack $list -side top
- pack $butbrw -side top
- pack $labsrc $labbrw -side left -fill both -expand yes
-}
-
-proc VMEncoder::_destinationE { parent } {
-
- variable var
-
- set labdst [LabelFrame $parent.labdst -text "Save compressed volume as: " -side top \
- -anchor w -relief flat -borderwidth 0]
- set subdst [$labdst getframe]
- set list [entry $subdst.entrydst -width 30 -textvariable VMDecoder::var(destination)]
-
- set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
- set subbrw [$labbrw getframe]
- set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \
- -relief raised -borderwidth 1 -padx 1 -pady 1 \
- -command "fileDialogE . $subdst.entrydst save"]
-
- pack $list -side top
- pack $butbrw -side top
- pack $labdst $labbrw -side left -fill both -expand yes
-}
-
-proc VMEncoder::_codingE { parent } {
-
-
- ########### CODING #############
- set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1]
- set subcod [$labcod getframe]
-
- set framerate [frame $subcod.framerate -borderwidth 1]
- set labrate [LabelEntry $framerate.labrate -label "Rates: " -labelwidth 9 -labelanchor w \
- -textvariable VMEncoder::var(rate) -editable 1 \
- -helptext "Compression ratios for different layers (R1, R2, R3,...). If R=1, lossless coding" ]
- set VMEncoder::var(rate) "1"
-
- set framecblk [frame $subcod.framecblk -borderwidth 1]
- set labcblk [LabelEntry $framecblk.labcblk -label "Codeblock: " -labelwidth 9 -labelanchor w \
- -textvariable VMEncoder::var(cblksize) -editable 1 \
- -helptext "Codeblock size (X, Y, Z)" ]
- set VMEncoder::var(cblksize) "64,64,64"
-
- set frametile [frame $subcod.frametile -borderwidth 1]
- set labtile [LabelEntry $frametile.labtile -label "Tile size: " -labelwidth 9 -labelanchor w \
- -textvariable VMEncoder::var(tilesize) -editable 1 \
- -helptext "Tile size (X, Y, Z)" ]
- set VMEncoder::var(tilesize) "512,512,512"
-
- set framesop [frame $subcod.framesop -borderwidth 1]
- set chksop [checkbutton $framesop.chksop -text "Write SOP marker" \
- -variable VMEncoder::var(sop) -onvalue 1 -offvalue 0 ]
- set frameeph [frame $subcod.frameeph -borderwidth 1]
- set chkeph [checkbutton $frameeph.chkeph -text "Write EPH marker" \
- -variable VMEncoder::var(eph) -onvalue 1 -offvalue 0 ]
-
- set framepoc [frame $subcod.framepoc -borderwidth 1]
- set labpoc [label $framepoc.labpoc -text "Progression order: " ]
- set progorder [ComboBox $framepoc.progorder \
- -text {Choose a progression order} \
- -width 10 \
- -textvariable VMEncoder::var(progorder) \
- -values {"LRCP" "RLCP" "RPCL" "PCRL" "CPRL"} \
- -helptext "Progression order"]
- set VMEncoder::var(progorder) "LRCP"
-
- pack $labrate -side left -padx 2 -anchor n
- pack $labcblk -side left -padx 2 -anchor n
- pack $labpoc $progorder -side left -padx 2 -anchor w
- #pack $labtile -side left -padx 2 -anchor n
- pack $chksop -side left -padx 2 -anchor w
- pack $chkeph -side left -padx 2 -anchor w
- ########### ENTROPY CODING #############
- set labent [LabelFrame $parent.labent -text "Entropy Coding" -side top -anchor w -relief sunken -borderwidth 1]
- set subent [$labent getframe]
- foreach entval {2EB 3EB} entropy {2D_EBCOT 3D_EBCOT} {
- set rad [radiobutton $subent.$entval \
- -text $entropy \
- -variable VMEncoder::var(encoding) \
- -command "disableGR $entval $labcblk $progorder $labrate $chksop $chkeph" \
- -value $entval ]
- pack $rad -anchor w
- }
- $subent.2EB select
-
- pack $subent -padx 2 -anchor n
-
- pack $framerate $framecblk $framepoc $framesop $frameeph -side top -anchor w
- pack $subcod -anchor n
-
- pack $labent $labcod -side left -fill both -padx 4 -expand yes
-
-
-}
-
-proc VMEncoder::_transformE { parent } {
-
- variable var
-
- ########### TRANSFORM #############
- set labtrf [LabelFrame $parent.labtrf -text "Transform" -side top -anchor w -relief sunken -borderwidth 1]
- set subtrf [$labtrf getframe]
- set labres [LabelFrame $parent.labres -side top -anchor w -relief sunken -borderwidth 1]
- set subres [$labres getframe]
-
- ########### ATK #############
- set frameatk [frame $subres.frameatk -borderwidth 1]
- set labatk [label $frameatk.labatk -text "Wavelet kernel: " -anchor w]
- set atk [ComboBox $frameatk.atk \
- -textvariable VMEncoder::var(atk) \
- -width 20 \
- -text {Choose a wavelet kernel} \
- -editable false \
- -values {"R5.3" "I9.7"} ]
- set VMEncoder::var(atk) "R5.3"
- pack $labatk $atk -side left -anchor w
- ########### RESOLUTIONS #############
- set frameres1 [frame $subres.frameres1 -borderwidth 1]
- set labresolution [label $frameres1.labresol -text "Resolutions: " -anchor w ]
- set frameres2 [frame $subres.frameres2 -borderwidth 1]
- set labresX [label $frameres2.labresX -text " X" -anchor w ]
- set labresY [label $frameres2.labresY -text " Y" -anchor w ]
- set labresZ [label $frameres2.labresZ -text " Z" -anchor w ]
-
-
- set resX [SpinBox $frameres2.spinresX \
- -range {1 6 1} -textvariable VMEncoder::var(resX) \
- -helptext "Number of resolutions in X" \
- -width 3 \
- -editable false ]
- set resY [SpinBox $frameres2.spinresY \
- -range {1 6 1} -textvariable VMEncoder::var(resY) \
- -helptext "Number of resolutions in Y" \
- -width 3 \
- -editable false ]
- set resZ [SpinBox $frameres2.spinresZ \
- -range {1 6 1} -textvariable VMEncoder::var(resZ) \
- -helptext "Number of resolutions in Z" \
- -width 3 \
- -editable false \
- -state disabled ]
- set VMEncoder::var(resX) 3
- set VMEncoder::var(resY) 3
- set VMEncoder::var(resZ) 3
-
- ########### TRF #############
- foreach trfval {2DWT 3DWT} trf {2D-DWT 3D-DWT} {
- set rad [radiobutton $subtrf.$trfval -text $trf \
- -variable VMEncoder::var(transform) \
- -command "disable3RLS $trfval $atk $resX $resY $resZ"\
- -value $trfval ]
- pack $rad -anchor w
- }
- $subtrf.2DWT select
-
- pack $subtrf -side left -padx 2 -pady 4
-
- pack $labresolution -padx 2 -side left -anchor w
- pack $labresX $resX -padx 2 -side left -anchor w
- pack $labresY $resY -padx 2 -side left -anchor w
- pack $labresZ $resZ -padx 2 -side left -anchor w
-
- pack $frameres1 -side top -fill x
- pack $frameres2 $frameatk -side top -padx 2 -pady 4 -anchor n
-
- pack $subres -side left -padx 2 -pady 4
- pack $labtrf $labres -side left -fill both -padx 4 -expand yes
-}
-
-
-proc VMEncoder::_encode { framesrc framedst } {
-
- variable var
-
- set source [$framesrc.labsrc.f.entrysrc get ]
- set destination [$framedst.labdst.f.entrydst get ]
- set cond1 [string match *.pgx [string tolower $source]]
- set cond2 [string match *-*.pgx [string tolower $source]]
- set cond3 [string match *.bin [string tolower $source]]
-
- set img ".img"
- set pattern [string range $source 0 [expr [string length $source]-5]]
- set pattern $pattern$img
- set exist [file exists $pattern]
-
- #comprobamos datos son correctos
- if {($cond1 == 1) && ($cond2 == 0)} {
- MessageDlg .msgdlg -parent . -message "Info : Really want to encode an slice instead of a volume?.\n For a group of .pgx slices, name must contain a - denoting a sequential index!" -type ok -icon info
- }
-
- if {$source == ""} {
- MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error
- } elseif {$destination == ""} {
- MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error
- } elseif { ($VMEncoder::var(transform) != "3RLS") && ($VMEncoder::var(atk) == "Choose a wavelet transformation kernel") } {
- MessageDlg .msgdlg -parent . -title "Info" -message "Please choose a wavelet transformation kernel"\
- -type ok -icon warning
- } elseif {($exist == 0) && ($cond1 == 0) && ($cond3 == 1)} {
- MessageDlg .msgdlg -parent . -message "Error : IMG file associated to BIN volume file not found in same directory !" -type ok -icon info
- } else {
-
- #creamos datain a partir de los parametros de entrada
-# set dirJP3Dencoder [mk_relativepath $VMEncoder::JP3Dencoder]
- set dirJP3Dencoder $VMEncoder::JP3Dencoder
- set datain [concat " $dirJP3Dencoder -i [mk_relativepath $source] "]
- if {$cond3 == 1} {
- set datain [concat " $datain -m [mk_relativepath $pattern] "]
- }
- set datain [concat " $datain -o [mk_relativepath $destination] "]
- if {$VMEncoder::var(encoding) != "2EB"} {
- set datain [concat " $datain -C $VMEncoder::var(encoding) "]
- }
- if {$VMEncoder::var(transform) == "2DWT"} {
- set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY) "]
- } elseif {$VMEncoder::var(transform) == "3DWT"} {
- set datain [concat " $datain -n $VMEncoder::var(resX),$VMEncoder::var(resY),$VMEncoder::var(resZ) "]
- }
-
- set datain [concat " $datain -r $VMEncoder::var(rate) "]
-
- if {$VMEncoder::var(atk) == "I9.7"} {
- set datain [concat " $datain -I "]
- }
- if {$VMEncoder::var(sop) == 1} {
- set datain [concat " $datain -SOP "]
- }
- if {$VMEncoder::var(eph) == 1} {
- set datain [concat " $datain -EPH "]
- }
- if {$VMEncoder::var(progorder) != "LRCP"} {
- set datain [concat " $datain -p $VMEncoder::var(progorder) "]
- }
- if {$VMEncoder::var(cblksize) != "64,64,64"} {
- set datain [concat " $datain -b $VMEncoder::var(cblksize) "]
- }
-
-
- #Making this work would be great !!!
- set VMEncoder::var(progval) 10
- ProgressDlg .progress -parent . -title "Wait..." \
- -type infinite \
- -width 20 \
- -textvariable "Compute in progress..."\
- -variable VMEncoder::progval \
- -stop "Stop" \
- -command {destroy .progress}
- after 200 set VMEncoder::var(progval) 2
- set fp [open "| $datain " r+]
- fconfigure $fp -buffering line
- set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"]
- while {-1 != [gets $fp tmp]} {
- set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"]
- }
- destroy .progress
- set cond [string first "ERROR" $jp3dVM::dataout]
- set cond2 [string first "RESULT" $jp3dVM::dataout]
- if {$cond != -1} {
- MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error
- } elseif {$cond2 != -1} {
- MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond2+7] end] -type ok -icon info
- close $fp
- } else {
- #Must do something with this !!! [pid $fp]
- close $fp
- }
- }
-}
-
-proc VMEncoder::_reset { framesrc framedst frametrf framecod} {
-
- variable var
-
- #Restore defaults values
- set VMEncoder::var(transform) 2DWT
- set VMEncoder::var(encoding) 2EB
- set VMEncoder::var(atk) "R5.3"
- set VMEncoder::var(progorder) "LRCP"
- set atk $frametrf.labres.f.frameatk.atk
- set resX $frametrf.labres.f.frameres2.spinresX
- set resY $frametrf.labres.f.frameres2.spinresY
- set resZ $frametrf.labres.f.frameres2.spinresZ
- disable3RLS 2DWT $atk $resX $resY $resZ
- set labcblk $framecod.labcod.f.framecblk.labcblk
- set progorder $framecod.labcod.f.framepoc.progorder
- set labrate $framecod.labcod.f.framerate.labrate
- set chksop $framecod.labcod.f.framesop.chksop
- set chkeph $framecod.labcod.f.frameeph.chkeph
- disableGR 3EB $labcblk $progorder $labrate $chksop $chkeph
-
- $framesrc.labsrc.f.entrysrc delete 0 end
- $framedst.labdst.f.entrydst delete 0 end
-}
-
-proc fileDialogE {w ent operation} {
-
- variable file
- variable i j
-
- if {$operation == "open"} {
- set types {
- {"Source Image Files" {.pgx .bin} }
- {"All files" *}
- }
- set file [tk_getOpenFile -filetypes $types -parent $w]
- if {[string compare $file ""]} {
- $ent delete 0 end
- $ent insert end $file
- $ent xview moveto 1
- }
- } else {
- set types {
- {"JP3D Files" {.jp3d} }
- {"JPEG2000 Files" {.j2k} }
- {"All files" *}
- }
- set file [tk_getSaveFile -filetypes $types -parent $w \
- -initialfile Untitled -defaultextension .jp3d]
- if {[string compare $file ""]} {
- $ent delete 0 end
- $ent insert end $file
- $ent xview moveto 1
- }
- }
-}
-
-proc mk_relativepath {abspath} {
-
- set mydir [split [string trimleft [pwd] {/}] {/}]
- set abspathcomps [split [string trimleft $abspath {/}] {/}]
-
- set i 0
- while {$i<[llength $mydir]} {
- if {![string compare [lindex $abspathcomps $i] [lindex $mydir $i]]} {
- incr i
- } else {
- break
- }
- }
- set h [expr [llength $mydir]-$i]
- set j [expr [llength $abspathcomps]-$i]
-
- if {!$h} {
- set relpath "./"
- } else {
- set relpath ""
- while { $h > 0 } {
- set relpath "../$relpath"
- incr h -1
- }
- }
-
- set h [llength $abspathcomps]
- while { $h > $i } {
- set relpath [concat $relpath[lindex $abspathcomps [expr [llength $abspathcomps]-$j]]/]
- incr h -1
- incr j -1
- }
- return [string trim $relpath {/}]
-}
-
-proc disable3RLS {flag atk resX resY resZ} {
-
- if {$flag == "3RLS"} {
- $atk configure -state disabled
- $resX configure -state disabled
- $resY configure -state disabled
- $resZ configure -state disabled
- } elseif {$flag == "2DWT"} {
- $atk configure -state normal
- $resX configure -state normal
- $resY configure -state normal
- $resZ configure -state disabled
- } elseif {$flag == "3DWT"} {
- $atk configure -state normal
- $resX configure -state normal
- $resY configure -state normal
- $resZ configure -state normal
- }
-}
-
-proc disableGR {flag labcblk progorder labrate chksop chkeph} {
-
- if {$flag == "2EB"} {
- $labcblk configure -state normal
- $progorder configure -state normal
- $labrate configure -state normal
- $chksop configure -state normal
- $chkeph configure -state normal
- set VMEncoder::var(cblksize) "64,64,64"
- set VMEncoder::var(tilesize) "512,512,512"
- } elseif {$flag == "3EB"} {
- $labcblk configure -state normal
- $progorder configure -state normal
- $labrate configure -state normal
- $chksop configure -state normal
- $chkeph configure -state normal
- set VMEncoder::var(cblksize) "64,64,64"
- set VMEncoder::var(tilesize) "512,512,512"
- } else {
- $labcblk configure -state disabled
- $progorder configure -state disabled
- $labrate configure -state disabled
- $chksop configure -state disabled
- $chkeph configure -state disabled
- }
-}
diff --git a/openjpeg/src/bin/jp3d/tcltk/logoLPI.gif b/openjpeg/src/bin/jp3d/tcltk/logoLPI.gif
deleted file mode 100755
index df795150..00000000
--- a/openjpeg/src/bin/jp3d/tcltk/logoLPI.gif
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/jp3d/windirent.h b/openjpeg/src/bin/jp3d/windirent.h
deleted file mode 100644
index 4b1d9ff1..00000000
--- a/openjpeg/src/bin/jp3d/windirent.h
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * uce-dirent.h - operating system independent dirent implementation
- *
- * Copyright (C) 1998-2002 Toni Ronkko
- *
- * 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 TONI RONKKO 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.
- *
- *
- * May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
- *
- * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
- *
- * $Log: uce-dirent.h,v $
- * Revision 1.7 2002/05/13 10:48:35 tr
- * embedded some source code directly to the header so that no source
- * modules need to be included in the MS Visual C project using the
- * interface, removed all the dependencies to other headers of the `uce'
- * library so that the header can be made public
- *
- * Revision 1.6 2002/04/12 16:22:04 tr
- * Unified Compiling Environment (UCE) replaced `std' library
- *
- * Revision 1.5 2001/07/20 16:33:40 tr
- * moved to `std' library and re-named defines accordingly
- *
- * Revision 1.4 2001/07/10 16:47:18 tronkko
- * revised comments
- *
- * Revision 1.3 2001/01/11 13:16:43 tr
- * using ``uce-machine.h'' for finding out defines such as `FREEBSD'
- *
- * Revision 1.2 2000/10/08 16:00:41 tr
- * copy of FreeBSD man page
- *
- * Revision 1.1 2000/07/10 05:53:16 tr
- * Initial revision
- *
- * Revision 1.2 1998/07/19 18:29:14 tr
- * Added error reporting capabilities and some asserts.
- *
- * Revision 1.1 1998/07/04 16:27:51 tr
- * Initial revision
- *
- *
- * MSVC 1.0 scans automatic dependencies incorrectly when your project
- * contains this very header. The problem is that MSVC cannot handle
- * include directives inside #if..#endif block those are never entered.
- * Since this header ought to compile in many different operating systems,
- * there had to be several conditional blocks that are compiled only in
- * operating systems for what they were designed for. MSVC 1.0 cannot
- * handle inclusion of sys/dir.h in a part that is compiled only in Apollo
- * operating system. To fix the problem you need to insert DIR.H into
- * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
- * Consult manuals for more informaton about the problem.
- *
- * Since many UNIX systems have dirent.h we assume to have one also.
- * However, if your UNIX system does not have dirent.h you can download one
- * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
- * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
- * sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H,
- * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
- * HAVE_SYS_NDIR_H according to the files found.
- */
-#ifndef DIRENT_H
-#define DIRENT_H
-#define DIRENT_H_INCLUDED
-
-/* find out platform */
-#if defined(MSDOS) /* MS-DOS */
-#elif defined(__MSDOS__) /* Turbo C/Borland */
-# define MSDOS
-#elif defined(__DOS__) /* Watcom */
-# define MSDOS
-#endif
-
-#if defined(WIN32) /* MS-Windows */
-#elif defined(__NT__) /* Watcom */
-# define WIN32
-#elif defined(_WIN32) /* Microsoft */
-# define WIN32
-#elif defined(__WIN32__) /* Borland */
-# define WIN32
-#endif
-
-/*
- * See what kind of dirent interface we have unless autoconf has already
- * determinated that.
- */
-#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
-# if defined(_MSC_VER) /* Microsoft C/C++ */
-/* no dirent.h */
-# elif defined(__MINGW32__) /* MinGW */
-/* no dirent.h */
-# elif defined(__BORLANDC__) /* Borland C/C++ */
-# define HAVE_DIRENT_H
-# define VOID_CLOSEDIR
-# elif defined(__TURBOC__) /* Borland Turbo C */
-/* no dirent.h */
-# elif defined(__WATCOMC__) /* Watcom C/C++ */
-# define HAVE_DIRECT_H
-# elif defined(__apollo) /* Apollo */
-# define HAVE_SYS_DIR_H
-# elif defined(__hpux) /* HP-UX */
-# define HAVE_DIRENT_H
-# elif defined(__alpha) || defined(__alpha__) /* Alpha OSF1 */
-# error "not implemented"
-# elif defined(__sgi) /* Silicon Graphics */
-# define HAVE_DIRENT_H
-# elif defined(sun) || defined(_sun) /* Sun Solaris */
-# define HAVE_DIRENT_H
-# elif defined(__FreeBSD__) /* FreeBSD */
-# define HAVE_DIRENT_H
-# elif defined(__linux__) /* Linux */
-# define HAVE_DIRENT_H
-# elif defined(__GNUC__) /* GNU C/C++ */
-# define HAVE_DIRENT_H
-# else
-# error "not implemented"
-# endif
-#endif
-
-/* include proper interface headers */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# ifdef FREEBSD
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-# else
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-# endif
-
-#elif defined(HAVE_NDIR_H)
-# include <ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIRECT_H)
-# include <direct.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIR_H)
-# include <dir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_DIR_H)
-# include <sys/types.h>
-# include <sys/dir.h>
-# ifndef dirent
-# define dirent direct
-# endif
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(MSDOS) || defined(WIN32)
-
-/* figure out type of underlaying directory interface to be used */
-# if defined(WIN32)
-# define DIRENT_WIN32_INTERFACE
-# elif defined(MSDOS)
-# define DIRENT_MSDOS_INTERFACE
-# else
-# error "missing native dirent interface"
-# endif
-
-/*** WIN32 specifics ***/
-# if defined(DIRENT_WIN32_INTERFACE)
-# include <windows.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (MAX_PATH)
-# endif
-
-
-/*** MS-DOS specifics ***/
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# include <dos.h>
-
-/* Borland defines file length macros in dir.h */
-# if defined(__BORLANDC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# if !defined(_find_t)
-# define _find_t find_t
-# endif
-
-/* Turbo C defines ffblk structure in dir.h */
-# elif defined(__TURBOC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# define DIRENT_USE_FFBLK
-
-/* MSVC */
-# elif defined(_MSC_VER)
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (12)
-# endif
-
-/* Watcom */
-# elif defined(__WATCOMC__)
-# if !defined(DIRENT_MAXNAMLEN)
-# if defined(__OS2__) || defined(__NT__)
-# define DIRENT_MAXNAMLEN (255)
-# else
-# define DIRENT_MAXNAMLEN (12)
-# endif
-# endif
-
-# endif
-# endif
-
-/*** generic MS-DOS and MS-Windows stuff ***/
-# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
-# define NAME_MAX DIRENT_MAXNAMLEN
-# endif
-# if NAME_MAX < DIRENT_MAXNAMLEN
-# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
-# endif
-
-
-/*
- * Substitute for real dirent structure. Note that `d_name' field is a
- * true character array although we have it copied in the implementation
- * dependent data. We could save some memory if we had declared `d_name'
- * as a pointer referring the name within implementation dependent data.
- * We have not done that since some code may rely on sizeof(d_name) to be
- * something other than four. Besides, directory entries are typically so
- * small that it takes virtually no time to copy them from place to place.
- */
-typedef struct dirent {
- char d_name[NAME_MAX + 1];
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/
- WIN32_FIND_DATA data;
-# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/
-# if defined(DIRENT_USE_FFBLK)
- struct ffblk data;
-# else
- struct _find_t data;
-# endif
-# endif
-} dirent;
-
-/* DIR substitute structure containing directory name. The name is
- * essential for the operation of ``rewinndir'' function. */
-typedef struct DIR {
- char *dirname; /* directory being scanned */
- dirent current; /* current entry */
- int dirent_filled; /* is current un-processed? */
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE)
- HANDLE search_handle;
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# endif
-} DIR;
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* supply prototypes for dirent functions */
-static DIR *opendir(const char *dirname);
-static struct dirent *readdir(DIR *dirp);
-static int closedir(DIR *dirp);
-static void rewinddir(DIR *dirp);
-
-/*
- * Implement dirent interface as static functions so that the user does not
- * need to change his project in any way to use dirent function. With this
- * it is sufficient to include this very header from source modules using
- * dirent functions and the functions will be pulled in automatically.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-/* use ffblk instead of _find_t if requested */
-#if defined(DIRENT_USE_FFBLK)
-# define _A_ARCH (FA_ARCH)
-# define _A_HIDDEN (FA_HIDDEN)
-# define _A_NORMAL (0)
-# define _A_RDONLY (FA_RDONLY)
-# define _A_SUBDIR (FA_DIREC)
-# define _A_SYSTEM (FA_SYSTEM)
-# define _A_VOLID (FA_LABEL)
-# define _dos_findnext(dest) findnext(dest)
-# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
-#endif
-
-static int _initdir(DIR *p);
-static const char *_getdirname(const struct dirent *dp);
-static void _setdirname(struct DIR *dirp);
-
-/*
- * <function name="opendir">
- * <intro>open directory stream for reading
- * <syntax>DIR *opendir (const char *dirname);
- *
- * <desc>Open named directory stream for read and return pointer to the
- * internal working area that is used for retrieving individual directory
- * entries. The internal working area has no fields of your interest.
- *
- * <ret>Returns a pointer to the internal working area or NULL in case the
- * directory stream could not be opened. Global `errno' variable will set
- * in case of error as follows:
- *
- * <table>
- * [EACESS |Permission denied.
- * [EMFILE |Too many open files used by the process.
- * [ENFILE |Too many open files in system.
- * [ENOENT |Directory does not exist.
- * [ENOMEM |Insufficient memory.
- * [ENOTDIR |dirname does not refer to directory. This value is not
- * reliable on MS-DOS and MS-Windows platforms. Many
- * implementations return ENOENT even when the name refers to a
- * file.]
- * </table>
- * </function>
- */
-static DIR *opendir(const char *dirname)
-{
- DIR *dirp;
- assert(dirname != NULL);
-
- dirp = (DIR*)malloc(sizeof(struct DIR));
- if (dirp != NULL) {
- char *p;
-
- /* allocate room for directory name */
- dirp->dirname = (char*) malloc(strlen(dirname) + 1 + strlen("\\*.*"));
- if (dirp->dirname == NULL) {
- /* failed to duplicate directory name. errno set by malloc() */
- free(dirp);
- return NULL;
- }
- /* Copy directory name while appending directory separator and "*.*".
- * Directory separator is not appended if the name already ends with
- * drive or directory separator. Directory separator is assumed to be
- * '/' or '\' and drive separator is assumed to be ':'. */
- strcpy(dirp->dirname, dirname);
- p = strchr(dirp->dirname, '\0');
- if (dirp->dirname < p &&
- *(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':') {
- strcpy(p++, "\\");
- }
-# ifdef DIRENT_WIN32_INTERFACE
- strcpy(p, "*"); /*scan files with and without extension in win32*/
-# else
- strcpy(p, "*.*"); /*scan files with and without extension in DOS*/
-# endif
-
- /* open stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed */
- free(dirp->dirname);
- free(dirp);
- return NULL;
- }
- }
- return dirp;
-}
-
-
-/*
- * <function name="readdir">
- * <intro>read a directory entry
- * <syntax>struct dirent *readdir (DIR *dirp);
- *
- * <desc>Read individual directory entry and return pointer to a structure
- * containing the name of the entry. Individual directory entries returned
- * include normal files, sub-directories, pseudo-directories "." and ".."
- * and also volume labels, hidden files and system files in MS-DOS and
- * MS-Windows. You might want to use stat(2) function to determinate which
- * one are you dealing with. Many dirent implementations already contain
- * equivalent information in dirent structure but you cannot depend on
- * this.
- *
- * The dirent structure contains several system dependent fields that
- * generally have no interest to you. The only interesting one is char
- * d_name[] that is also portable across different systems. The d_name
- * field contains the name of the directory entry without leading path.
- * While d_name is portable across different systems the actual storage
- * capacity of d_name varies from system to system and there is no portable
- * way to find out it at compile time as different systems define the
- * capacity of d_name with different macros and some systems do not define
- * capacity at all (besides actual declaration of the field). If you really
- * need to find out storage capacity of d_name then you might want to try
- * NAME_MAX macro. The NAME_MAX is defined in POSIX standard although
- * there are many MS-DOS and MS-Windows implementations those do not define
- * it. There are also systems that declare d_name as "char d_name[1]" and
- * then allocate suitable amount of memory at run-time. Thanks to Alain
- * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
- *
- * This all leads to the fact that it is difficult to allocate space
- * for the directory names when the very same program is being compiled on
- * number of operating systems. Therefore I suggest that you always
- * allocate space for directory names dynamically.
- *
- * <ret>
- * Returns a pointer to a structure containing name of the directory entry
- * in `d_name' field or NULL if there was an error. In case of an error the
- * global `errno' variable will set as follows:
- *
- * <table>
- * [EBADF |dir parameter refers to an invalid directory stream. This value
- * is not set reliably on all implementations.]
- * </table>
- * </function>
- */
-static struct dirent *
-readdir(DIR *dirp)
-{
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return NULL;
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* directory stream was opened/rewound incorrectly or it ended normally */
- errno = EBADF;
- return NULL;
- }
-#endif
-
- if (dirp->dirent_filled != 0) {
- /*
- * Directory entry has already been retrieved and there is no need to
- * retrieve a new one. Directory entry will be retrieved in advance
- * when the user calls readdir function for the first time. This is so
- * because real dirent has separate functions for opening and reading
- * the stream whereas Win32 and DOS dirents open the stream
- * automatically when we retrieve the first file. Therefore, we have to
- * save the first file when opening the stream and later we have to
- * return the saved entry when the user tries to read the first entry.
- */
- dirp->dirent_filled = 0;
- } else {
- /* fill in entry and return that */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (FindNextFile(dirp->search_handle, &dirp->current.data) == FALSE) {
- /* Last file has been processed or an error occurred */
- FindClose(dirp->search_handle);
- dirp->search_handle = INVALID_HANDLE_VALUE;
- errno = ENOENT;
- return NULL;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findnext(&dirp->current.data) != 0) {
- /* _dos_findnext and findnext will set errno to ENOENT when no
- * more entries could be retrieved. */
- return NULL;
- }
-# endif
-
- _setdirname(dirp);
- assert(dirp->dirent_filled == 0);
- }
- return &dirp->current;
-}
-
-
-/*
- * <function name="closedir">
- * <intro>close directory stream.
- * <syntax>int closedir (DIR *dirp);
- *
- * <desc>Close directory stream opened by the `opendir' function. Close of
- * directory stream invalidates the DIR structure as well as previously read
- * dirent entry.
- *
- * <ret>The function typically returns 0 on success and -1 on failure but
- * the function may be declared to return void on same systems. At least
- * Borland C/C++ and some UNIX implementations use void as a return type.
- * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
- * known to return nothing. The very same definition is made by the GNU
- * autoconf if you happen to use it.
- *
- * The global `errno' variable will set to EBADF in case of error.
- * </function>
- */
-static int
-closedir(DIR *dirp)
-{
- int retcode = 0;
-
- /* make sure that dirp points to legal structure */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return -1;
- }
-
- /* free directory name and search handles */
- if (dirp->dirname != NULL) {
- free(dirp->dirname);
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- retcode = -1;
- errno = EBADF;
- }
- }
-#endif
-
- /* clear dirp structure to make sure that it cannot be used anymore*/
- memset(dirp, 0, sizeof(*dirp));
-# if defined(DIRENT_WIN32_INTERFACE)
- dirp->search_handle = INVALID_HANDLE_VALUE;
-# endif
-
- free(dirp);
- return retcode;
-}
-
-
-/*
- * <function name="rewinddir">
- * <intro>rewind directory stream to the beginning
- * <syntax>void rewinddir (DIR *dirp);
- *
- * <desc>Rewind directory stream to the beginning so that the next call of
- * readdir() returns the very first directory entry again. However, note
- * that next call of readdir() may not return the same directory entry as it
- * did in first time. The directory stream may have been affected by newly
- * created files.
- *
- * Almost every dirent implementation ensure that rewinddir will update
- * the directory stream to reflect any changes made to the directory entries
- * since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on
- * this if your program depends on the feature. I know at least one dirent
- * implementation where you are required to close and re-open the stream to
- * see the changes.
- *
- * <ret>Returns nothing. If something went wrong while rewinding, you will
- * notice it later when you try to retrieve the first directory entry.
- */
-static void
-rewinddir(DIR *dirp)
-{
- /* make sure that dirp is legal */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return;
- }
- assert(dirp->dirname != NULL);
-
- /* close previous stream */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- errno = EBADF;
- }
- }
-#endif
-
- /* re-open previous stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed but we cannot deal with error. User will notice
- * error later when she tries to retrieve first directory enty. */
- /*EMPTY*/;
- }
-}
-
-
-/*
- * Open native directory stream object and retrieve first file.
- * Be sure to close previous stream before opening new one.
- */
-static int
-_initdir(DIR *dirp)
-{
- assert(dirp != NULL);
- assert(dirp->dirname != NULL);
- dirp->dirent_filled = 0;
-
-# if defined(DIRENT_WIN32_INTERFACE)
- /* Open stream and retrieve first file */
- dirp->search_handle = FindFirstFile(dirp->dirname, &dirp->current.data);
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* something went wrong but we don't know what. GetLastError() could
- * give us more information about the error, but then we should map
- * the error code into errno. */
- errno = ENOENT;
- return 0;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findfirst(dirp->dirname,
- _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
- &dirp->current.data) != 0) {
- /* _dos_findfirst and findfirst will set errno to ENOENT when no
- * more entries could be retrieved. */
- return 0;
- }
-# endif
-
- /* initialize DIR and it's first entry */
- _setdirname(dirp);
- dirp->dirent_filled = 1;
- return 1;
-}
-
-
-/*
- * Return implementation dependent name of the current directory entry.
- */
-static const char *
-_getdirname(const struct dirent *dp)
-{
-#if defined(DIRENT_WIN32_INTERFACE)
- return dp->data.cFileName;
-
-#elif defined(DIRENT_USE_FFBLK)
- return dp->data.ff_name;
-
-#else
- return dp->data.name;
-#endif
-}
-
-
-/*
- * Copy name of implementation dependent directory entry to the d_name field.
- */
-static void
-_setdirname(struct DIR *dirp)
-{
- /* make sure that d_name is long enough */
- assert(strlen(_getdirname(&dirp->current)) <= NAME_MAX);
-
- strncpy(dirp->current.d_name,
- _getdirname(&dirp->current),
- NAME_MAX);
- dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
-}
-
-# ifdef __cplusplus
-}
-# endif
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-
-#else
-# error "missing dirent interface"
-#endif
-
-
-#endif /*DIRENT_H*/
diff --git a/openjpeg/src/bin/jpip/CMakeLists.txt b/openjpeg/src/bin/jpip/CMakeLists.txt
deleted file mode 100644
index 301d885b..00000000
--- a/openjpeg/src/bin/jpip/CMakeLists.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-# Headers file are located here:
-include_directories(
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openjp2
- ${OPENJPEG_SOURCE_DIR}/src/bin/common # opj_getopt.h
- ${OPENJPEG_SOURCE_DIR}/src/bin/jp2 # convert.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openjpip
- ${FCGI_INCLUDE_DIRS}
-)
-
-# Tool to embed metadata into JP2 file
-add_executable(opj_jpip_addxml opj_jpip_addxml.c)
-# Install exe
-install(TARGETS opj_jpip_addxml
- EXPORT OpenJPEGTargets
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
-
-if(BUILD_JPIP_SERVER)
- set(OPJ_SERVER_SRCS
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_server.c
- )
-
- # Build executable
- add_executable(opj_server ${OPJ_SERVER_SRCS})
- target_link_libraries(opj_server ${FCGI_LIBRARIES} openjpip_server)
- set_property(
- TARGET opj_server
- APPEND PROPERTY
- COMPILE_DEFINITIONS SERVER QUIT_SIGNAL="quitJPIP"
- )
-
- # On unix you need to link to the math library:
- if(UNIX)
- target_link_libraries(opj_server m)
- endif()
-
- # Install exe
- install(TARGETS opj_server
- EXPORT OpenJPEGTargets
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
-endif()
-
-set(EXES
- opj_dec_server
- opj_jpip_transcode
- opj_jpip_test
- )
-foreach(exe ${EXES})
-add_executable(${exe} ${exe}.c)
- target_link_libraries(${exe} openjpip)
- install(TARGETS ${exe}
- EXPORT OpenJPEGTargets
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
-endforeach()
-
-# Build the two java clients:
-find_package(Java 1.5 COMPONENTS Development) # javac, jar
-
-# User can override this:
-if(NOT DEFINED JAVA_SOURCE_VERSION)
- set(JAVA_SOURCE_VERSION 1.5)
-endif()
-if(NOT DEFINED JAVA_TARGET_VERSION)
- set(JAVA_TARGET_VERSION 1.5)
-endif()
-
-# Only build the java viewer if dev is found:
-if(Java_Development_FOUND AND Java_JAVAC_EXECUTABLE)
- set(jflags $ENV{JFLAGS})
- # search for package org.apache.xerces.parsers
- find_file(APACHE_XERCES_JAR
- NAMES xerces-j2.jar xercesImpl.jar
- PATHS /usr/share/java/
- NO_DEFAULT_PATH
- )
- mark_as_advanced(APACHE_XERCES_JAR)
-
- # Decide to build the simple viewer or the xerces one:
- if(EXISTS ${APACHE_XERCES_JAR})
- configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer_xerces/dist/manifest.txt.in
- ${CMAKE_CURRENT_BINARY_DIR}/opj_viewer_xerces/dist/manifest.txt
- @ONLY
- )
- # build dep list:
- file(GLOB java2_srcs "opj_viewer_xerces/src/*.java")
-
- # Need some common files:
- list(APPEND java2_srcs
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/ImageManager.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/ImgdecClient.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/JPIPHttpClient.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/MML.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/PnmImage.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/RegimViewer.java
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/src/ResizeListener.java
- )
-
- # make sure target javac dir exists:
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/classes2)
- # Build java
- add_custom_command(
- OUTPUT ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- COMMAND ${Java_JAVAC_EXECUTABLE} ${jflags}
- -source ${JAVA_SOURCE_VERSION} -target ${JAVA_TARGET_VERSION}
- -classpath ${APACHE_XERCES_JAR}
- ${java2_srcs} -d ${CMAKE_CURRENT_BINARY_DIR}/classes2
- COMMAND ${Java_JAR_EXECUTABLE} cfm ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- ${CMAKE_CURRENT_BINARY_DIR}/opj_viewer_xerces/dist/manifest.txt
- -C ${CMAKE_CURRENT_BINARY_DIR}/classes2 .
- DEPENDS ${java2_srcs}
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer_xerces/dist/manifest.txt.in
- COMMENT "javac *.java; jar cvf -> opj_viewer_xerces.jar"
- )
-
- # name the target
- add_custom_target(OPJViewerXercesJar ALL
- DEPENDS ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- COMMENT "building opj_jpip_viewer.jar (xerces)"
- )
-
- install(FILES ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- DESTINATION ${OPENJPEG_INSTALL_SHARE_DIR} COMPONENT JavaModule
- )
- else()
- # opj_viewer (simple, no xerces)
- # build dep list:
- file(GLOB java1_srcs "opj_viewer/src/*.java")
-
- # make sure target javac dir exists:
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/classes1)
- # Build java
- add_custom_command(
- OUTPUT ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- COMMAND ${Java_JAVAC_EXECUTABLE} ${jflags}
- -source ${JAVA_SOURCE_VERSION} -target ${JAVA_TARGET_VERSION}
- ${java1_srcs} -d ${CMAKE_CURRENT_BINARY_DIR}/classes1
- COMMAND ${Java_JAR_EXECUTABLE} cfm ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/dist/manifest.txt -C
- ${CMAKE_CURRENT_BINARY_DIR}/classes1 .
- DEPENDS ${java1_srcs}
- ${CMAKE_CURRENT_SOURCE_DIR}/opj_viewer/dist/manifest.txt
- COMMENT "javac *.java; jar cvf -> opj_jpip_viewer.jar"
- )
-
- # name the target
- add_custom_target(OPJViewerJar ALL
- DEPENDS ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- COMMENT "building opj_jpip_viewer.jar (no xerces found)"
- )
-
- install(FILES ${LIBRARY_OUTPUT_PATH}/opj_jpip_viewer.jar
- DESTINATION ${OPENJPEG_INSTALL_SHARE_DIR} COMPONENT JavaModule
- )
- endif()
-else()
- message(WARNING "No java compiler found. Wont be able to build java viewer")
-endif()
diff --git a/openjpeg/src/bin/jpip/README b/openjpeg/src/bin/jpip/README
deleted file mode 100644
index 5bcb01fa..00000000
--- a/openjpeg/src/bin/jpip/README
+++ /dev/null
@@ -1,149 +0,0 @@
-========================================================================
- OpenJPIP software 2.1 ReadMe
-
-OpenJPEG:
-http://www.openjpeg.org
-
-Written by:
-Kaori Hagihara
-UCL/SST/ICTM/ELEN
-February 18 2011
-========================================================================
-
-Contents:
-1. Introduction
-2. License
-3. System requirements
-4. Implementing instructions
-5. JP2 encoding instructions
-
-
-----------
-1. Introduction
-----------
-
-OpenJPIP software is an implementation of JPEG 2000 Part9: Interactivity tools, APIs and protocols (JPIP).
-( For more info about JPIP, check the website: http://www.jpeg.org/jpeg2000/j2kpart9.html)
-The current implementation uses some results from the 2KAN project (http://www.2kan.org).
-
-Version 2.1 covers:
- - JPT-stream (Tile) and JPP-stream (Precinct) media types
- - Session, channels, cache model managements
- - JPIP over HTTP, HTTP requests and TCP return
- - Indexing JPEG 2000 files
- - Embedding XML formatted metadata
- - Region Of Interest (ROI) requests
- - Access to JP2 files with their URL
-
-----------
-2. License
-----------
-
-This software is released under the BSD license, anybody can use or modify the library, even for commercial applications.
-The only restriction is to retain the copyright in the sources or the binaries documentation.
-Neither the author, nor the university accept any responsibility for any kind of error or data loss which may occur during usage.
-
-----------
-3. System requirements
-----------
-
- - FastCGI development kit (C libraries) at server (http://www.fastcgi.com)
- - libcURL library
- - Java application launcher at client
-<Optional>
- - Xerces2 java XML parser on the client for accessing embedded image metadata (http://xerces.apache.org/xerces2-j)
-
-We tested this software with a virtual server running on the same Linux machine as the clients.
-
-----------
-4. Building instructions
-----------
-
-A Makefile is available in the same directory as this README file. Simply type 'make' and it will build all the required C-executables.
-Concerning the java-based opj_viewer, simply type 'ant' in the corresponding directory (requires 'ant' utility of course)
-
-The documentation can be build this way (requires doxygen utility):
- cd doc
- doxygen Doxyfile
-
-----------
-5. Usage
-----------
-
-Preliminary notes :
- * HTML documentation is available at http://www.openjpeg.org/jpip/doc/html
- * Example image is available at http://www.openjpeg.org/jpip/data/copenhague1.zip (20 Mb !)
-
-Webserver:
- You need a webserver running with the fastcgi module enabled and correctly configured.
- For Apache, add the following line to your /etc/apache2/mods-available/fastcgi.conf configuration file:
-
- FastCGIExternalServer /var/www/myFCGI -host localhost:3000
-
- where /var/www is your DocumentRoot.
- Please refer to 'http://www.openjpeg.org/jpip/doc/ApacheFastCGITutorial.pdf' for more details.
-
-Server:
- 1. Store JP2 files in the same directory as opj_server
-
- 2. Launch opj_server from the server terminal:
- % spawn-fcgi -f ./opj_server -p 3000 -n
-
- For shutting down JPIP server:
- %GET http://hostname/myFCGI?quitJPIP
- Notice, http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
- Requst message "quitJPIP" can be changed in Makfile, modify -DQUIT_SIGNAL=\"quitJPIP\"
-
-Client:
- 1. Launch image decoding server, and keep it alive as long as image viewers are open
- % ./opj_dec_server [portnumber (50000 by default)]
-
- You might prefer to implement this program from another directory since cache files are saved in the working directory.
- % mkdir cache
- % cd cache
- % ../opj_dec_server
-
- 2. Open image viewers (as many as needed)
- % java -jar opj_viewer.jar http://hostname/myFCGI path/filename.jp2 [hostname] [portnumber] [stateless/session] [jptstream/jppstream] [tcp/udp]
- ( The arguments
- - http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
- - path/filename.jp2 is the server local path or URL of a JP2 file
- - host name of opj_dec_server, localhost by default
- - portnumber of opj_dec_server, 50000 by default
- - request type stateless for no caching, session (default) for caching
- - return media type, JPT-stream tile based stream, or JPP-stream (default) precinct based stream
- - auxiliary return protocol, tcp or udp (udp is not implemented yet), if not given, return data is filled in http chunk
- Image viewer GUI instructions:
- Scale up request: Enlarge the window
- ROI request: Select a region by mouse click and drag, then click inside the red frame of the selected region
- <If Xerces2 is installed>
- % java -jar opj_viewer_xerces.jar http://hostname/myFCGI JP2_filename.jp2
- Annotate image with ROI information in XML metadata: Click button "Region Of Interest"
- Open a new window presenting an aligned image with a locally stored image: Click button "Image Registration" (Under Construction)
-
- 3. Quit the image decoding server through the telnet, be sure all image viewers are closed
- % telnet localhost 50000
- quit
-
-----------
-5. JP2 encoding instructions
-----------
-
-An example to encode a TIF image "copenhague1.tif" at resolution 4780x4050, 8bit/pixel, grayscale.
- % ./image_to_j2k -i copenhague1.tif -o copenhague1.jp2 -p RPCL -c [64,64] -t 640,480 -jpip -TP R
-
- options
- -jpip : embed index table 'cidx' box into the output JP2 file (obligation for JPIP)
- -TP R : partition a tile into tile parts of different resolution levels (obligation for JPT-stream)
-
-<Option>
- 3. Embed metadata into JP2 file
- % ./addXMLinJP2 copenhague1.jp2 copenhague1.xml
- Input metadata file "copenhague1.xml" looks like:
- <xmlbox>
- <roi name="island" x="1890" y="1950" w="770" h="310"/>
- <roi name="ship" x="750" y="330" w="100" h="60"/>
- <roi name="airport" x="650" y="1800" w="650" h="800"/>
- <roi name="harbor" x="4200" y="1650" w="130" h="130"/>
- <irt refimg="name1.jp2" m1="0.50" m2="-0.50" m3="0" m4="0.80" m5="-0.80" m6="0" m7="500" m8="1000" m9="0"/>
- </xmlbox>
diff --git a/openjpeg/src/bin/jpip/opj_dec_server.c b/openjpeg/src/bin/jpip/opj_dec_server.c
deleted file mode 100644
index 8a42b982..00000000
--- a/openjpeg/src/bin/jpip/opj_dec_server.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Id: opj_dec_server.c 54 2011-05-10 13:22:47Z kaori $
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- * \brief opj_dec_server is a server to decode JPT-stream and communicate locally with JPIP client, which is coded in java.
- *
- * \section impinst Implementing instructions
- * Launch opj_dec_server from a terminal in the same machine as JPIP client image viewers. \n
- * % ./opj_dec_server [portnumber]\n
- * ( portnumber=50000 by default)\n
- * Keep it alive as long as image viewers are open.\n
- *
- * To quite the opj_dec_server, send a message "quit" through the telnet.\n
- * % telnet localhost 50000\n
- * quit\n
- * Be sure all image viewers are closed.\n
- * Cache file in JPT format is stored in the working directly before it quites.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "opj_config.h"
-#include "openjpip.h"
-
-#ifdef _WIN32
-WSADATA initialisation_win32;
-#endif
-
-int main(int argc, char *argv[])
-{
-
- dec_server_record_t *server_record;
- client_t client;
- int port = 50000;
- int erreur;
- (void)erreur;
-
- if (argc > 1) {
- port = atoi(argv[1]);
- }
-
-#ifdef _WIN32
- erreur = WSAStartup(MAKEWORD(2, 2), &initialisation_win32);
- if (erreur != 0) {
- fprintf(stderr, "Erreur initialisation Winsock error : %d %d\n", erreur,
- WSAGetLastError());
- } else {
- printf("Initialisation Winsock\n");
- }
-#endif /*_WIN32*/
-
- server_record = init_dec_server(port);
-
- while ((client = accept_connection(server_record)) != -1)
- if (!handle_clientreq(client, server_record)) {
- break;
- }
-
- terminate_dec_server(&server_record);
-
-#ifdef _WIN32
- if (WSACleanup() != 0) {
- printf("\nError in WSACleanup : %d %d", erreur, WSAGetLastError());
- } else {
- printf("\nWSACleanup OK\n");
- }
-#endif
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jpip/opj_jpip_addxml.c b/openjpeg/src/bin/jpip/opj_jpip_addxml.c
deleted file mode 100644
index 22fdd05b..00000000
--- a/openjpeg/src/bin/jpip/opj_jpip_addxml.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * $Id: addXMLinJP2.c 46 2011-02-17 14:50:55Z kaori $
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- * \brief addXMLinJP2 is a program to embed metadata into JP2 file
- *
- * \section impinst Implementing instructions
- * This program takes two arguments. \n
- * -# Input/output image file in JP2 format, this JP2 file is being modified
- * -# Input XML file with metadata contents\n
- * % ./addXMLinJP2 image.jp2 metadata.xml\n
- *
- * Currently, this program does not parse XML file, and the XML file contents is directly embedded as a XML Box.\n
- * The following is an example of XML file contents specifying Region Of Interests with target names.\n
- * <xmlbox>\n
- * <roi name="island" x="1890" y="1950" w="770" h="310"/>\n
- * <roi name="ship" x="750" y="330" w="100" h="60"/>\n
- * <roi name="airport" x="650" y="1800" w="650" h="800"/>\n
- * <roi name="harbor" x="4200" y="1650" w="130" h="130"/>\n
- * </xmlbox>
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-
-/**
- * Open JP2 file with the check of JP2 header
- *
- * @param[in] filename file name string
- * @return file descriptor
- */
-FILE * open_jp2file(const char filename[]);
-
-
-/**
- * read xml file without any format check for the moment
- *
- * @param[in] filename file name string
- * @param[out] fsize file byte size
- * @return pointer to the xml file content buffer
- */
-char * read_xmlfile(const char filename[], long *fsize);
-
-int main(int argc, char *argv[])
-{
- FILE *fp;
- char *xmldata, type[] = "xml ";
- long fsize, boxsize;
-
- if (argc < 3) {
- fprintf(stderr, "USAGE: %s modifing.jp2 adding.xml\n", argv[0]);
- return -1;
- }
-
- fp = open_jp2file(argv[1]);
- if (!fp) {
- return -1;
- }
-
- xmldata = read_xmlfile(argv[2], &fsize);
- if (fsize < 0) {
- return -1;
- }
- boxsize = fsize + 8;
-
- fputc((boxsize >> 24) & 0xff, fp);
- fputc((boxsize >> 16) & 0xff, fp);
- fputc((boxsize >> 8) & 0xff, fp);
- fputc(boxsize & 0xff, fp);
- fwrite(type, 4, 1, fp);
- fwrite(xmldata, (size_t)fsize, 1, fp);
-
- free(xmldata);
- fclose(fp);
-
- return 0;
-}
-
-FILE * open_jp2file(const char filename[])
-{
- FILE *fp;
- char *data;
-
- if (!(fp = fopen(filename, "a+b"))) {
- fprintf(stderr, "Original JP2 %s not found\n", filename);
- return NULL;
- }
- /* Check resource is a JP family file. */
- if (fseek(fp, 0, SEEK_SET) == -1) {
- fclose(fp);
- fprintf(stderr, "Original JP2 %s broken (fseek error)\n", filename);
- return NULL;
- }
-
- data = (char *)malloc(12); /* size of header */
- if (fread(data, 12, 1, fp) != 1) {
- free(data);
- fclose(fp);
- fprintf(stderr, "Original JP2 %s broken (read error)\n", filename);
- return NULL;
- }
-
- if (*data || *(data + 1) || *(data + 2) ||
- *(data + 3) != 12 || strncmp(data + 4, "jP \r\n\x87\n", 8)) {
- free(data);
- fclose(fp);
- fprintf(stderr, "No JPEG 2000 Signature box in target %s\n", filename);
- return NULL;
- }
- free(data);
- return fp;
-}
-
-char * read_xmlfile(const char filename[], long *fsize)
-{
- FILE *fp;
- char *data;
-
- /* fprintf( stderr, "open %s\n", filename);*/
- if (!(fp = fopen(filename, "r"))) {
- fprintf(stderr, "XML file %s not found\n", filename);
- return NULL;
- }
-
- if (fseek(fp, 0, SEEK_END) == -1) {
- fprintf(stderr, "XML file %s broken (seek error)\n", filename);
- fclose(fp);
- return NULL;
- }
-
- if ((*fsize = ftell(fp)) == -1) {
- fprintf(stderr, "XML file %s broken (seek error)\n", filename);
- fclose(fp);
- return NULL;
- }
- assert(*fsize >= 0);
-
- if (fseek(fp, 0, SEEK_SET) == -1) {
- fprintf(stderr, "XML file %s broken (seek error)\n", filename);
- fclose(fp);
- return NULL;
- }
-
- data = (char *)malloc((size_t) * fsize);
-
- if (fread(data, (size_t)*fsize, 1, fp) != 1) {
- fprintf(stderr, "XML file %s broken (read error)\n", filename);
- free(data);
- fclose(fp);
- return NULL;
- }
-
- fclose(fp);
-
- return data;
-}
diff --git a/openjpeg/src/bin/jpip/opj_jpip_test.c b/openjpeg/src/bin/jpip/opj_jpip_test.c
deleted file mode 100644
index f86ec4a6..00000000
--- a/openjpeg/src/bin/jpip/opj_jpip_test.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id: test_index.c 46 2011-02-17 14:50:55Z kaori $
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- * \brief test_index is a program to test the index code format of a JP2 file
- *
- * \section impinst Implementing instructions
- * This program takes one argument, and print out text type index information to the terminal. \n
- * -# Input JP2 file\n
- * % ./test_index input.jp2\n
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef _WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-#include "openjpip.h"
-
-int
-main(int argc, char *argv[])
-{
- int fd;
- index_t *jp2idx;
- if (argc < 2) {
- return 1;
- }
-
- if ((fd = open(argv[1], O_RDONLY)) == -1) {
- fprintf(stderr, "Error: Target %s not found\n", argv[1]);
- return -1;
- }
-
- if (!(jp2idx = get_index_from_JP2file(fd))) {
- fprintf(stderr, "JP2 file broken\n");
- return -1;
- }
-
- output_index(jp2idx);
- destroy_index(&jp2idx);
- close(fd);
-
- return 0;
-} /* main */
diff --git a/openjpeg/src/bin/jpip/opj_jpip_transcode.c b/openjpeg/src/bin/jpip/opj_jpip_transcode.c
deleted file mode 100644
index 6cd2604d..00000000
--- a/openjpeg/src/bin/jpip/opj_jpip_transcode.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include "openjpip.h"
-
-/*! \file
- * \brief jpip_to_jp2 is a program to convert JPT- JPP- stream to JP2 file
- *
- * \section impinst Implementing instructions
- * This program takes two arguments. \n
- * -# Input JPT or JPP file
- * -# Output JP2 file\n
- * % ./jpip_to_jp2 input.jpt output.jp2
- * or
- * % ./jpip_to_jp2 input.jpp output.jp2
- */
-static int jpip_to_jp2(char *argv[])
-{
- jpip_dec_param_t *dec;
-
- dec = init_jpipdecoder(OPJ_TRUE);
-
- if (!(fread_jpip(argv[1], dec))) {
- return 1;
- }
-
- decode_jpip(dec);
-
- if (!(fwrite_jp2k(argv[2], dec))) {
- return 1;
- }
-
- /* output_log( OPJ_TRUE, OPJ_FALSE, OPJ_TRUE, dec); */
-
- destroy_jpipdecoder(&dec);
-
- return 0;
-}
-
-/*! \file
- * \brief jpip_to_j2k is a program to convert JPT- JPP- stream to J2K file
- *
- * \section impinst Implementing instructions
- * This program takes two arguments. \n
- * -# Input JPT or JPP file
- * -# Output J2K file\n
- * % ./jpip_to_j2k input.jpt output.j2k
- * or
- * % ./jpip_to_j2k input.jpp output.j2k
- */
-static int jpip_to_j2k(char *argv[])
-{
- jpip_dec_param_t *dec;
-
- dec = init_jpipdecoder(OPJ_FALSE);
-
- if (!(fread_jpip(argv[1], dec))) {
- return 1;
- }
-
- decode_jpip(dec);
-
- if (!(fwrite_jp2k(argv[2], dec))) {
- return 1;
- }
-
- /* output_log( OPJ_TRUE, OPJ_FALSE, OPJ_FALSE, dec); */
-
- destroy_jpipdecoder(&dec);
-
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- char *ext;
- if (argc < 3) {
- fprintf(stderr, "Too few arguments:\n");
- fprintf(stderr, " - input jpt or jpp file\n");
- fprintf(stderr, " - output j2k file\n");
- return 1;
- }
-
- ext = strrchr(argv[2], '.');
- if (ext) {
- /* strcasecmp ? */
- if (strcmp(ext, ".jp2") == 0) {
- return jpip_to_jp2(argv);
- }
- if (strcmp(ext, ".j2k") == 0) {
- return jpip_to_j2k(argv);
- }
- }
-
- fprintf(stderr, "Invalid file extension for output file: %s\n", argv[2]);
- return 1;
-}
diff --git a/openjpeg/src/bin/jpip/opj_server.c b/openjpeg/src/bin/jpip/opj_server.c
deleted file mode 100644
index ad0b16a9..00000000
--- a/openjpeg/src/bin/jpip/opj_server.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * $Id: opj_server.c 53 2011-05-09 16:55:39Z kaori $
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * Copyright (c) 2011, Lucian Corlaciu, GSoC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- * \brief opj_server is a JPIP server program, which supports HTTP connection, JPT-stream, session, channels, and cache model managements.
- *
- * \section req Requirements
- * FastCGI development kit (http://www.fastcgi.com).
- *
- * \section impinst Implementing instructions
- * Launch opj_server from the server terminal:\n
- * % spawn-fcgi -f ./opj_server -p 3000 -n
- *
- * Note: JP2 files are stored in the working directory of opj_server\n
- * Check README for the JP2 Encoding\n
- *
- * We tested this software with a virtual server running on the same Linux machine as the clients.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "fcgi_stdio.h"
-#include "openjpip.h"
-
-#ifndef QUIT_SIGNAL
-#define QUIT_SIGNAL "quitJPIP"
-#endif
-
-#ifdef _WIN32
-WSADATA initialisation_win32;
-#endif /*_WIN32*/
-
-int main(void)
-{
- server_record_t *server_record;
-#ifdef SERVER
- char *query_string;
-#endif
-
-#ifdef _WIN32
- int erreur = WSAStartup(MAKEWORD(2, 2), &initialisation_win32);
- if (erreur != 0) {
- fprintf(stderr, "Erreur initialisation Winsock error : %d %d\n", erreur,
- WSAGetLastError());
- } else {
- fprintf(stderr, "Initialisation Winsock\n");
- }
-#endif /*_WIN32*/
-
- server_record = init_JPIPserver(60000, 0);
-
-#ifdef SERVER
- while (FCGI_Accept() >= 0)
-#else
-
- char query_string[128];
- while (fgets(query_string, 128, stdin) && query_string[0] != '\n')
-#endif
- {
- QR_t *qr;
- OPJ_BOOL parse_status;
-
-#ifdef SERVER
- query_string = getenv("QUERY_STRING");
-#endif /*SERVER*/
-
- if (strcmp(query_string, QUIT_SIGNAL) == 0) {
- break;
- }
-
- qr = parse_querystring(query_string);
-
- parse_status = process_JPIPrequest(server_record, qr);
-
-#ifndef SERVER
- local_log(OPJ_TRUE, OPJ_TRUE, parse_status, OPJ_FALSE, qr, server_record);
-#endif
-
- if (parse_status) {
- send_responsedata(server_record, qr);
- } else {
- fprintf(FCGI_stderr, "Error: JPIP request failed\n");
- fprintf(FCGI_stdout, "\r\n");
- }
-
- end_QRprocess(server_record, &qr);
- }
-
- fprintf(FCGI_stderr, "JPIP server terminated by a client request\n");
-
- terminate_JPIPserver(&server_record);
-
-#ifdef _WIN32
- if (WSACleanup() != 0) {
- fprintf(stderr, "\nError in WSACleanup : %d %d", erreur, WSAGetLastError());
- } else {
- fprintf(stderr, "\nWSACleanup OK\n");
- }
-#endif
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/dist/manifest.txt b/openjpeg/src/bin/jpip/opj_viewer/dist/manifest.txt
deleted file mode 100644
index 537c33dd..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/dist/manifest.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: Kaori Hagihara
-Main-Class: ImageWindow
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/ImageManager.java b/openjpeg/src/bin/jpip/opj_viewer/src/ImageManager.java
deleted file mode 100644
index 2885e92f..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/ImageManager.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.Image;
-
-public class ImageManager extends JPIPHttpClient
-{
- private PnmImage pnmimage;
- private int origwidth;
- private int origheight;
- private ImgdecClient imgdecoder;
-
- public ImageManager( String uri, String host, int port)
- {
- super( uri);
- imgdecoder = new ImgdecClient( host, port);
- pnmimage = null;
- origwidth = 0;
- origheight = 0;
- }
-
- public int getOrigWidth(){
- if( origwidth == 0){
- if( cid != null || tid != null){
- java.awt.Dimension dim = imgdecoder.query_imagesize( cid, tid);
- if( dim != null){
- origwidth = dim.width;
- origheight = dim.height;
- }
- }
- else
- System.err.println("Neither cid or tid obtained before to get Original Image Dimension");
- }
- return origwidth;
- }
- public int getOrigHeight(){ return origheight;}
-
- public Image getImage( String j2kfilename, int reqfw, int reqfh, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- System.err.println();
-
- String refcid = null;
- byte[] jpipstream;
-
- // Todo: check if the cid is for the same stream type
- if( reqcnew)
- refcid = imgdecoder.query_cid( j2kfilename);
-
- if( refcid == null){
- String reftid = imgdecoder.query_tid( j2kfilename);
- if( reftid == null)
- jpipstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, reqcnew, reqaux, reqJPP, reqJPT);
- else
- jpipstream = super.requestViewWindow( j2kfilename, reftid, reqfw, reqfh, reqcnew, reqaux, reqJPP, reqJPT);
- }
- else
- jpipstream = super.requestViewWindow( reqfw, reqfh, refcid, reqcnew, reqaux, reqJPP, reqJPT);
-
- System.err.println( "decoding to PNM image");
- if((pnmimage = imgdecoder.decode_jpipstream( jpipstream, j2kfilename, tid, cid, fw, fh))!=null){
- System.err.println( " done");
- return pnmimage.createROIImage( rx, ry, rw, rh);
- }
- else{
- System.err.println( " failed");
- return null;
- }
- }
-
- public Image getImage( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh)
- {
- System.err.println();
-
- byte[] jpipstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh);
-
- System.err.println( "decoding to PNM image");
- if((pnmimage = imgdecoder.decode_jpipstream( jpipstream, tid, cid, fw, fh)) != null){
- System.err.println( " done");
- return pnmimage.createROIImage( rx, ry, rw, rh);
- }
- else{
- System.err.println( " failed");
- return null;
- }
- }
-
- public byte[] getXML()
- {
- System.err.println();
-
- byte []xmldata = null;
- byte[] jpipstream = super.requestXML();
-
- if( jpipstream != null){
- imgdecoder.send_JPIPstream( jpipstream);
-
- xmldata = imgdecoder.get_XMLstream( cid);
- }
- return xmldata;
- }
-
- public void closeChannel()
- {
- if( cid != null){
- imgdecoder.destroy_cid( cid);
- super.closeChannel();
- }
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/ImageViewer.java b/openjpeg/src/bin/jpip/opj_viewer/src/ImageViewer.java
deleted file mode 100644
index c43a5914..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/ImageViewer.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import java.awt.image.*;
-import java.awt.geom.*;
-import java.net.URL;
-import javax.swing.border.*;
-import java.util.*;
-import java.io.*;
-
-public class ImageViewer extends JPanel
-{
- private ImageManager imgmanager;
- private int vw, vh;
- private int iw, ih;
- private int selected = 0;
- private Image img;
-
- private String cmdline = new String();
- private boolean fullRefresh = false;
- private Point offset = new Point(0,0);
- private Rectangle rect = new Rectangle();
- private Rectangle roirect[] = null;
- private String roiname[] = null;
-
- public ImageViewer( String j2kfilename, ImageManager manager, boolean session, boolean jppstream, int aux)
- {
- String str;
- MML myMML;
-
- this.setSize( 170, 170);
- Dimension asz = this.getSize();
-
- vw = asz.width;
- vh = asz.height;
-
- setBackground(Color.black);
- myMML = new MML(this);
-
- imgmanager = manager;
-
- img = imgmanager.getImage( j2kfilename, vw, vh, session, aux, jppstream, !jppstream);
-
- addMouseListener(myMML);
- addMouseMotionListener(myMML);
- addComponentListener( new ResizeListener(this));
- }
-
- public Image getImage()
- {
- return img;
- }
-
- public void zoomIn()
- {
- roirect = null;
- roiname = null;
-
- double scalex = (double)vw/(double)rect.width;
- double scaley = (double)vh/(double)rect.height;
-
- int fw = (int)(imgmanager.getFw()*scalex);
- int fh = (int)(imgmanager.getFh()*scaley);
- int rx = (int)((imgmanager.getRx()+rect.x)*scalex);
- int ry = (int)((imgmanager.getRy()+rect.y)*scaley);
-
- img = imgmanager.getImage( fw, fh, rx, ry, vw, vh);
-
- rect.x = rect.y = rect.width = rect.height = 0;
-
- selected = 0;
- fullRefresh = true;
- repaint();
- }
-
- public void enlarge()
- {
- roirect = null;
- roiname = null;
-
- Dimension asz = this.getSize();
-
- vw = asz.width;
- vh = asz.height;
-
- double scalex = vw/(double)imgmanager.getRw();
- double scaley = vh/(double)imgmanager.getRh();
-
- int fw = (int)(imgmanager.getFw()*scalex);
- int fh = (int)(imgmanager.getFh()*scaley);
- int rx = (int)(imgmanager.getRx()*scalex);
- int ry = (int)(imgmanager.getRy()*scaley);
-
- img = imgmanager.getImage( fw, fh, rx, ry, vw, vh);
-
- fullRefresh = true;
- repaint();
- }
-
- public void setSelected(int state)
- {
- roirect = null;
- roiname = null;
-
- if (state != selected) {
-
- selected = state;
- repaint();
- }
- }
-
- public boolean isInsideRect(int x, int y)
- {
- return rect.contains(x - offset.x, y - offset.y);
- }
-
- public void setRGeom(int x1, int y1, int x2, int y2)
- {
- rect.x = Math.min(x1,x2) - offset.x;
- rect.y = Math.min(y1,y2) - offset.y;
- rect.width = Math.abs(x2-x1);
- rect.height = Math.abs(y2-y1);
- }
-
- // public void annotate( JP2XMLparser.ROIparams roi[])
- // {
- // int numofroi = roi.length;
-
- // roirect = new Rectangle [numofroi];
- // roiname = new String [numofroi];
-
- // double scale_x = imgmanager.getFw()/(double)imgmanager.getOrigWidth();
- // double scale_y = imgmanager.getFh()/(double)imgmanager.getOrigHeight();
- // int rx = imgmanager.getRx();
- // int ry = imgmanager.getRy();
- // int rw = imgmanager.getRw();
- // int rh = imgmanager.getRh();
-
- // for( int i=0; i<numofroi ; i++){
- // int x = (int)(roi[i].x*scale_x) - rx;
- // int y = (int)(roi[i].y*scale_y) - ry;
- // int w = (int)(roi[i].w*scale_x);
- // int h = (int)(roi[i].h*scale_y);
- // if( 0<=x && 0<=y && x+w<=rw && y+h<=rh){ // can be optimized
- // roirect[i] = new Rectangle( x, y, w, h);
- // roiname[i] = new String( roi[i].name);
- // }
- // else{
- // roirect[i] = null;
- // roiname[i] = null;
- // }
- // }
- // repaint();
- // }
-
- public boolean hasAnnotation()
- {
- if( roirect == null)
- return false;
- else
- return true;
- }
-
- public boolean isInsideROIRect(int x, int y)
- {
- for( int i=0; i<roirect.length; i++)
- if( roirect[i] != null)
- if( roirect[i].contains(x - offset.x, y - offset.y)){
- rect = roirect[i];
- return true;
- }
- return false;
- }
-
- public void paint(Graphics g)
- {
- BufferedImage bi;
- Graphics2D big;
- Graphics2D g2 = (Graphics2D) g;
-
- if (fullRefresh) {
- g2.clearRect(0, 0, vw, vh);
- fullRefresh = false;
- }
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setRenderingHint(RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_QUALITY);
-
- offset.x = 0;
- offset.y = 0;
-
- iw = img.getWidth(this);
- ih = img.getHeight(this);
-
- bi = new BufferedImage( iw, ih, BufferedImage.TYPE_INT_RGB);
- big = bi.createGraphics();
-
- big.drawImage(img, 0, 0, this);
- big.setPaint(Color.red);
- if ((rect.width > 0) && (rect.height > 0))
- big.draw(rect);
-
- if( roirect != null){
- for( int i=0; i<roirect.length; i++)
- if( roirect[i] != null){
- big.draw( roirect[i]);
- big.drawString( roiname[i], roirect[i].x+3, roirect[i].y+roirect[i].height*2/3);
- }
- }
- if (selected == 1)
- shadeExt(big, 0, 0, 0, 64);
- else if (selected == 2) {
- shadeExt(big, 0, 0, 0, 255);
- selected = 1;
- }
- g2.drawImage(bi, offset.x, offset.y, this);
- }
-
- private void shadeRect(Graphics2D g2, int r, int g, int b, int a)
- {
- g2.setPaint(new Color(r, g, b, a));
- g2.fillRect(rect.x + 1, rect.y + 1, rect.width - 1, rect.height - 1);
- }
-
- private void shadeExt(Graphics2D g2, int r, int g, int b, int a)
- {
- g2.setPaint(new Color(r, g, b, a));
- g2.fillRect(0, 0, iw, rect.y); /* _N_ */
- g2.fillRect(rect.x + rect.width + 1, rect.y,
- iw - rect.x - rect.width - 1, rect.height + 1); /* E */
- g2.fillRect(0, rect.y, rect.x, rect.height + 1); /* W */
- g2.fillRect(0, rect.y + rect.height + 1,
- iw, ih - rect.y - rect.height - 1); /* _S_ */
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/ImageWindow.java b/openjpeg/src/bin/jpip/opj_viewer/src/ImageWindow.java
deleted file mode 100644
index fbf02ea6..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/ImageWindow.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
-
-public class ImageWindow extends JFrame
-{
- private ImageViewer imgviewer;
- private ImageManager imgmanager;
-
- public ImageWindow( String uri, String j2kfilename, String host, int port, boolean session, boolean jppstream, int aux)
- {
- super( j2kfilename);
-
- imgmanager = new ImageManager( uri, host, port);
-
- imgviewer = new ImageViewer( j2kfilename, imgmanager, session, jppstream, aux);
- imgviewer.setOpaque(true); //content panes must be opaque
-
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());
- panel.add( imgviewer, BorderLayout.CENTER);
-
- setContentPane( panel);
-
- addWindowListener(new WindowMyAdapter());
- }
-
- class WindowMyAdapter extends WindowAdapter
- {
- public void windowClosing(WindowEvent arg)
- {
- imgmanager.closeChannel();
- System.exit(0);
- }
- }
-
- public static void main(String s[])
- {
- String j2kfilename, uri, host;
- boolean session, jppstream;
- int port, aux; // 0: none, 1: tcp, 2: udp
-
- if(s.length >= 2){
- uri = s[0];
- j2kfilename = s[1];
-
- if( s.length > 2)
- host = s[2];
- else
- host = "localhost";
-
- if( s.length > 3)
- port = Integer.valueOf( s[3]).intValue();
- else
- port = 50000;
-
- if( s.length > 4)
- session = !s[4].equalsIgnoreCase( "stateless");
- else
- session = true;
-
- if( s.length > 5)
- jppstream = !s[5].equalsIgnoreCase( "JPT");
- else
- jppstream = true;
-
- if( s.length > 6){
- if( s[6].equalsIgnoreCase("udp"))
- aux = 2;
- else
- aux = 1;
- }
- else
- aux = 0;
- }
- else{
- System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2 [hostname] [portnumber] [stateless/session] [JPT/JPP] [tcp/udp]");
- return;
- }
- ImageWindow frame = new ImageWindow( uri, j2kfilename, host, port, session, jppstream, aux);
-
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- //Display the window.
- frame.pack();
- frame.setSize(new Dimension(400,200));
- frame.setLocation( 0, 50);
- frame.setVisible(true);
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/ImgdecClient.java b/openjpeg/src/bin/jpip/opj_viewer/src/ImgdecClient.java
deleted file mode 100644
index f7ad8b87..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/ImgdecClient.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.io.*;
-import java.net.*;
-
-public class ImgdecClient{
-
- private String hostname;
- private int portNo;
-
- public ImgdecClient( String host, int port)
- {
- hostname = host;
- portNo = port;
- }
-
- public PnmImage decode_jpipstream( byte[] jpipstream, String tid, String cid, int fw, int fh)
- {
- if( jpipstream != null)
- send_JPIPstream( jpipstream);
- return get_PNMstream( cid, tid, fw, fh);
- }
-
- public PnmImage decode_jpipstream( byte[] jpipstream, String j2kfilename, String tid, String cid, int fw, int fh)
- {
- send_JPIPstream( jpipstream, j2kfilename, tid, cid);
- return get_PNMstream( cid, tid, fw, fh);
- }
-
- public void send_JPIPstream( byte[] jpipstream)
- {
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
-
- System.err.println("Sending " + jpipstream.length + "Data Bytes to decodingServer");
-
- os.writeBytes("JPIP-stream\n");
- os.writeBytes("version 1.2\n");
- os.writeBytes( jpipstream.length + "\n");
- os.write( jpipstream, 0, jpipstream.length);
-
- byte signal = is.readByte();
-
- if( signal == 0)
- System.err.println(" failed");
- } catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- }
-
- public void send_JPIPstream( byte[] jpipstream, String j2kfilename, String tid, String cid)
- {
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
- int length = 0;
-
- if( jpipstream != null)
- length = jpipstream.length;
-
- System.err.println("Sending " + length + "Data Bytes to decodingServer");
-
- os.writeBytes("JPIP-stream\n");
- os.writeBytes("version 1.2\n");
- os.writeBytes( j2kfilename + "\n");
- if( tid == null)
- os.writeBytes( "0\n");
- else
- os.writeBytes( tid + "\n");
- if( cid == null)
- os.writeBytes( "0\n");
- else
- os.writeBytes( cid + "\n");
- os.writeBytes( length + "\n");
- os.write( jpipstream, 0, length);
-
- byte signal = is.readByte();
-
- if( signal == 0)
- System.err.println(" failed");
- } catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- }
-
- public PnmImage get_PNMstream( String cid, String tid, int fw, int fh)
- {
- PnmImage pnmstream = null;
-
- try {
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
- byte []header = new byte[7];
-
- os.writeBytes("PNM request\n");
- if( cid != null)
- os.writeBytes( cid + "\n");
- else
- if( tid != null)
- os.writeBytes( tid + "\n");
- else
- os.writeBytes( "0\n");
- os.writeBytes( fw + "\n");
- os.writeBytes( fh + "\n");
-
- read_stream( is, header, 7);
-
- if( header[0] == 80){
- // P5: gray, P6: color
- byte magicknum = header[1];
- if( magicknum == 5 || magicknum == 6){
- int c = magicknum==6 ? 3: 1;
- int w = (header[2]&0xff)<<8 | (header[3]&0xff);
- int h = (header[4]&0xff)<<8 | (header[5]&0xff);
- int maxval = header[6]&0xff;
- int length = w*h*c;
-
- if( maxval == 255 && length != 0){
- pnmstream = new PnmImage( c, w, h);
- read_stream( is, pnmstream.get_data(), length);
- }
- else
- System.err.println("Error in get_PNMstream(), only 255 is accepted");
- }
- else
- System.err.println("Error in get_PNMstream(), wrong magick number" + header[1]);
- }
- else
- System.err.println("Error in get_PNMstream(), Not starting with P");
-
- os.close();
- is.close();
- imgdecSocket.close();
- } catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- return pnmstream;
- }
-
- public byte [] get_XMLstream( String cid)
- {
- byte []xmldata = null;
-
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
- byte []header = new byte[5];
-
- os.writeBytes("XML request\n");
- os.writeBytes( cid + "\n");
-
- read_stream( is, header, 5);
-
- if( header[0] == 88 && header[1] == 77 && header[2] == 76){
- int length = (header[3]&0xff)<<8 | (header[4]&0xff);
-
- xmldata = new byte[ length];
- read_stream( is, xmldata, length);
- }
- else
- System.err.println("Error in get_XMLstream(), not starting with XML");
- } catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- return xmldata;
- }
-
- public String query_cid( String j2kfilename)
- {
- int []retmsglabel = new int[3];
- retmsglabel[0] = 67;
- retmsglabel[1] = 73;
- retmsglabel[2] = 68;
-
- return query_id( "CID request", j2kfilename, retmsglabel);
- }
-
- public String query_tid( String j2kfilename)
- {
- int []retmsglabel = new int[3];
- retmsglabel[0] = 84;
- retmsglabel[1] = 73;
- retmsglabel[2] = 68;
-
- return query_id( "TID request", j2kfilename, retmsglabel);
- }
-
- public String query_id( String reqmsghead, String j2kfilename, int[] retmsglabel)
- {
- String id = null;
-
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
- byte []header = new byte[4];
-
- os.writeBytes( reqmsghead + "\n");
- os.writeBytes( j2kfilename + "\n");
-
- read_stream( is, header, 4);
-
- if( header[0] == retmsglabel[0] && header[1] == retmsglabel[1] && header[2] == retmsglabel[2]){
- int length = header[3]&0xff;
-
- if( length > 0){
-
- byte []iddata = new byte[ length];
- read_stream( is, iddata, length);
- id = new String( iddata);
- }
- }
- else
- System.err.println("Error in query_id("+ reqmsghead + "), wrong to start with " + header);
- }
- catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
-
- return id;
- }
-
- public java.awt.Dimension query_imagesize( String cid, String tid)
- {
- java.awt.Dimension dim = null;
-
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
- byte []header = new byte[3];
-
- os.writeBytes( "SIZ request\n");
- if( tid == null)
- os.writeBytes( "0\n");
- else
- os.writeBytes( tid + "\n");
- if( cid == null)
- os.writeBytes( "0\n");
- else
- os.writeBytes( cid + "\n");
-
- read_stream( is, header, 3);
-
- if( header[0] == 83 && header[1] == 73 && header[2] == 90){
-
- byte []data = new byte[ 3];
- read_stream( is, data, 3);
- int w = (data[0]&0xff)<<16 | (data[1]&0xff)<<8 | (data[2]&0xff);
- read_stream( is, data, 3);
- int h = (data[0]&0xff)<<16 | (data[1]&0xff)<<8 | (data[2]&0xff);
- dim = new java.awt.Dimension( w, h);
- }
- else
- System.err.println("Error in query_imagesize("+ cid + ", " + tid + "), wrong to start with " + header);
- }
- catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
-
- return dim;
- }
-
- private static void read_stream( DataInputStream is, byte []stream, int length)
- {
- int remlen = length;
- int off = 0;
-
- try{
- while( remlen > 0){
- int redlen = is.read( stream, off, remlen);
-
- if( redlen == -1){
- System.err.println(" failed to read_stream()");
- break;
- }
- off += redlen;
- remlen -= redlen;
- }
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- }
-
- public void destroy_cid( String cid)
- {
- try{
- Socket imgdecSocket = new Socket( hostname, portNo);
- DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
- DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
-
- os.writeBytes("CID destroy\n");
- os.writeBytes( cid + "\n");
-
- byte signal = is.readByte();
-
- if( signal == 0)
- System.err.println(" failed");
- } catch (UnknownHostException e) {
- System.err.println("Trying to connect to unknown host: " + e);
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/JPIPHttpClient.java b/openjpeg/src/bin/jpip/opj_viewer/src/JPIPHttpClient.java
deleted file mode 100644
index 3c71c5da..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/JPIPHttpClient.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.net.*;
-import java.io.*;
-import java.util.*;
-
-
-public class JPIPHttpClient
-{
- private String comURL;
- protected int fw, fh;
- protected int rx, ry;
- protected int rw, rh;
- protected String cid;
- protected String tid;
- private boolean JPTstream;
- private boolean JPPstream;
- private boolean aux;
- private boolean tcp; // true: tcp, false: udp
- private int port;
-
- public JPIPHttpClient( String URI)
- {
- comURL = URI + "?";
- fw = fh = -1;
- rx = ry = -1;
- rw = rh = -1;
- cid = null;
- tid = null;
- JPTstream = JPPstream = aux = false;
- port = 0;
- }
-
- public int getFw(){ return fw;}
- public int getFh(){ return fh;}
- public int getRx(){ return rx;}
- public int getRy(){ return ry;}
- public int getRw(){ return rw;}
- public int getRh(){ return rh;}
-
- public byte[] requestViewWindow( int reqfw, int reqfh)
- {
- if( cid != null)
- return requestViewWindow( reqfw, reqfh, cid);
- else
- return null;
- }
-
- public byte[] requestViewWindow( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh)
- {
- if( cid != null)
- return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid);
- else
- if( tid != null)
- return requestViewWindow( null, tid, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false, 0, false, false);
- else
- return null;
- }
-
- public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid)
- {
- return requestViewWindow( null, null, reqfw, reqfh, -1, -1, -1, -1, reqcid, false, 0, false, false);
- }
-
- public byte[] requestViewWindow( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh, String reqcid)
- {
- return requestViewWindow( null, null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, false, 0, false, false);
- }
-
- public byte[] requestViewWindow( String target, int reqfw, int reqfh)
- {
- return requestViewWindow( target, null, reqfw, reqfh, -1, -1, -1, -1, null, false, 0, false, false);
- }
-
- public byte[] requestViewWindow( String target, int reqfw, int reqfh, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- if( cid == null) // 1 channel allocation only
- return requestViewWindow( target, null, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew, reqaux, reqJPP, reqJPT);
- else
- return null;
- }
-
- public byte[] requestViewWindow( String target, String reqtid, int reqfw, int reqfh, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- if( cid == null) // 1 channel allocation only
- return requestViewWindow( target, reqtid, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew, reqaux, reqJPP, reqJPT);
- else
- return null;
- }
-
- public byte[] requestViewWindow( String target, int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh)
- {
- return requestViewWindow( target, null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false, 0, false, false);
- }
-
- public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- return requestViewWindow( null, null, reqfw, reqfh, -1, -1, -1, -1, reqcid, reqcnew, reqaux, reqJPP, reqJPT);
- }
-
- public byte[] requestViewWindow( String target,
- String reqtid,
- int reqfw, int reqfh,
- int reqrx, int reqry,
- int reqrw, int reqrh,
- String reqcid, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- if( reqtid != null)
- tid = reqtid;
-
- String urlstring = const_urlstring( target, reqtid, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, reqcnew, reqaux, reqJPP, reqJPT);
- return GETrequest( urlstring);
- }
-
- public byte[] requestXML()
- {
- String urlstring = comURL;
-
- if( cid == null)
- return null;
-
- urlstring = urlstring.concat( "cid=" + cid);
- urlstring = urlstring.concat( "&metareq=[xml_]");
-
- return GETrequest( urlstring);
- }
-
- private byte[] GETrequest( String urlstring)
- {
- URL url = null;
- HttpURLConnection urlconn = null;
- byte[] jpipstream = null;
-
- try{
- url = new URL( urlstring);
-
- System.err.println("Requesting: " + url);
-
- urlconn = (HttpURLConnection)url.openConnection();
- urlconn.setRequestMethod("GET");
- urlconn.setInstanceFollowRedirects(false);
- urlconn.connect();
-
- set_responseheader( urlconn);
-
- if( !aux){
- jpipstream = receive_httpchunk( urlconn);
- urlconn.disconnect();
- }
- else{
- urlconn.disconnect();
- jpipstream = receive_tcpaux( comURL.substring( 7, comURL.indexOf('/', 7)), port, cid);
- }
- }
- catch ( MalformedURLException e){
- e.printStackTrace();
- }
- catch ( ProtocolException e){
- e.printStackTrace();
- }
- catch( ClassCastException e){
- e.printStackTrace();
- }
- catch( NullPointerException e){
- e.printStackTrace();
- }
- catch( UnknownServiceException e){
- e.printStackTrace();
- }
- catch ( IOException e){
- e.printStackTrace();
- }
-
- return jpipstream;
- }
-
- private void set_responseheader( HttpURLConnection urlconn)
- {
- Map<String,java.util.List<String>> headers = urlconn.getHeaderFields();
- java.util.List<String> hvaluelist;
- String hvalueline;
-
- String status = headers.get(null).get(0);
-
- System.err.println( status);
- if( !status.contains("OK"))
- System.err.println( headers.get("Reason"));
-
- if(( hvaluelist = headers.get("Content-type")) == null)
- hvaluelist = headers.get("Content-Type");
- hvalueline = hvaluelist.get(0);
- System.err.println( hvalueline);
-
- if( hvalueline.endsWith("jpt-stream"))
- JPTstream = true;
- else if( hvalueline.endsWith("jpp-stream"))
- JPPstream = true;
-
- if(( hvaluelist = headers.get("JPIP-fsiz")) != null){
- hvalueline = hvaluelist.get(0);
- fw = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue();
- fh = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue();
-
- System.err.println("fw,fh: " + fw + "," + fh);
- }
-
- if(( hvaluelist = headers.get("JPIP-roff")) != null){
- hvalueline = hvaluelist.get(0);
- rx = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue();
- ry = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue();
- System.err.println("rx,ry: " + rx + "," + ry);
- }
-
- if(( hvaluelist = headers.get("JPIP-rsiz")) != null){
- hvalueline = hvaluelist.get(0);
- rw = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue();
- rh = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue();
- System.err.println("rw,rh: " + rw + "," + rh);
- }
-
- if(( hvaluelist = headers.get("JPIP-cnew")) != null){
- hvalueline = hvaluelist.get(0);
- cid = hvalueline.substring( hvalueline.indexOf('=')+1, hvalueline.indexOf(','));
-
- int idxOfcid = hvalueline.indexOf("transport")+10;
- int idxOfcid2 = hvalueline.indexOf(',', idxOfcid);
- String transport;
- if( idxOfcid2 != -1)
- transport = hvalueline.substring( idxOfcid, idxOfcid2);
- else
- transport = hvalueline.substring( idxOfcid);
-
- if( transport.matches("http-tcp")){
- aux = true;
- tcp = true;
- }
- else if( transport.matches("http-udp")){
- aux = true;
- tcp = false;
- }
- else
- aux = false;
-
- if( aux){
- idxOfcid = hvalueline.indexOf("auxport")+8;
- port = Integer.valueOf( hvalueline.substring( idxOfcid)).intValue();
- System.err.println("cid: " + cid + ", transport: " + transport + ", auxport: " + port);
- }
- else
- System.err.println("cid: " + cid + ", transport: " + transport);
- }
-
- if(( hvaluelist = headers.get("JPIP-tid")) != null){
- hvalueline = hvaluelist.get(0);
- tid = hvalueline.substring( hvalueline.indexOf('=')+1);
- System.err.println("tid: " + tid);
- }
- }
-
- private static byte[] receive_httpchunk( HttpURLConnection urlconn)
- {
- byte[] chunk = null;
- InputStream input;
-
- try{
- input = urlconn.getInputStream();
-
- if( input.available() > 0){
- ByteArrayOutputStream tmpstream = new ByteArrayOutputStream();
- byte[] buf = new byte[ 1024];
- int redlen, buflen;
-
- System.err.println("reading jpipstream...");
-
- do{
- redlen = input.read( buf);
-
- if( redlen == -1)
- break;
- tmpstream.write( buf, 0, redlen);
- }while( redlen > 0);
-
- buflen = tmpstream.size();
- chunk = tmpstream.toByteArray();
-
- buf = null;
- tmpstream = null;
-
- System.err.println("jpiplen: " + buflen);
- System.err.println(" succeeded");
- }
- else{
- System.err.println("No new jpipstream");
- }
- input.close();
- }
- catch ( IOException e){
- e.printStackTrace();
- }
-
- return chunk;
- }
-
- private static byte[] receive_tcpaux( String host, int port, String cid)
- {
- Socket jpipsocket;
- DataOutputStream os;
- DataInputStream is;
- byte []auxheader;
- byte []chunkbody = null;
- byte []stream = null;
- int chunkbodylen, streamlen, headlen = 8;
- ByteArrayOutputStream tmpstream;
-
- try{
- jpipsocket = new Socket( host, port);
- os = new DataOutputStream( jpipsocket.getOutputStream());
- is = new DataInputStream( jpipsocket.getInputStream());
- auxheader = new byte[headlen];
- tmpstream = new ByteArrayOutputStream();
-
- os.writeBytes( cid + "\r\n");
-
- do{
- read_stream( is, auxheader, headlen);
-
- chunkbodylen = ((auxheader[0]&0xff)<<8 | (auxheader[1]&0xff)) - headlen;
-
- chunkbody = new byte [ chunkbodylen];
- read_stream( is, chunkbody, chunkbodylen);
- tmpstream.write( chunkbody, 0, chunkbodylen);
-
- os.write( auxheader, 0, headlen);
- }while( !(chunkbody[chunkbodylen-3]==0x00 && ( chunkbody[chunkbodylen-2]==0x01 || chunkbody[chunkbodylen-2]== 0x02)));
-
- streamlen = tmpstream.size();
- stream = tmpstream.toByteArray();
-
- System.err.println("jpiplen: " + streamlen);
- System.err.println(" succeeded");
-
- chunkbody = null;
- tmpstream = null;
-
- os.close();
- is.close();
-
- jpipsocket.close();
- }
- catch ( IOException e){
- e.printStackTrace();
- }
-
- return stream;
- }
-
- private static void read_stream( InputStream is, byte []stream, int length)
- {
- int remlen = length;
- int off = 0;
-
- try{
- while( remlen > 0){
- int redlen = is.read( stream, off, remlen);
-
- if( redlen == -1){
- System.err.println(" failed to read_stream()");
- break;
- }
- off += redlen;
- remlen -= redlen;
- }
- } catch (IOException e) {
- System.err.println("IOException: " + e);
- }
- }
-
- private String const_urlstring( String target,
- String reqtid,
- int reqfw, int reqfh,
- int reqrx, int reqry,
- int reqrw, int reqrh,
- String reqcid, boolean reqcnew, int reqaux, boolean reqJPP, boolean reqJPT)
- {
- String urlstring = comURL;
-
- // C.7.3 Image Return Type
- // add type=jpp-stream(;ptype=ext) or type=jpt-stream;ttype=ext
-
- if( target != null){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "target=" + target);
- }
- if( reqtid != null){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "tid=" + reqtid);
- }
- if( reqfw != -1 && reqfh != -1){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "fsiz=" + reqfw + "," + reqfh);
- }
- if( reqrx != -1 && reqry != -1){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "roff=" + reqrx + "," + reqry);
- }
- if( reqrw != -1 && reqrh != -1){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "rsiz=" + reqrw + "," + reqrh);
- }
- if( reqcid != null){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "cid=" + reqcid);
- }
- if( reqcnew){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- if( reqaux == 1)
- urlstring = urlstring.concat( "cnew=http-tcp");
- else if( reqaux == 2)
- urlstring = urlstring.concat( "cnew=http-udp");
- else
- urlstring = urlstring.concat( "cnew=http");
- }
- if( reqJPP && !JPTstream){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "type=jpp-stream");
- }
- else if( reqJPT && !JPPstream){
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- urlstring = urlstring.concat( "type=jpt-stream");
- }
- else{ // remove this option later
- if( !urlstring.endsWith("?"))
- urlstring = urlstring.concat( "&");
- if( JPTstream)
- urlstring = urlstring.concat( "type=jpt-stream");
- else if( JPPstream)
- urlstring = urlstring.concat( "type=jpp-stream");
- }
-
- return urlstring;
- }
-
- public void closeChannel()
- {
- if( cid == null)
- return;
-
- try{
- URL url = new URL( comURL + "cclose=" + cid);
- System.err.println( "closing cid: " + cid);
-
- HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
- urlconn.setRequestMethod("GET");
- urlconn.setInstanceFollowRedirects(false);
- urlconn.connect();
-
- Map headers = urlconn.getHeaderFields();
-
- urlconn.disconnect();
- } catch ( MalformedURLException e){
- e.printStackTrace();
- } catch ( IOException e){
- e.printStackTrace();
- }
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/MML.java b/openjpeg/src/bin/jpip/opj_viewer/src/MML.java
deleted file mode 100644
index 45c495e2..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/MML.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.event.*;
-
-class MML implements MouseMotionListener, MouseListener
-{
- public void mouseExited(MouseEvent e) {}
- public void mouseEntered(MouseEvent e) {}
- public void mouseClicked(MouseEvent e) {}
-
- private ImageViewer iv;
- private int x1, y1, x2, y2, zf, btn;
- private boolean zoomrq;
-
- public MML(ImageViewer imageviewer)
- {
- x1 = y1 = -1;
- iv = imageviewer;
- zoomrq = false;
- zf = 0;
- }
-
- private boolean isInside(int x, int y)
- {
- x -= iv.getX();
- y -= iv.getY();
- return (x >= 0) && (x < iv.getWidth())
- && (y >= 0) && (y < iv.getHeight());
- }
-
- public void mousePressed(MouseEvent e)
- {
- btn = e.getButton();
-
- if( iv.hasAnnotation()){
- if( iv.isInsideROIRect(e.getX(), e.getY())){
- iv.zoomIn();
- System.out.println("annotation click");
- return;
- }
- }
- if (iv.isInsideRect(e.getX(), e.getY())) {
- iv.setSelected(2);
- iv.repaint();
- zoomrq = true;
- } else {
- iv.setRGeom(0, 0, 0, 0);
- iv.setSelected(0);
- iv.repaint();
- x1 = y1 = -1;
- }
- }
-
- public void mouseReleased(MouseEvent e)
- {
- if(e.getButton() == 1) {
- if (zoomrq) {
- iv.zoomIn();
- zoomrq = false;
- }
- }
- }
-
- public void mouseMoved(MouseEvent e)
- {
- }
-
- public void mouseDragged(MouseEvent e)
- {
- if (btn == 1) {
- x2 = e.getX();
- y2 = e.getY();
-
- iv.setSelected(0);
- zoomrq = false;
-
- if (isInside(x2, y2)) {
- if (x1 == -1) {
- x1 = x2;
- y1 = y2;
- } else {
- iv.setRGeom(x1, y1, x2, y2);
- iv.repaint();
- }
- }
- }
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/PnmImage.java b/openjpeg/src/bin/jpip/opj_viewer/src/PnmImage.java
deleted file mode 100644
index 9b225386..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/PnmImage.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.*;
-import java.awt.image.*;
-import java.io.*;
-import java.util.regex.*;
-
-public class PnmImage extends Component
-{
- private byte[] data = null;
- private int width = 0;
- private int height = 0;
- private int channel = 0;
-
- public PnmImage( int c, int w, int h)
- {
- channel = c;
- width = w;
- height = h;
- data = new byte [ w*h*c];
- }
-
- public PnmImage( String filename)
- {
- String str;
- Pattern pat;
- Matcher mat;
- int bytes;
- int r, offset = 0;
-
- try {
- FileInputStream fis = new FileInputStream( new File(filename));
- DataInputStream is = new DataInputStream( fis);
-
- pat = Pattern.compile("^P([56])$");
- mat = pat.matcher(str = is.readLine());
- if( !mat.matches()){
- System.out.println("PNM header format error");
- return;
- }
-
- if( (mat.group(1)).compareTo("5") == 0)
- channel = 1;
- else
- channel = 3;
-
- pat = Pattern.compile("^(\\d+) (\\d+)$");
- mat = pat.matcher(str = is.readLine());
- if( !mat.matches()){
- System.out.println("PNM header format error");
- return;
- }
- width = Integer.parseInt( mat.group(1));
- height = Integer.parseInt( mat.group(2));
-
- str = is.readLine(); // 255
-
- bytes = width*height*channel;
- data = new byte[bytes];
-
- while( bytes > 0){
- try {
- r = is.read(data, offset, bytes);
- if( r == -1){
- System.err.println(" failed to read()");
- break;
- }
- offset += r;
- bytes -= r;
- }
- catch (IOException e) { e.printStackTrace(); }
- }
- fis.close();
- } catch (IOException e) { e.printStackTrace(); }
- }
-
- public byte [] get_data(){ return data;}
- public int get_width() { return width;}
- public int get_height(){ return height;}
-
- public Image createROIImage( int rx, int ry, int rw, int rh)
- {
- int []pix = new int[ rw*rh];
-
- for( int i=0; i<rh; i++)
- for( int j=0; j<rw; j++){
- pix[i*rw+j] = 0xFF << 24; // transparency
- if( channel == 1){
- Byte lum = data[(ry+i)*width+rx+j];
- short slum;
-
- if( lum < 0)
- slum = (short)(2*128+lum);
- else
- slum = (short)lum;
-
- for( int c=0; c<3; c++){
- pix[i*rw+j] = pix[i*rw+j] | slum << (8*c);
- }
- }
- else
- for( int c=0; c<3; c++){
- Byte lum = data[ ((ry+i)*width+rx+j)*channel+(2-c)];
- short slum;
-
- if( lum < 0)
- slum = (short)(2*128+lum);
- else
- slum = (short)lum;
-
- pix[i*rw+j] = pix[i*rw+j] | slum << (8*c);
- }
- }
-
- return createImage(new MemoryImageSource( rw, rh, pix, 0, rw));
- }
-
- public Image createScaleImage( double scale)
- {
- Image src = createROIImage( 0, 0, width, height);
- ImageFilter replicate = new ReplicateScaleFilter( (int)(width*scale), (int)(height*scale));
- ImageProducer prod = new FilteredImageSource( src.getSource(), replicate);
-
- return createImage(prod);
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/RegimViewer.java b/openjpeg/src/bin/jpip/opj_viewer/src/RegimViewer.java
deleted file mode 100644
index 9bc898a1..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/RegimViewer.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.image.*;
-import java.awt.geom.AffineTransform;
-
-public class RegimViewer extends JPanel
-{
- private PnmImage refpnm;
- private int vw, vh;
- private Image refimg;
- private Image jpipImg;
- private double[] affine_matrix;
- private AffineTransform affine;
-
- public RegimViewer( String refname, double[] mat)
- {
- refpnm = new PnmImage( refname.replaceFirst("jp2", "pgm")); // decoding not realized
- affine_matrix = new double[6];
-
- affine_matrix[0] = mat[0];
- affine_matrix[1] = mat[3];
- affine_matrix[2] = mat[1];
- affine_matrix[3] = mat[4];
- affine_matrix[4] = mat[2];
- affine_matrix[5] = mat[5];
-
- affine = new AffineTransform();
-
- for( int i=0; i<3; i++){
- for( int j=0; j<3; j++)
- System.out.print( mat[i*3+j] + " ");
- System.out.println();
- }
- }
-
- public void projection( Image jpipimg, double scale)
- {
- jpipImg = jpipimg;
- refimg = refpnm.createScaleImage( scale);
- vw = refimg.getWidth(this);
- vh = refimg.getHeight(this);
- this.setSize( vw, vh);
-
- affine.setTransform( affine_matrix[0], affine_matrix[1], affine_matrix[2], affine_matrix[3], affine_matrix[4], affine_matrix[5]);
- repaint();
- }
-
- public void paint(Graphics g)
- {
- int iw, ih;
- BufferedImage bi, bi2;
- Graphics2D big, big2;
- Graphics2D g2 = (Graphics2D) g;
-
- g2.clearRect(0, 0, vw, vh);
-
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setRenderingHint(RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_QUALITY);
-
- iw = refimg.getWidth(this);
- ih = refimg.getHeight(this);
-
- bi = new BufferedImage( iw, ih, BufferedImage.TYPE_INT_RGB);
- big = bi.createGraphics();
- big.drawImage(refimg, 0, 0, this);
-
- g2.drawImage(bi, 0, 0, this);
-
- bi2 = new BufferedImage( jpipImg.getWidth(this), jpipImg.getHeight(this), BufferedImage.TYPE_INT_RGB);
- big2 = bi2.createGraphics();
- big2.drawImage( jpipImg, 0, 0, this);
-
- g2.setTransform(affine);
-
- g2.drawImage(bi2, 0, 0, this);
- }
-
- public Dimension get_imsize()
- {
- return (new Dimension( vw, vh));
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer/src/ResizeListener.java b/openjpeg/src/bin/jpip/opj_viewer/src/ResizeListener.java
deleted file mode 100644
index 150ec46a..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer/src/ResizeListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-class ResizeListener implements ComponentListener
-{
- private ImageViewer iv;
- private Dimension largest;
-
- public ResizeListener( ImageViewer _iv)
- {
- iv = _iv;
- largest = iv.getSize();
- }
-
- public void componentHidden(ComponentEvent e) {}
-
- public void componentMoved(ComponentEvent e) {}
-
- public void componentResized(ComponentEvent e) {
- Dimension cursize = iv.getSize();
- if( largest.getWidth() < cursize.getWidth() || largest.getHeight() < cursize.getHeight()){
- update_largest( cursize);
- iv.enlarge();
- }
- }
-
- private void update_largest( Dimension cursize)
- {
- if( largest.getWidth() < cursize.getWidth())
- largest.setSize( cursize.getWidth(), largest.getHeight());
- if( largest.getHeight() < cursize.getHeight())
- largest.setSize( largest.getWidth(), cursize.getHeight());
- }
-
- public void componentShown(ComponentEvent e) {}
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer_xerces/dist/manifest.txt.in b/openjpeg/src/bin/jpip/opj_viewer_xerces/dist/manifest.txt.in
deleted file mode 100644
index c7ba9f36..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer_xerces/dist/manifest.txt.in
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: Kaori Hagihara
-Main-Class: ImageWindow
-Class-Path: @APACHE_XERCES_JAR@
diff --git a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageViewer.java b/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageViewer.java
deleted file mode 100644
index 827372a8..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageViewer.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import java.awt.image.*;
-import java.awt.geom.*;
-import java.net.URL;
-import javax.swing.border.*;
-import java.util.*;
-import java.io.*;
-
-public class ImageViewer extends JPanel
-{
- private ImageManager imgmanager;
- private int vw, vh;
- private int iw, ih;
- private int selected = 0;
- private Image img;
-
- private String cmdline = new String();
- private boolean fullRefresh = false;
- private Point offset = new Point(0,0);
- private Rectangle rect = new Rectangle();
- private Rectangle roirect[] = null;
- private String roiname[] = null;
-
- public ImageViewer( String j2kfilename, ImageManager manager, boolean session, boolean jppstream, int aux)
- {
- String str;
- MML myMML;
-
- this.setSize( 170, 170);
- Dimension asz = this.getSize();
-
- vw = asz.width;
- vh = asz.height;
-
- setBackground(Color.black);
- myMML = new MML(this);
-
- imgmanager = manager;
-
- img = imgmanager.getImage( j2kfilename, vw, vh, session, aux, jppstream, !jppstream);
-
- addMouseListener(myMML);
- addMouseMotionListener(myMML);
- addComponentListener( new ResizeListener(this));
- }
-
- public Image getImage()
- {
- return img;
- }
-
- public void zoomIn()
- {
- roirect = null;
- roiname = null;
-
- double scalex = (double)vw/(double)rect.width;
- double scaley = (double)vh/(double)rect.height;
-
- int fw = (int)(imgmanager.getFw()*scalex);
- int fh = (int)(imgmanager.getFh()*scaley);
- int rx = (int)((imgmanager.getRx()+rect.x)*scalex);
- int ry = (int)((imgmanager.getRy()+rect.y)*scaley);
-
- img = imgmanager.getImage( fw, fh, rx, ry, vw, vh);
-
- rect.x = rect.y = rect.width = rect.height = 0;
-
- selected = 0;
- fullRefresh = true;
- repaint();
- }
-
- public void enlarge()
- {
- roirect = null;
- roiname = null;
-
- Dimension asz = this.getSize();
-
- vw = asz.width;
- vh = asz.height;
-
- double scalex = vw/(double)imgmanager.getRw();
- double scaley = vh/(double)imgmanager.getRh();
-
- int fw = (int)(imgmanager.getFw()*scalex);
- int fh = (int)(imgmanager.getFh()*scaley);
- int rx = (int)(imgmanager.getRx()*scalex);
- int ry = (int)(imgmanager.getRy()*scaley);
-
- img = imgmanager.getImage( fw, fh, rx, ry, vw, vh);
-
- fullRefresh = true;
- repaint();
- }
-
- public void setSelected(int state)
- {
- roirect = null;
- roiname = null;
-
- if (state != selected) {
-
- selected = state;
- repaint();
- }
- }
-
- public boolean isInsideRect(int x, int y)
- {
- return rect.contains(x - offset.x, y - offset.y);
- }
-
- public void setRGeom(int x1, int y1, int x2, int y2)
- {
- rect.x = Math.min(x1,x2) - offset.x;
- rect.y = Math.min(y1,y2) - offset.y;
- rect.width = Math.abs(x2-x1);
- rect.height = Math.abs(y2-y1);
- }
-
- public void annotate( JP2XMLparser.ROIparams roi[])
- {
- int numofroi = roi.length;
-
- roirect = new Rectangle [numofroi];
- roiname = new String [numofroi];
-
- double scale_x = imgmanager.getFw()/(double)imgmanager.getOrigWidth();
- double scale_y = imgmanager.getFh()/(double)imgmanager.getOrigHeight();
- int rx = imgmanager.getRx();
- int ry = imgmanager.getRy();
- int rw = imgmanager.getRw();
- int rh = imgmanager.getRh();
-
- for( int i=0; i<numofroi ; i++){
- int x = (int)(roi[i].x*scale_x) - rx;
- int y = (int)(roi[i].y*scale_y) - ry;
- int w = (int)(roi[i].w*scale_x);
- int h = (int)(roi[i].h*scale_y);
- if( 0<=x && 0<=y && x+w<=rw && y+h<=rh){ // can be optimized
- roirect[i] = new Rectangle( x, y, w, h);
- roiname[i] = new String( roi[i].name);
- }
- else{
- roirect[i] = null;
- roiname[i] = null;
- }
- }
- repaint();
- }
-
- public boolean hasAnnotation()
- {
- if( roirect == null)
- return false;
- else
- return true;
- }
-
- public boolean isInsideROIRect(int x, int y)
- {
- for( int i=0; i<roirect.length; i++)
- if( roirect[i] != null)
- if( roirect[i].contains(x - offset.x, y - offset.y)){
- rect = roirect[i];
- return true;
- }
- return false;
- }
-
- public void paint(Graphics g)
- {
- BufferedImage bi;
- Graphics2D big;
- Graphics2D g2 = (Graphics2D) g;
-
- if (fullRefresh) {
- g2.clearRect(0, 0, vw, vh);
- fullRefresh = false;
- }
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setRenderingHint(RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_QUALITY);
-
- offset.x = 0;
- offset.y = 0;
-
- iw = img.getWidth(this);
- ih = img.getHeight(this);
-
- bi = new BufferedImage( iw, ih, BufferedImage.TYPE_INT_RGB);
- big = bi.createGraphics();
-
- big.drawImage(img, 0, 0, this);
- big.setPaint(Color.red);
- if ((rect.width > 0) && (rect.height > 0))
- big.draw(rect);
-
- if( roirect != null){
- for( int i=0; i<roirect.length; i++)
- if( roirect[i] != null){
- big.draw( roirect[i]);
- big.drawString( roiname[i], roirect[i].x+3, roirect[i].y+roirect[i].height*2/3);
- }
- }
- if (selected == 1)
- shadeExt(big, 0, 0, 0, 64);
- else if (selected == 2) {
- shadeExt(big, 0, 0, 0, 255);
- selected = 1;
- }
- g2.drawImage(bi, offset.x, offset.y, this);
- }
-
- private void shadeRect(Graphics2D g2, int r, int g, int b, int a)
- {
- g2.setPaint(new Color(r, g, b, a));
- g2.fillRect(rect.x + 1, rect.y + 1, rect.width - 1, rect.height - 1);
- }
-
- private void shadeExt(Graphics2D g2, int r, int g, int b, int a)
- {
- g2.setPaint(new Color(r, g, b, a));
- g2.fillRect(0, 0, iw, rect.y); /* _N_ */
- g2.fillRect(rect.x + rect.width + 1, rect.y,
- iw - rect.x - rect.width - 1, rect.height + 1); /* E */
- g2.fillRect(0, rect.y, rect.x, rect.height + 1); /* W */
- g2.fillRect(0, rect.y + rect.height + 1,
- iw, ih - rect.y - rect.height - 1); /* _S_ */
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageWindow.java b/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageWindow.java
deleted file mode 100644
index fa12ddd2..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/ImageWindow.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
-
-public class ImageWindow extends JFrame
-{
- private ImageViewer imgviewer;
- private OptionPanel optpanel;
- private ImageManager imgmanager;
-
- public ImageWindow( String uri, String j2kfilename, String host, int port, boolean session, boolean jppstream, int aux)
- {
- super( j2kfilename);
-
- imgmanager = new ImageManager( uri, host, port);
-
- imgviewer = new ImageViewer( j2kfilename, imgmanager, session, jppstream, aux);
- imgviewer.setOpaque(true); //content panes must be opaque
-
- optpanel = new OptionPanel( imgmanager, imgviewer);
-
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());
- panel.add( imgviewer, BorderLayout.CENTER);
- panel.add( optpanel, BorderLayout.EAST);
-
- setContentPane( panel);
-
- addWindowListener(new WindowMyAdapter());
- }
-
- class WindowMyAdapter extends WindowAdapter
- {
- public void windowClosing(WindowEvent arg)
- {
- imgmanager.closeChannel();
- System.exit(0);
- }
- }
-
- public static void main(String s[])
- {
- String j2kfilename, uri, host;
- boolean session, jppstream;
- int port, aux; // 0: none, 1: tcp, 2: udp
-
- if(s.length >= 2){
- uri = s[0];
- j2kfilename = s[1];
-
- if( s.length > 2)
- host = s[2];
- else
- host = "localhost";
-
- if( s.length > 3)
- port = Integer.valueOf( s[3]).intValue();
- else
- port = 50000;
-
- if( s.length > 4)
- session = !s[4].equalsIgnoreCase( "stateless");
- else
- session = true;
-
- if( s.length > 5)
- jppstream = !s[5].equalsIgnoreCase( "JPT");
- else
- jppstream = true;
-
- if( s.length > 6){
- if( s[6].equalsIgnoreCase("udp"))
- aux = 2;
- else
- aux = 1;
- }
- else
- aux = 0;
- }
- else{
- System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2 [hostname] [portnumber] [stateless/session] [JPT/JPP] [tcp/udp]");
- return;
- }
- ImageWindow frame = new ImageWindow( uri, j2kfilename, host, port, session, jppstream, aux);
-
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- //Display the window.
- frame.pack();
- frame.setSize(new Dimension(400,200));
- frame.setLocation( 0, 50);
- frame.setVisible(true);
- }
-}
diff --git a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/JP2XMLparser.java b/openjpeg/src/bin/jpip/opj_viewer_xerces/src/JP2XMLparser.java
deleted file mode 100644
index e844eaa8..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/JP2XMLparser.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.ErrorHandler;
-import org.apache.xerces.parsers.DOMParser;
-import org.xml.sax.InputSource;
-import java.io.*;
-import java.lang.Integer;
-
-public class JP2XMLparser
-{
- Document document;
-
- public static class ROIparams{
- public String name = null;
- public int x = 0;
- public int y = 0;
- public int w = 0;
- public int h = 0;
- }
-
- public static class IRTparams{
- public String refimg = null;
- public double []mat = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
- }
-
- public JP2XMLparser( byte[] buf)
- {
- try{
- InputSource source = new InputSource( new ByteArrayInputStream( buf));
- DOMParser parser = new DOMParser();
- parser.setErrorHandler(new MyHandler());
- parser.parse( source);
- document = parser.getDocument();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public ROIparams [] getROIparams()
- {
- ROIparams roi[];
- NodeList elements = document.getElementsByTagName("roi");
- int elementCount = elements.getLength();
-
- roi = new ROIparams [elementCount];
-
- for( int i = 0; i < elementCount; i++) {
- Element element = (Element)elements.item(i);
-
- roi[i] = new ROIparams();
- roi[i].name = element.getAttribute( "name");
- roi[i].x = Integer.parseInt( element.getAttribute( "x")) ;
- roi[i].y = Integer.parseInt( element.getAttribute( "y")) ;
- roi[i].w = Integer.parseInt( element.getAttribute( "w")) ;
- roi[i].h = Integer.parseInt( element.getAttribute( "h")) ;
- }
- return roi;
- }
-
- public IRTparams getIRTparams()
- {
- IRTparams irt = new IRTparams();
- NodeList elements = document.getElementsByTagName("irt");
- int elementCount = elements.getLength();
-
- Element element = (Element)elements.item(0);
- irt.refimg = element.getAttribute( "refimg");
- for( int i=1; i<=9; i++)
- irt.mat[i-1] = Double.parseDouble( element.getAttribute("m" + i));
-
- return irt;
- }
-}
-
-class MyHandler implements ErrorHandler {
- public void warning(SAXParseException e) {
- System.out.println("Warning: line" + e.getLineNumber());
- System.out.println(e.getMessage());
- }
- public void error(SAXParseException e) {
- System.out.println("Error: line" + e.getLineNumber());
- System.out.println(e.getMessage());
- }
- public void fatalError(SAXParseException e) {
- System.out.println("Critical error: line" + e.getLineNumber());
- System.out.println(e.getMessage());
- }
-} \ No newline at end of file
diff --git a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/OptionPanel.java b/openjpeg/src/bin/jpip/opj_viewer_xerces/src/OptionPanel.java
deleted file mode 100644
index 23a27014..00000000
--- a/openjpeg/src/bin/jpip/opj_viewer_xerces/src/OptionPanel.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-public class OptionPanel extends JPanel implements ActionListener
-{
- private JButton roibutton;
- private JButton imregbutton;
- private ImageManager imgmanager;
- private ImageViewer iv;
- private JP2XMLparser xmlparser;
- private JFrame regimwindow;
- private RegimViewer regimgviewer;
-
- public OptionPanel( ImageManager manager, ImageViewer imgviewer)
- {
- this.setLayout(new BoxLayout( this, BoxLayout.Y_AXIS));
-
- roibutton = new JButton("Region Of Interest");
- imregbutton = new JButton("Image Registration");
-
- roibutton.setAlignmentX( Component.CENTER_ALIGNMENT);
- imregbutton.setAlignmentX( Component.CENTER_ALIGNMENT);
-
- add( roibutton);
- add( imregbutton);
- roibutton.addActionListener(this);
- imregbutton.addActionListener(this);
-
- imgmanager = manager;
- iv = imgviewer;
- xmlparser = null;
- }
-
- public void actionPerformed(ActionEvent e)
- {
- if( xmlparser == null){
- byte []xmldata = imgmanager.getXML();
- if( xmldata != null)
- xmlparser = new JP2XMLparser( xmldata);
- }
- if( e.getSource() == roibutton){
- if( xmlparser != null){
- JP2XMLparser.ROIparams roi[] = xmlparser.getROIparams();
- iv.annotate( roi);
- }
- }
- if( e.getSource() == imregbutton){
- if( xmlparser != null){
- if( regimwindow == null){
- JP2XMLparser.IRTparams irt = xmlparser.getIRTparams();
-
- regimgviewer = new RegimViewer( irt.refimg, irt.mat);
- regimgviewer.setOpaque(false);
-
- regimwindow = new JFrame("Registered Image");
- regimwindow.getContentPane().add("Center", regimgviewer);
- regimwindow.pack();
- regimwindow.setLocation( 500, 50);
- regimwindow.setVisible(true);
- }
- regimgviewer.projection( iv.getImage(), (double)imgmanager.getRw()/(double)imgmanager.getOrigWidth());
- regimwindow.setSize( regimgviewer.get_imsize());
- regimwindow.show();
- }
- }
- }
-} \ No newline at end of file
diff --git a/openjpeg/src/bin/jpwl/CMakeLists.txt b/openjpeg/src/bin/jpwl/CMakeLists.txt
deleted file mode 100644
index 5df225de..00000000
--- a/openjpeg/src/bin/jpwl/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# jpwl apps
-
-# First thing define the common source:
-set(common_SRCS
- convert.c
- index.c
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c
- )
-
-# Headers file are located here:
-include_directories(
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
- ${OPENJPEG_BINARY_DIR}/src/bin/common # opj_apps_config.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
- ${OPENJPEG_SOURCE_DIR}/src/bin/common
- ${LCMS_INCLUDE_DIRNAME}
- ${Z_INCLUDE_DIRNAME}
- ${PNG_INCLUDE_DIRNAME}
- ${TIFF_INCLUDE_DIRNAME}
- )
-
-if(WIN32)
- if(BUILD_SHARED_LIBS)
- add_definitions(-DOPJ_EXPORTS)
- else()
- add_definitions(-DOPJ_STATIC)
- endif()
-endif()
-
-add_definitions(-DOPJ_USE_LEGACY)
-foreach(exe decompress compress)
- set(jpwl_exe opj_jpwl_${exe})
- set(jp2_exe opj_${exe})
- add_executable(${jpwl_exe}
- #../jp2/${jp2_exe}.c
- ${jpwl_exe}.c
- ${common_SRCS}
- )
- set_property(
- TARGET ${jpwl_exe}
- APPEND PROPERTY COMPILE_DEFINITIONS USE_JPWL
- )
-
- target_link_libraries(${jpwl_exe} openjpwl
- ${LCMS_LIBNAME} ${PNG_LIBNAME} ${TIFF_LIBNAME})
-
- # To support universal exe:
- if(ZLIB_FOUND AND APPLE)
- target_link_libraries(${jpwl_exe} z)
- else(ZLIB_FOUND AND APPLE)
- target_link_libraries(${jpwl_exe} ${Z_LIBNAME})
- endif()
-
- if(UNIX)
- target_link_libraries(${jpwl_exe} m)
- endif()
-
- install(TARGETS ${jpwl_exe}
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
- )
-endforeach()
diff --git a/openjpeg/src/bin/jpwl/convert.c b/openjpeg/src/bin/jpwl/convert.c
deleted file mode 100644
index d0ec4bd0..00000000
--- a/openjpeg/src/bin/jpwl/convert.c
+++ /dev/null
@@ -1,3748 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "opj_apps_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#ifdef OPJ_HAVE_LIBTIFF
-#include <tiffio.h>
-#endif /* OPJ_HAVE_LIBTIFF */
-
-#ifdef OPJ_HAVE_LIBPNG
-#include <zlib.h>
-#include <png.h>
-#endif /* OPJ_HAVE_LIBPNG */
-
-#include "openjpeg.h"
-#include "convert.h"
-
-/*
- * Get logarithm of an integer and round downwards.
- *
- * log2(a)
- */
-static int int_floorlog2(int a)
-{
- int l;
- for (l = 0; a > 1; l++) {
- a >>= 1;
- }
- return l;
-}
-
-/* -->> -->> -->> -->>
-
- TGA IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-#ifdef INFORMATION_ONLY
-/* TGA header definition. */
-struct tga_header {
- unsigned char id_length; /* Image id field length */
- unsigned char colour_map_type; /* Colour map type */
- unsigned char image_type; /* Image type */
- /*
- ** Colour map specification
- */
- unsigned short colour_map_index; /* First entry index */
- unsigned short colour_map_length; /* Colour map length */
- unsigned char colour_map_entry_size; /* Colour map entry size */
- /*
- ** Image specification
- */
- unsigned short x_origin; /* x origin of image */
- unsigned short y_origin; /* u origin of image */
- unsigned short image_width; /* Image width */
- unsigned short image_height; /* Image height */
- unsigned char pixel_depth; /* Pixel depth */
- unsigned char image_desc; /* Image descriptor */
-};
-#endif /* INFORMATION_ONLY */
-
-static unsigned short get_ushort(unsigned short val)
-{
-
-#ifdef OPJ_BIG_ENDIAN
- return (((val & 0xff) << 8) + (val >> 8));
-#else
- return (val);
-#endif
-
-}
-
-#define TGA_HEADER_SIZE 18
-
-static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
- unsigned int *width, unsigned int *height, int *flip_image)
-{
- int palette_size;
- unsigned char *tga ;
- unsigned char id_len, cmap_type, image_type;
- unsigned char pixel_depth, image_desc;
- unsigned short cmap_index, cmap_len, cmap_entry_size;
- unsigned short x_origin, y_origin, image_w, image_h;
-
- if (!bits_per_pixel || !width || !height || !flip_image) {
- return 0;
- }
- tga = (unsigned char*)malloc(18);
-
- if (fread(tga, TGA_HEADER_SIZE, 1, fp) != 1) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- free(tga);
- return 0 ;
- }
- id_len = (unsigned char)tga[0];
- cmap_type = (unsigned char)tga[1];
- image_type = (unsigned char)tga[2];
- cmap_index = get_ushort(*(unsigned short*)(&tga[3]));
- cmap_len = get_ushort(*(unsigned short*)(&tga[5]));
- cmap_entry_size = (unsigned char)tga[7];
-
-
- x_origin = get_ushort(*(unsigned short*)(&tga[8]));
- y_origin = get_ushort(*(unsigned short*)(&tga[10]));
- image_w = get_ushort(*(unsigned short*)(&tga[12]));
- image_h = get_ushort(*(unsigned short*)(&tga[14]));
- pixel_depth = (unsigned char)tga[16];
- image_desc = (unsigned char)tga[17];
-
- free(tga);
-
- *bits_per_pixel = (unsigned int)pixel_depth;
- *width = (unsigned int)image_w;
- *height = (unsigned int)image_h;
-
- /* Ignore tga identifier, if present ... */
- if (id_len) {
- unsigned char *id = (unsigned char *) malloc(id_len);
- if (!fread(id, id_len, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- free(id);
- return 0 ;
- }
- free(id);
- }
-
- /* Test for compressed formats ... not yet supported ...
- // Note :- 9 - RLE encoded palettized.
- // 10 - RLE encoded RGB. */
- if (image_type > 8) {
- fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
- return 0 ;
- }
-
- *flip_image = !(image_desc & 32);
-
- /* Palettized formats are not yet supported, skip over the palette, if present ... */
- palette_size = cmap_len * (cmap_entry_size / 8);
-
- if (palette_size > 0) {
- fprintf(stderr, "File contains a palette - not yet supported.");
- fseek(fp, palette_size, SEEK_CUR);
- }
- return 1;
-}
-
-#ifdef OPJ_BIG_ENDIAN
-
-static inline uint16_t swap16(uint16_t x)
-{
- return (((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
-}
-
-#endif
-
-static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
- opj_bool flip_image)
-{
- unsigned short image_w, image_h, us0;
- unsigned char uc0, image_type;
- unsigned char pixel_depth, image_desc;
-
- if (!bits_per_pixel || !width || !height) {
- return 0;
- }
-
- pixel_depth = 0;
-
- if (bits_per_pixel < 256) {
- pixel_depth = (unsigned char)bits_per_pixel;
- } else {
- fprintf(stderr, "ERROR: Wrong bits per pixel inside tga_header");
- return 0;
- }
- uc0 = 0;
-
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* id_length */
- }
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* colour_map_type */
- }
-
- image_type = 2; /* Uncompressed. */
- if (fwrite(&image_type, 1, 1, fp) != 1) {
- goto fails;
- }
-
- us0 = 0;
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* colour_map_index */
- }
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* colour_map_length */
- }
- if (fwrite(&uc0, 1, 1, fp) != 1) {
- goto fails; /* colour_map_entry_size */
- }
-
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* x_origin */
- }
- if (fwrite(&us0, 2, 1, fp) != 1) {
- goto fails; /* y_origin */
- }
-
- image_w = (unsigned short)width;
- image_h = (unsigned short) height;
-
-#ifndef OPJ_BIG_ENDIAN
- if (fwrite(&image_w, 2, 1, fp) != 1) {
- goto fails;
- }
- if (fwrite(&image_h, 2, 1, fp) != 1) {
- goto fails;
- }
-#else
- image_w = swap16(image_w);
- image_h = swap16(image_h);
- if (fwrite(&image_w, 2, 1, fp) != 1) {
- goto fails;
- }
- if (fwrite(&image_h, 2, 1, fp) != 1) {
- goto fails;
- }
-#endif
-
- if (fwrite(&pixel_depth, 1, 1, fp) != 1) {
- goto fails;
- }
-
- image_desc = 8; /* 8 bits per component. */
-
- if (flip_image) {
- image_desc |= 32;
- }
- if (fwrite(&image_desc, 1, 1, fp) != 1) {
- goto fails;
- }
-
- return 1;
-
-fails:
- fputs("\nwrite_tgaheader: write ERROR\n", stderr);
- return 0;
-}
-
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters)
-{
- FILE *f;
- opj_image_t *image;
- unsigned int image_width, image_height, pixel_bit_depth;
- unsigned int x, y;
- int flip_image = 0;
- opj_image_cmptparm_t cmptparm[4]; /* maximum 4 components */
- int numcomps;
- OPJ_COLOR_SPACE color_space;
- opj_bool mono ;
- opj_bool save_alpha;
- int subsampling_dx, subsampling_dy;
- int i;
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- return 0;
- }
-
- if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height,
- &flip_image)) {
- return NULL;
- }
-
- /* We currently only support 24 & 32 bit tga's ... */
- if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) {
- return NULL;
- }
-
- /* initialize image components */
- memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
- mono = (pixel_bit_depth == 8) ||
- (pixel_bit_depth == 16); /* Mono with & without alpha. */
- save_alpha = (pixel_bit_depth == 16) ||
- (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
-
- if (mono) {
- color_space = CLRSPC_GRAY;
- numcomps = save_alpha ? 2 : 1;
- } else {
- numcomps = save_alpha ? 4 : 3;
- color_space = CLRSPC_SRGB;
- }
-
- subsampling_dx = parameters->subsampling_dx;
- subsampling_dy = parameters->subsampling_dy;
-
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = image_width;
- cmptparm[i].h = image_height;
- }
-
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (image_width - 1) * subsampling_dx + 1 : image->x0 +
- (image_width - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (image_height - 1) * subsampling_dy + 1 : image->y0 +
- (image_height - 1) * subsampling_dy + 1;
-
- /* set image data */
- for (y = 0; y < image_height; y++) {
- int index;
-
- if (flip_image) {
- index = (image_height - y - 1) * image_width;
- } else {
- index = y * image_width;
- }
-
- if (numcomps == 3) {
- for (x = 0; x < image_width; x++) {
- unsigned char r, g, b;
-
- if (!fread(&b, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
- if (!fread(&g, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
- if (!fread(&r, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
-
- image->comps[0].data[index] = r;
- image->comps[1].data[index] = g;
- image->comps[2].data[index] = b;
- index++;
- }
- } else if (numcomps == 4) {
- for (x = 0; x < image_width; x++) {
- unsigned char r, g, b, a;
- if (!fread(&b, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
- if (!fread(&g, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
- if (!fread(&r, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
- if (!fread(&a, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- opj_image_destroy(image);
- return NULL;
- }
-
- image->comps[0].data[index] = r;
- image->comps[1].data[index] = g;
- image->comps[2].data[index] = b;
- image->comps[3].data[index] = a;
- index++;
- }
- } else {
- fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
- }
- }
- return image;
-}
-
-int imagetotga(opj_image_t * image, const char *outfile)
-{
- int width, height, bpp, x, y;
- opj_bool write_alpha;
- int i, adjustR, adjustG, adjustB;
- unsigned int alpha_channel;
- float r, g, b, a;
- unsigned char value;
- float scale;
- FILE *fdest;
- size_t res;
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return 1;
- }
-
- for (i = 0; i < image->numcomps - 1; i++) {
- if ((image->comps[0].dx != image->comps[i + 1].dx)
- || (image->comps[0].dy != image->comps[i + 1].dy)
- || (image->comps[0].prec != image->comps[i + 1].prec)) {
- fprintf(stderr,
- "Unable to create a tga file with such J2K image charateristics.");
- return 1;
- }
- }
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- /* Mono with alpha, or RGB with alpha. */
- write_alpha = (image->numcomps == 2) || (image->numcomps == 4);
-
- /* Write TGA header */
- bpp = write_alpha ? 32 : 24;
- if (!tga_writeheader(fdest, bpp, width, height, OPJ_TRUE)) {
- return 1;
- }
-
- alpha_channel = image->numcomps - 1;
-
- scale = 255.0f / (float)((1 << image->comps[0].prec) - 1);
-
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-
- for (y = 0; y < height; y++) {
- unsigned int index = y * width;
-
- for (x = 0; x < width; x++, index++) {
- r = (float)(image->comps[0].data[index] + adjustR);
-
- if (image->numcomps > 2) {
- g = (float)(image->comps[1].data[index] + adjustG);
- b = (float)(image->comps[2].data[index] + adjustB);
- } else { /* Greyscale ... */
- g = r;
- b = r;
- }
-
- /* TGA format writes BGR ... */
- value = (unsigned char)(b * scale);
- res = fwrite(&value, 1, 1, fdest);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
-
- value = (unsigned char)(g * scale);
- res = fwrite(&value, 1, 1, fdest);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
-
- value = (unsigned char)(r * scale);
- res = fwrite(&value, 1, 1, fdest);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
-
- if (write_alpha) {
- a = (float)(image->comps[alpha_channel].data[index]);
- value = (unsigned char)(a * scale);
- res = fwrite(&value, 1, 1, fdest);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- }
- }
- }
-
- return 0;
-}
-
-/* -->> -->> -->> -->>
-
- BMP IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-/* WORD defines a two byte word */
-typedef unsigned short int WORD;
-
-/* DWORD defines a four byte word */
-typedef unsigned int DWORD;
-
-typedef struct {
- WORD bfType; /* 'BM' for Bitmap (19776) */
- DWORD bfSize; /* Size of the file */
- WORD bfReserved1; /* Reserved : 0 */
- WORD bfReserved2; /* Reserved : 0 */
- DWORD bfOffBits; /* Offset */
-} BITMAPFILEHEADER_t;
-
-typedef struct {
- DWORD biSize; /* Size of the structure in bytes */
- DWORD biWidth; /* Width of the image in pixels */
- DWORD biHeight; /* Height of the image in pixels */
- WORD biPlanes; /* 1 */
- WORD biBitCount; /* Number of color bits by pixels */
- DWORD biCompression; /* Type of encoding 0: none 1: RLE8 2: RLE4 */
- DWORD biSizeImage; /* Size of the image in bytes */
- DWORD biXpelsPerMeter; /* Horizontal (X) resolution in pixels/meter */
- DWORD biYpelsPerMeter; /* Vertical (Y) resolution in pixels/meter */
- DWORD biClrUsed; /* Number of color used in the image (0: ALL) */
- DWORD biClrImportant; /* Number of important color (0: ALL) */
-} BITMAPINFOHEADER_t;
-
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
-
- int i, numcomps, w, h;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm[3]; /* maximum of 3 components */
- opj_image_t * image = NULL;
-
- FILE *IN;
- BITMAPFILEHEADER_t File_h;
- BITMAPINFOHEADER_t Info_h;
- unsigned char *RGB;
- unsigned char *table_R, *table_G, *table_B;
- unsigned int j, PAD = 0;
-
- int x, y, index;
- int gray_scale = 1;
- int has_color;
- DWORD W, H;
-
- IN = fopen(filename, "rb");
- if (!IN) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- return NULL;
- }
-
- File_h.bfType = getc(IN);
- File_h.bfType = (getc(IN) << 8) + File_h.bfType;
-
- if (File_h.bfType != 19778) {
- fprintf(stderr, "Error, not a BMP file!\n");
- fclose(IN);
- return NULL;
- }
- /* FILE HEADER */
- /* ------------- */
- File_h.bfSize = getc(IN);
- File_h.bfSize = (getc(IN) << 8) + File_h.bfSize;
- File_h.bfSize = (getc(IN) << 16) + File_h.bfSize;
- File_h.bfSize = (getc(IN) << 24) + File_h.bfSize;
-
- File_h.bfReserved1 = getc(IN);
- File_h.bfReserved1 = (getc(IN) << 8) + File_h.bfReserved1;
-
- File_h.bfReserved2 = getc(IN);
- File_h.bfReserved2 = (getc(IN) << 8) + File_h.bfReserved2;
-
- File_h.bfOffBits = getc(IN);
- File_h.bfOffBits = (getc(IN) << 8) + File_h.bfOffBits;
- File_h.bfOffBits = (getc(IN) << 16) + File_h.bfOffBits;
- File_h.bfOffBits = (getc(IN) << 24) + File_h.bfOffBits;
-
- /* INFO HEADER */
- /* ------------- */
-
- Info_h.biSize = getc(IN);
- Info_h.biSize = (getc(IN) << 8) + Info_h.biSize;
- Info_h.biSize = (getc(IN) << 16) + Info_h.biSize;
- Info_h.biSize = (getc(IN) << 24) + Info_h.biSize;
-
- if (Info_h.biSize != 40) {
- fprintf(stderr, "Error, unknown BMP header size %d\n", Info_h.biSize);
- fclose(IN);
- return NULL;
- }
- Info_h.biWidth = getc(IN);
- Info_h.biWidth = (getc(IN) << 8) + Info_h.biWidth;
- Info_h.biWidth = (getc(IN) << 16) + Info_h.biWidth;
- Info_h.biWidth = (getc(IN) << 24) + Info_h.biWidth;
- w = Info_h.biWidth;
-
- Info_h.biHeight = getc(IN);
- Info_h.biHeight = (getc(IN) << 8) + Info_h.biHeight;
- Info_h.biHeight = (getc(IN) << 16) + Info_h.biHeight;
- Info_h.biHeight = (getc(IN) << 24) + Info_h.biHeight;
- h = Info_h.biHeight;
-
- Info_h.biPlanes = getc(IN);
- Info_h.biPlanes = (getc(IN) << 8) + Info_h.biPlanes;
-
- Info_h.biBitCount = getc(IN);
- Info_h.biBitCount = (getc(IN) << 8) + Info_h.biBitCount;
-
- Info_h.biCompression = getc(IN);
- Info_h.biCompression = (getc(IN) << 8) + Info_h.biCompression;
- Info_h.biCompression = (getc(IN) << 16) + Info_h.biCompression;
- Info_h.biCompression = (getc(IN) << 24) + Info_h.biCompression;
-
- Info_h.biSizeImage = getc(IN);
- Info_h.biSizeImage = (getc(IN) << 8) + Info_h.biSizeImage;
- Info_h.biSizeImage = (getc(IN) << 16) + Info_h.biSizeImage;
- Info_h.biSizeImage = (getc(IN) << 24) + Info_h.biSizeImage;
-
- Info_h.biXpelsPerMeter = getc(IN);
- Info_h.biXpelsPerMeter = (getc(IN) << 8) + Info_h.biXpelsPerMeter;
- Info_h.biXpelsPerMeter = (getc(IN) << 16) + Info_h.biXpelsPerMeter;
- Info_h.biXpelsPerMeter = (getc(IN) << 24) + Info_h.biXpelsPerMeter;
-
- Info_h.biYpelsPerMeter = getc(IN);
- Info_h.biYpelsPerMeter = (getc(IN) << 8) + Info_h.biYpelsPerMeter;
- Info_h.biYpelsPerMeter = (getc(IN) << 16) + Info_h.biYpelsPerMeter;
- Info_h.biYpelsPerMeter = (getc(IN) << 24) + Info_h.biYpelsPerMeter;
-
- Info_h.biClrUsed = getc(IN);
- Info_h.biClrUsed = (getc(IN) << 8) + Info_h.biClrUsed;
- Info_h.biClrUsed = (getc(IN) << 16) + Info_h.biClrUsed;
- Info_h.biClrUsed = (getc(IN) << 24) + Info_h.biClrUsed;
-
- Info_h.biClrImportant = getc(IN);
- Info_h.biClrImportant = (getc(IN) << 8) + Info_h.biClrImportant;
- Info_h.biClrImportant = (getc(IN) << 16) + Info_h.biClrImportant;
- Info_h.biClrImportant = (getc(IN) << 24) + Info_h.biClrImportant;
-
- /* Read the data and store them in the OUT file */
-
- if (Info_h.biBitCount == 24) {
- numcomps = 3;
- color_space = CLRSPC_SRGB;
- /* initialize image components */
- memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = w;
- cmptparm[i].h = h;
- }
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
- if (!image) {
- fclose(IN);
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 +
- (w - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 +
- (h - 1) * subsampling_dy + 1;
-
- /* set image data */
-
- /* Place the cursor at the beginning of the image information */
- fseek(IN, 0, SEEK_SET);
- fseek(IN, File_h.bfOffBits, SEEK_SET);
-
- W = Info_h.biWidth;
- H = Info_h.biHeight;
-
- /* PAD = 4 - (3 * W) % 4; */
- /* PAD = (PAD == 4) ? 0 : PAD; */
- PAD = (3 * W) % 4 ? 4 - (3 * W) % 4 : 0;
-
- RGB = (unsigned char *)
- malloc((3 * W + PAD) * H * sizeof(unsigned char));
-
- if (fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H,
- IN) != (3 * W + PAD) * H) {
- free(RGB);
- opj_image_destroy(image);
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return NULL;
- }
-
- index = 0;
-
- for (y = 0; y < (int)H; y++) {
- unsigned char *scanline = RGB + (3 * W + PAD) * (H - 1 - y);
- for (x = 0; x < (int)W; x++) {
- unsigned char *pixel = &scanline[3 * x];
- image->comps[0].data[index] = pixel[2]; /* R */
- image->comps[1].data[index] = pixel[1]; /* G */
- image->comps[2].data[index] = pixel[0]; /* B */
- index++;
- }
- }
- free(RGB);
- }/* if (Info_h.biBitCount == 24) */
- else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) { /*RGB */
- if (Info_h.biClrUsed == 0) {
- Info_h.biClrUsed = 256;
- } else if (Info_h.biClrUsed > 256) {
- Info_h.biClrUsed = 256;
- }
-
- table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
- table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
- table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
-
- has_color = 0;
- for (j = 0; j < Info_h.biClrUsed; j++) {
- table_B[j] = (unsigned char)getc(IN);
- table_G[j] = (unsigned char)getc(IN);
- table_R[j] = (unsigned char)getc(IN);
- getc(IN);
- has_color +=
- !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
- }
- if (has_color) {
- gray_scale = 0;
- }
-
- /* Place the cursor at the beginning of the image information */
- fseek(IN, 0, SEEK_SET);
- fseek(IN, File_h.bfOffBits, SEEK_SET);
-
- W = Info_h.biWidth;
- H = Info_h.biHeight;
- if (Info_h.biWidth % 2) {
- W++;
- }
-
- numcomps = gray_scale ? 1 : 3;
- color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
- /* initialize image components */
- memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = w;
- cmptparm[i].h = h;
- }
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
- if (!image) {
- fclose(IN);
- free(table_R);
- free(table_G);
- free(table_B);
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 +
- (w - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 +
- (h - 1) * subsampling_dy + 1;
-
- /* set image data */
-
- RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char));
-
- if (fread(RGB, sizeof(unsigned char), W * H, IN) != W * H) {
- free(table_R);
- free(table_G);
- free(table_B);
- free(RGB);
- opj_image_destroy(image);
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return NULL;
- }
- if (gray_scale) {
- index = 0;
- for (j = 0; j < W * H; j++) {
- if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2)) {
- image->comps[0].data[index] =
- table_R[RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]];
- index++;
- }
- }
-
- } else {
- index = 0;
- for (j = 0; j < W * H; j++) {
- if ((j % W < W - 1 && Info_h.biWidth % 2)
- || !(Info_h.biWidth % 2)) {
- unsigned char pixel_index =
- RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)];
- image->comps[0].data[index] = table_R[pixel_index];
- image->comps[1].data[index] = table_G[pixel_index];
- image->comps[2].data[index] = table_B[pixel_index];
- index++;
- }
- }
- }
- free(RGB);
- free(table_R);
- free(table_G);
- free(table_B);
- }/* RGB8 */
- else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
- unsigned char *pix, *beyond;
- int *gray, *red, *green, *blue;
- unsigned int x, y, max;
- int i, c, c1;
- unsigned char uc;
-
- if (Info_h.biClrUsed == 0) {
- Info_h.biClrUsed = 256;
- } else if (Info_h.biClrUsed > 256) {
- Info_h.biClrUsed = 256;
- }
-
- table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
- table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
- table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
-
- has_color = 0;
- for (j = 0; j < Info_h.biClrUsed; j++) {
- table_B[j] = (unsigned char)getc(IN);
- table_G[j] = (unsigned char)getc(IN);
- table_R[j] = (unsigned char)getc(IN);
- getc(IN);
- has_color += !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
- }
-
- if (has_color) {
- gray_scale = 0;
- }
-
- numcomps = gray_scale ? 1 : 3;
- color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
- /* initialize image components */
- memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = w;
- cmptparm[i].h = h;
- }
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
- if (!image) {
- fclose(IN);
- free(table_R);
- free(table_G);
- free(table_B);
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w
- - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h
- - 1) * subsampling_dy + 1;
-
- /* set image data */
-
- /* Place the cursor at the beginning of the image information */
- fseek(IN, 0, SEEK_SET);
- fseek(IN, File_h.bfOffBits, SEEK_SET);
-
- W = Info_h.biWidth;
- H = Info_h.biHeight;
- RGB = (unsigned char *) calloc(1, W * H * sizeof(unsigned char));
- beyond = RGB + W * H;
- pix = beyond - W;
- x = y = 0;
-
- while (y < H) {
- c = getc(IN);
-
- if (c) {
- c1 = getc(IN);
-
- for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++) {
- *pix = (unsigned char)c1;
- }
- } else {
- c = getc(IN);
-
- if (c == 0x00) { /* EOL */
- x = 0;
- ++y;
- pix = RGB + x + (H - y - 1) * W;
- } else if (c == 0x01) { /* EOP */
- break;
- } else if (c == 0x02) { /* MOVE by dxdy */
- c = getc(IN);
- x += c;
- c = getc(IN);
- y += c;
- pix = RGB + (H - y - 1) * W + x;
- } else { /* 03 .. 255 */
- i = 0;
- for (; i < c && x < W && pix < beyond; i++, x++, pix++) {
- c1 = getc(IN);
- *pix = (unsigned char)c1;
- }
- if (c & 1) { /* skip padding byte */
- getc(IN);
- }
- }
- }
- }/* while() */
-
- if (gray_scale) {
- gray = image->comps[0].data;
- pix = RGB;
- max = W * H;
-
- while (max--) {
- uc = *pix++;
-
- *gray++ = table_R[uc];
- }
- } else {
- /*int *red, *green, *blue;*/
-
- red = image->comps[0].data;
- green = image->comps[1].data;
- blue = image->comps[2].data;
- pix = RGB;
- max = W * H;
-
- while (max--) {
- uc = *pix++;
-
- *red++ = table_R[uc];
- *green++ = table_G[uc];
- *blue++ = table_B[uc];
- }
- }
- free(RGB);
- free(table_R);
- free(table_G);
- free(table_B);
- }/* RLE8 */
- else {
- fprintf(stderr,
- "Other system than 24 bits/pixels or 8 bits (no RLE coding) "
- "is not yet implemented [%d]\n", Info_h.biBitCount);
- }
- fclose(IN);
- return image;
-}
-
-int imagetobmp(opj_image_t * image, const char *outfile)
-{
- int w, h;
- int i, pad;
- FILE *fdest = NULL;
- int adjustR, adjustG, adjustB;
-
- if (image->comps[0].prec < 8) {
- fprintf(stderr, "Unsupported precision: %d\n", image->comps[0].prec);
- return 1;
- }
- if (image->numcomps >= 3 && image->comps[0].dx == image->comps[1].dx
- && image->comps[1].dx == image->comps[2].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[1].dy == image->comps[2].dy
- && image->comps[0].prec == image->comps[1].prec
- && image->comps[1].prec == image->comps[2].prec) {
-
- /* -->> -->> -->> -->>
- 24 bits color
- <<-- <<-- <<-- <<-- */
-
- fdest = fopen(outfile, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return 1;
- }
-
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- fprintf(fdest, "BM");
-
- /* FILE HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c",
- (unsigned char)(h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, ((54) >> 16) & 0xff,
- ((54) >> 24) & 0xff);
-
- /* INFO HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
- ((40) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
- (unsigned char)((w) >> 8) & 0xff,
- (unsigned char)((w) >> 16) & 0xff,
- (unsigned char)((w) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
- (unsigned char)((h) >> 8) & 0xff,
- (unsigned char)((h) >> 16) & 0xff,
- (unsigned char)((h) >> 24) & 0xff);
- fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
- fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)(3 * h * w + 3 * h * (w % 2)) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
- (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
-
- if (image->comps[0].prec > 8) {
- adjustR = image->comps[0].prec - 8;
- printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
- image->comps[0].prec);
- } else {
- adjustR = 0;
- }
- if (image->comps[1].prec > 8) {
- adjustG = image->comps[1].prec - 8;
- printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
- image->comps[1].prec);
- } else {
- adjustG = 0;
- }
- if (image->comps[2].prec > 8) {
- adjustB = image->comps[2].prec - 8;
- printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
- image->comps[2].prec);
- } else {
- adjustB = 0;
- }
-
- for (i = 0; i < w * h; i++) {
- unsigned char rc, gc, bc;
- int r, g, b;
-
- r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
- if (r > 255) {
- r = 255;
- } else if (r < 0) {
- r = 0;
- }
- rc = (unsigned char)r;
-
- g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- g = ((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
- if (g > 255) {
- g = 255;
- } else if (g < 0) {
- g = 0;
- }
- gc = (unsigned char)g;
-
- b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
- b = ((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
- if (b > 255) {
- b = 255;
- } else if (b < 0) {
- b = 0;
- }
- bc = (unsigned char)b;
-
- fprintf(fdest, "%c%c%c", bc, gc, rc);
-
- if ((i + 1) % w == 0) {
- for (pad = (3 * w) % 4 ? 4 - (3 * w) % 4 : 0; pad > 0; pad--) { /* ADD */
- fprintf(fdest, "%c", 0);
- }
- }
- }
- fclose(fdest);
- } else { /* Gray-scale */
-
- /* -->> -->> -->> -->>
- 8 bits non code (Gray scale)
- <<-- <<-- <<-- <<-- */
-
- fdest = fopen(outfile, "wb");
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- fprintf(fdest, "BM");
-
- /* FILE HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c",
- (unsigned char)(h * w + 54 + 1024 + h * (w % 2)) & 0xff,
- (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
- (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
- (unsigned char)((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff,
- ((54 + 1024) >> 16) & 0xff,
- ((54 + 1024) >> 24) & 0xff);
-
- /* INFO HEADER */
- /* ------------- */
- fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
- ((40) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
- (unsigned char)((w) >> 8) & 0xff,
- (unsigned char)((w) >> 16) & 0xff,
- (unsigned char)((w) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
- (unsigned char)((h) >> 8) & 0xff,
- (unsigned char)((h) >> 16) & 0xff,
- (unsigned char)((h) >> 24) & 0xff);
- fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
- fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
- fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
- ((0) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (unsigned char)(h * w + h * (w % 2)) & 0xff,
- (unsigned char)((h * w + h * (w % 2)) >> 8) & 0xff,
- (unsigned char)((h * w + h * (w % 2)) >> 16) & 0xff,
- (unsigned char)((h * w + h * (w % 2)) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
- ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
- ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
- fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
- ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-
- if (image->comps[0].prec > 8) {
- adjustR = image->comps[0].prec - 8;
- printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
- image->comps[0].prec);
- } else {
- adjustR = 0;
- }
-
- for (i = 0; i < 256; i++) {
- fprintf(fdest, "%c%c%c%c", i, i, i, 0);
- }
-
- for (i = 0; i < w * h; i++) {
- int r;
-
- r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
- r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
- if (r > 255) {
- r = 255;
- } else if (r < 0) {
- r = 0;
- }
-
- fprintf(fdest, "%c", (unsigned char)r);
-
- if ((i + 1) % w == 0) {
- for (pad = w % 4 ? 4 - w % 4 : 0; pad > 0; pad--) { /* ADD */
- fprintf(fdest, "%c", 0);
- }
- }
- }
- fclose(fdest);
- }
-
- return 0;
-}
-
-/* -->> -->> -->> -->>
-
-PGX IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-
-static unsigned char readuchar(FILE * f)
-{
- unsigned char c1;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- return c1;
-}
-
-static unsigned short readushort(FILE * f, int bigendian)
-{
- unsigned char c1, c2;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c2, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (bigendian) {
- return (c1 << 8) + c2;
- } else {
- return (c2 << 8) + c1;
- }
-}
-
-static unsigned int readuint(FILE * f, int bigendian)
-{
- unsigned char c1, c2, c3, c4;
- if (!fread(&c1, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c2, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c3, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (!fread(&c4, 1, 1, f)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- return 0;
- }
- if (bigendian) {
- return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
- } else {
- return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
- }
-}
-
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters)
-{
- FILE *f = NULL;
- int w, h, prec;
- int i, numcomps, max;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm; /* maximum of 1 component */
- opj_image_t * image = NULL;
- int adjustS, ushift, dshift, force8;
-
- char endian1, endian2, sign;
- char signtmp[32];
-
- char temp[32];
- int bigendian;
- opj_image_comp_t *comp = NULL;
-
- numcomps = 1;
- color_space = CLRSPC_GRAY;
-
- memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t));
-
- max = 0;
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !\n", filename);
- return NULL;
- }
-
- fseek(f, 0, SEEK_SET);
- if (fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d", temp, &endian1,
- &endian2, signtmp, &prec, temp, &w, temp, &h) != 9) {
- fprintf(stderr,
- "ERROR: Failed to read the right number of element from the fscanf() function!\n");
- fclose(f);
- return NULL;
- }
-
- i = 0;
- sign = '+';
- while (signtmp[i] != '\0') {
- if (signtmp[i] == '-') {
- sign = '-';
- }
- i++;
- }
-
- fgetc(f);
- if (endian1 == 'M' && endian2 == 'L') {
- bigendian = 1;
- } else if (endian2 == 'M' && endian1 == 'L') {
- bigendian = 0;
- } else {
- fprintf(stderr, "Bad pgx header, please check input file\n");
- fclose(f);
- return NULL;
- }
-
- /* initialize image component */
-
- cmptparm.x0 = parameters->image_offset_x0;
- cmptparm.y0 = parameters->image_offset_y0;
- cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
- cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
- cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
- cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
-
- if (sign == '-') {
- cmptparm.sgnd = 1;
- } else {
- cmptparm.sgnd = 0;
- }
- if (prec < 8) {
- force8 = 1;
- ushift = 8 - prec;
- dshift = prec - ushift;
- if (cmptparm.sgnd) {
- adjustS = (1 << (prec - 1));
- } else {
- adjustS = 0;
- }
- cmptparm.sgnd = 0;
- prec = 8;
- } else {
- ushift = dshift = force8 = adjustS = 0;
- }
-
- cmptparm.prec = prec;
- cmptparm.bpp = prec;
- cmptparm.dx = parameters->subsampling_dx;
- cmptparm.dy = parameters->subsampling_dy;
-
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm, color_space);
- if (!image) {
- fclose(f);
- return NULL;
- }
- /* set image offset and reference grid */
- image->x0 = cmptparm.x0;
- image->y0 = cmptparm.x0;
- image->x1 = cmptparm.w;
- image->y1 = cmptparm.h;
-
- /* set image data */
-
- comp = &image->comps[0];
-
- for (i = 0; i < w * h; i++) {
- int v;
- if (force8) {
- v = readuchar(f) + adjustS;
- v = (v << ushift) + (v >> dshift);
- comp->data[i] = (unsigned char)v;
-
- if (v > max) {
- max = v;
- }
-
- continue;
- }
- if (comp->prec == 8) {
- if (!comp->sgnd) {
- v = readuchar(f);
- } else {
- v = (char) readuchar(f);
- }
- } else if (comp->prec <= 16) {
- if (!comp->sgnd) {
- v = readushort(f, bigendian);
- } else {
- v = (short) readushort(f, bigendian);
- }
- } else {
- if (!comp->sgnd) {
- v = readuint(f, bigendian);
- } else {
- v = (int) readuint(f, bigendian);
- }
- }
- if (v > max) {
- max = v;
- }
- comp->data[i] = v;
- }
- fclose(f);
- comp->bpp = int_floorlog2(max) + 1;
-
- return image;
-}
-
-int imagetopgx(opj_image_t * image, const char *outfile)
-{
- int w, h;
- int i, j, compno;
- FILE *fdest = NULL;
-
- for (compno = 0; compno < image->numcomps; compno++) {
- opj_image_comp_t *comp = &image->comps[compno];
- char bname[256]; /* buffer for name */
- char *name = bname; /* pointer */
- int nbytes = 0;
- size_t res;
- const size_t olen = strlen(outfile);
- const size_t dotpos = olen - 4;
- const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
- if (outfile[dotpos] != '.') {
- /* `pgx` was recognized but there is no dot at expected position */
- fprintf(stderr, "ERROR -> Impossible happen.");
- return 1;
- }
- if (total > 256) {
- name = (char*)malloc(total + 1);
- }
- strncpy(name, outfile, dotpos);
- /*if (image->numcomps > 1) {*/
- sprintf(name + dotpos, "_%d.pgx", compno);
- /*} else {
- strcpy(name+dotpos, ".pgx");
- }*/
- fdest = fopen(name, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
- return 1;
- }
- /* don't need name anymore */
- if (total > 256) {
- free(name);
- }
-
- w = image->comps[compno].w;
- h = image->comps[compno].h;
-
- fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h);
- if (comp->prec <= 8) {
- nbytes = 1;
- } else if (comp->prec <= 16) {
- nbytes = 2;
- } else {
- nbytes = 4;
- }
- for (i = 0; i < w * h; i++) {
- int v = image->comps[compno].data[i];
- for (j = nbytes - 1; j >= 0; j--) {
- char byte = (char)(v >> (j * 8));
- res = fwrite(&byte, 1, 1, fdest);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", name);
- fclose(fdest);
- return 1;
- }
- }
- }
- fclose(fdest);
- }
-
- return 0;
-}
-
-/* -->> -->> -->> -->>
-
-PNM IMAGE FORMAT
-
-<<-- <<-- <<-- <<-- */
-
-struct pnm_header {
- int width, height, maxval, depth, format;
- char rgb, rgba, gray, graya, bw;
- char ok;
-};
-
-static char *skip_white(char *s)
-{
- while (*s) {
- if (*s == '\n' || *s == '\r') {
- return NULL;
- }
- if (isspace(*s)) {
- ++s;
- continue;
- }
- return s;
- }
- return NULL;
-}
-
-static char *skip_int(char *start, int *out_n)
-{
- char *s;
- char c;
-
- *out_n = 0;
- s = start;
-
- s = skip_white(start);
- if (s == NULL) {
- return NULL;
- }
- start = s;
-
- while (*s) {
- if (!isdigit(*s)) {
- break;
- }
- ++s;
- }
- c = *s;
- *s = 0;
- *out_n = atoi(start);
- *s = c;
- return s;
-}
-
-static char *skip_idf(char *start, char out_idf[256])
-{
- char *s;
- char c;
-
- s = skip_white(start);
- if (s == NULL) {
- return NULL;
- }
- start = s;
-
- while (*s) {
- if (isalpha(*s) || *s == '_') {
- ++s;
- continue;
- }
- break;
- }
- c = *s;
- *s = 0;
- strncpy(out_idf, start, 255);
- *s = c;
- return s;
-}
-
-static void read_pnm_header(FILE *reader, struct pnm_header *ph)
-{
- char *s;
- int format, have_wh, end, ttype;
- char idf[256], type[256];
- char line[256];
-
- if (fgets(line, 250, reader) == NULL) {
- fprintf(stderr, "\nWARNING: fgets return a NULL value");
- return;
- }
-
- if (line[0] != 'P') {
- fprintf(stderr, "read_pnm_header:PNM:magic P missing\n");
- return;
- }
- format = atoi(line + 1);
- if (format < 1 || format > 7) {
- fprintf(stderr, "read_pnm_header:magic format %d invalid\n", format);
- return;
- }
- ph->format = format;
- ttype = end = have_wh = 0;
-
- while (fgets(line, 250, reader)) {
- if (*line == '#') {
- continue;
- }
-
- s = line;
-
- if (format == 7) {
- s = skip_idf(s, idf);
-
- if (s == NULL || *s == 0) {
- return;
- }
-
- if (strcmp(idf, "ENDHDR") == 0) {
- end = 1;
- break;
- }
- if (strcmp(idf, "WIDTH") == 0) {
- s = skip_int(s, &ph->width);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "HEIGHT") == 0) {
- s = skip_int(s, &ph->height);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "DEPTH") == 0) {
- s = skip_int(s, &ph->depth);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "MAXVAL") == 0) {
- s = skip_int(s, &ph->maxval);
- if (s == NULL || *s == 0) {
- return;
- }
-
- continue;
- }
- if (strcmp(idf, "TUPLTYPE") == 0) {
- s = skip_idf(s, type);
- if (s == NULL || *s == 0) {
- return;
- }
-
- if (strcmp(type, "BLACKANDWHITE") == 0) {
- ph->bw = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "GRAYSCALE") == 0) {
- ph->gray = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "GRAYSCALE_ALPHA") == 0) {
- ph->graya = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "RGB") == 0) {
- ph->rgb = 1;
- ttype = 1;
- continue;
- }
- if (strcmp(type, "RGB_ALPHA") == 0) {
- ph->rgba = 1;
- ttype = 1;
- continue;
- }
- fprintf(stderr, "read_pnm_header:unknown P7 TUPLTYPE %s\n", type);
- return;
- }
- fprintf(stderr, "read_pnm_header:unknown P7 idf %s\n", idf);
- return;
- } /* if(format == 7) */
-
- if (!have_wh) {
- s = skip_int(s, &ph->width);
-
- s = skip_int(s, &ph->height);
-
- have_wh = 1;
-
- if (format == 1 || format == 4) {
- break;
- }
-
- continue;
- }
- if (format == 2 || format == 3 || format == 5 || format == 6) {
- /* P2, P3, P5, P6: */
- s = skip_int(s, &ph->maxval);
-
- if (ph->maxval > 65535) {
- return;
- }
- }
- break;
- }/* while(fgets( ) */
- if (format == 2 || format == 3 || format > 4) {
- if (ph->maxval < 1 || ph->maxval > 65535) {
- return;
- }
- }
- if (ph->width < 1 || ph->height < 1) {
- return;
- }
-
- if (format == 7) {
- if (!end) {
- fprintf(stderr, "read_pnm_header:P7 without ENDHDR\n");
- return;
- }
- if (ph->depth < 1 || ph->depth > 4) {
- return;
- }
-
- if (ph->width && ph->height && ph->depth & ph->maxval && ttype) {
- ph->ok = 1;
- }
- } else {
- if (format != 1 && format != 4) {
- if (ph->width && ph->height && ph->maxval) {
- ph->ok = 1;
- }
- } else {
- if (ph->width && ph->height) {
- ph->ok = 1;
- }
- ph->maxval = 255;
- }
- }
-}
-
-static int has_prec(int val)
-{
- if (val < 2) {
- return 1;
- }
- if (val < 4) {
- return 2;
- }
- if (val < 8) {
- return 3;
- }
- if (val < 16) {
- return 4;
- }
- if (val < 32) {
- return 5;
- }
- if (val < 64) {
- return 6;
- }
- if (val < 128) {
- return 7;
- }
- if (val < 256) {
- return 8;
- }
- if (val < 512) {
- return 9;
- }
- if (val < 1024) {
- return 10;
- }
- if (val < 2048) {
- return 11;
- }
- if (val < 4096) {
- return 12;
- }
- if (val < 8192) {
- return 13;
- }
- if (val < 16384) {
- return 14;
- }
- if (val < 32768) {
- return 15;
- }
- return 16;
-}
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
-
- FILE *fp = NULL;
- int i, compno, numcomps, w, h, prec, format;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm[4]; /* RGBA: max. 4 components */
- opj_image_t * image = NULL;
- struct pnm_header header_info;
-
- if ((fp = fopen(filename, "rb")) == NULL) {
- fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n", filename);
- return NULL;
- }
- memset(&header_info, 0, sizeof(struct pnm_header));
-
- read_pnm_header(fp, &header_info);
-
- if (!header_info.ok) {
- fclose(fp);
- return NULL;
- }
-
- format = header_info.format;
-
- switch (format) {
- case 1: /* ascii bitmap */
- case 4: /* raw bitmap */
- numcomps = 1;
- break;
-
- case 2: /* ascii greymap */
- case 5: /* raw greymap */
- numcomps = 1;
- break;
-
- case 3: /* ascii pixmap */
- case 6: /* raw pixmap */
- numcomps = 3;
- break;
-
- case 7: /* arbitrary map */
- numcomps = header_info.depth;
- break;
-
- default:
- fclose(fp);
- return NULL;
- }
- if (numcomps < 3) {
- color_space = CLRSPC_GRAY; /* GRAY, GRAYA */
- } else {
- color_space = CLRSPC_SRGB; /* RGB, RGBA */
- }
-
- prec = has_prec(header_info.maxval);
-
- if (prec < 8) {
- prec = 8;
- }
-
- w = header_info.width;
- h = header_info.height;
- subsampling_dx = parameters->subsampling_dx;
- subsampling_dy = parameters->subsampling_dy;
-
- memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
-
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = prec;
- cmptparm[i].bpp = prec;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = w;
- cmptparm[i].h = h;
- }
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- fclose(fp);
- return NULL;
- }
-
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
- image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
-
- if ((format == 2) || (format == 3)) { /* ascii pixmap */
- unsigned int index;
-
- for (i = 0; i < w * h; i++) {
- for (compno = 0; compno < numcomps; compno++) {
- index = 0;
- if (fscanf(fp, "%u", &index) != 1) {
- fprintf(stderr,
- "\nWARNING: fscanf return a number of element different from the expected.\n");
- }
-
- image->comps[compno].data[i] = (index * 255) / header_info.maxval;
- }
- }
- } else if ((format == 5)
- || (format == 6)
- || ((format == 7)
- && (header_info.gray || header_info.graya
- || header_info.rgb || header_info.rgba))) { /* binary pixmap */
- unsigned char c0, c1, one;
-
- one = (prec < 9);
-
- for (i = 0; i < w * h; i++) {
- for (compno = 0; compno < numcomps; compno++) {
- if (!fread(&c0, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- }
- if (one) {
- image->comps[compno].data[i] = c0;
- } else {
- if (!fread(&c1, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- }
- /* netpbm: */
- image->comps[compno].data[i] = ((c0 << 8) | c1);
- }
- }
- }
- } else if (format == 1) { /* ascii bitmap */
- for (i = 0; i < w * h; i++) {
- unsigned int index;
-
- if (fscanf(fp, "%u", &index) != 1) {
- fprintf(stderr,
- "\nWARNING: fscanf return a number of element different from the expected.\n");
- }
-
- image->comps[0].data[i] = (index ? 0 : 255);
- }
- } else if (format == 4) {
- int x, y, bit;
- unsigned char uc;
-
- i = 0;
- for (y = 0; y < h; ++y) {
- bit = -1;
- uc = 0;
-
- for (x = 0; x < w; ++x) {
- if (bit == -1) {
- bit = 7;
- uc = (unsigned char)getc(fp);
- }
- image->comps[0].data[i] = (((uc >> bit) & 1) ? 0 : 255);
- --bit;
- ++i;
- }
- }
- } else if ((format == 7 && header_info.bw)) { /*MONO*/
- unsigned char uc;
-
- for (i = 0; i < w * h; ++i) {
- if (!fread(&uc, 1, 1, fp)) {
- fprintf(stderr,
- "\nError: fread return a number of element different from the expected.\n");
- }
- image->comps[0].data[i] = (uc & 1) ? 0 : 255;
- }
- }
- fclose(fp);
-
- return image;
-}/* pnmtoimage() */
-
-int imagetopnm(opj_image_t * image, const char *outfile)
-{
- int *red, *green, *blue, *alpha;
- int wr, hr, max;
- int i, compno, ncomp;
- int adjustR, adjustG, adjustB, adjustA;
- int fails, two, want_gray, has_alpha, triple;
- int prec, v;
- FILE *fdest = NULL;
- const char *tmp = outfile;
- char *destname;
- alpha = NULL;
- if ((prec = image->comps[0].prec) > 16) {
- fprintf(stderr, "%s:%d:imagetopnm\n\tprecision %d is larger than 16"
- "\n\t: refused.\n", __FILE__, __LINE__, prec);
- return 1;
- }
- two = has_alpha = 0;
- fails = 1;
- ncomp = image->numcomps;
-
- while (*tmp) {
- ++tmp;
- }
- tmp -= 2;
- want_gray = (*tmp == 'g' || *tmp == 'G');
- ncomp = image->numcomps;
-
- if (want_gray) {
- ncomp = 1;
- }
-
- if (ncomp == 2 /* GRAYA */
- || (ncomp > 2 /* RGB, RGBA */
- && image->comps[0].dx == image->comps[1].dx
- && image->comps[1].dx == image->comps[2].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[1].dy == image->comps[2].dy
- && image->comps[0].prec == image->comps[1].prec
- && image->comps[1].prec == image->comps[2].prec
- )) {
- fdest = fopen(outfile, "wb");
-
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
- return fails;
- }
- two = (prec > 8);
- triple = (ncomp > 2);
- wr = image->comps[0].w;
- hr = image->comps[0].h;
- max = (1 << prec) - 1;
- has_alpha = (ncomp == 4 || ncomp == 2);
-
- red = image->comps[0].data;
-
- if (triple) {
- green = image->comps[1].data;
- blue = image->comps[2].data;
- } else {
- green = blue = NULL;
- }
-
- if (has_alpha) {
- const char *tt = (triple ? "RGB_ALPHA" : "GRAYSCALE_ALPHA");
-
- fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %d\n"
- "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
- wr, hr, ncomp, max, tt);
- alpha = image->comps[ncomp - 1].data;
- adjustA = (image->comps[ncomp - 1].sgnd ?
- 1 << (image->comps[ncomp - 1].prec - 1) : 0);
- } else {
- fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
- opj_version(), wr, hr, max);
- adjustA = 0;
- }
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-
- if (triple) {
- adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
- } else {
- adjustG = adjustB = 0;
- }
-
- for (i = 0; i < wr * hr; ++i) {
- if (two) {
- v = *red + adjustR;
- ++red;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- if (triple) {
- v = *green + adjustG;
- ++green;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- v = *blue + adjustB;
- ++blue;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- }/* if(triple) */
-
- if (has_alpha) {
- v = *alpha + adjustA;
- ++alpha;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
- }
- continue;
-
- } /* if(two) */
-
- /* prec <= 8: */
-
- fprintf(fdest, "%c", (unsigned char)*red++);
- if (triple) {
- fprintf(fdest, "%c%c", (unsigned char)*green++, (unsigned char)*blue++);
- }
-
- if (has_alpha) {
- fprintf(fdest, "%c", (unsigned char)*alpha++);
- }
-
- } /* for(i */
-
- fclose(fdest);
- return 0;
- }
-
- /* YUV or MONO: */
-
- if (image->numcomps > ncomp) {
- fprintf(stderr, "WARNING -> [PGM file] Only the first component\n");
- fprintf(stderr, " is written to the file\n");
- }
- destname = (char*)malloc(strlen(outfile) + 8);
-
- for (compno = 0; compno < ncomp; compno++) {
- if (ncomp > 1) {
- sprintf(destname, "%d.%s", compno, outfile);
- } else {
- sprintf(destname, "%s", outfile);
- }
-
- fdest = fopen(destname, "wb");
- if (!fdest) {
- fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
- free(destname);
- return 1;
- }
- wr = image->comps[compno].w;
- hr = image->comps[compno].h;
- prec = image->comps[compno].prec;
- max = (1 << prec) - 1;
-
- fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
- opj_version(), wr, hr, max);
-
- red = image->comps[compno].data;
- adjustR =
- (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-
- if (prec > 8) {
- for (i = 0; i < wr * hr; i++) {
- v = *red + adjustR;
- ++red;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
-
- if (has_alpha) {
- v = *alpha++;
- /* netpbm: */
- fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
- }
- }/* for(i */
- } else { /* prec <= 8 */
- for (i = 0; i < wr * hr; ++i) {
- fprintf(fdest, "%c", (unsigned char)(*red + adjustR));
- ++red;
- }
- }
- fclose(fdest);
- } /* for (compno */
- free(destname);
-
- return 0;
-}/* imagetopnm() */
-
-#ifdef OPJ_HAVE_LIBTIFF
-/* -->> -->> -->> -->>
-
- TIFF IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-int imagetotif(opj_image_t * image, const char *outfile)
-{
- int width, height, imgsize;
- int bps, index, adjust, sgnd;
- int ushift, dshift, has_alpha, force16;
- TIFF *tif;
- tdata_t buf;
- tstrip_t strip;
- tsize_t strip_size;
-
- ushift = dshift = force16 = has_alpha = 0;
- bps = image->comps[0].prec;
-
- if (bps > 8 && bps < 16) {
- ushift = 16 - bps;
- dshift = bps - ushift;
- bps = 16;
- force16 = 1;
- }
-
- if (bps != 8 && bps != 16) {
- fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits implemented\n",
- bps);
- fprintf(stderr, "\tAborting\n");
- return 1;
- }
- tif = TIFFOpen(outfile, "wb");
-
- if (!tif) {
- fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
- return 1;
- }
- sgnd = image->comps[0].sgnd;
- adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
-
- if (image->numcomps >= 3
- && image->comps[0].dx == image->comps[1].dx
- && image->comps[1].dx == image->comps[2].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[1].dy == image->comps[2].dy
- && image->comps[0].prec == image->comps[1].prec
- && image->comps[1].prec == image->comps[2].prec) {
- has_alpha = (image->numcomps == 4);
-
- width = image->comps[0].w;
- height = image->comps[0].h;
- imgsize = width * height ;
-
- TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
- TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
- TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3 + has_alpha);
- TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
- TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
- TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
- TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
- strip_size = TIFFStripSize(tif);
- buf = _TIFFmalloc(strip_size);
- index = 0;
-
- for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
- unsigned char *dat8;
- tsize_t i, ssize, last_i = 0;
- int step, restx;
- ssize = TIFFStripSize(tif);
- dat8 = (unsigned char*)buf;
-
- if (bps == 8) {
- step = 3 + has_alpha;
- restx = step - 1;
-
- for (i = 0; i < ssize - restx; i += step) {
- int r, g, b, a = 0;
-
- if (index < imgsize) {
- r = image->comps[0].data[index];
- g = image->comps[1].data[index];
- b = image->comps[2].data[index];
- if (has_alpha) {
- a = image->comps[3].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- g += adjust;
- b += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- dat8[i + 0] = r ;
- dat8[i + 1] = g ;
- dat8[i + 2] = b ;
- if (has_alpha) {
- dat8[i + 3] = a;
- }
-
- index++;
- last_i = i + step;
- } else {
- break;
- }
- }/*for(i = 0;)*/
-
- if (last_i < ssize) {
- for (i = last_i; i < ssize; i += step) {
- int r, g, b, a = 0;
-
- if (index < imgsize) {
- r = image->comps[0].data[index];
- g = image->comps[1].data[index];
- b = image->comps[2].data[index];
- if (has_alpha) {
- a = image->comps[3].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- g += adjust;
- b += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- dat8[i + 0] = r ;
- if (i + 1 < ssize) {
- dat8[i + 1] = g ;
- } else {
- break;
- }
- if (i + 2 < ssize) {
- dat8[i + 2] = b ;
- } else {
- break;
- }
- if (has_alpha) {
- if (i + 3 < ssize) {
- dat8[i + 3] = a ;
- } else {
- break;
- }
- }
- index++;
- } else {
- break;
- }
- }/*for(i)*/
- }/*if(last_i < ssize)*/
-
- } /*if(bps == 8)*/
- else if (bps == 16) {
- step = 6 + has_alpha + has_alpha;
- restx = step - 1;
-
- for (i = 0; i < ssize - restx ; i += step) {
- int r, g, b, a = 0;
-
- if (index < imgsize) {
- r = image->comps[0].data[index];
- g = image->comps[1].data[index];
- b = image->comps[2].data[index];
- if (has_alpha) {
- a = image->comps[3].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- g += adjust;
- b += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- if (force16) {
- r = (r << ushift) + (r >> dshift);
- g = (g << ushift) + (g >> dshift);
- b = (b << ushift) + (b >> dshift);
- if (has_alpha) {
- a = (a << ushift) + (a >> dshift);
- }
- }
- dat8[i + 0] = r; /*LSB*/
- dat8[i + 1] = (r >> 8); /*MSB*/
- dat8[i + 2] = g;
- dat8[i + 3] = (g >> 8);
- dat8[i + 4] = b;
- dat8[i + 5] = (b >> 8);
- if (has_alpha) {
- dat8[i + 6] = a;
- dat8[i + 7] = (a >> 8);
- }
- index++;
- last_i = i + step;
- } else {
- break;
- }
- }/*for(i = 0;)*/
-
- if (last_i < ssize) {
- for (i = last_i ; i < ssize ; i += step) {
- int r, g, b, a = 0;
-
- if (index < imgsize) {
- r = image->comps[0].data[index];
- g = image->comps[1].data[index];
- b = image->comps[2].data[index];
- if (has_alpha) {
- a = image->comps[3].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- g += adjust;
- b += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- if (force16) {
- r = (r << ushift) + (r >> dshift);
- g = (g << ushift) + (g >> dshift);
- b = (b << ushift) + (b >> dshift);
- if (has_alpha) {
- a = (a << ushift) + (a >> dshift);
- }
- }
- dat8[i + 0] = r; /*LSB*/
- if (i + 1 < ssize) {
- dat8[i + 1] = (r >> 8);
- } else {
- break; /*MSB*/
- }
- if (i + 2 < ssize) {
- dat8[i + 2] = g;
- } else {
- break;
- }
- if (i + 3 < ssize) {
- dat8[i + 3] = (g >> 8);
- } else {
- break;
- }
- if (i + 4 < ssize) {
- dat8[i + 4] = b;
- } else {
- break;
- }
- if (i + 5 < ssize) {
- dat8[i + 5] = (b >> 8);
- } else {
- break;
- }
-
- if (has_alpha) {
- if (i + 6 < ssize) {
- dat8[i + 6] = a;
- } else {
- break;
- }
- if (i + 7 < ssize) {
- dat8[i + 7] = (a >> 8);
- } else {
- break;
- }
- }
- index++;
- } else {
- break;
- }
- }/*for(i)*/
- }/*if(last_i < ssize)*/
-
- }/*if(bps == 16)*/
- (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
- }/*for(strip = 0; )*/
-
- _TIFFfree((void*)buf);
- TIFFClose(tif);
-
- return 0;
- }/*RGB(A)*/
-
- if (image->numcomps == 1 /* GRAY */
- || (image->numcomps == 2 /* GRAY_ALPHA */
- && image->comps[0].dx == image->comps[1].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[0].prec == image->comps[1].prec)) {
- int step;
-
- has_alpha = (image->numcomps == 2);
-
- width = image->comps[0].w;
- height = image->comps[0].h;
- imgsize = width * height;
-
- /* Set tags */
- TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
- TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
- TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1 + has_alpha);
- TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
- TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
- TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
- TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-
- /* Get a buffer for the data */
- strip_size = TIFFStripSize(tif);
- buf = _TIFFmalloc(strip_size);
- index = 0;
-
- for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
- unsigned char *dat8;
- tsize_t i, ssize = TIFFStripSize(tif);
- dat8 = (unsigned char*)buf;
-
- if (bps == 8) {
- step = 1 + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- int r, a = 0;
-
- r = image->comps[0].data[index];
- if (has_alpha) {
- a = image->comps[1].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- dat8[i + 0] = r;
- if (has_alpha) {
- dat8[i + 1] = a;
- }
- index++;
- } else {
- break;
- }
- }/*for(i )*/
- }/*if(bps == 8*/
- else if (bps == 16) {
- step = 2 + has_alpha + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- int r, a = 0;
-
- r = image->comps[0].data[index];
- if (has_alpha) {
- a = image->comps[1].data[index];
- }
-
- if (sgnd) {
- r += adjust;
- if (has_alpha) {
- a += adjust;
- }
- }
- if (force16) {
- r = (r << ushift) + (r >> dshift);
- if (has_alpha) {
- a = (a << ushift) + (a >> dshift);
- }
- }
- dat8[i + 0] = r; /*LSB*/
- dat8[i + 1] = r >> 8; /*MSB*/
- if (has_alpha) {
- dat8[i + 2] = a;
- dat8[i + 3] = a >> 8;
- }
- index++;
- }/*if(index < imgsize)*/
- else {
- break;
- }
- }/*for(i )*/
- }
- (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
- }/*for(strip*/
-
- _TIFFfree(buf);
- TIFFClose(tif);
-
- return 0;
- }
-
- TIFFClose(tif);
-
- fprintf(stderr, "imagetotif: Bad color format.\n"
- "\tOnly RGB(A) and GRAY(A) has been implemented\n");
- fprintf(stderr, "\tFOUND: numcomps(%d)\n\tAborting\n",
- image->numcomps);
-
- return 1;
-}/* imagetotif() */
-
-/*
- * libtiff/tif_getimage.c : 1,2,4,8,16 bitspersample accepted
- * CINEMA : 12 bit precision
-*/
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
- TIFF *tif;
- tdata_t buf;
- tstrip_t strip;
- tsize_t strip_size;
- int j, numcomps, w, h, index;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm[4]; /* RGBA */
- opj_image_t *image = NULL;
- int imgsize = 0;
- int has_alpha = 0;
- unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
- unsigned int tiWidth, tiHeight;
-
- tif = TIFFOpen(filename, "r");
-
- if (!tif) {
- fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
- return 0;
- }
- tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
- tiWidth = tiHeight = 0;
-
- TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
- TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
- TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
- TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
- TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
- TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
- TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
- w = tiWidth;
- h = tiHeight;
-
- {
- unsigned short b = tiBps, p = tiPhoto;
-
- if (tiBps != 8 && tiBps != 16 && tiBps != 12) {
- b = 0;
- }
- if (tiPhoto != 1 && tiPhoto != 2) {
- p = 0;
- }
-
- if (!b || !p) {
- if (!b)
- fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits"
- " implemented\n", tiBps);
- else if (!p)
- fprintf(stderr, "tiftoimage: Bad color format %d.\n\tOnly RGB(A)"
- " and GRAY(A) has been implemented\n", (int) tiPhoto);
-
- fprintf(stderr, "\tAborting\n");
- TIFFClose(tif);
-
- return NULL;
- }
- }
- {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
- uint16* sampleinfo;
- uint16 extrasamples;
-
- TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
- &extrasamples, &sampleinfo);
-
- if (extrasamples >= 1) {
- switch (sampleinfo[0]) {
- case EXTRASAMPLE_UNSPECIFIED:
- /* Workaround for some images without correct info about alpha channel
- */
- if (tiSpp > 3) {
- has_alpha = 1;
- }
- break;
-
- case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
- case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
- has_alpha = 1;
- break;
- }
- } else /* extrasamples == 0 */
- if (tiSpp == 4 || tiSpp == 2) {
- has_alpha = 1;
- }
- }
-
- /* initialize image components
- */
- memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
- if (tiPhoto == PHOTOMETRIC_RGB) { /* RGB(A) */
- numcomps = 3 + has_alpha;
- color_space = CLRSPC_SRGB;
-
- for (j = 0; j < numcomps; j++) {
- if (parameters->cp_cinema) {
- cmptparm[j].prec = 12;
- cmptparm[j].bpp = 12;
- } else {
- cmptparm[j].prec = tiBps;
- cmptparm[j].bpp = tiBps;
- }
- cmptparm[j].dx = subsampling_dx;
- cmptparm[j].dy = subsampling_dy;
- cmptparm[j].w = w;
- cmptparm[j].h = h;
- }
-
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- TIFFClose(tif);
- return NULL;
- }
- /* set image offset and reference grid
- */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 :
- image->x0 + (w - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 :
- image->y0 + (h - 1) * subsampling_dy + 1;
-
- buf = _TIFFmalloc(TIFFStripSize(tif));
-
- strip_size = TIFFStripSize(tif);
- index = 0;
- imgsize = image->comps[0].w * image->comps[0].h ;
- /* Read the Image components
- */
- for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
- unsigned char *dat8;
- int step;
- tsize_t i, ssize;
- ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
- dat8 = (unsigned char*)buf;
-
- if (tiBps == 16) {
- step = 6 + has_alpha + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0]; /* R */
- image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2]; /* G */
- image->comps[2].data[index] = (dat8[i + 5] << 8) | dat8[i + 4]; /* B */
- if (has_alpha) {
- image->comps[3].data[index] = (dat8[i + 7] << 8) | dat8[i + 6];
- }
-
- if (parameters->cp_cinema) {
- /* Rounding 16 to 12 bits
- */
- image->comps[0].data[index] =
- (image->comps[0].data[index] + 0x08) >> 4 ;
- image->comps[1].data[index] =
- (image->comps[1].data[index] + 0x08) >> 4 ;
- image->comps[2].data[index] =
- (image->comps[2].data[index] + 0x08) >> 4 ;
- if (has_alpha)
- image->comps[3].data[index] =
- (image->comps[3].data[index] + 0x08) >> 4 ;
- }
- index++;
- } else {
- break;
- }
- }/*for(i = 0)*/
- }/*if(tiBps == 16)*/
- else if (tiBps == 8) {
- step = 3 + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- image->comps[0].data[index] = dat8[i + 0]; /* R */
- image->comps[1].data[index] = dat8[i + 1]; /* G */
- image->comps[2].data[index] = dat8[i + 2]; /* B */
- if (has_alpha) {
- image->comps[3].data[index] = dat8[i + 3];
- }
-
- if (parameters->cp_cinema) {
- /* Rounding 8 to 12 bits
- */
- image->comps[0].data[index] = image->comps[0].data[index] << 4 ;
- image->comps[1].data[index] = image->comps[1].data[index] << 4 ;
- image->comps[2].data[index] = image->comps[2].data[index] << 4 ;
- if (has_alpha) {
- image->comps[3].data[index] = image->comps[3].data[index] << 4 ;
- }
- }
- index++;
- }/*if(index*/
- else {
- break;
- }
- }/*for(i )*/
- }/*if( tiBps == 8)*/
- else if (tiBps == 12) { /* CINEMA file */
- step = 9;
-
- for (i = 0; i < ssize; i += step) {
- if ((index < imgsize) & (index + 1 < imgsize)) {
- image->comps[0].data[index] = (dat8[i + 0] << 4) | (dat8[i + 1] >> 4);
- image->comps[1].data[index] = ((dat8[i + 1] & 0x0f) << 8) | dat8[i + 2];
-
- image->comps[2].data[index] = (dat8[i + 3] << 4) | (dat8[i + 4] >> 4);
- image->comps[0].data[index + 1] = ((dat8[i + 4] & 0x0f) << 8) | dat8[i + 5];
-
- image->comps[1].data[index + 1] = (dat8[i + 6] << 4) |
- (dat8[i + 7] >> 4);
- image->comps[2].data[index + 1] = ((dat8[i + 7] & 0x0f) << 8) | dat8[i + 8];
-
- index += 2;
- } else {
- break;
- }
- }/*for(i )*/
- }
- }/*for(strip = 0; )*/
-
- _TIFFfree(buf);
- TIFFClose(tif);
-
- return image;
- }/*RGB(A)*/
-
- if (tiPhoto == PHOTOMETRIC_MINISBLACK) { /* GRAY(A) */
- numcomps = 1 + has_alpha;
- color_space = CLRSPC_GRAY;
-
- for (j = 0; j < numcomps; ++j) {
- cmptparm[j].prec = tiBps;
- cmptparm[j].bpp = tiBps;
- cmptparm[j].dx = subsampling_dx;
- cmptparm[j].dy = subsampling_dy;
- cmptparm[j].w = w;
- cmptparm[j].h = h;
- }
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
- if (!image) {
- TIFFClose(tif);
- return NULL;
- }
- /* set image offset and reference grid
- */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 :
- image->x0 + (w - 1) * subsampling_dx + 1;
- image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 :
- image->y0 + (h - 1) * subsampling_dy + 1;
-
- buf = _TIFFmalloc(TIFFStripSize(tif));
-
- strip_size = TIFFStripSize(tif);
- index = 0;
- imgsize = image->comps[0].w * image->comps[0].h ;
- /* Read the Image components
- */
- for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
- unsigned char *dat8;
- tsize_t i, ssize;
- int step;
-
- ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
- dat8 = (unsigned char*)buf;
-
- if (tiBps == 16) {
- step = 2 + has_alpha + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0];
- if (has_alpha) {
- image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2];
- }
- index++;
- } else {
- break;
- }
- }/*for(i )*/
- } else if (tiBps == 8) {
- step = 1 + has_alpha;
-
- for (i = 0; i < ssize; i += step) {
- if (index < imgsize) {
- image->comps[0].data[index] = dat8[i + 0];
- if (has_alpha) {
- image->comps[1].data[index] = dat8[i + 1];
- }
- index++;
- } else {
- break;
- }
- }/*for(i )*/
- }
- }/*for(strip = 0;*/
-
- _TIFFfree(buf);
- TIFFClose(tif);
-
- }/*GRAY(A)*/
-
- return image;
-
-}/* tiftoimage() */
-
-#endif /* OPJ_HAVE_LIBTIFF */
-
-/* -->> -->> -->> -->>
-
- RAW IMAGE FORMAT
-
- <<-- <<-- <<-- <<-- */
-
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp)
-{
- int subsampling_dx = parameters->subsampling_dx;
- int subsampling_dy = parameters->subsampling_dy;
-
- FILE *f = NULL;
- int i, compno, numcomps, w, h;
- OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t *cmptparm;
- opj_image_t * image = NULL;
- unsigned short ch;
-
- if ((!(raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp &
- raw_cp->rawBitDepth)) == 0) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stderr, "Aborting\n");
- return NULL;
- }
-
- f = fopen(filename, "rb");
- if (!f) {
- fprintf(stderr, "Failed to open %s for reading !!\n", filename);
- fprintf(stderr, "Aborting\n");
- return NULL;
- }
- numcomps = raw_cp->rawComp;
- color_space = CLRSPC_SRGB;
- w = raw_cp->rawWidth;
- h = raw_cp->rawHeight;
- cmptparm = (opj_image_cmptparm_t*) malloc(numcomps * sizeof(
- opj_image_cmptparm_t));
-
- /* initialize image components */
- memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
- for (i = 0; i < numcomps; i++) {
- cmptparm[i].prec = raw_cp->rawBitDepth;
- cmptparm[i].bpp = raw_cp->rawBitDepth;
- cmptparm[i].sgnd = raw_cp->rawSigned;
- cmptparm[i].dx = subsampling_dx;
- cmptparm[i].dy = subsampling_dy;
- cmptparm[i].w = w;
- cmptparm[i].h = h;
- }
- /* create the image */
- image = opj_image_create(numcomps, &cmptparm[0], color_space);
- if (!image) {
- fclose(f);
- return NULL;
- }
- /* set image offset and reference grid */
- image->x0 = parameters->image_offset_x0;
- image->y0 = parameters->image_offset_y0;
- image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
- image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
-
- if (raw_cp->rawBitDepth <= 8) {
- unsigned char value = 0;
- for (compno = 0; compno < numcomps; compno++) {
- for (i = 0; i < w * h; i++) {
- if (!fread(&value, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- fclose(f);
- return NULL;
- }
- image->comps[compno].data[i] = raw_cp->rawSigned ? (char)value : value;
- }
- }
- } else if (raw_cp->rawBitDepth <= 16) {
- unsigned short value;
- for (compno = 0; compno < numcomps; compno++) {
- for (i = 0; i < w * h; i++) {
- unsigned char temp;
- if (!fread(&temp, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- fclose(f);
- return NULL;
- }
- value = temp << 8;
- if (!fread(&temp, 1, 1, f)) {
- fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
- fclose(f);
- return NULL;
- }
- value += temp;
- image->comps[compno].data[i] = raw_cp->rawSigned ? (short)value : value;
- }
- }
- } else {
- fprintf(stderr,
- "OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
- fclose(f);
- return NULL;
- }
-
- if (fread(&ch, 1, 1, f)) {
- fprintf(stderr, "Warning. End of raw file not reached... processing anyway\n");
- }
- fclose(f);
-
- return image;
-}
-
-int imagetoraw(opj_image_t * image, const char *outfile)
-{
- FILE *rawFile = NULL;
- size_t res;
- int compno;
- int w, h;
- int line, row;
- int *ptr;
-
- if ((image->numcomps * image->x1 * image->y1) == 0) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- return 1;
- }
-
- rawFile = fopen(outfile, "wb");
- if (!rawFile) {
- fprintf(stderr, "Failed to open %s for writing !!\n", outfile);
- return 1;
- }
-
- fprintf(stdout, "Raw image characteristics: %d components\n", image->numcomps);
-
- for (compno = 0; compno < image->numcomps; compno++) {
- fprintf(stdout, "Component %d characteristics: %dx%dx%d %s\n", compno,
- image->comps[compno].w,
- image->comps[compno].h, image->comps[compno].prec,
- image->comps[compno].sgnd == 1 ? "signed" : "unsigned");
-
- w = image->comps[compno].w;
- h = image->comps[compno].h;
-
- if (image->comps[compno].prec <= 8) {
- if (image->comps[compno].sgnd == 1) {
- signed char curr;
- int mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = (signed char)(*ptr & mask);
- res = fwrite(&curr, sizeof(signed char), 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- ptr++;
- }
- }
- } else if (image->comps[compno].sgnd == 0) {
- unsigned char curr;
- int mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- curr = (unsigned char)(*ptr & mask);
- res = fwrite(&curr, sizeof(unsigned char), 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- ptr++;
- }
- }
- }
- } else if (image->comps[compno].prec <= 16) {
- if (image->comps[compno].sgnd == 1) {
- signed short int curr;
- int mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- unsigned char temp;
- curr = (signed short int)(*ptr & mask);
- temp = (unsigned char)(curr >> 8);
- res = fwrite(&temp, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- temp = (unsigned char) curr;
- res = fwrite(&temp, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- ptr++;
- }
- }
- } else if (image->comps[compno].sgnd == 0) {
- unsigned short int curr;
- int mask = (1 << image->comps[compno].prec) - 1;
- ptr = image->comps[compno].data;
- for (line = 0; line < h; line++) {
- for (row = 0; row < w; row++) {
- unsigned char temp;
- curr = (unsigned short int)(*ptr & mask);
- temp = (unsigned char)(curr >> 8);
- res = fwrite(&temp, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- temp = (unsigned char) curr;
- res = fwrite(&temp, 1, 1, rawFile);
- if (res < 1) {
- fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
- return 1;
- }
- ptr++;
- }
- }
- }
- } else if (image->comps[compno].prec <= 32) {
- fprintf(stderr, "More than 16 bits per component no handled yet\n");
- return 1;
- } else {
- fprintf(stderr, "Error: invalid precision: %d\n", image->comps[compno].prec);
- return 1;
- }
- }
- fclose(rawFile);
- return 0;
-}
-
-#ifdef OPJ_HAVE_LIBPNG
-
-#define PNG_MAGIC "\x89PNG\x0d\x0a\x1a\x0a"
-#define MAGIC_SIZE 8
-/* PNG allows bits per sample: 1, 2, 4, 8, 16 */
-
-opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params)
-{
- png_structp png;
- png_infop info;
- double gamma, display_exponent;
- int bit_depth, interlace_type, compression_type, filter_type;
- int unit;
- png_uint_32 resx, resy;
- unsigned int i, j;
- png_uint_32 width, height;
- int color_type, has_alpha, is16;
- unsigned char *s;
- FILE *reader;
- unsigned char **rows;
- /* j2k: */
- opj_image_t *image;
- opj_image_cmptparm_t cmptparm[4];
- int sub_dx, sub_dy;
- unsigned int nr_comp;
- int *r, *g, *b, *a;
- unsigned char sigbuf[8];
-
- if ((reader = fopen(read_idf, "rb")) == NULL) {
- fprintf(stderr, "pngtoimage: can not open %s\n", read_idf);
- return NULL;
- }
- image = NULL;
- png = NULL;
- rows = NULL;
-
- if (fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
- || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) {
- fprintf(stderr, "pngtoimage: %s is no valid PNG file\n", read_idf);
- goto fin;
- }
- /* libpng-VERSION/example.c:
- * PC : screen_gamma = 2.2;
- * Mac: screen_gamma = 1.7 or 1.0;
- */
- display_exponent = 2.2;
-
- if ((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL)) == NULL) {
- goto fin;
- }
- if ((info = png_create_info_struct(png)) == NULL) {
- goto fin;
- }
-
- if (setjmp(png_jmpbuf(png))) {
- goto fin;
- }
-
- png_init_io(png, reader);
- png_set_sig_bytes(png, MAGIC_SIZE);
-
- png_read_info(png, info);
-
- if (png_get_IHDR(png, info, &width, &height,
- &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_type) == 0) {
- goto fin;
- }
-
- /* png_set_expand():
- * 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.
- */
- if (color_type == PNG_COLOR_TYPE_PALETTE) {
- png_set_expand(png);
- } else if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) {
- png_set_expand(png);
- }
-
- if (png_get_valid(png, info, PNG_INFO_tRNS)) {
- png_set_expand(png);
- }
-
- is16 = (bit_depth == 16);
-
- /* GRAY => RGB; GRAY_ALPHA => RGBA
- */
- if (color_type == PNG_COLOR_TYPE_GRAY
- || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
- png_set_gray_to_rgb(png);
- color_type =
- (color_type == PNG_COLOR_TYPE_GRAY ? PNG_COLOR_TYPE_RGB :
- PNG_COLOR_TYPE_RGB_ALPHA);
- }
- if (!png_get_gAMA(png, info, &gamma)) {
- gamma = 0.45455;
- }
-
- png_set_gamma(png, display_exponent, gamma);
-
- png_read_update_info(png, info);
-
- png_get_pHYs(png, info, &resx, &resy, &unit);
-
- color_type = png_get_color_type(png, info);
-
- has_alpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA);
-
- nr_comp = 3 + has_alpha;
-
- bit_depth = png_get_bit_depth(png, info);
-
- rows = (unsigned char**)calloc(height + 1, sizeof(unsigned char*));
- for (i = 0; i < height; ++i) {
- rows[i] = (unsigned char*)malloc(png_get_rowbytes(png, info));
- }
-
- png_read_image(png, rows);
-
- memset(&cmptparm, 0, 4 * sizeof(opj_image_cmptparm_t));
-
- sub_dx = params->subsampling_dx;
- sub_dy = params->subsampling_dy;
-
- for (i = 0; i < nr_comp; ++i) {
- cmptparm[i].prec = bit_depth;
- /* bits_per_pixel: 8 or 16 */
- cmptparm[i].bpp = bit_depth;
- cmptparm[i].sgnd = 0;
- cmptparm[i].dx = sub_dx;
- cmptparm[i].dy = sub_dy;
- cmptparm[i].w = width;
- cmptparm[i].h = height;
- }
-
- image = opj_image_create(nr_comp, &cmptparm[0], CLRSPC_SRGB);
-
- if (image == NULL) {
- goto fin;
- }
-
- image->x0 = params->image_offset_x0;
- image->y0 = params->image_offset_y0;
- image->x1 = image->x0 + (width - 1) * sub_dx + 1 + image->x0;
- image->y1 = image->y0 + (height - 1) * sub_dy + 1 + image->y0;
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- a = image->comps[3].data;
-
- for (i = 0; i < height; ++i) {
- s = rows[i];
-
- for (j = 0; j < width; ++j) {
- if (is16) {
- *r++ = s[0] << 8 | s[1];
- s += 2;
-
- *g++ = s[0] << 8 | s[1];
- s += 2;
-
- *b++ = s[0] << 8 | s[1];
- s += 2;
-
- if (has_alpha) {
- *a++ = s[0] << 8 | s[1];
- s += 2;
- }
-
- continue;
- }
- *r++ = *s++;
- *g++ = *s++;
- *b++ = *s++;
-
- if (has_alpha) {
- *a++ = *s++;
- }
- }
- }
-fin:
- if (rows) {
- for (i = 0; i < height; ++i) {
- free(rows[i]);
- }
- free(rows);
- }
- if (png) {
- png_destroy_read_struct(&png, &info, NULL);
- }
-
- fclose(reader);
-
- return image;
-
-}/* pngtoimage() */
-
-int imagetopng(opj_image_t * image, const char *write_idf)
-{
- FILE *writer;
- png_structp png;
- png_infop info;
- int *red, *green, *blue, *alpha;
- unsigned char *row_buf, *d;
- int has_alpha, width, height, nr_comp, color_type;
- int adjustR, adjustG, adjustB, adjustA, x, y, fails;
- int prec, ushift, dshift, is16, force16, force8;
- unsigned short mask = 0xffff;
- png_color_8 sig_bit;
-
- is16 = force16 = force8 = ushift = dshift = 0;
- fails = 1;
- prec = image->comps[0].prec;
- nr_comp = image->numcomps;
-
- if (prec > 8 && prec < 16) {
- ushift = 16 - prec;
- dshift = prec - ushift;
- prec = 16;
- force16 = 1;
- } else if (prec < 8 && nr_comp > 1) { /* GRAY_ALPHA, RGB, RGB_ALPHA */
- ushift = 8 - prec;
- dshift = 8 - ushift;
- prec = 8;
- force8 = 1;
- }
-
- if (prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) {
- fprintf(stderr, "imagetopng: can not create %s"
- "\n\twrong bit_depth %d\n", write_idf, prec);
- return fails;
- }
- writer = fopen(write_idf, "wb");
-
- if (writer == NULL) {
- return fails;
- }
-
- info = NULL;
- has_alpha = 0;
-
- /* 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 = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL);
- /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
-
- if (png == NULL) {
- goto fin;
- }
-
- /* Allocate/initialize the image information data. REQUIRED
- */
- info = png_create_info_struct(png);
-
- if (info == NULL) {
- goto fin;
- }
-
- /* Set error handling. REQUIRED if you are not supplying your own
- * error handling functions in the png_create_write_struct() call.
- */
- if (setjmp(png_jmpbuf(png))) {
- goto fin;
- }
-
- /* I/O initialization functions is REQUIRED
- */
- png_init_io(png, writer);
-
- /* 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
- *
- * ERRORS:
- *
- * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
- * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
- *
- */
- png_set_compression_level(png, Z_BEST_COMPRESSION);
-
- if (prec == 16) {
- mask = 0xffff;
- } else if (prec == 8) {
- mask = 0x00ff;
- } else if (prec == 4) {
- mask = 0x000f;
- } else if (prec == 2) {
- mask = 0x0003;
- } else if (prec == 1) {
- mask = 0x0001;
- }
-
- if (nr_comp >= 3
- && image->comps[0].dx == image->comps[1].dx
- && image->comps[1].dx == image->comps[2].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[1].dy == image->comps[2].dy
- && image->comps[0].prec == image->comps[1].prec
- && image->comps[1].prec == image->comps[2].prec) {
- int v;
-
- has_alpha = (nr_comp > 3);
-
- is16 = (prec == 16);
-
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- red = image->comps[0].data;
- green = image->comps[1].data;
- blue = image->comps[2].data;
-
- sig_bit.red = sig_bit.green = sig_bit.blue = prec;
-
- if (has_alpha) {
- sig_bit.alpha = prec;
- alpha = image->comps[3].data;
- color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- adjustA = (image->comps[3].sgnd ? 1 << (image->comps[3].prec - 1) : 0);
- } else {
- sig_bit.alpha = 0;
- alpha = NULL;
- color_type = PNG_COLOR_TYPE_RGB;
- adjustA = 0;
- }
- png_set_sBIT(png, info, &sig_bit);
-
- png_set_IHDR(png, info, width, height, prec,
- color_type,
- PNG_INTERLACE_NONE,
- PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
- /*=============================*/
- png_write_info(png, info);
- /*=============================*/
- if (prec < 8) {
- png_set_packing(png);
- }
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
- adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-
- row_buf = (unsigned char*)malloc(width * nr_comp * 2);
-
- for (y = 0; y < height; ++y) {
- d = row_buf;
-
- for (x = 0; x < width; ++x) {
- if (is16) {
- v = *red + adjustR;
- ++red;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
-
- v = *green + adjustG;
- ++green;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
-
- v = *blue + adjustB;
- ++blue;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
-
- if (has_alpha) {
- v = *alpha + adjustA;
- ++alpha;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
- }
- continue;
- }/* if(is16) */
-
- v = *red + adjustR;
- ++red;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
-
- v = *green + adjustG;
- ++green;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
-
- v = *blue + adjustB;
- ++blue;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
-
- if (has_alpha) {
- v = *alpha + adjustA;
- ++alpha;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
- }
- } /* for(x) */
-
- png_write_row(png, row_buf);
-
- } /* for(y) */
- free(row_buf);
-
- }/* nr_comp >= 3 */
- else if (nr_comp == 1 /* GRAY */
- || (nr_comp == 2 /* GRAY_ALPHA */
- && image->comps[0].dx == image->comps[1].dx
- && image->comps[0].dy == image->comps[1].dy
- && image->comps[0].prec == image->comps[1].prec)) {
- int v;
-
- red = image->comps[0].data;
-
- sig_bit.gray = prec;
- sig_bit.red = sig_bit.green = sig_bit.blue = sig_bit.alpha = 0;
- alpha = NULL;
- adjustA = 0;
- color_type = PNG_COLOR_TYPE_GRAY;
-
- if (nr_comp == 2) {
- has_alpha = 1;
- sig_bit.alpha = prec;
- alpha = image->comps[1].data;
- color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
- adjustA = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
- }
- width = image->comps[0].w;
- height = image->comps[0].h;
-
- png_set_IHDR(png, info, width, height, sig_bit.gray,
- color_type,
- PNG_INTERLACE_NONE,
- PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
- png_set_sBIT(png, info, &sig_bit);
- /*=============================*/
- png_write_info(png, info);
- /*=============================*/
- adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-
- if (prec < 8) {
- png_set_packing(png);
- }
-
- if (prec > 8) {
- row_buf = (unsigned char*)
- malloc(width * nr_comp * sizeof(unsigned short));
-
- for (y = 0; y < height; ++y) {
- d = row_buf;
-
- for (x = 0; x < width; ++x) {
- v = *red + adjustR;
- ++red;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
-
- if (has_alpha) {
- v = *alpha++;
-
- if (force16) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v >> 8);
- *d++ = (unsigned char)v;
- }
- }/* for(x) */
- png_write_row(png, row_buf);
-
- } /* for(y) */
- free(row_buf);
- } else { /* prec <= 8 */
- row_buf = (unsigned char*)calloc(width, nr_comp * 2);
-
- for (y = 0; y < height; ++y) {
- d = row_buf;
-
- for (x = 0; x < width; ++x) {
- v = *red + adjustR;
- ++red;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
-
- if (has_alpha) {
- v = *alpha + adjustA;
- ++alpha;
-
- if (force8) {
- v = (v << ushift) + (v >> dshift);
- }
-
- *d++ = (unsigned char)(v & mask);
- }
- }/* for(x) */
-
- png_write_row(png, row_buf);
-
- } /* for(y) */
- free(row_buf);
- }
- } else {
- fprintf(stderr, "imagetopng: can not create %s\n", write_idf);
- goto fin;
- }
- png_write_end(png, info);
-
- fails = 0;
-
-fin:
-
- if (png) {
- png_destroy_write_struct(&png, &info);
- }
- fclose(writer);
-
- if (fails) {
- remove(write_idf);
- }
-
- return fails;
-}/* imagetopng() */
-#endif /* OPJ_HAVE_LIBPNG */
diff --git a/openjpeg/src/bin/jpwl/convert.h b/openjpeg/src/bin/jpwl/convert.h
deleted file mode 100644
index 7f1a5bc8..00000000
--- a/openjpeg/src/bin/jpwl/convert.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef __J2K_CONVERT_H
-#define __J2K_CONVERT_H
-
-/**@name RAW image encoding parameters */
-/*@{*/
-typedef struct raw_cparameters {
- /** width of the raw image */
- int rawWidth;
- /** height of the raw image */
- int rawHeight;
- /** components of the raw image */
- int rawComp;
- /** bit depth of the raw image */
- int rawBitDepth;
- /** signed/unsigned raw image */
- opj_bool rawSigned;
- /*@}*/
-} raw_cparameters_t;
-
-/* TGA conversion */
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotga(opj_image_t * image, const char *outfile);
-
-/* BMP conversion */
-opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetobmp(opj_image_t *image, const char *outfile);
-
-/* TIFF conversion*/
-opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetotif(opj_image_t *image, const char *outfile);
-/**
-Load a single image component encoded in PGX file format
-@param filename Name of the PGX file to load
-@param parameters *List ?*
-@return Returns a greyscale image if successful, returns NULL otherwise
-*/
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopgx(opj_image_t *image, const char *outfile);
-
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
-int imagetopnm(opj_image_t *image, const char *outfile);
-
-/* RAW conversion */
-int imagetoraw(opj_image_t * image, const char *outfile);
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
- raw_cparameters_t *raw_cp);
-
-/* PNG conversion*/
-extern int imagetopng(opj_image_t *image, const char *write_idf);
-extern opj_image_t* pngtoimage(const char *filename,
- opj_cparameters_t *parameters);
-
-#endif /* __J2K_CONVERT_H */
-
diff --git a/openjpeg/src/bin/jpwl/index.c b/openjpeg/src/bin/jpwl/index.c
deleted file mode 100644
index 6c6c8fc0..00000000
--- a/openjpeg/src/bin/jpwl/index.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include "openjpeg.h"
-#include "index.h"
-
-/* ------------------------------------------------------------------------------------ */
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index)
-{
- int tileno, compno, layno, resno, precno, pack_nb, x, y;
- FILE *stream = NULL;
- double total_disto = 0;
- /* UniPG>> */
- int tilepartno;
- char disto_on, numpix_on;
-
-#ifdef USE_JPWL
- if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) {
- return 0;
- }
-#endif /* USE_JPWL */
- /* <<UniPG */
-
- if (!cstr_info) {
- return 1;
- }
-
- stream = fopen(index, "w");
- if (!stream) {
- fprintf(stderr, "failed to open index file [%s] for writing\n", index);
- return 1;
- }
-
- if (cstr_info->tile[0].distotile) {
- disto_on = 1;
- } else {
- disto_on = 0;
- }
-
- if (cstr_info->tile[0].numpix) {
- numpix_on = 1;
- } else {
- numpix_on = 0;
- }
-
- fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
- fprintf(stream, "%d\n", cstr_info->prog);
- fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
- fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
- fprintf(stream, "%d\n", cstr_info->numcomps);
- fprintf(stream, "%d\n", cstr_info->numlayers);
- fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
-
- for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
- fprintf(stream, "[%d,%d] ",
- (1 << cstr_info->tile[0].pdx[resno]),
- (1 << cstr_info->tile[0].pdx[resno])); /* based on tile 0 and component 0 */
- }
-
- fprintf(stream, "\n");
- /* UniPG>> */
- fprintf(stream, "%d\n", cstr_info->main_head_start);
- /* <<UniPG */
- fprintf(stream, "%d\n", cstr_info->main_head_end);
- fprintf(stream, "%d\n", cstr_info->codestream_size);
-
- fprintf(stream, "\nINFO ON TILES\n");
- fprintf(stream, "tileno start_pos end_hd end_tile nbparts");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- if (numpix_on) {
- fprintf(stream, " nbpix");
- }
- if (disto_on && numpix_on) {
- fprintf(stream, " disto/nbpix");
- }
- fprintf(stream, "\n");
-
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- fprintf(stream, "%4d %9d %9d %9d %9d",
- cstr_info->tile[tileno].tileno,
- cstr_info->tile[tileno].start_pos,
- cstr_info->tile[tileno].end_header,
- cstr_info->tile[tileno].end_pos,
- cstr_info->tile[tileno].num_tps);
- if (disto_on) {
- fprintf(stream, " %9e", cstr_info->tile[tileno].distotile);
- }
- if (numpix_on) {
- fprintf(stream, " %9d", cstr_info->tile[tileno].numpix);
- }
- if (disto_on && numpix_on) {
- fprintf(stream, " %9e", cstr_info->tile[tileno].distotile /
- cstr_info->tile[tileno].numpix);
- }
- fprintf(stream, "\n");
- }
-
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- int start_pos, end_ph_pos, end_pos;
- double disto = 0;
- int max_numdecompos = 0;
- pack_nb = 0;
-
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- if (max_numdecompos < cstr_info->numdecompos[compno]) {
- max_numdecompos = cstr_info->numdecompos[compno];
- }
- }
-
- fprintf(stream, "\nTILE %d DETAILS\n", tileno);
- fprintf(stream,
- "part_nb tileno start_pack num_packs start_pos end_tph_pos end_pos\n");
- for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
- fprintf(stream, "%4d %9d %9d %9d %9d %11d %9d\n",
- tilepartno, tileno,
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
- cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
- cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
- cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
- );
-
- if (cstr_info->prog == LRCP) { /* LRCP */
- fprintf(stream,
- "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int prec_max;
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- prec_max = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d",
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* LRCP */
-
- else if (cstr_info->prog == RLCP) { /* RLCP */
- fprintf(stream,
- "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int prec_max;
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- prec_max = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d",
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* RLCP */
-
- else if (cstr_info->prog == RPCL) { /* RPCL */
-
- fprintf(stream,
- "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- for (precno = 0; precno < numprec; precno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (resno > cstr_info->numdecompos[compno]) {
- break;
- }
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d",
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* precno */
- } /* compno */
- } /* resno */
- } /* RPCL */
-
- else if (cstr_info->prog == PCRL) { /* PCRL */
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
-
- /* Count the maximum number of precincts */
- int max_numprec = 0;
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- if (numprec > max_numprec) {
- max_numprec = numprec;
- }
- }
-
- fprintf(stream,
- "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (precno = 0; precno < max_numprec; precno++) {
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (precno >= numprec) {
- continue;
- }
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d",
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* resno */
- } /* compno */
- } /* precno */
- } /* PCRL */
-
- else { /* CPRL */
- /* Count the maximum number of precincts */
- int max_numprec = 0;
- for (resno = 0; resno < max_numdecompos + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- if (numprec > max_numprec) {
- max_numprec = numprec;
- }
- }
-
- fprintf(stream,
- "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");
- if (disto_on) {
- fprintf(stream, " disto");
- }
- fprintf(stream, "\n");
-
- for (compno = 0; compno < cstr_info->numcomps; compno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
- int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
- (float)cstr_info->tw) * cstr_info->tile_y;
- int x1 = x0 + cstr_info->tile_x;
- int y1 = y0 + cstr_info->tile_y;
-
- for (precno = 0; precno < max_numprec; precno++) {
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
- int numprec = cstr_info->tile[tileno].pw[resno] *
- cstr_info->tile[tileno].ph[resno];
- int pcnx = cstr_info->tile[tileno].pw[resno];
- int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
- cstr_info->numdecompos[compno] - resno);
- int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
- cstr_info->numdecompos[compno] - resno);
- int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
- int precno_y = (int) floor((float)precno / (float)pcnx);
- if (precno >= numprec) {
- continue;
- }
-
- for (y = y0; y < y1; y++) {
- if (precno_y * pcy == y) {
- for (x = x0; x < x1; x++) {
- if (precno_x * pcx == x) {
- for (layno = 0; layno < cstr_info->numlayers; layno++) {
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d",
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);
- if (disto_on) {
- fprintf(stream, " %8e", disto);
- }
- fprintf(stream, "\n");
- total_disto += disto;
- pack_nb++;
- }
- }
- }/* x = x0..x1 */
- }
- } /* y = y0..y1 */
- } /* resno */
- } /* precno */
- } /* compno */
- } /* CPRL */
- } /* tileno */
-
- if (disto_on) {
- fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
- fprintf(stream, "%.8e\n", total_disto); /* SE totale */
- }
- /* UniPG>> */
- /* print the markers' list */
- if (cstr_info->marknum) {
- fprintf(stream, "\nMARKER LIST\n");
- fprintf(stream, "%d\n", cstr_info->marknum);
- fprintf(stream, "type\tstart_pos length\n");
- for (x = 0; x < cstr_info->marknum; x++) {
- fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type,
- cstr_info->marker[x].pos, cstr_info->marker[x].len);
- }
- }
- /* <<UniPG */
- fclose(stream);
-
- fprintf(stderr, "Generated index file %s\n", index);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jpwl/index.h b/openjpeg/src/bin/jpwl/index.h
deleted file mode 100644
index b461e91b..00000000
--- a/openjpeg/src/bin/jpwl/index.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __J2K_INDEX_H
-#define __J2K_INDEX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-Write a structured index to a file
-@param cstr_info Codestream information
-@param index Index filename
-@return Returns 0 if successful, returns 1 otherwise
-*/
-int write_index_file(opj_codestream_info_t *cstr_info, char *index);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __J2K_INDEX_H */
-
diff --git a/openjpeg/src/bin/jpwl/opj_jpwl_compress.c b/openjpeg/src/bin/jpwl/opj_jpwl_compress.c
deleted file mode 100644
index 28f0670c..00000000
--- a/openjpeg/src/bin/jpwl/opj_jpwl_compress.c
+++ /dev/null
@@ -1,1951 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#else
-#include <strings.h>
-#endif /* _WIN32 */
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#include "format_defs.h"
-
-#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
-#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
-#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
-#define COMP_48_CS 520833 /*Maximum size per color component for 2K @ 48fps*/
-
-typedef struct dircnt {
- /** Buffer for holding images read from Directory*/
- char *filename_buf;
- /** Pointer to the buffer*/
- char **filename;
-} dircnt_t;
-
-typedef struct img_folder {
- /** The directory path of the folder containing input images*/
- char *imgdirpath;
- /** Output format*/
- char *out_format;
- /** Enable option*/
- char set_imgdir;
- /** Enable Cod Format for output*/
- char set_out_format;
- /** User specified rate stored in case of cinema option*/
- float *rates;
-} img_fol_t;
-
-static void encode_help_display(void)
-{
- fprintf(stdout, "HELP for opj_jpwl_compress\n----\n\n");
- fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
- /* UniPG>> */
- fprintf(stdout, "List of parameters for the JPEG 2000 "
-#ifdef USE_JPWL
- "+ JPWL "
-#endif /* USE_JPWL */
- "encoder:\n");
- /* <<UniPG */
- fprintf(stdout, "\n");
- fprintf(stdout, "REMARKS:\n");
- fprintf(stdout, "---------\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
- fprintf(stdout, "COD and QCD never appear in the tile_header.\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "By default:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " * Lossless\n");
- fprintf(stdout, " * 1 tile\n");
- fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
- fprintf(stdout, " * Size of code-block : 64 x 64\n");
- fprintf(stdout, " * Number of resolutions: 6\n");
- fprintf(stdout, " * No SOP marker in the codestream\n");
- fprintf(stdout, " * No EPH marker in the codestream\n");
- fprintf(stdout, " * No sub-sampling in x or y direction\n");
- fprintf(stdout, " * No mode switch activated\n");
- fprintf(stdout, " * Progression order: LRCP\n");
- fprintf(stdout, " * No index file\n");
- fprintf(stdout, " * No ROI upshifted\n");
- fprintf(stdout, " * No offset of the origin of the image\n");
- fprintf(stdout, " * No offset of the origin of the tiles\n");
- fprintf(stdout, " * Reversible DWT 5-3\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout, " * No JPWL protection\n");
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "\n");
- fprintf(stdout, "Parameters:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Required Parameters (except with -h):\n");
- fprintf(stdout, "One of the two options -ImgDir or -i must be used\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-ImgDir : Image file Directory path (example ../Images) \n");
- fprintf(stdout, " When using this option -OutFor must be used\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-OutFor \n");
- fprintf(stdout, " REQUIRED only if -ImgDir is used\n");
- fprintf(stdout, " Need to specify only format without filename <BMP> \n");
- fprintf(stdout,
- " Currently accepts PBM, PGM, PPM, PNM, PAM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-i : source file (-i source.pnm also *pbm, *.pgm, *.ppm, *.pam, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n");
- fprintf(stdout, " When using this option -o must be used\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-o : destination file (-o dest.j2k or .jp2) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Optional Parameters:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-h : display the help information \n ");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-cinema2K : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n");
- fprintf(stdout,
- " Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-cinema4K : Digital Cinema 4K profile compliant codestream for 4K resolution \n");
- fprintf(stdout, " Frames per second not required. Default value is 24fps\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-r : different compression ratios for successive layers (-r 20,10,5)\n ");
- fprintf(stdout,
- " - The rate specified for each quality level is the desired \n");
- fprintf(stdout, " compression factor.\n");
- fprintf(stdout, " Example: -r 20,10,1 means quality 1: compress 20x, \n");
- fprintf(stdout,
- " quality 2: compress 10x and quality 3: compress lossless\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- " (options -r and -q cannot be used together)\n ");
- fprintf(stdout, "\n");
-
- fprintf(stdout,
- "-q : different psnr for successive layers (-q 30,40,50) \n ");
-
- fprintf(stdout,
- " (options -r and -q cannot be used together)\n ");
-
- fprintf(stdout, "\n");
- fprintf(stdout, "-n : number of resolutions (-n 3) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-b : size of code block (-b 32,32) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-c : size of precinct (-c 128,128) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-t : size of tile (-t 512,512) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-s : subsampling factor (-s 2,2) [-s X,Y] \n");
- fprintf(stdout, " Remark: subsampling bigger than 2 can produce error\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-POC : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n");
- fprintf(stdout, " Example: T1=0,0,1,5,3,CPRL \n");
- fprintf(stdout,
- " : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-SOP : write SOP marker before each packet \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-EPH : write EPH marker after each header packet \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
- fprintf(stdout,
- " 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
- fprintf(stdout,
- " Indicate multiple modes by adding their values. \n");
- fprintf(stdout,
- " ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-TP : divide packets of every tile into tile-parts (-TP R) [R, L, C]\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-x : create an index file *.Idx (-x index_name.Idx) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-ROI : c=%%d,U=%%d : quantization indices upshifted \n");
- fprintf(stdout, " for component c=%%d [%%d = 0,1,2]\n");
- fprintf(stdout,
- " with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-d : offset of the origin of the image (-d 150,300) \n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-T : offset of the origin of the tiles (-T 100,75) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-I : use the irreversible DWT 9-7 (-I) \n");
- fprintf(stdout, "\n");
- fprintf(stdout, "-F : characteristics of the raw input image\n");
- fprintf(stdout,
- " -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stdout,
- " Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "-jpip : write jpip codestream index box in JP2 output file\n");
- fprintf(stdout, " NOTICE: currently supports only RPCL order\n");
- fprintf(stdout, "\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout,
- "-W : adoption of JPWL (Part 11) capabilities (-W params)\n");
- fprintf(stdout,
- " The parameters can be written and repeated in any order:\n");
- fprintf(stdout,
- " [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
- fprintf(stdout,
- " ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- " h selects the header error protection (EPB): 'type' can be\n");
- fprintf(stdout,
- " [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout,
- " if 'tilepart' is absent, it is for main and tile headers\n");
- fprintf(stdout,
- " if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout,
- " onwards, up to the next h<> spec, or to the last tilepart\n");
- fprintf(stdout, " in the codestream (max. %d specs)\n",
- JPWL_MAX_NO_TILESPECS);
- fprintf(stdout, "\n");
- fprintf(stdout,
- " p selects the packet error protection (EEP/UEP with EPBs)\n");
- fprintf(stdout, " to be applied to raw data: 'type' can be\n");
- fprintf(stdout,
- " [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout,
- " if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
- fprintf(stdout,
- " if 'tilepart:pack' is present, it applies from that tile\n");
- fprintf(stdout,
- " and that packet onwards, up to the next packet spec\n");
- fprintf(stdout,
- " or to the last packet in the last tilepart in the stream\n");
- fprintf(stdout, " (max. %d specs)\n",
- JPWL_MAX_NO_PACKSPECS);
- fprintf(stdout, "\n");
- fprintf(stdout,
- " s enables sensitivity data insertion (ESD): 'method' can be\n");
- fprintf(stdout,
- " [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
- fprintf(stdout,
- " 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
- fprintf(stdout,
- " if 'tilepart' is absent, it is for main header only\n");
- fprintf(stdout,
- " if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout,
- " onwards, up to the next s<> spec, or to the last tilepart\n");
- fprintf(stdout, " in the codestream (max. %d specs)\n",
- JPWL_MAX_NO_TILESPECS);
- fprintf(stdout, "\n");
- fprintf(stdout,
- " g determines the addressing mode: <range> can be\n");
- fprintf(stdout, " [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- " a determines the size of data addressing: <addr> can be\n");
- fprintf(stdout,
- " 2/4 bytes (small/large codestreams). If not set, auto-mode\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- " z determines the size of sensitivity values: <size> can be\n");
- fprintf(stdout,
- " 1/2 bytes, for the transformed pseudo-floating point value\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " ex.:\n");
- fprintf(stdout,
- " h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
- fprintf(stdout, " s0=6,s3=-1,a=0,g=1,z=1\n");
- fprintf(stdout, " means\n");
- fprintf(stdout,
- " predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
- fprintf(stdout,
- " CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
- fprintf(stdout,
- " UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
- fprintf(stdout,
- " UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
- fprintf(stdout,
- " UEP rs default for packets of tilepart 1,\n");
- fprintf(stdout,
- " no UEP for packets 0 to 19 of tilepart 3,\n");
- fprintf(stdout,
- " UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
- fprintf(stdout, " relative sensitivity ESD for MH,\n");
- fprintf(stdout,
- " TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
- fprintf(stdout,
- " size of addresses and 1 byte for each sensitivity value\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " ex.:\n");
- fprintf(stdout, " h,s,p\n");
- fprintf(stdout, " means\n");
- fprintf(stdout,
- " default protection to headers (MH and TPHs) as well as\n");
- fprintf(stdout, " data packets, one ESD in MH\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- " N.B.: use the following recommendations when specifying\n");
- fprintf(stdout, " the JPWL parameters list\n");
- fprintf(stdout,
- " - when you use UEP, always pair the 'p' option with 'h'\n");
- fprintf(stdout, " \n");
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "IMPORTANT:\n");
- fprintf(stdout, "-----------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "The index file has the structure below:\n");
- fprintf(stdout, "---------------------------------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Image_height Image_width\n");
- fprintf(stdout, "progression order\n");
- fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
- fprintf(stdout, "Tiles_nb_X Tiles_nb_Y\n");
- fprintf(stdout, "Components_nb\n");
- fprintf(stdout, "Layers_nb\n");
- fprintf(stdout, "decomposition_levels\n");
- fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
- fprintf(stdout, " [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
- fprintf(stdout, "Main_header_start_position\n");
- fprintf(stdout, "Main_header_end_position\n");
- fprintf(stdout, "Codestream_size\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "INFO ON TILES\n");
- fprintf(stdout,
- "tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
- fprintf(stdout,
- "Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
- fprintf(stdout,
- "Tile_1 '' '' '' '' '' '' ''\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tile_Nt '' '' '' '' '' '' ''\n");
- fprintf(stdout, "...\n");
- fprintf(stdout, "TILE 0 DETAILS\n");
- fprintf(stdout, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
- fprintf(stdout, "...\n");
- fprintf(stdout, "Progression_string\n");
- fprintf(stdout,
- "pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
- fprintf(stdout,
- "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tpacket_Np '' '' '' '' '' '' '' ''\n");
-
- fprintf(stdout, "MaxDisto\n");
-
- fprintf(stdout, "TotalDisto\n\n");
-}
-
-static OPJ_PROG_ORDER give_progression(const char progression[4])
-{
- if (strncmp(progression, "LRCP", 4) == 0) {
- return LRCP;
- }
- if (strncmp(progression, "RLCP", 4) == 0) {
- return RLCP;
- }
- if (strncmp(progression, "RPCL", 4) == 0) {
- return RPCL;
- }
- if (strncmp(progression, "PCRL", 4) == 0) {
- return PCRL;
- }
- if (strncmp(progression, "CPRL", 4) == 0) {
- return CPRL;
- }
-
- return PROG_UNKNOWN;
-}
-
-static unsigned int get_num_images(char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- unsigned int num_images = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 0;
- }
-
- num_images = 0;
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
- num_images++;
- }
- return num_images;
-}
-
-static int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int i = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 1;
- } else {
- fprintf(stderr, "Folder opened successfully\n");
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
-
- strcpy(dirptr->filename[i], content->d_name);
- i++;
- }
- return 0;
-}
-
-static int get_file_format(char *filename)
-{
- unsigned int i;
- static const char *extension[] = {
- "pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "j2c", "jpc"
- };
- static const int format[] = {
- PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
- };
- char * ext = strrchr(filename, '.');
- if (ext == NULL) {
- return -1;
- }
- ext++;
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (strcasecmp(ext, extension[i]) == 0) {
- return format[i];
- }
- }
- return -1;
-}
-
-static char * get_file_name(char *name)
-{
- char *fname;
- fname = (char*)malloc(OPJ_PATH_LEN * sizeof(char));
- fname = strtok(name, ".");
- return fname;
-}
-
-static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_cparameters_t *parameters)
-{
- char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
- outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
- char *temp_p, temp1[OPJ_PATH_LEN] = "";
-
- strcpy(image_filename, dirptr->filename[imageno]);
- fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
- parameters->decod_format = get_file_format(image_filename);
- if (parameters->decod_format == -1) {
- return 1;
- }
- sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
- strncpy(parameters->infile, infilename, sizeof(infilename));
-
- /*Set output file*/
- strcpy(temp_ofname, get_file_name(image_filename));
- while ((temp_p = strtok(NULL, ".")) != NULL) {
- strcat(temp_ofname, temp1);
- sprintf(temp1, ".%s", temp_p);
- }
- if (img_fol->set_out_format == 1) {
- sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
- img_fol->out_format);
- strncpy(parameters->outfile, outfilename, sizeof(outfilename));
- }
- return 0;
-}
-
-static int initialise_4K_poc(opj_poc_t *POC, int numres)
-{
- POC[0].tile = 1;
- POC[0].resno0 = 0;
- POC[0].compno0 = 0;
- POC[0].layno1 = 1;
- POC[0].resno1 = numres - 1;
- POC[0].compno1 = 3;
- POC[0].prg1 = CPRL;
- POC[1].tile = 1;
- POC[1].resno0 = numres - 1;
- POC[1].compno0 = 0;
- POC[1].layno1 = 1;
- POC[1].resno1 = numres;
- POC[1].compno1 = 3;
- POC[1].prg1 = CPRL;
- return 2;
-}
-
-static void cinema_parameters(opj_cparameters_t *parameters)
-{
- parameters->tile_size_on = OPJ_FALSE;
- parameters->cp_tdx = 1;
- parameters->cp_tdy = 1;
-
- /*Tile part*/
- parameters->tp_flag = 'C';
- parameters->tp_on = 1;
-
- /*Tile and Image shall be at (0,0)*/
- parameters->cp_tx0 = 0;
- parameters->cp_ty0 = 0;
- parameters->image_offset_x0 = 0;
- parameters->image_offset_y0 = 0;
-
- /*Codeblock size= 32*32*/
- parameters->cblockw_init = 32;
- parameters->cblockh_init = 32;
- parameters->csty |= 0x01;
-
- /*The progression order shall be CPRL*/
- parameters->prog_order = CPRL;
-
- /* No ROI */
- parameters->roi_compno = -1;
-
- parameters->subsampling_dx = 1;
- parameters->subsampling_dy = 1;
-
- /* 9-7 transform */
- parameters->irreversible = 1;
-
-}
-
-static void cinema_setup_encoder(opj_cparameters_t *parameters,
- opj_image_t *image, img_fol_t *img_fol)
-{
- int i;
- float temp_rate;
-
- switch (parameters->cp_cinema) {
- case CINEMA2K_24:
- case CINEMA2K_48:
- if (parameters->numresolution > 6) {
- parameters->numresolution = 6;
- }
- if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))) {
- fprintf(stdout,
- "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
- "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
- image->comps[0].w, image->comps[0].h);
- parameters->cp_rsiz = STD_RSIZ;
- }
- break;
-
- case CINEMA4K_24:
- if (parameters->numresolution < 1) {
- parameters->numresolution = 1;
- } else if (parameters->numresolution > 7) {
- parameters->numresolution = 7;
- }
- if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))) {
- fprintf(stdout,
- "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
- "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
- image->comps[0].w, image->comps[0].h);
- parameters->cp_rsiz = STD_RSIZ;
- }
- parameters->numpocs = initialise_4K_poc(parameters->POC,
- parameters->numresolution);
- break;
- default :
- break;
- }
-
- switch (parameters->cp_cinema) {
- case CINEMA2K_24:
- case CINEMA4K_24:
- for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
- temp_rate = 0 ;
- if (img_fol->rates[i] == 0) {
- parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
- image->comps[0].h * image->comps[0].prec)) /
- (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- } else {
- temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
- image->comps[0].prec)) /
- (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
- if (temp_rate > CINEMA_24_CS) {
- parameters->tcp_rates[i] = ((float)(image->numcomps * image->comps[0].w *
- image->comps[0].h * image->comps[0].prec)) /
- (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- } else {
- parameters->tcp_rates[i] = img_fol->rates[i];
- }
- }
- }
- parameters->max_comp_size = COMP_24_CS;
- break;
-
- case CINEMA2K_48:
- for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
- temp_rate = 0 ;
- if (img_fol->rates[i] == 0) {
- parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
- image->comps[0].h * image->comps[0].prec)) /
- (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- } else {
- temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
- image->comps[0].prec)) /
- (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
- if (temp_rate > CINEMA_48_CS) {
- parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
- image->comps[0].h * image->comps[0].prec)) /
- (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- } else {
- parameters->tcp_rates[i] = img_fol->rates[i];
- }
- }
- }
- parameters->max_comp_size = COMP_48_CS;
- break;
- default:
- break;
- }
- parameters->cp_disto_alloc = 1;
-}
-
-/* ------------------------------------------------------------------------------------ */
-
-static int parse_cmdline_encoder(int argc, char **argv,
- opj_cparameters_t *parameters,
- img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename)
-{
- int i, j, totlen, c;
- opj_option_t long_option[] = {
- {"cinema2K", REQ_ARG, NULL, 'w'},
- {"cinema4K", NO_ARG, NULL, 'y'},
- {"ImgDir", REQ_ARG, NULL, 'z'},
- {"TP", REQ_ARG, NULL, 'u'},
- {"SOP", NO_ARG, NULL, 'S'},
- {"EPH", NO_ARG, NULL, 'E'},
- {"OutFor", REQ_ARG, NULL, 'O'},
- {"POC", REQ_ARG, NULL, 'P'},
- {"ROI", REQ_ARG, NULL, 'R'},
- {"jpip", NO_ARG, NULL, 'J'}
- };
-
- /* parse the command line */
- const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:J"
-#ifdef USE_JPWL
- "W:"
-#endif /* USE_JPWL */
- "h";
-
- totlen = sizeof(long_option);
- img_fol->set_out_format = 0;
- raw_cp->rawWidth = 0;
-
- do {
- c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = get_file_format(infile);
- switch (parameters->decod_format) {
- case PGX_DFMT:
- case PXM_DFMT:
- case BMP_DFMT:
- case TIF_DFMT:
- case RAW_DFMT:
- case TGA_DFMT:
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr,
- "!! Unrecognized format for infile : %s "
- "[accept only *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga] !!\n\n",
- infile);
- return 1;
- }
- strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case J2K_CFMT:
- case JP2_CFMT:
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
- return 1;
- }
- strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'O': { /* output format */
- char outformat[50];
- char *of = opj_optarg;
- sprintf(outformat, ".%s", of);
- img_fol->set_out_format = 1;
- parameters->cod_format = get_file_format(outformat);
- switch (parameters->cod_format) {
- case J2K_CFMT:
- case JP2_CFMT:
- img_fol->out_format = opj_optarg;
- break;
- default:
- fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");
- return 1;
- }
- }
- break;
-
-
- /* ----------------------------------------------------- */
-
-
- case 'r': { /* rates rates/distorsion */
- char *s = opj_optarg;
- parameters->tcp_numlayers = 0;
- while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
- 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_disto_alloc = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'F': { /* Raw image format parameters */
- char signo;
- char *s = opj_optarg;
- if (sscanf(s, "%d,%d,%d,%d,%c", &raw_cp->rawWidth, &raw_cp->rawHeight,
- &raw_cp->rawComp, &raw_cp->rawBitDepth, &signo) == 5) {
- if (signo == 's') {
- raw_cp->rawSigned = OPJ_TRUE;
- fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Signed\n", raw_cp->rawWidth,
- raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
- } else if (signo == 'u') {
- raw_cp->rawSigned = OPJ_FALSE;
- fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Unsigned\n",
- raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
- } else {
- fprintf(stderr,
- "\nError: invalid raw image parameters: Unknown sign of raw file\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stderr, "Aborting\n");
- }
- } else {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stderr, "Aborting\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'q': { /* add fixed_quality */
- char *s = opj_optarg;
- while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
- == 1) {
- parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->cp_fixed_quality = 1;
- }
- break;
-
- /* dda */
- /* ----------------------------------------------------- */
-
- case 'f': { /* mod fixed_quality (before : -q) */
- int *row = NULL, *col = NULL;
- int numlayers = 0, numresolution = 0, matrix_width = 0;
-
- char *s = opj_optarg;
- sscanf(s, "%d", &numlayers);
- s++;
- if (numlayers > 9) {
- s++;
- }
-
- parameters->tcp_numlayers = numlayers;
- numresolution = parameters->numresolution;
- matrix_width = numresolution * 3;
- parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
- s = s + 2;
-
- for (i = 0; i < numlayers; i++) {
- row = &parameters->cp_matrice[i * matrix_width];
- col = row;
- parameters->tcp_rates[i] = 1;
- sscanf(s, "%d,", &col[0]);
- s += 2;
- if (col[0] > 9) {
- s++;
- }
- col[1] = 0;
- col[2] = 0;
- for (j = 1; j < numresolution; j++) {
- col += 3;
- sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
- s += 6;
- if (col[0] > 9) {
- s++;
- }
- if (col[1] > 9) {
- s++;
- }
- if (col[2] > 9) {
- s++;
- }
- }
- if (i < numlayers - 1) {
- s++;
- }
- }
- parameters->cp_fixed_alloc = 1;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 't': { /* tiles */
- sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
- parameters->tile_size_on = OPJ_TRUE;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'n': { /* resolution */
- sscanf(opj_optarg, "%d", &parameters->numresolution);
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'c': { /* precinct dimension */
- char sep;
- int res_spec = 0;
-
- char *s = opj_optarg;
- do {
- sep = 0;
- sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
- &parameters->prch_init[res_spec], &sep);
- parameters->csty |= 0x01;
- res_spec++;
- s = strpbrk(s, "]") + 2;
- } while (sep == ',');
- parameters->res_spec = res_spec;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'b': { /* code-block dimension */
- int cblockw_init = 0, cblockh_init = 0;
- sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
- if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
- || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
- fprintf(stderr,
- "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
- " * width*height<=4096\n * 4<=width,height<= 1024\n\n");
- return 1;
- }
- parameters->cblockw_init = cblockw_init;
- parameters->cblockh_init = cblockh_init;
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'x': { /* creation of index file */
- char *index = opj_optarg;
- strncpy(indexfilename, index, OPJ_PATH_LEN);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'p': { /* progression order */
- char progression[4];
-
- strncpy(progression, opj_optarg, 4);
- parameters->prog_order = give_progression(progression);
- if (parameters->prog_order == -1) {
- fprintf(stderr, "Unrecognized progression order "
- "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 's': { /* subsampling factor */
- if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
- &parameters->subsampling_dy) != 2) {
- fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'd': { /* coordonnate of the reference grid */
- if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
- &parameters->image_offset_y0) != 2) {
- fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
- "error !! [-d x0,y0]\n");
- return 1;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': /* display an help description */
- encode_help_display();
- return 1;
-
- /* ----------------------------------------------------- */
-
- case 'P': { /* POC */
- int numpocs = 0; /* number of progression order change (POC) default 0 */
- opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */
-
- char *s = opj_optarg;
- POC = parameters->POC;
-
- while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
- &POC[numpocs].resno0, &POC[numpocs].compno0,
- &POC[numpocs].layno1, &POC[numpocs].resno1,
- &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
- POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
- numpocs++;
- while (*s && *s != '/') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- parameters->numpocs = numpocs;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'S': { /* SOP marker */
- parameters->csty |= 0x02;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'E': { /* EPH marker */
- parameters->csty |= 0x04;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'M': { /* Mode switch pas tous au point !! */
- int value = 0;
- if (sscanf(opj_optarg, "%d", &value) == 1) {
- for (i = 0; i <= 5; i++) {
- int cache = value & (1 << i);
- if (cache) {
- parameters->mode |= (1 << i);
- }
- }
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'R': { /* ROI */
- if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
- &parameters->roi_shift) != 2) {
- fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'T': { /* Tile offset */
- if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0,
- &parameters->cp_ty0) != 2) {
- fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
- return 1;
- }
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'C': { /* add a comment */
- parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
- if (parameters->cp_comment) {
- strcpy(parameters->cp_comment, opj_optarg);
- }
- }
- break;
-
-
- /* ------------------------------------------------------ */
-
- case 'I': { /* reversible or not */
- parameters->irreversible = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'u': { /* Tile part generation*/
- parameters->tp_flag = opj_optarg[0];
- parameters->tp_on = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'z': { /* Image Directory path */
- img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
- strcpy(img_fol->imgdirpath, opj_optarg);
- img_fol->set_imgdir = 1;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'w': { /* Digital Cinema 2K profile compliance*/
- int fps = 0;
- sscanf(opj_optarg, "%d", &fps);
- if (fps == 24) {
- parameters->cp_cinema = CINEMA2K_24;
- } else if (fps == 48) {
- parameters->cp_cinema = CINEMA2K_48;
- } else {
- fprintf(stderr, "Incorrect value!! must be 24 or 48\n");
- return 1;
- }
- fprintf(stdout, "CINEMA 2K compliant codestream\n");
- parameters->cp_rsiz = CINEMA2K;
-
- }
- break;
-
- /* ------------------------------------------------------ */
-
- case 'y': { /* Digital Cinema 4K profile compliance*/
- parameters->cp_cinema = CINEMA4K_24;
- fprintf(stdout, "CINEMA 4K compliant codestream\n");
- parameters->cp_rsiz = CINEMA4K;
- }
- break;
-
- /* ------------------------------------------------------ */
-
- /* UniPG>> */
-#ifdef USE_JPWL
- /* ------------------------------------------------------ */
-
- case 'W': { /* JPWL capabilities switched on */
- char *token = NULL;
- int hprot, pprot, sens, addr, size, range;
-
- /* we need to enable indexing */
- if (!indexfilename || !*indexfilename) {
- strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN);
- }
-
- /* search for different protection methods */
-
- /* break the option in comma points and parse the result */
- token = strtok(opj_optarg, ",");
- while (token != NULL) {
-
- /* search header error protection method */
- if (*token == 'h') {
-
- static int tile = 0, tilespec = 0, lasttileno = 0;
-
- hprot = 1; /* predefined method */
-
- if (sscanf(token, "h=%d", &hprot) == 1) {
- /* Main header, specified */
- if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
- ((hprot >= 37) && (hprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n",
- hprot);
- return 1;
- }
- parameters->jpwl_hprot_MH = hprot;
-
- } else if (sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
- /* Tile part header, specified */
- if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
- ((hprot >= 37) && (hprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n",
- hprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_hprot_TPH[tilespec++] = hprot;
- }
-
- } else if (sscanf(token, "h%d", &tile) == 1) {
- /* Tile part header, unspecified */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_hprot_TPH[tilespec++] = hprot;
- }
-
-
- } else if (!strcmp(token, "h")) {
- /* Main header, unspecified */
- parameters->jpwl_hprot_MH = hprot;
-
- } else {
- fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search packet error protection method */
- if (*token == 'p') {
-
- static int pack = 0, tile = 0, packspec = 0;
-
- pprot = 1; /* predefined method */
-
- if (sscanf(token, "p=%d", &pprot) == 1) {
- /* Method for all tiles and all packets */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n",
- pprot);
- return 1;
- }
- parameters->jpwl_pprot_tileno[0] = 0;
- parameters->jpwl_pprot_packno[0] = 0;
- parameters->jpwl_pprot[0] = pprot;
-
- } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
- /* method specified from that tile on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = 0;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
- /* method fully specified from that tile and that packet on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (pack < 0) {
- fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
- pack);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = pack;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
- /* default method from that tile and that packet on */
- if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
- ((pprot >= 37) && (pprot <= 128)))) {
- fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (pack < 0) {
- fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
- pack);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = pack;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
- } else if (sscanf(token, "p%d", &tile) == 1) {
- /* default from a tile on */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on protection method p = %d\n", tile);
- return 1;
- }
- if (packspec < JPWL_MAX_NO_PACKSPECS) {
- parameters->jpwl_pprot_tileno[packspec] = tile;
- parameters->jpwl_pprot_packno[packspec] = 0;
- parameters->jpwl_pprot[packspec++] = pprot;
- }
-
-
- } else if (!strcmp(token, "p")) {
- /* all default */
- parameters->jpwl_pprot_tileno[0] = 0;
- parameters->jpwl_pprot_packno[0] = 0;
- parameters->jpwl_pprot[0] = pprot;
-
- } else {
- fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search sensitivity method */
- if (*token == 's') {
-
- static int tile = 0, tilespec = 0, lasttileno = 0;
-
- sens = 0; /* predefined: relative error */
-
- if (sscanf(token, "s=%d", &sens) == 1) {
- /* Main header, specified */
- if ((sens < -1) || (sens > 7)) {
- fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n",
- sens);
- return 1;
- }
- parameters->jpwl_sens_MH = sens;
-
- } else if (sscanf(token, "s%d=%d", &tile, &sens) == 2) {
- /* Tile part header, specified */
- if ((sens < -1) || (sens > 7)) {
- fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n",
- sens);
- return 1;
- }
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_sens_TPH[tilespec++] = sens;
- }
-
- } else if (sscanf(token, "s%d", &tile) == 1) {
- /* Tile part header, unspecified */
- if (tile < 0) {
- fprintf(stderr,
- "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
- return 1;
- }
- if (tilespec < JPWL_MAX_NO_TILESPECS) {
- parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
- parameters->jpwl_sens_TPH[tilespec++] = hprot;
- }
-
- } else if (!strcmp(token, "s")) {
- /* Main header, unspecified */
- parameters->jpwl_sens_MH = sens;
-
- } else {
- fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token);
- return 1;
- };
-
- parameters->jpwl_sens_size = 2; /* 2 bytes for default size */
- }
-
- /* search addressing size */
- if (*token == 'a') {
-
-
- addr = 0; /* predefined: auto */
-
- if (sscanf(token, "a=%d", &addr) == 1) {
- /* Specified */
- if ((addr != 0) && (addr != 2) && (addr != 4)) {
- fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
- return 1;
- }
- parameters->jpwl_sens_addr = addr;
-
- } else if (!strcmp(token, "a")) {
- /* default */
- parameters->jpwl_sens_addr = addr; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search sensitivity size */
- if (*token == 'z') {
-
-
- size = 1; /* predefined: 1 byte */
-
- if (sscanf(token, "z=%d", &size) == 1) {
- /* Specified */
- if ((size != 0) && (size != 1) && (size != 2)) {
- fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
- return 1;
- }
- parameters->jpwl_sens_size = size;
-
- } else if (!strcmp(token, "a")) {
- /* default */
- parameters->jpwl_sens_size = size; /* 1 for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid size selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* search range method */
- if (*token == 'g') {
-
-
- range = 0; /* predefined: 0 (packet) */
-
- if (sscanf(token, "g=%d", &range) == 1) {
- /* Specified */
- if ((range < 0) || (range > 3)) {
- fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
- return 1;
- }
- parameters->jpwl_sens_range = range;
-
- } else if (!strcmp(token, "g")) {
- /* default */
- parameters->jpwl_sens_range = range;
-
- } else {
- fprintf(stderr, "ERROR -> invalid range selection = %s\n", token);
- return 1;
- };
-
- }
-
- /* next token or bust */
- token = strtok(NULL, ",");
- };
-
-
- /* some info */
- fprintf(stdout, "Info: JPWL capabilities enabled\n");
- parameters->jpwl_epc_on = OPJ_TRUE;
-
- }
- break;
-#endif /* USE_JPWL */
- /* <<UniPG */
- /* ------------------------------------------------------ */
-
- case 'J': { /* jpip on */
- /*parameters->jpip_on = OPJ_TRUE;*/
- }
- break;
- /* ------------------------------------------------------ */
-
-
- default:
- fprintf(stderr, "ERROR -> Command line not valid\n");
- return 1;
- }
- } while (c != -1);
-
- /* check for possible errors */
- if (parameters->cp_cinema) {
- if (parameters->tcp_numlayers > 1) {
- parameters->cp_rsiz = STD_RSIZ;
- fprintf(stdout,
- "Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n");
- }
- }
- if (img_fol->set_imgdir == 1) {
- if (!(parameters->infile[0] == 0)) {
- fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
- return 1;
- }
- if (img_fol->set_out_format == 0) {
- fprintf(stderr,
- "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
- fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
- return 1;
- }
- if (!((parameters->outfile[0] == 0))) {
- fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
- fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
- return 1;
- }
- } else {
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stderr, "Example: %s -i image.ppm -o image.j2k\n", argv[0]);
- fprintf(stderr, " Try: %s -h\n", argv[0]);
- return 1;
- }
- }
-
- if (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0) {
- fprintf(stderr, "\nError: invalid raw image parameters\n");
- fprintf(stderr, "Please use the Format option -F:\n");
- fprintf(stderr,
- "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stderr, "Aborting\n");
- return 1;
- }
-
- if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
- parameters->cp_fixed_quality)
- && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^
- parameters->cp_fixed_quality))) {
- fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
- return 1;
- } /* mod fixed_quality */
-
- /* if no rate entered, lossless by default */
- if (parameters->tcp_numlayers == 0) {
- parameters->tcp_rates[0] = 0; /* MOD antonin : losslessbug */
- parameters->tcp_numlayers++;
- parameters->cp_disto_alloc = 1;
- }
-
- if ((parameters->cp_tx0 > parameters->image_offset_x0) ||
- (parameters->cp_ty0 > parameters->image_offset_y0)) {
- fprintf(stderr,
- "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
- parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0,
- parameters->image_offset_y0);
- return 1;
- }
-
- for (i = 0; i < parameters->numpocs; i++) {
- if (parameters->POC[i].prg == -1) {
- fprintf(stderr,
- "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
- i + 1);
- }
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting a FILE* client object
-*/
-static void info_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
- opj_bool bSuccess;
- opj_cparameters_t parameters; /* compression parameters */
- img_fol_t img_fol;
- opj_event_mgr_t event_mgr; /* event manager */
- opj_image_t *image = NULL;
- int i, num_images;
- int imageno;
- dircnt_t *dirptr = NULL;
- raw_cparameters_t raw_cp;
- opj_codestream_info_t cstr_info; /* Codestream information structure */
- char indexfilename[OPJ_PATH_LEN]; /* index file name */
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* set encoding parameters to default values */
- opj_set_default_encoder_parameters(&parameters);
-
- /* Initialize indexfilename and img_fol */
- *indexfilename = 0;
- memset(&img_fol, 0, sizeof(img_fol_t));
-
- /* parse input and get user encoding parameters */
- if (parse_cmdline_encoder(argc, argv, &parameters, &img_fol, &raw_cp,
- indexfilename) == 1) {
- return 1;
- }
-
- if (parameters.cp_cinema) {
- img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float));
- for (i = 0; i < parameters.tcp_numlayers; i++) {
- img_fol.rates[i] = parameters.tcp_rates[i];
- }
- cinema_parameters(&parameters);
- }
-
- /* Create comment for codestream */
- if (parameters.cp_comment == NULL) {
- const char comment[] = "Created by OpenJPEG version ";
- const size_t clen = strlen(comment);
- const char *version = opj_version();
- /* UniPG>> */
-#ifdef USE_JPWL
- parameters.cp_comment = (char*)malloc(clen + strlen(version) + 11);
- sprintf(parameters.cp_comment, "%s%s with JPWL", comment, version);
-#else
- parameters.cp_comment = (char*)malloc(clen + strlen(version) + 1);
- sprintf(parameters.cp_comment, "%s%s", comment, version);
-#endif
- /* <<UniPG */
- }
-
- /* Read directory if necessary */
- if (img_fol.set_imgdir == 1) {
- num_images = get_num_images(img_fol.imgdirpath);
- dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
- if (dirptr) {
- dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
- char)); /* Stores at max 10 image file names*/
- dirptr->filename = (char**) malloc(num_images * sizeof(char*));
- if (!dirptr->filename_buf) {
- return 0;
- }
- for (i = 0; i < num_images; i++) {
- dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
- }
- }
- if (load_images(dirptr, img_fol.imgdirpath) == 1) {
- return 0;
- }
- if (num_images == 0) {
- fprintf(stdout, "Folder is empty\n");
- return 0;
- }
- } else {
- num_images = 1;
- }
- /*Encoding image one by one*/
- for (imageno = 0; imageno < num_images; imageno++) {
- image = NULL;
- fprintf(stderr, "\n");
-
- if (img_fol.set_imgdir == 1) {
- if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
- fprintf(stderr, "skipping file...\n");
- continue;
- }
- }
- switch (parameters.decod_format) {
- case PGX_DFMT:
- break;
- case PXM_DFMT:
- break;
- case BMP_DFMT:
- break;
- case TIF_DFMT:
- break;
- case RAW_DFMT:
- break;
- case TGA_DFMT:
- break;
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr, "skipping file...\n");
- continue;
- }
-
- /* decode the source image */
- /* ----------------------- */
-
- switch (parameters.decod_format) {
- case PGX_DFMT:
- image = pgxtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load pgx file\n");
- return 1;
- }
- break;
-
- case PXM_DFMT:
- image = pnmtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load pnm file\n");
- return 1;
- }
- break;
-
- case BMP_DFMT:
- image = bmptoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load bmp file\n");
- return 1;
- }
- break;
-#ifdef OPJ_HAVE_LIBTIFF
- case TIF_DFMT:
- image = tiftoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load tiff file\n");
- return 1;
- }
- break;
-#endif /* OPJ_HAVE_LIBTIFF */
- case RAW_DFMT:
- image = rawtoimage(parameters.infile, &parameters, &raw_cp);
- if (!image) {
- fprintf(stderr, "Unable to load raw file\n");
- return 1;
- }
- break;
-
- case TGA_DFMT:
- image = tgatoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load tga file\n");
- return 1;
- }
- break;
-#ifdef OPJ_HAVE_LIBPNG
- case PNG_DFMT:
- image = pngtoimage(parameters.infile, &parameters);
- if (!image) {
- fprintf(stderr, "Unable to load png file\n");
- return 1;
- }
- break;
-#endif /* OPJ_HAVE_LIBPNG */
- }
- /* Can happen if input file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
- */
- if (!image) {
- fprintf(stderr, "Unable to load file: got no image\n");
- return 1;
- }
- /* Decide if MCT should be used */
- parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
-
- if (parameters.cp_cinema) {
- cinema_setup_encoder(&parameters, image, &img_fol);
- }
-
- /* encode the destination image */
- /* ---------------------------- */
-
- if (parameters.cod_format == J2K_CFMT) { /* J2K format output */
- int codestream_length;
- size_t res;
- opj_cio_t *cio = NULL;
- FILE *f = NULL;
-
- /* get a J2K compressor handle */
- opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
- /* setup the encoder parameters using the current image and user parameters */
- opj_setup_encoder(cinfo, &parameters, image);
-
- /* open a byte stream for writing */
- /* allocate memory for all tiles */
- cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
- /* encode the image */
- if (*indexfilename) { /* If need to extract codestream information*/
- bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
- } else {
- bSuccess = opj_encode(cinfo, cio, image, NULL);
- }
- if (!bSuccess) {
- opj_cio_close(cio);
- fprintf(stderr, "failed to encode image\n");
- return 1;
- }
- codestream_length = cio_tell(cio);
-
- /* write the buffer to disk */
- f = fopen(parameters.outfile, "wb");
- if (!f) {
- fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
- return 1;
- }
- res = fwrite(cio->buffer, 1, codestream_length, f);
- if (res < (size_t)codestream_length) { /* FIXME */
- fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
- parameters.outfile);
- return 1;
- }
- fclose(f);
-
- fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
- /* close and free the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
- fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename);
- }
- }
-
- /* free remaining compression structures */
- opj_destroy_compress(cinfo);
- if (*indexfilename) {
- opj_destroy_cstr_info(&cstr_info);
- }
- } else { /* JP2 format output */
- int codestream_length;
- size_t res;
- opj_cio_t *cio = NULL;
- FILE *f = NULL;
- opj_cinfo_t *cinfo = NULL;
-
- /* get a JP2 compressor handle */
- cinfo = opj_create_compress(CODEC_JP2);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
- /* setup the encoder parameters using the current image and using user parameters */
- opj_setup_encoder(cinfo, &parameters, image);
-
- /* open a byte stream for writing */
- /* allocate memory for all tiles */
- cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
- /* encode the image */
- if (*indexfilename /*|| parameters.jpip_on*/) { /* If need to extract codestream information*/
- bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
- } else {
- bSuccess = opj_encode(cinfo, cio, image, NULL);
- }
- if (!bSuccess) {
- opj_cio_close(cio);
- fprintf(stderr, "failed to encode image\n");
- return 1;
- }
- codestream_length = cio_tell(cio);
-
- /* write the buffer to disk */
- f = fopen(parameters.outfile, "wb");
- if (!f) {
- fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
- return 1;
- }
- res = fwrite(cio->buffer, 1, codestream_length, f);
- if (res < (size_t)codestream_length) { /* FIXME */
- fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
- parameters.outfile);
- return 1;
- }
- fclose(f);
- fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
- /* close and free the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
- fprintf(stderr, "Failed to output index file\n");
- }
- }
-
- /* free remaining compression structures */
- opj_destroy_compress(cinfo);
- if (*indexfilename) {
- opj_destroy_cstr_info(&cstr_info);
- }
- }
-
- /* free image data */
- opj_image_destroy(image);
- }
-
- /* free user parameters structure */
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
-
- return 0;
-}
diff --git a/openjpeg/src/bin/jpwl/opj_jpwl_decompress.c b/openjpeg/src/bin/jpwl/opj_jpwl_decompress.c
deleted file mode 100644
index ffe84e54..00000000
--- a/openjpeg/src/bin/jpwl/opj_jpwl_decompress.c
+++ /dev/null
@@ -1,895 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * Copyright (c) 2003-2014, Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2006-2007, Parvatha Elangovan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifdef _WIN32
-#include "windirent.h"
-#else
-#include <dirent.h>
-#endif /* _WIN32 */
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <strings.h>
-#define _stricmp strcasecmp
-#define _strnicmp strncasecmp
-#endif /* _WIN32 */
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "opj_getopt.h"
-#include "convert.h"
-#include "index.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-#include "color.h"
-
-#include "format_defs.h"
-
-typedef struct dircnt {
- /** Buffer for holding images read from Directory*/
- char *filename_buf;
- /** Pointer to the buffer*/
- char **filename;
-} dircnt_t;
-
-
-typedef struct img_folder {
- /** The directory path of the folder containing input images*/
- char *imgdirpath;
- /** Output format*/
- const char *out_format;
- /** Enable option*/
- char set_imgdir;
- /** Enable Cod Format for output*/
- char set_out_format;
-
-} img_fol_t;
-
-void decode_help_display(void)
-{
- fprintf(stdout, "HELP for j2k_to_image\n----\n\n");
- fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
- /* UniPG>> */
- fprintf(stdout, "List of parameters for the JPEG 2000 "
-#ifdef USE_JPWL
- "+ JPWL "
-#endif /* USE_JPWL */
- "decoder:\n");
- /* <<UniPG */
- fprintf(stdout, "\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " -ImgDir \n");
- fprintf(stdout, " Image file Directory path \n");
- fprintf(stdout, " -OutFor \n");
- fprintf(stdout, " REQUIRED only if -ImgDir is used\n");
- fprintf(stdout, " Need to specify only format without filename <BMP> \n");
- fprintf(stdout,
- " Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
- fprintf(stdout, " -i <compressed file>\n");
- fprintf(stdout,
- " REQUIRED only if an Input image directory not specified\n");
- fprintf(stdout,
- " Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
- fprintf(stdout, " is identified based on its suffix.\n");
- fprintf(stdout, " -o <decompressed file>\n");
- fprintf(stdout, " REQUIRED\n");
- fprintf(stdout,
- " Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA files\n");
- fprintf(stdout,
- " Binary data is written to the file (not ascii). If a PGX\n");
- fprintf(stdout,
- " filename is given, there will be as many output files as there are\n");
- fprintf(stdout,
- " components: an indice starting from 0 will then be appended to the\n");
- fprintf(stdout,
- " output filename, just before the \"pgx\" extension. If a PGM filename\n");
- fprintf(stdout,
- " is given and there are more than one component, only the first component\n");
- fprintf(stdout, " will be written to the file.\n");
- fprintf(stdout, " -r <reduce factor>\n");
- fprintf(stdout,
- " Set the number of highest resolution levels to be discarded. The\n");
- fprintf(stdout,
- " image resolution is effectively divided by 2 to the power of the\n");
- fprintf(stdout,
- " number of discarded levels. The reduce factor is limited by the\n");
- fprintf(stdout,
- " smallest total number of decomposition levels among tiles.\n");
- fprintf(stdout, " -l <number of quality layers to decode>\n");
- fprintf(stdout,
- " Set the maximum number of quality layers to decode. If there are\n");
- fprintf(stdout,
- " less quality layers than the specified number, all the quality layers\n");
- fprintf(stdout, " are decoded.\n");
- fprintf(stdout, " -x \n");
- fprintf(stdout, " Create an index file *.Idx (-x index_name.Idx) \n");
- fprintf(stdout, "\n");
- /* UniPG>> */
-#ifdef USE_JPWL
- fprintf(stdout, " -W <options>\n");
- fprintf(stdout,
- " Activates the JPWL correction capability, if the codestream complies.\n");
- fprintf(stdout,
- " Options can be a comma separated list of <param=val> tokens:\n");
- fprintf(stdout, " c, c=numcomps\n");
- fprintf(stdout,
- " numcomps is the number of expected components in the codestream\n");
- fprintf(stdout, " (search of first EPB rely upon this, default is %d)\n",
- JPWL_EXPECTED_COMPONENTS);
-#endif /* USE_JPWL */
- /* <<UniPG */
- fprintf(stdout, "\n");
-}
-
-/* -------------------------------------------------------------------------- */
-
-int get_num_images(char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int num_images = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 0;
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
- num_images++;
- }
- return num_images;
-}
-
-int load_images(dircnt_t *dirptr, char *imgdirpath)
-{
- DIR *dir;
- struct dirent* content;
- int i = 0;
-
- /*Reading the input images from given input directory*/
-
- dir = opendir(imgdirpath);
- if (!dir) {
- fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
- return 1;
- } else {
- fprintf(stderr, "Folder opened successfully\n");
- }
-
- while ((content = readdir(dir)) != NULL) {
- if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
- continue;
- }
-
- strcpy(dirptr->filename[i], content->d_name);
- i++;
- }
- return 0;
-}
-
-int get_file_format(char *filename)
-{
- unsigned int i;
- static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
- static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
- char * ext = strrchr(filename, '.');
- if (ext == NULL) {
- return -1;
- }
- ext++;
- if (ext) {
- for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
- if (_strnicmp(ext, extension[i], 3) == 0) {
- return format[i];
- }
- }
- }
-
- return -1;
-}
-
-char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
- opj_dparameters_t *parameters)
-{
- char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
- outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
- char *temp_p, temp1[OPJ_PATH_LEN] = "";
-
- strcpy(image_filename, dirptr->filename[imageno]);
- fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
- parameters->decod_format = get_file_format(image_filename);
- if (parameters->decod_format == -1) {
- return 1;
- }
- sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
- strncpy(parameters->infile, infilename, sizeof(infilename));
-
- /*Set output file*/
- strcpy(temp_ofname, strtok(image_filename, "."));
- while ((temp_p = strtok(NULL, ".")) != NULL) {
- strcat(temp_ofname, temp1);
- sprintf(temp1, ".%s", temp_p);
- }
- if (img_fol->set_out_format == 1) {
- sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
- img_fol->out_format);
- strncpy(parameters->outfile, outfilename, sizeof(outfilename));
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,
- img_fol_t *img_fol, char *indexfilename)
-{
- /* parse the command line */
- int totlen, c;
- opj_option_t long_option[] = {
- {"ImgDir", REQ_ARG, NULL, 'y'},
- {"OutFor", REQ_ARG, NULL, 'O'},
- };
-
- const char optlist[] = "i:o:r:l:x:"
-
- /* UniPG>> */
-#ifdef USE_JPWL
- "W:"
-#endif /* USE_JPWL */
- /* <<UniPG */
- "h" ;
- totlen = sizeof(long_option);
- img_fol->set_out_format = 0;
- do {
- c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* input file */
- char *infile = opj_optarg;
- parameters->decod_format = get_file_format(infile);
- switch (parameters->decod_format) {
- case J2K_CFMT:
- case JP2_CFMT:
- case JPT_CFMT:
- break;
- default:
- fprintf(stderr,
- "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n",
- infile);
- return 1;
- }
- strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'o': { /* output file */
- char *outfile = opj_optarg;
- parameters->cod_format = get_file_format(outfile);
- switch (parameters->cod_format) {
- case PGX_DFMT:
- case PXM_DFMT:
- case BMP_DFMT:
- case TIF_DFMT:
- case RAW_DFMT:
- case TGA_DFMT:
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
- outfile);
- return 1;
- }
- strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'O': { /* output format */
- char outformat[50];
- char *of = opj_optarg;
- sprintf(outformat, ".%s", of);
- img_fol->set_out_format = 1;
- parameters->cod_format = get_file_format(outformat);
- switch (parameters->cod_format) {
- case PGX_DFMT:
- img_fol->out_format = "pgx";
- break;
- case PXM_DFMT:
- img_fol->out_format = "ppm";
- break;
- case BMP_DFMT:
- img_fol->out_format = "bmp";
- break;
- case TIF_DFMT:
- img_fol->out_format = "tif";
- break;
- case RAW_DFMT:
- img_fol->out_format = "raw";
- break;
- case TGA_DFMT:
- img_fol->out_format = "raw";
- break;
- case PNG_DFMT:
- img_fol->out_format = "png";
- break;
- default:
- fprintf(stderr,
- "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
- outformat);
- return 1;
- break;
- }
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'r': { /* reduce option */
- sscanf(opj_optarg, "%d", &parameters->cp_reduce);
- }
- break;
-
- /* ----------------------------------------------------- */
-
-
- case 'l': { /* layering option */
- sscanf(opj_optarg, "%d", &parameters->cp_layer);
- }
- break;
-
- /* ----------------------------------------------------- */
-
- case 'h': /* display an help description */
- decode_help_display();
- return 1;
-
- /* ------------------------------------------------------ */
-
- case 'y': { /* Image Directory path */
- img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
- strcpy(img_fol->imgdirpath, opj_optarg);
- img_fol->set_imgdir = 1;
- }
- break;
- /* ----------------------------------------------------- */
- case 'x': { /* Creation of index file */
- char *index = opj_optarg;
- strncpy(indexfilename, index, OPJ_PATH_LEN);
- }
- break;
- /* ----------------------------------------------------- */
- /* UniPG>> */
-#ifdef USE_JPWL
-
- case 'W': { /* activate JPWL correction */
- char *token = NULL;
-
- token = strtok(opj_optarg, ",");
- while (token != NULL) {
-
- /* search expected number of components */
- if (*token == 'c') {
-
- static int compno;
-
- compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
-
- if (sscanf(token, "c=%d", &compno) == 1) {
- /* Specified */
- if ((compno < 1) || (compno > 256)) {
- fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
- return 1;
- }
- parameters->jpwl_exp_comps = compno;
-
- } else if (!strcmp(token, "c")) {
- /* default */
- parameters->jpwl_exp_comps = compno; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
- return 1;
- };
- }
-
- /* search maximum number of tiles */
- if (*token == 't') {
-
- static int tileno;
-
- tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
-
- if (sscanf(token, "t=%d", &tileno) == 1) {
- /* Specified */
- if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
- fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
- return 1;
- }
- parameters->jpwl_max_tiles = tileno;
-
- } else if (!strcmp(token, "t")) {
- /* default */
- parameters->jpwl_max_tiles = tileno; /* auto for default size */
-
- } else {
- fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
- return 1;
- };
- }
-
- /* next token or bust */
- token = strtok(NULL, ",");
- };
- parameters->jpwl_correct = OPJ_TRUE;
- fprintf(stdout, "JPWL correction capability activated\n");
- fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
- }
- break;
-#endif /* USE_JPWL */
- /* <<UniPG */
-
- /* ----------------------------------------------------- */
-
- default:
- fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c,
- opj_optarg);
- break;
- }
- } while (c != -1);
-
- /* check for possible errors */
- if (img_fol->set_imgdir == 1) {
- if (!(parameters->infile[0] == 0)) {
- fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
- return 1;
- }
- if (img_fol->set_out_format == 0) {
- fprintf(stderr,
- "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
- fprintf(stderr,
- "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n");
- return 1;
- }
- if (!((parameters->outfile[0] == 0))) {
- fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
- return 1;
- }
- } else {
- if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
- fprintf(stderr, "Example: %s -i image.j2k -o image.pgm\n", argv[0]);
- fprintf(stderr, " Try: %s -h\n", argv[0]);
- return 1;
- }
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting no client object
-*/
-void info_callback(const char *msg, void *client_data)
-{
- (void)client_data;
- fprintf(stdout, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-int main(int argc, char **argv)
-{
- opj_dparameters_t parameters; /* decompression parameters */
- img_fol_t img_fol;
- opj_event_mgr_t event_mgr; /* event manager */
- opj_image_t *image = NULL;
- FILE *fsrc = NULL;
- unsigned char *src = NULL;
- int file_length;
- int num_images;
- int i, imageno;
- dircnt_t *dirptr = NULL;
- opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
- opj_cio_t *cio = NULL;
- opj_codestream_info_t cstr_info; /* Codestream information structure */
- char indexfilename[OPJ_PATH_LEN]; /* index file name */
-
- /* configure the event callbacks (not required) */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* set decoding parameters to default values */
- opj_set_default_decoder_parameters(&parameters);
-
- /* Initialize indexfilename and img_fol */
- *indexfilename = 0;
- memset(&img_fol, 0, sizeof(img_fol_t));
-
- /* parse input and get user encoding parameters */
- if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol,
- indexfilename) == 1) {
- return 1;
- }
-
- /* Initialize reading of directory */
- if (img_fol.set_imgdir == 1) {
- num_images = get_num_images(img_fol.imgdirpath);
-
- dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
- if (dirptr) {
- dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
- char)); /* Stores at max 10 image file names*/
- dirptr->filename = (char**) malloc(num_images * sizeof(char*));
-
- if (!dirptr->filename_buf) {
- return 1;
- }
- for (i = 0; i < num_images; i++) {
- dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
- }
- }
- if (load_images(dirptr, img_fol.imgdirpath) == 1) {
- return 1;
- }
- if (num_images == 0) {
- fprintf(stdout, "Folder is empty\n");
- return 1;
- }
- } else {
- num_images = 1;
- }
-
- /*Encoding image one by one*/
- for (imageno = 0; imageno < num_images ; imageno++) {
- image = NULL;
- fprintf(stderr, "\n");
-
- if (img_fol.set_imgdir == 1) {
- if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
- fprintf(stderr, "skipping file...\n");
- continue;
- }
- }
-
- /* read the input file and put it in memory */
- /* ---------------------------------------- */
- fsrc = fopen(parameters.infile, "rb");
- if (!fsrc) {
- fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile);
- return 1;
- }
- fseek(fsrc, 0, SEEK_END);
- file_length = ftell(fsrc);
- fseek(fsrc, 0, SEEK_SET);
- src = (unsigned char *) malloc(file_length);
- if (fread(src, 1, file_length, fsrc) != (size_t)file_length) {
- free(src);
- fclose(fsrc);
- fprintf(stderr,
- "\nERROR: fread return a number of element different from the expected.\n");
- return 1;
- }
- fclose(fsrc);
-
- /* decode the code-stream */
- /* ---------------------- */
-
- switch (parameters.decod_format) {
- case J2K_CFMT: {
- /* JPEG-2000 codestream */
-
- /* get a decoder handle */
- dinfo = opj_create_decompress(CODEC_J2K);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
- /* decode the stream and fill the image structure */
- if (*indexfilename) { /* If need to extract codestream information*/
- image = opj_decode_with_info(dinfo, cio, &cstr_info);
- } else {
- image = opj_decode(dinfo, cio);
- }
- if (!image) {
- fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(src);
- return 1;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- opj_bool bSuccess;
- bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
- fprintf(stderr, "Failed to output index file\n");
- }
- }
- }
- break;
-
- case JP2_CFMT: {
- /* JPEG 2000 compressed image data */
-
- /* get a decoder handle */
- dinfo = opj_create_decompress(CODEC_JP2);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using the current image and user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
- /* decode the stream and fill the image structure */
- if (*indexfilename) { /* If need to extract codestream information*/
- image = opj_decode_with_info(dinfo, cio, &cstr_info);
- } else {
- image = opj_decode(dinfo, cio);
- }
- if (!image) {
- fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(src);
- return 1;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- opj_bool bSuccess;
- bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
- fprintf(stderr, "Failed to output index file\n");
- }
- }
- }
- break;
-
- case JPT_CFMT: {
- /* JPEG 2000, JPIP */
-
- /* get a decoder handle */
- dinfo = opj_create_decompress(CODEC_JPT);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
- /* decode the stream and fill the image structure */
- if (*indexfilename) { /* If need to extract codestream information*/
- image = opj_decode_with_info(dinfo, cio, &cstr_info);
- } else {
- image = opj_decode(dinfo, cio);
- }
- if (!image) {
- fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(src);
- return 1;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- opj_bool bSuccess;
- bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
- fprintf(stderr, "Failed to output index file\n");
- }
- }
- }
- break;
-
- default:
- fprintf(stderr, "skipping file..\n");
- continue;
- }
-
- /* free the memory containing the code-stream */
- free(src);
- src = NULL;
-
- if (image->color_space == CLRSPC_SYCC) {
- color_sycc_to_rgb(image);
- }
-
- if (image->icc_profile_buf) {
-#if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
- color_apply_icc_profile(image);
-#endif
-
- free(image->icc_profile_buf);
- image->icc_profile_buf = NULL;
- image->icc_profile_len = 0;
- }
-
- /* create output image */
- /* ------------------- */
- switch (parameters.cod_format) {
- case PXM_DFMT: /* PNM PGM PPM */
- if (imagetopnm(image, parameters.outfile)) {
- fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
- } else {
- fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case PGX_DFMT: /* PGX */
- if (imagetopgx(image, parameters.outfile)) {
- fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
- } else {
- fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case BMP_DFMT: /* BMP */
- if (imagetobmp(image, parameters.outfile)) {
- fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
- } else {
- fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#ifdef OPJ_HAVE_LIBTIFF
- case TIF_DFMT: /* TIFF */
- if (imagetotif(image, parameters.outfile)) {
- fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
- } else {
- fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
- }
- break;
-#endif /* OPJ_HAVE_LIBTIFF */
- case RAW_DFMT: /* RAW */
- if (imagetoraw(image, parameters.outfile)) {
- fprintf(stdout, "Error generating raw file. Outfile %s not generated\n",
- parameters.outfile);
- } else {
- fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
- }
- break;
-
- case TGA_DFMT: /* TGA */
- if (imagetotga(image, parameters.outfile)) {
- fprintf(stdout, "Error generating tga file. Outfile %s not generated\n",
- parameters.outfile);
- } else {
- fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
- }
- break;
-#ifdef OPJ_HAVE_LIBPNG
- case PNG_DFMT: /* PNG */
- if (imagetopng(image, parameters.outfile)) {
- fprintf(stdout, "Error generating png file. Outfile %s not generated\n",
- parameters.outfile);
- } else {
- fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
- }
- break;
-#endif /* OPJ_HAVE_LIBPNG */
- /* Can happen if output file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
- */
- default:
- fprintf(stderr, "Outfile %s not generated\n", parameters.outfile);
- }
-
- /* free remaining structures */
- if (dinfo) {
- opj_destroy_decompress(dinfo);
- }
- /* free codestream information structure */
- if (*indexfilename) {
- opj_destroy_cstr_info(&cstr_info);
- }
- /* free image data structure */
- opj_image_destroy(image);
-
- }
- return 0;
-}
-/*end main*/
-
-
-
-
diff --git a/openjpeg/src/bin/jpwl/windirent.h b/openjpeg/src/bin/jpwl/windirent.h
deleted file mode 100644
index b7ed9a3c..00000000
--- a/openjpeg/src/bin/jpwl/windirent.h
+++ /dev/null
@@ -1,680 +0,0 @@
-
-/*
- * uce-dirent.h - operating system independent dirent implementation
- *
- * Copyright (C) 1998-2002 Toni Ronkko
- *
- * 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 TONI RONKKO 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.
- *
- *
- * May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
- *
- * $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
- *
- * $Log: uce-dirent.h,v $
- * Revision 1.7 2002/05/13 10:48:35 tr
- * embedded some source code directly to the header so that no source
- * modules need to be included in the MS Visual C project using the
- * interface, removed all the dependencies to other headers of the `uce'
- * library so that the header can be made public
- *
- * Revision 1.6 2002/04/12 16:22:04 tr
- * Unified Compiling Environment (UCE) replaced `std' library
- *
- * Revision 1.5 2001/07/20 16:33:40 tr
- * moved to `std' library and re-named defines accordingly
- *
- * Revision 1.4 2001/07/10 16:47:18 tronkko
- * revised comments
- *
- * Revision 1.3 2001/01/11 13:16:43 tr
- * using ``uce-machine.h'' for finding out defines such as `FREEBSD'
- *
- * Revision 1.2 2000/10/08 16:00:41 tr
- * copy of FreeBSD man page
- *
- * Revision 1.1 2000/07/10 05:53:16 tr
- * Initial revision
- *
- * Revision 1.2 1998/07/19 18:29:14 tr
- * Added error reporting capabilities and some asserts.
- *
- * Revision 1.1 1998/07/04 16:27:51 tr
- * Initial revision
- *
- *
- * MSVC 1.0 scans automatic dependencies incorrectly when your project
- * contains this very header. The problem is that MSVC cannot handle
- * include directives inside #if..#endif block those are never entered.
- * Since this header ought to compile in many different operating systems,
- * there had to be several conditional blocks that are compiled only in
- * operating systems for what they were designed for. MSVC 1.0 cannot
- * handle inclusion of sys/dir.h in a part that is compiled only in Apollo
- * operating system. To fix the problem you need to insert DIR.H into
- * SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
- * Consult manuals for more informaton about the problem.
- *
- * Since many UNIX systems have dirent.h we assume to have one also.
- * However, if your UNIX system does not have dirent.h you can download one
- * for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
- * You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
- * sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H,
- * HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
- * HAVE_SYS_NDIR_H according to the files found.
- */
-#ifndef DIRENT_H
-#define DIRENT_H
-#define DIRENT_H_INCLUDED
-
-/* find out platform */
-#if defined(MSDOS) /* MS-DOS */
-#elif defined(__MSDOS__) /* Turbo C/Borland */
-# define MSDOS
-#elif defined(__DOS__) /* Watcom */
-# define MSDOS
-#endif
-
-#if defined(WIN32) /* MS-Windows */
-#elif defined(__NT__) /* Watcom */
-# define WIN32
-#elif defined(_WIN32) /* Microsoft */
-# define WIN32
-#elif defined(__WIN32__) /* Borland */
-# define WIN32
-#endif
-
-/*
- * See what kind of dirent interface we have unless autoconf has already
- * determinated that.
- */
-#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
-# if defined(_MSC_VER) /* Microsoft C/C++ */
-/* no dirent.h */
-# elif defined(__MINGW32__) /* MinGW */
-/* no dirent.h */
-# elif defined(__BORLANDC__) /* Borland C/C++ */
-# define HAVE_DIRENT_H
-# define VOID_CLOSEDIR
-# elif defined(__TURBOC__) /* Borland Turbo C */
-/* no dirent.h */
-# elif defined(__WATCOMC__) /* Watcom C/C++ */
-# define HAVE_DIRECT_H
-# elif defined(__apollo) /* Apollo */
-# define HAVE_SYS_DIR_H
-# elif defined(__hpux) /* HP-UX */
-# define HAVE_DIRENT_H
-# elif (defined(__alpha) || defined(__alpha__)) && !defined(__linux__) /* Alpha OSF1 */
-# error "not implemented"
-# elif defined(__sgi) /* Silicon Graphics */
-# define HAVE_DIRENT_H
-# elif defined(sun) || defined(__sun) /* Sun Solaris */
-# define HAVE_DIRENT_H
-# elif defined(__FreeBSD__) /* FreeBSD */
-# define HAVE_DIRENT_H
-# elif defined(__linux__) /* Linux */
-# define HAVE_DIRENT_H
-# elif defined(__GNUC__) /* GNU C/C++ */
-# define HAVE_DIRENT_H
-# else
-# error "not implemented"
-# endif
-#endif
-
-/* include proper interface headers */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# ifdef FREEBSD
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-# else
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-# endif
-
-#elif defined(HAVE_NDIR_H)
-# include <ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIRECT_H)
-# include <direct.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_DIR_H)
-# include <dir.h>
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(HAVE_SYS_DIR_H)
-# include <sys/types.h>
-# include <sys/dir.h>
-# ifndef dirent
-# define dirent direct
-# endif
-# define NAMLEN(dp) ((int)((dp)->d_namlen))
-
-#elif defined(MSDOS) || defined(WIN32)
-
-/* figure out type of underlaying directory interface to be used */
-# if defined(WIN32)
-# define DIRENT_WIN32_INTERFACE
-# elif defined(MSDOS)
-# define DIRENT_MSDOS_INTERFACE
-# else
-# error "missing native dirent interface"
-# endif
-
-/*** WIN32 specifics ***/
-# if defined(DIRENT_WIN32_INTERFACE)
-# include <windows.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (MAX_PATH)
-# endif
-
-
-/*** MS-DOS specifics ***/
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# include <dos.h>
-
-/* Borland defines file length macros in dir.h */
-# if defined(__BORLANDC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# if !defined(_find_t)
-# define _find_t find_t
-# endif
-
-/* Turbo C defines ffblk structure in dir.h */
-# elif defined(__TURBOC__)
-# include <dir.h>
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
-# endif
-# define DIRENT_USE_FFBLK
-
-/* MSVC */
-# elif defined(_MSC_VER)
-# if !defined(DIRENT_MAXNAMLEN)
-# define DIRENT_MAXNAMLEN (12)
-# endif
-
-/* Watcom */
-# elif defined(__WATCOMC__)
-# if !defined(DIRENT_MAXNAMLEN)
-# if defined(__OS2__) || defined(__NT__)
-# define DIRENT_MAXNAMLEN (255)
-# else
-# define DIRENT_MAXNAMLEN (12)
-# endif
-# endif
-
-# endif
-# endif
-
-/*** generic MS-DOS and MS-Windows stuff ***/
-# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
-# define NAME_MAX DIRENT_MAXNAMLEN
-# endif
-# if NAME_MAX < DIRENT_MAXNAMLEN
-# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
-# endif
-
-
-/*
- * Substitute for real dirent structure. Note that `d_name' field is a
- * true character array although we have it copied in the implementation
- * dependent data. We could save some memory if we had declared `d_name'
- * as a pointer referring the name within implementation dependent data.
- * We have not done that since some code may rely on sizeof(d_name) to be
- * something other than four. Besides, directory entries are typically so
- * small that it takes virtually no time to copy them from place to place.
- */
-typedef struct dirent {
- char d_name[NAME_MAX + 1];
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/
- WIN32_FIND_DATA data;
-# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/
-# if defined(DIRENT_USE_FFBLK)
- struct ffblk data;
-# else
- struct _find_t data;
-# endif
-# endif
-} dirent;
-
-/* DIR substitute structure containing directory name. The name is
- * essential for the operation of ``rewinndir'' function. */
-typedef struct DIR {
- char *dirname; /* directory being scanned */
- dirent current; /* current entry */
- int dirent_filled; /* is current un-processed? */
-
- /*** Operating system specific part ***/
-# if defined(DIRENT_WIN32_INTERFACE)
- HANDLE search_handle;
-# elif defined(DIRENT_MSDOS_INTERFACE)
-# endif
-} DIR;
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* supply prototypes for dirent functions */
-static DIR *opendir(const char *dirname);
-static struct dirent *readdir(DIR *dirp);
-static int closedir(DIR *dirp);
-static void rewinddir(DIR *dirp);
-
-/*
- * Implement dirent interface as static functions so that the user does not
- * need to change his project in any way to use dirent function. With this
- * it is sufficient to include this very header from source modules using
- * dirent functions and the functions will be pulled in automatically.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-/* use ffblk instead of _find_t if requested */
-#if defined(DIRENT_USE_FFBLK)
-# define _A_ARCH (FA_ARCH)
-# define _A_HIDDEN (FA_HIDDEN)
-# define _A_NORMAL (0)
-# define _A_RDONLY (FA_RDONLY)
-# define _A_SUBDIR (FA_DIREC)
-# define _A_SYSTEM (FA_SYSTEM)
-# define _A_VOLID (FA_LABEL)
-# define _dos_findnext(dest) findnext(dest)
-# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
-#endif
-
-static int _initdir(DIR *p);
-static const char *_getdirname(const struct dirent *dp);
-static void _setdirname(struct DIR *dirp);
-
-/*
- * <function name="opendir">
- * <intro>open directory stream for reading
- * <syntax>DIR *opendir (const char *dirname);
- *
- * <desc>Open named directory stream for read and return pointer to the
- * internal working area that is used for retrieving individual directory
- * entries. The internal working area has no fields of your interest.
- *
- * <ret>Returns a pointer to the internal working area or NULL in case the
- * directory stream could not be opened. Global `errno' variable will set
- * in case of error as follows:
- *
- * <table>
- * [EACESS |Permission denied.
- * [EMFILE |Too many open files used by the process.
- * [ENFILE |Too many open files in system.
- * [ENOENT |Directory does not exist.
- * [ENOMEM |Insufficient memory.
- * [ENOTDIR |dirname does not refer to directory. This value is not
- * reliable on MS-DOS and MS-Windows platforms. Many
- * implementations return ENOENT even when the name refers to a
- * file.]
- * </table>
- * </function>
- */
-static DIR *opendir(const char *dirname)
-{
- DIR *dirp;
- assert(dirname != NULL);
-
- dirp = (DIR*)malloc(sizeof(struct DIR));
- if (dirp != NULL) {
- char *p;
-
- /* allocate room for directory name */
- dirp->dirname = (char*) malloc(strlen(dirname) + 1 + strlen("\\*.*"));
- if (dirp->dirname == NULL) {
- /* failed to duplicate directory name. errno set by malloc() */
- free(dirp);
- return NULL;
- }
- /* Copy directory name while appending directory separator and "*.*".
- * Directory separator is not appended if the name already ends with
- * drive or directory separator. Directory separator is assumed to be
- * '/' or '\' and drive separator is assumed to be ':'. */
- strcpy(dirp->dirname, dirname);
- p = strchr(dirp->dirname, '\0');
- if (dirp->dirname < p &&
- *(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':') {
- strcpy(p++, "\\");
- }
-# ifdef DIRENT_WIN32_INTERFACE
- strcpy(p, "*"); /*scan files with and without extension in win32*/
-# else
- strcpy(p, "*.*"); /*scan files with and without extension in DOS*/
-# endif
-
- /* open stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed */
- free(dirp->dirname);
- free(dirp);
- return NULL;
- }
- }
- return dirp;
-}
-
-
-/*
- * <function name="readdir">
- * <intro>read a directory entry
- * <syntax>struct dirent *readdir (DIR *dirp);
- *
- * <desc>Read individual directory entry and return pointer to a structure
- * containing the name of the entry. Individual directory entries returned
- * include normal files, sub-directories, pseudo-directories "." and ".."
- * and also volume labels, hidden files and system files in MS-DOS and
- * MS-Windows. You might want to use stat(2) function to determinate which
- * one are you dealing with. Many dirent implementations already contain
- * equivalent information in dirent structure but you cannot depend on
- * this.
- *
- * The dirent structure contains several system dependent fields that
- * generally have no interest to you. The only interesting one is char
- * d_name[] that is also portable across different systems. The d_name
- * field contains the name of the directory entry without leading path.
- * While d_name is portable across different systems the actual storage
- * capacity of d_name varies from system to system and there is no portable
- * way to find out it at compile time as different systems define the
- * capacity of d_name with different macros and some systems do not define
- * capacity at all (besides actual declaration of the field). If you really
- * need to find out storage capacity of d_name then you might want to try
- * NAME_MAX macro. The NAME_MAX is defined in POSIX standard although
- * there are many MS-DOS and MS-Windows implementations those do not define
- * it. There are also systems that declare d_name as "char d_name[1]" and
- * then allocate suitable amount of memory at run-time. Thanks to Alain
- * Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
- *
- * This all leads to the fact that it is difficult to allocate space
- * for the directory names when the very same program is being compiled on
- * number of operating systems. Therefore I suggest that you always
- * allocate space for directory names dynamically.
- *
- * <ret>
- * Returns a pointer to a structure containing name of the directory entry
- * in `d_name' field or NULL if there was an error. In case of an error the
- * global `errno' variable will set as follows:
- *
- * <table>
- * [EBADF |dir parameter refers to an invalid directory stream. This value
- * is not set reliably on all implementations.]
- * </table>
- * </function>
- */
-static struct dirent *
-readdir(DIR *dirp)
-{
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return NULL;
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* directory stream was opened/rewound incorrectly or it ended normally */
- errno = EBADF;
- return NULL;
- }
-#endif
-
- if (dirp->dirent_filled != 0) {
- /*
- * Directory entry has already been retrieved and there is no need to
- * retrieve a new one. Directory entry will be retrieved in advance
- * when the user calls readdir function for the first time. This is so
- * because real dirent has separate functions for opening and reading
- * the stream whereas Win32 and DOS dirents open the stream
- * automatically when we retrieve the first file. Therefore, we have to
- * save the first file when opening the stream and later we have to
- * return the saved entry when the user tries to read the first entry.
- */
- dirp->dirent_filled = 0;
- } else {
- /* fill in entry and return that */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (FindNextFile(dirp->search_handle, &dirp->current.data) == FALSE) {
- /* Last file has been processed or an error occurred */
- FindClose(dirp->search_handle);
- dirp->search_handle = INVALID_HANDLE_VALUE;
- errno = ENOENT;
- return NULL;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findnext(&dirp->current.data) != 0) {
- /* _dos_findnext and findnext will set errno to ENOENT when no
- * more entries could be retrieved. */
- return NULL;
- }
-# endif
-
- _setdirname(dirp);
- assert(dirp->dirent_filled == 0);
- }
- return &dirp->current;
-}
-
-
-/*
- * <function name="closedir">
- * <intro>close directory stream.
- * <syntax>int closedir (DIR *dirp);
- *
- * <desc>Close directory stream opened by the `opendir' function. Close of
- * directory stream invalidates the DIR structure as well as previously read
- * dirent entry.
- *
- * <ret>The function typically returns 0 on success and -1 on failure but
- * the function may be declared to return void on same systems. At least
- * Borland C/C++ and some UNIX implementations use void as a return type.
- * The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
- * known to return nothing. The very same definition is made by the GNU
- * autoconf if you happen to use it.
- *
- * The global `errno' variable will set to EBADF in case of error.
- * </function>
- */
-static int
-closedir(DIR *dirp)
-{
- int retcode = 0;
-
- /* make sure that dirp points to legal structure */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return -1;
- }
-
- /* free directory name and search handles */
- if (dirp->dirname != NULL) {
- free(dirp->dirname);
- }
-
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- retcode = -1;
- errno = EBADF;
- }
- }
-#endif
-
- /* clear dirp structure to make sure that it cannot be used anymore*/
- memset(dirp, 0, sizeof(*dirp));
-# if defined(DIRENT_WIN32_INTERFACE)
- dirp->search_handle = INVALID_HANDLE_VALUE;
-# endif
-
- free(dirp);
- return retcode;
-}
-
-
-/*
- * <function name="rewinddir">
- * <intro>rewind directory stream to the beginning
- * <syntax>void rewinddir (DIR *dirp);
- *
- * <desc>Rewind directory stream to the beginning so that the next call of
- * readdir() returns the very first directory entry again. However, note
- * that next call of readdir() may not return the same directory entry as it
- * did in first time. The directory stream may have been affected by newly
- * created files.
- *
- * Almost every dirent implementation ensure that rewinddir will update
- * the directory stream to reflect any changes made to the directory entries
- * since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on
- * this if your program depends on the feature. I know at least one dirent
- * implementation where you are required to close and re-open the stream to
- * see the changes.
- *
- * <ret>Returns nothing. If something went wrong while rewinding, you will
- * notice it later when you try to retrieve the first directory entry.
- */
-static void
-rewinddir(DIR *dirp)
-{
- /* make sure that dirp is legal */
- assert(dirp != NULL);
- if (dirp == NULL) {
- errno = EBADF;
- return;
- }
- assert(dirp->dirname != NULL);
-
- /* close previous stream */
-#if defined(DIRENT_WIN32_INTERFACE)
- if (dirp->search_handle != INVALID_HANDLE_VALUE) {
- if (FindClose(dirp->search_handle) == FALSE) {
- /* Unknown error */
- errno = EBADF;
- }
- }
-#endif
-
- /* re-open previous stream */
- if (_initdir(dirp) == 0) {
- /* initialization failed but we cannot deal with error. User will notice
- * error later when she tries to retrieve first directory enty. */
- /*EMPTY*/;
- }
-}
-
-
-/*
- * Open native directory stream object and retrieve first file.
- * Be sure to close previous stream before opening new one.
- */
-static int
-_initdir(DIR *dirp)
-{
- assert(dirp != NULL);
- assert(dirp->dirname != NULL);
- dirp->dirent_filled = 0;
-
-# if defined(DIRENT_WIN32_INTERFACE)
- /* Open stream and retrieve first file */
- dirp->search_handle = FindFirstFile(dirp->dirname, &dirp->current.data);
- if (dirp->search_handle == INVALID_HANDLE_VALUE) {
- /* something went wrong but we don't know what. GetLastError() could
- * give us more information about the error, but then we should map
- * the error code into errno. */
- errno = ENOENT;
- return 0;
- }
-
-# elif defined(DIRENT_MSDOS_INTERFACE)
- if (_dos_findfirst(dirp->dirname,
- _A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
- &dirp->current.data) != 0) {
- /* _dos_findfirst and findfirst will set errno to ENOENT when no
- * more entries could be retrieved. */
- return 0;
- }
-# endif
-
- /* initialize DIR and it's first entry */
- _setdirname(dirp);
- dirp->dirent_filled = 1;
- return 1;
-}
-
-
-/*
- * Return implementation dependent name of the current directory entry.
- */
-static const char *
-_getdirname(const struct dirent *dp)
-{
-#if defined(DIRENT_WIN32_INTERFACE)
- return dp->data.cFileName;
-
-#elif defined(DIRENT_USE_FFBLK)
- return dp->data.ff_name;
-
-#else
- return dp->data.name;
-#endif
-}
-
-
-/*
- * Copy name of implementation dependent directory entry to the d_name field.
- */
-static void
-_setdirname(struct DIR *dirp)
-{
- /* make sure that d_name is long enough */
- assert(strlen(_getdirname(&dirp->current)) <= NAME_MAX);
-
- strncpy(dirp->current.d_name,
- _getdirname(&dirp->current),
- NAME_MAX);
- dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
-}
-
-# ifdef __cplusplus
-}
-# endif
-# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
-
-#else
-# error "missing dirent interface"
-#endif
-
-
-#endif /*DIRENT_H*/
diff --git a/openjpeg/src/bin/mj2/CMakeLists.txt b/openjpeg/src/bin/mj2/CMakeLists.txt
deleted file mode 100644
index 5d3e288b..00000000
--- a/openjpeg/src/bin/mj2/CMakeLists.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-# Makefile for the MJ2 codecs of the OpenJPEG library: frames_to_mj2, mj2_to_frames, extract_j2k_from_mj2 and wrap_j2k_in_mj2
-
-set(common_SRCS ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c)
-
-if(WIN32)
- if(BUILD_SHARED_LIBS)
- add_definitions(-DOPJ_EXPORTS)
- else()
- add_definitions(-DOPJ_STATIC)
- endif()
-endif()
-
-# Headers file are located here:
-include_directories(
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
- ${OPENJPEG_BINARY_DIR}/src/bin/common # opj_apps_config.h
- ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
- ${OPENJPEG_SOURCE_DIR}/src/bin/common
- ${LCMS_INCLUDE_DIRNAME}
- )
-
-foreach(exe
- opj_mj2_wrap
- opj_mj2_extract
- opj_mj2_decompress
- opj_mj2_compress
-)
- add_definitions(-DOPJ_USE_LEGACY)
- add_executable(${exe}
- ${exe}.c
- ${common_SRCS}
- ${MJ2_SRCS}
- ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
- )
- set_property(
- TARGET ${exe}
- APPEND PROPERTY COMPILE_DEFINITIONS USE_MJ2
- )
- target_link_libraries(${exe} ${LCMS_LIBNAME} openmj2)
-
- if(UNIX)
- target_link_libraries(${exe} m)
- endif()
-
- install(TARGETS ${exe}
- DESTINATION ${OPENJPEG_INSTALL_BIN_DIR})
-endforeach()
diff --git a/openjpeg/src/bin/mj2/meta_out.c b/openjpeg/src/bin/mj2/meta_out.c
deleted file mode 100644
index 2c0e2737..00000000
--- a/openjpeg/src/bin/mj2/meta_out.c
+++ /dev/null
@@ -1,2858 +0,0 @@
-/* meta_out.c */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Callable from mj2_to_metadata */
-/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
-
-The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD.
-It is the policy of NLM (and U.S. government) to not assert copyright.
-
-A non-exclusive copy of this code has been contributed to the Open JPEG project.
-Except for copyright, inclusion of the code within Open JPEG for distribution and use
-can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere.
-*/
-
-#include <windows.h> /* for time functions */
-
-#include "opj_includes.h"
-#include "mj2.h"
-
-#include <time.h>
-#include "meta_out.h"
-
-static BOOL notes = TRUE;
-static BOOL sampletables = FALSE;
-static BOOL raw = TRUE;
-static BOOL derived = TRUE;
-
-opj_tcp_t *j2k_default_tcp;
-
-/* Forwards */
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-
-void uint_to_chars(unsigned int value, char* buf);
-
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum);
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum);
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum);
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum);
-
-void UnixTimeToFileTime(time_t t, LPFILETIME pft);
-void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst);
-void xml_time_out(FILE* xmlout, time_t t);
-
-void int16_to_3packedchars(short int value, char* buf);
-
-void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie);
-void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie);
-void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie);
-
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
- unsigned int snum, opj_event_mgr_t *event_mgr);
-
-void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp);
-void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
- int numcomps); /* opj_image_t *img); */
-BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
-void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp,
- int numcomps); /* opj_image_t *img); */
-BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
-void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp,
- int numcomps);/* opj_image_t *img);*/
-void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_ppm(FILE* xmlout, opj_cp_t *cp);
-void xml_out_frame_ppt(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_tlm(FILE*
- xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP. TLM NOT SAVED IN DATA STRUCTURE */
-void xml_out_frame_plm(FILE*
- xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE. opt in main; can be used in conjunction with PLT */
-void xml_out_frame_plt(FILE* xmlout,
- opj_tcp_t *tcp); /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE. opt in main; can be used in conjunction with PLT */
-void xml_out_frame_crg(FILE*
- xmlout); /* j2k_default_tcp is passed globally */ /* opt in main; */
-void xml_out_frame_com(FILE* xmlout,
- opj_tcp_t *tcp); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s);
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
- char* s);
-void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct);
-#ifdef NOTYET
-/* Shown with cp, extended, as data structure... but it could be a new different one */
-void xml_out_frame_jp2i(FILE* xmlout,
- opj_cp_t *cp);/* IntellectualProperty 'jp2i' (no restrictions on location) */
-void xml_out_frame_xml(FILE* xmlout,
- opj_cp_t *cp); /* XML 'xml\040' (0x786d6c20). Can appear multiply */
-void xml_out_frame_uuid(FILE* xmlout,
- opj_cp_t *cp); /* UUID 'uuid' (top level only) */
-void xml_out_frame_uinf(FILE* xmlout,
- opj_cp_t *cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp);
-#endif
-
-
-void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d)
-{
- /* Init file globals */
- notes = n;
- sampletables = t;
- raw = r;
- derived = d;
-}
-
-int xml_write_struct(FILE* file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr)
-{
-
- if (stringDTD != NULL) {
- fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"no\"?>\n");
- /* stringDTD is known to start with "SYSTEM " or "PUBLIC " */
- /* typical: SYSTEM mj2_to_metadata.dtd */
- stringDTD[6] =
- '\0'; /* Break into two strings at space, so quotes can be inserted. */
- fprintf(xmlout, "<!DOCTYPE MJ2_File %s \"%s\">\n", stringDTD, stringDTD + 7);
- stringDTD[6] = ' '; /* restore for sake of debugger or memory allocator */
- } else {
- fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"yes\"?>\n");
- }
-
- fprintf(xmlout, "<MJ2_File>\n");
- xml_write_overall_header(file, xmlout, movie, sampleframe, event_mgr);
- fprintf(xmlout, "</MJ2_File>");
- return 0;
-}
-
-/* ------------- */
-
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
- int i;
- char buf[5];
- buf[4] = '\0';
-
- fprintf(xmlout,
- " <JP2 BoxType=\"jP[space][space]\" Signature=\"0x0d0a870a\" />\n");
- // Called after structure initialized by mj2_read_ftyp
- fprintf(xmlout, " <FileType BoxType=\"ftyp\">\n");
- uint_to_chars(movie->brand, buf);
- fprintf(xmlout, " <Brand>%s</Brand>\n",
- buf); /* 4 character; BR */
- fprintf(xmlout, " <MinorVersion>%u</MinorVersion>\n",
- movie->minversion); /* 4 char; MinV */
- fprintf(xmlout, " <CompatibilityList Count=\"%d\">\n", movie->num_cl);
- for (i = movie->num_cl - 1; i > -1;
- i--) { /* read routine stored in reverse order, so let's undo damage */
- uint_to_chars(movie->cl[i], buf);
- fprintf(xmlout, " <CompatibleBrand>%s</CompatibleBrand>\n",
- buf); /*4 characters, each CLi */
- }
- fprintf(xmlout, " </CompatibilityList>\n");
- fprintf(xmlout, " </FileType>\n");
- xml_write_moov(file, xmlout, movie, sampleframe, event_mgr);
- // To come? <mdat> // This is the container for media data that can also be accessed through track structures,
- // so is redundant, and simply not of interest as metadata
- // <moof> // Allows incremental build up of movie. Probably not in Simple Profile
- xml_write_free_and_skip(xmlout,
- movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
- xml_write_uuid(xmlout,
- movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
- return 0;
-}
-
-/* ------------- */
-
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
- unsigned int tnum;
- mj2_tk_t *track;
-
- fprintf(xmlout, " <MovieBox BoxType=\"moov\">\n");
- fprintf(xmlout, " <MovieHeader BoxType=\"mvhd\">\n");
- fprintf(xmlout, " <CreationTime>\n");
- if (raw) {
- fprintf(xmlout, " <InSeconds>%u</InSeconds>\n", movie->creation_time);
- }
- if (notes) {
- fprintf(xmlout,
- " <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
- }
- /* 2082844800 = seconds between 1/1/04 and 1/1/70 */
- /* There's still a time zone offset problem not solved... but spec is ambiguous as to whether stored time
- should be local or UTC */
- if (derived) {
- fprintf(xmlout, " <AsLocalTime>");
- xml_time_out(xmlout, movie->creation_time - 2082844800);
- fprintf(xmlout, "</AsLocalTime>\n");
- }
- fprintf(xmlout, " </CreationTime>\n");
- fprintf(xmlout, " <ModificationTime>\n");
- if (raw) {
- fprintf(xmlout, " <InSeconds>%u</InSeconds>\n",
- movie->modification_time);
- }
- if (derived) {
- fprintf(xmlout, " <AsLocalTime>");
- xml_time_out(xmlout, movie->modification_time - 2082844800);
- fprintf(xmlout, "</AsLocalTime>\n");
- }
- fprintf(xmlout, " </ModificationTime>\n");
- fprintf(xmlout, " <Timescale>%d</Timescale>\n", movie->timescale);
- if (notes) {
- fprintf(xmlout, " <!-- Timescale defines time units in one second -->\n");
- }
- fprintf(xmlout,
- " <Rate>\n"); /* Rate to play presentation (default = 0x00010000) */
- if (notes) {
- fprintf(xmlout,
- " <!-- Rate to play presentation is stored as fixed-point binary 16.16 value. Decimal value is approximation. -->\n");
- fprintf(xmlout,
- " <!-- Rate is expressed relative to normal (default) value of 0x00010000 (1.0) -->\n");
- }
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%08x</AsHex>\n", movie->rate);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%12.6f</AsDecimal>\n",
- (double)movie->rate / (double)0x00010000);
- }
- fprintf(xmlout, " </Rate>\n");
- fprintf(xmlout, " <Duration>\n");
- if (raw) {
- fprintf(xmlout, " <InTimeUnits>%u</InTimeUnits>\n", movie->duration);
- }
- if (derived) {
- fprintf(xmlout, " <InSeconds>%12.3f</InSeconds>\n",
- (double)movie->duration / (double)
- movie->timescale); // Make this double later to get fractional seconds
- }
- fprintf(xmlout, " </Duration>\n");
-#ifdef CURRENTSTRUCT
- movie->volume = movie->volume << 8;
-#endif
- fprintf(xmlout, " <Volume>\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
- fprintf(xmlout,
- " <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
- }
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%04x</AsHex>\n", movie->volume);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%6.3f</AsDecimal>\n",
- (double)movie->volume / (double)0x0100);
- }
- fprintf(xmlout, " </Volume>\n");
-#ifdef CURRENTSTRUCT
- if (notes) {
- fprintf(xmlout,
- " <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
- }
- movie->volume = movie->volume >> 8;
-#endif
- /* Transformation matrix for video */
- fprintf(xmlout, " <TransformationMatrix>\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}. Required: u=0, v=0, w=1 -->\n");
- fprintf(xmlout,
- " <!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->\n");
- fprintf(xmlout,
- " <!-- Stored as Fixed Point Hex: all are binary 16.16, except u,v,w are 2.30 -->\n");
- fprintf(xmlout,
- " <!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->\n");
- }
- fprintf(xmlout, " <TMa>0x%08x</TMa>\n", movie->trans_matrix[0]);
- fprintf(xmlout, " <TMb>0x%08x</TMb>\n", movie->trans_matrix[1]);
- fprintf(xmlout, " <TMu>0x%08x</TMu>\n", movie->trans_matrix[2]);
- fprintf(xmlout, " <TMc>0x%08x</TMc>\n", movie->trans_matrix[3]);
- fprintf(xmlout, " <TMd>0x%08x</TMd>\n", movie->trans_matrix[4]);
- fprintf(xmlout, " <TMv>0x%08x</TMv>\n", movie->trans_matrix[5]);
- fprintf(xmlout, " <TMx>0x%08x</TMx>\n", movie->trans_matrix[6]);
- fprintf(xmlout, " <TMy>0x%08x</TMy>\n", movie->trans_matrix[7]);
- fprintf(xmlout, " <TMw>0x%08x</TMw>\n", movie->trans_matrix[8]);
- fprintf(xmlout, " </TransformationMatrix>\n");
- fprintf(xmlout, " </MovieHeader>\n");
-
- fprintf(xmlout, " <Statistics>\n");
- fprintf(xmlout, " <TracksFound>\n");
- fprintf(xmlout, " <Video>%d</Video>\n", movie->num_vtk);
- fprintf(xmlout, " <Audio>%d</Audio>\n", movie->num_stk);
- fprintf(xmlout, " <Hint>%d</Hint>\n", movie->num_htk);
- if (notes) {
- fprintf(xmlout,
- " <!-- Hint tracks for streaming video are not part of MJ2, but are a defined extension. -->\n");
- }
- /* See Part 3 Amend 2 Section 4.2 for relation of MJ2 to Part 12 Sections 7 and 10 hints */
- fprintf(xmlout, " </TracksFound>\n");
- fprintf(xmlout, " </Statistics>\n");
- /* Idea for the future: It would be possible to add code to verify that the file values:
- 1) are legal and self-consistent
- 2) comply with particular JP2 and/or MJ2 profiles.
- This could be reported here as additional XML elements */
-
- // Find first video track
- tnum = 0;
- while (movie->tk[tnum].track_type != 0) {
- tnum ++;
- }
-
- track = &(movie->tk[tnum]);
- // For now, output info on first video track
- xml_write_trak(file, xmlout, track, tnum, sampleframe, event_mgr);
-
- // to come: <MovieExtends mvek> // possibly not in Simple Profile
- xml_write_moov_udta(xmlout,
- movie); /* NO OP so far */ /* <UserDataBox udta> contains <CopyrightBox cprt> */
- fprintf(xmlout, " </MovieBox>\n");
- return 0;
-}
-
-/* --------------- */
-
-void uint_to_chars(unsigned int value, char* buf)
-{
- /* buf is at least char[5] */
- int i;
- for (i = 3; i >= 0; i--) {
- buf[i] = (value & 0x000000ff);
- value = (value >> 8);
- }
- buf[4] = '\0'; /* Precautionary */
-}
-
-/* ------------- */
-
-/* WINDOWS SPECIFIC */
-
-void UnixTimeToFileTime(time_t t, LPFILETIME pft)
-{
- /* Windows specific. From MS Q167296 */
- /* 'time_t' represents seconds since midnight January 1, 1970 UTC (coordinated universal time). */
- /* 64-bit FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601 UTC (coordinate universal time). */
- LONGLONG ll; /* LONGLONG is a 64-bit value. */
- ll = Int32x32To64(t, 10000000) + 116444736000000000;
- pft->dwLowDateTime = (DWORD)ll;
- /* pft->dwLowDateTime = (DWORD)(0x00000000ffffffff & ll); */
- pft->dwHighDateTime = (DWORD)(ll >> 32);
-}
-// Once the UNIX time is converted to a FILETIME structure,
-// other Win32 time formats can be easily obtained by using Win32 functions such
-// as FileTimeToSystemTime() and FileTimeToDosDateTime().
-
-/* ------------- */
-
-void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
-{
- /* Windows specific */
- FILETIME ft;
- UnixTimeToFileTime(t, &ft);
- FileTimeToLocalFileTime(&ft, &ft); /* Adjust from UTC to local time zone */
- FileTimeToSystemTime(&ft, pst);
-}
-
-/* ------------- */
-
-void xml_time_out(FILE* xmlout, time_t t)
-{
- /* Windows specific */
- SYSTEMTIME st;
- char szLocalDate[255], szLocalTime[255];
- UnixTimeToSystemTime(t, &st);
- GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szLocalDate, 255);
- GetTimeFormat(LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255);
- fprintf(xmlout, "%s %s", szLocalDate, szLocalTime);
-}
-
-/* END WINDOWS SPECIFIC */
-
-/* ------------- */
-
-void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie)
-{
- /* Compare with xml_write_udta */
-#ifdef NOTYET
- /* NO-OP so far. Optional UserData 'udta' (zero or one in moov or each trak)
- can contain multiple Copyright 'cprt' with different language codes */
- /* There may be nested non-standard boxes within udta */
- IMAGINE movie->udta, movie->copyright_count,
- movie->copyright_language[i](array of 16bit ints),
- movie->copyright_notice[i](array of buffers)
- PROBABLY ALSO NEED movie->udta_len or special handler for non - standard boxes
- char buf[5];
- int i;
-
- if (movie->udta != 1) {
- return; /* Not present */
- }
-
- fprintf(xmlout, " <UserData BoxType=\"udta\">\n");
- for (i = 0; i < movie->copyright_count; i++) {
- fprintf(xmlout, " <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
- i + 1);
- int16_to_3packedchars((short int)movie->copyright_languages[i], buf);
- fprintf(xmlout, " <Language>%s</Language>\n", buf); /* 3 chars */
- fprintf(xmlout, " <Notice>%s</Notice>\n", movie->copyright_notices[i]);
- fprintf(xmlout, " </Copyright>\n", i + 1);
- }
- /* TO DO: Non-standard boxes */
- fprintf(xmlout, " </UserData>\n");
-#endif
-}
-
-void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie)
-{
-#ifdef NOTYET
- /* NO-OP so far. There can be zero or more instances of free and/or skip
- at the top level of the file. This may be a place where the user squirrel's metadata.
- Let's assume unstructured, and do a dump */
- IMAGINE movie->free_and_skip, movie->free_and_skip_count,
- movie->free_and_skip_content[i](array of buffers),
- movie->free_and_skip_len[i](array of ints), movie->is_skip[i](array of BOOL)
- int i;
-
- if (movie->free_and_skip != 1) {
- return; /* Not present */
- }
-
- for (i = 0; i < movie->free_and_skip_count; i++) {
- if (movie->is_skip[i]) {
- fprintf(xmlout, " <Skip BoxType=\"skip\">\n");
- } else {
- fprintf(xmlout, " <Free BoxType=\"free\">\n");
- }
-
- xml_out_dump_hex_and_ascii(xmlout, movie->free_and_skip_contents[i],
- movie->free_and_skip_len[i]);
-
- if (movie->is_skip[i]) {
- fprintf(xmlout, " </Skip>\n");
- } else {
- fprintf(xmlout, " </Free>\n");
- }
- }
-#endif
-}
-
-void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie)
-{
- /* Universal Unique IDs of 16 bytes. */
-#ifdef NOTYET
- /* NO-OP so far. There can be zero or more instances of private uuid boxes in a file.
- This function supports the top level of the file, but uuid may be elsewhere [not yet supported].
- This may be a place where the user squirrel's metadata. Let's assume unstructured, and do a dump */
- IMAGINE movie->uuid, movie->uuid_count,
- movie->uuid_content[i](array of buffers),
- movie->uuid_len[i](array of ints),
- movie->uuid_type[i](array of 17 - byte(16 + null termination) buffers)
- int i;
-
- if (movie->uuid != 1) {
- return; /* Not present */
- }
-
- for (i = 0; i < movie->uuid_count; i++) {
- fprintf(xmlout, " <PrivateExtension BoxType=\"uuid\" UUID=\"%s\">\n",
- movie->uuid_type[i]);
- // See Part III section 5.2.1, 6.1, 6.2
- xml_out_dump_hex_and_ascii(xmlout, movie->uuid_contents[i], movie->uuid_len[i]);
- fprintf(xmlout, " </PrivateExtension>\n");
- }
-#endif
-}
-
-/* ------------- */
-
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
-{
- fprintf(xmlout, " <Track BoxType=\"trak\" Instance=\"%d\">\n", tnum);
- xml_write_tkhd(file, xmlout, track, tnum);
- // TO DO: TrackReferenceContainer 'tref' just used in hint track
- // TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate
- xml_write_mdia(file, xmlout, track, tnum);
- xml_write_udta(file, xmlout, track,
- tnum); // NO-OP so far. Optional UserData 'udta', can contain multiple Copyright 'cprt'
-
- if (track->track_type == 0) { /* Only do for visual track */
- /* sampleframe is from user option -f. 1 = first frame */
- /* sampleframe of 0 is a user requests: no jp2 header */
- /* Treat out-of-bounds values in the same way */
- if (sampleframe > 0 && sampleframe <= track->num_samples) {
- mj2_sample_t *sample;
- unsigned int snum;
-
- snum = sampleframe - 1;
- // Someday maybe do a smart range scan... for (snum=0; snum < track->num_samples; snum++){
- // fprintf(stdout,"Frame %d: ",snum+1);
- sample = &track->sample[snum];
- if (xml_out_frame(file, xmlout, sample, snum, event_mgr)) {
- return; /* Not great error handling here */
- }
- }
- }
- fprintf(xmlout, " </Track>\n");
-}
-
-/* ------------- */
-
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum)
-{
- fprintf(xmlout, " <TrackHeader BoxType=\"tkhd\">\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Not shown here: CreationTime, ModificationTime, Duration. -->\n");
- fprintf(xmlout,
- " <!-- These 3 fields are reported under MediaHeader below. When reading these 3, -->\n");
- fprintf(xmlout,
- " <!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->\n");
- fprintf(xmlout,
- " <!-- If both found, value read from MediaHeader is used. -->\n");
- }
- fprintf(xmlout, " <TrackID>%u</TrackID>\n", track->track_ID);
- if (track->track_type == 0) { /* For visual track */
- fprintf(xmlout, " <TrackLayer>%d</TrackLayer>\n", track->layer);
- if (notes) {
- fprintf(xmlout,
- " <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->\n");
- }
- }
- if (track->track_type != 0) { /* volume irrelevant for visual track */
-#ifdef CURRENTSTRUCT
- track->volume = track->volume << 8;
-#endif
- fprintf(xmlout, " <Volume>\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Track audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
- fprintf(xmlout,
- " <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
- }
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%04x</AsHex>\n", track->volume);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%6.3f</AsDecimal>\n",
- (double)track->volume / (double)0x0100);
- }
- fprintf(xmlout, " </Volume>\n");
-#ifdef CURRENTSTRUCT
- if (notes) {
- fprintf(xmlout,
- " <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
- }
- track->volume = track->volume >> 8;
-#endif
- }
- if (track->track_type == 0) {
- /* Transformation matrix for video */
- fprintf(xmlout, " <TransformationMatrix>\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Comments about matrix in MovieHeader apply here as well. -->\n");
- fprintf(xmlout,
- " <!-- This matrix is applied before MovieHeader one. -->\n");
- }
- fprintf(xmlout, " <TMa>0x%08x</TMa>\n", track->trans_matrix[0]);
- fprintf(xmlout, " <TMb>0x%08x</TMb>\n", track->trans_matrix[1]);
- fprintf(xmlout, " <TMu>0x%08x</TMu>\n", track->trans_matrix[2]);
- fprintf(xmlout, " <TMc>0x%08x</TMc>\n", track->trans_matrix[3]);
- fprintf(xmlout, " <TMd>0x%08x</TMd>\n", track->trans_matrix[4]);
- fprintf(xmlout, " <TMv>0x%08x</TMv>\n", track->trans_matrix[5]);
- fprintf(xmlout, " <TMx>0x%08x</TMx>\n", track->trans_matrix[6]);
- fprintf(xmlout, " <TMy>0x%08x</TMy>\n", track->trans_matrix[7]);
- fprintf(xmlout, " <TMw>0x%08x</TMw>\n", track->trans_matrix[8]);
- fprintf(xmlout, " </TransformationMatrix>\n");
- }
-#ifdef CURRENTSTRUCT
- track->w = track->w << 16;
- track->h = track->h << 16;
-#endif
- if (notes) {
- fprintf(xmlout,
- " <!-- Width and Height in pixels are for the presentation; frames will be scaled to this. -->\n");
- fprintf(xmlout,
- " <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
- }
- fprintf(xmlout, " <Width>\n");
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%08x</AsHex>\n", track->w);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%12.6f</AsDecimal>\n",
- (double)track->w / (double)
- 0x00010000); /* Rate to play presentation (default = 0x00010000) */
- }
- fprintf(xmlout, " </Width>\n");
- fprintf(xmlout, " <Height>\n");
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%08x</AsHex>\n", track->h);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%12.6f</AsDecimal>\n",
- (double)track->h / (double)
- 0x00010000); /* Rate to play presentation (default = 0x00010000) */
- }
- fprintf(xmlout, " </Height>\n");
-#ifdef CURRENTSTRUCT
- if (notes) {
- fprintf(xmlout,
- " <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
- fprintf(xmlout,
- " <!-- Also, width and height values shown here will actually be those read from track's <VisualSampleEntry> if given. -->\n");
- }
- track->w = track->w >> 16;
- track->h = track->h >> 16;
-#endif
- fprintf(xmlout, " </TrackHeader>\n");
-}
-
-/* ------------- */
-
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum)
-{
- /* NO-OP so far. Optional UserData 'udta' (zero or one in moov or each trak)
- can contain multiple Copyright 'cprt' with different language codes */
- /* There may be nested non-standard boxes within udta */
-#ifdef NOTYET
- IMAGINE track->udta, track->copyright_count,
- track->copyright_language[i](array of 16bit ints),
- track->copyright_notice[i](array of buffers)
- PROBABLY ALSO NEED track->udta_len or special handler for non - standard boxes
- char buf[5];
- int i;
-
- if (track->udta != 1) {
- return; /* Not present */
- }
-
- fprintf(xmlout, " <UserData BoxType=\"udta\">\n");
- for (i = 0; i < track->copyright_count; i++) {
- fprintf(xmlout, " <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
- i + 1);
- int16_to_3packedchars((short int)track->copyright_languages[i], buf);
- fprintf(xmlout, " <Language>%s</Language>\n", buf); /* 3 chars */
- fprintf(xmlout, " <Notice>%s</Notice>\n",
- track->copyright_notices[i]);
- fprintf(xmlout, " </Copyright>\n", i + 1);
- }
- /* TO DO: Non-standard boxes */
- fprintf(xmlout, " </UserData>\n");
-#endif
-}
-
-/* ------------- */
-
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum)
-{
- char buf[5];
- int i, k;
- buf[4] = '\0';
-
- fprintf(xmlout, " <Media BoxType=\"mdia\">\n");
- fprintf(xmlout, " <MediaHeader BoxType=\"mdhd\">\n");
- fprintf(xmlout, " <CreationTime>\n");
- if (raw) {
- fprintf(xmlout, " <InSeconds>%u</InSeconds>\n",
- track->creation_time);
- }
- if (notes) {
- fprintf(xmlout,
- " <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
- }
- /* 2082844800 = seconds between 1/1/04 and 1/1/70 */
- /* There's still a time zone offset problem not solved... but spec is ambiguous as to whether stored time
- should be local or UTC */
- if (derived) {
- fprintf(xmlout, " <AsLocalTime>");
- xml_time_out(xmlout, track->creation_time - 2082844800);
- fprintf(xmlout, "</AsLocalTime>\n");
- }
- fprintf(xmlout, " </CreationTime>\n");
- fprintf(xmlout, " <ModificationTime>\n");
- if (raw) {
- fprintf(xmlout, " <InSeconds>%u</InSeconds>\n",
- track->modification_time);
- }
- if (derived) {
- fprintf(xmlout, " <AsLocalTime>");
- xml_time_out(xmlout, track->modification_time - 2082844800);
- fprintf(xmlout, "</AsLocalTime>\n");
- }
- fprintf(xmlout, " </ModificationTime>\n");
- fprintf(xmlout, " <Timescale>%d</Timescale>\n", track->timescale);
- if (notes) {
- fprintf(xmlout,
- " <!-- Timescale defines time units in one second -->\n");
- }
- fprintf(xmlout, " <Duration>\n");
- if (raw) {
- fprintf(xmlout, " <InTimeUnits>%u</InTimeUnits>\n",
- track->duration);
- }
- if (derived) {
- fprintf(xmlout, " <InSeconds>%12.3f</InSeconds>\n",
- (double)track->duration / (double)
- track->timescale); // Make this double later to get fractional seconds
- }
- fprintf(xmlout, " </Duration>\n");
- int16_to_3packedchars((short int)track->language, buf);
- fprintf(xmlout, " <Language>%s</Language>\n", buf); /* 3 chars */
- fprintf(xmlout, " </MediaHeader>\n");
- fprintf(xmlout, " <HandlerReference BoxType=\"hdlr\">\n");
- switch (track->track_type) {
- case 0:
- fprintf(xmlout,
- " <HandlerType Code=\"vide\">video media track</HandlerType>\n");
- break;
- case 1:
- fprintf(xmlout, " <HandlerType Code=\"soun\">Sound</HandlerType>\n");
- break;
- case 2:
- fprintf(xmlout, " <HandlerType Code=\"hint\">Hint</HandlerType>\n");
- break;
- }
- if (notes) {
- fprintf(xmlout,
- " <!-- String value shown is not actually read from file. -->\n");
- fprintf(xmlout,
- " <!-- Shown value is one used for our encode. -->\n");
- }
- fprintf(xmlout, " </HandlerReference>\n");
- fprintf(xmlout, " <MediaInfoContainer BoxType=\"minf\">\n");
- switch (track->track_type) {
- case 0:
- fprintf(xmlout, " <VideoMediaHeader BoxType=\"vmhd\">\n");
- fprintf(xmlout, " <GraphicsMode>0x%02x</GraphicsMode>\n",
- track->graphicsmode);
- if (notes) {
- fprintf(xmlout, " <!-- Enumerated values of graphics mode: -->\n");
- fprintf(xmlout, " <!-- 0x00 = copy (over existing image); -->\n");
- fprintf(xmlout,
- " <!-- 0x24 = transparent; 'blue-screen' this image using opcolor; -->\n");
- fprintf(xmlout,
- " <!-- 0x100 = alpha; alpha-blend this image -->\n");
- /* fprintf(xmlout," <!-- 0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->\n"); This was evidently dropped upon amendment */
- fprintf(xmlout,
- " <!-- 0x102 = pre-multiplied black alpha; image has been already been alpha-blended with black. -->\n");
- fprintf(xmlout,
- " <!-- 0x110 = component alpha; blend alpha channel(s) and color channels individually. -->\n");
- }
- fprintf(xmlout, " <Opcolor>\n");
- fprintf(xmlout, " <Red>0x%02x</Red>\n", track->opcolor[0]);
- fprintf(xmlout, " <Green>0x%02x</Green>\n", track->opcolor[1]);
- fprintf(xmlout, " <Blue>0x%02x</Blue>\n", track->opcolor[2]);
- fprintf(xmlout, " </Opcolor>\n");
- fprintf(xmlout, " </VideoMediaHeader>\n");
- break;
- case 1:
- fprintf(xmlout, " <SoundMediaHeader BoxType=\"smhd\">\n");
-#ifdef CURRENTSTRUCT
- track->balance = track->balance << 8;
-#endif
- fprintf(xmlout, " <Balance>\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Track audio balance fixes mono track in stereo space. -->\n");
- fprintf(xmlout,
- " <!-- Stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
- fprintf(xmlout,
- " <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->\n");
- }
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%04x</AsHex>\n", track->balance);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%6.3f</AsDecimal>\n",
- (double)track->balance / (double)0x0100);
- }
- fprintf(xmlout, " </Balance>\n");
-#ifdef CURRENTSTRUCT
- if (notes) {
- fprintf(xmlout,
- " <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
- }
- track->balance = track->balance >> 8;
-#endif
- fprintf(xmlout, " </SoundMediaHeader>\n");
- break;
- case 2:
- fprintf(xmlout, " <HintMediaHeader BoxType=\"hmhd\">\n");
- fprintf(xmlout, " <MaxPDU_Size>%d</MaxPDU_Size>\n",
- track->maxPDUsize);
- if (notes) {
- fprintf(xmlout,
- " <!-- Size in bytes of largest PDU in this hint stream. -->\n");
- }
- fprintf(xmlout, " <AvgPDU_Size>%d</AvgPDU_Size>\n",
- track->avgPDUsize);
- if (notes) {
- fprintf(xmlout,
- " <!-- Average size in bytes of a PDU over the entire presentation. -->\n");
- }
- fprintf(xmlout, " <MaxBitRate>%d</MaxBitRate>\n",
- track->maxbitrate);
- if (notes) {
- fprintf(xmlout,
- " <!-- Maximum rate in bits per second over any window of 1 second. -->\n");
- }
- fprintf(xmlout, " <AvgBitRate>%d</AvgBitRate>\n",
- track->avgbitrate);
- if (notes) {
- fprintf(xmlout,
- " <!-- Averate rate in bits per second over the entire presentation. -->\n");
- }
- fprintf(xmlout, " <SlidingAvgBit>%d</SlidingAvgBitRate>\n",
- track->slidingavgbitrate);
- if (notes) {
- fprintf(xmlout,
- " <!-- Maximum rate in bits per second over any window of one minute. -->\n");
- }
- fprintf(xmlout, " </HintMediaHeader>\n");
- break;
- }
- fprintf(xmlout, " <DataInfo BoxType=\"dinf\">\n");
- fprintf(xmlout,
- " <DataReference BoxType=\"dref\" URL_Count=\"%d\" URN_Count=\"%d\">\n",
- track->num_url, track->num_urn); // table w. flags, URLs, URNs
- // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
- // We could infer those, but for now just present everything as a DREF table.
- if (notes) {
- fprintf(xmlout,
- " <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->\n");
- }
- for (k = 0; k < track->num_url; k++) {
- fprintf(xmlout,
- " <DataEntryUrlBox BoxType=\"url[space]\">\n"); // table w. flags, URLs, URNs
- if (notes) {
- fprintf(xmlout,
- " <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->\n");
- }
- for (i = 0; i < 4; i++) {
- uint_to_chars(track->url[track->num_url].location[i], buf);
- fprintf(xmlout, " <Location>%s</Location>\n");
- }
- fprintf(xmlout,
- " </DataEntryUrlBox>\n"); // table w. flags, URLs, URNs
- }
- for (k = 0; k < track->num_urn; k++) {
- fprintf(xmlout,
- " <DataEntryUrnBox BoxType=\"urn[space]\">\n"); // table w. flags, URLs, URNs
- // Only the first 16 bytes are recorded in the data structure currently.
- if (notes) {
- fprintf(xmlout,
- " <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->\n");
- }
- fprintf(xmlout, " <Name>");
- for (i = 0; i < 4; i++) {
- uint_to_chars(track->urn[track->num_urn].name[i], buf);
- fprintf(xmlout, "%s", buf);
- }
- fprintf(xmlout, "</Name>\n");
- fprintf(xmlout, " <Location>");
- for (i = 0; i < 4; i++) {
- uint_to_chars(track->urn[track->num_urn].location[i], buf);
- fprintf(xmlout, "%s");
- }
- fprintf(xmlout, "</Location>\n");
- fprintf(xmlout, " </DataEntryUrnBox>\n");
- }
- fprintf(xmlout, " </DataReference>\n");
- fprintf(xmlout, " </DataInfo>\n");
-
- xml_write_stbl(file, xmlout, track, tnum); /* SampleTable */
-
- fprintf(xmlout, " </MediaInfoContainer>\n");
- fprintf(xmlout, " </Media>\n");
-}
-
-/* ------------- */
-
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
- unsigned int tnum)
-{
- char buf[5], buf33[33];
- int i, len;
- buf[4] = '\0';
-
- fprintf(xmlout, " <SampleTable BoxType=\"stbl\">\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- What follows are specific instances of generic SampleDescription BoxType=\"stsd\" -->\n");
- }
- switch (track->track_type) {
- case 0:
- // There could be multiple instances of this, but "entry_count" is just a local at read-time.
- // And it's used wrong, too, as count of just visual type, when it's really all 3 types.
- // This is referred to as "smj2" within mj2.c
- fprintf(xmlout, " <VisualSampleEntry BoxType=\"mjp2\">\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- If multiple instances of this box, only first is shown here. -->\n");
- fprintf(xmlout,
- " <!-- Width and Height are in pixels. Unlike the Track Header, there is no fractional part. -->\n");
- fprintf(xmlout,
- " <!-- In mj2_to_metadata implementation, the values are not represented separately from Track Header's values. -->\n");
- }
- /* No shifting required. If CURRENTSTRUCT gets changed, then may need to revisit treatment of these */
- fprintf(xmlout, " <WidthAsInteger>%d</WidthAsInteger>\n",
- track->w);
- fprintf(xmlout, " <HeightAsInteger>%d</HeightAsInteger>\n",
- track->h);
-// Horizresolution and vertresolution don't require shifting, already stored right in CURRENTSTRUCT
- if (notes) {
- fprintf(xmlout,
- " <!-- Resolutions are in pixels per inch, for the highest-resolution component (typically luminance). -->\n");
- fprintf(xmlout,
- " <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
- fprintf(xmlout,
- " <!-- Typical value for both resolutions is 0x00480000 (72.0) -->\n");
- }
- fprintf(xmlout, " <HorizontalRes>\n");
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%08x</AsHex>\n",
- track->horizresolution);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%12.6f</AsDecimal>\n",
- (double)track->horizresolution / (double)
- 0x00010000); /* Rate to play presentation (default = 0x00010000) */
- }
- fprintf(xmlout, " </HorizontalRes>\n");
- fprintf(xmlout, " <VerticalRes>\n");
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%08x</AsHex>\n",
- track->vertresolution);
- }
- if (derived) {
- fprintf(xmlout, " <AsDecimal>%12.6f</AsDecimal>\n",
- (double)track->vertresolution / (double)
- 0x00010000); /* Rate to play presentation (default = 0x00010000) */
- }
- fprintf(xmlout, " </VerticalRes>\n");
-
- buf33[0] = '\0';
- for (i = 0; i < 8; i++) {
- uint_to_chars((unsigned int)track->compressorname[i], buf);
- strcat(buf33,
- buf); /* This loads up (4 * 8) + 1 chars, but trailing ones are usually junk */
- }
- len = (int)
- buf33[0]; /* First byte has string length in bytes. There may be garbage beyond it. */
- buf33[len + 1] = '\0'; /* Suppress it */
- fprintf(xmlout, " <CompressorName>%s</CompressorName>\n",
- buf33 + 1); /* Start beyond first byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- Compressor name for debugging. Standard restricts max length to 31 bytes. -->\n");
- fprintf(xmlout,
- " <!-- Usually blank or \"Motion JPEG2000\" -->\n");
- }
- fprintf(xmlout, " <Depth>0x%02x</Depth>\n", track->depth);
- if (notes) {
- fprintf(xmlout, " <!-- Depth is: -->\n");
- fprintf(xmlout,
- " <!-- 0x20: alpha channels present (color or grayscale) -->\n");
- fprintf(xmlout, " <!-- 0x28: grayscale without alpha -->\n");
- fprintf(xmlout, " <!-- 0x18: color without alpha -->\n");
- }
-
- xml_out_frame_jp2h(xmlout, &(track->jp2_struct)); /* JP2 Header */
-
- /* Following subboxes are optional */
- fprintf(xmlout, " <FieldCoding BoxType=\"fiel\">\n");
- fprintf(xmlout, " <FieldCount>%d</FieldCount>\n",
- (unsigned int)track->fieldcount); /* uchar as 1 byte uint */
- if (notes) {
- fprintf(xmlout, " <!-- Must be either 1 or 2 -->\n");
- }
- fprintf(xmlout, " <FieldOrder>%d</FieldOrder>\n",
- (unsigned int)track->fieldorder); /* uchar as 1 byte uint */
- if (notes) {
- fprintf(xmlout,
- " <!-- When FieldCount=2, FieldOrder means: -->\n");
- fprintf(xmlout, " <!-- 0: Field coding unknown -->\n");
- fprintf(xmlout,
- " <!-- 1: Field with topmost line is stored first in sample; fields are in temporal order -->\n");
- fprintf(xmlout,
- " <!-- 6: Field with topmost line is stored second in sample; fields are in temporal order -->\n");
- fprintf(xmlout,
- " <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
- fprintf(xmlout,
- " <!-- Current implementation doesn't retain whether box was actually present. -->\n");
- }
- fprintf(xmlout, " </FieldCoding>\n");
-
- fprintf(xmlout,
- " <MJP2_Profile BoxType=\"jp2p\" Count=\"%d\">\n", track->num_br);
- for (i = 0; i < track->num_br;
- i++) { /* read routine stored in reverse order, so let's undo damage */
- uint_to_chars(track->br[i], buf);
- fprintf(xmlout, " <CompatibleBrand>%s</CompatibleBrand>\n",
- buf); /*4 characters, each CLi */
- }
- fprintf(xmlout, " </MJP2_Profile>\n");
-
- fprintf(xmlout,
- " <MJP2_Prefix BoxType=\"jp2x\" Count=\"%d\">\n", track->num_jp2x);
- for (i = 0; i < track->num_jp2x; i++) {
- // We'll probably need better formatting than this
- fprintf(xmlout, " <Data>0x%02x</Data>\n",
- track->jp2xdata[i]); /* Each entry is single byte */
- }
- fprintf(xmlout, " </MJP2_Prefix>\n");
-
- fprintf(xmlout,
- " <MJP2_SubSampling BoxType=\"jsub\">\n"); /* These values are all 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- Typical subsample value is 2 for 4:2:0 -->\n");
- }
- fprintf(xmlout, " <HorizontalSub>%d</HorizontalSub>\n",
- track->hsub);
- fprintf(xmlout, " <VerticalSub>%d</VerticalSub>\n",
- track->vsub);
- fprintf(xmlout, " <HorizontalOffset>%d</HorizontalOffset>\n",
- track->hoff);
- fprintf(xmlout, " <VerticalOffset>%d</VerticalOffset>\n",
- track->voff);
- if (notes) {
- fprintf(xmlout,
- " <!-- Typical {horizontal, vertical} chroma offset values: -->\n");
- fprintf(xmlout,
- " <!-- 4:2:2 format (CCIR601, H.262, MPEG2, MPEG4, recom. Exif): {0, 0} -->\n");
- fprintf(xmlout,
- " <!-- 4:2:2 format (JFIF): {1, 0} -->\n");
- fprintf(xmlout,
- " <!-- 4:2:0 format (H.262, MPEG2, MPEG4): {0, 1} -->\n");
- fprintf(xmlout,
- " <!-- 4:2:0 format (MPEG1, H.261, JFIF, recom. Exif): {1, 1} -->\n");
- }
- fprintf(xmlout,
- " </MJP2_SubSampling>\n"); /* These values are all 1 byte */
-
- fprintf(xmlout,
- " <MJP2_OriginalFormat BoxType=\"orfo\">\n"); /* Part III Appx. 2 */
- fprintf(xmlout,
- " <OriginalFieldCount>%u</OriginalFieldCount>\n",
- (unsigned int)track->or_fieldcount); /* uchar as 1-byte uint */
- if (notes) {
- fprintf(xmlout,
- " <!-- In original material before encoding. Must be either 1 or 2 -->\n");
- }
- fprintf(xmlout,
- " <OriginalFieldOrder>%u</OriginalFieldOrder>\n",
- (unsigned int)track->or_fieldorder); /* uchar as 1-byte uint */
- if (notes) {
- fprintf(xmlout,
- " <!-- When FieldCount=2, FieldOrder means: -->\n");
- fprintf(xmlout, " <!-- 0: Field coding unknown -->\n");
- fprintf(xmlout,
- " <!-- 11: Topmost line came from the earlier field; -->\n");
- fprintf(xmlout,
- " <!-- 16: Topmost line came form the later field. -->\n");
- fprintf(xmlout,
- " <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
- fprintf(xmlout,
- " <!-- Current implementation doesn't retain whether box was actually present. -->\n");
- }
- fprintf(xmlout, " </MJP2_OriginalFormat>\n");
- fprintf(xmlout, " </VisualSampleEntry>\n");
- break;
- case 1:
- case 2:
- if (notes) {
- fprintf(xmlout,
- " <!-- mj2_to_metadata's data structure doesn't record this currently. -->\n");
- }
- break;
- }
- fprintf(xmlout, " <TimeToSample BoxType=\"stts\">\n");
- fprintf(xmlout, " <SampleStatistics>\n");
- fprintf(xmlout, " <TotalSamples>%d</TotalSamples>\n",
- track->num_samples);
- if (notes) {
- fprintf(xmlout,
- " <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->\n");
- }
- fprintf(xmlout, " </SampleStatistics>\n");
- fprintf(xmlout, " <SampleEntries EntryCount=\"%d\">\n",
- track->num_tts);
- for (i = 0; i < track->num_tts; i++) {
- fprintf(xmlout,
- " <Table Entry=\"%u\" SampleCount=\"%d\" SampleDelta=\"%u\" />\n",
- i + 1, track->tts[i].sample_count, track->tts[i].sample_delta);
- }
- fprintf(xmlout, " </SampleEntries>\n");
- fprintf(xmlout, " </TimeToSample>\n");
-
- fprintf(xmlout,
- " <SampleToChunk BoxType=\"stsc\" Count=\"%d\">\n",
- track->num_samplestochunk);
- for (i = 0; i < track->num_samplestochunk; i++) {
- fprintf(xmlout, " <FirstChunk>%u</FirstChunk>\n",
- track->sampletochunk[i].first_chunk); /* 4 bytes */
- fprintf(xmlout, " <SamplesPerChunk>%u</SamplesPerChunk>\n",
- track->sampletochunk[i].samples_per_chunk); /* 4 bytes */
- fprintf(xmlout, " <SampleDescrIndex>%u</SampleDescrIndex>\n",
- track->sampletochunk[i].sample_descr_idx); /* 4 bytes */
- }
- fprintf(xmlout, " </SampleToChunk>\n");
- // After reading this info in, track->num_chunks is calculated and a decompressed table established internally.
-
- fprintf(xmlout, " <SampleSize BoxType=\"stsz\">\n");
- if (track->same_sample_size) {
- // all values in track->sample[i].sample_size are equal. Grab the first one.
- fprintf(xmlout, " <Sample_Size>%u</Sample_Size>\n",
- track->sample[0].sample_size);
- if (notes) {
- fprintf(xmlout,
- " <!-- Non-zero value means all samples have that size. -->\n");
- fprintf(xmlout,
- " <!-- So <Sample_Count> (aka Entry_Count in std.) has no meaning, is suppressed from this output, and no table follows. -->\n");
- }
- } else {
- fprintf(xmlout, " <Sample_Size>0</Sample_Size>\n");
- if (notes)
- if (sampletables) {
- fprintf(xmlout,
- " <!-- Zero value means samples have different sizes, given in table next of length Sample_Count (aka Entry_Count in std). -->\n");
- } else {
- fprintf(xmlout,
- " <!-- Zero value means samples have different sizes, given in table (not shown) of length Sample_Count (aka Entry_Count in std). -->\n");
- }
- fprintf(xmlout, " <Sample_Count>%u</Sample_Count>\n",
- track->num_samples);
- if (sampletables)
- for (i = 0; i < (int)track->num_samples; i++) {
- fprintf(xmlout, " <EntrySize Num=\"%u\">%u</EntrySize>\n", i + 1,
- track->sample[i].sample_size);
- }
- }
- fprintf(xmlout, " </SampleSize>\n");
-
- fprintf(xmlout, " <ChunkOffset BoxType=\"stco\">\n");
- // Structure not yet - Variant ChunkLargeOffset 'co64'
- fprintf(xmlout, " <EntryCount>%u</EntryCount>\n",
- track->num_chunks);
- if (notes) {
- fprintf(xmlout,
- " <!-- For this implementation, EntryCount shown is one calculated during file read of <SampleToChunk> data. -->\n");
- fprintf(xmlout,
- " <!-- Implementation will report failure during file read of <ChunkOffset> data if read entry-count disagrees. -->\n");
- }
- if (sampletables)
- for (i = 0; i < (int)track->num_chunks; i++) {
- fprintf(xmlout, " <Chunk_Offset Num=\"%d\">%u</Chunk_Offset>\n",
- i + 1, track->chunk[i].offset);
- }
- fprintf(xmlout, " </ChunkOffset>\n");
-
- fprintf(xmlout, " </SampleTable>\n");
-}
-
-/* ------------- */
-
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
- unsigned int snum, opj_event_mgr_t *event_mgr)
-{
- opj_dparameters_t parameters; /* decompression parameters */
- opj_image_t *img;
- opj_cp_t *cp;
- int i;
- int numcomps;
- unsigned char* frame_codestream;
- opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
- opj_cio_t *cio = NULL;
- opj_j2k_t *j2k;
-
- /* JPEG 2000 compressed image data */
-
- /* get a decoder handle */
- dinfo = opj_create_decompress(CODEC_J2K);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, event_mgr, stderr);
-
- /* setup the decoder decoding parameters using the current image and user parameters */
- parameters.cp_limit_decoding = DECODE_ALL_BUT_PACKETS;
- opj_setup_decoder(dinfo, &parameters);
-
- frame_codestream = (unsigned char*) malloc(sample->sample_size -
- 8); /* Skipping JP2C marker */
- if (frame_codestream == NULL) {
- return 1;
- }
-
- fseek(file, sample->offset + 8, SEEK_SET);
- fread(frame_codestream, sample->sample_size - 8, 1,
- file); /* Assuming that jp and ftyp markers size do */
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
- sample->sample_size - 8);
-
- /* Decode J2K to image: */
- img = opj_decode(dinfo, cio);
- if (!img) {
- fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- return 1;
- }
-
- j2k = (opj_j2k_t*)dinfo->j2k_handle;
- j2k_default_tcp = j2k->default_tcp;
- cp = j2k->cp;
-
- numcomps = img->numcomps;
- /* Alignments: " < To help maintain xml pretty-printing */
- fprintf(xmlout, " <JP2_Frame Num=\"%d\">\n", snum + 1);
- fprintf(xmlout, " <MainHeader>\n");
- /* There can be multiple codestreams; a particular image is entirely within a single codestream */
- /* TO DO: A frame can be represented by two I-guess-contiguous codestreams if its interleaved. */
- fprintf(xmlout, " <StartOfCodestream Marker=\"SOC\" />\n");
- /* "cp" stands for "coding parameter"; "tcp" is tile coding parameters, "tccp" is tile-component coding parameters */
- xml_out_frame_siz(xmlout, img, cp); /* reqd in main */
- xml_out_frame_cod(xmlout, j2k_default_tcp); /* reqd in main */
- xml_out_frame_coc(xmlout, j2k_default_tcp,
- numcomps); /* opt in main, at most 1 per component */
- xml_out_frame_qcd(xmlout, j2k_default_tcp); /* reqd in main */
- xml_out_frame_qcc(xmlout, j2k_default_tcp,
- numcomps); /* opt in main, at most 1 per component */
- xml_out_frame_rgn(xmlout, j2k_default_tcp,
- numcomps); /* opt, at most 1 per component */
- xml_out_frame_poc(xmlout,
- j2k_default_tcp); /* opt (but reqd in main or tile for any progression order changes) */
- /* Next four get j2k_default_tcp passed globally: */
-#ifdef SUPPRESS_FOR_NOW
- xml_out_frame_ppm(xmlout,
- cp); /* opt (but either PPM or PPT [distributed in tile headers] or codestream packet header reqd) */
-#endif
- xml_out_frame_tlm(
- xmlout); /* NO-OP. TLM NOT SAVED IN DATA STRUCTURE */ /* opt */
- xml_out_frame_plm(
- xmlout); /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE */ /* opt in main; can be used in conjunction with PLT */
- xml_out_frame_crg(
- xmlout); /* NO-OP. CRG NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
- xml_out_frame_com(xmlout,
- j2k_default_tcp); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-
- fprintf(xmlout, " </MainHeader>\n");
-
- /* TO DO: all the tile headers (sigh) */
- fprintf(xmlout, " <TilePartHeaders Count=\"%d\">\n",
- cp->tileno_size); /* size of the vector tileno */
- for (i = 0; i < cp->tileno_size;
- i++) { /* I think cp->tileno_size will be same number as (cp->tw * cp->th) or as global j2k_curtileno */
- // Standard seems to use zero-based # for tile-part.
- fprintf(xmlout, " <TilePartHeader Num=\"%d\" ID=\"%d\">\n", i,
- cp->tileno[i]); /* ID number of the tiles present in the codestream */
- fprintf(xmlout, " <StartOfTilePart Marker=\"SOT\" />\n");
- /* All markers in tile-part headers (between SOT and SOD) are optional, unless structure requires. */
- if (i == 0) {
- xml_out_frame_cod(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
- xml_out_frame_coc(xmlout, &(cp->tcps[i]),
- numcomps); /* No more than 1 per component */
- xml_out_frame_qcd(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
- xml_out_frame_qcc(xmlout, &(cp->tcps[i]),
- numcomps); /* No more than 1 per component */
- xml_out_frame_rgn(xmlout, &(cp->tcps[i]),
- numcomps); /* No more than 1 per component */
- }
- xml_out_frame_poc(xmlout,
- &(cp->tcps[i])); /* Reqd only if any progression order changes different from main POC */
-#ifdef SUPPRESS_FOR_NOW
- xml_out_frame_ppt(xmlout,
- &(cp->tcps[i])); /* Either PPT [distributed in tile headers] or PPM or codestream packet header reqd. */
-#endif
- xml_out_frame_plt(xmlout,
- &(cp->tcps[i])); /* NO-OP. PLT NOT SAVED IN DATA STRUCTURE */ /* Can be used in conjunction with main's PLM */
- xml_out_frame_com(xmlout,
- &(cp->tcps[i])); /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */
- /* opj_tcp_t * cp->tcps; "tile coding parameters" */
- /* Maybe not: fprintf(xmlout, " <>%d</>, cp->matrice[i]; */ /* Fixed layer */
- fprintf(xmlout, " <StartOfData Marker=\"SOD\" />\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->\n");
- }
- fprintf(xmlout, " </TilePartHeader>\n");
- }
- fprintf(xmlout,
- " </TilePartHeaders>\n"); /* size of the vector tileno */
-
-#ifdef NOTYET
- IMAGINE the cp object has data to support the following... but we could use an
- new different data structure instead
- /* I'm unclear if the span of the original fread(frame_codestream...) included the following items if they're trailing. */
- /* ALSO TO DO, BUT DATA STRUCTURE DOESN'T HANDLE YET: boxes (anywhere in file except before the Filetype box): */
- xml_out_frame_jp2i(xmlout,
- &cp); /* IntellectualProperty 'jp2i' (no restrictions on location) */
- xml_out_frame_xml(xmlout,
- &cp); /* XML 'xml\040' (0x786d6c20). Can appear multiply */
- xml_out_frame_uuid(xmlout, &cp); /* UUID 'uuid' (top level only) */
- xml_out_frame_uinf(xmlout,
- &cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-#endif
-
- fprintf(xmlout, " </JP2_Frame>\n");
-
- /* Extra commentary: */
- if (notes) {
- fprintf(xmlout,
- " <!-- Given the number and size of components, mj2_to_frame would try to convert this -->\n");
- if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
- && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
- || (img->numcomps == 1)) {
- fprintf(xmlout, " <!-- file to a YUV movie in the normal manner. -->\n");
- } else if ((img->numcomps == 3) &&
- (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
- (img->comps[2].dx == 1)) {// If YUV 4:4:4 input --> to bmp
- fprintf(xmlout, " <!-- YUV 4:4:4 file to a series of .bmp files. -->\n");
- } else {
- fprintf(xmlout,
- " <!-- file whose image component dimension are unknown, to a series of .j2k files. -->\n");
- }
- }
-
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(frame_codestream);
-
- return 0;
-}
-
-/* ------------- */
-
-void int16_to_3packedchars(short int value, char* buf)
-{
- /* This is to retrieve the 3-letter ASCII language code */
- /* Each char is packed into 5 bits, as difference from 0x60 */
- int i;
- for (i = 2; i >= 0; i--) {
- buf[i] = (value & 0x001f) + 0x60;
- value = (value >> 5);
- }
- buf[3] = '\0';
-}
-
-/* ------------- */
-
-void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp)
-{
- opj_image_comp_t *comp;
- int i;
-
- fprintf(xmlout, " <ImageAndFileSize Marker=\"SIZ\">\n");
- // This is similar to j2k.c's j2k_dump_image.
- // Not of interest: Lsiz, Rsiz
- fprintf(xmlout, " <Xsiz>%d</Xsiz>\n", img->x1);
- fprintf(xmlout, " <Ysiz>%d</Ysiz>\n", img->y1);
- if (notes) {
- fprintf(xmlout,
- " <!-- Xsiz, Ysiz is the size of the reference grid. -->\n");
- }
- fprintf(xmlout, " <XOsiz>%d</XOsiz>\n", img->x0);
- fprintf(xmlout, " <YOsiz>%d</YOsiz>\n", img->y0);
- if (notes) {
- fprintf(xmlout,
- " <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->\n");
- }
- fprintf(xmlout, " <XTsiz>%d</XTsiz>\n", cp->tdx);
- fprintf(xmlout, " <YTsiz>%d</YTsiz>\n", cp->tdy);
- if (notes) {
- fprintf(xmlout,
- " <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->\n");
- }
- fprintf(xmlout, " <XTOsiz>%d</XTOsiz>\n", cp->tx0);
- fprintf(xmlout, " <YTOsiz>%d</YTOsiz>\n", cp->ty0);
- if (notes) {
- fprintf(xmlout,
- " <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->\n");
- }
- fprintf(xmlout, " <Csiz>%d</Csiz>\n", img->numcomps);
- if (notes) {
- fprintf(xmlout,
- " <!-- Csiz is the number of components in the image. -->\n");
- fprintf(xmlout, " <!-- For image components next: -->\n");
- fprintf(xmlout,
- " <!-- XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->\n");
- //fprintf(xmlout," <!-- XO, YO is offset of the component compared to the whole image. -->\n");
- fprintf(xmlout,
- " <!-- Bits per pixel (bpp) is the pixel depth. -->\n");
- fprintf(xmlout,
- " <!-- WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->\n");
- }
-
- for (i = 0; i < img->numcomps; i++) {/* image-components */
- comp = &(img->comps[i]);
- fprintf(xmlout, " <Component Num=\"%d\">\n", i + 1);
- fprintf(xmlout, " <Ssiz>\n");
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%02x</AsHex>\n",
- (comp->sgnd << 7) & (comp->prec - 1));
- }
- if (derived) {
- fprintf(xmlout, " <Signed>%d</Signed>\n", comp->sgnd);
- fprintf(xmlout, " <PrecisionInBits>%d</PrecisionInBits>\n",
- comp->prec);
- }
- fprintf(xmlout, " </Ssiz>\n");
- fprintf(xmlout, " <XRsiz>%d</XRsiz>\n", comp->dx);
- fprintf(xmlout, " <YRsiz>%d</YRsiz>\n", comp->dy);
- fprintf(xmlout, " <WidthOfData>%d</WidthOfData>\n", comp->w);
- fprintf(xmlout, " <HeightOfData>%d</HeightOfData>\n", comp->h);
- /* Rest of these aren't calculated when SIZ is read:
- fprintf(xmlout, " <XO>%d</XO>\n", comp->x0);
- fprintf(xmlout, " <YO>%d</YO>\n", comp->y0);
- if(notes)
- fprintf(xmlout," <!-- XO, YO is offset of the component compared to the whole image. -->\n");
- fprintf(xmlout, " <BitsPerPixel>%d</BitsPerPixel>\n", comp->bpp);
- fprintf(xmlout, " <NumberOfDecodedResolution>%d</NumberOfDecodedResolution>\n", comp->resno_decoded); */
- // SUPPRESS: n/a to mj2_to_metadata. fprintf(xmlout," <Factor>%d</Factor\n", comp->factor);
- /* factor = number of division by 2 of the out image compare to the original size of image */
- // TO DO comp->data: int *data; /* image-component data */
-
- fprintf(xmlout, " </Component>\n");
- }
- fprintf(xmlout, " </ImageAndFileSize>\n");
-}
-
-/* ------------- */
-
-void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp)
-{
- /* Could be called with tcp = &j2k_default_tcp;
- /* Or, for tile-part header, with &j2k_cp->tcps[j2k_curtileno]
- /* Alignment for main:" < < < < To help maintain xml pretty-printing */
- /* Alignment for tile:" < < < To help maintain xml pretty-printing */
- opj_tccp_t *tccp;
- int i;
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
- tccp = &(tcp->tccps[0]);
-
- fprintf(xmlout, "%s<CodingStyleDefault Marker=\"COD\">\n",
- s); /* Required in main header */
- /* Not retained or of interest: Lcod */
- fprintf(xmlout, "%s <Scod>0x%02x</Scod>\n", s, tcp->csty); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 0: Defines entropy coder precincts -->\n", s);
- fprintf(xmlout,
- "%s <!-- 0 = (PPx=15, PPy=15); 1 = precincts defined below. -->\n", s);
- fprintf(xmlout, "%s <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->\n",
- s);
- }
- fprintf(xmlout, "%s <SGcod>\n", s);
- fprintf(xmlout, "%s <ProgressionOrder>%d</ProgressionOrder>\n", s,
- tcp->prg); /* 1 byte, SGcod (A) */
- if (notes) {
- fprintf(xmlout, "%s <!-- Defined Progression Order Values are: -->\n", s);
- fprintf(xmlout,
- "%s <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
- fprintf(xmlout,
- "%s <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
- s);
- }
- fprintf(xmlout, "%s <NumberOfLayers>%d</NumberOfLayers>\n", s,
- tcp->numlayers); /* 2 bytes, SGcod (B) */
- fprintf(xmlout,
- "%s <MultipleComponentTransformation>%d</MultipleComponentTransformation>\n",
- s, tcp->mct); /* 1 byte, SGcod (C). More or less boolean */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->\n",
- s);
- }
- fprintf(xmlout, "%s </SGcod>\n", s);
- /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
- fprintf(xmlout, "%s <SPcod>\n", s);
- /* Internal data structure tccp defines separate defaults for each component, but they all get the same values */
- /* So we only have to report the first component's values here. */
- /* Compare j2k_read_cox(...) */
- fprintf(xmlout,
- "%s <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
- tccp->numresolutions - 1); /* 1 byte, SPcox (D) */
- fprintf(xmlout, "%s <CodeblockWidth>%d</CodeblockWidth>\n", s,
- tccp->cblkw - 2); /* 1 byte, SPcox (E) */
- fprintf(xmlout, "%s <CodeblockHeight>%d</CodeblockHeight>\n", s,
- tccp->cblkh - 2); /* 1 byte, SPcox (F) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
- fprintf(xmlout, "%s <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
- }
- fprintf(xmlout, "%s <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
- tccp->cblksty); /* 1 byte, SPcox (G) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
- fprintf(xmlout,
- "%s <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 2: Termination on each coding pass. -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 3: Vertically causal context. -->\n", s);
- fprintf(xmlout, "%s <!-- bit 4: Predictable termination. -->\n", s);
- fprintf(xmlout, "%s <!-- bit 5: Segmentation symbols are used. -->\n", s);
- }
- fprintf(xmlout, "%s <Transformation>%d</Transformation>\n", s,
- tccp->qmfbid); /* 1 byte, SPcox (H) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
- s);
- }
- if (tccp->csty & J2K_CP_CSTY_PRT) {
- fprintf(xmlout, "%s <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
- s);
- }
- for (i = 0; i < tccp->numresolutions; i++) {
- fprintf(xmlout, "%s <PrecinctHeightAndWidth ResolutionLevel=\"%d\">\n",
- s, i);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->prch[i] << 4) | tccp->prcw[i]); /* packed into 1 byte, SPcox (G) */
- }
- if (derived) {
- fprintf(xmlout, "%s <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
- tccp->prcw[i]);
- fprintf(xmlout, "%s <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
- tccp->prch[i]);
- }
- fprintf(xmlout, "%s </PrecinctHeightAndWidth>\n", s, i);
- }
- fprintf(xmlout, "%s </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
- }
- fprintf(xmlout, "%s </SPcod>\n", s);
- fprintf(xmlout, "%s</CodingStyleDefault>\n", s);
-}
-
-/* ------------- */
-
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
- int numcomps) /* Optional in main & tile-part headers */
-{
- /* Uses global j2k_default_tcp */
- opj_tccp_t *tccp, *firstcomp_tccp;
- int i, compno;
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-
- firstcomp_tccp = &(tcp->tccps[0]);
- /* Internal data structure tccp defines separate defaults for each component, set from main */
- /* default, then selectively overwritten. */
- /* Compare j2k_read_cox(...) */
- /* We don't really know which was the default, and which were not */
- /* Let's pretend that [0] is the default and all others are not */
- if (notes) {
- fprintf(xmlout,
- "%s<!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->\n",
- s);
- if (tcp == j2k_default_tcp) {
- fprintf(xmlout,
- "%s<!-- and any other component, with main-header style values different from [0], as COC. -->\n",
- s);
- } else {
- fprintf(xmlout,
- "%s<!-- and any other component, with tile-part-header style values different from [0], as COC. -->\n",
- s);
- }
- }
- for (compno = 1; compno < numcomps;
- compno++) { /* spec says components are zero-based */
- tccp = &tcp->tccps[compno];
- if (same_component_style(firstcomp_tccp, tccp)) {
- continue;
- }
-
- /* Alignments: " < < < < < To help maintain xml pretty-printing */
- fprintf(xmlout, "%s<CodingStyleComponent Marker=\"COC\">\n",
- s); /* Optional in main header, at most 1 per component */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- See Ccoc below for zero-based component number. -->\n", s);
- }
- /* Overrides the main COD for the specific component */
- /* Not retained or of interest: Lcod */
- fprintf(xmlout, "%s <Scoc>0x%02x</Scoc>\n", s, tccp->csty); /* 1 byte */
- if (notes) {
- fprintf(xmlout, "%s <!-- Scoc defines entropy coder precincts: -->\n", s);
- fprintf(xmlout,
- "%s <!-- 0 = maximum, namely (PPx=15, PPy=15); 1 = precincts defined below. -->\n",
- s);
- }
- fprintf(xmlout, "%s <Ccoc>%d</Ccoc>\n", s, compno); /* 1 or 2 bytes */
- /* Unfortunately compo isn't retained in j2k_read_coc: compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2); /* Ccoc */
- /*if(j2k_img_numcomps <=256)
- component is 1 byte
- else
- compno is 2 byte */
-
- /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
- fprintf(xmlout, "%s <SPcoc>\n", s);
- fprintf(xmlout,
- "%s <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
- tccp->numresolutions - 1); /* 1 byte, SPcox (D) */
- fprintf(xmlout, "%s <CodeblockWidth>%d</CodeblockWidth>\n", s,
- tccp->cblkw - 2); /* 1 byte, SPcox (E) */
- fprintf(xmlout, "%s <CodeblockHeight>%d</CodeblockHeight>\n", s,
- tccp->cblkh - 2); /* 1 byte, SPcox (F) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
- fprintf(xmlout, "%s <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
- }
- fprintf(xmlout, "%s <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
- tccp->cblksty); /* 1 byte, SPcox (G) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
- fprintf(xmlout,
- "%s <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 2: Termination on each coding pass. -->\n",
- s);
- fprintf(xmlout, "%s <!-- bit 3: Vertically causal context. -->\n", s);
- fprintf(xmlout, "%s <!-- bit 4: Predictable termination. -->\n", s);
- fprintf(xmlout, "%s <!-- bit 5: Segmentation symbols are used. -->\n", s);
- }
- fprintf(xmlout, "%s <Transformation>%d</Transformation>\n", s,
- tccp->qmfbid); /* 1 byte, SPcox (H) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
- s);
- }
- if (tccp->csty & J2K_CP_CSTY_PRT) {
- fprintf(xmlout, "%s <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
- s);
- }
- for (i = 0; i < tccp->numresolutions - 1;
- i++) { /* subtract 1 to get # of decomposition levels */
- fprintf(xmlout, "%s <PrecinctHeightAndWidth ResolutionLevel=\"%d\">\n",
- s, i);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->prch[i] << 4) | tccp->prcw[i]); /* packed into 1 byte, SPcox (G) */
- }
- if (derived) {
- fprintf(xmlout, "%s <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
- tccp->prcw[i]);
- fprintf(xmlout, "%s <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
- tccp->prch[i]);
- }
- fprintf(xmlout, "%s </PrecinctHeightAndWidth>\n", s, i);
- }
- fprintf(xmlout, "%s </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
- }
- fprintf(xmlout, "%s </SPcoc>\n", s);
- fprintf(xmlout, "%s</CodingStyleComponent>\n", s);
- }
-}
-
-/* ------------- */
-
-BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
-{
- int i;
-
- if (tccp1->numresolutions != tccp2->numresolutions) {
- return FALSE;
- }
- if (tccp1->cblkw != tccp2->cblkw) {
- return FALSE;
- }
- if (tccp1->cblkh != tccp2->cblkh) {
- return FALSE;
- }
- if (tccp1->cblksty != tccp2->cblksty) {
- return FALSE;
- }
- if (tccp1->csty != tccp2->csty) {
- return FALSE;
- }
-
- if (tccp1->csty & J2K_CP_CSTY_PRT) {
- for (i = 0; i < tccp1->numresolutions; i++) {
- if (tccp1->prcw[i] != tccp2->prcw[i] || tccp1->prch[i] != tccp2->prch[i]) {
- return FALSE;
- }
- }
- }
- return TRUE;
-}
-
-/* ------------- */
-
-void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp)
-{
- /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
- opj_tccp_t *tccp;
- int bandno, numbands;
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-
- /* Compare j2k_read_qcx */
- fprintf(xmlout, "%s<QuantizationDefault Marker=\"QCD\">\n",
- s); /* Required in main header, single occurrence */
- tccp = &(tcp->tccps[0]);
- /* Not retained or of interest: Lqcd */
- fprintf(xmlout, "%s <Sqcd>\n", s); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Default quantization style for all components. -->\n", s);
- }
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->numgbits) << 5 | tccp->qntsty);
- }
- if (derived) {
- fprintf(xmlout, "%s <QuantizationStyle>%d</QuantizationStyle>\n", s,
- tccp->qntsty);
- }
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Quantization style (in Sqcd's low 5 bits) may be: -->\n", s);
- fprintf(xmlout, "%s <!-- 0 = No quantization. SPqcd size = 8 bits-->\n",
- s);
- fprintf(xmlout,
- "%s <!-- 1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- 2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->\n",
- s);
- }
- if (derived) {
- fprintf(xmlout, "%s <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
- tccp->numgbits);
- }
- if (notes) {
- fprintf(xmlout,
- "%s <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->\n", s);
- }
- fprintf(xmlout, "%s </Sqcd>\n", s);
-
- /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
- /* So we'll just dump all internal values */
- /* We could calculate it, but I'm having trouble believing the length equations in the standard */
-
- fprintf(xmlout, "%s <SPqcd>\n", s);
- switch (tccp->qntsty) {
- case J2K_CCP_QNTSTY_NOQNT: /* no quantization */
- /* This is what standard says, but I don't believe it: len = 4 + (3*decomp); */
- numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
- /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
- /* Instead look for first zero exponent, quit there. Adequate? */
- fprintf(xmlout, "%s <ReversibleStepSizeValue>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until an exponent with zero value is reached. -->\n", s);
- fprintf(xmlout,
- "%s <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
- fprintf(xmlout,
- "%s <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
- }
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0) {
- break; /* Remove when we have real numbands */
- }
- fprintf(xmlout, "%s <DynamicRangeExponent Subband=\"%d\">\n", s, bandno);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- tccp->stepsizes[bandno].expn << 3);
- }
- if (derived) {
- fprintf(xmlout, "%s <AsDecimal>%d</AsDecimal>\n", s,
- tccp->stepsizes[bandno].expn);
- }
- fprintf(xmlout, "%s </DynamicRangeExponent>\n", s);
- }
- fprintf(xmlout, "%s </ReversibleStepSizeValue>\n", s);
- break;
- case J2K_CCP_QNTSTY_SIQNT: /* scalar quantization derived */
- /* This is what standard says. Should I believe it:: len = 5;
- /* numbands = 1; */
- fprintf(xmlout, "%s <QuantizationStepSizeValues>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For irreversible transformation only. See Part I Annex E Equation E.3 -->\n",
- s);
- }
- fprintf(xmlout, "%s <QuantizationValues Subband=\"0\">\n", s);
- if (notes) {
- fprintf(xmlout, "%s <!-- For N(L)LL subband: >\n", s);
- }
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
- }
- if (derived) {
- fprintf(xmlout, "%s <Exponent>%d</Exponent>\n", s,
- tccp->stepsizes[0].expn);
- fprintf(xmlout, "%s <Mantissa>%d</Mantissa>\n", s,
- tccp->stepsizes[0].mant);
- }
- fprintf(xmlout, "%s </QuantizationValues>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until a subband with exponent of zero value is reached. -->\n",
- s);
- }
-
- for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0) {
- break;
- }
-
- fprintf(xmlout,
- "%s <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
- bandno, tccp->stepsizes[bandno].expn);
- }
-
- fprintf(xmlout, "%s </QuantizationStepSizeValues>\n", s);
- break;
-
- default: /* J2K_CCP_QNTSTY_SEQNT */ /* scalar quantization expounded */
- /* This is what standard says, but should I believe it: len = 5 + 6*decomp; */
- numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
- /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
- fprintf(xmlout, "%s <QuantizationStepSizeValues>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For irreversible transformation only. See Part I Annex E Equation E.3 -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
- s);
- }
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
- break; /* Remove when we have real numbands */
- }
-
- fprintf(xmlout, "%s <QuantizationValues Subband=\"%d\">\n", s, bandno);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
- }
- if (derived) {
- fprintf(xmlout, "%s <Exponent>%d</Exponent>\n", s,
- tccp->stepsizes[bandno].expn);
- fprintf(xmlout, "%s <Mantissa>%d</Mantissa>\n", s,
- tccp->stepsizes[bandno].mant);
- }
- fprintf(xmlout, "%s </QuantizationValues>\n", s);
- }
- fprintf(xmlout, "%s </QuantizationStepSizeValues>\n", s);
- break;
- } /* switch */
- fprintf(xmlout, "%s </SPqcd>\n", s);
- fprintf(xmlout, "%s</QuantizationDefault>\n", s);
-
- /* Alignments: " < < < < < To help maintain xml pretty-printing */
-}
-
-/* ------------- */
-
-void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
-{
- /* Uses global j2k_default_tcp */
- /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
- opj_tccp_t *tccp, *firstcomp_tccp;
- int bandno, numbands;
- int compno;
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-
- firstcomp_tccp = &(tcp->tccps[0]);
- /* Internal data structure tccp defines separate defaults for each component, set from main */
- /* default, then selectively overwritten. */
- /* Compare j2k_read_qcx(...) */
- /* We don't really know which was the default, and which were not */
- /* Let's pretend that [0] is the default and all others are not */
- if (notes) {
- fprintf(xmlout,
- "%s<!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->\n",
- s);
- if (tcp == j2k_default_tcp) {
- fprintf(xmlout,
- "%s<!-- and any other component, with main-header quantization values different from [0], as QCC. -->\n",
- s);
- } else {
- fprintf(xmlout,
- "%s<!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->\n",
- s);
- }
- }
- for (compno = 1; compno < numcomps;
- compno++) { /* spec says components are zero-based */
- tccp = &(tcp->tccps[compno]);
- if (same_component_quantization(firstcomp_tccp, tccp)) {
- continue;
- }
-
- /* Compare j2k_read_qcx */
- fprintf(xmlout,
- "%s<QuantizationComponent Marker=\"QCC\" Component=\"%d\">\n", s,
- compno); /* Required in main header, single occurrence */
- tccp = &j2k_default_tcp->tccps[0];
- /* Not retained or perhaps of interest: Lqcd It maybe can be calculated. */
- fprintf(xmlout, "%s <Sqcc>\n", s); /* 1 byte */
- if (notes) {
- fprintf(xmlout, "%s <!-- Quantization style for this component. -->\n", s);
- }
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->numgbits) << 5 | tccp->qntsty);
- }
- if (derived) {
- fprintf(xmlout, "%s <QuantizationStyle>%d</QuantizationStyle>\n", s,
- tccp->qntsty);
- }
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Quantization style (in Sqcc's low 5 bits) may be: -->\n", s);
- fprintf(xmlout, "%s <!-- 0 = No quantization. SPqcc size = 8 bits-->\n",
- s);
- fprintf(xmlout,
- "%s <!-- 1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcc size = 16. -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- 2 = Scalar expounded (values signaled for each subband). SPqcc size = 16. -->\n",
- s);
- }
- if (derived) {
- fprintf(xmlout, "%s <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
- tccp->numgbits);
- }
- if (notes) {
- fprintf(xmlout,
- "%s <!-- 0-7 guard bits allowed (stored in Sqcc's high 3 bits) -->\n", s);
- }
- fprintf(xmlout, "%s </Sqcc>\n", s);
-
- /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
- /* So we'll just dump all internal values */
- fprintf(xmlout, "%s <SPqcc>\n", s);
- switch (tccp->qntsty) {
- case J2K_CCP_QNTSTY_NOQNT:
- numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
- /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-
- /* Instead look for first zero exponent, quit there. Adequate? */
- fprintf(xmlout, "%s <ReversibleStepSizeValue>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until an exponent with zero value is reached. -->\n", s);
- fprintf(xmlout,
- "%s <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
- fprintf(xmlout,
- "%s <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
- }
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0) {
- break; /* Remove this once we have real numbands */
- }
- fprintf(xmlout, "%s <Exponent Subband=\"%d\">\n", s, bandno);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- tccp->stepsizes[bandno].expn << 3);
- }
- if (derived) {
- fprintf(xmlout, "%s <AsDecimal>%d</AsDecimal>\n", s,
- tccp->stepsizes[bandno].expn);
- }
- fprintf(xmlout, "%s </Exponent>\n", s);
- }
- fprintf(xmlout, "%s </ReversibleStepSizeValue>\n", s);
- break;
- case J2K_CCP_QNTSTY_SIQNT:
- /* numbands = 1; */
- fprintf(xmlout, "%s <QuantizationStepSizeValues>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For irreversible transformation only. See Part I Annex E Equation E.3 -->\n",
- s);
- }
- fprintf(xmlout, "%s <QuantizationValuesForSubband0>\n", s);
- if (notes) {
- fprintf(xmlout, "%s <!-- For N(L)LL subband: >\n", s);
- }
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
- }
- if (derived) {
- fprintf(xmlout, "%s <Exponent>%d</Exponent>\n", s,
- tccp->stepsizes[0].expn);
- fprintf(xmlout, "%s <Mantissa>%d</Mantissa>\n", s,
- tccp->stepsizes[0].mant);
- }
- fprintf(xmlout, "%s </QuantizationValuesForSubband0>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until a subband with exponent of zero value is reached. -->\n",
- s);
- }
-
- for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0) {
- break;
- }
-
- fprintf(xmlout,
- "%s <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
- bandno, tccp->stepsizes[bandno].expn);
- }
- fprintf(xmlout, "%s </QuantizationStepSizeValues>\n", s);
- break;
-
- default: /* J2K_CCP_QNTSTY_SEQNT */
- numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
- /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
- fprintf(xmlout, "%s <QuantizationStepSizeValues>\n", s);
- if (notes) {
- fprintf(xmlout,
- "%s <!-- For irreversible transformation only. See Part I Annex E Equation E.3 -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
- s);
- fprintf(xmlout,
- "%s <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
- s);
- }
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
- break; /* Remove this once we have real numbands count */
- }
- fprintf(xmlout, "%s <QuantizationValues Subband=\"%d\">\n", s, bandno);
- if (raw) {
- fprintf(xmlout, "%s <AsHex>0x%02x</AsHex>\n", s,
- (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
- }
- if (derived) {
- fprintf(xmlout, "%s <Exponent>%d</Exponent>\n", s,
- tccp->stepsizes[bandno].expn);
- fprintf(xmlout, "%s <Mantissa>%d</Mantissa>\n", s,
- tccp->stepsizes[bandno].mant);
- }
- fprintf(xmlout, "%s </QuantizationValues>\n", s);
- }
- fprintf(xmlout, "%s </QuantizationStepSizeValues>\n", s);
- break;
- } /* switch */
- fprintf(xmlout, "%s </SPqcc>\n", s);
- fprintf(xmlout, "%s</QuantizationComponent>\n", s);
- }
- /* Alignments: " < < < < < To help maintain xml pretty-printing */
-}
-
-/* ------------- */
-
-BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
-{
- int bandno, numbands;
-
- if (tccp1->qntsty != tccp2->qntsty) {
- return FALSE;
- }
- if (tccp1->numgbits != tccp2->numgbits) {
- return FALSE;
- }
-
- switch (tccp1->qntsty) {
- case J2K_CCP_QNTSTY_NOQNT:
- numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
- /* Instead look for first zero exponent, quit there. Adequate? */
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp1->stepsizes[bandno].expn == 0) {
- break;
- }
- if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn) {
- return FALSE;
- }
- }
- break;
- case J2K_CCP_QNTSTY_SIQNT:
- /* numbands = 1; */
- if (tccp1->stepsizes[0].expn != tccp2->stepsizes[0].expn ||
- tccp1->stepsizes[0].mant != tccp2->stepsizes[0].mant) {
- return FALSE;
- }
- /* Don't need to check remainder, since they are calculated from [0] */
- break;
-
- default: /* J2K_CCP_QNTSTY_SEQNT */
- numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
- /* This comparison may cause us problems with trailing junk values. */
- for (bandno = 0; bandno < numbands; bandno++) {
- if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn ||
- tccp1->stepsizes[bandno].mant != tccp2->stepsizes[bandno].mant);
- return FALSE;
- }
- break;
- } /* switch */
- return TRUE;
-}
-
-/* ------------- */
-
-void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
-{
- int compno, SPrgn;
- /* MJ2 files can have regions of interest if hybridized with JPX Part II */
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-
- for (compno = 0; compno < numcomps; compno++) {
- SPrgn = tcp->tccps[compno].roishift; /* 1 byte; SPrgn */
- if (SPrgn == 0) {
- continue; /* Yet another kludge */
- }
-
- fprintf(xmlout, "%s<RegionOfInterest Marker=\"RGN\">\n",
- s); /* Optional in main header, at most 1 per component */
- if (notes) {
- fprintf(xmlout, "%s<!-- See Crgn below for zero-based component number. -->\n",
- s);
- }
- /* Not retained or of interest: Lrgd */
- fprintf(xmlout, "%s <Srgn>0</Srgn>\n", s); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Srgn is ROI style. Only style=0 defined: Implicit ROI (max. shift) -->\n",
- s);
- }
- fprintf(xmlout, "%s <Crgn>%d</Crgn>\n", s, compno); /* 1 or 2 bytes */
- fprintf(xmlout, "%s <SPrgn>%d</SPrgn>\n", s, SPrgn); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- SPrgn is implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->\n",
- s);
- }
- fprintf(xmlout, "</RegionOfInterest\n",
- s); /* Optional in main header, at most 1 per component */
- }
-}
-
-/* ------------- */
-
-void xml_out_frame_poc(FILE* xmlout,
- opj_tcp_t *tcp) /* Progression Order Change */
-{
- /* Compare j2k_read_poc() */
- int i;
- opj_poc_t *poc;
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-
- if (tcp->POC != 1) {
- return; /* Not present */
- }
-
- fprintf(xmlout, "%s<ProgressionOrderChange Marker=\"POC\">\n",
- s); /* Optional in main header, at most 1 per component */
- /* j2k_read_poc seems to allow accumulation of default pocs from multiple POC segments, but does
- the spec really allow that? */
- /* 2 bytes, not retained; Lpoc */
- /* I probably didn't get this dump precisely right. */
- for (i = 0; i < tcp->numpocs; i++) {
- poc = &tcp->pocs[i];
- fprintf(xmlout, "%s <Progression Num=\"%d\">\n", s, i + 1);
- fprintf(xmlout, "%S <RSpoc>%d</RSpoc>\n", s,
- poc->resno0); /* 1 byte, RSpoc_i */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->\n",
- s);
- }
- fprintf(xmlout, "%s <CSpoc>%d</CSpoc>\n", s,
- poc->compno0);/* j2k_img->numcomps <= 256 ? 1 byte : 2 bytes; CSpoc_i */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Component index (inclusive) for progression start. -->\n", s);
- }
- fprintf(xmlout, "%s <LYEpoc>%d</LYEpoc>\n", s,
- poc->layno1); /* int_min(cio_read(2), tcp->numlayers); /* 2 bytes; LYEpoc_i */
- if (notes) {
- fprintf(xmlout, "%s <!-- Layer index (exclusive) for progression end. -->\n",
- s);
- }
- fprintf(xmlout, "%s <REpoc>%d</REpoc>\n", s,
- poc->resno1); /*int_min(cio_read(1), tccp->numresolutions); /* REpoc_i */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->\n",
- s);
- }
- fprintf(xmlout, "%s <CEpoc>%d</CEpoc>\n", s,
- poc->compno1); /* int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps); /* CEpoc_i */
- if (notes) {
- fprintf(xmlout,
- "%s <!-- Component index (exclusive) for progression end. Minimum: CSpoc -->\n",
- s);
- }
- fprintf(xmlout, "%s <Ppoc>%d</Ppoc>\n", s, poc->prg); /* 1 byte Ppoc_i */
- if (notes) {
- fprintf(xmlout, "%s <!-- Defined Progression Order Values are: -->\n", s);
- fprintf(xmlout,
- "%s <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
- fprintf(xmlout,
- "%s <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
- s);
- }
- fprintf(xmlout, "%s </Progression>\n", s);
- }
- fprintf(xmlout, "%s</ProgressionOrderChange\n", s);
-}
-
-/* ------------- */
-
-#ifdef SUPPRESS_FOR_NOW
-/* Suppress PPM and PPT since we're not showing data from the third option, namely within the codestream, and
-that's evidently what frames_to_mj2 uses. And a hex dump isn't so useful anyway */
-
-void xml_out_frame_ppm(FILE *xmlout,
- opj_cp_t *cp) /* For main header, not tile-part (which uses PPT instead). */
-{
- /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
- /* Use of PPM and PPT are mutually exclusive. */
- /* Compare j2k_read_ppm() */
- int j;
-
- if (cp->ppm != 1) {
- return; /* Not present */
- }
- /* Main header uses indent of 10 spaces */
- fprintf(xmlout,
- " <PackedPacketHeadersMainHeader Marker=\"PPM\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
- /* 2 bytes Lppm not saved */
- if (notes) {
- fprintf(xmlout,
- " <!-- If there are multiple PPM marker segments in the main header, -->\n");
- fprintf(xmlout,
- " <!-- this mj2_to_metadata implementation will report them as a single consolidated PPM header. -->\n");
- fprintf(xmlout,
- " <!-- The implementation can't currently segregate by tile-part. -->\n");
- fprintf(xmlout,
- " <!-- TO DO? further map the packet headers to xml. -->\n");
- }
-
- /* 1 byte, not retained ; Zppm is sequence # of this PPM header */
- /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppm_previous: Nppm */
- /* Use j symbol for index instead of i, to make comparable with j2k_read_ppm */
- /* Not real clear whether to use ppm->store or ppm_len as upper bound */
- fprintf(xmlout, " <PackedData>\n");
- xml_out_dump_hex(xmlout, cp->ppm_data, cp->ppm_len);
- /* Dump packet headers 1 byte at a time: lppm[i][j] */
- fprintf(xmlout, " </PackedData>\n");
- fprintf(xmlout,
- " </PackedPacketHeadersMainHeader>\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-}
-
-/* ------------- */
-
-void xml_out_frame_ppt(FILE *xmlout,
- opj_tcp_t *tcp) /* For tile-part header, not main (which uses PPM instead). */
-{
- /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
- /* Use of PPM and PPT are mutually exclusive. */
- /* Compare j2k_read_ppt() */
- int j;
-
- if (tcp->ppt != 1) {
- return; /* Not present */
- }
-
- /* Tile-part indents are 12 spaces */
- fprintf(xmlout,
- " <PackedPacketHeadersTilePartHeader Marker=\"PPT\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
- /* 2 bytes Lppm not saved */
- if (notes) {
- fprintf(xmlout,
- " <!-- If there are multiple PPT marker segments in the tile-part header, -->\n");
- fprintf(xmlout,
- " <!-- this mj2_to_metadata implementation will report them as a single consolidated PPT header. -->\n");
- fprintf(xmlout,
- " <!-- The implementation can't currently segregate by tile-part. -->\n");
- fprintf(xmlout,
- " <!-- TO DO? further map the packet headers to xml. -->\n");
- }
-
- /* 1 byte, not retained ; Zppt is sequence # of this PPT header */
- /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppt_previous: Nppt */
- /* Use j symbol for index instead of i, to make comparable with j2k_read_ppt */
- /* Not real clear whether to use ppt->store or ppt_len as upper bound */
- fprintf(xmlout, " <PackedData>\n");
- xml_out_dump_hex(xmlout, tcp->ppt_data, tcp->ppt_len);
- /* Dump packet headers 1 byte at a time: lppt[i][j] */
- fprintf(xmlout, " </PackedData>\n");
- fprintf(xmlout,
- " </PackedPacketHeadersTileHeader>\n"); /* Optional in tile-part header, but if not, must be in PPM or codestream */
-}
-#endif SUPPRESS_FOR_NOW
-
-/* ------------- */
-
-void xml_out_frame_tlm(FILE*
- xmlout) /* opt, main header only. May be multiple. */
-{
- /* Compare j2k_read_tlm()... which doesn't retain anything! */
- /* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
- /* Main header indents are 10 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_plm(FILE*
- xmlout) /* opt, main header only; can be used in conjunction with tile-part's PLT */
-{
- /* NO-OP. PLM NOT SAVED IN DATA STRUCTURE */
- /* Compare j2k_read_plm()... which doesn't retain anything! */
- /* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
- /* Main header indents are 10 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_plt(FILE* xmlout,
- opj_tcp_t *tcp) /* opt, tile-part headers only; can be used in conjunction with main header's PLM */
-{
- /* NO-OP. PLT NOT SAVED IN DATA STRUCTURE */
- /* Compare j2k_read_plt()... which doesn't retain anything! */
- /* Tile-part header indents are 12 spaces */
-}
-
-/* ------------- */
-
-void xml_out_frame_crg(FILE* xmlout)
-{
- /* NO-OP. CRG NOT SAVED IN DATA STRUCTURE */ /* opt, main header only; */
- /* Compare j2k_read_crg()... which doesn't retain anything! */
- /* Plan: Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-#ifdef NOTYET
-THIS PSEUDOCODE IMAGINES THESE EXIST:
- j2k_default_tcp->crg, j2k_default_tcp->crg_i, j2k_default_tcp->crg_xcrg*,
- j2k_default_tcp->crg_ycrg*
- (POSSIBLY DON'T NEED crg_i, CAN GET NUMBER OR COMPONENTS FROM ELSEWHERE)
- if (j2k_default_tcp->crg != 1 || j2k_default_tcp->crg_i == 0)
- return; /* Not present */
-
- /* Main header indents are 10 spaces */
- fprintf(xmlout,
- " <ComponentRegistration Marker=\"RG\" Count=\"%d\">\n",
- j2k_default_tcp->crg_i);
- if (notes) {
- fprintf(xmlout,
- " <!-- Fine tuning of registration of components with respect to each other, -->\n");
- fprintf(xmlout,
- " <!-- not required but potentially helpful for decoder. -->\n");
- fprintf(xmlout,
- " <!-- These supplementary fractional offsets are in units of 1/65536 of the horizontal -->\n");
- fprintf(xmlout,
- " <!-- or vertical separation (e.g., XRsiz[i] or YRsiz[i] for component i). -->\n");
- }
- /* This isn't the most compact form of table, but is OK when number of components is small, as is likely. */
- for (i = 0; i < j2k_default_tcp->crg_i; i++) {
- fprintf(xmlout, " <Component Num=\"%d\">\n", i + 1);
- fprintf(xmlout, " <Xcrg>\n");
- if (raw) {
- fprintf(xmlout, " <AsNumerator>%d</AsNumerator>\n",
- j2k_default_tcp->crg_xcrg[i]);
- }
- if (derived) {
- /* Calculate n * 100%/65536; 4 digits after decimal point is sufficiently accurate */
- fprintf(xmlout, " <AsPercentage>%.4f</AsPercentage>\n",
- ((double)j2k_default_tcp->crg_xcrg[i]) / 655.36);
- /* We could do another calculation that include XRsiz[i]; maybe later. */
- }
- fprintf(xmlout, " </Xcrg>\n");
- fprintf(xmlout, " <Ycrg>\n");
- if (raw) {
- fprintf(xmlout, " <AsNumerator>%d</AsNumerator>\n",
- j2k_default_tcp->crg_ycrg[i]);
- }
- if (derived) {
- fprintf(xmlout, " <AsPercentage>%f</AsPercentage>\n",
- ((double)j2k_default_tcp->crg_ycrg[i]) / 655.36);
- }
- fprintf(xmlout, " </Ycrg>\n");
- fprintf(xmlout, " </Component>\n");
- }
-
- fprintf(xmlout, " </ComponentRegistration>\n");
-
-#endif
-}
-
-/* ------------- */
-
-/* Regrettably from a metadata point of view, j2k_read_com() skips over any comments in main header or tile-part-header */
-void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp)
-{
- /* NO-OP. COM NOT SAVED IN DATA STRUCTURE */ /* opt in main or tile-part headers; */
- /* Compare j2k_read_com()... which doesn't retain anything! */
-#ifdef NOTYET
- char spaces[13] = " "; /* 12 spaces if tilepart*/
- char* s = spaces;
- if (tcp == &j2k_default_tcp) {
- s++;
- s++; /* shorten s to 10 spaces if main */
- }
-THIS PSEUDOCODE IMAGINES THESE EXIST:
- tcp->com, tcp->com_len, tcp->com_data array
- if (tcp->com != 1) {
- return; /* Not present */
- }
-
- fprintf(xmlout, "%s<Comment Marker=\"COM\">\n",
- s); /* Optional in main or tile-part header */
- xml_out_dump_hex_and_ascii(tcp->com_data, tcp->com_len, s);
- fprintf(xmlout, "%s</Comment>\n", s);
-#endif
-}
-
-void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s)
-{
- /* s is a string of spaces for indent */
- int i;
-
- /* This is called when raw is true, or there is no appropriate derived form */
- fprintf(xmlout, "%s<AsHex>\n", s);
- fprintf(xmlout, "%s ", s); /* Inadequate for pretty printing */
- for (i = 0; i < data_len; i++) { /* Dump packet headers */
- fprintf(xmlout, "%02x", data[i]);
- }
- fprintf(xmlout, "%s</AsHex>\n", s);
-}
-
-/* Define this as an even number: */
-#define BYTES_PER_DUMP_LINE 40
-/* Current total width for Hex and ASCII is : 11 spaces lead + (3 * BPDL) + 2 spaces + BPDL */
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
- char* s)
-{
- /* s is a string of spaces for indent */
- int i, j;
-
- if (raw) {
- xml_out_dump_hex(xmlout, data, data_len, s);
- }
-
- if (derived) {
- fprintf(xmlout, "%s<AsHexAndASCII>\n", s);
- for (i = 0; i < data_len;) {
- fprintf(xmlout, "%s ", s); /* Additional leading space added in loop */
- /* First column: hex */
- for (j = 0; j < BYTES_PER_DUMP_LINE; j++) { /* Dump bytes */
- fprintf(xmlout, " %02x", data[i + j]);
- }
- /* Space between columns... */ fprintf(xmlout, " ");
- /* Second column: ASCII */
- for (j = 0; j < BYTES_PER_DUMP_LINE; j++, i++) {
- if (isprint((int)data[i]) && i < data_len) {
- fprintf(xmlout, "%c", data[i]);
- } else {
- fprintf(xmlout, " ");
- }
- }
- /* If we also wanted to output UCS-2 Unicode as a third column, then entire document
- must use fwprintf. Forget about it for now. As it stands, if data is UCS-2 format but still
- the ASCII set, then we'll be able to read every other byte as ASCII in column 2. If
- data is UTF-8 format but still ASCII, then we'll be able to read every byte as ASCII
- in column 2. */
- }
- fprintf(xmlout, "%s</AsHexAndASCII>\n", s);
- }
-}
-
-
-/* ------------- */
-
-void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct) /* JP2 Header */
-{
- /* Compare jp2_read_jp2h(opj_jp2_t * jp2_struct) */
- int i;
-
- fprintf(xmlout, " <JP2Header BoxType=\"jp2h\">\n");
-
- /* Compare jp2_read_ihdr(jp2_struct)) */
- fprintf(xmlout, " <ImageHeader BoxType=\"ihdr\">\n");
- fprintf(xmlout, " <HEIGHT>%d</HEIGHT>\n",
- jp2_struct->h); /* 4 bytes */
- fprintf(xmlout, " <WIDTH>%d</WIDTH>\n",
- jp2_struct->w); /* 4 bytes */
- if (notes) {
- fprintf(xmlout,
- " <!-- HEIGHT here, if 2 fields per image, is of total deinterlaced height. -->\n");
- }
- fprintf(xmlout, " <NC>%d</NC>\n",
- jp2_struct->numcomps); /* 2 bytes */
- if (notes) {
- fprintf(xmlout,
- " <!-- NC is number of components -->\n"); /* 2 bytes */
- }
- fprintf(xmlout, " <BPC>\n"); /* 1 byte */
- if (jp2_struct->bpc == 255) {
- fprintf(xmlout, " <AsHex>0x%02x</AsHex>\n",
- jp2_struct->bpc); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
- }
- } else { /* Not 0xff */
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%02x</AsHex>\n",
- jp2_struct->bpc); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
- }
- }
- if (derived) {
- fprintf(xmlout, " <BitsPerPixel>%d</BitsPerPixel>\n",
- jp2_struct->bpc & 0x7f);
- fprintf(xmlout, " <Signed>%d</Signed>\n",
- jp2_struct->bpc >> 7);
- }
- }
- fprintf(xmlout, " </BPC>\n");
- fprintf(xmlout, " <C>%d</C>\n",
- jp2_struct->C); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- C is compression type. Only \"7\" is allowed to date. -->\n"); /* 2 bytes */
- }
- fprintf(xmlout, " <UnkC>%d</UnkC>\n",
- jp2_struct->UnkC); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- Colourspace Unknown. 1 = unknown, 0 = known (e.g., colourspace spec is accurate) -->\n"); /* 1 byte */
- }
- fprintf(xmlout, " <IPR>%d</IPR>\n",
- jp2_struct->IPR); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- IPR is 1 if frame contains an Intellectual Property box; 0 otherwise. -->\n"); /* 2 bytes */
- }
- fprintf(xmlout, " </ImageHeader>\n");
-
- if (jp2_struct->bpc == 255) {
- fprintf(xmlout, " <BitsPerComponent BoxType=\"bpcc\">\n");
- if (notes) {
- fprintf(xmlout,
- " <!-- Pixel depth (range 1 to 38) is low 7 bits of hex value + 1 -->\n");
- }
- /* Bits per pixel varies with components */
- /* Compare jp2_read_bpcc(jp2_struct) */
- for (i = 0; i < (int)jp2_struct->numcomps; i++) {
- if (raw) {
- fprintf(xmlout, " <AsHex>0x%02x</AsHex>\n",
- jp2_struct->comps[i].bpcc); /* 1 byte */
- }
- if (derived) {
- fprintf(xmlout, " <BitsPerPixel>%d</BitsPerPixel>\n",
- (jp2_struct->comps[i].bpcc & 0x7f) + 1);
- fprintf(xmlout, " <Signed>%d</Signed>\n",
- jp2_struct->comps[i].bpcc >> 7);
- }
- }
- fprintf(xmlout, " </BitsPerComponent>\n");
- }
-
- /* Compare jp2_read_colr(jp2_struct) */
- fprintf(xmlout,
- " <ColourSpecification BoxType=\"colr\">\n");
- fprintf(xmlout, " <METH>%d</METH>\n",
- jp2_struct->meth); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- Valid values of specification method so far: -->\n");
- fprintf(xmlout,
- " <!-- 1 = Enumerated colourspace, in EnumCS field -->\n");
- fprintf(xmlout,
- " <!-- 2 = Restricted ICC Profile, in PROFILE field -->\n");
- }
- fprintf(xmlout, " <PREC>%d</PREC>\n",
- jp2_struct->precedence); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- 0 is only valid value of precedence so far. -->\n");
- }
- fprintf(xmlout, " <APPROX>%d</APPROX>\n",
- jp2_struct->approx); /* 1 byte */
- if (notes) {
- fprintf(xmlout,
- " <!-- 0 is only valid value of colourspace approximation so far. -->\n");
- }
-
- if (jp2_struct->meth == 1) {
- fprintf(xmlout, " <EnumCS>%d</EnumCS>\n",
- jp2_struct->enumcs); /* 4 bytes */
- if (notes) {
- fprintf(xmlout,
- " <!-- Valid values of enumerated MJ2 colourspace so far: -->\n");
- fprintf(xmlout,
- " <!-- 16: sRGB as defined by IEC 61966-2-1. -->\n");
- fprintf(xmlout,
- " <!-- 17: greyscale (related to sRGB). -->\n");
- fprintf(xmlout,
- " <!-- 18: sRGB YCC (from JPEG 2000 Part II). -->\n");
- fprintf(xmlout,
- " <!-- (Additional JPX values are defined in Part II). -->\n");
- }
- } else if (notes) {
- fprintf(xmlout,
- " <!-- PROFILE is not handled by current OpenJPEG implementation. -->\n");
- }
- /* only 1 byte is read and nothing stored */
- fprintf(xmlout, " </ColourSpecification>\n");
-
- /* TO DO? No OpenJPEG support.
- Palette 'pclr'
- ComponentMapping 'cmap'
- ChannelDefinition 'cdef'
- Resolution 'res'
- */
- fprintf(xmlout, " </JP2Header>\n");
-}
-/* ------------- */
-
-#ifdef NOTYET
-IMAGE these use cp structure,
- extended... but we could use a new data structure instead
- void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp)
-{
- /* IntellectualProperty 'jp2i' (no restrictions on location) */
- int i;
- IMAGE cp->jp2i, cp->jp2i_count, cp->jp2i_data(array of chars),
- cp->cp2i_len(array of ints)
- if (cp->jp2i != 1) {
- return; /* Not present */
- }
-
- for (i = 0; i < cp->jp2i_count; i++) {
- fprintf(xmlout, " <IntellectualProperty BoxType=\"jp2i\">\n");
- /* I think this can be anything, including binary, so do a dump */
- /* Is it better to indent or not indent this content? Indent is better for reading, but
- worse for cut/paste. */
- xml_out_dump_hex_and_ascii(xmlout, cp->jp2i_data[i], cp->jp2i_len[i]);
- fprintf(xmlout, " </IntellectualProperty>\n");
- }
-}
-
-void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp)
-{
- /* XML 'xml\040' (0x786d6c20). Can appear multiply, before or after jp2c codestreams */
- IMAGE cp->xml, cp->xml_count, cp->xml_data(array of chars)
- MAYBE WE DON'T NEED cp->xml_len (array of ints) IF WE ASSUME xml_data IS NULL-TERMINATED.
- ASSUME ASSUME EACH LINE IS ENDED BY \n.
- int i;
- if (cp->xml != 1) {
- return; /* Not present */
- }
-
- for (i = 0; i < cp->xml_count; i++) {
- fprintf(xmlout, " <TextFormXML BoxType=\"xml[space]" Instance =
- \"%d\">\n", i + 1);
- /* Is it better to indent or not indent this content? Indent is better for reading, but
- worse for cut/paste. Being lazy, didn't indent here. */
- fprintf(xmlout,
- cp->xml_data[i]); /* May be multiple lines */ /* Could check if this is well-formed */
- fprintf(xmlout, " </TextFormXML>\n");
- }
-}
-
-void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp)
-{
- /* UUID 'uuid' (top level only) */
- /* Part I 1.7.2 says: may appear multiply in JP2 file, anywhere except before File Type box */
- /* Part III 5.2.1 says: Private extensions shall be achieved through the 'uuid' type. */
- /* A UUID is a 16-byte value. There is a conventional string representation for it:
- "0x12345678-9ABC-DEF0-1234-567890ABCDEF". Let's assume that is what is stored in uuid_value */
-
- /* Part III 6.1 Any other MJ2 box type could be alternatively written as a 'uuid' box, with value given
- as : 0xXXXXXXXX-0011-0010-8000-00AA00389B71, where the Xs are the boxtype in hex. However,
- such a file is "not compliant; systems may choose to read [such] objects ... as equivalent to the box of
- the same type, or not." Here, we choose not to. */
- int i;
- IMAGE cp->uuid, cp->uuid_count,
- cp->uuid_value(array of uuids...
- let's say fixed-length strings) cp->uuid_data (array of char buffers), cp->uuid_len (array of ints)
- if (cp->juuid != 1)
- return; /* Not present */
-
- for (i = 0; i < cp->uuid_count; i++) {
- fprintf(xmlout, " <UniversalUniqueID BoxType=\"uuid\">
- fprintf(xmlout, " <UUID>%s</UUDI>\n", cp->uuid_value[i]);
- fprintf(xmlout, " <Data>\n");
- /* I think this can be anything, including binary, so do a dump */
- /* Is it better to indent or not indent this content? Indent is better for reading, but
- worse for cut/paste. */
- xml_out_dump_hex_and_ascii(xmlout, cp->uuid_data[i], cp->uuid_len[i]);
- fprintf(xmlout, " </Data>\n");
- fprintf(xmlout, " </UniversalUniqueID>\n");
- }
-}
-
-void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp)
-{
- /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
- /* Part I 1.7.3 says: may appear multiply in JP2 file, anywhere at the top level except before File Type box */
- /* So there may be multiple ulst's, and each can have multiple UUIDs listed (with a single URL) */
- /* This is not quite as vendor-specific as UUIDs, or at least is meant to be generally readable */
- /* Assume UUIDs stored in canonical string format */
- int i, j;
- IMAGE cp->uinf, cp->uinf_count, cp->uinf_ulst_nu(array of ints)
- cp->uinf_uuid(2 dimensional array of uuids... let's say fixed-length strings),
- cp->uinf_url(array of char buffers)
-
- if (cp->uinf != 1)
- return; /* Not present */
-
- for (i = 0; i < cp->uuid_count; i++) {
- fprintf(xmlout, " <UUIDInfo BoxType=\"uinf\">\n");
- fprintf(xmlout, " <UUIDList BoxType=\"ulst\" Count=\"%d\">\n",
- cp->cp->uinf_ulst_nu[i]);
- for (j = 0; j < cp->uinf_ulst_nu[i]; j++) {
- fprintf(xmlout, " <ID Instance=\"%s\">%s</ID>\n",
- cp->uuif_uuid[i][j], j + 1);
- }
- fprintf(xmlout, " </UUIDList>\n");
- fprintf(xmlout, " <DataEntryURL>\n");
- /* Could add VERS and FLAG here */
- fprintf(xmlout, " <LOC>\n");
- fprintf(xmlout, " %s",
- cp->uinf_url[i]); /* Probably single line, so indent works */ /* In theory, could check if this is well-formed, or good live link */
- fprintf(xmlout, " </LOC>\n");
- fprintf(xmlout, " </DataEntryURL>\n");
- fprintf(xmlout, " </UUIDInfo>\n");
- }
-}
-
-IMAGE these use cp structure,
-extended... but we could use a new data structure instead
-void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp)
-{
- /* Part III 5.2.1 says "Type fields not defined here are reserved. Private extensions
- shall be acieved through the 'uuid' type." [This implies an unknown
- type would be an error, but then...] "Boxes not explicitly defined in this standard,
- or otherwise unrecognized by a reader, may be ignored."
- Also, it says "the following types are not and will not be used, or used only in
- their existing sense, in future versions of this specification, to avoid conflict
- with existing content using earlier pre-standard versions of this format:
- clip, crgn, matt, kmat, pnot, ctab, load, imap;
- track reference types tmcd, chap, sync,scpt, ssrc"
- [But good luck figuring out the mapping.]
- Part III Amend. 2 4.1 is stronger: "All these specifications [of this family, e.g.,
- JP2 Part I, ISO Base format (Part 12) leading to MP4, Quicktime, and possibly including
- MJ2] require that readers ignore objects that are unrecognizable to them".
- */
- int i;
- IMAGE cp->unknown_type, cp->unknown_type_count,
- cp->unknown_type_boxtype(array of buf[5]s),
- cp->unknown_type_data(array of chars), cp->unknown_type_len(array of ints)
- if (cp->unknown_type != 1) {
- return; /* Not present */
- }
-
- for (i = 0; i < cp->unknown_type_count; i++) {
- fprintf(xmlout, " <UnknownType BoxType=\"%s\">\n",
- cp->unknown_type_boxtype[i]);
- /* Can be anything, including binary, so do a dump */
- /* Is it better to indent or not indent this content? Indent is better for reading, but
- worse for cut/paste. */
- xml_out_dump_hex_and_ascii(xmlout, cp->unknown_type_data[i],
- cp->unknown_type_len[i]);
- fprintf(xmlout, " </UnknownType>\n");
- }
-}
-
-#endif
diff --git a/openjpeg/src/bin/mj2/meta_out.h b/openjpeg/src/bin/mj2/meta_out.h
deleted file mode 100644
index 769ff391..00000000
--- a/openjpeg/src/bin/mj2/meta_out.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* meta_out.h */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Callable from mj2_to_metadata */
-/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */
-
-#define BOOL int
-#define FALSE 0
-#define TRUE 1
-
-void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d);
-
-int xml_write_struct(FILE *file, FILE *xmlout, opj_mj2_t * movie,
- unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr);
-
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata.c b/openjpeg/src/bin/mj2/mj2_to_metadata.c
deleted file mode 100644
index 44858c86..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* mj2_to_metadata.c */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
-
-The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD.
-It is the policy of NLM (and U.S. government) to not assert copyright.
-
-A non-exclusive copy of this code has been contributed to the Open JPEG project.
-Except for copyright, inclusion of the code within Open JPEG for distribution and use
-can be bound by the Open JPEG open-source license and disclaimer, expressed elsewhere.
-*/
-
-#include "opj_includes.h"
-#include "mj2.h"
-
-#include "mj2_to_metadata.h"
-#include <string.h>
-#include "opj_getopt.h"
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting a FILE* client object
-*/
-void info_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-
-/* ------------- */
-
-void help_display()
-{
- /* "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
- fprintf(stdout, " Help for the 'mj2_to_metadata' Program\n");
- fprintf(stdout, " ======================================\n");
- fprintf(stdout, "The -h option displays this information on screen.\n\n");
-
- fprintf(stdout,
- "mj2_to_metadata generates an XML file from a Motion JPEG 2000 file.\n");
- fprintf(stdout,
- "The generated XML shows the structural, but not (yet) curatorial,\n");
- fprintf(stdout,
- "metadata from the movie header and from the JPEG 2000 image and tile\n");
- fprintf(stdout,
- "headers of a sample frame. Excluded: low-level packed-bits image data.\n\n");
-
- fprintf(stdout, "By Default\n");
- fprintf(stdout, "----------\n");
- fprintf(stdout,
- "The metadata includes the jp2 image and tile headers of the first frame.\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "Metadata values are shown in 'raw' form (e.g., hexadecimal) as stored in the\n");
- fprintf(stdout,
- "file, and, if apt, in a 'derived' form that is more quickly grasped.\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "Notes explaining the XML are embedded as terse comments. These include\n");
- fprintf(stdout, " meaning of non-obvious tag abbreviations;\n");
- fprintf(stdout, " range and precision of valid values;\n");
- fprintf(stdout, " interpretations of values, such as enumerations; and\n");
- fprintf(stdout, " current implementation limitations.\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "The sample-size and chunk-offset tables, each with 1 row per frame, are not reported.\n");
- fprintf(stdout, "\n");
- fprintf(stdout,
- "The file is self-contained and no verification (e.g., against a DTD) is requested.\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Required Parameters (except with -h)\n");
- fprintf(stdout, "------------------------------------\n");
- fprintf(stdout,
- "[Caution: file strings that contain spaces should be wrapped with quotes.]\n");
- fprintf(stdout,
- "-i input.mj2 : where 'input' is any source file name or path.\n");
- fprintf(stdout,
- " MJ2 files created with 'frames_to_mj2' are supported so far.\n");
- fprintf(stdout,
- " These are silent, single-track, 'MJ2 Simple Profile' videos.\n");
- fprintf(stdout,
- "-o output.xml : where 'output' is any destination file name or path.\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Optional Parameters\n");
- fprintf(stdout, "-------------------\n");
- fprintf(stdout, "-h : Display this help information.\n");
- fprintf(stdout, "-n : Suppress all mj2_to_metadata notes.\n");
- fprintf(stdout,
- "-t : Include sample-size and chunk-offset tables.\n");
- fprintf(stdout,
- "-f n : where n > 0. Include jp2 header info for frame n [default=1].\n");
- fprintf(stdout, "-f 0 : No jp2 header info.\n");
- fprintf(stdout,
- "-r : Suppress all 'raw' data for which a 'derived' form exists.\n");
- fprintf(stdout, "-d : Suppress all 'derived' data.\n");
- fprintf(stdout,
- " (If both -r and -d given, -r will be ignored.)\n");
- fprintf(stdout,
- "-v string : Verify against the DTD file located by the string.\n");
- fprintf(stdout,
- " Prepend quoted 'string' with either SYSTEM or PUBLIC keyword.\n");
- fprintf(stdout,
- " Thus, for the distributed DTD placed in the same directory as\n");
- fprintf(stdout,
- " the output file: -v \"SYSTEM mj2_to_metadata.dtd\"\n");
- fprintf(stdout,
- " \"PUBLIC\" is used with an access protocol (e.g., http:) + URL.\n");
- /* More to come */
- fprintf(stdout, "\n");
- /* "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
-}
-
-/* ------------- */
-
-int main(int argc, char *argv[])
-{
-
- opj_dinfo_t* dinfo;
- opj_event_mgr_t event_mgr; /* event manager */
-
- FILE *file, *xmlout;
- /* char xmloutname[50]; */
- opj_mj2_t *movie;
-
- char* infile = 0;
- char* outfile = 0;
- char* s, S1, S2, S3;
- int len;
- unsigned int sampleframe = 1; /* First frame */
- char* stringDTD = NULL;
- BOOL notes = TRUE;
- BOOL sampletables = FALSE;
- BOOL raw = TRUE;
- BOOL derived = TRUE;
- mj2_dparameters_t parameters;
-
- while (TRUE) {
- /* ':' after letter means it takes an argument */
- int c = getopt(argc, argv, "i:o:f:v:hntrd");
- /* FUTURE: Reserve 'p' for pruning file (which will probably make -t redundant) */
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': /* IN file */
- infile = optarg;
- s = optarg;
- while (*s) {
- s++; /* Run to filename end */
- }
- s--;
- S3 = *s;
- s--;
- S2 = *s;
- s--;
- S1 = *s;
-
- if ((S1 == 'm' && S2 == 'j' && S3 == '2')
- || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
- break;
- }
- fprintf(stderr, "Input file name must have .mj2 extension, not .%c%c%c.\n", S1,
- S2, S3);
- return 1;
-
- /* ----------------------------------------------------- */
- case 'o': /* OUT file */
- outfile = optarg;
- while (*outfile) {
- outfile++; /* Run to filename end */
- }
- outfile--;
- S3 = *outfile;
- outfile--;
- S2 = *outfile;
- outfile--;
- S1 = *outfile;
-
- outfile = optarg;
-
- if ((S1 == 'x' && S2 == 'm' && S3 == 'l')
- || (S1 == 'X' && S2 == 'M' && S3 == 'L')) {
- break;
- }
-
- fprintf(stderr,
- "Output file name must have .xml extension, not .%c%c%c\n", S1, S2, S3);
- return 1;
-
- /* ----------------------------------------------------- */
- case 'f': /* Choose sample frame. 0 = none */
- sscanf(optarg, "%u", &sampleframe);
- break;
-
- /* ----------------------------------------------------- */
- case 'v': /* Verification by DTD. */
- stringDTD = optarg;
- /* We will not insist upon last 3 chars being "dtd", since non-file
- access protocol may be used. */
- if (strchr(stringDTD, '"') != NULL) {
- fprintf(stderr,
- "-D's string must not contain any embedded double-quote characters.\n");
- return 1;
- }
-
- if (strncmp(stringDTD, "PUBLIC ", 7) == 0 ||
- strncmp(stringDTD, "SYSTEM ", 7) == 0) {
- break;
- }
-
- fprintf(stderr, "-D's string must start with \"PUBLIC \" or \"SYSTEM \"\n");
- return 1;
-
- /* ----------------------------------------------------- */
- case 'n': /* Suppress comments */
- notes = FALSE;
- break;
-
- /* ----------------------------------------------------- */
- case 't': /* Show sample size and chunk offset tables */
- sampletables = TRUE;
- break;
-
- /* ----------------------------------------------------- */
- case 'h': /* Display an help description */
- help_display();
- return 0;
-
- /* ----------------------------------------------------- */
- case 'r': /* Suppress raw data */
- raw = FALSE;
- break;
-
- /* ----------------------------------------------------- */
- case 'd': /* Suppress derived data */
- derived = FALSE;
- break;
-
- /* ----------------------------------------------------- */
- default:
- return 1;
- } /* switch */
- } /* while */
-
- if (!raw && !derived) {
- raw = TRUE; /* At least one of 'raw' and 'derived' must be true */
- }
-
- /* Error messages */
- /* -------------- */
- if (!infile || !outfile) {
- fprintf(stderr,
- "Correct usage: mj2_to_metadata -i mj2-file -o xml-file (plus options)\n");
- return 1;
- }
-
- /* was:
- if (argc != 3) {
- printf("Bad syntax: Usage: MJ2_to_metadata inputfile.mj2 outputfile.xml\n");
- printf("Example: MJ2_to_metadata foreman.mj2 foreman.xml\n");
- return 1;
- }
- */
- len = strlen(infile);
- if (infile[0] == ' ') {
- infile++; /* There may be a leading blank if user put space after -i */
- }
-
- file = fopen(infile, "rb"); /* was: argv[1] */
-
- if (!file) {
- fprintf(stderr, "Failed to open %s for reading.\n", infile); /* was: argv[1] */
- return 1;
- }
-
- len = strlen(outfile);
- if (outfile[0] == ' ') {
- outfile++; /* There may be a leading blank if user put space after -o */
- }
-
- // Checking output file
- xmlout = fopen(outfile, "w"); /* was: argv[2] */
- if (!xmlout) {
- fprintf(stderr, "Failed to open %s for writing.\n", outfile); /* was: argv[2] */
- return 1;
- }
- // Leave it open
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* get a MJ2 decompressor handle */
- dinfo = mj2_create_decompress();
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- movie = (opj_mj2_t*) dinfo->mj2_handle;
- mj2_setup_decoder(dinfo->mj2_handle, &parameters);
-
- if (mj2_read_struct(file, movie)) { // Creating the movie structure
- fclose(xmlout);
- return 1;
- }
-
- xml_write_init(notes, sampletables, raw, derived);
- xml_write_struct(file, xmlout, movie, sampleframe, stringDTD, &event_mgr);
- fclose(xmlout);
-
- fprintf(stderr, "Metadata correctly extracted to XML file \n");;
-
- /* free remaining structures */
- if (dinfo) {
- mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
- }
-
- return 0;
-}
-
-
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata.dtd b/openjpeg/src/bin/mj2/mj2_to_metadata.dtd
deleted file mode 100644
index 249de1a0..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata.dtd
+++ /dev/null
@@ -1,425 +0,0 @@
-<!--
-Preliminary DTD for Open JPEG "mj2_to_metadata" function.
-Last revised: April 20, 2005
-Author: Glenn Pearson, at U.S. National Library of Medicine.
-See mj2_to_metadata.c regarding copyright, license, disclaimer status.
-
-While the vocabulary of this DTD is based on the relevant portions of the
-ISO/IEC JPEG 200 standard, the detailed representation is the author's own.
-It is neither an ISO/IEC nor NLM official or consensus representation.
-Furthermore, it deviates from a pure representation of the ISO/IEC standard
-in these aspects:
-
- - it is incomplete in a number of ways (which to some extent may be
- addressed over time);
- - it has extensions for "derived" data and "statistics";
- - it is more flexible. That is, some elements are marked as optional
- not because they are optional in an MJ2 file, but because reporting
- of them is optional based on current or projected mj2_to_metadata
- command-line flags.
--->
-<!ELEMENT MJ2_File (JP2?, FileType?, MovieBox?)>
-<!ELEMENT JP2 EMPTY>
-<!ATTLIST JP2 BoxType CDATA #FIXED "jP[space][space]">
-<!ATTLIST JP2 Signature CDATA #FIXED "0x0d0a870a">
-<!ELEMENT FileType (Brand, MinorVersion, CompatibilityList)>
-<!ATTLIST FileType BoxType CDATA #FIXED "ftyp">
-<!ELEMENT Brand (#PCDATA)> <!-- 4 characters max -->
-<!ELEMENT MinorVersion (#PCDATA)> <!-- 4 chararcters max -->
-<!ELEMENT CompatibilityList (CompatibleBrand)*>
-<!ATTLIST CompatibilityList Count CDATA #REQUIRED> <!-- Count >= 0 -->
-<!ELEMENT CompatibleBrand (#PCDATA)> <!-- 4 characters max -->
-<!ELEMENT MovieBox (MovieHeader, Statistics?, Track*)>
-<!ATTLIST MovieBox BoxType CDATA #FIXED "moov">
-<!ELEMENT MovieHeader (CreationTime, ModificationTime, Timescale, Rate, Duration, Volume, TransformationMatrix)>
-<!ATTLIST MovieHeader BoxType CDATA #FIXED "mvhd">
-<!ELEMENT CreationTime (InSeconds?,AsLocalTime?)>
-<!ELEMENT InSeconds (#PCDATA)>
-<!ELEMENT AsLocalTime (#PCDATA)>
-<!ELEMENT ModificationTime (InSeconds?,AsLocalTime?)>
-<!ELEMENT Timescale (#PCDATA)> <!-- Timescale defines time units in one second -->
-<!ELEMENT Rate (AsHex | (AsHex, AsDecimal) | AsDecimal)> <!-- Decimal is Approximation; Optional on input. -->
-<!ELEMENT AsHex (#PCDATA)>
-<!ELEMENT AsDecimal (#PCDATA)>
-<!ELEMENT Duration (InTimeUnits | (InTimeUnits, InSeconds) | InSeconds)> <!-- InSeconds Optional on input. -->
-<!ELEMENT InTimeUnits (#PCDATA)>
-<!ELEMENT Volume (AsHex | (AsHex, AsDecimal) | AsDecimal)> <!-- hex default = 0x0100 -->
-<!-- Fixed 8.8 value of audio volume. Full, normal value is 1.0 (0x0100) -->
-<!ELEMENT TransformationMatrix (TMa,TMb,TMu,TMc,TMd,TMv,TMx,TMy,TMw)> <!-- for video -->
-<!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}. Required: u=0, v=0, w=1 -->
-<!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->
-<!-- Stored as Fixed Point Hex: all are 16.16, except u,v,w are 2.30 -->
-<!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->
-<!ELEMENT TMa (#PCDATA)>
-<!ELEMENT TMb (#PCDATA)>
-<!ELEMENT TMu (#PCDATA)> <!--Always "0x00000000" -->
-<!ELEMENT TMc (#PCDATA)>
-<!ELEMENT TMd (#PCDATA)>
-<!ELEMENT TMv (#PCDATA)> <!--Always "0x00000000" -->
-<!ELEMENT TMx (#PCDATA)>
-<!ELEMENT TMy (#PCDATA)>
-<!ELEMENT TMw (#PCDATA)> <!--Always "0x40000000" -->
-
-<!ELEMENT Statistics (TracksFound)>
-<!ELEMENT TracksFound (Video,Audio,Hint)>
-<!ELEMENT Video (#PCDATA)>
-<!ELEMENT Audio (#PCDATA)>
-<!ELEMENT Hint (#PCDATA)>
-
-
-<!-- For now, output info on at most one video track -->
-
-
-<!ELEMENT Track (TrackHeader, TrackReferenceContainer?, EditListContainer?, Media, JP2_Frame?)> <!-- JP2_Frame is mj2_to_metadata extension -->
-<!ATTLIST Track BoxType CDATA #FIXED "trak">
-<!ATTLIST Track Instance CDATA #REQUIRED>
-<!ELEMENT TrackHeader (TrackID, TrackLayer?, Volume?, TransformationMatrix?, Width?, Height?)>
-<!ATTLIST TrackHeader BoxType CDATA #FIXED "tkhd">
-<!-- Not shown here: CreationTime, ModificationTime, Duration. -->
-<!-- These 3 fields are reported under MediaHeader below. When reading these 3, -->
-<!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->
-<!-- If both found, value read from MediaHeader is used. -->
-<!ELEMENT TrackID (#PCDATA)>
-<!ELEMENT TrackLayer (#PCDATA)> <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->
-<!-- "Volume" element described above; here it is for particular audio track. Full, normal (default = 0x0100) -->
-<!-- "TransformationMatrix" element described above; matrix here is applied before MovieHeader one. -->
-<!ELEMENT Width (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ELEMENT Height (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!-- AsHex, AsDecimal already defined above -->
- <!-- Width and Height are for the presentation; frames will be scaled to this -->
-<!-- /TrackHeader -->
-<!ELEMENT TrackReferenceContainer ANY> <!-- TO DO: TrackReferenceContainer 'tref' just used in hint track -->
-<!ELEMENT EditListContainer ANY> <!-- TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate -->
-<!ELEMENT Media (MediaHeader, HandlerReference,MediaInfoContainer)>
-<!ATTLIST Media BoxType CDATA #FIXED "mdia">
-<!ELEMENT MediaHeader (CreationTime,ModificationTime,Timescale,Duration,Language)>
-<!ATTLIST MediaHeader BoxType CDATA #FIXED "mdhd">
-<!-- Elements already defined above: CreationTime, ModificationTime, Timescale, Duration -->
-<!ELEMENT Language (#PCDATA)> <!-- 3 chars max. There's an enumeration available -->
-<!ELEMENT HandlerReference (HandlerType)>
-<!ATTLIST HandlerReference BoxType CDATA #FIXED "hdlr">
-<!ELEMENT HandlerType (#PCDATA)>
-<!ATTLIST HandlerType Code ( vide | soun | hint ) "vide">
-
-<!-- make the media headers multiple? -->
-<!ELEMENT MediaInfoContainer ((VideoMediaHeader | SoundMediaHeader | HintMediaHeader), DataInfo, SampleTable)>
-<!ATTLIST MediaInfoContainer BoxType CDATA #FIXED "minf">
-<!ELEMENT VideoMediaHeader (GraphicsMode, Opcolor)>
-<!ATTLIST VideoMediaHeader BoxType CDATA #FIXED "vmhd">
-<!ELEMENT GraphicsMode (#PCDATA)>
- <!-- Enumerated values of graphics mode: -->
- <!-- 0x00 = copy (over existing image); -->
- <!-- 0x24 = transparent; 'blue-screen' this image using opcolor; -->
- <!-- 0x100 = alpha; alpha-blend this image -->
- <!-- 0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->
- <!-- 0x102 = blackalpha; alpha-blend this image, which has been blended with black. -->
-<!ELEMENT Opcolor (Red,Green,Blue)>
-<!ELEMENT Red (#PCDATA)>
-<!ELEMENT Green (#PCDATA)>
-<!ELEMENT Blue (#PCDATA)>
-<!ELEMENT SoundMediaHeader (Balance)>
-<!ATTLIST SoundMediaHeader BoxType CDATA #FIXED "smhd">
-<!ELEMENT Balance (#PCDATA)>
- <!-- Fixed Point 8.8, fixes mono track in stereo space. -->
- <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->
-<!ELEMENT HintMediaHeader (MaxPDU_Size, AvgPDU_Size, MaxBitRate, AvgBitRate, SlidingAvgBitRate)>
-<!ATTLIST HintMediaHeader BoxType CDATA #FIXED "hmhd">
-<!ELEMENT MaxPDU_Size (#PCDATA)>
- <!-- Size in bytes of largest PDU in this hint stream. -->
-<!ELEMENT AvgPDU_Size (#PCDATA)>
- <!-- Average size in bytes of a PDU over the entire presentation. -->
-<!ELEMENT MaxBitRate (#PCDATA)>
- <!-- Maximum rate in bits per second over any window of 1 second. -->
-<!ELEMENT AvgBitRate (#PCDATA)>
- <!-- Averate rate in bits per second over the entire presentation. -->
-<!ELEMENT SlidingAvgBit (#PCDATA)>
- <!-- Maximum rate in bits per second over any window of one minute. -->
-
-<!ELEMENT DataInfo (DataReference)>
-<!ATTLIST DataInfo BoxType CDATA #FIXED "dinf">
-<!ELEMENT DataReference (DataEntryUrlBox | DataEntryUrnBox )*>
-<!ATTLIST DataReference BoxType CDATA #FIXED "dref">
-<!ATTLIST DataReference URL_Count CDATA #REQUIRED>
-<!ATTLIST DataReference URN_Count CDATA #REQUIRED> <!-- table w. flags, URLs, URNs -->
-<!-- // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
- // We could infer those, but for now just present everything as a DREF table.
--->
- <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->
-
-<!ELEMENT DataEntryUrlBox (Location)>
-<!ATTLIST DataEntryUrlBox BoxType CDATA #FIXED "url[space]"> <!-- table w. flags, URLs, URNs -->
- <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->
-<!ELEMENT DataEntryUrnBox (Name, Location?)>
-<!ATTLIST DataEntryUrnBox BoxType CDATA #FIXED "urn[space]\">
- <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->
-
-<!ELEMENT SampleTable (VisualSampleEntry,TimeToSample,SampleToChunk,SampleSize,ChunkOffset)> <!-- structure doesn't do non-visual sample entry yet -->
-<!ATTLIST SampleTable BoxType CDATA #FIXED "stbl"> <!-- to add: entry count -->
- <!-- Next are instances of generic SampleDescription BoxType=\"stsd\" -->
-
- <!-- There could be multiple instances of this, but "entry_count" is just a local at read-time.
- And it's used wrong, too, as count of just visual type, when it's really all 3 types.
- This is referred to as "smj2" within mj2.c -->
-<!ELEMENT VisualSampleEntry (WidthAsInteger, HeightAsInteger, HorizontalRes, VerticalRes, CompressorName, Depth, JP2Header?, FieldCoding?, MJP2_Profile?, MJP2_Prefix?, MJP2_SubSampling?, MJP2_OriginalFormat?)>
-<!ATTLIST VisualSampleEntry BoxType CDATA #FIXED "mjp2">
- <!-- If multiple instances of this, only first is shown here. -->
-<!ELEMENT WidthAsInteger (#PCDATA)>
-<!ELEMENT HeightAsInteger (#PCDATA)>
-<!ELEMENT HorizontalRes (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ELEMENT VerticalRes (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!-- Typical value for both resolution is 72 (0x00480000) -->
-<!ELEMENT CompressorName (#PCDATA)>
- <!-- Compressor name for debugging. Standard restricts max length to 31 bytes. -->
- <!-- Usually blank or \"Motion JPEG2000\" -->
-<!ELEMENT Depth (#PCDATA)>
- <!-- Depth is: -->
- <!-- 0x20: alpha channels present (color or grayscale) -->
- <!-- 0x28: grayscale without alpha -->
- <!-- 0x18: color without alpha -->
-
-<!-- TODO somewhere: tk->jp2_struct.numcomps -->
-<!ELEMENT JP2Header (ImageHeader, ColourSpecification)>
-<!ATTLIST JP2Header BoxType CDATA #FIXED "jp2h">
-<!ELEMENT ImageHeader (HEIGHT, WIDTH, NC, BPC, C, UnkC, IPR)>
-<!ATTLIST ImageHeader BoxType CDATA #FIXED "ihdr">
-<!ELEMENT HEIGHT (#PCDATA)> <!-- If 2 fields/frame, total deinterlaced height -->
-<!ELEMENT WIDTH (#PCDATA)>
-<!ELEMENT NC (#PCDATA)> <!-- number of components -->
-<!ELEMENT BPC (AsHex | (AsHex,BitsPerPixel,Signed) | (BitsPerPixel,Signed))>
-<!ELEMENT BitsPerPixel (#PCDATA)>
-<!ELEMENT Signed (#PCDATA)>
-<!ELEMENT C (#PCDATA)> <!-- Compression type. Only "7" defined -->
-<!ELEMENT UnkC (#PCDATA)> <!-- Colourspace Unknown. 1 = unknown, 0 = known -->
-<!ELEMENT IPR (#PCDATA)> <!-- 1 = frame has Intellectual Prop. box; otherwise 0 -->
-<!ELEMENT ColourSpecification (METH, PREC, APPROX, EnumCS)>
-<!ATTLIST ColourSpecification BoxType CDATA #FIXED "colr">
-<!ELEMENT METH (#PCDATA)> <!-- 1 = EnumCS field; 2 = PROFILE field (not yet generated) -->
-<!ELEMENT PREC (#PCDATA)> <!-- precedence must be 0 so far -->
-<!ELEMENT APPROX (#PCDATA)> <!-- colourspace approximation must be 0 so far -->
-<!ELEMENT EnumCS (#PCDATA)> <!-- Valid enumerated MJ2 colourspaces: 16 (sRGB), 17 (grey sRGB), 18 (YCC) -->
-
-<!-- Following subboxes are optional -->
-<!ELEMENT FieldCoding (FieldCount, FieldOrder)>
-<!ATTLIST FieldCoding BoxType CDATA #FIXED "fiel">
-<!ELEMENT FieldCount (#PCDATA)>
- <!-- Must be either 1 or 2 -->
-<!ELEMENT FieldOrder (#PCDATA)>
- <!-- When FieldCount=2, FieldOrder means: -->
- <!-- 0: Field coding unknown -->
- <!-- 1: Field with topmost line is stored first in sample; fields are in temporal order -->
- <!-- 6: Field with topmost line is stored second in sample; fields are in temporal order -->
- <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->
- <!-- Current implementation doesn't retain whether box was actually present. -->
-
-<!ELEMENT MJP2_Profile (CompatibleBrand*)>
-<!ATTLIST MJP2_Profile BoxType CDATA #FIXED "jp2p">
-<!ATTLIST MJP2_Profile Count CDATA #REQUIRED>
-
-<!ELEMENT MJP2_Prefix (Data*)>
-<!ATTLIST MJP2_Prefix BoxType CDATA #FIXED "jp2x">
-<!ATTLIST MJP2_Prefix Count CDATA #REQUIRED>
-<!-- We'll probably need better formatting than this -->
-<!ELEMENT Data (#PCDATA)> <!-- Multiple. Each entry is single byte -->
-
-<!ELEMENT MJP2_SubSampling (HorizontalSub, VerticalSub, HorizontalOffset, VerticalOffset)>
-<!ATTLIST MJP2_SubSampling BoxType CDATA #FIXED "jsub">
-<!-- These values are all 1 byte -->
- <!-- Typical subsample value is 2 for 4:2:0 -->
-<!ELEMENT HorizontalSub (#PCDATA)>
-<!ELEMENT VerticalSub (#PCDATA)>
-<!ELEMENT HorizontalOffset (#PCDATA)>
-<!ELEMENT VerticalOffset (#PCDATA)>
-
-<!ELEMENT MJP2_OriginalFormat (OriginalFieldCount, OriginalFieldOrder)>
-<!ATTLIST MJP2_OriginalFormat BoxType CDATA #FIXED "orfo"> <!-- Part III Appx. 2 -->
-<!ELEMENT OriginalFieldCount (#PCDATA)>
- <!-- In original material before encoding. Must be either 1 or 2 -->
-<!ELEMENT OriginalFieldOrder (#PCDATA)>
- <!-- When FieldCount=2, FieldOrder means: -->
- <!-- 0: Field coding unknown -->
- <!-- 11: Topmost line came from the earlier field; -->
- <!-- 16: Topmost line came form the later field. -->
- <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->
- <!-- Current implementation doesn't retain whether box was actually present. -->
-
-
- <!-- mj2_to_metadata's data structure doesn't record Audio and Hint sample data currently. -->
-
-<!-- Within SampleTable: -->
-<!ELEMENT TimeToSample (SampleStatistics, SampleEntries)>
-<!ATTLIST TimeToSample BoxType CDATA #FIXED "stts">
-<!ELEMENT SampleStatistics (TotalSamples)> <!-- Not part of standard -->
-<!ELEMENT TotalSamples (#PCDATA)>
- <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->
-
-<!ELEMENT SampleEntries (Table*)>
-<!ATTLIST SampleEntries EntryCount CDATA #REQUIRED>
-<!ELEMENT Table EMPTY> <!-- Multiple. Attributes have values -->
-<!ATTLIST Table Entry CDATA #REQUIRED>
-<!ATTLIST Table SampleCount CDATA #REQUIRED>
-<!ATTLIST Table SampleDelta CDATA #REQUIRED>
-
-<!-- Within SampleTable: -->
-<!ELEMENT SampleToChunk (FirstChunk,SamplesPerChunk,SampleDescrIndex)>
-<!ATTLIST SampleToChunk BoxType CDATA #FIXED "stsc">
-<!ATTLIST SampleToChunk Count CDATA #REQUIRED>
-<!ELEMENT FirstChunk (#PCDATA)>
-<!ELEMENT SamplesPerChunk (#PCDATA)>
-<!ELEMENT SampleDescrIndex (#PCDATA)>
-<!ELEMENT SampleSize (Sample_Size,Sample_Count,EntrySize*)>
-<!ATTLIST SampleSize BoxType CDATA #FIXED "stsz">
-<!ELEMENT Sample_Size (#PCDATA)>
-<!ELEMENT Sample_Count (#PCDATA)>
-<!ELEMENT EntrySize (#PCDATA)> <!-- appears multiply, but only with mj2_to_metadata option -t -->
-<!ATTLIST EntrySize Num CDATA #REQUIRED>
-<!ELEMENT ChunkOffset (EntryCount, Chunk_Offset*)>
-<!ATTLIST ChunkOffset BoxType CDATA #FIXED "stco">
-<!ELEMENT EntryCount (#PCDATA)>
-<!ELEMENT Chunk_Offset (#PCDATA)> <!-- appears multiply, but only with mj2_to_metadata option -t -->
-<!ATTLIST Chunk_Offset Num CDATA #REQUIRED>
-<!-- </SampleTable> </MediaInfoContainer> </Media> -->
-
-<!-- TO DO: optional UserData 'udat', can contain multiple Copyright 'cprt' -->
-
-
-<!-- Optional, and only for Visual Track: given individual frame -->
-<!ELEMENT JP2_Frame (MainHeader, TilePartHeaders)>
-<!ATTLIST JP2_Frame Num CDATA #REQUIRED>
-<!ELEMENT MainHeader (StartOfCodestream,ImageAndFileSize,CodingStyleDefault,QuantizationDefault,QuantizationComponent*,RegionOfInterest?,ProgressionOrderChange*)>
-<!ELEMENT StartOfCodestream EMPTY>
-<!ATTLIST StartOfCodestream Marker CDATA #FIXED "SOC">
-<!ELEMENT ImageAndFileSize (Xsiz,Ysiz,XOsiz,YOsiz,XTsiz,YTsiz,XTOsiz,YTOsiz,Csiz,Component+)>
-<!ATTLIST ImageAndFileSize Marker CDATA #FIXED "SIZ">
-<!ELEMENT Xsiz (#PCDATA)>
-<!ELEMENT Ysiz (#PCDATA)> <!-- Xsiz, Ysiz is the size of the reference grid. -->
-<!ELEMENT XOsiz (#PCDATA)>
-<!ELEMENT YOsiz (#PCDATA)> <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->
-<!ELEMENT XTsiz (#PCDATA)>
-<!ELEMENT YTsiz (#PCDATA)> <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->
-<!ELEMENT XTOsiz (#PCDATA)>
-<!ELEMENT YTOsiz (#PCDATA)> <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->
-<!ELEMENT Csiz (#PCDATA)> <!-- Csiz is the number of components in the image. -->
-<!-- For image components next -->
-<!ELEMENT Component (Ssiz,XRsiz,YRsiz,WidthOfData,HeightOfData)>
-<!ATTLIST Component Num CDATA #REQUIRED>
-<!ELEMENT Ssiz (AsHex | (AsHex,Signed,PrecisionInBits) | (Signed,PrecisionInBits))>
-<!-- Signed already defined -->
-<!ELEMENT PrecisionInBits (#PCDATA)> <!-- Bits per pixel (bpp) or pixel depth. -->
-<!ELEMENT XRsiz (#PCDATA)>
-<!ELEMENT YRsiz (#PCDATA)> <!-- XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->
-<!ELEMENT WidthOfData (#PCDATA)>
-<!ELEMENT HeightOfData (#PCDATA)> <!-- WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->
-<!-- -->
-<!ELEMENT CodingStyleDefault (Scod,SGcod,SPcod)>
-<!ATTLIST CodingStyleDefault Marker CDATA #FIXED "COD">
-<!ELEMENT Scod (#PCDATA)>
- <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->
- <!-- bit 0: Defines entropy coder precincts -->
- <!-- 0 = (PPx=15, PPy=15); 1 = precincts defined below. -->
- <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->
- <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->
-<!ELEMENT SGcod (ProgressionOrder,NumberOfLayers,MultipleComponentTransformation)>
-<!ELEMENT ProgressionOrder (#PCDATA)>
- <!-- Defined Progression Order Values are: -->
- <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->
- <!-- where L = "layer", R = "resolution level", C = "component", P = "position". -->
-<!ELEMENT NumberOfLayers (#PCDATA)>
-<!ELEMENT MultipleComponentTransformation (#PCDATA)>
- <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->
-<!ELEMENT SPcod (NumberOfDecompositionLevels,CodeblockWidth,CodeblockHeight,CodeblockStyle,Transformation)>
-<!ELEMENT NumberOfDecompositionLevels (#PCDATA)>
-<!ELEMENT CodeblockWidth (#PCDATA)> <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->
-<!ELEMENT CodeblockHeight (#PCDATA)> <!-- Codeblock dimension is 2^(value + 2) -->
-<!ELEMENT CodeblockStyle (#PCDATA)>
- <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->
- <!-- bit 0: Selective arithmetic coding bypass. -->
- <!-- bit 1: Reset context probabilities on coding pass boundaries. -->
- <!-- bit 2: Termination on each coding pass. -->
- <!-- bit 3: Vertically causal context. -->
- <!-- bit 4: Predictable termination. -->
- <!-- bit 5: Segmentation symbols are used. -->
-<!ELEMENT Transformation (#PCDATA)> <!-- For Transformation, 0="9-7 irreversible filter", 1="5-3 reversible filter" -->
- <!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->
- <!-- and any other component, with main-header style values different from [0], as COC. -->
-<!ELEMENT QuantizationDefault (Sqcd,SPqcd)>
-<!ATTLIST QuantizationDefault Marker CDATA #FIXED "QCD">
-<!ELEMENT Sqcd (AsHex | (AsHex,QuantizationStyle,NumberOfGuardBits) | (QuantizationStyle,NumberOfGuardBits))>
-<!ELEMENT QuantizationStyle (#PCDATA)> <!-- Default quantization style for all components. -->
- <!-- Quantization style (in Sqcd's low 5 bits) may be: -->
- <!-- 0 = No quantization. SPqcd size = 8 bits-->
- <!-- 1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->
- <!-- 2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->
-<!ELEMENT NumberOfGuardBits (#PCDATA)> <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->
-<!ELEMENT SPqcd (ReversibleStepSizeValue | QuantizationStepSizeValues )> <!-- TO DO: Irreversible choices -->
-<!ELEMENT ReversibleStepSizeValue (DynamicRangeExponent+)>
- <!-- Current mj2_to_metadata implementation dumps entire internal table, -->
- <!-- until an exponent with zero value is reached. -->
- <!-- Exponent epsilon(b) of reversible dynamic range. -->
- <!-- Hex value is as stored, in high-order 5 bits. -->
-<!ELEMENT DynamicRangeExponent (AsHex | (AsHex, AsDecimal) | AsDecimal)>
-<!ATTLIST DynamicRangeExponent Subband CDATA #REQUIRED>
-<!ELEMENT QuantizationStepSizeValues (QuantizationValues+, CalculatedExponent*)> <!-- Calculated exponents iff only subband 0 reported -->
-<!ELEMENT QuantizationValues (AsHex | (AsHex,Exponent,Mantissa) | (Exponent,Mantissa))>
-<!ATTLIST QuantizationValues Subband CDATA #REQUIRED>
-<!ELEMENT Exponent (#PCDATA)>
-<!ELEMENT Mantissa (#PCDATA)>
-<!ELEMENT CalculatedExponent (#PCDATA)>
-<!ATTLIST CalculatedExponent Subband CDATA #REQUIRED>
-<!-- /QuantizationDefault -->
- <!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->
- <!-- and any other component, with main-header quantization values different from [0], as QCC. -->
-<!ELEMENT QuantizationComponent (Sqcc,SPqcc)>
-<!ATTLIST QuantizationComponent Marker CDATA #FIXED "QCC">
-<!ATTLIST QuantizationComponent Component CDATA #REQUIRED>
-<!ELEMENT Sqcc (AsHex | (AsHex,QuantizationStyle,NumberOfGuardBits) | (QuantizationStyle,NumberOfGuardBits))>
-<!ELEMENT SPqcc (ReversibleStepSizeValue | QuantizationStepSizeValues )> <!-- TO DO: Irreversible choices -->
-<!-- /QuantizationComponent -->
-<!-- Don't know if MJ2 files can have regions of interest. Assume yes -->
-<!ELEMENT RegionOfInterest (Srgn,Crgn,Sprgn)> <!-- Optional in main header, at most 1 per component -->
-<!ATTLIST RegionOfInterest Marker CDATA #FIXED "RGN">
-<!ELEMENT Srgn (#PCDATA)> <!-- ROI style. Only style=0 defined: Implicit ROI (max. shift) -->
-<!ELEMENT Crgn (#PCDATA)> <!-- Zero-based component number. -->
-<!ELEMENT SPrgn (#PCDATA)> <!-- Implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->
-<!-- </RegionOfInterest> -->
-<!ELEMENT ProgressionOrderChange (Progression+)> <!-- Optional in main header, at most 1 per component (but impl allows more?) -->
-<!ATTLIST ProgressionOrderChange Marker CDATA #REQUIRED>
-<!ELEMENT Progression (RSpoc,CSpoc,LYEpoc,REpoc,CEpoc,Ppoc)>
-<!ATTLIST Progression Num CDATA #REQUIRED>
-<!ELEMENT RSpoc (#PCDATA)> <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->
-<!ELEMENT CSpoc (#PCDATA)> <!-- Component index (inclusive) for progression start. -->
-<!ELEMENT LYEpoc (#PCDATA)> <!-- Layer index (exclusive) for progression end. -->
-<!ELEMENT REpoc (#PCDATA)> <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->
-<!ELEMENT CEpoc (#PCDATA)> <!-- Component index (exclusive) for progression end. Minimum: CSpoc -->
-<!ELEMENT Ppoc (#PCDATA)> <!-- Defined Progression Order Values are: -->
- <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->
- <!-- where L = "layer", R = "resolution level", C = "component", P = "position". -->
-<!-- </Progression>, </ProgressionOrderChange -->
-<!-- /MainHeader -->
-<!ELEMENT TilePartHeaders (TilePartHeader+)>
-<!ATTLIST TilePartHeaders Count CDATA #REQUIRED>
-<!ELEMENT TilePartHeader (StartOfTilePart,CodingStyleDefault,QuantizationDefault,QuantizationComponent*,RegionOfInterest?,ProgressionOrderChange*,StartOfData)>
-<!ATTLIST TilePartHeader Num CDATA #REQUIRED>
-<!ATTLIST TilePartHeader ID CDATA #REQUIRED>
-<!ELEMENT StartOfTilePart EMPTY>
-<!ATTLIST StartOfTilePart Marker CDATA #FIXED "SOT">
-<!-- CodingStyleDefault, QuantizationDefault, QuantizationComponent already defined -->
- <!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->
- <!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->
-<!ELEMENT StartOfData EMPTY> <!-- always empty for now -->
-<!ATTLIST StartOfData Marker CDATA #FIXED "SOD">
- <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->
-<!-- /TilePartHeader, /TilePartHeaders, /JP2_Frame -->
-<!-- </Track> -->
-
-<!-- to come:
- <MovieExtends mvek> // possibly not in Simple Profile
- <UserDataBox udat> contains <CopyrightBox cprt>
- -->
-<!-- /MovieBox -->
-<!-- To come:
- <mdat>
- <moof> // probably not in Simple Profile
- <free>
- <skip>
- -->
-<!-- </MJ2_File> --> \ No newline at end of file
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata.h b/openjpeg/src/bin/mj2/mj2_to_metadata.h
deleted file mode 100644
index f4c34919..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* mj2_to_metadata.h */
-/* Dump MJ2, JP2 metadata (partial so far) to xml file */
-/* Contributed to Open JPEG by Glenn Pearson, U.S. National Library of Medicine */
-
-#define BOOL int
-#define FALSE 0
-#define TRUE 1
-
-#include "meta_out.h"
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata.sln b/openjpeg/src/bin/mj2/mj2_to_metadata.sln
deleted file mode 100644
index f579c536..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata.sln
+++ /dev/null
@@ -1,29 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mj2_to_metadata", "mj2_to_metadata.vcproj", "{69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}"
- ProjectSection(ProjectDependencies) = postProject
- {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD} = {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibOpenJPEG", "..\LibOpenJPEG.vcproj", "{0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.ActiveCfg = Debug|Win32
- {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Debug|Win32.Build.0 = Debug|Win32
- {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.ActiveCfg = Release|Win32
- {69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}.Release|Win32.Build.0 = Release|Win32
- {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.ActiveCfg = Debug|Win32
- {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Debug|Win32.Build.0 = Debug|Win32
- {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.ActiveCfg = Release|Win32
- {0B1B7713-35B6-40A7-9BFF-A7D0EB06A8BD}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata.vcproj b/openjpeg/src/bin/mj2/mj2_to_metadata.vcproj
deleted file mode 100644
index a8000f30..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata.vcproj
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="mj2_to_metadata"
- ProjectGUID="{69BE42AB-E7CE-4DA1-BBD2-39FEA2C91E0B}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\mj2_to_metadata___Win32_Debug0"
- IntermediateDirectory=".\mj2_to_metadata___Win32_Debug0"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../libopenjpeg"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;OPJ_STATIC;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- PrecompiledHeaderFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.pch"
- AssemblerListingLocation=".\mj2_to_metadata___Win32_Debug0/"
- ObjectFile=".\mj2_to_metadata___Win32_Debug0/"
- ProgramDataBaseFileName=".\mj2_to_metadata___Win32_Debug0/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="2057"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.exe"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="LIBCMT"
- GenerateDebugInformation="true"
- ProgramDatabaseFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\mj2_to_metadata___Win32_Debug0/mj2_to_metadata.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release"
- IntermediateDirectory=".\Release"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName=".\Release/mj2_to_metadata.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="../libopenjpeg"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;OPJ_STATIC;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/mj2_to_metadata.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="2057"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile=".\Release/mj2_to_metadata.exe"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="libcmtd"
- ProgramDatabaseFile=".\Release/mj2_to_metadata.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Release/mj2_to_metadata.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="MJ2"
- >
- <Filter
- Name="MJ2 Header Files"
- >
- <File
- RelativePath="compat\opj_getopt.h"
- >
- </File>
- <File
- RelativePath="meta_out.h"
- >
- </File>
- <File
- RelativePath="mj2.h"
- >
- </File>
- <File
- RelativePath="mj2_convert.h"
- >
- </File>
- <File
- RelativePath="mj2_to_metadata.h"
- >
- </File>
- </Filter>
- <Filter
- Name="MJ2 Source Files"
- >
- <File
- RelativePath="compat\opj_getopt.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="meta_out.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="mj2.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="mj2_convert.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="mj2_to_metadata.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/openjpeg/src/bin/mj2/mj2_to_metadata_Notes.doc b/openjpeg/src/bin/mj2/mj2_to_metadata_Notes.doc
deleted file mode 100644
index 05ccec20..00000000
--- a/openjpeg/src/bin/mj2/mj2_to_metadata_Notes.doc
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/mj2/opj_mj2_compress.c b/openjpeg/src/bin/mj2/opj_mj2_compress.c
deleted file mode 100644
index 4baefe67..00000000
--- a/openjpeg/src/bin/mj2/opj_mj2_compress.c
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2002-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "j2k_lib.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-#include "mj2_convert.h"
-#include "opj_getopt.h"
-
-/**
-Size of memory first allocated for MOOV box
-*/
-#define TEMP_BUF 10000
-
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-static void help_display()
-{
- fprintf(stdout, "HELP for frames_to_mj2\n----\n\n");
- fprintf(stdout, "- the -h option displays this help information on screen\n\n");
-
-
- fprintf(stdout, "List of parameters for the MJ2 encoder:\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "REMARKS:\n");
- fprintf(stdout, "---------\n");
- fprintf(stdout, "\n");
- fprintf
- (stdout, "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
- fprintf
- (stdout, "COD and QCD never appear in the tile_header.\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "By default:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, " * Lossless\n");
- fprintf(stdout, " * 1 tile\n");
- fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
- fprintf(stdout, " * Size of code-block : 64 x 64\n");
- fprintf(stdout, " * Number of resolutions: 6\n");
- fprintf(stdout, " * No SOP marker in the codestream\n");
- fprintf(stdout, " * No EPH marker in the codestream\n");
- fprintf(stdout, " * No sub-sampling in x or y direction\n");
- fprintf(stdout, " * No mode switch activated\n");
- fprintf(stdout, " * Progression order: LRCP\n");
- fprintf(stdout, " * No index file\n");
- fprintf(stdout, " * No ROI upshifted\n");
- fprintf(stdout, " * No offset of the origin of the image\n");
- fprintf(stdout, " * No offset of the origin of the tiles\n");
- fprintf(stdout, " * Reversible DWT 5-3\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Parameters:\n");
- fprintf(stdout, "------------\n");
- fprintf(stdout, "\n");
- fprintf
- (stdout, "Required Parameters (except with -h):\n");
- fprintf
- (stdout, "-i : source file (-i source.yuv) \n");
- fprintf
- (stdout, "-o : destination file (-o dest.mj2) \n");
- fprintf
- (stdout, "Optional Parameters:\n");
- fprintf(stdout, "-h : display the help information \n");
- fprintf(stdout,
- "-r : different compression ratios for successive layers (-r 20,10,5)\n");
- fprintf(stdout,
- " - The rate specified for each quality level is the desired \n");
- fprintf(stdout, " compression factor.\n");
- fprintf(stdout, " Example: -r 20,10,1 means quality 1: compress 20x, \n");
- fprintf(stdout,
- " quality 2: compress 10x and quality 3: compress lossless\n");
- fprintf(stdout, " (options -r and -q cannot be used together)\n");
-
- fprintf(stdout, "-q : different psnr for successive layers (-q 30,40,50) \n");
- fprintf(stdout, " (options -r and -q cannot be used together)\n");
-
- fprintf(stdout, "-n : number of resolutions (-n 3) \n");
- fprintf(stdout, "-b : size of code block (-b 32,32) \n");
- fprintf(stdout, "-c : size of precinct (-c 128,128) \n");
- fprintf(stdout, "-t : size of tile (-t 512,512) \n");
- fprintf
- (stdout, "-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
- fprintf
- (stdout, "-s : subsampling factor (-s 2,2) [-s X,Y] \n");
- fprintf(stdout, " Remark: subsampling bigger than 2 can produce error\n");
- fprintf
- (stdout, "-S : write SOP marker before each packet \n");
- fprintf
- (stdout, "-E : write EPH marker after each header packet \n");
- fprintf
- (stdout, "-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
- fprintf
- (stdout, " 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
- fprintf
- (stdout, " Indicate multiple modes by adding their values. \n");
- fprintf
- (stdout, " Example: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
- fprintf
- (stdout, "-R : c=%%d,U=%%d : quantization indices upshifted \n");
- fprintf
- (stdout, " for component c=%%d [%%d = 0,1,2]\n");
- fprintf
- (stdout, " with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
- fprintf
- (stdout, "-d : offset of the origin of the image (-d 150,300) \n");
- fprintf
- (stdout, "-T : offset of the origin of the tiles (-T 100,75) \n");
- fprintf(stdout, "-I : use the irreversible DWT 9-7 (-I) \n");
- fprintf(stdout, "-W : image width, height and the dx and dy subsampling \n");
- fprintf(stdout, " of the Cb and Cr components for YUV files \n");
- fprintf(stdout,
- " (default is '352,288,2,2' for CIF format's 352x288 and 4:2:0)\n");
- fprintf(stdout, "-F : video frame rate (set to 25 by default)\n");
- fprintf(stdout, "-D : depth, precision in bits [8 .. 16]; default:8\n");
- fprintf(stdout, "-C : comment\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "IMPORTANT:\n");
- fprintf(stdout, "-----------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "The index file has the structure below:\n");
- fprintf(stdout, "---------------------------------------\n");
- fprintf(stdout, "\n");
- fprintf(stdout, "Image_height Image_width\n");
- fprintf(stdout, "progression order\n");
- fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
- fprintf(stdout, "Components_nb\n");
- fprintf(stdout, "Layers_nb\n");
- fprintf(stdout, "decomposition_levels\n");
- fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
- fprintf(stdout, " [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
- fprintf(stdout, "Main_header_end_position\n");
- fprintf(stdout, "Codestream_size\n");
- fprintf(stdout,
- "Tile_0 start_pos end_Theader end_pos TotalDisto NumPix MaxMSE\n");
- fprintf(stdout,
- "Tile_1 '' '' '' '' '' ''\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tile_Nt '' '' '' '' '' ''\n");
- fprintf(stdout,
- "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
- fprintf(stdout, "...\n");
- fprintf(stdout,
- "Tpacket_Np '' '' '' '' '' '' '' ''\n");
-
- fprintf(stdout, "MaxDisto\n");
-
- fprintf(stdout, "TotalDisto\n\n");
-}
-
-static OPJ_PROG_ORDER give_progression(const char progression[5])
-{
- if (progression[0] == 'L' && progression[1] == 'R'
- && progression[2] == 'C' && progression[3] == 'P') {
- return LRCP;
- } else {
- if (progression[0] == 'R' && progression[1] == 'L'
- && progression[2] == 'C' && progression[3] == 'P') {
- return RLCP;
- } else {
- if (progression[0] == 'R' && progression[1] == 'P'
- && progression[2] == 'C' && progression[3] == 'L') {
- return RPCL;
- } else {
- if (progression[0] == 'P' && progression[1] == 'C'
- && progression[2] == 'R' && progression[3] == 'L') {
- return PCRL;
- } else {
- if (progression[0] == 'C' && progression[1] == 'P'
- && progression[2] == 'R' && progression[3] == 'L') {
- return CPRL;
- } else {
- return PROG_UNKNOWN;
- }
- }
- }
- }
- }
-}
-
-
-
-
-int main(int argc, char **argv)
-{
- mj2_cparameters_t mj2_parameters; /* MJ2 compression parameters */
- opj_cparameters_t *j2k_parameters; /* J2K compression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_cio_t *cio;
- int value;
- opj_mj2_t *movie;
- opj_image_t *img;
- int i, j;
- char *s, S1, S2, S3;
- unsigned char *buf;
- int x1, y1, len;
- long mdat_initpos, offset;
- FILE *mj2file;
- int sampleno;
- opj_cinfo_t* cinfo;
- opj_bool bSuccess;
- int numframes;
- int prec = 8;/* DEFAULT */
- double total_time = 0;
-
- memset(&mj2_parameters, 0, sizeof(mj2_cparameters_t));
- /* default value */
- /* ------------- */
- mj2_parameters.w = 352; /* CIF default value*/
- mj2_parameters.h = 288; /* CIF default value*/
- mj2_parameters.CbCr_subsampling_dx = 2; /* CIF default value*/
- mj2_parameters.CbCr_subsampling_dy = 2; /* CIF default value*/
- mj2_parameters.frame_rate = 25;
- mj2_parameters.prec = 8; /* DEFAULT */
- mj2_parameters.enumcs = ENUMCS_SYCC; /* FIXME: ENUMCS_YUV420 */
- mj2_parameters.meth = 1; /* enumerated color space */
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optionnal
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = NULL;
-
- /* set J2K encoding parameters to default values */
- opj_set_default_encoder_parameters(&mj2_parameters.j2k_parameters);
- j2k_parameters = &mj2_parameters.j2k_parameters;
-
- /* Create comment for codestream */
- if (j2k_parameters->cp_comment == NULL) {
- const char comment[] = "Created by OpenJPEG version ";
- const size_t clen = strlen(comment);
- const char *version = opj_version();
- j2k_parameters->cp_comment = (char*)malloc(clen + strlen(version) + 1);
- sprintf(j2k_parameters->cp_comment, "%s%s", comment, version);
- }
-
- while (1) {
- int c = opj_getopt(argc, argv,
- "i:o:r:q:f:t:n:c:b:p:s:d:P:S:E:M:R:T:C:I:W:F:D:h");
- if (c == -1) {
- break;
- }
- switch (c) {
- case 'i': { /* IN fill */
- char *infile = opj_optarg;
- s = opj_optarg;
- while (*s) {
- s++;
- }
- s--;
- S3 = *s;
- s--;
- S2 = *s;
- s--;
- S1 = *s;
-
- if ((S1 == 'y' && S2 == 'u' && S3 == 'v')
- || (S1 == 'Y' && S2 == 'U' && S3 == 'V')) {
- mj2_parameters.decod_format = YUV_DFMT;
- } else {
- fprintf(stderr,
- "!! Unrecognized format for infile : %c%c%c [accept only *.yuv] !!\n\n",
- S1, S2, S3);
- return 1;
- }
- strncpy(mj2_parameters.infile, infile, sizeof(mj2_parameters.infile) - 1);
- }
- break;
- /* ----------------------------------------------------- */
- case 'o': { /* OUT fill */
- char *outfile = opj_optarg;
- while (*outfile) {
- outfile++;
- }
- outfile--;
- S3 = *outfile;
- outfile--;
- S2 = *outfile;
- outfile--;
- S1 = *outfile;
-
- outfile = opj_optarg;
-
- if ((S1 == 'm' && S2 == 'j' && S3 == '2')
- || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
- mj2_parameters.cod_format = MJ2_CFMT;
- } else {
- fprintf(stderr,
- "Unknown output format image *.%c%c%c [only *.mj2]!! \n",
- S1, S2, S3);
- return 1;
- }
- strncpy(mj2_parameters.outfile, outfile, sizeof(mj2_parameters.outfile) - 1);
- }
- break;
- /* ----------------------------------------------------- */
- case 'r': { /* rates rates/distorsion */
- float rate;
- s = opj_optarg;
- while (sscanf(s, "%f", &rate) == 1) {
- j2k_parameters->tcp_rates[j2k_parameters->tcp_numlayers] = rate * 2;
- j2k_parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- j2k_parameters->cp_disto_alloc = 1;
- }
- break;
- /* ----------------------------------------------------- */
- case 'q': /* add fixed_quality */
- s = opj_optarg;
- while (sscanf(s, "%f",
- &j2k_parameters->tcp_distoratio[j2k_parameters->tcp_numlayers]) == 1) {
- j2k_parameters->tcp_numlayers++;
- while (*s && *s != ',') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- j2k_parameters->cp_fixed_quality = 1;
- break;
- /* dda */
- /* ----------------------------------------------------- */
- case 'f': { /* mod fixed_quality (before : -q) */
- int *row = NULL, *col = NULL;
- int numlayers = 0, numresolution = 0, matrix_width = 0;
-
- s = opj_optarg;
- sscanf(s, "%d", &numlayers);
- s++;
- if (numlayers > 9) {
- s++;
- }
-
- j2k_parameters->tcp_numlayers = numlayers;
- numresolution = j2k_parameters->numresolution;
- matrix_width = numresolution * 3;
- j2k_parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(
- int));
- s = s + 2;
-
- for (i = 0; i < numlayers; i++) {
- row = &j2k_parameters->cp_matrice[i * matrix_width];
- col = row;
- j2k_parameters->tcp_rates[i] = 1;
- sscanf(s, "%d,", &col[0]);
- s += 2;
- if (col[0] > 9) {
- s++;
- }
- col[1] = 0;
- col[2] = 0;
- for (j = 1; j < numresolution; j++) {
- col += 3;
- sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
- s += 6;
- if (col[0] > 9) {
- s++;
- }
- if (col[1] > 9) {
- s++;
- }
- if (col[2] > 9) {
- s++;
- }
- }
- if (i < numlayers - 1) {
- s++;
- }
- }
- j2k_parameters->cp_fixed_alloc = 1;
- }
- break;
- /* ----------------------------------------------------- */
- case 't': /* tiles */
- sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tdx, &j2k_parameters->cp_tdy);
- j2k_parameters->tile_size_on = OPJ_TRUE;
- break;
- /* ----------------------------------------------------- */
- case 'n': /* resolution */
- sscanf(opj_optarg, "%d", &j2k_parameters->numresolution);
- break;
- /* ----------------------------------------------------- */
- case 'c': { /* precinct dimension */
- char sep;
- int res_spec = 0;
-
- char *s = opj_optarg;
- do {
- sep = 0;
- sscanf(s, "[%d,%d]%c", &j2k_parameters->prcw_init[res_spec],
- &j2k_parameters->prch_init[res_spec], &sep);
- j2k_parameters->csty |= 0x01;
- res_spec++;
- s = strpbrk(s, "]") + 2;
- } while (sep == ',');
- j2k_parameters->res_spec = res_spec;
- }
- break;
-
- /* ----------------------------------------------------- */
- case 'b': { /* code-block dimension */
- int cblockw_init = 0, cblockh_init = 0;
- sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
- if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
- || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
- fprintf(stderr,
- "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
- " * width*height<=4096\n * 4<=width,height<= 1024\n\n");
- return 1;
- }
- j2k_parameters->cblockw_init = cblockw_init;
- j2k_parameters->cblockh_init = cblockh_init;
- }
- break;
- /* ----------------------------------------------------- */
- case 'p': { /* progression order */
- char progression[5];
-
- strncpy(progression, opj_optarg, 5);
- j2k_parameters->prog_order = give_progression(progression);
- if (j2k_parameters->prog_order == -1) {
- fprintf(stderr, "Unrecognized progression order "
- "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
- return 1;
- }
- }
- break;
- /* ----------------------------------------------------- */
- case 's': { /* subsampling factor */
- if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->subsampling_dx,
- &j2k_parameters->subsampling_dy) != 2) {
- fprintf(stderr, "'-s' sub-sampling argument error ! [-s dx,dy]\n");
- return 1;
- }
- }
- break;
- /* ----------------------------------------------------- */
- case 'd': { /* coordonnate of the reference grid */
- if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->image_offset_x0,
- &j2k_parameters->image_offset_y0) != 2) {
- fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
- "error !! [-d x0,y0]\n");
- return 1;
- }
- }
- break;
- /* ----------------------------------------------------- */
- case 'h': /* Display an help description */
- help_display();
- return 0;
- break;
- /* ----------------------------------------------------- */
- case 'P': { /* POC */
- int numpocs = 0; /* number of progression order change (POC) default 0 */
- opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */
-
- char *s = opj_optarg;
- POC = j2k_parameters->POC;
-
- while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
- &POC[numpocs].resno0, &POC[numpocs].compno0,
- &POC[numpocs].layno1, &POC[numpocs].resno1,
- &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
- POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
- numpocs++;
- while (*s && *s != '/') {
- s++;
- }
- if (!*s) {
- break;
- }
- s++;
- }
- j2k_parameters->numpocs = numpocs;
- }
- break;
- /* ------------------------------------------------------ */
- case 'S': /* SOP marker */
- j2k_parameters->csty |= 0x02;
- break;
- /* ------------------------------------------------------ */
- case 'E': /* EPH marker */
- j2k_parameters->csty |= 0x04;
- break;
- /* ------------------------------------------------------ */
- case 'M': /* Mode switch pas tous au point !! */
- if (sscanf(opj_optarg, "%d", &value) == 1) {
- for (i = 0; i <= 5; i++) {
- int cache = value & (1 << i);
- if (cache) {
- j2k_parameters->mode |= (1 << i);
- }
- }
- }
- break;
- /* ------------------------------------------------------ */
- case 'R': { /* ROI */
- if (sscanf(opj_optarg, "OI:c=%d,U=%d", &j2k_parameters->roi_compno,
- &j2k_parameters->roi_shift) != 2) {
- fprintf(stderr, "ROI error !! [-ROI:c='compno',U='shift']\n");
- return 1;
- }
- }
- break;
- /* ------------------------------------------------------ */
- case 'T': { /* Tile offset */
- if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tx0,
- &j2k_parameters->cp_ty0) != 2) {
- fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
- return 1;
- }
- }
- break;
- /* ------------------------------------------------------ */
- case 'C': { /* Add a comment */
- j2k_parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
- if (j2k_parameters->cp_comment) {
- strcpy(j2k_parameters->cp_comment, opj_optarg);
- }
- }
- break;
- /* ------------------------------------------------------ */
- case 'I': { /* reversible or not */
- j2k_parameters->irreversible = 1;
- }
- break;
- /* ------------------------------------------------------ */
- case 'W': /* Width and Height and Cb and Cr subsampling in case of YUV format files */
- if (sscanf
- (opj_optarg, "%d,%d,%d,%d", &mj2_parameters.w, &mj2_parameters.h,
- &mj2_parameters.CbCr_subsampling_dx,
- &mj2_parameters.CbCr_subsampling_dy) != 4) {
- fprintf(stderr, "-W argument error");
- return 1;
- }
- break;
- /* ------------------------------------------------------ */
- case 'F': /* Video frame rate */
- if (sscanf(opj_optarg, "%d", &mj2_parameters.frame_rate) != 1) {
- fprintf(stderr, "-F argument error");
- return 1;
- }
- break;
- /* ------------------------------------------------------ */
- case 'D': /* Depth: the precision */
- if (sscanf(opj_optarg, "%d", &prec) != 1) {
- prec = 0;
- }
- break;
-
- default:
- return 1;
- }
- }
-
- /* Error messages */
- /* -------------- */
- if (!mj2_parameters.cod_format || !mj2_parameters.decod_format) {
- fprintf(stderr,
- "Usage: %s -i yuv-file -o mj2-file (+ options)\n", argv[0]);
- return 1;
- }
- if (prec < 1 || prec > 16) {
- fprintf(stderr, "Error: Depth %d must be in the range 8 .. 16\n", prec);
- return 1;
- }
- if ((j2k_parameters->cp_disto_alloc || j2k_parameters->cp_fixed_alloc ||
- j2k_parameters->cp_fixed_quality)
- && (!(j2k_parameters->cp_disto_alloc ^ j2k_parameters->cp_fixed_alloc ^
- j2k_parameters->cp_fixed_quality))) {
- fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
- return 1;
- } /* mod fixed_quality */
-
- /* if no rate entered, lossless by default */
- if (j2k_parameters->tcp_numlayers == 0) {
- j2k_parameters->tcp_rates[0] = 0; /* MOD antonin : losslessbug */
- j2k_parameters->tcp_numlayers++;
- j2k_parameters->cp_disto_alloc = 1;
- }
-
- if ((j2k_parameters->cp_tx0 > j2k_parameters->image_offset_x0) ||
- (j2k_parameters->cp_ty0 > j2k_parameters->image_offset_y0)) {
- fprintf(stderr,
- "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
- j2k_parameters->cp_tx0, j2k_parameters->image_offset_x0, j2k_parameters->cp_ty0,
- j2k_parameters->image_offset_y0);
- return 1;
- }
-
- for (i = 0; i < j2k_parameters->numpocs; i++) {
- if (j2k_parameters->POC[i].prg == -1) {
- fprintf(stderr,
- "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
- i + 1);
- }
- }
-
- if (j2k_parameters->cp_tdx > mj2_parameters.Dim[0] ||
- j2k_parameters->cp_tdy > mj2_parameters.Dim[1]) {
- fprintf(stderr,
- "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
- j2k_parameters->cp_tdx, mj2_parameters.Dim[0], j2k_parameters->cp_tdy,
- mj2_parameters.Dim[1]);
- return 1;
- }
-
- /* to respect profile - 0 */
- /* ---------------------- */
-
- x1 = !mj2_parameters.Dim[0] ? (mj2_parameters.w - 1) *
- j2k_parameters->subsampling_dx
- + 1 : mj2_parameters.Dim[0] + (mj2_parameters.w - 1) *
- j2k_parameters->subsampling_dx + 1;
- y1 = !mj2_parameters.Dim[1] ? (mj2_parameters.h - 1) *
- j2k_parameters->subsampling_dy
- + 1 : mj2_parameters.Dim[1] + (mj2_parameters.h - 1) *
- j2k_parameters->subsampling_dy + 1;
- mj2_parameters.numcomps = 3; /* YUV files only have 3 components */
-
- mj2_parameters.prec = prec;
-
- j2k_parameters->tcp_mct = 0;
-
- mj2file = fopen(mj2_parameters.outfile, "wb");
-
- if (!mj2file) {
- fprintf(stderr, "failed to open %s for writing\n", argv[2]);
- return 1;
- }
-
- /* get a MJ2 decompressor handle */
- cinfo = mj2_create_compress();
- movie = (opj_mj2_t*)cinfo->mj2_handle;
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
- /* setup encoder parameters */
- mj2_setup_encoder(movie, &mj2_parameters);
-
- movie->tk[0].num_samples =
- yuv_num_frames(&movie->tk[0], mj2_parameters.infile);
-
- if (movie->tk[0].num_samples == 0) {
- return 1;
- }
-
- /* One sample per chunk*/
- movie->tk[0].chunk = (mj2_chunk_t*)
- malloc(movie->tk[0].num_samples * sizeof(mj2_chunk_t));
- movie->tk[0].sample = (mj2_sample_t*)
- malloc(movie->tk[0].num_samples * sizeof(mj2_sample_t));
-
- if (mj2_init_stdmovie(movie)) {
- fprintf(stderr, "Error with movie initialization");
- return 1;
- }
-
- /* Writing JP, FTYP and MDAT boxes */
- /* Assuming that the JP and FTYP boxes won't be longer than 300 bytes:*/
- buf = (unsigned char*)
- malloc(300 * sizeof(unsigned char));
-
- cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, 300);
-
- mj2_write_jp(cio);
- mj2_write_ftyp(movie, cio);
-
- mdat_initpos = cio_tell(cio);
- cio_skip(cio, 4);
-
- cio_write(cio, MJ2_MDAT, 4);
-
- fwrite(buf, cio_tell(cio), 1, mj2file);
-
- offset = cio_tell(cio);
- opj_cio_close(cio);
- free(buf);
-
- for (i = 0; i < movie->num_stk + movie->num_htk + movie->num_vtk; i++) {
- if (movie->tk[i].track_type != 0) {
- fprintf(stderr, "Unable to write sound or hint tracks\n");
- } else {
- mj2_tk_t *tk;
- int buflen = 0;
-
- tk = &movie->tk[i];
- tk->num_chunks = tk->num_samples;
- numframes = tk->num_samples;
- tk->depth = prec;
-
- fprintf(stderr, "Video Track number %d\n", i);
-
- img = mj2_image_create(tk, j2k_parameters);
-
- buflen = 2 * (tk->w * tk->h * 8);
- buf = (unsigned char *) malloc(buflen * sizeof(unsigned char));
-
- for (sampleno = 0; sampleno < numframes; sampleno++) {
- double init_time = opj_clock();
- double elapsed_time;
-
- if (yuvtoimage(tk, img, sampleno, j2k_parameters,
- mj2_parameters.infile)) {
- fprintf(stderr, "Error with frame number %d in YUV file\n", sampleno);
- return 1;
- }
-
- /* setup the encoder parameters using the current image and user parameters */
- opj_setup_encoder(cinfo, j2k_parameters, img);
-
- cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, buflen);
-
- cio_skip(cio, 4);
- cio_write(cio, JP2_JP2C, 4); /* JP2C*/
-
- /* encode the image */
- bSuccess = opj_encode(cinfo, cio, img, NULL);
-
- if (!bSuccess) {
- opj_cio_close(cio);
- fprintf(stderr, "failed to encode image\n");
- return 1;
- }
-
- len = cio_tell(cio) - 8;
- cio_seek(cio, 0);
- cio_write(cio, len + 8, 4);
- opj_cio_close(cio);
-
- tk->sample[sampleno].sample_size = len + 8;
- tk->sample[sampleno].offset = offset;
- tk->chunk[sampleno].offset = offset; /* There is one sample per chunk */
- fwrite(buf, 1, len + 8, mj2file);
- offset += len + 8;
-
- elapsed_time = opj_clock() - init_time;
- fprintf(stderr, "Frame number %d/%d encoded in %.2f mseconds\n",
- sampleno + 1, numframes, elapsed_time * 1000);
- total_time += elapsed_time;
- } /* for(sampleno */
-
- free(buf);
- opj_image_destroy(img);
- }
- }/* for(i */
-
- fseek(mj2file, mdat_initpos, SEEK_SET);
-
- buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
-
- /* Init a cio to write box length variable in a little endian way */
- cio = opj_cio_open(NULL, buf, 4);
- cio_write(cio, offset - mdat_initpos, 4);
- fwrite(buf, 4, 1, mj2file);
- fseek(mj2file, 0, SEEK_END);
- free(buf);
-
- /* Writing MOOV box */
- buf = (unsigned char*)
- malloc((TEMP_BUF + numframes * 20) * sizeof(unsigned char));
- cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + numframes * 20));
- mj2_write_moov(movie, cio);
- fwrite(buf, cio_tell(cio), 1, mj2file);
- free(buf);
-
- fprintf(stdout, "Total encoding time: %.2f s for %d frames (%.1f fps)\n",
- total_time, numframes, (float)numframes / total_time);
-
- /* Ending program */
-
- fclose(mj2file);
- /* free remaining compression structures */
- mj2_destroy_compress(movie);
- free(cinfo);
-
- if (j2k_parameters->cp_comment) {
- free(j2k_parameters->cp_comment);
- }
- if (j2k_parameters->cp_matrice) {
- free(j2k_parameters->cp_matrice);
- }
- opj_cio_close(cio);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/mj2/opj_mj2_decompress.c b/openjpeg/src/bin/mj2/opj_mj2_decompress.c
deleted file mode 100644
index 6b26d563..00000000
--- a/openjpeg/src/bin/mj2/opj_mj2_decompress.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
-* Copyright (c) 2003-2004, Francois-Olivier Devaux
-* Copyright (c) 2002-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "opj_apps_config.h"
-#include "openjpeg.h"
-#include "j2k_lib.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-#include "mj2_convert.h"
-
-#ifdef OPJ_HAVE_LIBLCMS2
-#include <lcms2.h>
-#endif
-#ifdef OPJ_HAVE_LIBLCMS1
-#include <lcms.h>
-#endif
-#include "color.h"
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-int main(int argc, char *argv[])
-{
- mj2_dparameters_t mj2_parameters; /* decompression parameters */
- opj_dinfo_t* dinfo;
- opj_event_mgr_t event_mgr; /* event manager */
- opj_cio_t *cio = NULL;
- unsigned int tnum, snum;
- opj_mj2_t *movie;
- mj2_tk_t *track;
- mj2_sample_t *sample;
- unsigned char* frame_codestream;
- FILE *file, *outfile;
- char outfilename[50];
- opj_image_t *img = NULL;
- unsigned int max_codstrm_size = 0;
- double total_time = 0;
- unsigned int numframes = 0;
-
- if (argc != 3) {
- printf("Usage: %s inputfile.mj2 outputfile.yuv\n", argv[0]);
- return 1;
- }
-
- file = fopen(argv[1], "rb");
-
- if (!file) {
- fprintf(stderr, "failed to open %s for reading\n", argv[1]);
- return 1;
- }
-
- /* Checking output file */
- outfile = fopen(argv[2], "w");
- if (!file) {
- fprintf(stderr, "failed to open %s for writing\n", argv[2]);
- return 1;
- }
- fclose(outfile);
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = NULL;
-
- /* get a MJ2 decompressor handle */
- dinfo = mj2_create_decompress();
- movie = (opj_mj2_t*)dinfo->mj2_handle;
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- memset(&mj2_parameters, 0, sizeof(mj2_dparameters_t));
- /* set J2K decoding parameters to default values */
- opj_set_default_decoder_parameters(&mj2_parameters.j2k_parameters);
-
- /* setup the decoder decoding parameters using user parameters */
- mj2_setup_decoder(movie, &mj2_parameters);
-
- if (mj2_read_struct(file, movie)) { /* Creating the movie structure */
- return 1;
- }
-
- /* Decode first video track */
- for (tnum = 0;
- tnum < (unsigned int)(movie->num_htk + movie->num_stk + movie->num_vtk);
- tnum++) {
- if (movie->tk[tnum].track_type == 0) {
- break;
- }
- }
-
- if (movie->tk[tnum].track_type != 0) {
- printf("Error. Movie does not contain any video track\n");
- return 1;
- }
-
- track = &movie->tk[tnum];
-
- /* Output info on first video tracl */
- fprintf(stdout,
- "The first video track contains %d frames.\nWidth: %d, Height: %d \n\n",
- track->num_samples, track->w, track->h);
-
- max_codstrm_size = track->sample[0].sample_size - 8;
- frame_codestream = (unsigned char*) malloc(max_codstrm_size * sizeof(
- unsigned char));
-
- numframes = track->num_samples;
-
- for (snum = 0; snum < numframes; snum++) {
- double init_time = opj_clock();
- double elapsed_time;
-
- sample = &track->sample[snum];
- if (sample->sample_size - 8 > max_codstrm_size) {
- max_codstrm_size = sample->sample_size - 8;
- if ((frame_codestream = (unsigned char*)
- realloc(frame_codestream, max_codstrm_size)) == NULL) {
- printf("Error reallocation memory\n");
- return 1;
- };
- }
- fseek(file, sample->offset + 8, SEEK_SET);
- fread(frame_codestream, sample->sample_size - 8, 1,
- file); /* Assuming that jp and ftyp markers size do */
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
- sample->sample_size - 8);
-
- img = opj_decode(dinfo, cio); /* Decode J2K to image */
-
-#ifdef WANT_SYCC_TO_RGB
- if (img->color_space == CLRSPC_SYCC) {
- color_sycc_to_rgb(img);
- }
-#endif
-
- if (img->icc_profile_buf) {
-#if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
- color_apply_icc_profile(img);
-#endif
-
- free(img->icc_profile_buf);
- img->icc_profile_buf = NULL;
- img->icc_profile_len = 0;
- }
-
- if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
- && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
- || (img->numcomps == 1)) {
-
- if (!imagetoyuv(img, argv[2])) { /* Convert image to YUV */
- return 1;
- }
- } else if ((img->numcomps == 3) &&
- (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
- (img->comps[2].dx == 1)) { /* If YUV 4:4:4 input --> to bmp */
- fprintf(stdout,
- "The frames will be output in a bmp format (output_1.bmp, ...)\n");
- sprintf(outfilename, "output_%d.bmp", snum);
- if (imagetobmp(img, outfilename)) { /* Convert image to BMP */
- return 1;
- }
-
- } else {
- fprintf(stdout,
- "Image component dimensions are unknown. Unable to output image\n");
- fprintf(stdout,
- "The frames will be output in a j2k file (output_1.j2k, ...)\n");
-
- sprintf(outfilename, "output_%d.j2k", snum);
- outfile = fopen(outfilename, "wb");
- if (!outfile) {
- fprintf(stderr, "failed to open %s for writing\n", outfilename);
- return 1;
- }
- fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
- fclose(outfile);
- }
- /* close the byte stream */
- opj_cio_close(cio);
- /* free image data structure */
- opj_image_destroy(img);
- elapsed_time = opj_clock() - init_time;
- fprintf(stderr, "Frame number %d/%d decoded in %.2f mseconds\n", snum + 1,
- numframes, elapsed_time * 1000);
- total_time += elapsed_time;
-
- }
-
- free(frame_codestream);
- fclose(file);
-
- /* free remaining structures */
- if (dinfo) {
- mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
- }
- free(dinfo);
-
- fprintf(stdout, "%d frame(s) correctly decompressed\n", snum);
- fprintf(stdout, "Total decoding time: %.2f seconds (%.1f fps)\n", total_time,
- (float)numframes / total_time);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/mj2/opj_mj2_extract.c b/openjpeg/src/bin/mj2/opj_mj2_extract.c
deleted file mode 100644
index a062e17d..00000000
--- a/openjpeg/src/bin/mj2/opj_mj2_extract.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openjpeg.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-
-/* -------------------------------------------------------------------------- */
-
-/**
-sample error callback expecting a FILE* client object
-*/
-void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting a FILE* client object
-*/
-void info_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-int main(int argc, char *argv[])
-{
- opj_dinfo_t* dinfo;
- opj_event_mgr_t event_mgr; /* event manager */
- int tnum;
- unsigned int snum;
- opj_mj2_t *movie;
- mj2_tk_t *track;
- mj2_sample_t *sample;
- unsigned char* frame_codestream;
- FILE *file, *outfile;
- char outfilename[50];
- mj2_dparameters_t parameters;
-
- if (argc != 3) {
- printf("Usage: %s mj2filename output_location\n", argv[0]);
- printf("Example: %s foreman.mj2 output/foreman\n", argv[0]);
- return 1;
- }
-
- file = fopen(argv[1], "rb");
-
- if (!file) {
- fprintf(stderr, "failed to open %s for reading\n", argv[1]);
- return 1;
- }
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* get a MJ2 decompressor handle */
- dinfo = mj2_create_decompress();
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- memset(&parameters, 0, sizeof(mj2_dparameters_t));
- movie = (opj_mj2_t*) dinfo->mj2_handle;
- mj2_setup_decoder(movie, &parameters);
-
- if (mj2_read_struct(file, movie)) { /* Creating the movie structure*/
- return 1;
- }
-
- /* Decode first video track */
- tnum = 0;
- while (movie->tk[tnum].track_type != 0) {
- tnum ++;
- }
-
- track = &movie->tk[tnum];
-
- fprintf(stdout, "Extracting %d frames from file...\n", track->num_samples);
-
- for (snum = 0; snum < track->num_samples; snum++) {
- sample = &track->sample[snum];
- frame_codestream = (unsigned char*) malloc(sample->sample_size -
- 8); /* Skipping JP2C marker*/
- fseek(file, sample->offset + 8, SEEK_SET);
- fread(frame_codestream, sample->sample_size - 8, 1,
- file); /* Assuming that jp and ftyp markers size do*/
-
- sprintf(outfilename, "%s_%05d.j2k", argv[2], snum);
- outfile = fopen(outfilename, "wb");
- if (!outfile) {
- fprintf(stderr, "failed to open %s for writing\n", outfilename);
- return 1;
- }
- fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
- fclose(outfile);
- free(frame_codestream);
- }
- fclose(file);
- fprintf(stdout, "%d frames correctly extracted\n", snum);
-
- /* free remaining structures */
- if (dinfo) {
- mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
- }
-
- return 0;
-}
diff --git a/openjpeg/src/bin/mj2/opj_mj2_wrap.c b/openjpeg/src/bin/mj2/opj_mj2_wrap.c
deleted file mode 100644
index 84a066e2..00000000
--- a/openjpeg/src/bin/mj2/opj_mj2_wrap.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openjpeg.h"
-#include "cio.h"
-#include "j2k.h"
-#include "jp2.h"
-#include "mj2.h"
-
-static int int_ceildiv(int a, int b)
-{
- return (a + b - 1) / b;
-}
-
-/**
-Size of memory first allocated for MOOV box
-*/
-#define TEMP_BUF 10000
-
-#define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51"
-
-/* -------------------------------------------------------------------------- */
-
-static int test_image(const char *fname, mj2_cparameters_t *cp)
-{
- FILE *reader;
- opj_image_t *image;
- unsigned char *src;
- opj_dinfo_t *dinfo;
- opj_cio_t *cio;
- opj_dparameters_t dparameters;
- int success;
- long src_len;
-
- success = 0;
-
- if ((reader = fopen(fname, "rb")) == NULL) {
- return success;
- }
-
- fseek(reader, 0, SEEK_END);
- src_len = ftell(reader);
- fseek(reader, 0, SEEK_SET);
- src = (unsigned char*) malloc(src_len);
- fread(src, 1, src_len, reader);
- fclose(reader);
-
- if (memcmp(src, J2K_CODESTREAM_MAGIC, 4) != 0) {
- free(src);
- return success;
- }
- memset(&dparameters, 0, sizeof(opj_dparameters_t));
-
- opj_set_default_decoder_parameters(&dparameters);
-
- dinfo = opj_create_decompress(CODEC_J2K);
-
- opj_setup_decoder(dinfo, &dparameters);
-
- cio = opj_cio_open((opj_common_ptr)dinfo, src, src_len);
-
- image = opj_decode(dinfo, cio);
-
- free(src);
- cio->buffer = NULL;
- opj_cio_close(cio);
-
- if (image == NULL) {
- goto fin;
- }
-
- cp->numcomps = image->numcomps;
- cp->w = image->comps[0].w;
- cp->h = image->comps[0].h;
- cp->prec = image->comps[0].prec;
-
- if (image->numcomps > 2) {
- if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 2)
- && (image->comps[2].dx == 2)
- && (image->comps[0].dy == 1)
- && (image->comps[1].dy == 2)
- && (image->comps[2].dy == 2)) { /* horizontal and vertical*/
- /* Y420*/
- cp->enumcs = ENUMCS_SYCC;
- cp->CbCr_subsampling_dx = 2;
- cp->CbCr_subsampling_dy = 2;
- } else if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 2)
- && (image->comps[2].dx == 2)
- && (image->comps[0].dy == 1)
- && (image->comps[1].dy == 1)
- && (image->comps[2].dy == 1)) { /* horizontal only*/
- /* Y422*/
- cp->enumcs = ENUMCS_SYCC;
- cp->CbCr_subsampling_dx = 2;
- cp->CbCr_subsampling_dy = 1;
- } else if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 1)
- && (image->comps[2].dx == 1)
- && (image->comps[0].dy == 1)
- && (image->comps[1].dy == 1)
- && (image->comps[2].dy == 1)) {
- /* Y444 or RGB */
-
- if (image->color_space == CLRSPC_SRGB) {
- cp->enumcs = ENUMCS_SRGB;
-
- /* cp->CbCr_subsampling_dx = 0; */
- /* cp->CbCr_subsampling_dy = 0; */
- } else {
- cp->enumcs = ENUMCS_SYCC;
-
- cp->CbCr_subsampling_dx = 1;
- cp->CbCr_subsampling_dy = 1;
- }
- } else {
- goto fin;
- }
- } else {
- cp->enumcs = ENUMCS_GRAY;
- /* cp->CbCr_subsampling_dx = 0; */
- /* cp->CbCr_subsampling_dy = 0; */
- }
- if (image->icc_profile_buf) {
- cp->meth = 2;
- free(image->icc_profile_buf);
- image->icc_profile_buf = NULL;
- } else {
- cp->meth = 1;
- }
-
- success = 1;
-fin:
- if (dinfo) {
- opj_destroy_decompress(dinfo);
- }
-
- if (image) {
- opj_image_destroy(image);
- }
-
- return success;
-}
-
-/**
-sample error callback expecting a FILE* client object
-*/
-static void error_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
-}
-/**
-sample warning callback expecting a FILE* client object
-*/
-static void warning_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
-}
-/**
-sample debug callback expecting a FILE* client object
-*/
-static void info_callback(const char *msg, void *client_data)
-{
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[INFO] %s", msg);
-}
-
-/* -------------------------------------------------------------------------- */
-
-
-
-static void read_siz_marker(FILE *file, opj_image_t *image)
-{
- int len, i;
- char buf, buf2[2];
- unsigned char *siz_buffer;
- opj_cio_t *cio;
-
- fseek(file, 0, SEEK_SET);
- do {
- fread(&buf, 1, 1, file);
- if (buf == (char)0xff) {
- fread(&buf, 1, 1, file);
- }
- } while (!(buf == (char)0x51));
-
- fread(buf2, 2, 1, file); /* Lsiz */
- len = ((buf2[0]) << 8) + buf2[1];
-
- siz_buffer = (unsigned char*) malloc(len * sizeof(unsigned char));
- fread(siz_buffer, len, 1, file);
- cio = opj_cio_open(NULL, siz_buffer, len);
-
- cio_read(cio, 2); /* Rsiz (capabilities) */
- image->x1 = cio_read(cio, 4); /* Xsiz */
- image->y1 = cio_read(cio, 4); /* Ysiz */
- image->x0 = cio_read(cio, 4); /* X0siz */
- image->y0 = cio_read(cio, 4); /* Y0siz */
- cio_skip(cio, 16); /* XTsiz, YTsiz, XT0siz, YT0siz */
-
- image->numcomps = cio_read(cio, 2); /* Csiz */
- image->comps =
- (opj_image_comp_t *) malloc(image->numcomps * sizeof(opj_image_comp_t));
-
- for (i = 0; i < image->numcomps; i++) {
- int tmp;
- tmp = cio_read(cio, 1); /* Ssiz_i */
- image->comps[i].prec = (tmp & 0x7f) + 1;
- image->comps[i].sgnd = tmp >> 7;
- image->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */
- image->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */
- image->comps[i].resno_decoded = 0; /* number of resolution decoded */
- image->comps[i].factor = 0; /* reducing factor by component */
- }
- fseek(file, 0, SEEK_SET);
- opj_cio_close(cio);
- free(siz_buffer);
-}
-
-static void setparams(opj_mj2_t *movie, opj_image_t *image)
-{
- int i, depth_0, depth, sign;
-
- movie->tk[0].w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
- movie->tk[0].h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
- mj2_init_stdmovie(movie);
-
- movie->tk[0].depth = image->comps[0].prec;
-
- if (image->numcomps == 3) {
- if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 1)
- && (image->comps[2].dx == 1)) {
- movie->tk[0].CbCr_subsampling_dx = 1;
- } else if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 2)
- && (image->comps[2].dx == 2)) {
- movie->tk[0].CbCr_subsampling_dx = 2;
- } else {
- fprintf(stderr, "Image component sizes are incoherent\n");
- }
-
- if ((image->comps[0].dy == 1)
- && (image->comps[1].dy == 1)
- && (image->comps[2].dy == 1)) {
- movie->tk[0].CbCr_subsampling_dy = 1;
- } else if ((image->comps[0].dy == 1)
- && (image->comps[1].dy == 2)
- && (image->comps[2].dy == 2)) {
- movie->tk[0].CbCr_subsampling_dy = 2;
- } else {
- fprintf(stderr, "Image component sizes are incoherent\n");
- }
- }
-
- movie->tk[0].sample_rate = 25;
-
- movie->tk[0].jp2_struct.numcomps = image->numcomps; /* NC */
-
- /* Init Standard jp2 structure */
-
- movie->tk[0].jp2_struct.comps =
- (opj_jp2_comps_t *) malloc(movie->tk[0].jp2_struct.numcomps * sizeof(
- opj_jp2_comps_t));
- movie->tk[0].jp2_struct.precedence = 0; /* PRECEDENCE*/
- movie->tk[0].jp2_struct.approx = 0; /* APPROX*/
- movie->tk[0].jp2_struct.brand = JP2_JP2; /* BR */
- movie->tk[0].jp2_struct.minversion = 0; /* MinV */
- movie->tk[0].jp2_struct.numcl = 1;
- movie->tk[0].jp2_struct.cl = (unsigned int *) malloc(
- movie->tk[0].jp2_struct.numcl * sizeof(int));
- movie->tk[0].jp2_struct.cl[0] = JP2_JP2; /* CL0 : JP2 */
- movie->tk[0].jp2_struct.C = 7; /* C : Always 7*/
- movie->tk[0].jp2_struct.UnkC =
- 0; /* UnkC, colorspace specified in colr box*/
- movie->tk[0].jp2_struct.IPR = 0; /* IPR, no intellectual property*/
- movie->tk[0].jp2_struct.w = int_ceildiv(image->x1 - image->x0,
- image->comps[0].dx);
- movie->tk[0].jp2_struct.h = int_ceildiv(image->y1 - image->y0,
- image->comps[0].dy);
-
- depth_0 = image->comps[0].prec - 1;
- sign = image->comps[0].sgnd;
- movie->tk[0].jp2_struct.bpc = depth_0 + (sign << 7);
-
- for (i = 1; i < image->numcomps; i++) {
- depth = image->comps[i].prec - 1;
- sign = image->comps[i].sgnd;
- if (depth_0 != depth) {
- movie->tk[0].jp2_struct.bpc = 255;
- }
- }
-
- for (i = 0; i < image->numcomps; i++)
- movie->tk[0].jp2_struct.comps[i].bpcc =
- image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-
- if ((image->numcomps == 1 || image->numcomps == 3)
- && (movie->tk[0].jp2_struct.bpc != 255)) {
- movie->tk[0].jp2_struct.meth = 1;
- } else {
- movie->tk[0].jp2_struct.meth = 2;
- }
-
- if (image->numcomps == 1) {
- movie->tk[0].jp2_struct.enumcs = 17; /* Grayscale */
- }
-
- else if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 1)
- && (image->comps[2].dx == 1)
- && (image->comps[0].dy == 1)
- && (image->comps[1].dy == 1)
- && (image->comps[2].dy == 1)) {
- movie->tk[0].jp2_struct.enumcs = 16; /* RGB */
- }
-
- else if ((image->comps[0].dx == 1)
- && (image->comps[1].dx == 2)
- && (image->comps[2].dx == 2)
- && (image->comps[0].dy == 1)
- && (image->comps[1].dy == 2)
- && (image->comps[2].dy == 2)) {
- movie->tk[0].jp2_struct.enumcs = 18; /* YUV */
- }
-
- else {
- movie->tk[0].jp2_struct.enumcs = 0; /* Unknown profile */
- }
-}
-
-int main(int argc, char *argv[])
-{
- opj_cinfo_t* cinfo;
- opj_event_mgr_t event_mgr; /* event manager */
- unsigned int snum;
- opj_mj2_t *movie;
- mj2_sample_t *sample;
- unsigned char* frame_codestream;
- FILE *mj2file, *j2kfile;
- char *j2kfilename;
- unsigned char *buf;
- int offset, mdat_initpos;
- opj_image_t img;
- opj_cio_t *cio;
- mj2_cparameters_t parameters;
-
- if (argc != 3) {
- printf("Usage: %s source_location mj2_filename\n", argv[0]);
- printf("Example: %s input/input output.mj2\n", argv[0]);
- return 1;
- }
-
- mj2file = fopen(argv[2], "wb");
-
- if (!mj2file) {
- fprintf(stderr, "failed to open %s for writing\n", argv[2]);
- return 1;
- }
- memset(&img, 0, sizeof(opj_image_t));
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = error_callback;
- event_mgr.warning_handler = warning_callback;
- event_mgr.info_handler = info_callback;
-
- /* get a MJ2 decompressor handle */
- cinfo = mj2_create_compress();
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
- /* setup the decoder encoding parameters using user parameters */
- memset(&parameters, 0, sizeof(mj2_cparameters_t));
- movie = (opj_mj2_t*) cinfo->mj2_handle;
-
- j2kfilename = (char*)malloc(strlen(argv[1]) + 12);/* max. '%6d' */
- sprintf(j2kfilename, "%s_00001.j2k", argv[1]);
-
- if (test_image(j2kfilename, &parameters) == 0) {
- goto fin;
- }
-
- parameters.frame_rate = 25; /* DEFAULT */
-
- mj2_setup_encoder(movie, &parameters);
-
-
- /* Writing JP, FTYP and MDAT boxes
- Assuming that the JP and FTYP boxes won't be longer than 300 bytes */
-
- buf = (unsigned char*) malloc(300 * sizeof(unsigned char));
- cio = opj_cio_open(movie->cinfo, buf, 300);
- mj2_write_jp(cio);
- mj2_write_ftyp(movie, cio);
- mdat_initpos = cio_tell(cio);
- cio_skip(cio, 4);
- cio_write(cio, MJ2_MDAT, 4);
- fwrite(buf, cio_tell(cio), 1, mj2file);
- free(buf);
-
- /* Insert each j2k codestream in a JP2C box */
- snum = 0;
- offset = 0;
- while (1) {
- mj2_sample_t * new_sample;
- mj2_chunk_t * new_chunk;
- sample = &movie->tk[0].sample[snum];
- sprintf(j2kfilename, "%s_%05d.j2k", argv[1], snum);
- j2kfile = fopen(j2kfilename, "rb");
- if (!j2kfile) {
- if (snum == 0) { /* Could not open a single codestream */
- fprintf(stderr, "failed to open %s for reading\n", j2kfilename);
- return 1;
- } else { /* Tried to open a inexistent codestream */
- fprintf(stdout, "%d frames are being added to the MJ2 file\n", snum);
- break;
- }
- }
-
- /* Calculating offset for samples and chunks */
- offset += cio_tell(cio);
- sample->offset = offset;
- movie->tk[0].chunk[snum].offset =
- offset; /* There will be one sample per chunk */
-
- /* Calculating sample size */
- fseek(j2kfile, 0, SEEK_END);
- sample->sample_size = ftell(j2kfile) +
- 8; /* Sample size is codestream + JP2C box header */
- fseek(j2kfile, 0, SEEK_SET);
-
- /* Reading siz marker of j2k image for the first codestream */
- if (snum == 0) {
- read_siz_marker(j2kfile, &img);
- }
-
- /* Writing JP2C box header */
- frame_codestream = (unsigned char*) malloc(sample->sample_size + 8);
- cio = opj_cio_open(movie->cinfo, frame_codestream, sample->sample_size);
- cio_write(cio, sample->sample_size, 4); /* Sample size */
- cio_write(cio, JP2_JP2C, 4); /* JP2C */
-
- /* Writing codestream from J2K file to MJ2 file */
- fread(frame_codestream + 8, sample->sample_size - 8, 1, j2kfile);
- fwrite(frame_codestream, sample->sample_size, 1, mj2file);
- cio_skip(cio, sample->sample_size - 8);
-
- /* Ending loop */
- fclose(j2kfile);
- snum++;
- new_sample = (mj2_sample_t*)
- realloc(movie->tk[0].sample, (snum + 1) * sizeof(mj2_sample_t));
- new_chunk = (mj2_chunk_t*)
- realloc(movie->tk[0].chunk, (snum + 1) * sizeof(mj2_chunk_t));
- if (new_sample && new_chunk) {
- movie->tk[0].sample = new_sample;
- movie->tk[0].chunk = new_chunk;
- } else {
- fprintf(stderr, "Failed to allocate enough memory to read %s\n", j2kfilename);
- return 1;
- }
- free(frame_codestream);
- }
-
- /* Writing the MDAT box length in header */
- offset += cio_tell(cio);
- buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
- cio = opj_cio_open(movie->cinfo, buf, 4);
- cio_write(cio, offset - mdat_initpos, 4);
- fseek(mj2file, (long)mdat_initpos, SEEK_SET);
- fwrite(buf, 4, 1, mj2file);
- fseek(mj2file, 0, SEEK_END);
- free(buf);
-
- /* Setting movie parameters */
- movie->tk[0].num_samples = snum;
- movie->tk[0].num_chunks = snum;
- setparams(movie, &img);
-
- /* Writing MOOV box */
- buf = (unsigned char*) malloc((TEMP_BUF + snum * 20) * sizeof(unsigned char));
- cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + snum * 20));
- mj2_write_moov(movie, cio);
- fwrite(buf, cio_tell(cio), 1, mj2file);
-
- /* Ending program */
- free(img.comps);
- opj_cio_close(cio);
-
-fin:
- fclose(mj2file);
- mj2_destroy_compress(movie);
- free(j2kfilename);
-
- return 0;
-}
diff --git a/openjpeg/src/bin/mj2/readme.txt b/openjpeg/src/bin/mj2/readme.txt
deleted file mode 100644
index 9419d2a2..00000000
--- a/openjpeg/src/bin/mj2/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Attention : the motion jpeg 2000 files currently only work with OpenJPEG v0.97 that you can find here :
-
-http://www.openjpeg.org/openjpeg_v097.tar.gz \ No newline at end of file
diff --git a/openjpeg/src/bin/wx/CMakeLists.txt b/openjpeg/src/bin/wx/CMakeLists.txt
deleted file mode 100644
index effb5b8d..00000000
--- a/openjpeg/src/bin/wx/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-if(BUILD_VIEWER)
- add_subdirectory(OPJViewer)
-endif()
diff --git a/openjpeg/src/bin/wx/OPJViewer/CMakeLists.txt b/openjpeg/src/bin/wx/OPJViewer/CMakeLists.txt
deleted file mode 100644
index 66cf01d2..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/CMakeLists.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-project(viewer CXX)
-
-find_package(wxWidgets REQUIRED)
-include(${wxWidgets_USE_FILE})
-
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}/../..
- ${CMAKE_CURRENT_SOURCE_DIR}/..
- ${OPENJPEG_SOURCE_DIR}/src/lib
- ${OPENJPEG_SOURCE_DIR}/src/bin
- ${OPENJPEG_SOURCE_DIR}/src/lib/openjp2
- ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h and opj_config_private.h
- )
-
-# original flags:
-# -DUSE_JPWL -DwxUSE_LIBOPENJPEG -DwxUSE_GUI=1 -DOPJ_STATIC -DOPJ_HTMLABOUT -DOPJ_INICONFIG -DUSE_JPSEC -DOPJ_MANYFORMATS
-add_definitions(-DwxUSE_LIBOPENJPEG -DOPENJPEG_VERSION="1.5.0")
-set(OPJV_SRCS
- ${CMAKE_CURRENT_SOURCE_DIR}/source/imagjpeg2000.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/wxj2kparser.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/OPJViewer.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/wxjp2parser.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/OPJDialogs.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/OPJThreads.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/OPJAbout.cpp
- ${OPENJPEG_SOURCE_DIR}/src/bin/jp2/index.c
- )
-add_executable(opjviewer ${OPJV_SRCS})
-target_link_libraries(opjviewer ${wxWidgets_LIBRARIES} openjpeg)
diff --git a/openjpeg/src/bin/wx/OPJViewer/OPJViewer.iss b/openjpeg/src/bin/wx/OPJViewer/OPJViewer.iss
deleted file mode 100644
index 0cf20da9..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/OPJViewer.iss
+++ /dev/null
@@ -1,48 +0,0 @@
-; Script generated by the Inno Setup Script Wizard.
-; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
-
-[Setup]
-AppName=OPJViewer
-AppVerName=OPJViewer 0.4 beta
-AppPublisher=OpenJPEG
-AppPublisherURL=http://www.openjpeg.org
-AppSupportURL=http://www.openjpeg.org
-AppUpdatesURL=http://www.openjpeg.org
-DefaultDirName={pf}\OPJViewer
-DefaultGroupName=OPJViewer
-OutputDir=setup
-OutputBaseFilename=OPJViewer04beta_setup
-Compression=lzma
-SolidCompression=true
-InfoBeforeFile=source\readmebefore.txt
-InfoAfterFile=source\readmeafter.txt
-LicenseFile=source\license.txt
-VersionInfoVersion=0.4.0.0
-VersionInfoCompany=OpenJPEG
-VersionInfoDescription=JPEG 2000 viewer
-ShowLanguageDialog=yes
-SetupIconFile=source\OPJViewer.ico
-
-[Languages]
-Name: english; MessagesFile: compiler:Default.isl
-
-[Tasks]
-Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
-
-[Files]
-Source: Release\OPJViewer.exe; DestDir: {app}; Flags: ignoreversion
-;Source: about\about.htm; DestDir: {app}/about; Flags: ignoreversion
-;Source: about\opj_logo.png; DestDir: {app}/about; Flags: ignoreversion
-; NOTE: Don't use "Flags: ignoreversion" on any shared system files
-
-[Icons]
-Name: {group}\OPJViewer; Filename: {app}\OPJViewer.exe; WorkingDir: {app}; IconIndex: 0
-Name: {group}\{cm:UninstallProgram,OPJViewer}; Filename: {uninstallexe}
-Name: {userdesktop}\OPJViewer; Filename: {app}\OPJViewer.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0
-
-[Run]
-Filename: {app}\OPJViewer.exe; Description: {cm:LaunchProgram,OPJViewer}; Flags: nowait postinstall skipifsilent; WorkingDir: {app}
-
-[Registry]
-Root: HKCU; Subkey: Software\OpenJPEG; ValueType: none; ValueData: 1; Flags: uninsdeletekey; Tasks: ; Languages:
-Root: HKCU; Subkey: Software\OpenJPEG\OPJViewer; ValueType: none; ValueData: 1; Flags: uninsdeletekey; Tasks: ; Languages:
diff --git a/openjpeg/src/bin/wx/OPJViewer/Readme.txt b/openjpeg/src/bin/wx/OPJViewer/Readme.txt
deleted file mode 100644
index fe104bbf..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/Readme.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-===============================================================================
- JPEG2000 Visualization Software - OPJViewer
-
- Version 0.4 beta
-===============================================================================
-
-
-1. Scope
-=============
-
-This document describes the installation and use of the OPJViewer in the framework of OpenJPEG library.
-
-This implementation has been developed using the OpenJPEG library as decoding engine and wxWidgets 2.8 as GUI engine.
-
-If you find some bugs or if you have problems using the viewer, please send an e-mail to jpwl@diei.unipg.it
-
-2. Installing the viewer
-==========================
-
-There are two options available, at the moment:
-
-a) compile from source code
-b) download a precompiled binary.
-
-In order to use option a), it is mandatory to have compiled and built the LibOpenJPEG_JPWL library and the wxWidgets 2.8 framework (you have to download it from http://www.wxwidgets.org/ and compile the wx* libraries).
-
-2.1. Compiling the source code in Windows
--------------------------------------------
-
-The steps required to compile the viewer under windows are:
-
-a) Download at least the libopenjpeg, jpwl, and opjviewer folders from the SVN trunk.
-b) Open the OPJViewer.dsw workspace with Visual C++ 6 and activate the "OPJViewer - Win32 Release" configuration.
-c) In the configuration settings, go to the C++ tab and modify the wxWidgets paths in order to reflect your wx* install configuration (Preprocessor -> Additional include directories): simply update each instance of the two wx paths, do not remove or add them.
-d) In the configuration settings, go to the Link tab and modify the wxWidgets path in order to reflect your wx* install configuration (Input -> Additional library path): simply update the wx path.
-e) In the configuration settings, go to the Resources tab and modify the wxWidgets path in order to reflect your wx* install configuration (Additional resource include directories): simply update the wx path.
-f) Build!
-g) Run!
-h) (OPTIONAL) Prepare an installer by compiling the InnoSetup script OPJViewer.iss (you need to download InnoSetup from http://www.jrsoftware.org/isinfo.php).
-
-2.1.1 Additional libraries
-----------------------------
-
-Since we are also working on the Digital Cinema JPEG 2000, we are integrating the viewer with the MXF library, which is used to prepare the DCPs for digital movies. You can enable its linking in the code by specifying the USE_MXF preprocessor directive but, remember, the integration is at a very early stage.
-
-2.2. Compiling the source code in Unix-like systems
------------------------------------------------------
-
-The porting is possible and under way.
-
-
-3. General information on the viewer
-====================================
-
-This viewer is conceived to open and display information and image content of J2K, JP2, and MJ2 files.
-The viewer application interface is divided into three main panels:
-- a browsing pane;
-- a viewing pane;
-- a log/peek pane.
-
-The browsing pane will present the markers or boxes hierarchy, with position (byte number where marker/box starts and stops) and length information (i.e., inner length as signalled by marker/box and total length, with marker/box sign included), in the following form:
-
-filename
-|
-|_ #000: Marker/Box short name (Hex code)
-| |
-| |_ *** Marker/Box long name ***
-| |_ startbyte > stopbyte, inner_length + marker/box sign length (total length)
-| |_ Additional info, depending on the marker/box type
-| |_ ...
-|
-|_ #001: Marker/Box short name (Hex code)
-| |
-| |_ ...
-|
-...
-
-
-The viewing pane will display the decoded image contained in the JPEG 2000 file.
-It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working.
-
-
-The log/peek pane is shared among two different subpanels:
-
-- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library
-- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section.
-
-
-4. Known bugs and limitations
-===============================
-
-4.1. Bugs
------------
-
-*
-
-4.2. Limitations
-------------------
-
-* For mj2 files, rendering is only in B/W
diff --git a/openjpeg/src/bin/wx/OPJViewer/about/about.htm b/openjpeg/src/bin/wx/OPJViewer/about/about.htm
deleted file mode 100644
index cdde9773..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/about/about.htm
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<body bgcolor="#FFFFFF">
-<table cellspacing=7 cellpadding=1 border=0 width="100%">
-<tr>
-<td rowspan=3 valign=top align=center width=70>
-<img src="opj_logo.png"><br><br>
-</td>
-<td align=center>
-<font size=+2 color="#000000"><b>OPJViewer v0.2 alpha</b></font><br>
-<font size=+0 color="#000000"><b>A JPEG 2000 image viewer</b></font>
-</td>
-</tr>
-<tr height=3 valign=center>
-<td valign=center bgcolor=#cc3300></td>
-</tr>
-<tr>
-<td align=justify>
-<center><font size=+0 color="#000000"><a href="http://www.openjpeg.org/">OpenJPEG</a></font></center>
-<font size=-1 color="#000000">The OpenJPEG library is an open-source JPEG 2000 codec written in C language.
-In addition to the basic codec, various other features are under development,
-among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool
-useful for the JPIP protocol, JPWL-tools for error-resilience, ...</font>
-</td>
-</tr>
-<tr>
-<td colspan=2 bgcolor="#CC3300" height=3 valign=center></td>
-</tr>
-<tr>
-<td colspan=2>
-<font size=-2 color="#444444">OpenJPEG is &copy; 2002-2007 <a href="http://www.tele.ucl.ac.be/">TELE</a> - <a href="http://www.uclouvain.be/">Universit Catholique de Louvain</a></font><br>
-<font size=-2 color="#444444">OPJViewer is also &copy; 2005-2007 <a href="http://dsplab.diei.unipg.it/">DSPLab</a> - <a href="http://www.unipg.it/">Universit degli studi di Perugia</a></font>
-</td>
-</tr>
-</table>
-</body>
-</html>
diff --git a/openjpeg/src/bin/wx/OPJViewer/about/opj_logo.png b/openjpeg/src/bin/wx/OPJViewer/about/opj_logo.png
deleted file mode 100644
index 0f43840a..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/about/opj_logo.png
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJAbout.cpp b/openjpeg/src/bin/wx/OPJViewer/source/OPJAbout.cpp
deleted file mode 100644
index 1f701e26..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJAbout.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifdef USE_MXF
-#include "mxflib/mxflib.h"
-#endif // USE_MXF
-
-#include "OPJViewer.h"
-
-// about window for the frame
-void OPJFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
-{
-#ifdef OPJ_HTMLABOUT
-#include "about_htm.h"
-#include "opj_logo.xpm"
-
- wxBoxSizer *topsizer;
- wxHtmlWindow *html;
- wxDialog dlg(this, wxID_ANY, wxString(_("About")));
-
- wxMemoryFSHandler::AddFile(wxT("opj_logo.xpm"), wxBitmap(opj_logo), wxBITMAP_TYPE_XPM);
-
- topsizer = new wxBoxSizer(wxVERTICAL);
-
- html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(320, 250), wxHW_SCROLLBAR_NEVER);
- html->SetBorders(0);
- //html->LoadPage(wxT("about/about.htm"));
- //html->SetPage("<html><body>Hello, world!</body></html>");
- html->SetPage(htmlaboutpage);
- html->SetSize(html->GetInternalRepresentation()->GetWidth(),
- html->GetInternalRepresentation()->GetHeight());
-
- topsizer->Add(html, 1, wxALL, 10);
-
- topsizer->Add(new wxStaticLine(&dlg, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
-
- wxButton *bu1 = new wxButton(&dlg, wxID_OK, wxT("OK"));
- bu1->SetDefault();
-
- topsizer->Add(bu1, 0, wxALL | wxALIGN_RIGHT, 15);
-
- dlg.SetSizer(topsizer);
- topsizer->Fit(&dlg);
-
- dlg.ShowModal();
-
-#else
-
- wxMessageBox(wxString::Format(OPJ_APPLICATION_TITLEBAR
- wxT("\n\n")
- wxT("Built with %s and OpenJPEG ")
- wxT(OPENJPEG_VERSION)
- wxT("\non ") wxT(__DATE__) wxT(", ") wxT(__TIME__)
- wxT("\nRunning under %s\n\n")
- OPJ_APPLICATION_COPYRIGHT,
- wxVERSION_STRING,
- wxGetOsDescription().c_str()),
- wxT("About ") OPJ_APPLICATION_NAME,
- wxOK | wxICON_INFORMATION,
- this
- );
-
-#endif
-
-}
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJChild.ico b/openjpeg/src/bin/wx/OPJViewer/source/OPJChild.ico
deleted file mode 100644
index 7a127189..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJChild.ico
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJChild16.xpm b/openjpeg/src/bin/wx/OPJViewer/source/OPJChild16.xpm
deleted file mode 100644
index 99b7b2cf..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJChild16.xpm
+++ /dev/null
@@ -1,28 +0,0 @@
-/* XPM */
-static char *OPJChild16[] = {
-/* columns rows colors chars-per-pixel */
-"16 16 6 1",
-" c black",
-". c #008000",
-"X c red",
-"o c #800080",
-"O c gray100",
-"+ c None",
-/* pixels */
-"++++++++++++++++",
-"+OOOOOOOOOOOOOO+",
-"+OooooooooooooO+",
-"+OooooooooooooO+",
-"+OooOOOOOOOOOoO+",
-"+OooO.......OoO+",
-"+OooO.......OoO+",
-"+OooO..OOO..OoO+",
-"+OooO..OXO..OoO+",
-"+OooO..OOO..OoO+",
-"+OooO.......OoO+",
-"+OooO.......OoO+",
-"+OooOOOOOOOOOoO+",
-"+OooooooooooooO+",
-"+OOOOOOOOOOOOOO+",
-"++++++++++++++++"
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJDialogs.cpp b/openjpeg/src/bin/wx/OPJViewer/source/OPJDialogs.cpp
deleted file mode 100644
index 953cb7ea..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJDialogs.cpp
+++ /dev/null
@@ -1,1378 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "OPJViewer.h"
-
-// ----------------------------------------------------------------------------
-// OPJDecoderDialog
-// ----------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)
-
-BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)
- EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)
-#ifdef USE_JPWL
- EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)
-#endif // USE_JPWL
-END_EVENT_TABLE()
-
-OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)
-{
- SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
-
- Create(win, wxID_ANY, wxT("Decoder settings"),
- wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
- );
-
- CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
-
- m_settingsNotebook = GetBookCtrl();
-
- wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
- wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- jpeg2000Settings->Enable(false);
- wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- mjpeg2000Settings->Enable(false);
-#ifdef USE_JPWL
- wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- jpwlSettings->Enable(false);
-#endif // USE_JPWL
-
- m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);
- m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);
- m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);
-#ifdef USE_JPWL
- m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
-#endif // USE_JPWL
-
- LayoutDialog();
-}
-
-OPJDecoderDialog::~OPJDecoderDialog()
-{
-}
-
-wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // add decoding enabling check box
- subtopSizer->Add(
- m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);
-
- // add parsing enabling check box
- subtopSizer->Add(
- m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enableparseCheck->SetValue(wxGetApp().m_enableparse);
-
- // resize settings, column
- wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};
- m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,
- wxT("Resize method"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(choices),
- choices,
- 1,
- wxRA_SPECIFY_ROWS);
- m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);
-
- subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // frame settings, column
- wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));
- wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);
-
- // selected frame number, row
- wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- framenumSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- framenumSizer->Add(
- m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,
- wxString::Format(wxT("%d"), wxGetApp().m_framenum),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_framenum),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // resolutions settings, column
- wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));
- wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);
-
- // reduce factor sizer, row
- wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- reduceSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- reduceSizer->Add(
- m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,
- wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 10000, wxGetApp().m_reducefactor),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);
-
- // quality layer settings, column
- wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));
- wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
-
- // quality layers sizer, row
- wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- qualitySizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- qualitySizer->Add(
- m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,
- wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 100000, wxGetApp().m_qualitylayers),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);
-
- // component settings, column
- wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
- wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
-
- // quality layers sizer, row
- wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- numcompsSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- numcompsSizer->Add(
- m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,
- wxString::Format(wxT("%d"), wxGetApp().m_components),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 100000, wxGetApp().m_components),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_numcompsCtrl->Enable(true);
-
- compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-#ifdef USE_JPWL
-wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // add JPWL enabling check box
- subtopSizer->Add(
- m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);
-
- // component settings, column
- wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
- wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
-
- // expected components sizer, row
- wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- expcompsSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- expcompsSizer->Add(
- m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,
- wxString::Format(wxT("%d"), wxGetApp().m_expcomps),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_expcomps),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);
-
- compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
-
- // tiles settings, column
- wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
- wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
-
- // maximum tiles sizer, row
- wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- maxtileSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- maxtileSizer->Add(
- m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,
- wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_maxtiles),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);
-
- tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("JPWL enabled"));
- m_expcompsCtrl->Enable(true);
- m_maxtilesCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("JPWL disabled"));
- m_expcompsCtrl->Enable(false);
- m_maxtilesCtrl->Enable(false);
- }
-
-}
-
-#endif // USE_JPWL
-
-void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)
-{
- size_t pp;
-
- if (event.IsChecked()) {
- wxLogMessage(wxT("Decoding enabled"));
- m_resizeBox->Enable(true);
- // enable all tabs except ourselves
- for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
- if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
- m_settingsNotebook->GetPage(pp)->Enable(true);
- }
- } else {
- wxLogMessage(wxT("Decoding disabled"));
- m_resizeBox->Enable(false);
- // disable all tabs except ourselves
- for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
- if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
- m_settingsNotebook->GetPage(pp)->Enable(false);
- }
- }
-
-}
-
-
-
-
-// ----------------------------------------------------------------------------
-// OPJEncoderDialog
-// ----------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)
-
-BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)
- EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)
- EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)
- EVT_CHECKBOX(OPJENCO_ENABLEPOC, OPJEncoderDialog::OnEnablePoc)
- EVT_RADIOBUTTON(OPJENCO_RATERADIO, OPJEncoderDialog::OnRadioQualityRate)
- EVT_RADIOBUTTON(OPJENCO_QUALITYRADIO, OPJEncoderDialog::OnRadioQualityRate)
-#ifdef USE_JPWL
- EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)
- EVT_CHOICE(OPJENCO_HPROT, OPJEncoderDialog::OnHprotSelect)
- EVT_CHOICE(OPJENCO_PPROT, OPJEncoderDialog::OnPprotSelect)
- EVT_CHOICE(OPJENCO_SENSI, OPJEncoderDialog::OnSensiSelect)
-#endif // USE_JPWL
-END_EVENT_TABLE()
-
-OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)
-{
- SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
-
- Create(win, wxID_ANY, wxT("Encoder settings"),
- wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
- );
-
- CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
-
- m_settingsNotebook = GetBookCtrl();
-
- wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook);
- wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook);
- wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
-#ifdef USE_JPWL
- wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
-#endif // USE_JPWL
-
-#ifdef USE_JPWL
- m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
-#endif // USE_JPWL
- m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false);
- m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false);
- m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);
-
- LayoutDialog();
-}
-
-OPJEncoderDialog::~OPJEncoderDialog()
-{
-}
-
-wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-#ifdef USE_JPWL
-wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
- int specno;
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add JPWL enabling check box
- topSizer->Add(
- m_enablejpwlCheck = new wxCheckBox(panel, OPJENCO_ENABLEJPWL, wxT("Enable JPWL"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL | wxALIGN_CENTER, 5);
- m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwle);
-
- // sub top sizer
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
-
- // header settings, column
- wxStaticBox* headerBox = new wxStaticBox(panel, wxID_ANY, wxT("Header protection"));
- wxBoxSizer* headerSizer = new wxStaticBoxSizer(headerBox, wxVERTICAL);
-
- // info sizer, row
- wxBoxSizer* info1Sizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- info1Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Type")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- // add some horizontal space
- info1Sizer->Add(3, 3, 1, wxALL, 0);
-
- // add some text
- info1Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Tile part")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- headerSizer->Add(info1Sizer, 0, wxGROW | wxALL, 0);
-
- // specify specs
- wxString hprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"),
- wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"),
- wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"),
- wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")};
- for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {
-
- // tile+hprot sizer, row
- wxBoxSizer* tilehprotSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add the value selection
- tilehprotSizer->Add(
- m_hprotChoice[specno] = new wxChoice(panel, OPJENCO_HPROT,
- wxDefaultPosition, wxSize(60, wxDefaultCoord),
- WXSIZEOF(hprotvalues), hprotvalues),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
- m_hprotChoice[specno]->SetSelection(wxGetApp().m_hprotsel[specno]);
-
- // add some horizontal space
- tilehprotSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilehprotSizer->Add(
- m_htileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_HTILE,
- wxString::Format(wxT("%d"), wxGetApp().m_htileval[specno]),
- wxDefaultPosition, wxSize(45, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, JPWL_MAXIMUM_TILES - 1, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
-
- headerSizer->Add(tilehprotSizer, 0, wxGROW | wxALL, 0);
- }
-
- wxCommandEvent event1;
- OnHprotSelect(event1);
-
- subtopSizer->Add(headerSizer, 0, wxGROW | wxALL, 3);
-
- // packet settings, column
- wxStaticBox* packetBox = new wxStaticBox(panel, wxID_ANY, wxT("Packet protection"));
- wxBoxSizer* packetSizer = new wxStaticBoxSizer(packetBox, wxVERTICAL);
-
- // info sizer, row
- wxBoxSizer* info2Sizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- info2Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Type")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- // add some horizontal space
- info2Sizer->Add(3, 3, 1, wxALL, 0);
-
- // add some text
- info2Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Tile part")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- // add some horizontal space
- info2Sizer->Add(3, 3, 1, wxALL, 0);
-
- // add some text
- info2Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Packet")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- packetSizer->Add(info2Sizer, 0, wxGROW | wxALL, 0);
-
- // specify specs
- wxString pprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"),
- wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"),
- wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"),
- wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")};
- for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {
-
- // tile+pprot sizer, row
- wxBoxSizer* tilepprotSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add the value selection
- tilepprotSizer->Add(
- m_pprotChoice[specno] = new wxChoice(panel, OPJENCO_PPROT,
- wxDefaultPosition, wxSize(60, wxDefaultCoord),
- WXSIZEOF(pprotvalues), pprotvalues),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
- m_pprotChoice[specno]->SetSelection(wxGetApp().m_pprotsel[specno]);
-
- // add some horizontal space
- tilepprotSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilepprotSizer->Add(
- m_ptileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PTILE,
- wxString::Format(wxT("%d"), wxGetApp().m_ptileval[specno]),
- wxDefaultPosition, wxSize(45, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, JPWL_MAXIMUM_TILES - 1, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
-
- // add some horizontal space
- tilepprotSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilepprotSizer->Add(
- m_ppackCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PPACK,
- wxString::Format(wxT("%d"), wxGetApp().m_ppackval[specno]),
- wxDefaultPosition, wxSize(50, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 2047, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
-
- packetSizer->Add(tilepprotSizer, 0, wxGROW | wxALL, 0);
- }
-
- wxCommandEvent event2;
- OnPprotSelect(event2);
-
- subtopSizer->Add(packetSizer, 0, wxGROW | wxALL, 3);
-
- // sensitivity settings, column
- wxStaticBox* sensiBox = new wxStaticBox(panel, wxID_ANY, wxT("Sensitivity"));
- wxBoxSizer* sensiSizer = new wxStaticBoxSizer(sensiBox, wxVERTICAL);
-
- // info sizer, row
- wxBoxSizer* info3Sizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- info3Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Type")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- // add some horizontal space
- info3Sizer->Add(3, 3, 1, wxALL, 0);
-
- // add some text
- info3Sizer->Add(new wxStaticText(panel, wxID_ANY,
- wxT("Tile part")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);
-
- sensiSizer->Add(info3Sizer, 0, wxGROW | wxALL, 0);
-
- // specify specs
- wxString sensivalues[] = {wxT("None"), wxT("RELATIVE ERROR"), wxT("MSE"),
- wxT("MSE REDUCTION"), wxT("PSNR INCREMENT"), wxT("MAXERR"), wxT("TSE")};
- for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {
-
- // tile+sensi sizer, row
- wxBoxSizer* tilesensiSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add the value selection
- tilesensiSizer->Add(
- m_sensiChoice[specno] = new wxChoice(panel, OPJENCO_SENSI,
- wxDefaultPosition, wxSize(110, wxDefaultCoord),
- WXSIZEOF(sensivalues), sensivalues),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
- m_sensiChoice[specno]->SetSelection(wxGetApp().m_sensisel[specno]);
-
- // add some horizontal space
- tilesensiSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilesensiSizer->Add(
- m_stileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_STILE,
- wxString::Format(wxT("%d"), wxGetApp().m_stileval[specno]),
- wxDefaultPosition, wxSize(45, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, JPWL_MAXIMUM_TILES - 1, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);
-
- sensiSizer->Add(tilesensiSizer, 0, wxGROW | wxALL, 0);
- }
-
- wxCommandEvent event3;
- OnSensiSelect(event3);
-
- subtopSizer->Add(sensiSizer, 0, wxGROW | wxALL, 3);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-#endif // USE_JPWL
-
-wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
-
- // image settings, column
- wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));
- wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);
-
- // subsampling factor sizer, row
- wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- subsSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- subsSizer->Add(
- m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,
- wxGetApp().m_subsampling,
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);
-
- // origin sizer, row
- wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- imorigSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- imorigSizer->Add(
- m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,
- wxGetApp().m_origin,
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);
-
- // layer settings, column
- wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));
- wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
-
- // rate factor sizer, row
- wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- /*rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/
-
- // add the radio button
- rateSizer->Add(
- m_rateRadio = new wxRadioButton(panel, OPJENCO_RATERADIO, wxT("&Rate values"),
- wxDefaultPosition, wxDefaultSize,
- wxRB_GROUP),
- 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL
- );
- m_rateRadio->SetValue(!(wxGetApp().m_enablequality));
-
- // add some horizontal space
- rateSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- rateSizer->Add(
- m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,
- wxGetApp().m_rates,
- wxDefaultPosition, wxSize(100, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- if (wxGetApp().m_enablequality == true)
- m_rateCtrl->Enable(false);
-
- layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);
-
- // quality factor sizer, row
- wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- /*qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/
-
- // add the radio button
- qualitySizer->Add(
- m_qualityRadio = new wxRadioButton(panel, OPJENCO_QUALITYRADIO, wxT("&Quality values"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL
- );
- m_qualityRadio->SetValue(wxGetApp().m_enablequality);
-
- // add some horizontal space
- qualitySizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- qualitySizer->Add(
- m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,
- wxGetApp().m_quality,
- wxDefaultPosition, wxSize(100, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- if (wxGetApp().m_enablequality == false)
- m_qualityCtrl->Enable(false);
-
- layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);
-
- // wavelet settings, column
- wxStaticBox* transformBox = new wxStaticBox(panel, wxID_ANY, wxT("Transforms"));
- wxBoxSizer* transformSizer = new wxStaticBoxSizer(transformBox, wxVERTICAL);
-
- // multiple component check box
- transformSizer->Add(
- m_mctCheck = new wxCheckBox(panel, OPJENCO_ENABLEMCT, wxT("Multiple component"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_mctCheck->SetValue(wxGetApp().m_multicomp);
-
- // irreversible wavelet check box
- transformSizer->Add(
- m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible wavelet"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_irrevCheck->SetValue(wxGetApp().m_irreversible);
-
- // resolution number sizer, row
- wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- resnumSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- resnumSizer->Add(
- m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,
- wxString::Format(wxT("%d"), wxGetApp().m_resolutions),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 256, 6),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- transformSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(transformSizer, 0, wxGROW | wxALL, 3);
-
- // codestream settings, column
- wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));
- wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);
-
- // codeblock sizer, row
- wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- codeblockSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- codeblockSizer->Add(
- m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,
- wxGetApp().m_cbsize,
- wxDefaultPosition, wxSize(100, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);
-
- // precinct sizer, row
- wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- precinctSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- precinctSizer->Add(
- m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,
- wxGetApp().m_prsize,
- wxDefaultPosition, wxSize(100, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);
-
- // tile settings, column
- wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
- wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
-
- // tile size sizer, row
- wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- tilesizeSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilesizeSizer->Add(
- m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,
- wxGetApp().m_tsize,
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);
-
- // tile origin sizer, row
- wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- tilorigSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilorigSizer->Add(
- m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,
- wxGetApp().m_torigin,
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);
-
- // progression and profile settings, column
- wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"),
- wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")};
- progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,
- wxT("Progression order/profile"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(choices),
- choices,
- 3,
- wxRA_SPECIFY_COLS);
- progressionBox->SetSelection(wxGetApp().m_progression);
-
- subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
-
- // resilience settings, column
- wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience"));
- wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);
-
- // resil2 sizer, row
- wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);
-
- // SOP check box
- resil2Sizer->Add(
- m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_sopCheck->SetValue(wxGetApp().m_enablesop);
-
- // EPH check box
- resil2Sizer->Add(
- m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_ephCheck->SetValue(wxGetApp().m_enableeph);
-
- resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);
-
- // separation
- resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);
-
- // resil3 sizer, row
- wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);
-
- // BYPASS check box
- resil3Sizer->Add(
- m_enablebypassCheck = new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablebypassCheck->SetValue(wxGetApp().m_enablebypass);
-
- // RESET check box
- resil3Sizer->Add(
- m_enableresetCheck = new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enableresetCheck->SetValue(wxGetApp().m_enablereset);
-
- // RESTART check box
- resil3Sizer->Add(
- m_enablerestartCheck = new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablerestartCheck->SetValue(wxGetApp().m_enablerestart);
-
- // VSC check box
- resil3Sizer->Add(
- m_enablevscCheck = new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablevscCheck->SetValue(wxGetApp().m_enablevsc);
-
- // ERTERM check box
- resil3Sizer->Add(
- m_enableertermCheck = new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enableertermCheck->SetValue(wxGetApp().m_enableerterm);
-
- // SEGMARK check box
- resil3Sizer->Add(
- m_enablesegmarkCheck = new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablesegmarkCheck->SetValue(wxGetApp().m_enablesegmark);
-
- resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);
-
- // ROI settings, column
- wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));
- wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);
-
- // component number sizer, row
- wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- roicompSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- roicompSizer->Add(
- /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,
- wxT("0"),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 256, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);
-
- // upshift sizer, row
- wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- roishiftSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- roishiftSizer->Add(
- /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,
- wxT("0"),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 37, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);
-
- // POC settings, column
- wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC"));
- wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL);
-
- // POC check box
- pocSizer->Add(
- m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled (tn=rs,cs,le,re,ce,pr)"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablepocCheck->SetValue(wxGetApp().m_enablepoc);
-
- // POC sizer, row
- wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")),
- 0, wxALL | wxALIGN_TOP, 3);
-
- // add some horizontal space
- pocspecSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- pocspecSizer->Add(
- m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC,
- wxGetApp().m_poc,
- wxDefaultPosition, wxSize(140, 60),
- wxTE_LEFT | wxTE_MULTILINE),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_pocCtrl->Enable(wxGetApp().m_enablepoc);
-
- pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3);
-
- // Comment settings, column
- wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));
- wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);
-
- // commenting check box
- commentSizer->Add(
- m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled (empty to reset)"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);
-
- // add some horizontal space
- commentSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- commentSizer->Add(
- m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,
- wxGetApp().m_comment,
- wxDefaultPosition, wxSize(wxDefaultCoord, 60),
- wxTE_LEFT | wxTE_MULTILINE),
- 0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_commentCtrl->Enable(wxGetApp().m_enablecomm);
-
- subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3);
-
- // Index file settings, column
- wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));
- wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);
-
- // indexing check box
- indexSizer->Add(
- m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enableidxCheck->SetValue(wxGetApp().m_enableidx);
-
- // index file sizer, row
- wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- indexnameSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- indexnameSizer->Add(
- m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,
- wxGetApp().m_index,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_indexCtrl->Enable(wxGetApp().m_enableidx);
-
- indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("Comment enabled"));
- m_commentCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("Comment disabled"));
- m_commentCtrl->Enable(false);
- }
-
-}
-
-void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("Index enabled"));
- m_indexCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("Index disabled"));
- m_indexCtrl->Enable(false);
- }
-
-}
-
-void OPJEncoderDialog::OnEnablePoc(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("POC enabled"));
- m_pocCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("POC disabled"));
- m_pocCtrl->Enable(false);
- }
-
-}
-
-void OPJEncoderDialog::OnRadioQualityRate(wxCommandEvent& event)
-{
- if (event.GetId() == OPJENCO_QUALITYRADIO) {
- wxLogMessage(wxT("Quality selected"));
- m_rateCtrl->Enable(false);
- m_qualityCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("Rate selected"));
- m_rateCtrl->Enable(true);
- m_qualityCtrl->Enable(false);
- }
-}
-
-#ifdef USE_JPWL
-void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)
-{
- int specno;
-
- if (event.IsChecked()) {
- wxLogMessage(wxT("JPWL enabled"));
- for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {
- m_hprotChoice[specno]->Enable(true);
- m_htileCtrl[specno]->Enable(true);
- m_pprotChoice[specno]->Enable(true);
- m_ptileCtrl[specno]->Enable(true);
- m_ppackCtrl[specno]->Enable(true);
- m_sensiChoice[specno]->Enable(true);
- m_stileCtrl[specno]->Enable(true);
- }
- OnHprotSelect(event);
- OnPprotSelect(event);
- OnSensiSelect(event);
- } else {
- wxLogMessage(wxT("JPWL disabled"));
- for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {
- m_hprotChoice[specno]->Enable(false);
- m_htileCtrl[specno]->Enable(false);
- m_pprotChoice[specno]->Enable(false);
- m_ptileCtrl[specno]->Enable(false);
- m_ppackCtrl[specno]->Enable(false);
- m_sensiChoice[specno]->Enable(false);
- m_stileCtrl[specno]->Enable(false);
- }
- }
-
-}
-
-void OPJEncoderDialog::OnHprotSelect(wxCommandEvent& event)
-{
- int specno;
-
- // deactivate properly
- for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {
- if (!m_hprotChoice[specno]->GetSelection()) {
- m_hprotChoice[specno]->Enable(false);
- m_htileCtrl[specno]->Enable(false);
- } else
- break;
- }
- if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {
- m_hprotChoice[specno + 1]->Enable(true);
- m_htileCtrl[specno + 1]->Enable(true);
- }
-
- //wxLogMessage(wxT("hprot changed: %d"), specno);
-}
-
-void OPJEncoderDialog::OnPprotSelect(wxCommandEvent& event)
-{
- int specno;
-
- // deactivate properly
- for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {
- if (!m_pprotChoice[specno]->GetSelection()) {
- m_pprotChoice[specno]->Enable(false);
- m_ptileCtrl[specno]->Enable(false);
- m_ppackCtrl[specno]->Enable(false);
- } else
- break;
- }
- if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {
- m_pprotChoice[specno + 1]->Enable(true);
- m_ptileCtrl[specno + 1]->Enable(true);
- m_ppackCtrl[specno + 1]->Enable(true);
- }
-
- //wxLogMessage(wxT("pprot changed: %d"), specno);
-}
-
-void OPJEncoderDialog::OnSensiSelect(wxCommandEvent& event)
-{
- int specno;
-
- // deactivate properly
- for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {
- if (!m_sensiChoice[specno]->GetSelection()) {
- m_sensiChoice[specno]->Enable(false);
- m_stileCtrl[specno]->Enable(false);
- } else
- break;
- }
- if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {
- m_sensiChoice[specno + 1]->Enable(true);
- m_stileCtrl[specno + 1]->Enable(true);
- }
-
- //wxLogMessage(wxT("sprot changed: %d"), specno);
-}
-
-
-#endif // USE_JPWL
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJThreads.cpp b/openjpeg/src/bin/wx/OPJViewer/source/OPJThreads.cpp
deleted file mode 100644
index 90a9206e..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJThreads.cpp
+++ /dev/null
@@ -1,1293 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "OPJViewer.h"
-
-
-/////////////////////////////////////////////////////////////////////
-// Encoding thread class
-/////////////////////////////////////////////////////////////////////
-
-OPJEncoThread::OPJEncoThread(OPJCanvas *canvas)
- : wxThread()
-{
- m_count = 0;
- m_canvas = canvas;
-}
-
-void OPJEncoThread::WriteText(const wxString& text)
-{
- wxString msg;
-
- // before doing any GUI calls we must ensure that this thread is the only
- // one doing it!
-
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif // __WXGTK__
-
- msg << text;
- m_canvas->WriteText(msg);
-
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif // __WXGTK__
-}
-
-void OPJEncoThread::OnExit()
-{
- wxCriticalSectionLocker locker(wxGetApp().m_enco_critsect);
-
- wxArrayThread& ethreads = wxGetApp().m_enco_threads;
- ethreads.Remove(this);
-
- if (ethreads.IsEmpty()) {
- // signal the main thread that there are no more threads left if it is
- // waiting for us
- if (wxGetApp().m_enco_waitingUntilAllDone) {
- wxGetApp().m_enco_waitingUntilAllDone = false;
- wxGetApp().m_enco_semAllDone.Post();
- }
- }
-}
-
-void *OPJEncoThread::Entry()
-{
- wxString text;
-
- srand(GetId());
- //int m_countnum = rand() % 9;
- //text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."),
- // GetId(), GetPriority(), m_countnum);
- text.Printf(wxT("Enco thread %d started"), m_canvas->m_childframe->m_winnumber);
- WriteText(text);
-
- // set handler properties
- wxJPEG2000Handler *jpeg2000handler = (wxJPEG2000Handler *) wxImage::FindHandler(
- wxBITMAP_TYPE_JPEG2000);
- jpeg2000handler->m_subsampling = wxGetApp().m_subsampling;
- jpeg2000handler->m_origin = wxGetApp().m_origin;
- jpeg2000handler->m_rates = wxGetApp().m_rates;
- jpeg2000handler->m_quality = wxGetApp().m_quality;
- jpeg2000handler->m_enablequality = wxGetApp().m_enablequality;
- jpeg2000handler->m_multicomp = wxGetApp().m_multicomp;
- jpeg2000handler->m_irreversible = wxGetApp().m_irreversible;
- jpeg2000handler->m_resolutions = wxGetApp().m_resolutions;
- jpeg2000handler->m_progression = wxGetApp().m_progression;
- jpeg2000handler->m_cbsize = wxGetApp().m_cbsize;
- jpeg2000handler->m_prsize = wxGetApp().m_prsize;
- jpeg2000handler->m_tsize = wxGetApp().m_tsize;
- jpeg2000handler->m_torigin = wxGetApp().m_torigin;
- jpeg2000handler->m_enablesop = wxGetApp().m_enablesop;
- jpeg2000handler->m_enableeph = wxGetApp().m_enableeph;
- jpeg2000handler->m_enablebypass = wxGetApp().m_enablebypass;
- jpeg2000handler->m_enablerestart = wxGetApp().m_enablerestart;
- jpeg2000handler->m_enablereset = wxGetApp().m_enablereset;
- jpeg2000handler->m_enablesegmark = wxGetApp().m_enablesegmark;
- jpeg2000handler->m_enableerterm = wxGetApp().m_enableerterm;
- jpeg2000handler->m_enablevsc = wxGetApp().m_enablevsc;
- jpeg2000handler->m_enableidx = wxGetApp().m_enableidx;
- jpeg2000handler->m_index = m_canvas->m_savename.GetPath(
- wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) + wxGetApp().m_index;
- jpeg2000handler->m_enablecomm = wxGetApp().m_enablecomm;
- jpeg2000handler->m_comment = wxGetApp().m_comment;
- jpeg2000handler->m_enablepoc = wxGetApp().m_enablepoc;
- jpeg2000handler->m_poc = wxGetApp().m_poc;
-
- // save the file
- if (!m_canvas->m_image100.SaveFile(m_canvas->m_savename.GetFullPath(),
- (wxBitmapType) wxBITMAP_TYPE_JPEG2000)) {
- WriteText(wxT("Can't save image"));
- return NULL;
- }
-
- text.Printf(wxT("Enco thread %d finished"),
- m_canvas->m_childframe->m_winnumber);
- WriteText(text);
- return NULL;
-}
-
-
-/////////////////////////////////////////////////////////////////////
-// Decoding thread class
-/////////////////////////////////////////////////////////////////////
-OPJDecoThread::OPJDecoThread(OPJCanvas *canvas)
- : wxThread()
-{
- m_count = 0;
- m_canvas = canvas;
-}
-
-void OPJDecoThread::WriteText(const wxString& text)
-{
- wxString msg;
-
- // we use a fake event and post it for inter-thread gui communication
- wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_THREADLOGMSG);
- event.SetInt(-1);
- msg << text;
- event.SetString(msg);
- wxPostEvent(this->m_canvas->m_childframe->m_frame, event);
-
- /*
- // before doing any GUI calls we must ensure that this thread is the only
- // one doing it!
-
- #ifndef __WXGTK__
- wxMutexGuiEnter();
- #endif // __WXGTK__
-
- msg << text;
- m_canvas->WriteText(msg);
-
- #ifndef __WXGTK__
- wxMutexGuiLeave();
- #endif // __WXGTK__
- */
-}
-
-void OPJDecoThread::OnExit()
-{
- wxCriticalSectionLocker locker(wxGetApp().m_deco_critsect);
-
- wxArrayThread& dthreads = wxGetApp().m_deco_threads;
- dthreads.Remove(this);
-
- if (dthreads.IsEmpty()) {
- // signal the main thread that there are no more threads left if it is
- // waiting for us
- if (wxGetApp().m_deco_waitingUntilAllDone) {
- wxGetApp().m_deco_waitingUntilAllDone = false;
- wxGetApp().m_deco_semAllDone.Post();
- }
- }
-}
-
-void *OPJDecoThread::Entry()
-{
-
- wxString text;
-
- //srand(GetId());
- //int m_countnum = rand() % 9;
- //text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."),
- // GetId(), GetPriority(), m_countnum);
-
- // we have started
- text.Printf(wxT("Deco thread %d started"), m_canvas->m_childframe->m_winnumber);
- WriteText(text);
-
- // prepare dummy wximage
- wxBitmap bitmap(100, 100);
- wxImage image(100, 100, true); //= bitmap.ConvertToImage();
- image.Destroy();
-
- // show image full name
- WriteText(m_canvas->m_fname.GetFullPath());
-
- // set handler properties
- wxJPEG2000Handler *jpeg2000handler = (wxJPEG2000Handler *) wxImage::FindHandler(
- wxBITMAP_TYPE_JPEG2000);
- jpeg2000handler->m_reducefactor = wxGetApp().m_reducefactor;
- jpeg2000handler->m_qualitylayers = wxGetApp().m_qualitylayers;
- jpeg2000handler->m_components = wxGetApp().m_components;
- jpeg2000handler->m_framenum = wxGetApp().m_framenum;
-#ifdef USE_JPWL
- jpeg2000handler->m_enablejpwl = wxGetApp().m_enablejpwl;
- jpeg2000handler->m_expcomps = wxGetApp().m_expcomps;
- jpeg2000handler->m_maxtiles = wxGetApp().m_maxtiles;
-#endif // USE_JPWL
-
-#ifdef USE_MXF
- wxMXFHandler *mxfffhandler = (wxMXFHandler *) wxImage::FindHandler(
- wxBITMAP_TYPE_MXF);
- mxfffhandler->m_reducefactor = wxGetApp().m_reducefactor;
- mxfffhandler->m_qualitylayers = wxGetApp().m_qualitylayers;
- mxfffhandler->m_components = wxGetApp().m_components;
- mxfffhandler->m_framenum = wxGetApp().m_framenum;
- mxfffhandler->m_filename = m_canvas->m_fname;
-#ifdef USE_JPWL
- mxfffhandler->m_enablejpwl = wxGetApp().m_enablejpwl;
- mxfffhandler->m_expcomps = wxGetApp().m_expcomps;
- mxfffhandler->m_maxtiles = wxGetApp().m_maxtiles;
-#endif // USE_JPWL
-#endif // USE_MXF
-
- // if decoding is enabled...
- if (wxGetApp().m_enabledeco) {
-
- // load the file
- if (!image.LoadFile(m_canvas->m_fname.GetFullPath(), wxBITMAP_TYPE_ANY, 0)) {
- WriteText(wxT("Can't load image!"));
- return NULL;
- }
-
- } else {
-
- // display a warning
- if (!image.Create(300, 5, false)) {
- WriteText(wxT("Can't create image!"));
- return NULL;
- }
-
- }
-
- // assign 100% image
- m_canvas->m_image100 = wxBitmap(image);
-
- // signal the frame to refresh the canvas
- wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_VIEWFIT);
- event.SetString(wxT("Fit me"));
- event.SetInt(m_canvas->m_childframe->m_winnumber);
- wxPostEvent(m_canvas->m_childframe->m_frame, event);
-
- // find a fit-to-width zoom
- /*int zooml, wzooml, hzooml;
- wxSize clientsize = m_canvas->GetClientSize();
- wzooml = (int) floor(100.0 * (double) clientsize.GetWidth() / (double) (2 * OPJ_CANVAS_BORDER + image.GetWidth()));
- hzooml = (int) floor(100.0 * (double) clientsize.GetHeight() / (double) (2 * OPJ_CANVAS_BORDER + image.GetHeight()));
- zooml = wxMin(100, wxMin(wzooml, hzooml));*/
-
- // fit to width
-#ifndef __WXGTK__
- //m_canvas->m_childframe->m_frame->Rescale(zooml, m_canvas->m_childframe);
-#endif // __WXGTK__
-
- //m_canvas->m_image = m_canvas->m_image100;
- //m_canvas->Refresh();
- //m_canvas->SetScrollbars(20, 20, (int)(0.5 + (double) image.GetWidth() / 20.0), (int)(0.5 + (double) image.GetHeight() / 20.0));
-
- //text.Printf(wxT("Deco thread 0x%lx finished."), GetId());
- text.Printf(wxT("Deco thread %d finished"),
- m_canvas->m_childframe->m_winnumber);
- WriteText(text);
- return NULL;
-
-}
-
-/////////////////////////////////////////////////////////////////////
-// Parsing thread class
-/////////////////////////////////////////////////////////////////////
-
-OPJParseThread::OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid)
- : wxThread()
-{
- m_count = 0;
- m_tree = tree;
- m_parentid = parentid;
-}
-
-void OPJParseThread::WriteText(const wxString& text)
-{
- wxString msg;
-
- // we use a fake event and post it for inter-thread gui communication
- wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, OPJFRAME_THREADLOGMSG);
- event.SetInt(-1);
- msg << text;
- event.SetString(msg);
- wxPostEvent(this->m_tree->m_childframe->m_frame, event);
-
- /* // before doing any GUI calls we must ensure that this thread is the only
- // one doing it!
-
- #ifndef __WXGTK__
- wxMutexGuiEnter();
- #endif // __WXGTK
-
- msg << text;
- m_tree->WriteText(msg);
-
- #ifndef __WXGTK__
- wxMutexGuiLeave();
- #endif // __WXGTK*/
-}
-
-void OPJParseThread::OnExit()
-{
- wxCriticalSectionLocker locker(wxGetApp().m_parse_critsect);
-
- wxArrayThread& threads = wxGetApp().m_parse_threads;
- threads.Remove(this);
-
- if (threads.IsEmpty()) {
- // signal the main thread that there are no more threads left if it is
- // waiting for us
- if (wxGetApp().m_parse_waitingUntilAllDone) {
- wxGetApp().m_parse_waitingUntilAllDone = false;
- wxGetApp().m_parse_semAllDone.Post();
- }
- }
-}
-
-void *OPJParseThread::Entry()
-{
-
- printf("Entering\n\n");
-
- wxString text;
-
- srand(GetId());
- int m_countnum = rand() % 9;
- text.Printf(wxT("Parse thread 0x%lx started (priority = %u, time = %d)."),
- GetId(), GetPriority(), m_countnum);
- WriteText(text);
- LoadFile(m_tree->m_fname);
- text.Printf(wxT("Parse thread 0x%lx finished."), GetId());
- WriteText(text);
-
-
- //wxLogMessage(wxT("Entering\n")); //test wxLog thread safeness
-
- //wxBusyCursor wait;
- //wxBusyInfo wait(wxT("Decoding image ..."));
-
-
- /*for ( m_count = 0; m_count < m_countnum; m_count++ )
- {
- // check if we were asked to exit
- if ( TestDestroy() )
- break;
-
- text.Printf(wxT("[%u] Parse thread 0x%lx here."), m_count, GetId());
- WriteText(text);
-
- // wxSleep() can't be called from non-GUI thread!
- wxThread::Sleep(10);
- }*/
-
- // wxLogMessage(text); -- test wxLog thread safeness
-
- printf("Exiting\n\n");
-
- return NULL;
-}
-
-
-///////////////////////////////////////////
-// Parsing hread and related
-///////////////////////////////////////////
-
-#if USE_GENERIC_TREECTRL
-BEGIN_EVENT_TABLE(OPJMarkerTree, wxGenericTreeCtrl)
-#else
- BEGIN_EVENT_TABLE(OPJMarkerTree, wxTreeCtrl)
-#endif
- /*EVT_TREE_BEGIN_DRAG(TreeTest_Ctrl, OPJMarkerTree::OnBeginDrag)
- EVT_TREE_BEGIN_RDRAG(TreeTest_Ctrl, OPJMarkerTree::OnBeginRDrag)
- EVT_TREE_END_DRAG(TreeTest_Ctrl, OPJMarkerTree::OnEndDrag)*/
- /*EVT_TREE_BEGIN_LABEL_EDIT(TreeTest_Ctrl, OPJMarkerTree::OnBeginLabelEdit)
- EVT_TREE_END_LABEL_EDIT(TreeTest_Ctrl, OPJMarkerTree::OnEndLabelEdit)*/
- /*EVT_TREE_DELETE_ITEM(TreeTest_Ctrl, OPJMarkerTree::OnDeleteItem)*/
-#if 0 // there are so many of those that logging them causes flicker
- /*EVT_TREE_GET_INFO(TreeTest_Ctrl, OPJMarkerTree::OnGetInfo)*/
-#endif
- /*EVT_TREE_SET_INFO(TreeTest_Ctrl, OPJMarkerTree::OnSetInfo)
- EVT_TREE_ITEM_EXPANDED(TreeTest_Ctrl, OPJMarkerTree::OnItemExpanded)*/
- EVT_TREE_ITEM_EXPANDING(TreeTest_Ctrl, OPJMarkerTree::OnItemExpanding)
- /*EVT_TREE_ITEM_COLLAPSED(TreeTest_Ctrl, OPJMarkerTree::OnItemCollapsed)
- EVT_TREE_ITEM_COLLAPSING(TreeTest_Ctrl, OPJMarkerTree::OnItemCollapsing)*/
-
- EVT_TREE_SEL_CHANGED(TreeTest_Ctrl, OPJMarkerTree::OnSelChanged)
- /*EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, OPJMarkerTree::OnSelChanging)*/
- /*EVT_TREE_KEY_DOWN(TreeTest_Ctrl, OPJMarkerTree::OnTreeKeyDown)*/
- /*EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, OPJMarkerTree::OnItemActivated)*/
-
- // so many different ways to handle right mouse button clicks...
- /*EVT_CONTEXT_MENU(OPJMarkerTree::OnContextMenu)*/
- // EVT_TREE_ITEM_MENU is the preferred event for creating context menus
- // on a tree control, because it includes the point of the click or item,
- // meaning that no additional placement calculations are required.
- EVT_TREE_ITEM_MENU(TreeTest_Ctrl, OPJMarkerTree::OnItemMenu)
- /*EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl, OPJMarkerTree::OnItemRClick)*/
-
- /*EVT_RIGHT_DOWN(OPJMarkerTree::OnRMouseDown)
- EVT_RIGHT_UP(OPJMarkerTree::OnRMouseUp)
- EVT_RIGHT_DCLICK(OPJMarkerTree::OnRMouseDClick)*/
-END_EVENT_TABLE()
-
-// OPJMarkerTree implementation
-#if USE_GENERIC_TREECTRL
-IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxGenericTreeCtrl)
-#else
-IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxTreeCtrl)
-#endif
-
-OPJMarkerTree::OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe,
- wxFileName fname, wxString name, const wxWindowID id,
- const wxPoint& pos, const wxSize& size, long style)
- : wxTreeCtrl(parent, id, pos, size, style)
-{
- m_reverseSort = false;
- m_fname = fname;
-
- m_peektextCtrl = ((OPJFrame *)(
- parent->GetParent()->GetParent()))->m_textCtrlbrowse;
- CreateImageList();
-
- // Add some items to the tree
- //AddTestItemsToTree(5, 5);
- int image = wxGetApp().ShowImages() ? OPJMarkerTree::TreeCtrlIcon_Folder : -1;
- wxTreeItemId rootId = AddRoot(name,
- image, image,
- new OPJMarkerData(name));
-
- OPJParseThread *pthread = CreateParseThread(0x00, subframe);
- if (pthread->Run() != wxTHREAD_NO_ERROR) {
- wxLogMessage(wxT("Can't start parse thread!"));
- } else {
- wxLogMessage(wxT("New parse thread started."));
- }
-
- m_childframe = subframe;
-}
-
-void OPJMarkerTree::CreateImageList(int size)
-{
- if (size == -1) {
- SetImageList(NULL);
- return;
- }
- if (size == 0) {
- size = m_imageSize;
- } else {
- m_imageSize = size;
- }
-
- // Make an image list containing small icons
- wxImageList *images = new wxImageList(size, size, true);
-
- // should correspond to TreeCtrlIcon_xxx enum
- wxBusyCursor wait;
- wxIcon icons[5];
- icons[0] = wxIcon(icon1_xpm);
- icons[1] = wxIcon(icon2_xpm);
- icons[2] = wxIcon(icon3_xpm);
- icons[3] = wxIcon(icon4_xpm);
- icons[4] = wxIcon(icon5_xpm);
-
- int sizeOrig = icons[0].GetWidth();
- for (size_t i = 0; i < WXSIZEOF(icons); i++) {
- if (size == sizeOrig) {
- images->Add(icons[i]);
- } else {
- images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));
- }
- }
-
- AssignImageList(images);
-}
-
-#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)
-void OPJMarkerTree::CreateButtonsImageList(int size)
-{
- if (size == -1) {
- SetButtonsImageList(NULL);
- return;
- }
-
- // Make an image list containing small icons
- wxImageList *images = new wxImageList(size, size, true);
-
- // should correspond to TreeCtrlIcon_xxx enum
- wxBusyCursor wait;
- wxIcon icons[4];
- icons[0] = wxIcon(icon3_xpm); // closed
- icons[1] = wxIcon(icon3_xpm); // closed, selected
- icons[2] = wxIcon(icon5_xpm); // open
- icons[3] = wxIcon(icon5_xpm); // open, selected
-
- for (size_t i = 0; i < WXSIZEOF(icons); i++) {
- int sizeOrig = icons[i].GetWidth();
- if (size == sizeOrig) {
- images->Add(icons[i]);
- } else {
- images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));
- }
- }
-
- AssignButtonsImageList(images);
-#else
-void OPJMarkerTree::CreateButtonsImageList(int WXUNUSED(size))
-{
-#endif
-}
-
-void OPJParseThread::LoadFile(wxFileName fname)
-{
- wxTreeItemId rootid;
-
- // this is the root node
- int image = wxGetApp().ShowImages() ? m_tree->TreeCtrlIcon_Folder : -1;
-
- if (this->m_parentid) {
- // leaf of a tree
- rootid = m_parentid;
- m_tree->SetItemText(rootid, wxT("Parsing..."));
-
- } else {
-
- // delete the existing tree hierarchy
- m_tree->DeleteAllItems();
-
- // new tree
- rootid = m_tree->AddRoot(wxT("Parsing..."),
- image,
- image,
- new OPJMarkerData(fname.GetFullPath())
- );
- //m_tree->SetItemFont(rootid, *wxITALIC_FONT);
- m_tree->SetItemBold(rootid);
- }
-
- // open the file
- wxFile m_file(fname.GetFullPath().c_str(), wxFile::read);
-
- // parsing enabled?
- if (wxGetApp().m_enableparse) {
-
- // what is the extension?
- if ((fname.GetExt() == wxT("j2k")) || (fname.GetExt() == wxT("j2c"))) {
-
- // parse the file
- ParseJ2KFile(&m_file, 0, m_file.Length(), rootid);
-
- } else if ((fname.GetExt() == wxT("jp2")) || (fname.GetExt() == wxT("mj2"))) {
-
- // parse the file
- if (this->m_parentid) {
- //WriteText(wxT("Only a subsection of jp2"));
- OPJMarkerData *data = (OPJMarkerData *) m_tree->GetItemData(rootid);
- ParseJ2KFile(&m_file, data->m_start, data->m_length, rootid);
- m_tree->Expand(rootid);
-
- } else {
- // as usual
- ParseJP2File(&m_file, 0, m_file.Length(), rootid);
- }
-
- } else {
-
- // unknown extension
- WriteText(wxT("Unknown file format!"));
-
- }
-
- }
-
- // this is the root node
- if (this->m_parentid) {
- m_tree->SetItemText(rootid, wxT("Codestream"));
- } else
- //m_tree->SetItemText(rootid, wxString::Format(wxT("%s (%d B)"), fname.GetFullName(), m_file.Length()));
- {
- m_tree->SetItemText(rootid, fname.GetFullName());
- }
-
- // close the file
- m_file.Close();
-
- WriteText(wxT("Parsing finished!"));
-}
-
-/*int OPJMarkerTree::OnCompareItems(const wxTreeItemId& item1,
- const wxTreeItemId& item2)
-{
- if ( m_reverseSort )
- {
- // just exchange 1st and 2nd items
- return wxTreeCtrl::OnCompareItems(item2, item1);
- }
- else
- {
- return wxTreeCtrl::OnCompareItems(item1, item2);
- }
-}*/
-
-/*void OPJMarkerTree::AddItemsRecursively(const wxTreeItemId& idParent,
- size_t numChildren,
- size_t depth,
- size_t folder)
-{
- if ( depth > 0 )
- {
- bool hasChildren = depth > 1;
-
- wxString str;
- for ( size_t n = 0; n < numChildren; n++ )
- {
- // at depth 1 elements won't have any more children
- if ( hasChildren )
- str.Printf(wxT("%s child %u"), wxT("Folder"), unsigned(n + 1));
- else
- str.Printf(wxT("%s child %u.%u"), wxT("File"), unsigned(folder), unsigned(n + 1));
-
- // here we pass to AppendItem() normal and selected item images (we
- // suppose that selected image follows the normal one in the enum)
- int image, imageSel;
- if ( wxGetApp().ShowImages() )
- {
- image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
- imageSel = image + 1;
- }
- else
- {
- image = imageSel = -1;
- }
- wxTreeItemId id = AppendItem(idParent, str, image, imageSel,
- new OPJMarkerData(str));
-
- // and now we also set the expanded one (only for the folders)
- if ( hasChildren && wxGetApp().ShowImages() )
- {
- SetItemImage(id, TreeCtrlIcon_FolderOpened,
- wxTreeItemIcon_Expanded);
- }
-
- // remember the last child for OnEnsureVisible()
- if ( !hasChildren && n == numChildren - 1 )
- {
- m_lastItem = id;
- }
-
- AddItemsRecursively(id, numChildren, depth - 1, n + 1);
- }
- }
- //else: done!
-}*/
-
-/*void OPJMarkerTree::AddTestItemsToTree(size_t numChildren,
- size_t depth)
-{
- int image = wxGetApp().ShowImages() ? OPJMarkerTree::TreeCtrlIcon_Folder : -1;
- wxTreeItemId rootId = AddRoot(wxT("Root"),
- image, image,
- new OPJMarkerData(wxT("Root item")));
- if ( image != -1 )
- {
- SetItemImage(rootId, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded);
- }
-
- AddItemsRecursively(rootId, numChildren, depth, 0);
-
- // set some colours/fonts for testing
- SetItemFont(rootId, *wxITALIC_FONT);
-
- wxTreeItemIdValue cookie;
- wxTreeItemId id = GetFirstChild(rootId, cookie);
- SetItemTextColour(id, *wxBLUE);
-
- id = GetNextChild(rootId, cookie);
- id = GetNextChild(rootId, cookie);
- SetItemTextColour(id, *wxRED);
- SetItemBackgroundColour(id, *wxLIGHT_GREY);
-}*/
-
-/*void OPJMarkerTree::GetItemsRecursively(const wxTreeItemId& idParent,
- wxTreeItemIdValue cookie)
-{
- wxTreeItemId id;
-
- if ( !cookie )
- id = GetFirstChild(idParent, cookie);
- else
- id = GetNextChild(idParent, cookie);
-
- if ( !id.IsOk() )
- return;
-
- wxString text = GetItemText(id);
- wxLogMessage(text);
-
- if (ItemHasChildren(id))
- GetItemsRecursively(id);
-
- GetItemsRecursively(idParent, cookie);
-}*/
-
-/*void OPJMarkerTree::DoToggleIcon(const wxTreeItemId& item)
-{
- int image = (GetItemImage(item) == TreeCtrlIcon_Folder)
- ? TreeCtrlIcon_File
- : TreeCtrlIcon_Folder;
- SetItemImage(item, image, wxTreeItemIcon_Normal);
-
- image = (GetItemImage(item) == TreeCtrlIcon_FolderSelected)
- ? TreeCtrlIcon_FileSelected
- : TreeCtrlIcon_FolderSelected;
- SetItemImage(item, image, wxTreeItemIcon_Selected);
-}*/
-
-void OPJMarkerTree::LogEvent(const wxChar *name, const wxTreeEvent& event)
-{
- wxTreeItemId item = event.GetItem();
- wxString text;
- if (item.IsOk()) {
- text << wxT('"') << GetItemText(item).c_str() << wxT('"');
- } else {
- text = wxT("invalid item");
- }
- wxLogMessage(wxT("%s(%s)"), name, text.c_str());
-}
-
-OPJParseThread *OPJMarkerTree::CreateParseThread(wxTreeItemId parentid,
- OPJChildFrame *subframe)
-{
- OPJParseThread *pthread = new OPJParseThread(this, parentid);
-
- if (pthread->Create() != wxTHREAD_NO_ERROR) {
- wxLogError(wxT("Can't create parse thread!"));
- }
-
- wxCriticalSectionLocker enter(wxGetApp().m_parse_critsect);
- wxGetApp().m_parse_threads.Add(pthread);
-
- return pthread;
-}
-
-
-/*// avoid repetition
-#define TREE_EVENT_HANDLER(name) \
-void OPJMarkerTree::name(wxTreeEvent& event) \
-{ \
- LogEvent(_T(#name), event); \
- SetLastItem(wxTreeItemId()); \
- event.Skip(); \
-}*/
-
-/*TREE_EVENT_HANDLER(OnBeginRDrag)*/
-/*TREE_EVENT_HANDLER(OnDeleteItem)*/
-/*TREE_EVENT_HANDLER(OnGetInfo)
-TREE_EVENT_HANDLER(OnSetInfo)*/
-/*TREE_EVENT_HANDLER(OnItemExpanded)
-TREE_EVENT_HANDLER(OnItemExpanding)*/
-/*TREE_EVENT_HANDLER(OnItemCollapsed)*/
-/*TREE_EVENT_HANDLER(OnSelChanged)
-TREE_EVENT_HANDLER(OnSelChanging)*/
-
-/*#undef TREE_EVENT_HANDLER*/
-
-void OPJMarkerTree::OnItemExpanding(wxTreeEvent& event)
-{
- wxTreeItemId item = event.GetItem();
- OPJMarkerData* data = (OPJMarkerData *) GetItemData(item);
- wxString text;
-
- if (item.IsOk()) {
- text << wxT('"') << GetItemText(item).c_str() << wxT('"');
- } else {
- text = wxT("invalid item");
- }
-
- if (wxStrcmp(data->GetDesc1(), wxT("INFO-CSTREAM"))) {
- return;
- }
-
- wxLogMessage(wxT("Expanding... (%s -> %s, %s, %d, %d)"),
- text.c_str(), data->GetDesc1(), data->GetDesc2(),
- data->m_start, data->m_length);
-
- // the codestream box is being asked for expansion
- wxTreeItemIdValue cookie;
- if (!GetFirstChild(item, cookie).IsOk()) {
- OPJParseThread *pthread = CreateParseThread(item);
- if (pthread->Run() != wxTHREAD_NO_ERROR) {
- wxLogMessage(wxT("Can't start parse thread!"));
- } else {
- wxLogMessage(wxT("New parse thread started."));
- }
- }
-}
-
-void OPJMarkerTree::OnSelChanged(wxTreeEvent& event)
-{
- int bunch_linesize = 16;
- int bunch_numlines = 7;
-
- wxTreeItemId item = event.GetItem();
- OPJMarkerData* data = (OPJMarkerData *) GetItemData(item);
- wxString text;
- int l, c, pos = 0, pre_pos;
-
- m_peektextCtrl->Clear();
-
- /*text << wxString::Format(wxT("Selected... (%s -> %s, %s, %d, %d)"),
- text.c_str(), data->GetDesc1(), data->GetDesc2(),
- data->m_start, data->m_length) << wxT("\n");*/
-
- // open the file and browse a little
- wxFile *fp = new wxFile(m_fname.GetFullPath().c_str(), wxFile::read);
-
- // go to position claimed
- fp->Seek(data->m_start, wxFromStart);
-
- // read a bunch
- int max_read = wxMin(wxFileOffset(bunch_linesize * bunch_numlines),
- data->m_length - data->m_start + 1);
- if (data->m_desc == wxT("MARK (65380)")) {
- /*wxLogMessage(data->m_desc);*/
- max_read = data->m_length - data->m_start + 1;
- bunch_numlines = (int) ceil((float) max_read / (float) bunch_linesize);
- }
- unsigned char *buffer = new unsigned char[bunch_linesize * bunch_numlines];
- fp->Read(buffer, max_read);
-
- // write the file data between start and stop
- pos = 0;
- for (l = 0; l < bunch_numlines; l++) {
-
- text << wxString::Format(wxT("%010d:"), data->m_start + pos);
-
- pre_pos = pos;
-
- // add hex browsing text
- for (c = 0; c < bunch_linesize; c++) {
-
- if (!(c % 8)) {
- text << wxT(" ");
- }
-
- if (pos < max_read) {
- text << wxString::Format(wxT("%02X "), buffer[pos]);
- } else {
- text << wxT(" ");
- }
- pos++;
- }
-
- text << wxT(" ");
-
- // add char browsing text
- for (c = 0; c < bunch_linesize; c++) {
-
- if (pre_pos < max_read) {
- if ((buffer[pre_pos] == '\n') ||
- (buffer[pre_pos] == '\t') ||
- (buffer[pre_pos] == '\0') ||
- (buffer[pre_pos] == 0x0D) ||
- (buffer[pre_pos] == 0x0B)) {
- buffer[pre_pos] = ' ';
- }
- text << wxString::FromAscii((char) buffer[pre_pos]) << wxT(".");
- } else {
- text << wxT(" ");
- }
- pre_pos++;
- }
-
- text << wxT("\n");
-
- }
-
- // close the file
- fp->Close();
-
- m_peektextCtrl->WriteText(text);
-
- delete [] buffer;
-}
-
-/*void LogKeyEvent(const wxChar *name, const wxKeyEvent& event)
-{
- wxString key;
- long keycode = event.GetKeyCode();
- {
- switch ( keycode )
- {
- case WXK_BACK: key = wxT("BACK"); break;
- case WXK_TAB: key = wxT("TAB"); break;
- case WXK_RETURN: key = wxT("RETURN"); break;
- case WXK_ESCAPE: key = wxT("ESCAPE"); break;
- case WXK_SPACE: key = wxT("SPACE"); break;
- case WXK_DELETE: key = wxT("DELETE"); break;
- case WXK_START: key = wxT("START"); break;
- case WXK_LBUTTON: key = wxT("LBUTTON"); break;
- case WXK_RBUTTON: key = wxT("RBUTTON"); break;
- case WXK_CANCEL: key = wxT("CANCEL"); break;
- case WXK_MBUTTON: key = wxT("MBUTTON"); break;
- case WXK_CLEAR: key = wxT("CLEAR"); break;
- case WXK_SHIFT: key = wxT("SHIFT"); break;
- case WXK_ALT: key = wxT("ALT"); break;
- case WXK_CONTROL: key = wxT("CONTROL"); break;
- case WXK_MENU: key = wxT("MENU"); break;
- case WXK_PAUSE: key = wxT("PAUSE"); break;
- case WXK_CAPITAL: key = wxT("CAPITAL"); break;
- case WXK_END: key = wxT("END"); break;
- case WXK_HOME: key = wxT("HOME"); break;
- case WXK_LEFT: key = wxT("LEFT"); break;
- case WXK_UP: key = wxT("UP"); break;
- case WXK_RIGHT: key = wxT("RIGHT"); break;
- case WXK_DOWN: key = wxT("DOWN"); break;
- case WXK_SELECT: key = wxT("SELECT"); break;
- case WXK_PRINT: key = wxT("PRINT"); break;
- case WXK_EXECUTE: key = wxT("EXECUTE"); break;
- case WXK_SNAPSHOT: key = wxT("SNAPSHOT"); break;
- case WXK_INSERT: key = wxT("INSERT"); break;
- case WXK_HELP: key = wxT("HELP"); break;
- case WXK_NUMPAD0: key = wxT("NUMPAD0"); break;
- case WXK_NUMPAD1: key = wxT("NUMPAD1"); break;
- case WXK_NUMPAD2: key = wxT("NUMPAD2"); break;
- case WXK_NUMPAD3: key = wxT("NUMPAD3"); break;
- case WXK_NUMPAD4: key = wxT("NUMPAD4"); break;
- case WXK_NUMPAD5: key = wxT("NUMPAD5"); break;
- case WXK_NUMPAD6: key = wxT("NUMPAD6"); break;
- case WXK_NUMPAD7: key = wxT("NUMPAD7"); break;
- case WXK_NUMPAD8: key = wxT("NUMPAD8"); break;
- case WXK_NUMPAD9: key = wxT("NUMPAD9"); break;
- case WXK_MULTIPLY: key = wxT("MULTIPLY"); break;
- case WXK_ADD: key = wxT("ADD"); break;
- case WXK_SEPARATOR: key = wxT("SEPARATOR"); break;
- case WXK_SUBTRACT: key = wxT("SUBTRACT"); break;
- case WXK_DECIMAL: key = wxT("DECIMAL"); break;
- case WXK_DIVIDE: key = wxT("DIVIDE"); break;
- case WXK_F1: key = wxT("F1"); break;
- case WXK_F2: key = wxT("F2"); break;
- case WXK_F3: key = wxT("F3"); break;
- case WXK_F4: key = wxT("F4"); break;
- case WXK_F5: key = wxT("F5"); break;
- case WXK_F6: key = wxT("F6"); break;
- case WXK_F7: key = wxT("F7"); break;
- case WXK_F8: key = wxT("F8"); break;
- case WXK_F9: key = wxT("F9"); break;
- case WXK_F10: key = wxT("F10"); break;
- case WXK_F11: key = wxT("F11"); break;
- case WXK_F12: key = wxT("F12"); break;
- case WXK_F13: key = wxT("F13"); break;
- case WXK_F14: key = wxT("F14"); break;
- case WXK_F15: key = wxT("F15"); break;
- case WXK_F16: key = wxT("F16"); break;
- case WXK_F17: key = wxT("F17"); break;
- case WXK_F18: key = wxT("F18"); break;
- case WXK_F19: key = wxT("F19"); break;
- case WXK_F20: key = wxT("F20"); break;
- case WXK_F21: key = wxT("F21"); break;
- case WXK_F22: key = wxT("F22"); break;
- case WXK_F23: key = wxT("F23"); break;
- case WXK_F24: key = wxT("F24"); break;
- case WXK_NUMLOCK: key = wxT("NUMLOCK"); break;
- case WXK_SCROLL: key = wxT("SCROLL"); break;
- case WXK_PAGEUP: key = wxT("PAGEUP"); break;
- case WXK_PAGEDOWN: key = wxT("PAGEDOWN"); break;
- case WXK_NUMPAD_SPACE: key = wxT("NUMPAD_SPACE"); break;
- case WXK_NUMPAD_TAB: key = wxT("NUMPAD_TAB"); break;
- case WXK_NUMPAD_ENTER: key = wxT("NUMPAD_ENTER"); break;
- case WXK_NUMPAD_F1: key = wxT("NUMPAD_F1"); break;
- case WXK_NUMPAD_F2: key = wxT("NUMPAD_F2"); break;
- case WXK_NUMPAD_F3: key = wxT("NUMPAD_F3"); break;
- case WXK_NUMPAD_F4: key = wxT("NUMPAD_F4"); break;
- case WXK_NUMPAD_HOME: key = wxT("NUMPAD_HOME"); break;
- case WXK_NUMPAD_LEFT: key = wxT("NUMPAD_LEFT"); break;
- case WXK_NUMPAD_UP: key = wxT("NUMPAD_UP"); break;
- case WXK_NUMPAD_RIGHT: key = wxT("NUMPAD_RIGHT"); break;
- case WXK_NUMPAD_DOWN: key = wxT("NUMPAD_DOWN"); break;
- case WXK_NUMPAD_PAGEUP: key = wxT("NUMPAD_PAGEUP"); break;
- case WXK_NUMPAD_PAGEDOWN: key = wxT("NUMPAD_PAGEDOWN"); break;
- case WXK_NUMPAD_END: key = wxT("NUMPAD_END"); break;
- case WXK_NUMPAD_BEGIN: key = wxT("NUMPAD_BEGIN"); break;
- case WXK_NUMPAD_INSERT: key = wxT("NUMPAD_INSERT"); break;
- case WXK_NUMPAD_DELETE: key = wxT("NUMPAD_DELETE"); break;
- case WXK_NUMPAD_EQUAL: key = wxT("NUMPAD_EQUAL"); break;
- case WXK_NUMPAD_MULTIPLY: key = wxT("NUMPAD_MULTIPLY"); break;
- case WXK_NUMPAD_ADD: key = wxT("NUMPAD_ADD"); break;
- case WXK_NUMPAD_SEPARATOR: key = wxT("NUMPAD_SEPARATOR"); break;
- case WXK_NUMPAD_SUBTRACT: key = wxT("NUMPAD_SUBTRACT"); break;
- case WXK_NUMPAD_DECIMAL: key = wxT("NUMPAD_DECIMAL"); break;
-
- default:
- {
- if ( keycode < 128 && wxIsprint((int)keycode) )
- key.Printf(wxT("'%c'"), (char)keycode);
- else if ( keycode > 0 && keycode < 27 )
- key.Printf(_("Ctrl-%c"), wxT('A') + keycode - 1);
- else
- key.Printf(wxT("unknown (%ld)"), keycode);
- }
- }
- }
-
- wxLogMessage(wxT("%s event: %s (flags = %c%c%c%c)"),
- name,
- key.c_str(),
- event.ControlDown() ? wxT('C') : wxT('-'),
- event.AltDown() ? wxT('A') : wxT('-'),
- event.ShiftDown() ? wxT('S') : wxT('-'),
- event.MetaDown() ? wxT('M') : wxT('-'));
-}
-
-void OPJMarkerTree::OnTreeKeyDown(wxTreeEvent& event)
-{
- LogKeyEvent(wxT("Tree key down "), event.GetKeyEvent());
-
- event.Skip();
-}*/
-
-/*void OPJMarkerTree::OnBeginDrag(wxTreeEvent& event)
-{
- // need to explicitly allow drag
- if ( event.GetItem() != GetRootItem() )
- {
- m_draggedItem = event.GetItem();
-
- wxLogMessage(wxT("OnBeginDrag: started dragging %s"),
- GetItemText(m_draggedItem).c_str());
-
- event.Allow();
- }
- else
- {
- wxLogMessage(wxT("OnBeginDrag: this item can't be dragged."));
- }
-}
-
-void OPJMarkerTree::OnEndDrag(wxTreeEvent& event)
-{
- wxTreeItemId itemSrc = m_draggedItem,
- itemDst = event.GetItem();
- m_draggedItem = (wxTreeItemId)0l;
-
- // where to copy the item?
- if ( itemDst.IsOk() && !ItemHasChildren(itemDst) )
- {
- // copy to the parent then
- itemDst = GetItemParent(itemDst);
- }
-
- if ( !itemDst.IsOk() )
- {
- wxLogMessage(wxT("OnEndDrag: can't drop here."));
-
- return;
- }
-
- wxString text = GetItemText(itemSrc);
- wxLogMessage(wxT("OnEndDrag: '%s' copied to '%s'."),
- text.c_str(), GetItemText(itemDst).c_str());
-
- // just do append here - we could also insert it just before/after the item
- // on which it was dropped, but this requires slightly more work... we also
- // completely ignore the client data and icon of the old item but could
- // copy them as well.
- //
- // Finally, we only copy one item here but we might copy the entire tree if
- // we were dragging a folder.
- int image = wxGetApp().ShowImages() ? TreeCtrlIcon_File : -1;
- AppendItem(itemDst, text, image);
-}*/
-
-/*void OPJMarkerTree::OnBeginLabelEdit(wxTreeEvent& event)
-{
- wxLogMessage(wxT("OnBeginLabelEdit"));
-
- // for testing, prevent this item's label editing
- wxTreeItemId itemId = event.GetItem();
- if ( IsTestItem(itemId) )
- {
- wxMessageBox(wxT("You can't edit this item."));
-
- event.Veto();
- }
- else if ( itemId == GetRootItem() )
- {
- // test that it is possible to change the text of the item being edited
- SetItemText(itemId, _T("Editing root item"));
- }
-}
-
-void OPJMarkerTree::OnEndLabelEdit(wxTreeEvent& event)
-{
- wxLogMessage(wxT("OnEndLabelEdit"));
-
- // don't allow anything except letters in the labels
- if ( !event.GetLabel().IsWord() )
- {
- wxMessageBox(wxT("The new label should be a single word."));
-
- event.Veto();
- }
-}*/
-
-/*void OPJMarkerTree::OnItemCollapsing(wxTreeEvent& event)
-{
- wxLogMessage(wxT("OnItemCollapsing"));
-
- // for testing, prevent the user from collapsing the first child folder
- wxTreeItemId itemId = event.GetItem();
- if ( IsTestItem(itemId) )
- {
- wxMessageBox(wxT("You can't collapse this item."));
-
- event.Veto();
- }
-}*/
-
-/*void OPJMarkerTree::OnItemActivated(wxTreeEvent& event)
-{
- // show some info about this item
- wxTreeItemId itemId = event.GetItem();
- OPJMarkerData *item = (OPJMarkerData *)GetItemData(itemId);
-
- if ( item != NULL )
- {
- item->ShowInfo(this);
- }
-
- wxLogMessage(wxT("OnItemActivated"));
-}*/
-
-void OPJMarkerTree::OnItemMenu(wxTreeEvent& event)
-{
- /*wxTreeItemId itemId = event.GetItem();
- OPJMarkerData *item = itemId.IsOk() ? (OPJMarkerData *)GetItemData(itemId)
- : NULL;
-
- wxLogMessage(wxT("OnItemMenu for item \"%s\""), item ? item->GetDesc()
- : _T(""));*/
-
- //wxLogMessage(wxT("EEEEEEEEEE"));
-
- //event.Skip();
-}
-
-/*void OPJMarkerTree::OnContextMenu(wxContextMenuEvent& event)
-{
- wxPoint pt = event.GetPosition();
- wxTreeItemId item;
- wxLogMessage(wxT("OnContextMenu at screen coords (%i, %i)"), pt.x, pt.y);
-
- // check if event was generated by keyboard (MSW-specific?)
- if ( pt.x == -1 && pt.y == -1 ) //(this is how MSW indicates it)
- {
- if ( !HasFlag(wxTR_MULTIPLE) )
- item = GetSelection();
-
- // attempt to guess where to show the menu
- if ( item.IsOk() )
- {
- // if an item was clicked, show menu to the right of it
- wxRect rect;
- GetBoundingRect(item, rect, true );// only the label
- pt = wxPoint(rect.GetRight(), rect.GetTop());
- }
- else
- {
- pt = wxPoint(0, 0);
- }
- }
- else // event was generated by mouse, use supplied coords
- {
- pt = ScreenToClient(pt);
- item = HitTest(pt);
- }
-
- ShowMenu(item, pt);
-}*/
-
-/*void OPJMarkerTree::ShowMenu(wxTreeItemId id, const wxPoint& pt)
-{
- wxString title;
- if ( id.IsOk() )
- {
- title << wxT("Menu for ") << GetItemText(id);
- }
- else
- {
- title = wxT("Menu for no particular item");
- }
-
-#if wxUSE_MENUS
- wxMenu menu(title);
- menu.Append(TreeTest_About, wxT("&About..."));
- menu.AppendSeparator();
- menu.Append(TreeTest_Highlight, wxT("&Highlight item"));
- menu.Append(TreeTest_Dump, wxT("&Dump"));
-
- PopupMenu(&menu, pt);
-#endif // wxUSE_MENUS
-}*/
-
-/*void OPJMarkerTree::OnItemRClick(wxTreeEvent& event)
-{
- wxTreeItemId itemId = event.GetItem();
- OPJMarkerData *item = itemId.IsOk() ? (OPJMarkerData *)GetItemData(itemId)
- : NULL;
-
- wxLogMessage(wxT("Item \"%s\" right clicked"), item ? item->GetDesc()
- : _T(""));
-
- event.Skip();
-}*/
-
-/*
-void OPJMarkerTree::OnRMouseDown(wxMouseEvent& event)
-{
- wxLogMessage(wxT("Right mouse button down"));
-
- event.Skip();
-}
-
-void OPJMarkerTree::OnRMouseUp(wxMouseEvent& event)
-{
- wxLogMessage(wxT("Right mouse button up"));
-
- event.Skip();
-}
-
-void OPJMarkerTree::OnRMouseDClick(wxMouseEvent& event)
-{
- wxTreeItemId id = HitTest(event.GetPosition());
- if ( !id )
- wxLogMessage(wxT("No item under mouse"));
- else
- {
- OPJMarkerData *item = (OPJMarkerData *)GetItemData(id);
- if ( item )
- wxLogMessage(wxT("Item '%s' under mouse"), item->GetDesc());
- }
-
- event.Skip();
-}
-*/
-
-static inline const wxChar *Bool2String(bool b)
-{
- return b ? wxT("") : wxT("not ");
-}
-
-void OPJMarkerData::ShowInfo(wxTreeCtrl *tree)
-{
- wxLogMessage(wxT("Item '%s': %sselected, %sexpanded, %sbold,\n")
- wxT("%u children (%u immediately under this item)."),
- m_desc.c_str(),
- Bool2String(tree->IsSelected(GetId())),
- Bool2String(tree->IsExpanded(GetId())),
- Bool2String(tree->IsBold(GetId())),
- unsigned(tree->GetChildrenCount(GetId())),
- unsigned(tree->GetChildrenCount(GetId(), false)));
-}
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.cpp b/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.cpp
deleted file mode 100644
index bb1ea05d..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.cpp
+++ /dev/null
@@ -1,1671 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: sashtest.cpp
-// Purpose: Layout/sash sample
-// Author: Julian Smart
-// Modified by:
-// Created: 04/01/98
-// RCS-ID: $Id: sashtest.cpp,v 1.18 2005/08/23 15:54:35 ABX Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: treetest.cpp
-// Purpose: wxTreeCtrl sample
-// Author: Julian Smart
-// Modified by:
-// Created: 04/01/98
-// RCS-ID: $Id: treetest.cpp,v 1.110 2006/11/04 11:26:51 VZ Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: dialogs.cpp
-// Purpose: Common dialogs demo
-// Author: Julian Smart
-// Modified by: ABX (2004) - adjustements for conditional building + new menu
-// Created: 04/01/98
-// RCS-ID: $Id: dialogs.cpp,v 1.163 2006/11/04 10:57:24 VZ Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: thread.cpp
-// Purpose: wxWidgets thread sample
-// Author: Guilhem Lavaux, Vadim Zeitlin
-// Modified by:
-// Created: 06/16/98
-// RCS-ID: $Id: thread.cpp,v 1.26 2006/10/02 05:36:28 PC Exp $
-// Copyright: (c) 1998-2002 wxWidgets team
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-// Name: samples/image/image.cpp
-// Purpose: sample showing operations with wxImage
-// Author: Robert Roebling
-// Modified by:
-// Created: 1998
-// RCS-ID: $Id: image.cpp,v 1.120 2006/12/06 17:13:11 VZ Exp $
-// Copyright: (c) 1998-2005 Robert Roebling
-// License: wxWindows licence
-///////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: samples/console/console.cpp
-// Purpose: A sample console (as opposed to GUI) program using wxWidgets
-// Author: Vadim Zeitlin
-// Modified by:
-// Created: 04.10.99
-// RCS-ID: $Id: console.cpp,v 1.206 2006/11/12 19:55:19 VZ Exp $
-// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: samples/notebook/notebook.cpp
-// Purpose: a sample demonstrating notebook usage
-// Author: Julian Smart
-// Modified by: Dimitri Schoolwerth
-// Created: 26/10/98
-// RCS-ID: $Id: notebook.cpp,v 1.49 2006/11/04 18:24:07 RR Exp $
-// Copyright: (c) 1998-2002 wxWidgets team
-// License: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: dialogs.cpp
-// Purpose: Common dialogs demo
-// Author: Julian Smart
-// Modified by: ABX (2004) - adjustements for conditional building + new menu
-// Created: 04/01/98
-// RCS-ID: $Id: dialogs.cpp,v 1.163 2006/11/04 10:57:24 VZ Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: dnd.cpp
-// Purpose: Drag and drop sample
-// Author: Vadim Zeitlin
-// Modified by:
-// Created: 04/01/98
-// RCS-ID: $Id: dnd.cpp,v 1.107 2006/10/30 20:23:41 VZ Exp $
-// Copyright:
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: test.cpp
-// Purpose: wxHtml testing example
-/////////////////////////////////////////////////////////////////////////////
-
-
-#include "OPJViewer.h"
-
-IMPLEMENT_APP(OPJViewerApp)
-
-// For drawing lines in a canvas
-long xpos = -1;
-long ypos = -1;
-
-int winNumber = 1;
-
-// Initialise this in OnInit, not statically
-bool OPJViewerApp::OnInit(void)
-{
- int n;
-#if wxUSE_UNICODE
-
- wxChar **wxArgv = new wxChar *[argc + 1];
-
- for (n = 0; n < argc; n++ ) {
- wxMB2WXbuf warg = wxConvertMB2WX((char *) argv[n]);
- wxArgv[n] = wxStrdup(warg);
- }
-
- wxArgv[n] = NULL;
-
-#else // !wxUSE_UNICODE
-
- #define wxArgv argv
-
-#endif // wxUSE_UNICODE/!wxUSE_UNICODE
-
-#if wxUSE_CMDLINE_PARSER
-
- static const wxCmdLineEntryDesc cmdLineDesc[] =
- {
- { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help message"),
- wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
-
- { wxCMD_LINE_PARAM, NULL, NULL, _T("input file"),
- wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE },
-
- { wxCMD_LINE_NONE }
- };
-
- wxCmdLineParser parser(cmdLineDesc, argc, wxArgv);
-
- switch (parser.Parse()) {
- case -1:
- wxLogMessage(wxT("Help was given, terminating."));
- break;
-
- case 0:
- ShowCmdLine(parser);
- break;
-
- default:
- wxLogMessage(wxT("Syntax error detected."));
- break;
- }
-
-#endif // wxUSE_CMDLINE_PARSER
-
- //wxInitAllImageHandlers();
-#if wxUSE_LIBJPEG
- wxImage::AddHandler( new wxJPEGHandler );
-#endif
-#if wxUSE_LIBOPENJPEG
- wxImage::AddHandler( new wxJPEG2000Handler );
-#endif
-#if USE_MXF
- wxImage::AddHandler( new wxMXFHandler );
-#endif // USE_MXF
-#if OPJ_MANYFORMATS
- wxImage::AddHandler( new wxBMPHandler );
- wxImage::AddHandler( new wxPNGHandler );
- wxImage::AddHandler( new wxGIFHandler );
- wxImage::AddHandler( new wxPNMHandler );
- wxImage::AddHandler( new wxTIFFHandler );
-#endif
- // we use a XPM image in our HTML page
- wxImage::AddHandler(new wxXPMHandler);
-
- // memory file system
- wxFileSystem::AddHandler(new wxMemoryFSHandler);
-
-#ifdef OPJ_INICONFIG
- //load decoding engine parameters
- OPJconfig = new wxConfig(OPJ_APPLICATION, OPJ_APPLICATION_VENDOR);
-
- OPJconfig->Read(wxT("decode/enabledeco"), &m_enabledeco, (bool) true);
- OPJconfig->Read(wxT("decode/enableparse"), &m_enableparse, (bool) true);
- OPJconfig->Read(wxT("decode/resizemethod"), &m_resizemethod, (long) 0);
- OPJconfig->Read(wxT("decode/xxxreducefactor"), &m_reducefactor, (long) 0);
- OPJconfig->Read(wxT("decode/xxxqualitylayers"), &m_qualitylayers, (long) 0);
- OPJconfig->Read(wxT("decode/xxxcomponents"), &m_components, (long) 0);
- OPJconfig->Read(wxT("decode/xxxframenum"), &m_framenum, (long) 0);
-#ifdef USE_JPWL
- OPJconfig->Read(wxT("decode/enablejpwl"), &m_enablejpwl, (bool) true);
- OPJconfig->Read(wxT("decode/expcomps"), &m_expcomps, (long) JPWL_EXPECTED_COMPONENTS);
- OPJconfig->Read(wxT("decode/maxtiles"), &m_maxtiles, (long) JPWL_MAXIMUM_TILES);
-#endif // USE_JPWL
-
- OPJconfig->Write(wxT("teststring"), wxT("This is a test value"));
- OPJconfig->Write(wxT("testbool"), (bool) true);
- OPJconfig->Write(wxT("testlong"), (long) 245);
-
- OPJconfig->Read(wxT("showtoolbar"), &m_showtoolbar, (bool) true);
- OPJconfig->Read(wxT("showbrowser"), &m_showbrowser, (bool) true);
- OPJconfig->Read(wxT("showpeeker"), &m_showpeeker, (bool) true);
- OPJconfig->Read(wxT("browserwidth"), &m_browserwidth, (long) OPJ_BROWSER_WIDTH);
- OPJconfig->Read(wxT("peekerheight"), &m_peekerheight, (long) OPJ_PEEKER_HEIGHT);
- OPJconfig->Read(wxT("framewidth"), &m_framewidth, (long) OPJ_FRAME_WIDTH);
- OPJconfig->Read(wxT("frameheight"), &m_frameheight, (long) OPJ_FRAME_HEIGHT);
-
- // load encoding engine parameters
- OPJconfig->Read(wxT("encode/subsampling"), &m_subsampling, (wxString) wxT("1,1"));
- OPJconfig->Read(wxT("encode/origin"), &m_origin, (wxString) wxT("0,0"));
- OPJconfig->Read(wxT("encode/rates"), &m_rates, (wxString) wxT("20,10,5"));
- OPJconfig->Read(wxT("encode/quality"), &m_quality, (wxString) wxT("30,35,40"));
- OPJconfig->Read(wxT("encode/enablequality"), &m_enablequality, (bool) false);
- OPJconfig->Read(wxT("encode/multicomp"), &m_multicomp, (bool) false);
- OPJconfig->Read(wxT("encode/irreversible"), &m_irreversible, (bool) false);
- OPJconfig->Read(wxT("encode/resolutions"), &m_resolutions, (int) 6);
- OPJconfig->Read(wxT("encode/progression"), &m_progression, (int) 0);
- OPJconfig->Read(wxT("encode/cbsize"), &m_cbsize, (wxString) wxT("32,32"));
- OPJconfig->Read(wxT("encode/prsize"), &m_prsize, (wxString) wxT("[128,128],[128,128]"));
- OPJconfig->Read(wxT("encode/tsize"), &m_tsize, (wxString) wxT(""));
- OPJconfig->Read(wxT("encode/torigin"), &m_torigin, (wxString) wxT("0,0"));
- OPJconfig->Read(wxT("encode/enablesop"), &m_enablesop, (bool) false);
- OPJconfig->Read(wxT("encode/enableeph"), &m_enableeph, (bool) false);
- OPJconfig->Read(wxT("encode/enablebypass"), &m_enablebypass, (bool) false);
- OPJconfig->Read(wxT("encode/enablereset"), &m_enablereset, (bool) false);
- OPJconfig->Read(wxT("encode/enablerestart"), &m_enablerestart, (bool) false);
- OPJconfig->Read(wxT("encode/enablevsc"), &m_enablevsc, (bool) false);
- OPJconfig->Read(wxT("encode/enableerterm"), &m_enableerterm, (bool) false);
- OPJconfig->Read(wxT("encode/enablesegmark"), &m_enablesegmark, (bool) false);
- OPJconfig->Read(wxT("encode/enablecomm"), &m_enablecomm, (bool) true);
- OPJconfig->Read(wxT("encode/enablepoc"), &m_enablepoc, (bool) false);
- OPJconfig->Read(wxT("encode/comment"), &m_comment, (wxString) wxT(""));
- OPJconfig->Read(wxT("encode/poc"), &m_poc, (wxString) wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL"));
- OPJconfig->Read(wxT("encode/enableidx"), &m_enableidx, (bool) false);
- OPJconfig->Read(wxT("encode/index"), &m_index, (wxString) wxT("index.txt"));
-#ifdef USE_JPWL
- OPJconfig->Read(wxT("encode/enablejpwl"), &m_enablejpwle, (bool) true);
- for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) {
- OPJconfig->Read(wxT("encode/jpwl/hprotsel") + wxString::Format(wxT("%02d"), n), &m_hprotsel[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/htileval") + wxString::Format(wxT("%02d"), n), &m_htileval[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/pprotsel") + wxString::Format(wxT("%02d"), n), &m_pprotsel[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/ptileval") + wxString::Format(wxT("%02d"), n), &m_ptileval[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/ppackval") + wxString::Format(wxT("%02d"), n), &m_ppackval[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/sensisel") + wxString::Format(wxT("%02d"), n), &m_sensisel[n], 0);
- OPJconfig->Read(wxT("encode/jpwl/stileval") + wxString::Format(wxT("%02d"), n), &m_stileval[n], 0);
- }
-#endif // USE_JPWL
-
-#else
- // set decoding engine parameters
- m_enabledeco = true;
- m_enableparse = true;
- m_resizemethod = 0;
- m_reducefactor = 0;
- m_qualitylayers = 0;
- m_components = 0;
- m_framenum = 0;
-#ifdef USE_JPWL
- m_enablejpwl = true;
- m_expcomps = JPWL_EXPECTED_COMPONENTS;
- m_maxtiles = JPWL_MAXIMUM_TILES;
-#endif // USE_JPWL
- m_showtoolbar = true;
- m_showbrowser = true;
- m_showpeeker = true;
- m_browserwidth = OPJ_BROWSER_WIDTH;
- m_peekerheight = OPJ_PEEKER_HEIGHT;
- m_framewidth = OPJ_FRAME_WIDTH;
- m_frameheight = OPJ_FRAME_HEIGHT;
-
- // set encoding engine parameters
- m_subsampling = wxT("1,1");
- m_origin = wxT("0,0");
- m_rates = wxT("20,10,5");
- m_quality = wxT("30,35,40");
- m_enablequality = false;
- m_multicomp = false;
- m_irreversible = false;
- m_resolutions = 6;
- m_progression = 0;
- m_cbsize= wxT("32,32");
- m_prsize= wxT("[128,128],[128,128]");
- m_tsize = wxT("");
- m_torigin = wxT("0,0");
- m_enablesop = false;
- m_enableeph = false;
- m_enablebypass = false;
- m_enablereset = false;
- m_enablerestart = false;
- m_enablevsc = false;
- m_enableerterm = false;
- m_enablesegmark = false;
- m_enableidx = false;
- m_index = wxT("index.txt");
- m_enablecomm = true;
- m_comment = wxT("");
- m_enablepoc = false;
- m_poc = wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL");
-#ifdef USE_JPWL
- m_enablejpwle = true;
- for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) {
- m_hprotsel[n] = 0;
- m_htileval[n] = 0;
- m_pprotsel[n] = 0;
- m_ptileval[n] = 0;
- m_sensisel[n] = 0;
- m_stileval[n] = 0;
- }
-#endif // USE_JPWL
-
-#endif // OPJ_INICONFIG
-
- if (m_comment == wxT("")) {
-#if defined __WXMSW__
- m_comment = wxT("Created by OPJViewer Win32 - OpenJPEG version ");
-#elif defined __WXGTK__
- m_comment = wxT("Created by OPJViewer Lin32 - OpenJPEG version ");
-#else
- m_comment = wxT("Created by OPJViewer - OpenJPEG version ");
-#endif
-
-#ifdef USE_JPWL
- m_comment += wxString::Format(wxT("%s with JPWL"), (char *) opj_version());
-#else
- m_comment += wxString::Format(wxT("%s"), (char *) opj_version());
-#endif
- }
-
- // Create the main frame window
- OPJFrame *frame = new OPJFrame(NULL, wxID_ANY, OPJ_APPLICATION_TITLEBAR,
- wxDefaultPosition, wxSize(wxGetApp().m_framewidth, wxGetApp().m_frameheight),
- wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE |
- wxHSCROLL | wxVSCROLL);
-
- // Give it an icon (this is ignored in MDI mode: uses resources)
-#ifdef __WXMSW__
- frame->SetIcon(wxIcon(wxT("OPJViewer16")));
-#endif
-
- frame->Show(true);
-
- SetTopWindow(frame);
-
- // if there are files on the command line, open them
- if (!(m_filelist.IsEmpty())) {
- //wxLogMessage(wxT("Habemus files!!!"));
- wxArrayString paths, filenames;
- for (unsigned int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) {
- paths.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullPath());
- filenames.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullName());
- }
- //wxLogMessage(paths[0]);
- frame->OpenFiles(paths, filenames);
- }
-
- return true;
-}
-
-int OPJViewerApp::OnExit()
-{
- int n;
-
-#ifdef OPJ_INICONFIG
- OPJconfig->Write(wxT("decode/enabledeco"), m_enabledeco);
- OPJconfig->Write(wxT("decode/enableparse"), m_enableparse);
- OPJconfig->Write(wxT("decode/resizemethod"), m_resizemethod);
- OPJconfig->Write(wxT("decode/reducefactor"), m_reducefactor);
- OPJconfig->Write(wxT("decode/qualitylayers"), m_qualitylayers);
- OPJconfig->Write(wxT("decode/components"), m_components);
- OPJconfig->Write(wxT("decode/framenum"), m_framenum);
-#ifdef USE_JPWL
- OPJconfig->Write(wxT("decode/enablejpwl"), m_enablejpwl);
- OPJconfig->Write(wxT("decode/expcomps"), m_expcomps);
- OPJconfig->Write(wxT("decode/maxtiles"), m_maxtiles);
-#endif // USE_JPWL
- OPJconfig->Write(wxT("showtoolbar"), m_showtoolbar);
- OPJconfig->Write(wxT("showbrowser"), m_showbrowser);
- OPJconfig->Write(wxT("showpeeker"), m_showpeeker);
- OPJconfig->Write(wxT("browserwidth"), m_browserwidth);
- OPJconfig->Write(wxT("peekerheight"), m_peekerheight);
- OPJconfig->Write(wxT("framewidth"), m_framewidth);
- OPJconfig->Write(wxT("frameheight"), m_frameheight);
-
- OPJconfig->Write(wxT("encode/subsampling"), m_subsampling);
- OPJconfig->Write(wxT("encode/origin"), m_origin);
- OPJconfig->Write(wxT("encode/rates"), m_rates);
- OPJconfig->Write(wxT("encode/quality"), m_quality);
- OPJconfig->Write(wxT("encode/enablequality"), m_enablequality);
- OPJconfig->Write(wxT("encode/multicomp"), m_multicomp);
- OPJconfig->Write(wxT("encode/irreversible"), m_irreversible);
- OPJconfig->Write(wxT("encode/resolutions"), m_resolutions);
- OPJconfig->Write(wxT("encode/progression"), m_progression);
- OPJconfig->Write(wxT("encode/cbsize"), m_cbsize);
- OPJconfig->Write(wxT("encode/prsize"), m_prsize);
- OPJconfig->Write(wxT("encode/tiles"), m_tsize);
- OPJconfig->Write(wxT("encode/torigin"), m_torigin);
- OPJconfig->Write(wxT("encode/enablesop"), m_enablesop);
- OPJconfig->Write(wxT("encode/enableeph"), m_enableeph);
- OPJconfig->Write(wxT("encode/enablebypass"), m_enablebypass);
- OPJconfig->Write(wxT("encode/enablereset"), m_enablereset);
- OPJconfig->Write(wxT("encode/enablerestart"), m_enablerestart);
- OPJconfig->Write(wxT("encode/enablevsc"), m_enablevsc);
- OPJconfig->Write(wxT("encode/enableerterm"), m_enableerterm);
- OPJconfig->Write(wxT("encode/enablesegmark"), m_enablesegmark);
- OPJconfig->Write(wxT("encode/enableidx"), m_enableidx);
- OPJconfig->Write(wxT("encode/index"), m_index);
- OPJconfig->Write(wxT("encode/enablecomm"), m_enablecomm);
- OPJconfig->Write(wxT("encode/comment"), m_comment);
- OPJconfig->Write(wxT("encode/enablepoc"), m_enablepoc);
- OPJconfig->Write(wxT("encode/poc"), m_poc);
-#ifdef USE_JPWL
- OPJconfig->Write(wxT("encode/enablejpwl"), m_enablejpwle);
- for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) {
- OPJconfig->Write(wxT("encode/jpwl/hprotsel") + wxString::Format(wxT("%02d"), n), m_hprotsel[n]);
- OPJconfig->Write(wxT("encode/jpwl/htileval") + wxString::Format(wxT("%02d"), n), m_htileval[n]);
- OPJconfig->Write(wxT("encode/jpwl/pprotsel") + wxString::Format(wxT("%02d"), n), m_pprotsel[n]);
- OPJconfig->Write(wxT("encode/jpwl/ptileval") + wxString::Format(wxT("%02d"), n), m_ptileval[n]);
- OPJconfig->Write(wxT("encode/jpwl/ppackval") + wxString::Format(wxT("%02d"), n), m_ppackval[n]);
- OPJconfig->Write(wxT("encode/jpwl/sensisel") + wxString::Format(wxT("%02d"), n), m_sensisel[n]);
- OPJconfig->Write(wxT("encode/jpwl/stileval") + wxString::Format(wxT("%02d"), n), m_stileval[n]);
- }
-#endif // USE_JPWL
-
-#endif // OPJ_INICONFIG
-
- return 1;
-}
-
-void OPJViewerApp::ShowCmdLine(const wxCmdLineParser& parser)
-{
- wxString s = wxT("Command line parsed successfully:\nInput files: ");
-
- size_t count = parser.GetParamCount();
- for (size_t param = 0; param < count; param++) {
- s << parser.GetParam(param) << ';';
- m_filelist.Add(parser.GetParam(param));
- }
-
- //wxLogMessage(s);
-}
-
-// OPJFrame events
-
-// Event class for sending text messages between worker and GUI threads
-BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame)
- EVT_MENU(OPJFRAME_HELPABOUT, OPJFrame::OnAbout)
- EVT_MENU(OPJFRAME_FILEOPEN, OPJFrame::OnFileOpen)
- EVT_MENU(OPJFRAME_FILESAVEAS, OPJFrame::OnFileSaveAs)
- EVT_MENU(OPJFRAME_MEMORYOPEN, OPJFrame::OnMemoryOpen)
- EVT_SIZE(OPJFrame::OnSize)
- EVT_MENU(OPJFRAME_FILEEXIT, OPJFrame::OnQuit)
- EVT_MENU(OPJFRAME_FILECLOSE, OPJFrame::OnClose)
- EVT_MENU(OPJFRAME_VIEWZOOM, OPJFrame::OnZoom)
- EVT_MENU(OPJFRAME_VIEWFIT, OPJFrame::OnFit)
- EVT_MENU(OPJFRAME_VIEWRELOAD, OPJFrame::OnReload)
- EVT_MENU(OPJFRAME_VIEWPREVFRAME, OPJFrame::OnPrevFrame)
- EVT_MENU(OPJFRAME_VIEWHOMEFRAME, OPJFrame::OnHomeFrame)
- EVT_MENU(OPJFRAME_VIEWNEXTFRAME, OPJFrame::OnNextFrame)
- EVT_MENU(OPJFRAME_VIEWLESSLAYERS, OPJFrame::OnLessLayers)
- EVT_MENU(OPJFRAME_VIEWALLLAYERS, OPJFrame::OnAllLayers)
- EVT_MENU(OPJFRAME_VIEWMORELAYERS, OPJFrame::OnMoreLayers)
- EVT_MENU(OPJFRAME_VIEWLESSRES, OPJFrame::OnLessRes)
- EVT_MENU(OPJFRAME_VIEWFULLRES, OPJFrame::OnFullRes)
- EVT_MENU(OPJFRAME_VIEWMORERES, OPJFrame::OnMoreRes)
- EVT_MENU(OPJFRAME_VIEWPREVCOMP, OPJFrame::OnPrevComp)
- EVT_MENU(OPJFRAME_VIEWALLCOMPS, OPJFrame::OnAllComps)
- EVT_MENU(OPJFRAME_VIEWNEXTCOMP, OPJFrame::OnNextComp)
- EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser)
- EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker)
- EVT_MENU(OPJFRAME_FILETOGGLET, OPJFrame::OnToggleToolbar)
- EVT_MENU(OPJFRAME_SETSENCO, OPJFrame::OnSetsEnco)
- EVT_MENU(OPJFRAME_SETSDECO, OPJFrame::OnSetsDeco)
- EVT_SASH_DRAGGED_RANGE(OPJFRAME_BROWSEWIN, OPJFRAME_LOGWIN, OPJFrame::OnSashDrag)
- EVT_NOTEBOOK_PAGE_CHANGED(LEFT_NOTEBOOK_ID, OPJFrame::OnNotebook)
- EVT_MENU(OPJFRAME_THREADLOGMSG, OPJFrame::OnThreadLogmsg)
-END_EVENT_TABLE()
-
-// this is the frame constructor
-OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
- const wxPoint& pos, const wxSize& size, const long style)
- : wxMDIParentFrame(parent, id, title, pos, size, style)
-{
- // file menu and its items
- wxMenu *file_menu = new wxMenu;
-
- file_menu->Append(OPJFRAME_FILEOPEN, wxT("&Open\tCtrl+O"));
- file_menu->SetHelpString(OPJFRAME_FILEOPEN, wxT("Open one or more files"));
-
- file_menu->Append(OPJFRAME_MEMORYOPEN, wxT("&Memory\tCtrl+M"));
- file_menu->SetHelpString(OPJFRAME_MEMORYOPEN, wxT("Open a memory buffer"));
-
- file_menu->Append(OPJFRAME_FILECLOSE, wxT("&Close\tCtrl+C"));
- file_menu->SetHelpString(OPJFRAME_FILECLOSE, wxT("Close current image"));
-
- file_menu->AppendSeparator();
-
- file_menu->Append(OPJFRAME_FILESAVEAS, wxT("&Save as\tCtrl+S"));
- file_menu->SetHelpString(OPJFRAME_FILESAVEAS, wxT("Save the current image"));
- //file_menu->Enable(OPJFRAME_FILESAVEAS, false);
-
- file_menu->AppendSeparator();
-
- file_menu->Append(OPJFRAME_FILETOGGLEB, wxT("Toggle &browser\tCtrl+B"));
- file_menu->SetHelpString(OPJFRAME_FILETOGGLEB, wxT("Toggle the left browsing pane"));
-
- file_menu->Append(OPJFRAME_FILETOGGLEP, wxT("Toggle &peeker\tCtrl+P"));
- file_menu->SetHelpString(OPJFRAME_FILETOGGLEP, wxT("Toggle the bottom peeking pane"));
-
- file_menu->Append(OPJFRAME_FILETOGGLET, wxT("Toggle &toolbar\tCtrl+T"));
- file_menu->SetHelpString(OPJFRAME_FILETOGGLET, wxT("Toggle the toolbar"));
-
- file_menu->AppendSeparator();
-
- file_menu->Append(OPJFRAME_FILEEXIT, wxT("&Exit\tCtrl+Q"));
- file_menu->SetHelpString(OPJFRAME_FILEEXIT, wxT("Quit this program"));
-
- // view menu and its items
- wxMenu *view_menu = new wxMenu;
-
- view_menu->Append(OPJFRAME_VIEWZOOM, wxT("&Zoom\tCtrl+Z"));
- view_menu->SetHelpString(OPJFRAME_VIEWZOOM, wxT("Rescale the image"));
-
- view_menu->Append(OPJFRAME_VIEWFIT, wxT("Zoom to &fit\tCtrl+F"));
- view_menu->SetHelpString(OPJFRAME_VIEWFIT, wxT("Fit the image in canvas"));
-
- view_menu->Append(OPJFRAME_VIEWRELOAD, wxT("&Reload image\tCtrl+R"));
- view_menu->SetHelpString(OPJFRAME_VIEWRELOAD, wxT("Reload the current image"));
-
- view_menu->AppendSeparator();
-
- view_menu->Append(OPJFRAME_VIEWPREVFRAME, wxT("&Prev frame\tLeft"));
- view_menu->SetHelpString(OPJFRAME_VIEWPREVFRAME, wxT("View previous frame"));
-
- view_menu->Append(OPJFRAME_VIEWHOMEFRAME, wxT("&Start frame\tHome"));
- view_menu->SetHelpString(OPJFRAME_VIEWHOMEFRAME, wxT("View starting frame"));
-
- view_menu->Append(OPJFRAME_VIEWNEXTFRAME, wxT("&Next frame\tRight"));
- view_menu->SetHelpString(OPJFRAME_VIEWNEXTFRAME, wxT("View next frame"));
-
- view_menu->AppendSeparator();
-
- view_menu->Append(OPJFRAME_VIEWLESSLAYERS, wxT("&Less layers\t-"));
- view_menu->SetHelpString(OPJFRAME_VIEWLESSLAYERS, wxT("Remove a layer"));
-
- view_menu->Append(OPJFRAME_VIEWALLLAYERS, wxT("&All layers\t0"));
- view_menu->SetHelpString(OPJFRAME_VIEWALLLAYERS, wxT("Show all layers"));
-
- view_menu->Append(OPJFRAME_VIEWMORELAYERS, wxT("&More layers\t+"));
- view_menu->SetHelpString(OPJFRAME_VIEWMORELAYERS, wxT("Add a layer"));
-
- view_menu->AppendSeparator();
-
- view_menu->Append(OPJFRAME_VIEWLESSRES, wxT("&Less resolution\t<"));
- view_menu->SetHelpString(OPJFRAME_VIEWLESSRES, wxT("Reduce the resolution"));
-
- view_menu->Append(OPJFRAME_VIEWFULLRES, wxT("&Full resolution\tf"));
- view_menu->SetHelpString(OPJFRAME_VIEWFULLRES, wxT("Full resolution"));
-
- view_menu->Append(OPJFRAME_VIEWMORERES, wxT("&More resolution\t>"));
- view_menu->SetHelpString(OPJFRAME_VIEWMORERES, wxT("Increase the resolution"));
-
- view_menu->AppendSeparator();
-
- view_menu->Append(OPJFRAME_VIEWPREVCOMP, wxT("&Prev component\tDown"));
- view_menu->SetHelpString(OPJFRAME_VIEWPREVCOMP, wxT("View previous component"));
-
- view_menu->Append(OPJFRAME_VIEWALLCOMPS, wxT("&All components\ta"));
- view_menu->SetHelpString(OPJFRAME_VIEWALLCOMPS, wxT("View all components"));
-
- view_menu->Append(OPJFRAME_VIEWNEXTCOMP, wxT("&Next component\tUp"));
- view_menu->SetHelpString(OPJFRAME_VIEWNEXTCOMP, wxT("View next component"));
-
-
- // settings menu and its items
- wxMenu *sets_menu = new wxMenu;
-
- sets_menu->Append(OPJFRAME_SETSENCO, wxT("&Encoder\tCtrl+E"));
- sets_menu->SetHelpString(OPJFRAME_SETSENCO, wxT("Encoder settings"));
-
- sets_menu->Append(OPJFRAME_SETSDECO, wxT("&Decoder\tCtrl+D"));
- sets_menu->SetHelpString(OPJFRAME_SETSDECO, wxT("Decoder settings"));
-
- // help menu and its items
- wxMenu *help_menu = new wxMenu;
-
- help_menu->Append(OPJFRAME_HELPABOUT, wxT("&About\tF1"));
- help_menu->SetHelpString(OPJFRAME_HELPABOUT, wxT("Basic info on the program"));
-
- // the whole menubar
- wxMenuBar *menu_bar = new wxMenuBar;
- menu_bar->Append(file_menu, wxT("&File"));
- menu_bar->Append(view_menu, wxT("&View"));
- menu_bar->Append(sets_menu, wxT("&Settings"));
- menu_bar->Append(help_menu, wxT("&Help"));
-
- // Associate the menu bar with the frame
- SetMenuBar(menu_bar);
-
- // the status bar
- CreateStatusBar();
-
- // the toolbar
- tool_bar = new wxToolBar(this, OPJFRAME_TOOLBAR,
- wxDefaultPosition, wxDefaultSize,
- wxTB_HORIZONTAL | wxNO_BORDER);
- wxBitmap bmpOpen = wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpSaveAs = wxArtProvider::GetBitmap(wxART_FILE_SAVE_AS, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpZoom = wxArtProvider::GetBitmap(wxART_FIND, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpFit = wxArtProvider::GetBitmap(wxART_FIND_AND_REPLACE, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpReload = wxArtProvider::GetBitmap(wxART_EXECUTABLE_FILE, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpDecosettings = wxArtProvider::GetBitmap(wxART_REPORT_VIEW, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpEncosettings = wxArtProvider::GetBitmap(wxART_LIST_VIEW, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpPrevframe = wxArtProvider::GetBitmap(wxART_GO_BACK, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpHomeframe = wxArtProvider::GetBitmap(wxART_GO_HOME, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpNextframe = wxArtProvider::GetBitmap(wxART_GO_FORWARD, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpLesslayers = bmpPrevframe;
- wxBitmap bmpAlllayers = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpMorelayers = bmpNextframe;
- wxBitmap bmpLessres = bmpPrevframe;
- wxBitmap bmpFullres = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpMoreres = bmpNextframe;
- wxBitmap bmpPrevcomp = bmpPrevframe;
- wxBitmap bmpAllcomps = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
- wxDefaultSize);
- wxBitmap bmpNextcomp = bmpNextframe;
-
- tool_bar->AddTool(OPJFRAME_FILEOPEN, bmpOpen, wxT("Open"));
- tool_bar->AddTool(OPJFRAME_FILESAVEAS, bmpSaveAs, wxT("Save as "));
- //tool_bar->EnableTool(OPJFRAME_FILESAVEAS, false);
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_VIEWZOOM, bmpZoom, wxT("Zoom"));
- tool_bar->AddTool(OPJFRAME_VIEWFIT, bmpFit, wxT("Zoom to fit"));
- tool_bar->AddTool(OPJFRAME_VIEWRELOAD, bmpReload, wxT("Reload"));
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_SETSDECO, bmpDecosettings, wxT("Decoder settings"));
- tool_bar->AddTool(OPJFRAME_SETSENCO, bmpEncosettings, wxT("Encoder settings"));
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_VIEWPREVFRAME, bmpPrevframe, wxT("Previous frame"));
- tool_bar->AddTool(OPJFRAME_VIEWHOMEFRAME, bmpHomeframe, wxT("Starting frame"));
- tool_bar->AddTool(OPJFRAME_VIEWNEXTFRAME, bmpNextframe, wxT("Next frame"));
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_VIEWLESSLAYERS, bmpLesslayers, wxT("Remove a layer"));
- tool_bar->AddTool(OPJFRAME_VIEWALLLAYERS, bmpAlllayers, wxT("Show all layers"));
- tool_bar->AddTool(OPJFRAME_VIEWMORELAYERS, bmpMorelayers, wxT("Add a layer"));
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_VIEWLESSRES, bmpLessres, wxT("Reduce the resolution"));
- tool_bar->AddTool(OPJFRAME_VIEWFULLRES, bmpFullres, wxT("Full resolution"));
- tool_bar->AddTool(OPJFRAME_VIEWMORERES, bmpMoreres, wxT("Increase the resolution"));
- tool_bar->AddSeparator();
- tool_bar->AddTool(OPJFRAME_VIEWPREVCOMP, bmpPrevcomp, wxT("Previous component"));
- tool_bar->AddTool(OPJFRAME_VIEWALLCOMPS, bmpAllcomps, wxT("All components"));
- tool_bar->AddTool(OPJFRAME_VIEWNEXTCOMP, bmpNextcomp, wxT("Next component"));
- tool_bar->Realize();
-
- // associate the toolbar with the frame
- SetToolBar(tool_bar);
-
- // show the toolbar?
- if (!wxGetApp().m_showtoolbar)
- tool_bar->Show(false);
- else
- tool_bar->Show(true);
-
- // the logging window
- loggingWindow = new wxSashLayoutWindow(this, OPJFRAME_LOGWIN,
- wxDefaultPosition, wxSize(400, wxGetApp().m_peekerheight),
- wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN
- );
- loggingWindow->SetDefaultSize(wxSize(1000, wxGetApp().m_peekerheight));
- loggingWindow->SetOrientation(wxLAYOUT_HORIZONTAL);
- loggingWindow->SetAlignment(wxLAYOUT_BOTTOM);
- //loggingWindow->SetBackgroundColour(wxColour(0, 0, 255));
- loggingWindow->SetSashVisible(wxSASH_TOP, true);
-
- // show the logging?
- if (!wxGetApp().m_showpeeker)
- loggingWindow->Show(false);
- else
- loggingWindow->Show(true);
-
- // create the bottom notebook
- m_bookCtrlbottom = new wxNotebook(loggingWindow, BOTTOM_NOTEBOOK_ID,
- wxDefaultPosition, wxDefaultSize,
- wxBK_LEFT);
-
- // create the text control of the logger
- m_textCtrl = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY
- );
- m_textCtrl->SetValue(_T("Logging window\n"));
-
- // add it to the notebook
- m_bookCtrlbottom->AddPage(m_textCtrl, wxT("Log"));
-
- // create the text control of the browser
- m_textCtrlbrowse = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY | wxTE_RICH
- );
- wxFont *browsefont = new wxFont(wxNORMAL_FONT->GetPointSize(),
- wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
- m_textCtrlbrowse->SetDefaultStyle(wxTextAttr(wxNullColour, wxNullColour, *browsefont));
- m_textCtrlbrowse->AppendText(wxT("Browsing window\n"));
-
- // add it the notebook
- m_bookCtrlbottom->AddPage(m_textCtrlbrowse, wxT("Peek"), false);
-
- // the browser window
- markerTreeWindow = new wxSashLayoutWindow(this, OPJFRAME_BROWSEWIN,
- wxDefaultPosition, wxSize(wxGetApp().m_browserwidth, 30),
- wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN
- );
- markerTreeWindow->SetDefaultSize(wxSize(wxGetApp().m_browserwidth, 1000));
- markerTreeWindow->SetOrientation(wxLAYOUT_VERTICAL);
- markerTreeWindow->SetAlignment(wxLAYOUT_LEFT);
- //markerTreeWindow->SetBackgroundColour(wxColour(0, 255, 0));
- markerTreeWindow->SetSashVisible(wxSASH_RIGHT, true);
- markerTreeWindow->SetExtraBorderSize(0);
-
- // create the browser notebook
- m_bookCtrl = new wxNotebook(markerTreeWindow, LEFT_NOTEBOOK_ID,
- wxDefaultPosition, wxDefaultSize,
- wxBK_TOP);
-
- // show the browser?
- if (!wxGetApp().m_showbrowser)
- markerTreeWindow->Show(false);
- else
- markerTreeWindow->Show(true);
-
-#ifdef __WXMOTIF__
- // For some reason, we get a memcpy crash in wxLogStream::DoLogStream
- // on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc?
- delete wxLog::SetActiveTarget(new wxLogStderr);
-#else
- // set our text control as the log target
- wxLogTextCtrl *logWindow = new wxLogTextCtrl(m_textCtrl);
- delete wxLog::SetActiveTarget(logWindow);
-#endif
-
- // associate drop targets with the controls
- SetDropTarget(new OPJDnDFile(this));
-
-}
-
-// this is the frame destructor
-OPJFrame::~OPJFrame(void)
-{
- // save size settings
- GetSize(&(wxGetApp().m_framewidth), &(wxGetApp().m_frameheight));
-
- // delete all possible things
- delete m_bookCtrl;
- m_bookCtrl = NULL;
-
- delete markerTreeWindow;
- markerTreeWindow = NULL;
-
- delete m_textCtrl;
- m_textCtrl = NULL;
-
- delete m_bookCtrlbottom;
- m_bookCtrlbottom = NULL;
-
- delete loggingWindow;
- loggingWindow = NULL;
-}
-
-void OPJFrame::OnNotebook(wxNotebookEvent& event)
-{
- int sel = event.GetSelection();
- long childnum;
-
- m_bookCtrl->GetPageText(sel).ToLong(&childnum);
-
- if (m_childhash[childnum])
- m_childhash[childnum]->Activate();
-
- //wxLogMessage(wxT("Selection changed (now %d --> %d)"), childnum, m_childhash[childnum]->m_winnumber);
-
-}
-
-
-void OPJFrame::Resize(int number)
-{
- wxSize size = GetClientSize();
-}
-
-void OPJFrame::OnSetsEnco(wxCommandEvent& event)
-{
- int n;
-
- OPJEncoderDialog dialog(this, event.GetId());
-
- if (dialog.ShowModal() == wxID_OK) {
-
- // load settings
- wxGetApp().m_subsampling = dialog.m_subsamplingCtrl->GetValue();
- wxGetApp().m_origin = dialog.m_originCtrl->GetValue();
- wxGetApp().m_rates = dialog.m_rateCtrl->GetValue();
- wxGetApp().m_quality = dialog.m_qualityCtrl->GetValue();
- wxGetApp().m_enablequality = dialog.m_qualityRadio->GetValue();
- wxGetApp().m_multicomp = dialog.m_mctCheck->GetValue();
- wxGetApp().m_irreversible = dialog.m_irrevCheck->GetValue();
- wxGetApp().m_resolutions = dialog.m_resolutionsCtrl->GetValue();
- wxGetApp().m_cbsize = dialog.m_cbsizeCtrl->GetValue();
- wxGetApp().m_prsize = dialog.m_prsizeCtrl->GetValue();
- wxGetApp().m_tsize = dialog.m_tsizeCtrl->GetValue();
- wxGetApp().m_torigin = dialog.m_toriginCtrl->GetValue();
- wxGetApp().m_progression = dialog.progressionBox->GetSelection();
- wxGetApp().m_enablesop = dialog.m_sopCheck->GetValue();
- wxGetApp().m_enableeph = dialog.m_ephCheck->GetValue();
- wxGetApp().m_enablebypass = dialog.m_enablebypassCheck->GetValue();
- wxGetApp().m_enablereset = dialog.m_enableresetCheck->GetValue();
- wxGetApp().m_enablerestart = dialog.m_enablerestartCheck->GetValue();
- wxGetApp().m_enablevsc = dialog.m_enablevscCheck->GetValue();
- wxGetApp().m_enableerterm = dialog.m_enableertermCheck->GetValue();
- wxGetApp().m_enablesegmark = dialog.m_enablesegmarkCheck->GetValue();
- wxGetApp().m_enableidx = dialog.m_enableidxCheck->GetValue();
- wxGetApp().m_index = dialog.m_indexCtrl->GetValue();
- wxGetApp().m_enablecomm = dialog.m_enablecommCheck->GetValue();
- wxGetApp().m_comment = dialog.m_commentCtrl->GetValue();
- wxGetApp().m_enablepoc = dialog.m_enablepocCheck->GetValue();
- wxGetApp().m_poc = dialog.m_pocCtrl->GetValue();
-#ifdef USE_JPWL
- wxGetApp().m_enablejpwle = dialog.m_enablejpwlCheck->GetValue();
- for (n = 0; n < MYJPWL_MAX_NO_TILESPECS; n++) {
- wxGetApp().m_hprotsel[n] = dialog.m_hprotChoice[n]->GetSelection();
- wxGetApp().m_htileval[n] = dialog.m_htileCtrl[n]->GetValue();
- wxGetApp().m_pprotsel[n] = dialog.m_pprotChoice[n]->GetSelection();
- wxGetApp().m_ptileval[n] = dialog.m_ptileCtrl[n]->GetValue();
- wxGetApp().m_ppackval[n] = dialog.m_ppackCtrl[n]->GetValue();
- wxGetApp().m_sensisel[n] = dialog.m_sensiChoice[n]->GetSelection();
- wxGetApp().m_stileval[n] = dialog.m_stileCtrl[n]->GetValue();
- }
-#endif // USE_JPWL
- };
-}
-
-void OPJFrame::OnSetsDeco(wxCommandEvent& event)
-{
- OPJDecoderDialog dialog(this, event.GetId());
-
- if (dialog.ShowModal() == wxID_OK) {
-
- // load settings
- wxGetApp().m_enabledeco = dialog.m_enabledecoCheck->GetValue();
- wxGetApp().m_enableparse = dialog.m_enableparseCheck->GetValue();
- wxGetApp().m_resizemethod = dialog.m_resizeBox->GetSelection() - 1;
- wxGetApp().m_reducefactor = dialog.m_reduceCtrl->GetValue();
- wxGetApp().m_qualitylayers = dialog.m_layerCtrl->GetValue();
- wxGetApp().m_components = dialog.m_numcompsCtrl->GetValue();
- wxGetApp().m_framenum = dialog.m_framenumCtrl->GetValue();
-#ifdef USE_JPWL
- wxGetApp().m_enablejpwl = dialog.m_enablejpwlCheck->GetValue();
- wxGetApp().m_expcomps = dialog.m_expcompsCtrl->GetValue();
- wxGetApp().m_maxtiles = dialog.m_maxtilesCtrl->GetValue();
-#endif // USE_JPWL
-
- };
-}
-
-void OPJFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
-{
- Close(true);
-}
-
-void OPJFrame::OnClose(wxCommandEvent& WXUNUSED(event))
-{
- // current frame
- OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();
-
- if (!currframe)
- return;
-
- wxCloseEvent e;
- currframe->OnClose(e);
-}
-
-void OPJFrame::OnFit(wxCommandEvent& event)
-{
- OPJChildFrame *currchild;
- wxString eventstring = event.GetString();
-
- //wxLogMessage(wxT("OnFit:%d:%s"), event.GetInt(), eventstring);
-
- // current child
- if (event.GetInt() >= 1) {
- currchild = m_childhash[event.GetInt()];
- } else {
- currchild = (OPJChildFrame *) GetActiveChild();
- }
-
- // problems
- if (!currchild)
- return;
-
- // current canvas
- OPJCanvas *currcanvas = currchild->m_canvas;
-
- // find a fit-to-width zoom
- /*int zooml, wzooml, hzooml;
- wxSize clientsize = currcanvas->GetClientSize();
- wzooml = (int) ceil(100.0 * (double) (clientsize.GetWidth() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetWidth()));
- hzooml = (int) ceil(100.0 * (double) (clientsize.GetHeight() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetHeight()));
- zooml = wxMin(100, wxMin(wzooml, hzooml));*/
-
- // fit to width
- Rescale(-1, currchild);
-}
-
-void OPJFrame::OnZoom(wxCommandEvent& WXUNUSED(event))
-{
- // current frame
- OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();
-
- if (!currframe)
- return;
-
- // get the preferred zoom
- long zooml = wxGetNumberFromUser(wxT("Choose a scale between 5% and 300%"),
- wxT("Zoom (%)"),
- wxT("Image scale"),
- currframe->m_canvas->m_zooml, 5, 300, NULL, wxDefaultPosition);
-
- // rescale current frame image if necessary
- if (zooml >= 5) {
- Rescale(zooml, currframe);
- wxLogMessage(wxT("zoom to %d%%"), zooml);
- }
-}
-
-void OPJFrame::Rescale(int zooml, OPJChildFrame *currframe)
-{
- wxImage new_image = currframe->m_canvas->m_image100.ConvertToImage();
-
- // resizing enabled?
- if (wxGetApp().m_resizemethod == -1) {
-
- zooml = 100;
-
- } else {
-
- if (zooml < 0) {
- // find a fit-to-width zoom
- int wzooml, hzooml;
- //wxSize clientsize = currframe->m_canvas->GetClientSize();
- wxSize clientsize = currframe->m_frame->GetActiveChild()->GetClientSize();
- wzooml = (int) floor(100.0 * (double) clientsize.GetWidth() / (double) (2 * OPJ_CANVAS_BORDER + currframe->m_canvas->m_image100.GetWidth()));
- hzooml = (int) floor(100.0 * (double) clientsize.GetHeight() / (double) (2 * OPJ_CANVAS_BORDER + currframe->m_canvas->m_image100.GetHeight()));
- zooml = wxMin(100, wxMin(wzooml, hzooml));
- }
- }
-
- if (zooml != 100)
- new_image.Rescale((int) ((double) zooml * (double) new_image.GetWidth() / 100.0),
- (int) ((double) zooml * (double) new_image.GetHeight() / 100.0),
- wxGetApp().m_resizemethod ? wxIMAGE_QUALITY_HIGH : wxIMAGE_QUALITY_NORMAL);
- currframe->m_canvas->m_image = wxBitmap(new_image);
- currframe->m_canvas->SetScrollbars(20,
- 20,
- (int)(0.5 + (double) new_image.GetWidth() / 20.0),
- (int)(0.5 + (double) new_image.GetHeight() / 20.0)
- );
-
- currframe->m_canvas->Refresh();
-
- wxLogMessage(wxT("Rescale said %d%%"), zooml);
-
- // update zoom
- currframe->m_canvas->m_zooml = zooml;
-}
-
-
-void OPJFrame::OnReload(wxCommandEvent& event)
-{
- OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();
-
- if (currframe) {
- OPJDecoThread *dthread = currframe->m_canvas->CreateDecoThread();
-
- if (dthread->Run() != wxTHREAD_NO_ERROR)
- wxLogMessage(wxT("Can't start deco thread!"));
- else
- wxLogMessage(wxT("New deco thread started."));
-
- currframe->m_canvas->Refresh();
-
- // update zoom
- //currframe->m_canvas->m_zooml = zooml;
- }
-}
-
-void OPJFrame::OnPrevFrame(wxCommandEvent& event)
-{
- if (--wxGetApp().m_framenum < 0)
- wxGetApp().m_framenum = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnHomeFrame(wxCommandEvent& event)
-{
- wxGetApp().m_framenum = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnNextFrame(wxCommandEvent& event)
-{
- ++wxGetApp().m_framenum;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnLessLayers(wxCommandEvent& event)
-{
- if (--wxGetApp().m_qualitylayers < 1)
- wxGetApp().m_qualitylayers = 1;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnAllLayers(wxCommandEvent& event)
-{
- wxGetApp().m_qualitylayers = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnMoreLayers(wxCommandEvent& event)
-{
- ++wxGetApp().m_qualitylayers;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnLessRes(wxCommandEvent& event)
-{
- ++wxGetApp().m_reducefactor;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnFullRes(wxCommandEvent& event)
-{
- wxGetApp().m_reducefactor = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnMoreRes(wxCommandEvent& event)
-{
- if (--wxGetApp().m_reducefactor < 0)
- wxGetApp().m_reducefactor = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnPrevComp(wxCommandEvent& event)
-{
- if (--wxGetApp().m_components < 1)
- wxGetApp().m_components = 1;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnAllComps(wxCommandEvent& event)
-{
- wxGetApp().m_components = 0;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnNextComp(wxCommandEvent& event)
-{
- ++wxGetApp().m_components;
-
- wxCommandEvent e;
- OnReload(e);
-}
-
-void OPJFrame::OnToggleBrowser(wxCommandEvent& WXUNUSED(event))
-{
- if (markerTreeWindow->IsShown())
- markerTreeWindow->Show(false);
- else
- markerTreeWindow->Show(true);
-
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-
- wxGetApp().m_showbrowser = markerTreeWindow->IsShown();
-
- // Leaves bits of itself behind sometimes
- GetClientWindow()->Refresh();
-}
-
-void OPJFrame::OnTogglePeeker(wxCommandEvent& WXUNUSED(event))
-{
- if (loggingWindow->IsShown())
- loggingWindow->Show(false);
- else
- loggingWindow->Show(true);
-
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-
- wxGetApp().m_showpeeker = loggingWindow->IsShown();
-
- // Leaves bits of itself behind sometimes
- GetClientWindow()->Refresh();
-}
-
-void OPJFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event))
-{
- if (tool_bar->IsShown())
- tool_bar->Show(false);
- else
- tool_bar->Show(true);
-
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-
- wxGetApp().m_showtoolbar = tool_bar->IsShown();
-
- // Leaves bits of itself behind sometimes
- GetClientWindow()->Refresh();
-}
-
-void OPJFrame::OnSashDrag(wxSashEvent& event)
-{
- int wid, hei;
-
- if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)
- return;
-
- switch (event.GetId()) {
- case OPJFRAME_BROWSEWIN:
- {
- markerTreeWindow->SetDefaultSize(wxSize(event.GetDragRect().width, 1000));
- break;
- }
- case OPJFRAME_LOGWIN:
- {
- loggingWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height));
- break;
- }
- }
-
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-
- // Leaves bits of itself behind sometimes
- GetClientWindow()->Refresh();
-
- // update dimensions
- markerTreeWindow->GetSize(&wid, &hei);
- wxGetApp().m_browserwidth = wid;
-
- loggingWindow->GetSize(&wid, &hei);
- wxGetApp().m_peekerheight = hei;
-
-}
-
-void OPJFrame::OnThreadLogmsg(wxCommandEvent& event)
-{
-#if 1
- wxLogMessage(wxT("Frame got message from worker thread: %d"), event.GetInt());
- wxLogMessage(event.GetString());
-#else
- int n = event.GetInt();
- if ( n == -1 )
- {
- m_dlgProgress->Destroy();
- m_dlgProgress = (wxProgressDialog *)NULL;
-
- // the dialog is aborted because the event came from another thread, so
- // we may need to wake up the main event loop for the dialog to be
- // really closed
- wxWakeUpIdle();
- }
- else
- {
- if ( !m_dlgProgress->Update(n) )
- {
- wxCriticalSectionLocker lock(m_critsectWork);
-
- m_cancelled = true;
- }
- }
-#endif
-}
-
-
-// physically save the file
-void OPJFrame::SaveFile(wxArrayString paths, wxArrayString filenames)
-{
- size_t count = paths.GetCount();
- wxString msg, s;
-
- if (wxFile::Exists(paths[0].c_str())) {
-
- s.Printf(wxT("File %s already exists. Do you want to overwrite it?\n"), filenames[0].c_str());
- wxMessageDialog dialog3(this, s, _T("File exists"), wxYES_NO);
- if (dialog3.ShowModal() == wxID_NO)
- return;
- }
-
- /*s.Printf(_T("File %d: %s (%s)\n"), (int)0, paths[0].c_str(), filenames[0].c_str());
- msg += s;
-
- wxMessageDialog dialog2(this, msg, _T("Selected files"));
- dialog2.ShowModal();*/
-
- if (!GetActiveChild())
- return;
-
- ((OPJChildFrame *) GetActiveChild())->m_canvas->m_savename = paths[0];
-
- OPJEncoThread *ethread = ((OPJChildFrame *) GetActiveChild())->m_canvas->CreateEncoThread();
-
- if (ethread->Run() != wxTHREAD_NO_ERROR)
- wxLogMessage(wxT("Can't start enco thread!"));
- else
- wxLogMessage(wxT("New enco thread started."));
-
-
-}
-
-// physically open the files
-void OPJFrame::OpenFiles(wxArrayString paths, wxArrayString filenames)
-{
-
- size_t count = paths.GetCount();
- for (size_t n = 0; n < count; n++) {
-
- wxString msg, s;
- s.Printf(_T("File %d: %s (%s)\n"), (int)n, paths[n].c_str(), filenames[n].c_str());
-
- msg += s;
-
- /*wxMessageDialog dialog2(this, msg, _T("Selected files"));
- dialog2.ShowModal();*/
-
- // Make another frame, containing a canvas
- OPJChildFrame *subframe = new OPJChildFrame(this,
- paths[n],
- winNumber,
- wxT("Canvas Frame"),
- wxDefaultPosition, wxSize(300, 300),
- wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE
- );
- m_childhash[winNumber] = subframe;
-
- // create own marker tree
- m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, subframe, paths[n], wxT("Parsing..."), TreeTest_Ctrl,
- wxDefaultPosition, wxDefaultSize,
- wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER
- );
-
- m_bookCtrl->AddPage(m_treehash[winNumber], wxString::Format(wxT("%u"), winNumber), false);
-
- for (unsigned int p = 0; p < m_bookCtrl->GetPageCount(); p++) {
- if (m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), winNumber)) {
- m_bookCtrl->ChangeSelection(p);
- break;
- }
- }
-
- winNumber++;
- }
-}
-
-void OPJFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event))
-{
- wxString wildcards =
-#ifdef __WXMOTIF__
- wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.*j*2*");
-#else
-#if wxUSE_LIBOPENJPEG
- wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.jp2;*.j2k;*.j2c;*.mj2")
-#endif
-#if USE_MXF
- wxT("|MXF JPEG 2000 video (*.mxf)|*.mxf")
-#endif // USE_MXF
-#if wxUSE_LIBJPEG
- wxT("|JPEG files (*.jpg)|*.jpg")
-#endif
-#if OPJ_MANYFORMATS
- wxT("|BMP files (*.bmp)|*.bmp")
- wxT("|PNG files (*.png)|*.png")
- wxT("|GIF files (*.gif)|*.gif")
- wxT("|PNM files (*.pnm)|*.pnm")
- wxT("|TIFF files (*.tif,*.tiff)|*.tif*")
-#endif
- wxT("|All files|*");
-#endif
- wxFileDialog dialog(this, _T("Open image file(s)"),
- wxEmptyString, wxEmptyString, wildcards,
- wxFD_OPEN|wxFD_MULTIPLE);
-
- if (dialog.ShowModal() == wxID_OK) {
- wxArrayString paths, filenames;
-
- dialog.GetPaths(paths);
- dialog.GetFilenames(filenames);
-
- OpenFiles(paths, filenames);
- }
-
-}
-
-void OPJFrame::OnFileSaveAs(wxCommandEvent& WXUNUSED(event))
-{
- wxString wildcards =
-#ifdef wxUSE_LIBOPENJPEG
-#ifdef __WXMOTIF__
- wxT("JPEG 2000 codestream (*.j2k)|*.*j*2*");
-#else
- wxT("JPEG 2000 codestream (*.j2k)|*.j2k")
- wxT("|JPEG 2000 file format (*.jp2)|*.jp2");
-#endif
-#else
- wxT("Houston we have a problem");
-#endif
-
- wxFileDialog dialog(this, _T("Save image file"),
- wxEmptyString, wxEmptyString, wildcards,
- wxFD_SAVE);
-
- if (dialog.ShowModal() == wxID_OK) {
- wxArrayString paths, filenames;
-
- dialog.GetPaths(paths);
- dialog.GetFilenames(filenames);
-
- SaveFile(paths, filenames);
- }
-
-
-}
-
-void OPJFrame::OnMemoryOpen(wxCommandEvent& WXUNUSED(event))
-{
- // do nothing
- return;
-
- wxTextEntryDialog dialog(this, wxT("Memory HEX address range: start_address-stop_address"),
- wxT("Decode a memory buffer"),
- wxT("0x-0x"),
- wxOK | wxCANCEL | wxCENTRE,
- wxDefaultPosition);
-
- if (dialog.ShowModal() == wxID_OK) {
-
- }
-
-}
-
-BEGIN_EVENT_TABLE(OPJCanvas, wxScrolledWindow)
- EVT_MOUSE_EVENTS(OPJCanvas::OnEvent)
- EVT_MENU(OPJCANVAS_THREADSIGNAL, OPJCanvas::OnThreadSignal)
-END_EVENT_TABLE()
-
-// Define a constructor for my canvas
-OPJCanvas::OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size)
- : wxScrolledWindow(parent, wxID_ANY, pos, size,
- wxSUNKEN_BORDER | wxNO_FULL_REPAINT_ON_RESIZE)
-{
- SetBackgroundColour(OPJ_CANVAS_COLOUR);
-
- m_fname = fname;
- m_childframe = (OPJChildFrame *) parent;
- // 100% zoom
- m_zooml = 100;
-
-
- OPJDecoThread *dthread = CreateDecoThread();
-
- if (dthread->Run() != wxTHREAD_NO_ERROR)
- wxLogMessage(wxT("Can't start deco thread!"));
- else
- wxLogMessage(wxT("New deco thread started."));
-
- // 100% zoom
- //m_zooml = 100;
-
-}
-
-OPJDecoThread *OPJCanvas::CreateDecoThread(void)
-{
- OPJDecoThread *dthread = new OPJDecoThread(this);
-
- if (dthread->Create() != wxTHREAD_NO_ERROR)
- wxLogError(wxT("Can't create deco thread!"));
-
- wxCriticalSectionLocker enter(wxGetApp().m_deco_critsect);
- wxGetApp().m_deco_threads.Add(dthread);
-
- return dthread;
-}
-
-OPJEncoThread *OPJCanvas::CreateEncoThread(void)
-{
- OPJEncoThread *ethread = new OPJEncoThread(this);
-
- if (ethread->Create() != wxTHREAD_NO_ERROR)
- wxLogError(wxT("Can't create enco thread!"));
-
- wxCriticalSectionLocker enter(wxGetApp().m_enco_critsect);
- wxGetApp().m_enco_threads.Add(ethread);
-
- return ethread;
-}
-
-#define activeoverlay 0
-// Define the repainting behaviour
-void OPJCanvas::OnDraw(wxDC& dc)
-{
- if (m_image.Ok()) {
- dc.DrawBitmap(m_image, OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER);
-
- if (activeoverlay) {
- dc.SetPen(*wxRED_PEN);
- dc.SetBrush(*wxTRANSPARENT_BRUSH);
- //int tw, th;
- dc.DrawRectangle(OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER,
- (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_twidth / 100.0),
- (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_theight / 100.0));
- }
-
- } else {
- dc.SetFont(*wxSWISS_FONT);
- dc.SetPen(*wxBLACK_PEN);
-#ifdef __WXGTK__
- dc.DrawText(_T("Decoding image, please wait... (press \"Zoom to Fit\" to show the image)"), 40, 50);
-#else
- dc.DrawText(_T("Decoding image, please wait..."), 40, 50);
-#endif
- }
-}
-
-// This implements a tiny doodling program! Drag the mouse using
-// the left button.
-void OPJCanvas::OnEvent(wxMouseEvent& event)
-{
-#if USE_PENCIL_ON_CANVAS
- wxClientDC dc(this);
- PrepareDC(dc);
-
- wxPoint pt(event.GetLogicalPosition(dc));
-
- if ((xpos > -1) && (ypos > -1) && event.Dragging()) {
- dc.SetPen(*wxRED_PEN);
- dc.DrawLine(xpos, ypos, pt.x, pt.y);
- }
- xpos = pt.x;
- ypos = pt.y;
-#endif
-}
-
-void OPJFrame::OnSize(wxSizeEvent& WXUNUSED(event))
-{
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-}
-
-void OPJCanvas::OnThreadSignal(wxCommandEvent& event)
-{
-#if 1
- wxLogMessage(wxT("Canvas got signal from deco thread: %d"), event.GetInt());
- wxLogMessage(event.GetString());
-#else
- int n = event.GetInt();
- if ( n == -1 )
- {
- m_dlgProgress->Destroy();
- m_dlgProgress = (wxProgressDialog *)NULL;
-
- // the dialog is aborted because the event came from another thread, so
- // we may need to wake up the main event loop for the dialog to be
- // really closed
- wxWakeUpIdle();
- }
- else
- {
- if ( !m_dlgProgress->Update(n) )
- {
- wxCriticalSectionLocker lock(m_critsectWork);
-
- m_cancelled = true;
- }
- }
-#endif
-}
-
-
-// Note that OPJFRAME_FILEOPEN and OPJFRAME_HELPABOUT commands get passed
-// to the parent window for processing, so no need to
-// duplicate event handlers here.
-
-BEGIN_EVENT_TABLE(OPJChildFrame, wxMDIChildFrame)
- /*EVT_MENU(SASHTEST_CHILD_QUIT, OPJChildFrame::OnQuit)*/
- EVT_CLOSE(OPJChildFrame::OnClose)
- EVT_SET_FOCUS(OPJChildFrame::OnGotFocus)
- EVT_KILL_FOCUS(OPJChildFrame::OnLostFocus)
-END_EVENT_TABLE()
-
-OPJChildFrame::OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size,
-const long style):
- wxMDIChildFrame(parent, wxID_ANY, title, pos, size, style)
-{
- m_frame = (OPJFrame *) parent;
- m_canvas = NULL;
- //my_children.Append(this);
- m_fname = fname;
- m_winnumber = winnumber;
- SetTitle(wxString::Format(_T("%d: "), m_winnumber) + m_fname.GetFullName());
-
- // Give it an icon (this is ignored in MDI mode: uses resources)
-#ifdef __WXMSW__
- SetIcon(wxIcon(wxT("OPJChild16")));
-#endif
-
- // Give it a status line
- /*CreateStatusBar();*/
-
- int width, height;
- GetClientSize(&width, &height);
-
- OPJCanvas *canvas = new OPJCanvas(fname, this, wxPoint(0, 0), wxSize(width, height));
-#if USE_PENCIL_ON_CANVAS
- canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));
-#endif
- m_canvas = canvas;
-
- // Give it scrollbars
- canvas->SetScrollbars(20, 20, 5, 5);
-
- Show(true);
- Maximize(true);
-
- /*wxLogError(wxString::Format(wxT("Created tree %d (0x%x)"), m_winnumber, m_frame->m_treehash[m_winnumber]));*/
-
-}
-
-OPJChildFrame::~OPJChildFrame(void)
-{
- //my_children.DeleteObject(this);
-}
-
-
-void OPJChildFrame::OnClose(wxCloseEvent& event)
-{
- for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {
- if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) {
- m_frame->m_bookCtrl->DeletePage(p);
- break;
- }
- }
- Destroy();
-
- wxLogMessage(wxT("Closed: %d"), m_winnumber);
-}
-
-void OPJChildFrame::OnActivate(wxActivateEvent& event)
-{
- /*if (event.GetActive() && m_canvas)
- m_canvas->SetFocus();*/
-}
-
-void OPJChildFrame::OnGotFocus(wxFocusEvent& event)
-{
- // we need to check if the notebook is being destroyed or not
- if (!m_frame->m_bookCtrl)
- return;
-
- for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {
-
- if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) {
- m_frame->m_bookCtrl->ChangeSelection(p);
- break;
- }
-
- }
-
- //wxLogMessage(wxT("Got focus: %d (%x)"), m_winnumber, event.GetWindow());
-}
-
-void OPJChildFrame::OnLostFocus(wxFocusEvent& event)
-{
- //wxLogMessage(wxT("Lost focus: %d (%x)"), m_winnumber, event.GetWindow());
-}
-
-
-////////////////////////////////
-// drag and drop
-////////////////////////////////
-
-bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
-{
- /*size_t nFiles = filenames.GetCount();
- wxString str;
- str.Printf( _T("%d files dropped\n"), (int)nFiles);
- for ( size_t n = 0; n < nFiles; n++ ) {
- str << filenames[n] << wxT("\n");
- }
- wxLogMessage(str);*/
- m_pOwner->OpenFiles(filenames, filenames);
-
- return true;
-}
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.h b/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.h
deleted file mode 100644
index b60e0d14..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.h
+++ /dev/null
@@ -1,869 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: sashtest.h
-// Purpose: Layout window/sash sample
-// Author: Julian Smart
-// Modified by:
-// Created: 04/01/98
-// RCS-ID: $Id: sashtest.h,v 1.5 2005/06/02 12:04:24 JS Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: treectrl.h
-// Purpose: wxTreeCtrl sample
-// Author: Julian Smart
-// Modified by:
-// Created: 04/01/98
-// RCS-ID: $Id: treetest.h,v 1.50 2006/11/04 11:26:51 VZ Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Name: dialogs.h
-// Purpose: Common dialogs demo
-// Author: Julian Smart
-// Modified by: ABX (2004) - adjustementd for conditional building
-// Created: 04/01/98
-// RCS-ID: $Id: dialogs.h,v 1.50 2006/10/08 14:12:59 VZ Exp $
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef __OPJ_VIEWER_H__
-#define __OPJ_VIEWER_H__
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#include "wx/mdi.h"
-#endif
-
-#include "wx/toolbar.h"
-#include "wx/laywin.h"
-#include "wx/treectrl.h"
-
-#include "icon1.xpm"
-#include "icon2.xpm"
-#include "icon3.xpm"
-#include "icon4.xpm"
-#include "icon5.xpm"
-
-#include "wx/filedlg.h"
-#include "wx/toolbar.h"
-#include <wx/filename.h>
-#include <wx/busyinfo.h>
-#include <wx/cmdline.h>
-#include <wx/file.h>
-#include "wx/notebook.h"
-#include <wx/numdlg.h>
-
-#include "wx/propdlg.h"
-#include "wx/spinctrl.h"
-
-#include <wx/dnd.h>
-#include "wx/wxhtml.h"
-#include "wx/statline.h"
-#include <wx/fs_mem.h>
-
-#include <wx/imaglist.h>
-
-#include "wx/toolbar.h"
-#include "wx/artprov.h"
-
-#include "openjp2/openjpeg.h"
-
-//#include "imagj2k.h"
-//#include "imagjp2.h"
-//#include "imagmj2.h"
-#include "imagjpeg2000.h"
-#ifdef USE_MXF
-#include "imagmxf.h"
-#endif // USE_MXF
-
-#ifdef __WXMSW__
-typedef unsigned __int64 int8byte;
-#endif // __WXMSW__
-
-#ifdef __WXGTK__
-typedef unsigned long long int8byte;
-#endif // __WXGTK__
-
-#define USE_GENERIC_TREECTRL 0
-#define USE_PENCIL_ON_CANVAS 0
-
-#if USE_GENERIC_TREECTRL
-#include "wx/generic/treectlg.h"
-#ifndef wxTreeCtrl
-#define wxTreeCtrl wxGenericTreeCtrl
-#define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
-#endif
-#endif
-
-#define OPJ_APPLICATION wxT("OPJViewer")
-#define OPJ_APPLICATION_NAME wxT("OpenJPEG Viewer")
-#define OPJ_APPLICATION_VERSION wxT("0.4 beta")
-#define OPJ_APPLICATION_TITLEBAR OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION
-#define OPJ_APPLICATION_COPYRIGHT wxT("(C) 2007-2008, Giuseppe Baruffa")
-#define OPJ_APPLICATION_VENDOR wxT("OpenJPEG")
-
-#ifdef __WXMSW__
-#define OPJ_APPLICATION_PLATFORM wxT("Windows")
-#endif
-
-#ifdef __WXGTK__
-#define OPJ_APPLICATION_PLATFORM wxT("Linux")
-#endif
-
-#define OPJ_FRAME_WIDTH 800
-#define OPJ_FRAME_HEIGHT 600
-
-#define OPJ_BROWSER_WIDTH 300
-#define OPJ_PEEKER_HEIGHT 130
-
-#define OPJ_CANVAS_BORDER 10
-#define OPJ_CANVAS_COLOUR *wxWHITE
-
-
-
-#ifdef USE_JPWL
-
-//#define MYJPWL_MAX_NO_TILESPECS JPWL_MAX_NO_TILESPECS
-#define MYJPWL_MAX_NO_TILESPECS 4
-
-#endif // USE_JPWL
-
-
-class OPJDecoThread;
-class OPJEncoThread;
-class OPJParseThread;
-WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread);
-class OPJChildFrame;
-
-//////////////////////////////////
-// this is our main application //
-//////////////////////////////////
-class OPJViewerApp: public wxApp
-{
- // public methods and variables
-public:
-
- // class constructor
- OPJViewerApp()
- {
- m_showImages = true;
- m_showButtons = false;
- }
-
- // other methods
- bool OnInit(void);
- int OnExit(void);
- void SetShowImages(bool show)
- {
- m_showImages = show;
- }
- bool ShowImages() const
- {
- return m_showImages;
- }
- void ShowCmdLine(const wxCmdLineParser& parser);
-
- // all the threads currently alive - as soon as the thread terminates, it's
- // removed from the array
- wxArrayThread m_deco_threads, m_parse_threads, m_enco_threads;
-
- // crit section protects access to all of the arrays below
- wxCriticalSection m_deco_critsect, m_parse_critsect, m_enco_critsect;
-
- // semaphore used to wait for the threads to exit, see OPJFrame::OnQuit()
- wxSemaphore m_deco_semAllDone, m_parse_semAllDone, m_enco_semAllDone;
-
- // the last exiting thread should post to m_semAllDone if this is true
- // (protected by the same m_critsect)
- bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone,
- m_enco_waitingUntilAllDone;
-
- // the list of all filenames written in the command line
- wxArrayString m_filelist;
-
- // displaying engine parameters
- int m_resizemethod;
-
- // decoding engine parameters
- bool m_enabledeco, m_enableparse;
- int m_reducefactor, m_qualitylayers, m_components, m_framenum;
-#ifdef USE_JPWL
- bool m_enablejpwl, m_enablejpwle;
- int m_expcomps, m_maxtiles;
-#endif // USE_JPWL
- int m_framewidth, m_frameheight;
-
- // encoding engine parameters
- wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality;
- wxString m_cbsize, m_prsize, m_tsize, m_torigin, m_poc;
- bool m_enablecomm, m_enableidx, m_multicomp, m_irreversible, m_enablesop,
- m_enableeph;
- bool m_enablebypass, m_enablereset, m_enablerestart, m_enablevsc,
- m_enableerterm;
- bool m_enablesegmark, m_enablepoc;
- bool m_enablequality;
- int m_resolutions, m_progression;
-#ifdef USE_JPWL
- int m_hprotsel[MYJPWL_MAX_NO_TILESPECS], m_pprotsel[MYJPWL_MAX_NO_TILESPECS];
- int m_htileval[MYJPWL_MAX_NO_TILESPECS], m_ptileval[MYJPWL_MAX_NO_TILESPECS],
- m_ppackval[MYJPWL_MAX_NO_TILESPECS];
- int m_sensisel[MYJPWL_MAX_NO_TILESPECS], m_stileval[MYJPWL_MAX_NO_TILESPECS];
-#endif // USE_JPWL
-
- // some layout settings
- bool m_showtoolbar, m_showbrowser, m_showpeeker;
- int m_browserwidth, m_peekerheight;
-
- // application configuration
- wxConfig *OPJconfig;
-
- // private methods and variables
-private:
- bool m_showImages, m_showButtons;
-
-};
-
-DECLARE_APP(OPJViewerApp)
-
-///////////////////////////////////////////
-// this canvas is used to draw the image //
-///////////////////////////////////////////
-class OPJCanvas: public wxScrolledWindow
-{
- // public methods and variables
-public:
-
- // class constructor
- OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos,
- const wxSize& size);
-
- virtual void OnDraw(wxDC& dc);
- void OnEvent(wxMouseEvent& event);
- void WriteText(const wxString& text)
- {
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif //__WXGTK__
- wxLogMessage(text);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif //__WXGTK__
- }
-
- void OnThreadSignal(wxCommandEvent& event);
-
- OPJDecoThread *CreateDecoThread(void);
- OPJEncoThread *CreateEncoThread(void);
-
-
- OPJChildFrame *m_childframe;
-
- wxBitmap m_image, m_image100;
- wxFileName m_fname, m_savename;
- long m_zooml;
-
- DECLARE_EVENT_TABLE()
-};
-
-///////////////////////////////////////////////////
-// the data associated to each tree leaf or node //
-///////////////////////////////////////////////////
-class OPJMarkerData : public wxTreeItemData
-{
- // public methods and variables
-public:
-
- // class constructor
- OPJMarkerData(const wxString& desc, const wxString& fname = wxT(""),
- wxFileOffset start = 0, wxFileOffset length = 0) : m_desc(desc),
- m_filestring(fname)
- {
- m_start = start;
- m_length = length;
- }
-
- void ShowInfo(wxTreeCtrl *tree);
- const wxChar *GetDesc1() const
- {
- return m_desc.c_str();
- }
- const wxChar *GetDesc2() const
- {
- return m_filestring.c_str();
- }
- wxFileOffset m_start, m_length;
- wxString m_desc;
-
- // private methods and variables
-private:
- wxString m_filestring;
-};
-
-
-class OPJMarkerTree : public wxTreeCtrl
-{
-public:
- enum {
- TreeCtrlIcon_File,
- TreeCtrlIcon_FileSelected,
- TreeCtrlIcon_Folder,
- TreeCtrlIcon_FolderSelected,
- TreeCtrlIcon_FolderOpened
- };
-
- OPJMarkerTree() { };
- OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname,
- wxString name, const wxWindowID id,
- const wxPoint& pos, const wxSize& size,
- long style);
- virtual ~OPJMarkerTree() {};
- OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00,
- OPJChildFrame *subframe = NULL);
- void WriteText(const wxString& text)
- {
- wxMutexGuiEnter();
- wxLogMessage(text);
- wxMutexGuiLeave();
- }
-
- wxFileName m_fname;
- wxTextCtrl *m_peektextCtrl;
- OPJChildFrame *m_childframe;
-
- /*void OnBeginDrag(wxTreeEvent& event);
- void OnBeginRDrag(wxTreeEvent& event);
- void OnEndDrag(wxTreeEvent& event);*/
- /*void OnBeginLabelEdit(wxTreeEvent& event);
- void OnEndLabelEdit(wxTreeEvent& event);*/
- /*void OnDeleteItem(wxTreeEvent& event);*/
- /*void OnContextMenu(wxContextMenuEvent& event);*/
- void OnItemMenu(wxTreeEvent& event);
- /*void OnGetInfo(wxTreeEvent& event);
- void OnSetInfo(wxTreeEvent& event);*/
- /*void OnItemExpanded(wxTreeEvent& event);*/
- void OnItemExpanding(wxTreeEvent& event);
- /*void OnItemCollapsed(wxTreeEvent& event);
- void OnItemCollapsing(wxTreeEvent& event);*/
- void OnSelChanged(wxTreeEvent& event);
- /*void OnSelChanging(wxTreeEvent& event);*/
- /*void OnTreeKeyDown(wxTreeEvent& event);*/
- /*void OnItemActivated(wxTreeEvent& event);*/
- /*void OnItemRClick(wxTreeEvent& event);*/
- /*void OnRMouseDown(wxMouseEvent& event);
- void OnRMouseUp(wxMouseEvent& event);
- void OnRMouseDClick(wxMouseEvent& event);*/
- /*void GetItemsRecursively(const wxTreeItemId& idParent,
- wxTreeItemIdValue cookie = 0);*/
-
- void CreateImageList(int size = 16);
- void CreateButtonsImageList(int size = 11);
-
- /*void AddTestItemsToTree(size_t numChildren, size_t depth);*/
- /*void DoSortChildren(const wxTreeItemId& item, bool reverse = false)
- { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }*/
- /*void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); }*/
- /*void DoToggleIcon(const wxTreeItemId& item);*/
- /*void ShowMenu(wxTreeItemId id, const wxPoint& pt);*/
-
- int ImageSize(void) const
- {
- return m_imageSize;
- }
-
- void SetLastItem(wxTreeItemId id)
- {
- m_lastItem = id;
- }
-
-protected:
- /*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/
-
- // is this the test item which we use in several event handlers?
- /*bool IsTestItem(const wxTreeItemId& item)
- {
- // the test item is the first child folder
- return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);
- }*/
-
-private:
- /*void AddItemsRecursively(const wxTreeItemId& idParent,
- size_t nChildren,
- size_t depth,
- size_t folder);*/
-
- void LogEvent(const wxChar *name, const wxTreeEvent& event);
-
- int m_imageSize; // current size of images
- bool m_reverseSort; // flag for OnCompareItems
- wxTreeItemId m_lastItem, // for OnEnsureVisible()
- m_draggedItem; // item being dragged right now
-
- // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
- // if you want your overloaded OnCompareItems() to be called.
- // OTOH, if you don't want it you may omit the next line - this will
- // make default (alphabetical) sorting much faster under wxMSW.
- DECLARE_DYNAMIC_CLASS(OPJMarkerTree)
- DECLARE_EVENT_TABLE()
-};
-
-// this hash map stores all the trees of currently opened images, with an integer key
-WX_DECLARE_HASH_MAP(int, OPJMarkerTree*, wxIntegerHash, wxIntegerEqual,
- OPJMarkerTreeHash);
-
-// this hash map stores all the children of currently opened images, with an integer key
-WX_DECLARE_HASH_MAP(int, OPJChildFrame*, wxIntegerHash, wxIntegerEqual,
- OPJChildFrameHash);
-
-// Define a new frame
-class OPJFrame: public wxMDIParentFrame
-{
-public:
-
- OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
- const wxPoint& pos, const wxSize& size, const long style);
-
- ~OPJFrame(void);
- void OnSize(wxSizeEvent& WXUNUSED(event));
- void OnAbout(wxCommandEvent& WXUNUSED(event));
- void OnFileOpen(wxCommandEvent& WXUNUSED(event));
- void OnFileSaveAs(wxCommandEvent& WXUNUSED(event));
- void OnMemoryOpen(wxCommandEvent& WXUNUSED(event));
- void OnQuit(wxCommandEvent& WXUNUSED(event));
- void OnClose(wxCommandEvent& WXUNUSED(event));
- void OnZoom(wxCommandEvent& WXUNUSED(event));
- void OnFit(wxCommandEvent& event);
- void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));
- void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));
- void OnToggleToolbar(wxCommandEvent& WXUNUSED(event));
- void OnReload(wxCommandEvent& event);
- void OnPrevFrame(wxCommandEvent& event);
- void OnHomeFrame(wxCommandEvent& event);
- void OnNextFrame(wxCommandEvent& event);
- void OnLessLayers(wxCommandEvent& event);
- void OnAllLayers(wxCommandEvent& event);
- void OnMoreLayers(wxCommandEvent& event);
- void OnLessRes(wxCommandEvent& event);
- void OnFullRes(wxCommandEvent& event);
- void OnMoreRes(wxCommandEvent& event);
- void OnPrevComp(wxCommandEvent& event);
- void OnAllComps(wxCommandEvent& event);
- void OnNextComp(wxCommandEvent& event);
- void OnSetsEnco(wxCommandEvent& event);
- void OnSetsDeco(wxCommandEvent& event);
- void OnSashDrag(wxSashEvent& event);
- void OpenFiles(wxArrayString paths, wxArrayString filenames);
- void SaveFile(wxArrayString paths, wxArrayString filenames);
- void OnNotebook(wxNotebookEvent& event);
- void Rescale(int scale, OPJChildFrame *child);
- void OnThreadLogmsg(wxCommandEvent& event);
-
- OPJMarkerTreeHash m_treehash;
- OPJChildFrameHash m_childhash;
- wxSashLayoutWindow* markerTreeWindow;
- wxSashLayoutWindow* loggingWindow;
- wxToolBar* tool_bar;
- void Resize(int number);
- wxNotebook *m_bookCtrl;
- wxNotebook *m_bookCtrlbottom;
- wxTextCtrl *m_textCtrlbrowse;
-
-private:
- void TogStyle(int id, long flag);
-
- void DoSort(bool reverse = false);
-
- wxPanel *m_panel;
- wxTextCtrl *m_textCtrl;
-
- void DoSetBold(bool bold = true);
-
-protected:
- wxSashLayoutWindow* m_topWindow;
- wxSashLayoutWindow* m_leftWindow2;
-
- DECLARE_EVENT_TABLE()
-};
-
-class OPJChildFrame: public wxMDIChildFrame
-{
-public:
- OPJCanvas *m_canvas;
- OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber,
- const wxString& title, const wxPoint& pos, const wxSize& size,
- const long style);
- ~OPJChildFrame(void);
- void OnActivate(wxActivateEvent& event);
- /*void OnQuit(wxCommandEvent& WXUNUSED(event));*/
- void OnClose(wxCloseEvent& event);
- void OnGotFocus(wxFocusEvent& event);
- void OnLostFocus(wxFocusEvent& event);
- OPJFrame *m_frame;
- wxFileName m_fname;
- int m_winnumber;
-
- unsigned long m_twidth, m_theight, m_tx, m_ty;
-
- DECLARE_EVENT_TABLE()
-};
-
-// frame and main menu ids
-enum {
- OPJFRAME_FILEEXIT = wxID_EXIT,
- OPJFRAME_HELPABOUT = wxID_ABOUT,
- OPJFRAME_FILEOPEN,
- OPJFRAME_MEMORYOPEN,
- OPJFRAME_FILESAVEAS,
- OPJFRAME_FILETOGGLEB,
- OPJFRAME_FILETOGGLEP,
- OPJFRAME_FILETOGGLET,
- OPJFRAME_VIEWZOOM,
- OPJFRAME_VIEWFIT,
- OPJFRAME_VIEWRELOAD,
- OPJFRAME_VIEWPREVFRAME,
- OPJFRAME_VIEWHOMEFRAME,
- OPJFRAME_VIEWNEXTFRAME,
- OPJFRAME_VIEWLESSLAYERS,
- OPJFRAME_VIEWALLLAYERS,
- OPJFRAME_VIEWMORELAYERS,
- OPJFRAME_VIEWLESSRES,
- OPJFRAME_VIEWFULLRES,
- OPJFRAME_VIEWMORERES,
- OPJFRAME_VIEWPREVCOMP,
- OPJFRAME_VIEWALLCOMPS,
- OPJFRAME_VIEWNEXTCOMP,
- OPJFRAME_FILECLOSE,
- OPJFRAME_SETSENCO,
- OPJFRAME_SETSDECO,
-
- OPJFRAME_BROWSEWIN = 10000,
- OPJFRAME_LOGWIN,
- OPJFRAME_TOOLBAR,
-
- OPJFRAME_THREADLOGMSG,
- OPJCANVAS_THREADSIGNAL
-};
-
-
-// menu and control ids
-enum {
- TreeTest_Quit = wxID_EXIT,
- TreeTest_About = wxID_ABOUT,
- TreeTest_TogButtons = wxID_HIGHEST,
- TreeTest_TogTwist,
- TreeTest_TogLines,
- TreeTest_TogEdit,
- TreeTest_TogHideRoot,
- TreeTest_TogRootLines,
- TreeTest_TogBorder,
- TreeTest_TogFullHighlight,
- TreeTest_SetFgColour,
- TreeTest_SetBgColour,
- TreeTest_ResetStyle,
- TreeTest_Highlight,
- TreeTest_Dump,
- TreeTest_DumpSelected,
- TreeTest_Count,
- TreeTest_CountRec,
- TreeTest_Sort,
- TreeTest_SortRev,
- TreeTest_SetBold,
- TreeTest_ClearBold,
- TreeTest_Rename,
- TreeTest_Delete,
- TreeTest_DeleteChildren,
- TreeTest_DeleteAll,
- TreeTest_Recreate,
- TreeTest_ToggleImages,
- TreeTest_ToggleButtons,
- TreeTest_SetImageSize,
- TreeTest_ToggleSel,
- TreeTest_CollapseAndReset,
- TreeTest_EnsureVisible,
- TreeTest_AddItem,
- TreeTest_InsertItem,
- TreeTest_IncIndent,
- TreeTest_DecIndent,
- TreeTest_IncSpacing,
- TreeTest_DecSpacing,
- TreeTest_ToggleIcon,
- TreeTest_Select,
- TreeTest_Unselect,
- TreeTest_SelectRoot,
- TreeTest_Ctrl = 1000,
- BOTTOM_NOTEBOOK_ID,
- LEFT_NOTEBOOK_ID
-};
-
-class OPJEncoThread : public wxThread
-{
-public:
- OPJEncoThread(OPJCanvas *canvas);
-
- // thread execution starts here
- virtual void *Entry();
-
- // called when the thread exits - whether it terminates normally or is
- // stopped with Delete() (but not when it is Kill()ed!)
- virtual void OnExit();
-
- // write something to the text control
- void WriteText(const wxString& text);
-
-public:
- unsigned m_count;
- OPJCanvas *m_canvas;
-};
-
-class OPJDecoThread : public wxThread
-{
-public:
- OPJDecoThread(OPJCanvas *canvas);
-
- // thread execution starts here
- virtual void *Entry();
-
- // called when the thread exits - whether it terminates normally or is
- // stopped with Delete() (but not when it is Kill()ed!)
- virtual void OnExit();
-
- // write something to the text control
- void WriteText(const wxString& text);
-
-public:
- unsigned m_count;
- OPJCanvas *m_canvas;
-};
-
-class OPJParseThread : public wxThread
-{
-public:
- OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00);
-
- // thread execution starts here
- virtual void *Entry();
-
- // called when the thread exits - whether it terminates normally or is
- // stopped with Delete() (but not when it is Kill()ed!)
- virtual void OnExit();
-
- // write something to the text control
- void WriteText(const wxString& text);
- void LoadFile(wxFileName fname);
- void ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length,
- wxTreeItemId parentid);
- void ParseJP2File(wxFile *fileid, wxFileOffset filepoint,
- wxFileOffset filelimit, wxTreeItemId parentid);
-
- unsigned m_count;
- OPJMarkerTree *m_tree;
- wxTreeItemId m_parentid;
-
-private:
- int jpeg2000parse(wxFile *fileid, wxFileOffset filepoint,
- wxFileOffset filelimit,
- wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);
- int box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint,
- wxFileOffset filelimit,
- wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);
-
-};
-
-
-// Drag and drop files target
-class OPJDnDFile: public wxFileDropTarget
-{
-public:
- OPJDnDFile(OPJFrame *pOwner)
- {
- m_pOwner = pOwner;
- }
- virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);
-
-private:
- OPJFrame *m_pOwner;
-};
-
-
-
-// Property sheet dialog: encoder
-class OPJEncoderDialog: public wxPropertySheetDialog
-{
- DECLARE_CLASS(OPJEncoderDialog)
-public:
- OPJEncoderDialog(wxWindow* parent, int dialogType);
- ~OPJEncoderDialog();
-
- wxBookCtrlBase* m_settingsNotebook;
-
- wxPanel* CreateMainSettingsPage(wxWindow* parent);
- wxPanel* CreatePart1_1SettingsPage(wxWindow* parent);
- wxPanel* CreatePart1_2SettingsPage(wxWindow* parent);
- /* wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/
- void OnEnableComm(wxCommandEvent& event);
- void OnEnableIdx(wxCommandEvent& event);
- void OnEnablePoc(wxCommandEvent& event);
- void OnRadioQualityRate(wxCommandEvent& event);
-#ifdef USE_JPWL
- void OnEnableJPWL(wxCommandEvent& event);
- wxPanel* CreatePart11SettingsPage(wxWindow* parent);
- /*wxCheckBox *m_enablejpwlCheck;*/
- wxChoice *m_hprotChoice[MYJPWL_MAX_NO_TILESPECS];
- wxSpinCtrl *m_htileCtrl[MYJPWL_MAX_NO_TILESPECS];
- wxChoice *m_pprotChoice[MYJPWL_MAX_NO_TILESPECS];
- wxSpinCtrl *m_ptileCtrl[MYJPWL_MAX_NO_TILESPECS];
- wxSpinCtrl *m_ppackCtrl[MYJPWL_MAX_NO_TILESPECS];
- wxChoice *m_sensiChoice[MYJPWL_MAX_NO_TILESPECS];
- wxSpinCtrl *m_stileCtrl[MYJPWL_MAX_NO_TILESPECS];
- void OnHprotSelect(wxCommandEvent& event);
- void OnPprotSelect(wxCommandEvent& event);
- void OnSensiSelect(wxCommandEvent& event);
-#endif // USE_JPWL
-
- wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl;
- wxRadioButton *m_rateRadio, *m_qualityRadio;
- wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl,
- *m_pocCtrl;
- wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl;
- wxRadioBox *progressionBox;
- wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_mctCheck, *m_irrevCheck;
- wxCheckBox *m_sopCheck, *m_ephCheck, *m_enablebypassCheck, *m_enableresetCheck,
- *m_enablerestartCheck, *m_enablevscCheck, *m_enableertermCheck,
- *m_enablesegmarkCheck;
- wxCheckBox *m_enablepocCheck, *m_enablejpwlCheck;
- wxSpinCtrl *m_resolutionsCtrl;
-
-protected:
-
- enum {
- OPJENCO_ENABLEJPWL = 100,
- OPJENCO_RATEFACTOR,
- OPJENCO_RATERADIO,
- OPJENCO_QUALITYFACTOR,
- OPJENCO_QUALITYRADIO,
- OPJENCO_RESNUMBER,
- OPJENCO_CODEBLOCKSIZE,
- OPJENCO_PRECINCTSIZE,
- OPJENCO_TILESIZE,
- OPJENCO_PROGRESSION,
- OPJENCO_SUBSAMPLING,
- OPJENCO_ENABLESOP,
- OPJENCO_ENABLEEPH,
- OPJENCO_ENABLEBYPASS,
- OPJENCO_ENABLERESET,
- OPJENCO_ENABLERESTART,
- OPJENCO_ENABLEVSC,
- OPJENCO_ENABLEERTERM,
- OPJENCO_ENABLESEGMARK,
- OPJENCO_ENABLEPOC,
- OPJENCO_ROICOMP,
- OPJENCO_ROISHIFT,
- OPJENCO_IMORIG,
- OPJENCO_TILORIG,
- OPJENCO_ENABLEMCT,
- OPJENCO_ENABLEIRREV,
- OPJENCO_ENABLEINDEX,
- OPJENCO_INDEXNAME,
- OPJENCO_POCSPEC,
- OPJENCO_ENABLECOMM,
- OPJENCO_COMMENTTEXT,
- OPJENCO_HPROT,
- OPJENCO_HTILE,
- OPJENCO_PPROT,
- OPJENCO_PTILE,
- OPJENCO_PPACK,
- OPJENCO_SENSI,
- OPJENCO_STILE
- };
-
- DECLARE_EVENT_TABLE()
-};
-
-// Property sheet dialog: decoder
-class OPJDecoderDialog: public wxPropertySheetDialog
-{
- DECLARE_CLASS(OPJDecoderDialog)
-public:
- OPJDecoderDialog(wxWindow* parent, int dialogType);
- ~OPJDecoderDialog();
-
- wxBookCtrlBase* m_settingsNotebook;
- wxCheckBox *m_enabledecoCheck, *m_enableparseCheck;
- wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;
- wxRadioBox* m_resizeBox;
-
- void OnEnableDeco(wxCommandEvent& event);
-
- wxPanel* CreateMainSettingsPage(wxWindow* parent);
- wxPanel* CreatePart1SettingsPage(wxWindow* parent);
- wxPanel* CreatePart3SettingsPage(wxWindow* parent);
-#ifdef USE_JPWL
- void OnEnableJPWL(wxCommandEvent& event);
- wxPanel* CreatePart11SettingsPage(wxWindow* parent);
- wxSpinCtrl *m_expcompsCtrl, *m_maxtilesCtrl;
- wxCheckBox *m_enablejpwlCheck;
-#endif // USE_JPWL
- wxSpinCtrl *m_framenumCtrl;
-
-
-protected:
-
- enum {
- OPJDECO_RESMETHOD = 100,
- OPJDECO_REDUCEFACTOR,
- OPJDECO_QUALITYLAYERS,
- OPJDECO_NUMCOMPS,
- OPJDECO_ENABLEDECO,
- OPJDECO_ENABLEPARSE,
- OPJDECO_ENABLEJPWL,
- OPJDECO_EXPCOMPS,
- OPJDECO_MAXTILES,
- OPJDECO_FRAMENUM
- };
-
- DECLARE_EVENT_TABLE()
-};
-
-#endif //__OPJ_VIEWER_H__
-
-
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.ico b/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.ico
deleted file mode 100644
index 931d5e02..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.ico
+++ /dev/null
Binary files differ
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.rc b/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.rc
deleted file mode 100644
index 82af985b..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-OPJChild16 ICON OPJChild.ico
-OPJViewer16 ICON OPJViewer.ico
-#include "wx/msw/wx.rc" \ No newline at end of file
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer16.xpm b/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer16.xpm
deleted file mode 100644
index 7c65acb3..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/OPJViewer16.xpm
+++ /dev/null
@@ -1,26 +0,0 @@
-/* XPM */
-static char *OPJViewer16[] = {
-/* columns rows colors chars-per-pixel */
-"16 16 4 1",
-" c black",
-". c #800000",
-"X c red",
-"o c None",
-/* pixels */
-"oooooooooooooooo",
-"ooo.XXXXoooooooo",
-"ooXXoo .Xooooooo",
-"o..oooo .ooooooo",
-"oX.oooo ooooooo",
-"oX.oooo .ooooooo",
-"oXXoooo .ooooooo",
-"o.XXoo .oooooooo",
-"oo.XXXXooooooooo",
-"ooooooooo.Xo .oo",
-"ooooooooo X. ooo",
-"oooooooooo...ooo",
-"oooooooooo XXooo",
-"oooooooooo .Xooo",
-"oooooooooooooooo",
-"oooooooooooooooo"
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/about_htm.h b/openjpeg/src/bin/wx/OPJViewer/source/about_htm.h
deleted file mode 100644
index 2d5dec27..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/about_htm.h
+++ /dev/null
@@ -1,56 +0,0 @@
-wxString htmlaboutpage = wxT(
- "<html>"
- "<body bgcolor=#FFFFFF>"
- "<table cellspacing=7 cellpadding=1 border=0 width=100%>"
- "<tr>"
- "<td rowspan=3 valign=top align=center width=70>"
- "<img src=\"memory:opj_logo.xpm\"><br><br>"
- "</td>"
- "<td align=center>"
- "<font size=+0 color=#000000><b>"
- OPJ_APPLICATION " " OPJ_APPLICATION_VERSION
- "</b></font><br>"
- "<font size=-1 color=#000000><b>A JPEG 2000 image viewer</b></font><br>"
- "<font size=-2 color=#000000><b>" OPJ_APPLICATION_PLATFORM " version</b></font>"
- "</td>"
- "</tr>"
- "<tr height=3 valign=center>"
- "<td valign=center bgcolor=#cc3300></td>"
- "</tr>"
- "<tr>"
- "<td align=justify>"
- "<center><font size=+0 color=#000000><a href=\"http://www.openjpeg.org/\">OpenJPEG</a></font></center>"
- "<p><font size=-1 color=#000000>The OpenJPEG library is an open-source JPEG 2000 codec written in C language. "
- "In addition to the basic codec, various other features are under development.</font></p><br>"
- "<font size=-2 color=red>* Build: ")
-#include "build.h"
- wxT(", " __DATE__ ", " __TIME__ "</font><br>")
- wxT("<font size=-2 color=red>* " wxVERSION_STRING "</font><br>")
- wxT("<font size=-2 color=red>* OpenJPEG " OPENJPEG_VERSION " (")
-#ifdef USE_JPWL
- wxT("<font size=-2 color=green>JPWL</font> ")
-#endif // USE_JPWL
-#ifdef USE_JPSEC
- wxT("<font size=-2 color=green>JPSEC</font> ")
-#endif // USE_JPSEC
- wxT(")</font><br>")
-#ifdef USE_MXF
- wxT("<font size=-2 color=red>* MXFLib " MXFLIB_VERSION_MAJOR "."
- MXFLIB_VERSION_MINOR "." MXFLIB_VERSION_TWEAK " (" MXFLIB_VERSION_BUILD
- ")</font><br>")
-#endif // USE_MXF
- wxT("</td>"
- "</tr>"
- "<tr>"
- "<td colspan=2 bgcolor=#CC3300 height=3 valign=center></td>"
- "</tr>"
- "<tr>"
- "<td colspan=2>"
- "<font size=-2 color=#444444>OpenJPEG is &copy; 2002-2008 <a href=\"http://www.tele.ucl.ac.be/\">TELE</a> - <a href=\"http://www.uclouvain.be/\">Universite' Catholique de Louvain</a></font><br>"
- "<font size=-2 color=#444444>OPJViewer is &copy; 2007-2008 <a href=\"http://dsplab.diei.unipg.it/\">DSPLab</a> - <a href=\"http://www.unipg.it/\">Universita' degli studi di Perugia</a></font>"
- "</td>"
- "</tr>"
- "</table>"
- "</body>"
- "</html>"
- );
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/build.h b/openjpeg/src/bin/wx/OPJViewer/source/build.h
deleted file mode 100644
index d49d58b6..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/build.h
+++ /dev/null
@@ -1 +0,0 @@
-wxT("491")
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/icon1.xpm b/openjpeg/src/bin/wx/OPJViewer/source/icon1.xpm
deleted file mode 100644
index 69131fb5..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/icon1.xpm
+++ /dev/null
@@ -1,79 +0,0 @@
-/* XPM */
-static const char *icon1_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 41 1",
-"> c #97C4E7",
-"# c #4381AA",
-"d c #FFFFFF",
-"< c #71B2DE",
-"+ c #538BB1",
-"& c #D1E5F5",
-"q c #63B3DE",
-"6 c #F1F4F7",
-"* c #CAE1F3",
-"y c #7AC4E5",
-"= c #C3DDF1",
-"X c #74A1BD",
-"- c #BCD9EF",
-"5 c #619BC4",
-"3 c #E6EAF1",
-"2 c #4B8EBF",
-"o c #6B97B6",
-". c #4B82A8",
-" c None",
-"w c #54A6D8",
-"1 c #71A8D1",
-", c #85BBE2",
-"t c #EFF6FC",
-"7 c #DEEDF8",
-"@ c #4388B4",
-"a c #F7FBFD",
-"$ c #D7E0E9",
-"r c #FAFCFE",
-"4 c #DAEAF7",
-"e c #E9F3FA",
-"0 c #76BAE2",
-"% c #7FA6C0",
-"s c #FDFDFE",
-"O c #5896BE",
-"p c #B6D5EE",
-"8 c #87ABC3",
-": c #A5CCEA",
-"9 c #E5F0F9",
-"; c #AFD1EC",
-"i c #F4F9FD",
-"u c #8FB0C3",
-/* pixels */
-" ",
-" ",
-" ",
-" ",
-" ",
-" .XXXooOO++@#$ ",
-" %&*=-;:>>,<123 ",
-" %4&*=-;:>>,1>56 ",
-" %74&*=-;:>>1*>56 ",
-" 89700qqqqwq1e*>X ",
-" 8e974&*=-;:1re*>8 ",
-" 8te974&*=-;11111# ",
-" 8tty000qqqqqww>,+ ",
-" uitte974&*=-p:>>+ ",
-" uaitte974&*=-p:>O ",
-" uaayyyy000qqqqp:O ",
-" uraaitte974&*=-po ",
-" urraaitte974&*=-o ",
-" usryyyyyyy000q*=X ",
-" ussrraaitte974&*X ",
-" udssrraaitte974&X ",
-" uddyyyyyyyyyy074% ",
-" udddssrraaitte97% ",
-" uddddssrraaitte9% ",
-" udddddssrraaitte8 ",
-" uddddddssrraaitt8 ",
-" uuuuuuuuuuuuuu88u ",
-" ",
-" ",
-" ",
-" ",
-" "
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/icon2.xpm b/openjpeg/src/bin/wx/OPJViewer/source/icon2.xpm
deleted file mode 100644
index cb8f1032..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/icon2.xpm
+++ /dev/null
@@ -1,53 +0,0 @@
-/* XPM */
-static const char *icon2_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 15 1",
-". c Black",
-"O c #97C4E7",
-"$ c #63B3DE",
-"@ c #CAE1F3",
-"; c #7AC4E5",
-"* c #74A1BD",
-"+ c #619BC4",
-"o c #4B8EBF",
-" c None",
-"% c #54A6D8",
-"= c #FAFCFE",
-"& c #E9F3FA",
-"# c #76BAE2",
-"X c #C00000",
-"- c #87ABC3",
-/* pixels */
-" ",
-" ",
-" ",
-" ",
-" ",
-" ............. ",
-" .XXXXXXXXXX.o. ",
-" .XXXXXXXXXX.O+. ",
-" .XXXXXXXXXX.@O+. ",
-" .XX##$$$$%$.&@O* ",
-" .XXXXXXXXXX.=&@O- ",
-" .XXXXXXXXXX...... ",
-" .XX;###$$$$$%%XX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XX;;;;###$$$$XX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XX;;;;;;;###$XX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XX;;;;;;;;;;#XX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" .XXXXXXXXXXXXXXX. ",
-" ................. ",
-" ",
-" ",
-" ",
-" ",
-" "
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/icon3.xpm b/openjpeg/src/bin/wx/OPJViewer/source/icon3.xpm
deleted file mode 100644
index ddfa18b9..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/icon3.xpm
+++ /dev/null
@@ -1,79 +0,0 @@
-/* XPM */
-static const char *icon3_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 41 1",
-"6 c #EDF2FB",
-"- c #AAC1E8",
-": c #B9CDED",
-"X c #295193",
-", c #C6D6F0",
-"a c #4A7CCE",
-"u c #779DDB",
-"y c #7FA2DD",
-"$ c #3263B4",
-"5 c #EAF0FA",
-". c #2D59A3",
-"o c #6E96D8",
-"* c #356AC1",
-"r c #F7F9FD",
-"> c #BED0EE",
-"3 c #E1E9F7",
-"7 c #F0F5FC",
-"< c #CBD9F1",
-"2 c #DAE5F6",
-"# c #3161B1",
-" c None",
-"0 c #FDFEFF",
-"= c #9FB9E5",
-"e c #AEC5EA",
-"t c #89A9DF",
-"q c #98B5E4",
-"p c #5584D1",
-"d c #3A70CA",
-"@ c #305FAC",
-"i c #5D89D3",
-"1 c #D2DFF4",
-"% c #3366B9",
-"9 c #FAFCFE",
-"8 c #F5F8FD",
-"s c #4075CC",
-"O c #638ED5",
-"w c #90AFE2",
-"& c #3467BC",
-"+ c #2F5DA9",
-"; c #B3C8EB",
-"4 c #E5EDF9",
-/* pixels */
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ......X ",
-" .oooooO+ ",
-" .ooooooo. ",
-" .+@@@##$%%&&&&&****. ",
-" .=-;:>,<12345678900. ",
-" .q=-;:>,<1234567890. ",
-" .wq=-e:>,<12345678r. ",
-" .twq=-e:>,<12345678. ",
-" .ytwq=-e:>,<1234567. ",
-" .uytwq=-e:>,<123456. ",
-" .ouytwq=-e:>,<12345. ",
-" .Oouytwq=-e;>,<1234. ",
-" .iOouytwq=-e;>,<123. ",
-" .piOouytwq=-e;>,<12. ",
-" .apiOouytwq=-e;>,<1. ",
-" .sapiOouytwq=-e;>,<. ",
-" .dsapiOouytwq=-e;>,. ",
-" ...................# ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/icon4.xpm b/openjpeg/src/bin/wx/OPJViewer/source/icon4.xpm
deleted file mode 100644
index 37f95798..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/icon4.xpm
+++ /dev/null
@@ -1,43 +0,0 @@
-/* XPM */
-static const char *icon4_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 5 1",
-". c Black",
-"o c #8399B4",
-"X c #8DA0B9",
-" c None",
-"O c #800000",
-/* pixels */
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ....... ",
-" .XXXXXo. ",
-" .XXXXXXX. ",
-" .................... ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .OOOOOOOOOOOOOOOOOO. ",
-" .................... ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/icon5.xpm b/openjpeg/src/bin/wx/OPJViewer/source/icon5.xpm
deleted file mode 100644
index d4e8b118..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/icon5.xpm
+++ /dev/null
@@ -1,79 +0,0 @@
-/* XPM */
-static const char *icon5_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 41 1",
-"0 c #AAC1E8",
-"q c #B9CDED",
-"X c #295193",
-"e c #C6D6F0",
-"a c #4A7CCE",
-"& c #779DDB",
-"* c #7FA2DD",
-"2 c #EAF0FA",
-"@ c #2D59A3",
-"o c #6E96D8",
-"y c #356AC1",
-"d c #214279",
-"w c #BED0EE",
-"= c #85A7DF",
-"< c #E1E9F7",
-"3 c #F0F5FC",
-"s c #CBD9F1",
-", c #DAE5F6",
-"7 c #3161B1",
-" c None",
-". c #274D8B",
-"6 c #FDFEFF",
-"i c #E7EEF9",
-"9 c #9FB9E5",
-"- c #89A9DF",
-"8 c #98B5E4",
-"$ c #5584D1",
-"+ c #3569BF",
-"% c #305FAC",
-"O c #5D89D3",
-"> c #D2DFF4",
-"p c #3366B9",
-"5 c #FAFCFE",
-"4 c #F5F8FD",
-"t c #4075CC",
-"u c #638ED5",
-"r c #CEDCF2",
-"; c #90AFE2",
-"# c #2F5DA9",
-": c #B3C8EB",
-"1 c #E5EDF9",
-/* pixels */
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ......X ",
-" XoooooO. ",
-" Xoooooo+. ",
-" Xooooooo@XXXXXXXXXX# ",
-" Xoooooooooooooooooo# ",
-" Xoooooooooooooooooo# ",
-" Xoo$################### ",
-" Xoo%O&*=-;:>,<123445667 ",
-" XooX890:qwer>,<123445q# ",
-" Xoty;890:qwer>,<12344# ",
-" Xo%u-;890:qwer>,<i234# ",
-" XoX&*-;890:qwer>,<i2r# ",
-" Xtpo&*-;890:qwer>,<i# ",
-" X%auo&*-;890:qwer>,<# ",
-" XX$Ouo&*-;890:qwer>s# ",
-" d%a$Ouo&*-;890:qwer# ",
-" d+ta$Ouo&*-;890:qwe# ",
-" d..................# ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.cpp b/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.cpp
deleted file mode 100644
index 9e1ab90d..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.cpp
+++ /dev/null
@@ -1,1595 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: imagjpeg2000.cpp
-// Purpose: wxImage JPEG 2000 family file format handler
-// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik
-// RCS-ID: $Id: imagjpeg2000.cpp,v 0.00 2008/01/31 10:58:00 MW Exp $
-// Copyright: (c) Giuseppe Baruffa
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG
-
-#include "imagjpeg2000.h"
-
-#ifndef WX_PRECOMP
-#include "wx/log.h"
-#include "wx/app.h"
-#include "wx/intl.h"
-#include "wx/bitmap.h"
-#include "wx/module.h"
-#endif
-
-#include "openjp2/openjpeg.h"
-
-#include "wx/filefn.h"
-#include "wx/wfstream.h"
-
-// ----------------------------------------------------------------------------
-// types
-// ----------------------------------------------------------------------------
-
-
-//-----------------------------------------------------------------------------
-// wxJPEG2000Handler
-//-----------------------------------------------------------------------------
-
-IMPLEMENT_DYNAMIC_CLASS(wxJPEG2000Handler, wxImageHandler)
-
-#if wxUSE_STREAMS
-
-//------------- JPEG 2000 Data Source Manager
-
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
-#define MJ2_CFMT 3
-#define PXM_DFMT 0
-#define PGX_DFMT 1
-#define BMP_DFMT 2
-#define YUV_DFMT 3
-
-#define MAX_MESSAGE_LEN 200
-
-/* check file type */
-int
-jpeg2000familytype(unsigned char *hdr, int hdr_len)
-{
- // check length
- if (hdr_len < 24) {
- return -1;
- }
-
- // check format
- if (hdr[0] == 0x00 &&
- hdr[1] == 0x00 &&
- hdr[2] == 0x00 &&
- hdr[3] == 0x0C &&
- hdr[4] == 0x6A &&
- hdr[5] == 0x50 &&
- hdr[6] == 0x20 &&
- hdr[7] == 0x20 &&
- hdr[20] == 0x6A &&
- hdr[21] == 0x70 &&
- hdr[22] == 0x32)
- // JP2 file format
- {
- return JP2_CFMT;
- } else if (hdr[0] == 0x00 &&
- hdr[1] == 0x00 &&
- hdr[2] == 0x00 &&
- hdr[3] == 0x0C &&
- hdr[4] == 0x6A &&
- hdr[5] == 0x50 &&
- hdr[6] == 0x20 &&
- hdr[7] == 0x20 &&
- hdr[20] == 0x6D &&
- hdr[21] == 0x6A &&
- hdr[22] == 0x70 &&
- hdr[23] == 0x32)
- // MJ2 file format
- {
- return MJ2_CFMT;
- } else if (hdr[0] == 0xFF &&
- hdr[1] == 0x4F)
- // J2K file format
- {
- return J2K_CFMT;
- } else
- // unknown format
- {
- return -1;
- }
-
-}
-
-/* we have to use this to avoid GUI-noGUI threads crashing */
-void printevent(const char *msg)
-{
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("%s"), msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-/* sample error callback expecting a FILE* client object */
-void jpeg2000_error_callback(const char *msg, void *client_data)
-{
- char mess[MAX_MESSAGE_LEN + 20];
- int message_len = strlen(msg);
-
- if (message_len > MAX_MESSAGE_LEN) {
- message_len = MAX_MESSAGE_LEN;
- }
-
- if (msg[message_len - 1] == '\n') {
- message_len--;
- }
-
- sprintf(mess, "[ERROR] %.*s", message_len, msg);
- printevent(mess);
-}
-
-/* sample warning callback expecting a FILE* client object */
-void jpeg2000_warning_callback(const char *msg, void *client_data)
-{
- char mess[MAX_MESSAGE_LEN + 20];
- int message_len = strlen(msg);
-
- if (message_len > MAX_MESSAGE_LEN) {
- message_len = MAX_MESSAGE_LEN;
- }
-
- if (msg[message_len - 1] == '\n') {
- message_len--;
- }
-
- sprintf(mess, "[WARNING] %.*s", message_len, msg);
- printevent(mess);
-}
-
-/* sample debug callback expecting no client object */
-void jpeg2000_info_callback(const char *msg, void *client_data)
-{
- char mess[MAX_MESSAGE_LEN + 20];
- int message_len = strlen(msg);
-
- if (message_len > MAX_MESSAGE_LEN) {
- message_len = MAX_MESSAGE_LEN;
- }
-
- if (msg[message_len - 1] == '\n') {
- message_len--;
- }
-
- sprintf(mess, "[INFO] %.*s", message_len, msg);
- printevent(mess);
-}
-
-/* macro functions */
-/* From little endian to big endian, 2 and 4 bytes */
-#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8)
-#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24)
-
-#ifdef __WXGTK__
-#define BYTE_SWAP8(X) ((X & 0x00000000000000FFULL) << 56) | ((X & 0x000000000000FF00ULL) << 40) | \
- ((X & 0x0000000000FF0000ULL) << 24) | ((X & 0x00000000FF000000ULL) << 8) | \
- ((X & 0x000000FF00000000ULL) >> 8) | ((X & 0x0000FF0000000000ULL) >> 24) | \
- ((X & 0x00FF000000000000ULL) >> 40) | ((X & 0xFF00000000000000ULL) >> 56)
-#else
-#define BYTE_SWAP8(X) ((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \
- ((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \
- ((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \
- ((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56)
-#endif
-
-/* From codestream to int values */
-#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \
- ((unsigned long int) (C)[(P) + 1] << 16) + \
- ((unsigned long int) (C)[(P) + 2] << 8) + \
- ((unsigned long int) (C)[(P) + 3] << 0))
-
-#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \
- ((unsigned long int) (C)[(P) + 1] << 0))
-
-/* defines */
-#define SHORT_DESCR_LEN 32
-#define LONG_DESCR_LEN 256
-
-/* enumeration for file formats */
-#define JPEG2000FILENUM 4
-typedef enum {
-
- JP2_FILE,
- J2K_FILE,
- MJ2_FILE,
- UNK_FILE
-
-} jpeg2000filetype;
-
-/* enumeration for the box types */
-#define JPEG2000BOXNUM 23
-typedef enum {
-
- FILE_BOX,
- JP_BOX,
- FTYP_BOX,
- JP2H_BOX,
- IHDR_BOX,
- COLR_BOX,
- JP2C_BOX,
- JP2I_BOX,
- XML_BOX,
- UUID_BOX,
- UINF_BOX,
- MOOV_BOX,
- MVHD_BOX,
- TRAK_BOX,
- TKHD_BOX,
- MDIA_BOX,
- MINF_BOX,
- STBL_BOX,
- STSD_BOX,
- MJP2_BOX,
- MDAT_BOX,
- ANY_BOX,
- UNK_BOX
-
-} jpeg2000boxtype;
-
-/* jpeg2000 family box signatures */
-#define FILE_SIGN ""
-#define JP_SIGN "jP\040\040"
-#define FTYP_SIGN "ftyp"
-#define JP2H_SIGN "jp2h"
-#define IHDR_SIGN "ihdr"
-#define COLR_SIGN "colr"
-#define JP2C_SIGN "jp2c"
-#define JP2I_SIGN "jp2i"
-#define XML_SIGN "xml\040"
-#define UUID_SIGN "uuid"
-#define UINF_SIGN "uinf"
-#define MOOV_SIGN "moov"
-#define MVHD_SIGN "mvhd"
-#define TRAK_SIGN "trak"
-#define TKHD_SIGN "tkhd"
-#define MDIA_SIGN "mdia"
-#define MINF_SIGN "minf"
-#define VMHD_SIGN "vmhd"
-#define STBL_SIGN "stbl"
-#define STSD_SIGN "stsd"
-#define MJP2_SIGN "mjp2"
-#define MDAT_SIGN "mdat"
-#define ANY_SIGN ""
-#define UNK_SIGN ""
-
-/* the box structure itself */
-struct jpeg2000boxdef {
-
- char value[5]; /* hexadecimal value/string*/
- char name[SHORT_DESCR_LEN]; /* short description */
- char descr[LONG_DESCR_LEN]; /* long description */
- int sbox; /* is it a superbox? */
- int req[JPEG2000FILENUM]; /* mandatory box */
- jpeg2000boxtype ins; /* contained in box... */
-
-};
-
-/* the possible boxes */
-struct jpeg2000boxdef jpeg2000box[] = {
- /* sign */ {
- FILE_SIGN,
- /* short */ "placeholder for nothing",
- /* long */ "Nothing to say",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- JP_SIGN,
- /* short */ "JPEG 2000 Signature box",
- /* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- FTYP_SIGN,
- /* short */ "File Type box",
- /* long */ "This box specifies file type, version and compatibility information, including specifying if this file "
- "is a conforming JP2 file or if it can be read by a conforming JP2 reader",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- JP2H_SIGN,
- /* short */ "JP2 Header box",
- /* long */ "This box contains a series of boxes that contain header-type information about the file",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- IHDR_SIGN,
- /* short */ "Image Header box",
- /* long */ "This box specifies the size of the image and other related fields",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ JP2H_BOX
- },
-
- /* sign */ {
- COLR_SIGN,
- /* short */ "Colour Specification box",
- /* long */ "This box specifies the colourspace of the image",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ JP2H_BOX
- },
-
- /* sign */ {
- JP2C_SIGN,
- /* short */ "Contiguous Codestream box",
- /* long */ "This box contains the codestream as defined by Annex A",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- JP2I_SIGN,
- /* short */ "Intellectual Property box",
- /* long */ "This box contains intellectual property information about the image",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- XML_SIGN,
- /* short */ "XML box",
- /* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- UUID_SIGN,
- /* short */ "UUID box",
- /* long */ "This box provides a tool by which vendors can add additional information to a file "
- "without risking conflict with other vendors",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- UINF_SIGN,
- /* short */ "UUID Info box",
- /* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- MOOV_SIGN,
- /* short */ "Movie box",
- /* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- MVHD_SIGN,
- /* short */ "Movie Header box",
- /* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation "
- "considered as a whole",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ MOOV_BOX
- },
-
- /* sign */ {
- TRAK_SIGN,
- /* short */ "Track box",
- /* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ MOOV_BOX
- },
-
- /* sign */ {
- TKHD_SIGN,
- /* short */ "Track Header box",
- /* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ TRAK_BOX
- },
-
- /* sign */ {
- MDIA_SIGN,
- /* short */ "Media box",
- /* long */ "The media declaration container contains all the objects which declare information about the media data "
- "within a track",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ TRAK_BOX
- },
-
- /* sign */ {
- MINF_SIGN,
- /* short */ "Media Information box",
- /* long */ "This box contains all the objects which declare characteristic information of the media in the track",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ MDIA_BOX
- },
-
- /* sign */ {
- STBL_SIGN,
- /* short */ "Sample Table box",
- /* long */ "The sample table contains all the time and data indexing of the media samples in a track",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ MINF_BOX
- },
-
- /* sign */ {
- STSD_SIGN,
- /* short */ "Sample Description box",
- /* long */ "The sample description table gives detailed information about the coding type used, and any initialization "
- "information needed for that coding",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ MINF_BOX
- },
-
- /* sign */ {
- MJP2_SIGN,
- /* short */ "MJP2 Sample Description box",
- /* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization "
- "information needed for that coding",
- /* sbox */ 0,
- /* req */ {1, 1, 1},
- /* ins */ MINF_BOX
- },
-
- /* sign */ {
- MDAT_SIGN,
- /* short */ "Media Data box",
- /* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file",
- /* sbox */ 1,
- /* req */ {1, 1, 1},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- ANY_SIGN,
- /* short */ "Any box",
- /* long */ "All the existing boxes",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ FILE_BOX
- },
-
- /* sign */ {
- UNK_SIGN,
- /* short */ "Unknown Type box",
- /* long */ "The signature is not recognised to be that of an existing box",
- /* sbox */ 0,
- /* req */ {0, 0, 0},
- /* ins */ ANY_BOX
- }
-
-};
-
-/* declaration */
-int
-jpeg2000_box_handler_function(jpeg2000boxtype boxtype, wxInputStream& stream,
- unsigned long int filepoint,
- unsigned long int filelimit, int level, char *scansign,
- unsigned long int *scanpoint);
-
-#ifdef __WXMSW__
-typedef unsigned __int64 int8byte;
-#endif // __WXMSW__
-
-#ifdef __WXGTK__
-typedef unsigned long long int8byte;
-#endif // __WXGTK__
-
-/* internal mini-search for a box signature */
-int
-jpeg2000_file_parse(wxInputStream& stream, unsigned long int filepoint,
- unsigned long int filelimit, int level,
- char *scansign, unsigned long int *scanpoint)
-{
- unsigned long int LBox = 0x00000000;
- char TBox[5] = "\0\0\0\0";
- int8byte XLBox = 0x0000000000000000;
- unsigned long int box_length = 0;
- int last_box = 0, box_num = 0;
- int box_type = ANY_BOX;
- unsigned char fourbytes[4];
- int box_number = 0;
-
- /* cycle all over the file */
- box_num = 0;
- last_box = 0;
- while (!last_box) {
-
- /* do not exceed file limit */
- if (filepoint >= filelimit) {
- return (0);
- }
-
- /* seek on file */
- if (stream.SeekI(filepoint, wxFromStart) == wxInvalidOffset) {
- return (-1);
- }
-
- /* read the mandatory LBox, 4 bytes */
- if (!stream.Read(fourbytes, 4)) {
- wxLogError(wxT("Problem reading LBox from the file (file ended?)"));
- return -1;
- };
- LBox = STREAM_TO_UINT32(fourbytes, 0);
-
- /* read the mandatory TBox, 4 bytes */
- if (!stream.Read(TBox, 4)) {
- wxLogError(wxT("Problem reading TBox from the file (file ended?)"));
- return -1;
- };
-
- /* look if scansign is got */
- if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) {
- /* hack/exploit */
- // stop as soon as you find the level-th codebox
- if (box_number == level) {
- memcpy(scansign, " ", 4);
- *scanpoint = filepoint;
- return (0);
- } else {
- box_number++;
- }
-
- };
-
- /* determine the box type */
- for (box_type = JP_BOX; box_type < UNK_BOX; box_type++)
- if (memcmp(TBox, jpeg2000box[box_type].value, 4) == 0) {
- break;
- }
-
- /* read the optional XLBox, 8 bytes */
- if (LBox == 1) {
-
- if (!stream.Read(&XLBox, 8)) {
- wxLogError(wxT("Problem reading XLBox from the file (file ended?)"));
- return -1;
- };
- box_length = (unsigned long int) BYTE_SWAP8(XLBox);
-
- } else if (LBox == 0x00000000) {
-
- /* last box in file */
- last_box = 1;
- box_length = filelimit - filepoint;
-
- } else
-
- {
- box_length = LBox;
- }
-
-
- /* go deep in the box */
- jpeg2000_box_handler_function((jpeg2000boxtype) box_type,
- stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8),
- filepoint + box_length, level, scansign, scanpoint);
-
- /* if it's a superbox go inside it */
- if (jpeg2000box[box_type].sbox)
- jpeg2000_file_parse(stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8),
- filepoint + box_length,
- level, scansign, scanpoint);
-
- /* increment box number and filepoint*/
- box_num++;
- filepoint += box_length;
-
- };
-
- /* all good */
- return (0);
-}
-
-// search first contiguos codestream box in an mj2 file
-unsigned long int
-searchjpeg2000c(wxInputStream& stream, unsigned long int fsize, int number)
-{
- char scansign[] = "jp2c";
- unsigned long int scanpoint = 0L;
-
- wxLogMessage(wxT("Searching jp2c box... "));
-
- /* do the parsing */
- if (jpeg2000_file_parse(stream, 0, fsize, number, scansign, &scanpoint) < 0) {
- wxLogMessage(
- wxT("Unrecoverable error during JPEG 2000 box parsing: stopping"));
- }
-
- if (strcmp(scansign, " ")) {
- wxLogMessage(wxT("Box not found"));
- } else {
-
- wxLogMessage(wxString::Format(wxT("Box found at byte %d"), scanpoint));
-
- };
-
- return (scanpoint);
-}
-
-// search the jp2h box in the file
-unsigned long int
-searchjpeg2000headerbox(wxInputStream& stream, unsigned long int fsize)
-{
- char scansign[] = "jp2h";
- unsigned long int scanpoint = 0L;
-
- wxLogMessage(wxT("Searching jp2h box... "));
-
- /* do the parsing */
- if (jpeg2000_file_parse(stream, 0, fsize, 0, scansign, &scanpoint) < 0) {
- wxLogMessage(
- wxT("Unrecoverable error during JPEG 2000 box parsing: stopping"));
- }
-
- if (strcmp(scansign, " ")) {
- wxLogMessage(wxT("Box not found"));
- } else {
- wxLogMessage(wxString::Format(wxT("Box found at byte %d"), scanpoint));
- }
-
- return (scanpoint);
-}
-
-/* handling functions */
-#define ITEM_PER_ROW 10
-
-/* Box handler function */
-int
-jpeg2000_box_handler_function(jpeg2000boxtype boxtype, wxInputStream& stream,
- unsigned long int filepoint,
- unsigned long int filelimit, int level,
- char *scansign, unsigned long int *scanpoint)
-{
- switch (boxtype) {
-
- /* Sample Description box */
- case (STSD_BOX):
- jpeg2000_file_parse(stream, filepoint + 8, filelimit, level, scansign,
- scanpoint);
- break;
-
- /* MJP2 Sample Description box */
- case (MJP2_BOX):
- jpeg2000_file_parse(stream, filepoint + 78, filelimit, level, scansign,
- scanpoint);
- break;
-
- /* not yet implemented */
- default:
- break;
-
- };
-
- return (0);
-}
-
-// the jP and ftyp parts of the header
-#define jpeg2000headSIZE 32
-unsigned char jpeg2000head[jpeg2000headSIZE] = {
- 0x00, 0x00, 0x00, 0x0C, 'j', 'P', ' ', ' ',
- 0x0D, 0x0A, 0x87, 0x0A, 0x00, 0x00, 0x00, 0x14,
- 'f', 't', 'y', 'p', 'j', 'p', '2', ' ',
- 0x00, 0x00, 0x00, 0x00, 'j', 'p', '2', ' '
-};
-
-/////////////////////////////////////////////////
-/////////////////////////////////////////////////
-
-// load the jpeg2000 file format
-bool wxJPEG2000Handler::LoadFile(wxImage *image, wxInputStream& stream,
- bool verbose, int index)
-{
- opj_dparameters_t parameters; /* decompression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_image_t *opjimage = NULL;
- unsigned char *src = NULL;
- unsigned char *ptr;
- int file_length, jp2c_point, jp2h_point;
- unsigned long int jp2hboxlen, jp2cboxlen;
- opj_codestream_info_t cstr_info; /* Codestream information structure */
- unsigned char hdr[24];
- int jpfamform;
-
- // destroy the image
- image->Destroy();
-
- /* read the beginning of the file to check the type */
- if (!stream.Read(hdr, WXSIZEOF(hdr))) {
- return false;
- }
- if ((jpfamform = jpeg2000familytype(hdr, WXSIZEOF(hdr))) < 0) {
- return false;
- }
- stream.SeekI(0, wxFromStart);
-
- /* handle to a decompressor */
- opj_dinfo_t* dinfo = NULL;
- opj_cio_t *cio = NULL;
-
- /* configure the event callbacks */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = jpeg2000_error_callback;
- event_mgr.warning_handler = jpeg2000_warning_callback;
- event_mgr.info_handler = jpeg2000_info_callback;
-
- /* set decoding parameters to default values */
- opj_set_default_decoder_parameters(&parameters);
-
- /* prepare parameters */
- strncpy(parameters.infile, "", sizeof(parameters.infile) - 1);
- strncpy(parameters.outfile, "", sizeof(parameters.outfile) - 1);
- parameters.decod_format = jpfamform;
- parameters.cod_format = BMP_DFMT;
- if (m_reducefactor) {
- parameters.cp_reduce = m_reducefactor;
- }
- if (m_qualitylayers) {
- parameters.cp_layer = m_qualitylayers;
- }
- /*if (n_components)
- parameters. = n_components;*/
-
- /* JPWL only */
-#ifdef USE_JPWL
- parameters.jpwl_exp_comps = m_expcomps;
- parameters.jpwl_max_tiles = m_maxtiles;
- parameters.jpwl_correct = m_enablejpwl;
-#endif /* USE_JPWL */
-
- /* get a decoder handle */
- if (jpfamform == JP2_CFMT || jpfamform == MJ2_CFMT) {
- dinfo = opj_create_decompress(CODEC_JP2);
- } else if (jpfamform == J2K_CFMT) {
- dinfo = opj_create_decompress(CODEC_J2K);
- } else {
- return false;
- }
-
- /* find length of the stream */
- stream.SeekI(0, wxFromEnd);
- file_length = (int) stream.TellI();
-
- /* it's a movie */
- if (jpfamform == MJ2_CFMT) {
- /* search for the first codestream box and the movie header box */
- jp2c_point = searchjpeg2000c(stream, file_length, m_framenum);
- jp2h_point = searchjpeg2000headerbox(stream, file_length);
-
- // read the jp2h box and store it
- stream.SeekI(jp2h_point, wxFromStart);
- stream.Read(&jp2hboxlen, sizeof(unsigned long int));
- jp2hboxlen = BYTE_SWAP4(jp2hboxlen);
-
- // read the jp2c box and store it
- stream.SeekI(jp2c_point, wxFromStart);
- stream.Read(&jp2cboxlen, sizeof(unsigned long int));
- jp2cboxlen = BYTE_SWAP4(jp2cboxlen);
-
- // malloc memory source
- src = (unsigned char *) malloc(jpeg2000headSIZE + jp2hboxlen + jp2cboxlen);
-
- // copy the jP and ftyp
- memcpy(src, jpeg2000head, jpeg2000headSIZE);
-
- // copy the jp2h
- stream.SeekI(jp2h_point, wxFromStart);
- stream.Read(&src[jpeg2000headSIZE], jp2hboxlen);
-
- // copy the jp2c
- stream.SeekI(jp2c_point, wxFromStart);
- stream.Read(&src[jpeg2000headSIZE + jp2hboxlen], jp2cboxlen);
- } else if (jpfamform == JP2_CFMT || jpfamform == J2K_CFMT) {
- /* It's a plain image */
- /* get data */
- stream.SeekI(0, wxFromStart);
- src = (unsigned char *) malloc(file_length);
- stream.Read(src, file_length);
- } else {
- return false;
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- if (jpfamform == MJ2_CFMT) {
- cio = opj_cio_open((opj_common_ptr)dinfo, src,
- jpeg2000headSIZE + jp2hboxlen + jp2cboxlen);
- } else if (jpfamform == JP2_CFMT || jpfamform == J2K_CFMT) {
- cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
- } else {
- free(src);
- return false;
- }
-
- /* decode the stream and fill the image structure */
- opjimage = opj_decode_with_info(dinfo, cio, &cstr_info);
- if (!opjimage) {
- wxMutexGuiEnter();
- wxLogError(wxT("JPEG 2000 failed to decode image!"));
- wxMutexGuiLeave();
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(src);
- return false;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
-
- /*
-
- - At this point, we have the structure "opjimage" that is filled with decompressed
- data, as processed by the OpenJPEG decompression engine
-
- - We need to fill the class "image" with the proper pixel sample values
-
- */
- {
- int shiftbpp;
- int c, tempcomps;
-
- // check components number
- if (m_components > opjimage->numcomps) {
- m_components = opjimage->numcomps;
- }
-
- // check image depth (only on the first one, for now)
- if (m_components) {
- shiftbpp = opjimage->comps[m_components - 1].prec - 8;
- } else {
- shiftbpp = opjimage->comps[0].prec - 8;
- }
-
- // prepare image size
- if (m_components) {
- image->Create(opjimage->comps[m_components - 1].w,
- opjimage->comps[m_components - 1].h, true);
- } else {
- image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true);
- }
-
- // access image raw data
- image->SetMask(false);
- ptr = image->GetData();
-
- // workaround for components different from 1 or 3
- if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("JPEG2000: weird number of components"));
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
- tempcomps = 1;
- } else {
- tempcomps = opjimage->numcomps;
- }
-
- // workaround for subsampled components
- for (c = 1; c < tempcomps; c++) {
- if ((opjimage->comps[c].w != opjimage->comps[c - 1].w) ||
- (opjimage->comps[c].h != opjimage->comps[c - 1].h)) {
- tempcomps = 1;
- break;
- }
- }
-
- // workaround for different precision components
- for (c = 1; c < tempcomps; c++) {
- if (opjimage->comps[c].bpp != opjimage->comps[c - 1].bpp) {
- tempcomps = 1;
- break;
- }
- }
-
- // only one component selected
- if (m_components) {
- tempcomps = 1;
- }
-
- // RGB color picture
- if (tempcomps == 3) {
- int row, col;
- int *r = opjimage->comps[0].data;
- int *g = opjimage->comps[1].data;
- int *b = opjimage->comps[2].data;
- if (shiftbpp > 0) {
- for (row = 0; row < opjimage->comps[0].h; row++) {
- for (col = 0; col < opjimage->comps[0].w; col++) {
-
- *(ptr++) = (*(r++)) >> shiftbpp;
- *(ptr++) = (*(g++)) >> shiftbpp;
- *(ptr++) = (*(b++)) >> shiftbpp;
-
- }
- }
-
- } else if (shiftbpp < 0) {
- for (row = 0; row < opjimage->comps[0].h; row++) {
- for (col = 0; col < opjimage->comps[0].w; col++) {
-
- *(ptr++) = (*(r++)) << -shiftbpp;
- *(ptr++) = (*(g++)) << -shiftbpp;
- *(ptr++) = (*(b++)) << -shiftbpp;
-
- }
- }
-
- } else {
- for (row = 0; row < opjimage->comps[0].h; row++) {
- for (col = 0; col < opjimage->comps[0].w; col++) {
-
- *(ptr++) = *(r++);
- *(ptr++) = *(g++);
- *(ptr++) = *(b++);
-
- }
- }
- }
- }
-
- // B/W picture
- if (tempcomps == 1) {
- int row, col;
- int selcomp;
-
- if (m_components) {
- selcomp = m_components - 1;
- } else {
- selcomp = 0;
- }
-
- int *y = opjimage->comps[selcomp].data;
- if (shiftbpp > 0) {
- for (row = 0; row < opjimage->comps[selcomp].h; row++) {
- for (col = 0; col < opjimage->comps[selcomp].w; col++) {
-
- *(ptr++) = (*(y)) >> shiftbpp;
- *(ptr++) = (*(y)) >> shiftbpp;
- *(ptr++) = (*(y++)) >> shiftbpp;
-
- }
- }
- } else if (shiftbpp < 0) {
- for (row = 0; row < opjimage->comps[selcomp].h; row++) {
- for (col = 0; col < opjimage->comps[selcomp].w; col++) {
-
- *(ptr++) = (*(y)) << -shiftbpp;
- *(ptr++) = (*(y)) << -shiftbpp;
- *(ptr++) = (*(y++)) << -shiftbpp;
-
- }
- }
- } else {
- for (row = 0; row < opjimage->comps[selcomp].h; row++) {
- for (col = 0; col < opjimage->comps[selcomp].w; col++) {
-
- *(ptr++) = *(y);
- *(ptr++) = *(y);
- *(ptr++) = *(y++);
-
- }
- }
- }
- }
-
-
- }
-
- wxMutexGuiEnter();
- wxLogMessage(wxT("JPEG 2000 image loaded."));
- wxMutexGuiLeave();
-
- /* close openjpeg structs */
- opj_destroy_decompress(dinfo);
- opj_image_destroy(opjimage);
- free(src);
-
- if (!image->Ok()) {
- return false;
- } else {
- return true;
- }
-
-}
-
-#define CINEMA_24_CS 1302083 /* Codestream length for 24fps */
-#define CINEMA_48_CS 651041 /* Codestream length for 48fps */
-#define COMP_24_CS 1041666 /* Maximum size per color component for 2K & 4K @ 24fps */
-#define COMP_48_CS 520833 /* Maximum size per color component for 2K @ 48fps */
-
-// save the j2k codestream
-bool wxJPEG2000Handler::SaveFile(wxImage *wimage, wxOutputStream& stream,
- bool verbose)
-{
- opj_cparameters_t parameters; /* compression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_image_t *oimage = NULL;
- opj_image_cmptparm_t *cmptparm;
- opj_cio_t *cio = NULL;
- opj_codestream_info_t cstr_info;
- int codestream_length;
- bool bSuccess;
- int i;
- char indexfilename[OPJ_PATH_LEN] = ""; /* index file name */
-
- /*
- configure the event callbacks (not required)
- setting of each callback is optional
- */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = jpeg2000_error_callback;
- event_mgr.warning_handler = jpeg2000_warning_callback;
- event_mgr.info_handler = jpeg2000_info_callback;
-
- /* set encoding parameters to default values */
- opj_set_default_encoder_parameters(&parameters);
-
- /* load parameters */
- parameters.cp_cinema = OFF;
-
- /* subsampling */
- if (sscanf(m_subsampling.ToAscii(), "%d,%d", &(parameters.subsampling_dx),
- &(parameters.subsampling_dy)) != 2) {
- wxLogError(wxT("Wrong sub-sampling encoder setting: dx,dy"));
- return false;
- }
-
- /* compression rates */
- if ((m_rates != wxT("")) && (!m_enablequality)) {
- const char *s1 = m_rates.ToAscii();
- wxLogMessage(wxT("rates %s"), s1);
- while (sscanf(s1, "%f", &(parameters.tcp_rates[parameters.tcp_numlayers])) ==
- 1) {
- parameters.tcp_numlayers++;
- while (*s1 && *s1 != ',') {
- s1++;
- }
- if (!*s1) {
- break;
- }
- s1++;
- }
- wxLogMessage(wxT("%d layers"), parameters.tcp_numlayers);
- parameters.cp_disto_alloc = 1;
- }
-
- /* image quality, dB */
- if ((m_quality != wxT("")) && (m_enablequality)) {
- const char *s2 = m_quality.ToAscii();
- wxLogMessage(wxT("qualities %s"), s2);
- while (sscanf(s2, "%f", &parameters.tcp_distoratio[parameters.tcp_numlayers]) ==
- 1) {
- parameters.tcp_numlayers++;
- while (*s2 && *s2 != ',') {
- s2++;
- }
- if (!*s2) {
- break;
- }
- s2++;
- }
- wxLogMessage(wxT("%d layers"), parameters.tcp_numlayers);
- parameters.cp_fixed_quality = 1;
- }
-
- /* image origin */
- if (sscanf(m_origin.ToAscii(), "%d,%d", &parameters.image_offset_x0,
- &parameters.image_offset_y0) != 2) {
- wxLogError(wxT("bad coordinate of the image origin: x0,y0"));
- return false;
- }
-
- /* Create comment for codestream */
- if (m_enablecomm) {
- parameters.cp_comment = (char *) malloc(strlen(m_comment.ToAscii()) + 1);
- if (parameters.cp_comment) {
- strcpy(parameters.cp_comment, m_comment.ToAscii());
- }
- } else {
- parameters.cp_comment = NULL;
- }
-
- /* indexing file */
- if (m_enableidx) {
- strncpy(indexfilename, m_index.ToAscii(), OPJ_PATH_LEN);
- wxLogMessage(wxT("index file is %s"), indexfilename);
- }
-
- /* if no rate entered, lossless by default */
- if (parameters.tcp_numlayers == 0) {
- parameters.tcp_rates[0] = 0; /* MOD antonin : losslessbug */
- parameters.tcp_numlayers++;
- parameters.cp_disto_alloc = 1;
- }
-
- /* irreversible transform */
- parameters.irreversible = (m_irreversible == true) ? 1 : 0;
-
- /* resolutions */
- parameters.numresolution = m_resolutions;
-
- /* codeblocks size */
- if (m_cbsize != wxT("")) {
- int cblockw_init = 0, cblockh_init = 0;
- sscanf(m_cbsize.ToAscii(), "%d,%d", &cblockw_init, &cblockh_init);
- if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024 ||
- cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
- wxLogError(
- wxT("!! Size of code_block error !! Restrictions:\n width*height<=4096\n 4<=width,height<= 1024"));
- return false;
- }
- parameters.cblockw_init = cblockw_init;
- parameters.cblockh_init = cblockh_init;
- }
-
- /* precincts size */
- if (m_prsize != wxT("")) {
- char sep;
- int res_spec = 0;
- char *s = (char *) m_prsize.c_str();
- do {
- sep = 0;
- sscanf(s, "[%d,%d]%c", &parameters.prcw_init[res_spec],
- &parameters.prch_init[res_spec], &sep);
- parameters.csty |= 0x01;
- res_spec++;
- s = strpbrk(s, "]") + 2;
- } while (sep == ',');
- parameters.res_spec = res_spec;
- }
-
- /* tiles */
- if (m_tsize != wxT("")) {
- sscanf(m_tsize.ToAscii(), "%d,%d", &parameters.cp_tdx, &parameters.cp_tdy);
- parameters.tile_size_on = true;
- }
-
- /* tile origin */
- if (sscanf(m_torigin.ToAscii(), "%d,%d", &parameters.cp_tx0,
- &parameters.cp_ty0) != 2) {
- wxLogError(wxT("tile offset setting error: X0,Y0"));
- return false;
- }
-
- /* use SOP */
- if (m_enablesop) {
- parameters.csty |= 0x02;
- }
-
- /* use EPH */
- if (m_enableeph) {
- parameters.csty |= 0x04;
- }
-
- /* multiple component transform */
- if (m_multicomp) {
- parameters.tcp_mct = 1;
- } else {
- parameters.tcp_mct = 0;
- }
-
- /* mode switch */
- parameters.mode = (m_enablebypass ? 1 : 0) + (m_enablereset ? 2 : 0)
- + (m_enablerestart ? 4 : 0) + (m_enablevsc ? 8 : 0)
- + (m_enableerterm ? 16 : 0) + (m_enablesegmark ? 32 : 0);
-
- /* progression order */
- switch (m_progression) {
-
- /* LRCP */
- case 0:
- parameters.prog_order = LRCP;
- break;
-
- /* RLCP */
- case 1:
- parameters.prog_order = RLCP;
- break;
-
- /* RPCL */
- case 2:
- parameters.prog_order = RPCL;
- break;
-
- /* PCRL */
- case 3:
- parameters.prog_order = PCRL;
- break;
-
- /* CPRL */
- case 4:
- parameters.prog_order = CPRL;
- break;
-
- /* DCI2K24 */
- case 5:
- parameters.cp_cinema = CINEMA2K_24;
- parameters.cp_rsiz = CINEMA2K;
- break;
-
- /* DCI2K48 */
- case 6:
- parameters.cp_cinema = CINEMA2K_48;
- parameters.cp_rsiz = CINEMA2K;
- break;
-
- /* DCI4K */
- case 7:
- parameters.cp_cinema = CINEMA4K_24;
- parameters.cp_rsiz = CINEMA4K;
- break;
-
- default:
- break;
- }
-
- /* check cinema */
- if (parameters.cp_cinema) {
-
- /* set up */
- parameters.tile_size_on = false;
- parameters.cp_tdx = 1;
- parameters.cp_tdy = 1;
-
- /*Tile part*/
- parameters.tp_flag = 'C';
- parameters.tp_on = 1;
-
- /*Tile and Image shall be at (0,0)*/
- parameters.cp_tx0 = 0;
- parameters.cp_ty0 = 0;
- parameters.image_offset_x0 = 0;
- parameters.image_offset_y0 = 0;
-
- /*Codeblock size= 32*32*/
- parameters.cblockw_init = 32;
- parameters.cblockh_init = 32;
- parameters.csty |= 0x01;
-
- /*The progression order shall be CPRL*/
- parameters.prog_order = CPRL;
-
- /* No ROI */
- parameters.roi_compno = -1;
-
- parameters.subsampling_dx = 1;
- parameters.subsampling_dy = 1;
-
- /* 9-7 transform */
- parameters.irreversible = 1;
-
- }
-
- /* convert wx image into opj image */
- cmptparm = (opj_image_cmptparm_t*) malloc(3 * sizeof(opj_image_cmptparm_t));
-
- /* initialize opj image components */
- memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
- for (i = 0; i < 3; i++) {
- cmptparm[i].prec = 8;
- cmptparm[i].bpp = 8;
- cmptparm[i].sgnd = false;
- cmptparm[i].dx = parameters.subsampling_dx;
- cmptparm[i].dy = parameters.subsampling_dy;
- cmptparm[i].w = wimage->GetWidth();
- cmptparm[i].h = wimage->GetHeight();
- }
-
- /* create the image */
- oimage = opj_image_create(3, &cmptparm[0], CLRSPC_SRGB);
- if (!oimage) {
- if (cmptparm) {
- free(cmptparm);
- }
- return false;
- }
-
- /* set image offset and reference grid */
- oimage->x0 = parameters.image_offset_x0;
- oimage->y0 = parameters.image_offset_y0;
- oimage->x1 = parameters.image_offset_x0 + (wimage->GetWidth() - 1) * 1 + 1;
- oimage->y1 = parameters.image_offset_y0 + (wimage->GetHeight() - 1) * 1 + 1;
-
- /* load image data */
- unsigned char *value = wimage->GetData();
- int area = wimage->GetWidth() * wimage->GetHeight();
- for (i = 0; i < area; i++) {
- oimage->comps[0].data[i] = *(value++);
- oimage->comps[1].data[i] = *(value++);
- oimage->comps[2].data[i] = *(value++);
- }
-
- /* check cinema again */
- if (parameters.cp_cinema) {
- int i;
- float temp_rate;
- opj_poc_t *POC = NULL;
-
- switch (parameters.cp_cinema) {
-
- case CINEMA2K_24:
- case CINEMA2K_48:
- if (parameters.numresolution > 6) {
- parameters.numresolution = 6;
- }
- if (!((oimage->comps[0].w == 2048) | (oimage->comps[0].h == 1080))) {
- wxLogWarning(
- wxT("Image coordinates %d x %d is not 2K compliant. JPEG Digital Cinema Profile-3 "
- "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080"),
- oimage->comps[0].w, oimage->comps[0].h);
- parameters.cp_rsiz = STD_RSIZ;
- }
- break;
-
- case CINEMA4K_24:
- if (parameters.numresolution < 1) {
- parameters.numresolution = 1;
- } else if (parameters.numresolution > 7) {
- parameters.numresolution = 7;
- }
- if (!((oimage->comps[0].w == 4096) | (oimage->comps[0].h == 2160))) {
- wxLogWarning(
- wxT("Image coordinates %d x %d is not 4K compliant. JPEG Digital Cinema Profile-4"
- "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160"),
- oimage->comps[0].w, oimage->comps[0].h);
- parameters.cp_rsiz = STD_RSIZ;
- }
- parameters.POC[0].tile = 1;
- parameters.POC[0].resno0 = 0;
- parameters.POC[0].compno0 = 0;
- parameters.POC[0].layno1 = 1;
- parameters.POC[0].resno1 = parameters.numresolution - 1;
- parameters.POC[0].compno1 = 3;
- parameters.POC[0].prg1 = CPRL;
- parameters.POC[1].tile = 1;
- parameters.POC[1].resno0 = parameters.numresolution - 1;
- parameters.POC[1].compno0 = 0;
- parameters.POC[1].layno1 = 1;
- parameters.POC[1].resno1 = parameters.numresolution;
- parameters.POC[1].compno1 = 3;
- parameters.POC[1].prg1 = CPRL;
- parameters.numpocs = 2;
- break;
- }
-
- switch (parameters.cp_cinema) {
- case CINEMA2K_24:
- case CINEMA4K_24:
- for (i = 0 ; i < parameters.tcp_numlayers; i++) {
- temp_rate = 0;
- if (parameters.tcp_rates[i] == 0) {
- parameters.tcp_rates[0] = ((float)(oimage->numcomps * oimage->comps[0].w *
- oimage->comps[0].h * oimage->comps[0].prec)) /
- (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- } else {
- temp_rate = ((float)(oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h
- * oimage->comps[0].prec)) /
- (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- if (temp_rate > CINEMA_24_CS) {
- parameters.tcp_rates[i] = ((float)(oimage->numcomps * oimage->comps[0].w *
- oimage->comps[0].h * oimage->comps[0].prec)) /
- (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- } else {
- /* do nothing */
- }
- }
- }
- parameters.max_comp_size = COMP_24_CS;
- break;
-
- case CINEMA2K_48:
- for (i = 0; i < parameters.tcp_numlayers; i++) {
- temp_rate = 0 ;
- if (parameters.tcp_rates[i] == 0) {
- parameters.tcp_rates[0] = ((float)(oimage->numcomps * oimage->comps[0].w *
- oimage->comps[0].h * oimage->comps[0].prec)) /
- (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- } else {
- temp_rate = ((float)(oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h
- * oimage->comps[0].prec)) /
- (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- if (temp_rate > CINEMA_48_CS) {
- parameters.tcp_rates[0] = ((float)(oimage->numcomps * oimage->comps[0].w *
- oimage->comps[0].h * oimage->comps[0].prec)) /
- (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
- } else {
- /* do nothing */
- }
- }
- }
- parameters.max_comp_size = COMP_48_CS;
- break;
- }
-
- parameters.cp_disto_alloc = 1;
- }
-
- /* get a J2K compressor handle */
- opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
- /* setup the encoder parameters using the current image and user parameters */
- opj_setup_encoder(cinfo, &parameters, oimage);
-
- /* open a byte stream for writing */
- /* allocate memory for all tiles */
- cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
- /* encode the image */
- bSuccess = opj_encode_with_info(cinfo, cio, oimage, &cstr_info);
- if (!bSuccess) {
-
- opj_cio_close(cio);
- opj_destroy_compress(cinfo);
- opj_image_destroy(oimage);
- if (cmptparm) {
- free(cmptparm);
- }
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
-
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
-
- wxLogError(wxT("failed to encode image"));
-
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-
- return false;
- }
- codestream_length = cio_tell(cio);
- wxLogMessage(wxT("Codestream: %d bytes"), codestream_length);
-
- /* write the buffer to stream */
- stream.Write(cio->buffer, codestream_length);
-
- /* close and free the byte stream */
- opj_cio_close(cio);
-
- /* Write the index to disk */
- if (*indexfilename) {
- if (write_index_file(&cstr_info, indexfilename)) {
- wxLogError(wxT("Failed to output index file"));
- }
- }
-
- /* free remaining compression structures */
- opj_destroy_compress(cinfo);
-
- /* free image data */
- opj_image_destroy(oimage);
-
- if (cmptparm) {
- free(cmptparm);
- }
- if (parameters.cp_comment) {
- free(parameters.cp_comment);
- }
- if (parameters.cp_matrice) {
- free(parameters.cp_matrice);
- }
-
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
-
- wxLogMessage(wxT("J2K: Image encoded!"));
-
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-
- return true;
-}
-
-#ifdef __VISUALC__
-#pragma warning(default:4611)
-#endif /* VC++ */
-
-// recognize the JPEG 2000 family starting box or the 0xFF4F JPEG 2000 SOC marker
-bool wxJPEG2000Handler::DoCanRead(wxInputStream& stream)
-{
- unsigned char hdr[24];
- int jpfamform;
-
- if (!stream.Read(hdr, WXSIZEOF(hdr))) {
- return false;
- }
-
- jpfamform = jpeg2000familytype(hdr, WXSIZEOF(hdr));
-
- return ((jpfamform == JP2_CFMT) || (jpfamform == MJ2_CFMT) ||
- (jpfamform == J2K_CFMT));
-}
-
-#endif // wxUSE_STREAMS
-
-#endif // wxUSE_LIBOPENJPEG
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.h b/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.h
deleted file mode 100644
index ca7f7f29..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/imagjpeg2000.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: imagalljpeg2000.h
-// Purpose: wxImage JPEG 2000 family file format handler
-// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik
-// RCS-ID: $Id: imagalljpeg2000.h,v 0.0 2008/01/31 11:22:00 VZ Exp $
-// Copyright: (c) Giuseppe Baruffa
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_IMAGJPEG2000_H_
-#define _WX_IMAGJPEG2000_H_
-
-#include "wx/defs.h"
-
-//-----------------------------------------------------------------------------
-// wxJPEG2000Handler
-//-----------------------------------------------------------------------------
-
-#if wxUSE_LIBOPENJPEG
-
-#include "wx/image.h"
-#include "openjp2/openjpeg.h"
-#include "jp2/index.h"
-
-#define wxBITMAP_TYPE_JPEG2000 50
-
-class WXDLLEXPORT wxJPEG2000Handler: public wxImageHandler
-{
-public:
- inline wxJPEG2000Handler()
- {
- m_name = wxT("JPEG 2000 family file format");
- m_extension = wxT("mj2");
- m_type = wxBITMAP_TYPE_JPEG2000;
- m_mime = wxT("image/mj2");
-
- /* decoding */
- m_reducefactor = 0;
- m_qualitylayers = 0;
- m_components = 0;
-#ifdef USE_JPWL
- m_enablejpwl = true;
- m_expcomps = JPWL_EXPECTED_COMPONENTS;
- m_maxtiles = JPWL_MAXIMUM_TILES;
-#endif // USE_JPWL
-
- /* encoding */
- m_subsampling = wxT("1,1");
- m_origin = wxT("0,0");
- m_rates = wxT("20,10,5");
- m_quality = wxT("30,35,40");
- m_enablequality = false;
- m_multicomp = false;
- m_irreversible = false;
- m_resolutions = 6;
- m_progression = 0;
- m_cbsize = wxT("32,32");
- m_prsize = wxT("[128,128],[128,128]");
- m_tsize = wxT("");
- m_torigin = wxT("0,0");
- /*m_progression
- m_resilience*/
- m_enablesop = false;
- m_enableeph = false;
- m_enablereset = false;
- m_enablesegmark = false;
- m_enablevsc = false;
- m_enablerestart = false;
- m_enableerterm = false;
- m_enablebypass = false;
- /*m_roicompo
- m_roiup
- m_indexfname*/
- m_enableidx = false;
- m_index = wxT("index.txt");
- m_enablepoc = false;
- m_poc = wxT("T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL");
- m_enablecomm = true;
-
-#if defined __WXMSW__
- m_comment = wxT("Created by OPJViewer Win32 - OpenJPEG version ");
-#elif defined __WXGTK__
- m_comment = wxT("Created by OPJViewer Lin32 - OpenJPEG version ");
-#else
- m_comment = wxT("Created by OPJViewer - OpenJPEG version ");
-#endif
-
-#ifdef USE_JPWL
- m_comment += wxString::Format(wxT("%s with JPWL"), (char *) opj_version());
-#else
- m_comment += wxString::Format(wxT("%s"), (char *) opj_version());
-#endif
-
- }
-
- // decoding engine parameters
- int m_reducefactor, m_qualitylayers, m_components, m_framenum;
-#ifdef USE_JPWL
- bool m_enablejpwl;
- int m_expcomps, m_maxtiles;
-#endif // USE_JPWL
-
- // encoding engine parameters
- wxString m_subsampling;
- wxString m_origin;
- wxString m_rates;
- wxString m_quality;
- bool m_enablequality;
- bool m_multicomp;
- bool m_irreversible;
- int m_resolutions;
- int m_progression;
- wxString m_cbsize;
- wxString m_prsize;
- wxString m_tsize;
- wxString m_torigin;
- /*m_progression
- m_resilience*/
- bool m_enablesop;
- bool m_enableeph;
- bool m_enablebypass;
- bool m_enableerterm;
- bool m_enablerestart;
- bool m_enablereset;
- bool m_enablesegmark;
- bool m_enablevsc;
- /*m_roicompo
- m_roiup
- m_indexfname*/
- bool m_enableidx;
- wxString m_index;
- bool m_enablecomm;
- wxString m_comment;
- bool m_enablepoc;
- wxString m_poc;
-
-#if wxUSE_STREAMS
- virtual bool LoadFile(wxImage *image, wxInputStream& stream,
- bool verbose = true, int index = -1);
- virtual bool SaveFile(wxImage *image, wxOutputStream& stream,
- bool verbose = true);
-protected:
- virtual bool DoCanRead(wxInputStream& stream);
-#endif
-
-private:
- OPJ_PROG_ORDER give_progression(char progression[4]);
- DECLARE_DYNAMIC_CLASS(wxJPEG2000Handler)
-};
-
-#endif // wxUSE_LIBOPENJPEG
-
-#endif // _WX_IMAGJPEG2000_H_
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.cpp b/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.cpp
deleted file mode 100644
index 4bf3ce37..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.cpp
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: imagmxf.cpp
-// Purpose: wxImage MXF (Material eXchange Format) JPEG 2000 file format handler
-// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik
-// RCS-ID: $Id: imagmxf.cpp,v 0.00 2007/11/19 17:00:00 MW Exp $
-// Copyright: (c) Giuseppe Baruffa
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef USE_MXF
-
-#include "mxflib/mxflib.h"
-using namespace mxflib;
-
-namespace
-{
- //! Structure holding information about the essence in each body stream
- struct EssenceInfo
- {
- UMIDPtr PackageID;
- PackagePtr Package;
- MDObjectPtr Descriptor;
- };
- //! Map of EssenceInfo structures indexed by BodySID
- typedef std::map<UInt32, EssenceInfo> EssenceInfoMap;
-
- //! The map of essence info for this file
- EssenceInfoMap EssenceLookup;
-};
-
-//! Build an EssenceInfoMap for the essence in a given file
-/*! \return True if al OK, else false
- */
-bool BuildEssenceInfo(MXFFilePtr &File, EssenceInfoMap &EssenceLookup);
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-
-#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG
-
-#include "imagmxf.h"
-
-#ifndef WX_PRECOMP
- #include "wx/log.h"
- #include "wx/app.h"
- #include "wx/intl.h"
- #include "wx/bitmap.h"
- #include "wx/module.h"
-#endif
-
-
-#include "libopenjpeg/openjpeg.h"
-
-
-#include "wx/filefn.h"
-#include "wx/wfstream.h"
-
-// ----------------------------------------------------------------------------
-// types
-// ----------------------------------------------------------------------------
-
-
-//-----------------------------------------------------------------------------
-// wxMXFHandler
-//-----------------------------------------------------------------------------
-
-IMPLEMENT_DYNAMIC_CLASS(wxMXFHandler,wxImageHandler)
-
-#if wxUSE_STREAMS
-
-#include <stdarg.h>
-#define MAX_MESSAGE_LEN 200
-
-//------------- MXF Manager
-
-// Debug and error messages
-
-//! Display a warning message
-void mxflib::warning(const char *Fmt, ...)
-{
- char msg[MAX_MESSAGE_LEN];
- va_list args;
-
- va_start(args, Fmt);
- _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args);
- va_end(args);
-
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[WARNING_MXF] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-//! Display an error message
-void mxflib::error(const char *Fmt, ...)
-{
- char msg[MAX_MESSAGE_LEN];
- va_list args;
-
- va_start(args, Fmt);
- _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args);
- va_end(args);
-
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[ERROR_MXF] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-//! Display an error message
-void mxflib::debug(const char *Fmt, ...)
-{
- char msg[MAX_MESSAGE_LEN];
- va_list args;
-
- va_start(args, Fmt);
- _vsnprintf(msg, MAX_MESSAGE_LEN, Fmt, args);
- va_end(args);
-
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[DEBUG_MXF] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-
-
-//------------- JPEG 2000 Data Source Manager
-
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
-#define MJ2_CFMT 3
-#define PXM_DFMT 0
-#define PGX_DFMT 1
-#define BMP_DFMT 2
-#define YUV_DFMT 3
-
-/* sample error callback expecting a FILE* client object */
-void mxf_error_callback(const char *msg, void *client_data) {
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-/* sample warning callback expecting a FILE* client object */
-void mxf_warning_callback(const char *msg, void *client_data) {
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-/* sample debug callback expecting no client object */
-void mxf_info_callback(const char *msg, void *client_data) {
- int message_len = strlen(msg) - 1;
- if (msg[message_len] != '\n')
- message_len = MAX_MESSAGE_LEN;
-#ifndef __WXGTK__
- wxMutexGuiEnter();
-#endif /* __WXGTK__ */
- wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);
-#ifndef __WXGTK__
- wxMutexGuiLeave();
-#endif /* __WXGTK__ */
-}
-
-
-/////////////////////////////////////////////////
-/////////////////////////////////////////////////
-
-// load the mxf file format
-bool wxMXFHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)
-{
- opj_dparameters_t parameters; /* decompression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
- opj_image_t *opjimage = NULL;
- unsigned char *src = NULL;
- unsigned char *ptr;
- int file_length, j2k_point, j2k_len;
- opj_codestream_info_t cstr_info; /* Codestream information structure */
-
- // simply display the version of the library
- wxLogMessage(wxT("Version of MXF: %s "), wxString::FromAscii(LibraryVersion().c_str()));
- //wxLogMessage(wxT("MXF file name: %s"), m_filename.GetFullPath());
-
- // open MXF file
- MXFFilePtr TestFile = new MXFFile;
- if (! TestFile->Open(m_filename.GetFullPath().c_str(), true))
- {
- wxLogError(wxT("Could not find %s"), m_filename.GetFullPath().c_str());
- return false;
- } else
- wxLogMessage(wxT("Found %s"), m_filename.GetFullPath().c_str());
-
- // Get the size
- TestFile->SeekEnd();
- wxLogMessage(wxT("Size is %d bytes"), TestFile->Tell());
- TestFile->Seek(0);
-
- // essence information
- //BuildEssenceInfo(TestFile, EssenceLookup);
-
- // close MXF file
- TestFile->Close();
-
- return false;
-
- // destroy the image
- image->Destroy();
-
- /* handle to a decompressor */
- opj_dinfo_t* dinfo = NULL;
- opj_cio_t *cio = NULL;
-
- /* configure the event callbacks (not required) */
- memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
- event_mgr.error_handler = mxf_error_callback;
- event_mgr.warning_handler = mxf_warning_callback;
- event_mgr.info_handler = mxf_info_callback;
-
- /* set decoding parameters to default values */
- opj_set_default_decoder_parameters(&parameters);
-
- /* prepare parameters */
- strncpy(parameters.infile, "", sizeof(parameters.infile)-1);
- strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1);
- parameters.decod_format = J2K_CFMT;
- parameters.cod_format = BMP_DFMT;
- if (m_reducefactor)
- parameters.cp_reduce = m_reducefactor;
- if (m_qualitylayers)
- parameters.cp_layer = m_qualitylayers;
- /*if (n_components)
- parameters. = n_components;*/
-
- /* JPWL only */
-#ifdef USE_JPWL
- parameters.jpwl_exp_comps = m_expcomps;
- parameters.jpwl_max_tiles = m_maxtiles;
- parameters.jpwl_correct = m_enablejpwl;
-#endif /* USE_JPWL */
-
- /* get a decoder handle */
- dinfo = opj_create_decompress(CODEC_J2K);
-
- /* find length of the stream */
- stream.SeekI(0, wxFromEnd);
- file_length = (int) stream.TellI();
-
- /* search for the m_framenum codestream position and length */
- //jp2c_point = searchjp2c(stream, file_length, m_framenum);
- //jp2c_len = searchjp2c(stream, file_length, m_framenum);
- j2k_point = 0;
- j2k_len = 10;
-
- // malloc memory source
- src = (unsigned char *) malloc(j2k_len);
-
- // copy the jp2c
- stream.SeekI(j2k_point, wxFromStart);
- stream.Read(src, j2k_len);
-
- /* catch events using our callbacks and give a local context */
- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
- /* setup the decoder decoding parameters using user parameters */
- opj_setup_decoder(dinfo, &parameters);
-
- /* open a byte stream */
- cio = opj_cio_open((opj_common_ptr)dinfo, src, j2k_len);
-
- /* decode the stream and fill the image structure */
- opjimage = opj_decode_with_info(dinfo, cio, &cstr_info);
- if (!opjimage) {
- wxMutexGuiEnter();
- wxLogError(wxT("MXF: failed to decode image!"));
- wxMutexGuiLeave();
- opj_destroy_decompress(dinfo);
- opj_cio_close(cio);
- free(src);
- return false;
- }
-
- /* close the byte stream */
- opj_cio_close(cio);
-
- /* common rendering method */
-#include "imagjpeg2000.cpp"
-
- wxMutexGuiEnter();
- wxLogMessage(wxT("MXF: image loaded."));
- wxMutexGuiLeave();
-
- /* close openjpeg structs */
- opj_destroy_decompress(dinfo);
- opj_image_destroy(opjimage);
- free(src);
-
- if (!image->Ok())
- return false;
- else
- return true;
-
-}
-
-// save the mxf file format
-bool wxMXFHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )
-{
- wxLogError(wxT("MXF: Couldn't save movie -> not implemented."));
- return false;
-}
-
-#ifdef __VISUALC__
- #pragma warning(default:4611)
-#endif /* VC++ */
-
-// recognize the MXF JPEG 2000 starting box
-bool wxMXFHandler::DoCanRead( wxInputStream& stream )
-{
- unsigned char hdr[4];
-
- if ( !stream.Read(hdr, WXSIZEOF(hdr)) )
- return false;
-
- return (hdr[0] == 0x06 &&
- hdr[1] == 0x0E &&
- hdr[2] == 0x2B &&
- hdr[3] == 0x34);
-}
-
-//! Build an EssenceInfoMap for the essence in a given file
-/*! \return True if al OK, else false
- */
-bool BuildEssenceInfo(MXFFilePtr &File, EssenceInfoMap &EssenceLookup)
-{
- // Empty any old data
- EssenceLookup.clear();
-
- // Get the master metadata set (or the header if we must)
- PartitionPtr MasterPartition = File->ReadMasterPartition();
- if(!MasterPartition)
- {
- File->Seek(0);
- MasterPartition = File->ReadPartition();
- warning("File %s does not contain a cloased copy of header metadata - using the open copy in the file header\n", File->Name.c_str());
- }
-
- if(!MasterPartition)
- {
- error("Could not read header metadata from file %s\n", File->Name.c_str());
- return false;
- }
-
- // Read and parse the metadata
- MasterPartition->ReadMetadata();
- MetadataPtr HMeta = MasterPartition->ParseMetadata();
-
- if(!HMeta)
- {
- error("Could not read header metadata from file %s\n", File->Name.c_str());
- return false;
- }
-
- /* Scan the Essence container data sets to get PackageID to BodySID mapping */
- MDObjectPtr ECDSet = HMeta[ContentStorage_UL];
- if(ECDSet) ECDSet = ECDSet->GetLink();
- if(ECDSet) ECDSet = ECDSet[EssenceContainerDataBatch_UL];
- if(!ECDSet)
- {
- error("Header metadata in file %s does not contain an EssenceContainerData set\n", File->Name.c_str());
- return false;
- }
-
- MDObject::iterator it = ECDSet->begin();
- while(it != ECDSet->end())
- {
- MDObjectPtr ThisECDSet = (*it).second->GetLink();
- MDObjectPtr PackageID;
- if(ThisECDSet) PackageID = ThisECDSet->Child(LinkedPackageUID_UL);
- if(PackageID)
- {
- EssenceInfo NewEI;
- NewEI.PackageID = new UMID(PackageID->PutData()->Data);
-
- // Inset the basic essence info - but not if this is external essence (BodySID == 0)
- UInt32 BodySID = ThisECDSet->GetUInt(BodySID_UL);
- if(BodySID) EssenceLookup[BodySID] = NewEI;
- }
- it++;
- }
-
- /* Now find the other items for the essence lookup map */
- if(EssenceLookup.size())
- {
- PackageList::iterator it = HMeta->Packages.begin();
- while(it != HMeta->Packages.end())
- {
- // Only Source Packages are of interest
- if((*it)->IsA(SourcePackage_UL))
- {
- MDObjectPtr Descriptor = (*it)->Child(Descriptor_UL);
- if(Descriptor) Descriptor = Descriptor->GetLink();
-
- if(Descriptor)
- {
- MDObjectPtr PackageID = (*it)->Child(PackageUID_UL);
- if(PackageID)
- {
- UMIDPtr TheID = new UMID(PackageID->PutData()->Data);
-
- /* Now do a lookup in the essence lookup map (it will need to be done the long way here */
- EssenceInfoMap::iterator EL_it = EssenceLookup.begin();
- while(EL_it != EssenceLookup.end())
- {
- if((*((*EL_it).second.PackageID)) == (*TheID))
- {
- // If found, set the missing items and stop searching
- (*EL_it).second.Package = (*it);
- (*EL_it).second.Descriptor = Descriptor;
- break;
- }
- EL_it++;
- }
- }
- }
- }
-
- it++;
- }
- }
-
- return true;
-}
-
-
-#endif // wxUSE_STREAMS
-
-#endif // wxUSE_LIBOPENJPEG
-
-#endif // USE_MXF
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.h b/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.h
deleted file mode 100644
index 099aa1cc..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/imagmxf.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/////////////////////////////////////////////////////////////////////////////
-// Name: imagmxf.h
-// Purpose: wxImage MXF (Material eXchange Format) JPEG 2000 file format handler
-// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik
-// RCS-ID: $Id: imagmj2.h,v 0.0 2007/11/19 17:00:00 VZ Exp $
-// Copyright: (c) Giuseppe Baruffa
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_IMAGMXF_H_
-#define _WX_IMAGMXF_H_
-
-#ifdef USE_MXF
-
-#include "wx/defs.h"
-#include "wx/filename.h"
-
-//-----------------------------------------------------------------------------
-// wxMXFHandler
-//-----------------------------------------------------------------------------
-
-#if wxUSE_LIBOPENJPEG
-
-#include "wx/image.h"
-#include "libopenjpeg/openjpeg.h"
-
-#define wxBITMAP_TYPE_MXF 51
-
-class WXDLLEXPORT wxMXFHandler: public wxImageHandler
-{
-public:
- inline wxMXFHandler()
- {
- m_name = wxT("MXF JPEG 2000 file format");
- m_extension = wxT("mxf");
- m_type = wxBITMAP_TYPE_MXF;
- m_mime = wxT("image/mxf");
-
- m_reducefactor = 0;
- m_qualitylayers = 0;
- m_components = 0;
- m_filename = wxT("");
-#ifdef USE_JPWL
- m_enablejpwl = true;
- m_expcomps = JPWL_EXPECTED_COMPONENTS;
- m_maxtiles = JPWL_MAXIMUM_TILES;
-#endif // USE_JPWL
- }
-
- // decoding engine parameters
- int m_reducefactor, m_qualitylayers, m_components, m_framenum;
- wxFileName m_filename;
-#ifdef USE_JPWL
- bool m_enablejpwl;
- int m_expcomps, m_maxtiles;
-#endif // USE_JPWL
-
-#if wxUSE_STREAMS
- virtual bool LoadFile(wxImage *image, wxInputStream& stream,
- bool verbose = true, int index = -1);
- virtual bool SaveFile(wxImage *image, wxOutputStream& stream,
- bool verbose = true);
-protected:
- virtual bool DoCanRead(wxInputStream& stream);
-#endif
-
-private:
- DECLARE_DYNAMIC_CLASS(wxMXFHandler)
-};
-
-#endif // wxUSE_LIBOPENJPEG
-
-#endif // USE_MXF
-
-#endif // _WX_IMAGMXF_H_
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/license.txt b/openjpeg/src/bin/wx/OPJViewer/source/license.txt
deleted file mode 100644
index 919566d1..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/license.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
-Copyright (c) 2002-2014, Professor Benoit Macq
-Copyright (c) 2001-2003, David Janssens
-Copyright (c) 2002-2003, Yannick Verschueren
-Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
-Copyright (c) 2005, Herve Drolon, FreeImage Team
-Copyright (c) 2007, Digital Signal Processing Laboratory, Universit degli studi di Perugia (UPG), Italy
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditionsare met:
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/opj_logo.xpm b/openjpeg/src/bin/wx/OPJViewer/source/opj_logo.xpm
deleted file mode 100644
index c64d0a7b..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/opj_logo.xpm
+++ /dev/null
@@ -1,285 +0,0 @@
-/* XPM */
-static char *opj_logo[] = {
-/* columns rows colors chars-per-pixel */
-"90 61 218 2",
-" c #BE3D12",
-". c #BF461D",
-"X c #AD5435",
-"o c #B64925",
-"O c #B54E2B",
-"+ c #BC4620",
-"@ c #BB4B25",
-"# c #BC4E29",
-"$ c #B5502F",
-"% c #BD512C",
-"& c #B45334",
-"* c #B35638",
-"= c #B45B3D",
-"- c #BB5533",
-"; c #BE5937",
-": c #BC5C3D",
-"> c #9C766A",
-", c #AD5D42",
-"< c #B55F41",
-"1 c #BA5E40",
-"2 c #A7634D",
-"3 c #A76C57",
-"4 c #AA6750",
-"5 c #AC6B56",
-"6 c #AA6E5A",
-"7 c #A4705E",
-"8 c #B46045",
-"9 c #B1644B",
-"0 c #BD6244",
-"q c #B96448",
-"w c #BC694D",
-"e c #B36B53",
-"r c #B26E58",
-"t c #BB6C52",
-"y c #B2725D",
-"u c #BD7056",
-"i c #BB745C",
-"p c #A67566",
-"a c #A57B6D",
-"s c #AE7562",
-"d c #AB7867",
-"f c #AA7C6C",
-"g c #A07E73",
-"h c #AA7F71",
-"j c #B37661",
-"k c #B47863",
-"l c #B27D6B",
-"z c #BB7863",
-"x c #BA7E69",
-"c c #C73605",
-"v c #C63A0B",
-"b c #CB3300",
-"n c #CA3807",
-"m c #C93A0A",
-"M c #C43E11",
-"N c #C93E10",
-"B c #C44115",
-"V c #C3441A",
-"C c #C4481E",
-"Z c #CA4113",
-"A c #C94519",
-"S c #CB481C",
-"D c #C24A23",
-"F c #C24F28",
-"G c #CD4D23",
-"H c #C4522D",
-"J c #CB532B",
-"K c #C25632",
-"L c #C35936",
-"P c #C25C3B",
-"I c #C85630",
-"U c #CB5933",
-"Y c #CB5E3A",
-"T c #D05026",
-"R c #CC613D",
-"E c #C26343",
-"W c #C46748",
-"Q c #C1694C",
-"! c #CD6744",
-"~ c #CA6C4D",
-"^ c #C37155",
-"/ c #C4755B",
-"( c #CB7356",
-") c #C8765B",
-"_ c #D06D4C",
-"` c #D07253",
-"' c #D47B5E",
-"] c #C37B63",
-"[ c #C27E68",
-"{ c #C97F68",
-"} c #A68175",
-"| c #A48479",
-" . c #AD8172",
-".. c #AD8578",
-"X. c #AB897D",
-"o. c #B1806F",
-"O. c #BA816F",
-"+. c #B38373",
-"@. c #B58778",
-"#. c #B3897B",
-"$. c #BA8472",
-"%. c #BB8C7C",
-"&. c #C2816B",
-"*. c #CD846C",
-"=. c #C38470",
-"-. c #C38976",
-";. c #C38D7B",
-":. c #CC8973",
-">. c #CF8F7A",
-",. c #CB907D",
-"<. c #D1937F",
-"1. c #948E8C",
-"2. c #9D8C86",
-"3. c #9D8F89",
-"4. c #96908E",
-"5. c #9C918D",
-"6. c #949392",
-"7. c #9B9492",
-"8. c #9D9997",
-"9. c #9D9C9C",
-"0. c #A38B83",
-"q. c #AA8D83",
-"w. c #A4918B",
-"e. c #AC9087",
-"r. c #AB938C",
-"t. c #A49590",
-"y. c #A29996",
-"u. c #A19D9C",
-"i. c #AA9790",
-"p. c #AC9994",
-"a. c #AC9E99",
-"s. c #B18D81",
-"d. c #B59084",
-"f. c #B49389",
-"g. c #BA9184",
-"h. c #B89589",
-"j. c #BA988D",
-"k. c #B29B93",
-"l. c #BC9C92",
-"z. c #ACA19D",
-"x. c #B1A19D",
-"c. c #BCA39B",
-"v. c #A3A3A3",
-"b. c #ABA5A3",
-"n. c #AEA9A7",
-"m. c #ABABAA",
-"M. c #B3A5A1",
-"N. c #B3A9A6",
-"B. c #B3ADAA",
-"V. c #B9A6A0",
-"C. c #B9AAA5",
-"Z. c #BAADA9",
-"A. c #B4B0AF",
-"S. c #BAB0AD",
-"D. c #B4B3B3",
-"F. c #BAB5B3",
-"G. c #BDB8B6",
-"H. c #BBBBBB",
-"J. c #C39384",
-"K. c #C0978A",
-"L. c #C2998B",
-"P. c #CA9483",
-"I. c #CD9A8A",
-"U. c #C19D92",
-"Y. c #D69B89",
-"T. c #DB9680",
-"R. c #C2A095",
-"E. c #C4A69C",
-"W. c #CCA193",
-"Q. c #C8A599",
-"!. c #CBA99D",
-"~. c #C6AEA6",
-"^. c #CCACA2",
-"/. c #CBB2AB",
-"(. c #C3B8B5",
-"). c #C2BDBC",
-"_. c #C9B9B3",
-"`. c #D3ADA0",
-"'. c #D3B4A9",
-"]. c #DCB2A4",
-"[. c #DEB6A8",
-"{. c #D1BFB9",
-"}. c #D9BEB5",
-"|. c #C5C0BE",
-" X c #CDC0BC",
-".X c #D2C1BB",
-"XX c #DDC3BB",
-"oX c #E0C5BC",
-"OX c #E0C8BF",
-"+X c #C2C2C2",
-"@X c #CBC4C2",
-"#X c #CDC8C6",
-"$X c #CCCBCB",
-"%X c #D2C6C2",
-"&X c #D1CECD",
-"*X c #DDC8C1",
-"=X c #DECFCA",
-"-X c #D9D1CE",
-";X c #D3D3D3",
-":X c #D9D5D4",
-">X c #DED9D7",
-",X c #DBDBDB",
-"<X c #E1CAC3",
-"1X c #E2CFC8",
-"2X c #E1D3CE",
-"3X c #E2D5D0",
-"4X c #E5D8D3",
-"5X c #E4DDDB",
-"6X c #E8DBD6",
-"7X c #EADEDA",
-"8X c #E6E0DE",
-"9X c #EBE0DC",
-"0X c #E4E4E4",
-"qX c #E8E2E0",
-"wX c #EBEBEB",
-"eX c #F0EAE8",
-"rX c #F3F3F3",
-"tX c #FEFEFE",
-/* pixels */
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXrXrXtXrXrXrXrXrXrXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXrXtXrXrXrXwXwXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXrXrXrXwXwX0X0XqX0X0X0X0XwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXrXtXrXwXwX2X[.[.].].].].].1XwXrXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXrXrXrXwX0X0XL.J b b b b b b b J '.0X0XwXwXrXrXrXrXrXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXrXrXwX0XXXt m b m B V N b b v >.;X0XwXwXwXwXrXwXwXrXrXrXrXtXrXtXrXrXrXwXrXrXrXrXrXrXrXrXrXrXrXwXrXrXwXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXrXrXrX0X,X'.S b b P l.z.M.k.w n b b g.;X,X,X,X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0XwX0X0XwXwXwXwX0X0X0X0X0X0XwXwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXrXrXwX0X:XT.m b A ] G.D.D.m.$.m b b $.$X&X.X}.XX>XOX}.oXXX<X0X0XwXwXwX0X2XXXoXXXoXOX5X0XwX0X1XoXXX5X*X}.}.oX<XqXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXrXwX0X,XL.b b D M.H.D.D.D.D.m.L b b W H.Z.# b Y / m b b b Z P.:X:X:X$X:.Z b b b b n :.;X;X;XR b A &.Z b b b b *.wXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXrXwX0X:X$.b b E B.H.H.D.D.D.D.P b b E H.V.. b U L v v n b b ( #X;X$X~.Y b m N m b b ! {.&X#XI b C R v v n b b ! 0XwXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXwX0X:X!.A b Z F.H.H.H.H.H.D.m.L b b e b.+.b b V k i.r.t n b b s.H.x v b L q.b.p.D b b t F.$.n b M l a.M.y b b A :X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXwX0X:XL.m b D H.).H.+XH.H.H.D.H b b 6 v.j b b - a.A.m.@.m b b h D.< b b w z.b.b.P b b q B.z b b @ B.D.m...v b G :X,XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwX0X,X&X/ b b , D.H.+X+X+X+XH.f.B b b 5.8.M b M w.v.v.v.r.D b b h l v b b M V v b b q u.X b n @.v.m.v.j b b Q &X,X0XwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwX0X,X$X^ b b , H.H.+X+XH.H.H.s.N b n 7.7.v b B 8.v.v.v.w.M b b g r b b b n n n b b b b e y.O b n X.m.v.n.e b b u &X,X0XrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrX0X,X$X/ b b + F.H.H.H.+XH.d.b b M | 8.> c b @ 9.v.9.u., b b - 3.& b b 7 1.1.4.4.4.6.7.9.w.m b + t.v.m.p.D b b K.;X,X0XwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwX0X,X$X-.b b b i D.H.G.H.J.N b b = 9.9.5 c b B 7.9.v.y.b b m f 4.O b b 3 6.6.6.g 9 4 h u.h b b - b.m.m.s.b b N ~.;X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwX0X,X;XE.G b b I z ] ] ] W n b H l 9.8.9 b b m e 6 r e b b # 0.y.< b b O 6 p 6 < # ; q.v.t b b 0 n.A.A.+.b b H _.;X,XwXwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwXwX,X;X#Xf.b b b b b b b b b - a.v.v.w.@ b b v b b b b b @ b.m.v.w.M b b b b b b v ..m.n.A b n g.H.H.H.4 b b [ &X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXwXwX0X:X$XZ.Q H v n b m B H E x n.m.m.q.B b v < . v N + E z m.m.m.b.e - M m v M - t k.D.m.; # - V.H.+XH.s # # K.:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXwXwX,X,X$X+XG.Z.Z.B.C.S.F.H.H.H.D.D.j b b q v.b.a.n.B.H.H.+X+X+XH.H.D.Z.C.Z.Z.F.H.H.+X+XH.).H.$X&X&X;X$X#X#X:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXrXwX0X,X;X#X+X+X+XH.H.+X+X+XH.H.H.D.e b n i n.m.D.H.H.+X#X$X$X+X+X+X+XH.H.H.H.+X+X+X$X&X&X&X$X;X;X;X:X;X:X,X,X0XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXrXrXwXwX,X,X;X;X$X$X$X;X;X&X;X$X#X+XF b v s.H.H.+X$X&X;X;X,X,X,X;X:X;X;X;X;X;X;X:X,X,X,X0X,X0X,X0X0X0X0X0X0X0XwXwXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXrXtXrXwXwX0X,X:X;X;X;X;X;X:X;X;X;X$X+XC b B k.+X+X$X$X;X,X,X0X0X0X0X0X;X,X,X,X,X,X,X,X,X0X0X0X0X0X0XwX0X0X0XwXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXrXrXrXrXwXwXwX0X0X0X0X0X0X0X,X,X:X^.^.!.$X$X;X,X,X0XwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXwXrXrXwXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXrXrXrXrXwXwXwXwX0XwXwXwX0X0X,X:X;X$X&X&X;X,X,X0XwXwXwXrXrXrXrXrXwXwXwXwXwXwXwXrXrXrXwXrXrXrXrXrXrXrXrXrXrXtXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXwXwXwXwX0X,X0X0X0XwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXwXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXtXtXtXrXrXtXtXtXtXrXrXtXrXrXtXrXtXrXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXrXtXtXrXtXrXrXrXrXrXrXwXwXwX0XwX0XwXwXwXrXrXrXtXtXrXrXrXrXrXrXrXrXwXrXwXrXwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXrXrXtXtXrXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwXrXrXrXrXrXrXtXrXtXrXrXrXrXrXwXwXwXwXwX0X0XwX0XwXwXwXwXwXwXwXrXwXwXwX0X0X0X0XwX0XwXwXrXrXrXwXrXwXwXwX0XwX0XwXwXwXrXrXrXrXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXtXtXrXrXtXrXrXeX7X7X9XwXwXwX5X3X3X3X2X2X2X5X0XwXwXwXwXwX8X3X3X2X2X2X2X2X3X6X6X7XwXwXwXwXwXwX7X1XXXOXOX1X8XwXwXrXrXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXrXrXwXT.T T :.,X,X-X` G G G G G G U _ J.-X,X,X,X[ G G G G G G G G G G _ >XwX0X,X&XI.R N b b b m ! `.5XwXrXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXtXrXrXrXwX0X' b b ] >X,X%XJ b b b b b b b b Q {.:X;X:Xq b b b b b b b b b b Y >X0X,X-X'.^ n b b b b b m *.1XwXwXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrX0X0X%XL b b L.@X+X-.b b M L L L D b b b M V.+X(.N b b D H H H H H U U W.;X&X^.H b b n W -.-.W n b b J &XwXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0X XF b b U.+X+X[ b b D z z j P v b b N U.H.S.m b m E Q t ^ ) / ) ) /.$X$X;.m b n A %.H.H.J.N b b N .XwXwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X!.m b L N.D.m.* b b y v.v.v.v.p.n b M f.m.w b b D u.v.m.m.D.G.H.H.+X).g.b b B j.F.D.D.D.D.l.; F I /.0XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X:XU.n b E B.A.n.$ b b s v.9.v.v.r.n n M r.b.1 b b D u.v.m.m.D.D.H.H.).H.k b b # M.G.D.D.D.D.Z.t w u _.0XwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX,X;X$XJ b m h b.v.i.m b M a 5.5.2.p M b c < 8.2.+ b b M o o o o # % j G.H.g.m b A M.D.D.D.B.M.M.M.M.Z.(.:X0XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXwX,X,X&X(.n b M 0.v.v.s b b b b b n b b c b M u.v.g M b b b b b b b b b i G.D.0 b b 8 D.D.H.G.P n b b n b U :X,XwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwX0X,X;X$XV.n b M w.v.9.< b b b b b b b b c H r 9.v.a n b * < < w w Q Q g.D.B.: b b r D.D.D.m.C b b b b b ) ;X0XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrX6XP.=.K.;X#X+Xx n b D v.u.7.. b b M D . D & 2 q.b.b.v.v.< b b X 6.9.9.b.m.D.D.D.D.n.# b b f D.D.D.b.= 1 * N b n !.;X,XwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXwX<X~ P x $X+XH.z b b - v.v.3.M b b < r r r k 0.a.m.m.m.v.# b b , 6.9.v.m.D.D.D.H.D.z.O b b s D.D.D.N.f l 9 v b M ~.;X,XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwX0XY.n b e H.H.V.F b b p b.v.h v b v v.m.A.D.H.+X+X+XH.D.p.b b m p 9.v.m.D.D.H.H.H.D.N.- b b - m.A.D.A.m.a.B b b - (.:X0XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0XY.n b ; Z.C.$.A b v 0.m.m.l n b M m.D.D.H.+X#X+X+XH.H.r.b b m < d l l l $.;.J.V.H.B.w b b C @.s.a.k.#.j n b b : ).:X,XwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X'.N b b A B n b n z m.D.B.0 b b 9 H.H.+X$X;X:X;X$X$X+Xl b b b b b b b b b b b s.H.H.B.H b b b n Z Z b b V n b ] $X:X0XwXrXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwX0X,X.XR b b b b b A P d.D.D.C.H b b j H.$X$X;X:X,X,X;X;X+X/ b b b b b b b b b b b a.H.H.D.u G b b b b b B H : v m ;.$X,XwXwXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X Xg.j 5 y s.C.H.H.+X+X|.E.Q.Q. X;X;X,X0XwXwX0X0X,X;X/.U.j.h.g.f.h.j.U.U.U.!.$X$X+X+XH.Z.g.y 4 6 l x.D.A.l.~.#X,X0XwXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwX0X:X$XG.k.e.f.B.H.H.+X$X$X$X#X$X$X;X;X,X0XwXwXwXwX0X0X;X$X+XH.D.D.D.F.H.+X+X#X&X$X;X$X$X+X+XA.r.X.e.a.H.H.H.+X+X;X,X0XwXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X,X$X&X$X$X$X$X;X;X,X,X,X,X,X,X0XwXwXwXrXtXrXrXwXwX0X,X;X$X$X+X$X$X$X;X;X:X,X,X,X,X,X;X$X&X#X#X$X$X$X$X$X;X,X,X0XwXrXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X,X:X;X;X$X;X;X:X,X,X0X0X,X0X0X0XwXwXwXrXrXtXrXrXwXwX0X;X;X$X&X$X$X&X:X,X,X,X,X0X,X,X:X;X;X$X$X$X$X$X;X:X,X,X0XwXwXrXrXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwXwXwX0X0X0X0X0X0XwXwXwXwXwXwXwXwXrXwXrXtXtXrXtXtXrXrXrXwX0X0X0X0X,X,X0X0X0X0XwXwXwXwXwXwX0X0X0X,X,X,X,X0X0XwXwXwXrXtXrXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwXwX0X0X0X0X0XwXwXwXrXwXrXrXrXrXrXtXrXtXtXtXtXrXrXrXwXwXwX0X0X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXrXrXrXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXrXtXtXtXtXtXtXtXrXtXrXtXrXrXrXrXwXwXrXrXrXrXrXrXrXtXrXrXrXrXrXrXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXtXtXrXtXrXtXrXrXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXrXrXtXrXrXrXrXrXrXrXrXtXrXrXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
-"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX"
-};
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/readmeafter.txt b/openjpeg/src/bin/wx/OPJViewer/source/readmeafter.txt
deleted file mode 100644
index 87c122be..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/readmeafter.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-This viewer is conceived to open and display information and image content of J2K, JP2,
-and MJ2 files.
-The viewer application interface is divided into three main panels:
-- a browsing pane;
-- a viewing pane;
-- a log/peek pane.
-
-The browsing pane will present the markers or boxes hierarchy, with position (byte number where marker/box starts and stops) and length information (i.e., inner length as signalled by marker/box and total length, with marker/box sign included), in the following form:
-
-filename
-|
-|_ #000: Marker/Box short name (Hex code)
-| |
-| |_ *** Marker/Box long name ***
-| |_ startbyte > stopbyte, inner_length + marker/box sign length (total length)
-| |_ Additional info, depending on the marker/box type
-| |_ ...
-|
-|_ #001: Marker/Box short name (Hex code)
-| |
-| |_ ...
-|
-...
-
-
-The viewing pane will display the decoded image contained in the JPEG 2000 file.
-It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working.
-
-
-The log/peek pane is shared among two different subpanels:
-
-- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library
-- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section.
-
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/readmebefore.txt b/openjpeg/src/bin/wx/OPJViewer/source/readmebefore.txt
deleted file mode 100644
index c945d291..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/readmebefore.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-What is OpenJPEG ?
-==================
-The OpenJPEG library is an open-source JPEG 2000 codec written in C language. It has been developed in order to promote the use of JPEG 2000, the new still-image compression standard from the Joint Photographic Experts Group (JPEG). In addition to the basic codec, various other features are under development, among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool useful for the JPIP protocol, JPWL-tools for error-resilience, a Java-viewer for j2k-images, ...
-
-Who can use the library ?
-=========================
-Anybody. As the OpenJPEG library is released under the BSD license, anybody can use or modify the library, even for commercial applications. The only restriction is to retain the copyright in the sources or the binaries documentation.
-
-Who is developing the library ?
-===============================
-The library is developed by the Communications and Remote Sensing Lab (TELE), in the Universit Catholique de Louvain (UCL). The JPWL module is developed and maintained by the Digital Signal Processing Lab (DSPLab) of the University of Perugia, Italy (UNIPG). As our purpose is to make OpenJPEG really useful for those interested in the image compression field, any feedback/advices are obviously welcome ! We will do our best to handle them quickly.
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/wxj2kparser.cpp b/openjpeg/src/bin/wx/OPJViewer/source/wxj2kparser.cpp
deleted file mode 100644
index 7c85d873..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/wxj2kparser.cpp
+++ /dev/null
@@ -1,1470 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "OPJViewer.h"
-
-/* From little endian to big endian, 2 bytes */
-#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8)
-#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24)
-
-/* From codestream to int values */
-#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \
- ((unsigned long int) (C)[(P) + 1] << 16) + \
- ((unsigned long int) (C)[(P) + 2] << 8) + \
- ((unsigned long int) (C)[(P) + 3] << 0))
-
-#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \
- ((unsigned long int) (C)[(P) + 1] << 0))
-
-
-/* Markers values */
-#define J2KMARK_NUM 24
-enum {
- SOC_VAL = 0xFF4F,
- SOT_VAL = 0xFF90,
- SOD_VAL = 0xFF93,
- EOC_VAL = 0xFFD9,
- SIZ_VAL = 0xFF51,
- COD_VAL = 0xFF52,
- COC_VAL = 0xFF53,
- RGN_VAL = 0xFF5E,
- QCD_VAL = 0xFF5C,
- QCC_VAL = 0xFF5D,
- POD_VAL = 0xFF5F,
- TLM_VAL = 0xFF55,
- PLM_VAL = 0xFF57,
- PLT_VAL = 0xFF58,
- PPM_VAL = 0xFF60,
- PPT_VAL = 0xFF61,
- SOP_VAL = 0xFF91,
- EPH_VAL = 0xFF92,
- COM_VAL = 0xFF64
-#ifdef USE_JPWL
- , EPB_VAL = 0xFF66,
- ESD_VAL = 0xFF67,
- EPC_VAL = 0xFF68,
- RED_VAL = 0xFF69
- /*, EPB_VAL = 0xFF96,
- ESD_VAL = 0xFF98,
- EPC_VAL = 0xFF97,
- RED_VAL = 0xFF99*/
-#endif // USE_JPWL
-#ifdef USE_JPSEC
- , SEC_VAL = 0xFF65
-#endif // USE_JPSEC
-};
-
-// All the markers in one vector
-unsigned short int marker_val[] = {
- SOC_VAL, SOT_VAL, SOD_VAL, EOC_VAL,
- SIZ_VAL,
- COD_VAL, COC_VAL, RGN_VAL, QCD_VAL, QCC_VAL, POD_VAL,
- TLM_VAL, PLM_VAL, PLT_VAL, PPM_VAL, PPT_VAL,
- SOP_VAL, EPH_VAL,
- COM_VAL
-#ifdef USE_JPWL
- , EPB_VAL, ESD_VAL, EPC_VAL, RED_VAL
-#endif // USE_JPWL
-#ifdef USE_JPSEC
- , SEC_VAL
-#endif // USE_JPSEC
-};
-
-// Marker names
-static const char *marker_name[] = {
- "SOC", "SOT", "SOD", "EOC",
- "SIZ",
- "COD", "COC", "RGN", "QCD", "QCC", "POD",
- "TLM", "PLM", "PLT", "PPM", "PPT",
- "SOP", "EPH",
- "COM"
-#ifdef USE_JPWL
- , "EPB", "ESD", "EPC", "RED"
-#endif // USE_JPWL
-#ifdef USE_JPSEC
- , "SEC"
-#endif // USE_JPSEC
-};
-
-// Marker descriptions
-static const char *marker_descr[] = {
- "Start of codestream", "Start of tile-part", "Start of data", "End of codestream",
- "Image and tile size",
- "Coding style default", "Coding style component", "Region-of-interest", "Quantization default",
- "Quantization component", "Progression order change, default",
- "Tile-part lengths, main header", "Packet length, main header", "Packets length, tile-part header",
- "Packed packet headers, main header", "Packed packet headers, tile-part header",
- "Start of packet", "End of packet header",
- "Comment and extension"
-#ifdef USE_JPWL
- , "Error Protection Block", "Error Sensitivity Descriptor", "Error Protection Capability",
- "Residual Errors Descriptor"
-#endif // USE_JPWL
-#ifdef USE_JPSEC
- , "Main security marker"
-#endif // USE_JPSEC
-};
-
-void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid)
-{
- unsigned short int csiz = 0;
-
- // check if the file is opened
- if (m_file->IsOpened())
- WriteText(wxT("File OK"));
- else
- return;
-
- // position at the beginning
- m_file->Seek(offset, wxFromStart);
-
- // navigate the file
- int m, inside_sod = 0, inside_sop = 0;
- int nmarks = 0, maxmarks = 10000;
- unsigned char onebyte[1];
- unsigned char twobytes[2], firstbyte, secondbyte;
- unsigned char fourbytes[4];
- unsigned short int currmark;
- unsigned short int currlen;
- int lastPsot = 0, lastsotpos = 0;
-
- WriteText(wxT("Start search..."));
-
-// advancing macro
-#define OPJ_ADVANCE(A) {offset += A; if (offset < length) m_file->Seek(offset, wxFromStart); else return;}
-
- // begin search
- while ((offset < length) && (!m_file->Eof())) {
-
- // read one byte
- if (m_file->Read(&firstbyte, 1) != 1)
- break;
-
- // look for 0xFF
- if (firstbyte == 0xFF) {
-
- // it is a possible marker
- if (m_file->Read(&secondbyte, 1) != 1)
- break;
- else
- currmark = (((unsigned short int) firstbyte) << 8) + (unsigned short int) secondbyte;
-
- } else {
-
- // nope, advance by one and search again
- OPJ_ADVANCE(1);
- continue;
- }
-
- // search the marker
- for (m = 0; m < J2KMARK_NUM; m++) {
- if (currmark == marker_val[m])
- break;
- }
-
- // marker not found
- if (m == J2KMARK_NUM) {
- // nope, advance by one and search again
- OPJ_ADVANCE(1);
- continue;
- }
-
- // if we are inside SOD, only some markers are allowed
- if (inside_sod) {
-
- // we are inside SOP
- if (inside_sop) {
-
- }
-
- // randomly marker coincident data
- if ((currmark != SOT_VAL) &&
- (currmark != EOC_VAL) &&
- (currmark != SOP_VAL) &&
- (currmark != EPH_VAL)) {
- OPJ_ADVANCE(1);
- continue;
- }
-
- // possible SOT?
- if ((currmark == SOT_VAL)) {
- // too early SOT
- if (offset < (lastsotpos + lastPsot)) {
- OPJ_ADVANCE(1);
- continue;
- }
- // we were not in the last tile
- /*if (lastPsot != 0) {
- OPJ_ADVANCE(1);
- break;
- }*/
- }
- }
-
- // beyond this point, the marker MUST BE real
-
- // length of current marker segment
- if ((currmark == SOD_VAL) ||
- (currmark == SOC_VAL) ||
- (currmark == EOC_VAL) ||
- (currmark == EPH_VAL))
-
- // zero length markers
- currlen = 0;
-
- else {
-
- // read length field
- if (m_file->Read(twobytes, 2) != 2)
- break;
-
- currlen = (((unsigned short int) twobytes[0]) << 8) + (unsigned short int) twobytes[1];
- }
-
- // here we pass to AppendItem() normal and selected item images (we
- // suppose that selected image follows the normal one in the enum)
- int image, imageSel;
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- // append the marker
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("%03d: "), nmarks) +
- wxString::FromAscii(marker_name[m]) +
- wxString::Format(wxT(" (0x%04X)"), marker_val[m]),
- image, imageSel,
- new OPJMarkerData(wxT("MARK") + wxString::Format(wxT(" (%d)"), marker_val[m]),
- m_tree->m_fname.GetFullPath(), offset, offset + currlen + 1)
- );
-
- // append some info
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- // marker name
- wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,
- wxT("*** ") + wxString::FromAscii(marker_descr[m]) + wxT(" ***"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT);
-
- // position and length
- wxTreeItemId subcurrid2 = m_tree->AppendItem(currid,
- wxLongLong(offset).ToString() + wxT(" > ") + wxLongLong(offset + currlen + 1).ToString() +
- wxT(", ") + wxString::Format(wxT("%d + 2 (%d)"), currlen, currlen + 2),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- // give additional info on markers
- switch (currmark) {
-
- /////////
- // SOP //
- /////////
- case SOP_VAL:
- {
- // read packet number
- if (m_file->Read(twobytes, 2) != 2)
- break;
- int packnum = STREAM_TO_UINT16(twobytes, 0);
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("Pack. no. %d"), packnum),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- inside_sop = 1;
- };
- break;
-
-#ifdef USE_JPWL
- /////////
- // RED //
- /////////
- case RED_VAL:
- {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char pred = onebyte[0];
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxString address[] = {
- wxT("Packet addressing"),
- wxT("Byte-range addressing"),
- wxT("Packet-range addressing"),
- wxT("Reserved")
- };
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- address[(pred & 0xC0) >> 6],
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d bytes range"), (((pred & 0x02) >> 1) + 1) * 2),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- pred & 0x01 ? wxT("Errors/erasures in codestream") : wxT("Error free codestream"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("Residual corruption level: %d"), (pred & 0x38) >> 3),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /////////
- // ESD //
- /////////
- case ESD_VAL:
- {
- unsigned short int cesd;
- if (csiz < 257) {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- cesd = onebyte[0];
- } else {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- cesd = STREAM_TO_UINT16(twobytes, 0);
- }
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char pesd = onebyte[0];
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- pesd & 0x01 ? wxT("Comp. average") : wxString::Format(wxT("Comp. no. %d"), cesd),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- wxString meth[] = {
- wxT("Relative error sensitivity"),
- wxT("MSE"),
- wxT("MSE reduction"),
- wxT("PSNR"),
- wxT("PSNR increase"),
- wxT("MAXERR (absolute peak error)"),
- wxT("TSE (total squared error)"),
- wxT("Reserved")
- };
-
- subcurrid = m_tree->AppendItem(currid,
- meth[(pesd & 0x38) >> 3],
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- wxString address[] = {
- wxT("Packet addressing"),
- wxT("Byte-range addressing"),
- wxT("Packet-range addressing"),
- wxT("Reserved")
- };
-
- subcurrid = m_tree->AppendItem(currid,
- address[(pesd & 0xC0) >> 6],
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d bytes/value, %d bytes range"), ((pesd & 0x04) >> 2) + 1, (((pesd & 0x02) >> 1) + 1) * 2),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /////////
- // EPC //
- /////////
- case EPC_VAL:
- {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int pcrc = STREAM_TO_UINT16(twobytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int dl = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char pepc = onebyte[0];
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("CRC-16 = 0x%x"), pcrc),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("Tot. length = %d"), dl),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("%s%s%s%s"),
- pepc & 0x10 ? wxT("ESD, ") : wxT(""),
- pepc & 0x20 ? wxT("RED, ") : wxT(""),
- pepc & 0x40 ? wxT("EPB, ") : wxT(""),
- pepc & 0x80 ? wxT("Info") : wxT("")
- ),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /////////
- // EPB //
- /////////
- case EPB_VAL:
- {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char depb = onebyte[0];
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int ldpepb = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int pepb = STREAM_TO_UINT32(fourbytes, 0);
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("No. %d, %slatest, %spacked"),
- depb & 0x3F,
- depb & 0x40 ? wxT("") : wxT("not "),
- depb & 0x80 ? wxT("") : wxT("un")),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d bytes protected"), ldpepb),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (pepb == 0x00000000)
-
- subcurrid = m_tree->AppendItem(currid,
- wxT("Predefined codes"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- else if ((pepb >= 0x10000000) && (pepb <= 0x1FFFFFFF)) {
-
- wxString text = wxT("CRC code");
- if (pepb == 0x10000000)
- text << wxT(", CCITT (X25) 16 bits");
- else if (pepb == 0x10000001)
- text << wxT(", Ethernet 32 bits");
- else
- text << wxT(", JPWL RA");
- subcurrid = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- } else if ((pepb >= 0x20000000) && (pepb <= 0x2FFFFFFF)) {
-
- wxString text;
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("RS code, RS(%d, %d)"),
- (pepb & 0x0000FF00) >> 8,
- (pepb & 0x000000FF)),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- } else if ((pepb >= 0x30000000) && (pepb <= 0x3FFFFFFE))
-
- subcurrid = m_tree->AppendItem(currid,
- wxT("JPWL RA"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- else if (pepb == 0xFFFFFFFF)
-
- subcurrid = m_tree->AppendItem(currid,
- wxT("No method"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-#endif // USE_JPWL
-
-#ifdef USE_JPSEC
- case SEC_VAL:
- {
-
- }
- break;
-#endif // USE_JPSEC
-
- /////////
- // SIZ //
- /////////
- case SIZ_VAL:
- {
- int c;
-
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int rsiz = STREAM_TO_UINT16(twobytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int xsiz = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int ysiz = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int xosiz = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int yosiz = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int xtsiz = STREAM_TO_UINT32(fourbytes, 0);
- this->m_tree->m_childframe->m_twidth = xtsiz;
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int ytsiz = STREAM_TO_UINT32(fourbytes, 0);
- this->m_tree->m_childframe->m_theight = ytsiz;
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int xtosiz = STREAM_TO_UINT32(fourbytes, 0);
- this->m_tree->m_childframe->m_tx = xtosiz;
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int ytosiz = STREAM_TO_UINT32(fourbytes, 0);
- this->m_tree->m_childframe->m_ty = ytosiz;
-
- if (m_file->Read(twobytes, 2) != 2)
- break;
- csiz = STREAM_TO_UINT16(twobytes, 0);
-
- bool equaldepth = true, equalsize = true;
- unsigned char *ssiz = new unsigned char(csiz);
- unsigned char *xrsiz = new unsigned char(csiz);
- unsigned char *yrsiz = new unsigned char(csiz);
-
- for (c = 0; c < csiz; c++) {
-
- if (m_file->Read(&ssiz[c], 1) != 1)
- break;
-
- if (c > 0)
- equaldepth = equaldepth && (ssiz[c] == ssiz[c - 1]);
-
- if (m_file->Read(&xrsiz[c], 1) != 1)
- break;
-
- if (m_file->Read(&yrsiz[c], 1) != 1)
- break;
-
- if (c > 0)
- equalsize = equalsize && (xrsiz[c] == xrsiz[c - 1]) && (yrsiz[c] == yrsiz[c - 1]) ;
-
- }
-
- if (equaldepth && equalsize)
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("I: %dx%d (%d, %d), %d c., %d%s bpp"),
- xsiz, ysiz,
- xosiz, yosiz,
- csiz, ((ssiz[0] & 0x7F) + 1),
- (ssiz[0] & 0x80) ? wxT("s") : wxT("u")),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- else
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("I: %dx%d (%d, %d), %d c."),
- xsiz, ysiz,
- xosiz, yosiz,
- csiz),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("T: %dx%d (%d, %d)"),
- xtsiz, ytsiz,
- xtosiz, ytosiz),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid4 = m_tree->AppendItem(currid,
- wxT("Components"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- for (c = 0; c < csiz; c++) {
-
- wxTreeItemId subcurrid5 = m_tree->AppendItem(subcurrid4,
- wxString::Format(wxT("#%d: %dx%d, %d%s bpp"),
- c,
- xsiz/xrsiz[c], ysiz/yrsiz[c],
- ((ssiz[c] & 0x7F) + 1),
- (ssiz[c] & 0x80) ? wxT("s") : wxT("u")),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
-
- };
- break;
-
- /////////
- // SOT //
- /////////
- case SOT_VAL:
- {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int isot = STREAM_TO_UINT16(twobytes, 0);
-
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- unsigned long int psot = STREAM_TO_UINT32(fourbytes, 0);
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char tpsot = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char tnsot = onebyte[0];
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("tile %d, psot = %d, part %d of %d"), isot, psot, tpsot, tnsot),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- lastPsot = psot;
- lastsotpos = offset;
- inside_sod = 0;
- };
- break;
-
- /////////
- // COC //
- /////////
- case COC_VAL:
- {
- unsigned short int ccoc;
- if (csiz < 257) {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- ccoc = onebyte[0];
- } else {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- ccoc = STREAM_TO_UINT16(twobytes, 0);
- }
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char scoc = onebyte[0];
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("Comp. no. %d"), ccoc),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- wxString text;
- if (scoc & 0x01)
- text << wxT("Partitioned entropy coder");
- else
- text << wxT("Unpartitioned entropy coder");
-
- subcurrid = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char decomplevs = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbswidth = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbsheight = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbstyle = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char transform = onebyte[0];
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (transform & 0x01)
- text = wxT("5-3 reversible wavelet");
- else
- text = wxT("9-7 irreversible wavelet");
- subcurrid = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxT("Coding styles"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- if (cbstyle & 0x01)
- text = wxT("Selective arithmetic coding bypass");
- else
- text = wxT("No selective arithmetic coding bypass");
- wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x02)
- text = wxT("Reset context probabilities on coding pass boundaries");
- else
- text = wxT("No reset of context probabilities on coding pass boundaries");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x04)
- text = wxT("Termination on each coding passs");
- else
- text = wxT("No termination on each coding pass");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x08)
- text = wxT("Vertically stripe causal context");
- else
- text = wxT("No vertically stripe causal context");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x10)
- text = wxT("Predictable termination");
- else
- text = wxT("No predictable termination");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x20)
- text = wxT("Segmentation symbols are used");
- else
- text = wxT("No segmentation symbols are used");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /////////
- // COD //
- /////////
- case COD_VAL:
- {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char scod = onebyte[0];
-
- wxString text;
-
- if (scod & 0x01)
- text << wxT("Partitioned entropy coder");
- else
- text << wxT("Unpartitioned entropy coder");
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- text = wxT("");
- if (scod & 0x02)
- text << wxT("Possible SOPs");
- else
- text << wxT("No SOPs");
-
- if (scod & 0x04)
- text << wxT(", possible EPHs");
- else
- text << wxT(", no EPHs");
-
- subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char progord = onebyte[0];
-
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int numlayers = STREAM_TO_UINT16(twobytes, 0);
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char mctransform = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char decomplevs = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbswidth = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbsheight = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char cbstyle = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char transform = onebyte[0];
-
- subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- text = wxT("");
- switch (progord) {
- case (0):
- text << wxT("LRCP");
- break;
- case (1):
- text << wxT("RLCP");
- break;
- case (2):
- text << wxT("LRCP");
- break;
- case (3):
- text << wxT("RPCL");
- break;
- case (4):
- text << wxT("CPRL");
- break;
- default:
- text << wxT("unknown progression");
- break;
- }
- text << wxString::Format(wxT(", %d layers"), numlayers);
- if (transform & 0x01)
- text << wxT(", 5-3 rev.");
- else
- text << wxT(", 9-7 irr.");
- subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- switch (mctransform) {
- case (0):
- {
- text = wxT("No MCT");
- }
- break;
- case (1):
- {
- text = wxT("Reversible MCT on 0, 1, 2");
- }
- break;
- case (2):
- {
- text = wxT("Irreversible MCT on 0, 1, 2");
- }
- break;
- default:
- {
- text = wxT("Unknown");
- }
- break;
- };
- subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
-
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- subcurrid3 = m_tree->AppendItem(currid,
- wxT("Coding styles"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- if (cbstyle & 0x01)
- text = wxT("Selective arithmetic coding bypass");
- else
- text = wxT("No selective arithmetic coding bypass");
- wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x02)
- text = wxT("Reset context probabilities on coding pass boundaries");
- else
- text = wxT("No reset of context probabilities on coding pass boundaries");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x04)
- text = wxT("Termination on each coding passs");
- else
- text = wxT("No termination on each coding pass");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x08)
- text = wxT("Vertically stripe causal context");
- else
- text = wxT("No vertically stripe causal context");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x10)
- text = wxT("Predictable termination");
- else
- text = wxT("No predictable termination");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (cbstyle & 0x20)
- text = wxT("Segmentation symbols are used");
- else
- text = wxT("No segmentation symbols are used");
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- };
- break;
-
- /////////
- // QCC //
- /////////
- case QCC_VAL:
- {
- unsigned short int cqcc;
- if (csiz < 257) {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- cqcc = onebyte[0];
- } else {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- cqcc = STREAM_TO_UINT16(twobytes, 0);
- }
-
- wxTreeItemId subcurrid = m_tree->AppendItem(currid,
- wxString::Format(wxT("Comp. no. %d"), cqcc),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char sqcc = onebyte[0];
-
- wxString text;
- switch (sqcc & 0x1F) {
- case (0):
- text = wxT("No quantization");
- break;
- case (1):
- text = wxT("Scalar implicit");
- break;
- case (2):
- text = wxT("Scalar explicit");
- break;
- default:
- text = wxT("Unknown");
- break;
- }
- text << wxString::Format(wxT(", %d guard bits"), (sqcc & 0xE0) >> 5);
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /////////
- // QCD //
- /////////
- case QCD_VAL:
- {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char sqcd = onebyte[0];
-
- wxString text;
- switch (sqcd & 0x1F) {
- case (0):
- text = wxT("No quantization");
- break;
- case (1):
- text = wxT("Scalar implicit");
- break;
- case (2):
- text = wxT("Scalar explicit");
- break;
- default:
- text = wxT("Unknown");
- break;
- }
- text << wxString::Format(wxT(", %d guard bits"), (sqcd & 0xE0) >> 5);
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- };
- break;
-
- /////////
- // COM //
- /////////
- case COM_VAL:
- {
- #define showlen 25
- char comment[showlen];
- wxString comments;
-
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int rcom = STREAM_TO_UINT16(twobytes, 0);
-
- wxString text;
- if (rcom == 0)
- text = wxT("Binary values");
- else if (rcom == 1)
- text = wxT("ISO 8859-1 (latin-1) values");
- else if (rcom < 65535)
- text = wxT("Reserved for registration");
- else
- text = wxT("Reserved for extension");
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (m_file->Read(comment, showlen) != showlen)
- break;
- comments = wxString::FromAscii(comment).Truncate(wxMin(showlen, currlen - 4));
- if ((currlen - 4) > showlen)
- comments << wxT("...");
- subcurrid3 = m_tree->AppendItem(currid,
- comments,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- };
- break;
-
- /////////
- // TLM //
- /////////
- case TLM_VAL:
- {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char ztlm = onebyte[0];
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char stlm = onebyte[0];
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("TLM #%d"), ztlm),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("%d bits/index, %d bits/length"),
- 8 * ((stlm & 0x30) >> 4), 16 + 16 * ((stlm & 0x40) >> 6)),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- int n, numparts;
-
- numparts = (currlen - 2) / ( ((stlm & 0x30) >> 4) + 2 + 2 * ((stlm & 0x40) >> 6));
-
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- subcurrid3 = m_tree->AppendItem(currid,
- wxT("Tile parts"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- for (n = 0; n < numparts; n++) {
-
- unsigned short int ttlm;
- unsigned long int ptlm;
-
- switch (((stlm & 0x30) >> 4)) {
-
- case 0:
- ttlm = 0;
- break;
-
- case 1:
- if (m_file->Read(onebyte, 1) != 1)
- break;
- ttlm = onebyte[0];
- break;
-
- case 2:
- if (m_file->Read(twobytes, 2) != 2)
- break;
- ttlm = STREAM_TO_UINT16(twobytes, 0);
- break;
-
- }
-
- switch (((stlm & 0x40) >> 6)) {
-
- case 0:
- if (m_file->Read(twobytes, 2) != 2)
- break;
- ptlm = STREAM_TO_UINT16(twobytes, 0);
- break;
-
- case 1:
- if (m_file->Read(fourbytes, 4) != 4)
- break;
- ptlm = STREAM_TO_UINT32(fourbytes, 0);
- break;
-
- }
-
- wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,
- wxString::Format(wxT("Tile %d: %d bytes"), ttlm, ptlm),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
-
- }
- break;
-
- /////////
- // POD //
- /////////
- case POD_VAL:
- {
- int n, numchanges;
-
- if (csiz < 257)
- numchanges = (currlen - 2) / 7;
- else
- numchanges = (currlen - 2) / 9;
-
- for (n = 0; n < numchanges; n++) {
-
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,
- wxString::Format(wxT("Change #%d"), n),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char rspod = onebyte[0];
-
- unsigned short int cspod;
- if (csiz < 257) {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- cspod = onebyte[0];
- } else {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- cspod = STREAM_TO_UINT16(twobytes, 0);
- }
-
- if (m_file->Read(twobytes, 2) != 2)
- break;
- unsigned short int lyepod = STREAM_TO_UINT16(twobytes, 0);
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char repod = onebyte[0];
-
- unsigned short int cepod;
- if (csiz < 257) {
- if (m_file->Read(onebyte, 1) != 1)
- break;
- cepod = onebyte[0];
- } else {
- if (m_file->Read(twobytes, 2) != 2)
- break;
- cepod = STREAM_TO_UINT16(twobytes, 0);
- }
-
- if (m_file->Read(onebyte, 1) != 1)
- break;
- unsigned char ppod = onebyte[0];
-
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,
- wxString::Format(wxT("%d <= Resolution < %d"), rspod, repod),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- wxString::Format(wxT("%d <= Component < %d"), cspod, cepod),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- wxString::Format(wxT("0 <= Layer < %d"), lyepod),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- wxString text = wxT("");
- switch (ppod) {
- case (0):
- text << wxT("LRCP");
- break;
- case (1):
- text << wxT("RLCP");
- break;
- case (2):
- text << wxT("LRCP");
- break;
- case (3):
- text << wxT("RPCL");
- break;
- case (4):
- text << wxT("CPRL");
- break;
- default:
- text << wxT("unknown progression");
- break;
- }
- subcurrid4 = m_tree->AppendItem(subcurrid3,
- text,
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- }
-
- }
- break;
-
- /////////
- // SOD //
- /////////
- case SOD_VAL:
- {
- inside_sod = 1;
- };
- break;
-
- default:
- break;
-
- }
-
- // increment number of markers
- if (nmarks++ >= maxmarks) {
- WriteText(wxT("Maximum amount of markers exceeded"));
- break;
- }
-
- // advance position
- OPJ_ADVANCE(currlen + 2);
- }
-
- WriteText(wxT("Search finished"));
-}
diff --git a/openjpeg/src/bin/wx/OPJViewer/source/wxjp2parser.cpp b/openjpeg/src/bin/wx/OPJViewer/source/wxjp2parser.cpp
deleted file mode 100644
index 853c648d..00000000
--- a/openjpeg/src/bin/wx/OPJViewer/source/wxjp2parser.cpp
+++ /dev/null
@@ -1,1121 +0,0 @@
-/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit degli studi di Perugia (UPG), Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "OPJViewer.h"
-
-/* defines */
-#define SHORT_DESCR_LEN 32
-#define LONG_DESCR_LEN 256
-
-/* enumeration for file formats */
-#define J2FILENUM 4
-typedef enum {
-
- JP2_FILE,
- J2K_FILE,
- MJ2_FILE,
- UNK_FILE
-
-} j2filetype;
-
-/* enumeration for the box types */
-#define j22boxNUM 23
-typedef enum {
-
- FILE_BOX,
- JP_BOX,
- FTYP_BOX,
- JP2H_BOX,
- IHDR_BOX,
- COLR_BOX,
- JP2C_BOX,
- JP2I_BOX,
- XML_BOX,
- UUID_BOX,
- UINF_BOX,
- MOOV_BOX,
- MVHD_BOX,
- TRAK_BOX,
- TKHD_BOX,
- MDIA_BOX,
- MDHD_BOX,
- HDLR_BOX,
- MINF_BOX,
- VMHD_BOX,
- STBL_BOX,
- STSD_BOX,
- STSZ_BOX,
- MJP2_BOX,
- MDAT_BOX,
- ANY_BOX,
- UNK_BOX
-
-} j22boxtype;
-
-/* the box structure itself */
-struct boxdef {
-
- char value[5]; /* hexadecimal value/string*/
- char name[SHORT_DESCR_LEN]; /* short description */
- char descr[LONG_DESCR_LEN]; /* long description */
- int sbox; /* is it a superbox? */
- int req[J2FILENUM]; /* mandatory box */
- j22boxtype ins; /* contained in box... */
-
-};
-
-
-/* jp2 family box signatures */
-#define FILE_SIGN ""
-#define JP_SIGN "jP\040\040"
-#define FTYP_SIGN "ftyp"
-#define JP2H_SIGN "jp2h"
-#define IHDR_SIGN "ihdr"
-#define COLR_SIGN "colr"
-#define JP2C_SIGN "jp2c"
-#define JP2I_SIGN "jp2i"
-#define XML_SIGN "xml\040"
-#define UUID_SIGN "uuid"
-#define UINF_SIGN "uinf"
-#define MOOV_SIGN "moov"
-#define MVHD_SIGN "mvhd"
-#define TRAK_SIGN "trak"
-#define TKHD_SIGN "tkhd"
-#define MDIA_SIGN "mdia"
-#define MDHD_SIGN "mdhd"
-#define HDLR_SIGN "hdlr"
-#define MINF_SIGN "minf"
-#define VMHD_SIGN "vmhd"
-#define STBL_SIGN "stbl"
-#define STSD_SIGN "stsd"
-#define STSZ_SIGN "stsz"
-#define MJP2_SIGN "mjp2"
-#define MDAT_SIGN "mdat"
-#define ANY_SIGN ""
-#define UNK_SIGN ""
-
-/* the possible boxes */
-struct boxdef j22box[] =
-{
-/* sign */ {FILE_SIGN,
-/* short */ "placeholder for nothing",
-/* long */ "Nothing to say",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {JP_SIGN,
-/* short */ "JPEG 2000 Signature box",
-/* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {FTYP_SIGN,
-/* short */ "File Type box",
-/* long */ "This box specifies file type, version and compatibility information, including specifying if this file "
- "is a conforming JP2 file or if it can be read by a conforming JP2 reader",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {JP2H_SIGN,
-/* short */ "JP2 Header box",
-/* long */ "This box contains a series of boxes that contain header-type information about the file",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {IHDR_SIGN,
-/* short */ "Image Header box",
-/* long */ "This box specifies the size of the image and other related fields",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ JP2H_BOX},
-
-/* sign */ {COLR_SIGN,
-/* short */ "Colour Specification box",
-/* long */ "This box specifies the colourspace of the image",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ JP2H_BOX},
-
-/* sign */ {JP2C_SIGN,
-/* short */ "Contiguous Codestream box",
-/* long */ "This box contains the codestream as defined by Annex A",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {JP2I_SIGN,
-/* short */ "Intellectual Property box",
-/* long */ "This box contains intellectual property information about the image",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ FILE_BOX},
-
-/* sign */ {XML_SIGN,
-/* short */ "XML box",
-/* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ FILE_BOX},
-
-/* sign */ {UUID_SIGN,
-/* short */ "UUID box",
-/* long */ "This box provides a tool by which vendors can add additional information to a file "
- "without risking conflict with other vendors",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ FILE_BOX},
-
-/* sign */ {UINF_SIGN,
-/* short */ "UUID Info box",
-/* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ FILE_BOX},
-
-/* sign */ {MOOV_SIGN,
-/* short */ "Movie box",
-/* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {MVHD_SIGN,
-/* short */ "Movie Header box",
-/* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation "
- "considered as a whole",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MOOV_BOX},
-
-/* sign */ {TRAK_SIGN,
-/* short */ "Track box",
-/* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ MOOV_BOX},
-
-/* sign */ {TKHD_SIGN,
-/* short */ "Track Header box",
-/* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ TRAK_BOX},
-
-/* sign */ {MDIA_SIGN,
-/* short */ "Media box",
-/* long */ "The media declaration container contains all the objects which declare information about the media data "
- "within a track",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ TRAK_BOX},
-
-/* sign */ {MDHD_SIGN,
-/* short */ "Media Header box",
-/* long */ "The media header declares overall information which is media-independent, and relevant to characteristics "
- "of the media in a track",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MDIA_BOX},
-
-/* sign */ {HDLR_SIGN,
-/* short */ "Handler Reference box",
-/* long */ "This box within a Media Box declares the process by which the media-data in the track may be presented, "
- "and thus, the nature of the media in a track",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MDIA_BOX},
-
-/* sign */ {MINF_SIGN,
-/* short */ "Media Information box",
-/* long */ "This box contains all the objects which declare characteristic information of the media in the track",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ MDIA_BOX},
-
-/* sign */ {VMHD_SIGN,
-/* short */ "Video Media Header box",
-/* long */ "The video media header contains general presentation information, independent of the coding, for video media",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MINF_BOX},
-
-/* sign */ {STBL_SIGN,
-/* short */ "Sample Table box",
-/* long */ "The sample table contains all the time and data indexing of the media samples in a track",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ MINF_BOX},
-
-/* sign */ {STSD_SIGN,
-/* short */ "STSD Sample Description box",
-/* long */ "The sample description table gives detailed information about the coding type used, and any initialization "
- "information needed for that coding",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MINF_BOX},
-
-/* sign */ {STSZ_SIGN,
-/* short */ "Sample Size box",
-/* long */ "This box contains the sample count and a table giving the size of each sample",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ STBL_BOX},
-
-/* sign */ {MJP2_SIGN,
-/* short */ "MJP2 Sample Description box",
-/* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization "
- "information needed for that coding",
-/* sbox */ 0,
-/* req */ {1, 1, 1},
-/* ins */ MINF_BOX},
-
-/* sign */ {MDAT_SIGN,
-/* short */ "Media Data box",
-/* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file",
-/* sbox */ 1,
-/* req */ {1, 1, 1},
-/* ins */ FILE_BOX},
-
-/* sign */ {ANY_SIGN,
-/* short */ "Any box",
-/* long */ "All the existing boxes",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ FILE_BOX},
-
-/* sign */ {UNK_SIGN,
-/* short */ "Unknown Type box",
-/* long */ "The signature is not recognised to be that of an existing box",
-/* sbox */ 0,
-/* req */ {0, 0, 0},
-/* ins */ ANY_BOX}
-
-};
-
-
-/* macro functions */
-/* From little endian to big endian, 2 and 4 bytes */
-#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8)
-#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24)
-
-#ifdef __WXGTK__
-#define BYTE_SWAP8(X) ((X & 0x00000000000000FFULL) << 56) | ((X & 0x000000000000FF00ULL) << 40) | \
- ((X & 0x0000000000FF0000ULL) << 24) | ((X & 0x00000000FF000000ULL) << 8) | \
- ((X & 0x000000FF00000000ULL) >> 8) | ((X & 0x0000FF0000000000ULL) >> 24) | \
- ((X & 0x00FF000000000000ULL) >> 40) | ((X & 0xFF00000000000000ULL) >> 56)
-#else
-#define BYTE_SWAP8(X) ((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \
- ((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \
- ((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \
- ((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56)
-#endif
-
-/* From codestream to int values */
-#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \
- ((unsigned long int) (C)[(P) + 1] << 16) + \
- ((unsigned long int) (C)[(P) + 2] << 8) + \
- ((unsigned long int) (C)[(P) + 3] << 0))
-
-#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \
- ((unsigned long int) (C)[(P) + 1] << 0))
-
-#define OPJREAD_LONG(F,L,N) { \
- if (F->Read(fourbytes, 4) < 4) { \
- wxLogMessage(wxT("Problem reading " N " from the file (file ended?)")); \
- return -1; \
- }; \
- L = STREAM_TO_UINT32(fourbytes, 0); \
- }
-
-/* handling functions */
-#define ITEM_PER_ROW 10
-
-//#define indprint if (0) printf("%.*s", 2 * level + 9, indent), printf
-char indent[] = " "
- " "
- " "
- " ";
-
-void indprint(wxString printout, int level)
-{
- wxLogMessage(/*wxString::Format(wxT("%.*s"), 2 * level + 9, indent) + */printout);
-}
-
-/* Box handler function */
-int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
- wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint)
-{
- switch ((j22boxtype) boxtype) {
-
-
- /* JPEG 2000 Signature box */
- case (JP_BOX): {
-
- unsigned long int checkdata = 0;
- fileid->Read(&checkdata, sizeof(unsigned long int));
- checkdata = BYTE_SWAP4(checkdata);
-
- // add info
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Check data: %X -> %s"), checkdata, (checkdata == 0x0D0A870A) ? wxT("OK") : wxT("KO")),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- };
- break;
-
-
- /* JPEG 2000 codestream box */
- case (JP2C_BOX): {
-
- // add info
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString(wxT("Codestream")),
- m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
- new OPJMarkerData(wxT("INFO-CSTREAM"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
-
- m_tree->SetItemHasChildren(currid);
-
- // parse the file
- //ParseJ2KFile(fileid, filepoint, filelimit, currid);
-
- };
- break;
-
-
-
-
-
- /* File Type box */
- case (FTYP_BOX): {
-
- char BR[4], CL[4];
- unsigned long int MinV, numCL, i;
- fileid->Read(BR, sizeof(char) * 4);
- fileid->Read(&MinV, sizeof(unsigned long int));
- MinV = BYTE_SWAP4(MinV);
- numCL = (filelimit - fileid->Tell()) / 4;
-
- // add info
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxT("Brand/Minor version: ") +
- wxString::FromAscii(BR).Truncate(4) +
- wxString::Format(wxT("/%d"), MinV),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Compatibility list")),
- m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- for (i = 0; i < numCL; i++) {
- fileid->Read(CL, sizeof(char) * 4);
- m_tree->AppendItem(currid,
- wxString::FromAscii(CL).Truncate(4),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- };
-
- };
- break;
-
-
-
- /* JP2 Header box */
- case (IHDR_BOX): {
-
- unsigned long int height, width;
- unsigned short int nc;
- unsigned char bpc, C, UnkC, IPR;
- fileid->Read(&height, sizeof(unsigned long int));
- height = BYTE_SWAP4(height);
- fileid->Read(&width, sizeof(unsigned long int));
- width = BYTE_SWAP4(width);
- fileid->Read(&nc, sizeof(unsigned short int));
- nc = BYTE_SWAP2(nc);
- fileid->Read(&bpc, sizeof(unsigned char));
- fileid->Read(&C, sizeof(unsigned char));
- fileid->Read(&UnkC, sizeof(unsigned char));
- fileid->Read(&IPR, sizeof(unsigned char));
-
- // add info
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Dimensions: %d x %d x %d @ %d bpc"), width, height, nc, bpc + 1),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Compression type: %d"), C),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Colourspace unknown: %d"), UnkC),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Intellectual Property Rights: %d"), IPR),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- };
- break;
-
-
-
- /* Colour Specification box */
- case (COLR_BOX): {
-
- unsigned char METH, PREC, APPROX;
- char methdescr[80], enumcsdescr[80];
- unsigned long int EnumCS;
- fileid->Read(&METH, sizeof(unsigned char));
- switch (METH) {
- case 1:
- strcpy(methdescr, "Enumerated Colourspace");
- break;
- case 2:
- strcpy(methdescr, "Restricted ICC profile");
- break;
- default:
- strcpy(methdescr, "Unknown");
- break;
- };
- fileid->Read(&PREC, sizeof(unsigned char));
- fileid->Read(&APPROX, sizeof(unsigned char));
- if (METH != 2) {
- fileid->Read(&EnumCS, sizeof(unsigned long int));
- EnumCS = BYTE_SWAP4(EnumCS);
- switch (EnumCS) {
- case 16:
- strcpy(enumcsdescr, "sRGB");
- break;
- case 17:
- strcpy(enumcsdescr, "greyscale");
- break;
- case 18:
- strcpy(enumcsdescr, "sYCC");
- break;
- default:
- strcpy(enumcsdescr, "Unknown");
- break;
- };
- };
-
- // add info
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Specification method: %d ("), METH) +
- wxString::FromAscii(methdescr) +
- wxT(")"),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Precedence: %d"), PREC),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Colourspace approximation: %d"), APPROX),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (METH != 2)
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Enumerated colourspace: %d ("), EnumCS) +
- wxString::FromAscii(enumcsdescr) +
- wxT(")"),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- if (METH != 1)
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("ICC profile: there is one")),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
-
- };
- break;
-
-
-
-
-
-
- /* Movie Header Box */
- case (MVHD_BOX): {
-
- unsigned long int version, rate, matrix[9], next_track_ID;
- unsigned short int volume;
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
- if (version == 0) {
- unsigned long int creation_time, modification_time, timescale, duration;
- fileid->Read(&creation_time, sizeof(unsigned long int));
- creation_time = BYTE_SWAP4(creation_time);
- fileid->Read(&modification_time, sizeof(unsigned long int));
- modification_time = BYTE_SWAP4(modification_time);
- fileid->Read(&timescale, sizeof(unsigned long int));
- timescale = BYTE_SWAP4(timescale);
- fileid->Read(&duration, sizeof(unsigned long int));
- duration = BYTE_SWAP4(duration);
- const long unix_time = creation_time - 2082844800L;
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Creation time: %u (%.24s)"), creation_time, ctime(&unix_time)),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- const long unix_time1 = modification_time - 2082844800L;
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Modification time: %u (%.24s)"), modification_time, ctime(&unix_time1)),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Timescale: %u (%.6fs)"), timescale, 1.0 / (float) timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Duration: %u (%.3fs)"), duration, (float) duration / (float) timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- } else {
- int8byte creation_time, modification_time, duration;
- unsigned long int timescale;
- fileid->Read(&creation_time, sizeof(int8byte));
- creation_time = BYTE_SWAP8(creation_time);
- fileid->Read(&modification_time, sizeof(int8byte));
- modification_time = BYTE_SWAP8(modification_time);
- fileid->Read(&timescale, sizeof(unsigned long int));
- timescale = BYTE_SWAP4(timescale);
- fileid->Read(&duration, sizeof(int8byte));
- duration = BYTE_SWAP8(duration);
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Creation time: %u"), creation_time),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Modification time: %u"), modification_time),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Timescale: %u"), timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Duration: %u"), duration),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- };
- fileid->Read(&rate, sizeof(unsigned long int));
- rate = BYTE_SWAP4(rate);
- fileid->Read(&volume, sizeof(unsigned short int));
- volume = BYTE_SWAP2(volume);
- fileid->Seek(6, wxFromCurrent);
- fileid->Read(&matrix, sizeof(unsigned char) * 9);
- fileid->Seek(4, wxFromCurrent);
- fileid->Read(&next_track_ID, sizeof(unsigned long int));
- next_track_ID = BYTE_SWAP4(next_track_ID);
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Rate: %d (%d.%d)"), rate, rate >> 16, rate & 0x0000FFFF),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Volume: %d (%d.%d)"), volume, volume >> 8, volume & 0x00FF),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Next track ID: %d"), next_track_ID),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- };
- break;
-
-
- /* Sample Description box */
- case (STSD_BOX): {
-
- unsigned long int version, entry_count;
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
- fileid->Read(&entry_count, sizeof(unsigned long int));
- entry_count = BYTE_SWAP4(entry_count);
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Entry count: %d"), entry_count),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
- jpeg2000parse(fileid, filepoint + 8, filelimit, parentid, level + 1, scansign, scanpoint);
- };
- break;
-
-
- /* Sample Size box */
- case (STSZ_BOX): {
-
- unsigned long int version, sample_size, sample_count, entry_size;
-
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
-
- fileid->Read(&sample_size, sizeof(unsigned long int));
- sample_size = BYTE_SWAP4(sample_size);
-
- if (sample_size == 0) {
- fileid->Read(&sample_count, sizeof(unsigned long int));
- sample_count = BYTE_SWAP4(sample_count);
-
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Sample count: %d"), sample_count),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
-
- currid = m_tree->AppendItem(parentid,
- wxT("Entries size (bytes)"),
- m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
-
- wxString text;
- for (unsigned int s = 0; s < sample_count; s++) {
- fileid->Read(&entry_size, sizeof(unsigned long int));
- entry_size = BYTE_SWAP4(entry_size);
-
- text << wxString::Format(wxT("%d, "), entry_size);
-
- if (((s % 10) == (ITEM_PER_ROW - 1)) || (s == (sample_count - 1))) {
- m_tree->AppendItem(currid,
- text,
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
- text = wxT("");
- }
-
- }
-
- }
-
- };
- break;
-
-
- /* Video Media Header box */
- case (VMHD_BOX): {
-
- unsigned long int version;
- unsigned short int graphicsmode, opcolor[3];
- char graphicsdescr[100];
-
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
-
- fileid->Read(&graphicsmode, sizeof(unsigned short int));
- graphicsmode = BYTE_SWAP2(graphicsmode);
- switch (graphicsmode) {
- case (0x00):
- strcpy(graphicsdescr, "copy");
- break;
- case (0x24):
- strcpy(graphicsdescr, "transparent");
- break;
- case (0x0100):
- strcpy(graphicsdescr, "alpha");
- break;
- case (0x0101):
- strcpy(graphicsdescr, "whitealpha");
- break;
- case (0x0102):
- strcpy(graphicsdescr, "blackalpha");
- break;
- default:
- strcpy(graphicsdescr, "unknown");
- break;
- };
-
- fileid->Read(opcolor, 3 * sizeof(unsigned short int));
- opcolor[0] = BYTE_SWAP2(opcolor[0]);
- opcolor[1] = BYTE_SWAP2(opcolor[1]);
- opcolor[2] = BYTE_SWAP2(opcolor[2]);
-
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Composition mode: %d (")) +
- wxString::FromAscii(graphicsdescr) +
- wxT(")"),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("OP color: %d %d %d"), opcolor[0], opcolor[1], opcolor[2]),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
- };
- break;
-
-
-
- /* MJP2 Sample Description box */
- case (MJP2_BOX): {
-
- unsigned short int height, width, depth;
- unsigned long int horizresolution, vertresolution;
- char compressor_name[32];
- fileid->Seek(24, wxFromCurrent);
- fileid->Read(&width, sizeof(unsigned short int));
- width = BYTE_SWAP2(width);
- fileid->Read(&height, sizeof(unsigned short int));
- height = BYTE_SWAP2(height);
- fileid->Read(&horizresolution, sizeof(unsigned long int));
- horizresolution = BYTE_SWAP4(horizresolution);
- fileid->Read(&vertresolution, sizeof(unsigned long int));
- vertresolution = BYTE_SWAP4(vertresolution);
- fileid->Seek(6, wxFromCurrent);
- fileid->Read(compressor_name, sizeof(char) * 32);
- fileid->Read(&depth, sizeof(unsigned short int));
- depth = BYTE_SWAP2(depth);
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Dimensions: %d x %d @ %d bpp"), width, height, depth),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Resolution: %d.%d x %d.%d"), horizresolution >> 16, horizresolution & 0x0000FFFF,
- vertresolution >> 16, vertresolution & 0x0000FFFF),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Compressor: %.32s"), compressor_name),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- jpeg2000parse(fileid, filepoint + 78, filelimit, parentid, level + 1, scansign, scanpoint);
-
- };
- break;
-
- /* Media Header box */
- case (MDHD_BOX): {
- unsigned long int version;
- unsigned short int language;
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
- if (version == 0) {
- unsigned long int creation_time, modification_time, timescale, duration;
- fileid->Read(&creation_time, sizeof(unsigned long int));
- creation_time = BYTE_SWAP4(creation_time);
- fileid->Read(&modification_time, sizeof(unsigned long int));
- modification_time = BYTE_SWAP4(modification_time);
- fileid->Read(&timescale, sizeof(unsigned long int));
- timescale = BYTE_SWAP4(timescale);
- fileid->Read(&duration, sizeof(unsigned long int));
- duration = BYTE_SWAP4(duration);
- const long unix_time = creation_time - 2082844800L;
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Creation time: %u (%.24s)"), creation_time, ctime(&unix_time)),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- const long unix_time1 = modification_time - 2082844800L;
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Modification time: %u (%.24s)"), modification_time, ctime(&unix_time1)),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Timescale: %u (%.6fs)"), timescale, 1.0 / (float) timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Duration: %u (%.3fs)"), duration, (float) duration / (float) timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- } else {
- int8byte creation_time, modification_time, duration;
- unsigned long int timescale;
- fileid->Read(&creation_time, sizeof(int8byte));
- creation_time = BYTE_SWAP8(creation_time);
- fileid->Read(&modification_time, sizeof(int8byte));
- modification_time = BYTE_SWAP8(modification_time);
- fileid->Read(&timescale, sizeof(unsigned long int));
- timescale = BYTE_SWAP4(timescale);
- fileid->Read(&duration, sizeof(int8byte));
- duration = BYTE_SWAP8(duration);
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Creation time: %u"), creation_time),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Modification time: %u"), modification_time),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Timescale: %u"), timescale),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Duration: %u"), duration),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- }
- fileid->Read(&language, sizeof(unsigned short int));
-
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Language: %d (%c%c%c)"), language & 0xEFFF,
- 0x60 + (char) ((language >> 10) & 0x001F), 0x60 + (char) ((language >> 5) & 0x001F), 0x60 + (char) ((language >> 0) & 0x001F)),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
- };
- break;
-
- /* Media Handler box */
- case (HDLR_BOX): {
- unsigned long int version, predefined, temp[3];
- char handler[4], name[256];
- int namelen = wxMin(256, (filelimit - filepoint - 24));
- fileid->Read(&version, sizeof(unsigned long int));
- version = BYTE_SWAP4(version);
- fileid->Read(&predefined, sizeof(unsigned long int));
- fileid->Read(handler, 4 * sizeof(char));
- fileid->Read(&temp, 3 * sizeof(unsigned long int));
- fileid->Read(name, namelen * sizeof(char));
-
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Handler: %.4s"), handler),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("Name: %.255s"), name),
- m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
- new OPJMarkerData(wxT("INFO"))
- );
-
- }
- break;
-
- /* not yet implemented */
- default:
- break;
-
- };
-
- return (0);
-}
-
-
-void OPJParseThread::ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid)
-{
- unsigned long int scanpoint;
-
- jpeg2000parse(fileid, filepoint, filelimit, parentid, 0, NULL, &scanpoint);
-}
-
-/* the parsing function itself */
-/*
- fileid = fid of the file to scan (you should open it by yourself)
- filepoint = first byte where to start to scan from (usually 0)
- filelimit = first byte where to stop to scan from (usually the file size)
- level = set this to 0
- scansign = signature to scan for (NULL avoids search, returns " " if successful)
- scanpoint = point where the scan signature lies
-*/
-int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
- wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint)
-{
- unsigned long int LBox = 0x00000000;
- //int LBox_read;
- char TBox[5] = "\0\0\0\0";
- //int TBox_read;
- int8byte XLBox = 0x0000000000000000;
- //int XLBox_read;
- unsigned long int box_length = 0;
- int last_box = 0, box_num = 0;
- int box_type = ANY_BOX;
- unsigned char /*onebyte[1], twobytes[2],*/ fourbytes[4];
-
- /* cycle all over the file */
- box_num = 0;
- last_box = 0;
- while (!last_box) {
-
- /* do not exceed file limit */
- if (filepoint >= filelimit)
- return (0);
-
- /* seek on file */
- if (fileid->Seek(filepoint, wxFromStart) == wxInvalidOffset)
- return (-1);
-
- /* read the mandatory LBox, 4 bytes */
- if (fileid->Read(fourbytes, 4) < 4) {
- WriteText(wxT("Problem reading LBox from the file (file ended?)"));
- return -1;
- };
- LBox = STREAM_TO_UINT32(fourbytes, 0);
-
- /* read the mandatory TBox, 4 bytes */
- if (fileid->Read(TBox, 4) < 4) {
- WriteText(wxT("Problem reading TBox from the file (file ended?)"));
- return -1;
- };
-
- /* look if scansign is got */
- if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) {
- memcpy(scansign, " ", 4);
- *scanpoint = filepoint;
-
- /* hack/exploit */
- // stop as soon as you find the codebox
- return (0);
-
- };
-
- /* determine the box type */
- for (box_type = JP_BOX; box_type < UNK_BOX; box_type++)
- if (memcmp(TBox, j22box[box_type].value, 4) == 0)
- break;
-
- /* read the optional XLBox, 8 bytes */
- if (LBox == 1) {
-
- if (fileid->Read(&XLBox, 8) < 8) {
- WriteText(wxT("Problem reading XLBox from the file (file ended?)"));
- return -1;
- };
- box_length = (unsigned long int) BYTE_SWAP8(XLBox);
-
- } else if (LBox == 0x00000000) {
-
- /* last box in file */
- last_box = 1;
- box_length = filelimit - filepoint;
-
- } else
-
- box_length = LBox;
-
- /* show box info */
-
- // append the marker
- int image, imageSel;
- image = m_tree->TreeCtrlIcon_Folder;
- imageSel = image + 1;
- wxTreeItemId currid = m_tree->AppendItem(parentid,
- wxString::Format(wxT("%03d: "), box_num) +
- wxString::FromAscii(TBox) +
- wxString::Format(wxT(" (0x%04X)"),
- ((unsigned long int) TBox[3]) + ((unsigned long int) TBox[2] << 8) +
- ((unsigned long int) TBox[1] << 16) + ((unsigned long int) TBox[0] << 24)
- ),
- image, imageSel,
- new OPJMarkerData(wxT("BOX"), m_tree->m_fname.GetFullPath(), filepoint, filepoint + box_length)
- );
-
- // append some info
- image = m_tree->TreeCtrlIcon_File;
- imageSel = image + 1;
-
- // box name
- wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,
- wxT("*** ") + wxString::FromAscii(j22box[box_type].name) + wxT(" ***"),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
- m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT);
-
- // position and length
- wxTreeItemId subcurrid2 = m_tree->AppendItem(currid,
- wxLongLong(filepoint).ToString() + wxT(" > ") + wxLongLong(filepoint + box_length - 1).ToString() +
- wxT(", ") + wxString::Format(wxT("%d + 8 (%d)"), box_length, box_length + 8),
- image, imageSel,
- new OPJMarkerData(wxT("INFO"))
- );
-
- /* go deep in the box */
- box_handler_function((int) box_type, fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length,
- currid, level, scansign, scanpoint);
-
- /* if it's a superbox go inside it */
- if (j22box[box_type].sbox)
- jpeg2000parse(fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length,
- currid, level + 1, scansign, scanpoint);
-
- /* increment box number and filepoint*/
- box_num++;
- filepoint += box_length;
-
- };
-
- /* all good */
- return (0);
-}
-
diff --git a/openjpeg/src/lib/CMakeLists.txt b/openjpeg/src/lib/CMakeLists.txt
new file mode 100644
index 00000000..da8846b6
--- /dev/null
+++ b/openjpeg/src/lib/CMakeLists.txt
@@ -0,0 +1,17 @@
+# source code for openjpeg project:
+# Part 1 & 2:
+add_subdirectory(openjp2)
+
+# optionals components:
+if(BUILD_JPWL)
+ add_subdirectory(openjpwl)
+endif()
+if(BUILD_MJ2)
+ add_subdirectory(openmj2)
+endif()
+if(BUILD_JPIP)
+ add_subdirectory(openjpip)
+endif()
+if(BUILD_JP3D)
+ add_subdirectory(openjp3d)
+endif()
diff --git a/openjpeg/src/lib/openjp2/CMakeLists.txt b/openjpeg/src/lib/openjp2/CMakeLists.txt
index 0b452038..b2714858 100644
--- a/openjpeg/src/lib/openjp2/CMakeLists.txt
+++ b/openjpeg/src/lib/openjp2/CMakeLists.txt
@@ -99,6 +99,7 @@ else()
set(INSTALL_LIBS ${OPENJPEG_LIBRARY_NAME} openjp2_static)
else()
add_library(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
+ set(INSTALL_LIBS ${OPENJPEG_LIBRARY_NAME})
endif()
endif()
@@ -106,7 +107,7 @@ if(UNIX)
target_link_libraries(${OPENJPEG_LIBRARY_NAME} m)
endif()
set_target_properties(${OPENJPEG_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-if(${CMAKE_VERSION} VERSION_GREATER "2.8.11")
+if(NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12")
target_compile_options(${OPENJPEG_LIBRARY_NAME} PRIVATE ${OPENJP2_COMPILE_OPTIONS})
endif()
diff --git a/openjpeg/src/lib/openjp2/bench_dwt.c b/openjpeg/src/lib/openjp2/bench_dwt.c
index 103b681a..8cb64d06 100644
--- a/openjpeg/src/lib/openjp2/bench_dwt.c
+++ b/openjpeg/src/lib/openjp2/bench_dwt.c
@@ -257,7 +257,7 @@ int main(int argc, char** argv)
size_t idx;
size_t nValues = (size_t)(tilec.x1 - tilec.x0) *
(size_t)(tilec.y1 - tilec.y0);
- for (idx = 0; i < (OPJ_INT32)nValues; i++) {
+ for (idx = 0; idx < nValues; idx++) {
if (tilec.data[idx] != getValue((OPJ_UINT32)idx)) {
printf("Difference found at idx = %u\n", (OPJ_UINT32)idx);
exit(1);
diff --git a/openjpeg/src/lib/openjp2/dwt.c b/openjpeg/src/lib/openjp2/dwt.c
index 5b98d2b3..5930d1c7 100644
--- a/openjpeg/src/lib/openjp2/dwt.c
+++ b/openjpeg/src/lib/openjp2/dwt.c
@@ -974,7 +974,7 @@ static void opj_idwt53_v(const opj_dwt_t *dwt,
#if (defined(__SSE2__) || defined(__AVX2__))
if (len > 1 && nb_cols == PARALLEL_COLS_53) {
/* Same as below general case, except that thanks to SSE2/AVX2 */
- /* we can efficently process 8/16 columns in parallel */
+ /* we can efficiently process 8/16 columns in parallel */
opj_idwt53_v_cas0_mcols_SSE2_OR_AVX2(dwt->mem, sn, len, tiledp_col, stride);
return;
}
@@ -1017,7 +1017,7 @@ static void opj_idwt53_v(const opj_dwt_t *dwt,
#if (defined(__SSE2__) || defined(__AVX2__))
if (len > 2 && nb_cols == PARALLEL_COLS_53) {
/* Same as below general case, except that thanks to SSE2/AVX2 */
- /* we can efficently process 8/16 columns in parallel */
+ /* we can efficiently process 8/16 columns in parallel */
opj_idwt53_v_cas1_mcols_SSE2_OR_AVX2(dwt->mem, sn, len, tiledp_col, stride);
return;
}
@@ -2041,7 +2041,7 @@ static OPJ_BOOL opj_dwt_decode_partial_tile(
tr_hl_x0 = (OPJ_UINT32)tr->bands[0].x0;
tr_lh_y0 = (OPJ_UINT32)tr->bands[1].y0;
- /* Substract the origin of the bands for this tile, to the subwindow */
+ /* Subtract the origin of the bands for this tile, to the subwindow */
/* of interest band coordinates, so as to get them relative to the */
/* tile */
win_ll_x0 = opj_uint_subs(win_ll_x0, tr_ll_x0);
@@ -2696,17 +2696,20 @@ OPJ_BOOL opj_dwt_decode_partial_97(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec,
/* overflow check */
if (l_data_size > (SIZE_MAX - 5U)) {
/* FIXME event manager error callback */
+ opj_sparse_array_int32_free(sa);
return OPJ_FALSE;
}
l_data_size += 5U;
/* overflow check */
if (l_data_size > (SIZE_MAX / sizeof(opj_v4_t))) {
/* FIXME event manager error callback */
+ opj_sparse_array_int32_free(sa);
return OPJ_FALSE;
}
h.wavelet = (opj_v4_t*) opj_aligned_malloc(l_data_size * sizeof(opj_v4_t));
if (!h.wavelet) {
/* FIXME event manager error callback */
+ opj_sparse_array_int32_free(sa);
return OPJ_FALSE;
}
v.wavelet = h.wavelet;
@@ -2759,7 +2762,7 @@ OPJ_BOOL opj_dwt_decode_partial_97(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec,
tr_hl_x0 = (OPJ_UINT32)tr->bands[0].x0;
tr_lh_y0 = (OPJ_UINT32)tr->bands[1].y0;
- /* Substract the origin of the bands for this tile, to the subwindow */
+ /* Subtract the origin of the bands for this tile, to the subwindow */
/* of interest band coordinates, so as to get them relative to the */
/* tile */
win_ll_x0 = opj_uint_subs(win_ll_x0, tr_ll_x0);
diff --git a/openjpeg/src/lib/openjp2/image.c b/openjpeg/src/lib/openjp2/image.c
index 13bcb8e4..fe373905 100644
--- a/openjpeg/src/lib/openjp2/image.c
+++ b/openjpeg/src/lib/openjp2/image.c
@@ -48,8 +48,8 @@ opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts,
image->color_space = clrspc;
image->numcomps = numcmpts;
/* allocate memory for the per-component information */
- image->comps = (opj_image_comp_t*)opj_calloc(1,
- image->numcomps * sizeof(opj_image_comp_t));
+ image->comps = (opj_image_comp_t*)opj_calloc(image->numcomps,
+ sizeof(opj_image_comp_t));
if (!image->comps) {
/* TODO replace with event manager, breaks API */
/* fprintf(stderr,"Unable to allocate memory for image.\n"); */
diff --git a/openjpeg/src/lib/openjp2/j2k.c b/openjpeg/src/lib/openjp2/j2k.c
index 25e0a348..4a4b3494 100644
--- a/openjpeg/src/lib/openjp2/j2k.c
+++ b/openjpeg/src/lib/openjp2/j2k.c
@@ -508,7 +508,7 @@ static OPJ_BOOL opj_j2k_write_cod(opj_j2k_t *p_j2k,
opj_event_mgr_t * p_manager);
/**
- * Reads a COD marker (Coding Styke defaults)
+ * Reads a COD marker (Coding style defaults)
* @param p_header_data the data contained in the COD box.
* @param p_j2k the jpeg2000 codec.
* @param p_header_size the size of the data contained in the COD marker.
@@ -1925,7 +1925,8 @@ static OPJ_BOOL opj_j2k_read_soc(opj_j2k_t *p_j2k,
/* FIXME move it in a index structure included in p_j2k*/
p_j2k->cstr_index->main_head_start = opj_stream_tell(p_stream) - 2;
- opj_event_msg(p_manager, EVT_INFO, "Start to read j2k main header (%d).\n",
+ opj_event_msg(p_manager, EVT_INFO,
+ "Start to read j2k main header (%" PRId64 ").\n",
p_j2k->cstr_index->main_head_start);
/* Add the marker to the codestream index*/
@@ -2625,7 +2626,7 @@ static OPJ_BOOL opj_j2k_write_cod(opj_j2k_t *p_j2k,
}
/**
- * Reads a COD marker (Coding Styke defaults)
+ * Reads a COD marker (Coding style defaults)
* @param p_header_data the data contained in the COD box.
* @param p_j2k the jpeg2000 codec.
* @param p_header_size the size of the data contained in the COD marker.
@@ -2657,12 +2658,17 @@ static OPJ_BOOL opj_j2k_read_cod(opj_j2k_t *p_j2k,
&l_cp->tcps[p_j2k->m_current_tile_number] :
p_j2k->m_specific_param.m_decoder.m_default_tcp;
+#if 0
+ /* This check was added per https://github.com/uclouvain/openjpeg/commit/daed8cc9195555e101ab708a501af2dfe6d5e001 */
+ /* but this is no longer necessary to handle issue476.jp2 */
+ /* and this actually cause issues on legit files. See https://github.com/uclouvain/openjpeg/issues/1043 */
/* Only one COD per tile */
if (l_tcp->cod) {
opj_event_msg(p_manager, EVT_ERROR,
"COD marker already read. No more than one COD marker per tile.\n");
return OPJ_FALSE;
}
+#endif
l_tcp->cod = 1;
/* Make sure room is sufficient */
@@ -3502,7 +3508,7 @@ static OPJ_BOOL opj_j2k_read_poc(opj_j2k_t *p_j2k,
l_old_poc_nb = l_tcp->POC ? l_tcp->numpocs + 1 : 0;
l_current_poc_nb += l_old_poc_nb;
- if (l_current_poc_nb >= sizeof(l_tcp->pocs) / sizeof(l_tcp->pocs[0])) {
+ if (l_current_poc_nb >= J2K_MAX_POCS) {
opj_event_msg(p_manager, EVT_ERROR, "Too many POCs %d\n", l_current_poc_nb);
return OPJ_FALSE;
}
@@ -4089,7 +4095,12 @@ static OPJ_BOOL opj_j2k_merge_ppt(opj_tcp_t *p_tcp, opj_event_mgr_t * p_manager)
/* preconditions */
assert(p_tcp != 00);
assert(p_manager != 00);
- assert(p_tcp->ppt_buffer == NULL);
+
+ if (p_tcp->ppt_buffer != NULL) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "opj_j2k_merge_ppt() has already been called\n");
+ return OPJ_FALSE;
+ }
if (p_tcp->ppt == 0U) {
return OPJ_TRUE;
@@ -6419,7 +6430,9 @@ void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters)
OPJ_BOOL opj_j2k_set_threads(opj_j2k_t *j2k, OPJ_UINT32 num_threads)
{
- if (opj_has_thread_support()) {
+ /* Currently we pass the thread-pool to the tcd, so we cannot re-set it */
+ /* afterwards */
+ if (opj_has_thread_support() && j2k->m_tcd == NULL) {
opj_thread_pool_destroy(j2k->m_tp);
j2k->m_tp = NULL;
if (num_threads <= (OPJ_UINT32)INT_MAX) {
@@ -6434,9 +6447,8 @@ OPJ_BOOL opj_j2k_set_threads(opj_j2k_t *j2k, OPJ_UINT32 num_threads)
return OPJ_FALSE;
}
-static int opj_j2k_get_default_thread_count(void)
+static int opj_j2k_get_default_thread_count()
{
-#if defined(MUTEX_win32) || defined(MUTEX_pthread)
const char* num_threads_str = getenv("OPJ_NUM_THREADS");
int num_cpus;
int num_threads;
@@ -6458,9 +6470,6 @@ static int opj_j2k_get_default_thread_count(void)
num_threads = 2 * num_cpus;
}
return num_threads;
-#else
- return 0;
-#endif
}
/* ----------------------------------------------------------------------- */
@@ -8842,7 +8851,10 @@ OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
/* Current marker is the EOC marker ?*/
if (l_current_marker == J2K_MS_EOC) {
- p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EOC;
+ if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_EOC) {
+ p_j2k->m_current_tile_number = 0;
+ p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EOC;
+ }
}
/* FIXME DOC ???*/
@@ -9224,6 +9236,14 @@ static OPJ_BOOL opj_j2k_update_image_dimensions(opj_image_t* p_image,
l_img_comp = p_image->comps;
for (it_comp = 0; it_comp < p_image->numcomps; ++it_comp) {
OPJ_INT32 l_h, l_w;
+ if (p_image->x0 > (OPJ_UINT32)INT_MAX ||
+ p_image->y0 > (OPJ_UINT32)INT_MAX ||
+ p_image->x1 > (OPJ_UINT32)INT_MAX ||
+ p_image->y1 > (OPJ_UINT32)INT_MAX) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "Image coordinates above INT_MAX are not supported\n");
+ return OPJ_FALSE;
+ }
l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0,
(OPJ_INT32)l_img_comp->dx);
diff --git a/openjpeg/src/lib/openjp2/jp2.c b/openjpeg/src/lib/openjp2/jp2.c
index c79ea731..4402ffe3 100644
--- a/openjpeg/src/lib/openjp2/jp2.c
+++ b/openjpeg/src/lib/openjp2/jp2.c
@@ -1005,7 +1005,7 @@ static OPJ_BOOL opj_jp2_check_color(opj_image_t *image, opj_jp2_color_t *color,
if (!pcol_usage[i]) {
is_sane = 0U;
opj_event_msg(p_manager, EVT_WARNING,
- "Component mapping seems wrong. Trying to correct.\n", i);
+ "Component mapping seems wrong. Trying to correct.\n");
break;
}
}
@@ -1079,7 +1079,7 @@ static OPJ_BOOL opj_jp2_apply_pclr(opj_image_t *image,
/* Palette mapping: */
new_comps[i].data = (OPJ_INT32*)
- opj_image_data_alloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(OPJ_INT32));
+ opj_image_data_alloc(sizeof(OPJ_INT32) * old_comps[cmp].w * old_comps[cmp].h);
if (!new_comps[i].data) {
while (i > 0) {
-- i;
@@ -1106,7 +1106,6 @@ static OPJ_BOOL opj_jp2_apply_pclr(opj_image_t *image,
/* Direct use: */
if (cmap[i].mtyp == 0) {
- assert(cmp == 0);
dst = new_comps[i].data;
assert(dst);
for (j = 0; j < max; ++j) {
@@ -1194,8 +1193,8 @@ static OPJ_BOOL opj_jp2_read_pclr(opj_jp2_t *jp2,
return OPJ_FALSE;
}
- entries = (OPJ_UINT32*) opj_malloc((size_t)nr_channels * nr_entries * sizeof(
- OPJ_UINT32));
+ entries = (OPJ_UINT32*) opj_malloc(sizeof(OPJ_UINT32) * nr_channels *
+ nr_entries);
if (!entries) {
return OPJ_FALSE;
}
diff --git a/openjpeg/src/lib/openjp2/openjpeg.h b/openjpeg/src/lib/openjp2/openjpeg.h
index f36286eb..53a0e10c 100644
--- a/openjpeg/src/lib/openjp2/openjpeg.h
+++ b/openjpeg/src/lib/openjp2/openjpeg.h
@@ -548,7 +548,7 @@ typedef struct opj_dparameters {
/** Verbose mode */
OPJ_BOOL m_verbose;
- /** tile number ot the decoded tile*/
+ /** tile number of the decoded tile */
OPJ_UINT32 tile_index;
/** Nb of tile to decode */
OPJ_UINT32 nb_tile_to_decode;
@@ -1178,7 +1178,8 @@ OPJ_API void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stream,
opj_stream_skip_fn p_function);
/**
- * Sets the given function to be used as a seek function, the stream is then seekable.
+ * Sets the given function to be used as a seek function, the stream is then seekable,
+ * using SEEK_SET behavior.
* @param p_stream the stream to modify
* @param p_function the function to use a skip function.
*/
@@ -1313,6 +1314,9 @@ OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
* number, or "ALL_CPUS". If OPJ_NUM_THREADS is set and this function is called,
* this function will override the behaviour of the environment variable.
*
+ * Currently this function must be called after opj_setup_decoder() and
+ * before opj_read_header().
+ *
* Note: currently only has effect on the decompressor.
*
* @param p_codec decompressor handler
@@ -1381,7 +1385,7 @@ OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_decoded_components(opj_codec_t *p_codec,
* performance improvements when reading an image by chunks.
*
* @param p_codec the jpeg2000 codec.
- * @param p_image the decoded image previously setted by opj_read_header
+ * @param p_image the decoded image previously set by opj_read_header
* @param p_start_x the left position of the rectangle to decode (in image coordinates).
* @param p_end_x the right position of the rectangle to decode (in image coordinates).
* @param p_start_y the up position of the rectangle to decode (in image coordinates).
diff --git a/openjpeg/src/lib/openjp2/opj_intmath.h b/openjpeg/src/lib/openjp2/opj_intmath.h
index ad135976..754b5512 100644
--- a/openjpeg/src/lib/openjp2/opj_intmath.h
+++ b/openjpeg/src/lib/openjp2/opj_intmath.h
@@ -170,7 +170,7 @@ Divide an integer and round upwards
static INLINE OPJ_UINT32 opj_uint_ceildiv(OPJ_UINT32 a, OPJ_UINT32 b)
{
assert(b);
- return (a + b - 1) / b;
+ return (OPJ_UINT32)(((OPJ_UINT64)a + b - 1) / b);
}
/**
diff --git a/openjpeg/src/lib/openjp2/pi.c b/openjpeg/src/lib/openjp2/pi.c
index 91642ee4..4a6ed68e 100644
--- a/openjpeg/src/lib/openjp2/pi.c
+++ b/openjpeg/src/lib/openjp2/pi.c
@@ -748,6 +748,9 @@ static void opj_get_encoding_parameters(const opj_image_t *p_image,
/* position in x and y of tile */
OPJ_UINT32 p, q;
+ /* non-corrected (in regard to image offset) tile offset */
+ OPJ_UINT32 l_tx0, l_ty0;
+
/* preconditions */
assert(p_cp != 00);
assert(p_image != 00);
@@ -763,14 +766,14 @@ static void opj_get_encoding_parameters(const opj_image_t *p_image,
q = p_tileno / p_cp->tw;
/* find extent of tile */
- *p_tx0 = opj_int_max((OPJ_INT32)(p_cp->tx0 + p * p_cp->tdx),
- (OPJ_INT32)p_image->x0);
- *p_tx1 = opj_int_min((OPJ_INT32)(p_cp->tx0 + (p + 1) * p_cp->tdx),
- (OPJ_INT32)p_image->x1);
- *p_ty0 = opj_int_max((OPJ_INT32)(p_cp->ty0 + q * p_cp->tdy),
- (OPJ_INT32)p_image->y0);
- *p_ty1 = opj_int_min((OPJ_INT32)(p_cp->ty0 + (q + 1) * p_cp->tdy),
- (OPJ_INT32)p_image->y1);
+ l_tx0 = p_cp->tx0 + p *
+ p_cp->tdx; /* can't be greater than p_image->x1 so won't overflow */
+ *p_tx0 = (OPJ_INT32)opj_uint_max(l_tx0, p_image->x0);
+ *p_tx1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, p_cp->tdx), p_image->x1);
+ l_ty0 = p_cp->ty0 + q *
+ p_cp->tdy; /* can't be greater than p_image->y1 so won't overflow */
+ *p_ty0 = (OPJ_INT32)opj_uint_max(l_ty0, p_image->y0);
+ *p_ty1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, p_cp->tdy), p_image->y1);
/* max precision is 0 (can only grow) */
*p_max_prec = 0;
diff --git a/openjpeg/src/lib/openjp2/t1.c b/openjpeg/src/lib/openjp2/t1.c
index 76744380..f6f76711 100644
--- a/openjpeg/src/lib/openjp2/t1.c
+++ b/openjpeg/src/lib/openjp2/t1.c
@@ -1618,8 +1618,8 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
cblk_w = (OPJ_UINT32)(cblk->x1 - cblk->x0);
cblk_h = (OPJ_UINT32)(cblk->y1 - cblk->y0);
- cblk->decoded_data = (OPJ_INT32*)opj_aligned_malloc(cblk_w * cblk_h * sizeof(
- OPJ_INT32));
+ cblk->decoded_data = (OPJ_INT32*)opj_aligned_malloc(sizeof(OPJ_INT32) *
+ cblk_w * cblk_h);
if (cblk->decoded_data == NULL) {
if (job->p_manager_mutex) {
opj_mutex_lock(job->p_manager_mutex);
@@ -1634,7 +1634,7 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
return;
}
/* Zero-init required */
- memset(cblk->decoded_data, 0, cblk_w * cblk_h * sizeof(OPJ_INT32));
+ memset(cblk->decoded_data, 0, sizeof(OPJ_INT32) * cblk_w * cblk_h);
} else if (cblk->decoded_data) {
/* Not sure if that code path can happen, but better be */
/* safe than sorry */
@@ -2168,9 +2168,18 @@ OPJ_BOOL opj_t1_encode_cblks(opj_t1_t *t1,
t1->data = tiledp;
t1->data_stride = tile_w;
if (tccp->qmfbid == 1) {
+ /* Do multiplication on unsigned type, even if the
+ * underlying type is signed, to avoid potential
+ * int overflow on large value (the output will be
+ * incorrect in such situation, but whatever...)
+ * This assumes complement-to-2 signed integer
+ * representation
+ * Fixes https://github.com/uclouvain/openjpeg/issues/1053
+ */
+ OPJ_UINT32* OPJ_RESTRICT tiledp_u = (OPJ_UINT32*) tiledp;
for (j = 0; j < cblk_h; ++j) {
for (i = 0; i < cblk_w; ++i) {
- tiledp[tileIndex] *= (1 << T1_NMSEDEC_FRACBITS);
+ tiledp_u[tileIndex] <<= T1_NMSEDEC_FRACBITS;
tileIndex++;
}
tileIndex += tileLineAdvance;
diff --git a/openjpeg/src/lib/openjp2/t2.c b/openjpeg/src/lib/openjp2/t2.c
index c7a3ceed..9825118c 100644
--- a/openjpeg/src/lib/openjp2/t2.c
+++ b/openjpeg/src/lib/openjp2/t2.c
@@ -667,7 +667,11 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
opj_tcd_resolution_t *res = &tilec->resolutions[resno];
opj_bio_t *bio = 00; /* BIO component */
+#ifdef ENABLE_EMPTY_PACKET_OPTIMIZATION
OPJ_BOOL packet_empty = OPJ_TRUE;
+#else
+ OPJ_BOOL packet_empty = OPJ_FALSE;
+#endif
/* <SOP 0xff91> */
if (tcp->csty & J2K_CP_CSTY_SOP) {
@@ -728,6 +732,11 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
}
opj_bio_init_enc(bio, c, length);
+#ifdef ENABLE_EMPTY_PACKET_OPTIMIZATION
+ /* WARNING: this code branch is disabled, since it has been reported that */
+ /* such packets cause decoding issues with cinema J2K hardware */
+ /* decoders: https://groups.google.com/forum/#!topic/openjpeg/M7M_fLX_Bco */
+
/* Check if the packet is empty */
/* Note: we could also skip that step and always write a packet header */
band = res->bands;
@@ -755,10 +764,9 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
break;
}
}
-
+#endif
opj_bio_write(bio, packet_empty ? 0 : 1, 1); /* Empty header bit */
-
/* Writing Packet header */
band = res->bands;
for (bandno = 0; !packet_empty &&
@@ -1222,12 +1230,6 @@ static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
l_included, l_cblk->segs[l_segno].numnewpasses, l_increment,
l_cblk->segs[l_segno].newlen);
- /* testcase 1802.pdf.SIGSEGV.36e.894 */
- if (l_cblk->segs[l_segno].newlen > *l_modified_length_ptr) {
- opj_bio_destroy(l_bio);
- return OPJ_FALSE;
- }
-
n -= (OPJ_INT32)l_cblk->segs[l_segno].numnewpasses;
if (n > 0) {
++l_segno;
diff --git a/openjpeg/src/lib/openjp2/tcd.c b/openjpeg/src/lib/openjp2/tcd.c
index 1dd15405..647991c7 100644
--- a/openjpeg/src/lib/openjp2/tcd.c
+++ b/openjpeg/src/lib/openjp2/tcd.c
@@ -905,8 +905,24 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
/* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_INT32)l_pdx) << l_pdx;
l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_INT32)l_pdy) << l_pdy;
- l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT32)l_pdx) << l_pdx;
- l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT32)l_pdy) << l_pdy;
+ {
+ OPJ_UINT32 tmp = ((OPJ_UINT32)opj_int_ceildivpow2(l_res->x1,
+ (OPJ_INT32)l_pdx)) << l_pdx;
+ if (tmp > (OPJ_UINT32)INT_MAX) {
+ opj_event_msg(manager, EVT_ERROR, "Integer overflow\n");
+ return OPJ_FALSE;
+ }
+ l_br_prc_x_end = (OPJ_INT32)tmp;
+ }
+ {
+ OPJ_UINT32 tmp = ((OPJ_UINT32)opj_int_ceildivpow2(l_res->y1,
+ (OPJ_INT32)l_pdy)) << l_pdy;
+ if (tmp > (OPJ_UINT32)INT_MAX) {
+ opj_event_msg(manager, EVT_ERROR, "Integer overflow\n");
+ return OPJ_FALSE;
+ }
+ l_br_prc_y_end = (OPJ_INT32)tmp;
+ }
/*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d, br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end ,l_br_prc_y_end );*/
l_res->pw = (l_res->x0 == l_res->x1) ? 0U : (OPJ_UINT32)((
@@ -1067,6 +1083,12 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
l_nb_code_blocks = l_current_precinct->cw * l_current_precinct->ch;
/*fprintf(stderr, "\t\t\t\t precinct_cw = %d x recinct_ch = %d\n",l_current_precinct->cw, l_current_precinct->ch); */
+ if ((((OPJ_UINT32) - 1) / (OPJ_UINT32)sizeof_block) <
+ l_nb_code_blocks) {
+ opj_event_msg(manager, EVT_ERROR,
+ "Size of code block data exceeds system limits\n");
+ return OPJ_FALSE;
+ }
l_nb_code_blocks_size = l_nb_code_blocks * (OPJ_UINT32)sizeof_block;
if (!l_current_precinct->cblks.blocks && (l_nb_code_blocks > 0U)) {
diff --git a/openjpeg/src/lib/openjp2/thread.c b/openjpeg/src/lib/openjp2/thread.c
index af33c2c8..f2fca2ee 100644
--- a/openjpeg/src/lib/openjp2/thread.c
+++ b/openjpeg/src/lib/openjp2/thread.c
@@ -723,6 +723,8 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads)
tp->worker_threads[i].thread = opj_thread_create(opj_worker_thread_function,
&(tp->worker_threads[i]));
if (tp->worker_threads[i].thread == NULL) {
+ opj_mutex_destroy(tp->worker_threads[i].mutex);
+ opj_cond_destroy(tp->worker_threads[i].cond);
tp->worker_threads_count = i;
bRet = OPJ_FALSE;
break;
@@ -732,7 +734,7 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads)
/* Wait all threads to be started */
/* printf("waiting for all threads to be started\n"); */
opj_mutex_lock(tp->mutex);
- while (tp->waiting_worker_thread_count < num_threads) {
+ while (tp->waiting_worker_thread_count < tp->worker_threads_count) {
opj_cond_wait(tp->cond, tp->mutex);
}
opj_mutex_unlock(tp->mutex);
diff --git a/psi/dscparse.c b/psi/dscparse.c
index e754a82c..0c34eb14 100644
--- a/psi/dscparse.c
+++ b/psi/dscparse.c
@@ -3822,7 +3822,7 @@ dsc_dcs2_fixup(CDSC *dsc)
DSC_OFFSET *pbegin;
DSC_OFFSET *pend;
DSC_OFFSET end;
- CDCS2 *pdcs = dsc->dcs2;
+ CDCS2 *pdcs = NULL;
/* Now treat the initial EPS file as a single page without
* headers or trailer, so page extraction will fetch the
* the correct separation. */
@@ -3888,6 +3888,14 @@ dsc_dcs2_fixup(CDSC *dsc)
*pbegin = *pend;
end = 0; /* end of composite is start of first separation */
+ /* we used to do this where the pointer is declared, but Coverity points out
+ * that dsc_alloc_string can call dsc_reset which can free dsc and dsc->dcs2.
+ * By deferring the initialisation to here we can ensure we don't have a
+ * dangling pointer. This makes me suspiciouos that DCS (not DSC!) comments
+ * have never worked properly.
+ */
+ pdcs = dsc->dcs2;
+
while (pdcs) {
page_number = dsc->page_count;
if ((pdcs->begin) && (pdcs->colourname != NULL)) {
diff --git a/psi/dwtext.c b/psi/dwtext.c
index f236b5bd..f690374d 100644
--- a/psi/dwtext.c
+++ b/psi/dwtext.c
@@ -914,9 +914,9 @@ WndTextProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
* initializes it here.
*/
tw = (TW *)(((CREATESTRUCT FAR *)lParam)->lpCreateParams);
- SetWindowLong(hwnd, 0, (LONG)tw);
+ SetWindowLongPtr(hwnd, 0, (LONG_PTR)tw);
}
- tw = (TW *)GetWindowLong(hwnd, 0);
+ tw = (TW *)GetWindowLongPtr(hwnd, 0);
switch(message) {
case WM_SYSCOMMAND:
diff --git a/psi/iapi.h b/psi/iapi.h
index 414e1682..ae37fded 100644
--- a/psi/iapi.h
+++ b/psi/iapi.h
@@ -68,6 +68,11 @@ extern "C" {
# define GSDLLEXPORT
# endif
# endif
+# ifdef __MINGW32__
+/* export stdcall functions as "name" instead of "_name@ordinal" */
+# undef GSDLLAPI
+# define GSDLLAPI
+# endif
# ifndef GSDLLAPI
# define GSDLLAPI __stdcall
# endif
@@ -90,7 +95,11 @@ extern "C" {
#endif
#ifndef GSDLLEXPORT
-# define GSDLLEXPORT
+# ifdef __GNUC__
+# define GSDLLEXPORT __attribute__ ((visibility ("default")))
+# else
+# define GSDLLEXPORT
+# endif
#endif
#ifndef GSDLLAPI
# define GSDLLAPI
diff --git a/psi/icontext.c b/psi/icontext.c
index a48d8d8c..e7ad2bac 100644
--- a/psi/icontext.c
+++ b/psi/icontext.c
@@ -122,6 +122,8 @@ context_state_alloc(gs_context_state_t ** ppcst,
if (pcst == 0)
return_error(gs_error_VMerror);
}
+ /* Make sure pcst->memory is valid, in case we return an error. */
+ pcst->memory = *dmem;
code = gs_interp_alloc_stacks(mem, pcst);
if (code < 0)
goto x0;
@@ -137,7 +139,6 @@ context_state_alloc(gs_context_state_t ** ppcst,
code = gs_note_error(gs_error_VMerror);
goto x1;
}
- pcst->memory = *dmem;
pcst->language_level = 1;
make_false(&pcst->array_packing);
make_int(&pcst->binary_object_format, 0);
diff --git a/psi/imain.c b/psi/imain.c
index 95ef5b6b..db3fd2a1 100644
--- a/psi/imain.c
+++ b/psi/imain.c
@@ -1126,7 +1126,15 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
if (idmemory->reclaim != 0) {
code = interp_reclaim(&minst->i_ctx_p, avm_global);
- if (code < 0) {
+ /* We ignore gs_error_VMerror because it comes from gs_vmreclaim()
+ calling context_state_load(), and we don't seem to depend on the
+ missing fields. */
+ if (code == gs_error_VMerror) {
+ if (exit_status == 0 || exit_status == gs_error_Quit) {
+ exit_status = gs_error_VMerror;
+ }
+ }
+ else if (code < 0) {
ref error_name;
if (tempnames)
free(tempnames);
@@ -1140,11 +1148,10 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
else {
emprintf1(imemory, "UNKNOWN ERROR %d reclaiming the memory while the interpreter finalization.\n", code);
}
-#ifdef MEMENTO_SQUEEZE_BUILD
- if (code != gs_error_VMerror ) return gs_error_Fatal;
-#else
- return gs_error_Fatal;
+#ifdef MEMENTO
+ if (Memento_squeezing() && code != gs_error_VMerror ) return gs_error_Fatal;
#endif
+ return gs_error_Fatal;
}
i_ctx_p = minst->i_ctx_p; /* interp_reclaim could change it. */
}
@@ -1260,6 +1267,10 @@ gs_main_finit(gs_main_instance * minst, int exit_status, int code)
set_lib_path_length(minst, 0);
gs_free_object(minst->heap, minst->lib_path.container.value.refs, "lib_path array");
+ if (minst->init_done == 0 && i_ctx_p) {
+ /* This fixes leak if memento forces failure in gs_main_init1(). */
+ dmem = *idmemory;
+ }
ialloc_finit(&dmem);
return exit_status;
}
diff --git a/psi/imainarg.c b/psi/imainarg.c
index 76653f32..c5d74caf 100644
--- a/psi/imainarg.c
+++ b/psi/imainarg.c
@@ -509,7 +509,9 @@ run_stdin:
break;
}
if (code >= 0)
- code = runarg(minst, "]put", psarg, ".runfile", runInit | runFlush, minst->user_errors, NULL, NULL);
+ code = run_string(minst, "]put", 0, minst->user_errors, NULL, NULL);
+ if (code >= 0)
+ code = argproc(minst, psarg);
arg_free((char *)psarg, minst->heap);
if (code >= 0)
code = gs_error_Quit;
diff --git a/psi/int.mak b/psi/int.mak
index 0161f840..f149452a 100644
--- a/psi/int.mak
+++ b/psi/int.mak
@@ -358,7 +358,7 @@ $(PSOBJ)zfilter.$(OBJ) : $(PSSRC)zfilter.c $(OP) $(memory__h)\
$(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h) $(ilevel_h)\
$(sfilter_h) $(srlx_h) $(sstring_h) $(stream_h) $(strimpl_h)\
$(INT_MAK) $(MAKEDIRS)
- $(PSCC) $(PSO_)zfilter.$(OBJ) $(C_) $(PSSRC)zfilter.c
+ $(PSCC) $(ENABLE_URF) $(URF_INCLUDE) $(PSO_)zfilter.$(OBJ) $(C_) $(PSSRC)zfilter.c
$(PSOBJ)zfproc.$(OBJ) : $(PSSRC)zfproc.c $(GH) $(memory__h) $(stat__h)\
$(oper_h)\
@@ -525,7 +525,7 @@ $(PSOBJ)zmatrix.$(OBJ) : $(PSSRC)zmatrix.c $(OP)\
$(PSCC) $(PSO_)zmatrix.$(OBJ) $(C_) $(PSSRC)zmatrix.c
$(PSOBJ)zpaint.$(OBJ) : $(PSSRC)zpaint.c $(OP)\
- $(gspaint_h) $(igstate_h) $(INT_MAK) $(MAKEDIRS)
+ $(gspaint_h) $(igstate_h) $(store_h) $(estack_h) $(INT_MAK) $(MAKEDIRS)
$(PSCC) $(PSO_)zpaint.$(OBJ) $(C_) $(PSSRC)zpaint.c
$(PSOBJ)zpath.$(OBJ) : $(PSSRC)zpath.c $(OP) $(math__h)\
@@ -1947,185 +1947,186 @@ $(PSOBJ)ireclaim.$(OBJ) : $(PSSRC)ireclaim.c $(GH)\
# Dependencies:
$(PSSRC)ierrors.h:$(GLSRC)gserrors.h
$(PSSRC)iconf.h:$(GLSRC)gxiodev.h
-$(PSSRC)iconf.h:$(GLSRC)stat_.h
+$(PSSRC)iconf.h:$(GLSRC)gsparam.h
$(PSSRC)iconf.h:$(GLSRC)gp.h
$(PSSRC)iconf.h:$(GLSRC)srdline.h
$(PSSRC)iconf.h:$(GLSRC)scommon.h
$(PSSRC)iconf.h:$(GLSRC)gsfname.h
$(PSSRC)iconf.h:$(GLSRC)gsstype.h
+$(PSSRC)iconf.h:$(GLSRC)stat_.h
$(PSSRC)iconf.h:$(GLSRC)gsmemory.h
-$(PSSRC)iconf.h:$(GLSRC)gpgetenv.h
$(PSSRC)iconf.h:$(GLSRC)memory_.h
+$(PSSRC)iconf.h:$(GLSRC)gpgetenv.h
$(PSSRC)iconf.h:$(GLSRC)gslibctx.h
$(PSSRC)iconf.h:$(GLSRC)gscdefs.h
-$(PSSRC)iconf.h:$(GLSRC)stdint_.h
$(PSSRC)iconf.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iconf.h:$(GLSRC)stdio_.h
-$(PSSRC)iconf.h:$(GLSRC)gstypes.h
+$(PSSRC)iconf.h:$(GLSRC)stdint_.h
+$(PSSRC)iconf.h:$(GLSRC)gssprintf.h
$(PSSRC)iconf.h:$(GLSRC)std.h
+$(PSSRC)iconf.h:$(GLSRC)gstypes.h
$(PSSRC)iconf.h:$(GLSRC)stdpre.h
$(PSSRC)iconf.h:$(GLGEN)arch.h
-$(PSSRC)iconf.h:$(GLSRC)gssprintf.h
$(PSSRC)idebug.h:$(PSSRC)iref.h
$(PSSRC)idebug.h:$(GLSRC)gxalloc.h
$(PSSRC)idebug.h:$(GLSRC)gxobj.h
$(PSSRC)idebug.h:$(GLSRC)gsnamecl.h
$(PSSRC)idebug.h:$(GLSRC)gxcspace.h
-$(PSSRC)idebug.h:$(GLSRC)gxfrac.h
$(PSSRC)idebug.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idebug.h:$(GLSRC)gxfrac.h
$(PSSRC)idebug.h:$(GLSRC)gscms.h
-$(PSSRC)idebug.h:$(GLSRC)gsdevice.h
$(PSSRC)idebug.h:$(GLSRC)gscspace.h
+$(PSSRC)idebug.h:$(GLSRC)gsdevice.h
$(PSSRC)idebug.h:$(GLSRC)gxarith.h
-$(PSSRC)idebug.h:$(GLSRC)gsrefct.h
-$(PSSRC)idebug.h:$(GLSRC)gsiparam.h
$(PSSRC)idebug.h:$(GLSRC)gxhttile.h
-$(PSSRC)idebug.h:$(GLSRC)memento.h
-$(PSSRC)idebug.h:$(GLSRC)gsparam.h
-$(PSSRC)idebug.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idebug.h:$(GLSRC)gsiparam.h
$(PSSRC)idebug.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idebug.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idebug.h:$(GLSRC)gsrefct.h
+$(PSSRC)idebug.h:$(GLSRC)gsparam.h
+$(PSSRC)idebug.h:$(GLSRC)gsccolor.h
$(PSSRC)idebug.h:$(GLSRC)gsstruct.h
$(PSSRC)idebug.h:$(GLSRC)gxsync.h
-$(PSSRC)idebug.h:$(GLSRC)gscsel.h
$(PSSRC)idebug.h:$(GLSRC)scommon.h
+$(PSSRC)idebug.h:$(GLSRC)memento.h
+$(PSSRC)idebug.h:$(GLSRC)gscsel.h
$(PSSRC)idebug.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idebug.h:$(GLSRC)gsccolor.h
$(PSSRC)idebug.h:$(GLSRC)gsstype.h
$(PSSRC)idebug.h:$(GLSRC)gsmemory.h
$(PSSRC)idebug.h:$(GLSRC)gpsync.h
$(PSSRC)idebug.h:$(GLSRC)gslibctx.h
+$(PSSRC)idebug.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idebug.h:$(GLSRC)gsalloc.h
+$(PSSRC)idebug.h:$(GLSRC)stdio_.h
$(PSSRC)idebug.h:$(GLSRC)gxcindex.h
-$(PSSRC)idebug.h:$(GLSRC)stdint_.h
$(PSSRC)idebug.h:$(GLSRC)gsgstate.h
-$(PSSRC)idebug.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idebug.h:$(GLSRC)stdio_.h
-$(PSSRC)idebug.h:$(GLSRC)gstypes.h
+$(PSSRC)idebug.h:$(GLSRC)stdint_.h
+$(PSSRC)idebug.h:$(GLSRC)gssprintf.h
$(PSSRC)idebug.h:$(GLSRC)std.h
+$(PSSRC)idebug.h:$(GLSRC)gstypes.h
$(PSSRC)idebug.h:$(GLSRC)stdpre.h
$(PSSRC)idebug.h:$(GLGEN)arch.h
-$(PSSRC)idebug.h:$(GLSRC)gssprintf.h
$(PSSRC)iddstack.h:$(PSSRC)iref.h
$(PSSRC)iddstack.h:$(GLSRC)gxalloc.h
$(PSSRC)iddstack.h:$(GLSRC)gxobj.h
$(PSSRC)iddstack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iddstack.h:$(GLSRC)gxcspace.h
-$(PSSRC)iddstack.h:$(GLSRC)gxfrac.h
$(PSSRC)iddstack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iddstack.h:$(GLSRC)gxfrac.h
$(PSSRC)iddstack.h:$(GLSRC)gscms.h
-$(PSSRC)iddstack.h:$(GLSRC)gsdevice.h
$(PSSRC)iddstack.h:$(GLSRC)gscspace.h
+$(PSSRC)iddstack.h:$(GLSRC)gsdevice.h
$(PSSRC)iddstack.h:$(GLSRC)gxarith.h
-$(PSSRC)iddstack.h:$(GLSRC)gsrefct.h
-$(PSSRC)iddstack.h:$(GLSRC)gsiparam.h
$(PSSRC)iddstack.h:$(GLSRC)gxhttile.h
-$(PSSRC)iddstack.h:$(GLSRC)memento.h
-$(PSSRC)iddstack.h:$(GLSRC)gsparam.h
-$(PSSRC)iddstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iddstack.h:$(GLSRC)gsiparam.h
$(PSSRC)iddstack.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iddstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iddstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iddstack.h:$(GLSRC)gsparam.h
+$(PSSRC)iddstack.h:$(GLSRC)gsccolor.h
$(PSSRC)iddstack.h:$(GLSRC)gsstruct.h
$(PSSRC)iddstack.h:$(GLSRC)gxsync.h
-$(PSSRC)iddstack.h:$(GLSRC)gscsel.h
$(PSSRC)iddstack.h:$(GLSRC)scommon.h
+$(PSSRC)iddstack.h:$(GLSRC)memento.h
+$(PSSRC)iddstack.h:$(GLSRC)gscsel.h
$(PSSRC)iddstack.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iddstack.h:$(GLSRC)gsccolor.h
$(PSSRC)iddstack.h:$(GLSRC)gsstype.h
$(PSSRC)iddstack.h:$(GLSRC)gsmemory.h
$(PSSRC)iddstack.h:$(GLSRC)gpsync.h
$(PSSRC)iddstack.h:$(GLSRC)gslibctx.h
+$(PSSRC)iddstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iddstack.h:$(GLSRC)gsalloc.h
+$(PSSRC)iddstack.h:$(GLSRC)stdio_.h
$(PSSRC)iddstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iddstack.h:$(GLSRC)stdint_.h
$(PSSRC)iddstack.h:$(GLSRC)gsgstate.h
-$(PSSRC)iddstack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iddstack.h:$(GLSRC)stdio_.h
-$(PSSRC)iddstack.h:$(GLSRC)gstypes.h
+$(PSSRC)iddstack.h:$(GLSRC)stdint_.h
+$(PSSRC)iddstack.h:$(GLSRC)gssprintf.h
$(PSSRC)iddstack.h:$(GLSRC)std.h
+$(PSSRC)iddstack.h:$(GLSRC)gstypes.h
$(PSSRC)iddstack.h:$(GLSRC)stdpre.h
$(PSSRC)iddstack.h:$(GLGEN)arch.h
-$(PSSRC)iddstack.h:$(GLSRC)gssprintf.h
$(PSSRC)idict.h:$(PSSRC)iddstack.h
$(PSSRC)idict.h:$(PSSRC)iref.h
$(PSSRC)idict.h:$(GLSRC)gxalloc.h
$(PSSRC)idict.h:$(GLSRC)gxobj.h
$(PSSRC)idict.h:$(GLSRC)gsnamecl.h
$(PSSRC)idict.h:$(GLSRC)gxcspace.h
-$(PSSRC)idict.h:$(GLSRC)gxfrac.h
$(PSSRC)idict.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idict.h:$(GLSRC)gxfrac.h
$(PSSRC)idict.h:$(GLSRC)gscms.h
-$(PSSRC)idict.h:$(GLSRC)gsdevice.h
$(PSSRC)idict.h:$(GLSRC)gscspace.h
+$(PSSRC)idict.h:$(GLSRC)gsdevice.h
$(PSSRC)idict.h:$(GLSRC)gxarith.h
-$(PSSRC)idict.h:$(GLSRC)gsrefct.h
-$(PSSRC)idict.h:$(GLSRC)gsiparam.h
$(PSSRC)idict.h:$(GLSRC)gxhttile.h
-$(PSSRC)idict.h:$(GLSRC)memento.h
-$(PSSRC)idict.h:$(GLSRC)gsparam.h
-$(PSSRC)idict.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idict.h:$(GLSRC)gsiparam.h
$(PSSRC)idict.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idict.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idict.h:$(GLSRC)gsrefct.h
+$(PSSRC)idict.h:$(GLSRC)gsparam.h
+$(PSSRC)idict.h:$(GLSRC)gsccolor.h
$(PSSRC)idict.h:$(GLSRC)gsstruct.h
$(PSSRC)idict.h:$(GLSRC)gxsync.h
-$(PSSRC)idict.h:$(GLSRC)gscsel.h
$(PSSRC)idict.h:$(GLSRC)scommon.h
+$(PSSRC)idict.h:$(GLSRC)memento.h
+$(PSSRC)idict.h:$(GLSRC)gscsel.h
$(PSSRC)idict.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idict.h:$(GLSRC)gsccolor.h
$(PSSRC)idict.h:$(GLSRC)gsstype.h
$(PSSRC)idict.h:$(GLSRC)gsmemory.h
$(PSSRC)idict.h:$(GLSRC)gpsync.h
$(PSSRC)idict.h:$(GLSRC)gslibctx.h
+$(PSSRC)idict.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idict.h:$(GLSRC)gsalloc.h
+$(PSSRC)idict.h:$(GLSRC)stdio_.h
$(PSSRC)idict.h:$(GLSRC)gxcindex.h
-$(PSSRC)idict.h:$(GLSRC)stdint_.h
$(PSSRC)idict.h:$(GLSRC)gsgstate.h
-$(PSSRC)idict.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idict.h:$(GLSRC)stdio_.h
-$(PSSRC)idict.h:$(GLSRC)gstypes.h
+$(PSSRC)idict.h:$(GLSRC)stdint_.h
+$(PSSRC)idict.h:$(GLSRC)gssprintf.h
$(PSSRC)idict.h:$(GLSRC)std.h
+$(PSSRC)idict.h:$(GLSRC)gstypes.h
$(PSSRC)idict.h:$(GLSRC)stdpre.h
$(PSSRC)idict.h:$(GLGEN)arch.h
-$(PSSRC)idict.h:$(GLSRC)gssprintf.h
$(PSSRC)idosave.h:$(PSSRC)imemory.h
$(PSSRC)idosave.h:$(PSSRC)ivmspace.h
$(PSSRC)idosave.h:$(PSSRC)iref.h
-$(PSSRC)idosave.h:$(GLSRC)gxalloc.h
$(PSSRC)idosave.h:$(GLSRC)gsgc.h
+$(PSSRC)idosave.h:$(GLSRC)gxalloc.h
$(PSSRC)idosave.h:$(GLSRC)gxobj.h
$(PSSRC)idosave.h:$(GLSRC)gsnamecl.h
$(PSSRC)idosave.h:$(GLSRC)gxcspace.h
-$(PSSRC)idosave.h:$(GLSRC)gxfrac.h
$(PSSRC)idosave.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idosave.h:$(GLSRC)gxfrac.h
$(PSSRC)idosave.h:$(GLSRC)gscms.h
-$(PSSRC)idosave.h:$(GLSRC)gsdevice.h
$(PSSRC)idosave.h:$(GLSRC)gscspace.h
+$(PSSRC)idosave.h:$(GLSRC)gsdevice.h
$(PSSRC)idosave.h:$(GLSRC)gxarith.h
-$(PSSRC)idosave.h:$(GLSRC)gsrefct.h
-$(PSSRC)idosave.h:$(GLSRC)gsiparam.h
$(PSSRC)idosave.h:$(GLSRC)gxhttile.h
-$(PSSRC)idosave.h:$(GLSRC)memento.h
-$(PSSRC)idosave.h:$(GLSRC)gsparam.h
-$(PSSRC)idosave.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idosave.h:$(GLSRC)gsiparam.h
$(PSSRC)idosave.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idosave.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idosave.h:$(GLSRC)gsrefct.h
+$(PSSRC)idosave.h:$(GLSRC)gsparam.h
+$(PSSRC)idosave.h:$(GLSRC)gsccolor.h
$(PSSRC)idosave.h:$(GLSRC)gsstruct.h
$(PSSRC)idosave.h:$(GLSRC)gxsync.h
-$(PSSRC)idosave.h:$(GLSRC)gscsel.h
$(PSSRC)idosave.h:$(GLSRC)scommon.h
+$(PSSRC)idosave.h:$(GLSRC)memento.h
+$(PSSRC)idosave.h:$(GLSRC)gscsel.h
$(PSSRC)idosave.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idosave.h:$(GLSRC)gsccolor.h
$(PSSRC)idosave.h:$(GLSRC)gsstype.h
$(PSSRC)idosave.h:$(GLSRC)gsmemory.h
$(PSSRC)idosave.h:$(GLSRC)gpsync.h
$(PSSRC)idosave.h:$(GLSRC)gslibctx.h
+$(PSSRC)idosave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idosave.h:$(GLSRC)gsalloc.h
+$(PSSRC)idosave.h:$(GLSRC)stdio_.h
$(PSSRC)idosave.h:$(GLSRC)gxcindex.h
-$(PSSRC)idosave.h:$(GLSRC)stdint_.h
$(PSSRC)idosave.h:$(GLSRC)gsgstate.h
-$(PSSRC)idosave.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idosave.h:$(GLSRC)stdio_.h
-$(PSSRC)idosave.h:$(GLSRC)gstypes.h
+$(PSSRC)idosave.h:$(GLSRC)stdint_.h
+$(PSSRC)idosave.h:$(GLSRC)gssprintf.h
$(PSSRC)idosave.h:$(GLSRC)std.h
+$(PSSRC)idosave.h:$(GLSRC)gstypes.h
$(PSSRC)idosave.h:$(GLSRC)stdpre.h
$(PSSRC)idosave.h:$(GLGEN)arch.h
-$(PSSRC)idosave.h:$(GLSRC)gssprintf.h
$(PSSRC)igcstr.h:$(GLSRC)gxalloc.h
$(PSSRC)igcstr.h:$(GLSRC)gxobj.h
$(PSSRC)igcstr.h:$(GLSRC)gxbitmap.h
@@ -2135,185 +2136,185 @@ $(PSSRC)igcstr.h:$(GLSRC)gsbitmap.h
$(PSSRC)igcstr.h:$(GLSRC)gsstype.h
$(PSSRC)igcstr.h:$(GLSRC)gsmemory.h
$(PSSRC)igcstr.h:$(GLSRC)gslibctx.h
-$(PSSRC)igcstr.h:$(GLSRC)gsalloc.h
-$(PSSRC)igcstr.h:$(GLSRC)stdint_.h
$(PSSRC)igcstr.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)igcstr.h:$(GLSRC)gsalloc.h
$(PSSRC)igcstr.h:$(GLSRC)stdio_.h
-$(PSSRC)igcstr.h:$(GLSRC)gstypes.h
+$(PSSRC)igcstr.h:$(GLSRC)stdint_.h
+$(PSSRC)igcstr.h:$(GLSRC)gssprintf.h
$(PSSRC)igcstr.h:$(GLSRC)std.h
+$(PSSRC)igcstr.h:$(GLSRC)gstypes.h
$(PSSRC)igcstr.h:$(GLSRC)stdpre.h
$(PSSRC)igcstr.h:$(GLGEN)arch.h
-$(PSSRC)igcstr.h:$(GLSRC)gssprintf.h
$(PSSRC)inames.h:$(PSSRC)imemory.h
$(PSSRC)inames.h:$(PSSRC)ivmspace.h
$(PSSRC)inames.h:$(PSSRC)iref.h
-$(PSSRC)inames.h:$(GLSRC)gxalloc.h
$(PSSRC)inames.h:$(GLSRC)gsgc.h
+$(PSSRC)inames.h:$(GLSRC)gxalloc.h
$(PSSRC)inames.h:$(GLSRC)gxobj.h
$(PSSRC)inames.h:$(GLSRC)gsnamecl.h
$(PSSRC)inames.h:$(GLSRC)gxcspace.h
-$(PSSRC)inames.h:$(GLSRC)gxfrac.h
$(PSSRC)inames.h:$(GLSRC)gsdcolor.h
+$(PSSRC)inames.h:$(GLSRC)gxfrac.h
$(PSSRC)inames.h:$(GLSRC)gscms.h
-$(PSSRC)inames.h:$(GLSRC)gsdevice.h
$(PSSRC)inames.h:$(GLSRC)gscspace.h
+$(PSSRC)inames.h:$(GLSRC)gsdevice.h
$(PSSRC)inames.h:$(GLSRC)gxarith.h
-$(PSSRC)inames.h:$(GLSRC)gsrefct.h
-$(PSSRC)inames.h:$(GLSRC)gsiparam.h
$(PSSRC)inames.h:$(GLSRC)gxhttile.h
-$(PSSRC)inames.h:$(GLSRC)memento.h
-$(PSSRC)inames.h:$(GLSRC)gsparam.h
-$(PSSRC)inames.h:$(GLSRC)gsmatrix.h
+$(PSSRC)inames.h:$(GLSRC)gsiparam.h
$(PSSRC)inames.h:$(GLSRC)gxbitmap.h
+$(PSSRC)inames.h:$(GLSRC)gsmatrix.h
+$(PSSRC)inames.h:$(GLSRC)gsrefct.h
+$(PSSRC)inames.h:$(GLSRC)gsparam.h
+$(PSSRC)inames.h:$(GLSRC)gsccolor.h
$(PSSRC)inames.h:$(GLSRC)gsstruct.h
$(PSSRC)inames.h:$(GLSRC)gxsync.h
-$(PSSRC)inames.h:$(GLSRC)gscsel.h
$(PSSRC)inames.h:$(GLSRC)scommon.h
+$(PSSRC)inames.h:$(GLSRC)memento.h
+$(PSSRC)inames.h:$(GLSRC)gscsel.h
$(PSSRC)inames.h:$(GLSRC)gsbitmap.h
-$(PSSRC)inames.h:$(GLSRC)gsccolor.h
$(PSSRC)inames.h:$(GLSRC)gsstype.h
$(PSSRC)inames.h:$(GLSRC)gsmemory.h
$(PSSRC)inames.h:$(GLSRC)gpsync.h
$(PSSRC)inames.h:$(GLSRC)gslibctx.h
+$(PSSRC)inames.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inames.h:$(GLSRC)gsalloc.h
+$(PSSRC)inames.h:$(GLSRC)stdio_.h
$(PSSRC)inames.h:$(GLSRC)gxcindex.h
-$(PSSRC)inames.h:$(GLSRC)stdint_.h
$(PSSRC)inames.h:$(GLSRC)gsgstate.h
-$(PSSRC)inames.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)inames.h:$(GLSRC)stdio_.h
-$(PSSRC)inames.h:$(GLSRC)gstypes.h
+$(PSSRC)inames.h:$(GLSRC)stdint_.h
+$(PSSRC)inames.h:$(GLSRC)gssprintf.h
$(PSSRC)inames.h:$(GLSRC)std.h
+$(PSSRC)inames.h:$(GLSRC)gstypes.h
$(PSSRC)inames.h:$(GLSRC)stdpre.h
$(PSSRC)inames.h:$(GLGEN)arch.h
-$(PSSRC)inames.h:$(GLSRC)gssprintf.h
$(PSSRC)iname.h:$(PSSRC)inames.h
$(PSSRC)iname.h:$(PSSRC)imemory.h
$(PSSRC)iname.h:$(PSSRC)ivmspace.h
$(PSSRC)iname.h:$(PSSRC)iref.h
-$(PSSRC)iname.h:$(GLSRC)gxalloc.h
$(PSSRC)iname.h:$(GLSRC)gsgc.h
+$(PSSRC)iname.h:$(GLSRC)gxalloc.h
$(PSSRC)iname.h:$(GLSRC)gxobj.h
$(PSSRC)iname.h:$(GLSRC)gsnamecl.h
$(PSSRC)iname.h:$(GLSRC)gxcspace.h
-$(PSSRC)iname.h:$(GLSRC)gxfrac.h
$(PSSRC)iname.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iname.h:$(GLSRC)gxfrac.h
$(PSSRC)iname.h:$(GLSRC)gscms.h
-$(PSSRC)iname.h:$(GLSRC)gsdevice.h
$(PSSRC)iname.h:$(GLSRC)gscspace.h
+$(PSSRC)iname.h:$(GLSRC)gsdevice.h
$(PSSRC)iname.h:$(GLSRC)gxarith.h
-$(PSSRC)iname.h:$(GLSRC)gsrefct.h
-$(PSSRC)iname.h:$(GLSRC)gsiparam.h
$(PSSRC)iname.h:$(GLSRC)gxhttile.h
-$(PSSRC)iname.h:$(GLSRC)memento.h
-$(PSSRC)iname.h:$(GLSRC)gsparam.h
-$(PSSRC)iname.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iname.h:$(GLSRC)gsiparam.h
$(PSSRC)iname.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iname.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iname.h:$(GLSRC)gsrefct.h
+$(PSSRC)iname.h:$(GLSRC)gsparam.h
+$(PSSRC)iname.h:$(GLSRC)gsccolor.h
$(PSSRC)iname.h:$(GLSRC)gsstruct.h
$(PSSRC)iname.h:$(GLSRC)gxsync.h
-$(PSSRC)iname.h:$(GLSRC)gscsel.h
$(PSSRC)iname.h:$(GLSRC)scommon.h
+$(PSSRC)iname.h:$(GLSRC)memento.h
+$(PSSRC)iname.h:$(GLSRC)gscsel.h
$(PSSRC)iname.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iname.h:$(GLSRC)gsccolor.h
$(PSSRC)iname.h:$(GLSRC)gsstype.h
$(PSSRC)iname.h:$(GLSRC)gsmemory.h
$(PSSRC)iname.h:$(GLSRC)gpsync.h
$(PSSRC)iname.h:$(GLSRC)gslibctx.h
+$(PSSRC)iname.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iname.h:$(GLSRC)gsalloc.h
+$(PSSRC)iname.h:$(GLSRC)stdio_.h
$(PSSRC)iname.h:$(GLSRC)gxcindex.h
-$(PSSRC)iname.h:$(GLSRC)stdint_.h
$(PSSRC)iname.h:$(GLSRC)gsgstate.h
-$(PSSRC)iname.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iname.h:$(GLSRC)stdio_.h
-$(PSSRC)iname.h:$(GLSRC)gstypes.h
+$(PSSRC)iname.h:$(GLSRC)stdint_.h
+$(PSSRC)iname.h:$(GLSRC)gssprintf.h
$(PSSRC)iname.h:$(GLSRC)std.h
+$(PSSRC)iname.h:$(GLSRC)gstypes.h
$(PSSRC)iname.h:$(GLSRC)stdpre.h
$(PSSRC)iname.h:$(GLGEN)arch.h
-$(PSSRC)iname.h:$(GLSRC)gssprintf.h
$(PSSRC)inamestr.h:$(PSSRC)inameidx.h
$(PSSRC)inamestr.h:$(GLSRC)stdpre.h
$(PSSRC)iref.h:$(GLSRC)gxalloc.h
$(PSSRC)iref.h:$(GLSRC)gxobj.h
$(PSSRC)iref.h:$(GLSRC)gsnamecl.h
$(PSSRC)iref.h:$(GLSRC)gxcspace.h
-$(PSSRC)iref.h:$(GLSRC)gxfrac.h
$(PSSRC)iref.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iref.h:$(GLSRC)gxfrac.h
$(PSSRC)iref.h:$(GLSRC)gscms.h
-$(PSSRC)iref.h:$(GLSRC)gsdevice.h
$(PSSRC)iref.h:$(GLSRC)gscspace.h
+$(PSSRC)iref.h:$(GLSRC)gsdevice.h
$(PSSRC)iref.h:$(GLSRC)gxarith.h
-$(PSSRC)iref.h:$(GLSRC)gsrefct.h
-$(PSSRC)iref.h:$(GLSRC)gsiparam.h
$(PSSRC)iref.h:$(GLSRC)gxhttile.h
-$(PSSRC)iref.h:$(GLSRC)memento.h
-$(PSSRC)iref.h:$(GLSRC)gsparam.h
-$(PSSRC)iref.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iref.h:$(GLSRC)gsiparam.h
$(PSSRC)iref.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iref.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iref.h:$(GLSRC)gsrefct.h
+$(PSSRC)iref.h:$(GLSRC)gsparam.h
+$(PSSRC)iref.h:$(GLSRC)gsccolor.h
$(PSSRC)iref.h:$(GLSRC)gsstruct.h
$(PSSRC)iref.h:$(GLSRC)gxsync.h
-$(PSSRC)iref.h:$(GLSRC)gscsel.h
$(PSSRC)iref.h:$(GLSRC)scommon.h
+$(PSSRC)iref.h:$(GLSRC)memento.h
+$(PSSRC)iref.h:$(GLSRC)gscsel.h
$(PSSRC)iref.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iref.h:$(GLSRC)gsccolor.h
$(PSSRC)iref.h:$(GLSRC)gsstype.h
$(PSSRC)iref.h:$(GLSRC)gsmemory.h
$(PSSRC)iref.h:$(GLSRC)gpsync.h
$(PSSRC)iref.h:$(GLSRC)gslibctx.h
+$(PSSRC)iref.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iref.h:$(GLSRC)gsalloc.h
+$(PSSRC)iref.h:$(GLSRC)stdio_.h
$(PSSRC)iref.h:$(GLSRC)gxcindex.h
-$(PSSRC)iref.h:$(GLSRC)stdint_.h
$(PSSRC)iref.h:$(GLSRC)gsgstate.h
-$(PSSRC)iref.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iref.h:$(GLSRC)stdio_.h
-$(PSSRC)iref.h:$(GLSRC)gstypes.h
+$(PSSRC)iref.h:$(GLSRC)stdint_.h
+$(PSSRC)iref.h:$(GLSRC)gssprintf.h
$(PSSRC)iref.h:$(GLSRC)std.h
+$(PSSRC)iref.h:$(GLSRC)gstypes.h
$(PSSRC)iref.h:$(GLSRC)stdpre.h
$(PSSRC)iref.h:$(GLGEN)arch.h
-$(PSSRC)iref.h:$(GLSRC)gssprintf.h
$(PSSRC)isave.h:$(PSSRC)idosave.h
$(PSSRC)isave.h:$(PSSRC)imemory.h
$(PSSRC)isave.h:$(PSSRC)ivmspace.h
$(PSSRC)isave.h:$(PSSRC)iref.h
-$(PSSRC)isave.h:$(GLSRC)gxalloc.h
$(PSSRC)isave.h:$(GLSRC)gsgc.h
+$(PSSRC)isave.h:$(GLSRC)gxalloc.h
$(PSSRC)isave.h:$(GLSRC)gxobj.h
$(PSSRC)isave.h:$(GLSRC)gsnamecl.h
$(PSSRC)isave.h:$(GLSRC)gxcspace.h
-$(PSSRC)isave.h:$(GLSRC)gxfrac.h
$(PSSRC)isave.h:$(GLSRC)gsdcolor.h
+$(PSSRC)isave.h:$(GLSRC)gxfrac.h
$(PSSRC)isave.h:$(GLSRC)gscms.h
-$(PSSRC)isave.h:$(GLSRC)gsdevice.h
$(PSSRC)isave.h:$(GLSRC)gscspace.h
+$(PSSRC)isave.h:$(GLSRC)gsdevice.h
$(PSSRC)isave.h:$(GLSRC)gxarith.h
-$(PSSRC)isave.h:$(GLSRC)gsrefct.h
-$(PSSRC)isave.h:$(GLSRC)gsiparam.h
$(PSSRC)isave.h:$(GLSRC)gxhttile.h
-$(PSSRC)isave.h:$(GLSRC)memento.h
-$(PSSRC)isave.h:$(GLSRC)gsparam.h
-$(PSSRC)isave.h:$(GLSRC)gsmatrix.h
+$(PSSRC)isave.h:$(GLSRC)gsiparam.h
$(PSSRC)isave.h:$(GLSRC)gxbitmap.h
+$(PSSRC)isave.h:$(GLSRC)gsmatrix.h
+$(PSSRC)isave.h:$(GLSRC)gsrefct.h
+$(PSSRC)isave.h:$(GLSRC)gsparam.h
+$(PSSRC)isave.h:$(GLSRC)gsccolor.h
$(PSSRC)isave.h:$(GLSRC)gsstruct.h
$(PSSRC)isave.h:$(GLSRC)gxsync.h
-$(PSSRC)isave.h:$(GLSRC)gscsel.h
$(PSSRC)isave.h:$(GLSRC)scommon.h
+$(PSSRC)isave.h:$(GLSRC)memento.h
+$(PSSRC)isave.h:$(GLSRC)gscsel.h
$(PSSRC)isave.h:$(GLSRC)gsbitmap.h
-$(PSSRC)isave.h:$(GLSRC)gsccolor.h
$(PSSRC)isave.h:$(GLSRC)gsstype.h
$(PSSRC)isave.h:$(GLSRC)gsmemory.h
$(PSSRC)isave.h:$(GLSRC)gpsync.h
$(PSSRC)isave.h:$(GLSRC)gslibctx.h
+$(PSSRC)isave.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isave.h:$(GLSRC)gsalloc.h
+$(PSSRC)isave.h:$(GLSRC)stdio_.h
$(PSSRC)isave.h:$(GLSRC)gxcindex.h
-$(PSSRC)isave.h:$(GLSRC)stdint_.h
$(PSSRC)isave.h:$(GLSRC)gsgstate.h
-$(PSSRC)isave.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)isave.h:$(GLSRC)stdio_.h
-$(PSSRC)isave.h:$(GLSRC)gstypes.h
+$(PSSRC)isave.h:$(GLSRC)stdint_.h
+$(PSSRC)isave.h:$(GLSRC)gssprintf.h
$(PSSRC)isave.h:$(GLSRC)std.h
+$(PSSRC)isave.h:$(GLSRC)gstypes.h
$(PSSRC)isave.h:$(GLSRC)stdpre.h
$(PSSRC)isave.h:$(GLGEN)arch.h
-$(PSSRC)isave.h:$(GLSRC)gssprintf.h
-$(PSSRC)isstate.h:$(GLSRC)gxalloc.h
$(PSSRC)isstate.h:$(GLSRC)gsgc.h
+$(PSSRC)isstate.h:$(GLSRC)gxalloc.h
$(PSSRC)isstate.h:$(GLSRC)gxobj.h
$(PSSRC)isstate.h:$(GLSRC)gxbitmap.h
$(PSSRC)isstate.h:$(GLSRC)gsstruct.h
@@ -2322,175 +2323,175 @@ $(PSSRC)isstate.h:$(GLSRC)gsbitmap.h
$(PSSRC)isstate.h:$(GLSRC)gsstype.h
$(PSSRC)isstate.h:$(GLSRC)gsmemory.h
$(PSSRC)isstate.h:$(GLSRC)gslibctx.h
-$(PSSRC)isstate.h:$(GLSRC)gsalloc.h
-$(PSSRC)isstate.h:$(GLSRC)stdint_.h
$(PSSRC)isstate.h:$(GLSRC)gs_dll_call.h
+$(PSSRC)isstate.h:$(GLSRC)gsalloc.h
$(PSSRC)isstate.h:$(GLSRC)stdio_.h
-$(PSSRC)isstate.h:$(GLSRC)gstypes.h
+$(PSSRC)isstate.h:$(GLSRC)stdint_.h
+$(PSSRC)isstate.h:$(GLSRC)gssprintf.h
$(PSSRC)isstate.h:$(GLSRC)std.h
+$(PSSRC)isstate.h:$(GLSRC)gstypes.h
$(PSSRC)isstate.h:$(GLSRC)stdpre.h
$(PSSRC)isstate.h:$(GLGEN)arch.h
-$(PSSRC)isstate.h:$(GLSRC)gssprintf.h
$(PSSRC)istruct.h:$(PSSRC)iref.h
$(PSSRC)istruct.h:$(GLSRC)gxalloc.h
$(PSSRC)istruct.h:$(GLSRC)gxobj.h
$(PSSRC)istruct.h:$(GLSRC)gsnamecl.h
$(PSSRC)istruct.h:$(GLSRC)gxcspace.h
-$(PSSRC)istruct.h:$(GLSRC)gxfrac.h
$(PSSRC)istruct.h:$(GLSRC)gsdcolor.h
+$(PSSRC)istruct.h:$(GLSRC)gxfrac.h
$(PSSRC)istruct.h:$(GLSRC)gscms.h
-$(PSSRC)istruct.h:$(GLSRC)gsdevice.h
$(PSSRC)istruct.h:$(GLSRC)gscspace.h
+$(PSSRC)istruct.h:$(GLSRC)gsdevice.h
$(PSSRC)istruct.h:$(GLSRC)gxarith.h
-$(PSSRC)istruct.h:$(GLSRC)gsrefct.h
-$(PSSRC)istruct.h:$(GLSRC)gsiparam.h
$(PSSRC)istruct.h:$(GLSRC)gxhttile.h
-$(PSSRC)istruct.h:$(GLSRC)memento.h
-$(PSSRC)istruct.h:$(GLSRC)gsparam.h
-$(PSSRC)istruct.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istruct.h:$(GLSRC)gsiparam.h
$(PSSRC)istruct.h:$(GLSRC)gxbitmap.h
+$(PSSRC)istruct.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)istruct.h:$(GLSRC)gsparam.h
+$(PSSRC)istruct.h:$(GLSRC)gsccolor.h
$(PSSRC)istruct.h:$(GLSRC)gsstruct.h
$(PSSRC)istruct.h:$(GLSRC)gxsync.h
-$(PSSRC)istruct.h:$(GLSRC)gscsel.h
$(PSSRC)istruct.h:$(GLSRC)scommon.h
+$(PSSRC)istruct.h:$(GLSRC)memento.h
+$(PSSRC)istruct.h:$(GLSRC)gscsel.h
$(PSSRC)istruct.h:$(GLSRC)gsbitmap.h
-$(PSSRC)istruct.h:$(GLSRC)gsccolor.h
$(PSSRC)istruct.h:$(GLSRC)gsstype.h
$(PSSRC)istruct.h:$(GLSRC)gsmemory.h
$(PSSRC)istruct.h:$(GLSRC)gpsync.h
$(PSSRC)istruct.h:$(GLSRC)gslibctx.h
+$(PSSRC)istruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istruct.h:$(GLSRC)gsalloc.h
+$(PSSRC)istruct.h:$(GLSRC)stdio_.h
$(PSSRC)istruct.h:$(GLSRC)gxcindex.h
-$(PSSRC)istruct.h:$(GLSRC)stdint_.h
$(PSSRC)istruct.h:$(GLSRC)gsgstate.h
-$(PSSRC)istruct.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)istruct.h:$(GLSRC)stdio_.h
-$(PSSRC)istruct.h:$(GLSRC)gstypes.h
+$(PSSRC)istruct.h:$(GLSRC)stdint_.h
+$(PSSRC)istruct.h:$(GLSRC)gssprintf.h
$(PSSRC)istruct.h:$(GLSRC)std.h
+$(PSSRC)istruct.h:$(GLSRC)gstypes.h
$(PSSRC)istruct.h:$(GLSRC)stdpre.h
$(PSSRC)istruct.h:$(GLGEN)arch.h
-$(PSSRC)istruct.h:$(GLSRC)gssprintf.h
$(PSSRC)iutil.h:$(PSSRC)imemory.h
$(PSSRC)iutil.h:$(PSSRC)ivmspace.h
$(PSSRC)iutil.h:$(PSSRC)iref.h
-$(PSSRC)iutil.h:$(GLSRC)gxalloc.h
$(PSSRC)iutil.h:$(GLSRC)gsgc.h
+$(PSSRC)iutil.h:$(GLSRC)gxalloc.h
$(PSSRC)iutil.h:$(GLSRC)gxobj.h
$(PSSRC)iutil.h:$(GLSRC)gsnamecl.h
$(PSSRC)iutil.h:$(GLSRC)gxcspace.h
-$(PSSRC)iutil.h:$(GLSRC)gxfrac.h
$(PSSRC)iutil.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iutil.h:$(GLSRC)gxfrac.h
$(PSSRC)iutil.h:$(GLSRC)gscms.h
-$(PSSRC)iutil.h:$(GLSRC)gsdevice.h
$(PSSRC)iutil.h:$(GLSRC)gscspace.h
+$(PSSRC)iutil.h:$(GLSRC)gsdevice.h
$(PSSRC)iutil.h:$(GLSRC)gxarith.h
-$(PSSRC)iutil.h:$(GLSRC)gsrefct.h
-$(PSSRC)iutil.h:$(GLSRC)gsiparam.h
$(PSSRC)iutil.h:$(GLSRC)gxhttile.h
-$(PSSRC)iutil.h:$(GLSRC)memento.h
-$(PSSRC)iutil.h:$(GLSRC)gsparam.h
-$(PSSRC)iutil.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iutil.h:$(GLSRC)gsiparam.h
$(PSSRC)iutil.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iutil.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iutil.h:$(GLSRC)gsrefct.h
+$(PSSRC)iutil.h:$(GLSRC)gsparam.h
+$(PSSRC)iutil.h:$(GLSRC)gsccolor.h
$(PSSRC)iutil.h:$(GLSRC)gsstruct.h
$(PSSRC)iutil.h:$(GLSRC)gxsync.h
-$(PSSRC)iutil.h:$(GLSRC)gscsel.h
$(PSSRC)iutil.h:$(GLSRC)scommon.h
+$(PSSRC)iutil.h:$(GLSRC)memento.h
+$(PSSRC)iutil.h:$(GLSRC)gscsel.h
$(PSSRC)iutil.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iutil.h:$(GLSRC)gsccolor.h
$(PSSRC)iutil.h:$(GLSRC)gsstype.h
$(PSSRC)iutil.h:$(GLSRC)gsmemory.h
$(PSSRC)iutil.h:$(GLSRC)gpsync.h
$(PSSRC)iutil.h:$(GLSRC)gslibctx.h
+$(PSSRC)iutil.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil.h:$(GLSRC)gsalloc.h
+$(PSSRC)iutil.h:$(GLSRC)stdio_.h
$(PSSRC)iutil.h:$(GLSRC)gxcindex.h
-$(PSSRC)iutil.h:$(GLSRC)stdint_.h
$(PSSRC)iutil.h:$(GLSRC)gsgstate.h
-$(PSSRC)iutil.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iutil.h:$(GLSRC)stdio_.h
-$(PSSRC)iutil.h:$(GLSRC)gstypes.h
+$(PSSRC)iutil.h:$(GLSRC)stdint_.h
+$(PSSRC)iutil.h:$(GLSRC)gssprintf.h
$(PSSRC)iutil.h:$(GLSRC)std.h
+$(PSSRC)iutil.h:$(GLSRC)gstypes.h
$(PSSRC)iutil.h:$(GLSRC)stdpre.h
$(PSSRC)iutil.h:$(GLGEN)arch.h
-$(PSSRC)iutil.h:$(GLSRC)gssprintf.h
$(PSSRC)ivmspace.h:$(PSSRC)iref.h
-$(PSSRC)ivmspace.h:$(GLSRC)gxalloc.h
$(PSSRC)ivmspace.h:$(GLSRC)gsgc.h
+$(PSSRC)ivmspace.h:$(GLSRC)gxalloc.h
$(PSSRC)ivmspace.h:$(GLSRC)gxobj.h
$(PSSRC)ivmspace.h:$(GLSRC)gsnamecl.h
$(PSSRC)ivmspace.h:$(GLSRC)gxcspace.h
-$(PSSRC)ivmspace.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmspace.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ivmspace.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmspace.h:$(GLSRC)gscms.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsdevice.h
$(PSSRC)ivmspace.h:$(GLSRC)gscspace.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsdevice.h
$(PSSRC)ivmspace.h:$(GLSRC)gxarith.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsrefct.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsiparam.h
$(PSSRC)ivmspace.h:$(GLSRC)gxhttile.h
-$(PSSRC)ivmspace.h:$(GLSRC)memento.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsparam.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsiparam.h
$(PSSRC)ivmspace.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsparam.h
+$(PSSRC)ivmspace.h:$(GLSRC)gsccolor.h
$(PSSRC)ivmspace.h:$(GLSRC)gsstruct.h
$(PSSRC)ivmspace.h:$(GLSRC)gxsync.h
-$(PSSRC)ivmspace.h:$(GLSRC)gscsel.h
$(PSSRC)ivmspace.h:$(GLSRC)scommon.h
+$(PSSRC)ivmspace.h:$(GLSRC)memento.h
+$(PSSRC)ivmspace.h:$(GLSRC)gscsel.h
$(PSSRC)ivmspace.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ivmspace.h:$(GLSRC)gsccolor.h
$(PSSRC)ivmspace.h:$(GLSRC)gsstype.h
$(PSSRC)ivmspace.h:$(GLSRC)gsmemory.h
$(PSSRC)ivmspace.h:$(GLSRC)gpsync.h
$(PSSRC)ivmspace.h:$(GLSRC)gslibctx.h
+$(PSSRC)ivmspace.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmspace.h:$(GLSRC)gsalloc.h
+$(PSSRC)ivmspace.h:$(GLSRC)stdio_.h
$(PSSRC)ivmspace.h:$(GLSRC)gxcindex.h
-$(PSSRC)ivmspace.h:$(GLSRC)stdint_.h
$(PSSRC)ivmspace.h:$(GLSRC)gsgstate.h
-$(PSSRC)ivmspace.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ivmspace.h:$(GLSRC)stdio_.h
-$(PSSRC)ivmspace.h:$(GLSRC)gstypes.h
+$(PSSRC)ivmspace.h:$(GLSRC)stdint_.h
+$(PSSRC)ivmspace.h:$(GLSRC)gssprintf.h
$(PSSRC)ivmspace.h:$(GLSRC)std.h
+$(PSSRC)ivmspace.h:$(GLSRC)gstypes.h
$(PSSRC)ivmspace.h:$(GLSRC)stdpre.h
$(PSSRC)ivmspace.h:$(GLGEN)arch.h
-$(PSSRC)ivmspace.h:$(GLSRC)gssprintf.h
$(PSSRC)opdef.h:$(PSSRC)iref.h
$(PSSRC)opdef.h:$(GLSRC)gxalloc.h
$(PSSRC)opdef.h:$(GLSRC)gxobj.h
$(PSSRC)opdef.h:$(GLSRC)gsnamecl.h
$(PSSRC)opdef.h:$(GLSRC)gxcspace.h
-$(PSSRC)opdef.h:$(GLSRC)gxfrac.h
$(PSSRC)opdef.h:$(GLSRC)gsdcolor.h
+$(PSSRC)opdef.h:$(GLSRC)gxfrac.h
$(PSSRC)opdef.h:$(GLSRC)gscms.h
-$(PSSRC)opdef.h:$(GLSRC)gsdevice.h
$(PSSRC)opdef.h:$(GLSRC)gscspace.h
+$(PSSRC)opdef.h:$(GLSRC)gsdevice.h
$(PSSRC)opdef.h:$(GLSRC)gxarith.h
-$(PSSRC)opdef.h:$(GLSRC)gsrefct.h
-$(PSSRC)opdef.h:$(GLSRC)gsiparam.h
$(PSSRC)opdef.h:$(GLSRC)gxhttile.h
-$(PSSRC)opdef.h:$(GLSRC)memento.h
-$(PSSRC)opdef.h:$(GLSRC)gsparam.h
-$(PSSRC)opdef.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opdef.h:$(GLSRC)gsiparam.h
$(PSSRC)opdef.h:$(GLSRC)gxbitmap.h
+$(PSSRC)opdef.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opdef.h:$(GLSRC)gsrefct.h
+$(PSSRC)opdef.h:$(GLSRC)gsparam.h
+$(PSSRC)opdef.h:$(GLSRC)gsccolor.h
$(PSSRC)opdef.h:$(GLSRC)gsstruct.h
$(PSSRC)opdef.h:$(GLSRC)gxsync.h
-$(PSSRC)opdef.h:$(GLSRC)gscsel.h
$(PSSRC)opdef.h:$(GLSRC)scommon.h
+$(PSSRC)opdef.h:$(GLSRC)memento.h
+$(PSSRC)opdef.h:$(GLSRC)gscsel.h
$(PSSRC)opdef.h:$(GLSRC)gsbitmap.h
-$(PSSRC)opdef.h:$(GLSRC)gsccolor.h
$(PSSRC)opdef.h:$(GLSRC)gsstype.h
$(PSSRC)opdef.h:$(GLSRC)gsmemory.h
$(PSSRC)opdef.h:$(GLSRC)gpsync.h
$(PSSRC)opdef.h:$(GLSRC)gslibctx.h
+$(PSSRC)opdef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opdef.h:$(GLSRC)gsalloc.h
+$(PSSRC)opdef.h:$(GLSRC)stdio_.h
$(PSSRC)opdef.h:$(GLSRC)gxcindex.h
-$(PSSRC)opdef.h:$(GLSRC)stdint_.h
$(PSSRC)opdef.h:$(GLSRC)gsgstate.h
-$(PSSRC)opdef.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)opdef.h:$(GLSRC)stdio_.h
-$(PSSRC)opdef.h:$(GLSRC)gstypes.h
+$(PSSRC)opdef.h:$(GLSRC)stdint_.h
+$(PSSRC)opdef.h:$(GLSRC)gssprintf.h
$(PSSRC)opdef.h:$(GLSRC)std.h
+$(PSSRC)opdef.h:$(GLSRC)gstypes.h
$(PSSRC)opdef.h:$(GLSRC)stdpre.h
$(PSSRC)opdef.h:$(GLGEN)arch.h
-$(PSSRC)opdef.h:$(GLSRC)gssprintf.h
$(PSSRC)ghost.h:$(GLSRC)gx.h
$(PSSRC)ghost.h:$(GLSRC)gdebug.h
$(PSSRC)ghost.h:$(PSSRC)iref.h
@@ -2498,1047 +2499,1048 @@ $(PSSRC)ghost.h:$(GLSRC)gxalloc.h
$(PSSRC)ghost.h:$(GLSRC)gxobj.h
$(PSSRC)ghost.h:$(GLSRC)gsnamecl.h
$(PSSRC)ghost.h:$(GLSRC)gxcspace.h
-$(PSSRC)ghost.h:$(GLSRC)gxfrac.h
$(PSSRC)ghost.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ghost.h:$(GLSRC)gxfrac.h
$(PSSRC)ghost.h:$(GLSRC)gscms.h
-$(PSSRC)ghost.h:$(GLSRC)gsdevice.h
$(PSSRC)ghost.h:$(GLSRC)gscspace.h
+$(PSSRC)ghost.h:$(GLSRC)gsdevice.h
$(PSSRC)ghost.h:$(GLSRC)gxarith.h
-$(PSSRC)ghost.h:$(GLSRC)gsrefct.h
-$(PSSRC)ghost.h:$(GLSRC)gsiparam.h
$(PSSRC)ghost.h:$(GLSRC)gxhttile.h
+$(PSSRC)ghost.h:$(GLSRC)gsiparam.h
$(PSSRC)ghost.h:$(GLSRC)gsio.h
-$(PSSRC)ghost.h:$(GLSRC)memento.h
-$(PSSRC)ghost.h:$(GLSRC)gsparam.h
-$(PSSRC)ghost.h:$(GLSRC)gsmatrix.h
$(PSSRC)ghost.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ghost.h:$(GLSRC)gdbflags.h
+$(PSSRC)ghost.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ghost.h:$(GLSRC)gsrefct.h
+$(PSSRC)ghost.h:$(GLSRC)gsparam.h
+$(PSSRC)ghost.h:$(GLSRC)gsccolor.h
$(PSSRC)ghost.h:$(GLSRC)gsstruct.h
-$(PSSRC)ghost.h:$(GLSRC)gserrors.h
$(PSSRC)ghost.h:$(GLSRC)gxsync.h
-$(PSSRC)ghost.h:$(GLSRC)gscsel.h
+$(PSSRC)ghost.h:$(GLSRC)gdbflags.h
+$(PSSRC)ghost.h:$(GLSRC)gserrors.h
$(PSSRC)ghost.h:$(GLSRC)scommon.h
+$(PSSRC)ghost.h:$(GLSRC)memento.h
+$(PSSRC)ghost.h:$(GLSRC)gscsel.h
$(PSSRC)ghost.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ghost.h:$(GLSRC)gsccolor.h
$(PSSRC)ghost.h:$(GLSRC)gsstype.h
$(PSSRC)ghost.h:$(GLSRC)gsmemory.h
$(PSSRC)ghost.h:$(GLSRC)gpsync.h
$(PSSRC)ghost.h:$(GLSRC)gslibctx.h
+$(PSSRC)ghost.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ghost.h:$(GLSRC)gsalloc.h
+$(PSSRC)ghost.h:$(GLSRC)stdio_.h
$(PSSRC)ghost.h:$(GLSRC)gxcindex.h
-$(PSSRC)ghost.h:$(GLSRC)stdint_.h
$(PSSRC)ghost.h:$(GLSRC)gsgstate.h
-$(PSSRC)ghost.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ghost.h:$(GLSRC)stdio_.h
-$(PSSRC)ghost.h:$(GLSRC)gstypes.h
+$(PSSRC)ghost.h:$(GLSRC)stdint_.h
+$(PSSRC)ghost.h:$(GLSRC)gssprintf.h
$(PSSRC)ghost.h:$(GLSRC)std.h
+$(PSSRC)ghost.h:$(GLSRC)gstypes.h
$(PSSRC)ghost.h:$(GLSRC)stdpre.h
$(PSSRC)ghost.h:$(GLGEN)arch.h
-$(PSSRC)ghost.h:$(GLSRC)gssprintf.h
$(PSSRC)igc.h:$(PSSRC)istruct.h
$(PSSRC)igc.h:$(PSSRC)inames.h
$(PSSRC)igc.h:$(PSSRC)imemory.h
$(PSSRC)igc.h:$(PSSRC)ivmspace.h
$(PSSRC)igc.h:$(PSSRC)iref.h
-$(PSSRC)igc.h:$(GLSRC)gxalloc.h
$(PSSRC)igc.h:$(GLSRC)gsgc.h
+$(PSSRC)igc.h:$(GLSRC)gxalloc.h
$(PSSRC)igc.h:$(GLSRC)gxobj.h
$(PSSRC)igc.h:$(GLSRC)gsnamecl.h
$(PSSRC)igc.h:$(GLSRC)gxcspace.h
-$(PSSRC)igc.h:$(GLSRC)gxfrac.h
$(PSSRC)igc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)igc.h:$(GLSRC)gxfrac.h
$(PSSRC)igc.h:$(GLSRC)gscms.h
-$(PSSRC)igc.h:$(GLSRC)gsdevice.h
$(PSSRC)igc.h:$(GLSRC)gscspace.h
+$(PSSRC)igc.h:$(GLSRC)gsdevice.h
$(PSSRC)igc.h:$(GLSRC)gxarith.h
-$(PSSRC)igc.h:$(GLSRC)gsrefct.h
-$(PSSRC)igc.h:$(GLSRC)gsiparam.h
$(PSSRC)igc.h:$(GLSRC)gxhttile.h
-$(PSSRC)igc.h:$(GLSRC)memento.h
-$(PSSRC)igc.h:$(GLSRC)gsparam.h
-$(PSSRC)igc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)igc.h:$(GLSRC)gsiparam.h
$(PSSRC)igc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)igc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)igc.h:$(GLSRC)gsrefct.h
+$(PSSRC)igc.h:$(GLSRC)gsparam.h
+$(PSSRC)igc.h:$(GLSRC)gsccolor.h
$(PSSRC)igc.h:$(GLSRC)gsstruct.h
$(PSSRC)igc.h:$(GLSRC)gxsync.h
-$(PSSRC)igc.h:$(GLSRC)gscsel.h
$(PSSRC)igc.h:$(GLSRC)scommon.h
+$(PSSRC)igc.h:$(GLSRC)memento.h
+$(PSSRC)igc.h:$(GLSRC)gscsel.h
$(PSSRC)igc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)igc.h:$(GLSRC)gsccolor.h
$(PSSRC)igc.h:$(GLSRC)gsstype.h
$(PSSRC)igc.h:$(GLSRC)gsmemory.h
$(PSSRC)igc.h:$(GLSRC)gpsync.h
$(PSSRC)igc.h:$(GLSRC)gslibctx.h
+$(PSSRC)igc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igc.h:$(GLSRC)gsalloc.h
+$(PSSRC)igc.h:$(GLSRC)stdio_.h
$(PSSRC)igc.h:$(GLSRC)gxcindex.h
-$(PSSRC)igc.h:$(GLSRC)stdint_.h
$(PSSRC)igc.h:$(GLSRC)gsgstate.h
-$(PSSRC)igc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)igc.h:$(GLSRC)stdio_.h
-$(PSSRC)igc.h:$(GLSRC)gstypes.h
+$(PSSRC)igc.h:$(GLSRC)stdint_.h
+$(PSSRC)igc.h:$(GLSRC)gssprintf.h
$(PSSRC)igc.h:$(GLSRC)std.h
+$(PSSRC)igc.h:$(GLSRC)gstypes.h
$(PSSRC)igc.h:$(GLSRC)stdpre.h
$(PSSRC)igc.h:$(GLGEN)arch.h
-$(PSSRC)igc.h:$(GLSRC)gssprintf.h
$(PSSRC)imemory.h:$(PSSRC)ivmspace.h
$(PSSRC)imemory.h:$(PSSRC)iref.h
-$(PSSRC)imemory.h:$(GLSRC)gxalloc.h
$(PSSRC)imemory.h:$(GLSRC)gsgc.h
+$(PSSRC)imemory.h:$(GLSRC)gxalloc.h
$(PSSRC)imemory.h:$(GLSRC)gxobj.h
$(PSSRC)imemory.h:$(GLSRC)gsnamecl.h
$(PSSRC)imemory.h:$(GLSRC)gxcspace.h
-$(PSSRC)imemory.h:$(GLSRC)gxfrac.h
$(PSSRC)imemory.h:$(GLSRC)gsdcolor.h
+$(PSSRC)imemory.h:$(GLSRC)gxfrac.h
$(PSSRC)imemory.h:$(GLSRC)gscms.h
-$(PSSRC)imemory.h:$(GLSRC)gsdevice.h
$(PSSRC)imemory.h:$(GLSRC)gscspace.h
+$(PSSRC)imemory.h:$(GLSRC)gsdevice.h
$(PSSRC)imemory.h:$(GLSRC)gxarith.h
-$(PSSRC)imemory.h:$(GLSRC)gsrefct.h
-$(PSSRC)imemory.h:$(GLSRC)gsiparam.h
$(PSSRC)imemory.h:$(GLSRC)gxhttile.h
-$(PSSRC)imemory.h:$(GLSRC)memento.h
-$(PSSRC)imemory.h:$(GLSRC)gsparam.h
-$(PSSRC)imemory.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imemory.h:$(GLSRC)gsiparam.h
$(PSSRC)imemory.h:$(GLSRC)gxbitmap.h
+$(PSSRC)imemory.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imemory.h:$(GLSRC)gsrefct.h
+$(PSSRC)imemory.h:$(GLSRC)gsparam.h
+$(PSSRC)imemory.h:$(GLSRC)gsccolor.h
$(PSSRC)imemory.h:$(GLSRC)gsstruct.h
$(PSSRC)imemory.h:$(GLSRC)gxsync.h
-$(PSSRC)imemory.h:$(GLSRC)gscsel.h
$(PSSRC)imemory.h:$(GLSRC)scommon.h
+$(PSSRC)imemory.h:$(GLSRC)memento.h
+$(PSSRC)imemory.h:$(GLSRC)gscsel.h
$(PSSRC)imemory.h:$(GLSRC)gsbitmap.h
-$(PSSRC)imemory.h:$(GLSRC)gsccolor.h
$(PSSRC)imemory.h:$(GLSRC)gsstype.h
$(PSSRC)imemory.h:$(GLSRC)gsmemory.h
$(PSSRC)imemory.h:$(GLSRC)gpsync.h
$(PSSRC)imemory.h:$(GLSRC)gslibctx.h
+$(PSSRC)imemory.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imemory.h:$(GLSRC)gsalloc.h
+$(PSSRC)imemory.h:$(GLSRC)stdio_.h
$(PSSRC)imemory.h:$(GLSRC)gxcindex.h
-$(PSSRC)imemory.h:$(GLSRC)stdint_.h
$(PSSRC)imemory.h:$(GLSRC)gsgstate.h
-$(PSSRC)imemory.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)imemory.h:$(GLSRC)stdio_.h
-$(PSSRC)imemory.h:$(GLSRC)gstypes.h
+$(PSSRC)imemory.h:$(GLSRC)stdint_.h
+$(PSSRC)imemory.h:$(GLSRC)gssprintf.h
$(PSSRC)imemory.h:$(GLSRC)std.h
+$(PSSRC)imemory.h:$(GLSRC)gstypes.h
$(PSSRC)imemory.h:$(GLSRC)stdpre.h
$(PSSRC)imemory.h:$(GLGEN)arch.h
-$(PSSRC)imemory.h:$(GLSRC)gssprintf.h
$(PSSRC)ialloc.h:$(PSSRC)imemory.h
$(PSSRC)ialloc.h:$(PSSRC)ivmspace.h
$(PSSRC)ialloc.h:$(PSSRC)iref.h
-$(PSSRC)ialloc.h:$(GLSRC)gxalloc.h
$(PSSRC)ialloc.h:$(GLSRC)gsgc.h
+$(PSSRC)ialloc.h:$(GLSRC)gxalloc.h
$(PSSRC)ialloc.h:$(GLSRC)gxobj.h
$(PSSRC)ialloc.h:$(GLSRC)gsnamecl.h
$(PSSRC)ialloc.h:$(GLSRC)gxcspace.h
-$(PSSRC)ialloc.h:$(GLSRC)gxfrac.h
$(PSSRC)ialloc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ialloc.h:$(GLSRC)gxfrac.h
$(PSSRC)ialloc.h:$(GLSRC)gscms.h
-$(PSSRC)ialloc.h:$(GLSRC)gsdevice.h
$(PSSRC)ialloc.h:$(GLSRC)gscspace.h
+$(PSSRC)ialloc.h:$(GLSRC)gsdevice.h
$(PSSRC)ialloc.h:$(GLSRC)gxarith.h
-$(PSSRC)ialloc.h:$(GLSRC)gsrefct.h
-$(PSSRC)ialloc.h:$(GLSRC)gsiparam.h
$(PSSRC)ialloc.h:$(GLSRC)gxhttile.h
-$(PSSRC)ialloc.h:$(GLSRC)memento.h
-$(PSSRC)ialloc.h:$(GLSRC)gsparam.h
-$(PSSRC)ialloc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ialloc.h:$(GLSRC)gsiparam.h
$(PSSRC)ialloc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ialloc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ialloc.h:$(GLSRC)gsrefct.h
+$(PSSRC)ialloc.h:$(GLSRC)gsparam.h
+$(PSSRC)ialloc.h:$(GLSRC)gsccolor.h
$(PSSRC)ialloc.h:$(GLSRC)gsstruct.h
$(PSSRC)ialloc.h:$(GLSRC)gxsync.h
-$(PSSRC)ialloc.h:$(GLSRC)gscsel.h
$(PSSRC)ialloc.h:$(GLSRC)scommon.h
+$(PSSRC)ialloc.h:$(GLSRC)memento.h
+$(PSSRC)ialloc.h:$(GLSRC)gscsel.h
$(PSSRC)ialloc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ialloc.h:$(GLSRC)gsccolor.h
$(PSSRC)ialloc.h:$(GLSRC)gsstype.h
$(PSSRC)ialloc.h:$(GLSRC)gsmemory.h
$(PSSRC)ialloc.h:$(GLSRC)gpsync.h
$(PSSRC)ialloc.h:$(GLSRC)gslibctx.h
+$(PSSRC)ialloc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ialloc.h:$(GLSRC)gsalloc.h
+$(PSSRC)ialloc.h:$(GLSRC)stdio_.h
$(PSSRC)ialloc.h:$(GLSRC)gxcindex.h
-$(PSSRC)ialloc.h:$(GLSRC)stdint_.h
$(PSSRC)ialloc.h:$(GLSRC)gsgstate.h
-$(PSSRC)ialloc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ialloc.h:$(GLSRC)stdio_.h
-$(PSSRC)ialloc.h:$(GLSRC)gstypes.h
+$(PSSRC)ialloc.h:$(GLSRC)stdint_.h
+$(PSSRC)ialloc.h:$(GLSRC)gssprintf.h
$(PSSRC)ialloc.h:$(GLSRC)std.h
+$(PSSRC)ialloc.h:$(GLSRC)gstypes.h
$(PSSRC)ialloc.h:$(GLSRC)stdpre.h
$(PSSRC)ialloc.h:$(GLGEN)arch.h
-$(PSSRC)ialloc.h:$(GLSRC)gssprintf.h
$(PSSRC)iastruct.h:$(PSSRC)ialloc.h
$(PSSRC)iastruct.h:$(PSSRC)imemory.h
$(PSSRC)iastruct.h:$(PSSRC)ivmspace.h
$(PSSRC)iastruct.h:$(PSSRC)iref.h
-$(PSSRC)iastruct.h:$(GLSRC)gxalloc.h
$(PSSRC)iastruct.h:$(GLSRC)gsgc.h
+$(PSSRC)iastruct.h:$(GLSRC)gxalloc.h
$(PSSRC)iastruct.h:$(GLSRC)gxobj.h
$(PSSRC)iastruct.h:$(GLSRC)gsnamecl.h
$(PSSRC)iastruct.h:$(GLSRC)gxcspace.h
-$(PSSRC)iastruct.h:$(GLSRC)gxfrac.h
$(PSSRC)iastruct.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iastruct.h:$(GLSRC)gxfrac.h
$(PSSRC)iastruct.h:$(GLSRC)gscms.h
-$(PSSRC)iastruct.h:$(GLSRC)gsdevice.h
$(PSSRC)iastruct.h:$(GLSRC)gscspace.h
+$(PSSRC)iastruct.h:$(GLSRC)gsdevice.h
$(PSSRC)iastruct.h:$(GLSRC)gxarith.h
-$(PSSRC)iastruct.h:$(GLSRC)gsrefct.h
-$(PSSRC)iastruct.h:$(GLSRC)gsiparam.h
$(PSSRC)iastruct.h:$(GLSRC)gxhttile.h
-$(PSSRC)iastruct.h:$(GLSRC)memento.h
-$(PSSRC)iastruct.h:$(GLSRC)gsparam.h
-$(PSSRC)iastruct.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iastruct.h:$(GLSRC)gsiparam.h
$(PSSRC)iastruct.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iastruct.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iastruct.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastruct.h:$(GLSRC)gsparam.h
+$(PSSRC)iastruct.h:$(GLSRC)gsccolor.h
$(PSSRC)iastruct.h:$(GLSRC)gsstruct.h
$(PSSRC)iastruct.h:$(GLSRC)gxsync.h
-$(PSSRC)iastruct.h:$(GLSRC)gscsel.h
$(PSSRC)iastruct.h:$(GLSRC)scommon.h
+$(PSSRC)iastruct.h:$(GLSRC)memento.h
+$(PSSRC)iastruct.h:$(GLSRC)gscsel.h
$(PSSRC)iastruct.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iastruct.h:$(GLSRC)gsccolor.h
$(PSSRC)iastruct.h:$(GLSRC)gsstype.h
$(PSSRC)iastruct.h:$(GLSRC)gsmemory.h
$(PSSRC)iastruct.h:$(GLSRC)gpsync.h
$(PSSRC)iastruct.h:$(GLSRC)gslibctx.h
+$(PSSRC)iastruct.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastruct.h:$(GLSRC)gsalloc.h
+$(PSSRC)iastruct.h:$(GLSRC)stdio_.h
$(PSSRC)iastruct.h:$(GLSRC)gxcindex.h
-$(PSSRC)iastruct.h:$(GLSRC)stdint_.h
$(PSSRC)iastruct.h:$(GLSRC)gsgstate.h
-$(PSSRC)iastruct.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iastruct.h:$(GLSRC)stdio_.h
-$(PSSRC)iastruct.h:$(GLSRC)gstypes.h
+$(PSSRC)iastruct.h:$(GLSRC)stdint_.h
+$(PSSRC)iastruct.h:$(GLSRC)gssprintf.h
$(PSSRC)iastruct.h:$(GLSRC)std.h
+$(PSSRC)iastruct.h:$(GLSRC)gstypes.h
$(PSSRC)iastruct.h:$(GLSRC)stdpre.h
$(PSSRC)iastruct.h:$(GLGEN)arch.h
-$(PSSRC)iastruct.h:$(GLSRC)gssprintf.h
$(PSSRC)iastate.h:$(PSSRC)istruct.h
$(PSSRC)iastate.h:$(PSSRC)ialloc.h
$(PSSRC)iastate.h:$(PSSRC)imemory.h
$(PSSRC)iastate.h:$(PSSRC)ivmspace.h
$(PSSRC)iastate.h:$(PSSRC)iref.h
-$(PSSRC)iastate.h:$(GLSRC)gxalloc.h
$(PSSRC)iastate.h:$(GLSRC)gsgc.h
+$(PSSRC)iastate.h:$(GLSRC)gxalloc.h
$(PSSRC)iastate.h:$(GLSRC)gxobj.h
$(PSSRC)iastate.h:$(GLSRC)gsnamecl.h
$(PSSRC)iastate.h:$(GLSRC)gxcspace.h
-$(PSSRC)iastate.h:$(GLSRC)gxfrac.h
$(PSSRC)iastate.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iastate.h:$(GLSRC)gxfrac.h
$(PSSRC)iastate.h:$(GLSRC)gscms.h
-$(PSSRC)iastate.h:$(GLSRC)gsdevice.h
$(PSSRC)iastate.h:$(GLSRC)gscspace.h
+$(PSSRC)iastate.h:$(GLSRC)gsdevice.h
$(PSSRC)iastate.h:$(GLSRC)gxarith.h
-$(PSSRC)iastate.h:$(GLSRC)gsrefct.h
-$(PSSRC)iastate.h:$(GLSRC)gsiparam.h
$(PSSRC)iastate.h:$(GLSRC)gxhttile.h
-$(PSSRC)iastate.h:$(GLSRC)memento.h
-$(PSSRC)iastate.h:$(GLSRC)gsparam.h
-$(PSSRC)iastate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iastate.h:$(GLSRC)gsiparam.h
$(PSSRC)iastate.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iastate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iastate.h:$(GLSRC)gsrefct.h
+$(PSSRC)iastate.h:$(GLSRC)gsparam.h
+$(PSSRC)iastate.h:$(GLSRC)gsccolor.h
$(PSSRC)iastate.h:$(GLSRC)gsstruct.h
$(PSSRC)iastate.h:$(GLSRC)gxsync.h
-$(PSSRC)iastate.h:$(GLSRC)gscsel.h
$(PSSRC)iastate.h:$(GLSRC)scommon.h
+$(PSSRC)iastate.h:$(GLSRC)memento.h
+$(PSSRC)iastate.h:$(GLSRC)gscsel.h
$(PSSRC)iastate.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iastate.h:$(GLSRC)gsccolor.h
$(PSSRC)iastate.h:$(GLSRC)gsstype.h
$(PSSRC)iastate.h:$(GLSRC)gsmemory.h
$(PSSRC)iastate.h:$(GLSRC)gpsync.h
$(PSSRC)iastate.h:$(GLSRC)gslibctx.h
+$(PSSRC)iastate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iastate.h:$(GLSRC)gsalloc.h
+$(PSSRC)iastate.h:$(GLSRC)stdio_.h
$(PSSRC)iastate.h:$(GLSRC)gxcindex.h
-$(PSSRC)iastate.h:$(GLSRC)stdint_.h
$(PSSRC)iastate.h:$(GLSRC)gsgstate.h
-$(PSSRC)iastate.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iastate.h:$(GLSRC)stdio_.h
-$(PSSRC)iastate.h:$(GLSRC)gstypes.h
+$(PSSRC)iastate.h:$(GLSRC)stdint_.h
+$(PSSRC)iastate.h:$(GLSRC)gssprintf.h
$(PSSRC)iastate.h:$(GLSRC)std.h
+$(PSSRC)iastate.h:$(GLSRC)gstypes.h
$(PSSRC)iastate.h:$(GLSRC)stdpre.h
$(PSSRC)iastate.h:$(GLGEN)arch.h
-$(PSSRC)iastate.h:$(GLSRC)gssprintf.h
$(PSSRC)inamedef.h:$(PSSRC)isave.h
$(PSSRC)inamedef.h:$(PSSRC)inames.h
$(PSSRC)inamedef.h:$(PSSRC)idosave.h
$(PSSRC)inamedef.h:$(PSSRC)imemory.h
$(PSSRC)inamedef.h:$(PSSRC)ivmspace.h
$(PSSRC)inamedef.h:$(PSSRC)iref.h
-$(PSSRC)inamedef.h:$(GLSRC)gxalloc.h
$(PSSRC)inamedef.h:$(GLSRC)gsgc.h
$(PSSRC)inamedef.h:$(PSSRC)inamestr.h
$(PSSRC)inamedef.h:$(PSSRC)inameidx.h
+$(PSSRC)inamedef.h:$(GLSRC)gxalloc.h
$(PSSRC)inamedef.h:$(GLSRC)gxobj.h
$(PSSRC)inamedef.h:$(GLSRC)gsnamecl.h
$(PSSRC)inamedef.h:$(GLSRC)gxcspace.h
-$(PSSRC)inamedef.h:$(GLSRC)gxfrac.h
$(PSSRC)inamedef.h:$(GLSRC)gsdcolor.h
+$(PSSRC)inamedef.h:$(GLSRC)gxfrac.h
$(PSSRC)inamedef.h:$(GLSRC)gscms.h
-$(PSSRC)inamedef.h:$(GLSRC)gsdevice.h
$(PSSRC)inamedef.h:$(GLSRC)gscspace.h
+$(PSSRC)inamedef.h:$(GLSRC)gsdevice.h
$(PSSRC)inamedef.h:$(GLSRC)gxarith.h
-$(PSSRC)inamedef.h:$(GLSRC)gsrefct.h
-$(PSSRC)inamedef.h:$(GLSRC)gsiparam.h
$(PSSRC)inamedef.h:$(GLSRC)gxhttile.h
-$(PSSRC)inamedef.h:$(GLSRC)memento.h
-$(PSSRC)inamedef.h:$(GLSRC)gsparam.h
-$(PSSRC)inamedef.h:$(GLSRC)gsmatrix.h
+$(PSSRC)inamedef.h:$(GLSRC)gsiparam.h
$(PSSRC)inamedef.h:$(GLSRC)gxbitmap.h
+$(PSSRC)inamedef.h:$(GLSRC)gsmatrix.h
+$(PSSRC)inamedef.h:$(GLSRC)gsrefct.h
+$(PSSRC)inamedef.h:$(GLSRC)gsparam.h
+$(PSSRC)inamedef.h:$(GLSRC)gsccolor.h
$(PSSRC)inamedef.h:$(GLSRC)gsstruct.h
$(PSSRC)inamedef.h:$(GLSRC)gxsync.h
-$(PSSRC)inamedef.h:$(GLSRC)gscsel.h
$(PSSRC)inamedef.h:$(GLSRC)scommon.h
+$(PSSRC)inamedef.h:$(GLSRC)memento.h
+$(PSSRC)inamedef.h:$(GLSRC)gscsel.h
$(PSSRC)inamedef.h:$(GLSRC)gsbitmap.h
-$(PSSRC)inamedef.h:$(GLSRC)gsccolor.h
$(PSSRC)inamedef.h:$(GLSRC)gsstype.h
$(PSSRC)inamedef.h:$(GLSRC)gsmemory.h
$(PSSRC)inamedef.h:$(GLSRC)gpsync.h
$(PSSRC)inamedef.h:$(GLSRC)gslibctx.h
+$(PSSRC)inamedef.h:$(GLSRC)gs_dll_call.h
$(PSSRC)inamedef.h:$(GLSRC)gsalloc.h
+$(PSSRC)inamedef.h:$(GLSRC)stdio_.h
$(PSSRC)inamedef.h:$(GLSRC)gxcindex.h
-$(PSSRC)inamedef.h:$(GLSRC)stdint_.h
$(PSSRC)inamedef.h:$(GLSRC)gsgstate.h
-$(PSSRC)inamedef.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)inamedef.h:$(GLSRC)stdio_.h
-$(PSSRC)inamedef.h:$(GLSRC)gstypes.h
+$(PSSRC)inamedef.h:$(GLSRC)stdint_.h
+$(PSSRC)inamedef.h:$(GLSRC)gssprintf.h
$(PSSRC)inamedef.h:$(GLSRC)std.h
+$(PSSRC)inamedef.h:$(GLSRC)gstypes.h
$(PSSRC)inamedef.h:$(GLSRC)stdpre.h
$(PSSRC)inamedef.h:$(GLGEN)arch.h
-$(PSSRC)inamedef.h:$(GLSRC)gssprintf.h
$(PSSRC)store.h:$(PSSRC)ialloc.h
$(PSSRC)store.h:$(PSSRC)idosave.h
$(PSSRC)store.h:$(PSSRC)imemory.h
$(PSSRC)store.h:$(PSSRC)ivmspace.h
$(PSSRC)store.h:$(PSSRC)iref.h
-$(PSSRC)store.h:$(GLSRC)gxalloc.h
$(PSSRC)store.h:$(GLSRC)gsgc.h
+$(PSSRC)store.h:$(GLSRC)gxalloc.h
$(PSSRC)store.h:$(GLSRC)gxobj.h
$(PSSRC)store.h:$(GLSRC)gsnamecl.h
$(PSSRC)store.h:$(GLSRC)gxcspace.h
-$(PSSRC)store.h:$(GLSRC)gxfrac.h
$(PSSRC)store.h:$(GLSRC)gsdcolor.h
+$(PSSRC)store.h:$(GLSRC)gxfrac.h
$(PSSRC)store.h:$(GLSRC)gscms.h
-$(PSSRC)store.h:$(GLSRC)gsdevice.h
$(PSSRC)store.h:$(GLSRC)gscspace.h
+$(PSSRC)store.h:$(GLSRC)gsdevice.h
$(PSSRC)store.h:$(GLSRC)gxarith.h
-$(PSSRC)store.h:$(GLSRC)gsrefct.h
-$(PSSRC)store.h:$(GLSRC)gsiparam.h
$(PSSRC)store.h:$(GLSRC)gxhttile.h
-$(PSSRC)store.h:$(GLSRC)memento.h
-$(PSSRC)store.h:$(GLSRC)gsparam.h
-$(PSSRC)store.h:$(GLSRC)gsmatrix.h
+$(PSSRC)store.h:$(GLSRC)gsiparam.h
$(PSSRC)store.h:$(GLSRC)gxbitmap.h
+$(PSSRC)store.h:$(GLSRC)gsmatrix.h
+$(PSSRC)store.h:$(GLSRC)gsrefct.h
+$(PSSRC)store.h:$(GLSRC)gsparam.h
+$(PSSRC)store.h:$(GLSRC)gsccolor.h
$(PSSRC)store.h:$(GLSRC)gsstruct.h
$(PSSRC)store.h:$(GLSRC)gxsync.h
-$(PSSRC)store.h:$(GLSRC)gscsel.h
$(PSSRC)store.h:$(GLSRC)scommon.h
+$(PSSRC)store.h:$(GLSRC)memento.h
+$(PSSRC)store.h:$(GLSRC)gscsel.h
$(PSSRC)store.h:$(GLSRC)gsbitmap.h
-$(PSSRC)store.h:$(GLSRC)gsccolor.h
$(PSSRC)store.h:$(GLSRC)gsstype.h
$(PSSRC)store.h:$(GLSRC)gsmemory.h
$(PSSRC)store.h:$(GLSRC)gpsync.h
$(PSSRC)store.h:$(GLSRC)gslibctx.h
+$(PSSRC)store.h:$(GLSRC)gs_dll_call.h
$(PSSRC)store.h:$(GLSRC)gsalloc.h
+$(PSSRC)store.h:$(GLSRC)stdio_.h
$(PSSRC)store.h:$(GLSRC)gxcindex.h
-$(PSSRC)store.h:$(GLSRC)stdint_.h
$(PSSRC)store.h:$(GLSRC)gsgstate.h
-$(PSSRC)store.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)store.h:$(GLSRC)stdio_.h
-$(PSSRC)store.h:$(GLSRC)gstypes.h
+$(PSSRC)store.h:$(GLSRC)stdint_.h
+$(PSSRC)store.h:$(GLSRC)gssprintf.h
$(PSSRC)store.h:$(GLSRC)std.h
+$(PSSRC)store.h:$(GLSRC)gstypes.h
$(PSSRC)store.h:$(GLSRC)stdpre.h
$(PSSRC)store.h:$(GLGEN)arch.h
-$(PSSRC)store.h:$(GLSRC)gssprintf.h
$(PSSRC)iplugin.h:$(PSSRC)iref.h
$(PSSRC)iplugin.h:$(GLSRC)gxalloc.h
$(PSSRC)iplugin.h:$(GLSRC)gxobj.h
$(PSSRC)iplugin.h:$(GLSRC)gsnamecl.h
$(PSSRC)iplugin.h:$(GLSRC)gxcspace.h
-$(PSSRC)iplugin.h:$(GLSRC)gxfrac.h
$(PSSRC)iplugin.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iplugin.h:$(GLSRC)gxfrac.h
$(PSSRC)iplugin.h:$(GLSRC)gscms.h
-$(PSSRC)iplugin.h:$(GLSRC)gsdevice.h
$(PSSRC)iplugin.h:$(GLSRC)gscspace.h
+$(PSSRC)iplugin.h:$(GLSRC)gsdevice.h
$(PSSRC)iplugin.h:$(GLSRC)gxarith.h
-$(PSSRC)iplugin.h:$(GLSRC)gsrefct.h
-$(PSSRC)iplugin.h:$(GLSRC)gsiparam.h
$(PSSRC)iplugin.h:$(GLSRC)gxhttile.h
-$(PSSRC)iplugin.h:$(GLSRC)memento.h
-$(PSSRC)iplugin.h:$(GLSRC)gsparam.h
-$(PSSRC)iplugin.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iplugin.h:$(GLSRC)gsiparam.h
$(PSSRC)iplugin.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iplugin.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iplugin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iplugin.h:$(GLSRC)gsparam.h
+$(PSSRC)iplugin.h:$(GLSRC)gsccolor.h
$(PSSRC)iplugin.h:$(GLSRC)gsstruct.h
$(PSSRC)iplugin.h:$(GLSRC)gxsync.h
-$(PSSRC)iplugin.h:$(GLSRC)gscsel.h
$(PSSRC)iplugin.h:$(GLSRC)scommon.h
+$(PSSRC)iplugin.h:$(GLSRC)memento.h
+$(PSSRC)iplugin.h:$(GLSRC)gscsel.h
$(PSSRC)iplugin.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iplugin.h:$(GLSRC)gsccolor.h
$(PSSRC)iplugin.h:$(GLSRC)gsstype.h
$(PSSRC)iplugin.h:$(GLSRC)gsmemory.h
$(PSSRC)iplugin.h:$(GLSRC)gpsync.h
$(PSSRC)iplugin.h:$(GLSRC)gslibctx.h
+$(PSSRC)iplugin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iplugin.h:$(GLSRC)gsalloc.h
+$(PSSRC)iplugin.h:$(GLSRC)stdio_.h
$(PSSRC)iplugin.h:$(GLSRC)gxcindex.h
-$(PSSRC)iplugin.h:$(GLSRC)stdint_.h
$(PSSRC)iplugin.h:$(GLSRC)gsgstate.h
-$(PSSRC)iplugin.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iplugin.h:$(GLSRC)stdio_.h
-$(PSSRC)iplugin.h:$(GLSRC)gstypes.h
+$(PSSRC)iplugin.h:$(GLSRC)stdint_.h
+$(PSSRC)iplugin.h:$(GLSRC)gssprintf.h
$(PSSRC)iplugin.h:$(GLSRC)std.h
+$(PSSRC)iplugin.h:$(GLSRC)gstypes.h
$(PSSRC)iplugin.h:$(GLSRC)stdpre.h
$(PSSRC)iplugin.h:$(GLGEN)arch.h
-$(PSSRC)iplugin.h:$(GLSRC)gssprintf.h
$(PSSRC)ifapi.h:$(PSSRC)iplugin.h
$(PSSRC)ifapi.h:$(GLSRC)gxfapi.h
$(PSSRC)ifapi.h:$(PSSRC)iref.h
$(PSSRC)ifapi.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifapi.h:$(GLSRC)gxobj.h
$(PSSRC)ifapi.h:$(GLSRC)gstext.h
+$(PSSRC)ifapi.h:$(GLSRC)gxobj.h
$(PSSRC)ifapi.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifapi.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifapi.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifapi.h:$(GLSRC)gsfont.h
-$(PSSRC)ifapi.h:$(GLSRC)gxpath.h
-$(PSSRC)ifapi.h:$(GLSRC)gspenum.h
$(PSSRC)ifapi.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifapi.h:$(GLSRC)gslparam.h
-$(PSSRC)ifapi.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifapi.h:$(GLSRC)gsrect.h
$(PSSRC)ifapi.h:$(GLSRC)gscms.h
-$(PSSRC)ifapi.h:$(GLSRC)gsdevice.h
$(PSSRC)ifapi.h:$(GLSRC)gscspace.h
+$(PSSRC)ifapi.h:$(GLSRC)gxpath.h
+$(PSSRC)ifapi.h:$(GLSRC)gsdevice.h
$(PSSRC)ifapi.h:$(GLSRC)gxarith.h
+$(PSSRC)ifapi.h:$(GLSRC)gspenum.h
+$(PSSRC)ifapi.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifapi.h:$(GLSRC)gsrect.h
+$(PSSRC)ifapi.h:$(GLSRC)gslparam.h
+$(PSSRC)ifapi.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifapi.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifapi.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifapi.h:$(GLSRC)gscpm.h
$(PSSRC)ifapi.h:$(GLSRC)gxfixed.h
$(PSSRC)ifapi.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifapi.h:$(GLSRC)gscpm.h
-$(PSSRC)ifapi.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifapi.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifapi.h:$(GLSRC)gp.h
-$(PSSRC)ifapi.h:$(GLSRC)memento.h
$(PSSRC)ifapi.h:$(GLSRC)gsparam.h
-$(PSSRC)ifapi.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifapi.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ifapi.h:$(GLSRC)srdline.h
+$(PSSRC)ifapi.h:$(GLSRC)gp.h
+$(PSSRC)ifapi.h:$(GLSRC)gsccolor.h
$(PSSRC)ifapi.h:$(GLSRC)gsstruct.h
$(PSSRC)ifapi.h:$(GLSRC)gxsync.h
-$(PSSRC)ifapi.h:$(GLSRC)gscsel.h
+$(PSSRC)ifapi.h:$(GLSRC)srdline.h
$(PSSRC)ifapi.h:$(GLSRC)scommon.h
+$(PSSRC)ifapi.h:$(GLSRC)memento.h
+$(PSSRC)ifapi.h:$(GLSRC)gscsel.h
$(PSSRC)ifapi.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifapi.h:$(GLSRC)gsccolor.h
$(PSSRC)ifapi.h:$(GLSRC)gsstype.h
+$(PSSRC)ifapi.h:$(GLSRC)stat_.h
$(PSSRC)ifapi.h:$(GLSRC)gsmemory.h
$(PSSRC)ifapi.h:$(GLSRC)gpsync.h
-$(PSSRC)ifapi.h:$(GLSRC)gpgetenv.h
$(PSSRC)ifapi.h:$(GLSRC)memory_.h
+$(PSSRC)ifapi.h:$(GLSRC)gpgetenv.h
$(PSSRC)ifapi.h:$(GLSRC)gslibctx.h
$(PSSRC)ifapi.h:$(GLSRC)gscdefs.h
+$(PSSRC)ifapi.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifapi.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifapi.h:$(GLSRC)stdio_.h
$(PSSRC)ifapi.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifapi.h:$(GLSRC)stdint_.h
$(PSSRC)ifapi.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifapi.h:$(GLSRC)stdint_.h
+$(PSSRC)ifapi.h:$(GLSRC)gssprintf.h
$(PSSRC)ifapi.h:$(GLSRC)gsccode.h
-$(PSSRC)ifapi.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifapi.h:$(GLSRC)stdio_.h
-$(PSSRC)ifapi.h:$(GLSRC)gstypes.h
$(PSSRC)ifapi.h:$(GLSRC)std.h
+$(PSSRC)ifapi.h:$(GLSRC)gstypes.h
$(PSSRC)ifapi.h:$(GLSRC)stdpre.h
$(PSSRC)ifapi.h:$(GLGEN)arch.h
-$(PSSRC)ifapi.h:$(GLSRC)gssprintf.h
$(PSSRC)zht2.h:$(GLSRC)gscspace.h
-$(PSSRC)zht2.h:$(GLSRC)gsrefct.h
$(PSSRC)zht2.h:$(GLSRC)gsiparam.h
-$(PSSRC)zht2.h:$(GLSRC)memento.h
-$(PSSRC)zht2.h:$(GLSRC)gsmatrix.h
$(PSSRC)zht2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zht2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zht2.h:$(GLSRC)gsrefct.h
+$(PSSRC)zht2.h:$(GLSRC)gsccolor.h
$(PSSRC)zht2.h:$(GLSRC)scommon.h
+$(PSSRC)zht2.h:$(GLSRC)memento.h
$(PSSRC)zht2.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zht2.h:$(GLSRC)gsccolor.h
$(PSSRC)zht2.h:$(GLSRC)gsstype.h
$(PSSRC)zht2.h:$(GLSRC)gsmemory.h
$(PSSRC)zht2.h:$(GLSRC)gslibctx.h
-$(PSSRC)zht2.h:$(GLSRC)stdint_.h
-$(PSSRC)zht2.h:$(GLSRC)gsgstate.h
$(PSSRC)zht2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zht2.h:$(GLSRC)stdio_.h
-$(PSSRC)zht2.h:$(GLSRC)gstypes.h
+$(PSSRC)zht2.h:$(GLSRC)gsgstate.h
+$(PSSRC)zht2.h:$(GLSRC)stdint_.h
+$(PSSRC)zht2.h:$(GLSRC)gssprintf.h
$(PSSRC)zht2.h:$(GLSRC)std.h
+$(PSSRC)zht2.h:$(GLSRC)gstypes.h
$(PSSRC)zht2.h:$(GLSRC)stdpre.h
$(PSSRC)zht2.h:$(GLGEN)arch.h
-$(PSSRC)zht2.h:$(GLSRC)gssprintf.h
$(GLSRC)gen_ordered.h:$(GLSRC)stdpre.h
$(PSSRC)zchar42.h:$(GLSRC)gxfapi.h
$(PSSRC)zchar42.h:$(PSSRC)iref.h
$(PSSRC)zchar42.h:$(GLSRC)gxalloc.h
-$(PSSRC)zchar42.h:$(GLSRC)gxobj.h
$(PSSRC)zchar42.h:$(GLSRC)gstext.h
+$(PSSRC)zchar42.h:$(GLSRC)gxobj.h
$(PSSRC)zchar42.h:$(GLSRC)gsnamecl.h
$(PSSRC)zchar42.h:$(GLSRC)gxcspace.h
+$(PSSRC)zchar42.h:$(GLSRC)gsdcolor.h
$(PSSRC)zchar42.h:$(GLSRC)gsfont.h
-$(PSSRC)zchar42.h:$(GLSRC)gxpath.h
-$(PSSRC)zchar42.h:$(GLSRC)gspenum.h
$(PSSRC)zchar42.h:$(GLSRC)gxfrac.h
-$(PSSRC)zchar42.h:$(GLSRC)gslparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gsdcolor.h
-$(PSSRC)zchar42.h:$(GLSRC)gsrect.h
$(PSSRC)zchar42.h:$(GLSRC)gscms.h
-$(PSSRC)zchar42.h:$(GLSRC)gsdevice.h
$(PSSRC)zchar42.h:$(GLSRC)gscspace.h
+$(PSSRC)zchar42.h:$(GLSRC)gxpath.h
+$(PSSRC)zchar42.h:$(GLSRC)gsdevice.h
$(PSSRC)zchar42.h:$(GLSRC)gxarith.h
+$(PSSRC)zchar42.h:$(GLSRC)gspenum.h
+$(PSSRC)zchar42.h:$(GLSRC)gxhttile.h
+$(PSSRC)zchar42.h:$(GLSRC)gsrect.h
+$(PSSRC)zchar42.h:$(GLSRC)gslparam.h
+$(PSSRC)zchar42.h:$(GLSRC)gsiparam.h
+$(PSSRC)zchar42.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zchar42.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zchar42.h:$(GLSRC)gscpm.h
$(PSSRC)zchar42.h:$(GLSRC)gxfixed.h
$(PSSRC)zchar42.h:$(GLSRC)gsrefct.h
-$(PSSRC)zchar42.h:$(GLSRC)gscpm.h
-$(PSSRC)zchar42.h:$(GLSRC)gsiparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gxhttile.h
-$(PSSRC)zchar42.h:$(GLSRC)memento.h
$(PSSRC)zchar42.h:$(GLSRC)gsparam.h
-$(PSSRC)zchar42.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zchar42.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zchar42.h:$(GLSRC)gsccolor.h
$(PSSRC)zchar42.h:$(GLSRC)gsstruct.h
$(PSSRC)zchar42.h:$(GLSRC)gxsync.h
-$(PSSRC)zchar42.h:$(GLSRC)gscsel.h
$(PSSRC)zchar42.h:$(GLSRC)scommon.h
+$(PSSRC)zchar42.h:$(GLSRC)memento.h
+$(PSSRC)zchar42.h:$(GLSRC)gscsel.h
$(PSSRC)zchar42.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zchar42.h:$(GLSRC)gsccolor.h
$(PSSRC)zchar42.h:$(GLSRC)gsstype.h
$(PSSRC)zchar42.h:$(GLSRC)gsmemory.h
$(PSSRC)zchar42.h:$(GLSRC)gpsync.h
$(PSSRC)zchar42.h:$(GLSRC)gslibctx.h
+$(PSSRC)zchar42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zchar42.h:$(GLSRC)gsalloc.h
+$(PSSRC)zchar42.h:$(GLSRC)stdio_.h
$(PSSRC)zchar42.h:$(GLSRC)gxcindex.h
-$(PSSRC)zchar42.h:$(GLSRC)stdint_.h
$(PSSRC)zchar42.h:$(GLSRC)gsgstate.h
+$(PSSRC)zchar42.h:$(GLSRC)stdint_.h
+$(PSSRC)zchar42.h:$(GLSRC)gssprintf.h
$(PSSRC)zchar42.h:$(GLSRC)gsccode.h
-$(PSSRC)zchar42.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zchar42.h:$(GLSRC)stdio_.h
-$(PSSRC)zchar42.h:$(GLSRC)gstypes.h
$(PSSRC)zchar42.h:$(GLSRC)std.h
+$(PSSRC)zchar42.h:$(GLSRC)gstypes.h
$(PSSRC)zchar42.h:$(GLSRC)stdpre.h
$(PSSRC)zchar42.h:$(GLGEN)arch.h
-$(PSSRC)zchar42.h:$(GLSRC)gssprintf.h
$(PSSRC)zfunc.h:$(PSSRC)iref.h
$(PSSRC)zfunc.h:$(GLSRC)gxalloc.h
$(PSSRC)zfunc.h:$(GLSRC)gxobj.h
-$(PSSRC)zfunc.h:$(GLSRC)gsfunc.h
$(PSSRC)zfunc.h:$(GLSRC)gsnamecl.h
$(PSSRC)zfunc.h:$(GLSRC)gxcspace.h
-$(PSSRC)zfunc.h:$(GLSRC)gxfrac.h
+$(PSSRC)zfunc.h:$(GLSRC)gsfunc.h
$(PSSRC)zfunc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zfunc.h:$(GLSRC)gxfrac.h
$(PSSRC)zfunc.h:$(GLSRC)gscms.h
-$(PSSRC)zfunc.h:$(GLSRC)gsdevice.h
$(PSSRC)zfunc.h:$(GLSRC)gscspace.h
+$(PSSRC)zfunc.h:$(GLSRC)gsdevice.h
$(PSSRC)zfunc.h:$(GLSRC)gxarith.h
+$(PSSRC)zfunc.h:$(GLSRC)gxhttile.h
+$(PSSRC)zfunc.h:$(GLSRC)gsiparam.h
$(PSSRC)zfunc.h:$(GLSRC)gsdsrc.h
+$(PSSRC)zfunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zfunc.h:$(GLSRC)gsmatrix.h
$(PSSRC)zfunc.h:$(GLSRC)gsrefct.h
-$(PSSRC)zfunc.h:$(GLSRC)gsiparam.h
-$(PSSRC)zfunc.h:$(GLSRC)gxhttile.h
-$(PSSRC)zfunc.h:$(GLSRC)memento.h
$(PSSRC)zfunc.h:$(GLSRC)gsparam.h
-$(PSSRC)zfunc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)zfunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zfunc.h:$(GLSRC)gsccolor.h
$(PSSRC)zfunc.h:$(GLSRC)gsstruct.h
$(PSSRC)zfunc.h:$(GLSRC)gxsync.h
-$(PSSRC)zfunc.h:$(GLSRC)gscsel.h
$(PSSRC)zfunc.h:$(GLSRC)scommon.h
+$(PSSRC)zfunc.h:$(GLSRC)memento.h
+$(PSSRC)zfunc.h:$(GLSRC)gscsel.h
$(PSSRC)zfunc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zfunc.h:$(GLSRC)gsccolor.h
$(PSSRC)zfunc.h:$(GLSRC)gsstype.h
$(PSSRC)zfunc.h:$(GLSRC)gsmemory.h
$(PSSRC)zfunc.h:$(GLSRC)gpsync.h
$(PSSRC)zfunc.h:$(GLSRC)gslibctx.h
+$(PSSRC)zfunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfunc.h:$(GLSRC)gsalloc.h
+$(PSSRC)zfunc.h:$(GLSRC)stdio_.h
$(PSSRC)zfunc.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfunc.h:$(GLSRC)stdint_.h
$(PSSRC)zfunc.h:$(GLSRC)gsgstate.h
-$(PSSRC)zfunc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zfunc.h:$(GLSRC)stdio_.h
-$(PSSRC)zfunc.h:$(GLSRC)gstypes.h
+$(PSSRC)zfunc.h:$(GLSRC)stdint_.h
+$(PSSRC)zfunc.h:$(GLSRC)gssprintf.h
$(PSSRC)zfunc.h:$(GLSRC)std.h
+$(PSSRC)zfunc.h:$(GLSRC)gstypes.h
$(PSSRC)zfunc.h:$(GLSRC)stdpre.h
$(PSSRC)zfunc.h:$(GLGEN)arch.h
-$(PSSRC)zfunc.h:$(GLSRC)gssprintf.h
$(PSSRC)idparam.h:$(PSSRC)iref.h
$(PSSRC)idparam.h:$(GLSRC)gxalloc.h
$(PSSRC)idparam.h:$(GLSRC)gxobj.h
$(PSSRC)idparam.h:$(GLSRC)gsnamecl.h
$(PSSRC)idparam.h:$(GLSRC)gxcspace.h
-$(PSSRC)idparam.h:$(GLSRC)gxfrac.h
+$(PSSRC)idparam.h:$(GLSRC)gsuid.h
$(PSSRC)idparam.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idparam.h:$(GLSRC)gxfrac.h
$(PSSRC)idparam.h:$(GLSRC)gscms.h
-$(PSSRC)idparam.h:$(GLSRC)gsdevice.h
$(PSSRC)idparam.h:$(GLSRC)gscspace.h
-$(PSSRC)idparam.h:$(GLSRC)gsuid.h
+$(PSSRC)idparam.h:$(GLSRC)gsdevice.h
$(PSSRC)idparam.h:$(GLSRC)gxarith.h
-$(PSSRC)idparam.h:$(GLSRC)gsrefct.h
-$(PSSRC)idparam.h:$(GLSRC)gsiparam.h
$(PSSRC)idparam.h:$(GLSRC)gxhttile.h
-$(PSSRC)idparam.h:$(GLSRC)memento.h
-$(PSSRC)idparam.h:$(GLSRC)gsparam.h
-$(PSSRC)idparam.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idparam.h:$(GLSRC)gsiparam.h
$(PSSRC)idparam.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idparam.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)idparam.h:$(GLSRC)gsparam.h
+$(PSSRC)idparam.h:$(GLSRC)gsccolor.h
$(PSSRC)idparam.h:$(GLSRC)gsstruct.h
$(PSSRC)idparam.h:$(GLSRC)gxsync.h
-$(PSSRC)idparam.h:$(GLSRC)gscsel.h
$(PSSRC)idparam.h:$(GLSRC)scommon.h
+$(PSSRC)idparam.h:$(GLSRC)memento.h
+$(PSSRC)idparam.h:$(GLSRC)gscsel.h
$(PSSRC)idparam.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idparam.h:$(GLSRC)gsccolor.h
$(PSSRC)idparam.h:$(GLSRC)gsstype.h
$(PSSRC)idparam.h:$(GLSRC)gsmemory.h
$(PSSRC)idparam.h:$(GLSRC)gpsync.h
$(PSSRC)idparam.h:$(GLSRC)gslibctx.h
+$(PSSRC)idparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idparam.h:$(GLSRC)gsalloc.h
+$(PSSRC)idparam.h:$(GLSRC)stdio_.h
$(PSSRC)idparam.h:$(GLSRC)gxcindex.h
-$(PSSRC)idparam.h:$(GLSRC)stdint_.h
$(PSSRC)idparam.h:$(GLSRC)gsgstate.h
-$(PSSRC)idparam.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idparam.h:$(GLSRC)stdio_.h
-$(PSSRC)idparam.h:$(GLSRC)gstypes.h
+$(PSSRC)idparam.h:$(GLSRC)stdint_.h
+$(PSSRC)idparam.h:$(GLSRC)gssprintf.h
$(PSSRC)idparam.h:$(GLSRC)std.h
+$(PSSRC)idparam.h:$(GLSRC)gstypes.h
$(PSSRC)idparam.h:$(GLSRC)stdpre.h
$(PSSRC)idparam.h:$(GLGEN)arch.h
-$(PSSRC)idparam.h:$(GLSRC)gssprintf.h
$(PSSRC)ilevel.h:$(PSSRC)imemory.h
$(PSSRC)ilevel.h:$(PSSRC)ivmspace.h
$(PSSRC)ilevel.h:$(PSSRC)iref.h
-$(PSSRC)ilevel.h:$(GLSRC)gxalloc.h
$(PSSRC)ilevel.h:$(GLSRC)gsgc.h
+$(PSSRC)ilevel.h:$(GLSRC)gxalloc.h
$(PSSRC)ilevel.h:$(GLSRC)gxobj.h
$(PSSRC)ilevel.h:$(GLSRC)gsnamecl.h
$(PSSRC)ilevel.h:$(GLSRC)gxcspace.h
-$(PSSRC)ilevel.h:$(GLSRC)gxfrac.h
$(PSSRC)ilevel.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ilevel.h:$(GLSRC)gxfrac.h
$(PSSRC)ilevel.h:$(GLSRC)gscms.h
-$(PSSRC)ilevel.h:$(GLSRC)gsdevice.h
$(PSSRC)ilevel.h:$(GLSRC)gscspace.h
+$(PSSRC)ilevel.h:$(GLSRC)gsdevice.h
$(PSSRC)ilevel.h:$(GLSRC)gxarith.h
-$(PSSRC)ilevel.h:$(GLSRC)gsrefct.h
-$(PSSRC)ilevel.h:$(GLSRC)gsiparam.h
$(PSSRC)ilevel.h:$(GLSRC)gxhttile.h
-$(PSSRC)ilevel.h:$(GLSRC)memento.h
-$(PSSRC)ilevel.h:$(GLSRC)gsparam.h
-$(PSSRC)ilevel.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ilevel.h:$(GLSRC)gsiparam.h
$(PSSRC)ilevel.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ilevel.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ilevel.h:$(GLSRC)gsrefct.h
+$(PSSRC)ilevel.h:$(GLSRC)gsparam.h
+$(PSSRC)ilevel.h:$(GLSRC)gsccolor.h
$(PSSRC)ilevel.h:$(GLSRC)gsstruct.h
$(PSSRC)ilevel.h:$(GLSRC)gxsync.h
-$(PSSRC)ilevel.h:$(GLSRC)gscsel.h
$(PSSRC)ilevel.h:$(GLSRC)scommon.h
+$(PSSRC)ilevel.h:$(GLSRC)memento.h
+$(PSSRC)ilevel.h:$(GLSRC)gscsel.h
$(PSSRC)ilevel.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ilevel.h:$(GLSRC)gsccolor.h
$(PSSRC)ilevel.h:$(GLSRC)gsstype.h
$(PSSRC)ilevel.h:$(GLSRC)gsmemory.h
$(PSSRC)ilevel.h:$(GLSRC)gpsync.h
$(PSSRC)ilevel.h:$(GLSRC)gslibctx.h
+$(PSSRC)ilevel.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ilevel.h:$(GLSRC)gsalloc.h
+$(PSSRC)ilevel.h:$(GLSRC)stdio_.h
$(PSSRC)ilevel.h:$(GLSRC)gxcindex.h
-$(PSSRC)ilevel.h:$(GLSRC)stdint_.h
$(PSSRC)ilevel.h:$(GLSRC)gsgstate.h
-$(PSSRC)ilevel.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ilevel.h:$(GLSRC)stdio_.h
-$(PSSRC)ilevel.h:$(GLSRC)gstypes.h
+$(PSSRC)ilevel.h:$(GLSRC)stdint_.h
+$(PSSRC)ilevel.h:$(GLSRC)gssprintf.h
$(PSSRC)ilevel.h:$(GLSRC)std.h
+$(PSSRC)ilevel.h:$(GLSRC)gstypes.h
$(PSSRC)ilevel.h:$(GLSRC)stdpre.h
$(PSSRC)ilevel.h:$(GLGEN)arch.h
-$(PSSRC)ilevel.h:$(GLSRC)gssprintf.h
$(PSSRC)interp.h:$(PSSRC)imemory.h
$(PSSRC)interp.h:$(PSSRC)ivmspace.h
$(PSSRC)interp.h:$(PSSRC)iref.h
-$(PSSRC)interp.h:$(GLSRC)gxalloc.h
$(PSSRC)interp.h:$(GLSRC)gsgc.h
+$(PSSRC)interp.h:$(GLSRC)gxalloc.h
$(PSSRC)interp.h:$(GLSRC)gxobj.h
$(PSSRC)interp.h:$(GLSRC)gsnamecl.h
$(PSSRC)interp.h:$(GLSRC)gxcspace.h
-$(PSSRC)interp.h:$(GLSRC)gxfrac.h
$(PSSRC)interp.h:$(GLSRC)gsdcolor.h
+$(PSSRC)interp.h:$(GLSRC)gxfrac.h
$(PSSRC)interp.h:$(GLSRC)gscms.h
-$(PSSRC)interp.h:$(GLSRC)gsdevice.h
$(PSSRC)interp.h:$(GLSRC)gscspace.h
+$(PSSRC)interp.h:$(GLSRC)gsdevice.h
$(PSSRC)interp.h:$(GLSRC)gxarith.h
-$(PSSRC)interp.h:$(GLSRC)gsrefct.h
-$(PSSRC)interp.h:$(GLSRC)gsiparam.h
$(PSSRC)interp.h:$(GLSRC)gxhttile.h
-$(PSSRC)interp.h:$(GLSRC)memento.h
-$(PSSRC)interp.h:$(GLSRC)gsparam.h
-$(PSSRC)interp.h:$(GLSRC)gsmatrix.h
+$(PSSRC)interp.h:$(GLSRC)gsiparam.h
$(PSSRC)interp.h:$(GLSRC)gxbitmap.h
+$(PSSRC)interp.h:$(GLSRC)gsmatrix.h
+$(PSSRC)interp.h:$(GLSRC)gsrefct.h
+$(PSSRC)interp.h:$(GLSRC)gsparam.h
+$(PSSRC)interp.h:$(GLSRC)gsccolor.h
$(PSSRC)interp.h:$(GLSRC)gsstruct.h
$(PSSRC)interp.h:$(GLSRC)gxsync.h
-$(PSSRC)interp.h:$(GLSRC)gscsel.h
$(PSSRC)interp.h:$(GLSRC)scommon.h
+$(PSSRC)interp.h:$(GLSRC)memento.h
+$(PSSRC)interp.h:$(GLSRC)gscsel.h
$(PSSRC)interp.h:$(GLSRC)gsbitmap.h
-$(PSSRC)interp.h:$(GLSRC)gsccolor.h
$(PSSRC)interp.h:$(GLSRC)gsstype.h
$(PSSRC)interp.h:$(GLSRC)gsmemory.h
$(PSSRC)interp.h:$(GLSRC)gpsync.h
$(PSSRC)interp.h:$(GLSRC)gslibctx.h
+$(PSSRC)interp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)interp.h:$(GLSRC)gsalloc.h
+$(PSSRC)interp.h:$(GLSRC)stdio_.h
$(PSSRC)interp.h:$(GLSRC)gxcindex.h
-$(PSSRC)interp.h:$(GLSRC)stdint_.h
$(PSSRC)interp.h:$(GLSRC)gsgstate.h
-$(PSSRC)interp.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)interp.h:$(GLSRC)stdio_.h
-$(PSSRC)interp.h:$(GLSRC)gstypes.h
+$(PSSRC)interp.h:$(GLSRC)stdint_.h
+$(PSSRC)interp.h:$(GLSRC)gssprintf.h
$(PSSRC)interp.h:$(GLSRC)std.h
+$(PSSRC)interp.h:$(GLSRC)gstypes.h
$(PSSRC)interp.h:$(GLSRC)stdpre.h
$(PSSRC)interp.h:$(GLGEN)arch.h
-$(PSSRC)interp.h:$(GLSRC)gssprintf.h
$(PSSRC)iparam.h:$(PSSRC)isdata.h
$(PSSRC)iparam.h:$(PSSRC)imemory.h
$(PSSRC)iparam.h:$(PSSRC)ivmspace.h
$(PSSRC)iparam.h:$(PSSRC)iref.h
-$(PSSRC)iparam.h:$(GLSRC)gxalloc.h
$(PSSRC)iparam.h:$(GLSRC)gsgc.h
+$(PSSRC)iparam.h:$(GLSRC)gxalloc.h
$(PSSRC)iparam.h:$(GLSRC)gxobj.h
$(PSSRC)iparam.h:$(GLSRC)gsnamecl.h
$(PSSRC)iparam.h:$(GLSRC)gxcspace.h
-$(PSSRC)iparam.h:$(GLSRC)gxfrac.h
$(PSSRC)iparam.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iparam.h:$(GLSRC)gxfrac.h
$(PSSRC)iparam.h:$(GLSRC)gscms.h
-$(PSSRC)iparam.h:$(GLSRC)gsdevice.h
$(PSSRC)iparam.h:$(GLSRC)gscspace.h
+$(PSSRC)iparam.h:$(GLSRC)gsdevice.h
$(PSSRC)iparam.h:$(GLSRC)gxarith.h
-$(PSSRC)iparam.h:$(GLSRC)gsrefct.h
-$(PSSRC)iparam.h:$(GLSRC)gsiparam.h
$(PSSRC)iparam.h:$(GLSRC)gxhttile.h
-$(PSSRC)iparam.h:$(GLSRC)memento.h
-$(PSSRC)iparam.h:$(GLSRC)gsparam.h
-$(PSSRC)iparam.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iparam.h:$(GLSRC)gsiparam.h
$(PSSRC)iparam.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iparam.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iparam.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparam.h:$(GLSRC)gsparam.h
+$(PSSRC)iparam.h:$(GLSRC)gsccolor.h
$(PSSRC)iparam.h:$(GLSRC)gsstruct.h
$(PSSRC)iparam.h:$(GLSRC)gxsync.h
-$(PSSRC)iparam.h:$(GLSRC)gscsel.h
$(PSSRC)iparam.h:$(GLSRC)scommon.h
+$(PSSRC)iparam.h:$(GLSRC)memento.h
+$(PSSRC)iparam.h:$(GLSRC)gscsel.h
$(PSSRC)iparam.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iparam.h:$(GLSRC)gsccolor.h
$(PSSRC)iparam.h:$(GLSRC)gsstype.h
$(PSSRC)iparam.h:$(GLSRC)gsmemory.h
$(PSSRC)iparam.h:$(GLSRC)gpsync.h
$(PSSRC)iparam.h:$(GLSRC)gslibctx.h
+$(PSSRC)iparam.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparam.h:$(GLSRC)gsalloc.h
+$(PSSRC)iparam.h:$(GLSRC)stdio_.h
$(PSSRC)iparam.h:$(GLSRC)gxcindex.h
-$(PSSRC)iparam.h:$(GLSRC)stdint_.h
$(PSSRC)iparam.h:$(GLSRC)gsgstate.h
-$(PSSRC)iparam.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iparam.h:$(GLSRC)stdio_.h
-$(PSSRC)iparam.h:$(GLSRC)gstypes.h
+$(PSSRC)iparam.h:$(GLSRC)stdint_.h
+$(PSSRC)iparam.h:$(GLSRC)gssprintf.h
$(PSSRC)iparam.h:$(GLSRC)std.h
+$(PSSRC)iparam.h:$(GLSRC)gstypes.h
$(PSSRC)iparam.h:$(GLSRC)stdpre.h
$(PSSRC)iparam.h:$(GLGEN)arch.h
-$(PSSRC)iparam.h:$(GLSRC)gssprintf.h
$(PSSRC)isdata.h:$(PSSRC)imemory.h
$(PSSRC)isdata.h:$(PSSRC)ivmspace.h
$(PSSRC)isdata.h:$(PSSRC)iref.h
-$(PSSRC)isdata.h:$(GLSRC)gxalloc.h
$(PSSRC)isdata.h:$(GLSRC)gsgc.h
+$(PSSRC)isdata.h:$(GLSRC)gxalloc.h
$(PSSRC)isdata.h:$(GLSRC)gxobj.h
$(PSSRC)isdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)isdata.h:$(GLSRC)gxcspace.h
-$(PSSRC)isdata.h:$(GLSRC)gxfrac.h
$(PSSRC)isdata.h:$(GLSRC)gsdcolor.h
+$(PSSRC)isdata.h:$(GLSRC)gxfrac.h
$(PSSRC)isdata.h:$(GLSRC)gscms.h
-$(PSSRC)isdata.h:$(GLSRC)gsdevice.h
$(PSSRC)isdata.h:$(GLSRC)gscspace.h
+$(PSSRC)isdata.h:$(GLSRC)gsdevice.h
$(PSSRC)isdata.h:$(GLSRC)gxarith.h
-$(PSSRC)isdata.h:$(GLSRC)gsrefct.h
-$(PSSRC)isdata.h:$(GLSRC)gsiparam.h
$(PSSRC)isdata.h:$(GLSRC)gxhttile.h
-$(PSSRC)isdata.h:$(GLSRC)memento.h
-$(PSSRC)isdata.h:$(GLSRC)gsparam.h
-$(PSSRC)isdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)isdata.h:$(GLSRC)gsiparam.h
$(PSSRC)isdata.h:$(GLSRC)gxbitmap.h
+$(PSSRC)isdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)isdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)isdata.h:$(GLSRC)gsparam.h
+$(PSSRC)isdata.h:$(GLSRC)gsccolor.h
$(PSSRC)isdata.h:$(GLSRC)gsstruct.h
$(PSSRC)isdata.h:$(GLSRC)gxsync.h
-$(PSSRC)isdata.h:$(GLSRC)gscsel.h
$(PSSRC)isdata.h:$(GLSRC)scommon.h
+$(PSSRC)isdata.h:$(GLSRC)memento.h
+$(PSSRC)isdata.h:$(GLSRC)gscsel.h
$(PSSRC)isdata.h:$(GLSRC)gsbitmap.h
-$(PSSRC)isdata.h:$(GLSRC)gsccolor.h
$(PSSRC)isdata.h:$(GLSRC)gsstype.h
$(PSSRC)isdata.h:$(GLSRC)gsmemory.h
$(PSSRC)isdata.h:$(GLSRC)gpsync.h
$(PSSRC)isdata.h:$(GLSRC)gslibctx.h
+$(PSSRC)isdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)isdata.h:$(GLSRC)gsalloc.h
+$(PSSRC)isdata.h:$(GLSRC)stdio_.h
$(PSSRC)isdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)isdata.h:$(GLSRC)stdint_.h
$(PSSRC)isdata.h:$(GLSRC)gsgstate.h
-$(PSSRC)isdata.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)isdata.h:$(GLSRC)stdio_.h
-$(PSSRC)isdata.h:$(GLSRC)gstypes.h
+$(PSSRC)isdata.h:$(GLSRC)stdint_.h
+$(PSSRC)isdata.h:$(GLSRC)gssprintf.h
$(PSSRC)isdata.h:$(GLSRC)std.h
+$(PSSRC)isdata.h:$(GLSRC)gstypes.h
$(PSSRC)isdata.h:$(GLSRC)stdpre.h
$(PSSRC)isdata.h:$(GLGEN)arch.h
-$(PSSRC)isdata.h:$(GLSRC)gssprintf.h
$(PSSRC)istack.h:$(PSSRC)isdata.h
$(PSSRC)istack.h:$(PSSRC)imemory.h
$(PSSRC)istack.h:$(PSSRC)ivmspace.h
$(PSSRC)istack.h:$(PSSRC)iref.h
-$(PSSRC)istack.h:$(GLSRC)gxalloc.h
$(PSSRC)istack.h:$(GLSRC)gsgc.h
+$(PSSRC)istack.h:$(GLSRC)gxalloc.h
$(PSSRC)istack.h:$(GLSRC)gxobj.h
$(PSSRC)istack.h:$(GLSRC)gsnamecl.h
$(PSSRC)istack.h:$(GLSRC)gxcspace.h
-$(PSSRC)istack.h:$(GLSRC)gxfrac.h
$(PSSRC)istack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)istack.h:$(GLSRC)gxfrac.h
$(PSSRC)istack.h:$(GLSRC)gscms.h
-$(PSSRC)istack.h:$(GLSRC)gsdevice.h
$(PSSRC)istack.h:$(GLSRC)gscspace.h
+$(PSSRC)istack.h:$(GLSRC)gsdevice.h
$(PSSRC)istack.h:$(GLSRC)gxarith.h
-$(PSSRC)istack.h:$(GLSRC)gsrefct.h
-$(PSSRC)istack.h:$(GLSRC)gsiparam.h
$(PSSRC)istack.h:$(GLSRC)gxhttile.h
-$(PSSRC)istack.h:$(GLSRC)memento.h
-$(PSSRC)istack.h:$(GLSRC)gsparam.h
-$(PSSRC)istack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istack.h:$(GLSRC)gsiparam.h
$(PSSRC)istack.h:$(GLSRC)gxbitmap.h
+$(PSSRC)istack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istack.h:$(GLSRC)gsrefct.h
+$(PSSRC)istack.h:$(GLSRC)gsparam.h
+$(PSSRC)istack.h:$(GLSRC)gsccolor.h
$(PSSRC)istack.h:$(GLSRC)gsstruct.h
$(PSSRC)istack.h:$(GLSRC)gxsync.h
-$(PSSRC)istack.h:$(GLSRC)gscsel.h
$(PSSRC)istack.h:$(GLSRC)scommon.h
+$(PSSRC)istack.h:$(GLSRC)memento.h
+$(PSSRC)istack.h:$(GLSRC)gscsel.h
$(PSSRC)istack.h:$(GLSRC)gsbitmap.h
-$(PSSRC)istack.h:$(GLSRC)gsccolor.h
$(PSSRC)istack.h:$(GLSRC)gsstype.h
$(PSSRC)istack.h:$(GLSRC)gsmemory.h
$(PSSRC)istack.h:$(GLSRC)gpsync.h
$(PSSRC)istack.h:$(GLSRC)gslibctx.h
+$(PSSRC)istack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istack.h:$(GLSRC)gsalloc.h
+$(PSSRC)istack.h:$(GLSRC)stdio_.h
$(PSSRC)istack.h:$(GLSRC)gxcindex.h
-$(PSSRC)istack.h:$(GLSRC)stdint_.h
$(PSSRC)istack.h:$(GLSRC)gsgstate.h
-$(PSSRC)istack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)istack.h:$(GLSRC)stdio_.h
-$(PSSRC)istack.h:$(GLSRC)gstypes.h
+$(PSSRC)istack.h:$(GLSRC)stdint_.h
+$(PSSRC)istack.h:$(GLSRC)gssprintf.h
$(PSSRC)istack.h:$(GLSRC)std.h
+$(PSSRC)istack.h:$(GLSRC)gstypes.h
$(PSSRC)istack.h:$(GLSRC)stdpre.h
$(PSSRC)istack.h:$(GLGEN)arch.h
-$(PSSRC)istack.h:$(GLSRC)gssprintf.h
$(PSSRC)istkparm.h:$(PSSRC)iref.h
$(PSSRC)istkparm.h:$(GLSRC)gxalloc.h
$(PSSRC)istkparm.h:$(GLSRC)gxobj.h
$(PSSRC)istkparm.h:$(GLSRC)gsnamecl.h
$(PSSRC)istkparm.h:$(GLSRC)gxcspace.h
-$(PSSRC)istkparm.h:$(GLSRC)gxfrac.h
$(PSSRC)istkparm.h:$(GLSRC)gsdcolor.h
+$(PSSRC)istkparm.h:$(GLSRC)gxfrac.h
$(PSSRC)istkparm.h:$(GLSRC)gscms.h
-$(PSSRC)istkparm.h:$(GLSRC)gsdevice.h
$(PSSRC)istkparm.h:$(GLSRC)gscspace.h
+$(PSSRC)istkparm.h:$(GLSRC)gsdevice.h
$(PSSRC)istkparm.h:$(GLSRC)gxarith.h
-$(PSSRC)istkparm.h:$(GLSRC)gsrefct.h
-$(PSSRC)istkparm.h:$(GLSRC)gsiparam.h
$(PSSRC)istkparm.h:$(GLSRC)gxhttile.h
-$(PSSRC)istkparm.h:$(GLSRC)memento.h
-$(PSSRC)istkparm.h:$(GLSRC)gsparam.h
-$(PSSRC)istkparm.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istkparm.h:$(GLSRC)gsiparam.h
$(PSSRC)istkparm.h:$(GLSRC)gxbitmap.h
+$(PSSRC)istkparm.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istkparm.h:$(GLSRC)gsrefct.h
+$(PSSRC)istkparm.h:$(GLSRC)gsparam.h
+$(PSSRC)istkparm.h:$(GLSRC)gsccolor.h
$(PSSRC)istkparm.h:$(GLSRC)gsstruct.h
$(PSSRC)istkparm.h:$(GLSRC)gxsync.h
-$(PSSRC)istkparm.h:$(GLSRC)gscsel.h
$(PSSRC)istkparm.h:$(GLSRC)scommon.h
+$(PSSRC)istkparm.h:$(GLSRC)memento.h
+$(PSSRC)istkparm.h:$(GLSRC)gscsel.h
$(PSSRC)istkparm.h:$(GLSRC)gsbitmap.h
-$(PSSRC)istkparm.h:$(GLSRC)gsccolor.h
$(PSSRC)istkparm.h:$(GLSRC)gsstype.h
$(PSSRC)istkparm.h:$(GLSRC)gsmemory.h
$(PSSRC)istkparm.h:$(GLSRC)gpsync.h
$(PSSRC)istkparm.h:$(GLSRC)gslibctx.h
+$(PSSRC)istkparm.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istkparm.h:$(GLSRC)gsalloc.h
+$(PSSRC)istkparm.h:$(GLSRC)stdio_.h
$(PSSRC)istkparm.h:$(GLSRC)gxcindex.h
-$(PSSRC)istkparm.h:$(GLSRC)stdint_.h
$(PSSRC)istkparm.h:$(GLSRC)gsgstate.h
-$(PSSRC)istkparm.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)istkparm.h:$(GLSRC)stdio_.h
-$(PSSRC)istkparm.h:$(GLSRC)gstypes.h
+$(PSSRC)istkparm.h:$(GLSRC)stdint_.h
+$(PSSRC)istkparm.h:$(GLSRC)gssprintf.h
$(PSSRC)istkparm.h:$(GLSRC)std.h
+$(PSSRC)istkparm.h:$(GLSRC)gstypes.h
$(PSSRC)istkparm.h:$(GLSRC)stdpre.h
$(PSSRC)istkparm.h:$(GLGEN)arch.h
-$(PSSRC)istkparm.h:$(GLSRC)gssprintf.h
$(PSSRC)iutil2.h:$(PSSRC)iref.h
$(PSSRC)iutil2.h:$(GLSRC)gxalloc.h
$(PSSRC)iutil2.h:$(GLSRC)gxobj.h
-$(PSSRC)iutil2.h:$(GLSRC)gsfunc.h
$(PSSRC)iutil2.h:$(GLSRC)gsnamecl.h
$(PSSRC)iutil2.h:$(GLSRC)gxcspace.h
-$(PSSRC)iutil2.h:$(GLSRC)gxfrac.h
+$(PSSRC)iutil2.h:$(GLSRC)gsfunc.h
$(PSSRC)iutil2.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iutil2.h:$(GLSRC)gxfrac.h
$(PSSRC)iutil2.h:$(GLSRC)gscms.h
-$(PSSRC)iutil2.h:$(GLSRC)gsdevice.h
$(PSSRC)iutil2.h:$(GLSRC)gscspace.h
+$(PSSRC)iutil2.h:$(GLSRC)gsdevice.h
$(PSSRC)iutil2.h:$(GLSRC)gxarith.h
+$(PSSRC)iutil2.h:$(GLSRC)gxhttile.h
+$(PSSRC)iutil2.h:$(GLSRC)gsiparam.h
$(PSSRC)iutil2.h:$(GLSRC)gsdsrc.h
+$(PSSRC)iutil2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iutil2.h:$(GLSRC)gsmatrix.h
$(PSSRC)iutil2.h:$(GLSRC)gsrefct.h
-$(PSSRC)iutil2.h:$(GLSRC)gsiparam.h
-$(PSSRC)iutil2.h:$(GLSRC)gxhttile.h
-$(PSSRC)iutil2.h:$(GLSRC)memento.h
$(PSSRC)iutil2.h:$(GLSRC)gsparam.h
-$(PSSRC)iutil2.h:$(GLSRC)gsmatrix.h
-$(PSSRC)iutil2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iutil2.h:$(GLSRC)gsccolor.h
$(PSSRC)iutil2.h:$(GLSRC)gsstruct.h
$(PSSRC)iutil2.h:$(GLSRC)gxsync.h
-$(PSSRC)iutil2.h:$(GLSRC)gscsel.h
$(PSSRC)iutil2.h:$(GLSRC)scommon.h
+$(PSSRC)iutil2.h:$(GLSRC)memento.h
+$(PSSRC)iutil2.h:$(GLSRC)gscsel.h
$(PSSRC)iutil2.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iutil2.h:$(GLSRC)gsccolor.h
$(PSSRC)iutil2.h:$(GLSRC)gsstype.h
$(PSSRC)iutil2.h:$(GLSRC)gsmemory.h
$(PSSRC)iutil2.h:$(GLSRC)gpsync.h
$(PSSRC)iutil2.h:$(GLSRC)gslibctx.h
+$(PSSRC)iutil2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iutil2.h:$(GLSRC)gsalloc.h
+$(PSSRC)iutil2.h:$(GLSRC)stdio_.h
$(PSSRC)iutil2.h:$(GLSRC)gxcindex.h
-$(PSSRC)iutil2.h:$(GLSRC)stdint_.h
$(PSSRC)iutil2.h:$(GLSRC)gsgstate.h
-$(PSSRC)iutil2.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iutil2.h:$(GLSRC)stdio_.h
-$(PSSRC)iutil2.h:$(GLSRC)gstypes.h
+$(PSSRC)iutil2.h:$(GLSRC)stdint_.h
+$(PSSRC)iutil2.h:$(GLSRC)gssprintf.h
$(PSSRC)iutil2.h:$(GLSRC)std.h
+$(PSSRC)iutil2.h:$(GLSRC)gstypes.h
$(PSSRC)iutil2.h:$(GLSRC)stdpre.h
$(PSSRC)iutil2.h:$(GLGEN)arch.h
-$(PSSRC)iutil2.h:$(GLSRC)gssprintf.h
$(PSSRC)oparc.h:$(PSSRC)iref.h
$(PSSRC)oparc.h:$(GLSRC)gxalloc.h
$(PSSRC)oparc.h:$(GLSRC)gxobj.h
$(PSSRC)oparc.h:$(GLSRC)gsnamecl.h
$(PSSRC)oparc.h:$(GLSRC)gxcspace.h
-$(PSSRC)oparc.h:$(GLSRC)gxfrac.h
$(PSSRC)oparc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)oparc.h:$(GLSRC)gxfrac.h
$(PSSRC)oparc.h:$(GLSRC)gscms.h
-$(PSSRC)oparc.h:$(GLSRC)gsdevice.h
$(PSSRC)oparc.h:$(GLSRC)gscspace.h
+$(PSSRC)oparc.h:$(GLSRC)gsdevice.h
$(PSSRC)oparc.h:$(GLSRC)gxarith.h
-$(PSSRC)oparc.h:$(GLSRC)gsrefct.h
-$(PSSRC)oparc.h:$(GLSRC)gsiparam.h
$(PSSRC)oparc.h:$(GLSRC)gxhttile.h
-$(PSSRC)oparc.h:$(GLSRC)memento.h
-$(PSSRC)oparc.h:$(GLSRC)gsparam.h
-$(PSSRC)oparc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)oparc.h:$(GLSRC)gsiparam.h
$(PSSRC)oparc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)oparc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)oparc.h:$(GLSRC)gsrefct.h
+$(PSSRC)oparc.h:$(GLSRC)gsparam.h
+$(PSSRC)oparc.h:$(GLSRC)gsccolor.h
$(PSSRC)oparc.h:$(GLSRC)gsstruct.h
$(PSSRC)oparc.h:$(GLSRC)gxsync.h
-$(PSSRC)oparc.h:$(GLSRC)gscsel.h
$(PSSRC)oparc.h:$(GLSRC)scommon.h
+$(PSSRC)oparc.h:$(GLSRC)memento.h
+$(PSSRC)oparc.h:$(GLSRC)gscsel.h
$(PSSRC)oparc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)oparc.h:$(GLSRC)gsccolor.h
$(PSSRC)oparc.h:$(GLSRC)gsstype.h
$(PSSRC)oparc.h:$(GLSRC)gsmemory.h
$(PSSRC)oparc.h:$(GLSRC)gpsync.h
$(PSSRC)oparc.h:$(GLSRC)gslibctx.h
+$(PSSRC)oparc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)oparc.h:$(GLSRC)gsalloc.h
+$(PSSRC)oparc.h:$(GLSRC)stdio_.h
$(PSSRC)oparc.h:$(GLSRC)gxcindex.h
-$(PSSRC)oparc.h:$(GLSRC)stdint_.h
$(PSSRC)oparc.h:$(GLSRC)gsgstate.h
-$(PSSRC)oparc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)oparc.h:$(GLSRC)stdio_.h
-$(PSSRC)oparc.h:$(GLSRC)gstypes.h
+$(PSSRC)oparc.h:$(GLSRC)stdint_.h
+$(PSSRC)oparc.h:$(GLSRC)gssprintf.h
$(PSSRC)oparc.h:$(GLSRC)std.h
+$(PSSRC)oparc.h:$(GLSRC)gstypes.h
$(PSSRC)oparc.h:$(GLSRC)stdpre.h
$(PSSRC)oparc.h:$(GLGEN)arch.h
-$(PSSRC)oparc.h:$(GLSRC)gssprintf.h
$(PSSRC)opcheck.h:$(PSSRC)iref.h
$(PSSRC)opcheck.h:$(GLSRC)gxalloc.h
$(PSSRC)opcheck.h:$(GLSRC)gxobj.h
$(PSSRC)opcheck.h:$(GLSRC)gsnamecl.h
$(PSSRC)opcheck.h:$(GLSRC)gxcspace.h
-$(PSSRC)opcheck.h:$(GLSRC)gxfrac.h
$(PSSRC)opcheck.h:$(GLSRC)gsdcolor.h
+$(PSSRC)opcheck.h:$(GLSRC)gxfrac.h
$(PSSRC)opcheck.h:$(GLSRC)gscms.h
-$(PSSRC)opcheck.h:$(GLSRC)gsdevice.h
$(PSSRC)opcheck.h:$(GLSRC)gscspace.h
+$(PSSRC)opcheck.h:$(GLSRC)gsdevice.h
$(PSSRC)opcheck.h:$(GLSRC)gxarith.h
-$(PSSRC)opcheck.h:$(GLSRC)gsrefct.h
-$(PSSRC)opcheck.h:$(GLSRC)gsiparam.h
$(PSSRC)opcheck.h:$(GLSRC)gxhttile.h
-$(PSSRC)opcheck.h:$(GLSRC)memento.h
-$(PSSRC)opcheck.h:$(GLSRC)gsparam.h
-$(PSSRC)opcheck.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opcheck.h:$(GLSRC)gsiparam.h
$(PSSRC)opcheck.h:$(GLSRC)gxbitmap.h
+$(PSSRC)opcheck.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opcheck.h:$(GLSRC)gsrefct.h
+$(PSSRC)opcheck.h:$(GLSRC)gsparam.h
+$(PSSRC)opcheck.h:$(GLSRC)gsccolor.h
$(PSSRC)opcheck.h:$(GLSRC)gsstruct.h
$(PSSRC)opcheck.h:$(GLSRC)gxsync.h
-$(PSSRC)opcheck.h:$(GLSRC)gscsel.h
$(PSSRC)opcheck.h:$(GLSRC)scommon.h
+$(PSSRC)opcheck.h:$(GLSRC)memento.h
+$(PSSRC)opcheck.h:$(GLSRC)gscsel.h
$(PSSRC)opcheck.h:$(GLSRC)gsbitmap.h
-$(PSSRC)opcheck.h:$(GLSRC)gsccolor.h
$(PSSRC)opcheck.h:$(GLSRC)gsstype.h
$(PSSRC)opcheck.h:$(GLSRC)gsmemory.h
$(PSSRC)opcheck.h:$(GLSRC)gpsync.h
$(PSSRC)opcheck.h:$(GLSRC)gslibctx.h
+$(PSSRC)opcheck.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opcheck.h:$(GLSRC)gsalloc.h
+$(PSSRC)opcheck.h:$(GLSRC)stdio_.h
$(PSSRC)opcheck.h:$(GLSRC)gxcindex.h
-$(PSSRC)opcheck.h:$(GLSRC)stdint_.h
$(PSSRC)opcheck.h:$(GLSRC)gsgstate.h
-$(PSSRC)opcheck.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)opcheck.h:$(GLSRC)stdio_.h
-$(PSSRC)opcheck.h:$(GLSRC)gstypes.h
+$(PSSRC)opcheck.h:$(GLSRC)stdint_.h
+$(PSSRC)opcheck.h:$(GLSRC)gssprintf.h
$(PSSRC)opcheck.h:$(GLSRC)std.h
+$(PSSRC)opcheck.h:$(GLSRC)gstypes.h
$(PSSRC)opcheck.h:$(GLSRC)stdpre.h
$(PSSRC)opcheck.h:$(GLGEN)arch.h
-$(PSSRC)opcheck.h:$(GLSRC)gssprintf.h
$(PSSRC)opextern.h:$(PSSRC)iref.h
$(PSSRC)opextern.h:$(GLSRC)gxalloc.h
$(PSSRC)opextern.h:$(GLSRC)gxobj.h
$(PSSRC)opextern.h:$(GLSRC)gsnamecl.h
$(PSSRC)opextern.h:$(GLSRC)gxcspace.h
-$(PSSRC)opextern.h:$(GLSRC)gxfrac.h
$(PSSRC)opextern.h:$(GLSRC)gsdcolor.h
+$(PSSRC)opextern.h:$(GLSRC)gxfrac.h
$(PSSRC)opextern.h:$(GLSRC)gscms.h
-$(PSSRC)opextern.h:$(GLSRC)gsdevice.h
$(PSSRC)opextern.h:$(GLSRC)gscspace.h
+$(PSSRC)opextern.h:$(GLSRC)gsdevice.h
$(PSSRC)opextern.h:$(GLSRC)gxarith.h
-$(PSSRC)opextern.h:$(GLSRC)gsrefct.h
-$(PSSRC)opextern.h:$(GLSRC)gsiparam.h
$(PSSRC)opextern.h:$(GLSRC)gxhttile.h
-$(PSSRC)opextern.h:$(GLSRC)memento.h
-$(PSSRC)opextern.h:$(GLSRC)gsparam.h
-$(PSSRC)opextern.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opextern.h:$(GLSRC)gsiparam.h
$(PSSRC)opextern.h:$(GLSRC)gxbitmap.h
+$(PSSRC)opextern.h:$(GLSRC)gsmatrix.h
+$(PSSRC)opextern.h:$(GLSRC)gsrefct.h
+$(PSSRC)opextern.h:$(GLSRC)gsparam.h
+$(PSSRC)opextern.h:$(GLSRC)gsccolor.h
$(PSSRC)opextern.h:$(GLSRC)gsstruct.h
$(PSSRC)opextern.h:$(GLSRC)gxsync.h
-$(PSSRC)opextern.h:$(GLSRC)gscsel.h
$(PSSRC)opextern.h:$(GLSRC)scommon.h
+$(PSSRC)opextern.h:$(GLSRC)memento.h
+$(PSSRC)opextern.h:$(GLSRC)gscsel.h
$(PSSRC)opextern.h:$(GLSRC)gsbitmap.h
-$(PSSRC)opextern.h:$(GLSRC)gsccolor.h
$(PSSRC)opextern.h:$(GLSRC)gsstype.h
$(PSSRC)opextern.h:$(GLSRC)gsmemory.h
$(PSSRC)opextern.h:$(GLSRC)gpsync.h
$(PSSRC)opextern.h:$(GLSRC)gslibctx.h
+$(PSSRC)opextern.h:$(GLSRC)gs_dll_call.h
$(PSSRC)opextern.h:$(GLSRC)gsalloc.h
+$(PSSRC)opextern.h:$(GLSRC)stdio_.h
$(PSSRC)opextern.h:$(GLSRC)gxcindex.h
-$(PSSRC)opextern.h:$(GLSRC)stdint_.h
$(PSSRC)opextern.h:$(GLSRC)gsgstate.h
-$(PSSRC)opextern.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)opextern.h:$(GLSRC)stdio_.h
-$(PSSRC)opextern.h:$(GLSRC)gstypes.h
+$(PSSRC)opextern.h:$(GLSRC)stdint_.h
+$(PSSRC)opextern.h:$(GLSRC)gssprintf.h
$(PSSRC)opextern.h:$(GLSRC)std.h
+$(PSSRC)opextern.h:$(GLSRC)gstypes.h
$(PSSRC)opextern.h:$(GLSRC)stdpre.h
$(PSSRC)opextern.h:$(GLGEN)arch.h
-$(PSSRC)opextern.h:$(GLSRC)gssprintf.h
$(PSSRC)idsdata.h:$(PSSRC)iddstack.h
$(PSSRC)idsdata.h:$(PSSRC)isdata.h
$(PSSRC)idsdata.h:$(PSSRC)imemory.h
$(PSSRC)idsdata.h:$(PSSRC)ivmspace.h
$(PSSRC)idsdata.h:$(PSSRC)iref.h
-$(PSSRC)idsdata.h:$(GLSRC)gxalloc.h
$(PSSRC)idsdata.h:$(GLSRC)gsgc.h
+$(PSSRC)idsdata.h:$(GLSRC)gxalloc.h
$(PSSRC)idsdata.h:$(GLSRC)gxobj.h
$(PSSRC)idsdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)idsdata.h:$(GLSRC)gxcspace.h
-$(PSSRC)idsdata.h:$(GLSRC)gxfrac.h
$(PSSRC)idsdata.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idsdata.h:$(GLSRC)gxfrac.h
$(PSSRC)idsdata.h:$(GLSRC)gscms.h
-$(PSSRC)idsdata.h:$(GLSRC)gsdevice.h
$(PSSRC)idsdata.h:$(GLSRC)gscspace.h
+$(PSSRC)idsdata.h:$(GLSRC)gsdevice.h
$(PSSRC)idsdata.h:$(GLSRC)gxarith.h
-$(PSSRC)idsdata.h:$(GLSRC)gsrefct.h
-$(PSSRC)idsdata.h:$(GLSRC)gsiparam.h
$(PSSRC)idsdata.h:$(GLSRC)gxhttile.h
-$(PSSRC)idsdata.h:$(GLSRC)memento.h
-$(PSSRC)idsdata.h:$(GLSRC)gsparam.h
-$(PSSRC)idsdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idsdata.h:$(GLSRC)gsiparam.h
$(PSSRC)idsdata.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idsdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idsdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)idsdata.h:$(GLSRC)gsparam.h
+$(PSSRC)idsdata.h:$(GLSRC)gsccolor.h
$(PSSRC)idsdata.h:$(GLSRC)gsstruct.h
$(PSSRC)idsdata.h:$(GLSRC)gxsync.h
-$(PSSRC)idsdata.h:$(GLSRC)gscsel.h
$(PSSRC)idsdata.h:$(GLSRC)scommon.h
+$(PSSRC)idsdata.h:$(GLSRC)memento.h
+$(PSSRC)idsdata.h:$(GLSRC)gscsel.h
$(PSSRC)idsdata.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idsdata.h:$(GLSRC)gsccolor.h
$(PSSRC)idsdata.h:$(GLSRC)gsstype.h
$(PSSRC)idsdata.h:$(GLSRC)gsmemory.h
$(PSSRC)idsdata.h:$(GLSRC)gpsync.h
$(PSSRC)idsdata.h:$(GLSRC)gslibctx.h
+$(PSSRC)idsdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idsdata.h:$(GLSRC)gsalloc.h
+$(PSSRC)idsdata.h:$(GLSRC)stdio_.h
$(PSSRC)idsdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)idsdata.h:$(GLSRC)stdint_.h
$(PSSRC)idsdata.h:$(GLSRC)gsgstate.h
-$(PSSRC)idsdata.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idsdata.h:$(GLSRC)stdio_.h
-$(PSSRC)idsdata.h:$(GLSRC)gstypes.h
+$(PSSRC)idsdata.h:$(GLSRC)stdint_.h
+$(PSSRC)idsdata.h:$(GLSRC)gssprintf.h
$(PSSRC)idsdata.h:$(GLSRC)std.h
+$(PSSRC)idsdata.h:$(GLSRC)gstypes.h
$(PSSRC)idsdata.h:$(GLSRC)stdpre.h
$(PSSRC)idsdata.h:$(GLGEN)arch.h
-$(PSSRC)idsdata.h:$(GLSRC)gssprintf.h
$(PSSRC)idstack.h:$(PSSRC)idsdata.h
$(PSSRC)idstack.h:$(PSSRC)iddstack.h
$(PSSRC)idstack.h:$(PSSRC)istack.h
@@ -3546,228 +3548,227 @@ $(PSSRC)idstack.h:$(PSSRC)isdata.h
$(PSSRC)idstack.h:$(PSSRC)imemory.h
$(PSSRC)idstack.h:$(PSSRC)ivmspace.h
$(PSSRC)idstack.h:$(PSSRC)iref.h
-$(PSSRC)idstack.h:$(GLSRC)gxalloc.h
$(PSSRC)idstack.h:$(GLSRC)gsgc.h
+$(PSSRC)idstack.h:$(GLSRC)gxalloc.h
$(PSSRC)idstack.h:$(GLSRC)gxobj.h
$(PSSRC)idstack.h:$(GLSRC)gsnamecl.h
$(PSSRC)idstack.h:$(GLSRC)gxcspace.h
-$(PSSRC)idstack.h:$(GLSRC)gxfrac.h
$(PSSRC)idstack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idstack.h:$(GLSRC)gxfrac.h
$(PSSRC)idstack.h:$(GLSRC)gscms.h
-$(PSSRC)idstack.h:$(GLSRC)gsdevice.h
$(PSSRC)idstack.h:$(GLSRC)gscspace.h
+$(PSSRC)idstack.h:$(GLSRC)gsdevice.h
$(PSSRC)idstack.h:$(GLSRC)gxarith.h
-$(PSSRC)idstack.h:$(GLSRC)gsrefct.h
-$(PSSRC)idstack.h:$(GLSRC)gsiparam.h
$(PSSRC)idstack.h:$(GLSRC)gxhttile.h
-$(PSSRC)idstack.h:$(GLSRC)memento.h
-$(PSSRC)idstack.h:$(GLSRC)gsparam.h
-$(PSSRC)idstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idstack.h:$(GLSRC)gsiparam.h
$(PSSRC)idstack.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)idstack.h:$(GLSRC)gsparam.h
+$(PSSRC)idstack.h:$(GLSRC)gsccolor.h
$(PSSRC)idstack.h:$(GLSRC)gsstruct.h
$(PSSRC)idstack.h:$(GLSRC)gxsync.h
-$(PSSRC)idstack.h:$(GLSRC)gscsel.h
$(PSSRC)idstack.h:$(GLSRC)scommon.h
+$(PSSRC)idstack.h:$(GLSRC)memento.h
+$(PSSRC)idstack.h:$(GLSRC)gscsel.h
$(PSSRC)idstack.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idstack.h:$(GLSRC)gsccolor.h
$(PSSRC)idstack.h:$(GLSRC)gsstype.h
$(PSSRC)idstack.h:$(GLSRC)gsmemory.h
$(PSSRC)idstack.h:$(GLSRC)gpsync.h
$(PSSRC)idstack.h:$(GLSRC)gslibctx.h
+$(PSSRC)idstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idstack.h:$(GLSRC)gsalloc.h
+$(PSSRC)idstack.h:$(GLSRC)stdio_.h
$(PSSRC)idstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)idstack.h:$(GLSRC)stdint_.h
$(PSSRC)idstack.h:$(GLSRC)gsgstate.h
-$(PSSRC)idstack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idstack.h:$(GLSRC)stdio_.h
-$(PSSRC)idstack.h:$(GLSRC)gstypes.h
+$(PSSRC)idstack.h:$(GLSRC)stdint_.h
+$(PSSRC)idstack.h:$(GLSRC)gssprintf.h
$(PSSRC)idstack.h:$(GLSRC)std.h
+$(PSSRC)idstack.h:$(GLSRC)gstypes.h
$(PSSRC)idstack.h:$(GLSRC)stdpre.h
$(PSSRC)idstack.h:$(GLGEN)arch.h
-$(PSSRC)idstack.h:$(GLSRC)gssprintf.h
$(PSSRC)iesdata.h:$(PSSRC)isdata.h
$(PSSRC)iesdata.h:$(PSSRC)imemory.h
$(PSSRC)iesdata.h:$(PSSRC)ivmspace.h
$(PSSRC)iesdata.h:$(PSSRC)iref.h
-$(PSSRC)iesdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iesdata.h:$(GLSRC)gsgc.h
+$(PSSRC)iesdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iesdata.h:$(GLSRC)gxobj.h
$(PSSRC)iesdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)iesdata.h:$(GLSRC)gxcspace.h
-$(PSSRC)iesdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iesdata.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iesdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iesdata.h:$(GLSRC)gscms.h
-$(PSSRC)iesdata.h:$(GLSRC)gsdevice.h
$(PSSRC)iesdata.h:$(GLSRC)gscspace.h
+$(PSSRC)iesdata.h:$(GLSRC)gsdevice.h
$(PSSRC)iesdata.h:$(GLSRC)gxarith.h
-$(PSSRC)iesdata.h:$(GLSRC)gsrefct.h
-$(PSSRC)iesdata.h:$(GLSRC)gsiparam.h
$(PSSRC)iesdata.h:$(GLSRC)gxhttile.h
-$(PSSRC)iesdata.h:$(GLSRC)memento.h
-$(PSSRC)iesdata.h:$(GLSRC)gsparam.h
-$(PSSRC)iesdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iesdata.h:$(GLSRC)gsiparam.h
$(PSSRC)iesdata.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iesdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iesdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iesdata.h:$(GLSRC)gsparam.h
+$(PSSRC)iesdata.h:$(GLSRC)gsccolor.h
$(PSSRC)iesdata.h:$(GLSRC)gsstruct.h
$(PSSRC)iesdata.h:$(GLSRC)gxsync.h
-$(PSSRC)iesdata.h:$(GLSRC)gscsel.h
$(PSSRC)iesdata.h:$(GLSRC)scommon.h
+$(PSSRC)iesdata.h:$(GLSRC)memento.h
+$(PSSRC)iesdata.h:$(GLSRC)gscsel.h
$(PSSRC)iesdata.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iesdata.h:$(GLSRC)gsccolor.h
$(PSSRC)iesdata.h:$(GLSRC)gsstype.h
$(PSSRC)iesdata.h:$(GLSRC)gsmemory.h
$(PSSRC)iesdata.h:$(GLSRC)gpsync.h
$(PSSRC)iesdata.h:$(GLSRC)gslibctx.h
+$(PSSRC)iesdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iesdata.h:$(GLSRC)gsalloc.h
+$(PSSRC)iesdata.h:$(GLSRC)stdio_.h
$(PSSRC)iesdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)iesdata.h:$(GLSRC)stdint_.h
$(PSSRC)iesdata.h:$(GLSRC)gsgstate.h
-$(PSSRC)iesdata.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iesdata.h:$(GLSRC)stdio_.h
-$(PSSRC)iesdata.h:$(GLSRC)gstypes.h
+$(PSSRC)iesdata.h:$(GLSRC)stdint_.h
+$(PSSRC)iesdata.h:$(GLSRC)gssprintf.h
$(PSSRC)iesdata.h:$(GLSRC)std.h
+$(PSSRC)iesdata.h:$(GLSRC)gstypes.h
$(PSSRC)iesdata.h:$(GLSRC)stdpre.h
$(PSSRC)iesdata.h:$(GLGEN)arch.h
-$(PSSRC)iesdata.h:$(GLSRC)gssprintf.h
$(PSSRC)iestack.h:$(PSSRC)iesdata.h
$(PSSRC)iestack.h:$(PSSRC)istack.h
$(PSSRC)iestack.h:$(PSSRC)isdata.h
$(PSSRC)iestack.h:$(PSSRC)imemory.h
$(PSSRC)iestack.h:$(PSSRC)ivmspace.h
$(PSSRC)iestack.h:$(PSSRC)iref.h
-$(PSSRC)iestack.h:$(GLSRC)gxalloc.h
$(PSSRC)iestack.h:$(GLSRC)gsgc.h
+$(PSSRC)iestack.h:$(GLSRC)gxalloc.h
$(PSSRC)iestack.h:$(GLSRC)gxobj.h
$(PSSRC)iestack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iestack.h:$(GLSRC)gxcspace.h
-$(PSSRC)iestack.h:$(GLSRC)gxfrac.h
$(PSSRC)iestack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iestack.h:$(GLSRC)gxfrac.h
$(PSSRC)iestack.h:$(GLSRC)gscms.h
-$(PSSRC)iestack.h:$(GLSRC)gsdevice.h
$(PSSRC)iestack.h:$(GLSRC)gscspace.h
+$(PSSRC)iestack.h:$(GLSRC)gsdevice.h
$(PSSRC)iestack.h:$(GLSRC)gxarith.h
-$(PSSRC)iestack.h:$(GLSRC)gsrefct.h
-$(PSSRC)iestack.h:$(GLSRC)gsiparam.h
$(PSSRC)iestack.h:$(GLSRC)gxhttile.h
-$(PSSRC)iestack.h:$(GLSRC)memento.h
-$(PSSRC)iestack.h:$(GLSRC)gsparam.h
-$(PSSRC)iestack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iestack.h:$(GLSRC)gsiparam.h
$(PSSRC)iestack.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iestack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iestack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iestack.h:$(GLSRC)gsparam.h
+$(PSSRC)iestack.h:$(GLSRC)gsccolor.h
$(PSSRC)iestack.h:$(GLSRC)gsstruct.h
$(PSSRC)iestack.h:$(GLSRC)gxsync.h
-$(PSSRC)iestack.h:$(GLSRC)gscsel.h
$(PSSRC)iestack.h:$(GLSRC)scommon.h
+$(PSSRC)iestack.h:$(GLSRC)memento.h
+$(PSSRC)iestack.h:$(GLSRC)gscsel.h
$(PSSRC)iestack.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iestack.h:$(GLSRC)gsccolor.h
$(PSSRC)iestack.h:$(GLSRC)gsstype.h
$(PSSRC)iestack.h:$(GLSRC)gsmemory.h
$(PSSRC)iestack.h:$(GLSRC)gpsync.h
$(PSSRC)iestack.h:$(GLSRC)gslibctx.h
+$(PSSRC)iestack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iestack.h:$(GLSRC)gsalloc.h
+$(PSSRC)iestack.h:$(GLSRC)stdio_.h
$(PSSRC)iestack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iestack.h:$(GLSRC)stdint_.h
$(PSSRC)iestack.h:$(GLSRC)gsgstate.h
-$(PSSRC)iestack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iestack.h:$(GLSRC)stdio_.h
-$(PSSRC)iestack.h:$(GLSRC)gstypes.h
+$(PSSRC)iestack.h:$(GLSRC)stdint_.h
+$(PSSRC)iestack.h:$(GLSRC)gssprintf.h
$(PSSRC)iestack.h:$(GLSRC)std.h
+$(PSSRC)iestack.h:$(GLSRC)gstypes.h
$(PSSRC)iestack.h:$(GLSRC)stdpre.h
$(PSSRC)iestack.h:$(GLGEN)arch.h
-$(PSSRC)iestack.h:$(GLSRC)gssprintf.h
$(PSSRC)iosdata.h:$(PSSRC)isdata.h
$(PSSRC)iosdata.h:$(PSSRC)imemory.h
$(PSSRC)iosdata.h:$(PSSRC)ivmspace.h
$(PSSRC)iosdata.h:$(PSSRC)iref.h
-$(PSSRC)iosdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iosdata.h:$(GLSRC)gsgc.h
+$(PSSRC)iosdata.h:$(GLSRC)gxalloc.h
$(PSSRC)iosdata.h:$(GLSRC)gxobj.h
$(PSSRC)iosdata.h:$(GLSRC)gsnamecl.h
$(PSSRC)iosdata.h:$(GLSRC)gxcspace.h
-$(PSSRC)iosdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iosdata.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iosdata.h:$(GLSRC)gxfrac.h
$(PSSRC)iosdata.h:$(GLSRC)gscms.h
-$(PSSRC)iosdata.h:$(GLSRC)gsdevice.h
$(PSSRC)iosdata.h:$(GLSRC)gscspace.h
+$(PSSRC)iosdata.h:$(GLSRC)gsdevice.h
$(PSSRC)iosdata.h:$(GLSRC)gxarith.h
-$(PSSRC)iosdata.h:$(GLSRC)gsrefct.h
-$(PSSRC)iosdata.h:$(GLSRC)gsiparam.h
$(PSSRC)iosdata.h:$(GLSRC)gxhttile.h
-$(PSSRC)iosdata.h:$(GLSRC)memento.h
-$(PSSRC)iosdata.h:$(GLSRC)gsparam.h
-$(PSSRC)iosdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iosdata.h:$(GLSRC)gsiparam.h
$(PSSRC)iosdata.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iosdata.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iosdata.h:$(GLSRC)gsrefct.h
+$(PSSRC)iosdata.h:$(GLSRC)gsparam.h
+$(PSSRC)iosdata.h:$(GLSRC)gsccolor.h
$(PSSRC)iosdata.h:$(GLSRC)gsstruct.h
$(PSSRC)iosdata.h:$(GLSRC)gxsync.h
-$(PSSRC)iosdata.h:$(GLSRC)gscsel.h
$(PSSRC)iosdata.h:$(GLSRC)scommon.h
+$(PSSRC)iosdata.h:$(GLSRC)memento.h
+$(PSSRC)iosdata.h:$(GLSRC)gscsel.h
$(PSSRC)iosdata.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iosdata.h:$(GLSRC)gsccolor.h
$(PSSRC)iosdata.h:$(GLSRC)gsstype.h
$(PSSRC)iosdata.h:$(GLSRC)gsmemory.h
$(PSSRC)iosdata.h:$(GLSRC)gpsync.h
$(PSSRC)iosdata.h:$(GLSRC)gslibctx.h
+$(PSSRC)iosdata.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iosdata.h:$(GLSRC)gsalloc.h
+$(PSSRC)iosdata.h:$(GLSRC)stdio_.h
$(PSSRC)iosdata.h:$(GLSRC)gxcindex.h
-$(PSSRC)iosdata.h:$(GLSRC)stdint_.h
$(PSSRC)iosdata.h:$(GLSRC)gsgstate.h
-$(PSSRC)iosdata.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iosdata.h:$(GLSRC)stdio_.h
-$(PSSRC)iosdata.h:$(GLSRC)gstypes.h
+$(PSSRC)iosdata.h:$(GLSRC)stdint_.h
+$(PSSRC)iosdata.h:$(GLSRC)gssprintf.h
$(PSSRC)iosdata.h:$(GLSRC)std.h
+$(PSSRC)iosdata.h:$(GLSRC)gstypes.h
$(PSSRC)iosdata.h:$(GLSRC)stdpre.h
$(PSSRC)iosdata.h:$(GLGEN)arch.h
-$(PSSRC)iosdata.h:$(GLSRC)gssprintf.h
$(PSSRC)iostack.h:$(PSSRC)istack.h
$(PSSRC)iostack.h:$(PSSRC)iosdata.h
$(PSSRC)iostack.h:$(PSSRC)isdata.h
$(PSSRC)iostack.h:$(PSSRC)imemory.h
$(PSSRC)iostack.h:$(PSSRC)ivmspace.h
$(PSSRC)iostack.h:$(PSSRC)iref.h
-$(PSSRC)iostack.h:$(GLSRC)gxalloc.h
$(PSSRC)iostack.h:$(GLSRC)gsgc.h
+$(PSSRC)iostack.h:$(GLSRC)gxalloc.h
$(PSSRC)iostack.h:$(GLSRC)gxobj.h
$(PSSRC)iostack.h:$(GLSRC)gsnamecl.h
$(PSSRC)iostack.h:$(GLSRC)gxcspace.h
-$(PSSRC)iostack.h:$(GLSRC)gxfrac.h
$(PSSRC)iostack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iostack.h:$(GLSRC)gxfrac.h
$(PSSRC)iostack.h:$(GLSRC)gscms.h
-$(PSSRC)iostack.h:$(GLSRC)gsdevice.h
$(PSSRC)iostack.h:$(GLSRC)gscspace.h
+$(PSSRC)iostack.h:$(GLSRC)gsdevice.h
$(PSSRC)iostack.h:$(GLSRC)gxarith.h
-$(PSSRC)iostack.h:$(GLSRC)gsrefct.h
-$(PSSRC)iostack.h:$(GLSRC)gsiparam.h
$(PSSRC)iostack.h:$(GLSRC)gxhttile.h
-$(PSSRC)iostack.h:$(GLSRC)memento.h
-$(PSSRC)iostack.h:$(GLSRC)gsparam.h
-$(PSSRC)iostack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iostack.h:$(GLSRC)gsiparam.h
$(PSSRC)iostack.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iostack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iostack.h:$(GLSRC)gsrefct.h
+$(PSSRC)iostack.h:$(GLSRC)gsparam.h
+$(PSSRC)iostack.h:$(GLSRC)gsccolor.h
$(PSSRC)iostack.h:$(GLSRC)gsstruct.h
$(PSSRC)iostack.h:$(GLSRC)gxsync.h
-$(PSSRC)iostack.h:$(GLSRC)gscsel.h
$(PSSRC)iostack.h:$(GLSRC)scommon.h
+$(PSSRC)iostack.h:$(GLSRC)memento.h
+$(PSSRC)iostack.h:$(GLSRC)gscsel.h
$(PSSRC)iostack.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iostack.h:$(GLSRC)gsccolor.h
$(PSSRC)iostack.h:$(GLSRC)gsstype.h
$(PSSRC)iostack.h:$(GLSRC)gsmemory.h
$(PSSRC)iostack.h:$(GLSRC)gpsync.h
$(PSSRC)iostack.h:$(GLSRC)gslibctx.h
+$(PSSRC)iostack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iostack.h:$(GLSRC)gsalloc.h
+$(PSSRC)iostack.h:$(GLSRC)stdio_.h
$(PSSRC)iostack.h:$(GLSRC)gxcindex.h
-$(PSSRC)iostack.h:$(GLSRC)stdint_.h
$(PSSRC)iostack.h:$(GLSRC)gsgstate.h
-$(PSSRC)iostack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iostack.h:$(GLSRC)stdio_.h
-$(PSSRC)iostack.h:$(GLSRC)gstypes.h
+$(PSSRC)iostack.h:$(GLSRC)stdint_.h
+$(PSSRC)iostack.h:$(GLSRC)gssprintf.h
$(PSSRC)iostack.h:$(GLSRC)std.h
+$(PSSRC)iostack.h:$(GLSRC)gstypes.h
$(PSSRC)iostack.h:$(GLSRC)stdpre.h
$(PSSRC)iostack.h:$(GLGEN)arch.h
-$(PSSRC)iostack.h:$(GLSRC)gssprintf.h
$(PSSRC)icstate.h:$(PSSRC)idsdata.h
$(PSSRC)icstate.h:$(PSSRC)iesdata.h
$(PSSRC)icstate.h:$(PSSRC)interp.h
$(PSSRC)icstate.h:$(PSSRC)opdef.h
$(PSSRC)icstate.h:$(PSSRC)files.h
$(PSSRC)icstate.h:$(PSSRC)iddstack.h
-$(PSSRC)icstate.h:$(GLSRC)stream.h
$(PSSRC)icstate.h:$(PSSRC)store.h
$(PSSRC)icstate.h:$(PSSRC)iosdata.h
$(PSSRC)icstate.h:$(PSSRC)ialloc.h
@@ -3776,53 +3777,54 @@ $(PSSRC)icstate.h:$(PSSRC)isdata.h
$(PSSRC)icstate.h:$(PSSRC)imemory.h
$(PSSRC)icstate.h:$(PSSRC)ivmspace.h
$(PSSRC)icstate.h:$(PSSRC)iref.h
-$(PSSRC)icstate.h:$(GLSRC)gxalloc.h
$(PSSRC)icstate.h:$(GLSRC)gsgc.h
+$(PSSRC)icstate.h:$(GLSRC)gxalloc.h
$(PSSRC)icstate.h:$(GLSRC)gxobj.h
$(PSSRC)icstate.h:$(GLSRC)gsnamecl.h
-$(PSSRC)icstate.h:$(GLSRC)gxiodev.h
+$(PSSRC)icstate.h:$(GLSRC)stream.h
$(PSSRC)icstate.h:$(GLSRC)gxcspace.h
-$(PSSRC)icstate.h:$(GLSRC)stat_.h
-$(PSSRC)icstate.h:$(GLSRC)gxfrac.h
+$(PSSRC)icstate.h:$(GLSRC)gxiodev.h
$(PSSRC)icstate.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icstate.h:$(GLSRC)gxfrac.h
$(PSSRC)icstate.h:$(GLSRC)gscms.h
-$(PSSRC)icstate.h:$(GLSRC)gsdevice.h
$(PSSRC)icstate.h:$(GLSRC)gscspace.h
+$(PSSRC)icstate.h:$(GLSRC)gsdevice.h
$(PSSRC)icstate.h:$(GLSRC)gxarith.h
-$(PSSRC)icstate.h:$(GLSRC)gsrefct.h
-$(PSSRC)icstate.h:$(GLSRC)gsiparam.h
$(PSSRC)icstate.h:$(GLSRC)gxhttile.h
-$(PSSRC)icstate.h:$(GLSRC)gp.h
-$(PSSRC)icstate.h:$(GLSRC)memento.h
-$(PSSRC)icstate.h:$(GLSRC)gsparam.h
-$(PSSRC)icstate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icstate.h:$(GLSRC)gsiparam.h
$(PSSRC)icstate.h:$(GLSRC)gxbitmap.h
-$(PSSRC)icstate.h:$(GLSRC)srdline.h
+$(PSSRC)icstate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icstate.h:$(GLSRC)gsrefct.h
+$(PSSRC)icstate.h:$(GLSRC)gsparam.h
+$(PSSRC)icstate.h:$(GLSRC)gp.h
+$(PSSRC)icstate.h:$(GLSRC)gsccolor.h
$(PSSRC)icstate.h:$(GLSRC)gsstruct.h
$(PSSRC)icstate.h:$(GLSRC)gxsync.h
-$(PSSRC)icstate.h:$(GLSRC)gscsel.h
+$(PSSRC)icstate.h:$(GLSRC)srdline.h
$(PSSRC)icstate.h:$(GLSRC)scommon.h
+$(PSSRC)icstate.h:$(GLSRC)memento.h
+$(PSSRC)icstate.h:$(GLSRC)gscsel.h
$(PSSRC)icstate.h:$(GLSRC)gsbitmap.h
$(PSSRC)icstate.h:$(GLSRC)gsfname.h
-$(PSSRC)icstate.h:$(GLSRC)gsccolor.h
$(PSSRC)icstate.h:$(GLSRC)gsstype.h
+$(PSSRC)icstate.h:$(GLSRC)stat_.h
$(PSSRC)icstate.h:$(GLSRC)gsmemory.h
$(PSSRC)icstate.h:$(GLSRC)gpsync.h
-$(PSSRC)icstate.h:$(GLSRC)gpgetenv.h
$(PSSRC)icstate.h:$(GLSRC)memory_.h
+$(PSSRC)icstate.h:$(GLSRC)gpgetenv.h
$(PSSRC)icstate.h:$(GLSRC)gslibctx.h
$(PSSRC)icstate.h:$(GLSRC)gscdefs.h
+$(PSSRC)icstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icstate.h:$(GLSRC)gsalloc.h
+$(PSSRC)icstate.h:$(GLSRC)stdio_.h
$(PSSRC)icstate.h:$(GLSRC)gxcindex.h
-$(PSSRC)icstate.h:$(GLSRC)stdint_.h
$(PSSRC)icstate.h:$(GLSRC)gsgstate.h
-$(PSSRC)icstate.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icstate.h:$(GLSRC)stdio_.h
-$(PSSRC)icstate.h:$(GLSRC)gstypes.h
+$(PSSRC)icstate.h:$(GLSRC)stdint_.h
+$(PSSRC)icstate.h:$(GLSRC)gssprintf.h
$(PSSRC)icstate.h:$(GLSRC)std.h
+$(PSSRC)icstate.h:$(GLSRC)gstypes.h
$(PSSRC)icstate.h:$(GLSRC)stdpre.h
$(PSSRC)icstate.h:$(GLGEN)arch.h
-$(PSSRC)icstate.h:$(GLSRC)gssprintf.h
$(PSSRC)iddict.h:$(PSSRC)icstate.h
$(PSSRC)iddict.h:$(PSSRC)idsdata.h
$(PSSRC)iddict.h:$(PSSRC)iesdata.h
@@ -3831,7 +3833,6 @@ $(PSSRC)iddict.h:$(PSSRC)opdef.h
$(PSSRC)iddict.h:$(PSSRC)files.h
$(PSSRC)iddict.h:$(PSSRC)idict.h
$(PSSRC)iddict.h:$(PSSRC)iddstack.h
-$(PSSRC)iddict.h:$(GLSRC)stream.h
$(PSSRC)iddict.h:$(PSSRC)store.h
$(PSSRC)iddict.h:$(PSSRC)iosdata.h
$(PSSRC)iddict.h:$(PSSRC)ialloc.h
@@ -3840,53 +3841,54 @@ $(PSSRC)iddict.h:$(PSSRC)isdata.h
$(PSSRC)iddict.h:$(PSSRC)imemory.h
$(PSSRC)iddict.h:$(PSSRC)ivmspace.h
$(PSSRC)iddict.h:$(PSSRC)iref.h
-$(PSSRC)iddict.h:$(GLSRC)gxalloc.h
$(PSSRC)iddict.h:$(GLSRC)gsgc.h
+$(PSSRC)iddict.h:$(GLSRC)gxalloc.h
$(PSSRC)iddict.h:$(GLSRC)gxobj.h
$(PSSRC)iddict.h:$(GLSRC)gsnamecl.h
-$(PSSRC)iddict.h:$(GLSRC)gxiodev.h
+$(PSSRC)iddict.h:$(GLSRC)stream.h
$(PSSRC)iddict.h:$(GLSRC)gxcspace.h
-$(PSSRC)iddict.h:$(GLSRC)stat_.h
-$(PSSRC)iddict.h:$(GLSRC)gxfrac.h
+$(PSSRC)iddict.h:$(GLSRC)gxiodev.h
$(PSSRC)iddict.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iddict.h:$(GLSRC)gxfrac.h
$(PSSRC)iddict.h:$(GLSRC)gscms.h
-$(PSSRC)iddict.h:$(GLSRC)gsdevice.h
$(PSSRC)iddict.h:$(GLSRC)gscspace.h
+$(PSSRC)iddict.h:$(GLSRC)gsdevice.h
$(PSSRC)iddict.h:$(GLSRC)gxarith.h
-$(PSSRC)iddict.h:$(GLSRC)gsrefct.h
-$(PSSRC)iddict.h:$(GLSRC)gsiparam.h
$(PSSRC)iddict.h:$(GLSRC)gxhttile.h
-$(PSSRC)iddict.h:$(GLSRC)gp.h
-$(PSSRC)iddict.h:$(GLSRC)memento.h
-$(PSSRC)iddict.h:$(GLSRC)gsparam.h
-$(PSSRC)iddict.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iddict.h:$(GLSRC)gsiparam.h
$(PSSRC)iddict.h:$(GLSRC)gxbitmap.h
-$(PSSRC)iddict.h:$(GLSRC)srdline.h
+$(PSSRC)iddict.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iddict.h:$(GLSRC)gsrefct.h
+$(PSSRC)iddict.h:$(GLSRC)gsparam.h
+$(PSSRC)iddict.h:$(GLSRC)gp.h
+$(PSSRC)iddict.h:$(GLSRC)gsccolor.h
$(PSSRC)iddict.h:$(GLSRC)gsstruct.h
$(PSSRC)iddict.h:$(GLSRC)gxsync.h
-$(PSSRC)iddict.h:$(GLSRC)gscsel.h
+$(PSSRC)iddict.h:$(GLSRC)srdline.h
$(PSSRC)iddict.h:$(GLSRC)scommon.h
+$(PSSRC)iddict.h:$(GLSRC)memento.h
+$(PSSRC)iddict.h:$(GLSRC)gscsel.h
$(PSSRC)iddict.h:$(GLSRC)gsbitmap.h
$(PSSRC)iddict.h:$(GLSRC)gsfname.h
-$(PSSRC)iddict.h:$(GLSRC)gsccolor.h
$(PSSRC)iddict.h:$(GLSRC)gsstype.h
+$(PSSRC)iddict.h:$(GLSRC)stat_.h
$(PSSRC)iddict.h:$(GLSRC)gsmemory.h
$(PSSRC)iddict.h:$(GLSRC)gpsync.h
-$(PSSRC)iddict.h:$(GLSRC)gpgetenv.h
$(PSSRC)iddict.h:$(GLSRC)memory_.h
+$(PSSRC)iddict.h:$(GLSRC)gpgetenv.h
$(PSSRC)iddict.h:$(GLSRC)gslibctx.h
$(PSSRC)iddict.h:$(GLSRC)gscdefs.h
+$(PSSRC)iddict.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iddict.h:$(GLSRC)gsalloc.h
+$(PSSRC)iddict.h:$(GLSRC)stdio_.h
$(PSSRC)iddict.h:$(GLSRC)gxcindex.h
-$(PSSRC)iddict.h:$(GLSRC)stdint_.h
$(PSSRC)iddict.h:$(GLSRC)gsgstate.h
-$(PSSRC)iddict.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iddict.h:$(GLSRC)stdio_.h
-$(PSSRC)iddict.h:$(GLSRC)gstypes.h
+$(PSSRC)iddict.h:$(GLSRC)stdint_.h
+$(PSSRC)iddict.h:$(GLSRC)gssprintf.h
$(PSSRC)iddict.h:$(GLSRC)std.h
+$(PSSRC)iddict.h:$(GLSRC)gstypes.h
$(PSSRC)iddict.h:$(GLSRC)stdpre.h
$(PSSRC)iddict.h:$(GLGEN)arch.h
-$(PSSRC)iddict.h:$(GLSRC)gssprintf.h
$(PSSRC)dstack.h:$(PSSRC)idstack.h
$(PSSRC)dstack.h:$(PSSRC)icstate.h
$(PSSRC)dstack.h:$(PSSRC)idsdata.h
@@ -3896,7 +3898,6 @@ $(PSSRC)dstack.h:$(PSSRC)opdef.h
$(PSSRC)dstack.h:$(PSSRC)files.h
$(PSSRC)dstack.h:$(PSSRC)iddstack.h
$(PSSRC)dstack.h:$(PSSRC)istack.h
-$(PSSRC)dstack.h:$(GLSRC)stream.h
$(PSSRC)dstack.h:$(PSSRC)store.h
$(PSSRC)dstack.h:$(PSSRC)iosdata.h
$(PSSRC)dstack.h:$(PSSRC)ialloc.h
@@ -3905,53 +3906,54 @@ $(PSSRC)dstack.h:$(PSSRC)isdata.h
$(PSSRC)dstack.h:$(PSSRC)imemory.h
$(PSSRC)dstack.h:$(PSSRC)ivmspace.h
$(PSSRC)dstack.h:$(PSSRC)iref.h
-$(PSSRC)dstack.h:$(GLSRC)gxalloc.h
$(PSSRC)dstack.h:$(GLSRC)gsgc.h
+$(PSSRC)dstack.h:$(GLSRC)gxalloc.h
$(PSSRC)dstack.h:$(GLSRC)gxobj.h
$(PSSRC)dstack.h:$(GLSRC)gsnamecl.h
-$(PSSRC)dstack.h:$(GLSRC)gxiodev.h
+$(PSSRC)dstack.h:$(GLSRC)stream.h
$(PSSRC)dstack.h:$(GLSRC)gxcspace.h
-$(PSSRC)dstack.h:$(GLSRC)stat_.h
-$(PSSRC)dstack.h:$(GLSRC)gxfrac.h
+$(PSSRC)dstack.h:$(GLSRC)gxiodev.h
$(PSSRC)dstack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)dstack.h:$(GLSRC)gxfrac.h
$(PSSRC)dstack.h:$(GLSRC)gscms.h
-$(PSSRC)dstack.h:$(GLSRC)gsdevice.h
$(PSSRC)dstack.h:$(GLSRC)gscspace.h
+$(PSSRC)dstack.h:$(GLSRC)gsdevice.h
$(PSSRC)dstack.h:$(GLSRC)gxarith.h
-$(PSSRC)dstack.h:$(GLSRC)gsrefct.h
-$(PSSRC)dstack.h:$(GLSRC)gsiparam.h
$(PSSRC)dstack.h:$(GLSRC)gxhttile.h
-$(PSSRC)dstack.h:$(GLSRC)gp.h
-$(PSSRC)dstack.h:$(GLSRC)memento.h
-$(PSSRC)dstack.h:$(GLSRC)gsparam.h
-$(PSSRC)dstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)dstack.h:$(GLSRC)gsiparam.h
$(PSSRC)dstack.h:$(GLSRC)gxbitmap.h
-$(PSSRC)dstack.h:$(GLSRC)srdline.h
+$(PSSRC)dstack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)dstack.h:$(GLSRC)gsrefct.h
+$(PSSRC)dstack.h:$(GLSRC)gsparam.h
+$(PSSRC)dstack.h:$(GLSRC)gp.h
+$(PSSRC)dstack.h:$(GLSRC)gsccolor.h
$(PSSRC)dstack.h:$(GLSRC)gsstruct.h
$(PSSRC)dstack.h:$(GLSRC)gxsync.h
-$(PSSRC)dstack.h:$(GLSRC)gscsel.h
+$(PSSRC)dstack.h:$(GLSRC)srdline.h
$(PSSRC)dstack.h:$(GLSRC)scommon.h
+$(PSSRC)dstack.h:$(GLSRC)memento.h
+$(PSSRC)dstack.h:$(GLSRC)gscsel.h
$(PSSRC)dstack.h:$(GLSRC)gsbitmap.h
$(PSSRC)dstack.h:$(GLSRC)gsfname.h
-$(PSSRC)dstack.h:$(GLSRC)gsccolor.h
$(PSSRC)dstack.h:$(GLSRC)gsstype.h
+$(PSSRC)dstack.h:$(GLSRC)stat_.h
$(PSSRC)dstack.h:$(GLSRC)gsmemory.h
$(PSSRC)dstack.h:$(GLSRC)gpsync.h
-$(PSSRC)dstack.h:$(GLSRC)gpgetenv.h
$(PSSRC)dstack.h:$(GLSRC)memory_.h
+$(PSSRC)dstack.h:$(GLSRC)gpgetenv.h
$(PSSRC)dstack.h:$(GLSRC)gslibctx.h
$(PSSRC)dstack.h:$(GLSRC)gscdefs.h
+$(PSSRC)dstack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)dstack.h:$(GLSRC)gsalloc.h
+$(PSSRC)dstack.h:$(GLSRC)stdio_.h
$(PSSRC)dstack.h:$(GLSRC)gxcindex.h
-$(PSSRC)dstack.h:$(GLSRC)stdint_.h
$(PSSRC)dstack.h:$(GLSRC)gsgstate.h
-$(PSSRC)dstack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)dstack.h:$(GLSRC)stdio_.h
-$(PSSRC)dstack.h:$(GLSRC)gstypes.h
+$(PSSRC)dstack.h:$(GLSRC)stdint_.h
+$(PSSRC)dstack.h:$(GLSRC)gssprintf.h
$(PSSRC)dstack.h:$(GLSRC)std.h
+$(PSSRC)dstack.h:$(GLSRC)gstypes.h
$(PSSRC)dstack.h:$(GLSRC)stdpre.h
$(PSSRC)dstack.h:$(GLGEN)arch.h
-$(PSSRC)dstack.h:$(GLSRC)gssprintf.h
$(PSSRC)estack.h:$(PSSRC)iestack.h
$(PSSRC)estack.h:$(PSSRC)icstate.h
$(PSSRC)estack.h:$(PSSRC)idsdata.h
@@ -3961,7 +3963,6 @@ $(PSSRC)estack.h:$(PSSRC)opdef.h
$(PSSRC)estack.h:$(PSSRC)files.h
$(PSSRC)estack.h:$(PSSRC)iddstack.h
$(PSSRC)estack.h:$(PSSRC)istack.h
-$(PSSRC)estack.h:$(GLSRC)stream.h
$(PSSRC)estack.h:$(PSSRC)store.h
$(PSSRC)estack.h:$(PSSRC)iosdata.h
$(PSSRC)estack.h:$(PSSRC)ialloc.h
@@ -3970,53 +3971,54 @@ $(PSSRC)estack.h:$(PSSRC)isdata.h
$(PSSRC)estack.h:$(PSSRC)imemory.h
$(PSSRC)estack.h:$(PSSRC)ivmspace.h
$(PSSRC)estack.h:$(PSSRC)iref.h
-$(PSSRC)estack.h:$(GLSRC)gxalloc.h
$(PSSRC)estack.h:$(GLSRC)gsgc.h
+$(PSSRC)estack.h:$(GLSRC)gxalloc.h
$(PSSRC)estack.h:$(GLSRC)gxobj.h
$(PSSRC)estack.h:$(GLSRC)gsnamecl.h
-$(PSSRC)estack.h:$(GLSRC)gxiodev.h
+$(PSSRC)estack.h:$(GLSRC)stream.h
$(PSSRC)estack.h:$(GLSRC)gxcspace.h
-$(PSSRC)estack.h:$(GLSRC)stat_.h
-$(PSSRC)estack.h:$(GLSRC)gxfrac.h
+$(PSSRC)estack.h:$(GLSRC)gxiodev.h
$(PSSRC)estack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)estack.h:$(GLSRC)gxfrac.h
$(PSSRC)estack.h:$(GLSRC)gscms.h
-$(PSSRC)estack.h:$(GLSRC)gsdevice.h
$(PSSRC)estack.h:$(GLSRC)gscspace.h
+$(PSSRC)estack.h:$(GLSRC)gsdevice.h
$(PSSRC)estack.h:$(GLSRC)gxarith.h
-$(PSSRC)estack.h:$(GLSRC)gsrefct.h
-$(PSSRC)estack.h:$(GLSRC)gsiparam.h
$(PSSRC)estack.h:$(GLSRC)gxhttile.h
-$(PSSRC)estack.h:$(GLSRC)gp.h
-$(PSSRC)estack.h:$(GLSRC)memento.h
-$(PSSRC)estack.h:$(GLSRC)gsparam.h
-$(PSSRC)estack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)estack.h:$(GLSRC)gsiparam.h
$(PSSRC)estack.h:$(GLSRC)gxbitmap.h
-$(PSSRC)estack.h:$(GLSRC)srdline.h
+$(PSSRC)estack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)estack.h:$(GLSRC)gsrefct.h
+$(PSSRC)estack.h:$(GLSRC)gsparam.h
+$(PSSRC)estack.h:$(GLSRC)gp.h
+$(PSSRC)estack.h:$(GLSRC)gsccolor.h
$(PSSRC)estack.h:$(GLSRC)gsstruct.h
$(PSSRC)estack.h:$(GLSRC)gxsync.h
-$(PSSRC)estack.h:$(GLSRC)gscsel.h
+$(PSSRC)estack.h:$(GLSRC)srdline.h
$(PSSRC)estack.h:$(GLSRC)scommon.h
+$(PSSRC)estack.h:$(GLSRC)memento.h
+$(PSSRC)estack.h:$(GLSRC)gscsel.h
$(PSSRC)estack.h:$(GLSRC)gsbitmap.h
$(PSSRC)estack.h:$(GLSRC)gsfname.h
-$(PSSRC)estack.h:$(GLSRC)gsccolor.h
$(PSSRC)estack.h:$(GLSRC)gsstype.h
+$(PSSRC)estack.h:$(GLSRC)stat_.h
$(PSSRC)estack.h:$(GLSRC)gsmemory.h
$(PSSRC)estack.h:$(GLSRC)gpsync.h
-$(PSSRC)estack.h:$(GLSRC)gpgetenv.h
$(PSSRC)estack.h:$(GLSRC)memory_.h
+$(PSSRC)estack.h:$(GLSRC)gpgetenv.h
$(PSSRC)estack.h:$(GLSRC)gslibctx.h
$(PSSRC)estack.h:$(GLSRC)gscdefs.h
+$(PSSRC)estack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)estack.h:$(GLSRC)gsalloc.h
+$(PSSRC)estack.h:$(GLSRC)stdio_.h
$(PSSRC)estack.h:$(GLSRC)gxcindex.h
-$(PSSRC)estack.h:$(GLSRC)stdint_.h
$(PSSRC)estack.h:$(GLSRC)gsgstate.h
-$(PSSRC)estack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)estack.h:$(GLSRC)stdio_.h
-$(PSSRC)estack.h:$(GLSRC)gstypes.h
+$(PSSRC)estack.h:$(GLSRC)stdint_.h
+$(PSSRC)estack.h:$(GLSRC)gssprintf.h
$(PSSRC)estack.h:$(GLSRC)std.h
+$(PSSRC)estack.h:$(GLSRC)gstypes.h
$(PSSRC)estack.h:$(GLSRC)stdpre.h
$(PSSRC)estack.h:$(GLGEN)arch.h
-$(PSSRC)estack.h:$(GLSRC)gssprintf.h
$(PSSRC)ostack.h:$(PSSRC)icstate.h
$(PSSRC)ostack.h:$(PSSRC)idsdata.h
$(PSSRC)ostack.h:$(PSSRC)iesdata.h
@@ -4026,7 +4028,6 @@ $(PSSRC)ostack.h:$(PSSRC)opdef.h
$(PSSRC)ostack.h:$(PSSRC)files.h
$(PSSRC)ostack.h:$(PSSRC)iddstack.h
$(PSSRC)ostack.h:$(PSSRC)istack.h
-$(PSSRC)ostack.h:$(GLSRC)stream.h
$(PSSRC)ostack.h:$(PSSRC)store.h
$(PSSRC)ostack.h:$(PSSRC)iosdata.h
$(PSSRC)ostack.h:$(PSSRC)ialloc.h
@@ -4035,53 +4036,54 @@ $(PSSRC)ostack.h:$(PSSRC)isdata.h
$(PSSRC)ostack.h:$(PSSRC)imemory.h
$(PSSRC)ostack.h:$(PSSRC)ivmspace.h
$(PSSRC)ostack.h:$(PSSRC)iref.h
-$(PSSRC)ostack.h:$(GLSRC)gxalloc.h
$(PSSRC)ostack.h:$(GLSRC)gsgc.h
+$(PSSRC)ostack.h:$(GLSRC)gxalloc.h
$(PSSRC)ostack.h:$(GLSRC)gxobj.h
$(PSSRC)ostack.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ostack.h:$(GLSRC)gxiodev.h
+$(PSSRC)ostack.h:$(GLSRC)stream.h
$(PSSRC)ostack.h:$(GLSRC)gxcspace.h
-$(PSSRC)ostack.h:$(GLSRC)stat_.h
-$(PSSRC)ostack.h:$(GLSRC)gxfrac.h
+$(PSSRC)ostack.h:$(GLSRC)gxiodev.h
$(PSSRC)ostack.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ostack.h:$(GLSRC)gxfrac.h
$(PSSRC)ostack.h:$(GLSRC)gscms.h
-$(PSSRC)ostack.h:$(GLSRC)gsdevice.h
$(PSSRC)ostack.h:$(GLSRC)gscspace.h
+$(PSSRC)ostack.h:$(GLSRC)gsdevice.h
$(PSSRC)ostack.h:$(GLSRC)gxarith.h
-$(PSSRC)ostack.h:$(GLSRC)gsrefct.h
-$(PSSRC)ostack.h:$(GLSRC)gsiparam.h
$(PSSRC)ostack.h:$(GLSRC)gxhttile.h
-$(PSSRC)ostack.h:$(GLSRC)gp.h
-$(PSSRC)ostack.h:$(GLSRC)memento.h
-$(PSSRC)ostack.h:$(GLSRC)gsparam.h
-$(PSSRC)ostack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ostack.h:$(GLSRC)gsiparam.h
$(PSSRC)ostack.h:$(GLSRC)gxbitmap.h
-$(PSSRC)ostack.h:$(GLSRC)srdline.h
+$(PSSRC)ostack.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ostack.h:$(GLSRC)gsrefct.h
+$(PSSRC)ostack.h:$(GLSRC)gsparam.h
+$(PSSRC)ostack.h:$(GLSRC)gp.h
+$(PSSRC)ostack.h:$(GLSRC)gsccolor.h
$(PSSRC)ostack.h:$(GLSRC)gsstruct.h
$(PSSRC)ostack.h:$(GLSRC)gxsync.h
-$(PSSRC)ostack.h:$(GLSRC)gscsel.h
+$(PSSRC)ostack.h:$(GLSRC)srdline.h
$(PSSRC)ostack.h:$(GLSRC)scommon.h
+$(PSSRC)ostack.h:$(GLSRC)memento.h
+$(PSSRC)ostack.h:$(GLSRC)gscsel.h
$(PSSRC)ostack.h:$(GLSRC)gsbitmap.h
$(PSSRC)ostack.h:$(GLSRC)gsfname.h
-$(PSSRC)ostack.h:$(GLSRC)gsccolor.h
$(PSSRC)ostack.h:$(GLSRC)gsstype.h
+$(PSSRC)ostack.h:$(GLSRC)stat_.h
$(PSSRC)ostack.h:$(GLSRC)gsmemory.h
$(PSSRC)ostack.h:$(GLSRC)gpsync.h
-$(PSSRC)ostack.h:$(GLSRC)gpgetenv.h
$(PSSRC)ostack.h:$(GLSRC)memory_.h
+$(PSSRC)ostack.h:$(GLSRC)gpgetenv.h
$(PSSRC)ostack.h:$(GLSRC)gslibctx.h
$(PSSRC)ostack.h:$(GLSRC)gscdefs.h
+$(PSSRC)ostack.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ostack.h:$(GLSRC)gsalloc.h
+$(PSSRC)ostack.h:$(GLSRC)stdio_.h
$(PSSRC)ostack.h:$(GLSRC)gxcindex.h
-$(PSSRC)ostack.h:$(GLSRC)stdint_.h
$(PSSRC)ostack.h:$(GLSRC)gsgstate.h
-$(PSSRC)ostack.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ostack.h:$(GLSRC)stdio_.h
-$(PSSRC)ostack.h:$(GLSRC)gstypes.h
+$(PSSRC)ostack.h:$(GLSRC)stdint_.h
+$(PSSRC)ostack.h:$(GLSRC)gssprintf.h
$(PSSRC)ostack.h:$(GLSRC)std.h
+$(PSSRC)ostack.h:$(GLSRC)gstypes.h
$(PSSRC)ostack.h:$(GLSRC)stdpre.h
$(PSSRC)ostack.h:$(GLGEN)arch.h
-$(PSSRC)ostack.h:$(GLSRC)gssprintf.h
$(PSSRC)oper.h:$(PSSRC)ostack.h
$(PSSRC)oper.h:$(PSSRC)icstate.h
$(PSSRC)oper.h:$(PSSRC)idsdata.h
@@ -4092,176 +4094,176 @@ $(PSSRC)oper.h:$(PSSRC)opdef.h
$(PSSRC)oper.h:$(PSSRC)files.h
$(PSSRC)oper.h:$(PSSRC)iddstack.h
$(PSSRC)oper.h:$(PSSRC)istack.h
-$(PSSRC)oper.h:$(GLSRC)stream.h
$(PSSRC)oper.h:$(PSSRC)store.h
$(PSSRC)oper.h:$(PSSRC)iosdata.h
$(PSSRC)oper.h:$(PSSRC)iutil.h
$(PSSRC)oper.h:$(PSSRC)ialloc.h
-$(PSSRC)oper.h:$(PSSRC)ierrors.h
$(PSSRC)oper.h:$(PSSRC)idosave.h
+$(PSSRC)oper.h:$(PSSRC)ierrors.h
$(PSSRC)oper.h:$(PSSRC)opcheck.h
$(PSSRC)oper.h:$(PSSRC)isdata.h
$(PSSRC)oper.h:$(PSSRC)imemory.h
$(PSSRC)oper.h:$(PSSRC)opextern.h
$(PSSRC)oper.h:$(PSSRC)ivmspace.h
$(PSSRC)oper.h:$(PSSRC)iref.h
-$(PSSRC)oper.h:$(GLSRC)gxalloc.h
$(PSSRC)oper.h:$(GLSRC)gsgc.h
+$(PSSRC)oper.h:$(GLSRC)gxalloc.h
$(PSSRC)oper.h:$(GLSRC)gxobj.h
$(PSSRC)oper.h:$(GLSRC)gsnamecl.h
-$(PSSRC)oper.h:$(GLSRC)gxiodev.h
+$(PSSRC)oper.h:$(GLSRC)stream.h
$(PSSRC)oper.h:$(GLSRC)gxcspace.h
-$(PSSRC)oper.h:$(GLSRC)stat_.h
-$(PSSRC)oper.h:$(GLSRC)gxfrac.h
+$(PSSRC)oper.h:$(GLSRC)gxiodev.h
$(PSSRC)oper.h:$(GLSRC)gsdcolor.h
+$(PSSRC)oper.h:$(GLSRC)gxfrac.h
$(PSSRC)oper.h:$(GLSRC)gscms.h
-$(PSSRC)oper.h:$(GLSRC)gsdevice.h
$(PSSRC)oper.h:$(GLSRC)gscspace.h
+$(PSSRC)oper.h:$(GLSRC)gsdevice.h
$(PSSRC)oper.h:$(GLSRC)gxarith.h
-$(PSSRC)oper.h:$(GLSRC)gsrefct.h
-$(PSSRC)oper.h:$(GLSRC)gsiparam.h
$(PSSRC)oper.h:$(GLSRC)gxhttile.h
-$(PSSRC)oper.h:$(GLSRC)gp.h
-$(PSSRC)oper.h:$(GLSRC)memento.h
-$(PSSRC)oper.h:$(GLSRC)gsparam.h
-$(PSSRC)oper.h:$(GLSRC)gsmatrix.h
+$(PSSRC)oper.h:$(GLSRC)gsiparam.h
$(PSSRC)oper.h:$(GLSRC)gxbitmap.h
-$(PSSRC)oper.h:$(GLSRC)srdline.h
+$(PSSRC)oper.h:$(GLSRC)gsmatrix.h
+$(PSSRC)oper.h:$(GLSRC)gsrefct.h
+$(PSSRC)oper.h:$(GLSRC)gsparam.h
+$(PSSRC)oper.h:$(GLSRC)gp.h
+$(PSSRC)oper.h:$(GLSRC)gsccolor.h
$(PSSRC)oper.h:$(GLSRC)gsstruct.h
-$(PSSRC)oper.h:$(GLSRC)gserrors.h
$(PSSRC)oper.h:$(GLSRC)gxsync.h
-$(PSSRC)oper.h:$(GLSRC)gscsel.h
+$(PSSRC)oper.h:$(GLSRC)srdline.h
+$(PSSRC)oper.h:$(GLSRC)gserrors.h
$(PSSRC)oper.h:$(GLSRC)scommon.h
+$(PSSRC)oper.h:$(GLSRC)memento.h
+$(PSSRC)oper.h:$(GLSRC)gscsel.h
$(PSSRC)oper.h:$(GLSRC)gsbitmap.h
$(PSSRC)oper.h:$(GLSRC)gsfname.h
-$(PSSRC)oper.h:$(GLSRC)gsccolor.h
$(PSSRC)oper.h:$(GLSRC)gsstype.h
+$(PSSRC)oper.h:$(GLSRC)stat_.h
$(PSSRC)oper.h:$(GLSRC)gsmemory.h
$(PSSRC)oper.h:$(GLSRC)gpsync.h
-$(PSSRC)oper.h:$(GLSRC)gpgetenv.h
$(PSSRC)oper.h:$(GLSRC)memory_.h
+$(PSSRC)oper.h:$(GLSRC)gpgetenv.h
$(PSSRC)oper.h:$(GLSRC)gslibctx.h
$(PSSRC)oper.h:$(GLSRC)gscdefs.h
+$(PSSRC)oper.h:$(GLSRC)gs_dll_call.h
$(PSSRC)oper.h:$(GLSRC)gsalloc.h
+$(PSSRC)oper.h:$(GLSRC)stdio_.h
$(PSSRC)oper.h:$(GLSRC)gxcindex.h
-$(PSSRC)oper.h:$(GLSRC)stdint_.h
$(PSSRC)oper.h:$(GLSRC)gsgstate.h
-$(PSSRC)oper.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)oper.h:$(GLSRC)stdio_.h
-$(PSSRC)oper.h:$(GLSRC)gstypes.h
+$(PSSRC)oper.h:$(GLSRC)stdint_.h
+$(PSSRC)oper.h:$(GLSRC)gssprintf.h
$(PSSRC)oper.h:$(GLSRC)std.h
+$(PSSRC)oper.h:$(GLSRC)gstypes.h
$(PSSRC)oper.h:$(GLSRC)stdpre.h
$(PSSRC)oper.h:$(GLGEN)arch.h
-$(PSSRC)oper.h:$(GLSRC)gssprintf.h
$(PSSRC)btoken.h:$(PSSRC)iref.h
$(PSSRC)btoken.h:$(GLSRC)gxalloc.h
$(PSSRC)btoken.h:$(GLSRC)gxobj.h
$(PSSRC)btoken.h:$(GLSRC)gsnamecl.h
$(PSSRC)btoken.h:$(GLSRC)gxcspace.h
-$(PSSRC)btoken.h:$(GLSRC)gxfrac.h
$(PSSRC)btoken.h:$(GLSRC)gsdcolor.h
+$(PSSRC)btoken.h:$(GLSRC)gxfrac.h
$(PSSRC)btoken.h:$(GLSRC)gscms.h
-$(PSSRC)btoken.h:$(GLSRC)gsdevice.h
$(PSSRC)btoken.h:$(GLSRC)gscspace.h
+$(PSSRC)btoken.h:$(GLSRC)gsdevice.h
$(PSSRC)btoken.h:$(GLSRC)gxarith.h
-$(PSSRC)btoken.h:$(GLSRC)gsrefct.h
-$(PSSRC)btoken.h:$(GLSRC)gsiparam.h
$(PSSRC)btoken.h:$(GLSRC)gxhttile.h
-$(PSSRC)btoken.h:$(GLSRC)memento.h
-$(PSSRC)btoken.h:$(GLSRC)gsparam.h
-$(PSSRC)btoken.h:$(GLSRC)gsmatrix.h
+$(PSSRC)btoken.h:$(GLSRC)gsiparam.h
$(PSSRC)btoken.h:$(GLSRC)gxbitmap.h
+$(PSSRC)btoken.h:$(GLSRC)gsmatrix.h
+$(PSSRC)btoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)btoken.h:$(GLSRC)gsparam.h
+$(PSSRC)btoken.h:$(GLSRC)gsccolor.h
$(PSSRC)btoken.h:$(GLSRC)gsstruct.h
$(PSSRC)btoken.h:$(GLSRC)gxsync.h
-$(PSSRC)btoken.h:$(GLSRC)gscsel.h
$(PSSRC)btoken.h:$(GLSRC)scommon.h
+$(PSSRC)btoken.h:$(GLSRC)memento.h
+$(PSSRC)btoken.h:$(GLSRC)gscsel.h
$(PSSRC)btoken.h:$(GLSRC)gsbitmap.h
-$(PSSRC)btoken.h:$(GLSRC)gsccolor.h
$(PSSRC)btoken.h:$(GLSRC)gsstype.h
$(PSSRC)btoken.h:$(GLSRC)gsmemory.h
$(PSSRC)btoken.h:$(GLSRC)gpsync.h
$(PSSRC)btoken.h:$(GLSRC)gslibctx.h
+$(PSSRC)btoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)btoken.h:$(GLSRC)gsalloc.h
+$(PSSRC)btoken.h:$(GLSRC)stdio_.h
$(PSSRC)btoken.h:$(GLSRC)gxcindex.h
-$(PSSRC)btoken.h:$(GLSRC)stdint_.h
$(PSSRC)btoken.h:$(GLSRC)gsgstate.h
-$(PSSRC)btoken.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)btoken.h:$(GLSRC)stdio_.h
-$(PSSRC)btoken.h:$(GLSRC)gstypes.h
+$(PSSRC)btoken.h:$(GLSRC)stdint_.h
+$(PSSRC)btoken.h:$(GLSRC)gssprintf.h
$(PSSRC)btoken.h:$(GLSRC)std.h
+$(PSSRC)btoken.h:$(GLSRC)gstypes.h
$(PSSRC)btoken.h:$(GLSRC)stdpre.h
$(PSSRC)btoken.h:$(GLGEN)arch.h
-$(PSSRC)btoken.h:$(GLSRC)gssprintf.h
-$(PSSRC)files.h:$(GLSRC)stream.h
$(PSSRC)files.h:$(PSSRC)store.h
$(PSSRC)files.h:$(PSSRC)ialloc.h
$(PSSRC)files.h:$(PSSRC)idosave.h
$(PSSRC)files.h:$(PSSRC)imemory.h
$(PSSRC)files.h:$(PSSRC)ivmspace.h
$(PSSRC)files.h:$(PSSRC)iref.h
-$(PSSRC)files.h:$(GLSRC)gxalloc.h
$(PSSRC)files.h:$(GLSRC)gsgc.h
+$(PSSRC)files.h:$(GLSRC)gxalloc.h
$(PSSRC)files.h:$(GLSRC)gxobj.h
$(PSSRC)files.h:$(GLSRC)gsnamecl.h
-$(PSSRC)files.h:$(GLSRC)gxiodev.h
+$(PSSRC)files.h:$(GLSRC)stream.h
$(PSSRC)files.h:$(GLSRC)gxcspace.h
-$(PSSRC)files.h:$(GLSRC)stat_.h
-$(PSSRC)files.h:$(GLSRC)gxfrac.h
+$(PSSRC)files.h:$(GLSRC)gxiodev.h
$(PSSRC)files.h:$(GLSRC)gsdcolor.h
+$(PSSRC)files.h:$(GLSRC)gxfrac.h
$(PSSRC)files.h:$(GLSRC)gscms.h
-$(PSSRC)files.h:$(GLSRC)gsdevice.h
$(PSSRC)files.h:$(GLSRC)gscspace.h
+$(PSSRC)files.h:$(GLSRC)gsdevice.h
$(PSSRC)files.h:$(GLSRC)gxarith.h
-$(PSSRC)files.h:$(GLSRC)gsrefct.h
-$(PSSRC)files.h:$(GLSRC)gsiparam.h
$(PSSRC)files.h:$(GLSRC)gxhttile.h
-$(PSSRC)files.h:$(GLSRC)gp.h
-$(PSSRC)files.h:$(GLSRC)memento.h
-$(PSSRC)files.h:$(GLSRC)gsparam.h
-$(PSSRC)files.h:$(GLSRC)gsmatrix.h
+$(PSSRC)files.h:$(GLSRC)gsiparam.h
$(PSSRC)files.h:$(GLSRC)gxbitmap.h
-$(PSSRC)files.h:$(GLSRC)srdline.h
+$(PSSRC)files.h:$(GLSRC)gsmatrix.h
+$(PSSRC)files.h:$(GLSRC)gsrefct.h
+$(PSSRC)files.h:$(GLSRC)gsparam.h
+$(PSSRC)files.h:$(GLSRC)gp.h
+$(PSSRC)files.h:$(GLSRC)gsccolor.h
$(PSSRC)files.h:$(GLSRC)gsstruct.h
$(PSSRC)files.h:$(GLSRC)gxsync.h
-$(PSSRC)files.h:$(GLSRC)gscsel.h
+$(PSSRC)files.h:$(GLSRC)srdline.h
$(PSSRC)files.h:$(GLSRC)scommon.h
+$(PSSRC)files.h:$(GLSRC)memento.h
+$(PSSRC)files.h:$(GLSRC)gscsel.h
$(PSSRC)files.h:$(GLSRC)gsbitmap.h
$(PSSRC)files.h:$(GLSRC)gsfname.h
-$(PSSRC)files.h:$(GLSRC)gsccolor.h
$(PSSRC)files.h:$(GLSRC)gsstype.h
+$(PSSRC)files.h:$(GLSRC)stat_.h
$(PSSRC)files.h:$(GLSRC)gsmemory.h
$(PSSRC)files.h:$(GLSRC)gpsync.h
-$(PSSRC)files.h:$(GLSRC)gpgetenv.h
$(PSSRC)files.h:$(GLSRC)memory_.h
+$(PSSRC)files.h:$(GLSRC)gpgetenv.h
$(PSSRC)files.h:$(GLSRC)gslibctx.h
$(PSSRC)files.h:$(GLSRC)gscdefs.h
+$(PSSRC)files.h:$(GLSRC)gs_dll_call.h
$(PSSRC)files.h:$(GLSRC)gsalloc.h
+$(PSSRC)files.h:$(GLSRC)stdio_.h
$(PSSRC)files.h:$(GLSRC)gxcindex.h
-$(PSSRC)files.h:$(GLSRC)stdint_.h
$(PSSRC)files.h:$(GLSRC)gsgstate.h
-$(PSSRC)files.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)files.h:$(GLSRC)stdio_.h
-$(PSSRC)files.h:$(GLSRC)gstypes.h
+$(PSSRC)files.h:$(GLSRC)stdint_.h
+$(PSSRC)files.h:$(GLSRC)gssprintf.h
$(PSSRC)files.h:$(GLSRC)std.h
+$(PSSRC)files.h:$(GLSRC)gstypes.h
$(PSSRC)files.h:$(GLSRC)stdpre.h
$(PSSRC)files.h:$(GLGEN)arch.h
-$(PSSRC)files.h:$(GLSRC)gssprintf.h
$(PSSRC)psapi.h:$(GLSRC)gsdevice.h
-$(PSSRC)psapi.h:$(GLSRC)gsparam.h
$(PSSRC)psapi.h:$(GLSRC)gsmatrix.h
+$(PSSRC)psapi.h:$(GLSRC)gsparam.h
$(PSSRC)psapi.h:$(GLSRC)scommon.h
$(PSSRC)psapi.h:$(GLSRC)gsstype.h
$(PSSRC)psapi.h:$(GLSRC)gsmemory.h
$(PSSRC)psapi.h:$(GLSRC)gslibctx.h
-$(PSSRC)psapi.h:$(GLSRC)stdint_.h
-$(PSSRC)psapi.h:$(GLSRC)gsgstate.h
$(PSSRC)psapi.h:$(GLSRC)gs_dll_call.h
$(PSSRC)psapi.h:$(GLSRC)stdio_.h
-$(PSSRC)psapi.h:$(GLSRC)gstypes.h
+$(PSSRC)psapi.h:$(GLSRC)gsgstate.h
+$(PSSRC)psapi.h:$(GLSRC)stdint_.h
+$(PSSRC)psapi.h:$(GLSRC)gssprintf.h
$(PSSRC)psapi.h:$(GLSRC)std.h
+$(PSSRC)psapi.h:$(GLSRC)gstypes.h
$(PSSRC)psapi.h:$(GLSRC)stdpre.h
$(PSSRC)psapi.h:$(GLGEN)arch.h
-$(PSSRC)psapi.h:$(GLSRC)gssprintf.h
$(PSSRC)ichar.h:$(PSSRC)iostack.h
$(PSSRC)ichar.h:$(PSSRC)istack.h
$(PSSRC)ichar.h:$(PSSRC)iosdata.h
@@ -4270,54 +4272,54 @@ $(PSSRC)ichar.h:$(PSSRC)isdata.h
$(PSSRC)ichar.h:$(PSSRC)imemory.h
$(PSSRC)ichar.h:$(PSSRC)ivmspace.h
$(PSSRC)ichar.h:$(PSSRC)iref.h
-$(PSSRC)ichar.h:$(GLSRC)gxalloc.h
$(PSSRC)ichar.h:$(GLSRC)gsgc.h
-$(PSSRC)ichar.h:$(GLSRC)gxobj.h
+$(PSSRC)ichar.h:$(GLSRC)gxalloc.h
$(PSSRC)ichar.h:$(GLSRC)gstext.h
+$(PSSRC)ichar.h:$(GLSRC)gxobj.h
$(PSSRC)ichar.h:$(GLSRC)gsnamecl.h
$(PSSRC)ichar.h:$(GLSRC)gxcspace.h
+$(PSSRC)ichar.h:$(GLSRC)gsdcolor.h
$(PSSRC)ichar.h:$(GLSRC)gsfont.h
-$(PSSRC)ichar.h:$(GLSRC)gxpath.h
-$(PSSRC)ichar.h:$(GLSRC)gspenum.h
$(PSSRC)ichar.h:$(GLSRC)gxfrac.h
-$(PSSRC)ichar.h:$(GLSRC)gslparam.h
-$(PSSRC)ichar.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ichar.h:$(GLSRC)gsrect.h
$(PSSRC)ichar.h:$(GLSRC)gscms.h
-$(PSSRC)ichar.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar.h:$(GLSRC)gscspace.h
+$(PSSRC)ichar.h:$(GLSRC)gxpath.h
+$(PSSRC)ichar.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar.h:$(GLSRC)gxarith.h
+$(PSSRC)ichar.h:$(GLSRC)gspenum.h
+$(PSSRC)ichar.h:$(GLSRC)gxhttile.h
+$(PSSRC)ichar.h:$(GLSRC)gsrect.h
+$(PSSRC)ichar.h:$(GLSRC)gslparam.h
+$(PSSRC)ichar.h:$(GLSRC)gsiparam.h
+$(PSSRC)ichar.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ichar.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar.h:$(GLSRC)gscpm.h
$(PSSRC)ichar.h:$(GLSRC)gxfixed.h
$(PSSRC)ichar.h:$(GLSRC)gsrefct.h
-$(PSSRC)ichar.h:$(GLSRC)gscpm.h
-$(PSSRC)ichar.h:$(GLSRC)gsiparam.h
-$(PSSRC)ichar.h:$(GLSRC)gxhttile.h
-$(PSSRC)ichar.h:$(GLSRC)memento.h
$(PSSRC)ichar.h:$(GLSRC)gsparam.h
-$(PSSRC)ichar.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ichar.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ichar.h:$(GLSRC)gsccolor.h
$(PSSRC)ichar.h:$(GLSRC)gsstruct.h
$(PSSRC)ichar.h:$(GLSRC)gxsync.h
-$(PSSRC)ichar.h:$(GLSRC)gscsel.h
$(PSSRC)ichar.h:$(GLSRC)scommon.h
+$(PSSRC)ichar.h:$(GLSRC)memento.h
+$(PSSRC)ichar.h:$(GLSRC)gscsel.h
$(PSSRC)ichar.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ichar.h:$(GLSRC)gsccolor.h
$(PSSRC)ichar.h:$(GLSRC)gsstype.h
$(PSSRC)ichar.h:$(GLSRC)gsmemory.h
$(PSSRC)ichar.h:$(GLSRC)gpsync.h
$(PSSRC)ichar.h:$(GLSRC)gslibctx.h
+$(PSSRC)ichar.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar.h:$(GLSRC)gsalloc.h
+$(PSSRC)ichar.h:$(GLSRC)stdio_.h
$(PSSRC)ichar.h:$(GLSRC)gxcindex.h
-$(PSSRC)ichar.h:$(GLSRC)stdint_.h
$(PSSRC)ichar.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar.h:$(GLSRC)stdint_.h
+$(PSSRC)ichar.h:$(GLSRC)gssprintf.h
$(PSSRC)ichar.h:$(GLSRC)gsccode.h
-$(PSSRC)ichar.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ichar.h:$(GLSRC)stdio_.h
-$(PSSRC)ichar.h:$(GLSRC)gstypes.h
$(PSSRC)ichar.h:$(GLSRC)std.h
+$(PSSRC)ichar.h:$(GLSRC)gstypes.h
$(PSSRC)ichar.h:$(GLSRC)stdpre.h
$(PSSRC)ichar.h:$(GLGEN)arch.h
-$(PSSRC)ichar.h:$(GLSRC)gssprintf.h
$(PSSRC)ichar1.h:$(GLSRC)gstype1.h
$(PSSRC)ichar1.h:$(GLSRC)gxfont.h
$(PSSRC)ichar1.h:$(GLSRC)gspath.h
@@ -4329,240 +4331,240 @@ $(PSSRC)ichar1.h:$(GLSRC)gsnotify.h
$(PSSRC)ichar1.h:$(GLSRC)gsfcmap.h
$(PSSRC)ichar1.h:$(PSSRC)iref.h
$(PSSRC)ichar1.h:$(GLSRC)gxalloc.h
-$(PSSRC)ichar1.h:$(GLSRC)gxobj.h
$(PSSRC)ichar1.h:$(GLSRC)gstext.h
+$(PSSRC)ichar1.h:$(GLSRC)gxobj.h
$(PSSRC)ichar1.h:$(GLSRC)gsnamecl.h
$(PSSRC)ichar1.h:$(GLSRC)gxcspace.h
+$(PSSRC)ichar1.h:$(GLSRC)gsuid.h
+$(PSSRC)ichar1.h:$(GLSRC)gsdcolor.h
$(PSSRC)ichar1.h:$(GLSRC)gsfont.h
-$(PSSRC)ichar1.h:$(GLSRC)gxpath.h
-$(PSSRC)ichar1.h:$(GLSRC)gspenum.h
+$(PSSRC)ichar1.h:$(GLSRC)gxftype.h
$(PSSRC)ichar1.h:$(GLSRC)gxfrac.h
-$(PSSRC)ichar1.h:$(GLSRC)gslparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ichar1.h:$(GLSRC)gsrect.h
$(PSSRC)ichar1.h:$(GLSRC)gscms.h
-$(PSSRC)ichar1.h:$(GLSRC)gxftype.h
-$(PSSRC)ichar1.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar1.h:$(GLSRC)gscspace.h
-$(PSSRC)ichar1.h:$(GLSRC)gsuid.h
+$(PSSRC)ichar1.h:$(GLSRC)gxpath.h
+$(PSSRC)ichar1.h:$(GLSRC)gsdevice.h
$(PSSRC)ichar1.h:$(GLSRC)gxarith.h
+$(PSSRC)ichar1.h:$(GLSRC)gspenum.h
+$(PSSRC)ichar1.h:$(GLSRC)gxhttile.h
+$(PSSRC)ichar1.h:$(GLSRC)gsrect.h
+$(PSSRC)ichar1.h:$(GLSRC)gslparam.h
+$(PSSRC)ichar1.h:$(GLSRC)gsiparam.h
+$(PSSRC)ichar1.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ichar1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ichar1.h:$(GLSRC)gscpm.h
$(PSSRC)ichar1.h:$(GLSRC)gxfixed.h
$(PSSRC)ichar1.h:$(GLSRC)gsrefct.h
-$(PSSRC)ichar1.h:$(GLSRC)gscpm.h
-$(PSSRC)ichar1.h:$(GLSRC)gsiparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gxhttile.h
-$(PSSRC)ichar1.h:$(GLSRC)memento.h
$(PSSRC)ichar1.h:$(GLSRC)gsparam.h
-$(PSSRC)ichar1.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ichar1.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ichar1.h:$(GLSRC)gsccolor.h
$(PSSRC)ichar1.h:$(GLSRC)gsstruct.h
$(PSSRC)ichar1.h:$(GLSRC)gxsync.h
-$(PSSRC)ichar1.h:$(GLSRC)gscsel.h
$(PSSRC)ichar1.h:$(GLSRC)scommon.h
+$(PSSRC)ichar1.h:$(GLSRC)memento.h
+$(PSSRC)ichar1.h:$(GLSRC)gscsel.h
$(PSSRC)ichar1.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ichar1.h:$(GLSRC)gsccolor.h
$(PSSRC)ichar1.h:$(GLSRC)gsstype.h
$(PSSRC)ichar1.h:$(GLSRC)gsmemory.h
$(PSSRC)ichar1.h:$(GLSRC)gpsync.h
$(PSSRC)ichar1.h:$(GLSRC)gslibctx.h
+$(PSSRC)ichar1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ichar1.h:$(GLSRC)gsalloc.h
+$(PSSRC)ichar1.h:$(GLSRC)stdio_.h
$(PSSRC)ichar1.h:$(GLSRC)gxcindex.h
-$(PSSRC)ichar1.h:$(GLSRC)stdint_.h
$(PSSRC)ichar1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ichar1.h:$(GLSRC)stdint_.h
+$(PSSRC)ichar1.h:$(GLSRC)gssprintf.h
$(PSSRC)ichar1.h:$(GLSRC)gsccode.h
-$(PSSRC)ichar1.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ichar1.h:$(GLSRC)stdio_.h
-$(PSSRC)ichar1.h:$(GLSRC)gstypes.h
$(PSSRC)ichar1.h:$(GLSRC)std.h
+$(PSSRC)ichar1.h:$(GLSRC)gstypes.h
$(PSSRC)ichar1.h:$(GLSRC)stdpre.h
$(PSSRC)ichar1.h:$(GLGEN)arch.h
-$(PSSRC)ichar1.h:$(GLSRC)gssprintf.h
$(PSSRC)icharout.h:$(GLSRC)gsgdata.h
$(PSSRC)icharout.h:$(GLSRC)gsgcache.h
$(PSSRC)icharout.h:$(GLSRC)gxfapi.h
$(PSSRC)icharout.h:$(PSSRC)iref.h
$(PSSRC)icharout.h:$(GLSRC)gxalloc.h
-$(PSSRC)icharout.h:$(GLSRC)gxobj.h
$(PSSRC)icharout.h:$(GLSRC)gstext.h
+$(PSSRC)icharout.h:$(GLSRC)gxobj.h
$(PSSRC)icharout.h:$(GLSRC)gsnamecl.h
$(PSSRC)icharout.h:$(GLSRC)gxcspace.h
+$(PSSRC)icharout.h:$(GLSRC)gsdcolor.h
$(PSSRC)icharout.h:$(GLSRC)gsfont.h
-$(PSSRC)icharout.h:$(GLSRC)gxpath.h
-$(PSSRC)icharout.h:$(GLSRC)gspenum.h
$(PSSRC)icharout.h:$(GLSRC)gxfrac.h
-$(PSSRC)icharout.h:$(GLSRC)gslparam.h
-$(PSSRC)icharout.h:$(GLSRC)gsdcolor.h
-$(PSSRC)icharout.h:$(GLSRC)gsrect.h
$(PSSRC)icharout.h:$(GLSRC)gscms.h
-$(PSSRC)icharout.h:$(GLSRC)gsdevice.h
$(PSSRC)icharout.h:$(GLSRC)gscspace.h
+$(PSSRC)icharout.h:$(GLSRC)gxpath.h
+$(PSSRC)icharout.h:$(GLSRC)gsdevice.h
$(PSSRC)icharout.h:$(GLSRC)gxarith.h
+$(PSSRC)icharout.h:$(GLSRC)gspenum.h
+$(PSSRC)icharout.h:$(GLSRC)gxhttile.h
+$(PSSRC)icharout.h:$(GLSRC)gsrect.h
+$(PSSRC)icharout.h:$(GLSRC)gslparam.h
+$(PSSRC)icharout.h:$(GLSRC)gsiparam.h
+$(PSSRC)icharout.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icharout.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icharout.h:$(GLSRC)gscpm.h
$(PSSRC)icharout.h:$(GLSRC)gxfixed.h
$(PSSRC)icharout.h:$(GLSRC)gsrefct.h
-$(PSSRC)icharout.h:$(GLSRC)gscpm.h
-$(PSSRC)icharout.h:$(GLSRC)gsiparam.h
-$(PSSRC)icharout.h:$(GLSRC)gxhttile.h
-$(PSSRC)icharout.h:$(GLSRC)memento.h
$(PSSRC)icharout.h:$(GLSRC)gsparam.h
-$(PSSRC)icharout.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icharout.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icharout.h:$(GLSRC)gsccolor.h
$(PSSRC)icharout.h:$(GLSRC)gsstruct.h
$(PSSRC)icharout.h:$(GLSRC)gxsync.h
-$(PSSRC)icharout.h:$(GLSRC)gscsel.h
$(PSSRC)icharout.h:$(GLSRC)scommon.h
+$(PSSRC)icharout.h:$(GLSRC)memento.h
+$(PSSRC)icharout.h:$(GLSRC)gscsel.h
$(PSSRC)icharout.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icharout.h:$(GLSRC)gsccolor.h
$(PSSRC)icharout.h:$(GLSRC)gsstype.h
$(PSSRC)icharout.h:$(GLSRC)gsmemory.h
$(PSSRC)icharout.h:$(GLSRC)gpsync.h
$(PSSRC)icharout.h:$(GLSRC)gslibctx.h
+$(PSSRC)icharout.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icharout.h:$(GLSRC)gsalloc.h
+$(PSSRC)icharout.h:$(GLSRC)stdio_.h
$(PSSRC)icharout.h:$(GLSRC)gxcindex.h
-$(PSSRC)icharout.h:$(GLSRC)stdint_.h
$(PSSRC)icharout.h:$(GLSRC)gsgstate.h
+$(PSSRC)icharout.h:$(GLSRC)stdint_.h
+$(PSSRC)icharout.h:$(GLSRC)gssprintf.h
$(PSSRC)icharout.h:$(GLSRC)gsccode.h
-$(PSSRC)icharout.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icharout.h:$(GLSRC)stdio_.h
-$(PSSRC)icharout.h:$(GLSRC)gstypes.h
$(PSSRC)icharout.h:$(GLSRC)std.h
+$(PSSRC)icharout.h:$(GLSRC)gstypes.h
$(PSSRC)icharout.h:$(GLSRC)stdpre.h
$(PSSRC)icharout.h:$(GLGEN)arch.h
-$(PSSRC)icharout.h:$(GLSRC)gssprintf.h
$(PSSRC)icolor.h:$(PSSRC)iref.h
$(PSSRC)icolor.h:$(GLSRC)gxalloc.h
$(PSSRC)icolor.h:$(GLSRC)gxobj.h
$(PSSRC)icolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)icolor.h:$(GLSRC)gxcspace.h
-$(PSSRC)icolor.h:$(GLSRC)gxtmap.h
-$(PSSRC)icolor.h:$(GLSRC)gxfrac.h
$(PSSRC)icolor.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icolor.h:$(GLSRC)gxfrac.h
$(PSSRC)icolor.h:$(GLSRC)gscms.h
-$(PSSRC)icolor.h:$(GLSRC)gsdevice.h
$(PSSRC)icolor.h:$(GLSRC)gscspace.h
+$(PSSRC)icolor.h:$(GLSRC)gsdevice.h
$(PSSRC)icolor.h:$(GLSRC)gxarith.h
-$(PSSRC)icolor.h:$(GLSRC)gsrefct.h
-$(PSSRC)icolor.h:$(GLSRC)gsiparam.h
$(PSSRC)icolor.h:$(GLSRC)gxhttile.h
-$(PSSRC)icolor.h:$(GLSRC)memento.h
-$(PSSRC)icolor.h:$(GLSRC)gsparam.h
-$(PSSRC)icolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icolor.h:$(GLSRC)gsiparam.h
$(PSSRC)icolor.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)icolor.h:$(GLSRC)gsparam.h
+$(PSSRC)icolor.h:$(GLSRC)gsccolor.h
$(PSSRC)icolor.h:$(GLSRC)gsstruct.h
$(PSSRC)icolor.h:$(GLSRC)gxsync.h
-$(PSSRC)icolor.h:$(GLSRC)gscsel.h
$(PSSRC)icolor.h:$(GLSRC)scommon.h
+$(PSSRC)icolor.h:$(GLSRC)memento.h
+$(PSSRC)icolor.h:$(GLSRC)gscsel.h
$(PSSRC)icolor.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icolor.h:$(GLSRC)gsccolor.h
$(PSSRC)icolor.h:$(GLSRC)gsstype.h
+$(PSSRC)icolor.h:$(GLSRC)gxtmap.h
$(PSSRC)icolor.h:$(GLSRC)gsmemory.h
$(PSSRC)icolor.h:$(GLSRC)gpsync.h
$(PSSRC)icolor.h:$(GLSRC)gslibctx.h
+$(PSSRC)icolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icolor.h:$(GLSRC)gsalloc.h
+$(PSSRC)icolor.h:$(GLSRC)stdio_.h
$(PSSRC)icolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)icolor.h:$(GLSRC)stdint_.h
$(PSSRC)icolor.h:$(GLSRC)gsgstate.h
-$(PSSRC)icolor.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icolor.h:$(GLSRC)stdio_.h
-$(PSSRC)icolor.h:$(GLSRC)gstypes.h
+$(PSSRC)icolor.h:$(GLSRC)stdint_.h
+$(PSSRC)icolor.h:$(GLSRC)gssprintf.h
$(PSSRC)icolor.h:$(GLSRC)std.h
+$(PSSRC)icolor.h:$(GLSRC)gstypes.h
$(PSSRC)icolor.h:$(GLSRC)stdpre.h
$(PSSRC)icolor.h:$(GLGEN)arch.h
-$(PSSRC)icolor.h:$(GLSRC)gssprintf.h
$(PSSRC)icremap.h:$(PSSRC)igstate.h
$(PSSRC)icremap.h:$(GLSRC)gsstate.h
$(PSSRC)icremap.h:$(GLSRC)gsovrc.h
$(PSSRC)icremap.h:$(GLSRC)gscolor.h
-$(PSSRC)icremap.h:$(GLSRC)gsline.h
$(PSSRC)icremap.h:$(GLSRC)gxcomp.h
+$(PSSRC)icremap.h:$(GLSRC)gsline.h
$(PSSRC)icremap.h:$(PSSRC)istruct.h
$(PSSRC)icremap.h:$(GLSRC)gxbitfmt.h
$(PSSRC)icremap.h:$(PSSRC)imemory.h
$(PSSRC)icremap.h:$(PSSRC)ivmspace.h
$(PSSRC)icremap.h:$(GLSRC)gsht.h
$(PSSRC)icremap.h:$(PSSRC)iref.h
-$(PSSRC)icremap.h:$(GLSRC)gxalloc.h
$(PSSRC)icremap.h:$(GLSRC)gsgc.h
+$(PSSRC)icremap.h:$(GLSRC)gxalloc.h
$(PSSRC)icremap.h:$(GLSRC)gxobj.h
-$(PSSRC)icremap.h:$(GLSRC)gxstate.h
$(PSSRC)icremap.h:$(GLSRC)gsnamecl.h
+$(PSSRC)icremap.h:$(GLSRC)gxstate.h
$(PSSRC)icremap.h:$(GLSRC)gxcspace.h
-$(PSSRC)icremap.h:$(GLSRC)gxtmap.h
-$(PSSRC)icremap.h:$(GLSRC)gxfrac.h
-$(PSSRC)icremap.h:$(GLSRC)gslparam.h
$(PSSRC)icremap.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icremap.h:$(GLSRC)gxfrac.h
$(PSSRC)icremap.h:$(GLSRC)gscms.h
-$(PSSRC)icremap.h:$(GLSRC)gsdevice.h
$(PSSRC)icremap.h:$(GLSRC)gscspace.h
+$(PSSRC)icremap.h:$(GLSRC)gsdevice.h
$(PSSRC)icremap.h:$(GLSRC)gxarith.h
-$(PSSRC)icremap.h:$(GLSRC)gsrefct.h
-$(PSSRC)icremap.h:$(GLSRC)gscpm.h
-$(PSSRC)icremap.h:$(GLSRC)gsiparam.h
$(PSSRC)icremap.h:$(GLSRC)gxhttile.h
-$(PSSRC)icremap.h:$(GLSRC)memento.h
-$(PSSRC)icremap.h:$(GLSRC)gsparam.h
-$(PSSRC)icremap.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icremap.h:$(GLSRC)gslparam.h
+$(PSSRC)icremap.h:$(GLSRC)gsiparam.h
$(PSSRC)icremap.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icremap.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icremap.h:$(GLSRC)gscpm.h
+$(PSSRC)icremap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icremap.h:$(GLSRC)gsparam.h
+$(PSSRC)icremap.h:$(GLSRC)gsccolor.h
$(PSSRC)icremap.h:$(GLSRC)gsstruct.h
$(PSSRC)icremap.h:$(GLSRC)gxsync.h
-$(PSSRC)icremap.h:$(GLSRC)gscsel.h
$(PSSRC)icremap.h:$(GLSRC)scommon.h
+$(PSSRC)icremap.h:$(GLSRC)memento.h
+$(PSSRC)icremap.h:$(GLSRC)gscsel.h
$(PSSRC)icremap.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icremap.h:$(GLSRC)gsccolor.h
$(PSSRC)icremap.h:$(GLSRC)gsstype.h
+$(PSSRC)icremap.h:$(GLSRC)gxtmap.h
$(PSSRC)icremap.h:$(GLSRC)gsmemory.h
$(PSSRC)icremap.h:$(GLSRC)gpsync.h
$(PSSRC)icremap.h:$(GLSRC)gslibctx.h
+$(PSSRC)icremap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icremap.h:$(GLSRC)gsalloc.h
+$(PSSRC)icremap.h:$(GLSRC)stdio_.h
$(PSSRC)icremap.h:$(GLSRC)gscompt.h
$(PSSRC)icremap.h:$(GLSRC)gxcindex.h
-$(PSSRC)icremap.h:$(GLSRC)stdint_.h
$(PSSRC)icremap.h:$(GLSRC)gsgstate.h
-$(PSSRC)icremap.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icremap.h:$(GLSRC)stdio_.h
-$(PSSRC)icremap.h:$(GLSRC)gstypes.h
+$(PSSRC)icremap.h:$(GLSRC)stdint_.h
+$(PSSRC)icremap.h:$(GLSRC)gssprintf.h
$(PSSRC)icremap.h:$(GLSRC)std.h
+$(PSSRC)icremap.h:$(GLSRC)gstypes.h
$(PSSRC)icremap.h:$(GLSRC)stdpre.h
$(PSSRC)icremap.h:$(GLGEN)arch.h
-$(PSSRC)icremap.h:$(GLSRC)gssprintf.h
$(PSSRC)icsmap.h:$(PSSRC)iref.h
$(PSSRC)icsmap.h:$(GLSRC)gxalloc.h
$(PSSRC)icsmap.h:$(GLSRC)gxobj.h
$(PSSRC)icsmap.h:$(GLSRC)gsnamecl.h
$(PSSRC)icsmap.h:$(GLSRC)gxcspace.h
-$(PSSRC)icsmap.h:$(GLSRC)gxfrac.h
$(PSSRC)icsmap.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icsmap.h:$(GLSRC)gxfrac.h
$(PSSRC)icsmap.h:$(GLSRC)gscms.h
-$(PSSRC)icsmap.h:$(GLSRC)gsdevice.h
$(PSSRC)icsmap.h:$(GLSRC)gscspace.h
+$(PSSRC)icsmap.h:$(GLSRC)gsdevice.h
$(PSSRC)icsmap.h:$(GLSRC)gxarith.h
-$(PSSRC)icsmap.h:$(GLSRC)gsrefct.h
-$(PSSRC)icsmap.h:$(GLSRC)gsiparam.h
$(PSSRC)icsmap.h:$(GLSRC)gxhttile.h
-$(PSSRC)icsmap.h:$(GLSRC)memento.h
-$(PSSRC)icsmap.h:$(GLSRC)gsparam.h
-$(PSSRC)icsmap.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icsmap.h:$(GLSRC)gsiparam.h
$(PSSRC)icsmap.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icsmap.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icsmap.h:$(GLSRC)gsrefct.h
+$(PSSRC)icsmap.h:$(GLSRC)gsparam.h
+$(PSSRC)icsmap.h:$(GLSRC)gsccolor.h
$(PSSRC)icsmap.h:$(GLSRC)gsstruct.h
$(PSSRC)icsmap.h:$(GLSRC)gxsync.h
-$(PSSRC)icsmap.h:$(GLSRC)gscsel.h
$(PSSRC)icsmap.h:$(GLSRC)scommon.h
+$(PSSRC)icsmap.h:$(GLSRC)memento.h
+$(PSSRC)icsmap.h:$(GLSRC)gscsel.h
$(PSSRC)icsmap.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icsmap.h:$(GLSRC)gsccolor.h
$(PSSRC)icsmap.h:$(GLSRC)gsstype.h
$(PSSRC)icsmap.h:$(GLSRC)gsmemory.h
$(PSSRC)icsmap.h:$(GLSRC)gpsync.h
$(PSSRC)icsmap.h:$(GLSRC)gslibctx.h
+$(PSSRC)icsmap.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icsmap.h:$(GLSRC)gsalloc.h
+$(PSSRC)icsmap.h:$(GLSRC)stdio_.h
$(PSSRC)icsmap.h:$(GLSRC)gxcindex.h
-$(PSSRC)icsmap.h:$(GLSRC)stdint_.h
$(PSSRC)icsmap.h:$(GLSRC)gsgstate.h
-$(PSSRC)icsmap.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icsmap.h:$(GLSRC)stdio_.h
-$(PSSRC)icsmap.h:$(GLSRC)gstypes.h
+$(PSSRC)icsmap.h:$(GLSRC)stdint_.h
+$(PSSRC)icsmap.h:$(GLSRC)gssprintf.h
$(PSSRC)icsmap.h:$(GLSRC)std.h
+$(PSSRC)icsmap.h:$(GLSRC)gstypes.h
$(PSSRC)icsmap.h:$(GLSRC)stdpre.h
$(PSSRC)icsmap.h:$(GLGEN)arch.h
-$(PSSRC)icsmap.h:$(GLSRC)gssprintf.h
$(PSSRC)idisp.h:$(PSSRC)imain.h
$(PSSRC)idisp.h:$(GLSRC)gsexit.h
$(PSSRC)idisp.h:$(PSSRC)iref.h
@@ -4570,40 +4572,40 @@ $(PSSRC)idisp.h:$(GLSRC)gxalloc.h
$(PSSRC)idisp.h:$(GLSRC)gxobj.h
$(PSSRC)idisp.h:$(GLSRC)gsnamecl.h
$(PSSRC)idisp.h:$(GLSRC)gxcspace.h
-$(PSSRC)idisp.h:$(GLSRC)gxfrac.h
$(PSSRC)idisp.h:$(GLSRC)gsdcolor.h
+$(PSSRC)idisp.h:$(GLSRC)gxfrac.h
$(PSSRC)idisp.h:$(GLSRC)gscms.h
-$(PSSRC)idisp.h:$(GLSRC)gsdevice.h
$(PSSRC)idisp.h:$(GLSRC)gscspace.h
+$(PSSRC)idisp.h:$(GLSRC)gsdevice.h
$(PSSRC)idisp.h:$(GLSRC)gxarith.h
-$(PSSRC)idisp.h:$(GLSRC)gsrefct.h
-$(PSSRC)idisp.h:$(GLSRC)gsiparam.h
$(PSSRC)idisp.h:$(GLSRC)gxhttile.h
-$(PSSRC)idisp.h:$(GLSRC)memento.h
-$(PSSRC)idisp.h:$(GLSRC)gsparam.h
-$(PSSRC)idisp.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idisp.h:$(GLSRC)gsiparam.h
$(PSSRC)idisp.h:$(GLSRC)gxbitmap.h
+$(PSSRC)idisp.h:$(GLSRC)gsmatrix.h
+$(PSSRC)idisp.h:$(GLSRC)gsrefct.h
+$(PSSRC)idisp.h:$(GLSRC)gsparam.h
+$(PSSRC)idisp.h:$(GLSRC)gsccolor.h
$(PSSRC)idisp.h:$(GLSRC)gsstruct.h
$(PSSRC)idisp.h:$(GLSRC)gxsync.h
-$(PSSRC)idisp.h:$(GLSRC)gscsel.h
$(PSSRC)idisp.h:$(GLSRC)scommon.h
+$(PSSRC)idisp.h:$(GLSRC)memento.h
+$(PSSRC)idisp.h:$(GLSRC)gscsel.h
$(PSSRC)idisp.h:$(GLSRC)gsbitmap.h
-$(PSSRC)idisp.h:$(GLSRC)gsccolor.h
$(PSSRC)idisp.h:$(GLSRC)gsstype.h
$(PSSRC)idisp.h:$(GLSRC)gsmemory.h
$(PSSRC)idisp.h:$(GLSRC)gpsync.h
$(PSSRC)idisp.h:$(GLSRC)gslibctx.h
+$(PSSRC)idisp.h:$(GLSRC)gs_dll_call.h
$(PSSRC)idisp.h:$(GLSRC)gsalloc.h
+$(PSSRC)idisp.h:$(GLSRC)stdio_.h
$(PSSRC)idisp.h:$(GLSRC)gxcindex.h
-$(PSSRC)idisp.h:$(GLSRC)stdint_.h
$(PSSRC)idisp.h:$(GLSRC)gsgstate.h
-$(PSSRC)idisp.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)idisp.h:$(GLSRC)stdio_.h
-$(PSSRC)idisp.h:$(GLSRC)gstypes.h
+$(PSSRC)idisp.h:$(GLSRC)stdint_.h
+$(PSSRC)idisp.h:$(GLSRC)gssprintf.h
$(PSSRC)idisp.h:$(GLSRC)std.h
+$(PSSRC)idisp.h:$(GLSRC)gstypes.h
$(PSSRC)idisp.h:$(GLSRC)stdpre.h
$(PSSRC)idisp.h:$(GLGEN)arch.h
-$(PSSRC)idisp.h:$(GLSRC)gssprintf.h
$(PSSRC)ifilter2.h:$(GLSRC)scfx.h
$(PSSRC)ifilter2.h:$(GLSRC)slzwx.h
$(PSSRC)ifilter2.h:$(GLSRC)spdiffx.h
@@ -4616,46 +4618,46 @@ $(PSSRC)ifilter2.h:$(PSSRC)isdata.h
$(PSSRC)ifilter2.h:$(PSSRC)imemory.h
$(PSSRC)ifilter2.h:$(PSSRC)ivmspace.h
$(PSSRC)ifilter2.h:$(PSSRC)iref.h
-$(PSSRC)ifilter2.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter2.h:$(GLSRC)gsgc.h
+$(PSSRC)ifilter2.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter2.h:$(GLSRC)gxobj.h
$(PSSRC)ifilter2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifilter2.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifilter2.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter2.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifilter2.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter2.h:$(GLSRC)gscms.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsdevice.h
$(PSSRC)ifilter2.h:$(GLSRC)gscspace.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsdevice.h
$(PSSRC)ifilter2.h:$(GLSRC)gxarith.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsiparam.h
$(PSSRC)ifilter2.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifilter2.h:$(GLSRC)memento.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsparam.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsiparam.h
$(PSSRC)ifilter2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsparam.h
+$(PSSRC)ifilter2.h:$(GLSRC)gsccolor.h
$(PSSRC)ifilter2.h:$(GLSRC)gsstruct.h
$(PSSRC)ifilter2.h:$(GLSRC)gxsync.h
-$(PSSRC)ifilter2.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter2.h:$(GLSRC)scommon.h
+$(PSSRC)ifilter2.h:$(GLSRC)memento.h
+$(PSSRC)ifilter2.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter2.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifilter2.h:$(GLSRC)gsccolor.h
$(PSSRC)ifilter2.h:$(GLSRC)gsstype.h
$(PSSRC)ifilter2.h:$(GLSRC)gsmemory.h
$(PSSRC)ifilter2.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter2.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifilter2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter2.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifilter2.h:$(GLSRC)stdio_.h
$(PSSRC)ifilter2.h:$(GLSRC)gsbittab.h
$(PSSRC)ifilter2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifilter2.h:$(GLSRC)stdint_.h
$(PSSRC)ifilter2.h:$(GLSRC)gsgstate.h
-$(PSSRC)ifilter2.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifilter2.h:$(GLSRC)stdio_.h
-$(PSSRC)ifilter2.h:$(GLSRC)gstypes.h
+$(PSSRC)ifilter2.h:$(GLSRC)stdint_.h
+$(PSSRC)ifilter2.h:$(GLSRC)gssprintf.h
$(PSSRC)ifilter2.h:$(GLSRC)std.h
+$(PSSRC)ifilter2.h:$(GLSRC)gstypes.h
$(PSSRC)ifilter2.h:$(GLSRC)stdpre.h
$(PSSRC)ifilter2.h:$(GLGEN)arch.h
-$(PSSRC)ifilter2.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont.h:$(GLSRC)gxfont.h
$(PSSRC)ifont.h:$(GLSRC)gspath.h
$(PSSRC)ifont.h:$(GLSRC)gxmatrix.h
@@ -4666,54 +4668,54 @@ $(PSSRC)ifont.h:$(GLSRC)gsnotify.h
$(PSSRC)ifont.h:$(GLSRC)gsfcmap.h
$(PSSRC)ifont.h:$(PSSRC)iref.h
$(PSSRC)ifont.h:$(GLSRC)gxalloc.h
-$(PSSRC)ifont.h:$(GLSRC)gxobj.h
$(PSSRC)ifont.h:$(GLSRC)gstext.h
+$(PSSRC)ifont.h:$(GLSRC)gxobj.h
$(PSSRC)ifont.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifont.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifont.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont.h:$(GLSRC)gxftype.h
$(PSSRC)ifont.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifont.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifont.h:$(GLSRC)gsrect.h
$(PSSRC)ifont.h:$(GLSRC)gscms.h
-$(PSSRC)ifont.h:$(GLSRC)gxftype.h
-$(PSSRC)ifont.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont.h:$(GLSRC)gxpath.h
+$(PSSRC)ifont.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifont.h:$(GLSRC)gsrect.h
+$(PSSRC)ifont.h:$(GLSRC)gslparam.h
+$(PSSRC)ifont.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifont.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont.h:$(GLSRC)gscpm.h
$(PSSRC)ifont.h:$(GLSRC)gxfixed.h
$(PSSRC)ifont.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifont.h:$(GLSRC)gscpm.h
-$(PSSRC)ifont.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifont.h:$(GLSRC)memento.h
$(PSSRC)ifont.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifont.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont.h:$(GLSRC)gxsync.h
-$(PSSRC)ifont.h:$(GLSRC)gscsel.h
$(PSSRC)ifont.h:$(GLSRC)scommon.h
+$(PSSRC)ifont.h:$(GLSRC)memento.h
+$(PSSRC)ifont.h:$(GLSRC)gscsel.h
$(PSSRC)ifont.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifont.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont.h:$(GLSRC)gsstype.h
$(PSSRC)ifont.h:$(GLSRC)gsmemory.h
$(PSSRC)ifont.h:$(GLSRC)gpsync.h
$(PSSRC)ifont.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifont.h:$(GLSRC)stdio_.h
$(PSSRC)ifont.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont.h:$(GLSRC)stdint_.h
$(PSSRC)ifont.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont.h:$(GLSRC)stdint_.h
+$(PSSRC)ifont.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifont.h:$(GLSRC)stdio_.h
-$(PSSRC)ifont.h:$(GLSRC)gstypes.h
$(PSSRC)ifont.h:$(GLSRC)std.h
+$(PSSRC)ifont.h:$(GLSRC)gstypes.h
$(PSSRC)ifont.h:$(GLSRC)stdpre.h
$(PSSRC)ifont.h:$(GLGEN)arch.h
-$(PSSRC)ifont.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont1.h:$(PSSRC)ichar1.h
$(PSSRC)ifont1.h:$(GLSRC)gxfont1.h
$(PSSRC)ifont1.h:$(PSSRC)bfont.h
@@ -4734,56 +4736,56 @@ $(PSSRC)ifont1.h:$(PSSRC)isdata.h
$(PSSRC)ifont1.h:$(PSSRC)imemory.h
$(PSSRC)ifont1.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont1.h:$(PSSRC)iref.h
-$(PSSRC)ifont1.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont1.h:$(GLSRC)gsgc.h
-$(PSSRC)ifont1.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont1.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont1.h:$(GLSRC)gstext.h
+$(PSSRC)ifont1.h:$(GLSRC)gxobj.h
$(PSSRC)ifont1.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont1.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifont1.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont1.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifont1.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont1.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont1.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont1.h:$(GLSRC)gxftype.h
$(PSSRC)ifont1.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifont1.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifont1.h:$(GLSRC)gsrect.h
$(PSSRC)ifont1.h:$(GLSRC)gscms.h
-$(PSSRC)ifont1.h:$(GLSRC)gxftype.h
-$(PSSRC)ifont1.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont1.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont1.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont1.h:$(GLSRC)gxpath.h
+$(PSSRC)ifont1.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont1.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont1.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont1.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifont1.h:$(GLSRC)gsrect.h
+$(PSSRC)ifont1.h:$(GLSRC)gslparam.h
+$(PSSRC)ifont1.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifont1.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont1.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont1.h:$(GLSRC)gscpm.h
$(PSSRC)ifont1.h:$(GLSRC)gxfixed.h
$(PSSRC)ifont1.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifont1.h:$(GLSRC)gscpm.h
-$(PSSRC)ifont1.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifont1.h:$(GLSRC)memento.h
$(PSSRC)ifont1.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont1.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifont1.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont1.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont1.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont1.h:$(GLSRC)gxsync.h
-$(PSSRC)ifont1.h:$(GLSRC)gscsel.h
$(PSSRC)ifont1.h:$(GLSRC)scommon.h
+$(PSSRC)ifont1.h:$(GLSRC)memento.h
+$(PSSRC)ifont1.h:$(GLSRC)gscsel.h
$(PSSRC)ifont1.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifont1.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont1.h:$(GLSRC)gsstype.h
$(PSSRC)ifont1.h:$(GLSRC)gsmemory.h
$(PSSRC)ifont1.h:$(GLSRC)gpsync.h
$(PSSRC)ifont1.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifont1.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont1.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifont1.h:$(GLSRC)stdio_.h
$(PSSRC)ifont1.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont1.h:$(GLSRC)stdint_.h
$(PSSRC)ifont1.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont1.h:$(GLSRC)stdint_.h
+$(PSSRC)ifont1.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont1.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont1.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifont1.h:$(GLSRC)stdio_.h
-$(PSSRC)ifont1.h:$(GLSRC)gstypes.h
$(PSSRC)ifont1.h:$(GLSRC)std.h
+$(PSSRC)ifont1.h:$(GLSRC)gstypes.h
$(PSSRC)ifont1.h:$(GLSRC)stdpre.h
$(PSSRC)ifont1.h:$(GLGEN)arch.h
-$(PSSRC)ifont1.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont2.h:$(PSSRC)ifont1.h
$(PSSRC)ifont2.h:$(PSSRC)ichar1.h
$(PSSRC)ifont2.h:$(GLSRC)gxfont1.h
@@ -4805,56 +4807,56 @@ $(PSSRC)ifont2.h:$(PSSRC)isdata.h
$(PSSRC)ifont2.h:$(PSSRC)imemory.h
$(PSSRC)ifont2.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont2.h:$(PSSRC)iref.h
-$(PSSRC)ifont2.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont2.h:$(GLSRC)gsgc.h
-$(PSSRC)ifont2.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont2.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont2.h:$(GLSRC)gstext.h
+$(PSSRC)ifont2.h:$(GLSRC)gxobj.h
$(PSSRC)ifont2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifont2.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifont2.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont2.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifont2.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont2.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont2.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont2.h:$(GLSRC)gxftype.h
$(PSSRC)ifont2.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifont2.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifont2.h:$(GLSRC)gsrect.h
$(PSSRC)ifont2.h:$(GLSRC)gscms.h
-$(PSSRC)ifont2.h:$(GLSRC)gxftype.h
-$(PSSRC)ifont2.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont2.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont2.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont2.h:$(GLSRC)gxpath.h
+$(PSSRC)ifont2.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont2.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont2.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont2.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifont2.h:$(GLSRC)gsrect.h
+$(PSSRC)ifont2.h:$(GLSRC)gslparam.h
+$(PSSRC)ifont2.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifont2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont2.h:$(GLSRC)gscpm.h
$(PSSRC)ifont2.h:$(GLSRC)gxfixed.h
$(PSSRC)ifont2.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifont2.h:$(GLSRC)gscpm.h
-$(PSSRC)ifont2.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifont2.h:$(GLSRC)memento.h
$(PSSRC)ifont2.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont2.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifont2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont2.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont2.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont2.h:$(GLSRC)gxsync.h
-$(PSSRC)ifont2.h:$(GLSRC)gscsel.h
$(PSSRC)ifont2.h:$(GLSRC)scommon.h
+$(PSSRC)ifont2.h:$(GLSRC)memento.h
+$(PSSRC)ifont2.h:$(GLSRC)gscsel.h
$(PSSRC)ifont2.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifont2.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont2.h:$(GLSRC)gsstype.h
$(PSSRC)ifont2.h:$(GLSRC)gsmemory.h
$(PSSRC)ifont2.h:$(GLSRC)gpsync.h
$(PSSRC)ifont2.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifont2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont2.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifont2.h:$(GLSRC)stdio_.h
$(PSSRC)ifont2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont2.h:$(GLSRC)stdint_.h
$(PSSRC)ifont2.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont2.h:$(GLSRC)stdint_.h
+$(PSSRC)ifont2.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont2.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont2.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifont2.h:$(GLSRC)stdio_.h
-$(PSSRC)ifont2.h:$(GLSRC)gstypes.h
$(PSSRC)ifont2.h:$(GLSRC)std.h
+$(PSSRC)ifont2.h:$(GLSRC)gstypes.h
$(PSSRC)ifont2.h:$(GLSRC)stdpre.h
$(PSSRC)ifont2.h:$(GLGEN)arch.h
-$(PSSRC)ifont2.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont42.h:$(PSSRC)bfont.h
$(PSSRC)ifont42.h:$(PSSRC)ifont.h
$(PSSRC)ifont42.h:$(GLSRC)gxfont42.h
@@ -4873,137 +4875,137 @@ $(PSSRC)ifont42.h:$(PSSRC)isdata.h
$(PSSRC)ifont42.h:$(PSSRC)imemory.h
$(PSSRC)ifont42.h:$(PSSRC)ivmspace.h
$(PSSRC)ifont42.h:$(PSSRC)iref.h
-$(PSSRC)ifont42.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont42.h:$(GLSRC)gsgc.h
-$(PSSRC)ifont42.h:$(GLSRC)gxobj.h
+$(PSSRC)ifont42.h:$(GLSRC)gxalloc.h
$(PSSRC)ifont42.h:$(GLSRC)gstext.h
+$(PSSRC)ifont42.h:$(GLSRC)gxobj.h
$(PSSRC)ifont42.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ifont42.h:$(GLSRC)gxcspace.h
$(PSSRC)ifont42.h:$(GLSRC)gxfcache.h
+$(PSSRC)ifont42.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifont42.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont42.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifont42.h:$(GLSRC)gsfont.h
-$(PSSRC)ifont42.h:$(GLSRC)gxpath.h
-$(PSSRC)ifont42.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont42.h:$(GLSRC)gxftype.h
$(PSSRC)ifont42.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifont42.h:$(GLSRC)gslparam.h
-$(PSSRC)ifont42.h:$(GLSRC)gxbcache.h
-$(PSSRC)ifont42.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifont42.h:$(GLSRC)gsrect.h
$(PSSRC)ifont42.h:$(GLSRC)gscms.h
-$(PSSRC)ifont42.h:$(GLSRC)gxftype.h
-$(PSSRC)ifont42.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont42.h:$(GLSRC)gscspace.h
-$(PSSRC)ifont42.h:$(GLSRC)gsuid.h
+$(PSSRC)ifont42.h:$(GLSRC)gxpath.h
+$(PSSRC)ifont42.h:$(GLSRC)gxbcache.h
+$(PSSRC)ifont42.h:$(GLSRC)gsdevice.h
$(PSSRC)ifont42.h:$(GLSRC)gxarith.h
+$(PSSRC)ifont42.h:$(GLSRC)gspenum.h
+$(PSSRC)ifont42.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifont42.h:$(GLSRC)gsrect.h
+$(PSSRC)ifont42.h:$(GLSRC)gslparam.h
$(PSSRC)ifont42.h:$(GLSRC)gsxfont.h
+$(PSSRC)ifont42.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifont42.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont42.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifont42.h:$(GLSRC)gscpm.h
$(PSSRC)ifont42.h:$(GLSRC)gxfixed.h
$(PSSRC)ifont42.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifont42.h:$(GLSRC)gscpm.h
-$(PSSRC)ifont42.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifont42.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifont42.h:$(GLSRC)memento.h
$(PSSRC)ifont42.h:$(GLSRC)gsparam.h
-$(PSSRC)ifont42.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifont42.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifont42.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont42.h:$(GLSRC)gsstruct.h
$(PSSRC)ifont42.h:$(GLSRC)gxsync.h
-$(PSSRC)ifont42.h:$(GLSRC)gscsel.h
$(PSSRC)ifont42.h:$(GLSRC)scommon.h
+$(PSSRC)ifont42.h:$(GLSRC)memento.h
+$(PSSRC)ifont42.h:$(GLSRC)gscsel.h
$(PSSRC)ifont42.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifont42.h:$(GLSRC)gsccolor.h
$(PSSRC)ifont42.h:$(GLSRC)gsstype.h
$(PSSRC)ifont42.h:$(GLSRC)gsmemory.h
$(PSSRC)ifont42.h:$(GLSRC)gpsync.h
$(PSSRC)ifont42.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifont42.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifont42.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifont42.h:$(GLSRC)stdio_.h
$(PSSRC)ifont42.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifont42.h:$(GLSRC)stdint_.h
$(PSSRC)ifont42.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifont42.h:$(GLSRC)stdint_.h
+$(PSSRC)ifont42.h:$(GLSRC)gssprintf.h
$(PSSRC)ifont42.h:$(GLSRC)gsccode.h
-$(PSSRC)ifont42.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifont42.h:$(GLSRC)stdio_.h
-$(PSSRC)ifont42.h:$(GLSRC)gstypes.h
$(PSSRC)ifont42.h:$(GLSRC)std.h
+$(PSSRC)ifont42.h:$(GLSRC)gstypes.h
$(PSSRC)ifont42.h:$(GLSRC)stdpre.h
$(PSSRC)ifont42.h:$(GLGEN)arch.h
-$(PSSRC)ifont42.h:$(GLSRC)gssprintf.h
$(PSSRC)ifrpred.h:$(PSSRC)iref.h
$(PSSRC)ifrpred.h:$(GLSRC)gxalloc.h
$(PSSRC)ifrpred.h:$(GLSRC)gxobj.h
$(PSSRC)ifrpred.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifrpred.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifrpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifrpred.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifrpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifrpred.h:$(GLSRC)gscms.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsdevice.h
$(PSSRC)ifrpred.h:$(GLSRC)gscspace.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsdevice.h
$(PSSRC)ifrpred.h:$(GLSRC)gxarith.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsiparam.h
$(PSSRC)ifrpred.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifrpred.h:$(GLSRC)memento.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsparam.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsiparam.h
$(PSSRC)ifrpred.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsparam.h
+$(PSSRC)ifrpred.h:$(GLSRC)gsccolor.h
$(PSSRC)ifrpred.h:$(GLSRC)gsstruct.h
$(PSSRC)ifrpred.h:$(GLSRC)gxsync.h
-$(PSSRC)ifrpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifrpred.h:$(GLSRC)scommon.h
+$(PSSRC)ifrpred.h:$(GLSRC)memento.h
+$(PSSRC)ifrpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifrpred.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifrpred.h:$(GLSRC)gsccolor.h
$(PSSRC)ifrpred.h:$(GLSRC)gsstype.h
$(PSSRC)ifrpred.h:$(GLSRC)gsmemory.h
$(PSSRC)ifrpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifrpred.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifrpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifrpred.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifrpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifrpred.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifrpred.h:$(GLSRC)stdint_.h
$(PSSRC)ifrpred.h:$(GLSRC)gsgstate.h
-$(PSSRC)ifrpred.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifrpred.h:$(GLSRC)stdio_.h
-$(PSSRC)ifrpred.h:$(GLSRC)gstypes.h
+$(PSSRC)ifrpred.h:$(GLSRC)stdint_.h
+$(PSSRC)ifrpred.h:$(GLSRC)gssprintf.h
$(PSSRC)ifrpred.h:$(GLSRC)std.h
+$(PSSRC)ifrpred.h:$(GLSRC)gstypes.h
$(PSSRC)ifrpred.h:$(GLSRC)stdpre.h
$(PSSRC)ifrpred.h:$(GLGEN)arch.h
-$(PSSRC)ifrpred.h:$(GLSRC)gssprintf.h
$(PSSRC)ifwpred.h:$(PSSRC)iref.h
$(PSSRC)ifwpred.h:$(GLSRC)gxalloc.h
$(PSSRC)ifwpred.h:$(GLSRC)gxobj.h
$(PSSRC)ifwpred.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifwpred.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifwpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifwpred.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifwpred.h:$(GLSRC)gxfrac.h
$(PSSRC)ifwpred.h:$(GLSRC)gscms.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsdevice.h
$(PSSRC)ifwpred.h:$(GLSRC)gscspace.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsdevice.h
$(PSSRC)ifwpred.h:$(GLSRC)gxarith.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsiparam.h
$(PSSRC)ifwpred.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifwpred.h:$(GLSRC)memento.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsparam.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsiparam.h
$(PSSRC)ifwpred.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsparam.h
+$(PSSRC)ifwpred.h:$(GLSRC)gsccolor.h
$(PSSRC)ifwpred.h:$(GLSRC)gsstruct.h
$(PSSRC)ifwpred.h:$(GLSRC)gxsync.h
-$(PSSRC)ifwpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifwpred.h:$(GLSRC)scommon.h
+$(PSSRC)ifwpred.h:$(GLSRC)memento.h
+$(PSSRC)ifwpred.h:$(GLSRC)gscsel.h
$(PSSRC)ifwpred.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifwpred.h:$(GLSRC)gsccolor.h
$(PSSRC)ifwpred.h:$(GLSRC)gsstype.h
$(PSSRC)ifwpred.h:$(GLSRC)gsmemory.h
$(PSSRC)ifwpred.h:$(GLSRC)gpsync.h
$(PSSRC)ifwpred.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifwpred.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifwpred.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifwpred.h:$(GLSRC)stdio_.h
$(PSSRC)ifwpred.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifwpred.h:$(GLSRC)stdint_.h
$(PSSRC)ifwpred.h:$(GLSRC)gsgstate.h
-$(PSSRC)ifwpred.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifwpred.h:$(GLSRC)stdio_.h
-$(PSSRC)ifwpred.h:$(GLSRC)gstypes.h
+$(PSSRC)ifwpred.h:$(GLSRC)stdint_.h
+$(PSSRC)ifwpred.h:$(GLSRC)gssprintf.h
$(PSSRC)ifwpred.h:$(GLSRC)std.h
+$(PSSRC)ifwpred.h:$(GLSRC)gstypes.h
$(PSSRC)ifwpred.h:$(GLSRC)stdpre.h
$(PSSRC)ifwpred.h:$(GLGEN)arch.h
-$(PSSRC)ifwpred.h:$(GLSRC)gssprintf.h
$(PSSRC)iht.h:$(GLSRC)gxht.h
$(PSSRC)iht.h:$(GLSRC)gxhttype.h
$(PSSRC)iht.h:$(GLSRC)gsht1.h
@@ -5015,167 +5017,167 @@ $(PSSRC)iht.h:$(PSSRC)imemory.h
$(PSSRC)iht.h:$(PSSRC)ivmspace.h
$(PSSRC)iht.h:$(GLSRC)gsht.h
$(PSSRC)iht.h:$(PSSRC)iref.h
-$(PSSRC)iht.h:$(GLSRC)gxalloc.h
$(PSSRC)iht.h:$(GLSRC)gsgc.h
+$(PSSRC)iht.h:$(GLSRC)gxalloc.h
$(PSSRC)iht.h:$(GLSRC)gxobj.h
$(PSSRC)iht.h:$(GLSRC)gsnamecl.h
$(PSSRC)iht.h:$(GLSRC)gxcspace.h
-$(PSSRC)iht.h:$(GLSRC)gxtmap.h
-$(PSSRC)iht.h:$(GLSRC)gxfrac.h
$(PSSRC)iht.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iht.h:$(GLSRC)gxfrac.h
$(PSSRC)iht.h:$(GLSRC)gscms.h
-$(PSSRC)iht.h:$(GLSRC)gsdevice.h
$(PSSRC)iht.h:$(GLSRC)gscspace.h
+$(PSSRC)iht.h:$(GLSRC)gsdevice.h
$(PSSRC)iht.h:$(GLSRC)gxarith.h
-$(PSSRC)iht.h:$(GLSRC)gsrefct.h
-$(PSSRC)iht.h:$(GLSRC)gsiparam.h
$(PSSRC)iht.h:$(GLSRC)gxhttile.h
-$(PSSRC)iht.h:$(GLSRC)memento.h
-$(PSSRC)iht.h:$(GLSRC)gsparam.h
-$(PSSRC)iht.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iht.h:$(GLSRC)gsiparam.h
$(PSSRC)iht.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iht.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iht.h:$(GLSRC)gsrefct.h
+$(PSSRC)iht.h:$(GLSRC)gsparam.h
+$(PSSRC)iht.h:$(GLSRC)gsccolor.h
$(PSSRC)iht.h:$(GLSRC)gsstruct.h
$(PSSRC)iht.h:$(GLSRC)gxsync.h
-$(PSSRC)iht.h:$(GLSRC)gscsel.h
$(PSSRC)iht.h:$(GLSRC)scommon.h
+$(PSSRC)iht.h:$(GLSRC)memento.h
+$(PSSRC)iht.h:$(GLSRC)gscsel.h
$(PSSRC)iht.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iht.h:$(GLSRC)gsccolor.h
$(PSSRC)iht.h:$(GLSRC)gsstype.h
+$(PSSRC)iht.h:$(GLSRC)gxtmap.h
$(PSSRC)iht.h:$(GLSRC)gsmemory.h
$(PSSRC)iht.h:$(GLSRC)gpsync.h
$(PSSRC)iht.h:$(GLSRC)gslibctx.h
+$(PSSRC)iht.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iht.h:$(GLSRC)gsalloc.h
+$(PSSRC)iht.h:$(GLSRC)stdio_.h
$(PSSRC)iht.h:$(GLSRC)gxcindex.h
-$(PSSRC)iht.h:$(GLSRC)stdint_.h
$(PSSRC)iht.h:$(GLSRC)gsgstate.h
-$(PSSRC)iht.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iht.h:$(GLSRC)stdio_.h
-$(PSSRC)iht.h:$(GLSRC)gstypes.h
+$(PSSRC)iht.h:$(GLSRC)stdint_.h
+$(PSSRC)iht.h:$(GLSRC)gssprintf.h
$(PSSRC)iht.h:$(GLSRC)std.h
+$(PSSRC)iht.h:$(GLSRC)gstypes.h
$(PSSRC)iht.h:$(GLSRC)stdpre.h
$(PSSRC)iht.h:$(GLGEN)arch.h
-$(PSSRC)iht.h:$(GLSRC)gssprintf.h
$(PSSRC)iimage.h:$(PSSRC)iref.h
$(PSSRC)iimage.h:$(GLSRC)gxalloc.h
$(PSSRC)iimage.h:$(GLSRC)gxobj.h
$(PSSRC)iimage.h:$(GLSRC)gsnamecl.h
$(PSSRC)iimage.h:$(GLSRC)gxcspace.h
-$(PSSRC)iimage.h:$(GLSRC)gxfrac.h
$(PSSRC)iimage.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iimage.h:$(GLSRC)gxfrac.h
$(PSSRC)iimage.h:$(GLSRC)gscms.h
-$(PSSRC)iimage.h:$(GLSRC)gsdevice.h
$(PSSRC)iimage.h:$(GLSRC)gscspace.h
+$(PSSRC)iimage.h:$(GLSRC)gsdevice.h
$(PSSRC)iimage.h:$(GLSRC)gxarith.h
-$(PSSRC)iimage.h:$(GLSRC)gsrefct.h
-$(PSSRC)iimage.h:$(GLSRC)gsiparam.h
$(PSSRC)iimage.h:$(GLSRC)gxhttile.h
-$(PSSRC)iimage.h:$(GLSRC)memento.h
-$(PSSRC)iimage.h:$(GLSRC)gsparam.h
-$(PSSRC)iimage.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iimage.h:$(GLSRC)gsiparam.h
$(PSSRC)iimage.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iimage.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iimage.h:$(GLSRC)gsrefct.h
+$(PSSRC)iimage.h:$(GLSRC)gsparam.h
+$(PSSRC)iimage.h:$(GLSRC)gsccolor.h
$(PSSRC)iimage.h:$(GLSRC)gsstruct.h
$(PSSRC)iimage.h:$(GLSRC)gxsync.h
-$(PSSRC)iimage.h:$(GLSRC)gscsel.h
$(PSSRC)iimage.h:$(GLSRC)scommon.h
+$(PSSRC)iimage.h:$(GLSRC)memento.h
+$(PSSRC)iimage.h:$(GLSRC)gscsel.h
$(PSSRC)iimage.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iimage.h:$(GLSRC)gsccolor.h
$(PSSRC)iimage.h:$(GLSRC)gsstype.h
$(PSSRC)iimage.h:$(GLSRC)gsmemory.h
$(PSSRC)iimage.h:$(GLSRC)gpsync.h
$(PSSRC)iimage.h:$(GLSRC)gslibctx.h
+$(PSSRC)iimage.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iimage.h:$(GLSRC)gsalloc.h
+$(PSSRC)iimage.h:$(GLSRC)stdio_.h
$(PSSRC)iimage.h:$(GLSRC)gxcindex.h
-$(PSSRC)iimage.h:$(GLSRC)stdint_.h
$(PSSRC)iimage.h:$(GLSRC)gsgstate.h
-$(PSSRC)iimage.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iimage.h:$(GLSRC)stdio_.h
-$(PSSRC)iimage.h:$(GLSRC)gstypes.h
+$(PSSRC)iimage.h:$(GLSRC)stdint_.h
+$(PSSRC)iimage.h:$(GLSRC)gssprintf.h
$(PSSRC)iimage.h:$(GLSRC)std.h
+$(PSSRC)iimage.h:$(GLSRC)gstypes.h
$(PSSRC)iimage.h:$(GLSRC)stdpre.h
$(PSSRC)iimage.h:$(GLGEN)arch.h
-$(PSSRC)iimage.h:$(GLSRC)gssprintf.h
$(PSSRC)iinit.h:$(PSSRC)imemory.h
$(PSSRC)iinit.h:$(PSSRC)ivmspace.h
$(PSSRC)iinit.h:$(PSSRC)iref.h
-$(PSSRC)iinit.h:$(GLSRC)gxalloc.h
$(PSSRC)iinit.h:$(GLSRC)gsgc.h
+$(PSSRC)iinit.h:$(GLSRC)gxalloc.h
$(PSSRC)iinit.h:$(GLSRC)gxobj.h
$(PSSRC)iinit.h:$(GLSRC)gsnamecl.h
$(PSSRC)iinit.h:$(GLSRC)gxcspace.h
-$(PSSRC)iinit.h:$(GLSRC)gxfrac.h
$(PSSRC)iinit.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iinit.h:$(GLSRC)gxfrac.h
$(PSSRC)iinit.h:$(GLSRC)gscms.h
-$(PSSRC)iinit.h:$(GLSRC)gsdevice.h
$(PSSRC)iinit.h:$(GLSRC)gscspace.h
+$(PSSRC)iinit.h:$(GLSRC)gsdevice.h
$(PSSRC)iinit.h:$(GLSRC)gxarith.h
-$(PSSRC)iinit.h:$(GLSRC)gsrefct.h
-$(PSSRC)iinit.h:$(GLSRC)gsiparam.h
$(PSSRC)iinit.h:$(GLSRC)gxhttile.h
-$(PSSRC)iinit.h:$(GLSRC)memento.h
-$(PSSRC)iinit.h:$(GLSRC)gsparam.h
-$(PSSRC)iinit.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iinit.h:$(GLSRC)gsiparam.h
$(PSSRC)iinit.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iinit.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iinit.h:$(GLSRC)gsrefct.h
+$(PSSRC)iinit.h:$(GLSRC)gsparam.h
+$(PSSRC)iinit.h:$(GLSRC)gsccolor.h
$(PSSRC)iinit.h:$(GLSRC)gsstruct.h
$(PSSRC)iinit.h:$(GLSRC)gxsync.h
-$(PSSRC)iinit.h:$(GLSRC)gscsel.h
$(PSSRC)iinit.h:$(GLSRC)scommon.h
+$(PSSRC)iinit.h:$(GLSRC)memento.h
+$(PSSRC)iinit.h:$(GLSRC)gscsel.h
$(PSSRC)iinit.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iinit.h:$(GLSRC)gsccolor.h
$(PSSRC)iinit.h:$(GLSRC)gsstype.h
$(PSSRC)iinit.h:$(GLSRC)gsmemory.h
$(PSSRC)iinit.h:$(GLSRC)gpsync.h
$(PSSRC)iinit.h:$(GLSRC)gslibctx.h
+$(PSSRC)iinit.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iinit.h:$(GLSRC)gsalloc.h
+$(PSSRC)iinit.h:$(GLSRC)stdio_.h
$(PSSRC)iinit.h:$(GLSRC)gxcindex.h
-$(PSSRC)iinit.h:$(GLSRC)stdint_.h
$(PSSRC)iinit.h:$(GLSRC)gsgstate.h
-$(PSSRC)iinit.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iinit.h:$(GLSRC)stdio_.h
-$(PSSRC)iinit.h:$(GLSRC)gstypes.h
+$(PSSRC)iinit.h:$(GLSRC)stdint_.h
+$(PSSRC)iinit.h:$(GLSRC)gssprintf.h
$(PSSRC)iinit.h:$(GLSRC)std.h
+$(PSSRC)iinit.h:$(GLSRC)gstypes.h
$(PSSRC)iinit.h:$(GLSRC)stdpre.h
$(PSSRC)iinit.h:$(GLGEN)arch.h
-$(PSSRC)iinit.h:$(GLSRC)gssprintf.h
$(PSSRC)imain.h:$(GLSRC)gsexit.h
$(PSSRC)imain.h:$(PSSRC)iref.h
$(PSSRC)imain.h:$(GLSRC)gxalloc.h
$(PSSRC)imain.h:$(GLSRC)gxobj.h
$(PSSRC)imain.h:$(GLSRC)gsnamecl.h
$(PSSRC)imain.h:$(GLSRC)gxcspace.h
-$(PSSRC)imain.h:$(GLSRC)gxfrac.h
$(PSSRC)imain.h:$(GLSRC)gsdcolor.h
+$(PSSRC)imain.h:$(GLSRC)gxfrac.h
$(PSSRC)imain.h:$(GLSRC)gscms.h
-$(PSSRC)imain.h:$(GLSRC)gsdevice.h
$(PSSRC)imain.h:$(GLSRC)gscspace.h
+$(PSSRC)imain.h:$(GLSRC)gsdevice.h
$(PSSRC)imain.h:$(GLSRC)gxarith.h
-$(PSSRC)imain.h:$(GLSRC)gsrefct.h
-$(PSSRC)imain.h:$(GLSRC)gsiparam.h
$(PSSRC)imain.h:$(GLSRC)gxhttile.h
-$(PSSRC)imain.h:$(GLSRC)memento.h
-$(PSSRC)imain.h:$(GLSRC)gsparam.h
-$(PSSRC)imain.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imain.h:$(GLSRC)gsiparam.h
$(PSSRC)imain.h:$(GLSRC)gxbitmap.h
+$(PSSRC)imain.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imain.h:$(GLSRC)gsrefct.h
+$(PSSRC)imain.h:$(GLSRC)gsparam.h
+$(PSSRC)imain.h:$(GLSRC)gsccolor.h
$(PSSRC)imain.h:$(GLSRC)gsstruct.h
$(PSSRC)imain.h:$(GLSRC)gxsync.h
-$(PSSRC)imain.h:$(GLSRC)gscsel.h
$(PSSRC)imain.h:$(GLSRC)scommon.h
+$(PSSRC)imain.h:$(GLSRC)memento.h
+$(PSSRC)imain.h:$(GLSRC)gscsel.h
$(PSSRC)imain.h:$(GLSRC)gsbitmap.h
-$(PSSRC)imain.h:$(GLSRC)gsccolor.h
$(PSSRC)imain.h:$(GLSRC)gsstype.h
$(PSSRC)imain.h:$(GLSRC)gsmemory.h
$(PSSRC)imain.h:$(GLSRC)gpsync.h
$(PSSRC)imain.h:$(GLSRC)gslibctx.h
+$(PSSRC)imain.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imain.h:$(GLSRC)gsalloc.h
+$(PSSRC)imain.h:$(GLSRC)stdio_.h
$(PSSRC)imain.h:$(GLSRC)gxcindex.h
-$(PSSRC)imain.h:$(GLSRC)stdint_.h
$(PSSRC)imain.h:$(GLSRC)gsgstate.h
-$(PSSRC)imain.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)imain.h:$(GLSRC)stdio_.h
-$(PSSRC)imain.h:$(GLSRC)gstypes.h
+$(PSSRC)imain.h:$(GLSRC)stdint_.h
+$(PSSRC)imain.h:$(GLSRC)gssprintf.h
$(PSSRC)imain.h:$(GLSRC)std.h
+$(PSSRC)imain.h:$(GLSRC)gstypes.h
$(PSSRC)imain.h:$(GLSRC)stdpre.h
$(PSSRC)imain.h:$(GLGEN)arch.h
-$(PSSRC)imain.h:$(GLSRC)gssprintf.h
$(PSSRC)imainarg.h:$(PSSRC)imain.h
$(PSSRC)imainarg.h:$(GLSRC)gsexit.h
$(PSSRC)imainarg.h:$(PSSRC)iref.h
@@ -5183,40 +5185,40 @@ $(PSSRC)imainarg.h:$(GLSRC)gxalloc.h
$(PSSRC)imainarg.h:$(GLSRC)gxobj.h
$(PSSRC)imainarg.h:$(GLSRC)gsnamecl.h
$(PSSRC)imainarg.h:$(GLSRC)gxcspace.h
-$(PSSRC)imainarg.h:$(GLSRC)gxfrac.h
$(PSSRC)imainarg.h:$(GLSRC)gsdcolor.h
+$(PSSRC)imainarg.h:$(GLSRC)gxfrac.h
$(PSSRC)imainarg.h:$(GLSRC)gscms.h
-$(PSSRC)imainarg.h:$(GLSRC)gsdevice.h
$(PSSRC)imainarg.h:$(GLSRC)gscspace.h
+$(PSSRC)imainarg.h:$(GLSRC)gsdevice.h
$(PSSRC)imainarg.h:$(GLSRC)gxarith.h
-$(PSSRC)imainarg.h:$(GLSRC)gsrefct.h
-$(PSSRC)imainarg.h:$(GLSRC)gsiparam.h
$(PSSRC)imainarg.h:$(GLSRC)gxhttile.h
-$(PSSRC)imainarg.h:$(GLSRC)memento.h
-$(PSSRC)imainarg.h:$(GLSRC)gsparam.h
-$(PSSRC)imainarg.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imainarg.h:$(GLSRC)gsiparam.h
$(PSSRC)imainarg.h:$(GLSRC)gxbitmap.h
+$(PSSRC)imainarg.h:$(GLSRC)gsmatrix.h
+$(PSSRC)imainarg.h:$(GLSRC)gsrefct.h
+$(PSSRC)imainarg.h:$(GLSRC)gsparam.h
+$(PSSRC)imainarg.h:$(GLSRC)gsccolor.h
$(PSSRC)imainarg.h:$(GLSRC)gsstruct.h
$(PSSRC)imainarg.h:$(GLSRC)gxsync.h
-$(PSSRC)imainarg.h:$(GLSRC)gscsel.h
$(PSSRC)imainarg.h:$(GLSRC)scommon.h
+$(PSSRC)imainarg.h:$(GLSRC)memento.h
+$(PSSRC)imainarg.h:$(GLSRC)gscsel.h
$(PSSRC)imainarg.h:$(GLSRC)gsbitmap.h
-$(PSSRC)imainarg.h:$(GLSRC)gsccolor.h
$(PSSRC)imainarg.h:$(GLSRC)gsstype.h
$(PSSRC)imainarg.h:$(GLSRC)gsmemory.h
$(PSSRC)imainarg.h:$(GLSRC)gpsync.h
$(PSSRC)imainarg.h:$(GLSRC)gslibctx.h
+$(PSSRC)imainarg.h:$(GLSRC)gs_dll_call.h
$(PSSRC)imainarg.h:$(GLSRC)gsalloc.h
+$(PSSRC)imainarg.h:$(GLSRC)stdio_.h
$(PSSRC)imainarg.h:$(GLSRC)gxcindex.h
-$(PSSRC)imainarg.h:$(GLSRC)stdint_.h
$(PSSRC)imainarg.h:$(GLSRC)gsgstate.h
-$(PSSRC)imainarg.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)imainarg.h:$(GLSRC)stdio_.h
-$(PSSRC)imainarg.h:$(GLSRC)gstypes.h
+$(PSSRC)imainarg.h:$(GLSRC)stdint_.h
+$(PSSRC)imainarg.h:$(GLSRC)gssprintf.h
$(PSSRC)imainarg.h:$(GLSRC)std.h
+$(PSSRC)imainarg.h:$(GLSRC)gstypes.h
$(PSSRC)imainarg.h:$(GLSRC)stdpre.h
$(PSSRC)imainarg.h:$(GLGEN)arch.h
-$(PSSRC)imainarg.h:$(GLSRC)gssprintf.h
$(PSSRC)iminst.h:$(PSSRC)imain.h
$(PSSRC)iminst.h:$(GLSRC)gsexit.h
$(PSSRC)iminst.h:$(PSSRC)iref.h
@@ -5224,312 +5226,312 @@ $(PSSRC)iminst.h:$(GLSRC)gxalloc.h
$(PSSRC)iminst.h:$(GLSRC)gxobj.h
$(PSSRC)iminst.h:$(GLSRC)gsnamecl.h
$(PSSRC)iminst.h:$(GLSRC)gxcspace.h
-$(PSSRC)iminst.h:$(GLSRC)gxfrac.h
$(PSSRC)iminst.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iminst.h:$(GLSRC)gxfrac.h
$(PSSRC)iminst.h:$(GLSRC)gscms.h
-$(PSSRC)iminst.h:$(GLSRC)gsdevice.h
$(PSSRC)iminst.h:$(GLSRC)gscspace.h
+$(PSSRC)iminst.h:$(GLSRC)gsdevice.h
$(PSSRC)iminst.h:$(GLSRC)gxarith.h
-$(PSSRC)iminst.h:$(GLSRC)gsrefct.h
-$(PSSRC)iminst.h:$(GLSRC)gsiparam.h
$(PSSRC)iminst.h:$(GLSRC)gxhttile.h
-$(PSSRC)iminst.h:$(GLSRC)memento.h
-$(PSSRC)iminst.h:$(GLSRC)gsparam.h
-$(PSSRC)iminst.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iminst.h:$(GLSRC)gsiparam.h
$(PSSRC)iminst.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iminst.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iminst.h:$(GLSRC)gsrefct.h
+$(PSSRC)iminst.h:$(GLSRC)gsparam.h
+$(PSSRC)iminst.h:$(GLSRC)gsccolor.h
$(PSSRC)iminst.h:$(GLSRC)gsstruct.h
$(PSSRC)iminst.h:$(GLSRC)gxsync.h
-$(PSSRC)iminst.h:$(GLSRC)gscsel.h
$(PSSRC)iminst.h:$(GLSRC)scommon.h
+$(PSSRC)iminst.h:$(GLSRC)memento.h
+$(PSSRC)iminst.h:$(GLSRC)gscsel.h
$(PSSRC)iminst.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iminst.h:$(GLSRC)gsccolor.h
$(PSSRC)iminst.h:$(GLSRC)gsstype.h
$(PSSRC)iminst.h:$(GLSRC)gsmemory.h
$(PSSRC)iminst.h:$(GLSRC)gpsync.h
$(PSSRC)iminst.h:$(GLSRC)gslibctx.h
+$(PSSRC)iminst.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iminst.h:$(GLSRC)gsalloc.h
+$(PSSRC)iminst.h:$(GLSRC)stdio_.h
$(PSSRC)iminst.h:$(GLSRC)gxcindex.h
-$(PSSRC)iminst.h:$(GLSRC)stdint_.h
$(PSSRC)iminst.h:$(GLSRC)gsgstate.h
-$(PSSRC)iminst.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iminst.h:$(GLSRC)stdio_.h
-$(PSSRC)iminst.h:$(GLSRC)gstypes.h
+$(PSSRC)iminst.h:$(GLSRC)stdint_.h
+$(PSSRC)iminst.h:$(GLSRC)gssprintf.h
$(PSSRC)iminst.h:$(GLSRC)std.h
+$(PSSRC)iminst.h:$(GLSRC)gstypes.h
$(PSSRC)iminst.h:$(GLSRC)stdpre.h
$(PSSRC)iminst.h:$(GLGEN)arch.h
-$(PSSRC)iminst.h:$(GLSRC)gssprintf.h
$(PSSRC)iparray.h:$(PSSRC)isdata.h
$(PSSRC)iparray.h:$(PSSRC)imemory.h
$(PSSRC)iparray.h:$(PSSRC)ivmspace.h
$(PSSRC)iparray.h:$(PSSRC)iref.h
-$(PSSRC)iparray.h:$(GLSRC)gxalloc.h
$(PSSRC)iparray.h:$(GLSRC)gsgc.h
+$(PSSRC)iparray.h:$(GLSRC)gxalloc.h
$(PSSRC)iparray.h:$(GLSRC)gxobj.h
$(PSSRC)iparray.h:$(GLSRC)gsnamecl.h
$(PSSRC)iparray.h:$(GLSRC)gxcspace.h
-$(PSSRC)iparray.h:$(GLSRC)gxfrac.h
$(PSSRC)iparray.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iparray.h:$(GLSRC)gxfrac.h
$(PSSRC)iparray.h:$(GLSRC)gscms.h
-$(PSSRC)iparray.h:$(GLSRC)gsdevice.h
$(PSSRC)iparray.h:$(GLSRC)gscspace.h
+$(PSSRC)iparray.h:$(GLSRC)gsdevice.h
$(PSSRC)iparray.h:$(GLSRC)gxarith.h
-$(PSSRC)iparray.h:$(GLSRC)gsrefct.h
-$(PSSRC)iparray.h:$(GLSRC)gsiparam.h
$(PSSRC)iparray.h:$(GLSRC)gxhttile.h
-$(PSSRC)iparray.h:$(GLSRC)memento.h
-$(PSSRC)iparray.h:$(GLSRC)gsparam.h
-$(PSSRC)iparray.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iparray.h:$(GLSRC)gsiparam.h
$(PSSRC)iparray.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iparray.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iparray.h:$(GLSRC)gsrefct.h
+$(PSSRC)iparray.h:$(GLSRC)gsparam.h
+$(PSSRC)iparray.h:$(GLSRC)gsccolor.h
$(PSSRC)iparray.h:$(GLSRC)gsstruct.h
$(PSSRC)iparray.h:$(GLSRC)gxsync.h
-$(PSSRC)iparray.h:$(GLSRC)gscsel.h
$(PSSRC)iparray.h:$(GLSRC)scommon.h
+$(PSSRC)iparray.h:$(GLSRC)memento.h
+$(PSSRC)iparray.h:$(GLSRC)gscsel.h
$(PSSRC)iparray.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iparray.h:$(GLSRC)gsccolor.h
$(PSSRC)iparray.h:$(GLSRC)gsstype.h
$(PSSRC)iparray.h:$(GLSRC)gsmemory.h
$(PSSRC)iparray.h:$(GLSRC)gpsync.h
$(PSSRC)iparray.h:$(GLSRC)gslibctx.h
+$(PSSRC)iparray.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iparray.h:$(GLSRC)gsalloc.h
+$(PSSRC)iparray.h:$(GLSRC)stdio_.h
$(PSSRC)iparray.h:$(GLSRC)gxcindex.h
-$(PSSRC)iparray.h:$(GLSRC)stdint_.h
$(PSSRC)iparray.h:$(GLSRC)gsgstate.h
-$(PSSRC)iparray.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iparray.h:$(GLSRC)stdio_.h
-$(PSSRC)iparray.h:$(GLSRC)gstypes.h
+$(PSSRC)iparray.h:$(GLSRC)stdint_.h
+$(PSSRC)iparray.h:$(GLSRC)gssprintf.h
$(PSSRC)iparray.h:$(GLSRC)std.h
+$(PSSRC)iparray.h:$(GLSRC)gstypes.h
$(PSSRC)iparray.h:$(GLSRC)stdpre.h
$(PSSRC)iparray.h:$(GLGEN)arch.h
-$(PSSRC)iparray.h:$(GLSRC)gssprintf.h
$(PSSRC)iscanbin.h:$(PSSRC)iscan.h
$(PSSRC)iscanbin.h:$(PSSRC)iref.h
$(PSSRC)iscanbin.h:$(GLSRC)sa85x.h
-$(PSSRC)iscanbin.h:$(GLSRC)gxalloc.h
$(PSSRC)iscanbin.h:$(GLSRC)sa85d.h
$(PSSRC)iscanbin.h:$(GLSRC)sstring.h
$(PSSRC)iscanbin.h:$(PSSRC)inamestr.h
$(PSSRC)iscanbin.h:$(PSSRC)inameidx.h
+$(PSSRC)iscanbin.h:$(GLSRC)gxalloc.h
$(PSSRC)iscanbin.h:$(GLSRC)gxobj.h
$(PSSRC)iscanbin.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscanbin.h:$(GLSRC)gxcspace.h
-$(PSSRC)iscanbin.h:$(GLSRC)gxfrac.h
$(PSSRC)iscanbin.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iscanbin.h:$(GLSRC)gxfrac.h
$(PSSRC)iscanbin.h:$(GLSRC)gscms.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsdevice.h
$(PSSRC)iscanbin.h:$(GLSRC)gscspace.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsdevice.h
$(PSSRC)iscanbin.h:$(GLSRC)gxarith.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsrefct.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsiparam.h
$(PSSRC)iscanbin.h:$(GLSRC)gxhttile.h
-$(PSSRC)iscanbin.h:$(GLSRC)memento.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsparam.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsiparam.h
$(PSSRC)iscanbin.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsparam.h
+$(PSSRC)iscanbin.h:$(GLSRC)gsccolor.h
$(PSSRC)iscanbin.h:$(GLSRC)gsstruct.h
$(PSSRC)iscanbin.h:$(GLSRC)gxsync.h
-$(PSSRC)iscanbin.h:$(GLSRC)gscsel.h
$(PSSRC)iscanbin.h:$(GLSRC)scommon.h
+$(PSSRC)iscanbin.h:$(GLSRC)memento.h
+$(PSSRC)iscanbin.h:$(GLSRC)gscsel.h
$(PSSRC)iscanbin.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iscanbin.h:$(GLSRC)gsccolor.h
$(PSSRC)iscanbin.h:$(GLSRC)gsstype.h
$(PSSRC)iscanbin.h:$(GLSRC)gsmemory.h
$(PSSRC)iscanbin.h:$(GLSRC)gpsync.h
$(PSSRC)iscanbin.h:$(GLSRC)gslibctx.h
+$(PSSRC)iscanbin.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscanbin.h:$(GLSRC)gsalloc.h
+$(PSSRC)iscanbin.h:$(GLSRC)stdio_.h
$(PSSRC)iscanbin.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscanbin.h:$(GLSRC)stdint_.h
$(PSSRC)iscanbin.h:$(GLSRC)gsgstate.h
-$(PSSRC)iscanbin.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iscanbin.h:$(GLSRC)stdio_.h
-$(PSSRC)iscanbin.h:$(GLSRC)gstypes.h
+$(PSSRC)iscanbin.h:$(GLSRC)stdint_.h
+$(PSSRC)iscanbin.h:$(GLSRC)gssprintf.h
$(PSSRC)iscanbin.h:$(GLSRC)std.h
+$(PSSRC)iscanbin.h:$(GLSRC)gstypes.h
$(PSSRC)iscanbin.h:$(GLSRC)stdpre.h
$(PSSRC)iscanbin.h:$(GLGEN)arch.h
-$(PSSRC)iscanbin.h:$(GLSRC)gssprintf.h
$(PSSRC)iscannum.h:$(PSSRC)imemory.h
$(PSSRC)iscannum.h:$(PSSRC)ivmspace.h
$(PSSRC)iscannum.h:$(PSSRC)iref.h
-$(PSSRC)iscannum.h:$(GLSRC)gxalloc.h
$(PSSRC)iscannum.h:$(GLSRC)gsgc.h
+$(PSSRC)iscannum.h:$(GLSRC)gxalloc.h
$(PSSRC)iscannum.h:$(GLSRC)gxobj.h
$(PSSRC)iscannum.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscannum.h:$(GLSRC)gxcspace.h
-$(PSSRC)iscannum.h:$(GLSRC)gxfrac.h
$(PSSRC)iscannum.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iscannum.h:$(GLSRC)gxfrac.h
$(PSSRC)iscannum.h:$(GLSRC)gscms.h
-$(PSSRC)iscannum.h:$(GLSRC)gsdevice.h
$(PSSRC)iscannum.h:$(GLSRC)gscspace.h
+$(PSSRC)iscannum.h:$(GLSRC)gsdevice.h
$(PSSRC)iscannum.h:$(GLSRC)gxarith.h
-$(PSSRC)iscannum.h:$(GLSRC)gsrefct.h
-$(PSSRC)iscannum.h:$(GLSRC)gsiparam.h
$(PSSRC)iscannum.h:$(GLSRC)gxhttile.h
-$(PSSRC)iscannum.h:$(GLSRC)memento.h
-$(PSSRC)iscannum.h:$(GLSRC)gsparam.h
-$(PSSRC)iscannum.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscannum.h:$(GLSRC)gsiparam.h
$(PSSRC)iscannum.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iscannum.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscannum.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscannum.h:$(GLSRC)gsparam.h
+$(PSSRC)iscannum.h:$(GLSRC)gsccolor.h
$(PSSRC)iscannum.h:$(GLSRC)gsstruct.h
$(PSSRC)iscannum.h:$(GLSRC)gxsync.h
-$(PSSRC)iscannum.h:$(GLSRC)gscsel.h
$(PSSRC)iscannum.h:$(GLSRC)scommon.h
+$(PSSRC)iscannum.h:$(GLSRC)memento.h
+$(PSSRC)iscannum.h:$(GLSRC)gscsel.h
$(PSSRC)iscannum.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iscannum.h:$(GLSRC)gsccolor.h
$(PSSRC)iscannum.h:$(GLSRC)gsstype.h
$(PSSRC)iscannum.h:$(GLSRC)gsmemory.h
$(PSSRC)iscannum.h:$(GLSRC)gpsync.h
$(PSSRC)iscannum.h:$(GLSRC)gslibctx.h
+$(PSSRC)iscannum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscannum.h:$(GLSRC)gsalloc.h
+$(PSSRC)iscannum.h:$(GLSRC)stdio_.h
$(PSSRC)iscannum.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscannum.h:$(GLSRC)stdint_.h
$(PSSRC)iscannum.h:$(GLSRC)gsgstate.h
-$(PSSRC)iscannum.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iscannum.h:$(GLSRC)stdio_.h
-$(PSSRC)iscannum.h:$(GLSRC)gstypes.h
+$(PSSRC)iscannum.h:$(GLSRC)stdint_.h
+$(PSSRC)iscannum.h:$(GLSRC)gssprintf.h
$(PSSRC)iscannum.h:$(GLSRC)std.h
+$(PSSRC)iscannum.h:$(GLSRC)gstypes.h
$(PSSRC)iscannum.h:$(GLSRC)stdpre.h
$(PSSRC)iscannum.h:$(GLGEN)arch.h
-$(PSSRC)iscannum.h:$(GLSRC)gssprintf.h
$(PSSRC)istream.h:$(PSSRC)imemory.h
$(PSSRC)istream.h:$(PSSRC)ivmspace.h
$(PSSRC)istream.h:$(PSSRC)iref.h
-$(PSSRC)istream.h:$(GLSRC)gxalloc.h
$(PSSRC)istream.h:$(GLSRC)gsgc.h
+$(PSSRC)istream.h:$(GLSRC)gxalloc.h
$(PSSRC)istream.h:$(GLSRC)gxobj.h
$(PSSRC)istream.h:$(GLSRC)gsnamecl.h
$(PSSRC)istream.h:$(GLSRC)gxcspace.h
-$(PSSRC)istream.h:$(GLSRC)gxfrac.h
$(PSSRC)istream.h:$(GLSRC)gsdcolor.h
+$(PSSRC)istream.h:$(GLSRC)gxfrac.h
$(PSSRC)istream.h:$(GLSRC)gscms.h
-$(PSSRC)istream.h:$(GLSRC)gsdevice.h
$(PSSRC)istream.h:$(GLSRC)gscspace.h
+$(PSSRC)istream.h:$(GLSRC)gsdevice.h
$(PSSRC)istream.h:$(GLSRC)gxarith.h
-$(PSSRC)istream.h:$(GLSRC)gsrefct.h
-$(PSSRC)istream.h:$(GLSRC)gsiparam.h
$(PSSRC)istream.h:$(GLSRC)gxhttile.h
-$(PSSRC)istream.h:$(GLSRC)memento.h
-$(PSSRC)istream.h:$(GLSRC)gsparam.h
-$(PSSRC)istream.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istream.h:$(GLSRC)gsiparam.h
$(PSSRC)istream.h:$(GLSRC)gxbitmap.h
+$(PSSRC)istream.h:$(GLSRC)gsmatrix.h
+$(PSSRC)istream.h:$(GLSRC)gsrefct.h
+$(PSSRC)istream.h:$(GLSRC)gsparam.h
+$(PSSRC)istream.h:$(GLSRC)gsccolor.h
$(PSSRC)istream.h:$(GLSRC)gsstruct.h
$(PSSRC)istream.h:$(GLSRC)gxsync.h
-$(PSSRC)istream.h:$(GLSRC)gscsel.h
$(PSSRC)istream.h:$(GLSRC)scommon.h
+$(PSSRC)istream.h:$(GLSRC)memento.h
+$(PSSRC)istream.h:$(GLSRC)gscsel.h
$(PSSRC)istream.h:$(GLSRC)gsbitmap.h
-$(PSSRC)istream.h:$(GLSRC)gsccolor.h
$(PSSRC)istream.h:$(GLSRC)gsstype.h
$(PSSRC)istream.h:$(GLSRC)gsmemory.h
$(PSSRC)istream.h:$(GLSRC)gpsync.h
$(PSSRC)istream.h:$(GLSRC)gslibctx.h
+$(PSSRC)istream.h:$(GLSRC)gs_dll_call.h
$(PSSRC)istream.h:$(GLSRC)gsalloc.h
+$(PSSRC)istream.h:$(GLSRC)stdio_.h
$(PSSRC)istream.h:$(GLSRC)gxcindex.h
-$(PSSRC)istream.h:$(GLSRC)stdint_.h
$(PSSRC)istream.h:$(GLSRC)gsgstate.h
-$(PSSRC)istream.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)istream.h:$(GLSRC)stdio_.h
-$(PSSRC)istream.h:$(GLSRC)gstypes.h
+$(PSSRC)istream.h:$(GLSRC)stdint_.h
+$(PSSRC)istream.h:$(GLSRC)gssprintf.h
$(PSSRC)istream.h:$(GLSRC)std.h
+$(PSSRC)istream.h:$(GLSRC)gstypes.h
$(PSSRC)istream.h:$(GLSRC)stdpre.h
$(PSSRC)istream.h:$(GLGEN)arch.h
-$(PSSRC)istream.h:$(GLSRC)gssprintf.h
$(PSSRC)itoken.h:$(PSSRC)iscan.h
$(PSSRC)itoken.h:$(PSSRC)iref.h
$(PSSRC)itoken.h:$(GLSRC)sa85x.h
-$(PSSRC)itoken.h:$(GLSRC)gxalloc.h
$(PSSRC)itoken.h:$(GLSRC)sa85d.h
$(PSSRC)itoken.h:$(GLSRC)sstring.h
$(PSSRC)itoken.h:$(PSSRC)inamestr.h
$(PSSRC)itoken.h:$(PSSRC)inameidx.h
+$(PSSRC)itoken.h:$(GLSRC)gxalloc.h
$(PSSRC)itoken.h:$(GLSRC)gxobj.h
$(PSSRC)itoken.h:$(GLSRC)gsnamecl.h
$(PSSRC)itoken.h:$(GLSRC)gxcspace.h
-$(PSSRC)itoken.h:$(GLSRC)gxfrac.h
$(PSSRC)itoken.h:$(GLSRC)gsdcolor.h
+$(PSSRC)itoken.h:$(GLSRC)gxfrac.h
$(PSSRC)itoken.h:$(GLSRC)gscms.h
-$(PSSRC)itoken.h:$(GLSRC)gsdevice.h
$(PSSRC)itoken.h:$(GLSRC)gscspace.h
+$(PSSRC)itoken.h:$(GLSRC)gsdevice.h
$(PSSRC)itoken.h:$(GLSRC)gxarith.h
-$(PSSRC)itoken.h:$(GLSRC)gsrefct.h
-$(PSSRC)itoken.h:$(GLSRC)gsiparam.h
$(PSSRC)itoken.h:$(GLSRC)gxhttile.h
-$(PSSRC)itoken.h:$(GLSRC)memento.h
-$(PSSRC)itoken.h:$(GLSRC)gsparam.h
-$(PSSRC)itoken.h:$(GLSRC)gsmatrix.h
+$(PSSRC)itoken.h:$(GLSRC)gsiparam.h
$(PSSRC)itoken.h:$(GLSRC)gxbitmap.h
+$(PSSRC)itoken.h:$(GLSRC)gsmatrix.h
+$(PSSRC)itoken.h:$(GLSRC)gsrefct.h
+$(PSSRC)itoken.h:$(GLSRC)gsparam.h
+$(PSSRC)itoken.h:$(GLSRC)gsccolor.h
$(PSSRC)itoken.h:$(GLSRC)gsstruct.h
$(PSSRC)itoken.h:$(GLSRC)gxsync.h
-$(PSSRC)itoken.h:$(GLSRC)gscsel.h
$(PSSRC)itoken.h:$(GLSRC)scommon.h
+$(PSSRC)itoken.h:$(GLSRC)memento.h
+$(PSSRC)itoken.h:$(GLSRC)gscsel.h
$(PSSRC)itoken.h:$(GLSRC)gsbitmap.h
-$(PSSRC)itoken.h:$(GLSRC)gsccolor.h
$(PSSRC)itoken.h:$(GLSRC)gsstype.h
$(PSSRC)itoken.h:$(GLSRC)gsmemory.h
$(PSSRC)itoken.h:$(GLSRC)gpsync.h
$(PSSRC)itoken.h:$(GLSRC)gslibctx.h
+$(PSSRC)itoken.h:$(GLSRC)gs_dll_call.h
$(PSSRC)itoken.h:$(GLSRC)gsalloc.h
+$(PSSRC)itoken.h:$(GLSRC)stdio_.h
$(PSSRC)itoken.h:$(GLSRC)gxcindex.h
-$(PSSRC)itoken.h:$(GLSRC)stdint_.h
$(PSSRC)itoken.h:$(GLSRC)gsgstate.h
-$(PSSRC)itoken.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)itoken.h:$(GLSRC)stdio_.h
-$(PSSRC)itoken.h:$(GLSRC)gstypes.h
+$(PSSRC)itoken.h:$(GLSRC)stdint_.h
+$(PSSRC)itoken.h:$(GLSRC)gssprintf.h
$(PSSRC)itoken.h:$(GLSRC)std.h
+$(PSSRC)itoken.h:$(GLSRC)gstypes.h
$(PSSRC)itoken.h:$(GLSRC)stdpre.h
$(PSSRC)itoken.h:$(GLGEN)arch.h
-$(PSSRC)itoken.h:$(GLSRC)gssprintf.h
$(PSSRC)main.h:$(PSSRC)iminst.h
$(PSSRC)main.h:$(PSSRC)imain.h
$(PSSRC)main.h:$(GLSRC)gsexit.h
$(PSSRC)main.h:$(PSSRC)iref.h
$(PSSRC)main.h:$(GLSRC)gxalloc.h
$(PSSRC)main.h:$(GLSRC)gxobj.h
-$(PSSRC)main.h:$(PSSRC)iapi.h
$(PSSRC)main.h:$(GLSRC)gsnamecl.h
+$(PSSRC)main.h:$(PSSRC)iapi.h
$(PSSRC)main.h:$(GLSRC)gxcspace.h
-$(PSSRC)main.h:$(GLSRC)gxfrac.h
$(PSSRC)main.h:$(GLSRC)gsdcolor.h
+$(PSSRC)main.h:$(GLSRC)gxfrac.h
$(PSSRC)main.h:$(GLSRC)gscms.h
-$(PSSRC)main.h:$(GLSRC)gsdevice.h
$(PSSRC)main.h:$(GLSRC)gscspace.h
+$(PSSRC)main.h:$(GLSRC)gsdevice.h
$(PSSRC)main.h:$(GLSRC)gxarith.h
-$(PSSRC)main.h:$(GLSRC)gsrefct.h
-$(PSSRC)main.h:$(GLSRC)gsiparam.h
$(PSSRC)main.h:$(GLSRC)gxhttile.h
-$(PSSRC)main.h:$(GLSRC)memento.h
-$(PSSRC)main.h:$(GLSRC)gsparam.h
-$(PSSRC)main.h:$(GLSRC)gsmatrix.h
+$(PSSRC)main.h:$(GLSRC)gsiparam.h
$(PSSRC)main.h:$(GLSRC)gxbitmap.h
+$(PSSRC)main.h:$(GLSRC)gsmatrix.h
+$(PSSRC)main.h:$(GLSRC)gsrefct.h
+$(PSSRC)main.h:$(GLSRC)gsparam.h
+$(PSSRC)main.h:$(GLSRC)gsccolor.h
$(PSSRC)main.h:$(GLSRC)gsstruct.h
$(PSSRC)main.h:$(GLSRC)gxsync.h
-$(PSSRC)main.h:$(GLSRC)gscsel.h
$(PSSRC)main.h:$(GLSRC)scommon.h
+$(PSSRC)main.h:$(GLSRC)memento.h
+$(PSSRC)main.h:$(GLSRC)gscsel.h
$(PSSRC)main.h:$(GLSRC)gsbitmap.h
-$(PSSRC)main.h:$(GLSRC)gsccolor.h
$(PSSRC)main.h:$(GLSRC)gsstype.h
$(PSSRC)main.h:$(GLSRC)gsmemory.h
$(PSSRC)main.h:$(GLSRC)gpsync.h
$(PSSRC)main.h:$(GLSRC)gslibctx.h
+$(PSSRC)main.h:$(GLSRC)gs_dll_call.h
$(PSSRC)main.h:$(GLSRC)gsalloc.h
+$(PSSRC)main.h:$(GLSRC)stdio_.h
$(PSSRC)main.h:$(GLSRC)gxcindex.h
-$(PSSRC)main.h:$(GLSRC)stdint_.h
$(PSSRC)main.h:$(GLSRC)gsgstate.h
-$(PSSRC)main.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)main.h:$(GLSRC)stdio_.h
-$(PSSRC)main.h:$(GLSRC)gstypes.h
+$(PSSRC)main.h:$(GLSRC)stdint_.h
+$(PSSRC)main.h:$(GLSRC)gssprintf.h
$(PSSRC)main.h:$(GLSRC)std.h
+$(PSSRC)main.h:$(GLSRC)gstypes.h
$(PSSRC)main.h:$(GLSRC)stdpre.h
$(PSSRC)main.h:$(GLGEN)arch.h
-$(PSSRC)main.h:$(GLSRC)gssprintf.h
$(GLSRC)smtf.h:$(GLSRC)scommon.h
$(GLSRC)smtf.h:$(GLSRC)gsstype.h
$(GLSRC)smtf.h:$(GLSRC)gsmemory.h
$(GLSRC)smtf.h:$(GLSRC)gslibctx.h
-$(GLSRC)smtf.h:$(GLSRC)stdint_.h
$(GLSRC)smtf.h:$(GLSRC)gs_dll_call.h
$(GLSRC)smtf.h:$(GLSRC)stdio_.h
-$(GLSRC)smtf.h:$(GLSRC)gstypes.h
+$(GLSRC)smtf.h:$(GLSRC)stdint_.h
+$(GLSRC)smtf.h:$(GLSRC)gssprintf.h
$(GLSRC)smtf.h:$(GLSRC)std.h
+$(GLSRC)smtf.h:$(GLSRC)gstypes.h
$(GLSRC)smtf.h:$(GLSRC)stdpre.h
$(GLSRC)smtf.h:$(GLGEN)arch.h
-$(GLSRC)smtf.h:$(GLSRC)gssprintf.h
$(PSSRC)bfont.h:$(PSSRC)ifont.h
$(PSSRC)bfont.h:$(GLSRC)gxfont.h
$(PSSRC)bfont.h:$(PSSRC)iostack.h
@@ -5546,56 +5548,56 @@ $(PSSRC)bfont.h:$(PSSRC)isdata.h
$(PSSRC)bfont.h:$(PSSRC)imemory.h
$(PSSRC)bfont.h:$(PSSRC)ivmspace.h
$(PSSRC)bfont.h:$(PSSRC)iref.h
-$(PSSRC)bfont.h:$(GLSRC)gxalloc.h
$(PSSRC)bfont.h:$(GLSRC)gsgc.h
-$(PSSRC)bfont.h:$(GLSRC)gxobj.h
+$(PSSRC)bfont.h:$(GLSRC)gxalloc.h
$(PSSRC)bfont.h:$(GLSRC)gstext.h
+$(PSSRC)bfont.h:$(GLSRC)gxobj.h
$(PSSRC)bfont.h:$(GLSRC)gsnamecl.h
$(PSSRC)bfont.h:$(GLSRC)gxcspace.h
+$(PSSRC)bfont.h:$(GLSRC)gsuid.h
+$(PSSRC)bfont.h:$(GLSRC)gsdcolor.h
$(PSSRC)bfont.h:$(GLSRC)gsfont.h
-$(PSSRC)bfont.h:$(GLSRC)gxpath.h
-$(PSSRC)bfont.h:$(GLSRC)gspenum.h
+$(PSSRC)bfont.h:$(GLSRC)gxftype.h
$(PSSRC)bfont.h:$(GLSRC)gxfrac.h
-$(PSSRC)bfont.h:$(GLSRC)gslparam.h
-$(PSSRC)bfont.h:$(GLSRC)gsdcolor.h
-$(PSSRC)bfont.h:$(GLSRC)gsrect.h
$(PSSRC)bfont.h:$(GLSRC)gscms.h
-$(PSSRC)bfont.h:$(GLSRC)gxftype.h
-$(PSSRC)bfont.h:$(GLSRC)gsdevice.h
$(PSSRC)bfont.h:$(GLSRC)gscspace.h
-$(PSSRC)bfont.h:$(GLSRC)gsuid.h
+$(PSSRC)bfont.h:$(GLSRC)gxpath.h
+$(PSSRC)bfont.h:$(GLSRC)gsdevice.h
$(PSSRC)bfont.h:$(GLSRC)gxarith.h
+$(PSSRC)bfont.h:$(GLSRC)gspenum.h
+$(PSSRC)bfont.h:$(GLSRC)gxhttile.h
+$(PSSRC)bfont.h:$(GLSRC)gsrect.h
+$(PSSRC)bfont.h:$(GLSRC)gslparam.h
+$(PSSRC)bfont.h:$(GLSRC)gsiparam.h
+$(PSSRC)bfont.h:$(GLSRC)gxbitmap.h
+$(PSSRC)bfont.h:$(GLSRC)gsmatrix.h
+$(PSSRC)bfont.h:$(GLSRC)gscpm.h
$(PSSRC)bfont.h:$(GLSRC)gxfixed.h
$(PSSRC)bfont.h:$(GLSRC)gsrefct.h
-$(PSSRC)bfont.h:$(GLSRC)gscpm.h
-$(PSSRC)bfont.h:$(GLSRC)gsiparam.h
-$(PSSRC)bfont.h:$(GLSRC)gxhttile.h
-$(PSSRC)bfont.h:$(GLSRC)memento.h
$(PSSRC)bfont.h:$(GLSRC)gsparam.h
-$(PSSRC)bfont.h:$(GLSRC)gsmatrix.h
-$(PSSRC)bfont.h:$(GLSRC)gxbitmap.h
+$(PSSRC)bfont.h:$(GLSRC)gsccolor.h
$(PSSRC)bfont.h:$(GLSRC)gsstruct.h
$(PSSRC)bfont.h:$(GLSRC)gxsync.h
-$(PSSRC)bfont.h:$(GLSRC)gscsel.h
$(PSSRC)bfont.h:$(GLSRC)scommon.h
+$(PSSRC)bfont.h:$(GLSRC)memento.h
+$(PSSRC)bfont.h:$(GLSRC)gscsel.h
$(PSSRC)bfont.h:$(GLSRC)gsbitmap.h
-$(PSSRC)bfont.h:$(GLSRC)gsccolor.h
$(PSSRC)bfont.h:$(GLSRC)gsstype.h
$(PSSRC)bfont.h:$(GLSRC)gsmemory.h
$(PSSRC)bfont.h:$(GLSRC)gpsync.h
$(PSSRC)bfont.h:$(GLSRC)gslibctx.h
+$(PSSRC)bfont.h:$(GLSRC)gs_dll_call.h
$(PSSRC)bfont.h:$(GLSRC)gsalloc.h
+$(PSSRC)bfont.h:$(GLSRC)stdio_.h
$(PSSRC)bfont.h:$(GLSRC)gxcindex.h
-$(PSSRC)bfont.h:$(GLSRC)stdint_.h
$(PSSRC)bfont.h:$(GLSRC)gsgstate.h
+$(PSSRC)bfont.h:$(GLSRC)stdint_.h
+$(PSSRC)bfont.h:$(GLSRC)gssprintf.h
$(PSSRC)bfont.h:$(GLSRC)gsccode.h
-$(PSSRC)bfont.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)bfont.h:$(GLSRC)stdio_.h
-$(PSSRC)bfont.h:$(GLSRC)gstypes.h
$(PSSRC)bfont.h:$(GLSRC)std.h
+$(PSSRC)bfont.h:$(GLSRC)gstypes.h
$(PSSRC)bfont.h:$(GLSRC)stdpre.h
$(PSSRC)bfont.h:$(GLGEN)arch.h
-$(PSSRC)bfont.h:$(GLSRC)gssprintf.h
$(PSSRC)icontext.h:$(PSSRC)icstate.h
$(PSSRC)icontext.h:$(PSSRC)idsdata.h
$(PSSRC)icontext.h:$(PSSRC)iesdata.h
@@ -5603,7 +5605,6 @@ $(PSSRC)icontext.h:$(PSSRC)interp.h
$(PSSRC)icontext.h:$(PSSRC)opdef.h
$(PSSRC)icontext.h:$(PSSRC)files.h
$(PSSRC)icontext.h:$(PSSRC)iddstack.h
-$(PSSRC)icontext.h:$(GLSRC)stream.h
$(PSSRC)icontext.h:$(PSSRC)store.h
$(PSSRC)icontext.h:$(PSSRC)iosdata.h
$(PSSRC)icontext.h:$(PSSRC)ialloc.h
@@ -5612,391 +5613,392 @@ $(PSSRC)icontext.h:$(PSSRC)isdata.h
$(PSSRC)icontext.h:$(PSSRC)imemory.h
$(PSSRC)icontext.h:$(PSSRC)ivmspace.h
$(PSSRC)icontext.h:$(PSSRC)iref.h
-$(PSSRC)icontext.h:$(GLSRC)gxalloc.h
$(PSSRC)icontext.h:$(GLSRC)gsgc.h
+$(PSSRC)icontext.h:$(GLSRC)gxalloc.h
$(PSSRC)icontext.h:$(GLSRC)gxobj.h
$(PSSRC)icontext.h:$(GLSRC)gsnamecl.h
-$(PSSRC)icontext.h:$(GLSRC)gxiodev.h
+$(PSSRC)icontext.h:$(GLSRC)stream.h
$(PSSRC)icontext.h:$(GLSRC)gxcspace.h
-$(PSSRC)icontext.h:$(GLSRC)stat_.h
-$(PSSRC)icontext.h:$(GLSRC)gxfrac.h
+$(PSSRC)icontext.h:$(GLSRC)gxiodev.h
$(PSSRC)icontext.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icontext.h:$(GLSRC)gxfrac.h
$(PSSRC)icontext.h:$(GLSRC)gscms.h
-$(PSSRC)icontext.h:$(GLSRC)gsdevice.h
$(PSSRC)icontext.h:$(GLSRC)gscspace.h
+$(PSSRC)icontext.h:$(GLSRC)gsdevice.h
$(PSSRC)icontext.h:$(GLSRC)gxarith.h
-$(PSSRC)icontext.h:$(GLSRC)gsrefct.h
-$(PSSRC)icontext.h:$(GLSRC)gsiparam.h
$(PSSRC)icontext.h:$(GLSRC)gxhttile.h
-$(PSSRC)icontext.h:$(GLSRC)gp.h
-$(PSSRC)icontext.h:$(GLSRC)memento.h
-$(PSSRC)icontext.h:$(GLSRC)gsparam.h
-$(PSSRC)icontext.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icontext.h:$(GLSRC)gsiparam.h
$(PSSRC)icontext.h:$(GLSRC)gxbitmap.h
-$(PSSRC)icontext.h:$(GLSRC)srdline.h
+$(PSSRC)icontext.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icontext.h:$(GLSRC)gsrefct.h
+$(PSSRC)icontext.h:$(GLSRC)gsparam.h
+$(PSSRC)icontext.h:$(GLSRC)gp.h
+$(PSSRC)icontext.h:$(GLSRC)gsccolor.h
$(PSSRC)icontext.h:$(GLSRC)gsstruct.h
$(PSSRC)icontext.h:$(GLSRC)gxsync.h
-$(PSSRC)icontext.h:$(GLSRC)gscsel.h
+$(PSSRC)icontext.h:$(GLSRC)srdline.h
$(PSSRC)icontext.h:$(GLSRC)scommon.h
+$(PSSRC)icontext.h:$(GLSRC)memento.h
+$(PSSRC)icontext.h:$(GLSRC)gscsel.h
$(PSSRC)icontext.h:$(GLSRC)gsbitmap.h
$(PSSRC)icontext.h:$(GLSRC)gsfname.h
-$(PSSRC)icontext.h:$(GLSRC)gsccolor.h
$(PSSRC)icontext.h:$(GLSRC)gsstype.h
+$(PSSRC)icontext.h:$(GLSRC)stat_.h
$(PSSRC)icontext.h:$(GLSRC)gsmemory.h
$(PSSRC)icontext.h:$(GLSRC)gpsync.h
-$(PSSRC)icontext.h:$(GLSRC)gpgetenv.h
$(PSSRC)icontext.h:$(GLSRC)memory_.h
+$(PSSRC)icontext.h:$(GLSRC)gpgetenv.h
$(PSSRC)icontext.h:$(GLSRC)gslibctx.h
$(PSSRC)icontext.h:$(GLSRC)gscdefs.h
+$(PSSRC)icontext.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icontext.h:$(GLSRC)gsalloc.h
+$(PSSRC)icontext.h:$(GLSRC)stdio_.h
$(PSSRC)icontext.h:$(GLSRC)gxcindex.h
-$(PSSRC)icontext.h:$(GLSRC)stdint_.h
$(PSSRC)icontext.h:$(GLSRC)gsgstate.h
-$(PSSRC)icontext.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icontext.h:$(GLSRC)stdio_.h
-$(PSSRC)icontext.h:$(GLSRC)gstypes.h
+$(PSSRC)icontext.h:$(GLSRC)stdint_.h
+$(PSSRC)icontext.h:$(GLSRC)gssprintf.h
$(PSSRC)icontext.h:$(GLSRC)std.h
+$(PSSRC)icontext.h:$(GLSRC)gstypes.h
$(PSSRC)icontext.h:$(GLSRC)stdpre.h
$(PSSRC)icontext.h:$(GLGEN)arch.h
-$(PSSRC)icontext.h:$(GLSRC)gssprintf.h
$(PSSRC)ifilter.h:$(PSSRC)istream.h
$(PSSRC)ifilter.h:$(PSSRC)imemory.h
$(PSSRC)ifilter.h:$(PSSRC)ivmspace.h
$(PSSRC)ifilter.h:$(PSSRC)iref.h
-$(PSSRC)ifilter.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter.h:$(GLSRC)gsgc.h
+$(PSSRC)ifilter.h:$(GLSRC)gxalloc.h
$(PSSRC)ifilter.h:$(GLSRC)gxobj.h
$(PSSRC)ifilter.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifilter.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifilter.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifilter.h:$(GLSRC)gxfrac.h
$(PSSRC)ifilter.h:$(GLSRC)gscms.h
-$(PSSRC)ifilter.h:$(GLSRC)gsdevice.h
$(PSSRC)ifilter.h:$(GLSRC)gscspace.h
+$(PSSRC)ifilter.h:$(GLSRC)gsdevice.h
$(PSSRC)ifilter.h:$(GLSRC)gxarith.h
-$(PSSRC)ifilter.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifilter.h:$(GLSRC)gsiparam.h
$(PSSRC)ifilter.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifilter.h:$(GLSRC)memento.h
-$(PSSRC)ifilter.h:$(GLSRC)gsparam.h
-$(PSSRC)ifilter.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifilter.h:$(GLSRC)gsiparam.h
$(PSSRC)ifilter.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifilter.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifilter.h:$(GLSRC)gsrefct.h
+$(PSSRC)ifilter.h:$(GLSRC)gsparam.h
+$(PSSRC)ifilter.h:$(GLSRC)gsccolor.h
$(PSSRC)ifilter.h:$(GLSRC)gsstruct.h
$(PSSRC)ifilter.h:$(GLSRC)gxsync.h
-$(PSSRC)ifilter.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter.h:$(GLSRC)scommon.h
+$(PSSRC)ifilter.h:$(GLSRC)memento.h
+$(PSSRC)ifilter.h:$(GLSRC)gscsel.h
$(PSSRC)ifilter.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifilter.h:$(GLSRC)gsccolor.h
$(PSSRC)ifilter.h:$(GLSRC)gsstype.h
$(PSSRC)ifilter.h:$(GLSRC)gsmemory.h
$(PSSRC)ifilter.h:$(GLSRC)gpsync.h
$(PSSRC)ifilter.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifilter.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifilter.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifilter.h:$(GLSRC)stdio_.h
$(PSSRC)ifilter.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifilter.h:$(GLSRC)stdint_.h
$(PSSRC)ifilter.h:$(GLSRC)gsgstate.h
-$(PSSRC)ifilter.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifilter.h:$(GLSRC)stdio_.h
-$(PSSRC)ifilter.h:$(GLSRC)gstypes.h
+$(PSSRC)ifilter.h:$(GLSRC)stdint_.h
+$(PSSRC)ifilter.h:$(GLSRC)gssprintf.h
$(PSSRC)ifilter.h:$(GLSRC)std.h
+$(PSSRC)ifilter.h:$(GLSRC)gstypes.h
$(PSSRC)ifilter.h:$(GLSRC)stdpre.h
$(PSSRC)ifilter.h:$(GLGEN)arch.h
-$(PSSRC)ifilter.h:$(GLSRC)gssprintf.h
$(PSSRC)igstate.h:$(GLSRC)gsstate.h
$(PSSRC)igstate.h:$(GLSRC)gsovrc.h
$(PSSRC)igstate.h:$(GLSRC)gscolor.h
-$(PSSRC)igstate.h:$(GLSRC)gsline.h
$(PSSRC)igstate.h:$(GLSRC)gxcomp.h
+$(PSSRC)igstate.h:$(GLSRC)gsline.h
$(PSSRC)igstate.h:$(PSSRC)istruct.h
$(PSSRC)igstate.h:$(GLSRC)gxbitfmt.h
$(PSSRC)igstate.h:$(PSSRC)imemory.h
$(PSSRC)igstate.h:$(PSSRC)ivmspace.h
$(PSSRC)igstate.h:$(GLSRC)gsht.h
$(PSSRC)igstate.h:$(PSSRC)iref.h
-$(PSSRC)igstate.h:$(GLSRC)gxalloc.h
$(PSSRC)igstate.h:$(GLSRC)gsgc.h
+$(PSSRC)igstate.h:$(GLSRC)gxalloc.h
$(PSSRC)igstate.h:$(GLSRC)gxobj.h
-$(PSSRC)igstate.h:$(GLSRC)gxstate.h
$(PSSRC)igstate.h:$(GLSRC)gsnamecl.h
+$(PSSRC)igstate.h:$(GLSRC)gxstate.h
$(PSSRC)igstate.h:$(GLSRC)gxcspace.h
-$(PSSRC)igstate.h:$(GLSRC)gxtmap.h
-$(PSSRC)igstate.h:$(GLSRC)gxfrac.h
-$(PSSRC)igstate.h:$(GLSRC)gslparam.h
$(PSSRC)igstate.h:$(GLSRC)gsdcolor.h
+$(PSSRC)igstate.h:$(GLSRC)gxfrac.h
$(PSSRC)igstate.h:$(GLSRC)gscms.h
-$(PSSRC)igstate.h:$(GLSRC)gsdevice.h
$(PSSRC)igstate.h:$(GLSRC)gscspace.h
+$(PSSRC)igstate.h:$(GLSRC)gsdevice.h
$(PSSRC)igstate.h:$(GLSRC)gxarith.h
-$(PSSRC)igstate.h:$(GLSRC)gsrefct.h
-$(PSSRC)igstate.h:$(GLSRC)gscpm.h
-$(PSSRC)igstate.h:$(GLSRC)gsiparam.h
$(PSSRC)igstate.h:$(GLSRC)gxhttile.h
-$(PSSRC)igstate.h:$(GLSRC)memento.h
-$(PSSRC)igstate.h:$(GLSRC)gsparam.h
-$(PSSRC)igstate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)igstate.h:$(GLSRC)gslparam.h
+$(PSSRC)igstate.h:$(GLSRC)gsiparam.h
$(PSSRC)igstate.h:$(GLSRC)gxbitmap.h
+$(PSSRC)igstate.h:$(GLSRC)gsmatrix.h
+$(PSSRC)igstate.h:$(GLSRC)gscpm.h
+$(PSSRC)igstate.h:$(GLSRC)gsrefct.h
+$(PSSRC)igstate.h:$(GLSRC)gsparam.h
+$(PSSRC)igstate.h:$(GLSRC)gsccolor.h
$(PSSRC)igstate.h:$(GLSRC)gsstruct.h
$(PSSRC)igstate.h:$(GLSRC)gxsync.h
-$(PSSRC)igstate.h:$(GLSRC)gscsel.h
$(PSSRC)igstate.h:$(GLSRC)scommon.h
+$(PSSRC)igstate.h:$(GLSRC)memento.h
+$(PSSRC)igstate.h:$(GLSRC)gscsel.h
$(PSSRC)igstate.h:$(GLSRC)gsbitmap.h
-$(PSSRC)igstate.h:$(GLSRC)gsccolor.h
$(PSSRC)igstate.h:$(GLSRC)gsstype.h
+$(PSSRC)igstate.h:$(GLSRC)gxtmap.h
$(PSSRC)igstate.h:$(GLSRC)gsmemory.h
$(PSSRC)igstate.h:$(GLSRC)gpsync.h
$(PSSRC)igstate.h:$(GLSRC)gslibctx.h
+$(PSSRC)igstate.h:$(GLSRC)gs_dll_call.h
$(PSSRC)igstate.h:$(GLSRC)gsalloc.h
+$(PSSRC)igstate.h:$(GLSRC)stdio_.h
$(PSSRC)igstate.h:$(GLSRC)gscompt.h
$(PSSRC)igstate.h:$(GLSRC)gxcindex.h
-$(PSSRC)igstate.h:$(GLSRC)stdint_.h
$(PSSRC)igstate.h:$(GLSRC)gsgstate.h
-$(PSSRC)igstate.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)igstate.h:$(GLSRC)stdio_.h
-$(PSSRC)igstate.h:$(GLSRC)gstypes.h
+$(PSSRC)igstate.h:$(GLSRC)stdint_.h
+$(PSSRC)igstate.h:$(GLSRC)gssprintf.h
$(PSSRC)igstate.h:$(GLSRC)std.h
+$(PSSRC)igstate.h:$(GLSRC)gstypes.h
$(PSSRC)igstate.h:$(GLSRC)stdpre.h
$(PSSRC)igstate.h:$(GLGEN)arch.h
-$(PSSRC)igstate.h:$(GLSRC)gssprintf.h
$(PSSRC)iscan.h:$(PSSRC)iref.h
$(PSSRC)iscan.h:$(GLSRC)sa85x.h
-$(PSSRC)iscan.h:$(GLSRC)gxalloc.h
$(PSSRC)iscan.h:$(GLSRC)sa85d.h
$(PSSRC)iscan.h:$(GLSRC)sstring.h
$(PSSRC)iscan.h:$(PSSRC)inamestr.h
$(PSSRC)iscan.h:$(PSSRC)inameidx.h
+$(PSSRC)iscan.h:$(GLSRC)gxalloc.h
$(PSSRC)iscan.h:$(GLSRC)gxobj.h
$(PSSRC)iscan.h:$(GLSRC)gsnamecl.h
$(PSSRC)iscan.h:$(GLSRC)gxcspace.h
-$(PSSRC)iscan.h:$(GLSRC)gxfrac.h
$(PSSRC)iscan.h:$(GLSRC)gsdcolor.h
+$(PSSRC)iscan.h:$(GLSRC)gxfrac.h
$(PSSRC)iscan.h:$(GLSRC)gscms.h
-$(PSSRC)iscan.h:$(GLSRC)gsdevice.h
$(PSSRC)iscan.h:$(GLSRC)gscspace.h
+$(PSSRC)iscan.h:$(GLSRC)gsdevice.h
$(PSSRC)iscan.h:$(GLSRC)gxarith.h
-$(PSSRC)iscan.h:$(GLSRC)gsrefct.h
-$(PSSRC)iscan.h:$(GLSRC)gsiparam.h
$(PSSRC)iscan.h:$(GLSRC)gxhttile.h
-$(PSSRC)iscan.h:$(GLSRC)memento.h
-$(PSSRC)iscan.h:$(GLSRC)gsparam.h
-$(PSSRC)iscan.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscan.h:$(GLSRC)gsiparam.h
$(PSSRC)iscan.h:$(GLSRC)gxbitmap.h
+$(PSSRC)iscan.h:$(GLSRC)gsmatrix.h
+$(PSSRC)iscan.h:$(GLSRC)gsrefct.h
+$(PSSRC)iscan.h:$(GLSRC)gsparam.h
+$(PSSRC)iscan.h:$(GLSRC)gsccolor.h
$(PSSRC)iscan.h:$(GLSRC)gsstruct.h
$(PSSRC)iscan.h:$(GLSRC)gxsync.h
-$(PSSRC)iscan.h:$(GLSRC)gscsel.h
$(PSSRC)iscan.h:$(GLSRC)scommon.h
+$(PSSRC)iscan.h:$(GLSRC)memento.h
+$(PSSRC)iscan.h:$(GLSRC)gscsel.h
$(PSSRC)iscan.h:$(GLSRC)gsbitmap.h
-$(PSSRC)iscan.h:$(GLSRC)gsccolor.h
$(PSSRC)iscan.h:$(GLSRC)gsstype.h
$(PSSRC)iscan.h:$(GLSRC)gsmemory.h
$(PSSRC)iscan.h:$(GLSRC)gpsync.h
$(PSSRC)iscan.h:$(GLSRC)gslibctx.h
+$(PSSRC)iscan.h:$(GLSRC)gs_dll_call.h
$(PSSRC)iscan.h:$(GLSRC)gsalloc.h
+$(PSSRC)iscan.h:$(GLSRC)stdio_.h
$(PSSRC)iscan.h:$(GLSRC)gxcindex.h
-$(PSSRC)iscan.h:$(GLSRC)stdint_.h
$(PSSRC)iscan.h:$(GLSRC)gsgstate.h
-$(PSSRC)iscan.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)iscan.h:$(GLSRC)stdio_.h
-$(PSSRC)iscan.h:$(GLSRC)gstypes.h
+$(PSSRC)iscan.h:$(GLSRC)stdint_.h
+$(PSSRC)iscan.h:$(GLSRC)gssprintf.h
$(PSSRC)iscan.h:$(GLSRC)std.h
+$(PSSRC)iscan.h:$(GLSRC)gstypes.h
$(PSSRC)iscan.h:$(GLSRC)stdpre.h
$(PSSRC)iscan.h:$(GLGEN)arch.h
-$(PSSRC)iscan.h:$(GLSRC)gssprintf.h
$(PSSRC)zfile.h:$(PSSRC)iref.h
$(PSSRC)zfile.h:$(GLSRC)gxalloc.h
$(PSSRC)zfile.h:$(GLSRC)gxobj.h
$(PSSRC)zfile.h:$(GLSRC)gsnamecl.h
$(PSSRC)zfile.h:$(GLSRC)gxcspace.h
-$(PSSRC)zfile.h:$(GLSRC)gxfrac.h
$(PSSRC)zfile.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zfile.h:$(GLSRC)gxfrac.h
$(PSSRC)zfile.h:$(GLSRC)gscms.h
-$(PSSRC)zfile.h:$(GLSRC)gsdevice.h
$(PSSRC)zfile.h:$(GLSRC)gscspace.h
+$(PSSRC)zfile.h:$(GLSRC)gsdevice.h
$(PSSRC)zfile.h:$(GLSRC)gxarith.h
-$(PSSRC)zfile.h:$(GLSRC)gsrefct.h
-$(PSSRC)zfile.h:$(GLSRC)gsiparam.h
$(PSSRC)zfile.h:$(GLSRC)gxhttile.h
-$(PSSRC)zfile.h:$(GLSRC)memento.h
-$(PSSRC)zfile.h:$(GLSRC)gsparam.h
-$(PSSRC)zfile.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zfile.h:$(GLSRC)gsiparam.h
$(PSSRC)zfile.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zfile.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zfile.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfile.h:$(GLSRC)gsparam.h
+$(PSSRC)zfile.h:$(GLSRC)gsccolor.h
$(PSSRC)zfile.h:$(GLSRC)gsstruct.h
$(PSSRC)zfile.h:$(GLSRC)gxsync.h
-$(PSSRC)zfile.h:$(GLSRC)gscsel.h
$(PSSRC)zfile.h:$(GLSRC)scommon.h
+$(PSSRC)zfile.h:$(GLSRC)memento.h
+$(PSSRC)zfile.h:$(GLSRC)gscsel.h
$(PSSRC)zfile.h:$(GLSRC)gsbitmap.h
$(PSSRC)zfile.h:$(GLSRC)gsfname.h
-$(PSSRC)zfile.h:$(GLSRC)gsccolor.h
$(PSSRC)zfile.h:$(GLSRC)gsstype.h
$(PSSRC)zfile.h:$(GLSRC)gsmemory.h
$(PSSRC)zfile.h:$(GLSRC)gpsync.h
$(PSSRC)zfile.h:$(GLSRC)gslibctx.h
+$(PSSRC)zfile.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfile.h:$(GLSRC)gsalloc.h
+$(PSSRC)zfile.h:$(GLSRC)stdio_.h
$(PSSRC)zfile.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfile.h:$(GLSRC)stdint_.h
$(PSSRC)zfile.h:$(GLSRC)gsgstate.h
-$(PSSRC)zfile.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zfile.h:$(GLSRC)stdio_.h
-$(PSSRC)zfile.h:$(GLSRC)gstypes.h
+$(PSSRC)zfile.h:$(GLSRC)stdint_.h
+$(PSSRC)zfile.h:$(GLSRC)gssprintf.h
$(PSSRC)zfile.h:$(GLSRC)std.h
+$(PSSRC)zfile.h:$(GLSRC)gstypes.h
$(PSSRC)zfile.h:$(GLSRC)stdpre.h
$(PSSRC)zfile.h:$(GLGEN)arch.h
-$(PSSRC)zfile.h:$(GLSRC)gssprintf.h
$(PSSRC)ibnum.h:$(PSSRC)iref.h
$(PSSRC)ibnum.h:$(GLSRC)gxalloc.h
$(PSSRC)ibnum.h:$(GLSRC)gxobj.h
$(PSSRC)ibnum.h:$(GLSRC)gsnamecl.h
$(PSSRC)ibnum.h:$(GLSRC)gxcspace.h
-$(PSSRC)ibnum.h:$(GLSRC)gxfrac.h
$(PSSRC)ibnum.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ibnum.h:$(GLSRC)gxfrac.h
$(PSSRC)ibnum.h:$(GLSRC)gscms.h
-$(PSSRC)ibnum.h:$(GLSRC)gsdevice.h
$(PSSRC)ibnum.h:$(GLSRC)gscspace.h
+$(PSSRC)ibnum.h:$(GLSRC)gsdevice.h
$(PSSRC)ibnum.h:$(GLSRC)gxarith.h
-$(PSSRC)ibnum.h:$(GLSRC)gsrefct.h
-$(PSSRC)ibnum.h:$(GLSRC)gsiparam.h
$(PSSRC)ibnum.h:$(GLSRC)gxhttile.h
-$(PSSRC)ibnum.h:$(GLSRC)memento.h
-$(PSSRC)ibnum.h:$(GLSRC)gsparam.h
-$(PSSRC)ibnum.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ibnum.h:$(GLSRC)gsiparam.h
$(PSSRC)ibnum.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ibnum.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ibnum.h:$(GLSRC)gsrefct.h
+$(PSSRC)ibnum.h:$(GLSRC)gsparam.h
+$(PSSRC)ibnum.h:$(GLSRC)gsccolor.h
$(PSSRC)ibnum.h:$(GLSRC)gsstruct.h
$(PSSRC)ibnum.h:$(GLSRC)gxsync.h
-$(PSSRC)ibnum.h:$(GLSRC)gscsel.h
$(PSSRC)ibnum.h:$(GLSRC)scommon.h
+$(PSSRC)ibnum.h:$(GLSRC)memento.h
+$(PSSRC)ibnum.h:$(GLSRC)gscsel.h
$(PSSRC)ibnum.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ibnum.h:$(GLSRC)gsccolor.h
$(PSSRC)ibnum.h:$(GLSRC)gsstype.h
$(PSSRC)ibnum.h:$(GLSRC)gsmemory.h
$(PSSRC)ibnum.h:$(GLSRC)gpsync.h
$(PSSRC)ibnum.h:$(GLSRC)gslibctx.h
+$(PSSRC)ibnum.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ibnum.h:$(GLSRC)gsalloc.h
+$(PSSRC)ibnum.h:$(GLSRC)stdio_.h
$(PSSRC)ibnum.h:$(GLSRC)gxcindex.h
-$(PSSRC)ibnum.h:$(GLSRC)stdint_.h
$(PSSRC)ibnum.h:$(GLSRC)gsgstate.h
-$(PSSRC)ibnum.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ibnum.h:$(GLSRC)stdio_.h
-$(PSSRC)ibnum.h:$(GLSRC)gstypes.h
+$(PSSRC)ibnum.h:$(GLSRC)stdint_.h
+$(PSSRC)ibnum.h:$(GLSRC)gssprintf.h
$(PSSRC)ibnum.h:$(GLSRC)std.h
+$(PSSRC)ibnum.h:$(GLSRC)gstypes.h
$(PSSRC)ibnum.h:$(GLSRC)stdpre.h
$(PSSRC)ibnum.h:$(GLGEN)arch.h
-$(PSSRC)ibnum.h:$(GLSRC)gssprintf.h
$(PSSRC)zcolor.h:$(PSSRC)iref.h
$(PSSRC)zcolor.h:$(GLSRC)gxalloc.h
$(PSSRC)zcolor.h:$(GLSRC)gxobj.h
$(PSSRC)zcolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)zcolor.h:$(GLSRC)gxcspace.h
-$(PSSRC)zcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)zcolor.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)zcolor.h:$(GLSRC)gscms.h
-$(PSSRC)zcolor.h:$(GLSRC)gsdevice.h
$(PSSRC)zcolor.h:$(GLSRC)gscspace.h
+$(PSSRC)zcolor.h:$(GLSRC)gsdevice.h
$(PSSRC)zcolor.h:$(GLSRC)gxarith.h
-$(PSSRC)zcolor.h:$(GLSRC)gsrefct.h
-$(PSSRC)zcolor.h:$(GLSRC)gsiparam.h
$(PSSRC)zcolor.h:$(GLSRC)gxhttile.h
-$(PSSRC)zcolor.h:$(GLSRC)memento.h
-$(PSSRC)zcolor.h:$(GLSRC)gsparam.h
-$(PSSRC)zcolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zcolor.h:$(GLSRC)gsiparam.h
$(PSSRC)zcolor.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zcolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcolor.h:$(GLSRC)gsparam.h
+$(PSSRC)zcolor.h:$(GLSRC)gsccolor.h
$(PSSRC)zcolor.h:$(GLSRC)gsstruct.h
$(PSSRC)zcolor.h:$(GLSRC)gxsync.h
-$(PSSRC)zcolor.h:$(GLSRC)gscsel.h
$(PSSRC)zcolor.h:$(GLSRC)scommon.h
+$(PSSRC)zcolor.h:$(GLSRC)memento.h
+$(PSSRC)zcolor.h:$(GLSRC)gscsel.h
$(PSSRC)zcolor.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zcolor.h:$(GLSRC)gsccolor.h
$(PSSRC)zcolor.h:$(GLSRC)gsstype.h
$(PSSRC)zcolor.h:$(GLSRC)gsmemory.h
$(PSSRC)zcolor.h:$(GLSRC)gpsync.h
$(PSSRC)zcolor.h:$(GLSRC)gslibctx.h
+$(PSSRC)zcolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcolor.h:$(GLSRC)gsalloc.h
+$(PSSRC)zcolor.h:$(GLSRC)stdio_.h
$(PSSRC)zcolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)zcolor.h:$(GLSRC)stdint_.h
$(PSSRC)zcolor.h:$(GLSRC)gsgstate.h
-$(PSSRC)zcolor.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zcolor.h:$(GLSRC)stdio_.h
-$(PSSRC)zcolor.h:$(GLSRC)gstypes.h
+$(PSSRC)zcolor.h:$(GLSRC)stdint_.h
+$(PSSRC)zcolor.h:$(GLSRC)gssprintf.h
$(PSSRC)zcolor.h:$(GLSRC)std.h
+$(PSSRC)zcolor.h:$(GLSRC)gstypes.h
$(PSSRC)zcolor.h:$(GLSRC)stdpre.h
$(PSSRC)zcolor.h:$(GLGEN)arch.h
-$(PSSRC)zcolor.h:$(GLSRC)gssprintf.h
$(PSSRC)zcie.h:$(PSSRC)iref.h
$(PSSRC)zcie.h:$(GLSRC)gxalloc.h
$(PSSRC)zcie.h:$(GLSRC)gxobj.h
$(PSSRC)zcie.h:$(GLSRC)gsnamecl.h
$(PSSRC)zcie.h:$(GLSRC)gxcspace.h
-$(PSSRC)zcie.h:$(GLSRC)gxfrac.h
$(PSSRC)zcie.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zcie.h:$(GLSRC)gxfrac.h
$(PSSRC)zcie.h:$(GLSRC)gscms.h
-$(PSSRC)zcie.h:$(GLSRC)gsdevice.h
$(PSSRC)zcie.h:$(GLSRC)gscspace.h
+$(PSSRC)zcie.h:$(GLSRC)gsdevice.h
$(PSSRC)zcie.h:$(GLSRC)gxarith.h
-$(PSSRC)zcie.h:$(GLSRC)gsrefct.h
-$(PSSRC)zcie.h:$(GLSRC)gsiparam.h
$(PSSRC)zcie.h:$(GLSRC)gxhttile.h
-$(PSSRC)zcie.h:$(GLSRC)memento.h
-$(PSSRC)zcie.h:$(GLSRC)gsparam.h
-$(PSSRC)zcie.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zcie.h:$(GLSRC)gsiparam.h
$(PSSRC)zcie.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zcie.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zcie.h:$(GLSRC)gsrefct.h
+$(PSSRC)zcie.h:$(GLSRC)gsparam.h
+$(PSSRC)zcie.h:$(GLSRC)gsccolor.h
$(PSSRC)zcie.h:$(GLSRC)gsstruct.h
$(PSSRC)zcie.h:$(GLSRC)gxsync.h
-$(PSSRC)zcie.h:$(GLSRC)gscsel.h
$(PSSRC)zcie.h:$(GLSRC)scommon.h
+$(PSSRC)zcie.h:$(GLSRC)memento.h
+$(PSSRC)zcie.h:$(GLSRC)gscsel.h
$(PSSRC)zcie.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zcie.h:$(GLSRC)gsccolor.h
$(PSSRC)zcie.h:$(GLSRC)gsstype.h
$(PSSRC)zcie.h:$(GLSRC)gsmemory.h
$(PSSRC)zcie.h:$(GLSRC)gpsync.h
$(PSSRC)zcie.h:$(GLSRC)gslibctx.h
+$(PSSRC)zcie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zcie.h:$(GLSRC)gsalloc.h
+$(PSSRC)zcie.h:$(GLSRC)stdio_.h
$(PSSRC)zcie.h:$(GLSRC)gxcindex.h
-$(PSSRC)zcie.h:$(GLSRC)stdint_.h
$(PSSRC)zcie.h:$(GLSRC)gsgstate.h
-$(PSSRC)zcie.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zcie.h:$(GLSRC)stdio_.h
-$(PSSRC)zcie.h:$(GLSRC)gstypes.h
+$(PSSRC)zcie.h:$(GLSRC)stdint_.h
+$(PSSRC)zcie.h:$(GLSRC)gssprintf.h
$(PSSRC)zcie.h:$(GLSRC)std.h
+$(PSSRC)zcie.h:$(GLSRC)gstypes.h
$(PSSRC)zcie.h:$(GLSRC)stdpre.h
$(PSSRC)zcie.h:$(GLGEN)arch.h
-$(PSSRC)zcie.h:$(GLSRC)gssprintf.h
$(PSSRC)zicc.h:$(PSSRC)iref.h
$(PSSRC)zicc.h:$(GLSRC)gxalloc.h
$(PSSRC)zicc.h:$(GLSRC)gxobj.h
$(PSSRC)zicc.h:$(GLSRC)gsnamecl.h
$(PSSRC)zicc.h:$(GLSRC)gxcspace.h
-$(PSSRC)zicc.h:$(GLSRC)gxfrac.h
$(PSSRC)zicc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zicc.h:$(GLSRC)gxfrac.h
$(PSSRC)zicc.h:$(GLSRC)gscms.h
-$(PSSRC)zicc.h:$(GLSRC)gsdevice.h
$(PSSRC)zicc.h:$(GLSRC)gscspace.h
+$(PSSRC)zicc.h:$(GLSRC)gsdevice.h
$(PSSRC)zicc.h:$(GLSRC)gxarith.h
-$(PSSRC)zicc.h:$(GLSRC)gsrefct.h
-$(PSSRC)zicc.h:$(GLSRC)gsiparam.h
$(PSSRC)zicc.h:$(GLSRC)gxhttile.h
-$(PSSRC)zicc.h:$(GLSRC)memento.h
-$(PSSRC)zicc.h:$(GLSRC)gsparam.h
-$(PSSRC)zicc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zicc.h:$(GLSRC)gsiparam.h
$(PSSRC)zicc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zicc.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zicc.h:$(GLSRC)gsrefct.h
+$(PSSRC)zicc.h:$(GLSRC)gsparam.h
+$(PSSRC)zicc.h:$(GLSRC)gsccolor.h
$(PSSRC)zicc.h:$(GLSRC)gsstruct.h
$(PSSRC)zicc.h:$(GLSRC)gxsync.h
-$(PSSRC)zicc.h:$(GLSRC)gscsel.h
$(PSSRC)zicc.h:$(GLSRC)scommon.h
+$(PSSRC)zicc.h:$(GLSRC)memento.h
+$(PSSRC)zicc.h:$(GLSRC)gscsel.h
$(PSSRC)zicc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zicc.h:$(GLSRC)gsccolor.h
$(PSSRC)zicc.h:$(GLSRC)gsstype.h
$(PSSRC)zicc.h:$(GLSRC)gsmemory.h
$(PSSRC)zicc.h:$(GLSRC)gpsync.h
$(PSSRC)zicc.h:$(GLSRC)gslibctx.h
+$(PSSRC)zicc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zicc.h:$(GLSRC)gsalloc.h
+$(PSSRC)zicc.h:$(GLSRC)stdio_.h
$(PSSRC)zicc.h:$(GLSRC)gxcindex.h
-$(PSSRC)zicc.h:$(GLSRC)stdint_.h
$(PSSRC)zicc.h:$(GLSRC)gsgstate.h
-$(PSSRC)zicc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zicc.h:$(GLSRC)stdio_.h
-$(PSSRC)zicc.h:$(GLSRC)gstypes.h
+$(PSSRC)zicc.h:$(GLSRC)stdint_.h
+$(PSSRC)zicc.h:$(GLSRC)gssprintf.h
$(PSSRC)zicc.h:$(GLSRC)std.h
+$(PSSRC)zicc.h:$(GLSRC)gstypes.h
$(PSSRC)zicc.h:$(GLSRC)stdpre.h
$(PSSRC)zicc.h:$(GLGEN)arch.h
-$(PSSRC)zicc.h:$(GLSRC)gssprintf.h
$(PSSRC)zfrsd.h:$(PSSRC)iostack.h
$(PSSRC)zfrsd.h:$(PSSRC)istack.h
$(PSSRC)zfrsd.h:$(PSSRC)iosdata.h
@@ -6004,166 +6006,166 @@ $(PSSRC)zfrsd.h:$(PSSRC)isdata.h
$(PSSRC)zfrsd.h:$(PSSRC)imemory.h
$(PSSRC)zfrsd.h:$(PSSRC)ivmspace.h
$(PSSRC)zfrsd.h:$(PSSRC)iref.h
-$(PSSRC)zfrsd.h:$(GLSRC)gxalloc.h
$(PSSRC)zfrsd.h:$(GLSRC)gsgc.h
+$(PSSRC)zfrsd.h:$(GLSRC)gxalloc.h
$(PSSRC)zfrsd.h:$(GLSRC)gxobj.h
$(PSSRC)zfrsd.h:$(GLSRC)gsnamecl.h
$(PSSRC)zfrsd.h:$(GLSRC)gxcspace.h
-$(PSSRC)zfrsd.h:$(GLSRC)gxfrac.h
$(PSSRC)zfrsd.h:$(GLSRC)gsdcolor.h
+$(PSSRC)zfrsd.h:$(GLSRC)gxfrac.h
$(PSSRC)zfrsd.h:$(GLSRC)gscms.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsdevice.h
$(PSSRC)zfrsd.h:$(GLSRC)gscspace.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsdevice.h
$(PSSRC)zfrsd.h:$(GLSRC)gxarith.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsrefct.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsiparam.h
$(PSSRC)zfrsd.h:$(GLSRC)gxhttile.h
-$(PSSRC)zfrsd.h:$(GLSRC)memento.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsparam.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsiparam.h
$(PSSRC)zfrsd.h:$(GLSRC)gxbitmap.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsmatrix.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsrefct.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsparam.h
+$(PSSRC)zfrsd.h:$(GLSRC)gsccolor.h
$(PSSRC)zfrsd.h:$(GLSRC)gsstruct.h
$(PSSRC)zfrsd.h:$(GLSRC)gxsync.h
-$(PSSRC)zfrsd.h:$(GLSRC)gscsel.h
$(PSSRC)zfrsd.h:$(GLSRC)scommon.h
+$(PSSRC)zfrsd.h:$(GLSRC)memento.h
+$(PSSRC)zfrsd.h:$(GLSRC)gscsel.h
$(PSSRC)zfrsd.h:$(GLSRC)gsbitmap.h
-$(PSSRC)zfrsd.h:$(GLSRC)gsccolor.h
$(PSSRC)zfrsd.h:$(GLSRC)gsstype.h
$(PSSRC)zfrsd.h:$(GLSRC)gsmemory.h
$(PSSRC)zfrsd.h:$(GLSRC)gpsync.h
$(PSSRC)zfrsd.h:$(GLSRC)gslibctx.h
+$(PSSRC)zfrsd.h:$(GLSRC)gs_dll_call.h
$(PSSRC)zfrsd.h:$(GLSRC)gsalloc.h
+$(PSSRC)zfrsd.h:$(GLSRC)stdio_.h
$(PSSRC)zfrsd.h:$(GLSRC)gxcindex.h
-$(PSSRC)zfrsd.h:$(GLSRC)stdint_.h
$(PSSRC)zfrsd.h:$(GLSRC)gsgstate.h
-$(PSSRC)zfrsd.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)zfrsd.h:$(GLSRC)stdio_.h
-$(PSSRC)zfrsd.h:$(GLSRC)gstypes.h
+$(PSSRC)zfrsd.h:$(GLSRC)stdint_.h
+$(PSSRC)zfrsd.h:$(GLSRC)gssprintf.h
$(PSSRC)zfrsd.h:$(GLSRC)std.h
+$(PSSRC)zfrsd.h:$(GLSRC)gstypes.h
$(PSSRC)zfrsd.h:$(GLSRC)stdpre.h
$(PSSRC)zfrsd.h:$(GLGEN)arch.h
-$(PSSRC)zfrsd.h:$(GLSRC)gssprintf.h
$(PSSRC)dscparse.h:$(GLSRC)stdpre.h
$(PSSRC)ifunc.h:$(PSSRC)iref.h
$(PSSRC)ifunc.h:$(GLSRC)gxalloc.h
$(PSSRC)ifunc.h:$(GLSRC)gxobj.h
-$(PSSRC)ifunc.h:$(GLSRC)gsfunc.h
$(PSSRC)ifunc.h:$(GLSRC)gsnamecl.h
$(PSSRC)ifunc.h:$(GLSRC)gxcspace.h
-$(PSSRC)ifunc.h:$(GLSRC)gxfrac.h
+$(PSSRC)ifunc.h:$(GLSRC)gsfunc.h
$(PSSRC)ifunc.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ifunc.h:$(GLSRC)gxfrac.h
$(PSSRC)ifunc.h:$(GLSRC)gscms.h
-$(PSSRC)ifunc.h:$(GLSRC)gsdevice.h
$(PSSRC)ifunc.h:$(GLSRC)gscspace.h
+$(PSSRC)ifunc.h:$(GLSRC)gsdevice.h
$(PSSRC)ifunc.h:$(GLSRC)gxarith.h
+$(PSSRC)ifunc.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifunc.h:$(GLSRC)gsiparam.h
$(PSSRC)ifunc.h:$(GLSRC)gsdsrc.h
+$(PSSRC)ifunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifunc.h:$(GLSRC)gsmatrix.h
$(PSSRC)ifunc.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifunc.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifunc.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifunc.h:$(GLSRC)memento.h
$(PSSRC)ifunc.h:$(GLSRC)gsparam.h
-$(PSSRC)ifunc.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifunc.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifunc.h:$(GLSRC)gsccolor.h
$(PSSRC)ifunc.h:$(GLSRC)gsstruct.h
$(PSSRC)ifunc.h:$(GLSRC)gxsync.h
-$(PSSRC)ifunc.h:$(GLSRC)gscsel.h
$(PSSRC)ifunc.h:$(GLSRC)scommon.h
+$(PSSRC)ifunc.h:$(GLSRC)memento.h
+$(PSSRC)ifunc.h:$(GLSRC)gscsel.h
$(PSSRC)ifunc.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifunc.h:$(GLSRC)gsccolor.h
$(PSSRC)ifunc.h:$(GLSRC)gsstype.h
$(PSSRC)ifunc.h:$(GLSRC)gsmemory.h
$(PSSRC)ifunc.h:$(GLSRC)gpsync.h
$(PSSRC)ifunc.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifunc.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifunc.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifunc.h:$(GLSRC)stdio_.h
$(PSSRC)ifunc.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifunc.h:$(GLSRC)stdint_.h
$(PSSRC)ifunc.h:$(GLSRC)gsgstate.h
-$(PSSRC)ifunc.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifunc.h:$(GLSRC)stdio_.h
-$(PSSRC)ifunc.h:$(GLSRC)gstypes.h
+$(PSSRC)ifunc.h:$(GLSRC)stdint_.h
+$(PSSRC)ifunc.h:$(GLSRC)gssprintf.h
$(PSSRC)ifunc.h:$(GLSRC)std.h
+$(PSSRC)ifunc.h:$(GLSRC)gstypes.h
$(PSSRC)ifunc.h:$(GLSRC)stdpre.h
$(PSSRC)ifunc.h:$(GLGEN)arch.h
-$(PSSRC)ifunc.h:$(GLSRC)gssprintf.h
$(PSSRC)ivmem2.h:$(PSSRC)iref.h
$(PSSRC)ivmem2.h:$(GLSRC)gxalloc.h
$(PSSRC)ivmem2.h:$(GLSRC)gxobj.h
$(PSSRC)ivmem2.h:$(GLSRC)gsnamecl.h
$(PSSRC)ivmem2.h:$(GLSRC)gxcspace.h
-$(PSSRC)ivmem2.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmem2.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ivmem2.h:$(GLSRC)gxfrac.h
$(PSSRC)ivmem2.h:$(GLSRC)gscms.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsdevice.h
$(PSSRC)ivmem2.h:$(GLSRC)gscspace.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsdevice.h
$(PSSRC)ivmem2.h:$(GLSRC)gxarith.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsrefct.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsiparam.h
$(PSSRC)ivmem2.h:$(GLSRC)gxhttile.h
-$(PSSRC)ivmem2.h:$(GLSRC)memento.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsparam.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsiparam.h
$(PSSRC)ivmem2.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsrefct.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsparam.h
+$(PSSRC)ivmem2.h:$(GLSRC)gsccolor.h
$(PSSRC)ivmem2.h:$(GLSRC)gsstruct.h
$(PSSRC)ivmem2.h:$(GLSRC)gxsync.h
-$(PSSRC)ivmem2.h:$(GLSRC)gscsel.h
$(PSSRC)ivmem2.h:$(GLSRC)scommon.h
+$(PSSRC)ivmem2.h:$(GLSRC)memento.h
+$(PSSRC)ivmem2.h:$(GLSRC)gscsel.h
$(PSSRC)ivmem2.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ivmem2.h:$(GLSRC)gsccolor.h
$(PSSRC)ivmem2.h:$(GLSRC)gsstype.h
$(PSSRC)ivmem2.h:$(GLSRC)gsmemory.h
$(PSSRC)ivmem2.h:$(GLSRC)gpsync.h
$(PSSRC)ivmem2.h:$(GLSRC)gslibctx.h
+$(PSSRC)ivmem2.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ivmem2.h:$(GLSRC)gsalloc.h
+$(PSSRC)ivmem2.h:$(GLSRC)stdio_.h
$(PSSRC)ivmem2.h:$(GLSRC)gxcindex.h
-$(PSSRC)ivmem2.h:$(GLSRC)stdint_.h
$(PSSRC)ivmem2.h:$(GLSRC)gsgstate.h
-$(PSSRC)ivmem2.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ivmem2.h:$(GLSRC)stdio_.h
-$(PSSRC)ivmem2.h:$(GLSRC)gstypes.h
+$(PSSRC)ivmem2.h:$(GLSRC)stdint_.h
+$(PSSRC)ivmem2.h:$(GLSRC)gssprintf.h
$(PSSRC)ivmem2.h:$(GLSRC)std.h
+$(PSSRC)ivmem2.h:$(GLSRC)gstypes.h
$(PSSRC)ivmem2.h:$(GLSRC)stdpre.h
$(PSSRC)ivmem2.h:$(GLGEN)arch.h
-$(PSSRC)ivmem2.h:$(GLSRC)gssprintf.h
$(PSSRC)icid.h:$(GLSRC)gxcid.h
$(PSSRC)icid.h:$(PSSRC)iref.h
$(PSSRC)icid.h:$(GLSRC)gxalloc.h
$(PSSRC)icid.h:$(GLSRC)gxobj.h
$(PSSRC)icid.h:$(GLSRC)gsnamecl.h
$(PSSRC)icid.h:$(GLSRC)gxcspace.h
-$(PSSRC)icid.h:$(GLSRC)gxfrac.h
$(PSSRC)icid.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icid.h:$(GLSRC)gxfrac.h
$(PSSRC)icid.h:$(GLSRC)gscms.h
-$(PSSRC)icid.h:$(GLSRC)gsdevice.h
$(PSSRC)icid.h:$(GLSRC)gscspace.h
+$(PSSRC)icid.h:$(GLSRC)gsdevice.h
$(PSSRC)icid.h:$(GLSRC)gxarith.h
-$(PSSRC)icid.h:$(GLSRC)gsrefct.h
-$(PSSRC)icid.h:$(GLSRC)gsiparam.h
$(PSSRC)icid.h:$(GLSRC)gxhttile.h
-$(PSSRC)icid.h:$(GLSRC)memento.h
-$(PSSRC)icid.h:$(GLSRC)gsparam.h
-$(PSSRC)icid.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icid.h:$(GLSRC)gsiparam.h
$(PSSRC)icid.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icid.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icid.h:$(GLSRC)gsrefct.h
+$(PSSRC)icid.h:$(GLSRC)gsparam.h
+$(PSSRC)icid.h:$(GLSRC)gsccolor.h
$(PSSRC)icid.h:$(GLSRC)gsstruct.h
$(PSSRC)icid.h:$(GLSRC)gxsync.h
-$(PSSRC)icid.h:$(GLSRC)gscsel.h
$(PSSRC)icid.h:$(GLSRC)scommon.h
+$(PSSRC)icid.h:$(GLSRC)memento.h
+$(PSSRC)icid.h:$(GLSRC)gscsel.h
$(PSSRC)icid.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icid.h:$(GLSRC)gsccolor.h
$(PSSRC)icid.h:$(GLSRC)gsstype.h
$(PSSRC)icid.h:$(GLSRC)gsmemory.h
$(PSSRC)icid.h:$(GLSRC)gpsync.h
$(PSSRC)icid.h:$(GLSRC)gslibctx.h
+$(PSSRC)icid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icid.h:$(GLSRC)gsalloc.h
+$(PSSRC)icid.h:$(GLSRC)stdio_.h
$(PSSRC)icid.h:$(GLSRC)gxcindex.h
-$(PSSRC)icid.h:$(GLSRC)stdint_.h
$(PSSRC)icid.h:$(GLSRC)gsgstate.h
-$(PSSRC)icid.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icid.h:$(GLSRC)stdio_.h
-$(PSSRC)icid.h:$(GLSRC)gstypes.h
+$(PSSRC)icid.h:$(GLSRC)stdint_.h
+$(PSSRC)icid.h:$(GLSRC)gssprintf.h
$(PSSRC)icid.h:$(GLSRC)std.h
+$(PSSRC)icid.h:$(GLSRC)gstypes.h
$(PSSRC)icid.h:$(GLSRC)stdpre.h
$(PSSRC)icid.h:$(GLGEN)arch.h
-$(PSSRC)icid.h:$(GLSRC)gssprintf.h
$(PSSRC)ifcid.h:$(GLSRC)gxfcid.h
$(PSSRC)ifcid.h:$(PSSRC)icid.h
$(PSSRC)ifcid.h:$(GLSRC)gstype1.h
@@ -6184,246 +6186,247 @@ $(PSSRC)ifcid.h:$(PSSRC)isdata.h
$(PSSRC)ifcid.h:$(PSSRC)imemory.h
$(PSSRC)ifcid.h:$(PSSRC)ivmspace.h
$(PSSRC)ifcid.h:$(PSSRC)iref.h
-$(PSSRC)ifcid.h:$(GLSRC)gxalloc.h
$(PSSRC)ifcid.h:$(GLSRC)gsgc.h
-$(PSSRC)ifcid.h:$(GLSRC)gxobj.h
+$(PSSRC)ifcid.h:$(GLSRC)gxalloc.h
$(PSSRC)ifcid.h:$(GLSRC)gstext.h
+$(PSSRC)ifcid.h:$(GLSRC)gxobj.h
$(PSSRC)ifcid.h:$(GLSRC)gsnamecl.h
-$(PSSRC)ifcid.h:$(GLSRC)gxcspace.h
$(PSSRC)ifcid.h:$(GLSRC)gxfcache.h
+$(PSSRC)ifcid.h:$(GLSRC)gxcspace.h
+$(PSSRC)ifcid.h:$(GLSRC)gsuid.h
+$(PSSRC)ifcid.h:$(GLSRC)gsdcolor.h
$(PSSRC)ifcid.h:$(GLSRC)gsfont.h
-$(PSSRC)ifcid.h:$(GLSRC)gxpath.h
-$(PSSRC)ifcid.h:$(GLSRC)gspenum.h
+$(PSSRC)ifcid.h:$(GLSRC)gxftype.h
$(PSSRC)ifcid.h:$(GLSRC)gxfrac.h
-$(PSSRC)ifcid.h:$(GLSRC)gslparam.h
-$(PSSRC)ifcid.h:$(GLSRC)gxbcache.h
-$(PSSRC)ifcid.h:$(GLSRC)gsdcolor.h
-$(PSSRC)ifcid.h:$(GLSRC)gsrect.h
$(PSSRC)ifcid.h:$(GLSRC)gscms.h
-$(PSSRC)ifcid.h:$(GLSRC)gxftype.h
-$(PSSRC)ifcid.h:$(GLSRC)gsdevice.h
$(PSSRC)ifcid.h:$(GLSRC)gscspace.h
-$(PSSRC)ifcid.h:$(GLSRC)gsuid.h
+$(PSSRC)ifcid.h:$(GLSRC)gxpath.h
+$(PSSRC)ifcid.h:$(GLSRC)gxbcache.h
+$(PSSRC)ifcid.h:$(GLSRC)gsdevice.h
$(PSSRC)ifcid.h:$(GLSRC)gxarith.h
+$(PSSRC)ifcid.h:$(GLSRC)gspenum.h
+$(PSSRC)ifcid.h:$(GLSRC)gxhttile.h
+$(PSSRC)ifcid.h:$(GLSRC)gsrect.h
+$(PSSRC)ifcid.h:$(GLSRC)gslparam.h
$(PSSRC)ifcid.h:$(GLSRC)gsxfont.h
+$(PSSRC)ifcid.h:$(GLSRC)gsiparam.h
+$(PSSRC)ifcid.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifcid.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ifcid.h:$(GLSRC)gscpm.h
$(PSSRC)ifcid.h:$(GLSRC)gxfixed.h
$(PSSRC)ifcid.h:$(GLSRC)gsrefct.h
-$(PSSRC)ifcid.h:$(GLSRC)gscpm.h
-$(PSSRC)ifcid.h:$(GLSRC)gsiparam.h
-$(PSSRC)ifcid.h:$(GLSRC)gxhttile.h
-$(PSSRC)ifcid.h:$(GLSRC)memento.h
$(PSSRC)ifcid.h:$(GLSRC)gsparam.h
-$(PSSRC)ifcid.h:$(GLSRC)gsmatrix.h
-$(PSSRC)ifcid.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ifcid.h:$(GLSRC)gsccolor.h
$(PSSRC)ifcid.h:$(GLSRC)gsstruct.h
$(PSSRC)ifcid.h:$(GLSRC)gxsync.h
-$(PSSRC)ifcid.h:$(GLSRC)gscsel.h
$(PSSRC)ifcid.h:$(GLSRC)scommon.h
+$(PSSRC)ifcid.h:$(GLSRC)memento.h
+$(PSSRC)ifcid.h:$(GLSRC)gscsel.h
$(PSSRC)ifcid.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ifcid.h:$(GLSRC)gsccolor.h
$(PSSRC)ifcid.h:$(GLSRC)gsstype.h
$(PSSRC)ifcid.h:$(GLSRC)gsmemory.h
$(PSSRC)ifcid.h:$(GLSRC)gpsync.h
$(PSSRC)ifcid.h:$(GLSRC)gslibctx.h
+$(PSSRC)ifcid.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ifcid.h:$(GLSRC)gsalloc.h
+$(PSSRC)ifcid.h:$(GLSRC)stdio_.h
$(PSSRC)ifcid.h:$(GLSRC)gxcindex.h
-$(PSSRC)ifcid.h:$(GLSRC)stdint_.h
$(PSSRC)ifcid.h:$(GLSRC)gsgstate.h
+$(PSSRC)ifcid.h:$(GLSRC)stdint_.h
+$(PSSRC)ifcid.h:$(GLSRC)gssprintf.h
$(PSSRC)ifcid.h:$(GLSRC)gsccode.h
-$(PSSRC)ifcid.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ifcid.h:$(GLSRC)stdio_.h
-$(PSSRC)ifcid.h:$(GLSRC)gstypes.h
$(PSSRC)ifcid.h:$(GLSRC)std.h
+$(PSSRC)ifcid.h:$(GLSRC)gstypes.h
$(PSSRC)ifcid.h:$(GLSRC)stdpre.h
$(PSSRC)ifcid.h:$(GLGEN)arch.h
-$(PSSRC)ifcid.h:$(GLSRC)gssprintf.h
$(PSSRC)icie.h:$(PSSRC)igstate.h
$(PSSRC)icie.h:$(GLSRC)gsstate.h
$(PSSRC)icie.h:$(GLSRC)gsovrc.h
$(PSSRC)icie.h:$(GLSRC)gscolor.h
-$(PSSRC)icie.h:$(GLSRC)gsline.h
$(PSSRC)icie.h:$(GLSRC)gxcomp.h
+$(PSSRC)icie.h:$(GLSRC)gsline.h
$(PSSRC)icie.h:$(PSSRC)istruct.h
$(PSSRC)icie.h:$(GLSRC)gxbitfmt.h
$(PSSRC)icie.h:$(PSSRC)imemory.h
$(PSSRC)icie.h:$(PSSRC)ivmspace.h
$(PSSRC)icie.h:$(GLSRC)gsht.h
$(PSSRC)icie.h:$(PSSRC)iref.h
-$(PSSRC)icie.h:$(GLSRC)gxalloc.h
$(PSSRC)icie.h:$(GLSRC)gsgc.h
-$(PSSRC)icie.h:$(GLSRC)gxobj.h
+$(PSSRC)icie.h:$(GLSRC)gxalloc.h
$(PSSRC)icie.h:$(GLSRC)gscie.h
-$(PSSRC)icie.h:$(GLSRC)gxstate.h
-$(PSSRC)icie.h:$(GLSRC)gxctable.h
+$(PSSRC)icie.h:$(GLSRC)gxobj.h
$(PSSRC)icie.h:$(GLSRC)gsnamecl.h
+$(PSSRC)icie.h:$(GLSRC)gxstate.h
$(PSSRC)icie.h:$(GLSRC)gxcspace.h
-$(PSSRC)icie.h:$(GLSRC)gxtmap.h
-$(PSSRC)icie.h:$(GLSRC)gxfrac.h
-$(PSSRC)icie.h:$(GLSRC)gslparam.h
+$(PSSRC)icie.h:$(GLSRC)gxctable.h
$(PSSRC)icie.h:$(GLSRC)gsdcolor.h
+$(PSSRC)icie.h:$(GLSRC)gxfrac.h
$(PSSRC)icie.h:$(GLSRC)gscms.h
-$(PSSRC)icie.h:$(GLSRC)gsdevice.h
$(PSSRC)icie.h:$(GLSRC)gscspace.h
+$(PSSRC)icie.h:$(GLSRC)gsdevice.h
$(PSSRC)icie.h:$(GLSRC)gxarith.h
+$(PSSRC)icie.h:$(GLSRC)gxhttile.h
+$(PSSRC)icie.h:$(GLSRC)gslparam.h
+$(PSSRC)icie.h:$(GLSRC)gsiparam.h
+$(PSSRC)icie.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icie.h:$(GLSRC)gsmatrix.h
+$(PSSRC)icie.h:$(GLSRC)gscpm.h
$(PSSRC)icie.h:$(GLSRC)gxfixed.h
$(PSSRC)icie.h:$(GLSRC)gsrefct.h
-$(PSSRC)icie.h:$(GLSRC)gscpm.h
-$(PSSRC)icie.h:$(GLSRC)gsiparam.h
-$(PSSRC)icie.h:$(GLSRC)gxhttile.h
-$(PSSRC)icie.h:$(GLSRC)memento.h
$(PSSRC)icie.h:$(GLSRC)gsparam.h
-$(PSSRC)icie.h:$(GLSRC)gsmatrix.h
-$(PSSRC)icie.h:$(GLSRC)gxbitmap.h
+$(PSSRC)icie.h:$(GLSRC)gsccolor.h
$(PSSRC)icie.h:$(GLSRC)gsstruct.h
$(PSSRC)icie.h:$(GLSRC)gxsync.h
-$(PSSRC)icie.h:$(GLSRC)gscsel.h
$(PSSRC)icie.h:$(GLSRC)scommon.h
+$(PSSRC)icie.h:$(GLSRC)memento.h
+$(PSSRC)icie.h:$(GLSRC)gscsel.h
$(PSSRC)icie.h:$(GLSRC)gsbitmap.h
-$(PSSRC)icie.h:$(GLSRC)gsccolor.h
$(PSSRC)icie.h:$(GLSRC)gsstype.h
+$(PSSRC)icie.h:$(GLSRC)gxtmap.h
$(PSSRC)icie.h:$(GLSRC)gsmemory.h
$(PSSRC)icie.h:$(GLSRC)gpsync.h
$(PSSRC)icie.h:$(GLSRC)gslibctx.h
+$(PSSRC)icie.h:$(GLSRC)gs_dll_call.h
$(PSSRC)icie.h:$(GLSRC)gsalloc.h
+$(PSSRC)icie.h:$(GLSRC)stdio_.h
$(PSSRC)icie.h:$(GLSRC)gscompt.h
$(PSSRC)icie.h:$(GLSRC)gxcindex.h
-$(PSSRC)icie.h:$(GLSRC)stdint_.h
$(PSSRC)icie.h:$(GLSRC)gsgstate.h
-$(PSSRC)icie.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)icie.h:$(GLSRC)stdio_.h
-$(PSSRC)icie.h:$(GLSRC)gstypes.h
+$(PSSRC)icie.h:$(GLSRC)stdint_.h
+$(PSSRC)icie.h:$(GLSRC)gssprintf.h
$(PSSRC)icie.h:$(GLSRC)std.h
+$(PSSRC)icie.h:$(GLSRC)gstypes.h
$(PSSRC)icie.h:$(GLSRC)stdpre.h
$(PSSRC)icie.h:$(GLGEN)arch.h
-$(PSSRC)icie.h:$(GLSRC)gssprintf.h
$(PSSRC)ipcolor.h:$(PSSRC)iref.h
$(PSSRC)ipcolor.h:$(GLSRC)gxalloc.h
$(PSSRC)ipcolor.h:$(GLSRC)gxobj.h
$(PSSRC)ipcolor.h:$(GLSRC)gsnamecl.h
$(PSSRC)ipcolor.h:$(GLSRC)gxcspace.h
-$(PSSRC)ipcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)ipcolor.h:$(GLSRC)gsdcolor.h
+$(PSSRC)ipcolor.h:$(GLSRC)gxfrac.h
$(PSSRC)ipcolor.h:$(GLSRC)gscms.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsdevice.h
$(PSSRC)ipcolor.h:$(GLSRC)gscspace.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsdevice.h
$(PSSRC)ipcolor.h:$(GLSRC)gxarith.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsrefct.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsiparam.h
$(PSSRC)ipcolor.h:$(GLSRC)gxhttile.h
-$(PSSRC)ipcolor.h:$(GLSRC)memento.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsparam.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsiparam.h
$(PSSRC)ipcolor.h:$(GLSRC)gxbitmap.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsmatrix.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsrefct.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsparam.h
+$(PSSRC)ipcolor.h:$(GLSRC)gsccolor.h
$(PSSRC)ipcolor.h:$(GLSRC)gsstruct.h
$(PSSRC)ipcolor.h:$(GLSRC)gxsync.h
-$(PSSRC)ipcolor.h:$(GLSRC)gscsel.h
$(PSSRC)ipcolor.h:$(GLSRC)scommon.h
+$(PSSRC)ipcolor.h:$(GLSRC)memento.h
+$(PSSRC)ipcolor.h:$(GLSRC)gscsel.h
$(PSSRC)ipcolor.h:$(GLSRC)gsbitmap.h
-$(PSSRC)ipcolor.h:$(GLSRC)gsccolor.h
$(PSSRC)ipcolor.h:$(GLSRC)gsstype.h
$(PSSRC)ipcolor.h:$(GLSRC)gsmemory.h
$(PSSRC)ipcolor.h:$(GLSRC)gpsync.h
$(PSSRC)ipcolor.h:$(GLSRC)gslibctx.h
+$(PSSRC)ipcolor.h:$(GLSRC)gs_dll_call.h
$(PSSRC)ipcolor.h:$(GLSRC)gsalloc.h
+$(PSSRC)ipcolor.h:$(GLSRC)stdio_.h
$(PSSRC)ipcolor.h:$(GLSRC)gxcindex.h
-$(PSSRC)ipcolor.h:$(GLSRC)stdint_.h
$(PSSRC)ipcolor.h:$(GLSRC)gsgstate.h
-$(PSSRC)ipcolor.h:$(GLSRC)gs_dll_call.h
-$(PSSRC)ipcolor.h:$(GLSRC)stdio_.h
-$(PSSRC)ipcolor.h:$(GLSRC)gstypes.h
+$(PSSRC)ipcolor.h:$(GLSRC)stdint_.h
+$(PSSRC)ipcolor.h:$(GLSRC)gssprintf.h
$(PSSRC)ipcolor.h:$(GLSRC)std.h
+$(PSSRC)ipcolor.h:$(GLSRC)gstypes.h
$(PSSRC)ipcolor.h:$(GLSRC)stdpre.h
$(PSSRC)ipcolor.h:$(GLGEN)arch.h
-$(PSSRC)ipcolor.h:$(GLSRC)gssprintf.h
$(GLSRC)gsform1.h:$(GLSRC)gxpath.h
$(GLSRC)gsform1.h:$(GLSRC)gspenum.h
-$(GLSRC)gsform1.h:$(GLSRC)gslparam.h
$(GLSRC)gsform1.h:$(GLSRC)gsrect.h
-$(GLSRC)gsform1.h:$(GLSRC)gxfixed.h
-$(GLSRC)gsform1.h:$(GLSRC)gscpm.h
+$(GLSRC)gsform1.h:$(GLSRC)gslparam.h
$(GLSRC)gsform1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsform1.h:$(GLSRC)gscpm.h
+$(GLSRC)gsform1.h:$(GLSRC)gxfixed.h
$(GLSRC)gsform1.h:$(GLSRC)scommon.h
$(GLSRC)gsform1.h:$(GLSRC)gsstype.h
$(GLSRC)gsform1.h:$(GLSRC)gsmemory.h
$(GLSRC)gsform1.h:$(GLSRC)gslibctx.h
-$(GLSRC)gsform1.h:$(GLSRC)stdint_.h
-$(GLSRC)gsform1.h:$(GLSRC)gsgstate.h
$(GLSRC)gsform1.h:$(GLSRC)gs_dll_call.h
$(GLSRC)gsform1.h:$(GLSRC)stdio_.h
-$(GLSRC)gsform1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsform1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsform1.h:$(GLSRC)stdint_.h
+$(GLSRC)gsform1.h:$(GLSRC)gssprintf.h
$(GLSRC)gsform1.h:$(GLSRC)std.h
+$(GLSRC)gsform1.h:$(GLSRC)gstypes.h
$(GLSRC)gsform1.h:$(GLSRC)stdpre.h
$(GLSRC)gsform1.h:$(GLGEN)arch.h
-$(GLSRC)gsform1.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gdevdevn.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxblend.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdevcli.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtext.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gstparam.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcspace.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsropt.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfunc.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsnamecl.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxrplane.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcspace.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcvalue.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsfont.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcvalue.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpath.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gspenum.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxftype.h
$(DEVSRC)gdevdsp2.h:$(DEVSRC)gdevdsp.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsimage.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfrac.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxdda.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gslparam.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbcache.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdcolor.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrect.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscms.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxftype.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscspace.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdevice.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxarith.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gslparam.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscpm.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxfixed.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsrefct.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscpm.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsiparam.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxhttile.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gp.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)memento.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsparam.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmatrix.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gxbitmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gp.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsstruct.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxsync.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)srdline.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)memento.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gscsel.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsbitmap.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccolor.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gxtmap.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsmemory.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gpsync.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gpgetenv.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gslibctx.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)stdio_.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gscompt.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gxcindex.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)stdint_.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gssprintf.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)gsccode.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gs_dll_call.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)stdio_.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)std.h
+$(DEVSRC)gdevdsp2.h:$(GLSRC)gstypes.h
$(DEVSRC)gdevdsp2.h:$(GLSRC)stdpre.h
$(DEVSRC)gdevdsp2.h:$(GLGEN)arch.h
-$(DEVSRC)gdevdsp2.h:$(GLSRC)gssprintf.h
diff --git a/psi/isave.c b/psi/isave.c
index b2afd4f6..b1d0c7fc 100644
--- a/psi/isave.c
+++ b/psi/isave.c
@@ -881,7 +881,9 @@ alloc_restore_all(i_ctx_t *i_ctx_p)
/* Restore to a state outside any saves. */
while (lmem->save_level != 0) {
vm_save_t *vmsave = alloc_save_client_data(alloc_save_current(idmemory));
- gs_grestoreall_for_restore(i_ctx_p->pgs, vmsave->gsave);
+ if (vmsave->gsave) {
+ gs_grestoreall_for_restore(i_ctx_p->pgs, vmsave->gsave);
+ }
vmsave->gsave = 0;
code = alloc_restore_step_in(idmemory, lmem->saved);
diff --git a/psi/msvc.mak b/psi/msvc.mak
index 7b097f97..c5c3b464 100644
--- a/psi/msvc.mak
+++ b/psi/msvc.mak
@@ -97,6 +97,9 @@ DEFAULT_OBJ_DIR=$(DEFAULT_OBJ_DIR)rt
!ifdef WIN64
DEFAULT_OBJ_DIR=$(DEFAULT_OBJ_DIR)64
!endif
+!ifdef XP
+DEFAULT_OBJ_DIR=$(DEFAULT_OBJ_DIR)xp
+!endif
!ifndef AUXDIR
AUXDIR=$(DEFAULT_OBJ_DIR)\aux_
@@ -118,6 +121,9 @@ BINDIR=.\bin
!endif
!endif
!endif
+!ifdef XP
+BINDIR=$(BINDIR)xp
+!endif
!endif
!ifndef GLSRCDIR
GLSRCDIR=.\base
@@ -232,6 +238,26 @@ GPDLGENDIR=$(GLGENDIR)
GPDLOBJDIR=$(GLOBJDIR)
!endif
+!ifndef URFSRCDIR
+URFSRCDIR=.\urf
+!endif
+!ifndef URFGENDIR
+URFGENDIR=$(GLGENDIR)
+!endif
+!ifndef URFOBJDIR
+URFOBJDIR=$(GLOBJDIR)
+!endif
+
+!ifndef IMGSRCDIR
+IMGSRCDIR=.\gpdl\img
+!endif
+!ifndef IMGGENDIR
+IMGGENDIR=$(GLGENDIR)
+!endif
+!ifndef IMGOBJDIR
+IMGOBJDIR=$(GLOBJDIR)
+!endif
+
CONTRIBDIR=.\contrib
# Can we build PCL and XPS
@@ -271,7 +297,7 @@ XPS_TARGET=gxps
GPDL_TARGET=gpdl
!endif
-PCL_XPS_TARGETS=$(PCL_TARGET) $(XPS_TARGET)
+PCL_XPS_PDL_TARGETS=$(PCL_TARGET) $(XPS_TARGET) $(GPDL_TARGET)
# Define the root directory for Ghostscript installation.
@@ -547,6 +573,28 @@ WITH_CUPS=0
WITH_CUPS=0
!endif
+# Should we build URF...
+!ifdef WITH_URF
+!if "$(WITH_URF)"!="0"
+WITH_URF=1
+!else
+WITH_URF=0
+!endif
+!else
+!if exist ("$(URFSRCDIR)")
+WITH_URF=1
+!else
+WITH_URF=0
+!endif
+!endif
+!if "$(WITH_URF)"=="1"
+ENABLE_URF=$(D_)URF_INCLUDED$(_D)
+GPDL_URF_TOP_OBJ=$(GPDLOBJ)/$(GPDL_URF_TOP_OBJ_FILE)
+URF_INCLUDE=$(I_)$(URFSRCDIR)$(_I)
+URF_DEV=$(GLD)urfd.dev
+SURFX_H=$(URFSRCDIR)$(D)surfx.h
+!endif
+
# Should we build using CAL....
CALSRCDIR=cal
!ifdef WITH_CAL
@@ -617,7 +665,8 @@ TIFFSRCDIR=tiff$(D)
TIFFCONFDIR=$(TIFFSRCDIR)
TIFFCONFIG_SUFFIX=.vc
TIFFPLATFORM=win32
-TIFFCFLAGS="-DJPEG_LIB_MK1_OR_12BIT=0"
+TIFF_CFLAGS=-DJPEG_SUPPORT -DOJPEG_SUPPORT -DJPEG_LIB_MK1_OR_12BIT=0
+ENABLE_TIFF=$(D_)TIFF_INCLUDED$(_D)
!endif
# Define the directory where the zlib sources are stored.
@@ -750,13 +799,22 @@ XCFLAGS=
!endif
!ifndef CFLAGS
+!if !defined(DEBUG) || "$(DEBUG)"=="0"
+CFLAGS=/DNDEBUG
+!else
CFLAGS=
!endif
+!endif
!ifdef DEVSTUDIO
CFLAGS=$(CFLAGS) /FC
!endif
+!ifdef XP
+CFLAGS=$(CFLAGS) /D_USING_V110_SDK71_
+SUBSUBSYS=,"5.01"
+!endif
+
!ifdef CLUSTER
CFLAGS=$(CFLAGS) -DCLUSTER
!endif
@@ -830,6 +888,7 @@ SBRFLAGS=/FR$(SBRDIR)\$(NUL)
MSVC_VERSION=5
!endif
!if "$(_NMAKE_VER)" == "6.00.8168.0"
+# VC 6
MSVC_VERSION=6
!endif
!if "$(_NMAKE_VER)" == "7.00.9466"
@@ -843,50 +902,82 @@ MSVC_VERSION=7
MSVC_MINOR_VERSION=1
!endif
!if "$(_NMAKE_VER)" == "8.00.40607.16"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "8.00.50727.42"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "8.00.50727.762"
+# VS2005
MSVC_VERSION=8
!endif
!if "$(_NMAKE_VER)" == "9.00.21022.08"
+# VS2008
MSVC_VERSION=9
!endif
!if "$(_NMAKE_VER)" == "9.00.30729.01"
+# VS2008
MSVC_VERSION=9
!endif
!if "$(_NMAKE_VER)" == "10.00.30319.01"
+# VS2010
MSVC_VERSION=10
!endif
!if "$(_NMAKE_VER)" == "11.00.50522.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.50727.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.60315.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "11.00.60610.1"
+# VS2012
MSVC_VERSION=11
!endif
!if "$(_NMAKE_VER)" == "12.00.21005.1"
+# VS 2013
MSVC_VERSION=12
!endif
!if "$(_NMAKE_VER)" == "14.00.23506.0"
+# VS2015
MSVC_VERSION=14
!endif
-!if "$(_NMAKE_VER)" == "14.14.26433.0"
+!if "$(_NMAKE_VER)" == "14.00.24210.0"
+# VS2015
MSVC_VERSION=14
!endif
-!if "$(_NMAKE_VER)" == "14.16.27026.1"
-MSVC_VERSION=14
+!if "$(_NMAKE_VER)" == "14.16.27034.0"
+# VS2017 or VS2019 (Toolset v141)
+MSVC_VERSION=15
+MS_TOOLSET_VERSION=14.16.27034
+!endif
+!if "$(_NMAKE_VER)" == "14.24.28314.0"
+# VS2019 (Toolset v142)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.24.28314
+!endif
+!if "$(_NMAKE_VER)" == "14.24.28315.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.24.28315
+!endif
+!if "$(_NMAKE_VER)" == "14.24.28316.0"
+# VS2019 (Toolset v142 - update)
+MSVC_VERSION=16
+MS_TOOLSET_VERSION=14.24.28316
!endif
!endif
!ifndef MSVC_VERSION
+!MESSAGE Could not determine MSVC_VERSION! Guessing at an ancient one.
+!MESSAGE Unknown nmake version: $(_NMAKE_VER)
MSVC_VERSION=6
!endif
!ifndef MSVC_MINOR_VERSION
@@ -1174,6 +1265,59 @@ LINKLIBPATH=/LIBPATH:"$(COMPBASE)\lib\amd64" /LIBPATH:"$(COMPBASE)\PlatformSDK\L
! endif
!endif
+!if $(MSVC_VERSION) == 15
+! ifndef DEVSTUDIO
+DEVSTUDIO=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\$(MS_TOOLSET_VERSION)
+! endif
+! if "$(DEVSTUDIO)"==""
+COMPBASE=
+SHAREDBASE=
+! else
+! if $(BUILD_SYSTEM) == 64
+DEVSTUDIO_HOST=Hostx64
+! else
+DEVSTUDIO_HOST=Hostx86
+! endif
+! ifdef WIN64
+DEVSTUDIO_TARGET=x64
+! else
+DEVSTUDIO_TARGET=x86
+! endif
+COMPDIR=$(DEVSTUDIO)\bin\$(DEVSTUDIO_HOST)\$(DEVSTUDIO_TARGET)
+RCDIR=
+LINKLIBPATH=/LIBPATH:"$(DEVSTUDIO)\lib\$(DEVSTUDIO_TARGET)"
+! endif
+!endif
+
+!if $(MSVC_VERSION) == 16
+! ifndef DEVSTUDIO
+! if exist("C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional")
+DEVSTUDIO_VARIANT="Professional"
+! else
+DEVSTUDIO_VARIANT="Community"
+! endif
+DEVSTUDIO=C:\Program Files (x86)\Microsoft Visual Studio\2019\$(DEVSTUDIO_VARIANT)\VC\Tools\MSVC\$(MS_TOOLSET_VERSION)
+! endif
+! if "$(DEVSTUDIO)"==""
+COMPBASE=
+SHAREDBASE=
+! else
+! if $(BUILD_SYSTEM) == 64
+DEVSTUDIO_HOST=Hostx64
+! else
+DEVSTUDIO_HOST=Hostx86
+! endif
+! ifdef WIN64
+DEVSTUDIO_TARGET=x64
+! else
+DEVSTUDIO_TARGET=x86
+! endif
+COMPDIR=$(DEVSTUDIO)\bin\$(DEVSTUDIO_HOST)\$(DEVSTUDIO_TARGET)
+RCDIR=
+LINKLIBPATH=/LIBPATH:"$(DEVSTUDIO)\lib\$(DEVSTUDIO_TARGET)"
+! endif
+!endif
+
!if "$(ARM)"=="1"
VCINSTDIR=$(VS110COMNTOOLS)..\..\VC\
@@ -1424,7 +1568,7 @@ FEATURE_DEVS=$(GLD)pipe.dev $(GLD)gsnogc.dev $(GLD)htxlib.dev $(GLD)psl3lib.dev
$(GLD)seprlib.dev $(GLD)translib.dev $(GLD)cidlib.dev $(GLD)psf0lib.dev $(GLD)psf1lib.dev\
$(GLD)psf2lib.dev $(GLD)lzwd.dev $(GLD)sicclib.dev $(GLD)mshandle.dev $(GLD)mspoll.dev \
$(GLD)ramfs.dev $(GLD)sjpx.dev $(GLD)sjbig2.dev \
- $(GLD)pwgd.dev $(GLD)siscale.dev
+ $(GLD)pwgd.dev $(GLD)siscale.dev $(URF_DEV)
!ifndef METRO
@@ -1487,12 +1631,15 @@ DEVICE_DEVS16=$(DD)bbox.dev $(DD)plib.dev $(DD)plibg.dev $(DD)plibm.dev $(DD)pli
!if "$(WITH_CUPS)" == "1"
DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)cups.dev
!endif
+!if "$(WITH_URF)" == "1"
+DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)urfgray.dev $(DD)urfrgb.dev $(DD)urfcmyk.dev
+!endif
# Overflow for DEVS3,4,5,6,9
DEVICE_DEVS17=$(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev
DEVICE_DEVS18=$(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)jetp3852.dev $(DD)r4081.dev
DEVICE_DEVS19=$(DD)lbp8.dev $(DD)m8510.dev $(DD)necp6.dev $(DD)bjc600.dev $(DD)bjc800.dev
DEVICE_DEVS20=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev $(DD)pnmcmyk.dev $(DD)pam.dev
-DEVICE_DEVS21=$(DD)spotcmyk.dev $(DD)devicen.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)bmp16m.dev $(DD)bmp32b.dev $(DD)psdcmyk.dev $(DD)psdrgb.dev $(DD)gprf.dev $(DD)psdcmyk16.dev $(DD)psdrgb16.dev
+DEVICE_DEVS21=$(DD)spotcmyk.dev $(DD)devicen.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)bmp16m.dev $(DD)bmp32b.dev $(DD)psdcmyk.dev $(DD)psdrgb.dev $(DD)psdcmyk16.dev $(DD)psdrgb16.dev
!endif
CONTRIB_DEVS=$(DD)pcl3.dev $(DD)hpdjplus.dev $(DD)hpdjportable.dev $(DD)hpdj310.dev $(DD)hpdj320.dev $(DD)hpdj340.dev $(DD)hpdj400.dev $(DD)hpdj500.dev $(DD)hpdj500c.dev $(DD)hpdj510.dev $(DD)hpdj520.dev $(DD)hpdj540.dev $(DD)hpdj550c.dev $(DD)hpdj560c.dev $(DD)hpdj600.dev $(DD)hpdj660c.dev $(DD)hpdj670c.dev $(DD)hpdj680c.dev $(DD)hpdj690c.dev $(DD)hpdj850c.dev $(DD)hpdj855c.dev $(DD)hpdj870c.dev $(DD)hpdj890c.dev $(DD)hpdj1120c.dev $(DD)cdj670.dev $(DD)cdj850.dev $(DD)cdj880.dev $(DD)cdj890.dev $(DD)cdj970.dev $(DD)cdj1600.dev $(DD)cdnj500.dev $(DD)chp2200.dev $(DD)lips3.dev $(DD)lxm3200.dev $(DD)lex2050.dev $(DD)lxm3200.dev $(DD)lex5700.dev $(DD)lex7000.dev $(DD)oki4w.dev $(DD)gdi.dev $(DD)samsunggdi.dev $(DD)dl2100.dev $(DD)la50.dev $(DD)la70.dev $(DD)la75.dev $(DD)la75plus.dev $(DD)ln03.dev $(DD)xes.dev $(DD)md2k.dev $(DD)md5k.dev $(DD)lips4.dev $(DD)bj10v.dev $(DD)bj10vh.dev $(DD)md50Mono.dev $(DD)md50Eco.dev $(DD)md1xMono.dev $(DD)lp2000.dev $(DD)escpage.dev $(DD)npdl.dev $(DD)rpdl.dev $(DD)fmpr.dev $(DD)fmlbp.dev $(DD)jj100.dev $(DD)lbp310.dev $(DD)lbp320.dev $(DD)mj700v2c.dev $(DD)mj500c.dev $(DD)mj6000c.dev $(DD)mj8000c.dev $(DD)pr201.dev $(DD)pr150.dev $(DD)pr1000.dev $(DD)pr1000_4.dev $(DD)lips2p.dev $(DD)bjc880j.dev $(DD)bjcmono.dev $(DD)bjcgray.dev $(DD)bjccmyk.dev $(DD)bjccolor.dev
@@ -1509,7 +1656,7 @@ BITSTREAM_CFLAGS=
# Define the name of the makefile -- used in dependencies.
-MAKEFILE=$(PSSRCDIR)\msvc32.mak
+MAKEFILE=$(PSSRCDIR)\msvc.mak
TOP_MAKEFILES=$(MAKEFILE) $(GLSRCDIR)\msvccmd.mak $(GLSRCDIR)\msvctail.mak $(GLSRCDIR)\winlib.mak $(PSSRCDIR)\winint.mak
# Define the files to be removed by `make clean'.
@@ -1661,7 +1808,7 @@ $(GS_XE): $(GSDLL_DLL)
!else
$(GS_XE): $(GSDLL_DLL) $(DWOBJ) $(GSCONSOLE_XE) $(GLOBJ)gp_wutf8.$(OBJ) $(TOP_MAKEFILES)
- echo /SUBSYSTEM:WINDOWS > $(PSGEN)gswin.rsp
+ echo /SUBSYSTEM:WINDOWS$(SUBSUBSYS) > $(PSGEN)gswin.rsp
!if "$(PROFILE)"=="1"
echo /Profile >> $(PSGEN)gswin.rsp
!endif
@@ -1676,7 +1823,7 @@ $(GS_XE): $(GSDLL_DLL) $(DWOBJ) $(GSCONSOLE_XE) $(GLOBJ)gp_wutf8.$(OBJ) $(TOP_M
# The console mode small EXE loader
$(GSCONSOLE_XE): $(OBJC) $(GS_OBJ).res $(PSSRCDIR)\dw64c.def $(PSSRCDIR)\dw32c.def $(GLOBJ)gp_wutf8.$(OBJ) $(TOP_MAKEFILES)
- echo /SUBSYSTEM:CONSOLE > $(PSGEN)gswin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(PSGEN)gswin.rsp
!if "$(PROFILE)"=="1"
echo /Profile >> $(PSGEN)gswin.rsp
!endif
@@ -1713,7 +1860,7 @@ $(GPCL6DLL_DLL): $(ECHOGS_XE) $(GSDLL_OBJ).res $(LIBCTR) $(LIB_ALL) $(PCL_DEVS_A
del $(PCLGEN)gpclwin.rsp
$(GPCL_XE): $(GPCL6DLL_DLL) $(DWMAINOBJS) $(GS_OBJ).res $(TOP_MAKEFILES)
- echo /SUBSYSTEM:CONSOLE > $(PCLGEN)gpclwin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(PCLGEN)gpclwin.rsp
!if "$(PROFILE)"=="1"
echo /Profile >> $(PCLGEN)gpclwin.rsp
!endif
@@ -1741,7 +1888,7 @@ $(GXPSDLL_DLL): $(ECHOGS_XE) $(GSDLL_OBJ).res $(LIBCTR) $(LIB_ALL) $(XPS_DEVS_AL
del $(PCLGEN)gxpswin.rsp
$(GXPS_XE): $(GXPSDLL_DLL) $(DWMAINOBJS) $(GS_OBJ).res $(TOP_MAKEFILES)
- echo /SUBSYSTEM:CONSOLE > $(XPSGEN)gxpswin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(XPSGEN)gxpswin.rsp
!if "$(PROFILE)"=="1"
echo /Profile >> $(XPSGEN)gxpswin.rsp
!endif
@@ -1781,7 +1928,7 @@ $(GPDLDLL_DLL): $(ECHOGS_XE) $(GSDLL_OBJ).res $(LIBCTR) $(LIB_ALL) $(PCL_DEVS_AL
del $(GPDLGEN)gpdlwin.rsp
$(GPDL_XE): $(GPDLDLL_DLL) $(DWMAINOBJS) $(GS_OBJ).res $(TOP_MAKEFILES)
- echo /SUBSYSTEM:CONSOLE > $(GPDLGEN)gpdlwin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(GPDLGEN)gpdlwin.rsp
!if "$(PROFILE)"=="1"
echo /Profile >> $(XPSGEN)gpdlwin.rsp
!endif
@@ -1827,7 +1974,7 @@ $(GSCONSOLE_XE): $(ECHOGS_XE) $(gs_tr) $(GS_ALL) $(DEVS_ALL) $(GSDLL_OBJS) $(OBJ
echo $(GLOBJ)dwimg.obj >> $(PSGEN)gswin.tr
echo $(PSOBJ)dwmainc.obj >> $(PSGEN)gswin.tr
echo $(PSOBJ)dwreg.obj >> $(PSGEN)gswin.tr
- echo /SUBSYSTEM:CONSOLE > $(PSGEN)gswin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(PSGEN)gswin.rsp
!ifdef WIN64
echo /DEF:$(PSSRCDIR)\dw64c.def /OUT:$(GSCONSOLE_XE) >> $(PSGEN)gswin.rsp
!else
@@ -1845,7 +1992,7 @@ $(GPCL_XE): $(ECHOGS_XE) $(LIBCTR) $(LIB_ALL) $(WINMAINOBJS) $(PCL_DEVS_ALL) $(P
copy $(pclld_tr) $(PCLGEN)gpclwin.tr
echo $(WINMAINOBJS) $(MAIN_OBJ) $(TOP_OBJ) $(INT_ARCHIVE_SOME) $(XOBJS) >> $(PCLGEN)gpclwin.tr
echo $(PCLOBJ)pclromfs$(COMPILE_INITS).$(OBJ) >> $(PCLGEN)gpclwin.tr
- echo /SUBSYSTEM:CONSOLE > $(PCLGEN)pclwin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(PCLGEN)pclwin.rsp
echo /OUT:$(GPCL_XE) >> $(PCLGEN)pclwin.rsp
$(LINK) $(LCT) @$(PCLGEN)pclwin.rsp @$(PCLGEN)gpclwin.tr $(LINKLIBPATH) @$(LIBCTR) @$(PCLGEN)pcllib.rsp
del $(PCLGEN)pclwin.rsp
@@ -1858,7 +2005,7 @@ $(GXPS_XE): $(ECHOGS_XE) $(LIBCTR) $(LIB_ALL) $(WINMAINOBJS) $(XPS_DEVS_ALL) $(X
copy $(xpsld_tr) $(XPSGEN)gxpswin.tr
echo $(WINMAINOBJS) $(MAIN_OBJ) $(XPS_TOP_OBJS) $(INT_ARCHIVE_SOME) $(XOBJS) >> $(XPSGEN)gxpswin.tr
echo $(PCLOBJ)xpsromfs$(COMPILE_INITS).$(OBJ) >> $(XPSGEN)gxpswin.tr
- echo /SUBSYSTEM:CONSOLE > $(XPSGEN)xpswin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(XPSGEN)xpswin.rsp
echo /OUT:$(GXPS_XE) >> $(XPSGEN)xpswin.rsp
$(LINK) $(LCT) @$(XPSGEN)xpswin.rsp @$(XPSGEN)gxpswin.tr $(LINKLIBPATH) @$(LIBCTR) @$(XPSGEN)xpslib.rsp
del $(XPSGEN)xpswin.rsp
@@ -1872,7 +2019,7 @@ $(GPDL_XE): $(ECHOGS_XE) $(ld_tr) $(gpdl_tr) $(LIBCTR) $(LIB_ALL) $(WINMAINOBJS)
copy $(gpdlld_tr) $(GPDLGEN)gpdlwin.tr
echo $(WINMAINOBJS) $(MAIN_OBJ) $(GPDL_PSI_TOP_OBJS) $(PCL_PXL_TOP_OBJS) $(PSI_TOP_OBJ) $(XPS_TOP_OBJ) $(XOBJS) >> $(GPDLGEN)gpdlwin.tr
echo $(PCLOBJ)pdlromfs$(COMPILE_INITS).$(OBJ) >> $(GPDLGEN)gpdlwin.tr
- echo /SUBSYSTEM:CONSOLE > $(GPDLGEN)gpdlwin.rsp
+ echo /SUBSYSTEM:CONSOLE$(SUBSUBSYS) > $(GPDLGEN)gpdlwin.rsp
echo /OUT:$(GPDL_XE) >> $(GPDLGEN)gpdlwin.rsp
$(LINK) $(LCT) @$(GPDLGEN)gpdlwin.rsp @$(GPDLGEN)gpdlwin.tr $(LINKLIBPATH) @$(LIBCTR) @$(GPDLGEN)gpdllib.rsp
del $(GPDLGEN)gpdlwin.rsp
@@ -1888,28 +2035,36 @@ WINDEFS=WIN64= BUILD_SYSTEM="$(BUILD_SYSTEM)" PGMFILES="$(PGMFILES)" PGMFILESx86
WINDEFS=BUILD_SYSTEM="$(BUILD_SYSTEM)" PGMFILES="$(PGMFILES)" PGMFILESx86="$(PGMFILESx86)"
!endif
-DEBUGDEFS=DEBUG=1 TDEBUG=1
+RECURSIVEDEFS=$(WINDEFS)
+!ifdef XP
+RECURSIVEDEFS=XP=$(XP) $(RECURSIVEDEFS)
+!endif
+!ifdef DEVSTUDIO
+RECURSIVEDEFS=DEVSTUDIO="$(DEVSTUDIO)" $(RECURSIVEDEFS)
+!endif
+
+DEBUGDEFS=DEBUG=1 TDEBUG=1 $(RECURSIVEDEFS)
debug:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS)
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE)
gsdebug:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) gs
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) gs
gpcl6debug:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) gpcl6
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) gpcl6
gxpsdebug:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) gxps
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) gxps
gpdldebug:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) gpdl
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) gpdl
debugclean:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) clean
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) clean
debugbsc:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(DEBUGDEFS) $(WINDEFS) bsc
+ nmake -f $(MAKEFILE) $(DEBUGDEFS) FT_BRIDGE=$(FT_BRIDGE) bsc
# --------------------- Memento targets --------------------- #
# Simply set some definitions and call ourselves back #
@@ -1917,52 +2072,52 @@ debugbsc:
MEMENTODEFS=$(DEBUGDEFS) MEMENTO=1
memento-target:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS)
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE)
gsmemento:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) gs
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) gs
gpcl6memento:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) gpcl6
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) gpcl6
gxpsmemento:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) gxps
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) gxps
gpdlmemento:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) gpdl
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) gpdl
mementoclean:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) clean
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) clean
mementobsc:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(MEMENTODEFS) $(WINDEFS) bsc
+ nmake -f $(MAKEFILE) $(MEMENTODEFS) FT_BRIDGE=$(FT_BRIDGE) bsc
# --------------------- Profile targets --------------------- #
# Simply set some definitions and call ourselves back #
-PROFILEDEFS=PROFILE=1
+PROFILEDEFS=$(RECURSIVEDEFS) PROFILE=1
profile:
profile-target:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS)
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE)
gsprofile:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) gs
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) gs
gpcl6profile:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) gpcl6
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) gpcl6
gxpsprofile:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) gxps
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) gxps
gpdlprofile:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) gpdl
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) gpdl
profileclean:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) clean
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) clean
profilebsc:
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" FT_BRIDGE=$(FT_BRIDGE) $(PROFILEDEFS) $(WINDEFS) bsc
+ nmake -f $(MAKEFILE) $(PROFILEDEFS) FT_BRIDGE=$(FT_BRIDGE) bsc
@@ -1999,22 +2154,22 @@ ufst-lib:
# nmake -f makefile.artifex fco_lib.a if_lib.a psi_lib.a tt_lib.a
ufst-debug: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS)
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)"
ufst-debugclean: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS) clean
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" clean
ufst-debugbsc: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS) bsc
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEBUGDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" bsc
ufst: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS)
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)"
ufst-clean: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS) clean
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" clean
ufst-bsc: ufst-lib
- nmake -f $(MAKEFILE) DEVSTUDIO="$(DEVSTUDIO)" $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" $(WINDEFS) bsc
+ nmake -f $(MAKEFILE) $(RECURSIVEDEFS) $(UFSTBASEDEFS) $(UFSTDEFS) UFST_CFLAGS="$(UFST_CFLAGS)" bsc
#----------------------- Individual Product Targets --------------------#
gs:$(GS_XE) $(GSCONSOLE_XE)
diff --git a/psi/nsisinst.nsi b/psi/nsisinst.nsi
index e26d66c6..5c272552 100644
--- a/psi/nsisinst.nsi
+++ b/psi/nsisinst.nsi
@@ -128,6 +128,9 @@ CRCCheck on
!define MUI_FINISHPAGE_LINK_LOCATION http://www.ghostscript.com/
!insertmacro MUI_PAGE_WELCOME
+
+Page custom OldVersionsPageCreate
+
!insertmacro MUI_PAGE_LICENSE "LICENSE"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
@@ -135,6 +138,23 @@ CRCCheck on
!insertmacro MUI_LANGUAGE "English"
+Function OldVersionsPageCreate
+ !insertmacro MUI_HEADER_TEXT "Previous Ghostscript Installations" "Optionally run the uninstallers for previous Ghostscript installations$\nClick $\"Cancel$\" to stop uninstalling previous installs"
+
+ StrCpy $0 0
+ loop:
+ EnumRegKey $1 HKLM "Software\Artifex\GPL Ghostscript" $0
+ StrCmp $1 "" done
+ IntOp $0 $0 + 1
+ MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "Uninstall Ghostscript Version $1?" IDNO loop IDCANCEL done
+ Var /GLOBAL uninstexe
+ ReadRegStr $uninstexe HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GPL Ghostscript $1" "UninstallString"
+ ExecWait "$uninstexe"
+ Goto loop
+ done:
+
+FunctionEnd
+
!searchparse /ignorecase /noerrors "${TARGET}" w WINTYPE
!echo "Building ${WINTYPE}-bit installer"
@@ -239,10 +259,11 @@ Function .onInit
Abort
${EndIf}
!endif
- System::Call 'kernel32::CreateMutexA(i 0, i 0, t "GhostscriptInstaller") i .r1 ?e'
+
+ System::Call 'kernel32::CreateMutexA(i 0, i 0, t "Ghostscript${VERSION}Installer") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
- MessageBox MB_OK "The Ghostscript installer is already running." /SD IDOK
+ MessageBox MB_OK "The Ghostscript ${VERSION} installer is already running." /SD IDOK
Abort
FunctionEnd
@@ -266,7 +287,7 @@ Delete "$INSTDIR\uninstgs.exe"
!if "${WINTYPE}" == "64"
SetRegView 64
!endif
-DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Artifex\GPL Ghostscript\${VERSION}"
+DeleteRegKey HKEY_LOCAL_MACHINE "Software\Artifex\GPL Ghostscript\${VERSION}"
DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\GPL Ghostscript ${VERSION}"
DeleteRegKey HKEY_LOCAL_MACHINE "Software\GPL Ghostscript\${VERSION}"
RMDir /r "$INSTDIR\doc"
diff --git a/psi/winint.mak b/psi/winint.mak
index 08452e52..10656e98 100644
--- a/psi/winint.mak
+++ b/psi/winint.mak
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2019 Artifex Software, Inc.
+# Copyright (C) 2001-2020 Artifex Software, Inc.
# All Rights Reserved.
#
# This software is provided AS-IS with no warranty, either express or
diff --git a/psi/zbfont.c b/psi/zbfont.c
index 262fea95..abc03aa0 100644
--- a/psi/zbfont.c
+++ b/psi/zbfont.c
@@ -272,7 +272,7 @@ gs_font_map_glyph_to_unicode(gs_font *font, gs_glyph glyph, int ch, ushort *u, u
* can't be a default value for FontInfo.GlyphNames2Unicode .
*/
}
- if (glyph <= GS_MIN_CID_GLYPH) {
+ if (glyph <= GS_MIN_CID_GLYPH && glyph != GS_NO_GLYPH) {
UnicodeDecoding = zfont_get_to_unicode_map(font->dir);
if (UnicodeDecoding != NULL && r_type(UnicodeDecoding) == t_dictionary)
return gs_font_map_glyph_by_dict(font->memory, UnicodeDecoding, glyph, u, length);
diff --git a/psi/zcolor.c b/psi/zcolor.c
index d20434e7..373bc06b 100644
--- a/psi/zcolor.c
+++ b/psi/zcolor.c
@@ -792,9 +792,9 @@ int
zcolor_remap_color(i_ctx_t *i_ctx_p)
{
/* Remap both colors. This should never hurt. */
- gs_swapcolors(igs);
+ gs_swapcolors_quick(igs);
gx_unset_dev_color(igs);
- gs_swapcolors(igs);
+ gs_swapcolors_quick(igs);
gx_unset_dev_color(igs);
return 0;
}
@@ -6929,7 +6929,8 @@ zswapcolors(i_ctx_t * i_ctx_p)
istate->pattern[0] = istate->pattern[1];
istate->pattern[1] = tmp_pat;
- return gs_swapcolors(igs);
+ gs_swapcolors_quick(igs);
+ return 0;
}
static int
diff --git a/psi/zfile.c b/psi/zfile.c
index 2f13992f..be03a556 100644
--- a/psi/zfile.c
+++ b/psi/zfile.c
@@ -733,7 +733,8 @@ ztempfile(i_ctx_t *i_ctx_p)
os_ptr op = osp;
const char *pstr;
char fmode[4];
- int code = parse_file_access_string(op, fmode);
+ char fmode_temp[4];
+ int code = parse_file_access_string(op, fmode_temp);
char *prefix = NULL;
char *fname= NULL;
uint fnlen;
@@ -750,7 +751,7 @@ ztempfile(i_ctx_t *i_ctx_p)
goto done;
}
- strcat(fmode, gp_fmode_binary_suffix);
+ snprintf(fmode, sizeof(fmode), "%s%s", fmode_temp, gp_fmode_binary_suffix);
if (r_has_type(op - 1, t_null))
pstr = gp_scratch_file_name_prefix;
else {
diff --git a/psi/zfilter.c b/psi/zfilter.c
index dd06c755..3ce7652c 100644
--- a/psi/zfilter.c
+++ b/psi/zfilter.c
@@ -32,6 +32,10 @@
#include "ifilter.h"
#include "files.h" /* for filter_open, file_d'_buffer_size */
+#ifdef URF_INCLUDED
+#include "urffilter.c"
+#endif
+
/* <source> ASCIIHexEncode/filter <file> */
/* <source> <dict> ASCIIHexEncode/filter <file> */
static int
@@ -105,6 +109,7 @@ zRLE(i_ctx_t *i_ctx_p)
stream_RLE_state state;
int code;
+ s_RLE_template.set_defaults((stream_state *)&state);
check_op(2);
code = rl_setup(op - 1, &state.EndOfData);
if (code < 0)
@@ -497,6 +502,9 @@ const op_def zfilter_op_defs[] = {
{"2RunLengthEncode", zRLE},
{"1RunLengthDecode", zRLD},
{"1PWGDecode", zPWGD},
+#ifdef URF_INCLUDED
+ {"1URFDecode", zURFD},
+#endif
{"3SubFileDecode", zSFD},
{"1.EOFDecode", zEOFD},
op_def_end(0)
diff --git a/psi/zfont2.c b/psi/zfont2.c
index 19c1e9ef..6e424c9d 100644
--- a/psi/zfont2.c
+++ b/psi/zfont2.c
@@ -1667,8 +1667,14 @@ undelta(ref *ops, unsigned int cnt)
unsigned int i;
for (i = 0; i < cnt; i++) {
- if (!r_has_type(&ops[i], t_real))
- make_real(&ops[i], (float)ops[i].value.intval);
+ if (!r_has_type(&ops[i], t_real)) {
+ /* Strictly speaking assigning one element of union
+ * to another, overlapping element of a different size is
+ * undefined behavior, hence assign to an intermediate variable
+ */
+ float fl = (float)ops[i].value.intval;
+ make_real(&ops[i], fl);
+ }
}
for (i = 1; i < cnt; i++) {
make_real(&ops[i], ops[i].value.realval + ops[i - 1].value.realval);
diff --git a/psi/zpaint.c b/psi/zpaint.c
index efffaab8..3251c1be 100644
--- a/psi/zpaint.c
+++ b/psi/zpaint.c
@@ -19,6 +19,8 @@
#include "oper.h"
#include "gspaint.h"
#include "igstate.h"
+#include "store.h"
+#include "estack.h"
/* - fill - */
static int
@@ -41,6 +43,60 @@ zstroke(i_ctx_t *i_ctx_p)
return gs_stroke(igs);
}
+static int
+fillstroke_cont(i_ctx_t *i_ctx_p)
+{
+ os_ptr op = osp;
+ int restart, code;
+
+ check_type(*op, t_integer);
+ restart = (int)op->value.intval;
+ code = gs_fillstroke(igs, &restart);
+ if (code == gs_error_Remap_Color) {
+ op->value.intval = restart;
+ return code;
+ }
+ pop(1);
+ return code;
+}
+
+static int
+zfillstroke(i_ctx_t *i_ctx_p)
+{
+ os_ptr op = osp;
+ push(1);
+ make_int(op, 0); /* 0 implies we are at fill color, need to swap first */
+ push_op_estack(fillstroke_cont);
+ return o_push_estack;
+}
+
+static int
+eofillstroke_cont(i_ctx_t *i_ctx_p)
+{
+ os_ptr op = osp;
+ int restart, code;
+
+ check_type(*op, t_integer);
+ restart = (int)op->value.intval;
+ code = gs_eofillstroke(igs, &restart);
+ if (code == gs_error_Remap_Color) {
+ op->value.intval = restart;
+ return code;
+ }
+ pop(1);
+ return code;
+}
+
+static int
+zeofillstroke(i_ctx_t *i_ctx_p)
+{
+ os_ptr op = osp;
+ push(1);
+ make_int(op, 0);
+ push_op_estack(eofillstroke_cont);
+ return o_push_estack;
+}
+
/* ------ Non-standard operators ------ */
/* - .fillpage - */
@@ -80,5 +136,9 @@ const op_def zpaint_op_defs[] =
/* Non-standard operators */
{"0.fillpage", zfillpage},
{"3.imagepath", zimagepath},
+ {"0.eofillstroke", zeofillstroke},
+ {"0.fillstroke", zfillstroke},
+ {"0%eofillstroke_cont", eofillstroke_cont },
+ {"0%fillstroke_cont", fillstroke_cont },
op_def_end(0)
};
diff --git a/psi/zpcolor.c b/psi/zpcolor.c
index 037ddafb..4f8b10cd 100644
--- a/psi/zpcolor.c
+++ b/psi/zpcolor.c
@@ -379,7 +379,7 @@ pattern_paint_finish(i_ctx_t *i_ctx_p)
}
}
}
- code = gx_pattern_cache_add_entry(igs, pdev, &ctile);
+ code = gx_pattern_cache_add_entry(igs, pdev, &ctile, igs);
if (code < 0)
return code;
}
diff --git a/psi/ztype.c b/psi/ztype.c
index f42f35e0..94e5e032 100644
--- a/psi/ztype.c
+++ b/psi/ztype.c
@@ -304,7 +304,14 @@ zcvr(i_ctx_t *i_ctx_p)
switch (r_type(op)) {
case t_integer:
- make_real(op, (float)op->value.intval);
+ {
+ /* Strictly speaking assigning one element of union
+ * to another, overlapping element of a different size is
+ * undefined behavior, hence assign to an intermediate variable
+ */
+ float fl = (float)op->value.intval;
+ make_real(op, fl);
+ }
case t_real:
return 0;
default:
diff --git a/psi/zvmem.c b/psi/zvmem.c
index b6e366fa..5c0810f3 100644
--- a/psi/zvmem.c
+++ b/psi/zvmem.c
@@ -84,9 +84,6 @@ zsave(i_ctx_t *i_ctx_p)
code = gs_gsave_for_save(igs, &prev);
if (code < 0)
return code;
- code = gs_gsave(igs);
- if (code < 0)
- return code;
vmsave->gsave = prev;
push(1);
make_tav(op, t_save, 0, saveid, sid);
diff --git a/tiff/CMakeLists.txt b/tiff/CMakeLists.txt
index 52b5ae99..35b48770 100644
--- a/tiff/CMakeLists.txt
+++ b/tiff/CMakeLists.txt
@@ -23,7 +23,7 @@
# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
-cmake_minimum_required(VERSION 2.8.9)
+cmake_minimum_required(VERSION 2.8.11) # b/c of use of BUILD_INTERFACE generator expression
# Default policy is from 2.8.9
cmake_policy(VERSION 2.8.9)
@@ -92,8 +92,9 @@ include(GNUInstallDirs)
include(CheckCCompilerFlag)
include(CheckCSourceCompiles)
include(CheckIncludeFile)
+include(CheckLibraryExists)
include(CheckTypeSize)
-include(CheckFunctionExists)
+include(CheckSymbolExists)
enable_testing()
macro(current_date var)
@@ -213,9 +214,6 @@ check_include_file(dlfcn.h HAVE_DLFCN_H)
check_include_file(fcntl.h HAVE_FCNTL_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(io.h HAVE_IO_H)
-check_include_file(limits.h HAVE_LIMITS_H)
-check_include_file(malloc.h HAVE_MALLOC_H)
-check_include_file(memory.h HAVE_MEMORY_H)
check_include_file(search.h HAVE_SEARCH_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(string.h HAVE_STRING_H)
@@ -271,8 +269,6 @@ int main(void){
# Check type sizes
# NOTE: Could be replaced with C99 <stdint.h>
-check_type_size("signed short" SIZEOF_SIGNED_SHORT)
-check_type_size("unsigned short" SIZEOF_UNSIGNED_SHORT)
check_type_size("signed int" SIZEOF_SIGNED_INT)
check_type_size("unsigned int" SIZEOF_UNSIGNED_INT)
check_type_size("signed long" SIZEOF_SIGNED_LONG)
@@ -342,29 +338,21 @@ endif()
if(SIZEOF_UNSIGNED_INT EQUAL SIZEOF_SIZE_T)
set(TIFF_SIZE_T "unsigned int")
set(TIFF_SIZE_FORMAT "%u")
+ set(TIFF_SSIZE_T "signed int")
+ set(TIFF_SSIZE_FORMAT "%d")
elseif(SIZEOF_UNSIGNED_LONG EQUAL SIZEOF_SIZE_T)
set(TIFF_SIZE_T "unsigned long")
set(TIFF_SIZE_FORMAT "%lu")
-elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T)
- set(TIFF_SIZE_T "unsigned long")
- if (MINGW)
- set(TIFF_SIZE_FORMAT "%I64u")
- else()
- set(TIFF_SIZE_FORMAT "%llu")
- endif()
-endif()
-
-if(SIZEOF_SIGNED_INT EQUAL SIZEOF_UNSIGNED_CHAR_P)
- set(TIFF_SSIZE_T "signed int")
- set(TIFF_SSIZE_FORMAT "%d")
-elseif(SIZEOF_SIGNED_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P)
set(TIFF_SSIZE_T "signed long")
set(TIFF_SSIZE_FORMAT "%ld")
-elseif(SIZEOF_SIGNED_LONG_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P)
+elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T)
+ set(TIFF_SIZE_T "unsigned long long")
set(TIFF_SSIZE_T "signed long long")
if (MINGW)
+ set(TIFF_SIZE_FORMAT "%I64u")
set(TIFF_SSIZE_FORMAT "%I64d")
else()
+ set(TIFF_SIZE_FORMAT "%llu")
set(TIFF_SSIZE_FORMAT "%lld")
endif()
endif()
@@ -388,80 +376,37 @@ endif()
# TIFF_SSIZE_T TIFF_SSIZE_FORMAT
# TIFF_PTRDIFF_T TIFF_PTRDIFF_FORMAT)
-# Nonstandard int types
-check_type_size(INT8 int8)
-set(HAVE_INT8 ${INT8})
-check_type_size(INT16 int16)
-set(HAVE_INT16 ${INT16})
-check_type_size(INT32 int32)
-set(HAVE_INT32 ${INT32})
-
-# Check functions
-set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
-set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${M_LIBRARY})
-check_function_exists(floor HAVE_FLOOR)
-check_function_exists(pow HAVE_POW)
-check_function_exists(sqrt HAVE_SQRT)
-set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
-
-check_function_exists(isascii HAVE_ISASCII)
-check_function_exists(memmove HAVE_MEMMOVE)
-check_function_exists(memset HAVE_MEMSET)
-check_function_exists(mmap HAVE_MMAP)
-check_function_exists(setmode HAVE_SETMODE)
-check_function_exists(strcasecmp HAVE_STRCASECMP)
-check_function_exists(strchr HAVE_STRCHR)
-check_function_exists(strrchr HAVE_STRRCHR)
-check_function_exists(strstr HAVE_STRSTR)
-check_function_exists(strtol HAVE_STRTOL)
-check_function_exists(strtol HAVE_STRTOUL)
-check_function_exists(strtoull HAVE_STRTOULL)
-check_function_exists(getopt HAVE_GETOPT)
-check_function_exists(lfind HAVE_LFIND)
-
-# May be inlined, so check it compiles:
-check_c_source_compiles("
-#include <stdio.h>
-int main(void) {
- char buf[10];
- snprintf(buf, 10, \"Test %d\", 1);
- return 0;
-}"
- HAVE_SNPRINTF)
+check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP)
+check_symbol_exists(setmode "unistd.h" HAVE_SETMODE)
+check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
+check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
+check_symbol_exists(strtol "stdlib.h" HAVE_STRTOL)
+check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
+check_symbol_exists(strtoul "stdlib.h" HAVE_STRTOUL)
+check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL)
+check_symbol_exists(getopt "unistd.h;stdio.h" HAVE_GETOPT)
+check_symbol_exists(lfind "search.h" HAVE_LFIND)
if(NOT HAVE_SNPRINTF)
add_definitions(-DNEED_LIBPORT)
endif()
# CPU bit order
-set(fillorder FILLORDER_MSB2LSB)
+set(HOST_FILLORDER FILLORDER_MSB2LSB)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i.*86.*" OR
CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64.*" OR
+ # AMD64 on Windows
+ CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" OR
CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64.*")
- set(fillorder FILLORDER_LSB2MSB)
+ set(HOST_FILLORDER FILLORDER_LSB2MSB)
endif()
-set(HOST_FILLORDER ${fillorder} CACHE STRING "Native CPU bit order")
-mark_as_advanced(HOST_FILLORDER)
# CPU endianness
include(TestBigEndian)
-test_big_endian(bigendian)
-if (bigendian)
- set(bigendian ON)
-else()
- set(bigendian OFF)
-endif()
-set(HOST_BIG_ENDIAN ${bigendian} CACHE STRING "Native CPU bit order")
-mark_as_advanced(HOST_BIG_ENDIAN)
-if (HOST_BIG_ENDIAN)
- set(HOST_BIG_ENDIAN 1)
-else()
- set(HOST_BIG_ENDIAN 0)
-endif()
+test_big_endian(HOST_BIG_ENDIAN)
# IEEE floating point
-set(HAVE_IEEEFP 1 CACHE STRING "IEEE floating point is available")
-mark_as_advanced(HAVE_IEEEFP)
+set(HAVE_IEEEFP 1)
report_values(CMAKE_HOST_SYSTEM_PROCESSOR HOST_FILLORDER
HOST_BIG_ENDIAN HAVE_IEEEFP)
@@ -560,12 +505,9 @@ else()
set(JBIG_FOUND FALSE)
endif()
-set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${JBIG_INCLUDE_DIR})
-set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${JBIG_LIBRARY})
-check_function_exists(jbg_newlen HAVE_JBG_NEWLEN)
-set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
+check_symbol_exists(jbg_newlen "jbig.h" HAVE_JBG_NEWLEN)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
# liblzma2
@@ -578,6 +520,42 @@ if(LIBLZMA_FOUND)
set(LZMA_SUPPORT 1)
endif()
+# libzstd
+option(zstd "use libzstd (required for ZSTD compression)" ON)
+if (zstd)
+ find_path(ZSTD_INCLUDE_DIR zstd.h)
+ find_library(ZSTD_LIBRARY NAMES zstd)
+ if (ZSTD_INCLUDE_DIR AND ZSTD_LIBRARY)
+ check_library_exists ("${ZSTD_LIBRARY}" ZSTD_decompressStream "" ZSTD_RECENT_ENOUGH)
+ if (ZSTD_RECENT_ENOUGH)
+ set(ZSTD_FOUND TRUE)
+ set(ZSTD_LIBRARIES ${ZSTD_LIBRARY})
+ message(STATUS "Found ZSTD library: ${ZSTD_LIBRARY}")
+ else ()
+ message(WARNING "Found ZSTD library, but not recent enough. Use zstd >= 1.0")
+ endif ()
+ endif ()
+endif()
+set(ZSTD_SUPPORT 0)
+if(ZSTD_FOUND)
+ set(ZSTD_SUPPORT 1)
+endif()
+
+# libwebp
+option(webp "use libwebp (required for WEBP compression)" ON)
+if (webp)
+ find_path(WEBP_INCLUDE_DIR /webp/decode.h)
+ find_library(WEBP_LIBRARY NAMES webp)
+endif()
+set(WEBP_SUPPORT 0)
+set(WEBP_FOUND FALSE)
+if (WEBP_INCLUDE_DIR AND WEBP_LIBRARY)
+ set(WEBP_SUPPORT 1)
+ set(WEBP_FOUND TRUE)
+ set(WEBP_LIBRARIES ${WEBP_LIBRARY})
+ message(STATUS "Found WEBP library: ${WEBP_LIBRARY}")
+endif()
+
# 8/12-bit jpeg mode
option(jpeg12 "enable libjpeg 8/12-bit dual mode (requires separate
12-bit libjpeg build)" ON)
@@ -621,12 +599,8 @@ set(win32_io FALSE)
if(WIN32)
set(win32_io TRUE)
endif()
-set(USE_WIN32_FILEIO ${win32_io} CACHE BOOL "Use win32 IO system (Microsoft Windows only)")
-if (USE_WIN32_FILEIO)
- set(USE_WIN32_FILEIO TRUE)
-else()
- set(USE_WIN32_FILEIO FALSE)
-endif()
+
+set(USE_WIN32_FILEIO ${win32_io})
# Orthogonal features
@@ -643,7 +617,7 @@ if(strip-chopping)
endif()
# Defer loading of strip/tile offsets
-option(defer-strile-load "enable deferred strip/tile offset/size loading (experimental)" OFF)
+option(defer-strile-load "enable deferred strip/tile offset/size loading (also available at runtime with the 'D' flag of TIFFOpen())" OFF)
set(DEFER_STRILE_LOAD ${defer-strile-load})
# CHUNKY_STRIP_READ_SUPPORT
@@ -692,6 +666,12 @@ endif()
if(LIBLZMA_INCLUDE_DIRS)
list(APPEND TIFF_INCLUDES ${LIBLZMA_INCLUDE_DIRS})
endif()
+if(ZSTD_INCLUDE_DIR)
+ list(APPEND TIFF_INCLUDES ${ZSTD_INCLUDE_DIR})
+endif()
+if(WEBP_INCLUDE_DIR)
+ list(APPEND TIFF_INCLUDES ${WEBP_INCLUDE_DIR})
+endif()
# Libraries required by libtiff
set(TIFF_LIBRARY_DEPS)
@@ -713,6 +693,12 @@ endif()
if(LIBLZMA_LIBRARIES)
list(APPEND TIFF_LIBRARY_DEPS ${LIBLZMA_LIBRARIES})
endif()
+if(ZSTD_LIBRARIES)
+ list(APPEND TIFF_LIBRARY_DEPS ${ZSTD_LIBRARIES})
+endif()
+if(WEBP_LIBRARIES)
+ list(APPEND TIFF_LIBRARY_DEPS ${WEBP_LIBRARIES})
+endif()
#report_values(TIFF_INCLUDES TIFF_LIBRARY_DEPS)
@@ -756,6 +742,8 @@ message(STATUS " Old JPEG support: ${old-jpeg} (requested) ${
message(STATUS " JPEG 8/12 bit dual mode: ${jpeg12} (requested) ${JPEG12_FOUND} (availability)")
message(STATUS " ISO JBIG support: ${jbig} (requested) ${JBIG_FOUND} (availability)")
message(STATUS " LZMA2 support: ${lzma} (requested) ${LIBLZMA_FOUND} (availability)")
+message(STATUS " ZSTD support: ${zstd} (requested) ${ZSTD_FOUND} (availability)")
+message(STATUS " WEBP support: ${webp} (requested) ${WEBP_FOUND} (availability)")
message(STATUS "")
message(STATUS " C++ support: ${cxx} (requested) ${CXX_SUPPORT} (availability)")
message(STATUS "")
diff --git a/tiff/ChangeLog b/tiff/ChangeLog
index ea8622b8..01e2182c 100644
--- a/tiff/ChangeLog
+++ b/tiff/ChangeLog
@@ -1,3 +1,1582 @@
+2019-11-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ libtiff 4.1.0 released.
+
+ Added a step for updating the legacy ChangeLog file.
+
+ Ignore emacs temporary files (ending with tilde character).
+
+ Added release summary page for the 4.1.0 release.
+
+ Fix Cmake HAVE_GETOPT for systems which declare getopt in stdio.h. Fix utility baked-in getopt prototype which appears when HAVE_GETOPT is not defined.
+
+ Fax2tiff.sh needs to remove its output file in advance. Syntax changes so that bash is not required.
+
+2019-10-26 Even Rouault <even.rouault@spatialys.com>
+
+ tif_jpeg.c: extra cast to silence Coverity warning. GDAL CID 1406475.
+
+2019-10-23 Even Rouault <even.rouault@spatialys.com>
+
+ tif_jpeg.c: fix warning added by previous commit (on 32bit builds)
+
+2019-10-23 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'coverity-fixes' into 'master'
+ Coverity fixes
+
+ See merge request libtiff/libtiff!94
+
+2019-10-22 Timothy Lyanguzov <timothy.lyanguzov@sap.com>
+
+ Use 64-bit calculations correctly.
+
+ Fix size calculation to use 64-bit tmsize_t correctly.
+
+ Make bytesperclumpline calculations using tmsize_t type.
+
+2019-10-03 Even Rouault <even.rouault@spatialys.com>
+
+ tif_read: align code of TIFFReadRawStrip() and TIFFReadRawTile() that differed for non good reason. Non-functional change normally. (fixes GitLab #162)
+
+2019-10-01 Even Rouault <even.rouault@spatialys.com>
+
+ HTML: update for GitLab issues.
+
+2019-09-29 Even Rouault <even.rouault@spatialys.com>
+
+ html/v3.5.6-beta.html: redact URL of defunct web site.
+
+ Website: update links to mailing list.
+
+2019-09-17 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFReadAndRealloc(): avoid too large memory allocation attempts. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=17244
+
+2019-09-03 Even Rouault <even.rouault@spatialys.com>
+
+ ByteCountLooksBad and EstimateStripByteCounts: avoid unsigned integer overflows. Fixes https://oss-fuzz.com/testcase-detail/5686156066291712 and https://oss-fuzz.com/testcase-detail/6332499206078464
+
+2019-09-02 Even Rouault <even.rouault@spatialys.com>
+
+ tif_ojpeg.c: avoid relying on isTiled macro being wrapped in ()
+
+ tif_ojpeg.c: avoid use of uninitialized memory on edge/broken file. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16844
+
+ tiff_read_rgba_fuzzer.cc: add a -DSTANDALONE mode for easier reproduction of oss-fuzz reports
+
+2019-09-01 Even Rouault <even.rouault@spatialys.com>
+
+ tif_dirread.c: allocChoppedUpStripArrays(). avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16846
+
+2019-08-27 Even Rouault <even.rouault@spatialys.com>
+
+ tif_ojpeg.c: avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16793
+
+2019-08-26 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFReadDirEntryData(): rewrite to avoid unsigned integer overflow (not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16792
+
+ TIFFFetchDirectory(): fix invalid cast from uint64 to tmsize_t. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16784
+
+2019-08-25 Even Rouault <even.rouault@spatialys.com>
+
+ JPEG: avoid use of unintialized memory on corrupted files.
+ Follow-up of cf3ce6fab894414a336546f62adc57f02590a22c
+ Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16602
+ Credit to OSS Fuzz
+
+2019-08-23 Even Rouault <even.rouault@spatialys.com>
+
+ _TIFFPartialReadStripArray(): avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16685
+
+ OJPEGWriteHeaderInfo(): avoid unsigned integer overflow on strile dimensions close to UINT32_MAX. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16683
+
+ TIFFFillStrip(): avoid harmless unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16653
+
+ EstimateStripByteCounts(): avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16643&
+
+ tif_ojpeg: avoid unsigned integer overflow (probably not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16635
+
+ tif_thunder: avoid unsigned integer overflow (not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16632
+
+2019-08-22 Even Rouault <even.rouault@spatialys.com>
+
+ _TIFFMultiply32() / _TIFFMultiply64(): avoid relying on unsigned integer overflow (not a bug)
+
+ EstimateStripByteCounts(): avoid unsigned integer overflow.
+
+2019-08-21 Even Rouault <even.rouault@spatialys.com>
+
+ EstimateStripByteCounts(): avoid unsigned integer overflow.
+
+2019-08-20 Even Rouault <even.rouault@spatialys.com>
+
+ EstimateStripByteCounts(): avoid harmless unsigned integer overflow.
+
+ _TIFFPartialReadStripArray(): avoid triggering unsigned integer overflow with -fsanitize=unsigned-integer-overflow (not a bug, this is well defined by itself)
+
+2019-08-18 Even Rouault <even.rouault@spatialys.com>
+
+ tiff2ps: fix use of wrong data type that caused issues (/Height being written as 0) on 64-bit big endian platforms
+
+2019-08-16 Even Rouault <even.rouault@spatialys.com>
+
+ setByteArray(): fix previous commit.
+
+ setByteArray(): avoid potential signed integer overflow. Pointed by Hendra Gunadi. No actual problem known (which does not mean there wouldn't be any. Particularly on 32bit builds)
+
+2019-08-15 Even Rouault <even.rouault@spatialys.com>
+
+ RGBA interface: fix integer overflow potentially causing write heap buffer overflow, especially on 32 bit builds. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16443. Credit to OSS Fuzz
+
+2019-08-14 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix_integer_overflow' into 'master'
+ Fix integer overflow in _TIFFCheckMalloc() and other implementation-defined behaviour (CVE-2019-14973)
+
+ See merge request libtiff/libtiff!90
+
+2019-08-13 Even Rouault <even.rouault@spatialys.com>
+
+ Fix integer overflow in _TIFFCheckMalloc() and other implementation-defined behaviour (CVE-2019-14973)
+ _TIFFCheckMalloc()/_TIFFCheckRealloc() used a unsafe way to detect overflow
+ in the multiplication of nmemb and elem_size (which are of type tmsize_t, thus
+ signed), which was especially easily triggered on 32-bit builds (with recent
+ enough compilers that assume that signed multiplication cannot overflow, since
+ this is undefined behaviour by the C standard). The original issue which lead to
+ this fix was trigged from tif_fax3.c
+
+ There were also unsafe (implementation defied), and broken in practice on 64bit
+ builds, ways of checking that a uint64 fits of a (signed) tmsize_t by doing
+ (uint64)(tmsize_t)uint64_var != uint64_var comparisons. Those have no known
+ at that time exploits, but are better to fix in a more bullet-proof way.
+ Or similarly use of (int64)uint64_var <= 0.
+
+2019-08-12 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFClientOpen(): fix memory leak if one of the required callbacks is not provided. Fixed Coverity GDAL CID 1404110
+
+ OJPEGReadBufferFill(): avoid very long processing time on corrupted files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16400. master only
+
+2019-08-10 Even Rouault <even.rouault@spatialys.com>
+
+ oss-fuzz/tiff_read_rgba_fuzzer.cc: fix wrong env variable value in previous commit
+
+ oss-fuzz/tiff_read_rgba_fuzzer.cc: avoid issue with libjpeg-turbo and MSAN
+
+ OJPEG: fix integer division by zero on corrupted subsampling factors. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15824. Credit to OSS Fuzz
+
+ Merge branch 'ossfuzz_i386'
+
+ contrib/oss-fuzz/build.sh: fix for i386 build of jbigkit, and use $LIB_FUZZING_ENGINE
+
+2019-08-10 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'patch-1' into 'master'
+ fix two tiny typos
+
+ See merge request libtiff/libtiff!89
+
+2019-08-10 Reto Kromer <rk@reto.ch>
+
+ fix two tiny typos.
+
+2019-08-09 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'patch-1' into 'master'
+ fix a typo in man page
+
+ See merge request libtiff/libtiff!88
+
+2019-08-09 Reto Kromer <rk@reto.ch>
+
+ fix typo.
+
+2019-08-04 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'TIFFTAGID_Zero_reading_IGNORE' into 'master'
+ Suppressed Reading of Tiff tags with ID = 0 (like GPSVERSIONID) corrected.
+
+ See merge request libtiff/libtiff!77
+
+2019-08-04 Su Laus <sulau@freenet.de>
+
+ Reading of Tiff tags with ID = 0 (like GPSVERSIONID) corrected.
+ IGNORE placeholder in tif_dirread.c is now replaced by a field dir_ignore in the TIFFDirEntry structure
+
+ Currently, in tif_dirread.c a special IGNORE value for the tif tags is defined
+ in order to flag status preventing already processed tags from further processing.
+ This irrational behaviour prevents reading of custom tags with id code 0 - like tag GPSVERSIONID from EXIF 2.31 definition.
+
+ An additional field 'tdir_ignore' is now added to the TIFFDirEntry structure and code is changed
+ to allow tags with id code 0 to be read correctly.
+
+ This change was already proposed as pending improvement in tif_dirread.c around line 32.
+
+ Reference is also made to:
+ - Discussion in https://gitlab.com/libtiff/libtiff/merge_requests/39
+ - http://bugzilla.maptools.org/show_bug.cgi?id=2540
+
+ Comments and indention adapted.
+
+ Preparation to rebase onto master
+
+2019-07-16 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'cmake_amd64' into 'master'
+ CMakeLists.txt: properly set value of HOST_FILLORDER to LSB2MSB for Windows CMake builds
+
+ See merge request libtiff/libtiff!87
+
+2019-07-15 Even Rouault <even.rouault@spatialys.com>
+
+ CMakeLists.txt: properly set value of HOST_FILLORDER to LSB2MSB for Windows CMake builds
+ As can be seen in https://ci.appveyor.com/project/rleigh-codelibre/libtiff-didfs/builds/25846668/job/ory5w098j8wcij9x
+ log, the HOST_FILLORDER is not properly set:
+
+ [00:02:58] -- CMAKE_HOST_SYSTEM_PROCESSOR set to AMD64
+ [00:02:58] -- HOST_FILLORDER set to FILLORDER_MSB2LSB
+
+ Ther reason is that we match the "amd64.*" lowercase string whereas
+ CMAKE_HOST_SYSTEM_PROCESSOR is set to AMD64 uppercase.
+
+2019-07-09 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFWriteCheck(): call TIFFForceStrileArrayWriting() when needed (should have gone with eaeca6274ae71cdfaeb9f673b6fb0f3cfc0e6ce5) (master only)
+
+2019-07-09 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix_chromium_925269' into 'master'
+ OJPEG: avoid use of unintialized memory on corrupted files
+
+ See merge request libtiff/libtiff!86
+
+2019-07-05 Even Rouault <even.rouault@spatialys.com>
+
+ OJPEG: avoid use of unintialized memory on corrupted files.
+ Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=925269
+ Patch from Lei Zhang with little adaptations.
+
+2019-06-29 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix-division-by-zero' into 'master'
+ Return infinite distance when denominator is zero.
+
+ See merge request libtiff/libtiff!85
+
+2019-06-29 Dirk Lemstra <dirk@lemstra.org>
+
+ Return infinite distance when denominator is zero.
+
+2019-06-29 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'typetests' into 'master'
+ Add test to check that libtiff types have the correct size
+
+ See merge request libtiff/libtiff!57
+
+2019-05-31 Thomas Bernard <miniupnp@free.fr>
+
+ make TIFF_SSIZE_T the same bitwidth as TIFF_SIZE_T.
+ it was previously the same bitwidth as unsigned char *
+ Pointers can be larger than size_t.
+
+2019-05-31 Thomas Bernard <miniupnp@free.fr>
+
+ Add test to check that libtiff types have the correct size.
+ in configure/CMakeList.txt :
+
+ - TIFF_INT8_T/TIFF_UINT8_T is signed/unsigned char
+ sizeof(char)==1 in C standard
+ - TIFF_INT16_T/TIFF_UINT16_T is signed/unsigned short
+ sizeof(short)>=2 in C standard
+ - TIFF_INT32_T/TIFF_UINT32_T is defined so its sizeof() is 4
+
+ - TIFF_INT64_T/TIFF_UINT64_T is defined so its sizeof() is 8
+
+ - TIFF_SIZE_T is defined so it has same sizeof() than size_t
+
+ - TIFF_SSIZE_T is defined so it has same sizeof() than unsigned char *
+
+2019-05-29 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'defer_strile_writing' into 'master'
+ Add TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting()
+
+ See merge request libtiff/libtiff!82
+
+2019-05-29 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'TIFFReadFromUserBuffer' into 'master'
+ Add TIFFReadFromUserBuffer()
+
+ See merge request libtiff/libtiff!81
+
+2019-05-26 Even Rouault <even.rouault@spatialys.com>
+
+ Fix vulnerability in 'D' (DeferStrileLoad) mode (master only) (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14908)
+
+2019-05-25 Even Rouault <even.rouault@spatialys.com>
+
+ Replace 'stripped' by 'striped' in error messages.
+
+2019-05-25 Even Rouault <even.rouault@spatialys.com>
+
+ Add TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting()
+ Those advanced writing functions must be used in a particular sequence
+ to make their intended effect. Their aim is to control when/where
+ the [Strip/Tile][Offsets/ByteCounts] arrays are written into the file.
+
+ The purpose of this is to generate 'cloud-optimized geotiff' files where
+ the first KB of the file only contain the IFD entries without the potentially
+ large strile arrays. Those are written afterwards.
+
+ The typical sequence of calls is:
+ TIFFOpen()
+ [ TIFFCreateDirectory(tif) ]
+ Set fields with calls to TIFFSetField(tif, ...)
+ TIFFDeferStrileArrayWriting(tif)
+ TIFFWriteCheck(tif, ...)
+ TIFFWriteDirectory(tif)
+ ... potentially create other directories and come back to the above directory
+ TIFFForceStrileArrayWriting(tif): emit the arrays at the end of file
+
+ See test/defer_strile_writing.c for a practical example.
+
+2019-05-24 Even Rouault <even.rouault@spatialys.com>
+
+ Fix vulnerability introduced by defer strile loading (master only)
+ Found on GDAL with https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14894
+ Disabling the TIFF_DEFERSTRILELOAD bit in ChopupStripArray() was a
+ bad idea since when using TIFFReadDirectory() to reload the directory again
+ would lead to a different value of td_rowsperstrip, which could confuse
+ readers if they relied on the value found initially.
+
+ Fix typo in error message (master only)
+
+2019-05-22 Even Rouault <even.rouault@spatialys.com>
+
+ Add TIFFReadFromUserBuffer()
+ This function replaces the use of TIFFReadEncodedStrip()/TIFFReadEncodedTile()
+ when the user can provide the buffer for the input data, for example when
+ he wants to avoid libtiff to read the strile offset/count values from the
+ [Strip|Tile][Offsets/ByteCounts] array.
+
+ libtiff.def: add missing new symbols.
+
+ test/defer_strile_loading.c: fix warning with Visual C++
+
+ _TIFFRewriteField(): fix for bigtiff case (master only)
+ 116cf67f4c59196605abdb244657c3070c4310af made StripByteCount/TileByteCount to
+ always be rewritten as TIFF_LONG8.
+
+2019-05-21 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'ondemand_strile_offbytecount_loading' into 'master'
+ Make defer strile offset/bytecount loading available at runtime
+
+ See merge request libtiff/libtiff!79
+
+2019-05-21 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bigtiff_write_bytecount_on_long_when_possible' into 'master'
+ Create TileByteCounts/StripByteCounts tag with SHORT (ClassicTIFF/BigTIFF) or LONG (BigTIFF) type when possible
+
+ See merge request libtiff/libtiff!78
+
+2019-05-21 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'html_link' into 'master'
+ libtiff.html, bigtiffpr.html: absolute => relative link
+
+ See merge request libtiff/libtiff!80
+
+2019-05-14 Thomas Bernard <miniupnp@free.fr>
+
+ libtiff.html, bigtiffpr.html: absolute => relative link.
+
+2019-05-10 Even Rouault <even.rouault@spatialys.com>
+
+ Make defer strile offset/bytecount loading available at runtime.
+ ... and add per-strile offset/bytecount loading capabilities.
+
+ Part of this commit makes the behaviour that was previously met when
+ libtiff was compiled with -DDEFER_STRILE_LOAD available for default builds
+ when specifying the new 'D' (Deferred) TIFFOpen() flag. In that mode, the [Tile/Strip][ByteCounts/Offsets]
+ arrays are only loaded when first accessed. This can speed-up the opening
+ of files stored on the network when just metadata retrieval is needed.
+ This mode has been used for years by the GDAL library when compiled with
+ its embeded libtiff copy.
+
+ To avoid potential out-of-tree code (typically codecs) that would use
+ the td_stripbytecount and td_stripoffset array inconditionnaly assuming they
+ have been loaded, those have been suffixed with _p (for protected). The
+ use of the new functions mentionned below is then recommended.
+
+ Another addition of this commit is the capability of loading only the
+ values of the offset/bytecount of the strile of interest instead of the
+ whole array. This is enabled with the new 'O' (Ondemand) flag of TIFFOpen()
+ (which implies 'D'). That behaviour has also been used by GDAL, which hacked
+ into the td_stripoffset/td_stripbytecount arrays directly. The new code
+ added in the _TIFFFetchStrileValue() and _TIFFPartialReadStripArray() internal
+ functions is mostly a port of what was in GDAL GTiff driver previously.
+
+ Related to that, the public TIFFGetStrileOffset[WithErr]() and TIFFGetStrileByteCount[WithErr]()
+ functions have been added to API. They are of particular interest when
+ using sparse files (with offset == bytecount == 0) and you want to detect
+ if a strile is present or not without decompressing the data, or updating
+ an existing sparse file.
+ They will also be used to enable a future enhancement where client code can entirely
+ skip bytecount loading in some situtations
+
+ A new test/defer_strile_loading.c test has been added to test the above
+ capabilities.
+
+2019-05-10 Even Rouault <even.rouault@spatialys.com>
+
+ Creation: use SHORT type when possible for StripByteCounts/TileByteCounts
+ This follows the same logic as previous commit.
+
+2019-05-09 Even Rouault <even.rouault@spatialys.com>
+
+ BigTIFF creation: write TileByteCounts/StripByteCounts tag with LONG when possible
+ In most situations of BigTIFF file, the tile/strip sizes are of reasonable size,
+ that is they fit on a 4-byte LONG. So in that case, use LONG instead of LONG8
+ to save some space. For uncompressed file, it is easy to detect such situations
+ by checking at the TIFFTileSize64()/TIFFStripSize64() return. For compressed file,
+ we must take into account the fact that compression may sometimes result in
+ larger compressed data. So we allow this optimization only for a few select
+ compression times, and take a huge security margin (10x factor). We also only
+ apply this optimization on multi-strip files, so as to allow easy on-the-fly
+ growing of single-strip files whose strip size could grow above the 4GB threshold.
+
+ This change is compatible with the BigTIFF specification. According to
+ https://www.awaresystems.be/imaging/tiff/bigtiff.html:
+ "The StripOffsets, StripByteCounts, TileOffsets, and TileByteCounts tags are
+ allowed to have the datatype TIFF_LONG8 in BigTIFF. Old datatypes TIFF_LONG,
+ and TIFF_SHORT where allowed in the TIFF 6.0 specification, are still valid in BigTIFF, too. "
+ On a practical point of view, this is also compatible on reading/writing of
+ older libtiff 4.X versions.
+
+ The only glitch I found, which is rather minor, is when using such a BigTIFF
+ file with TileByteCounts/StripByteCounts written with TIFF_LONG, and updating
+ it with an older libtiff 4.X version with a change in the
+ [Tile/Strip][ByteCounts/Offsets] array. In that case the _TIFFRewriteField()
+ function will rewrite the directory and array with TIFF_LONG8, instead of updating
+ the existing array (this is an issue fixed by this commit). The file will
+ still be valid however, hence the minor severity of this.
+
+2019-05-08 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug2799' into 'master'
+ fix fax2tiff
+
+ See merge request libtiff/libtiff!55
+
+2019-05-08 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug_2829' into 'master'
+ WIN32: use tif_win32.c when building with CMake
+
+ See merge request libtiff/libtiff!75
+
+2019-05-06 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'FILESOURCE_SCENETYPE_reading' into 'master'
+ Reading error for FileSource and SceneType tags corrected.
+
+ See merge request libtiff/libtiff!76
+
+2019-05-06 Su Laus <sulau@freenet.de>
+
+ Reading error for FileSource and SceneType tags corrected.
+ EXIF tags FILESOURCE and SCENETYPE are defined as TIFF_UNDEFINED and field_readcount==1!
+ There is a bug in TIFFReadDirEntryByte() preventing to read correctly type TIFF_UNDEFINED fields with field_readcount==1
+ Upgrade of TIFFReadDirEntryByte() with added TIFF_UNDEFINED switch-entry allows libtiff to read those tags correctly.
+
+2019-04-25 Thomas Bernard <miniupnp@free.fr>
+
+ WIN32: use tif_win32.c when building with CMake.
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2829
+
+ the top CMakeLists.txt defines
+ win32_io and USE_WIN32_FILEIO
+
+ WIN32_IO is defined nowhere in CMake (only in automake things)
+
+2019-04-25 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'gitlab_pages' into 'master'
+ Advertise https://libtiff.gitlab.io/libtiff/ as mirror
+
+ See merge request libtiff/libtiff!70
+
+2019-04-25 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug_2844' into 'master'
+ tiff2ps.c: PSDataColorContig(): avoid heap buffer overrun
+
+ See merge request libtiff/libtiff!69
+
+2019-04-25 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'issue_2785' into 'master'
+ tiff2pdf.c: don't call t2p_tile_collapse_left() for Ycbcr
+
+ See merge request libtiff/libtiff!64
+
+2019-04-11 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix_gdal_1439' into 'master'
+ TIFFWriteEncodedStrip/TIFFWriteEncodedTile: fix rewriting of LZW-compressed data
+
+ See merge request libtiff/libtiff!74
+
+2019-04-11 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFWriteEncodedStrip/TIFFWriteEncodedTile: fix rewriting of LZW-compressed data
+ Fixes https://github.com/OSGeo/gdal/issues/1439
+
+ When rewriting a LZW tile/strip whose existing size is very close to a multiple of
+ 1024 bytes (and larger than 8192 bytes) with compressed data that is larger,
+ the new data was not placed at the end of the file, causing corruption.
+
+2019-04-08 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug2848' into 'master'
+ tif_luv.c: LogLuvSetupEncode() error must return 0
+
+ See merge request libtiff/libtiff!72
+
+2019-04-03 Thomas Bernard <miniupnp@free.fr>
+
+ build/gitlab-ci: fix typo.
+
+ show test-suite.log in gitlab-ci.
+ useful when build fails
+
+ Add output check for tiff2ps.
+ note : the reference files have been generated in master branch
+
+2019-03-23 Even Rouault <even.rouault@spatialys.com>
+
+ tif_read.c: potentially fix false positive from Coverity Scan. CID 1400288
+
+ tif_read.c: potentially fix false positive from Coverity Scan. CID 1400271
+
+ tif_zip.c: remove dead code. CID 1400360.
+
+ tif_webp.c: remove false positive warning about dereference before null check. CID 1400255
+
+ tif_pixarlog.c: remove dead code. CID 1400342.
+
+ tif_pixarlog.c: avoid false positive Coverity Scan warnings about overflow. CID 1400300 and 1400367
+
+ tif_lzw.c: silence CoverityScan false positive. CID 1400355.
+
+ tif_luv.c: silence CoverityScan false positive. CID 1400231, 1400251, 1400254, 1400272, 1400318, 1400356
+
+ TryChopUpUncompressedBigTiff(): avoid potential division by zero. master only. GDAL Coverity CID 1400263
+
+2019-03-22 Thomas Bernard <miniupnp@free.fr>
+
+ tif_luv.c: LogLuvSetupEncode() error must return 0.
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2848
+
+ if wrongly returning 1, the processing of incorrect file continues,
+ which causes problems.
+
+2019-03-22 Thomas Bernard <miniupnp@free.fr>
+
+ add a test for fax2tiff tool.
+
+2019-02-28 Thomas Bernard <miniupnp@free.fr>
+
+ tiff2pdf.c: don't call t2p_tile_collapse_left() when buffer size is wrong
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2785
+
+ Advertise https://libtiff.gitlab.io/libtiff/ as mirror.
+ I'm put it above the maptools.org mirror because
+ Even Rouault believe at some point it will be completely removed
+
+2019-02-28 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug_2826' into 'master'
+ tiff2pdf.c: check colormap pointers when loading CMYK with colormap
+
+ See merge request libtiff/libtiff!65
+
+2019-02-28 Thomas Bernard <miniupnp@free.fr>
+
+ tiff2pdf.c: check colormap pointers.
+ Avoid access to non initialized pointers
+ http://bugzilla.maptools.org/show_bug.cgi?id=2826
+
+2019-02-27 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix_warnings' into 'master'
+ tiff2ps.c: fix warning caused by integer promotion
+
+ See merge request libtiff/libtiff!68
+
+2019-02-23 Thomas Bernard <miniupnp@free.fr>
+
+ PSDataColorContig(): avoid heap buffer overrun.
+ fixes http://bugzilla.maptools.org/show_bug.cgi?id=2844
+ each iteration of the loop read nc bytes
+
+2019-02-22 Thomas Bernard <miniupnp@free.fr>
+
+ tiff2ps.c: fix warning caused by integer promotion.
+ uint8 value is promoted to int in (value << 24) so -fsanitize
+ yield runtime errors :
+ tiff2ps.c:2969:33: runtime error: left shift of 246 by 24 places cannot be represented in type 'int'
+
+2019-02-22 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'large_strile_improvements' into 'master'
+ Large strile support improvements
+
+ See merge request libtiff/libtiff!63
+
+2019-02-21 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'gitlab-pages' into 'master'
+ ci: Add pages job
+
+ See merge request libtiff/libtiff!45
+
+2019-02-19 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'issue_2833' into 'master'
+ tiffcp.c: check that (Tile Width)*(Samples/Pixel) do no overflow
+
+ See merge request libtiff/libtiff!60
+
+2019-02-19 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'issue_2831' into 'master'
+ tiffcrop.c: fix invertImage() for bps 2 and 4
+
+ See merge request libtiff/libtiff!61
+
+2019-02-19 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'issue_2842' into 'master'
+ move _TIFFClampDoubleToFloat() to tif_aux.c
+
+ See merge request libtiff/libtiff!62
+
+2019-02-19 Even Rouault <even.rouault@spatialys.com>
+
+ tif_zip.c: allow reading and writing strips/tiles with more than 4 GB of compressed or uncompressed data
+
+ tif_dirread.c: when strip chopping is enabled, extend this mechanism to multi-strip uncompressed files with strips larger than 2GB to expose them as strips of ~500 MB
+
+2019-02-19 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'size_t_typo' into 'master'
+ CMakeLists.txt: fix TIFF_SIZE_T
+
+ See merge request libtiff/libtiff!59
+
+2019-02-12 Thomas Bernard <miniupnp@free.fr>
+
+ move _TIFFClampDoubleToFloat() to tif_aux.c.
+ the same function was declared in tif_dir.c and tif_dirwrite.c
+
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2842
+
+2019-02-11 Thomas Bernard <miniupnp@free.fr>
+
+ tiffcrop.c: fix invertImage() for bps 2 and 4.
+ too much bytes were processed, causing a heap buffer overrun
+ http://bugzilla.maptools.org/show_bug.cgi?id=2831
+ the loop counter must be
+ for (col = 0; col < width; col += 8 / bps)
+
+ Also the values were not properly calculated. It should be
+ 255-x, 15-x, 3-x for bps 8, 4, 2.
+
+ But anyway it is easyer to invert all bits as 255-x = ~x, etc.
+ (substracting from a binary number composed of all 1 is like inverting
+ the bits)
+
+2019-02-11 Thomas Bernard <miniupnp@free.fr>
+
+ tiffcp.c: use INT_MAX.
+
+ check that (Tile Width)*(Samples/Pixel) do no overflow.
+ fixes bug 2833
+
+2019-02-03 Thomas Bernard <miniupnp@free.fr>
+
+ CMakeLists.txt: fix TIFF_SIZE_T.
+
+2019-02-02 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'master' into 'master'
+ Fix for simple memory leak that was assigned CVE-2019-6128.
+
+ See merge request libtiff/libtiff!50
+
+2019-02-02 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug2835' into 'master'
+ tiff2ps: fix heap-buffer-overflow
+
+ See merge request libtiff/libtiff!53
+
+2019-02-02 Even Rouault <even.rouault@spatialys.com>
+
+ Fix warning (use of uninitialized value) added per d0a842c5dbad2609aed43c701a12ed12461d3405 (fixes https://gitlab.com/libtiff/libtiff/merge_requests/54#note_137742985)
+
+2019-02-02 Yuri Aksenov <yuri.aksenov@gmail.com>
+
+ fix fax2tiff.
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2799
+ fixes d9bc8472e72549f29c0062c1cbd3d56f279f3be2
+
+2019-02-02 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'tiffcrop' into 'master'
+ tiffcrop: shut up clang warnings
+
+ See merge request libtiff/libtiff!52
+
+2019-02-01 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'bug2833' into 'master'
+ TIFFWriteDirectoryTagTransferfunction() : fix NULL dereferencing
+
+ See merge request libtiff/libtiff!54
+
+2019-02-01 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'gitignore' into 'master'
+ add test/ files to .gitignore
+
+ See merge request libtiff/libtiff!56
+
+2019-02-01 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'master' into 'master'
+ tif_dir: unset transferfunction field if necessary (CVE-2018-19210)
+
+ See merge request libtiff/libtiff!47
+
+2019-01-29 Thomas Bernard <miniupnp@free.fr>
+
+ add test/ files to .gitignore.
+
+2019-01-29 Thomas Bernard <miniupnp@free.fr>
+
+ TIFFWriteDirectoryTagTransferfunction() : fix NULL dereferencing.
+ http://bugzilla.maptools.org/show_bug.cgi?id=2833
+
+ we must check the pointer is not NULL before memcmp() the memory
+
+2019-01-29 Thomas Bernard <miniupnp@free.fr>
+
+ tiff2ps: fix heap-buffer-overflow.
+ http://bugzilla.maptools.org/show_bug.cgi?id=2834
+
+ usually the test (i < byte_count) is OK because the byte_count is divisible by samplesperpixel.
+ But if that is not the case, (i + ncomps) < byte_count should be used, or
+ maybe (i + samplesperpixel) <= byte_count
+
+2019-01-28 Thomas Bernard <miniupnp@free.fr>
+
+ tiffcrop: shut up clang warnings.
+ make the out filename building a bit more simple
+ and remove the use of strcat()
+
+2019-01-23 Scott Gayou <github.scott@gmail.com>
+
+ Fix for simple memory leak that was assigned CVE-2019-6128.
+ pal2rgb failed to free memory on a few errors. This was reported
+ here: http://bugzilla.maptools.org/show_bug.cgi?id=2836.
+
+2019-01-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Fix tiff2ps error regarding "Inconsistent value of es" by allowing es to be zero. Problem was reported to the tiff mailing list by Julian H. Stacey on January 5, 2019.
+
+2018-12-13 Hugo Lefeuvre <hle@debian.org>
+
+ tif_dir: unset transferfunction field if necessary.
+ The number of entries in the transfer table is determined as following:
+
+ (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1
+
+ This means that whenever td->td_samplesperpixel or td->td_extrasamples are
+ modified we also need to make sure that the number of required entries in
+ the transfer table didn't change.
+
+ If it changed and the number of entries is higher than before we should
+ invalidate the transfer table field and free previously allocated values.
+ In the other case there's nothing to do, additional tf entries won't harm
+ and properly written code will just ignore them since spp - es < 1.
+
+ For instance this situation might happen when reading an OJPEG compressed
+ image with missing SamplesPerPixel tag. In this case the SamplesPerPixel
+ field might be updated after setting the transfer table.
+
+ see http://bugzilla.maptools.org/show_bug.cgi?id=2500
+
+ This commit addresses CVE-2018-19210.
+
+2018-12-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Do not attempt to re-sync zip stream after reported data error from inflate().
+
+2018-12-07 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'resource-leaks' into 'master'
+ Fix two resource leaks
+
+ See merge request libtiff/libtiff!43
+
+2018-12-07 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'build-jbig' into 'master'
+ add jbig support to the fuzzer
+
+ See merge request libtiff/libtiff!42
+
+2018-12-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ tiffcrop.c: Avoid new clang warning about tools/tiffcrop.c "size argument in 'strncat' call appears to be size of the source".
+
+2018-11-28 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'webp_memleak' into 'master'
+ fixed mem leak in webp compression
+
+ See merge request libtiff/libtiff!48
+
+2018-11-28 Norman Barker <norman.barker@mapbox.com>
+
+ fixed mem leak in webp compression.
+
+2018-11-20 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'lossless_webp' into 'master'
+ fixed lossless webp compression config
+
+ See merge request libtiff/libtiff!46
+
+2018-11-20 Norman Barker <norman.barker@mapbox.com>
+
+ fixed lossless webp compression config.
+
+2018-11-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ snprintf porting fix for Visual Studio 2003.
+
+2018-11-18 Roger Leigh <rleigh@codelibre.net>
+
+ ci: Add pages job.
+
+2018-11-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Change references from defunct ftp site to https site.
+
+2018-11-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac: libtiff 4.0.10 released.
+
+ Change COMPRESSION_ZSTD to 50000 and COMPRESSION_WEBP to 50001.
+
+2018-11-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Added preliminary release notes for release 4.0.10.
+
+2018-11-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ tiff2pdf: Eliminate compiler warning about snprintf output truncation when formatting pdf_datetime.
+
+2018-11-03 Olivier Paquet <olivier.paquet@gmail.com>
+
+ Merge branch 'no_tif_platform_console' into 'master'
+ Remove builtin support for GUI warning and error message boxes
+
+ See merge request libtiff/libtiff!24
+
+2018-11-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ tiffcrop.c: Eliminate compiler warning about snprintf output truncation when formatting filenum.
+
+ TWebPVGetField(): Add apparently missing break statement impacting TIFFTAG_WEBP_LOSSLESS.
+
+ Eliminate compiler warnings about duplicate definitions of streq/strneq macros.
+
+ Ignore generated files.
+
+ Remove and ignore files which are a product of autogen.sh.
+
+2018-11-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Fix TIFFErrorExt() formatting of size_t type for 32-bit compiles.
+
+2018-10-30 Even Rouault <even.rouault@spatialys.com>
+
+ tiff2bw: avoid null pointer dereference in case of out of memory situation. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2819 / CVE-2018-18661
+
+ tiffio.h: fix comment.
+
+2018-10-26 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'header2' into 'master'
+ Fix 725279bd: Standalone tif_predict.h: tiff.h should be tiffiop.h
+
+ See merge request libtiff/libtiff!41
+
+2018-10-26 Kurt Schwehr <schwehr@google.com>
+
+ Fix 725279bd: Standalone tif_predict.h: tiff.h should be tiffiop.h.
+
+2018-10-25 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'headers' into 'master'
+ Add includes to headers to allow them to stand alone.
+
+ See merge request libtiff/libtiff!40
+
+2018-10-24 Kurt Schwehr <schwehr@google.com>
+
+ Add includes to headers to allow them to stand alone.
+ This allows compilers that can do header stand alone header parsing
+ to process libtiff.
+
+2018-10-18 Even Rouault <even.rouault@spatialys.com>
+
+ LZMAPreEncode: emit verbose error if lzma_stream_encoder() fails (typically because not enough memory available)
+
+2018-10-17 Even Rouault <even.rouault@spatialys.com>
+
+ tif_webp.c: fix previous commit that broke scanline decoding.
+
+ tif_webp.c: fix potential read outside libwebp buffer on corrupted images
+
+2018-10-14 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'jbig_decode_overflow' into 'master'
+ JBIG: fix potential out-of-bounds write in JBIGDecode()
+
+ See merge request libtiff/libtiff!38
+
+2018-10-14 Even Rouault <even.rouault@spatialys.com>
+
+ JBIG: fix potential out-of-bounds write in JBIGDecode()
+ JBIGDecode doesn't check if the user provided buffer is large enough
+ to store the JBIG decoded image, which can potentially cause out-of-bounds
+ write in the buffer.
+ This issue was reported and analyzed by Thomas Dullien.
+
+ Also fixes a (harmless) potential use of uninitialized memory when
+ tif->tif_rawsize > tif->tif_rawcc
+
+ And in case libtiff is compiled with CHUNKY_STRIP_READ_SUPPORT, make sure
+ that whole strip data is provided to JBIGDecode()
+
+2018-10-05 Even Rouault <even.rouault@spatialys.com>
+
+ tif_webp.c: fix scanline reading/writing.
+
+ WEBP codec: initialize nSamples in TWebPSetupDecode() and TWebPSetupEncode()
+
+2018-10-05 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'tif_webp' into 'master'
+ webp support
+
+ See merge request libtiff/libtiff!32
+
+2018-10-05 Norman Barker <norman.barker@mapbox.com>
+
+ webp in tiff.
+
+2018-09-17 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'master' into 'master'
+ fix three potential vulnerabilities.
+
+ See merge request libtiff/libtiff!33
+
+2018-09-08 Young_X <YangX92@hotmail.com>
+
+ fix out-of-bound read on some tiled images.
+
+ avoid potential int32 overflows in multiply_ms()
+
+ only read/write TIFFTAG_GROUP3OPTIONS or TIFFTAG_GROUP4OPTIONS if compression is COMPRESSION_CCITTFAX3 or COMPRESSION_CCITTFAX4
+
+2018-08-15 Even Rouault <even.rouault@spatialys.com>
+
+ TIFFSetupStrips(): avoid potential uint32 overflow on 32-bit systems with large number of strips. Probably relates to http://bugzilla.maptools.org/show_bug.cgi?id=2788 / CVE-2018-10779
+
+2018-08-07 Even Rouault <even.rouault@spatialys.com>
+
+ ZSTD: fix flush issue that can cause endless loop in ZSTDEncode()
+ Fixes https://github.com/OSGeo/gdal/issues/833
+
+2018-08-07 Even Rouault <even.rouault@spatialys.com>
+
+ Merge branch 'fix_bug_2800' into 'master'
+ Fix libtiff 4.0.8 regression when reading LZW-compressed strips with scanline API
+
+ See merge request libtiff/libtiff!31
+
+2018-08-07 Even Rouault <even.rouault@spatialys.com>
+
+ Fix libtiff 4.0.8 regression when reading LZW-compressed strips with scanline API
+ Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2800
+
+2018-07-05 Even Rouault <even.rouault@spatialys.com>
+
+ Add tag and pseudo-tag definitions for ESRI LERC codec (out of tree codec whose source is at https://github.com/OSGeo/gdal/blob/master/gdal/frmts/gtiff/tif_lerc.c)
+
+2018-07-02 Even Rouault <even.rouault@spatialys.com>
+
+ Fix TIFFTAG_ZSTD_LEVEL pseudo tag value to be > 65536, and the next one in the series
+
+2018-05-25 Stefan Weil <sw@weilnetz.de>
+
+ Remove builtin support for GUI warning and error message boxes.
+ Now warnings always go to the console by default unless applications
+ define their own warning and error handlers.
+
+ GUI applications (and Windows CE) are required to define such handlers.
+
+2018-05-12 Even Rouault <even.rouault@spatialys.com>
+
+ LZWDecodeCompat(): fix potential index-out-of-bounds write. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2780 / CVE-2018-8905
+ The fix consists in using the similar code LZWDecode() to validate we
+ don't write outside of the output buffer.
+
+ TIFFFetchNormalTag(): avoid (probably false positive) clang-tidy clang-analyzer-core.NullDereference warnings
+
+ TIFFWriteDirectorySec: avoid assertion. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2795. CVE-2018-10963
+
+2018-05-04 Even Rouault <even.rouault@spatialys.com>
+
+ tif_color.c: fix code comment.
+
+2018-04-17 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'fuzzer-fix' into 'master'
+ remove a pointless multiplication and a variable that's not necessary
+
+ See merge request libtiff/libtiff!29
+
+2018-04-17 Paul Kehrer <paul.l.kehrer@gmail.com>
+
+ remove a pointless multiplication and a variable that's not necessary.
+
+2018-04-17 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'ossfuzz' into 'master'
+ move oss-fuzz build script and fuzzer into libtiff tree
+
+ See merge request libtiff/libtiff!28
+
+2018-04-17 Paul Kehrer <paul.l.kehrer@gmail.com>
+
+ move oss-fuzz build script and fuzzer into libtiff tree.
+
+2018-04-14 Even Rouault <even.rouault@spatialys.com>
+
+ _TIFFGetMaxColorChannels: update for LOGLUV, ITULAB and ICCLAB that have 3 color channels
+
+2018-04-12 Even Rouault <even.rouault@spatialys.com>
+
+ Fix MSVC warning.
+
+2018-04-12 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'master' into 'master'
+ Fix NULL pointer dereference in TIFFPrintDirectory (bugzilla 2778/CVE-2018-7456)
+
+ See merge request libtiff/libtiff!27
+
+2018-04-11 Hugo Lefeuvre <hle@debian.org>
+
+ Fix NULL pointer dereference in TIFFPrintDirectory.
+ The TIFFPrintDirectory function relies on the following assumptions,
+ supposed to be guaranteed by the specification:
+
+ (a) A Transfer Function field is only present if the TIFF file has
+ photometric type < 3.
+
+ (b) If SamplesPerPixel > Color Channels, then the ExtraSamples field
+ has count SamplesPerPixel - (Color Channels) and contains
+ information about supplementary channels.
+
+ While respect of (a) and (b) are essential for the well functioning of
+ TIFFPrintDirectory, no checks are realized neither by the callee nor
+ by TIFFPrintDirectory itself. Hence, following scenarios might happen
+ and trigger the NULL pointer dereference:
+
+ (1) TIFF File of photometric type 4 or more has illegal Transfer
+ Function field.
+
+ (2) TIFF File has photometric type 3 or less and defines a
+ SamplesPerPixel field such that SamplesPerPixel > Color Channels
+ without defining all extra samples in the ExtraSamples fields.
+
+ In this patch, we address both issues with respect of the following
+ principles:
+
+ (A) In the case of (1), the defined transfer table should be printed
+ safely even if it isn't 'legal'. This allows us to avoid expensive
+ checks in TIFFPrintDirectory. Also, it is quite possible that
+ an alternative photometric type would be developed (not part of the
+ standard) and would allow definition of Transfer Table. We want
+ libtiff to be able to handle this scenario out of the box.
+
+ (B) In the case of (2), the transfer table should be printed at its
+ right size, that is if TIFF file has photometric type Palette
+ then the transfer table should have one row and not three, even
+ if two extra samples are declared.
+
+ In order to fulfill (A) we simply add a new 'i < 3' end condition to
+ the broken TIFFPrintDirectory loop. This makes sure that in any case
+ where (b) would be respected but not (a), everything stays fine.
+
+ (B) is fulfilled by the loop condition
+ 'i < td->td_samplesperpixel - td->td_extrasamples'. This is enough as
+ long as (b) is respected.
+
+ Naturally, we also make sure (b) is respected. This is done in the
+ TIFFReadDirectory function by making sure any non-color channel is
+ counted in ExtraSamples.
+
+ This commit addresses CVE-2018-7456.
+
+2018-03-27 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'tiffset-long8' into 'master'
+ tiffset: Add support for LONG8, SLONG8 and IFD8 field types
+
+ See merge request libtiff/libtiff!25
+
+2018-03-26 Roger Leigh <rleigh@codelibre.net>
+
+ port: Clean up NetBSD sources and headers to build standalone.
+
+2018-03-23 Roger Leigh <rleigh@dundee.ac.uk>
+
+ port: Add strtol, strtoll and strtoull.
+ Also update strtoul. All use the same implementation from NetBSD libc.
+
+ tiffset: Add support for LONG8, SLONG8 and IFD8 field types.
+
+2018-03-17 Even Rouault <even.rouault@spatialys.com>
+
+ ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613)
+ Rework fix done in 3719385a3fac5cfb20b487619a5f08abbf967cf8 to work in more
+ cases like https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6979.
+ Credit to OSS Fuzz
+
+ Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2724
+
+2018-03-13 Even Rouault <even.rouault@spatialys.com>
+
+ libtiff/tif_luv.c: rewrite loops in a more readable way (to avoid false positive reports like http://bugzilla.maptools.org/show_bug.cgi?id=2779)
+
+2018-03-13 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'avoid_memory_exhaustion_in_ChopUpSingleUncompressedStrip' into 'master'
+ ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613)
+
+ See merge request libtiff/libtiff!26
+
+2018-03-11 Even Rouault <even.rouault@spatialys.com>
+
+ ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613)
+ In ChopUpSingleUncompressedStrip(), if the computed number of strips is big
+ enough and we are in read only mode, validate that the file size is consistent
+ with that number of strips to avoid useless attempts at allocating a lot of
+ memory for the td_stripbytecount and td_stripoffset arrays.
+
+ Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2724
+
+2018-03-10 Even Rouault <even.rouault@spatialys.com>
+
+ Typo fix in comment.
+
+2018-03-03 Even Rouault <even.rouault@spatialys.com>
+
+ Avoid warning with gcc 8 (partially revert 647b0e8c11ee11896f319b92cf110775f538d75c)
+
+2018-02-25 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'typos' into 'master'
+ Fix some typos
+
+ See merge request libtiff/libtiff!23
+
+2018-02-24 Stefan Weil <sw@weilnetz.de>
+
+ Fix some typos.
+ Most of them were found by codespell.
+
+2018-02-14 Even Rouault <even.rouault@spatialys.com>
+
+ Typo fix in comment.
+
+ Merge branch 'zstd'
+
+ Add warning about COMPRESSION_ZSTD not being officialy registered.
+
+2018-02-14 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'bug2772' into 'master'
+ Fix for bug 2772
+
+ See merge request libtiff/libtiff!20
+
+2018-02-12 Nathan Baker <nathanb@lenovo-chrome.com>
+
+ Fix for bug 2772.
+ It is possible to craft a TIFF document where the IFD list is circular,
+ leading to an infinite loop while traversing the chain. The libtiff
+ directory reader has a failsafe that will break out of this loop after
+ reading 65535 directory entries, but it will continue processing,
+ consuming time and resources to process what is essentially a bogus TIFF
+ document.
+
+ This change fixes the above behavior by breaking out of processing when
+ a TIFF document has >= 65535 directories and terminating with an error.
+
+2018-02-09 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'libtiff-as-subdirectory-fixes' into 'master'
+ Prefer target_include_directories
+
+ See merge request libtiff/libtiff!12
+
+2018-02-06 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'cmake-cleanups' into 'master'
+ Cmake cleanups
+
+ See merge request libtiff/libtiff!11
+
+2018-02-06 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'check-right-cxx-variable' into 'master'
+ Check right cxx variable
+
+ See merge request libtiff/libtiff!19
+
+2018-02-06 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'dont-leak-stream-open' into 'master'
+ Fix a memory leak in TIFFStreamOpen
+
+ See merge request libtiff/libtiff!17
+
+2018-02-06 Ben Boeckel <ben.boeckel@kitware.com>
+
+ cmake: check CXX_SUPPORT.
+ This variable is set in response to the `cxx` cache variable; use it
+ instead.
+
+2018-02-04 Olivier Paquet <olivier.paquet@gmail.com>
+
+ Merge branch 'warnings' into 'master'
+ Fix all compiler warnings for default build
+
+ See merge request libtiff/libtiff!16
+
+2018-02-04 Nathan Baker <elitebadger@gmail.com>
+
+ Fix all compiler warnings for default build.
+
+2018-01-30 Paul Kehrer <paul.l.kehrer@gmail.com>
+
+ tabs are hard.
+
+2018-01-29 Paul Kehrer <paul.l.kehrer@gmail.com>
+
+ use hard tabs like the rest of the project.
+
+ Fix a memory leak in TIFFStreamOpen.
+ TIFFStreamOpen allocates a new tiff{o,i}s_data, but if TIFFClientOpen
+ fails then that struct is leaked. Delete it if the returned TIFF * is
+ null.
+
+2018-01-29 Kevin Funk <kfunk@kde.org>
+
+ Bump minimum required CMake version to v2.8.11.
+ Because we use the BUILD_INTERFACE generator expression
+
+2018-01-27 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'patch-1' into 'master'
+ Update CMakeLists.txt for build fix on Windows
+
+ See merge request libtiff/libtiff!14
+
+2018-01-27 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'patch-2' into 'master'
+ Update tiffgt.c for build fix on Windows
+
+ See merge request libtiff/libtiff!13
+
+2018-01-25 Olivier Paquet <olivier.paquet@gmail.com>
+
+ Merge branch 'bug2750' into 'master'
+ Add workaround to pal2rgb buffer overflow.
+
+ See merge request libtiff/libtiff!15
+
+2018-01-25 Nathan Baker <elitebadger@gmail.com>
+
+ Add workaround to pal2rgb buffer overflow.
+
+2018-01-23 Andrea <andrea@andreaplanet.com>
+
+ Update tiffgt.c for build fix on Windows.
+
+ Update CMakeLists.txt for build fix on Windows.
+
+2018-01-15 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'has-attribute-check' into 'master'
+ tiffiop: use __has_attribute to detect the no_sanitize attribute
+
+ See merge request libtiff/libtiff!10
+
+2018-01-15 Ben Boeckel <ben.boeckel@kitware.com>
+
+ cmake: avoid setting hard-coded variables in the cache.
+
+ cmake: avoid an unnecessary intermediate variable.
+
+ cmake: avoid an unnecessary intermediate variable.
+
+ cmake: avoid tautological logic.
+
+ cmake: use check_symbol_exists.
+ This accounts for symbols being provided by macros.
+
+ cmake: remove unused configure checks.
+
+2018-01-12 Kevin Funk <kfunk@kde.org>
+
+ Prefer target_include_directories.
+ When libtiff is included in a super project via a simple
+ `add_subdirectory(libtiff)`, this way the `tiff` library target has all
+ the necessary information to build against it.
+
+ Note: The BUILD_INTERFACE generator expression feature requires at least
+ CMake v2.8.11 if I'm correct.
+
+2018-01-09 Ben Boeckel <ben.boeckel@kitware.com>
+
+ tiffiop: use __has_attribute to detect the no_sanitize attribute.
+
+2017-12-31 Even Rouault <even.rouault@spatialys.com>
+
+ man/TIFFquery.3tiff: remove reference to non-existing TIFFReadStrip() function in TIFFIsByteSwapped() documentation. Patch by Eric Piel. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2763
+
+ libtiff/tif_dir.c: _TIFFVGetField(): fix heap out-of-bounds access when requesting TIFFTAG_NUMBEROFINKS on a EXIF directory. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2765. Reported by Google Autofuzz project
+
+ libtiff/tif_print.c: TIFFPrintDirectory(): fix null pointer dereference on corrupted file. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2770
+
+2017-12-21 Even Rouault <even.rouault@spatialys.com>
+
+ Add libzstd to gitlab-ci.
+
+2017-12-21 Even Rouault <even.rouault@spatialys.com>
+
+ Add ZSTD compression codec.
+ From https://github.com/facebook/zstd
+ "Zstandard, or zstd as short version, is a fast lossless compression
+ algorithm, targeting real-time compression scenarios at zlib-level
+ and better compression ratios. It's backed by a very fast entropy stage,
+ provided by Huff0 and FSE library."
+
+ We require libzstd >= 1.0.0 so as to be able to use streaming compression
+ and decompression methods.
+
+ The default compression level we have selected is 9 (range goes from 1 to 22),
+ which experimentally offers equivalent or better compression ratio than
+ the default deflate/ZIP level of 6, and much faster compression.
+
+ For example on a 6600x4400 16bit image, tiffcp -c zip runs in 10.7 seconds,
+ while tiffcp -c zstd runs in 5.3 seconds. Decompression time for zip is
+ 840 ms, and for zstd 650 ms. File size is 42735936 for zip, and
+ 42586822 for zstd. Similar findings on other images.
+
+ On a 25894x16701 16bit image,
+
+ Compression time Decompression time File size
+
+ ZSTD 35 s 3.2 s 399 700 498
+ ZIP/Deflate 1m 20 s 4.9 s 419 622 336
+
+2017-12-10 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'fix_cve-2017-9935' into 'master'
+ Fix CVE-2017-9935
+
+ See merge request libtiff/libtiff!7
+
+2017-12-10 Brian May <brian@linuxpenguins.xyz>
+
+ tiff2pdf: Fix apparent incorrect type for transfer table.
+ The standard says the transfer table contains unsigned 16 bit values,
+ I have no idea why we refer to them as floats.
+
+2017-12-10 Brian May <brian@linuxpenguins.xyz>
+
+ tiff2pdf: Fix CVE-2017-9935.
+ Fix for http://bugzilla.maptools.org/show_bug.cgi?id=2704
+
+ This vulnerability - at least for the supplied test case - is because we
+ assume that a tiff will only have one transfer function that is the same
+ for all pages. This is not required by the TIFF standards.
+
+ We than read the transfer function for every page. Depending on the
+ transfer function, we allocate either 2 or 4 bytes to the XREF buffer.
+ We allocate this memory after we read in the transfer function for the
+ page.
+
+ For the first exploit - POC1, this file has 3 pages. For the first page
+ we allocate 2 extra extra XREF entries. Then for the next page 2 more
+ entries. Then for the last page the transfer function changes and we
+ allocate 4 more entries.
+
+ When we read the file into memory, we assume we have 4 bytes extra for
+ each and every page (as per the last transfer function we read). Which
+ is not correct, we only have 2 bytes extra for the first 2 pages. As a
+ result, we end up writing past the end of the buffer.
+
+ There are also some related issues that this also fixes. For example,
+ TIFFGetField can return uninitalized pointer values, and the logic to
+ detect a N=3 vs N=1 transfer function seemed rather strange.
+
+ It is also strange that we declare the transfer functions to be of type
+ float, when the standard says they are unsigned 16 bit values. This is
+ fixed in another patch.
+
+ This patch will check to ensure that the N value for every transfer
+ function is the same for every page. If this changes, we abort with an
+ error. In theory, we should perhaps check that the transfer function
+ itself is identical for every page, however we don't do that due to the
+ confusion of the type of the data in the transfer function.
+
+2017-12-10 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'undef-warn-fixes' into 'master'
+ Fix a couple of harmless but annoying -Wundef warnings
+
+ See merge request libtiff/libtiff!8
+
+2017-12-07 Vadim Zeitlin <vadim@zeitlins.org>
+
+ Remove tests for undefined SIZEOF_VOIDP.
+ As configure never uses AC_CHECK_SIZEOF(void*), this symbol is never
+ defined and so it doesn't make sense to test it in the code, this just
+ results in -Wundef warnings if they're enabled.
+
+ Avoid harmless -Wundef warnings for __clang_major__
+ Check that we're using Clang before checking its version.
+
+2017-12-02 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'remove_autogenerated_files' into 'master'
+ Remove autogenerated files
+
+ See merge request libtiff/libtiff!5
+
+2017-12-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ Merge branch 'tif_config_h_includes' into 'master'
+ 'tif_config.h' or 'tiffiop.h' must be included before any system header.
+
+ See merge request libtiff/libtiff!6
+
+2017-12-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ 'tif_config.h' or 'tiffio.h' must be included before any system header.
+
+2017-12-01 Even Rouault <even.rouault@spatialys.com>
+
+ .gitignore: add patterns for build from root.
+
+ Remove remaining .cvsignore files.
+
+ Remove autoconf/automake generated files, and add them to .gitignore.
+
+2017-12-01 Olivier Paquet <olivier.paquet@gmail.com>
+
+ Merge branch 'makedistcheck' into 'master'
+ build/gitlab-ci and build/travis-ci: add a 'make dist' step in autoconf_build()…
+
+ See merge request libtiff/libtiff!4
+
+2017-12-01 Even Rouault <even.rouault@spatialys.com>
+
+ build/gitlab-ci and build/travis-ci: add a 'make dist' step in autoconf_build() target, to check we are release-ready
+
+2017-12-01 Even Rouault <even.rouault@mines-paris.org>
+
+ Merge branch 'git_updates' into 'master'
+ CVS to Git updates
+
+ See merge request libtiff/libtiff!2
+
+2017-12-01 Even Rouault <even.rouault@spatialys.com>
+
+ HOWTO-RELEASE: update to use signed tags.
+
+ README.md: use markdown syntax for hyperlinks.
+
+2017-11-30 Even Rouault <even.rouault@spatialys.com>
+
+ Add .gitignore.
+
+ Regenerate autoconf files.
+
+ Makefile.am: update to reflect removal of README.vms and README -> README.md
+
+ Remove all $Id and $Headers comments with CVS versions.
+
+ HOWTO-RELEASE: update for git.
+
+ Remove outdated .cvsignore.
+
+ Remove outdated commit script.
+
+ Remove README.vms.
+
+ Rename README as README.md, and update content.
+
+ html/index.html: reflect change from CVS to gitlab.
+
+2017-11-30 Olivier Paquet <olivier.paquet@gmail.com>
+
+ Merge branch 'test-ci' into 'master'
+ Update CI configuration
+
+ See merge request libtiff/libtiff!1
+
+2017-11-23 Roger Leigh <rleigh@codelibre.net>
+
+ appveyor: Correct path for git clone and skip artefact archival.
+
+2017-11-22 Roger Leigh <rleigh@codelibre.net>
+
+ travis-ci: Remove unused matrix exclusion.
+
+ Add gitlab-ci build support.
+
2017-11-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
* configure.ac: libtiff 4.0.9 released.
@@ -1849,7 +3428,7 @@
* libtiff/tif_jpeg.c: in JPEGFixupTags(), recognize SOF2, SOF9 and SOF10
markers to avoid emitting a warning (even if, according to the TechNote,
- there are admitedly unusual/not recommended or even forbidden variants, but
+ there are admittedly unusual/not recommended or even forbidden variants, but
they do work well with libjpeg for SOF2, and with libjpeg-turbo for SOF2,
SOF9 and SOF10).
Define in_color_space and input_components to the right values in
@@ -2432,7 +4011,7 @@
2012-05-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
* man/TIFFGetField.3tiff: Correct the 'count' field type in the
- example for how to retreive the value of unsupported tags.
+ example for how to retrieve the value of unsupported tags.
2012-03-30 Frank Warmerdam <warmerdam@google.com>
@@ -3039,7 +4618,7 @@
2010-04-21 Frank Warmerdam <warmerdam@pobox.com>
- * libtiff/tif_jpeg.c: avoid preparing jpeg tables everytime
+ * libtiff/tif_jpeg.c: avoid preparing jpeg tables every time
JPEGSetupEncode() is called if the tables already seem to be
established. This prevents spurious updates and rewriting of
directories with jpegtables when doing updates to existing images.
@@ -3371,7 +4950,7 @@
* test/common.sh - start verbose mode after common settings.
- * libtiff/tif_dirinfo.c: Replace lfind() with local equivelent to
+ * libtiff/tif_dirinfo.c: Replace lfind() with local equivalent to
avoid type mismatches on different platforms.
http://bugzilla.maptools.org/show_bug.cgi?id=1889
@@ -3518,7 +5097,7 @@
* tools/tiffdump.c: When compiling for Microsoft Windows, apply
consistent (__int64) casting when testing if _lseeki64 has
- successfully seeked as requested. This is necessary for large
+ successfully sought as requested. This is necessary for large
file support to work since off_t is only 32-bit.
2008-07-29 Frank Warmerdam <warmerdam@pobox.com>
@@ -4316,7 +5895,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic
* libtiff/tif_getimage.c: replaced usage of TIFFScanlineSize in
gtStripContig with TIFFNewScanlineSize so as to fix buggy behaviour
on subsampled images - this ought to get sorted when we feel brave
- enough to replace TIFFScanlineSize alltogether
+ enough to replace TIFFScanlineSize altogether
* libtiff/tif_ojpeg.c: fixed bug in OJPEGReadSkip
@@ -4974,7 +6553,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic
2005-06-03 Andrey Kiselev <dron@ak4719.spb.edu>
- * libtiff/tif_open.c: Replace runtime endianess check with the compile
+ * libtiff/tif_open.c: Replace runtime endianness check with the compile
time one.
* libtiff/tif_predict.c: Floating point predictor now works on
@@ -6316,7 +7895,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic
2003-11-16 Andrey Kiselev <dron@ak4719.spb.edu>
* libtiff/{tiff.h, tif_dirinfo.c}: Added support for IFD (13)
- datatype, intruduced in "Adobe PageMaker TIFF Tech. Notes".
+ datatype, introduced in "Adobe PageMaker TIFF Tech. Notes".
2003-11-15 Frank Warmerdam <warmerdam@pobox.com>
@@ -6627,7 +8206,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic
* contrib/ojpeg/{Makefile.in, jdhuff.h, jinclude.h, ojpeg.c, README},
configure, Makefile.in: Improved libtiff compilation with OJPEG
- support. Now no need for patching IJG JPEG library, hack requred by
+ support. Now no need for patching IJG JPEG library, hack required by
libtiff will be compiled and used in-place. Implemented with
suggestion and help from Bill Allombert, Debian's libjpeg maintainer.
@@ -7485,7 +9064,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic
sizes. It fixes two problems:
Without scaling (-S) the fax is now centered on the page size specified
- with -H and/or -W. Before, fax2ps was using an obscure and practially
+ with -H and/or -W. Before, fax2ps was using an obscure and practically
useless algorithm to allocate the image relative to Letter sized paper
which sometime sled to useless whitespace on the paper, while at the
same time cutting of the faxes printable area at the opposite border.
diff --git a/tiff/HOWTO-RELEASE b/tiff/HOWTO-RELEASE
index ae750119..abcdc9ba 100644
--- a/tiff/HOWTO-RELEASE
+++ b/tiff/HOWTO-RELEASE
@@ -1,4 +1,4 @@
-HOWTO-RELEASE:
+HOWTO-RELEASE:
Notes on releasing.
@@ -22,17 +22,30 @@ Notes on releasing.
and correctly set system clock and on a filesystem which accurately
records file update times. Use of GNU make is recommended.
-1. Commit any unsaved changes.
+1. Commit any unsaved changes.
-2. Create html/vX.X.html and add it to cvs with 'cvs add html/vX.X.html'.
- Take ChangeLog entries and html-ify in there.
+2. Use gnulib's gitlog-to-changelog script to add new (since the last
+ release) entries to the traditional ChangeLog file. Take note of
+ the most recent change note time stamp and use that as the starting
+ point. Concatenate the old logs to the new logs. The added logs
+ may be used to help produce the release notes (in next step). For
+ example:
+
+ gitlog-to-changelog --since=`head -n 1 ChangeLog | sed -e 's/ .*//g'` --append-dot > ChangeLog.added
+ printf "\n" >> ChangeLog.added
+ cat ChangeLog.added ChangeLog > ChangeLog.new
+ mv ChangeLog.new ChangeLog
+ rm ChangeLog.added
+
+3. Create html/vX.X.html and add it to git with 'git add html/vX.X.html'.
+ Take ChangeLog entries and html-ify in there.
Easist thing to do is take html/vX.(X-1).html and use it as a template.
-3. Add vX.X.html file to the list of 'docfiles' files in the html/Makefile.am.
+4. Add vX.X.html file to the list of 'docfiles' files in the html/Makefile.am.
-4. Update html/index.html to refer to this new page as the current release.
+5. Update html/index.html to refer to this new page as the current release.
-5. Increment the release version in configure.ac. Put 'alpha' or
+6. Increment the release version in configure.ac. Put 'alpha' or
'beta' after the version, if applicable. For example:
4.0.0
@@ -42,7 +55,7 @@ Notes on releasing.
Version should be updated in two places: in the second argument of the
AC_INIT macro and in LIBTIFF_xxx_VERSION variables.
-6. Update library ELF versioning in configure.ac (LIBTIFF_CURRENT,
+7. Update library ELF versioning in configure.ac (LIBTIFF_CURRENT,
LIBTIFF_REVISION, and LIBTIFF_AGE). These numbers have nothing to
do with the libtiff release version numbers.
@@ -53,11 +66,11 @@ Notes on releasing.
have been added, removed, or interface structures have changed,
then more care is required.
-7. Add an entry to Changelog similar to:
+8. Add an entry to Changelog similar to:
* libtiff 4.0.0 released.
-8. In the source tree do
+9. In the source tree do
./autogen.sh
@@ -65,7 +78,7 @@ Notes on releasing.
maintainer build with current autoconf, automake, and libtool
packages. It is only needed when updating tool versions.
-9. It is recommended (but not required) to build outside of the source
+10. It is recommended (but not required) to build outside of the source
tree so that the source tree is kept in a pristine state. This
also allows sharing the source directory on several networked
systems. For example:
@@ -78,17 +91,17 @@ Notes on releasing.
./configure --enable-maintainer-mode
-10. In the build tree do
+11. In the build tree do
make release
This will update "RELEASE-DATE", "VERSION", and libtiff/tiffvers.h
in the source tree.
-11. In the source tree, verify that the version info in RELEASE-DATE,
+12. In the source tree, verify that the version info in RELEASE-DATE,
VERSION and libtiff/tiffvers.h is right.
-12. In the build tree do
+13. In the build tree do
make
make distcheck
@@ -99,21 +112,35 @@ Notes on releasing.
Two files with names tiff-version.tar.gz and tiff-version.zip will
be created in the top level build directory.
-13. In the source tree do
+14. In the source tree do
- 'cvs commit'.
+ 'git status', 'git add .', 'git commit' and 'git push'
-14. In the source tree do
+15. In the source tree, create a signed tag
- cvs tag Release-v4-0-0
+ git tag -s v4.0.0 -m "Create tag for v4.0.0"
(or the appropriate name for the release)
-15. Copy release packages from the build tree to the
+ and push it to "origin" (if "origin" points to the official repository)
+
+ git push origin v4.0.0
+
+16. Sign the release files in the build tree using your private key
+
+ export GPG_TTY=$(tty)
+ for file in tiff-*.tar.gz tiff-*.zip ; do \
+ gpg2 --output ${file}.sig --detach-sig $file ; \
+ done
+
+ for file in tiff-*.tar.gz tiff-*.zip ; do \
+ gpg2 --verify ${file}.sig $file ; \
+ done
+
+17. Copy release packages from the build tree to the
ftp.remotesensing.org ftp site.
scp tiff-*.tar.gz tiff-*.zip \
- warmerdam@upload.osgeo.org:/osgeo/download/libtiff
-
-16. Announce to list, tiff@lists.maptools.org
+ bfriesen@upload.osgeo.org:/osgeo/download/libtiff
+18. Announce to list, tiff@lists.maptools.org
diff --git a/tiff/Makefile.am b/tiff/Makefile.am
index 418a3b93..d19e58ee 100644
--- a/tiff/Makefile.am
+++ b/tiff/Makefile.am
@@ -31,8 +31,7 @@ ACLOCAL_AMFLAGS = -I m4
docfiles = \
COPYRIGHT \
ChangeLog \
- README \
- README.vms \
+ README.md \
RELEASE-DATE \
TODO \
VERSION
diff --git a/tiff/Makefile.in b/tiff/Makefile.in
index c9c0645f..625934a3 100644
--- a/tiff/Makefile.in
+++ b/tiff/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -125,7 +125,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(dist_doc_DATA) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES = libtiff-4.pc
@@ -193,7 +193,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- cscope distdir dist dist-all distcheck
+ cscope distdir distdir-am dist dist-all distcheck
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -219,11 +219,9 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libtiff-4.pc.in \
$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
$(top_srcdir)/config/config.sub \
$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
- $(top_srcdir)/config/missing \
- $(top_srcdir)/config/mkinstalldirs ChangeLog README TODO \
- config/compile config/config.guess config/config.sub \
- config/depcomp config/install-sh config/ltmain.sh \
- config/missing config/mkinstalldirs
+ $(top_srcdir)/config/missing ChangeLog TODO config/compile \
+ config/config.guess config/config.sub config/depcomp \
+ config/install-sh config/ltmain.sh config/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -419,8 +417,7 @@ ACLOCAL_AMFLAGS = -I m4
docfiles = \
COPYRIGHT \
ChangeLog \
- README \
- README.vms \
+ README.md \
RELEASE-DATE \
TODO \
VERSION
@@ -470,8 +467,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -642,7 +639,10 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -707,7 +707,7 @@ distdir: $(DISTFILES)
! -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
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
@@ -733,7 +733,7 @@ dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
@@ -750,7 +750,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@@ -760,7 +760,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
diff --git a/tiff/Makefile.vc b/tiff/Makefile.vc
index 2d894c2b..6e66c730 100644
--- a/tiff/Makefile.vc
+++ b/tiff/Makefile.vc
@@ -1,4 +1,3 @@
-# $Id: Makefile.vc,v 1.7 2008/01/01 15:53:10 fwarmerdam Exp $
#
# Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
#
diff --git a/tiff/README b/tiff/README.md
index 5f30f4ee..2573dab1 100644
--- a/tiff/README
+++ b/tiff/README.md
@@ -1,6 +1,3 @@
-$Header: /cvs/maptools/cvsroot/libtiff/README,v 1.7 2012-02-18 21:53:27 bfriesen Exp $
-
-
TIFF Software Distribution
--------------------------
This file is just a placeholder; all the documentation is now in
@@ -14,7 +11,7 @@ e.g.
If you don't have an HTML viewer then you can read the HTML source
or fetch a PostScript version of this documentation from the directory
- ftp://ftp.remotesensing.org/pub/libtiff/
+ http://download.osgeo.org/libtiff/
If you can't hack either of these options then basically what you
want to do is:
@@ -25,8 +22,21 @@ want to do is:
# make install
More information, email contacts, and mailing list information can be
-found online at http://www.remotesensing.org/libtiff/.
+found online at http://www.simplesystems.org/libtiff/
+
+Source code repository
+----------------------
+
+[GitLab](https://gitlab.com/libtiff/libtiff)
+
+Bug database
+------------
+
+[GitLab issues](https://gitlab.com/libtiff/libtiff/issues)
+Previously, the project used
+[Bugzilla](http://bugzilla.maptools.org/buglist.cgi?product=libtiff). This
+is no longer in use, and all remaining issues have been migrated to GitLab.
Use and Copyright
-----------------
diff --git a/tiff/README.vms b/tiff/README.vms
deleted file mode 100644
index 44d96639..00000000
--- a/tiff/README.vms
+++ /dev/null
@@ -1,12 +0,0 @@
-Dear OpenVMS user
-to make this library, execute
-$@CONFIGURE
-$@BUILD
-
-Build process should be error and warning free. When process will be finished,
-LIBTIFF$STRATUP.COM file containing all required definitions, will be created.
-Please call it from system startup procedure or individual user procedure LOGIN.COM
-To link software with libtiff, use TIFF:LIBTIFF.OPT
-
-best regards,
-Alexey Chupahin, elvis_75@mail.ru
diff --git a/tiff/RELEASE-DATE b/tiff/RELEASE-DATE
index f5a5ad72..ad4fa62a 100644
--- a/tiff/RELEASE-DATE
+++ b/tiff/RELEASE-DATE
@@ -1 +1 @@
-20171118
+20191103
diff --git a/tiff/SConstruct b/tiff/SConstruct
index 682246ea..ee87fedf 100644
--- a/tiff/SConstruct
+++ b/tiff/SConstruct
@@ -1,5 +1,3 @@
-# $Id: SConstruct,v 1.4 2007/02/24 15:03:47 dron Exp $
-
# Tag Image File Format (TIFF) Software
#
# Copyright (C) 2005, Andrey Kiselev <dron@ak4719.spb.edu>
diff --git a/tiff/TODO b/tiff/TODO
index 2ff86272..ea266aad 100644
--- a/tiff/TODO
+++ b/tiff/TODO
@@ -1,5 +1,3 @@
-# $Header: /cvs/libtiff/TODO,v 1.6 2002/10/10 05:28:43 warmerda Exp $
-
o gif2tiff segaulting on selected images
o tiffcmp read data by strip/tile instead of scanline
o YCbCr sampling support
diff --git a/tiff/VERSION b/tiff/VERSION
index 7919852f..ee74734a 100644
--- a/tiff/VERSION
+++ b/tiff/VERSION
@@ -1 +1 @@
-4.0.9
+4.1.0
diff --git a/tiff/aclocal.m4 b/tiff/aclocal.m4
index ca19cbad..9299d04d 100644
--- a/tiff/aclocal.m4
+++ b/tiff/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ 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-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# 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.15'
+[am__api_version='1.16'
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.15], [],
+m4_if([$1], [1.16.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_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.15])dnl
+[AM_AUTOMAKE_VERSION([1.16.1])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-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -332,13 +332,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 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_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
@@ -346,49 +345,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# Older Autoconf 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
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_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
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: 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"`
- # 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'`; 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
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@@ -397,18 +388,17 @@ AC_DEFUN([_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.
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll 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"])
-])
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -495,8 +485,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
@@ -563,7 +553,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -605,7 +595,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -626,7 +616,7 @@ if test x"${install_sh+set}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -648,7 +638,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -683,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -691,49 +681,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# AM_MAKE_INCLUDE()
# -----------------
-# Check to see how make treats includes.
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.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
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -772,7 +755,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -801,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -848,7 +831,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -867,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -948,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1008,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1036,7 +1019,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1055,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/tiff/build/Makefile.in b/tiff/build/Makefile.in
index 69d54d1f..92906d4d 100644
--- a/tiff/build/Makefile.in
+++ b/tiff/build/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -122,7 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -161,7 +161,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- distdir
+ distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -182,8 +182,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -383,8 +382,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -501,7 +500,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/config/compile b/tiff/config/compile
index a85b723c..99e50524 100755
--- a/tiff/config/compile
+++ b/tiff/config/compile
@@ -1,9 +1,9 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
-scriptversion=2012-10-14.11; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -255,7 +255,8 @@ EOF
echo "compile $scriptversion"
exit $?
;;
- cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
@@ -339,9 +340,9 @@ exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/tiff/config/config.guess b/tiff/config/config.guess
index d3229129..6c32c864 100755
--- a/tiff/config/config.guess
+++ b/tiff/config/config.guess
@@ -1,14 +1,12 @@
#! /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.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2008-01-08'
+timestamp='2014-11-04'
# 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
+# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -17,26 +15,22 @@ timestamp='2008-01-08'
# 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.
+# 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.
-
-
-# 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.
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
#
-# 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.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches to <config-patches@gnu.org>.
+
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -56,8 +50,7 @@ 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 1992-2014 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."
@@ -139,12 +132,33 @@ 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
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ ;;
+esac
+
# 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*,
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
@@ -170,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 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
+ | grep -q __ELF__
then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX?
@@ -180,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
fi
;;
*)
- os=netbsd
+ os=netbsd
;;
esac
# The OS release
@@ -201,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -223,7 +241,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +287,10 @@ 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 ;;
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
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
@@ -295,12 +316,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo s390-ibm-zvmoe
exit ;;
*:OS400:*:*)
- echo powerpc-ibm-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:*:*)
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
echo arm-unknown-riscos
exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -324,14 +345,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
case `/usr/bin/uname -p` in
sparc) echo sparc-icl-nx7; exit ;;
esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ 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
@@ -375,23 +415,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# 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}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
exit ;;
@@ -461,8 +501,8 @@ EOF
echo m88k-motorola-sysv3
exit ;;
AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ # 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 ] || \
@@ -475,7 +515,7 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit ;;
@@ -532,15 +572,16 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[456])
+ *:AIX:*:[4567])
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`
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
@@ -575,52 +616,52 @@ EOF
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" ;;
+ 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
+ esac ;;
+ esac
fi
if [ "${HP_ARCH}" = "" ]; then
eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >$dummy.c
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
+ #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);
+ 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);
- }
+ 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
@@ -640,7 +681,7 @@ EOF
# => hppa64-hp-hpux11.23
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
+ grep -q __LP64__
then
HP_ARCH="hppa2.0w"
else
@@ -711,22 +752,22 @@ EOF
exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
@@ -750,14 +791,14 @@ EOF
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 ;;
+ 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}"
+ 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}
@@ -769,34 +810,39 @@ EOF
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
amd64)
echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
esac
exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
+ *:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
+ # 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
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
- EM64T | authenticamd)
+ authenticamd | genuineintel | EM64T)
echo x86_64-unknown-interix${UNAME_RELEASE}
exit ;;
IA64)
@@ -806,6 +852,9 @@ EOF
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-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
@@ -826,213 +875,157 @@ EOF
exit ;;
*:GNU:*:*)
# the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`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
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 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 -q ld.so.1
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 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
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
fi
exit ;;
avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
cris:Linux:*:*)
- echo cris-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
frv:Linux:*:*)
- echo frv-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
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:*:*)
+ mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#undef CPU
- #undef mips64
- #undef mips64el
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
+ CPU=${UNAME_MACHINE}el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
+ CPU=${UNAME_MACHINE}
#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; }
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
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}
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
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 ;;
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
esac
exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
- aarch64:Linux:*.*)
- echo x86_64-unknown-linux-gnu
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
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 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- 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
@@ -1040,11 +1033,11 @@ EOF
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,
+ # 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.
+ # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit ;;
i*86:OS/2:*:*)
@@ -1061,7 +1054,7 @@ EOF
i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit ;;
i*86:*DOS:*:*)
@@ -1076,7 +1069,7 @@ EOF
fi
exit ;;
i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
@@ -1104,10 +1097,13 @@ EOF
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 ;;
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit ;;
@@ -1142,8 +1138,18 @@ EOF
/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; } ;;
+ /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 ;;
@@ -1156,7 +1162,7 @@ EOF
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
exit ;;
SM[BE]S:UNIX_SV:*:*)
@@ -1176,10 +1182,10 @@ EOF
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 ;;
+ 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
@@ -1205,11 +1211,11 @@ EOF
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
+ echo mips-nec-sysv${UNAME_RELEASE}
else
- echo mips-unknown-sysv${UNAME_RELEASE}
+ echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit ;;
@@ -1219,6 +1225,12 @@ EOF
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 ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit ;;
@@ -1245,9 +1257,31 @@ EOF
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1261,7 +1295,10 @@ EOF
*:QNX:*:4*)
echo i386-pc-qnx
exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE}
exit ;;
NSR-?:NONSTOP_KERNEL:*:*)
@@ -1306,13 +1343,13 @@ EOF
echo pdp10-unknown-its
exit ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
+ 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`
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
@@ -1327,158 +1364,13 @@ EOF
i*86:rdos:*:*)
echo ${UNAME_MACHINE}-pc-rdos
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
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
exit ;;
- c4*)
- echo c4-convex-bsd
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
exit ;;
- esac
-fi
+esac
cat >&2 <<EOF
$0: unable to guess system type
@@ -1487,9 +1379,9 @@ 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://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+ 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
diff --git a/tiff/config/config.sub b/tiff/config/config.sub
index 6759825a..7ffe3737 100755
--- a/tiff/config/config.sub
+++ b/tiff/config/config.sub
@@ -1,44 +1,40 @@
#! /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.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2008-01-16'
+timestamp='2014-12-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
+# 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 3 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.
+# 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.
+# 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.
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Please send patches to <config-patches@gnu.org>.
#
# 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.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
# 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.
@@ -72,8 +68,7 @@ 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 1992-2014 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."
@@ -120,12 +115,18 @@ 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* | \
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | 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/'`
;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
@@ -148,10 +149,13 @@ case $os in
-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)
+ -apple | -axis | -knuth | -cray | -microblaze*)
os=
basic_machine=$1
;;
+ -bluegene*)
+ os=-cnk
+ ;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
@@ -166,10 +170,10 @@ case $os in
os=-chorusos
basic_machine=$1
;;
- -chorusrdb)
- os=-chorusrdb
+ -chorusrdb)
+ os=-chorusrdb
basic_machine=$1
- ;;
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -214,6 +218,12 @@ case $os in
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
-lynx*)
os=-lynxos
;;
@@ -238,59 +248,90 @@ case $basic_machine in
# Some are omitted here because they have special meanings below.
1750a | 580 \
| a29k \
+ | aarch64 | aarch64_be \
| 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 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | be32 | be64 \
| bfin \
- | c4x | clipper \
+ | c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
+ | epiphany \
| fido | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
- | mips64vr | mips64vrel \
+ | mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
+ | moxie \
| mt \
| msp430 \
- | nios | nios2 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | 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 \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
| we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -300,6 +341,21 @@ case $basic_machine in
basic_machine=mt-unknown
;;
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-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.
@@ -314,64 +370,83 @@ case $basic_machine in
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
+ | aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | be32-* | be64-* \
| bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | 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-* \
+ | hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
+ | mips64octeon-* | mips64octeonel-* \
| mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
- | nios-* | nios2-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | 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-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
| tron-* \
- | v850-* | v850e-* | vax-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
| we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
- | z8k-*)
+ | z8k-* | z80-*)
;;
# Recognize the basic CPU types without company name, with glob match.
xtensa*)
@@ -393,7 +468,7 @@ case $basic_machine in
basic_machine=a29k-amd
os=-udi
;;
- abacus)
+ abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@@ -439,6 +514,10 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-bsd
;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -455,10 +534,27 @@ case $basic_machine in
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
c90)
basic_machine=c90-cray
os=-unicos
;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -487,7 +583,7 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16)
+ cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
@@ -526,6 +622,10 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
djgpp)
basic_machine=i586-pc
os=-msdosdjgpp
@@ -641,7 +741,6 @@ case $basic_machine in
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
@@ -680,6 +779,9 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
@@ -699,8 +801,15 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
mingw32)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-mingw32
;;
mingw32ce)
@@ -728,6 +837,10 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
@@ -735,10 +848,18 @@ case $basic_machine in
ms1-*)
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
@@ -803,6 +924,12 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -885,9 +1012,10 @@ case $basic_machine in
;;
power) basic_machine=power-ibm
;;
- ppc) basic_machine=powerpc-unknown
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
@@ -912,7 +1040,11 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
- rdos)
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
basic_machine=i386-pc
os=-rdos
;;
@@ -981,6 +1113,9 @@ case $basic_machine in
basic_machine=i860-stratus
os=-sysv4
;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -1037,20 +1172,8 @@ case $basic_machine in
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
+ basic_machine=$basic_machine-unknown
os=-linux-gnu
;;
tx39)
@@ -1120,6 +1243,9 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
ymp)
basic_machine=ymp-cray
os=-unicos
@@ -1128,6 +1254,10 @@ 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
@@ -1166,7 +1296,7 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
- sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ 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)
@@ -1213,9 +1343,12 @@ esac
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
+ # First match some system type aliases
+ # that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@@ -1236,29 +1369,31 @@ case $os in
# 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* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
+ | -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
+ | -bitrig* | -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* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -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*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1297,7 +1432,7 @@ case $os in
-opened*)
os=-openedition
;;
- -os400*)
+ -os400*)
os=-os400
;;
-wince*)
@@ -1346,7 +1481,7 @@ case $os in
-sinix*)
os=-sysv4
;;
- -tpf*)
+ -tpf*)
os=-tpf
;;
-triton*)
@@ -1382,12 +1517,14 @@ case $os in
-aros*)
os=-aros
;;
- -kaos*)
- os=-kaos
- ;;
-zvmoe)
os=-zvmoe
;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
-none)
;;
*)
@@ -1410,10 +1547,10 @@ else
# system, and we'll never get to this point.
case $basic_machine in
- score-*)
+ score-*)
os=-elf
;;
- spu-*)
+ spu-*)
os=-elf
;;
*-acorn)
@@ -1425,8 +1562,23 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
@@ -1446,14 +1598,11 @@ case $basic_machine in
;;
m68000-sun)
os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
;;
m68*-cisco)
os=-aout
;;
- mep-*)
+ mep-*)
os=-elf
;;
mips*-cisco)
@@ -1480,7 +1629,7 @@ case $basic_machine in
*-ibm)
os=-aix
;;
- *-knuth)
+ *-knuth)
os=-mmixware
;;
*-wec)
@@ -1585,7 +1734,7 @@ case $basic_machine in
-sunos*)
vendor=sun
;;
- -aix*)
+ -cnk*|-aix*)
vendor=ibm
;;
-beos*)
diff --git a/tiff/config/depcomp b/tiff/config/depcomp
index fc98710e..65cbf709 100755
--- a/tiff/config/depcomp
+++ b/tiff/config/depcomp
@@ -1,9 +1,9 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2013-05-30.07; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 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
@@ -16,7 +16,7 @@ scriptversion=2013-05-30.07; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -783,9 +783,9 @@ exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/tiff/config/install-sh b/tiff/config/install-sh
index 4fbbae7b..0b0fdcbb 100755
--- a/tiff/config/install-sh
+++ b/tiff/config/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2006-10-14.15
+scriptversion=2013-12-25.23; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,57 +35,57 @@ scriptversion=2006-10-14.15
# 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
+# '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.
+tab=' '
nl='
'
-IFS=" "" $nl"
+IFS=" $tab$nl"
-# set DOITPROG to echo to test this script
+# 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
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
# Put in absolute file names if you don't have them in your path;
# or use environment 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}"
+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=
posix_mkdir=
# Desired mode of installed file.
mode=0755
+chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
-chgrpcmd=
-stripcmd=
+mvcmd=$mvprog
rmcmd="$rmprog -f"
-mvcmd="$mvprog"
+stripcmd=
+
src=
dst=
dir_arg=
-dstarg=
-no_target_directory=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
@@ -95,91 +95,101 @@ 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.
+ --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 CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
"
while test $# -ne 0; do
case $1 in
- -c) shift
- continue;;
+ -c) ;;
- -d) dir_arg=true
- shift
- continue;;
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
+ shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
- shift
- shift
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- continue;;
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
-o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
+ shift;;
- -s) stripcmd=$stripprog
- shift
- continue;;
+ -s) stripcmd=$stripprog;;
- -t) dstarg=$2
- shift
- shift
- continue;;
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
- -T) no_target_directory=true
- shift
- continue;;
+ -T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
- --) shift
- break;;
+ --) shift
+ break;;
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
*) break;;
esac
+ shift
done
-if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+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 "$dstarg"; then
+ if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
+ set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
- dstarg=$arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
done
fi
@@ -188,13 +198,26 @@ if test $# -eq 0; then
echo "$0: no input file specified." >&2
exit 1
fi
- # It's OK to call `install-sh -d' without argument.
+ # 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
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
@@ -205,16 +228,16 @@ if test -z "$dir_arg"; then
*[0-7])
if test -z "$stripcmd"; then
- u_plus_rw=
+ u_plus_rw=
else
- u_plus_rw='% 200'
+ u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
- u_plus_rw=
+ u_plus_rw=
else
- u_plus_rw=,u+rw
+ u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
@@ -222,9 +245,9 @@ fi
for src
do
- # Protect names starting with `-'.
+ # Protect names problematic for 'test' and other utilities.
case $src in
- -*) src=./$src ;;
+ -* | [=\(\)!]) src=./$src;;
esac
if test -n "$dir_arg"; then
@@ -242,55 +265,24 @@ do
exit 1
fi
- if test -z "$dstarg"; then
+ if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
-
- dst=$dstarg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst ;;
- esac
+ dst=$dst_arg
# 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
+ if test "$is_target_a_directory" = never; 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'
- `
-
+ dstdir=`dirname "$dst"`
test -d "$dstdir"
dstdir_status=$?
fi
@@ -301,74 +293,74 @@ do
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;;
+ # 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-writable 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"
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
@@ -378,60 +370,51 @@ do
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
- /*) prefix=/ ;;
- -*) prefix=./ ;;
- *) prefix= ;;
- esac
-
- case $posix_glob in
- '')
- if (set -f) 2>/dev/null; then
- posix_glob=true
- else
- posix_glob=false
- fi ;;
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
esac
oIFS=$IFS
IFS=/
- $posix_glob && set -f
+ set -f
set fnord $dstdir
shift
- $posix_glob && set +f
+ 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/
+ test X"$d" = X && 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
+ # 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
@@ -459,41 +442,51 @@ do
# 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"; } &&
-
- # Now 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.
- {
- if test -f "$dst"; then
- $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
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- } || exit 1
+ { 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` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ 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
@@ -503,5 +496,6 @@ done
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
# End:
diff --git a/tiff/config/ltmain.sh b/tiff/config/ltmain.sh
index 147d758a..0f0a2da3 100755..100644
--- a/tiff/config/ltmain.sh
+++ b/tiff/config/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-0.1"
+VERSION=2.4.6
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool@gnu.org>.
-GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,13 +7272,10 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
- # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
- # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
- -specs=*|-fsanitize=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7571,10 +7568,7 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link)
- libs="$deplibs %DEPLIBS%"
- test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
- ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7893,19 +7887,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
continue
fi # $pass = conv
@@ -8829,9 +8823,6 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
- *)
- func_fatal_configuration "$modename: unknown library version type '$version_type'"
- ;;
esac
;;
no)
diff --git a/tiff/config/missing b/tiff/config/missing
index f62bbae3..625aeb11 100755
--- a/tiff/config/missing
+++ b/tiff/config/missing
@@ -1,9 +1,9 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2013-10-28.13; # UTC
+scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@ scriptversion=2013-10-28.13; # UTC
# 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/>.
+# along with this program. If not, see <https://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
@@ -101,9 +101,9 @@ else
exit $st
fi
-perl_URL=http://www.perl.org/
-flex_URL=http://flex.sourceforge.net/
-gnu_software_URL=http://www.gnu.org/software
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
program_details ()
{
@@ -207,9 +207,9 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \
exit $st
# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
diff --git a/tiff/config/mkinstalldirs b/tiff/config/mkinstalldirs
deleted file mode 100755
index ef7e16fd..00000000
--- a/tiff/config/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/tiff/config/test-driver b/tiff/config/test-driver
index aba4d1d2..8e575b01 100755
--- a/tiff/config/test-driver
+++ b/tiff/config/test-driver
@@ -1,9 +1,9 @@
#! /bin/sh
-# test-driver - basic driver script for the 'parallel-tests' mode.
+# test-driver - basic testsuite driver script.
-scriptversion=2012-06-27.10; # UTC
+scriptversion=2013-07-13.22; # UTC
-# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+# Copyright (C) 2011-2014 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
@@ -44,13 +44,12 @@ print_usage ()
Usage:
test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
[--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT
+ [--enable-hard-errors={yes|no}] [--]
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
END
}
-# TODO: better error handling in option parsing (in particular, ensure
-# TODO: $log_file, $trs_file and $test_name are defined).
test_name= # Used for reporting.
log_file= # Where to save the output of the test script.
trs_file= # Where to save the metadata of the test run.
@@ -69,10 +68,23 @@ while test $# -gt 0; do
--enable-hard-errors) enable_hard_errors=$2; shift;;
--) shift; break;;
-*) usage_error "invalid option: '$1'";;
+ *) break;;
esac
shift
done
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+ usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+ usage_error "missing argument"
+fi
+
if test $color_tests = yes; then
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
red='' # Red.
@@ -94,11 +106,14 @@ trap "st=143; $do_exit" 15
# Test script is run here.
"$@" >$log_file 2>&1
estatus=$?
+
if test $enable_hard_errors = no && test $estatus -eq 99; then
- estatus=1
+ tweaked_estatus=1
+else
+ tweaked_estatus=$estatus
fi
-case $estatus:$expect_failure in
+case $tweaked_estatus:$expect_failure in
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
0:*) col=$grn res=PASS recheck=no gcopy=no;;
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
@@ -107,6 +122,12 @@ case $estatus:$expect_failure in
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
esac
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
diff --git a/tiff/configure b/tiff/configure
index 4bb7c05a..17597b79 100755
--- a/tiff/configure
+++ b/tiff/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for LibTIFF Software 4.0.9.
+# Generated by GNU Autoconf 2.69 for LibTIFF Software 4.1.0.
#
# Report bugs to <tiff@lists.maptools.org>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='LibTIFF Software'
PACKAGE_TARNAME='tiff'
-PACKAGE_VERSION='4.0.9'
-PACKAGE_STRING='LibTIFF Software 4.0.9'
+PACKAGE_VERSION='4.1.0'
+PACKAGE_STRING='LibTIFF Software 4.1.0'
PACKAGE_BUGREPORT='tiff@lists.maptools.org'
PACKAGE_URL=''
@@ -656,6 +656,10 @@ X_CFLAGS
XMKMF
HAVE_CXX_FALSE
HAVE_CXX_TRUE
+HAVE_WEBP_FALSE
+HAVE_WEBP_TRUE
+HAVE_ZSTD_FALSE
+HAVE_ZSTD_TRUE
HAVE_LZMA_FALSE
HAVE_LZMA_TRUE
HAVE_JBIG_FALSE
@@ -708,7 +712,6 @@ am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
-am__quote
am__include
DEPDIR
OBJEXT
@@ -800,7 +803,8 @@ PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
-SHELL'
+SHELL
+am__quote'
ac_subst_files=''
ac_user_opts='
enable_option_checking
@@ -840,6 +844,12 @@ with_jbig_lib_dir
enable_lzma
with_lzma_include_dir
with_lzma_lib_dir
+enable_zstd
+with_zstd_include_dir
+with_zstd_lib_dir
+enable_webp
+with_webp_include_dir
+with_webp_lib_dir
enable_jpeg12
with_jpeg12_include_dir
with_jpeg12_lib
@@ -1408,7 +1418,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 LibTIFF Software 4.0.9 to adapt to many kinds of systems.
+\`configure' configures LibTIFF Software 4.1.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1482,7 +1492,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of LibTIFF Software 4.0.9:";;
+ short | recursive ) echo "Configuration of LibTIFF Software 4.1.0:";;
esac
cat <<\_ACEOF
@@ -1528,6 +1538,10 @@ Optional Features:
compression, enabled by default)
--disable-lzma disable liblzma usage (required for LZMA2
compression, enabled by default)
+ --disable-zstd disable libzstd usage (required for zstd
+ compression, enabled by default)
+ --disable-webp disable libwebp usage (required for webp
+ compression, enabled by default)
--enable-jpeg12 enable libjpeg 8/12bit dual mode
--enable-cxx enable C++ stream API building (requires C++
compiler)
@@ -1539,8 +1553,8 @@ Optional Features:
mutiple strips of specified size to reduce memory
usage)
--enable-defer-strile-load
- enable deferred strip/tile offset/size loading
- (experimental)
+ enable deferred strip/tile offset/size loading (also
+ available at runtime with the 'D' flag of TIFFOpen()
--enable-chunky-strip-read
enable reading large strips in chunks for
TIFFReadScanline() (experimental)
@@ -1577,6 +1591,12 @@ Optional Packages:
--with-lzma-include-dir=DIR
location of liblzma headers
--with-lzma-lib-dir=DIR location of liblzma library binary
+ --with-zstd-include-dir=DIR
+ location of libzstd headers
+ --with-zstd-lib-dir=DIR location of libzstd library binary
+ --with-webp-include-dir=DIR
+ location of libwebp headers
+ --with-webp-lib-dir=DIR location of libwebp library binary
--with-jpeg12-include-dir=DIR
location of libjpeg 12bit headers
--with-jpeg12-lib=LIBRARY
@@ -1668,7 +1688,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-LibTIFF Software configure 4.0.9
+LibTIFF Software configure 4.1.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2441,7 +2461,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 LibTIFF Software $as_me 4.0.9, which was
+It was created by LibTIFF Software $as_me 4.1.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2898,7 +2918,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-am__api_version='1.15'
+am__api_version='1.16'
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -3384,7 +3404,7 @@ fi
# Define the identity of the package.
PACKAGE='tiff'
- VERSION='4.0.9'
+ VERSION='4.1.0'
cat >>confdefs.h <<_ACEOF
@@ -3414,8 +3434,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target (and possibly the TAP driver). The
@@ -3551,7 +3571,7 @@ END
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
@@ -3587,15 +3607,15 @@ fi
LIBTIFF_MAJOR_VERSION=4
-LIBTIFF_MINOR_VERSION=0
-LIBTIFF_MICRO_VERSION=9
+LIBTIFF_MINOR_VERSION=1
+LIBTIFF_MICRO_VERSION=0
LIBTIFF_ALPHA_VERSION=
LIBTIFF_VERSION=$LIBTIFF_MAJOR_VERSION.$LIBTIFF_MINOR_VERSION.$LIBTIFF_MICRO_VERSION$LIBTIFF_ALPHA_VERSION
LIBTIFF_RELEASE_DATE=`date +"%Y%m%d"`
-LIBTIFF_CURRENT=8
+LIBTIFF_CURRENT=10
LIBTIFF_REVISION=0
-LIBTIFF_AGE=3
+LIBTIFF_AGE=5
LIBTIFF_VERSION_INFO=$LIBTIFF_CURRENT:$LIBTIFF_REVISION:$LIBTIFF_AGE
# This is a special hack for OpenBSD and MirOS systems. The dynamic linker
@@ -4470,45 +4490,45 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles"
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
am__doit:
- @echo this is the am__doit target
+ @echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$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
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
- ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
;;
- esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
# Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then :
@@ -6104,7 +6124,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd* | netbsdelf*-gnu)
+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
@@ -10091,9 +10111,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
- linux* | k*bsd*-gnu | gnu*)
- link_all_deplibs=no
- ;;
esac
ld_shlibs=yes
@@ -10348,7 +10365,7 @@ _LT_EOF
fi
;;
- netbsd* | netbsdelf*-gnu)
+ netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -11018,7 +11035,6 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
- link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -11040,7 +11056,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd* | netbsdelf*-gnu)
+ netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -12155,18 +12171,6 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
-netbsdelf*-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='NetBSD ld.elf_so'
- ;;
-
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -15479,7 +15483,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- netbsd* | netbsdelf*-gnu)
+ netbsd*)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -15854,9 +15858,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
;;
esac
;;
- linux* | k*bsd*-gnu | gnu*)
- link_all_deplibs_CXX=no
- ;;
*)
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -16550,18 +16551,6 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
-netbsdelf*-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='NetBSD ld.elf_so'
- ;;
-
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -16988,7 +16977,7 @@ fi
;;
esac
-for ac_header in assert.h fcntl.h io.h limits.h malloc.h search.h sys/time.h unistd.h
+for ac_header in assert.h fcntl.h io.h search.h unistd.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -17524,76 +17513,6 @@ _ACEOF
-# Obtain size of an 'signed short' and define as SIZEOF_SIGNED_SHORT
-# 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:${as_lineno-$LINENO}: checking size of signed short" >&5
-$as_echo_n "checking size of signed short... " >&6; }
-if ${ac_cv_sizeof_signed_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed short))" "ac_cv_sizeof_signed_short" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_signed_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (signed short)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_signed_short=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_short" >&5
-$as_echo "$ac_cv_sizeof_signed_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIGNED_SHORT $ac_cv_sizeof_signed_short
-_ACEOF
-
-
-
-# Obtain size of an 'unsigned short' and define as SIZEOF_UNSIGNED_SHORT
-# 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:${as_lineno-$LINENO}: checking size of unsigned short" >&5
-$as_echo_n "checking size of unsigned short... " >&6; }
-if ${ac_cv_sizeof_unsigned_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_unsigned_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned short)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_unsigned_short=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
-$as_echo "$ac_cv_sizeof_unsigned_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
-_ACEOF
-
-
-
# Obtain size of an 'signed int' and define as SIZEOF_SIGNED_INT
# 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
@@ -18094,15 +18013,15 @@ _ACEOF
$as_echo_n "checking for signed size type... " >&6; }
SSIZE_T='unknown'
SSIZE_FORMAT='unknown'
-if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_unsigned_char_p
+if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed int'
SSIZE_FORMAT='"%d"'
-elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_unsigned_char_p
+elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed long'
SSIZE_FORMAT='"%ld"'
-elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_unsigned_char_p
+elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed long long'
case "${host_os}" in
@@ -18158,52 +18077,7 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
-ac_fn_c_check_type "$LINENO" "int8" "ac_cv_type_int8" "
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-"
-if test "x$ac_cv_type_int8" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INT8 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_type "$LINENO" "int16" "ac_cv_type_int16" "
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-"
-if test "x$ac_cv_type_int16" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INT16 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_type "$LINENO" "int32" "ac_cv_type_int32" "
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-"
-if test "x$ac_cv_type_int32" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INT32 1
-_ACEOF
-
-
-fi
-
-
-for ac_func in floor isascii memmove memset mmap pow setmode snprintf sqrt \
-strchr strrchr strstr strtol strtoul strtoull
+for ac_func in mmap setmode snprintf
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -18258,6 +18132,34 @@ esac
fi
+ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol"
+if test "x$ac_cv_func_strtol" = xyes; then :
+ $as_echo "#define HAVE_STRTOL 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strtol.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strtol.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll"
+if test "x$ac_cv_func_strtoll" = xyes; then :
+ $as_echo "#define HAVE_STRTOLL 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strtoll.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strtoll.$ac_objext"
+ ;;
+esac
+
+fi
+
+
ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
if test "x$ac_cv_func_strtoul" = xyes; then :
$as_echo "#define HAVE_STRTOUL 1" >>confdefs.h
@@ -19183,6 +19085,238 @@ fi
+HAVE_ZSTD=no
+
+# Check whether --enable-zstd was given.
+if test "${enable_zstd+set}" = set; then :
+ enableval=$enable_zstd;
+fi
+
+
+# Check whether --with-zstd-include-dir was given.
+if test "${with_zstd_include_dir+set}" = set; then :
+ withval=$with_zstd_include_dir;
+fi
+
+
+# Check whether --with-zstd-lib-dir was given.
+if test "${with_zstd_lib_dir+set}" = set; then :
+ withval=$with_zstd_lib_dir;
+fi
+
+
+if test "x$enable_zstd" != "xno" ; then
+
+ if test "x$with_zstd_lib_dir" != "x" ; then
+ LDFLAGS="-L$with_zstd_lib_dir $LDFLAGS"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZSTD_decompressStream in -lzstd" >&5
+$as_echo_n "checking for ZSTD_decompressStream in -lzstd... " >&6; }
+if ${ac_cv_lib_zstd_ZSTD_decompressStream+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lzstd $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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 ZSTD_decompressStream ();
+int
+main ()
+{
+return ZSTD_decompressStream ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_zstd_ZSTD_decompressStream=yes
+else
+ ac_cv_lib_zstd_ZSTD_decompressStream=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_decompressStream" >&5
+$as_echo "$ac_cv_lib_zstd_ZSTD_decompressStream" >&6; }
+if test "x$ac_cv_lib_zstd_ZSTD_decompressStream" = xyes; then :
+ zstd_lib=yes
+else
+ zstd_lib=no
+fi
+
+ if test "$zstd_lib" = "no" -a "x$with_zstd_lib_dir" != "x"; then
+ as_fn_error $? "zstd library not found at $with_zstd_lib_dir" "$LINENO" 5
+ fi
+
+ if test "x$with_zstd_include_dir" != "x" ; then
+ CPPFLAGS="-I$with_zstd_include_dir $CPPFLAGS"
+ fi
+ ac_fn_c_check_header_mongrel "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default"
+if test "x$ac_cv_header_zstd_h" = xyes; then :
+ zstd_h=yes
+else
+ zstd_h=no
+fi
+
+
+ if test "$zstd_h" = "no" -a "x$with_zstd_include_dir" != "x" ; then
+ as_fn_error $? "Libzstd headers not found at $with_zstd_include_dir" "$LINENO" 5
+ fi
+
+ if test "$zstd_lib" = "yes" -a "$zstd_h" = "yes" ; then
+ HAVE_ZSTD=yes
+ fi
+
+fi
+
+if test "$HAVE_ZSTD" = "yes" ; then
+
+$as_echo "#define ZSTD_SUPPORT 1" >>confdefs.h
+
+ LIBS="-lzstd $LIBS"
+ tiff_libs_private="-lzstd ${tiff_libs_private}"
+
+ if test "$HAVE_RPATH" = "yes" -a "x$with_zstd_lib_dir" != "x" ; then
+ LIBDIR="-R $with_zstd_lib_dir $LIBDIR"
+ fi
+
+fi
+
+ if test "$HAVE_ZSTD" = 'yes'; then
+ HAVE_ZSTD_TRUE=
+ HAVE_ZSTD_FALSE='#'
+else
+ HAVE_ZSTD_TRUE='#'
+ HAVE_ZSTD_FALSE=
+fi
+
+
+
+HAVE_WEBP=no
+
+# Check whether --enable-webp was given.
+if test "${enable_webp+set}" = set; then :
+ enableval=$enable_webp;
+fi
+
+
+# Check whether --with-webp-include-dir was given.
+if test "${with_webp_include_dir+set}" = set; then :
+ withval=$with_webp_include_dir;
+fi
+
+
+# Check whether --with-webp-lib-dir was given.
+if test "${with_webp_lib_dir+set}" = set; then :
+ withval=$with_webp_lib_dir;
+fi
+
+
+if test "x$enable_webp" != "xno" ; then
+
+ if test "x$with_webp_lib_dir" != "x" ; then
+ LDFLAGS="-L$with_webp_lib_dir $LDFLAGS"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WebPDecode in -lwebp" >&5
+$as_echo_n "checking for WebPDecode in -lwebp... " >&6; }
+if ${ac_cv_lib_webp_WebPDecode+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lwebp $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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 WebPDecode ();
+int
+main ()
+{
+return WebPDecode ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_webp_WebPDecode=yes
+else
+ ac_cv_lib_webp_WebPDecode=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_webp_WebPDecode" >&5
+$as_echo "$ac_cv_lib_webp_WebPDecode" >&6; }
+if test "x$ac_cv_lib_webp_WebPDecode" = xyes; then :
+ webp_lib=yes
+else
+ webp_lib=no
+fi
+
+ if test "$webp_lib" = "no" -a "x$with_webp_lib_dir" != "x"; then
+ as_fn_error $? "webp library not found at $with_webp_lib_dir" "$LINENO" 5
+ fi
+
+ if test "x$with_webp_include_dir" != "x" ; then
+ CPPFLAGS="-I$with_webp_include_dir $CPPFLAGS"
+ fi
+ ac_fn_c_check_header_mongrel "$LINENO" "webp/decode.h" "ac_cv_header_webp_decode_h" "$ac_includes_default"
+if test "x$ac_cv_header_webp_decode_h" = xyes; then :
+ webp_h=yes
+else
+ webp_h=no
+fi
+
+
+ if test "$webp_h" = "no" -a "x$with_webp_include_dir" != "x" ; then
+ as_fn_error $? "Libwebp headers not found at $with_webp_include_dir" "$LINENO" 5
+ fi
+
+ if test "$webp_lib" = "yes" -a "$webp_h" = "yes" ; then
+ HAVE_WEBP=yes
+ fi
+
+fi
+
+if test "$HAVE_WEBP" = "yes" ; then
+
+$as_echo "#define WEBP_SUPPORT 1" >>confdefs.h
+
+ LIBS="-lwebp $LIBS"
+ tiff_libs_private="-lwebp ${tiff_libs_private}"
+
+ if test "$HAVE_RPATH" = "yes" -a "x$with_webp_lib_dir" != "x" ; then
+ LIBDIR="-R $with_webp_lib_dir $LIBDIR"
+ fi
+
+fi
+
+ if test "$HAVE_WEBP" = 'yes'; then
+ HAVE_WEBP_TRUE=
+ HAVE_WEBP_FALSE='#'
+else
+ HAVE_WEBP_TRUE='#'
+ HAVE_WEBP_FALSE=
+fi
+
+
+
HAVE_JPEG12=no
# Check whether --enable-jpeg12 was given.
@@ -21122,6 +21256,14 @@ if test -z "${HAVE_LZMA_TRUE}" && test -z "${HAVE_LZMA_FALSE}"; then
as_fn_error $? "conditional \"HAVE_LZMA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_ZSTD_TRUE}" && test -z "${HAVE_ZSTD_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_ZSTD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_WEBP_TRUE}" && test -z "${HAVE_WEBP_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_WEBP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HAVE_CXX_TRUE}" && test -z "${HAVE_CXX_FALSE}"; then
as_fn_error $? "conditional \"HAVE_CXX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -21531,7 +21673,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by LibTIFF Software $as_me 4.0.9, which was
+This file was extended by LibTIFF Software $as_me 4.1.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21597,7 +21739,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-LibTIFF Software config.status 4.0.9
+LibTIFF Software config.status 4.1.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -21716,7 +21858,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
# INIT-COMMANDS
#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
# The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -22734,29 +22876,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
# Older Autoconf 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
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
shift
- for mf
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_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
+ am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: 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 -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -22774,53 +22922,48 @@ $as_echo X"$mf" |
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"`
- # 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'`; 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\(\/\/\)[^/].*/{
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
- /^X\(\/\/\)$/{
+ /^X\/\(\/\/\)$/{
s//\1/
q
}
- /^X\(\/\).*/{
+ /^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
- as_dir=$dirpart/$fdir; as_fn_mkdir_p
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
done
+ if test $am_rc -ne 0; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
}
;;
"libtool":C)
@@ -23604,6 +23747,8 @@ echo " Old JPEG support: ${HAVE_OJPEG}"
echo " JPEG 8/12 bit dual mode: ${HAVE_JPEG12}"
echo " ISO JBIG support: ${HAVE_JBIG}"
echo " LZMA2 support: ${HAVE_LZMA}"
+echo " ZSTD support: ${HAVE_ZSTD}"
+echo " WEBP support: ${HAVE_WEBP}"
echo ""
echo " C++ support: ${HAVE_CXX}"
echo ""
diff --git a/tiff/configure.ac b/tiff/configure.ac
index 0dd32b75..eecb8e99 100644
--- a/tiff/configure.ac
+++ b/tiff/configure.ac
@@ -25,7 +25,7 @@ dnl OF THIS SOFTWARE.
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.64)
-AC_INIT([LibTIFF Software],[4.0.9],[tiff@lists.maptools.org],[tiff])
+AC_INIT([LibTIFF Software],[4.1.0],[tiff@lists.maptools.org],[tiff])
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_MACRO_DIR(m4)
AC_LANG(C)
@@ -40,8 +40,8 @@ AM_MAINTAINER_MODE
dnl Versioning.
dnl Don't fill the ALPHA_VERSION field, if not applicable.
LIBTIFF_MAJOR_VERSION=4
-LIBTIFF_MINOR_VERSION=0
-LIBTIFF_MICRO_VERSION=9
+LIBTIFF_MINOR_VERSION=1
+LIBTIFF_MICRO_VERSION=0
LIBTIFF_ALPHA_VERSION=
LIBTIFF_VERSION=$LIBTIFF_MAJOR_VERSION.$LIBTIFF_MINOR_VERSION.$LIBTIFF_MICRO_VERSION$LIBTIFF_ALPHA_VERSION
dnl This will be used with the 'make release' target
@@ -76,9 +76,9 @@ dnl 5. If any interfaces have been added since the last public release, then
dnl increment age.
dnl 6. If any interfaces have been removed since the last public release,
dnl then set age to 0.
-LIBTIFF_CURRENT=8
+LIBTIFF_CURRENT=10
LIBTIFF_REVISION=0
-LIBTIFF_AGE=3
+LIBTIFF_AGE=5
LIBTIFF_VERSION_INFO=$LIBTIFF_CURRENT:$LIBTIFF_REVISION:$LIBTIFF_AGE
# This is a special hack for OpenBSD and MirOS systems. The dynamic linker
@@ -174,7 +174,7 @@ case "${host_os}" in
esac
dnl Checks for header files.
-AC_CHECK_HEADERS([assert.h fcntl.h io.h limits.h malloc.h search.h sys/time.h unistd.h])
+AC_CHECK_HEADERS([assert.h fcntl.h io.h search.h unistd.h])
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@@ -196,12 +196,6 @@ dnl ---------------------------------------------------------------------------
dnl Compute sized types for current CPU and compiler options
dnl ---------------------------------------------------------------------------
-# Obtain size of an 'signed short' and define as SIZEOF_SIGNED_SHORT
-AC_CHECK_SIZEOF(signed short)
-
-# Obtain size of an 'unsigned short' and define as SIZEOF_UNSIGNED_SHORT
-AC_CHECK_SIZEOF(unsigned short)
-
# Obtain size of an 'signed int' and define as SIZEOF_SIGNED_INT
AC_CHECK_SIZEOF(signed int)
@@ -371,15 +365,15 @@ AC_DEFINE_UNQUOTED([TIFF_SIZE_FORMAT],[$SIZE_FORMAT],[Size type formatter])
AC_MSG_CHECKING(for signed size type)
SSIZE_T='unknown'
SSIZE_FORMAT='unknown'
-if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_unsigned_char_p
+if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed int'
SSIZE_FORMAT='"%d"'
-elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_unsigned_char_p
+elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed long'
SSIZE_FORMAT='"%ld"'
-elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_unsigned_char_p
+elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_size_t
then
SSIZE_T='signed long long'
case "${host_os}" in
@@ -412,22 +406,15 @@ AC_MSG_RESULT($PTRDIFF_T)
AC_DEFINE_UNQUOTED(TIFF_PTRDIFF_T,$PTRDIFF_T,[Pointer difference type])
AC_DEFINE_UNQUOTED(TIFF_PTRDIFF_FORMAT,$PTRDIFF_FORMAT,[Pointer difference type formatter])
-dnl Some compilers (IBM VisualAge) has these types defined, so check it here:
-AC_CHECK_TYPES([int8, int16, int32],,,
-[
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-])
-
dnl Checks for library functions.
-AC_CHECK_FUNCS([floor isascii memmove memset mmap pow setmode snprintf sqrt \
-strchr strrchr strstr strtol strtoul strtoull])
+AC_CHECK_FUNCS([mmap setmode snprintf])
dnl Will use local replacements for unavailable functions
AC_REPLACE_FUNCS(getopt)
AC_REPLACE_FUNCS(snprintf)
AC_REPLACE_FUNCS(strcasecmp)
+AC_REPLACE_FUNCS(strtol)
+AC_REPLACE_FUNCS(strtoll)
AC_REPLACE_FUNCS(strtoul)
AC_REPLACE_FUNCS(strtoull)
AC_REPLACE_FUNCS(lfind)
@@ -827,6 +814,114 @@ fi
AM_CONDITIONAL(HAVE_LZMA, test "$HAVE_LZMA" = 'yes')
dnl ---------------------------------------------------------------------------
+dnl Check for libzstd.
+dnl ---------------------------------------------------------------------------
+
+HAVE_ZSTD=no
+
+AC_ARG_ENABLE(zstd,
+ AS_HELP_STRING([--disable-zstd],
+ [disable libzstd usage (required for zstd compression, enabled by default)]),,)
+AC_ARG_WITH(zstd-include-dir,
+ AS_HELP_STRING([--with-zstd-include-dir=DIR],
+ [location of libzstd headers]),,)
+AC_ARG_WITH(zstd-lib-dir,
+ AS_HELP_STRING([--with-zstd-lib-dir=DIR],
+ [location of libzstd library binary]),,)
+
+if test "x$enable_zstd" != "xno" ; then
+
+ if test "x$with_zstd_lib_dir" != "x" ; then
+ LDFLAGS="-L$with_zstd_lib_dir $LDFLAGS"
+ fi
+
+ AC_CHECK_LIB(zstd, ZSTD_decompressStream, [zstd_lib=yes], [zstd_lib=no],)
+ if test "$zstd_lib" = "no" -a "x$with_zstd_lib_dir" != "x"; then
+ AC_MSG_ERROR([zstd library not found at $with_zstd_lib_dir])
+ fi
+
+ if test "x$with_zstd_include_dir" != "x" ; then
+ CPPFLAGS="-I$with_zstd_include_dir $CPPFLAGS"
+ fi
+ AC_CHECK_HEADER(zstd.h, [zstd_h=yes], [zstd_h=no])
+ if test "$zstd_h" = "no" -a "x$with_zstd_include_dir" != "x" ; then
+ AC_MSG_ERROR([Libzstd headers not found at $with_zstd_include_dir])
+ fi
+
+ if test "$zstd_lib" = "yes" -a "$zstd_h" = "yes" ; then
+ HAVE_ZSTD=yes
+ fi
+
+fi
+
+if test "$HAVE_ZSTD" = "yes" ; then
+ AC_DEFINE(ZSTD_SUPPORT,1,[Support zstd compression])
+ LIBS="-lzstd $LIBS"
+ tiff_libs_private="-lzstd ${tiff_libs_private}"
+
+ if test "$HAVE_RPATH" = "yes" -a "x$with_zstd_lib_dir" != "x" ; then
+ LIBDIR="-R $with_zstd_lib_dir $LIBDIR"
+ fi
+
+fi
+
+AM_CONDITIONAL(HAVE_ZSTD, test "$HAVE_ZSTD" = 'yes')
+
+dnl ---------------------------------------------------------------------------
+dnl Check for libwebp.
+dnl ---------------------------------------------------------------------------
+
+HAVE_WEBP=no
+
+AC_ARG_ENABLE(webp,
+ AS_HELP_STRING([--disable-webp],
+ [disable libwebp usage (required for webp compression, enabled by default)]),,)
+AC_ARG_WITH(webp-include-dir,
+ AS_HELP_STRING([--with-webp-include-dir=DIR],
+ [location of libwebp headers]),,)
+AC_ARG_WITH(webp-lib-dir,
+ AS_HELP_STRING([--with-webp-lib-dir=DIR],
+ [location of libwebp library binary]),,)
+
+if test "x$enable_webp" != "xno" ; then
+
+ if test "x$with_webp_lib_dir" != "x" ; then
+ LDFLAGS="-L$with_webp_lib_dir $LDFLAGS"
+ fi
+
+ AC_CHECK_LIB(webp, WebPDecode, [webp_lib=yes], [webp_lib=no],)
+ if test "$webp_lib" = "no" -a "x$with_webp_lib_dir" != "x"; then
+ AC_MSG_ERROR([webp library not found at $with_webp_lib_dir])
+ fi
+
+ if test "x$with_webp_include_dir" != "x" ; then
+ CPPFLAGS="-I$with_webp_include_dir $CPPFLAGS"
+ fi
+ AC_CHECK_HEADER(webp/decode.h, [webp_h=yes], [webp_h=no])
+ if test "$webp_h" = "no" -a "x$with_webp_include_dir" != "x" ; then
+ AC_MSG_ERROR([Libwebp headers not found at $with_webp_include_dir])
+ fi
+
+ if test "$webp_lib" = "yes" -a "$webp_h" = "yes" ; then
+ HAVE_WEBP=yes
+ fi
+
+fi
+
+if test "$HAVE_WEBP" = "yes" ; then
+ AC_DEFINE(WEBP_SUPPORT,1,[Support webp compression])
+ LIBS="-lwebp $LIBS"
+ tiff_libs_private="-lwebp ${tiff_libs_private}"
+
+ if test "$HAVE_RPATH" = "yes" -a "x$with_webp_lib_dir" != "x" ; then
+ LIBDIR="-R $with_webp_lib_dir $LIBDIR"
+ fi
+
+fi
+
+AM_CONDITIONAL(HAVE_WEBP, test "$HAVE_WEBP" = 'yes')
+
+dnl ---------------------------------------------------------------------------
dnl Should 8/12 bit jpeg mode be enabled?
dnl ---------------------------------------------------------------------------
@@ -975,17 +1070,16 @@ fi
dnl ---------------------------------------------------------------------------
dnl Should we try to defer loading of strip/tile offsets and sizes to
-dnl optimize directory scanning? These is an experimental feature for
-dnl libtiff 4.0.
+dnl optimize directory scanning?
dnl ---------------------------------------------------------------------------
AC_ARG_ENABLE(defer-strile-load,
AS_HELP_STRING([--enable-defer-strile-load],
- [enable deferred strip/tile offset/size loading (experimental)]),
+ [enable deferred strip/tile offset/size loading (also available at runtime with the 'D' flag of TIFFOpen()]),
[HAVE_DEFER_STRILE_LOAD=$enableval], [HAVE_DEFER_STRILE_LOAD=no])
if test "$HAVE_DEFER_STRILE_LOAD" = "yes" ; then
- AC_DEFINE(DEFER_STRILE_LOAD,1,[enable deferred strip/tile offset/size loading (experimental)])
+ AC_DEFINE(DEFER_STRILE_LOAD,1,[enable deferred strip/tile offset/size loading])
fi
@@ -1103,6 +1197,8 @@ LOC_MSG([ Old JPEG support: ${HAVE_OJPEG}])
LOC_MSG([ JPEG 8/12 bit dual mode: ${HAVE_JPEG12}])
LOC_MSG([ ISO JBIG support: ${HAVE_JBIG}])
LOC_MSG([ LZMA2 support: ${HAVE_LZMA}])
+LOC_MSG([ ZSTD support: ${HAVE_ZSTD}])
+LOC_MSG([ WEBP support: ${HAVE_WEBP}])
LOC_MSG()
LOC_MSG([ C++ support: ${HAVE_CXX}])
LOC_MSG()
diff --git a/tiff/configure.com b/tiff/configure.com
index 22675172..a3064425 100644
--- a/tiff/configure.com
+++ b/tiff/configure.com
@@ -1,4 +1,3 @@
-$! $Id: configure.com,v 1.3 2012-07-29 15:45:29 tgl Exp $
$!
$! OpenVMS configure procedure for libtiff
$! (c) Alexey Chupahin 22-NOV-2007
diff --git a/tiff/contrib/Makefile.in b/tiff/contrib/Makefile.in
index 1d1d0293..c4d5cd6e 100644
--- a/tiff/contrib/Makefile.in
+++ b/tiff/contrib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -160,7 +160,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- distdir
+ distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -181,8 +181,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -382,8 +381,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -500,7 +499,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/addtiffo/Makefile.in b/tiff/contrib/addtiffo/Makefile.in
index 24c604e1..abe4c027 100644
--- a/tiff/contrib/addtiffo/Makefile.in
+++ b/tiff/contrib/addtiffo/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -123,7 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -151,7 +151,9 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/addtiffo.Po \
+ ./$(DEPDIR)/tif_overview.Po ./$(DEPDIR)/tif_ovrcache.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -198,7 +200,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs README
+ README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -378,8 +380,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -410,9 +412,15 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtiffo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_overview.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ovrcache.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtiffo.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_overview.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ovrcache.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -493,7 +501,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -563,7 +574,9 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/addtiffo.Po
+ -rm -f ./$(DEPDIR)/tif_overview.Po
+ -rm -f ./$(DEPDIR)/tif_ovrcache.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -609,7 +622,9 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/addtiffo.Po
+ -rm -f ./$(DEPDIR)/tif_overview.Po
+ -rm -f ./$(DEPDIR)/tif_ovrcache.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -630,9 +645,9 @@ uninstall-am:
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am 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-dvi install-dvi-am install-exec \
diff --git a/tiff/contrib/addtiffo/addtiffo.c b/tiff/contrib/addtiffo/addtiffo.c
index 7bc3f444..e1d70623 100644
--- a/tiff/contrib/addtiffo/addtiffo.c
+++ b/tiff/contrib/addtiffo/addtiffo.c
@@ -1,6 +1,4 @@
/******************************************************************************
- * $Id: addtiffo.c,v 1.8 2015-05-30 20:30:27 bfriesen Exp $
- *
* Project: GeoTIFF Overview Builder
* Purpose: Mainline for building overviews in a TIFF file.
* Author: Frank Warmerdam, warmerdam@pobox.com
diff --git a/tiff/contrib/addtiffo/tif_overview.c b/tiff/contrib/addtiffo/tif_overview.c
index c61ffbb8..03b35733 100644
--- a/tiff/contrib/addtiffo/tif_overview.c
+++ b/tiff/contrib/addtiffo/tif_overview.c
@@ -65,6 +65,8 @@
# define MAX(a,b) ((a>b) ? a : b)
#endif
+#define TIFF_DIR_MAX 65534
+
void TIFFBuildOverviews( TIFF *, int, int *, int, const char *,
int (*)(double,void*), void * );
@@ -91,6 +93,7 @@ uint32 TIFF_WriteOverview( TIFF *hTIFF, uint32 nXSize, uint32 nYSize,
{
toff_t nBaseDirOffset;
toff_t nOffset;
+ tdir_t iNumDir;
(void) bUseSubIFDs;
@@ -147,7 +150,16 @@ uint32 TIFF_WriteOverview( TIFF *hTIFF, uint32 nXSize, uint32 nYSize,
return 0;
TIFFWriteDirectory( hTIFF );
- TIFFSetDirectory( hTIFF, (tdir_t) (TIFFNumberOfDirectories(hTIFF)-1) );
+ iNumDir = TIFFNumberOfDirectories(hTIFF);
+ if( iNumDir > TIFF_DIR_MAX )
+ {
+ TIFFErrorExt( TIFFClientdata(hTIFF),
+ "TIFF_WriteOverview",
+ "File `%s' has too many directories.\n",
+ TIFFFileName(hTIFF) );
+ exit(-1);
+ }
+ TIFFSetDirectory( hTIFF, (tdir_t) (iNumDir - 1) );
nOffset = TIFFCurrentDirOffset( hTIFF );
diff --git a/tiff/contrib/addtiffo/tif_ovrcache.c b/tiff/contrib/addtiffo/tif_ovrcache.c
index 171527b5..67a88120 100644
--- a/tiff/contrib/addtiffo/tif_ovrcache.c
+++ b/tiff/contrib/addtiffo/tif_ovrcache.c
@@ -1,6 +1,4 @@
/******************************************************************************
- * $Id: tif_ovrcache.c,v 1.11 2015-05-29 03:08:19 bfriesen Exp $
- *
* Project: TIFF Overview Builder
* Purpose: Library functions to maintain two rows of tiles or two strips
* of data for output overviews as an output cache.
diff --git a/tiff/contrib/dbs/Makefile.in b/tiff/contrib/dbs/Makefile.in
index e3503e10..38a13830 100644
--- a/tiff/contrib/dbs/Makefile.in
+++ b/tiff/contrib/dbs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -124,7 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -160,7 +160,10 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/tiff-bi.Po \
+ ./$(DEPDIR)/tiff-grayscale.Po ./$(DEPDIR)/tiff-palette.Po \
+ ./$(DEPDIR)/tiff-rgb.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -204,7 +207,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- distdir
+ distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -226,7 +229,7 @@ ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs README
+ README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -437,8 +440,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -481,10 +484,16 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-bi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-grayscale.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-palette.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-rgb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-bi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-grayscale.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-palette.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-rgb.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -612,7 +621,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -708,7 +720,10 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-recursive
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/tiff-bi.Po
+ -rm -f ./$(DEPDIR)/tiff-grayscale.Po
+ -rm -f ./$(DEPDIR)/tiff-palette.Po
+ -rm -f ./$(DEPDIR)/tiff-rgb.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -754,7 +769,10 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/tiff-bi.Po
+ -rm -f ./$(DEPDIR)/tiff-grayscale.Po
+ -rm -f ./$(DEPDIR)/tiff-palette.Po
+ -rm -f ./$(DEPDIR)/tiff-rgb.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -775,8 +793,8 @@ uninstall-am:
.MAKE: $(am__recursive_targets) install-am install-strip
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am clean clean-generic clean-libtool \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic clean-libtool \
clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
diff --git a/tiff/contrib/dbs/tiff-bi.c b/tiff/contrib/dbs/tiff-bi.c
index 33f05c7d..db0e8c89 100644
--- a/tiff/contrib/dbs/tiff-bi.c
+++ b/tiff/contrib/dbs/tiff-bi.c
@@ -1,5 +1,3 @@
-/* $Id: tiff-bi.c,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* tiff-bi.c -- create a Class B (bilevel) TIFF file
*
diff --git a/tiff/contrib/dbs/tiff-grayscale.c b/tiff/contrib/dbs/tiff-grayscale.c
index 00b229f3..92c7b904 100644
--- a/tiff/contrib/dbs/tiff-grayscale.c
+++ b/tiff/contrib/dbs/tiff-grayscale.c
@@ -1,5 +1,3 @@
-/* $Id: tiff-grayscale.c,v 1.6 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* tiff-grayscale.c -- create a Class G (grayscale) TIFF file
* with a gray response curve in linear optical density
diff --git a/tiff/contrib/dbs/tiff-palette.c b/tiff/contrib/dbs/tiff-palette.c
index 3d9e862b..7b3d433f 100644
--- a/tiff/contrib/dbs/tiff-palette.c
+++ b/tiff/contrib/dbs/tiff-palette.c
@@ -1,5 +1,3 @@
-/* $Id: tiff-palette.c,v 1.5 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* tiff-palette.c -- create a Class P (palette) TIFF file
*
diff --git a/tiff/contrib/dbs/tiff-rgb.c b/tiff/contrib/dbs/tiff-rgb.c
index bf904990..d14ed005 100644
--- a/tiff/contrib/dbs/tiff-rgb.c
+++ b/tiff/contrib/dbs/tiff-rgb.c
@@ -1,5 +1,3 @@
-/* $Id: tiff-rgb.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* tiff-rgb.c -- create a 24-bit Class R (rgb) TIFF file
*
diff --git a/tiff/contrib/dbs/xtiff/Makefile.in b/tiff/contrib/dbs/xtiff/Makefile.in
index 08993c44..61594863 100644
--- a/tiff/contrib/dbs/xtiff/Makefile.in
+++ b/tiff/contrib/dbs/xtiff/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -124,7 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -149,8 +149,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -327,8 +326,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -352,7 +351,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/dbs/xtiff/xtiff.c b/tiff/contrib/dbs/xtiff/xtiff.c
index 97e4ffe2..bc10b670 100644
--- a/tiff/contrib/dbs/xtiff/xtiff.c
+++ b/tiff/contrib/dbs/xtiff/xtiff.c
@@ -1,6 +1,4 @@
/*
- * $Id: xtiff.c,v 1.4 2013-05-02 14:44:29 tgl Exp $
- *
* xtiff - view a TIFF file in an X window
*
* Dan Sears
diff --git a/tiff/contrib/iptcutil/Makefile.in b/tiff/contrib/iptcutil/Makefile.in
index 0ee5ad3c..790bb6c0 100644
--- a/tiff/contrib/iptcutil/Makefile.in
+++ b/tiff/contrib/iptcutil/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -123,7 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -150,7 +150,8 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/iptcutil.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -197,7 +198,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs README
+ README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -378,8 +379,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -410,7 +411,13 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptcutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptcutil.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -491,7 +498,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -561,7 +571,7 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/iptcutil.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -607,7 +617,7 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/iptcutil.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -628,9 +638,9 @@ uninstall-am:
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am 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-dvi install-dvi-am install-exec \
diff --git a/tiff/contrib/iptcutil/iptcutil.c b/tiff/contrib/iptcutil/iptcutil.c
index c359df87..621716df 100644
--- a/tiff/contrib/iptcutil/iptcutil.c
+++ b/tiff/contrib/iptcutil/iptcutil.c
@@ -1,5 +1,3 @@
-/* $Id: iptcutil.c,v 1.11 2015-06-21 01:09:09 bfriesen Exp $ */
-
#include "tif_config.h"
#include <stdio.h>
@@ -784,7 +782,7 @@ int sindex(char ch,char *string)
char *cp;
for(cp=string;*cp;++cp)
if(ch==*cp)
- return (int)(cp-string); /* return postion of character */
+ return (int)(cp-string); /* return position of character */
return -1; /* eol ... no match found */
}
@@ -928,6 +926,7 @@ int tokenizer(unsigned inflag,char *token,int tokmax,char *line,
{
case IN_WHITE:
_p_state=IN_TOKEN; /* switch states */
+ /* Fall through */
case IN_TOKEN: /* these 2 are */
case IN_QUOTE: /* identical here */
diff --git a/tiff/contrib/mfs/Makefile.in b/tiff/contrib/mfs/Makefile.in
index 0a3b8406..201e700b 100644
--- a/tiff/contrib/mfs/Makefile.in
+++ b/tiff/contrib/mfs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -322,8 +321,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -347,7 +346,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/pds/Makefile.in b/tiff/contrib/pds/Makefile.in
index 29e48aa3..e4c4651d 100644
--- a/tiff/contrib/pds/Makefile.in
+++ b/tiff/contrib/pds/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -325,8 +324,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -350,7 +349,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/pds/README b/tiff/contrib/pds/README
index b9abc6b3..a36b0549 100644
--- a/tiff/contrib/pds/README
+++ b/tiff/contrib/pds/README
@@ -30,7 +30,7 @@ Your ReadRGBA() routine works well for reading many different formats
(TILED, STIP, compressed or not, etc.) of the most basic types of data
(RGB, 8-bit greyscale, 8-bit colormapped) into an SGI-style data array,
and serves as a good template for users with other needs. I used it as
-an exmaple of how to make an iterator which, rather than fill a data
+an example of how to make an iterator which, rather than fill a data
array, calls an arbitrary user-supplied callback function for each
"chunk" of data - that "chunk" might be a strip or a tile, and might
have one sample-per-pixel or two, and might be 8-bit data or 16-bit or
diff --git a/tiff/contrib/pds/tif_imageiter.c b/tiff/contrib/pds/tif_imageiter.c
index e025dc52..243cfd65 100644
--- a/tiff/contrib/pds/tif_imageiter.c
+++ b/tiff/contrib/pds/tif_imageiter.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_imageiter.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* Copyright (c) 1991-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
@@ -116,7 +114,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024])
TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Missing required \"Colormap\" tag");
return (0);
}
- /* fall thru... */
+ /* fall through... */
case PHOTOMETRIC_MINISWHITE:
case PHOTOMETRIC_MINISBLACK:
/* This should work now so skip the check - BSR
@@ -183,7 +181,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024])
case ORIENTATION_LEFTBOT: /* XXX */
TIFFWarning(TIFFFileName(tif), "using bottom-left orientation");
img->orientation = ORIENTATION_BOTLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_BOTLEFT:
break;
case ORIENTATION_TOPRIGHT:
@@ -192,7 +190,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024])
default:
TIFFWarning(TIFFFileName(tif), "using top-left orientation");
img->orientation = ORIENTATION_TOPLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_TOPLEFT:
break;
}
diff --git a/tiff/contrib/pds/tif_imageiter.h b/tiff/contrib/pds/tif_imageiter.h
index e7dbe46c..4f4fd279 100644
--- a/tiff/contrib/pds/tif_imageiter.h
+++ b/tiff/contrib/pds/tif_imageiter.h
@@ -44,7 +44,7 @@ struct _TIFFImageIter {
uint16 samplesperpixel; /* image samples/pixel */
uint16 orientation; /* image orientation */
uint16 photometric; /* image photometric interp */
- uint16* redcmap; /* colormap pallete */
+ uint16* redcmap; /* colormap palette */
uint16* greencmap;
uint16* bluecmap;
/* get image data routine */
diff --git a/tiff/contrib/pds/tif_pdsdirread.c b/tiff/contrib/pds/tif_pdsdirread.c
index 37e513ae..cc6231da 100644
--- a/tiff/contrib/pds/tif_pdsdirread.c
+++ b/tiff/contrib/pds/tif_pdsdirread.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_pdsdirread.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
@@ -194,7 +192,7 @@ TIFFReadPrivateDataSubDirectory(TIFF* tif, toff_t pdir_offset,
* the fields to check type and tag information,
* and to extract info required to size data
* structures. A second pass is made afterwards
- * to read in everthing not taken in the first pass.
+ * to read in everything not taken in the first pass.
*/
td = &tif->tif_dir;
@@ -827,7 +825,7 @@ TIFFFetchNormalSubTag(TIFF* tif, TIFFDirEntry* dp, const TIFFFieldInfo* fip,
break;
}
}
- /* fall thru... */
+ /* fall through... */
case TIFF_LONG:
case TIFF_SLONG:
{ uint32 v32 =
diff --git a/tiff/contrib/pds/tif_pdsdirwrite.c b/tiff/contrib/pds/tif_pdsdirwrite.c
index 3c632da6..a670bda1 100644
--- a/tiff/contrib/pds/tif_pdsdirwrite.c
+++ b/tiff/contrib/pds/tif_pdsdirwrite.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_pdsdirwrite.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */
-
/* When writing data to TIFF files, it is often useful to store application-
specific data in a private TIFF directory so that the tags don't need to
be registered and won't conflict with other people's user-defined tags.
diff --git a/tiff/contrib/ras/Makefile.in b/tiff/contrib/ras/Makefile.in
index 67075acb..0028f091 100644
--- a/tiff/contrib/ras/Makefile.in
+++ b/tiff/contrib/ras/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -323,8 +322,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -348,7 +347,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/ras/tif2ras.c b/tiff/contrib/ras/tif2ras.c
index e1c321df..79db104e 100644
--- a/tiff/contrib/ras/tif2ras.c
+++ b/tiff/contrib/ras/tif2ras.c
@@ -1,6 +1,3 @@
-#ifndef lint
-static char id[] = "$Id: tif2ras.c,v 1.3 2010-06-08 18:55:15 bfriesen Exp $";
-#endif
/*-
* tif2ras.c - Converts from a Tagged Image File Format image to a Sun Raster.
*
diff --git a/tiff/contrib/stream/Makefile.in b/tiff/contrib/stream/Makefile.in
index a7e314ce..481faa82 100644
--- a/tiff/contrib/stream/Makefile.in
+++ b/tiff/contrib/stream/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -323,8 +322,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -348,7 +347,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/tags/Makefile.in b/tiff/contrib/tags/Makefile.in
index ec8302c6..0b53ed76 100644
--- a/tiff/contrib/tags/Makefile.in
+++ b/tiff/contrib/tags/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs README
+am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -326,8 +325,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -351,7 +350,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/tags/README b/tiff/contrib/tags/README
index 73c6c213..3220b7b1 100644
--- a/tiff/contrib/tags/README
+++ b/tiff/contrib/tags/README
@@ -2,7 +2,7 @@
NOTE: Sept/2004
The following described approach to managing tag extensions has been
-mostly superceeded since libtiff 3.6.0. The described approach requires
+mostly superseded since libtiff 3.6.0. The described approach requires
internal knowledge of the libtiff API and tends to be very fragile
in the face of libtiff upgrades.
diff --git a/tiff/contrib/tags/xtif_dir.c b/tiff/contrib/tags/xtif_dir.c
index e67a6abf..35295526 100644
--- a/tiff/contrib/tags/xtif_dir.c
+++ b/tiff/contrib/tags/xtif_dir.c
@@ -269,7 +269,7 @@ _XTIFFDefaultDirectory(TIFF *tif)
* Install into TIFF structure.
*/
TIFFMEMBER(tif,clientdir) = (tidata_t)xt;
- tif->tif_flags |= XTIFF_INITIALIZED; /* dont do this again! */
+ tif->tif_flags |= XTIFF_INITIALIZED; /* don't do this again! */
}
/* set up our own defaults */
diff --git a/tiff/contrib/win_dib/Makefile.in b/tiff/contrib/win_dib/Makefile.in
index 47805786..7663106d 100644
--- a/tiff/contrib/win_dib/Makefile.in
+++ b/tiff/contrib/win_dib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -146,8 +146,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs
+am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -325,8 +324,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -350,7 +349,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/contrib/win_dib/Makefile.w95 b/tiff/contrib/win_dib/Makefile.w95
index 3f461ef5..3f15e832 100644
--- a/tiff/contrib/win_dib/Makefile.w95
+++ b/tiff/contrib/win_dib/Makefile.w95
@@ -1,5 +1,3 @@
-# $Header: /usr/people/sam/tiff/libtiff/RCS/Makefile.w95,v 1.2 1994/11/28
-06:13:31 sam Exp $
#
# Tag Image File Format Library
#
diff --git a/tiff/contrib/win_dib/README.tiff2dib b/tiff/contrib/win_dib/README.tiff2dib
index 3e6075fb..ff70ca1a 100644
--- a/tiff/contrib/win_dib/README.tiff2dib
+++ b/tiff/contrib/win_dib/README.tiff2dib
@@ -40,7 +40,7 @@ it contain the function LoadTIFFinDIB that load
a TIFF file and build a memory DIB with it and return the
HANDLE (HDIB) of the memory bloc containing this DIB.
Since DIB is the "natural" bitmap format for Windows 3.1, 95 and NT,
-this function sould be usefull for some Windows 95 (or NT) developer.
+this function should be useful for some Windows 95 (or NT) developer.
Sorry for my approximate english ...
diff --git a/tiff/contrib/win_dib/Tiffile.cpp b/tiff/contrib/win_dib/Tiffile.cpp
index 9d958b1c..2f7965d6 100644
--- a/tiff/contrib/win_dib/Tiffile.cpp
+++ b/tiff/contrib/win_dib/Tiffile.cpp
@@ -360,7 +360,7 @@ setorientation(TIFFRGBAImage* img, uint32 h)
case ORIENTATION_LEFTBOT: /* XXX */
TIFFWarning(TIFFFileName(tif), "using bottom-left orientation");
img->orientation = ORIENTATION_BOTLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_BOTLEFT:
y = 0;
break;
@@ -370,7 +370,7 @@ setorientation(TIFFRGBAImage* img, uint32 h)
default:
TIFFWarning(TIFFFileName(tif), "using top-left orientation");
img->orientation = ORIENTATION_TOPLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_TOPLEFT:
y = h-1;
break;
diff --git a/tiff/html/Makefile.am b/tiff/html/Makefile.am
index 12193df7..10b419b2 100644
--- a/tiff/html/Makefile.am
+++ b/tiff/html/Makefile.am
@@ -86,7 +86,9 @@ docfiles = \
v4.0.6.html \
v4.0.7.html \
v4.0.8.html \
- v4.0.9.html
+ v4.0.9.html \
+ v4.0.10.html \
+ v4.1.0.html
dist_doc_DATA = $(docfiles)
diff --git a/tiff/html/Makefile.in b/tiff/html/Makefile.in
index 4c0c8e3e..30932e63 100644
--- a/tiff/html/Makefile.in
+++ b/tiff/html/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -124,7 +124,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \
$(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -192,7 +192,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
- distdir
+ distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -213,8 +213,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs
+am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -449,7 +448,9 @@ docfiles = \
v4.0.6.html \
v4.0.7.html \
v4.0.8.html \
- v4.0.9.html
+ v4.0.9.html \
+ v4.0.10.html \
+ v4.1.0.html
dist_doc_DATA = $(docfiles)
SUBDIRS = images man
@@ -476,8 +477,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -615,7 +616,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/html/addingtags.html b/tiff/html/addingtags.html
index 4e89205b..c61a2623 100644
--- a/tiff/html/addingtags.html
+++ b/tiff/html/addingtags.html
@@ -12,7 +12,7 @@ Defining New TIFF Tags
</H1>
Libtiff has built-in knowledge of all the standard TIFF tags, as
-well as extentions. The following describes how to add knowledge of
+well as extensions. The following describes how to add knowledge of
new tags as builtins to libtiff, or how to application specific tags can
be used by applications without modifying libtiff.
<p>
@@ -113,7 +113,7 @@ their own tags to store information outside the core TIFF specification.
This is done by calling TIFFMergeFieldInfo() with one or more TIFFFieldInfos.
<p>
-The libgeotiff library provides geospatial information extentions within
+The libgeotiff library provides geospatial information extensions within
a TIFF file. First, a set of TIFFFieldInfo's is prepared with information
on the new tags:<p>
diff --git a/tiff/html/bugs.html b/tiff/html/bugs.html
index 07fc78b8..bc27955e 100644
--- a/tiff/html/bugs.html
+++ b/tiff/html/bugs.html
@@ -14,19 +14,20 @@ This software is free. Please let us know when you find a problem or
fix a bug.
<P>
-Thanks to <A HREF=http://www.maptools.org/>MapTools.org</a>, libtiff now uses
-bugzilla to track bugs. All bugs filed in the older bugzilla at
+The project is using <a href="https://gitlab.com/libtiff/libtiff/issues">
+GitLab issues</a> since October 2019.
+Previously, the project used MapTools.org
+bugzilla to track bugs: remaining tickets in that bugzilla instance have been
+migrated to GitLab issues. All bugs filed in a older bugzilla at
bugzilla.remotesensing.org (pre April 2008) have unfortunately been lost.
<P>
If you think you've discovered a bug, please first check to see if it is
-already known by looking at the list of already reported bugs. You can do so
-by visiting the buglist at
-<A HREF=http://bugzilla.maptools.org/buglist.cgi?product=libtiff>http://bugzilla.maptools.org/buglist.cgi?product=libtiff</A>. Also verify that
-the problem is still reproducable with the current development software
+already known by looking at the list of already reported bugs. Also verify that
+the problem is still reproducible with the current development software
from CVS.
<P>
If you'd like to enter a new bug, you can do so at
-<A HREF=http://bugzilla.maptools.org/enter_bug.cgi?product=libtiff>http://bugzilla.maptools.org/enter_bug.cgi?product=libtiff</A>.
+<A HREF=https://gitlab.com/libtiff/libtiff/issues/new>https://gitlab.com/libtiff/libtiff/issues/new</A>.
<P>
If you'd like to inform us about some kind of security issue that should not
be disclosed for a period of time, then you can contact maintainers directly.
@@ -37,12 +38,12 @@ Bob Friesenhahn
<P>
Of course, reporting bugs is no substitute for discussion. The
-<a href="mailto:tiff@lists.maptools.org">tiff@lists.maptools.org</a> mailing
+<a href="mailto:tiff@lists.osgeo.org">tiff@lists.osgeo.org</a> mailing
list is for users of this software, and discussion TIFF issues in general.
It is managed with the Mailman software, and the web interface for subscribing
and managing your access to the list is at:<p>
- <a href="http://lists.maptools.org/mailman/listinfo/tiff">http://lists.maptools.org/mailman/listinfo/tiff</a><P>
+ <a href="http://lists.osgeo.org/mailman/listinfo/tiff">http://lists.osgeo.org/mailman/listinfo/tiff</a><P>
Posts to the list are only accepted from members of the list in order
to limit the amount of spam propagated.<p>
@@ -56,6 +57,6 @@ Systems</a>. <p>
<HR>
-Last updated: $Date: 2016-04-08 02:34:03 $
+Last updated: 2019-10-01
</BODY>
</HTML>
diff --git a/tiff/html/build.html b/tiff/html/build.html
index f52b0966..77fbc40b 100644
--- a/tiff/html/build.html
+++ b/tiff/html/build.html
@@ -689,7 +689,7 @@ libtiff/uvcode.h LogL/LogLuv codec-specific definitions
libtiff/version.h version string (generated by Makefile)
libtiff/tif_apple.c Apple-related OS support
libtiff/tif_atari.c Atari-related OS support
-libtiff/tif_aux.c auxilary directory-related functions
+libtiff/tif_aux.c auxiliary directory-related functions
libtiff/tif_close.c close an open TIFF file
libtiff/tif_codec.c configuration table of builtin codecs
libtiff/tif_compress.c compression scheme support
diff --git a/tiff/html/document.html b/tiff/html/document.html
index 936635bc..71d04126 100644
--- a/tiff/html/document.html
+++ b/tiff/html/document.html
@@ -14,8 +14,8 @@ TIFF Documentation
<P>
A copy of the 6.0 specification is available from Adobe at
<A HREF="http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf">http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf</A>, or from the libtiff
-ftp site at <a href="ftp://download.osgeo.org/libtiff/doc/TIFF6.pdf">
-ftp://download.osgeo.org/libtiff/doc/TIFF6.pdf</A>.<p>
+ftp site at <a href="https://download.osgeo.org/libtiff/doc/TIFF6.pdf">
+https://download.osgeo.org/libtiff/doc/TIFF6.pdf</A>.<p>
<P>
Draft <a href="TIFFTechNote2.html">TIFF Technical Note #2</A> covers problems
diff --git a/tiff/html/images.html b/tiff/html/images.html
index b2c5664c..6e2e29be 100644
--- a/tiff/html/images.html
+++ b/tiff/html/images.html
@@ -22,8 +22,8 @@ the same directory as this software.
<P>
The latest archive of test images is located at
-<A HREF="ftp://download.osgeo.org/libtiff/pics-3.8.0.tar.gz">
-ftp://download.osgeo.org/libtiff/pics-3.8.0.tar.gz</A>
+<A HREF="https://download.osgeo.org/libtiff/pics-3.8.0.tar.gz">
+https://download.osgeo.org/libtiff/pics-3.8.0.tar.gz</A>
<P>
There are two other good sources for TIFF test images:
diff --git a/tiff/html/images/Makefile.in b/tiff/html/images/Makefile.in
index 80b74bfe..234a29a5 100644
--- a/tiff/html/images/Makefile.in
+++ b/tiff/html/images/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -123,7 +123,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \
$(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -177,8 +177,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(docdir)"
DATA = $(dist_doc_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs
+am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -370,8 +369,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -416,7 +415,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/html/index.html b/tiff/html/index.html
index 1c5a3ec3..dca511e7 100644
--- a/tiff/html/index.html
+++ b/tiff/html/index.html
@@ -20,33 +20,31 @@
</tr>
<tr>
<th>Home Page #2</th>
+ <td><a href="https://libtiff.gitlab.io/libtiff/" title="Mirror of the LibTIFF software">https://libtiff.gitlab.io/libtiff/</a></td>
+ </tr>
+ <tr>
+ <th>Home Page #3</th>
<td><a href="http://libtiff.maptools.org/" title="Mirror of the LibTIFF software">http://libtiff.maptools.org/</a></td>
</tr>
<tr>
<th>Latest Stable Release</th>
- <td><a href="v4.0.9.html">v4.0.9</a></td>
+ <td><a href="v4.1.0.html">v4.1.0</a></td>
</tr>
<tr>
<th>Master Download Site</th>
- <td><a href="ftp://download.osgeo.org/libtiff">download.osgeo.org</a>, directory libtiff</td>
+ <td><a href="https://download.osgeo.org/libtiff/">download.osgeo.org</a>, directory libtiff</td>
</tr>
<tr>
<th>Mailing List</th>
- <td><a href="mailto:tiff@lists.maptools.org">tiff@lists.maptools.org</a>,
- <a href="http://lists.maptools.org/mailman/listinfo/tiff/">Subscription</a>,
+ <td><a href="mailto:tiff@lists.osgeo.org">tiff@lists.osgeo.org</a>,
+ <a href="http://lists.osgeo.org/mailman/listinfo/tiff/">Subscription</a>,
<a href="http://www.awaresystems.be/imaging/tiff/tml.html">Archive</a>.
Please, read the <a href="http://www.awaresystems.be/imaging/tiff/faq.html">TIFF FAQ</a>
before asking questions.</td>
</tr>
<tr>
- <th>Anonymous CVS</th>
- <td><tt>export CVSROOT=:pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot<br>
- cvs login</tt><br>
- (use empty password)<br>
- <tt>cvs checkout libtiff<br></tt>
- to get the stable libtiff code or<br>
- <tt>cvs checkout -r branch-3-9 libtiff</tt><br>
- to get the previous stable branch supporting the 3.9.X release series.</td>
+ <th>git repository</th>
+ <td><tt><a href="https://gitlab.com/libtiff/libtiff">https://gitlab.com/libtiff/libtiff</a></td>
</tr>
</table>
<hr>
@@ -76,9 +74,9 @@
</p>
<p>
Questions should be sent to the TIFF mailing list:
- <a href="mailto:tiff@lists.maptools.org">tiff@lists.maptools.org</a>, with
+ <a href="mailto:tiff@lists.osgeo.org">tiff@lists.osgeo.org</a>, with
a subscription interface at
- <a href="http://lists.maptools.org/mailman/listinfo/tiff">http://lists.maptools.org/mailman/listinfo/tiff</a>.
+ <a href="http://lists.osgeo.org/mailman/listinfo/tiff">http://lists.osgeo.org/mailman/listinfo/tiff</a>.
</p>
<p>
The persons currently actively maintaining and releasing libtiff
@@ -102,7 +100,7 @@
<li><a href="contrib.html">Contributed software</a></li>
<li><a href="document.html">TIFF documentation</a></li>
<li><a href="build.html">Building the software distribution</a></li>
- <li><a href="bugs.html">Bugs, Bugzilla, and the TIFF mailing list</a></li>
+ <li><a href="bugs.html">Bugs, GitLab issues, and the TIFF mailing list</a></li>
<li><a href="images.html">Test images</a></li>
<li><a href="misc.html">Acknowledgements and copyright issues</a></li>
<li><a href="man/index.html">Man Pages</a></li>
@@ -116,7 +114,7 @@
</ul>
<hr>
<p>
- Last updated $Date: 2017-11-07 02:00:06 $.
+ Last updated 2019-11-03
</p>
</body>
</html>
diff --git a/tiff/html/libtiff.html b/tiff/html/libtiff.html
index b1de7a27..56535d97 100644
--- a/tiff/html/libtiff.html
+++ b/tiff/html/libtiff.html
@@ -45,8 +45,8 @@
to the capabilities of the library; it is not an attempt to describe
everything a developer needs to know about the library or about TIFF.
Detailed information on the interfaces to the library are given in
- the <a href="http://www.simplesystems.org/libtiff/man/index.html">UNIX
- manual pages</a> that accompany this software.
+ the <a href="man/index.html">UNIX manual pages</a> that accompany
+ this software.
</p>
<p>
Michael Still has also written a useful introduction to libtiff for the
@@ -97,7 +97,7 @@
information.
The library include file <tt>&lt;tiffio.h&gt;</tt> contains a C pre-processor
define <tt>TIFFLIB_VERSION</tt> that can be used to check library
- version compatiblity at compile time.
+ version compatibility at compile time.
</p>
<hr>
<h2 id="typedefs">Library Datatypes</h2>
diff --git a/tiff/html/man/Makefile.in b/tiff/html/man/Makefile.in
index eb99fd1b..c435bad5 100644
--- a/tiff/html/man/Makefile.in
+++ b/tiff/html/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -123,7 +123,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \
$(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -177,8 +177,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(docdir)"
DATA = $(dist_doc_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/config/mkinstalldirs
+am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -426,8 +425,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -472,7 +471,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/html/man/TIFFReadDirectory.3tiff.html b/tiff/html/man/TIFFReadDirectory.3tiff.html
index 1e32f7cd..5e4004db 100644
--- a/tiff/html/man/TIFFReadDirectory.3tiff.html
+++ b/tiff/html/man/TIFFReadDirectory.3tiff.html
@@ -151,23 +151,23 @@ specification. This error is not fatal.</big></p>
unknown tag was encountered in the directory; the library
ignores all such tags.</big></p>
<!-- INDENTATION -->
-<p><big><b>TIFF directory is missing requred
+<p><big><b>TIFF directory is missing required
&quot;ImageLength&quot; field</b>. The image violates the
specification by not having a necessary field. There is no
way for the library to recover from this error.</big></p>
<!-- INDENTATION -->
-<p><big><b>TIFF directory is missing requred
+<p><big><b>TIFF directory is missing required
&quot;PlanarConfig&quot; field</b>. The image violates the
specification by not having a necessary field. There is no
way for the library to recover from this error.</big></p>
<!-- INDENTATION -->
-<p><big><b>TIFF directory is missing requred
+<p><big><b>TIFF directory is missing required
&quot;StripOffsets&quot; field</b>. The image has multiple
strips, but is missing the tag that specifies the file
offset to each strip of data. There is no way for the
library to recover from this error.</big></p>
<!-- INDENTATION -->
-<p><big><b>TIFF directory is missing requred
+<p><big><b>TIFF directory is missing required
&quot;TileOffsets&quot; field</b>. The image has multiple
tiles, but is missing the tag that specifies the file offset
to each tile of data. There is no way for the library to
diff --git a/tiff/html/man/TIFFWriteDirectory.3tiff.html b/tiff/html/man/TIFFWriteDirectory.3tiff.html
index 9aff8c4c..6483aa6a 100644
--- a/tiff/html/man/TIFFWriteDirectory.3tiff.html
+++ b/tiff/html/man/TIFFWriteDirectory.3tiff.html
@@ -69,7 +69,7 @@ have an established location in the file. It will rewrite
the directory, but instead of place it at it&rsquo;s old
location (as <i>TIFFWriteDirectory</i> would) it will place
them at the end of the file, correcting the pointer from the
-preceeding directory or file header to point to it&rsquo;s
+preceding directory or file header to point to it&rsquo;s
new location. This is particularly important in cases where
the size of the directory and pointed to data has grown, so
it won&rsquo;t fit in the space available at the old
diff --git a/tiff/html/man/TIFFmemory.3tiff.html b/tiff/html/man/TIFFmemory.3tiff.html
index 39fa7894..283be9bd 100644
--- a/tiff/html/man/TIFFmemory.3tiff.html
+++ b/tiff/html/man/TIFFmemory.3tiff.html
@@ -76,7 +76,7 @@ another memory location using <i>_TIFFmemcpy</i>, or
compared for equality using <i>_TIFFmemcmp</i>. These
routines conform to the equivalent <small>ANSI</small> C
routines: <i>memset</i>, <i>memcpy</i>, and <i>memcmp</i>,
-repsectively.</p>
+respectively.</p>
</td>
</table>
<a name="DIAGNOSTICS"></a>
diff --git a/tiff/html/v3.4beta007.html b/tiff/html/v3.4beta007.html
index 10a2946d..10307205 100644
--- a/tiff/html/v3.4beta007.html
+++ b/tiff/html/v3.4beta007.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta007
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta007<BR>
<B>Previous Version</B>: v3.4beta004<BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta016.html b/tiff/html/v3.4beta016.html
index 133a4697..170f3384 100644
--- a/tiff/html/v3.4beta016.html
+++ b/tiff/html/v3.4beta016.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta016
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta016<BR>
<B>Previous Version</B>: <A HREF=v3.4beta007.html>v3.4beta007</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta018.html b/tiff/html/v3.4beta018.html
index 1256c8a9..4843c95d 100644
--- a/tiff/html/v3.4beta018.html
+++ b/tiff/html/v3.4beta018.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta018
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta018<BR>
<B>Previous Version</B>: <A HREF=v3.4beta016.html>v3.4beta016</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta024.html b/tiff/html/v3.4beta024.html
index 09da9262..ee2b243b 100644
--- a/tiff/html/v3.4beta024.html
+++ b/tiff/html/v3.4beta024.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta024
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta024<BR>
<B>Previous Version</B>: <A HREF=v3.4beta018.html>v3.4beta018</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta028.html b/tiff/html/v3.4beta028.html
index 827229ef..5ac9d75f 100644
--- a/tiff/html/v3.4beta028.html
+++ b/tiff/html/v3.4beta028.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta028
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta028<BR>
<B>Previous Version</B>: <A HREF=v3.4beta024.html>v3.4beta024</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta029.html b/tiff/html/v3.4beta029.html
index 442a2f39..f7e863d0 100644
--- a/tiff/html/v3.4beta029.html
+++ b/tiff/html/v3.4beta029.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta029
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta029<BR>
<B>Previous Version</B>: <A HREF=v3.4beta028.html>v3.4beta028</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta031.html b/tiff/html/v3.4beta031.html
index 5f350c78..137368da 100644
--- a/tiff/html/v3.4beta031.html
+++ b/tiff/html/v3.4beta031.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta031
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta031<BR>
<B>Previous Version</B>: <A HREF=v3.4beta029.html>v3.4beta029</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta032.html b/tiff/html/v3.4beta032.html
index 87d18cd8..4651539e 100644
--- a/tiff/html/v3.4beta032.html
+++ b/tiff/html/v3.4beta032.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta032
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta032<BR>
<B>Previous Version</B>: <A HREF=v3.4beta031.html>v3.4beta031</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta033.html b/tiff/html/v3.4beta033.html
index a6a6bbe2..f311e6a3 100644
--- a/tiff/html/v3.4beta033.html
+++ b/tiff/html/v3.4beta033.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta033
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta033 (aka the v3.4 release)<BR>
<B>Previous Version</B>: <A HREF=v3.4beta032.html>v3.4beta032</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta034.html b/tiff/html/v3.4beta034.html
index c7ac9bd9..a2735de2 100644
--- a/tiff/html/v3.4beta034.html
+++ b/tiff/html/v3.4beta034.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta034
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta034<BR>
<B>Previous Version</B>: <A HREF=v3.4beta033.html>v3.4beta033</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta035.html b/tiff/html/v3.4beta035.html
index 72c00907..5b0901d3 100644
--- a/tiff/html/v3.4beta035.html
+++ b/tiff/html/v3.4beta035.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta035
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta035<BR>
<B>Previous Version</B>: <A HREF=v3.4beta034.html>v3.4beta034</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.4beta036.html b/tiff/html/v3.4beta036.html
index 7a2fa8b3..a853113d 100644
--- a/tiff/html/v3.4beta036.html
+++ b/tiff/html/v3.4beta036.html
@@ -16,7 +16,7 @@ Changes in TIFF v3.4beta036
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.4beta036<BR>
<B>Previous Version</B>: <A HREF=v3.4beta035.html>v3.4beta035</A><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.5.1.html b/tiff/html/v3.5.1.html
index 365700ce..e3ee7077 100644
--- a/tiff/html/v3.5.1.html
+++ b/tiff/html/v3.5.1.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.1
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.1<BR>
<B>Previous Version</B>: v3.4beta037<BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com, directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com, directory graphics/tiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//>http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.5.2.html b/tiff/html/v3.5.2.html
index 48ad398e..daad4c55 100644
--- a/tiff/html/v3.5.2.html
+++ b/tiff/html/v3.5.2.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.2
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.2<BR>
<B>Previous Version</B>: <A HREF=v3.5.1.html>v3.5.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com, directory graphics/tiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com, directory graphics/tiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.5.3.html b/tiff/html/v3.5.3.html
index 78f46983..9ea78562 100644
--- a/tiff/html/v3.5.3.html
+++ b/tiff/html/v3.5.3.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.3
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.3<BR>
<B>Previous Version</B>: <A HREF=v3.5.2.html>v3.5.2</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
@@ -49,7 +49,7 @@ From <A HREF=http://burnallgifs.org>Burn All GIF's Day</a>:
Unisys license to use LZW in free software that complies with the Open
Source Definition</em>
<P>
-Unfortunatly, the removal of LZW compression means that saved image size has
+Unfortunately, the removal of LZW compression means that saved image size has
grown dramatically. Without a change in the TIFF spec to support
another lossless compression format, this is unavoidable.
<P>
diff --git a/tiff/html/v3.5.4.html b/tiff/html/v3.5.4.html
index 1d988bf6..7e3eb841 100644
--- a/tiff/html/v3.5.4.html
+++ b/tiff/html/v3.5.4.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.4
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.4<BR>
<B>Previous Version</B>: <A HREF=v3.5.3.html>v3.5.3</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.5.5.html b/tiff/html/v3.5.5.html
index 0b67f5cd..779e3772 100644
--- a/tiff/html/v3.5.5.html
+++ b/tiff/html/v3.5.5.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.5
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.5<BR>
<B>Previous Version</B>: <A HREF=v3.5.4.html>v3.5.4</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v3.5.6-beta.html b/tiff/html/v3.5.6-beta.html
index b552c371..498cc439 100644
--- a/tiff/html/v3.5.6-beta.html
+++ b/tiff/html/v3.5.6-beta.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.6
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.6beta<BR>
<B>Previous Version</B>: <A HREF=v3.5.5.html>v3.5.5</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
+<B>Master Download Site</B>: <A HREF="ftp://ftp.onshore.com/pub/libtiff">ftp.onshore.com</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
@@ -112,7 +112,7 @@ The following information is located here:
<LI> Modified tiffio.h logic with regard to including windows.h. It
won't include it when building with __CYGWIN__.
- <LI> README: update to mention www.libtiff.org, don't list Sam's old
+ <LI> README: update to mention {REDACTED - defunct web site}, don't list Sam's old
email address.
<LI> libtiff/tif_dirread.c: Don't use estimate strip byte count for
diff --git a/tiff/html/v3.5.7.html b/tiff/html/v3.5.7.html
index 96f47916..b68e29ee 100644
--- a/tiff/html/v3.5.7.html
+++ b/tiff/html/v3.5.7.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.5.7
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.5.7<BR>
<B>Previous Version</B>: <A HREF=v3.5.6-beta.html>v3.5.6 Beta</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">download.osgeo.org</a>, directory pub/libtiff</A><BR>
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff//">http://www.simplesystems.org/libtiff/</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
@@ -200,7 +200,7 @@ that corrects behaviour for non-Letter paper
sizes. (Bug 35) It fixes two problems:
<br>
Without scaling (-S) the fax is now centered on the page size specified
- with -H and/or -W. Before, fax2ps was using an obscure and practially
+ with -H and/or -W. Before, fax2ps was using an obscure and practically
useless algorithm to allocate the image relative to Letter sized paper
which sometime sled to useless whitespace on the paper, while at the
same time cutting of the faxes printable area at the opposite border.
diff --git a/tiff/html/v3.6.0.html b/tiff/html/v3.6.0.html
index c53cd155..11b10af0 100644
--- a/tiff/html/v3.6.0.html
+++ b/tiff/html/v3.6.0.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.6.0
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.6.0<BR>
<B>Previous Version</B>: <A HREF=v3.5.7.html>v3.5.7</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
@@ -64,12 +64,12 @@ TIFFDirectory structure would changing, breaking any dynamically linked
software that used the private data structures.<p>
Also, any tag not recognised
-by libtiff would not be read and accessable to applications without some
+by libtiff would not be read and accessible to applications without some
fairly complicated work on the applications part to pre-register the tags
as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on
libtiff. <p>
-Amoung other things this approach required the extension code
+Among other things this approach required the extension code
to access the private libtiff structures ... which made the higher level
non-libtiff code be locked into a specific version of libtiff at compile time.
This caused no end of bug reports!<p>
diff --git a/tiff/html/v3.6.1.html b/tiff/html/v3.6.1.html
index 3d6d838d..3f0e93c3 100644
--- a/tiff/html/v3.6.1.html
+++ b/tiff/html/v3.6.1.html
@@ -17,7 +17,7 @@ Changes in TIFF v3.6.1
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.6.1<BR>
<B>Previous Version</B>: <A HREF=v3.6.0.html>v3.6.0</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
@@ -116,7 +116,7 @@ Patch supplied by Ross Finlayson.
it was done in 3.6.0).
<li> libtiff/{tiff.h, tif_dirinfo.c}: Added support for IFD (13) datatype,
-intruduced in "Adobe PageMaker TIFF Technical Notes".
+introduced in "Adobe PageMaker TIFF Technical Notes".
<li> libtiff/{tif_color.c, tif_getimage.c, tiffio.h}: New color space
conversion code: CIE L*a*b* 1976 images now supported by the TIFFRGBAImage
diff --git a/tiff/html/v3.7.0.html b/tiff/html/v3.7.0.html
index 777782fa..c70e8e72 100644
--- a/tiff/html/v3.7.0.html
+++ b/tiff/html/v3.7.0.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.0<BR>
<B>Previous Version</B>: <A HREF=v3.7.0beta2.html>v3.7.0beta2</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.7.0alpha.html b/tiff/html/v3.7.0alpha.html
index 5f1aed9c..5ce60069 100644
--- a/tiff/html/v3.7.0alpha.html
+++ b/tiff/html/v3.7.0alpha.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.0alpha<BR>
<B>Previous Version</B>: <A HREF=v3.6.1.html>v3.6.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.7.0beta.html b/tiff/html/v3.7.0beta.html
index 6ec852bc..a29e521f 100644
--- a/tiff/html/v3.7.0beta.html
+++ b/tiff/html/v3.7.0beta.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.0beta<BR>
<B>Previous Version</B>: <A HREF=v3.7.0alpha.html>v3.7.0alpha</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.7.0beta2.html b/tiff/html/v3.7.0beta2.html
index 4c430177..9a313aca 100644
--- a/tiff/html/v3.7.0beta2.html
+++ b/tiff/html/v3.7.0beta2.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.0beta2<BR>
<B>Previous Version</B>: <A HREF=v3.7.0beta.html>v3.7.0beta</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.7.1.html b/tiff/html/v3.7.1.html
index 6794a8d5..3e332b14 100644
--- a/tiff/html/v3.7.1.html
+++ b/tiff/html/v3.7.1.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.1<BR>
<B>Previous Version</B>: <A HREF=v3.7.0.html>v3.7.0</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.7.2.html b/tiff/html/v3.7.2.html
index 45347b72..2be1edef 100644
--- a/tiff/html/v3.7.2.html
+++ b/tiff/html/v3.7.2.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.2<BR>
<B>Previous Version</B>: <A HREF=v3.7.1.html>v3.7.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
@@ -46,7 +46,7 @@ The following information is located here:
<UL>
- <li> Maintainance release. Many bugfixes in the build environment
+ <li> Maintenance release. Many bugfixes in the build environment
and compatibility improvements.
</UL>
diff --git a/tiff/html/v3.7.3.html b/tiff/html/v3.7.3.html
index 28981aef..c3aafff4 100644
--- a/tiff/html/v3.7.3.html
+++ b/tiff/html/v3.7.3.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.3<BR>
<B>Previous Version</B>: <A HREF=v3.7.2.html>v3.7.2</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
@@ -45,7 +45,7 @@ The following information is located here:
<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A>
<UL>
- <li> Replace runtime endianess check with the compile time one.
+ <li> Replace runtime endianness check with the compile time one.
<li> Added support for the new predictor type (floating point
predictor), defined at the TIFF Technical Note 3.
diff --git a/tiff/html/v3.7.4.html b/tiff/html/v3.7.4.html
index 8b4e5dd8..465af218 100644
--- a/tiff/html/v3.7.4.html
+++ b/tiff/html/v3.7.4.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.7.4<BR>
<B>Previous Version</B>: <A HREF=v3.7.3.html>v3.7.3</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.8.0.html b/tiff/html/v3.8.0.html
index 05a96c72..8ac23f38 100644
--- a/tiff/html/v3.8.0.html
+++ b/tiff/html/v3.8.0.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.8.0<BR>
<B>Previous Version</B>: <A HREF=v3.7.4.html>v3.7.4</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.8.1.html b/tiff/html/v3.8.1.html
index c4710f1d..6b069e32 100644
--- a/tiff/html/v3.8.1.html
+++ b/tiff/html/v3.8.1.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.8.1<BR>
<B>Previous Version</B>: <A HREF=v3.8.0.html>v3.8.0</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.8.2.html b/tiff/html/v3.8.2.html
index 8d64ef73..10fa57d2 100644
--- a/tiff/html/v3.8.2.html
+++ b/tiff/html/v3.8.2.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.8.2<BR>
<B>Previous Version</B>: <A HREF=v3.8.1.html>v3.8.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.9.0beta.html b/tiff/html/v3.9.0beta.html
index 52def61b..e973ca8b 100644
--- a/tiff/html/v3.9.0beta.html
+++ b/tiff/html/v3.9.0beta.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.9.0beta<BR>
<B>Previous Version</B>: <A HREF=v3.8.2.html>v3.8.2</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.9.1.html b/tiff/html/v3.9.1.html
index 0cffd21c..fc6bca19 100644
--- a/tiff/html/v3.9.1.html
+++ b/tiff/html/v3.9.1.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.9.1<BR>
<B>Previous Version</B>: <A HREF=v3.9.1.html>v3.9.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v3.9.2.html b/tiff/html/v3.9.2.html
index 83f2cc9f..34a117a4 100644
--- a/tiff/html/v3.9.2.html
+++ b/tiff/html/v3.9.2.html
@@ -17,7 +17,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v3.9.2<BR>
<B>Previous Version</B>: <A HREF=v3.9.1.html>v3.9.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.0.html b/tiff/html/v4.0.0.html
index d869c17c..f64208ac 100644
--- a/tiff/html/v4.0.0.html
+++ b/tiff/html/v4.0.0.html
@@ -17,10 +17,10 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.0<BR>
<B>Previous Version</B>: <A HREF=v3.9.5.html>v3.9.5</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
-<B>Master HTTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
-ftp://download.osgeo.org/libtiff</a>
+<B>Master HTTP Site</B>: <A HREF="https://download.osgeo.org/libtiff">
+https://download.osgeo.org/libtiff</a>
<HR SIZE=4 WIDTH=65% ALIGN=left>
</UL>
diff --git a/tiff/html/v4.0.1.html b/tiff/html/v4.0.1.html
index d75cd240..b4a8bc2f 100644
--- a/tiff/html/v4.0.1.html
+++ b/tiff/html/v4.0.1.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.1<BR>
<B>Previous Version</B>: <A HREF=v4.0.0.html>v4.0.0</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.10.html b/tiff/html/v4.0.10.html
new file mode 100644
index 00000000..b7d87361
--- /dev/null
+++ b/tiff/html/v4.0.10.html
@@ -0,0 +1,326 @@
+<HTML>
+<HEAD>
+<TITLE>
+ Changes in TIFF v4.0.10
+</TITLE>
+<STYLE>
+table, th, td {
+ border: 1px solid black;
+ border-collapse: collapse;
+}
+th, td {
+ padding: 8pt;
+ text-align: center;
+}
+th {
+ text-align: center;
+}
+td {
+ text-align: center;
+}
+
+ul li {
+ padding: 3pt;
+}
+
+ul.a {
+ list-style-type: circle;
+}
+
+ul.b {
+ list-style-type: square;
+}
+
+ol.c {
+ list-style-type: upper-roman;
+}
+
+ol.d {
+ list-style-type: lower-alpha;
+}
+
+</STYLE>
+</HEAD>
+
+<BODY BGCOLOR=white>
+<FONT FACE="Helvetica, Arial, Sans">
+
+<BASEFONT SIZE=4>
+<B><FONT SIZE=+3>T</FONT>IFF <FONT SIZE=+2>C</FONT>HANGE <FONT SIZE=+2>I</FONT>NFORMATION</B>
+<BASEFONT SIZE=3>
+
+<UL>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+<B>Current Version</B>: v4.0.10<BR>
+<B>Previous Version</B>: <A HREF=v4.0.9.html>v4.0.9</a><BR>
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
+download.osgeo.org</a>, directory pub/libtiff</A><BR>
+<B>Master HTTP Site #1</B>: <A HREF="http://www.simplesystems.org/libtiff/">
+http://www.simplesystems.org/libtiff/</a><BR>
+<B>Master HTTP Site #2</B>: <A HREF="http://libtiff.maptools.org/">
+http://libtiff.maptools.org/</a>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+</UL>
+
+<P>
+This document describes the changes made to the software between the
+<I>previous</I> and <I>current</I> versions (see above). If you don't
+find something listed here, then it was not done in this timeframe, or
+it was not considered important enough to be mentioned. The following
+information is located here:
+<UL>
+<LI><A HREF="#highlights">Major Changes</A>
+<LI><A HREF="#configure">Changes in the software configuration</A>
+<LI><A HREF="#libtiff">Changes in libtiff</A>
+<LI><A HREF="#tools">Changes in the tools</A>
+<LI><A HREF="#contrib">Changes in the contrib area</A>
+</UL>
+<p>
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A>
+
+<UL>
+
+ <LI> The libtiff source repository is changed from CVS to Git and the master libtiff source repository is now at <A HREF="https://gitlab.com/libtiff/libtiff">Gitlab</A>. This is the first release to be made from the new Git repository.</LI>
+
+</UL>
+
+
+<P><HR WIDTH=65% ALIGN=left>
+<!--------------------------------------------------------------------------->
+
+<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A>
+
+<UL>
+
+ <LI>Minimum CMake version is now v2.8.11 for the CMake-based build.</LI>
+
+ <LI>Libwebp will be automatically detected and used by configure/cmake if present.
+
+ <LI>Libzstd will be automatically detected and used by configure/cmake if present.
+
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
+
+<UL>
+
+ <LI>
+ <P>Added ZSTD compression codec.
+ <A HREF="https://github.com/facebook/zstd">Zstandard<A> or zstd as
+ short version, is a fast lossless compression algorithm, targeting
+ real-time compression scenarios at zlib-level and better
+ compression ratios. It's backed by a very fast entropy stage,
+ provided by Huff0 and FSE library.</P>
+
+ <P>We require libzstd >= 1.0.0 so as to be able to use streaming
+ compression and decompression methods.</P>
+
+ <P>The default compression level we have selected is 9 (range goes
+ from 1 to 22), which experimentally offers equivalent or better
+ compression ratio than the default deflate/ZIP level of 6, and
+ much faster compression.</P>
+
+ <P>For example on a 6600x4400 16bit image, tiffcp -c zip runs in
+ 10.7 seconds, while tiffcp -c zstd runs in 5.3
+ seconds. Decompression time for zip is 840 ms, and for zstd 650
+ ms. File size is 42735936 for zip, and 42586822 for zstd. Similar
+ findings on other images.</P>
+
+ <P>On a 25894x16701 16bit image,</P>
+
+ <TABLE>
+ <TR><TH>Compressor</TH> <TH>Compression time</TH> <TH>Decompression time</TH> <TH>File size</TH></TR>
+
+ <TR><TD>ZSTD</TD> <TD>35 s</TD> <TD>3.2 s</TD> <TD>399 700 498</TD></TR>
+ <TR><TD>ZIP/Deflate</TD> <TD>1m 20 s</TD> <TD>4.9 s </TD> <TD>419 622 336</TD></TR>
+ </TABLE>
+
+ <P>Please note that COMPRESSION_ZSTD is self-assigned the id 50000
+ by the libtiff project and is not officially registered with Adobe
+ since Adobe's registration function is defunct.</P>
+ </LI>
+
+ <LI><P>Added WebP compression codec.
+
+ <A HREF="https://developers.google.com/speed/webp/">WebP</A> is
+ a high performance compressor intended for photos as commonly used
+ on the Web. The WebP encoder is not designed for huge images, but
+ serves very well for compressing strips and tiles in TIFF as long
+ as the strips or tiles do not exceed the capability of the
+ encoder.</P>
+
+ <P>As a test of compression performance metrics, GraphicsMagick
+ was used on an extremely high quality 8-bit TIFF image from a
+ Hasselblad H4D-200MS camera with pixel dimensions of
+ 16352x12264. The image was re-encoded with 1024x1024 tiles and
+ various compression algorithms, using default settings for each
+ algorithm. Based on this test, the compression and decompression
+ performance (in iterations per second), the resulting file size,
+ and the calculated total PSNR are provided here. It can be seen
+ that WebP provided excellent encode and decode performance, and
+ the compressed file size was very small:</P>
+
+ <TABLE>
+ <caption>Compressor Relative Performance</caption>
+ <TR><TH>Compressor</TH> <TH>Compression</TH> <TH>Decompression</TH> <TH>File size</TH> <TH>PSNR</TH></TR>
+
+
+ <TR><TD>None</TD> <TD>0.536 iter/s</TD> <TD>1.506 iter/s</TD> <TD>576.03MiB</TD> <TD>Inf</TD></TR>
+ <TR><TD>LZW</TD> <TD>0.105 iter/s</TD> <TD>0.266 iter/s</TD> <TD>270.68MiB</TD> <TD>Inf</TD></TR>
+ <TR><TD>ZStd</TD> <TD>0.020 iter/s</TD> <TD>0.518 iter/s</TD> <TD>238.42MiB</TD> <TD>Inf</TD></TR>
+ <TR><TD>LZMA</TD> <TD>0.009 iter/s</TD> <TD>0.056 iter/s</TD> <TD>247.61MiB</TD> <TD>Inf</TD></TR>
+ <TR><TD>ZIP</TD> <TD>0.009 iter/s</TD> <TD>0.301 iter/s</TD> <TD>247.88MiB</TD> <TD>Inf</TD></TR>
+ <TR><TD>JPEG</TD> <TD>0.446 iter/s</TD> <TD>0.760 iter/s</TD> <TD>18.59MiB</TD> <TD>39.00</TD></TR>
+ <TR><TD>WebP</TD> <TD>0.019 iter/s</TD> <TD>0.330 iter/s</TD> <TD>9.38MiB</TD> <TD>37.78</TD></TR>
+
+ </TABLE>
+
+ <P>Please note that COMPRESSION_WEBP is self-assigned the id 50001
+ by the libtiff project and is not officially registered with Adobe
+ since Adobe's registration function is defunct.</P>
+
+ </LI>
+
+ <LI>TIFFPrintDirectory(): fix null pointer dereference on corrupted
+ file. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2770">Bug
+ 2770 - NULL Pointer Dereference in tiffinfo.c with crafted TIFF
+ image</A>.</LI>
+
+ <LI>_TIFFVGetField(): fix heap out-of-bounds access when requesting
+ TIFFTAG_NUMBEROFINKS on a EXIF
+ directory. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2765">Bug
+ 2765 - Heap Out-Of-Bounds Memory Access - 68122422</A>. Reported by
+ Google Autofuzz project</LI>
+
+ <LI>Fix a memory leak in TIFFStreamOpen. TIFFStreamOpen allocates a
+ new tiff{o,i}s_data, but if TIFFClientOpen fails then that struct is
+ leaked.</LI>
+
+ <LI><P>Fix for bug 2772. It is possible to craft a TIFF document where
+ the IFD list is circular, leading to an infinite loop while
+ traversing the chain. The libtiff directory reader has a failsafe
+ that will break out of this loop after reading 65535 directory
+ entries, but it will continue processing, consuming time and
+ resources to process what is essentially a bogus TIFFdocument.</P>
+
+ <P>This change fixes the above behavior by breaking out of processing
+ when a TIFF document has >= 65535 directories and terminating with an
+ error.</P></LI>
+
+ <LI>ChopUpSingleUncompressedStrip: avoid memory exhaustion
+ (CVE-2017-11613). In ChopUpSingleUncompressedStrip(), if the
+ computed number of strips is big enough and we are in read only
+ mode, validate that the file size is consistent with that number of
+ strips to avoid useless attempts at allocating a lot of memory for
+ the td_stripbytecount and td_stripoffset
+ arrays. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2724">Bug
+ 2724 - memory exhaustion in ChopUpSingleUncompressedStrip</A></LI>
+
+ <LI>Port code: Add strtol, strtoll and strtoull. Also update
+ strtoul. All use the same implementation from NetBSD libc.</LI>
+
+ <LI>Fix for CVE-2018-7456 "NULL pointer dereference in
+ TIFFPrintDirectory".</LI>
+
+ <LI>TIFFWriteDirectorySec: avoid
+ assertion. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2795">Bug
+ 2795 - There is a reachable assertion abort in function
+ TIFFWriteDirectorySec() of libtiff 4.0.9. A crafted input will lead
+ to remote denial of attack. (CVE-2018-10963)</A>.</LI>
+
+ <LI>LZWDecodeCompat(): fix potential index-out-of-bounds
+ write. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2780">Bug
+ 2780 - A heap-buffer-overflow in function LZWDecodeCompat in
+ libtiff4.0.9 (CVE-2018-8905)</A>. The fix consists in using the
+ similar code as LZWDecode() to validate we don't write outside of
+ the output buffer.</LI>
+
+ <LI><P>Remove builtin support for GUI warning and error message
+ boxes. Now warnings always go to the console by default unless
+ applications define their own warning and error handlers.</P>
+
+ <P>GUI applications (and Windows CE) are required to define such handlers.</P></LI>
+
+ <LI>Add tag and pseudo-tag definitions for ESRI LERC codec (out of
+ tree codec whose source is
+ at <A HREF="https://github.com/OSGeo/gdal/blob/master/gdal/frmts/gtiff/tif_lerc.c">
+ https://github.com/OSGeo/gdal/blob/master/gdal/frmts/gtiff/tif_lerc.c</A>).</LI>
+
+ <LI>Fix libtiff 4.0.8 regression when reading LZW-compressed strips with scanline API
+ Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2800">
+ Bug 2800 - Regression: Opening a tiff file with v4.0.9 gives an error with LZWDecode</A>.</LI>
+
+ <LI>TIFFSetupStrips(): avoid potential uint32 overflow on 32-bit
+ systems with large number of strips. Probably relates
+ to <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2788">Bug
+ 2788 - Heap Buffer Overflow in TIFFWriteScanline of tif_write.c
+ (CVE-2018-10779)</A></LI>
+
+ <LI>Fix out-of-bound read on some tiled images.</LI>
+
+ <LI>Avoid potential int32 overflows in multiply_ms().</LI>
+
+ <LI>Only read/write TIFFTAG_GROUP3OPTIONS or TIFFTAG_GROUP4OPTIONS
+ if compression is COMPRESSION_CCITTFAX3 or
+ COMPRESSION_CCITTFAX4.</LI>
+
+ <LI>JBIG: fix potential out-of-bounds write in JBIGDecode(). Also
+ fix a (harmless) potential use of uninitialized memory when
+ tif->tif_rawsize > tif->tif_rawcc. In case libtiff is compiled with
+ CHUNKY_STRIP_READ_SUPPORT, make sure that whole strip data is
+ provided to JBIGDecode().</LI>
+
+ <LI>LZMAPreEncode: emit verbose error if lzma_stream_encoder() fails
+ (typically because not enough memory available)</LI>
+
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!-------------------------------------------------------------------------->
+
+<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
+
+<UL>
+
+ <LI>tiff2pdf: Fix
+ CVE-2017-9935, <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2704">Bug
+ 2704 - There is a heap based buffer overflow in the tiff2pdf tool of
+ the libtiff library. A crafted TIFF document can lead to a heap
+ based buffer overflow resulting in multiple damages.</A>.</LI>
+
+ <LI>pal2rgb: Add workaround to pal2rgb buffer overflow.</LI>
+
+ <LI>tiffset: Add support for LONG8, SLONG8 and IFD8 field types</LI>
+
+ <LI>tiff2bw: avoid null pointer dereference in case of out of memory
+ situation. Fixes <A HREF="http://bugzilla.maptools.org/show_bug.cgi?id=2819">Bug
+ 2819 - There is a NULL pointer dereference at function LZWDecode in
+ libtiff 4.0.9 (CVE-2018-18661)</A></LI>
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A>
+
+<UL>
+
+ <LI> None</LI>
+
+</UL>
+
+</BODY>
+</HTML>
diff --git a/tiff/html/v4.0.2.html b/tiff/html/v4.0.2.html
index 8dade5f3..91f20dde 100644
--- a/tiff/html/v4.0.2.html
+++ b/tiff/html/v4.0.2.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.2<BR>
<B>Previous Version</B>: <A HREF=v4.0.1.html>v4.0.1</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.3.html b/tiff/html/v4.0.3.html
index 1e9e7925..14ccfb39 100644
--- a/tiff/html/v4.0.3.html
+++ b/tiff/html/v4.0.3.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.3<BR>
<B>Previous Version</B>: <A HREF=v4.0.2.html>v4.0.2</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.4.html b/tiff/html/v4.0.4.html
index 6ddf2a1e..a5691140 100644
--- a/tiff/html/v4.0.4.html
+++ b/tiff/html/v4.0.4.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.4<BR>
<B>Previous Version</B>: <A HREF=v4.0.4beta.html>v4.0.4beta</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.4beta.html b/tiff/html/v4.0.4beta.html
index 28c543fd..e06a2c22 100644
--- a/tiff/html/v4.0.4beta.html
+++ b/tiff/html/v4.0.4beta.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.4beta<BR>
<B>Previous Version</B>: <A HREF=v4.0.3.html>v4.0.3</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.5.html b/tiff/html/v4.0.5.html
index ac91d72f..c638638a 100644
--- a/tiff/html/v4.0.5.html
+++ b/tiff/html/v4.0.5.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.5<BR>
<B>Previous Version</B>: <A HREF=v4.0.4.html>v4.0.4</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.6.html b/tiff/html/v4.0.6.html
index 31749199..8fc63b5c 100644
--- a/tiff/html/v4.0.6.html
+++ b/tiff/html/v4.0.6.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.6<BR>
<B>Previous Version</B>: <A HREF=v4.0.5.html>v4.0.5</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a>
diff --git a/tiff/html/v4.0.7.html b/tiff/html/v4.0.7.html
index e29e8d53..e1b5dec9 100644
--- a/tiff/html/v4.0.7.html
+++ b/tiff/html/v4.0.7.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.7<BR>
<B>Previous Version</B>: <A HREF=v4.0.6.html>v4.0.6</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site #1</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a><BR>
diff --git a/tiff/html/v4.0.8.html b/tiff/html/v4.0.8.html
index 8b85e9c2..86db3bbf 100644
--- a/tiff/html/v4.0.8.html
+++ b/tiff/html/v4.0.8.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.8<BR>
<B>Previous Version</B>: <A HREF=v4.0.7.html>v4.0.7</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site #1</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a><BR>
diff --git a/tiff/html/v4.0.9.html b/tiff/html/v4.0.9.html
index 9be5f274..4efe987f 100644
--- a/tiff/html/v4.0.9.html
+++ b/tiff/html/v4.0.9.html
@@ -16,7 +16,7 @@
<HR SIZE=4 WIDTH=65% ALIGN=left>
<B>Current Version</B>: v4.0.9<BR>
<B>Previous Version</B>: <A HREF=v4.0.8.html>v4.0.8</a><BR>
-<B>Master FTP Site</B>: <A HREF="ftp://download.osgeo.org/libtiff">
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
download.osgeo.org</a>, directory pub/libtiff</A><BR>
<B>Master HTTP Site #1</B>: <A HREF="http://www.simplesystems.org/libtiff/">
http://www.simplesystems.org/libtiff/</a><BR>
diff --git a/tiff/html/v4.1.0.html b/tiff/html/v4.1.0.html
new file mode 100644
index 00000000..7c61fac7
--- /dev/null
+++ b/tiff/html/v4.1.0.html
@@ -0,0 +1,198 @@
+<HTML>
+<HEAD>
+<TITLE>
+ Changes in TIFF v4.1.0
+</TITLE>
+<STYLE>
+table, th, td {
+ border: 1px solid black;
+ border-collapse: collapse;
+}
+th, td {
+ padding: 8pt;
+ text-align: center;
+}
+th {
+ text-align: center;
+}
+td {
+ text-align: center;
+}
+
+ul li {
+ padding: 3pt;
+}
+
+ul.a {
+ list-style-type: circle;
+}
+
+ul.b {
+ list-style-type: square;
+}
+
+ol.c {
+ list-style-type: upper-roman;
+}
+
+ol.d {
+ list-style-type: lower-alpha;
+}
+
+</STYLE>
+</HEAD>
+
+<BODY BGCOLOR=white>
+<FONT FACE="Helvetica, Arial, Sans">
+
+<BASEFONT SIZE=4>
+<B><FONT SIZE=+3>T</FONT>IFF <FONT SIZE=+2>C</FONT>HANGE <FONT SIZE=+2>I</FONT>NFORMATION</B>
+<BASEFONT SIZE=3>
+
+<UL>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+<B>Current Version</B>: v4.1.0<BR>
+<B>Previous Version</B>: <A HREF=v4.0.10.html>v4.0.10</a><BR>
+<B>Master Download Site</B>: <A HREF="https://download.osgeo.org/libtiff">
+download.osgeo.org</a>, directory pub/libtiff</A><BR>
+<B>Master HTTP Site #1</B>: <A HREF="http://www.simplesystems.org/libtiff/">
+http://www.simplesystems.org/libtiff/</a><BR>
+<B>Master HTTP Site #2</B>: <A HREF="http://libtiff.maptools.org/">
+http://libtiff.maptools.org/</a>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+</UL>
+
+<P>
+This document describes the changes made to the software between the
+<I>previous</I> and <I>current</I> versions (see above). If you don't
+find something listed here, then it was not done in this timeframe, or
+it was not considered important enough to be mentioned. The following
+information is located here. A change summary is also provided by the
+ChangeLog file included in the release package and by the Git commit
+history:
+<UL>
+<LI><A HREF="#highlights">Major Changes</A>
+<LI><A HREF="#configure">Changes in the software configuration</A>
+<LI><A HREF="#libtiff">Changes in libtiff</A>
+<LI><A HREF="#tools">Changes in the tools</A>
+<LI><A HREF="#contrib">Changes in the contrib area</A>
+</UL>
+<p>
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A>
+
+<UL>
+
+ <LI>Make defer strile offset/bytecount loading available at runtime
+ and add per-strile offset/bytecount loading capabilities. Part of
+ this commit makes the behaviour that was previously met when libtiff
+ was compiled with -DDEFER_STRILE_LOAD available for default builds
+ when specifying the new 'D' (Deferred) TIFFOpen() flag. In that
+ mode, the [Tile/Strip][ByteCounts/Offsets] arrays are only loaded
+ when first accessed. This can speed-up the opening of files stored
+ on the network when just metadata retrieval is needed.
+
+ Another addition is the capability of loading only the values of
+ the offset/bytecount of the strile of interest instead of the
+ whole array. This is enabled with the new 'O' (Ondemand) flag of
+ TIFFOpen() (which implies 'D').
+
+ The public TIFFGetStrileOffset[WithErr]() and
+ TIFFGetStrileByteCount[WithErr]() functions have been added to
+ API. They are of particular interest when using sparse files (with
+ offset == bytecount == 0) and you want to detect if a strile is
+ present or not without decompressing the data, or updating an
+ existing sparse file.
+ </LI>
+
+ <LI>The BigTIFF writer now optimizes file size by using 32-bit LONG
+ values (rather than 64-bit) where it is reasonable and safe to do
+ so. Likewise, the 16-bit SHORT type is used when possible for
+ StripByteCounts/TileByteCounts.
+ </LI>
+
+</UL>
+
+
+<P><HR WIDTH=65% ALIGN=left>
+<!--------------------------------------------------------------------------->
+
+<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A>
+
+<UL>
+
+ <LI>The WIN32 build now uses tif_win32.c when building with CMake.</LI>
+
+ <LI>Properly set value of HOST_FILLORDER to LSB2MSB for Windows
+ CMake builds. It was not being properly set!</LI>
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
+
+<UL>
+
+ <LI>
+ Changes in the libtiff library may be viewed on-line
+ at <A HREF="https://gitlab.com/libtiff/libtiff/commits/master/libtiff">Libtiff
+ Library Commits</A>.
+ </LI>
+
+ <LI>
+ New function TIFFReadFromUserBuffer() which replaces the use of
+ TIFFReadEncodedStrip()/TIFFReadEncodedTile() when the user can
+ provide the buffer for the input data, for example when he wants
+ to avoid libtiff to read the strile offset/count values from the
+ [Strip|Tile][Offsets/ByteCounts] array.
+ </LI>
+
+ <LI>
+ New functions TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting()
+ Those advanced writing functions must be used in a particular sequence
+ to make their intended effect. Their aim is to control when/where
+ the [Strip/Tile][Offsets/ByteCounts] arrays are written into the file.
+
+ The purpose of this is to generate 'cloud-optimized geotiff' files where
+ the first KB of the file only contain the IFD entries without the potentially
+ large strile arrays. Those are written afterwards.
+ </LI>
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!-------------------------------------------------------------------------->
+
+<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
+
+<UL>
+
+ <LI>Changes in the libtiff utilities may be viewed on-line
+ at <A HREF="https://gitlab.com/libtiff/libtiff/commits/master/tools">Libtiff
+ Tools Commits</A></LI>
+
+</UL>
+
+<P><HR WIDTH=65% ALIGN=left>
+
+<!--------------------------------------------------------------------------->
+
+<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A>
+
+<UL>
+
+ <LI>Changes in the libtiff contrib area may be viewed on-line
+ at <A HREF="https://gitlab.com/libtiff/libtiff/commits/master/contrib">Libtiff
+ Contrib Commits</A></LI>
+
+</UL>
+
+</BODY>
+</HTML>
diff --git a/tiff/libtiff/CMakeLists.txt b/tiff/libtiff/CMakeLists.txt
index 087dfa9e..080685db 100644
--- a/tiff/libtiff/CMakeLists.txt
+++ b/tiff/libtiff/CMakeLists.txt
@@ -93,8 +93,10 @@ set(tiff_SOURCES
tif_tile.c
tif_version.c
tif_warning.c
+ tif_webp.c
tif_write.c
- tif_zip.c)
+ tif_zip.c
+ tif_zstd.c)
set(tiffxx_HEADERS
tiffio.hxx)
@@ -102,7 +104,7 @@ set(tiffxx_HEADERS
set(tiffxx_SOURCES
tif_stream.cxx)
-if(WIN32_IO)
+if(USE_WIN32_FILEIO)
extra_dist(tif_unix.c)
list(APPEND tiff_SOURCES tif_win32.c)
else()
@@ -110,12 +112,14 @@ else()
list(APPEND tiff_SOURCES tif_unix.c)
endif()
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- ${TIFF_INCLUDES})
-
add_library(tiff ${tiff_SOURCES} ${tiff_HEADERS} ${nodist_tiff_HEADERS}
${tiff_port_SOURCES} libtiff.def)
+target_include_directories(tiff
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ ${TIFF_INCLUDES}
+)
target_link_libraries(tiff ${TIFF_LIBRARY_DEPS})
set_target_properties(tiff PROPERTIES SOVERSION ${SO_COMPATVERSION})
if(NOT CYGWIN)
@@ -138,7 +142,7 @@ install(TARGETS tiff
install(FILES ${tiff_HEADERS} ${nodist_tiff_HEADERS}
DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
-if(cxx)
+if(CXX_SUPPORT)
add_library(tiffxx ${tiffxx_SOURCES} ${tiffxx_HEADERS})
target_link_libraries(tiffxx tiff)
set_target_properties(tiffxx PROPERTIES SOVERSION ${SO_COMPATVERSION})
diff --git a/tiff/libtiff/Makefile.am b/tiff/libtiff/Makefile.am
index 9cbc5b1d..14a250a5 100644
--- a/tiff/libtiff/Makefile.am
+++ b/tiff/libtiff/Makefile.am
@@ -98,8 +98,10 @@ libtiff_la_SOURCES = \
tif_tile.c \
tif_version.c \
tif_warning.c \
+ tif_webp.c \
tif_write.c \
- tif_zip.c
+ tif_zip.c \
+ tif_zstd.c
libtiffxx_la_SOURCES = \
tif_stream.cxx
diff --git a/tiff/libtiff/Makefile.in b/tiff/libtiff/Makefile.in
index 62fb7bc8..a593fc22 100644
--- a/tiff/libtiff/Makefile.in
+++ b/tiff/libtiff/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -136,10 +136,11 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__libtiffinclude_HEADERS_DIST) \
$(noinst_HEADERS) $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = tif_config.h tiffconf.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -180,8 +181,8 @@ am__libtiff_la_SOURCES_DIST = tif_aux.c tif_close.c tif_codec.c \
tif_lzma.c tif_lzw.c tif_next.c tif_ojpeg.c tif_open.c \
tif_packbits.c tif_pixarlog.c tif_predict.c tif_print.c \
tif_read.c tif_strip.c tif_swab.c tif_thunder.c tif_tile.c \
- tif_version.c tif_warning.c tif_write.c tif_zip.c tif_win32.c \
- tif_unix.c
+ tif_version.c tif_warning.c tif_webp.c tif_write.c tif_zip.c \
+ tif_zstd.c tif_win32.c tif_unix.c
@WIN32_IO_TRUE@am__objects_1 = tif_win32.lo
@WIN32_IO_FALSE@am__objects_2 = tif_unix.lo
am_libtiff_la_OBJECTS = tif_aux.lo tif_close.lo tif_codec.lo \
@@ -193,7 +194,8 @@ am_libtiff_la_OBJECTS = tif_aux.lo tif_close.lo tif_codec.lo \
tif_open.lo tif_packbits.lo tif_pixarlog.lo tif_predict.lo \
tif_print.lo tif_read.lo tif_strip.lo tif_swab.lo \
tif_thunder.lo tif_tile.lo tif_version.lo tif_warning.lo \
- tif_write.lo tif_zip.lo $(am__objects_1) $(am__objects_2)
+ tif_webp.lo tif_write.lo tif_zip.lo tif_zstd.lo \
+ $(am__objects_1) $(am__objects_2)
libtiff_la_OBJECTS = $(am_libtiff_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -208,7 +210,6 @@ libtiffxx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(libtiffxx_la_LDFLAGS) $(LDFLAGS) -o $@
@HAVE_CXX_TRUE@am_libtiffxx_la_rpath = -rpath $(libdir)
-PROGRAMS = $(noinst_PROGRAMS)
am_mkg3states_OBJECTS = mkg3states.$(OBJEXT)
mkg3states_OBJECTS = $(am_mkg3states_OBJECTS)
mkg3states_DEPENDENCIES = $(LIBPORT)
@@ -226,7 +227,30 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/mkg3states.Po \
+ ./$(DEPDIR)/tif_aux.Plo ./$(DEPDIR)/tif_close.Plo \
+ ./$(DEPDIR)/tif_codec.Plo ./$(DEPDIR)/tif_color.Plo \
+ ./$(DEPDIR)/tif_compress.Plo ./$(DEPDIR)/tif_dir.Plo \
+ ./$(DEPDIR)/tif_dirinfo.Plo ./$(DEPDIR)/tif_dirread.Plo \
+ ./$(DEPDIR)/tif_dirwrite.Plo ./$(DEPDIR)/tif_dumpmode.Plo \
+ ./$(DEPDIR)/tif_error.Plo ./$(DEPDIR)/tif_extension.Plo \
+ ./$(DEPDIR)/tif_fax3.Plo ./$(DEPDIR)/tif_fax3sm.Plo \
+ ./$(DEPDIR)/tif_flush.Plo ./$(DEPDIR)/tif_getimage.Plo \
+ ./$(DEPDIR)/tif_jbig.Plo ./$(DEPDIR)/tif_jpeg.Plo \
+ ./$(DEPDIR)/tif_jpeg_12.Plo ./$(DEPDIR)/tif_luv.Plo \
+ ./$(DEPDIR)/tif_lzma.Plo ./$(DEPDIR)/tif_lzw.Plo \
+ ./$(DEPDIR)/tif_next.Plo ./$(DEPDIR)/tif_ojpeg.Plo \
+ ./$(DEPDIR)/tif_open.Plo ./$(DEPDIR)/tif_packbits.Plo \
+ ./$(DEPDIR)/tif_pixarlog.Plo ./$(DEPDIR)/tif_predict.Plo \
+ ./$(DEPDIR)/tif_print.Plo ./$(DEPDIR)/tif_read.Plo \
+ ./$(DEPDIR)/tif_stream.Plo ./$(DEPDIR)/tif_strip.Plo \
+ ./$(DEPDIR)/tif_swab.Plo ./$(DEPDIR)/tif_thunder.Plo \
+ ./$(DEPDIR)/tif_tile.Plo ./$(DEPDIR)/tif_unix.Plo \
+ ./$(DEPDIR)/tif_version.Plo ./$(DEPDIR)/tif_warning.Plo \
+ ./$(DEPDIR)/tif_webp.Plo ./$(DEPDIR)/tif_win32.Plo \
+ ./$(DEPDIR)/tif_write.Plo ./$(DEPDIR)/tif_zip.Plo \
+ ./$(DEPDIR)/tif_zstd.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -298,8 +322,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/tif_config.h.in \
- $(srcdir)/tiffconf.h.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs
+ $(srcdir)/tiffconf.h.in $(top_srcdir)/config/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -476,8 +499,8 @@ libtiff_la_SOURCES = tif_aux.c tif_close.c tif_codec.c tif_color.c \
tif_next.c tif_ojpeg.c tif_open.c tif_packbits.c \
tif_pixarlog.c tif_predict.c tif_print.c tif_read.c \
tif_strip.c tif_swab.c tif_thunder.c tif_tile.c tif_version.c \
- tif_warning.c tif_write.c tif_zip.c $(am__append_3) \
- $(am__append_5)
+ tif_warning.c tif_webp.c tif_write.c tif_zip.c tif_zstd.c \
+ $(am__append_3) $(am__append_5)
libtiffxx_la_SOURCES = \
tif_stream.cxx
@@ -513,8 +536,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -549,6 +572,15 @@ stamp-h2: $(srcdir)/tiffconf.h.in $(top_builddir)/config.status
distclean-hdr:
-rm -f tif_config.h stamp-h1 tiffconf.h stamp-h2
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
@@ -590,15 +622,6 @@ libtiff.la: $(libtiff_la_OBJECTS) $(libtiff_la_DEPENDENCIES) $(EXTRA_libtiff_la_
libtiffxx.la: $(libtiffxx_la_OBJECTS) $(libtiffxx_la_DEPENDENCIES) $(EXTRA_libtiffxx_la_DEPENDENCIES)
$(AM_V_CXXLD)$(libtiffxx_la_LINK) $(am_libtiffxx_la_rpath) $(libtiffxx_la_OBJECTS) $(libtiffxx_la_LIBADD) $(LIBS)
-clean-noinstPROGRAMS:
- @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
-
mkg3states$(EXEEXT): $(mkg3states_OBJECTS) $(mkg3states_DEPENDENCIES) $(EXTRA_mkg3states_DEPENDENCIES)
@rm -f mkg3states$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mkg3states_OBJECTS) $(mkg3states_LDADD) $(LIBS)
@@ -609,48 +632,56 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkg3states.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_aux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_close.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_codec.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_color.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_compress.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dir.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirinfo.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirread.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirwrite.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dumpmode.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_error.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_extension.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3sm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_flush.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_getimage.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jbig.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg_12.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_luv.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzma.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzw.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_next.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ojpeg.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_open.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_packbits.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_pixarlog.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_predict.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_print.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_read.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_stream.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_strip.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_swab.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_thunder.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_tile.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_unix.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_version.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_warning.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_win32.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_write.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkg3states.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_aux.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_close.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_codec.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_color.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_compress.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dir.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirinfo.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirread.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirwrite.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dumpmode.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_error.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_extension.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3sm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_flush.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_getimage.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jbig.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg_12.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_luv.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzma.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzw.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_next.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ojpeg.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_open.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_packbits.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_pixarlog.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_predict.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_print.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_read.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_stream.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_strip.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_swab.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_thunder.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_tile.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_unix.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_version.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_warning.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_webp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_win32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_write.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zip.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zstd.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -794,7 +825,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -826,7 +860,7 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) tif_config.h \
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) tif_config.h \
tiffconf.h
installdirs:
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtiffincludedir)" "$(DESTDIR)$(libtiffincludedir)"; do \
@@ -868,7 +902,50 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
clean-noinstPROGRAMS mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/mkg3states.Po
+ -rm -f ./$(DEPDIR)/tif_aux.Plo
+ -rm -f ./$(DEPDIR)/tif_close.Plo
+ -rm -f ./$(DEPDIR)/tif_codec.Plo
+ -rm -f ./$(DEPDIR)/tif_color.Plo
+ -rm -f ./$(DEPDIR)/tif_compress.Plo
+ -rm -f ./$(DEPDIR)/tif_dir.Plo
+ -rm -f ./$(DEPDIR)/tif_dirinfo.Plo
+ -rm -f ./$(DEPDIR)/tif_dirread.Plo
+ -rm -f ./$(DEPDIR)/tif_dirwrite.Plo
+ -rm -f ./$(DEPDIR)/tif_dumpmode.Plo
+ -rm -f ./$(DEPDIR)/tif_error.Plo
+ -rm -f ./$(DEPDIR)/tif_extension.Plo
+ -rm -f ./$(DEPDIR)/tif_fax3.Plo
+ -rm -f ./$(DEPDIR)/tif_fax3sm.Plo
+ -rm -f ./$(DEPDIR)/tif_flush.Plo
+ -rm -f ./$(DEPDIR)/tif_getimage.Plo
+ -rm -f ./$(DEPDIR)/tif_jbig.Plo
+ -rm -f ./$(DEPDIR)/tif_jpeg.Plo
+ -rm -f ./$(DEPDIR)/tif_jpeg_12.Plo
+ -rm -f ./$(DEPDIR)/tif_luv.Plo
+ -rm -f ./$(DEPDIR)/tif_lzma.Plo
+ -rm -f ./$(DEPDIR)/tif_lzw.Plo
+ -rm -f ./$(DEPDIR)/tif_next.Plo
+ -rm -f ./$(DEPDIR)/tif_ojpeg.Plo
+ -rm -f ./$(DEPDIR)/tif_open.Plo
+ -rm -f ./$(DEPDIR)/tif_packbits.Plo
+ -rm -f ./$(DEPDIR)/tif_pixarlog.Plo
+ -rm -f ./$(DEPDIR)/tif_predict.Plo
+ -rm -f ./$(DEPDIR)/tif_print.Plo
+ -rm -f ./$(DEPDIR)/tif_read.Plo
+ -rm -f ./$(DEPDIR)/tif_stream.Plo
+ -rm -f ./$(DEPDIR)/tif_strip.Plo
+ -rm -f ./$(DEPDIR)/tif_swab.Plo
+ -rm -f ./$(DEPDIR)/tif_thunder.Plo
+ -rm -f ./$(DEPDIR)/tif_tile.Plo
+ -rm -f ./$(DEPDIR)/tif_unix.Plo
+ -rm -f ./$(DEPDIR)/tif_version.Plo
+ -rm -f ./$(DEPDIR)/tif_warning.Plo
+ -rm -f ./$(DEPDIR)/tif_webp.Plo
+ -rm -f ./$(DEPDIR)/tif_win32.Plo
+ -rm -f ./$(DEPDIR)/tif_write.Plo
+ -rm -f ./$(DEPDIR)/tif_zip.Plo
+ -rm -f ./$(DEPDIR)/tif_zstd.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-tags
@@ -915,7 +992,50 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/mkg3states.Po
+ -rm -f ./$(DEPDIR)/tif_aux.Plo
+ -rm -f ./$(DEPDIR)/tif_close.Plo
+ -rm -f ./$(DEPDIR)/tif_codec.Plo
+ -rm -f ./$(DEPDIR)/tif_color.Plo
+ -rm -f ./$(DEPDIR)/tif_compress.Plo
+ -rm -f ./$(DEPDIR)/tif_dir.Plo
+ -rm -f ./$(DEPDIR)/tif_dirinfo.Plo
+ -rm -f ./$(DEPDIR)/tif_dirread.Plo
+ -rm -f ./$(DEPDIR)/tif_dirwrite.Plo
+ -rm -f ./$(DEPDIR)/tif_dumpmode.Plo
+ -rm -f ./$(DEPDIR)/tif_error.Plo
+ -rm -f ./$(DEPDIR)/tif_extension.Plo
+ -rm -f ./$(DEPDIR)/tif_fax3.Plo
+ -rm -f ./$(DEPDIR)/tif_fax3sm.Plo
+ -rm -f ./$(DEPDIR)/tif_flush.Plo
+ -rm -f ./$(DEPDIR)/tif_getimage.Plo
+ -rm -f ./$(DEPDIR)/tif_jbig.Plo
+ -rm -f ./$(DEPDIR)/tif_jpeg.Plo
+ -rm -f ./$(DEPDIR)/tif_jpeg_12.Plo
+ -rm -f ./$(DEPDIR)/tif_luv.Plo
+ -rm -f ./$(DEPDIR)/tif_lzma.Plo
+ -rm -f ./$(DEPDIR)/tif_lzw.Plo
+ -rm -f ./$(DEPDIR)/tif_next.Plo
+ -rm -f ./$(DEPDIR)/tif_ojpeg.Plo
+ -rm -f ./$(DEPDIR)/tif_open.Plo
+ -rm -f ./$(DEPDIR)/tif_packbits.Plo
+ -rm -f ./$(DEPDIR)/tif_pixarlog.Plo
+ -rm -f ./$(DEPDIR)/tif_predict.Plo
+ -rm -f ./$(DEPDIR)/tif_print.Plo
+ -rm -f ./$(DEPDIR)/tif_read.Plo
+ -rm -f ./$(DEPDIR)/tif_stream.Plo
+ -rm -f ./$(DEPDIR)/tif_strip.Plo
+ -rm -f ./$(DEPDIR)/tif_swab.Plo
+ -rm -f ./$(DEPDIR)/tif_thunder.Plo
+ -rm -f ./$(DEPDIR)/tif_tile.Plo
+ -rm -f ./$(DEPDIR)/tif_unix.Plo
+ -rm -f ./$(DEPDIR)/tif_version.Plo
+ -rm -f ./$(DEPDIR)/tif_warning.Plo
+ -rm -f ./$(DEPDIR)/tif_webp.Plo
+ -rm -f ./$(DEPDIR)/tif_win32.Plo
+ -rm -f ./$(DEPDIR)/tif_write.Plo
+ -rm -f ./$(DEPDIR)/tif_zip.Plo
+ -rm -f ./$(DEPDIR)/tif_zstd.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -937,16 +1057,17 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-libtiffincludeHEADERS \
.MAKE: all install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
- cscopelist-am ctags ctags-am distclean distclean-compile \
- distclean-generic distclean-hdr distclean-libtool \
- distclean-tags distdir 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-libLTLIBRARIES install-libtiffincludeHEADERS \
- install-man install-nodist_libtiffincludeHEADERS install-pdf \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distdir 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-libLTLIBRARIES \
+ install-libtiffincludeHEADERS install-man \
+ install-nodist_libtiffincludeHEADERS install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
diff --git a/tiff/libtiff/Makefile.vc b/tiff/libtiff/Makefile.vc
index b7309154..5aac3310 100644
--- a/tiff/libtiff/Makefile.vc
+++ b/tiff/libtiff/Makefile.vc
@@ -1,5 +1,3 @@
-# $Id: Makefile.vc,v 1.23 2015-08-19 02:31:04 bfriesen Exp $
-#
# Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
#
# Permission to use, copy, modify, distribute, and sell this software and
diff --git a/tiff/libtiff/SConstruct b/tiff/libtiff/SConstruct
index cb6a7cc9..af3daace 100644
--- a/tiff/libtiff/SConstruct
+++ b/tiff/libtiff/SConstruct
@@ -1,5 +1,3 @@
-# $Id: SConstruct,v 1.4 2007/02/24 15:03:50 dron Exp $
-
# Tag Image File Format (TIFF) Software
#
# Copyright (C) 2005, Andrey Kiselev <dron@ak4719.spb.edu>
diff --git a/tiff/libtiff/libtiff.def b/tiff/libtiff/libtiff.def
index 341c719d..e34fac58 100644
--- a/tiff/libtiff/libtiff.def
+++ b/tiff/libtiff/libtiff.def
@@ -20,6 +20,7 @@ EXPORTS TIFFAccessTagMethods
TIFFDataWidth
TIFFDefaultStripSize
TIFFDefaultTileSize
+ TIFFDeferStrileArrayWriting
TIFFError
TIFFErrorExt
TIFFFdOpen
@@ -37,6 +38,7 @@ EXPORTS TIFFAccessTagMethods
TIFFFindField
TIFFFlush
TIFFFlushData
+ TIFFForceStrileArrayWriting
TIFFFreeDirectory
TIFFGetBitRevTable
TIFFGetClientInfo
@@ -49,6 +51,10 @@ EXPORTS TIFFAccessTagMethods
TIFFGetReadProc
TIFFGetSeekProc
TIFFGetSizeProc
+ TIFFGetStrileByteCount
+ TIFFGetStrileByteCountWithErr
+ TIFFGetStrileOffset
+ TIFFGetStrileOffsetWithErr
TIFFGetTagListCount
TIFFGetTagListEntry
TIFFGetUnmapFileProc
@@ -82,6 +88,7 @@ EXPORTS TIFFAccessTagMethods
TIFFReadEXIFDirectory
TIFFReadEncodedStrip
TIFFReadEncodedTile
+ TIFFReadFromUserBuffer
TIFFReadRGBAImage
TIFFReadRGBAImageOriented
TIFFReadRGBAStrip
diff --git a/tiff/libtiff/mkg3states.c b/tiff/libtiff/mkg3states.c
index 16ad3c23..2cb9174c 100644
--- a/tiff/libtiff/mkg3states.c
+++ b/tiff/libtiff/mkg3states.c
@@ -1,5 +1,3 @@
-/* "$Id: mkg3states.c,v 1.12 2015-06-21 01:09:09 bfriesen Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -42,7 +40,7 @@
#include "tif_fax3.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#define streq(a,b) (strcmp(a,b) == 0)
diff --git a/tiff/libtiff/t4.h b/tiff/libtiff/t4.h
index b908f54f..fb0951a1 100644
--- a/tiff/libtiff/t4.h
+++ b/tiff/libtiff/t4.h
@@ -1,5 +1,3 @@
-/* $Id: t4.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_aux.c b/tiff/libtiff/tif_aux.c
index 10b8d00c..8188db53 100644
--- a/tiff/libtiff/tif_aux.c
+++ b/tiff/libtiff/tif_aux.c
@@ -1,5 +1,3 @@
-/* $Id: tif_aux.c,v 1.31 2017-11-17 20:21:00 erouault Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -32,31 +30,66 @@
#include "tiffiop.h"
#include "tif_predict.h"
#include <math.h>
+#include <float.h>
uint32
_TIFFMultiply32(TIFF* tif, uint32 first, uint32 second, const char* where)
{
- uint32 bytes = first * second;
-
- if (second && bytes / second != first) {
+ if (second && first > TIFF_UINT32_MAX / second) {
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
- bytes = 0;
+ return 0;
}
- return bytes;
+ return first * second;
}
uint64
_TIFFMultiply64(TIFF* tif, uint64 first, uint64 second, const char* where)
{
- uint64 bytes = first * second;
-
- if (second && bytes / second != first) {
+ if (second && first > TIFF_UINT64_MAX / second) {
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
- bytes = 0;
+ return 0;
}
- return bytes;
+ return first * second;
+}
+
+tmsize_t
+_TIFFMultiplySSize(TIFF* tif, tmsize_t first, tmsize_t second, const char* where)
+{
+ if( first <= 0 || second <= 0 )
+ {
+ if( tif != NULL && where != NULL )
+ {
+ TIFFErrorExt(tif->tif_clientdata, where,
+ "Invalid argument to _TIFFMultiplySSize() in %s", where);
+ }
+ return 0;
+ }
+
+ if( first > TIFF_TMSIZE_T_MAX / second )
+ {
+ if( tif != NULL && where != NULL )
+ {
+ TIFFErrorExt(tif->tif_clientdata, where,
+ "Integer overflow in %s", where);
+ }
+ return 0;
+ }
+ return first * second;
+}
+
+tmsize_t _TIFFCastUInt64ToSSize(TIFF* tif, uint64 val, const char* module)
+{
+ if( val > (uint64)TIFF_TMSIZE_T_MAX )
+ {
+ if( tif != NULL && module != NULL )
+ {
+ TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
+ }
+ return 0;
+ }
+ return (tmsize_t)val;
}
void*
@@ -64,13 +97,14 @@ _TIFFCheckRealloc(TIFF* tif, void* buffer,
tmsize_t nmemb, tmsize_t elem_size, const char* what)
{
void* cp = NULL;
- tmsize_t bytes = nmemb * elem_size;
-
+ tmsize_t count = _TIFFMultiplySSize(tif, nmemb, elem_size, NULL);
/*
- * XXX: Check for integer overflow.
+ * Check for integer overflow.
*/
- if (nmemb && elem_size && bytes / elem_size == nmemb)
- cp = _TIFFrealloc(buffer, bytes);
+ if (count != 0)
+ {
+ cp = _TIFFrealloc(buffer, count);
+ }
if (cp == NULL) {
TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
@@ -359,6 +393,15 @@ _TIFFUInt64ToDouble(uint64 ui64)
}
}
+float _TIFFClampDoubleToFloat( double val )
+{
+ if( val > FLT_MAX )
+ return FLT_MAX;
+ if( val < -FLT_MAX )
+ return -FLT_MAX;
+ return (float)val;
+}
+
int _TIFFSeekOK(TIFF* tif, toff_t off)
{
/* Huge offsets, especially -1 / UINT64_MAX, can cause issues */
diff --git a/tiff/libtiff/tif_close.c b/tiff/libtiff/tif_close.c
index a0cb6613..e4228df9 100644
--- a/tiff/libtiff/tif_close.c
+++ b/tiff/libtiff/tif_close.c
@@ -1,5 +1,3 @@
-/* $Id: tif_close.c,v 1.21 2016-01-23 21:20:34 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_codec.c b/tiff/libtiff/tif_codec.c
index 7cb46f63..b6c04f01 100644
--- a/tiff/libtiff/tif_codec.c
+++ b/tiff/libtiff/tif_codec.c
@@ -1,5 +1,3 @@
-/* $Id: tif_codec.c,v 1.17 2015-08-19 02:31:04 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -72,6 +70,12 @@ static int NotConfigured(TIFF*, int);
#ifndef LZMA_SUPPORT
#define TIFFInitLZMA NotConfigured
#endif
+#ifndef ZSTD_SUPPORT
+#define TIFFInitZSTD NotConfigured
+#endif
+#ifndef WEBP_SUPPORT
+#define TIFFInitWebP NotConfigured
+#endif
/*
* Compression schemes statically built into the library.
@@ -99,6 +103,8 @@ TIFFCodec _TIFFBuiltinCODECS[] = {
{ "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog },
{ "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog },
{ "LZMA", COMPRESSION_LZMA, TIFFInitLZMA },
+ { "ZSTD", COMPRESSION_ZSTD, TIFFInitZSTD },
+ { "WEBP", COMPRESSION_WEBP, TIFFInitWebP },
{ NULL, 0, NULL }
};
diff --git a/tiff/libtiff/tif_color.c b/tiff/libtiff/tif_color.c
index 71cafcde..8fae40ea 100644
--- a/tiff/libtiff/tif_color.c
+++ b/tiff/libtiff/tif_color.c
@@ -1,5 +1,3 @@
-/* $Id: tif_color.c,v 1.24 2017-05-29 10:12:54 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -168,7 +166,7 @@ TIFFCIELabToRGBInit(TIFFCIELabToRGB* cielab,
}
/*
- * Convert color value from the YCbCr space to CIE XYZ.
+ * Convert color value from the YCbCr space to RGB.
* The colorspace conversion algorithm comes from the IJG v5a code;
* see below for more information on how it works.
*/
diff --git a/tiff/libtiff/tif_compress.c b/tiff/libtiff/tif_compress.c
index b571d195..8130ef08 100644
--- a/tiff/libtiff/tif_compress.c
+++ b/tiff/libtiff/tif_compress.c
@@ -1,5 +1,3 @@
-/* $Id: tif_compress.c,v 1.25 2016-10-25 20:04:22 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_config.h.cmake.in b/tiff/libtiff/tif_config.h.cmake.in
index de0f3a3c..24144603 100644
--- a/tiff/libtiff/tif_config.h.cmake.in
+++ b/tiff/libtiff/tif_config.h.cmake.in
@@ -26,9 +26,6 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#cmakedefine HAVE_FCNTL_H 1
-/* Define to 1 if you have the `floor' function. */
-#cmakedefine HAVE_FLOOR 1
-
/* Define to 1 if you have the `getopt' function. */
#cmakedefine HAVE_GETOPT 1
@@ -50,30 +47,12 @@
/* Define to 1 if you have the <io.h> header file. */
#cmakedefine HAVE_IO_H 1
-/* Define to 1 if you have the `isascii' function. */
-#cmakedefine HAVE_ISASCII 1
-
/* Define to 1 if you have the `jbg_newlen' function. */
#cmakedefine HAVE_JBG_NEWLEN 1
/* Define to 1 if you have the `lfind' function. */
#cmakedefine HAVE_LFIND 1
-/* Define to 1 if you have the <limits.h> header file. */
-#cmakedefine HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#cmakedefine HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the `memmove' function. */
-#cmakedefine HAVE_MEMMOVE 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#cmakedefine HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `memset' function. */
-#cmakedefine HAVE_MEMSET 1
-
/* Define to 1 if you have the `mmap' function. */
#cmakedefine HAVE_MMAP 1
@@ -83,9 +62,6 @@
/* Define to 1 if you have the <OpenGL/gl.h> header file. */
#cmakedefine HAVE_OPENGL_GL_H 1
-/* Define to 1 if you have the `pow' function. */
-#cmakedefine HAVE_POW 1
-
/* Define to 1 if you have the <search.h> header file. */
#cmakedefine HAVE_SEARCH_H 1
@@ -95,33 +71,24 @@
/* Define to 1 if you have the `snprintf' function. */
#cmakedefine HAVE_SNPRINTF 1
-/* Define to 1 if you have the `sqrt' function. */
-#cmakedefine HAVE_SQRT 1
-
/* Define to 1 if you have the <stdint.h> header file. */
#cmakedefine HAVE_STDINT_H 1
/* Define to 1 if you have the `strcasecmp' function. */
#cmakedefine HAVE_STRCASECMP 1
-/* Define to 1 if you have the `strchr' function. */
-#cmakedefine HAVE_STRCHR 1
-
/* Define to 1 if you have the <strings.h> header file. */
#cmakedefine HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#cmakedefine HAVE_STRING_H 1
-/* Define to 1 if you have the `strrchr' function. */
-#cmakedefine HAVE_STRRCHR 1
-
-/* Define to 1 if you have the `strstr' function. */
-#cmakedefine HAVE_STRSTR 1
-
/* Define to 1 if you have the `strtol' function. */
#cmakedefine HAVE_STRTOL 1
+/* Define to 1 if you have the `strtoll' function. */
+#cmakedefine HAVE_STRTOLL 1
+
/* Define to 1 if you have the `strtoul' function. */
#cmakedefine HAVE_STRTOUL 1
@@ -146,6 +113,12 @@
/* Support LZMA2 compression */
#cmakedefine LZMA_SUPPORT 1
+/* Support ZSTD compression */
+#cmakedefine ZSTD_SUPPORT 1
+
+/* Support WEBP compression */
+#cmakedefine WEBP_SUPPORT 1
+
/* Name of package */
#define PACKAGE "@PACKAGE_NAME@"
@@ -176,9 +149,6 @@
/* The size of `signed long long', as computed by sizeof. */
#define SIZEOF_SIGNED_LONG_LONG @SIZEOF_SIGNED_LONG_LONG@
-/* The size of `signed short', as computed by sizeof. */
-#define SIZEOF_SIGNED_SHORT @SIZEOF_SIGNED_SHORT@
-
/* The size of `unsigned char *', as computed by sizeof. */
#define SIZEOF_UNSIGNED_CHAR_P @SIZEOF_UNSIGNED_CHAR_P@
diff --git a/tiff/libtiff/tif_config.h.in b/tiff/libtiff/tif_config.h.in
index a4b2e60a..523da3e3 100644
--- a/tiff/libtiff/tif_config.h.in
+++ b/tiff/libtiff/tif_config.h.in
@@ -21,7 +21,7 @@
packages produce RGBA files but don't mark the alpha properly. */
#undef DEFAULT_EXTRASAMPLE_AS_ALPHA
-/* enable deferred strip/tile offset/size loading (experimental) */
+/* enable deferred strip/tile offset/size loading */
#undef DEFER_STRILE_LOAD
/* Define to 1 if you have the <assert.h> header file. */
@@ -37,9 +37,6 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
-/* Define to 1 if you have the `floor' function. */
-#undef HAVE_FLOOR
-
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#undef HAVE_FSEEKO
@@ -62,45 +59,21 @@
machine */
#undef HAVE_IEEEFP
-/* Define to 1 if the system has the type `int16'. */
-#undef HAVE_INT16
-
-/* Define to 1 if the system has the type `int32'. */
-#undef HAVE_INT32
-
-/* Define to 1 if the system has the type `int8'. */
-#undef HAVE_INT8
-
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <io.h> header file. */
#undef HAVE_IO_H
-/* Define to 1 if you have the `isascii' function. */
-#undef HAVE_ISASCII
-
/* Define to 1 if you have the `jbg_newlen' function. */
#undef HAVE_JBG_NEWLEN
/* Define to 1 if you have the `lfind' function. */
#undef HAVE_LFIND
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
-
-/* Define to 1 if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
/* Define to 1 if you have the `mmap' function. */
#undef HAVE_MMAP
@@ -110,9 +83,6 @@
/* Define to 1 if you have the <OpenGL/gl.h> header file. */
#undef HAVE_OPENGL_GL_H
-/* Define to 1 if you have the `pow' function. */
-#undef HAVE_POW
-
/* Define if you have POSIX threads libraries and header files. */
#undef HAVE_PTHREAD
@@ -125,9 +95,6 @@
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
-/* Define to 1 if you have the `sqrt' function. */
-#undef HAVE_SQRT
-
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
@@ -137,24 +104,18 @@
/* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
/* 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 `strrchr' function. */
-#undef HAVE_STRRCHR
-
-/* Define to 1 if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
/* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL
@@ -164,9 +125,6 @@
/* 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/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
@@ -259,9 +217,6 @@
/* The size of `signed long long', as computed by sizeof. */
#undef SIZEOF_SIGNED_LONG_LONG
-/* The size of `signed short', as computed by sizeof. */
-#undef SIZEOF_SIGNED_SHORT
-
/* The size of `size_t', as computed by sizeof. */
#undef SIZEOF_SIZE_T
@@ -277,9 +232,6 @@
/* The size of `unsigned long long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG_LONG
-/* The size of `unsigned short', as computed by sizeof. */
-#undef SIZEOF_UNSIGNED_SHORT
-
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -362,6 +314,9 @@
/* Version number of package */
#undef VERSION
+/* Support webp compression */
+#undef WEBP_SUPPORT
+
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
@@ -380,6 +335,9 @@
/* Support Deflate compression */
#undef ZIP_SUPPORT
+/* Support zstd compression */
+#undef ZSTD_SUPPORT
+
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
diff --git a/tiff/libtiff/tif_config.wince.h b/tiff/libtiff/tif_config.wince.h
index 94e92bbf..e85e2e62 100644
--- a/tiff/libtiff/tif_config.wince.h
+++ b/tiff/libtiff/tif_config.wince.h
@@ -1,5 +1,3 @@
-/* $Id: tif_config.wince.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */
-
/*
* TIFF library configuration header for Windows CE platform.
*/
diff --git a/tiff/libtiff/tif_dir.c b/tiff/libtiff/tif_dir.c
index f00f8080..1e0a76c3 100644
--- a/tiff/libtiff/tif_dir.c
+++ b/tiff/libtiff/tif_dir.c
@@ -1,5 +1,3 @@
-/* $Id: tif_dir.c,v 1.131 2017-07-11 21:38:04 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -31,7 +29,6 @@
* (and also some miscellaneous stuff)
*/
#include "tiffiop.h"
-#include <float.h>
/*
* These are used in the backwards compatibility code...
@@ -49,8 +46,8 @@ setByteArray(void** vpp, void* vp, size_t nmemb, size_t elem_size)
*vpp = 0;
}
if (vp) {
- tmsize_t bytes = (tmsize_t)(nmemb * elem_size);
- if (elem_size && bytes / elem_size == nmemb)
+ tmsize_t bytes = _TIFFMultiplySSize(NULL, nmemb, elem_size, NULL);
+ if (bytes)
*vpp = (void*) _TIFFmalloc(bytes);
if (*vpp)
_TIFFmemcpy(*vpp, vp, bytes);
@@ -90,13 +87,15 @@ setDoubleArrayOneValue(double** vpp, double value, size_t nmemb)
* Install extra samples information.
*/
static int
-setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v)
+setExtraSamples(TIFF* tif, va_list ap, uint32* v)
{
/* XXX: Unassociated alpha data == 999 is a known Corel Draw bug, see below */
#define EXTRASAMPLE_COREL_UNASSALPHA 999
uint16* va;
uint32 i;
+ TIFFDirectory* td = &tif->tif_dir;
+ static const char module[] = "setExtraSamples";
*v = (uint16) va_arg(ap, uint16_vap);
if ((uint16) *v > td->td_samplesperpixel)
@@ -118,6 +117,18 @@ setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v)
return 0;
}
}
+
+ if ( td->td_transferfunction[0] != NULL && (td->td_samplesperpixel - *v > 1) &&
+ !(td->td_samplesperpixel - td->td_extrasamples > 1))
+ {
+ TIFFWarningExt(tif->tif_clientdata,module,
+ "ExtraSamples tag value is changing, "
+ "but TransferFunction was read with a different value. Cancelling it");
+ TIFFClrFieldBit(tif,FIELD_TRANSFERFUNCTION);
+ _TIFFfree(td->td_transferfunction[0]);
+ td->td_transferfunction[0] = NULL;
+ }
+
td->td_extrasamples = (uint16) *v;
_TIFFsetShortArray(&td->td_sampleinfo, va, td->td_extrasamples);
return 1;
@@ -155,15 +166,6 @@ bad:
return (0);
}
-static float TIFFClampDoubleToFloat( double val )
-{
- if( val > FLT_MAX )
- return FLT_MAX;
- if( val < -FLT_MAX )
- return -FLT_MAX;
- return (float)val;
-}
-
static int
_TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
{
@@ -287,6 +289,18 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
_TIFFfree(td->td_smaxsamplevalue);
td->td_smaxsamplevalue = NULL;
}
+ /* Test if 3 transfer functions instead of just one are now needed
+ See http://bugzilla.maptools.org/show_bug.cgi?id=2820 */
+ if( td->td_transferfunction[0] != NULL && (v - td->td_extrasamples > 1) &&
+ !(td->td_samplesperpixel - td->td_extrasamples > 1))
+ {
+ TIFFWarningExt(tif->tif_clientdata,module,
+ "SamplesPerPixel tag value is changing, "
+ "but TransferFunction was read with a different value. Cancelling it");
+ TIFFClrFieldBit(tif,FIELD_TRANSFERFUNCTION);
+ _TIFFfree(td->td_transferfunction[0]);
+ td->td_transferfunction[0] = NULL;
+ }
}
td->td_samplesperpixel = (uint16) v;
break;
@@ -322,13 +336,13 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
dblval = va_arg(ap, double);
if( dblval < 0 )
goto badvaluedouble;
- td->td_xresolution = TIFFClampDoubleToFloat( dblval );
+ td->td_xresolution = _TIFFClampDoubleToFloat( dblval );
break;
case TIFFTAG_YRESOLUTION:
dblval = va_arg(ap, double);
if( dblval < 0 )
goto badvaluedouble;
- td->td_yresolution = TIFFClampDoubleToFloat( dblval );
+ td->td_yresolution = _TIFFClampDoubleToFloat( dblval );
break;
case TIFFTAG_PLANARCONFIG:
v = (uint16) va_arg(ap, uint16_vap);
@@ -337,10 +351,10 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
td->td_planarconfig = (uint16) v;
break;
case TIFFTAG_XPOSITION:
- td->td_xposition = TIFFClampDoubleToFloat( va_arg(ap, double) );
+ td->td_xposition = _TIFFClampDoubleToFloat( va_arg(ap, double) );
break;
case TIFFTAG_YPOSITION:
- td->td_yposition = TIFFClampDoubleToFloat( va_arg(ap, double) );
+ td->td_yposition = _TIFFClampDoubleToFloat( va_arg(ap, double) );
break;
case TIFFTAG_RESOLUTIONUNIT:
v = (uint16) va_arg(ap, uint16_vap);
@@ -363,7 +377,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
_TIFFsetShortArray(&td->td_colormap[2], va_arg(ap, uint16*), v32);
break;
case TIFFTAG_EXTRASAMPLES:
- if (!setExtraSamples(td, ap, &v))
+ if (!setExtraSamples(tif, ap, &v))
goto badvalue;
break;
case TIFFTAG_MATTEING:
@@ -686,7 +700,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
case TIFF_SRATIONAL:
case TIFF_FLOAT:
{
- float v2 = TIFFClampDoubleToFloat(va_arg(ap, double));
+ float v2 = _TIFFClampDoubleToFloat(va_arg(ap, double));
_TIFFmemcpy(val, &v2, tv_size);
}
break;
@@ -863,14 +877,24 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap)
const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY);
if( fip == NULL ) /* cannot happen since TIFFGetField() already checks it */
return 0;
+
+ /*
+ * We want to force the custom code to be used for custom
+ * fields even if the tag happens to match a well known
+ * one - important for reinterpreted handling of standard
+ * tag values in custom directories (i.e. EXIF)
+ */
+ if (fip->field_bit == FIELD_CUSTOM) {
+ standard_tag = 0;
+ }
- if( tag == TIFFTAG_NUMBEROFINKS )
+ if( standard_tag == TIFFTAG_NUMBEROFINKS )
{
int i;
for (i = 0; i < td->td_customValueCount; i++) {
uint16 val;
TIFFTagValue *tv = td->td_customValues + i;
- if (tv->info->field_tag != tag)
+ if (tv->info->field_tag != standard_tag)
continue;
if( tv->value == NULL )
return 0;
@@ -892,16 +916,6 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap)
return 0;
}
- /*
- * We want to force the custom code to be used for custom
- * fields even if the tag happens to match a well known
- * one - important for reinterpreted handling of standard
- * tag values in custom directories (i.e. EXIF)
- */
- if (fip->field_bit == FIELD_CUSTOM) {
- standard_tag = 0;
- }
-
switch (standard_tag) {
case TIFFTAG_SUBFILETYPE:
*va_arg(ap, uint32*) = td->td_subfiletype;
@@ -1004,12 +1018,12 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap)
case TIFFTAG_STRIPOFFSETS:
case TIFFTAG_TILEOFFSETS:
_TIFFFillStriles( tif );
- *va_arg(ap, uint64**) = td->td_stripoffset;
+ *va_arg(ap, uint64**) = td->td_stripoffset_p;
break;
case TIFFTAG_STRIPBYTECOUNTS:
case TIFFTAG_TILEBYTECOUNTS:
_TIFFFillStriles( tif );
- *va_arg(ap, uint64**) = td->td_stripbytecount;
+ *va_arg(ap, uint64**) = td->td_stripbytecount_p;
break;
case TIFFTAG_MATTEING:
*va_arg(ap, uint16*) =
@@ -1067,6 +1081,9 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap)
if (td->td_samplesperpixel - td->td_extrasamples > 1) {
*va_arg(ap, uint16**) = td->td_transferfunction[1];
*va_arg(ap, uint16**) = td->td_transferfunction[2];
+ } else {
+ *va_arg(ap, uint16**) = NULL;
+ *va_arg(ap, uint16**) = NULL;
}
break;
case TIFFTAG_REFERENCEBLACKWHITE:
@@ -1265,8 +1282,9 @@ TIFFFreeDirectory(TIFF* tif)
CleanupField(td_transferfunction[0]);
CleanupField(td_transferfunction[1]);
CleanupField(td_transferfunction[2]);
- CleanupField(td_stripoffset);
- CleanupField(td_stripbytecount);
+ CleanupField(td_stripoffset_p);
+ CleanupField(td_stripbytecount_p);
+ td->td_stripoffsetbyteallocsize = 0;
TIFFClrFieldBit(tif, FIELD_YCBCRSUBSAMPLING);
TIFFClrFieldBit(tif, FIELD_YCBCRPOSITIONING);
@@ -1279,10 +1297,8 @@ TIFFFreeDirectory(TIFF* tif)
td->td_customValueCount = 0;
CleanupField(td_customValues);
-#if defined(DEFER_STRILE_LOAD)
_TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry));
_TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry));
-#endif
}
#undef CleanupField
@@ -1370,7 +1386,9 @@ TIFFDefaultDirectory(TIFF* tif)
td->td_tilewidth = 0;
td->td_tilelength = 0;
td->td_tiledepth = 1;
+#ifdef STRIPBYTECOUNTSORTED_UNUSED
td->td_stripbytecountsorted = 1; /* Our own arrays always sorted. */
+#endif
td->td_resolutionunit = RESUNIT_INCH;
td->td_sampleformat = SAMPLEFORMAT_UINT;
td->td_imagedepth = 1;
diff --git a/tiff/libtiff/tif_dir.h b/tiff/libtiff/tif_dir.h
index 5a380767..e7f06673 100644
--- a/tiff/libtiff/tif_dir.h
+++ b/tiff/libtiff/tif_dir.h
@@ -1,5 +1,3 @@
-/* $Id: tif_dir.h,v 1.55 2017-06-01 12:44:04 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -26,6 +24,10 @@
#ifndef _TIFFDIR_
#define _TIFFDIR_
+
+#include "tiff.h"
+#include "tiffio.h"
+
/*
* ``Library-private'' Directory-related Definitions.
*/
@@ -56,6 +58,7 @@ typedef struct {
uint32 toff_long;
uint64 toff_long8;
} tdir_offset; /* either offset or the data itself if fits */
+ uint8 tdir_ignore; /* flag status to ignore tag when parsing tags in tif_dirread.c */
} TIFFDirEntry;
/*
@@ -95,13 +98,14 @@ typedef struct {
* number of striles */
uint32 td_stripsperimage;
uint32 td_nstrips; /* size of offset & bytecount arrays */
- uint64* td_stripoffset;
- uint64* td_stripbytecount;
+ uint64* td_stripoffset_p; /* should be accessed with TIFFGetStrileOffset */
+ uint64* td_stripbytecount_p; /* should be accessed with TIFFGetStrileByteCount */
+ uint32 td_stripoffsetbyteallocsize; /* number of elements currently allocated for td_stripoffset/td_stripbytecount. Only used if TIFF_LAZYSTRILELOAD is set */
+#ifdef STRIPBYTECOUNTSORTED_UNUSED
int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */
-#if defined(DEFER_STRILE_LOAD)
+#endif
TIFFDirEntry td_stripoffset_entry; /* for deferred loading */
TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */
-#endif
uint16 td_nsubifd;
uint64* td_subifd;
/* YCbCr parameters */
@@ -116,6 +120,8 @@ typedef struct {
int td_customValueCount;
TIFFTagValue *td_customValues;
+
+ unsigned char td_deferstrilearraywriting; /* see TIFFDeferStrileArrayWriting() */
} TIFFDirectory;
/*
diff --git a/tiff/libtiff/tif_dirinfo.c b/tiff/libtiff/tif_dirinfo.c
index 4904f540..e1f6b23e 100644
--- a/tiff/libtiff/tif_dirinfo.c
+++ b/tiff/libtiff/tif_dirinfo.c
@@ -1,5 +1,3 @@
-/* $Id: tif_dirinfo.c,v 1.127 2017-06-01 12:44:04 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -979,6 +977,8 @@ _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag)
case TIFFTAG_CONSECUTIVEBADFAXLINES:
case TIFFTAG_GROUP3OPTIONS:
case TIFFTAG_GROUP4OPTIONS:
+ /* LERC */
+ case TIFFTAG_LERC_PARAMETERS:
break;
default:
return 1;
@@ -1054,7 +1054,18 @@ _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag)
if (tag == TIFFTAG_PREDICTOR)
return 1;
break;
-
+ case COMPRESSION_ZSTD:
+ if (tag == TIFFTAG_PREDICTOR)
+ return 1;
+ break;
+ case COMPRESSION_LERC:
+ if (tag == TIFFTAG_LERC_PARAMETERS)
+ return 1;
+ break;
+ case COMPRESSION_WEBP:
+ if (tag == TIFFTAG_PREDICTOR)
+ return 1;
+ break;
}
return 0;
}
diff --git a/tiff/libtiff/tif_dirread.c b/tiff/libtiff/tif_dirread.c
index 5e62e813..6f909413 100644
--- a/tiff/libtiff/tif_dirread.c
+++ b/tiff/libtiff/tif_dirread.c
@@ -1,5 +1,3 @@
-/* $Id: tif_dirread.c,v 1.218 2017-09-09 21:44:42 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -31,9 +29,6 @@
*/
/* Suggested pending improvements:
- * - add a field 'ignore' to the TIFFDirEntry structure, to flag status,
- * eliminating current use of the IGNORE value, and therefore eliminating
- * current irrational behaviour on tags with tag id code 0
* - add a field 'field_info' to the TIFFDirEntry structure, and set that with
* the pointer to the appropriate TIFFField structure early on in
* TIFFReadDirectory, so as to eliminate current possibly repetitive lookup.
@@ -43,9 +38,13 @@
#include <float.h>
#include <stdlib.h>
-#define IGNORE 0 /* tag placeholder used below */
#define FAILED_FII ((uint32) -1)
+/*
+ * Largest 64-bit signed integer value.
+ */
+#define TIFF_INT64_MAX ((int64)(TIFF_UINT64_MAX >> 1))
+
#ifdef HAVE_IEEEFP
# define TIFFCvtIEEEFloatToNative(tif, n, fp)
# define TIFFCvtIEEEDoubleToNative(tif, n, dp)
@@ -166,7 +165,9 @@ static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*, int recover);
static int TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, uint32 nstrips, uint64** lpp);
static int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*);
static void ChopUpSingleUncompressedStrip(TIFF*);
+static void TryChopUpUncompressedBigTiff(TIFF*);
static uint64 TIFFReadUInt64(const uint8 *value);
+static int _TIFFGetMaxColorChannels(uint16 photometric);
static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount );
@@ -206,6 +207,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryByte(TIFF* tif, TIFFDirEntry* di
switch (direntry->tdir_type)
{
case TIFF_BYTE:
+ case TIFF_UNDEFINED: /* Support to read TIFF_UNDEFINED with field_readcount==1 */
TIFFReadDirEntryCheckedByte(tif,direntry,value);
return(TIFFReadDirEntryErrOk);
case TIFF_SBYTE:
@@ -776,7 +778,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryIfd8(TIFF* tif, TIFFDirEntry* di
static enum TIFFReadDirEntryErr TIFFReadDirEntryDataAndRealloc(
TIFF* tif, uint64 offset, tmsize_t size, void** pdest)
{
-#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8
+#if SIZEOF_SIZE_T == 8
tmsize_t threshold = INITIAL_THRESHOLD;
#endif
tmsize_t already_read = 0;
@@ -797,7 +799,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryDataAndRealloc(
void* new_dest;
tmsize_t bytes_read;
tmsize_t to_read = size - already_read;
-#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8
+#if SIZEOF_SIZE_T == 8
if( to_read >= threshold && threshold < MAX_THRESHOLD )
{
to_read = threshold;
@@ -3288,11 +3290,6 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSlong(int32 value)
return(TIFFReadDirEntryErrOk);
}
-/*
- * Largest 32-bit unsigned integer value.
- */
-#define TIFF_UINT32_MAX 0xFFFFFFFFU
-
static enum TIFFReadDirEntryErr
TIFFReadDirEntryCheckRangeLongLong8(uint64 value)
{
@@ -3311,8 +3308,6 @@ TIFFReadDirEntryCheckRangeLongSlong8(int64 value)
return(TIFFReadDirEntryErrOk);
}
-#undef TIFF_UINT32_MAX
-
static enum TIFFReadDirEntryErr
TIFFReadDirEntryCheckRangeSlongLong(uint32 value)
{
@@ -3378,11 +3373,6 @@ TIFFReadDirEntryCheckRangeLong8Slong8(int64 value)
return(TIFFReadDirEntryErrOk);
}
-/*
- * Largest 64-bit signed integer value.
- */
-#define TIFF_INT64_MAX ((int64)(((uint64) ~0) >> 1))
-
static enum TIFFReadDirEntryErr
TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value)
{
@@ -3392,8 +3382,6 @@ TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value)
return(TIFFReadDirEntryErrOk);
}
-#undef TIFF_INT64_MAX
-
static enum TIFFReadDirEntryErr
TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest)
{
@@ -3406,13 +3394,13 @@ TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest)
} else {
size_t ma,mb;
ma=(size_t)offset;
+ if( (uint64)ma!=offset ||
+ ma > (~(size_t)0) - (size_t)size )
+ {
+ return TIFFReadDirEntryErrIo;
+ }
mb=ma+size;
- if (((uint64)ma!=offset)
- || (mb < ma)
- || (mb - ma != (size_t) size)
- || (mb < (size_t)size)
- || (mb > (size_t)tif->tif_size)
- )
+ if (mb > (size_t)tif->tif_size)
return(TIFFReadDirEntryErrIo);
_TIFFmemcpy(dest,tif->tif_base+ma,size);
}
@@ -3507,6 +3495,78 @@ static void TIFFReadDirEntryOutputErr(TIFF* tif, enum TIFFReadDirEntryErr err, c
}
/*
+ * Return the maximum number of color channels specified for a given photometric
+ * type. 0 is returned if photometric type isn't supported or no default value
+ * is defined by the specification.
+ */
+static int _TIFFGetMaxColorChannels( uint16 photometric )
+{
+ switch (photometric) {
+ case PHOTOMETRIC_PALETTE:
+ case PHOTOMETRIC_MINISWHITE:
+ case PHOTOMETRIC_MINISBLACK:
+ return 1;
+ case PHOTOMETRIC_YCBCR:
+ case PHOTOMETRIC_RGB:
+ case PHOTOMETRIC_CIELAB:
+ case PHOTOMETRIC_LOGLUV:
+ case PHOTOMETRIC_ITULAB:
+ case PHOTOMETRIC_ICCLAB:
+ return 3;
+ case PHOTOMETRIC_SEPARATED:
+ case PHOTOMETRIC_MASK:
+ return 4;
+ case PHOTOMETRIC_LOGL:
+ case PHOTOMETRIC_CFA:
+ default:
+ return 0;
+ }
+}
+
+static int ByteCountLooksBad(TIFF* tif)
+{
+ /*
+ * Assume we have wrong StripByteCount value (in case
+ * of single strip) in following cases:
+ * - it is equal to zero along with StripOffset;
+ * - it is larger than file itself (in case of uncompressed
+ * image);
+ * - it is smaller than the size of the bytes per row
+ * multiplied on the number of rows. The last case should
+ * not be checked in the case of writing new image,
+ * because we may do not know the exact strip size
+ * until the whole image will be written and directory
+ * dumped out.
+ */
+ uint64 bytecount = TIFFGetStrileByteCount(tif, 0);
+ uint64 offset = TIFFGetStrileOffset(tif, 0);
+ uint64 filesize;
+
+ if( offset == 0 )
+ return 0;
+ if (bytecount == 0)
+ return 1;
+ if ( tif->tif_dir.td_compression != COMPRESSION_NONE )
+ return 0;
+ filesize = TIFFGetFileSize(tif);
+ if( offset <= filesize && bytecount > filesize - offset )
+ return 1;
+ if( tif->tif_mode == O_RDONLY )
+ {
+ uint64 scanlinesize = TIFFScanlineSize64(tif);
+ if( tif->tif_dir.td_imagelength > 0 &&
+ scanlinesize > TIFF_UINT64_MAX / tif->tif_dir.td_imagelength )
+ {
+ return 1;
+ }
+ if( bytecount < scanlinesize * tif->tif_dir.td_imagelength)
+ return 1;
+ }
+ return 0;
+}
+
+
+/*
* Read the next TIFF directory from a file and convert it to the internal
* format. We read directories sequentially.
*/
@@ -3522,6 +3582,7 @@ TIFFReadDirectory(TIFF* tif)
uint32 fii=FAILED_FII;
toff_t nextdiroff;
int bitspersample_read = FALSE;
+ int color_channels;
tif->tif_diroff=tif->tif_nextdiroff;
if (!TIFFCheckDirOffset(tif,tif->tif_nextdiroff))
@@ -3551,14 +3612,17 @@ TIFFReadDirectory(TIFF* tif)
uint16 nb;
for (na=ma+1, nb=mb+1; nb<dircount; na++, nb++)
{
- if (ma->tdir_tag==na->tdir_tag)
- na->tdir_tag=IGNORE;
+ if (ma->tdir_tag == na->tdir_tag) {
+ na->tdir_ignore = TRUE;
+ }
}
}
}
tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */
tif->tif_flags &= ~TIFF_BUF4WRITE; /* reset before new dir */
+ tif->tif_flags &= ~TIFF_CHOPPEDUPARRAYS;
+
/* free any old stuff and reinit */
TIFFFreeDirectory(tif);
TIFFDefaultDirectory(tif);
@@ -3591,7 +3655,7 @@ TIFFReadDirectory(TIFF* tif)
{
if (!TIFFFetchNormalTag(tif,dp,0))
goto bad;
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
}
dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_COMPRESSION);
if (dp)
@@ -3614,7 +3678,7 @@ TIFFReadDirectory(TIFF* tif)
}
if (!TIFFSetField(tif,TIFFTAG_COMPRESSION,value))
goto bad;
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
}
else
{
@@ -3626,7 +3690,7 @@ TIFFReadDirectory(TIFF* tif)
*/
for (di=0, dp=dir; di<dircount; di++, dp++)
{
- if (dp->tdir_tag!=IGNORE)
+ if (!dp->tdir_ignore)
{
TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii);
if (fii == FAILED_FII)
@@ -3634,8 +3698,8 @@ TIFFReadDirectory(TIFF* tif)
TIFFWarningExt(tif->tif_clientdata, module,
"Unknown field with tag %d (0x%x) encountered",
dp->tdir_tag,dp->tdir_tag);
- /* the following knowingly leaks the
- anonymous field structure */
+ /* the following knowingly leaks the
+ anonymous field structure */
if (!_TIFFMergeFields(tif,
_TIFFCreateAnonField(tif,
dp->tdir_tag,
@@ -3646,18 +3710,18 @@ TIFFReadDirectory(TIFF* tif)
"Registering anonymous field with tag %d (0x%x) failed",
dp->tdir_tag,
dp->tdir_tag);
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
} else {
TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii);
assert(fii != FAILED_FII);
}
}
}
- if (dp->tdir_tag!=IGNORE)
+ if (!dp->tdir_ignore)
{
fip=tif->tif_fields[fii];
if (fip->field_bit==FIELD_IGNORE)
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
else
{
switch (dp->tdir_tag)
@@ -3679,12 +3743,12 @@ TIFFReadDirectory(TIFF* tif)
case TIFFTAG_EXTRASAMPLES:
if (!TIFFFetchNormalTag(tif,dp,0))
goto bad;
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
+ break;
+ default:
+ if( !_TIFFCheckFieldIsValidForCodec(tif, dp->tdir_tag) )
+ dp->tdir_ignore = TRUE;
break;
- default:
- if( !_TIFFCheckFieldIsValidForCodec(tif, dp->tdir_tag) )
- dp->tdir_tag=IGNORE;
- break;
}
}
}
@@ -3700,8 +3764,8 @@ TIFFReadDirectory(TIFF* tif)
if ((tif->tif_dir.td_compression==COMPRESSION_OJPEG)&&
(tif->tif_dir.td_planarconfig==PLANARCONFIG_SEPARATE))
{
- if (!_TIFFFillStriles(tif))
- goto bad;
+ if (!_TIFFFillStriles(tif))
+ goto bad;
dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_STRIPOFFSETS);
if ((dp!=0)&&(dp->tdir_count==1))
{
@@ -3773,190 +3837,200 @@ TIFFReadDirectory(TIFF* tif)
*/
for (di=0, dp=dir; di<dircount; di++, dp++)
{
- switch (dp->tdir_tag)
- {
- case IGNORE:
- break;
- case TIFFTAG_MINSAMPLEVALUE:
- case TIFFTAG_MAXSAMPLEVALUE:
- case TIFFTAG_BITSPERSAMPLE:
- case TIFFTAG_DATATYPE:
- case TIFFTAG_SAMPLEFORMAT:
- /*
- * The MinSampleValue, MaxSampleValue, BitsPerSample
- * DataType and SampleFormat tags are supposed to be
- * written as one value/sample, but some vendors
- * incorrectly write one value only -- so we accept
- * that as well (yuck). Other vendors write correct
- * value for NumberOfSamples, but incorrect one for
- * BitsPerSample and friends, and we will read this
- * too.
- */
- {
- uint16 value;
- enum TIFFReadDirEntryErr err;
- err=TIFFReadDirEntryShort(tif,dp,&value);
- if (err==TIFFReadDirEntryErrCount)
- err=TIFFReadDirEntryPersampleShort(tif,dp,&value);
- if (err!=TIFFReadDirEntryErrOk)
- {
- fip = TIFFFieldWithTag(tif,dp->tdir_tag);
- TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0);
- goto bad;
- }
- if (!TIFFSetField(tif,dp->tdir_tag,value))
- goto bad;
- if( dp->tdir_tag == TIFFTAG_BITSPERSAMPLE )
- bitspersample_read = TRUE;
- }
- break;
- case TIFFTAG_SMINSAMPLEVALUE:
- case TIFFTAG_SMAXSAMPLEVALUE:
- {
-
- double *data = NULL;
- enum TIFFReadDirEntryErr err;
- uint32 saved_flags;
- int m;
- if (dp->tdir_count != (uint64)tif->tif_dir.td_samplesperpixel)
- err = TIFFReadDirEntryErrCount;
- else
- err = TIFFReadDirEntryDoubleArray(tif, dp, &data);
- if (err!=TIFFReadDirEntryErrOk)
- {
- fip = TIFFFieldWithTag(tif,dp->tdir_tag);
- TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0);
- goto bad;
- }
- saved_flags = tif->tif_flags;
- tif->tif_flags |= TIFF_PERSAMPLE;
- m = TIFFSetField(tif,dp->tdir_tag,data);
- tif->tif_flags = saved_flags;
- _TIFFfree(data);
- if (!m)
- goto bad;
- }
- break;
- case TIFFTAG_STRIPOFFSETS:
- case TIFFTAG_TILEOFFSETS:
-#if defined(DEFER_STRILE_LOAD)
- _TIFFmemcpy( &(tif->tif_dir.td_stripoffset_entry),
- dp, sizeof(TIFFDirEntry) );
-#else
- if( tif->tif_dir.td_stripoffset != NULL )
- {
- TIFFErrorExt(tif->tif_clientdata, module,
- "tif->tif_dir.td_stripoffset is "
- "already allocated. Likely duplicated "
- "StripOffsets/TileOffsets tag");
- goto bad;
- }
- if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripoffset))
- goto bad;
-#endif
- break;
- case TIFFTAG_STRIPBYTECOUNTS:
- case TIFFTAG_TILEBYTECOUNTS:
-#if defined(DEFER_STRILE_LOAD)
- _TIFFmemcpy( &(tif->tif_dir.td_stripbytecount_entry),
- dp, sizeof(TIFFDirEntry) );
-#else
- if( tif->tif_dir.td_stripbytecount != NULL )
- {
- TIFFErrorExt(tif->tif_clientdata, module,
- "tif->tif_dir.td_stripbytecount is "
- "already allocated. Likely duplicated "
- "StripByteCounts/TileByteCounts tag");
- goto bad;
- }
- if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripbytecount))
- goto bad;
-#endif
- break;
- case TIFFTAG_COLORMAP:
- case TIFFTAG_TRANSFERFUNCTION:
- {
- enum TIFFReadDirEntryErr err;
- uint32 countpersample;
- uint32 countrequired;
- uint32 incrementpersample;
- uint16* value=NULL;
- /* It would be dangerous to instantiate those tag values */
- /* since if td_bitspersample has not yet been read (due to */
- /* unordered tags), it could be read afterwards with a */
- /* values greater than the default one (1), which may cause */
- /* crashes in user code */
- if( !bitspersample_read )
- {
- fip = TIFFFieldWithTag(tif,dp->tdir_tag);
- TIFFWarningExt(tif->tif_clientdata,module,
- "Ignoring %s since BitsPerSample tag not found",
- fip ? fip->field_name : "unknown tagname");
- continue;
- }
- /* ColorMap or TransferFunction for high bit */
- /* depths do not make much sense and could be */
- /* used as a denial of service vector */
- if (tif->tif_dir.td_bitspersample > 24)
- {
- fip = TIFFFieldWithTag(tif,dp->tdir_tag);
- TIFFWarningExt(tif->tif_clientdata,module,
- "Ignoring %s because BitsPerSample=%d>24",
- fip ? fip->field_name : "unknown tagname",
- tif->tif_dir.td_bitspersample);
- continue;
- }
- countpersample=(1U<<tif->tif_dir.td_bitspersample);
- if ((dp->tdir_tag==TIFFTAG_TRANSFERFUNCTION)&&(dp->tdir_count==(uint64)countpersample))
+ if (!dp->tdir_ignore) {
+ switch (dp->tdir_tag)
+ {
+ case TIFFTAG_MINSAMPLEVALUE:
+ case TIFFTAG_MAXSAMPLEVALUE:
+ case TIFFTAG_BITSPERSAMPLE:
+ case TIFFTAG_DATATYPE:
+ case TIFFTAG_SAMPLEFORMAT:
+ /*
+ * The MinSampleValue, MaxSampleValue, BitsPerSample
+ * DataType and SampleFormat tags are supposed to be
+ * written as one value/sample, but some vendors
+ * incorrectly write one value only -- so we accept
+ * that as well (yuck). Other vendors write correct
+ * value for NumberOfSamples, but incorrect one for
+ * BitsPerSample and friends, and we will read this
+ * too.
+ */
{
- countrequired=countpersample;
- incrementpersample=0;
+ uint16 value;
+ enum TIFFReadDirEntryErr err;
+ err=TIFFReadDirEntryShort(tif,dp,&value);
+ if (err==TIFFReadDirEntryErrCount)
+ err=TIFFReadDirEntryPersampleShort(tif,dp,&value);
+ if (err!=TIFFReadDirEntryErrOk)
+ {
+ fip = TIFFFieldWithTag(tif,dp->tdir_tag);
+ TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0);
+ goto bad;
+ }
+ if (!TIFFSetField(tif,dp->tdir_tag,value))
+ goto bad;
+ if( dp->tdir_tag == TIFFTAG_BITSPERSAMPLE )
+ bitspersample_read = TRUE;
}
- else
+ break;
+ case TIFFTAG_SMINSAMPLEVALUE:
+ case TIFFTAG_SMAXSAMPLEVALUE:
{
- countrequired=3*countpersample;
- incrementpersample=countpersample;
+
+ double *data = NULL;
+ enum TIFFReadDirEntryErr err;
+ uint32 saved_flags;
+ int m;
+ if (dp->tdir_count != (uint64)tif->tif_dir.td_samplesperpixel)
+ err = TIFFReadDirEntryErrCount;
+ else
+ err = TIFFReadDirEntryDoubleArray(tif, dp, &data);
+ if (err!=TIFFReadDirEntryErrOk)
+ {
+ fip = TIFFFieldWithTag(tif,dp->tdir_tag);
+ TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0);
+ goto bad;
+ }
+ saved_flags = tif->tif_flags;
+ tif->tif_flags |= TIFF_PERSAMPLE;
+ m = TIFFSetField(tif,dp->tdir_tag,data);
+ tif->tif_flags = saved_flags;
+ _TIFFfree(data);
+ if (!m)
+ goto bad;
}
- if (dp->tdir_count!=(uint64)countrequired)
- err=TIFFReadDirEntryErrCount;
- else
- err=TIFFReadDirEntryShortArray(tif,dp,&value);
- if (err!=TIFFReadDirEntryErrOk)
- {
- fip = TIFFFieldWithTag(tif,dp->tdir_tag);
- TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",1);
- }
- else
+ break;
+ case TIFFTAG_STRIPOFFSETS:
+ case TIFFTAG_TILEOFFSETS:
+ _TIFFmemcpy( &(tif->tif_dir.td_stripoffset_entry),
+ dp, sizeof(TIFFDirEntry) );
+ break;
+ case TIFFTAG_STRIPBYTECOUNTS:
+ case TIFFTAG_TILEBYTECOUNTS:
+ _TIFFmemcpy( &(tif->tif_dir.td_stripbytecount_entry),
+ dp, sizeof(TIFFDirEntry) );
+ break;
+ case TIFFTAG_COLORMAP:
+ case TIFFTAG_TRANSFERFUNCTION:
{
- TIFFSetField(tif,dp->tdir_tag,value,value+incrementpersample,value+2*incrementpersample);
- _TIFFfree(value);
+ enum TIFFReadDirEntryErr err;
+ uint32 countpersample;
+ uint32 countrequired;
+ uint32 incrementpersample;
+ uint16* value=NULL;
+ /* It would be dangerous to instantiate those tag values */
+ /* since if td_bitspersample has not yet been read (due to */
+ /* unordered tags), it could be read afterwards with a */
+ /* values greater than the default one (1), which may cause */
+ /* crashes in user code */
+ if( !bitspersample_read )
+ {
+ fip = TIFFFieldWithTag(tif,dp->tdir_tag);
+ TIFFWarningExt(tif->tif_clientdata,module,
+ "Ignoring %s since BitsPerSample tag not found",
+ fip ? fip->field_name : "unknown tagname");
+ continue;
+ }
+ /* ColorMap or TransferFunction for high bit */
+ /* depths do not make much sense and could be */
+ /* used as a denial of service vector */
+ if (tif->tif_dir.td_bitspersample > 24)
+ {
+ fip = TIFFFieldWithTag(tif,dp->tdir_tag);
+ TIFFWarningExt(tif->tif_clientdata,module,
+ "Ignoring %s because BitsPerSample=%d>24",
+ fip ? fip->field_name : "unknown tagname",
+ tif->tif_dir.td_bitspersample);
+ continue;
+ }
+ countpersample=(1U<<tif->tif_dir.td_bitspersample);
+ if ((dp->tdir_tag==TIFFTAG_TRANSFERFUNCTION)&&(dp->tdir_count==(uint64)countpersample))
+ {
+ countrequired=countpersample;
+ incrementpersample=0;
+ }
+ else
+ {
+ countrequired=3*countpersample;
+ incrementpersample=countpersample;
+ }
+ if (dp->tdir_count!=(uint64)countrequired)
+ err=TIFFReadDirEntryErrCount;
+ else
+ err=TIFFReadDirEntryShortArray(tif,dp,&value);
+ if (err!=TIFFReadDirEntryErrOk)
+ {
+ fip = TIFFFieldWithTag(tif,dp->tdir_tag);
+ TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",1);
+ }
+ else
+ {
+ TIFFSetField(tif,dp->tdir_tag,value,value+incrementpersample,value+2*incrementpersample);
+ _TIFFfree(value);
+ }
}
- }
- break;
+ break;
/* BEGIN REV 4.0 COMPATIBILITY */
- case TIFFTAG_OSUBFILETYPE:
- {
- uint16 valueo;
- uint32 value;
- if (TIFFReadDirEntryShort(tif,dp,&valueo)==TIFFReadDirEntryErrOk)
+ case TIFFTAG_OSUBFILETYPE:
{
- switch (valueo)
+ uint16 valueo;
+ uint32 value;
+ if (TIFFReadDirEntryShort(tif,dp,&valueo)==TIFFReadDirEntryErrOk)
{
- case OFILETYPE_REDUCEDIMAGE: value=FILETYPE_REDUCEDIMAGE; break;
- case OFILETYPE_PAGE: value=FILETYPE_PAGE; break;
- default: value=0; break;
+ switch (valueo)
+ {
+ case OFILETYPE_REDUCEDIMAGE: value=FILETYPE_REDUCEDIMAGE; break;
+ case OFILETYPE_PAGE: value=FILETYPE_PAGE; break;
+ default: value=0; break;
+ }
+ if (value!=0)
+ TIFFSetField(tif,TIFFTAG_SUBFILETYPE,value);
}
- if (value!=0)
- TIFFSetField(tif,TIFFTAG_SUBFILETYPE,value);
}
- }
- break;
+ break;
/* END REV 4.0 COMPATIBILITY */
- default:
- (void) TIFFFetchNormalTag(tif, dp, TRUE);
- break;
- }
- }
+ default:
+ (void) TIFFFetchNormalTag(tif, dp, TRUE);
+ break;
+ }
+ } /* -- if (!dp->tdir_ignore) */
+ } /* -- for-loop -- */
+
+ if( tif->tif_mode == O_RDWR &&
+ tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 )
+ {
+ /* Directory typically created with TIFFDeferStrileArrayWriting() */
+ TIFFSetupStrips(tif);
+ }
+ else if( !(tif->tif_flags&TIFF_DEFERSTRILELOAD) )
+ {
+ if( tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 )
+ {
+ if (!TIFFFetchStripThing(tif,&(tif->tif_dir.td_stripoffset_entry),
+ tif->tif_dir.td_nstrips,
+ &tif->tif_dir.td_stripoffset_p))
+ {
+ goto bad;
+ }
+ }
+ if( tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 )
+ {
+ if (!TIFFFetchStripThing(tif,&(tif->tif_dir.td_stripbytecount_entry),
+ tif->tif_dir.td_nstrips,
+ &tif->tif_dir.td_stripbytecount_p))
+ {
+ goto bad;
+ }
+ }
+ }
+
/*
* OJPEG hack:
* - If a) compression is OJPEG, and b) photometric tag is missing,
@@ -4026,6 +4100,37 @@ TIFFReadDirectory(TIFF* tif)
}
}
}
+
+ /*
+ * Make sure all non-color channels are extrasamples.
+ * If it's not the case, define them as such.
+ */
+ color_channels = _TIFFGetMaxColorChannels(tif->tif_dir.td_photometric);
+ if (color_channels && tif->tif_dir.td_samplesperpixel - tif->tif_dir.td_extrasamples > color_channels) {
+ uint16 old_extrasamples;
+ uint16 *new_sampleinfo;
+
+ TIFFWarningExt(tif->tif_clientdata,module, "Sum of Photometric type-related "
+ "color channels and ExtraSamples doesn't match SamplesPerPixel. "
+ "Defining non-color channels as ExtraSamples.");
+
+ old_extrasamples = tif->tif_dir.td_extrasamples;
+ tif->tif_dir.td_extrasamples = (uint16) (tif->tif_dir.td_samplesperpixel - color_channels);
+
+ // sampleinfo should contain information relative to these new extra samples
+ new_sampleinfo = (uint16*) _TIFFcalloc(tif->tif_dir.td_extrasamples, sizeof(uint16));
+ if (!new_sampleinfo) {
+ TIFFErrorExt(tif->tif_clientdata, module, "Failed to allocate memory for "
+ "temporary new sampleinfo array (%d 16 bit elements)",
+ tif->tif_dir.td_extrasamples);
+ goto bad;
+ }
+
+ memcpy(new_sampleinfo, tif->tif_dir.td_sampleinfo, old_extrasamples * sizeof(uint16));
+ _TIFFsetShortArray(&tif->tif_dir.td_sampleinfo, new_sampleinfo, tif->tif_dir.td_extrasamples);
+ _TIFFfree(new_sampleinfo);
+ }
+
/*
* Verify Palette image has a Colormap.
*/
@@ -4068,33 +4173,10 @@ TIFFReadDirectory(TIFF* tif)
"\"StripByteCounts\" field, calculating from imagelength");
if (EstimateStripByteCounts(tif, dir, dircount) < 0)
goto bad;
- /*
- * Assume we have wrong StripByteCount value (in case
- * of single strip) in following cases:
- * - it is equal to zero along with StripOffset;
- * - it is larger than file itself (in case of uncompressed
- * image);
- * - it is smaller than the size of the bytes per row
- * multiplied on the number of rows. The last case should
- * not be checked in the case of writing new image,
- * because we may do not know the exact strip size
- * until the whole image will be written and directory
- * dumped out.
- */
- #define BYTECOUNTLOOKSBAD \
- ( (tif->tif_dir.td_stripbytecount[0] == 0 && tif->tif_dir.td_stripoffset[0] != 0) || \
- (tif->tif_dir.td_compression == COMPRESSION_NONE && \
- (tif->tif_dir.td_stripoffset[0] <= TIFFGetFileSize(tif) && \
- tif->tif_dir.td_stripbytecount[0] > TIFFGetFileSize(tif) - tif->tif_dir.td_stripoffset[0])) || \
- (tif->tif_mode == O_RDONLY && \
- tif->tif_dir.td_compression == COMPRESSION_NONE && \
- tif->tif_dir.td_stripbytecount[0] < TIFFScanlineSize64(tif) * tif->tif_dir.td_imagelength) )
} else if (tif->tif_dir.td_nstrips == 1
&& !(tif->tif_flags&TIFF_ISTILED)
- && _TIFFFillStriles(tif)
- && tif->tif_dir.td_stripoffset[0] != 0
- && BYTECOUNTLOOKSBAD) {
+ && ByteCountLooksBad(tif)) {
/*
* XXX: Plexus (and others) sometimes give a value of
* zero for a tag when they don't know what the
@@ -4106,13 +4188,13 @@ TIFFReadDirectory(TIFF* tif)
if(EstimateStripByteCounts(tif, dir, dircount) < 0)
goto bad;
-#if !defined(DEFER_STRILE_LOAD)
- } else if (tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG
+ } else if (!(tif->tif_flags&TIFF_DEFERSTRILELOAD)
+ && tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG
&& tif->tif_dir.td_nstrips > 2
&& tif->tif_dir.td_compression == COMPRESSION_NONE
- && tif->tif_dir.td_stripbytecount[0] != tif->tif_dir.td_stripbytecount[1]
- && tif->tif_dir.td_stripbytecount[0] != 0
- && tif->tif_dir.td_stripbytecount[1] != 0 ) {
+ && TIFFGetStrileByteCount(tif, 0) != TIFFGetStrileByteCount(tif, 1)
+ && TIFFGetStrileByteCount(tif, 0) != 0
+ && TIFFGetStrileByteCount(tif, 1) != 0 ) {
/*
* XXX: Some vendors fill StripByteCount array with
* absolutely wrong values (it can be equal to
@@ -4127,7 +4209,6 @@ TIFFReadDirectory(TIFF* tif)
"Wrong \"StripByteCounts\" field, ignoring and calculating from imagelength");
if (EstimateStripByteCounts(tif, dir, dircount) < 0)
goto bad;
-#endif /* !defined(DEFER_STRILE_LOAD) */
}
}
if (dir)
@@ -4142,26 +4223,27 @@ TIFFReadDirectory(TIFF* tif)
else
tif->tif_dir.td_maxsamplevalue = (uint16)((1L<<tif->tif_dir.td_bitspersample)-1);
}
+
+#ifdef STRIPBYTECOUNTSORTED_UNUSED
/*
* XXX: We can optimize checking for the strip bounds using the sorted
* bytecounts array. See also comments for TIFFAppendToStrip()
* function in tif_write.c.
*/
-#if !defined(DEFER_STRILE_LOAD)
- if (tif->tif_dir.td_nstrips > 1) {
+ if (!(tif->tif_flags&TIFF_DEFERSTRILELOAD) && tif->tif_dir.td_nstrips > 1) {
uint32 strip;
tif->tif_dir.td_stripbytecountsorted = 1;
for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) {
- if (tif->tif_dir.td_stripoffset[strip - 1] >
- tif->tif_dir.td_stripoffset[strip]) {
+ if (TIFFGetStrileOffset(tif, strip - 1) >
+ TIFFGetStrileOffset(tif, strip)) {
tif->tif_dir.td_stripbytecountsorted = 0;
break;
}
}
}
-#endif /* !defined(DEFER_STRILE_LOAD) */
-
+#endif
+
/*
* An opportunity for compression mode dependent tag fixup
*/
@@ -4180,11 +4262,20 @@ TIFFReadDirectory(TIFF* tif)
(tif->tif_dir.td_nstrips==1)&&
(tif->tif_dir.td_compression==COMPRESSION_NONE)&&
((tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED))==TIFF_STRIPCHOP))
- {
- if ( !_TIFFFillStriles(tif) || !tif->tif_dir.td_stripbytecount )
- return 0;
- ChopUpSingleUncompressedStrip(tif);
- }
+ {
+ ChopUpSingleUncompressedStrip(tif);
+ }
+
+ /* There are also uncompressed striped files with strips larger than */
+ /* 2 GB, which make them unfriendly with a lot of code. If possible, */
+ /* try to expose smaller "virtual" strips. */
+ if( tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG &&
+ tif->tif_dir.td_compression == COMPRESSION_NONE &&
+ (tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP &&
+ TIFFStripSize64(tif) > 0x7FFFFFFFUL )
+ {
+ TryChopUpUncompressedBigTiff(tif);
+ }
/*
* Clear the dirty directory flag.
@@ -4336,17 +4427,17 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff,
TIFFWarningExt(tif->tif_clientdata, module,
"Registering anonymous field with tag %d (0x%x) failed",
dp->tdir_tag, dp->tdir_tag);
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
} else {
TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii);
assert( fii != FAILED_FII );
}
}
- if (dp->tdir_tag!=IGNORE)
+ if (!dp->tdir_ignore)
{
fip=tif->tif_fields[fii];
if (fip->field_bit==FIELD_IGNORE)
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
else
{
/* check data type */
@@ -4366,7 +4457,7 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff,
TIFFWarningExt(tif->tif_clientdata, module,
"Wrong data type %d for \"%s\"; tag ignored",
dp->tdir_type,fip->field_name);
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
}
else
{
@@ -4380,21 +4471,21 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff,
else
expected=(uint32)fip->field_readcount;
if (!CheckDirCount(tif,dp,expected))
- dp->tdir_tag=IGNORE;
+ dp->tdir_ignore = TRUE;
}
}
}
- switch (dp->tdir_tag)
- {
- case IGNORE:
- break;
- case EXIFTAG_SUBJECTDISTANCE:
- (void) TIFFFetchSubjectDistance(tif,dp);
- break;
- default:
- (void) TIFFFetchNormalTag(tif, dp, TRUE);
- break;
- }
+ if (!dp->tdir_ignore) {
+ switch (dp->tdir_tag)
+ {
+ case EXIFTAG_SUBJECTDISTANCE:
+ (void)TIFFFetchSubjectDistance(tif, dp);
+ break;
+ default:
+ (void)TIFFFetchNormalTag(tif, dp, TRUE);
+ break;
+ }
+ } /*-- if (!dp->tdir_ignore) */
}
}
if (dir)
@@ -4427,12 +4518,12 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
if( !_TIFFFillStrilesInternal( tif, 0 ) )
return -1;
- if (td->td_stripbytecount)
- _TIFFfree(td->td_stripbytecount);
- td->td_stripbytecount = (uint64*)
+ if (td->td_stripbytecount_p)
+ _TIFFfree(td->td_stripbytecount_p);
+ td->td_stripbytecount_p = (uint64*)
_TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64),
"for \"StripByteCounts\" array");
- if( td->td_stripbytecount == NULL )
+ if( td->td_stripbytecount_p == NULL )
return -1;
if (td->td_compression != COMPRESSION_NONE) {
@@ -4456,6 +4547,8 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
dp->tdir_type);
return -1;
}
+ if( dp->tdir_count > TIFF_UINT64_MAX / typewidth )
+ return -1;
datasize=(uint64)typewidth*dp->tdir_count;
if (!(tif->tif_flags&TIFF_BIGTIFF))
{
@@ -4467,6 +4560,8 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
if (datasize<=8)
datasize=0;
}
+ if( space > TIFF_UINT64_MAX - datasize )
+ return -1;
space+=datasize;
}
if( filesize < space )
@@ -4477,7 +4572,7 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
space /= td->td_samplesperpixel;
for (strip = 0; strip < td->td_nstrips; strip++)
- td->td_stripbytecount[strip] = space;
+ td->td_stripbytecount_p[strip] = space;
/*
* This gross hack handles the case were the offset to
* the last strip is past the place where we think the strip
@@ -4486,18 +4581,30 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
* of data in the strip and trim this number back accordingly.
*/
strip--;
- if (td->td_stripoffset[strip]+td->td_stripbytecount[strip] > filesize)
- td->td_stripbytecount[strip] = filesize - td->td_stripoffset[strip];
+ if (td->td_stripoffset_p[strip] > TIFF_UINT64_MAX - td->td_stripbytecount_p[strip])
+ return -1;
+ if (td->td_stripoffset_p[strip]+td->td_stripbytecount_p[strip] > filesize) {
+ if( td->td_stripoffset_p[strip] >= filesize ) {
+ /* Not sure what we should in that case... */
+ td->td_stripbytecount_p[strip] = 0;
+ } else {
+ td->td_stripbytecount_p[strip] = filesize - td->td_stripoffset_p[strip];
+ }
+ }
} else if (isTiled(tif)) {
uint64 bytespertile = TIFFTileSize64(tif);
for (strip = 0; strip < td->td_nstrips; strip++)
- td->td_stripbytecount[strip] = bytespertile;
+ td->td_stripbytecount_p[strip] = bytespertile;
} else {
uint64 rowbytes = TIFFScanlineSize64(tif);
uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage;
for (strip = 0; strip < td->td_nstrips; strip++)
- td->td_stripbytecount[strip] = rowbytes * rowsperstrip;
+ {
+ if( rowbytes > 0 && rowsperstrip > TIFF_UINT64_MAX / rowbytes )
+ return -1;
+ td->td_stripbytecount_p[strip] = rowbytes * rowsperstrip;
+ }
}
TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS);
if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP))
@@ -4691,12 +4798,13 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir,
}
} else {
tmsize_t m;
- tmsize_t off = (tmsize_t) tif->tif_diroff;
- if ((uint64)off!=tif->tif_diroff)
+ tmsize_t off;
+ if (tif->tif_diroff > (uint64)TIFF_INT64_MAX)
{
TIFFErrorExt(tif->tif_clientdata,module,"Can not read TIFF directory count");
return(0);
}
+ off = (tmsize_t) tif->tif_diroff;
/*
* Check for integer overflow when validating the dir_off,
@@ -4814,6 +4922,7 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir,
mb=dir;
for (n=0; n<dircount16; n++)
{
+ mb->tdir_ignore = FALSE;
if (tif->tif_flags&TIFF_SWAB)
TIFFSwabShort((uint16*)ma);
mb->tdir_tag=*(uint16*)ma;
@@ -4828,6 +4937,7 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir,
TIFFSwabLong((uint32*)ma);
mb->tdir_count=(uint64)(*(uint32*)ma);
ma+=sizeof(uint32);
+ mb->tdir_offset.toff_long8=0;
*(uint32*)(&mb->tdir_offset)=*(uint32*)ma;
ma+=sizeof(uint32);
}
@@ -4881,17 +4991,18 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover)
err=TIFFReadDirEntryByteArray(tif,dp,&data);
if (err==TIFFReadDirEntryErrOk)
{
- uint8* ma;
- uint32 mb;
+ uint32 mb = 0;
int n;
- ma=data;
- mb=0;
- while (mb<(uint32)dp->tdir_count)
+ if (data != NULL)
{
- if (*ma==0)
- break;
- ma++;
- mb++;
+ uint8* ma = data;
+ while (mb<(uint32)dp->tdir_count)
+ {
+ if (*ma==0)
+ break;
+ ma++;
+ mb++;
+ }
}
if (mb+1<(uint32)dp->tdir_count)
TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" contains null byte in value; value incorrectly truncated during reading due to implementation limitations",fip->field_name);
@@ -5141,11 +5252,11 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover)
if (err==TIFFReadDirEntryErrOk)
{
int m;
- if( dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' )
- {
- TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name);
- data[dp->tdir_count-1] = '\0';
- }
+ if( data != 0 && dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' )
+ {
+ TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name);
+ data[dp->tdir_count-1] = '\0';
+ }
m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data);
if (data!=0)
_TIFFfree(data);
@@ -5318,11 +5429,11 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover)
if (err==TIFFReadDirEntryErrOk)
{
int m;
- if( dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' )
- {
- TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name);
- data[dp->tdir_count-1] = '\0';
- }
+ if( data != 0 && dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' )
+ {
+ TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name);
+ data[dp->tdir_count-1] = '\0';
+ }
m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data);
if (data!=0)
_TIFFfree(data);
@@ -5620,7 +5731,7 @@ TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir)
TIFFSwabArrayOfLong(m.i,2);
if (m.i[0]==0)
n=0.0;
- else if (m.i[0]==0xFFFFFFFF)
+ else if (m.i[0]==0xFFFFFFFF || m.i[1]==0)
/*
* XXX: Numerator 0xFFFFFFFF means that we have infinite
* distance. Indicate that with a negative floating point
@@ -5638,6 +5749,75 @@ TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir)
}
}
+static void allocChoppedUpStripArrays(TIFF* tif, uint32 nstrips,
+ uint64 stripbytes, uint32 rowsperstrip)
+{
+ TIFFDirectory *td = &tif->tif_dir;
+ uint64 bytecount;
+ uint64 offset;
+ uint64 last_offset;
+ uint64 last_bytecount;
+ uint32 i;
+ uint64 *newcounts;
+ uint64 *newoffsets;
+
+ offset = TIFFGetStrileOffset(tif, 0);
+ last_offset = TIFFGetStrileOffset(tif, td->td_nstrips-1);
+ last_bytecount = TIFFGetStrileByteCount(tif, td->td_nstrips-1);
+ if( last_offset > TIFF_UINT64_MAX - last_bytecount ||
+ last_offset + last_bytecount < offset )
+ {
+ return;
+ }
+ bytecount = last_offset + last_bytecount - offset;
+
+ newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64),
+ "for chopped \"StripByteCounts\" array");
+ newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64),
+ "for chopped \"StripOffsets\" array");
+ if (newcounts == NULL || newoffsets == NULL) {
+ /*
+ * Unable to allocate new strip information, give up and use
+ * the original one strip information.
+ */
+ if (newcounts != NULL)
+ _TIFFfree(newcounts);
+ if (newoffsets != NULL)
+ _TIFFfree(newoffsets);
+ return;
+ }
+
+ /*
+ * Fill the strip information arrays with new bytecounts and offsets
+ * that reflect the broken-up format.
+ */
+ for (i = 0; i < nstrips; i++)
+ {
+ if (stripbytes > bytecount)
+ stripbytes = bytecount;
+ newcounts[i] = stripbytes;
+ newoffsets[i] = stripbytes ? offset : 0;
+ offset += stripbytes;
+ bytecount -= stripbytes;
+ }
+
+ /*
+ * Replace old single strip info with multi-strip info.
+ */
+ td->td_stripsperimage = td->td_nstrips = nstrips;
+ TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip);
+
+ _TIFFfree(td->td_stripbytecount_p);
+ _TIFFfree(td->td_stripoffset_p);
+ td->td_stripbytecount_p = newcounts;
+ td->td_stripoffset_p = newoffsets;
+#ifdef STRIPBYTECOUNTSORTED_UNUSED
+ td->td_stripbytecountsorted = 1;
+#endif
+ tif->tif_flags |= TIFF_CHOPPEDUPARRAYS;
+}
+
+
/*
* Replace a single strip (tile) of uncompressed data by multiple strips
* (tiles), each approximately STRIP_SIZE_DEFAULT bytes. This is useful for
@@ -5653,19 +5833,16 @@ ChopUpSingleUncompressedStrip(TIFF* tif)
uint32 rowblock;
uint64 rowblockbytes;
uint64 stripbytes;
- uint32 strip;
uint32 nstrips;
uint32 rowsperstrip;
- uint64* newcounts;
- uint64* newoffsets;
- bytecount = td->td_stripbytecount[0];
+ bytecount = TIFFGetStrileByteCount(tif, 0);
/* On a newly created file, just re-opened to be filled, we */
/* don't want strip chop to trigger as it is going to cause issues */
/* later ( StripOffsets and StripByteCounts improperly filled) . */
if( bytecount == 0 && tif->tif_mode != O_RDONLY )
return;
- offset = td->td_stripoffset[0];
+ offset = TIFFGetStrileByteCount(tif, 0);
assert(td->td_planarconfig == PLANARCONFIG_CONTIG);
if ((td->td_photometric == PHOTOMETRIC_YCBCR)&&
(!isUpSampled(tif)))
@@ -5698,98 +5875,513 @@ ChopUpSingleUncompressedStrip(TIFF* tif)
if( nstrips == 0 )
return;
- newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64),
- "for chopped \"StripByteCounts\" array");
- newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64),
- "for chopped \"StripOffsets\" array");
- if (newcounts == NULL || newoffsets == NULL) {
- /*
- * Unable to allocate new strip information, give up and use
- * the original one strip information.
- */
- if (newcounts != NULL)
- _TIFFfree(newcounts);
- if (newoffsets != NULL)
- _TIFFfree(newoffsets);
- return;
- }
- /*
- * Fill the strip information arrays with new bytecounts and offsets
- * that reflect the broken-up format.
- */
- for (strip = 0; strip < nstrips; strip++) {
- if (stripbytes > bytecount)
- stripbytes = bytecount;
- newcounts[strip] = stripbytes;
- newoffsets[strip] = stripbytes ? offset : 0;
- offset += stripbytes;
- bytecount -= stripbytes;
- }
- /*
- * Replace old single strip info with multi-strip info.
- */
- td->td_stripsperimage = td->td_nstrips = nstrips;
- TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip);
-
- _TIFFfree(td->td_stripbytecount);
- _TIFFfree(td->td_stripoffset);
- td->td_stripbytecount = newcounts;
- td->td_stripoffset = newoffsets;
- td->td_stripbytecountsorted = 1;
+ /* If we are going to allocate a lot of memory, make sure that the */
+ /* file is as big as needed */
+ if( tif->tif_mode == O_RDONLY &&
+ nstrips > 1000000 &&
+ (offset >= TIFFGetFileSize(tif) ||
+ stripbytes > (TIFFGetFileSize(tif) - offset) / (nstrips - 1)) )
+ {
+ return;
+ }
+
+ allocChoppedUpStripArrays(tif, nstrips, stripbytes, rowsperstrip);
}
-int _TIFFFillStriles( TIFF *tif )
+
+/*
+ * Replace a file with contiguous strips > 2 GB of uncompressed data by
+ * multiple smaller strips. This is useful for
+ * dealing with large images or for dealing with machines with a limited
+ * amount memory.
+ */
+static void TryChopUpUncompressedBigTiff( TIFF* tif )
{
- return _TIFFFillStrilesInternal( tif, 1 );
+ TIFFDirectory *td = &tif->tif_dir;
+ uint32 rowblock;
+ uint64 rowblockbytes;
+ uint32 i;
+ uint64 stripsize;
+ uint32 rowblocksperstrip;
+ uint32 rowsperstrip;
+ uint64 stripbytes;
+ uint32 nstrips;
+
+ stripsize = TIFFStripSize64(tif);
+
+ assert( tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG );
+ assert( tif->tif_dir.td_compression == COMPRESSION_NONE );
+ assert( (tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP );
+ assert( stripsize > 0x7FFFFFFFUL );
+
+ /* On a newly created file, just re-opened to be filled, we */
+ /* don't want strip chop to trigger as it is going to cause issues */
+ /* later ( StripOffsets and StripByteCounts improperly filled) . */
+ if( TIFFGetStrileByteCount(tif, 0) == 0 && tif->tif_mode != O_RDONLY )
+ return;
+
+ if ((td->td_photometric == PHOTOMETRIC_YCBCR)&&
+ (!isUpSampled(tif)))
+ rowblock = td->td_ycbcrsubsampling[1];
+ else
+ rowblock = 1;
+ rowblockbytes = TIFFVStripSize64(tif, rowblock);
+ if( rowblockbytes == 0 || rowblockbytes > 0x7FFFFFFFUL )
+ {
+ /* In case of file with gigantic width */
+ return;
+ }
+
+ /* Check that the strips are contiguous and of the expected size */
+ for( i = 0; i < td->td_nstrips; i++ )
+ {
+ if( i == td->td_nstrips - 1 )
+ {
+ if( TIFFGetStrileByteCount(tif, i) < TIFFVStripSize64(
+ tif, td->td_imagelength - i * td->td_rowsperstrip ) )
+ {
+ return;
+ }
+ }
+ else
+ {
+ if( TIFFGetStrileByteCount(tif, i) != stripsize )
+ {
+ return;
+ }
+ if( i > 0 && TIFFGetStrileOffset(tif, i) !=
+ TIFFGetStrileOffset(tif, i-1) + TIFFGetStrileByteCount(tif, i-1) )
+ {
+ return;
+ }
+ }
+ }
+
+ /* Aim for 512 MB strips (that will still be manageable by 32 bit builds */
+ rowblocksperstrip = (uint32) (512 * 1024 * 1024 / rowblockbytes);
+ if( rowblocksperstrip == 0 )
+ rowblocksperstrip = 1;
+ rowsperstrip = rowblocksperstrip * rowblock;
+ stripbytes = rowblocksperstrip * rowblockbytes;
+ assert( stripbytes <= 0x7FFFFFFFUL );
+
+ nstrips = TIFFhowmany_32(td->td_imagelength, rowsperstrip);
+ if( nstrips == 0 )
+ return;
+
+ /* If we are going to allocate a lot of memory, make sure that the */
+ /* file is as big as needed */
+ if( tif->tif_mode == O_RDONLY &&
+ nstrips > 1000000 )
+ {
+ uint64 last_offset = TIFFGetStrileOffset(tif, td->td_nstrips-1);
+ uint64 filesize = TIFFGetFileSize(tif);
+ uint64 last_bytecount = TIFFGetStrileByteCount(tif, td->td_nstrips-1);
+ if( last_offset > filesize ||
+ last_bytecount > filesize - last_offset )
+ {
+ return;
+ }
+ }
+
+ allocChoppedUpStripArrays(tif, nstrips, stripbytes, rowsperstrip);
}
-static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount )
+
+TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW
+static uint64 _TIFFUnsanitizedAddUInt64AndInt(uint64 a, int b)
{
-#if defined(DEFER_STRILE_LOAD)
- register TIFFDirectory *td = &tif->tif_dir;
- int return_value = 1;
+ return a + b;
+}
- if( td->td_stripoffset != NULL )
- return 1;
+/* Read the value of [Strip|Tile]Offset or [Strip|Tile]ByteCount around
+ * strip/tile of number strile. Also fetch the neighbouring values using a
+ * 4096 byte page size.
+ */
+static
+int _TIFFPartialReadStripArray( TIFF* tif, TIFFDirEntry* dirent,
+ int strile, uint64* panVals )
+{
+ static const char module[] = "_TIFFPartialReadStripArray";
+#define IO_CACHE_PAGE_SIZE 4096
+
+ size_t sizeofval;
+ const int bSwab = (tif->tif_flags & TIFF_SWAB) != 0;
+ int sizeofvalint;
+ uint64 nBaseOffset;
+ uint64 nOffset;
+ uint64 nOffsetStartPage;
+ uint64 nOffsetEndPage;
+ tmsize_t nToRead;
+ tmsize_t nRead;
+ uint64 nLastStripOffset;
+ int iStartBefore;
+ int i;
+ const uint32 arraySize = tif->tif_dir.td_stripoffsetbyteallocsize;
+ unsigned char buffer[2 * IO_CACHE_PAGE_SIZE];
+
+ assert( dirent->tdir_count > 4 );
+
+ if( dirent->tdir_type == TIFF_SHORT )
+ {
+ sizeofval = sizeof(uint16);
+ }
+ else if( dirent->tdir_type == TIFF_LONG )
+ {
+ sizeofval = sizeof(uint32);
+ }
+ else if( dirent->tdir_type == TIFF_LONG8 )
+ {
+ sizeofval = sizeof(uint64);
+ }
+ else
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Invalid type for [Strip|Tile][Offset/ByteCount] tag");
+ panVals[strile] = 0;
+ return 0;
+ }
+ sizeofvalint = (int)(sizeofval);
- if( td->td_stripoffset_entry.tdir_count == 0 )
+ if( tif->tif_flags&TIFF_BIGTIFF )
+ {
+ uint64 offset = dirent->tdir_offset.toff_long8;
+ if( bSwab )
+ TIFFSwabLong8(&offset);
+ nBaseOffset = offset;
+ }
+ else
+ {
+ uint32 offset = dirent->tdir_offset.toff_long;
+ if( bSwab )
+ TIFFSwabLong(&offset);
+ nBaseOffset = offset;
+ }
+ /* To avoid later unsigned integer overflows */
+ if( nBaseOffset > (uint64)TIFF_INT64_MAX )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot read offset/size for strile %d", strile);
+ panVals[strile] = 0;
+ return 0;
+ }
+ nOffset = nBaseOffset + sizeofval * strile;
+ nOffsetStartPage =
+ (nOffset / IO_CACHE_PAGE_SIZE) * IO_CACHE_PAGE_SIZE;
+ nOffsetEndPage = nOffsetStartPage + IO_CACHE_PAGE_SIZE;
+
+ if( nOffset + sizeofval > nOffsetEndPage )
+ nOffsetEndPage += IO_CACHE_PAGE_SIZE;
+#undef IO_CACHE_PAGE_SIZE
+
+ nLastStripOffset = nBaseOffset + arraySize * sizeofval;
+ if( nLastStripOffset < nOffsetEndPage )
+ nOffsetEndPage = nLastStripOffset;
+ if( nOffsetStartPage >= nOffsetEndPage )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot read offset/size for strile %d", strile);
+ panVals[strile] = 0;
+ return 0;
+ }
+ if (!SeekOK(tif,nOffsetStartPage))
+ {
+ panVals[strile] = 0;
+ return 0;
+ }
+
+ nToRead = (tmsize_t)(nOffsetEndPage - nOffsetStartPage);
+ nRead = TIFFReadFile(tif, buffer, nToRead);
+ if( nRead < nToRead )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot read offset/size for strile around ~%d", strile);
+ return 0;
+ }
+ iStartBefore = -(int)((nOffset - nOffsetStartPage) / sizeofval);
+ if( strile + iStartBefore < 0 )
+ iStartBefore = -strile;
+ for( i = iStartBefore;
+ (uint32)(strile + i) < arraySize &&
+ _TIFFUnsanitizedAddUInt64AndInt(nOffset, (i + 1) * sizeofvalint) <= nOffsetEndPage;
+ ++i )
+ {
+ if( sizeofval == sizeof(uint16) )
+ {
+ uint16 val;
+ memcpy(&val,
+ buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint,
+ sizeof(val));
+ if( bSwab )
+ TIFFSwabShort(&val);
+ panVals[strile + i] = val;
+ }
+ else if( sizeofval == sizeof(uint32) )
+ {
+ uint32 val;
+ memcpy(&val,
+ buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint,
+ sizeof(val));
+ if( bSwab )
+ TIFFSwabLong(&val);
+ panVals[strile + i] = val;
+ }
+ else
+ {
+ uint64 val;
+ memcpy(&val,
+ buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint,
+ sizeof(val));
+ if( bSwab )
+ TIFFSwabLong8(&val);
+ panVals[strile + i] = val;
+ }
+ }
+ return 1;
+}
+
+static int _TIFFFetchStrileValue(TIFF* tif,
+ uint32 strile,
+ TIFFDirEntry* dirent,
+ uint64** parray)
+{
+ static const char module[] = "_TIFFFetchStrileValue";
+ TIFFDirectory *td = &tif->tif_dir;
+ if( strile >= dirent->tdir_count )
+ {
+ return 0;
+ }
+ if( strile >= td->td_stripoffsetbyteallocsize )
+ {
+ uint32 nStripArrayAllocBefore = td->td_stripoffsetbyteallocsize;
+ uint32 nStripArrayAllocNew;
+ uint64 nArraySize64;
+ size_t nArraySize;
+ uint64* offsetArray;
+ uint64* bytecountArray;
+
+ if( strile > 1000000 )
+ {
+ uint64 filesize = TIFFGetFileSize(tif);
+ /* Avoid excessive memory allocation attempt */
+ /* For such a big blockid we need at least a TIFF_LONG per strile */
+ /* for the offset array. */
+ if( strile > filesize / sizeof(uint32) )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module, "File too short");
return 0;
+ }
+ }
- if (!TIFFFetchStripThing(tif,&(td->td_stripoffset_entry),
- td->td_nstrips,&td->td_stripoffset))
+ if( td->td_stripoffsetbyteallocsize == 0 &&
+ td->td_nstrips < 1024 * 1024 )
+ {
+ nStripArrayAllocNew = td->td_nstrips;
+ }
+ else
+ {
+#define TIFF_MAX(a,b) (((a)>(b)) ? (a) : (b))
+#define TIFF_MIN(a,b) (((a)<(b)) ? (a) : (b))
+ nStripArrayAllocNew = TIFF_MAX(strile + 1, 1024U * 512U );
+ if( nStripArrayAllocNew < 0xFFFFFFFFU / 2 )
+ nStripArrayAllocNew *= 2;
+ nStripArrayAllocNew = TIFF_MIN(nStripArrayAllocNew, td->td_nstrips);
+ }
+ assert( strile < nStripArrayAllocNew );
+ nArraySize64 = (uint64)sizeof(uint64) * nStripArrayAllocNew;
+ nArraySize = (size_t)(nArraySize64);
+#if SIZEOF_SIZE_T == 4
+ if( nArraySize != nArraySize64 )
{
- return_value = 0;
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot allocate strip offset and bytecount arrays");
+ return 0;
}
+#endif
+ offsetArray = (uint64*)(
+ _TIFFrealloc( td->td_stripoffset_p, nArraySize ) );
+ bytecountArray = (uint64*)(
+ _TIFFrealloc( td->td_stripbytecount_p, nArraySize ) );
+ if( offsetArray )
+ td->td_stripoffset_p = offsetArray;
+ if( bytecountArray )
+ td->td_stripbytecount_p = bytecountArray;
+ if( offsetArray && bytecountArray )
+ {
+ td->td_stripoffsetbyteallocsize = nStripArrayAllocNew;
+ /* Initialize new entries to ~0 / -1 */
+ memset(td->td_stripoffset_p + nStripArrayAllocBefore,
+ 0xFF,
+ (td->td_stripoffsetbyteallocsize - nStripArrayAllocBefore) * sizeof(uint64) );
+ memset(td->td_stripbytecount_p + nStripArrayAllocBefore,
+ 0xFF,
+ (td->td_stripoffsetbyteallocsize - nStripArrayAllocBefore) * sizeof(uint64) );
+ }
+ else
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot allocate strip offset and bytecount arrays");
+ _TIFFfree(td->td_stripoffset_p);
+ td->td_stripoffset_p = NULL;
+ _TIFFfree(td->td_stripbytecount_p);
+ td->td_stripbytecount_p = NULL;
+ td->td_stripoffsetbyteallocsize = 0;
+ }
+ }
+ if( *parray == NULL || strile >= td->td_stripoffsetbyteallocsize )
+ return 0;
- if (loadStripByteCount &&
- !TIFFFetchStripThing(tif,&(td->td_stripbytecount_entry),
- td->td_nstrips,&td->td_stripbytecount))
+ if( ~((*parray)[strile]) == 0 )
+ {
+ if( !_TIFFPartialReadStripArray( tif, dirent, strile, *parray ) )
{
- return_value = 0;
+ (*parray)[strile] = 0;
+ return 0;
}
+ }
- _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry));
- _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry));
+ return 1;
+}
- if (tif->tif_dir.td_nstrips > 1 && return_value == 1 ) {
- uint32 strip;
+static uint64 _TIFFGetStrileOffsetOrByteCountValue(TIFF *tif, uint32 strile,
+ TIFFDirEntry* dirent,
+ uint64** parray,
+ int *pbErr)
+{
+ TIFFDirectory *td = &tif->tif_dir;
+ if( pbErr )
+ *pbErr = 0;
+ if( (tif->tif_flags&TIFF_DEFERSTRILELOAD) && !(tif->tif_flags&TIFF_CHOPPEDUPARRAYS) )
+ {
+ if( !(tif->tif_flags&TIFF_LAZYSTRILELOAD) ||
+ /* If the values may fit in the toff_long/toff_long8 member */
+ /* then use _TIFFFillStriles to simplify _TIFFFetchStrileValue */
+ dirent->tdir_count <= 4 )
+ {
+ if( !_TIFFFillStriles(tif) )
+ {
+ if( pbErr )
+ *pbErr = 1;
+ /* Do not return, as we want this function to always */
+ /* return the same value if called several times with */
+ /* the same arguments */
+ }
+ }
+ else
+ {
+ if( !_TIFFFetchStrileValue(tif, strile, dirent, parray) )
+ {
+ if( pbErr )
+ *pbErr = 1;
+ return 0;
+ }
+ }
+ }
+ if( *parray == NULL || strile >= td->td_nstrips )
+ {
+ if( pbErr )
+ *pbErr = 1;
+ return 0;
+ }
+ return (*parray)[strile];
+}
- tif->tif_dir.td_stripbytecountsorted = 1;
- for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) {
- if (tif->tif_dir.td_stripoffset[strip - 1] >
- tif->tif_dir.td_stripoffset[strip]) {
- tif->tif_dir.td_stripbytecountsorted = 0;
- break;
- }
- }
- }
+/* Return the value of the TileOffsets/StripOffsets array for the specified tile/strile */
+uint64 TIFFGetStrileOffset(TIFF *tif, uint32 strile)
+{
+ return TIFFGetStrileOffsetWithErr(tif, strile, NULL);
+}
+
+/* Return the value of the TileOffsets/StripOffsets array for the specified tile/strile */
+uint64 TIFFGetStrileOffsetWithErr(TIFF *tif, uint32 strile, int *pbErr)
+{
+ TIFFDirectory *td = &tif->tif_dir;
+ return _TIFFGetStrileOffsetOrByteCountValue(tif, strile,
+ &(td->td_stripoffset_entry),
+ &(td->td_stripoffset_p), pbErr);
+}
+
+/* Return the value of the TileByteCounts/StripByteCounts array for the specified tile/strile */
+uint64 TIFFGetStrileByteCount(TIFF *tif, uint32 strile)
+{
+ return TIFFGetStrileByteCountWithErr(tif, strile, NULL);
+}
+
+/* Return the value of the TileByteCounts/StripByteCounts array for the specified tile/strile */
+uint64 TIFFGetStrileByteCountWithErr(TIFF *tif, uint32 strile, int *pbErr)
+{
+ TIFFDirectory *td = &tif->tif_dir;
+ return _TIFFGetStrileOffsetOrByteCountValue(tif, strile,
+ &(td->td_stripbytecount_entry),
+ &(td->td_stripbytecount_p), pbErr);
+}
+
+
+int _TIFFFillStriles( TIFF *tif )
+{
+ return _TIFFFillStrilesInternal( tif, 1 );
+}
+
+static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount )
+{
+ register TIFFDirectory *td = &tif->tif_dir;
+ int return_value = 1;
- return return_value;
-#else /* !defined(DEFER_STRILE_LOAD) */
- (void) tif;
- (void) loadStripByteCount;
+ /* Do not do anything if TIFF_DEFERSTRILELOAD is not set */
+ if( !(tif->tif_flags&TIFF_DEFERSTRILELOAD) || (tif->tif_flags&TIFF_CHOPPEDUPARRAYS) != 0 )
return 1;
-#endif
+
+ if( tif->tif_flags&TIFF_LAZYSTRILELOAD )
+ {
+ /* In case of lazy loading, reload completely the arrays */
+ _TIFFfree(td->td_stripoffset_p);
+ _TIFFfree(td->td_stripbytecount_p);
+ td->td_stripoffset_p = NULL;
+ td->td_stripbytecount_p = NULL;
+ td->td_stripoffsetbyteallocsize = 0;
+ tif->tif_flags &= ~TIFF_LAZYSTRILELOAD;
+ }
+
+ /* If stripoffset array is already loaded, exit with success */
+ if( td->td_stripoffset_p != NULL )
+ return 1;
+
+ /* If tdir_count was cancelled, then we already got there, but in error */
+ if( td->td_stripoffset_entry.tdir_count == 0 )
+ return 0;
+
+ if (!TIFFFetchStripThing(tif,&(td->td_stripoffset_entry),
+ td->td_nstrips,&td->td_stripoffset_p))
+ {
+ return_value = 0;
+ }
+
+ if (loadStripByteCount &&
+ !TIFFFetchStripThing(tif,&(td->td_stripbytecount_entry),
+ td->td_nstrips,&td->td_stripbytecount_p))
+ {
+ return_value = 0;
+ }
+
+ _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry));
+ _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry));
+
+#ifdef STRIPBYTECOUNTSORTED_UNUSED
+ if (tif->tif_dir.td_nstrips > 1 && return_value == 1 ) {
+ uint32 strip;
+
+ tif->tif_dir.td_stripbytecountsorted = 1;
+ for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) {
+ if (tif->tif_dir.td_stripoffset_p[strip - 1] >
+ tif->tif_dir.td_stripoffset_p[strip]) {
+ tif->tif_dir.td_stripbytecountsorted = 0;
+ break;
+ }
+ }
+ }
+#endif
+
+ return return_value;
}
diff --git a/tiff/libtiff/tif_dirwrite.c b/tiff/libtiff/tif_dirwrite.c
index c68d6d21..9e4d3060 100644
--- a/tiff/libtiff/tif_dirwrite.c
+++ b/tiff/libtiff/tif_dirwrite.c
@@ -1,5 +1,3 @@
-/* $Id: tif_dirwrite.c,v 1.89 2017-08-23 13:33:42 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -30,7 +28,6 @@
* Directory Write Support Routines.
*/
#include "tiffiop.h"
-#include <float.h>
#ifdef HAVE_IEEEFP
#define TIFFCvtNativeToIEEEFloat(tif, n, fp)
@@ -185,6 +182,51 @@ TIFFWriteDirectory(TIFF* tif)
}
/*
+ * This is an advanced writing function that must be used in a particular
+ * sequence, and generally together with TIFFForceStrileArrayWriting(),
+ * to make its intended effect. Its aim is to modify the location
+ * where the [Strip/Tile][Offsets/ByteCounts] arrays are located in the file.
+ * More precisely, when TIFFWriteCheck() will be called, the tag entries for
+ * those arrays will be written with type = count = offset = 0 as a temporary
+ * value.
+ *
+ * Its effect is only valid for the current directory, and before
+ * TIFFWriteDirectory() is first called, and will be reset when
+ * changing directory.
+ *
+ * The typical sequence of calls is:
+ * TIFFOpen()
+ * [ TIFFCreateDirectory(tif) ]
+ * Set fields with calls to TIFFSetField(tif, ...)
+ * TIFFDeferStrileArrayWriting(tif)
+ * TIFFWriteCheck(tif, ...)
+ * TIFFWriteDirectory(tif)
+ * ... potentially create other directories and come back to the above directory
+ * TIFFForceStrileArrayWriting(tif): emit the arrays at the end of file
+ *
+ * Returns 1 in case of success, 0 otherwise.
+ */
+int TIFFDeferStrileArrayWriting(TIFF* tif)
+{
+ static const char module[] = "TIFFDeferStrileArrayWriting";
+ if (tif->tif_mode == O_RDONLY)
+ {
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "File opened in read-only mode");
+ return 0;
+ }
+ if( tif->tif_diroff != 0 )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Directory has already been written");
+ return 0;
+ }
+
+ tif->tif_dir.td_deferstrilearraywriting = TRUE;
+ return 1;
+}
+
+/*
* Similar to TIFFWriteDirectory(), writes the directory out
* but leaves all data structures in memory so that it can be
* written again. This will make a partially written TIFF file
@@ -195,7 +237,7 @@ TIFFCheckpointDirectory(TIFF* tif)
{
int rc;
/* Setup the strips arrays, if they haven't already been. */
- if (tif->tif_dir.td_stripoffset == NULL)
+ if (tif->tif_dir.td_stripoffset_p == NULL)
(void) TIFFSetupStrips(tif);
rc = TIFFWriteDirectorySec(tif,TRUE,FALSE,NULL);
(void) TIFFSetWriteOffset(tif, TIFFSeekFile(tif, 0, SEEK_END));
@@ -530,12 +572,12 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff)
{
if (!isTiled(tif))
{
- if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount))
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount_p))
goto bad;
}
else
{
- if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount))
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount_p))
goto bad;
}
}
@@ -543,7 +585,7 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff)
{
if (!isTiled(tif))
{
- /* td_stripoffset might be NULL in an odd OJPEG case. See
+ /* td_stripoffset_p might be NULL in an odd OJPEG case. See
* tif_dirread.c around line 3634.
* XXX: OJPEG hack.
* If a) compression is OJPEG, b) it's not a tiled TIFF,
@@ -554,13 +596,13 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff)
* We can get here when using tiffset on such a file.
* See http://bugzilla.maptools.org/show_bug.cgi?id=2500
*/
- if (tif->tif_dir.td_stripoffset != NULL &&
- !TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset))
+ if (tif->tif_dir.td_stripoffset_p != NULL &&
+ !TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset_p))
goto bad;
}
else
{
- if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset))
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset_p))
goto bad;
}
}
@@ -697,8 +739,11 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff)
}
break;
default:
- assert(0); /* we should never get here */
- break;
+ TIFFErrorExt(tif->tif_clientdata,module,
+ "Cannot write tag %d (%s)",
+ TIFFFieldTag(o),
+ o->field_name ? o->field_name : "unknown");
+ goto bad;
}
}
}
@@ -945,15 +990,6 @@ bad:
return(0);
}
-static float TIFFClampDoubleToFloat( double val )
-{
- if( val > FLT_MAX )
- return FLT_MAX;
- if( val < -FLT_MAX )
- return -FLT_MAX;
- return (float)val;
-}
-
static int8 TIFFClampDoubleToInt8( double val )
{
if( val > 127 )
@@ -1028,7 +1064,7 @@ TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* di
if (tif->tif_dir.td_bitspersample<=32)
{
for (i = 0; i < count; ++i)
- ((float*)conv)[i] = TIFFClampDoubleToFloat(value[i]);
+ ((float*)conv)[i] = _TIFFClampDoubleToFloat(value[i]);
ok = TIFFWriteDirectoryTagFloatArray(tif,ndir,dir,tag,count,(float*)conv);
}
else
@@ -1660,22 +1696,52 @@ TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint1
return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value));
}
+static int _WriteAsType(TIFF* tif, uint64 strile_size, uint64 uncompressed_threshold)
+{
+ const uint16 compression = tif->tif_dir.td_compression;
+ if ( compression == COMPRESSION_NONE )
+ {
+ return strile_size > uncompressed_threshold;
+ }
+ else if ( compression == COMPRESSION_JPEG ||
+ compression == COMPRESSION_LZW ||
+ compression == COMPRESSION_ADOBE_DEFLATE ||
+ compression == COMPRESSION_LZMA ||
+ compression == COMPRESSION_LERC ||
+ compression == COMPRESSION_ZSTD ||
+ compression == COMPRESSION_WEBP )
+ {
+ /* For a few select compression types, we assume that in the worst */
+ /* case the compressed size will be 10 times the uncompressed size */
+ /* This is overly pessismistic ! */
+ return strile_size >= uncompressed_threshold / 10;
+ }
+ return 1;
+}
+
+static int WriteAsLong8(TIFF* tif, uint64 strile_size)
+{
+ return _WriteAsType(tif, strile_size, 0xFFFFFFFFU);
+}
+
+static int WriteAsLong4(TIFF* tif, uint64 strile_size)
+{
+ return _WriteAsType(tif, strile_size, 0xFFFFU);
+}
+
/************************************************************************/
/* TIFFWriteDirectoryTagLongLong8Array() */
/* */
-/* Write out LONG8 array as LONG8 for BigTIFF or LONG for */
-/* Classic TIFF with some checking. */
+/* Write out LONG8 array and write a SHORT/LONG/LONG8 depending */
+/* on strile size and Classic/BigTIFF mode. */
/************************************************************************/
static int
TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
{
static const char module[] = "TIFFWriteDirectoryTagLongLong8Array";
- uint64* ma;
- uint32 mb;
- uint32* p;
- uint32* q;
int o;
+ int write_aslong4;
/* is this just a counting pass? */
if (dir==NULL)
@@ -1684,37 +1750,105 @@ TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir,
return(1);
}
- /* We always write LONG8 for BigTIFF, no checking needed. */
- if( tif->tif_flags&TIFF_BIGTIFF )
- return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,
- tag,count,value);
-
- /*
- ** For classic tiff we want to verify everything is in range for LONG
- ** and convert to long format.
- */
+ if( tif->tif_dir.td_deferstrilearraywriting )
+ {
+ return TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_NOTYPE, 0, 0, NULL);
+ }
- p = _TIFFmalloc(count*sizeof(uint32));
- if (p==NULL)
+ if( tif->tif_flags&TIFF_BIGTIFF )
{
- TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
- return(0);
+ int write_aslong8 = 1;
+ /* In the case of ByteCounts array, we may be able to write them on */
+ /* LONG if the strip/tilesize is not too big. */
+ /* Also do that for count > 1 in the case someone would want to create */
+ /* a single-strip file with a growing height, in which case using */
+ /* LONG8 will be safer. */
+ if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS )
+ {
+ write_aslong8 = WriteAsLong8(tif, TIFFStripSize64(tif));
+ }
+ else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS )
+ {
+ write_aslong8 = WriteAsLong8(tif, TIFFTileSize64(tif));
+ }
+ if( write_aslong8 )
+ {
+ return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,
+ tag,count,value);
+ }
}
- for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
+ write_aslong4 = 1;
+ if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS )
{
- if (*ma>0xFFFFFFFF)
+ write_aslong4 = WriteAsLong4(tif, TIFFStripSize64(tif));
+ }
+ else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS )
+ {
+ write_aslong4 = WriteAsLong4(tif, TIFFTileSize64(tif));
+ }
+ if( write_aslong4 )
+ {
+ /*
+ ** For classic tiff we want to verify everything is in range for LONG
+ ** and convert to long format.
+ */
+
+ uint32* p = _TIFFmalloc(count*sizeof(uint32));
+ uint32* q;
+ uint64* ma;
+ uint32 mb;
+
+ if (p==NULL)
{
- TIFFErrorExt(tif->tif_clientdata,module,
- "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file.");
- _TIFFfree(p);
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
return(0);
}
- *q= (uint32)(*ma);
+
+ for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
+ {
+ if (*ma>0xFFFFFFFF)
+ {
+ TIFFErrorExt(tif->tif_clientdata,module,
+ "Attempt to write value larger than 0xFFFFFFFF in LONG array.");
+ _TIFFfree(p);
+ return(0);
+ }
+ *q= (uint32)(*ma);
+ }
+
+ o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p);
+ _TIFFfree(p);
}
+ else
+ {
+ uint16* p = _TIFFmalloc(count*sizeof(uint16));
+ uint16* q;
+ uint64* ma;
+ uint32 mb;
- o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p);
- _TIFFfree(p);
+ if (p==NULL)
+ {
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
+ return(0);
+ }
+
+ for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
+ {
+ if (*ma>0xFFFF)
+ {
+ /* Should not happen normally given the check we did before */
+ TIFFErrorExt(tif->tif_clientdata,module,
+ "Attempt to write value larger than 0xFFFF in SHORT array.");
+ _TIFFfree(p);
+ return(0);
+ }
+ *q= (uint16)(*ma);
+ }
+
+ o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,count,p);
+ _TIFFfree(p);
+ }
return(o);
}
@@ -1892,12 +2026,14 @@ TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir
n=3;
if (n==3)
{
- if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16)))
+ if (tif->tif_dir.td_transferfunction[2] == NULL ||
+ !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16)))
n=2;
}
if (n==2)
{
- if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16)))
+ if (tif->tif_dir.td_transferfunction[1] == NULL ||
+ !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16)))
n=1;
}
if (n==0)
@@ -2427,7 +2563,12 @@ TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag
dir[m].tdir_count=count;
dir[m].tdir_offset.toff_long8 = 0;
if (datalength<=((tif->tif_flags&TIFF_BIGTIFF)?0x8U:0x4U))
- _TIFFmemcpy(&dir[m].tdir_offset,data,datalength);
+ {
+ if( data && datalength )
+ {
+ _TIFFmemcpy(&dir[m].tdir_offset,data,datalength);
+ }
+ }
else
{
uint64 na,nb;
@@ -2820,12 +2961,59 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
}
/* -------------------------------------------------------------------- */
+/* When a dummy tag was written due to TIFFDeferStrileArrayWriting() */
+/* -------------------------------------------------------------------- */
+ if( entry_offset == 0 && entry_count == 0 && entry_type == 0 )
+ {
+ if( tag == TIFFTAG_TILEOFFSETS || tag == TIFFTAG_STRIPOFFSETS )
+ {
+ entry_type = (tif->tif_flags&TIFF_BIGTIFF) ? TIFF_LONG8 : TIFF_LONG;
+ }
+ else
+ {
+ int write_aslong8 = 1;
+ if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS )
+ {
+ write_aslong8 = WriteAsLong8(tif, TIFFStripSize64(tif));
+ }
+ else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS )
+ {
+ write_aslong8 = WriteAsLong8(tif, TIFFTileSize64(tif));
+ }
+ if( write_aslong8 )
+ {
+ entry_type = TIFF_LONG8;
+ }
+ else
+ {
+ int write_aslong4 = 1;
+ if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS )
+ {
+ write_aslong4 = WriteAsLong4(tif, TIFFStripSize64(tif));
+ }
+ else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS )
+ {
+ write_aslong4 = WriteAsLong4(tif, TIFFTileSize64(tif));
+ }
+ if( write_aslong4 )
+ {
+ entry_type = TIFF_LONG;
+ }
+ else
+ {
+ entry_type = TIFF_SHORT;
+ }
+ }
+ }
+ }
+
+/* -------------------------------------------------------------------- */
/* What data type do we want to write this as? */
/* -------------------------------------------------------------------- */
if( TIFFDataWidth(in_datatype) == 8 && !(tif->tif_flags&TIFF_BIGTIFF) )
{
if( in_datatype == TIFF_LONG8 )
- datatype = TIFF_LONG;
+ datatype = entry_type == TIFF_SHORT ? TIFF_SHORT : TIFF_LONG;
else if( in_datatype == TIFF_SLONG8 )
datatype = TIFF_SLONG;
else if( in_datatype == TIFF_IFD8 )
@@ -2833,8 +3021,21 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
else
datatype = in_datatype;
}
- else
- datatype = in_datatype;
+ else
+ {
+ if( in_datatype == TIFF_LONG8 &&
+ (entry_type == TIFF_SHORT || entry_type == TIFF_LONG ||
+ entry_type == TIFF_LONG8 ) )
+ datatype = entry_type;
+ else if( in_datatype == TIFF_SLONG8 &&
+ (entry_type == TIFF_SLONG || entry_type == TIFF_SLONG8 ) )
+ datatype = entry_type;
+ else if( in_datatype == TIFF_IFD8 &&
+ (entry_type == TIFF_IFD || entry_type == TIFF_IFD8 ) )
+ datatype = entry_type;
+ else
+ datatype = in_datatype;
+ }
/* -------------------------------------------------------------------- */
/* Prepare buffer of actual data to write. This includes */
@@ -2883,6 +3084,29 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
}
}
}
+ else if( datatype == TIFF_SHORT && in_datatype == TIFF_LONG8 )
+ {
+ tmsize_t i;
+
+ for( i = 0; i < count; i++ )
+ {
+ ((uint16 *) buf_to_write)[i] =
+ (uint16) ((uint64 *) data)[i];
+ if( (uint64) ((uint16 *) buf_to_write)[i] != ((uint64 *) data)[i] )
+ {
+ _TIFFfree( buf_to_write );
+ TIFFErrorExt( tif->tif_clientdata, module,
+ "Value exceeds 16bit range of output type." );
+ return 0;
+ }
+ }
+ }
+ else
+ {
+ TIFFErrorExt( tif->tif_clientdata, module,
+ "Unhandled type conversion." );
+ return 0;
+ }
if( TIFFDataWidth(datatype) > 1 && (tif->tif_flags&TIFF_SWAB) )
{
@@ -2914,6 +3138,23 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
}
}
+ if( (tag == TIFFTAG_TILEOFFSETS || tag == TIFFTAG_STRIPOFFSETS) &&
+ tif->tif_dir.td_stripoffset_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 )
+ {
+ tif->tif_dir.td_stripoffset_entry.tdir_type = datatype;
+ tif->tif_dir.td_stripoffset_entry.tdir_count = count;
+ }
+ else if( (tag == TIFFTAG_TILEBYTECOUNTS || tag == TIFFTAG_STRIPBYTECOUNTS) &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 )
+ {
+ tif->tif_dir.td_stripbytecount_entry.tdir_type = datatype;
+ tif->tif_dir.td_stripbytecount_entry.tdir_count = count;
+ }
+
/* -------------------------------------------------------------------- */
/* If the tag type, and count match, then we just write it out */
/* over the old values without altering the directory entry at */
@@ -2965,6 +3206,7 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
/* Adjust the directory entry. */
/* -------------------------------------------------------------------- */
entry_type = datatype;
+ entry_count = (uint64)count;
memcpy( direntry_raw + 2, &entry_type, sizeof(uint16) );
if (tif->tif_flags&TIFF_SWAB)
TIFFSwabShort( (uint16 *) (direntry_raw + 2) );
diff --git a/tiff/libtiff/tif_dumpmode.c b/tiff/libtiff/tif_dumpmode.c
index a6a94c04..4a0b07f5 100644
--- a/tiff/libtiff/tif_dumpmode.c
+++ b/tiff/libtiff/tif_dumpmode.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dumpmode.c,v 1.15 2015-12-12 18:04:26 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_error.c b/tiff/libtiff/tif_error.c
index 47516b4f..651168f7 100644
--- a/tiff/libtiff/tif_error.c
+++ b/tiff/libtiff/tif_error.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_error.c,v 1.6 2017-07-04 12:54:42 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_extension.c b/tiff/libtiff/tif_extension.c
index 39fab4c7..87d3cfcb 100644
--- a/tiff/libtiff/tif_extension.c
+++ b/tiff/libtiff/tif_extension.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.8 2015-12-06 11:13:43 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_fax3.c b/tiff/libtiff/tif_fax3.c
index 5fd51411..d11c9684 100644
--- a/tiff/libtiff/tif_fax3.c
+++ b/tiff/libtiff/tif_fax3.c
@@ -1,5 +1,3 @@
-/* $Id: tif_fax3.c,v 1.81 2017-06-18 10:31:50 erouault Exp $ */
-
/*
* Copyright (c) 1990-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_fax3.h b/tiff/libtiff/tif_fax3.h
index 8a435059..abadcd97 100644
--- a/tiff/libtiff/tif_fax3.h
+++ b/tiff/libtiff/tif_fax3.h
@@ -1,5 +1,3 @@
-/* $Id: tif_fax3.h,v 1.13 2016-12-14 18:36:27 faxguy Exp $ */
-
/*
* Copyright (c) 1990-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_flush.c b/tiff/libtiff/tif_flush.c
index fd14e4cd..f7fa2072 100644
--- a/tiff/libtiff/tif_flush.c
+++ b/tiff/libtiff/tif_flush.c
@@ -1,5 +1,3 @@
-/* $Id: tif_flush.c,v 1.9 2010-03-31 06:40:10 fwarmerdam Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -47,36 +45,8 @@ TIFFFlush(TIFF* tif)
&& !(tif->tif_flags & TIFF_DIRTYDIRECT)
&& tif->tif_mode == O_RDWR )
{
- uint64 *offsets=NULL, *sizes=NULL;
-
- if( TIFFIsTiled(tif) )
- {
- if( TIFFGetField( tif, TIFFTAG_TILEOFFSETS, &offsets )
- && TIFFGetField( tif, TIFFTAG_TILEBYTECOUNTS, &sizes )
- && _TIFFRewriteField( tif, TIFFTAG_TILEOFFSETS, TIFF_LONG8,
- tif->tif_dir.td_nstrips, offsets )
- && _TIFFRewriteField( tif, TIFFTAG_TILEBYTECOUNTS, TIFF_LONG8,
- tif->tif_dir.td_nstrips, sizes ) )
- {
- tif->tif_flags &= ~TIFF_DIRTYSTRIP;
- tif->tif_flags &= ~TIFF_BEENWRITING;
- return 1;
- }
- }
- else
- {
- if( TIFFGetField( tif, TIFFTAG_STRIPOFFSETS, &offsets )
- && TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &sizes )
- && _TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8,
- tif->tif_dir.td_nstrips, offsets )
- && _TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8,
- tif->tif_dir.td_nstrips, sizes ) )
- {
- tif->tif_flags &= ~TIFF_DIRTYSTRIP;
- tif->tif_flags &= ~TIFF_BEENWRITING;
- return 1;
- }
- }
+ if( TIFFForceStrileArrayWriting(tif) )
+ return 1;
}
if ((tif->tif_flags & (TIFF_DIRTYDIRECT|TIFF_DIRTYSTRIP))
@@ -87,6 +57,92 @@ TIFFFlush(TIFF* tif)
}
/*
+ * This is an advanced writing function that must be used in a particular
+ * sequence, and together with TIFFDeferStrileArrayWriting(),
+ * to make its intended effect. Its aim is to force the writing of
+ * the [Strip/Tile][Offsets/ByteCounts] arrays at the end of the file, when
+ * they have not yet been rewritten.
+ *
+ * The typical sequence of calls is:
+ * TIFFOpen()
+ * [ TIFFCreateDirectory(tif) ]
+ * Set fields with calls to TIFFSetField(tif, ...)
+ * TIFFDeferStrileArrayWriting(tif)
+ * TIFFWriteCheck(tif, ...)
+ * TIFFWriteDirectory(tif)
+ * ... potentially create other directories and come back to the above directory
+ * TIFFForceStrileArrayWriting(tif)
+ *
+ * Returns 1 in case of success, 0 otherwise.
+ */
+int TIFFForceStrileArrayWriting(TIFF* tif)
+{
+ static const char module[] = "TIFFForceStrileArrayWriting";
+ const int isTiled = TIFFIsTiled(tif);
+
+ if (tif->tif_mode == O_RDONLY)
+ {
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
+ "File opened in read-only mode");
+ return 0;
+ }
+ if( tif->tif_diroff == 0 )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Directory has not yet been written");
+ return 0;
+ }
+ if( (tif->tif_flags & TIFF_DIRTYDIRECT) != 0 )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Directory has changes other than the strile arrays. "
+ "TIFFRewriteDirectory() should be called instead");
+ return 0;
+ }
+
+ if( !(tif->tif_flags & TIFF_DIRTYSTRIP) )
+ {
+ if( !(tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0) )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Function not called together with "
+ "TIFFDeferStrileArrayWriting()");
+ return 0;
+ }
+
+ if (tif->tif_dir.td_stripoffset_p == NULL && !TIFFSetupStrips(tif))
+ return 0;
+ }
+
+ if( _TIFFRewriteField( tif,
+ isTiled ? TIFFTAG_TILEOFFSETS :
+ TIFFTAG_STRIPOFFSETS,
+ TIFF_LONG8,
+ tif->tif_dir.td_nstrips,
+ tif->tif_dir.td_stripoffset_p )
+ && _TIFFRewriteField( tif,
+ isTiled ? TIFFTAG_TILEBYTECOUNTS :
+ TIFFTAG_STRIPBYTECOUNTS,
+ TIFF_LONG8,
+ tif->tif_dir.td_nstrips,
+ tif->tif_dir.td_stripbytecount_p ) )
+ {
+ tif->tif_flags &= ~TIFF_DIRTYSTRIP;
+ tif->tif_flags &= ~TIFF_BEENWRITING;
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
* Flush buffered data to the file.
*
* Frank Warmerdam'2000: I modified this to return 1 if TIFF_BEENWRITING
diff --git a/tiff/libtiff/tif_getimage.c b/tiff/libtiff/tif_getimage.c
index fc554cca..4da785d3 100644
--- a/tiff/libtiff/tif_getimage.c
+++ b/tiff/libtiff/tif_getimage.c
@@ -1,5 +1,3 @@
-/* $Id: tif_getimage.c,v 1.114 2017-11-17 20:21:00 erouault Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -757,9 +755,8 @@ gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
uint32 leftmost_tw;
tilesize = TIFFTileSize(tif);
- bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,tilesize);
+ bufsize = _TIFFMultiplySSize(tif, alpha?4:3,tilesize, "gtTileSeparate");
if (bufsize == 0) {
- TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtTileSeparate");
return (0);
}
@@ -952,16 +949,23 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
fromskew = (w < imagewidth ? imagewidth - w : 0);
for (row = 0; row < h; row += nrow)
{
+ uint32 temp;
rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
nrow = (row + rowstoread > h ? h - row : rowstoread);
nrowsub = nrow;
if ((nrowsub%subsamplingver)!=0)
nrowsub+=subsamplingver-nrowsub%subsamplingver;
+ temp = (row + img->row_offset)%rowsperstrip + nrowsub;
+ if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) )
+ {
+ TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripContig");
+ return 0;
+ }
if (_TIFFReadEncodedStripAndAllocBuffer(tif,
TIFFComputeStrip(tif,row+img->row_offset, 0),
(void**)(&buf),
maxstripsize,
- ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline)==(tmsize_t)(-1)
+ temp * scanline)==(tmsize_t)(-1)
&& (buf == NULL || img->stoponerr))
{
ret = 0;
@@ -1021,9 +1025,8 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
uint16 colorchannels;
stripsize = TIFFStripSize(tif);
- bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,stripsize);
+ bufsize = _TIFFMultiplySSize(tif,alpha?4:3,stripsize, "gtStripSeparate");
if (bufsize == 0) {
- TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtStripSeparate");
return (0);
}
@@ -1055,15 +1058,22 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
fromskew = (w < imagewidth ? imagewidth - w : 0);
for (row = 0; row < h; row += nrow)
{
+ uint32 temp;
rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
nrow = (row + rowstoread > h ? h - row : rowstoread);
offset_row = row + img->row_offset;
+ temp = (row + img->row_offset)%rowsperstrip + nrow;
+ if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) )
+ {
+ TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripSeparate");
+ return 0;
+ }
if( buf == NULL )
{
if (_TIFFReadEncodedStripAndAllocBuffer(
tif, TIFFComputeStrip(tif, offset_row, 0),
(void**) &buf, bufsize,
- ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
+ temp * scanline)==(tmsize_t)(-1)
&& (buf == NULL || img->stoponerr))
{
ret = 0;
@@ -1083,7 +1093,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
}
}
else if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0),
- p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
+ p0, temp * scanline)==(tmsize_t)(-1)
&& img->stoponerr)
{
ret = 0;
@@ -1091,7 +1101,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
}
if (colorchannels > 1
&& TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1),
- p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1)
+ p1, temp * scanline) == (tmsize_t)(-1)
&& img->stoponerr)
{
ret = 0;
@@ -1099,7 +1109,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
}
if (colorchannels > 1
&& TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2),
- p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1)
+ p2, temp * scanline) == (tmsize_t)(-1)
&& img->stoponerr)
{
ret = 0;
@@ -1108,7 +1118,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
if (alpha)
{
if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, colorchannels),
- pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
+ pa, temp * scanline)==(tmsize_t)(-1)
&& img->stoponerr)
{
ret = 0;
@@ -2959,7 +2969,7 @@ TIFFReadRGBATileExt(TIFF* tif, uint32 col, uint32 row, uint32 * raster, int stop
if( !TIFFIsTiled( tif ) )
{
TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif),
- "Can't use TIFFReadRGBATile() with stripped file.");
+ "Can't use TIFFReadRGBATile() with striped file.");
return (0);
}
diff --git a/tiff/libtiff/tif_jbig.c b/tiff/libtiff/tif_jbig.c
index 7a14dd9a..7ffe8851 100644
--- a/tiff/libtiff/tif_jbig.c
+++ b/tiff/libtiff/tif_jbig.c
@@ -1,5 +1,3 @@
-/* $Id: tif_jbig.c,v 1.16 2017-06-26 15:20:00 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -53,17 +51,18 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s)
struct jbg_dec_state decoder;
int decodeStatus = 0;
unsigned char* pImage = NULL;
- (void) size, (void) s;
+ unsigned long decodedSize;
+ (void) s;
if (isFillOrder(tif, tif->tif_dir.td_fillorder))
{
- TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdatasize);
+ TIFFReverseBits(tif->tif_rawcp, tif->tif_rawcc);
}
jbg_dec_init(&decoder);
#if defined(HAVE_JBG_NEWLEN)
- jbg_newlen(tif->tif_rawdata, (size_t)tif->tif_rawdatasize);
+ jbg_newlen(tif->tif_rawcp, (size_t)tif->tif_rawcc);
/*
* I do not check the return status of jbg_newlen because even if this
* function fails it does not necessarily mean that decoding the image
@@ -76,8 +75,8 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s)
*/
#endif /* HAVE_JBG_NEWLEN */
- decodeStatus = jbg_dec_in(&decoder, (unsigned char*)tif->tif_rawdata,
- (size_t)tif->tif_rawdatasize, NULL);
+ decodeStatus = jbg_dec_in(&decoder, (unsigned char*)tif->tif_rawcp,
+ (size_t)tif->tif_rawcc, NULL);
if (JBG_EOK != decodeStatus)
{
/*
@@ -98,9 +97,28 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s)
return 0;
}
+ decodedSize = jbg_dec_getsize(&decoder);
+ if( (tmsize_t)decodedSize < size )
+ {
+ TIFFWarningExt(tif->tif_clientdata, "JBIG",
+ "Only decoded %lu bytes, whereas %lu requested",
+ decodedSize, (unsigned long)size);
+ }
+ else if( (tmsize_t)decodedSize > size )
+ {
+ TIFFErrorExt(tif->tif_clientdata, "JBIG",
+ "Decoded %lu bytes, whereas %lu were requested",
+ decodedSize, (unsigned long)size);
+ jbg_dec_free(&decoder);
+ return 0;
+ }
pImage = jbg_dec_getimage(&decoder, 0);
- _TIFFmemcpy(buffer, pImage, jbg_dec_getsize(&decoder));
+ _TIFFmemcpy(buffer, pImage, decodedSize);
jbg_dec_free(&decoder);
+
+ tif->tif_rawcp += tif->tif_rawcc;
+ tif->tif_rawcc = 0;
+
return 1;
}
diff --git a/tiff/libtiff/tif_jpeg.c b/tiff/libtiff/tif_jpeg.c
index 0fbdb354..d49b9040 100644
--- a/tiff/libtiff/tif_jpeg.c
+++ b/tiff/libtiff/tif_jpeg.c
@@ -1,5 +1,3 @@
-/* $Id: tif_jpeg.c,v 1.134 2017-10-17 19:04:47 erouault Exp $ */
-
/*
* Copyright (c) 1994-1997 Sam Leffler
* Copyright (c) 1994-1997 Silicon Graphics, Inc.
@@ -27,9 +25,9 @@
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
+#include "tiffiop.h"
#include <stdlib.h>
-#include "tiffiop.h"
#ifdef JPEG_SUPPORT
/*
@@ -67,6 +65,10 @@ int TIFFJPEGIsFullStripRequired_12(TIFF* tif);
# define XMD_H 1
#endif
+/* If we are building for GS, do NOT mess with boolean - we want it to be int on all platforms.
+ */
+#define GS_TIFF_BUILD
+#ifndef GS_TIFF_BUILD
/*
The windows RPCNDR.H file defines boolean, but defines it with the
unsigned char size. You should compile JPEG library using appropriate
@@ -76,7 +78,7 @@ int TIFFJPEGIsFullStripRequired_12(TIFF* tif);
"JPEGLib: JPEG parameter struct mismatch: library thinks size is 432,
caller expects 464"
- For such users we wil fix the problem here. See install.doc file from
+ For such users we will fix the problem here. See install.doc file from
the JPEG library distribution for details.
*/
@@ -87,6 +89,7 @@ int TIFFJPEGIsFullStripRequired_12(TIFF* tif);
# endif
# define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
#endif
+#endif
#include "jpeglib.h"
#include "jerror.h"
@@ -292,15 +295,19 @@ TIFFjpeg_create_compress(JPEGState* sp)
}
static int
-TIFFjpeg_create_decompress(JPEGState* sp)
+TIFFjpeg_create_decompress(JPEGState* sp, TIFF *tif)
{
/* initialize JPEG error handling */
sp->cinfo.d.err = jpeg_std_error(&sp->err);
sp->err.error_exit = TIFFjpeg_error_exit;
sp->err.output_message = TIFFjpeg_output_message;
- /* set client_data to avoid UMR warning from tools like Purify */
- sp->cinfo.d.client_data = NULL;
+ /* GS extension */
+ if (tif->get_jpeg_mem_ptr)
+ sp->cinfo.d.client_data = tif->get_jpeg_mem_ptr(tif->tif_clientdata);
+ else
+ /* set client_data to avoid UMR warning from tools like Purify */
+ sp->cinfo.d.client_data = NULL;
return CALLVJPEG(sp, jpeg_create_decompress(&sp->cinfo.d));
}
@@ -782,12 +789,9 @@ JPEGFixupTagsSubsampling(TIFF* tif)
*/
static const char module[] = "JPEGFixupTagsSubsampling";
struct JPEGFixupTagsSubsamplingData m;
+ uint64 fileoffset = TIFFGetStrileOffset(tif, 0);
- _TIFFFillStriles( tif );
-
- if( tif->tif_dir.td_stripbytecount == NULL
- || tif->tif_dir.td_stripoffset == NULL
- || tif->tif_dir.td_stripbytecount[0] == 0 )
+ if( fileoffset == 0 )
{
/* Do not even try to check if the first strip/tile does not
yet exist, as occurs when GDAL has created a new NULL file
@@ -806,9 +810,9 @@ JPEGFixupTagsSubsampling(TIFF* tif)
}
m.buffercurrentbyte=NULL;
m.bufferbytesleft=0;
- m.fileoffset=tif->tif_dir.td_stripoffset[0];
+ m.fileoffset=fileoffset;
m.filepositioned=0;
- m.filebytesleft=tif->tif_dir.td_stripbytecount[0];
+ m.filebytesleft=TIFFGetStrileByteCount(tif, 0);
if (!JPEGFixupTagsSubsamplingSec(&m))
TIFFWarningExt(tif->tif_clientdata,module,
"Unable to auto-correct subsampling values, likely corrupt JPEG compressed data in first strip/tile; auto-correcting skipped");
@@ -1070,7 +1074,7 @@ int TIFFJPEGIsFullStripRequired(TIFF* tif)
memset(&state, 0, sizeof(JPEGState));
state.tif = tif;
- TIFFjpeg_create_decompress(&state);
+ TIFFjpeg_create_decompress(&state, tif);
TIFFjpeg_data_src(&state);
@@ -1568,7 +1572,7 @@ JPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
JSAMPLE *outptr = (JSAMPLE*)tmpbuf + clumpoffset;
#else
JSAMPLE *outptr = (JSAMPLE*)buf + clumpoffset;
- if (cc < (tmsize_t) (clumpoffset + samples_per_clump*(clumps_per_line-1) + hsamp)) {
+ if (cc < (tmsize_t)(clumpoffset + (tmsize_t)samples_per_clump*(clumps_per_line-1) + hsamp)) {
TIFFErrorExt(tif->tif_clientdata, "JPEGDecodeRaw",
"application buffer not large enough for all data, possible subsampling issue");
return 0;
@@ -2128,8 +2132,8 @@ JPEGEncodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
/* data is expected to be supplied in multiples of a clumpline */
/* a clumpline is equivalent to v_sampling desubsampled scanlines */
/* TODO: the following calculation of bytesperclumpline, should substitute calculation of sp->bytesperline, except that it is per v_sampling lines */
- bytesperclumpline = (((sp->cinfo.c.image_width+sp->h_sampling-1)/sp->h_sampling)
- *(sp->h_sampling*sp->v_sampling+2)*sp->cinfo.c.data_precision+7)
+ bytesperclumpline = ((((tmsize_t)sp->cinfo.c.image_width+sp->h_sampling-1)/sp->h_sampling)
+ *((tmsize_t)sp->h_sampling*sp->v_sampling+2)*sp->cinfo.c.data_precision+7)
/8;
nrows = ( cc / bytesperclumpline ) * sp->v_sampling;
@@ -2448,7 +2452,7 @@ static int JPEGInitializeLibJPEG( TIFF * tif, int decompress )
* Initialize libjpeg.
*/
if ( decompress ) {
- if (!TIFFjpeg_create_decompress(sp))
+ if (!TIFFjpeg_create_decompress(sp, tif))
return (0);
} else {
if (!TIFFjpeg_create_compress(sp))
diff --git a/tiff/libtiff/tif_luv.c b/tiff/libtiff/tif_luv.c
index 4b25244b..6fe48588 100644
--- a/tiff/libtiff/tif_luv.c
+++ b/tiff/libtiff/tif_luv.c
@@ -1,5 +1,3 @@
-/* $Id: tif_luv.c,v 1.49 2017-07-24 12:47:30 erouault Exp $ */
-
/*
* Copyright (c) 1997 Greg Ward Larson
* Copyright (c) 1997 Silicon Graphics, Inc.
@@ -215,7 +213,7 @@ LogL16Decode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
bp = (unsigned char*) tif->tif_rawcp;
cc = tif->tif_rawcc;
/* get each byte string */
- for (shft = 2*8; (shft -= 8) >= 0; ) {
+ for (shft = 8; shft >= 0; shft -=8) {
for (i = 0; i < npixels && cc > 0; ) {
if (*bp >= 128) { /* run */
if( cc < 2 )
@@ -349,7 +347,7 @@ LogLuvDecode32(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
bp = (unsigned char*) tif->tif_rawcp;
cc = tif->tif_rawcc;
/* get each byte string */
- for (shft = 4*8; (shft -= 8) >= 0; ) {
+ for (shft = 24; shft >= 0; shft -=8) {
for (i = 0; i < npixels && cc > 0; ) {
if (*bp >= 128) { /* run */
if( cc < 2 )
@@ -467,7 +465,7 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
/* compress each byte string */
op = tif->tif_rawcp;
occ = tif->tif_rawdatasize - tif->tif_rawcc;
- for (shft = 2*8; (shft -= 8) >= 0; )
+ for (shft = 8; shft >= 0; shft -=8) {
for (i = 0; i < npixels; i += rc) {
if (occ < 4) {
tif->tif_rawcp = op;
@@ -522,6 +520,7 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
} else
rc = 0;
}
+ }
tif->tif_rawcp = op;
tif->tif_rawcc = tif->tif_rawdatasize - occ;
@@ -618,7 +617,7 @@ LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
/* compress each byte string */
op = tif->tif_rawcp;
occ = tif->tif_rawdatasize - tif->tif_rawcc;
- for (shft = 4*8; (shft -= 8) >= 0; )
+ for (shft = 24; shft >= 0; shft -=8) {
for (i = 0; i < npixels; i += rc) {
if (occ < 4) {
tif->tif_rawcp = op;
@@ -673,6 +672,7 @@ LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
} else
rc = 0;
}
+ }
tif->tif_rawcp = op;
tif->tif_rawcc = tif->tif_rawdatasize - occ;
@@ -742,9 +742,14 @@ LogLuvEncodeTile(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
#undef exp2 /* Conflict with C'99 function */
#define exp2(x) exp(M_LN2*(x))
-#define itrunc(x,m) ((m)==SGILOGENCODE_NODITHER ? \
- (int)(x) : \
- (int)((x) + rand()*(1./RAND_MAX) - .5))
+static int itrunc(double x, int m)
+{
+ if( m == SGILOGENCODE_NODITHER )
+ return (int)x;
+ /* Silence CoverityScan warning about bad crypto function */
+ /* coverity[dont_call] */
+ return (int)(x + rand()*(1./RAND_MAX) - .5);
+}
#if !LOGLUV_PUBLIC
static
@@ -1264,16 +1269,10 @@ LogL16GuessDataFmt(TIFFDirectory *td)
return (SGILOGDATAFMT_UNKNOWN);
}
-
-#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
-#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
-
static tmsize_t
multiply_ms(tmsize_t m1, tmsize_t m2)
{
- if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 )
- return 0;
- return m1 * m2;
+ return _TIFFMultiplySSize(NULL, m1, m2, NULL);
}
static int
@@ -1507,7 +1506,7 @@ LogLuvSetupEncode(TIFF* tif)
switch (td->td_photometric) {
case PHOTOMETRIC_LOGLUV:
if (!LogLuvInitState(tif))
- break;
+ return (0);
if (td->td_compression == COMPRESSION_SGILOG24) {
tif->tif_encoderow = LogLuvEncode24;
switch (sp->user_datafmt) {
@@ -1540,7 +1539,7 @@ LogLuvSetupEncode(TIFF* tif)
break;
case PHOTOMETRIC_LOGL:
if (!LogL16InitState(tif))
- break;
+ return (0);
tif->tif_encoderow = LogL16Encode;
switch (sp->user_datafmt) {
case SGILOGDATAFMT_FLOAT:
@@ -1556,7 +1555,7 @@ LogLuvSetupEncode(TIFF* tif)
TIFFErrorExt(tif->tif_clientdata, module,
"Inappropriate photometric interpretation %d for SGILog compression; %s",
td->td_photometric, "must be either LogLUV or LogL");
- break;
+ return (0);
}
sp->encoder_state = 1;
return (1);
diff --git a/tiff/libtiff/tif_lzma.c b/tiff/libtiff/tif_lzma.c
index 80fc3942..3f6096b6 100644
--- a/tiff/libtiff/tif_lzma.c
+++ b/tiff/libtiff/tif_lzma.c
@@ -1,5 +1,3 @@
-/* $Id: tif_lzma.c,v 1.6 2016-09-17 09:18:59 erouault Exp $ */
-
/*
* Copyright (c) 2010, Andrey Kiselev <dron@ak4719.spb.edu>
*
@@ -249,6 +247,7 @@ LZMAPreEncode(TIFF* tif, uint16 s)
{
static const char module[] = "LZMAPreEncode";
LZMAState *sp = EncoderState(tif);
+ lzma_ret ret;
(void) s;
assert(sp != NULL);
@@ -262,7 +261,13 @@ LZMAPreEncode(TIFF* tif, uint16 s)
"Liblzma cannot deal with buffers this size");
return 0;
}
- return (lzma_stream_encoder(&sp->stream, sp->filters, sp->check) == LZMA_OK);
+ ret = lzma_stream_encoder(&sp->stream, sp->filters, sp->check);
+ if (ret != LZMA_OK) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in lzma_stream_encoder(): %s", LZMAStrerror(ret));
+ return 0;
+ }
+ return 1;
}
/*
diff --git a/tiff/libtiff/tif_lzw.c b/tiff/libtiff/tif_lzw.c
index bc8f9c84..21064f29 100644
--- a/tiff/libtiff/tif_lzw.c
+++ b/tiff/libtiff/tif_lzw.c
@@ -1,5 +1,3 @@
-/* $Id: tif_lzw.c,v 1.57 2017-07-11 10:54:29 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -135,6 +133,7 @@ typedef struct {
long dec_restart; /* restart count */
#ifdef LZW_CHECKEOS
uint64 dec_bitsleft; /* available bits in raw data */
+ tmsize_t old_tif_rawcc; /* value of tif_rawcc at the end of the previous TIFLZWDecode() call */
#endif
decodeFunc dec_decode; /* regular or backwards compatible */
code_t* dec_codep; /* current recognized code */
@@ -248,6 +247,8 @@ LZWSetupDecode(TIFF* tif)
/*
* Zero-out the unused entries
*/
+ /* Silence false positive */
+ /* coverity[overrun-buffer-arg] */
_TIFFmemset(&sp->dec_codetab[CODE_CLEAR], 0,
(CODE_FIRST - CODE_CLEAR) * sizeof (code_t));
}
@@ -320,6 +321,7 @@ LZWPreDecode(TIFF* tif, uint16 s)
sp->dec_nbitsmask = MAXCODE(BITS_MIN);
#ifdef LZW_CHECKEOS
sp->dec_bitsleft = 0;
+ sp->old_tif_rawcc = 0;
#endif
sp->dec_free_entp = sp->dec_codetab + CODE_FIRST;
/*
@@ -427,7 +429,7 @@ LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
bp = (unsigned char *)tif->tif_rawcp;
#ifdef LZW_CHECKEOS
- sp->dec_bitsleft = (((uint64)tif->tif_rawcc) << 3);
+ sp->dec_bitsleft += (((uint64)tif->tif_rawcc - sp->old_tif_rawcc) << 3);
#endif
nbits = sp->lzw_nbits;
nextdata = sp->lzw_nextdata;
@@ -555,6 +557,9 @@ LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
tif->tif_rawcc -= (tmsize_t)( (uint8*) bp - tif->tif_rawcp );
tif->tif_rawcp = (uint8*) bp;
+#ifdef LZW_CHECKEOS
+ sp->old_tif_rawcc = tif->tif_rawcc;
+#endif
sp->lzw_nbits = (unsigned short) nbits;
sp->lzw_nextdata = nextdata;
sp->lzw_nextbits = nextbits;
@@ -604,6 +609,7 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
char *tp;
unsigned char *bp;
int code, nbits;
+ int len;
long nextbits, nextdata, nbitsmask;
code_t *codep, *free_entp, *maxcodep, *oldcodep;
@@ -657,7 +663,7 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
bp = (unsigned char *)tif->tif_rawcp;
#ifdef LZW_CHECKEOS
- sp->dec_bitsleft = (((uint64)tif->tif_rawcc) << 3);
+ sp->dec_bitsleft += (((uint64)tif->tif_rawcc - sp->old_tif_rawcc) << 3);
#endif
nbits = sp->lzw_nbits;
nextdata = sp->lzw_nextdata;
@@ -755,13 +761,18 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
} while (--occ);
break;
}
- assert(occ >= codep->length);
- op += codep->length;
- occ -= codep->length;
- tp = op;
+ len = codep->length;
+ tp = op + len;
do {
- *--tp = codep->value;
- } while( (codep = codep->next) != NULL );
+ int t;
+ --tp;
+ t = codep->value;
+ codep = codep->next;
+ *tp = (char)t;
+ } while (codep && tp > op);
+ assert(occ >= len);
+ op += len;
+ occ -= len;
} else {
*op++ = (char)code;
occ--;
@@ -770,6 +781,9 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s)
tif->tif_rawcc -= (tmsize_t)( (uint8*) bp - tif->tif_rawcp );
tif->tif_rawcp = (uint8*) bp;
+#ifdef LZW_CHECKEOS
+ sp->old_tif_rawcc = tif->tif_rawcc;
+#endif
sp->lzw_nbits = (unsigned short)nbits;
sp->lzw_nextdata = nextdata;
sp->lzw_nextbits = nextbits;
diff --git a/tiff/libtiff/tif_next.c b/tiff/libtiff/tif_next.c
index 08211788..0ba61aed 100644
--- a/tiff/libtiff/tif_next.c
+++ b/tiff/libtiff/tif_next.c
@@ -1,5 +1,3 @@
-/* $Id: tif_next.c,v 1.19 2016-09-04 21:32:56 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_ojpeg.c b/tiff/libtiff/tif_ojpeg.c
index 92ed1fa1..a3d4513a 100644
--- a/tiff/libtiff/tif_ojpeg.c
+++ b/tiff/libtiff/tif_ojpeg.c
@@ -1,5 +1,3 @@
-/* $Id: tif_ojpeg.c,v 1.69 2017-04-27 17:29:26 erouault Exp $ */
-
/* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0
specification is now totally obsolete and deprecated for new applications and
images. This file was was created solely in order to read unconverted images
@@ -206,6 +204,10 @@ static const TIFFField ojpegFields[] = {
# define XMD_H 1
#endif
+/* If we are building for GS, do NOT mess with boolean - we want it to be int on all platforms.
+ */
+#define GS_TIFF_BUILD
+#ifndef GS_TIFF_BUILD
/* Define "boolean" as unsigned char, not int, per Windows custom. */
#if defined(__WIN32__) && !defined(__MINGW32__)
# ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
@@ -213,9 +215,13 @@ static const TIFFField ojpegFields[] = {
# endif
# define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
#endif
+#endif
#include "jpeglib.h"
#include "jerror.h"
+#ifdef GS_TIFF_BUILD
+#include "jmemcust.h"
+#endif
typedef struct jpeg_error_mgr jpeg_error_mgr;
typedef struct jpeg_common_struct jpeg_common_struct;
@@ -244,7 +250,8 @@ typedef enum {
typedef struct {
TIFF* tif;
- int decoder_ok;
+ int decoder_ok;
+ int error_in_raw_data_decoding;
#ifndef LIBJPEG_ENCAP_EXTERNAL
JMP_BUF exit_jmpbuf;
#endif
@@ -335,6 +342,10 @@ typedef struct {
OJPEGStateOutState out_state;
uint8 out_buffer[OJPEG_BUFFER];
uint8* skip_buffer;
+#ifdef GS_TIFF_BUILD
+ jpeg_cust_mem_data jmem;
+ jpeg_cust_mem_data *jmem_parent;
+#endif
} OJPEGState;
static int OJPEGVGetField(TIFF* tif, uint32 tag, va_list ap);
@@ -424,7 +435,7 @@ TIFFInitOJPEG(TIFF* tif, int scheme)
assert(scheme==COMPRESSION_OJPEG);
- /*
+ /*
* Merge codec-specific tag information.
*/
if (!_TIFFMergeFields(tif, ojpegFields, TIFFArrayCount(ojpegFields))) {
@@ -680,7 +691,7 @@ OJPEGPreDecode(TIFF* tif, uint16 s)
if (OJPEGReadSecondarySos(tif,s)==0)
return(0);
}
- if isTiled(tif)
+ if (isTiled(tif))
m=tif->tif_curtile;
else
m=tif->tif_curstrip;
@@ -744,6 +755,7 @@ OJPEGPreDecodeSkipRaw(TIFF* tif)
}
m-=sp->subsampling_convert_clines-sp->subsampling_convert_state;
sp->subsampling_convert_state=0;
+ sp->error_in_raw_data_decoding=0;
}
while (m>=sp->subsampling_convert_clines)
{
@@ -794,6 +806,10 @@ OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
TIFFErrorExt(tif->tif_clientdata,module,"Cannot decode: decoder not correctly initialized");
return 0;
}
+ if( sp->error_in_raw_data_decoding )
+ {
+ return 0;
+ }
if (sp->libjpeg_jpeg_query_style==0)
{
if (OJPEGDecodeRaw(tif,buf,cc)==0)
@@ -833,8 +849,41 @@ OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc)
{
if (sp->subsampling_convert_state==0)
{
+ const jpeg_decompress_struct* cinfo = &sp->libjpeg_jpeg_decompress_struct;
+ int width = 0;
+ int last_col_width = 0;
+ int jpeg_bytes;
+ int expected_bytes;
+ int i;
+ if (cinfo->MCUs_per_row == 0)
+ {
+ sp->error_in_raw_data_decoding = 1;
+ return 0;
+ }
+ for (i = 0; i < cinfo->comps_in_scan; ++i)
+ {
+ const jpeg_component_info* info = cinfo->cur_comp_info[i];
+#if JPEG_LIB_VERSION >= 70
+ width += info->MCU_width * info->DCT_h_scaled_size;
+ last_col_width += info->last_col_width * info->DCT_h_scaled_size;
+#else
+ width += info->MCU_width * info->DCT_scaled_size;
+ last_col_width += info->last_col_width * info->DCT_scaled_size;
+#endif
+ }
+ jpeg_bytes = (cinfo->MCUs_per_row - 1) * width + last_col_width;
+ expected_bytes = sp->subsampling_convert_clinelenout * sp->subsampling_ver * sp->subsampling_hor;
+ if (jpeg_bytes != expected_bytes)
+ {
+ TIFFErrorExt(tif->tif_clientdata,module,"Inconsistent number of MCU in codestream");
+ sp->error_in_raw_data_decoding = 1;
+ return(0);
+ }
if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
+ {
+ sp->error_in_raw_data_decoding = 1;
return(0);
+ }
}
oy=sp->subsampling_convert_ybuf+sp->subsampling_convert_state*sp->subsampling_ver*sp->subsampling_convert_ylinelen;
ocb=sp->subsampling_convert_cbbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen;
@@ -992,7 +1041,6 @@ OJPEGSubsamplingCorrect(TIFF* tif)
OJPEGState* sp=(OJPEGState*)tif->tif_data;
uint8 mh;
uint8 mv;
- _TIFFFillStriles( tif );
assert(sp->subsamplingcorrect_done==0);
if ((tif->tif_dir.td_samplesperpixel!=3) || ((tif->tif_dir.td_photometric!=PHOTOMETRIC_YCBCR) &&
@@ -1048,7 +1096,7 @@ OJPEGReadHeaderInfo(TIFF* tif)
assert(sp->readheader_done==0);
sp->image_width=tif->tif_dir.td_imagewidth;
sp->image_length=tif->tif_dir.td_imagelength;
- if isTiled(tif)
+ if (isTiled(tif))
{
sp->strile_width=tif->tif_dir.td_tilewidth;
sp->strile_length=tif->tif_dir.td_tilelength;
@@ -1084,6 +1132,12 @@ OJPEGReadHeaderInfo(TIFF* tif)
}
if (sp->strile_length<sp->image_length)
{
+ if (((sp->subsampling_hor!=1) && (sp->subsampling_hor!=2) && (sp->subsampling_hor!=4)) ||
+ ((sp->subsampling_ver!=1) && (sp->subsampling_ver!=2) && (sp->subsampling_ver!=4)))
+ {
+ TIFFErrorExt(tif->tif_clientdata,module,"Invalid subsampling values");
+ return(0);
+ }
if (sp->strile_length%(sp->subsampling_ver*8)!=0)
{
TIFFErrorExt(tif->tif_clientdata,module,"Incompatible vertical subsampling and image strip/tile length");
@@ -1152,6 +1206,91 @@ OJPEGReadSecondarySos(TIFF* tif, uint16 s)
return(1);
}
+#ifdef GS_TIFF_BUILD
+#define TIFF_FROM_CINFO(cinfo) \
+ ((TIFF *)GET_CUST_MEM_DATA(cinfo)->priv)
+
+static void *j_mem_get_small(j_common_ptr cinfo, size_t size)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+ void *ret;
+
+ cinfo->client_data = sp->jmem_parent;
+ ret = sp->jmem_parent->j_mem_get_small(cinfo, size);
+ cinfo->client_data = jc;
+
+ return ret;
+}
+
+static void *j_mem_get_large(j_common_ptr cinfo, size_t size)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+ void *ret;
+
+ cinfo->client_data = sp->jmem_parent;
+ ret = sp->jmem_parent->j_mem_get_large(cinfo, size);
+ cinfo->client_data = jc;
+
+ return ret;
+}
+
+static void j_mem_free_small(j_common_ptr cinfo, void *object, size_t size)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+
+ cinfo->client_data = sp->jmem_parent;
+ sp->jmem_parent->j_mem_free_small(cinfo, object, size);
+ cinfo->client_data = jc;
+}
+
+static void j_mem_free_large(j_common_ptr cinfo, void *object, size_t size)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+
+ cinfo->client_data = sp->jmem_parent;
+ sp->jmem_parent->j_mem_free_large(cinfo, object, size);
+ cinfo->client_data = jc;
+}
+
+static long j_mem_init (j_common_ptr cinfo)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+ long ret;
+
+ cinfo->client_data = sp->jmem_parent;
+ ret = sp->jmem_parent->j_mem_init(cinfo);
+ cinfo->client_data = jc;
+
+ return ret;
+}
+
+static void j_mem_term (j_common_ptr cinfo)
+{
+ jpeg_cust_mem_data *jc = GET_CUST_MEM_DATA(cinfo);
+ TIFF *tif = (TIFF *)jc->priv;
+ OJPEGState* sp=(OJPEGState*)tif->tif_data;
+
+ cinfo->client_data = sp->jmem_parent;
+ sp->jmem_parent->j_mem_term(cinfo);
+ cinfo->client_data = jc;
+}
+#else
+
+#define TIFF_FROM_CINFO(cinfo) \
+ ((TIFF *)GET_CUST_MEM_DATA(cinfo))
+
+#endif
+
static int
OJPEGWriteHeaderInfo(TIFF* tif)
{
@@ -1168,7 +1307,17 @@ OJPEGWriteHeaderInfo(TIFF* tif)
sp->libjpeg_jpeg_error_mgr.output_message=OJPEGLibjpegJpegErrorMgrOutputMessage;
sp->libjpeg_jpeg_error_mgr.error_exit=OJPEGLibjpegJpegErrorMgrErrorExit;
sp->libjpeg_jpeg_decompress_struct.err=&(sp->libjpeg_jpeg_error_mgr);
+ /* set client_data to avoid UMR warning from tools like Purify */
+#ifdef GS_TIFF_BUILD
+ sp->jmem_parent = tif->get_jpeg_mem_ptr(tif->tif_clientdata);
+ (void)jpeg_cust_mem_init(&sp->jmem, (void *)tif,
+ j_mem_init, j_mem_term, NULL,
+ j_mem_get_small, j_mem_free_small,
+ j_mem_get_large, j_mem_free_large, NULL);
+ sp->libjpeg_jpeg_decompress_struct.client_data=&sp->jmem;
+#else
sp->libjpeg_jpeg_decompress_struct.client_data=(void*)tif;
+#endif
if (jpeg_create_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
return(0);
sp->libjpeg_session_active=1;
@@ -1199,7 +1348,13 @@ OJPEGWriteHeaderInfo(TIFF* tif)
sp->subsampling_convert_ybuflen=sp->subsampling_convert_ylinelen*sp->subsampling_convert_ylines;
sp->subsampling_convert_cbuflen=sp->subsampling_convert_clinelen*sp->subsampling_convert_clines;
sp->subsampling_convert_ycbcrbuflen=sp->subsampling_convert_ybuflen+2*sp->subsampling_convert_cbuflen;
- sp->subsampling_convert_ycbcrbuf=_TIFFmalloc(sp->subsampling_convert_ycbcrbuflen);
+ /* The calloc is not normally necessary, except in some edge/broken cases */
+ /* for example for a tiled image of height 1 with a tile height of 1 and subsampling_hor=subsampling_ver=2 */
+ /* In that case, libjpeg will only fill the 8 first lines of the 16 lines */
+ /* See https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16844 */
+ /* Even if this case is allowed (?), its handling is broken because OJPEGPreDecode() should also likely */
+ /* reset subsampling_convert_state to 0 when changing tile. */
+ sp->subsampling_convert_ycbcrbuf=_TIFFcalloc(1, sp->subsampling_convert_ycbcrbuflen);
if (sp->subsampling_convert_ycbcrbuf==0)
{
TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
@@ -1225,10 +1380,11 @@ OJPEGWriteHeaderInfo(TIFF* tif)
*m++=sp->subsampling_convert_cbbuf+n*sp->subsampling_convert_clinelen;
for (n=0; n<sp->subsampling_convert_clines; n++)
*m++=sp->subsampling_convert_crbuf+n*sp->subsampling_convert_clinelen;
- sp->subsampling_convert_clinelenout=((sp->strile_width+sp->subsampling_hor-1)/sp->subsampling_hor);
+ sp->subsampling_convert_clinelenout=sp->strile_width/sp->subsampling_hor + ((sp->strile_width % sp->subsampling_hor) != 0 ? 1 : 0);
sp->subsampling_convert_state=0;
+ sp->error_in_raw_data_decoding=0;
sp->bytes_per_line=sp->subsampling_convert_clinelenout*(sp->subsampling_ver*sp->subsampling_hor+2);
- sp->lines_per_strile=((sp->strile_length+sp->subsampling_ver-1)/sp->subsampling_ver);
+ sp->lines_per_strile=sp->strile_length/sp->subsampling_ver + ((sp->strile_length % sp->subsampling_ver) != 0 ? 1 : 0);
sp->subsampling_convert_log=1;
}
}
@@ -1274,7 +1430,9 @@ OJPEGReadHeaderInfoSec(TIFF* tif)
}
else
{
- if ((sp->jpeg_interchange_format_length==0) || (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size))
+ if ((sp->jpeg_interchange_format_length==0) ||
+ (sp->jpeg_interchange_format > TIFF_UINT64_MAX - sp->jpeg_interchange_format_length) ||
+ (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size))
sp->jpeg_interchange_format_length=sp->file_size-sp->jpeg_interchange_format;
}
}
@@ -1991,32 +2149,30 @@ OJPEGReadBufferFill(OJPEGState* sp)
sp->in_buffer_source=osibsStrile;
break;
case osibsStrile:
- if (!_TIFFFillStriles( sp->tif )
- || sp->tif->tif_dir.td_stripoffset == NULL
- || sp->tif->tif_dir.td_stripbytecount == NULL)
- return 0;
-
if (sp->in_buffer_next_strile==sp->in_buffer_strile_count)
sp->in_buffer_source=osibsEof;
else
{
- sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile];
+ int err = 0;
+ sp->in_buffer_file_pos=TIFFGetStrileOffsetWithErr(sp->tif, sp->in_buffer_next_strile, &err);
+ if( err )
+ return 0;
if (sp->in_buffer_file_pos!=0)
{
+ uint64 bytecount = TIFFGetStrileByteCountWithErr(sp->tif, sp->in_buffer_next_strile, &err);
+ if( err )
+ return 0;
if (sp->in_buffer_file_pos>=sp->file_size)
sp->in_buffer_file_pos=0;
- else if (sp->tif->tif_dir.td_stripbytecount==NULL)
+ else if (bytecount==0)
sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
else
{
- if (sp->tif->tif_dir.td_stripbytecount == 0) {
- TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing");
- return(0);
- }
- sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile];
+ sp->in_buffer_file_togo=bytecount;
if (sp->in_buffer_file_togo==0)
sp->in_buffer_file_pos=0;
- else if (sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size)
+ else if (sp->in_buffer_file_pos > TIFF_UINT64_MAX - sp->in_buffer_file_togo ||
+ sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size)
sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
}
}
@@ -2482,18 +2638,20 @@ jpeg_encap_unwind(TIFF* tif)
static void
OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo)
{
+ TIFF *tif = TIFF_FROM_CINFO(cinfo);
char buffer[JMSG_LENGTH_MAX];
(*cinfo->err->format_message)(cinfo,buffer);
- TIFFWarningExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer);
+ TIFFWarningExt(tif->tif_clientdata,"LibJpeg","%s",buffer);
}
static void
OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo)
{
+ TIFF *tif = TIFF_FROM_CINFO(cinfo);
char buffer[JMSG_LENGTH_MAX];
(*cinfo->err->format_message)(cinfo,buffer);
- TIFFErrorExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer);
- jpeg_encap_unwind((TIFF*)(cinfo->client_data));
+ TIFFErrorExt(tif->tif_clientdata,"LibJpeg","%s",buffer);
+ jpeg_encap_unwind(tif);
}
static void
@@ -2505,7 +2663,7 @@ OJPEGLibjpegJpegSourceMgrInitSource(jpeg_decompress_struct* cinfo)
static boolean
OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo)
{
- TIFF* tif=(TIFF*)cinfo->client_data;
+ TIFF *tif = TIFF_FROM_CINFO(cinfo);
OJPEGState* sp=(OJPEGState*)tif->tif_data;
void* mem=0;
uint32 len=0U;
@@ -2522,7 +2680,7 @@ OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo)
static void
OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_bytes)
{
- TIFF* tif=(TIFF*)cinfo->client_data;
+ TIFF *tif = TIFF_FROM_CINFO(cinfo);
(void)num_bytes;
TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
jpeg_encap_unwind(tif);
@@ -2535,7 +2693,7 @@ OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_b
static boolean
OJPEGLibjpegJpegSourceMgrResyncToRestart(jpeg_decompress_struct* cinfo, int desired)
{
- TIFF* tif=(TIFF*)cinfo->client_data;
+ TIFF *tif = TIFF_FROM_CINFO(cinfo);
(void)desired;
TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
jpeg_encap_unwind(tif);
diff --git a/tiff/libtiff/tif_open.c b/tiff/libtiff/tif_open.c
index a7279e1e..ffe7835f 100644
--- a/tiff/libtiff/tif_open.c
+++ b/tiff/libtiff/tif_open.c
@@ -1,5 +1,3 @@
-/* $Id: tif_open.c,v 1.48 2016-11-20 22:29:47 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -133,6 +131,7 @@ TIFFClientOpen(
if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc) {
TIFFErrorExt(clientdata, module,
"One of the client procedures is NULL pointer.");
+ _TIFFfree(tif);
goto bad2;
}
tif->tif_readproc = readproc;
@@ -183,6 +182,8 @@ TIFFClientOpen(
* 'h' read TIFF header only, do not load the first IFD
* '4' ClassicTIFF for creating a file (default)
* '8' BigTIFF for creating a file
+ * 'D' enable use of deferred strip/tile offset/bytecount array loading.
+ * 'O' on-demand loading of values instead of whole array loading (implies D)
*
* The use of the 'l' and 'b' flags is strongly discouraged.
* These flags are provided solely because numerous vendors,
@@ -264,7 +265,22 @@ TIFFClientOpen(
if (m&O_CREAT)
tif->tif_flags |= TIFF_BIGTIFF;
break;
+ case 'D':
+ tif->tif_flags |= TIFF_DEFERSTRILELOAD;
+ break;
+ case 'O':
+ if( m == O_RDONLY )
+ tif->tif_flags |= (TIFF_LAZYSTRILELOAD | TIFF_DEFERSTRILELOAD);
+ break;
}
+
+#ifdef DEFER_STRILE_LOAD
+ /* Compatibility with old DEFER_STRILE_LOAD compilation flag */
+ /* Probably unneeded, since to the best of my knowledge (E. Rouault) */
+ /* GDAL was the only user of this, and will now use the new 'D' flag */
+ tif->tif_flags |= TIFF_DEFERSTRILELOAD;
+#endif
+
/*
* Read in TIFF header.
*/
@@ -715,6 +731,14 @@ TIFFGetUnmapFileProc(TIFF* tif)
return (tif->tif_unmapproc);
}
+void
+TIFFSetJpegMemFunction(TIFF *tif,
+ void *(*fn)(thandle_t))
+{
+ tif->get_jpeg_mem_ptr = fn;
+}
+
+
/* vim: set ts=8 sts=8 sw=8 noet: */
/*
* Local Variables:
diff --git a/tiff/libtiff/tif_packbits.c b/tiff/libtiff/tif_packbits.c
index 18904b01..a8f29e87 100644
--- a/tiff/libtiff/tif_packbits.c
+++ b/tiff/libtiff/tif_packbits.c
@@ -1,5 +1,3 @@
-/* $Id: tif_packbits.c,v 1.26 2017-05-14 02:26:07 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_pixarlog.c b/tiff/libtiff/tif_pixarlog.c
index 0ae4f18b..0ed9f010 100644
--- a/tiff/libtiff/tif_pixarlog.c
+++ b/tiff/libtiff/tif_pixarlog.c
@@ -1,5 +1,3 @@
-/* $Id: tif_pixarlog.c,v 1.54 2017-07-10 10:40:28 erouault Exp $ */
-
/*
* Copyright (c) 1996-1997 Sam Leffler
* Copyright (c) 1996 Pixar
@@ -636,20 +634,16 @@ PixarLogGuessDataFmt(TIFFDirectory *td)
return guess;
}
-#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
-#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
-
static tmsize_t
multiply_ms(tmsize_t m1, tmsize_t m2)
{
- if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 )
- return 0;
- return m1 * m2;
+ return _TIFFMultiplySSize(NULL, m1, m2, NULL);
}
static tmsize_t
add_ms(tmsize_t m1, tmsize_t m2)
{
+ assert(m1 >= 0 && m2 >= 0);
/* if either input is zero, assume overflow already occurred */
if (m1 == 0 || m2 == 0)
return 0;
@@ -819,9 +813,7 @@ PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
TIFFErrorExt(tif->tif_clientdata, module,
"Decoding error at scanline %lu, %s",
(unsigned long) tif->tif_row, sp->stream.msg ? sp->stream.msg : "(null)");
- if (inflateSync(&sp->stream) != Z_OK)
- return (0);
- continue;
+ return (0);
}
if (state != Z_OK) {
TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s",
@@ -1155,7 +1147,7 @@ PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
llen = sp->stride * td->td_imagewidth;
/* Check against the number of elements (of size uint16) of sp->tbuf */
- if( n > (tmsize_t)(td->td_rowsperstrip * llen) )
+ if( n > ((tmsize_t)td->td_rowsperstrip * llen) )
{
TIFFErrorExt(tif->tif_clientdata, module,
"Too many input bytes provided");
diff --git a/tiff/libtiff/tif_predict.c b/tiff/libtiff/tif_predict.c
index 9ae1f57a..b775663a 100644
--- a/tiff/libtiff/tif_predict.c
+++ b/tiff/libtiff/tif_predict.c
@@ -1,5 +1,3 @@
-/* $Id: tif_predict.c,v 1.44 2017-06-18 10:31:50 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_predict.h b/tiff/libtiff/tif_predict.h
index 6c68e21a..a326b9b8 100644
--- a/tiff/libtiff/tif_predict.h
+++ b/tiff/libtiff/tif_predict.h
@@ -1,5 +1,3 @@
-/* $Id: tif_predict.h,v 1.9 2016-10-31 17:24:26 erouault Exp $ */
-
/*
* Copyright (c) 1995-1997 Sam Leffler
* Copyright (c) 1995-1997 Silicon Graphics, Inc.
@@ -26,6 +24,10 @@
#ifndef _TIFFPREDICT_
#define _TIFFPREDICT_
+
+#include "tiffio.h"
+#include "tiffiop.h"
+
/*
* ``Library-private'' Support for the Predictor Tag
*/
diff --git a/tiff/libtiff/tif_print.c b/tiff/libtiff/tif_print.c
index 24d4b98a..a0737941 100644
--- a/tiff/libtiff/tif_print.c
+++ b/tiff/libtiff/tif_print.c
@@ -1,5 +1,3 @@
-/* $Id: tif_print.c,v 1.65 2016-11-20 22:31:22 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -546,7 +544,7 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
uint16 i;
fprintf(fd, " %2ld: %5u",
l, td->td_transferfunction[0][l]);
- for (i = 1; i < td->td_samplesperpixel; i++)
+ for (i = 1; i < td->td_samplesperpixel - td->td_extrasamples && i < 3; i++)
fprintf(fd, " %5u",
td->td_transferfunction[i][l]);
fputc('\n', fd);
@@ -654,8 +652,6 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
if (tif->tif_tagmethods.printdir)
(*tif->tif_tagmethods.printdir)(tif, fd, flags);
- _TIFFFillStriles( tif );
-
if ((flags & TIFFPRINT_STRIPS) &&
TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) {
uint32 s;
@@ -667,13 +663,13 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
fprintf(fd, " %3lu: [%8I64u, %8I64u]\n",
(unsigned long) s,
- (unsigned __int64) td->td_stripoffset[s],
- (unsigned __int64) td->td_stripbytecount[s]);
+ (unsigned __int64) TIFFGetStrileOffset(tif, s),
+ (unsigned __int64) TIFFGetStrileByteCount(tif, s));
#else
fprintf(fd, " %3lu: [%8llu, %8llu]\n",
(unsigned long) s,
- (unsigned long long) td->td_stripoffset[s],
- (unsigned long long) td->td_stripbytecount[s]);
+ (unsigned long long) TIFFGetStrileOffset(tif, s),
+ (unsigned long long) TIFFGetStrileByteCount(tif, s));
#endif
}
}
diff --git a/tiff/libtiff/tif_read.c b/tiff/libtiff/tif_read.c
index 2ba985a7..527fadd6 100644
--- a/tiff/libtiff/tif_read.c
+++ b/tiff/libtiff/tif_read.c
@@ -1,5 +1,3 @@
-/* $Id: tif_read.c,v 1.66 2017-11-17 20:21:00 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -31,9 +29,6 @@
#include "tiffiop.h"
#include <stdio.h>
-#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
-#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
-
int TIFFFillStrip(TIFF* tif, uint32 strip);
int TIFFFillTile(TIFF* tif, uint32 tile);
static int TIFFStartStrip(TIFF* tif, uint32 strip);
@@ -51,6 +46,8 @@ TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* m
#define THRESHOLD_MULTIPLIER 10
#define MAX_THRESHOLD (THRESHOLD_MULTIPLIER * THRESHOLD_MULTIPLIER * THRESHOLD_MULTIPLIER * INITIAL_THRESHOLD)
+#define TIFF_INT64_MAX ((((int64)0x7FFFFFFF) << 32) | 0xFFFFFFFF)
+
/* Read 'size' bytes in tif_rawdata buffer starting at offset 'rawdata_offset'
* Returns 1 in case of success, 0 otherwise. */
static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size,
@@ -58,11 +55,27 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size,
int is_strip, uint32 strip_or_tile,
const char* module )
{
-#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8
+#if SIZEOF_SIZE_T == 8
tmsize_t threshold = INITIAL_THRESHOLD;
#endif
tmsize_t already_read = 0;
+
+#if SIZEOF_SIZE_T != 8
+ /* On 32 bit processes, if the request is large enough, check against */
+ /* file size */
+ if( size > 1000 * 1000 * 1000 )
+ {
+ uint64 filesize = TIFFGetFileSize(tif);
+ if( (uint64)size >= filesize )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Chunk size requested is larger than file size.");
+ return 0;
+ }
+ }
+#endif
+
/* On 64 bit processes, read first a maximum of 1 MB, then 10 MB, etc */
/* so as to avoid allocating too much memory in case the file is too */
/* short. We could ask for the file size, but this might be */
@@ -73,7 +86,7 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size,
{
tmsize_t bytes_read;
tmsize_t to_read = size - already_read;
-#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8
+#if SIZEOF_SIZE_T == 8
if( to_read >= threshold && threshold < MAX_THRESHOLD &&
already_read + to_read + rawdata_offset > tif->tif_rawdatasize )
{
@@ -105,6 +118,11 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size,
}
tif->tif_rawdata = new_rawdata;
}
+ if( tif->tif_rawdata == NULL )
+ {
+ /* should not happen in practice but helps CoverityScan */
+ return 0;
+ }
bytes_read = TIFFReadFile(tif,
tif->tif_rawdata + rawdata_offset + already_read, to_read);
@@ -172,17 +190,14 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart )
tmsize_t to_read;
tmsize_t read_ahead_mod;
/* tmsize_t bytecountm; */
-
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
-
+
/*
* Expand raw data buffer, if needed, to hold data
* strip coming from file (perhaps should set upper
* bound on the size of a buffer we'll use?).
*/
- /* bytecountm=(tmsize_t) td->td_stripbytecount[strip]; */
+ /* bytecountm=(tmsize_t) TIFFGetStrileByteCount(tif, strip); */
/* Not completely sure where the * 2 comes from, but probably for */
/* an exponentional growth strategy of tif_rawdatasize */
@@ -226,7 +241,7 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart )
/*
** Seek to the point in the file where more data should be read.
*/
- read_offset = td->td_stripoffset[strip]
+ read_offset = TIFFGetStrileOffset(tif, strip)
+ tif->tif_rawdataoff + tif->tif_rawdataloaded;
if (!SeekOK(tif, read_offset)) {
@@ -243,10 +258,10 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart )
to_read = read_ahead_mod - unused_data;
else
to_read = tif->tif_rawdatasize - unused_data;
- if( (uint64) to_read > td->td_stripbytecount[strip]
+ if( (uint64) to_read > TIFFGetStrileByteCount(tif, strip)
- tif->tif_rawdataoff - tif->tif_rawdataloaded )
{
- to_read = (tmsize_t) td->td_stripbytecount[strip]
+ to_read = (tmsize_t) TIFFGetStrileByteCount(tif, strip)
- tif->tif_rawdataoff - tif->tif_rawdataloaded;
}
@@ -285,7 +300,7 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart )
/* For JPEG, if there are multiple scans (can generally be known */
/* with the read_ahead used), we need to read the whole strip */
if( tif->tif_dir.td_compression==COMPRESSION_JPEG &&
- (uint64)tif->tif_rawcc < td->td_stripbytecount[strip] )
+ (uint64)tif->tif_rawcc < TIFFGetStrileByteCount(tif, strip) )
{
if( TIFFJPEGIsFullStripRequired(tif) )
{
@@ -344,10 +359,15 @@ TIFFSeek(TIFF* tif, uint32 row, uint16 sample )
* read it a few lines at a time?
*/
#if defined(CHUNKY_STRIP_READ_SUPPORT)
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
- whole_strip = tif->tif_dir.td_stripbytecount[strip] < 10
+ whole_strip = TIFFGetStrileByteCount(tif, strip) < 10
|| isMapped(tif);
+ if( td->td_compression == COMPRESSION_LERC ||
+ td->td_compression == COMPRESSION_JBIG )
+ {
+ /* Ideally plugins should have a way to declare they don't support
+ * chunk strip */
+ whole_strip = 1;
+ }
#else
whole_strip = 1;
#endif
@@ -392,7 +412,7 @@ TIFFSeek(TIFF* tif, uint32 row, uint16 sample )
else if( !whole_strip )
{
if( ((tif->tif_rawdata + tif->tif_rawdataloaded) - tif->tif_rawcp) < read_ahead
- && (uint64) tif->tif_rawdataoff+tif->tif_rawdataloaded < td->td_stripbytecount[strip] )
+ && (uint64) tif->tif_rawdataoff+tif->tif_rawdataloaded < TIFFGetStrileByteCount(tif, strip) )
{
if( !TIFFFillStripPartial(tif,strip,read_ahead,0) )
return 0;
@@ -589,16 +609,11 @@ static tmsize_t
TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,
const char* module)
{
- TIFFDirectory *td = &tif->tif_dir;
-
- if (!_TIFFFillStriles( tif ))
- return ((tmsize_t)(-1));
-
assert((tif->tif_flags&TIFF_NOREADRAW)==0);
if (!isMapped(tif)) {
tmsize_t cc;
- if (!SeekOK(tif, td->td_stripoffset[strip])) {
+ if (!SeekOK(tif, TIFFGetStrileOffset(tif, strip))) {
TIFFErrorExt(tif->tif_clientdata, module,
"Seek error at scanline %lu, strip %lu",
(unsigned long) tif->tif_row, (unsigned long) strip);
@@ -624,8 +639,8 @@ TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,
} else {
tmsize_t ma = 0;
tmsize_t n;
- if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)||
- ((ma=(tmsize_t)td->td_stripoffset[strip])>tif->tif_size))
+ if ((TIFFGetStrileOffset(tif, strip) > (uint64)TIFF_TMSIZE_T_MAX)||
+ ((ma=(tmsize_t)TIFFGetStrileOffset(tif, strip))>tif->tif_size))
{
n=0;
}
@@ -669,12 +684,10 @@ static tmsize_t
TIFFReadRawStripOrTile2(TIFF* tif, uint32 strip_or_tile, int is_strip,
tmsize_t size, const char* module)
{
- TIFFDirectory *td = &tif->tif_dir;
-
assert( !isMapped(tif) );
assert((tif->tif_flags&TIFF_NOREADRAW)==0);
- if (!SeekOK(tif, td->td_stripoffset[strip_or_tile])) {
+ if (!SeekOK(tif, TIFFGetStrileOffset(tif, strip_or_tile))) {
if( is_strip )
{
TIFFErrorExt(tif->tif_clientdata, module,
@@ -710,7 +723,7 @@ TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size)
{
static const char module[] = "TIFFReadRawStrip";
TIFFDirectory *td = &tif->tif_dir;
- uint64 bytecount;
+ uint64 bytecount64;
tmsize_t bytecountm;
if (!TIFFCheckRead(tif, 0))
@@ -728,31 +741,23 @@ TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size)
"Compression scheme does not support access to raw uncompressed data");
return ((tmsize_t)(-1));
}
- bytecount = td->td_stripbytecount[strip];
- if ((int64)bytecount <= 0) {
-#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
- TIFFErrorExt(tif->tif_clientdata, module,
- "%I64u: Invalid strip byte count, strip %lu",
- (unsigned __int64) bytecount,
- (unsigned long) strip);
-#else
- TIFFErrorExt(tif->tif_clientdata, module,
- "%llu: Invalid strip byte count, strip %lu",
- (unsigned long long) bytecount,
- (unsigned long) strip);
-#endif
- return ((tmsize_t)(-1));
- }
- bytecountm = (tmsize_t)bytecount;
- if ((uint64)bytecountm!=bytecount) {
- TIFFErrorExt(tif->tif_clientdata, module, "Integer overflow");
+ bytecount64 = TIFFGetStrileByteCount(tif, strip);
+ if (size != (tmsize_t)(-1) && (uint64)size <= bytecount64)
+ bytecountm = size;
+ else
+ bytecountm = _TIFFCastUInt64ToSSize(tif, bytecount64, module);
+ if( bytecountm == 0 ) {
return ((tmsize_t)(-1));
}
- if (size != (tmsize_t)(-1) && size < bytecountm)
- bytecountm = size;
return (TIFFReadRawStrip1(tif, strip, buf, bytecountm, module));
}
+TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW
+static uint64 NoSantizeSubUInt64(uint64 a, uint64 b)
+{
+ return a - b;
+}
+
/*
* Read the specified strip and setup for decoding. The data buffer is
* expanded, as necessary, to hold the strip's data.
@@ -763,13 +768,10 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
static const char module[] = "TIFFFillStrip";
TIFFDirectory *td = &tif->tif_dir;
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
-
if ((tif->tif_flags&TIFF_NOREADRAW)==0)
{
- uint64 bytecount = td->td_stripbytecount[strip];
- if ((int64)bytecount <= 0) {
+ uint64 bytecount = TIFFGetStrileByteCount(tif, strip);
+ if( bytecount == 0 || bytecount > (uint64)TIFF_INT64_MAX ) {
#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
TIFFErrorExt(tif->tif_clientdata, module,
"Invalid strip byte count %I64u, strip %lu",
@@ -796,7 +798,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
(bytecount - 4096) / 10 > (uint64)stripsize )
{
uint64 newbytecount = (uint64)stripsize * 10 + 4096;
- if( (int64)newbytecount >= 0 )
+ if( newbytecount == 0 || newbytecount > (uint64)TIFF_INT64_MAX )
{
#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
TIFFWarningExt(tif->tif_clientdata, module,
@@ -821,13 +823,13 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
* We must check for overflow, potentially causing
* an OOB read. Instead of simple
*
- * td->td_stripoffset[strip]+bytecount > tif->tif_size
+ * TIFFGetStrileOffset(tif, strip)+bytecount > tif->tif_size
*
* comparison (which can overflow) we do the following
* two comparisons:
*/
if (bytecount > (uint64)tif->tif_size ||
- td->td_stripoffset[strip] > (uint64)tif->tif_size - bytecount) {
+ TIFFGetStrileOffset(tif, strip) > (uint64)tif->tif_size - bytecount) {
/*
* This error message might seem strange, but
* it's what would happen if a read were done
@@ -839,7 +841,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
"Read error on strip %lu; "
"got %I64u bytes, expected %I64u",
(unsigned long) strip,
- (unsigned __int64) tif->tif_size - td->td_stripoffset[strip],
+ (unsigned __int64) NoSantizeSubUInt64(tif->tif_size, TIFFGetStrileOffset(tif, strip)),
(unsigned __int64) bytecount);
#else
TIFFErrorExt(tif->tif_clientdata, module,
@@ -847,7 +849,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
"Read error on strip %lu; "
"got %llu bytes, expected %llu",
(unsigned long) strip,
- (unsigned long long) tif->tif_size - td->td_stripoffset[strip],
+ (unsigned long long) NoSantizeSubUInt64(tif->tif_size, TIFFGetStrileOffset(tif, strip)),
(unsigned long long) bytecount);
#endif
tif->tif_curstrip = NOSTRIP;
@@ -876,7 +878,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip)
}
tif->tif_flags &= ~TIFF_MYBUFFER;
tif->tif_rawdatasize = (tmsize_t)bytecount;
- tif->tif_rawdata = tif->tif_base + (tmsize_t)td->td_stripoffset[strip];
+ tif->tif_rawdata = tif->tif_base + (tmsize_t)TIFFGetStrileOffset(tif, strip);
tif->tif_rawdataoff = 0;
tif->tif_rawdataloaded = (tmsize_t) bytecount;
@@ -1091,16 +1093,11 @@ _TIFFReadEncodedTileAndAllocBuffer(TIFF* tif, uint32 tile,
static tmsize_t
TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* module)
{
- TIFFDirectory *td = &tif->tif_dir;
-
- if (!_TIFFFillStriles( tif ))
- return ((tmsize_t)(-1));
-
assert((tif->tif_flags&TIFF_NOREADRAW)==0);
if (!isMapped(tif)) {
tmsize_t cc;
- if (!SeekOK(tif, td->td_stripoffset[tile])) {
+ if (!SeekOK(tif, TIFFGetStrileOffset(tif, tile))) {
TIFFErrorExt(tif->tif_clientdata, module,
"Seek error at row %lu, col %lu, tile %lu",
(unsigned long) tif->tif_row,
@@ -1130,9 +1127,9 @@ TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* m
} else {
tmsize_t ma,mb;
tmsize_t n;
- ma=(tmsize_t)td->td_stripoffset[tile];
+ ma=(tmsize_t)TIFFGetStrileOffset(tif, tile);
mb=ma+size;
- if ((td->td_stripoffset[tile] > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size))
+ if ((TIFFGetStrileOffset(tif, tile) > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size))
n=0;
else if ((mb<ma)||(mb<size)||(mb>tif->tif_size))
n=tif->tif_size-ma;
@@ -1188,13 +1185,12 @@ TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size)
"Compression scheme does not support access to raw uncompressed data");
return ((tmsize_t)(-1));
}
- bytecount64 = td->td_stripbytecount[tile];
- if (size != (tmsize_t)(-1) && (uint64)size < bytecount64)
- bytecount64 = (uint64)size;
- bytecountm = (tmsize_t)bytecount64;
- if ((uint64)bytecountm!=bytecount64)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
+ bytecount64 = TIFFGetStrileByteCount(tif, tile);
+ if (size != (tmsize_t)(-1) && (uint64)size <= bytecount64)
+ bytecountm = size;
+ else
+ bytecountm = _TIFFCastUInt64ToSSize(tif, bytecount64, module);
+ if( bytecountm == 0 ) {
return ((tmsize_t)(-1));
}
return (TIFFReadRawTile1(tif, tile, buf, bytecountm, module));
@@ -1210,13 +1206,10 @@ TIFFFillTile(TIFF* tif, uint32 tile)
static const char module[] = "TIFFFillTile";
TIFFDirectory *td = &tif->tif_dir;
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
-
if ((tif->tif_flags&TIFF_NOREADRAW)==0)
{
- uint64 bytecount = td->td_stripbytecount[tile];
- if ((int64)bytecount <= 0) {
+ uint64 bytecount = TIFFGetStrileByteCount(tif, tile);
+ if( bytecount == 0 || bytecount > (uint64)TIFF_INT64_MAX ) {
#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
TIFFErrorExt(tif->tif_clientdata, module,
"%I64u: Invalid tile byte count, tile %lu",
@@ -1243,7 +1236,7 @@ TIFFFillTile(TIFF* tif, uint32 tile)
(bytecount - 4096) / 10 > (uint64)stripsize )
{
uint64 newbytecount = (uint64)stripsize * 10 + 4096;
- if( (int64)newbytecount >= 0 )
+ if( newbytecount == 0 || newbytecount > (uint64)TIFF_INT64_MAX )
{
#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
TIFFWarningExt(tif->tif_clientdata, module,
@@ -1268,13 +1261,13 @@ TIFFFillTile(TIFF* tif, uint32 tile)
* We must check for overflow, potentially causing
* an OOB read. Instead of simple
*
- * td->td_stripoffset[tile]+bytecount > tif->tif_size
+ * TIFFGetStrileOffset(tif, tile)+bytecount > tif->tif_size
*
* comparison (which can overflow) we do the following
* two comparisons:
*/
if (bytecount > (uint64)tif->tif_size ||
- td->td_stripoffset[tile] > (uint64)tif->tif_size - bytecount) {
+ TIFFGetStrileOffset(tif, tile) > (uint64)tif->tif_size - bytecount) {
tif->tif_curtile = NOTILE;
return (0);
}
@@ -1303,7 +1296,7 @@ TIFFFillTile(TIFF* tif, uint32 tile)
tif->tif_rawdatasize = (tmsize_t)bytecount;
tif->tif_rawdata =
- tif->tif_base + (tmsize_t)td->td_stripoffset[tile];
+ tif->tif_base + (tmsize_t)TIFFGetStrileOffset(tif, tile);
tif->tif_rawdataoff = 0;
tif->tif_rawdataloaded = (tmsize_t) bytecount;
tif->tif_flags |= TIFF_BUFFERMMAP;
@@ -1362,7 +1355,8 @@ TIFFFillTile(TIFF* tif, uint32 tile)
tif->tif_rawdataoff = 0;
tif->tif_rawdataloaded = bytecountm;
- if (!isFillOrder(tif, td->td_fillorder) &&
+ if (tif->tif_rawdata != NULL &&
+ !isFillOrder(tif, td->td_fillorder) &&
(tif->tif_flags & TIFF_NOBITREV) == 0)
TIFFReverseBits(tif->tif_rawdata,
tif->tif_rawdataloaded);
@@ -1429,9 +1423,6 @@ TIFFStartStrip(TIFF* tif, uint32 strip)
{
TIFFDirectory *td = &tif->tif_dir;
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
-
if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
if (!(*tif->tif_setupdecode)(tif))
return (0);
@@ -1452,7 +1443,7 @@ TIFFStartStrip(TIFF* tif, uint32 strip)
if( tif->tif_rawdataloaded > 0 )
tif->tif_rawcc = tif->tif_rawdataloaded;
else
- tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[strip];
+ tif->tif_rawcc = (tmsize_t)TIFFGetStrileByteCount(tif, strip);
}
return ((*tif->tif_predecode)(tif,
(uint16)(strip / td->td_stripsperimage)));
@@ -1469,9 +1460,6 @@ TIFFStartTile(TIFF* tif, uint32 tile)
TIFFDirectory *td = &tif->tif_dir;
uint32 howmany32;
- if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
- return 0;
-
if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
if (!(*tif->tif_setupdecode)(tif))
return (0);
@@ -1502,7 +1490,7 @@ TIFFStartTile(TIFF* tif, uint32 tile)
if( tif->tif_rawdataloaded > 0 )
tif->tif_rawcc = tif->tif_rawdataloaded;
else
- tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[tile];
+ tif->tif_rawcc = (tmsize_t)TIFFGetStrileByteCount(tif, tile);
}
return ((*tif->tif_predecode)(tif,
(uint16)(tile/td->td_stripsperimage)));
@@ -1517,13 +1505,100 @@ TIFFCheckRead(TIFF* tif, int tiles)
}
if (tiles ^ isTiled(tif)) {
TIFFErrorExt(tif->tif_clientdata, tif->tif_name, tiles ?
- "Can not read tiles from a stripped image" :
+ "Can not read tiles from a striped image" :
"Can not read scanlines from a tiled image");
return (0);
}
return (1);
}
+/* Use the provided input buffer (inbuf, insize) and decompress it into
+ * (outbuf, outsize).
+ * This function replaces the use of TIFFReadEncodedStrip()/TIFFReadEncodedTile()
+ * when the user can provide the buffer for the input data, for example when
+ * he wants to avoid libtiff to read the strile offset/count values from the
+ * [Strip|Tile][Offsets/ByteCounts] array.
+ * inbuf content must be writable (if bit reversal is needed)
+ * Returns 1 in case of success, 0 otherwise.
+ */
+int TIFFReadFromUserBuffer(TIFF* tif, uint32 strile,
+ void* inbuf, tmsize_t insize,
+ void* outbuf, tmsize_t outsize)
+{
+ static const char module[] = "TIFFReadFromUserBuffer";
+ TIFFDirectory *td = &tif->tif_dir;
+ int ret = 1;
+ uint32 old_tif_flags = tif->tif_flags;
+ tmsize_t old_rawdatasize = tif->tif_rawdatasize;
+ void* old_rawdata = tif->tif_rawdata;
+
+ if (tif->tif_mode == O_WRONLY) {
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "File not open for reading");
+ return 0;
+ }
+ if (tif->tif_flags&TIFF_NOREADRAW)
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Compression scheme does not support access to raw uncompressed data");
+ return 0;
+ }
+
+ tif->tif_flags &= ~TIFF_MYBUFFER;
+ tif->tif_flags |= TIFF_BUFFERMMAP;
+ tif->tif_rawdatasize = insize;
+ tif->tif_rawdata = inbuf;
+ tif->tif_rawdataoff = 0;
+ tif->tif_rawdataloaded = insize;
+
+ if (!isFillOrder(tif, td->td_fillorder) &&
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
+ {
+ TIFFReverseBits(inbuf, insize);
+ }
+
+ if( TIFFIsTiled(tif) )
+ {
+ if( !TIFFStartTile(tif, strile) ||
+ !(*tif->tif_decodetile)(tif, (uint8*) outbuf, outsize,
+ (uint16)(strile/td->td_stripsperimage)) )
+ {
+ ret = 0;
+ }
+ }
+ else
+ {
+ uint32 rowsperstrip=td->td_rowsperstrip;
+ uint32 stripsperplane;
+ if (rowsperstrip>td->td_imagelength)
+ rowsperstrip=td->td_imagelength;
+ stripsperplane= TIFFhowmany_32_maxuint_compat(td->td_imagelength, rowsperstrip);
+ if( !TIFFStartStrip(tif, strile) ||
+ !(*tif->tif_decodestrip)(tif, (uint8*) outbuf, outsize,
+ (uint16)(strile/stripsperplane)) )
+ {
+ ret = 0;
+ }
+ }
+ if( ret )
+ {
+ (*tif->tif_postdecode)(tif, (uint8*) outbuf, outsize);
+ }
+
+ if (!isFillOrder(tif, td->td_fillorder) &&
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
+ {
+ TIFFReverseBits(inbuf, insize);
+ }
+
+ tif->tif_flags = old_tif_flags;
+ tif->tif_rawdatasize = old_rawdatasize;
+ tif->tif_rawdata = old_rawdata;
+ tif->tif_rawdataoff = 0;
+ tif->tif_rawdataloaded = 0;
+
+ return ret;
+}
+
void
_TIFFNoPostDecode(TIFF* tif, uint8* buf, tmsize_t cc)
{
diff --git a/tiff/libtiff/tif_stream.cxx b/tiff/libtiff/tif_stream.cxx
index ecca1fd5..7f640a9c 100644
--- a/tiff/libtiff/tif_stream.cxx
+++ b/tiff/libtiff/tif_stream.cxx
@@ -1,5 +1,3 @@
-/* $Id: tif_stream.cxx,v 1.13 2015-05-28 01:50:22 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
@@ -375,6 +373,9 @@ _tiffStreamOpen(const char* name, const char* mode, void *fd)
_tiffosSizeProc,
_tiffDummyMapProc,
_tiffDummyUnmapProc);
+ if (!tif) {
+ delete data;
+ }
} else {
tiffis_data *data = new tiffis_data;
data->stream = reinterpret_cast<istream *>(fd);
@@ -389,6 +390,9 @@ _tiffStreamOpen(const char* name, const char* mode, void *fd)
_tiffisSizeProc,
_tiffDummyMapProc,
_tiffDummyUnmapProc);
+ if (!tif) {
+ delete data;
+ }
}
return (tif);
diff --git a/tiff/libtiff/tif_strip.c b/tiff/libtiff/tif_strip.c
index 6e9f2ef6..c08c60a7 100644
--- a/tiff/libtiff/tif_strip.c
+++ b/tiff/libtiff/tif_strip.c
@@ -1,5 +1,3 @@
-/* $Id: tif_strip.c,v 1.38 2016-12-03 11:02:15 erouault Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -131,15 +129,8 @@ TIFFVStripSize(TIFF* tif, uint32 nrows)
{
static const char module[] = "TIFFVStripSize";
uint64 m;
- tmsize_t n;
m=TIFFVStripSize64(tif,nrows);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
@@ -149,8 +140,7 @@ uint64
TIFFRawStripSize64(TIFF* tif, uint32 strip)
{
static const char module[] = "TIFFRawStripSize64";
- TIFFDirectory* td = &tif->tif_dir;
- uint64 bytecount = td->td_stripbytecount[strip];
+ uint64 bytecount = TIFFGetStrileByteCount(tif, strip);
if (bytecount == 0)
{
@@ -213,15 +203,8 @@ TIFFStripSize(TIFF* tif)
{
static const char module[] = "TIFFStripSize";
uint64 m;
- tmsize_t n;
m=TIFFStripSize64(tif);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
@@ -332,14 +315,8 @@ TIFFScanlineSize(TIFF* tif)
{
static const char module[] = "TIFFScanlineSize";
uint64 m;
- tmsize_t n;
m=TIFFScanlineSize64(tif);
- n=(tmsize_t)m;
- if ((uint64)n!=m) {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
@@ -368,15 +345,8 @@ TIFFRasterScanlineSize(TIFF* tif)
{
static const char module[] = "TIFFRasterScanlineSize";
uint64 m;
- tmsize_t n;
m=TIFFRasterScanlineSize64(tif);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/* vim: set ts=8 sts=8 sw=8 noet: */
diff --git a/tiff/libtiff/tif_swab.c b/tiff/libtiff/tif_swab.c
index 4b2e5f16..b174ba69 100644
--- a/tiff/libtiff/tif_swab.c
+++ b/tiff/libtiff/tif_swab.c
@@ -1,5 +1,3 @@
-/* $Id: tif_swab.c,v 1.15 2017-06-08 16:39:50 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_thunder.c b/tiff/libtiff/tif_thunder.c
index 183199de..db6383a8 100644
--- a/tiff/libtiff/tif_thunder.c
+++ b/tiff/libtiff/tif_thunder.c
@@ -1,5 +1,3 @@
-/* $Id: tif_thunder.c,v 1.13 2016-09-04 21:32:56 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -124,17 +122,17 @@ ThunderDecode(TIFF* tif, uint8* op, tmsize_t maxpixels)
break;
case THUNDER_2BITDELTAS: /* 2-bit deltas */
if ((delta = ((n >> 4) & 3)) != DELTA2_SKIP)
- SETPIXEL(op, lastpixel + twobitdeltas[delta]);
+ SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta]));
if ((delta = ((n >> 2) & 3)) != DELTA2_SKIP)
- SETPIXEL(op, lastpixel + twobitdeltas[delta]);
+ SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta]));
if ((delta = (n & 3)) != DELTA2_SKIP)
- SETPIXEL(op, lastpixel + twobitdeltas[delta]);
+ SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta]));
break;
case THUNDER_3BITDELTAS: /* 3-bit deltas */
if ((delta = ((n >> 3) & 7)) != DELTA3_SKIP)
- SETPIXEL(op, lastpixel + threebitdeltas[delta]);
+ SETPIXEL(op, (unsigned)((int)lastpixel + threebitdeltas[delta]));
if ((delta = (n & 7)) != DELTA3_SKIP)
- SETPIXEL(op, lastpixel + threebitdeltas[delta]);
+ SETPIXEL(op, (unsigned)((int)lastpixel + threebitdeltas[delta]));
break;
case THUNDER_RAW: /* raw data */
SETPIXEL(op, n);
diff --git a/tiff/libtiff/tif_tile.c b/tiff/libtiff/tif_tile.c
index 388e168a..661cc771 100644
--- a/tiff/libtiff/tif_tile.c
+++ b/tiff/libtiff/tif_tile.c
@@ -1,5 +1,3 @@
-/* $Id: tif_tile.c,v 1.24 2015-06-07 22:35:40 bfriesen Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -183,15 +181,8 @@ TIFFTileRowSize(TIFF* tif)
{
static const char module[] = "TIFFTileRowSize";
uint64 m;
- tmsize_t n;
m=TIFFTileRowSize64(tif);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
@@ -250,15 +241,8 @@ TIFFVTileSize(TIFF* tif, uint32 nrows)
{
static const char module[] = "TIFFVTileSize";
uint64 m;
- tmsize_t n;
m=TIFFVTileSize64(tif,nrows);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
@@ -274,15 +258,8 @@ TIFFTileSize(TIFF* tif)
{
static const char module[] = "TIFFTileSize";
uint64 m;
- tmsize_t n;
m=TIFFTileSize64(tif);
- n=(tmsize_t)m;
- if ((uint64)n!=m)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow");
- n=0;
- }
- return(n);
+ return _TIFFCastUInt64ToSSize(tif, m, module);
}
/*
diff --git a/tiff/libtiff/tif_unix.c b/tiff/libtiff/tif_unix.c
index 80c437cf..874f1feb 100644
--- a/tiff/libtiff/tif_unix.c
+++ b/tiff/libtiff/tif_unix.c
@@ -1,5 +1,3 @@
-/* $Id: tif_unix.c,v 1.28 2017-01-11 19:02:49 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_version.c b/tiff/libtiff/tif_version.c
index f92c843d..60875bbf 100644
--- a/tiff/libtiff/tif_version.c
+++ b/tiff/libtiff/tif_version.c
@@ -1,4 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_version.c,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */
/*
* Copyright (c) 1992-1997 Sam Leffler
* Copyright (c) 1992-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_warning.c b/tiff/libtiff/tif_warning.c
index dc79f144..c482785c 100644
--- a/tiff/libtiff/tif_warning.c
+++ b/tiff/libtiff/tif_warning.c
@@ -1,5 +1,3 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_warning.c,v 1.4 2017-07-04 12:54:42 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/libtiff/tif_webp.c b/tiff/libtiff/tif_webp.c
new file mode 100644
index 00000000..22665f2d
--- /dev/null
+++ b/tiff/libtiff/tif_webp.c
@@ -0,0 +1,695 @@
+/*
+* Copyright (c) 2018, Mapbox
+* Author: <norman.barker at mapbox.com>
+*
+* Permission to use, copy, modify, distribute, and sell this software and
+* its documentation for any purpose is hereby granted without fee, provided
+* that (i) the above copyright notices and this permission notice appear in
+* all copies of the software and related documentation, and (ii) the names of
+* Sam Leffler and Silicon Graphics may not be used in any advertising or
+* publicity relating to the software without the specific, prior written
+* permission of Sam Leffler and Silicon Graphics.
+*
+* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+*
+* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THIS SOFTWARE.
+*/
+
+#include "tiffiop.h"
+#ifdef WEBP_SUPPORT
+/*
+ * TIFF Library.
+ *
+ * WEBP Compression Support
+ *
+ */
+
+#include "webp/decode.h"
+#include "webp/encode.h"
+
+#include <stdio.h>
+
+#define LSTATE_INIT_DECODE 0x01
+#define LSTATE_INIT_ENCODE 0x02
+/*
+ * State block for each open TIFF
+ * file using WEBP compression/decompression.
+ */
+typedef struct {
+ uint16 nSamples; /* number of samples per pixel */
+
+ int lossless; /* lossy/lossless compression */
+ int quality_level; /* compression level */
+ WebPPicture sPicture; /* WebP Picture */
+ WebPConfig sEncoderConfig; /* WebP encoder config */
+ uint8* pBuffer; /* buffer to hold raw data on encoding */
+ unsigned int buffer_offset; /* current offset into the buffer */
+ unsigned int buffer_size;
+
+ WebPIDecoder* psDecoder; /* WebPIDecoder */
+ WebPDecBuffer sDecBuffer; /* Decoder buffer */
+ int last_y; /* Last row decoded */
+
+ int state; /* state flags */
+
+ TIFFVGetMethod vgetparent; /* super-class method */
+ TIFFVSetMethod vsetparent; /* super-class method */
+} WebPState;
+
+#define LState(tif) ((WebPState*) (tif)->tif_data)
+#define DecoderState(tif) LState(tif)
+#define EncoderState(tif) LState(tif)
+
+static int TWebPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s);
+static int TWebPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s);
+
+static
+int TWebPDatasetWriter(const uint8_t* data, size_t data_size,
+ const WebPPicture* const picture)
+{
+ static const char module[] = "TWebPDatasetWriter";
+ TIFF* tif = (TIFF*)(picture->custom_ptr);
+
+ if ( (tif->tif_rawcc + (tmsize_t)data_size) > tif->tif_rawdatasize ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Buffer too small by " TIFF_SIZE_FORMAT " bytes.",
+ (size_t) (tif->tif_rawcc + data_size - tif->tif_rawdatasize));
+ return 0;
+ } else {
+ _TIFFmemcpy(tif->tif_rawcp, data, data_size);
+ tif->tif_rawcc += data_size;
+ tif->tif_rawcp += data_size;
+ return 1;
+ }
+}
+
+/*
+ * Encode a chunk of pixels.
+ */
+static int
+TWebPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
+{
+ static const char module[] = "TWebPEncode";
+ WebPState *sp = EncoderState(tif);
+ (void) s;
+
+ assert(sp != NULL);
+ assert(sp->state == LSTATE_INIT_ENCODE);
+
+ if( (uint64)sp->buffer_offset +
+ (uint64)cc > sp->buffer_size )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Too many bytes to be written");
+ return 0;
+ }
+
+ memcpy(sp->pBuffer + sp->buffer_offset,
+ bp, cc);
+ sp->buffer_offset += (unsigned)cc;
+
+ return 1;
+
+}
+
+static int
+TWebPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
+{
+ static const char module[] = "WebPDecode";
+ VP8StatusCode status = VP8_STATUS_OK;
+ WebPState *sp = DecoderState(tif);
+ (void) s;
+
+ assert(sp != NULL);
+ assert(sp->state == LSTATE_INIT_DECODE);
+
+ if (occ % sp->sDecBuffer.u.RGBA.stride)
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Fractional scanlines cannot be read");
+ return 0;
+ }
+
+ status = WebPIAppend(sp->psDecoder, tif->tif_rawcp, tif->tif_rawcc);
+
+ if (status != VP8_STATUS_OK && status != VP8_STATUS_SUSPENDED) {
+ if (status == VP8_STATUS_INVALID_PARAM) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Invalid parameter used.");
+ } else if (status == VP8_STATUS_OUT_OF_MEMORY) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Out of memory.");
+ } else {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Unrecognized error.");
+ }
+ return 0;
+ } else {
+ int current_y, stride;
+ uint8_t* buf;
+
+ /* Returns the RGB/A image decoded so far */
+ buf = WebPIDecGetRGB(sp->psDecoder, &current_y, NULL, NULL, &stride);
+
+ if ((buf != NULL) &&
+ (occ <= stride * (current_y - sp->last_y))) {
+ memcpy(op,
+ buf + (sp->last_y * stride),
+ occ);
+
+ tif->tif_rawcp += tif->tif_rawcc;
+ tif->tif_rawcc = 0;
+ sp->last_y += occ / sp->sDecBuffer.u.RGBA.stride;
+ return 1;
+ } else {
+ TIFFErrorExt(tif->tif_clientdata, module, "Unable to decode WebP data.");
+ return 0;
+ }
+ }
+}
+
+static int
+TWebPFixupTags(TIFF* tif)
+{
+ (void) tif;
+ if (tif->tif_dir.td_planarconfig != PLANARCONFIG_CONTIG) {
+ static const char module[] = "TWebPFixupTags";
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "TIFF WEBP requires data to be stored contiguously in RGB e.g. RGBRGBRGB "
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ "or RGBARGBARGBA"
+#endif
+ );
+ return 0;
+ }
+ return 1;
+}
+
+static int
+TWebPSetupDecode(TIFF* tif)
+{
+ static const char module[] = "WebPSetupDecode";
+ uint16 nBitsPerSample = tif->tif_dir.td_bitspersample;
+ uint16 sampleFormat = tif->tif_dir.td_sampleformat;
+
+ WebPState* sp = DecoderState(tif);
+ assert(sp != NULL);
+
+ sp->nSamples = tif->tif_dir.td_samplesperpixel;
+
+ /* check band count */
+ if ( sp->nSamples != 3
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ && sp->nSamples != 4
+#endif
+ )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WEBP driver doesn't support %d bands. Must be 3 (RGB) "
+ #if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ "or 4 (RGBA) "
+ #endif
+ "bands.",
+ sp->nSamples );
+ return 0;
+ }
+
+ /* check bits per sample and data type */
+ if ((nBitsPerSample != 8) && (sampleFormat != 1)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WEBP driver requires 8 bit unsigned data");
+ return 0;
+ }
+
+ /* if we were last encoding, terminate this mode */
+ if (sp->state & LSTATE_INIT_ENCODE) {
+ WebPPictureFree(&sp->sPicture);
+ if (sp->pBuffer != NULL) {
+ _TIFFfree(sp->pBuffer);
+ sp->pBuffer = NULL;
+ }
+ sp->buffer_offset = 0;
+ sp->state = 0;
+ }
+
+ sp->state |= LSTATE_INIT_DECODE;
+
+ return 1;
+}
+
+/*
+* Setup state for decoding a strip.
+*/
+static int
+TWebPPreDecode(TIFF* tif, uint16 s)
+{
+ static const char module[] = "TWebPPreDecode";
+ uint32 segment_width, segment_height;
+ WebPState* sp = DecoderState(tif);
+ TIFFDirectory* td = &tif->tif_dir;
+ (void) s;
+ assert(sp != NULL);
+
+ if (isTiled(tif)) {
+ segment_width = td->td_tilewidth;
+ segment_height = td->td_tilelength;
+ } else {
+ segment_width = td->td_imagewidth;
+ segment_height = td->td_imagelength - tif->tif_row;
+ if (segment_height > td->td_rowsperstrip)
+ segment_height = td->td_rowsperstrip;
+ }
+
+ if( (sp->state & LSTATE_INIT_DECODE) == 0 )
+ tif->tif_setupdecode(tif);
+
+ if (sp->psDecoder != NULL) {
+ WebPIDelete(sp->psDecoder);
+ WebPFreeDecBuffer(&sp->sDecBuffer);
+ sp->psDecoder = NULL;
+ }
+
+ sp->last_y = 0;
+
+ WebPInitDecBuffer(&sp->sDecBuffer);
+
+ sp->sDecBuffer.is_external_memory = 0;
+ sp->sDecBuffer.width = segment_width;
+ sp->sDecBuffer.height = segment_height;
+ sp->sDecBuffer.u.RGBA.stride = segment_width * sp->nSamples;
+ sp->sDecBuffer.u.RGBA.size = segment_width * sp->nSamples * segment_height;
+
+ if (sp->nSamples > 3) {
+ sp->sDecBuffer.colorspace = MODE_RGBA;
+ } else {
+ sp->sDecBuffer.colorspace = MODE_RGB;
+ }
+
+ sp->psDecoder = WebPINewDecoder(&sp->sDecBuffer);
+
+ if (sp->psDecoder == NULL) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Unable to allocate WebP decoder.");
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+TWebPSetupEncode(TIFF* tif)
+{
+ static const char module[] = "WebPSetupEncode";
+ uint16 nBitsPerSample = tif->tif_dir.td_bitspersample;
+ uint16 sampleFormat = tif->tif_dir.td_sampleformat;
+
+ WebPState* sp = EncoderState(tif);
+ assert(sp != NULL);
+
+ sp->nSamples = tif->tif_dir.td_samplesperpixel;
+
+ /* check band count */
+ if ( sp->nSamples != 3
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ && sp->nSamples != 4
+#endif
+ )
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WEBP driver doesn't support %d bands. Must be 3 (RGB) "
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ "or 4 (RGBA) "
+#endif
+ "bands.",
+ sp->nSamples );
+ return 0;
+ }
+
+ /* check bits per sample and data type */
+ if ((nBitsPerSample != 8) && (sampleFormat != 1)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WEBP driver requires 8 bit unsigned data");
+ return 0;
+ }
+
+ if (sp->state & LSTATE_INIT_DECODE) {
+ WebPIDelete(sp->psDecoder);
+ WebPFreeDecBuffer(&sp->sDecBuffer);
+ sp->psDecoder = NULL;
+ sp->last_y = 0;
+ sp->state = 0;
+ }
+
+ sp->state |= LSTATE_INIT_ENCODE;
+
+ if (!WebPPictureInit(&sp->sPicture)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error initializing WebP picture.");
+ return 0;
+ }
+
+ if (!WebPConfigInitInternal(&sp->sEncoderConfig, WEBP_PRESET_DEFAULT,
+ sp->quality_level,
+ WEBP_ENCODER_ABI_VERSION)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error creating WebP encoder configuration.");
+ return 0;
+ }
+
+ // WebPConfigInitInternal above sets lossless to false
+ #if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ sp->sEncoderConfig.lossless = sp->lossless;
+ if (sp->lossless) {
+ sp->sPicture.use_argb = 1;
+ }
+ #endif
+
+ if (!WebPValidateConfig(&sp->sEncoderConfig)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error with WebP encoder configuration.");
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+* Reset encoding state at the start of a strip.
+*/
+static int
+TWebPPreEncode(TIFF* tif, uint16 s)
+{
+ static const char module[] = "TWebPPreEncode";
+ uint32 segment_width, segment_height;
+ WebPState *sp = EncoderState(tif);
+ TIFFDirectory* td = &tif->tif_dir;
+
+ (void) s;
+
+ assert(sp != NULL);
+ if( sp->state != LSTATE_INIT_ENCODE )
+ tif->tif_setupencode(tif);
+
+ /*
+ * Set encoding parameters for this strip/tile.
+ */
+ if (isTiled(tif)) {
+ segment_width = td->td_tilewidth;
+ segment_height = td->td_tilelength;
+ } else {
+ segment_width = td->td_imagewidth;
+ segment_height = td->td_imagelength - tif->tif_row;
+ if (segment_height > td->td_rowsperstrip)
+ segment_height = td->td_rowsperstrip;
+ }
+
+ if( segment_width > 16383 || segment_height > 16383 ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WEBP maximum image dimensions are 16383 x 16383.");
+ return 0;
+ }
+
+ /* set up buffer for raw data */
+ /* given above check and that nSamples <= 4, buffer_size is <= 1 GB */
+ sp->buffer_size = segment_width * segment_height * sp->nSamples;
+
+ if (sp->pBuffer != NULL) {
+ _TIFFfree(sp->pBuffer);
+ sp->pBuffer = NULL;
+ }
+
+ sp->pBuffer = _TIFFmalloc(sp->buffer_size);
+ if( !sp->pBuffer) {
+ TIFFErrorExt(tif->tif_clientdata, module, "Cannot allocate buffer");
+ return 0;
+ }
+ sp->buffer_offset = 0;
+
+ sp->sPicture.width = segment_width;
+ sp->sPicture.height = segment_height;
+ sp->sPicture.writer = TWebPDatasetWriter;
+ sp->sPicture.custom_ptr = tif;
+
+ return 1;
+}
+
+/*
+* Finish off an encoded strip by flushing it.
+*/
+static int
+TWebPPostEncode(TIFF* tif)
+{
+ static const char module[] = "WebPPostEncode";
+ int64_t stride;
+ WebPState *sp = EncoderState(tif);
+ assert(sp != NULL);
+
+ assert(sp->state == LSTATE_INIT_ENCODE);
+
+ stride = (int64_t)sp->sPicture.width * sp->nSamples;
+
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ if (sp->nSamples == 4) {
+ if (!WebPPictureImportRGBA(&sp->sPicture, sp->pBuffer, (int)stride)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WebPPictureImportRGBA() failed" );
+ return 0;
+ }
+ }
+ else
+#endif
+ if (!WebPPictureImportRGB(&sp->sPicture, sp->pBuffer, (int)stride)) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WebPPictureImportRGB() failed");
+ return 0;
+ }
+
+ if (!WebPEncode(&sp->sEncoderConfig, &sp->sPicture)) {
+
+#if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ const char* pszErrorMsg = NULL;
+ switch(sp->sPicture.error_code) {
+ case VP8_ENC_ERROR_OUT_OF_MEMORY:
+ pszErrorMsg = "Out of memory"; break;
+ case VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY:
+ pszErrorMsg = "Out of memory while flushing bits"; break;
+ case VP8_ENC_ERROR_NULL_PARAMETER:
+ pszErrorMsg = "A pointer parameter is NULL"; break;
+ case VP8_ENC_ERROR_INVALID_CONFIGURATION:
+ pszErrorMsg = "Configuration is invalid"; break;
+ case VP8_ENC_ERROR_BAD_DIMENSION:
+ pszErrorMsg = "Picture has invalid width/height"; break;
+ case VP8_ENC_ERROR_PARTITION0_OVERFLOW:
+ pszErrorMsg = "Partition is bigger than 512k. Try using less "
+ "SEGMENTS, or increase PARTITION_LIMIT value";
+ break;
+ case VP8_ENC_ERROR_PARTITION_OVERFLOW:
+ pszErrorMsg = "Partition is bigger than 16M";
+ break;
+ case VP8_ENC_ERROR_BAD_WRITE:
+ pszErrorMsg = "Error while fludshing bytes"; break;
+ case VP8_ENC_ERROR_FILE_TOO_BIG:
+ pszErrorMsg = "File is bigger than 4G"; break;
+ case VP8_ENC_ERROR_USER_ABORT:
+ pszErrorMsg = "User interrupted";
+ break;
+ default:
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WebPEncode returned an unknown error code: %d",
+ sp->sPicture.error_code);
+ pszErrorMsg = "Unknown WebP error type.";
+ break;
+ }
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "WebPEncode() failed : %s", pszErrorMsg);
+#else
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in WebPEncode()");
+#endif
+ return 0;
+ }
+
+ sp->sPicture.custom_ptr = NULL;
+
+ if (!TIFFFlushData1(tif))
+ {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error flushing TIFF WebP encoder.");
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+TWebPCleanup(TIFF* tif)
+{
+ WebPState* sp = LState(tif);
+
+ assert(sp != 0);
+
+ tif->tif_tagmethods.vgetfield = sp->vgetparent;
+ tif->tif_tagmethods.vsetfield = sp->vsetparent;
+
+ if (sp->state & LSTATE_INIT_ENCODE) {
+ WebPPictureFree(&sp->sPicture);
+ }
+
+ if (sp->psDecoder != NULL) {
+ WebPIDelete(sp->psDecoder);
+ WebPFreeDecBuffer(&sp->sDecBuffer);
+ sp->psDecoder = NULL;
+ sp->last_y = 0;
+ }
+
+ if (sp->pBuffer != NULL) {
+ _TIFFfree(sp->pBuffer);
+ sp->pBuffer = NULL;
+ }
+
+ _TIFFfree(tif->tif_data);
+ tif->tif_data = NULL;
+
+ _TIFFSetDefaultCompressionState(tif);
+}
+
+static int
+TWebPVSetField(TIFF* tif, uint32 tag, va_list ap)
+{
+ static const char module[] = "WebPVSetField";
+ WebPState* sp = LState(tif);
+
+ switch (tag) {
+ case TIFFTAG_WEBP_LEVEL:
+ sp->quality_level = (int) va_arg(ap, int);
+ if( sp->quality_level <= 0 ||
+ sp->quality_level > 100.0f ) {
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "WEBP_LEVEL should be between 1 and 100");
+ }
+ return 1;
+ case TIFFTAG_WEBP_LOSSLESS:
+ #if WEBP_ENCODER_ABI_VERSION >= 0x0100
+ sp->lossless = va_arg(ap, int);
+ if (sp->lossless){
+ sp->quality_level = 100.0f;
+ }
+ return 1;
+ #else
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Need to upgrade WEBP driver, this version doesn't support "
+ "lossless compression.");
+ return 0;
+ #endif
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+ /*NOTREACHED*/
+}
+
+static int
+TWebPVGetField(TIFF* tif, uint32 tag, va_list ap)
+{
+ WebPState* sp = LState(tif);
+
+ switch (tag) {
+ case TIFFTAG_WEBP_LEVEL:
+ *va_arg(ap, int*) = sp->quality_level;
+ break;
+ case TIFFTAG_WEBP_LOSSLESS:
+ *va_arg(ap, int*) = sp->lossless;
+ break;
+ default:
+ return (*sp->vgetparent)(tif, tag, ap);
+ }
+ return 1;
+}
+
+static const TIFFField TWebPFields[] = {
+ { TIFFTAG_WEBP_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
+ TIFF_SETGET_UNDEFINED,
+ FIELD_PSEUDO, TRUE, FALSE, "WEBP quality", NULL },
+ { TIFFTAG_WEBP_LOSSLESS, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
+ TIFF_SETGET_UNDEFINED,
+ FIELD_PSEUDO, TRUE, FALSE, "WEBP lossless/lossy", NULL
+ },
+};
+
+int
+TIFFInitWebP(TIFF* tif, int scheme)
+{
+ static const char module[] = "TIFFInitWebP";
+ WebPState* sp;
+
+ assert( scheme == COMPRESSION_WEBP );
+
+ /*
+ * Merge codec-specific tag information.
+ */
+ if ( !_TIFFMergeFields(tif, TWebPFields, TIFFArrayCount(TWebPFields)) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Merging WebP codec-specific tags failed");
+ return 0;
+ }
+
+ /*
+ * Allocate state block so tag methods have storage to record values.
+ */
+ tif->tif_data = (uint8*) _TIFFmalloc(sizeof(WebPState));
+ if (tif->tif_data == NULL)
+ goto bad;
+ sp = LState(tif);
+
+ /*
+ * Override parent get/set field methods.
+ */
+ sp->vgetparent = tif->tif_tagmethods.vgetfield;
+ tif->tif_tagmethods.vgetfield = TWebPVGetField; /* hook for codec tags */
+ sp->vsetparent = tif->tif_tagmethods.vsetfield;
+ tif->tif_tagmethods.vsetfield = TWebPVSetField; /* hook for codec tags */
+
+ /* Default values for codec-specific fields */
+ sp->quality_level = 75.0f; /* default comp. level */
+ sp->lossless = 0; /* default to false */
+ sp->state = 0;
+ sp->nSamples = 0;
+ sp->psDecoder = NULL;
+ sp->last_y = 0;
+
+ sp->buffer_offset = 0;
+ sp->pBuffer = NULL;
+
+ /*
+ * Install codec methods.
+ * Notes:
+ * encoderow is not supported
+ */
+ tif->tif_fixuptags = TWebPFixupTags;
+ tif->tif_setupdecode = TWebPSetupDecode;
+ tif->tif_predecode = TWebPPreDecode;
+ tif->tif_decoderow = TWebPDecode;
+ tif->tif_decodestrip = TWebPDecode;
+ tif->tif_decodetile = TWebPDecode;
+ tif->tif_setupencode = TWebPSetupEncode;
+ tif->tif_preencode = TWebPPreEncode;
+ tif->tif_postencode = TWebPPostEncode;
+ tif->tif_encoderow = TWebPEncode;
+ tif->tif_encodestrip = TWebPEncode;
+ tif->tif_encodetile = TWebPEncode;
+ tif->tif_cleanup = TWebPCleanup;
+
+ return 1;
+bad:
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "No space for WebP state block");
+ return 0;
+}
+
+#endif /* WEBP_SUPPORT */
diff --git a/tiff/libtiff/tif_win32.c b/tiff/libtiff/tif_win32.c
index 090baed8..088880e7 100644
--- a/tiff/libtiff/tif_win32.c
+++ b/tiff/libtiff/tif_win32.c
@@ -1,5 +1,3 @@
-/* $Id: tif_win32.c,v 1.42 2017-01-11 19:02:49 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -407,60 +405,21 @@ _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c)
static void
Win32WarningHandler(const char* module, const char* fmt, va_list ap)
{
-#ifndef TIF_PLATFORM_CONSOLE
- LPTSTR szTitle;
- LPTSTR szTmp;
- LPCTSTR szTitleText = "%s Warning";
- LPCTSTR szDefaultModule = "LIBTIFF";
- LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
- SIZE_T nBufSize = (strlen(szTmpModule) +
- strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char);
-
- if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL)
- return;
- sprintf(szTitle, szTitleText, szTmpModule);
- szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
- vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap);
- MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION);
- LocalFree(szTitle);
-
- return;
-#else
if (module != NULL)
fprintf(stderr, "%s: ", module);
fprintf(stderr, "Warning, ");
vfprintf(stderr, fmt, ap);
fprintf(stderr, ".\n");
-#endif
}
TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler;
static void
Win32ErrorHandler(const char* module, const char* fmt, va_list ap)
{
-#ifndef TIF_PLATFORM_CONSOLE
- LPTSTR szTitle;
- LPTSTR szTmp;
- LPCTSTR szTitleText = "%s Error";
- LPCTSTR szDefaultModule = "LIBTIFF";
- LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
- SIZE_T nBufSize = (strlen(szTmpModule) +
- strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char);
-
- if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL)
- return;
- sprintf(szTitle, szTitleText, szTmpModule);
- szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
- vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap);
- MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION);
- LocalFree(szTitle);
- return;
-#else
if (module != NULL)
fprintf(stderr, "%s: ", module);
vfprintf(stderr, fmt, ap);
fprintf(stderr, ".\n");
-#endif
}
TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler;
diff --git a/tiff/libtiff/tif_write.c b/tiff/libtiff/tif_write.c
index 4c216ec2..33e803c1 100644
--- a/tiff/libtiff/tif_write.c
+++ b/tiff/libtiff/tif_write.c
@@ -1,5 +1,3 @@
-/* $Id: tif_write.c,v 1.46 2016-12-03 21:57:44 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -130,10 +128,10 @@ TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample)
tif->tif_rawcc = 0;
tif->tif_rawcp = tif->tif_rawdata;
- if( td->td_stripbytecount[strip] > 0 )
+ if( td->td_stripbytecount_p[strip] > 0 )
{
/* if we are writing over existing tiles, zero length */
- td->td_stripbytecount[strip] = 0;
+ td->td_stripbytecount_p[strip] = 0;
/* this forces TIFFAppendToStrip() to do a seek */
tif->tif_curoff = 0;
@@ -178,6 +176,32 @@ TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample)
return (status);
}
+/* Make sure that at the first attempt of rewriting a tile/strip, we will have */
+/* more bytes available in the output buffer than the previous byte count, */
+/* so that TIFFAppendToStrip() will detect the overflow when it is called the first */
+/* time if the new compressed tile is bigger than the older one. (GDAL #4771) */
+static int _TIFFReserveLargeEnoughWriteBuffer(TIFF* tif, uint32 strip_or_tile)
+{
+ TIFFDirectory *td = &tif->tif_dir;
+ if( td->td_stripbytecount_p[strip_or_tile] > 0 )
+ {
+ /* The +1 is to ensure at least one extra bytes */
+ /* The +4 is because the LZW encoder flushes 4 bytes before the limit */
+ uint64 safe_buffer_size = (uint64)(td->td_stripbytecount_p[strip_or_tile] + 1 + 4);
+ if( tif->tif_rawdatasize <= (tmsize_t)safe_buffer_size )
+ {
+ if( !(TIFFWriteBufferSetup(tif, NULL,
+ (tmsize_t)TIFFroundup_64(safe_buffer_size, 1024))) )
+ return 0;
+ }
+
+ /* Force TIFFAppendToStrip() to consider placing data at end
+ of file. */
+ tif->tif_curoff = 0;
+ }
+ return 1;
+}
+
/*
* Encode the supplied data and write it to the
* specified strip.
@@ -224,6 +248,13 @@ TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc)
tif->tif_flags |= TIFF_BUF4WRITE;
tif->tif_curstrip = strip;
+ if( !_TIFFReserveLargeEnoughWriteBuffer(tif, strip) ) {
+ return ((tmsize_t)(-1));
+ }
+
+ tif->tif_rawcc = 0;
+ tif->tif_rawcp = tif->tif_rawdata;
+
if (td->td_stripsperimage == 0) {
TIFFErrorExt(tif->tif_clientdata, module, "Zero strips per image");
return ((tmsize_t) -1);
@@ -236,27 +267,6 @@ TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc)
tif->tif_flags |= TIFF_CODERSETUP;
}
- if( td->td_stripbytecount[strip] > 0 )
- {
- /* Make sure that at the first attempt of rewriting the tile, we will have */
- /* more bytes available in the output buffer than the previous byte count, */
- /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */
- /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */
- if( tif->tif_rawdatasize <= (tmsize_t)td->td_stripbytecount[strip] )
- {
- if( !(TIFFWriteBufferSetup(tif, NULL,
- (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[strip] + 1), 1024))) )
- return ((tmsize_t)(-1));
- }
-
- /* Force TIFFAppendToStrip() to consider placing data at end
- of file. */
- tif->tif_curoff = 0;
- }
-
- tif->tif_rawcc = 0;
- tif->tif_rawcp = tif->tif_rawdata;
-
tif->tif_flags &= ~TIFF_POSTENCODE;
/* shortcut to avoid an extra memcpy() */
@@ -404,22 +414,8 @@ TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc)
tif->tif_flags |= TIFF_BUF4WRITE;
tif->tif_curtile = tile;
- if( td->td_stripbytecount[tile] > 0 )
- {
- /* Make sure that at the first attempt of rewriting the tile, we will have */
- /* more bytes available in the output buffer than the previous byte count, */
- /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */
- /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */
- if( tif->tif_rawdatasize <= (tmsize_t) td->td_stripbytecount[tile] )
- {
- if( !(TIFFWriteBufferSetup(tif, NULL,
- (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile] + 1), 1024))) )
- return ((tmsize_t)(-1));
- }
-
- /* Force TIFFAppendToStrip() to consider placing data at end
- of file. */
- tif->tif_curoff = 0;
+ if( !_TIFFReserveLargeEnoughWriteBuffer(tif, tile) ) {
+ return ((tmsize_t)(-1));
}
tif->tif_rawcc = 0;
@@ -539,18 +535,20 @@ TIFFSetupStrips(TIFF* tif)
td->td_nstrips = td->td_stripsperimage;
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
td->td_stripsperimage /= td->td_samplesperpixel;
- td->td_stripoffset = (uint64 *)
- _TIFFmalloc(td->td_nstrips * sizeof (uint64));
- td->td_stripbytecount = (uint64 *)
- _TIFFmalloc(td->td_nstrips * sizeof (uint64));
- if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL)
+ td->td_stripoffset_p = (uint64 *)
+ _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64),
+ "for \"StripOffsets\" array");
+ td->td_stripbytecount_p = (uint64 *)
+ _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64),
+ "for \"StripByteCounts\" array");
+ if (td->td_stripoffset_p == NULL || td->td_stripbytecount_p == NULL)
return (0);
/*
* Place data at the end-of-file
* (by setting offsets to zero).
*/
- _TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint64));
- _TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint64));
+ _TIFFmemset(td->td_stripoffset_p, 0, td->td_nstrips*sizeof (uint64));
+ _TIFFmemset(td->td_stripbytecount_p, 0, td->td_nstrips*sizeof (uint64));
TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS);
TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS);
return (1);
@@ -572,7 +570,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module)
}
if (tiles ^ isTiled(tif)) {
TIFFErrorExt(tif->tif_clientdata, module, tiles ?
- "Can not write tiles to a stripped image" :
+ "Can not write tiles to a striped image" :
"Can not write scanlines to a tiled image");
return (0);
}
@@ -610,7 +608,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module)
return (0);
}
}
- if (tif->tif_dir.td_stripoffset == NULL && !TIFFSetupStrips(tif)) {
+ if (tif->tif_dir.td_stripoffset_p == NULL && !TIFFSetupStrips(tif)) {
tif->tif_dir.td_nstrips = 0;
TIFFErrorExt(tif->tif_clientdata, module, "No space for %s arrays",
isTiled(tif) ? "tile" : "strip");
@@ -628,6 +626,20 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module)
if (tif->tif_scanlinesize == 0)
return (0);
tif->tif_flags |= TIFF_BEENWRITING;
+
+ if( tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 &&
+ tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 &&
+ !(tif->tif_flags & TIFF_DIRTYDIRECT) )
+ {
+ TIFFForceStrileArrayWriting(tif);
+ }
+
return (1);
}
@@ -684,9 +696,9 @@ TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module)
uint64* new_stripbytecount;
assert(td->td_planarconfig == PLANARCONFIG_CONTIG);
- new_stripoffset = (uint64*)_TIFFrealloc(td->td_stripoffset,
+ new_stripoffset = (uint64*)_TIFFrealloc(td->td_stripoffset_p,
(td->td_nstrips + delta) * sizeof (uint64));
- new_stripbytecount = (uint64*)_TIFFrealloc(td->td_stripbytecount,
+ new_stripbytecount = (uint64*)_TIFFrealloc(td->td_stripbytecount_p,
(td->td_nstrips + delta) * sizeof (uint64));
if (new_stripoffset == NULL || new_stripbytecount == NULL) {
if (new_stripoffset)
@@ -697,11 +709,11 @@ TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module)
TIFFErrorExt(tif->tif_clientdata, module, "No space to expand strip arrays");
return (0);
}
- td->td_stripoffset = new_stripoffset;
- td->td_stripbytecount = new_stripbytecount;
- _TIFFmemset(td->td_stripoffset + td->td_nstrips,
+ td->td_stripoffset_p = new_stripoffset;
+ td->td_stripbytecount_p = new_stripbytecount;
+ _TIFFmemset(td->td_stripoffset_p + td->td_nstrips,
0, delta*sizeof (uint64));
- _TIFFmemset(td->td_stripbytecount + td->td_nstrips,
+ _TIFFmemset(td->td_stripbytecount_p + td->td_nstrips,
0, delta*sizeof (uint64));
td->td_nstrips += delta;
tif->tif_flags |= TIFF_DIRTYDIRECT;
@@ -720,12 +732,12 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc)
uint64 m;
int64 old_byte_count = -1;
- if (td->td_stripoffset[strip] == 0 || tif->tif_curoff == 0) {
+ if (td->td_stripoffset_p[strip] == 0 || tif->tif_curoff == 0) {
assert(td->td_nstrips > 0);
- if( td->td_stripbytecount[strip] != 0
- && td->td_stripoffset[strip] != 0
- && td->td_stripbytecount[strip] >= (uint64) cc )
+ if( td->td_stripbytecount_p[strip] != 0
+ && td->td_stripoffset_p[strip] != 0
+ && td->td_stripbytecount_p[strip] >= (uint64) cc )
{
/*
* There is already tile data on disk, and the new tile
@@ -734,7 +746,7 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc)
* more data to append to this strip before we are done
* depending on how we are getting called.
*/
- if (!SeekOK(tif, td->td_stripoffset[strip])) {
+ if (!SeekOK(tif, td->td_stripoffset_p[strip])) {
TIFFErrorExt(tif->tif_clientdata, module,
"Seek error at scanline %lu",
(unsigned long)tif->tif_row);
@@ -747,17 +759,17 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc)
* Seek to end of file, and set that as our location to
* write this strip.
*/
- td->td_stripoffset[strip] = TIFFSeekFile(tif, 0, SEEK_END);
+ td->td_stripoffset_p[strip] = TIFFSeekFile(tif, 0, SEEK_END);
tif->tif_flags |= TIFF_DIRTYSTRIP;
}
- tif->tif_curoff = td->td_stripoffset[strip];
+ tif->tif_curoff = td->td_stripoffset_p[strip];
/*
* We are starting a fresh strip/tile, so set the size to zero.
*/
- old_byte_count = td->td_stripbytecount[strip];
- td->td_stripbytecount[strip] = 0;
+ old_byte_count = td->td_stripbytecount_p[strip];
+ td->td_stripbytecount_p[strip] = 0;
}
m = tif->tif_curoff+cc;
@@ -774,9 +786,9 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc)
return (0);
}
tif->tif_curoff = m;
- td->td_stripbytecount[strip] += cc;
+ td->td_stripbytecount_p[strip] += cc;
- if( (int64) td->td_stripbytecount[strip] != old_byte_count )
+ if( (int64) td->td_stripbytecount_p[strip] != old_byte_count )
tif->tif_flags |= TIFF_DIRTYSTRIP;
return (1);
diff --git a/tiff/libtiff/tif_zip.c b/tiff/libtiff/tif_zip.c
index 42943fbb..c7507734 100644
--- a/tiff/libtiff/tif_zip.c
+++ b/tiff/libtiff/tif_zip.c
@@ -1,5 +1,3 @@
-/* $Id: tif_zip.c,v 1.37 2017-05-10 15:21:16 erouault Exp $ */
-
/*
* Copyright (c) 1995-1997 Sam Leffler
* Copyright (c) 1995-1997 Silicon Graphics, Inc.
@@ -126,7 +124,6 @@ ZIPSetupDecode(TIFF* tif)
static int
ZIPPreDecode(TIFF* tif, uint16 s)
{
- static const char module[] = "ZIPPreDecode";
ZIPState* sp = DecoderState(tif);
(void) s;
@@ -140,12 +137,7 @@ ZIPPreDecode(TIFF* tif, uint16 s)
we need to simplify this code to reflect a ZLib that is likely updated
to deal with 8byte memory sizes, though this code will respond
appropriately even before we simplify it */
- sp->stream.avail_in = (uInt) tif->tif_rawcc;
- if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc)
- {
- TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
- return (0);
- }
+ sp->stream.avail_in = (uint64)tif->tif_rawcc < 0xFFFFFFFFU ? (uInt) tif->tif_rawcc : 0xFFFFFFFFU;
return (inflateReset(&sp->stream) == Z_OK);
}
@@ -160,46 +152,43 @@ ZIPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
assert(sp->state == ZSTATE_INIT_DECODE);
sp->stream.next_in = tif->tif_rawcp;
- sp->stream.avail_in = (uInt) tif->tif_rawcc;
sp->stream.next_out = op;
assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised,
we need to simplify this code to reflect a ZLib that is likely updated
to deal with 8byte memory sizes, though this code will respond
appropriately even before we simplify it */
- sp->stream.avail_out = (uInt) occ;
- if ((tmsize_t)sp->stream.avail_out != occ)
- {
- TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
- return (0);
- }
do {
- int state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
+ int state;
+ uInt avail_in_before = (uint64)tif->tif_rawcc <= 0xFFFFFFFFU ? (uInt)tif->tif_rawcc : 0xFFFFFFFFU;
+ uInt avail_out_before = (uint64)occ < 0xFFFFFFFFU ? (uInt) occ : 0xFFFFFFFFU;
+ sp->stream.avail_in = avail_in_before;
+ sp->stream.avail_out = avail_out_before;
+ state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
+ tif->tif_rawcc -= (avail_in_before - sp->stream.avail_in);
+ occ -= (avail_out_before - sp->stream.avail_out);
if (state == Z_STREAM_END)
break;
if (state == Z_DATA_ERROR) {
TIFFErrorExt(tif->tif_clientdata, module,
"Decoding error at scanline %lu, %s",
(unsigned long) tif->tif_row, SAFE_MSG(sp));
- if (inflateSync(&sp->stream) != Z_OK)
- return (0);
- continue;
+ return (0);
}
if (state != Z_OK) {
TIFFErrorExt(tif->tif_clientdata, module,
"ZLib error: %s", SAFE_MSG(sp));
return (0);
}
- } while (sp->stream.avail_out > 0);
- if (sp->stream.avail_out != 0) {
+ } while (occ > 0);
+ if (occ != 0) {
TIFFErrorExt(tif->tif_clientdata, module,
"Not enough data at scanline %lu (short " TIFF_UINT64_FORMAT " bytes)",
- (unsigned long) tif->tif_row, (TIFF_UINT64_T) sp->stream.avail_out);
+ (unsigned long) tif->tif_row, (TIFF_UINT64_T) occ);
return (0);
}
tif->tif_rawcp = sp->stream.next_in;
- tif->tif_rawcc = sp->stream.avail_in;
return (1);
}
@@ -231,7 +220,6 @@ ZIPSetupEncode(TIFF* tif)
static int
ZIPPreEncode(TIFF* tif, uint16 s)
{
- static const char module[] = "ZIPPreEncode";
ZIPState *sp = EncoderState(tif);
(void) s;
@@ -244,12 +232,7 @@ ZIPPreEncode(TIFF* tif, uint16 s)
we need to simplify this code to reflect a ZLib that is likely updated
to deal with 8byte memory sizes, though this code will respond
appropriately even before we simplify it */
- sp->stream.avail_out = (uInt)tif->tif_rawdatasize;
- if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize)
- {
- TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
- return (0);
- }
+ sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU;
return (deflateReset(&sp->stream) == Z_OK);
}
@@ -271,13 +254,9 @@ ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
we need to simplify this code to reflect a ZLib that is likely updated
to deal with 8byte memory sizes, though this code will respond
appropriately even before we simplify it */
- sp->stream.avail_in = (uInt) cc;
- if ((tmsize_t)sp->stream.avail_in != cc)
- {
- TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
- return (0);
- }
do {
+ uInt avail_in_before = (uint64)cc <= 0xFFFFFFFFU ? (uInt)cc : 0xFFFFFFFFU;
+ sp->stream.avail_in = avail_in_before;
if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) {
TIFFErrorExt(tif->tif_clientdata, module,
"Encoder error: %s",
@@ -288,9 +267,10 @@ ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
tif->tif_rawcc = tif->tif_rawdatasize;
TIFFFlushData1(tif);
sp->stream.next_out = tif->tif_rawdata;
- sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */
+ sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU;
}
- } while (sp->stream.avail_in > 0);
+ cc -= (avail_in_before - sp->stream.avail_in);
+ } while (cc > 0);
return (1);
}
@@ -316,7 +296,7 @@ ZIPPostEncode(TIFF* tif)
tif->tif_rawcc = tif->tif_rawdatasize - sp->stream.avail_out;
TIFFFlushData1(tif);
sp->stream.next_out = tif->tif_rawdata;
- sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */
+ sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU;
}
break;
default:
diff --git a/tiff/libtiff/tif_zstd.c b/tiff/libtiff/tif_zstd.c
new file mode 100644
index 00000000..21c935e2
--- /dev/null
+++ b/tiff/libtiff/tif_zstd.c
@@ -0,0 +1,440 @@
+/*
+* Copyright (c) 2017, Planet Labs
+* Author: <even.rouault at spatialys.com>
+*
+* Permission to use, copy, modify, distribute, and sell this software and
+* its documentation for any purpose is hereby granted without fee, provided
+* that (i) the above copyright notices and this permission notice appear in
+* all copies of the software and related documentation, and (ii) the names of
+* Sam Leffler and Silicon Graphics may not be used in any advertising or
+* publicity relating to the software without the specific, prior written
+* permission of Sam Leffler and Silicon Graphics.
+*
+* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+*
+* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THIS SOFTWARE.
+*/
+
+#include "tiffiop.h"
+#ifdef ZSTD_SUPPORT
+/*
+* TIFF Library.
+*
+* ZSTD Compression Support
+*
+*/
+
+#include "tif_predict.h"
+#include "zstd.h"
+
+#include <stdio.h>
+
+/*
+* State block for each open TIFF file using ZSTD compression/decompression.
+*/
+typedef struct {
+ TIFFPredictorState predict;
+ ZSTD_DStream* dstream;
+ ZSTD_CStream* cstream;
+ int compression_level; /* compression level */
+ ZSTD_outBuffer out_buffer;
+ int state; /* state flags */
+#define LSTATE_INIT_DECODE 0x01
+#define LSTATE_INIT_ENCODE 0x02
+
+ TIFFVGetMethod vgetparent; /* super-class method */
+ TIFFVSetMethod vsetparent; /* super-class method */
+} ZSTDState;
+
+#define LState(tif) ((ZSTDState*) (tif)->tif_data)
+#define DecoderState(tif) LState(tif)
+#define EncoderState(tif) LState(tif)
+
+static int ZSTDEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s);
+static int ZSTDDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s);
+
+static int
+ZSTDFixupTags(TIFF* tif)
+{
+ (void) tif;
+ return 1;
+}
+
+static int
+ZSTDSetupDecode(TIFF* tif)
+{
+ ZSTDState* sp = DecoderState(tif);
+
+ assert(sp != NULL);
+
+ /* if we were last encoding, terminate this mode */
+ if (sp->state & LSTATE_INIT_ENCODE) {
+ ZSTD_freeCStream(sp->cstream);
+ sp->cstream = NULL;
+ sp->state = 0;
+ }
+
+ sp->state |= LSTATE_INIT_DECODE;
+ return 1;
+}
+
+/*
+* Setup state for decoding a strip.
+*/
+static int
+ZSTDPreDecode(TIFF* tif, uint16 s)
+{
+ static const char module[] = "ZSTDPreDecode";
+ ZSTDState* sp = DecoderState(tif);
+ size_t zstd_ret;
+
+ (void) s;
+ assert(sp != NULL);
+
+ if( (sp->state & LSTATE_INIT_DECODE) == 0 )
+ tif->tif_setupdecode(tif);
+
+ if( sp->dstream )
+ {
+ ZSTD_freeDStream(sp->dstream);
+ sp->dstream = NULL;
+ }
+
+ sp->dstream = ZSTD_createDStream();
+ if( sp->dstream == NULL ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot allocate decompression stream");
+ return 0;
+ }
+ zstd_ret = ZSTD_initDStream(sp->dstream);
+ if( ZSTD_isError(zstd_ret) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in ZSTD_initDStream(): %s",
+ ZSTD_getErrorName(zstd_ret));
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+ZSTDDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
+{
+ static const char module[] = "ZSTDDecode";
+ ZSTDState* sp = DecoderState(tif);
+ ZSTD_inBuffer in_buffer;
+ ZSTD_outBuffer out_buffer;
+ size_t zstd_ret;
+
+ (void) s;
+ assert(sp != NULL);
+ assert(sp->state == LSTATE_INIT_DECODE);
+
+ in_buffer.src = tif->tif_rawcp;
+ in_buffer.size = (size_t) tif->tif_rawcc;
+ in_buffer.pos = 0;
+
+ out_buffer.dst = op;
+ out_buffer.size = (size_t) occ;
+ out_buffer.pos = 0;
+
+ do {
+ zstd_ret = ZSTD_decompressStream(sp->dstream, &out_buffer,
+ &in_buffer);
+ if( ZSTD_isError(zstd_ret) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in ZSTD_decompressStream(): %s",
+ ZSTD_getErrorName(zstd_ret));
+ return 0;
+ }
+ } while( zstd_ret != 0 &&
+ in_buffer.pos < in_buffer.size &&
+ out_buffer.pos < out_buffer.size );
+
+ if (out_buffer.pos < (size_t)occ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Not enough data at scanline %lu (short %lu bytes)",
+ (unsigned long) tif->tif_row,
+ (unsigned long) (size_t)occ - out_buffer.pos);
+ return 0;
+ }
+
+ tif->tif_rawcp += in_buffer.pos;
+ tif->tif_rawcc -= in_buffer.pos;
+
+ return 1;
+}
+
+static int
+ZSTDSetupEncode(TIFF* tif)
+{
+ ZSTDState* sp = EncoderState(tif);
+
+ assert(sp != NULL);
+ if (sp->state & LSTATE_INIT_DECODE) {
+ ZSTD_freeDStream(sp->dstream);
+ sp->dstream = NULL;
+ sp->state = 0;
+ }
+
+ sp->state |= LSTATE_INIT_ENCODE;
+ return 1;
+}
+
+/*
+* Reset encoding state at the start of a strip.
+*/
+static int
+ZSTDPreEncode(TIFF* tif, uint16 s)
+{
+ static const char module[] = "ZSTDPreEncode";
+ ZSTDState *sp = EncoderState(tif);
+ size_t zstd_ret;
+
+ (void) s;
+ assert(sp != NULL);
+ if( sp->state != LSTATE_INIT_ENCODE )
+ tif->tif_setupencode(tif);
+
+ if (sp->cstream) {
+ ZSTD_freeCStream(sp->cstream);
+ sp->cstream = NULL;
+ }
+ sp->cstream = ZSTD_createCStream();
+ if( sp->cstream == NULL ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Cannot allocate compression stream");
+ return 0;
+ }
+
+ zstd_ret = ZSTD_initCStream(sp->cstream, sp->compression_level);
+ if( ZSTD_isError(zstd_ret) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in ZSTD_initCStream(): %s",
+ ZSTD_getErrorName(zstd_ret));
+ return 0;
+ }
+
+ sp->out_buffer.dst = tif->tif_rawdata;
+ sp->out_buffer.size = (size_t)tif->tif_rawdatasize;
+ sp->out_buffer.pos = 0;
+
+ return 1;
+}
+
+/*
+* Encode a chunk of pixels.
+*/
+static int
+ZSTDEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
+{
+ static const char module[] = "ZSTDEncode";
+ ZSTDState *sp = EncoderState(tif);
+ ZSTD_inBuffer in_buffer;
+ size_t zstd_ret;
+
+ assert(sp != NULL);
+ assert(sp->state == LSTATE_INIT_ENCODE);
+
+ (void) s;
+
+ in_buffer.src = bp;
+ in_buffer.size = (size_t)cc;
+ in_buffer.pos = 0;
+
+ do {
+ zstd_ret = ZSTD_compressStream(sp->cstream, &sp->out_buffer,
+ &in_buffer);
+ if( ZSTD_isError(zstd_ret) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in ZSTD_compressStream(): %s",
+ ZSTD_getErrorName(zstd_ret));
+ return 0;
+ }
+ if( sp->out_buffer.pos == sp->out_buffer.size ) {
+ tif->tif_rawcc = tif->tif_rawdatasize;
+ TIFFFlushData1(tif);
+ sp->out_buffer.dst = tif->tif_rawcp;
+ sp->out_buffer.pos = 0;
+ }
+ } while( in_buffer.pos < in_buffer.size );
+
+ return 1;
+}
+
+/*
+* Finish off an encoded strip by flushing it.
+*/
+static int
+ZSTDPostEncode(TIFF* tif)
+{
+ static const char module[] = "ZSTDPostEncode";
+ ZSTDState *sp = EncoderState(tif);
+ size_t zstd_ret;
+
+ do {
+ zstd_ret = ZSTD_endStream(sp->cstream, &sp->out_buffer);
+ if( ZSTD_isError(zstd_ret) ) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Error in ZSTD_endStream(): %s",
+ ZSTD_getErrorName(zstd_ret));
+ return 0;
+ }
+ if( sp->out_buffer.pos > 0 ) {
+ tif->tif_rawcc = sp->out_buffer.pos;
+ TIFFFlushData1(tif);
+ sp->out_buffer.dst = tif->tif_rawcp;
+ sp->out_buffer.pos = 0;
+ }
+ } while (zstd_ret != 0);
+ return 1;
+}
+
+static void
+ZSTDCleanup(TIFF* tif)
+{
+ ZSTDState* sp = LState(tif);
+
+ assert(sp != 0);
+
+ (void)TIFFPredictorCleanup(tif);
+
+ tif->tif_tagmethods.vgetfield = sp->vgetparent;
+ tif->tif_tagmethods.vsetfield = sp->vsetparent;
+
+ if (sp->dstream) {
+ ZSTD_freeDStream(sp->dstream);
+ sp->dstream = NULL;
+ }
+ if (sp->cstream) {
+ ZSTD_freeCStream(sp->cstream);
+ sp->cstream = NULL;
+ }
+ _TIFFfree(sp);
+ tif->tif_data = NULL;
+
+ _TIFFSetDefaultCompressionState(tif);
+}
+
+static int
+ZSTDVSetField(TIFF* tif, uint32 tag, va_list ap)
+{
+ static const char module[] = "ZSTDVSetField";
+ ZSTDState* sp = LState(tif);
+
+ switch (tag) {
+ case TIFFTAG_ZSTD_LEVEL:
+ sp->compression_level = (int) va_arg(ap, int);
+ if( sp->compression_level <= 0 ||
+ sp->compression_level > ZSTD_maxCLevel() )
+ {
+ TIFFWarningExt(tif->tif_clientdata, module,
+ "ZSTD_LEVEL should be between 1 and %d",
+ ZSTD_maxCLevel());
+ }
+ return 1;
+ default:
+ return (*sp->vsetparent)(tif, tag, ap);
+ }
+ /*NOTREACHED*/
+}
+
+static int
+ZSTDVGetField(TIFF* tif, uint32 tag, va_list ap)
+{
+ ZSTDState* sp = LState(tif);
+
+ switch (tag) {
+ case TIFFTAG_ZSTD_LEVEL:
+ *va_arg(ap, int*) = sp->compression_level;
+ break;
+ default:
+ return (*sp->vgetparent)(tif, tag, ap);
+ }
+ return 1;
+}
+
+static const TIFFField ZSTDFields[] = {
+ { TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT,
+ TIFF_SETGET_UNDEFINED,
+ FIELD_PSEUDO, TRUE, FALSE, "ZSTD compression_level", NULL },
+};
+
+int
+TIFFInitZSTD(TIFF* tif, int scheme)
+{
+ static const char module[] = "TIFFInitZSTD";
+ ZSTDState* sp;
+
+ assert( scheme == COMPRESSION_ZSTD );
+
+ /*
+ * Merge codec-specific tag information.
+ */
+ if (!_TIFFMergeFields(tif, ZSTDFields, TIFFArrayCount(ZSTDFields))) {
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "Merging ZSTD codec-specific tags failed");
+ return 0;
+ }
+
+ /*
+ * Allocate state block so tag methods have storage to record values.
+ */
+ tif->tif_data = (uint8*) _TIFFmalloc(sizeof(ZSTDState));
+ if (tif->tif_data == NULL)
+ goto bad;
+ sp = LState(tif);
+
+ /*
+ * Override parent get/set field methods.
+ */
+ sp->vgetparent = tif->tif_tagmethods.vgetfield;
+ tif->tif_tagmethods.vgetfield = ZSTDVGetField; /* hook for codec tags */
+ sp->vsetparent = tif->tif_tagmethods.vsetfield;
+ tif->tif_tagmethods.vsetfield = ZSTDVSetField; /* hook for codec tags */
+
+ /* Default values for codec-specific fields */
+ sp->compression_level = 9; /* default comp. level */
+ sp->state = 0;
+ sp->dstream = 0;
+ sp->cstream = 0;
+ sp->out_buffer.dst = NULL;
+ sp->out_buffer.size = 0;
+ sp->out_buffer.pos = 0;
+
+ /*
+ * Install codec methods.
+ */
+ tif->tif_fixuptags = ZSTDFixupTags;
+ tif->tif_setupdecode = ZSTDSetupDecode;
+ tif->tif_predecode = ZSTDPreDecode;
+ tif->tif_decoderow = ZSTDDecode;
+ tif->tif_decodestrip = ZSTDDecode;
+ tif->tif_decodetile = ZSTDDecode;
+ tif->tif_setupencode = ZSTDSetupEncode;
+ tif->tif_preencode = ZSTDPreEncode;
+ tif->tif_postencode = ZSTDPostEncode;
+ tif->tif_encoderow = ZSTDEncode;
+ tif->tif_encodestrip = ZSTDEncode;
+ tif->tif_encodetile = ZSTDEncode;
+ tif->tif_cleanup = ZSTDCleanup;
+ /*
+ * Setup predictor setup.
+ */
+ (void) TIFFPredictorInit(tif);
+ return 1;
+bad:
+ TIFFErrorExt(tif->tif_clientdata, module,
+ "No space for ZSTD state block");
+ return 0;
+}
+#endif /* ZSTD_SUPPORT */
+
+/* vim: set ts=8 sts=8 sw=8 noet: */
diff --git a/tiff/libtiff/tiff.h b/tiff/libtiff/tiff.h
index fb39634c..5b0a0c90 100644
--- a/tiff/libtiff/tiff.h
+++ b/tiff/libtiff/tiff.h
@@ -1,5 +1,3 @@
-/* $Id: tiff.h,v 1.70 2016-01-23 21:20:34 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -189,7 +187,11 @@ typedef enum {
#define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */
#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */
#define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */
+#define COMPRESSION_LERC 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */
+/* compression codes 34887-34889 are reserved for ESRI */
#define COMPRESSION_LZMA 34925 /* LZMA2 */
+#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */
+#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */
#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */
#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */
#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */
@@ -450,6 +452,8 @@ typedef enum {
/* tag 34929 is a private tag registered to FedEx */
#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */
#define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to Interoperability private directory */
+/* tags 50674 to 50677 are reserved for ESRI */
+#define TIFFTAG_LERC_PARAMETERS 50674 /* Stores LERC version and additional compression method */
/* Adobe Digital Negative (DNG) format tags */
#define TIFFTAG_DNGVERSION 50706 /* &DNG version number */
#define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */
@@ -603,6 +607,16 @@ typedef enum {
#define TIFFTAG_PERSAMPLE 65563 /* interface for per sample tags */
#define PERSAMPLE_MERGED 0 /* present as a single value */
#define PERSAMPLE_MULTI 1 /* present as multiple values */
+#define TIFFTAG_ZSTD_LEVEL 65564 /* ZSTD compression level */
+#define TIFFTAG_LERC_VERSION 65565 /* LERC version */
+#define LERC_VERSION_2_4 4
+#define TIFFTAG_LERC_ADD_COMPRESSION 65566 /* LERC additional compression */
+#define LERC_ADD_COMPRESSION_NONE 0
+#define LERC_ADD_COMPRESSION_DEFLATE 1
+#define LERC_ADD_COMPRESSION_ZSTD 2
+#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */
+#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level: WARNING not registered in Adobe-maintained registry */
+#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy : WARNING not registered in Adobe-maintained registry */
/*
* EXIF tags
diff --git a/tiff/libtiff/tiffconf.h.cmake.in b/tiff/libtiff/tiffconf.h.cmake.in
index de8a807e..59542f1e 100644
--- a/tiff/libtiff/tiffconf.h.cmake.in
+++ b/tiff/libtiff/tiffconf.h.cmake.in
@@ -40,15 +40,6 @@
/* Pointer difference type */
#define TIFF_PTRDIFF_T @TIFF_PTRDIFF_T@
-/* Define to 1 if the system has the type `int16'. */
-#cmakedefine HAVE_INT16 1
-
-/* Define to 1 if the system has the type `int32'. */
-#cmakedefine HAVE_INT32 1
-
-/* Define to 1 if the system has the type `int8'. */
-#cmakedefine HAVE_INT8 1
-
/* Compatibility stuff. */
/* Define as 0 or 1 according to the floating point format suported by the
diff --git a/tiff/libtiff/tiffconf.h.in b/tiff/libtiff/tiffconf.h.in
index 6da9c5a6..5de30c9b 100644
--- a/tiff/libtiff/tiffconf.h.in
+++ b/tiff/libtiff/tiffconf.h.in
@@ -37,15 +37,6 @@
/* Pointer difference type */
#undef TIFF_PTRDIFF_T
-/* Define to 1 if the system has the type `int16'. */
-#undef HAVE_INT16
-
-/* Define to 1 if the system has the type `int32'. */
-#undef HAVE_INT32
-
-/* Define to 1 if the system has the type `int8'. */
-#undef HAVE_INT8
-
/* Compatibility stuff. */
/* Define as 0 or 1 according to the floating point format suported by the
diff --git a/tiff/libtiff/tiffconf.vc.h b/tiff/libtiff/tiffconf.vc.h
index c8c6c656..fb37a755 100644
--- a/tiff/libtiff/tiffconf.vc.h
+++ b/tiff/libtiff/tiffconf.vc.h
@@ -7,15 +7,6 @@
#ifndef _TIFFCONF_
#define _TIFFCONF_
-/* Define to 1 if the system has the type `int16'. */
-/* #undef HAVE_INT16 */
-
-/* Define to 1 if the system has the type `int32'. */
-/* #undef HAVE_INT32 */
-
-/* Define to 1 if the system has the type `int8'. */
-/* #undef HAVE_INT8 */
-
/* The size of a `int', as computed by sizeof. */
#define SIZEOF_INT 4
diff --git a/tiff/libtiff/tiffconf.wince.h b/tiff/libtiff/tiffconf.wince.h
index 2ef3958a..013b0960 100644
--- a/tiff/libtiff/tiffconf.wince.h
+++ b/tiff/libtiff/tiffconf.wince.h
@@ -1,5 +1,3 @@
-/* $Id: tiffconf.wince.h,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */
-
/*
* Windows CE platform tiffconf.wince.h
* Created by Mateusz Loskot (mateusz@loskot.net)
@@ -27,15 +25,6 @@
#ifndef _TIFFCONF_
#define _TIFFCONF_
-/* Define to 1 if the system has the type `int16'. */
-/* #undef HAVE_INT16 */
-
-/* Define to 1 if the system has the type `int32'. */
-/* #undef HAVE_INT32 */
-
-/* Define to 1 if the system has the type `int8'. */
-/* #undef HAVE_INT8 */
-
/* The size of a `int', as computed by sizeof. */
#define SIZEOF_INT 4
diff --git a/tiff/libtiff/tiffio.h b/tiff/libtiff/tiffio.h
index ef61b5c0..a626a764 100644
--- a/tiff/libtiff/tiffio.h
+++ b/tiff/libtiff/tiffio.h
@@ -1,5 +1,3 @@
-/* $Id: tiffio.h,v 1.94 2017-01-11 19:02:49 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -52,7 +50,7 @@ typedef struct tiff TIFF;
* promoted type (i.e. one of int, unsigned int, pointer,
* or double) and because we defined pseudo-tags that are
* outside the range of legal Aldus-assigned tags.
- * NB: tsize_t is int32 and not uint32 because some functions
+ * NB: tsize_t is signed and not unsigned because some functions
* return -1.
* NB: toff_t is not off_t for many reasons; TIFFs max out at
* 32-bit file offsets, and BigTIFF maxes out at 64-bit
@@ -413,6 +411,11 @@ extern int TIFFWriteDirectory(TIFF *);
extern int TIFFWriteCustomDirectory(TIFF *, uint64 *);
extern int TIFFCheckpointDirectory(TIFF *);
extern int TIFFRewriteDirectory(TIFF *);
+extern int TIFFDeferStrileArrayWriting(TIFF *);
+extern int TIFFForceStrileArrayWriting(TIFF* );
+
+/* Extra function to allow JPEG memory use to be controlled */
+extern void TIFFSetJpegMemFunction(TIFF *, void *(*fn)(thandle_t));
#if defined(c_plusplus) || defined(__cplusplus)
extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
@@ -470,6 +473,9 @@ extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_
extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size);
extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size);
extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size);
+extern int TIFFReadFromUserBuffer(TIFF* tif, uint32 strile,
+ void* inbuf, tmsize_t insize,
+ void* outbuf, tmsize_t outsize);
extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc);
extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc);
extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc);
@@ -490,6 +496,11 @@ extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n);
extern void TIFFReverseBits(uint8* cp, tmsize_t n);
extern const unsigned char* TIFFGetBitRevTable(int);
+extern uint64 TIFFGetStrileOffset(TIFF *tif, uint32 strile);
+extern uint64 TIFFGetStrileByteCount(TIFF *tif, uint32 strile);
+extern uint64 TIFFGetStrileOffsetWithErr(TIFF *tif, uint32 strile, int *pbErr);
+extern uint64 TIFFGetStrileByteCountWithErr(TIFF *tif, uint32 strile, int *pbErr);
+
#ifdef LOGLUV_PUBLIC
#define U_NEU 0.210526316
#define V_NEU 0.473684211
diff --git a/tiff/libtiff/tiffio.hxx b/tiff/libtiff/tiffio.hxx
index ed994f11..df2cbbce 100644
--- a/tiff/libtiff/tiffio.hxx
+++ b/tiff/libtiff/tiffio.hxx
@@ -1,5 +1,3 @@
-/* $Id: tiffio.hxx,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -33,6 +31,7 @@
#include <iostream>
#include "tiff.h"
+#include "tiffio.h"
extern TIFF* TIFFStreamOpen(const char*, std::ostream *);
extern TIFF* TIFFStreamOpen(const char*, std::istream *);
diff --git a/tiff/libtiff/tiffiop.h b/tiff/libtiff/tiffiop.h
index 80d58747..900f4786 100644
--- a/tiff/libtiff/tiffiop.h
+++ b/tiff/libtiff/tiffiop.h
@@ -1,26 +1,24 @@
-/* $Id: tiffiop.h,v 1.95 2017-09-07 14:02:52 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
*
- * Permission to use, copy, modify, distribute, and sell this software and
+ * Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that (i) the above copyright notices and this permission notice appear in
* all copies of the software and related documentation, and (ii) the names of
* Sam Leffler and Silicon Graphics may not be used in any advertising or
* publicity relating to the software without the specific, prior written
* permission of Sam Leffler and Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*/
@@ -63,7 +61,7 @@
#ifdef HAVE_ASSERT_H
# include <assert.h>
#else
-# define assert(x)
+# define assert(x)
#endif
#ifdef HAVE_SEARCH_H
@@ -90,12 +88,26 @@ extern int snprintf(char* str, size_t size, const char* format, ...);
#endif
#define streq(a,b) (strcmp(a,b) == 0)
+#define strneq(a,b,n) (strncmp(a,b,n) == 0)
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
+#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
+#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
+
+/*
+ * Largest 32-bit unsigned integer value.
+ */
+#define TIFF_UINT32_MAX 0xFFFFFFFFU
+
+/*
+ * Largest 64-bit unsigned integer value.
+ */
+#define TIFF_UINT64_MAX (((uint64)(TIFF_UINT32_MAX)) << 32 | TIFF_UINT32_MAX)
+
typedef struct client_info {
struct client_info *next;
void *data;
@@ -146,6 +158,9 @@ struct tiff {
#define TIFF_DIRTYSTRIP 0x200000U /* stripoffsets/stripbytecount dirty*/
#define TIFF_PERSAMPLE 0x400000U /* get/set per sample tags as arrays */
#define TIFF_BUFFERMMAP 0x800000U /* read buffer (tif_rawdata) points into mmap() memory */
+ #define TIFF_DEFERSTRILELOAD 0x1000000U /* defer strip/tile offset/bytecount array loading. */
+ #define TIFF_LAZYSTRILELOAD 0x2000000U /* lazy/ondemand loading of strip/tile offset/bytecount values. Only used if TIFF_DEFERSTRILELOAD is set and in read-only mode */
+ #define TIFF_CHOPPEDUPARRAYS 0x4000000U /* set when allocChoppedUpStripArrays() has modified strip array */
uint64 tif_diroff; /* file offset of current directory */
uint64 tif_nextdiroff; /* file offset of following directory */
uint64* tif_dirlist; /* list of offsets to already seen directories to prevent IFD looping */
@@ -225,6 +240,7 @@ struct tiff {
* setting up an old tag extension scheme. */
TIFFFieldArray* tif_fieldscompat;
size_t tif_nfieldscompat;
+ void *(*get_jpeg_mem_ptr)(thandle_t);
};
#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */
@@ -277,7 +293,7 @@ struct tiff {
#define TIFFhowmany8_64(x) (((x)&0x07)?((uint64)(x)>>3)+1:(uint64)(x)>>3)
#define TIFFroundup_64(x, y) (TIFFhowmany_64(x,y)*(y))
-/* Safe multiply which returns zero if there is an integer overflow */
+/* Safe multiply which returns zero if there is an *unsigned* integer overflow. This macro is not safe for *signed* integer types */
#define TIFFSafeMultiply(t,v,m) ((((t)(m) != (t)0) && (((t)(((v)*(m))/(m))) == (t)(v))) ? (t)((v)*(m)) : (t)0)
#define TIFFmax(A,B) ((A)>(B)?(A):(B))
@@ -332,11 +348,15 @@ typedef size_t TIFFIOSize_t;
#define _TIFF_off_t off_t
#endif
-#if __clang_major__ >= 4 || (__clang_major__ == 3 && __clang_minor__ >= 8)
+#if defined(__has_attribute) && defined(__clang__)
+#if __has_attribute(no_sanitize)
#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow")))
#else
#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW
#endif
+#else
+#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW
+#endif
#if defined(__cplusplus)
@@ -383,12 +403,16 @@ extern TIFFErrorHandlerExt _TIFFerrorHandlerExt;
extern uint32 _TIFFMultiply32(TIFF*, uint32, uint32, const char*);
extern uint64 _TIFFMultiply64(TIFF*, uint64, uint64, const char*);
+extern tmsize_t _TIFFMultiplySSize(TIFF*, tmsize_t, tmsize_t, const char*);
+extern tmsize_t _TIFFCastUInt64ToSSize(TIFF*, uint64, const char*);
extern void* _TIFFCheckMalloc(TIFF*, tmsize_t, tmsize_t, const char*);
extern void* _TIFFCheckRealloc(TIFF*, void*, tmsize_t, tmsize_t, const char*);
extern double _TIFFUInt64ToDouble(uint64);
extern float _TIFFUInt64ToFloat(uint64);
+extern float _TIFFClampDoubleToFloat(double);
+
extern tmsize_t
_TIFFReadEncodedStripAndAllocBuffer(TIFF* tif, uint32 strip,
void **buf, tmsize_t bufsizetoalloc,
@@ -442,6 +466,12 @@ extern int TIFFInitSGILog(TIFF*, int);
#ifdef LZMA_SUPPORT
extern int TIFFInitLZMA(TIFF*, int);
#endif
+#ifdef ZSTD_SUPPORT
+extern int TIFFInitZSTD(TIFF*, int);
+#endif
+#ifdef WEBP_SUPPORT
+extern int TIFFInitWebP(TIFF*, int);
+#endif
#ifdef VMS
extern const TIFFCodec _TIFFBuiltinCODECS[];
#else
diff --git a/tiff/libtiff/tiffvers.h b/tiff/libtiff/tiffvers.h
index 7c415740..aa3f613e 100644
--- a/tiff/libtiff/tiffvers.h
+++ b/tiff/libtiff/tiffvers.h
@@ -1,4 +1,4 @@
-#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.9\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc."
+#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.1.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc."
/*
* This define can be used in code that requires
* compilation-related definitions specific to a
@@ -6,4 +6,4 @@
* version checking should be done based on the
* string returned by TIFFGetVersion.
*/
-#define TIFFLIB_VERSION 20171118
+#define TIFFLIB_VERSION 20191103
diff --git a/tiff/m4/libtool.m4 b/tiff/m4/libtool.m4
index 10ab2844..a3bc337b 100644
--- a/tiff/m4/libtool.m4
+++ b/tiff/m4/libtool.m4
@@ -2887,18 +2887,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
-netbsdelf*-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='NetBSD ld.elf_so'
- ;;
-
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3558,7 +3546,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd* | netbsdelf*-gnu)
+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
@@ -4436,7 +4424,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd* | netbsdelf*-gnu)
+ netbsd*)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4948,9 +4936,6 @@ m4_if([$1], [CXX], [
;;
esac
;;
- linux* | k*bsd*-gnu | gnu*)
- _LT_TAGVAR(link_all_deplibs, $1)=no
- ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -5013,9 +4998,6 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
- linux* | k*bsd*-gnu | gnu*)
- _LT_TAGVAR(link_all_deplibs, $1)=no
- ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5270,7 +5252,7 @@ _LT_EOF
fi
;;
- netbsd* | netbsdelf*-gnu)
+ 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=
@@ -5791,7 +5773,6 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
- _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5813,7 +5794,7 @@ _LT_EOF
esac
;;
- netbsd* | netbsdelf*-gnu)
+ 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
diff --git a/tiff/man/Makefile.in b/tiff/man/Makefile.in
index 212905b6..f5c9bf0c 100644
--- a/tiff/man/Makefile.in
+++ b/tiff/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -179,7 +179,7 @@ NROFF = nroff
MANS = $(dist_man1_MANS) $(dist_man3_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(dist_man1_MANS) $(dist_man3_MANS) \
- $(srcdir)/Makefile.in $(top_srcdir)/config/mkinstalldirs
+ $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -419,8 +419,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -526,7 +526,10 @@ ctags CTAGS:
cscope cscopelist:
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
diff --git a/tiff/man/TIFFClose.3tiff b/tiff/man/TIFFClose.3tiff
index a6a7d82a..fc64ccc3 100644
--- a/tiff/man/TIFFClose.3tiff
+++ b/tiff/man/TIFFClose.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFClose.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFDataWidth.3tiff b/tiff/man/TIFFDataWidth.3tiff
index af67777d..efcd39d7 100644
--- a/tiff/man/TIFFDataWidth.3tiff
+++ b/tiff/man/TIFFDataWidth.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFDataWidth.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2002, Andrey Kiselev <dron@ak4719.spb.edu>
.\"
diff --git a/tiff/man/TIFFError.3tiff b/tiff/man/TIFFError.3tiff
index 6924c7f4..5d0c2196 100644
--- a/tiff/man/TIFFError.3tiff
+++ b/tiff/man/TIFFError.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFError.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFFieldDataType.3tiff b/tiff/man/TIFFFieldDataType.3tiff
index 4fb1e2cf..6049f591 100644
--- a/tiff/man/TIFFFieldDataType.3tiff
+++ b/tiff/man/TIFFFieldDataType.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldDataType.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFieldName.3tiff b/tiff/man/TIFFFieldName.3tiff
index 0f49c337..47d9ad84 100644
--- a/tiff/man/TIFFFieldName.3tiff
+++ b/tiff/man/TIFFFieldName.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldName.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFieldPassCount.3tiff b/tiff/man/TIFFFieldPassCount.3tiff
index 07324f80..ff14c520 100644
--- a/tiff/man/TIFFFieldPassCount.3tiff
+++ b/tiff/man/TIFFFieldPassCount.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldPassCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFieldReadCount.3tiff b/tiff/man/TIFFFieldReadCount.3tiff
index 88d67fd1..b6a4546c 100644
--- a/tiff/man/TIFFFieldReadCount.3tiff
+++ b/tiff/man/TIFFFieldReadCount.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldReadCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFieldTag.3tiff b/tiff/man/TIFFFieldTag.3tiff
index f94f1be9..3d1e83d0 100644
--- a/tiff/man/TIFFFieldTag.3tiff
+++ b/tiff/man/TIFFFieldTag.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldTag.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFieldWriteCount.3tiff b/tiff/man/TIFFFieldWriteCount.3tiff
index 68a3b043..f80290fe 100644
--- a/tiff/man/TIFFFieldWriteCount.3tiff
+++ b/tiff/man/TIFFFieldWriteCount.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFieldWriteCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 2012, Tom Lane <tgl@sss.pgh.pa.us>
.\"
diff --git a/tiff/man/TIFFFlush.3tiff b/tiff/man/TIFFFlush.3tiff
index 27520da3..c46a2a3f 100644
--- a/tiff/man/TIFFFlush.3tiff
+++ b/tiff/man/TIFFFlush.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFFlush.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFGetField.3tiff b/tiff/man/TIFFGetField.3tiff
index 528019e1..c2fd025f 100644
--- a/tiff/man/TIFFGetField.3tiff
+++ b/tiff/man/TIFFGetField.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFGetField.3tiff,v 1.8 2017-06-30 17:40:02 erouault Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFOpen.3tiff b/tiff/man/TIFFOpen.3tiff
index f4209313..c6ed28e6 100644
--- a/tiff/man/TIFFOpen.3tiff
+++ b/tiff/man/TIFFOpen.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFOpen.3tiff,v 1.2 2005-07-01 12:36:22 dron Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -208,6 +207,21 @@ Disable the use of strip chopping when reading images.
Read TIFF header only, do not load the first image directory. That could be
useful in case of the broken first directory. We can open the file and proceed
to the other directories.
+.TP
+.B 4
+ClassicTIFF for creating a file (default)
+.TP
+.B 8
+BigTIFF for creating a file.
+.TP
+.B D
+Enable use of deferred strip/tile offset/bytecount array loading. They will
+be loaded the first time they are accessed to. This loading will be done in
+its entirety unless the O flag is also specified.
+.TP
+.B O
+On-demand loading of values of the strip/tile offset/bytecount arrays, limited
+to the requested strip/tile, instead of whole array loading (implies D)
.SH "BYTE ORDER"
The
.SM TIFF
diff --git a/tiff/man/TIFFPrintDirectory.3tiff b/tiff/man/TIFFPrintDirectory.3tiff
index 437b09e2..c208f044 100644
--- a/tiff/man/TIFFPrintDirectory.3tiff
+++ b/tiff/man/TIFFPrintDirectory.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFPrintDirectory.3tiff,v 1.1 2004-11-11 14:39:16 dron Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFRGBAImage.3tiff b/tiff/man/TIFFRGBAImage.3tiff
index 86c93680..fe6064fc 100644
--- a/tiff/man/TIFFRGBAImage.3tiff
+++ b/tiff/man/TIFFRGBAImage.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFRGBAImage.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadDirectory.3tiff b/tiff/man/TIFFReadDirectory.3tiff
index e13586fd..c178c42b 100644
--- a/tiff/man/TIFFReadDirectory.3tiff
+++ b/tiff/man/TIFFReadDirectory.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadDirectory.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadEncodedStrip.3tiff b/tiff/man/TIFFReadEncodedStrip.3tiff
index afde8e74..7122946a 100644
--- a/tiff/man/TIFFReadEncodedStrip.3tiff
+++ b/tiff/man/TIFFReadEncodedStrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadEncodedStrip.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadEncodedTile.3tiff b/tiff/man/TIFFReadEncodedTile.3tiff
index 99d3e459..6f8d6496 100644
--- a/tiff/man/TIFFReadEncodedTile.3tiff
+++ b/tiff/man/TIFFReadEncodedTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadEncodedTile.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadRGBAImage.3tiff b/tiff/man/TIFFReadRGBAImage.3tiff
index 7373e2ae..920fc370 100644
--- a/tiff/man/TIFFReadRGBAImage.3tiff
+++ b/tiff/man/TIFFReadRGBAImage.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadRGBAImage.3tiff,v 1.5 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadRGBAStrip.3tiff b/tiff/man/TIFFReadRGBAStrip.3tiff
index db889a0a..31604124 100644
--- a/tiff/man/TIFFReadRGBAStrip.3tiff
+++ b/tiff/man/TIFFReadRGBAStrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadRGBAStrip.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadRGBATile.3tiff b/tiff/man/TIFFReadRGBATile.3tiff
index 5cb76553..5b9b4bf2 100644
--- a/tiff/man/TIFFReadRGBATile.3tiff
+++ b/tiff/man/TIFFReadRGBATile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadRGBATile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadRawStrip.3tiff b/tiff/man/TIFFReadRawStrip.3tiff
index 6fe326b7..6d411df4 100644
--- a/tiff/man/TIFFReadRawStrip.3tiff
+++ b/tiff/man/TIFFReadRawStrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadRawStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadRawTile.3tiff b/tiff/man/TIFFReadRawTile.3tiff
index 2844573e..9c60888a 100644
--- a/tiff/man/TIFFReadRawTile.3tiff
+++ b/tiff/man/TIFFReadRawTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadRawTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadScanline.3tiff b/tiff/man/TIFFReadScanline.3tiff
index 2d9c85a3..ca4b8368 100644
--- a/tiff/man/TIFFReadScanline.3tiff
+++ b/tiff/man/TIFFReadScanline.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadScanline.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFReadTile.3tiff b/tiff/man/TIFFReadTile.3tiff
index f1107dc3..cf0f21dc 100644
--- a/tiff/man/TIFFReadTile.3tiff
+++ b/tiff/man/TIFFReadTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFReadTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFSetDirectory.3tiff b/tiff/man/TIFFSetDirectory.3tiff
index 0f109f66..734c0155 100644
--- a/tiff/man/TIFFSetDirectory.3tiff
+++ b/tiff/man/TIFFSetDirectory.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFSetDirectory.3tiff,v 1.4 2017-06-30 17:40:02 erouault Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFSetField.3tiff b/tiff/man/TIFFSetField.3tiff
index 695a199e..df2a5ea2 100644
--- a/tiff/man/TIFFSetField.3tiff
+++ b/tiff/man/TIFFSetField.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFSetField.3tiff,v 1.7 2017-06-30 17:40:02 erouault Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWarning.3tiff b/tiff/man/TIFFWarning.3tiff
index 0d302ed8..9a4d9096 100644
--- a/tiff/man/TIFFWarning.3tiff
+++ b/tiff/man/TIFFWarning.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWarning.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteDirectory.3tiff b/tiff/man/TIFFWriteDirectory.3tiff
index 9f0d2492..e7b84b6d 100644
--- a/tiff/man/TIFFWriteDirectory.3tiff
+++ b/tiff/man/TIFFWriteDirectory.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteDirectory.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteEncodedStrip.3tiff b/tiff/man/TIFFWriteEncodedStrip.3tiff
index a31f6e00..dc410e41 100644
--- a/tiff/man/TIFFWriteEncodedStrip.3tiff
+++ b/tiff/man/TIFFWriteEncodedStrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteEncodedStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteEncodedTile.3tiff b/tiff/man/TIFFWriteEncodedTile.3tiff
index 476cbbb4..d94f4d0e 100644
--- a/tiff/man/TIFFWriteEncodedTile.3tiff
+++ b/tiff/man/TIFFWriteEncodedTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteEncodedTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteRawStrip.3tiff b/tiff/man/TIFFWriteRawStrip.3tiff
index 8d145a07..784a6e03 100644
--- a/tiff/man/TIFFWriteRawStrip.3tiff
+++ b/tiff/man/TIFFWriteRawStrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteRawStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteRawTile.3tiff b/tiff/man/TIFFWriteRawTile.3tiff
index 78b23ed7..f3334b85 100644
--- a/tiff/man/TIFFWriteRawTile.3tiff
+++ b/tiff/man/TIFFWriteRawTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteRawTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteScanline.3tiff b/tiff/man/TIFFWriteScanline.3tiff
index a2691b55..a51cec52 100644
--- a/tiff/man/TIFFWriteScanline.3tiff
+++ b/tiff/man/TIFFWriteScanline.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteScanline.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFWriteTile.3tiff b/tiff/man/TIFFWriteTile.3tiff
index 3755fc78..a6700258 100644
--- a/tiff/man/TIFFWriteTile.3tiff
+++ b/tiff/man/TIFFWriteTile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFWriteTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFbuffer.3tiff b/tiff/man/TIFFbuffer.3tiff
index edda2dbc..20111701 100644
--- a/tiff/man/TIFFbuffer.3tiff
+++ b/tiff/man/TIFFbuffer.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFbuffer.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1995 Sam Leffler
.\" Copyright (c) 1995 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFcodec.3tiff b/tiff/man/TIFFcodec.3tiff
index 6c480c49..aa3a8c63 100644
--- a/tiff/man/TIFFcodec.3tiff
+++ b/tiff/man/TIFFcodec.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFcodec.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $
.\"
.\" Copyright (c) 1995 Sam Leffler
.\" Copyright (c) 1995 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFcolor.3tiff b/tiff/man/TIFFcolor.3tiff
index 987ac9d6..1d2bb2b8 100644
--- a/tiff/man/TIFFcolor.3tiff
+++ b/tiff/man/TIFFcolor.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFcolor.3tiff,v 1.5 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 2003, Andrey Kiselev <dron@ak4719.spb.edu>
.\"
diff --git a/tiff/man/TIFFmemory.3tiff b/tiff/man/TIFFmemory.3tiff
index 6c4412dd..70a82123 100644
--- a/tiff/man/TIFFmemory.3tiff
+++ b/tiff/man/TIFFmemory.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFmemory.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1995 Sam Leffler
.\" Copyright (c) 1995 Silicon Graphics, Inc.
@@ -78,7 +77,7 @@ C routines:
.IR memcpy ,
and
.IR memcmp ,
-repsectively.
+respectively.
.SH DIAGNOSTICS
None.
.SH "SEE ALSO"
diff --git a/tiff/man/TIFFquery.3tiff b/tiff/man/TIFFquery.3tiff
index 8bddc889..4d95f5f4 100644
--- a/tiff/man/TIFFquery.3tiff
+++ b/tiff/man/TIFFquery.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFquery.3tiff,v 1.1 2004-11-11 14:39:16 dron Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -114,7 +113,7 @@ returned if the image data is organized in strips.
.IR TIFFIsByteSwapped
returns a non-zero value if the image data was in a different byte-order than
the host machine. Zero is returned if the TIFF file and local host byte-orders
-are the same. Note that TIFFReadTile(), TIFFReadStrip() and
+are the same. Note that TIFFReadTile(), TIFFReadEncodedStrip() and
TIFFReadScanline() functions already normally perform byte swapping to local
host order if needed.
.PP
diff --git a/tiff/man/TIFFsize.3tiff b/tiff/man/TIFFsize.3tiff
index 4b90a59b..5fbc6bc9 100644
--- a/tiff/man/TIFFsize.3tiff
+++ b/tiff/man/TIFFsize.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFsize.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFstrip.3tiff b/tiff/man/TIFFstrip.3tiff
index da59b0ef..eb38318f 100644
--- a/tiff/man/TIFFstrip.3tiff
+++ b/tiff/man/TIFFstrip.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFstrip.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1992-1997 Sam Leffler
.\" Copyright (c) 1992-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFswab.3tiff b/tiff/man/TIFFswab.3tiff
index 2294156f..3d7a47bc 100644
--- a/tiff/man/TIFFswab.3tiff
+++ b/tiff/man/TIFFswab.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFswab.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/TIFFtile.3tiff b/tiff/man/TIFFtile.3tiff
index 5bdbe551..10310a06 100644
--- a/tiff/man/TIFFtile.3tiff
+++ b/tiff/man/TIFFtile.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: TIFFtile.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/fax2ps.1 b/tiff/man/fax2ps.1
index f82e252b..7aeea4f9 100644
--- a/tiff/man/fax2ps.1
+++ b/tiff/man/fax2ps.1
@@ -1,4 +1,3 @@
-.\" $Id: fax2ps.1,v 1.5 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/fax2tiff.1 b/tiff/man/fax2tiff.1
index 7ce4ffe3..97144c9f 100644
--- a/tiff/man/fax2tiff.1
+++ b/tiff/man/fax2tiff.1
@@ -1,4 +1,3 @@
-.\" $Id: fax2tiff.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1990-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/libtiff.3tiff b/tiff/man/libtiff.3tiff
index 924d17a8..8e9ff35b 100644
--- a/tiff/man/libtiff.3tiff
+++ b/tiff/man/libtiff.3tiff
@@ -1,4 +1,3 @@
-.\" $Id: libtiff.3tiff,v 1.5 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -343,7 +342,7 @@ WhitePoint 318 R/W
XPosition 286 R/W
XResolution 282 R/W
YCbCrCoefficients 529 R/W used by TIFFRGBAImage support
-YCbCrPositioning 531 R/W tile/strip size calulcations
+YCbCrPositioning 531 R/W tile/strip size calculations
YCbCrSubsampling 530 R/W
YPosition 286 R/W
YResolution 283 R/W used by Group 3 codec
@@ -355,7 +354,7 @@ tags whose values lie in a range outside the valid range of
.SM TIFF
tags.
These tags are termed
-.I pseud-tags
+.I pseudo-tags
and are used to control various codec-specific functions within the library.
The table below summarizes the defined pseudo-tags.
.sp
@@ -409,7 +408,7 @@ The default value is a pointer to a builtin function that images
packed bilevel data.
.TP
.B TIFFTAG_IPTCNEWSPHOTO
-Tag contaings image metadata per the IPTC newsphoto spec: Headline,
+Tag contains image metadata per the IPTC newsphoto spec: Headline,
captioning, credit, etc... Used by most wire services.
.TP
.B TIFFTAG_PHOTOSHOP
diff --git a/tiff/man/pal2rgb.1 b/tiff/man/pal2rgb.1
index 428f93a8..772b4a7b 100644
--- a/tiff/man/pal2rgb.1
+++ b/tiff/man/pal2rgb.1
@@ -1,4 +1,3 @@
-.\" $Id: pal2rgb.1,v 1.4 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1990-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/ppm2tiff.1 b/tiff/man/ppm2tiff.1
index 2c940fb3..12e58e2c 100644
--- a/tiff/man/ppm2tiff.1
+++ b/tiff/man/ppm2tiff.1
@@ -1,4 +1,3 @@
-.\" $Id: ppm2tiff.1,v 1.6 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1991-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/raw2tiff.1 b/tiff/man/raw2tiff.1
index 184a5d10..f45569d4 100644
--- a/tiff/man/raw2tiff.1
+++ b/tiff/man/raw2tiff.1
@@ -1,4 +1,3 @@
-.\" $Id: raw2tiff.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1990-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiff2bw.1 b/tiff/man/tiff2bw.1
index 182ebbec..4fe9942f 100644
--- a/tiff/man/tiff2bw.1
+++ b/tiff/man/tiff2bw.1
@@ -1,4 +1,3 @@
-.\" $Id: tiff2bw.1,v 1.4 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiff2pdf.1 b/tiff/man/tiff2pdf.1
index de80599e..93011332 100644
--- a/tiff/man/tiff2pdf.1
+++ b/tiff/man/tiff2pdf.1
@@ -1,4 +1,3 @@
-.\" $Id: tiff2pdf.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 2003 Ross Finlayson
.\"
diff --git a/tiff/man/tiff2ps.1 b/tiff/man/tiff2ps.1
index e3b57ec5..5e2b9a85 100644
--- a/tiff/man/tiff2ps.1
+++ b/tiff/man/tiff2ps.1
@@ -1,4 +1,3 @@
-.\" $Id: tiff2ps.1,v 1.12 2016-09-25 20:05:51 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiff2rgba.1 b/tiff/man/tiff2rgba.1
index f0af0a1c..d9c9baae 100644
--- a/tiff/man/tiff2rgba.1
+++ b/tiff/man/tiff2rgba.1
@@ -1,4 +1,3 @@
-.\" $Id: tiff2rgba.1,v 1.5 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffcmp.1 b/tiff/man/tiffcmp.1
index 3d111a4d..ee83a742 100644
--- a/tiff/man/tiffcmp.1
+++ b/tiff/man/tiffcmp.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffcmp.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffcp.1 b/tiff/man/tiffcp.1
index fee46395..0545686c 100644
--- a/tiff/man/tiffcp.1
+++ b/tiff/man/tiffcp.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffcp.1,v 1.14 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffcrop.1 b/tiff/man/tiffcrop.1
index 3fa6bb67..5bd00976 100644
--- a/tiff/man/tiffcrop.1
+++ b/tiff/man/tiffcrop.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffcrop.1,v 1.8 2016-09-25 20:05:52 bfriesen Exp $
.\" tiffcrop -- a port of tiffcp.c extended to include extended processing of images
.\"
.\" Original code:
diff --git a/tiff/man/tiffdither.1 b/tiff/man/tiffdither.1
index d5214cee..56725b2b 100644
--- a/tiff/man/tiffdither.1
+++ b/tiff/man/tiffdither.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffdither.1,v 1.6 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1990-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffdump.1 b/tiff/man/tiffdump.1
index a5eeccda..07b08e3c 100644
--- a/tiff/man/tiffdump.1
+++ b/tiff/man/tiffdump.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffdump.1,v 1.6 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffgt.1 b/tiff/man/tiffgt.1
index 53031018..6ef6209f 100644
--- a/tiff/man/tiffgt.1
+++ b/tiff/man/tiffgt.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffgt.1,v 1.5 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffinfo.1 b/tiff/man/tiffinfo.1
index 89637bb2..64958a6c 100644
--- a/tiff/man/tiffinfo.1
+++ b/tiff/man/tiffinfo.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffinfo.1,v 1.3 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffmedian.1 b/tiff/man/tiffmedian.1
index 428ca9ad..b10ba798 100644
--- a/tiff/man/tiffmedian.1
+++ b/tiff/man/tiffmedian.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffmedian.1,v 1.4 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1990-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffset.1 b/tiff/man/tiffset.1
index d7c48fa5..513c7567 100644
--- a/tiff/man/tiffset.1
+++ b/tiff/man/tiffset.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffset.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1988-1997 Sam Leffler
.\" Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/man/tiffsplit.1 b/tiff/man/tiffsplit.1
index f01b3f46..fe309f42 100644
--- a/tiff/man/tiffsplit.1
+++ b/tiff/man/tiffsplit.1
@@ -1,4 +1,3 @@
-.\" $Id: tiffsplit.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $
.\"
.\" Copyright (c) 1992-1997 Sam Leffler
.\" Copyright (c) 1992-1997 Silicon Graphics, Inc.
diff --git a/tiff/nmake.opt b/tiff/nmake.opt
index ec45e779..ae544670 100644
--- a/tiff/nmake.opt
+++ b/tiff/nmake.opt
@@ -1,4 +1,3 @@
-# $Id: nmake.opt,v 1.20 2017-10-10 14:39:43 erouault Exp $
#
# Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
#
@@ -35,13 +34,6 @@
###### Edit the following lines to choose a feature set you need. #######
#
-#
-# Select WINMODE_CONSOLE to build a library which reports errors to stderr, or
-# WINMODE_WINDOWED to build such that errors are reported via MessageBox().
-#
-WINMODE_CONSOLE = 1
-#WINMODE_WINDOWED = 1
-
#
# Comment out the following lines to disable internal codecs.
#
@@ -160,13 +152,6 @@ DLLNAME = libtiff.dll
# Set the native cpu bit order
EXTRAFLAGS = -DFILLODER_LSB2MSB $(EXTRAFLAGS)
-!IFDEF WINMODE_WINDOWED
-EXTRAFLAGS = -DTIF_PLATFORM_WINDOWED $(EXTRAFLAGS)
-LIBS = user32.lib $(LIBS)
-!ELSE
-EXTRAFLAGS = -DTIF_PLATFORM_CONSOLE $(EXTRAFLAGS)
-!ENDIF
-
# Codec stuff
!IFDEF CCITT_SUPPORT
EXTRAFLAGS = -DCCITT_SUPPORT $(EXTRAFLAGS)
diff --git a/tiff/port/CMakeLists.txt b/tiff/port/CMakeLists.txt
index 8b221d1d..b7eb3a29 100644
--- a/tiff/port/CMakeLists.txt
+++ b/tiff/port/CMakeLists.txt
@@ -28,6 +28,8 @@ set(port_optional_SOURCES
getopt.c
lfind.c
strcasecmp.c
+ strtol.c
+ strtoll.c
strtoul.c
strtoull.c)
@@ -45,6 +47,12 @@ endif()
if(NOT HAVE_STRCASECMP)
list(APPEND port_USED_FILES strcasecmp.c)
endif()
+if(NOT HAVE_STRTOL)
+ list(APPEND port_USED_FILES strtol.c)
+endif()
+if(NOT HAVE_STRTOLL)
+ list(APPEND port_USED_FILES strtoll.c)
+endif()
if(NOT HAVE_STRTOUL)
list(APPEND port_USED_FILES strtoul.c)
endif()
diff --git a/tiff/port/Makefile.am b/tiff/port/Makefile.am
index 4d6e11d0..250479fe 100644
--- a/tiff/port/Makefile.am
+++ b/tiff/port/Makefile.am
@@ -27,7 +27,9 @@ EXTRA_DIST = \
CMakeLists.txt \
Makefile.vc \
libport.h \
- snprintf.c
+ snprintf.c \
+ _strtol.h \
+ _strtoul.h
noinst_LTLIBRARIES = libport.la
libport_la_SOURCES = dummy.c libport.h
diff --git a/tiff/port/Makefile.in b/tiff/port/Makefile.in
index 55e09e6e..72e192b0 100644
--- a/tiff/port/Makefile.in
+++ b/tiff/port/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -122,7 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -149,7 +149,12 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = $(DEPDIR)/getopt.Plo $(DEPDIR)/lfind.Plo \
+ $(DEPDIR)/snprintf.Plo $(DEPDIR)/strcasecmp.Plo \
+ $(DEPDIR)/strtol.Plo $(DEPDIR)/strtoll.Plo \
+ $(DEPDIR)/strtoul.Plo $(DEPDIR)/strtoull.Plo \
+ ./$(DEPDIR)/dummy.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -196,8 +201,8 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs getopt.c lfind.c snprintf.c \
- strcasecmp.c strtoul.c strtoull.c
+ getopt.c lfind.c snprintf.c strcasecmp.c strtol.c strtoll.c \
+ strtoul.c strtoull.c
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -351,7 +356,9 @@ EXTRA_DIST = \
CMakeLists.txt \
Makefile.vc \
libport.h \
- snprintf.c
+ snprintf.c \
+ _strtol.h \
+ _strtoul.h
noinst_LTLIBRARIES = libport.la
libport_la_SOURCES = dummy.c libport.h
@@ -377,8 +384,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -410,13 +417,21 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lfind.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoull.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lfind.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtol.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoll.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoull.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -497,7 +512,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -567,7 +585,15 @@ clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
- -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f $(DEPDIR)/getopt.Plo
+ -rm -f $(DEPDIR)/lfind.Plo
+ -rm -f $(DEPDIR)/snprintf.Plo
+ -rm -f $(DEPDIR)/strcasecmp.Plo
+ -rm -f $(DEPDIR)/strtol.Plo
+ -rm -f $(DEPDIR)/strtoll.Plo
+ -rm -f $(DEPDIR)/strtoul.Plo
+ -rm -f $(DEPDIR)/strtoull.Plo
+ -rm -f ./$(DEPDIR)/dummy.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -613,7 +639,15 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f $(DEPDIR)/getopt.Plo
+ -rm -f $(DEPDIR)/lfind.Plo
+ -rm -f $(DEPDIR)/snprintf.Plo
+ -rm -f $(DEPDIR)/strcasecmp.Plo
+ -rm -f $(DEPDIR)/strtol.Plo
+ -rm -f $(DEPDIR)/strtoll.Plo
+ -rm -f $(DEPDIR)/strtoul.Plo
+ -rm -f $(DEPDIR)/strtoull.Plo
+ -rm -f ./$(DEPDIR)/dummy.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -634,16 +668,16 @@ uninstall-am:
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
- ctags-am 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-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 \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am 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-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 mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
diff --git a/tiff/port/Makefile.vc b/tiff/port/Makefile.vc
index bde48048..992d2696 100644
--- a/tiff/port/Makefile.vc
+++ b/tiff/port/Makefile.vc
@@ -1,4 +1,3 @@
-# $Id: Makefile.vc,v 1.5 2015-08-19 02:31:04 bfriesen Exp $
#
# Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
#
diff --git a/tiff/port/_strtol.h b/tiff/port/_strtol.h
new file mode 100644
index 00000000..73a10063
--- /dev/null
+++ b/tiff/port/_strtol.h
@@ -0,0 +1,160 @@
+/* $NetBSD: _strtol.h,v 1.11 2017/07/06 21:08:44 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Original version ID:
+ * NetBSD: src/lib/libc/locale/_wcstol.h,v 1.2 2003/08/07 16:43:03 agc Exp
+ */
+
+#include <assert.h>
+
+/*
+ * function template for strtol, strtoll and strtoimax.
+ *
+ * parameters:
+ * _FUNCNAME : function name
+ * __INT : return type
+ * __INT_MIN : lower limit of the return type
+ * __INT_MAX : upper limit of the return type
+ */
+__INT
+_FUNCNAME(const char *nptr, char **endptr, int base)
+{
+ const char *s;
+ __INT acc, cutoff;
+ unsigned char c;
+ int i, neg, any, cutlim;
+
+ assert(nptr != NULL);
+ /* endptr may be NULL */
+
+ /* check base value */
+ if (base && (base < 2 || base > 36)) {
+ errno = EINVAL;
+ if (endptr != NULL)
+ /* LINTED interface specification */
+ *endptr = (char *)(nptr);
+ return 0;
+ }
+
+ /*
+ * Skip white space and pick up leading +/- sign if any.
+ * If base is 0, allow 0x for hex and 0 for octal, else
+ * assume decimal; if base is already 16, allow 0x.
+ */
+ s = nptr;
+ do {
+ c = *s++;
+ } while (isspace(c));
+ if (c == '-') {
+ neg = 1;
+ c = *s++;
+ } else {
+ neg = 0;
+ if (c == '+')
+ c = *s++;
+ }
+ if ((base == 0 || base == 16) &&
+ c == '0' && (*s == 'x' || *s == 'X') &&
+ ((s[1] >= '0' && s[1] <= '9') ||
+ (s[1] >= 'a' && s[1] <= 'f') ||
+ (s[1] >= 'A' && s[1] <= 'F'))) {
+ c = s[1];
+ s += 2;
+ base = 16;
+ } else if (base == 0)
+ base = (c == '0' ? 8 : 10);
+
+ /*
+ * Compute the cutoff value between legal numbers and illegal
+ * numbers. That is the largest legal value, divided by the
+ * base. An input number that is greater than this value, if
+ * followed by a legal input character, is too big. One that
+ * is equal to this value may be valid or not; the limit
+ * between valid and invalid numbers is then based on the last
+ * digit. For instance, if the range for longs is
+ * [-2147483648..2147483647] and the input base is 10,
+ * cutoff will be set to 214748364 and cutlim to either
+ * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
+ * a value > 214748364, or equal but the next digit is > 7 (or 8),
+ * the number is too big, and we will return a range error.
+ *
+ * Set any if any `digits' consumed; make it negative to indicate
+ * overflow.
+ */
+ cutoff = (__INT)(neg ? __INT_MIN : __INT_MAX);
+ cutlim = (int)(cutoff % base);
+ cutoff /= base;
+ if (neg) {
+ if (cutlim > 0) {
+ cutlim -= base;
+ cutoff += 1;
+ }
+ cutlim = -cutlim;
+ }
+ for (acc = 0, any = 0;; c = *s++) {
+ if (c >= '0' && c <= '9')
+ i = c - '0';
+ else if (c >= 'a' && c <= 'z')
+ i = (c - 'a') + 10;
+ else if (c >= 'A' && c <= 'Z')
+ i = (c - 'A') + 10;
+ else
+ break;
+ if (i >= base)
+ break;
+ if (any < 0)
+ continue;
+ if (neg) {
+ if (acc < cutoff || (acc == cutoff && i > cutlim)) {
+ acc = __INT_MIN;
+ any = -1;
+ errno = ERANGE;
+ } else {
+ any = 1;
+ acc *= base;
+ acc -= i;
+ }
+ } else {
+ if (acc > cutoff || (acc == cutoff && i > cutlim)) {
+ acc = __INT_MAX;
+ any = -1;
+ errno = ERANGE;
+ } else {
+ any = 1;
+ acc *= base;
+ acc += i;
+ }
+ }
+ }
+ if (endptr != NULL)
+ /* LINTED interface specification */
+ *endptr = (char *)(any ? s - 1 : nptr);
+ return(acc);
+}
diff --git a/tiff/port/_strtoul.h b/tiff/port/_strtoul.h
new file mode 100644
index 00000000..5cb62168
--- /dev/null
+++ b/tiff/port/_strtoul.h
@@ -0,0 +1,127 @@
+/* $NetBSD: _strtoul.h,v 1.11 2017/07/06 21:08:44 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Original version ID:
+ * NetBSD: src/lib/libc/locale/_wcstoul.h,v 1.2 2003/08/07 16:43:03 agc Exp
+ */
+
+#include <assert.h>
+
+/*
+ * function template for strtoul, strtoull and strtoumax.
+ *
+ * parameters:
+ * _FUNCNAME : function name
+ * __UINT : return type
+ * __UINT_MAX : upper limit of the return type
+ */
+__UINT
+_FUNCNAME(const char *nptr, char **endptr, int base)
+{
+ const char *s;
+ __UINT acc, cutoff;
+ unsigned char c;
+ int i, neg, any, cutlim;
+
+ assert(nptr != NULL);
+ /* endptr may be NULL */
+
+ /* check base value */
+ if (base && (base < 2 || base > 36)) {
+ errno = EINVAL;
+ if (endptr != NULL)
+ /* LINTED interface specification */
+ *endptr = (char *)(nptr);
+ return 0;
+ }
+
+ /*
+ * Skip white space and pick up leading +/- sign if any.
+ * If base is 0, allow 0x for hex and 0 for octal, else
+ * assume decimal; if base is already 16, allow 0x.
+ */
+ s = nptr;
+ do {
+ c = *s++;
+ } while (isspace(c));
+ if (c == '-') {
+ neg = 1;
+ c = *s++;
+ } else {
+ neg = 0;
+ if (c == '+')
+ c = *s++;
+ }
+ if ((base == 0 || base == 16) &&
+ c == '0' && (*s == 'x' || *s == 'X') &&
+ ((s[1] >= '0' && s[1] <= '9') ||
+ (s[1] >= 'a' && s[1] <= 'f') ||
+ (s[1] >= 'A' && s[1] <= 'F'))) {
+ c = s[1];
+ s += 2;
+ base = 16;
+ } else if (base == 0)
+ base = (c == '0' ? 8 : 10);
+
+ /*
+ * See strtol for comments as to the logic used.
+ */
+ cutoff = ((__UINT)__UINT_MAX / (__UINT)base);
+ cutlim = (int)((__UINT)__UINT_MAX % (__UINT)base);
+ for (acc = 0, any = 0;; c = *s++) {
+ if (c >= '0' && c <= '9')
+ i = c - '0';
+ else if (c >= 'a' && c <= 'z')
+ i = (c - 'a') + 10;
+ else if (c >= 'A' && c <= 'Z')
+ i = (c - 'A') + 10;
+ else
+ break;
+ if (i >= base)
+ break;
+ if (any < 0)
+ continue;
+ if (acc > cutoff || (acc == cutoff && i > cutlim)) {
+ acc = __UINT_MAX;
+ any = -1;
+ errno = ERANGE;
+ } else {
+ any = 1;
+ acc *= (__UINT)base;
+ acc += i;
+ }
+ }
+ if (neg && any > 0)
+ acc = -acc;
+ if (endptr != NULL)
+ /* LINTED interface specification */
+ *endptr = (char *)(any ? s - 1 : nptr);
+ return(acc);
+}
diff --git a/tiff/port/dummy.c b/tiff/port/dummy.c
index 46f93bcc..346a07ee 100644
--- a/tiff/port/dummy.c
+++ b/tiff/port/dummy.c
@@ -1,5 +1,3 @@
-/* $Id: dummy.c,v 1.3 2007/03/21 14:54:16 dron Exp $ */
-
/*
* Dummy function, just to be ensure that the library always will be created.
*/
diff --git a/tiff/port/getopt.c b/tiff/port/getopt.c
index 6eff8ee5..c7bdb116 100644
--- a/tiff/port/getopt.c
+++ b/tiff/port/getopt.c
@@ -1,5 +1,3 @@
-/* $Id: getopt.c,v 1.3 2009-01-22 20:53:07 fwarmerdam Exp $ */
-
/*
* Copyright (c) 1987, 1993, 1994
* The Regents of the University of California. All rights reserved.
diff --git a/tiff/port/lfind.c b/tiff/port/lfind.c
index 64b261ca..00ab6495 100644
--- a/tiff/port/lfind.c
+++ b/tiff/port/lfind.c
@@ -1,5 +1,3 @@
-/* $Id: lfind.c,v 1.4 2007/01/15 18:40:39 mloskot Exp $ */
-
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
diff --git a/tiff/port/libport.h b/tiff/port/libport.h
index d9b04215..ff262638 100644
--- a/tiff/port/libport.h
+++ b/tiff/port/libport.h
@@ -1,5 +1,3 @@
-/* $Id: libport.h,v 1.5 2015-08-19 02:31:04 bfriesen Exp $ */
-
/*
* Copyright (c) 2009 Frank Warmerdam
*
@@ -38,9 +36,18 @@ int strcasecmp(const char *s1, const char *s2);
# define HAVE_GETOPT 1
#endif
-#if 0
+#if HAVE_STRTOL
+long strtol(const char *nptr, char **endptr, int base);
+#endif
+#if HAVE_STRTOLL
+long long strtoll(const char *nptr, char **endptr, int base);
+#endif
+#if HAVE_STRTOUL
unsigned long strtoul(const char *nptr, char **endptr, int base);
#endif
+#if HAVE_STRTOULL
+unsigned long long strtoull(const char *nptr, char **endptr, int base);
+#endif
#if 0
void *
diff --git a/tiff/port/snprintf.c b/tiff/port/snprintf.c
index 1c4ac087..3542ab75 100644
--- a/tiff/port/snprintf.c
+++ b/tiff/port/snprintf.c
@@ -16,7 +16,11 @@ int _TIFF_vsnprintf_f(char* str, size_t size, const char* format, va_list ap)
int count = -1;
if (size != 0)
+#if _MSC_VER <= 1310
+ count = _vsnprintf(str, size, format, ap);
+#else
count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
+#endif
if (count == -1)
count = _vscprintf(format, ap);
diff --git a/tiff/port/strcasecmp.c b/tiff/port/strcasecmp.c
index de7e4232..65e2b411 100644
--- a/tiff/port/strcasecmp.c
+++ b/tiff/port/strcasecmp.c
@@ -1,5 +1,3 @@
-/* $Id: strcasecmp.c,v 1.4 2015-06-21 01:09:09 bfriesen Exp $ */
-
/*
* Copyright (c) 1987, 1993
* The Regents of the University of California. All rights reserved.
diff --git a/tiff/port/strtol.c b/tiff/port/strtol.c
new file mode 100644
index 00000000..a355dde9
--- /dev/null
+++ b/tiff/port/strtol.c
@@ -0,0 +1,45 @@
+/* $NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $ */
+
+/*-
+ * Copyright (c) 2005 The DragonFly Project. All rights reserved.
+ * Copyright (c) 2003 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if 0
+__RCSID("$NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $");
+#endif
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#define _FUNCNAME strtol
+#define __INT long
+#define __INT_MIN LONG_MIN
+#define __INT_MAX LONG_MAX
+
+#include "_strtol.h"
diff --git a/tiff/port/strtoll.c b/tiff/port/strtoll.c
new file mode 100644
index 00000000..4784b098
--- /dev/null
+++ b/tiff/port/strtoll.c
@@ -0,0 +1,44 @@
+/* $NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $ */
+
+/*-
+ * Copyright (c) 2005 The DragonFly Project. All rights reserved.
+ * Copyright (c) 2003 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if 0
+__RCSID("$NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $");
+#endif
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+
+#define _FUNCNAME strtoll
+#define __INT long long
+#define __INT_MIN LLONG_MIN
+#define __INT_MAX LLONG_MAX
+
+#include "_strtol.h"
diff --git a/tiff/port/strtoul.c b/tiff/port/strtoul.c
index f7a9a1a5..dbd44f16 100644
--- a/tiff/port/strtoul.c
+++ b/tiff/port/strtoul.c
@@ -1,8 +1,9 @@
-/* $Id: strtoul.c,v 1.2 2005/07/07 16:34:06 dron Exp $ */
+/* $NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $ */
-/*
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
+/*-
+ * Copyright (c) 2005 The DragonFly Project. All rights reserved.
+ * Copyright (c) 2003 Citrus Project,
+ * All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -12,14 +13,11 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
@@ -30,80 +28,17 @@
*/
#if 0
-static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
-__RCSID("$NetBSD: strtoul.c,v 1.16 2003/08/07 16:43:45 agc Exp $");
+__RCSID("$NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $");
#endif
+#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
-/*
- * Convert a string to an unsigned long integer.
- *
- * Ignores `locale' stuff. Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-unsigned long
-strtoul(const char *nptr, char **endptr, int base)
-{
- const char *s;
- unsigned long acc, cutoff;
- int c;
- int neg, any, cutlim;
-
- /*
- * See strtol for comments as to the logic used.
- */
- s = nptr;
- do {
- c = (unsigned char) *s++;
- } while (isspace(c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else {
- neg = 0;
- if (c == '+')
- c = *s++;
- }
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X')) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
+#define _FUNCNAME strtoul
+#define __UINT unsigned long int
+#define __UINT_MAX ULONG_MAX
- cutoff = ULONG_MAX / (unsigned long)base;
- cutlim = (int)(ULONG_MAX % (unsigned long)base);
- for (acc = 0, any = 0;; c = (unsigned char) *s++) {
- if (isdigit(c))
- c -= '0';
- else if (isalpha(c))
- c -= isupper(c) ? 'A' - 10 : 'a' - 10;
- else
- break;
- if (c >= base)
- break;
- if (any < 0)
- continue;
- if (acc > cutoff || (acc == cutoff && c > cutlim)) {
- any = -1;
- acc = ULONG_MAX;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= (unsigned long)base;
- acc += c;
- }
- }
- if (neg && any > 0)
- acc = -acc;
- if (endptr != 0)
- /* LINTED interface specification */
- *endptr = (char *)(any ? s - 1 : nptr);
- return (acc);
-}
+#include "_strtoul.h"
diff --git a/tiff/port/strtoull.c b/tiff/port/strtoull.c
index fb7739cc..91e4ddfb 100644
--- a/tiff/port/strtoull.c
+++ b/tiff/port/strtoull.c
@@ -1,6 +1,9 @@
+/* $NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $ */
+
/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
+ * Copyright (c) 2005 The DragonFly Project. All rights reserved.
+ * Copyright (c) 2003 Citrus Project,
+ * All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,18 +13,11 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
@@ -31,86 +27,18 @@
* SUCH DAMAGE.
*/
-#include <limits.h>
-#include <errno.h>
+#if 0
+__RCSID("$NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $");
+#endif
+
+#include <assert.h>
#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
#include <stdlib.h>
-/*
- * Convert a string to an unsigned long long integer.
- *
- * Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-unsigned long long
-strtoull(const char *nptr, char **endptr, int base)
-{
- const char *s;
- unsigned long long acc;
- char c;
- unsigned long long cutoff;
- int neg, any, cutlim;
-
- /*
- * See strtoq for comments as to the logic used.
- */
- s = nptr;
- do {
- c = *s++;
- } while (isspace((unsigned char)c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else {
- neg = 0;
- if (c == '+')
- c = *s++;
- }
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X') &&
- ((s[1] >= '0' && s[1] <= '9') ||
- (s[1] >= 'A' && s[1] <= 'F') ||
- (s[1] >= 'a' && s[1] <= 'f'))) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
- acc = any = 0;
- if (base < 2 || base > 36)
- goto noconv;
+#define _FUNCNAME strtoull
+#define __UINT unsigned long long int
+#define __UINT_MAX ULLONG_MAX
- cutoff = ULLONG_MAX / base;
- cutlim = ULLONG_MAX % base;
- for ( ; ; c = *s++) {
- if (c >= '0' && c <= '9')
- c -= '0';
- else if (c >= 'A' && c <= 'Z')
- c -= 'A' - 10;
- else if (c >= 'a' && c <= 'z')
- c -= 'a' - 10;
- else
- break;
- if (c >= base)
- break;
- if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
- any = -1;
- else {
- any = 1;
- acc *= base;
- acc += c;
- }
- }
- if (any < 0) {
- acc = ULLONG_MAX;
- errno = ERANGE;
- } else if (!any) {
-noconv:
- errno = EINVAL;
- } else if (neg)
- acc = -acc;
- if (endptr != NULL)
- *endptr = (char *)(any ? s - 1 : nptr);
- return (acc);
-}
+#include "_strtoul.h"
diff --git a/tiff/test/CMakeLists.txt b/tiff/test/CMakeLists.txt
index 912be19c..a4216d56 100644
--- a/tiff/test/CMakeLists.txt
+++ b/tiff/test/CMakeLists.txt
@@ -35,6 +35,7 @@ set(TESTSCRIPTS
ppm2tiff_pbm.sh
ppm2tiff_pgm.sh
ppm2tiff_ppm.sh
+ fax2tiff.sh
tiffcp-g3.sh
tiffcp-g3-1d.sh
tiffcp-g3-1d-fill.sh
@@ -44,6 +45,7 @@ set(TESTSCRIPTS
tiffcp-logluv.sh
tiffcp-thumbnail.sh
tiffcp-lzw-compat.sh
+ tiffcp-lzw-scanline-decode.sh
tiffdump.sh
tiffinfo.sh
tiffcp-split.sh
@@ -120,7 +122,8 @@ set(TIFFIMAGES
images/rgb-3c-16b.tiff
images/rgb-3c-8b.tiff
images/quad-tile.jpg.tiff
- images/quad-lzw-compat.tiff)
+ images/quad-lzw-compat.tiff
+ images/lzw-single-strip.tiff)
set(BMPIMAGES
images/palette-1c-8b.bmp
@@ -149,6 +152,7 @@ set(UNCOMPRESSEDIMAGES
# files which are not currently used by the tests.
set(IMAGES_EXTRA_DIST
images/README.txt
+ images/miniswhite-1c-1b.g3
${BMPIMAGES}
${GIFIMAGES}
${PNMIMAGES}
@@ -184,6 +188,15 @@ endif()
add_executable(custom_dir custom_dir.c)
target_link_libraries(custom_dir tiff port)
+add_executable(defer_strile_loading defer_strile_loading.c)
+target_link_libraries(defer_strile_loading tiff port)
+
+add_executable(defer_strile_writing defer_strile_writing.c)
+target_link_libraries(defer_strile_writing tiff port)
+
+add_executable(testtypes testtypes.c)
+target_link_libraries(testtypes tiff port)
+
set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output")
file(MAKE_DIRECTORY "${TEST_OUTPUT}")
@@ -335,6 +348,7 @@ add_convert_test(tiffcp g32d "-c g3:2d" "images/miniswhite-1c-1b.ti
add_convert_test(tiffcp g32dfill "-c g3:2d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
add_convert_test(tiffcp g4 "-c g4" "images/miniswhite-1c-1b.tiff" FALSE)
add_convert_test(tiffcp none "-c none" "images/quad-lzw-compat.tiff" FALSE)
+add_convert_test(tiffcp noner1 "-c none -r 1" "images/lzw-single-strip.tiff" FALSE)
add_convert_test_multi(tiffcp tiffcp "" logluv "-c none" "-c sgilog" ""
"images/logluv-3c-16b.tiff" FALSE)
add_convert_test_multi(tiffcp thumbnail "" thumbnail "g3:1d" "" ""
@@ -380,3 +394,7 @@ add_convert_tests(tiffcrop doubleflip "-F both" TIFFIMAGES TRU
add_convert_tests(tiffcrop extract "-U px -E top -X 60 -Y 60" TIFFIMAGES TRUE)
# Test extracting the first and fourth quarters from the left side.
add_convert_tests(tiffcrop extractz14 "-E left -Z1:4,2:4" TIFFIMAGES TRUE)
+
+# test types
+add_test(NAME "testtypes"
+ COMMAND "testtypes")
diff --git a/tiff/test/Makefile.am b/tiff/test/Makefile.am
index 2052487c..90c2f3d1 100644
--- a/tiff/test/Makefile.am
+++ b/tiff/test/Makefile.am
@@ -34,6 +34,7 @@ TESTS_ENVIRONMENT = \
MEMCHECK="$(MEMCHECK)"
EXTRA_DIST = \
+ $(REFFILES) \
$(TESTSCRIPTS) \
$(IMAGES_EXTRA_DIST) \
CMakeLists.txt \
@@ -63,6 +64,7 @@ endif
# Executable programs which need to be built in order to support tests
check_PROGRAMS = \
ascii_tag long_tag short_tag strip_rw rewrite custom_dir \
+ defer_strile_loading defer_strile_writing testtypes \
$(JPEG_DEPENDENT_CHECK_PROG)
# Test scripts to execute
@@ -70,6 +72,7 @@ TESTSCRIPTS = \
ppm2tiff_pbm.sh \
ppm2tiff_pgm.sh \
ppm2tiff_ppm.sh \
+ fax2tiff.sh \
tiffcp-g3.sh \
tiffcp-g3-1d.sh \
tiffcp-g3-1d-fill.sh \
@@ -79,6 +82,7 @@ TESTSCRIPTS = \
tiffcp-logluv.sh \
tiffcp-thumbnail.sh \
tiffcp-lzw-compat.sh \
+ tiffcp-lzw-scanline-decode.sh \
tiffdump.sh \
tiffinfo.sh \
tiffcp-split.sh \
@@ -143,6 +147,14 @@ TESTSCRIPTS = \
tiff2rgba-rgb-3c-8b.sh \
$(JPEG_DEPENDENT_TESTSCRIPTS)
+# This list should contain the references files
+# from the 'refs' subdirectory
+REFFILES = \
+ refs/o-tiff2ps-EPS1.ps \
+ refs/o-tiff2ps-PS1.ps \
+ refs/o-tiff2ps-PS2.ps \
+ refs/o-tiff2ps-PS3.ps
+
# This list should contain all of the TIFF files in the 'images'
# subdirectory which are intended to be used as input images for
# tests. All of these files should use the extension ".tiff".
@@ -158,7 +170,8 @@ TIFFIMAGES = \
images/rgb-3c-16b.tiff \
images/rgb-3c-8b.tiff \
images/quad-tile.jpg.tiff \
- images/quad-lzw-compat.tiff
+ images/quad-lzw-compat.tiff \
+ images/lzw-single-strip.tiff
PNMIMAGES = \
images/minisblack-1c-8b.pgm \
@@ -170,6 +183,7 @@ PNMIMAGES = \
# files which are not currently used by the tests.
IMAGES_EXTRA_DIST = \
images/README.txt \
+ images/miniswhite-1c-1b.g3 \
$(PNMIMAGES) \
$(TIFFIMAGES)
@@ -189,6 +203,10 @@ raw_decode_SOURCES = raw_decode.c
raw_decode_LDADD = $(LIBTIFF)
custom_dir_SOURCES = custom_dir.c
custom_dir_LDADD = $(LIBTIFF)
+defer_strile_loading_SOURCES = defer_strile_loading.c
+defer_strile_loading_LDADD = $(LIBTIFF)
+defer_strile_writing_SOURCES = defer_strile_writing.c
+defer_strile_writing_LDADD = $(LIBTIFF)
AM_CPPFLAGS = -I$(top_srcdir)/libtiff
diff --git a/tiff/test/Makefile.in b/tiff/test/Makefile.in
index 15c0147b..5a2f0607 100644
--- a/tiff/test/Makefile.in
+++ b/tiff/test/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -117,7 +117,9 @@ TESTS = $(check_PROGRAMS) $(am__EXEEXT_3)
XFAIL_TESTS =
check_PROGRAMS = ascii_tag$(EXEEXT) long_tag$(EXEEXT) \
short_tag$(EXEEXT) strip_rw$(EXEEXT) rewrite$(EXEEXT) \
- custom_dir$(EXEEXT) $(am__EXEEXT_1)
+ custom_dir$(EXEEXT) defer_strile_loading$(EXEEXT) \
+ defer_strile_writing$(EXEEXT) testtypes$(EXEEXT) \
+ $(am__EXEEXT_1)
subdir = test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
@@ -128,7 +130,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -144,6 +146,12 @@ am__v_lt_1 =
am_custom_dir_OBJECTS = custom_dir.$(OBJEXT)
custom_dir_OBJECTS = $(am_custom_dir_OBJECTS)
custom_dir_DEPENDENCIES = $(LIBTIFF)
+am_defer_strile_loading_OBJECTS = defer_strile_loading.$(OBJEXT)
+defer_strile_loading_OBJECTS = $(am_defer_strile_loading_OBJECTS)
+defer_strile_loading_DEPENDENCIES = $(LIBTIFF)
+am_defer_strile_writing_OBJECTS = defer_strile_writing.$(OBJEXT)
+defer_strile_writing_OBJECTS = $(am_defer_strile_writing_OBJECTS)
+defer_strile_writing_DEPENDENCIES = $(LIBTIFF)
am_long_tag_OBJECTS = long_tag.$(OBJEXT) check_tag.$(OBJEXT)
long_tag_OBJECTS = $(am_long_tag_OBJECTS)
long_tag_DEPENDENCIES = $(LIBTIFF)
@@ -160,6 +168,9 @@ am_strip_rw_OBJECTS = strip_rw.$(OBJEXT) strip.$(OBJEXT) \
test_arrays.$(OBJEXT)
strip_rw_OBJECTS = $(am_strip_rw_OBJECTS)
strip_rw_DEPENDENCIES = $(LIBTIFF)
+testtypes_SOURCES = testtypes.c
+testtypes_OBJECTS = testtypes.$(OBJEXT)
+testtypes_LDADD = $(LDADD)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -174,7 +185,15 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/ascii_tag.Po \
+ ./$(DEPDIR)/check_tag.Po ./$(DEPDIR)/custom_dir.Po \
+ ./$(DEPDIR)/defer_strile_loading.Po \
+ ./$(DEPDIR)/defer_strile_writing.Po ./$(DEPDIR)/long_tag.Po \
+ ./$(DEPDIR)/raw_decode.Po ./$(DEPDIR)/rewrite_tag.Po \
+ ./$(DEPDIR)/short_tag.Po ./$(DEPDIR)/strip.Po \
+ ./$(DEPDIR)/strip_rw.Po ./$(DEPDIR)/test_arrays.Po \
+ ./$(DEPDIR)/testtypes.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -195,11 +214,15 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(ascii_tag_SOURCES) $(custom_dir_SOURCES) \
- $(long_tag_SOURCES) $(raw_decode_SOURCES) $(rewrite_SOURCES) \
- $(short_tag_SOURCES) $(strip_rw_SOURCES)
+ $(defer_strile_loading_SOURCES) \
+ $(defer_strile_writing_SOURCES) $(long_tag_SOURCES) \
+ $(raw_decode_SOURCES) $(rewrite_SOURCES) $(short_tag_SOURCES) \
+ $(strip_rw_SOURCES) testtypes.c
DIST_SOURCES = $(ascii_tag_SOURCES) $(custom_dir_SOURCES) \
- $(long_tag_SOURCES) $(raw_decode_SOURCES) $(rewrite_SOURCES) \
- $(short_tag_SOURCES) $(strip_rw_SOURCES)
+ $(defer_strile_loading_SOURCES) \
+ $(defer_strile_writing_SOURCES) $(long_tag_SOURCES) \
+ $(raw_decode_SOURCES) $(rewrite_SOURCES) $(short_tag_SOURCES) \
+ $(strip_rw_SOURCES) testtypes.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -411,12 +434,13 @@ RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
@HAVE_JPEG_TRUE@am__EXEEXT_2 = tiff2rgba-quad-tile.jpg.sh
am__EXEEXT_3 = ppm2tiff_pbm.sh ppm2tiff_pgm.sh ppm2tiff_ppm.sh \
- tiffcp-g3.sh tiffcp-g3-1d.sh tiffcp-g3-1d-fill.sh \
+ fax2tiff.sh tiffcp-g3.sh tiffcp-g3-1d.sh tiffcp-g3-1d-fill.sh \
tiffcp-g3-2d.sh tiffcp-g3-2d-fill.sh tiffcp-g4.sh \
tiffcp-logluv.sh tiffcp-thumbnail.sh tiffcp-lzw-compat.sh \
- tiffdump.sh tiffinfo.sh tiffcp-split.sh tiffcp-split-join.sh \
- tiff2ps-PS1.sh tiff2ps-PS2.sh tiff2ps-PS3.sh tiff2ps-EPS1.sh \
- tiff2pdf.sh tiffcrop-doubleflip-logluv-3c-16b.sh \
+ tiffcp-lzw-scanline-decode.sh tiffdump.sh tiffinfo.sh \
+ tiffcp-split.sh tiffcp-split-join.sh tiff2ps-PS1.sh \
+ tiff2ps-PS2.sh tiff2ps-PS3.sh tiff2ps-EPS1.sh tiff2pdf.sh \
+ tiffcrop-doubleflip-logluv-3c-16b.sh \
tiffcrop-doubleflip-minisblack-1c-16b.sh \
tiffcrop-doubleflip-minisblack-1c-8b.sh \
tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh \
@@ -479,7 +503,6 @@ TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs \
$(top_srcdir)/config/test-driver
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -640,6 +663,7 @@ TESTS_ENVIRONMENT = \
MEMCHECK="$(MEMCHECK)"
EXTRA_DIST = \
+ $(REFFILES) \
$(TESTSCRIPTS) \
$(IMAGES_EXTRA_DIST) \
CMakeLists.txt \
@@ -663,6 +687,7 @@ TESTSCRIPTS = \
ppm2tiff_pbm.sh \
ppm2tiff_pgm.sh \
ppm2tiff_ppm.sh \
+ fax2tiff.sh \
tiffcp-g3.sh \
tiffcp-g3-1d.sh \
tiffcp-g3-1d-fill.sh \
@@ -672,6 +697,7 @@ TESTSCRIPTS = \
tiffcp-logluv.sh \
tiffcp-thumbnail.sh \
tiffcp-lzw-compat.sh \
+ tiffcp-lzw-scanline-decode.sh \
tiffdump.sh \
tiffinfo.sh \
tiffcp-split.sh \
@@ -737,6 +763,15 @@ TESTSCRIPTS = \
$(JPEG_DEPENDENT_TESTSCRIPTS)
+# This list should contain the references files
+# from the 'refs' subdirectory
+REFFILES = \
+ refs/o-tiff2ps-EPS1.ps \
+ refs/o-tiff2ps-PS1.ps \
+ refs/o-tiff2ps-PS2.ps \
+ refs/o-tiff2ps-PS3.ps
+
+
# This list should contain all of the TIFF files in the 'images'
# subdirectory which are intended to be used as input images for
# tests. All of these files should use the extension ".tiff".
@@ -752,7 +787,8 @@ TIFFIMAGES = \
images/rgb-3c-16b.tiff \
images/rgb-3c-8b.tiff \
images/quad-tile.jpg.tiff \
- images/quad-lzw-compat.tiff
+ images/quad-lzw-compat.tiff \
+ images/lzw-single-strip.tiff
PNMIMAGES = \
images/minisblack-1c-8b.pgm \
@@ -765,6 +801,7 @@ PNMIMAGES = \
# files which are not currently used by the tests.
IMAGES_EXTRA_DIST = \
images/README.txt \
+ images/miniswhite-1c-1b.g3 \
$(PNMIMAGES) \
$(TIFFIMAGES)
@@ -783,6 +820,10 @@ raw_decode_SOURCES = raw_decode.c
raw_decode_LDADD = $(LIBTIFF)
custom_dir_SOURCES = custom_dir.c
custom_dir_LDADD = $(LIBTIFF)
+defer_strile_loading_SOURCES = defer_strile_loading.c
+defer_strile_loading_LDADD = $(LIBTIFF)
+defer_strile_writing_SOURCES = defer_strile_writing.c
+defer_strile_writing_LDADD = $(LIBTIFF)
AM_CPPFLAGS = -I$(top_srcdir)/libtiff
all: all-am
@@ -805,8 +846,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -835,6 +876,14 @@ custom_dir$(EXEEXT): $(custom_dir_OBJECTS) $(custom_dir_DEPENDENCIES) $(EXTRA_cu
@rm -f custom_dir$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(custom_dir_OBJECTS) $(custom_dir_LDADD) $(LIBS)
+defer_strile_loading$(EXEEXT): $(defer_strile_loading_OBJECTS) $(defer_strile_loading_DEPENDENCIES) $(EXTRA_defer_strile_loading_DEPENDENCIES)
+ @rm -f defer_strile_loading$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(defer_strile_loading_OBJECTS) $(defer_strile_loading_LDADD) $(LIBS)
+
+defer_strile_writing$(EXEEXT): $(defer_strile_writing_OBJECTS) $(defer_strile_writing_DEPENDENCIES) $(EXTRA_defer_strile_writing_DEPENDENCIES)
+ @rm -f defer_strile_writing$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(defer_strile_writing_OBJECTS) $(defer_strile_writing_LDADD) $(LIBS)
+
long_tag$(EXEEXT): $(long_tag_OBJECTS) $(long_tag_DEPENDENCIES) $(EXTRA_long_tag_DEPENDENCIES)
@rm -f long_tag$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(long_tag_OBJECTS) $(long_tag_LDADD) $(LIBS)
@@ -855,22 +904,35 @@ strip_rw$(EXEEXT): $(strip_rw_OBJECTS) $(strip_rw_DEPENDENCIES) $(EXTRA_strip_rw
@rm -f strip_rw$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(strip_rw_OBJECTS) $(strip_rw_LDADD) $(LIBS)
+testtypes$(EXEEXT): $(testtypes_OBJECTS) $(testtypes_DEPENDENCIES) $(EXTRA_testtypes_DEPENDENCIES)
+ @rm -f testtypes$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testtypes_OBJECTS) $(testtypes_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/custom_dir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_decode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewrite_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip_rw.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_arrays.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii_tag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_tag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/custom_dir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defer_strile_loading.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defer_strile_writing.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long_tag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_decode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewrite_tag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_tag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip_rw.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_arrays.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testtypes.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -1071,7 +1133,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
fi; \
$$success || exit 1
-check-TESTS:
+check-TESTS: $(check_PROGRAMS)
@list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@@ -1134,6 +1196,27 @@ custom_dir.log: custom_dir$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+defer_strile_loading.log: defer_strile_loading$(EXEEXT)
+ @p='defer_strile_loading$(EXEEXT)'; \
+ b='defer_strile_loading'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+defer_strile_writing.log: defer_strile_writing$(EXEEXT)
+ @p='defer_strile_writing$(EXEEXT)'; \
+ b='defer_strile_writing'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+testtypes.log: testtypes$(EXEEXT)
+ @p='testtypes$(EXEEXT)'; \
+ b='testtypes'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
raw_decode.log: raw_decode$(EXEEXT)
@p='raw_decode$(EXEEXT)'; \
b='raw_decode'; \
@@ -1162,6 +1245,13 @@ ppm2tiff_ppm.sh.log: ppm2tiff_ppm.sh
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+fax2tiff.sh.log: fax2tiff.sh
+ @p='fax2tiff.sh'; \
+ b='fax2tiff.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
tiffcp-g3.sh.log: tiffcp-g3.sh
@p='tiffcp-g3.sh'; \
b='tiffcp-g3.sh'; \
@@ -1225,6 +1315,13 @@ tiffcp-lzw-compat.sh.log: tiffcp-lzw-compat.sh
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+tiffcp-lzw-scanline-decode.sh.log: tiffcp-lzw-scanline-decode.sh
+ @p='tiffcp-lzw-scanline-decode.sh'; \
+ b='tiffcp-lzw-scanline-decode.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
tiffdump.sh.log: tiffdump.sh
@p='tiffdump.sh'; \
b='tiffdump.sh'; \
@@ -1681,7 +1778,10 @@ tiff2rgba-quad-tile.jpg.sh.log: tiff2rgba-quad-tile.jpg.sh
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -1757,7 +1857,19 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/ascii_tag.Po
+ -rm -f ./$(DEPDIR)/check_tag.Po
+ -rm -f ./$(DEPDIR)/custom_dir.Po
+ -rm -f ./$(DEPDIR)/defer_strile_loading.Po
+ -rm -f ./$(DEPDIR)/defer_strile_writing.Po
+ -rm -f ./$(DEPDIR)/long_tag.Po
+ -rm -f ./$(DEPDIR)/raw_decode.Po
+ -rm -f ./$(DEPDIR)/rewrite_tag.Po
+ -rm -f ./$(DEPDIR)/short_tag.Po
+ -rm -f ./$(DEPDIR)/strip.Po
+ -rm -f ./$(DEPDIR)/strip_rw.Po
+ -rm -f ./$(DEPDIR)/test_arrays.Po
+ -rm -f ./$(DEPDIR)/testtypes.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1803,7 +1915,19 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/ascii_tag.Po
+ -rm -f ./$(DEPDIR)/check_tag.Po
+ -rm -f ./$(DEPDIR)/custom_dir.Po
+ -rm -f ./$(DEPDIR)/defer_strile_loading.Po
+ -rm -f ./$(DEPDIR)/defer_strile_writing.Po
+ -rm -f ./$(DEPDIR)/long_tag.Po
+ -rm -f ./$(DEPDIR)/raw_decode.Po
+ -rm -f ./$(DEPDIR)/rewrite_tag.Po
+ -rm -f ./$(DEPDIR)/short_tag.Po
+ -rm -f ./$(DEPDIR)/strip.Po
+ -rm -f ./$(DEPDIR)/strip_rw.Po
+ -rm -f ./$(DEPDIR)/test_arrays.Po
+ -rm -f ./$(DEPDIR)/testtypes.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1824,16 +1948,16 @@ uninstall-am:
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
- clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
- ctags ctags-am 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-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 \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am 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-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 mostlyclean-libtool pdf pdf-am ps ps-am \
recheck tags tags-am uninstall uninstall-am
diff --git a/tiff/test/ascii_tag.c b/tiff/test/ascii_tag.c
index 6337900b..9a56d31d 100644
--- a/tiff/test/ascii_tag.c
+++ b/tiff/test/ascii_tag.c
@@ -1,5 +1,3 @@
-/* $Id: ascii_tag.c,v 1.8 2013-12-17 14:41:57 bfriesen Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/check_tag.c b/tiff/test/check_tag.c
index 43011800..5750d683 100644
--- a/tiff/test/check_tag.c
+++ b/tiff/test/check_tag.c
@@ -1,5 +1,3 @@
-/* $Id: check_tag.c,v 1.3 2008/04/15 14:19:37 dron Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/common.sh b/tiff/test/common.sh
index 6b1380dd..5bebcd37 100644
--- a/tiff/test/common.sh
+++ b/tiff/test/common.sh
@@ -7,6 +7,7 @@ SRCDIR=`cd $SRCDIR && pwd`
TOPSRCDIR=`cd $srcdir/.. && pwd`
TOOLS=`cd ../tools && pwd`
IMAGES="${SRCDIR}/images"
+REFS="${SRCDIR}/refs"
# Aliases for built tools
FAX2PS=${TOOLS}/fax2ps
@@ -41,6 +42,7 @@ IMG_RGB_3C_16B=${IMAGES}/rgb-3c-16b.tiff
IMG_RGB_3C_8B=${IMAGES}/rgb-3c-8b.tiff
IMG_MINISBLACK_2C_8B_ALPHA=${IMAGES}/minisblack-2c-8b-alpha.tiff
IMG_QUAD_LZW_COMPAT=${IMAGES}/quad-lzw-compat.tiff
+IMG_LZW_SINGLE_STROP=${IMAGES}/lzw-single-strip.tiff
IMG_MINISWHITE_1C_1B_PBM=${IMAGES}/miniswhite-1c-1b.pbm
IMG_MINISBLACK_1C_8B_PGM=${IMAGES}/minisblack-1c-8b.pgm
diff --git a/tiff/test/custom_dir.c b/tiff/test/custom_dir.c
index acf55ce5..3b3ad279 100644
--- a/tiff/test/custom_dir.c
+++ b/tiff/test/custom_dir.c
@@ -1,5 +1,3 @@
-/* $Id: custom_dir.c,v 1.3 2013-12-17 14:41:58 bfriesen Exp $ */
-
/*
* Copyright (c) 2012, Frank Warmerdam <warmerdam@pobox.com>
*
diff --git a/tiff/test/defer_strile_loading.c b/tiff/test/defer_strile_loading.c
new file mode 100644
index 00000000..b444c01f
--- /dev/null
+++ b/tiff/test/defer_strile_loading.c
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 2019, Even Rouault <even.rouault at spatialys.com>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * TIFF Library
+ *
+ * Module to test 'D' and 'O' open flags
+ */
+
+#include "tif_config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "tiffio.h"
+#include "tifftest.h"
+
+int test(int classictif, int height, int tiled)
+{
+ const char* filename = "defer_strile_loading.tif";
+ TIFF* tif;
+ int i;
+ int ret = 0;
+ FILE* f;
+
+ (void)ret;
+
+ tif = TIFFOpen(filename, classictif ? "wDO" : "w8DO"); /* O should be ignored in write mode */
+ if(!tif)
+ {
+ fprintf(stderr, "cannot create %s\n", filename);
+ return 1;
+ }
+ ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+ assert(ret);
+ if( tiled )
+ {
+ int j;
+ ret = TIFFSetField(tif, TIFFTAG_TILEWIDTH, 16);
+ assert( ret );
+ ret = TIFFSetField(tif, TIFFTAG_TILELENGTH, 16);
+ assert( ret );
+ for( j = 0; j < (height+15) / 16; j++ )
+ {
+ unsigned char tilebuffer[256];
+ memset(tilebuffer, (unsigned char)j, 256);
+ ret = TIFFWriteEncodedTile( tif, j, tilebuffer, 256 );
+ assert(ret == 256);
+ }
+ }
+ else
+ {
+ ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+ assert(ret);
+ for( i = 0; i < height; i++ )
+ {
+ unsigned char c = (unsigned char)i;
+ ret = TIFFWriteEncodedStrip( tif, i, &c, 1 );
+ assert(ret == 1);
+
+ if( i == 1 && height > 100000 )
+ i = height - 2;
+ }
+ }
+ TIFFClose(tif);
+
+ f = fopen(filename, "rb");
+ if( !f )
+ return 1;
+
+ for( i = 0; i < 2; i++ )
+ {
+ tif = TIFFOpen(filename, i == 0 ? "rD" : "rO");
+ if(!tif)
+ {
+ fprintf(stderr, "cannot open %s\n", filename);
+ fclose(f);
+ return 1;
+ }
+ if( tiled )
+ {
+ int j;
+ for( j = 0; j < (height+15) / 16; j++ )
+ {
+ int retry;
+ unsigned char expected_c = (unsigned char)j;
+
+ for( retry = 0; retry < 2; retry++ )
+ {
+ unsigned char tilebuffer[256];
+ memset(tilebuffer,0, 256);
+ ret = TIFFReadEncodedTile( tif, j, tilebuffer, 256 );
+ assert(ret == 256);
+ if( tilebuffer[0] != expected_c ||
+ tilebuffer[255] != expected_c )
+ {
+ fprintf(stderr, "unexpected value at tile %d: %d %d\n",
+ j, tilebuffer[0], tilebuffer[255]);
+ TIFFClose(tif);
+ fclose(f);
+ return 1;
+ }
+ }
+
+ {
+ int err = 0;
+ int offset, size;
+ unsigned char inputbuffer[256];
+ unsigned char tilebuffer[256];
+
+ offset = TIFFGetStrileOffsetWithErr(tif, j, &err);
+ assert(offset != 0);
+ assert(err == 0);
+
+ size = TIFFGetStrileByteCountWithErr(tif, j, &err);
+ assert(size == 256);
+ assert(err == 0);
+
+ fseek(f, offset, SEEK_SET);
+ fread(inputbuffer, 256, 1, f);
+
+ memset(tilebuffer,0, 256);
+ ret = TIFFReadFromUserBuffer(tif, j,
+ inputbuffer, 256,
+ tilebuffer, 256 );
+ assert(ret == 1);
+ if( tilebuffer[0] != expected_c ||
+ tilebuffer[255] != expected_c )
+ {
+ fprintf(stderr, "unexpected value at tile %d: %d %d\n",
+ j, tilebuffer[0], tilebuffer[255]);
+ TIFFClose(tif);
+ fclose(f);
+ return 1;
+ }
+ }
+ }
+ }
+ else
+ {
+ int j;
+ for( j = 0; j < height; j++ )
+ {
+ int retry;
+ unsigned char expected_c = (unsigned char)j;
+ for( retry = 0; retry < 2; retry++ )
+ {
+ unsigned char c = 0;
+ ret = TIFFReadEncodedStrip( tif, j, &c, 1 );
+ assert(ret == 1);
+ if( c != expected_c )
+ {
+ fprintf(stderr, "unexpected value at line %d: %d\n",
+ j, c);
+ TIFFClose(tif);
+ fclose(f);
+ return 1;
+ }
+ }
+
+ {
+ int err = 0;
+ int offset, size;
+ unsigned char inputbuffer[1];
+ unsigned char tilebuffer[1];
+
+ offset = TIFFGetStrileOffsetWithErr(tif, j, &err);
+ assert(offset != 0);
+ assert(err == 0);
+
+ size = TIFFGetStrileByteCountWithErr(tif, j, &err);
+ assert(size == 1);
+ assert(err == 0);
+
+ fseek(f, offset, SEEK_SET);
+ fread(inputbuffer, 1, 1, f);
+
+ memset(tilebuffer,0, 1);
+ ret = TIFFReadFromUserBuffer(tif, j,
+ inputbuffer, 1,
+ tilebuffer, 1 );
+ assert(ret == 1);
+ if( tilebuffer[0] != expected_c )
+ {
+ fprintf(stderr, "unexpected value at line %d: %d\n",
+ j, tilebuffer[0]);
+ TIFFClose(tif);
+ fclose(f);
+ return 1;
+ }
+ }
+
+ if( j == 1 && height > 100000 )
+ j = height - 2;
+ }
+
+ if( height > 100000 )
+ {
+ /* Missing strip */
+ int err = 0;
+ ret = TIFFGetStrileOffsetWithErr(tif, 2, &err);
+ assert(ret == 0);
+ assert(err == 0);
+
+ ret = TIFFGetStrileByteCountWithErr(tif, 2, &err);
+ assert(ret == 0);
+ assert(err == 0);
+
+ }
+ }
+
+ {
+ int err = 0;
+ ret = TIFFGetStrileOffsetWithErr(tif, 0xFFFFFFFFU, &err);
+ assert(ret == 0);
+ assert(err == 1);
+
+ ret = TIFFGetStrileByteCountWithErr(tif, 0xFFFFFFFFU, &err);
+ assert(ret == 0);
+ assert(err == 1);
+ }
+
+ {
+ toff_t* offsets = NULL;
+ toff_t* bytecounts = NULL;
+ ret = TIFFGetField( tif,
+ tiled ? TIFFTAG_TILEOFFSETS : TIFFTAG_STRIPOFFSETS, &offsets );
+ assert(ret);
+ assert(offsets);
+ ret = TIFFGetField( tif,
+ tiled ? TIFFTAG_TILEBYTECOUNTS : TIFFTAG_STRIPBYTECOUNTS, &bytecounts );
+ assert(ret);
+ assert(bytecounts);
+ if( tiled )
+ {
+ assert(bytecounts[0] == 256);
+ }
+ else
+ {
+ assert(bytecounts[0] == 1);
+ if( height > 1 && height <= 100000)
+ {
+ assert(offsets[1] == offsets[0] + 1);
+ assert(offsets[height - 1] == offsets[0] + height - 1);
+ }
+ assert(bytecounts[height - 1] == 1);
+ }
+ }
+
+ TIFFClose(tif);
+ }
+ fclose(f);
+
+ unlink(filename);
+ return 0;
+}
+
+int
+main()
+{
+ int is_classic;
+ for( is_classic = 1; is_classic >= 0; is_classic-- )
+ {
+ int tiled;
+ for( tiled = 0; tiled <= 1; tiled ++ )
+ {
+ if( test(is_classic, 1, tiled) )
+ return 1;
+ if( test(is_classic, 8192, tiled) )
+ return 1;
+ }
+ if( test(is_classic, 2000000, 0) )
+ return 1;
+ }
+ return 0;
+}
diff --git a/tiff/test/defer_strile_writing.c b/tiff/test/defer_strile_writing.c
new file mode 100644
index 00000000..4e358567
--- /dev/null
+++ b/tiff/test/defer_strile_writing.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright (c) 2019, Even Rouault <even.rouault at spatialys.com>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * TIFF Library
+ *
+ * Module to test TIFFDeferStrileArrayWriting and TIFFForceStrileArrayWriting
+ */
+
+#include "tif_config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "tiffio.h"
+
+int test(const char* mode, int tiled, int height)
+{
+ const char* filename = "defer_strile_writing.tif";
+ TIFF* tif;
+ int i;
+ int ret = 0;
+ (void)ret;
+
+ tif = TIFFOpen(filename, mode);
+ if(!tif)
+ {
+ fprintf(stderr, "cannot create %s\n", filename);
+ return 1;
+ }
+ ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+ assert(ret);
+
+ if( tiled )
+ {
+ ret = TIFFSetField(tif, TIFFTAG_TILEWIDTH, 16);
+ assert( ret );
+ ret = TIFFSetField(tif, TIFFTAG_TILELENGTH, 16);
+ assert( ret );
+ }
+ else
+ {
+ ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+ assert(ret);
+ }
+
+ ret = TIFFDeferStrileArrayWriting(tif);
+ assert(ret);
+
+ ret = TIFFWriteCheck( tif, tiled, "test" );
+ assert(ret);
+
+ ret = TIFFWriteDirectory( tif );
+ assert(ret);
+
+ /* Create other directory */
+ TIFFFreeDirectory( tif );
+ TIFFCreateDirectory( tif );
+
+ ret = TIFFSetField( tif, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE );
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+ assert(ret);
+ ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+ assert(ret);
+
+ ret = TIFFDeferStrileArrayWriting(tif);
+ assert(ret);
+
+ ret = TIFFWriteCheck( tif, 0, "test" );
+ assert(ret);
+
+ ret = TIFFWriteDirectory( tif );
+ assert(ret);
+
+ /* Force writing of strile arrays */
+ ret = TIFFSetDirectory( tif, 0 );
+ assert(ret);
+
+ ret = TIFFForceStrileArrayWriting(tif);
+ assert(ret);
+
+ ret = TIFFSetDirectory( tif, 1 );
+ assert(ret);
+
+ ret = TIFFForceStrileArrayWriting(tif);
+ assert(ret);
+
+ /* Now write data on frist directory */
+ ret = TIFFSetDirectory( tif, 0 );
+ assert(ret);
+
+ if( tiled )
+ {
+ int j;
+ for( j = 0; j < (height+15) / 16; j++ )
+ {
+ unsigned char tilebuffer[256];
+ memset(tilebuffer, (unsigned char)j, 256);
+ ret = TIFFWriteEncodedTile( tif, j, tilebuffer, 256 );
+ assert(ret == 256);
+ }
+ }
+ else
+ {
+ for( i = 0; i < height; i++ )
+ {
+ unsigned char c = (unsigned char)i;
+ ret = TIFFWriteEncodedStrip( tif, i, &c, 1 );
+ assert(ret == 1);
+
+ if( i == 1 && height > 100000 )
+ i = height - 2;
+ }
+ }
+
+ TIFFClose(tif);
+
+ tif = TIFFOpen(filename, "r");
+ if(!tif)
+ {
+ fprintf(stderr, "cannot open %s\n", filename);
+ return 1;
+ }
+ if( tiled )
+ {
+ int j;
+ for( j = 0; j < (height+15) / 16; j++ )
+ {
+ int retry;
+ for( retry = 0; retry < 2; retry++ )
+ {
+ unsigned char tilebuffer[256];
+ unsigned char expected_c = (unsigned char)j;
+ memset(tilebuffer,0, 256);
+ ret = TIFFReadEncodedTile( tif, j, tilebuffer, 256 );
+ assert(ret == 256);
+ if( tilebuffer[0] != expected_c ||
+ tilebuffer[255] != expected_c )
+ {
+ fprintf(stderr, "unexpected value at tile %d: %d %d\n",
+ j, tilebuffer[0], tilebuffer[255]);
+ TIFFClose(tif);
+ return 1;
+ }
+ }
+ }
+ }
+ else
+ {
+ int j;
+ for( j = 0; j < height; j++ )
+ {
+ int retry;
+ for( retry = 0; retry < 2; retry++ )
+ {
+ unsigned char c = 0;
+ unsigned char expected_c = (unsigned char)j;
+ ret = TIFFReadEncodedStrip( tif, j, &c, 1 );
+ assert(ret == 1);
+ if( c != expected_c )
+ {
+ fprintf(stderr, "unexpected value at line %d: %d\n",
+ j, c);
+ TIFFClose(tif);
+ return 1;
+ }
+ }
+ }
+ }
+
+ TIFFClose(tif);
+
+ unlink(filename);
+ return 0;
+}
+
+int
+main()
+{
+ int tiled;
+ for( tiled = 0; tiled <= 1; tiled ++ )
+ {
+ if( test("w", tiled, 1) )
+ return 1;
+ if( test("w", tiled, 10) )
+ return 1;
+ if( test("w8", tiled, 1) )
+ return 1;
+ if( test("wD", tiled, 1) )
+ return 1;
+ }
+ return 0;
+}
diff --git a/tiff/test/fax2tiff.sh b/tiff/test/fax2tiff.sh
new file mode 100755
index 00000000..8806a647
--- /dev/null
+++ b/tiff/test/fax2tiff.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Basic sanity check for fax2tiff
+#
+. ${srcdir:-.}/common.sh
+infile="${IMAGES}/miniswhite-1c-1b.g3"
+outfile="o-fax2tiff.tiff"
+rm -f $outfile
+echo "$MEMCHECK ${FAX2TIFF} -M -o $outfile $infile"
+eval $MEMCHECK ${FAX2TIFF} -M -o $outfile $infile
+status=$?
+if [ $status != 0 ] ; then
+ echo "Returned failed status $status!"
+ echo "Output (if any) is in \"${outfile}\"."
+ exit $status
+fi
+f_tiffinfo_validate $outfile
diff --git a/tiff/test/images/README.txt b/tiff/test/images/README.txt
index 17f6292e..b6447d8e 100644
--- a/tiff/test/images/README.txt
+++ b/tiff/test/images/README.txt
@@ -27,3 +27,6 @@ PNM files:
minisblack-1c-8b.pgm
miniswhite-1c-1b.pbm
rgb-3c-8b.ppm
+
+G3 Fax files :
+ miniswhite-1c-1b.g3
diff --git a/tiff/test/images/lzw-single-strip.tiff b/tiff/test/images/lzw-single-strip.tiff
new file mode 100644
index 00000000..0ac27c6d
--- /dev/null
+++ b/tiff/test/images/lzw-single-strip.tiff
Binary files differ
diff --git a/tiff/test/images/miniswhite-1c-1b.g3 b/tiff/test/images/miniswhite-1c-1b.g3
new file mode 100644
index 00000000..9f00ce16
--- /dev/null
+++ b/tiff/test/images/miniswhite-1c-1b.g3
Binary files differ
diff --git a/tiff/test/long_tag.c b/tiff/test/long_tag.c
index ab1440af..4bfdf805 100644
--- a/tiff/test/long_tag.c
+++ b/tiff/test/long_tag.c
@@ -1,5 +1,3 @@
-/* $Id: long_tag.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/raw_decode.c b/tiff/test/raw_decode.c
index f81aa059..a2fca03a 100644
--- a/tiff/test/raw_decode.c
+++ b/tiff/test/raw_decode.c
@@ -1,5 +1,3 @@
-/* $Id: raw_decode.c,v 1.7 2015-08-16 20:08:21 bfriesen Exp $ */
-
/*
* Copyright (c) 2012, Frank Warmerdam <warmerdam@pobox.com>
*
diff --git a/tiff/test/refs/o-tiff2ps-EPS1.ps b/tiff/test/refs/o-tiff2ps-EPS1.ps
new file mode 100644
index 00000000..9d9da8a2
--- /dev/null
+++ b/tiff/test/refs/o-tiff2ps-EPS1.ps
@@ -0,0 +1,112 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: miniswhite-1c-1b.tiff
+%%CreationDate: Tue Apr 2 16:33:00 2019
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 157 151
+%%LanguageLevel: 1
+%%Pages: 1 1
+%%EndComments
+%%Page: 1 1
+gsave
+100 dict begin
+157.000000 151.000000 scale
+%ImageData: 157 151 1 1 0 1 2 "image"
+/scanLine 20 string def
+157 151 1
+[157 0 0 -151 0 151]
+{currentfile scanLine readhexstring pop} bind
+image
+0204153c0bfffffffff1ffffc7e01017ff8057ff5aa2803e1ffffffe0697ffffc7e485
+dfffd77fff48aca4dfd7fffff80003ffffcffe017fffe0c7ff1101250ffbfffff0241b
+ffffffff80fffff37fff29fa48abf7ffffe41221ffffafffe3fffff19fff7ff82200f7
+fdff0040803fff5ffff5ffffe17ffffffe00088bc0070008259fff7ffffdfffff0ffff
+7ffe040003c0001222001fff3ffffffffff15fdfffff084003004104809493fc1dffff
+ffffc1badfffff0fd000010020140009e337ffffffffc3efffffff1abc040400000502
+04c6bfffffefffc36b7ffffe1ffe0c808804009490061bffffffff82fafffffc3dff08
+080000020042a78fffffffff87f7fffffc1fff0c0010428049080c27ffffffff87feff
+fffc7ffd108000e0611090103ffffffffe077dfffffdbffc340003e808020203cfffff
+fffc0bd77fffe0fffc000003e10022008877fffffffc06fdff3fe35ffc780217c02808
+28000ffffffff80f5fff6bc27ff040000fc00100a20103ffffffc007f5ff5ec2ffe082
+200bc480420454a1ffffffe0065fff7fc5ff0010005f1000205a4929ffffffe003d7ff
+5fe7b80008202f029804000000ffffffc003efff37e5fe0010001e0401020240917fff
+ffc004effffffbf80022001f018888a429087fffff8007b7ff5ff3e00080009c002122
+2544015ffff9c01fb7ff7ef7c0100400fc8408000020981ffff0783fe97f77fbc00800
+017e009006560a4547ffd2bffbffff5fd780020000f801041000a00033fccdbb9ffeff
+1ba000500003fa1024a249125025f033effffeffffc000c00042f002860800880540d0
+47ffffffff574001c80003f9803e405054411400a9bfffffff7e0003804003f00a0302
+090114800005efffffff6f0003880007fc0203a040a3522a4017ffffffff5f00034000
+1af980a884120f1f8c000adffffffffff80fc0000ff82810420a27ffa800067fffffff
+fff80f400033fc010a44508fff8e000bfffffffffffc0fc0003ff9809842404fff9e20
+07ffffdff7fffe0d400003ff200220291fff9b401afffffffffffc1fe01359ff089620
+015fffaa001bffffff1ffffa3d703eeeff810b22480fff905006fffffd6ffff81fb078
+adffe40e00412fff85400d7ffff9fffff01d787fedffe08ba8185fff501007ffff925f
+fff03af8e7f7fff13f81401ffe054005ffffc1fffff03ffcf5effff00fa0094754d310
+05fffb07bfff803ffdddfffff00fe0145ea503d00fffff2f5fff003abfdffffff23fd2
+000151a7d81afffe3f7f7f803bbffffffff88fe081a02a23d006fffe7fbf39403ffebf
+fffff23fe408068007d00bfffeffff6bf83f7f7ffffffd1fe01004aa2ff005fffff55f
+46581afde7fffff087f00151008fd0027fffe2ff75f83fdc7bfffff05ff04004600fc0
+097fffc7ff79503677fffffff90ffa0495069f9002b7ffc9bf1e403edb7bfffff94ff0
+0420005f000127f7c3ff1e201764dffffff811440106963f80001ddffc5f0000296bbf
+fffff842920b0200fe0000007fffbf00003681ebfffff8096cffc094fc20001fffff5f
+000001015ffffff88064dfc001f980003ffffff700000200f9fffff0130a0fc29af400
+007fffffff00000003affffff8041403c2297d1800ffffffcf00000003fdfffff000a9
+87e402d01800fffffff720300002bfbffff8299407f005a09800fffffff764000003da
+fffff80001aff020040000ffffffef78c00001fbfffff0002107f020880000ffffffc7
+db000003dffffff0024c87f042100000ffffffd759000003f6fffff0100895f801400d
+00ffffffc7f3000007fffffff0024137f81e781fe0dfffff8f6c000007effffff00001
+fbfc29fc37b0ffffff8748000003feffffe000017efc11de5fe06fffff07d0000007df
+fffff000037bfc13ff9ff07fffff8700000007fffffff0000ffcfe227ffff837ffff1f
+2000000fbbfffff0003dfffe41fffffc1fffffe75000000fffffffe00205fdff647fff
+f816ffffc7a0000007dfffffe06f843dff635fffff03fdff074000000fffffffe1b3e0
+1affe9ff67ff0522ce074000000fffffffc0bfb003ffc9f27ffe0398290700000007f7
+ffff81fff00fffce4077ff04a020470000000fffffff86fff8057ffcc05fff0000000f
+0000000fffffff837ffa0ffff780ffff0000000700000017bfffff0fffff0ffff601ff
+ff000000470000000fffffff09dfc78bffffc22fff0000000700000007ffffff0d5bf0
+eeffff89ffff0000000f0000000fffffff0bfff87eff8f12bfff000000270000000fff
+ffff0feffc27fffd055fff000004070000001f7fffff3fb6d7ffff7907fffe0000000f
+0000001ffffffc3e5d476fc0dd7fffff0000200f0000000ffffffc1ffdbdf5f12bffff
+ff0000015f0000001ffffffc1f97edfff05fffefff0000003f0000000ffffff839febb
+5ffcabbffffe000008bf0000002ffffffc3d56bfb7ff5fffffff000084ff0000001fff
+fff85bdde5fffe29ffffff000000ff0000003fffffe066baaffffebbffffff000012ff
+0000001ffffff02aebf66ffe5dffffff000001ff0000001fffffd057757bffff257fff
+ff00000bff0000002fffffe0ad575f5fffd5ffffff000240ff0000003fffffc05bbcfe
+bfff0a7fffff000003f70000006fffffc02aeb95ffffa5ffffff000093f70000003bff
+ffc0aff99df77f0a7bfffe000423f70000003fffffb0112e733ffe95ddfefe000047c7
+0000007fffffe01bf7eeedff0ab3defe00000b970000005fffff804415a9b775a54fff
+ee000027c70000007fffff8036db4a3fb685ba7ffe00008787000050bffffff0080455
+e6dd5867df6c000015870000007fffff801051a06eba9abfdffe000003070000605fff
+ffc006082bb7ed954976f800000c07000000ffffffc004022a757a252bf7fc00002507
+0000a07effff700568591fe55ada2e9c00000007000000bffffe400a3a24a55a656fff
+bc00000587000000fffffbe000845a5df81ad59af8000020070000009fffffe0004c24
+93c85556edf400000007000000ffffbf8000b25b2dbd1aa57bbc00000007000001ffff
+ffa000491466e0035c5ffc00001407000001bfffffc000248b0bb86497db7000000007
+000000ffffff4000122a35390a26effc000000070000007fffff8000498782e454d579
+7c00000007000001bfffffc000210953ba89495ff400000007000001fbffffc0002892
+a968256ebde800000007000001ffffffc000858581f914dbfb7c00000007000003bfff
+ff00002142649887699dfc00000007000001bfffff00004a80a961296dffe802000007
+000002dfffff00001191489822b757f800000007400001bfffff00001004a9a85576fb
+d8000000077e2007ffffff0000038141500a97afb8000000077658077bffff00000611
+aca951ee79d000000007ffa207effffe0000008a51500c556ff000000007ffc907ffff
+fe0000028141c80467e77000000007ff74065ffffe00000126ac50005cbfe000000007
+ffe80dfffffc0000008155a00017efc000000007fffe075ffffc000002a4aa58012937
+4000000007fffc0efffffc00000003ad50002acd8500000007fffd19dffffc000000a0
+62a000077f8058000007fffa0dfffffc00000084d9a800157501f0000007fffe06bfff
+fc000000216450006dce023f000007fffc06bffff0000000601a400015d801ff500007
+fff009e7fff000000000418000057001ffb28007ffe0037fffe0000000c0a000000240
+07fffe8007fff0011bffe000000010010000007b21ffffe007ffffffffffe000000000
+000000007f82fffffc07ffffffffffc000000000000000007fc1ffffff07ffffffffff
+c900000000000000006c04fffffb07ffffffffffffa0000000000000000c027ffff847
+ffffffffffffffc00000000000000001affffa27fffffffffffffff000000000000000
+04005ffc07fffffffffffffffd0000000000000000000000075fffffffffffffffc000
+000000000000220180ef1ffffffffffffffffe00000000000002000883ff1fffffffff
+ffffffff00001800000000000009ff3fffffffffffffffff0000000001418000003bff
+2fffffffffffffffff00010000027000901207ff7fffffffffffffffff7e00010037f8
+0018000fff7fffffffffffffffffff00a44007fc0030423fff7fffffffffffffffffff
+c043002ffc003000afff
+end
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/tiff/test/refs/o-tiff2ps-PS1.ps b/tiff/test/refs/o-tiff2ps-PS1.ps
new file mode 100644
index 00000000..62c3e4bb
--- /dev/null
+++ b/tiff/test/refs/o-tiff2ps-PS1.ps
@@ -0,0 +1,115 @@
+%!PS-Adobe-3.0
+%%Creator: tiff2ps
+%%Title: miniswhite-1c-1b.tiff
+%%CreationDate: Tue Apr 2 16:33:00 2019
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 157 151
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+157.000000 151.000000 scale
+%ImageData: 157 151 1 1 0 1 2 "image"
+/scanLine 20 string def
+157 151 1
+[157 0 0 -151 0 151]
+{currentfile scanLine readhexstring pop} bind
+image
+0204153c0bfffffffff1ffffc7e01017ff8057ff5aa2803e1ffffffe0697ffffc7e485
+dfffd77fff48aca4dfd7fffff80003ffffcffe017fffe0c7ff1101250ffbfffff0241b
+ffffffff80fffff37fff29fa48abf7ffffe41221ffffafffe3fffff19fff7ff82200f7
+fdff0040803fff5ffff5ffffe17ffffffe00088bc0070008259fff7ffffdfffff0ffff
+7ffe040003c0001222001fff3ffffffffff15fdfffff084003004104809493fc1dffff
+ffffc1badfffff0fd000010020140009e337ffffffffc3efffffff1abc040400000502
+04c6bfffffefffc36b7ffffe1ffe0c808804009490061bffffffff82fafffffc3dff08
+080000020042a78fffffffff87f7fffffc1fff0c0010428049080c27ffffffff87feff
+fffc7ffd108000e0611090103ffffffffe077dfffffdbffc340003e808020203cfffff
+fffc0bd77fffe0fffc000003e10022008877fffffffc06fdff3fe35ffc780217c02808
+28000ffffffff80f5fff6bc27ff040000fc00100a20103ffffffc007f5ff5ec2ffe082
+200bc480420454a1ffffffe0065fff7fc5ff0010005f1000205a4929ffffffe003d7ff
+5fe7b80008202f029804000000ffffffc003efff37e5fe0010001e0401020240917fff
+ffc004effffffbf80022001f018888a429087fffff8007b7ff5ff3e00080009c002122
+2544015ffff9c01fb7ff7ef7c0100400fc8408000020981ffff0783fe97f77fbc00800
+017e009006560a4547ffd2bffbffff5fd780020000f801041000a00033fccdbb9ffeff
+1ba000500003fa1024a249125025f033effffeffffc000c00042f002860800880540d0
+47ffffffff574001c80003f9803e405054411400a9bfffffff7e0003804003f00a0302
+090114800005efffffff6f0003880007fc0203a040a3522a4017ffffffff5f00034000
+1af980a884120f1f8c000adffffffffff80fc0000ff82810420a27ffa800067fffffff
+fff80f400033fc010a44508fff8e000bfffffffffffc0fc0003ff9809842404fff9e20
+07ffffdff7fffe0d400003ff200220291fff9b401afffffffffffc1fe01359ff089620
+015fffaa001bffffff1ffffa3d703eeeff810b22480fff905006fffffd6ffff81fb078
+adffe40e00412fff85400d7ffff9fffff01d787fedffe08ba8185fff501007ffff925f
+fff03af8e7f7fff13f81401ffe054005ffffc1fffff03ffcf5effff00fa0094754d310
+05fffb07bfff803ffdddfffff00fe0145ea503d00fffff2f5fff003abfdffffff23fd2
+000151a7d81afffe3f7f7f803bbffffffff88fe081a02a23d006fffe7fbf39403ffebf
+fffff23fe408068007d00bfffeffff6bf83f7f7ffffffd1fe01004aa2ff005fffff55f
+46581afde7fffff087f00151008fd0027fffe2ff75f83fdc7bfffff05ff04004600fc0
+097fffc7ff79503677fffffff90ffa0495069f9002b7ffc9bf1e403edb7bfffff94ff0
+0420005f000127f7c3ff1e201764dffffff811440106963f80001ddffc5f0000296bbf
+fffff842920b0200fe0000007fffbf00003681ebfffff8096cffc094fc20001fffff5f
+000001015ffffff88064dfc001f980003ffffff700000200f9fffff0130a0fc29af400
+007fffffff00000003affffff8041403c2297d1800ffffffcf00000003fdfffff000a9
+87e402d01800fffffff720300002bfbffff8299407f005a09800fffffff764000003da
+fffff80001aff020040000ffffffef78c00001fbfffff0002107f020880000ffffffc7
+db000003dffffff0024c87f042100000ffffffd759000003f6fffff0100895f801400d
+00ffffffc7f3000007fffffff0024137f81e781fe0dfffff8f6c000007effffff00001
+fbfc29fc37b0ffffff8748000003feffffe000017efc11de5fe06fffff07d0000007df
+fffff000037bfc13ff9ff07fffff8700000007fffffff0000ffcfe227ffff837ffff1f
+2000000fbbfffff0003dfffe41fffffc1fffffe75000000fffffffe00205fdff647fff
+f816ffffc7a0000007dfffffe06f843dff635fffff03fdff074000000fffffffe1b3e0
+1affe9ff67ff0522ce074000000fffffffc0bfb003ffc9f27ffe0398290700000007f7
+ffff81fff00fffce4077ff04a020470000000fffffff86fff8057ffcc05fff0000000f
+0000000fffffff837ffa0ffff780ffff0000000700000017bfffff0fffff0ffff601ff
+ff000000470000000fffffff09dfc78bffffc22fff0000000700000007ffffff0d5bf0
+eeffff89ffff0000000f0000000fffffff0bfff87eff8f12bfff000000270000000fff
+ffff0feffc27fffd055fff000004070000001f7fffff3fb6d7ffff7907fffe0000000f
+0000001ffffffc3e5d476fc0dd7fffff0000200f0000000ffffffc1ffdbdf5f12bffff
+ff0000015f0000001ffffffc1f97edfff05fffefff0000003f0000000ffffff839febb
+5ffcabbffffe000008bf0000002ffffffc3d56bfb7ff5fffffff000084ff0000001fff
+fff85bdde5fffe29ffffff000000ff0000003fffffe066baaffffebbffffff000012ff
+0000001ffffff02aebf66ffe5dffffff000001ff0000001fffffd057757bffff257fff
+ff00000bff0000002fffffe0ad575f5fffd5ffffff000240ff0000003fffffc05bbcfe
+bfff0a7fffff000003f70000006fffffc02aeb95ffffa5ffffff000093f70000003bff
+ffc0aff99df77f0a7bfffe000423f70000003fffffb0112e733ffe95ddfefe000047c7
+0000007fffffe01bf7eeedff0ab3defe00000b970000005fffff804415a9b775a54fff
+ee000027c70000007fffff8036db4a3fb685ba7ffe00008787000050bffffff0080455
+e6dd5867df6c000015870000007fffff801051a06eba9abfdffe000003070000605fff
+ffc006082bb7ed954976f800000c07000000ffffffc004022a757a252bf7fc00002507
+0000a07effff700568591fe55ada2e9c00000007000000bffffe400a3a24a55a656fff
+bc00000587000000fffffbe000845a5df81ad59af8000020070000009fffffe0004c24
+93c85556edf400000007000000ffffbf8000b25b2dbd1aa57bbc00000007000001ffff
+ffa000491466e0035c5ffc00001407000001bfffffc000248b0bb86497db7000000007
+000000ffffff4000122a35390a26effc000000070000007fffff8000498782e454d579
+7c00000007000001bfffffc000210953ba89495ff400000007000001fbffffc0002892
+a968256ebde800000007000001ffffffc000858581f914dbfb7c00000007000003bfff
+ff00002142649887699dfc00000007000001bfffff00004a80a961296dffe802000007
+000002dfffff00001191489822b757f800000007400001bfffff00001004a9a85576fb
+d8000000077e2007ffffff0000038141500a97afb8000000077658077bffff00000611
+aca951ee79d000000007ffa207effffe0000008a51500c556ff000000007ffc907ffff
+fe0000028141c80467e77000000007ff74065ffffe00000126ac50005cbfe000000007
+ffe80dfffffc0000008155a00017efc000000007fffe075ffffc000002a4aa58012937
+4000000007fffc0efffffc00000003ad50002acd8500000007fffd19dffffc000000a0
+62a000077f8058000007fffa0dfffffc00000084d9a800157501f0000007fffe06bfff
+fc000000216450006dce023f000007fffc06bffff0000000601a400015d801ff500007
+fff009e7fff000000000418000057001ffb28007ffe0037fffe0000000c0a000000240
+07fffe8007fff0011bffe000000010010000007b21ffffe007ffffffffffe000000000
+000000007f82fffffc07ffffffffffc000000000000000007fc1ffffff07ffffffffff
+c900000000000000006c04fffffb07ffffffffffffa0000000000000000c027ffff847
+ffffffffffffffc00000000000000001affffa27fffffffffffffff000000000000000
+04005ffc07fffffffffffffffd0000000000000000000000075fffffffffffffffc000
+000000000000220180ef1ffffffffffffffffe00000000000002000883ff1fffffffff
+ffffffff00001800000000000009ff3fffffffffffffffff0000000001418000003bff
+2fffffffffffffffff00010000027000901207ff7fffffffffffffffff7e00010037f8
+0018000fff7fffffffffffffffffff00a44007fc0030423fff7fffffffffffffffffff
+c043002ffc003000afff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/tiff/test/refs/o-tiff2ps-PS2.ps b/tiff/test/refs/o-tiff2ps-PS2.ps
new file mode 100644
index 00000000..e7fe4339
--- /dev/null
+++ b/tiff/test/refs/o-tiff2ps-PS2.ps
@@ -0,0 +1,104 @@
+%!PS-Adobe-3.0
+%%Creator: tiff2ps
+%%Title: miniswhite-1c-1b.tiff
+%%CreationDate: Tue Apr 2 16:33:00 2019
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 157 151
+%%LanguageLevel: 2
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+gsave newpath clippath pathbbox grestore
+ 4 2 roll 2 copy translate
+ exch 3 1 roll sub 3 1 roll sub exch
+ currentpagedevice /PageSize get aload pop
+ exch 3 1 roll div 3 1 roll div abs exch abs
+ 2 copy gt { exch } if pop
+ dup 1 lt { dup scale } { pop } ifelse
+%%EndSetup
+%%Page: 1 1
+%%PageOrientation: Landscape
+%%PageBoundingBox: 0 0 157 151
+1 dict begin /PageSize [ 157.000000 151.000000 ] def currentdict end setpagedevice
+<<
+ /Policies <<
+ /PageSize 3
+ >>
+>> setpagedevice
+gsave
+100 dict begin
+157.000000 151.000000 scale
+% PostScript Level 2 only.
+/DeviceGray setcolorspace
+{ % exec
+ /im_stream currentfile /ASCII85Decode filter def
+ <<
+ /ImageType 1
+ /Width 157
+ /Height 151
+ /ImageMatrix [ 157 0 0 -151 0 151 ]
+ /BitsPerComponent 1
+ /Interpolate true
+ /Decode [1 0]
+ /DataSource im_stream
+ >> image
+ im_stream status { im_stream flushfile } if
+}
+exec
+rVPltoDejk!"Ju/3$7VQ!.UpIV-SSehuE`Xq.Ka.3#d/d!%<?t[o6KR-ia5Ps82is0EM0'!$=0#
+mf(r0"98E4gZ/>7!!%KK!"=AXeciN^#QOiDmG7gC:]MI8!"NB:J-Xp1#Qb#+^OO$!TE#<!!$6Xj
+!!3,oF?fR#pY'!TJ,fWN!"T&0J-#QIr'15Kh>cC5^]4?7!"PYE!!)c.r;XM.Iqrj&iW&rY!'Wgo
+!!)LAs8N&Uli6Yua8c2?!'Cem!!)+JqtpEnqYg:O5QCcq!'HKr!!2!Yo7(u]s(cQKj8]/[!.>"N
+!!C(<p\4^frVsQ5Du]k<!-ebL!!D-ZoDe9mJ%#+CfDkmO!-eME!!@`Qmsk?ZT'pUd^]4?7!Vh6H
+!!5CfbQ%JVp\k'g0E;(Q"8"!l!$;1Cs8W!<s5!^!L]@DT"8Muu^`9!LL]-F$fD!nsn,NFg#OnAd
+PWaO-^]3dfrr6:'qu?]s5PPQcTfiAtIGaZYJ%b`[?2ss*+8MQ0J3!]1n,K'Ls50Z]ec5[M+8dMe
+TGU3!pYX?rBD_`/rr<$!5Pu&ma;P*Zn,MADrr)f1DL_]e5Pkul!!EQ,h>cF4GB[9BpOE5DJ+uP7
+TF;qBJ,a$YhVHntrh'5q5N#'4JI"L/qu6bFp](9NBA`b#LVO[UL]fs:s8ITLDu$C*]!q_l5Qh&e
+TI><gs8N?'qsXPls3(R#6sp#qjBqqjs83&hgKh8TYM'N2&-)_2!'gKJs1JsAH2%>_qS+\nzW5&<j
+s83(N_8!1S^?bf"5QCcaJcGXt^\eW8r;H?gl[Ss2&-)\1OT56&s7c]pr*R3DXjt2MzT`=r)s5aH7
+=*s?(i,eqk+92BA!!i!Xs6p9Fn%JDH!*B3rJ,fQL!!i#.s3(TEot.DH!-/&2z!!D^Ts1ehgB>)'a
+!+Fd[!!",I!!2Z*s82lSrSQ2a!+`k+z!!D.$m%sdWC#Ao_!*0'[!!!#W!!U6#_%?Zro\I"G!,o(:
+!!!(^!!hFXLJe*knc->M!.)ENJ,fcR!"\(EJ._i(FB@Xu!3bkd!!$l/!"[$R(^L*O^ja&V!W'S-
+!!#1_!"ZjI$4m1Jn6bn!X"<`9!!N'^!.Vcc+ohTRn/pti>5U&C!!(B=!<:#'+92BN^b,TcY#m(5
+!!0lcJ:GL&!!!!(E$'O9e_DhR!!.U8`kT:i5QCcn^`3%DJ+t\h!!*'"PR#!SJ,fQNi#hFb<R;9Q
+!!!A!\YnNj(]XOHGRseVs)9XiJ,gSiM?gpAKE(u_TF\g7TC>)=J,hP/L9J^T!!!!'n-/](q-\.>
+8,tP5iP32SKE(uVYRgWgs.KDkfEaS>iSWjg+92BHm^rJoBu#5uiZJ>rs8UZ75QCch]l!E?rrN0"
+s*t)7s8U2i'EA+<p6,J@CBNJohuEbMs8W)tTE"rsJ"%QFrW[lP^]4??s8W&t"onW6m.Kj2AIJP<
+J,fQLs8W,s:]LJ#qs4/Ceq3)b!!!!Qs8W,s!WW32s&O@`r@d@6!!!!)hp;?$5X5;Senb$kqHmn8
+!!!!)S,`Nd,ldoMs8Gh*hu!HR!!!!1LHkh<"98E4s5*M]hfo,#!!!!Y,ldoB+92BPrNg_Z^$l"$
+!!!!IVZ6\o#ljr9n+UQ%rkJ%(!!!!Y%0-A&!!!!0rP$>XiJ6>5+92C\PQ1[X&-)\@s8E-'ecWuh
+!!!"D\,ZL+!<<*As8IQOmNJ5FO8o:U0E;(I+92BPs87NPli:E(J,fRos8W,o!!!!0s6p*kh1,J1
+a8c4uhuE`G6i[2ts2"a:^&S-8huE`oYQ+Xl!!!!@rV?QqRt(JDkl:]C?iU0$+92B`OF+hES=fi^
+quQln^]4?'!!!!?9HW?r(''^%qV<n$^]4?'!!!!`5Yq:X2@Y0;r+FUUs8W,o#QOjR!"\Q!0u&ME
+qd86js8W,g!!!"E!!i@N"$`FYs8W,gs8W,g!!!"HJ-GEB#_)gSs8W,os8W,_5QCfR!!)Kg$2so)
+s8W,/s8W,g!!!#m+?4HC!'S[/s8W,os8W,o!!!#iU^n%;!-S>Bs8W,gs8W,g!!!#k!!e&TE:#mj
+s8W,Os8W,g!!!#g&-LPb!rAPis8Vuks8W,WJ,fSb8LOQ=LA1`Ls8W,gs8W,W!!!,;U:?:L,(KXn
+s8V!Gs8W,g!!!,Z!^[5(e,TIKs8W(ks8W,W!!!,ZBG(:UTE#N's8W,7s8W,g!!!8D!CWR_<'UEa
+s8VgYs8W,G!!!,<WB`uSTE"rls8REGs8W,W!!!8"+rUF^ec5[Ms8W*!s8W,7!!"+/78Nsb6i[2e
+s8VHds8W,W!!!P['FBj%U&Y/ns8W&us8W,W!!"[NMM(s0g40/'s8V]ks8W,G!!"*=W1]d`.KBGK
+s8B\4s8W,7!!#6Z6NKFPomd#Bs8W!&s8W+\!!#76'P[UJ=o\O&s8Qm@s8W,;!!#5[#%@jgon3;G
+s81RWs8W,7!!#g_d>YjAC*EZZs8TSgs8W+L!!",%#S@[Loh6M0s8V_)s8W+l!!%M\l;gH5>-Iu=
+s8U_2s8W+L!!%Mj,dkEZH:<>bs8R=gs8T8f!!!Q(ql1MXVjJTjs8VA/s8W+L!!%N;Y$[;[AO%@=
+s8W#ls8S^a!!#7ZpXD_HC:8s(s8V]cs8W*!!!#7\rRHdZg=-B1s8UgJs8QGW!!&)VQ_r[ZV'XN!
+s8W,os8W*a!!0k-`S4RmRZIM:s8Vq?s8W*!!!FDDH_mGAjXOgHs8V!Os8W+,!!",@ZeK:TWi6U=
+s8W,os8W*!!'l&69r-3(j][=)s8W,os8W&u!!$C+[d0>'r1fnes8VE[s8W'`!!#7`gN<'XRqO(.
+s8W,os8W*!!!'e6mFBA!p"9lYs8W,os8W+L!!%NK[Wm3>X"&jVs8W,os8W'`!!#7`hY+$>G.+%O
+s8W,os8W'$!!#7`f54QTg6"]<s8W,os8W&u!!#7`H?t#ElQcUcs8W,os8W!^!!*'!hS#CkGa;e@
+s8W,os8W'`!!*'![=;5Kerg"LrVuoms8W$?!!*'!mV]LHh+4ILs8W,o^]49u!!*'!n,$-eWegj+
+s8W,oJ`$5&!!*'!r-lA`ok7/ls8W,oM5U-%!!*'!q<h0^Xq?CAs8W,o!+#@2!!3-"s)kKJo;[l_
+s8W,o!&jTP!!3-"rI2I>qj84]s8W,o!/pZG!!3-"rn15Rs._h$s8W,o!#P2+!!E9$s*gtTs6("Y
+s8W,o!!2kf!!E9$rEE:"rmo0*s8W,o!!D`k!!E9$s85cus4&lNs8W,o!!;:*!!E9$s'M=(s7h+o
+VuQel!!Von!!E9$s*H(os6>L@&-)\)!!2m\!!E9$s5'6Ks,o,8_#OH0!!E$^!"],0s.ADfs6;!2
+!3cFt!"\c?!"],0s8Tf_s8%fU!)7t<!$D,h!$D7@s$'ljs8B_-!!.TE!"](i!$D7@s6oses8Rc/
+!!",9z!$D7@s8W-!s8RUt!!!,rz!'gM`s8W-!s8RU5!!!#oz!&jlWs8W-!s8S;[!!!/sz!!$C+
+s8W-!s8V]hJ,fhaz!!!!`s8W-!s8W,u:]L[Oz!!!!0s8W-!s8W,rs.BJhz!!!!#s8W-!s8W-!
+s8W,oTE"rlz5QCc`s8W-!h>Vm8huE`Wz!WW3"s8W,ts7^m@huE`Wz!<<)^s8W-!s8Vcm^]4?7
+z!<<*!s8K`^s8U";ci=%Gz!<<&us8A#YDsd<"J,fQLz!.k1Ls2YHFkPt#OJ,fQLz!!*%'^\@p2
+cb7*oJ,fQLz!!#6rs3LlJci6fA~>
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/tiff/test/refs/o-tiff2ps-PS3.ps b/tiff/test/refs/o-tiff2ps-PS3.ps
new file mode 100644
index 00000000..6ec22b9b
--- /dev/null
+++ b/tiff/test/refs/o-tiff2ps-PS3.ps
@@ -0,0 +1,104 @@
+%!PS-Adobe-3.0
+%%Creator: tiff2ps
+%%Title: miniswhite-1c-1b.tiff
+%%CreationDate: Tue Apr 2 16:33:00 2019
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 157 151
+%%LanguageLevel: 3
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+gsave newpath clippath pathbbox grestore
+ 4 2 roll 2 copy translate
+ exch 3 1 roll sub 3 1 roll sub exch
+ currentpagedevice /PageSize get aload pop
+ exch 3 1 roll div 3 1 roll div abs exch abs
+ 2 copy gt { exch } if pop
+ dup 1 lt { dup scale } { pop } ifelse
+%%EndSetup
+%%Page: 1 1
+%%PageOrientation: Landscape
+%%PageBoundingBox: 0 0 157 151
+1 dict begin /PageSize [ 157.000000 151.000000 ] def currentdict end setpagedevice
+<<
+ /Policies <<
+ /PageSize 3
+ >>
+>> setpagedevice
+gsave
+100 dict begin
+157.000000 151.000000 scale
+% PostScript Level 2 only.
+/DeviceGray setcolorspace
+{ % exec
+ /im_stream currentfile /ASCII85Decode filter def
+ <<
+ /ImageType 1
+ /Width 157
+ /Height 151
+ /ImageMatrix [ 157 0 0 -151 0 151 ]
+ /BitsPerComponent 1
+ /Interpolate true
+ /Decode [1 0]
+ /DataSource im_stream
+ >> image
+ im_stream status { im_stream flushfile } if
+}
+exec
+rVPltoDejk!"Ju/3$7VQ!.UpIV-SSehuE`Xq.Ka.3#d/d!%<?t[o6KR-ia5Ps82is0EM0'!$=0#
+mf(r0"98E4gZ/>7!!%KK!"=AXeciN^#QOiDmG7gC:]MI8!"NB:J-Xp1#Qb#+^OO$!TE#<!!$6Xj
+!!3,oF?fR#pY'!TJ,fWN!"T&0J-#QIr'15Kh>cC5^]4?7!"PYE!!)c.r;XM.Iqrj&iW&rY!'Wgo
+!!)LAs8N&Uli6Yua8c2?!'Cem!!)+JqtpEnqYg:O5QCcq!'HKr!!2!Yo7(u]s(cQKj8]/[!.>"N
+!!C(<p\4^frVsQ5Du]k<!-ebL!!D-ZoDe9mJ%#+CfDkmO!-eME!!@`Qmsk?ZT'pUd^]4?7!Vh6H
+!!5CfbQ%JVp\k'g0E;(Q"8"!l!$;1Cs8W!<s5!^!L]@DT"8Muu^`9!LL]-F$fD!nsn,NFg#OnAd
+PWaO-^]3dfrr6:'qu?]s5PPQcTfiAtIGaZYJ%b`[?2ss*+8MQ0J3!]1n,K'Ls50Z]ec5[M+8dMe
+TGU3!pYX?rBD_`/rr<$!5Pu&ma;P*Zn,MADrr)f1DL_]e5Pkul!!EQ,h>cF4GB[9BpOE5DJ+uP7
+TF;qBJ,a$YhVHntrh'5q5N#'4JI"L/qu6bFp](9NBA`b#LVO[UL]fs:s8ITLDu$C*]!q_l5Qh&e
+TI><gs8N?'qsXPls3(R#6sp#qjBqqjs83&hgKh8TYM'N2&-)_2!'gKJs1JsAH2%>_qS+\nzW5&<j
+s83(N_8!1S^?bf"5QCcaJcGXt^\eW8r;H?gl[Ss2&-)\1OT56&s7c]pr*R3DXjt2MzT`=r)s5aH7
+=*s?(i,eqk+92BA!!i!Xs6p9Fn%JDH!*B3rJ,fQL!!i#.s3(TEot.DH!-/&2z!!D^Ts1ehgB>)'a
+!+Fd[!!",I!!2Z*s82lSrSQ2a!+`k+z!!D.$m%sdWC#Ao_!*0'[!!!#W!!U6#_%?Zro\I"G!,o(:
+!!!(^!!hFXLJe*knc->M!.)ENJ,fcR!"\(EJ._i(FB@Xu!3bkd!!$l/!"[$R(^L*O^ja&V!W'S-
+!!#1_!"ZjI$4m1Jn6bn!X"<`9!!N'^!.Vcc+ohTRn/pti>5U&C!!(B=!<:#'+92BN^b,TcY#m(5
+!!0lcJ:GL&!!!!(E$'O9e_DhR!!.U8`kT:i5QCcn^`3%DJ+t\h!!*'"PR#!SJ,fQNi#hFb<R;9Q
+!!!A!\YnNj(]XOHGRseVs)9XiJ,gSiM?gpAKE(u_TF\g7TC>)=J,hP/L9J^T!!!!'n-/](q-\.>
+8,tP5iP32SKE(uVYRgWgs.KDkfEaS>iSWjg+92BHm^rJoBu#5uiZJ>rs8UZ75QCch]l!E?rrN0"
+s*t)7s8U2i'EA+<p6,J@CBNJohuEbMs8W)tTE"rsJ"%QFrW[lP^]4??s8W&t"onW6m.Kj2AIJP<
+J,fQLs8W,s:]LJ#qs4/Ceq3)b!!!!Qs8W,s!WW32s&O@`r@d@6!!!!)hp;?$5X5;Senb$kqHmn8
+!!!!)S,`Nd,ldoMs8Gh*hu!HR!!!!1LHkh<"98E4s5*M]hfo,#!!!!Y,ldoB+92BPrNg_Z^$l"$
+!!!!IVZ6\o#ljr9n+UQ%rkJ%(!!!!Y%0-A&!!!!0rP$>XiJ6>5+92C\PQ1[X&-)\@s8E-'ecWuh
+!!!"D\,ZL+!<<*As8IQOmNJ5FO8o:U0E;(I+92BPs87NPli:E(J,fRos8W,o!!!!0s6p*kh1,J1
+a8c4uhuE`G6i[2ts2"a:^&S-8huE`oYQ+Xl!!!!@rV?QqRt(JDkl:]C?iU0$+92B`OF+hES=fi^
+quQln^]4?'!!!!?9HW?r(''^%qV<n$^]4?'!!!!`5Yq:X2@Y0;r+FUUs8W,o#QOjR!"\Q!0u&ME
+qd86js8W,g!!!"E!!i@N"$`FYs8W,gs8W,g!!!"HJ-GEB#_)gSs8W,os8W,_5QCfR!!)Kg$2so)
+s8W,/s8W,g!!!#m+?4HC!'S[/s8W,os8W,o!!!#iU^n%;!-S>Bs8W,gs8W,g!!!#k!!e&TE:#mj
+s8W,Os8W,g!!!#g&-LPb!rAPis8Vuks8W,WJ,fSb8LOQ=LA1`Ls8W,gs8W,W!!!,;U:?:L,(KXn
+s8V!Gs8W,g!!!,Z!^[5(e,TIKs8W(ks8W,W!!!,ZBG(:UTE#N's8W,7s8W,g!!!8D!CWR_<'UEa
+s8VgYs8W,G!!!,<WB`uSTE"rls8REGs8W,W!!!8"+rUF^ec5[Ms8W*!s8W,7!!"+/78Nsb6i[2e
+s8VHds8W,W!!!P['FBj%U&Y/ns8W&us8W,W!!"[NMM(s0g40/'s8V]ks8W,G!!"*=W1]d`.KBGK
+s8B\4s8W,7!!#6Z6NKFPomd#Bs8W!&s8W+\!!#76'P[UJ=o\O&s8Qm@s8W,;!!#5[#%@jgon3;G
+s81RWs8W,7!!#g_d>YjAC*EZZs8TSgs8W+L!!",%#S@[Loh6M0s8V_)s8W+l!!%M\l;gH5>-Iu=
+s8U_2s8W+L!!%Mj,dkEZH:<>bs8R=gs8T8f!!!Q(ql1MXVjJTjs8VA/s8W+L!!%N;Y$[;[AO%@=
+s8W#ls8S^a!!#7ZpXD_HC:8s(s8V]cs8W*!!!#7\rRHdZg=-B1s8UgJs8QGW!!&)VQ_r[ZV'XN!
+s8W,os8W*a!!0k-`S4RmRZIM:s8Vq?s8W*!!!FDDH_mGAjXOgHs8V!Os8W+,!!",@ZeK:TWi6U=
+s8W,os8W*!!'l&69r-3(j][=)s8W,os8W&u!!$C+[d0>'r1fnes8VE[s8W'`!!#7`gN<'XRqO(.
+s8W,os8W*!!!'e6mFBA!p"9lYs8W,os8W+L!!%NK[Wm3>X"&jVs8W,os8W'`!!#7`hY+$>G.+%O
+s8W,os8W'$!!#7`f54QTg6"]<s8W,os8W&u!!#7`H?t#ElQcUcs8W,os8W!^!!*'!hS#CkGa;e@
+s8W,os8W'`!!*'![=;5Kerg"LrVuoms8W$?!!*'!mV]LHh+4ILs8W,o^]49u!!*'!n,$-eWegj+
+s8W,oJ`$5&!!*'!r-lA`ok7/ls8W,oM5U-%!!*'!q<h0^Xq?CAs8W,o!+#@2!!3-"s)kKJo;[l_
+s8W,o!&jTP!!3-"rI2I>qj84]s8W,o!/pZG!!3-"rn15Rs._h$s8W,o!#P2+!!E9$s*gtTs6("Y
+s8W,o!!2kf!!E9$rEE:"rmo0*s8W,o!!D`k!!E9$s85cus4&lNs8W,o!!;:*!!E9$s'M=(s7h+o
+VuQel!!Von!!E9$s*H(os6>L@&-)\)!!2m\!!E9$s5'6Ks,o,8_#OH0!!E$^!"],0s.ADfs6;!2
+!3cFt!"\c?!"],0s8Tf_s8%fU!)7t<!$D,h!$D7@s$'ljs8B_-!!.TE!"](i!$D7@s6oses8Rc/
+!!",9z!$D7@s8W-!s8RUt!!!,rz!'gM`s8W-!s8RU5!!!#oz!&jlWs8W-!s8S;[!!!/sz!!$C+
+s8W-!s8V]hJ,fhaz!!!!`s8W-!s8W,u:]L[Oz!!!!0s8W-!s8W,rs.BJhz!!!!#s8W-!s8W-!
+s8W,oTE"rlz5QCc`s8W-!h>Vm8huE`Wz!WW3"s8W,ts7^m@huE`Wz!<<)^s8W-!s8Vcm^]4?7
+z!<<*!s8K`^s8U";ci=%Gz!<<&us8A#YDsd<"J,fQLz!.k1Ls2YHFkPt#OJ,fQLz!!*%'^\@p2
+cb7*oJ,fQLz!!#6rs3LlJci6fA~>
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/tiff/test/rewrite_tag.c b/tiff/test/rewrite_tag.c
index 5db3e4ba..1708b024 100644
--- a/tiff/test/rewrite_tag.c
+++ b/tiff/test/rewrite_tag.c
@@ -1,5 +1,3 @@
-/* $Id: rewrite_tag.c,v 1.9 2015-08-23 14:23:00 bfriesen Exp $ */
-
/*
* Copyright (c) 2007, Frank Warmerdam <warmerdam@pobox.com>
*
@@ -32,6 +30,7 @@
#include "tif_config.h"
#include <stdio.h>
+#include <stdlib.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
@@ -40,7 +39,6 @@
#include "tiffio.h"
#include "tiffiop.h"
-const uint32 width = 10;
const uint32 length = 40;
const uint32 rows_per_strip = 1;
@@ -51,6 +49,7 @@ int test_packbits()
int i;
unsigned char buf[10] = {0,0,0,0,0,0,0,0,0,0};
+ uint32 width = 10;
int length = 20;
const char *filename = "test_packbits.tif";
@@ -138,17 +137,20 @@ int test_packbits()
/************************************************************************/
/* rewrite_test() */
/************************************************************************/
-int rewrite_test( const char *filename, int length, int bigtiff,
+int rewrite_test( const char *filename, uint32 width, int length, int bigtiff,
uint64 base_value )
{
TIFF *tif;
int i;
- unsigned char buf[10] = {5,6,7,8,9,10,11,12,13,14};
+ unsigned char *buf;
uint64 *rowoffset, *rowbytes;
uint64 *upd_rowoffset;
uint64 *upd_bytecount;
+ buf = calloc(1, width);
+ assert(buf);
+
/* Test whether we can write tags. */
if( bigtiff )
tif = TIFFOpen(filename, "w8");
@@ -157,6 +159,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
if (!tif) {
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
+ free(buf);
return 1;
}
@@ -204,6 +207,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
tif = TIFFOpen(filename, "r+");
if (!tif) {
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
+ free(buf);
return 1;
}
@@ -221,7 +225,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
upd_rowoffset = (uint64 *) _TIFFmalloc(sizeof(uint64) * length);
for( i = 0; i < length; i++ )
- upd_rowoffset[i] = base_value + i*10;
+ upd_rowoffset[i] = base_value + i*width;
if( !_TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8,
length, upd_rowoffset ) )
@@ -234,7 +238,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
upd_bytecount = (uint64 *) _TIFFmalloc(sizeof(uint64) * length);
for( i = 0; i < length; i++ )
- upd_bytecount[i] = 100 + i*10;
+ upd_bytecount[i] = 100 + i*width;
if( !_TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8,
length, upd_bytecount ) )
@@ -252,6 +256,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
tif = TIFFOpen(filename, "r");
if (!tif) {
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
+ free(buf);
return 1;
}
@@ -263,7 +268,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
for( i = 0; i < length; i++ )
{
- uint64 expect = base_value + i*10;
+ uint64 expect = base_value + i*width;
if( rowoffset[i] != expect )
{
@@ -286,7 +291,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
for( i = 0; i < length; i++ )
{
- uint64 expect = 100 + i*10;
+ uint64 expect = 100 + i*width;
if( rowbytes[i] != expect )
{
@@ -302,6 +307,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
}
TIFFClose( tif );
+ free(buf);
/* All tests passed; delete file and exit with success status. */
unlink(filename);
@@ -310,6 +316,7 @@ int rewrite_test( const char *filename, int length, int bigtiff,
failure:
/* Something goes wrong; close file and return unsuccessful status. */
TIFFClose(tif);
+ free(buf);
/* unlink(filename); */
return 1;
@@ -327,16 +334,20 @@ main(void)
failure |= test_packbits();
/* test fairly normal use */
- failure |= rewrite_test( "rewrite1.tif", 10, 0, 100 );
- failure |= rewrite_test( "rewrite2.tif", 10, 1, 100 );
+ failure |= rewrite_test( "rewrite1.tif", 10, 10, 0, 100 );
+ failure |= rewrite_test( "rewrite2.tif", 10, 10, 1, 100 );
/* test case of fitting all in directory entry */
- failure |= rewrite_test( "rewrite3.tif", 1, 0, 100 );
- failure |= rewrite_test( "rewrite4.tif", 1, 1, 100 );
+ failure |= rewrite_test( "rewrite3.tif", 10, 1, 0, 100 );
+ failure |= rewrite_test( "rewrite4.tif", 10, 1, 1, 100 );
/* test with very large values that don't fit in 4bytes (bigtiff only) */
- failure |= rewrite_test( "rewrite5.tif", 1000, 1, 0x6000000000ULL );
- failure |= rewrite_test( "rewrite6.tif", 1, 1, 0x6000000000ULL );
+ failure |= rewrite_test( "rewrite5.tif", 10, 1000, 1, 0x6000000000ULL );
+ failure |= rewrite_test( "rewrite6.tif", 10, 1, 1, 0x6000000000ULL );
+
+ /* StripByteCounts on LONG */
+ failure |= rewrite_test( "rewrite7.tif", 65536, 1, 0, 100 );
+ failure |= rewrite_test( "rewrite8.tif", 65536, 2, 0, 100 );
return failure;
}
diff --git a/tiff/test/short_tag.c b/tiff/test/short_tag.c
index efc7da5b..75e7f5d5 100644
--- a/tiff/test/short_tag.c
+++ b/tiff/test/short_tag.c
@@ -1,5 +1,3 @@
-/* $Id: short_tag.c,v 1.9 2013-12-17 14:41:58 bfriesen Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/strip.c b/tiff/test/strip.c
index 59422262..f2cb7735 100644
--- a/tiff/test/strip.c
+++ b/tiff/test/strip.c
@@ -1,5 +1,3 @@
-/* $Id: strip.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/strip_rw.c b/tiff/test/strip_rw.c
index 5247c0b3..bcf7d735 100644
--- a/tiff/test/strip_rw.c
+++ b/tiff/test/strip_rw.c
@@ -1,5 +1,3 @@
-/* $Id: strip_rw.c,v 1.6 2008/03/28 01:42:07 bfriesen Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/test_arrays.c b/tiff/test/test_arrays.c
index 83767662..226e9d0c 100644
--- a/tiff/test/test_arrays.c
+++ b/tiff/test/test_arrays.c
@@ -1,5 +1,3 @@
-/* $Id: test_arrays.c,v 1.3 2006/03/23 14:54:02 dron Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/test_arrays.h b/tiff/test/test_arrays.h
index 5131b231..62e1d33c 100644
--- a/tiff/test/test_arrays.h
+++ b/tiff/test/test_arrays.h
@@ -1,5 +1,3 @@
-/* $Id: test_arrays.h,v 1.3 2006/03/23 14:54:02 dron Exp $ */
-
/*
* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/test/testtypes.c b/tiff/test/testtypes.c
new file mode 100644
index 00000000..a36d21e5
--- /dev/null
+++ b/tiff/test/testtypes.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2019, Thomas Bernard <miniupnp@free.fr>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * TIFF Library
+ *
+ * Module to test ASCII tags read/write functions.
+ */
+
+#include "tif_config.h"
+
+#include <stdio.h>
+
+#include "tiffio.h"
+
+#define CHECK_TYPE(t, s) \
+ if (sizeof(t) != s) { \
+ fprintf(stderr, "sizeof(" # t ")=%d, it should be %d\n", (int)sizeof(t), (int)s); \
+ return 1; \
+ }
+
+int
+main()
+{
+ CHECK_TYPE(TIFF_INT8_T, 1)
+ CHECK_TYPE(TIFF_INT16_T, 2)
+ CHECK_TYPE(TIFF_INT32_T, 4)
+ CHECK_TYPE(TIFF_INT64_T, 8)
+ CHECK_TYPE(TIFF_UINT8_T, 1)
+ CHECK_TYPE(TIFF_UINT16_T, 2)
+ CHECK_TYPE(TIFF_UINT32_T, 4)
+ CHECK_TYPE(TIFF_UINT64_T, 8)
+ CHECK_TYPE(TIFF_SIZE_T, sizeof(size_t))
+ CHECK_TYPE(TIFF_SSIZE_T, sizeof(size_t))
+ return 0;
+}
+
+/* vim: set ts=8 sts=8 sw=8 noet: */
diff --git a/tiff/test/tiff2ps-EPS1.sh b/tiff/test/tiff2ps-EPS1.sh
index ebe6f04b..b1dc82e7 100755
--- a/tiff/test/tiff2ps-EPS1.sh
+++ b/tiff/test/tiff2ps-EPS1.sh
@@ -2,5 +2,7 @@
#
# Basic sanity check for tiffps with PostScript Level 1 encapsulated output
#
+PSFILE=o-tiff2ps-EPS1.ps
. ${srcdir:-.}/common.sh
-f_test_stdout "${TIFF2PS} -e -1" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-EPS1.ps" \ No newline at end of file
+f_test_stdout "${TIFF2PS} -e -1" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}"
+diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1
diff --git a/tiff/test/tiff2ps-PS1.sh b/tiff/test/tiff2ps-PS1.sh
index 65921597..73171b98 100755
--- a/tiff/test/tiff2ps-PS1.sh
+++ b/tiff/test/tiff2ps-PS1.sh
@@ -2,5 +2,7 @@
#
# Basic sanity check for tiffps with PostScript Level 1 output
#
+PSFILE="o-tiff2ps-PS1.ps"
. ${srcdir:-.}/common.sh
-f_test_stdout "${TIFF2PS} -a -p -1" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS1.ps" \ No newline at end of file
+f_test_stdout "${TIFF2PS} -a -p -1" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}"
+diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1
diff --git a/tiff/test/tiff2ps-PS2.sh b/tiff/test/tiff2ps-PS2.sh
index 2a216069..9d3a521d 100755
--- a/tiff/test/tiff2ps-PS2.sh
+++ b/tiff/test/tiff2ps-PS2.sh
@@ -2,5 +2,7 @@
#
# Basic sanity check for tiffps with PostScript Level 2 output
#
+PSFILE=o-tiff2ps-PS2.ps
. ${srcdir:-.}/common.sh
-f_test_stdout "${TIFF2PS} -a -p -2" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS2.ps" \ No newline at end of file
+f_test_stdout "${TIFF2PS} -a -p -2" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}"
+diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1
diff --git a/tiff/test/tiff2ps-PS3.sh b/tiff/test/tiff2ps-PS3.sh
index f9f34b66..eb55b9a0 100755
--- a/tiff/test/tiff2ps-PS3.sh
+++ b/tiff/test/tiff2ps-PS3.sh
@@ -2,5 +2,7 @@
#
# Basic sanity check for tiffps with PostScript Level 3 output
#
+PSFILE=o-tiff2ps-PS3.ps
. ${srcdir:-.}/common.sh
-f_test_stdout "${TIFF2PS} -a -p -3" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS3.ps" \ No newline at end of file
+f_test_stdout "${TIFF2PS} -a -p -3" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}"
+diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1
diff --git a/tiff/test/tiffcp-lzw-scanline-decode.sh b/tiff/test/tiffcp-lzw-scanline-decode.sh
new file mode 100755
index 00000000..11654d19
--- /dev/null
+++ b/tiff/test/tiffcp-lzw-scanline-decode.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+#
+# Basic sanity check for tiffcp with LZW decompression
+#
+. ${srcdir:-.}/common.sh
+f_test_convert "${TIFFCP} -c none -r 1" "${IMG_LZW_SINGLE_STROP}" "o-tiffcp-lzw-scanline-decode.tiff" \ No newline at end of file
diff --git a/tiff/test/tifftest.h b/tiff/test/tifftest.h
index 33052064..391b0f64 100644
--- a/tiff/test/tifftest.h
+++ b/tiff/test/tifftest.h
@@ -1,5 +1,3 @@
-/* $Id: tifftest.h,v 1.1 2008/04/15 14:18:36 dron Exp $ */
-
/*
* Copyright (c) 2008, Andrey Kiselev <dron@ak4719.spb.edu>
*
diff --git a/tiff/tools/CMakeLists.txt b/tiff/tools/CMakeLists.txt
index 331f83c0..886d4549 100644
--- a/tiff/tools/CMakeLists.txt
+++ b/tiff/tools/CMakeLists.txt
@@ -118,7 +118,7 @@ if(HAVE_OPENGL)
endif()
add_executable(tiffgt tiffgt.c)
- target_link_libraries(tiffgt tiff ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
+ target_link_libraries(tiffgt tiff port ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
install(TARGETS tiffgt
RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}")
diff --git a/tiff/tools/Makefile.in b/tiff/tools/Makefile.in
index d7d56040..7ec4ed62 100644
--- a/tiff/tools/Makefile.in
+++ b/tiff/tools/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -132,7 +132,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \
$(top_builddir)/libtiff/tiffconf.h
CONFIG_CLEAN_FILES =
@@ -226,7 +226,18 @@ am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/fax2ps.Po ./$(DEPDIR)/fax2tiff.Po \
+ ./$(DEPDIR)/pal2rgb.Po ./$(DEPDIR)/ppm2tiff.Po \
+ ./$(DEPDIR)/raw2tiff.Po ./$(DEPDIR)/rgb2ycbcr.Po \
+ ./$(DEPDIR)/thumbnail.Po ./$(DEPDIR)/tiff2bw.Po \
+ ./$(DEPDIR)/tiff2pdf.Po ./$(DEPDIR)/tiff2ps.Po \
+ ./$(DEPDIR)/tiff2rgba.Po ./$(DEPDIR)/tiffcmp.Po \
+ ./$(DEPDIR)/tiffcp.Po ./$(DEPDIR)/tiffcrop.Po \
+ ./$(DEPDIR)/tiffdither.Po ./$(DEPDIR)/tiffdump.Po \
+ ./$(DEPDIR)/tiffgt-tiffgt.Po ./$(DEPDIR)/tiffinfo.Po \
+ ./$(DEPDIR)/tiffmedian.Po ./$(DEPDIR)/tiffset.Po \
+ ./$(DEPDIR)/tiffsplit.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -285,8 +296,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
- $(top_srcdir)/config/mkinstalldirs
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -508,8 +518,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
*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);; \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -669,27 +679,33 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2ps.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2tiff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pal2rgb.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppm2tiff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw2tiff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb2ycbcr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thumbnail.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2bw.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2pdf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2ps.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2rgba.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcrop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdither.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdump.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffgt-tiffgt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffinfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffmedian.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffsplit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2ps.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2tiff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pal2rgb.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppm2tiff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw2tiff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb2ycbcr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thumbnail.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2bw.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2pdf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2ps.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2rgba.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcrop.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdither.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdump.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffgt-tiffgt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffinfo.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffmedian.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffsplit.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -784,7 +800,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -858,7 +877,27 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
clean-libtool mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/fax2ps.Po
+ -rm -f ./$(DEPDIR)/fax2tiff.Po
+ -rm -f ./$(DEPDIR)/pal2rgb.Po
+ -rm -f ./$(DEPDIR)/ppm2tiff.Po
+ -rm -f ./$(DEPDIR)/raw2tiff.Po
+ -rm -f ./$(DEPDIR)/rgb2ycbcr.Po
+ -rm -f ./$(DEPDIR)/thumbnail.Po
+ -rm -f ./$(DEPDIR)/tiff2bw.Po
+ -rm -f ./$(DEPDIR)/tiff2pdf.Po
+ -rm -f ./$(DEPDIR)/tiff2ps.Po
+ -rm -f ./$(DEPDIR)/tiff2rgba.Po
+ -rm -f ./$(DEPDIR)/tiffcmp.Po
+ -rm -f ./$(DEPDIR)/tiffcp.Po
+ -rm -f ./$(DEPDIR)/tiffcrop.Po
+ -rm -f ./$(DEPDIR)/tiffdither.Po
+ -rm -f ./$(DEPDIR)/tiffdump.Po
+ -rm -f ./$(DEPDIR)/tiffgt-tiffgt.Po
+ -rm -f ./$(DEPDIR)/tiffinfo.Po
+ -rm -f ./$(DEPDIR)/tiffmedian.Po
+ -rm -f ./$(DEPDIR)/tiffset.Po
+ -rm -f ./$(DEPDIR)/tiffsplit.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -904,7 +943,27 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -f ./$(DEPDIR)/fax2ps.Po
+ -rm -f ./$(DEPDIR)/fax2tiff.Po
+ -rm -f ./$(DEPDIR)/pal2rgb.Po
+ -rm -f ./$(DEPDIR)/ppm2tiff.Po
+ -rm -f ./$(DEPDIR)/raw2tiff.Po
+ -rm -f ./$(DEPDIR)/rgb2ycbcr.Po
+ -rm -f ./$(DEPDIR)/thumbnail.Po
+ -rm -f ./$(DEPDIR)/tiff2bw.Po
+ -rm -f ./$(DEPDIR)/tiff2pdf.Po
+ -rm -f ./$(DEPDIR)/tiff2ps.Po
+ -rm -f ./$(DEPDIR)/tiff2rgba.Po
+ -rm -f ./$(DEPDIR)/tiffcmp.Po
+ -rm -f ./$(DEPDIR)/tiffcp.Po
+ -rm -f ./$(DEPDIR)/tiffcrop.Po
+ -rm -f ./$(DEPDIR)/tiffdither.Po
+ -rm -f ./$(DEPDIR)/tiffdump.Po
+ -rm -f ./$(DEPDIR)/tiffgt-tiffgt.Po
+ -rm -f ./$(DEPDIR)/tiffinfo.Po
+ -rm -f ./$(DEPDIR)/tiffmedian.Po
+ -rm -f ./$(DEPDIR)/tiffset.Po
+ -rm -f ./$(DEPDIR)/tiffsplit.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -925,7 +984,7 @@ uninstall-am: uninstall-binPROGRAMS
.MAKE: check-am install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
clean-libtool cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
diff --git a/tiff/tools/Makefile.vc b/tiff/tools/Makefile.vc
index 646c7677..453db43e 100644
--- a/tiff/tools/Makefile.vc
+++ b/tiff/tools/Makefile.vc
@@ -1,4 +1,3 @@
-# $Id: Makefile.vc,v 1.16 2016-06-05 19:54:03 bfriesen Exp $
#
# Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
#
diff --git a/tiff/tools/fax2ps.c b/tiff/tools/fax2ps.c
index c4953315..274b29e4 100644
--- a/tiff/tools/fax2ps.c
+++ b/tiff/tools/fax2ps.c
@@ -1,5 +1,3 @@
-/* $Id: fax2ps.c,v 1.31 2015-09-06 18:24:27 bfriesen Exp $" */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/tools/fax2tiff.c b/tiff/tools/fax2tiff.c
index f23374e0..21223131 100644
--- a/tiff/tools/fax2tiff.c
+++ b/tiff/tools/fax2tiff.c
@@ -1,5 +1,3 @@
-/* $Id: fax2tiff.c,v 1.28 2017-10-29 18:28:45 bfriesen Exp $ */
-
/*
* Copyright (c) 1990-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -76,14 +74,10 @@ static void usage(void);
Struct to carry client data. Note that it does not appear that the client
data is actually used in this program.
*/
-typedef struct _FAX_Client_Data
+typedef union _FAX_Client_Data
{
-#if defined(_WIN32) && defined(USE_WIN32_FILEIO)
- intptr_t fh; /* Operating system file handle */
-#else
- int fd; /* Integer file descriptor */
-#endif
-
+ thandle_t fh; /* Operating system file handle */
+ int fd; /* Integer file descriptor */
} FAX_Client_Data;
int
@@ -91,7 +85,7 @@ main(int argc, char* argv[])
{
FILE *in;
TIFF *out = NULL;
- FAX_Client_Data client_data;
+ FAX_Client_Data client_data;
TIFFErrorHandler whandler = NULL;
int compression_in = COMPRESSION_CCITTFAX3;
int compression_out = COMPRESSION_CCITTFAX3;
@@ -282,11 +276,11 @@ main(int argc, char* argv[])
continue;
}
#if defined(_WIN32) && defined(USE_WIN32_FILEIO)
- client_data.fh = _get_osfhandle(fileno(in));
+ client_data.fh = (thandle_t)_get_osfhandle(fileno(in));
#else
- client_data.fd = fileno(in);
+ client_data.fd = fileno(in);
#endif
- TIFFSetClientdata(faxTIFF, (thandle_t) &client_data);
+ TIFFSetClientdata(faxTIFF, client_data.fh);
TIFFSetFileName(faxTIFF, (const char*)argv[optind]);
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, xsize);
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 1);
diff --git a/tiff/tools/pal2rgb.c b/tiff/tools/pal2rgb.c
index 7a578006..9492f1cf 100644
--- a/tiff/tools/pal2rgb.c
+++ b/tiff/tools/pal2rgb.c
@@ -1,5 +1,3 @@
-/* $Id: pal2rgb.c,v 1.15 2015-06-21 01:09:10 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -120,12 +118,14 @@ main(int argc, char* argv[])
shortv != PHOTOMETRIC_PALETTE) {
fprintf(stderr, "%s: Expecting a palette image.\n",
argv[optind]);
+ (void) TIFFClose(in);
return (-1);
}
if (!TIFFGetField(in, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) {
fprintf(stderr,
"%s: No colormap (not a valid palette image).\n",
argv[optind]);
+ (void) TIFFClose(in);
return (-1);
}
bitspersample = 0;
@@ -133,11 +133,14 @@ main(int argc, char* argv[])
if (bitspersample != 8) {
fprintf(stderr, "%s: Sorry, can only handle 8-bit images.\n",
argv[optind]);
+ (void) TIFFClose(in);
return (-1);
}
out = TIFFOpen(argv[optind+1], "w");
- if (out == NULL)
+ if (out == NULL) {
+ (void) TIFFClose(in);
return (-2);
+ }
cpTags(in, out);
TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &imagewidth);
TIFFGetField(in, TIFFTAG_IMAGELENGTH, &imagelength);
@@ -184,8 +187,21 @@ main(int argc, char* argv[])
{ unsigned char *ibuf, *obuf;
register unsigned char* pp;
register uint32 x;
- ibuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(in));
- obuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(out));
+ tmsize_t tss_in = TIFFScanlineSize(in);
+ tmsize_t tss_out = TIFFScanlineSize(out);
+ if (tss_out / tss_in < 3) {
+ /*
+ * BUG 2750: The following code does not know about chroma
+ * subsampling of JPEG data. It assumes that the output buffer is 3x
+ * the length of the input buffer due to exploding the palette into
+ * RGB tuples. If this assumption is incorrect, it could lead to a
+ * buffer overflow. Go ahead and fail now to prevent that.
+ */
+ fprintf(stderr, "Could not determine correct image size for output. Exiting.\n");
+ return -1;
+ }
+ ibuf = (unsigned char*)_TIFFmalloc(tss_in);
+ obuf = (unsigned char*)_TIFFmalloc(tss_out);
switch (config) {
case PLANARCONFIG_CONTIG:
for (row = 0; row < imagelength; row++) {
@@ -391,7 +407,23 @@ cpTags(TIFF* in, TIFF* out)
{
struct cpTag *p;
for (p = tags; p < &tags[NTAGS]; p++)
- cpTag(in, out, p->tag, p->count, p->type);
+ {
+ if( p->tag == TIFFTAG_GROUP3OPTIONS )
+ {
+ uint16 compression;
+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
+ compression != COMPRESSION_CCITTFAX3 )
+ continue;
+ }
+ if( p->tag == TIFFTAG_GROUP4OPTIONS )
+ {
+ uint16 compression;
+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
+ compression != COMPRESSION_CCITTFAX4 )
+ continue;
+ }
+ cpTag(in, out, p->tag, p->count, p->type);
+ }
}
#undef NTAGS
diff --git a/tiff/tools/ppm2tiff.c b/tiff/tools/ppm2tiff.c
index 91415e96..2b275618 100644
--- a/tiff/tools/ppm2tiff.c
+++ b/tiff/tools/ppm2tiff.c
@@ -1,5 +1,3 @@
-/* $Id: ppm2tiff.c,v 1.19 2015-06-21 01:09:10 bfriesen Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -50,7 +48,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#define streq(a,b) (strcmp(a,b) == 0)
@@ -72,15 +70,16 @@ BadPPM(char* file)
exit(-2);
}
+
+#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0))
+#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1)
+
static tmsize_t
multiply_ms(tmsize_t m1, tmsize_t m2)
{
- tmsize_t bytes = m1 * m2;
-
- if (m1 && bytes / m1 != m2)
- bytes = 0;
-
- return bytes;
+ if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 )
+ return 0;
+ return m1 * m2;
}
int
@@ -284,6 +283,8 @@ main(int argc, char* argv[])
if (TIFFWriteScanline(out, buf, row, 0) < 0)
break;
}
+ if (in != stdin)
+ fclose(in);
(void) TIFFClose(out);
if (buf)
_TIFFfree(buf);
diff --git a/tiff/tools/raw2tiff.c b/tiff/tools/raw2tiff.c
index 083e9ee7..ab36ff4e 100644
--- a/tiff/tools/raw2tiff.c
+++ b/tiff/tools/raw2tiff.c
@@ -1,5 +1,4 @@
-/* $Id: raw2tiff.c,v 1.29 2017-01-14 13:12:33 erouault Exp $
- *
+/*
* Project: libtiff tools
* Purpose: Convert raw byte sequences in TIFF images
* Author: Andrey Kiselev, dron@ak4719.spb.edu
@@ -61,7 +60,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#ifndef O_BINARY
diff --git a/tiff/tools/rgb2ycbcr.c b/tiff/tools/rgb2ycbcr.c
index 7a9d705e..cf5f956f 100644
--- a/tiff/tools/rgb2ycbcr.c
+++ b/tiff/tools/rgb2ycbcr.c
@@ -1,5 +1,3 @@
-/* $Id: rgb2ycbcr.c,v 1.17 2016-08-15 21:26:56 erouault Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/tools/thumbnail.c b/tiff/tools/thumbnail.c
index ab6a1d28..169a6369 100644
--- a/tiff/tools/thumbnail.c
+++ b/tiff/tools/thumbnail.c
@@ -1,5 +1,3 @@
-/* $Id: thumbnail.c,v 1.21 2015-06-21 01:09:10 bfriesen Exp $ */
-
/*
* Copyright (c) 1994-1997 Sam Leffler
* Copyright (c) 1994-1997 Silicon Graphics, Inc.
@@ -42,7 +40,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#define streq(a,b) (strcmp(a,b) == 0)
@@ -527,15 +525,15 @@ setrow(uint8* row, uint32 nrows, const uint8* rows[])
default:
for (i = fw; i > 8; i--)
acc += bits[*src++];
- /* fall thru... */
- case 8: acc += bits[*src++];
- case 7: acc += bits[*src++];
- case 6: acc += bits[*src++];
- case 5: acc += bits[*src++];
- case 4: acc += bits[*src++];
- case 3: acc += bits[*src++];
- case 2: acc += bits[*src++];
- case 1: acc += bits[*src++];
+ /* fall through... */
+ case 8: acc += bits[*src++]; /* fall through */
+ case 7: acc += bits[*src++]; /* fall through */
+ case 6: acc += bits[*src++]; /* fall through */
+ case 5: acc += bits[*src++]; /* fall through */
+ case 4: acc += bits[*src++]; /* fall through */
+ case 3: acc += bits[*src++]; /* fall through */
+ case 2: acc += bits[*src++]; /* fall through */
+ case 1: acc += bits[*src++]; /* fall through */
case 0: break;
}
acc += bits[*src & mask1];
diff --git a/tiff/tools/tiff2bw.c b/tiff/tools/tiff2bw.c
index dad54afa..dbc697b0 100644
--- a/tiff/tools/tiff2bw.c
+++ b/tiff/tools/tiff2bw.c
@@ -1,5 +1,3 @@
-/* $Id: tiff2bw.c,v 1.21 2017-11-01 13:41:58 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -40,9 +38,7 @@
#endif
#include "tiffio.h"
-
-#define streq(a,b) (strcmp((a),(b)) == 0)
-#define strneq(a,b,n) (strncmp(a,b,n) == 0)
+#include "tiffiop.h"
/* x% weighting -> fraction of full color */
#define PCT(x) (((x)*256+50)/100)
@@ -223,6 +219,11 @@ main(int argc, char* argv[])
TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing);
TIFFSetField(out, TIFFTAG_SOFTWARE, "tiff2bw");
outbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));
+ if( !outbuf )
+ {
+ fprintf(stderr, "Out of memory\n");
+ goto tiff2bw_error;
+ }
TIFFSetField(out, TIFFTAG_ROWSPERSTRIP,
TIFFDefaultStripSize(out, rowsperstrip));
@@ -246,6 +247,11 @@ main(int argc, char* argv[])
#undef CVT
}
inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in));
+ if( !inbuf )
+ {
+ fprintf(stderr, "Out of memory\n");
+ goto tiff2bw_error;
+ }
for (row = 0; row < h; row++) {
if (TIFFReadScanline(in, inbuf, row, 0) < 0)
break;
@@ -256,6 +262,11 @@ main(int argc, char* argv[])
break;
case pack(PHOTOMETRIC_RGB, PLANARCONFIG_CONTIG):
inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in));
+ if( !inbuf )
+ {
+ fprintf(stderr, "Out of memory\n");
+ goto tiff2bw_error;
+ }
for (row = 0; row < h; row++) {
if (TIFFReadScanline(in, inbuf, row, 0) < 0)
break;
@@ -265,8 +276,16 @@ main(int argc, char* argv[])
}
break;
case pack(PHOTOMETRIC_RGB, PLANARCONFIG_SEPARATE):
+ {
+ tmsize_t inbufsize;
rowsize = TIFFScanlineSize(in);
- inbuf = (unsigned char *)_TIFFmalloc(3*rowsize);
+ inbufsize = TIFFSafeMultiply(tmsize_t, 3, rowsize);
+ inbuf = (unsigned char *)_TIFFmalloc(inbufsize);
+ if( !inbuf )
+ {
+ fprintf(stderr, "Out of memory\n");
+ goto tiff2bw_error;
+ }
for (row = 0; row < h; row++) {
for (s = 0; s < 3; s++)
if (TIFFReadScanline(in,
@@ -278,6 +297,7 @@ main(int argc, char* argv[])
break;
}
break;
+ }
}
#undef pack
if (inbuf)
@@ -452,7 +472,23 @@ cpTags(TIFF* in, TIFF* out)
{
struct cpTag *p;
for (p = tags; p < &tags[NTAGS]; p++)
- cpTag(in, out, p->tag, p->count, p->type);
+ {
+ if( p->tag == TIFFTAG_GROUP3OPTIONS )
+ {
+ uint16 compression;
+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
+ compression != COMPRESSION_CCITTFAX3 )
+ continue;
+ }
+ if( p->tag == TIFFTAG_GROUP4OPTIONS )
+ {
+ uint16 compression;
+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) ||
+ compression != COMPRESSION_CCITTFAX4 )
+ continue;
+ }
+ cpTag(in, out, p->tag, p->count, p->type);
+ }
}
#undef NTAGS
diff --git a/tiff/tools/tiff2pdf.c b/tiff/tools/tiff2pdf.c
index 454befbd..779c1662 100644
--- a/tiff/tools/tiff2pdf.c
+++ b/tiff/tools/tiff2pdf.c
@@ -1,4 +1,4 @@
-/* $Id: tiff2pdf.c,v 1.103 2017-10-29 18:50:41 bfriesen Exp $
+/*
*
* tiff2pdf - converts a TIFF image to a PDF document
*
@@ -54,7 +54,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#ifndef EXIT_SUCCESS
@@ -68,6 +68,8 @@ extern int getopt(int, char**, char*);
#define PS_UNIT_SIZE 72.0F
+#define TIFF_DIR_MAX 65534
+
/* This type is of PDF color spaces. */
typedef enum {
T2P_CS_BILEVEL = 0x01, /* Bilevel, black and white */
@@ -237,7 +239,7 @@ typedef struct {
float tiff_whitechromaticities[2];
float tiff_primarychromaticities[6];
float tiff_referenceblackwhite[2];
- float* tiff_transferfunction[3];
+ uint16* tiff_transferfunction[3];
int pdf_image_interpolate; /* 0 (default) : do not interpolate,
1 : interpolate */
uint16 tiff_transferfunctioncount;
@@ -1047,8 +1049,18 @@ void t2p_read_tiff_init(T2P* t2p, TIFF* input){
uint16 pagen=0;
uint16 paged=0;
uint16 xuint16=0;
+ uint16 tiff_transferfunctioncount=0;
+ uint16* tiff_transferfunction[3];
directorycount=TIFFNumberOfDirectories(input);
+ if(directorycount > TIFF_DIR_MAX) {
+ TIFFError(
+ TIFF2PDF_MODULE,
+ "TIFF contains too many directories, %s",
+ TIFFFileName(input));
+ t2p->t2p_error = T2P_ERR_ERROR;
+ return;
+ }
t2p->tiff_pages = (T2P_PAGE*) _TIFFmalloc(TIFFSafeMultiply(tmsize_t,directorycount,sizeof(T2P_PAGE)));
if(t2p->tiff_pages==NULL){
TIFFError(
@@ -1147,26 +1159,48 @@ void t2p_read_tiff_init(T2P* t2p, TIFF* input){
}
#endif
if (TIFFGetField(input, TIFFTAG_TRANSFERFUNCTION,
- &(t2p->tiff_transferfunction[0]),
- &(t2p->tiff_transferfunction[1]),
- &(t2p->tiff_transferfunction[2]))) {
- if((t2p->tiff_transferfunction[1] != (float*) NULL) &&
- (t2p->tiff_transferfunction[2] != (float*) NULL) &&
- (t2p->tiff_transferfunction[1] !=
- t2p->tiff_transferfunction[0])) {
- t2p->tiff_transferfunctioncount = 3;
- t2p->tiff_pages[i].page_extra += 4;
- t2p->pdf_xrefcount += 4;
- } else {
- t2p->tiff_transferfunctioncount = 1;
- t2p->tiff_pages[i].page_extra += 2;
- t2p->pdf_xrefcount += 2;
- }
- if(t2p->pdf_minorversion < 2)
- t2p->pdf_minorversion = 2;
+ &(tiff_transferfunction[0]),
+ &(tiff_transferfunction[1]),
+ &(tiff_transferfunction[2]))) {
+
+ if((tiff_transferfunction[1] != (uint16*) NULL) &&
+ (tiff_transferfunction[2] != (uint16*) NULL)
+ ) {
+ tiff_transferfunctioncount=3;
+ } else {
+ tiff_transferfunctioncount=1;
+ }
} else {
- t2p->tiff_transferfunctioncount=0;
+ tiff_transferfunctioncount=0;
}
+
+ if (i > 0){
+ if (tiff_transferfunctioncount != t2p->tiff_transferfunctioncount){
+ TIFFError(
+ TIFF2PDF_MODULE,
+ "Different transfer function on page %d",
+ i);
+ t2p->t2p_error = T2P_ERR_ERROR;
+ return;
+ }
+ }
+
+ t2p->tiff_transferfunctioncount = tiff_transferfunctioncount;
+ t2p->tiff_transferfunction[0] = tiff_transferfunction[0];
+ t2p->tiff_transferfunction[1] = tiff_transferfunction[1];
+ t2p->tiff_transferfunction[2] = tiff_transferfunction[2];
+ if(tiff_transferfunctioncount == 3){
+ t2p->tiff_pages[i].page_extra += 4;
+ t2p->pdf_xrefcount += 4;
+ if(t2p->pdf_minorversion < 2)
+ t2p->pdf_minorversion = 2;
+ } else if (tiff_transferfunctioncount == 1){
+ t2p->tiff_pages[i].page_extra += 2;
+ t2p->pdf_xrefcount += 2;
+ if(t2p->pdf_minorversion < 2)
+ t2p->pdf_minorversion = 2;
+ }
+
if( TIFFGetField(
input,
TIFFTAG_ICCPROFILE,
@@ -1258,10 +1292,10 @@ int t2p_cmp_t2p_page(const void* e1, const void* e2){
void t2p_read_tiff_data(T2P* t2p, TIFF* input){
int i=0;
- uint16* r;
- uint16* g;
- uint16* b;
- uint16* a;
+ uint16* r = NULL;
+ uint16* g = NULL;
+ uint16* b = NULL;
+ uint16* a = NULL;
uint16 xuint16;
uint16* xuint16p;
float* xfloatp;
@@ -1488,12 +1522,19 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){
t2p->pdf_palettesize=0x0001<<t2p->tiff_bitspersample;
if(!TIFFGetField(input, TIFFTAG_COLORMAP, &r, &g, &b)){
TIFFError(
- TIFF2PDF_MODULE,
- "Palettized image %s has no color map",
+ TIFF2PDF_MODULE,
+ "Palettized image %s has no color map",
TIFFFileName(input));
t2p->t2p_error = T2P_ERR_ERROR;
return;
- }
+ }
+ if(r == NULL || g == NULL || b == NULL){
+ TIFFError(
+ TIFF2PDF_MODULE,
+ "Error getting 3 components from color map");
+ t2p->t2p_error = T2P_ERR_ERROR;
+ return;
+ }
if(t2p->pdf_palette != NULL){
_TIFFfree(t2p->pdf_palette);
t2p->pdf_palette=NULL;
@@ -1557,12 +1598,19 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){
t2p->pdf_palettesize=0x0001<<t2p->tiff_bitspersample;
if(!TIFFGetField(input, TIFFTAG_COLORMAP, &r, &g, &b, &a)){
TIFFError(
- TIFF2PDF_MODULE,
- "Palettized image %s has no color map",
+ TIFF2PDF_MODULE,
+ "Palettized image %s has no color map",
TIFFFileName(input));
t2p->t2p_error = T2P_ERR_ERROR;
return;
- }
+ }
+ if(r == NULL || g == NULL || b == NULL || a == NULL){
+ TIFFError(
+ TIFF2PDF_MODULE,
+ "Error getting 4 components from color map");
+ t2p->t2p_error = T2P_ERR_ERROR;
+ return;
+ }
if(t2p->pdf_palette != NULL){
_TIFFfree(t2p->pdf_palette);
t2p->pdf_palette=NULL;
@@ -1827,10 +1875,9 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){
&(t2p->tiff_transferfunction[0]),
&(t2p->tiff_transferfunction[1]),
&(t2p->tiff_transferfunction[2]))) {
- if((t2p->tiff_transferfunction[1] != (float*) NULL) &&
- (t2p->tiff_transferfunction[2] != (float*) NULL) &&
- (t2p->tiff_transferfunction[1] !=
- t2p->tiff_transferfunction[0])) {
+ if((t2p->tiff_transferfunction[1] != (uint16*) NULL) &&
+ (t2p->tiff_transferfunction[2] != (uint16*) NULL)
+ ) {
t2p->tiff_transferfunctioncount=3;
} else {
t2p->tiff_transferfunctioncount=1;
@@ -2987,6 +3034,7 @@ tsize_t t2p_readwrite_pdf_image_tile(T2P* t2p, TIFF* input, TIFF* output, ttile_
"for t2p_readwrite_pdf_image_tile, %s",
(unsigned long) t2p->tiff_datasize,
TIFFFileName(input));
+ _TIFFfree(buffer);
t2p->t2p_error = T2P_ERR_ERROR;
return(0);
}
@@ -3070,19 +3118,26 @@ tsize_t t2p_readwrite_pdf_image_tile(T2P* t2p, TIFF* input, TIFF* output, ttile_
if(t2p->pdf_sample & T2P_SAMPLE_LAB_SIGNED_TO_UNSIGNED){
t2p->tiff_datasize=t2p_sample_lab_signed_to_unsigned(
- (tdata_t)buffer,
+ (tdata_t)buffer,
t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth
*t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength);
}
}
if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile) != 0){
- t2p_tile_collapse_left(
- buffer,
- TIFFTileRowSize(input),
- t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth,
- t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth,
- t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength);
+ if ((uint64)t2p->tiff_datasize < (uint64)TIFFTileRowSize(input) * (uint64)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength) {
+ /* we don't know how to handle PLANARCONFIG_CONTIG, PHOTOMETRIC_YCBCR with 3 samples per pixel */
+ TIFFWarning(
+ TIFF2PDF_MODULE,
+ "Don't know how to collapse tile to the left");
+ } else {
+ t2p_tile_collapse_left(
+ buffer,
+ TIFFTileRowSize(input),
+ t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth,
+ t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth,
+ t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength);
+ }
}
@@ -3713,12 +3768,13 @@ tsize_t
t2p_sample_rgbaa_to_rgb(tdata_t data, uint32 samplecount)
{
uint32 i;
-
- /* For the 3 first samples, there is overlapping between souce and
- destination, so use memmove().
- See http://bugzilla.maptools.org/show_bug.cgi?id=2577 */
- for(i = 0; i < 3 && i < samplecount; i++)
- memmove((uint8*)data + i * 3, (uint8*)data + i * 4, 3);
+
+ /* For the 3 first samples, there is overlap between source and
+ * destination, so use memmove().
+ * See http://bugzilla.maptools.org/show_bug.cgi?id=2577
+ */
+ for(i = 0; i < 3 && i < samplecount; i++)
+ memmove((uint8*)data + i * 3, (uint8*)data + i * 4, 3);
for(; i < samplecount; i++)
memcpy((uint8*)data + i * 3, (uint8*)data + i * 4, 3);
@@ -4217,13 +4273,13 @@ void t2p_pdf_currenttime(T2P* t2p)
currenttime = localtime(&timenow);
snprintf(t2p->pdf_datetime, sizeof(t2p->pdf_datetime),
- "D:%.4d%.2d%.2d%.2d%.2d%.2d",
- (currenttime->tm_year + 1900) % 65536,
- (currenttime->tm_mon + 1) % 256,
- (currenttime->tm_mday) % 256,
- (currenttime->tm_hour) % 256,
- (currenttime->tm_min) % 256,
- (currenttime->tm_sec) % 256);
+ "D:%.4u%.2u%.2u%.2u%.2u%.2u",
+ TIFFmin((unsigned) currenttime->tm_year + 1900U,9999U),
+ TIFFmin((unsigned) currenttime->tm_mon + 1U,12U), /* 0-11 + 1 */
+ TIFFmin((unsigned) currenttime->tm_mday,31U), /* 1-31 */
+ TIFFmin((unsigned) currenttime->tm_hour,23U), /* 0-23 */
+ TIFFmin((unsigned) currenttime->tm_min,59U), /* 0-59 */
+ TIFFmin((unsigned) (currenttime->tm_sec),60U)); /* 0-60 */
return;
}
diff --git a/tiff/tools/tiff2ps.c b/tiff/tools/tiff2ps.c
index f1f0b372..5874aba6 100644
--- a/tiff/tools/tiff2ps.c
+++ b/tiff/tools/tiff2ps.c
@@ -1,5 +1,3 @@
-/* $Id: tiff2ps.c,v 1.56 2017-04-27 15:46:22 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -63,7 +61,7 @@
* if not specified on the command line.
* Add new command line option to specify document creator
* as an alterntive to the string "tiff2ps" following model
- * of patch submitted by Thomas Jarosch for specifiying a
+ * of patch submitted by Thomas Jarosch for specifying a
* document title which is also supported now.
*
* 2009-Feb-11
@@ -73,7 +71,7 @@
* or landscape) if -h or -w is specified. Rotation is in
* degrees counterclockwise since that is how Postscript does
* it. The auto opption rotates the image 90 degrees ccw to
- * produce landscape if that is a better fit than portait.
+ * produce landscape if that is a better fit than portrait.
*
* Cleaned up code in TIFF2PS and broke into smaller functions
* to simplify rotations.
@@ -520,7 +518,7 @@ checkImage(TIFF* tif)
"PhotometricInterpretation=YCbCr");
return (0);
}
- /* fall thru... */
+ /* fall through... */
case PHOTOMETRIC_RGB:
if (alpha && bitspersample != 8) {
TIFFError(filename,
@@ -528,7 +526,7 @@ checkImage(TIFF* tif)
bitspersample);
return (0);
}
- /* fall thru... */
+ /* fall through... */
case PHOTOMETRIC_SEPARATED:
case PHOTOMETRIC_PALETTE:
case PHOTOMETRIC_MINISBLACK:
@@ -552,7 +550,7 @@ checkImage(TIFF* tif)
bitspersample = 8;
break;
case PHOTOMETRIC_CIELAB:
- /* fall thru... */
+ /* fall through... */
default:
TIFFError(filename,
"Can not handle image with PhotometricInterpretation=%d",
@@ -684,8 +682,8 @@ isCCITTCompression(TIFF* tif)
static tsize_t tf_bytesperrow;
static tsize_t ps_bytesperrow;
-static tsize_t tf_rowsperstrip;
-static tsize_t tf_numberstrips;
+static uint32 tf_rowsperstrip;
+static uint32 tf_numberstrips;
static char *hex = "0123456789abcdef";
/*
@@ -1800,7 +1798,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h)
int use_rawdata;
uint32 tile_width, tile_height;
uint16 predictor, minsamplevalue, maxsamplevalue;
- int repeat_count;
+ uint32 repeat_count;
char im_h[64], im_x[64], im_y[64];
char * imageOp = "image";
@@ -1852,7 +1850,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h)
fputs("{ % exec\n", fd);
if (repeat_count > 1)
- fprintf(fd, "%d { %% repeat\n", repeat_count);
+ fprintf(fd, "%u { %% repeat\n", repeat_count);
/*
* Output filter options and image dictionary.
@@ -2266,7 +2264,7 @@ PS_Lvl2page(FILE* fd, TIFF* tif, uint32 w, uint32 h)
if (alpha) {
int adjust, i, j = 0;
int ncomps = samplesperpixel - extrasamples;
- for (i = 0; i < byte_count; i+=samplesperpixel) {
+ for (i = 0; (i + ncomps) < byte_count; i+=samplesperpixel) {
adjust = 255 - buf_data[i + ncomps];
switch (ncomps) {
case 1:
@@ -2446,9 +2444,9 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc)
unsigned char *cp, c;
(void) w;
- if( es <= 0 )
+ if( es < 0 )
{
- TIFFError(filename, "Inconsistent value of es: %d", es);
+ TIFFError(filename, "Inconsistent value of es: %d (samplesperpixel=%u, nc=%d)", es, samplesperpixel, nc);
return;
}
tf_buf = (unsigned char *) _TIFFmalloc(tf_bytesperrow);
@@ -2470,7 +2468,7 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc)
if (alpha) {
int adjust;
cc = 0;
- for (; cc < tf_bytesperrow; cc += samplesperpixel) {
+ for (; (cc + nc) <= tf_bytesperrow; cc += samplesperpixel) {
DOBREAK(breaklen, nc, fd);
/*
* For images with alpha, matte against
@@ -2489,7 +2487,7 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc)
}
} else {
cc = 0;
- for (; cc < tf_bytesperrow; cc += samplesperpixel) {
+ for (; (cc + nc) <= tf_bytesperrow; cc += samplesperpixel) {
DOBREAK(breaklen, nc, fd);
switch (nc) {
case 4: c = *cp++; PUTHEX(c,fd);
@@ -2768,7 +2766,7 @@ PSRawDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h)
bufsize = (uint32) bc[0];
- for ( s = 0; ++s < (tstrip_t)tf_numberstrips; ) {
+ for ( s = 0; ++s < tf_numberstrips; ) {
if ( bc[s] > bufsize )
bufsize = (uint32) bc[s];
}
@@ -2801,7 +2799,7 @@ PSRawDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h)
}
#endif
- for (s = 0; s < (tstrip_t) tf_numberstrips; s++) {
+ for (s = 0; s < tf_numberstrips; s++) {
cc = TIFFReadRawStrip(tif, s, tf_buf, (tmsize_t) bc[s]);
if (cc < 0) {
TIFFError(filename, "Can't read strip");
@@ -2968,10 +2966,10 @@ tsize_t Ascii85EncodeBlock( uint8 * ascii85_p, unsigned f_eod, const uint8 * raw
for ( ; raw_l > 3; raw_l -= 4 )
{
- val32 = *(++raw_p) << 24;
- val32 += *(++raw_p) << 16;
- val32 += *(++raw_p) << 8;
- val32 += *(++raw_p);
+ val32 = (uint32)*(++raw_p) << 24;
+ val32 += (uint32)*(++raw_p) << 16;
+ val32 += (uint32)*(++raw_p) << 8;
+ val32 += (uint32)*(++raw_p);
if ( val32 == 0 ) /* Special case */
{
diff --git a/tiff/tools/tiff2rgba.c b/tiff/tools/tiff2rgba.c
index 4de96aec..2eb6f6c4 100644
--- a/tiff/tools/tiff2rgba.c
+++ b/tiff/tools/tiff2rgba.c
@@ -1,5 +1,3 @@
-/* $Id: tiff2rgba.c,v 1.22 2016-08-15 20:06:41 erouault Exp $ */
-
/*
* Copyright (c) 1991-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/tools/tiffcmp.c b/tiff/tools/tiffcmp.c
index 1a008a30..7b764883 100644
--- a/tiff/tools/tiffcmp.c
+++ b/tiff/tools/tiffcmp.c
@@ -1,5 +1,3 @@
-/* $Id: tiffcmp.c,v 1.18 2015-06-21 01:09:10 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -42,7 +40,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
static int stopondiff = 1;
@@ -438,7 +436,8 @@ PrintIntDiff(uint32 row, int sample, uint32 pix, uint32 w1, uint32 w2)
{
int32 mask1, mask2, s;
- mask1 = ~((-1) << bitspersample);
+ /* mask1 should have the n lowest bits set, where n == bitspersample */
+ mask1 = ((int32)1 << bitspersample) - 1;
s = (8 - bitspersample);
mask2 = mask1 << s;
for (; mask2 && pix < imagewidth;
diff --git a/tiff/tools/tiffcp.c b/tiff/tools/tiffcp.c
index 489459a7..84d81488 100644
--- a/tiff/tools/tiffcp.c
+++ b/tiff/tools/tiffcp.c
@@ -1,5 +1,3 @@
-/* $Id: tiffcp.c,v 1.61 2017-01-11 19:26:14 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -43,6 +41,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
#include <ctype.h>
@@ -53,7 +52,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#if defined(VMS)
@@ -391,6 +390,12 @@ processCompressOptions(char* opt)
} else if (strneq(opt, "lzma", 4)) {
processZIPOptions(opt);
defcompression = COMPRESSION_LZMA;
+ } else if (strneq(opt, "zstd", 4)) {
+ processZIPOptions(opt);
+ defcompression = COMPRESSION_ZSTD;
+ } else if (strneq(opt, "webp", 4)) {
+ processZIPOptions(opt);
+ defcompression = COMPRESSION_WEBP;
} else if (strneq(opt, "jbig", 4)) {
defcompression = COMPRESSION_JBIG;
} else if (strneq(opt, "sgilog", 6)) {
@@ -429,6 +434,8 @@ char* stuff[] = {
" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding",
" -c zip[:opts] compress output with deflate encoding",
" -c lzma[:opts] compress output with LZMA2 encoding",
+" -c zstd[:opts] compress output with ZSTD encoding",
+" -c webp[:opts] compress output with WEBP encoding",
" -c jpeg[:opts] compress output with JPEG encoding",
" -c jbig compress output with ISO JBIG encoding",
" -c packbits compress output with packbits encoding",
@@ -448,7 +455,7 @@ char* stuff[] = {
" r output color image as RGB rather than YCbCr",
"For example, -c jpeg:r:50 to get JPEG-encoded RGB data with 50% comp. quality",
"",
-"LZW, Deflate (ZIP) and LZMA2 options:",
+"LZW, Deflate (ZIP), LZMA2, ZSTD and WEBP options:",
" # set predictor value",
" p# set compression level (preset)",
"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing,",
@@ -655,7 +662,7 @@ tiffcp(TIFF* in, TIFF* out)
case ORIENTATION_RIGHTBOT: /* XXX */
TIFFWarning(TIFFFileName(in), "using bottom-left orientation");
orientation = ORIENTATION_BOTLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_LEFTBOT: /* XXX */
case ORIENTATION_BOTLEFT:
break;
@@ -664,7 +671,7 @@ tiffcp(TIFF* in, TIFF* out)
default:
TIFFWarning(TIFFFileName(in), "using top-left orientation");
orientation = ORIENTATION_TOPLEFT;
- /* fall thru... */
+ /* fall through... */
case ORIENTATION_LEFTTOP: /* XXX */
case ORIENTATION_TOPLEFT:
break;
@@ -733,6 +740,8 @@ tiffcp(TIFF* in, TIFF* out)
case COMPRESSION_ADOBE_DEFLATE:
case COMPRESSION_DEFLATE:
case COMPRESSION_LZMA:
+ case COMPRESSION_ZSTD:
+ case COMPRESSION_WEBP:
if (predictor != (uint16)-1)
TIFFSetField(out, TIFFTAG_PREDICTOR, predictor);
else
@@ -743,6 +752,15 @@ tiffcp(TIFF* in, TIFF* out)
TIFFSetField(out, TIFFTAG_ZIPQUALITY, preset);
else if (compression == COMPRESSION_LZMA)
TIFFSetField(out, TIFFTAG_LZMAPRESET, preset);
+ else if (compression == COMPRESSION_ZSTD)
+ TIFFSetField(out, TIFFTAG_ZSTD_LEVEL, preset);
+ else if (compression == COMPRESSION_WEBP) {
+ if (preset == 100) {
+ TIFFSetField(out, TIFFTAG_WEBP_LOSSLESS, TRUE);
+ } else {
+ TIFFSetField(out, TIFFTAG_WEBP_LEVEL, preset);
+ }
+ }
}
break;
case COMPRESSION_CCITTFAX3:
@@ -1391,7 +1409,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
int status = 1;
uint32 imagew = TIFFRasterScanlineSize(in);
uint32 tilew = TIFFTileRowSize(in);
- int iskew = imagew - tilew*spp;
+ int iskew;
tsize_t tilesize = TIFFTileSize(in);
tdata_t tilebuf;
uint8* bufp = (uint8*) buf;
@@ -1399,6 +1417,12 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
uint32 row;
uint16 bps = 0, bytes_per_sample;
+ if (spp > (INT_MAX / tilew))
+ {
+ TIFFError(TIFFFileName(in), "Error, cannot handle that much samples per tile row (Tile Width * Samples/Pixel)");
+ return 0;
+ }
+ iskew = imagew - tilew*spp;
tilebuf = _TIFFmalloc(tilesize);
if (tilebuf == 0)
return 0;
diff --git a/tiff/tools/tiffcrop.c b/tiff/tools/tiffcrop.c
index c69177e0..7b3c9e78 100644
--- a/tiff/tools/tiffcrop.c
+++ b/tiff/tools/tiffcrop.c
@@ -1,5 +1,3 @@
-/* $Id: tiffcrop.c,v 1.50 2017-01-11 12:51:59 erouault Exp $ */
-
/* tiffcrop.c -- a port of tiffcp.c extended to include manipulations of
* the image data through additional options listed below
*
@@ -27,7 +25,7 @@
* ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
* OR PERFORMANCE OF THIS SOFTWARE.
*
- * Some portions of the current code are derived from tiffcp, primarly in
+ * Some portions of the current code are derived from tiffcp, primarily in
* the areas of lowlevel reading and writing of TAGS, scanlines and tiles though
* some of the original functions have been extended to support arbitrary bit
* depths. These functions are presented at the top of this file.
@@ -150,11 +148,6 @@ extern int getopt(int argc, char * const argv[], const char *optstring);
#define TIFF_UINT32_MAX 0xFFFFFFFFU
-#ifndef streq
-#define streq(a,b) (strcmp((a),(b)) == 0)
-#endif
-#define strneq(a,b,n) (strncmp((a),(b),(n)) == 0)
-
#define TRUE 1
#define FALSE 0
@@ -217,6 +210,8 @@ extern int getopt(int argc, char * const argv[], const char *optstring);
#define DUMP_TEXT 1
#define DUMP_RAW 2
+#define TIFF_DIR_MAX 65534
+
/* Offsets into buffer for margins and fixed width and length segments */
struct offset {
uint32 tmargin;
@@ -1685,7 +1680,7 @@ void process_command_opts (int argc, char *argv[], char *mp, char *mode, uint32
*defconfig = PLANARCONFIG_CONTIG;
else
{
- TIFFError ("Unkown planar configuration", "%s", optarg);
+ TIFFError ("Unknown planar configuration", "%s", optarg);
TIFFError ("For valid options type", "tiffcrop -h");
exit (-1);
}
@@ -2108,28 +2103,30 @@ void process_command_opts (int argc, char *argv[], char *mp, char *mode, uint32
* autoindex is set to non-zero. Update page and file counters
* so TIFFTAG PAGENUM will be correct in image.
*/
-static int
+static int
update_output_file (TIFF **tiffout, char *mode, int autoindex,
char *outname, unsigned int *page)
{
static int findex = 0; /* file sequence indicator */
+ size_t basename_len;
char *sep;
- char filenum[16];
char export_ext[16];
char exportname[PATH_MAX];
if (autoindex && (*tiffout != NULL))
- {
+ {
/* Close any export file that was previously opened */
TIFFClose (*tiffout);
*tiffout = NULL;
}
- strcpy (export_ext, ".tiff");
- memset (exportname, '\0', PATH_MAX);
+ memcpy (export_ext, ".tiff", 6);
+ memset (exportname, '\0', sizeof(exportname));
- /* Leave room for page number portion of the new filename */
- strncpy (exportname, outname, PATH_MAX - 16);
+ /* Leave room for page number portion of the new filename :
+ * hyphen + 6 digits + dot + 4 extension characters + null terminator */
+ #define FILENUM_MAX_LENGTH (1+6+1+4+1)
+ strncpy (exportname, outname, sizeof(exportname) - FILENUM_MAX_LENGTH);
if (*tiffout == NULL) /* This is a new export file */
{
if (autoindex)
@@ -2141,21 +2138,21 @@ update_output_file (TIFF **tiffout, char *mode, int autoindex,
*sep = '\0';
}
else
- strncpy (export_ext, ".tiff", 5);
+ memcpy (export_ext, ".tiff", 5);
export_ext[5] = '\0';
+ basename_len = strlen(exportname);
/* MAX_EXPORT_PAGES limited to 6 digits to prevent string overflow of pathname */
if (findex > MAX_EXPORT_PAGES)
- {
- TIFFError("update_output_file", "Maximum of %d pages per file exceeded", MAX_EXPORT_PAGES);
+ {
+ TIFFError("update_output_file", "Maximum of %d pages per file exceeded", MAX_EXPORT_PAGES);
return 1;
}
- snprintf(filenum, sizeof(filenum), "-%03d%s", findex, export_ext);
- filenum[14] = '\0';
- strncat (exportname, filenum, 15);
+ /* We previously assured that there will be space left */
+ snprintf(exportname + basename_len, sizeof(exportname) - basename_len, "-%03d%.5s", findex, export_ext);
}
- exportname[PATH_MAX - 1] = '\0';
+ exportname[sizeof(exportname) - 1] = '\0';
*tiffout = TIFFOpen(exportname, mode);
if (*tiffout == NULL)
@@ -2163,11 +2160,11 @@ update_output_file (TIFF **tiffout, char *mode, int autoindex,
TIFFError("update_output_file", "Unable to open output file %s", exportname);
return 1;
}
- *page = 0;
+ *page = 0;
return 0;
}
- else
+ else
(*page)++;
return 0;
@@ -2212,8 +2209,9 @@ main(int argc, char* argv[])
unsigned int total_pages = 0;
unsigned int total_images = 0;
unsigned int end_of_input = FALSE;
- int seg, length;
- char temp_filename[PATH_MAX + 1];
+ int seg;
+ size_t length;
+ char temp_filename[PATH_MAX + 16]; /* Extra space keeps the compiler from complaining */
little_endian = *((unsigned char *)&little_endian) & '1';
@@ -2233,7 +2231,7 @@ main(int argc, char* argv[])
pageNum = -1;
else
total_images = 0;
- /* read multiple input files and write to output file(s) */
+ /* Read multiple input files and write to output file(s) */
while (optind < argc - 1)
{
in = TIFFOpen (argv[optind], "r");
@@ -2241,7 +2239,14 @@ main(int argc, char* argv[])
return (-3);
/* If only one input file is specified, we can use directory count */
- total_images = TIFFNumberOfDirectories(in);
+ total_images = TIFFNumberOfDirectories(in);
+ if (total_images > TIFF_DIR_MAX)
+ {
+ TIFFError (TIFFFileName(in), "File contains too many directories");
+ if (out != NULL)
+ (void) TIFFClose(out);
+ return (1);
+ }
if (image_count == 0)
{
dirnum = 0;
@@ -2305,8 +2310,8 @@ main(int argc, char* argv[])
if (dump.infile != NULL)
fclose (dump.infile);
- /* dump.infilename is guaranteed to be NUL termimated and have 20 bytes
- fewer than PATH_MAX */
+ /* dump.infilename is guaranteed to be NUL terminated and have 20 bytes
+ fewer than PATH_MAX */
snprintf(temp_filename, sizeof(temp_filename), "%s-read-%03d.%s",
dump.infilename, dump_images,
(dump.format == DUMP_TEXT) ? "txt" : "raw");
@@ -2324,7 +2329,7 @@ main(int argc, char* argv[])
if (dump.outfile != NULL)
fclose (dump.outfile);
- /* dump.outfilename is guaranteed to be NUL termimated and have 20 bytes
+ /* dump.outfilename is guaranteed to be NUL terminated and have 20 bytes
fewer than PATH_MAX */
snprintf(temp_filename, sizeof(temp_filename), "%s-write-%03d.%s",
dump.outfilename, dump_images,
@@ -6774,12 +6779,12 @@ extractImageSection(struct image_data *image, struct pageseg *section,
#endif
bytebuff1 = bytebuff2 = 0;
- if (shift1 == 0) /* the region is byte and sample alligned */
+ if (shift1 == 0) /* the region is byte and sample aligned */
{
_TIFFmemcpy (sect_buff + dst_offset, src_buff + offset1, full_bytes);
#ifdef DEVELMODE
- TIFFError ("", " Alligned data src offset1: %8d, Dst offset: %8d\n", offset1, dst_offset);
+ TIFFError ("", " Aligned data src offset1: %8d, Dst offset: %8d\n", offset1, dst_offset);
sprintf(&bitarray[18], "\n");
sprintf(&bitarray[19], "\t");
for (j = 20, k = 7; j < 28; j++, k--)
@@ -7722,7 +7727,7 @@ createCroppedImage(struct image_data *image, struct crop_mask *crop,
* original code assumes we are always copying all samples.
* Use of global variables for config, compression and others
* should be replaced by addition to the crop_mask struct (which
- * will be renamed to proc_opts indicating that is controlls
+ * will be renamed to proc_opts indicating that is controls
* user supplied processing options, not just cropping) and
* then passed in as an argument.
*/
@@ -8417,7 +8422,7 @@ rotateImage(uint16 rotation, struct image_data *image, uint32 *img_width,
ibuff = *ibuff_ptr;
switch (rotation)
{
- case 180: if ((bps % 8) == 0) /* byte alligned data */
+ case 180: if ((bps % 8) == 0) /* byte aligned data */
{
src = ibuff;
pix_offset = (spp * bps) / 8;
@@ -9057,8 +9062,9 @@ mirrorImage(uint16 spp, uint16 bps, uint16 mirror, uint32 width, uint32 length,
_TIFFfree(line_buff);
if (mirror == MIRROR_VERT)
break;
+ /* Fall through */
case MIRROR_HORIZ :
- if ((bps % 8) == 0) /* byte alligned data */
+ if ((bps % 8) == 0) /* byte aligned data */
{
for (row = 0; row < length; row++)
{
@@ -9138,7 +9144,6 @@ static int
invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 length, unsigned char *work_buff)
{
uint32 row, col;
- unsigned char bytebuff1, bytebuff2, bytebuff3, bytebuff4;
unsigned char *src;
uint16 *src_uint16;
uint32 *src_uint32;
@@ -9168,7 +9173,7 @@ invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 len
for (row = 0; row < length; row++)
for (col = 0; col < width; col++)
{
- *src_uint32 = (uint32)0xFFFFFFFF - *src_uint32;
+ *src_uint32 = ~(*src_uint32);
src_uint32++;
}
break;
@@ -9176,39 +9181,15 @@ invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 len
for (row = 0; row < length; row++)
for (col = 0; col < width; col++)
{
- *src_uint16 = (uint16)0xFFFF - *src_uint16;
+ *src_uint16 = ~(*src_uint16);
src_uint16++;
}
break;
- case 8: for (row = 0; row < length; row++)
- for (col = 0; col < width; col++)
- {
- *src = (uint8)255 - *src;
- src++;
- }
- break;
- case 4: for (row = 0; row < length; row++)
- for (col = 0; col < width; col++)
- {
- bytebuff1 = 16 - (uint8)(*src & 240 >> 4);
- bytebuff2 = 16 - (*src & 15);
- *src = bytebuff1 << 4 & bytebuff2;
- src++;
- }
- break;
- case 2: for (row = 0; row < length; row++)
- for (col = 0; col < width; col++)
- {
- bytebuff1 = 4 - (uint8)(*src & 192 >> 6);
- bytebuff2 = 4 - (uint8)(*src & 48 >> 4);
- bytebuff3 = 4 - (uint8)(*src & 12 >> 2);
- bytebuff4 = 4 - (uint8)(*src & 3);
- *src = (bytebuff1 << 6) || (bytebuff2 << 4) || (bytebuff3 << 2) || bytebuff4;
- src++;
- }
- break;
+ case 8:
+ case 4:
+ case 2:
case 1: for (row = 0; row < length; row++)
- for (col = 0; col < width; col += 8 /(spp * bps))
+ for (col = 0; col < width; col += 8 / bps)
{
*src = ~(*src);
src++;
diff --git a/tiff/tools/tiffdither.c b/tiff/tools/tiffdither.c
index 247553cd..3fd7f81a 100644
--- a/tiff/tools/tiffdither.c
+++ b/tiff/tools/tiffdither.c
@@ -1,5 +1,3 @@
-/* $Id: tiffdither.c,v 1.16 2015-06-21 01:09:11 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
diff --git a/tiff/tools/tiffdump.c b/tiff/tools/tiffdump.c
index 3de0062b..4cdcda0c 100644
--- a/tiff/tools/tiffdump.c
+++ b/tiff/tools/tiffdump.c
@@ -1,5 +1,3 @@
-/* $Id: tiffdump.c,v 1.35 2016-11-19 15:42:46 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -53,7 +51,7 @@
#endif
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#include "tiffio.h"
diff --git a/tiff/tools/tiffgt.c b/tiff/tools/tiffgt.c
index 35a23ccf..2f11b0ca 100644
--- a/tiff/tools/tiffgt.c
+++ b/tiff/tools/tiffgt.c
@@ -1,5 +1,3 @@
-/* $Id: tiffgt.c,v 1.15 2015-09-06 20:42:20 bfriesen Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -29,11 +27,16 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#if HAVE_UNISTD_H
#include <unistd.h>
+#endif
#ifdef HAVE_OPENGL_GL_H
# include <OpenGL/gl.h>
#else
+# ifdef _WIN32
+# include <windows.h>
+# endif
# include <GL/gl.h>
#endif
#ifdef HAVE_GLUT_GLUT_H
@@ -46,7 +49,7 @@
#include "tiffiop.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
static uint32 width = 0, height = 0; /* window width & height */
diff --git a/tiff/tools/tiffinfo.c b/tiff/tools/tiffinfo.c
index 4d58055d..049e3a34 100644
--- a/tiff/tools/tiffinfo.c
+++ b/tiff/tools/tiffinfo.c
@@ -1,5 +1,3 @@
-/* $Id: tiffinfo.c,v 1.26 2016-12-03 14:18:49 erouault Exp $ */
-
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
@@ -86,7 +84,7 @@ main(int argc, char* argv[])
break;
case 'd':
showdata++;
- /* fall thru... */
+ /* fall through... */
case 'D':
readdata++;
break;
diff --git a/tiff/tools/tiffmedian.c b/tiff/tools/tiffmedian.c
index f0c892e4..bd0d1561 100644
--- a/tiff/tools/tiffmedian.c
+++ b/tiff/tools/tiffmedian.c
@@ -1,5 +1,3 @@
-/* $Id: tiffmedian.c,v 1.13 2015-06-21 01:09:11 bfriesen Exp $ */
-
/*
* Apply median cut on an image.
*
diff --git a/tiff/tools/tiffset.c b/tiff/tools/tiffset.c
index 894c9f1f..7ecc401b 100644
--- a/tiff/tools/tiffset.c
+++ b/tiff/tools/tiffset.c
@@ -1,6 +1,4 @@
/******************************************************************************
- * $Id: tiffset.c,v 1.19 2017-10-01 17:38:12 erouault Exp $
- *
* Project: libtiff tools
* Purpose: Mainline for setting metadata in existing TIFF files.
* Author: Frank Warmerdam, warmerdam@pobox.com
@@ -29,6 +27,7 @@
******************************************************************************
*/
+#include "tif_config.h"
#include <stdio.h>
#include <string.h>
@@ -189,6 +188,9 @@ main(int argc, char* argv[])
size = 4;
break;
+ case TIFF_LONG8:
+ case TIFF_SLONG8:
+ case TIFF_IFD8:
case TIFF_DOUBLE:
size = 8;
break;
@@ -225,7 +227,16 @@ main(int argc, char* argv[])
case TIFF_SLONG:
case TIFF_IFD:
for (i = 0; i < wc; i++)
- ((uint32 *)array)[i] = atol(argv[arg_index+i]);
+ ((int32 *)array)[i] = atol(argv[arg_index+i]);
+ break;
+ case TIFF_LONG8:
+ for (i = 0; i < wc; i++)
+ ((uint64 *)array)[i] = strtoll(argv[arg_index+i], (char **)NULL, 10);
+ break;
+ case TIFF_SLONG8:
+ case TIFF_IFD8:
+ for (i = 0; i < wc; i++)
+ ((int64 *)array)[i] = strtoll(argv[arg_index+i], (char **)NULL, 10);
break;
case TIFF_DOUBLE:
for (i = 0; i < wc; i++)
@@ -276,6 +287,12 @@ main(int argc, char* argv[])
ret = TIFFSetField(tiff, TIFFFieldTag(fip),
atol(argv[arg_index++]));
break;
+ case TIFF_LONG8:
+ case TIFF_SLONG8:
+ case TIFF_IFD8:
+ ret = TIFFSetField(tiff, TIFFFieldTag(fip),
+ strtoll(argv[arg_index++], (char **)NULL, 10));
+ break;
case TIFF_DOUBLE:
ret = TIFFSetField(tiff, TIFFFieldTag(fip),
atof(argv[arg_index++]));
diff --git a/tiff/tools/tiffsplit.c b/tiff/tools/tiffsplit.c
index c4fa2478..c8b7f2dd 100644
--- a/tiff/tools/tiffsplit.c
+++ b/tiff/tools/tiffsplit.c
@@ -1,5 +1,3 @@
-/* $Id: tiffsplit.c,v 1.23 2015-05-28 13:10:26 bfriesen Exp $ */
-
/*
* Copyright (c) 1992-1997 Sam Leffler
* Copyright (c) 1992-1997 Silicon Graphics, Inc.
@@ -33,7 +31,7 @@
#include "tiffio.h"
#ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
#endif
#define CopyField(tag, v) \
diff --git a/toolbin/genfontmap.ps b/toolbin/genfontmap.ps
index 86b26ea5..565dcc74 100644
--- a/toolbin/genfontmap.ps
+++ b/toolbin/genfontmap.ps
@@ -16,10 +16,15 @@
% Create a Fontmap format file after scanning the FONTPATH directories
%
+% From Ghostscript version 9.50 onwards the default operation is to run with
+% SAFER defined; this disables a number of PostScript operators, specifically
+% in this case the .sort operator, which is used by this program. In order
+% to use this program you must run with -dNOSAFER.
+%
% Example usage:
-% windows: gswin32c -q -sFONTPATH=c:/windows/fonts genfontmap.ps > myFontmap
+% windows: gswin32c -dNOSAFER -q -sFONTPATH=c:/windows/fonts genfontmap.ps > myFontmap
%
-% unix: gs -q -sFONTPATH=/usr/local/fonts genfontmap.ps > myFontmap
+% unix: gs -dNOSAFER -q -sFONTPATH=/usr/local/fonts genfontmap.ps > myFontmap
%
% The myFontmap file created by the above can be renamed to Fontmap and
% placed in the LIBPATH directory.
@@ -33,6 +38,13 @@ FONTPATH length 0 eq {
flush quit
} if
+% Since version 9.50, ensure we are running in NOSAFER so that .sort is available
+/NOSAFER where {/NOSAFER get not}{true} ifelse
+{
+ (\n You must use the '-dNOSAFER' option in order to execute this program.\n\n) =error
+ flush quit
+} if
+
QUIET not {
(\n You must use the '-q' option in order to generate a clean Fontmap.\n\n) =error
flush quit
diff --git a/toolbin/halftone/thresh_remap/thresh_remap.c b/toolbin/halftone/thresh_remap/thresh_remap.c
index 87b6b8b2..59ad8b65 100644
--- a/toolbin/halftone/thresh_remap/thresh_remap.c
+++ b/toolbin/halftone/thresh_remap/thresh_remap.c
@@ -192,7 +192,7 @@ main( int argc, char *argv[]) {
fprintf(ofile,"%%%%EOF\n");
} else {
/* Just dump the binary data (suitable for Scanvec */
- fprintf(ofile, "%c%c", width/256, width>>256);
+ fprintf(ofile, "%c%c", width/256, width % 256);
for (i=0; i<num_pix; i++)
fprintf(ofile, "%c", thresh[i]);
}
diff --git a/toolbin/headercompile.pl b/toolbin/headercompile.pl
index 2bff2475..2bff2475 100644..100755
--- a/toolbin/headercompile.pl
+++ b/toolbin/headercompile.pl
diff --git a/toolbin/localcluster/clusterpush.pl b/toolbin/localcluster/clusterpush.pl
index 6ec26812..c2c3555e 100755
--- a/toolbin/localcluster/clusterpush.pl
+++ b/toolbin/localcluster/clusterpush.pl
@@ -201,10 +201,13 @@ my $cmd="rsync -avxcz ".
" --exclude .deps --exclude .libs --exclude autom4te.cache".
" --exclude bin --exclude obj --exclude debugobj --exclude pgobj".
" --exclude bin64 --exclude obj64 --exclude debugobj64 --exclude pgobj64".
+" --exclude luratechbin --exclude luratechobj --exclude luratechbin64 --exclude luratechobj64".
" --exclude membin --exclude memobj --exclude membin64 --exclude memobj64".
" --exclude profbin --exclude profobj --exclude profbin64 --exclude profobj64".
+" --exclude sanbin --exclude sanobj --exclude sanbin64 --exclude sanobj64".
" --exclude sobin --exclude soobj --exclude debugbin".
" --exclude ufst --exclude ufst-obj --exclude ufst-debugobj".
+" --exclude '*-bin' --exclude '*-obj'".
" --exclude config.log --exclude .png".
" --exclude .ppm --exclude .pkm --exclude .pgm --exclude .pbm".
" --exclude .tif --exclude .bmp".
diff --git a/toolbin/squeeze2text.py b/toolbin/squeeze2text.py
new file mode 100755
index 00000000..0f533d20
--- /dev/null
+++ b/toolbin/squeeze2text.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python3
+
+'''
+Reads memento squeeze output from stdin, and writes brief info to stdout or
+file.
+
+E.g.:
+ MEMENTO_SQUEEZEAT=1 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps 2>&1 | toolbin/squeeze2text.py -o squeeze.txt
+
+Args:
+
+ -a <filename>
+ Append output to <filename>. Write log to stdout.
+ -o <filename>
+ Write output to <filename>. Write log to stdout.
+ -p <N>
+ Write progress information to log, every <N> blocks.
+
+If -o is not specified, we write output to stdout, and log to stderr.
+
+If -p is not specified, default is -p 1.
+
+'''
+
+import io
+import re
+import sys
+
+if __name__ == '__main__':
+
+ verbose = False
+ progress_n = 1
+ num_segv = 0
+ num_leak = 0
+ out = sys.stdout
+ log = sys.stderr
+
+ args = iter( sys.argv[1:])
+ while 1:
+ try:
+ arg = next(args)
+ except StopIteration:
+ break
+ if arg == '-p':
+ progress_n = int( next(args))
+ elif arg == '-a':
+ filename = next(args)
+ out = open( filename, 'a')
+ log = sys.stdout
+ elif arg == '-o':
+ filename = next(args)
+ out = open( filename, 'w')
+ log = sys.stdout
+ else:
+ raise Exception( 'unrecognised arg: %r' % arg)
+
+ # Use latin_1 encoding to ensure we can read all 8-bit bytes from stdin as
+ # characters.
+ f = io.TextIOWrapper( sys.stdin.buffer, encoding='latin_1')
+ progress_n_next = 0
+
+ def print_progress():
+ print( 'memento_n=%s. num_segv=%s num_leak=%s' % (
+ memento_n,
+ num_segv,
+ num_leak
+ ),
+ file=log,
+ )
+
+ for line in f:
+ m = re.match( '^Memory squeezing @ ([0-9]+)$', line)
+ if m:
+ memento_n = int( m.group(1))
+ if memento_n >= progress_n_next:
+ print_progress()
+ progress_n_next = int(memento_n / progress_n + 1) * progress_n
+ log.flush() # Otherwise buffered and we see no output for ages.
+ elif line.startswith( 'SEGV at:'):
+ num_segv += 1
+ print( 'memento_n=%s: segv' % memento_n, file=out)
+ elif line.startswith( 'Allocated blocks'):
+ num_leak += 1
+ print( 'memento_n=%s: leak' % memento_n, file=out)
+ print_progress()
diff --git a/toolbin/vdb.pl b/toolbin/vdb.pl
index 8555fc1c..3833f6fd 100644
--- a/toolbin/vdb.pl
+++ b/toolbin/vdb.pl
@@ -3,12 +3,64 @@
# Perl script to ease the use of gdb with valgrind.
#
# Invoke as: vdb.pl <command to run>
+#
+# This also adds some commands to the usual gdb/valgrind
+# stuff.
+#
+# xb:
+#
+# xb expression
+# or:
+# xb expression_addr expression_length
+#
+# This does what you'd hope:
+#
+# mon xb <expression_addr> <expression_length>
+#
+# but it copes with expressions for the address and length
+# rather than insisting on raw numbers.
+#
+# xs:
+#
+# xs expression
+#
+# This does what you'd hope:
+#
+# mon xb <expression> <strlen(expression)>
+#
+# would do.
+#
+# xv:
+#
+# xv expression
+#
+# This does what you'd hope:
+#
+# mon xb &<expression> sizeof(<expression>)
+#
+# would do.
use strict;
use warnings;
use IPC::Open3;
use IO::Select;
+# Store the args
+my @args = @ARGV;
+
+# Wrap ourselves for line editing
+if (!exists $ENV{'VDB_WRAPPED'}) {
+ `which rlwrap`;
+ if ($? != 0) {
+ print "rlwrap not available - no command line editing.\n";
+ print "Consider: sudo apt-get install rlwrap\n";
+ } else {
+ $ENV{'VDB_WRAPPED'}=1;
+ unshift(@args, "rlwrap", $0);
+ exec(@args);
+ }
+}
+
# Global variables
my $gdbkilled = 0;
@@ -21,9 +73,6 @@ sub killgdb() {
}
-# Store the args
-my @args = @ARGV;
-
# Make the invocation args for valgrind
my @vgargs = (
"valgrind",
@@ -61,27 +110,111 @@ $sel->add(*STDIN);
*STDOUT->autoflush();
-my $scanning = 1;
-
+my $rate_limit = 0;
sub print_lines($)
{
my $buf=shift;
while (1) {
- my $loc = index($buf, "\n");
- if ($loc < 0) {
- last;
+ my $loc = index($buf, "\n");
+ if ($loc < 0) {
+ last;
+ }
+ my $line = substr($buf, 0, $loc+1);
+ print "$line";
+ $rate_limit++;
+ if ($rate_limit >= 24) {
+ sleep(1);
+ $rate_limit = 0;
}
- my $line = substr($buf, 0, $loc+1);
- print "$line";
- $buf = substr($buf, $loc+1);
+ $buf = substr($buf, $loc+1);
}
return $buf;
}
+# We scan the output of VG to look for the magic runes
+# State 0 = still waiting for magic runes
+# 1 = runes have been captured.
+my $vg_scan_state = 0;
+
+# We scan the output from GDB to look for responses to commands we have given it.
+# State 0 = Normal output - just parrot it out.
+# 1 = Waiting for the result of a print address
+# 2 = Waiting for the result of a print length
+my $gdb_scan_state = 0;
+
my $vgpartial = '';
my $gdbpartial = '';
+my $inpartial = '';
my $last2print = 0; # 0 = VG, 1 = GDB
+my $xb_addr;
+my $xb_len;
+sub go_command($) {
+ my $command = shift;
+ chomp $command;
+ if (!defined $command) {
+ # When valgrind hits EOF, exit.
+ killgdb();
+ waitpid($vgpid,0);
+ waitpid($gdbpid,0);
+ exit(0);
+ } elsif ($command =~ m/^\s*xb\s+(\S+)\s*$/) {
+ my $one = $1;
+ if ($one =~ m/0x[a-fA-F0-9]*/) {
+ $xb_addr="$one";
+ $xb_len="8";
+ print GDBSTDIN "mon xb $xb_addr $xb_len\n";
+ } else {
+ # We need to figure out the value of xb_addr;
+ if ($one =~ m/^\&(.+)/) {
+ $xb_len="sizeof($1)";
+ } else {
+ $xb_len="sizeof(*$one)";
+ }
+ print GDBSTDIN "print $one\n";
+ $gdb_scan_state=1; # Next thing we get back will be the address
+ }
+ } elsif ($command =~ m/^\s*xv\s+(\S+)\s*$/) {
+ my $one = $1;
+ # We need to figure out the value of xb_addr;
+ $xb_len="sizeof($one)";
+ print GDBSTDIN "print &$one\n";
+ $gdb_scan_state=1; # Next thing we get back will be the address
+ } elsif ($command =~ m/^\s*xb\s+(\S+)\s+(\S+)\s*$/) {
+ my $one = $1;
+ my $two = $2;
+ if ($one =~ m/0x[a-fA-F0-9]*/) {
+ $xb_addr="$one";
+ if ($two =~ m/^\d+$/) {
+ $xb_len="$two";
+ print GDBSTDIN "mon xb $xb_addr $xb_len\n";
+ } else {
+ print GDBSTDIN "print $two\n";
+ $gdb_scan_state=2; # Next thing we get back will be the length
+ }
+ } else {
+ # We need to figure out the value of xb_addr;
+ $xb_len="$two";
+ print GDBSTDIN "print $one\n";
+ $gdb_scan_state=1; # Next thing we get back will be the address
+ }
+ } elsif ($command =~ m/^\s*xs\s+(\S+)\s*$/) {
+ my $one = $1;
+ if ($one =~ m/0x[a-fA-F0-9]*/) {
+ $xb_addr="$one";
+ print GDBSTDIN "print strlen($one)\n";
+ $gdb_scan_state=2; # Next thing we get back will be the length
+ } else {
+ # We need to figure out the value of xb_addr;
+ $xb_len="strlen($one)";
+ print GDBSTDIN "print $one\n";
+ $gdb_scan_state=1; # Next thing we get back will be the address
+ }
+ } else {
+ print GDBSTDIN "$command\n";
+ }
+}
+
while (my @ready = $sel->can_read())
{
for my $fh (@ready) {
@@ -95,54 +228,117 @@ while (my @ready = $sel->can_read())
waitpid($gdbpid,0);
exit(0);
}
- if ($scanning) {
+ if ($vg_scan_state == 0) {
$vgbuf =~ m/(target remote \| .+ \-\-pid\=\d+)\s*/;
if ($1) {
- print GDBSTDIN "$1\n";
- $scanning = 0;
+ print GDBSTDIN "$1\n";
+ $vg_scan_state = 1;
}
}
- # It definitely read something, so print it.
- if ($last2print == 1) { # Last to print was GDB
+ # It definitely read something, so print it.
+ if ($last2print == 1) { # Last to print was GDB
if ($gdbpartial ne "") { # We need a newline
- print "\n";
- }
- # Better reprint any partial line we had
- print "$vgpartial";
- }
+ print "\n";
+ }
+ # Better reprint any partial line we had
+ print "$vgpartial";
+ }
$vgpartial = print_lines($vgbuf);
- print "$vgpartial";
- $last2print = 0; # VG
+ print "$vgpartial";
+ $last2print = 0; # VG
}
# Don't say anything to or from gdb until after we've got the magic words from valgrind
- if ($scanning == 0) {
- # Anything the user says, should be parotted to gdb
- if ($fh eq *STDIN) {
- my $buf = '';
- if (sysread(STDIN, $buf, 64*1024, length($buf)) == 0) {
- # When the user hits EOF, start to kill stuff.
+ if ($vg_scan_state != 0) {
+ if ($fh eq *STDIN) {
+ my $inbuf=$inpartial;
+ if (sysread(STDIN, $inbuf, 64*1024, length($inbuf)) == 0) {
+ # When gdb hits EOF start to kill stuff.
killgdb();
}
- print GDBSTDIN "$buf";
- }
+ while (1) {
+ my $loc = index($inbuf, "\n");
+ if ($loc < 0) {
+ last;
+ }
+ my $line = substr($inbuf, 0, $loc+1);
+ go_command($line);
+ $inbuf = substr($inbuf, $loc+1);
+ }
+ $inpartial = $inbuf;
+ }
# Anything gdb says, should be parotted out.
if ($fh eq *GDBSTDOUT) {
- my $gdbbuf='';
+ my $gdbbuf='';
if (sysread(GDBSTDOUT, $gdbbuf, 64*1024, length($gdbbuf)) == 0) {
# When gdb hits EOF start to kill stuff.
killgdb();
}
- # It definite read something, so print it.
- if ($last2print == 0) { # Last to print was VG
- if ($vgpartial ne "") { # We need a newline
- print "\n";
+ while ($gdbbuf ne "") {
+ if ($gdb_scan_state == 0) {
+ # It definitely read something, so print it.
+ if ($last2print == 0) { # Last to print was VG
+ if ($vgpartial ne "") { # We need a newline
+ print "\n";
+ }
+ # Better reprint any partial line we had
+ print "$gdbpartial";
+ }
+ $gdbpartial = print_lines($gdbbuf);
+ $gdbbuf="";
+ print "$gdbpartial";
+ $last2print = 1; # GDB
+ } elsif ($gdb_scan_state == 1) {
+ $gdbpartial .= $gdbbuf;
+ $gdbbuf = "";
+ while (1) {
+ my $loc = index($gdbpartial, "\n");
+ if ($loc < 0) {
+ last;
+ }
+ my $line = substr($gdbpartial, 0, $loc+1);
+ $gdbpartial = substr($gdbpartial, $loc+1);
+ if ($line =~ m/\$\d+ =.*(0x[a-zA-Z0-9]+)/) {
+ $xb_addr=$1;
+ print GDBSTDIN "print $xb_len\n";
+ $gdb_scan_state = 2; # Now we look for the length
+ last;
+ }
+ if ($line =~ m/(.*\n)/) {
+ $gdbpartial =~ s/(.*\n)//;
+ print "$1";
+ $gdbbuf = $gdbpartial;
+ $gdbpartial = "";
+ $gdb_scan_state = 0; # Error
+ last;
+ }
+ }
+ } elsif ($gdb_scan_state == 2) {
+ $gdbpartial .= $gdbbuf;
+ $gdbbuf = "";
+ while (1) {
+ my $loc = index($gdbpartial, "\n");
+ if ($loc < 0) {
+ last;
+ }
+ my $line = substr($gdbpartial, 0, $loc+1);
+ $gdbpartial = substr($gdbpartial, $loc+1);
+ if ($line =~ m/\$\d+ = (\d+)/) {
+ $xb_len=$1;
+ $gdb_scan_state = 0;
+ print GDBSTDIN "mon xb $xb_addr $xb_len\n";
+ last;
+ }
+ if ($line =~ m/(.*\n)/) {
+ $gdbpartial =~ s/(.*\n)//;
+ print "$1";
+ $gdbbuf = $gdbpartial;
+ $gdbpartial = "";
+ $gdb_scan_state = 0; # Error
+ last;
+ }
+ }
}
- # Better reprint any partial line we had
- print "$gdbpartial";
- }
- $gdbpartial = print_lines($gdbbuf);
- print "$gdbpartial";
- $last2print = 1; # GDB
+ }
}
}
}
diff --git a/windows/All.vcxproj b/windows/All.vcxproj
new file mode 100644
index 00000000..0d5bf13d
--- /dev/null
+++ b/windows/All.vcxproj
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-contrib|Win32">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-contrib|x64">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|Win32">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|x64">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|Win32">
+ <Configuration>DebugXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|x64">
+ <Configuration>DebugXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|Win32">
+ <Configuration>MementoXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|x64">
+ <Configuration>MementoXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|Win32">
+ <Configuration>Profile</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|x64">
+ <Configuration>Profile</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|Win32">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|x64">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|Win32">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|x64">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{98351FEF-0032-457C-B9D9-D6B68A829386}</ProjectGuid>
+ <RootNamespace>ghostscript</RootNamespace>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.29511.113</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>debugobj\</OutDir>
+ <IntDir>debugobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'">
+ <OutDir>debugobjxp\</OutDir>
+ <IntDir>debugobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>debugobj64\</OutDir>
+ <IntDir>debugobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'">
+ <OutDir>debugobj64xp\</OutDir>
+ <IntDir>debugobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>obj\</OutDir>
+ <IntDir>obj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">
+ <OutDir>objxp\</OutDir>
+ <IntDir>objxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>obj64\</OutDir>
+ <IntDir>obj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">
+ <OutDir>obj64xp\</OutDir>
+ <IntDir>obj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
+ <OutDir>profobj\</OutDir>
+ <IntDir>profobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= profile-target &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= profile-target &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;DEBUG=0;TDEBUG=0;DEBUGSYM=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
+ <OutDir>profobj64\</OutDir>
+ <IntDir>profobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= profile-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= profile-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <OutDir>memobj\</OutDir>
+ <IntDir>memobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'">
+ <OutDir>memobjxp\</OutDir>
+ <IntDir>memobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <OutDir>memobj64\</OutDir>
+ <IntDir>memobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'">
+ <OutDir>memobj64xp\</OutDir>
+ <IntDir>memobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= memento-target &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CONTRIB=1 debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 SBR=1 DEVSTUDIO= WITH_CONTRIB=1 &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 WITH_CONTRIB=1 DEVSTUDIO= &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/windows/GhostPDL.sln b/windows/GhostPDL.sln
index e75e70b5..73ef4ddb 100644
--- a/windows/GhostPDL.sln
+++ b/windows/GhostPDL.sln
@@ -1,15 +1,17 @@

-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostscript", "ghostscript.vcproj", "{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}"
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29609.76
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostscript", "ghostscript.vcxproj", "{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostpcl", "ghostpcl.vcproj", "{ED35CF95-DAA1-45B3-9206-599F4170F198}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostpcl", "ghostpcl.vcxproj", "{ED35CF95-DAA1-45B3-9206-599F4170F198}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostxps", "ghostxps.vcproj", "{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostxps", "ghostxps.vcxproj", "{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostpdl", "ghostpdl.vcproj", "{C4038125-61B9-4147-9EA8-39690BA3A599}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghostpdl", "ghostpdl.vcxproj", "{C4038125-61B9-4147-9EA8-39690BA3A599}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "All", "All.vcproj", "{98351FEF-0032-457C-B9D9-D6B68A829386}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "All", "All.vcxproj", "{98351FEF-0032-457C-B9D9-D6B68A829386}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,120 +21,147 @@ Global
Debug-contrib|x64 = Debug-contrib|x64
Debug-cups|Win32 = Debug-cups|Win32
Debug-cups|x64 = Debug-cups|x64
+ DebugXP|Win32 = DebugXP|Win32
+ DebugXP|x64 = DebugXP|x64
Memento|Win32 = Memento|Win32
Memento|x64 = Memento|x64
+ MementoXP|Win32 = MementoXP|Win32
+ MementoXP|x64 = MementoXP|x64
Profile|Win32 = Profile|Win32
Profile|x64 = Profile|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Release-contrib|Win32 = Release-contrib|Win32
Release-contrib|x64 = Release-contrib|x64
+ ReleaseXP|Win32 = ReleaseXP|Win32
+ ReleaseXP|x64 = ReleaseXP|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug|Win32.ActiveCfg = Debug|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug|x64.ActiveCfg = Debug|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-contrib|Win32.ActiveCfg = Debug-contrib|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-contrib|x64.ActiveCfg = Debug-contrib|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-contrib|x64.Build.0 = Debug-contrib|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-cups|Win32.ActiveCfg = Debug-cups|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-cups|x64.ActiveCfg = Debug-cups|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Debug-cups|x64.Build.0 = Debug-cups|x64
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.DebugXP|Win32.ActiveCfg = DebugXP|Win32
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.DebugXP|x64.ActiveCfg = DebugXP|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Memento|Win32.ActiveCfg = Memento|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Memento|x64.ActiveCfg = Memento|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Memento|x64.Build.0 = Memento|x64
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.MementoXP|x64.ActiveCfg = MementoXP|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Profile|Win32.ActiveCfg = Profile|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Profile|x64.ActiveCfg = Profile|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Profile|x64.Build.0 = Profile|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release|Win32.ActiveCfg = Release|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release|x64.ActiveCfg = Release|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release|x64.Build.0 = Release|x64
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release-contrib|Win32.ActiveCfg = Release-contrib|Win32
{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release-contrib|x64.ActiveCfg = Release-contrib|x64
- {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.Release-contrib|x64.Build.0 = Release-contrib|x64
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.ReleaseXP|Win32.ActiveCfg = ReleaseXP|Win32
+ {1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}.ReleaseXP|x64.ActiveCfg = ReleaseXP|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug|Win32.ActiveCfg = Debug|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug|x64.ActiveCfg = Debug|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-contrib|Win32.ActiveCfg = Debug-contrib|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-contrib|x64.ActiveCfg = Debug-contrib|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-contrib|x64.Build.0 = Debug-contrib|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-cups|Win32.ActiveCfg = Debug-cups|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-cups|x64.ActiveCfg = Debug-cups|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Debug-cups|x64.Build.0 = Debug-cups|x64
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.DebugXP|Win32.ActiveCfg = DebugXP|Win32
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.DebugXP|x64.ActiveCfg = DebugXP|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Memento|Win32.ActiveCfg = Memento|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Memento|x64.ActiveCfg = Memento|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Memento|x64.Build.0 = Memento|x64
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.MementoXP|x64.ActiveCfg = MementoXP|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Profile|Win32.ActiveCfg = Profile|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Profile|x64.ActiveCfg = Profile|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Profile|x64.Build.0 = Profile|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Release|Win32.ActiveCfg = Release|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Release|x64.ActiveCfg = Release|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Release|x64.Build.0 = Release|x64
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Release-contrib|Win32.ActiveCfg = Release-contrib|Win32
{ED35CF95-DAA1-45B3-9206-599F4170F198}.Release-contrib|x64.ActiveCfg = Release-contrib|x64
- {ED35CF95-DAA1-45B3-9206-599F4170F198}.Release-contrib|x64.Build.0 = Release-contrib|x64
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.ReleaseXP|Win32.ActiveCfg = ReleaseXP|Win32
+ {ED35CF95-DAA1-45B3-9206-599F4170F198}.ReleaseXP|x64.ActiveCfg = ReleaseXP|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug|Win32.ActiveCfg = Debug|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug|x64.ActiveCfg = Debug|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-contrib|Win32.ActiveCfg = Debug-contrib|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-contrib|x64.ActiveCfg = Debug-contrib|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-contrib|x64.Build.0 = Debug-contrib|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-cups|Win32.ActiveCfg = Debug-cups|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-cups|x64.ActiveCfg = Debug-cups|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Debug-cups|x64.Build.0 = Debug-cups|x64
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.DebugXP|Win32.ActiveCfg = DebugXP|Win32
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.DebugXP|x64.ActiveCfg = DebugXP|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Memento|Win32.ActiveCfg = Memento|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Memento|x64.ActiveCfg = Memento|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Memento|x64.Build.0 = Memento|x64
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.MementoXP|x64.ActiveCfg = MementoXP|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Profile|Win32.ActiveCfg = Profile|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Profile|x64.ActiveCfg = Profile|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Profile|x64.Build.0 = Profile|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release|Win32.ActiveCfg = Release|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release|x64.ActiveCfg = Release|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release|x64.Build.0 = Release|x64
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release-contrib|Win32.ActiveCfg = Release-contrib|Win32
{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release-contrib|x64.ActiveCfg = Release-contrib|x64
- {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.Release-contrib|x64.Build.0 = Release-contrib|x64
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.ReleaseXP|Win32.ActiveCfg = ReleaseXP|Win32
+ {DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}.ReleaseXP|x64.ActiveCfg = ReleaseXP|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug|Win32.ActiveCfg = Debug|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug|x64.ActiveCfg = Debug|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-contrib|Win32.ActiveCfg = Debug-contrib|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-contrib|x64.ActiveCfg = Debug-contrib|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-contrib|x64.Build.0 = Debug-contrib|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-cups|Win32.ActiveCfg = Debug-cups|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-cups|x64.ActiveCfg = Debug-cups|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Debug-cups|x64.Build.0 = Debug-cups|x64
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.DebugXP|Win32.ActiveCfg = DebugXP|Win32
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.DebugXP|x64.ActiveCfg = DebugXP|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Memento|Win32.ActiveCfg = Memento|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Memento|x64.ActiveCfg = Memento|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Memento|x64.Build.0 = Memento|x64
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.MementoXP|x64.ActiveCfg = MementoXP|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Profile|Win32.ActiveCfg = Profile|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Profile|x64.ActiveCfg = Profile|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Profile|x64.Build.0 = Profile|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Release|Win32.ActiveCfg = Release|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Release|x64.ActiveCfg = Release|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Release|x64.Build.0 = Release|x64
{C4038125-61B9-4147-9EA8-39690BA3A599}.Release-contrib|Win32.ActiveCfg = Release-contrib|Win32
{C4038125-61B9-4147-9EA8-39690BA3A599}.Release-contrib|x64.ActiveCfg = Release-contrib|x64
- {C4038125-61B9-4147-9EA8-39690BA3A599}.Release-contrib|x64.Build.0 = Release-contrib|x64
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.ReleaseXP|Win32.ActiveCfg = ReleaseXP|Win32
+ {C4038125-61B9-4147-9EA8-39690BA3A599}.ReleaseXP|x64.ActiveCfg = ReleaseXP|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug|Win32.ActiveCfg = Debug|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug|Win32.Build.0 = Debug|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug|x64.ActiveCfg = Debug|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug|x64.Build.0 = Debug|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-contrib|Win32.ActiveCfg = Debug-contrib|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-contrib|Win32.Build.0 = Debug-contrib|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-contrib|x64.ActiveCfg = Debug|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-contrib|x64.ActiveCfg = Debug-contrib|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-contrib|x64.Build.0 = Debug-contrib|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-cups|Win32.ActiveCfg = Debug-cups|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-cups|Win32.Build.0 = Debug-cups|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-cups|x64.ActiveCfg = Debug|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-cups|x64.ActiveCfg = Debug-cups|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Debug-cups|x64.Build.0 = Debug-cups|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|Win32.ActiveCfg = DebugXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|Win32.Build.0 = DebugXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|x64.ActiveCfg = DebugXP|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.DebugXP|x64.Build.0 = DebugXP|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|Win32.ActiveCfg = Memento|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|Win32.Build.0 = Memento|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|x64.ActiveCfg = Release|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|x64.ActiveCfg = Memento|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Memento|x64.Build.0 = Memento|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.MementoXP|Win32.ActiveCfg = MementoXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.MementoXP|Win32.Build.0 = MementoXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.MementoXP|x64.ActiveCfg = MementoXP|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.MementoXP|x64.Build.0 = MementoXP|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Profile|Win32.ActiveCfg = Profile|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Profile|Win32.Build.0 = Profile|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Profile|x64.ActiveCfg = Release|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Profile|x64.ActiveCfg = Profile|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Profile|x64.Build.0 = Profile|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Release|Win32.ActiveCfg = Release|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Release|Win32.Build.0 = Release|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Release|x64.ActiveCfg = Release|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Release|x64.ActiveCfg = Release|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Release|x64.Build.0 = Release|x64
{98351FEF-0032-457C-B9D9-D6B68A829386}.Release-contrib|Win32.ActiveCfg = Release-contrib|Win32
{98351FEF-0032-457C-B9D9-D6B68A829386}.Release-contrib|Win32.Build.0 = Release-contrib|Win32
- {98351FEF-0032-457C-B9D9-D6B68A829386}.Release-contrib|x64.ActiveCfg = Release|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Release-contrib|x64.ActiveCfg = Release-contrib|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.Release-contrib|x64.Build.0 = Release-contrib|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.ReleaseXP|Win32.ActiveCfg = ReleaseXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.ReleaseXP|Win32.Build.0 = ReleaseXP|Win32
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.ReleaseXP|x64.ActiveCfg = ReleaseXP|x64
+ {98351FEF-0032-457C-B9D9-D6B68A829386}.ReleaseXP|x64.Build.0 = ReleaseXP|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C2940BC0-D59A-4FAE-AE5C-A987A8BBA9B4}
+ EndGlobalSection
EndGlobal
diff --git a/windows/ghostpcl.vcxproj b/windows/ghostpcl.vcxproj
new file mode 100644
index 00000000..e7cce71f
--- /dev/null
+++ b/windows/ghostpcl.vcxproj
@@ -0,0 +1,616 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-contrib|Win32">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-contrib|x64">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|Win32">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|x64">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|Win32">
+ <Configuration>DebugXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|x64">
+ <Configuration>DebugXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|Win32">
+ <Configuration>MementoXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|x64">
+ <Configuration>MementoXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|Win32">
+ <Configuration>Profile</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|x64">
+ <Configuration>Profile</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|Win32">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|x64">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|Win32">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|x64">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{ED35CF95-DAA1-45B3-9206-599F4170F198}</ProjectGuid>
+ <RootNamespace>ghostpcl</RootNamespace>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.29511.113</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>debugobj\</OutDir>
+ <IntDir>debugobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'">
+ <OutDir>debugobjxp\</OutDir>
+ <IntDir>debugobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>debugobj64\</OutDir>
+ <IntDir>debugobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'">
+ <OutDir>debugobj64xp\</OutDir>
+ <IntDir>debugobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>obj\</OutDir>
+ <IntDir>obj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">
+ <OutDir>objxp\</OutDir>
+ <IntDir>objxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>obj64\</OutDir>
+ <IntDir>obj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">
+ <OutDir>obj64xp\</OutDir>
+ <IntDir>obj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
+ <OutDir>profobj\</OutDir>
+ <IntDir>profobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6profile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6profile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;DEBUG=0;TDEBUG=0;DEBUGSYM=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
+ <OutDir>profobj64\</OutDir>
+ <IntDir>profobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6profile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6profile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <OutDir>memobj\</OutDir>
+ <IntDir>memobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'">
+ <OutDir>memobjxp\</OutDir>
+ <IntDir>memobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <OutDir>memobj64\</OutDir>
+ <IntDir>memobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'">
+ <OutDir>memobj64xp\</OutDir>
+ <IntDir>memobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpcl6memento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpcl6debug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpcl6win32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 WITH_CONTRIB=1 DEVSTUDIO= gpcl6 &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpcl6win64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\pcl\pcl\pcbiptrn.c" />
+ <ClCompile Include="..\pcl\pcl\pccid.c" />
+ <ClCompile Include="..\pcl\pcl\pccolor.c" />
+ <ClCompile Include="..\pcl\pcl\pccprint.c" />
+ <ClCompile Include="..\pcl\pcl\pccsbase.c" />
+ <ClCompile Include="..\pcl\pcl\pcdither.c" />
+ <ClCompile Include="..\pcl\pcl\pcdraw.c" />
+ <ClCompile Include="..\pcl\pcl\pcfont.c" />
+ <ClCompile Include="..\pcl\pcl\pcfontpg.c" />
+ <ClCompile Include="..\pcl\pcl\pcfrgrnd.c" />
+ <ClCompile Include="..\pcl\pcl\pcfsel.c" />
+ <ClCompile Include="..\pcl\pcl\pcht.c" />
+ <ClCompile Include="..\pcl\pcl\pcident.c" />
+ <ClCompile Include="..\pcl\pcl\pcimpl.c" />
+ <ClCompile Include="..\pcl\pcl\pcindxed.c" />
+ <ClCompile Include="..\pcl\pcl\pcjob.c" />
+ <ClCompile Include="..\pcl\pcl\pclookup.c" />
+ <ClCompile Include="..\pcl\pcl\pcmacros.c" />
+ <ClCompile Include="..\pcl\pcl\pcmisc.c" />
+ <ClCompile Include="..\pcl\pcl\pcmtx3.c" />
+ <ClCompile Include="..\pcl\pcl\pcommand.c" />
+ <ClCompile Include="..\pcl\pcl\pcpage.c" />
+ <ClCompile Include="..\pcl\pcl\pcpalet.c" />
+ <ClCompile Include="..\pcl\pcl\pcparse.c" />
+ <ClCompile Include="..\pcl\pcl\pcpatrn.c" />
+ <ClCompile Include="..\pcl\pcl\pcpatxfm.c" />
+ <ClCompile Include="..\pcl\pcl\pcrect.c" />
+ <ClCompile Include="..\pcl\pcl\pcsfont.c" />
+ <ClCompile Include="..\pcl\pcl\pcstatus.c" />
+ <ClCompile Include="..\pcl\pcl\pcsymbol.c" />
+ <ClCompile Include="..\pcl\pcl\pctext.c" />
+ <ClCompile Include="..\pcl\pcl\pctop.c" />
+ <ClCompile Include="..\pcl\pcl\pcuptrn.c" />
+ <ClCompile Include="..\pcl\pcl\pcursor.c" />
+ <ClCompile Include="..\pcl\pcl\pcwhtidx.c" />
+ <ClCompile Include="..\pcl\pcl\pgchar.c" />
+ <ClCompile Include="..\pcl\pcl\pgcolor.c" />
+ <ClCompile Include="..\pcl\pcl\pgconfig.c" />
+ <ClCompile Include="..\pcl\pcl\pgdraw.c" />
+ <ClCompile Include="..\pcl\pcl\pgfdata.c" />
+ <ClCompile Include="..\pcl\pcl\pgfont.c" />
+ <ClCompile Include="..\pcl\pcl\pgframe.c" />
+ <ClCompile Include="..\pcl\pcl\pggeom.c" />
+ <ClCompile Include="..\pcl\pcl\pginit.c" />
+ <ClCompile Include="..\pcl\pcl\pglabel.c" />
+ <ClCompile Include="..\pcl\pcl\pglfill.c" />
+ <ClCompile Include="..\pcl\pcl\pgmisc.c" />
+ <ClCompile Include="..\pcl\pcl\pgparse.c" />
+ <ClCompile Include="..\pcl\pcl\pgpoly.c" />
+ <ClCompile Include="..\pcl\pcl\pgvector.c" />
+ <ClCompile Include="..\pcl\pcl\rtgmode.c" />
+ <ClCompile Include="..\pcl\pcl\rtmisc.c" />
+ <ClCompile Include="..\pcl\pcl\rtraster.c" />
+ <ClCompile Include="..\pcl\pcl\rtrstcmp.c" />
+ <ClCompile Include="..\pcl\pl\pjparse.c" />
+ <ClCompile Include="..\pcl\pl\pjparsei.c" />
+ <ClCompile Include="..\pcl\pl\pjtop.c" />
+ <ClCompile Include="..\pcl\pl\plalloc.c" />
+ <ClCompile Include="..\pcl\pl\plapi.c" />
+ <ClCompile Include="..\pcl\pl\plchar.c" />
+ <ClCompile Include="..\pcl\pl\pldict.c" />
+ <ClCompile Include="..\pcl\pl\pldraw.c" />
+ <ClCompile Include="..\pcl\pl\plfapi.c" />
+ <ClCompile Include="..\pcl\pl\plfont.c" />
+ <ClCompile Include="..\pcl\pl\plftable.c" />
+ <ClCompile Include="..\pcl\pl\plht.c" />
+ <ClCompile Include="..\pcl\pl\plimpl.c" />
+ <ClCompile Include="..\pcl\pl\pllfont.c" />
+ <ClCompile Include="..\pcl\pl\plmain.c" />
+ <ClCompile Include="..\pcl\pl\plparams.c" />
+ <ClCompile Include="..\pcl\pl\plplatf.c" />
+ <ClCompile Include="..\pcl\pl\plplatfps.c" />
+ <ClCompile Include="..\pcl\pl\plsymbol.c" />
+ <ClCompile Include="..\pcl\pl\pltop.c" />
+ <ClCompile Include="..\pcl\pl\pltoputl.c" />
+ <ClCompile Include="..\pcl\pl\pluchar.c" />
+ <ClCompile Include="..\pcl\pl\plufont.c" />
+ <ClCompile Include="..\pcl\pl\plufstlp.c" />
+ <ClCompile Include="..\pcl\pl\plufstlp1.c" />
+ <ClCompile Include="..\pcl\pl\plulfont.c" />
+ <ClCompile Include="..\pcl\pl\plvalue.c" />
+ <ClCompile Include="..\pcl\pl\plvocab.c" />
+ <ClCompile Include="..\pcl\pl\plwimg.c" />
+ <ClCompile Include="..\pcl\pl\plwmainc.c" />
+ <ClCompile Include="..\pcl\pl\plwreg.c" />
+ <ClCompile Include="..\pcl\pl\realmain.c" />
+ <ClCompile Include="..\pcl\pxl\pxbfont.c" />
+ <ClCompile Include="..\pcl\pxl\pxerrors.c" />
+ <ClCompile Include="..\pcl\pxl\pxffont.c" />
+ <ClCompile Include="..\pcl\pxl\pxfont.c" />
+ <ClCompile Include="..\pcl\pxl\pxgstate.c" />
+ <ClCompile Include="..\pcl\pxl\pximage.c" />
+ <ClCompile Include="..\pcl\pxl\pximpl.c" />
+ <ClCompile Include="..\pcl\pxl\pxink.c" />
+ <ClCompile Include="..\pcl\pxl\pxpaint.c" />
+ <ClCompile Include="..\pcl\pxl\pxparse.c" />
+ <ClCompile Include="..\pcl\pxl\pxptable.c" />
+ <ClCompile Include="..\pcl\pxl\pxpthr.c" />
+ <ClCompile Include="..\pcl\pxl\pxsessio.c" />
+ <ClCompile Include="..\pcl\pxl\pxstate.c" />
+ <ClCompile Include="..\pcl\pxl\pxstream.c" />
+ <ClCompile Include="..\pcl\pxl\pxtop.c" />
+ <ClCompile Include="..\pcl\pxl\pxvalue.c" />
+ <ClCompile Include="..\pcl\pxl\pxvendor.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\pcl\pcl\pcbiptrn.h" />
+ <ClInclude Include="..\pcl\pcl\pccid.h" />
+ <ClInclude Include="..\pcl\pcl\pccoord.h" />
+ <ClInclude Include="..\pcl\pcl\pccsbase.h" />
+ <ClInclude Include="..\pcl\pcl\pcdict.h" />
+ <ClInclude Include="..\pcl\pcl\pcdither.h" />
+ <ClInclude Include="..\pcl\pcl\pcdraw.h" />
+ <ClInclude Include="..\pcl\pcl\pcfont.h" />
+ <ClInclude Include="..\pcl\pcl\pcfontst.h" />
+ <ClInclude Include="..\pcl\pcl\pcfrgrnd.h" />
+ <ClInclude Include="..\pcl\pcl\pcfsel.h" />
+ <ClInclude Include="..\pcl\pcl\pcht.h" />
+ <ClInclude Include="..\pcl\pcl\pcident.h" />
+ <ClInclude Include="..\pcl\pcl\pcindxed.h" />
+ <ClInclude Include="..\pcl\pcl\pclookup.h" />
+ <ClInclude Include="..\pcl\pcl\pcmtx3.h" />
+ <ClInclude Include="..\pcl\pcl\pcommand.h" />
+ <ClInclude Include="..\pcl\pcl\pcpage.h" />
+ <ClInclude Include="..\pcl\pcl\pcpalet.h" />
+ <ClInclude Include="..\pcl\pcl\pcparam.h" />
+ <ClInclude Include="..\pcl\pcl\pcparse.h" />
+ <ClInclude Include="..\pcl\pcl\pcpatrn.h" />
+ <ClInclude Include="..\pcl\pcl\pcpattyp.h" />
+ <ClInclude Include="..\pcl\pcl\pcpatxfm.h" />
+ <ClInclude Include="..\pcl\pcl\pcstate.h" />
+ <ClInclude Include="..\pcl\pcl\pcsymbol.h" />
+ <ClInclude Include="..\pcl\pcl\pctop.h" />
+ <ClInclude Include="..\pcl\pcl\pctpm.h" />
+ <ClInclude Include="..\pcl\pcl\pcuptrn.h" />
+ <ClInclude Include="..\pcl\pcl\pcursor.h" />
+ <ClInclude Include="..\pcl\pcl\pcwhtidx.h" />
+ <ClInclude Include="..\pcl\pcl\pcxfmst.h" />
+ <ClInclude Include="..\pcl\pcl\pgdraw.h" />
+ <ClInclude Include="..\pcl\pcl\pgfdata.h" />
+ <ClInclude Include="..\pcl\pcl\pgfont.h" />
+ <ClInclude Include="..\pcl\pcl\pggeom.h" />
+ <ClInclude Include="..\pcl\pcl\pginit.h" />
+ <ClInclude Include="..\pcl\pcl\pgmand.h" />
+ <ClInclude Include="..\pcl\pcl\pgmisc.h" />
+ <ClInclude Include="..\pcl\pcl\pgstate.h" />
+ <ClInclude Include="..\pcl\pcl\rtgmode.h" />
+ <ClInclude Include="..\pcl\pcl\rtmisc.h" />
+ <ClInclude Include="..\pcl\pcl\rtraster.h" />
+ <ClInclude Include="..\pcl\pcl\rtrstcmp.h" />
+ <ClInclude Include="..\pcl\pcl\rtrstst.h" />
+ <ClInclude Include="..\pcl\pl\pjparse.h" />
+ <ClInclude Include="..\pcl\pl\pjtop.h" />
+ <ClInclude Include="..\pcl\pl\plalloc.h" />
+ <ClInclude Include="..\pcl\pl\plapi.h" />
+ <ClInclude Include="..\pcl\pl\plchar.h" />
+ <ClInclude Include="..\pcl\pl\pldebug.h" />
+ <ClInclude Include="..\pcl\pl\pldict.h" />
+ <ClInclude Include="..\pcl\pl\pldraw.h" />
+ <ClInclude Include="..\pcl\pl\plfapi.h" />
+ <ClInclude Include="..\pcl\pl\plfont.h" />
+ <ClInclude Include="..\pcl\pl\plftable.h" />
+ <ClInclude Include="..\pcl\pl\plht.h" />
+ <ClInclude Include="..\pcl\pl\pllfont.h" />
+ <ClInclude Include="..\pcl\pl\plmain.h" />
+ <ClInclude Include="..\pcl\pl\plparse.h" />
+ <ClInclude Include="..\pcl\pl\plplatf.h" />
+ <ClInclude Include="..\pcl\pl\plsymbol.h" />
+ <ClInclude Include="..\pcl\pl\pltop.h" />
+ <ClInclude Include="..\pcl\pl\pltoputl.h" />
+ <ClInclude Include="..\pcl\pl\plufstlp.h" />
+ <ClInclude Include="..\pcl\pl\plvalue.h" />
+ <ClInclude Include="..\pcl\pl\plvocab.h" />
+ <ClInclude Include="..\pcl\pl\plwimg.h" />
+ <ClInclude Include="..\pcl\pl\plwreg.h" />
+ <ClInclude Include="..\pcl\pl\plwres.h" />
+ <ClInclude Include="..\pcl\pxl\pxattr.h" />
+ <ClInclude Include="..\pcl\pxl\pxbfont.h" />
+ <ClInclude Include="..\pcl\pxl\pxdict.h" />
+ <ClInclude Include="..\pcl\pxl\pxenum.h" />
+ <ClInclude Include="..\pcl\pxl\pxerrors.h" />
+ <ClInclude Include="..\pcl\pxl\pxfont.h" />
+ <ClInclude Include="..\pcl\pxl\pxgstate.h" />
+ <ClInclude Include="..\pcl\pxl\pxoper.h" />
+ <ClInclude Include="..\pcl\pxl\pxparse.h" />
+ <ClInclude Include="..\pcl\pxl\pxptable.h" />
+ <ClInclude Include="..\pcl\pxl\pxpthr.h" />
+ <ClInclude Include="..\pcl\pxl\pxstate.h" />
+ <ClInclude Include="..\pcl\pxl\pxtag.h" />
+ <ClInclude Include="..\pcl\pxl\pxvalue.h" />
+ <ClInclude Include="..\pcl\pxl\pxvendor.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/windows/ghostpcl.vcxproj.filters b/windows/ghostpcl.vcxproj.filters
new file mode 100644
index 00000000..048decea
--- /dev/null
+++ b/windows/ghostpcl.vcxproj.filters
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="pcl">
+ <UniqueIdentifier>{6b624ab7-9800-43bb-8223-51f80b0dec16}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="pcl %28.h%29">
+ <UniqueIdentifier>{ad569c49-36bf-4f66-a5c9-bef83a62eb83}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="pl">
+ <UniqueIdentifier>{5c442046-a135-42cf-962b-f7a789c395b0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="pl %28.h%29">
+ <UniqueIdentifier>{08e4da99-c29c-46d7-8f42-4515768df016}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="pxl">
+ <UniqueIdentifier>{47dc0ea2-1a45-426c-a582-5c8c71872502}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="pxl %28.h%29">
+ <UniqueIdentifier>{23702ff2-ab3e-4083-8329-a37516e528ae}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\pcl\pcl\pcbiptrn.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pccid.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pccolor.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pccprint.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pccsbase.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcdither.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcdraw.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcfont.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcfontpg.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcfrgrnd.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcfsel.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcht.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcident.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcimpl.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcindxed.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcjob.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pclookup.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcmacros.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcmisc.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcmtx3.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcommand.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcpage.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcpalet.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcparse.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcpatrn.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcpatxfm.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcrect.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcsfont.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcstatus.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcsymbol.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pctext.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pctop.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcuptrn.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcursor.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pcwhtidx.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgchar.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgcolor.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgconfig.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgdraw.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgfdata.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgfont.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgframe.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pggeom.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pginit.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pglabel.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pglfill.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgmisc.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgparse.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgpoly.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\pgvector.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\rtgmode.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\rtmisc.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\rtraster.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pcl\rtrstcmp.c">
+ <Filter>pcl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pjparse.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pjparsei.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pjtop.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plalloc.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plapi.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plchar.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pldict.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pldraw.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plfapi.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plfont.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plftable.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plht.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plimpl.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pllfont.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plmain.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plparams.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plplatf.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plplatfps.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plsymbol.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pltop.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pltoputl.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\pluchar.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plufont.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plufstlp.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plufstlp1.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plulfont.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plvalue.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plvocab.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plwimg.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plwmainc.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\plwreg.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pl\realmain.c">
+ <Filter>pl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxbfont.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxerrors.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxffont.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxfont.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxgstate.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pximage.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pximpl.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxink.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxpaint.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxparse.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxptable.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxpthr.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxsessio.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxstate.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxstream.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxtop.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxvalue.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\pcl\pxl\pxvendor.c">
+ <Filter>pxl</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\pcl\pcl\pcbiptrn.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pccid.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pccoord.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pccsbase.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcdict.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcdither.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcdraw.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcfont.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcfontst.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcfrgrnd.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcfsel.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcht.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcident.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcindxed.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pclookup.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcmtx3.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcommand.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcpage.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcpalet.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcparam.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcparse.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcpatrn.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcpattyp.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcpatxfm.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcstate.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcsymbol.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pctop.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pctpm.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcuptrn.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcursor.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcwhtidx.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pcxfmst.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgdraw.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgfdata.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgfont.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pggeom.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pginit.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgmand.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgmisc.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\pgstate.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\rtgmode.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\rtmisc.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\rtraster.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\rtrstcmp.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pcl\rtrstst.h">
+ <Filter>pcl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pjparse.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pjtop.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plalloc.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plapi.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plchar.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pldebug.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pldict.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pldraw.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plfapi.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plfont.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plftable.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plht.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pllfont.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plmain.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plparse.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plplatf.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plsymbol.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pltop.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\pltoputl.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plufstlp.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plvalue.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plvocab.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plwimg.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plwreg.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pl\plwres.h">
+ <Filter>pl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxattr.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxbfont.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxdict.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxenum.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxerrors.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxfont.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxgstate.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxoper.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxparse.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxptable.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxpthr.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxstate.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxtag.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxvalue.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\pcl\pxl\pxvendor.h">
+ <Filter>pxl %28.h%29</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/windows/ghostpdl.vcproj b/windows/ghostpdl.vcproj
index bfddbd2f..908db316 100644
--- a/windows/ghostpdl.vcproj
+++ b/windows/ghostpdl.vcproj
@@ -303,10 +303,34 @@
</References>
<Files>
<Filter
- Name="pdlpsi"
+ Name="gpdl"
>
<File
- RelativePath="..\gpdl\psi\psitop.c"
+ RelativePath="..\gpdl\jbig2top.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\jp2ktop.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\jpgtop.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\pngtop.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\psitop.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\pwgtop.c"
+ >
+ </File>
+ <File
+ RelativePath="..\gpdl\tifftop.c"
>
</File>
</Filter>
diff --git a/windows/ghostpdl.vcxproj b/windows/ghostpdl.vcxproj
new file mode 100644
index 00000000..ed099496
--- /dev/null
+++ b/windows/ghostpdl.vcxproj
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-contrib|Win32">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-contrib|x64">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|Win32">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|x64">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|Win32">
+ <Configuration>DebugXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|x64">
+ <Configuration>DebugXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|Win32">
+ <Configuration>MementoXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|x64">
+ <Configuration>MementoXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|Win32">
+ <Configuration>Profile</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|x64">
+ <Configuration>Profile</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|Win32">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|x64">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|Win32">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|x64">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C4038125-61B9-4147-9EA8-39690BA3A599}</ProjectGuid>
+ <RootNamespace>ghostscript</RootNamespace>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.29511.113</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>debugobj\</OutDir>
+ <IntDir>debugobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'">
+ <OutDir>debugobjxp\</OutDir>
+ <IntDir>debugobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>debugobj64\</OutDir>
+ <IntDir>debugobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'">
+ <OutDir>debugobj64xp\</OutDir>
+ <IntDir>debugobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>obj\</OutDir>
+ <IntDir>obj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">
+ <OutDir>objxp\</OutDir>
+ <IntDir>objxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>obj64\</OutDir>
+ <IntDir>obj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">
+ <OutDir>obj64xp\</OutDir>
+ <IntDir>obj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
+ <OutDir>profobj\</OutDir>
+ <IntDir>profobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdlprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdlprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;DEBUG=0;TDEBUG=0;DEBUGSYM=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
+ <OutDir>profobj64\</OutDir>
+ <IntDir>profobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdlprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdlprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <OutDir>memobj\</OutDir>
+ <IntDir>memobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'">
+ <OutDir>memobjxp\</OutDir>
+ <IntDir>memobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <OutDir>memobj64\</OutDir>
+ <IntDir>memobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'">
+ <OutDir>memobj64xp\</OutDir>
+ <IntDir>memobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gpdlmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gpdldebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpdlwin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 WITH_CONTRIB=1 DEVSTUDIO= gpdl &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gpdlwin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\gpdl\jbig2top.c" />
+ <ClCompile Include="..\gpdl\jp2ktop.c" />
+ <ClCompile Include="..\gpdl\jpgtop.c" />
+ <ClCompile Include="..\gpdl\pngtop.c" />
+ <ClCompile Include="..\gpdl\psitop.c" />
+ <ClCompile Include="..\gpdl\pwgtop.c" />
+ <ClCompile Include="..\gpdl\tifftop.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/windows/ghostpdl.vcxproj.filters b/windows/ghostpdl.vcxproj.filters
new file mode 100644
index 00000000..dc436d95
--- /dev/null
+++ b/windows/ghostpdl.vcxproj.filters
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="gpdl">
+ <UniqueIdentifier>{f004fa3e-78c9-45ee-b4df-dff0c4ccdfc8}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\gpdl\jbig2top.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\jp2ktop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\jpgtop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\pngtop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\psitop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\pwgtop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ <ClCompile Include="..\gpdl\tifftop.c">
+ <Filter>gpdl</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/windows/ghostscript.vcproj b/windows/ghostscript.vcproj
index efc15b9c..f785c422 100644
--- a/windows/ghostscript.vcproj
+++ b/windows/ghostscript.vcproj
@@ -5766,10 +5766,6 @@
>
</File>
<File
- RelativePath="..\devices\gdevgprf.c"
- >
- </File>
- <File
RelativePath="..\devices\gdevhl7x.c"
>
</File>
@@ -6940,6 +6936,10 @@
>
</File>
<File
+ RelativePath="..\jbig2dec\jbig2_hufftab.c"
+ >
+ </File>
+ <File
RelativePath="..\jbig2dec\jbig2_hufftab.h"
>
</File>
@@ -9624,6 +9624,26 @@
>
</File>
</Filter>
+ <Filter
+ Name="urf"
+ >
+ <File
+ RelativePath="..\urf\gdevurf.c"
+ >
+ </File>
+ <File
+ RelativePath="..\urf\surfd.c"
+ >
+ </File>
+ <File
+ RelativePath="..\urf\surfx.h"
+ >
+ </File>
+ <File
+ RelativePath="..\urf\urffilter.c"
+ >
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/windows/ghostscript.vcxproj b/windows/ghostscript.vcxproj
new file mode 100644
index 00000000..9e8435fe
--- /dev/null
+++ b/windows/ghostscript.vcxproj
@@ -0,0 +1,2779 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-contrib|Win32">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-contrib|x64">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|Win32">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|x64">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|Win32">
+ <Configuration>DebugXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|x64">
+ <Configuration>DebugXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|Win32">
+ <Configuration>MementoXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|x64">
+ <Configuration>MementoXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|Win32">
+ <Configuration>Profile</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|x64">
+ <Configuration>Profile</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|Win32">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|x64">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|Win32">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|x64">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{1EDA2AC3-D74F-4F4D-B4D6-AC05CC594A2F}</ProjectGuid>
+ <RootNamespace>ghostscript</RootNamespace>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.29511.113</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>debugobj\</OutDir>
+ <IntDir>debugobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'">
+ <OutDir>debugobjxp\</OutDir>
+ <IntDir>debugobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>debugobj64\</OutDir>
+ <IntDir>debugobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'">
+ <OutDir>debugobj64xp\</OutDir>
+ <IntDir>debugobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbinxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>obj\</OutDir>
+ <IntDir>obj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">
+ <OutDir>objxp\</OutDir>
+ <IntDir>objxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>obj64\</OutDir>
+ <IntDir>obj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">
+ <OutDir>obj64xp\</OutDir>
+ <IntDir>obj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\binxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
+ <OutDir>profobj\</OutDir>
+ <IntDir>profobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;DEBUG=0;TDEBUG=0;DEBUGSYM=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
+ <OutDir>profobj64\</OutDir>
+ <IntDir>profobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <OutDir>memobj\</OutDir>
+ <IntDir>memobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'">
+ <OutDir>memobjxp\</OutDir>
+ <IntDir>memobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <OutDir>memobj64\</OutDir>
+ <IntDir>memobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'">
+ <OutDir>memobj64xp\</OutDir>
+ <IntDir>memobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membinxp\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin32c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 WITH_CONTRIB=1 DEVSTUDIO= gs &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gswin64c.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <None Include="..\devices\vector\opdfread.ps" />
+ <None Include="..\doc\API.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\AUTHORS" />
+ <None Include="..\doc\C-style.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Changes.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Commprod.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\COPYING" />
+ <None Include="..\doc\Deprecated.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Details.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Details8.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Details9.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Develop.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Devices.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\DLL.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Drivers.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Fonts.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\gs.css" />
+ <None Include="..\doc\GS9_Color_Management.tex" />
+ <None Include="..\doc\Helpers.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Hershey.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History1.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History2.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History3.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History4.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History5.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History6.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History7.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History8.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\History9.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\index.html" />
+ <None Include="..\doc\Install.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Issues.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Language.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Lib.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Make.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\News.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Projects.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Ps-style.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Ps2epsi.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Ps2pdf.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Ps2ps2.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\pscet_status.txt" />
+ <None Include="..\doc\Psfiles.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Readme.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Release.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Source.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Unix-lpr.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Use.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\doc\Xfonts.htm">
+ <DeploymentContent>true</DeploymentContent>
+ </None>
+ <None Include="..\jpeg\jmemdosa.asm" />
+ <None Include="..\Resource\CMap\78-EUC-H" />
+ <None Include="..\Resource\CMap\78-EUC-V" />
+ <None Include="..\Resource\CMap\78-H" />
+ <None Include="..\Resource\CMap\78-RKSJ-H" />
+ <None Include="..\Resource\CMap\78-RKSJ-V" />
+ <None Include="..\Resource\CMap\78-V" />
+ <None Include="..\Resource\CMap\78ms-RKSJ-H" />
+ <None Include="..\Resource\CMap\78ms-RKSJ-V" />
+ <None Include="..\Resource\CMap\83pv-RKSJ-H" />
+ <None Include="..\Resource\CMap\90ms-RKSJ-H" />
+ <None Include="..\Resource\CMap\90ms-RKSJ-UCS2" />
+ <None Include="..\Resource\CMap\90ms-RKSJ-V" />
+ <None Include="..\Resource\CMap\90msp-RKSJ-H" />
+ <None Include="..\Resource\CMap\90msp-RKSJ-V" />
+ <None Include="..\Resource\CMap\90pv-RKSJ-H" />
+ <None Include="..\Resource\CMap\90pv-RKSJ-UCS2" />
+ <None Include="..\Resource\CMap\90pv-RKSJ-UCS2C" />
+ <None Include="..\Resource\CMap\90pv-RKSJ-V" />
+ <None Include="..\Resource\CMap\Add-H" />
+ <None Include="..\Resource\CMap\Add-RKSJ-H" />
+ <None Include="..\Resource\CMap\Add-RKSJ-V" />
+ <None Include="..\Resource\CMap\Add-V" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-0" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-1" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-2" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-3" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-4" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-5" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-6" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-B5pc" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-ETenms-B5" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-CID" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-Host" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-Mac" />
+ <None Include="..\Resource\CMap\Adobe-CNS1-UCS2" />
+ <None Include="..\Resource\CMap\Adobe-GB1-0" />
+ <None Include="..\Resource\CMap\Adobe-GB1-1" />
+ <None Include="..\Resource\CMap\Adobe-GB1-2" />
+ <None Include="..\Resource\CMap\Adobe-GB1-3" />
+ <None Include="..\Resource\CMap\Adobe-GB1-4" />
+ <None Include="..\Resource\CMap\Adobe-GB1-5" />
+ <None Include="..\Resource\CMap\Adobe-GB1-GBK-EUC" />
+ <None Include="..\Resource\CMap\Adobe-GB1-GBpc-EUC" />
+ <None Include="..\Resource\CMap\Adobe-GB1-H-CID" />
+ <None Include="..\Resource\CMap\Adobe-GB1-H-Host" />
+ <None Include="..\Resource\CMap\Adobe-GB1-H-Mac" />
+ <None Include="..\Resource\CMap\Adobe-GB1-UCS2" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-0" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-1" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-2" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-3" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-4" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-5" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-6" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-90ms-RKSJ" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-90pv-RKSJ" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-CID" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-Host" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-Mac" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-PS-H" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-PS-V" />
+ <None Include="..\Resource\CMap\Adobe-Japan1-UCS2" />
+ <None Include="..\Resource\CMap\Adobe-Japan2-0" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-0" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-1" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-2" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-CID" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-Host" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-Mac" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-KSCms-UHC" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-KSCpc-EUC" />
+ <None Include="..\Resource\CMap\Adobe-Korea1-UCS2" />
+ <None Include="..\Resource\CMap\B5-H" />
+ <None Include="..\Resource\CMap\B5-V" />
+ <None Include="..\Resource\CMap\B5pc-H" />
+ <None Include="..\Resource\CMap\B5pc-UCS2" />
+ <None Include="..\Resource\CMap\B5pc-UCS2C" />
+ <None Include="..\Resource\CMap\B5pc-V" />
+ <None Include="..\Resource\CMap\CNS-EUC-H" />
+ <None Include="..\Resource\CMap\CNS-EUC-V" />
+ <None Include="..\Resource\CMap\CNS01-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS02-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS03-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS04-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS05-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS06-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS07-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS1-H" />
+ <None Include="..\Resource\CMap\CNS1-V" />
+ <None Include="..\Resource\CMap\CNS15-RKSJ-H" />
+ <None Include="..\Resource\CMap\CNS2-H" />
+ <None Include="..\Resource\CMap\CNS2-V" />
+ <None Include="..\Resource\CMap\ETen-B5-H" />
+ <None Include="..\Resource\CMap\ETen-B5-UCS2" />
+ <None Include="..\Resource\CMap\ETen-B5-V" />
+ <None Include="..\Resource\CMap\ETenms-B5-H" />
+ <None Include="..\Resource\CMap\ETenms-B5-V" />
+ <None Include="..\Resource\CMap\ETHK-B5-H" />
+ <None Include="..\Resource\CMap\ETHK-B5-V" />
+ <None Include="..\Resource\CMap\EUC-H" />
+ <None Include="..\Resource\CMap\EUC-V" />
+ <None Include="..\Resource\CMap\Ext-H" />
+ <None Include="..\Resource\CMap\Ext-RKSJ-H" />
+ <None Include="..\Resource\CMap\Ext-RKSJ-V" />
+ <None Include="..\Resource\CMap\Ext-V" />
+ <None Include="..\Resource\CMap\GB-EUC-H" />
+ <None Include="..\Resource\CMap\GB-EUC-V" />
+ <None Include="..\Resource\CMap\GB-H" />
+ <None Include="..\Resource\CMap\GB-RKSJ-H" />
+ <None Include="..\Resource\CMap\GB-V" />
+ <None Include="..\Resource\CMap\GBK-EUC-H" />
+ <None Include="..\Resource\CMap\GBK-EUC-UCS2" />
+ <None Include="..\Resource\CMap\GBK-EUC-V" />
+ <None Include="..\Resource\CMap\GBK2K-H" />
+ <None Include="..\Resource\CMap\GBK2K-V" />
+ <None Include="..\Resource\CMap\GBKp-EUC-H" />
+ <None Include="..\Resource\CMap\GBKp-EUC-V" />
+ <None Include="..\Resource\CMap\GBpc-EUC-H" />
+ <None Include="..\Resource\CMap\GBpc-EUC-UCS2" />
+ <None Include="..\Resource\CMap\GBpc-EUC-UCS2C" />
+ <None Include="..\Resource\CMap\GBpc-EUC-V" />
+ <None Include="..\Resource\CMap\GBT-EUC-H" />
+ <None Include="..\Resource\CMap\GBT-EUC-V" />
+ <None Include="..\Resource\CMap\GBT-H" />
+ <None Include="..\Resource\CMap\GBT-RKSJ-H" />
+ <None Include="..\Resource\CMap\GBT-V" />
+ <None Include="..\Resource\CMap\GBTpc-EUC-H" />
+ <None Include="..\Resource\CMap\GBTpc-EUC-V" />
+ <None Include="..\Resource\CMap\H" />
+ <None Include="..\Resource\CMap\Hankaku" />
+ <None Include="..\Resource\CMap\Hiragana" />
+ <None Include="..\Resource\CMap\HK-RKSJ-H" />
+ <None Include="..\Resource\CMap\HKdla-B5-H" />
+ <None Include="..\Resource\CMap\HKdla-B5-V" />
+ <None Include="..\Resource\CMap\HKdlb-B5-H" />
+ <None Include="..\Resource\CMap\HKdlb-B5-V" />
+ <None Include="..\Resource\CMap\HKgccs-B5-H" />
+ <None Include="..\Resource\CMap\HKgccs-B5-V" />
+ <None Include="..\Resource\CMap\HKm314-B5-H" />
+ <None Include="..\Resource\CMap\HKm314-B5-V" />
+ <None Include="..\Resource\CMap\HKm471-B5-H" />
+ <None Include="..\Resource\CMap\HKm471-B5-V" />
+ <None Include="..\Resource\CMap\HKscs-B5-H" />
+ <None Include="..\Resource\CMap\HKscs-B5-V" />
+ <None Include="..\Resource\CMap\Hojo-EUC-H" />
+ <None Include="..\Resource\CMap\Hojo-EUC-V" />
+ <None Include="..\Resource\CMap\Hojo-H" />
+ <None Include="..\Resource\CMap\Hojo-RKSJ-H" />
+ <None Include="..\Resource\CMap\Hojo-V" />
+ <None Include="..\Resource\CMap\Identity-H" />
+ <None Include="..\Resource\CMap\Identity-UTF16-H" />
+ <None Include="..\Resource\CMap\Identity-UTF16-V" />
+ <None Include="..\Resource\CMap\Identity-V" />
+ <None Include="..\Resource\CMap\Katakana" />
+ <None Include="..\Resource\CMap\KSC-EUC-H" />
+ <None Include="..\Resource\CMap\KSC-EUC-V" />
+ <None Include="..\Resource\CMap\KSC-H" />
+ <None Include="..\Resource\CMap\KSC-Johab-H" />
+ <None Include="..\Resource\CMap\KSC-Johab-V" />
+ <None Include="..\Resource\CMap\KSC-RKSJ-H" />
+ <None Include="..\Resource\CMap\KSC-V" />
+ <None Include="..\Resource\CMap\KSC2-RKSJ-H" />
+ <None Include="..\Resource\CMap\KSCms-UHC-H" />
+ <None Include="..\Resource\CMap\KSCms-UHC-HW-H" />
+ <None Include="..\Resource\CMap\KSCms-UHC-HW-V" />
+ <None Include="..\Resource\CMap\KSCms-UHC-UCS2" />
+ <None Include="..\Resource\CMap\KSCms-UHC-V" />
+ <None Include="..\Resource\CMap\KSCpc-EUC-H" />
+ <None Include="..\Resource\CMap\KSCpc-EUC-UCS2" />
+ <None Include="..\Resource\CMap\KSCpc-EUC-UCS2C" />
+ <None Include="..\Resource\CMap\KSCpc-EUC-V" />
+ <None Include="..\Resource\CMap\NWP-H" />
+ <None Include="..\Resource\CMap\NWP-V" />
+ <None Include="..\Resource\CMap\RKSJ-H" />
+ <None Include="..\Resource\CMap\RKSJ-V" />
+ <None Include="..\Resource\CMap\Roman" />
+ <None Include="..\Resource\CMap\TCVN-RKSJ-H" />
+ <None Include="..\Resource\CMap\UCS2-90ms-RKSJ" />
+ <None Include="..\Resource\CMap\UCS2-90pv-RKSJ" />
+ <None Include="..\Resource\CMap\UCS2-B5pc" />
+ <None Include="..\Resource\CMap\UCS2-ETen-B5" />
+ <None Include="..\Resource\CMap\UCS2-GBK-EUC" />
+ <None Include="..\Resource\CMap\UCS2-GBpc-EUC" />
+ <None Include="..\Resource\CMap\UCS2-KSCms-UHC" />
+ <None Include="..\Resource\CMap\UCS2-KSCpc-EUC" />
+ <None Include="..\Resource\CMap\UniCNS-UCS2-H" />
+ <None Include="..\Resource\CMap\UniCNS-UCS2-V" />
+ <None Include="..\Resource\CMap\UniCNS-UTF16-H" />
+ <None Include="..\Resource\CMap\UniCNS-UTF16-V" />
+ <None Include="..\Resource\CMap\UniCNS-UTF32-H" />
+ <None Include="..\Resource\CMap\UniCNS-UTF32-V" />
+ <None Include="..\Resource\CMap\UniCNS-UTF8-H" />
+ <None Include="..\Resource\CMap\UniCNS-UTF8-V" />
+ <None Include="..\Resource\CMap\UniGB-UCS2-H" />
+ <None Include="..\Resource\CMap\UniGB-UCS2-V" />
+ <None Include="..\Resource\CMap\UniGB-UTF16-H" />
+ <None Include="..\Resource\CMap\UniGB-UTF16-V" />
+ <None Include="..\Resource\CMap\UniGB-UTF32-H" />
+ <None Include="..\Resource\CMap\UniGB-UTF32-V" />
+ <None Include="..\Resource\CMap\UniGB-UTF8-H" />
+ <None Include="..\Resource\CMap\UniGB-UTF8-V" />
+ <None Include="..\Resource\CMap\UniHojo-UCS2-H" />
+ <None Include="..\Resource\CMap\UniHojo-UCS2-V" />
+ <None Include="..\Resource\CMap\UniHojo-UTF16-H" />
+ <None Include="..\Resource\CMap\UniHojo-UTF16-V" />
+ <None Include="..\Resource\CMap\UniHojo-UTF32-H" />
+ <None Include="..\Resource\CMap\UniHojo-UTF32-V" />
+ <None Include="..\Resource\CMap\UniHojo-UTF8-H" />
+ <None Include="..\Resource\CMap\UniHojo-UTF8-V" />
+ <None Include="..\Resource\CMap\UniJIS-UCS2-H" />
+ <None Include="..\Resource\CMap\UniJIS-UCS2-HW-H" />
+ <None Include="..\Resource\CMap\UniJIS-UCS2-HW-V" />
+ <None Include="..\Resource\CMap\UniJIS-UCS2-V" />
+ <None Include="..\Resource\CMap\UniJIS-UTF16-H" />
+ <None Include="..\Resource\CMap\UniJIS-UTF16-V" />
+ <None Include="..\Resource\CMap\UniJIS-UTF32-H" />
+ <None Include="..\Resource\CMap\UniJIS-UTF32-V" />
+ <None Include="..\Resource\CMap\UniJIS-UTF8-H" />
+ <None Include="..\Resource\CMap\UniJIS-UTF8-V" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF16-H" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF16-V" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF32-H" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF32-V" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF8-H" />
+ <None Include="..\Resource\CMap\UniJIS2004-UTF8-V" />
+ <None Include="..\Resource\CMap\UniJISPro-UCS2-HW-V" />
+ <None Include="..\Resource\CMap\UniJISPro-UCS2-V" />
+ <None Include="..\Resource\CMap\UniJISPro-UTF8-V" />
+ <None Include="..\Resource\CMap\UniJISX0213-UTF32-H" />
+ <None Include="..\Resource\CMap\UniJISX0213-UTF32-V" />
+ <None Include="..\Resource\CMap\UniJISX02132004-UTF32-H" />
+ <None Include="..\Resource\CMap\UniJISX02132004-UTF32-V" />
+ <None Include="..\Resource\CMap\UniKS-UCS2-H" />
+ <None Include="..\Resource\CMap\UniKS-UCS2-V" />
+ <None Include="..\Resource\CMap\UniKS-UTF16-H" />
+ <None Include="..\Resource\CMap\UniKS-UTF16-V" />
+ <None Include="..\Resource\CMap\UniKS-UTF32-H" />
+ <None Include="..\Resource\CMap\UniKS-UTF32-V" />
+ <None Include="..\Resource\CMap\UniKS-UTF8-H" />
+ <None Include="..\Resource\CMap\UniKS-UTF8-V" />
+ <None Include="..\Resource\CMap\V" />
+ <None Include="..\Resource\CMap\WP-Symbol" />
+ <None Include="..\Resource\ColorSpace\DefaultCMYK" />
+ <None Include="..\Resource\ColorSpace\DefaultGray" />
+ <None Include="..\Resource\ColorSpace\DefaultRGB" />
+ <None Include="..\Resource\ColorSpace\sGray" />
+ <None Include="..\Resource\ColorSpace\sRGB" />
+ <None Include="..\Resource\ColorSpace\TrivialCMYK" />
+ <None Include="..\Resource\Decoding\FCO_Dingbats" />
+ <None Include="..\Resource\Decoding\FCO_Symbol" />
+ <None Include="..\Resource\Decoding\FCO_Unicode" />
+ <None Include="..\Resource\Decoding\FCO_Wingdings" />
+ <None Include="..\Resource\Decoding\Latin1" />
+ <None Include="..\Resource\Decoding\StandardEncoding" />
+ <None Include="..\Resource\Decoding\Unicode" />
+ <None Include="..\Resource\Encoding\Wingdings" />
+ <None Include="..\Resource\Font\CenturySchL-Bold" />
+ <None Include="..\Resource\Font\CenturySchL-BoldItal" />
+ <None Include="..\Resource\Font\CenturySchL-Ital" />
+ <None Include="..\Resource\Font\CenturySchL-Roma" />
+ <None Include="..\Resource\Font\Dingbats" />
+ <None Include="..\Resource\Font\NimbusMonL-Bold" />
+ <None Include="..\Resource\Font\NimbusMonL-BoldObli" />
+ <None Include="..\Resource\Font\NimbusMonL-Regu" />
+ <None Include="..\Resource\Font\NimbusMonL-ReguObli" />
+ <None Include="..\Resource\Font\NimbusRomNo9L-Medi" />
+ <None Include="..\Resource\Font\NimbusRomNo9L-MediItal" />
+ <None Include="..\Resource\Font\NimbusRomNo9L-Regu" />
+ <None Include="..\Resource\Font\NimbusRomNo9L-ReguItal" />
+ <None Include="..\Resource\Font\NimbusSanL-Bold" />
+ <None Include="..\Resource\Font\NimbusSanL-BoldCond" />
+ <None Include="..\Resource\Font\NimbusSanL-BoldCondItal" />
+ <None Include="..\Resource\Font\NimbusSanL-BoldItal" />
+ <None Include="..\Resource\Font\NimbusSanL-Regu" />
+ <None Include="..\Resource\Font\NimbusSanL-ReguCond" />
+ <None Include="..\Resource\Font\NimbusSanL-ReguCondItal" />
+ <None Include="..\Resource\Font\NimbusSanL-ReguItal" />
+ <None Include="..\Resource\Font\StandardSymL" />
+ <None Include="..\Resource\Font\URWBookmanL-DemiBold" />
+ <None Include="..\Resource\Font\URWBookmanL-DemiBoldItal" />
+ <None Include="..\Resource\Font\URWBookmanL-Ligh" />
+ <None Include="..\Resource\Font\URWBookmanL-LighItal" />
+ <None Include="..\Resource\Font\URWChanceryL-MediItal" />
+ <None Include="..\Resource\Font\URWGothicL-Book" />
+ <None Include="..\Resource\Font\URWGothicL-BookObli" />
+ <None Include="..\Resource\Font\URWGothicL-Demi" />
+ <None Include="..\Resource\Font\URWGothicL-DemiObli" />
+ <None Include="..\Resource\Font\URWPalladioL-Bold" />
+ <None Include="..\Resource\Font\URWPalladioL-BoldItal" />
+ <None Include="..\Resource\Font\URWPalladioL-Ital" />
+ <None Include="..\Resource\Font\URWPalladioL-Roma" />
+ <None Include="..\Resource\Init\cidfmap" />
+ <None Include="..\Resource\Init\FCOfontmap-PCLPS2" />
+ <None Include="..\Resource\Init\Fontmap" />
+ <None Include="..\Resource\Init\Fontmap.GS" />
+ <None Include="..\Resource\Init\gs_agl.ps" />
+ <None Include="..\Resource\Init\gs_btokn.ps" />
+ <None Include="..\Resource\Init\gs_cet.ps" />
+ <None Include="..\Resource\Init\gs_cff.ps" />
+ <None Include="..\Resource\Init\gs_cidcm.ps" />
+ <None Include="..\Resource\Init\gs_ciddc.ps" />
+ <None Include="..\Resource\Init\gs_cidfm.ps" />
+ <None Include="..\Resource\Init\gs_cidfn.ps" />
+ <None Include="..\Resource\Init\gs_cidtt.ps" />
+ <None Include="..\Resource\Init\gs_cmap.ps" />
+ <None Include="..\Resource\Init\gs_cspace.ps" />
+ <None Include="..\Resource\Init\gs_css_e.ps" />
+ <None Include="..\Resource\Init\gs_dbt_e.ps" />
+ <None Include="..\Resource\Init\gs_diskf.ps" />
+ <None Include="..\Resource\Init\gs_diskn.ps" />
+ <None Include="..\Resource\Init\gs_dps1.ps" />
+ <None Include="..\Resource\Init\gs_dps2.ps" />
+ <None Include="..\Resource\Init\gs_dscp.ps" />
+ <None Include="..\Resource\Init\gs_epsf.ps" />
+ <None Include="..\Resource\Init\gs_fapi.ps" />
+ <None Include="..\Resource\Init\gs_fntem.ps" />
+ <None Include="..\Resource\Init\gs_fonts.ps" />
+ <None Include="..\Resource\Init\gs_frsd.ps" />
+ <None Include="..\Resource\Init\gs_icc.ps" />
+ <None Include="..\Resource\Init\gs_il1_e.ps" />
+ <None Include="..\Resource\Init\gs_img.ps" />
+ <None Include="..\Resource\Init\gs_init.ps" />
+ <None Include="..\Resource\Init\gs_lev2.ps" />
+ <None Include="..\Resource\Init\gs_ll3.ps" />
+ <None Include="..\Resource\Init\gs_mex_e.ps" />
+ <None Include="..\Resource\Init\gs_mgl_e.ps" />
+ <None Include="..\Resource\Init\gs_mro_e.ps" />
+ <None Include="..\Resource\Init\gs_pdfwr.ps" />
+ <None Include="..\Resource\Init\gs_pdf_e.ps" />
+ <None Include="..\Resource\Init\gs_res.ps" />
+ <None Include="..\Resource\Init\gs_resmp.ps" />
+ <None Include="..\Resource\Init\gs_setpd.ps" />
+ <None Include="..\Resource\Init\gs_statd.ps" />
+ <None Include="..\Resource\Init\gs_std_e.ps" />
+ <None Include="..\Resource\Init\gs_sym_e.ps" />
+ <None Include="..\Resource\Init\gs_trap.ps" />
+ <None Include="..\Resource\Init\gs_ttf.ps" />
+ <None Include="..\Resource\Init\gs_typ32.ps" />
+ <None Include="..\Resource\Init\gs_typ42.ps" />
+ <None Include="..\Resource\Init\gs_type1.ps" />
+ <None Include="..\Resource\Init\gs_wan_e.ps" />
+ <None Include="..\Resource\Init\pdf_base.ps" />
+ <None Include="..\Resource\Init\pdf_cslayer.ps" />
+ <None Include="..\Resource\Init\pdf_draw.ps" />
+ <None Include="..\Resource\Init\pdf_font.ps" />
+ <None Include="..\Resource\Init\pdf_main.ps" />
+ <None Include="..\Resource\Init\pdf_ops.ps" />
+ <None Include="..\Resource\Init\pdf_rbld.ps" />
+ <None Include="..\Resource\Init\pdf_sec.ps" />
+ <None Include="..\Resource\Init\xlatmap" />
+ <None Include="..\Resource\SubstCID\CNS1-WMode" />
+ <None Include="..\Resource\SubstCID\GB1-WMode" />
+ <None Include="..\Resource\SubstCID\Japan1-WMode" />
+ <None Include="..\Resource\SubstCID\Korea1-WMode" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\base\aes.c" />
+ <ClCompile Include="..\base\bench.c" />
+ <ClCompile Include="..\base\bobbin.c" />
+ <ClCompile Include="..\base\claptrap-init.c" />
+ <ClCompile Include="..\base\claptrap-planar.c" />
+ <ClCompile Include="..\base\claptrap.c" />
+ <ClCompile Include="..\base\echogs.c" />
+ <ClCompile Include="..\base\ets.c" />
+ <ClCompile Include="..\base\fapibstm.c" />
+ <ClCompile Include="..\base\fapiufst.c" />
+ <ClCompile Include="..\base\fapi_ft.c" />
+ <ClCompile Include="..\base\gconf.c" />
+ <ClCompile Include="..\base\gdevabuf.c" />
+ <ClCompile Include="..\base\gdevbbox.c" />
+ <ClCompile Include="..\base\gdevdbit.c" />
+ <ClCompile Include="..\base\gdevdcrd.c" />
+ <ClCompile Include="..\base\gdevddrw.c" />
+ <ClCompile Include="..\base\gdevdevn.c" />
+ <ClCompile Include="..\base\gdevdflt.c" />
+ <ClCompile Include="..\base\gdevdgbr.c" />
+ <ClCompile Include="..\base\gdevdrop.c" />
+ <ClCompile Include="..\base\gdevdsha.c" />
+ <ClCompile Include="..\base\gdevemap.c" />
+ <ClCompile Include="..\base\gdevepo.c" />
+ <ClCompile Include="..\base\gdevflp.c" />
+ <ClCompile Include="..\base\gdevhit.c" />
+ <ClCompile Include="..\base\gdevm1.c" />
+ <ClCompile Include="..\base\gdevm16.c" />
+ <ClCompile Include="..\base\gdevm2.c" />
+ <ClCompile Include="..\base\gdevm24.c" />
+ <ClCompile Include="..\base\gdevm32.c" />
+ <ClCompile Include="..\base\gdevm4.c" />
+ <ClCompile Include="..\base\gdevm40.c" />
+ <ClCompile Include="..\base\gdevm48.c" />
+ <ClCompile Include="..\base\gdevm56.c" />
+ <ClCompile Include="..\base\gdevm64.c" />
+ <ClCompile Include="..\base\gdevm8.c" />
+ <ClCompile Include="..\base\gdevmem.c" />
+ <ClCompile Include="..\base\gdevmpla.c" />
+ <ClCompile Include="..\base\gdevmplt.c" />
+ <ClCompile Include="..\base\gdevmr1.c" />
+ <ClCompile Include="..\base\gdevmr2n.c" />
+ <ClCompile Include="..\base\gdevmr8n.c" />
+ <ClCompile Include="..\base\gdevmrun.c" />
+ <ClCompile Include="..\base\gdevmx.c" />
+ <ClCompile Include="..\base\gdevnfwd.c" />
+ <ClCompile Include="..\base\gdevoflt.c" />
+ <ClCompile Include="..\base\gdevp14.c" />
+ <ClCompile Include="..\base\gdevpccm.c" />
+ <ClCompile Include="..\base\gdevpipe.c" />
+ <ClCompile Include="..\base\gdevplnx.c" />
+ <ClCompile Include="..\base\gdevppla.c" />
+ <ClCompile Include="..\base\gdevprn.c" />
+ <ClCompile Include="..\base\gdevrops.c" />
+ <ClCompile Include="..\base\gdevsclass.c" />
+ <ClCompile Include="..\base\gdevvec.c" />
+ <ClCompile Include="..\base\genarch.c" />
+ <ClCompile Include="..\base\genconf.c" />
+ <ClCompile Include="..\base\gendev.c" />
+ <ClCompile Include="..\base\genht.c" />
+ <ClCompile Include="..\base\gpmisc.c" />
+ <ClCompile Include="..\base\gp_dosfe.c" />
+ <ClCompile Include="..\base\gp_dosfs.c" />
+ <ClCompile Include="..\base\gp_dvx.c" />
+ <ClCompile Include="..\base\gp_getnv.c" />
+ <ClCompile Include="..\base\gp_iwatc.c" />
+ <ClCompile Include="..\base\gp_mac.c" />
+ <ClCompile Include="..\base\gp_macio.c" />
+ <ClCompile Include="..\base\gp_macpoll.c" />
+ <ClCompile Include="..\base\gp_mktmp.c" />
+ <ClCompile Include="..\base\gp_msdll.c" />
+ <ClCompile Include="..\base\gp_msdos.c" />
+ <ClCompile Include="..\base\gp_mshdl.c" />
+ <ClCompile Include="..\base\gp_mslib.c" />
+ <ClCompile Include="..\base\gp_mspol.c" />
+ <ClCompile Include="..\base\gp_msprn.c" />
+ <ClCompile Include="..\base\gp_mswin.c" />
+ <ClCompile Include="..\base\gp_nsync.c" />
+ <ClCompile Include="..\base\gp_ntfs.c" />
+ <ClCompile Include="..\base\gp_os2.c" />
+ <ClCompile Include="..\base\gp_os2fs.c" />
+ <ClCompile Include="..\base\gp_os2pr.c" />
+ <ClCompile Include="..\base\gp_os9.c" />
+ <ClCompile Include="..\base\gp_paper.c" />
+ <ClCompile Include="..\base\gp_psync.c" />
+ <ClCompile Include="..\base\gp_stdia.c" />
+ <ClCompile Include="..\base\gp_stdin.c" />
+ <ClCompile Include="..\base\gp_strdl.c" />
+ <ClCompile Include="..\base\gp_unifn.c" />
+ <ClCompile Include="..\base\gp_unifs.c" />
+ <ClCompile Include="..\base\gp_unix.c" />
+ <ClCompile Include="..\base\gp_unix_cache.c" />
+ <ClCompile Include="..\base\gp_upapr.c" />
+ <ClCompile Include="..\base\gp_vms.c" />
+ <ClCompile Include="..\base\gp_wgetv.c" />
+ <ClCompile Include="..\base\gp_win32.c" />
+ <ClCompile Include="..\base\gp_winfs.c" />
+ <ClCompile Include="..\base\gp_winfs2.c" />
+ <ClCompile Include="..\base\gp_wpapr.c" />
+ <ClCompile Include="..\base\gp_wsync.c" />
+ <ClCompile Include="..\base\gp_wutf8.c" />
+ <ClCompile Include="..\base\gsalloc.c" />
+ <ClCompile Include="..\base\gsalpha.c" />
+ <ClCompile Include="..\base\gsalphac.c" />
+ <ClCompile Include="..\base\gsargs.c" />
+ <ClCompile Include="..\base\gsbitcom.c" />
+ <ClCompile Include="..\base\gsbitops.c" />
+ <ClCompile Include="..\base\gsbittab.c" />
+ <ClCompile Include="..\base\gscdef.c" />
+ <ClCompile Include="..\base\gscdevn.c" />
+ <ClCompile Include="..\base\gscedata.c" />
+ <ClCompile Include="..\base\gscencs.c" />
+ <ClCompile Include="..\base\gschar.c" />
+ <ClCompile Include="..\base\gschar0.c" />
+ <ClCompile Include="..\base\gscicach.c" />
+ <ClCompile Include="..\base\gscie.c" />
+ <ClCompile Include="..\base\gsciemap.c" />
+ <ClCompile Include="..\base\gsclipsr.c" />
+ <ClCompile Include="..\base\gscolor.c" />
+ <ClCompile Include="..\base\gscolor1.c" />
+ <ClCompile Include="..\base\gscolor2.c" />
+ <ClCompile Include="..\base\gscolor3.c" />
+ <ClCompile Include="..\base\gscoord.c" />
+ <ClCompile Include="..\base\gscparam.c" />
+ <ClCompile Include="..\base\gscpixel.c" />
+ <ClCompile Include="..\base\gscrd.c" />
+ <ClCompile Include="..\base\gscrdp.c" />
+ <ClCompile Include="..\base\gscrypt1.c" />
+ <ClCompile Include="..\base\gscscie.c" />
+ <ClCompile Include="..\base\gscsepr.c" />
+ <ClCompile Include="..\base\gscspace.c" />
+ <ClCompile Include="..\base\gscssub.c" />
+ <ClCompile Include="..\base\gsdevice.c" />
+ <ClCompile Include="..\base\gsdevmem.c" />
+ <ClCompile Include="..\base\gsdparam.c" />
+ <ClCompile Include="..\base\gsdps1.c" />
+ <ClCompile Include="..\base\gsdsrc.c" />
+ <ClCompile Include="..\base\gsequivc.c" />
+ <ClCompile Include="..\base\gsfcid.c" />
+ <ClCompile Include="..\base\gsfcid2.c" />
+ <ClCompile Include="..\base\gsfcmap.c" />
+ <ClCompile Include="..\base\gsfcmap1.c" />
+ <ClCompile Include="..\base\gsflip.c" />
+ <ClCompile Include="..\base\gsfname.c" />
+ <ClCompile Include="..\base\gsfont.c" />
+ <ClCompile Include="..\base\gsfont0.c" />
+ <ClCompile Include="..\base\gsfont0c.c" />
+ <ClCompile Include="..\base\gsfunc.c" />
+ <ClCompile Include="..\base\gsfunc0.c" />
+ <ClCompile Include="..\base\gsfunc3.c" />
+ <ClCompile Include="..\base\gsfunc4.c" />
+ <ClCompile Include="..\base\gsgcache.c" />
+ <ClCompile Include="..\base\gsgdata.c" />
+ <ClCompile Include="..\base\gsgstate.c" />
+ <ClCompile Include="..\base\gshsb.c" />
+ <ClCompile Include="..\base\gsht.c" />
+ <ClCompile Include="..\base\gsht1.c" />
+ <ClCompile Include="..\base\gshtscr.c" />
+ <ClCompile Include="..\base\gshtx.c" />
+ <ClCompile Include="..\base\gsicc.c" />
+ <ClCompile Include="..\base\gsicc_cache.c" />
+ <ClCompile Include="..\base\gsicc_create.c" />
+ <ClCompile Include="..\base\gsicc_lcms2.c" />
+ <ClCompile Include="..\base\gsicc_lcms2mt.c" />
+ <ClCompile Include="..\base\gsicc_manage.c" />
+ <ClCompile Include="..\base\gsicc_monitorcm.c" />
+ <ClCompile Include="..\base\gsicc_nocm.c" />
+ <ClCompile Include="..\base\gsicc_profilecache.c" />
+ <ClCompile Include="..\base\gsicc_replacecm.c" />
+ <ClCompile Include="..\base\gsimage.c" />
+ <ClCompile Include="..\base\gsimpath.c" />
+ <ClCompile Include="..\base\gsinit.c" />
+ <ClCompile Include="..\base\gsiodev.c" />
+ <ClCompile Include="..\base\gsiodevs.c" />
+ <ClCompile Include="..\base\gsiodisk.c" />
+ <ClCompile Include="..\base\gsiomacres.c" />
+ <ClCompile Include="..\base\gsioram.c" />
+ <ClCompile Include="..\base\gsiorom.c" />
+ <ClCompile Include="..\base\gsistate.c" />
+ <ClCompile Include="..\base\gslib.c" />
+ <ClCompile Include="..\base\gslibctx.c" />
+ <ClCompile Include="..\base\gsline.c" />
+ <ClCompile Include="..\base\gsmalloc.c" />
+ <ClCompile Include="..\base\gsmatrix.c" />
+ <ClCompile Include="..\base\gsmchunk.c" />
+ <ClCompile Include="..\base\gsmd5.c" />
+ <ClCompile Include="..\base\gsmemory.c" />
+ <ClCompile Include="..\base\gsmemret.c" />
+ <ClCompile Include="..\base\gsmisc.c" />
+ <ClCompile Include="..\base\gsnogc.c" />
+ <ClCompile Include="..\base\gsnorop.c" />
+ <ClCompile Include="..\base\gsnotify.c" />
+ <ClCompile Include="..\base\gsovrc.c" />
+ <ClCompile Include="..\base\gspaint.c" />
+ <ClCompile Include="..\base\gsparam.c" />
+ <ClCompile Include="..\base\gsparam2.c" />
+ <ClCompile Include="..\base\gsparams.c" />
+ <ClCompile Include="..\base\gsparamx.c" />
+ <ClCompile Include="..\base\gspath.c" />
+ <ClCompile Include="..\base\gspath1.c" />
+ <ClCompile Include="..\base\gspcolor.c" />
+ <ClCompile Include="..\base\gspmdrv.c" />
+ <ClCompile Include="..\base\gsptype1.c" />
+ <ClCompile Include="..\base\gsptype2.c" />
+ <ClCompile Include="..\base\gsromfs0.c" />
+ <ClCompile Include="..\base\gsrop.c" />
+ <ClCompile Include="..\base\gsroprun.c" />
+ <ClCompile Include="..\base\gsroptab.c" />
+ <ClCompile Include="..\base\gsserial.c" />
+ <ClCompile Include="..\base\gsshade.c" />
+ <ClCompile Include="..\base\gsstate.c" />
+ <ClCompile Include="..\base\gsstrl.c" />
+ <ClCompile Include="..\base\gstext.c" />
+ <ClCompile Include="..\base\gstiffio.c" />
+ <ClCompile Include="..\base\gstrans.c" />
+ <ClCompile Include="..\base\gstrap.c" />
+ <ClCompile Include="..\base\gstype1.c" />
+ <ClCompile Include="..\base\gstype2.c" />
+ <ClCompile Include="..\base\gstype42.c" />
+ <ClCompile Include="..\base\gsutil.c" />
+ <ClCompile Include="..\base\gxacpath.c" />
+ <ClCompile Include="..\base\gxbcache.c" />
+ <ClCompile Include="..\base\gxblend.c" />
+ <ClCompile Include="..\base\gxblend1.c" />
+ <ClCompile Include="..\base\gxccache.c" />
+ <ClCompile Include="..\base\gxccman.c" />
+ <ClCompile Include="..\base\gxchar.c" />
+ <ClCompile Include="..\base\gxchrout.c" />
+ <ClCompile Include="..\base\gxcht.c" />
+ <ClCompile Include="..\base\gxclbits.c" />
+ <ClCompile Include="..\base\gxclfile.c" />
+ <ClCompile Include="..\base\gxclimag.c" />
+ <ClCompile Include="..\base\gxclip.c" />
+ <ClCompile Include="..\base\gxclip2.c" />
+ <ClCompile Include="..\base\gxclipm.c" />
+ <ClCompile Include="..\base\gxclist.c" />
+ <ClCompile Include="..\base\gxcllzw.c" />
+ <ClCompile Include="..\base\gxclmem.c" />
+ <ClCompile Include="..\base\gxclpage.c" />
+ <ClCompile Include="..\base\gxclpath.c" />
+ <ClCompile Include="..\base\gxclrast.c" />
+ <ClCompile Include="..\base\gxclread.c" />
+ <ClCompile Include="..\base\gxclrect.c" />
+ <ClCompile Include="..\base\gxclthrd.c" />
+ <ClCompile Include="..\base\gxclutil.c" />
+ <ClCompile Include="..\base\gxclzlib.c" />
+ <ClCompile Include="..\base\gxcmap.c" />
+ <ClCompile Include="..\base\gxcpath.c" />
+ <ClCompile Include="..\base\gxctable.c" />
+ <ClCompile Include="..\base\gxdcconv.c" />
+ <ClCompile Include="..\base\gxdcolor.c" />
+ <ClCompile Include="..\base\gxdevndi.c" />
+ <ClCompile Include="..\base\gxdhtserial.c" />
+ <ClCompile Include="..\base\gxdownscale.c" />
+ <ClCompile Include="..\base\gxfapi.c" />
+ <ClCompile Include="..\base\gxfapiu.c" />
+ <ClCompile Include="..\base\gxfcopy.c" />
+ <ClCompile Include="..\base\gxfdrop.c" />
+ <ClCompile Include="..\base\gxfill.c" />
+ <ClCompile Include="..\base\gxhintn.c" />
+ <ClCompile Include="..\base\gxhintn1.c" />
+ <ClCompile Include="..\base\gxhldevc.c" />
+ <ClCompile Include="..\base\gxht.c" />
+ <ClCompile Include="..\base\gxhtbit.c" />
+ <ClCompile Include="..\base\gxht_thresh.c" />
+ <ClCompile Include="..\base\gxi12bit.c" />
+ <ClCompile Include="..\base\gxi16bit.c" />
+ <ClCompile Include="..\base\gxicolor.c" />
+ <ClCompile Include="..\base\gxidata.c" />
+ <ClCompile Include="..\base\gxifast.c" />
+ <ClCompile Include="..\base\gximag3x.c" />
+ <ClCompile Include="..\base\gximage.c" />
+ <ClCompile Include="..\base\gximage1.c" />
+ <ClCompile Include="..\base\gximage3.c" />
+ <ClCompile Include="..\base\gximage4.c" />
+ <ClCompile Include="..\base\gximask.c" />
+ <ClCompile Include="..\base\gximdecode.c" />
+ <ClCompile Include="..\base\gximono.c" />
+ <ClCompile Include="..\base\gxino12b.c" />
+ <ClCompile Include="..\base\gxino16b.c" />
+ <ClCompile Include="..\base\gxipixel.c" />
+ <ClCompile Include="..\base\gxiscale.c" />
+ <ClCompile Include="..\base\gxmclip.c" />
+ <ClCompile Include="..\base\gxoprect.c" />
+ <ClCompile Include="..\base\gxp1fill.c" />
+ <ClCompile Include="..\base\gxpageq.c" />
+ <ClCompile Include="..\base\gxpaint.c" />
+ <ClCompile Include="..\base\gxpath.c" />
+ <ClCompile Include="..\base\gxpath2.c" />
+ <ClCompile Include="..\base\gxpcmap.c" />
+ <ClCompile Include="..\base\gxpcopy.c" />
+ <ClCompile Include="..\base\gxpdash.c" />
+ <ClCompile Include="..\base\gxpdash2.c" />
+ <ClCompile Include="..\base\gxpflat.c" />
+ <ClCompile Include="..\base\gxsample.c" />
+ <ClCompile Include="..\base\gxscanc.c" />
+ <ClCompile Include="..\base\gxshade.c" />
+ <ClCompile Include="..\base\gxshade1.c" />
+ <ClCompile Include="..\base\gxshade4.c" />
+ <ClCompile Include="..\base\gxshade6.c" />
+ <ClCompile Include="..\base\gxstroke.c" />
+ <ClCompile Include="..\base\gxsync.c" />
+ <ClCompile Include="..\base\gxttfb.c" />
+ <ClCompile Include="..\base\gxtype1.c" />
+ <ClCompile Include="..\base\gzspotan.c" />
+ <ClCompile Include="..\base\jmemcust.c" />
+ <ClCompile Include="..\base\memento.c" />
+ <ClCompile Include="..\base\minftrsz.c" />
+ <ClCompile Include="..\base\mkromfs.c" />
+ <ClCompile Include="..\base\ramfs.c" />
+ <ClCompile Include="..\base\rinkj\evenbetter-rll.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-byte-stream.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-config.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-device.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-dither.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-epson870.c" />
+ <ClCompile Include="..\base\rinkj\rinkj-screen-eb.c" />
+ <ClCompile Include="..\base\sa85d.c" />
+ <ClCompile Include="..\base\saes.c" />
+ <ClCompile Include="..\base\sarc4.c" />
+ <ClCompile Include="..\base\sbcp.c" />
+ <ClCompile Include="..\base\sbhc.c" />
+ <ClCompile Include="..\base\sbwbs.c" />
+ <ClCompile Include="..\base\scantab.c" />
+ <ClCompile Include="..\base\scfd.c" />
+ <ClCompile Include="..\base\scfdgen.c" />
+ <ClCompile Include="..\base\scfdtab.c" />
+ <ClCompile Include="..\base\scfe.c" />
+ <ClCompile Include="..\base\scfetab.c" />
+ <ClCompile Include="..\base\scfparam.c" />
+ <ClCompile Include="..\base\sdcparam.c" />
+ <ClCompile Include="..\base\sdctc.c" />
+ <ClCompile Include="..\base\sdctd.c" />
+ <ClCompile Include="..\base\sdcte.c" />
+ <ClCompile Include="..\base\sddparam.c" />
+ <ClCompile Include="..\base\sdeparam.c" />
+ <ClCompile Include="..\base\seexec.c" />
+ <ClCompile Include="..\base\sfilter2.c" />
+ <ClCompile Include="..\base\sfxboth.c" />
+ <ClCompile Include="..\base\sfxcommon.c" />
+ <ClCompile Include="..\base\sfxfd.c" />
+ <ClCompile Include="..\base\sfxstdio.c" />
+ <ClCompile Include="..\base\shc.c" />
+ <ClCompile Include="..\base\shcgen.c" />
+ <ClCompile Include="..\base\sidscale.c" />
+ <ClCompile Include="..\base\siinterp.c" />
+ <ClCompile Include="..\base\simscale.c" />
+ <ClCompile Include="..\base\siscale.c" />
+ <ClCompile Include="..\base\siscale_cal.c" />
+ <ClCompile Include="..\base\sjbig2.c" />
+ <ClCompile Include="..\base\sjbig2_luratech.c" />
+ <ClCompile Include="..\base\sjpegc.c" />
+ <ClCompile Include="..\base\sjpegd.c" />
+ <ClCompile Include="..\base\sjpege.c" />
+ <ClCompile Include="..\base\sjpx.c" />
+ <ClCompile Include="..\base\sjpx_luratech.c" />
+ <ClCompile Include="..\base\sjpx_openjpeg.c" />
+ <ClCompile Include="..\base\slzwc.c" />
+ <ClCompile Include="..\base\slzwd.c" />
+ <ClCompile Include="..\base\slzwe.c" />
+ <ClCompile Include="..\base\smd5.c" />
+ <ClCompile Include="..\base\spdiff.c" />
+ <ClCompile Include="..\base\spngp.c" />
+ <ClCompile Include="..\base\spprint.c" />
+ <ClCompile Include="..\base\spsdf.c" />
+ <ClCompile Include="..\base\spwgd.c" />
+ <ClCompile Include="..\base\srld.c" />
+ <ClCompile Include="..\base\srle.c" />
+ <ClCompile Include="..\base\sstring.c" />
+ <ClCompile Include="..\base\stream.c" />
+ <ClCompile Include="..\base\strmio.c" />
+ <ClCompile Include="..\base\szlibc.c" />
+ <ClCompile Include="..\base\szlibd.c" />
+ <ClCompile Include="..\base\szlibe.c" />
+ <ClCompile Include="..\base\ttcalc.c" />
+ <ClCompile Include="..\base\ttfinp.c" />
+ <ClCompile Include="..\base\ttfmain.c" />
+ <ClCompile Include="..\base\ttfmemd.c" />
+ <ClCompile Include="..\base\ttinterp.c" />
+ <ClCompile Include="..\base\ttload.c" />
+ <ClCompile Include="..\base\ttobjs.c" />
+ <ClCompile Include="..\base\vdtrace.c" />
+ <ClCompile Include="..\contrib\eplaser\gdevescv.c" />
+ <ClCompile Include="..\contrib\gdevbjca.c" />
+ <ClCompile Include="..\contrib\gdevbjc_.c" />
+ <ClCompile Include="..\contrib\gdevcd8.c" />
+ <ClCompile Include="..\contrib\gdevdj9.c" />
+ <ClCompile Include="..\contrib\gdevgdi.c" />
+ <ClCompile Include="..\contrib\gdevhl12.c" />
+ <ClCompile Include="..\contrib\gdevln03.c" />
+ <ClCompile Include="..\contrib\gdevlx32.c" />
+ <ClCompile Include="..\contrib\gdevlx50.c" />
+ <ClCompile Include="..\contrib\gdevlx7.c" />
+ <ClCompile Include="..\contrib\gdevmd2k.c" />
+ <ClCompile Include="..\contrib\gdevop4w.c" />
+ <ClCompile Include="..\contrib\gdevxes.c" />
+ <ClCompile Include="..\contrib\japanese\dviprlib.c" />
+ <ClCompile Include="..\contrib\japanese\gdev10v.c" />
+ <ClCompile Include="..\contrib\japanese\gdevalps.c" />
+ <ClCompile Include="..\contrib\japanese\gdevdmpr.c" />
+ <ClCompile Include="..\contrib\japanese\gdevespg.c" />
+ <ClCompile Include="..\contrib\japanese\gdevfmlbp.c" />
+ <ClCompile Include="..\contrib\japanese\gdevfmpr.c" />
+ <ClCompile Include="..\contrib\japanese\gdevj100.c" />
+ <ClCompile Include="..\contrib\japanese\gdevlbp3.c" />
+ <ClCompile Include="..\contrib\japanese\gdevmag.c" />
+ <ClCompile Include="..\contrib\japanese\gdevmjc.c" />
+ <ClCompile Include="..\contrib\japanese\gdevml6.c" />
+ <ClCompile Include="..\contrib\japanese\gdevnpdl.c" />
+ <ClCompile Include="..\contrib\japanese\gdevp201.c" />
+ <ClCompile Include="..\contrib\japanese\gdevrpdl.c" />
+ <ClCompile Include="..\contrib\lips4\gdevl4r.c" />
+ <ClCompile Include="..\contrib\lips4\gdevl4v.c" />
+ <ClCompile Include="..\contrib\lips4\gdevlips.c" />
+ <ClCompile Include="..\contrib\lips4\gdevlprn.c" />
+ <ClCompile Include="..\contrib\opvp\gdevopvp.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnfs.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnparm.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnrend.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\gdeveprn.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\mediasize.c" />
+ <ClCompile Include="..\contrib\pcl3\eprn\pagecount.c" />
+ <ClCompile Include="..\contrib\pcl3\src\gdevpcl3.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pcl3opts.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pclcap.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pclcomp.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pclgen.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pclscan.c" />
+ <ClCompile Include="..\contrib\pcl3\src\pclsize.c" />
+ <ClCompile Include="..\contrib\pscolor\test.c" />
+ <ClCompile Include="..\cups\gdevcups.c" />
+ <ClCompile Include="..\cups\libs\cups\adminutil.c" />
+ <ClCompile Include="..\cups\libs\cups\array.c" />
+ <ClCompile Include="..\cups\libs\cups\attr.c" />
+ <ClCompile Include="..\cups\libs\cups\auth.c" />
+ <ClCompile Include="..\cups\libs\cups\backchannel.c" />
+ <ClCompile Include="..\cups\libs\cups\backend.c" />
+ <ClCompile Include="..\cups\libs\cups\conflicts.c" />
+ <ClCompile Include="..\cups\libs\cups\custom.c" />
+ <ClCompile Include="..\cups\libs\cups\debug.c" />
+ <ClCompile Include="..\cups\libs\cups\dest.c" />
+ <ClCompile Include="..\cups\libs\cups\dir.c" />
+ <ClCompile Include="..\cups\libs\cups\emit.c" />
+ <ClCompile Include="..\cups\libs\cups\encode.c" />
+ <ClCompile Include="..\cups\libs\cups\file.c" />
+ <ClCompile Include="..\cups\libs\cups\getdevices.c" />
+ <ClCompile Include="..\cups\libs\cups\getifaddrs.c" />
+ <ClCompile Include="..\cups\libs\cups\getputfile.c" />
+ <ClCompile Include="..\cups\libs\cups\globals.c" />
+ <ClCompile Include="..\cups\libs\cups\http-addr.c" />
+ <ClCompile Include="..\cups\libs\cups\http-addrlist.c" />
+ <ClCompile Include="..\cups\libs\cups\http-support.c" />
+ <ClCompile Include="..\cups\libs\cups\http.c" />
+ <ClCompile Include="..\cups\libs\cups\ipp-support.c" />
+ <ClCompile Include="..\cups\libs\cups\ipp.c" />
+ <ClCompile Include="..\cups\libs\cups\langprintf.c" />
+ <ClCompile Include="..\cups\libs\cups\language.c" />
+ <ClCompile Include="..\cups\libs\cups\localize.c" />
+ <ClCompile Include="..\cups\libs\cups\mark.c" />
+ <ClCompile Include="..\cups\libs\cups\md5.c" />
+ <ClCompile Include="..\cups\libs\cups\md5passwd.c" />
+ <ClCompile Include="..\cups\libs\cups\notify.c" />
+ <ClCompile Include="..\cups\libs\cups\options.c" />
+ <ClCompile Include="..\cups\libs\cups\page.c" />
+ <ClCompile Include="..\cups\libs\cups\ppd.c" />
+ <ClCompile Include="..\cups\libs\cups\pwg-file.c" />
+ <ClCompile Include="..\cups\libs\cups\pwg-media.c" />
+ <ClCompile Include="..\cups\libs\cups\pwg-ppd.c" />
+ <ClCompile Include="..\cups\libs\cups\request.c" />
+ <ClCompile Include="..\cups\libs\cups\sidechannel.c" />
+ <ClCompile Include="..\cups\libs\cups\snmp.c" />
+ <ClCompile Include="..\cups\libs\cups\snprintf.c" />
+ <ClCompile Include="..\cups\libs\cups\string.c" />
+ <ClCompile Include="..\cups\libs\cups\tempfile.c" />
+ <ClCompile Include="..\cups\libs\cups\testadmin.c" />
+ <ClCompile Include="..\cups\libs\cups\testarray.c" />
+ <ClCompile Include="..\cups\libs\cups\testconflicts.c" />
+ <ClCompile Include="..\cups\libs\cups\testcups.c" />
+ <ClCompile Include="..\cups\libs\cups\testfile.c" />
+ <ClCompile Include="..\cups\libs\cups\testhttp.c" />
+ <ClCompile Include="..\cups\libs\cups\testi18n.c" />
+ <ClCompile Include="..\cups\libs\cups\testipp.c" />
+ <ClCompile Include="..\cups\libs\cups\testlang.c" />
+ <ClCompile Include="..\cups\libs\cups\testoptions.c" />
+ <ClCompile Include="..\cups\libs\cups\testppd.c" />
+ <ClCompile Include="..\cups\libs\cups\testpwg.c" />
+ <ClCompile Include="..\cups\libs\cups\testsnmp.c" />
+ <ClCompile Include="..\cups\libs\cups\transcode.c" />
+ <ClCompile Include="..\cups\libs\cups\usersys.c" />
+ <ClCompile Include="..\cups\libs\cups\util.c" />
+ <ClCompile Include="..\cups\libs\filter\common.c" />
+ <ClCompile Include="..\cups\libs\filter\error.c" />
+ <ClCompile Include="..\cups\libs\filter\image-bmp.c" />
+ <ClCompile Include="..\cups\libs\filter\image-colorspace.c" />
+ <ClCompile Include="..\cups\libs\filter\image-gif.c" />
+ <ClCompile Include="..\cups\libs\filter\image-jpeg.c" />
+ <ClCompile Include="..\cups\libs\filter\image-photocd.c" />
+ <ClCompile Include="..\cups\libs\filter\image-pix.c" />
+ <ClCompile Include="..\cups\libs\filter\image-png.c" />
+ <ClCompile Include="..\cups\libs\filter\image-pnm.c" />
+ <ClCompile Include="..\cups\libs\filter\image-sgi.c" />
+ <ClCompile Include="..\cups\libs\filter\image-sgilib.c" />
+ <ClCompile Include="..\cups\libs\filter\image-sun.c" />
+ <ClCompile Include="..\cups\libs\filter\image-tiff.c" />
+ <ClCompile Include="..\cups\libs\filter\image-zoom.c" />
+ <ClCompile Include="..\cups\libs\filter\image.c" />
+ <ClCompile Include="..\cups\libs\filter\interpret.c" />
+ <ClCompile Include="..\cups\libs\filter\raster.c" />
+ <ClCompile Include="..\cups\pdftoraster.c" />
+ <ClCompile Include="..\devices\gdev3852.c" />
+ <ClCompile Include="..\devices\gdev4081.c" />
+ <ClCompile Include="..\devices\gdev4693.c" />
+ <ClCompile Include="..\devices\gdev8510.c" />
+ <ClCompile Include="..\devices\gdev8bcm.c" />
+ <ClCompile Include="..\devices\gdevatx.c" />
+ <ClCompile Include="..\devices\gdevbit.c" />
+ <ClCompile Include="..\devices\gdevbj10.c" />
+ <ClCompile Include="..\devices\gdevbjcl.c" />
+ <ClCompile Include="..\devices\gdevbmp.c" />
+ <ClCompile Include="..\devices\gdevbmpa.c" />
+ <ClCompile Include="..\devices\gdevbmpc.c" />
+ <ClCompile Include="..\devices\gdevccr.c" />
+ <ClCompile Include="..\devices\gdevcdj.c" />
+ <ClCompile Include="..\devices\gdevcfax.c" />
+ <ClCompile Include="..\devices\gdevchameleon.c" />
+ <ClCompile Include="..\devices\gdevcif.c" />
+ <ClCompile Include="..\devices\gdevclj.c" />
+ <ClCompile Include="..\devices\gdevcljc.c" />
+ <ClCompile Include="..\devices\gdevcmykog.c" />
+ <ClCompile Include="..\devices\gdevcslw.c" />
+ <ClCompile Include="..\devices\gdevdfax.c" />
+ <ClCompile Include="..\devices\gdevdjet.c" />
+ <ClCompile Include="..\devices\gdevdjtc.c" />
+ <ClCompile Include="..\devices\gdevdljm.c" />
+ <ClCompile Include="..\devices\gdevdm24.c" />
+ <ClCompile Include="..\devices\gdevdsp.c" />
+ <ClCompile Include="..\devices\gdevepsc.c" />
+ <ClCompile Include="..\devices\gdevepsn.c" />
+ <ClCompile Include="..\devices\gdevescp.c" />
+ <ClCompile Include="..\devices\gdevfax.c" />
+ <ClCompile Include="..\devices\gdevfpng.c" />
+ <ClCompile Include="..\devices\gdevhl7x.c" />
+ <ClCompile Include="..\devices\gdevicov.c" />
+ <ClCompile Include="..\devices\gdevifno.c" />
+ <ClCompile Include="..\devices\gdevijs.c" />
+ <ClCompile Include="..\devices\gdevimgn.c" />
+ <ClCompile Include="..\devices\gdevjbig2.c" />
+ <ClCompile Include="..\devices\gdevjpeg.c" />
+ <ClCompile Include="..\devices\gdevjpx.c" />
+ <ClCompile Include="..\devices\gdevl31s.c" />
+ <ClCompile Include="..\devices\gdevlbp8.c" />
+ <ClCompile Include="..\devices\gdevlp8k.c" />
+ <ClCompile Include="..\devices\gdevlxm.c" />
+ <ClCompile Include="..\devices\gdevmeds.c" />
+ <ClCompile Include="..\devices\gdevmgr.c" />
+ <ClCompile Include="..\devices\gdevmiff.c" />
+ <ClCompile Include="..\devices\gdevmsxf.c" />
+ <ClCompile Include="..\devices\gdevn533.c" />
+ <ClCompile Include="..\devices\gdevo182.c" />
+ <ClCompile Include="..\devices\gdevokii.c" />
+ <ClCompile Include="..\devices\gdevp2up.c" />
+ <ClCompile Include="..\devices\gdevpbm.c" />
+ <ClCompile Include="..\devices\gdevpcfb.c" />
+ <ClCompile Include="..\devices\gdevpcl.c" />
+ <ClCompile Include="..\devices\gdevpcx.c" />
+ <ClCompile Include="..\devices\gdevpdfimg.c" />
+ <ClCompile Include="..\devices\gdevpe.c" />
+ <ClCompile Include="..\devices\gdevperm.c" />
+ <ClCompile Include="..\devices\gdevphex.c" />
+ <ClCompile Include="..\devices\gdevpjet.c" />
+ <ClCompile Include="..\devices\gdevplan.c" />
+ <ClCompile Include="..\devices\gdevplib.c" />
+ <ClCompile Include="..\devices\gdevpng.c" />
+ <ClCompile Include="..\devices\gdevprna.c" />
+ <ClCompile Include="..\devices\gdevpsd.c" />
+ <ClCompile Include="..\devices\gdevpsim.c" />
+ <ClCompile Include="..\devices\gdevpxut.c" />
+ <ClCompile Include="..\devices\gdevrinkj.c" />
+ <ClCompile Include="..\devices\gdevsj48.c" />
+ <ClCompile Include="..\devices\gdevsnfb.c" />
+ <ClCompile Include="..\devices\gdevstc.c" />
+ <ClCompile Include="..\devices\gdevstc1.c" />
+ <ClCompile Include="..\devices\gdevstc2.c" />
+ <ClCompile Include="..\devices\gdevstc3.c" />
+ <ClCompile Include="..\devices\gdevstc4.c" />
+ <ClCompile Include="..\devices\gdevtfax.c" />
+ <ClCompile Include="..\devices\gdevtfnx.c" />
+ <ClCompile Include="..\devices\gdevtifs.c" />
+ <ClCompile Include="..\devices\gdevtknk.c" />
+ <ClCompile Include="..\devices\gdevtrac.c" />
+ <ClCompile Include="..\devices\gdevtsep.c" />
+ <ClCompile Include="..\devices\gdevupd.c" />
+ <ClCompile Include="..\devices\gdevwddb.c" />
+ <ClCompile Include="..\devices\gdevwpr2.c" />
+ <ClCompile Include="..\devices\gdevx.c" />
+ <ClCompile Include="..\devices\gdevxalt.c" />
+ <ClCompile Include="..\devices\gdevxcf.c" />
+ <ClCompile Include="..\devices\gdevxcmp.c" />
+ <ClCompile Include="..\devices\gdevxini.c" />
+ <ClCompile Include="..\devices\gdevxres.c" />
+ <ClCompile Include="..\devices\gxfcopy.c" />
+ <ClCompile Include="..\devices\minftrsz.c" />
+ <ClCompile Include="..\devices\rinkj\evenbetter-rll.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-byte-stream.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-config.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-device.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-dither.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-epson870.c" />
+ <ClCompile Include="..\devices\rinkj\rinkj-screen-eb.c" />
+ <ClCompile Include="..\devices\vector\gdevagl.c" />
+ <ClCompile Include="..\devices\vector\gdevlj56.c" />
+ <ClCompile Include="..\devices\vector\gdevpdf.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfb.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfc.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfd.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfe.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfg.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfi.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfj.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfk.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfm.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfo.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfp.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfr.c" />
+ <ClCompile Include="..\devices\vector\gdevpdft.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfu.c" />
+ <ClCompile Include="..\devices\vector\gdevpdfv.c" />
+ <ClCompile Include="..\devices\vector\gdevpdt.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtb.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtc.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtd.c" />
+ <ClCompile Include="..\devices\vector\gdevpdte.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtf.c" />
+ <ClCompile Include="..\devices\vector\gdevpdti.c" />
+ <ClCompile Include="..\devices\vector\gdevpdts.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtt.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtv.c" />
+ <ClCompile Include="..\devices\vector\gdevpdtw.c" />
+ <ClCompile Include="..\devices\vector\gdevps.c" />
+ <ClCompile Include="..\devices\vector\gdevpsdi.c" />
+ <ClCompile Include="..\devices\vector\gdevpsdp.c" />
+ <ClCompile Include="..\devices\vector\gdevpsds.c" />
+ <ClCompile Include="..\devices\vector\gdevpsdu.c" />
+ <ClCompile Include="..\devices\vector\gdevpsf1.c" />
+ <ClCompile Include="..\devices\vector\gdevpsf2.c" />
+ <ClCompile Include="..\devices\vector\gdevpsfm.c" />
+ <ClCompile Include="..\devices\vector\gdevpsft.c" />
+ <ClCompile Include="..\devices\vector\gdevpsfu.c" />
+ <ClCompile Include="..\devices\vector\gdevpsfx.c" />
+ <ClCompile Include="..\devices\vector\gdevpsu.c" />
+ <ClCompile Include="..\devices\vector\gdevpx.c" />
+ <ClCompile Include="..\devices\vector\gdevsvg.c" />
+ <ClCompile Include="..\devices\vector\gdevtxtw.c" />
+ <ClCompile Include="..\devices\vector\gdevxps.c" />
+ <ClCompile Include="..\devices\vector\whitelst.c" />
+ <ClCompile Include="..\expat\lib\xmlparse.c" />
+ <ClCompile Include="..\expat\lib\xmlrole.c" />
+ <ClCompile Include="..\expat\lib\xmltok.c" />
+ <ClCompile Include="..\expat\lib\xmltok_impl.c" />
+ <ClCompile Include="..\expat\lib\xmltok_ns.c" />
+ <ClCompile Include="..\expat\tests\benchmark\benchmark.c" />
+ <ClCompile Include="..\expat\tests\chardata.c" />
+ <ClCompile Include="..\expat\tests\minicheck.c" />
+ <ClCompile Include="..\expat\tests\runtests.c" />
+ <ClCompile Include="..\expat\tests\runtestspp.cpp" />
+ <ClCompile Include="..\ijs\ijs.c" />
+ <ClCompile Include="..\ijs\ijs_client.c" />
+ <ClCompile Include="..\ijs\ijs_client_example.c" />
+ <ClCompile Include="..\ijs\ijs_exec_unix.c" />
+ <ClCompile Include="..\ijs\ijs_exec_win.c" />
+ <ClCompile Include="..\ijs\ijs_server.c" />
+ <ClCompile Include="..\ijs\ijs_server_example.c" />
+ <ClCompile Include="..\jbig2dec\getopt.c" />
+ <ClCompile Include="..\jbig2dec\getopt1.c" />
+ <ClCompile Include="..\jbig2dec\jbig2.c" />
+ <ClCompile Include="..\jbig2dec\jbig2dec.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_arith.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_arith_iaid.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_arith_int.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_generic.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_huffman.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_hufftab.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_image.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_image_pbm.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_image_png.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_mmr.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_page.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_refinement.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_segment.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_symbol_dict.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_text.c" />
+ <ClCompile Include="..\jbig2dec\memcmp.c" />
+ <ClCompile Include="..\jbig2dec\sha1.c" />
+ <ClCompile Include="..\jbig2dec\snprintf.c" />
+ <ClCompile Include="..\jpegxr\algo.c" />
+ <ClCompile Include="..\jpegxr\api.c" />
+ <ClCompile Include="..\jpegxr\cr_parse.c" />
+ <ClCompile Include="..\jpegxr\cw_emit.c" />
+ <ClCompile Include="..\jpegxr\dllmain.c" />
+ <ClCompile Include="..\jpegxr\file.c" />
+ <ClCompile Include="..\jpegxr\flags.c" />
+ <ClCompile Include="..\jpegxr\init.c" />
+ <ClCompile Include="..\jpegxr\io.c" />
+ <ClCompile Include="..\jpegxr\jpegxr.c" />
+ <ClCompile Include="..\jpegxr\jpegxr_pixelformat.c" />
+ <ClCompile Include="..\jpegxr\qp.tab.c" />
+ <ClCompile Include="..\jpegxr\qp_lexor.c" />
+ <ClCompile Include="..\jpegxr\r_parse.c" />
+ <ClCompile Include="..\jpegxr\r_strip.c" />
+ <ClCompile Include="..\jpegxr\r_tile_frequency.c" />
+ <ClCompile Include="..\jpegxr\r_tile_spatial.c" />
+ <ClCompile Include="..\jpegxr\w_emit.c" />
+ <ClCompile Include="..\jpegxr\w_strip.c" />
+ <ClCompile Include="..\jpegxr\w_tile_frequency.c" />
+ <ClCompile Include="..\jpegxr\w_tile_spatial.c" />
+ <ClCompile Include="..\jpegxr\x_strip.c" />
+ <ClCompile Include="..\jpeg\ansi2knr.c" />
+ <ClCompile Include="..\jpeg\cdjpeg.c" />
+ <ClCompile Include="..\jpeg\cjpeg.c" />
+ <ClCompile Include="..\jpeg\ckconfig.c" />
+ <ClCompile Include="..\jpeg\djpeg.c" />
+ <ClCompile Include="..\jpeg\example.c" />
+ <ClCompile Include="..\jpeg\jcapimin.c" />
+ <ClCompile Include="..\jpeg\jcapistd.c" />
+ <ClCompile Include="..\jpeg\jccoefct.c" />
+ <ClCompile Include="..\jpeg\jccolor.c" />
+ <ClCompile Include="..\jpeg\jcdctmgr.c" />
+ <ClCompile Include="..\jpeg\jchuff.c" />
+ <ClCompile Include="..\jpeg\jcinit.c" />
+ <ClCompile Include="..\jpeg\jcmainct.c" />
+ <ClCompile Include="..\jpeg\jcmarker.c" />
+ <ClCompile Include="..\jpeg\jcmaster.c" />
+ <ClCompile Include="..\jpeg\jcomapi.c" />
+ <ClCompile Include="..\jpeg\jcparam.c" />
+ <ClCompile Include="..\jpeg\jcphuff.c" />
+ <ClCompile Include="..\jpeg\jcprepct.c" />
+ <ClCompile Include="..\jpeg\jcsample.c" />
+ <ClCompile Include="..\jpeg\jctrans.c" />
+ <ClCompile Include="..\jpeg\jdapimin.c" />
+ <ClCompile Include="..\jpeg\jdapistd.c" />
+ <ClCompile Include="..\jpeg\jdatadst.c" />
+ <ClCompile Include="..\jpeg\jdatasrc.c" />
+ <ClCompile Include="..\jpeg\jdcoefct.c" />
+ <ClCompile Include="..\jpeg\jdcolor.c" />
+ <ClCompile Include="..\jpeg\jddctmgr.c" />
+ <ClCompile Include="..\jpeg\jdhuff.c" />
+ <ClCompile Include="..\jpeg\jdinput.c" />
+ <ClCompile Include="..\jpeg\jdmainct.c" />
+ <ClCompile Include="..\jpeg\jdmarker.c" />
+ <ClCompile Include="..\jpeg\jdmaster.c" />
+ <ClCompile Include="..\jpeg\jdmerge.c" />
+ <ClCompile Include="..\jpeg\jdphuff.c" />
+ <ClCompile Include="..\jpeg\jdpostct.c" />
+ <ClCompile Include="..\jpeg\jdsample.c" />
+ <ClCompile Include="..\jpeg\jdtrans.c" />
+ <ClCompile Include="..\jpeg\jerror.c" />
+ <ClCompile Include="..\jpeg\jfdctflt.c" />
+ <ClCompile Include="..\jpeg\jfdctfst.c" />
+ <ClCompile Include="..\jpeg\jfdctint.c" />
+ <ClCompile Include="..\jpeg\jidctflt.c" />
+ <ClCompile Include="..\jpeg\jidctfst.c" />
+ <ClCompile Include="..\jpeg\jidctint.c" />
+ <ClCompile Include="..\jpeg\jidctred.c" />
+ <ClCompile Include="..\jpeg\jmemansi.c" />
+ <ClCompile Include="..\jpeg\jmemdos.c" />
+ <ClCompile Include="..\jpeg\jmemmac.c" />
+ <ClCompile Include="..\jpeg\jmemmgr.c" />
+ <ClCompile Include="..\jpeg\jmemname.c" />
+ <ClCompile Include="..\jpeg\jmemnobs.c" />
+ <ClCompile Include="..\jpeg\jpegtran.c" />
+ <ClCompile Include="..\jpeg\jquant1.c" />
+ <ClCompile Include="..\jpeg\jquant2.c" />
+ <ClCompile Include="..\jpeg\jutils.c" />
+ <ClCompile Include="..\jpeg\rdbmp.c" />
+ <ClCompile Include="..\jpeg\rdcolmap.c" />
+ <ClCompile Include="..\jpeg\rdgif.c" />
+ <ClCompile Include="..\jpeg\rdjpgcom.c" />
+ <ClCompile Include="..\jpeg\rdppm.c" />
+ <ClCompile Include="..\jpeg\rdrle.c" />
+ <ClCompile Include="..\jpeg\rdswitch.c" />
+ <ClCompile Include="..\jpeg\rdtarga.c" />
+ <ClCompile Include="..\jpeg\transupp.c" />
+ <ClCompile Include="..\jpeg\wrbmp.c" />
+ <ClCompile Include="..\jpeg\wrgif.c" />
+ <ClCompile Include="..\jpeg\wrjpgcom.c" />
+ <ClCompile Include="..\jpeg\wrppm.c" />
+ <ClCompile Include="..\jpeg\wrrle.c" />
+ <ClCompile Include="..\jpeg\wrtarga.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsalpha.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscam02.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscgats.c" />
+ <ClCompile Include="..\lcms2mt\src\cmscnvrt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmserr.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsgamma.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsgmt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmshalf.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsintrp.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsio0.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsio1.c" />
+ <ClCompile Include="..\lcms2mt\src\cmslut.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsmd5.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsmtrx.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsnamed.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsopt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmspack.c" />
+ <ClCompile Include="..\lcms2mt\src\cmspcs.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsplugin.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsps2.c" />
+ <ClCompile Include="..\lcms2mt\src\cmssamp.c" />
+ <ClCompile Include="..\lcms2mt\src\cmssm.c" />
+ <ClCompile Include="..\lcms2mt\src\cmstypes.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsvirt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmswtpnt.c" />
+ <ClCompile Include="..\lcms2mt\src\cmsxform.c" />
+ <ClCompile Include="..\libpng\example.c" />
+ <ClCompile Include="..\libpng\png.c" />
+ <ClCompile Include="..\libpng\pngerror.c" />
+ <ClCompile Include="..\libpng\pnggccrd.c" />
+ <ClCompile Include="..\libpng\pngget.c" />
+ <ClCompile Include="..\libpng\pngmem.c" />
+ <ClCompile Include="..\libpng\pngpread.c" />
+ <ClCompile Include="..\libpng\pngread.c" />
+ <ClCompile Include="..\libpng\pngrio.c" />
+ <ClCompile Include="..\libpng\pngrtran.c" />
+ <ClCompile Include="..\libpng\pngrutil.c" />
+ <ClCompile Include="..\libpng\pngset.c" />
+ <ClCompile Include="..\libpng\pngtest.c" />
+ <ClCompile Include="..\libpng\pngtrans.c" />
+ <ClCompile Include="..\libpng\pngvcrd.c" />
+ <ClCompile Include="..\libpng\pngwio.c" />
+ <ClCompile Include="..\libpng\pngwrite.c" />
+ <ClCompile Include="..\libpng\pngwtran.c" />
+ <ClCompile Include="..\libpng\pngwutil.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\bio.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\cidx_manager.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\cio.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\dwt.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\event.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\function_list.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\image.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\invert.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\j2k.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\j2k_lib.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\jp2.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\jpt.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\mct.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\mqc.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\openjpeg.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\opj_clock.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\phix_manager.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\pi.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\ppix_manager.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t1.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t1_generate_luts.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t2.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tcd.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tgt.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\thix_manager.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\thread.c" />
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tpix_manager.c" />
+ <ClCompile Include="..\psi\dmmain.c" />
+ <ClCompile Include="..\psi\dpmain.c" />
+ <ClCompile Include="..\psi\dscparse.c" />
+ <ClCompile Include="..\psi\dwdll.c" />
+ <ClCompile Include="..\psi\dwimg.c" />
+ <ClCompile Include="..\psi\dwinst.cpp" />
+ <ClCompile Include="..\psi\dwmain.c" />
+ <ClCompile Include="..\psi\dwmainc.c" />
+ <ClCompile Include="..\psi\dwnodll.c" />
+ <ClCompile Include="..\psi\dwreg.c" />
+ <ClCompile Include="..\psi\dwsetup.cpp" />
+ <ClCompile Include="..\psi\dwtext.c" />
+ <ClCompile Include="..\psi\dwtrace.c" />
+ <ClCompile Include="..\psi\dwuninst.cpp" />
+ <ClCompile Include="..\psi\dxmain.c" />
+ <ClCompile Include="..\psi\dxmainc.c" />
+ <ClCompile Include="..\psi\gs.c" />
+ <ClCompile Include="..\psi\gsdll.c" />
+ <ClCompile Include="..\psi\gserver.c" />
+ <ClCompile Include="..\psi\ialloc.c" />
+ <ClCompile Include="..\psi\iapi.c" />
+ <ClCompile Include="..\psi\ibnum.c" />
+ <ClCompile Include="..\psi\iconf.c" />
+ <ClCompile Include="..\psi\icontext.c" />
+ <ClCompile Include="..\psi\idebug.c" />
+ <ClCompile Include="..\psi\idict.c" />
+ <ClCompile Include="..\psi\idisp.c" />
+ <ClCompile Include="..\psi\idparam.c" />
+ <ClCompile Include="..\psi\idstack.c" />
+ <ClCompile Include="..\psi\igc.c" />
+ <ClCompile Include="..\psi\igcref.c" />
+ <ClCompile Include="..\psi\igcstr.c" />
+ <ClCompile Include="..\psi\iinit.c" />
+ <ClCompile Include="..\psi\ilocate.c" />
+ <ClCompile Include="..\psi\imain.c" />
+ <ClCompile Include="..\psi\imainarg.c" />
+ <ClCompile Include="..\psi\iname.c" />
+ <ClCompile Include="..\psi\inobtokn.c" />
+ <ClCompile Include="..\psi\inouparm.c" />
+ <ClCompile Include="..\psi\interp.c" />
+ <ClCompile Include="..\psi\iparam.c" />
+ <ClCompile Include="..\psi\iplugin.c" />
+ <ClCompile Include="..\psi\ireclaim.c" />
+ <ClCompile Include="..\psi\isave.c" />
+ <ClCompile Include="..\psi\iscan.c" />
+ <ClCompile Include="..\psi\iscanbin.c" />
+ <ClCompile Include="..\psi\iscannum.c" />
+ <ClCompile Include="..\psi\istack.c" />
+ <ClCompile Include="..\psi\iutil.c" />
+ <ClCompile Include="..\psi\iutil2.c" />
+ <ClCompile Include="..\psi\psapi.c" />
+ <ClCompile Include="..\psi\sfilter1.c" />
+ <ClCompile Include="..\psi\wrfont.c" />
+ <ClCompile Include="..\psi\write_t1.c" />
+ <ClCompile Include="..\psi\write_t2.c" />
+ <ClCompile Include="..\psi\zalg.c" />
+ <ClCompile Include="..\psi\zarith.c" />
+ <ClCompile Include="..\psi\zarray.c" />
+ <ClCompile Include="..\psi\zbfont.c" />
+ <ClCompile Include="..\psi\zbseq.c" />
+ <ClCompile Include="..\psi\zcfont.c" />
+ <ClCompile Include="..\psi\zchar.c" />
+ <ClCompile Include="..\psi\zchar1.c" />
+ <ClCompile Include="..\psi\zchar2.c" />
+ <ClCompile Include="..\psi\zchar32.c" />
+ <ClCompile Include="..\psi\zchar42.c" />
+ <ClCompile Include="..\psi\zcharout.c" />
+ <ClCompile Include="..\psi\zcharx.c" />
+ <ClCompile Include="..\psi\zcid.c" />
+ <ClCompile Include="..\psi\zcie.c" />
+ <ClCompile Include="..\psi\zcolor.c" />
+ <ClCompile Include="..\psi\zcolor1.c" />
+ <ClCompile Include="..\psi\zcolor2.c" />
+ <ClCompile Include="..\psi\zcolor3.c" />
+ <ClCompile Include="..\psi\zcontrol.c" />
+ <ClCompile Include="..\psi\zcrd.c" />
+ <ClCompile Include="..\psi\zcsindex.c" />
+ <ClCompile Include="..\psi\zcspixel.c" />
+ <ClCompile Include="..\psi\zcssepr.c" />
+ <ClCompile Include="..\psi\zdevcal.c" />
+ <ClCompile Include="..\psi\zdevice.c" />
+ <ClCompile Include="..\psi\zdevice2.c" />
+ <ClCompile Include="..\psi\zdict.c" />
+ <ClCompile Include="..\psi\zdouble.c" />
+ <ClCompile Include="..\psi\zdps1.c" />
+ <ClCompile Include="..\psi\zdscpars.c" />
+ <ClCompile Include="..\psi\zfaes.c" />
+ <ClCompile Include="..\psi\zfapi.c" />
+ <ClCompile Include="..\psi\zfarc4.c" />
+ <ClCompile Include="..\psi\zfbcp.c" />
+ <ClCompile Include="..\psi\zfcid.c" />
+ <ClCompile Include="..\psi\zfcid0.c" />
+ <ClCompile Include="..\psi\zfcid1.c" />
+ <ClCompile Include="..\psi\zfcmap.c" />
+ <ClCompile Include="..\psi\zfdctd.c" />
+ <ClCompile Include="..\psi\zfdcte.c" />
+ <ClCompile Include="..\psi\zfdecode.c" />
+ <ClCompile Include="..\psi\zfile.c" />
+ <ClCompile Include="..\psi\zfile1.c" />
+ <ClCompile Include="..\psi\zfileio.c" />
+ <ClCompile Include="..\psi\zfilter.c" />
+ <ClCompile Include="..\psi\zfilter2.c" />
+ <ClCompile Include="..\psi\zfimscale.c" />
+ <ClCompile Include="..\psi\zfjbig2.c" />
+ <ClCompile Include="..\psi\zfjpx.c" />
+ <ClCompile Include="..\psi\zfmd5.c" />
+ <ClCompile Include="..\psi\zfont.c" />
+ <ClCompile Include="..\psi\zfont0.c" />
+ <ClCompile Include="..\psi\zfont1.c" />
+ <ClCompile Include="..\psi\zfont2.c" />
+ <ClCompile Include="..\psi\zfont32.c" />
+ <ClCompile Include="..\psi\zfont42.c" />
+ <ClCompile Include="..\psi\zfontenum.c" />
+ <ClCompile Include="..\psi\zfproc.c" />
+ <ClCompile Include="..\psi\zfrsd.c" />
+ <ClCompile Include="..\psi\zfsample.c" />
+ <ClCompile Include="..\psi\zfunc.c" />
+ <ClCompile Include="..\psi\zfunc0.c" />
+ <ClCompile Include="..\psi\zfunc3.c" />
+ <ClCompile Include="..\psi\zfunc4.c" />
+ <ClCompile Include="..\psi\zfzlib.c" />
+ <ClCompile Include="..\psi\zgeneric.c" />
+ <ClCompile Include="..\psi\zgstate.c" />
+ <ClCompile Include="..\psi\zht.c" />
+ <ClCompile Include="..\psi\zht1.c" />
+ <ClCompile Include="..\psi\zht2.c" />
+ <ClCompile Include="..\psi\zicc.c" />
+ <ClCompile Include="..\psi\zimage.c" />
+ <ClCompile Include="..\psi\zimage3.c" />
+ <ClCompile Include="..\psi\ziodev.c" />
+ <ClCompile Include="..\psi\ziodev2.c" />
+ <ClCompile Include="..\psi\ziodevsc.c" />
+ <ClCompile Include="..\psi\zmath.c" />
+ <ClCompile Include="..\psi\zmatrix.c" />
+ <ClCompile Include="..\psi\zmedia2.c" />
+ <ClCompile Include="..\psi\zmisc.c" />
+ <ClCompile Include="..\psi\zmisc1.c" />
+ <ClCompile Include="..\psi\zmisc2.c" />
+ <ClCompile Include="..\psi\zmisc3.c" />
+ <ClCompile Include="..\psi\zncdummy.c" />
+ <ClCompile Include="..\psi\zpacked.c" />
+ <ClCompile Include="..\psi\zpaint.c" />
+ <ClCompile Include="..\psi\zpath.c" />
+ <ClCompile Include="..\psi\zpath1.c" />
+ <ClCompile Include="..\psi\zpcolor.c" />
+ <ClCompile Include="..\psi\zpdfops.c" />
+ <ClCompile Include="..\psi\zrelbit.c" />
+ <ClCompile Include="..\psi\zshade.c" />
+ <ClCompile Include="..\psi\zstack.c" />
+ <ClCompile Include="..\psi\zstring.c" />
+ <ClCompile Include="..\psi\zsysvm.c" />
+ <ClCompile Include="..\psi\ztoken.c" />
+ <ClCompile Include="..\psi\ztrans.c" />
+ <ClCompile Include="..\psi\ztrap.c" />
+ <ClCompile Include="..\psi\ztype.c" />
+ <ClCompile Include="..\psi\zupath.c" />
+ <ClCompile Include="..\psi\zusparam.c" />
+ <ClCompile Include="..\psi\zvmem.c" />
+ <ClCompile Include="..\psi\zvmem2.c" />
+ <ClCompile Include="..\tiff\libtiff\mkg3states.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_acorn.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_apple.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_atari.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_aux.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_close.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_codec.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_color.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_compress.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dir.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirinfo.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirread.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dirwrite.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_dumpmode.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_error.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_extension.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_fax3.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_fax3sm.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_flush.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_getimage.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_jbig.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_jpeg.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_luv.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_lzw.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_msdos.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_next.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_ojpeg.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_open.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_packbits.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_pixarlog.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_predict.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_print.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_read.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_stream.cxx" />
+ <ClCompile Include="..\tiff\libtiff\tif_strip.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_swab.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_thunder.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_tile.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_unix.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_version.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_warning.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_win3.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_win32.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_write.c" />
+ <ClCompile Include="..\tiff\libtiff\tif_zip.c" />
+ <ClCompile Include="..\tiff\port\dummy.c" />
+ <ClCompile Include="..\tiff\port\getopt.c" />
+ <ClCompile Include="..\tiff\port\lfind.c" />
+ <ClCompile Include="..\tiff\port\strcasecmp.c" />
+ <ClCompile Include="..\tiff\port\strtoul.c" />
+ <ClCompile Include="..\tiff\test\ascii_tag.c" />
+ <ClCompile Include="..\tiff\test\check_tag.c" />
+ <ClCompile Include="..\tiff\test\long_tag.c" />
+ <ClCompile Include="..\tiff\test\short_tag.c" />
+ <ClCompile Include="..\tiff\test\strip.c" />
+ <ClCompile Include="..\tiff\test\strip_rw.c" />
+ <ClCompile Include="..\tiff\test\test_arrays.c" />
+ <ClCompile Include="..\tiff\tools\bmp2tiff.c" />
+ <ClCompile Include="..\tiff\tools\fax2ps.c" />
+ <ClCompile Include="..\tiff\tools\fax2tiff.c" />
+ <ClCompile Include="..\tiff\tools\gif2tiff.c" />
+ <ClCompile Include="..\tiff\tools\pal2rgb.c" />
+ <ClCompile Include="..\tiff\tools\ppm2tiff.c" />
+ <ClCompile Include="..\tiff\tools\ras2tiff.c" />
+ <ClCompile Include="..\tiff\tools\raw2tiff.c" />
+ <ClCompile Include="..\tiff\tools\rgb2ycbcr.c" />
+ <ClCompile Include="..\tiff\tools\sgi2tiff.c" />
+ <ClCompile Include="..\tiff\tools\sgisv.c" />
+ <ClCompile Include="..\tiff\tools\thumbnail.c" />
+ <ClCompile Include="..\tiff\tools\tiff2bw.c" />
+ <ClCompile Include="..\tiff\tools\tiff2pdf.c" />
+ <ClCompile Include="..\tiff\tools\tiff2ps.c" />
+ <ClCompile Include="..\tiff\tools\tiff2rgba.c" />
+ <ClCompile Include="..\tiff\tools\tiffcmp.c" />
+ <ClCompile Include="..\tiff\tools\tiffcp.c" />
+ <ClCompile Include="..\tiff\tools\tiffcrop.c" />
+ <ClCompile Include="..\tiff\tools\tiffdither.c" />
+ <ClCompile Include="..\tiff\tools\tiffdump.c" />
+ <ClCompile Include="..\tiff\tools\tiffgt.c" />
+ <ClCompile Include="..\tiff\tools\tiffinfo.c" />
+ <ClCompile Include="..\tiff\tools\tiffmedian.c" />
+ <ClCompile Include="..\tiff\tools\tiffset.c" />
+ <ClCompile Include="..\tiff\tools\tiffsplit.c" />
+ <ClCompile Include="..\tiff\tools\ycbcr.c" />
+ <ClCompile Include="..\urf\gdevurf.c" />
+ <ClCompile Include="..\urf\surfd.c" />
+ <ClCompile Include="..\urf\urffilter.c" />
+ <ClCompile Include="..\zlib\adler32.c" />
+ <ClCompile Include="..\zlib\compress.c" />
+ <ClCompile Include="..\zlib\crc32.c" />
+ <ClCompile Include="..\zlib\deflate.c" />
+ <ClCompile Include="..\zlib\gzclose.c" />
+ <ClCompile Include="..\zlib\gzlib.c" />
+ <ClCompile Include="..\zlib\gzread.c" />
+ <ClCompile Include="..\zlib\gzwrite.c" />
+ <ClCompile Include="..\zlib\infback.c" />
+ <ClCompile Include="..\zlib\inffast.c" />
+ <ClCompile Include="..\zlib\inflate.c" />
+ <ClCompile Include="..\zlib\inftrees.c" />
+ <ClCompile Include="..\zlib\trees.c" />
+ <ClCompile Include="..\zlib\uncompr.c" />
+ <ClCompile Include="..\zlib\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\base\aes.h" />
+ <ClInclude Include="..\base\assert_.h" />
+ <ClInclude Include="..\base\bobbin.h" />
+ <ClInclude Include="..\base\claptrap-impl.h" />
+ <ClInclude Include="..\base\claptrap.h" />
+ <ClInclude Include="..\base\ctype_.h" />
+ <ClInclude Include="..\base\dirent_.h" />
+ <ClInclude Include="..\base\dos_.h" />
+ <ClInclude Include="..\base\errno_.h" />
+ <ClInclude Include="..\base\ets.h" />
+ <ClInclude Include="..\base\ets_tm.h" />
+ <ClInclude Include="..\base\fcntl_.h" />
+ <ClInclude Include="..\base\gconf.h" />
+ <ClInclude Include="..\base\gdbflags.h" />
+ <ClInclude Include="..\base\gdebug.h" />
+ <ClInclude Include="..\base\gdevbbox.h" />
+ <ClInclude Include="..\base\gdevdcrd.h" />
+ <ClInclude Include="..\base\gdevddrw.h" />
+ <ClInclude Include="..\base\gdevdevn.h" />
+ <ClInclude Include="..\base\gdevdevnprn.h" />
+ <ClInclude Include="..\base\gdevflp.h" />
+ <ClInclude Include="..\base\gdevmem.h" />
+ <ClInclude Include="..\base\gdevmpla.h" />
+ <ClInclude Include="..\base\gdevmplt.h" />
+ <ClInclude Include="..\base\gdevmrop.h" />
+ <ClInclude Include="..\base\gdevmrun.h" />
+ <ClInclude Include="..\base\gdevoflt.h" />
+ <ClInclude Include="..\base\gdevp14.h" />
+ <ClInclude Include="..\base\gdevpccm.h" />
+ <ClInclude Include="..\base\gdevplnx.h" />
+ <ClInclude Include="..\base\gdevppla.h" />
+ <ClInclude Include="..\base\gdevprn.h" />
+ <ClInclude Include="..\base\gdevpxat.h" />
+ <ClInclude Include="..\base\gdevpxen.h" />
+ <ClInclude Include="..\base\gdevpxop.h" />
+ <ClInclude Include="..\base\gdevsclass.h" />
+ <ClInclude Include="..\base\gdevvec.h" />
+ <ClInclude Include="..\base\gen_ordered.h" />
+ <ClInclude Include="..\base\gp.h" />
+ <ClInclude Include="..\base\gpcheck.h" />
+ <ClInclude Include="..\base\gpgetenv.h" />
+ <ClInclude Include="..\base\gpmisc.h" />
+ <ClInclude Include="..\base\gpsync.h" />
+ <ClInclude Include="..\base\gp_mswin.h" />
+ <ClInclude Include="..\base\gp_os2.h" />
+ <ClInclude Include="..\base\gsalloc.h" />
+ <ClInclude Include="..\base\gsalpha.h" />
+ <ClInclude Include="..\base\gsalphac.h" />
+ <ClInclude Include="..\base\gsargs.h" />
+ <ClInclude Include="..\base\gsbitmap.h" />
+ <ClInclude Include="..\base\gsbitops.h" />
+ <ClInclude Include="..\base\gsbittab.h" />
+ <ClInclude Include="..\base\gsccode.h" />
+ <ClInclude Include="..\base\gsccolor.h" />
+ <ClInclude Include="..\base\gscdefs.h" />
+ <ClInclude Include="..\base\gscdevn.h" />
+ <ClInclude Include="..\base\gscedata.h" />
+ <ClInclude Include="..\base\gscencs.h" />
+ <ClInclude Include="..\base\gschar.h" />
+ <ClInclude Include="..\base\gscicach.h" />
+ <ClInclude Include="..\base\gscie.h" />
+ <ClInclude Include="..\base\gscindex.h" />
+ <ClInclude Include="..\base\gsclipsr.h" />
+ <ClInclude Include="..\base\gscms.h" />
+ <ClInclude Include="..\base\gscolor.h" />
+ <ClInclude Include="..\base\gscolor1.h" />
+ <ClInclude Include="..\base\gscolor2.h" />
+ <ClInclude Include="..\base\gscolor3.h" />
+ <ClInclude Include="..\base\gscompt.h" />
+ <ClInclude Include="..\base\gscoord.h" />
+ <ClInclude Include="..\base\gscpixel.h" />
+ <ClInclude Include="..\base\gscpm.h" />
+ <ClInclude Include="..\base\gscrd.h" />
+ <ClInclude Include="..\base\gscrdp.h" />
+ <ClInclude Include="..\base\gscrypt1.h" />
+ <ClInclude Include="..\base\gscsel.h" />
+ <ClInclude Include="..\base\gscsepr.h" />
+ <ClInclude Include="..\base\gscspace.h" />
+ <ClInclude Include="..\base\gscssub.h" />
+ <ClInclude Include="..\base\gsdcolor.h" />
+ <ClInclude Include="..\base\gsdevice.h" />
+ <ClInclude Include="..\base\gsdll.h" />
+ <ClInclude Include="..\base\gsdllwin.h" />
+ <ClInclude Include="..\base\gsdsrc.h" />
+ <ClInclude Include="..\base\gsequivc.h" />
+ <ClInclude Include="..\base\gserrors.h" />
+ <ClInclude Include="..\base\gsexit.h" />
+ <ClInclude Include="..\base\gsfcmap.h" />
+ <ClInclude Include="..\base\gsflip.h" />
+ <ClInclude Include="..\base\gsfname.h" />
+ <ClInclude Include="..\base\gsfont.h" />
+ <ClInclude Include="..\base\gsform1.h" />
+ <ClInclude Include="..\base\gsfunc.h" />
+ <ClInclude Include="..\base\gsfunc0.h" />
+ <ClInclude Include="..\base\gsfunc3.h" />
+ <ClInclude Include="..\base\gsfunc4.h" />
+ <ClInclude Include="..\base\gsgc.h" />
+ <ClInclude Include="..\base\gsgcache.h" />
+ <ClInclude Include="..\base\gsgdata.h" />
+ <ClInclude Include="..\base\gsgstate.h" />
+ <ClInclude Include="..\base\gshsb.h" />
+ <ClInclude Include="..\base\gsht.h" />
+ <ClInclude Include="..\base\gsht1.h" />
+ <ClInclude Include="..\base\gshtx.h" />
+ <ClInclude Include="..\base\gsicc.h" />
+ <ClInclude Include="..\base\gsicc_cache.h" />
+ <ClInclude Include="..\base\gsicc_cms.h" />
+ <ClInclude Include="..\base\gsicc_create.h" />
+ <ClInclude Include="..\base\gsicc_manage.h" />
+ <ClInclude Include="..\base\gsicc_profilecache.h" />
+ <ClInclude Include="..\base\gsimage.h" />
+ <ClInclude Include="..\base\gsio.h" />
+ <ClInclude Include="..\base\gsiorom.h" />
+ <ClInclude Include="..\base\gsipar3x.h" />
+ <ClInclude Include="..\base\gsiparam.h" />
+ <ClInclude Include="..\base\gsiparm3.h" />
+ <ClInclude Include="..\base\gsiparm4.h" />
+ <ClInclude Include="..\base\gsjconf.h" />
+ <ClInclude Include="..\base\gsjmorec.h" />
+ <ClInclude Include="..\base\gslib.h" />
+ <ClInclude Include="..\base\gslibctx.h" />
+ <ClInclude Include="..\base\gsline.h" />
+ <ClInclude Include="..\base\gslparam.h" />
+ <ClInclude Include="..\base\gsmalloc.h" />
+ <ClInclude Include="..\base\gsmatrix.h" />
+ <ClInclude Include="..\base\gsmchunk.h" />
+ <ClInclude Include="..\base\gsmd5.h" />
+ <ClInclude Include="..\base\gsmdebug.h" />
+ <ClInclude Include="..\base\gsmemory.h" />
+ <ClInclude Include="..\base\gsmemraw.h" />
+ <ClInclude Include="..\base\gsmemret.h" />
+ <ClInclude Include="..\base\gsnamecl.h" />
+ <ClInclude Include="..\base\gsncdummy.h" />
+ <ClInclude Include="..\base\gsnogc.h" />
+ <ClInclude Include="..\base\gsnotify.h" />
+ <ClInclude Include="..\base\gsovrc.h" />
+ <ClInclude Include="..\base\gspaint.h" />
+ <ClInclude Include="..\base\gsparam.h" />
+ <ClInclude Include="..\base\gsparams.h" />
+ <ClInclude Include="..\base\gsparamx.h" />
+ <ClInclude Include="..\base\gspath.h" />
+ <ClInclude Include="..\base\gspath2.h" />
+ <ClInclude Include="..\base\gspcolor.h" />
+ <ClInclude Include="..\base\gspenum.h" />
+ <ClInclude Include="..\base\gspmdrv.h" />
+ <ClInclude Include="..\base\gsptype1.h" />
+ <ClInclude Include="..\base\gsptype2.h" />
+ <ClInclude Include="..\base\gsrect.h" />
+ <ClInclude Include="..\base\gsrefct.h" />
+ <ClInclude Include="..\base\gsrop.h" />
+ <ClInclude Include="..\base\gsroprun1.h" />
+ <ClInclude Include="..\base\gsroprun24.h" />
+ <ClInclude Include="..\base\gsroprun8.h" />
+ <ClInclude Include="..\base\gsropt.h" />
+ <ClInclude Include="..\base\gsserial.h" />
+ <ClInclude Include="..\base\gsshade.h" />
+ <ClInclude Include="..\base\gsstate.h" />
+ <ClInclude Include="..\base\gsstrl.h" />
+ <ClInclude Include="..\base\gsstruct.h" />
+ <ClInclude Include="..\base\gsstype.h" />
+ <ClInclude Include="..\base\gstext.h" />
+ <ClInclude Include="..\base\gstiffio.h" />
+ <ClInclude Include="..\base\gstparam.h" />
+ <ClInclude Include="..\base\gstrans.h" />
+ <ClInclude Include="..\base\gstrap.h" />
+ <ClInclude Include="..\base\gstype1.h" />
+ <ClInclude Include="..\base\gstypes.h" />
+ <ClInclude Include="..\base\gsuid.h" />
+ <ClInclude Include="..\base\gsutil.h" />
+ <ClInclude Include="..\base\gsxfont.h" />
+ <ClInclude Include="..\base\gs_dll_call.h" />
+ <ClInclude Include="..\base\gs_mgl_e.h" />
+ <ClInclude Include="..\base\gs_mro_e.h" />
+ <ClInclude Include="..\base\gx.h" />
+ <ClInclude Include="..\base\gxalloc.h" />
+ <ClInclude Include="..\base\gxalpha.h" />
+ <ClInclude Include="..\base\gxarith.h" />
+ <ClInclude Include="..\base\gxband.h" />
+ <ClInclude Include="..\base\gxbcache.h" />
+ <ClInclude Include="..\base\gxbitfmt.h" />
+ <ClInclude Include="..\base\gxbitmap.h" />
+ <ClInclude Include="..\base\gxbitops.h" />
+ <ClInclude Include="..\base\gxblend.h" />
+ <ClInclude Include="..\base\gxcdevn.h" />
+ <ClInclude Include="..\base\gxchar.h" />
+ <ClInclude Include="..\base\gxchrout.h" />
+ <ClInclude Include="..\base\gxcid.h" />
+ <ClInclude Include="..\base\gxcie.h" />
+ <ClInclude Include="..\base\gxcindex.h" />
+ <ClInclude Include="..\base\gxcldev.h" />
+ <ClInclude Include="..\base\gxclio.h" />
+ <ClInclude Include="..\base\gxclip.h" />
+ <ClInclude Include="..\base\gxclip2.h" />
+ <ClInclude Include="..\base\gxclipm.h" />
+ <ClInclude Include="..\base\gxclipsr.h" />
+ <ClInclude Include="..\base\gxclist.h" />
+ <ClInclude Include="..\base\gxclmem.h" />
+ <ClInclude Include="..\base\gxclpage.h" />
+ <ClInclude Include="..\base\gxclpath.h" />
+ <ClInclude Include="..\base\gxclthrd.h" />
+ <ClInclude Include="..\base\gxcmap.h" />
+ <ClInclude Include="..\base\gxcolor2.h" />
+ <ClInclude Include="..\base\gxcomp.h" />
+ <ClInclude Include="..\base\gxcoord.h" />
+ <ClInclude Include="..\base\gxcpath.h" />
+ <ClInclude Include="..\base\gxcspace.h" />
+ <ClInclude Include="..\base\gxctable.h" />
+ <ClInclude Include="..\base\gxcvalue.h" />
+ <ClInclude Include="..\base\gxdcconv.h" />
+ <ClInclude Include="..\base\gxdcolor.h" />
+ <ClInclude Include="..\base\gxdda.h" />
+ <ClInclude Include="..\base\gxdevbuf.h" />
+ <ClInclude Include="..\base\gxdevcli.h" />
+ <ClInclude Include="..\base\gxdevice.h" />
+ <ClInclude Include="..\base\gxdevmem.h" />
+ <ClInclude Include="..\base\gxdevrop.h" />
+ <ClInclude Include="..\base\gxdevsop.h" />
+ <ClInclude Include="..\base\gxdht.h" />
+ <ClInclude Include="..\base\gxdhtres.h" />
+ <ClInclude Include="..\base\gxdhtserial.h" />
+ <ClInclude Include="..\base\gxdither.h" />
+ <ClInclude Include="..\base\gxdownscale.h" />
+ <ClInclude Include="..\base\gxdtfill.h" />
+ <ClInclude Include="..\base\gxfapi.h" />
+ <ClInclude Include="..\base\gxfapiu.h" />
+ <ClInclude Include="..\base\gxfarith.h" />
+ <ClInclude Include="..\base\gxfcache.h" />
+ <ClInclude Include="..\base\gxfcid.h" />
+ <ClInclude Include="..\base\gxfcmap.h" />
+ <ClInclude Include="..\base\gxfcmap1.h" />
+ <ClInclude Include="..\base\gxfdrop.h" />
+ <ClInclude Include="..\base\gxfill.h" />
+ <ClInclude Include="..\base\gxfillsl.h" />
+ <ClInclude Include="..\base\gxfilltr.h" />
+ <ClInclude Include="..\base\gxfillts.h" />
+ <ClInclude Include="..\base\gxfixed.h" />
+ <ClInclude Include="..\base\gxfmap.h" />
+ <ClInclude Include="..\base\gxfont.h" />
+ <ClInclude Include="..\base\gxfont0.h" />
+ <ClInclude Include="..\base\gxfont0c.h" />
+ <ClInclude Include="..\base\gxfont1.h" />
+ <ClInclude Include="..\base\gxfont42.h" />
+ <ClInclude Include="..\base\gxfrac.h" />
+ <ClInclude Include="..\base\gxftype.h" />
+ <ClInclude Include="..\base\gxfunc.h" />
+ <ClInclude Include="..\base\gxgetbit.h" />
+ <ClInclude Include="..\base\gxgstate.h" />
+ <ClInclude Include="..\base\gxhintn.h" />
+ <ClInclude Include="..\base\gxhldevc.h" />
+ <ClInclude Include="..\base\gxht.h" />
+ <ClInclude Include="..\base\gxhttile.h" />
+ <ClInclude Include="..\base\gxhttype.h" />
+ <ClInclude Include="..\base\gxht_thresh.h" />
+ <ClInclude Include="..\base\gxiclass.h" />
+ <ClInclude Include="..\base\gximag3x.h" />
+ <ClInclude Include="..\base\gximage.h" />
+ <ClInclude Include="..\base\gximage3.h" />
+ <ClInclude Include="..\base\gximask.h" />
+ <ClInclude Include="..\base\gximdecode.h" />
+ <ClInclude Include="..\base\gxiodev.h" />
+ <ClInclude Include="..\base\gxiparam.h" />
+ <ClInclude Include="..\base\gxline.h" />
+ <ClInclude Include="..\base\gxlum.h" />
+ <ClInclude Include="..\base\gxmatrix.h" />
+ <ClInclude Include="..\base\gxmclip.h" />
+ <ClInclude Include="..\base\gxobj.h" />
+ <ClInclude Include="..\base\gxoprect.h" />
+ <ClInclude Include="..\base\gxp1impl.h" />
+ <ClInclude Include="..\base\gxpageq.h" />
+ <ClInclude Include="..\base\gxpaint.h" />
+ <ClInclude Include="..\base\gxpath.h" />
+ <ClInclude Include="..\base\gxpcache.h" />
+ <ClInclude Include="..\base\gxpcolor.h" />
+ <ClInclude Include="..\base\gxrplane.h" />
+ <ClInclude Include="..\base\gxsample.h" />
+ <ClInclude Include="..\base\gxsamplp.h" />
+ <ClInclude Include="..\base\gxscanc.h" />
+ <ClInclude Include="..\base\gxshade.h" />
+ <ClInclude Include="..\base\gxshade4.h" />
+ <ClInclude Include="..\base\gxstate.h" />
+ <ClInclude Include="..\base\gxstdio.h" />
+ <ClInclude Include="..\base\gxsync.h" />
+ <ClInclude Include="..\base\gxtext.h" />
+ <ClInclude Include="..\base\gxtmap.h" />
+ <ClInclude Include="..\base\gxttf.h" />
+ <ClInclude Include="..\base\gxttfb.h" />
+ <ClInclude Include="..\base\gxtype1.h" />
+ <ClInclude Include="..\base\gxxfont.h" />
+ <ClInclude Include="..\base\gzacpath.h" />
+ <ClInclude Include="..\base\gzcpath.h" />
+ <ClInclude Include="..\base\gzht.h" />
+ <ClInclude Include="..\base\gzline.h" />
+ <ClInclude Include="..\base\gzpath.h" />
+ <ClInclude Include="..\base\gzspotan.h" />
+ <ClInclude Include="..\base\gzstate.h" />
+ <ClInclude Include="..\base\icc34.h" />
+ <ClInclude Include="..\base\jerror_.h" />
+ <ClInclude Include="..\base\jmemcust.h" />
+ <ClInclude Include="..\base\locale_.h" />
+ <ClInclude Include="..\base\malloc_.h" />
+ <ClInclude Include="..\base\math_.h" />
+ <ClInclude Include="..\base\memento.h" />
+ <ClInclude Include="..\base\memory_.h" />
+ <ClInclude Include="..\base\pipe_.h" />
+ <ClInclude Include="..\base\png_.h" />
+ <ClInclude Include="..\base\ramfs.h" />
+ <ClInclude Include="..\base\sa85d.h" />
+ <ClInclude Include="..\base\sa85x.h" />
+ <ClInclude Include="..\base\saes.h" />
+ <ClInclude Include="..\base\sarc4.h" />
+ <ClInclude Include="..\base\sbcp.h" />
+ <ClInclude Include="..\base\sbhc.h" />
+ <ClInclude Include="..\base\sbtx.h" />
+ <ClInclude Include="..\base\sbwbs.h" />
+ <ClInclude Include="..\base\scanchar.h" />
+ <ClInclude Include="..\base\scf.h" />
+ <ClInclude Include="..\base\scfx.h" />
+ <ClInclude Include="..\base\scommon.h" />
+ <ClInclude Include="..\base\sdcparam.h" />
+ <ClInclude Include="..\base\sdct.h" />
+ <ClInclude Include="..\base\setjmp_.h" />
+ <ClInclude Include="..\base\sfilter.h" />
+ <ClInclude Include="..\base\sha2.h" />
+ <ClInclude Include="..\base\shc.h" />
+ <ClInclude Include="..\base\shcgen.h" />
+ <ClInclude Include="..\base\sidscale.h" />
+ <ClInclude Include="..\base\siinterp.h" />
+ <ClInclude Include="..\base\simscale.h" />
+ <ClInclude Include="..\base\siscale.h" />
+ <ClInclude Include="..\base\sisparam.h" />
+ <ClInclude Include="..\base\sjbig2.h" />
+ <ClInclude Include="..\base\sjbig2_luratech.h" />
+ <ClInclude Include="..\base\sjpeg.h" />
+ <ClInclude Include="..\base\sjpx_luratech.h" />
+ <ClInclude Include="..\base\sjpx_openjpeg.h" />
+ <ClInclude Include="..\base\slzwx.h" />
+ <ClInclude Include="..\base\smd5.h" />
+ <ClInclude Include="..\base\smtf.h" />
+ <ClInclude Include="..\base\spdiffx.h" />
+ <ClInclude Include="..\base\spngpx.h" />
+ <ClInclude Include="..\base\spprint.h" />
+ <ClInclude Include="..\base\spsdf.h" />
+ <ClInclude Include="..\base\spwgx.h" />
+ <ClInclude Include="..\base\srdline.h" />
+ <ClInclude Include="..\base\srlx.h" />
+ <ClInclude Include="..\base\ssha2.h" />
+ <ClInclude Include="..\base\sstring.h" />
+ <ClInclude Include="..\base\stat_.h" />
+ <ClInclude Include="..\base\std.h" />
+ <ClInclude Include="..\base\stdint_.h" />
+ <ClInclude Include="..\base\stdio_.h" />
+ <ClInclude Include="..\base\stdpn.h" />
+ <ClInclude Include="..\base\stdpre.h" />
+ <ClInclude Include="..\base\stream.h" />
+ <ClInclude Include="..\base\strimpl.h" />
+ <ClInclude Include="..\base\string_.h" />
+ <ClInclude Include="..\base\strmio.h" />
+ <ClInclude Include="..\base\szlibx.h" />
+ <ClInclude Include="..\base\szlibxx.h" />
+ <ClInclude Include="..\base\time_.h" />
+ <ClInclude Include="..\base\ttcalc.h" />
+ <ClInclude Include="..\base\ttcommon.h" />
+ <ClInclude Include="..\base\ttconf.h" />
+ <ClInclude Include="..\base\ttconfig.h" />
+ <ClInclude Include="..\base\ttfinp.h" />
+ <ClInclude Include="..\base\ttfmemd.h" />
+ <ClInclude Include="..\base\ttfoutl.h" />
+ <ClInclude Include="..\base\ttfsfnt.h" />
+ <ClInclude Include="..\base\ttinterp.h" />
+ <ClInclude Include="..\base\ttload.h" />
+ <ClInclude Include="..\base\ttmisc.h" />
+ <ClInclude Include="..\base\ttobjs.h" />
+ <ClInclude Include="..\base\tttables.h" />
+ <ClInclude Include="..\base\tttype.h" />
+ <ClInclude Include="..\base\tttypes.h" />
+ <ClInclude Include="..\base\unistd_.h" />
+ <ClInclude Include="..\base\valgrind.h" />
+ <ClInclude Include="..\base\vdtrace.h" />
+ <ClInclude Include="..\base\vmsmath.h" />
+ <ClInclude Include="..\base\vms_x_fix.h" />
+ <ClInclude Include="..\base\windows_.h" />
+ <ClInclude Include="..\base\wrfont.h" />
+ <ClInclude Include="..\base\write_t1.h" />
+ <ClInclude Include="..\base\write_t2.h" />
+ <ClInclude Include="..\base\x_.h" />
+ <ClInclude Include="..\contrib\defs.h" />
+ <ClInclude Include="..\contrib\eplaser\gdevescv.h" />
+ <ClInclude Include="..\contrib\gdevbjc_.h" />
+ <ClInclude Include="..\contrib\gdevcd8.h" />
+ <ClInclude Include="..\contrib\japanese\dviprlib.h" />
+ <ClInclude Include="..\contrib\japanese\gdevmjc.h" />
+ <ClInclude Include="..\contrib\lips4\gdevlips.h" />
+ <ClInclude Include="..\contrib\lips4\gdevlprn.h" />
+ <ClInclude Include="..\contrib\opvp\opvp.h" />
+ <ClInclude Include="..\contrib\opvp\opvp_0_2_0.h" />
+ <ClInclude Include="..\contrib\opvp\opvp_common.h" />
+ <ClInclude Include="..\contrib\pcl3\eprn\gdeveprn.h" />
+ <ClInclude Include="..\contrib\pcl3\eprn\mediasize.h" />
+ <ClInclude Include="..\contrib\pcl3\eprn\pagecount.h" />
+ <ClInclude Include="..\contrib\pcl3\src\pclcap.h" />
+ <ClInclude Include="..\contrib\pcl3\src\pclgen.h" />
+ <ClInclude Include="..\contrib\pcl3\src\pclscan.h" />
+ <ClInclude Include="..\contrib\pcl3\src\pclsize.h" />
+ <ClInclude Include="..\cups\libs\configwin.h" />
+ <ClInclude Include="..\cups\libs\cups\adminutil.h" />
+ <ClInclude Include="..\cups\libs\cups\array.h" />
+ <ClInclude Include="..\cups\libs\cups\backend.h" />
+ <ClInclude Include="..\cups\libs\cups\cups.h" />
+ <ClInclude Include="..\cups\libs\cups\debug.h" />
+ <ClInclude Include="..\cups\libs\cups\dir.h" />
+ <ClInclude Include="..\cups\libs\cups\file-private.h" />
+ <ClInclude Include="..\cups\libs\cups\file.h" />
+ <ClInclude Include="..\cups\libs\cups\globals.h" />
+ <ClInclude Include="..\cups\libs\cups\http-private.h" />
+ <ClInclude Include="..\cups\libs\cups\http.h" />
+ <ClInclude Include="..\cups\libs\cups\i18n.h" />
+ <ClInclude Include="..\cups\libs\cups\ipp-private.h" />
+ <ClInclude Include="..\cups\libs\cups\ipp.h" />
+ <ClInclude Include="..\cups\libs\cups\language.h" />
+ <ClInclude Include="..\cups\libs\cups\md5-apple.h" />
+ <ClInclude Include="..\cups\libs\cups\md5.h" />
+ <ClInclude Include="..\cups\libs\cups\ppd-private.h" />
+ <ClInclude Include="..\cups\libs\cups\ppd.h" />
+ <ClInclude Include="..\cups\libs\cups\pwg-private.h" />
+ <ClInclude Include="..\cups\libs\cups\raster.h" />
+ <ClInclude Include="..\cups\libs\cups\sidechannel.h" />
+ <ClInclude Include="..\cups\libs\cups\snmp-private.h" />
+ <ClInclude Include="..\cups\libs\cups\string.h" />
+ <ClInclude Include="..\cups\libs\cups\transcode.h" />
+ <ClInclude Include="..\cups\libs\cups\versioning.h" />
+ <ClInclude Include="..\cups\libs\filter\common.h" />
+ <ClInclude Include="..\cups\libs\filter\image-private.h" />
+ <ClInclude Include="..\cups\libs\filter\image-sgi.h" />
+ <ClInclude Include="..\cups\libs\filter\image.h" />
+ <ClInclude Include="..\devices\gdev8bcm.h" />
+ <ClInclude Include="..\devices\gdevbjc.h" />
+ <ClInclude Include="..\devices\gdevbjcl.h" />
+ <ClInclude Include="..\devices\gdevbmp.h" />
+ <ClInclude Include="..\devices\gdevdljm.h" />
+ <ClInclude Include="..\devices\gdevdsp.h" />
+ <ClInclude Include="..\devices\gdevdsp2.h" />
+ <ClInclude Include="..\devices\gdevfax.h" />
+ <ClInclude Include="..\devices\gdevmeds.h" />
+ <ClInclude Include="..\devices\gdevmgr.h" />
+ <ClInclude Include="..\devices\gdevpcl.h" />
+ <ClInclude Include="..\devices\gdevplib.h" />
+ <ClInclude Include="..\devices\gdevpm.h" />
+ <ClInclude Include="..\devices\gdevprna.h" />
+ <ClInclude Include="..\devices\gdevpsd.h" />
+ <ClInclude Include="..\devices\gdevpxut.h" />
+ <ClInclude Include="..\devices\gdevstc.h" />
+ <ClInclude Include="..\devices\gdevtfax.h" />
+ <ClInclude Include="..\devices\gdevtifs.h" />
+ <ClInclude Include="..\devices\gdevx.h" />
+ <ClInclude Include="..\devices\gdevxcmp.h" />
+ <ClInclude Include="..\devices\gxfcopy.h" />
+ <ClInclude Include="..\devices\minftrsz.h" />
+ <ClInclude Include="..\devices\rinkj\evenbetter-rll.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-byte-stream.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-config.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-device.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-dither.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-epson870.h" />
+ <ClInclude Include="..\devices\rinkj\rinkj-screen-eb.h" />
+ <ClInclude Include="..\devices\vector\gdevagl.h" />
+ <ClInclude Include="..\devices\vector\gdevpdfb.h" />
+ <ClInclude Include="..\devices\vector\gdevpdfc.h" />
+ <ClInclude Include="..\devices\vector\gdevpdfg.h" />
+ <ClInclude Include="..\devices\vector\gdevpdfo.h" />
+ <ClInclude Include="..\devices\vector\gdevpdfx.h" />
+ <ClInclude Include="..\devices\vector\gdevpdt.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtb.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtd.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtf.h" />
+ <ClInclude Include="..\devices\vector\gdevpdti.h" />
+ <ClInclude Include="..\devices\vector\gdevpdts.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtt.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtv.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtw.h" />
+ <ClInclude Include="..\devices\vector\gdevpdtx.h" />
+ <ClInclude Include="..\devices\vector\gdevpsdf.h" />
+ <ClInclude Include="..\devices\vector\gdevpsds.h" />
+ <ClInclude Include="..\devices\vector\gdevpsf.h" />
+ <ClInclude Include="..\devices\vector\gdevpsu.h" />
+ <ClInclude Include="..\devices\vector\whitelst.h" />
+ <ClInclude Include="..\expat\lib\amigaconfig.h" />
+ <ClInclude Include="..\expat\lib\ascii.h" />
+ <ClInclude Include="..\expat\lib\asciitab.h" />
+ <ClInclude Include="..\expat\lib\expat.h" />
+ <ClInclude Include="..\expat\lib\expat_external.h" />
+ <ClInclude Include="..\expat\lib\iasciitab.h" />
+ <ClInclude Include="..\expat\lib\internal.h" />
+ <ClInclude Include="..\expat\lib\latin1tab.h" />
+ <ClInclude Include="..\expat\lib\macconfig.h" />
+ <ClInclude Include="..\expat\lib\nametab.h" />
+ <ClInclude Include="..\expat\lib\utf8tab.h" />
+ <ClInclude Include="..\expat\lib\winconfig.h" />
+ <ClInclude Include="..\expat\lib\xmlrole.h" />
+ <ClInclude Include="..\expat\lib\xmltok.h" />
+ <ClInclude Include="..\expat\lib\xmltok_impl.h" />
+ <ClInclude Include="..\expat\tests\chardata.h" />
+ <ClInclude Include="..\expat\tests\minicheck.h" />
+ <ClInclude Include="..\ijs\ijs.h" />
+ <ClInclude Include="..\ijs\ijs_client.h" />
+ <ClInclude Include="..\ijs\ijs_server.h" />
+ <ClInclude Include="..\ijs\unistd_.h" />
+ <ClInclude Include="..\jbig2dec\config.h" />
+ <ClInclude Include="..\jbig2dec\config_types.h" />
+ <ClInclude Include="..\jbig2dec\config_win32.h" />
+ <ClInclude Include="..\jbig2dec\getopt.h" />
+ <ClInclude Include="..\jbig2dec\jbig2.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_arith.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_arith_iaid.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_arith_int.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_generic.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_huffman.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_hufftab.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_image.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_mmr.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_priv.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_symbol_dict.h" />
+ <ClInclude Include="..\jbig2dec\jbig2_text.h" />
+ <ClInclude Include="..\jbig2dec\os_types.h" />
+ <ClInclude Include="..\jbig2dec\sha1.h" />
+ <ClInclude Include="..\jpegxr\app_resource.h" />
+ <ClInclude Include="..\jpegxr\dll_resource.h" />
+ <ClInclude Include="..\jpegxr\file.h" />
+ <ClInclude Include="..\jpegxr\jpegxr.h" />
+ <ClInclude Include="..\jpegxr\jxr_priv.h" />
+ <ClInclude Include="..\jpegxr\qp.tab.h" />
+ <ClInclude Include="..\jpegxr\stdint_minimal.h" />
+ <ClInclude Include="..\jpeg\cderror.h" />
+ <ClInclude Include="..\jpeg\cdjpeg.h" />
+ <ClInclude Include="..\jpeg\jchuff.h" />
+ <ClInclude Include="..\jpeg\jdct.h" />
+ <ClInclude Include="..\jpeg\jdhuff.h" />
+ <ClInclude Include="..\jpeg\jerror.h" />
+ <ClInclude Include="..\jpeg\jinclude.h" />
+ <ClInclude Include="..\jpeg\jmemsys.h" />
+ <ClInclude Include="..\jpeg\jmorecfg.h" />
+ <ClInclude Include="..\jpeg\jpegint.h" />
+ <ClInclude Include="..\jpeg\jpeglib.h" />
+ <ClInclude Include="..\jpeg\jversion.h" />
+ <ClInclude Include="..\jpeg\transupp.h" />
+ <ClInclude Include="..\lcms2mt\include\lcms2mt.h" />
+ <ClInclude Include="..\lcms2mt\include\lcms2mt_plugin.h" />
+ <ClInclude Include="..\lcms2mt\src\extra_xform.h" />
+ <ClInclude Include="..\lcms2mt\src\lcms2_internal.h" />
+ <ClInclude Include="..\libpng\png.h" />
+ <ClInclude Include="..\libpng\pngconf.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\bio.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\cidx_manager.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\cio.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\dwt.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\event.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\fix.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\function_list.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\image.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\indexbox_manager.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\int.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\invert.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\j2k.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\j2k_lib.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\jp2.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\jpt.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\mct.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\mqc.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\openjpeg.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_clock.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_config.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_config_private.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_includes.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_intmath.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_inttypes.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_malloc.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_stdint.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\pi.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t1.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t1_luts.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t2.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tcd.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tgt.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\thread.h" />
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tls_keys.h" />
+ <ClInclude Include="..\psi\bfont.h" />
+ <ClInclude Include="..\psi\btoken.h" />
+ <ClInclude Include="..\psi\dscparse.h" />
+ <ClInclude Include="..\psi\dstack.h" />
+ <ClInclude Include="..\psi\dwdll.h" />
+ <ClInclude Include="..\psi\dwimg.h" />
+ <ClInclude Include="..\psi\dwinst.h" />
+ <ClInclude Include="..\psi\dwreg.h" />
+ <ClInclude Include="..\psi\dwres.h" />
+ <ClInclude Include="..\psi\dwsetup.h" />
+ <ClInclude Include="..\psi\dwtext.h" />
+ <ClInclude Include="..\psi\dwtrace.h" />
+ <ClInclude Include="..\psi\dwuninst.h" />
+ <ClInclude Include="..\psi\estack.h" />
+ <ClInclude Include="..\psi\files.h" />
+ <ClInclude Include="..\psi\ghost.h" />
+ <ClInclude Include="..\psi\ialloc.h" />
+ <ClInclude Include="..\psi\iapi.h" />
+ <ClInclude Include="..\psi\iastate.h" />
+ <ClInclude Include="..\psi\iastruct.h" />
+ <ClInclude Include="..\psi\ibnum.h" />
+ <ClInclude Include="..\psi\ichar.h" />
+ <ClInclude Include="..\psi\ichar1.h" />
+ <ClInclude Include="..\psi\icharout.h" />
+ <ClInclude Include="..\psi\icid.h" />
+ <ClInclude Include="..\psi\icie.h" />
+ <ClInclude Include="..\psi\icolor.h" />
+ <ClInclude Include="..\psi\iconf.h" />
+ <ClInclude Include="..\psi\icontext.h" />
+ <ClInclude Include="..\psi\icremap.h" />
+ <ClInclude Include="..\psi\icsmap.h" />
+ <ClInclude Include="..\psi\icstate.h" />
+ <ClInclude Include="..\psi\iddict.h" />
+ <ClInclude Include="..\psi\iddstack.h" />
+ <ClInclude Include="..\psi\idebug.h" />
+ <ClInclude Include="..\psi\idict.h" />
+ <ClInclude Include="..\psi\idictdef.h" />
+ <ClInclude Include="..\psi\idicttpl.h" />
+ <ClInclude Include="..\psi\idisp.h" />
+ <ClInclude Include="..\psi\idosave.h" />
+ <ClInclude Include="..\psi\idparam.h" />
+ <ClInclude Include="..\psi\idsdata.h" />
+ <ClInclude Include="..\psi\idstack.h" />
+ <ClInclude Include="..\psi\ierrors.h" />
+ <ClInclude Include="..\psi\iesdata.h" />
+ <ClInclude Include="..\psi\iestack.h" />
+ <ClInclude Include="..\psi\ifapi.h" />
+ <ClInclude Include="..\psi\ifcid.h" />
+ <ClInclude Include="..\psi\ifilter.h" />
+ <ClInclude Include="..\psi\ifilter2.h" />
+ <ClInclude Include="..\psi\ifont.h" />
+ <ClInclude Include="..\psi\ifont1.h" />
+ <ClInclude Include="..\psi\ifont2.h" />
+ <ClInclude Include="..\psi\ifont42.h" />
+ <ClInclude Include="..\psi\ifrpred.h" />
+ <ClInclude Include="..\psi\ifunc.h" />
+ <ClInclude Include="..\psi\ifwpred.h" />
+ <ClInclude Include="..\psi\igc.h" />
+ <ClInclude Include="..\psi\igcstr.h" />
+ <ClInclude Include="..\psi\igstate.h" />
+ <ClInclude Include="..\psi\iht.h" />
+ <ClInclude Include="..\psi\iimage.h" />
+ <ClInclude Include="..\psi\iinit.h" />
+ <ClInclude Include="..\psi\ilevel.h" />
+ <ClInclude Include="..\psi\imain.h" />
+ <ClInclude Include="..\psi\imainarg.h" />
+ <ClInclude Include="..\psi\imemory.h" />
+ <ClInclude Include="..\psi\iminst.h" />
+ <ClInclude Include="..\psi\iname.h" />
+ <ClInclude Include="..\psi\inamedef.h" />
+ <ClInclude Include="..\psi\inameidx.h" />
+ <ClInclude Include="..\psi\inames.h" />
+ <ClInclude Include="..\psi\inamestr.h" />
+ <ClInclude Include="..\psi\interp.h" />
+ <ClInclude Include="..\psi\iosdata.h" />
+ <ClInclude Include="..\psi\iostack.h" />
+ <ClInclude Include="..\psi\ipacked.h" />
+ <ClInclude Include="..\psi\iparam.h" />
+ <ClInclude Include="..\psi\iparray.h" />
+ <ClInclude Include="..\psi\ipcolor.h" />
+ <ClInclude Include="..\psi\iplugin.h" />
+ <ClInclude Include="..\psi\iref.h" />
+ <ClInclude Include="..\psi\isave.h" />
+ <ClInclude Include="..\psi\iscan.h" />
+ <ClInclude Include="..\psi\iscanbin.h" />
+ <ClInclude Include="..\psi\iscannum.h" />
+ <ClInclude Include="..\psi\isdata.h" />
+ <ClInclude Include="..\psi\isstate.h" />
+ <ClInclude Include="..\psi\istack.h" />
+ <ClInclude Include="..\psi\istkparm.h" />
+ <ClInclude Include="..\psi\istream.h" />
+ <ClInclude Include="..\psi\istruct.h" />
+ <ClInclude Include="..\psi\itoken.h" />
+ <ClInclude Include="..\psi\iutil.h" />
+ <ClInclude Include="..\psi\iutil2.h" />
+ <ClInclude Include="..\psi\ivmem2.h" />
+ <ClInclude Include="..\psi\ivmspace.h" />
+ <ClInclude Include="..\psi\main.h" />
+ <ClInclude Include="..\psi\oparc.h" />
+ <ClInclude Include="..\psi\opcheck.h" />
+ <ClInclude Include="..\psi\opdef.h" />
+ <ClInclude Include="..\psi\oper.h" />
+ <ClInclude Include="..\psi\opextern.h" />
+ <ClInclude Include="..\psi\ostack.h" />
+ <ClInclude Include="..\psi\psapi.h" />
+ <ClInclude Include="..\psi\store.h" />
+ <ClInclude Include="..\psi\wrfont.h" />
+ <ClInclude Include="..\psi\write_t1.h" />
+ <ClInclude Include="..\psi\write_t2.h" />
+ <ClInclude Include="..\psi\zchar42.h" />
+ <ClInclude Include="..\psi\zcie.h" />
+ <ClInclude Include="..\psi\zcolor.h" />
+ <ClInclude Include="..\psi\zfile.h" />
+ <ClInclude Include="..\psi\zfrsd.h" />
+ <ClInclude Include="..\psi\zfunc.h" />
+ <ClInclude Include="..\psi\zht2.h" />
+ <ClInclude Include="..\psi\zicc.h" />
+ <ClInclude Include="..\tiff\libtiff\t4.h" />
+ <ClInclude Include="..\tiff\libtiff\tiff.h" />
+ <ClInclude Include="..\tiff\libtiff\tiffconf.vc.h" />
+ <ClInclude Include="..\tiff\libtiff\tiffconf.wince.h" />
+ <ClInclude Include="..\tiff\libtiff\tiffio.h" />
+ <ClInclude Include="..\tiff\libtiff\tiffio.hxx" />
+ <ClInclude Include="..\tiff\libtiff\tiffiop.h" />
+ <ClInclude Include="..\tiff\libtiff\tiffvers.h" />
+ <ClInclude Include="..\tiff\libtiff\tif_config.vc.h" />
+ <ClInclude Include="..\tiff\libtiff\tif_config.wince.h" />
+ <ClInclude Include="..\tiff\libtiff\tif_dir.h" />
+ <ClInclude Include="..\tiff\libtiff\tif_fax3.h" />
+ <ClInclude Include="..\tiff\libtiff\tif_predict.h" />
+ <ClInclude Include="..\tiff\libtiff\uvcode.h" />
+ <ClInclude Include="..\tiff\port\libport.h" />
+ <ClInclude Include="..\tiff\test\test_arrays.h" />
+ <ClInclude Include="..\tiff\tools\rasterfile.h" />
+ <ClInclude Include="..\urf\surfx.h" />
+ <ClInclude Include="..\zlib\crc32.h" />
+ <ClInclude Include="..\zlib\deflate.h" />
+ <ClInclude Include="..\zlib\gzguts.h" />
+ <ClInclude Include="..\zlib\inffast.h" />
+ <ClInclude Include="..\zlib\inffixed.h" />
+ <ClInclude Include="..\zlib\inflate.h" />
+ <ClInclude Include="..\zlib\inftrees.h" />
+ <ClInclude Include="..\zlib\trees.h" />
+ <ClInclude Include="..\zlib\zconf.h" />
+ <ClInclude Include="..\zlib\zlib.h" />
+ <ClInclude Include="..\zlib\zutil.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\base\gspmdrv.rc" />
+ <ResourceCompile Include="..\base\gswin.rc" />
+ <ResourceCompile Include="..\base\gswin32.rc" />
+ <ResourceCompile Include="..\psi\dwmain.rc" />
+ <ResourceCompile Include="..\psi\dwsetup.rc" />
+ <ResourceCompile Include="..\psi\dwuninst.rc" />
+ <ResourceCompile Include="..\psi\gsdll2.rc" />
+ <ResourceCompile Include="..\psi\gsdll32.rc" />
+ <ResourceCompile Include="..\psi\gsos2.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/windows/ghostscript.vcxproj.filters b/windows/ghostscript.vcxproj.filters
new file mode 100644
index 00000000..f4b89007
--- /dev/null
+++ b/windows/ghostscript.vcxproj.filters
@@ -0,0 +1,6988 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Resource">
+ <UniqueIdentifier>{66083040-b496-4d6f-9738-5dcf915f3bea}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\CMap">
+ <UniqueIdentifier>{0d11a205-32f8-4075-8cb4-aa8eaa7dccee}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\Init">
+ <UniqueIdentifier>{21ce7627-eedd-4904-a5c6-f61269c18601}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\ColorSpace">
+ <UniqueIdentifier>{f09ac9c7-811a-4f5c-912f-b661f4165ad6}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\Decoding">
+ <UniqueIdentifier>{0497ab4c-d88c-4b90-b64d-868d5d6c4a46}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\Encoding">
+ <UniqueIdentifier>{bd82a757-a576-4c4d-99f5-a89a71f15b9d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\Font">
+ <UniqueIdentifier>{886a6a11-6c2d-4e33-b169-37e903882476}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource\SubstCID">
+ <UniqueIdentifier>{4c0564f0-5bec-4483-ad82-5c6d4b52abde}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base">
+ <UniqueIdentifier>{ca716464-cc37-4d1b-a63a-018e1cea7847}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\rinkj">
+ <UniqueIdentifier>{0b25f2bf-1c3c-4389-957e-07d94829d203}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\gldevices">
+ <UniqueIdentifier>{53c97220-b138-4d65-911f-39706643e350}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\shading">
+ <UniqueIdentifier>{c25cbca1-37c4-44e6-a7a4-773919dfb6f8}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\transparency">
+ <UniqueIdentifier>{6dc92a3a-aa47-4286-be2d-66bb4801930a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\color">
+ <UniqueIdentifier>{07a66462-8ec3-4c03-99fb-45d93c2f4fba}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\color\icc">
+ <UniqueIdentifier>{3cb1c163-30b4-4105-b1ad-084cae0d5d93}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\image">
+ <UniqueIdentifier>{1d02b3a9-8993-47bb-8ad4-17899e6d4719}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base\clist">
+ <UniqueIdentifier>{42c19fb2-ce18-4bb1-bbdf-9b659e3ffe45}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base %28.h%29">
+ <UniqueIdentifier>{f0d9ce31-8ee2-4af7-8710-75fe4b3a63b8}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base %28.h%29\gldevices %28.h%29">
+ <UniqueIdentifier>{6771c9a1-9e13-445b-8db1-d263b5544aac}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base %28.h%29\icc %28.h%29">
+ <UniqueIdentifier>{43377814-6fcc-41f1-b3db-f2322a75292b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="base %28.rc%29">
+ <UniqueIdentifier>{0265f7b0-a643-48f5-98ff-e72d45be6b0b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib">
+ <UniqueIdentifier>{b6e59d02-a8bf-43c4-acfe-54a34160dfa9}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\eplaser">
+ <UniqueIdentifier>{89854c66-44d7-4f94-8578-9eabe22dc3c7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\japanese">
+ <UniqueIdentifier>{89a33292-5f2b-4864-9386-298840afc9c7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\lips4">
+ <UniqueIdentifier>{309e26dc-4546-487e-871f-6c06d83e439b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\opvp">
+ <UniqueIdentifier>{192c550b-f1d5-45b5-84dc-7fbcb0112a31}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\pscolor">
+ <UniqueIdentifier>{8b0f4c6b-6e74-486c-9e3c-3b492f001d18}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\pcl3">
+ <UniqueIdentifier>{aeffa821-37d9-42b3-848f-6cf5e03defc0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\pcl3\eprn">
+ <UniqueIdentifier>{2453350f-f27e-40ce-ac02-dbd75dda0827}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="contrib\pcl3\src">
+ <UniqueIdentifier>{bbbccc2f-f2b7-4b68-b0c0-b4c2daf45d9a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="cups">
+ <UniqueIdentifier>{90557f3e-8eed-4d9a-b261-e3abff096171}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="cups\libs">
+ <UniqueIdentifier>{2dc11741-6e62-4682-bce3-e07a58bd8147}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="cups\libs\cups">
+ <UniqueIdentifier>{86106523-02fd-4d95-87d0-dc0bf887cb39}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="cups\libs\filter">
+ <UniqueIdentifier>{75096210-8722-46fb-8288-a8ca0695b452}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices">
+ <UniqueIdentifier>{b99b080d-77f9-4421-8ccc-7c8cc6f6bb94}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices\vector">
+ <UniqueIdentifier>{31ae4fa3-a4af-4555-a8de-e6c27a4aba4a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices\rinkj">
+ <UniqueIdentifier>{9c5ae408-c3fa-4646-a3c8-3d7368f2b94f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices %28.h%29">
+ <UniqueIdentifier>{820fecbb-46a4-4a46-8979-cd15794681a4}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices %28.h%29\vector %28.h%29">
+ <UniqueIdentifier>{1e9b363c-13f3-4a18-9698-5bd1d2ac49b9}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="devices %28.h%29\rinkj %28.h%29">
+ <UniqueIdentifier>{04e182ed-7b62-49ba-af24-90976e3b47f1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="doc">
+ <UniqueIdentifier>{ea416532-605d-48bf-8c77-66ea71921aad}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="expat">
+ <UniqueIdentifier>{9686f3e5-415f-4011-8402-811144f936ee}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="expat\tests">
+ <UniqueIdentifier>{e9b89fc0-f99d-47e8-a4bd-93ece05bd88d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="expat\tests\benchmark">
+ <UniqueIdentifier>{8a0514ca-c65f-4ac0-90d4-b9f61aa7f448}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="ijs">
+ <UniqueIdentifier>{3f8d4341-d923-4d6c-a4fa-8c56f63b1ff9}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="jbig2dec">
+ <UniqueIdentifier>{bb17a471-34a0-48be-bf37-88cc7859a6ca}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="jpeg">
+ <UniqueIdentifier>{b1c7dc2b-8799-4b90-b458-fd1f0cdd2e95}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="lcms2mt">
+ <UniqueIdentifier>{5905e8cd-0dba-4c3f-b48d-fa5db3d04233}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libpng">
+ <UniqueIdentifier>{742baa60-39ab-45f4-a673-c68fb47f9229}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="openjpeg/libopenjpeg">
+ <UniqueIdentifier>{21cb3d02-ad8f-48b2-8b88-5fc0c747c8d2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="psi">
+ <UniqueIdentifier>{08075552-f133-4daf-9886-23e25919b8f4}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="psi %28.h%29">
+ <UniqueIdentifier>{2da6a2a4-638f-4811-b564-b90eb9a238b5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="psi %28.rc%29">
+ <UniqueIdentifier>{ade37e42-7108-48b3-9315-3fedad82f01c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tiff">
+ <UniqueIdentifier>{af3fe7ae-4cd0-463e-8ab7-63186f1f6c3f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tiff\libtiff">
+ <UniqueIdentifier>{4ae7a3a1-05fd-433b-87b8-e38aa2a44e25}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tiff\tools">
+ <UniqueIdentifier>{e19910be-f17b-4801-a76e-1356cc79317f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tiff\test">
+ <UniqueIdentifier>{c21494ee-3f68-44fa-b970-8d4145ecb5f8}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tiff\port">
+ <UniqueIdentifier>{f1635490-14d7-45c4-8c4d-f1de711da2c2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="zlib">
+ <UniqueIdentifier>{e60925d3-8d1d-42d0-9ac6-77a0caa70abf}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="jpegxr">
+ <UniqueIdentifier>{9896a4c2-878b-43a1-b504-c29a4624445a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="urf">
+ <UniqueIdentifier>{a420d4f4-ac35-48c1-b997-8004f7ae79d7}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\Resource\CMap\78-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78ms-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\78ms-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\83pv-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90ms-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90ms-RKSJ-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90ms-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90msp-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90msp-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90pv-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90pv-RKSJ-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90pv-RKSJ-UCS2C">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\90pv-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Add-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Add-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Add-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Add-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-0">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-1">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-3">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-4">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-5">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-6">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-B5pc">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-ETenms-B5">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-CID">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-Host">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-H-Mac">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-CNS1-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-0">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-1">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-3">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-4">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-5">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-GBK-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-GBpc-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-H-CID">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-H-Host">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-H-Mac">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-GB1-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-0">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-1">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-3">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-4">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-5">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-6">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-90ms-RKSJ">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-90pv-RKSJ">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-CID">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-Host">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-H-Mac">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-PS-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-PS-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan1-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Japan2-0">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-0">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-1">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-CID">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-Host">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-H-Mac">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-KSCms-UHC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-KSCpc-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Adobe-Korea1-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5pc-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5pc-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5pc-UCS2C">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\B5pc-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS01-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS02-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS03-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS04-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS05-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS06-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS07-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS1-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS1-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS15-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\CNS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETen-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETen-B5-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETen-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETenms-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETenms-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETHK-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\ETHK-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Ext-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Ext-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Ext-RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Ext-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GB-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GB-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GB-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GB-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GB-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBK-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBK-EUC-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBK-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBK2K-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBK2K-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBKp-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBKp-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBpc-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBpc-EUC-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBpc-EUC-UCS2C">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBpc-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBT-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBT-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBT-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBT-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBT-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBTpc-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\GBTpc-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hankaku">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hiragana">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HK-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKdla-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKdla-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKdlb-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKdlb-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKgccs-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKgccs-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKm314-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKm314-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKm471-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKm471-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKscs-B5-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\HKscs-B5-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hojo-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hojo-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hojo-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hojo-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Hojo-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Identity-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Identity-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Identity-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Identity-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Katakana">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-Johab-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-Johab-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSC2-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCms-UHC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCms-UHC-HW-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCms-UHC-HW-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCms-UHC-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCms-UHC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCpc-EUC-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCpc-EUC-UCS2">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCpc-EUC-UCS2C">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\KSCpc-EUC-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\NWP-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\NWP-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\RKSJ-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\Roman">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\TCVN-RKSJ-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-90ms-RKSJ">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-90pv-RKSJ">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-B5pc">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-ETen-B5">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-GBK-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-GBpc-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-KSCms-UHC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UCS2-KSCpc-EUC">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UCS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniCNS-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UCS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniGB-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UCS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniHojo-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UCS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UCS2-HW-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UCS2-HW-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJIS2004-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISPro-UCS2-HW-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISPro-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISPro-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISX0213-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISX0213-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISX02132004-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniJISX02132004-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UCS2-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UCS2-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF16-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF16-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF32-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF32-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF8-H">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\UniKS-UTF8-V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\V">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\CMap\WP-Symbol">
+ <Filter>Resource\CMap</Filter>
+ </None>
+ <None Include="..\Resource\Init\cidfmap">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\FCOfontmap-PCLPS2">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\Fontmap">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\Fontmap.GS">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_agl.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_btokn.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cet.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cff.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cidcm.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_ciddc.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cidfm.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cidfn.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cidtt.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cmap.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_cspace.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_css_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_dbt_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_diskf.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_diskn.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_dps1.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_dps2.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_dscp.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_epsf.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_fapi.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_fntem.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_fonts.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_frsd.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_icc.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_il1_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_img.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_init.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_lev2.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_ll3.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_mex_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_mgl_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_mro_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_pdf_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_pdfwr.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_res.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_resmp.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_setpd.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_statd.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_std_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_sym_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_trap.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_ttf.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_typ32.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_typ42.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_type1.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\gs_wan_e.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_base.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_cslayer.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_draw.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_font.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_main.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_ops.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_rbld.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\pdf_sec.ps">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\Init\xlatmap">
+ <Filter>Resource\Init</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\DefaultCMYK">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\DefaultGray">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\DefaultRGB">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\sGray">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\sRGB">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\ColorSpace\TrivialCMYK">
+ <Filter>Resource\ColorSpace</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\FCO_Dingbats">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\FCO_Symbol">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\FCO_Unicode">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\FCO_Wingdings">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\Latin1">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\StandardEncoding">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Decoding\Unicode">
+ <Filter>Resource\Decoding</Filter>
+ </None>
+ <None Include="..\Resource\Encoding\Wingdings">
+ <Filter>Resource\Encoding</Filter>
+ </None>
+ <None Include="..\Resource\Font\CenturySchL-Bold">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\CenturySchL-BoldItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\CenturySchL-Ital">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\CenturySchL-Roma">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\Dingbats">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusMonL-Bold">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusMonL-BoldObli">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusMonL-Regu">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusMonL-ReguObli">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusRomNo9L-Medi">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusRomNo9L-MediItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusRomNo9L-Regu">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusRomNo9L-ReguItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-Bold">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-BoldCond">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-BoldCondItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-BoldItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-Regu">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-ReguCond">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-ReguCondItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\NimbusSanL-ReguItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\StandardSymL">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWBookmanL-DemiBold">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWBookmanL-DemiBoldItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWBookmanL-Ligh">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWBookmanL-LighItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWChanceryL-MediItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWGothicL-Book">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWGothicL-BookObli">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWGothicL-Demi">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWGothicL-DemiObli">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWPalladioL-Bold">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWPalladioL-BoldItal">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWPalladioL-Ital">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\Font\URWPalladioL-Roma">
+ <Filter>Resource\Font</Filter>
+ </None>
+ <None Include="..\Resource\SubstCID\CNS1-WMode">
+ <Filter>Resource\SubstCID</Filter>
+ </None>
+ <None Include="..\Resource\SubstCID\GB1-WMode">
+ <Filter>Resource\SubstCID</Filter>
+ </None>
+ <None Include="..\Resource\SubstCID\Japan1-WMode">
+ <Filter>Resource\SubstCID</Filter>
+ </None>
+ <None Include="..\Resource\SubstCID\Korea1-WMode">
+ <Filter>Resource\SubstCID</Filter>
+ </None>
+ <None Include="..\devices\vector\opdfread.ps">
+ <Filter>devices\vector</Filter>
+ </None>
+ <None Include="..\doc\API.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\AUTHORS">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\C-style.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Changes.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Commprod.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\COPYING">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Deprecated.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Details.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Details8.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Details9.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Develop.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Devices.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\DLL.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Drivers.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Fonts.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\gs.css">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\GS9_Color_Management.tex">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Helpers.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Hershey.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History1.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History2.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History3.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History4.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History5.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History6.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History7.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History8.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\History9.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\index.html">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Install.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Issues.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Language.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Lib.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Make.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\News.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Projects.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Ps-style.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Ps2epsi.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Ps2pdf.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Ps2ps2.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\pscet_status.txt">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Psfiles.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Readme.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Release.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Source.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Unix-lpr.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Use.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\doc\Xfonts.htm">
+ <Filter>doc</Filter>
+ </None>
+ <None Include="..\jpeg\jmemdosa.asm">
+ <Filter>jpeg</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\base\aes.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\bench.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\bobbin.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\claptrap-init.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\claptrap-planar.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\claptrap.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\echogs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ets.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\fapi_ft.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\fapibstm.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\fapiufst.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gconf.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevepo.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmplt.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevsclass.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\genarch.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\genconf.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gendev.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\genht.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_dosfe.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_dosfs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_dvx.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_getnv.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_iwatc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mac.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_macio.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_macpoll.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mktmp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_msdll.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_msdos.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mshdl.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mslib.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mspol.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_msprn.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_mswin.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_nsync.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_ntfs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_os2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_os2fs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_os2pr.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_os9.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_paper.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_psync.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_stdia.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_stdin.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_strdl.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_unifn.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_unifs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_unix.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_unix_cache.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_upapr.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_vms.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_wgetv.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_win32.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_winfs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_winfs2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_wpapr.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_wsync.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gp_wutf8.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gpmisc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsalloc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsalpha.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsalphac.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsargs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsbitcom.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsbitops.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsbittab.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscdef.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscedata.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscencs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gschar.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gschar0.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscicach.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsclipsr.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscoord.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscrdp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscrypt1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscssub.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsdevice.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsdevmem.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsdparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsdps1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsdsrc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfcid.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfcid2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfcmap.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfcmap1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsflip.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfname.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfont.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfont0.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfont0c.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfunc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfunc0.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfunc3.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsfunc4.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsgcache.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsgdata.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsgstate.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gshsb.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsht.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsht1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gshtscr.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gshtx.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsimpath.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsinit.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsiodev.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsiodevs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsiodisk.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsiomacres.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsioram.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsiorom.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsistate.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gslib.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gslibctx.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsline.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmalloc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmatrix.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmchunk.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmd5.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmemory.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmemret.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsmisc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsnogc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsnorop.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsnotify.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gspaint.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsparam2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsparams.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsparamx.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gspath.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gspath1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gspmdrv.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsromfs0.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsrop.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsroprun.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsroptab.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsserial.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsstate.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsstrl.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstext.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstiffio.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstrap.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstype1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstype2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstype42.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsutil.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxacpath.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxbcache.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxccache.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxccman.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxchar.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxchrout.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxcht.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclip.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclip2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclipm.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxcpath.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxdevndi.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxdhtserial.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxdownscale.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxfapi.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxfapiu.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxfcopy.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxfdrop.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxfill.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxhintn.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxhintn1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxhldevc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxht.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxhtbit.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxmclip.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxoprect.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpageq.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpaint.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpath.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpath2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpcopy.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpdash.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpdash2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpflat.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxsample.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxscanc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxstroke.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxsync.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxttfb.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxtype1.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gzspotan.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\jmemcust.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\memento.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\minftrsz.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\mkromfs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ramfs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sa85d.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\saes.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sarc4.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sbcp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sbhc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sbwbs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scantab.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfdgen.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfdtab.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfe.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfetab.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\scfparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sdcparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sdctc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sdctd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sdcte.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sddparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sdeparam.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\seexec.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sfilter2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sfxboth.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sfxcommon.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sfxfd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sfxstdio.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\shc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\shcgen.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sidscale.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\siinterp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\simscale.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\siscale.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\siscale_cal.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjbig2.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjbig2_luratech.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpegc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpegd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpege.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpx.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpx_luratech.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sjpx_openjpeg.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\slzwc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\slzwd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\slzwe.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\smd5.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\spdiff.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\spngp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\spprint.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\spsdf.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\spwgd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\srld.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\srle.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\sstring.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\stream.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\strmio.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\szlibc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\szlibd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\szlibe.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttcalc.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttfinp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttfmain.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttfmemd.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttinterp.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttload.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\ttobjs.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\vdtrace.c">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\evenbetter-rll.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-byte-stream.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-config.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-device.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-dither.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-epson870.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\rinkj\rinkj-screen-eb.c">
+ <Filter>base\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevabuf.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevbbox.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdbit.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdcrd.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevddrw.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdflt.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdgbr.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdrop.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdsha.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevemap.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevhit.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm1.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm16.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm2.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm24.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm32.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm4.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm40.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm48.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm56.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm64.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevm8.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmem.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmpla.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmr1.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmr2n.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmr8n.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmrun.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevmx.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevnfwd.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevpccm.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevpipe.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevplnx.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevppla.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevprn.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevrops.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevvec.c">
+ <Filter>base\gldevices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsshade.c">
+ <Filter>base\shading</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxshade.c">
+ <Filter>base\shading</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxshade1.c">
+ <Filter>base\shading</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxshade4.c">
+ <Filter>base\shading</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxshade6.c">
+ <Filter>base\shading</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevp14.c">
+ <Filter>base\transparency</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gstrans.c">
+ <Filter>base\transparency</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxblend.c">
+ <Filter>base\transparency</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxblend1.c">
+ <Filter>base\transparency</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevdevn.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscdevn.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscie.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsciemap.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscolor.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscolor1.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscolor2.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscolor3.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscpixel.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscrd.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscscie.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscsepr.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gscspace.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsequivc.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsovrc.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gspcolor.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsptype1.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsptype2.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxcmap.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxctable.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxdcconv.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxdcolor.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxp1fill.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxpcmap.c">
+ <Filter>base\color</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_cache.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_create.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_lcms2.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_lcms2mt.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_manage.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_monitorcm.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_nocm.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_profilecache.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsicc_replacecm.c">
+ <Filter>base\color\icc</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gsimage.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxht_thresh.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxi12bit.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxi16bit.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxicolor.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxidata.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxifast.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximag3x.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximage.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximage1.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximage3.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximage4.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximask.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximdecode.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gximono.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxino12b.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxino16b.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxipixel.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxiscale.c">
+ <Filter>base\image</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclbits.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclfile.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclimag.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclist.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxcllzw.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclmem.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclpage.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclpath.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclrast.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclread.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclrect.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclthrd.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclutil.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gxclzlib.c">
+ <Filter>base\clist</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevbjc_.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevbjca.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevcd8.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevdj9.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevgdi.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevhl12.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevln03.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevlx32.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevlx50.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevlx7.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevmd2k.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevop4w.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\gdevxes.c">
+ <Filter>contrib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\eplaser\gdevescv.c">
+ <Filter>contrib\eplaser</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\dviprlib.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdev10v.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevalps.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevdmpr.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevespg.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevfmlbp.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevfmpr.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevj100.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevlbp3.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevmag.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevmjc.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevml6.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevnpdl.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevp201.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\japanese\gdevrpdl.c">
+ <Filter>contrib\japanese</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\lips4\gdevl4r.c">
+ <Filter>contrib\lips4</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\lips4\gdevl4v.c">
+ <Filter>contrib\lips4</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\lips4\gdevlips.c">
+ <Filter>contrib\lips4</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\lips4\gdevlprn.c">
+ <Filter>contrib\lips4</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\opvp\gdevopvp.c">
+ <Filter>contrib\opvp</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pscolor\test.c">
+ <Filter>contrib\pscolor</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnfs.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnparm.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\eprnrend.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\gdeveprn.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\mediasize.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\eprn\pagecount.c">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\gdevpcl3.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pcl3opts.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pclcap.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pclcomp.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pclgen.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pclscan.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\contrib\pcl3\src\pclsize.c">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\gdevcups.c">
+ <Filter>cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\pdftoraster.c">
+ <Filter>cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\adminutil.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\array.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\attr.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\auth.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\backchannel.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\backend.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\conflicts.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\custom.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\debug.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\dest.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\dir.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\emit.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\encode.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\file.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\getdevices.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\getifaddrs.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\getputfile.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\globals.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\http-addr.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\http-addrlist.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\http-support.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\http.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\ipp-support.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\ipp.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\langprintf.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\language.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\localize.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\mark.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\md5.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\md5passwd.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\notify.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\options.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\page.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\ppd.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\pwg-file.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\pwg-media.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\pwg-ppd.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\request.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\sidechannel.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\snmp.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\snprintf.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\string.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\tempfile.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testadmin.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testarray.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testconflicts.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testcups.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testfile.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testhttp.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testi18n.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testipp.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testlang.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testoptions.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testppd.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testpwg.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\testsnmp.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\transcode.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\usersys.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\cups\util.c">
+ <Filter>cups\libs\cups</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\common.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\error.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-bmp.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-colorspace.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-gif.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-jpeg.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-photocd.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-pix.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-png.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-pnm.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-sgi.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-sgilib.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-sun.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-tiff.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image-zoom.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\image.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\interpret.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\cups\libs\filter\raster.c">
+ <Filter>cups\libs\filter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdev3852.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdev4081.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdev4693.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdev8510.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdev8bcm.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevatx.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbit.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbj10.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbjcl.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbmp.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbmpa.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevbmpc.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevccr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcdj.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcfax.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevchameleon.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcif.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevclj.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcljc.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcmykog.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevcslw.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdfax.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdjet.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdjtc.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdljm.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdm24.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevdsp.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevepsc.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevepsn.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevescp.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevfax.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevflp.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevfpng.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevhl7x.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevicov.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevifno.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevijs.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevimgn.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevjbig2.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevjpeg.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevjpx.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevl31s.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevlbp8.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevlp8k.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevlxm.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevmeds.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevmgr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevmiff.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevmsxf.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevn533.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevo182.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\gdevoflt.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevokii.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevp2up.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpbm.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpcfb.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpcl.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpcx.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpdfimg.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpe.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevperm.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevphex.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpjet.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevplan.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevplib.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpng.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevprna.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpsd.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpsim.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpxut.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevrinkj.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevsj48.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevsnfb.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevstc.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevstc1.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevstc2.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevstc3.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevstc4.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtfax.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtfnx.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtifs.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtknk.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtrac.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevtsep.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevupd.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevwddb.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevwpr2.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevx.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevxalt.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevxcf.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevxcmp.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevxini.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevxres.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gxfcopy.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\minftrsz.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevagl.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevlj56.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdf.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfb.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfc.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfd.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfe.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfg.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfi.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfj.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfk.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfm.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfo.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfp.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfr.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdft.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfu.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdfv.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdt.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtb.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtc.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtd.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdte.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtf.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdti.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdts.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtt.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtv.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpdtw.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevps.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsdi.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsdp.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsds.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsdu.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsf1.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsf2.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsfm.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsft.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsfu.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsfx.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpsu.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevpx.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevsvg.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevtxtw.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\gdevxps.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\vector\whitelst.c">
+ <Filter>devices\vector</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\evenbetter-rll.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-byte-stream.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-config.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-device.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-dither.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-epson870.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\rinkj\rinkj-screen-eb.c">
+ <Filter>devices\rinkj</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\lib\xmlparse.c">
+ <Filter>expat</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\lib\xmlrole.c">
+ <Filter>expat</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\lib\xmltok.c">
+ <Filter>expat</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\lib\xmltok_impl.c">
+ <Filter>expat</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\lib\xmltok_ns.c">
+ <Filter>expat</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\tests\chardata.c">
+ <Filter>expat\tests</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\tests\minicheck.c">
+ <Filter>expat\tests</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\tests\runtests.c">
+ <Filter>expat\tests</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\tests\runtestspp.cpp">
+ <Filter>expat\tests</Filter>
+ </ClCompile>
+ <ClCompile Include="..\expat\tests\benchmark\benchmark.c">
+ <Filter>expat\tests\benchmark</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_client.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_client_example.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_exec_unix.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_exec_win.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_server.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ijs\ijs_server_example.c">
+ <Filter>ijs</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\getopt.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\getopt1.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_arith.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_arith_iaid.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_arith_int.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_generic.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_huffman.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_hufftab.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_image.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_image_pbm.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_image_png.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_mmr.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_page.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_refinement.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_segment.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_symbol_dict.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2_text.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\jbig2dec.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\memcmp.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\sha1.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jbig2dec\snprintf.c">
+ <Filter>jbig2dec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\ansi2knr.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\cdjpeg.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\cjpeg.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\ckconfig.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\djpeg.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\example.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcapimin.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcapistd.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jccoefct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jccolor.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcdctmgr.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jchuff.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcinit.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcmainct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcmarker.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcmaster.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcomapi.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcparam.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcphuff.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcprepct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jcsample.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jctrans.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdapimin.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdapistd.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdatadst.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdatasrc.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdcoefct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdcolor.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jddctmgr.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdhuff.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdinput.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdmainct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdmarker.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdmaster.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdmerge.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdphuff.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdpostct.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdsample.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jdtrans.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jerror.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jfdctflt.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jfdctfst.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jfdctint.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jidctflt.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jidctfst.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jidctint.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jidctred.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemansi.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemdos.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemmac.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemmgr.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemname.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jmemnobs.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jpegtran.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jquant1.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jquant2.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\jutils.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdbmp.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdcolmap.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdgif.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdjpgcom.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdppm.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdrle.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdswitch.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\rdtarga.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\transupp.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrbmp.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrgif.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrjpgcom.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrppm.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrrle.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpeg\wrtarga.c">
+ <Filter>jpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsalpha.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmscam02.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmscgats.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmscnvrt.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmserr.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsgamma.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsgmt.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmshalf.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsintrp.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsio0.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsio1.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmslut.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsmd5.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsmtrx.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsnamed.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsopt.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmspack.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmspcs.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsplugin.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsps2.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmssamp.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmssm.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmstypes.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsvirt.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmswtpnt.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\lcms2mt\src\cmsxform.c">
+ <Filter>lcms2mt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\example.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\png.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngerror.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pnggccrd.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngget.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngmem.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngpread.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngread.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngrio.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngrtran.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngrutil.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngset.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngtest.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngtrans.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngvcrd.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngwio.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngwrite.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngwtran.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\libpng\pngwutil.c">
+ <Filter>libpng</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\bio.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\cidx_manager.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\cio.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\dwt.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\event.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\function_list.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\image.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\invert.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\j2k.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\j2k_lib.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\jp2.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\jpt.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\mct.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\mqc.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\openjpeg.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\opj_clock.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\phix_manager.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\pi.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\ppix_manager.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t1.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t1_generate_luts.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\t2.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tcd.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tgt.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\thix_manager.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\thread.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\openjpeg\src\lib\openjp2\tpix_manager.c">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dmmain.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dpmain.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dscparse.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwdll.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwimg.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwinst.cpp">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwmain.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwmainc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwnodll.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwreg.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwsetup.cpp">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwtext.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwtrace.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dwuninst.cpp">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dxmain.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\dxmainc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\gs.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\gsdll.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\gserver.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ialloc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iapi.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ibnum.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iconf.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\icontext.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\idebug.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\idict.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\idisp.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\idparam.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\idstack.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\igc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\igcref.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\igcstr.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iinit.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ilocate.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\imain.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\imainarg.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iname.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\inobtokn.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\inouparm.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\interp.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iparam.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iplugin.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ireclaim.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\isave.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iscan.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iscanbin.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iscannum.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\istack.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iutil.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\iutil2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\psapi.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\sfilter1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\wrfont.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\write_t1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\write_t2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zalg.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zarith.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zarray.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zbfont.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zbseq.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcfont.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zchar.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zchar1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zchar2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zchar32.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zchar42.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcharout.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcharx.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcid.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcie.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcolor.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcolor1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcolor2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcolor3.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcontrol.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcrd.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcsindex.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcspixel.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zcssepr.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdevcal.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdevice.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdevice2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdict.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdouble.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdps1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zdscpars.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfaes.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfapi.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfarc4.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfbcp.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfcid.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfcid0.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfcid1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfcmap.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfdctd.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfdcte.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfdecode.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfile.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfile1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfileio.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfilter.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfilter2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfimscale.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfjbig2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfjpx.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfmd5.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont0.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont32.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfont42.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfontenum.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfproc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfrsd.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfsample.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfunc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfunc0.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfunc3.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfunc4.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zfzlib.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zgeneric.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zgstate.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zht.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zht1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zht2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zicc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zimage.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zimage3.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ziodev.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ziodev2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ziodevsc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmath.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmatrix.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmedia2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmisc.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmisc1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmisc2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zmisc3.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zncdummy.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpacked.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpaint.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpath.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpath1.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpcolor.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zpdfops.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zrelbit.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zshade.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zstack.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zstring.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zsysvm.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ztoken.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ztrans.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ztrap.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\ztype.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zupath.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zusparam.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zvmem.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\psi\zvmem2.c">
+ <Filter>psi</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\mkg3states.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_acorn.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_apple.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_atari.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_aux.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_close.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_codec.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_color.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_compress.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_dir.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_dirinfo.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_dirread.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_dirwrite.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_dumpmode.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_error.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_extension.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_fax3.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_fax3sm.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_flush.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_getimage.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_jbig.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_jpeg.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_luv.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_lzw.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_msdos.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_next.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_ojpeg.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_open.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_packbits.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_pixarlog.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_predict.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_print.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_read.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_stream.cxx">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_strip.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_swab.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_thunder.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_tile.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_unix.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_version.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_warning.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_win3.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_win32.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_write.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\libtiff\tif_zip.c">
+ <Filter>tiff\libtiff</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\bmp2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\fax2ps.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\fax2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\gif2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\pal2rgb.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\ppm2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\ras2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\raw2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\rgb2ycbcr.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\sgi2tiff.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\sgisv.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\thumbnail.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiff2bw.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiff2pdf.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiff2ps.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiff2rgba.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffcmp.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffcp.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffcrop.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffdither.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffdump.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffgt.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffinfo.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffmedian.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffset.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\tiffsplit.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\tools\ycbcr.c">
+ <Filter>tiff\tools</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\ascii_tag.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\check_tag.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\long_tag.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\short_tag.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\strip.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\strip_rw.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\test\test_arrays.c">
+ <Filter>tiff\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\port\dummy.c">
+ <Filter>tiff\port</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\port\getopt.c">
+ <Filter>tiff\port</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\port\lfind.c">
+ <Filter>tiff\port</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\port\strcasecmp.c">
+ <Filter>tiff\port</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tiff\port\strtoul.c">
+ <Filter>tiff\port</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\adler32.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\compress.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\crc32.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\deflate.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\gzclose.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\gzlib.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\gzread.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\gzwrite.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\infback.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\inffast.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\inflate.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\inftrees.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\trees.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\uncompr.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\zlib\zutil.c">
+ <Filter>zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\algo.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\api.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\cr_parse.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\cw_emit.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\dllmain.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\file.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\flags.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\init.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\io.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\jpegxr.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\jpegxr_pixelformat.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\qp.tab.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\qp_lexor.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\r_parse.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\r_strip.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\r_tile_frequency.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\r_tile_spatial.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\w_emit.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\w_strip.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\w_tile_frequency.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\w_tile_spatial.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\jpegxr\x_strip.c">
+ <Filter>jpegxr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\urf\gdevurf.c">
+ <Filter>urf</Filter>
+ </ClCompile>
+ <ClCompile Include="..\urf\surfd.c">
+ <Filter>urf</Filter>
+ </ClCompile>
+ <ClCompile Include="..\urf\urffilter.c">
+ <Filter>urf</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\base\aes.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\assert_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\bobbin.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\claptrap-impl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\claptrap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ctype_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\dirent_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\dos_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\errno_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ets.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ets_tm.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\fcntl_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gconf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdbflags.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdebug.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevflp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevmplt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevoflt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevsclass.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gen_ordered.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gp_mswin.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gp_os2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gpcheck.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gpgetenv.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gpmisc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gpsync.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gs_dll_call.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gs_mgl_e.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gs_mro_e.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsalloc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsalpha.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsalphac.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsargs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsbitmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsbitops.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsbittab.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsccode.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsccolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscdefs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscdevn.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscedata.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscencs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gschar.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscicach.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscie.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscindex.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsclipsr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscms.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscolor1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscolor2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscolor3.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscompt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscoord.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscpixel.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscpm.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscrd.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscrdp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscrypt1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscsel.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscsepr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscspace.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gscssub.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsdcolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsdevice.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsdll.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsdllwin.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsdsrc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsequivc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gserrors.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsexit.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfcmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsflip.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfname.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfont.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsform1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfunc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfunc0.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfunc3.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsfunc4.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsgc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsgcache.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsgdata.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsgstate.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gshsb.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsht.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsht1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gshtx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsimage.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsio.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsiorom.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsipar3x.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsiparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsiparm3.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsiparm4.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsjconf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsjmorec.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gslib.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gslibctx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsline.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gslparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmalloc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmatrix.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmchunk.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmd5.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmdebug.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmemory.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmemraw.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsmemret.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsnamecl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsncdummy.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsnogc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsnotify.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsovrc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspaint.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsparams.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsparamx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspath2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspcolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspenum.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gspmdrv.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsptype1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsptype2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsrect.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsrefct.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsrop.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsroprun1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsroprun24.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsroprun8.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsropt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsserial.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsshade.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsstate.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsstrl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsstruct.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsstype.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstext.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstiffio.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstrans.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstrap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstype1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gstypes.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsuid.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsutil.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsxfont.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxalloc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxalpha.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxarith.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxband.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxbcache.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxbitfmt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxbitmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxbitops.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxblend.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcdevn.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxchar.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxchrout.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcid.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcie.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcindex.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcldev.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclio.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclip.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclip2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclipm.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclipsr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclist.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclmem.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclpage.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxclthrd.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcolor2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcomp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcoord.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcspace.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxctable.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxcvalue.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdcconv.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdcolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdda.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevbuf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevcli.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevice.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevmem.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevrop.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdevsop.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdht.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdhtres.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdhtserial.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdither.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdownscale.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxdtfill.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfapi.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfapiu.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfarith.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfcache.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfcid.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfcmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfcmap1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfdrop.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfill.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfillsl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfilltr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfillts.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfixed.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfont.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfont0.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfont0c.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfont1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfont42.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfrac.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxftype.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxfunc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxgetbit.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxgstate.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxhintn.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxhldevc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxht.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxht_thresh.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxhttile.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxhttype.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxiclass.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gximag3x.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gximage.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gximage3.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gximask.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gximdecode.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxiodev.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxiparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxline.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxlum.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxmatrix.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxmclip.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxobj.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxoprect.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxp1impl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxpageq.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxpaint.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxpcache.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxpcolor.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxrplane.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxsample.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxsamplp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxscanc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxshade.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxshade4.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxstate.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxstdio.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxsync.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxtext.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxtmap.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxttf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxttfb.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxtype1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gxxfont.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzacpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzcpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzht.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzline.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzpath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzspotan.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gzstate.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\icc34.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\jerror_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\jmemcust.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\locale_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\malloc_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\math_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\memento.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\memory_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\pipe_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\png_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ramfs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sa85d.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sa85x.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\saes.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sarc4.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sbcp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sbhc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sbtx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sbwbs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\scanchar.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\scf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\scfx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\scommon.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sdcparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sdct.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\setjmp_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sfilter.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sha2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\shc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\shcgen.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sidscale.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\siinterp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\simscale.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\siscale.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sisparam.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sjbig2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sjbig2_luratech.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sjpeg.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sjpx_luratech.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sjpx_openjpeg.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\slzwx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\smd5.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\smtf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\spdiffx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\spngpx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\spprint.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\spsdf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\spwgx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\srdline.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\srlx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ssha2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\sstring.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stat_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\std.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stdint_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stdio_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stdpn.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stdpre.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\stream.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\strimpl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\string_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\strmio.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\szlibx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\szlibxx.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\time_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttcalc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttcommon.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttconf.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttconfig.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttfinp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttfmemd.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttfoutl.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttfsfnt.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttinterp.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttload.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttmisc.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\ttobjs.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\tttables.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\tttype.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\tttypes.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\unistd_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\valgrind.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\vdtrace.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\vms_x_fix.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\vmsmath.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\windows_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\wrfont.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\write_t1.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\write_t2.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\x_.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevbbox.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevdcrd.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevddrw.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevdevn.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevdevnprn.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevmem.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevmpla.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevmrop.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevmrun.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevp14.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevpccm.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevplnx.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevppla.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevprn.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevpxat.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevpxen.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevpxop.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gdevvec.h">
+ <Filter>base %28.h%29\gldevices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc_cache.h">
+ <Filter>base %28.h%29\icc %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc_cms.h">
+ <Filter>base %28.h%29\icc %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc_create.h">
+ <Filter>base %28.h%29\icc %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc_manage.h">
+ <Filter>base %28.h%29\icc %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\gsicc_profilecache.h">
+ <Filter>base %28.h%29\icc %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\defs.h">
+ <Filter>contrib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\gdevbjc_.h">
+ <Filter>contrib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\gdevcd8.h">
+ <Filter>contrib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\eplaser\gdevescv.h">
+ <Filter>contrib\eplaser</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\japanese\dviprlib.h">
+ <Filter>contrib\japanese</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\japanese\gdevmjc.h">
+ <Filter>contrib\japanese</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\lips4\gdevlips.h">
+ <Filter>contrib\lips4</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\lips4\gdevlprn.h">
+ <Filter>contrib\lips4</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\opvp\opvp.h">
+ <Filter>contrib\opvp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\opvp\opvp_0_2_0.h">
+ <Filter>contrib\opvp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\opvp\opvp_common.h">
+ <Filter>contrib\opvp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\eprn\gdeveprn.h">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\eprn\mediasize.h">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\eprn\pagecount.h">
+ <Filter>contrib\pcl3\eprn</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\src\pclcap.h">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\src\pclgen.h">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\src\pclscan.h">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClInclude>
+ <ClInclude Include="..\contrib\pcl3\src\pclsize.h">
+ <Filter>contrib\pcl3\src</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\configwin.h">
+ <Filter>cups\libs</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\adminutil.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\array.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\backend.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\cups.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\debug.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\dir.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\file-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\file.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\globals.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\http-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\http.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\i18n.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\ipp-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\ipp.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\language.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\md5-apple.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\md5.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\ppd-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\ppd.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\pwg-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\raster.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\sidechannel.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\snmp-private.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\string.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\transcode.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\cups\versioning.h">
+ <Filter>cups\libs\cups</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\filter\common.h">
+ <Filter>cups\libs\filter</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\filter\image-private.h">
+ <Filter>cups\libs\filter</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\filter\image-sgi.h">
+ <Filter>cups\libs\filter</Filter>
+ </ClInclude>
+ <ClInclude Include="..\cups\libs\filter\image.h">
+ <Filter>cups\libs\filter</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdev8bcm.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevbjc.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevbjcl.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevbmp.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevdljm.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevdsp.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevdsp2.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevfax.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevmeds.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevmgr.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpcl.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevplib.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpm.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevprna.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpsd.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpxut.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevstc.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevtfax.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevtifs.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevx.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevxcmp.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gxfcopy.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\minftrsz.h">
+ <Filter>devices %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevagl.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdfb.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdfc.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdfg.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdfo.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdfx.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdt.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtb.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtd.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtf.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdti.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdts.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtt.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtv.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtw.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpdtx.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpsdf.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpsds.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpsf.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\gdevpsu.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\vector\whitelst.h">
+ <Filter>devices %28.h%29\vector %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\evenbetter-rll.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-byte-stream.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-config.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-device.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-dither.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-epson870.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\rinkj\rinkj-screen-eb.h">
+ <Filter>devices %28.h%29\rinkj %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\amigaconfig.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\ascii.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\asciitab.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\expat.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\expat_external.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\iasciitab.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\internal.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\latin1tab.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\macconfig.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\nametab.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\utf8tab.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\winconfig.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\xmlrole.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\xmltok.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\lib\xmltok_impl.h">
+ <Filter>expat</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\tests\chardata.h">
+ <Filter>expat\tests</Filter>
+ </ClInclude>
+ <ClInclude Include="..\expat\tests\minicheck.h">
+ <Filter>expat\tests</Filter>
+ </ClInclude>
+ <ClInclude Include="..\ijs\ijs.h">
+ <Filter>ijs</Filter>
+ </ClInclude>
+ <ClInclude Include="..\ijs\ijs_client.h">
+ <Filter>ijs</Filter>
+ </ClInclude>
+ <ClInclude Include="..\ijs\ijs_server.h">
+ <Filter>ijs</Filter>
+ </ClInclude>
+ <ClInclude Include="..\ijs\unistd_.h">
+ <Filter>ijs</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\config.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\config_types.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\config_win32.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\getopt.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_arith.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_arith_iaid.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_arith_int.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_generic.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_huffman.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_hufftab.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_image.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_mmr.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_priv.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_symbol_dict.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\jbig2_text.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\os_types.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jbig2dec\sha1.h">
+ <Filter>jbig2dec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\cderror.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\cdjpeg.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jchuff.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jdct.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jdhuff.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jerror.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jinclude.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jmemsys.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jmorecfg.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jpegint.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jpeglib.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\jversion.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpeg\transupp.h">
+ <Filter>jpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\lcms2mt\src\extra_xform.h">
+ <Filter>lcms2mt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\lcms2mt\src\lcms2_internal.h">
+ <Filter>lcms2mt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\lcms2mt\include\lcms2mt.h">
+ <Filter>lcms2mt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\lcms2mt\include\lcms2mt_plugin.h">
+ <Filter>lcms2mt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\libpng\png.h">
+ <Filter>libpng</Filter>
+ </ClInclude>
+ <ClInclude Include="..\libpng\pngconf.h">
+ <Filter>libpng</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\bio.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\cidx_manager.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\cio.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\dwt.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\event.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\fix.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\function_list.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\image.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\indexbox_manager.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\int.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\invert.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\j2k.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\j2k_lib.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\jp2.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\jpt.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\mct.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\mqc.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\openjpeg.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_clock.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_config.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_config_private.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_includes.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_intmath.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_inttypes.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_malloc.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\opj_stdint.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\pi.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t1.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t1_luts.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\t2.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tcd.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tgt.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\thread.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\openjpeg\src\lib\openjp2\tls_keys.h">
+ <Filter>openjpeg/libopenjpeg</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\psapi.h">
+ <Filter>psi</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\bfont.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\btoken.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dscparse.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dstack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwdll.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwimg.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwinst.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwreg.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwres.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwsetup.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwtext.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwtrace.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\dwuninst.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\estack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\files.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ghost.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ialloc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iapi.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iastate.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iastruct.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ibnum.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ichar.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ichar1.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icharout.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icid.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icie.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icolor.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iconf.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icontext.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icremap.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icsmap.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\icstate.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iddict.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iddstack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idebug.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idict.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idictdef.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idicttpl.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idisp.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idosave.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idparam.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idsdata.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\idstack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ierrors.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iesdata.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iestack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifapi.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifcid.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifilter.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifilter2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifont.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifont1.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifont2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifont42.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifrpred.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifunc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ifwpred.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\igc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\igcstr.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\igstate.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iht.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iimage.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iinit.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ilevel.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\imain.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\imainarg.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\imemory.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iminst.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iname.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\inamedef.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\inameidx.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\inames.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\inamestr.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\interp.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iosdata.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iostack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ipacked.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iparam.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iparray.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ipcolor.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iplugin.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iref.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\isave.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iscan.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iscanbin.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iscannum.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\isdata.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\isstate.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\istack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\istkparm.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\istream.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\istruct.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\itoken.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iutil.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\iutil2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ivmem2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ivmspace.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\main.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\oparc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\opcheck.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\opdef.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\oper.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\opextern.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\ostack.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\store.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\wrfont.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\write_t1.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\write_t2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zchar42.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zcie.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zcolor.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zfile.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zfrsd.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zfunc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zht2.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\psi\zicc.h">
+ <Filter>psi %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\t4.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tif_config.vc.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tif_config.wince.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tif_dir.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tif_fax3.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tif_predict.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiff.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffconf.vc.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffconf.wince.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffio.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffio.hxx">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffiop.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\tiffvers.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\libtiff\uvcode.h">
+ <Filter>tiff\libtiff</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\tools\rasterfile.h">
+ <Filter>tiff\tools</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\test\test_arrays.h">
+ <Filter>tiff\test</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tiff\port\libport.h">
+ <Filter>tiff\port</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\crc32.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\deflate.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\gzguts.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\inffast.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\inffixed.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\inflate.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\inftrees.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\trees.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\zconf.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\zlib.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\zlib\zutil.h">
+ <Filter>zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\app_resource.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\dll_resource.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\file.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\jpegxr.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\jxr_priv.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\qp.tab.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\jpegxr\stdint_minimal.h">
+ <Filter>jpegxr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\urf\surfx.h">
+ <Filter>urf</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\base\gspmdrv.rc">
+ <Filter>base %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\base\gswin.rc">
+ <Filter>base %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\base\gswin32.rc">
+ <Filter>base %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\dwmain.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\dwsetup.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\dwuninst.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\gsdll2.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\gsdll32.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\psi\gsos2.rc">
+ <Filter>psi %28.rc%29</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/windows/ghostscript_rt.vcxproj b/windows/ghostscript_rt.vcxproj
index fca736b4..41a34437 100644
--- a/windows/ghostscript_rt.vcxproj
+++ b/windows/ghostscript_rt.vcxproj
@@ -1028,6 +1028,7 @@
<ClCompile Include="..\jbig2dec\jbig2_arith_int.c" />
<ClCompile Include="..\jbig2dec\jbig2_generic.c" />
<ClCompile Include="..\jbig2dec\jbig2_huffman.c" />
+ <ClCompile Include="..\jbig2dec\jbig2_hufftab.c" />
<ClCompile Include="..\jbig2dec\jbig2_image.c" />
<ClCompile Include="..\jbig2dec\jbig2_image_pbm.c" />
<ClCompile Include="..\jbig2dec\jbig2_image_png.c" />
diff --git a/windows/ghostxps.vcxproj b/windows/ghostxps.vcxproj
new file mode 100644
index 00000000..b85b325d
--- /dev/null
+++ b/windows/ghostxps.vcxproj
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-contrib|Win32">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-contrib|x64">
+ <Configuration>Debug-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|Win32">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-cups|x64">
+ <Configuration>Debug-cups</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|Win32">
+ <Configuration>DebugXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugXP|x64">
+ <Configuration>DebugXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|Win32">
+ <Configuration>MementoXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="MementoXP|x64">
+ <Configuration>MementoXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|Win32">
+ <Configuration>Memento</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Memento|x64">
+ <Configuration>Memento</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|Win32">
+ <Configuration>Profile</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Profile|x64">
+ <Configuration>Profile</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|Win32">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-contrib|x64">
+ <Configuration>Release-contrib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|Win32">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseXP|x64">
+ <Configuration>ReleaseXP</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{DE21942C-CDA2-445B-B2EC-51FF54E0F0DD}</ProjectGuid>
+ <RootNamespace>ghostscript</RootNamespace>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <PlatformToolset>v141_xp</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>16.0.29511.113</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>debugobj\</OutDir>
+ <IntDir>debugobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|Win32'">
+ <OutDir>debugobjxp\</OutDir>
+ <IntDir>debugobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugxpbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>debugobj64\</OutDir>
+ <IntDir>debugobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugXP|x64'">
+ <OutDir>debugobj64xp\</OutDir>
+ <IntDir>debugobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugxpbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>obj\</OutDir>
+ <IntDir>obj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">
+ <OutDir>objxp\</OutDir>
+ <IntDir>objxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\xpbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>obj64\</OutDir>
+ <IntDir>obj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">
+ <OutDir>obj64xp\</OutDir>
+ <IntDir>obj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\xpbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
+ <OutDir>profobj\</OutDir>
+ <IntDir>profobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsprofile &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;DEBUG=0;TDEBUG=0;DEBUGSYM=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
+ <OutDir>profobj64\</OutDir>
+ <IntDir>profobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsprofile &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profilebsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= profileclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\profbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|Win32'">
+ <OutDir>memobj\</OutDir>
+ <IntDir>memobj\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|Win32'">
+ <OutDir>memobjxp\</OutDir>
+ <IntDir>memobjxp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 XP= DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\memxpbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;MEMENTO=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Memento|x64'">
+ <OutDir>memobj64\</OutDir>
+ <IntDir>memobj64\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\membin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MementoXP|x64'">
+ <OutDir>memobj64xp\</OutDir>
+ <IntDir>memobj64xp\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 XP= DEVSTUDIO= gxpsmemento &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementobsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= XP= DEVSTUDIO= mementoclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\memxpbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CUPS=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-cups|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= WITH_CONTRIB=1 debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;DEBUG=1;TDEBUG=1;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugclean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 DEVSTUDIO= WITH_CUPS=1 gxpsdebug &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= WITH_CUPS=1 debugbsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= DEVSTUDIO= debugclean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\debugbin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN64;_DEBUG;DEBUG=1;TDEBUG=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|Win32'">
+ <OutDir>$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak SBR=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gxpswin32.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;HAVE_SSE2=1;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-contrib|x64'">
+ <OutDir>$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <NMakeBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 SBR=1 DEVSTUDIO= WITH_CONTRIB=1 gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean &amp;&amp; nmake -f psi\msvc32.mak WIN64= SBR=1 WITH_CONTRIB=1 DEVSTUDIO= gxps &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= bsc</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>cd .. &amp;&amp; nmake -f psi\msvc32.mak WIN64= WITH_CONTRIB=1 DEVSTUDIO= clean</NMakeCleanCommandLine>
+ <NMakeOutput>$(ProjectDir)\..\bin\gxpswin64.exe</NMakeOutput>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\xps\xpsanalyze.c" />
+ <ClCompile Include="..\xps\xpscff.c" />
+ <ClCompile Include="..\xps\xpscolor.c" />
+ <ClCompile Include="..\xps\xpscommon.c" />
+ <ClCompile Include="..\xps\xpscrc.c" />
+ <ClCompile Include="..\xps\xpsdoc.c" />
+ <ClCompile Include="..\xps\xpsfapi.c" />
+ <ClCompile Include="..\xps\xpsfont.c" />
+ <ClCompile Include="..\xps\xpsglyphs.c" />
+ <ClCompile Include="..\xps\xpsgradient.c" />
+ <ClCompile Include="..\xps\xpshash.c" />
+ <ClCompile Include="..\xps\xpsimage.c" />
+ <ClCompile Include="..\xps\xpsjpeg.c" />
+ <ClCompile Include="..\xps\xpsjxr.c" />
+ <ClCompile Include="..\xps\xpsmem.c" />
+ <ClCompile Include="..\xps\xpsopacity.c" />
+ <ClCompile Include="..\xps\xpspage.c" />
+ <ClCompile Include="..\xps\xpspath.c" />
+ <ClCompile Include="..\xps\xpspng.c" />
+ <ClCompile Include="..\xps\xpsresource.c" />
+ <ClCompile Include="..\xps\xpstiff.c" />
+ <ClCompile Include="..\xps\xpstile.c" />
+ <ClCompile Include="..\xps\xpstop.c" />
+ <ClCompile Include="..\xps\xpsttf.c" />
+ <ClCompile Include="..\xps\xpsutf.c" />
+ <ClCompile Include="..\xps\xpsvisual.c" />
+ <ClCompile Include="..\xps\xpsxml.c" />
+ <ClCompile Include="..\xps\xpszip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\xps\ghostxps.h" />
+ <ClInclude Include="..\xps\xpsfapi.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/windows/ghostxps.vcxproj.filters b/windows/ghostxps.vcxproj.filters
new file mode 100644
index 00000000..ffefb003
--- /dev/null
+++ b/windows/ghostxps.vcxproj.filters
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="xps">
+ <UniqueIdentifier>{b93e1b49-8090-43e2-a089-c82816c9446c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="xps %28.h%29">
+ <UniqueIdentifier>{109bd127-5938-44fd-b458-54958f999ada}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\xps\xpsanalyze.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpscff.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpscolor.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpscommon.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpscrc.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsdoc.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsfapi.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsfont.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsglyphs.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsgradient.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpshash.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsimage.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsjpeg.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsjxr.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsmem.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsopacity.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpspage.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpspath.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpspng.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsresource.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpstiff.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpstile.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpstop.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsttf.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsutf.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsvisual.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpsxml.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xps\xpszip.c">
+ <Filter>xps</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\xps\ghostxps.h">
+ <Filter>xps %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\xps\xpsfapi.h">
+ <Filter>xps %28.h%29</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file